summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Evans <grknight@gentoo.org>2019-04-11 11:08:13 -0400
committerBrian Evans <grknight@gentoo.org>2019-04-11 11:08:13 -0400
commite6f63b37820d165b55e4c9bf262b3d6d92e28c67 (patch)
treedf5db2f24d45da64a8e3d90104cc5021dff3bf9c /AbuseFilter
parentDrop Flow extension (diff)
downloadextensions-e6f63b37820d165b55e4c9bf262b3d6d92e28c67.tar.gz
extensions-e6f63b37820d165b55e4c9bf262b3d6d92e28c67.tar.bz2
extensions-e6f63b37820d165b55e4c9bf262b3d6d92e28c67.zip
Upgrade AbuseFilter to 1.32
Signed-off-by: Brian Evans <grknight@gentoo.org>
Diffstat (limited to 'AbuseFilter')
-rw-r--r--AbuseFilter/.eslintrc.json11
-rw-r--r--AbuseFilter/.gitignore1
-rw-r--r--AbuseFilter/.jshintignore1
-rw-r--r--AbuseFilter/.jshintrc31
-rw-r--r--AbuseFilter/.phpcs.xml13
-rw-r--r--AbuseFilter/.stylelintrc.json2
-rw-r--r--AbuseFilter/AbuseFilter.php124
-rw-r--r--AbuseFilter/CODE_OF_CONDUCT.md2
-rw-r--r--AbuseFilter/Gruntfile.js23
-rw-r--r--AbuseFilter/abusefilter.tables.pg.sql56
-rw-r--r--AbuseFilter/abusefilter.tables.sqlite.sql47
-rw-r--r--AbuseFilter/composer.json25
-rw-r--r--AbuseFilter/extension.json284
-rw-r--r--AbuseFilter/gitinfo.json2
-rw-r--r--AbuseFilter/hooks.txt4
-rw-r--r--AbuseFilter/i18n/af.json42
-rw-r--r--AbuseFilter/i18n/aln.json2
-rw-r--r--AbuseFilter/i18n/am.json6
-rw-r--r--AbuseFilter/i18n/api/ar.json55
-rw-r--r--AbuseFilter/i18n/api/ast.json54
-rw-r--r--AbuseFilter/i18n/api/ba.json14
-rw-r--r--AbuseFilter/i18n/api/bg.json38
-rw-r--r--AbuseFilter/i18n/api/ca.json10
-rw-r--r--AbuseFilter/i18n/api/ce.json11
-rw-r--r--AbuseFilter/i18n/api/cs.json51
-rw-r--r--AbuseFilter/i18n/api/de.json52
-rw-r--r--AbuseFilter/i18n/api/diq.json47
-rw-r--r--AbuseFilter/i18n/api/el.json11
-rw-r--r--AbuseFilter/i18n/api/en.json57
-rw-r--r--AbuseFilter/i18n/api/es.json59
-rw-r--r--AbuseFilter/i18n/api/fa.json57
-rw-r--r--AbuseFilter/i18n/api/fi.json21
-rw-r--r--AbuseFilter/i18n/api/fr.json57
-rw-r--r--AbuseFilter/i18n/api/gl.json54
-rw-r--r--AbuseFilter/i18n/api/he.json57
-rw-r--r--AbuseFilter/i18n/api/hi.json25
-rw-r--r--AbuseFilter/i18n/api/hr.json8
-rw-r--r--AbuseFilter/i18n/api/hsb.json10
-rw-r--r--AbuseFilter/i18n/api/hu.json11
-rw-r--r--AbuseFilter/i18n/api/ia.json52
-rw-r--r--AbuseFilter/i18n/api/ilo.json41
-rw-r--r--AbuseFilter/i18n/api/is.json8
-rw-r--r--AbuseFilter/i18n/api/it.json31
-rw-r--r--AbuseFilter/i18n/api/ja.json34
-rw-r--r--AbuseFilter/i18n/api/ka.json29
-rw-r--r--AbuseFilter/i18n/api/ko.json57
-rw-r--r--AbuseFilter/i18n/api/ksh.json40
-rw-r--r--AbuseFilter/i18n/api/lb.json17
-rw-r--r--AbuseFilter/i18n/api/lt.json28
-rw-r--r--AbuseFilter/i18n/api/mai.json8
-rw-r--r--AbuseFilter/i18n/api/mg.json13
-rw-r--r--AbuseFilter/i18n/api/mk.json54
-rw-r--r--AbuseFilter/i18n/api/ml.json8
-rw-r--r--AbuseFilter/i18n/api/mr.json14
-rw-r--r--AbuseFilter/i18n/api/my.json8
-rw-r--r--AbuseFilter/i18n/api/nb.json52
-rw-r--r--AbuseFilter/i18n/api/ne.json10
-rw-r--r--AbuseFilter/i18n/api/nl.json54
-rw-r--r--AbuseFilter/i18n/api/oc.json8
-rw-r--r--AbuseFilter/i18n/api/pl.json29
-rw-r--r--AbuseFilter/i18n/api/pt-br.json58
-rw-r--r--AbuseFilter/i18n/api/pt.json55
-rw-r--r--AbuseFilter/i18n/api/qqq.json89
-rw-r--r--AbuseFilter/i18n/api/ro.json19
-rw-r--r--AbuseFilter/i18n/api/roa-tara.json54
-rw-r--r--AbuseFilter/i18n/api/ru.json58
-rw-r--r--AbuseFilter/i18n/api/scn.json42
-rw-r--r--AbuseFilter/i18n/api/sv.json56
-rw-r--r--AbuseFilter/i18n/api/te.json10
-rw-r--r--AbuseFilter/i18n/api/ug-arab.json8
-rw-r--r--AbuseFilter/i18n/api/uk.json58
-rw-r--r--AbuseFilter/i18n/api/vi.json41
-rw-r--r--AbuseFilter/i18n/api/yi.json8
-rw-r--r--AbuseFilter/i18n/api/zh-hans.json55
-rw-r--r--AbuseFilter/i18n/api/zh-hant.json57
-rw-r--r--AbuseFilter/i18n/ar.json227
-rw-r--r--AbuseFilter/i18n/arc.json9
-rw-r--r--AbuseFilter/i18n/arz.json24
-rw-r--r--AbuseFilter/i18n/as.json2
-rw-r--r--AbuseFilter/i18n/ast.json212
-rw-r--r--AbuseFilter/i18n/awa.json1
-rw-r--r--AbuseFilter/i18n/az.json47
-rw-r--r--AbuseFilter/i18n/azb.json27
-rw-r--r--AbuseFilter/i18n/ba.json34
-rw-r--r--AbuseFilter/i18n/bar.json1
-rw-r--r--AbuseFilter/i18n/bcl.json36
-rw-r--r--AbuseFilter/i18n/be-tarask.json63
-rw-r--r--AbuseFilter/i18n/be.json230
-rw-r--r--AbuseFilter/i18n/bg.json162
-rw-r--r--AbuseFilter/i18n/bgn.json5
-rw-r--r--AbuseFilter/i18n/bn.json184
-rw-r--r--AbuseFilter/i18n/br.json28
-rw-r--r--AbuseFilter/i18n/bs.json39
-rw-r--r--AbuseFilter/i18n/btm.json13
-rw-r--r--AbuseFilter/i18n/ca.json39
-rw-r--r--AbuseFilter/i18n/ce.json35
-rw-r--r--AbuseFilter/i18n/ckb.json18
-rw-r--r--AbuseFilter/i18n/cs.json217
-rw-r--r--AbuseFilter/i18n/csb.json8
-rw-r--r--AbuseFilter/i18n/cv.json28
-rw-r--r--AbuseFilter/i18n/cy.json1
-rw-r--r--AbuseFilter/i18n/da.json72
-rw-r--r--AbuseFilter/i18n/de.json212
-rw-r--r--AbuseFilter/i18n/diq.json68
-rw-r--r--AbuseFilter/i18n/dsb.json32
-rw-r--r--AbuseFilter/i18n/dtp.json1
-rw-r--r--AbuseFilter/i18n/ee.json2
-rw-r--r--AbuseFilter/i18n/el.json90
-rw-r--r--AbuseFilter/i18n/en.json224
-rw-r--r--AbuseFilter/i18n/eo.json36
-rw-r--r--AbuseFilter/i18n/es-formal.json10
-rw-r--r--AbuseFilter/i18n/es.json249
-rw-r--r--AbuseFilter/i18n/et.json192
-rw-r--r--AbuseFilter/i18n/eu.json46
-rw-r--r--AbuseFilter/i18n/fa.json192
-rw-r--r--AbuseFilter/i18n/fi.json151
-rw-r--r--AbuseFilter/i18n/fo.json15
-rw-r--r--AbuseFilter/i18n/fr.json234
-rw-r--r--AbuseFilter/i18n/frc.json2
-rw-r--r--AbuseFilter/i18n/frp.json26
-rw-r--r--AbuseFilter/i18n/frr.json4
-rw-r--r--AbuseFilter/i18n/fy.json1
-rw-r--r--AbuseFilter/i18n/gl.json159
-rw-r--r--AbuseFilter/i18n/gom-deva.json9
-rw-r--r--AbuseFilter/i18n/got.json11
-rw-r--r--AbuseFilter/i18n/gsw.json26
-rw-r--r--AbuseFilter/i18n/gu.json9
-rw-r--r--AbuseFilter/i18n/he.json237
-rw-r--r--AbuseFilter/i18n/hi.json67
-rw-r--r--AbuseFilter/i18n/hr.json73
-rw-r--r--AbuseFilter/i18n/hrx.json24
-rw-r--r--AbuseFilter/i18n/hsb.json34
-rw-r--r--AbuseFilter/i18n/hu.json57
-rw-r--r--AbuseFilter/i18n/ia.json103
-rw-r--r--AbuseFilter/i18n/id.json33
-rw-r--r--AbuseFilter/i18n/ig.json16
-rw-r--r--AbuseFilter/i18n/ilo.json75
-rw-r--r--AbuseFilter/i18n/inh.json20
-rw-r--r--AbuseFilter/i18n/io.json51
-rw-r--r--AbuseFilter/i18n/is.json42
-rw-r--r--AbuseFilter/i18n/it.json233
-rw-r--r--AbuseFilter/i18n/ja.json121
-rw-r--r--AbuseFilter/i18n/jv.json200
-rw-r--r--AbuseFilter/i18n/ka.json69
-rw-r--r--AbuseFilter/i18n/kab.json1
-rw-r--r--AbuseFilter/i18n/kg.json3
-rw-r--r--AbuseFilter/i18n/khw.json4
-rw-r--r--AbuseFilter/i18n/kjp.json13
-rw-r--r--AbuseFilter/i18n/kk-cyrl.json23
-rw-r--r--AbuseFilter/i18n/km.json10
-rw-r--r--AbuseFilter/i18n/kn.json5
-rw-r--r--AbuseFilter/i18n/ko.json242
-rw-r--r--AbuseFilter/i18n/krc.json2
-rw-r--r--AbuseFilter/i18n/ksh.json62
-rw-r--r--AbuseFilter/i18n/ku-latn.json1
-rw-r--r--AbuseFilter/i18n/lad.json2
-rw-r--r--AbuseFilter/i18n/lb.json85
-rw-r--r--AbuseFilter/i18n/lfn.json5
-rw-r--r--AbuseFilter/i18n/li.json131
-rw-r--r--AbuseFilter/i18n/lij.json1
-rw-r--r--AbuseFilter/i18n/lkt.json10
-rw-r--r--AbuseFilter/i18n/lt.json100
-rw-r--r--AbuseFilter/i18n/lv.json51
-rw-r--r--AbuseFilter/i18n/mai.json17
-rw-r--r--AbuseFilter/i18n/map-bms.json18
-rw-r--r--AbuseFilter/i18n/mg.json20
-rw-r--r--AbuseFilter/i18n/min.json2
-rw-r--r--AbuseFilter/i18n/mk.json225
-rw-r--r--AbuseFilter/i18n/ml.json30
-rw-r--r--AbuseFilter/i18n/mn.json1
-rw-r--r--AbuseFilter/i18n/mni.json8
-rw-r--r--AbuseFilter/i18n/mr.json50
-rw-r--r--AbuseFilter/i18n/ms.json26
-rw-r--r--AbuseFilter/i18n/mt.json25
-rw-r--r--AbuseFilter/i18n/mwl.json3
-rw-r--r--AbuseFilter/i18n/my.json189
-rw-r--r--AbuseFilter/i18n/myv.json8
-rw-r--r--AbuseFilter/i18n/nah.json4
-rw-r--r--AbuseFilter/i18n/nap.json12
-rw-r--r--AbuseFilter/i18n/nb.json131
-rw-r--r--AbuseFilter/i18n/nds-nl.json9
-rw-r--r--AbuseFilter/i18n/nds.json24
-rw-r--r--AbuseFilter/i18n/ne.json25
-rw-r--r--AbuseFilter/i18n/new.json8
-rw-r--r--AbuseFilter/i18n/nl.json150
-rw-r--r--AbuseFilter/i18n/nn.json90
-rw-r--r--AbuseFilter/i18n/oc.json54
-rw-r--r--AbuseFilter/i18n/or.json25
-rw-r--r--AbuseFilter/i18n/os.json2
-rw-r--r--AbuseFilter/i18n/pa.json1
-rw-r--r--AbuseFilter/i18n/pam.json4
-rw-r--r--AbuseFilter/i18n/pfl.json30
-rw-r--r--AbuseFilter/i18n/pl.json177
-rw-r--r--AbuseFilter/i18n/pms.json27
-rw-r--r--AbuseFilter/i18n/pnb.json8
-rw-r--r--AbuseFilter/i18n/ps.json11
-rw-r--r--AbuseFilter/i18n/pt-br.json232
-rw-r--r--AbuseFilter/i18n/pt.json238
-rw-r--r--AbuseFilter/i18n/qqq.json224
-rw-r--r--AbuseFilter/i18n/ro.json45
-rw-r--r--AbuseFilter/i18n/roa-tara.json166
-rw-r--r--AbuseFilter/i18n/ru.json267
-rw-r--r--AbuseFilter/i18n/rue.json38
-rw-r--r--AbuseFilter/i18n/sa.json9
-rw-r--r--AbuseFilter/i18n/sah.json25
-rw-r--r--AbuseFilter/i18n/scn.json63
-rw-r--r--AbuseFilter/i18n/sco.json1
-rw-r--r--AbuseFilter/i18n/sd.json31
-rw-r--r--AbuseFilter/i18n/sh.json5
-rw-r--r--AbuseFilter/i18n/si.json26
-rw-r--r--AbuseFilter/i18n/sk.json152
-rw-r--r--AbuseFilter/i18n/skr-arab.json51
-rw-r--r--AbuseFilter/i18n/sl.json120
-rw-r--r--AbuseFilter/i18n/sq.json28
-rw-r--r--AbuseFilter/i18n/sr-ec.json242
-rw-r--r--AbuseFilter/i18n/sr-el.json33
-rw-r--r--AbuseFilter/i18n/stq.json21
-rw-r--r--AbuseFilter/i18n/sv.json223
-rw-r--r--AbuseFilter/i18n/sw.json23
-rw-r--r--AbuseFilter/i18n/szl.json1
-rw-r--r--AbuseFilter/i18n/ta.json17
-rw-r--r--AbuseFilter/i18n/tcy.json2
-rw-r--r--AbuseFilter/i18n/te.json36
-rw-r--r--AbuseFilter/i18n/tg-cyrl.json2
-rw-r--r--AbuseFilter/i18n/th.json24
-rw-r--r--AbuseFilter/i18n/tk.json24
-rw-r--r--AbuseFilter/i18n/tl.json43
-rw-r--r--AbuseFilter/i18n/tr.json84
-rw-r--r--AbuseFilter/i18n/tt-cyrl.json1
-rw-r--r--AbuseFilter/i18n/tzm.json3
-rw-r--r--AbuseFilter/i18n/udm.json3
-rw-r--r--AbuseFilter/i18n/ug-arab.json25
-rw-r--r--AbuseFilter/i18n/uk.json210
-rw-r--r--AbuseFilter/i18n/ur.json44
-rw-r--r--AbuseFilter/i18n/vec.json32
-rw-r--r--AbuseFilter/i18n/vep.json2
-rw-r--r--AbuseFilter/i18n/vi.json60
-rw-r--r--AbuseFilter/i18n/wa.json9
-rw-r--r--AbuseFilter/i18n/war.json1
-rw-r--r--AbuseFilter/i18n/wuu.json4
-rw-r--r--AbuseFilter/i18n/xmf.json3
-rw-r--r--AbuseFilter/i18n/yi.json40
-rw-r--r--AbuseFilter/i18n/yo.json8
-rw-r--r--AbuseFilter/i18n/yue.json64
-rw-r--r--AbuseFilter/i18n/zgh.json8
-rw-r--r--AbuseFilter/i18n/zh-hans.json231
-rw-r--r--AbuseFilter/i18n/zh-hant.json227
-rw-r--r--AbuseFilter/i18n/zh-hk.json13
-rw-r--r--AbuseFilter/includes/AFComputedVariable.php102
-rw-r--r--AbuseFilter/includes/AbuseFilter.php (renamed from AbuseFilter/includes/AbuseFilter.class.php)1417
-rw-r--r--AbuseFilter/includes/AbuseFilterChangesList.php123
-rw-r--r--AbuseFilter/includes/AbuseFilterHooks.php (renamed from AbuseFilter/includes/AbuseFilter.hooks.php)292
-rw-r--r--AbuseFilter/includes/AbuseFilterModifyLogFormatter.php9
-rw-r--r--AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php13
-rw-r--r--AbuseFilter/includes/AbuseFilterSuppressLogFormatter.php16
-rw-r--r--AbuseFilter/includes/AbuseFilterVariableHolder.php78
-rw-r--r--AbuseFilter/includes/AbuseLogHitFormatter.php7
-rw-r--r--AbuseFilter/includes/TableDiffFormatterFullContext.php36
-rw-r--r--AbuseFilter/includes/Views/AbuseFilterView.php315
-rw-r--r--AbuseFilter/includes/Views/AbuseFilterViewDiff.php194
-rw-r--r--AbuseFilter/includes/Views/AbuseFilterViewEdit.php1213
-rw-r--r--AbuseFilter/includes/Views/AbuseFilterViewExamine.php178
-rw-r--r--AbuseFilter/includes/Views/AbuseFilterViewHistory.php269
-rw-r--r--AbuseFilter/includes/Views/AbuseFilterViewImport.php5
-rw-r--r--AbuseFilter/includes/Views/AbuseFilterViewList.php583
-rw-r--r--AbuseFilter/includes/Views/AbuseFilterViewRevert.php220
-rw-r--r--AbuseFilter/includes/Views/AbuseFilterViewTestBatch.php196
-rw-r--r--AbuseFilter/includes/Views/AbuseFilterViewTools.php69
-rw-r--r--AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php21
-rw-r--r--AbuseFilter/includes/api/ApiAbuseFilterCheckSyntax.php10
-rw-r--r--AbuseFilter/includes/api/ApiAbuseFilterEvalExpression.php8
-rw-r--r--AbuseFilter/includes/api/ApiAbuseFilterUnblockAutopromote.php22
-rw-r--r--AbuseFilter/includes/api/ApiQueryAbuseFilters.php12
-rw-r--r--AbuseFilter/includes/api/ApiQueryAbuseLog.php57
-rw-r--r--AbuseFilter/includes/pagers/AbuseFilterExaminePager.php82
-rw-r--r--AbuseFilter/includes/pagers/AbuseFilterHistoryPager.php229
-rw-r--r--AbuseFilter/includes/pagers/AbuseFilterPager.php296
-rw-r--r--AbuseFilter/includes/pagers/AbuseLogPager.php89
-rw-r--r--AbuseFilter/includes/pagers/GlobalAbuseFilterPager.php81
-rw-r--r--AbuseFilter/includes/parser/AFPData.php210
-rw-r--r--AbuseFilter/includes/parser/AFPParserState.php4
-rw-r--r--AbuseFilter/includes/parser/AFPToken.php10
-rw-r--r--AbuseFilter/includes/parser/AFPTreeNode.php29
-rw-r--r--AbuseFilter/includes/parser/AFPTreeParser.php27
-rw-r--r--AbuseFilter/includes/parser/AFPUserVisibleException.php15
-rw-r--r--AbuseFilter/includes/parser/AbuseFilterCachingParser.php69
-rw-r--r--AbuseFilter/includes/parser/AbuseFilterParser.php714
-rw-r--r--AbuseFilter/includes/parser/AbuseFilterTokenizer.php39
-rw-r--r--AbuseFilter/includes/special/SpecialAbuseFilter.php21
-rw-r--r--AbuseFilter/includes/special/SpecialAbuseLog.php748
-rw-r--r--AbuseFilter/maintenance/addMissingLoggingEntries.php24
-rw-r--r--AbuseFilter/maintenance/normalizeThrottleParameters.php411
-rw-r--r--AbuseFilter/maintenance/purgeOldLogIPData.php13
-rw-r--r--AbuseFilter/modules/ext.abuseFilter.css80
-rw-r--r--AbuseFilter/modules/ext.abuseFilter.edit.js460
-rw-r--r--AbuseFilter/modules/ext.abuseFilter.examine.js75
-rw-r--r--AbuseFilter/modules/ext.abuseFilter.tools.js93
-rw-r--r--AbuseFilter/modules/mode-abusefilter.js114
-rw-r--r--AbuseFilter/package.json29
-rw-r--r--AbuseFilter/phpcs.xml26
-rw-r--r--AbuseFilter/tests/parserTests/arith.t28
-rw-r--r--AbuseFilter/tests/parserTests/array-assignment.r (renamed from AbuseFilter/tests/parserTests/list-assignment.r)0
-rw-r--r--AbuseFilter/tests/parserTests/array-assignment.t6
-rw-r--r--AbuseFilter/tests/parserTests/array-comparisons.r (renamed from AbuseFilter/tests/parserTests/list-inequality.r)0
-rw-r--r--AbuseFilter/tests/parserTests/array-comparisons.t15
-rw-r--r--AbuseFilter/tests/parserTests/atombraces.r1
-rw-r--r--AbuseFilter/tests/parserTests/atombraces.t1
-rw-r--r--AbuseFilter/tests/parserTests/cast.t2
-rw-r--r--AbuseFilter/tests/parserTests/ccnorm-contains-all.r (renamed from AbuseFilter/tests/parserTests/shortcircuit.r)0
-rw-r--r--AbuseFilter/tests/parserTests/ccnorm-contains-all.t1
-rw-r--r--AbuseFilter/tests/parserTests/ccnorm-contains-any.r (renamed from AbuseFilter/tests/parserTests/whitespace.r)0
-rw-r--r--AbuseFilter/tests/parserTests/ccnorm-contains-any.t1
-rw-r--r--AbuseFilter/tests/parserTests/comment.t5
-rw-r--r--AbuseFilter/tests/parserTests/concatenation.r1
-rw-r--r--AbuseFilter/tests/parserTests/concatenation.t7
-rw-r--r--AbuseFilter/tests/parserTests/contains-all.r1
-rw-r--r--AbuseFilter/tests/parserTests/contains-all.t1
-rw-r--r--AbuseFilter/tests/parserTests/contains-any.r1
-rw-r--r--AbuseFilter/tests/parserTests/contains-any.t1
-rw-r--r--AbuseFilter/tests/parserTests/contains.r1
-rw-r--r--AbuseFilter/tests/parserTests/contains.t7
-rw-r--r--AbuseFilter/tests/parserTests/containsfunction.r1
-rw-r--r--AbuseFilter/tests/parserTests/containsfunction.t2
-rw-r--r--AbuseFilter/tests/parserTests/count.t14
-rw-r--r--AbuseFilter/tests/parserTests/equals-to-any.r1
-rw-r--r--AbuseFilter/tests/parserTests/equals-to-any.t4
-rw-r--r--AbuseFilter/tests/parserTests/expn.t2
-rw-r--r--AbuseFilter/tests/parserTests/float.t2
-rw-r--r--AbuseFilter/tests/parserTests/get-matches.r1
-rw-r--r--AbuseFilter/tests/parserTests/get-matches.t4
-rw-r--r--AbuseFilter/tests/parserTests/ifthen.t3
-rw-r--r--AbuseFilter/tests/parserTests/in.t2
-rw-r--r--AbuseFilter/tests/parserTests/lazyboolinvert.r1
-rw-r--r--AbuseFilter/tests/parserTests/lazyboolinvert.t1
-rw-r--r--AbuseFilter/tests/parserTests/lazyfunction.r1
-rw-r--r--AbuseFilter/tests/parserTests/lazyfunction.t1
-rw-r--r--AbuseFilter/tests/parserTests/lazykeyword.r1
-rw-r--r--AbuseFilter/tests/parserTests/lazykeyword.t1
-rw-r--r--AbuseFilter/tests/parserTests/lazypow.r1
-rw-r--r--AbuseFilter/tests/parserTests/lazypow.t1
-rw-r--r--AbuseFilter/tests/parserTests/lazysum.r1
-rw-r--r--AbuseFilter/tests/parserTests/lazysum.t1
-rw-r--r--AbuseFilter/tests/parserTests/lazyunarys.r1
-rw-r--r--AbuseFilter/tests/parserTests/lazyunarys.t1
-rw-r--r--AbuseFilter/tests/parserTests/list-assignment.t6
-rw-r--r--AbuseFilter/tests/parserTests/list-inequality.t3
-rw-r--r--AbuseFilter/tests/parserTests/multipleskipbraces.r1
-rw-r--r--AbuseFilter/tests/parserTests/multipleskipbraces.t1
-rw-r--r--AbuseFilter/tests/parserTests/mwexamples-arithmetic.r1
-rw-r--r--AbuseFilter/tests/parserTests/mwexamples-arithmetic.t8
-rw-r--r--AbuseFilter/tests/parserTests/mwexamples-arrays.r1
-rw-r--r--AbuseFilter/tests/parserTests/mwexamples-arrays.t10
-rw-r--r--AbuseFilter/tests/parserTests/mwexamples-bools.r1
-rw-r--r--AbuseFilter/tests/parserTests/mwexamples-bools.t13
-rw-r--r--AbuseFilter/tests/parserTests/mwexamples-comparisons.r1
-rw-r--r--AbuseFilter/tests/parserTests/mwexamples-comparisons.t22
-rw-r--r--AbuseFilter/tests/parserTests/mwexamples-functions.r1
-rw-r--r--AbuseFilter/tests/parserTests/mwexamples-functions.t22
-rw-r--r--AbuseFilter/tests/parserTests/mwexamples-keywords.r1
-rw-r--r--AbuseFilter/tests/parserTests/mwexamples-keywords.t10
-rw-r--r--AbuseFilter/tests/parserTests/ord.t9
-rw-r--r--AbuseFilter/tests/parserTests/rcount.r1
-rw-r--r--AbuseFilter/tests/parserTests/rcount.t3
-rw-r--r--AbuseFilter/tests/parserTests/rmwhitespace.r1
-rw-r--r--AbuseFilter/tests/parserTests/rmwhitespace.t2
-rw-r--r--AbuseFilter/tests/parserTests/sanitize.r1
-rw-r--r--AbuseFilter/tests/parserTests/sanitize.t1
-rw-r--r--AbuseFilter/tests/parserTests/shortcircuit-and.r1
-rw-r--r--AbuseFilter/tests/parserTests/shortcircuit-and.t2
-rw-r--r--AbuseFilter/tests/parserTests/shortcircuit-or.r1
-rw-r--r--AbuseFilter/tests/parserTests/shortcircuit-or.t (renamed from AbuseFilter/tests/parserTests/shortcircuit.t)0
-rw-r--r--AbuseFilter/tests/parserTests/specialratio.t3
-rw-r--r--AbuseFilter/tests/parserTests/string.t7
-rw-r--r--AbuseFilter/tests/parserTests/strpos.r1
-rw-r--r--AbuseFilter/tests/parserTests/strpos.t4
-rw-r--r--AbuseFilter/tests/parserTests/substr.r1
-rw-r--r--AbuseFilter/tests/parserTests/substr.t2
-rw-r--r--AbuseFilter/tests/phan/config.php19
-rw-r--r--AbuseFilter/tests/phpunit/AFPDataTest.php122
-rw-r--r--AbuseFilter/tests/phpunit/AbuseFilterConsequencesTest.php902
-rw-r--r--AbuseFilter/tests/phpunit/AbuseFilterParserTest.php744
-rw-r--r--AbuseFilter/tests/phpunit/AbuseFilterSaveTest.php596
-rw-r--r--AbuseFilter/tests/phpunit/AbuseFilterTest.php1413
-rw-r--r--AbuseFilter/tests/phpunit/AbuseFilterTokenizerTest.php146
-rw-r--r--AbuseFilter/tests/phpunit/parserTest.php145
-rw-r--r--AbuseFilter/version6
386 files changed, 19497 insertions, 7884 deletions
diff --git a/AbuseFilter/.eslintrc.json b/AbuseFilter/.eslintrc.json
new file mode 100644
index 00000000..a29fd888
--- /dev/null
+++ b/AbuseFilter/.eslintrc.json
@@ -0,0 +1,11 @@
+{
+ "extends": "wikimedia",
+ "env": {
+ "browser": true,
+ "jquery": true
+ },
+ "globals": {
+ "mediaWiki": false,
+ "OO": false
+ }
+}
diff --git a/AbuseFilter/.gitignore b/AbuseFilter/.gitignore
index 3361170a..d08bf099 100644
--- a/AbuseFilter/.gitignore
+++ b/AbuseFilter/.gitignore
@@ -22,3 +22,4 @@ project.index
## Sublime
sublime-*
sftp-config.json
+/tests/phan/issues
diff --git a/AbuseFilter/.jshintignore b/AbuseFilter/.jshintignore
deleted file mode 100644
index 3c3629e6..00000000
--- a/AbuseFilter/.jshintignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules
diff --git a/AbuseFilter/.jshintrc b/AbuseFilter/.jshintrc
deleted file mode 100644
index 63b4f381..00000000
--- a/AbuseFilter/.jshintrc
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- /* Common */
-
- // Enforcing
- "camelcase": true,
- "curly": true,
- "eqeqeq": true,
- "immed": true,
- "latedef": "nofunc",
- "newcap": true,
- "noarg": true,
- "noempty": true,
- "nonew": true,
- "quotmark": "single",
- "trailing": true,
- "undef": true,
- "unused": true,
- // Legacy
- "onevar": true,
-
- /* Local */
-
- // Enforcing
- // Environment
- "browser": true,
- "jquery": true,
-
- "globals": {
- "mediaWiki": false
- }
-}
diff --git a/AbuseFilter/.phpcs.xml b/AbuseFilter/.phpcs.xml
new file mode 100644
index 00000000..77c6d677
--- /dev/null
+++ b/AbuseFilter/.phpcs.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<ruleset>
+ <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
+ </rule>
+ <rule ref="Generic.Files.LineLength">
+ <exclude-pattern>AbuseFilter\.alias\.php</exclude-pattern>
+ <exclude-pattern>AbuseFilterParserTest\.php</exclude-pattern>
+ <exclude-pattern>AbuseFilterConsequencesTest\.php</exclude-pattern>
+ </rule>
+ <file>.</file>
+ <arg name="extensions" value="php,php5,inc"/>
+ <arg name="encoding" value="UTF-8"/>
+</ruleset>
diff --git a/AbuseFilter/.stylelintrc.json b/AbuseFilter/.stylelintrc.json
index d691e9d9..b681cd2e 100644
--- a/AbuseFilter/.stylelintrc.json
+++ b/AbuseFilter/.stylelintrc.json
@@ -1,6 +1,6 @@
{
"extends": "stylelint-config-wikimedia",
"rules": {
- "selector-no-id": null
+ "selector-max-id": null
}
}
diff --git a/AbuseFilter/AbuseFilter.php b/AbuseFilter/AbuseFilter.php
deleted file mode 100644
index 7f13eaf1..00000000
--- a/AbuseFilter/AbuseFilter.php
+++ /dev/null
@@ -1,124 +0,0 @@
-<?php
-/**
- * Automatically applies heuristics to edits.
- *
- * @file
- * @ingroup Extensions
- * @author Andrew Garrett <andrew@epstone.net>
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
- * Includes GFDL-licensed images retrieved from
- * http://commons.wikimedia.org/wiki/File:Yes_check.svg and
- * http://commons.wikimedia.org/wiki/File:Red_x.svg -- both have been
- * downsampled and converted to PNG.
- * @link http://www.mediawiki.org/wiki/Extension:AbuseFilter Documentation
- */
-
-if ( function_exists( 'wfLoadExtension' ) ) {
- wfLoadExtension( 'AbuseFilter' );
- // Keep i18n globals so mergeMessageFileList.php doesn't break
- $wgMessagesDirs['AbuseFilter'] = __DIR__ . '/i18n';
- $wgExtensionMessagesFiles['AbuseFilterAliases'] = __DIR__ . '/AbuseFilter.alias.php';
- /* wfWarn(
- 'Deprecated PHP entry point used for AbuseFilter extension. ' .
- 'Please use wfLoadExtension instead, ' .
- 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
- ); */
- return;
-} else {
- die( 'This version of the AbuseFilter extension requires MediaWiki 1.29+' );
-}
-
-// Global declarations and documentation kept for IDEs and PHP documentors.
-// This code is never executed.
-
-/**
- * The possible actions that can be taken by abuse filters.
- *
- * @var array [action name => is enabled?] At the end of setup, false values will be filtered out
- */
-$wgAbuseFilterActions = [ /* See extension.json */ ];
-
-$wgAbuseFilterAvailableActions = 'REMOVED'; // use $wgAbuseFilterActions instead
-
-/**
- * The maximum number of 'conditions' that can be used each time the filters are run against a
- * change. (More complex filters require more 'conditions').
- */
-$wgAbuseFilterConditionLimit = 1000;
-
-/**
- * Disable filters if they match more than X edits, constituting more than Y%
- * of the last Z edits, if they have been changed in the last S seconds.
- */
-$wgAbuseFilterEmergencyDisableThreshold['default'] = 0.05;
-/** @see $wgAbuseFilterEmergencyDisableThreshold */
-$wgAbuseFilterEmergencyDisableCount['default'] = 2;
-/** @see $wgAbuseFilterEmergencyDisableThreshold */
-$wgAbuseFilterEmergencyDisableAge['default'] = 86400; // One day.
-
-/** Abuse filter parser class */
-$wgAbuseFilterParserClass = 'AbuseFilterParser';
-
-/**
- * Do users need "abusefilter-modify-restricted" user right as well as "abusefilter-modify"
- * in order to create or modify filters which carry out this action?
- *
- * @var array action name => is restricted?
- */
-$wgAbuseFilterRestrictions = [ /* See extension.json */ ];
-
-$wgAbuseFilterRestrictedActions = 'REMOVED'; // use $wgAbuseFilterRestrictions instead
-
-/**
- * Allows to configure the extension to send hit notifications to Special:RecentChanges or UDP.
- * Available options: rc, udp, rcandudp
- * @var string|false
- */
-$wgAbuseFilterNotifications = false;
-
-/** Enable notifications for private filters */
-$wgAbuseFilterNotificationsPrivate = false;
-
-/** Name of a database where global abuse filters will be stored in */
-$wgAbuseFilterCentralDB = null;
-/** Set this variable to true for the wiki where global AbuseFilters are stored in */
-$wgAbuseFilterIsCentral = false;
-
-/**
- * Disallow centralised filters from taking actions that locally
- * block, remove from groups, or revoke permissions
- */
-$wgAbuseFilterDisallowGlobalLocalBlocks = false;
-
-/** Block duration for logged in users */
-$wgAbuseFilterBlockDuration = 'indefinite';
-/** Block duration for anonymous users ($wgAbuseFilterBlockDuration will be used if null) */
-$wgAbuseFilterAnonBlockDuration = null;
-
-/** Callback functions for custom actions */
-$wgAbuseFilterCustomActionsHandlers = [];
-
-/**
- * The list of "groups" filters can be divided into – used for applying edit filters to certain
- * types of actions. By default there is only one group.
- */
-$wgAbuseFilterValidGroups = [ 'default' ];
-
-/** Default warning messages, per filter group */
-$wgAbuseFilterDefaultWarningMessage = [ /* See extension.json */ ];
-
-/**
- * Age used as cutoff when purging old IP log data.
- * Used by maintenance script purgeOldLogIPData.php
- */
-$wgAbuseFilterLogIPMaxAge = 3 * 30 * 24 * 3600; // 3 months
-
-/**
- * Whether to record the average time taken and average number of conditions used by each filter.
- */
-$wgAbuseFilterProfile = false;
-
-/**
- * Whether to record runtime metrics for all filters combined.
- */
-$wgAbuseFilterRuntimeProfile = false;
diff --git a/AbuseFilter/CODE_OF_CONDUCT.md b/AbuseFilter/CODE_OF_CONDUCT.md
index d8e5d087..498acf76 100644
--- a/AbuseFilter/CODE_OF_CONDUCT.md
+++ b/AbuseFilter/CODE_OF_CONDUCT.md
@@ -1 +1 @@
-The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Code_of_Conduct).
+The development of this software is covered by a [Code of Conduct](https://www.mediawiki.org/wiki/Special:MyLanguage/Code_of_Conduct).
diff --git a/AbuseFilter/Gruntfile.js b/AbuseFilter/Gruntfile.js
index 69ec8e0f..a572f9af 100644
--- a/AbuseFilter/Gruntfile.js
+++ b/AbuseFilter/Gruntfile.js
@@ -1,27 +1,24 @@
-/*jshint node:true */
+/* eslint-env node */
module.exports = function ( grunt ) {
- grunt.loadNpmTasks( 'grunt-contrib-jshint' );
+ var conf = grunt.file.readJSON( 'extension.json' );
+
grunt.loadNpmTasks( 'grunt-jsonlint' );
grunt.loadNpmTasks( 'grunt-banana-checker' );
+ grunt.loadNpmTasks( 'grunt-eslint' );
grunt.loadNpmTasks( 'grunt-stylelint' );
grunt.initConfig( {
- jshint: {
- options: {
- jshintrc: true
- },
+ jsonlint: {
all: [
- '**/*.js',
+ '**/*.json',
'!node_modules/**',
'!vendor/**'
]
},
- banana: {
- all: 'i18n/'
- },
- jsonlint: {
+ banana: conf.MessagesDirs,
+ eslint: {
all: [
- '**/*.json',
+ '**/*.js',
'!node_modules/**',
'!vendor/**'
]
@@ -35,6 +32,6 @@ module.exports = function ( grunt ) {
}
} );
- grunt.registerTask( 'test', [ 'jshint', 'jsonlint', 'banana', 'stylelint' ] );
+ grunt.registerTask( 'test', [ 'jsonlint', 'banana', 'eslint', 'stylelint' ] );
grunt.registerTask( 'default', 'test' );
};
diff --git a/AbuseFilter/abusefilter.tables.pg.sql b/AbuseFilter/abusefilter.tables.pg.sql
index 3336c30c..272eb50a 100644
--- a/AbuseFilter/abusefilter.tables.pg.sql
+++ b/AbuseFilter/abusefilter.tables.pg.sql
@@ -1,9 +1,5 @@
-- SQL tables for AbuseFilter extension (Postgres version)
--- Note: This does not currently work, as the extension generates queries
--- like this: SELECT af_hidden FROM abuse_filter WHERE af_id = 'new' LIMIT 1
--- Which makes no sense as af_id is a BIGINT in the MySQL version of the schema
-
BEGIN;
CREATE SEQUENCE abuse_filter_af_id_seq;
@@ -21,9 +17,11 @@ CREATE TABLE abuse_filter (
af_throttled SMALLINT NOT NULL DEFAULT 0,
af_deleted SMALLINT NOT NULL DEFAULT 0,
af_actions TEXT NOT NULL DEFAULT '',
- af_global SMALLINT NOT NULL DEFAULT 0
+ af_global SMALLINT NOT NULL DEFAULT 0,
+ af_group TEXT NOT NULL DEFAULT 'default'
);
CREATE INDEX abuse_filter_user ON abuse_filter(af_user);
+CREATE INDEX abuse_filter_group_enabled_id ON abuse_filter(af_group,af_enabled,af_id);
CREATE TABLE abuse_filter_action (
@@ -37,27 +35,32 @@ CREATE INDEX abuse_filter_action_consequence ON abuse_filter_action(afa_conseque
CREATE SEQUENCE abuse_filter_log_afl_id_seq;
CREATE TABLE abuse_filter_log (
- afl_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('abuse_filter_log_afl_id_seq'),
- afl_filter TEXT NOT NULL,
- afl_user INTEGER NOT NULL,
- afl_user_text TEXT NOT NULL,
- afl_ip TEXT NOT NULL,
- afl_action TEXT NOT NULL,
- afl_actions TEXT NOT NULL,
- afl_var_dump TEXT NOT NULL,
- afl_timestamp TIMESTAMPTZ NOT NULL,
- afl_namespace INTEGER NOT NULL,
- afl_title TEXT NOT NULL,
- afl_wiki TEXT NULL,
- afl_deleted SMALLINT NULL
+ afl_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('abuse_filter_log_afl_id_seq'),
+ afl_filter TEXT NOT NULL,
+ afl_user INTEGER NOT NULL,
+ afl_user_text TEXT NOT NULL,
+ afl_ip TEXT NOT NULL,
+ afl_action TEXT NOT NULL,
+ afl_actions TEXT NOT NULL,
+ afl_var_dump TEXT NOT NULL,
+ afl_timestamp TIMESTAMPTZ NOT NULL,
+ afl_namespace INTEGER NOT NULL,
+ afl_title TEXT NOT NULL,
+ afl_wiki TEXT NULL,
+ afl_deleted SMALLINT NOT NULL DEFAULT 0,
+ afl_patrolled_by INTEGER NULL,
+ afl_rev_id INTEGER NULL,
+ afl_log_id INTEGER NULL
);
-CREATE INDEX abuse_filter_log_filter ON abuse_filter_log(afl_filter);
-CREATE INDEX abuse_filter_log_ip ON abuse_filter_log(afl_ip);
-CREATE INDEX abuse_filter_log_timestamp ON abuse_filter_log(afl_timestamp);
-CREATE INDEX abuse_filter_log_title ON abuse_filter_log(afl_namespace, afl_title);
-CREATE INDEX abuse_filter_log_user ON abuse_filter_log(afl_user);
-CREATE INDEX abuse_filter_log_user_text ON abuse_filter_log(afl_user_text);
-CREATE INDEX abuse_filter_log_wiki ON abuse_filter_log(afl_wiki);
+
+CREATE INDEX abuse_filter_log_filter_timestamp ON abuse_filter_log(afl_filter,afl_timestamp);
+CREATE INDEX abuse_filter_log_user_timestamp ON abuse_filter_log(afl_user,afl_user_text,afl_timestamp);
+CREATE INDEX abuse_filter_log_timestamp ON abuse_filter_log(afl_timestamp);
+CREATE INDEX abuse_filter_log_page_timestamp ON abuse_filter_log(afl_namespace, afl_title, afl_timestamp);
+CREATE INDEX abuse_filter_log_ip_timestamp ON abuse_filter_log(afl_ip, afl_timestamp);
+CREATE INDEX abuse_filter_log_rev_id ON abuse_filter_log(afl_rev_id);
+CREATE INDEX abuse_filter_log_log_id ON abuse_filter_log(afl_log_id);
+CREATE INDEX abuse_filter_log_wiki_timestamp ON abuse_filter_log(afl_wiki, afl_timestamp);
CREATE SEQUENCE abuse_filter_history_afh_id_seq;
CREATE TABLE abuse_filter_history (
@@ -72,7 +75,8 @@ CREATE TABLE abuse_filter_history (
afh_public_comments TEXT NOT NULL,
afh_actions TEXT NOT NULL,
afh_deleted SMALLINT NOT NULL DEFAULT 0,
- afh_changed_fields TEXT NOT NULL DEFAULT ''
+ afh_changed_fields TEXT NOT NULL DEFAULT '',
+ afh_group TEXT NULL
);
CREATE INDEX abuse_filter_history_filter ON abuse_filter_history(afh_filter);
CREATE INDEX abuse_filter_history_user ON abuse_filter_history(afh_user);
diff --git a/AbuseFilter/abusefilter.tables.sqlite.sql b/AbuseFilter/abusefilter.tables.sqlite.sql
index 6c82370f..d36c35ce 100644
--- a/AbuseFilter/abusefilter.tables.sqlite.sql
+++ b/AbuseFilter/abusefilter.tables.sqlite.sql
@@ -1,11 +1,11 @@
-- SQL tables for AbuseFilter extension
CREATE TABLE /*$wgDBprefix*/abuse_filter (
- af_id BIGINT unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+ af_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
af_pattern BLOB NOT NULL,
af_user BIGINT unsigned NOT NULL,
- af_user_text varchar(255) binary NOT NULL,
- af_timestamp binary(14) NOT NULL,
+ af_user_text varbinary(255) NOT NULL,
+ af_timestamp varbinary(14) NOT NULL,
af_enabled tinyint(1) not null default 1,
af_comments BLOB,
af_public_comments TINYBLOB,
@@ -13,14 +13,16 @@ CREATE TABLE /*$wgDBprefix*/abuse_filter (
af_hit_count bigint not null default 0,
af_throttled tinyint(1) NOT NULL default 0,
af_deleted tinyint(1) NOT NULL DEFAULT 0,
- af_actions varchar(255) NOT NULL DEFAULT '',
- af_global tinyint(1) NOT NULL DEFAULT 0
+ af_actions varbinary(255) NOT NULL DEFAULT '',
+ af_global tinyint(1) NOT NULL DEFAULT 0,
+ af_group varbinary(64) NOT NULL DEFAULT 'default'
) /*$wgDBTableOptions*/;
CREATE INDEX af_user ON /*$wgDBprefix*/abuse_filter (af_user);
+CREATE INDEX af_group_enabled ON /*$wgDBprefix*/abuse_filter (af_group,af_enabled,af_id);
CREATE TABLE /*$wgDBprefix*/abuse_filter_action (
- afa_filter BIGINT unsigned NOT NULL,
- afa_consequence varchar(255) NOT NULL,
+ afa_filter INTEGER NOT NULL,
+ afa_consequence varbinary(255) NOT NULL,
afa_parameters TINYBLOB NOT NULL,
PRIMARY KEY (afa_filter,afa_consequence)
@@ -28,20 +30,22 @@ CREATE TABLE /*$wgDBprefix*/abuse_filter_action (
CREATE INDEX afa_consequence ON /*$wgDBprefix*/abuse_filter_action (afa_consequence);
CREATE TABLE /*$wgDBprefix*/abuse_filter_log (
- afl_id BIGINT unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
- afl_filter varchar(64) binary NOT NULL,
+ afl_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ afl_filter varbinary(64) NOT NULL,
afl_user BIGINT unsigned NOT NULL,
- afl_user_text varchar(255) binary NOT NULL,
- afl_ip varchar(255) not null,
+ afl_user_text varbinary(255) NOT NULL,
+ afl_ip varbinary(255) not null,
afl_action varbinary(255) not null,
afl_actions varbinary(255) not null,
afl_var_dump BLOB NOT NULL,
- afl_timestamp binary(14) NOT NULL,
+ afl_timestamp varbinary(14) NOT NULL,
afl_namespace int NOT NULL,
- afl_title varchar(255) binary NOT NULL,
- afl_wiki varchar(64) binary NULL,
+ afl_title varbinary(255) NOT NULL,
+ afl_wiki varbinary(64) NULL,
afl_deleted tinyint(1) NOT NULL DEFAULT 0,
- afl_patrolled_by int unsigned NULL
+ afl_patrolled_by int unsigned NULL,
+ afl_rev_id int unsigned,
+ afl_log_id int unsigned
) /*$wgDBTableOptions*/;
CREATE INDEX afl_filter_timestamp ON /*$wgDBprefix*/abuse_filter_log (afl_filter,afl_timestamp);
CREATE INDEX afl_user_timestamp ON /*$wgDBprefix*/abuse_filter_log (afl_user,afl_user_text,afl_timestamp);
@@ -49,20 +53,23 @@ CREATE INDEX afl_timestamp ON /*$wgDBprefix*/abuse_filter_log (afl_timestamp);
CREATE INDEX afl_page_timestamp ON /*$wgDBprefix*/abuse_filter_log (afl_namespace, afl_title, afl_timestamp);
CREATE INDEX afl_ip_timestamp ON /*$wgDBprefix*/abuse_filter_log (afl_ip, afl_timestamp);
CREATE INDEX afl_wiki_timestamp ON /*$wgDBprefix*/abuse_filter_log (afl_wiki, afl_timestamp);
+CREATE INDEX afl_rev_id ON /*$wgDBprefix*/abuse_filter_log (afl_rev_id);
+CREATE INDEX afl_log_id ON /*$wgDBprefix*/abuse_filter_log (afl_log_id);
CREATE TABLE /*$wgDBprefix*/abuse_filter_history (
- afh_id BIGINT unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
- afh_filter BIGINT unsigned NOT NULL,
+ afh_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ afh_filter INTEGER NOT NULL,
afh_user BIGINT unsigned NOT NULL,
- afh_user_text varchar(255) binary NOT NULL,
- afh_timestamp binary(14) NOT NULL,
+ afh_user_text varbinary(255) NOT NULL,
+ afh_timestamp varbinary(14) NOT NULL,
afh_pattern BLOB NOT NULL,
afh_comments BLOB NOT NULL,
afh_flags TINYBLOB NOT NULL,
afh_public_comments TINYBLOB,
afh_actions BLOB,
afh_deleted tinyint(1) NOT NULL DEFAULT 0,
- afh_changed_fields varchar(255) NOT NULL DEFAULT ''
+ afh_changed_fields varbinary(255) NOT NULL DEFAULT '',
+ afh_group varbinary(64) NULL
) /*$wgDBTableOptions*/;
CREATE INDEX afh_filter ON /*$wgDBprefix*/abuse_filter_history (afh_filter);
CREATE INDEX afh_user ON /*$wgDBprefix*/abuse_filter_history (afh_user);
diff --git a/AbuseFilter/composer.json b/AbuseFilter/composer.json
index 24494978..67f40d5b 100644
--- a/AbuseFilter/composer.json
+++ b/AbuseFilter/composer.json
@@ -3,21 +3,30 @@
"type": "mediawiki-extension",
"description": "The AbuseFilter extension allows privileged users to set specific controls on actions by users, such as edits, and create automated reactions for certain behaviors.",
"homepage": "https://www.mediawiki.org/wiki/Extension:AbuseFilter",
- "license": "GPL-2.0+",
+ "license": "GPL-2.0-or-later",
"require": {
"php": ">=5.4",
- "composer/installers": "1.*,>=1.0.1"
+ "wikimedia/equivset": "^1.3"
},
"require-dev": {
- "jakub-onderka/php-parallel-lint": "0.9.2",
- "mediawiki/mediawiki-codesniffer": "0.12.0",
- "jakub-onderka/php-console-highlighter": "0.3.2"
+ "jakub-onderka/php-parallel-lint": "1.0.0",
+ "mediawiki/mediawiki-codesniffer": "22.0.0",
+ "jakub-onderka/php-console-highlighter": "0.3.2",
+ "mediawiki/minus-x": "0.3.1",
+ "mediawiki/mediawiki-phan-config": "0.3.0"
},
"scripts": {
- "fix": "phpcbf",
+ "fix": [
+ "phpcbf",
+ "minus-x fix ."
+ ],
"test": [
- "parallel-lint . --exclude extensions --exclude node_modules --exclude vendor",
- "phpcs -p -s"
+ "parallel-lint . --exclude node_modules --exclude vendor",
+ "phpcs -p -s",
+ "minus-x check ."
]
+ },
+ "extra": {
+ "phan-taint-check-plugin": "1.5.0"
}
}
diff --git a/AbuseFilter/extension.json b/AbuseFilter/extension.json
index a043b6c5..efce9fe0 100644
--- a/AbuseFilter/extension.json
+++ b/AbuseFilter/extension.json
@@ -8,10 +8,10 @@
],
"url": "https://www.mediawiki.org/wiki/Extension:AbuseFilter",
"descriptionmsg": "abusefilter-desc",
- "license-name": "GPL-2.0+",
+ "license-name": "GPL-2.0-or-later",
"type": "antispam",
"requires": {
- "MediaWiki": ">= 1.29.0"
+ "MediaWiki": ">= 1.31.0"
},
"AvailableRights": [
"abusefilter-modify",
@@ -19,6 +19,7 @@
"abusefilter-view",
"abusefilter-log",
"abusefilter-private",
+ "abusefilter-private-log",
"abusefilter-modify-restricted",
"abusefilter-revert",
"abusefilter-view-private",
@@ -27,26 +28,65 @@
"abusefilter-hide-log",
"abusefilter-modify-global"
],
+ "GroupPermissions": {
+ "*": {
+ "abusefilter-view": true,
+ "abusefilter-log": true
+ },
+ "sysop": {
+ "abusefilter-log-detail": true,
+ "abusefilter-modify": true
+ }
+ },
+ "GrantPermissions": {
+ "basic": {
+ "abusefilter-log": true,
+ "abusefilter-log-detail": true,
+ "abusefilter-view": true
+ },
+ "rollback": {
+ "abusefilter-revert": true
+ },
+ "viewrestrictedlogs": {
+ "abusefilter-hidden-log": true,
+ "abusefilter-view-private": true
+ }
+ },
"SpecialPages": {
"AbuseLog": "SpecialAbuseLog",
"AbuseFilter": "SpecialAbuseFilter"
},
"LogTypes": [
- "abusefilter"
+ "abusefilter",
+ "abusefilterprivatedetails"
],
"LogNames": {
- "abusefilter": "abusefilter-log-name"
+ "abusefilter": "abusefilter-log-name",
+ "abusefilterprivatedetails": "abusefilterprivatedetails-log-name"
},
"LogHeaders": {
"abusefilter": "abusefilter-log-header"
},
- "LogActions": {
- "suppress/hide-afl": "abusefilter-logentry-suppress",
- "suppress/unhide-afl": "abusefilter-logentry-unsuppress"
- },
"LogActionsHandlers": {
"abusefilter/hit": "AbuseLogHitFormatter",
- "abusefilter/modify": "AbuseFilterModifyLogFormatter"
+ "abusefilter/modify": "AbuseFilterModifyLogFormatter",
+ "abusefilter/create": "AbuseFilterModifyLogFormatter",
+ "abusefilterprivatedetails/access": "LogFormatter",
+ "suppress/hide-afl": "AbuseFilterSuppressLogFormatter",
+ "suppress/unhide-afl": "AbuseFilterSuppressLogFormatter"
+ },
+ "ActionFilteredLogs": {
+ "abusefilter": {
+ "modify": [
+ "modify"
+ ],
+ "create": [
+ "create"
+ ]
+ }
+ },
+ "LogRestrictions": {
+ "abusefilterprivatedetails": "abusefilter-private-log"
},
"APIModules": {
"abusefilterchecksyntax": "ApiAbuseFilterCheckSyntax",
@@ -60,39 +100,41 @@
},
"MessagesDirs": {
"AbuseFilter": [
- "i18n"
+ "i18n",
+ "i18n/api"
]
},
"ExtensionMessagesFiles": {
"AbuseFilterAliases": "AbuseFilter.alias.php"
},
"AutoloadClasses": {
- "AbuseFilter": "includes/AbuseFilter.class.php",
+ "AbuseFilter": "includes/AbuseFilter.php",
"AbuseFilterCachingParser" : "includes/parser/AbuseFilterCachingParser.php",
"AbuseFilterParser": "includes/parser/AbuseFilterParser.php",
"AbuseFilterTokenizer": "includes/parser/AbuseFilterTokenizer.php",
- "AbuseFilterHooks": "includes/AbuseFilter.hooks.php",
+ "AbuseFilterHooks": "includes/AbuseFilterHooks.php",
"AbuseFilterPreAuthenticationProvider": "includes/AbuseFilterPreAuthenticationProvider.php",
"SpecialAbuseLog": "includes/special/SpecialAbuseLog.php",
- "AbuseLogPager": "includes/special/SpecialAbuseLog.php",
+ "AbuseLogPager": "includes/pagers/AbuseLogPager.php",
"SpecialAbuseFilter": "includes/special/SpecialAbuseFilter.php",
"AbuseLogHitFormatter": "includes/AbuseLogHitFormatter.php",
"AbuseFilterModifyLogFormatter": "includes/AbuseFilterModifyLogFormatter.php",
+ "AbuseFilterSuppressLogFormatter": "includes/AbuseFilterSuppressLogFormatter.php",
"AbuseFilterViewList": "includes/Views/AbuseFilterViewList.php",
- "AbuseFilterPager": "includes/Views/AbuseFilterViewList.php",
- "GlobalAbuseFilterPager": "includes/Views/AbuseFilterViewList.php",
+ "AbuseFilterPager": "includes/pagers/AbuseFilterPager.php",
+ "GlobalAbuseFilterPager": "includes/pagers/GlobalAbuseFilterPager.php",
"AbuseFilterView": "includes/Views/AbuseFilterView.php",
"AbuseFilterViewEdit": "includes/Views/AbuseFilterViewEdit.php",
"AbuseFilterViewTools": "includes/Views/AbuseFilterViewTools.php",
"AbuseFilterViewHistory": "includes/Views/AbuseFilterViewHistory.php",
- "AbuseFilterHistoryPager": "includes/Views/AbuseFilterViewHistory.php",
+ "AbuseFilterHistoryPager": "includes/pagers/AbuseFilterHistoryPager.php",
"AbuseFilterViewRevert": "includes/Views/AbuseFilterViewRevert.php",
"AbuseFilterViewTestBatch": "includes/Views/AbuseFilterViewTestBatch.php",
"AbuseFilterViewExamine": "includes/Views/AbuseFilterViewExamine.php",
- "AbuseFilterExaminePager": "includes/Views/AbuseFilterViewExamine.php",
- "AbuseFilterChangesList": "includes/Views/AbuseFilterView.php",
+ "AbuseFilterExaminePager": "includes/pagers/AbuseFilterExaminePager.php",
+ "AbuseFilterChangesList": "includes/AbuseFilterChangesList.php",
"AbuseFilterViewDiff": "includes/Views/AbuseFilterViewDiff.php",
- "TableDiffFormatterFullContext": "includes/Views/AbuseFilterViewDiff.php",
+ "TableDiffFormatterFullContext": "includes/TableDiffFormatterFullContext.php",
"AbuseFilterViewImport": "includes/Views/AbuseFilterViewImport.php",
"AbuseFilterVariableHolder": "includes/AbuseFilterVariableHolder.php",
"AFComputedVariable": "includes/AFComputedVariable.php",
@@ -108,11 +150,11 @@
"ApiAbuseFilterCheckSyntax": "includes/api/ApiAbuseFilterCheckSyntax.php",
"ApiAbuseFilterEvalExpression": "includes/api/ApiAbuseFilterEvalExpression.php",
"ApiAbuseFilterUnblockAutopromote": "includes/api/ApiAbuseFilterUnblockAutopromote.php",
- "ApiAbuseFilterCheckMatch": "includes/api/ApiAbuseFilterCheckMatch.php"
+ "ApiAbuseFilterCheckMatch": "includes/api/ApiAbuseFilterCheckMatch.php",
+ "NormalizeThrottleParameters": "maintenance/normalizeThrottleParameters.php"
},
"ResourceModules": {
"ext.abuseFilter": {
- "position": "top",
"styles": "ext.abuseFilter.css"
},
"ext.abuseFilter.edit": {
@@ -121,14 +163,17 @@
"abusefilter-edit-syntaxok",
"abusefilter-edit-syntaxerr",
"abusefilter-http-error",
+ "abusefilter-edit-throttle-placeholder",
+ "abusefilter-edit-tag-placeholder",
"unknown-error"
],
"dependencies": [
"mediawiki.util",
"mediawiki.api",
- "mediawiki.api.parse",
"jquery.textSelection",
- "jquery.spinner"
+ "jquery.spinner",
+ "oojs-ui-core",
+ "oojs-ui-widgets"
]
},
"ext.abuseFilter.tools": {
@@ -154,7 +199,7 @@
"abusefilter-examine-nomatch",
"abusefilter-examine-syntaxerror",
"abusefilter-examine-notfound",
- "abusefilter-mustbeeditor",
+ "abusefilter-mustviewprivateoredit",
"abusefilter-http-error",
"unknown-error"
],
@@ -162,6 +207,10 @@
"jquery.spinner",
"mediawiki.api"
]
+ },
+ "ext.abuseFilter.ace": {
+ "scripts": "mode-abusefilter.js",
+ "dependencies": "ext.codeEditor.ace"
}
},
"ResourceFileModulePaths": {
@@ -169,13 +218,6 @@
"remoteExtPath": "AbuseFilter/modules"
},
"callback": "AbuseFilterHooks::onRegistration",
- "GrantPermissions": {
- "basic": {
- "abusefilter-view": true,
- "abusefilter-log-detail": true,
- "abusefilter-log": true
- }
- },
"Hooks": {
"EditFilterMergedContent": "AbuseFilterHooks::onEditFilterMergedContent",
"GetAutoPromoteGroups": "AbuseFilterHooks::onGetAutoPromoteGroups",
@@ -186,6 +228,7 @@
"ChangeTagsListActive": "AbuseFilterHooks::onChangeTagsListActive",
"LoadExtensionSchemaUpdates": "AbuseFilterHooks::onLoadExtensionSchemaUpdates",
"ContributionsToolLinks": "AbuseFilterHooks::onContributionsToolLinks",
+ "HistoryPageToolLinks": "AbuseFilterHooks::onHistoryPageToolLinks",
"UploadVerifyUpload": "AbuseFilterHooks::onUploadVerifyUpload",
"UploadStashFile": "AbuseFilterHooks::onUploadStashFile",
"MakeGlobalVariablesScript": "AbuseFilterHooks::onMakeGlobalVariablesScript",
@@ -194,63 +237,154 @@
"ParserOutputStashForEdit": "AbuseFilterHooks::onParserOutputStashForEdit"
},
"config": {
- "@doc": "see AbuseFilter.php",
"AbuseFilterActions": {
- "throttle": true,
- "warn": true,
- "disallow": true,
- "blockautopromote": true,
- "block": true,
- "rangeblock": false,
- "degroup": true,
- "tag": true,
- "_merge_strategy": "array_plus"
+ "value": {
+ "throttle": true,
+ "warn": true,
+ "disallow": true,
+ "blockautopromote": true,
+ "block": true,
+ "rangeblock": false,
+ "degroup": true,
+ "tag": true
+ },
+ "_merge_strategy": "array_plus",
+ "description": "Array of enabled actions in the form [action name => is enabled?]. At the end of setup, false values will be filtered out"
+ },
+ "AbuseFilterConditionLimit": {
+ "value": 1000,
+ "description": "The maximum number of 'conditions' that can be used each time the filters are run against a change. (More complex filters require more 'conditions')."
+ },
+ "AbuseFilterParserClass": {
+ "value": "AbuseFilterParser",
+ "description": "Class of the parser to use"
},
- "AbuseFilterConditionLimit": 1000,
- "AbuseFilterParserClass": "AbuseFilterParser",
"AbuseFilterEmergencyDisableThreshold": {
- "default": 0.05,
- "_merge_strategy": "array_plus"
+ "value": {
+ "default": 0.05
+ },
+ "_merge_strategy": "array_plus",
+ "description": "Disable filters if they match more than X edits, constituting more than Y% of the last Z edits, if they have been changed in the last S seconds."
},
"AbuseFilterEmergencyDisableCount": {
- "default": 2,
- "_merge_strategy": "array_plus"
+ "value": {
+ "default": 2
+ },
+ "_merge_strategy": "array_plus",
+ "description": "See description for AbuseFilterEmergencyDisableThreshold"
},
"AbuseFilterEmergencyDisableAge": {
- "default": 86400,
- "_merge_strategy": "array_plus"
+ "value": {
+ "default": 86400
+ },
+ "_merge_strategy": "array_plus",
+ "description": "See description for AbuseFilterEmergencyDisableThreshold"
},
"AbuseFilterRestrictions": {
- "flag": false,
- "throttle": false,
- "warn": false,
- "disallow": false,
- "blockautopromote": true,
- "block": true,
- "rangeblock": true,
- "degroup": true,
- "tag": false,
- "_merge_strategy": "array_plus"
+ "value": {
+ "flag": false,
+ "throttle": false,
+ "warn": false,
+ "disallow": false,
+ "blockautopromote": true,
+ "block": true,
+ "rangeblock": true,
+ "degroup": true,
+ "tag": false
+ },
+ "_merge_strategy": "array_plus",
+ "description": "Do users need 'abusefilter-modify-restricted' user right as well as 'abusefilter-modify' in order to create or modify filters which carry out this action? Array like [action name => is restricted?]"
+ },
+ "AbuseFilterNotifications": {
+ "value": false,
+ "description": "Allows to configure the extension to send hit notifications to Special:RecentChanges or UDP. Available options: rc, udp, rcandudp"
+ },
+ "AbuseFilterNotificationsPrivate": {
+ "value": false,
+ "description": "Enable notifications for private filters"
+ },
+ "AbuseFilterCentralDB": {
+ "value": null,
+ "description": "Name of a database where global abuse filters will be stored in"
+ },
+ "AbuseFilterIsCentral": {
+ "value": false,
+ "description": "Set this variable to true for the wiki where global AbuseFilters are stored in"
+ },
+ "AbuseFilterDisallowGlobalLocalBlocks": {
+ "value": false,
+ "description": "Disallow centralised filters from taking actions that locally block, remove from groups, or revoke permissions"
+ },
+ "AbuseFilterBlockDuration": {
+ "value": "indefinite",
+ "description": "Old standard block duration for logged in users. Kept for backward compatibility after T32024."
+ },
+ "AbuseFilterAnonBlockDuration": {
+ "value": null,
+ "description": "Old standard block duration for anonymous users, $wgAbuseFilterBlockDuration will be used if null. Kept for backward compatibility after T32024."
+ },
+ "AbuseFilterCustomActionsHandlers": {
+ "value": [],
+ "description": "Callback functions for custom actions"
+ },
+ "AbuseFilterValidGroups": {
+ "value": [ "default" ],
+ "description": "The list of 'groups' filters can be divided into – used for applying edit filters to certain types of actions. By default there is only one group."
},
- "AbuseFilterNotifications": false,
- "AbuseFilterNotificationsPrivate": false,
- "AbuseFilterCentralDB": null,
- "AbuseFilterIsCentral": false,
- "AbuseFilterDisallowGlobalLocalBlocks": false,
- "AbuseFilterBlockDuration": "indefinite",
- "AbuseFilterAnonBlockDuration": null,
- "AbuseFilterCustomActionsHandlers": [],
- "AbuseFilterValidGroups": [
- "default"
- ],
"AbuseFilterDefaultWarningMessage": {
- "default": "abusefilter-warning",
+ "value": {
+ "default": "abusefilter-warning"
+ },
+ "_merge_strategy": "array_plus",
+ "description": "Default warning messages, per filter group"
+ },
+ "AbuseFilterDefaultDisallowMessage": {
+ "value": {
+ "default": "abusefilter-disallowed"
+ },
+ "description": "Default disallow messages, per filter group",
"_merge_strategy": "array_plus"
},
- "AbuseFilterLogIPMaxAge": 7776000,
- "AbuseFilterProfile": false,
- "AbuseFilterRuntimeProfile": false
+ "AbuseFilterLogIPMaxAge": {
+ "value": 7776000,
+ "description": "Age used as cutoff when purging old IP log data, defaults to 3 months. Used by maintenance script purgeOldLogIPData.php"
+ },
+ "AbuseFilterProfile": {
+ "value": false,
+ "description": "Whether to record the average time taken and average number of conditions used by each filter."
+ },
+ "AbuseFilterRuntimeProfile": {
+ "value": false,
+ "description": "Whether to record runtime metrics for all filters combined."
+ },
+ "AbuseFilterSlowFilterRuntimeLimit": {
+ "value": 500,
+ "description": "Runtime in milliseconds before a filter is considered slow."
+ },
+ "AbuseFilterProfileActionsCap": {
+ "value": 10000,
+ "description": "Number of action that determines when to reset profiling stats."
+ },
+ "AbuseFilterRangeBlockSize" : {
+ "value": {
+ "IPv4": 16,
+ "IPv6": 19
+ },
+ "description": "Size of the range blocked by 'rangeblock' action."
+ },
+ "AbuseFilterPrivateLog": {
+ "value": false,
+ "description": "Whether accessing private information from a filter log entry is logged."
+ },
+ "AbuseFilterForceSummary": {
+ "value": false,
+ "description": "Whether users are forced to provide a reason for accessing private information from a filter log entry."
+ },
+ "AbuseFilterLogIP": {
+ "value": true,
+ "description": "Whether to include IP in the abuse_filter_log"
+ }
},
"load_composer_autoloader": true,
- "manifest_version": 1
+ "manifest_version": 2
}
diff --git a/AbuseFilter/gitinfo.json b/AbuseFilter/gitinfo.json
index 1a1f2de3..7a5763cb 100644
--- a/AbuseFilter/gitinfo.json
+++ b/AbuseFilter/gitinfo.json
@@ -1 +1 @@
-{"headSHA1": "1d26a0bfa120c600c6d43bf96d29b249c247e78e\n", "head": "1d26a0bfa120c600c6d43bf96d29b249c247e78e\n", "remoteURL": "https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter", "branch": "1d26a0bfa120c600c6d43bf96d29b249c247e78e\n", "headCommitDate": "1540305025"} \ No newline at end of file
+{"headSHA1": "01df8284e6849d6bec6bc413c57f8eb5bc2f4f6f\n", "remoteURL": "https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter", "headCommitDate": "1551464876", "branch": "01df8284e6849d6bec6bc413c57f8eb5bc2f4f6f\n", "head": "01df8284e6849d6bec6bc413c57f8eb5bc2f4f6f\n"} \ No newline at end of file
diff --git a/AbuseFilter/hooks.txt b/AbuseFilter/hooks.txt
index e3cd9c95..4d49a073 100644
--- a/AbuseFilter/hooks.txt
+++ b/AbuseFilter/hooks.txt
@@ -10,6 +10,10 @@ to add events to the AbuseFilter extension.
'AbuseFilter-builder': Allows overwriting of the builder values returned by AbuseFilter::getBuilderValues
&$realValues: Builder values
+'AbuseFilter-deprecatedVariables': Allows adding deprecated variables. If a filter uses an old variable, the parser
+will automatically translate it to the new one.
+&$deprecatedVariables: array of deprecated variables, syntax: [ 'old_name' => 'new_name' ]
+
'AbuseFilter-computeVariable': Like AbuseFilter-interceptVariable but called if the requested method wasn't found.
Return true to indicate that the method is known to the hook and was computed successful.
$method: Method to generate the variable
diff --git a/AbuseFilter/i18n/af.json b/AbuseFilter/i18n/af.json
index a504ac5d..0526cdd0 100644
--- a/AbuseFilter/i18n/af.json
+++ b/AbuseFilter/i18n/af.json
@@ -2,16 +2,16 @@
"@metadata": {
"authors": [
"Naudefj",
- "පසිඳු කාවින්ද"
+ "පසිඳු කාවින්ද",
+ "Fwolff"
]
},
"abusefilter-desc": "Pas outomatiese heuristiek te wysigings",
- "abusefilter": "Misbruik filter configuration",
+ "abusefilter": "Opstelling van misbruikfilter",
"abuselog": "Misbruiklogboek",
"abusefilter-intro": "Welkom by die misbruik Filter beheer jou.\nDie misbruik Filter is 'n outomatiese sagteware meganisme van die toepassing van outomatiese heuristiek aan alle aksies.\nHierdie koppelvlak toon 'n lys van gedefinieer filters, en kan hulle verander word.",
- "abusefilter-mustbeeditor": "Vir sekuriteit kan slegs gebruikers met die reg om misbruik filters te verander gebruik van hierdie koppelvlak.",
"abusefilter-blocker": "Misbruikfilter",
- "abusefilter-accountreserved": "Hierdie rekening naam is gereserveer vir gebruik deur die misbruik filter.",
+ "abusefilter-accountreserved": "Hierdie rekeningnaam is gereserveer vir gebruik deur die misbruikfilter.",
"right-abusefilter-modify": "Wysig misbruikfilters",
"right-abusefilter-view": "Wys misbruikfilters",
"right-abusefilter-log": "Die misbruiklogboek bekyk",
@@ -56,8 +56,6 @@
"abusefilter-log-hide-hidden": "Adres hierdie item uit die publieke oog",
"abusefilter-log-hide-reason": "Rede:",
"abusefilter-log-hide-forbidden": "Jy hoef nie toestemming om misbruik logitems te verberg.",
- "abusefilter-logentry-suppress": "het [[$1]] versteek",
- "abusefilter-logentry-unsuppress": "het [[$1]] sigbaar gemaak",
"abusefilter-management": "Misbruik filter bestuur",
"abusefilter-list": "Alle filters",
"abusefilter-list-id": "Filternommer",
@@ -78,14 +76,13 @@
"abusefilter-disabled": "Afgeskakel",
"abusefilter-hitcount": "$1 {{PLURAL:$1|keer|kere}}",
"abusefilter-new": "Skep 'n nuwe filter",
- "abusefilter-return": "Terug na die filter bestuur",
+ "abusefilter-return": "Terug na die filterbestuur",
"abusefilter-status-global": "Globaal",
"abusefilter-list-options": "Opsies",
"abusefilter-list-options-deleted": "Geskrapte filters:",
"abusefilter-list-options-deleted-only": "Wys slegs verwyderde filters",
"abusefilter-list-options-deleted-hide": "Versteek verwyderde filters",
"abusefilter-list-options-deleted-show": "Sluit verwyderde filters in",
- "abusefilter-list-options-disabled": "Gedeaktiveerde filters:",
"abusefilter-list-options-hidedisabled": "Versteek gedeaktiveerde filters",
"abusefilter-list-options-submit": "Opdateer",
"abusefilter-tools-text": "Hier is 'n paar instrumente wat nuttig kan wees in die formulering en ontfouting misbruik filters.",
@@ -113,14 +110,12 @@
"abusefilter-edit-consequences": "Aksies wat geneem is toe ooreenstem",
"abusefilter-edit-action-warn": "Trigger hierdie aksies nadat die gebruiker 'n waarskuwing",
"abusefilter-edit-action-disallow": "Verhoed dat die gebruiker van die uitvoering van die aksie in die vraag",
- "abusefilter-edit-action-flag": "Vlag die wysig in die misbruik log",
"abusefilter-edit-action-blockautopromote": "Die gebruiker se intrek motor confirmed status",
"abusefilter-edit-action-degroup": "Verwyder die gebruiker van alle bevoorregte groepe",
"abusefilter-edit-action-throttle": "Trigger aksies slegs indien die gebruiker 'n koers limiet reise",
"abusefilter-edit-action-tag": "Tag die wysig vir verdere hersiening",
"abusefilter-edit-throttle-count": "Aantal aksies om toe te laat:",
"abusefilter-edit-throttle-period": "Tydperk:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekonde|sekondes}}",
"abusefilter-edit-warn-message": "Stelsel boodskap te gebruik vir die waarskuwing:",
"abusefilter-edit-warn-other": "Ander boodskap",
"abusefilter-edit-warn-actions": "Handelinge:",
@@ -191,15 +186,15 @@
"abusefilter-edit-builder-vars-oldsize": "Ou bladsy grootte",
"abusefilter-edit-builder-vars-removedlines": "Lines verwyder in wysig",
"abusefilter-edit-builder-vars-summary": "Wysig opsomming/rede",
- "abusefilter-edit-builder-vars-article-id": "Bladsy-ID",
- "abusefilter-edit-builder-vars-article-ns": "Bladsy se naamruimte",
- "abusefilter-edit-builder-vars-article-text": "Blaadsynaam (sonder naamruimte)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Volledige bladsynaam",
+ "abusefilter-edit-builder-vars-page-id": "Bladsy-ID",
+ "abusefilter-edit-builder-vars-page-ns": "Bladsy se naamruimte",
+ "abusefilter-edit-builder-vars-page-title": "Blaadsynaam (sonder naamruimte)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Volledige bladsynaam",
"abusefilter-edit-builder-vars-movedfrom-id": "Page ID beweging bron bladsy",
"abusefilter-edit-builder-vars-movedfrom-ns": "Naamruimte van die skuif bron bladsy",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titel beweging bron bladsy",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Volle naam van die beweging bron bladsy",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Volle naam van die beweging bestemming bladsy",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titel beweging bron bladsy",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Volle naam van die beweging bron bladsy",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Volle naam van die beweging bestemming bladsy",
"abusefilter-edit-builder-vars-user-editcount": "Gebruiker se aantal wysigings",
"abusefilter-edit-builder-vars-user-age": "Ouderdom van gebruiker se rekening",
"abusefilter-edit-builder-vars-user-name": "Gebruikersnaam",
@@ -213,14 +208,14 @@
"abusefilter-edit-builder-vars-new-text": "Nuwe blad Text, na die wysig",
"abusefilter-edit-builder-vars-minor-edit": "Of die wysig is gemerk as 'n kleinigheid",
"abusefilter-edit-builder-vars-file-sha1": "SHA1-hashkode van die lêerinhoud",
- "abusefilter-filter-log": "Onlangse filter veranderinge",
+ "abusefilter-filter-log": "Onlangse filterveranderinge",
"abusefilter-history-foruser": "Wysigings deur $1",
"abusefilter-history-hidden": "Verborge",
"abusefilter-history-enabled": "Geaktiveer",
"abusefilter-history-global": "Globaal",
"abusefilter-history-timestamp": "Tyd",
"abusefilter-history-user": "Gebruiker",
- "abusefilter-history-public": "Openbare filter beskrywing",
+ "abusefilter-history-public": "Openbare filterbeskrywing",
"abusefilter-history-flags": "Vlae",
"abusefilter-history-filter": "filter reël",
"abusefilter-history-comments": "Opmerkings",
@@ -242,7 +237,7 @@
"abusefilter-action-rangeblock": "IP-reeks blokkeer",
"abusefilter-action-disallow": "Nie toegestaan",
"abusefilter-revert-preview-item": "$1: $2 het 'n $3 gemaak op $4.\nAksies wat teruggerol moet word: $5 ($6)",
- "abusefilter-revert-search-legend": "Kies misbruik filter optrede te word teruggekeer",
+ "abusefilter-revert-search-legend": "Kies misbruikfilteraksies om ongedaan te maak",
"abusefilter-revert-periodstart": "Periode begin:",
"abusefilter-revert-periodend": "Periode eindig:",
"abusefilter-revert-search": "Kies aksies",
@@ -251,7 +246,7 @@
"abusefilter-revert-reasonfield": "Rede vir terugrol:",
"abusefilter-test": "Toets 'n filter teen die vorige wysiging",
"abusefilter-test-legend": "Filter toetsing",
- "abusefilter-test-load-filter": "Laai filter ID:",
+ "abusefilter-test-load-filter": "Laai filter-ID:",
"abusefilter-test-submit": "Toets",
"abusefilter-test-load": "Laai",
"abusefilter-test-user": "Wysigings deur gebruiker:",
@@ -270,7 +265,7 @@
"abusefilter-examine-vars": "Veranderlikes wat gegenereer is vir hierdie verandering",
"abusefilter-examine-test": "Toets hierdie verandering teen 'n filter",
"abusefilter-examine-test-button": "Toets filter",
- "abusefilter-examine-match": "Die filter voldoen aan die verandering.",
+ "abusefilter-examine-match": "Die verandering voldoen aan die filter.",
"abusefilter-examine-nomatch": "Die filter voldoen nie aan die verandering nie.",
"abusefilter-examine-syntaxerror": "Die filter het ongeldige sintaks",
"abusefilter-examine-notfound": "Die verandering wat jy aangevra het kon nie gevind word nie.",
@@ -282,8 +277,7 @@
"abusefilter-topnav-log": "Filterlogboek",
"abusefilter-topnav-tools": "ontfouting gereedskap",
"abusefilter-topnav-import": "import filter",
- "abusefilter-log-name": "Misbruik Filter Inloggen",
- "abusefilter-log-entry-modify": "het $1 gewysig ($2)",
+ "abusefilter-log-name": "Misbruikfilter se logboek",
"abusefilter-log-noresults": "Geen resultate nie",
"abusefilter-diff-title": "Verskille tussen weergawes",
"abusefilter-diff-item": "Item",
diff --git a/AbuseFilter/i18n/aln.json b/AbuseFilter/i18n/aln.json
index 648729ef..04617101 100644
--- a/AbuseFilter/i18n/aln.json
+++ b/AbuseFilter/i18n/aln.json
@@ -7,7 +7,6 @@
"abusefilter-edit-global": "Apliko këtë filtër globalisht",
"abusefilter-edit-throttle-count": "Numri i veprimeve të lejojë:",
"abusefilter-edit-throttle-period": "Periudha kohore:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekonda|dytë}}",
"abusefilter-edit-throttle-groups": "Grupi mbyt nga::''(një për çdo rresht, të kombinuar me presje)''",
"abusefilter-edit-warn-message": "mesazh Sistemit për t'u përdorur për paralajmërim:",
"abusefilter-edit-warn-other": "mesazh të tjera",
@@ -67,7 +66,6 @@
"abusefilter-topnav-import": "filtër Import",
"abusefilter-log-name": "log Abuse Filter",
"abusefilter-log-header": "Kjo log tregon një përmbledhje të ndryshimet e bëra në filtra. Për hollësi të plota, shikoni [[Special:AbuseFilter/history|lista]] filtër të ndryshimeve të fundit.",
- "abusefilter-log-entry-modify": "ndryshuar për herë te $1 ($2)",
"abusefilter-diff-title": "Dallimet midis versioneve",
"abusefilter-diff-item": "Artikull",
"abusefilter-diff-version": "Version nga $1 nga $2",
diff --git a/AbuseFilter/i18n/am.json b/AbuseFilter/i18n/am.json
index 8f5b90fc..5f88b220 100644
--- a/AbuseFilter/i18n/am.json
+++ b/AbuseFilter/i18n/am.json
@@ -59,9 +59,9 @@
"abusefilter-edit-builder-op-bool-and": "እና (&)",
"abusefilter-edit-builder-op-bool-or": "ወይም (|)",
"abusefilter-edit-builder-vars-summary": "ማጠቃልያ / ምክንያት",
- "abusefilter-edit-builder-vars-article-id": "የገጽ መታወቂያ",
- "abusefilter-edit-builder-vars-article-ns": "የገጽ ክፍለ-ዊኪ",
- "abusefilter-edit-builder-vars-article-prefixedtext": "የገጽ ሙሉ አርዕስት",
+ "abusefilter-edit-builder-vars-page-id": "የገጽ መታወቂያ",
+ "abusefilter-edit-builder-vars-page-ns": "የገጽ ክፍለ-ዊኪ",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "የገጽ ሙሉ አርዕስት",
"abusefilter-history-foruser": "የ$1 ለውጦች",
"abusefilter-history-hidden": "የተደበቀ",
"abusefilter-history-timestamp": "ጊዜ",
diff --git a/AbuseFilter/i18n/api/ar.json b/AbuseFilter/i18n/api/ar.json
new file mode 100644
index 00000000..342a88d9
--- /dev/null
+++ b/AbuseFilter/i18n/api/ar.json
@@ -0,0 +1,55 @@
+{
+ "@metadata": {
+ "authors": [
+ "ديفيد",
+ "محمد أحمد عبد الفتاح"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "تحقق لمعرفة ما إذا كان مرشح الإساءة يطابق مجموعة من المتغيرات، تحرير حدث مرشح إساءة مسجل،\nvars أو rcid أو logid مطلوبون ولكن يمكن استخدام واحد فقط.",
+ "apihelp-abusefiltercheckmatch-summary": "تحقق لمعرفة ما إذا كان مرشح الإساءة يطابق مجموعة من المتغيرات، تحرير حدث مرشح إساءة مسجل.",
+ "apihelp-abusefiltercheckmatch-extended-description": "vars أو rcid أو logid مطلوبون ولكن يمكن استخدام واحد فقط.",
+ "apihelp-abusefiltercheckmatch-param-filter": "نص المرشح الكامل للتحقق من وجود تطابق.",
+ "apihelp-abusefiltercheckmatch-param-vars": "جسون مجموعة من المتغيرات للاختبار ضده.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "معرف التغيير الأخير للتحقق ضده.",
+ "apihelp-abusefiltercheckmatch-param-logid": "معرف سجل مرشح إساءة للتحقق منه.",
+ "apihelp-abusefiltercheckmatch-example-1": "اختبار إذا كان معرف التغيير الأخير 15 يطابق مرشحا بسيطا",
+ "apihelp-abusefilterchecksyntax-description": "تحقق من بناء جملة مرشح الإساءة.",
+ "apihelp-abusefilterchecksyntax-summary": "تحقق من بناء جملة مرشح الإساءة.",
+ "apihelp-abusefilterchecksyntax-param-filter": "النص الكامل للمرشح للتحقق من بناء الجملة.",
+ "apihelp-abusefilterchecksyntax-example-1": "تحقق من بناء جملة مرشح صالح",
+ "apihelp-abusefilterchecksyntax-example-2": "تحقق من بناء جملة غير مرشح صالح",
+ "apihelp-abusefilterevalexpression-description": "تقييم تعبير مرشح إساءة.",
+ "apihelp-abusefilterevalexpression-summary": "تقييم تعبير مرشح إساءة.",
+ "apihelp-abusefilterevalexpression-param-expression": "التعبير لتقييمه.",
+ "apihelp-abusefilterevalexpression-example-1": "تقييم تعبير بسيط",
+ "apihelp-abusefilterunblockautopromote-description": "يرفع منع المستخدم من تلقي ترقيات تلقائية بسبب نتيجة مرشح إساءة.",
+ "apihelp-abusefilterunblockautopromote-summary": "يرفع منع المستخدم من تلقي ترقيات تلقائية بسبب نتيجة مرشح إساءة.",
+ "apihelp-abusefilterunblockautopromote-param-user": "اسم المستخدم للمستخدم الذي تريد إلغاء منعه.",
+ "apihelp-abusefilterunblockautopromote-example-1": "إزالة المنع عن الترقية التلقائية لـ[[User:Example]]",
+ "apihelp-query+abusefilters-description": "عرض تفاصيل مرشحات الإساءة.",
+ "apihelp-query+abusefilters-summary": "عرض تفاصيل مرشحات الإساءة.",
+ "apihelp-query+abusefilters-param-startid": "معرف المرشح لبدء التعداد منه.",
+ "apihelp-query+abusefilters-param-endid": "معرف المرشح لإيقاف التعداد فيه.",
+ "apihelp-query+abusefilters-param-show": "عرض المرشحات التي تستوفي هذه المعايير فقط.",
+ "apihelp-query+abusefilters-param-limit": "الحد الأقصى لعدد المرشحات للقائمة.",
+ "apihelp-query+abusefilters-param-prop": "أي خصائص للحصول عليها.",
+ "apihelp-query+abusefilters-example-1": "سرد المرشحات العامة المفعلة",
+ "apihelp-query+abusefilters-example-2": "عرض بعض التفاصيل عن المرشحات",
+ "apihelp-query+abuselog-description": "عرض الأحداث التي تم التقاطها بواسطة أحد مرشحات الإساءة.",
+ "apihelp-query+abuselog-summary": "عرض الأحداث التي تم التقاطها بواسطة أحد مرشحات الإساءة.",
+ "apihelp-query+abuselog-param-logid": "إظهار إدخال بمعرف السجل المحدد.",
+ "apihelp-query+abuselog-param-start": "الطابع الزمني لبدء تعداد منه.",
+ "apihelp-query+abuselog-param-end": "الطابع الزمني لوقف التعداد فيه.",
+ "apihelp-query+abuselog-param-user": "إظهار الإدخالات من قبل مستخدم معين أو عنوان آيبي فقط.",
+ "apihelp-query+abuselog-param-title": "إظهار الإدخالات التي تحدث في صفحة معينة فقط.",
+ "apihelp-query+abuselog-param-filter": "إظهار الإدخالات التي تم التقاطها بواسطة معرف مرشح معين فقط.",
+ "apihelp-query+abuselog-param-limit": "الحد الأقصى لعدد الإدخالات للقائمة.",
+ "apihelp-query+abuselog-param-prop": "أي خصائص للحصول عليها.",
+ "apihelp-query+abuselog-param-wiki": "ويكي لإظهار نتائج منه.",
+ "apihelp-query+abuselog-example-1": "أظهر مدخلات السجل الأخيرة",
+ "apihelp-query+abuselog-example-2": "عرض إدخالات السجل الأخيرة لـ[[API]]",
+ "apierror-abusefilter-canttest": "ليست لديك الصلاحية لاختبار مرشحات الإساءة.",
+ "apierror-abusefilter-cantcheck": "ليست لديك الصلاحية للتحقق من بناء مرشحات الإساءة.",
+ "apierror-abusefilter-nosuchlogid": "ليس هناك إدخال سجل إساءة بالمعرف $1.",
+ "apierror-abusefilter-badsyntax": "يحتوي المرشح على بنية غير صالحة."
+}
diff --git a/AbuseFilter/i18n/api/ast.json b/AbuseFilter/i18n/api/ast.json
new file mode 100644
index 00000000..8eb20eea
--- /dev/null
+++ b/AbuseFilter/i18n/api/ast.json
@@ -0,0 +1,54 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xuacu"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Revisa pa ver si un AbuseFilter casa con un conxuntu de variables, una edición o una aición rexistrada n'AbuseFilter.\n\nNecesítase vars, rcid o logid, anque sólo puede usase unu.",
+ "apihelp-abusefiltercheckmatch-summary": "Comprobar si un filtru d'abusos casa con un conxuntu de variables, una edición o un socesu rexistráu d'AbuseFilter.",
+ "apihelp-abusefiltercheckmatch-extended-description": "Ríquese vars, rcid o logid, pero sólo puede usase unu d'ellos.",
+ "apihelp-abusefiltercheckmatch-param-filter": "El testu completu del filtru a comprobar pa una coincidencia.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Matriz de variables codificaes en JSON escontra la que comprobar.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "ID del cambiu reciente nel que comprobar.",
+ "apihelp-abusefiltercheckmatch-param-logid": "ID del rexistru de la peñera d'abusos nel que comprobar o filtro.",
+ "apihelp-abusefiltercheckmatch-example-1": "Comprobar si'l cambiu reciente cola ID 15 concuaya con un filtru simple",
+ "apihelp-abusefilterchecksyntax-description": "Comprobar la sintaxis d'un filtru de la Peñera d'abusos.",
+ "apihelp-abusefilterchecksyntax-summary": "Comprobar la sintaxis d'un filtru de la Peñera d'abusos.",
+ "apihelp-abusefilterchecksyntax-param-filter": "El testu completu del filtru nel que comprobar la sintaxis.",
+ "apihelp-abusefilterchecksyntax-example-1": "Comprobar la sintaxis d'un filtru válidu",
+ "apihelp-abusefilterchecksyntax-example-2": "Comprobar la sintaxis d'un filtru inválidu",
+ "apihelp-abusefilterevalexpression-description": "Evaluar una espresión de la Peñera d'abusos.",
+ "apihelp-abusefilterevalexpression-summary": "Evaluar una espresión de la Peñera d'abusos.",
+ "apihelp-abusefilterevalexpression-param-expression": "La espresión a evaluar.",
+ "apihelp-abusefilterevalexpression-example-1": "Evaluar una espresión simple",
+ "apihelp-abusefilterunblockautopromote-description": "Desbloquia a un usuariu de recibir autopromociones como consecuencia de la peñera d'abusos.",
+ "apihelp-abusefilterunblockautopromote-summary": "Desbloquia a un usuariu de recibir autopromociones como consecuencia de la peñera d'abusos.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Nome del usuariu que vas desbloquiar.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Quitar el bloquéu por auto-promoción de [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Amosar detalles de los filtros d'abusos.",
+ "apihelp-query+abusefilters-summary": "Amosar detalles de los filtros d'abusos.",
+ "apihelp-query+abusefilters-param-startid": "ID del filtru dende'l que principiar la enumeración.",
+ "apihelp-query+abusefilters-param-endid": "ID del filtru nel que finar la enumeración.",
+ "apihelp-query+abusefilters-param-show": "Amosar sólo los filtros que cumplan con estos criterios.",
+ "apihelp-query+abusefilters-param-limit": "El númberu máximu de filtros a poner na llista.",
+ "apihelp-query+abusefilters-param-prop": "Qué propiedaes algamar.",
+ "apihelp-query+abusefilters-example-1": "Llista de los filtros públicos activaos",
+ "apihelp-query+abusefilters-example-2": "Amosar dellos detalles de los filtros",
+ "apihelp-query+abuselog-description": "Amostrar los socesos que deteutó unu de los filtros antiabusu.",
+ "apihelp-query+abuselog-summary": "Amostrar los socesos que detectó unu de los filtros antiabusu.",
+ "apihelp-query+abuselog-param-logid": "Amosar una entrada cola ID de log dada.",
+ "apihelp-query+abuselog-param-start": "La marca horaria dende la que principiar la enumeración.",
+ "apihelp-query+abuselog-param-end": "La marca horaria na que finar la enumeración.",
+ "apihelp-query+abuselog-param-user": "Amosar solo les entraes feches por un determináu usuariu o IP.",
+ "apihelp-query+abuselog-param-title": "Amosar solo les entraes correspondientes a una páxina determinada.",
+ "apihelp-query+abuselog-param-filter": "Amostrar solo les entraes recoyíes por un identificador de filtru determináu.",
+ "apihelp-query+abuselog-param-limit": "La cantidá máxima d'entraes qu'apaecerán.",
+ "apihelp-query+abuselog-param-prop": "Qué propiedaes algamar.",
+ "apihelp-query+abuselog-param-wiki": "Wiki de la qu'amosar les detecciones.",
+ "apihelp-query+abuselog-example-1": "Amosar les entraes recientes del rexistru",
+ "apihelp-query+abuselog-example-2": "Amosar les entraes recientes del rexistru pa la [[API]]",
+ "apierror-abusefilter-canttest": "Nun tienes permisu pa probar peñeres d'abusu.",
+ "apierror-abusefilter-cantcheck": "Nun tienes permisu pa comprobar la sintaxis de les peñeres d'abusu.",
+ "apierror-abusefilter-nosuchlogid": "Nun hai nenguna entrada nos rexistros de les peñeres d'abusu con id $1.",
+ "apierror-abusefilter-badsyntax": "El filtru tien una sintaxis inválida."
+}
diff --git a/AbuseFilter/i18n/api/ba.json b/AbuseFilter/i18n/api/ba.json
new file mode 100644
index 00000000..42bd23f1
--- /dev/null
+++ b/AbuseFilter/i18n/api/ba.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "З. ӘЙЛЕ"
+ ]
+ },
+ "apihelp-abusefilterchecksyntax-description": "AbuseFilter фильтры синтаксисын тикшереү",
+ "apihelp-abusefilterunblockautopromote-param-user": "Һеҙ блокировкаһын алырға теләгән ҡатнашыусының исеме (логин).",
+ "apihelp-query+abusefilters-param-prop": "Ниндәй үҙенсәлекте мотлаҡ алырға:",
+ "apihelp-query+abuselog-param-limit": "Исемлектәге яҙмаларҙың иң ҙур күләме.",
+ "apihelp-query+abuselog-param-prop": "Ниндәй үҙенсәлектәрҙе мотлаҡ алырға:",
+ "apihelp-query+abuselog-example-1": "Журналдағы һуңғы яҙмаларҙы күрһәтергә",
+ "apihelp-query+abuselog-example-2": " [[API]] журналындағы һуңғы яҙманы күрһәтергә"
+}
diff --git a/AbuseFilter/i18n/api/bg.json b/AbuseFilter/i18n/api/bg.json
new file mode 100644
index 00000000..b4c8b7f2
--- /dev/null
+++ b/AbuseFilter/i18n/api/bg.json
@@ -0,0 +1,38 @@
+{
+ "@metadata": {
+ "authors": [
+ "StanProg",
+ "Vodnokon4e"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-param-filter": "Пълния текст на филтър за проверка за съвпадение.",
+ "apihelp-abusefilterchecksyntax-description": "Проверка на синтаксиса на филтър срещу злоупотреби.",
+ "apihelp-abusefilterchecksyntax-example-1": "Проверка на синтаксиса на валиден филтър",
+ "apihelp-abusefilterchecksyntax-example-2": "Проверка на синтаксиса на невалиден филтър",
+ "apihelp-abusefilterevalexpression-description": "Изчисляване на израз от филтър срещу злоупотреби",
+ "apihelp-abusefilterevalexpression-param-expression": "Израз за изчисляване.",
+ "apihelp-abusefilterevalexpression-example-1": "Изчисляване на прост израз",
+ "apihelp-abusefilterunblockautopromote-param-user": "Име на потребителя, който искате да отблокирате.",
+ "apihelp-query+abusefilters-description": "Показване на детайлите на филтрите срещу злоупотреби",
+ "apihelp-query+abusefilters-param-startid": "Идентификатор на филтъра, от който да започне изчислението.",
+ "apihelp-query+abusefilters-param-endid": "Идентификатор на филтъра, при който да завърши изчислението.",
+ "apihelp-query+abusefilters-param-show": "Показване само на филтри, които отговарят на тези критерии.",
+ "apihelp-query+abusefilters-param-limit": "Максимален брой филтри в списъка.",
+ "apihelp-query+abusefilters-param-prop": "Какви свойства трябва да се получат.",
+ "apihelp-query+abusefilters-example-1": "Списък на активираните публични филтри",
+ "apihelp-query+abusefilters-example-2": "Показване на допълнителна информация за филтри",
+ "apihelp-query+abuselog-description": "Показване на събития, които отговарят на един от филтрите срещу злоупотреби.",
+ "apihelp-query+abuselog-param-start": "Времева отметка, от която да започва изчислението.",
+ "apihelp-query+abuselog-param-end": "Времева отметка, при която да спира изчислението.",
+ "apihelp-query+abuselog-param-user": "Показване само на записи, свързани с даден потребител или IP адрес.",
+ "apihelp-query+abuselog-param-title": "Показване само на записи, свързани с определена страница.",
+ "apihelp-query+abuselog-param-filter": "Показване само записи, които отговарят на даден ID на филтър.",
+ "apihelp-query+abuselog-param-limit": "Максимален брой записи в списъка.",
+ "apihelp-query+abuselog-param-prop": "Какви свойства трябва да се получат.",
+ "apihelp-query+abuselog-example-1": "Показване на последните записи в дневника",
+ "apihelp-query+abuselog-example-2": "Показване на последните записи в дневника на [[API]]",
+ "apierror-abusefilter-canttest": "Нямате права за тестване на филтрите срещу злоупотреби.",
+ "apierror-abusefilter-cantcheck": "Нямате права за проверка на синтаксиса на филтрите срещу злоупотреби.",
+ "apierror-abusefilter-nosuchlogid": "В дневника за злоупотреби не съществува запис с ID $1.",
+ "apierror-abusefilter-badsyntax": "Синтаксисът на филтъра е невалиден"
+}
diff --git a/AbuseFilter/i18n/api/ca.json b/AbuseFilter/i18n/api/ca.json
new file mode 100644
index 00000000..56f3eb3d
--- /dev/null
+++ b/AbuseFilter/i18n/api/ca.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Toniher"
+ ]
+ },
+ "apihelp-query+abusefilters-param-prop": "Quines propietats obtenir.",
+ "apihelp-query+abusefilters-example-1": "Llista els filtres públics habilitats",
+ "apihelp-query+abusefilters-example-2": "Mostra alguns detalls dels filtres"
+}
diff --git a/AbuseFilter/i18n/api/ce.json b/AbuseFilter/i18n/api/ce.json
new file mode 100644
index 00000000..d3bfb194
--- /dev/null
+++ b/AbuseFilter/i18n/api/ce.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Умар"
+ ]
+ },
+ "apihelp-query+abusefilters-param-prop": "Муьлха билгалонаш оьшуш ю.",
+ "apihelp-query+abuselog-param-prop": "Муьлха билгалонаш оьшуш ю.",
+ "apihelp-query+abuselog-example-1": "Гайта тептар чура тӀеххьара дӀаяздарш",
+ "apihelp-query+abuselog-example-2": "Гайта [[API]] тептар чура тӀеххьара дӀаяздарш"
+}
diff --git a/AbuseFilter/i18n/api/cs.json b/AbuseFilter/i18n/api/cs.json
new file mode 100644
index 00000000..e792c803
--- /dev/null
+++ b/AbuseFilter/i18n/api/cs.json
@@ -0,0 +1,51 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cvanca",
+ "Dvorapa",
+ "Matěj Suchánek",
+ "Mormegil"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Zkontrolovat, zda filtr zneužití odpovídá sadě proměnných, editaci nebo změně zaznamenané ve filtru.\n\nJe vyžadována právě jedna z následujících možností: vars, rcid nebo logid.",
+ "apihelp-abusefiltercheckmatch-param-filter": "Plný text filtru, který se má kontrolovat na shodu.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Pole proměnných vůči kterým chcete testovat, kódované v JSON.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "ID poslední změny vůči které chcete testovat.",
+ "apihelp-abusefiltercheckmatch-param-logid": "ID filtru zneužití vůči kterému chcete testovat.",
+ "apihelp-abusefiltercheckmatch-example-1": "Otestovat, zda poslední změna s ID 15 odpovídá jednoduchému filtru",
+ "apihelp-abusefilterchecksyntax-description": "Zkontrolovat syntaxi filtru zneužití.",
+ "apihelp-abusefilterchecksyntax-summary": "Zkontroluje syntaxi filtru zneužití.",
+ "apihelp-abusefilterchecksyntax-param-filter": "Plný text filtru, na kterém se zkontroluje syntaxe",
+ "apihelp-abusefilterchecksyntax-example-1": "Zkontrolovat syntaxi platného filtru",
+ "apihelp-abusefilterchecksyntax-example-2": "Zkontrolovat syntaxi neplatného filtru",
+ "apihelp-abusefilterevalexpression-description": "Vyhodnotí výraz filtru zneužití.",
+ "apihelp-abusefilterevalexpression-summary": "Vyhodnotí výraz filtru zneužití.",
+ "apihelp-abusefilterevalexpression-param-expression": "Výraz, který se má vyhodnotit.",
+ "apihelp-abusefilterevalexpression-example-1": "Vyhodnotit jednoduchý výraz",
+ "apihelp-abusefilterunblockautopromote-description": "Odblokuje uživateli možnost získat automatické povýšení zablokovanou důsledkem filtru zneužití.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Jméno uživatele, jehož chcete odblokovat.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Zrušit blokování automatického povýšení uživatele [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Zobrazit podrobnosti o filtrech zneužití.",
+ "apihelp-query+abusefilters-param-startid": "ID filtru, od kterého se začne s výčtem.",
+ "apihelp-query+abusefilters-param-endid": "ID filtru, u kterého výčet skončí.",
+ "apihelp-query+abusefilters-param-show": "Zobrazit pouze filtry, které splňují tato kritéria.",
+ "apihelp-query+abusefilters-param-limit": "Maximální počet zobrazených filtrů.",
+ "apihelp-query+abusefilters-param-prop": "Jaké vlastnosti získat.",
+ "apihelp-query+abusefilters-example-1": "Zobrazit zapnuté veřejné filtry",
+ "apihelp-query+abusefilters-example-2": "Zobrazit podrobnosti o filtrech",
+ "apihelp-query+abuselog-description": "Zobrazit události, které byly zachyceny filtrem zneužití.",
+ "apihelp-query+abuselog-param-start": "Časová značka, od které se začne s výčtem.",
+ "apihelp-query+abuselog-param-end": "Časová značka, u které výčet skončí.",
+ "apihelp-query+abuselog-param-user": "Zobrazit pouze změny provedené daným uživatelem nebo z příslušné IP adresy.",
+ "apihelp-query+abuselog-param-title": "Zobrazit pouze změny, které se vyskytují na dané stránce.",
+ "apihelp-query+abuselog-param-filter": "Zobrazit pouze změny, které byly zachyceny daným filtrem.",
+ "apihelp-query+abuselog-param-limit": "Maximální počet změn k zobrazení.",
+ "apihelp-query+abuselog-param-prop": "Jaké vlastnosti získat.",
+ "apihelp-query+abuselog-param-wiki": "Wiki, na nichž došlo k zásahům filtrů.",
+ "apihelp-query+abuselog-example-1": "Zobrazit poslední záznamy protokolu",
+ "apihelp-query+abuselog-example-2": "Zobrazit poslední záznamy protokolu pro stránku [[API]]",
+ "apierror-abusefilter-canttest": "Nemáte oprávnění testovat filtry zneužití.",
+ "apierror-abusefilter-cantcheck": "Nemáte oprávnění kontrolovat syntaxi filtrů zneužití.",
+ "apierror-abusefilter-nosuchlogid": "Žádný záznam filtrů zneužití nemá id $1.",
+ "apierror-abusefilter-badsyntax": "Filtr má neplatnou syntaxi."
+}
diff --git a/AbuseFilter/i18n/api/de.json b/AbuseFilter/i18n/api/de.json
new file mode 100644
index 00000000..c1b59cba
--- /dev/null
+++ b/AbuseFilter/i18n/api/de.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "Inkowik",
+ "MGChecker",
+ "Metalhead64",
+ "ToBeFree"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-extended-description": "Es ist vars, rcid oder logid erforderlich, jedoch kann nur eines verwendet werden.",
+ "apihelp-abusefiltercheckmatch-param-filter": "Der vollständige Filtertext, der für einen Treffer überprüft werden soll.",
+ "apihelp-abusefiltercheckmatch-param-vars": "JSON-kodierte Anordnung von Variablen, die gegengetestet werden sollen.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "Zu gegenprüfende Letzte-Änderungs-Kennung.",
+ "apihelp-abusefiltercheckmatch-param-logid": "Zu gegenprüfende Missbrauchsfilter-Logbuch-Kennung.",
+ "apihelp-abusefiltercheckmatch-example-1": "Testet, ob die Letzte-Änderungen-Kennung 15 einem einfachen Filter entspricht.",
+ "apihelp-abusefilterchecksyntax-description": "Prüft die Syntax eines Missbrauchfilters.",
+ "apihelp-abusefilterchecksyntax-summary": "Überprüft die Syntax eines Missbrauchfilters.",
+ "apihelp-abusefilterchecksyntax-param-filter": "Der vollständige Filtertext, dessen Syntax überprüft werden soll.",
+ "apihelp-abusefilterchecksyntax-example-1": "Syntax eines gültigen Filters prüfen",
+ "apihelp-abusefilterchecksyntax-example-2": "Syntax eines ungültigen Filters prüfen",
+ "apihelp-abusefilterevalexpression-description": "Evaluiert einen Missbrauchsfilter-Ausdruck.",
+ "apihelp-abusefilterevalexpression-summary": "Bewertet einen Ausdruck des Missbrauchfilters.",
+ "apihelp-abusefilterevalexpression-param-expression": "Der zu evaluierende Ausdruck.",
+ "apihelp-abusefilterevalexpression-example-1": "Evaluiert einen einfachen Ausdruck",
+ "apihelp-abusefilterunblockautopromote-param-user": "Benutzername des Benutzers, den du entsperren möchtest.",
+ "apihelp-query+abusefilters-description": "Einzelheiten über die Missbrauchsfilter anzeigen.",
+ "apihelp-query+abusefilters-summary": "Zeigt Einzelheiten des Missbrauchfilters an.",
+ "apihelp-query+abusefilters-param-startid": "Die Filterkennung, bei der die Aufzählung beginnen soll.",
+ "apihelp-query+abusefilters-param-endid": "Die Filterkennung, bei der die Aufzählung enden soll.",
+ "apihelp-query+abusefilters-param-show": "Nur Filter anzeigen, die diese Kriterien erfüllen.",
+ "apihelp-query+abusefilters-param-limit": "Die maximale Anzahl aufzulistender Filter.",
+ "apihelp-query+abusefilters-param-prop": "Zurückzugebende Eigenschaften.",
+ "apihelp-query+abusefilters-example-1": "Aktivierte öffentliche Filter auflisten",
+ "apihelp-query+abusefilters-example-2": "Einige Einzelheiten über Filter anzeigen",
+ "apihelp-query+abuselog-description": "Ereignisse anzeigen, die von einem der Missbrauchsfilter erfasst wurden.",
+ "apihelp-query+abuselog-summary": "Zeigt Ereignisse an, die von einem der Missbrauchsfilter erfasst wurden.",
+ "apihelp-query+abuselog-param-logid": "Zeigt einen Eintrag mit der angegebenen Logbuchkennung.",
+ "apihelp-query+abuselog-param-start": "Der Zeitstempel, bei dem die Aufzählung begonnen werden soll.",
+ "apihelp-query+abuselog-param-end": "Der Zeitstempel, bei dem die Aufzählung beendet werden soll.",
+ "apihelp-query+abuselog-param-user": "Nur Einträge von einem angegebenen Benutzer oder einer IP-Adresse anzeigen.",
+ "apihelp-query+abuselog-param-title": "Zeigt nur Einträge, die auf einer angegebenen Seite erscheinen.",
+ "apihelp-query+abuselog-param-filter": "Zeigt nur Einträge an, die von einer angegebenen Filterkennung erfasst wurden.",
+ "apihelp-query+abuselog-param-limit": "Die maximale Anzahl der aufzulistenden Einträge.",
+ "apihelp-query+abuselog-param-prop": "Zurückzugebende Eigenschaften.",
+ "apihelp-query+abuselog-param-wiki": "Wiki, von dem Treffer angezeigt werden sollen.",
+ "apihelp-query+abuselog-example-1": "Zeigt die letzten Logbucheinträge",
+ "apihelp-query+abuselog-example-2": "Zeigt die letzten Logbucheinträge für [[API]]",
+ "apierror-abusefilter-canttest": "Du hast keine Berechtigung, Missbrauchsfilter zu testen.",
+ "apierror-abusefilter-cantcheck": "Du hast keine Berechtigung, die Syntax von Missbrauchsfiltern zu überprüfen.",
+ "apierror-abusefilter-nosuchlogid": "Es gibt keinen Missbrauchsfilter-Logbuch-Eintrag mit der Kennung $1.",
+ "apierror-abusefilter-badsyntax": "Der Filter hat eine ungültige Syntax."
+}
diff --git a/AbuseFilter/i18n/api/diq.json b/AbuseFilter/i18n/api/diq.json
new file mode 100644
index 00000000..e1ca16bf
--- /dev/null
+++ b/AbuseFilter/i18n/api/diq.json
@@ -0,0 +1,47 @@
+{
+ "@metadata": {
+ "authors": [
+ "1917 Ekim Devrimi",
+ "Asmen",
+ "Kumkumuk"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Ratena Fiktrandê nengan dı têversanayış esto se, filtrey nengan de vurnayış vurnayışi kontrol kerê \n\nVurnayoğê RCID ya na LOGID eger ke icab krno se karêno",
+ "apihelp-abusefiltercheckmatch-param-filter": "Ful filtreya metini çımraravyarnayışi ke",
+ "apihelp-abusefiltercheckmatch-param-vars": "Vurnayerê kod kerdena JSON fına do test bo.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "Têverşanaene rê vırnayışê IDy'o peyên",
+ "apihelp-abusefiltercheckmatch-param-logid": "Têverşanaene rê IDy qeydê filtrey heqareti",
+ "apihelp-abusefiltercheckmatch-example-1": "Vurnayışê peyêni kamiya basit filtre de 15 ra vêşi se test ke",
+ "apihelp-abusefilterchecksyntax-description": "Filtreya nengan parzuna syntaxi çımraravyarn",
+ "apihelp-abusefilterchecksyntax-param-filter": "Ful filtreya metini çımraravyarn syntaxi",
+ "apihelp-abusefilterchecksyntax-example-1": "Filtreya ravêrdi syntaxi çım ra ravyarn",
+ "apihelp-abusefilterchecksyntax-example-2": "Rêzê yew filtreyo ke muteber niyo, çım ra raviyarne",
+ "apihelp-abusefilterevalexpression-description": "Erca ifadeya Filtreya nengan",
+ "apihelp-abusefilterevalexpression-param-expression": "Erceya ifadeyan",
+ "apihelp-abusefilterevalexpression-example-1": "Erca gasit ifadeyan",
+ "apihelp-abusefilterunblockautopromote-description": "Filtreya nengan karberi neticeya bloqe bıyayışa cı otomatik kerdau gêriya ya",
+ "apihelp-abusefilterunblockautopromote-param-user": "Şıma qayılê ke bloqey kanci bamaey karberi wedarne.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Otomatik [[User:Example]] bloqey cı wedarnê",
+ "apihelp-query+abusefilters-description": "Detaya filtreya nengan bıvin",
+ "apihelp-query+abusefilters-param-startid": "Kamiya filtre nımre kerdışmra start ke",
+ "apihelp-query+abusefilters-param-endid": "Kamiya filtri nımre kedışi vındarn",
+ "apihelp-query+abusefilters-param-show": "Kanci filtrey teyna ena kriterer anê bıvin",
+ "apihelp-query+abusefilters-param-limit": "Listeya filtranndı maksimum numre",
+ "apihelp-query+abusefilters-param-prop": "Kamci xısusiyeta ke gê no",
+ "apihelp-query+abusefilters-example-1": "Listey filtreya şari aktiva",
+ "apihelp-query+abusefilters-example-2": "Heqdê filtranndı tayna detaya bıvin",
+ "apihelp-query+abuselog-description": "Filtreya nengan yew merdımi teref ra tepêşyaya bıvin",
+ "apihelp-query+abuselog-param-start": "Mora zemani nımre kerdışmra start ke",
+ "apihelp-query+abuselog-param-end": "Mora zemani nımre kedışi vındarn",
+ "apihelp-query+abuselog-param-user": "Teyna qeydé dekerdena grotena IP adresa karberi bıvin",
+ "apihelp-query+abuselog-param-title": "Dekerdenanê perer teyna bıvin",
+ "apihelp-query+abuselog-param-filter": "Teyna dekerdenanê kamiya filtrande tepêştena grotışa bıvin",
+ "apihelp-query+abuselog-param-limit": "Azami miktarê dekerdena liste ke",
+ "apihelp-query+abuselog-param-prop": "Kamci xısusiyeta ke gê no",
+ "apihelp-query+abuselog-example-1": "Qeydanê dekerdanê peyênan bıasne",
+ "apihelp-query+abuselog-example-2": "Qandé [[API]] Qeydanê dekerdanê peyênan bıasne",
+ "apierror-abusefilter-canttest": "Testê qeydê nengan rê izinê şıma çıni yo.",
+ "apierror-abusefilter-cantcheck": "rêz kerdena qeydanê nengan rê izinê şıma çıni yo.",
+ "apierror-abusefilter-nosuchlogid": "Tiya ra qeydê nengan nêdebêno kamiya $1",
+ "apierror-abusefilter-badsyntax": "Ena filter de yew rêza xelat esta."
+}
diff --git a/AbuseFilter/i18n/api/el.json b/AbuseFilter/i18n/api/el.json
new file mode 100644
index 00000000..40286387
--- /dev/null
+++ b/AbuseFilter/i18n/api/el.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Glavkos"
+ ]
+ },
+ "apihelp-abusefilterchecksyntax-param-filter": "Το πλήρες φίλτρου κειμένου για να ελέγξετε τη σύνταξη.",
+ "apihelp-abusefilterchecksyntax-example-1": "Ελέγξτε τη σύνταξη ενός έγκυρου φίλτρου",
+ "apihelp-abusefilterchecksyntax-example-2": "Ελέγξτε τη σύνταξη ενός μη έγκυρου φίλτρου",
+ "apihelp-abusefilterevalexpression-param-expression": "Η έκφραση προς αξιολόγηση."
+}
diff --git a/AbuseFilter/i18n/api/en.json b/AbuseFilter/i18n/api/en.json
new file mode 100644
index 00000000..45bc1583
--- /dev/null
+++ b/AbuseFilter/i18n/api/en.json
@@ -0,0 +1,57 @@
+{
+ "@metadata": {
+ "authors": [
+ "Andrew Garrett",
+ "Kunal Mehta",
+ "Brad Jorsch",
+ "Matěj Suchánek"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Check to see if an AbuseFilter matches a set of variables, an edit, or a logged AbuseFilter event.\n\nvars, rcid or logid is required however only one may be used.",
+ "apihelp-abusefiltercheckmatch-summary": "Check to see if an AbuseFilter matches a set of variables, an edit, or a logged AbuseFilter event.",
+ "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid or logid is required however only one may be used.",
+ "apihelp-abusefiltercheckmatch-param-filter": "The full filter text to check for a match.",
+ "apihelp-abusefiltercheckmatch-param-vars": "JSON encoded array of variables to test against.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "Recent change ID to check against.",
+ "apihelp-abusefiltercheckmatch-param-logid": "Abuse filter log ID to check against.",
+ "apihelp-abusefiltercheckmatch-example-1": "Test if recent change ID 15 matches a simple filter",
+ "apihelp-abusefilterchecksyntax-description": "Check syntax of an AbuseFilter filter.",
+ "apihelp-abusefilterchecksyntax-summary": "Check syntax of an AbuseFilter filter.",
+ "apihelp-abusefilterchecksyntax-param-filter": "The full filter text to check syntax on.",
+ "apihelp-abusefilterchecksyntax-example-1": "Check syntax of a valid filter",
+ "apihelp-abusefilterchecksyntax-example-2": "Check syntax of an invalid filter",
+ "apihelp-abusefilterevalexpression-description": "Evaluates an AbuseFilter expression.",
+ "apihelp-abusefilterevalexpression-summary": "Evaluates an AbuseFilter expression.",
+ "apihelp-abusefilterevalexpression-param-expression": "The expression to evaluate.",
+ "apihelp-abusefilterevalexpression-example-1": "Evaluate a simple expression",
+ "apihelp-abusefilterunblockautopromote-description": "Unblocks a user from receiving autopromotions due to an abusefilter consequence.",
+ "apihelp-abusefilterunblockautopromote-summary": "Unblocks a user from receiving autopromotions due to an abusefilter consequence.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Username of the user you want to unblock.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Remove the block on [[User:Example]]'s autopromotion",
+ "apihelp-query+abusefilters-description": "Show details of the abuse filters.",
+ "apihelp-query+abusefilters-summary": "Show details of the abuse filters.",
+ "apihelp-query+abusefilters-param-startid": "The filter ID to start enumerating from.",
+ "apihelp-query+abusefilters-param-endid": "The filter ID to stop enumerating at.",
+ "apihelp-query+abusefilters-param-show": "Show only filters which meet these criteria.",
+ "apihelp-query+abusefilters-param-limit": "The maximum number of filters to list.",
+ "apihelp-query+abusefilters-param-prop": "Which properties to get.",
+ "apihelp-query+abusefilters-example-1": "List enabled public filters",
+ "apihelp-query+abusefilters-example-2": "Show some details about filters",
+ "apihelp-query+abuselog-description": "Show events that were caught by one of the abuse filters.",
+ "apihelp-query+abuselog-summary": "Show events that were caught by one of the abuse filters.",
+ "apihelp-query+abuselog-param-logid": "Show an entry with the given log ID.",
+ "apihelp-query+abuselog-param-start": "The timestamp to start enumerating from.",
+ "apihelp-query+abuselog-param-end": "The timestamp to stop enumerating at.",
+ "apihelp-query+abuselog-param-user": "Show only entries done by a given user or IP address.",
+ "apihelp-query+abuselog-param-title": "Show only entries occurring on a given page.",
+ "apihelp-query+abuselog-param-filter": "Show only entries that were caught by a given filter ID.",
+ "apihelp-query+abuselog-param-limit": "The maximum amount of entries to list.",
+ "apihelp-query+abuselog-param-prop": "Which properties to get.",
+ "apihelp-query+abuselog-param-wiki": "Wiki to show hits from.",
+ "apihelp-query+abuselog-example-1": "Show recent log entries",
+ "apihelp-query+abuselog-example-2": "Show recent log entries for [[API]]",
+ "apierror-abusefilter-canttest": "You don't have permission to test abuse filters.",
+ "apierror-abusefilter-cantcheck": "You don't have permission to check syntax of abuse filters.",
+ "apierror-abusefilter-nosuchlogid": "There is no abuselog entry with the id $1.",
+ "apierror-abusefilter-badsyntax": "The filter has invalid syntax."
+}
diff --git a/AbuseFilter/i18n/api/es.json b/AbuseFilter/i18n/api/es.json
new file mode 100644
index 00000000..82539824
--- /dev/null
+++ b/AbuseFilter/i18n/api/es.json
@@ -0,0 +1,59 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ciencia Al Poder",
+ "Dgstranz",
+ "Fitoschido",
+ "Macofe",
+ "MarcoAurelio",
+ "Ryo567"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Comprueba si el filtro antiabusos coincide con un conjunto de variables, una edición o un evento del registro del editor antiabusos.\n\nSe necesita \"vars\", \"rcid\" o \"logid\", pero solo se utiliza uno.",
+ "apihelp-abusefiltercheckmatch-summary": "Comprobar si un filtro antiabusos coincide con un conjunto de variables, una edición o un suceso registrado del filtro antiabusos.",
+ "apihelp-abusefiltercheckmatch-extended-description": "Se requieren vars, rcid o logid, pero sólo uno puede ser usado.",
+ "apihelp-abusefiltercheckmatch-param-filter": "El texto completo que se comprobará en busca de coincidencias.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Matriz JSON codificada de variables para realizar la prueba.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "Identificador del cambio reciente contra el cual verificar.",
+ "apihelp-abusefiltercheckmatch-param-logid": "ID del registro del filtro antiabusos para comprobarlo.",
+ "apihelp-abusefiltercheckmatch-example-1": "Prueba si el reciente cambio con identificador 15 coincide con un filtro simple",
+ "apihelp-abusefilterchecksyntax-description": "Comprobar la sintaxis de un filtro antiabusos.",
+ "apihelp-abusefilterchecksyntax-summary": "Verificar el código de un filtro antiabusos.",
+ "apihelp-abusefilterchecksyntax-param-filter": "El texto completo del filtro cuya sintaxis se comprobará.",
+ "apihelp-abusefilterchecksyntax-example-1": "Comprobar sintaxis de un filtro válido",
+ "apihelp-abusefilterchecksyntax-example-2": "Comprobar sintaxis de un filtro no válido",
+ "apihelp-abusefilterevalexpression-description": "Evalúa una expresión del filtro antiabusos.",
+ "apihelp-abusefilterevalexpression-summary": "Evalúa una expresión del filtro antiabusos.",
+ "apihelp-abusefilterevalexpression-param-expression": "La expresión que se evaluará.",
+ "apihelp-abusefilterevalexpression-example-1": "Evaluar una expresión simple",
+ "apihelp-abusefilterunblockautopromote-description": "Desbloquea un usuario de recibir autopromociones como consecuencia del filtro antiabusos.",
+ "apihelp-abusefilterunblockautopromote-summary": "Desbloquea a un usuario para que pueda recibir permisos de usuario otorgados automáticamente por el sistema, anteriormente impedido como consecuencia de un disparo del filtro antiabusos.",
+ "apihelp-abusefilterunblockautopromote-param-user": "El nombre del usuario que se desbloqueará.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Eliminar el bloqueo en la autopromoción de [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Mostrar detalles de los filtros antiabusos.",
+ "apihelp-query+abusefilters-summary": "Mostrar los detalles de los filtros antiabusos.",
+ "apihelp-query+abusefilters-param-startid": "El identificador de filtro para comenzar la enumeración.",
+ "apihelp-query+abusefilters-param-endid": "El identificador de filtro para detener la enumeración.",
+ "apihelp-query+abusefilters-param-show": "Sólo mostrar los filtros que cumplan con estos criterios.",
+ "apihelp-query+abusefilters-param-limit": "El número máximo de filtros a listar.",
+ "apihelp-query+abusefilters-param-prop": "Qué propiedades obtener",
+ "apihelp-query+abusefilters-example-1": "Listar los filtros públicos habilitados",
+ "apihelp-query+abusefilters-example-2": "Mostrar algunos detalles acerca de los filtros",
+ "apihelp-query+abuselog-description": "Mostrar eventos que fueron detectados por uno de los filtros antiabusos.",
+ "apihelp-query+abuselog-summary": "Mostrar los eventos que fueron detectados por uno de los filtros antiabusos.",
+ "apihelp-query+abuselog-param-logid": "Muestra una entrada a partir del ID de log proporcionado.",
+ "apihelp-query+abuselog-param-start": "El sello de tiempo para comenzar la enumeración",
+ "apihelp-query+abuselog-param-end": "El sello de tiempo para detener la enumeración.",
+ "apihelp-query+abuselog-param-user": "Mostrar solo entradas correspondientes a un usuario o IP determinado.",
+ "apihelp-query+abuselog-param-title": "Mostrar solo entradas correspondientes a una página determinada.",
+ "apihelp-query+abuselog-param-filter": "Mostrar solo entradas capturadas por un identificador de filtro determinado.",
+ "apihelp-query+abuselog-param-limit": "La cantidad máxima de entradas que aparecerán.",
+ "apihelp-query+abuselog-param-prop": "Qué propiedades se obtendrán.",
+ "apihelp-query+abuselog-param-wiki": "Wiki del cual mostrar las detecciones.",
+ "apihelp-query+abuselog-example-1": "Mostrar entradas recientes del registro",
+ "apihelp-query+abuselog-example-2": "Mostrar entradas recientes del registro para [[API]]",
+ "apierror-abusefilter-canttest": "No tienes permiso para probar filtros antiabusos.",
+ "apierror-abusefilter-cantcheck": "No tienes permiso para comprobar la sintaxis de los filtros antiabusos.",
+ "apierror-abusefilter-nosuchlogid": "No existe ninguna entrada en el registro de abusos con la ID $1.",
+ "apierror-abusefilter-badsyntax": "El filtro contiene sintaxis no válida."
+}
diff --git a/AbuseFilter/i18n/api/fa.json b/AbuseFilter/i18n/api/fa.json
new file mode 100644
index 00000000..f24ceaa7
--- /dev/null
+++ b/AbuseFilter/i18n/api/fa.json
@@ -0,0 +1,57 @@
+{
+ "@metadata": {
+ "authors": [
+ "Alirezaaa",
+ "Huji",
+ "Ladsgroup",
+ "Reza1615"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "بررسی کنید تا ببینید اگر پالایهٔ خرابکاری با مجموعه‌ای از متغییرها، یک ویرایش، یا یک رویداد سیاههٔ پالایهٔ خرابکاری کاربر مطابق است.\n\n متغییر، شناسهٔ تغییرات اخیر یا شناسهٔ ورود مورد نیاز است، اما فقط یکی از این سه می‌تواند استفاده شود.",
+ "apihelp-abusefiltercheckmatch-summary": "بررسی کنید اگر یک پالایهٔ خرابکاری با مجموعه‌ای از متغیرها مطابقت داشت، editor logged AbuseFilter event.",
+ "apihelp-abusefiltercheckmatch-extended-description": "vars، rcid، یا logid لازم است هرچند یکی از آنها استفاده می‌شود.",
+ "apihelp-abusefiltercheckmatch-param-filter": "متن کامل پالایه برای بررسی یک مورد مطابقت‌یافته.",
+ "apihelp-abusefiltercheckmatch-param-vars": "آرایه رمزگذاری شدهٔ به صورت جی‌سان از متغیرها برای آزمایش کردن.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "شناسهٔ تغییرات اخیر برای بررسی.",
+ "apihelp-abusefiltercheckmatch-param-logid": "شناسهٔ سیاههٔ پالایهٔ خرابکاری برای بررسی.",
+ "apihelp-abusefiltercheckmatch-example-1": "آزمایش کنید که آیا تغییرات شمارهٔ ۱۵ با یک پالایهٔ ساده مطابقت دارد یا خیر",
+ "apihelp-abusefilterchecksyntax-description": "نحو یک پالایهٔ خرابکاری را بررسی کنید.",
+ "apihelp-abusefilterchecksyntax-summary": "نحو یک پالایهٔ خرابکاری را بررسی کنید.",
+ "apihelp-abusefilterchecksyntax-param-filter": "متن کامل پالایه برای بررسی کردن نحو",
+ "apihelp-abusefilterchecksyntax-example-1": "نحو یک پالایهٔ مجاز را بررسی کنید",
+ "apihelp-abusefilterchecksyntax-example-2": "نحو یک پالایهٔ غیر مجاز را بررسی کنید",
+ "apihelp-abusefilterevalexpression-description": "یک عبارت پالایهٔ خرابکاری را ارزشیابی می‌کند.",
+ "apihelp-abusefilterevalexpression-summary": "یک عبارت پالایهٔ خرابکاری را ارزشیابی می‌کند.",
+ "apihelp-abusefilterevalexpression-param-expression": "عبارت برای ارزشیابی.",
+ "apihelp-abusefilterevalexpression-example-1": "ارزشیابی یک عبارت ساده",
+ "apihelp-abusefilterunblockautopromote-description": "باز کردن یک کاربر از ارتقاء خودکار بر پایهٔ نتیجهٔ پالایهٔ خرابکاری.",
+ "apihelp-abusefilterunblockautopromote-summary": "باز کردن یک کاربر از ارتقاء خودکار بر پایهٔ نتیجهٔ پالایهٔ خرابکاری.",
+ "apihelp-abusefilterunblockautopromote-param-user": "نام کاربری‌ای که قصد باز کردن آن را دارید.",
+ "apihelp-abusefilterunblockautopromote-example-1": "برداشتن قفل بر روی ارتقاء خودکار [[User:Example]]",
+ "apihelp-query+abusefilters-description": "نمایش جزئیات پالایهٔ خرابکاری.",
+ "apihelp-query+abusefilters-summary": "نمایش جزئیات پالایهٔ خرابکاری.",
+ "apihelp-query+abusefilters-param-startid": "شناسهٔ پالایه برای شروع شمارش از آن.",
+ "apihelp-query+abusefilters-param-endid": "شناسهٔ پالایه برای توقف شمارش.",
+ "apihelp-query+abusefilters-param-show": "نمایش پالایه‌هایی که شامل این موضوع هستند.",
+ "apihelp-query+abusefilters-param-limit": "حداکثر تعداد پالایه‌ها برای فهرست کردن.",
+ "apihelp-query+abusefilters-param-prop": "خصوصیتی که باید گرفته شود.",
+ "apihelp-query+abusefilters-example-1": "نمایش پالایه‌های عمومی فعال",
+ "apihelp-query+abusefilters-example-2": "نمایش تعدادی از جزئیات دربارهٔ پالایه‌ها",
+ "apihelp-query+abuselog-description": "نمایش رویدادهایی که توسط پالایه جلوگیری شده‌اند.",
+ "apihelp-query+abuselog-summary": "نمایش رویدادهایی که توسط پالایه جلوگیری شده‌اند.",
+ "apihelp-query+abuselog-param-logid": "نمایش یک مورد با شناسهٔ داده شده",
+ "apihelp-query+abuselog-param-start": "تاریخی که از آن شمارش شروع شود.",
+ "apihelp-query+abuselog-param-end": "تاریخی که شمارش از آن متوقف شود.",
+ "apihelp-query+abuselog-param-user": "نمایش ورودی‌های انجام شده توسط کاربر یا آی‌پی.",
+ "apihelp-query+abuselog-param-title": "نمایش ورودی‌هایی که بر روی یک صفحهٔ مشخص اعمال شده اند.",
+ "apihelp-query+abuselog-param-filter": "نمایش ورودی‌هایی که توسط یک شناسهٔ پالایهٔ داده‌شده جلوگیری شده‌اند.",
+ "apihelp-query+abuselog-param-limit": "حداکثر تعداد ورودی‌هایی که نمایش داده شود.",
+ "apihelp-query+abuselog-param-prop": "خصوصیتی که باید گرفته شود.",
+ "apihelp-query+abuselog-param-wiki": "ویکی برای نمایش تأثیر گرفته از آن",
+ "apihelp-query+abuselog-example-1": "نمایش سیاههٔ آخرین ورودی‌ها",
+ "apihelp-query+abuselog-example-2": "نمایش آخرین موارد سیاهه از [[API]]",
+ "apierror-abusefilter-canttest": "شما اجازهٔ آزمایش پالایه‌های خرابکاری را ندارید.",
+ "apierror-abusefilter-cantcheck": "شما اجازهٔ آزمایش نحوی پالایه‌های خرابکاری را ندارید.",
+ "apierror-abusefilter-nosuchlogid": "هیچ موردی در سیاههٔ خرابکاری با شناسهٔ $1 وجود ندارد.",
+ "apierror-abusefilter-badsyntax": "نحو پالایه غیرمجاز است"
+}
diff --git a/AbuseFilter/i18n/api/fi.json b/AbuseFilter/i18n/api/fi.json
new file mode 100644
index 00000000..f15a42b8
--- /dev/null
+++ b/AbuseFilter/i18n/api/fi.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "01miki10",
+ "Pxos",
+ "Pyscowicz"
+ ]
+ },
+ "apihelp-abusefilterchecksyntax-description": "Tarkista väärinkäyttösuodattimen syntaksi.",
+ "apihelp-abusefilterchecksyntax-example-1": "Tarkasta kelvollisen suodattimen ehtolauserakenne",
+ "apihelp-abusefilterchecksyntax-example-2": "Tarkasta epäkelvon suodattimen ehtolauserakenne",
+ "apihelp-abusefilterevalexpression-description": "Arvioi väärinkäyttösuodattimen lauseketta.",
+ "apihelp-abusefilterevalexpression-param-expression": "Arvioitava lauseke.",
+ "apihelp-abusefilterevalexpression-example-1": "Arvioi yksinkertaista lauseketta",
+ "apihelp-abusefilterunblockautopromote-param-user": "Käyttäjän, jolta haluat poistaa eston, käyttäjänimi.",
+ "apihelp-query+abusefilters-description": "Näytä väärinkäyttösuodatinten yksityiskohdat.",
+ "apihelp-query+abusefilters-example-1": "Luetteloi käytössä olevat julkiset suodattimet",
+ "apihelp-query+abusefilters-example-2": "Näytä joitain tietoja suodattimista",
+ "apihelp-query+abuselog-example-1": "Näytä viimeisimmät lokimerkinnät",
+ "apierror-abusefilter-badsyntax": "Suodattimella on virheellinen syntaksi."
+}
diff --git a/AbuseFilter/i18n/api/fr.json b/AbuseFilter/i18n/api/fr.json
new file mode 100644
index 00000000..60eaf001
--- /dev/null
+++ b/AbuseFilter/i18n/api/fr.json
@@ -0,0 +1,57 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gomoko",
+ "Orlodrim",
+ "Urhixidur",
+ "Wladek92"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Cocher pour voir si un AbuseFilter correspond à un ensemble de variables, une modification, ou un événement AbuseFilter du journal.\n\nvars, rcid ou logid est obligatoire, mais un seul d’entre-eux doit être utilisé.",
+ "apihelp-abusefiltercheckmatch-summary": "Vérifier pour voir si un AbuseFilter correspond à un ensemble de variables, une modification, ou un événement AbuseFilter du journal.",
+ "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid ou logid est nécessaire bien qu'un seul puisse être utilisé.",
+ "apihelp-abusefiltercheckmatch-param-filter": "Le texte complet du filtre pour vérifier une correspondance.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Tableau JSON encodé de variables à tester.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "ID de la modification récente sur laquelle tester le filtre.",
+ "apihelp-abusefiltercheckmatch-param-logid": "ID de l’entrée du journal du filtre antiabus sur laquelle tester le filtre.",
+ "apihelp-abusefiltercheckmatch-example-1": "Vérifie si la modification récente d’ID 15 est détectée par un filtre simple",
+ "apihelp-abusefilterchecksyntax-description": "Vérifier la syntaxe d’un filtre antiabus.",
+ "apihelp-abusefilterchecksyntax-summary": "Vérifier la syntaxe d’un filtre anti-abus.",
+ "apihelp-abusefilterchecksyntax-param-filter": "Le texte complet du filtre dont la syntaxe doit être vérifiée.",
+ "apihelp-abusefilterchecksyntax-example-1": "Vérifier la syntaxe d’un filtre valide",
+ "apihelp-abusefilterchecksyntax-example-2": "Vérifier la syntaxe d’un filtre invalide",
+ "apihelp-abusefilterevalexpression-description": "Évalue une expression du filtre antiabus.",
+ "apihelp-abusefilterevalexpression-summary": "Evalue l'expression d'un filtre anti-abus.",
+ "apihelp-abusefilterevalexpression-param-expression": "L’expression à évaluer.",
+ "apihelp-abusefilterevalexpression-example-1": "Évaluer une expression simple",
+ "apihelp-abusefilterunblockautopromote-description": "Annule le blocage par un filtre antiabus des promotions automatiques de statut d’un utilisateur.",
+ "apihelp-abusefilterunblockautopromote-summary": "Empêche un utilisateur de recevoir des auto-promotions résultant d'un filtre anti-abus.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Nom de l’utilisateur à débloquer.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Supprime le blocage des promotions automatiques de statut pour [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Afficher les détails des filtres antiabus.",
+ "apihelp-query+abusefilters-summary": "Afficher les détails des filtres anti-abus.",
+ "apihelp-query+abusefilters-param-startid": "Numéro de filtre auquel commencer l’énumération.",
+ "apihelp-query+abusefilters-param-endid": "Numéro de filtre auquel terminer l’énumération.",
+ "apihelp-query+abusefilters-param-show": "Afficher seulement les filtres correspondant à ces critères.",
+ "apihelp-query+abusefilters-param-limit": "Le nombre maximum de filtres à renvoyer.",
+ "apihelp-query+abusefilters-param-prop": "Quelles propriétés obtenir.",
+ "apihelp-query+abusefilters-example-1": "Afficher les filtres publics activés.",
+ "apihelp-query+abusefilters-example-2": "Afficher certains détails sur les filtres.",
+ "apihelp-query+abuselog-description": "Afficher les événements détectés par l’un des filtres antiabus.",
+ "apihelp-query+abuselog-summary": "Affiche les événements capturés par un des filtres anti-abus.",
+ "apihelp-query+abuselog-param-logid": "Afficher une entrée avec l’ID de journal fourni.",
+ "apihelp-query+abuselog-param-start": "L’horodatage auquel commencer l’énumération.",
+ "apihelp-query+abuselog-param-end": "L’horodatage auquel terminer l’énumération.",
+ "apihelp-query+abuselog-param-user": "Afficher uniquement les entrées faites par un utilisateur ou une adresse IP donné.",
+ "apihelp-query+abuselog-param-title": "Afficher uniquement les entrées se produisant sur une page donnée.",
+ "apihelp-query+abuselog-param-filter": "Afficher uniquement les entrées capturées par un ID de filtre donné.",
+ "apihelp-query+abuselog-param-limit": "Le nombre maximal d’entrées à liter.",
+ "apihelp-query+abuselog-param-prop": "Quelles propriétés obtenir.",
+ "apihelp-query+abuselog-param-wiki": "Wiki depuis lequel afficher les visites",
+ "apihelp-query+abuselog-example-1": "Afficher les entrées récentes du journal",
+ "apihelp-query+abuselog-example-2": "Afficher les entrées récentes du journal pour [[API]]",
+ "apierror-abusefilter-canttest": "Vous n'avez pas la permission de tester les filtres antiabus.",
+ "apierror-abusefilter-cantcheck": "Vous n’avez pas la permission de vérifier la syntaxe des filtres antiabus.",
+ "apierror-abusefilter-nosuchlogid": "Il n'y a pas d'entrée dans le journal des abus avec l'identifiant $1.",
+ "apierror-abusefilter-badsyntax": "Le filtre a une syntaxe non valide."
+}
diff --git a/AbuseFilter/i18n/api/gl.json b/AbuseFilter/i18n/api/gl.json
new file mode 100644
index 00000000..2e603383
--- /dev/null
+++ b/AbuseFilter/i18n/api/gl.json
@@ -0,0 +1,54 @@
+{
+ "@metadata": {
+ "authors": [
+ "Banjo",
+ "Elisardojm",
+ "Navhy"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Revise se un AbuseFilter concorda cun conxunto de variables, evento de rexistro de editor AbuseFilter.\n\nvars, rcid ou logid se necesita aínda que só un pode ser usado.",
+ "apihelp-abusefiltercheckmatch-summary": "Verificar se un filtro de abusos coincide cun conxunto de variables, editor gardou evento AbuseFilter.",
+ "apihelp-abusefiltercheckmatch-extended-description": "É necesario un dos seguintesː vars, rcid ou logid, e só pode usarse un.",
+ "apihelp-abusefiltercheckmatch-param-filter": "O texto completo do filtro para verificar unha correspondencia.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Matriz codificada JSON de variables contra as que facer a proba.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "ID da modificación recente sobre a que verificar o filtro.",
+ "apihelp-abusefiltercheckmatch-param-logid": "ID da entrada do rexistro do filtro antiabusos sobre a que verificar o filtro.",
+ "apihelp-abusefiltercheckmatch-example-1": "Verificar se a modificación recente do ID 15 é detectada por un filtro simple",
+ "apihelp-abusefilterchecksyntax-description": "Revisar a sintaxe dun filtro Antiabuso.",
+ "apihelp-abusefilterchecksyntax-summary": "Revisar a sintaxe dun filtro Antiabuso.",
+ "apihelp-abusefilterchecksyntax-param-filter": "O texto completo do filtro para verificar a sintaxe.",
+ "apihelp-abusefilterchecksyntax-example-1": "Comprobar a sintaxe dun filtro válido",
+ "apihelp-abusefilterchecksyntax-example-2": "Comprobar a sintaxe dun filtro non válido",
+ "apihelp-abusefilterevalexpression-description": "Evaluar expresión dun Filtro de Abuso.",
+ "apihelp-abusefilterevalexpression-summary": "Avaliar a expresión dun Filtro de anti-abuso.",
+ "apihelp-abusefilterevalexpression-param-expression": "Expresión a evaluar.",
+ "apihelp-abusefilterevalexpression-example-1": "Evaluar una expresión simple",
+ "apihelp-abusefilterunblockautopromote-description": "Desbloquea a un usuario de recibir autopromocións debido a unha consecuencia do filtro de abusos.",
+ "apihelp-abusefilterunblockautopromote-summary": "Desbloquea a un usuario de recibir autopromocións debido a unha consecuencia do filtro de abusos.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Nome de usuario que quere desbloquear.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Quitar o bloqueo por autopromoción de [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Amosar detalles dos fitros de abuso.",
+ "apihelp-query+abusefilters-summary": "Amosar detalles dos fitros de abuso.",
+ "apihelp-query+abusefilters-param-startid": "ID do filtro no que comezar a enumeración.",
+ "apihelp-query+abusefilters-param-endid": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+abusefilters-param-show": "Só amosar filtros que cumpran con estes criterios.",
+ "apihelp-query+abusefilters-param-limit": "O número máximo de filtros a listar.",
+ "apihelp-query+abusefilters-param-prop": "Que propiedades obter",
+ "apihelp-query+abusefilters-example-1": "Listar os filtros públicos habilitados",
+ "apihelp-query+abusefilters-example-2": "Amosar algúns detalles sobre os filtros",
+ "apihelp-query+abuselog-description": "Amosar eventos que foron detectados por un dos filtros antiabusos.",
+ "apihelp-query+abuselog-summary": "Amosar eventos que foron detectados por un dos filtros antiabusos.",
+ "apihelp-query+abuselog-param-start": "Selo de tempo para comezar a enumeración",
+ "apihelp-query+abuselog-param-end": "Selo de tempo para rematar a enumeración.",
+ "apihelp-query+abuselog-param-user": "Só amosar entradas feitas por un usuario ou dirección IP dados.",
+ "apihelp-query+abuselog-param-title": "Só amosar entradas ocorridas nunha páxina dada.",
+ "apihelp-query+abuselog-param-filter": "Só amosar as entradas que foron capturadas por un ID de filtro indicado.",
+ "apihelp-query+abuselog-param-limit": "Máximo número de entradas a listar.",
+ "apihelp-query+abuselog-param-prop": "Que propiedades obter.",
+ "apihelp-query+abuselog-example-1": "Amosar entradas recentes do rexistro",
+ "apihelp-query+abuselog-example-2": "Amosar entradas recentes do rexistro para [[API]]",
+ "apierror-abusefilter-canttest": "Non tes permiso para probar filtros de abusos.",
+ "apierror-abusefilter-cantcheck": "Non tes permiso para comprobar a sintaxe de filtros de abusos.",
+ "apierror-abusefilter-nosuchlogid": "Non existe ningunha entrada no rexistro de abusos co ID $1.",
+ "apierror-abusefilter-badsyntax": "O filtro ten unha sintaxe non válida."
+}
diff --git a/AbuseFilter/i18n/api/he.json b/AbuseFilter/i18n/api/he.json
new file mode 100644
index 00000000..d67d865d
--- /dev/null
+++ b/AbuseFilter/i18n/api/he.json
@@ -0,0 +1,57 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amire80",
+ "Esh77",
+ "Guycn2",
+ "ערן"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "בדיקה האם מסנן השחתות מתאים לערכת משתנים, לעריכה או לפעולה שנרשמה ביומן ההשחתות.\n\nvars‏, rcid או logid נדרש, אבל אפשר להשתמש רק באחד מהם.",
+ "apihelp-abusefiltercheckmatch-summary": "בדיקה האם מסנן השחתות מתאים לערכת משתנים, לעריכה או לפעולה שנרשמה ביומן ההשחתות.",
+ "apihelp-abusefiltercheckmatch-extended-description": "נחוץ vars או rcid או logid, אבל רק אחד מהם יכול לשמש.",
+ "apihelp-abusefiltercheckmatch-param-filter": "הטקסט המלא של המסנן שייבדק לחיפוש התאמה.",
+ "apihelp-abusefiltercheckmatch-param-vars": "מערך מקודד ב־JSON של משתנים שמולם תיערך בדיקה.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "מזהה בשינויים האחרונים לבדוק מולו.",
+ "apihelp-abusefiltercheckmatch-param-logid": "מזהה ביומן מסנן ההשחתות שמולו הבדיקה תתבצע.",
+ "apihelp-abusefiltercheckmatch-example-1": "בדיקה האם שינוי אחרון עם המזהה 15 מתאים למסנן פשוט",
+ "apihelp-abusefilterchecksyntax-description": "בדיקת תחביר של מסנן השחתות.",
+ "apihelp-abusefilterchecksyntax-summary": "בדיקת תחביר של אחד ממסנני ההשחתות.",
+ "apihelp-abusefilterchecksyntax-param-filter": "הטקסט המלא של המסנן לבדיקת תחביר עבורו.",
+ "apihelp-abusefilterchecksyntax-example-1": "בדיקת תחביר למסנן תקין",
+ "apihelp-abusefilterchecksyntax-example-2": "בדיקת תחביר למסנן לא תקין",
+ "apihelp-abusefilterevalexpression-description": "הערכת ביטוח מסנן השחתות.",
+ "apihelp-abusefilterevalexpression-summary": "הערכת ביטוי מסנן השחתות.",
+ "apihelp-abusefilterevalexpression-param-expression": "איזה ביטוח להעריך.",
+ "apihelp-abusefilterevalexpression-example-1": "הערכת ביטוי פשוט",
+ "apihelp-abusefilterunblockautopromote-description": "ביטול מניעה ממשתמש לקבל קידום אוטומטי בעקבות תוצאה של פעולת מסנן השחתות.",
+ "apihelp-abusefilterunblockautopromote-summary": "מסיר ממשתמש את החסימה מפני קבלת קידום אוטומטי כתוצאה מפעולת מסנן השחתות.",
+ "apihelp-abusefilterunblockautopromote-param-user": "שם של משתמש שברצונך ליטול ממנו את המניעה.",
+ "apihelp-abusefilterunblockautopromote-example-1": "הסרת מניעת קידום אוטומטי של [[User:Example]]",
+ "apihelp-query+abusefilters-description": "הצגת פרטים על מסנן השחתה.",
+ "apihelp-query+abusefilters-summary": "הצגת פרטים על מסנני השחתות.",
+ "apihelp-query+abusefilters-param-startid": "מזהה המסנן שהמנייה תתחיל ממנו.",
+ "apihelp-query+abusefilters-param-endid": "מזהה המסנן שבו תסתיים המנייה.",
+ "apihelp-query+abusefilters-param-show": "הצגת מסננים שמתאימים לאמות המידה הבאות.",
+ "apihelp-query+abusefilters-param-limit": "המספר המרבי של מסננים שיירשמו.",
+ "apihelp-query+abusefilters-param-prop": "אילו מאפיינים לקבל.",
+ "apihelp-query+abusefilters-example-1": "רשימת מסננים ציבוריים מופעלים",
+ "apihelp-query+abusefilters-example-2": "הצגת פרטים מסוימים על מסננים",
+ "apihelp-query+abuselog-description": "הצגת אירועים שנתפסו על־ידי אחד ממסנני ההשחתות.",
+ "apihelp-query+abuselog-summary": "הצגת אירועים שנתפסו על־ידי אחד ממסנני ההשחתות.",
+ "apihelp-query+abuselog-param-logid": "הצגת ערך עם מזהה היומן שצוין.",
+ "apihelp-query+abuselog-param-start": "חותם־הזמן שהמנייה תתחיל ממנו.",
+ "apihelp-query+abuselog-param-end": "חותם־הזמן שבו תסתיים המנייה.",
+ "apihelp-query+abuselog-param-user": "להציג רק עיולים שנעשו על־ידי משתמש נתון או כתובת IP.",
+ "apihelp-query+abuselog-param-title": "להציג רק עיולים שאירעו בדך נתון.",
+ "apihelp-query+abuselog-param-filter": "להציג רק עיולים שנתפסו במסנן עם מזהה מסנן נתון.",
+ "apihelp-query+abuselog-param-limit": "מספר מרבי של עיולים שיהיו ברשימה.",
+ "apihelp-query+abuselog-param-prop": "אילו מאפיינים לקבל.",
+ "apihelp-query+abuselog-param-wiki": "אתר הוויקי שממנו יוצגו תוצאות.",
+ "apihelp-query+abuselog-example-1": "להציג עיולי יומן אחרונים",
+ "apihelp-query+abuselog-example-2": "הצגת עיולי יומן אחרונים עבור [[API]]",
+ "apierror-abusefilter-canttest": "אין לך הרשאה לבחון מסנני השחתות.",
+ "apierror-abusefilter-cantcheck": "אין לך הרשאה לבדוק את התחביר של מסנני השחתות.",
+ "apierror-abusefilter-nosuchlogid": "אין רשומה ביומן ההשחתות עם המזהה $1.",
+ "apierror-abusefilter-badsyntax": "המסנן מכיל תחביר בלתי תקין."
+}
diff --git a/AbuseFilter/i18n/api/hi.json b/AbuseFilter/i18n/api/hi.json
new file mode 100644
index 00000000..75492e81
--- /dev/null
+++ b/AbuseFilter/i18n/api/hi.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hindustanilanguage"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-param-filter": "मेल खाने को जाँचने के लिए पूर्ण फ़िलटर पाठ ।",
+ "apihelp-abusefilterevalexpression-param-expression": "जाँचने की अभिव्यक्ति",
+ "apihelp-abusefilterevalexpression-example-1": "सीधी अभिव्यक्ति जाँचना",
+ "apihelp-abusefilterunblockautopromote-param-user": "उस सदस्य का सदस्यनाम जिस पर से आप अवरोध हटाना चाहते हैं।",
+ "apihelp-abusefilterunblockautopromote-example-1": "[[User:Example]] के स्वतःपदोन्नति पर से अवरोध हटाना",
+ "apihelp-query+abusefilters-param-prop": "कौन से गुण पाना चाहिए।",
+ "apihelp-query+abusefilters-example-1": "सक्षम सार्वजनिक फ़िलटरों सूची दें",
+ "apihelp-query+abusefilters-example-2": "फ़िलटरों के बारे में कुछ जानकारी दिखाइये",
+ "apihelp-query+abuselog-description": "उन घटनाओं को दिखाएँ जिन्हें दुरुपयोग फ़िलटरों में से किसी एक द्वारा दिखाया गया है।",
+ "apihelp-query+abuselog-param-start": "समयछाप की गिनती प्रारंभ हो रही (स्थान) से।",
+ "apihelp-query+abuselog-param-end": "समयछाप की गिनती समाप्त हो रही (स्थान) से।",
+ "apihelp-query+abuselog-param-user": "केवल उन प्रविष्टियों को दिखाएँ जो दिए गए सदस्य या आई०पी० पते द्वारा किए गए हैं।",
+ "apihelp-query+abuselog-param-title": "केवल उन प्रविष्टियों को दिखाएँ जो दिए गए पृष्ठ पर आ रहे हैं।",
+ "apihelp-query+abuselog-param-filter": "केवल उन प्रविष्टियों को दिखाएँ जो दी गई फ़िलटर आई०डी० द्वारा दिखाई गई है।",
+ "apihelp-query+abuselog-param-limit": "सूची के अनुसार सर्वाधिक प्रविष्टियाँ।",
+ "apihelp-query+abuselog-param-prop": "कौन से गुण पाना चाहिए।",
+ "apihelp-query+abuselog-example-1": "हाल के लॉग प्रविष्टियाँ दिखाएँ",
+ "apihelp-query+abuselog-example-2": "हाल के लॉग प्रविष्टियाँ [[API]] के लिए दिखाएँ"
+}
diff --git a/AbuseFilter/i18n/api/hr.json b/AbuseFilter/i18n/api/hr.json
new file mode 100644
index 00000000..712b20e6
--- /dev/null
+++ b/AbuseFilter/i18n/api/hr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bugoslav"
+ ]
+ },
+ "apierror-abusefilter-badsyntax": "Filtar nema valjanu sintaksu."
+}
diff --git a/AbuseFilter/i18n/api/hsb.json b/AbuseFilter/i18n/api/hsb.json
new file mode 100644
index 00000000..50b1aa42
--- /dev/null
+++ b/AbuseFilter/i18n/api/hsb.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "J budissin"
+ ]
+ },
+ "apihelp-abusefilterchecksyntax-example-1": "Syntaksu płaćiweho filtra přepruwować",
+ "apihelp-abusefilterchecksyntax-example-2": "Syntaksu njepłaćiweho filtra přepruwować",
+ "apihelp-abusefilterunblockautopromote-param-user": "Mjeno wužiwarja, kotrehož chceš dopušćić"
+}
diff --git a/AbuseFilter/i18n/api/hu.json b/AbuseFilter/i18n/api/hu.json
new file mode 100644
index 00000000..629d6822
--- /dev/null
+++ b/AbuseFilter/i18n/api/hu.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dj",
+ "Wolf Rex"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "vars, rcid vagy logid szükséges, de csak egyet lehet használni.",
+ "apihelp-query+abusefilters-example-1": "Az engedélyezett nyilvános szűrők listázása.",
+ "apihelp-query+abuselog-example-1": "Friss naplóbejegyzések mutatása"
+}
diff --git a/AbuseFilter/i18n/api/ia.json b/AbuseFilter/i18n/api/ia.json
new file mode 100644
index 00000000..f5453220
--- /dev/null
+++ b/AbuseFilter/i18n/api/ia.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Verifica si un filtro anti-abuso corresponde a un insimul de variabiles. Evento AbuseFilter traciate per le editor.\n\nvars, rcid o logid es obligatori, ma solmente un inter illos pote esser usate.",
+ "apihelp-abusefiltercheckmatch-summary": "Verificar si un filtro anti-abuso corresponde a un insimul de variabiles (un redactor registrava un evento AbuseFilter).",
+ "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid o logid es requirite, ma solmente un de istes pote esser usate.",
+ "apihelp-abusefiltercheckmatch-param-filter": "Le texto complete del filtro pro verificar si un correspondentia existe.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Array, codificate in JSON, de variabiles contra le quales testar.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "ID de modification recente contra le qual verificar.",
+ "apihelp-abusefiltercheckmatch-param-logid": "ID de registro de filtro anti-abuso contra le qual verificar.",
+ "apihelp-abusefiltercheckmatch-example-1": "Testar si le ID de modification recente 15 corresponde a un filtro simple",
+ "apihelp-abusefilterchecksyntax-description": "Verificar le syntaxe de un filtro anti-abuso.",
+ "apihelp-abusefilterchecksyntax-summary": "Verificar le syntaxe de un filtro anti-abuso.",
+ "apihelp-abusefilterchecksyntax-param-filter": "Le texto complete del filtro del qual verificar le syntaxe.",
+ "apihelp-abusefilterchecksyntax-example-1": "Verificar le syntaxe de un filtro valide",
+ "apihelp-abusefilterchecksyntax-example-2": "Verificar le syntaxe de un filtro non valide",
+ "apihelp-abusefilterevalexpression-description": "Evaluta un expression de filtro anti-abuso.",
+ "apihelp-abusefilterevalexpression-summary": "Evaluta un expression de filtro anti-abuso.",
+ "apihelp-abusefilterevalexpression-param-expression": "Le expression a evalutar.",
+ "apihelp-abusefilterevalexpression-example-1": "Evalutar un expression simple",
+ "apihelp-abusefilterunblockautopromote-description": "Permitte que un usator recipe autopromotiones a causa de un consequentia de filtro anti-abuso.",
+ "apihelp-abusefilterunblockautopromote-summary": "Permitte que un usator recipe autopromotiones a causa de un consequentia de filtro anti-abuso.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Nomine del usator a disblocar.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Remover le blocada de autopromotion de [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Monstrar detalios del filtros anti-abuso.",
+ "apihelp-query+abusefilters-summary": "Monstrar detalios del filtros anti-abuso.",
+ "apihelp-query+abusefilters-param-startid": "Le ID del filtro ubi comenciar a enumerar.",
+ "apihelp-query+abusefilters-param-endid": "Le ID del filtro ubi cessar de enumerar.",
+ "apihelp-query+abusefilters-param-show": "Monstrar solmente filtros que satisface iste criterios.",
+ "apihelp-query+abusefilters-param-limit": "Le numero maxime de filtros a listar.",
+ "apihelp-query+abusefilters-param-prop": "Qual proprietates obtener.",
+ "apihelp-query+abusefilters-example-1": "Listar le filtros public active",
+ "apihelp-query+abusefilters-example-2": "Monstrar alcun detalios sur filtros",
+ "apihelp-query+abuselog-description": "Monstrar eventos detegite per un del filtros anti-abuso",
+ "apihelp-query+abuselog-summary": "Monstrar eventos detegite per un del filtros anti-abuso.",
+ "apihelp-query+abuselog-param-start": "Le data e hora al qual comenciar a enumerar.",
+ "apihelp-query+abuselog-param-end": "Le data e hora al qual cessar de enumerar.",
+ "apihelp-query+abuselog-param-user": "Monstrar solmente entratas facite per un usator o adresse IP date.",
+ "apihelp-query+abuselog-param-title": "Monstrar solmente entratas que occurre in un pagina date.",
+ "apihelp-query+abuselog-param-filter": "Monstrar solmente entratas detegite per un ID de filtro date.",
+ "apihelp-query+abuselog-param-limit": "Le numero maxime de entratas a listar.",
+ "apihelp-query+abuselog-param-prop": "Qual proprietates obtener.",
+ "apihelp-query+abuselog-example-1": "Monstrar entratas recente de registro",
+ "apihelp-query+abuselog-example-2": "Monstrar entratas recente de registro pro [[API]]",
+ "apierror-abusefilter-canttest": "Tu non ha le permission de testar le filtros anti-abuso.",
+ "apierror-abusefilter-cantcheck": "Tu non ha le permission de verificar le syntaxe de filtros anti-abuso.",
+ "apierror-abusefilter-nosuchlogid": "Il non ha un entrata con ID $1 in le registro de abusos.",
+ "apierror-abusefilter-badsyntax": "Le filtro ha un syntaxe invalide."
+}
diff --git a/AbuseFilter/i18n/api/ilo.json b/AbuseFilter/i18n/api/ilo.json
new file mode 100644
index 00000000..0938c560
--- /dev/null
+++ b/AbuseFilter/i18n/api/ilo.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Lam-ang"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Kitaen no ti maysa a sagat ti panagabuso ket maipada iti agasmang iti pagdumadumaan, pasamak ti nailista a Sagat ti Panagabuso.\n\nTi vars, rcid wenno logid ket nasken nupay kasta mabalin laeng ti agusar iti maysa.",
+ "apihelp-abusefiltercheckmatch-param-filter": "Ti napno a teksto ti sagat a kitaen para iti panagipada.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Ti naikodigo a rimpuok ti panagdumaduma ti JSON a pangisubokan.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "Ti kinaudi a panagbaliw ti ID a pangisubokan.",
+ "apihelp-abusefiltercheckmatch-param-logid": "Ti listaan ti ID ti sagat ti panagabuso a pangisubokan.",
+ "apihelp-abusefiltercheckmatch-example-1": "Subokan no ti kinaudi a panagbaliw ti ID 15 ket maipada iti nalaka a sagat",
+ "apihelp-abusefilterchecksyntax-description": "Kitaen ti sintaksis ti sagat ti AbuseFilter.",
+ "apihelp-abusefilterchecksyntax-param-filter": "Ti napno a teksto ti sagat a pagkitaan ti sintaksis.",
+ "apihelp-abusefilterchecksyntax-example-1": "Kitaen ti sintaksis ti umiso a sagat",
+ "apihelp-abusefilterchecksyntax-example-2": "Kitaen ti sintaksis ti saan nga umiso a sagat",
+ "apihelp-abusefilterevalexpression-description": "Pateganna ti panangiyebkas ti AbuseFilter.",
+ "apihelp-abusefilterevalexpression-param-expression": "Ti panangiyebkas a mapategan.",
+ "apihelp-abusefilterevalexpression-example-1": "Pategan ti nalaka a panangiyebkas",
+ "apihelp-abusefilterunblockautopromote-description": "Mangikkat ti serra ti agar-aramt manipud iti panagawat kadagiti automatiko a promosion gapu ti pagbanagan ti sagat ti panagabuso.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Nagan ti agar-aramat a kayatmo nga ikkaten ti serrana.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Ikkaten ti serra ti automatiko a promosion ni [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Ipakita dagiti salaysay dagiti sagat ti panagabuso",
+ "apihelp-query+abusefilters-param-startid": "Ti ID ti sagat a pangirugian iti panangibilang.",
+ "apihelp-query+abusefilters-param-endid": "Ti ID ti sagat a pagsardengan iti panangibilang.",
+ "apihelp-query+abusefilters-param-show": "Ipakita laeng dagiti sagat a makaabot kadagitoy a kriteria.",
+ "apihelp-query+abusefilters-param-limit": "Ti kaadu dagiti bilang dagiti sagat a mailista.",
+ "apihelp-query+abusefilters-param-prop": "Ti maala a tagtagikua.",
+ "apihelp-query+abusefilters-example-1": "Ilista dagiti napakabaelan a publiko a sagat",
+ "apihelp-query+abusefilters-example-2": "Ipakita salaysay a maipanggep kadagiti sagat",
+ "apihelp-query+abuselog-description": "Ipakita dagiti pasamak a naala babaen ti maysa kadagitoy a sagat ti panagabuso",
+ "apihelp-query+abuselog-param-start": "Ti oras ken petsa a pangirugian iti panangibilang.",
+ "apihelp-query+abuselog-param-end": "Ti oras ken petsa a pagsardengan iti panangibilang.",
+ "apihelp-query+abuselog-param-user": "Ipakita laeng dagiti naikabil nga inaramid babaen ti naited nga agar-aramat wenno adres ti IP.",
+ "apihelp-query+abuselog-param-title": "Ipakita laeng dagiti naikabil a napasamak iti naited a panid.",
+ "apihelp-query+abuselog-param-filter": "Ipakita laeng dagiti naikabil a naala babaen ti naited nga ID ti sagat.",
+ "apihelp-query+abuselog-param-limit": "Ti kaadu a bilang dagiti naikabil iti listaan.",
+ "apihelp-query+abuselog-param-prop": "Ti maala a tagtagikua.",
+ "apihelp-query+abuselog-example-1": "Ipakita ti kinaudi a naikabkabil iti listaan",
+ "apihelp-query+abuselog-example-2": "Ipakita ti kinaudi a naikabkabil iti listaan para iti [[API]]"
+}
diff --git a/AbuseFilter/i18n/api/is.json b/AbuseFilter/i18n/api/is.json
new file mode 100644
index 00000000..13e8e372
--- /dev/null
+++ b/AbuseFilter/i18n/api/is.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Sveinn í Felli"
+ ]
+ },
+ "apierror-abusefilter-badsyntax": "Sían er með ranga málskipun."
+}
diff --git a/AbuseFilter/i18n/api/it.json b/AbuseFilter/i18n/api/it.json
new file mode 100644
index 00000000..4b3269f8
--- /dev/null
+++ b/AbuseFilter/i18n/api/it.json
@@ -0,0 +1,31 @@
+{
+ "@metadata": {
+ "authors": [
+ "Beta16",
+ "Chiara.Graziani1991",
+ "Daimona Eaytoy",
+ "F. Cosoleto",
+ "Ricordisamoa",
+ "Wim b"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Controlla se un filtro anti abusi viene attivato da un insieme di variabili, una modifica o un evento nel registro abusi.\n\nÈ richiesto uno e un solo parametro tra vars, rcid e logid.",
+ "apihelp-abusefiltercheckmatch-summary": "Controlla se un filtro anti abusi viene attivato da un insieme di variabili, una modifica o un evento nel registro abusi.",
+ "apihelp-abusefiltercheckmatch-extended-description": "È richiesto esattamente un parametro tra vars, rcid o logid.",
+ "apihelp-abusefiltercheckmatch-param-filter": "Il testo completo del filtro da utilizzare per trovare una corrispondenza.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Array in formato JSON di variabili da utilizzare per il test.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "ID della modifica recente da controllare.",
+ "apihelp-abusefilterchecksyntax-example-1": "Controlla la sintassi di un filtro valido",
+ "apihelp-abusefilterchecksyntax-example-2": "Controlla la sintassi di un filtro non valido",
+ "apihelp-abusefilterevalexpression-description": "Valuta un'espressione AbuseFilter.",
+ "apihelp-abusefilterevalexpression-param-expression": "L'espressione da valutare.",
+ "apihelp-abusefilterevalexpression-example-1": "Calcolare una semplice espressione",
+ "apihelp-abusefilterunblockautopromote-param-user": "Nome utente dell'utente che vuoi sbloccare.",
+ "apihelp-query+abusefilters-param-show": "Mostra solo i filtri che soddisfano questi criteri.",
+ "apihelp-query+abusefilters-param-limit": "Il numero massimo di filtri da elencare.",
+ "apihelp-query+abusefilters-param-prop": "Quali proprietà ottenere.",
+ "apihelp-query+abusefilters-example-1": "Elenca i filtri pubblici abilitati",
+ "apihelp-query+abusefilters-example-2": "Mostra alcuni dettagli sui filtri",
+ "apihelp-query+abuselog-param-prop": "Quali proprietà ottenere.",
+ "apierror-abusefilter-badsyntax": "Il filtro contiene sintassi non valida."
+}
diff --git a/AbuseFilter/i18n/api/ja.json b/AbuseFilter/i18n/api/ja.json
new file mode 100644
index 00000000..4e60f0f9
--- /dev/null
+++ b/AbuseFilter/i18n/api/ja.json
@@ -0,0 +1,34 @@
+{
+ "@metadata": {
+ "authors": [
+ "2nd-player",
+ "Otokoume",
+ "Suyama",
+ "Yusuke1109"
+ ]
+ },
+ "apihelp-abusefilterchecksyntax-description": "不正利用フィルターの構文を確認してください。",
+ "apihelp-abusefilterchecksyntax-summary": "不正利用フィルターの構文を確認してください。",
+ "apihelp-abusefilterevalexpression-description": "不正利用フィルターの式を評価します。",
+ "apihelp-abusefilterevalexpression-param-expression": "評価する式。",
+ "apihelp-abusefilterevalexpression-example-1": "簡単な式を評価します",
+ "apihelp-abusefilterunblockautopromote-param-user": "ブロック解除する利用者の利用者名。",
+ "apihelp-query+abusefilters-description": "不正利用フィルターの詳細を表示する。",
+ "apihelp-query+abusefilters-param-startid": "列挙の始点となるフィルターID。",
+ "apihelp-query+abusefilters-param-endid": "列挙の終点となるフィルターID。",
+ "apihelp-query+abusefilters-param-limit": "表示するフィルターの最大数。",
+ "apihelp-query+abusefilters-param-prop": "取得するプロパティ。",
+ "apihelp-query+abusefilters-example-1": "有効化されている公開フィルターを一覧表示する",
+ "apihelp-query+abusefilters-example-2": "フィルターに関する詳細の一部を表示します",
+ "apihelp-query+abuselog-param-start": "列挙の始点となるタイムスタンプ。",
+ "apihelp-query+abuselog-param-end": "列挙の終点となるタイムスタンプ。",
+ "apihelp-query+abuselog-param-user": "与えられた利用者またはIPアドレスによる項目のみを表示する。",
+ "apihelp-query+abuselog-param-title": "与えられたページに関する項目のみを表示する。",
+ "apihelp-query+abuselog-param-limit": "一覧表示する項目の最大量。",
+ "apihelp-query+abuselog-param-prop": "取得するプロパティ。",
+ "apihelp-query+abuselog-example-1": "最近の不正利用記録を表示する",
+ "apihelp-query+abuselog-example-2": "[[API]] の最近の記録項目を表示する",
+ "apierror-abusefilter-canttest": "不正利用フィルターをテストする権限がありません。",
+ "apierror-abusefilter-cantcheck": "不正利用フィルターの構文を確認する権限がありません。",
+ "apierror-abusefilter-badsyntax": "フィルターの構文が無効です。"
+}
diff --git a/AbuseFilter/i18n/api/ka.json b/AbuseFilter/i18n/api/ka.json
new file mode 100644
index 00000000..50e56989
--- /dev/null
+++ b/AbuseFilter/i18n/api/ka.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Otogi"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-param-filter": "ფილტრის სრული ტექსტი, რათა გადაისინჯოს გასწორება",
+ "apihelp-abusefiltercheckmatch-param-rcid": "ID ბოლო ცვლილება საწინააღმდეგო გადასინჯვისთვის",
+ "apihelp-abusefiltercheckmatch-param-logid": "ბოროტად გამოყენების ფილტრი არეგისტრირებს ID, რათა საწინააღმდეგოდ გადასინჯოს",
+ "apihelp-abusefilterchecksyntax-description": "ბოროტად გამოყენების ფილტრის სინტაქსის გადასინჯვა",
+ "apihelp-abusefilterchecksyntax-param-filter": "ფილტრის სრული ტექსტი, რათა სინტაქსი გადაისინჯოს",
+ "apihelp-abusefilterchecksyntax-example-1": "ნამდვილი ფილტრის სინტაქსის გადასინჯვა",
+ "apihelp-abusefilterchecksyntax-example-2": "გამოუსადეგარი ფილტრის სინტაქსის გადასინჯვა",
+ "apihelp-abusefilterevalexpression-description": "ბოროტად გამოყენების ფილტრი აფასებს გამოხატვას",
+ "apihelp-abusefilterevalexpression-param-expression": "გამოხატვა, რათა შეფასდეს",
+ "apihelp-abusefilterevalexpression-example-1": "უბრალო გამოხატვის შეფასება",
+ "apihelp-abusefilterunblockautopromote-param-user": "თქვენ გინთად გახსნათ მომხმარებლის მომხმარებლის სახელი",
+ "apihelp-query+abusefilters-description": "ბოროტად გამოყენების ფილტრის დეტალების ჩვენება",
+ "apihelp-query+abusefilters-param-startid": "ID ფილტრი, რათა დაიწყოს ჩამოთვლა",
+ "apihelp-query+abusefilters-param-endid": "ID ფილტრი, რათა შეჩერდეს ჩამოთვლა",
+ "apihelp-query+abusefilters-param-show": "აჩვენე მხოლოდ ფილტრები, რომლებიც შეესაბამება ამ კრიტერიუმებს",
+ "apihelp-query+abusefilters-param-limit": "ფილტრების სიის მაქსიმალური რაოდენობა",
+ "apihelp-query+abusefilters-param-prop": "თვისებების მიღება",
+ "apihelp-query+abusefilters-example-1": "საჯარო ფილტრების დასაშვები სია",
+ "apihelp-query+abusefilters-example-2": "ფილტრების ზოგიერთი დეტალის ჩვენება",
+ "apihelp-query+abuselog-param-prop": "თვისებების მიღება",
+ "apihelp-query+abuselog-example-1": "უკანასკნელი ჟურნალის ჩანაწერების ხილვა",
+ "apihelp-query+abuselog-example-2": "აჩვენე ჩანაწერების ბოლო ჟურნლი [[API]]-დან"
+}
diff --git a/AbuseFilter/i18n/api/ko.json b/AbuseFilter/i18n/api/ko.json
new file mode 100644
index 00000000..7428e6a2
--- /dev/null
+++ b/AbuseFilter/i18n/api/ko.json
@@ -0,0 +1,57 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jerrykim306",
+ "Kwj2772",
+ "Revi",
+ "Ykhwong",
+ "아라"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "편집 필터가 변수 집합, 편집, 기록된 편집 필터 이벤트와 일치하는지 확인합니다.\n\nvars, rcid 또는 logid가 필요하지만 오직 하나만 사용할 수 있습니다.",
+ "apihelp-abusefiltercheckmatch-summary": "편집 필터가 변수 집합, 편집, 또는 기록된 편집 필터 이벤트와 일치하는지 확인합니다.",
+ "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid, 또는 logid가 필요하지만 오직 하나만 사용할 수 있습니다.",
+ "apihelp-abusefiltercheckmatch-param-filter": "일치하는 항목을 확인하기 위한 전체 필터 텍스트입니다.",
+ "apihelp-abusefiltercheckmatch-param-vars": "시험을 위해 JSON으로 인코딩된 변수들의 배열입니다.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "검사할 최근 판 번호",
+ "apihelp-abusefiltercheckmatch-param-logid": "검사할 최근 편집 필터 로그 번호",
+ "apihelp-abusefiltercheckmatch-example-1": "최근의 변경 ID 15가 단순 필터와 일치하는지 시험합니다",
+ "apihelp-abusefilterchecksyntax-description": "편집 필터의 구문을 검사합니다.",
+ "apihelp-abusefilterchecksyntax-summary": "편집 필터의 구문을 검사합니다.",
+ "apihelp-abusefilterchecksyntax-param-filter": "구문을 검사할 전체 필터 텍스트.",
+ "apihelp-abusefilterchecksyntax-example-1": "유효한 필터의 문법 검사",
+ "apihelp-abusefilterchecksyntax-example-2": "유효하지 않은 필터의 문법 검사",
+ "apihelp-abusefilterevalexpression-description": "편집 필터의 식을 검사합니다.",
+ "apihelp-abusefilterevalexpression-summary": "편집 필터의 식을 검사합니다.",
+ "apihelp-abusefilterevalexpression-param-expression": "검사할 표현식.",
+ "apihelp-abusefilterevalexpression-example-1": "간단한 표현식 검사",
+ "apihelp-abusefilterunblockautopromote-description": "편집 필터 동작으로 인해 자동 인증을 받지 못하도록 제한된 사용자의 제한을 해제합니다.",
+ "apihelp-abusefilterunblockautopromote-summary": "편집 필터 동작으로 인해 자동 인증을 받지 못하도록 제한된 사용자의 제한을 해제합니다.",
+ "apihelp-abusefilterunblockautopromote-param-user": "제한을 해제할 사용자의 계정 이름",
+ "apihelp-abusefilterunblockautopromote-example-1": "[[User:Example]]의 자동 인증 제한을 해제하기",
+ "apihelp-query+abusefilters-description": "편집 필터에 관한 세부 사항을 출력합니다.",
+ "apihelp-query+abusefilters-summary": "편집 필터에 관한 세부 사항을 표시합니다.",
+ "apihelp-query+abusefilters-param-startid": "열거하기 시작할 필터의 ID",
+ "apihelp-query+abusefilters-param-endid": "열거를 마칠 필터의 ID",
+ "apihelp-query+abusefilters-param-show": "이 조건을 만족하는 필터만 출력하기.",
+ "apihelp-query+abusefilters-param-limit": "열거할 필터의 최대 개수",
+ "apihelp-query+abusefilters-param-prop": "얻고자 하는 속성",
+ "apihelp-query+abusefilters-example-1": "사용 중인 공개 필터 나열",
+ "apihelp-query+abusefilters-example-2": "필터에 관한 더 자세한 정보 표시",
+ "apihelp-query+abuselog-description": "편집 필터에 감지된 행위를 보여줍니다.",
+ "apihelp-query+abuselog-summary": "편집 필터에 감지된 행위를 보여줍니다.",
+ "apihelp-query+abuselog-param-logid": "주어진 기록 ID에 해당하는 기록을 보여 줍니다.",
+ "apihelp-query+abuselog-param-start": "나열을 시작할 타임스탬프.",
+ "apihelp-query+abuselog-param-end": "나열을 끝낼 타임스탬프.",
+ "apihelp-query+abuselog-param-user": "주어진 사용자 또는 IP 주소에 의한 기록만을 보여줍니다.",
+ "apihelp-query+abuselog-param-title": "주어진 문서에서 발생한 기록만을 보여줍니다.",
+ "apihelp-query+abuselog-param-filter": "주어진 필터 ID에서 발생한 기록만을 보여 줍니다.",
+ "apihelp-query+abuselog-param-limit": "나열할 기록의 최대 양.",
+ "apihelp-query+abuselog-param-prop": "가져올 속성입니다.",
+ "apihelp-query+abuselog-example-1": "최근 기록 보기",
+ "apihelp-query+abuselog-example-2": "[[API]]의 최근 기록 보기",
+ "apierror-abusefilter-canttest": "편집 필터를 테스트할 권한이 없습니다.",
+ "apierror-abusefilter-cantcheck": "편집 필터의 문법을 검사할 권한이 없습니다.",
+ "apierror-abusefilter-nosuchlogid": "편집필터 기록 $1 은(는) 존재하지 않습니다.",
+ "apierror-abusefilter-badsyntax": "필터에 유효하지 않은 문법이 있습니다."
+}
diff --git a/AbuseFilter/i18n/api/ksh.json b/AbuseFilter/i18n/api/ksh.json
new file mode 100644
index 00000000..d1cd2345
--- /dev/null
+++ b/AbuseFilter/i18n/api/ksh.json
@@ -0,0 +1,40 @@
+{
+ "@metadata": {
+ "authors": [
+ "Purodha"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-param-filter": "Dä kumplätt Täx vum Fellter, öm för ene Träffer ze lohre.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Ene Saz vun Varrejahble em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"JavaScript Object Notation\">JSON</i>-Fommahd, öm doh jähje ze pröhve.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "En Kännong us de {{lcfirst:{{int:recentchanges}}}}, öm doh jähje ze pröhve.",
+ "apihelp-abusefiltercheckmatch-param-logid": "En Kännong us dem Meßbruchsfelter singem Logbohch, öm doh jähje ze pröhve.",
+ "apihelp-abusefiltercheckmatch-example-1": "Donn pröhve, of de Kännong <kbd>15</kbd> us de {{lcfirst:{{int:recentchanges}}}} obb ene eijnfache Felter paß.",
+ "apihelp-abusefilterchecksyntax-description": "Donn de Sünntax vun enem beschtemmpte Felter vum Meßbruchsfelter pröhve.",
+ "apihelp-abusefilterchecksyntax-param-filter": "Dä kumplätt Täx vum Fellter, öm de Süntax ze pröhfe.",
+ "apihelp-abusefilterchecksyntax-example-1": "Donn de Sünntax vun enem jölltejje Felter pröhve.",
+ "apihelp-abusefilterchecksyntax-example-2": "Donn de Sünntax vun enem onjölltejje Felter pröhve.",
+ "apihelp-abusefilterevalexpression-description": "Deihd ene Ußdrogg vum Meßbruchsfelter ußrääschne.",
+ "apihelp-abusefilterevalexpression-param-expression": "Dä Ußdrok zom ußwääte.",
+ "apihelp-abusefilterevalexpression-example-1": "Donn ene eijfache Ußdrok ußwääte.",
+ "apihelp-abusefilterunblockautopromote-description": "Donn di Schpär ophävve för emen Metmaacher sing automattesche Rääschtzohdeijlong övver der Meßbruchsfellter.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Däm Metmaacher singe Nahme, dä De nit mih jeschpächt han wells.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Donn di Schpär ophävve för dem Metmaacher „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[User:Example]]</code>“ sing automattesche Rääschtzohdeijlong.",
+ "apihelp-query+abusefilters-description": "Zeijsch Einzelheijte vun dä Meßbruchsfelter aan.",
+ "apihelp-query+abusefilters-param-startid": "De Kännong vun däm Felter, vun woh aan opzälle.",
+ "apihelp-query+abusefilters-param-endid": "De Kännong vun däm Felter, bes woh hen opzälle.",
+ "apihelp-query+abusefilters-param-show": "Zeijsch blohß Felter, op di di Eijeschaffte paße.",
+ "apihelp-query+abusefilters-param-limit": "De jrüüßte Zahl Felter för opzeleste.",
+ "apihelp-query+abusefilters-param-prop": "Wat för en Eijeschaffte holle.",
+ "apihelp-query+abusefilters-example-1": "Donn de ennjeschalldte öffentlesche Fellter opleßte",
+ "apihelp-query+abusefilters-example-2": "Zijsch e paa Eijnzelheijte övver Felter",
+ "apihelp-query+abuselog-description": "Zeijsch wat vun einem vun dä Meßbruchsfelter jepack woode es.",
+ "apihelp-query+abuselog-param-start": "Et Dattom un de Zigg vun woh aff opzälle.",
+ "apihelp-query+abuselog-param-end": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
+ "apihelp-query+abuselog-param-user": "Zeijsch blohß de Enndrähsch vun enem beschtemmpte Metmaacher udder ene beschtemmpte <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräß.",
+ "apihelp-query+abuselog-param-title": "Zeijsch blohß de Enndrähsch, di obb ene beschtemmpte Sigg opjedouch sin.",
+ "apihelp-query+abuselog-param-filter": "Zeijsch blohß de Enndrähsch em Logbohch di vun däm Felter met dä aanjejovve Kännog jepack woode sin.",
+ "apihelp-query+abuselog-param-limit": "De hühßde Aanzahl Enndrähsch för opzeleßte.",
+ "apihelp-query+abuselog-param-prop": "Wat för en Eijeschaffte holle.",
+ "apihelp-query+abuselog-example-1": "De neuste enndrähsch em Logbohch aanzeije.",
+ "apihelp-query+abuselog-example-2": "Zeijsch de neuste Enndrähsch em Logbohch för et [[API|<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>]]"
+}
diff --git a/AbuseFilter/i18n/api/lb.json b/AbuseFilter/i18n/api/lb.json
new file mode 100644
index 00000000..08f62e67
--- /dev/null
+++ b/AbuseFilter/i18n/api/lb.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robby"
+ ]
+ },
+ "apihelp-abusefilterchecksyntax-description": "Syntax vun engem Mëssbrauchsfilter nokucken.",
+ "apihelp-abusefilterchecksyntax-example-1": "Syntax vun engem valabele Filter nokucken",
+ "apihelp-abusefilterchecksyntax-example-2": "Syntax vun engem net-valabele Filter nokucken",
+ "apihelp-abusefilterunblockautopromote-param-user": "Benotzernumm vum Benotzer dem seng Spär dir ophiewe wëllt.",
+ "apihelp-query+abusefilters-description": "Detailer vum Mëssbrauchsfilter weisen",
+ "apihelp-query+abusefilters-summary": "Detailer vun de Mëssbrauchsfiltere weisen",
+ "apihelp-query+abusefilters-example-2": "E puer Detailer iwwer Filtere weisen",
+ "apierror-abusefilter-canttest": "Dir sidd net berechtegt fir Mëssbrauchsfilteren ze testen.",
+ "apierror-abusefilter-cantcheck": "Dir sidd net berechtegt fir d'Syntax vu Mëssbrauchsfilteren no ze kucken.",
+ "apierror-abusefilter-badsyntax": "De Filter huet eng net valabel Syntax."
+}
diff --git a/AbuseFilter/i18n/api/lt.json b/AbuseFilter/i18n/api/lt.json
new file mode 100644
index 00000000..dbcf00fb
--- /dev/null
+++ b/AbuseFilter/i18n/api/lt.json
@@ -0,0 +1,28 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eitvys200"
+ ]
+ },
+ "apihelp-abusefilterchecksyntax-example-1": "Tikrinti galimo filtro sintaksę",
+ "apihelp-abusefilterchecksyntax-example-2": "Tikrinti negalimo filtro sintaksę",
+ "apihelp-abusefilterevalexpression-param-expression": "Išraiška įvertinimui.",
+ "apihelp-abusefilterevalexpression-example-1": "Įvertinti paprastą išraišką",
+ "apihelp-abusefilterunblockautopromote-param-user": "Vartotojo vardas, kurį norite atblokuoti.",
+ "apihelp-query+abusefilters-description": "Rodyti piktnaudžiavimo filtrų detales.",
+ "apihelp-query+abusefilters-param-show": "Rodyti tik filtrus, kurie atitinką kriterijų.",
+ "apihelp-query+abusefilters-param-limit": "Maksimalus numeris filtrų sąraše.",
+ "apihelp-query+abusefilters-param-prop": "Kurias savybes gauti.",
+ "apihelp-query+abusefilters-example-1": "Pateikti įgalintų viešų filtrų sąrašą",
+ "apihelp-query+abusefilters-example-2": "Rodyti kai kurias detales apie filtrus",
+ "apihelp-query+abuselog-description": "Rodyti įvykius, kurie buvo sugauti vieno iš piktnaudžiavimo filtrų.",
+ "apihelp-query+abuselog-param-start": "Laiko žymą nuo kurios pradėti.",
+ "apihelp-query+abuselog-param-end": "Laiko žymą kuria baigti.",
+ "apihelp-query+abuselog-param-user": "Rodyti tik įrašus, kurie buvo duoti vartotojo ar IP adreso.",
+ "apihelp-query+abuselog-param-title": "Rodyti tik įrašus, kurie yra duotajame puslapyje.",
+ "apihelp-query+abuselog-param-filter": "Rodyti tik įrašus, kurie buvo sugauti pateiktojo filtro ID.",
+ "apihelp-query+abuselog-param-limit": "Maksimalus kiekis įrašų sąraše.",
+ "apihelp-query+abuselog-param-prop": "Kurias savybes gauti.",
+ "apihelp-query+abuselog-example-1": "Rodyti naujus žurnalo įrašus",
+ "apihelp-query+abuselog-example-2": "Rodyti naujus [[API]] žurnalo įrašus"
+}
diff --git a/AbuseFilter/i18n/api/mai.json b/AbuseFilter/i18n/api/mai.json
new file mode 100644
index 00000000..25c30ef5
--- /dev/null
+++ b/AbuseFilter/i18n/api/mai.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "बिप्लब आनन्द"
+ ]
+ },
+ "apihelp-query+abuselog-example-1": "सन्निकट लौग प्रविष्टिसभ देखाबी"
+}
diff --git a/AbuseFilter/i18n/api/mg.json b/AbuseFilter/i18n/api/mg.json
new file mode 100644
index 00000000..0f8a1048
--- /dev/null
+++ b/AbuseFilter/i18n/api/mg.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jagwar"
+ ]
+ },
+ "apihelp-query+abusefilters-description": "Aseho ny antsipirihan'ny sivana manohi-panararaotana",
+ "apihelp-query+abusefilters-param-show": "Ny sivana miady amin'ny safidy ihany no aseho",
+ "apihelp-query+abusefilters-example-2": "Antsipirihany sasantsasany amin'ny sivana ihany no aseho",
+ "apihelp-query+abuselog-param-user": "Iditra nataon'ny mpikambana na adiresy IP nofaritana ihany no aseho.",
+ "apihelp-query+abuselog-param-filter": "Iditra tratran'ny IDn-tsivana ihany no aseho.",
+ "apihelp-query+abuselog-example-1": "Aseho ireo iditra vao haingana"
+}
diff --git a/AbuseFilter/i18n/api/mk.json b/AbuseFilter/i18n/api/mk.json
new file mode 100644
index 00000000..89e5bfb5
--- /dev/null
+++ b/AbuseFilter/i18n/api/mk.json
@@ -0,0 +1,54 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Проверете дали филтер за злоупотреби ќе најде збир променливи, уредување или заведен настан во филтерот.\n\nСе бара vars, rcid или logid (може да се употреби само едно).",
+ "apihelp-abusefiltercheckmatch-summary": "Проверете дали филтерот пронаоѓа даден збир променливи, уредување или заведен настан во филтерот.",
+ "apihelp-abusefiltercheckmatch-extended-description": "Се бара vars, rcid иили logid (може да се употреби само едно од нив).",
+ "apihelp-abusefiltercheckmatch-param-filter": "Целосниот текст што го проверува филтерот.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Низа од променливи шифрирани во JSON што треба да се проверат.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "Назнака на скорешната промена што треба да се провери.",
+ "apihelp-abusefiltercheckmatch-param-logid": "Назнака на запис од дневникот на филтерот што треба да се провери.",
+ "apihelp-abusefiltercheckmatch-example-1": "Провери дали скорешната промена со назнака 15 ќе биде пронајдена од прост филтер.",
+ "apihelp-abusefilterchecksyntax-description": "Провери ја синтаксата на филтер за злоупотреби.",
+ "apihelp-abusefilterchecksyntax-summary": "Провери ја синтаксата на даден филтер за слоупотреби.",
+ "apihelp-abusefilterchecksyntax-param-filter": "Целосниот текст чија синтакса ја проверува филтерот.",
+ "apihelp-abusefilterchecksyntax-example-1": "Провери синтакса на важечки филтер",
+ "apihelp-abusefilterchecksyntax-example-2": "Провери синтакса на неважечки филтер",
+ "apihelp-abusefilterevalexpression-description": "Оценува израз во Филтерот за злоупотреби.",
+ "apihelp-abusefilterevalexpression-summary": "Оценува израз во Филтерот за злоупотреби.",
+ "apihelp-abusefilterevalexpression-param-expression": "Изразот што треба да се оцени.",
+ "apihelp-abusefilterevalexpression-example-1": "Оцени прост израз",
+ "apihelp-abusefilterunblockautopromote-description": "Отстранува блок на автоунапредување на даден корисник, добиен поради последица од филтер за злоупотреби.",
+ "apihelp-abusefilterunblockautopromote-summary": "Отстранува блок на автоунапредување на даден корисник, добиен поради последица од филтер за злоупотреби.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Корисничкото име што сакате да го одблокирате.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Отстрани го блокот од автоунапредувањето на [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Прикажи подробности за филтрите за злоупотреба.",
+ "apihelp-query+abusefilters-summary": "Прикажи подробности за филтрите за злоупотреба.",
+ "apihelp-query+abusefilters-param-startid": "Назнака на филтерот од кајшто ќе почне набројувањето.",
+ "apihelp-query+abusefilters-param-endid": "Назнака на филтерот на кајшто ќе запре набројувањето.",
+ "apihelp-query+abusefilters-param-show": "Прикажи ги само филтрите што ги исполнуваат овие критериуми.",
+ "apihelp-query+abusefilters-param-limit": "Допуштениот број на филтри за наведување во списокот.",
+ "apihelp-query+abusefilters-param-prop": "Кои својства да се дадат.",
+ "apihelp-query+abusefilters-example-1": "Испиши ги вклучените јавни филтри",
+ "apihelp-query+abusefilters-example-2": "Покажувај извесни подробности за филтри",
+ "apihelp-query+abuselog-description": "Прикажи ги настаните фатени од еден од филтрите.",
+ "apihelp-query+abuselog-summary": "Прикажи ги настаните фатени од еден од филтрите.",
+ "apihelp-query+abuselog-param-logid": "Прикажи ставка со дадената дневничка назнака.",
+ "apihelp-query+abuselog-param-start": "Од кој датум и време да почне набројувањето.",
+ "apihelp-query+abuselog-param-end": "На кој датум и време да запре набројувањето.",
+ "apihelp-query+abuselog-param-user": "Прикажи само ставки за даден корисник или IP-адреса.",
+ "apihelp-query+abuselog-param-title": "Прикажи само ставки што се однесуваат на дадена страница.",
+ "apihelp-query+abuselog-param-filter": "Прикажи само ставки за настани фатени од дадена филтерска назнака.",
+ "apihelp-query+abuselog-param-limit": "Највеќе ставки во списоците.",
+ "apihelp-query+abuselog-param-prop": "Кои својства да се дадат.",
+ "apihelp-query+abuselog-param-wiki": "Од кое вики да се прикажуваат погодоци.",
+ "apihelp-query+abuselog-example-1": "Прикажи ги скорешните дневнички ставки",
+ "apihelp-query+abuselog-example-2": "Прикажи ги скорешните дневнички ставки за [[API|извршникот]] (API)",
+ "apierror-abusefilter-canttest": "Немате дозвола да испробувате филтри на злоупотреба.",
+ "apierror-abusefilter-cantcheck": "Немате дозвола да проверувате синтакса на филтри на злоупотреба.",
+ "apierror-abusefilter-nosuchlogid": "Нема запис во дневникот на злоупотреби со назнака $1.",
+ "apierror-abusefilter-badsyntax": "Филтерот има неважечка синтакса."
+}
diff --git a/AbuseFilter/i18n/api/ml.json b/AbuseFilter/i18n/api/ml.json
new file mode 100644
index 00000000..41ff6b62
--- /dev/null
+++ b/AbuseFilter/i18n/api/ml.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Praveenp"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-param-filter": "അരിപ്പയിലെ മൊത്തം എഴുത്തും ഒത്തുപോകുന്നുണ്ടോയെന്ന് പരിശോധിക്കുക."
+}
diff --git a/AbuseFilter/i18n/api/mr.json b/AbuseFilter/i18n/api/mr.json
new file mode 100644
index 00000000..a8f57c79
--- /dev/null
+++ b/AbuseFilter/i18n/api/mr.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "V.narsikar"
+ ]
+ },
+ "apihelp-abusefilterunblockautopromote-description": "अपशब्द गाळणीच्या घटनेद्वारे सदस्यास स्वयंचलित बढती मिळण्यासाठी त्यास अप्रतिबंधित करते.",
+ "apihelp-abusefilterunblockautopromote-param-user": "आपणास अप्रतिबंधित करावयाचे असलेल्या सदस्याचे सदस्यनाव.",
+ "apihelp-abusefilterunblockautopromote-example-1": "[[User:Example]]चे स्वयंबढतीमुळे त्यावर असलेला प्रतिबंध हटवा",
+ "apihelp-query+abusefilters-description": "अपशब्द गाळणीचे वर्णन दाखवा.",
+ "apihelp-query+abusefilters-example-1": "सक्षम व सार्वजनिक केलेल्या गाळण्यांची यादी करा",
+ "apihelp-query+abusefilters-example-2": "गाळण्यांबाबत काही तपशिल दाखवा",
+ "apihelp-query+abuselog-description": "यापैकी एका अपशब्द गाळणीने पकडलेल्या घटना दाखवा."
+}
diff --git a/AbuseFilter/i18n/api/my.json b/AbuseFilter/i18n/api/my.json
new file mode 100644
index 00000000..8918ef70
--- /dev/null
+++ b/AbuseFilter/i18n/api/my.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ninjastrikers"
+ ]
+ },
+ "apierror-abusefilter-canttest": "အလွဲသုံးစားမှု စိစစ်စနစ်ကို စမ်းသပ်ရန် သင့်တွင် ခွင့်ပြုချက်မရှိပါ။"
+}
diff --git a/AbuseFilter/i18n/api/nb.json b/AbuseFilter/i18n/api/nb.json
new file mode 100644
index 00000000..96d2599b
--- /dev/null
+++ b/AbuseFilter/i18n/api/nb.json
@@ -0,0 +1,52 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jon Harald Søby"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Sjekk om et misbruksfilter treffer et sett av variabler, logget misbruksfilterhendelse.\n\nvars, rcid eller logid kreves, men bare én kan brukes.",
+ "apihelp-abusefiltercheckmatch-summary": "Sjekk om et misbruksfilter matcher et sett variabler (editorlogget misbruksfilterhendelse).",
+ "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid eller logid kreves, men kun én av disse kan brukes.",
+ "apihelp-abusefiltercheckmatch-param-filter": "Hele filterteksten som skal sjekkes for treff.",
+ "apihelp-abusefiltercheckmatch-param-vars": "JSON-kodet tabell over variabler det skal testes mot.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "Siste endringer-ID det skal sjekkes mot.",
+ "apihelp-abusefiltercheckmatch-param-logid": "Misbruksfilterlogg-ID det skal sjekkes mot.",
+ "apihelp-abusefiltercheckmatch-example-1": "Test om siste endringer-ID 15 treffer på et enkelt filter",
+ "apihelp-abusefilterchecksyntax-description": "Sjekk syntaksen til et filter.",
+ "apihelp-abusefilterchecksyntax-summary": "Sjekk syntaksen til et misbruksfilter.",
+ "apihelp-abusefilterchecksyntax-param-filter": "Hele filterteksten det skal sjekkes syntaks på.",
+ "apihelp-abusefilterchecksyntax-example-1": "Sjekk syntaksen til et gyldig filter",
+ "apihelp-abusefilterchecksyntax-example-2": "Sjekk syntaksen til et ugyldig filter",
+ "apihelp-abusefilterevalexpression-description": "Evaluerer et misbruksfilteruttrykk.",
+ "apihelp-abusefilterevalexpression-summary": "Evaluerer et uttrykk i et misbruksfilter.",
+ "apihelp-abusefilterevalexpression-param-expression": "Uttrykket som skal evalueres.",
+ "apihelp-abusefilterevalexpression-example-1": "Evaluer et enkelt uttrykk",
+ "apihelp-abusefilterunblockautopromote-description": "Fjerner blokkeringen av en bruker fra å automatisk forfremmes på grunn av konsekvenser fra et misbruksfilter.",
+ "apihelp-abusefilterunblockautopromote-summary": "Fjerner en brukers blokkering fra å få automatiske forfremmelser basert på konsekvenser av misbruksfiltre.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Brukernavnet til brukeren du ønsker å avblokkere.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Fjerner blokkeringen av automatisk forfremming av [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Vis detaljene til misbruksfilterne.",
+ "apihelp-query+abusefilters-summary": "Vis detaljer om misbruksfilterne.",
+ "apihelp-query+abusefilters-param-startid": "Filter-ID det skal nummereres fra.",
+ "apihelp-query+abusefilters-param-endid": "Filter-ID det skal sluttes å nummereres på.",
+ "apihelp-query+abusefilters-param-show": "Vis bare filtre som treffer disse kriteriene.",
+ "apihelp-query+abusefilters-param-limit": "Maksimalt antall filtre som skal listes opp.",
+ "apihelp-query+abusefilters-param-prop": "Hvilke egenskaper som skal hentes.",
+ "apihelp-query+abusefilters-example-1": "List opp påslåtte offentlige filtre",
+ "apihelp-query+abusefilters-example-2": "Vis noen detaljer om filtre",
+ "apihelp-query+abuselog-description": "Vis hendelser som ble fanget opp av ett av misbruksfiltrene.",
+ "apihelp-query+abuselog-summary": "Vis hendelser som ble fanget av ett av misbruksfilterne.",
+ "apihelp-query+abuselog-param-start": "Tidsstempelet nummereringen skal starte på.",
+ "apihelp-query+abuselog-param-end": "Tidsstempelet det skal sluttes å nummerere på.",
+ "apihelp-query+abuselog-param-user": "Vis bare oppføringer gjort av en gitt bruker eller IP-adresse.",
+ "apihelp-query+abuselog-param-title": "Vis bare oppføringer på ei gitt side.",
+ "apihelp-query+abuselog-param-filter": "Vis bare oppføringer som ble fanget av en gitt filter-ID.",
+ "apihelp-query+abuselog-param-limit": "Maksimalt antall oppføringer som skal listes opp.",
+ "apihelp-query+abuselog-param-prop": "Hvilke egenskaper som skal hentes.",
+ "apihelp-query+abuselog-example-1": "Vis nylige loggoppføringer",
+ "apihelp-query+abuselog-example-2": "Vis nylige loggoppføringer for [[API]]",
+ "apierror-abusefilter-canttest": "Du har ikke tillatelse til å teste misbruksfiltre.",
+ "apierror-abusefilter-cantcheck": "Du har ikke tillatelse til å sjekke syntaksen til misbruksfiltre.",
+ "apierror-abusefilter-nosuchlogid": "Det er ingen misbruksloggoppføring med ID $1.",
+ "apierror-abusefilter-badsyntax": "Filteret har ugyldig syntaks."
+}
diff --git a/AbuseFilter/i18n/api/ne.json b/AbuseFilter/i18n/api/ne.json
new file mode 100644
index 00000000..9f213ea4
--- /dev/null
+++ b/AbuseFilter/i18n/api/ne.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "बिप्लब आनन्द"
+ ]
+ },
+ "apihelp-query+abuselog-param-prop": "कुन मान प्राप्त गर्ने।",
+ "apihelp-query+abuselog-example-1": "हालैका लग इन्ट्रीहरू देखाउने",
+ "apihelp-query+abuselog-example-2": "[[एपिआइ]]को लागि हालैका लग इन्ट्रीहरू देखाउने"
+}
diff --git a/AbuseFilter/i18n/api/nl.json b/AbuseFilter/i18n/api/nl.json
new file mode 100644
index 00000000..acf7ab8e
--- /dev/null
+++ b/AbuseFilter/i18n/api/nl.json
@@ -0,0 +1,54 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mainframe98",
+ "Siebrand",
+ "Wiki13"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Controleer of een filter overeenkomt met een verzameling variabelen, een bewerking of een geregistreerde misbruikfiltergebeurtenis.\n\nvars, rcid or logid is verplicht, maar slechts een van deze mag opgegeven worden.",
+ "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid of logid is vereist, er kan echter maar één gebruikt worden.",
+ "apihelp-abusefiltercheckmatch-param-filter": "De volledige filtertekst om te controleren op overeenkomst.",
+ "apihelp-abusefiltercheckmatch-param-vars": "JSON-gecodeerde array van variabelen om tegen te testen.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "Recentewijzigings-ID om tegen te controleren.",
+ "apihelp-abusefiltercheckmatch-param-logid": "Misbruikfilterlogboek-ID om tegen te controleren.",
+ "apihelp-abusefiltercheckmatch-example-1": "Testen of recentewijzigings-ID 15 overeenkomst met een eenvoudig filter",
+ "apihelp-abusefilterchecksyntax-description": "Controleer de syntaxis van een filter.",
+ "apihelp-abusefilterchecksyntax-summary": "Controleer de syntaxis van een filter.",
+ "apihelp-abusefilterchecksyntax-param-filter": "De volledige filtertekst om de syntaxis van te controleren.",
+ "apihelp-abusefilterchecksyntax-example-1": "Controleer de syntaxis van een geldig filter",
+ "apihelp-abusefilterchecksyntax-example-2": "Controleer de syntaxis van een ongeldig filter",
+ "apihelp-abusefilterevalexpression-description": "Evalueert een misbruikfilterexpressie.",
+ "apihelp-abusefilterevalexpression-summary": "Evalueert een misbruikfilterexpressie.",
+ "apihelp-abusefilterevalexpression-param-expression": "De te evalueren expressie.",
+ "apihelp-abusefilterevalexpression-example-1": "Evalueer een eenvoudige expressie",
+ "apihelp-abusefilterunblockautopromote-description": "Sta een gebruiker toe automatische promoties te krijgen als gevolg van een misbruikfilterregel.",
+ "apihelp-abusefilterunblockautopromote-summary": "Sta een gebruiker toe automatische promoties te krijgen als gevolg van een misbruikfilterregel.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Gebruikersnaam van de te deblokkeren gebruiker.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Verwijder de blokkade van de automatische promotie voor [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Details weergeven van de misbruikfilters.",
+ "apihelp-query+abusefilters-summary": "Details weergeven van de misbruikfilters.",
+ "apihelp-query+abusefilters-param-startid": "Het filter-ID waar de opsomming begint.",
+ "apihelp-query+abusefilters-param-endid": "Het filter-ID waar de opsomming eindigt.",
+ "apihelp-query+abusefilters-param-show": "Alleen filters weergeven die voldoen aan deze criteria.",
+ "apihelp-query+abusefilters-param-limit": "Het maximale aantal weer te geven filters.",
+ "apihelp-query+abusefilters-param-prop": "Welke eigenschappen op te vragen.",
+ "apihelp-query+abusefilters-example-1": "Ingeschakelde openbare filters weergeven",
+ "apihelp-query+abusefilters-example-2": "Enige details over filters weergeven",
+ "apihelp-query+abuselog-description": "Gebeurtenissen weergeven die zijn afgevangen door een van de misbruikfilters.",
+ "apihelp-query+abuselog-summary": "Gebeurtenissen weergeven die zijn afgevangen door een van de misbruikfilters.",
+ "apihelp-query+abuselog-param-start": "Het tijdstip waar de opsomming begint.",
+ "apihelp-query+abuselog-param-end": "Het tijdstip waar de opsomming eindigt.",
+ "apihelp-query+abuselog-param-user": "Alleen regels weergeven die zijn uitgevoerd door een opgegeven gebruiker of IP-adres.",
+ "apihelp-query+abuselog-param-title": "Alleen regels weergeven die betrekking hebben op een opgegeven pagina.",
+ "apihelp-query+abuselog-param-filter": "Alleen regels weergeven die zijn afgevangen door een opgegeven filter-ID.",
+ "apihelp-query+abuselog-param-limit": "Het maximale aantal regels in de lijst.",
+ "apihelp-query+abuselog-param-prop": "Welke eigenschappen op te vragen.",
+ "apihelp-query+abuselog-param-wiki": "Wiki waarvan de hits gezien moeten laten worden.",
+ "apihelp-query+abuselog-example-1": "Recente logboekregels weergeven",
+ "apihelp-query+abuselog-example-2": "Recente logboekregels voor [[API]] weergeven",
+ "apierror-abusefilter-canttest": "U hebt geen toestemming om misbruikfilters te testen.",
+ "apierror-abusefilter-cantcheck": "U hebt geen toestemming om de syntax van misbruikfilters te controleren.",
+ "apierror-abusefilter-nosuchlogid": "Er is geen misbruikfilterregel met de id $1.",
+ "apierror-abusefilter-badsyntax": "Het filter heeft een ongeldige syntax."
+}
diff --git a/AbuseFilter/i18n/api/oc.json b/AbuseFilter/i18n/api/oc.json
new file mode 100644
index 00000000..37731cb5
--- /dev/null
+++ b/AbuseFilter/i18n/api/oc.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cedric31"
+ ]
+ },
+ "apihelp-query+abusefilters-param-prop": "Quinas proprietats obténer."
+}
diff --git a/AbuseFilter/i18n/api/pl.json b/AbuseFilter/i18n/api/pl.json
new file mode 100644
index 00000000..9a6515f7
--- /dev/null
+++ b/AbuseFilter/i18n/api/pl.json
@@ -0,0 +1,29 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrumps",
+ "Halibutt",
+ "Railfail536",
+ "The Polish",
+ "Woytecr"
+ ]
+ },
+ "apihelp-abusefilterchecksyntax-description": "Sprawdź składnię filtra AbuseFilter.",
+ "apihelp-abusefilterevalexpression-param-expression": "Wyrażenie do sprawdzenia.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Nazwa użytkownika, którego chcesz odblokować.",
+ "apihelp-query+abusefilters-description": "Pokaż szczegóły filtrów nadużyć.",
+ "apihelp-query+abusefilters-summary": "Pokaż szczegóły filtrów nadużyć.",
+ "apihelp-query+abusefilters-param-show": "Pokaż tylko filtry, które spełniają te kryteria.",
+ "apihelp-query+abusefilters-param-limit": "Maksymalna liczba filtrów do wyświetlenia.",
+ "apihelp-query+abusefilters-example-1": "Lista uruchomionych filtrów publicznych",
+ "apihelp-query+abusefilters-example-2": "Pokaż szczegóły dotyczące filtrów",
+ "apihelp-query+abuselog-description": "Pokaż zdarzenia wyłapane przez jeden z filtrów nadużyć.",
+ "apihelp-query+abuselog-param-start": "Znacznik czasu, od którego zacząć wyliczanie.",
+ "apihelp-query+abuselog-param-end": "Znacznik czasu, na którym zakończyć wyliczanie.",
+ "apihelp-query+abuselog-param-prop": "Jakie właściwości uzyskać.",
+ "apihelp-query+abuselog-example-1": "Pokaż ostatnie wpisy w rejestrze",
+ "apihelp-query+abuselog-example-2": "Pokaż ostatnie wpisy w dzienniku [[API]]",
+ "apierror-abusefilter-canttest": "Nie masz uprawnień do testowania filtrów nadużyć.",
+ "apierror-abusefilter-cantcheck": "Nie masz uprawnień do sprawdzania składni filtru nadużyć.",
+ "apierror-abusefilter-badsyntax": "Filtr ma nieprawidłową składnię."
+}
diff --git a/AbuseFilter/i18n/api/pt-br.json b/AbuseFilter/i18n/api/pt-br.json
new file mode 100644
index 00000000..25466d76
--- /dev/null
+++ b/AbuseFilter/i18n/api/pt-br.json
@@ -0,0 +1,58 @@
+{
+ "@metadata": {
+ "authors": [
+ "Araceletorres",
+ "Eduardo Addad de Oliveira",
+ "Felipe L. Ewald",
+ "HenriqueCrang",
+ "Pedrofariasm"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Verificar se um filtro de abusos coincide com um conjunto de variáveis, uma edição, ou um evento do registo de abusos.\n\nÉ necessário um dos seguintes: vars, rcid ou logid (só um pode ser usado).",
+ "apihelp-abusefiltercheckmatch-summary": "Verificar se um filtro de abusos coincide com um conjunto de variáveis, uma edição, ou um evento do registo de abusos.",
+ "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid ou logid é necessário, no entanto, apenas um pode ser usado.",
+ "apihelp-abusefiltercheckmatch-param-filter": "O texto do filtro completo para verificar por uma correspondência.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Matriz codificada JSON de variáveis para um teste de comparação.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "ID da mudança recente para verificação.",
+ "apihelp-abusefiltercheckmatch-param-logid": "ID do registro do filtro de Abuso para verificação.",
+ "apihelp-abusefiltercheckmatch-example-1": "Testar se a mudança recente do ID 15 corresponde a um filtro simples",
+ "apihelp-abusefilterchecksyntax-description": "Verificar a sintaxe de um filtro AbuseFilter.",
+ "apihelp-abusefilterchecksyntax-summary": "Verificar a sintaxe de um filtro AbuseFilter.",
+ "apihelp-abusefilterchecksyntax-param-filter": "O texto completo do filtro para verificar a sintaxe.",
+ "apihelp-abusefilterchecksyntax-example-1": "Verificar a sintaxe de um filtro válido",
+ "apihelp-abusefilterchecksyntax-example-2": "Verificar a sintaxe de um filtro inválido",
+ "apihelp-abusefilterevalexpression-description": "Avalia uma expressão AbuseFilter.",
+ "apihelp-abusefilterevalexpression-summary": "Avalia uma expressão AbuseFilter.",
+ "apihelp-abusefilterevalexpression-param-expression": "A expressão para avaliar.",
+ "apihelp-abusefilterevalexpression-example-1": "Avaliar uma simples expressão",
+ "apihelp-abusefilterunblockautopromote-description": "Desbloqueia um usuário de receber auto-promoções devido a uma consequência do abusefilter.",
+ "apihelp-abusefilterunblockautopromote-summary": "Desbloqueia um usuário de receber auto-promoções devido a uma consequência do abusefilter.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Nome do usuário que deseja desbloquear.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Remover o bloqueio por auto-promoção de [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Mostrar detalhes dos filtros de abuso.",
+ "apihelp-query+abusefilters-summary": "Mostrar detalhes dos filtros de abuso.",
+ "apihelp-query+abusefilters-param-startid": "O ID do filtro para começar a enumeração.",
+ "apihelp-query+abusefilters-param-endid": "O ID do filtro para parar a enumeração.",
+ "apihelp-query+abusefilters-param-show": "Mostrar apenas filtros que atendam a esses critérios.",
+ "apihelp-query+abusefilters-param-limit": "O número máximo de filtros para listar.",
+ "apihelp-query+abusefilters-param-prop": "Que propriedades obter.",
+ "apihelp-query+abusefilters-example-1": "Lista de filtros públicos habilitados",
+ "apihelp-query+abusefilters-example-2": "Mostrar alguns detalhes sobre os filtros",
+ "apihelp-query+abuselog-description": "Mostrar os eventos que foram detectados por um dos filtros de abuso.",
+ "apihelp-query+abuselog-summary": "Mostrar os eventos que foram detectados por um dos filtros de abuso.",
+ "apihelp-query+abuselog-param-logid": "Mostre uma entrada com o log ID dado.",
+ "apihelp-query+abuselog-param-start": "O timestamp para começar a enumeração.",
+ "apihelp-query+abuselog-param-end": "O timestamp para parar a enumeração.",
+ "apihelp-query+abuselog-param-user": "Mostrar apenas as entradas feitas por um determinado usuário ou endereço IP.",
+ "apihelp-query+abuselog-param-title": "Mostrar apenas as entradas ocorridas em uma determinada página.",
+ "apihelp-query+abuselog-param-filter": "Mostrar apenas as entradas que foram capturadas por um determinado ID do filtro.",
+ "apihelp-query+abuselog-param-limit": "A quantidade máxima de entradas para listar.",
+ "apihelp-query+abuselog-param-prop": "Que propriedades obter.",
+ "apihelp-query+abuselog-param-wiki": "Wiki para mostrar hits de.",
+ "apihelp-query+abuselog-example-1": "Mostrar entradas de registro recentes",
+ "apihelp-query+abuselog-example-2": "Mostrar entradas de registro recentes para [[API]]",
+ "apierror-abusefilter-canttest": "Você não tem permissão para testar filtros de edições.",
+ "apierror-abusefilter-cantcheck": "Você não tem permissão para conferir a sintaxe de filtros de edições.",
+ "apierror-abusefilter-nosuchlogid": "Não há entrada no registro de abusos com o id $1.",
+ "apierror-abusefilter-badsyntax": "O filtro tem sintaxe inválida."
+}
diff --git a/AbuseFilter/i18n/api/pt.json b/AbuseFilter/i18n/api/pt.json
new file mode 100644
index 00000000..e8c9c967
--- /dev/null
+++ b/AbuseFilter/i18n/api/pt.json
@@ -0,0 +1,55 @@
+{
+ "@metadata": {
+ "authors": [
+ "Athena in Wonderland",
+ "Hamilton Abreu"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Verificar se um filtro de abusos coincide com um conjunto de variáveis, uma edição, ou um evento do registo de abusos.\n\nÉ necessário um dos seguintes: vars, rcid ou logid (só um pode ser usado).",
+ "apihelp-abusefiltercheckmatch-summary": "Verificar se um filtro de abusos coincide com um conjunto de variáveis, uma edição, ou um evento do registo de abusos.",
+ "apihelp-abusefiltercheckmatch-extended-description": "É necessário um dos seguintes: vars, rcid ou logid (só um pode ser usado).",
+ "apihelp-abusefiltercheckmatch-param-filter": "O texto completo do filtro para verificar a coincidência.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Matriz codificada JSON de variáveis para o teste.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "Identificador da mudança recente para testar.",
+ "apihelp-abusefiltercheckmatch-param-logid": "Identificador do registo de abusos para testar.",
+ "apihelp-abusefiltercheckmatch-example-1": "Testar se a mudança recente com o identificador 15 é detetada por um filtro simples",
+ "apihelp-abusefilterchecksyntax-description": "Verificar a sintaxe de um filtro de abusos.",
+ "apihelp-abusefilterchecksyntax-summary": "Verificar a sintaxe de um filtro de abusos.",
+ "apihelp-abusefilterchecksyntax-param-filter": "O texto completo do filtro para verificar a sintaxe.",
+ "apihelp-abusefilterchecksyntax-example-1": "Verificar a sintaxe de um filtro válido",
+ "apihelp-abusefilterchecksyntax-example-2": "Verificar a sintaxe de um filtro inválido",
+ "apihelp-abusefilterevalexpression-description": "Avalia uma expressão do filtro de abusos.",
+ "apihelp-abusefilterevalexpression-summary": "Avalia uma expressão do filtro de abusos.",
+ "apihelp-abusefilterevalexpression-param-expression": "A expressão para avaliar.",
+ "apihelp-abusefilterevalexpression-example-1": "Avaliar uma expressão simples",
+ "apihelp-abusefilterunblockautopromote-description": "Desbloqueia um utilizador de receber autopromoções em consequência do filtro de abusos.",
+ "apihelp-abusefilterunblockautopromote-summary": "Desbloqueia um utilizador de receber autopromoções em consequência do filtro de abusos.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Nome do utilizador que pretende desbloquear.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Remover o bloqueio de autopromoção de [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Mostrar detalhes dos filtros de abuso.",
+ "apihelp-query+abusefilters-summary": "Mostrar detalhes dos filtros de abuso.",
+ "apihelp-query+abusefilters-param-startid": "O identificador do filtro onde será iniciada a enumeração.",
+ "apihelp-query+abusefilters-param-endid": "O identificador do filtro onde será parada a enumeração.",
+ "apihelp-query+abusefilters-param-show": "Mostrar só os filtros que preenchem estes critérios.",
+ "apihelp-query+abusefilters-param-limit": "O número máximo de filtros que serão listados.",
+ "apihelp-query+abusefilters-param-prop": "Que propriedades obter.",
+ "apihelp-query+abusefilters-example-1": "Listar os filtros públicos ativos",
+ "apihelp-query+abusefilters-example-2": "Mostrar alguns detalhes dos filtros",
+ "apihelp-query+abuselog-description": "Mostrar os eventos que foram detetados por um dos filtros de abuso.",
+ "apihelp-query+abuselog-summary": "Mostrar os eventos que foram detetados por um dos filtros de abuso.",
+ "apihelp-query+abuselog-param-logid": "Mostrar uma entrada com o identificador de registo fornecido.",
+ "apihelp-query+abuselog-param-start": "A data e hora onde começar a enumeração.",
+ "apihelp-query+abuselog-param-end": "A data e hora onde parar a enumeração.",
+ "apihelp-query+abuselog-param-user": "Mostrar só as entradas de um determinado utilizador ou endereço IP.",
+ "apihelp-query+abuselog-param-title": "Mostrar só as entradas de uma determinada página.",
+ "apihelp-query+abuselog-param-filter": "Mostrar só as entradas que foram detetadas por um determinado identificador de filtro.",
+ "apihelp-query+abuselog-param-limit": "O número máximo de entradas que serão listadas.",
+ "apihelp-query+abuselog-param-prop": "Que propriedades obter.",
+ "apihelp-query+abuselog-param-wiki": "A wiki da qual mostra as visitas.",
+ "apihelp-query+abuselog-example-1": "Mostrar entradas recentes do registo",
+ "apihelp-query+abuselog-example-2": "Mostrar entradas recentes do registo para [[API]]",
+ "apierror-abusefilter-canttest": "Não tem permissão para testar filtros de abuso.",
+ "apierror-abusefilter-cantcheck": "Não tem permissão para verificar a sintaxe de filtros de abuso.",
+ "apierror-abusefilter-nosuchlogid": "Não há nenhuma entrada no registo de abusos com o identificador $1.",
+ "apierror-abusefilter-badsyntax": "O filtro contém sintaxe inválida."
+}
diff --git a/AbuseFilter/i18n/api/qqq.json b/AbuseFilter/i18n/api/qqq.json
new file mode 100644
index 00000000..77d0b5f2
--- /dev/null
+++ b/AbuseFilter/i18n/api/qqq.json
@@ -0,0 +1,89 @@
+{
+ "@metadata": {
+ "authors": [
+ "Brad Jorsch",
+ "Matěj Suchánek",
+ "Aotake",
+ "Bennylin",
+ "ChrisiPK",
+ "Darth Kule",
+ "EugeneZelenko",
+ "Fryed-peach",
+ "Hamilton Abreu",
+ "Huji",
+ "Iwan Novirion",
+ "Jon Harald Søby",
+ "Krenair",
+ "Krinkle",
+ "Kwj2772",
+ "Lejonel",
+ "Lloffiwr",
+ "McDutchie",
+ "Meno25",
+ "Mormegil",
+ "Nemo bis",
+ "Praveenp",
+ "Purodha",
+ "Pxos",
+ "Raymond",
+ "Shirayuki",
+ "Siebrand",
+ "The Evil IP address",
+ "Translationista",
+ "Umherirrender",
+ "Yekrats",
+ "Liuxinyu970226",
+ "Legoktm",
+ "Pikne",
+ "Amire80",
+ "Ankam"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "{{doc-apihelp-description|abusefiltercheckmatch}}",
+ "apihelp-abusefiltercheckmatch-summary": "{{doc-apihelp-summary|abusefiltercheckmatch}}",
+ "apihelp-abusefiltercheckmatch-extended-description": "{{doc-apihelp-extended-description|abusefiltercheckmatch}}",
+ "apihelp-abusefiltercheckmatch-param-filter": "{{doc-apihelp-param|abusefiltercheckmatch|filter}}",
+ "apihelp-abusefiltercheckmatch-param-vars": "{{doc-apihelp-param|abusefiltercheckmatch|vars}}",
+ "apihelp-abusefiltercheckmatch-param-rcid": "{{doc-apihelp-param|abusefiltercheckmatch|rcid}}",
+ "apihelp-abusefiltercheckmatch-param-logid": "The \"log ID\" is the numerical identifier of an entry in the log of the abuse filter extensions. \"Check against\" means said ID is used to control a check over abuse filter functioning related to the respective log entry.\n----\n{{doc-apihelp-param|abusefiltercheckmatch|logid}}",
+ "apihelp-abusefiltercheckmatch-example-1": "{{doc-apihelp-example|abusefiltercheckmatch}}",
+ "apihelp-abusefilterchecksyntax-description": "{{doc-apihelp-description|abusefilterchecksyntax}}",
+ "apihelp-abusefilterchecksyntax-summary": "{{doc-apihelp-summary|abusefilterchecksyntax}}",
+ "apihelp-abusefilterchecksyntax-param-filter": "{{doc-apihelp-param|abusefilterchecksyntax|filter}}",
+ "apihelp-abusefilterchecksyntax-example-1": "{{doc-apihelp-example|abusefilterchecksyntax}}",
+ "apihelp-abusefilterchecksyntax-example-2": "{{doc-apihelp-example|abusefilterchecksyntax}}",
+ "apihelp-abusefilterevalexpression-description": "{{doc-apihelp-description|abusefilterevalexpression}}",
+ "apihelp-abusefilterevalexpression-summary": "{{doc-apihelp-summary|abusefilterevalexpression}}",
+ "apihelp-abusefilterevalexpression-param-expression": "{{doc-apihelp-param|abusefilterevalexpression|expression}}",
+ "apihelp-abusefilterevalexpression-example-1": "{{doc-apihelp-example|abusefilterevalexpression}}",
+ "apihelp-abusefilterunblockautopromote-description": "{{doc-apihelp-description|abusefilterunblockautopromote}}\n Autopromotion is an automatic system that gives rights to users when certain conditions are met.",
+ "apihelp-abusefilterunblockautopromote-summary": "{{doc-apihelp-summary|abusefilterunblockautopromote}}\n Autopromotion is an automatic system that gives rights to users when certain conditions are met.",
+ "apihelp-abusefilterunblockautopromote-param-user": "{{doc-apihelp-param|abusefilterunblockautopromote|user}}",
+ "apihelp-abusefilterunblockautopromote-example-1": "{{doc-apihelp-example|abusefilterunblockautopromote}}\n Autopromotion is an automatic system that gives rights to users when certain conditions are met.",
+ "apihelp-query+abusefilters-description": "{{doc-apihelp-description|query+abusefilters}}",
+ "apihelp-query+abusefilters-summary": "{{doc-apihelp-summary|query+abusefilters}}",
+ "apihelp-query+abusefilters-param-startid": "{{doc-apihelp-param|query+abusefilters|startid}}",
+ "apihelp-query+abusefilters-param-endid": "{{doc-apihelp-param|query+abusefilters|endid}}",
+ "apihelp-query+abusefilters-param-show": "{{doc-apihelp-param|query+abusefilters|show}}",
+ "apihelp-query+abusefilters-param-limit": "{{doc-apihelp-param|query+abusefilters|limit}}",
+ "apihelp-query+abusefilters-param-prop": "{{doc-apihelp-param|query+abusefilters|prop}}",
+ "apihelp-query+abusefilters-example-1": "{{doc-apihelp-example|query+abusefilters}}",
+ "apihelp-query+abusefilters-example-2": "{{doc-apihelp-example|query+abusefilters}}",
+ "apihelp-query+abuselog-description": "{{doc-apihelp-description|query+abuselog}}",
+ "apihelp-query+abuselog-summary": "{{doc-apihelp-summary|query+abuselog}}",
+ "apihelp-query+abuselog-param-logid": "{{doc-apihelp-param|query+abuselog|logid}}",
+ "apihelp-query+abuselog-param-start": "{{doc-apihelp-param|query+abuselog|start}}",
+ "apihelp-query+abuselog-param-end": "{{doc-apihelp-param|query+abuselog|end}}",
+ "apihelp-query+abuselog-param-user": "{{doc-apihelp-param|query+abuselog|user}}",
+ "apihelp-query+abuselog-param-title": "{{doc-apihelp-param|query+abuselog|title}}",
+ "apihelp-query+abuselog-param-filter": "{{doc-apihelp-param|query+abuselog|filter}}",
+ "apihelp-query+abuselog-param-limit": "{{doc-apihelp-param|query+abuselog|limit}}",
+ "apihelp-query+abuselog-param-prop": "{{doc-apihelp-param|query+abuselog|prop}}",
+ "apihelp-query+abuselog-param-wiki": "{{doc-apihelp-param|query+abuselog|wiki}}",
+ "apihelp-query+abuselog-example-1": "{{doc-apihelp-example|query+abuselog}}",
+ "apihelp-query+abuselog-example-2": "{{doc-apihelp-example|query+abuselog}}",
+ "apierror-abusefilter-canttest": "{{doc-apierror}}",
+ "apierror-abusefilter-cantcheck": "{{doc-apierror}}",
+ "apierror-abusefilter-nosuchlogid": "{{doc-apierror}}\n\nParameters:\n* $1 - AbuseFilter log ID number.",
+ "apierror-abusefilter-badsyntax": "{{doc-apierror}}"
+}
diff --git a/AbuseFilter/i18n/api/ro.json b/AbuseFilter/i18n/api/ro.json
new file mode 100644
index 00000000..6fce5737
--- /dev/null
+++ b/AbuseFilter/i18n/api/ro.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Strainu"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Verifică dacă filtrul de abuzuri se aplică unui se de variabile, eveniment logat de Filtrul de abuzuri.\n\nvars, rcid sau logid sunt obligatorii, dar doar una poate fi folosită.",
+ "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid sau logid sunt obligatorii dar doar una poate fi folosită.",
+ "apihelp-abusefilterchecksyntax-description": "Verifică sintaxa unui filtru AbuseFilter.",
+ "apihelp-abusefilterchecksyntax-param-filter": "Textul complet al filtrului pentru care trebuie verificată sintaxa.",
+ "apihelp-abusefilterchecksyntax-example-1": "Verifică sintaxa unui filtru valid.",
+ "apihelp-abusefilterchecksyntax-example-2": "Verifică sintaxa unui filtru invalid.",
+ "apihelp-abusefilterevalexpression-description": "Evaluează valoarea unei expresii AbuseFilter.",
+ "apihelp-abusefilterevalexpression-param-expression": "Expresia de evaluat.",
+ "apihelp-abusefilterevalexpression-example-1": "Evaluează o expresie simplă",
+ "apihelp-query+abuselog-param-limit": "Numărul maxim de intrări de afișat.",
+ "apihelp-query+abuselog-param-prop": "Ce proprietăți se cer.",
+ "apierror-abusefilter-badsyntax": "Filtrul are sintaxă invalidă."
+}
diff --git a/AbuseFilter/i18n/api/roa-tara.json b/AbuseFilter/i18n/api/roa-tara.json
new file mode 100644
index 00000000..9ddb8270
--- /dev/null
+++ b/AbuseFilter/i18n/api/roa-tara.json
@@ -0,0 +1,54 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Condrolle ce 'nu AbuseFilter soddisfe 'nu 'nzieme de variabbile o fatte de 'nu AbuseFilter trasute.\n\nvars, rcid o logid so obbligatorie comungue sulamende une adda essere ausate.",
+ "apihelp-abusefiltercheckmatch-summary": "Condrolle ce 'nu AbuseFilter s'accocchie cu 'nu 'nzieme de variabbile, 'nu cangiamende o 'nu fatte de AbuseFilter trasute.",
+ "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid o logid jè obbligatorie e comungue sulamende une a vote se pò ausà.",
+ "apihelp-abusefiltercheckmatch-param-filter": "'U filtre de teste chine da verificà pe 'nu combronde.",
+ "apihelp-abusefiltercheckmatch-param-vars": "L'array de variabbile decodificate JSON da testà.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "Cangiaminde recende de l'ID da testà.",
+ "apihelp-abusefiltercheckmatch-param-logid": "ID de l'archivije d'u filtre de abbuse da verificà.",
+ "apihelp-abusefiltercheckmatch-example-1": "Teste ce 'u cangiamende recende de l'ID 15 soddisfe 'nu filtre facile-facile",
+ "apihelp-abusefilterchecksyntax-description": "Verifiche 'a sindasse de 'nu filtre AbuseFilter.",
+ "apihelp-abusefilterchecksyntax-summary": "Verifiche 'a sindasse de 'nu filtre AbuseFilter.",
+ "apihelp-abusefilterchecksyntax-param-filter": "'U filtre de teste chine da verificà pa sindasse.",
+ "apihelp-abusefilterchecksyntax-example-1": "Verifiche 'a sindasse de 'nu filtre valide",
+ "apihelp-abusefilterchecksyntax-example-2": "Verifiche 'a sindasse de 'nu filtre invalide",
+ "apihelp-abusefilterevalexpression-description": "Valute 'n'espressione de AbuseFilter.",
+ "apihelp-abusefilterevalexpression-summary": "Valute 'n'espressione de AbuseFilter.",
+ "apihelp-abusefilterevalexpression-param-expression": "L'espressione da valutà.",
+ "apihelp-abusefilterevalexpression-example-1": "Valute 'n'espressione facile-facile",
+ "apihelp-abusefilterunblockautopromote-description": "Sblocche 'n'utende da ricevere auto promozziune cumme conseguenze de 'nu filtre de abbuse.",
+ "apihelp-abusefilterunblockautopromote-summary": "Sblocche 'n'utende da ricevere auto promozziune cumme conseguenze de 'nu filtre de abbuse.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Nome de l'utende ca vue ccù sblocche.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Live 'u blocche sus a l'autopromozzione de [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Fà vedè le dettaglie de le filtre de abbuse.",
+ "apihelp-query+abusefilters-summary": "Fà 'ndrucà le dettaglie de le filtre de abbuse.",
+ "apihelp-query+abusefilters-param-startid": "L'ID d'u filtre da addò accumenze l'enumerazione.",
+ "apihelp-query+abusefilters-param-endid": "L'ID dìu filtre ca stoppe l'enumerazione.",
+ "apihelp-query+abusefilters-param-show": "Fà vedè sulamende le filtre ca se iacchiane cu stu criterie.",
+ "apihelp-query+abusefilters-param-limit": "'U numere massime de filtre da elengà.",
+ "apihelp-query+abusefilters-param-prop": "Quale probbietà a pigghià.",
+ "apihelp-query+abusefilters-example-1": "Elenghe de le filtre pubbleche abbilitate",
+ "apihelp-query+abusefilters-example-2": "Fà vedè le dettaglie sus a le filtre",
+ "apihelp-query+abuselog-description": "Fà vedè le avveneminde ca onne state azzecate da filtre de abbuse.",
+ "apihelp-query+abuselog-summary": "Fà 'ndrucà le avveneminde ca onne state azzecate da filtre de abbuse.",
+ "apihelp-query+abuselog-param-logid": "Fà 'ndrucà 'na vôsce cu l'ID de l'archivije date.",
+ "apihelp-query+abuselog-param-start": "L'orarie da addò accumenze l'enumerazione.",
+ "apihelp-query+abuselog-param-end": "L'orarie ca stoppe l'enumerazione.",
+ "apihelp-query+abuselog-param-user": "Fà vedè sulamende le vôsce fatte da 'nu date utende o indirizze IP.",
+ "apihelp-query+abuselog-param-title": "Fà vedè sulamende le vôsce ca iessene sus a 'na data pàgene.",
+ "apihelp-query+abuselog-param-filter": "Fà vedè sulamende le vôsce ca sò azzeccate da 'nu specifiche ID de filtre.",
+ "apihelp-query+abuselog-param-limit": "'U numere massime de vôsce jndr'à l'elenghe.",
+ "apihelp-query+abuselog-param-prop": "Quale probbietà a pigghià.",
+ "apihelp-query+abuselog-param-wiki": "Uicchi da fà 'ndrucà le visite.",
+ "apihelp-query+abuselog-example-1": "Fà vedè le vôsce de l'archivije recende",
+ "apihelp-query+abuselog-example-2": "Fà vedè le vôsce de l'archivije recende pe [[API]]",
+ "apierror-abusefilter-canttest": "Non ge tìne le permesse pe testà le filtre de abbuse.",
+ "apierror-abusefilter-cantcheck": "Non ge tìne le permesse pe testà 'a sindasse de le filtre de abbuse.",
+ "apierror-abusefilter-nosuchlogid": "Non ge stonne vôsce jndr'à l'archivije de le abbuse cu le id $1.",
+ "apierror-abusefilter-badsyntax": "'U filtre tène 'na sindasse invalide."
+}
diff --git a/AbuseFilter/i18n/api/ru.json b/AbuseFilter/i18n/api/ru.json
new file mode 100644
index 00000000..b5d5201b
--- /dev/null
+++ b/AbuseFilter/i18n/api/ru.json
@@ -0,0 +1,58 @@
+{
+ "@metadata": {
+ "authors": [
+ "Cat1987",
+ "Facenapalm",
+ "Mouse21",
+ "Okras",
+ "Vlad5250"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Проверьте, удовлетворяет ли фильтру злоупотреблений набор переменных или событие фильтра злоупотреблений, записанное редактором.\n\nПеременные vars, rcid и logid обязательны, однако только одна из них может быть использована.",
+ "apihelp-abusefiltercheckmatch-summary": "Проверьте, удовлетворяет ли фильтру злоупотреблений набор переменных или событие фильтра злоупотреблений, записанное редактором.",
+ "apihelp-abusefiltercheckmatch-extended-description": "Переменные vars, rcid и logid обязательны, однако только одна из них может быть использована.",
+ "apihelp-abusefiltercheckmatch-param-filter": "Полный текст фильтра для проверки совпадения.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Массив проверяемых переменных, закодированный в JSON.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "Идентификатор проверяемого недавнего изменения.",
+ "apihelp-abusefiltercheckmatch-param-logid": "Идентификатор проверяемой записи в логе злоупотреблений.",
+ "apihelp-abusefiltercheckmatch-example-1": "Проверить, удовлетворяет ли недавнее изменение с идентификатором 15 простому фильтру",
+ "apihelp-abusefilterchecksyntax-description": "Проверка синтаксиса фильтра злоупотреблений.",
+ "apihelp-abusefilterchecksyntax-summary": "Проверка синтаксиса фильтра злоупотреблений.",
+ "apihelp-abusefilterchecksyntax-param-filter": "Полный текст фильтра для проверки синтаксиса.",
+ "apihelp-abusefilterchecksyntax-example-1": "Проверить синтаксис корректного фильтра",
+ "apihelp-abusefilterchecksyntax-example-2": "Проверить синтаксис некорректного фильтра",
+ "apihelp-abusefilterevalexpression-description": "Вычисление выражения фильтра злоупотреблений",
+ "apihelp-abusefilterevalexpression-summary": "Вычисление выражения фильтра злоупотреблений",
+ "apihelp-abusefilterevalexpression-param-expression": "Вычисляемое выражение.",
+ "apihelp-abusefilterevalexpression-example-1": "Вычислить простое выражение",
+ "apihelp-abusefilterunblockautopromote-description": "Разблокировка получаемого автоповышения участника вследствие фильтра злоупотреблений.",
+ "apihelp-abusefilterunblockautopromote-summary": "Разблокировка получаемого автоповышения участника вследствие фильтра злоупотреблений.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Логин разблокируемого участника.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Удаление блока с автоповышения [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Отображение подробностей фильтров злоупотреблений",
+ "apihelp-query+abusefilters-summary": "Отображение подробностей фильтров злоупотреблений",
+ "apihelp-query+abusefilters-param-startid": "Идентификатор фильтра, с которого начать перечисление.",
+ "apihelp-query+abusefilters-param-endid": "Идентификатор фильтра, на котором закончить перечисление.",
+ "apihelp-query+abusefilters-param-show": "Показывать только фильтры, которые отвечают этим критериям.",
+ "apihelp-query+abusefilters-param-limit": "Максимальное число фильтров в списке.",
+ "apihelp-query+abusefilters-param-prop": "Какие свойства необходимо получить.",
+ "apihelp-query+abusefilters-example-1": "Список включённых публичных фильтров",
+ "apihelp-query+abusefilters-example-2": "Показать дополнительную информацию о фильтрах",
+ "apihelp-query+abuselog-description": "Отображение событий, на которых сработал один из фильтров злоупотреблений.",
+ "apihelp-query+abuselog-summary": "Отображение событий, на которых сработал один из фильтров злоупотреблений.",
+ "apihelp-query+abuselog-param-logid": "Показать запись с данным ID журнала.",
+ "apihelp-query+abuselog-param-start": "Временная метка, с которой начать перечисление.",
+ "apihelp-query+abuselog-param-end": "Временная метка, на которой закончить перечисление.",
+ "apihelp-query+abuselog-param-user": "Показать только записи, связанные с данным участником или IP-адресом.",
+ "apihelp-query+abuselog-param-title": "Показать только записи, связанные с данной страницей.",
+ "apihelp-query+abuselog-param-filter": "Показать только записи, связанные с фильтром с данным идентификатором.",
+ "apihelp-query+abuselog-param-limit": "Максимальное количество записей в списке.",
+ "apihelp-query+abuselog-param-prop": "Какие свойства необходимо получить.",
+ "apihelp-query+abuselog-param-wiki": "Вики, чтобы показывать хиты.",
+ "apihelp-query+abuselog-example-1": "Показать последние записи в журнале",
+ "apihelp-query+abuselog-example-2": "Показать последние записи в журнале [[API]]",
+ "apierror-abusefilter-canttest": "У вас недостаточно прав для проверки фильтров злоупотреблений.",
+ "apierror-abusefilter-cantcheck": "У вас недостаточно прав для проверки синтаксиса фильтра злоупотреблений.",
+ "apierror-abusefilter-nosuchlogid": "Не существует записи в журнале злоупотреблений с идентификатором $1.",
+ "apierror-abusefilter-badsyntax": "Синтаксическая ошибка в фильтре."
+}
diff --git a/AbuseFilter/i18n/api/scn.json b/AbuseFilter/i18n/api/scn.json
new file mode 100644
index 00000000..9567edd7
--- /dev/null
+++ b/AbuseFilter/i18n/api/scn.json
@@ -0,0 +1,42 @@
+{
+ "@metadata": {
+ "authors": [
+ "Pippinu",
+ "Sarvaturi"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Cuntrolla si n'AbuseFilter currispunni a nu nzemi di variàbbili, a nu canciamentu o a n'eventu AbuseFilter riggistratu.\n\nS'havi a spicificari pi forza o vars, o rcid, o logid, ma sulu unu di chisti.",
+ "apihelp-abusefiltercheckmatch-param-filter": "Lu testu cumpletu dûn filtru, pi cuntrullari si currispunni.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Nu vitturi di variàbbili n furmatu JSON, pi cuntrullari si currispunni.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "L'ID dûn canciamentu ricenti, pi cuntrullari si currispunni.",
+ "apihelp-abusefiltercheckmatch-param-logid": "L'ID di n'eventu dû riggistru dû filtru anti-abbusi, pi cuntrullari si currispunni.",
+ "apihelp-abusefiltercheckmatch-example-1": "Cuntrolla si lu canciamentu ricenti chi havi ID 15 currispunni a nu filtru sìmplici",
+ "apihelp-abusefilterchecksyntax-description": "Cuntrolla la sintassi di nu filtru AbuseFilter.",
+ "apihelp-abusefilterchecksyntax-param-filter": "Lu testu cumpletu dû filtru dû quali si voli cuntrullari la sintassi.",
+ "apihelp-abusefilterchecksyntax-example-1": "Cuntrolla la sintassi di nu filtru bonu",
+ "apihelp-abusefilterchecksyntax-example-2": "Cuntrolla la sintassi di nu filtru malu",
+ "apihelp-abusefilterevalexpression-description": "Vàluta na sprissioni d'AbuseFilter.",
+ "apihelp-abusefilterevalexpression-param-expression": "La sprissioni di valutari.",
+ "apihelp-abusefilterevalexpression-example-1": "Vàluta na sprissioni sìmplici",
+ "apihelp-abusefilterunblockautopromote-description": "Leva a n'utenti lu bloccu di l'autu-cunferma c'avìa arricivutu comu cunziquenza di nu filtru anti-abbusi.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Nomu di l'utenti chi si voli sbluccari.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Leva lu bloccu di l'autu-cunferma a l'utenti [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Ammustra li dittagghî dî filtri anti-abbusi.",
+ "apihelp-query+abusefilters-param-startid": "L'ID dû primu filtru ca si voli pigghiari a cunziddirazzioni.",
+ "apihelp-query+abusefilters-param-endid": "L'ID di l'ùrtimu filtru ca si voli pigghiari a cunziddirazzioni.",
+ "apihelp-query+abusefilters-param-show": "Ammustra sulu li filtri ca currispùnnunu a sti criterî.",
+ "apihelp-query+abusefilters-param-limit": "Lu nùmmiru màssimu di filtri di elincari.",
+ "apihelp-query+abusefilters-param-prop": "Quali prupità pigghiari.",
+ "apihelp-query+abusefilters-example-1": "Elenca li filtri pùbblici ca sunnu attivati",
+ "apihelp-query+abusefilters-example-2": "Ammustra na para di dittagghî supra ê filtri",
+ "apihelp-query+abuselog-description": "Ammustra l'eventi ca foru ntircittati di nu filtru anti-abbusi.",
+ "apihelp-query+abuselog-param-start": "La data e ura a pàrtiri dî quali l'eventi si vonnu pigghiari a cunziddirazzioni.",
+ "apihelp-query+abuselog-param-end": "La data e ura a finiri chî quali l'eventi si vonnu pigghiari a cunziddirazzioni.",
+ "apihelp-query+abuselog-param-user": "Ammustra sulu l'azzioni fatti di nu certu utenti o nnirizzu IP.",
+ "apihelp-query+abuselog-param-title": "Ammustra sulu l'azzioni fatti nta na certa pàggina.",
+ "apihelp-query+abuselog-param-filter": "Ammustra sulu l'azzioni ntircittati di nu filtru cu na certa ID.",
+ "apihelp-query+abuselog-param-limit": "Lu nùmmiru màssimu di vuci di elincari.",
+ "apihelp-query+abuselog-param-prop": "Quali prupità pigghiari.",
+ "apihelp-query+abuselog-example-1": "Ammustra li vuci di riggistru ricenti",
+ "apihelp-query+abuselog-example-2": "Ammustra li vuci di riggistru ricenti pi [[API]]"
+}
diff --git a/AbuseFilter/i18n/api/sv.json b/AbuseFilter/i18n/api/sv.json
new file mode 100644
index 00000000..24e0af8c
--- /dev/null
+++ b/AbuseFilter/i18n/api/sv.json
@@ -0,0 +1,56 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jopparn",
+ "Lokal Profil",
+ "WikiPhoenix"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Kontrollera om ett missbruksfilter matchar en grupp variabler, en redigering eller en händelse som är loggad i missbruksfiltret.\n\nvars, rcid eller logid krävs, men endast en kan användas.",
+ "apihelp-abusefiltercheckmatch-summary": "Kontrollera om ett missbruksfilter matchar en grupp variabler, en redigering eller en händelse som är loggad i missbruksfiltret.",
+ "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid eller logid krävs, men endast en av dem kan användas.",
+ "apihelp-abusefiltercheckmatch-param-filter": "Fulla filtertexten att jämföra med för en träff.",
+ "apihelp-abusefiltercheckmatch-param-vars": "JSON-kodad lista av variabler att testa mot.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "Senaste ändrings-ID att jämföra med.",
+ "apihelp-abusefiltercheckmatch-param-logid": "Missbruksfilterlogg-ID att jämföra med.",
+ "apihelp-abusefiltercheckmatch-example-1": "Testa om senaste ändring-ID 15 matchar ett enkelt filter",
+ "apihelp-abusefilterchecksyntax-description": "Kontrollera syntax för ett AbuseFilter-filter.",
+ "apihelp-abusefilterchecksyntax-summary": "Kontrollera syntaxen för ett missbruksfilter.",
+ "apihelp-abusefilterchecksyntax-param-filter": "Den fulla texten att kontrollera syntaxen på.",
+ "apihelp-abusefilterchecksyntax-example-1": "Kontrollera syntax för ett giltigt filter",
+ "apihelp-abusefilterchecksyntax-example-2": "Kontrollera syntax för ett ogiltigt filter",
+ "apihelp-abusefilterevalexpression-description": "Utvärdera ett AbuseFilter-uttryck.",
+ "apihelp-abusefilterevalexpression-summary": "Utvärderar uttryck i ett missbruksfilter.",
+ "apihelp-abusefilterevalexpression-param-expression": "Uttrycket att utvärdera.",
+ "apihelp-abusefilterevalexpression-example-1": "Beräkna en enkel formel",
+ "apihelp-abusefilterunblockautopromote-description": "Upphäver blockering för en användare från att få automatiska befordringar p.g.a. konsekvenser från ett missbruksfilter.",
+ "apihelp-abusefilterunblockautopromote-summary": "Upphäver blockering för en användare från att få automatiska befordringar p.g.a. konsekvenser från ett missbruksfilter.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Användarnamn för användaren du vill avblockera.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Ta bort blockeringen på [[User:Example]]s autobefordran",
+ "apihelp-query+abusefilters-description": "Visa detaljer för missbruksfiltret.",
+ "apihelp-query+abusefilters-summary": "Visa detaljer för missbruksfiltret.",
+ "apihelp-query+abusefilters-param-startid": "Filter-ID att börja räkna upp från.",
+ "apihelp-query+abusefilters-param-endid": "Filter-ID att sluta räkna upp vid.",
+ "apihelp-query+abusefilters-param-show": "Visa enbart filter som matchar dessa kriterier.",
+ "apihelp-query+abusefilters-param-limit": "Det maximala antalet filter att lista.",
+ "apihelp-query+abusefilters-param-prop": "Vilka egenskaper som ska hämtas.",
+ "apihelp-query+abusefilters-example-1": "Lista aktiva publika filter",
+ "apihelp-query+abusefilters-example-2": "Visa några detaljer om filtren",
+ "apihelp-query+abuselog-description": "Visa händelser som en av missbruksfiltren har fångat.",
+ "apihelp-query+abuselog-summary": "Visa händelser som en av missbruksfiltren har fångat.",
+ "apihelp-query+abuselog-param-logid": "Visa ett element med angivet logg-ID.",
+ "apihelp-query+abuselog-param-start": "Tidsstämpel att börja räkna upp från.",
+ "apihelp-query+abuselog-param-end": "Tidsstämpeln att sluta räkna upp vid.",
+ "apihelp-query+abuselog-param-user": "Visa enbart poster gjorda av en viss användare eller IP-adress.",
+ "apihelp-query+abuselog-param-title": "Visa endast poster som förekommer på en viss sida.",
+ "apihelp-query+abuselog-param-filter": "Visa endast poster som fångats av ett visst filter-ID.",
+ "apihelp-query+abuselog-param-limit": "Det maximala antalet poster att lista.",
+ "apihelp-query+abuselog-param-prop": "Vilka egenskaper att hämta.",
+ "apihelp-query+abuselog-param-wiki": "Wiki att visa träffar ifrån.",
+ "apihelp-query+abuselog-example-1": "Visa de senaste loggposterna",
+ "apihelp-query+abuselog-example-2": "Visa de senaste loggposterna för [[API]]",
+ "apierror-abusefilter-canttest": "Du har inte behörighet att testa missbruksfilter.",
+ "apierror-abusefilter-cantcheck": "Du har inte behörighet att kolla syntaxen för missbruksfilter.",
+ "apierror-abusefilter-nosuchlogid": "Det finns ingen post i missbruksloggen med ID $1.",
+ "apierror-abusefilter-badsyntax": "Filtret har ogiltig syntax."
+}
diff --git a/AbuseFilter/i18n/api/te.json b/AbuseFilter/i18n/api/te.json
new file mode 100644
index 00000000..db595777
--- /dev/null
+++ b/AbuseFilter/i18n/api/te.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chaduvari",
+ "Veeven"
+ ]
+ },
+ "apihelp-query+abuselog-example-1": "ఇటీవలి చిట్టా పద్దులను చూపించు",
+ "apierror-abusefilter-canttest": "దుశ్చర్యల వడపోతలను పరీక్షించే అనుమతి మీకు లేదు."
+}
diff --git a/AbuseFilter/i18n/api/ug-arab.json b/AbuseFilter/i18n/api/ug-arab.json
new file mode 100644
index 00000000..14c6f196
--- /dev/null
+++ b/AbuseFilter/i18n/api/ug-arab.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Uzdil"
+ ]
+ },
+ "apihelp-query+abuselog-param-wiki": "ۋىكىدىن كەلگەن كۆرسىتىش ئۇچۇرى."
+}
diff --git a/AbuseFilter/i18n/api/uk.json b/AbuseFilter/i18n/api/uk.json
new file mode 100644
index 00000000..f621f923
--- /dev/null
+++ b/AbuseFilter/i18n/api/uk.json
@@ -0,0 +1,58 @@
+{
+ "@metadata": {
+ "authors": [
+ "AS",
+ "Base",
+ "DonDrakon",
+ "Piramidion",
+ "Ата"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Перевірте, чи AbuseFilter має збіги з набором змінних, редагуванням чи подією в журналі AbuseFilter.\n\nПотрібні vars, rcid або logid, але використати можна лише один.",
+ "apihelp-abusefiltercheckmatch-summary": "Перевірити, щоб побачити, чи Фільтр зловживань відповідає набору змінних, редагуванню чи журнальованій дії Фільтру зловживань.",
+ "apihelp-abusefiltercheckmatch-extended-description": "Необхідні vars, rcid або logid, однак можна використати лише один з цих параметрів.",
+ "apihelp-abusefiltercheckmatch-param-filter": "Повнотекстовий фільтр для перевірки на відповідність.",
+ "apihelp-abusefiltercheckmatch-param-vars": "JSON-кодований масив змінних, за яким тестувати.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "ID у нових редагуваннях, на основі якого має бути здійснена перевірка.",
+ "apihelp-abusefiltercheckmatch-param-logid": "ID із журналу фільтра зловживань, на основі якого має бути здійснена перевірка.",
+ "apihelp-abusefiltercheckmatch-example-1": "Перевірити, чи ID 15 в нових редагуваннях відповідає простому фільтру.",
+ "apihelp-abusefilterchecksyntax-description": "Перевірити синтаксис фільтру зловживань.",
+ "apihelp-abusefilterchecksyntax-summary": "Перевірити синтаксис фільтра зловживань.",
+ "apihelp-abusefilterchecksyntax-param-filter": "Повний текст фільтру, синтаксис якого необхідно перевірити.",
+ "apihelp-abusefilterchecksyntax-example-1": "Перевірити синтаксис правильного фільтру",
+ "apihelp-abusefilterchecksyntax-example-2": "Перевірити синтаксис неправильного фільтру",
+ "apihelp-abusefilterevalexpression-description": "Оцінює значення виразу Фільтру зловживань.",
+ "apihelp-abusefilterevalexpression-summary": "Оцінює вираз фільтра зловживань.",
+ "apihelp-abusefilterevalexpression-param-expression": "Вираз до оцінки.",
+ "apihelp-abusefilterevalexpression-example-1": "Оцінити простий вираз",
+ "apihelp-abusefilterunblockautopromote-description": "Зняти з користувача викликане фільтром зловживань обмеження отримувати автоматичне просування.",
+ "apihelp-abusefilterunblockautopromote-summary": "Розблоковує користувача від отримування автоматичних просувань через послідовність фільтрів.",
+ "apihelp-abusefilterunblockautopromote-param-user": "Ім'я користувача, якого Ви хочете розблокувати.",
+ "apihelp-abusefilterunblockautopromote-example-1": "Зняти блокування з автоматичного просування користувача [[User:Example]]",
+ "apihelp-query+abusefilters-description": "Показати подробиці фільтрів зловживань.",
+ "apihelp-query+abusefilters-summary": "Показати деталі фільтрів зловживань.",
+ "apihelp-query+abusefilters-param-startid": "ID фільтра, з якого почати перелічувати.",
+ "apihelp-query+abusefilters-param-endid": "ID фільтра, на якому закінчити перелічувати.",
+ "apihelp-query+abusefilters-param-show": "Показати тільки фільтри, які відповідають цим критеріям.",
+ "apihelp-query+abusefilters-param-limit": "Максимальна кількість фільтрів у списку.",
+ "apihelp-query+abusefilters-param-prop": "Які властивості необхідно отримати.",
+ "apihelp-query+abusefilters-example-1": "Показати список увімкнених публічних фільтрів",
+ "apihelp-query+abusefilters-example-2": "Показати деталі про фільтри",
+ "apihelp-query+abuselog-description": "Показати події, спіймані одним з фільтрів зловживань.",
+ "apihelp-query+abuselog-summary": "Показати дії, виявлені одним з фільтрів зловживань.",
+ "apihelp-query+abuselog-param-logid": "Показати запис з вказаним ID журналу.",
+ "apihelp-query+abuselog-param-start": "Часова мітка початку переліку.",
+ "apihelp-query+abuselog-param-end": "Часова мітка закінчення переліку.",
+ "apihelp-query+abuselog-param-user": "Показати тільки елементи, зроблені певним користувачем або IP-адресою.",
+ "apihelp-query+abuselog-param-title": "Показати лише елементи, що наявні на даній сторінці.",
+ "apihelp-query+abuselog-param-filter": "Показати лише елементи, спіймані за допомогою даного ідентифікатора фільтра.",
+ "apihelp-query+abuselog-param-limit": "Максимальна кількість елементів для переліку.",
+ "apihelp-query+abuselog-param-prop": "Які властивості отримати.",
+ "apihelp-query+abuselog-param-wiki": "Вікі, влучення з якої показувати.",
+ "apihelp-query+abuselog-example-1": "Показати останні записи в журналі",
+ "apihelp-query+abuselog-example-2": "Показати останні записи в журналі [[API]]",
+ "apierror-abusefilter-canttest": "Ви не маєте дозволу тестувати фільтри зловживань.",
+ "apierror-abusefilter-cantcheck": "Ви не маєте дозволу перевіряти синтаксис фільтрів зловживань.",
+ "apierror-abusefilter-nosuchlogid": "Немає запису зловживання з id $1.",
+ "apierror-abusefilter-badsyntax": "Фільтр має неправильний синтаксис."
+}
diff --git a/AbuseFilter/i18n/api/vi.json b/AbuseFilter/i18n/api/vi.json
new file mode 100644
index 00000000..85658e4d
--- /dev/null
+++ b/AbuseFilter/i18n/api/vi.json
@@ -0,0 +1,41 @@
+{
+ "@metadata": {
+ "authors": [
+ "Dinhxuanduyet",
+ "Minh Nguyen"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "Đánh dấu vào đây để kiểm tra xem nếu một AbuseFilter (bộ lọc lạm dụng) có khớp với tập hợp các biến hay không, trình biên tập đã ghi vào sự kiện của AbuseFilter.\n\nvars, rcid hoặc logid được yêu cầu tuy nhiên chỉ một trong số đó có thể sẽ được dùng.",
+ "apihelp-abusefiltercheckmatch-param-filter": "Văn bản đầy đủ để kiểm tra sự ăn khớp của bộ lọc.",
+ "apihelp-abusefiltercheckmatch-param-vars": "Mảng mã hóa JSON của các biến để kiểm tra lại.",
+ "apihelp-abusefiltercheckmatch-param-rcid": "ID thay đổi gần đây để kiểm tra lại.",
+ "apihelp-abusefiltercheckmatch-param-logid": "ID đăng nhập bộ lọc lạm dụng để kiểm tra lại.",
+ "apihelp-abusefiltercheckmatch-example-1": "Kiểm tra nếu thay đổi gần đây ID 15 có ăn khớp với một bộ lọc đơn giản",
+ "apihelp-abusefilterchecksyntax-description": "Kiểm tra cú pháp của một bộ lọc AbuseFilter.",
+ "apihelp-abusefilterchecksyntax-param-filter": "Văn bản lọc đầy đủ để kiểm tra cú pháp trên.",
+ "apihelp-abusefilterchecksyntax-example-1": "Kiểm tra cú pháp của một bộ lọc hợp lệ",
+ "apihelp-abusefilterchecksyntax-example-2": "Kiểm tra cú pháp của một bộ lọc không hợp lệ",
+ "apihelp-abusefilterevalexpression-description": "Đánh giá một biểu thức AbuseFilter.",
+ "apihelp-abusefilterevalexpression-param-expression": "Đánh giá biểu thức.",
+ "apihelp-abusefilterevalexpression-example-1": "Đánh giá một biểu thức đơn giản",
+ "apihelp-abusefilterunblockautopromote-param-user": "Tên người dùng của người dùng mà bạn muốn bỏ khóa.",
+ "apihelp-query+abusefilters-description": "Hiển thị chi tiết của các bộ lọc lạm dụng.",
+ "apihelp-query+abusefilters-param-startid": "ID bộ lọc để bắt đầu việc đếm.",
+ "apihelp-query+abusefilters-param-endid": "ID bộ lọc để dừng việc đếm.",
+ "apihelp-query+abusefilters-param-show": "Chỉ hiện các bộ lọc đáp ứng được những tiêu chí này.",
+ "apihelp-query+abusefilters-param-limit": "Số lượng tối đa các bộ lọc được liệt kê.",
+ "apihelp-query+abusefilters-param-prop": "Thuộc tính mà bạn muốn lấy.",
+ "apihelp-query+abusefilters-example-1": "Danh sách kích hoạt các bộ lọc công cộng",
+ "apihelp-query+abusefilters-example-2": "Hiện một số chi tiết về các bộ lọc",
+ "apihelp-query+abuselog-description": "Hiển thị các sự kiện đã được bắt bởi một trong các bộ lọc lạm dụng.",
+ "apihelp-query+abuselog-param-start": "Các dấu thời gian (timestamp) để bắt đầu việc đếm.",
+ "apihelp-query+abuselog-param-end": "Dấu thời gian để dừng việc đếm.",
+ "apihelp-query+abuselog-param-user": "Chỉ hiện các mục được thực hiện bởi một người dùng hoặc địa chỉ IP.",
+ "apihelp-query+abuselog-param-title": "Chỉ hiện các mục xuất hiện trong một trang nhất định.",
+ "apihelp-query+abuselog-param-filter": "Chỉ hiển thị các mục đã được bắt bởi một ID bộ lọc nhất định.",
+ "apihelp-query+abuselog-param-limit": "Số lượng các mục tối đa để đưa vào danh sách.",
+ "apihelp-query+abuselog-param-prop": "Thuộc tính mà bạn muốn lấy.",
+ "apihelp-query+abuselog-example-1": "Hiển thị các mục nhật trình gần đây",
+ "apihelp-query+abuselog-example-2": "Hiển thị các mục nhật trình gần đây cho [[API]]",
+ "apierror-abusefilter-badsyntax": "Bộ lọc có cú pháp không hợp lệ."
+}
diff --git a/AbuseFilter/i18n/api/yi.json b/AbuseFilter/i18n/api/yi.json
new file mode 100644
index 00000000..a9546112
--- /dev/null
+++ b/AbuseFilter/i18n/api/yi.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "פוילישער"
+ ]
+ },
+ "apierror-abusefilter-badsyntax": "דער פֿילטער האט אומגילטיגן סינטאקס."
+}
diff --git a/AbuseFilter/i18n/api/zh-hans.json b/AbuseFilter/i18n/api/zh-hans.json
new file mode 100644
index 00000000..41d089c3
--- /dev/null
+++ b/AbuseFilter/i18n/api/zh-hans.json
@@ -0,0 +1,55 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liuxinyu970226",
+ "Yfdyh000"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "检查以查看防滥用过滤器是否匹配某个变量集、某次编辑或某条日志记载的过滤器活动。\n\nvars、rcid或logid是必须的,然而只有一个会被使用。",
+ "apihelp-abusefiltercheckmatch-summary": "检查以查看防滥用过滤器是否匹配某个变量集、某次编辑或某条日志记载的过滤器活动。",
+ "apihelp-abusefiltercheckmatch-extended-description": "需要vars、rcid或logid,然而只有其中一个会用到。",
+ "apihelp-abusefiltercheckmatch-param-filter": "要检查是否匹配的完整过滤器文本。",
+ "apihelp-abusefiltercheckmatch-param-vars": "要测试是否触发的JSON编码数组变量。",
+ "apihelp-abusefiltercheckmatch-param-rcid": "要检查是否触发的最近更改ID。",
+ "apihelp-abusefiltercheckmatch-param-logid": "用以检查的滥用过滤器日志ID。",
+ "apihelp-abusefiltercheckmatch-example-1": "测试最近更改ID15是否匹配简单过滤器",
+ "apihelp-abusefilterchecksyntax-description": "检查一个防滥用过滤器的语法。",
+ "apihelp-abusefilterchecksyntax-summary": "检查一个防滥用过滤器的语法。",
+ "apihelp-abusefilterchecksyntax-param-filter": "要检查语法的完整过滤器文本。",
+ "apihelp-abusefilterchecksyntax-example-1": "检查有效过滤器的语法",
+ "apihelp-abusefilterchecksyntax-example-2": "检查无效过滤器的语法",
+ "apihelp-abusefilterevalexpression-description": "评估防滥用过滤器的表达式。",
+ "apihelp-abusefilterevalexpression-summary": "评估防滥用过滤器的表达式。",
+ "apihelp-abusefilterevalexpression-param-expression": "要评估的表达式。",
+ "apihelp-abusefilterevalexpression-example-1": "评估一个简单的表达式",
+ "apihelp-abusefilterunblockautopromote-description": "从由于防滥用过滤器的结果而接受的autopromotions解封用户。",
+ "apihelp-abusefilterunblockautopromote-summary": "从由于防滥用过滤器的结果而接受的autopromotions解封用户。",
+ "apihelp-abusefilterunblockautopromote-param-user": "您希望解封的用户的用户名。",
+ "apihelp-abusefilterunblockautopromote-example-1": "移除对[[User:Example]]的自动提升封禁",
+ "apihelp-query+abusefilters-description": "显示防滥用过滤器的详细说明。",
+ "apihelp-query+abusefilters-summary": "显示防滥用过滤器的详细说明。",
+ "apihelp-query+abusefilters-param-startid": "枚举的起始过滤器ID。",
+ "apihelp-query+abusefilters-param-endid": "枚举的结束过滤器ID。",
+ "apihelp-query+abusefilters-param-show": "只显示符合这些标准的过滤器。",
+ "apihelp-query+abusefilters-param-limit": "过滤器列表的最大数量。",
+ "apihelp-query+abusefilters-param-prop": "要获取的属性。",
+ "apihelp-query+abusefilters-example-1": "列出启用的公开过滤器",
+ "apihelp-query+abusefilters-example-2": "显示有关过滤器的一些详细说明",
+ "apihelp-query+abuselog-description": "显示一个滥用过滤器的捕获事件。",
+ "apihelp-query+abuselog-summary": "显示一个滥用过滤器的捕获事件。",
+ "apihelp-query+abuselog-param-logid": "显示指定日志ID的记录。",
+ "apihelp-query+abuselog-param-start": "枚举的起始时间戳。",
+ "apihelp-query+abuselog-param-end": "枚举的结束时间戳。",
+ "apihelp-query+abuselog-param-user": "只显示由指定的用户或IP地址完成的记录。",
+ "apihelp-query+abuselog-param-title": "只显示在指定页面上发生过的条项。",
+ "apihelp-query+abuselog-param-filter": "只显示被指定过滤器ID捕获过的记录。",
+ "apihelp-query+abuselog-param-limit": "列出日志记录的最大数量。",
+ "apihelp-query+abuselog-param-prop": "要获得的属性。",
+ "apihelp-query+abuselog-param-wiki": "显示触发来自的Wiki。",
+ "apihelp-query+abuselog-example-1": "显示最近日志记录",
+ "apihelp-query+abuselog-example-2": "显示[[API]]的最近日志记录",
+ "apierror-abusefilter-canttest": "您没有权限测试防滥用过滤器。",
+ "apierror-abusefilter-cantcheck": "您没有权限检查防滥用过滤器的语法。",
+ "apierror-abusefilter-nosuchlogid": "没有id为$1的滥用日志记录。",
+ "apierror-abusefilter-badsyntax": "过滤器存在语法错误。"
+}
diff --git a/AbuseFilter/i18n/api/zh-hant.json b/AbuseFilter/i18n/api/zh-hant.json
new file mode 100644
index 00000000..6328c665
--- /dev/null
+++ b/AbuseFilter/i18n/api/zh-hant.json
@@ -0,0 +1,57 @@
+{
+ "@metadata": {
+ "authors": [
+ "A2093064",
+ "Kly",
+ "Laundry Machine",
+ "LNDDYL"
+ ]
+ },
+ "apihelp-abusefiltercheckmatch-description": "檢查防濫用過濾器是否符合變數集、編輯、或是所記錄的防濫用過濾器事件。\n\nvars、rcid 或 logid是必須填入的,然而只會使用其中一個。",
+ "apihelp-abusefiltercheckmatch-summary": "檢查防濫用過濾器是否符合變數集、編輯、或是所記錄的防濫用過濾器事件。",
+ "apihelp-abusefiltercheckmatch-extended-description": "需要 vars、rcid 或 logid,然而只有其中一項會使用到。",
+ "apihelp-abusefiltercheckmatch-param-filter": "要檢查是否符合的完整過濾文字。",
+ "apihelp-abusefiltercheckmatch-param-vars": "測試用的變數 JSON 編碼陣列。",
+ "apihelp-abusefiltercheckmatch-param-rcid": "要檢查的近期變更 ID。",
+ "apihelp-abusefiltercheckmatch-param-logid": "要檢查的防濫用過濾器日誌 ID。",
+ "apihelp-abusefiltercheckmatch-example-1": "測試近期更改的 ID 15 是否符合簡易過濾器",
+ "apihelp-abusefilterchecksyntax-description": "檢查一個防濫用過濾器的語法。",
+ "apihelp-abusefilterchecksyntax-summary": "檢查一個防濫用過濾器的語法。",
+ "apihelp-abusefilterchecksyntax-param-filter": "要檢查語法的完整過濾器文字。",
+ "apihelp-abusefilterchecksyntax-example-1": "檢查有效過濾器的語法",
+ "apihelp-abusefilterchecksyntax-example-2": "檢查無效過濾器的語法",
+ "apihelp-abusefilterevalexpression-description": "評估防濫用過濾器的表達式。",
+ "apihelp-abusefilterevalexpression-summary": "評估防濫用過濾器的表達式。",
+ "apihelp-abusefilterevalexpression-param-expression": "評估的表達式。",
+ "apihelp-abusefilterevalexpression-example-1": "評估一份簡易表達式",
+ "apihelp-abusefilterunblockautopromote-description": "從由防濫用過濾器結果所接收到的自動調整來解封使用者。",
+ "apihelp-abusefilterunblockautopromote-summary": "從由防濫用過濾器結果所接收到的自動調整來解封使用者。",
+ "apihelp-abusefilterunblockautopromote-param-user": "您希望解封的使用者名稱。",
+ "apihelp-abusefilterunblockautopromote-example-1": "移除對 [[User:Example]] 的自動提升封鎖",
+ "apihelp-query+abusefilters-description": "顯示防濫用過濾器的詳細資料。",
+ "apihelp-query+abusefilters-summary": "顯示防濫用過濾器的詳細資料。",
+ "apihelp-query+abusefilters-param-startid": "起始列舉的篩選 ID。",
+ "apihelp-query+abusefilters-param-endid": "終止列舉的篩選 ID。",
+ "apihelp-query+abusefilters-param-show": "僅顯示符合規範的過濾器。",
+ "apihelp-query+abusefilters-param-limit": "篩選能列出的最大數量。",
+ "apihelp-query+abusefilters-param-prop": "要取得的屬性。",
+ "apihelp-query+abusefilters-example-1": "列出啟用的公開過濾器",
+ "apihelp-query+abusefilters-example-2": "顯示一些關於過濾器的詳細內容。",
+ "apihelp-query+abuselog-description": "顯示由防濫用過濾器之一偵測到的事件。",
+ "apihelp-query+abuselog-summary": "顯示由防濫用過濾器之一偵測到的事件。",
+ "apihelp-query+abuselog-param-logid": "顯示帶有指定日誌 ID 的項目。",
+ "apihelp-query+abuselog-param-start": "起始列舉的時間戳記。",
+ "apihelp-query+abuselog-param-end": "終止列舉的時間戳記。",
+ "apihelp-query+abuselog-param-user": "僅顯示由指定使用者或 IP 地址所做出的項目。",
+ "apihelp-query+abuselog-param-title": "僅顯示發生在指定頁面的項目。",
+ "apihelp-query+abuselog-param-filter": "僅顯示由指定過濾器 ID 偵測到的項目。",
+ "apihelp-query+abuselog-param-limit": "項目能列出的最大數量。",
+ "apihelp-query+abuselog-param-prop": "要取得的屬性。",
+ "apihelp-query+abuselog-param-wiki": "顯示觸發起始的 wiki。",
+ "apihelp-query+abuselog-example-1": "顯示近期的日誌項目",
+ "apihelp-query+abuselog-example-2": "顯示 [[API]] 近期的日誌項目",
+ "apierror-abusefilter-canttest": "您沒有權限來測試防濫用過濾器。",
+ "apierror-abusefilter-cantcheck": "您沒有權限來檢查防濫用過濾器的語法。",
+ "apierror-abusefilter-nosuchlogid": "沒有 ID 為 $1 的濫用日誌項目。",
+ "apierror-abusefilter-badsyntax": "此過濾器含有無效語法。"
+}
diff --git a/AbuseFilter/i18n/ar.json b/AbuseFilter/i18n/ar.json
index 59d76c42..4b264ddd 100644
--- a/AbuseFilter/i18n/ar.json
+++ b/AbuseFilter/i18n/ar.json
@@ -32,8 +32,8 @@
"abusefilter": "ضبط مرشح الإساءة",
"abuselog": "سجل الإساءة",
"abusefilter-intro": "مرحبا بك إلى واجهة التحكم بمرشح الإساءة.\nمرشح الإساءة هو ميكانيكية برمجية آلية لتطبيق ضوابط تلقائية لكل الأفعال.\nهذه الواجهة تعرض قائمة بالمرشحات المعرفة، وتسمح بتعديلها.",
- "abusefilter-mustbeeditor": "لأسباب أمنية، فالمستخدمون ذوو صلاحية تعديل مرشّحات الإساءة وحدهم يمكنهم استخدام هذه الواجهة.",
- "abusefilter-warning": "'''تحذير''': حُسِب هذا الفعل ضارًّا.\nالتعديلات غير البناءة سريعا ما تُسترجع،\nو مواصلة عمل تعديلات غير بنّاءة أو الإصرار عليها سيؤدي إلى منع حسابك أو حاسوبك.\nإذا كنت ترى أن هذا التعديل بنّاء، فأودعه مجددا لتأكيده.\nالوصف المختصر لقاعدة الإساءة التي طابقها فعلك: $1",
+ "abusefilter-mustviewprivateoredit": "لأسباب تتعلق بالأمان; يمكن فقط للمستخدمين الذين لديهم صلاحية عرض مرشحات خاصة أو تعديل المرشحات استخدام هذه الواجهة.",
+ "abusefilter-warning": "'''تحذير''': حُسِب هذا الفعل ضارًّا.\nالأفعال غير البناءة سريعا ما تُسترجَع،\nومواصلة عمل تعديلات غير بنّاءة أو الإصرار عليها سيؤدي إلى منع حسابك أو عنوان الآيبي الخاص بك،\nإذا كنت تعتقد أن هذا الإجراء بناء، يمكنك إرساله مرة أخرى لتأكيده،\nالوصف المختصر لقاعدة الإساءة التي طابقها فعلك: $1",
"abusefilter-disallowed": "هذا الفعل تم التعرف عليه تلقائيا كضار، ولذا تم منعه.\nإذا كنت ترى أن تعديلك بناء، من فضلك اتصل بإداري، وأخبره بما كنت تحاول أن تفعل.\nوصف مختصر لقاعدة الإساءة التي طابقها فعلك هو: $1",
"abusefilter-blocked-display": "هذا الفعل تم التعرف عليه تلقائيا كضار،\nوأنت تم منعك من تنفيذه.\nبالإضافة إلى ذلك، لحماية {{SITENAME}}، حسابك وكل عناوين الأيبي الملحقة تم منعها من التحرير.\nلو أن هذا حدث بطريق الخطأ، من فضلك اتصل بإداري.\nوصف مختصر لقاعدة الإساءة التي طابقها فعلك هو: $1",
"abusefilter-degrouped": "هذا الفعل تم التعرف عليه تلقائيا كضار.\nوبالتالي، تم منعه، و، بما أن حسابك مشكوك في أنه قد تم اختراقه، كل الصلاحيات تم سحبها.\nلو أنك تعتقد أن هذا خطأ، من فضلك اتصل ببيروقراط بتفسير لهذا الفعل، وصلاحياتك ربما تتم استعادتها.\nوصف مختصر لقاعدة الإساءة التي طابقها فعلك هو: $1",
@@ -47,6 +47,7 @@
"right-abusefilter-log": "عرض سجل الإساءة",
"right-abusefilter-log-detail": "عرض مدخلات سجل الإساءة المفصلة",
"right-abusefilter-private": "عرض البيانات السرية في سجل الإساءة",
+ "right-abusefilter-private-log": "عرض سجل دخول التفاصيل الخاصة لمرشح الإساءة",
"right-abusefilter-modify-restricted": "عدل مرشحات الإساءة مع الأفعال المحظورة",
"right-abusefilter-revert": "استرجع كل التعديلات لمرشح إساءة محدد.",
"right-abusefilter-view-private": "اعرض مرشحات الإساءة المعلّمة كخاصة",
@@ -59,9 +60,11 @@
"action-abusefilter-log": "رؤية سجل الإساءة",
"action-abusefilter-log-detail": "رؤية مدخلات سجل الإساءة المفصلة",
"action-abusefilter-private": "رؤية البيانات السرية في سجل الإساءة",
+ "action-abusefilter-private-log": "عرض سجل دخول التفاصيل الخاصة لمرشح الإساءة",
"action-abusefilter-modify-restricted": "تعديل مرشحات الإساءة بالأفعال المحظورة",
"action-abusefilter-revert": "استرجاع كل التغييرات بواسطة مرشح إساءة معطى",
"action-abusefilter-view-private": "اعرض مرشحات الإساءة المعلّمة كخاصة",
+ "action-abusefilter-log-private": "عرض سجلات مرشحات الإساءة المعلَّمة كخاصة",
"abusefilter-log": "سجل مرشح الإساءة",
"abusefilter-log-summary": "هذا السجل يعرض قائمة بكل الأفعال المُكتشفة بواسطة المرشحات.",
"abusefilter-log-search": "بحث سجل الإساءة",
@@ -69,10 +72,23 @@
"abusefilter-log-search-filter": "أرقام المُرشِّح (مفصولة بشريط عمودي):",
"abusefilter-log-search-title": "العنوان:",
"abusefilter-log-search-wiki": "الويكي:",
+ "abusefilter-log-search-impact": "التأثير:",
+ "abusefilter-log-search-impact-all": "جميع الإجراءات",
+ "abusefilter-log-search-impact-saved": "التغييرات المحفوظة فقط",
+ "abusefilter-log-search-impact-not-saved": "بدون التغييرات المحفوظة",
+ "abusefilter-log-search-entries-label": "الرؤية:",
+ "abusefilter-log-search-entries-all": "جميع المدخلات",
+ "abusefilter-log-search-entries-hidden": "المدخلات المخفية فقط",
+ "abusefilter-log-search-entries-visible": "المدخلات المرئية فقط",
+ "abusefilter-log-search-action-label": "الفِعل المُثار:",
+ "abusefilter-log-search-action-other": "أخرى",
+ "abusefilter-log-search-action-any": "أيٌ منها",
+ "abusefilter-log-search-action-taken-label": "الإجراءات المتخذة:",
+ "abusefilter-log-search-action-taken-any": "أيٌ منها",
"abusefilter-log-search-submit": "بحث",
- "abusefilter-log-entry": "$1: $2 فعل مرشح إساءة، مؤديا الفعل \"$3\" في $4.\nالأفعال المتخذة: $5;\nوصف المرشح: $6",
- "abusefilter-log-entry-withdiff": "$1: $2 فعل مرشح إساءة، مؤديا الفعل \"$3\" في $4.\nالأفعال المتخذة: $5؛\nوصف المرشح: $6 ($7)",
- "abusefilter-log-detailedentry-meta": "$1: $2 أطلق $3، مؤديا الفعل \"$4\" في $5.\nالأفعال المتخذة: $6;\nوصف المرشح: $7 ($8)",
+ "abusefilter-log-entry": "$1: $2 {{GENDER:$8|فعل}} مرشح إساءة، {{GENDER:$8|مؤديا}} الفعل \"$3\" في $4.\nالأفعال المتخذة: $5،\nوصف المرشح: $6",
+ "abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|فعل}} مرشح إساءة، {{GENDER:$8|مؤديا}} الفعل \"$3\" في $4.\nالأفعال المتخذة: $5،\nوصف المرشح: $6 ($7)",
+ "abusefilter-log-detailedentry-meta": "$1: $2 {{GENDER:$9|أطلق}} $3; {{GENDER:$9|مؤديا}} الفعل \"$4\" في $5.\nالأفعال المتخذة: $6;\nوصف المرشح: $7 ($8)",
"abusefilter-log-detailedentry-global": "المرشح العام $1",
"abusefilter-log-detailedentry-local": "المرشح $1",
"abusefilter-log-detailslink": "التفاصيل",
@@ -82,28 +98,42 @@
"abusefilter-log-details-var": "متغير",
"abusefilter-log-details-val": "قيمة",
"abusefilter-log-details-vars": "محددات الفعل",
- "abusefilter-log-details-private": "بيانات سرية",
+ "abusefilter-log-details-private": "تفاصيل السجل الخاص",
"abusefilter-log-details-ip": "عنوان الأيبي المصدر",
+ "abusefilter-log-details-checkuser": "تدقيق المستخدم",
"abusefilter-log-noactions": "لا شيء",
"abusefilter-log-details-diff": "التغييرات التي أجريت في التعديل",
"abusefilter-log-linkoncontribs": "سجل الإساءة",
"abusefilter-log-linkoncontribs-text": "سجل الإساءة ل{{GENDER:$1|هذا المستخدم}}",
+ "abusefilter-log-linkonhistory": "عرض سجل الإساءة",
+ "abusefilter-log-linkonhistory-text": "عرض سجل إساءة هذه الصفحة",
"abusefilter-log-hidden": "(السجل مخفي)",
"abusefilter-log-hidden-implicit": "(مخفي لأنه تم حذف مراجعة)",
"abusefilter-log-cannot-see-details": "ليس لديك الإذن لمعرفة تفاصيل هذا الإدخال.",
+ "abusefilter-log-cannot-see-private-details": "ليست لديك صلاحية للاطلاع على تفاصيل خاصة لهذا الإدخال.",
+ "abusefilter-log-nonexistent": "إدخال مع معرف مقدم غير موجود.",
"abusefilter-log-details-hidden": "لا يمكنك رؤية تفاصيل هذا المدخل، لأنه مخفي من العرض العلني",
- "abusefilter-log-private-not-included": "إن معرف مرشح أو أكثر مما حددت خاص. ولأنه غير مسموح لك بعرض تفاصيل المرشحات الخاصة، لم يجري البحث عن هذه المرشحات.",
+ "abusefilter-log-details-hidden-implicit": "لا يمكنك عرض تفاصيل هذا الإدخال لأن النسخة المرتبط بها مخفية عن العرض العام.",
+ "abusefilter-log-private-not-included": "واحد أو أكثر من مرشحات الإساءة المحددة ذو إعداداتٍ خاصة، ولأنه غير مسموحٍ لك بعرض تفاصيل المرشحات الخاصة، لم يجري البحث عن هذه المرشحات.",
"abusefilter-log-hide-legend": "إخفاء السجل",
"abusefilter-log-hide-id": "هوية مدخلة لسجل:",
"abusefilter-log-hide-hidden": "إخفاء هذا المدخل من العرض العلني",
"abusefilter-log-hide-reason": "السبب:",
+ "abusefilter-log-hide-reason-other": "سبب آخر/إضافي:",
"abusefilter-log-hide-forbidden": "ليس لديك صلاحية لإخفاء إدخالات سجل الإساءة",
- "abusefilter-logentry-suppress": "تم إخفاء \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "تم إظهار \"[[$1]]\"",
- "logentry-abusefilter-hit": "$1 أثار $4، تنفيذ الإجراء \"$5\" على $3. الإجراءات المتخذة: $6 ($7)",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|أخفى|أخفت}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|ألغى|ألغت}} إخفاء $3",
+ "logentry-abusefilter-hit": "$1 {{GENDER:$2|أطلق}} $4; {{GENDER:$2|مؤديا}} الفعل \"$5\" في $3، الإجراءات المتخذة: $6 ($7)",
+ "log-action-filter-abusefilter": "نوع تغيير المرشح:",
+ "log-action-filter-abusefilter-create": "إنشاء مرشح جديد",
+ "log-action-filter-abusefilter-modify": "تعديل المرشح",
+ "log-action-filter-suppress-abuselog": "إزالة سجل الإساءة",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|وصل إلى}} التفاصيل الخاصة ل$3",
+ "abusefilterprivatedetails-log-name": "سجل الوصول للتفاصيل الخاصة بمرشح الإساءة",
"abusefilter-management": "التحكم بمرشح الإساءة",
"abusefilter-list": "كل المرشحات",
"abusefilter-list-id": "رقم المُرشِّح",
+ "abusefilter-list-pattern": "النمط",
"abusefilter-list-status": "الحالة",
"abusefilter-list-public": "وصف علني",
"abusefilter-list-consequences": "العواقب",
@@ -119,6 +149,7 @@
"abusefilter-enabled": "مفعل",
"abusefilter-deleted": "محذوف",
"abusefilter-disabled": "معطل",
+ "abusefilter-throttled": "مخنوق",
"abusefilter-hitcount": "$1 {{PLURAL:$1|ضربة|ضربة}}",
"abusefilter-new": "إنشاء مرشح جديد",
"abusefilter-return": "رجوع إلى إدارة المرشح",
@@ -131,8 +162,17 @@
"abusefilter-list-options-scope": "إظهار المرشحات:",
"abusefilter-list-options-scope-local": "القواعد المحلية فقط",
"abusefilter-list-options-scope-global": "القواعد العامة فقط",
- "abusefilter-list-options-disabled": "المرشحات المعطلة:",
+ "abusefilter-list-options-scope-all": "القواعد المحلية والعالمية",
+ "abusefilter-list-options-further-options": "خيارات أخرى:",
"abusefilter-list-options-hidedisabled": "أخفِ المرشحات المعطلة",
+ "abusefilter-list-options-hideprivate": "أخفِ المرشحات السرية",
+ "abusefilter-list-options-searchfield": "البحث في القواعد:",
+ "abusefilter-list-options-searchpattern": "إدراج نمط",
+ "abusefilter-list-options-searchoptions": "وضع البحث:",
+ "abusefilter-list-options-search-like": "استعلام عادي",
+ "abusefilter-list-options-search-rlike": "تعبير نمطي",
+ "abusefilter-list-options-search-irlike": "تعبير نمطي غير حساس لحالة الأحرف",
+ "abusefilter-list-regexerror": "حدث خطأ أثناء البحث: خطأ في صياغة التعبير النمطي.",
"abusefilter-list-options-submit": "حدّث",
"abusefilter-tools-text": "هنا بعض الأدوات التي ربما تكون مفيدة في صياغة وتصليح مرشحات الإساءة.",
"abusefilter-tools-expr": "مختبر التعبير",
@@ -147,22 +187,26 @@
"abusefilter-edit": "تحرير مرشح الإساءة",
"abusefilter-edit-subtitle": "تعديل المُرشِّح $1",
"abusefilter-edit-subtitle-new": "أنشئ مُرشِّحًا",
+ "abusefilter-edit-token-not-match": "لم يتم حفظ التعديل! يُرجَى الحفظ مرة أخرى.",
"abusefilter-edit-oldwarning": "<strong>أنت تعدل نسخة قديمة من هذا المرشح.\nالإحصاءات الموجودة هي لأحدث نسخة من المرشح.\nلو أنك حفظت تغييراتك، فستكتب على كل التغييرات منذ المراجعة التي تعدلها.</strong> &bull; [[Special:AbuseFilter/history/$2|رجوع إلى تاريخ هذا المرشح]]",
"abusefilter-edit-status-label": "إحصاءات:",
- "abusefilter-edit-status": "من آخر $1 {{PLURAL:$1|تعديل|تعديل}}، هذا المرشح طابق $2 ($3%).",
+ "abusefilter-edit-status": "من آخر $1 {{PLURAL:$1|تعديل}}، هذا المرشح طابق $2 ($3%).",
"abusefilter-edit-status-profile": "من آخر $1 {{PLURAL:$1|تعديل|تعديل}}، هذا المرشح طابق $2 ($3%).\nفي المتوسط، زمن تشغيله هو $4 مللي ثانية، ويستهلك $5 {{PLURAL:$5|شرط|شرط}} من شرط الحد.",
- "abusefilter-edit-throttled": "'''تحذير''': هذا المرشح تم تعطيله تلقائيا كإجراء أمني.\nلقد وصل إلى حد مطابقة أكثر من $1% من الأفعال.",
+ "abusefilter-edit-throttled-warning": "'''تحذير:'''تم التعليم على هذا المرشح تلقائيا على أنه ضار; كتدبير أمان، لن يتم تنفيذ الإجراءات التالية ($1)، تُرجَى مراجعة و[[mw:Extension:AbuseFilter/Conditions|تحسين]] شروطك لإزالة هذا التقييد",
"abusefilter-edit-new": "مرشح جديد",
"abusefilter-edit-save": "حفظ المُرشِّح",
"abusefilter-edit-id": "رقم المُرشِّح:",
- "abusefilter-edit-description": "الوصف:\n:''(معروض علنيا)''",
+ "abusefilter-edit-switch-editor": "تبديل المحرر",
+ "abusefilter-edit-description": "الوصف:\n:''(معروض علنيًا)''",
+ "abusefilter-edit-field-description": "وصف",
"abusefilter-edit-group": "تصفية المجموعة:",
"abusefilter-edit-flags": "الأعلام:",
"abusefilter-edit-enabled": "فعّل هذا المُرشِّح",
- "abusefilter-edit-deleted": "التعليم كمحذوفة",
+ "abusefilter-edit-deleted": "التعليم كمحذوف",
"abusefilter-edit-hidden": "إخفاء تفاصيل هذا المرشح من العرض العلني",
"abusefilter-edit-global": "مرشح عام",
"abusefilter-edit-rules": "الشروط:",
+ "abusefilter-edit-field-conditions": "الشروط",
"abusefilter-edit-notes": "ملاحظات:",
"abusefilter-edit-lastmod": "رشح المعدل آخرا",
"abusefilter-edit-lastmod-text": "$1 بواسطة $2",
@@ -173,25 +217,48 @@
"abusefilter-edit-action-blockautopromote": "اسحب حالة التأكيد التلقائي من المستخدم",
"abusefilter-edit-action-degroup": "أزل المستخدم من كل المجموعات المميزة",
"abusefilter-edit-action-block": "امنع المستخدم و/أو عنوان الأيبي من التحرير",
+ "abusefilter-edit-action-blocktalk": "منع المستخدم و/أو عنوان الآيبي من تحرير صفحة نقاشهم الخاصة",
"abusefilter-edit-action-throttle": "نفذ الأفعال فقط إذا ما تجاوز المستخدم حد المعدل",
- "abusefilter-edit-action-rangeblock": "امنع نطاق ال/16 الذي يأتي منه المستخدم.",
+ "abusefilter-edit-action-rangeblock": "امنع نطاق الآيبي المخصص الذي يأتي منه المستخدم.",
"abusefilter-edit-action-tag": "اوسم التعديل لمراجعة أخرى.",
"abusefilter-edit-throttle-count": "عدد الأفعال المسموح بها:",
- "abusefilter-edit-throttle-period": "فترة من الزمن:",
- "abusefilter-edit-throttle-seconds": "{{PLURAL:$1|أقل من ثانية|ثانية واحدة|ثانيتان|$1 ثوانٍ|$1 ثانية}}",
- "abusefilter-edit-throttle-groups": "حد المجموعة بواسطة:\n:''(واحدة لكل سطر، ادمج بالفاصلات)''",
+ "abusefilter-edit-throttle-period": "الفترة الزمنية (بالثواني):",
+ "abusefilter-edit-throttle-groups": "خنق المجموعة بواسطة:",
+ "abusefilter-edit-throttle-ip": "عنوان الآيبي",
+ "abusefilter-edit-throttle-user": "حساب المستخدم",
+ "abusefilter-edit-throttle-range": "نطاق /16",
+ "abusefilter-edit-throttle-creationdate": "وقت خادم إنشاء الحساب",
+ "abusefilter-edit-throttle-editcount": "عدد التعديلات",
+ "abusefilter-edit-throttle-site": "الموقع كله",
+ "abusefilter-edit-throttle-page": "صفحة",
+ "abusefilter-throttle-details": "السماح بـ$1 {{PLURAL:$1|إجراء|إجراءات}} كل $2 {{PLURAL:$2|ثانية|ثوانٍ}}، خنق المجموعة\nبواسطة: $3",
"abusefilter-edit-warn-message": "رسالة النظام للاستخدام عند التحذير:",
"abusefilter-edit-warn-other": "رسالة أخرى",
- "abusefilter-edit-warn-other-label": "اسم الصفحة للرسالة الأخرى:\n:''(بدون بادئة ميدياويكي)''",
+ "abusefilter-edit-warn-other-label": "اسم صفحة الرسالة الأخرى:\n:''(بدون بادئة \"ميدياويكي:\")''",
"abusefilter-edit-warn-actions": "أفعال:",
- "abusefilter-edit-warn-preview": "أظهر العرض المسبق للرسالة المختارة",
- "abusefilter-edit-warn-edit": "أنشيء/عدل الرسالة المختارة",
- "abusefilter-edit-tag-tag": "[[Special:Tags|وسوم]] للتطبيق (واحد لكل سطر):",
+ "abusefilter-edit-warn-preview": "إظهار/إخفاء معاينة الرسالة المحددة",
+ "abusefilter-edit-warn-edit": "أنشئ/عدل الرسالة المختارة",
+ "abusefilter-edit-disallow-message": "رسالة النظام لاستخدامها لعدم السماح:",
+ "abusefilter-edit-disallow-other": "رسالة أخرى",
+ "abusefilter-edit-disallow-other-label": "اسم صفحة الرسالة الأخرى:\n:''(بدون بادئة \"ميدياويكي:\")''",
+ "abusefilter-edit-disallow-actions": "أفعال:",
+ "abusefilter-edit-disallow-preview": "إظهار/إخفاء معاينة الرسالة المحددة",
+ "abusefilter-edit-disallow-edit": "إنشاء/تحرير الرسالة المحددة",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|وسوم]] للتطبيق:",
+ "abusefilter-edit-tag-placeholder": "إضافة وسوم (واحدا تلو الآخر أو مفصولة بفواصل)",
+ "abusefilter-edit-tag-hidden-placeholder": "إضافة علامات (بينها بفواصل)",
+ "abusefilter-edit-block-anon-durations": "فترة منع المستخدمين المجهولين:",
+ "abusefilter-edit-block-user-durations": "فترة منع المستخدمين المجهولين:",
+ "abusefilter-block-anon": "منع المستخدمين المجهولين",
+ "abusefilter-block-user": "منع المستخدمين المسجلين",
+ "abusefilter-block-talk": "منع صفحة النقاش",
"abusefilter-edit-denied": "قد لا يمكنك رؤية تفاصيل هذا المرشح، لأنه مخفي من العرض العلني.",
"abusefilter-edit-main": "مُحدّدات المُرشِّح",
"abusefilter-edit-done-subtitle": "تم تعديل المُرشِّح",
- "abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|تغييراتك]] إلى [[Special:AbuseFilter/$1|filter $3]] قد حفظت.",
+ "abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|تغييراتك]] إلى [[Special:AbuseFilter/$1|المرشح $3]] قد حفظت.",
"abusefilter-edit-badsyntax": "هناك خطأ صياغة في المرشح الذي حددته. الخرج من المحلل كان: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "الحقول التالية مطلوبة ويجب ملؤها: $1",
+ "abusefilter-edit-deleting-enabled": "لا يمكنك تعليم مرشح نشط كمحذوف.",
"abusefilter-edit-restricted": "أنت لا يمكنك تعديل هذا المرشح، لأنه يحتوي على واحد أو أكثر من الأفعال المحظورة.\nمن فضلك سل مستخدما ذا سماح إضافة الأفعال المحظورة ليفعل التغيير لك.",
"abusefilter-edit-viewhistory": "عرض تاريخ هذا المرشح",
"abusefilter-edit-history": "التاريخ:",
@@ -203,7 +270,7 @@
"abusefilter-edit-export": "صدر هذا المرشح لويكي آخر",
"abusefilter-edit-syntaxok": "لم يُكتشف أي خطأ صياغي.",
"abusefilter-edit-syntaxerr": "أكشفت خطأ صياغة: $1",
- "abusefilter-edit-bad-tags": "واحدة أو أكثر من الوسوم التي حددتها غير صالحة.\nيجب أن تكون الوسوم قصيرة وألا تحتوي على أحرف خاصة.",
+ "abusefilter-edit-bad-tags": "واحدة أو أكثر من الوسوم التي حددتها غير صالحة،\nيجب أن تكون الوسوم قصيرة وألا تحتوي على أحرف خاصة، ويجب ألا يتم حجزها بواسطة برامج أخرى، جرب اختيار اسم وسم جديد",
"abusefilter-edit-notallowed": "لا يسمح لك بإنشاء أو تعديل مرشحات الإساءة",
"abusefilter-edit-notallowed-global": "لا يسمح لك بإنشاء أو تعديل مرشحات الإساءة الشاملة",
"abusefilter-edit-notallowed-global-custom-msg": "رسائل تحذير مخصصة غير معتمدة للمرشحات العالمية",
@@ -216,8 +283,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "مودولو (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "أس (**)",
"abusefilter-edit-builder-group-op-comparison": "معاملات مقارنة",
- "abusefilter-edit-builder-op-comparison-equal": "مساوي ل(==)",
- "abusefilter-edit-builder-op-comparison-notequal": "غير مساوي ل(!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "القيمة تساوي (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "القيمة والنوع يساويان (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "القيمة لا تساوي (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "القيمة والنوع لا يساويان (!==)",
"abusefilter-edit-builder-op-comparison-lt": "أقل من (<)",
"abusefilter-edit-builder-op-comparison-gt": "أكبر من (>)",
"abusefilter-edit-builder-op-comparison-lte": "أصغر من أو يساوي (<=)",
@@ -241,44 +310,55 @@
"abusefilter-edit-builder-funcs-lcase": "إلى حروف صغيرة (lcase)",
"abusefilter-edit-builder-funcs-ucase": "إستخدام أحرف كبيرة",
"abusefilter-edit-builder-funcs-ccnorm": "معادلة الحروف المختلطة (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "تطبيع وبحث سلسلة لسلاسل فرعية متعددة في وضع أور (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "تطبيع وبحث سلسلة لسلاسل فرعية متعددة في وضع أند (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "إزالة الحروف المزدوجة (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "حروف خاصة / إجمالي الحروف (specialratio)",
"abusefilter-edit-builder-funcs-norm": "معادلة (norm)",
"abusefilter-edit-builder-funcs-count": "عدد المرات التي تظهر فيها السلسلة X في السلسلة Y (count)",
"abusefilter-edit-builder-funcs-rcount": "عدد المرات الريجيكس X يظهر في السلسلة Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "مجموعة التعبيرات النمطية في نص لكل مجموعة التقاط (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "أزل الفراغات البيضاء (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "إزالة الحروف الخاصة (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "هل الأيبي في النطاق؟ (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "ابحث في السلسلة عن سلاسل فرعية متعددة (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "ابحث في السلسلة عن سلاسل فرعية متعددة في وضع أور (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "ابحث في السلسلة عن سلاسل فرعية متعددة في وضع أند (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "تحقق مما إذا كانت وسيطة معينة تساوي (===) إلى أي من الوسيطات التالية (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "سلسلة فرعية (substr)",
"abusefilter-edit-builder-funcs-strpos": "موضع السلسلة الفرعية في السلسلة (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "استبدال السلسلة الفرعية بسلسلة (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "سلسلة الهروب كالحرفية في regex (rescape)",
"abusefilter-edit-builder-funcs-set_var": "ضبط المتغير (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "تطبيع كيانات HTML إلى أحرف يونيكود (تطهير)",
"abusefilter-edit-builder-group-vars": "متغيرات",
"abusefilter-edit-builder-vars-accountname": "اسم الحساب (on account creation)",
"abusefilter-edit-builder-vars-timestamp": "طابع زمن التغيير ليونكس",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "الطابع الزمني للسجل",
"abusefilter-edit-builder-vars-action": "فعل",
"abusefilter-edit-builder-vars-addedlines": "السطور المضافة في التعديل",
"abusefilter-edit-builder-vars-delta": "الحجم المتغير في التعديل",
"abusefilter-edit-builder-vars-diff": "فرق موحد للتغييرات المصنوعة بواسطة التعديل",
"abusefilter-edit-builder-vars-newsize": "حجم الصفحة الجديد",
"abusefilter-edit-builder-vars-oldsize": "حجم الصفحة القديم",
+ "abusefilter-edit-builder-vars-old-content-model": "نموذج المحتوى القديم",
+ "abusefilter-edit-builder-vars-new-content-model": "نموذج المحتوى الجديد",
"abusefilter-edit-builder-vars-removedlines": "السطور المزالة في التعديل",
"abusefilter-edit-builder-vars-summary": "ملخص التعديل/السبب",
- "abusefilter-edit-builder-vars-article-id": "هوية الصفحة",
- "abusefilter-edit-builder-vars-article-ns": "نطاق الصفحة",
- "abusefilter-edit-builder-vars-article-text": "عنوان الصفحة (بدون نطاق)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "عنوان الصفحة الكامل",
- "abusefilter-edit-builder-vars-article-views": "عدد مشاهدات الصفحة",
+ "abusefilter-edit-builder-vars-page-id": "هوية الصفحة",
+ "abusefilter-edit-builder-vars-page-ns": "نطاق الصفحة",
+ "abusefilter-edit-builder-vars-page-title": "عنوان الصفحة (بدون نطاق)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "عنوان الصفحة الكامل",
+ "abusefilter-edit-builder-vars-page-age": "عمر الصفحة (بالثواني)",
"abusefilter-edit-builder-vars-movedfrom-id": "هوية الصفحة لنقل صفحة المصدر",
"abusefilter-edit-builder-vars-movedfrom-ns": "نطاق الصفحة المصدر للنقل",
- "abusefilter-edit-builder-vars-movedfrom-text": "عنوان الصفحة المصدر للنقل",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "العنوان الكامل للصفحة المصدر للنقل",
+ "abusefilter-edit-builder-vars-movedfrom-title": "عنوان الصفحة المصدر للنقل",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "العنوان الكامل للصفحة المصدر للنقل",
+ "abusefilter-edit-builder-vars-movedfrom-age": "نقل عمر صفحة المصدر (بالثواني)",
"abusefilter-edit-builder-vars-movedto-id": "هوية الصفحة لنقل صفحة الهدف",
"abusefilter-edit-builder-vars-movedto-ns": "نطاق الصفحة الهدف للنقل",
- "abusefilter-edit-builder-vars-movedto-text": "عنوان الصفحة الهدف للنقل",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "العنوان الكامل للصفحة الهدف للنقل",
+ "abusefilter-edit-builder-vars-movedto-title": "عنوان الصفحة الهدف للنقل",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "العنوان الكامل للصفحة الهدف للنقل",
+ "abusefilter-edit-builder-vars-movedto-age": "نقل عمر الصفحة الوجهة (بالثواني)",
"abusefilter-edit-builder-vars-user-editcount": "عدد التعديلات للمستخدم",
"abusefilter-edit-builder-vars-user-age": "عمر حساب المستخدم",
"abusefilter-edit-builder-vars-user-name": "اسم حساب المستخدم",
@@ -286,25 +366,45 @@
"abusefilter-edit-builder-vars-user-rights": "الصلاحيات التي يمتلكها المستخدم",
"abusefilter-edit-builder-vars-user-blocked": "ما إذا كان المستخدم ممنوعاً",
"abusefilter-edit-builder-vars-user-emailconfirm": "وقت تأكيد عنوان البريد الإلكتروني",
- "abusefilter-edit-builder-vars-recent-contributors": "آخر خمسة مساهمين في الصفحة",
+ "abusefilter-edit-builder-vars-recent-contributors": "آخر عشرة مساهمين في الصفحة",
"abusefilter-edit-builder-vars-first-contributor": "أول مستخدم ساهم في الصفحة",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "آخر عشرة مستخدمين مساهمة في نقل صفحة المصدر",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "المستخدم الأول في المساهمة في نقل صفحة المصدر",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "آخر عشرة مستخدمين في المساهمة في نقل صفحة الوجهة",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "المستخدم الأول في المساهمة في نقل صفحة الوجهة",
"abusefilter-edit-builder-vars-all-links": "كل الوصلات الخارجية في النص الجديد",
"abusefilter-edit-builder-vars-added-links": "كل الوصلات الخارجية المضافة في التعديل",
"abusefilter-edit-builder-vars-removed-links": "كل الوصلات الخارجية المزالة في التعديل",
- "abusefilter-edit-builder-vars-old-text": "نص الويكي القديم للصفحة، قبل التعديل",
+ "abusefilter-edit-builder-vars-old-text": "نص الويكي القديم للصفحة، قبل التعديل (لم يعد قيد الاستخدام)",
"abusefilter-edit-builder-vars-new-text": "نص الويكي الجديد للصفحة، بعد التعديل",
+ "abusefilter-edit-builder-vars-new-pst": "نص الويكي للصفحة الجديدة، تحول قبل الحفظ",
+ "abusefilter-edit-builder-vars-diff-pst": "الفرق الموحد للتغييرات التي تم إجراؤها بواسطة التعديل، تحول قبل الحفظ",
+ "abusefilter-edit-builder-vars-addedlines-pst": "الخطوط المضافة في التحرير، تحول قبل الحفظ",
"abusefilter-edit-builder-vars-new-text-stripped": "نص الصفحة الجديد، مجردا من أي تهيئة",
"abusefilter-edit-builder-vars-new-html": "مصدر HTML المعروض للمراجعة الجديدة",
"abusefilter-edit-builder-vars-restrictions-edit": "مستوى حماية التعديل للصفحة",
"abusefilter-edit-builder-vars-restrictions-move": "مستوى حماية النقل للصفحة",
"abusefilter-edit-builder-vars-restrictions-create": "مستوى حماية الإنشاء للصفحة",
"abusefilter-edit-builder-vars-restrictions-upload": "مستوى حماية الرفع للملف",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "مستوى حماية نقل صفحة المصدر",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "مستوى حماية نقل صفحة المصدر",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "حماية إنشاء صفحة مصدر النقل",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "حماية رفع ملف مصدر النقل",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "مستوى حماية تعديل صفحة الوجهة",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "مستوى حماية نقل صفحة الوجهة",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "مستوى حماية إنشاء صفحة الوجهة",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "مستوى حماية رفع ملف الوجهة",
"abusefilter-edit-builder-vars-old-text-stripped": "نص الصفحة القديم، منزوع منه أي تهيئة",
"abusefilter-edit-builder-vars-old-links": "الوصلات في الصفحة، قبل التعديل",
- "abusefilter-edit-builder-vars-old-html": "نص ويكي الصفحة القديم، محلل إلى HTML",
+ "abusefilter-edit-builder-vars-old-html": "نص الويكي للصفحة الأصلية، المحلل إلى HTML (لم يعد قيد الاستخدام)",
"abusefilter-edit-builder-vars-minor-edit": "ما إذا كان التعديل معلم عليه كطفيف أم لا",
"abusefilter-edit-builder-vars-file-sha1": "هاش SHA1 لمحتويات الملف",
"abusefilter-edit-builder-vars-file-size": "حجم الملف بالبايت",
+ "abusefilter-edit-builder-vars-file-mime": "نوع MIME للملف",
+ "abusefilter-edit-builder-vars-file-mediatype": "نوع الوسائط للملف",
+ "abusefilter-edit-builder-vars-file-width": "عرض الملف بالبكسل",
+ "abusefilter-edit-builder-vars-file-height": "ارتفاع الملف بالبكسل",
+ "abusefilter-edit-builder-vars-file-bits-per-channel": "بت لكل قناة لون للملف",
"abusefilter-filter-log": "تغييرات المرشح الأخيرة",
"abusefilter-history": "غير التاريخ لمرشح الإساءة #$1",
"abusefilter-history-foruser": "تغييرات من قبل $1",
@@ -323,6 +423,7 @@
"abusefilter-history-filterid": "مرشح",
"abusefilter-history-select-legend": "تصفية البحث",
"abusefilter-history-select-user": "مستخدم:",
+ "abusefilter-history-select-filter": "معرف المرشح:",
"abusefilter-history-select-submit": "تصفية",
"abusefilter-history-diff": "تغييرات",
"abusefilter-history-error-hidden": "المرشح الذي طلبته مخفي، وأنت لا يمكنك رؤية تاريخه.",
@@ -333,14 +434,17 @@
"abusefilter-exception-unclosedstring": "سلسلة غير مغلقة تبدأ عند الحرف $1.",
"abusefilter-exception-invalidoperator": "معامل غير صحيح \"$2\" عند الحرف $1.",
"abusefilter-exception-unrecognisedtoken": "نص غير متعرف عليه \"$2\" عند الحرف $1.",
- "abusefilter-exception-noparams": "لا محددات معطاة للدالة \"$2\" عند الحرف $1.",
+ "abusefilter-exception-noparams": "لم يتم إعطاء وسائط للعمل \"$2\" بالحرف $1،\nالمتوقع $3 {{PLURAL:$3|وسيط|وسائط}}.",
"abusefilter-exception-dividebyzero": "محاولة غير قانونية لقسمة $2 على صفر عند الحرف $1.",
"abusefilter-exception-unrecognisedvar": "متغير غير متعرف عليه $2 عند الحرف $1",
"abusefilter-exception-notenoughargs": "لا محددات كافية للدالة $2 المطلوبة عند الحرف $1.\nتوقع $3 {{PLURAL:$3|محدد|محدد}}، حصل على $4",
- "abusefilter-exception-regexfailure": "خطأ في التعبير المنتظم \"$3\" عند الحرف $1: \"$2\"",
+ "abusefilter-exception-regexfailure": "خطأ في التعبير المنتظم \"$2\" عند الحرف $1.",
"abusefilter-exception-overridebuiltin": "تجاوز غير قانوني لمتغير موجود مسبقا \"$2\" عند الحرف $1.",
- "abusefilter-exception-outofbounds": "طلب مدخلة قائمة غير موجودة $2 (حجم القائمة = $3) عند الحرف $1.",
- "abusefilter-exception-notlist": "طلب مدخلة مصفوفة لغير مصفوفة عند الحرف $1.",
+ "abusefilter-exception-outofbounds": "طلب عنصر مصفوفة غير موجود $2 (حجم المصفوفة = $3) عند الحرف $1.",
+ "abusefilter-exception-notarray": "طلب مدخلة مصفوفة لغير مصفوفة عند الحرف $1.",
+ "abusefilter-exception-unclosedcomment": "تعليق غير مغلق في الحرف $1.",
+ "abusefilter-exception-invalidiprange": "نطاق عنوان آيبي غير صالح \"$2\" متوفر بالحرف $1.",
+ "abusefilter-exception-disabledvar": "لم يعد المتغير $2 عند الحرف $1 قيد الاستخدام.",
"abusefilter-action-tag": "وسم",
"abusefilter-action-throttle": "حد",
"abusefilter-action-warn": "تحذير",
@@ -351,30 +455,39 @@
"abusefilter-action-disallow": "عدم السماح",
"abusefilter-revert-title": "استرجاع كامل التعديلات للمرشح $1",
"abusefilter-revert-intro": "هذه الاستمارة تسمح لك باسترجاع كل التغييرات التي أجراها مرشح الإساءة بسبب المرشح $1.\nمن فضلك احترس عند استخدام هذه الأداة.",
- "abusefilter-revert-preview-item": "$1: $2 عمل $3 في $4.\nالأفعال للاسترجاع: $5 ($6)",
+ "abusefilter-revert-preview-item": "$1: $2 {{GENDER:$7|فعل}} $3 في $4.\nالأفعال للاسترجاع: $5 ($6)",
"abusefilter-revert-search-legend": "اختر أفعال مرشح الإساءة التي تريد استرجاعها",
"abusefilter-revert-periodstart": "فترة البداية:",
"abusefilter-revert-periodend": "فترة النهاية:",
"abusefilter-revert-search": "اختر الأفعال",
- "abusefilter-revert-filter": "مرشح:",
- "abusefilter-revert-preview-intro": "بالأسفل الأفعال المتخذة بواسطة مرشح الإساءة والتي سيتم استرجاعها بواسطة هذا الفعل.\nمن فضلك تحقق منها بحرص، واضغط \"تأكيد\" لتأكيد اختيارك.",
+ "abusefilter-revert-filter": "معرف المرشح:",
+ "abusefilter-revert-preview-intro": "بالأسفل الأفعال المتخذة بواسطة مرشح الإساءة والتي سيتم استرجاعها بواسطة هذا الفعل،\nمن فضلك تحقق منها بحرص، واضغط \"{{int:abusefilter-revert-confirm}}\" لتأكيد اختيارك.",
+ "abusefilter-revert-confirm-legend": "تأكيد التراجع",
"abusefilter-revert-confirm": "تأكيد",
"abusefilter-revert-success": "لقد قمت باسترجاع كامل التعديلات التي قام بها مرشح الإساءة وفقا [[Special:AbuseFilter/$1|للمرشح $2]].",
"abusefilter-revert-reason": "استرجاع تلقائي لكل الأفعال المتخذة بواسطة مرشح الإساءة بسبب المرشح $1.\nالسبب المعطى: $2",
"abusefilter-revert-reasonfield": "السبب:",
"abusefilter-test": "اختبار المرشح على تعديلات سابقة",
- "abusefilter-test-intro": "هذه الصفحة تسمح لك بالتحقق من مرشح مدخل في الصندوق بالأسفل ضد آخر $1 {{PLURAL:$1|تغيير|تغيير}}.\nلتحميل مرشح موجود، اكتب رقم المرشح الخاص به في الصندوق بأسفل صندوق نص التعديل، واضغط زر \"تحميل\".",
+ "abusefilter-test-intro": "هذه الصفحة تسمح لك بالتحقق من مرشح مدخل في الصندوق بالأسفل ضد آخر $1 {{PLURAL:$1|تغيير}}.\nلتحميل مرشح موجود; اكتب رقم المرشح الخاص به في الصندوق بأسفل صندوق نص التعديل، واضغط زر \"{{int:abusefilter-test-load}}\".",
"abusefilter-test-legend": "اختبار المرشح",
"abusefilter-test-load-filter": "تحميل رمز تعريف المرشح:",
"abusefilter-test-submit": "اختبار",
"abusefilter-test-load": "تحميل",
"abusefilter-test-user": "التغييرات بواسطة المستخدم:",
+ "abusefilter-test-nobots": "أخفِ تعديلات البوتات",
"abusefilter-test-period-start": "التغييرات التي أجريت بعد:",
"abusefilter-test-period-end": "التغييرات التي أجريت قبل:",
"abusefilter-test-page": "التغييرات التي أجريت على الصفحة:",
"abusefilter-test-shownegative": "اعرض التغييرات التي لا تطابق المرشح",
- "abusefilter-test-syntaxerr": "المرشح الذي أدخلته يحتوي على خطأ صياغة.\nيمكنك تلقي تفسير كامل بواسطة الضغط على زر \"التحقق من الصياغة\".",
+ "abusefilter-test-syntaxerr": "المرشح الذي أدخلته يحتوي على خطأ صياغة.\nيمكنك تلقي تفسير كامل بواسطة الضغط على زر \"{{int:abusefilter-edit-check}}\" .",
"abusefilter-test-badtitle": "عنوان الصفحة الذي أدخلته غير صالح. قد يحتوي على حرف أو أكثر لا يمكن استخدامه في العناوين.",
+ "abusefilter-test-action": "نوع العمل:",
+ "abusefilter-test-search-type-all": "كل الإجراءات",
+ "abusefilter-test-search-type-edit": "التعديلات",
+ "abusefilter-test-search-type-move": "النقل",
+ "abusefilter-test-search-type-delete": "الحذف",
+ "abusefilter-test-search-type-upload": "المرفوعات",
+ "abusefilter-test-search-type-createaccount": "إنشاء الحسابات",
"abusefilter-changeslist-examine": "افحص",
"abusefilter-examine": "افحص التغييرات الفردية",
"abusefilter-examine-intro": "هذه الصفحة تسمح لك بفحص المتغيرات المولدة بواسطة مرشح الإساءة لتغيير فردي، واختبارها ضد المرشحات.",
@@ -401,6 +514,8 @@
"abusefilter-topnav-import": "استيراد المرشح",
"abusefilter-log-name": "سجل مرشح الإساءة",
"abusefilter-log-header": "هذا السجل يعرض ملخصا للتغييرات التي أجريت للمرشحات.\nللتفاصيل الكاملة، انظر [[Special:AbuseFilter/history|قائمة]] تغييرات المرشحات الحديثة.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|أنشأ}} $4 ($5)",
+ "abusefilter-logentry-modify": "$1 {{GENDER:$2|عدل|عدلت}} $4 ($5)",
"abusefilter-log-noresults": "لا توجد نتائج.",
"abusefilter-diff-title": "فروقات بين النسخ",
"abusefilter-diff-item": "عنصر",
@@ -414,5 +529,17 @@
"abusefilter-import-intro": "يمكنك استخدام هذه الواجهة لاستيراد المرشحات من الويكيات الأخرى.\nفي الويكي المصدر، اضغط \"{{int:abusefilter-edit-export}}\" تحت \"{{int:abusefilter-edit-tools}}\" في واجهة التعديل.\nانسخ من صندوق النص الذي سيظهر، والصقه إلى صندوق النص هذا، ثم اضغط \"{{int:abusefilter-import-submit}}\",",
"abusefilter-import-submit": "استيراد البيانات",
"abusefilter-group-default": "افتراضي",
- "apihelp-query+abuselog-example-1": "أظهر مدخلات السجل الأخيرة"
+ "abusefilter-http-error": "حدث خطأ HTTP: $1.",
+ "abusefilter-view-private-submit": "عرض التفاصيل الخاصة",
+ "abusefilter-view-private": "عرض التفاصيل الخاصة",
+ "abusefilter-view-private-reason": "سبب الدخول إلى التفاصيل الخاصة:",
+ "abusefilter-log-details-id": "معرف السجل",
+ "abusefilter-invalid-request": "طلب غير صالح! يجب عليك الوصول إلى تفاصيل السجل الخاص من خلال النموذج في [[Special:AbuseLog/$1]] وتقديم سبب.",
+ "abusefilter-invalid-request-noid": "طلب غير صالح! يجب عليك الوصول إلى تفاصيل السجل الخاص من خلال النموذج الموجود في صفحة تفاصيل سجل الإساءة وتقديم سبب.",
+ "log-description-abusefilterprivatedetails": "يظهر السجل قائمة بالمرات التي وصل إليها المستخدم إلى التفاصيل الخاصة لسجل الإساءة.",
+ "abusefilter-noreason": "تحذير: لمشاهدة التفاصيل الخاصة لهذا السجل; يجب تقديم سبب.",
+ "abusefilter-log-ip-not-available": "غير متاح",
+ "abusefilter-tag-reserved": "تم حجز الوسم <code>abusefilter-condition-limit</code> للاستخدام الداخلي بواسطة مرشح الإساءة.",
+ "tag-abusefilter-condition-limit": "تم التوصل إلى حد الشرط",
+ "tag-abusefilter-condition-limit-description": "التعديلات أو الأحداث الأخرى التي لا يمكن التحقق منها من قبل جميع [[Special:AbuseFilter|مرشحات الإساءة]] النشطة ([[mw:Extension:AbuseFilter/Conditions|مساعدة]])."
}
diff --git a/AbuseFilter/i18n/arc.json b/AbuseFilter/i18n/arc.json
index 177c4afb..da38c839 100644
--- a/AbuseFilter/i18n/arc.json
+++ b/AbuseFilter/i18n/arc.json
@@ -49,7 +49,6 @@
"abusefilter-list-options-deleted-only": "ܚܘܝ ܡܨܦܝܢܝܬ̈ܐ ܫܝܦܬ̈ܐ ܒܠܚܘܕ",
"abusefilter-list-options-deleted-hide": "ܛܫܝ ܡܨܦܝܢܝܬ̈ܐ ܫܝܦܬ̈ܐ",
"abusefilter-list-options-deleted-show": "ܚܒܘܫ ܡܨܦܝܢܝܬ̈ܐ ܫܝܦܬ̈ܐ",
- "abusefilter-list-options-disabled": "ܡܨܦܝܢܝܬ̈ܐ ܠܐ ܬܘܦܥܠܬ̈ܐ:",
"abusefilter-list-options-hidedisabled": "ܛܫܝ ܡܨܦܝܢܝܬ̈ܐ ܠܐ ܬܘܦܥܠܬ̈ܐ",
"abusefilter-list-options-submit": "ܚܘܕܬܐ",
"abusefilter-tools-reautoconfirm-user": "ܡܦܠܚܢܐ:",
@@ -81,10 +80,10 @@
"abusefilter-edit-builder-group-misc": "ܦܪ̈ܝܫܬܐ",
"abusefilter-edit-builder-vars-newsize": "ܥܓܪܐ ܕܦܐܬܐ ܚܕܬܐ",
"abusefilter-edit-builder-vars-oldsize": "ܥܓܪܐ ܕܦܐܬܐ ܥܬܝܩܬܐ",
- "abusefilter-edit-builder-vars-article-id": "ܗܝܝܘܬܐ ܕܦܐܬܐ",
- "abusefilter-edit-builder-vars-article-ns": "ܚܩܠܐ ܕܦܐܬܐ",
- "abusefilter-edit-builder-vars-article-text": "ܟܘܢܝܐ ܕܦܐܬܐ (ܕܠܐ ܚܩܠܐ)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "ܟܘܢܝܐ ܓܡܝܪܐ ܕܦܐܬܐ",
+ "abusefilter-edit-builder-vars-page-id": "ܗܝܝܘܬܐ ܕܦܐܬܐ",
+ "abusefilter-edit-builder-vars-page-ns": "ܚܩܠܐ ܕܦܐܬܐ",
+ "abusefilter-edit-builder-vars-page-title": "ܟܘܢܝܐ ܕܦܐܬܐ (ܕܠܐ ܚܩܠܐ)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "ܟܘܢܝܐ ܓܡܝܪܐ ܕܦܐܬܐ",
"abusefilter-edit-builder-vars-user-age": "ܥܘܡܪܐ ܕܚܘܫܒܢܐ ܕܡܦܠܚܢܐ",
"abusefilter-edit-builder-vars-user-name": "ܫܡܐ ܕܚܘܫܒܢܐ ܕܡܦܠܚܢܐ",
"abusefilter-filter-log": "ܫܘܚܠܦ̈ܐ ܕܡܨܦܝܢܝܬܐ ܚܕ̈ܬܐ",
diff --git a/AbuseFilter/i18n/arz.json b/AbuseFilter/i18n/arz.json
index 41622aa5..dec22514 100644
--- a/AbuseFilter/i18n/arz.json
+++ b/AbuseFilter/i18n/arz.json
@@ -12,7 +12,6 @@
"abusefilter": "ضبط مرشح الإساءة",
"abuselog": "سجل الإساءة",
"abusefilter-intro": "مرحبا بك إلى واجهه التحكم بمرشح الإساءه.\nمرشح الإساءه هو ميكانيكيه برمجيه آليه لتطبيق ضوابط تلقائيه لكل الأفعال.\nهذه الواجهه تعرض قائمه بالمرشحات المعرفه، وتسمح بتعديلها.",
- "abusefilter-mustbeeditor": "لأسباب أمنيه، المستخدمون ذوو صلاحيه تعديل مرشّحات الإساءه فقط يمكنهم استخدام هذه الواجهه.",
"abusefilter-warning": "'''تحذير''': الإجراء ده أُعتبر مضر.\nهايتم استرجاع التعديلات المضره بسرعه،\nوالتعديل المضر المتكرر أو المستمر هايتسبب فيى منع حسابك أو الكمبيوتر بتاعك .\nإذا كنت فاكر إن التعديل ده كويس، فممكن تضغط \"أرسل\" مرة تانيه.\nوصف مختصر لقاعدة الإساءه : $1",
"abusefilter-disallowed": "هذا الفعل تم التعرف عليه تلقائيا كضار،\nولذا تم منعه.\nلو كنت تعتقد أن تعديلك بناء، من فضلك اتصل بإدارى، وأخبره بما كنت تحاول أن تفعل.\nوصف مختصر لقاعده الإساءه التى طابقها فعلك هو: $1",
"abusefilter-blocked-display": "هذا الفعل تم التعرف عليه تلقائيا كضار،\nوأنت تم منعك من تنفيذه.\nبالإضافه إلى ذلك، لحمايه {{SITENAME}}، حسابك وكل عناوين الأيبى الملحقه تم منعها من التحرير.\nلو أن هذا حدث بطريق الخطأ، من فضلك اتصل بإدارى.\nوصف مختصر لقاعده الإساءه التى طابقها فعلك هو: $1",
@@ -89,7 +88,6 @@
"abusefilter-list-options-deleted-only": "اعرض فقط المرشحات المحذوفة",
"abusefilter-list-options-deleted-hide": "أخفِ المرشحات المحذوفة",
"abusefilter-list-options-deleted-show": "ضمن المرشحات المحذوفة",
- "abusefilter-list-options-disabled": "المرشحات المعطلة:",
"abusefilter-list-options-hidedisabled": "أخفِ المرشحات المعطلة",
"abusefilter-list-options-submit": "تحديث",
"abusefilter-tools-text": "هنا بعض الأدوات التى ربما تكون مفيده فى صياغه وتصليح مرشحات الإساءه.",
@@ -107,7 +105,6 @@
"abusefilter-edit-status-label": "إحصاءات:",
"abusefilter-edit-status": "من آخر $1 {{PLURAL:$1|تعديل|تعديل}}، هذا المرشح طابق $2 ($3%).",
"abusefilter-edit-status-profile": "من آخر $1 {{PLURAL:$1|تعديل|تعديل}}، هذا المرشح طابق $2 ($3%).\nفى المتوسط، زمن تشغيله هو $4 مللى ثانيه، ويستهلك $5 {{PLURAL:$5|شرط|شرط}} من شرط الحد.",
- "abusefilter-edit-throttled": "'''تحذير''': هذا المرشح تم تعطيله تلقائيا كإجراء أمنى.\nلقد وصل إلى حد مطابقه أكثر من $1% من الأفعال.",
"abusefilter-edit-new": "مرشح جديد",
"abusefilter-edit-save": "حفظ المُرشِّح",
"abusefilter-edit-id": "رقم المُرشِّح:",
@@ -125,7 +122,6 @@
"abusefilter-edit-consequences": "الأفعال المتخذه عند التطابق",
"abusefilter-edit-action-warn": "نفذ هذه الأفعال بعد إعطاء المستخدم تحذيرا",
"abusefilter-edit-action-disallow": "امنع المستخدم من عمل الفعل المقصود",
- "abusefilter-edit-action-flag": "علم على التعديل فى سجل الإساءة",
"abusefilter-edit-action-blockautopromote": "اسحب حاله التأكيد التلقائى من المستخدم",
"abusefilter-edit-action-degroup": "أزل المستخدم من كل المجموعات المميزة",
"abusefilter-edit-action-block": "امنع المستخدم و/أو عنوان الأيبى من التحرير",
@@ -134,7 +130,6 @@
"abusefilter-edit-action-tag": "اوسم التعديل لمراجعه أخرى.",
"abusefilter-edit-throttle-count": "عدد الأفعال المسموح بها:",
"abusefilter-edit-throttle-period": "فتره من الزمن:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|ثانية|ثانية}}",
"abusefilter-edit-throttle-groups": "حد المجموعه بواسطة:\n:''(واحده لكل سطر، ادمج بالفاصلات)''",
"abusefilter-edit-warn-message": "رساله النظام للاستخدام عند التحذير:",
"abusefilter-edit-warn-other": "رساله أخرى",
@@ -217,18 +212,18 @@
"abusefilter-edit-builder-vars-oldsize": "حجم الصفحه القديم",
"abusefilter-edit-builder-vars-removedlines": "السطور المزاله فى التعديل",
"abusefilter-edit-builder-vars-summary": "ملخص التعديل/السبب",
- "abusefilter-edit-builder-vars-article-id": "هويه الصفحة",
- "abusefilter-edit-builder-vars-article-ns": "نطاق الصفحة",
- "abusefilter-edit-builder-vars-article-text": "عنوان الصفحه (بدون نطاق)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "عنوان الصفحه الكامل",
+ "abusefilter-edit-builder-vars-page-id": "هويه الصفحة",
+ "abusefilter-edit-builder-vars-page-ns": "نطاق الصفحة",
+ "abusefilter-edit-builder-vars-page-title": "عنوان الصفحه (بدون نطاق)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "عنوان الصفحه الكامل",
"abusefilter-edit-builder-vars-movedfrom-id": "هويه الصفحه لنقل صفحه المصدر",
"abusefilter-edit-builder-vars-movedfrom-ns": "نطاق الصفحه المصدر للنقل",
- "abusefilter-edit-builder-vars-movedfrom-text": "عنوان الصفحه المصدر للنقل",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "العنوان الكامل للصفحه المصدر للنقل",
+ "abusefilter-edit-builder-vars-movedfrom-title": "عنوان الصفحه المصدر للنقل",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "العنوان الكامل للصفحه المصدر للنقل",
"abusefilter-edit-builder-vars-movedto-id": "هويه الصفحه لنقل صفحه الهدف",
"abusefilter-edit-builder-vars-movedto-ns": "نطاق الصفحه الهدف للنقل",
- "abusefilter-edit-builder-vars-movedto-text": "عنوان الصفحه الهدف للنقل",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "العنوان الكامل للصفحه الهدف للنقل",
+ "abusefilter-edit-builder-vars-movedto-title": "عنوان الصفحه الهدف للنقل",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "العنوان الكامل للصفحه الهدف للنقل",
"abusefilter-edit-builder-vars-user-editcount": "عدد التعديلات للمستخدم",
"abusefilter-edit-builder-vars-user-age": "عمر حساب المستخدم",
"abusefilter-edit-builder-vars-user-name": "اسم حساب المستخدم",
@@ -284,7 +279,7 @@
"abusefilter-exception-regexfailure": "خطأ فى التعبير المنتظم \"$3\" عند الحرف $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "تجاوز غير قانونى لمتغير موجود مسبقا \"$2\" عند الحرف $1.",
"abusefilter-exception-outofbounds": "طلب مدخله قائمه غير موجوده $2 (حجم القائمه = $3) عند الحرف $1.",
- "abusefilter-exception-notlist": "طلب مدخله مصفوفه لغير مصفوفه عند الحرف $1.",
+ "abusefilter-exception-notarray": "طلب مدخله مصفوفه لغير مصفوفه عند الحرف $1.",
"abusefilter-action-tag": "وسم",
"abusefilter-action-throttle": "حد",
"abusefilter-action-warn": "تحذير",
@@ -344,7 +339,6 @@
"abusefilter-topnav-import": "استيراد المرشح",
"abusefilter-log-name": "سجل مرشح الإساءة",
"abusefilter-log-header": "هذا السجل يعرض ملخصا للتغييرات المعموله للمرشحات.\nللتفاصيل الكامله، انظر [[Special:AbuseFilter/history|قائمة]] تغييرات المرشحات الحديثه.",
- "abusefilter-log-entry-modify": "عدل $1 ($2)",
"abusefilter-diff-title": "فروقات بين النسخ",
"abusefilter-diff-item": "عنصر",
"abusefilter-diff-version": "نسخه من $1 من قبل $2",
diff --git a/AbuseFilter/i18n/as.json b/AbuseFilter/i18n/as.json
index 8f33a50c..16f78299 100644
--- a/AbuseFilter/i18n/as.json
+++ b/AbuseFilter/i18n/as.json
@@ -40,8 +40,6 @@
"abusefilter-log-hide-legend": "অভিলেখ সংযোজন লুকুৱাই ৰাখক",
"abusefilter-log-hide-id": "অভিলেখ সংযোজনৰ আইডি:",
"abusefilter-log-hide-reason": "কাৰণ:",
- "abusefilter-logentry-suppress": "\"[[$1]]\" লু্কুৱাই ৰাখক",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\" দেখুৱাওক",
"abusefilter-list": "সকলোৱোৰ ছেকনী",
"abusefilter-list-status": "স্থিতি",
"abusefilter-list-visibility": "দৃশ্যমান",
diff --git a/AbuseFilter/i18n/ast.json b/AbuseFilter/i18n/ast.json
index adf429fd..6e7e468c 100644
--- a/AbuseFilter/i18n/ast.json
+++ b/AbuseFilter/i18n/ast.json
@@ -10,7 +10,7 @@
"abusefilter": "Configuración de la peñera d'abusos",
"abuselog": "Rexistru d'abusos",
"abusefilter-intro": "Bienveníu a la interfaz d'alministración de la peñera d'abusos.\nLa peñera d'abusos ye un mecanismu de software automatizáu p'aplicar heurística automática a toles aiciones.\nEsta interfaz amuesa la llista de les peñeres definíes, y permite camudales.",
- "abusefilter-mustbeeditor": "Por razones de seguridá, solamente los usuarios con permisu pa camudar les peñeres d'abusu pueden usar esta interfaz.",
+ "abusefilter-mustviewprivateoredit": "Por razones de seguridá, solamente los usuarios con permisu pa ver les peñeres d'abusu privaes o cambiar filtros pueden usar esta interfaz.",
"abusefilter-warning": "'''Avisu''': Esta aición identificóse automáticamente como perxudicial.\nLes aiciones non constructives revertiránse dafechu,\ny la repetición d'ediciones non constructives tendrá como resultáu el bloquéu de la to cuenta o direición IP.\nSi crees qu'esta aición ye constructiva, pues volver a unviala pa confirmala.\nLa descripción curtia de la regla d'abusu que s'activó cola to aición ye: $1",
"abusefilter-disallowed": "Esta aición identificóse automáticamente como perxudicial y, poro, nun se permite.\nSi pienses que la to aición foi constructiva, por favor, informa a un alministrador de lo que queríes facer.\nEsta ye una descripción curtia de la regla d'abusu que casa cola to aición: $1",
"abusefilter-blocked-display": "Esta aición identificóse automáticamente como perxudicial, y torgósete executala.\nAmás, pa protexer a {{SITENAME}}, a la to cuenta d'usuariu y toles direiciones IP asociaes se-yos torgó editar.\nSi esto asocedió por un fallu, por favor, ponte'n contautu con un alministrador.\nEquí hai una descripción curtia de la regla d'abusu que casa cola to aición: $1",
@@ -25,6 +25,7 @@
"right-abusefilter-log": "Ver el rexistru d'abusos",
"right-abusefilter-log-detail": "Ver los detalles de les entraes del rexistru d'abusos",
"right-abusefilter-private": "Ver los datos privaos del rexistru d'abusos",
+ "right-abusefilter-private-log": "Ver el rexistru d'accesu a detalles privaos d'AbuseFilter",
"right-abusefilter-modify-restricted": "Camudar les peñeres d'abusu con aiciones restrinxíes",
"right-abusefilter-revert": "Revertir tolos cambios fechos por una determinada peñera d'abusu",
"right-abusefilter-view-private": "Ver les peñeres d'abusu marcaes como privaes",
@@ -37,6 +38,7 @@
"action-abusefilter-log": "ver el rexistru d'abusos",
"action-abusefilter-log-detail": "ver los detalles de les entraes del rexistru d'abusos",
"action-abusefilter-private": "ver los datos privaos del rexistru d'abusos",
+ "action-abusefilter-private-log": "ver el rexistru d'accesu a detalles privaos d'AbuseFilter",
"action-abusefilter-modify-restricted": "camudar les peñeres d'abusu con aiciones restrinxíes",
"action-abusefilter-revert": "revertir tolos cambios fechos por una determinada peñera d'abusu",
"action-abusefilter-view-private": "ver les peñeres d'abusu marcaes como privaes",
@@ -48,10 +50,19 @@
"abusefilter-log-search-filter": "IDs del filtru (separar con barres verticales):",
"abusefilter-log-search-title": "Títulu:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Impactu:",
+ "abusefilter-log-search-impact-all": "Toles aiciones",
+ "abusefilter-log-search-impact-saved": "Namái los cambios guardaos",
+ "abusefilter-log-search-impact-not-saved": "Ensin cambios guardaos",
"abusefilter-log-search-entries-label": "Visibilidá:",
"abusefilter-log-search-entries-all": "Toles entraes",
"abusefilter-log-search-entries-hidden": "Sólo les entraes tapecíes",
"abusefilter-log-search-entries-visible": "Sólo les entraes visibles",
+ "abusefilter-log-search-action-label": "Aición que lu llanzó:",
+ "abusefilter-log-search-action-other": "Otres",
+ "abusefilter-log-search-action-any": "Cualquiera",
+ "abusefilter-log-search-action-taken-label": "Aición fecha:",
+ "abusefilter-log-search-action-taken-any": "Cualquiera",
"abusefilter-log-search-submit": "Guetar",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|disparó}} una peñera d'abusu {{GENDER:$8|al facer}} l'aición «$3» en $4.\nMidíes tomaes: $5;\nDescripción de la peñera: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|disparó}} un filtru d'abusu, {{GENDER:$8|al facer}} l'aición «$3» en $4.\nMidíes tomaes: $5;\nDescripción del filtru: $6 ($7)",
@@ -65,29 +76,42 @@
"abusefilter-log-details-var": "Variable",
"abusefilter-log-details-val": "Valor",
"abusefilter-log-details-vars": "Parámetros de l'aición",
- "abusefilter-log-details-private": "Datos privaos",
+ "abusefilter-log-details-private": "Detalles privaos del rexistru",
"abusefilter-log-details-ip": "Direición IP d'orixe",
+ "abusefilter-log-details-checkuser": "Comprobar usuariu",
"abusefilter-log-noactions": "dengún",
"abusefilter-log-details-diff": "Cambios fechos na edición",
"abusefilter-log-linkoncontribs": "rexistru d'abusos",
"abusefilter-log-linkoncontribs-text": "Rexistru d'abusos d'{{GENDER:$1|esti usuariu|esta usuaria}}",
+ "abusefilter-log-linkonhistory": "ver el rexistru d'abusos",
+ "abusefilter-log-linkonhistory-text": "Ver el rexistru d'abusos d'esta páxina",
"abusefilter-log-hidden": "(entrada anubría)",
"abusefilter-log-hidden-implicit": "(anubríu porque se desanició la revisión)",
"abusefilter-log-cannot-see-details": "Nun tienes permisu pa ver los detalles d'esta entrada.",
+ "abusefilter-log-cannot-see-private-details": "Nun tienes permisu pa ver los detalles privaos d'esta entrada.",
"abusefilter-log-nonexistent": "Nun esiste nenguna entrada cola ID proporcionada.",
"abusefilter-log-details-hidden": "Nun pues ver los detalles d'esta entrada porque ta anubría de la vista pública.",
+ "abusefilter-log-details-hidden-implicit": "Nun pues ver los detalles d'esta entrada porque la revisión asociada ta anubrida de la vista pública.",
"abusefilter-log-private-not-included": "Una o más de les IDs del filtru qu'especificasti ye privada. Como nun tienes permisu para ver los detalles de los filtros privaos, nun se buscó ente esos filtros.",
"abusefilter-log-hide-legend": "Anubrir entrada del rexistru",
"abusefilter-log-hide-id": "ID de la entrada del rexistru:",
"abusefilter-log-hide-hidden": "Anubrir esta entrada de la vista pública",
"abusefilter-log-hide-reason": "Motivu:",
+ "abusefilter-log-hide-reason-other": "Otru motivu:",
"abusefilter-log-hide-forbidden": "Nun tienes permisu p'anubrir entraes del rexistru d'abusos.",
- "abusefilter-logentry-suppress": "anubre \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "amuesa \"[[$1]]\"",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|tapeció}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|destapeció}} $3",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|disparó}} $4, {{GENDER:$2|al facer}} l'aición «$5» en $3. Aiciones feches: $6 ($7)",
+ "log-action-filter-abusefilter": "Tipu de cambéu de filtru:",
+ "log-action-filter-abusefilter-create": "Creación de filtru nuevu",
+ "log-action-filter-abusefilter-modify": "Cambéu de filtru",
+ "log-action-filter-suppress-abuselog": "Supresiones del filtru antiabusos",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|tuvo accesu}} a los detalles privaos de $3",
+ "abusefilterprivatedetails-log-name": "Rexistru d'accesu a detalles privaos d'AbuseFilter",
"abusefilter-management": "Xestión del filtru d'abusu",
"abusefilter-list": "Tolos filtros",
"abusefilter-list-id": "ID del filtru",
+ "abusefilter-list-pattern": "Patrón",
"abusefilter-list-status": "Estáu",
"abusefilter-list-public": "Descripción pública",
"abusefilter-list-consequences": "Consecuencies",
@@ -103,6 +127,7 @@
"abusefilter-enabled": "Activáu",
"abusefilter-deleted": "Desaniciáu",
"abusefilter-disabled": "Desactivao",
+ "abusefilter-throttled": "frenada",
"abusefilter-hitcount": "$1 {{PLURAL:$1|activación|activaciones}}",
"abusefilter-new": "Crear un nuevu filtru",
"abusefilter-return": "Volver a l'alministración del filtru",
@@ -116,8 +141,16 @@
"abusefilter-list-options-scope-local": "Sólo regles llocales",
"abusefilter-list-options-scope-global": "Sólo regles globales",
"abusefilter-list-options-scope-all": "Regles llocales y globales",
- "abusefilter-list-options-disabled": "Filtros desactivaos:",
+ "abusefilter-list-options-further-options": "Más opciones:",
"abusefilter-list-options-hidedisabled": "Despintar filtros desactivaos",
+ "abusefilter-list-options-hideprivate": "Tapecer los filtros privaos",
+ "abusefilter-list-options-searchfield": "Buscar nes regles:",
+ "abusefilter-list-options-searchpattern": "Insertar un patrón",
+ "abusefilter-list-options-searchoptions": "Mou de gueta:",
+ "abusefilter-list-options-search-like": "Consulta simple",
+ "abusefilter-list-options-search-rlike": "Espresión regular",
+ "abusefilter-list-options-search-irlike": "Espresión regular ensin estremar lletres mayúscules",
+ "abusefilter-list-regexerror": "Hebo un fallu cuando se buscaba: error de sintaxis na espresión regular.",
"abusefilter-list-options-submit": "Anovar",
"abusefilter-tools-text": "Equí hai delles ferramientes que puen ser afayadices pa formular y depurar los filtros d'abusu.",
"abusefilter-tools-expr": "Probador d'espresiones",
@@ -132,6 +165,7 @@
"abusefilter-edit": "Editando la peñera d'abusos",
"abusefilter-edit-subtitle": "Editando'l filtru $1",
"abusefilter-edit-subtitle-new": "Crear un filtru",
+ "abusefilter-edit-token-not-match": "La edición nun se guardó. Tenta volver a guardala.",
"abusefilter-edit-oldwarning": "<strong>Tas editando una versión antigua d'esti filtru.\nLes estadístiques citaes son de la versión más nueva del filtru.\nSi guardes los cambios, escribirás enriba de tolos cambios dende la revisión que tas editando.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Volver al historial d'esti filtru]].",
"abusefilter-edit-status-label": "Estadístiques:",
"abusefilter-edit-status": "De {{PLURAL:$1|la última aición|les $1 últimes aiciones}}, esti filtru coincidió con $2 ($3%).",
@@ -140,7 +174,9 @@
"abusefilter-edit-new": "Filtru nuevu",
"abusefilter-edit-save": "Guardar el filtru",
"abusefilter-edit-id": "ID del filtru:",
+ "abusefilter-edit-switch-editor": "Cambiar d'editor",
"abusefilter-edit-description": "Descripción:\n:''(visible de mou públicu)''",
+ "abusefilter-edit-field-description": "descripción",
"abusefilter-edit-group": "Grupu de filtros:",
"abusefilter-edit-flags": "Marques:",
"abusefilter-edit-enabled": "Activar esti filtru",
@@ -148,6 +184,7 @@
"abusefilter-edit-hidden": "Tapecer los detalles d'esti filtru de la vista pública",
"abusefilter-edit-global": "Filtru global",
"abusefilter-edit-rules": "Condiciones:",
+ "abusefilter-edit-field-conditions": "condiciones",
"abusefilter-edit-notes": "Notes:",
"abusefilter-edit-lastmod": "Últimu cambiu del filtru:",
"abusefilter-edit-lastmod-text": "$3 a les $4 por $2",
@@ -158,25 +195,42 @@
"abusefilter-edit-action-blockautopromote": "Revocar l'estáu autoconfirmáu del usuariu",
"abusefilter-edit-action-degroup": "Retirar al usuariu de tolos grupos con privilexos",
"abusefilter-edit-action-block": "Bloquiar les ediciones del usuariu o direición IP",
+ "abusefilter-edit-action-blocktalk": "Bloquiar al usuariu y/o direición IP la edición na so propia páxina d'alderique",
"abusefilter-edit-action-throttle": "Disparar les aiciones sólo si l'usuariu pasa una llende de porcentaxe",
- "abusefilter-edit-action-rangeblock": "Bloquiar el rangu /16 d'orixe del usuariu",
+ "abusefilter-edit-action-rangeblock": "Bloquiar el' respeutivu intervalu d'IP d'orixe del usuariu",
"abusefilter-edit-action-tag": "Etiquetar la edición pa revisión posterior",
"abusefilter-edit-throttle-count": "Númberu d'aiciones a permitir:",
- "abusefilter-edit-throttle-period": "Periodu de tiempu:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|segundu|segundos}}",
- "abusefilter-edit-throttle-groups": "Agrupar la regulación por:\n:''(unu por llinia, combinar con comes)''",
+ "abusefilter-edit-throttle-period": "Periodu de tiempu (en segundos):",
+ "abusefilter-edit-throttle-groups": "Agrupar la regulación por:",
+ "abusefilter-edit-throttle-ip": "Direición IP",
+ "abusefilter-edit-throttle-user": "Cuenta d'usuariu",
+ "abusefilter-edit-throttle-range": "rangu /16",
+ "abusefilter-edit-throttle-creationdate": "Hora de creación de cuenta nel sirvidor",
+ "abusefilter-edit-throttle-editcount": "Contador d'ediciones",
+ "abusefilter-edit-throttle-site": "El sitiu enteru",
+ "abusefilter-edit-throttle-page": "Páxina",
+ "abusefilter-throttle-details": "Permitir $1 {{PLURAL:$1|aición|aiciones}} cada {{PLURAL:$2|segundu|$2 segundos}}, regular el grupu por: $3",
"abusefilter-edit-warn-message": "Mensaxe del sistema a usar pal avisu:",
"abusefilter-edit-warn-other": "Otru mensaxe",
"abusefilter-edit-warn-other-label": "Nome de páxina del otru mensaxe:\n:''(ensin el prefixu MediaWiki)''",
"abusefilter-edit-warn-actions": "Aiciones:",
- "abusefilter-edit-warn-preview": "Vista previa del mensaxe seleicionáu",
+ "abusefilter-edit-warn-preview": "Amosar/Anubrir la vista previa del mensaxe seleicionáu",
"abusefilter-edit-warn-edit": "Crear/Editar el mensaxe seleicionáu",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Etiquetes]] a aplicar (una por llinia):",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Etiquetes]] a aplicar:",
+ "abusefilter-edit-tag-placeholder": "Añadir etiquetes (una por una o separaes por comes)",
+ "abusefilter-edit-tag-hidden-placeholder": "Añadir etiquetes (dixebraes por comes)",
+ "abusefilter-edit-block-anon-durations": "Duración del bloquéu pa usuarios anónimos:",
+ "abusefilter-edit-block-user-durations": "Duración del bloquéu pa usuarios rexistraos:",
+ "abusefilter-block-anon": "Bloquiar a los usuarios anónimos",
+ "abusefilter-block-user": "bloquiar a los usuarios rexistraos",
+ "abusefilter-block-talk": "páxina d'alderique bloquiada",
"abusefilter-edit-denied": "Nun puedes ver los detalles d'esti filtru, porque tien torgada la vista pública.",
"abusefilter-edit-main": "Parámetros del filtru",
"abusefilter-edit-done-subtitle": "Filtru editáu",
"abusefilter-edit-done": "Guardáronse [[Special:AbuseFilter/history/$1/diff/prev/$2|los tos cambios]] nel [[Special:AbuseFilter/$1|filtru $3]].",
"abusefilter-edit-badsyntax": "Hai un error de sintaxis nel filtru qu'especificasti.\nLa salida del analizador foi: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Los campos siguientes son obligatorios y tienen de rellenase: $1",
+ "abusefilter-edit-deleting-enabled": "Nun puedes marcar como desaniciáu un filtru activu.",
"abusefilter-edit-restricted": "Nun puedes editar esti filtru, porque contien una o más aiciones restrinxíes.\nPor favor pide a un usuariu con permisu p'amestar aiciones restrinxíes que faiga el cambiu.",
"abusefilter-edit-viewhistory": "Ver l'historial d'esti filtru",
"abusefilter-edit-history": "Historial:",
@@ -188,7 +242,7 @@
"abusefilter-edit-export": "Esportar esti filtru a otra wiki",
"abusefilter-edit-syntaxok": "Nun se deteutaron errores de sintaxis.",
"abusefilter-edit-syntaxerr": "Deteutóse un error de sintaxis: $1",
- "abusefilter-edit-bad-tags": "Una o más de les etiquetes qu'especificasti nun ye válida.\nLes etiquetes tendríen de ser curties, nun contener caráuteres especiales y nun tar acutaes pa otru software. Tenta escoyer otru nome pa la etiqueta.",
+ "abusefilter-edit-bad-tags": "Una o más de les etiquetes qu'especificasti nun ye válida.\nLes etiquetes tendríen de ser curties, nun pueden contener caráuteres especiales y nun pueden tar acutaes pa otru software. Tenta escoyer otru nome pa la etiqueta.",
"abusefilter-edit-notallowed": "Nun tienes permisu pa crear o editar filtros d'abusos",
"abusefilter-edit-notallowed-global": "Nun tienes permisu pa crear o editar filtros d'abusos globales",
"abusefilter-edit-notallowed-global-custom-msg": "Nun se permiten los mensaxes personalizaos pa filtros globales",
@@ -201,8 +255,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Módulu (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Potencia (**)",
"abusefilter-edit-builder-group-op-comparison": "Operadores de comparancia",
- "abusefilter-edit-builder-op-comparison-equal": "Igual a (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Non igual a (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Valor igual a (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Valor y tipu igual a (==)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Valor non igual a (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Valor y tipu non igual a (==)",
"abusefilter-edit-builder-op-comparison-lt": "Menor que (<)",
"abusefilter-edit-builder-op-comparison-gt": "Mayor que (>)",
"abusefilter-edit-builder-op-comparison-lte": "Menor o igual que (<=)",
@@ -225,23 +281,30 @@
"abusefilter-edit-builder-funcs-lcase": "A minúscules (lcase)",
"abusefilter-edit-builder-funcs-ucase": "A mayúscules (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normalizar los caráuteres confusos (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normalizar y buscar una cadena pa distintes subcadenes en mou OR (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Normalizar y buscar una cadena pa distintes subcadenes en mou AND (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Desaniciar los caráuteres dobles (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Caráuteres especiales / caráuteres totales (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normalizar (norm)",
"abusefilter-edit-builder-funcs-count": "Númberu de veces que la cadena X apaez na cadena Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Númberu de veces que la espresión regular X apaez na cadena Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Matriz de correspondencies d'espresiones regulares nun testu pa cada grupu d'atropamientu (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Desaniciar espaciu en blanco (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Desaniciar los caráuteres especiales (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "¿Ta la IP nel rangu? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Buscar la cadena pa múltiples subcadenes (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Buscar la cadena pa múltiples subcadenes en mou OR (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Buscar la cadena pa múltiples subcadenes en mou AND (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Comprobar si un argumentu determináu ye igual (===) a cualquiera de los siguientes argumentos (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Subcadena (substr)",
"abusefilter-edit-builder-funcs-strpos": "Posición de la subcadena na cadena (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Trocar subcadena por cadena (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Cadena d'escape como lliteral en espresión regular (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Definir variable (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Normalizar les entidaes HTML como caráuteres unicode (saniar)",
"abusefilter-edit-builder-group-vars": "Variables",
"abusefilter-edit-builder-vars-accountname": "Nome de la cuenta (al crear la cuenta)",
"abusefilter-edit-builder-vars-timestamp": "Hora Unix del cambiu",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Marca de tiempu del rexistru",
"abusefilter-edit-builder-vars-action": "Aición",
"abusefilter-edit-builder-vars-addedlines": "Llinies amestaes na edición",
"abusefilter-edit-builder-vars-delta": "Cambiu de tamañu na edición",
@@ -252,19 +315,21 @@
"abusefilter-edit-builder-vars-new-content-model": "Nuevu modelu de conteníu",
"abusefilter-edit-builder-vars-removedlines": "Llinies desaniciaes na edición",
"abusefilter-edit-builder-vars-summary": "Resumen d'edición/motivu",
- "abusefilter-edit-builder-vars-article-id": "ID de la páxina",
- "abusefilter-edit-builder-vars-article-ns": "Espaciu de nomes de la páxina",
- "abusefilter-edit-builder-vars-article-text": "Títulu de la páxina (ensin l'espaciu de nomes)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Títulu completu de la páxina",
- "abusefilter-edit-builder-vars-article-views": "Visites a la páxina",
+ "abusefilter-edit-builder-vars-page-id": "ID de la páxina",
+ "abusefilter-edit-builder-vars-page-ns": "Espaciu de nomes de la páxina",
+ "abusefilter-edit-builder-vars-page-title": "Títulu de la páxina (ensin l'espaciu de nomes)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Títulu completu de la páxina",
+ "abusefilter-edit-builder-vars-page-age": "Antigüedá de la páxina (en segundos)",
"abusefilter-edit-builder-vars-movedfrom-id": "ID de la páxina orixinal a treslladar",
"abusefilter-edit-builder-vars-movedfrom-ns": "Espaciu de nomes de la páxina orixinal a treslladar",
- "abusefilter-edit-builder-vars-movedfrom-text": "Títulu de la páxina orixinal a treslladar",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Títulu completu de la páxina orixinal a treslladar",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Títulu de la páxina orixinal a treslladar",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Títulu completu de la páxina orixinal a treslladar",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Antigüedá de la páxina al treslladar la páxina fonte (en segundos)",
"abusefilter-edit-builder-vars-movedto-id": "ID de la páxina destín del treslláu",
"abusefilter-edit-builder-vars-movedto-ns": "Espaciu de nomes de la páxina destín del treslláu",
- "abusefilter-edit-builder-vars-movedto-text": "Títulu de la páxina destín del treslláu",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Títulu completu de la páxina destín del treslláu",
+ "abusefilter-edit-builder-vars-movedto-title": "Títulu de la páxina destín del treslláu",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Títulu completu de la páxina destín del treslláu",
+ "abusefilter-edit-builder-vars-movedto-age": "Antigüedá de la páxina al treslladar la páxina destín (en segundos)",
"abusefilter-edit-builder-vars-user-editcount": "Cuenta d'ediciones del usuariu",
"abusefilter-edit-builder-vars-user-age": "Antigüedá de la cuenta del usuariu",
"abusefilter-edit-builder-vars-user-name": "Nome de la cuenta del usuariu",
@@ -274,10 +339,14 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "Data de confirmación de la direición de corréu electrónicu",
"abusefilter-edit-builder-vars-recent-contributors": "Últimos diez usuarios en collaboraron na páxina",
"abusefilter-edit-builder-vars-first-contributor": "Primer usuariu que collaboró na páxina",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Últimos diez usuarios que collaboraron pa treslladar una páxina fonte",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Primer usuariu que collaboró pa treslladar una páxina fonte",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Últimos diez usuarios que collaboraron pa treslladar una páxina destín",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Primer usuariu que collaboró pa treslladar una páxina destín",
"abusefilter-edit-builder-vars-all-links": "Tolos enllaces esternos del nuevu testu",
"abusefilter-edit-builder-vars-added-links": "Tolos enllaces esternos amestaos na edición",
"abusefilter-edit-builder-vars-removed-links": "Tolos enllaces esternos desaniciaos na edición",
- "abusefilter-edit-builder-vars-old-text": "Testu wiki antiguu de la páxina, antes de la edición",
+ "abusefilter-edit-builder-vars-old-text": "Testu wiki antiguu de la páxina, antes de la edición (yá nun s'usa)",
"abusefilter-edit-builder-vars-new-text": "Testu wiki nuevu de la páxina, dempués de la edición",
"abusefilter-edit-builder-vars-new-pst": "Nuevu testu wiki de la páxina, tresformáu por pre-guardar",
"abusefilter-edit-builder-vars-diff-pst": "Diff unificáu de los cambios fechos por edición, tresformaos por pre-guardáu",
@@ -288,9 +357,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "Nivel de protección de treslláu de la páxina",
"abusefilter-edit-builder-vars-restrictions-create": "Protección de creación de la páxina",
"abusefilter-edit-builder-vars-restrictions-upload": "Protección de carga del ficheru",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Nivel de protección d'edición de treslladar páxina fonte",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Nivel de protección de treslláu de la páxina fonte",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Proteición de creación de la páxina fonte del treslláu",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Proteición escontra carga del ficheru fonte del treslláu",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Nivel de proteición d'edición de la páxina de destín del treslláu",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Nivel de proteición de treslláu de la páxina de destín del treslláu",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Proteición de creación de la páxina de destín del treslláu",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Proteición escontra carga del ficheru destín del treslláu",
"abusefilter-edit-builder-vars-old-text-stripped": "Testu antiguu de la páxina, ensin dengún formatu",
"abusefilter-edit-builder-vars-old-links": "Enllaces de la páxina, enantes de la edición",
- "abusefilter-edit-builder-vars-old-html": "Testu wiki antiguu de la páxina, pasáu a HTML",
+ "abusefilter-edit-builder-vars-old-html": "Testu wiki antiguu de la páxina, analizáu en HTML (yá nun s'usa)",
"abusefilter-edit-builder-vars-minor-edit": "Si la edición ta marcada como menor o non",
"abusefilter-edit-builder-vars-file-sha1": "Hash SHA1 del conteníu del ficheru",
"abusefilter-edit-builder-vars-file-size": "Tamañu del ficheru en bytes",
@@ -317,6 +394,7 @@
"abusefilter-history-filterid": "Filtru",
"abusefilter-history-select-legend": "Afinar la gueta",
"abusefilter-history-select-user": "Usuariu:",
+ "abusefilter-history-select-filter": "ID del filtru:",
"abusefilter-history-select-submit": "Afinar",
"abusefilter-history-diff": "Cambios",
"abusefilter-history-error-hidden": "El filtru que pidisti ta tapecíu y nun puedes ver el so historial.",
@@ -327,14 +405,17 @@
"abusefilter-exception-unclosedstring": "Cadena de caráuteres ensin zarrar que principia nel caráuter $1.",
"abusefilter-exception-invalidoperator": "Operador inválidu \"$2\" nel caráuter $1.",
"abusefilter-exception-unrecognisedtoken": "Pase \"$2\" non reconocíu nel caráuter $1.",
- "abusefilter-exception-noparams": "Nun se dieron parámetros a la función \"$2\" nel caráuter $1.",
+ "abusefilter-exception-noparams": "Nun se dieron parámetros a la función «$2» nel caráuter $1. {{PLURAL:$3|Esperábase $3 argumentu|Esperábense $3 argumentos}}",
"abusefilter-exception-dividebyzero": "Intentu illegal de dividir $2 por cero nel caráuter $1.",
"abusefilter-exception-unrecognisedvar": "Variable $2 non reconocida nel caráuter $1.",
"abusefilter-exception-notenoughargs": "Non hai argumentos abondo pa la función $2 llamada nel caráuter $1.\n\t{{PLURAL:$3|Esperabase un argumentu|Esperabense $3 argumentos}}, tienense $4",
"abusefilter-exception-regexfailure": "Error na espresión regular \"$3\" nel caráuter $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Anulación illegal de la variable interna \"$2\" nel caráuter $1.",
- "abusefilter-exception-outofbounds": "Solicitando l'elementu inesistente $2 de la llista (tamañu de la llista = $3) nel caráuter $1.",
- "abusefilter-exception-notlist": "Solicitando un elementu de matriz d'una non-matriz nel caráuter $1.",
+ "abusefilter-exception-outofbounds": "Solicitando l'elementu inesistente $2 de la matriz (tamañu de la matriz = $3) nel caráuter $1.",
+ "abusefilter-exception-notarray": "Solicitando un elementu de matriz d'una non-matriz nel caráuter $1.",
+ "abusefilter-exception-unclosedcomment": "Comentariu sin zarrar nel carácter $1.",
+ "abusefilter-exception-invalidiprange": "Apurrióse un intervalu d'IP inválidu, «$2», nel caráuter $1.",
+ "abusefilter-exception-disabledvar": "La variable $2 nel carácter $1 yá nun s'usa.",
"abusefilter-action-tag": "Etiqueta",
"abusefilter-action-throttle": "Frenar",
"abusefilter-action-warn": "Avisar",
@@ -350,8 +431,9 @@
"abusefilter-revert-periodstart": "Principiu del periodu:",
"abusefilter-revert-periodend": "Fin del periodu:",
"abusefilter-revert-search": "Seleicionar aiciones",
- "abusefilter-revert-filter": "Filtru:",
+ "abusefilter-revert-filter": "ID del filtru:",
"abusefilter-revert-preview-intro": "Más abaxo tan les aiciones feches pola peñera d'abusos que se tornarán con esta aición.\nPor favor, compruébales con procuru y primi «{{int:abusefilter-revert-confirm}}» pa confirmar la seleición.",
+ "abusefilter-revert-confirm-legend": "Confirmar la reversión",
"abusefilter-revert-confirm": "Confirmar",
"abusefilter-revert-success": "Tornasti toles aiciones feches pola peñera d'abusos xeneraes pol [[Special:AbuseFilter/$1|filtru $2]].",
"abusefilter-revert-reason": "Torna automática de toles aiciones feches pola peñera d'abusos debíes al filtru $1.\nMotivu dau: $2",
@@ -363,12 +445,20 @@
"abusefilter-test-submit": "Probar",
"abusefilter-test-load": "Cargar",
"abusefilter-test-user": "Cambios del usuariu:",
+ "abusefilter-test-nobots": "Despintar ediciones de bots",
"abusefilter-test-period-start": "Cambios fechos dempués de:",
"abusefilter-test-period-end": "Cambios fechos antes de:",
"abusefilter-test-page": "Cambios fechos na páxina:",
"abusefilter-test-shownegative": "Ver los cambios que nun casen col filtru",
"abusefilter-test-syntaxerr": "El filtru qu'escribisti contenía un error de sintaxis.\nPues recibir una esplicación completa calcando nel botón \"{{int:abusefilter-edit-check}}\".",
- "abusefilter-test-badtitle": "El títulu de páxina qu'escribisti ye inválidu. Pué contener unu o más caráuteres que nun pueden usase nos títulos.",
+ "abusefilter-test-badtitle": "El títulu de páxina qu'escribisti nun ye válidu. Pue que contenga un caráuter o más que nun puen usase nos títulos.",
+ "abusefilter-test-action": "Tipu d'aición:",
+ "abusefilter-test-search-type-all": "Toles aiciones",
+ "abusefilter-test-search-type-edit": "Ediciones",
+ "abusefilter-test-search-type-move": "Tresllaos",
+ "abusefilter-test-search-type-delete": "Desanicios",
+ "abusefilter-test-search-type-upload": "Cargues",
+ "abusefilter-test-search-type-createaccount": "Creaciones de cuentes",
"abusefilter-changeslist-examine": "esaminar",
"abusefilter-examine": "Esaminar los cambios individuales",
"abusefilter-examine-intro": "Esta páxina permite-y esaminar les variables xeneraes pola Peñera d'abusos pa un cambiu individual, y probalu escontra los filtros.",
@@ -394,7 +484,8 @@
"abusefilter-topnav-tools": "Ferramientes de depuración",
"abusefilter-topnav-import": "Importar un filtru",
"abusefilter-log-name": "Rexistru de la peñera d'abusos",
- "abusefilter-log-header": "Esti rexistru amuesa un resume de los cambios fechos nos filtros.\nPara ver los detalles completos, visite [[Special:AbuseFilter/history|la llista]] de los cambios recién fechos nos filtros.",
+ "abusefilter-log-header": "Esti rexistru amuesa un resume de los cambios fechos nos filtros.\nPara ver los detalles completos, visita [[Special:AbuseFilter/history|la llista]] de los cambios recién fechos nos filtros.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|creó}}'l $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|cambió}} el $4 ($5)",
"abusefilter-log-noresults": "Nun hai resultaos",
"abusefilter-diff-title": "Diferencies ente versiones",
@@ -410,49 +501,16 @@
"abusefilter-import-submit": "Importar datos",
"abusefilter-group-default": "Predetermináu",
"abusefilter-http-error": "Hebo un error HTTP: $1.",
- "apihelp-abusefiltercheckmatch-description": "Revisa pa ver si un AbuseFilter casa con un conxuntu de variables, socesu d'editor rexistráu d'AbuseFilter.\n\nNecesítase vars, rcid o logid, anque sólo pue usase unu.",
- "apihelp-abusefiltercheckmatch-summary": "Comprobar si un filtru d'abusos casa con un conxuntu de variables, o socesu d'AbuseFilter rexistráu nel editor.",
- "apihelp-abusefiltercheckmatch-extended-description": "Ríquese vars, rcid o logid, pero sólo pué usase unu d'ellos.",
- "apihelp-abusefiltercheckmatch-param-filter": "El testu completu del filtru a comprobar pa una coincidencia.",
- "apihelp-abusefiltercheckmatch-param-vars": "Matriz de variables codificaes en JSON escontra la que comprobar.",
- "apihelp-abusefiltercheckmatch-param-rcid": "ID del cambiu reciente nel que comprobar.",
- "apihelp-abusefiltercheckmatch-param-logid": "ID del rexistru de la peñera d'abusos nel que comprobar o filtro.",
- "apihelp-abusefiltercheckmatch-example-1": "Comprobar si'l cambiu reciente cola ID 15 concuaya con un filtru simple",
- "apihelp-abusefilterchecksyntax-description": "Comprobar la sintaxis d'un filtru de la Peñera d'abusos.",
- "apihelp-abusefilterchecksyntax-summary": "Comprobar la sintaxis d'un filtru de la Peñera d'abusos.",
- "apihelp-abusefilterchecksyntax-param-filter": "El testu completu del filtru nel que comprobar la sintaxis.",
- "apihelp-abusefilterchecksyntax-example-1": "Comprobar la sintaxis d'un filtru válidu",
- "apihelp-abusefilterchecksyntax-example-2": "Comprobar la sintaxis d'un filtru inválidu",
- "apihelp-abusefilterevalexpression-description": "Evaluar una espresión de la Peñera d'abusos.",
- "apihelp-abusefilterevalexpression-summary": "Evaluar una espresión de la Peñera d'abusos.",
- "apihelp-abusefilterevalexpression-param-expression": "La espresión a evaluar.",
- "apihelp-abusefilterevalexpression-example-1": "Evaluar una espresión simple",
- "apihelp-abusefilterunblockautopromote-description": "Desbloquia a un usuariu de recibir autopromociones como consecuencia de la peñera d'abusos.",
- "apihelp-abusefilterunblockautopromote-summary": "Desbloquia a un usuariu de recibir autopromociones como consecuencia de la peñera d'abusos.",
- "apihelp-abusefilterunblockautopromote-param-user": "Nome del usuariu que vas desbloquiar.",
- "apihelp-abusefilterunblockautopromote-example-1": "Quitar el bloquéu por auto-promoción de [[User:Example]]",
- "apihelp-query+abusefilters-description": "Amosar detalles de los filtros d'abusos.",
- "apihelp-query+abusefilters-summary": "Amosar detalles de los filtros d'abusos.",
- "apihelp-query+abusefilters-param-startid": "ID del filtru dende'l que principiar la enumeración.",
- "apihelp-query+abusefilters-param-endid": "ID del filtru nel que finar la enumeración.",
- "apihelp-query+abusefilters-param-show": "Amosar sólo los filtros que cumplan con estos criterios.",
- "apihelp-query+abusefilters-param-limit": "El númberu máximu de filtros a poner na llista.",
- "apihelp-query+abusefilters-param-prop": "Qué propiedaes algamar.",
- "apihelp-query+abusefilters-example-1": "Llista de los filtros públicos activaos",
- "apihelp-query+abusefilters-example-2": "Amosar dellos detalles de los filtros",
- "apihelp-query+abuselog-description": "Amostrar los socesos que deteutó unu de los filtros antiabusu.",
- "apihelp-query+abuselog-summary": "Amostrar los socesos que detectó unu de los filtros antiabusu.",
- "apihelp-query+abuselog-param-start": "La marca horaria dende la que principiar la enumeración.",
- "apihelp-query+abuselog-param-end": "La marca horaria na que finar la enumeración.",
- "apihelp-query+abuselog-param-user": "Amosar solo les entraes feches por un determináu usuariu o IP.",
- "apihelp-query+abuselog-param-title": "Amosar solo les entraes correspondientes a una páxina determinada.",
- "apihelp-query+abuselog-param-filter": "Amostrar solo les entraes recoyíes por un identificador de filtru determináu.",
- "apihelp-query+abuselog-param-limit": "La cantidá máxima d'entraes qu'apaecerán.",
- "apihelp-query+abuselog-param-prop": "Qué propiedaes algamar.",
- "apihelp-query+abuselog-example-1": "Amosar les entraes recientes del rexistru",
- "apihelp-query+abuselog-example-2": "Amosar les entraes recientes del rexistru pa la [[API]]",
- "apierror-abusefilter-canttest": "Nun tienes permisu pa probar peñeres d'abusu.",
- "apierror-abusefilter-cantcheck": "Nun tienes permisu pa comprobar la sintaxis de les peñeres d'abusu.",
- "apierror-abusefilter-nosuchlogid": "Nun hai nenguna entrada nos rexistros de les peñeres d'abusu con id $1.",
- "apierror-abusefilter-badsyntax": "El filtru tien una sintaxis inválida."
+ "abusefilter-view-private-submit": "Ver detalles privaos",
+ "abusefilter-view-private": "Ver detalles privaos",
+ "abusefilter-view-private-reason": "Motivu del accesu a los detalles privaos:",
+ "abusefilter-log-details-id": "ID del rexistru",
+ "abusefilter-invalid-request": "¡Solicitú inválida! Tienes de facer l'accesu a los detalles privaos del rexistru col formulariu [[Special:AbuseLog/$1]] y dar un motivu.",
+ "abusefilter-invalid-request-noid": "¡Solicitú inválida! Tienes de facer l'accesu a los detalles privaos del rexistru col formulariu de la páxina de detalles del rexistru d'abusos y dar un motivu.",
+ "log-description-abusefilterprivatedetails": "Esti rexistru amuesa una llista de les veces qu'un usuariu tuvo accesu a los detalles privaos d'un rexistru d'abusos.",
+ "abusefilter-noreason": "Atención: Pa ver los detalles privaos d'esti rexistru, tienes de dar un motivu.",
+ "abusefilter-log-ip-not-available": "Non disponible",
+ "abusefilter-tag-reserved": "La etiqueta <code>abusefilter-condition-limit</code> ta acutada pa usu internu por AbuseFilter.",
+ "tag-abusefilter-condition-limit": "aportóse a la llende de condición",
+ "tag-abusefilter-condition-limit-description": "Ediciones o otres actividaes que nun pudieron comprobase por tolos [[Special:AbuseFilter|filtros d'abusos]] activos ([[mw:Extension:AbuseFilter/Conditions|ayuda]])."
}
diff --git a/AbuseFilter/i18n/awa.json b/AbuseFilter/i18n/awa.json
index 837d5122..45a487bf 100644
--- a/AbuseFilter/i18n/awa.json
+++ b/AbuseFilter/i18n/awa.json
@@ -87,7 +87,6 @@
"abusefilter-list-options-scope": "इ श्रेणी से फ़िल्टर देखावा जाय:",
"abusefilter-list-options-scope-local": "स्थानीय विकि",
"abusefilter-list-options-scope-global": "वैश्विक नियम",
- "abusefilter-list-options-disabled": "अक्षम करल फ़िल्टर:",
"abusefilter-list-options-hidedisabled": "अक्षम करल फ़िल्टर लुकुआवा जाय",
"abusefilter-list-options-submit": "अपडेट",
"abusefilter-tools-expr": "अभिव्यक्ति परीक्षक",
diff --git a/AbuseFilter/i18n/az.json b/AbuseFilter/i18n/az.json
index cde20d00..5d090a51 100644
--- a/AbuseFilter/i18n/az.json
+++ b/AbuseFilter/i18n/az.json
@@ -15,7 +15,6 @@
"abusefilter": "Təhqir süzgəcinin tənzimlənməsi",
"abuselog": "Təhqir jurnalı",
"abusefilter-intro": "Təhqir süzgəcinin idarəetmə səhifəsinə xoş gəlmisiniz.\nTəhqir süzgəci istifadəçilərin fəaliyyətinə avtomatik evristika tətbiq edən avtomatlaşdırılmış proqram mexanizmidir.\nBurada bütün süzgəclərin siyahısı verilib və onların dəyişdirilməsi mümkündür.",
- "abusefilter-mustbeeditor": "Təhlükəsizliyin qorunması məqsədilə bu interfeysi yalnız təhqir süzgəclərini dəyişdirmək hüququ olan istifadəçilər istifadə edə bilərlər.",
"abusefilter-warning": "'''Diqqət'''. Bu fəaliyyət avtomatik olaraq zərərli fəaliyyət kimi təyin olunmuşdur.\nQeyri-konstruktiv dəyişikliklər tezliklə ləğv ediləcək,\nkobud və ya təkrarlanan qeyri-konstruktiv düzəlişlər sizin hesabınızın və ya IP ünvanınızın bloklanmasına gətirib çıxara bilər.\nƏgər siz bunun konstruktiv düzəliş olduğuna əminsinizsə, onda bir daha təsdiq edin.\nFəaliyyətinizə müvafiq olan qaydaların qısa təsviri: $1",
"abusefilter-disallowed": "Bu fəaliyyət avtomatik olaraq zərərli fəaliyyət kimi təyin olunmuş və buna görə də qəbul edilməmişdir.\nƏgər siz öz düzəlişinizin konstruktiv olduğuna əminsinizsə, zəhmət olmasa, nə etmək istədiyinizi idarəçilərdən birinə izah edin.\nFəaliyyətinizə müvafiq olan qaydaların qısa təsviri: $1",
"abusefilter-autopromote-blocked": "Bu fəaliyyət avtomatik olaraq zərərli fəaliyyət kimi təyin olunmuş və qəbul edilməmişdir.\nBundan əlavə, təhlükəsizlik məqsədilə, adətən qeydə alınmış istifadəçi hesablarına verilən bəzi imkanlar sizin istifadəçi hesabınızda məhdudlaşdırılmışdır.\nFəaliyyətinizə müvafiq olan qaydaların qısa təsviri: $1",
@@ -47,14 +46,14 @@
"abusefilter-log-summary": "Bu jurnalda süzgəclər tərəfindən müəyyən olunmuş bütün fəaliyyətlər təsvir olunub.",
"abusefilter-log-search": "Təhqir jurnalında axtarış",
"abusefilter-log-search-user": "İstifadəçi:",
- "abusefilter-log-search-filter": "ID süzgəci:",
+ "abusefilter-log-search-filter": "Süzgəc nömrələri (şaquli xətlərlə ayrılır):",
"abusefilter-log-search-title": "Başlıq:",
"abusefilter-log-search-submit": "Axtar",
- "abusefilter-log-entry": "$1: $2 $4 səhifəsində \"$3\" fəaliyyətini yerinə yetirməklə təhqir süzgəcini işə salıb.\nGörülmüş tədbirlər: $5\nSüzgəcin təsviri: $6",
- "abusefilter-log-entry-withdiff": "$1: $2 $4 səhifəsində \"$3\" fəaliyyətini yerinə yetirməklə təhqir süzgəcini işə salıb.\nGörülmüş tədbirlər: $5 \nSüzgəcin təsviri: $6 ($7)",
- "abusefilter-log-detailedentry-meta": "$1: $2 $5 səhifəsində \"$4\" fəaliyyətini yerinə yetirməklə $3 süzgəcini işə salıb.\nGörülmüş tədbirlər: $6 \nSüzgəcin təsviri: $7 ($8)",
+ "abusefilter-log-entry": "$1: $2 $4 səhifəsində \"$3\" fəaliyyətini {{GENDER:$8|yerinə yetirməklə}} təhqir süzgəcini işə salıb.\nGörülmüş tədbirlər: $5; \nSüzgəcin təsviri: $6",
+ "abusefilter-log-entry-withdiff": "$1: $2 $4 səhifəsində \"$3\" fəaliyyətini {{GENDER:$8|yerinə yetirməklə}} təhqir süzgəcini işə salıb.\nGörülmüş tədbirlər: $5; \nSüzgəcin təsviri: $6 ($7)",
+ "abusefilter-log-detailedentry-meta": "$1: $2 $5 səhifəsində \"$4\" fəaliyyətini yerinə yetirməklə $3 {{GENDER:$9|işə salıb}}.\nGörülmüş tədbirlər: $6; \nSüzgəcin təsviri: $7 ($8)",
"abusefilter-log-detailedentry-global": "$1 qlobal süzgəci",
- "abusefilter-log-detailedentry-local": "$1 süzgəci",
+ "abusefilter-log-detailedentry-local": "$1 nömrəli süzgəci",
"abusefilter-log-detailslink": "ətraflı",
"abusefilter-log-hidelink": "görünməni tənzimlə",
"abusefilter-log-details-legend": "$1 nömrəli jurnaldakı qeydlərin detalları",
@@ -74,11 +73,9 @@
"abusefilter-log-hide-hidden": "Bu qeydə ictimai şəkildə baxılmanı əngəllə",
"abusefilter-log-hide-reason": "Səbəb:",
"abusefilter-log-hide-forbidden": "Təhqir jurnalındakı qeydləri gizlətmək hüququnuz yoxdur.",
- "abusefilter-logentry-suppress": "\"[[$1]]\" gizlət",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\" göstər",
"abusefilter-management": "Təhqir süzgəclərinin idarə olunması",
"abusefilter-list": "Bütün süzgəclər",
- "abusefilter-list-id": "ID süzgəci:",
+ "abusefilter-list-id": "Süzgəc nömrəsi",
"abusefilter-list-status": "Status",
"abusefilter-list-public": "İctimai istifadənin təsviri",
"abusefilter-list-consequences": "Nəticələr",
@@ -93,7 +90,7 @@
"abusefilter-enabled": "Qoşulub",
"abusefilter-deleted": "Sil",
"abusefilter-disabled": "Söndürülüb",
- "abusefilter-hitcount": "$1 {{PLURAL:$1|hit|hitlər}}",
+ "abusefilter-hitcount": "$1 dəfə {{PLURAL:$1|işə düşüb}}",
"abusefilter-new": "Yeni süzəc yarat",
"abusefilter-return": "Süzgəclərin idarə olunmasına qayıtmaq",
"abusefilter-status-global": "Qlobal",
@@ -102,7 +99,6 @@
"abusefilter-list-options-deleted-only": "Yalnız silinmiş süzgəcləri göstərin",
"abusefilter-list-options-deleted-hide": "Silinmiş süzgəcləri gizlət",
"abusefilter-list-options-deleted-show": "Silinmiş süzgəcləri göstər",
- "abusefilter-list-options-disabled": "Ayrılmış filtrlər",
"abusefilter-list-options-hidedisabled": "Ayrılmış filtrləri gizlət",
"abusefilter-list-options-submit": "Yenilə",
"abusefilter-tools-expr": "İfadənin yoxlanılması",
@@ -110,24 +106,35 @@
"abusefilter-tools-reautoconfirm-user": "İstifadəçi:",
"abusefilter-tools-reautoconfirm-submit": "Yenidən avtotəsdiqlənmə",
"abusefilter-edit-subtitle": "$1 süzgəcinin redaktəsi",
- "abusefilter-edit-status-label": "Statistikalar:",
+ "abusefilter-edit-status-label": "Statistika:",
"abusefilter-edit-new": "Yeni süzgəc",
"abusefilter-edit-save": "Süzgəci yadda saxla",
- "abusefilter-edit-id": "ID süzgəci:",
+ "abusefilter-edit-id": "Süzgəcin nömrəsi:",
"abusefilter-edit-flags": "Bayraqlar:",
+ "abusefilter-edit-enabled": "Bu süzgəci aktivləşdir",
"abusefilter-edit-deleted": "Silinmiş kimi qeyd et",
+ "abusefilter-edit-hidden": "Bu süzgəcin detallarını adi istifadəçilərdən gizlə",
"abusefilter-edit-rules": "Şərtlər:",
"abusefilter-edit-notes": "Qeydlər:",
- "abusefilter-edit-lastmod": "Son dəyişikliklər süzgəci:",
- "abusefilter-edit-lastmod-text": "$1 tərəfindən $2",
+ "abusefilter-edit-lastmod": "Süzgəcdə son dəyişiklik:",
+ "abusefilter-edit-lastmod-text": "$1 tarixində $2 tərəfindən",
"abusefilter-edit-hitcount": "Filtrin işləməsi:",
+ "abusefilter-edit-consequences": "Uyğungəlmə zamanı yerinə yetirilməli olan fəaliyyət",
+ "abusefilter-edit-action-disallow": "İstifadçinin bu fəaliyyəti icra etməsinin qarşısını alın",
+ "abusefilter-edit-action-blockautopromote": "İstifadəçinin avtotəsdiqlənmiş statusunu ləğv et",
+ "abusefilter-edit-action-block": "İstifadəçini və/və ya IP ünvanı blokla",
"abusefilter-edit-throttle-count": "İcazə verilmiş fəaliyyətlərin sayı:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|saniyə|saniyə}}",
"abusefilter-edit-warn-other": "Digər mesaj",
"abusefilter-edit-warn-actions": "Fəaliyyətlər:",
+ "abusefilter-edit-warn-preview": "Seçilmiş bildirişə ilkin baxış",
+ "abusefilter-edit-warn-edit": "Seçilmiş bildirişi yarat/dəyişdir",
+ "abusefilter-edit-main": "Süzgəcin xüsusiyyətləri",
"abusefilter-edit-done-subtitle": "Filtr düzəldilib",
+ "abusefilter-edit-viewhistory": "Bu süzgəcin tarixçəsinə bax",
"abusefilter-edit-history": "Tarixçə:",
- "abusefilter-edit-tools": "Alətlər",
+ "abusefilter-edit-tools": "Alətlər:",
+ "abusefilter-edit-test-link": "Bu süzgəci son dəyişikliklər üzərində sınaqdan keçir",
+ "abusefilter-edit-export": "Bu süzgəci başqa vikiyə ixrac et",
"abusefilter-edit-builder-group-op-arithmetic": "Riyazi əməliyyatlar",
"abusefilter-edit-builder-op-arithmetic-addition": "Toplama (+)",
"abusefilter-edit-builder-op-arithmetic-subtraction": "Çıxma (-)",
@@ -167,9 +174,9 @@
"abusefilter-edit-builder-vars-oldsize": "Köhnə səhifənin ölçüsü",
"abusefilter-edit-builder-vars-removedlines": "Silinən sətirlər",
"abusefilter-edit-builder-vars-summary": "Düzəlişlərin təsviri",
- "abusefilter-edit-builder-vars-article-id": "Səhifə ID-si",
- "abusefilter-edit-builder-vars-article-ns": "Səhifə adları sahəsi",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Səhifənin tam adı",
+ "abusefilter-edit-builder-vars-page-id": "Səhifənin identifikatoru",
+ "abusefilter-edit-builder-vars-page-ns": "Səhifə adları sahəsi",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Səhifənin tam adı",
"abusefilter-edit-builder-vars-user-editcount": "İstifadəçinin redaktə sayı",
"abusefilter-edit-builder-vars-user-age": "Hesabın yaşı",
"abusefilter-edit-builder-vars-user-name": "Hesabın adı",
diff --git a/AbuseFilter/i18n/azb.json b/AbuseFilter/i18n/azb.json
index 907fab3c..ca60927d 100644
--- a/AbuseFilter/i18n/azb.json
+++ b/AbuseFilter/i18n/azb.json
@@ -15,7 +15,6 @@
"abusefilter": "سوی-ایستیفاده سوزگجی‌نین تنزیملنمه‌سی",
"abuselog": "سوی-ایستیفاده ژورنا‌لی",
"abusefilter-intro": "سوی-ایستیفاده سوزگجی‌نین ایدره اولونماسی صحیفه‌سینه خوش گلمیسینیز.\nسوی-ایستیفاده سوزگجی اؤزونده ایستیفاده‌چی‌لرین فالیتینه آوتوماتیک ائوریستیک تطبیقی مئخانیزمینی عکس ائتدیریر.\nبورادا بوتون سوزگج‌لرین سیاهی‌سی وئریلیب و اونلارین دییشیلمه‌سی مومکون‌دور.",
- "abusefilter-mustbeeditor": "تهلیکه سیزلیگین قورونماسی مقصدیله بو اینتئرفئیسی یالنیز سوی-ایستیفاده سوزگج‌لرینی دییش‌دیرمک حقوقو اولان ایستیفاده‌چی‌لر ایستیفاده ائده بیلرلر.",
"abusefilter-warning": "'دیققت. بو فالیت آوتوماتیک اولا‌راق آرزو اوئدیلمه‌ین کیمی تعیین اولونور.\nکونستروکتیو اولمایان دییشیک‌لیک‌لر تئزلیکله لغو ائدیله‌جک،\nکوبود و یا تکرار کونستروکتیو اولمایان دوزلیش‌لر سیزین حسابینیزین و یا ایپ اونوانینیزین بلوکلانماسینا گتیریب چیخارا بیلر.\nاگر سیز بونون کونستروکتیو دوزلیش اولدوغونا امینسینیزسه، اوندا بیر داها «گؤندر» دویمه‌سینه باسین،\nفالیتینیزه مووافیق اولان قایدا‌لارین قیسا تصویری: $1",
"abusefilter-disallowed": "بو حرکت آوتوماتیک اولا‌راق زررلی اولا‌راق تعیین اولونموش‌دور،\nو بو سببله ایجازه وئریلمیر.\nاگر دئغیشیکلیغینیزین قورولوش‌چو اولدوغونا اینانیرسینیزسا، لطفاً بیر ایداره‌چی ایله علاقه قورون، و نه ائتمه‌یه چالیشدیغینیز حاقیندا معلوماتلان‌دیرین.\nائیلئمینیزین ائشلئشتیغی سوی-ایستیفاده قایداسینین قیسا بیر شرحی: $1",
"abusefilter-blocked-display": "بو حرکت آوتوماتیک اولا‌راق زررلی اولا‌راق تعیین اولونموش‌دور،\nو بونو ائتمه‌نیز اؤنلندی.\nعلاوه اولا‌راق، {{سیتئنامئ}} سایتینی قوروماق اوچون، ایستیفاده‌چی حسابینیز و بوتون علاقه‌دار ایپ اونوان‌لاری دییشیک‌لیک ائتمه‌یه مانعه تؤردیلدی.\nاگر بو بیر سهوله میدانا، لطفاً بیر ایداره‌چی ایله علاقه قورون.\nائیلئمینیزین ائشلئشتیغی سوی-ایستیفاده قایداسینین قیسا بیر شرحی: $1",
@@ -78,8 +77,6 @@
"abusefilter-log-hide-hidden": "بو قئیده اجتماعی شکیلده باخیلمانی انگلله",
"abusefilter-log-hide-reason": "سبب:",
"abusefilter-log-hide-forbidden": "سوی-ایستیفاده ژورنالین‌داکی قئیدلری گیزلتمک هوقوقونوز یوخ‌دور.",
- "abusefilter-logentry-suppress": "\"[[$1]]\" گیزلت",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\" گؤستر",
"logentry-abusefilter-hit": "$1 باعث $4 ، ایش گورمک \" $5 \" در $3 . اقداملار: $6 ( $7 )",
"abusefilter-management": "سوی-ایستیفاده سوزگج‌لری‌نین ایداره اولونماسی",
"abusefilter-list": "بوتون سوزگج‌لر",
@@ -111,7 +108,6 @@
"abusefilter-list-options-scope": "قیلترلری بوردان گؤستر:",
"abusefilter-list-options-scope-local": "یئرلی ویکی",
"abusefilter-list-options-scope-global": "پرینسیپ‌لر",
- "abusefilter-list-options-disabled": "آيریلمیش فیلترلر",
"abusefilter-list-options-hidedisabled": "آيریلمیش فیلترلری گیزلت",
"abusefilter-list-options-submit": "گونجل‌له",
"abusefilter-tools-text": "بونلار، سوی-ایستیفاده فیلترلرینی دوستورا ائدرکن و سهو آيیرد ائدرکن فايدالی اولا بیله‌جک .",
@@ -130,7 +126,6 @@
"abusefilter-edit-status-label": "ایستاتیستیکا‌لار:",
"abusefilter-edit-status": "سون 1$ {{جمع: $1 | ائیلئمدئ | ائیلئمدئ}} بو فیلترئیلئ ائشلئشئن $2 ($3%).",
"abusefilter-edit-status-profile": "سون 1$ {{جمع: $1 | ائیلئمدئ | ائیلئمدئ}} بو فیلترئیلئ ائشلئشئن $2 ($3%).\nاورتالامادا، ایش واختی $4مس، و کوشول سینیرینین $5 کوشولونو توکئتیور.",
- "abusefilter-edit-throttled": "' 'دیققت: بو فیلترئ بیر گووئن‌لیک تئدبیری اولا‌راق اوتوماتیکمان جیرجویت قئیری بیراکیلدی.\nائیلئملئرین% $ 1یندئن چوخ ائشلئشمئ سینیرینا ائریشتی.",
"abusefilter-edit-new": "یئنی سوزگج",
"abusefilter-edit-save": "سوزگجی یاددا ساخلا",
"abusefilter-edit-id": "آی-دی سوزگجی:",
@@ -149,7 +144,6 @@
"abusefilter-edit-consequences": "ائشلئشتیغیندئ حرکت‌لر ائدیلیر",
"abusefilter-edit-action-warn": "ایستیفاده‌چییه بیر خبردارلیق وئردیک‌دن سونرا بو حرکت‌لری تئتیکلئ",
"abusefilter-edit-action-disallow": "ایستیفاده‌چی‌نین، سوال‌داکی حرکتی ائتمه‌سینی مانعه",
- "abusefilter-edit-action-flag": "دییشیک‌لیگی سوی-ایستیفاده گوندلیگینده ایشاره‌له",
"abusefilter-edit-action-blockautopromote": "ایستیفاده‌چی‌نین آوتوماتیک تسدیق ائدیلمیش دورمونو گئری آل",
"abusefilter-edit-action-degroup": "ایستیفادچینی بوتون ایمتیازلی گروه لاردان چیخار",
"abusefilter-edit-action-block": "ایستیفادچینی و / و یا ایپ اونوانینی دییشیک‌لیک ائتمه‌یه مانعه",
@@ -158,7 +152,6 @@
"abusefilter-edit-action-tag": "İrəlidə gözdən keçirmə üçün dəyişikliyi etiketlə.",
"abusefilter-edit-throttle-count": "ایجازه وئریلمیش فالیت‌لرین سایی:",
"abusefilter-edit-throttle-period": "زامان پئریودو:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|ثانیه|ثانیه}}",
"abusefilter-edit-throttle-groups": "قروپ حیسه‌یه ائدن:\n:' (هر سطره بیر دنه، وئرگولله بیرلش‌دیرین)'",
"abusefilter-edit-warn-message": "خبردارلیق اوچون ایستیفاده ائدیلن سیستئم مئساژی:",
"abusefilter-edit-warn-other": "دیگر مئساژ",
@@ -242,19 +235,18 @@
"abusefilter-edit-builder-vars-oldsize": "کؤهنه صحیفه‌نین اؤلچوسو",
"abusefilter-edit-builder-vars-removedlines": "سیلینن سطرلر",
"abusefilter-edit-builder-vars-summary": "دوزلیش‌لرین تصویری",
- "abusefilter-edit-builder-vars-article-id": "صفحه آی‌دی-سی",
- "abusefilter-edit-builder-vars-article-ns": "صحیفه آدلاری ساحه‌سی",
- "abusefilter-edit-builder-vars-article-text": "صحیفه باش‌لیغی (آد ساحه‌سی اولما‌دان)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "صحیفه‌نین تام آدی",
- "abusefilter-edit-builder-vars-article-views": "صفحه دن گؤروشلر",
+ "abusefilter-edit-builder-vars-page-id": "صفحه آی‌دی-سی",
+ "abusefilter-edit-builder-vars-page-ns": "صحیفه آدلاری ساحه‌سی",
+ "abusefilter-edit-builder-vars-page-title": "صحیفه باش‌لیغی (آد ساحه‌سی اولما‌دان)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "صحیفه‌نین تام آدی",
"abusefilter-edit-builder-vars-movedfrom-id": "قایناق داشیما صحیفه‌سی‌نین صحیفه ایدسی",
"abusefilter-edit-builder-vars-movedfrom-ns": "قایناق داشیما صحیفه‌سی‌نین آد ساحه‌سی",
- "abusefilter-edit-builder-vars-movedfrom-text": "قایناق داشیما صحیفه‌سی باش‌لیغی",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "قایناق داشیما صحیفه‌ نین تام باش‌لیغی",
+ "abusefilter-edit-builder-vars-movedfrom-title": "قایناق داشیما صحیفه‌سی باش‌لیغی",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "قایناق داشیما صحیفه‌ نین تام باش‌لیغی",
"abusefilter-edit-builder-vars-movedto-id": "هدف داشیما صحیفه‌سی‌نین صحیفه ایدسی",
"abusefilter-edit-builder-vars-movedto-ns": "هدف داشیما صحیفه‌سی‌نین آد ساحه‌سی",
- "abusefilter-edit-builder-vars-movedto-text": "هدف داشیما صحیفه‌سی‌نین باش‌لیغی",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "هدف داشیما صحیفه‌سی‌نین تام باش‌لیغی",
+ "abusefilter-edit-builder-vars-movedto-title": "هدف داشیما صحیفه‌سی‌نین باش‌لیغی",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "هدف داشیما صحیفه‌سی‌نین تام باش‌لیغی",
"abusefilter-edit-builder-vars-user-editcount": "ایشلدنین دییشدیرمه سایی‌سی",
"abusefilter-edit-builder-vars-user-age": "حسابین یاشی",
"abusefilter-edit-builder-vars-user-name": "حسابین آدی",
@@ -314,7 +306,7 @@
"abusefilter-exception-regexfailure": "\"$ 3\" نیزام‌لی ایفاده‌سی‌نین $ 1 کاراکتئرینده سهو: \"$ 2\"",
"abusefilter-exception-overridebuiltin": "$ 1 کاراکتئرینده \"$ 2\" مسکون دئغیشکئنی‌نین کورالدیشی اعتبارسیز قیلینماسی.",
"abusefilter-exception-outofbounds": "$1 کاراکتئرین‌دکی مؤوجود اولمایان سیاهی ائلئمئنتی $2 (سیاهی اؤلچوسو = $3) ایستنیر.",
- "abusefilter-exception-notlist": "$ 1 کاراکتئرینده دیزی اولمایان دیزی ائلئمئنتی ایستنیر.",
+ "abusefilter-exception-notarray": "$ 1 کاراکتئرینده دیزی اولمایان دیزی ائلئمئنتی ایستنیر.",
"abusefilter-action-tag": "نیشان",
"abusefilter-action-throttle": "سوروشمه",
"abusefilter-action-warn": "خبردارلیق",
@@ -374,7 +366,6 @@
"abusefilter-topnav-import": "فیلتر ایدخا‌لی",
"abusefilter-log-name": "خارابکارلیق فیلتری ژورنالی",
"abusefilter-log-header": "بو ژورنال، فیلترلر دییشیک‌لیک‌لرین بیر قیساسینی گؤستریر.\nبوتون ایطلاعات اوچون، سون فیلتر دییشیک‌لیک‌لری [[Special:AbuseFilter/history|لیستینه]] باخین.",
- "abusefilter-log-entry-modify": "دییشدیردی $1 ($2)",
"abusefilter-log-noresults": "نتیجه یوخ‌دور",
"abusefilter-diff-title": "نسخه لر آراسین‌داکی فرق‌لر",
"abusefilter-diff-item": "آیتم",
diff --git a/AbuseFilter/i18n/ba.json b/AbuseFilter/i18n/ba.json
index 6a85093e..588453fd 100644
--- a/AbuseFilter/i18n/ba.json
+++ b/AbuseFilter/i18n/ba.json
@@ -18,7 +18,6 @@
"abusefilter": "Урынһыҙ файҙаланыуҙар һөҙгөсөн көйләү",
"abuselog": "Урынһыҙ файҙаланыуҙар яҙмалары журналы",
"abusefilter-intro": "Урынһыҙ файҙаланыуҙар һөҙгөсөн көйләү битенә рәхим итегеҙ!\nУрынһыҙ файҙаланыуҙар һөҙгөсө ҡатнашыусыларҙың ҡулланыуына яраҡлаштырылған автоматик механизм булып тора. Исемлектә бөтә ҡуйылған һөҙгөстәр күрһәтелгән, һәм уларҙы уҙгәртеү мөмкинлеге бирелгән.",
- "abusefilter-mustbeeditor": "Хәүефһеҙлек маҡсаттарында был интерфейсты урынһыҙ файҙаланыуҙар һөҙгөсөн үҙгәртеү хоҡуғы булған ҡатнашыусылар ғына үҙгәртә ала.",
"abusefilter-warning": "'''Иғтибар!''' Был ғәмәл автоматик рәүештә зыянлы тип билдәләнде. Эшлекһеҙ ғәмәлдәр тиҙ арала юйыласаҡ, тупаҫ төҙәтеүҙәр һәм ҡабатланған эшлекһеҙ төҙәтеүҙәр һеҙҙең иҫәп яҙмағыҙ йәки IP-адресығыҙ бикләнеүгә килтерәсәк.\nӘгәр был төҙәтеү эшлекле тип уйлаһағыҙ, ебәреү йә һаҡлау төймәһенә тағы баҫығыҙ.\nҺеҙҙең ғәмәлегеҙҙе зыянлы тип билдәләүсе ҡағиҙәнең ҡыҫҡаса тасуирламаһы: $1",
"abusefilter-disallowed": "Был ғәмәл автоматик рәүештә зыянлы тип билдәләнде, шуға күрә рөхсәт ителмәй.\nӘгәр был төҙәтеү эшлекле тип уйлаһағыҙ, хакимгә мөрәжәғәт итегеҙ һәм нимә эшләргә тырышҡанығыҙҙы аңлатығыҙ.\nҺеҙҙең ғәмәлегеҙҙе зыянлы тип билдәләүсе ҡағиҙәнең ҡыҫҡаса тасуирламаһы: $1.",
"abusefilter-blocked-display": "Был ғәмәл автоматик рәүештә зыянлы тип билдәләнде, шуға күрә уны башҡарыу тыйылды.\nБынан тыш, {{SITENAME}} проектының именлеген һаҡлау өсөн, һеҙҙең иҫәп яҙмағыҙ һәм уға бәйле IP-адрестар бикләнде.\nӘгәр был хата буйынса килеп сыҡҡан, тип һанаһағыҙ, хакимгә мөрәжәғәт итегеҙ.\nҺеҙҙең ғәмәлегеҙҙе зыянлы тип билдәләүсе ҡағиҙәнең ҡыҫҡаса тасуирламаһы: $1.",
@@ -84,8 +83,6 @@
"abusefilter-log-hide-hidden": "Был яҙманы дөйөм ҡарауҙан йәшерергә",
"abusefilter-log-hide-reason": "Сәбәп:",
"abusefilter-log-hide-forbidden": "Һеҙҙең урынһыҙ файҙаланыуҙар яҙмалары журналындағы яҙмаларҙы йәшереү хоҡуғығыҙ юҡ.",
- "abusefilter-logentry-suppress": "\"[[$1]]\" яҙмаһын йәшерергә",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\" яҙмаһын күрһәтергә",
"logentry-abusefilter-hit": "$1 ҡулланыусыһы $3 битендә \"$5\" ғәмәлен эшләп $4 фильтрын хәрәкәткә килтерҙе. Башҡарылған хәрәкәт: $6 ($7)",
"abusefilter-management": "Урынһыҙ файҙаланыуҙар һөҙгөсө менән идара итеү",
"abusefilter-list": "Бар һөҙгөстәр",
@@ -118,7 +115,6 @@
"abusefilter-list-options-scope-local": "Бары тик урындағы ҡағиҙәләр",
"abusefilter-list-options-scope-global": "Бары тик глобаль ҡағиҙәләр",
"abusefilter-list-options-scope-all": "Урындағы һәм глобаль ҡағиҙәләр",
- "abusefilter-list-options-disabled": "Ябылған һөҙгөстәр:",
"abusefilter-list-options-hidedisabled": "Ябылған һөҙгөстәрҙе йәшерергә",
"abusefilter-list-options-submit": "Яңыртырға",
"abusefilter-tools-text": "Бында урынһыҙ файҙаланыуҙар һөҙгөсөн билдәләүҙә һәм төҙәтеүҙә файҙалы булырлыҡ ҡайһы бер ҡоралдар урынлашҡан.",
@@ -138,7 +134,6 @@
"abusefilter-edit-status-label": "Статистика:",
"abusefilter-edit-status": " {{PLURAL:$1|һуңғы $1 ғәмәленән|һуңғы $1 ғәмәлдәренән}} был фильтр $2-гә ($3%) тап килә.",
"abusefilter-edit-status-profile": "Һуңғы $1 {{PLURAL:$1|1=ғәмәлдән}} был һөҙгөс $2 ғәмәл менән ($3%) тап килә.\nУның уртаса башҡарылыу ваҡыты — $4 мс, ул сикләү шартынан $5 {{PLURAL:$5|шарт}} ҡуллана.",
- "abusefilter-edit-throttled": "'''Иҫкәрмә''': Был һөҙгөс һаҡлыҡ маҡсаттарында үҙенән-үҙе һүндерелде.\nУның тап килеү һаны — $1% ғәмәлдән күберәк — билдәләнгән сиктән ашты.",
"abusefilter-edit-new": "Яңы һөҙгөс",
"abusefilter-edit-save": "Һөҙгөстө һаҡларға",
"abusefilter-edit-id": "Һөҙгөс идентификаторы:",
@@ -165,7 +160,6 @@
"abusefilter-edit-action-tag": "Үҙгәртеүҙе артабанғы тикшереү өсөн билдәләргә",
"abusefilter-edit-throttle-count": "Рөхсәт ителгән ғәмәлдәр һаны:",
"abusefilter-edit-throttle-period": "Ваҡыт арауығы:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|1=секунд|секунд}}",
"abusefilter-edit-throttle-groups": "Группалар буйынса тарайтыу:\n:''(һәр юлға берҙе, өтөрҙәр менән айырырға)''",
"abusefilter-edit-warn-message": "Иҫкәрмә өсөн ҡулланылған система хәбәре:",
"abusefilter-edit-warn-other": "Башҡа хәбәр",
@@ -252,19 +246,18 @@
"abusefilter-edit-builder-vars-oldsize": "Биттең элекке күләме",
"abusefilter-edit-builder-vars-removedlines": "Үҙгәртеүҙә юйылған юлдар",
"abusefilter-edit-builder-vars-summary": "Үҙгәртеүҙең тасуирламаһы/сәбәбе",
- "abusefilter-edit-builder-vars-article-id": "Биттең идентификаторы",
- "abusefilter-edit-builder-vars-article-ns": "Биттең исемдәр арауығы",
- "abusefilter-edit-builder-vars-article-text": "Биттең исеме (исемдәр арауыҡһыҙ)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Биттең тулы исеме",
- "abusefilter-edit-builder-vars-article-views": "Биттәрҙе байҡау",
+ "abusefilter-edit-builder-vars-page-id": "Биттең идентификаторы",
+ "abusefilter-edit-builder-vars-page-ns": "Биттең исемдәр арауығы",
+ "abusefilter-edit-builder-vars-page-title": "Биттең исеме (исемдәр арауыҡһыҙ)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Биттең тулы исеме",
"abusefilter-edit-builder-vars-movedfrom-id": "Исеме үҙгәртелә торған биттең идентификаторы",
"abusefilter-edit-builder-vars-movedfrom-ns": "Исеме үҙгәртелә торған биттең исемдәр арауығы",
- "abusefilter-edit-builder-vars-movedfrom-text": "Исеме үҙгәртелә торған биттең исеме",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Исеме үҙгәртелә торған биттең тулы исеме",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Исеме үҙгәртелә торған биттең исеме",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Исеме үҙгәртелә торған биттең тулы исеме",
"abusefilter-edit-builder-vars-movedto-id": "Исеме үҙгәртелгән биттең идентификаторы",
"abusefilter-edit-builder-vars-movedto-ns": "Исеме үҙгәртелгән биттең исемдәр арауығы",
- "abusefilter-edit-builder-vars-movedto-text": "Исеме үҙгәртелгән биттең исеме",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Исеме үҙгәртелгән биттең тулы исеме",
+ "abusefilter-edit-builder-vars-movedto-title": "Исеме үҙгәртелгән биттең исеме",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Исеме үҙгәртелгән биттең тулы исеме",
"abusefilter-edit-builder-vars-user-editcount": "Ҡатнашыусының үҙгәртеүҙәр һаны",
"abusefilter-edit-builder-vars-user-age": "Иҫәп яҙмаһының йәше",
"abusefilter-edit-builder-vars-user-name": "Иҫәп яҙмаһының исеме",
@@ -329,7 +322,7 @@
"abusefilter-exception-regexfailure": "$1 урында \"$3\" регуляр аңлатмаһында хата: \"$2\"",
"abusefilter-exception-overridebuiltin": "$1 урында $2 индерелгән үҙгәреүсән дәүмәленең өҫтөнә яҙҙырылыуы хатаһы.",
"abusefilter-exception-outofbounds": "$1 урында исемлектә булмаған $2 есемен һорау (исемлектең күләме = $3).",
- "abusefilter-exception-notlist": "$1 урында исемлек булмаған есемдән исемлек есемен һорау.",
+ "abusefilter-exception-notarray": "$1 урында исемлек булмаған есемдән исемлек есемен һорау.",
"abusefilter-action-tag": "Билдә",
"abusefilter-action-throttle": "Тарайтырға",
"abusefilter-action-warn": "Киҫәтергә",
@@ -403,12 +396,5 @@
"abusefilter-import-intro": "Һеҙ был интерфейсты башҡа вики проекттарҙан Һөҙгөстәрҙе индереү өсөн ҡуллана алаһығыҙ.\nСығанаҡ вики проектта, мөхәррирләү ҡоралының \"{{int:abusefilter-edit-tools}}\" бүлегендә \"{{int:abusefilter-edit-export}}\" төймәһенә баҫығыҙ.\nКилеп сыҡҡан юлдың эстәлеген был юлға күсерегеҙ һәм \"{{int:abusefilter-import-submit}}\" төймәһенә баҫығыҙ.",
"abusefilter-import-submit": "Мәғлүмәтте индерергә",
"abusefilter-group-default": "Ғәҙәттәге",
- "abusefilter-http-error": "HTTP хата килеп сыҡты: $1",
- "apihelp-abusefilterchecksyntax-description": "AbuseFilter фильтры синтаксисын тикшереү",
- "apihelp-abusefilterunblockautopromote-param-user": "Һеҙ блокировкаһын алырға теләгән ҡатнашыусының исеме (логин).",
- "apihelp-query+abusefilters-param-prop": "Ниндәй үҙенсәлекте мотлаҡ алырға:",
- "apihelp-query+abuselog-param-limit": "Исемлектәге яҙмаларҙың иң ҙур күләме.",
- "apihelp-query+abuselog-param-prop": "Ниндәй үҙенсәлектәрҙе мотлаҡ алырға:",
- "apihelp-query+abuselog-example-1": "Журналдағы һуңғы яҙмаларҙы күрһәтергә",
- "apihelp-query+abuselog-example-2": " [[API]] журналындағы һуңғы яҙманы күрһәтергә"
+ "abusefilter-http-error": "HTTP хата килеп сыҡты: $1"
}
diff --git a/AbuseFilter/i18n/bar.json b/AbuseFilter/i18n/bar.json
index d8ad737c..a6067ca4 100644
--- a/AbuseFilter/i18n/bar.json
+++ b/AbuseFilter/i18n/bar.json
@@ -8,7 +8,6 @@
"abusefilter": "Missbrauchsfüter-Eihstöungen",
"abuselog": "Missbrauchsfüter-Lógbiaché",
"abusefilter-intro": "Griass Enk auf da Missbrauchsfüterter-Management-Ówerflächen.\nDa Missbrauchsfüter is a autómaatischer Mechanismus, der autómaatische Heiristiken auf olle Änderrungen auhwendt.\nDé Ówerflächen zoagt a Listen voh olle definierden Füter und dalaabts, dé z' vaändern.",
- "abusefilter-mustbeeditor": "Aus Sicherheitsgrynd derffm netter Benutzer mim Recht zur Änderrung voh Missbrauchsfütern dé Schnitstö vawenden.",
"abusefilter-log-search-user": "Benutzer:",
"abusefilter-log-search-title": "Titel:",
"abusefilter-log-search-submit": "Suachen",
diff --git a/AbuseFilter/i18n/bcl.json b/AbuseFilter/i18n/bcl.json
index 328c0cad..fda347f9 100644
--- a/AbuseFilter/i18n/bcl.json
+++ b/AbuseFilter/i18n/bcl.json
@@ -3,14 +3,14 @@
"authors": [
"Filipinayzd",
"Geopoet",
- "Matma Rex"
+ "Matma Rex",
+ "ShimunUfesoj"
]
},
"abusefilter-desc": "Pinapadanay an awtomatikong gana sa boot na mga pagliliwat",
"abusefilter": "Saraan sa abuso nin kasalansanan",
"abuselog": "Talaan nin abuso",
"abusefilter-intro": "Marhay na pag-abot sa olay-panlaog sa manihamento kan Saraan nin Abuso.\nAn Saraan nin Abuso sarong awtomatikong mekanismo nin panuklob na awtomatikong pinag-aaplikar na gana sa boot sa gabos na aksyon.\nIning olay-panlaog minapahiling nin listahan kan pinagpapasabot na mga saraan, asin minatugot na sinda modipikaron.",
- "abusefilter-mustbeeditor": "Para sa panseguridad na mga rason, an mga paragamit sana na igwang karapatan na magmodipikar kan mga saraan nin abuso an makakagamit kaining olay-panlaog.",
"abusefilter-warning": "'''Patanid''': Ining aksyon awtomatikong pinagpamidbid bilang pano nin kadelikaduhan.\nAn bakong konstraktibong mga pagliliwat tulos-tulos na pinagbabalik, asin an bantadan o pauro-otrong pagliliwat na bakong konstraktibo magreresulta sa pagkukubkod kan sadire mong panindog o estada kan IP.\nKun ika nagtutubod na ining aksyon konstraktibo, \nmapuwede mong isumite ini giraray tanganing ikumpirma ini.\nSarong halipoton na deskripsyon kan patakaran nin abuso na an saimong aksyon nainuknó iyo an: $1",
"abusefilter-disallowed": "Ining aksyon awtomatikong pinagpamidbid na pano nin kadelikaduhan, asin kaya dae pinagtutugutan.\nKun ika nagtutubod na an saimong aksyon konstraktibo, pakipasabot sa administrador kun ano an saimong pinagprubaran na gigibohon.\nSarong halipoton na deskripsyon kan patakaran nin abuso na an saimong aksyon nainuknó iyo an: $1",
"abusefilter-blocked-display": "Ining aksyon awtomatikong pinagmidbid na pano nin kadelikaduhan, asin ika pinagpupugulan na papangyarihon ini.\nSa kadagdagan, tanganing protektaran an {{SITENAME}}, an saimong paragamit na panindog asin an gabos na asosyadong IP na mga estada pinagkubkob gikan sa pagliliwat.\nKun ini nangyari sa kasalaan, pakikontak an administrador.\nSarong halipoton na deskripsyon kan patakaran nin abuso na an saimong aksyon naipag-ampad iyo an: $1",
@@ -74,8 +74,6 @@
"abusefilter-log-hide-hidden": "Itago ining entrada sa paghiling kan publiko",
"abusefilter-log-hide-reason": "Rason:",
"abusefilter-log-hide-forbidden": "Ika mayong permiso na magtago kan mga entrada sa talaan nin abuso.",
- "abusefilter-logentry-suppress": "ipinagtago \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "dae ipinagtago \"[[$1]]",
"logentry-abusefilter-hit": "$1 kiniblit an $4, pinaghihimo an aksyon na \"$5\" sa $3. Pinaghimong mga aksyon: $6 ($7)",
"abusefilter-management": "Pagmamaneho kan saraan nin abuso",
"abusefilter-list": "Gabos na mga saraan",
@@ -107,7 +105,6 @@
"abusefilter-list-options-scope": "Ipahiling an mga saraan gikan sa:",
"abusefilter-list-options-scope-local": "Lokal na wiki",
"abusefilter-list-options-scope-global": "Pankinaban na mga patakaran",
- "abusefilter-list-options-disabled": "Pinagpauntok na mga saraan:",
"abusefilter-list-options-hidedisabled": "Itago na pinagpauntok na mga saraan",
"abusefilter-list-options-submit": "Panumpay",
"abusefilter-tools-text": "Uya an ibang mga kagamitan na bilog na magagamit sa pormulasyon asin paghihinguto kan mga saraan nin abuso.",
@@ -127,7 +124,6 @@
"abusefilter-edit-status-label": "Estadistika:",
"abusefilter-edit-status": "Kan nakaaging $1 {{PLURAL:$1|aksyon|mga aksyon}}, ining saraan nakapagtampad sa $2 ($3%).",
"abusefilter-edit-status-profile": "Kan nakaaging $1 {{PLURAL:$1|aksyon|mga aksyon}}, ini saraan nakapag-ampad sa $2 ($3%).\nSa katahawan, an oras nin padalagan $4 ms, asin ini minakonsumo nin $5 {{PLURAL:$5|kondisyon|mga kondisyon}} kan limitasyon sa kondisyon.",
- "abusefilter-edit-throttled": "'''Patanid''': Ining saraan awtomatikong pinagpauntok bilang sarong gamit nin kaligtasan.\nIni nakakaabot sa limit kan ipinag-aampad na sobra $1% kan aksyon.",
"abusefilter-edit-new": "Baguhong saraan",
"abusefilter-edit-save": "Itagama an saraan",
"abusefilter-edit-id": "Pansarà nin ID",
@@ -146,7 +142,6 @@
"abusefilter-edit-consequences": "Nagibong mga aksyon kunsoaring naipag-ampad",
"abusefilter-edit-action-warn": "Makiblit kaining mga aksyon matapos matawanan an paragamit nin sarong patanid",
"abusefilter-edit-action-disallow": "Mapugol sa paragamit na gigibohon an aksyon na pinaghahapot",
- "abusefilter-edit-action-flag": "Ibandera an pagliliwat sa laog kan talaan nin abuso",
"abusefilter-edit-action-blockautopromote": "Minabawi sa estado kan awtomatikong pagkumpirma sa paragamit",
"abusefilter-edit-action-degroup": "Minapahale sa paragamit gikan sa gabos na grupo na igwang pribilihiyo",
"abusefilter-edit-action-block": "Kubkubon and paragamit asin/o IP na estada gikan sa pagliliwat",
@@ -154,16 +149,17 @@
"abusefilter-edit-action-rangeblock": "Kubkubon an /16 gangha gikan sa mga pinaggigikanan nin paragamit",
"abusefilter-edit-action-tag": "I-tag an pagliliwat para sa kadagdagan na pagrepaso",
"abusefilter-edit-throttle-count": "Numero kan mga aksyon na ipapasunod:",
- "abusefilter-edit-throttle-period": "Peryodo nin panahon:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|segundo|mga segundo}}",
+ "abusefilter-edit-throttle-period": "Peryodo nin panahon (kada mga Segundo):",
"abusefilter-edit-throttle-groups": "Pangrupong ngutnol sa paagi nin:\n:''(saro kada linya, ibanhan nin kudlit)''",
+ "abusefilter-edit-throttle-range": "/16 saklaw",
+ "abusefilter-edit-throttle-editcount": "Hirahón an bilang",
"abusefilter-edit-warn-message": "Pansistemang mensahe na gamiton para sa patanid:",
"abusefilter-edit-warn-other": "Iba pang mensahe",
"abusefilter-edit-warn-other-label": "Pangaran nin pahina kan ibang mensahe:\n:''(mayo nin MediaWiki enot-panigmit)''",
"abusefilter-edit-warn-actions": "Mga gibohon:",
"abusefilter-edit-warn-preview": "Tanawon mga pinagpili na mensahe",
"abusefilter-edit-warn-edit": "Muknaon/Liwaton pinagpili na mensahe",
- "abusefilter-edit-tag-tag": "Mga tatak na gamiton (saro kada linya):",
+ "abusefilter-edit-tag-tag": "Mga tatak na gamiton [[Espesyal:Mga tag|Mga tag]]:",
"abusefilter-edit-denied": "Ika dae makakahiling sa mga detalye kaining saraan, nin huli ta ini itinago gikan sa paghiling nin publiko.",
"abusefilter-edit-main": "Mga parametro nin saraan",
"abusefilter-edit-done-subtitle": "An saraan pinagliwat",
@@ -242,19 +238,18 @@
"abusefilter-edit-builder-vars-oldsize": "Lumaong sukol kan pahina",
"abusefilter-edit-builder-vars-removedlines": "Mga linyang pinagharale sa pagliliwat",
"abusefilter-edit-builder-vars-summary": "Sumaryo/rason nin pagliliwat",
- "abusefilter-edit-builder-vars-article-id": "ID kan pahina",
- "abusefilter-edit-builder-vars-article-ns": "Pangarang espasyo kan pahina",
- "abusefilter-edit-builder-vars-article-text": "Titulo kan Pahina (mayong pangarang espasyo)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Titulo kan Kabilogan nin pahina",
- "abusefilter-edit-builder-vars-article-views": "Mga katanawan nin pahina",
+ "abusefilter-edit-builder-vars-page-id": "ID kan pahina",
+ "abusefilter-edit-builder-vars-page-ns": "Pangarang espasyo kan pahina",
+ "abusefilter-edit-builder-vars-page-title": "Titulo kan Pahina (mayong pangarang espasyo)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Titulo kan Kabilogan nin pahina",
"abusefilter-edit-builder-vars-movedfrom-id": "ID kan pahina nin pagbalyo sa ginikanang pahina",
"abusefilter-edit-builder-vars-movedfrom-ns": "Espasyong-pangaran nin pagbalyo kan ginikanan",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titulo kan pagbalyo sa ginikanang pahina",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Kabilogang titulo kan pagbalyo sa ginikanang pahina",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titulo kan pagbalyo sa ginikanang pahina",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Kabilogang titulo kan pagbalyo sa ginikanang pahina",
"abusefilter-edit-builder-vars-movedto-id": "ID kan Pahina nin pagbalyo sa destinasyon kan pahina",
"abusefilter-edit-builder-vars-movedto-ns": "Espasyong-pangaran kan pagbalyo sa pahina nin destinasyon",
- "abusefilter-edit-builder-vars-movedto-text": "Titulo kan pagbalyong destinasyon nin pahina",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Kabilogang titulo kan pagbalyo sa pahina nin destinasyon",
+ "abusefilter-edit-builder-vars-movedto-title": "Titulo kan pagbalyong destinasyon nin pahina",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Kabilogang titulo kan pagbalyo sa pahina nin destinasyon",
"abusefilter-edit-builder-vars-user-editcount": "Bilang nin pagliwat kan paragamit",
"abusefilter-edit-builder-vars-user-age": "Edad kan panindog nin paragamit",
"abusefilter-edit-builder-vars-user-name": "Pangaran kan panindog nin paragamit",
@@ -314,7 +309,7 @@
"abusefilter-exception-regexfailure": "Kasalaan sa regular na ekspresyon na \"$3\" sa panggurit na $1:\"$2\"",
"abusefilter-exception-overridebuiltin": "Iligal na pagsasalambaw kan nakasuknat na kapilyangan \"$2\" sa panggurit na $1.",
"abusefilter-exception-outofbounds": "Naghahagad kan dae pa nakamuknang lista nin aytem na $2 (listang sukol = $3) sa panggurit na $1.",
- "abusefilter-exception-notlist": "Naghahagad palangkay nin aytem kan bakong palangkay sa panggurit na $1.",
+ "abusefilter-exception-notarray": "Naghahagad palangkay nin aytem kan bakong palangkay sa panggurit na $1.",
"abusefilter-action-tag": "Tatak",
"abusefilter-action-throttle": "Pangutnol",
"abusefilter-action-warn": "Tanid",
@@ -374,7 +369,6 @@
"abusefilter-topnav-import": "Importaron an saraan",
"abusefilter-log-name": "Katalaanan kan Saraan nin Abuso",
"abusefilter-log-header": "Ining katalaanan nagpapatanaw nin sarong sumaryo nin mga kaliwatan na hinimo sa mga saraan.\nPara sa kabilogang detalye, hilngon an [[Special:AbuseFilter/history|an listahan]] kan pinakahurihan na kaliwatan nin saraan.",
- "abusefilter-log-entry-modify": "Pinagbago an $1 ($2)",
"abusefilter-log-noresults": "Mayo nin mga resulta",
"abusefilter-diff-title": "Mga kalaenan sa tahaw kan mga bersyon",
"abusefilter-diff-item": "Aytem",
diff --git a/AbuseFilter/i18n/be-tarask.json b/AbuseFilter/i18n/be-tarask.json
index cd8feeff..a57256c8 100644
--- a/AbuseFilter/i18n/be-tarask.json
+++ b/AbuseFilter/i18n/be-tarask.json
@@ -8,14 +8,14 @@
"Renessaince",
"Wizardist",
"Zedlik",
- "Matma Rex"
+ "Matma Rex",
+ "Artsiom91"
]
},
"abusefilter-desc": "Прыстасоўвае аўтаматычную эўрыстыку да рэдагаваньняў.",
"abusefilter": "Канфігурацыя фільтру злоўжываньняў",
"abuselog": "Журнал злоўжываньняў",
"abusefilter-intro": "Сардэчна запрашаем на старонку кіраваньня фільтрам злоўжываньняў.\nФільтар злоўжываньняў — аўтаматычны праграмны мэханізм ўжываньня аўтаматычных эўрыстык для ўсіх дзеяньняў.\nІнтэрфэйс паказвае сьпіс усталяваных фільтраў і дае магчымасьць іх зьмены.",
- "abusefilter-mustbeeditor": "Зь меркаваньняў бясьпекі гэтым інтэрфэйсам могуць карыстацца толькі ўдзельнікі, якія маюць права зьмены фільтраў злоўжываньняў.",
"abusefilter-warning": "'''Увага''': гэтае дзеяньне будзе аўтаматычна лічыцца шкодным.\nНеканструктыўныя дзеяньні будуць скасаваныя,\nа значныя ці неаднаразовыя неканструктыўныя рэдагаваньні прывядуць да блякаваньня вашага рахунку ці кампутара.\nКалі вы лічыце гэтае дзеяньне канструктыўным, вам неабходна пацьвердзіць яго яшчэ раз.\nКароткі сьпіс злоўжываньняў, зь якімі суадносіцца вашае дзеяньне: $1",
"abusefilter-disallowed": "Гэтае дзеяньне было аўтаматычна ідэнтыфікаванае як шкоднае і таму было забароненае.\nКалі Вы ўпэўненыя, што гэта карыснае рэдагаваньне, калі ласка, зьвяжыцеся з адміністратарам і растлумачце яму, што Вы спрабуеце зрабіць.\nКароткае апісаньне шкоды, зь якой супала Вашае дзеяньне: $1",
"abusefilter-blocked-display": "Гэтае дзеяньне было аўтаматычна ідэнтыфікаванае як шкоднае і Вам было забароненае яго выкананьне.\nАкрамя гэтага, у мэтах абароны {{GRAMMAR:родны|{{SITENAME}}}}, Ваш рахунак і ўсе зьвязаныя зь ім ІР-адрасы былі заблякаваныя.\nКалі гэта адбылася памылкова, калі ласка, зьвяжыцеся з адміністратарам.\nКароткае апісаньне шкоды, зь якой супала Вашае дзеяньне: $1",
@@ -65,7 +65,7 @@
"abusefilter-log-details-var": "Зьменная",
"abusefilter-log-details-val": "Значэньне",
"abusefilter-log-details-vars": "Парамэтры дзеяньня",
- "abusefilter-log-details-private": "Прыватныя зьвесткі",
+ "abusefilter-log-details-private": "Дэталі прыватнага журналу",
"abusefilter-log-details-ip": "Выходны ІР-адрас",
"abusefilter-log-noactions": "няма",
"abusefilter-log-details-diff": "Зьмены, зробленыя ў рэдагаваньні",
@@ -81,8 +81,6 @@
"abusefilter-log-hide-hidden": "Схаваць гэты запіс ад публічнага прагляду",
"abusefilter-log-hide-reason": "Прычына:",
"abusefilter-log-hide-forbidden": "Вы ня маеце права хаваць запісы\nў журнале злоўжываньняў.",
- "abusefilter-logentry-suppress": "схаваў «[[$1]]»",
- "abusefilter-logentry-unsuppress": "паказаў «[[$1]]»",
"logentry-abusefilter-hit": "$1 {{#GENDER:$2|выклікаў|выклікала}} спрацоўваньне фільтру $4 пры выкананьні дзеяньня «$5» на старонцы $3. Прынятыя меры: $6 ($7)",
"abusefilter-management": "Кіраваньне фільтрам злоўжываньняў",
"abusefilter-list": "Усе фільтры",
@@ -114,7 +112,6 @@
"abusefilter-list-options-scope": "Паказаць фільтры:",
"abusefilter-list-options-scope-local": "Толькі лякальныя правілы",
"abusefilter-list-options-scope-global": "Толькі глябальныя правілы",
- "abusefilter-list-options-disabled": "Выключаныя фільтры:",
"abusefilter-list-options-hidedisabled": "Схаваць выключаныя фільтры",
"abusefilter-list-options-submit": "Абнавіць",
"abusefilter-tools-text": "Тут знаходзяцца інструмэнты, якія могуць быць карыснымі ў фармуляваньні і праверцы фільтраў злоўжываньняў.",
@@ -134,7 +131,6 @@
"abusefilter-edit-status-label": "Статыстыка:",
"abusefilter-edit-status": "З $1 {{PLURAL:$1|апошняга дзеяньня|апошніх дзеяньняў}} $2 ($3%) {{PLURAL:$2|адпавядала гэтаму фільтру|адпавядалі гэтаму фільтру}}.",
"abusefilter-edit-status-profile": "З $1 {{PLURAL:$1|апошняга дзеяньня|апошніх дзеяньняў}} $2 ($3%) {{PLURAL:$2|адпавядала гэтаму фільтру|адпавядалі гэтаму фільтру}}.\nУ сярэднім, выкананьне фільтру працягвалася $4 мс і выкарыстоўвала $5 {{PLURAL:$5|умову|умовы|умоваў}} зь ліміту ўмоваў.",
- "abusefilter-edit-throttled": "'''Папярэджаньне''': Гэты фільтар быў аўтаматычна выключаны ў мэтах бясьпекі.\nБыў дасягнуты ліміт адпаведнасьцяў на ўзроўні болей за $1% дзеяньняў.",
"abusefilter-edit-new": "Новы фільтар",
"abusefilter-edit-save": "Захаваць фільтар",
"abusefilter-edit-id": "Ідэнтыфікатар фільтру:",
@@ -157,19 +153,18 @@
"abusefilter-edit-action-degroup": "Выдаліць удзельніка з усіх прывілеяваных групаў",
"abusefilter-edit-action-block": "Заблякаваць удзельніка і/ці ІР-адрас",
"abusefilter-edit-action-throttle": "Выконваць дзеяньні, толькі калі ўдзельнік перайшоў дапушчальны ўзровень",
- "abusefilter-edit-action-rangeblock": "Заблякаваць дыяпазон /16 IP-адрасоў, зь якога працуе ўдзельнік.",
+ "abusefilter-edit-action-rangeblock": "Заблякаваць адпаведны IP-дыяпазон, зь якога працуе ўдзельнік",
"abusefilter-edit-action-tag": "Пазначыць рэдагаваньне для далейшай праверкі.",
"abusefilter-edit-throttle-count": "Колькасьць дазволеных дзеяньняў:",
- "abusefilter-edit-throttle-period": "Пэрыяд часу:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|сэкунда|сэкунды|сэкундаў}}",
- "abusefilter-edit-throttle-groups": "Звужэньне па групах:\n:''(па адным на радку, падзяляць коскамі)''",
+ "abusefilter-edit-throttle-period": "Пэрыяд часу (у сэкундах):",
+ "abusefilter-edit-throttle-groups": "Звужэньне па групах:",
"abusefilter-edit-warn-message": "Сыстэмнае паведамленьне для папярэджаньня:",
"abusefilter-edit-warn-other": "Іншае паведамленьне",
- "abusefilter-edit-warn-other-label": "Назва старонкі іншага паведамленьня:\n:''(без прасторы назваў MediaWiki)''",
+ "abusefilter-edit-warn-other-label": "Назва старонкі іншага паведамленьня:\n:''(бяз прэфіксу «MediaWiki:»)''",
"abusefilter-edit-warn-actions": "Дзеяньні:",
- "abusefilter-edit-warn-preview": "Папярэдні прагляд выбранага паведамленьня",
+ "abusefilter-edit-warn-preview": "Паказаць/схаваць папярэдні прагляд абранага паведамленьня",
"abusefilter-edit-warn-edit": "Стварыць/рэдагаваць выбранае паведамленьне",
- "abusefilter-edit-tag-tag": "Ужываемыя [[Special:Tags|тэгі]] (па адным на радок):",
+ "abusefilter-edit-tag-tag": "Ужываемыя [[Special:Tags|тэгі]]:",
"abusefilter-edit-denied": "Вы ня можаце праглядзець дэталі гэтага фільтру, таму што яны схаваныя ад агульнага прагляду.",
"abusefilter-edit-main": "Парамэтры фільтру",
"abusefilter-edit-done-subtitle": "Фільтар быў адрэдагаваны",
@@ -186,7 +181,7 @@
"abusefilter-edit-export": "Экспартаваць гэты фільтар у іншую вікі",
"abusefilter-edit-syntaxok": "Сынтаксычныя памылкі ня знойдзеныя.",
"abusefilter-edit-syntaxerr": "Знойдзеная сынтаксычная памылка: $1",
- "abusefilter-edit-bad-tags": "Адна ці болей пазначаных вамі метак — няслушная.\nМеткі павінны быць кароткімі, і яны не павінны ўтрымліваць спэцыяльныя сымбалі і не павінны быць зарэзэрваваныя іншым праграмным забесьпячэньнем. Паспрабуйце абраць новую назву меткі.",
+ "abusefilter-edit-bad-tags": "Адна ці болей пазначаных вамі метак — няслушная.\nМеткі павінны быць кароткімі, і яны ня мусяць утрымліваць спэцыяльныя сымбалі і ня мусяць быць зарэзэрваваныя іншым праграмным забесьпячэньнем. Паспрабуйце абраць новую назву меткі.",
"abusefilter-edit-notallowed": "Вы ня маеце правоў на стварэньне альбо рэдагаваньне фільтраў злоўжываньняў",
"abusefilter-edit-notallowed-global": "Вы ня маеце правоў на стварэньне альбо рэдагаваньне глябальных фільтраў злоўжываньняў",
"abusefilter-edit-notallowed-global-custom-msg": "Пабочныя папярэджаньні ў глябальных фільтрах не падтрымліваюцца",
@@ -199,8 +194,8 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Модуль (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Ступень (**)",
"abusefilter-edit-builder-group-op-comparison": "Апэратары параўнаньня",
- "abusefilter-edit-builder-op-comparison-equal": "Роўныя (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Ня роўныя (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Значэньне, роўнае (==)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Значэньне, ня роўнае (!=)",
"abusefilter-edit-builder-op-comparison-lt": "Меней чым (<)",
"abusefilter-edit-builder-op-comparison-gt": "Болей чым (>)",
"abusefilter-edit-builder-op-comparison-lte": "Меней ці роўныя (<=)",
@@ -231,7 +226,7 @@
"abusefilter-edit-builder-funcs-rmwhitespace": "Выдаліць прагалы (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Выдаліць спэцыяльныя сымбалі (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Ці знаходзіцца IP-адрас ў дыяпазоне? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Радок пошуку для шматлікіх падрадкоў (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Радок пошуку для шматлікіх падрадкоў у OR-рэжыме. (contains_any)",
"abusefilter-edit-builder-funcs-substr": "Падрадок (substr)",
"abusefilter-edit-builder-funcs-strpos": "Пазыцыя падрадку ў радку (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Замена падрадку ў радку (str_replace)",
@@ -250,19 +245,18 @@
"abusefilter-edit-builder-vars-new-content-model": "Новая мадэль зьместу",
"abusefilter-edit-builder-vars-removedlines": "Выдаленых радкоў у рэдагаваньні",
"abusefilter-edit-builder-vars-summary": "Кароткае апісаньне зьменаў/прычына",
- "abusefilter-edit-builder-vars-article-id": "Ідэнтыфікатар старонкі",
- "abusefilter-edit-builder-vars-article-ns": "Прастора назваў старонкі",
- "abusefilter-edit-builder-vars-article-text": "Назва старонкі (без прасторы назваў)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Поўная назва старонкі",
- "abusefilter-edit-builder-vars-article-views": "Праглядаў старонкі",
+ "abusefilter-edit-builder-vars-page-id": "Ідэнтыфікатар старонкі",
+ "abusefilter-edit-builder-vars-page-ns": "Прастора назваў старонкі",
+ "abusefilter-edit-builder-vars-page-title": "Назва старонкі (без прасторы назваў)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Поўная назва старонкі",
"abusefilter-edit-builder-vars-movedfrom-id": "Ідэнтыфікатар крыніцы перанесенай старонкі",
"abusefilter-edit-builder-vars-movedfrom-ns": "Прастора назваў крыніцы перанесенай старонкі",
- "abusefilter-edit-builder-vars-movedfrom-text": "Назва крыніцы перанесенай старонкі",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Поўная назва крыніцы перанесенай старонкі",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Назва крыніцы перанесенай старонкі",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Поўная назва крыніцы перанесенай старонкі",
"abusefilter-edit-builder-vars-movedto-id": "Ідэнтыфікатар мэтавай старонкі пераносу",
"abusefilter-edit-builder-vars-movedto-ns": "Прастора назваў мэтавай старонкі пераносу",
- "abusefilter-edit-builder-vars-movedto-text": "Назва мэтавай старонкі пераносу",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Поўная назва мэтавай старонкі пераносу",
+ "abusefilter-edit-builder-vars-movedto-title": "Назва мэтавай старонкі пераносу",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Поўная назва мэтавай старонкі пераносу",
"abusefilter-edit-builder-vars-user-editcount": "Колькасьць рэдагаваньняў удзельніка",
"abusefilter-edit-builder-vars-user-age": "Узрост рахунку ўдзельніка",
"abusefilter-edit-builder-vars-user-name": "Назва рахунку ўдзельніка",
@@ -275,7 +269,7 @@
"abusefilter-edit-builder-vars-all-links": "Усе вонкавыя спасылкі ў новым тэксьце",
"abusefilter-edit-builder-vars-added-links": "Усе вонкавыя спасылкі дададзеныя ў рэдагаваньні",
"abusefilter-edit-builder-vars-removed-links": "Усе вонкавыя спасылкі выдаленыя ў рэдагаваньні",
- "abusefilter-edit-builder-vars-old-text": "Стары вікі-тэкст, да рэдагаваньня",
+ "abusefilter-edit-builder-vars-old-text": "Стары вікітэкст, да рэдагаваньня (больш не выкарыстоўваецца)",
"abusefilter-edit-builder-vars-new-text": "Новы вікі-тэкст, пасьля рэдагаваньня",
"abusefilter-edit-builder-vars-new-pst": "Вікітэкст новай старонкі, трансфармаваны перад захаваньнем",
"abusefilter-edit-builder-vars-diff-pst": "Уніфікаваная розьніца зьменаў у працэсе рэдагаваньня, ператвораная перад захаваньнем",
@@ -288,7 +282,7 @@
"abusefilter-edit-builder-vars-restrictions-upload": "Абарона файла ад загрузкі",
"abusefilter-edit-builder-vars-old-text-stripped": "Стары зьмест старонкі, пазбаўлены ад усіх пазнакаў",
"abusefilter-edit-builder-vars-old-links": "Спасылкі на старонцы перад рэдагаваньнем",
- "abusefilter-edit-builder-vars-old-html": "Стары вікі-тэкст старонкі, пераўтвораны ў фармат HTML",
+ "abusefilter-edit-builder-vars-old-html": "Стары вікітэкст старонкі, ператвораны ў фармат HTML (больш не выкарыстоўваецца)",
"abusefilter-edit-builder-vars-minor-edit": "Ці пазначана рэдагаваньне як дробнае",
"abusefilter-edit-builder-vars-file-sha1": "SHA1-хэш зьместу файлаў",
"abusefilter-edit-builder-vars-file-size": "Памер файлу ў байтах",
@@ -322,14 +316,14 @@
"abusefilter-exception-unclosedstring": "Незакрыты радок выразу, які пачынаецца з пазыцыі $1.",
"abusefilter-exception-invalidoperator": "Няслушны апэратар «$2» у пазыцыі $1.",
"abusefilter-exception-unrecognisedtoken": "Нераспазнаны элемэнт «$2» у пазыцыі $1.",
- "abusefilter-exception-noparams": "Няма парамэтраў для функцыі «$2» у пазыцыі $1.",
+ "abusefilter-exception-noparams": "Няма парамэтраў для функцыі «$2» у пазыцыі $1.\n{{PLURAL:$3|Чакаўся $3 аргумэнт|Чакаліся $3 аргумэнты|Чакалася $3 аргумэнтаў}}.",
"abusefilter-exception-dividebyzero": "Спроба дзяленьня $2 на нуль у пазыцыі $1.",
"abusefilter-exception-unrecognisedvar": "Нераспазнаная зьменная $2 у пазыцыі $1",
"abusefilter-exception-notenoughargs": "Недастаткова аргумэнтаў для функцыі $2, якая выклікаецца ў пазыцыі $1.\nЧакаецца $3 {{PLURAL:$3|аргумэнт|аргумэнты|аргумэнтаў}}, атрымана $4",
- "abusefilter-exception-regexfailure": "Памылка ў рэгулярным выразе «$3» у пазыцыі $1: «$2»",
+ "abusefilter-exception-regexfailure": "Памылка ў рэгулярным выразе «$2» у пазыцыі $1.",
"abusefilter-exception-overridebuiltin": "Недазволеная перавызначэньне ўбудаванай зьменнай «$2» ў пазыцыі $1.",
- "abusefilter-exception-outofbounds": "Запыт неіснуючага элемэнту сьпісу $2 (памер сьпісу: $3) у пазыцыі $1.",
- "abusefilter-exception-notlist": "Запыт элемэнту масіву для аб'екту, які не зьяўляецца масівам, у пазыцыі $1.",
+ "abusefilter-exception-outofbounds": "Запыт няіснага элемэнту сьпісу $2 (памер сьпісу = $3) у пазыцыі $1.",
+ "abusefilter-exception-notarray": "Запыт элемэнту масіву для аб’екту, які не зьяўляецца масівам, у пазыцыі $1.",
"abusefilter-action-tag": "Метка",
"abusefilter-action-throttle": "Абмежаваць",
"abusefilter-action-warn": "Папярэдзіць",
@@ -345,7 +339,7 @@
"abusefilter-revert-periodstart": "Пачатак пэрыяду:",
"abusefilter-revert-periodend": "Канец пэрыяду:",
"abusefilter-revert-search": "Выбар дзеяньняў",
- "abusefilter-revert-filter": "Фільтар:",
+ "abusefilter-revert-filter": "Ідэнтыфікатар фільтру:",
"abusefilter-revert-preview-intro": "Ніжэй знаходзяцца дзеяньні, выкананыя фільтрам злоўжываньняў, якія будуць адмененыя гэтым дзеяньнем.\nКалі ласка, праверце іх уважліва і націсьніце «{{int:abusefilter-revert-confirm}}», каб пацьвердзіць ваш выбар.",
"abusefilter-revert-confirm": "Пацьвердзіць",
"abusefilter-revert-success": "Вы адкацілі ўсе дзеяньні, выкананыя фільтрам злоўжываньняў [[Special:AbuseFilter/$1|filter $2]].",
@@ -390,7 +384,6 @@
"abusefilter-topnav-import": "Імпартаваць фільтар",
"abusefilter-log-name": "Журнал фільтру злоўжываньняў",
"abusefilter-log-header": "Гэты журнал паказвае кароткае апісаньне зьменаў у фільтрах.\nПоўную інфармацыю можна знайсьці ў [[Special:AbuseFilter/history|сьпісе]] апошніх зьменаў фільтраў.",
- "abusefilter-log-entry-modify": "зьмяніў $1 ($2)",
"abusefilter-log-noresults": "Вынікаў няма",
"abusefilter-diff-title": "Адрозьненьні паміж вэрсіямі",
"abusefilter-diff-item": "Элемэнт",
diff --git a/AbuseFilter/i18n/be.json b/AbuseFilter/i18n/be.json
index f625f8b2..bc36bfea 100644
--- a/AbuseFilter/i18n/be.json
+++ b/AbuseFilter/i18n/be.json
@@ -4,34 +4,258 @@
"LexArt",
"Тест",
"Mikalai Udodau",
- "Дзяніс Тутэйшы"
+ "Дзяніс Тутэйшы",
+ "Artsiom91",
+ "Movses"
]
},
+ "abusefilter-desc": "Прымяняе аўтаматычную эўрыстыку да правак.",
"abusefilter": "Настройкі фільтра злоўжыванняў",
"abuselog": "Журнал злоўжыванняў",
+ "abusefilter-disallowed": "Гэтае дзеянне было аўтаматычна кваліфікаванае як шкоднае і таму было забароненае. Калі Вы ўпэўненыя, што гэта карыснае дзеянне, калі ласка, звяжыцеся з адміністратарам і растлумачце яму, што Вы спрабуеце зрабіць. Кароткае апісанне правіла злоўжывання, якому адпавядае Вашае дзеянне: $1",
+ "abusefilter-degrouped": "Гэтае дзеянне было аўтаматычна кваліфікаванае як шкоднае. Такім чынам, дзеянне было забароненае і, у выніку таго, што Ваш уліковы запіс трапіў пад падазрэнне, з яго былі знятыя ўсе правы. Калі Вы ўпэўнены, што гэта адбылося памылкова, калі ласка, звяжыцеся з бюракратам і растлумачце яму Вашыя дзеянні, тады Вашыя правы могуць быць адноўленыя. Кароткае апісанне правіла злоўжывання, якому адпавядае Вашае дзеянне: $1",
+ "abusefilter-autopromote-blocked": "Гэтае дзеянне было аўтаматычна кваліфікаванае як шкоднае і было забароненае. Акрамя таго, у мэтах бяспекі, з Вашага ўліковага запісу часова знятыя некаторыя правы, якія звычайна даюцца падчас рэгістрацыі. Кароткае апісанне правіла злоўжывання, з якой супала Вашае дзеянне: $1",
"abusefilter-blocker": "Фільтр злоўжыванняў",
+ "abusefilter-blockreason": "Аўтаматычна заблакавана фільтрам злоўжыванняў.\nАпісанне адпаведнага правіла: $1",
+ "abusefilter-degroupreason": "Фільтр злоўжыванняў аўтаматычна зняў правы.\nАпісанне правіла: $1",
+ "abusefilter-accountreserved": "Гэты ўліковы запіс зарэзерваваны для выкарыстоўвання фільтрам злоўжыванняў.",
"right-abusefilter-log": "Глядзець журнал злоўжыванняў",
+ "abusefilter-log": "Журнал фільтра злоўжыванняў",
"abusefilter-log-search-user": "Удзельнік:",
+ "abusefilter-log-search-filter": "ID фільтраў (падзеленыя сімвалам вертыкальнай лініі):",
"abusefilter-log-search-title": "Загаловак:",
+ "abusefilter-log-hidelink": "настроіць бачнасць",
+ "abusefilter-log-details-legend": "Падрабязнасці запісу журнала $1",
"abusefilter-log-linkoncontribs": "журнал злоўжыванняў",
"abusefilter-log-hide-reason": "Прычына:",
+ "log-action-filter-abusefilter": "Тып змены фільтра:",
"abusefilter-list-edit": "Правіць",
+ "abusefilter-deleted": "Выдалена",
+ "abusefilter-disabled": "Выключаны",
"abusefilter-new": "Стварыць новы фільтр",
+ "abusefilter-list-options-scope-local": "Толькі лакальныя правілы",
"abusefilter-list-options-submit": "Абнавіць",
+ "abusefilter-edit": "Правіць фільтр злоўжыванняў",
+ "abusefilter-edit-subtitle": "Змена фільтра $1",
+ "abusefilter-edit-subtitle-new": "Стварэнне фільтру",
+ "abusefilter-edit-oldwarning": "<strong>Вы рэдагуеце старую вэрсію гэтага фільтру. Статыстыка падаецца для апошнія версіі фільтру. Калі Вы захаваеце Вашыя змены, Вы скасуеце ўсе змены зробленыя раней.</strong> &bull; [[Special:AbuseFilter/history/$2|Вярнуцца да гісторыі гэтага фільтру]].",
"abusefilter-edit-status-label": "Статыстыка:",
+ "abusefilter-edit-status": "З $1 {{PLURAL:$1|апошняга дзеяння|апошніх дзеянняў}} $2 ($3%) адпавядалі гэтаму фільтру.",
+ "abusefilter-edit-status-profile": "З $1 {{PLURAL:$1|апошняга дзеяння|апошніх дзеянняў}} $2 ($3%) адпавядалі гэтаму фільтру. У сярэднім, выкананне фільтру працягвалася $4 мс і выкарыстоўвала $5 {{PLURAL:$5|умову|умовы|умоў}} з ліміту ўмоў.",
+ "abusefilter-edit-throttled-warning": "'''Увага:''' Гэты фільтр быў аўтаматычна пазначаны як шкодны. У якасці меры бяспекі наступныя дзеянні не будуць выкананы ($1). Калі ласка, праверце і [[mw:Extension:AbuseFilter/Conditions|аптымізуйце]] Вашыя ўмовы, каб зняць гэтае абмежаванне",
"abusefilter-edit-new": "Новы фільтр",
"abusefilter-edit-save": "Запісаць фільтр",
+ "abusefilter-edit-id": "ID фільтра:",
+ "abusefilter-edit-switch-editor": "Пераключыць рэдактар",
+ "abusefilter-edit-description": "Апісанне:\n:''(агульнадаступнае)''",
+ "abusefilter-edit-field-description": "апісанне",
+ "abusefilter-edit-group": "Група фільтраў:",
+ "abusefilter-edit-flags": "Сцягі:",
+ "abusefilter-edit-deleted": "Пазначыць як выдалены",
+ "abusefilter-edit-global": "Глабальны фільтр",
+ "abusefilter-edit-rules": "Умовы:",
+ "abusefilter-edit-field-conditions": "умовы",
+ "abusefilter-edit-notes": "Заўвагі:",
+ "abusefilter-edit-lastmod": "Апошняя змена фільтра:",
+ "abusefilter-edit-lastmod-text": "$1 удзельнікам $2",
+ "abusefilter-edit-consequences": "Дзеянні, якія прадпрымаюцца пры супадзенні",
+ "abusefilter-edit-action-warn": "Прымаць гэтыя меры пасля папярэджання ўдзельніка",
+ "abusefilter-edit-action-disallow": "Забараніць удзельніку выкананне дзеяння",
+ "abusefilter-edit-action-blockautopromote": "Зняць з удзельніка статус аўтапацверджанага",
+ "abusefilter-edit-action-degroup": "Выдаліць удзельніка з усіх прывілеяваных груп",
+ "abusefilter-edit-action-block": "Заблакаваць удзельніка і/ці адрас IP",
+ "abusefilter-edit-action-blocktalk": "Блакаваць удзельніка і/ці IP-адрас ад рэдагавання ўласнай старонкі размоў",
+ "abusefilter-edit-action-throttle": "Прымаць меры толькі калі ўдзельнік перайшоў дапушчальны ўзровень",
+ "abusefilter-edit-action-rangeblock": "Заблакаваць адпаведны IP-дыяпазон, з якога працуе ўдзельнік",
+ "abusefilter-edit-action-tag": "Пазначыць праўку для далейшай праверкі.",
+ "abusefilter-edit-throttle-count": "Колькасць дазволеных дзеянняў:",
"abusefilter-edit-throttle-period": "Перыяд часу:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
+ "abusefilter-edit-throttle-groups": "Звужэнне паводле груп:\n:''(па адным на радку, падзяляць коскамі)''",
+ "abusefilter-edit-warn-message": "Сістэмнае паведамленне для папярэджання:",
+ "abusefilter-edit-warn-other": "Іншае паведамленне",
+ "abusefilter-edit-warn-other-label": "Назва старонкі іншага паведамлення:\n:''(без прасторы назваў MediaWiki)''",
"abusefilter-edit-warn-actions": "Дзеянні:",
+ "abusefilter-edit-warn-preview": "Папярэдні прагляд выбранага паведамлення",
+ "abusefilter-edit-warn-edit": "Стварыць/Правіць выбранае паведамленне",
+ "abusefilter-edit-tag-tag": "Ужывальныя [[Special:Tags|біркі]] (па адной на радок):",
+ "abusefilter-edit-block-anon-durations": "Працягласць блакіроўкі для ананімных удзельнікаў:",
+ "abusefilter-edit-block-user-durations": "Працягласць блакіроўкі для зарэгістраваных удзельнікаў:",
+ "abusefilter-block-anon": "Блакаваць ананімных удзельнікаў",
+ "abusefilter-block-user": "блакаваць зарэгістраваных удзельнікаў",
+ "abusefilter-block-talk": "старонка размоў заблакавана",
+ "abusefilter-edit-denied": "Вы не можаце праглядзець дэталі гэтага фільтру, таму што яны схаваныя ад агульнага прагляду.",
+ "abusefilter-edit-main": "Параметры фільтру",
+ "abusefilter-edit-done-subtitle": "Фільтр зменены",
+ "abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Вашыя змены]] [[Special:AbuseFilter/$1|фільтру $3]] былі захаваныя.",
+ "abusefilter-edit-badsyntax": "У пазначаным фільтры знойдзеная сінтаксічная памылка.\nПаведамленне парсера: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Наступныя палі з’яўляюцца абавязковымі і павінны быць запоўнены: $1",
+ "abusefilter-edit-deleting-enabled": "Вы не можаце пазначыць актыўны фільтр як выдалены.",
+ "abusefilter-edit-restricted": "Вы не можаце правіць гэты фільтр, таму што ён утрымлівае адно ці болей абмежаваных дзеянняў. Калі ласка, звярніцеся да ўдзельніка з адпаведнымі правамі, каб зрабіць сваё дзеянне.",
+ "abusefilter-edit-viewhistory": "Паказаць гісторыю гэтага фільтру",
"abusefilter-edit-history": "Гісторыя:",
+ "abusefilter-edit-check": "Праверыць сінтаксіс",
+ "abusefilter-edit-badfilter": "Пазначаны Вамі фільтр не існуе",
+ "abusefilter-edit-revert": "Адкаціць дзеянні выкананыя гэтым фільтрам",
+ "abusefilter-edit-tools": "Інструменты:",
+ "abusefilter-edit-test-link": "Праверыць гэты фільтр на апошніх зменах",
+ "abusefilter-edit-export": "Экспартаваць гэты фільтр у іншы вікі-праект",
+ "abusefilter-edit-syntaxok": "Сінтаксічных памылак не знойдзена.",
+ "abusefilter-edit-syntaxerr": "Знойдзена сінтаксічная памылка: $1",
+ "abusefilter-edit-bad-tags": "Адна ці болей пазначаных вамі бірак — няслушная. Біркі павінны быць кароткімі, і яны не мусяць утрымліваць спецыяльныя сімвалы і не мусяць быць зарэзерваваныя іншым праграмным забеспячэннем. Паспрабуйце абраць новую назву біркі.",
+ "abusefilter-edit-notallowed": "Вы не маеце правоў на стварэнне або рэдагаванне фільтраў злоўжыванняў",
+ "abusefilter-edit-notallowed-global": "Вы не маеце правоў на стварэнне або рэдагаванне глабальных фільтраў злоўжыванняў",
+ "abusefilter-edit-notallowed-global-custom-msg": "Карытальніцкія папярэджанні ў глабальных фільтрах не падтрымліваюцца",
+ "abusefilter-edit-builder-select": "Выберыце параметр, каб дадаць яго",
+ "abusefilter-edit-builder-group-op-arithmetic": "Арыфметычныя аператары",
+ "abusefilter-edit-builder-op-arithmetic-addition": "Складанне (+)",
+ "abusefilter-edit-builder-op-arithmetic-subtraction": "Адніманне (-)",
+ "abusefilter-edit-builder-op-arithmetic-multiplication": "Множанне (*)",
+ "abusefilter-edit-builder-op-arithmetic-divide": "Дзяленне (/)",
+ "abusefilter-edit-builder-op-arithmetic-modulo": "Модуль (%)",
+ "abusefilter-edit-builder-op-arithmetic-pow": "Ступень (**)",
+ "abusefilter-edit-builder-group-op-comparison": "Аператары параўнання",
+ "abusefilter-edit-builder-op-comparison-equal": "Значэнне, роўнае (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Значэнне і тып, роўныя (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Значэнне, не роўнае (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Значэнне і тып, не роўныя (!==)",
+ "abusefilter-edit-builder-op-comparison-lt": "Меней (<)",
+ "abusefilter-edit-builder-op-comparison-gt": "Болей (>)",
+ "abusefilter-edit-builder-op-comparison-lte": "Не болей (<=)",
+ "abusefilter-edit-builder-op-comparison-gte": "Не меней (>=)",
+ "abusefilter-edit-builder-group-op-bool": "Булеўскія аператары",
"abusefilter-edit-builder-op-bool-not": "Не (!)",
"abusefilter-edit-builder-op-bool-and": "І (&)",
"abusefilter-edit-builder-op-bool-or": "Або (|)",
+ "abusefilter-edit-builder-op-bool-xor": "Выключаючае АБО (^)",
+ "abusefilter-edit-builder-group-misc": "Розныя",
+ "abusefilter-edit-builder-misc-in": "знаходзіцца ў радку (in)",
+ "abusefilter-edit-builder-misc-like": "Супадзенне з рэгулярным выразам (like)",
+ "abusefilter-edit-builder-misc-rlike": "Адпаведнасць рэгулярнаму выразу (rlike)",
+ "abusefilter-edit-builder-misc-irlike": "Адпаведнасць рэгулярнаму выразу, без уліку рэгістра (irlike)",
+ "abusefilter-edit-builder-misc-contains": "Левы радок ўтрымлівае правы радок (contains)",
+ "abusefilter-edit-builder-misc-stringlit": "Радок сімвалаў (\"\")",
+ "abusefilter-edit-builder-misc-tern": "Тэрнарны аператар (X ? Y : Z)",
+ "abusefilter-edit-builder-misc-cond": "Умова (if X then Y else Z)",
"abusefilter-edit-builder-group-funcs": "Функцыі",
+ "abusefilter-edit-builder-funcs-length": "Даўжыня радка (length)",
+ "abusefilter-edit-builder-funcs-lcase": "У малыя літары (lcase)",
+ "abusefilter-edit-builder-funcs-ucase": "У вялікія літары (ucase)",
+ "abusefilter-edit-builder-funcs-ccnorm": "Нармалізацыя шматзначных сімвалаў (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Нармалізаваць і знайсці радок для некалькіх радкоў у рэжыме OR (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-rmdoubles": "Выдаленне падвойных сімвалаў (rmdoubles)",
+ "abusefilter-edit-builder-funcs-specialratio": "Спецыяльных сімвалаў / усяго сімвалаў (specialratio)",
+ "abusefilter-edit-builder-funcs-norm": "Нармалізацыя (norm)",
+ "abusefilter-edit-builder-funcs-count": "Колькасць уключэнняў радка Х у радок Y (count)",
+ "abusefilter-edit-builder-funcs-rcount": "Колькасць адпаведнасцей рэгулярнаму выразу X у радку Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Масіў рэгулярных выразаў супадае з тэкстам для кожнай групы захопу (get_matches)",
+ "abusefilter-edit-builder-funcs-rmwhitespace": "Выдаліць прагалы (rmwhitespace)",
+ "abusefilter-edit-builder-funcs-rmspecials": "Выдаліць спецыяльныя сімвалы (rmspecials)",
+ "abusefilter-edit-builder-funcs-ip_in_range": "Ці знаходзіцца IP-адрас ў дыяпазоне? (ip_in_range)",
+ "abusefilter-edit-builder-funcs-contains-any": "Радок пошуку для шматлікіх падрадкоў у рэжыме OR. (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Радок пошуку для шматлікіх падрадкоў у рэжыме AND. (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Праверыць, ці з’яўляецца аргумент роўным (===) аднаму з наступных аргументаў (equals_to_any)",
+ "abusefilter-edit-builder-funcs-substr": "Падрадок (substr)",
+ "abusefilter-edit-builder-funcs-strpos": "Пазіцыя падрадка ў радку (strpos)",
+ "abusefilter-edit-builder-funcs-str_replace": "Замена падрадка ў радку (str_replace)",
+ "abusefilter-edit-builder-funcs-rescape": "Экранаванне радка як літэрал у рэгулярных выразах (rescape)",
+ "abusefilter-edit-builder-funcs-set_var": "Задаць зменную (set_var)",
+ "abusefilter-edit-builder-group-vars": "Зменныя",
+ "abusefilter-edit-builder-vars-accountname": "Імя ўліковага запісу (пры стварэнні ўліковага запісу)",
+ "abusefilter-edit-builder-vars-timestamp": "Unix-час змены",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Час журнала",
+ "abusefilter-edit-builder-vars-action": "Дзеянне",
+ "abusefilter-edit-builder-vars-addedlines": "Колькасць радкоў, дададзеных у праўцы",
+ "abusefilter-edit-builder-vars-delta": "Змена памеру ў праўцы",
+ "abusefilter-edit-builder-vars-diff": "Уніфікаваная розніца змен у праўцы",
+ "abusefilter-edit-builder-vars-newsize": "Новы памер старонкі",
+ "abusefilter-edit-builder-vars-oldsize": "Стары памер старонкі",
+ "abusefilter-edit-builder-vars-old-content-model": "Старая мадэль змесціва",
+ "abusefilter-edit-builder-vars-new-content-model": "Новая мадэль змесціва",
+ "abusefilter-edit-builder-vars-removedlines": "Выдаленых радкоў у праўцы",
+ "abusefilter-edit-builder-vars-summary": "Кароткае апісанне змен/прычына",
+ "abusefilter-edit-builder-vars-page-id": "ID старонкі",
+ "abusefilter-edit-builder-vars-page-ns": "Прастора назваў старонкі",
+ "abusefilter-edit-builder-vars-page-title": "Назва старонкі (без прасторы назваў)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Поўная назва старонкі",
+ "abusefilter-edit-builder-vars-movedfrom-id": "ID старонкі, якая пераносіцца",
+ "abusefilter-edit-builder-vars-movedfrom-ns": "Прастора назваў старонкі, якая пераносіцца",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Назва старонкі, якая пераносіцца",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Поўная назва старонкі, якая пераносіцца",
+ "abusefilter-edit-builder-vars-movedto-id": "ID старонкі, куды адбываецца перанос",
+ "abusefilter-edit-builder-vars-movedto-ns": "Прастора назваў старонкі, куды адбываецца перанос",
+ "abusefilter-edit-builder-vars-movedto-title": "Назва старонкі, куды адбываецца перанос",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Поўная назва старонкі, куды адбываецца перанос",
+ "abusefilter-edit-builder-vars-user-editcount": "Колькасць правак удзельніка",
+ "abusefilter-edit-builder-vars-user-age": "Узрост уліковага запісу ўдзельніка",
+ "abusefilter-edit-builder-vars-user-name": "Назва ўліковага запісу ўдзельніка",
+ "abusefilter-edit-builder-vars-user-groups": "Групы (у тым ліку схаваныя), да якіх належыць удзельнік",
+ "abusefilter-edit-builder-vars-user-rights": "Правы, якія мае ўдзельнік",
+ "abusefilter-edit-builder-vars-user-blocked": "Ці заблакаваны ўдзельнік",
+ "abusefilter-edit-builder-vars-user-emailconfirm": "Час пацверджання адрасу электроннай пошты",
+ "abusefilter-edit-builder-vars-recent-contributors": "Апошнія дзесяць удзельнікаў, якія рэдагавалі старонку",
+ "abusefilter-edit-builder-vars-first-contributor": "Першы рэдактар старонкі",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Апошнія дзесяць удзельнікаў, якія правілі старонку, якая пераносіцца",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Першы рэдактар старонкі, якая пераносіцца",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Апошнія дзесяць удзельнікаў, якія правілі старонку, куды адбываецца перанос",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Першы рэдактар старонкі, куды адбываецца перанос",
+ "abusefilter-edit-builder-vars-all-links": "Усе вонкавыя спасылкі ў новым тэксце",
+ "abusefilter-edit-builder-vars-added-links": "Усе вонкавыя спасылкі, дададзеныя ў праўцы",
+ "abusefilter-edit-builder-vars-removed-links": "Усе вонкавыя спасылкі, выдаленыя ў праўцы",
+ "abusefilter-edit-builder-vars-old-text": "Стары вікітэкст старонкі, да праўкі",
+ "abusefilter-edit-builder-vars-new-text": "Новы вікітэкст, пасля праўкі",
+ "abusefilter-edit-builder-vars-new-pst": "Вікітэкст новай старонкі, зменены перад захаваннем",
+ "abusefilter-edit-builder-vars-diff-pst": "Уніфікаваная розніца змен у праўцы, змененая перад захаваннем",
+ "abusefilter-edit-builder-vars-addedlines-pst": "Радкі, дададзеныя пры рэдагаванні, змененыя перад захаваннем",
+ "abusefilter-edit-builder-vars-new-text-stripped": "Новы тэкст старонкі, ачышчаны ад усёй разметкі",
+ "abusefilter-edit-builder-vars-new-html": "Разабраны HTML-код новай версіі",
+ "abusefilter-edit-builder-vars-restrictions-edit": "Узровень абароны старонкі ад правак",
+ "abusefilter-edit-builder-vars-restrictions-move": "Узровень абароны старонкі ад пераносаў",
+ "abusefilter-edit-builder-vars-restrictions-create": "Абарона старонкі ад стварэння",
+ "abusefilter-edit-builder-vars-restrictions-upload": "Абарона файла ад загрузкі",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Узровень абароны старонкі, якая пераносіцца",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Абарона на стварэнне старонкі, якая пераносіцца",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Ахова пры загрузцы файла, які пераносіцца",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Абарона рэдагавання старонкі, куды адбываецца перанос",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Узровень абароны пераносу старонкі, куды адбываецца перанос",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Ахова на стварэнне старонкі, куды адбываецца перанос",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Ахова пры загрузцы файла, куды адбываецца перанос",
+ "abusefilter-edit-builder-vars-old-text-stripped": "Стары змест старонкі, пазбаўлены ад усёй разметкі",
+ "abusefilter-edit-builder-vars-old-links": "Спасылкі на старонцы, перад праўкай",
+ "abusefilter-edit-builder-vars-old-html": "Стары вікітэкст старонкі, пераўтвораны ў фармат HTML",
+ "abusefilter-edit-builder-vars-minor-edit": "Ці пазначана праўка як дробная",
+ "abusefilter-edit-builder-vars-file-sha1": "SHA1-хэш зместу файлаў",
+ "abusefilter-edit-builder-vars-file-size": "Памер файла ў байтах",
+ "abusefilter-edit-builder-vars-file-mime": "MIME-тып файла",
+ "abusefilter-edit-builder-vars-file-mediatype": "Медыя-тып файла",
+ "abusefilter-edit-builder-vars-file-width": "Шырыня файла ў пікселах",
+ "abusefilter-edit-builder-vars-file-height": "Вышыня файла ў пікселах",
+ "abusefilter-edit-builder-vars-file-bits-per-channel": "Глыбіня колеру ў файле",
"abusefilter-history-timestamp": "Час",
"abusefilter-history-flags": "Сцягі",
"abusefilter-history-comments": "Каментары",
+ "abusefilter-action-tag": "Бірка",
+ "abusefilter-action-throttle": "Абмежаваць",
+ "abusefilter-action-warn": "Папярэдзіць",
+ "abusefilter-action-blockautopromote": "Заблакаваць аўтаматычнае наданне правоў",
+ "abusefilter-action-block": "Заблакаваць",
+ "abusefilter-action-degroup": "Выдаліць з груп",
+ "abusefilter-action-rangeblock": "Заблакаваць дыяпазон",
+ "abusefilter-action-disallow": "Не дазволіць",
"abusefilter-revert-filter": "Фільтр:",
- "abusefilter-revert-confirm": "Пацвердзіць"
+ "abusefilter-revert-confirm": "Пацвердзіць",
+ "abusefilter-changeslist-examine": "праверыць",
+ "abusefilter-topnav": "'''Навігацыя па Фільтру злоўжывання'''",
+ "abusefilter-log-name": "Журнал фільтра злоўжыванняў",
+ "abusefilter-log-header": "У гэты журнал запісваюцца апісанні змен, зробленых у фільтрах. Падрабязнасці можна знайсці ў [[Special:AbuseFilter/history|спісе]] апошніх змен фільтраў.",
+ "abusefilter-diff-title": "Розніца паміж версіямі",
+ "abusefilter-diff-item": "Элемент",
+ "abusefilter-diff-version": "Версія {{GENDER:$3|ўдзельніка|ўдзельніцы}} $2 ад $1",
+ "abusefilter-diff-info": "Асноўная інфармацыя",
+ "abusefilter-diff-pattern": "Умовы фільтру",
+ "abusefilter-diff-invalid": "Немагчыма атрымаць запытаныя версіі",
+ "abusefilter-diff-backhistory": "Вярнуцца да гісторыі фільтру",
+ "abusefilter-diff-prev": "Старэйшая змена",
+ "abusefilter-diff-next": "Навейшая змена",
+ "tag-abusefilter-condition-limit": "дасягнуты ліміт умовы",
+ "tag-abusefilter-condition-limit-description": "Парўкі або іншыя падзеі, якія не могуць быць выбраныя ніводным з актыўных [[Special:AbuseFilter|фільтраў злоўжыванняў]] ([[mw:Extension:AbuseFilter/Conditions|даведка]])."
}
diff --git a/AbuseFilter/i18n/bg.json b/AbuseFilter/i18n/bg.json
index 85561104..164945b7 100644
--- a/AbuseFilter/i18n/bg.json
+++ b/AbuseFilter/i18n/bg.json
@@ -10,14 +10,15 @@
"පසිඳු කාවින්ද",
"StanProg",
"Vodnokon4e",
- "Matma Rex"
+ "Matma Rex",
+ "ShockD",
+ "Vlad5250"
]
},
"abusefilter-desc": "Прилага автоматични евристики към редакциите.",
"abusefilter": "Конфигуриране на филтъра срещу злоупотреби",
"abuselog": "Дневник на злоупотребите",
"abusefilter-intro": "Добре дошли в административния интерфейс на Филтъра срещу злоупотреби.\nФилтърът срещу злоупотреби е автоматизиран софтуерен механизъм за прилагане на евристични оценки към разнообразни действия.\nТози интерфейс показва списък на дефинираните филтри с възможност те да бъдат променяни.",
- "abusefilter-mustbeeditor": "От съображения за сигурност само потребители с права да променят филтрите срещу злоупотреби могат да използват този интерфейс.",
"abusefilter-warning": "<strong>Внимание:</strong> Извършваното действие беше автоматично разпознато като вредоносно.\nНеконструктивните действия бързо биват премахвани, а демонстративното или упоритото вредене може да доведе до блокиране на потребителската ви сметка или IP адрес.\nАко вярвате, че тази редакция е конструктивна, можете да натиснете бутона „Съхраняване“, за да я запазите.\nКратко описание на правилото, по което вашето действие беше разпознато: $1",
"abusefilter-disallowed": "Извършваното действие беше автоматично разпознато като вредно и не беше съхранено.\nАко вярвате, че действието ви е било конструктивно, моля, уведомете администраторите относно намеренията си.\nКратко описание на правилото, по което вашето действие беше разпознато: $1",
"abusefilter-blocked-display": "Извършваното действие беше автоматично разпознато като вредно и беше спряно.\nВ допълнение, с цел защита на {{SITENAME}}, вашата потребителска сметка и IP адрес бяха блокирани.\nАко смятате, че тази реакция на системата е погрешна, моля, свържете се с администратор.\nКратко описание на правилото, по което вашето действие беше разпознато: $1",
@@ -52,9 +53,19 @@
"abusefilter-log-summary": "Този дневник показва списъка на всички действия, прехванати от филтрите.",
"abusefilter-log-search": "Търсене в Дневника на злоупотребите",
"abusefilter-log-search-user": "Потребител:",
- "abusefilter-log-search-filter": "Идентификатор на филтър (разделени с вертикална линия):",
+ "abusefilter-log-search-filter": "Идентификатори на филтър (разделени с вертикална линия):",
"abusefilter-log-search-title": "Заглавие:",
"abusefilter-log-search-wiki": "Уики:",
+ "abusefilter-log-search-impact": "Въздействие:",
+ "abusefilter-log-search-impact-all": "Всички действия",
+ "abusefilter-log-search-impact-saved": "Само съхранени промени",
+ "abusefilter-log-search-impact-not-saved": "Без съхранени промени",
+ "abusefilter-log-search-entries-label": "Видимост:",
+ "abusefilter-log-search-entries-all": "Всички записи",
+ "abusefilter-log-search-entries-hidden": "Само скрити записи",
+ "abusefilter-log-search-entries-visible": "Само видими записи",
+ "abusefilter-log-search-action-taken-label": "Предприето действие:",
+ "abusefilter-log-search-action-taken-any": "Всички",
"abusefilter-log-search-submit": "Търсене",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|задейства}} защитен филтър, {{GENDER:$8|извършвайки}} действие „$3“ на $4.\nПредприети действия: $5;\nОписание на филтъра: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|задейства}} защитен филтър, {{GENDER:$8|извършвайки}} действие „$3“ на $4.\nПредприети действия: $5;\nОписание на филтъра: $6 ($7)",
@@ -68,12 +79,14 @@
"abusefilter-log-details-var": "Променлива",
"abusefilter-log-details-val": "Стойност",
"abusefilter-log-details-vars": "Параметри на действието",
- "abusefilter-log-details-private": "Скрити данни",
+ "abusefilter-log-details-private": "Скрити данни от дневника",
"abusefilter-log-details-ip": "Изходящ IP адрес",
+ "abusefilter-log-details-checkuser": "Проверяващ",
"abusefilter-log-noactions": "няма",
"abusefilter-log-details-diff": "Промени, извършени в рамките на редакцията",
"abusefilter-log-linkoncontribs": "дневник на злоупотребите",
"abusefilter-log-linkoncontribs-text": "Дневник на злоупотребите за {{GENDER:$1|този потребител}}",
+ "abusefilter-log-linkonhistory": "преглед на филтъра срещу злоупотреби",
"abusefilter-log-hidden": "(скрит запис)",
"abusefilter-log-hidden-implicit": "(скрито заради изтрита версия)",
"abusefilter-log-cannot-see-details": "Нямате права за преглед на детайлите на този запис.",
@@ -85,9 +98,10 @@
"abusefilter-log-hide-hidden": "Скриване на този запис от публичен преглед",
"abusefilter-log-hide-reason": "Причина:",
"abusefilter-log-hide-forbidden": "Нямате необходимите права да скривате записи от дневника на злоупотребите.",
- "abusefilter-logentry-suppress": "скриване на \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "показване на \"[[$1]]\"",
"logentry-abusefilter-hit": "$1: {{GENDER:$2|задейства}} $4, {{GENDER:$2|извършвайки}} действие „$5“ на $3.\nПредприети действия: $6 ($7)",
+ "log-action-filter-abusefilter": "Вид промяна на филтъра:",
+ "log-action-filter-abusefilter-create": "Създаване на нов филтър",
+ "log-action-filter-abusefilter-modify": "Промяна на филтъра",
"abusefilter-management": "Управление на филтъра срещу злоупотреби",
"abusefilter-list": "Всички филтри",
"abusefilter-list-id": "ID на филтър",
@@ -115,12 +129,17 @@
"abusefilter-list-options-deleted-only": "Показване само на изтритите филтри",
"abusefilter-list-options-deleted-hide": "Скриване на изтритите филтри",
"abusefilter-list-options-deleted-show": "Включване на изтритите филтри",
- "abusefilter-list-options-scope": "Покажи филтри:",
+ "abusefilter-list-options-scope": "Показване на филтри:",
"abusefilter-list-options-scope-local": "Само локални правила",
"abusefilter-list-options-scope-global": "Само глобални правила",
"abusefilter-list-options-scope-all": "Локални и глобални правила",
- "abusefilter-list-options-disabled": "Изключени филтри:",
+ "abusefilter-list-options-further-options": "Други опции:",
"abusefilter-list-options-hidedisabled": "Скриване на изключените филтри",
+ "abusefilter-list-options-hideprivate": "Скриване на приватните филтри",
+ "abusefilter-list-options-searchoptions": "Режим на търсене",
+ "abusefilter-list-options-search-like": "Обикновена заявка",
+ "abusefilter-list-options-search-rlike": "Регулярен израз",
+ "abusefilter-list-options-search-irlike": "Нечувствителен към регистъра регулярен израз",
"abusefilter-list-options-submit": "Обновяване",
"abusefilter-tools-text": "Тук има някои инструменти, които може да са полезни за създаване или поправяне на филтри срещу злоупотреби.",
"abusefilter-tools-expr": "Проверка на изрази",
@@ -128,7 +147,7 @@
"abusefilter-tools-reautoconfirm": "Възстановяване на статута на автоматично одобрен потребител",
"abusefilter-tools-reautoconfirm-user": "Потребител:",
"abusefilter-tools-reautoconfirm-submit": "Възстановяване",
- "abusefilter-reautoconfirm-none": "Този потребител няма изключен статут за автоматично подтвърждение.",
+ "abusefilter-reautoconfirm-none": "Този потребител няма изключен статут за автоматично потвърждение.",
"abusefilter-reautoconfirm-notallowed": "Нямате права да си възстановите статута на автоматично потвърден потребител.",
"abusefilter-reautoconfirm-done": "Статутът на автоматично потвърден потребител беше възстановен",
"abusefilter-status": "От {{PLURAL:$1|последното едно действие|последните $1 действия}}, $2 ($3%) {{PLURAL:$2|достигна|достигнаха}} условната граница от $4. $5 ($6%) от тях {{PLURAL:$5|съвпада|съвпадат}} с някой от текущо включените филтри.",
@@ -139,11 +158,12 @@
"abusefilter-edit-status-label": "Статистики:",
"abusefilter-edit-status": "От {{PLURAL:$1|последното действие|последните $1 действия}}, този филтър съвпадна с $2 от тях ($3%).",
"abusefilter-edit-status-profile": "От {{PLURAL:$1|последното едно действие|последните $1 действия}}, този филтър съвпадна с $2 от тях ($3%).\nСредното му време за изпълнение е $4 ms и използва $5 от общия брой допустими условия.",
- "abusefilter-edit-throttled": "<strong>Внимание:</strong> Този филтър беше автоматично изключен, тъй като съвпада с над $1% от всички действия. Това е направено като предпазна мярка.",
"abusefilter-edit-new": "Нов филтър",
"abusefilter-edit-save": "Съхраняване на филтъра",
"abusefilter-edit-id": "Идентификатор на филтър:",
+ "abusefilter-edit-switch-editor": "Смяна на редактора",
"abusefilter-edit-description": "Описание:\n:''(публично достъпно)''",
+ "abusefilter-edit-field-description": "описание",
"abusefilter-edit-group": "Група на филтъра:",
"abusefilter-edit-flags": "Флагове:",
"abusefilter-edit-enabled": "Включване на този филтър",
@@ -151,6 +171,7 @@
"abusefilter-edit-hidden": "Скриване на детайлите за този филтър от публичен достъп",
"abusefilter-edit-global": "Глобален филтър",
"abusefilter-edit-rules": "Условия:",
+ "abusefilter-edit-field-conditions": "условия",
"abusefilter-edit-notes": "Забележки:",
"abusefilter-edit-lastmod": "Последна промяна на филтъра:",
"abusefilter-edit-lastmod-text": "$1 от $2",
@@ -162,25 +183,34 @@
"abusefilter-edit-action-degroup": "Изключване на потребителя от всички привилегировани групи",
"abusefilter-edit-action-block": "Блокиране на потребителя и/или IP адреса",
"abusefilter-edit-action-throttle": "Изпълнение на действията само ако потребителят превиши определена честота на редакциите",
- "abusefilter-edit-action-rangeblock": "Блокиране на /16 диапазона, към който принадлежи потребителят",
+ "abusefilter-edit-action-rangeblock": "Блокиране на съответния IP-диапазон, към който принадлежи потребителят",
"abusefilter-edit-action-tag": "Отбелязване на редакцията за понататъшно преглеждане",
"abusefilter-edit-throttle-count": "Брой позволени действия:",
- "abusefilter-edit-throttle-period": "Период от време:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|секунда|секунди}}",
- "abusefilter-edit-throttle-groups": "Ограничаване по групи:\n:\"(по една на ред, комбинирани със запетаи)\"",
+ "abusefilter-edit-throttle-period": "Период от време (в секунди):",
+ "abusefilter-edit-throttle-groups": "Ограничаване по групи:",
+ "abusefilter-edit-throttle-ip": "IP адрес",
+ "abusefilter-edit-throttle-user": "Потребителска сметка",
+ "abusefilter-edit-throttle-range": "/16-диапазон",
+ "abusefilter-edit-throttle-creationdate": "Сървърно време на създаването на сметката",
+ "abusefilter-edit-throttle-editcount": "Брой редакции",
+ "abusefilter-edit-throttle-site": "Целият сайт",
+ "abusefilter-edit-throttle-page": "Страница",
"abusefilter-edit-warn-message": "Използвано системно съобщение за предупреждение:",
"abusefilter-edit-warn-other": "Друго съобщение",
"abusefilter-edit-warn-other-label": "Наименование на друго системно съобщение:\n:''(без представката MediaWiki)''",
"abusefilter-edit-warn-actions": "Действия:",
- "abusefilter-edit-warn-preview": "Предварителен преглед на избраното съобщение",
+ "abusefilter-edit-warn-preview": "Показване/Скриване прегледа на избраното съобщение",
"abusefilter-edit-warn-edit": "Създаване или редактиране на избраното съобщение",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Етикети]] за прилагане (по един на ред):",
- "abusefilter-edit-denied": "Не можете да видите детайлите на този филтър, защото са скрити от публичен достъп.",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Етикети]] за прилагане:",
+ "abusefilter-block-anon": "Блокиране на анонимни потребители",
+ "abusefilter-block-user": "блокиране на регистрирани потребители",
+ "abusefilter-block-talk": "дискусионната страница е блокирана",
+ "abusefilter-edit-denied": "Не може да видите детайлите на този филтър, тъй като са скрити от публичен достъп.",
"abusefilter-edit-main": "Параметри на филтъра",
"abusefilter-edit-done-subtitle": "Филтърът беше редактиран",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Вашите промени]] във [[Special:AbuseFilter/$1|филтър $3]] бяха съхранени успешно.",
"abusefilter-edit-badsyntax": "В зададения филтър има синтактична грешка. Резултатът от парсера е: <pre>$1</pre>",
- "abusefilter-edit-restricted": "Не можете да редактирате този филтър, понеже той съдържа едно или повече действия, ограничени по потребителска група.\nМоля, помолете потребител със съответните права за работа с такива действия да извърши промяната вместо вас.",
+ "abusefilter-edit-restricted": "Не може да редактирате този филтър, понеже той съдържа едно или повече действия, ограничени по потребителска група.\nМоля, помолете потребител със съответните права за работа с такива действия да извърши промяната вместо вас.",
"abusefilter-edit-viewhistory": "Преглед на историята на този филтър",
"abusefilter-edit-history": "История:",
"abusefilter-edit-check": "Проверка на синтаксиса",
@@ -191,7 +221,7 @@
"abusefilter-edit-export": "Експортиране на този филтър към друго уики",
"abusefilter-edit-syntaxok": "Не са открити синтактични грешки.",
"abusefilter-edit-syntaxerr": "Открита синтактична грешка: $1",
- "abusefilter-edit-bad-tags": "Един или повече от указаните етикети са невалидни.\nЕтикетите трябва да са кратки и да не съдържат специални символи.",
+ "abusefilter-edit-bad-tags": "Един или повече от указаните етикети са невалидни.\nЕтикетите трябва да са кратки, да не съдържат специални символи и да не са запазени за друг софтуер. Изберете друго име за етикета.",
"abusefilter-edit-notallowed": "Нямате права да създавате или редактирате филтъра срещу злоупотреби",
"abusefilter-edit-notallowed-global": "Нямате права да създавате или редактирате глобални филтри срещу злоупотреби",
"abusefilter-edit-notallowed-global-custom-msg": "Потребителските предупредителни съобщения не се поддържат за глобалните филтри",
@@ -204,8 +234,8 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Пресмятане по модул (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Повдигане на степен (**)",
"abusefilter-edit-builder-group-op-comparison": "Оператори за сравнение",
- "abusefilter-edit-builder-op-comparison-equal": "Е равно на (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Не е равно на (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Стойност равна на (==)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Стойност, различна от (!=)",
"abusefilter-edit-builder-op-comparison-lt": "По-малко от (<)",
"abusefilter-edit-builder-op-comparison-gt": "По-голямо от (>)",
"abusefilter-edit-builder-op-comparison-lte": "По-малко или равно на (<=)",
@@ -254,20 +284,19 @@
"abusefilter-edit-builder-vars-old-content-model": "Стар модел на съдържанието",
"abusefilter-edit-builder-vars-new-content-model": "Нов модел на съдържанието",
"abusefilter-edit-builder-vars-removedlines": "Брой премахнати редове в редакцията",
- "abusefilter-edit-builder-vars-summary": "Редактиране на резюмето/ причината",
- "abusefilter-edit-builder-vars-article-id": "Номер на страница",
- "abusefilter-edit-builder-vars-article-ns": "Именно пространство на страницата",
- "abusefilter-edit-builder-vars-article-text": "Заглавие на страницата (без именно пространство)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Пълно заглавие на страницата",
- "abusefilter-edit-builder-vars-article-views": "Прегледи на страницата",
+ "abusefilter-edit-builder-vars-summary": "Редактиране на резюме/причина",
+ "abusefilter-edit-builder-vars-page-id": "Номер на страница",
+ "abusefilter-edit-builder-vars-page-ns": "Именно пространство на страницата",
+ "abusefilter-edit-builder-vars-page-title": "Заглавие на страницата (без именно пространство)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Пълно заглавие на страницата",
"abusefilter-edit-builder-vars-movedfrom-id": "Идентификатор на изходната за преместването страница",
"abusefilter-edit-builder-vars-movedfrom-ns": "Именно пространство на изходната за преместването страница",
- "abusefilter-edit-builder-vars-movedfrom-text": "Заглавие на изходната за преместването страница",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Пълно заглавие на изходната за преместването страница",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Заглавие на изходната страница за преместването",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Пълно заглавие на изходната страница за преместването",
"abusefilter-edit-builder-vars-movedto-id": "Идентификатор на целевата за преместването страница",
"abusefilter-edit-builder-vars-movedto-ns": "Именно пространство на целевата за преместването страница",
- "abusefilter-edit-builder-vars-movedto-text": "Заглавие на целевата за преместването страница",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Пълно заглавие на целевата за преместването страница",
+ "abusefilter-edit-builder-vars-movedto-title": "Заглавие на целевата страница за преместването",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Пълно заглавие на целевата страница за преместването",
"abusefilter-edit-builder-vars-user-editcount": "Брой редакции на потребителя",
"abusefilter-edit-builder-vars-user-age": "Възраст на потребителската сметка",
"abusefilter-edit-builder-vars-user-name": "Име на потребителската сметка",
@@ -318,27 +347,29 @@
"abusefilter-history-filterid": "Филтър",
"abusefilter-history-select-legend": "Подробно търсене",
"abusefilter-history-select-user": "Потребител:",
+ "abusefilter-history-select-filter": "Идентификатор на филтър:",
"abusefilter-history-select-submit": "Прецизиране",
"abusefilter-history-diff": "Промени",
"abusefilter-history-error-hidden": "Търсеният филтър е скрит и не можете да преглеждате историята му.",
- "abusefilter-exception-unexpectedatend": "Неочаквано \"$2\" при знака $1.",
+ "abusefilter-exception-unexpectedatend": "Неочаквано „$2“ при знака $1.",
"abusefilter-exception-expectednotfound": "Очакваното $2 при знак $1 не беше открито (вместо това открито $3 $4).",
"abusefilter-exception-unrecognisedkeyword": "Неразпозната ключова дума $2, започваща от знака $1.",
- "abusefilter-exception-unexpectedtoken": "Неочакван идентификатор \"$3\" (от тип $2) при знак $1.",
+ "abusefilter-exception-unexpectedtoken": "Неочакван идентификатор „$3“ (от тип $2) при знак $1.",
"abusefilter-exception-unclosedstring": "Незатворен низ, започващ от знака $1.",
- "abusefilter-exception-invalidoperator": "Невалиден оператор \"$2\" при знака $1.",
+ "abusefilter-exception-invalidoperator": "Невалиден оператор „$2“ при знака $1.",
"abusefilter-exception-unrecognisedtoken": "Неразпознат идентификатор \"$2\" при знак $1.",
- "abusefilter-exception-noparams": "Липсват параметри за функцията \"$2\" при знака $1.",
- "abusefilter-exception-dividebyzero": "Опит $2 да се раздели на нула при знака $1.",
+ "abusefilter-exception-noparams": "Липсват параметри за функцията „$2“ при знака $1.",
+ "abusefilter-exception-dividebyzero": "Непозволен опит $2 да се раздели на нула при знак $1.",
"abusefilter-exception-unrecognisedvar": "Неразпозната променлива $2 при знака $1",
"abusefilter-exception-notenoughargs": "Недостатъчно аргументи за изпълнението на функция $2, извикана на знак $1.\n{{PLURAL:$3|Очакван е|Очаквани са}} $3 {{PLURAL:$3|аргумент|аргумента}}, {{PLURAL:$4|получен е|получени са}} $4",
- "abusefilter-exception-regexfailure": "Грешка в регулюрния израз \"$3\" при знак $1: \"$2\"",
- "abusefilter-exception-overridebuiltin": "Неоторизиран опит за предефиниране на вградената променлива \"$2\" при знак $1.",
+ "abusefilter-exception-regexfailure": "Грешка в регулярния израз „$3“ при знак $1: „$2“",
+ "abusefilter-exception-overridebuiltin": "Непозволено предефиниране на вградената променлива „$2“ при знак $1.",
"abusefilter-exception-outofbounds": "Опит да се извика несъществуващ елемент $2 от списък (с размер = $3) при знак $1.",
- "abusefilter-exception-notlist": "Неуспешен опит за извикане на елемент от масив при знак $1.",
+ "abusefilter-exception-notarray": "Неуспешен опит за извикане на елемент от масив при знак $1.",
"abusefilter-action-tag": "Етикет",
"abusefilter-action-throttle": "Ограничение",
"abusefilter-action-warn": "Предупреждение",
+ "abusefilter-action-blockautopromote": "Блокиране на autopromote",
"abusefilter-action-block": "Блокиране",
"abusefilter-action-degroup": "Премахване от групите",
"abusefilter-action-rangeblock": "Блокиране по IP диапазон",
@@ -350,14 +381,14 @@
"abusefilter-revert-periodstart": "Начало на периода:",
"abusefilter-revert-periodend": "Край на периода:",
"abusefilter-revert-search": "Избор на действия",
- "abusefilter-revert-filter": "Филтър:",
- "abusefilter-revert-preview-intro": "По-долу е даден списък от действията, предприети от филтъра срещу злоупотреби, които ще бъдат върнати с това действие.\nМоля, внимателно ги проверете, и щракнете \"{{int:abusefilter-revert-confirm}}\", за да потвърдите избора си.",
+ "abusefilter-revert-filter": "ID на филтъра:",
+ "abusefilter-revert-preview-intro": "По-долу е даден списък от действията, предприети от филтъра срещу злоупотреби, които ще бъдат върнати с това действие.\nМоля, внимателно ги проверете, и щракнете „{{int:abusefilter-revert-confirm}}“, за да потвърдите избора си.",
"abusefilter-revert-confirm": "Потвърждаване",
"abusefilter-revert-success": "Вие върнахте всички действия, предприети от филтъра срещу злоупотреби, поради [[Special:AbuseFilter/$1|филтър $2]].",
"abusefilter-revert-reason": "Автоматична отмяна на всички действия, извършени от филтъра срещу злоупотребите, по причина филтър $1.\nПосочена причина: $2",
"abusefilter-revert-reasonfield": "Причина:",
"abusefilter-test": "Тестване на филтъра спрямо предишни редакции",
- "abusefilter-test-intro": "Тази страница позволява да се провери филтър, въведен в долната кутия спрямо {{PLURAL:$1|последната|последните}} $1 {{PLURAL:$1|промяна|промени}}.\nЗа да заредите съществуващ филтър, въведете идентификатора му в кутията под текстовата кутия за редактиране и щракнете на бутона \"Зареждане\".",
+ "abusefilter-test-intro": "Тази страница позволява да се провери филтър, въведен в долната кутия спрямо {{PLURAL:$1|последната|последните}} $1 {{PLURAL:$1|промяна|промени}}.\nЗа да заредите съществуващ филтър, въведете идентификатора му в кутията под текстовата кутия за редактиране и щракнете на бутона „Зареждане“.",
"abusefilter-test-legend": "Изпробване на филтъра",
"abusefilter-test-load-filter": "Зареждане на филтър с ID:",
"abusefilter-test-submit": "Изпробване",
@@ -367,16 +398,24 @@
"abusefilter-test-period-end": "Промени, направени преди това:",
"abusefilter-test-page": "Промени по страницата:",
"abusefilter-test-shownegative": "Показване на промените, които не съвпадат с филтъра",
- "abusefilter-test-syntaxerr": "Въведеният филтър съдържа синтактична грешка.\nПълно обяснение за грешката е достъпно при щракване на бутона \"{{int:abusefilter-edit-check}}\".",
+ "abusefilter-test-syntaxerr": "Въведеният филтър съдържа синтактична грешка.\nПълно обяснение за грешката е достъпно при щракване на бутона „{{int:abusefilter-edit-check}}“.",
"abusefilter-test-badtitle": "Заглавието на страницата, което сте въвели, е невалидно. То може би съдържа един или повече знаци, които не могат да се използват в заглавия.",
+ "abusefilter-test-action": "Тип на действието:",
+ "abusefilter-test-search-type-all": "Всички действия",
+ "abusefilter-test-search-type-edit": "Редактирания",
+ "abusefilter-test-search-type-move": "Премествания",
+ "abusefilter-test-search-type-delete": "Изтривания",
+ "abusefilter-test-search-type-upload": "Качвания",
+ "abusefilter-test-search-type-createaccount": "Създавания на акаунти",
"abusefilter-changeslist-examine": "изследване",
"abusefilter-examine": "Проверка на отделните промени",
"abusefilter-examine-intro": "Тази страница дава възможност да се изследват променливите, генерирани от Филтъра срещу злоупотреби за дадена отделна редакция, и тя да бъде тествана по отношение на филтрите.",
"abusefilter-examine-legend": "Избор на промени",
+ "abusefilter-examine-diff": "URL на разликовата препратка:",
"abusefilter-examine-user": "Потребител:",
"abusefilter-examine-title": "Заглавие на страницата:",
"abusefilter-examine-submit": "Търсене",
- "abusefilter-examine-vars": "Променливи, генерирани с тази редакция",
+ "abusefilter-examine-vars": "Променливи, генерирани за тази редакция",
"abusefilter-examine-test": "Проверяване на редакцията спрямо филтър",
"abusefilter-examine-test-button": "Изпробване на филтъра",
"abusefilter-examine-match": "Филтърът сигнализира за съответствие при тази редакция.",
@@ -394,7 +433,8 @@
"abusefilter-topnav-import": "Внасяне на филтър",
"abusefilter-log-name": "Дневник на филтъра срещу злоупотреби",
"abusefilter-log-header": "Този дневник показва резюме на промените, направени във филтрите. За всички подробности, вижте [[Special:AbuseFilter/history|списъка]] с последните промени по филтрите.",
- "abusefilter-log-entry-modify": "промени $1 ($2)",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|създаде}} $4 ($5)",
+ "abusefilter-logentry-modify": "$1 {{GENDER:$2|промени}} $4 ($5)",
"abusefilter-log-noresults": "Няма резултати",
"abusefilter-diff-title": "Разлики между версиите",
"abusefilter-diff-item": "Елемент",
@@ -409,34 +449,6 @@
"abusefilter-import-submit": "Внасяне на данни",
"abusefilter-group-default": "По подразбиране",
"abusefilter-http-error": "Възникна HTTP грешка: $1",
- "apihelp-abusefiltercheckmatch-param-filter": "Пълния текст на филтър за проверка за съвпадение.",
- "apihelp-abusefilterchecksyntax-description": "Проверка на синтаксиса на филтър срещу злоупотреби.",
- "apihelp-abusefilterchecksyntax-example-1": "Проверка на синтаксиса на валиден филтър",
- "apihelp-abusefilterchecksyntax-example-2": "Проверка на синтаксиса на невалиден филтър",
- "apihelp-abusefilterevalexpression-description": "Изчисляване на израз от филтър срещу злоупотреби",
- "apihelp-abusefilterevalexpression-param-expression": "Израз за изчисляване.",
- "apihelp-abusefilterevalexpression-example-1": "Изчисляване на прост израз",
- "apihelp-abusefilterunblockautopromote-param-user": "Име на потребителя, който искате да отблокирате.",
- "apihelp-query+abusefilters-description": "Показване на детайлите на филтрите срещу злоупотреби",
- "apihelp-query+abusefilters-param-startid": "Идентификатор на филтъра, от който да започне изчислението.",
- "apihelp-query+abusefilters-param-endid": "Идентификатор на филтъра, при който да завърши изчислението.",
- "apihelp-query+abusefilters-param-show": "Показване само на филтри, които отговарят на тези критерии.",
- "apihelp-query+abusefilters-param-limit": "Максимален брой филтри в списъка.",
- "apihelp-query+abusefilters-param-prop": "Какви свойства трябва да се получат.",
- "apihelp-query+abusefilters-example-1": "Списък на активираните публични филтри",
- "apihelp-query+abusefilters-example-2": "Показване на допълнителна информация за филтри",
- "apihelp-query+abuselog-description": "Покажи събития, които отговарят на един от филтрите срещу злоупотреби.",
- "apihelp-query+abuselog-param-start": "Времева отметка, от която да започва изчислението.",
- "apihelp-query+abuselog-param-end": "Времева отметка, при която да спира изчислението.",
- "apihelp-query+abuselog-param-user": "Показване само на записи, свързани с даден потребител или IP адрес.",
- "apihelp-query+abuselog-param-title": "Показване само на записи, свързани с определена страница.",
- "apihelp-query+abuselog-param-filter": "Покажи само записи, които отговарят на даден ID на филтър.",
- "apihelp-query+abuselog-param-limit": "Максимален брой записи в списъка.",
- "apihelp-query+abuselog-param-prop": "Какви свойства трябва да се получат.",
- "apihelp-query+abuselog-example-1": "Покажи последните записи в дневника",
- "apihelp-query+abuselog-example-2": "Покажи последните записи в дневника на [[API]]",
- "apierror-abusefilter-canttest": "Нямате права за тестване на филтрите срещу злоупотреби.",
- "apierror-abusefilter-cantcheck": "Нямате права за проверка на синтаксиса на филтрите срещу злоупотреби.",
- "apierror-abusefilter-nosuchlogid": "В дневника за злоупотреби не съществува запис с ID $1.",
- "apierror-abusefilter-badsyntax": "Синтаксисът на филтъра е невалиден"
+ "abusefilter-log-details-id": "Номер на записа",
+ "abusefilter-log-ip-not-available": "Недостъпен"
}
diff --git a/AbuseFilter/i18n/bgn.json b/AbuseFilter/i18n/bgn.json
index 4a6cfb00..2bb4d311 100644
--- a/AbuseFilter/i18n/bgn.json
+++ b/AbuseFilter/i18n/bgn.json
@@ -13,8 +13,6 @@
"abusefilter-log-noactions": "(هیچ‌)",
"abusefilter-log-hidden": "(چیهرین مورد)",
"abusefilter-log-hide-reason": "دلیل:",
- "abusefilter-logentry-suppress": "«[[$1]]» ئا چیهر دات",
- "abusefilter-logentry-unsuppress": "«[[$1]]» ئا درا کورت",
"abusefilter-list": "موچین فیلتران",
"abusefilter-list-id": "فیلتر ئی آی دی",
"abusefilter-list-edit": "ایڈیٹ",
@@ -46,8 +44,7 @@
"abusefilter-edit-builder-op-bool-and": "و (&)",
"abusefilter-edit-builder-op-bool-or": "یا (|)",
"abusefilter-edit-builder-misc-stringlit": "متنی ئین رشته (\"\")",
- "abusefilter-edit-builder-vars-article-id": "تاکدیمی آی ڈی",
- "abusefilter-edit-builder-vars-article-views": "تاکدیمئ دیسته بوتین",
+ "abusefilter-edit-builder-vars-page-id": "تاکدیمی آی ڈی",
"abusefilter-history-hidden": "چیهر داتین",
"abusefilter-history-global": "سراسری",
"abusefilter-history-timestamp": "وخت",
diff --git a/AbuseFilter/i18n/bn.json b/AbuseFilter/i18n/bn.json
index 314b3a07..575ae4dc 100644
--- a/AbuseFilter/i18n/bn.json
+++ b/AbuseFilter/i18n/bn.json
@@ -9,22 +9,24 @@
"Samritmaity",
"Wikitanvir",
"Aftabuzzaman",
- "আজিজ"
+ "আজিজ",
+ "আফতাবুজ্জামান"
]
},
"abusefilter-desc": "সম্পাদনায় স্বয়ংক্রিয় অনুসন্ধানমূলক পদ্ধতি প্রযোজ্য।",
- "abusefilter": "অপব্যবহার ফিল্টার কনফিগারেশন",
+ "abusefilter": "অপব্যবহার ছাঁকনির কনফিগারেশন",
"abuselog": "অপব্যবহার লগ",
- "abusefilter-blocker": "অপব্যবহার ফিল্টার",
- "abusefilter-accountreserved": "অপব্যবহার ফিল্টারের জন্য এই একাউন্ট নামটি সংরক্ষিত।",
+ "abusefilter-disallowed": "এই কর্মটি স্বয়ংক্রিয়ভাবে ক্ষতিকারক হিসাবে সনাক্ত করা হয়েছে, এবং তাই এটি আটকানো হয়েছে।\nআপনি যদি বিশ্বাস করেন যে আপনার পদক্ষেপ গঠনমূলক ছিল, তাহলে আপনি কি করার চেষ্টা করছেন তা প্রশাসককে জানান।\nঅপব্যবহারের নিয়মের একটি সংক্ষিপ্ত বিবরণ যার সাথে আপনার কর্ম মিলেছে: $1",
+ "abusefilter-blocker": "অপব্যবহার ছাঁকনি",
+ "abusefilter-accountreserved": "অপব্যবহার ছাঁকনির জন্য এই একাউন্ট নামটি সংরক্ষিত।",
"right-abusefilter-modify": "অপব্যবহার ছাঁকনি পরিবর্তন",
- "right-abusefilter-view": "অপব্যবহার ফিল্টার দেখাও",
+ "right-abusefilter-view": "অপব্যবহার ছাঁকনি দেখুন",
"right-abusefilter-log": "অপব্যবহার লগ দেখা",
"right-abusefilter-log-detail": "অপব্যবহার লগটি বিস্তারিতভাবে দেখাও",
"right-abusefilter-private": "অপব্যবহার লগে ব্যক্তিগত তথ্যাদি দেখাও",
- "right-abusefilter-modify-restricted": "সীমাবদ্ধ অ্যাকশন সহকারে অপব্যবহার ফিল্টার পরিবর্তন",
- "right-abusefilter-revert": "প্রদানকৃত অপব্যবহার ফিল্টারের সকল পরিবর্তন বাতিল",
- "right-abusefilter-view-private": "ব্যক্তিগত হিসেবে চিহ্নিত অপব্যবহার ফিল্টার দেখাও",
+ "right-abusefilter-modify-restricted": "সীমাবদ্ধ কার্য সহকারে অপব্যবহার ছাঁকনি পরিবর্তন করা",
+ "right-abusefilter-revert": "প্রদানকৃত অপব্যবহার ছাঁকনির সকল পরিবর্তন বাতিল করা",
+ "right-abusefilter-view-private": "ব্যক্তিগত হিসেবে চিহ্নিত অপব্যবহার ছাঁকনি দেখুন",
"right-abusefilter-hide-log": "অপব্যবহার লগের সংযোজন লুকাও",
"right-abusefilter-hidden-log": "লুকায়িত অপব্যবহার লগের সংযোজনটি দেখাও",
"action-abusefilter-modify": "অপব্যবহার ছাঁকনি পরিবর্তন করার",
@@ -32,17 +34,29 @@
"action-abusefilter-log": "অপব্যবহার লগ দেখার",
"action-abusefilter-log-detail": "অপব্যবহার লগের সংযোজন বিস্তারিতভাবে দেখাও",
"action-abusefilter-private": "অপব্যবহার লগে ব্যক্তিগত তথ্যাদি দেখাও",
- "action-abusefilter-modify-restricted": "সীমাবদ্ধ অ্যাকশন সহকারে অপব্যবহার ফিল্টার পরিবর্তন",
- "action-abusefilter-revert": "প্রদানকৃত অপব্যবহার ফিল্টারের সকল পরিবর্তন বাতিল",
- "action-abusefilter-view-private": "ব্যক্তিগত হিসেবে চিহ্নিত অপব্যবহার ফিল্টার দেখাও",
- "abusefilter-log": "অপব্যবহার ফিল্টার লগ",
+ "action-abusefilter-modify-restricted": "সীমাবদ্ধ কার্য সহকারে অপব্যবহার ছাঁকনি পরিবর্তন করার",
+ "action-abusefilter-revert": "প্রদানকৃত অপব্যবহার ছাঁকনির সকল পরিবর্তন বাতিল করার",
+ "action-abusefilter-view-private": "ব্যক্তিগত হিসেবে চিহ্নিত অপব্যবহার ছাঁকনি দেখার",
+ "abusefilter-log": "অপব্যবহার ছাঁকনি লগ",
"abusefilter-log-search": "অপব্যবহার লগে অনুসন্ধান করুন",
"abusefilter-log-search-user": "ব্যবহারকারী:",
- "abusefilter-log-search-filter": "ফিল্টার আইডি (পাইপ দিয়ে আলাদা):",
+ "abusefilter-log-search-filter": "ছাঁকনির আইডি (পাইপ দিয়ে আলাদা):",
"abusefilter-log-search-title": "শিরোনাম:",
"abusefilter-log-search-wiki": "উইকি:",
+ "abusefilter-log-search-impact": "প্রভাব:",
+ "abusefilter-log-search-impact-all": "সব কার্য",
+ "abusefilter-log-search-impact-saved": "শুধুমাত্র সংরক্ষিত পরিবর্তনগুলি",
+ "abusefilter-log-search-impact-not-saved": "অসংরক্ষিত পরিবর্তনগুলি",
+ "abusefilter-log-search-entries-label": "দৃশ্যমানতা:",
+ "abusefilter-log-search-entries-all": "সকল ভুক্তি",
+ "abusefilter-log-search-entries-hidden": "লুকানো ভুক্তি শুধুমাত্র",
+ "abusefilter-log-search-entries-visible": "দৃশ্যমান ভুক্তি শুধুমাত্র",
+ "abusefilter-log-search-action-other": "অন্য",
+ "abusefilter-log-search-action-taken-label": "গৃহীত পদক্ষেপ:",
+ "abusefilter-log-search-action-taken-any": "যেকোন",
"abusefilter-log-search-submit": "অনুসন্ধান",
- "abusefilter-log-detailedentry-global": "বৈশ্বিক ফিল্টার $1",
+ "abusefilter-log-detailedentry-meta": "$1: $2 $5 পাতায় \"$4\" কর্ম {{GENDER:$9|সঞ্চালন}} করার সময় $3 {{GENDER:$9|সক্রিয়}} করেছেন।\nগৃহীত পদক্ষেপ: $6;\nছাঁকনির বিবরণ: $7 ($8)",
+ "abusefilter-log-detailedentry-global": "বৈশ্বিক ছাঁকনি $1",
"abusefilter-log-detailedentry-local": "ছাঁকনি নং $1",
"abusefilter-log-detailslink": "বিস্তারিত",
"abusefilter-log-diff": "পার্থক্য",
@@ -51,24 +65,25 @@
"abusefilter-log-details-var": "চলক",
"abusefilter-log-details-val": "মান",
"abusefilter-log-details-vars": "অ্যাকশন প্যারামিটার",
- "abusefilter-log-details-private": "ব্যক্তিগত ডাটা",
+ "abusefilter-log-details-private": "ব্যক্তিগত লগের বিস্তারিত",
"abusefilter-log-details-ip": "আইপি ঠিকানা সংরক্ষন করা হচ্ছে",
+ "abusefilter-log-details-checkuser": "ব্যবহারকারী পরীক্ষণ",
"abusefilter-log-noactions": "কিছু নয়",
"abusefilter-log-details-diff": "সম্পাদনার সময় পরিবর্তিত হয়েছে",
"abusefilter-log-linkoncontribs": "অপব্যবহার লগ",
"abusefilter-log-linkoncontribs-text": "{{GENDER:$1|এই ব্যবহারকারীর}} জন্য অপব্যবহার লগ",
+ "abusefilter-log-linkonhistory": "অপব্যবহার লগ দেখুন",
"abusefilter-log-hidden": "(সংযোজন লুকায়িত)",
"abusefilter-log-details-hidden": "আপনি এই সংযোজনটি বিস্তারিত দেখতে পারবেন না, কারণ এটি জনসাধারণের প্রদর্শনের থেকে লুকানো রয়েছে।",
"abusefilter-log-hide-legend": "লগ সংযোজন লুকাও",
"abusefilter-log-hide-id": "লগ সংযোজনের আইডি:",
"abusefilter-log-hide-hidden": "এই সংযোজনটি জনসাধারণের কাছ থেকে লুকাও",
"abusefilter-log-hide-reason": "কারণ:",
+ "abusefilter-log-hide-reason-other": "অন্যান্য/অতিরিক্ত কারণ:",
"abusefilter-log-hide-forbidden": "আপনার অপব্যবহার লগ সংযোজন লুকানোর অধিকার নেই।",
- "abusefilter-logentry-suppress": "\"[[$1]]\" লুকাও",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\" দেখাও",
- "abusefilter-management": "অপব্যবহার ফিল্টার ব্যবস্থাপনা",
- "abusefilter-list": "সকল ফিল্টার",
- "abusefilter-list-id": "ফিল্টার আইডি",
+ "abusefilter-management": "অপব্যবহার ছাঁকনি ব্যবস্থাপনা",
+ "abusefilter-list": "সকল ছাঁকনি",
+ "abusefilter-list-id": "ছাঁকনির আইডি",
"abusefilter-list-status": "অবস্থা",
"abusefilter-list-public": "জনসাধারণের জন্য বিবরণ",
"abusefilter-list-consequences": "ফলাফল",
@@ -78,61 +93,72 @@
"abusefilter-list-details": "বিস্তারিত",
"abusefilter-list-limit": "প্রতি পাতায় নম্বর:",
"abusefilter-list-lastmodified": "সর্বশেষ পরিবর্তন",
- "abusefilter-list-group": "ফিল্টার গ্রুপ",
+ "abusefilter-list-group": "ছাঁকনির দল",
"abusefilter-hidden": "ব্যক্তিগত",
- "abusefilter-unhidden": "পাবলিক",
+ "abusefilter-unhidden": "প্রকাশ্য",
"abusefilter-enabled": "সক্রিয়",
"abusefilter-deleted": "অপসারণ",
"abusefilter-disabled": "নিস্ক্রিয়",
"abusefilter-hitcount": "$1টি {{PLURAL:$1|হিট}}",
- "abusefilter-new": "নতুন ফিল্টার তৈরি করুন",
- "abusefilter-return": "ফিল্টার ব্যবস্থাপনায় ফিরে যান",
+ "abusefilter-new": "নতুন ছাঁকনি তৈরি করুন",
+ "abusefilter-return": "ছাঁকনি ব্যবস্থাপনায় ফিরে যান",
"abusefilter-status-global": "বৈশ্বিক",
"abusefilter-list-options": "অপশন",
- "abusefilter-list-options-deleted": "অপসারিত ফিল্টার:",
- "abusefilter-list-options-deleted-only": "শুধুমাত্র অপসারিত ফিল্টারগুলো দেখাও",
- "abusefilter-list-options-deleted-hide": "অপসারিত ফিল্টারগুলো লুকাও",
- "abusefilter-list-options-deleted-show": "অপসারিত ফিল্টারগুলো যোগ করো",
+ "abusefilter-list-options-deleted": "অপসারিত ছাঁকনি:",
+ "abusefilter-list-options-deleted-only": "শুধুমাত্র অপসারিত ছাঁকনিগুলো দেখান",
+ "abusefilter-list-options-deleted-hide": "অপসারিত ছাঁকনিগুলো লুকান",
+ "abusefilter-list-options-deleted-show": "অপসারিত ছাঁকনিগুলো যোগ করুন",
"abusefilter-list-options-scope-local": "স্থানীয় নিয়ম শুধুমাত্র",
"abusefilter-list-options-scope-global": "বৈশ্বিক নিয়ম শুধুমাত্র",
"abusefilter-list-options-scope-all": "স্থানীয় এবং বৈশ্বিক নিয়ম",
- "abusefilter-list-options-disabled": "ফিল্টারগুলো নিষ্ক্রিয় করো",
- "abusefilter-list-options-hidedisabled": "নিষ্ক্রিয় ফিল্টারগুলো লুকাও",
+ "abusefilter-list-options-further-options": "আরও বিকল্প:",
+ "abusefilter-list-options-hidedisabled": "নিষ্ক্রিয় ছাঁকনিগুলো লুকান",
+ "abusefilter-list-options-searchoptions": "অনুসন্ধান মোড:",
"abusefilter-list-options-submit": "হালনাগাদ",
"abusefilter-tools-expr": "এক্সপ্রেশন পরীক্ষক",
+ "abusefilter-tools-submitexpr": "মূল্যায়ন করুন",
"abusefilter-tools-reautoconfirm-user": "ব্যবহারকারী:",
"abusefilter-tools-reautoconfirm-submit": "পুনরায়-স্বয়ংক্রিয়ভাবে নিশ্চিত",
- "abusefilter-edit": "অপব্যবহার ফিল্টার সম্পাদনা করছেন",
- "abusefilter-edit-subtitle": "$1 ফিল্টার সম্পাদনা",
- "abusefilter-edit-subtitle-new": "নতুন ফিল্টার তৈরি করুন",
+ "abusefilter-status": "বিগত $1টি {{PLURAL:$1|কার্যে}}, $2টি ($3%) শর্তের সীমা $4-এ পৌঁছেছে, এবং $5টি ($6%) বর্তমানে সক্রিয় ছাঁকনিগুলির একটির সাথে মিলেছে।",
+ "abusefilter-edit": "অপব্যবহার ছাঁকনি সম্পাদনা করছেন",
+ "abusefilter-edit-subtitle": "$1 ছাঁকনি সম্পাদনা করছেন",
+ "abusefilter-edit-subtitle-new": "ছাঁকনি তৈরি করছেন",
"abusefilter-edit-status-label": "পরিসংখ্যান:",
- "abusefilter-edit-new": "নতুন ফিল্টার",
- "abusefilter-edit-save": "ফিল্টার সংরক্ষণ",
- "abusefilter-edit-id": "ফিল্টার আইডি:",
+ "abusefilter-edit-status": "বিগত $1টি {{PLURAL:$1|কার্যে}}, এই ছাঁকনিটি $2 বার ($3%) মিলেছে।",
+ "abusefilter-edit-new": "নতুন ছাঁকনি",
+ "abusefilter-edit-save": "ছাঁকনি সংরক্ষণ করুন",
+ "abusefilter-edit-id": "ছাঁকনির আইডি:",
+ "abusefilter-edit-switch-editor": "সম্পাদক পরিবর্তন করুন",
"abusefilter-edit-description": "বিবরণ:\n:''(জনসাধারণের জন্য উন্মুক্ত)''",
- "abusefilter-edit-group": "ফিল্টার গ্রুপ:",
+ "abusefilter-edit-field-description": "বিবরণ",
+ "abusefilter-edit-group": "ছাঁকনির দল:",
"abusefilter-edit-flags": "পতাকাসমূহ:",
- "abusefilter-edit-enabled": "এই ফিল্টারটি সক্রিয় করো",
- "abusefilter-edit-deleted": "অপসারিত হিসেবে চিহ্নিত করো",
- "abusefilter-edit-hidden": "জনসাধারণের প্রদর্শনক্ষমতা থেকে এই ফিল্টারটি লুকাও",
- "abusefilter-edit-global": "বৈশ্বিক ফিল্টার",
+ "abusefilter-edit-enabled": "এই ছাঁকনিটি সক্রিয় করুন",
+ "abusefilter-edit-deleted": "অপসারিত হিসেবে চিহ্নিত করুন",
+ "abusefilter-edit-hidden": "জনসাধারণের প্রদর্শনক্ষমতা থেকে এই ছাঁকনিটি লুকান",
+ "abusefilter-edit-global": "বৈশ্বিক ছাঁকনি",
"abusefilter-edit-rules": "শর্ত:",
+ "abusefilter-edit-field-conditions": "শর্তাবলি",
"abusefilter-edit-notes": "টীকা:",
- "abusefilter-edit-lastmod": "ফিল্টার সর্বশেষ পরিবর্তিত হয়েছিলো:",
- "abusefilter-edit-lastmod-text": "$1-এর মাধ্যমে $2",
- "abusefilter-edit-hitcount": "ফিল্টার হিট:",
- "abusefilter-edit-consequences": "সাদৃশ্যতা পাওয়া গেলে অ্যাকশন নেওয়া হয়েছে",
+ "abusefilter-edit-lastmod": "ছাঁকনি সর্বশেষ পরিবর্তিত হয়েছিলো:",
+ "abusefilter-edit-lastmod-text": "$1 তারিখে $2 কর্তৃক",
+ "abusefilter-edit-hitcount": "ছাঁকনির হিট:",
+ "abusefilter-edit-consequences": "মিল পাওয়া গেলে যে পদক্ষেপ নেয়া হয়েছে",
"abusefilter-edit-throttle-period": "সময়:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|সেকেন্ড}}",
+ "abusefilter-edit-throttle-ip": "আইপি ঠিকানা",
+ "abusefilter-edit-throttle-editcount": "সম্পাদনা গণনা",
+ "abusefilter-edit-throttle-page": "পাতা",
"abusefilter-edit-warn-other": "অন্য বার্তা",
- "abusefilter-edit-warn-actions": "অ্যাকশনসমূহ:",
+ "abusefilter-edit-warn-actions": "কার্যসমূহ:",
"abusefilter-edit-warn-preview": "নির্বাচিত বার্তার প্রাকদর্শন",
"abusefilter-edit-warn-edit": "নির্বাচিত বার্তা তৈরি/সম্পাদনা করুন",
- "abusefilter-edit-main": "ফিল্টার প্যারামিটারসমূহ",
- "abusefilter-edit-done-subtitle": "ফিল্টার সম্পাদিত",
- "abusefilter-edit-viewhistory": "এই ফিল্টারের ইতিহাস দেখুন",
+ "abusefilter-edit-tag-tag": "যোগের জন্য [[Special:Tags|ট্যাগ]]:",
+ "abusefilter-edit-main": "ছাঁকনির প্যারামিটারসমূহ",
+ "abusefilter-edit-done-subtitle": "ছাঁকনি সম্পাদিত হয়েছে",
+ "abusefilter-edit-viewhistory": "এই ছাঁকনির ইতিহাস দেখুন",
"abusefilter-edit-history": "ইতিহাস:",
"abusefilter-edit-tools": "সরঞ্জাম:",
+ "abusefilter-edit-export": "এই ছাঁকনিটি অন্য উইকিতে রপ্তানি করুন",
"abusefilter-edit-builder-op-arithmetic-addition": "যোগ (+)",
"abusefilter-edit-builder-op-arithmetic-subtraction": "বিয়োগ (-)",
"abusefilter-edit-builder-op-arithmetic-multiplication": "গুন (*)",
@@ -140,8 +166,8 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "মডুলো (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "ঘাত (**)",
"abusefilter-edit-builder-group-op-comparison": "তুলনামূলক অপারেটরসমূহ",
- "abusefilter-edit-builder-op-comparison-equal": "সমান (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "সমান নয় (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "মান এটির সমান (==)",
+ "abusefilter-edit-builder-op-comparison-notequal": "মান এর সমান নয় (!=)",
"abusefilter-edit-builder-op-comparison-lt": "থেকে কম (<)",
"abusefilter-edit-builder-op-comparison-gt": "থেকে বেশি (>)",
"abusefilter-edit-builder-op-comparison-lte": "থেকে কম বা সমান (<=)",
@@ -157,11 +183,13 @@
"abusefilter-edit-builder-misc-irlike": "সাদৃশ্যপূর্ণ রিজেক্স, কেস সেনসিটিভ (irlike)",
"abusefilter-edit-builder-group-funcs": "ফাংশন",
"abusefilter-edit-builder-funcs-length": "স্ট্রিংয়ের দৈর্ঘ্য (length)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "OR মোডে একাধিক উপস্ট্রিংয়ের জন্য একটি স্ট্রিং স্বাভাবিক করুন ও অনুসন্ধান করুন (ccnorm_contains_any)",
"abusefilter-edit-builder-funcs-set_var": "চলক নির্ধারণ (set_var)",
"abusefilter-edit-builder-group-vars": "চলক",
"abusefilter-edit-builder-vars-accountname": "অ্যাকাউন্টের নাম (অ্যাকাউন্ট তৈরির সময়)",
"abusefilter-edit-builder-vars-timestamp": "পরিবর্তনের ইউনিক্স সময়বার্তা",
- "abusefilter-edit-builder-vars-action": "অ্যাকশন",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "লগের সময় ও তারিখ",
+ "abusefilter-edit-builder-vars-action": "কার্য",
"abusefilter-edit-builder-vars-addedlines": "সম্পাদনায় লাইন যোগ করা হয়েছে",
"abusefilter-edit-builder-vars-delta": "সম্পাদনায় আকৃতি পরিবর্তন করা হয়েছে",
"abusefilter-edit-builder-vars-newsize": "নতুন পাতার আকৃতি",
@@ -170,15 +198,14 @@
"abusefilter-edit-builder-vars-new-content-model": "নতুন বিষয়বস্তুর মডেল",
"abusefilter-edit-builder-vars-removedlines": "সম্পাদনায় লাইন অপসারণ করা হয়েছে",
"abusefilter-edit-builder-vars-summary": "সম্পাদনা সারাংশ/কারণ",
- "abusefilter-edit-builder-vars-article-id": "পাতার আইডি",
- "abusefilter-edit-builder-vars-article-ns": "পাতার নামস্থান",
- "abusefilter-edit-builder-vars-article-text": "পাতার শিরোনাম (নামস্থান ছাড়া)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "পাতার পুরো শিরোনাম",
- "abusefilter-edit-builder-vars-article-views": "পাতা দর্শন",
+ "abusefilter-edit-builder-vars-page-id": "পাতার আইডি",
+ "abusefilter-edit-builder-vars-page-ns": "পাতার নামস্থান",
+ "abusefilter-edit-builder-vars-page-title": "পাতার শিরোনাম (নামস্থান ছাড়া)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "পাতার পুরো শিরোনাম",
"abusefilter-edit-builder-vars-movedfrom-id": "সরিয়ে নেওয়া পাতার উৎস পাতার আইডি",
"abusefilter-edit-builder-vars-movedfrom-ns": "সরিয়ে নেওয়া পাতার উৎস পাতার নামস্থান",
- "abusefilter-edit-builder-vars-movedfrom-text": "সরিয়ে নেওয়া পাতার উৎস পাতার শিরোনাম",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "সরিয়ে নেওয়া পাতার উৎস পাতার পূর্ণ শিরোনাম",
+ "abusefilter-edit-builder-vars-movedfrom-title": "সরিয়ে নেওয়া পাতার উৎস পাতার শিরোনাম",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "সরিয়ে নেওয়া পাতার উৎস পাতার পূর্ণ শিরোনাম",
"abusefilter-edit-builder-vars-user-editcount": "ব্যবহারকারীর সম্পাদনা সংখ্যা",
"abusefilter-edit-builder-vars-user-age": "ব্যবহারকারীর বয়স",
"abusefilter-edit-builder-vars-user-name": "ব্যবহারকারীর নাম",
@@ -190,7 +217,8 @@
"abusefilter-edit-builder-vars-old-text": "সম্পাদনার পূর্বে, পুরোনো পাতার উইকিটেক্সট",
"abusefilter-edit-builder-vars-new-text": "সম্পাদনার পর, নতুন পাতার উইকিটেক্সট",
"abusefilter-edit-builder-vars-restrictions-edit": "পাতার সুরক্ষা পর্যায় সম্পাদনা",
- "abusefilter-filter-log": "সাম্প্রতিক ফিল্টার পরিবর্তন",
+ "abusefilter-filter-log": "সাম্প্রতিক ছাঁকনি পরিবর্তন",
+ "abusefilter-history": "$1 নং অপব্যবহার ছাঁকনির পরিবর্তনের ইতিহাস",
"abusefilter-history-foruser": "$1 কর্তৃক পরিবর্তন হয়েছে",
"abusefilter-history-hidden": "লুকায়িত",
"abusefilter-history-enabled": "সক্রিয় করা",
@@ -198,13 +226,14 @@
"abusefilter-history-timestamp": "সময়",
"abusefilter-history-user": "ব্যবহারকারী",
"abusefilter-history-flags": "পতাকা",
- "abusefilter-history-filter": "ফিল্টারের নিয়ম",
+ "abusefilter-history-filter": "ছাঁকনির নিয়ম",
"abusefilter-history-comments": "মন্তব্য",
"abusefilter-history-actions": "কর্ম",
- "abusefilter-history-backedit": "ফিল্টার সম্পাদনায় ফিরে যান",
+ "abusefilter-history-backedit": "ছাঁকনি সম্পাদনায় ফিরে যান",
"abusefilter-history-deleted": "অপসারিত",
- "abusefilter-history-filterid": "ফিল্টার",
+ "abusefilter-history-filterid": "ছাঁকনি",
"abusefilter-history-select-user": "ব্যবহারকারী:",
+ "abusefilter-history-select-filter": "ছাঁকনির আইডি:",
"abusefilter-history-diff": "পরিবর্তনসমূহ",
"abusefilter-action-tag": "ট্যাগ",
"abusefilter-action-throttle": "থ্রটল",
@@ -213,29 +242,42 @@
"abusefilter-action-degroup": "দল থেকে অপসারণ",
"abusefilter-action-rangeblock": "রেঞ্জ-ব্লক",
"abusefilter-action-disallow": "বর্জন",
- "abusefilter-revert-title": "ফিল্টার $1-এর সকল সম্পাদনা বাতিল করো",
+ "abusefilter-revert-title": "ছাঁকনি $1 দ্বারা করা সকল সম্পাদনা বাতিল করুন",
"abusefilter-revert-periodstart": "সময় শুরু:",
- "abusefilter-revert-filter": "ফিল্টার:",
+ "abusefilter-revert-filter": "ছাঁকনির আইডি:",
"abusefilter-revert-confirm": "নিশ্চিত করুন",
"abusefilter-revert-reasonfield": "কারণ:",
"abusefilter-test-submit": "পরীক্ষণ",
"abusefilter-test-load": "লোড",
+ "abusefilter-test-nobots": "বটের করা সম্পাদনা লুকান",
+ "abusefilter-test-action": "কার্যের ধরন:",
+ "abusefilter-test-search-type-all": "সব কার্য",
+ "abusefilter-test-search-type-edit": "সম্পাদনা",
+ "abusefilter-test-search-type-move": "স্থানান্তর",
+ "abusefilter-test-search-type-delete": "অপসারণ",
+ "abusefilter-test-search-type-upload": "আপলোড",
+ "abusefilter-test-search-type-createaccount": "অ্যাকাউন্ট সৃষ্টি",
"abusefilter-examine-legend": "পরিবর্তন নির্বাচন",
"abusefilter-examine-diff": "পরিবর্তনের ইউআরএল:",
"abusefilter-examine-user": "ব্যবহারকারী:",
"abusefilter-examine-title": "পাতার শিরোনাম:",
"abusefilter-examine-submit": "অনুসন্ধান",
+ "abusefilter-topnav": "'''অপব্যবহার ছাঁকনি পরিভ্রমণ'''",
"abusefilter-topnav-home": "প্রধান পাতা",
+ "abusefilter-topnav-examine": "অতীতের সম্পাদনাগুলি পরীক্ষা করুন",
"abusefilter-topnav-log": "অপব্যবহার লগ",
- "abusefilter-topnav-import": "ফিল্টার আমদানী",
- "abusefilter-log-name": "অপব্যবহার ফিল্টার লগ",
+ "abusefilter-topnav-import": "ছাঁকনি আমদানি করুন",
+ "abusefilter-log-name": "অপব্যবহার ছাঁকনি লগ",
"abusefilter-logentry-modify": "$1 $4 {{GENDER:$2|সম্পাদনা করেছেন}} ($5)",
"abusefilter-log-noresults": "ফলাফল নাই",
+ "abusefilter-diff-title": "সংস্করণগুলির মধ্যে পার্থক্য",
"abusefilter-diff-version": "$2 {{GENDER:$3|কর্তৃক}} $1 থেকে সংস্করণ",
"abusefilter-diff-info": "সাধারণ তথ্য",
- "abusefilter-diff-pattern": "ফিল্টারের শর্তসমূহ",
- "abusefilter-diff-backhistory": "ফিল্টার ইতিহাসে ফিরে যান",
+ "abusefilter-diff-pattern": "ছাঁকনির শর্তসমূহ",
+ "abusefilter-diff-backhistory": "ছাঁকনির ইতিহাসে ফিরে যান",
+ "abusefilter-diff-prev": "পুরানো পরিবর্তন",
"abusefilter-import-submit": "উপাত্ত আমদানী",
"abusefilter-group-default": "পূর্বনির্ধারিত",
- "abusefilter-http-error": "একটি HTTP ত্রুটি ঘটেছে: $1।"
+ "abusefilter-http-error": "একটি HTTP ত্রুটি ঘটেছে: $1।",
+ "abusefilter-log-ip-not-available": "উপলব্ধ নয়"
}
diff --git a/AbuseFilter/i18n/br.json b/AbuseFilter/i18n/br.json
index a2316ffe..4c4abf5b 100644
--- a/AbuseFilter/i18n/br.json
+++ b/AbuseFilter/i18n/br.json
@@ -13,7 +13,6 @@
"abusefilter": "Kefluniadur ar siloù a-enep ar gwallimplij",
"abuselog": "Marilh ar siloù a-enep ar gwallimplij",
"abusefilter-intro": "Degemer mat en etrefas merañ ar siloù drougimplij.\nUr gwikedre meziantel emgefre eo ar sil a-enep an drougimplij. Talvezout a ra da lakaat hentennoù klask emgefre raktermenet evit pep ober.\nDiskouez a ra an etrefas-mañ ur roll eus ar siloù termenet, hag aotren a ra degas kemmoù enno.",
- "abusefilter-mustbeeditor": "Evit abegoù surentez, n'eus nemet an implijerien ganto ar gwir da cheñch ar siloù a-enep d'ar gwallimplij a c'hell implijout an etrefas-mañ.",
"abusefilter-warning": "'''Diwallit''': an ober-mañ a zo anavezet evit bezañ noazus.\nAr c'hemmoù diyaus a vo nullet raktal,\nstanket e vo ho kont pe ho chomlec'h IP ma skrivit bleupajoù lies pe dismegañsus.\nMa soñjit eo ar c'hemm yaus, galloud a rit kinnig anezhañ en-dro evit kadarnaat.\nUn diskrivadur berr eus ar reolenn drougimplij dinoet gantañ ho ober : $1",
"abusefilter-disallowed": "Anavezet eo an ober-mañ evit bezañ noazus,\nharzet eo bet dre-se.\nMa soñj deoc'h e oa reizh ho kemm, trugarez da vont e darempred gant ur merour, a lavarit ar pezh ho poa c'hoant d'ober.\nSetu un deskrivadur berr eus ar reolenn diskoachañ an drougimplij eo bet dinoet ganti hoc'h oberiadenn : $1",
"abusefilter-blocked-display": "An ober-mañ a zo anavezet evit bezañ noazus,\nharzet oc'h bet dija war ar poent-mañ.\nDa eil, evit gwareziñ {{SITENAME}}, ho kont implijer hag ho holl chomlec'hioù IP implijet ganeoc'h a zo bet stanket.\nMard eo ur fazi, trugarez da vont e darempred gant ur merour.\nUn diskrivadur berr eus ar reolenn drougimplij dinoet gantañ ho ober : $1",
@@ -75,8 +74,6 @@
"abusefilter-log-hide-hidden": "Kuzhat ar moned-mañ eus ar selloù publik",
"abusefilter-log-hide-reason": "Abeg :",
"abusefilter-log-hide-forbidden": "N'hoc'h eus ket ar gwir da guzhat enmontoù e deizlevr ar gwallimplij.",
- "abusefilter-logentry-suppress": "kuzhet \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "diguzhat \"[[$1]]\"",
"abusefilter-management": "Merañ ar sil a-enep ar gwallimplij",
"abusefilter-list": "An holl siloù",
"abusefilter-list-id": "Niv. ar sil",
@@ -107,7 +104,6 @@
"abusefilter-list-options-scope": "Diskouez ar siloù adalek :",
"abusefilter-list-options-scope-local": "Wiki lec'hel",
"abusefilter-list-options-scope-global": "Reolennoù hollek",
- "abusefilter-list-options-disabled": "Siloù diweredekaet :",
"abusefilter-list-options-hidedisabled": "Kuzhat ar siloù diweredekaet",
"abusefilter-list-options-submit": "Hizivaat",
"abusefilter-tools-text": "Sed aze binviji hag a c'hell servij evit da geriañ ha da zidraenañ ar siloù gwallimplij.",
@@ -127,7 +123,6 @@
"abusefilter-edit-status-label": "Stadegoù :",
"abusefilter-edit-status": "E-barzh an {{PLURAL:$1|ober diwezhañ|$1 ober diwezhañ}}, ar sil-mañ en deus dinoet $2 ($3%).",
"abusefilter-edit-status-profile": "E-barzh an {{PLURAL:$1|ober diwezhañ|$1 ober diwezhañ}}, ar sil-mañ en deus dinoet $2 ($3%).\nDre geidenn, an padelezh da lañsañ anezhañ a zo $4ms, hag implijout a ra $5 {{PLURAL:$5|amplegad|amplegad}} eus termen an amplegadoù.",
- "abusefilter-edit-throttled": "'''Diwallit''' : ar sil-mañ a zo bet diweredekaet en un doare emgefrek dre surentez.\nTizhout a ra termen an dinoiñ muioc'h evit $1% eus an oberoù.",
"abusefilter-edit-new": "Sil nevez",
"abusefilter-edit-save": "Enrollañ ar sil",
"abusefilter-edit-id": "Niv. ar sil :",
@@ -154,7 +149,6 @@
"abusefilter-edit-action-tag": "Balizenniñ ar c'hemm evit un adlenn a-c'houdevezh.",
"abusefilter-edit-throttle-count": "Niver a oberiadennoù aotreet :",
"abusefilter-edit-throttle-period": "Prantad amzer :",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|eilenn|eilenn}}",
"abusefilter-edit-throttle-groups": "Stollañ ar merañ dre :\n:''(unan dre linenn, ha dispartiet gant virgulennoù)''",
"abusefilter-edit-warn-message": "Kemenn reizhiad da implijout da gemenn-diwall :",
"abusefilter-edit-warn-other": "Kemennadenn all",
@@ -206,7 +200,7 @@
"abusefilter-edit-builder-misc-like": "Kenglot gant ar stumm (like)",
"abusefilter-edit-builder-misc-rlike": "Kenglot gant (rlike)",
"abusefilter-edit-builder-misc-irlike": "Sil gant riñvennoù aregel, hep teurel kont ouzh an doare ma 'z eo bet skrivet al lizherennoù (irlike)",
- "abusefilter-edit-builder-misc-contains": "Ar chadenn a-gleiz a endalc'h an hini dehoù (contains)",
+ "abusefilter-edit-builder-misc-contains": "Ar chadenn a-gleiz a endalc'h an hini dehou (contains)",
"abusefilter-edit-builder-misc-stringlit": "Chadenn lizherennoù (\"\")",
"abusefilter-edit-builder-misc-tern": "Oberataer hoalad (X ? Y : Z)",
"abusefilter-edit-builder-misc-cond": "Amplegadek (if X then Y else Z)",
@@ -239,19 +233,18 @@
"abusefilter-edit-builder-vars-oldsize": "Ment kozh ar bajenn",
"abusefilter-edit-builder-vars-removedlines": "Linennoù dilamet en aozadenn",
"abusefilter-edit-builder-vars-summary": "Diverrañ/Abeg ar c'hemm",
- "abusefilter-edit-builder-vars-article-id": "Niv. ar bajenn",
- "abusefilter-edit-builder-vars-article-ns": "Esaouenn anv ar bajenn",
- "abusefilter-edit-builder-vars-article-text": "Titl ar bajenn (hep an esaouenn anv)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Titl klok ar bajenn",
- "abusefilter-edit-builder-vars-article-views": "Pajennoù gwelet",
+ "abusefilter-edit-builder-vars-page-id": "Niv. ar bajenn",
+ "abusefilter-edit-builder-vars-page-ns": "Esaouenn anv ar bajenn",
+ "abusefilter-edit-builder-vars-page-title": "Titl ar bajenn (hep an esaouenn anv)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Titl klok ar bajenn",
"abusefilter-edit-builder-vars-movedfrom-id": "Anv ar bajenn orin da adenvel",
"abusefilter-edit-builder-vars-movedfrom-ns": "Esaouenn anv ar bajenn orin da adenvel",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titl ar bajenn orin da adenvel",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Titl klok ar bajenn orin da adenvel",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titl ar bajenn orin da adenvel",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Titl klok ar bajenn orin da adenvel",
"abusefilter-edit-builder-vars-movedto-id": "Niverenn pajenn pal an adenveladenn",
"abusefilter-edit-builder-vars-movedto-ns": "Egorenn anv eus pajenn pal an adenveladenn",
- "abusefilter-edit-builder-vars-movedto-text": "Titl pajenn pal an adenvel",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Titl klok eus pajenn pal an adenvel",
+ "abusefilter-edit-builder-vars-movedto-title": "Titl pajenn pal an adenvel",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Titl klok eus pajenn pal an adenvel",
"abusefilter-edit-builder-vars-user-editcount": "Konter kemmoù an implijer",
"abusefilter-edit-builder-vars-user-age": "Oad ar gont implijer",
"abusefilter-edit-builder-vars-user-name": "Anv kont an implijer",
@@ -311,7 +304,7 @@
"abusefilter-exception-regexfailure": "Fazi er riñvenn reizh \"$3\" en arouezenn $1 : \"$2\"",
"abusefilter-exception-overridebuiltin": "Flastradeg berzet eus an argemmenn hegerz dre ziouer \"$2\" en arouezenn $1.",
"abusefilter-exception-outofbounds": "Elefenn ha n'eus ket anezhañ $2 goulennet (ment al listenn = $3) en arouezenn $1.",
- "abusefilter-exception-notlist": "Un elfenn a zo goulennet ha n'emañ ket e-barzh un daolenn en arouezenn $1.",
+ "abusefilter-exception-notarray": "Un elfenn a zo goulennet ha n'emañ ket e-barzh un daolenn en arouezenn $1.",
"abusefilter-action-tag": "Tikedenniñ",
"abusefilter-action-throttle": "Bevenniñ ar c'hemmoù",
"abusefilter-action-warn": "Kas ur c'hemenn diwall",
@@ -371,7 +364,6 @@
"abusefilter-topnav-import": "Enporzhiañ ur sil",
"abusefilter-log-name": "Marilh ar sil a-enep ar gwallimplij",
"abusefilter-log-header": "An deizlevr-mañ a ziskouez un diverradenn eus ar c'hemmoù graet d'ar siloù.\nEvit gouzout hiroc'h, gwelout [[Special:AbuseFilter/history|listenn]] eus kemmoù diwezhañ ar sil.",
- "abusefilter-log-entry-modify": "kemmet $1 ($2)",
"abusefilter-log-noresults": "Disoc'h ebet",
"abusefilter-diff-title": "Disheñvelderioù etre ar stummoù",
"abusefilter-diff-item": "Elfenn",
diff --git a/AbuseFilter/i18n/bs.json b/AbuseFilter/i18n/bs.json
index 39d124e0..3fe1d183 100644
--- a/AbuseFilter/i18n/bs.json
+++ b/AbuseFilter/i18n/bs.json
@@ -9,14 +9,14 @@
"KWiki",
"Srdjan m",
"Semso98",
- "Matma Rex"
+ "Matma Rex",
+ "BadDog"
]
},
"abusefilter-desc": "Dodaje automatske heuristike izmjenama.",
"abusefilter": "Konfiguracija filtera za zloupotrebu",
"abuselog": "Log zloupotrebe",
"abusefilter-intro": "Dobrodošli u interfejs upravljanja filterom zloupotreba.\nFilter zloupotreba je automatizirani softverski mehanizam za pravljenje automatskih heuristika za sve akcije.\nOvaj interfejs prikazuje spisak napravljenih filtera i omogućuje Vam da ih prilagodite.",
- "abusefilter-mustbeeditor": "Iz sigurnosnih razloga, samo korisnici sa pravom da promijene filtere zloupotrebe mogu koristiti ovaj interfejs.",
"abusefilter-warning": "'''Upozorenje''': Ova je akcija automatski identificirana kao opasna.\nRadnje s lošim namjerama će biti brzo uklonjene,\ni zlonamjerne i destruktivne izmjene rezultiraju blokiranjem Vašeg korisničkog računa ili Vašeg računara.\nAko mislite da je ovo konstruktivna izmjena, onda je još jednom sačuvajte da bi bila dodana.\nOpis pravila zloupotrebe koje ste možda izmjenom prekršili je vidljiv ovdje: $1",
"abusefilter-disallowed": "Ova akcija je automatski identificirana kao štetna, i kao takva onemogućena.\nAko vjerujete da je Vaša izmjena konstruktivna, molimo Vas da kontaktirate administratora, i da ga obavijestite o onome šta namjeravate uraditi.\nKratki opis pravila ponašanja koje ogovara Vašoj akciji je: $1",
"abusefilter-blocked-display": "Ova akcija je automatski identificirana kao opasna,\ni kao takva onemogućena da se izvrši.\nDodatno, da bi se zaštitio {{SITENAME}}, Vaš korisnički račun i sve pripadajuće IP adrese su blokirane za uređivanje.\nAko se desila greška, molimo da kontaktirate administratora.\nKratki opis prekršenih pravila koja odgovaraju Vašoj akciji je: $1",
@@ -72,6 +72,7 @@
"abusefilter-log-details-diff": "Izmjene napravljene pri uređivanju",
"abusefilter-log-linkoncontribs": "zapisnik zloupotrebe",
"abusefilter-log-linkoncontribs-text": "Zapisnik zloupotrebe za {{GENDER:$1|ovog korisnika|ovu korisnicu}}",
+ "abusefilter-log-linkonhistory": "prikaži zapisnik zloupotrebe",
"abusefilter-log-hidden": "(stavka sakrivena)",
"abusefilter-log-hidden-implicit": "(sakriveno jer je izmjena obrisana)",
"abusefilter-log-cannot-see-details": "Nemate dopuštenje da vidite detalje ovog unosa.",
@@ -81,10 +82,8 @@
"abusefilter-log-hide-hidden": "Sakrij ovu stavku od javnog pregleda",
"abusefilter-log-hide-reason": "Razlog:",
"abusefilter-log-hide-forbidden": "Nemate dopuštenje da sakrivate stavke zapisnika zloupotrebe.",
- "abusefilter-logentry-suppress": "sakr [[$1]]",
- "abusefilter-logentry-unsuppress": "otkr [[$1]]",
"logentry-abusefilter-hit": "$1 je {{GENDER:$2|aktivirao|aktivirala}} filter $4, izvodeći radnju \"$5\" na stranici $3. Poduzete radnje: $6 ($7)",
- "abusefilter-management": "Podešavanje filtera za zloupotrebu",
+ "abusefilter-management": "Upravljanje filterom protiv zloupotrebe",
"abusefilter-list": "Svi filteri",
"abusefilter-list-id": "ID filtera",
"abusefilter-list-status": "Stanje",
@@ -114,7 +113,6 @@
"abusefilter-list-options-scope": "Prikaži filtere:",
"abusefilter-list-options-scope-local": "Samo lokalna pravila",
"abusefilter-list-options-scope-global": "Samo globalna pravila",
- "abusefilter-list-options-disabled": "Isključeni filteri:",
"abusefilter-list-options-hidedisabled": "Sakrij isključene filtere",
"abusefilter-list-options-submit": "Ažuriraj",
"abusefilter-tools-text": "Ovdje imate neke alate koji su korisni za formuliranje i prepravku filtera za zloupotrebu.",
@@ -134,7 +132,6 @@
"abusefilter-edit-status-label": "Statistike:",
"abusefilter-edit-status": "Od {{PLURAL:$1|posljednje $1 akcije|posljednje $1 akcije|posljednjih $1 akcija}} ovaj filter je pogođen $2 puta ($3%).",
"abusefilter-edit-status-profile": "Od {{PLURAL:$1|posljednje $1 akcije|posljednje $1 akcije|posljednjih $1 akcija}} ovaj filter je pogođen $2 puta ($3%). Prosječno, njegovo vrijeme pokretanja je $4ms, a utrošio je $5 {{PLURAL:$5|uvjet|uvjeta}} unutar ograničenja uvjeta.",
- "abusefilter-edit-throttled": "'''Upozorenje''': Ovaj filter je automatski isključen iz sigurnosnih razloga. Dostigao je limit od $1% pogođenih akcija.",
"abusefilter-edit-new": "Novi filter",
"abusefilter-edit-save": "Sačuvaj filter",
"abusefilter-edit-id": "ID filtera:",
@@ -161,7 +158,6 @@
"abusefilter-edit-action-tag": "Označi izmjenu za buduće preglede.",
"abusefilter-edit-throttle-count": "Broja akcija za dozvolu:",
"abusefilter-edit-throttle-period": "Vremenski period:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}",
"abusefilter-edit-throttle-groups": "Grupa ukočena kod:\n:''(jedan po liniji, kombiniran sa zarezima)''",
"abusefilter-edit-warn-message": "Sistemska poruka koja se koristi za upozorenje:",
"abusefilter-edit-warn-other": "ostale poruke",
@@ -239,7 +235,7 @@
"abusefilter-edit-builder-funcs-rescape": "Izbjegni doslovne niske u regexu (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Postavi varijable (set_var)",
"abusefilter-edit-builder-group-vars": "Promijenjive",
- "abusefilter-edit-builder-vars-accountname": "Broj računa (on account creation)",
+ "abusefilter-edit-builder-vars-accountname": "Ime korisničkog računa (u trenutku pravljenja)",
"abusefilter-edit-builder-vars-timestamp": "Unix vremenski pečat izmjene",
"abusefilter-edit-builder-vars-action": "akcija",
"abusefilter-edit-builder-vars-addedlines": "Linije dodane u izmjeni",
@@ -249,19 +245,18 @@
"abusefilter-edit-builder-vars-oldsize": "Veličina stare stranice",
"abusefilter-edit-builder-vars-removedlines": "Linije sklonjene pri izmjeni",
"abusefilter-edit-builder-vars-summary": "Suma izmjena/razlog",
- "abusefilter-edit-builder-vars-article-id": "ID stranice",
- "abusefilter-edit-builder-vars-article-ns": "Imenski prostor stranice",
- "abusefilter-edit-builder-vars-article-text": "Naslov stanice (without namespace)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Puni naslov stranice",
- "abusefilter-edit-builder-vars-article-views": "Pregleda stranice",
+ "abusefilter-edit-builder-vars-page-id": "ID stranice",
+ "abusefilter-edit-builder-vars-page-ns": "Imenski prostor stranice",
+ "abusefilter-edit-builder-vars-page-title": "Naslov stanice (without namespace)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Puni naslov stranice",
"abusefilter-edit-builder-vars-movedfrom-id": "ID preusmjerene izvorne stranice",
"abusefilter-edit-builder-vars-movedfrom-ns": "Imenski prostor izvorne stranice",
- "abusefilter-edit-builder-vars-movedfrom-text": "Naslov premještene izvorne stranice",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Puni naslov izvorne stranice koja se premješta",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Naslov premještene izvorne stranice",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Puni naslov izvorne stranice koja se premješta",
"abusefilter-edit-builder-vars-movedto-id": "ID stranice na koju se premješta",
"abusefilter-edit-builder-vars-movedto-ns": "Imenski prostor stranice na koju se premješta",
- "abusefilter-edit-builder-vars-movedto-text": "Naslov stranice na koju se premješta",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Puni naslov stranice na koju se premješta",
+ "abusefilter-edit-builder-vars-movedto-title": "Naslov stranice na koju se premješta",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Puni naslov stranice na koju se premješta",
"abusefilter-edit-builder-vars-user-editcount": "Brojač izmjena korisnika",
"abusefilter-edit-builder-vars-user-age": "Starost korisničkog računa",
"abusefilter-edit-builder-vars-user-name": "Ime korisničkog računa",
@@ -322,7 +317,7 @@
"abusefilter-exception-regexfailure": "Greška u regularnom izrazu \"$3\" u znaku $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Nevaljano zaobilažanje ugrađene varijable \"$2\" kod znaka $1.",
"abusefilter-exception-outofbounds": "Zahtijevana nepostojeća stavka spiska $2 (veličina spiska = $3) kod znaka $1.",
- "abusefilter-exception-notlist": "Zahtijevana stavka niza izvan niza kod znaka $1.",
+ "abusefilter-exception-notarray": "Zahtijevana stavka niza izvan niza kod znaka $1.",
"abusefilter-action-tag": "Oznaka",
"abusefilter-action-throttle": "Ograničenje",
"abusefilter-action-warn": "Upozorenje",
@@ -373,16 +368,16 @@
"abusefilter-examine-notfound": "Izmjena koju ste tražili nije mogla biti pronađena.",
"abusefilter-examine-incompatible": "Izmjena koju ste tražili nije podržana od filtera zloupotreba",
"abusefilter-examine-noresults": "Nisu pronađeni rezultati za parametre pretrage koje ste naveli.",
- "abusefilter-topnav": "'''Navigacija u filteru zloupotrebe'''",
+ "abusefilter-topnav": "'''Navigacija po filteru protiv zloupotrebe'''",
"abusefilter-topnav-home": "Početna strana",
"abusefilter-topnav-test": "Grupno testiranje",
- "abusefilter-topnav-examine": "Istraži ranije izmjene",
+ "abusefilter-topnav-examine": "Ispitaj prošle izmjene",
"abusefilter-topnav-log": "Zapisnik zloupotrebe",
"abusefilter-topnav-tools": "Alati za debugiranje",
"abusefilter-topnav-import": "Filter uvoza",
"abusefilter-log-name": "Zapisnik filtera zloupotrebe",
"abusefilter-log-header": "Ovaj zapisnik prikazuje sažetak izmjena napravljenih na filterima.\nZa sve detalje, pogledajte [[Special:AbuseFilter/history|spisak]] nedavnih izmjena filtera.",
- "abusefilter-log-entry-modify": "izmijenio/la je $1 ($2)",
+ "abusefilter-logentry-modify": "$1 {{GENDER:$2|izmijenio|izmijenila}} je $4 ($5)",
"abusefilter-log-noresults": "Nema rezultata",
"abusefilter-diff-title": "Razlike između verzija",
"abusefilter-diff-item": "Stavka",
diff --git a/AbuseFilter/i18n/btm.json b/AbuseFilter/i18n/btm.json
new file mode 100644
index 00000000..67a0a048
--- /dev/null
+++ b/AbuseFilter/i18n/btm.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Simartampua"
+ ]
+ },
+ "abusefilter-block-anon": "Blokir pamake anonim",
+ "abusefilter-block-user": "Blokir pamake natardaftar",
+ "abusefilter-block-talk": "Alaman parpokatan blokir",
+ "abusefilter-edit-deleting-enabled": "Amu inda bisa manandai filter aktif atia iapus.",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Pareso molo argumen na ilehen sarupo (===) dohot sala sada argumen naonan (equals_to_any)",
+ "abusefilter-test-nobots": "Pajopi editan ni bot"
+}
diff --git a/AbuseFilter/i18n/ca.json b/AbuseFilter/i18n/ca.json
index 0cc938f1..818926ca 100644
--- a/AbuseFilter/i18n/ca.json
+++ b/AbuseFilter/i18n/ca.json
@@ -30,7 +30,6 @@
"abusefilter": "Configuració del filtre d’abusos",
"abuselog": "Registre del filtre d’abusos",
"abusefilter-intro": "Benvinguts a la interfície de gestió del filtre d'abusos.\nAquest filtre és un mecanisme del programari per aplicar heurística automàtica a totes les accions.\nAquesta interfície mostra una llista dels filtres definits i permet modificar-los.",
- "abusefilter-mustbeeditor": "Per raons de seguretat, només poden utilitzar aquesta interfície els usuaris amb permisos per a modificar els filtres d'abusos.",
"abusefilter-warning": "'''Atenció:''' Aquesta acció ha estat identificada automàticament com a perniciosa.\nLes edicions no constructives seran revertides ràpidament,\ni la reiterada edició de forma no constructiva comportarà el blocatge del vostre compte o adreça IP.\nSi creieu que aquesta acció és constructiva, podeu tornar-la a enviar per a confirmar-la.\nUna breu descripció de la regla d'abús que ha identificat la vostra acció és: $1",
"abusefilter-disallowed": "Aquesta acció ha estat automàticament identificada com a nociva i per tant rebutjada.\nSi creieu que la vostra acció era constructiva, si us plau informeu un administrador de què estàveu intentant fer.\nUna breu descripció de la regla d'abús amb què coincidia la vostra acció és: $1",
"abusefilter-blocked-display": "Aquesta acció s'ha identificat automàticament com perjudicials\n i li ha impedit executar-lo.\nA més a més, per protegir {{SITENAME}}, el seu compte d'usuari i tots associats adreces d'IP s'han blocat des d'edició.\nSi això s'ha produït en l'error, si us plau en contacte amb un administrador.\nUna breu descripció de la regla de l'abús que coincidien amb la seva acció és:$1",
@@ -94,8 +93,9 @@
"abusefilter-log-hide-hidden": "Amaga aquesta entrada de la vista pública",
"abusefilter-log-hide-reason": "Motiu:",
"abusefilter-log-hide-forbidden": "No teniu permisos per ocultar entrades al registre d'abusos.",
- "abusefilter-logentry-suppress": "amaga \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "mostra \"[[$1]]\"",
+ "log-action-filter-abusefilter": "Tipus de canvi de filtre:",
+ "log-action-filter-abusefilter-create": "Creació d’un filtre nou",
+ "log-action-filter-abusefilter-modify": "Modificació de filtre",
"abusefilter-management": "Gestió del filtre d’abusos",
"abusefilter-list": "Tots els filtres",
"abusefilter-list-id": "Núm.",
@@ -126,8 +126,9 @@
"abusefilter-list-options-scope": "Mostra els filtres:",
"abusefilter-list-options-scope-local": "Només normes locals",
"abusefilter-list-options-scope-global": "Només normes globals",
- "abusefilter-list-options-disabled": "Filtres deshabilitats:",
"abusefilter-list-options-hidedisabled": "Oculta filtres deshabilitats",
+ "abusefilter-list-options-hideprivate": "Amaga els filtres privats",
+ "abusefilter-list-options-searchoptions": "Mode de cerca:",
"abusefilter-list-options-submit": "Actualitza",
"abusefilter-tools-text": "Aquí hi ha algunes eines que poden ser útils en la formulació i depuració dels filtres d'abusos.",
"abusefilter-tools-expr": "Provador d'expressions",
@@ -146,11 +147,11 @@
"abusefilter-edit-status-label": "Estadístiques:",
"abusefilter-edit-status": "De {{PLURAL:$1|la darrera acció|les $1 darreres accions}} aquest filtre n'ha detectat $2 ($3%).",
"abusefilter-edit-status-profile": "De {{PLURAL:$1|la darrera acció|les $1 darreres accions}} aquest filtre n'ha detectat $2 ($3%).\nDe mitjana, la seva durada d'execució és de $4 ms i utilitza $5 {{PLURAL:$5|condició|condicions}} del límit total.",
- "abusefilter-edit-throttled": "'''Atenció''': Aquest filtre s'ha desactivat automàticament com a mesura de seguretat.\nHa sobrepassat el límit de deteccions del $1% de les accions.",
"abusefilter-edit-new": "Nou filtre",
"abusefilter-edit-save": "Desa filtre",
"abusefilter-edit-id": "Núm. del filtre:",
"abusefilter-edit-description": "Descripció:\n:''(visible públicament)''",
+ "abusefilter-edit-field-description": "descripció",
"abusefilter-edit-group": "Grup del filtre:",
"abusefilter-edit-flags": "Marques:",
"abusefilter-edit-enabled": "Habilita aquest filtre",
@@ -158,6 +159,7 @@
"abusefilter-edit-hidden": "Amaga detalls d'aquest filtre de la vista pública",
"abusefilter-edit-global": "Filtre global",
"abusefilter-edit-rules": "Condicions:",
+ "abusefilter-edit-field-conditions": "condicions",
"abusefilter-edit-notes": "Notes:",
"abusefilter-edit-lastmod": "Última modificació del filtre:",
"abusefilter-edit-lastmod-text": "$1 de $2",
@@ -173,7 +175,6 @@
"abusefilter-edit-action-tag": "Marca l'edició per a una revisió posterior",
"abusefilter-edit-throttle-count": "Nombre d'accions a permetre:",
"abusefilter-edit-throttle-period": "Període de temps:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|segon|segons}}",
"abusefilter-edit-throttle-groups": "Agrupar la reiteració per:\n:''(un per línia, separat per comes)''",
"abusefilter-edit-warn-message": "Missatge del sistema a usar com a avís:",
"abusefilter-edit-warn-other": "Un altre missatge",
@@ -258,19 +259,18 @@
"abusefilter-edit-builder-vars-oldsize": "Mida anterior de la pàgina",
"abusefilter-edit-builder-vars-removedlines": "Línies eliminades en la modificació",
"abusefilter-edit-builder-vars-summary": "Resum de l'edició",
- "abusefilter-edit-builder-vars-article-id": "ID de la pàgina",
- "abusefilter-edit-builder-vars-article-ns": "Espai de noms de la pàgina",
- "abusefilter-edit-builder-vars-article-text": "Nom de la pàgina (sense espai de noms)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Nom complet de la pàgina",
- "abusefilter-edit-builder-vars-article-views": "Vistes de la pàgina",
+ "abusefilter-edit-builder-vars-page-id": "ID de la pàgina",
+ "abusefilter-edit-builder-vars-page-ns": "Espai de noms de la pàgina",
+ "abusefilter-edit-builder-vars-page-title": "Nom de la pàgina (sense espai de noms)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Nom complet de la pàgina",
"abusefilter-edit-builder-vars-movedfrom-id": "ID de la pàgina de la font del moviment",
"abusefilter-edit-builder-vars-movedfrom-ns": "Espai pel nom de la pàgina font a traslladar",
- "abusefilter-edit-builder-vars-movedfrom-text": "Títol de la pàgina font del moviment",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Títol Complet de la pàgina font del moviment",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Títol de la pàgina font del moviment",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Títol Complet de la pàgina font del moviment",
"abusefilter-edit-builder-vars-movedto-id": "ID de la pàgina de destinació del moviment",
"abusefilter-edit-builder-vars-movedto-ns": "Nom de l’espai de la pàgina de destinació del moviment",
- "abusefilter-edit-builder-vars-movedto-text": "Títol de la pàgina de destinació del moviment",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Títol Complet de la pàgina de destinació del moviment",
+ "abusefilter-edit-builder-vars-movedto-title": "Títol de la pàgina de destinació del moviment",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Títol Complet de la pàgina de destinació del moviment",
"abusefilter-edit-builder-vars-user-editcount": "Comptador d'edicions de l'usuari",
"abusefilter-edit-builder-vars-user-age": "Antiguitat del compte d'usuari",
"abusefilter-edit-builder-vars-user-name": "Nom del compte d'usuari",
@@ -330,7 +330,8 @@
"abusefilter-exception-regexfailure": "Error en l'expressió regular \"$3\" al caràcter $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Anul·lació incorrecta de la variable incorporada «$2» al caràcter $1.",
"abusefilter-exception-outofbounds": "S'està sol·licitant l'element inexistent llista $2 (llista de mida = $3 ) a les de caràcter $1 .",
- "abusefilter-exception-notlist": "Sol. licitant element de matriu de no-matriu a caràcter $1 .",
+ "abusefilter-exception-notarray": "Sol. licitant element de matriu de no-matriu a caràcter $1 .",
+ "abusefilter-exception-invalidiprange": "S’ha proporcionat l’interval d’IP no vàlid «$2» al caràcter $1.",
"abusefilter-action-tag": "Etiqueta",
"abusefilter-action-throttle": "Limitador",
"abusefilter-action-warn": "Avisa",
@@ -391,7 +392,6 @@
"abusefilter-topnav-import": "Importa un filtre",
"abusefilter-log-name": "Registre del filtre d’abusos",
"abusefilter-log-header": "Aquest registre mostra un resum dels canvis fets als filtres.\nPer a més detalls, vegeu [[Special:AbuseFilter/history|la llista]] de canvis recents dels filtres.",
- "abusefilter-log-entry-modify": "modificat $1 ($2)",
"abusefilter-log-noresults": "No hi ha resultats",
"abusefilter-diff-title": "Diferències entre versions",
"abusefilter-diff-item": "Ítem",
@@ -405,8 +405,5 @@
"abusefilter-import-intro": "Podeu utilitzar aquesta interfície per importar filtres d'altres wikis.\nEn el wiki d'origen, feu clic a «{{int:abusefilter-edit-export}}» sota «{{int:abusefilter-edit-tools}}» en la interfície d'edició.\nCopieu del quadre de text que apareix i enganxeu-lo a aquest quadre de text, a continuació feu clic a «{{int:abusefilter-import-submit}}».",
"abusefilter-import-submit": "Importa dades",
"abusefilter-group-default": "Per defecte",
- "abusefilter-http-error": "S’ha produït un error d’HTTP: $1.",
- "apihelp-query+abusefilters-param-prop": "Quines propietats obtenir.",
- "apihelp-query+abusefilters-example-1": "Llista els filtres públics habilitats",
- "apihelp-query+abusefilters-example-2": "Mostra alguns detalls dels filtres"
+ "abusefilter-http-error": "S’ha produït un error d’HTTP: $1."
}
diff --git a/AbuseFilter/i18n/ce.json b/AbuseFilter/i18n/ce.json
index 59ab4ca0..d9ba5c6a 100644
--- a/AbuseFilter/i18n/ce.json
+++ b/AbuseFilter/i18n/ce.json
@@ -11,7 +11,6 @@
"abusefilter": "Зулам луьттург нисдар",
"abuselog": "Зуламаш долу тéптар",
"abusefilter-intro": "Марша догӀийла, зулам луьттурган Урхаллин агӀон тӀе.\nЗулам луьттург, декъашхоша деш долу, зуламан дуьхьала, шаьшха болх бо гӀирс бу.\nКхузахь балийна, массо а, литтарийн могӀам, хийца аьтто а болуш.",
- "abusefilter-mustbeeditor": "Кхерамазаллин Ӏалашонца, зулам луьттургаш хийца йиш йолу декъашхойн бен, бакъо яц хӀара интерфейс лело.",
"abusefilter-warning": "''Тидаме'''. ХӀара динарг, шаьшха къастийна ца оьшуш санна.\nХӀоттам боцу нийсдарш хира ду, сиха дӀадаьхна,\nморса йа, дуккха хӀоттам боцу нийсдарш дича, хьан декъашхочун дӀаяздар ле IP-адресна блоктухур ю.\nХьо тешна валахь, хӀара нийсдара хӀоттам болуш хиларна, юхаъ «ДӀайахьийта» тӀе таӀа йе.\nАш дечуьнца догӀуш хилар бакъонца билгалла даьккхина: $1",
"abusefilter-disallowed": "ХӀара динарг, шаьшха зуламе санна къастийна,\nцун дера ца магийна.\nНагахь, шу тешна делахь, хӀара нийсдар хӀоттам болуш хиларна, дехар до, куьйгалхочуьнга дийцар, шу дан гӀертарг.\nЗуламах лаьцна хаам, аш дечуьнца догӀуш хилар билгалла даьккхина: $1",
"abusefilter-blocked-display": "ХӀара дешдерг автоматически зулам санна билгалдина,\nхьуна и кхочушдан ца маго.\nЦул совнаха ларор Ӏалашонца {{grammar:genitive|{{SITENAME}}}} хьан дӀаздарна а цуьнца долу IP-адресна а блоктоьхна.\nХьайна и иштта дац аьлла хетахь, дехар до куьйгалхочунга язде.\nБилгалйина литтаран зуламах доца лаьцна, хӀинца ахьа динчух: $1",
@@ -74,8 +73,6 @@
"abusefilter-log-hide-hidden": "Къайладаккха хӀара дӀаяздар",
"abusefilter-log-hide-reason": "Бахьана:",
"abusefilter-log-hide-forbidden": "Зуламан тептар чура дӀаяздарш къайладаха хьа бакъо яц.",
- "abusefilter-logentry-suppress": "къайладаккха [[$1]]",
- "abusefilter-logentry-unsuppress": "гайта [[$1]]",
"logentry-abusefilter-hit": "$1 {{#gender:$1|болх бола балийтина}} литтаре $4, кхочушъ дийнарг «$5» агӀона $3 чохь. Дийнарг: $6 ($7)",
"abusefilter-management": "Зулам литтаран урхалла",
"abusefilter-list": "Дерриг литтарш",
@@ -108,8 +105,8 @@
"abusefilter-list-options-scope-local": "ХӀара википроект",
"abusefilter-list-options-scope-global": "Глобальни бакъонаш",
"abusefilter-list-options-scope-all": "Локальни а, глобальни а бакъонаш",
- "abusefilter-list-options-disabled": "ДӀадайина литтарш:",
"abusefilter-list-options-hidedisabled": "ДӀадайина литтарш дӀахьулданн",
+ "abusefilter-list-options-searchoptions": "Лахаран раж:",
"abusefilter-list-options-submit": "Карлаяккха",
"abusefilter-tools-text": "Кхузахь бу зулуман литтарш кепе дало гӀо деш болу гӀисрсаш.",
"abusefilter-tools-expr": "Гайтам хьажар",
@@ -127,10 +124,10 @@
"abusefilter-edit-status-label": "Статистика:",
"abusefilter-edit-status": "{{PLURAL:$1|ТӀеххьара $1 диначух}}, хӀара луьттург цхьаьнайогӀуш ю $2 ($3%).",
"abusefilter-edit-status-profile": "{{PLURAL:$1|ТӀехьара $1 диначух|ТӀехьара $1 диначарах|ТӀехьара $1 диначарах}}, хӀара литтар цхьаьнадогӀуш ду $2 ($3%).\nЦунна белхан юккъера хан — $4 мс, иза цхьаьнайогӀуш ю $5 {{PLURAL:$5|хьолаца}}.",
- "abusefilter-edit-throttled": "ДӀахьедар.''' ХӀара луьттург автоматически дӀадайина лардала. $1 % оцо болх баран процент хьала даьлла.",
"abusefilter-edit-new": "Керла луьттург",
"abusefilter-edit-save": "Ӏалашъе луьттург",
"abusefilter-edit-id": "ID литтаран",
+ "abusefilter-edit-switch-editor": "Тадерг кхечутӀеерзор",
"abusefilter-edit-description": "Цуьнах лаьцна:\n:''(Массарна гуш)''",
"abusefilter-edit-group": "Литтаран тоба:",
"abusefilter-edit-flags": "Байракхаш:",
@@ -154,7 +151,6 @@
"abusefilter-edit-action-tag": "Билгалде нисдар кхин хьажа",
"abusefilter-edit-throttle-count": "Шордина динаршан дуккхалла:",
"abusefilter-edit-throttle-period": "Хенан дакъа:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|секунд}}",
"abusefilter-edit-warn-message": "ДӀахьедарна системин хаамаш:",
"abusefilter-edit-warn-other": "Кхин хаам",
"abusefilter-edit-warn-other-label": "Кхечу хааман агӀон цӀе:\n:''(MediaWiki префикс йоцуш)''",
@@ -192,7 +188,7 @@
"abusefilter-edit-builder-op-comparison-gte": "Дуккха я нийса (>=)",
"abusefilter-edit-builder-group-op-bool": "Боолен оператораш",
"abusefilter-edit-builder-op-bool-not": "Дац (!)",
- "abusefilter-edit-builder-op-bool-and": "А (&)",
+ "abusefilter-edit-builder-op-bool-and": ", (&)",
"abusefilter-edit-builder-op-bool-or": "Я (|)",
"abusefilter-edit-builder-op-bool-xor": "Юкъарайохурш Я (^)",
"abusefilter-edit-builder-group-misc": "Тайп-тайпанара",
@@ -230,19 +226,18 @@
"abusefilter-edit-builder-vars-oldsize": "АгӀонан шира барам",
"abusefilter-edit-builder-vars-removedlines": "ДӀадаьхна могӀамаш",
"abusefilter-edit-builder-vars-summary": "Нисдарах лаьцна",
- "abusefilter-edit-builder-vars-article-id": "АгӀона ID",
- "abusefilter-edit-builder-vars-article-ns": "АгӀона цӀерийн меттиг",
- "abusefilter-edit-builder-vars-article-text": "АгӀона цӀе (цӀерийн меттиг йоцуш)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "АгӀона юьзина цӀе",
- "abusefilter-edit-builder-vars-article-views": "АгӀонашка хьаьжина",
+ "abusefilter-edit-builder-vars-page-id": "АгӀона ID",
+ "abusefilter-edit-builder-vars-page-ns": "АгӀона цӀерийн меттиг",
+ "abusefilter-edit-builder-vars-page-title": "АгӀона цӀе (цӀерийн меттиг йоцуш)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "АгӀона юьзина цӀе",
"abusefilter-edit-builder-vars-movedfrom-id": "ЦӀе хуьйцуш йолу агӀонан ID",
"abusefilter-edit-builder-vars-movedfrom-ns": "ЦӀе хуьйцуш йолу агӀонан цӀерийн меттиг",
- "abusefilter-edit-builder-vars-movedfrom-text": "ЦӀе хуьйцуш йолу агӀона цӀе",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "ЦӀе хуьйцуш йолу агӀона юьззина цӀе",
+ "abusefilter-edit-builder-vars-movedfrom-title": "ЦӀе хуьйцуш йолу агӀона цӀе",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "ЦӀе хуьйцуш йолу агӀона юьззина цӀе",
"abusefilter-edit-builder-vars-movedto-id": "ЦӀе хуьйцуш йолу Ӏалашонан агӀонан ID",
"abusefilter-edit-builder-vars-movedto-ns": "ЦӀе хуьйцуш йолу коьрта агӀонан цӀерийн меттиг",
- "abusefilter-edit-builder-vars-movedto-text": "ЦӀе хуьйцуш йолу коьрта агӀона цӀе",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "ЦӀе хуьйцуш йолу коьрта агӀона юьззина цӀе",
+ "abusefilter-edit-builder-vars-movedto-title": "ЦӀе хуьйцуш йолу коьрта агӀона цӀе",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "ЦӀе хуьйцуш йолу коьрта агӀона юьззина цӀе",
"abusefilter-edit-builder-vars-user-editcount": "Декъашхочун нисдарийн дукхалла",
"abusefilter-edit-builder-vars-user-age": "Декъашхочун дӀаяздаран хан",
"abusefilter-edit-builder-vars-user-name": "Декъашхочун цӀе",
@@ -345,7 +340,7 @@
"abusefilter-diff-title": "Версийн башхалла",
"abusefilter-diff-item": "Элемент",
"abusefilter-diff-version": "{{GENDER:$3|Декъашхочун}} $2 верси цу $1 хан",
- "abusefilter-diff-info": "АгӀонах болу бовзам",
+ "abusefilter-diff-info": "АгӀонан хаам",
"abusefilter-diff-pattern": "Литтаран хьал",
"abusefilter-diff-invalid": "Йохуш йолу версеш схьаэца цало",
"abusefilter-diff-backhistory": "ЮхагӀо литтаран истори йолче",
@@ -354,9 +349,5 @@
"abusefilter-import-intro": "ХӀокху агӀонехь хьан йиш ю кхечу вики чура литтарш импорт дан.\nДӀайолалун вики чохь «{{int:abusefilter-edit-tools}}» чохь тӀетаӀе «{{int:abusefilter-edit-export}}».\nЧулацаман копи якхкхе хӀокху агӀона чу йилина тӀетаӀе «{{int:abusefilter-import-submit}}».",
"abusefilter-import-submit": "Хаамаш импорт бе",
"abusefilter-group-default": "Ӏадйитаран кеп",
- "abusefilter-http-error": "Даьлла гӀалат HTTP: $1",
- "apihelp-query+abusefilters-param-prop": "Муьлха билгалонаш оьшуш ю.",
- "apihelp-query+abuselog-param-prop": "Муьлха билгалонаш оьшуш ю.",
- "apihelp-query+abuselog-example-1": "Гайта тептар чура тӀеххьара дӀаяздарш",
- "apihelp-query+abuselog-example-2": "Гайта [[API]] тептар чура тӀеххьара дӀаяздарш"
+ "abusefilter-http-error": "Даьлла гӀалат HTTP: $1"
}
diff --git a/AbuseFilter/i18n/ckb.json b/AbuseFilter/i18n/ckb.json
index 2071da93..3515ec27 100644
--- a/AbuseFilter/i18n/ckb.json
+++ b/AbuseFilter/i18n/ckb.json
@@ -6,7 +6,8 @@
"Pirehelokan",
"Matma Rex",
"Sarchia",
- "Muhammed taha"
+ "Muhammed taha",
+ "Épine"
]
},
"abuselog": "پاڵوێنەی کەڵکاوەژوو",
@@ -48,6 +49,7 @@
"abusefilter-log-noactions": "ھیچ",
"abusefilter-log-linkoncontribs": "پاڵوێنەی کەڵکاوەژوو",
"abusefilter-log-linkoncontribs-text": "پاڵوێنەی کەڵکاوەژوو بۆ ئەم بەکارھێنەرە",
+ "abusefilter-log-linkonhistory": "دیتنی لۆگی کەڵکاوەژوو",
"abusefilter-log-hidden": "(بابەتی شاردراو)",
"abusefilter-log-hidden-implicit": "(شاردراوەتەوە چون پێداچوونەوە سڕدراوەتەوە)",
"abusefilter-log-cannot-see-details": "ناتوانی وردەکارییەکانی ئەم بابەتە ببینی.",
@@ -56,8 +58,6 @@
"abusefilter-log-hide-hidden": "وردەکارییەکانی ئەم بابەتە لە بەرچاوی گشتی لا ببە",
"abusefilter-log-hide-reason": "هۆکار:",
"abusefilter-log-hide-forbidden": "ناتوانی بابەتەکانی لۆگی کەڵکاوەژوو بشارییەوە.",
- "abusefilter-logentry-suppress": "\"[[$1]]\"ی شاردەوە",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\"ی ئاشکرا کرد",
"logentry-abusefilter-hit": "$1 $4ی چالاککرد، خەریکی کردەوەی «$5» لەسەر $3 بوو. کردەوەی بەڕێوەچوو: $6 ($7)",
"abusefilter-management": "بەڕێوەبردنی پاڵوێنەی کەڵکاوەژوو",
"abusefilter-list": "ھەموو پاڵوێنەکان",
@@ -88,7 +88,6 @@
"abusefilter-list-options-deleted-show": "پاڵوێنە سڕدراوەکان لەخۆبگرەوە",
"abusefilter-list-options-scope": "پاڵوێنەکان نیشان بدە:",
"abusefilter-list-options-scope-local": "تەنھا ڕێسا خۆماڵییەکان",
- "abusefilter-list-options-disabled": "پاڵوێنە ناچالاکەکان:",
"abusefilter-list-options-hidedisabled": "پاڵوێنە ناچالاکەکان بشارەوە",
"abusefilter-list-options-submit": "نوێکردنەوە",
"abusefilter-tools-text": "لێرەدا ھەندێک ئامراز ھەیە کە لەوانەیە بەکەڵک بێت بۆ ڕێسلمەندکردن و سڕینەوەی ھەڵەکانی پاڵوێنەکانی کەڵکاوەژوو.",
@@ -101,7 +100,6 @@
"abusefilter-edit-status-label": "ئامارەکان:",
"abusefilter-edit-status": "لە دوایین $1 {{PLURAL:$1|کردەوە}}دا، ئەم پاڵوێنەیە لەگەڵ $2 ($3٪) گونجاوە.",
"abusefilter-edit-status-profile": "لە دوایین $1 {{PLURAL:$1|کردەوە}}دا، ئەم پاڵوێنەیە لەگەڵ $2 ($3٪) گونجاوە.\nبە شێوەی ناونجی، کاتی جێبەجێبوونی $4 میلی چرکەیە و $5 {{PLURAL:$5|مەرج}} لە سنووری مەرجی بەکاربردووە.",
- "abusefilter-edit-throttled": "'''وشیار بە''': بە ھۆی پارستنەوە بە شێوەی خۆکار ڕێگە بەم پاڵوێنە گیرراوە.\nگەیشتووە بە سنووری گونجان لەگەڵ زۆرتر لە $1% ی کردارەکان.",
"abusefilter-edit-new": "پاڵوێنەیەکی نوێ",
"abusefilter-edit-save": "پاڵوێنە پاشەکەوت بکە",
"abusefilter-edit-id": "پێناسەی پاڵوێنە:",
@@ -116,7 +114,6 @@
"abusefilter-edit-notes": "تێبینییەکان:",
"abusefilter-edit-lastmod": "پاڵوێنە دواجار گۆڕدراوە لە:",
"abusefilter-edit-lastmod-text": "$1 بەدەستی $2",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|چرکە|چرکە}}",
"abusefilter-edit-warn-message": "پەیامی سیستەم بۆ بەکارھێنان لە وشیارکردنەوەدا:",
"abusefilter-edit-warn-other": "پەیامی تر",
"abusefilter-edit-warn-other-label": "ناوی پەڕەی پەیامی تر:\n:''(بێ پێشگری میدیاویکی)''",
@@ -163,10 +160,10 @@
"abusefilter-edit-builder-vars-newsize": "قەبارەی نوێی پەڕە",
"abusefilter-edit-builder-vars-oldsize": "قەبارەی کۆنی پەڕە",
"abusefilter-edit-builder-vars-summary": "کورتەی دەستکاری/ھۆکار",
- "abusefilter-edit-builder-vars-article-id": "پێناسەی پەڕە",
- "abusefilter-edit-builder-vars-article-ns": "بۆشاییی ناوی پەڕە",
- "abusefilter-edit-builder-vars-article-text": "سەرناوی پەڕە (بەبێ بۆشاییی ناو)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "سەرناوی تەواوی پەڕە",
+ "abusefilter-edit-builder-vars-page-id": "پێناسەی پەڕە",
+ "abusefilter-edit-builder-vars-page-ns": "بۆشاییی ناوی پەڕە",
+ "abusefilter-edit-builder-vars-page-title": "سەرناوی پەڕە (بەبێ بۆشاییی ناو)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "سەرناوی تەواوی پەڕە",
"abusefilter-edit-builder-vars-user-editcount": "ژمارەی دەستکارییەکانی بەکارھێنەر",
"abusefilter-edit-builder-vars-user-age": "تەمەنی ھەژماری بەکارھێنەر",
"abusefilter-edit-builder-vars-user-name": "ناوی ھەژماری بەکارھێنەر",
@@ -229,7 +226,6 @@
"abusefilter-topnav-tools": "ئامرازەکانی سڕینەوەی کەموکووڕی",
"abusefilter-topnav-import": "ھاوردنی پاڵوێنە",
"abusefilter-log-name": "لۆگی پاڵوێنەی کەڵکاوەژوو",
- "abusefilter-log-entry-modify": "$1ی گۆڕی ($2)",
"abusefilter-log-noresults": "هیچ ئەنجامێک نییە",
"abusefilter-diff-title": "جیاوازیی نێوان پێداچوونەوەکان",
"abusefilter-diff-item": "بابەت",
diff --git a/AbuseFilter/i18n/cs.json b/AbuseFilter/i18n/cs.json
index 06b652af..3728d242 100644
--- a/AbuseFilter/i18n/cs.json
+++ b/AbuseFilter/i18n/cs.json
@@ -13,14 +13,18 @@
"Urbanecm",
"Matma Rex",
"Martin Urbanec",
- "Dvorapa"
+ "Dvorapa",
+ "Danny B.",
+ "Ilimanaq29",
+ "Patriccck",
+ "Teslaton"
]
},
"abusefilter-desc": "Podrobuje editace automatickým heuristikám",
"abusefilter": "Konfigurace filtrů zneužití",
"abuselog": "Protokol zneužití",
"abusefilter-intro": "Vítejte v rozhraní pro správu filtrů zneužití.\nFiltry zneužití jsou automatický softwarový mechanismus, prostřednictvím kterého se všechny operace testují pomocí automatických heuristik.\nV tomto rozhraní můžete vidět seznam definovaných filtrů a měnit je.",
- "abusefilter-mustbeeditor": "Z bezpečnostních důvodů mohou toto rozhraní používat pouze uživatelé s oprávněním spravovat filtry zneužití.",
+ "abusefilter-mustviewprivateoredit": "Z bezpečnostních důvodů mohou toto rozhraní používat pouze uživatelé s oprávněním spravovat filtry zneužití nebo prohlížet tajné filtry.",
"abusefilter-warning": "'''Upozornění:''' Tato činnost byla automaticky identifikována jako škodlivá.\nNeužitečné aktivity budou rychle revertovány, v&nbsp;opakovaných nebo závažných případech mohou být váš uživatelský účet či IP adresa zablokovány.\nPokud považujete svou editaci za správnou, můžete ji potvrdit opětovným kliknutím na Uložit změny.\nStručný popis pravidla, které vaši činnost označilo za škodlivou: $1",
"abusefilter-disallowed": "Tato činnost byla automaticky identifikována jako škodlivá, a&nbsp;proto zakázána.\nPokud považujete svou editaci za správnou, kontaktujte správce a&nbsp;sdělte jim, o&nbsp;co jste se {{GENDER:|snažil|snažila|snažili}}.\nStručný popis pravidla, které vaši činnost označilo za škodlivou: $1",
"abusefilter-blocked-display": "Tato činnost byla automaticky identifikována jako škodlivá, a&nbsp;proto vám bylo zabráněno v&nbsp;jejím provedení.\nKvůli ochraně {{grammar:2sg|{{SITENAME}}}} byla navíc vašemu uživatelskému účtu a&nbsp;všem s&nbsp;ním spojeným IP adresám zablokována možnost editace.\nPokud se domníváte, že se jedná o&nbsp;omyl, kontaktujte správce.\nStručný popis pravidla, které vaši činnost označilo za škodlivou: $1",
@@ -35,6 +39,7 @@
"right-abusefilter-log": "Prohlížení protokolu zneužití",
"right-abusefilter-log-detail": "Prohlížení podrobností v protokolu zneužití",
"right-abusefilter-private": "Prohlížení tajných údajů v protokolu zneužití",
+ "right-abusefilter-private-log": "Prohlížení záznamů přístupu k soukromým detailům filtrů zneužití",
"right-abusefilter-modify-restricted": "Upravování filtrů zneužití s omezenými opatřeními",
"right-abusefilter-revert": "Revertování všech změn provedených vybraným filtrem zneužití",
"right-abusefilter-view-private": "Prohlížení filtrů zneužití označených jako tajné",
@@ -47,6 +52,7 @@
"action-abusefilter-log": "prohlížet si protokol zneužití",
"action-abusefilter-log-detail": "prohlížet si podrobnosti v protokolu zneužití",
"action-abusefilter-private": "prohlížet si tajné údaje v protokolu zneužití",
+ "action-abusefilter-private-log": "prohlížet si záznamy přístupu k soukromým detailům filtrů zneužití",
"action-abusefilter-modify-restricted": "upravovat filtry zneužití s omezenými opatřeními",
"action-abusefilter-revert": "revertovat všechny změny provedené vybraným filtrem zneužití",
"action-abusefilter-view-private": "prohlížet si filtry zneužití označené jako tajné",
@@ -58,6 +64,19 @@
"abusefilter-log-search-filter": "ID filtrů (oddělte svislítky):",
"abusefilter-log-search-title": "Název:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Účinek:",
+ "abusefilter-log-search-impact-all": "Všechny akce",
+ "abusefilter-log-search-impact-saved": "Pouze uložené změny",
+ "abusefilter-log-search-impact-not-saved": "Bez uložených změn",
+ "abusefilter-log-search-entries-label": "Viditelnost:",
+ "abusefilter-log-search-entries-all": "Všechny záznamy",
+ "abusefilter-log-search-entries-hidden": "Jen skryté záznamy",
+ "abusefilter-log-search-entries-visible": "Jen viditelné záznamy",
+ "abusefilter-log-search-action-label": "Spouštějící činnost:",
+ "abusefilter-log-search-action-other": "Jiná",
+ "abusefilter-log-search-action-any": "Všechny",
+ "abusefilter-log-search-action-taken-label": "Provedená akce:",
+ "abusefilter-log-search-action-taken-any": "Všechny",
"abusefilter-log-search-submit": "Hledat",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|spustil|spustila|spustil(a)}} filtr zneužití při činnosti „$3“ na $4.\nProvedená opatření: $5; popis filtru: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|spustil|spustila|spustil(a)}} filtr zneužití při činnosti „$3“ na $4.\nProvedená opatření: $5;\npopis filtru: $6 ($7)",
@@ -71,29 +90,42 @@
"abusefilter-log-details-var": "Proměnná",
"abusefilter-log-details-val": "Hodnota",
"abusefilter-log-details-vars": "Parametry akce",
- "abusefilter-log-details-private": "Tajné údaje",
+ "abusefilter-log-details-private": "Soukromé detaily záznamu",
"abusefilter-log-details-ip": "Zdrojová IP adresa",
+ "abusefilter-log-details-checkuser": "Zkontrolovat uživatele",
"abusefilter-log-noactions": "žádná",
"abusefilter-log-details-diff": "Změny provedené editací",
"abusefilter-log-linkoncontribs": "protokol zneužití",
"abusefilter-log-linkoncontribs-text": "Protokol zneužití pro {{GENDER:$1|tohoto uživatele|tuto uživatelku}}",
+ "abusefilter-log-linkonhistory": "zobrazit záznamy filtrů zneužití",
+ "abusefilter-log-linkonhistory-text": "Zobrazit záznamy filtrů zneužití k této stránce",
"abusefilter-log-hidden": "(skrytý záznam)",
"abusefilter-log-hidden-implicit": "(skryto, protože byla odstraněna revize)",
"abusefilter-log-cannot-see-details": "Nemáte oprávnění k prohlížení podrobností tohoto záznamu.",
+ "abusefilter-log-cannot-see-private-details": "Nemáte dovoleno prohlížet si soukromé detaily tohoto záznamu.",
"abusefilter-log-nonexistent": "Záznam s uvedeným ID neexistuje.",
"abusefilter-log-details-hidden": "U tohoto záznamu si nemůžete prohlédnout podrobnosti, protože byly před veřejností skryty.",
+ "abusefilter-log-details-hidden-implicit": "U tohoto záznamu si nemůžete prohlédnout podrobnosti, protože s ním související revize byla skryta před veřejností.",
"abusefilter-log-private-not-included": "Jeden nebo více filtrů uvedených ID jsou tajné. Protože nemáte dovoleno prohlížet si podrobnosti tajných filtrů, nebyly tyto filtry prohledávány.",
"abusefilter-log-hide-legend": "Skrýt záznam protokolu",
"abusefilter-log-hide-id": "ID záznamu:",
"abusefilter-log-hide-hidden": "Skrýt tento záznam před veřejností",
"abusefilter-log-hide-reason": "Důvod:",
+ "abusefilter-log-hide-reason-other": "Jiný/další důvod:",
"abusefilter-log-hide-forbidden": "Nemáte oprávnění ke skrývání záznamů v protokolu zneužití.",
- "abusefilter-logentry-suppress": "skryl „[[$1]]“",
- "abusefilter-logentry-unsuppress": "odkryl „[[$1]]“",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|skryl|skryla}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|odkryl|odkryla}} $3",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|spustil|spustila|spustil(a)}} $4 při činnosti „$5“ na $3. Provedená opatření: $6 ($7)",
+ "log-action-filter-abusefilter": "Typ změny filtru:",
+ "log-action-filter-abusefilter-create": "Vytvoření nového filtru",
+ "log-action-filter-abusefilter-modify": "Úprava filtru",
+ "log-action-filter-suppress-abuselog": "Utajení záznamu filtru zneužití",
+ "logentry-abusefilterprivatedetails-access": "$1 si {{GENDER:$2|prohlédl|prohlédla}} soukromé detaily k $3",
+ "abusefilterprivatedetails-log-name": "Kniha přístupů k soukromým detailům filtrů zneužití",
"abusefilter-management": "Správa filtrů zneužití",
"abusefilter-list": "Všechny filtry",
"abusefilter-list-id": "ID filtru",
+ "abusefilter-list-pattern": "Výraz",
"abusefilter-list-status": "Stav",
"abusefilter-list-public": "Veřejný popis",
"abusefilter-list-consequences": "Důsledky",
@@ -109,6 +141,7 @@
"abusefilter-enabled": "Zapnutý",
"abusefilter-deleted": "Smazaný",
"abusefilter-disabled": "Vypnutý",
+ "abusefilter-throttled": "omezený",
"abusefilter-hitcount": "$1 {{PLURAL:$1|zásah|zásahy|zásahů}}",
"abusefilter-new": "Vytvořit nový filtr",
"abusefilter-return": "Vrátit se na správu filtrů",
@@ -122,8 +155,16 @@
"abusefilter-list-options-scope-local": "Jen místní pravidla",
"abusefilter-list-options-scope-global": "Jen globální pravidla",
"abusefilter-list-options-scope-all": "Místní i globální pravidla",
- "abusefilter-list-options-disabled": "Vypnuté filtry:",
+ "abusefilter-list-options-further-options": "Další možnosti:",
"abusefilter-list-options-hidedisabled": "Skrýt vypnuté filtry",
+ "abusefilter-list-options-hideprivate": "Skrýt tajné filtry",
+ "abusefilter-list-options-searchfield": "Hledat v podmínkách:",
+ "abusefilter-list-options-searchpattern": "Vložte výraz",
+ "abusefilter-list-options-searchoptions": "Způsob hledání:",
+ "abusefilter-list-options-search-like": "Obyčejný výraz",
+ "abusefilter-list-options-search-rlike": "Regulární výraz",
+ "abusefilter-list-options-search-irlike": "Regulární výraz nerozlišující velikost písmen",
+ "abusefilter-list-regexerror": "Při hledání došlo k chybě: Chyba v syntaxi regulárního výrazu.",
"abusefilter-list-options-submit": "Aktualizovat",
"abusefilter-tools-text": "Zde jsou uvedeny některé nástroje, které se mohou hodit při přípravě a ladění filtrů zneužití.",
"abusefilter-tools-expr": "Testování výrazů",
@@ -138,6 +179,7 @@
"abusefilter-edit": "Editace filtru zneužití",
"abusefilter-edit-subtitle": "Editace filtru $1",
"abusefilter-edit-subtitle-new": "Vytvoření filtru",
+ "abusefilter-edit-token-not-match": "Editace nebyla uložena! Prosím zkuste to znovu.",
"abusefilter-edit-oldwarning": "<strong>Editujete starší verzi tohoto filtru. Uvedené statistiky platí pro aktuální verzi. Pokud uložíte své změny, přepíšete všechny novější úpravy.</strong> &bull; [[Special:AbuseFilter/history/$2|Vrátit se na historii tohoto filtru]].",
"abusefilter-edit-status-label": "Statistika:",
"abusefilter-edit-status": "Z {{PLURAL:$1|1 poslední operace|posledních $1 operací}} tomuto filtru {{PLURAL:$2|odpovídala|odpovídaly|odpovídalo}} $2 ($3 %).",
@@ -146,7 +188,9 @@
"abusefilter-edit-new": "Nový filtr",
"abusefilter-edit-save": "Uložit filtr",
"abusefilter-edit-id": "ID filtru:",
+ "abusefilter-edit-switch-editor": "Přepnout editor",
"abusefilter-edit-description": "Popis:\n:''(veřejně viditelný)''",
+ "abusefilter-edit-field-description": "popis",
"abusefilter-edit-group": "Skupina filtrů:",
"abusefilter-edit-flags": "Příznaky:",
"abusefilter-edit-enabled": "Zapnout tento filtr",
@@ -154,6 +198,7 @@
"abusefilter-edit-hidden": "Skrýt podrobnosti tohoto filtru před veřejností",
"abusefilter-edit-global": "Globální filtr",
"abusefilter-edit-rules": "Podmínky:",
+ "abusefilter-edit-field-conditions": "podmínky",
"abusefilter-edit-notes": "Poznámky:",
"abusefilter-edit-lastmod": "Poslední změna filtru:",
"abusefilter-edit-lastmod-text": "$1, $2",
@@ -164,25 +209,48 @@
"abusefilter-edit-action-blockautopromote": "Odebrat uživateli příznak „schválený“",
"abusefilter-edit-action-degroup": "Vyjmout uživatele ze všech skupin s vyššími oprávněními",
"abusefilter-edit-action-block": "Zablokovat uživatele nebo IP adresu",
+ "abusefilter-edit-action-blocktalk": "Znemožnit uživateli a/nebo IP adrese editovat vlastní diskusní stránku",
"abusefilter-edit-action-throttle": "Provést opatření pouze při překročení dovolené četnosti",
- "abusefilter-edit-action-rangeblock": "Zablokovat rozsah /16, do kterého patří IP adresa uživatele.",
+ "abusefilter-edit-action-rangeblock": "Zablokovat rozsah IP, do kterého patří IP adresa uživatele",
"abusefilter-edit-action-tag": "Označit editaci k dalšímu prověření.",
"abusefilter-edit-throttle-count": "Počet dovolených akcí:",
- "abusefilter-edit-throttle-period": "Časový interval:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekunda|sekundy|sekund}}",
- "abusefilter-edit-throttle-groups": "Limity počítat odděleně pro:\n:''(každý řádek jeden limit, skupiny oddělujte čárkami)''",
+ "abusefilter-edit-throttle-period": "Časový interval (v sekundách):",
+ "abusefilter-edit-throttle-groups": "Limity počítat odděleně pro:",
+ "abusefilter-edit-throttle-ip": "IP adresa",
+ "abusefilter-edit-throttle-user": "Uživatelský účet",
+ "abusefilter-edit-throttle-range": "Rozsah /16",
+ "abusefilter-edit-throttle-creationdate": "Serverový čas vytvoření účtu",
+ "abusefilter-edit-throttle-editcount": "Počet editací",
+ "abusefilter-edit-throttle-site": "Celý web",
+ "abusefilter-edit-throttle-page": "Stránka",
+ "abusefilter-throttle-details": "Dovolit $1 {{PLURAL:$1|akci|akce|akcí}} {{PLURAL:$2|každou sekundu|každé $2 sekundy|každých $2 sekund}}, limity počítané pro: $3",
"abusefilter-edit-warn-message": "Systémové hlášení zobrazené jako varování:",
"abusefilter-edit-warn-other": "Jiné hlášení",
- "abusefilter-edit-warn-other-label": "Název stránky jiného hlášení:\n:''(bez předpony MediaWiki)''",
+ "abusefilter-edit-warn-other-label": "Název stránky jiného hlášení:\n:''(bez předpony „MediaWiki:“)''",
"abusefilter-edit-warn-actions": "Operace:",
- "abusefilter-edit-warn-preview": "Zobrazit náhled zvoleného hlášení",
+ "abusefilter-edit-warn-preview": "Zobrazit/Skrýt náhled zvoleného hlášení",
"abusefilter-edit-warn-edit": "Vytvořit/editovat zvolené hlášení",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Značky]], které se mají přidat (jedna na řádek):",
+ "abusefilter-edit-disallow-message": "Systémové hlášení zobrazené při znemožnění:",
+ "abusefilter-edit-disallow-other": "Jiné hlášení",
+ "abusefilter-edit-disallow-other-label": "Název stránky jiného hlášení:\n:''(bez předpony „MediaWiki:“)''",
+ "abusefilter-edit-disallow-actions": "Operace:",
+ "abusefilter-edit-disallow-preview": "Zobrazit/Skrýt náhled zvoleného hlášení",
+ "abusefilter-edit-disallow-edit": "Vytvořit/editovat zvolené hlášení",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Značky]], které se mají přidat:",
+ "abusefilter-edit-tag-placeholder": "Přidat značky (samostatně nebo oddělené čárkami)",
+ "abusefilter-edit-tag-hidden-placeholder": "Přidat značky (oddělené čárkami)",
+ "abusefilter-edit-block-anon-durations": "Doba trvání bloku pro anonymní uživatele:",
+ "abusefilter-edit-block-user-durations": "Doba trvání bloku pro registrované uživatele:",
+ "abusefilter-block-anon": "Blokovat anonymní uživatele",
+ "abusefilter-block-user": "Blokovat registrované uživatele",
+ "abusefilter-block-talk": "diskusní stránka blokována",
"abusefilter-edit-denied": "Nemůžete se podívat na detaily tohoto filtru, protože není veřejný",
"abusefilter-edit-main": "Parametry filtru",
"abusefilter-edit-done-subtitle": "Filtr upraven",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Vaše úpravy]] [[Special:AbuseFilter/$1|filtru $3]] byly uloženy.",
"abusefilter-edit-badsyntax": "Zadaný filtr obsahuje syntaktickou chybu. Výstup z parseru: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Následující pole jsou povinná a je nutné je vyplnit: $1",
+ "abusefilter-edit-deleting-enabled": "Aktivní filtr nelze označit jako smazaný.",
"abusefilter-edit-restricted": "Nemáte oprávnění editovat tento filtr, neboť obsahuje jedno nebo více opatření s omezeným přístupem.\nPožádejte uživatele s oprávněním přidávat taková opatření, aby potřebnou změnu provedl za vás.",
"abusefilter-edit-viewhistory": "Zobrazit historii tohoto filtru",
"abusefilter-edit-history": "Historie:",
@@ -194,7 +262,7 @@
"abusefilter-edit-export": "Export tohoto filtru pro jinou wiki",
"abusefilter-edit-syntaxok": "Nebyly nalezeny žádné syntaktické chyby.",
"abusefilter-edit-syntaxerr": "Nalezena syntaktická chyba: $1",
- "abusefilter-edit-bad-tags": "Jedna či více uvedených značek nejsou platné.\nZnačky by měly být krátké, neměly by obsahovat žádné zvláštní znaky a neměly by být obsazené softwarem. Zkuste značce vybrat jiný název.",
+ "abusefilter-edit-bad-tags": "Jedna či více uvedených značek nejsou platné.\nZnačky by měly být krátké, nesmějí obsahovat žádné zvláštní znaky a nesmějí být obsazené softwarem. Zkuste značce vybrat jiný název.",
"abusefilter-edit-notallowed": "Nemáte oprávnění vytvářet nebo editovat filtry zneužití",
"abusefilter-edit-notallowed-global": "Nemáte oprávnění vytvářet nebo editovat globální filtry zneužití",
"abusefilter-edit-notallowed-global-custom-msg": "U globálních filtrů nejsou podporována vlastní varovná hlášení.",
@@ -207,8 +275,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Zbytek po dělení (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Umocňování (**)",
"abusefilter-edit-builder-group-op-comparison": "Porovnávací operátory",
- "abusefilter-edit-builder-op-comparison-equal": "Rovná se (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Nerovná se (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Hodnota se rovná (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Hodnota a typ se rovnají (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Hodnota se nerovná (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Hodnota a typ se nerovnají (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Menší než (<)",
"abusefilter-edit-builder-op-comparison-gt": "Větší než (>)",
"abusefilter-edit-builder-op-comparison-lte": "Menší nebo rovno (<=)",
@@ -231,23 +301,30 @@
"abusefilter-edit-builder-funcs-lcase": "Převést na malá písmena (lcase)",
"abusefilter-edit-builder-funcs-ucase": "Převést na velká písmena (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normalizovat zaměnitelné znaky (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normalizovat řetězec a hledat v něm několik podřetězců v režimu OR (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Normalizovat řetězec a hledat v něm několik podřetězců v režimu AND (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Odstranit zdvojené znaky (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Speciální znaky / celkem znaků (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normalizovat (norm)",
"abusefilter-edit-builder-funcs-count": "Počet výskytů řetězce X v řetězci Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Kolikrát se regulární výraz X vyskytuje v řetězci Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Pole shod regulárních výrazů s textem pro každou skupinu zachycení (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Odstranit bílé znaky (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Odstranit speciální znaky (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Patří IP adresa do rozsahu? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Hledání několika podřetězců v řetězci (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Hledat několik podřetězců v řetězci v režimu OR (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Hledat v řetězci více podřetězců v režimu AND. (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Zjistí, zde je daný argument rovný (===) libovolnému z následujících argumentů (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Podřetězec (substr)",
"abusefilter-edit-builder-funcs-strpos": "Pozice podřetězce v řetězci (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Nahradit podřetězec jiným řetězcem (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Oescapovat řetězec jako literál do regexu (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Nastavit proměnnou (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Normalizovat HTML entity na znaky unicode (sanitize)",
"abusefilter-edit-builder-group-vars": "Proměnné",
"abusefilter-edit-builder-vars-accountname": "Uživatelské jméno (při zakládání nového účtu)",
"abusefilter-edit-builder-vars-timestamp": "Čas editace v unixovém formátu",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Čas záznamu",
"abusefilter-edit-builder-vars-action": "Operace",
"abusefilter-edit-builder-vars-addedlines": "Řádky přidané při editaci",
"abusefilter-edit-builder-vars-delta": "Změna velikosti způsobená editací",
@@ -258,19 +335,21 @@
"abusefilter-edit-builder-vars-new-content-model": "Nový model obsahu",
"abusefilter-edit-builder-vars-removedlines": "Řádky odstraněné při editaci",
"abusefilter-edit-builder-vars-summary": "Shrnutí editace/zdůvodnění",
- "abusefilter-edit-builder-vars-article-id": "ID stránky",
- "abusefilter-edit-builder-vars-article-ns": "Jmenný prostor stránky",
- "abusefilter-edit-builder-vars-article-text": "Název stránky (bez jmenného prostoru)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Úplný název stránky",
- "abusefilter-edit-builder-vars-article-views": "Zobrazení stránky",
+ "abusefilter-edit-builder-vars-page-id": "ID stránky",
+ "abusefilter-edit-builder-vars-page-ns": "Jmenný prostor stránky",
+ "abusefilter-edit-builder-vars-page-title": "Název stránky (bez jmenného prostoru)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Úplný název stránky",
+ "abusefilter-edit-builder-vars-page-age": "Stáří stránky (v sekundách)",
"abusefilter-edit-builder-vars-movedfrom-id": "ID přesouvané stránky",
"abusefilter-edit-builder-vars-movedfrom-ns": "Původní jmenný prostor přesouvané stránky",
- "abusefilter-edit-builder-vars-movedfrom-text": "Název přesouvané stránky",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Úplný název přesouvané stránky",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Název přesouvané stránky",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Úplný název přesouvané stránky",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Stáří stránky, která se přesunuje (v sekundách)",
"abusefilter-edit-builder-vars-movedto-id": "ID stránky, na kterou se přesouvá",
"abusefilter-edit-builder-vars-movedto-ns": "Jmenný prostor, do kterého se přesouvá",
- "abusefilter-edit-builder-vars-movedto-text": "Název, na který se stránka přesouvá",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Úplný název, na který se stránka přesouvá",
+ "abusefilter-edit-builder-vars-movedto-title": "Název, na který se stránka přesouvá",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Úplný název, na který se stránka přesouvá",
+ "abusefilter-edit-builder-vars-movedto-age": "Stáří stránky, na kterou se přesunuje (v sekundách)",
"abusefilter-edit-builder-vars-user-editcount": "Počet uživatelových editací",
"abusefilter-edit-builder-vars-user-age": "Stáří uživatelského účtu",
"abusefilter-edit-builder-vars-user-name": "Uživatelské jméno",
@@ -280,10 +359,14 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "Čas, kdy byla ověřena e-mailová adresa",
"abusefilter-edit-builder-vars-recent-contributors": "Posledních deset uživatelů, kteří editovali příslušnou stránku",
"abusefilter-edit-builder-vars-first-contributor": "První autor této stránky",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Posledních deset uživatelů, kteří editovali přesouvanou stránku",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "První uživatel, který editoval přesouvanou stránku",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Posledních deset uživatelů, kteří editovali stránku, na kterou se přesouvá",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "První uživatel, který editoval stránku, na kterou se přesouvá",
"abusefilter-edit-builder-vars-all-links": "Všechny externí odkazy ve výsledném textu",
"abusefilter-edit-builder-vars-added-links": "Všechny externí odkazy přidané při editaci",
"abusefilter-edit-builder-vars-removed-links": "Všechny externí odkazy odstraněné při editaci",
- "abusefilter-edit-builder-vars-old-text": "Původní zdrojový text stránky před editací",
+ "abusefilter-edit-builder-vars-old-text": "Původní zdrojový text stránky před editací (už se nepoužívá)",
"abusefilter-edit-builder-vars-new-text": "Nový zdrojový text stránky po editaci",
"abusefilter-edit-builder-vars-new-pst": "Wikitext nové stránky po transformaci před uložením",
"abusefilter-edit-builder-vars-diff-pst": "Unifikovaný rozdíl změn způsobených editací, po transformaci před uložením",
@@ -294,9 +377,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "Úroveň zamčení stránky pro přesun",
"abusefilter-edit-builder-vars-restrictions-create": "Úroveň zamčení stránky pro založení",
"abusefilter-edit-builder-vars-restrictions-upload": "Úroveň zamčení souboru pro načtení",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Úroveň zamčení přesouvané stránky pro editaci",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Úroveň zamčení přesouvané stránky pro přesun",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Úroveň zamčení přesouvané stránky pro založení stránky",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Úroveň zamčení přesouvané stránky pro načtení souboru",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Úroveň zamčení stránky, na kterou se přesouvá, pro editaci",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Úroveň zamčení stránky, na kterou se přesouvá, pro přesun",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Úroveň zamčení stránky, na kterou se přesouvá, pro založení stránky",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Úroveň zamčení stránky, na kterou se přesouvá, pro načtení souboru",
"abusefilter-edit-builder-vars-old-text-stripped": "Původní text stránky bez všech značek",
"abusefilter-edit-builder-vars-old-links": "Odkazy na stránce před editací",
- "abusefilter-edit-builder-vars-old-html": "Původní text stránky naformátovaný do HTML",
+ "abusefilter-edit-builder-vars-old-html": "Původní text stránky naformátovaný do HTML (už se nepoužívá)",
"abusefilter-edit-builder-vars-minor-edit": "Zda byla editace označena jako malá",
"abusefilter-edit-builder-vars-file-sha1": "SHA-1 otisk obsahu souboru",
"abusefilter-edit-builder-vars-file-size": "Velikost souboru v bajtech",
@@ -323,6 +414,7 @@
"abusefilter-history-filterid": "Filtr",
"abusefilter-history-select-legend": "Upřesnit hledání",
"abusefilter-history-select-user": "Uživatel:",
+ "abusefilter-history-select-filter": "ID filtru:",
"abusefilter-history-select-submit": "Provést",
"abusefilter-history-diff": "Změny",
"abusefilter-history-error-hidden": "Požadovaný filtr je skrytý, takže si jeho historii prohlédnout nemůžete.",
@@ -333,14 +425,17 @@
"abusefilter-exception-unclosedstring": "Řetězec začínající na pozici $1 není ukončen.",
"abusefilter-exception-invalidoperator": "Neplatný operátor „$2“ na pozici $1.",
"abusefilter-exception-unrecognisedtoken": "Neznámý element „$2“ na pozici $1.",
- "abusefilter-exception-noparams": "Funkce „$2“ na pozici $1 potřebuje parametry.",
+ "abusefilter-exception-noparams": "Funkci „$2“ na pozici $1 nebyly předány parametry.\n{{PLURAL:$3|Očekáván jeden parametr|Očekávány $3 parametry|Očekáváno $3 parametrů}}.",
"abusefilter-exception-dividebyzero": "Neplatný pokus o dělení čísla $2 nulou na pozici $1.",
"abusefilter-exception-unrecognisedvar": "Neznámá proměnná $2 na pozici $1",
"abusefilter-exception-notenoughargs": "Nedostatek parametrů při volání funkce $2 na pozici $1.\n{{PLURAL:$3|Očekáván 1 parametr|Očekávány $3 parametry|Očekáváno $3 parametrů}}, volání používá $4.",
"abusefilter-exception-regexfailure": "Chyba v regulárním výrazu „$3“ na znaku $1: „$2“",
"abusefilter-exception-overridebuiltin": "Nedovolené předefinování vestavěné proměnné „$2“ na pozici $1.",
- "abusefilter-exception-outofbounds": "Na pozici $1 požadována neexistující $2. položka seznamu (velikost seznamu = $3).",
- "abusefilter-exception-notlist": "Na pozici $1 požadován prvek pole po proměnné, která není pole.",
+ "abusefilter-exception-outofbounds": "Na pozici $1 požadována neexistující $2. položka pole (velikost pole = $3).",
+ "abusefilter-exception-notarray": "Na pozici $1 požadován prvek pole po proměnné, která není pole.",
+ "abusefilter-exception-unclosedcomment": "Neuzavřený komentář na znaku $1.",
+ "abusefilter-exception-invalidiprange": "Neplatný rozsah IP adres „$2“ na pozici $1.",
+ "abusefilter-exception-disabledvar": "Proměnná $2 na pozici $1 se už nepoužívá.",
"abusefilter-action-tag": "Značka",
"abusefilter-action-throttle": "Omezení",
"abusefilter-action-warn": "Varování",
@@ -356,8 +451,9 @@
"abusefilter-revert-periodstart": "Začátek období:",
"abusefilter-revert-periodend": "Konec období:",
"abusefilter-revert-search": "Vybrat operace",
- "abusefilter-revert-filter": "Filtr:",
+ "abusefilter-revert-filter": "ID filtru:",
"abusefilter-revert-preview-intro": "Níže jsou uvedeny operace provedené filtrem zneužití, které budou tímto vráceny.\nPečlivě je zkontrolujte a kliknutím na „{{int:abusefilter-revert-confirm}}“ můžete jejich vrácení schválit.",
+ "abusefilter-revert-confirm-legend": "Potvrdit revert",
"abusefilter-revert-confirm": "Potvrdit",
"abusefilter-revert-success": "Všechny operace, které filtr zneužití provedl na základě [[Special:AbuseFilter/$1|filtru $2]], byly vráceny.",
"abusefilter-revert-reason": "Automatické vrácení všech operací, které filtr zneužití provedl kvůli filtru $1.\nUvedený důvod: $2",
@@ -369,12 +465,20 @@
"abusefilter-test-submit": "Otestovat",
"abusefilter-test-load": "Načíst",
"abusefilter-test-user": "Změny provedené uživatelem:",
+ "abusefilter-test-nobots": "Skrýt editace robotů",
"abusefilter-test-period-start": "Změny provedené po:",
"abusefilter-test-period-end": "Změny provedené před:",
"abusefilter-test-page": "Změněná stránka:",
"abusefilter-test-shownegative": "Zobrazit i změny, které filtru nevyhovují",
"abusefilter-test-syntaxerr": "Zadaný filtr obsahuje syntaktickou chybu.\nPodrobnější vysvětlení můžete získat kliknutím na tlačítko „{{int:abusefilter-edit-check}}“.",
"abusefilter-test-badtitle": "Zadaný název stránky je neplatný. Možná obsahuje jeden či více znaků, které nelze v názvech stránek používat.",
+ "abusefilter-test-action": "Typ akce:",
+ "abusefilter-test-search-type-all": "Všechny akce",
+ "abusefilter-test-search-type-edit": "Editace",
+ "abusefilter-test-search-type-move": "Přesuny",
+ "abusefilter-test-search-type-delete": "Smazání",
+ "abusefilter-test-search-type-upload": "Načtení souboru",
+ "abusefilter-test-search-type-createaccount": "Založení účtu",
"abusefilter-changeslist-examine": "prozkoumat",
"abusefilter-examine": "Prozkoumat jednotlivé editace",
"abusefilter-examine-intro": "Na této stránce budete moci u zvolené editace prozkoumat proměnné, které pro ni Filtr zneužití vygeneroval, a otestovat na ní filtry.",
@@ -401,6 +505,7 @@
"abusefilter-topnav-import": "Import filtru",
"abusefilter-log-name": "Kniha filtrů zneužití",
"abusefilter-log-header": "Tento protokol obsahuje přehled změn filtrů.\nÚplné podrobnosti naleznete v [[Special:AbuseFilter/history|seznamu posledních změn filtrů]].",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|vytvořil|vytvořila}} $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|upravil|upravila|upravil(a)}} $4 ($5)",
"abusefilter-log-noresults": "Žádné výsledky",
"abusefilter-diff-title": "Rozdíly mezi verzemi",
@@ -416,40 +521,16 @@
"abusefilter-import-submit": "Importovat data",
"abusefilter-group-default": "Výchozí",
"abusefilter-http-error": "Došlo k chybě HTTP: $1.",
- "apihelp-abusefiltercheckmatch-description": "Zkontrolovat, zda se filtr zneužití shoduje se sadou proměnných, editor ve filtru zaznamenal změnu.\n\nJe vyžadována jedna z následujících možností: vars, rcid nebo logid.",
- "apihelp-abusefiltercheckmatch-param-filter": "Plný text filtru, který se má kontrolovat na shodu.",
- "apihelp-abusefiltercheckmatch-param-vars": "Pole proměnných vůči kterým chcete testovat, kódované v JSON.",
- "apihelp-abusefiltercheckmatch-param-rcid": "ID poslední změny vůči které chcete testovat.",
- "apihelp-abusefiltercheckmatch-param-logid": "ID filtru zneužití vůči kterému chcete testovat.",
- "apihelp-abusefiltercheckmatch-example-1": "Otestovat, zda poslední změna s ID 15 odpovídá jednoduchému filtru",
- "apihelp-abusefilterchecksyntax-description": "Zkontrolovat syntaxi filtru zneužití.",
- "apihelp-abusefilterchecksyntax-param-filter": "Plný text filtru, na kterém se zkontroluje syntaxe",
- "apihelp-abusefilterchecksyntax-example-1": "Zkontrolovat syntaxi platného filtru",
- "apihelp-abusefilterchecksyntax-example-2": "Zkontrolovat syntaxi neplatného filtru",
- "apihelp-abusefilterevalexpression-description": "Vyhodnotí výraz filtru zneužití.",
- "apihelp-abusefilterevalexpression-param-expression": "Výraz, který se má vyhodnotit.",
- "apihelp-abusefilterevalexpression-example-1": "Vyhodnotit jednoduchý výraz",
- "apihelp-abusefilterunblockautopromote-description": "Odblokuje uživateli možnost získat automatické povýšení zablokovanou důsledkem filtru zneužití.",
- "apihelp-abusefilterunblockautopromote-param-user": "Jméno uživatele, jehož chcete odblokovat.",
- "apihelp-abusefilterunblockautopromote-example-1": "Zrušit blokování automatického povýšení uživatele [[User:Example]]",
- "apihelp-query+abusefilters-description": "Zobrazit podrobnosti o filtrech zneužití.",
- "apihelp-query+abusefilters-param-startid": "ID filtru, od kterého se začne s výčtem.",
- "apihelp-query+abusefilters-param-endid": "ID filtru, u kterého výčet skončí.",
- "apihelp-query+abusefilters-param-show": "Zobrazit pouze filtry, které splňují tato kritéria.",
- "apihelp-query+abusefilters-param-limit": "Maximální počet zobrazených filtrů.",
- "apihelp-query+abusefilters-param-prop": "Jaké vlastnosti získat.",
- "apihelp-query+abusefilters-example-1": "Zobrazit zapnuté veřejné filtry",
- "apihelp-query+abusefilters-example-2": "Zobrazit podrobnosti o filtrech",
- "apihelp-query+abuselog-description": "Zobrazit události, které byly zachyceny filtrem zneužití.",
- "apihelp-query+abuselog-param-start": "Časová značka, od které se začne s výčtem.",
- "apihelp-query+abuselog-param-end": "Časová značka, u které výčet skončí.",
- "apihelp-query+abuselog-param-user": "Zobrazit pouze změny provedené daným uživatelem nebo z příslušné IP adresy.",
- "apihelp-query+abuselog-param-title": "Zobrazit pouze změny, které se vyskytují na dané stránce.",
- "apihelp-query+abuselog-param-filter": "Zobrazit pouze změny, které byly zachyceny daným filtrem.",
- "apihelp-query+abuselog-param-limit": "Maximální počet změn k zobrazení.",
- "apihelp-query+abuselog-param-prop": "Jaké vlastnosti získat.",
- "apihelp-query+abuselog-example-1": "Zobrazit poslední záznamy protokolu",
- "apihelp-query+abuselog-example-2": "Zobrazit poslední záznamy protokolu pro stránku [[API]]",
- "apierror-abusefilter-canttest": "Nemáte oprávnění testovat filtry zneužití.",
- "apierror-abusefilter-cantcheck": "Nemáte oprávnění kontrolovat syntaxi filtrů zneužití."
+ "abusefilter-view-private-submit": "Zobrazit soukromé detaily",
+ "abusefilter-view-private": "Zobrazit soukromé detaily",
+ "abusefilter-view-private-reason": "Důvod přístupu k soukromým detailům:",
+ "abusefilter-log-details-id": "ID protokolovacího záznamu",
+ "abusefilter-invalid-request": "Neplatný požadavek! K soukromým detailům záznamu musíte jít skrze formulář na stránce [[Special:AbuseLog/$1]] a musíte uvést důvod.",
+ "abusefilter-invalid-request-noid": "Neplatný požadavek! K soukromým detailům záznamu musíte jít skrze formulář na stránce podrobností záznamu zneužití a musíte uvést důvod.",
+ "log-description-abusefilterprivatedetails": "Tento záznam ukazuje seznam pokusů uživatele prohlédnout si soukromé detaily protokolu zneužití.",
+ "abusefilter-noreason": "Varování: K prohlížení soukromých detailů tohoto záznamu musíte uvést důvod.",
+ "abusefilter-log-ip-not-available": "Nedostupná",
+ "abusefilter-tag-reserved": "Značka <code>abusefilter-condition-limit</code> je vyhrazena pro vnitřní potřebu filtrů zneužití.",
+ "tag-abusefilter-condition-limit": "překročen limit podmínek",
+ "tag-abusefilter-condition-limit-description": "Editace či jiné aktivity, které nebylo možné zkontrolovat všemi zapnutými [[Special:AbuseFilter|filtry zneužití]] ([[mw:Extension:AbuseFilter/Conditions|nápověda]])."
}
diff --git a/AbuseFilter/i18n/csb.json b/AbuseFilter/i18n/csb.json
new file mode 100644
index 00000000..4373ca23
--- /dev/null
+++ b/AbuseFilter/i18n/csb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kirsan"
+ ]
+ },
+ "abusefilter-disallowed": "Hewòtné dzejanie aùtomaticzno òstało ùznóné za szkòdlëwé i w związkù z tim òdrzuconé. Jeżlë ùwôżôsz równak, że twòja edicjô bëła bëlnô, zwróc sã do sprôwnika i pòinfòrmùj gò ò ti situacje. Krótczi opisënk reglë nadùżëcô zrzeszony z twòjim dzejanim: $1"
+}
diff --git a/AbuseFilter/i18n/cv.json b/AbuseFilter/i18n/cv.json
index a9000462..11fef7cd 100644
--- a/AbuseFilter/i18n/cv.json
+++ b/AbuseFilter/i18n/cv.json
@@ -2,12 +2,16 @@
"@metadata": {
"authors": [
"Salam",
- "Chuvash2014"
+ "Chuvash2014",
+ "Chuvash"
]
},
+ "abuselog": "Фильтрсен журналĕ",
+ "abusefilter-log": "Фильтрсен журналĕ",
+ "abusefilter-log-search": "Фильтрсен журналĕнче шырани",
"abusefilter-log-search-user": "Усă куракан:",
"abusefilter-log-search-filter": "Ала идентификаторӗ",
- "abusefilter-log-search-title": "Пуҫелӗк:",
+ "abusefilter-log-search-title": "Ячĕ:",
"abusefilter-log-search-wiki": "Википроект:",
"abusefilter-log-search-submit": "Шыра",
"abusefilter-log-detailedentry-global": "$1 глобаллӑ ала",
@@ -23,11 +27,11 @@
"abusefilter-log-details-ip": "Хутшӑнаканӑн IP адресӗ",
"abusefilter-log-noactions": "ҫук",
"abusefilter-log-details-diff": "Улшӑнури улӑштарӑвӗсем",
+ "abusefilter-log-linkonhistory": "фильтрсен журналне пăхмалли",
+ "abusefilter-log-linkonhistory-text": "Кунăн фильтрĕсен журналĕсене пăхмалли",
"abusefilter-log-hide-id": "Журнал ҫырӑвӗн идентификаторӗ:",
"abusefilter-log-hide-reason": "Сӑлтав:",
- "abusefilter-logentry-suppress": "[[$1]] пытар",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\" кăтарт",
- "abusefilter-list": "Мӗн пур ала",
+ "abusefilter-list": "Пĕтĕм фильтрсем",
"abusefilter-list-id": "Ала идентификаторӗ",
"abusefilter-list-status": "Лару-тӑру",
"abusefilter-list-public": "Пӗтӗмӗшле ӑнлантару",
@@ -43,6 +47,7 @@
"abusefilter-enabled": "Хускатнă",
"abusefilter-deleted": "Тӗплен",
"abusefilter-disabled": "Чарнă",
+ "abusefilter-list-options": "Параметрсем",
"abusefilter-tools-reautoconfirm-user": "Усă куракан:",
"abusefilter-edit-new": "Ҫӗнӗ ала",
"abusefilter-edit-save": "Алана ҫырса хур",
@@ -65,16 +70,23 @@
"abusefilter-edit-builder-op-comparison-gt": "Ытларах (>)",
"abusefilter-edit-builder-op-comparison-lte": "Сахалрах е танлӑ (<=)",
"abusefilter-edit-builder-op-comparison-gte": "Ытларах е танлӑ (>=)",
- "abusefilter-edit-builder-group-op-bool": "Буль операторӗсем",
+ "abusefilter-edit-builder-group-op-bool": "Boolean операторӗсем",
"abusefilter-edit-builder-op-bool-not": "МАР (!)",
"abusefilter-edit-builder-op-bool-and": "ТАТА (&)",
"abusefilter-edit-builder-op-bool-or": "Е (|)",
+ "abusefilter-edit-builder-group-misc": "Тĕрлисем",
+ "abusefilter-edit-builder-group-funcs": "Функцисем",
+ "abusefilter-edit-builder-funcs-lcase": "Пĕчĕк буквăран (lcase)",
+ "abusefilter-edit-builder-funcs-ucase": "Пысăк буквăран (ucase)",
+ "abusefilter-filter-log": "Фильтрсен юлашки улăшăннисем",
"abusefilter-history-user": "Хутшăнакан",
"abusefilter-history-deleted": "Тӗпленӗ",
- "abusefilter-history-filterid": "Ала",
+ "abusefilter-history-filterid": "Фильтр",
"abusefilter-history-select-user": "Усă куракан:",
"abusefilter-history-diff": "Улшӑнусем",
"abusefilter-examine-user": "Усă куракан:",
"abusefilter-examine-submit": "Туп",
- "abusefilter-topnav-home": "Килелле"
+ "abusefilter-topnav-home": "Килелле",
+ "abusefilter-topnav-log": "Фильтрсен журналĕ",
+ "abusefilter-log-name": "Фильтрсен журналĕ"
}
diff --git a/AbuseFilter/i18n/cy.json b/AbuseFilter/i18n/cy.json
index 4135feca..a6928d14 100644
--- a/AbuseFilter/i18n/cy.json
+++ b/AbuseFilter/i18n/cy.json
@@ -11,7 +11,6 @@
"abusefilter": "Ffurfweddiad hidlydd camddefnydd",
"abuselog": "Log camddefnydd",
"abusefilter-intro": "Croeso i'r rhyngwyneb rheoli'r Hidlydd Camddefnydd.\nMeddalwedd awtomatig sy'n ymateb yn dybiaethol i bobl gweithred yw'r Hildydd Camddefnydd.\nMae'r rhyngwyneb hwn yn arddangos rhestr o hidlyddion penodedig, sy'n eu galluogi i gael eu haddasu.",
- "abusefilter-mustbeeditor": "Am resymau diogelwch, dim ond defnyddwyr sydd â'r hawl i addasu hidlyddion camddefnydd gaiff ddefnyddio'r rhyngwyneb hwn.",
"abusefilter-warning": "'''Rhybudd:''' Mae'r weithred hon wedi'i dyfarnu'n awtomatig fel gweithred niweidiol.\nBydd golygiadau anadeiladol yn cael eu gwrthdroi'n syth, a bydd cyfrif neu gyfeiriad IP defnyddwyr sy'n parhau i olygu'n anadeiladol yn cael eu blocio.\nOs ydych o'r farn fod y weithred hon yn adeiladol, gallwch ei chyflwyno unwaith eto er mwyn ei chadarnhau.\nDisgrifiad byr o'r rheol camddefnydd y mae'ch gweithred chi yn cyfateb ag ef yw: $1",
"abusefilter-disallowed": "Clustnododd y meddalwedd y weithred hon yn un niweidiol, felly ni weithredwyd hi.\nOs ydych yn meddwl bod y weithred o ddefnydd, rhowch wybod i weinyddwr am ddiben y weithred.\nDyma ddisgrifiad byr o'r rheol camddefnydd yr oedd y weithred yn cyfateb iddi: $1",
"abusefilter-blocker": "Hidlydd camddefnydd",
diff --git a/AbuseFilter/i18n/da.json b/AbuseFilter/i18n/da.json
index fd0c11b4..4c3e962a 100644
--- a/AbuseFilter/i18n/da.json
+++ b/AbuseFilter/i18n/da.json
@@ -15,14 +15,16 @@
"Tjernobyl",
"MGA73",
"Matma Rex",
- "Cgtdk"
+ "Cgtdk",
+ "Jorn Ari",
+ "Joedalton",
+ "Saederup92"
]
},
"abusefilter-desc": "Anvender automatiske heuristikker på redigeringer",
"abusefilter": "Konfiguration af misbrugsfilter",
"abuselog": "Misbrugslog",
"abusefilter-intro": "Velkommen til grænsefladen for håndtering af misbrugsfilteret.\nMisbrugsfilteret er en automatisk mekanisme i softwaren som udfører automatisk tjek af alle handlinger.\nDenne grænseflade viser en liste over definerede filtre, og gør det muligt at ændre dem.",
- "abusefilter-mustbeeditor": "Af sikkerhedsmæssige årsager kan denne grænseflade kun bruges af brugere med rettigheder til at ændre misbrugsfiltre.",
"abusefilter-warning": "'''Advarsel:''' Denne handling er automatisk blevet identificeret som skadelig.\nIkke-konstruktive redigeringer bliver fjernet hurtigt,\nog forstyrrende eller gentagende ikke-konstruktive redigeringer vil føre til at din konto eller IP-adresse bliver blokeret.\nHvis du mener at dette er en konstruktiv handling, så klik på \"Gem\" igen for at bekræfte.\nHer er kortfattet beskrivelse af misbrugsreglen som din handling udløste: $1",
"abusefilter-disallowed": "Denne handling er automatisk blevet identificeret som skadelig,\nog er derfor ikke tilladt.\nHvis du mener at din redigering var konstruktiv, så kontakt venligst en administrator, og informer denne om hvad du forsøgte at gøre.\nHer er en kortfattet beskrivelse af misbrugsreglen som din handling udløste: $1",
"abusefilter-blocked-display": "Denne handling er automatisk blevet identificeret som skadelig,\nog du er derfor blevet forhindret i at udføre den.\nHerudover, for at beskytte {{SITENAME}}, er din brugerkonto og alle associerede IP-adresser blevet blokeret fra at kunne redigere.\nHvis dette er sket som en fejl, så kontakt venligst en administrator.\nHer er en kortfattet beskrivelse af misbrugsreglen som din handling udløste: $1",
@@ -37,6 +39,7 @@
"right-abusefilter-log": "Se misbrugsloggen",
"right-abusefilter-log-detail": "Se detaljerede poster i misbrugsloggen",
"right-abusefilter-private": "Se privat information i misbrugsloggen",
+ "right-abusefilter-private-log": "Se misbrugsfiltret for private oplysningers adgangslog",
"right-abusefilter-modify-restricted": "Ændre misbrugsfiltre med begrænsede handlinger",
"right-abusefilter-revert": "Tilbagerul alle ændringer udført af et bestemt misbrugsfilter",
"right-abusefilter-view-private": "Se misbrugsfiltre markeret som private",
@@ -59,6 +62,9 @@
"abusefilter-log-search-filter": "Filter-id'er (adskil med lodrette streger):",
"abusefilter-log-search-title": "Titel:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact-all": "Alle handlinger",
+ "abusefilter-log-search-impact-saved": "Kun gemte ændringer",
+ "abusefilter-log-search-entries-label": "Synlighed:",
"abusefilter-log-search-submit": "Søg",
"abusefilter-log-entry": "$1: $2 udløste et misbrugsfilter med handlingen \"$3\" på $4.\nForanstaltninger: $5.\nFilterbeskrivelse: $6",
"abusefilter-log-entry-withdiff": "$1: $2 udløste et misbrugsfilter med handlingen \"$3\" på $4.\nForanstaltninger: $5;\nFilterbeskrivelse: $6 ($7)",
@@ -72,7 +78,7 @@
"abusefilter-log-details-var": "Variabel",
"abusefilter-log-details-val": "Værdi",
"abusefilter-log-details-vars": "Handlingsparametre",
- "abusefilter-log-details-private": "Privat information",
+ "abusefilter-log-details-private": "Privat log information",
"abusefilter-log-details-ip": "Ophavs-IP",
"abusefilter-log-noactions": "ingen",
"abusefilter-log-details-diff": "Ændringer udført i redigeringen",
@@ -81,18 +87,19 @@
"abusefilter-log-hidden": "(post skjult)",
"abusefilter-log-hidden-implicit": "(skjult da versionen er blevet slettet)",
"abusefilter-log-cannot-see-details": "Du har ikke tilladelse til at se detaljer om denne post.",
+ "abusefilter-log-cannot-see-private-details": "Du har ikke tilladelse til at se private oplysninger om denne andgang",
"abusefilter-log-details-hidden": "Du kan ikke se detaljerne for denne post, fordi den er skjult for offentligheden",
"abusefilter-log-hide-legend": "Skjul loghandlig",
"abusefilter-log-hide-id": "Loghandlings-id:",
"abusefilter-log-hide-hidden": "Skjul denne loghandling for offentligheden",
"abusefilter-log-hide-reason": "Årsag:",
"abusefilter-log-hide-forbidden": "Du har ikke rettigheder til at skjule poster i misbrugsfilteret",
- "abusefilter-logentry-suppress": "Skjulte \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "Gjorde \"[[$1]]\" synligt for offentligheden igen",
"logentry-abusefilter-hit": "$1 udløste $4 med handlingen \"$5\" på $3. Tiltag: $6 ($7)",
+ "abusefilterprivatedetails-log-name": "Misbrugsfilter for private oplysningers adgangslog",
"abusefilter-management": "Håndtering af misbrugsfilter",
"abusefilter-list": "Alle filtre",
"abusefilter-list-id": "Filter-ID",
+ "abusefilter-list-pattern": "Mønster",
"abusefilter-list-status": "Status",
"abusefilter-list-public": "Offentlig beskrivelse",
"abusefilter-list-consequences": "Konsekvenser",
@@ -121,7 +128,6 @@
"abusefilter-list-options-scope-local": "Kun lokale regler",
"abusefilter-list-options-scope-global": "Kun globale regler",
"abusefilter-list-options-scope-all": "Lokale og globale regler",
- "abusefilter-list-options-disabled": "Deaktiverede filtre:",
"abusefilter-list-options-hidedisabled": "Skjul deaktiverede filtre",
"abusefilter-list-options-submit": "Opdatér",
"abusefilter-tools-text": "Her er nogle værktøjer som kan være nyttige til at formulere og fejlsøge misbrugsfiltre.",
@@ -141,11 +147,11 @@
"abusefilter-edit-status-label": "Statistik:",
"abusefilter-edit-status": "Af {{PLURAL:$1|den sidste handling|de sidste $1 handlinger}} har dette filter matchet $2 ($3 %).",
"abusefilter-edit-status-profile": "Af {{PLURAL:$1|den sidste handling|de sidste $1 handlinger}} har dette filter matchet $2 ($3 %).\nI gennemsnit er operationstiden $4 ms, og det optager $5 {{PLURAL:$5|tilstand|tilstande}} af tilstandsgrænsen.",
- "abusefilter-edit-throttled": "'''Advarsel''': dette filter blev automatisk deaktiveret som en sikkerhedsforanstaltning.\nDet har nået grænsen ved at matche mere end $1 % af handlingerne.",
"abusefilter-edit-new": "Nyt filter",
"abusefilter-edit-save": "Gem filter",
"abusefilter-edit-id": "Filter-ID:",
"abusefilter-edit-description": "Beskrivelse:\n:''(vises offentligt)''",
+ "abusefilter-edit-field-description": "beskrivelse",
"abusefilter-edit-group": "Filtergruppe:",
"abusefilter-edit-flags": "Flag:",
"abusefilter-edit-enabled": "Aktivér dette filter",
@@ -167,9 +173,12 @@
"abusefilter-edit-action-rangeblock": "Bloker det /16-interval, som brugeren kommer fra",
"abusefilter-edit-action-tag": "Mærk redigeringen til yderligere gennemgang",
"abusefilter-edit-throttle-count": "Antal tilladte handlinger:",
- "abusefilter-edit-throttle-period": "Tidsrum:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekund|sekunder}}",
+ "abusefilter-edit-throttle-period": "Tidsrum (i sekunder):",
"abusefilter-edit-throttle-groups": "Gruppebegrænsning efter:\n:''(én pr. linje, kombiner med kommaer)''",
+ "abusefilter-edit-throttle-ip": "IP-adresse",
+ "abusefilter-edit-throttle-user": "Brugerkonto",
+ "abusefilter-edit-throttle-site": "Hele siden",
+ "abusefilter-edit-throttle-page": "Side",
"abusefilter-edit-warn-message": "Systemmeddelelse som skal bruges til advarsel:",
"abusefilter-edit-warn-other": "Anden meddelelse",
"abusefilter-edit-warn-other-label": "Sidenavn på anden meddelelse:\n:''(uden MediaWiki-præfiks)''",
@@ -177,6 +186,9 @@
"abusefilter-edit-warn-preview": "Forhåndsvis valgt meddelelse",
"abusefilter-edit-warn-edit": "Opret/redigér valgt meddelelse",
"abusefilter-edit-tag-tag": "Mærker som skal anvendes (et pr. linje):",
+ "abusefilter-edit-block-anon-durations": "Varighed på blokeringen for anonyme brugere:",
+ "abusefilter-block-anon": "Bloker onyme brugere",
+ "abusefilter-block-user": "bloker registrerede brugere",
"abusefilter-edit-denied": "Du kan ikke se detaljerne i dette filter, da det er skjult for offentligheden.",
"abusefilter-edit-main": "Filterparametre",
"abusefilter-edit-done-subtitle": "Filter redigeret",
@@ -206,8 +218,8 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Rest/modulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Potens (**)",
"abusefilter-edit-builder-group-op-comparison": "Sammenligningsoperatører",
- "abusefilter-edit-builder-op-comparison-equal": "Lig med (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Ikke lig med (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Værdien er lig med (==)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Værdien er ikke lig med (!=)",
"abusefilter-edit-builder-op-comparison-lt": "Mindre end (<)",
"abusefilter-edit-builder-op-comparison-gt": "Større end (>)",
"abusefilter-edit-builder-op-comparison-lte": "Mindre end eller lig med (<=)",
@@ -247,6 +259,7 @@
"abusefilter-edit-builder-group-vars": "Variabler",
"abusefilter-edit-builder-vars-accountname": "Kontonavn (on account creation)",
"abusefilter-edit-builder-vars-timestamp": "Unix-tidsstempel ved ændring",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Tidsstempel for loggen",
"abusefilter-edit-builder-vars-action": "Handling",
"abusefilter-edit-builder-vars-addedlines": "Linjer tilføjet i redigering",
"abusefilter-edit-builder-vars-delta": "Størrelse ændret i redigering",
@@ -255,19 +268,18 @@
"abusefilter-edit-builder-vars-oldsize": "Gammel sidestørrelse",
"abusefilter-edit-builder-vars-removedlines": "Linjer fjernet i redigering",
"abusefilter-edit-builder-vars-summary": "Redigeringssammenfatning",
- "abusefilter-edit-builder-vars-article-id": "Side-ID",
- "abusefilter-edit-builder-vars-article-ns": "Sidens navnerum",
- "abusefilter-edit-builder-vars-article-text": "Sidetitel (uden navnerum)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Fuld sidetitel",
- "abusefilter-edit-builder-vars-article-views": "Sidevisninger",
+ "abusefilter-edit-builder-vars-page-id": "Side-ID",
+ "abusefilter-edit-builder-vars-page-ns": "Sidens navnerum",
+ "abusefilter-edit-builder-vars-page-title": "Sidetitel (uden navnerum)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Fuld sidetitel",
"abusefilter-edit-builder-vars-movedfrom-id": "Side-ID på kildeside ved flytning",
"abusefilter-edit-builder-vars-movedfrom-ns": "Navnerum på kildeside ved flytning",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titel på kildeside ved flytning",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Fuld titel på kildeside ved flytning",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titel på kildeside ved flytning",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Fuld titel på kildeside ved flytning",
"abusefilter-edit-builder-vars-movedto-id": "Side-ID på destinationsside ved flytning",
"abusefilter-edit-builder-vars-movedto-ns": "Navnerum på destinationsside ved flytning",
- "abusefilter-edit-builder-vars-movedto-text": "Titel på destinationsside ved flytning",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Fuld titel på destinationsside ved flytning",
+ "abusefilter-edit-builder-vars-movedto-title": "Titel på destinationsside ved flytning",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Fuld titel på destinationsside ved flytning",
"abusefilter-edit-builder-vars-user-editcount": "Brugerens redigeringsantal",
"abusefilter-edit-builder-vars-user-age": "Brugerkontoens alder",
"abusefilter-edit-builder-vars-user-name": "Brugerkontoens navn",
@@ -327,7 +339,7 @@
"abusefilter-exception-regexfailure": "Fejl i det regulære udtryk \"$3\" ved tegn $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Ulovlig overskrivning af den indbyggede variabel \"$2\" ved tegnet $1.",
"abusefilter-exception-outofbounds": "Anmoder om ikke-eksisterende listeelement $2 (listens størrelse = $3) ved tegnet $1.",
- "abusefilter-exception-notlist": "Efterspørger tabelelement fra en ikke-tabel ved tegn $1.",
+ "abusefilter-exception-notarray": "Efterspørger tabelelement fra en ikke-tabel ved tegn $1.",
"abusefilter-action-tag": "Mærke",
"abusefilter-action-throttle": "Begrænsning af ændringshastighed",
"abusefilter-action-warn": "Advar",
@@ -343,7 +355,7 @@
"abusefilter-revert-periodstart": "Periodestart:",
"abusefilter-revert-periodend": "Periodeslut:",
"abusefilter-revert-search": "Vælg handlinger",
- "abusefilter-revert-filter": "Filter:",
+ "abusefilter-revert-filter": "Filter ID:",
"abusefilter-revert-preview-intro": "Nedenfor er de handlinger, som misbrugsfilteret har udført, der vil blive tilbagerullet af denne handling.\nKontrollér dem omhyggeligt, og klik på \"{{int:abusefilter-revert-confirm}}\" for at bekræfte dit valg.",
"abusefilter-revert-confirm": "Bekræft",
"abusefilter-revert-success": "Du har tilbagerullet alle handlinger udført af misbrugsfilteret på grund af [[Special:AbuseFilter/$1|filter $2]].",
@@ -356,11 +368,17 @@
"abusefilter-test-submit": "Test",
"abusefilter-test-load": "Indlæs",
"abusefilter-test-user": "Ændringer af bruger:",
+ "abusefilter-test-nobots": "Skjul redigeringer fra bots",
"abusefilter-test-period-start": "Ændringer udført efter:",
"abusefilter-test-period-end": "Ændringer udført før:",
"abusefilter-test-page": "Ændringer udført på side:",
"abusefilter-test-shownegative": "Vis ændringer som ikke matcher filteret",
"abusefilter-test-syntaxerr": "Det filter, du angav indeholdt en fejl i syntaksen.\nDu kan modtage en fuld forklaring ved at klikke på knappen \"{{int:abusefilter-edit-check}}\".",
+ "abusefilter-test-search-type-all": "Alle handlinger",
+ "abusefilter-test-search-type-edit": "Redigeringer",
+ "abusefilter-test-search-type-move": "Flytninger",
+ "abusefilter-test-search-type-delete": "Sletninger",
+ "abusefilter-test-search-type-createaccount": "Kontooprettelser",
"abusefilter-changeslist-examine": "undersøg",
"abusefilter-examine": "Undersøg enkelte ændringer",
"abusefilter-examine-intro": "Denne side lader dig undersøge variablerne genereret af misbrugsfilteret for en enkelt ændring, og teste den mod filtre.",
@@ -387,7 +405,6 @@
"abusefilter-topnav-import": "Importer filter",
"abusefilter-log-name": "Log for misbrugsfilter",
"abusefilter-log-header": "Denne log viser en oversigt over ændringer i filtre.\nFor fuldstændige oplysninger, se [[Special:AbuseFilter/history|listen]] over de seneste ændringer for filtre.",
- "abusefilter-log-entry-modify": "ændrede $1 ($2)",
"abusefilter-log-noresults": "Ingen resultater",
"abusefilter-diff-title": "Forskelle mellem versioner",
"abusefilter-diff-item": "Element",
@@ -400,5 +417,12 @@
"abusefilter-diff-next": "Nyere ændring",
"abusefilter-import-intro": "Du kan bruge denne grænseflade til at importere filtre fra andre wiki-websteder direkte.\nKlik på kilde wiki, \"{{int:abusefilter-edit-export}}\" under \"{{int:abusefilter-edit-tools}}\" i redigeringsgrænsefladen.\nKopiere fra tekstfeltet der vises, og indsætte det i denne tekstboks, og klik derefter på \"{{int:abusefilter-import-submit}}\".",
"abusefilter-import-submit": "Importer data",
- "abusefilter-group-default": "Standard"
+ "abusefilter-group-default": "Standard",
+ "abusefilter-view-private-submit": "Se private oplysninger",
+ "abusefilter-view-private": "Se private oplysninger",
+ "abusefilter-view-private-reason": "Grund for adgang til private oplysninger:",
+ "abusefilter-log-details-id": "Log ID",
+ "log-description-abusefilterprivatedetails": "Denne log viser en liste over gange, hvor en bruger havde adgang til de private oplysninger i en misbrugslog.",
+ "abusefilter-noreason": "Advarsel: For at se de private oplysninger i denne log, skal du angive en grund.",
+ "abusefilter-log-ip-not-available": "Ikke tilgængelig."
}
diff --git a/AbuseFilter/i18n/de.json b/AbuseFilter/i18n/de.json
index 9078949c..ff1b9fcf 100644
--- a/AbuseFilter/i18n/de.json
+++ b/AbuseFilter/i18n/de.json
@@ -25,14 +25,16 @@
"Predatorix",
"Inkowik",
"Matma Rex",
- "MGChecker"
+ "MGChecker",
+ "Daimona Eaytoy",
+ "ToBeFree"
]
},
"abusefilter-desc": "Wendet Heuristiken automatisch auf Bearbeitungen an",
"abusefilter": "Missbrauchsfilter-Einstellungen",
"abuselog": "Missbrauchsfilter-Logbuch",
"abusefilter-intro": "Willkommen auf der Missbrauchsfilter-Management-Oberfläche.\nDer Missbrauchsfilter ist ein automatischer Mechanismus, welcher automatische Heuristiken auf alle Änderungen anwendet.\nDiese Oberfläche zeigt eine Liste aller definierten Filter und erlaubt es, diese zu verändern.",
- "abusefilter-mustbeeditor": "Aus Sicherheitsgründen dürfen nur Benutzer mit dem Recht zur Änderung von Missbrauchsfiltern diese Schnittstelle verwenden.",
+ "abusefilter-mustviewprivateoredit": "Aus Sicherheitsgründen können nur Benutzer mit dem Recht auf Einsicht in private Missbrauchsfilter oder Veränderung der Filter diese Oberfläche verwenden.",
"abusefilter-warning": "'''Achtung:''' Diese Aktion wurde als potentiell unkonstruktiv erkannt.\nSolche Aktionen werden meist sehr schnell entfernt. In wiederholten und besonders schlimmen Fällen wird dein Benutzerkonto bzw. deine IP-Adresse gesperrt.\nWenn du meinst, dass diese Aktion sinnvoll ist, kannst du sie, um sie zu bestätigen, erneut speichern.\nKurzbeschreibung der verletzten Regel: $1",
"abusefilter-disallowed": "Diese Aktion wurde automatisch als schädlich erkannt und deshalb nicht ausgeführt.\nWenn du denkst, dass deine Aktion konstruktiv war, wende dich bitte an einen Administrator und schildere ihm, was du versucht hast beizutragen.\nKurzbeschreibung der verletzten Regel: $1",
"abusefilter-blocked-display": "Diese Aktion wurde automatisch als schädlich erkannt und nicht ausgeführt.\nFerner wurden dein Benutzerkonto und alle zugehörigen IP-Adressen gesperrt.\nWenn du denkst, dass es sich hierbei um einen Fehler handelt, wende dich bitte an einen Administrator.\nKurzbeschreibung der verletzten Regel: $1",
@@ -47,6 +49,7 @@
"right-abusefilter-log": "Missbrauchsfilter-Logbuch einsehen",
"right-abusefilter-log-detail": "Erweitertes Missbrauchsfilter-Logbuch einsehen",
"right-abusefilter-private": "Private Daten im Missbrauchsfilter-Logbuch einsehen",
+ "right-abusefilter-private-log": "Das Missbrauchsfilter-Private-Einzelheiten-Zugriffs-Logbuch ansehen",
"right-abusefilter-modify-restricted": "Missbrauchsfilter mit privilegierten Aktionen bearbeiten",
"right-abusefilter-revert": "Alle Bearbeitungen durch einen bestimmten Missbrauchsfilter rückgängig machen",
"right-abusefilter-view-private": "Als privat markierten Missbrauchsfilter einsehen",
@@ -59,6 +62,7 @@
"action-abusefilter-log": "das Missbrauchsfilter-Logbuch einzusehen",
"action-abusefilter-log-detail": "das erweiterte Missbrauchsfilter-Logbuch einzusehen",
"action-abusefilter-private": "private Daten im Missbrauchsfilter-Logbuch einzusehen",
+ "action-abusefilter-private-log": "das Missbrauchsfilter-Private-Einzelheiten-Zugriffs-Logbuch anzusehen",
"action-abusefilter-modify-restricted": "Missbrauchsfilter mit privilegierten Aktionen zu bearbeiten",
"action-abusefilter-revert": "alle Änderungen durch einen bestimmten Missbrauchsfilter rückgängig zu machen",
"action-abusefilter-view-private": "Missbrauchsfilter einzusehen, die als privat markiert wurden",
@@ -70,10 +74,19 @@
"abusefilter-log-search-filter": "Filterkennungen (durch senkrechte Striche getrennt):",
"abusefilter-log-search-title": "Titel:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Auswirkung:",
+ "abusefilter-log-search-impact-all": "Alle Aktionen",
+ "abusefilter-log-search-impact-saved": "Nur gespeicherte Änderungen",
+ "abusefilter-log-search-impact-not-saved": "Ohne gespeicherte Änderungen",
"abusefilter-log-search-entries-label": "Sichtbarkeit:",
"abusefilter-log-search-entries-all": "Alle Einträge",
"abusefilter-log-search-entries-hidden": "Nur versteckte Einträge",
"abusefilter-log-search-entries-visible": "Nur sichtbare Einträge",
+ "abusefilter-log-search-action-label": "Ausgelöste Aktion:",
+ "abusefilter-log-search-action-other": "Andere",
+ "abusefilter-log-search-action-any": "Alle",
+ "abusefilter-log-search-action-taken-label": "Aufgezeichnete Aktion:",
+ "abusefilter-log-search-action-taken-any": "Jede",
"abusefilter-log-search-submit": "Suchen",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|löste}} durch die Aktion „$3“ auf „$4“ einen Missbrauchsfilter aus.\nFilteraktion: „$5“;\nFilterbeschreibung: „$6“",
"abusefilter-log-entry-withdiff": "$1: $2 hat mit der Aktion „$3“ auf der Seite $4 einen Missbrauchsfilter {{GENDER:$8|ausgelöst}}.\nUnternommene Aktionen: $5;\nFilterbeschreibung: $6 ($7)",
@@ -87,29 +100,42 @@
"abusefilter-log-details-var": "Variable",
"abusefilter-log-details-val": "Wert",
"abusefilter-log-details-vars": "Aktionsparameter",
- "abusefilter-log-details-private": "Private Daten",
+ "abusefilter-log-details-private": "Private Eintragseinzelheiten",
"abusefilter-log-details-ip": "IP-Adresse des Verursachers",
+ "abusefilter-log-details-checkuser": "Benutzer prüfen",
"abusefilter-log-noactions": "keine",
"abusefilter-log-details-diff": "Änderungen durch diese Bearbeitung",
"abusefilter-log-linkoncontribs": "Missbrauchsfilter-Logbuch",
"abusefilter-log-linkoncontribs-text": "Missbrauchsfilter-Logbuch für {{GENDER:$1|diesen Benutzer|diese Benutzerin}}",
+ "abusefilter-log-linkonhistory": "Missbrauchsfilter-Logbuch ansehen",
+ "abusefilter-log-linkonhistory-text": "Missbrauchsfilter-Logbuch für diese Seite ansehen",
"abusefilter-log-hidden": "(Eintrag versteckt)",
"abusefilter-log-hidden-implicit": "(versteckt, da die Version gelöscht wurde)",
"abusefilter-log-cannot-see-details": "Du hast nicht die Berechtigung, Einzelheiten zur dieser Eingabe einzusehen.",
+ "abusefilter-log-cannot-see-private-details": "Du hast keine Berechtigung, um private Einzelheiten für diesen Eintrag einzusehen.",
"abusefilter-log-nonexistent": "Ein Eintrag mit der angegebenen Kennung ist nicht vorhanden.",
"abusefilter-log-details-hidden": "Du kannst die Details dieses Eintrags nicht einsehen, da sie vor der Öffentlichkeit verborgen sind.",
+ "abusefilter-log-details-hidden-implicit": "Du kannst die Einzelheiten für diesen Eintrag nicht einsehen, da die dazugehörige Version für die öffentliche Einsicht versteckt ist.",
"abusefilter-log-private-not-included": "Eine oder mehrere angegebene Filterkennungen sind privat. Da du nicht berechtigt bist, die Einzelheiten von privaten Filtern anzusehen, wurde nicht nach solchen Filtern gesucht.",
"abusefilter-log-hide-legend": "Logbucheintrag verstecken",
"abusefilter-log-hide-id": "Logbuch-Eintrags-ID:",
"abusefilter-log-hide-hidden": "Diesen Eintrag vor der Öffentlichkeit verbergen",
"abusefilter-log-hide-reason": "Grund:",
+ "abusefilter-log-hide-reason-other": "Anderer/Zusätzlicher Grund:",
"abusefilter-log-hide-forbidden": "Du hast nicht die Berechtigung, die Einträge des Missbrauchsfilter-Logbuchs auszublenden.",
- "abusefilter-logentry-suppress": "hat „[[$1]]“ verborgen",
- "abusefilter-logentry-unsuppress": "hat „[[$1]]“ sichtbar gemacht",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|versteckte}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|blendete}} $3 wieder ein",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|löste}} beim Ausführen der Aktion „$5“ auf $3 den Filter $4 aus. Auswirkung: $6 ($7)",
+ "log-action-filter-abusefilter": "Typ der Filteränderung:",
+ "log-action-filter-abusefilter-create": "Erstellung eines neuen Filters",
+ "log-action-filter-abusefilter-modify": "Filteränderung",
+ "log-action-filter-suppress-abuselog": "Unterdrückung des Missbrauchfilter-Logbuchs",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|hat}} auf private Einzelheiten für $3 zugegriffen",
+ "abusefilterprivatedetails-log-name": "Missbrauchsfilter-Private-Einzelheiten-Zugriffs-Logbuch",
"abusefilter-management": "Missbrauchsfilter-Verwaltung",
"abusefilter-list": "Alle Filter",
"abusefilter-list-id": "Filterkennung",
+ "abusefilter-list-pattern": "Muster",
"abusefilter-list-status": "Status",
"abusefilter-list-public": "Öffentliche Beschreibung",
"abusefilter-list-consequences": "Folgen",
@@ -125,6 +151,7 @@
"abusefilter-enabled": "Aktiviert",
"abusefilter-deleted": "Gelöscht",
"abusefilter-disabled": "Deaktiviert",
+ "abusefilter-throttled": "gedrosselt",
"abusefilter-hitcount": "{{PLURAL:$1|Ein Treffer|$1 Treffer}}",
"abusefilter-new": "Neuen Filter erstellen",
"abusefilter-return": "Zurück zur Missbrauchsfilter-Verwaltung",
@@ -138,8 +165,16 @@
"abusefilter-list-options-scope-local": "Nur lokale Regeln",
"abusefilter-list-options-scope-global": "Nur globale Regeln",
"abusefilter-list-options-scope-all": "Lokale und globale Regeln",
- "abusefilter-list-options-disabled": "Deaktivierte Filter:",
+ "abusefilter-list-options-further-options": "Weitere Optionen:",
"abusefilter-list-options-hidedisabled": "Deaktivierte Filter ausblenden",
+ "abusefilter-list-options-hideprivate": "Private Filter ausblenden",
+ "abusefilter-list-options-searchfield": "Innerhalb Regeln suchen:",
+ "abusefilter-list-options-searchpattern": "Ein Muster einfügen",
+ "abusefilter-list-options-searchoptions": "Suchmodus:",
+ "abusefilter-list-options-search-like": "Einfache Anfrage",
+ "abusefilter-list-options-search-rlike": "Regulärer Ausdruck",
+ "abusefilter-list-options-search-irlike": "Schreibungsunabhängiger regulärer Ausdruck",
+ "abusefilter-list-regexerror": "Bei der Suche ist ein Fehler aufgetreten: Syntaxfehler im regulären Ausdruck.",
"abusefilter-list-options-submit": "Aktualisieren",
"abusefilter-tools-text": "Auf dieser Seite finden sich einige Werkzeuge, die beim Erstellen von Missbrauchsfiltern und bei der Fehlersuche hilfreich sein können.",
"abusefilter-tools-expr": "Expression-Tester",
@@ -154,6 +189,7 @@
"abusefilter-edit": "Missbrauchsfilter bearbeiten",
"abusefilter-edit-subtitle": "Bearbeite Filter $1",
"abusefilter-edit-subtitle-new": "Filter erstellen",
+ "abusefilter-edit-token-not-match": "Die Bearbeitung wurde nicht gespeichert! Bitte erneut versuchen.",
"abusefilter-edit-oldwarning": "<strong>Du bearbeitest nicht die aktuelle, sondern eine ältere Version dieses Filters. Die Statistik gilt nur für die letzte Version des Filters. Wenn du speicherst, wird diese als aktuelle Version neu gespeichert. </strong> &bull; [[Special:AbuseFilter/history/$2|Zurück zur Versionsgeschichte des Filters]]",
"abusefilter-edit-status-label": "Statistik:",
"abusefilter-edit-status": "Von {{PLURAL:$1|der letzten Aktion|den letzten $1 Aktionen}} {{PLURAL:$2|wurde eine|wurden $2}} ($3 %) von diesem Filter erkannt.",
@@ -162,7 +198,9 @@
"abusefilter-edit-new": "Neuer Filter",
"abusefilter-edit-save": "Filter speichern",
"abusefilter-edit-id": "Filterkennung:",
+ "abusefilter-edit-switch-editor": "Editor wechseln",
"abusefilter-edit-description": "Beschreibung:\n:''(öffentlich sichtbar)''",
+ "abusefilter-edit-field-description": "Beschreibung",
"abusefilter-edit-group": "Filtergruppe:",
"abusefilter-edit-flags": "Flags:",
"abusefilter-edit-enabled": "Filter aktivieren",
@@ -170,6 +208,7 @@
"abusefilter-edit-hidden": "Details des Filters nicht öffentlich anzeigen",
"abusefilter-edit-global": "Globaler Filter",
"abusefilter-edit-rules": "Bedingungen:",
+ "abusefilter-edit-field-conditions": "Bedingungen",
"abusefilter-edit-notes": "Notizen:",
"abusefilter-edit-lastmod": "Letzte Bearbeitung des Filters:",
"abusefilter-edit-lastmod-text": "$3, $4 Uhr von $2",
@@ -180,25 +219,48 @@
"abusefilter-edit-action-blockautopromote": "Den Status „Automatisch bestätigter Benutzer“ entziehen.",
"abusefilter-edit-action-degroup": "Benutzer aus allen Gruppen mit Sonderrechten entfernen",
"abusefilter-edit-action-block": "IP-Adresse/Benutzer sperren",
+ "abusefilter-edit-action-blocktalk": "Den Benutzer und/oder die IP-Adresse für das Bearbeiten ihrer eigenen Diskussionsseite sperren",
"abusefilter-edit-action-throttle": "Die Aktion nur auslösen, sofern der Benutzer ein bestimmtes Limit überschreitet.",
- "abusefilter-edit-action-rangeblock": "/16-Range sperren, aus der der Benutzer stammt",
+ "abusefilter-edit-action-rangeblock": "Den jeweiligen IP-Adressbereich sperren, aus dem der Benutzer stammt.",
"abusefilter-edit-action-tag": "Die Bearbeitung für eine spätere Überprüfung markieren.",
"abusefilter-edit-throttle-count": "Anzahl erlaubter Aktionen:",
- "abusefilter-edit-throttle-period": "Zeitraum:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|Sekunde|Sekunden}}",
- "abusefilter-edit-throttle-groups": "Regeln für die Gruppendrossel:\n:''(eine pro Zeile, verbinden mit Kommata)''",
+ "abusefilter-edit-throttle-period": "Zeitraum (in Sekunden):",
+ "abusefilter-edit-throttle-groups": "Drosselung gruppieren nach:",
+ "abusefilter-edit-throttle-ip": "IP-Adresse",
+ "abusefilter-edit-throttle-user": "Benutzerkonto",
+ "abusefilter-edit-throttle-range": "/16-Bereich",
+ "abusefilter-edit-throttle-creationdate": "Serverzeit der Benutzerkontenerstellung",
+ "abusefilter-edit-throttle-editcount": "Bearbeitungszähler",
+ "abusefilter-edit-throttle-site": "Die gesamte Website",
+ "abusefilter-edit-throttle-page": "Seite",
+ "abusefilter-throttle-details": "{{PLURAL:$1|Eine Aktion|$1 Aktionen}} {{PLURAL:$2|jede Sekunde|alle $2 Sekunden}} erlauben, Drosselungen gruppieren nach: $3",
"abusefilter-edit-warn-message": "Systemnachricht für die Warnung:",
"abusefilter-edit-warn-other": "Andere Systemnachricht",
- "abusefilter-edit-warn-other-label": "Seitenname einer anderen Systemnachricht:\n:''(ohne MediaWiki-Präfix)''",
+ "abusefilter-edit-warn-other-label": "Seitenname der anderen Systemnachricht:\n:''(ohne Präfix „MediaWiki:“)''",
"abusefilter-edit-warn-actions": "Aktionen:",
- "abusefilter-edit-warn-preview": "Vorschau der gewählten Systemnachricht",
+ "abusefilter-edit-warn-preview": "Vorschau der gewählten Systemnachricht anzeigen/ausblenden",
"abusefilter-edit-warn-edit": "Gewählte Systemnachricht erstellen/bearbeiten",
- "abusefilter-edit-tag-tag": "Gültige [[Special:Tags|Benennungen]] (eine pro Zeile):",
+ "abusefilter-edit-disallow-message": "Für das Verbieten zu verwendende Systemnachricht:",
+ "abusefilter-edit-disallow-other": "Andere Systemnachricht",
+ "abusefilter-edit-disallow-other-label": "Seitenname der anderen Systemnachricht:\n:''(ohne Präfix „MediaWiki:“)''",
+ "abusefilter-edit-disallow-actions": "Aktionen:",
+ "abusefilter-edit-disallow-preview": "Vorschau der ausgewählten Systemnachricht anzeigen/ausblenden",
+ "abusefilter-edit-disallow-edit": "Ausgewählte Systemnachricht erstellen/bearbeiten",
+ "abusefilter-edit-tag-tag": "Anzuwendende [[Special:Tags|Markierungen]]:",
+ "abusefilter-edit-tag-placeholder": "Markierungen hinzufügen (einzeln oder durch Kommata getrennt)",
+ "abusefilter-edit-tag-hidden-placeholder": "Markierungen hinzufügen (durch Kommata getrennt)",
+ "abusefilter-edit-block-anon-durations": "Sperrdauer für anonyme Benutzer:",
+ "abusefilter-edit-block-user-durations": "Sperrdauer für angemeldete Benutzer:",
+ "abusefilter-block-anon": "Anonyme Benutzer sperren",
+ "abusefilter-block-user": "Angemeldete Benutzer sperren",
+ "abusefilter-block-talk": "Diskussionsseite gesperrt",
"abusefilter-edit-denied": "Du kannst die Einzelheiten zu diesem Filter nicht einsehen, weil sie versteckt sind.",
"abusefilter-edit-main": "Filterparameter",
"abusefilter-edit-done-subtitle": "Filter bearbeitet",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Deine Änderungen]] am [[Special:AbuseFilter/$1|Filter „$3“]] wurden erfolgreich gespeichert.",
"abusefilter-edit-badsyntax": "Der von dir spezifizierte Filter enthält einen Syntaxfehler. Die Parserausgabe lautete: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Die folgenden Felder sind erforderlich und müssen ausgefüllt werden: $1",
+ "abusefilter-edit-deleting-enabled": "Du kannst keinen aktiven Filter als gelöscht markieren.",
"abusefilter-edit-restricted": "Du kannst diesen Filter nicht bearbeiten, weil er eine oder mehrere beschränkte Aktionen enthält.\nBitte einen Benutzer, der beschränkte Aktionen hinzufügen kann, darum, die Änderung für dich vorzunehmen.",
"abusefilter-edit-viewhistory": "Versionsgeschichte des Filters ansehen",
"abusefilter-edit-history": "Versionsgeschichte:",
@@ -210,7 +272,7 @@
"abusefilter-edit-export": "Diesen Filter in ein anderes Wiki exportieren",
"abusefilter-edit-syntaxok": "Keine Syntaxfehler gefunden.",
"abusefilter-edit-syntaxerr": "Syntaxfehler gefunden: $1",
- "abusefilter-edit-bad-tags": "Eine oder mehrere der angegebenen Markierungen sind nicht gültig.\nMarkierungen sollten kurz sein, keine Sonderzeichen beinhalten und nicht durch eine andere Software reserviert sein. Versuche, einen neuen Markierungsnamen auszuwählen.",
+ "abusefilter-edit-bad-tags": "Eine oder mehrere der angegebenen Markierungen sind nicht gültig.\nMarkierungen sollten kurz sein, sie dürfen keine Sonderzeichen enthalten und nicht durch eine andere Software reserviert sein. Versuche, einen neuen Markierungsnamen auszuwählen.",
"abusefilter-edit-notallowed": "Es ist dir nicht erlaubt, Missbrauchsfilter zu erstellen oder zu bearbeiten",
"abusefilter-edit-notallowed-global": "Du bist nicht berechtigt, globale Missbrauchsfilter zu erstellen oder zu verändern.",
"abusefilter-edit-notallowed-global-custom-msg": "Benutzerdefinierte Warnnachrichten werden für globale Filter nicht unterstützt.",
@@ -223,8 +285,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Modulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Potenz (**)",
"abusefilter-edit-builder-group-op-comparison": "Vergleichsoperatoren",
- "abusefilter-edit-builder-op-comparison-equal": "Ist gleich (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Ist nicht gleich (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Wert ist gleich (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Wert und Typ sind gleich (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Wert ist nicht gleich (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Wert und Typ sind nicht gleich (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Kleiner als (<)",
"abusefilter-edit-builder-op-comparison-gt": "Größer als (>)",
"abusefilter-edit-builder-op-comparison-lte": "Kleiner oder gleich (<=)",
@@ -247,23 +311,30 @@
"abusefilter-edit-builder-funcs-lcase": "In Kleinbuchstaben konvertieren (lcase)",
"abusefilter-edit-builder-funcs-ucase": "In Großbuchstaben konvertieren (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Verwirrende Zeichen normalisieren (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normalisiert und sucht in der Zeichenfolge nach mehreren Unterzeichenfolgen im OR-Modus (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Normalisiert und sucht in der Zeichenfolge nach mehreren Unterzeichenfolgen im AND-Modus (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Doppelte Zeichen entfernen (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Sonderzeichen / Gesamtzahl der Zeichen (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normalisieren (norm)",
"abusefilter-edit-builder-funcs-count": "Anzahl der Vorkommnisse der Zeichenfolge X in der Zeichenfolge Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Anzahl des regulären Ausdrucks X in Zeichenkette Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Anordnung von Regex-Treffern innerhalb eines Textes für jede Erfassungsgruppe (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Leerzeichen entfernen (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Sonderzeichen entfernen (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Befindet sich die IP-Adresse im angegebenen Adressbereich? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Suche in Zeichenkette nach mehreren Unterketten (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Sucht in der Zeichenfolge nach mehreren Unterzeichenfolgen im OR-Modus (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Sucht in der Zeichenfolge nach mehreren Unterzeichenfolgen im AND-Modus (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Überprüfen, ob ein angegebenes Argument gleich (===) mit einem der folgenden Argumente ist (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Teil-Zeichenkette (substr)",
"abusefilter-edit-builder-funcs-strpos": "Position der Teil-Zeichenkette in der Zeichenkette (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Ersetze Teil-Zeichenkette mit Zeichenkette (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Escape-Zeichenfolge als Buchstabensymbol in einem regulären Ausdruck (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Variable setzen (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "HTML-Entitäten in Unicode-Zeichen normalisieren (sanitize)",
"abusefilter-edit-builder-group-vars": "Variablen",
"abusefilter-edit-builder-vars-accountname": "Benutzername (bei Erstellung eines Benutzerkontos)",
"abusefilter-edit-builder-vars-timestamp": "Zeitstempel der Änderung im Unix-Format",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Zeitstempel des Logbuchs",
"abusefilter-edit-builder-vars-action": "Aktion",
"abusefilter-edit-builder-vars-addedlines": "Durch die Bearbeitung hinzugefügte Zeilen",
"abusefilter-edit-builder-vars-delta": "Größenänderung der Bearbeitung",
@@ -274,19 +345,21 @@
"abusefilter-edit-builder-vars-new-content-model": "Neues Inhaltsmodell",
"abusefilter-edit-builder-vars-removedlines": "Durch die Bearbeitung entfernte Zeilen",
"abusefilter-edit-builder-vars-summary": "Zusammenfassung",
- "abusefilter-edit-builder-vars-article-id": "Seitenkennnummer",
- "abusefilter-edit-builder-vars-article-ns": "Namensraum der Seite",
- "abusefilter-edit-builder-vars-article-text": "Titel der Seite (ohne Namensraum)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Voller Seitenname",
- "abusefilter-edit-builder-vars-article-views": "Seitenaufrufe",
+ "abusefilter-edit-builder-vars-page-id": "Seitenkennnummer",
+ "abusefilter-edit-builder-vars-page-ns": "Namensraum der Seite",
+ "abusefilter-edit-builder-vars-page-title": "Titel der Seite (ohne Namensraum)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Vollständiger Seitentitel",
+ "abusefilter-edit-builder-vars-page-age": "Seitenalter (in Sekunden)",
"abusefilter-edit-builder-vars-movedfrom-id": "Seiten-ID der Quellseite",
"abusefilter-edit-builder-vars-movedfrom-ns": "Namensraum der Quellseite",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titel der Quellseite",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Vollständiger Titel der Quellseite",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titel der Quellseite",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Vollständiger Titel der Quellseite",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Verschiebe-Quellseiten-Alter (in Sekunden)",
"abusefilter-edit-builder-vars-movedto-id": "Seiten-ID der Zielseite",
"abusefilter-edit-builder-vars-movedto-ns": "Namensraum der Zielseite",
- "abusefilter-edit-builder-vars-movedto-text": "Titel der Zielseite",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Vollständiger Titel der Zielseite",
+ "abusefilter-edit-builder-vars-movedto-title": "Titel der Zielseite",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Vollständiger Titel der Zielseite",
+ "abusefilter-edit-builder-vars-movedto-age": "Verschiebe-Zielseiten-Alter (in Sekunden)",
"abusefilter-edit-builder-vars-user-editcount": "Beitragszahl des Benutzers",
"abusefilter-edit-builder-vars-user-age": "Alter des Benutzerkontos",
"abusefilter-edit-builder-vars-user-name": "Name des Benutzerkontos",
@@ -296,10 +369,14 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "Zeitpunkt, an dem die E-Mail-Adresse bestätigt wurde",
"abusefilter-edit-builder-vars-recent-contributors": "Die letzten zehn Bearbeiter der Seite",
"abusefilter-edit-builder-vars-first-contributor": "Erster Autor der Seite",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Letzte zehn Benutzer, die zur Verschiebung der Quellseite beitragen.",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Erster Benutzer, der zur Verschiebung der Quellseite beiträgt.",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Letzte zehn Benutzer, die zur Verschiebung der Zielseite beitragen.",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Erster Benutzer, der zur Verschiebung der Zielseite beiträgt.",
"abusefilter-edit-builder-vars-all-links": "Alle externen Links im neuen Text",
"abusefilter-edit-builder-vars-added-links": "Alle durch die Bearbeitung hinzugefügten externen Links",
"abusefilter-edit-builder-vars-removed-links": "Alle durch die Bearbeitung entfernten externen Links",
- "abusefilter-edit-builder-vars-old-text": "Alter Wikitext der Seite, vor der Bearbeitung",
+ "abusefilter-edit-builder-vars-old-text": "Alter Wikitext der Seite, vor der Bearbeitung (nicht mehr in Verwendung)",
"abusefilter-edit-builder-vars-new-text": "Neuer Wikitext der Seite, nach der Bearbeitung",
"abusefilter-edit-builder-vars-new-pst": "Neuer Seitenwikitext, vor dem Speichern umgewandelt",
"abusefilter-edit-builder-vars-diff-pst": "Vereinigter Änderungsunterschied nach Bearbeitung, vor dem Speichern umgewandelt",
@@ -310,9 +387,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "Verschieben-Schutzstufe der Seite",
"abusefilter-edit-builder-vars-restrictions-create": "Erstellschutz der Seite",
"abusefilter-edit-builder-vars-restrictions-upload": "Hochladeschutz der Datei",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Bearbeitungs-Schutzstatus der Verschiebe-Quellseite",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Verschiebe-Schutzstatus der Verschiebe-Quellseite",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Erstellschutz der Verschiebe-Quellseite",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Hochladeschutz der Verschiebe-Quelldatei",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Bearbeitungs-Schutzstatus der Verschiebe-Zielseite",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Verschiebe-Schutzstatus der Verschiebe-Zielseite",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Erstellschutz der Verschiebe-Zielseite",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Hochladeschutz der Verschiebe-Zieldatei",
"abusefilter-edit-builder-vars-old-text-stripped": "Alter Seitentext, von jeglicher Textauszeichnung befreit",
"abusefilter-edit-builder-vars-old-links": "Links der Seite, vor der Bearbeitung",
- "abusefilter-edit-builder-vars-old-html": "HTML-Quelltext der alten Version",
+ "abusefilter-edit-builder-vars-old-html": "HTML-Quelltext der alten Version (nicht mehr in Verwendung)",
"abusefilter-edit-builder-vars-minor-edit": "Bearbeitung wurde als Kleinigkeit markiert",
"abusefilter-edit-builder-vars-file-sha1": "SHA1-Hash von Dateiinhalt",
"abusefilter-edit-builder-vars-file-size": "Dateigröße in Bytes",
@@ -339,6 +424,7 @@
"abusefilter-history-filterid": "Filter",
"abusefilter-history-select-legend": "Suche einschränken",
"abusefilter-history-select-user": "Benutzer:",
+ "abusefilter-history-select-filter": "Filterkennung:",
"abusefilter-history-select-submit": "Anwenden",
"abusefilter-history-diff": "Änderungen",
"abusefilter-history-error-hidden": "Der angeforderte Filter ist versteckt. Seine Versionsgeschichte kann daher nicht eingesehen werden.",
@@ -349,14 +435,17 @@
"abusefilter-exception-unclosedstring": "Nicht abgeschlossene Zeichenkette, beginnt bei Zeichen $1.",
"abusefilter-exception-invalidoperator": "Ungültiger Operator „$2“ bei Zeichen $1.",
"abusefilter-exception-unrecognisedtoken": "Unbekanntes Token „$2“ bei Zeichen $1.",
- "abusefilter-exception-noparams": "Keine Parameter an Funktion „$2“ bei Zeichen $1 übergeben.",
+ "abusefilter-exception-noparams": "Keine Parameter an die Funktion „$2“ bei Zeichen $1 übergeben.\nEs {{PLURAL:$3|wird ein Argument|werden $3 Argumente}} erwartet.",
"abusefilter-exception-dividebyzero": "Division von $2 durch Null bei Zeichen $1.",
"abusefilter-exception-unrecognisedvar": "Unerkannte Variable $2 bei Zeichen $1",
"abusefilter-exception-notenoughargs": "Der Funktion $2 wurden an Zeichen $1 zu wenige Argumente übergeben.\nEs {{PLURAL:$3|wurde $3 Argument|wurden $3 Argumente}} erwartet, übergeben {{PLURAL:$4|wurde $4|wurden $4}}.",
- "abusefilter-exception-regexfailure": "Fehler im regulären Ausdruck „$3“ an Zeichen $1: „$2“",
+ "abusefilter-exception-regexfailure": "Fehler im regulären Ausdruck „$2“ an Zeichen $1.",
"abusefilter-exception-overridebuiltin": "Verbotenes Überschreiben der eingebauten Variable „$2“ an Zeichen $1.",
- "abusefilter-exception-outofbounds": "Anforderung des nicht vorhandenen Listeneintrages $2 (Listengröße: $3) an Zeichen $1.",
- "abusefilter-exception-notlist": "Anforderung eines Arrayelements aus einem Nicht-Array bei Zeichen „$1“.",
+ "abusefilter-exception-outofbounds": "Anforderung des nicht vorhandenen Anordnungseintrages $2 (Anordnungsgröße: $3) an Zeichen $1.",
+ "abusefilter-exception-notarray": "Anforderung eines Arrayelements aus einem Nicht-Array bei Zeichen „$1“.",
+ "abusefilter-exception-unclosedcomment": "Nicht abgeschlossener Kommentar bei Zeichen $1.",
+ "abusefilter-exception-invalidiprange": "Ungültigen IP-Adressbereich „$2“ bei Zeichen $1 angegeben.",
+ "abusefilter-exception-disabledvar": "Die Variable $2 bei Zeichen $1 ist nicht mehr in Verwendung.",
"abusefilter-action-tag": "Markierung",
"abusefilter-action-throttle": "Drosseln",
"abusefilter-action-warn": "Warnen",
@@ -372,8 +461,9 @@
"abusefilter-revert-periodstart": "Beginn des Zeitraums:",
"abusefilter-revert-periodend": "Ende des Zeitraums:",
"abusefilter-revert-search": "Aktionen auswählen:",
- "abusefilter-revert-filter": "Filter:",
+ "abusefilter-revert-filter": "Filterkennung:",
"abusefilter-revert-preview-intro": "Unten sind die Aktionen des Missbrauchsfilters angegeben, die hiermit rückgängig gemacht werden.\nBitte überprüfe sie sorgfältig und klicke dann auf „{{int:abusefilter-revert-confirm}}“, um deine Auswahl zu bestätigen.",
+ "abusefilter-revert-confirm-legend": "Die Zurücksetzung bestätigen",
"abusefilter-revert-confirm": "Bestätigen",
"abusefilter-revert-success": "Du hast alle Aktionen des Missbrauchsfilters, die aufgrund von [[Special:AbuseFilter/$1|Filter $2]] vorgenommen wurden, rückgängig gemacht.",
"abusefilter-revert-reason": "Automatisches Zurücksetzen aller Aktionen des Missbrauchsfilters aufgrund von Filter $1.\nAngegebener Grund: $2",
@@ -385,12 +475,20 @@
"abusefilter-test-submit": "Testen",
"abusefilter-test-load": "Laden",
"abusefilter-test-user": "Änderungen von Benutzer:",
+ "abusefilter-test-nobots": "Bearbeitungen von Bots ausblenden",
"abusefilter-test-period-start": "Änderungen nach:",
"abusefilter-test-period-end": "Änderungen vor:",
"abusefilter-test-page": "Änderungen an der Seite:",
"abusefilter-test-shownegative": "Änderungen anzeigen, die nicht auf den Filter passen",
"abusefilter-test-syntaxerr": "Der eingegebene Filter enthält einen Syntaxfehler.\nWeitere Erläuterungen gibt es bei Klick auf die Schaltfläche „{{int:abusefilter-edit-check}}“.",
"abusefilter-test-badtitle": "Der eingegebene Seitentitel war ungültig. Er enthält möglicherweise ein oder mehrere Zeichen, die nicht in Titeln verwendet werden können.",
+ "abusefilter-test-action": "Typ der Aktion:",
+ "abusefilter-test-search-type-all": "Alle Aktionen",
+ "abusefilter-test-search-type-edit": "Bearbeitungen",
+ "abusefilter-test-search-type-move": "Verschiebungen",
+ "abusefilter-test-search-type-delete": "Löschungen",
+ "abusefilter-test-search-type-upload": "Hochgeladene Dateien",
+ "abusefilter-test-search-type-createaccount": "Benutzerkontoerstellungen",
"abusefilter-changeslist-examine": "untersuchen",
"abusefilter-examine": "Einzelne Änderungen untersuchen",
"abusefilter-examine-intro": "Auf dieser Seite können die Variablen, die der Missbrauchsfilter für eine Änderung generiert hat, untersucht werden und probeweise Filter darauf angewendet werden.",
@@ -417,6 +515,7 @@
"abusefilter-topnav-import": "Filter importieren",
"abusefilter-log-name": "Missbrauchsfilter-Logbuch",
"abusefilter-log-header": "Dieses Logbuch zeigt eine Zusammenfassung der Änderungen an Filtern.\nGenauere Einzelheiten sind in [[Special:AbuseFilter/history|der Liste]] der letzten Änderungen an Filtern zu finden.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|erstellte}} $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|veränderte}} $4 ($5)",
"abusefilter-log-noresults": "Keine Ergebnisse",
"abusefilter-diff-title": "Unterschied zwischen Versionen",
@@ -432,39 +531,16 @@
"abusefilter-import-submit": "Daten importieren",
"abusefilter-group-default": "Standard",
"abusefilter-http-error": "Ein HTTP-Fehler ist aufgetreten: $1.",
- "apihelp-abusefiltercheckmatch-param-filter": "Der vollständige Filtertext, der für einen Treffer überprüft werden soll.",
- "apihelp-abusefiltercheckmatch-param-rcid": "Zu gegenprüfende Letzte-Änderungs-Kennung.",
- "apihelp-abusefiltercheckmatch-param-logid": "Zu gegenprüfende Missbrauchsfilter-Logbuch-Kennung.",
- "apihelp-abusefilterchecksyntax-description": "Prüft die Syntax eines Missbrauchfilters.",
- "apihelp-abusefilterchecksyntax-summary": "Überprüft die Syntax eines Missbrauchfilters.",
- "apihelp-abusefilterchecksyntax-example-1": "Syntax eines gültigen Filters prüfen",
- "apihelp-abusefilterchecksyntax-example-2": "Syntax eines ungültigen Filters prüfen",
- "apihelp-abusefilterevalexpression-description": "Evaluiert einen Missbrauchsfilter-Ausdruck.",
- "apihelp-abusefilterevalexpression-summary": "Bewertet einen Ausdruck des Missbrauchfilters.",
- "apihelp-abusefilterevalexpression-param-expression": "Der zu evaluierende Ausdruck.",
- "apihelp-abusefilterevalexpression-example-1": "Evaluiert einen einfachen Ausdruck",
- "apihelp-abusefilterunblockautopromote-param-user": "Benutzername des Benutzers, den du entsperren möchtest.",
- "apihelp-query+abusefilters-description": "Einzelheiten über die Missbrauchsfilter anzeigen.",
- "apihelp-query+abusefilters-summary": "Zeigt Einzelheiten des Missbrauchfilters an.",
- "apihelp-query+abusefilters-param-startid": "Die Filterkennung, bei der die Aufzählung beginnen soll.",
- "apihelp-query+abusefilters-param-endid": "Die Filterkennung, bei der die Aufzählung enden soll.",
- "apihelp-query+abusefilters-param-show": "Nur Filter anzeigen, die diese Kriterien erfüllen.",
- "apihelp-query+abusefilters-param-limit": "Die maximale Anzahl aufzulistender Filter.",
- "apihelp-query+abusefilters-param-prop": "Zurückzugebende Eigenschaften.",
- "apihelp-query+abusefilters-example-1": "Aktivierte öffentliche Filter auflisten",
- "apihelp-query+abusefilters-example-2": "Einige Einzelheiten über Filter anzeigen",
- "apihelp-query+abuselog-description": "Ereignisse anzeigen, die von einem der Missbrauchsfilter erfasst wurden.",
- "apihelp-query+abuselog-param-start": "Der Zeitstempel, bei dem die Aufzählung begonnen werden soll.",
- "apihelp-query+abuselog-param-end": "Der Zeitstempel, bei dem die Aufzählung beendet werden soll.",
- "apihelp-query+abuselog-param-user": "Nur Einträge von einem angegebenen Benutzer oder einer IP-Adresse anzeigen.",
- "apihelp-query+abuselog-param-title": "Zeigt nur Einträge, die auf einer angegebenen Seite erscheinen.",
- "apihelp-query+abuselog-param-filter": "Zeigt nur Einträge an, die von einer angegebenen Filterkennung erfasst wurden.",
- "apihelp-query+abuselog-param-limit": "Die maximale Anzahl der aufzulistenden Einträge.",
- "apihelp-query+abuselog-param-prop": "Zurückzugebende Eigenschaften.",
- "apihelp-query+abuselog-example-1": "Zeigt die letzten Logbucheinträge",
- "apihelp-query+abuselog-example-2": "Zeigt die letzten Logbucheinträge für [[API]]",
- "apierror-abusefilter-canttest": "Du hast keine Berechtigung, Missbrauchsfilter zu testen.",
- "apierror-abusefilter-cantcheck": "Du hast keine Berechtigung, die Syntax von Missbrauchsfiltern zu überprüfen.",
- "apierror-abusefilter-nosuchlogid": "Es gibt keinen Missbrauchsfilter-Logbuch-Eintrag mit der Kennung $1.",
- "apierror-abusefilter-badsyntax": "Der Filter hat eine ungültige Syntax."
+ "abusefilter-view-private-submit": "Private Einzelheiten ansehen",
+ "abusefilter-view-private": "Private Einzelheiten ansehen",
+ "abusefilter-view-private-reason": "Grund für den Zugriff auf private Einzelheiten:",
+ "abusefilter-log-details-id": "Logbuchkennung",
+ "abusefilter-invalid-request": "Ungültige Anfrage! Du musst auf private Logbucheinzelheiten mit dem Formular auf [[Special:AbuseLog/$1]] zugreifen und einen Grund angeben.",
+ "abusefilter-invalid-request-noid": "Ungültige Anfrage! Du musst auf private Eintragseinzelheiten mit dem Formular auf der Missbrauchsfilter-Einzelheitenseite zugreifen und einen Grund angeben.",
+ "log-description-abusefilterprivatedetails": "Dieses Logbuch zeigt eine Liste darüber an, wie oft ein Benutzer auf private Einzelheiten eines Missbrauchfiltereintrags zugreift.",
+ "abusefilter-noreason": "Warnung: Um die privaten Einzelheiten dieses Eintrags einzusehen, musst du einen Grund angeben.",
+ "abusefilter-log-ip-not-available": "Nicht verfügbar",
+ "abusefilter-tag-reserved": "Das Tag <code>abusefilter-condition-limit</code> ist für die interne Verwendung durch den Missbrauchsfilter reserviert.",
+ "tag-abusefilter-condition-limit": "Bedingungsgrenze erreicht",
+ "tag-abusefilter-condition-limit-description": "Bearbeitungen oder andere Ereignisse, die nicht von allen aktiven [[Special:AbuseFilter|Missbrauchsfiltern]] überprüft werden konnten ([[mw:Extension:AbuseFilter/Conditions|Hilfe]])."
}
diff --git a/AbuseFilter/i18n/diq.json b/AbuseFilter/i18n/diq.json
index 372d842d..b66f3975 100644
--- a/AbuseFilter/i18n/diq.json
+++ b/AbuseFilter/i18n/diq.json
@@ -19,7 +19,6 @@
"abusefilter": "Vıraştışê gırwenayışê xırabi",
"abuselog": "Qeydê parzumi",
"abusefilter-intro": "Îdareyê filitreyê abuseyî şima xeyr ameyî.\nFilitreyê abuseyî yew softwareyê otomatikî ke otomatik heuristics applikasyon keno.\nEna pele yew listeyê filitreyî mucneno u vurnayîşan rê destur dano.",
- "abusefilter-mustbeeditor": "Qe pawitişî, teyna kerberanê ke pê desturî eşkeno filitreyê abuseyî bivurne.",
"abusefilter-warning": "'''Balantış''': Eno hereket otomatikmen zerarın tesbit bi yo.\nVurnayışê zerarıni be lez do peyd bıgêri yo,\nu vurnayışo xırabın ya zi zerarın neticey xo hesabê şıma de vêneno ya zi afresa IP ya şıma bloqe bena.\nŞıma ke fıkıriyenê no vurnayış hewlo, şenê be tesdiq kerdış ney qeyd kerê.\nSuistımal kerdışê qeydey sero yew arezekerdışo kılmo ke hereketê şıma eyar keno: $1",
"abusefilter-disallowed": "Eno kerdış otomatikmên zey zerarın ameyo motış u coka izıne nêameya gırewtış.\nEger şıma bawer kenê ke enê kerdış biyo hewl, şıma se kerdêne , reca bena ke yew admin ra xebere bıdê.\nYew şınasnayışo kılmo ke be ixlalê şıma ra bestiyeno, zey wıni mocniyeno: $1",
"abusefilter-blocked-display": "Ena hereket hewl niyo u zerar dano,\naye ra ti niekeno qeyd bike.\nEyni zemun de, qe pawitişê {{SITENAME}}î hesab u IPyê tu blok biyo.\nEka ti van ma yew ğeletî keno, yew îdare kerdoğê sîteyî rê mesaj bişirave.\nYew deskripsiyonê hereketê tu zerarin: $1",
@@ -87,8 +86,6 @@
"abusefilter-log-hide-hidden": "Ena vurnayişi şar ra binumne",
"abusefilter-log-hide-reason": "Sebeb:",
"abusefilter-log-hide-forbidden": "Tu ra destur cini ke logê xirabi bikefilne.",
- "abusefilter-logentry-suppress": "\"[[$1]]\" nımneya",
- "abusefilter-logentry-unsuppress": "Nımnayışê \"[[$1]]\" hewadeya",
"logentry-abusefilter-hit": "Sebebê $1'i $4 {{GENDER:$2|bı}} , \"$5\" kerdo $3 {{GENDER:$2|ser}} . verkewtışê ke gêriyayê: $6 ($7)",
"abusefilter-management": "idarayê filitreyê abuseyî",
"abusefilter-list": "Parzûni pêro",
@@ -121,7 +118,6 @@
"abusefilter-list-options-scope-local": "Tenya qeydeyê mehaliyi",
"abusefilter-list-options-scope-global": "Twyna global rolan",
"abusefilter-list-options-scope-all": "Rolê lokal u globali",
- "abusefilter-list-options-disabled": "Filitreyê qefilnaye",
"abusefilter-list-options-hidedisabled": "Filitreyê qefilnaye binimne",
"abusefilter-list-options-submit": "Rocane ke",
"abusefilter-tools-text": "wexta ke filtreya suistimali formule bena nê hacet lazım beni.",
@@ -141,7 +137,6 @@
"abusefilter-edit-status-label": "İstatistiki:",
"abusefilter-edit-status": "{{PLURAL:$1|Karo peyên|Karanê peyenan}} $1 de, karo $2 nısbetê ($3%) de nê parzûn ra piya bi be yew.",
"abusefilter-edit-status-profile": "{{PLURAL:$1|Karo peyên|Karanê peyenan}} $1 de, karo $2 nısbetê ($3%) de nê parzûn ra piya bi be yew.\nMudetê karê miyanêniyo ke $4ms domneno, sinorê şerti $5 qedneno.",
- "abusefilter-edit-throttled": "'''hişyari''': na filtre qey tedbirê pawıtışi bı otomatik battal verdiya.\n%$1 ra zêd resa sinorê hemcıtbiyayişi.",
"abusefilter-edit-new": "Filtreyê newî",
"abusefilter-edit-save": "Parzumi qeyd ke",
"abusefilter-edit-id": "IDyê filitreyî",
@@ -168,7 +163,6 @@
"abusefilter-edit-action-tag": "Qe kontrole raverî ena vurnayîşî etiket bike",
"abusefilter-edit-throttle-count": "Amarê hereketan ke destur guret:",
"abusefilter-edit-throttle-period": "Wext:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|saniye|saniyeyan}}",
"abusefilter-edit-throttle-groups": ":''(her satır re yew heb, pê virgul piyawanê-piya besnê)''",
"abusefilter-edit-warn-message": "Mesajê sistemî ke qe îkaz kerdişî viraziyo:",
"abusefilter-edit-warn-other": "mesajo bin",
@@ -258,19 +252,18 @@
"abusefilter-edit-builder-vars-new-content-model": "Modelê zerrekiyo newe",
"abusefilter-edit-builder-vars-removedlines": "Dizeyan ke nuşte de wedarne",
"abusefilter-edit-builder-vars-summary": "Qissayê vurnayîşî/sebeb",
- "abusefilter-edit-builder-vars-article-id": "Nımrey pela",
- "abusefilter-edit-builder-vars-article-ns": "Cayê namey perre",
- "abusefilter-edit-builder-vars-article-text": "Sernameyê ripelî (bê cayênameyî)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Sernamey pêro perre",
- "abusefilter-edit-builder-vars-article-views": "Perer bıvin",
+ "abusefilter-edit-builder-vars-page-id": "Nımrey pela",
+ "abusefilter-edit-builder-vars-page-ns": "Cayê namey perre",
+ "abusefilter-edit-builder-vars-page-title": "Sernameyê ripelî (bê cayênameyî)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Sernamey pêro perre",
"abusefilter-edit-builder-vars-movedfrom-id": "Perra IDyê çımey kırıştışi",
"abusefilter-edit-builder-vars-movedfrom-ns": "Cayê nameyî ke ripelê çimeyî ke neqil biyo",
- "abusefilter-edit-builder-vars-movedfrom-text": "Sernameyê ripelê çimeyî ke neqil biyo",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Sernameyê ripelê çimeyî ke neqil biyo",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Sernameyê ripelê çimeyî ke neqil biyo",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Sernameyê ripelê çimeyî ke neqil biyo",
"abusefilter-edit-builder-vars-movedto-id": "IDyê ripelî ke ripelê destinasyonî ke neqil biyo",
"abusefilter-edit-builder-vars-movedto-ns": "Cayênameyî ripelê destinasyonî ke neqil biyo",
- "abusefilter-edit-builder-vars-movedto-text": "Sernameyê ripelê destinasyonî ke neqil biyo",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Sernameyê ripelê destinasyonî ke neqil biyo",
+ "abusefilter-edit-builder-vars-movedto-title": "Sernameyê ripelê destinasyonî ke neqil biyo",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Sernameyê ripelê destinasyonî ke neqil biyo",
"abusefilter-edit-builder-vars-user-editcount": "Amarê karberi bıvurne",
"abusefilter-edit-builder-vars-user-age": "Serra hesabê karberi",
"abusefilter-edit-builder-vars-user-name": "Namey hesabê karberi",
@@ -340,7 +333,7 @@
"abusefilter-exception-regexfailure": "ifadeya \"$3\" de karakter $1'i de xeta: \"$2\"",
"abusefilter-exception-overridebuiltin": "$1 karakterinde \"$2\" yerleşik değişkeninin kuraldışı geçersiz kılınması.",
"abusefilter-exception-outofbounds": "$1 karakterindeki mevcut olmayan liste öğesi $2 (liste boyutu = $3) isteniyor.",
- "abusefilter-exception-notlist": "Ser karekterê $1î, wazeno adetê array ê nearrayî.",
+ "abusefilter-exception-notarray": "Ser karekterê $1î, wazeno adetê array ê nearrayî.",
"abusefilter-action-tag": "Etiket",
"abusefilter-action-throttle": "Taynkerdış",
"abusefilter-action-warn": "Îkaz",
@@ -391,7 +384,7 @@
"abusefilter-examine-syntaxerror": "Ena filter de yew syntakê ğeletî esta",
"abusefilter-examine-notfound": "Vurnayîşê ke ti wazenî nieşkenî bivine.",
"abusefilter-examine-incompatible": "Vurnayışo ke tı wazenay terefê Abuse Filteri ra desteg nêbeno",
- "abusefilter-examine-noresults": "Parametreyê bigêrayîşî ke ti ma ra da are înan de netice çini yo.",
+ "abusefilter-examine-noresults": "Parametreyê cıgeyrayışiyê ke to saye kerdi, inan miyan de netice çıniyo.",
"abusefilter-topnav": "'''Pusulayê Filtre dê peygoş kerdışa'''",
"abusefilter-topnav-home": "Keye",
"abusefilter-topnav-test": "Testê batchî",
@@ -401,7 +394,6 @@
"abusefilter-topnav-import": "Filitre împort bike",
"abusefilter-log-name": "Qeydé filtran dé nengan",
"abusefilter-log-header": "Ena log yew qisse mucneno ke ey de vurnayîşê filitreyî esta.\nQe detayanê hemî, bivine [[Special:AbuseFilter/history|liste]]yê vurnayîşê filitreyî.",
- "abusefilter-log-entry-modify": "$1 vurna ($2)",
"abusefilter-log-noresults": "Netice çıno",
"abusefilter-diff-title": "Benatê versiyonan de ferqan",
"abusefilter-diff-item": "Unsur",
@@ -415,43 +407,5 @@
"abusefilter-import-intro": "Ti eşkeno ser ena ripel de wîkîyî binan ra filitre împort bike.\nWîkî çimeyî de bine \"{{int:abusefilter-edit-tools}}\" de \"{{int:abusefilter-edit-export}}\" klik bike.\nKutiyê nuştîşî kopye bike u ena kutiyê nuştîş rê na pa u klik bike \"{{int:abusefilter-import-submit}}\".",
"abusefilter-import-submit": "Malumata zerre ke",
"abusefilter-group-default": "Hesabiyaye",
- "abusefilter-http-error": "Yew xırabeya HTTP'i biyo: $1",
- "apihelp-abusefiltercheckmatch-description": "Ratena Fiktrandê nengan dı têversanayış esto se, filtrey nengan de vurnayış vurnayışi kontrol kerê \n\nVurnayoğê RCID ya na LOGID eger ke icab krno se karêno",
- "apihelp-abusefiltercheckmatch-param-filter": "Ful filtreya metini çımraravyarnayışi ke",
- "apihelp-abusefiltercheckmatch-param-vars": "Vurnayerê kod kerdena JSON fına do test bo.",
- "apihelp-abusefiltercheckmatch-param-rcid": "Têverşanaene rê vırnayışê IDy'o peyên",
- "apihelp-abusefiltercheckmatch-param-logid": "Têverşanaene rê IDy qeydê filtrey heqareti",
- "apihelp-abusefiltercheckmatch-example-1": "Vurnayışê peyêni kamiya basit filtre de 15 ra vêşi se test ke",
- "apihelp-abusefilterchecksyntax-description": "Filtreya nengan parzuna syntaxi çımraravyarn",
- "apihelp-abusefilterchecksyntax-param-filter": "Ful filtreya metini çımraravyarn syntaxi",
- "apihelp-abusefilterchecksyntax-example-1": "Filtreya ravêrdi syntaxi çım ra ravyarn",
- "apihelp-abusefilterchecksyntax-example-2": "Rêzê yew filtreyo ke muteber niyo, çım ra raviyarne",
- "apihelp-abusefilterevalexpression-description": "Erca ifadeya Filtreya nengan",
- "apihelp-abusefilterevalexpression-param-expression": "Erceya ifadeyan",
- "apihelp-abusefilterevalexpression-example-1": "Erca gasit ifadeyan",
- "apihelp-abusefilterunblockautopromote-description": "Filtreya nengan karberi neticeya bloqe bıyayışa cı otomatik kerdau gêriya ya",
- "apihelp-abusefilterunblockautopromote-param-user": "Şıma qayılê ke bloqey kanci bamaey karberi wedarne.",
- "apihelp-abusefilterunblockautopromote-example-1": "Otomatik [[User:Example]] bloqey cı wedarnê",
- "apihelp-query+abusefilters-description": "Detaya filtreya nengan bıvin",
- "apihelp-query+abusefilters-param-startid": "Kamiya filtre nımre kerdışmra start ke",
- "apihelp-query+abusefilters-param-endid": "Kamiya filtri nımre kedışi vındarn",
- "apihelp-query+abusefilters-param-show": "Kanci filtrey teyna ena kriterer anê bıvin",
- "apihelp-query+abusefilters-param-limit": "Listeya filtranndı maksimum numre",
- "apihelp-query+abusefilters-param-prop": "Kamci xısusiyeta ke gê no",
- "apihelp-query+abusefilters-example-1": "Listey filtreya şari aktiva",
- "apihelp-query+abusefilters-example-2": "Heqdê filtranndı tayna detaya bıvin",
- "apihelp-query+abuselog-description": "Filtreya nengan yew merdımi teref ra tepêşyaya bıvin",
- "apihelp-query+abuselog-param-start": "Mora zemani nımre kerdışmra start ke",
- "apihelp-query+abuselog-param-end": "Mora zemani nımre kedışi vındarn",
- "apihelp-query+abuselog-param-user": "Teyna qeydé dekerdena grotena IP adresa karberi bıvin",
- "apihelp-query+abuselog-param-title": "Dekerdenanê perer teyna bıvin",
- "apihelp-query+abuselog-param-filter": "Teyna dekerdenanê kamiya filtrande tepêştena grotışa bıvin",
- "apihelp-query+abuselog-param-limit": "Azami miktarê dekerdena liste ke",
- "apihelp-query+abuselog-param-prop": "Kamci xısusiyeta ke gê no",
- "apihelp-query+abuselog-example-1": "Qeydanê dekerdanê peyênan bıasne",
- "apihelp-query+abuselog-example-2": "Qandé [[API]] Qeydanê dekerdanê peyênan bıasne",
- "apierror-abusefilter-canttest": "Testê qeydê nengan rê izinê şıma çıni yo.",
- "apierror-abusefilter-cantcheck": "rêz kerdena qeydanê nengan rê izinê şıma çıni yo.",
- "apierror-abusefilter-nosuchlogid": "Tiya ra qeydê nengan nêdebêno kamiya $1",
- "apierror-abusefilter-badsyntax": "Ena filter de yew rêza xelat esta."
+ "abusefilter-http-error": "Yew xırabeya HTTP'i biyo: $1"
}
diff --git a/AbuseFilter/i18n/dsb.json b/AbuseFilter/i18n/dsb.json
index 2671a633..13fb23af 100644
--- a/AbuseFilter/i18n/dsb.json
+++ b/AbuseFilter/i18n/dsb.json
@@ -3,14 +3,14 @@
"authors": [
"Derbeth",
"Michawiki",
- "Matma Rex"
+ "Matma Rex",
+ "Matěj Suchánek"
]
},
"abusefilter-desc": "Nałožujo awtomatisku heuristiku na změny.",
"abusefilter": "Konfiguracija znjewužywańskego filtra",
"abuselog": "Protokol znjewužywanjow",
"abusefilter-intro": "Witaj do pówjercha zastojanja znjewužywańskich filtrow.\nZnjewužywański filter jo awtomatizěrowany softwarowy mechanizm za nałoženje awtomatiskeje heuristiki na wše akcije.\nToś ten pówjerch pokazujo lisćinu definěrowanych filtrow a zmóžnja je změniś.",
- "abusefilter-mustbeeditor": "Z wěstotnych pśicynow mógu jano wužywarje z pšawom znjewužywaśnke filtry změniś toś ten interfejs wužywaś.",
"abusefilter-warning": "'''Warnowanje''': Toś ta akcija jo se awtomatiski identificěrowała ako škódna.\nNjekonstruktiwne změny budu se spěšnje anulěrowaś, a njesromne abo wóspjetowane njekonstruktiwne wobźěłowanje buźo k tomu wjasć, až twójo konto abo twója IP-adresa se blokěrujo.\nJolic se mysliš, až toś ta akcija jo konstruktiwna, móžoš ju znowego składowaś, aby ju wobkšuśił. \nKrotke wopisanje znjewužywańskego pšawidła, kótaremuž twója akcija wótpowědujo, jo: $1",
"abusefilter-disallowed": "Toś ta akcija jo se awtomatiski identificěrowała ako škódna, a togodla znjemóžniła.\nJolic se měniš, až twója akcija jo była konstruktiwna, informěruj administratora, což sy wopytał cyniś.\nKrotke wopisanje znjewužywańskego pšawidła, kótaremuž twója akcija wótpowědujo, jo: $1",
"abusefilter-blocked-display": "Toś ta akcija jo se awtomatiski identificěrowała ako škódna, a jo se śi zawoborało ju wuwjasć.\nPśidatnje, aby {{SITENAME}} šćitało, blokěruju se twójo wužywarske konto a wše zwězane IP-adrese pśeśiwo wobźěłowanjoju.\nJolic jo se to zamólnje stało, staj se pšosym z administratorom do zwiska.\nKrotke wopisanje znjewužywańskego pšawidła, kótaremuž twója akcija wótpowědujo, jo: $1",
@@ -76,8 +76,6 @@
"abusefilter-log-hide-hidden": "Toś ten zapisk zjawnje schowaś",
"abusefilter-log-hide-reason": "Pśicyna:",
"abusefilter-log-hide-forbidden": "Njamaš pšawo zapiski znjewužywańskego protokola schowaś.",
- "abusefilter-logentry-suppress": "jo \"[[$1]]\" schował",
- "abusefilter-logentry-unsuppress": "jo \"[[$1]]\" pokazał",
"logentry-abusefilter-hit": "$1 jo pśi wuwjeźenju akcije \"$5\" na $3 $4 zapušćił. Statkowanje: $6 ($7)",
"abusefilter-management": "Zastojanje znjewužywańskich filtrow",
"abusefilter-list": "Wše filtry",
@@ -109,7 +107,6 @@
"abusefilter-list-options-scope": "Filtry pokazaś z:",
"abusefilter-list-options-scope-local": "Lokalny wiki",
"abusefilter-list-options-scope-global": "Globalne pšawidła",
- "abusefilter-list-options-disabled": "Znjemóžnjone filtry:",
"abusefilter-list-options-hidedisabled": "Znjemóžnjone filtry schowaś",
"abusefilter-list-options-submit": "Aktualizěrowaś",
"abusefilter-tools-text": "How su někotare rědy, kótarež by mógli pśi formulěrowanju znjewužywańskich filtrow a za pytanje za zmólkimi w nich wužytne byś.",
@@ -118,7 +115,7 @@
"abusefilter-tools-reautoconfirm": "Awtomatiski wobkšuśony status wótnowiś",
"abusefilter-tools-reautoconfirm-user": "Wužywaŕ:",
"abusefilter-tools-reautoconfirm-submit": "Znowego awtomatiski wobkšuśiś",
- "abusefilter-reautoconfirm-none": "{{GENDER:$1Toś ten wužywaŕ||Toś tomu wužywarjeju|Toś tej wužywarce}} njejo se změnił {{GENDER:$1|jogo|jeje}} awtomatiski wobkšuśony status.",
+ "abusefilter-reautoconfirm-none": "{{GENDER:$1|Toś ten wužywaŕ||Toś tomu wužywarjeju|Toś tej wužywarce}} njejo se změnił {{GENDER:$1|jogo|jeje}} awtomatiski wobkšuśony status.",
"abusefilter-reautoconfirm-notallowed": "Njesmějoš awtomatiski wobkšuśony status wótnowiś",
"abusefilter-reautoconfirm-done": "Status awtomatiskego wobkšuśenja konta jo se wótnowił",
"abusefilter-status": "Ze {{PLURAL:$1|slědneje akcije|slědneju $1 akciji|slědnych $1 akcijow|slědnych $1 akcijow}} $2 ($3 %) {{PLURAL:$2|jo dojśpiła|stej dojśpiłej|su dojśpili|jo dojśpiło}} limit wuměnjenja $4 a $5 ($6 %) {{PLURAL:$5|jo wótpowědowała|stej wótpowědowałej|su wótpowědowali|jo wótpowědowało}} jadnomu z filtrow, kótarež su tuchylu zmóžnjone.",
@@ -129,7 +126,6 @@
"abusefilter-edit-status-label": "Statistika:",
"abusefilter-edit-status": "Ze {{PLURAL:$1|slědneje akcije|slědneju $1 akcijowu|slědnych $1 akcijow|slědnych $1 akcijow}} toś ten filter jo spóznał $2 ($3 %). Jogo cas wužywanja jo pśerěznje $4 ms a docynja $5 {{PLURAL:$5|wuměnjenje|wuměnjeni|wuměnjenja|wuměnjenjow}} limita wuměnjenjow.",
"abusefilter-edit-status-profile": "Ze {{PLURAL:$1|slědneje akcije|slědneju $1 akcijowu|slědnych $1 akcijow|slědnych $1 akcijow}} toś ten filter jo spóznał $2 ($3 %). Jogo cas wužywanja jo pśerěznje $4 ms a docynja $5 {{PLURAL:$5|wuměnjenje|wuměnjeni|wuměnjenja|wuměnjenjow}} limita wuměnjenjow.",
- "abusefilter-edit-throttled": "'''Warnowanje''': Toś ten filter jo se awtomatiski znjemóžnił ako wěstotna napšawa.\nJo dojśpił limit wěcej ako $1 % akcijow.",
"abusefilter-edit-new": "Nowy filter",
"abusefilter-edit-save": "Filter składowaś",
"abusefilter-edit-id": "ID filtra:",
@@ -148,7 +144,6 @@
"abusefilter-edit-consequences": "Akcije wuwjeźone pśi trjefarju",
"abusefilter-edit-action-warn": "Toś te akcije pó warnowanju do wužiwarja zapušćiś",
"abusefilter-edit-action-disallow": "Wužywarjeju wugbanje daneje akcije zawobaraś",
- "abusefilter-edit-action-flag": "Změnu w protokolu znjewužywanjow wobznamjeniś",
"abusefilter-edit-action-blockautopromote": "Wužywarjeju awtomatiski wobkšuśony status zajmjeś",
"abusefilter-edit-action-degroup": "Wužywarja ze wšych priwilegěrowanych kupkow wótwónoźeś",
"abusefilter-edit-action-block": "Wužywarjeju a/abo IP wobźěłanje zawobaraś",
@@ -157,7 +152,6 @@
"abusefilter-edit-action-tag": "Změnu za dalšne pśeglědanje markěrowaś.",
"abusefilter-edit-throttle-count": "Licba dowólonych akcijow:",
"abusefilter-edit-throttle-period": "Casowy interwal:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekunda|sekunźe|sekundy|sekundow}}",
"abusefilter-edit-throttle-groups": "Wobgranicowanje spěšnosći wobźěłanja kupki pśez:\n:''(jadna na smužku, někotare z komami)''",
"abusefilter-edit-warn-message": "Systemowa powěźeńka za warnowanje:",
"abusefilter-edit-warn-other": "Druga powěźeńka",
@@ -244,19 +238,18 @@
"abusefilter-edit-builder-vars-oldsize": "Stara wjelikosć boka",
"abusefilter-edit-builder-vars-removedlines": "Smužki, kótarež su wótporali pśi wobźěłanju",
"abusefilter-edit-builder-vars-summary": "Zespominanje/pśicyna wobźěłanja",
- "abusefilter-edit-builder-vars-article-id": "ID boka",
- "abusefilter-edit-builder-vars-article-ns": "Mjenjowy rum boka",
- "abusefilter-edit-builder-vars-article-text": "Titel boka (bźez mjenjowego ruma)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Dopołny titel boka",
- "abusefilter-edit-builder-vars-article-views": "Wobglědanja boka",
+ "abusefilter-edit-builder-vars-page-id": "ID boka",
+ "abusefilter-edit-builder-vars-page-ns": "Mjenjowy rum boka",
+ "abusefilter-edit-builder-vars-page-title": "Titel boka (bźez mjenjowego ruma)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Dopołny titel boka",
"abusefilter-edit-builder-vars-movedfrom-id": "Bokowy ID žrědłowego boka",
"abusefilter-edit-builder-vars-movedfrom-ns": "Mjenjowy rum žrědłowego boka",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titel žrědłowego boka",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Dopołny titel žrědłowego boka",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titel žrědłowego boka",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Dopołny titel žrědłowego boka",
"abusefilter-edit-builder-vars-movedto-id": "Bokowy ID celowego boka",
"abusefilter-edit-builder-vars-movedto-ns": "Mjenjowy rum celowego boka",
- "abusefilter-edit-builder-vars-movedto-text": "Titel celowego boka",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Dopołny titel celowego boka",
+ "abusefilter-edit-builder-vars-movedto-title": "Titel celowego boka",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Dopołny titel celowego boka",
"abusefilter-edit-builder-vars-user-editcount": "Licenje změnow wužywarja",
"abusefilter-edit-builder-vars-user-age": "Starstwo wužywarskego konta",
"abusefilter-edit-builder-vars-user-name": "Mě wužywarskego konta",
@@ -318,7 +311,7 @@
"abusefilter-exception-regexfailure": "Zmólka w regularnem wurazu \"$3\" pla znamješka $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Njedowólone wótpóranje zaźěłaneje wariable \"$2\" pla znamuška $1.",
"abusefilter-exception-outofbounds": "Pomina se njeeksistěrujucy lisćinowy zapisk $2 (lisćinowa wjelikosć = $3) pla znamuška $1.",
- "abusefilter-exception-notlist": "Pomina se zapisk pólneje wariable pla znamuška $1, za objekt, kótaryž njejo pólna wariabla.",
+ "abusefilter-exception-notarray": "Pomina se zapisk pólneje wariable pla znamuška $1, za objekt, kótaryž njejo pólna wariabla.",
"abusefilter-action-tag": "Toflicka",
"abusefilter-action-throttle": "Pódušyś",
"abusefilter-action-warn": "Warnowaś",
@@ -379,7 +372,6 @@
"abusefilter-topnav-import": "Filter importěrowaś",
"abusefilter-log-name": "Protokol znjewužywańskego filtra",
"abusefilter-log-header": "Toś ten protokol pokazujo zespominanje změnow, kótarež su se pśewjadli na filtrach.\nZa połne drobnostki glědaj [[Special:AbuseFilter/history|lisćinu]] nejnowšych filtrowych změnow.",
- "abusefilter-log-entry-modify": "jo změnił $1 ($2)",
"abusefilter-log-noresults": "Žedne wuslědki",
"abusefilter-diff-title": "Rozdźěle mjazy wersijami",
"abusefilter-diff-item": "Zapisk",
diff --git a/AbuseFilter/i18n/dtp.json b/AbuseFilter/i18n/dtp.json
index 4329a210..4650e20d 100644
--- a/AbuseFilter/i18n/dtp.json
+++ b/AbuseFilter/i18n/dtp.json
@@ -9,7 +9,6 @@
"abusefilter": "Manahas sinalaguno nuludan",
"abuselog": "Log sinalaguno",
"abusefilter-intro": "Kopiwosian mongoi id kouroso mangaraja Manahas Sinalaguno.\nManahas Sinalaguno nopo nga doungkaralano kumaraja dit posusuangon momoripori iri numaan pokionuo id huristik mimpoporion montok oinsanan it maan.\nKouroso diti popokito do lis panahas potumboyo, om pabanar dilo do maan modipaito.",
- "abusefilter-mustbeeditor": "Montok do kotingoligan, iri mongongoguno miampai kasagaan do mongodipait panahas sinalaguno no milo do momoguno diti kouroso.",
"abusefilter-warning": "'''Ponorohon''': Kinaraja diti noporianan nointutunan do kikoligogon.\nNiditan di awu nopongo maan pogulio do tiinu,\nom opinsugutan nu nopo do awu momongo niditan nga karaag do akaun nu toi ko maan antabai porotokol intonit ''IP''nu.\nOtumbayaan ko nopo do nopongo iti niditannu, maai nopo kaagu kotiko Pootodo do papatatap dilo.\nKointalangan do sinalaguno diti kooturan di kohompit do niditannu nopo nga oboyo do: $1",
"abusefilter-disallowed": "Kinaraja diti noporianan nointutunan do kikoligogon, om ilo no do awu pasagaon.\nNiditan di awu nopongo maan pogulio do tiinu,\nOtumbayaan ko nopo do nopongo iti niditannu, maai gia sunudai it mintatamong do nunu daa umbalan nu momonsoi. Kointalangan do sinalaguno diti kooturan di kohompit do kinarajanu nopo nga oboyo do: $1",
"abusefilter-blocked-display": "Kinaraja diti noporianan nointutunan do kikoligogon, om nantaban ko do popotilombus dilo.\nMooi do otingolig ilo {{SITENAME}} akaun momomogunonu om oinsanan porotokol intonit toi ''IP''nu nga nantaban do mongidit.\nNung nokosilap iti, maai posunudo do mintatamong.\nKointalangan do sinalaguno diti kooturan di kohompit do kinarajanu nopo nga oboyo do: $1",
diff --git a/AbuseFilter/i18n/ee.json b/AbuseFilter/i18n/ee.json
index d9809972..d2b10dd3 100644
--- a/AbuseFilter/i18n/ee.json
+++ b/AbuseFilter/i18n/ee.json
@@ -11,8 +11,6 @@
"abusefilter-log-cannot-see-details": "Mɔɖeɖe meli bena wòa kpɔ nusiwo woŋlɔ ɖe afisia o.",
"abusefilter-log-details-hidden": "Wò mateŋu akpɔ nusiwo woŋlɔ ɖe afisia o elabena woɣla wo.",
"abusefilter-log-hide-hidden": "Ɣla nusiawo tso amewo gbɔ",
- "abusefilter-logentry-suppress": "ɣla \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "mega ‎ɣla \"[[$1]]\" o",
"abusefilter-list-edit": "Trɔ asi le eŋu",
"abusefilter-list-lastmodified": "Tɔtrɔ mamlea",
"abusefilter-deleted": "Wo tutui",
diff --git a/AbuseFilter/i18n/el.json b/AbuseFilter/i18n/el.json
index bce0f830..c4371e8d 100644
--- a/AbuseFilter/i18n/el.json
+++ b/AbuseFilter/i18n/el.json
@@ -15,14 +15,15 @@
"Protnet",
"ZaDiak",
"Αντιγόνη",
- "Matma Rex"
+ "Matma Rex",
+ "KATRINE1992",
+ "Nikosgranturismogt"
]
},
"abusefilter-desc": "Εφαρμόζει αυτόματη ανίχνευση σε επεξεργασίες",
"abusefilter": "Διαμόρφωση φίλτρου καταχρήσεων",
"abuselog": "Ιστορικό καταχρήσεων",
"abusefilter-intro": "Καλωσήρθατε στη διεπαφή διαχείρισης του Φίλτρου Καταχρήσεων.\nΤο Φίλτρο Καταχρήσεων είναι ένα αυτοματοποιημένο λογισμικό που εφαρμόζει αυτόματες ευρετικές μεθόδους σε όλες τις ενέργειες.\nΑυτή η διεπαφή παρουσιάζει μία σειρά καθορισμένων φίλτρων και επιτρέπει την μετατροπή τους.",
- "abusefilter-mustbeeditor": "Για λόγους ασφαλείας, μόνο χρήστες με το δικαίωμα να τροποποιούν φίλτρα καταχρήσεων είναι σε θέση να χρησιμοποιούν αυτήν την διεπαφή.",
"abusefilter-warning": "''' Προειδοποίηση:''' αυτή η ενέργεια έχει αυτόματα εντοπιστεί ως επιβλαβής.\nΜη εποικοδομητικές επεξεργασίες θα αναστραφούν γρήγορα,\nκαι σκανδαλώδεις ή κατ ' επανάληψη μη εποικοδομητικές επεξεργασίες θα οδηγήσουν το λογαριασμό σας ή τη διεύθυνση IP σας να αποκλειστεί.\nΕάν πιστεύετε ότι αυτή η ενέργεια είναι εποικοδομητική, μπορείτε να την υποβάλετε και πάλι για να την επιβεβαιώσετε.\nΕίναι μια σύντομη περιγραφή της παραβίασης με την οποία η ενέργειά σας ταιριάζει είναι: $1",
"abusefilter-disallowed": "Αυτή η ενέργεια ταυτοποιήθηκε αυτόματα ως επιβλαβής, και άρα απαγορεύεται.\nΑν πιστεύετε ότι αυτή η επεξεργασία είναι εποικοδομητική, παρακαλώ επικοινωνήστε με έναν διαχειριστή, και πληροφορήστε τον για το τι προσπαθείτε να κάνετε.\nΜια σύντομη περιγραφή του κανόνα καταχρήσεων στο οποίο αντιστοιχήθηκε η ενέργειά σας είναι η εξής: $1",
"abusefilter-blocked-display": "Αυτή η ενέργεια ταυτοποιήθηκε αυτόματα ως επιβλαβής,\nκαι αποτραπήκατε από το να την εκτελέσετε.\nΕπιπλέον, για να προστατευθεί το {{SITENAME}}, ο λογαριασμός χρήστη σας και όλες οι σχετιζόμενες διευθύνσεις IP έχουν φραγεί από τη δυνατότητα επεξεργασίας.\nΑν πιστεύετε ότι έχει γίνει κάποιο λάθος, παρακαλούμε επικοινωνήστε με κάποιον διαχειριστή.\nΜια σύντομη περιγραφή του κανόνα καταχρήσεων στο οποίο αντιστοίχησε η ενέργειά σας είναι η εξής: $1",
@@ -58,6 +59,14 @@
"abusefilter-log-search-filter": "Αναγνωριστικά φίλτρου (διαχωρισμένα με την κατακόρυφη κάθετο):",
"abusefilter-log-search-title": "Τίτλος:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-entries-label": "Ορατότητα:",
+ "abusefilter-log-search-entries-all": "Όλες οι καταχωρήσεις",
+ "abusefilter-log-search-entries-hidden": "Κρυμμένες καταχωρήσεις μόνο",
+ "abusefilter-log-search-entries-visible": "Ορατές καταχωρήσεις μόνο",
+ "abusefilter-log-search-action-other": "Άλλο",
+ "abusefilter-log-search-action-any": "Οποιοδήποτε",
+ "abusefilter-log-search-action-taken-label": "Δράση που λήφθηκε:",
+ "abusefilter-log-search-action-taken-any": "Οποιοδήποτε",
"abusefilter-log-search-submit": "Αναζήτηση",
"abusefilter-log-entry": "$1: Ο $2 προκάλεσε ένα φίλτρο καταχρήσεων, εκτελώντας την ενέργεια \"$3\" στο $4.\nΕνέργειες που λήφθηκαν: $5;\nΠεριγραφή φίλτρου: $6",
"abusefilter-log-detailedentry-meta": "$1: Ο $2 προκάλεσε το $3, εκτελώντας την ενέργεια \"$4\" στο $5.\nΕνέργειες που λήφθηκαν: $6;\nΠεριγραφή φίλτρου: $7 ($8)",
@@ -70,7 +79,7 @@
"abusefilter-log-details-var": "Μεταβλητή",
"abusefilter-log-details-val": "Τιμή",
"abusefilter-log-details-vars": "Παράμετροι ενεργειών",
- "abusefilter-log-details-private": "Προσωπικά δεδομένα",
+ "abusefilter-log-details-private": "Ιδιωτικές λεπτομέρειες μητρώου",
"abusefilter-log-details-ip": "Διεύθυνση IP της προέλευσης",
"abusefilter-log-noactions": "καμία",
"abusefilter-log-details-diff": "Αλλαγές που πραγματοποιήθηκαν κατά την επεξεργασία",
@@ -85,8 +94,6 @@
"abusefilter-log-hide-hidden": "Απόκρυψη αυτής της εγγραφής από την κοινή θέα",
"abusefilter-log-hide-reason": "Αιτία:",
"abusefilter-log-hide-forbidden": "Δεν έχετε άδεια για να κρύψετε τις καταχωρήσεις κατάχρησης του αρχείου καταγραφής",
- "abusefilter-logentry-suppress": "έκρυψε το \"[[$1]] \"",
- "abusefilter-logentry-unsuppress": "αποκάλυψε \"[[$1]]\"",
"abusefilter-management": "Διαχείριση φίλτρου καταχρήσεων",
"abusefilter-list": "Όλα τα φίλτρα",
"abusefilter-list-id": "Ταυτότητα φίλτρου",
@@ -117,8 +124,13 @@
"abusefilter-list-options-scope": "Εμφάνιση φίλτρων:",
"abusefilter-list-options-scope-local": "Μόνο τοπικοί κανόνες",
"abusefilter-list-options-scope-global": "Μόνο καθολικοί κανόνες",
- "abusefilter-list-options-disabled": "Απενεργοποιημένα φίλτρα:",
+ "abusefilter-list-options-further-options": "Περαιτέρω επιλογές:",
"abusefilter-list-options-hidedisabled": "Απόκρυψη απενεργοποιημένων φίλτρων",
+ "abusefilter-list-options-hideprivate": "Απόκρυψη ιδιωτικών φίλτρων",
+ "abusefilter-list-options-searchfield": "Αναζήτηση εντός των κανόνων:",
+ "abusefilter-list-options-searchpattern": "Εισαγάγετε μια συνθήκη",
+ "abusefilter-list-options-searchoptions": "Λειτουργία αναζήτησης:",
+ "abusefilter-list-options-search-rlike": "Τακτική έκφραση",
"abusefilter-list-options-submit": "Ενημέρωση",
"abusefilter-tools-text": "Εδώ βρίσκονται κάποια εργαλεία τα οποία ενδέχεται να είναι χρἠσιμα στην διατύπωση και την εκσφαλμἀτωση φίλτρων καταχρἠσεων.",
"abusefilter-tools-expr": "Ελεγκτής εκφράσεων",
@@ -137,11 +149,12 @@
"abusefilter-edit-status-label": "Στατιστικά:",
"abusefilter-edit-status": "Από {{PLURAL:$1|τη $1 τελευταία ενέργεια|τις $1 τελευταίες ενέργειες}}, αυτό το φίλτρο έχει αντιστοιχίσει $2 ($3%).",
"abusefilter-edit-status-profile": "Από {{PLURAL:$1|τη $1 τελευταία ενέργεια|τις $1 τελευταίες ενέργειες}}, αυτό το φίλτρο έχει αντιστοιχίσει $2 ($3%).\nΣτο μέσο όρο, ο χρόνος απόκρισης της είναι $4ms, και καταναλώνει $5 {{PLURAL:$5|όρο|όρους}} από το όριο όρων.",
- "abusefilter-edit-throttled": "'''Προειδοποίηση''': Αυτό το φίλτρο απενεργοποιήθηκε αυτόματα ως ένα μέτρο ασφαλείας.\nΈφτασε το όριο της αντιστοίχισης περισσότερο από $1% των δράσεων.",
"abusefilter-edit-new": "Νέο φίλτρο",
"abusefilter-edit-save": "Αποθήκευση φίλτρου",
"abusefilter-edit-id": "Ταυτότητα φίλτρου:",
+ "abusefilter-edit-switch-editor": "Εναλλαγή επεξεργαστή",
"abusefilter-edit-description": "Περιγραφή:\n:''(σε δημόσια θέα)''",
+ "abusefilter-edit-field-description": "Περιγραφή",
"abusefilter-edit-group": "Ομάδα φίλτρου:",
"abusefilter-edit-flags": "Σημαίες:",
"abusefilter-edit-enabled": "Ενεργοποίηση αυτού του φίλτρου",
@@ -149,6 +162,7 @@
"abusefilter-edit-hidden": "Απόκρυψη λεπτομερειών αυτού του φίλτρου από τη δημόσια θέα",
"abusefilter-edit-global": "Καθολικό φίλτρο",
"abusefilter-edit-rules": "Συνθήκες:",
+ "abusefilter-edit-field-conditions": "Συνθήκες",
"abusefilter-edit-notes": "Σημειώσεις:",
"abusefilter-edit-lastmod": "Το φίλτρο τροποποιήθηκε τελευταία φορά:",
"abusefilter-edit-lastmod-text": "$1 από $2",
@@ -156,7 +170,6 @@
"abusefilter-edit-consequences": "Εκτέλεση της ένεργειας όταν εντοπισθεί το αποτέλεσμα",
"abusefilter-edit-action-warn": "Πρόκληση τέτοιων ενεργειών αφού δοθεί στον χρήστη μια προειδοποίηση",
"abusefilter-edit-action-disallow": "Αποτροπή του χρήστη από την εκτέλεση της συγκεκριμένης ενέργειας",
- "abusefilter-edit-action-flag": "Επισήμανση με σημαία αυτής της επεξεργασίας στο ιστορικό καταχρήσεων",
"abusefilter-edit-action-blockautopromote": "Ανάκληση της ιδιότητας αυτοεπιβεβαιωμένου χρήστη",
"abusefilter-edit-action-degroup": "Αφαίρεσε τον χρήστη από όλες τις ομάδες δικαιωμάτων",
"abusefilter-edit-action-block": "Φραγή χρήστη ή/και διεύθυνσης IP από την επεξεργασία",
@@ -164,16 +177,24 @@
"abusefilter-edit-action-rangeblock": "Φραγή της εμβέλειας IP /16 από όπου προέρχεται ο χρήστης.",
"abusefilter-edit-action-tag": "Σήμανση της επεξεργασίας με ετικέτα για περαιτέρω επιθεώρηση",
"abusefilter-edit-throttle-count": "Αριθμός επιτρεπόμενων ενεργειών:",
- "abusefilter-edit-throttle-period": "Χρονική περίοδος:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|δευτερόλεπτο|δευτερόλεπτα}}",
+ "abusefilter-edit-throttle-period": "Χρονική περίοδος (σε δευτερόλεπτα):",
"abusefilter-edit-throttle-groups": "Εμπόδιση ομάδας από:\n:''(ένα ανά γραμμή, συνδυασμός με κόμματα)''",
+ "abusefilter-edit-throttle-ip": "Διεύθυνση IP",
+ "abusefilter-edit-throttle-user": "Λογαριασμός χρήστη",
+ "abusefilter-edit-throttle-range": "εύρος /16",
+ "abusefilter-edit-throttle-editcount": "Καταμέτρηση επεξεργασιών",
+ "abusefilter-edit-throttle-site": "Ολόκληρη η ιστοσελίδα",
+ "abusefilter-edit-throttle-page": "Σελίδα",
"abusefilter-edit-warn-message": "Μήνυμα συστήματος για χρησιμοποίηση για προειδοποίηση:",
"abusefilter-edit-warn-other": "Άλλο μήνυμα",
"abusefilter-edit-warn-other-label": "Όνομα σελίδας άλλου μηνύματος:\n:''(χωρίς πρόθεμα MediaWiki)''",
"abusefilter-edit-warn-actions": "Ενέργειες:",
"abusefilter-edit-warn-preview": "Προεπισκόπηση του επιλεγμένου μηνύματος",
"abusefilter-edit-warn-edit": "Δημιουργία/Επεξεργασία επιλεγμένων μηνυμάτων",
+ "abusefilter-edit-disallow-other": "Άλλο μήνυμα",
+ "abusefilter-edit-disallow-actions": "Ενέργειες:",
"abusefilter-edit-tag-tag": "Ετικέτες για να επικολληθούν (μία ανά γραμμή):",
+ "abusefilter-edit-tag-hidden-placeholder": "Προσθήκη ετικετών (το κόμμα χωρίζεται)",
"abusefilter-edit-denied": "Δεν μπορείτε να δείτε τις λεπτομέρειες αυτού του φίλτρου, γιατί αυτές έχουν αποκρυφθεί από τη δημόσια θέα.",
"abusefilter-edit-main": "Παράμετροι φίλτρου",
"abusefilter-edit-done-subtitle": "Επεξεργασμένο φίλτρο",
@@ -203,8 +224,8 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Υπόλοιπο (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Δύναμη (**)",
"abusefilter-edit-builder-group-op-comparison": "Τελεστές σύγκρισης",
- "abusefilter-edit-builder-op-comparison-equal": "Ίσο προς (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Μη ίσο προς (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Τιμή ίση προς (==)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Τιμή μη ίση προς (!=)",
"abusefilter-edit-builder-op-comparison-lt": "Μικρότερο από (<)",
"abusefilter-edit-builder-op-comparison-gt": "Μεγαλύτερο από (>)",
"abusefilter-edit-builder-op-comparison-lte": "Μικρότερο από ή ίσο με (<=)",
@@ -232,6 +253,7 @@
"abusefilter-edit-builder-funcs-norm": "Κανονικοποίηση (norm)",
"abusefilter-edit-builder-funcs-count": "Αριθμός φορών που η συμβολοσειρά X εμφανίζεται στη συμβολοσειρά Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Ο αριθμός των φορών που η τακτική έκφραση Χ εμφανίζεται στον ορμαθό Υ (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Σειρά από συνδυασμούς regex μέσα σε ένα κείμενο για κάθε ομάδα που έχει πρόσβαση σε αυτό (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Aφαίρεση κενού διαστήματος (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Αφαίρεση ειδικών χαρακτήρων (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Είναι η IP εντός εμβέλειας; (ip_in_range)",
@@ -240,6 +262,7 @@
"abusefilter-edit-builder-funcs-strpos": "Θέση του υποορμαθού στον ορμαθό (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Αντικατάσταση υποορμαθού με ορμαθό (str_replace)",
"abusefilter-edit-builder-funcs-set_var": "Ορισμός μεταβλητής (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Κανονικοποίηση οντοτήτων HTML σε χαρακτήρες unicode (απολύμανση)",
"abusefilter-edit-builder-group-vars": "Μεταβλητές",
"abusefilter-edit-builder-vars-accountname": "Όνομα λογαριασμού (κατά την δημιουργία λογαριασμού)",
"abusefilter-edit-builder-vars-timestamp": "Χρονική σφραγίδα Unix της επεξεργασίας",
@@ -251,19 +274,19 @@
"abusefilter-edit-builder-vars-oldsize": "Μέγεθος παλαιάς σελίδας",
"abusefilter-edit-builder-vars-removedlines": "Γραμμές που αφαιρέθηκαν κατά την επεξεργασία",
"abusefilter-edit-builder-vars-summary": "Περίληψη επεξεργασίας/αιτιολογία",
- "abusefilter-edit-builder-vars-article-id": "Ταυτότητα σελίδας",
- "abusefilter-edit-builder-vars-article-ns": "Περιοχή ονομάτων της σελίδας",
- "abusefilter-edit-builder-vars-article-text": "Όνομα σελίδας (χωρίς περιοχή ονόματος)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Πλἠρης τίτλος σελίδας",
- "abusefilter-edit-builder-vars-article-views": "Προβολές σελίδων",
+ "abusefilter-edit-builder-vars-page-id": "Ταυτότητα σελίδας",
+ "abusefilter-edit-builder-vars-page-ns": "Περιοχή ονομάτων της σελίδας",
+ "abusefilter-edit-builder-vars-page-title": "Όνομα σελίδας (χωρίς περιοχή ονόματος)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Πλἠρης τίτλος σελίδας",
+ "abusefilter-edit-builder-vars-page-age": "Ηλικία σελίδας (σε δευτερόλεπτα)",
"abusefilter-edit-builder-vars-movedfrom-id": "Σελίδα ταυτότητα της σελίδας προς μετακίνηση",
"abusefilter-edit-builder-vars-movedfrom-ns": "Χώροι ονομάτων της σελίδας-πηγής προς μετακίνηση",
- "abusefilter-edit-builder-vars-movedfrom-text": "Τίτλος της μετακίνηησης της σελίδας πηγής",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Πλήρης τίτλος της μετακινούμενης σελίδας πηγής",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Τίτλος της μετακίνηησης της σελίδας πηγής",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Πλήρης τίτλος της μετακινούμενης σελίδας πηγής",
"abusefilter-edit-builder-vars-movedto-id": "Ταυτότητα σελίδας του προορισμού της μετακινούμενης σελίδας",
"abusefilter-edit-builder-vars-movedto-ns": "Περιοχή του προορισμού της μετακινούμενης σελίδας",
- "abusefilter-edit-builder-vars-movedto-text": "Τίτλος της σελίδας προορισμού",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Πλήρης τίτλος του προορισμού της μετακίνησης της σελίδας",
+ "abusefilter-edit-builder-vars-movedto-title": "Τίτλος της σελίδας προορισμού",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Πλήρης τίτλος του προορισμού της μετακίνησης της σελίδας",
"abusefilter-edit-builder-vars-user-editcount": "Αριθμός επεξεργασιών χρήστη",
"abusefilter-edit-builder-vars-user-age": "Ηλικία του λογαριασμού χρήστη",
"abusefilter-edit-builder-vars-user-name": "Όνομα του λογαριασμού χρήστη",
@@ -275,7 +298,7 @@
"abusefilter-edit-builder-vars-all-links": "Όλες οι εξωτερικές συνδέσεις στο νέο κείμενο",
"abusefilter-edit-builder-vars-added-links": "Όλες οι εξωτερικές συνδέσεις που προστέθηκαν στην επεξεργασία",
"abusefilter-edit-builder-vars-removed-links": "Όλες οι εξωτερικές συνδέσεις που αφαιρέθηκαν στην επεξεργασία",
- "abusefilter-edit-builder-vars-old-text": "Παλιο βικικείμενο σελίδας, πριν την επεξεργασία",
+ "abusefilter-edit-builder-vars-old-text": "Παλιό βικικείμενο σελίδας, πριν την επεξεργασία (δεν είναι πλέον σε χρήση)",
"abusefilter-edit-builder-vars-new-text": "Νέα σελίδα βικικειμένου, μετά την επεξεργασία",
"abusefilter-edit-builder-vars-new-text-stripped": "Νέο κείμενο σελίδας, γυμνό από κάθε σημείωση (markup)",
"abusefilter-edit-builder-vars-new-html": "Λεξιανάλυση της πηγής HTML της νέας αναθεώρησης",
@@ -285,7 +308,7 @@
"abusefilter-edit-builder-vars-restrictions-upload": "Προστασία ανεβάσματος του αρχείου",
"abusefilter-edit-builder-vars-old-text-stripped": "Παλιό κείμενο σελίδας, χώρις κάποια σύνταξη markup",
"abusefilter-edit-builder-vars-old-links": "Σύνδεσμοι στην σελίδα πριν από την επεξεργασία",
- "abusefilter-edit-builder-vars-old-html": "Παλιό βικικείμενο σελίδας, λεξιαναλυμένο σε HTML",
+ "abusefilter-edit-builder-vars-old-html": "Παλιό βικικείμενο σελίδας, λεξιαναλυμένο σε HTML (δεν είναι πλέον σε χρήση)",
"abusefilter-edit-builder-vars-minor-edit": "Εάν ή όχι η επεξεργασία σημειώνεται ως μικροεπεξεργασία",
"abusefilter-edit-builder-vars-file-sha1": "SHA1 hash των περιεχομένων του αρχείου",
"abusefilter-edit-builder-vars-file-size": "Το μέγεθος του αρχείου σε bytes",
@@ -324,7 +347,8 @@
"abusefilter-exception-regexfailure": "Σφάλμα στην κανονική έκφραση \"$3\" στον χαρακτήρα $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Παράνομη τοπική υπερκάλυψη της ενσωματωμένης μεταβλητής \"$2\" στον χαρακτήρα $1.",
"abusefilter-exception-outofbounds": "Η ζήτηση μη υπαρχόντων αντικειμένων λίστας $2 (μέγεθος λίστας = $3) στο χαρακτήρα $1.",
- "abusefilter-exception-notlist": "Αίτηση για ένα αντικείμενο μέσα σε κάτι διαφορετικό από πίνακα στον χαρακτήρα $1.",
+ "abusefilter-exception-notarray": "Αίτηση για ένα αντικείμενο μέσα σε κάτι διαφορετικό από πίνακα στον χαρακτήρα $1.",
+ "abusefilter-exception-disabledvar": "Η μεταβλητή $2 στον χαρακτήρα $1 δεν χρησιμοποιείται πλέον.",
"abusefilter-action-tag": "Ετικέτα",
"abusefilter-action-throttle": "Εμπόδιση",
"abusefilter-action-warn": "Προειδοποίηση",
@@ -340,8 +364,9 @@
"abusefilter-revert-periodstart": "Έναρξη περιόδου:",
"abusefilter-revert-periodend": "Λήξη περιόδου:",
"abusefilter-revert-search": "Επιλογή ενεργειών",
- "abusefilter-revert-filter": "Φίλτρο:",
+ "abusefilter-revert-filter": "Ταυτότητα φίλτρου:",
"abusefilter-revert-preview-intro": "Παρακάτω είναι οι ενέργειες που πάρθηκαν από το φίλτρο καταχρήσεων που θα αναστραφούν με αυτή την ενέργεια.\nΠαρακαλώ ελέγξτε τις προσεκτικά, και πατήστε \"{{int:abusefilter-revert-confirm}}\" για να ολοκληρώσετε την επιλογή σας.",
+ "abusefilter-revert-confirm-legend": "Επιβεβαίωση της αναστροφής",
"abusefilter-revert-confirm": "Επιβεβαίωση",
"abusefilter-revert-success": "Έχετε αναστρέψει όλες τις ενέργειες που πάρθηκαν από το φίλτρο καταχρήσεων εξαιτίας του [[Special:AbuseFilter/$1|φίλτρου $2]].",
"abusefilter-revert-reason": "Αυτόματη μεταστροφή όλων των δράσεων που ανέλαβε το φίλτρο καταχρήσεων εξ αιτίας του φίλτρου $1.\nΗ αιτία που δόθηκε: $2",
@@ -353,11 +378,19 @@
"abusefilter-test-submit": "Δοκιμή",
"abusefilter-test-load": "Φορτώστε",
"abusefilter-test-user": "Αλλαγές από τον χρήστη:",
+ "abusefilter-test-nobots": "Απόκρυψη επεξεργασιών από ρομπότ",
"abusefilter-test-period-start": "Αλλαγές που έγιναν μετά:",
"abusefilter-test-period-end": "Αλλαγές που έγιναν πριν:",
"abusefilter-test-page": "Αλλαγές στις οποίες υποβλήθηκε η σελίδα:",
"abusefilter-test-shownegative": "Εμφάνιση αλλαγών που δεν αντιστοιχούν στο φίλτρο",
"abusefilter-test-syntaxerr": "Το φίλτρο που δώσατε περιέχει ένα συντακτικό λάθος.\nΜπορείτε να λάβετε μια πλήρη εξήγηση πατώντας το κουμπί \"{{int:abusefilter-edit-check}}\".",
+ "abusefilter-test-action": "Τύπος ενέργειας",
+ "abusefilter-test-search-type-all": "Όλες οι ενέργειες",
+ "abusefilter-test-search-type-edit": "Επεξεργασίες",
+ "abusefilter-test-search-type-move": "Κινήσεις",
+ "abusefilter-test-search-type-delete": "Διαγραφές",
+ "abusefilter-test-search-type-upload": "Επιφορτώσεις",
+ "abusefilter-test-search-type-createaccount": "Δημιουργίες λογαριασμών",
"abusefilter-changeslist-examine": "εξετάστε",
"abusefilter-examine": "Εξέταση μεμονωμένων αλλαγών",
"abusefilter-examine-intro": "Αυτή η σελίδα σας επιτρέπει να εξετάσετε μεταβλητές που έχουν παραχθεί από Φίλτρο Καταχρήσεων για μία μεμονωμένη αλλαγή και να την εξετάσετε κόντρα σε φίλτρα.",
@@ -384,7 +417,6 @@
"abusefilter-topnav-import": "Εισαγωγή φίλτρου",
"abusefilter-log-name": "Ιστορικό Φίλτρου Καταχρήσεων",
"abusefilter-log-header": "Αυτή η καταγραφή εμφανίζει μια σύνοψη από αλλαγές που έγιναν στα φίλτρα.\nΓια πλήρεις λεπτομέρειες, δείτε [[Special:AbuseFilter/history|τη λίστα]] των πρόσφατων αλλαγών φίλτρου.",
- "abusefilter-log-entry-modify": "τροποποιημένη $1 ($2)",
"abusefilter-log-noresults": "Κανένα αποτέλεσμα",
"abusefilter-diff-title": "Διαφορές μεταξύ των εκδόσεων",
"abusefilter-diff-item": "Αντικείμενο",
@@ -397,9 +429,5 @@
"abusefilter-diff-next": "Νεότερη αλλαγή",
"abusefilter-import-intro": "Μπορείτε να χρησιμοποιήσετε αυτή την διεπιφάνεια για να εισαγάγετε φίλτρα από άλλα wiki.\nΣτο wiki προέλευσης, κάντε κλικ στο «{{int:abusefilter-edit-export}}» κάτω από το «{{int:abusefilter-edit-tools}}» στην διεπιφάνεια επεξεργασίας.\nΑντιγράψτε από το πλαίσιο κειμένου που εμφανίζεται και επικολλήστε το σε αυτό το πλαίσιο κειμένου και μετά κάντε κλικ στο «{{int:abusefilter-import-submit}}».",
"abusefilter-import-submit": "Εισαγωγή δεδομένων",
- "abusefilter-group-default": "Προεπιλογή",
- "apihelp-abusefilterchecksyntax-param-filter": "Το πλήρες φίλτρου κειμένου για να ελέγξετε τη σύνταξη.",
- "apihelp-abusefilterchecksyntax-example-1": "Ελέγξτε τη σύνταξη ενός έγκυρου φίλτρου",
- "apihelp-abusefilterchecksyntax-example-2": "Ελέγξτε τη σύνταξη ενός μη έγκυρου φίλτρου",
- "apihelp-abusefilterevalexpression-param-expression": "Η έκφραση προς αξιολόγηση."
+ "abusefilter-group-default": "Προεπιλογή"
}
diff --git a/AbuseFilter/i18n/en.json b/AbuseFilter/i18n/en.json
index b30040e8..9cd8e22e 100644
--- a/AbuseFilter/i18n/en.json
+++ b/AbuseFilter/i18n/en.json
@@ -9,7 +9,7 @@
"abusefilter": "Abuse filter configuration",
"abuselog": "Abuse log",
"abusefilter-intro": "Welcome to the Abuse Filter management interface.\nThe Abuse Filter is an automated software mechanism of applying automatic heuristics to all actions.\nThis interface shows a list of defined filters, and allows them to be modified.",
- "abusefilter-mustbeeditor": "For security reasons, only users with the right to modify abuse filters may use this interface.",
+ "abusefilter-mustviewprivateoredit": "For security reasons, only users with the right to view private abuse filters or modify filters may use this interface.",
"abusefilter-warning": "'''Warning:''' This action has been automatically identified as harmful.\nUnconstructive actions will be quickly reverted,\nand egregious or repeated unconstructive editing will result in your account or IP address being blocked.\nIf you believe this action to be constructive, you may submit it again to confirm it.\nA brief description of the abuse rule which your action matched is: $1",
"abusefilter-disallowed": "This action has been automatically identified as harmful, and therefore disallowed.\nIf you believe your action was constructive, please inform an administrator of what you were trying to do.\nA brief description of the abuse rule which your action matched is: $1",
"abusefilter-blocked-display": "This action has been automatically identified as harmful,\nand you have been prevented from executing it.\nIn addition, to protect {{SITENAME}}, your user account and all associated IP addresses have been blocked from editing.\nIf this has occurred in error, please contact an administrator.\nA brief description of the abuse rule which your action matched is: $1",
@@ -24,6 +24,7 @@
"right-abusefilter-log": "View the abuse log",
"right-abusefilter-log-detail": "View detailed abuse log entries",
"right-abusefilter-private": "View private data in the abuse log",
+ "right-abusefilter-private-log": "View the AbuseFilter private details access log",
"right-abusefilter-modify-restricted": "Modify abuse filters with restricted actions",
"right-abusefilter-revert": "Revert all changes by a given abuse filter",
"right-abusefilter-view-private": "View abuse filters marked as private",
@@ -36,6 +37,7 @@
"action-abusefilter-log": "view the abuse log",
"action-abusefilter-log-detail": "view detailed abuse log entries",
"action-abusefilter-private": "view private data in the abuse log",
+ "action-abusefilter-private-log": "view the AbuseFilter private details access log",
"action-abusefilter-modify-restricted": "modify abuse filters with restricted actions",
"action-abusefilter-revert": "revert all changes by a given abuse filter",
"action-abusefilter-view-private": "view abuse filters marked as private",
@@ -47,10 +49,19 @@
"abusefilter-log-search-filter": "Filter IDs (separate with pipes):",
"abusefilter-log-search-title": "Title:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Impact:",
+ "abusefilter-log-search-impact-all": "All actions",
+ "abusefilter-log-search-impact-saved": "Saved changes only",
+ "abusefilter-log-search-impact-not-saved": "Without saved changes",
"abusefilter-log-search-entries-label": "Visibility:",
"abusefilter-log-search-entries-all": "All entries",
"abusefilter-log-search-entries-hidden": "Hidden entries only",
"abusefilter-log-search-entries-visible": "Visible entries only",
+ "abusefilter-log-search-action-label": "Triggering action:",
+ "abusefilter-log-search-action-other": "Other",
+ "abusefilter-log-search-action-any": "Any",
+ "abusefilter-log-search-action-taken-label": "Action taken:",
+ "abusefilter-log-search-action-taken-any": "Any",
"abusefilter-log-search-submit": "Search",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|triggered}} an abuse filter, {{GENDER:$8|performing}} the action \"$3\" on $4.\nActions taken: $5;\nFilter description: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|triggered}} an abuse filter, {{GENDER:$8|performing}} the action \"$3\" on $4.\nActions taken: $5;\nFilter description: $6 ($7)",
@@ -64,15 +75,19 @@
"abusefilter-log-details-var": "Variable",
"abusefilter-log-details-val": "Value",
"abusefilter-log-details-vars": "Action parameters",
- "abusefilter-log-details-private": "Private data",
+ "abusefilter-log-details-private": "Private log details",
"abusefilter-log-details-ip": "Originating IP address",
+ "abusefilter-log-details-checkuser": "Check user",
"abusefilter-log-noactions": "none",
"abusefilter-log-details-diff": "Changes made in edit",
"abusefilter-log-linkoncontribs": "abuse log",
"abusefilter-log-linkoncontribs-text": "Abuse log for {{GENDER:$1|this user}}",
+ "abusefilter-log-linkonhistory": "view abuse log",
+ "abusefilter-log-linkonhistory-text": "View abuse log for this page",
"abusefilter-log-hidden": "(entry hidden)",
"abusefilter-log-hidden-implicit": "(hidden because revision has been deleted)",
"abusefilter-log-cannot-see-details": "You do not have permission to see details of this entry.",
+ "abusefilter-log-cannot-see-private-details": "You do not have permission to see private details of this entry.",
"abusefilter-log-nonexistent": "An entry with the provided ID does not exist.",
"abusefilter-log-details-hidden": "You cannot view the details for this entry because it is hidden from public view.",
"abusefilter-log-details-hidden-implicit": "You cannot view the details for this entry because its associated revision is hidden from public view.",
@@ -81,13 +96,21 @@
"abusefilter-log-hide-id": "Log entry ID:",
"abusefilter-log-hide-hidden": "Hide this entry from public view",
"abusefilter-log-hide-reason": "Reason:",
+ "abusefilter-log-hide-reason-other": "Other/additional reason:",
"abusefilter-log-hide-forbidden": "You do not have permission to hide abuse log entries.",
- "abusefilter-logentry-suppress": "hid \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "unhid \"[[$1]]\"",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|hid}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|unhid}} $3",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|triggered}} $4, {{GENDER:$2|performing}} the action \"$5\" on $3. Actions taken: $6 ($7)",
+ "log-action-filter-abusefilter": "Type of filter change:",
+ "log-action-filter-abusefilter-create": "New filter creation",
+ "log-action-filter-abusefilter-modify": "Filter modification",
+ "log-action-filter-suppress-abuselog": "Abuse log suppression",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|accessed}} private details for $3",
+ "abusefilterprivatedetails-log-name": "AbuseFilter private details access log",
"abusefilter-management": "Abuse filter management",
"abusefilter-list": "All filters",
"abusefilter-list-id": "Filter ID",
+ "abusefilter-list-pattern": "Pattern",
"abusefilter-list-status": "Status",
"abusefilter-list-public": "Public description",
"abusefilter-list-consequences": "Consequences",
@@ -103,6 +126,7 @@
"abusefilter-enabled": "Enabled",
"abusefilter-deleted": "Deleted",
"abusefilter-disabled": "Disabled",
+ "abusefilter-throttled": "throttled",
"abusefilter-hitcount": "$1 {{PLURAL:$1|hit|hits}}",
"abusefilter-new": "Create a new filter",
"abusefilter-return": "Return to filter management",
@@ -116,8 +140,16 @@
"abusefilter-list-options-scope-local": "Local rules only",
"abusefilter-list-options-scope-global": "Global rules only",
"abusefilter-list-options-scope-all": "Local and global rules",
- "abusefilter-list-options-disabled": "Disabled filters:",
+ "abusefilter-list-options-further-options": "Further options:",
"abusefilter-list-options-hidedisabled": "Hide disabled filters",
+ "abusefilter-list-options-hideprivate": "Hide private filters",
+ "abusefilter-list-options-searchfield": "Search within rules:",
+ "abusefilter-list-options-searchpattern": "Insert a pattern",
+ "abusefilter-list-options-searchoptions": "Search mode:",
+ "abusefilter-list-options-search-like": "Plain query",
+ "abusefilter-list-options-search-rlike": "Regular expression",
+ "abusefilter-list-options-search-irlike": "Case-insensitive regular expression",
+ "abusefilter-list-regexerror": "An error has occurred while searching: Regular expression syntax error.",
"abusefilter-list-options-submit": "Update",
"abusefilter-tools-text": "Here are some tools which may be useful in formulating and debugging abuse filters.",
"abusefilter-tools-expr": "Expression tester",
@@ -132,6 +164,7 @@
"abusefilter-edit": "Editing abuse filter",
"abusefilter-edit-subtitle": "Editing filter $1",
"abusefilter-edit-subtitle-new": "Creating filter",
+ "abusefilter-edit-token-not-match": "The edit wasn't saved! Please save again.",
"abusefilter-edit-oldwarning": "<strong>You are editing an old version of this filter.\nThe statistics quoted are for the most recent version of the filter.\nIf you save your changes, you will overwrite all changes since the revision you are editing.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Return to this filter's history]].",
"abusefilter-edit-status-label": "Statistics:",
"abusefilter-edit-status": "Of the last $1 {{PLURAL:$1|action|actions}}, this filter has matched $2 ($3%).",
@@ -140,7 +173,9 @@
"abusefilter-edit-new": "New filter",
"abusefilter-edit-save": "Save filter",
"abusefilter-edit-id": "Filter ID:",
+ "abusefilter-edit-switch-editor": "Switch editor",
"abusefilter-edit-description": "Description:\n:''(publicly viewable)''",
+ "abusefilter-edit-field-description": "description",
"abusefilter-edit-group": "Filter group:",
"abusefilter-edit-flags": "Flags:",
"abusefilter-edit-enabled": "Enable this filter",
@@ -148,6 +183,7 @@
"abusefilter-edit-hidden": "Hide details of this filter from public view",
"abusefilter-edit-global": "Global filter",
"abusefilter-edit-rules": "Conditions:",
+ "abusefilter-edit-field-conditions": "conditions",
"abusefilter-edit-notes": "Notes:",
"abusefilter-edit-lastmod": "Filter last modified:",
"abusefilter-edit-lastmod-text": "$1 by $2",
@@ -158,25 +194,50 @@
"abusefilter-edit-action-blockautopromote": "Revoke the user's autoconfirmed status",
"abusefilter-edit-action-degroup": "Remove the user from all privileged groups",
"abusefilter-edit-action-block": "Block the user and/or IP address from editing",
+ "abusefilter-edit-action-blocktalk": "Block the user and/or IP address from editing their own talk page",
"abusefilter-edit-action-throttle": "Trigger actions only if the user trips a rate limit",
- "abusefilter-edit-action-rangeblock": "Block the /16 range from which the user originates",
+ "abusefilter-edit-action-rangeblock": "Block the respective IP range from which the user originates",
"abusefilter-edit-action-tag": "Tag the edit for further review",
"abusefilter-edit-throttle-count": "Number of actions to allow:",
- "abusefilter-edit-throttle-period": "Period of time:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|second|seconds}}",
- "abusefilter-edit-throttle-groups": "Group throttle by:\n:''(one per line, combine with commas)''",
+ "abusefilter-edit-throttle-period": "Period of time (in seconds):",
+ "abusefilter-edit-throttle-groups": "Group throttle by:",
+ "abusefilter-edit-throttle-hidden-placeholder": "Split with commas to join with AND, and with linebreaks to join with OR",
+ "abusefilter-edit-throttle-placeholder": "Split with commas to join with AND, and insert one by one to join with OR",
+ "abusefilter-throttle-ip": "IP address",
+ "abusefilter-throttle-user": "user account",
+ "abusefilter-throttle-range": "/16 range",
+ "abusefilter-throttle-creationdate": "account creation date",
+ "abusefilter-throttle-editcount": "edit count",
+ "abusefilter-throttle-site": "whole site",
+ "abusefilter-throttle-page": "page",
+ "abusefilter-throttle-details": "Allow $1 {{PLURAL:$1|action|actions}} every $2 {{PLURAL:$2|second|seconds}}, group throttle by: $3",
"abusefilter-edit-warn-message": "System message to use for warning:",
"abusefilter-edit-warn-other": "Other message",
- "abusefilter-edit-warn-other-label": "Page name of other message:\n:''(without MediaWiki prefix)''",
+ "abusefilter-edit-warn-other-label": "Page name of other message:\n:''(without \"MediaWiki:\" prefix)''",
"abusefilter-edit-warn-actions": "Actions:",
- "abusefilter-edit-warn-preview": "Preview selected message",
+ "abusefilter-edit-warn-preview": "Show/Hide preview of selected message",
"abusefilter-edit-warn-edit": "Create/Edit selected message",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Tags]] to apply (one per line):",
+ "abusefilter-edit-disallow-message": "System message to use for disallowing:",
+ "abusefilter-edit-disallow-other": "Other message",
+ "abusefilter-edit-disallow-other-label": "Page name of other message:\n:''(without \"MediaWiki:\" prefix)''",
+ "abusefilter-edit-disallow-actions": "Actions:",
+ "abusefilter-edit-disallow-preview": "Show/Hide preview of selected message",
+ "abusefilter-edit-disallow-edit": "Create/Edit selected message",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Tags]] to apply:",
+ "abusefilter-edit-tag-placeholder": "Add tags (one by one or comma separated)",
+ "abusefilter-edit-tag-hidden-placeholder": "Add tags (comma separated)",
+ "abusefilter-edit-block-anon-durations": "Block duration for anonymous users:",
+ "abusefilter-edit-block-user-durations": "Block duration for registered users:",
+ "abusefilter-block-anon": "Block anonymous users",
+ "abusefilter-block-user": "block registered users",
+ "abusefilter-block-talk": "talk page blocked",
"abusefilter-edit-denied": "You may not view details of this filter, because it is hidden from public view.",
"abusefilter-edit-main": "Filter parameters",
"abusefilter-edit-done-subtitle": "Filter edited",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Your changes]] to [[Special:AbuseFilter/$1|filter $3]] have been saved.",
"abusefilter-edit-badsyntax": "There is a syntax error in the filter you specified.\nThe output from the parser was: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "The following fields are required and must be filled: $1",
+ "abusefilter-edit-deleting-enabled": "You cannot mark an active filter as deleted.",
"abusefilter-edit-restricted": "You cannot edit this filter, because it contains one or more restricted actions.\nPlease ask a user with permission to add restricted actions to make the change for you.",
"abusefilter-edit-viewhistory": "View this filter's history",
"abusefilter-edit-history": "History:",
@@ -188,10 +249,15 @@
"abusefilter-edit-export": "Export this filter to another wiki",
"abusefilter-edit-syntaxok": "No syntax errors detected.",
"abusefilter-edit-syntaxerr": "Syntax error detected: $1",
- "abusefilter-edit-bad-tags": "One or more of the tags you specified is not valid.\nTags should be short, they should not contain special characters, and they should not be reserved by other software. Try choosing a new tag name",
+ "abusefilter-edit-bad-tags": "One or more of the tags you specified is not valid.\nTags should be short, they must not contain special characters, and they must not be reserved by other software. Try choosing a new tag name.",
"abusefilter-edit-notallowed": "You are not permitted to create or edit abuse filters",
"abusefilter-edit-notallowed-global": "You are not permitted to create or edit global abuse filters",
"abusefilter-edit-notallowed-global-custom-msg": "Custom warning messages are not supported for global filters",
+ "abusefilter-edit-invalid-throttlecount": "The throttle action count must be a positive integer.",
+ "abusefilter-edit-invalid-throttleperiod": "The throttle period must be a positive integer.",
+ "abusefilter-edit-empty-throttlegroups": "At least one throttle group must be selected.",
+ "abusefilter-edit-duplicated-throttlegroups": "Throttle groups cannot have duplicates.",
+ "abusefilter-edit-invalid-throttlegroups": "The specified throttle groups are not valid.",
"abusefilter-edit-builder-select": "Select an option to add it at the cursor",
"abusefilter-edit-builder-group-op-arithmetic": "Arithmetic operators",
"abusefilter-edit-builder-op-arithmetic-addition": "Addition (+)",
@@ -201,8 +267,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Modulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Power (**)",
"abusefilter-edit-builder-group-op-comparison": "Comparison operators",
- "abusefilter-edit-builder-op-comparison-equal": "Equal to (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Not equal to (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Value equal to (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Value and type equal to (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Value not equal to (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Value and type not equal to (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Less than (<)",
"abusefilter-edit-builder-op-comparison-gt": "Greater than (>)",
"abusefilter-edit-builder-op-comparison-lte": "Less than or equal to (<=)",
@@ -226,23 +294,30 @@
"abusefilter-edit-builder-funcs-lcase": "To lower case (lcase)",
"abusefilter-edit-builder-funcs-ucase": "To upper case (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normalize confusable characters (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normalize and search a string for multiple substrings in OR mode (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Normalize and search a string for multiple substrings in AND mode (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Remove double-characters (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Special characters / total characters (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normalize (norm)",
"abusefilter-edit-builder-funcs-count": "Number of times string X appears in string Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Number of times regex X appears in string Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Array of regex matches within a text for each capturing group (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Remove whitespace (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Remove special characters (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Is IP in range? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Search string for multiple substrings (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Search string for multiple substrings in OR mode. (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Search string for multiple substrings in AND mode. (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Check if a given argument is equal (===) to any of the following arguments (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Substring (substr)",
"abusefilter-edit-builder-funcs-strpos": "Position of substring in string (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Replace substring with string (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Escape string as literal in regex (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Set variable (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Normalize HTML entities into unicode characters (sanitize)",
"abusefilter-edit-builder-group-vars": "Variables",
"abusefilter-edit-builder-vars-accountname": "Account name (on account creation)",
"abusefilter-edit-builder-vars-timestamp": "Unix timestamp of change",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Timestamp of the log",
"abusefilter-edit-builder-vars-action": "Action",
"abusefilter-edit-builder-vars-addedlines": "Lines added in edit",
"abusefilter-edit-builder-vars-delta": "Size change in edit",
@@ -253,19 +328,21 @@
"abusefilter-edit-builder-vars-new-content-model": "New content model",
"abusefilter-edit-builder-vars-removedlines": "Lines removed in edit",
"abusefilter-edit-builder-vars-summary": "Edit summary/reason",
- "abusefilter-edit-builder-vars-article-id": "Page ID",
- "abusefilter-edit-builder-vars-article-ns": "Page namespace",
- "abusefilter-edit-builder-vars-article-text": "Page title (without namespace)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Full page title",
- "abusefilter-edit-builder-vars-article-views": "Page views",
+ "abusefilter-edit-builder-vars-page-id": "Page ID",
+ "abusefilter-edit-builder-vars-page-ns": "Page namespace",
+ "abusefilter-edit-builder-vars-page-title": "Page title (without namespace)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Full page title",
+ "abusefilter-edit-builder-vars-page-age": "Page age (in seconds)",
"abusefilter-edit-builder-vars-movedfrom-id": "Page ID of move source page",
"abusefilter-edit-builder-vars-movedfrom-ns": "Namespace of move source page",
- "abusefilter-edit-builder-vars-movedfrom-text": "Title of move source page",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Full title of move source page",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Title of move source page",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Full title of move source page",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Move source page age (in seconds)",
"abusefilter-edit-builder-vars-movedto-id": "Page ID of move destination page",
"abusefilter-edit-builder-vars-movedto-ns": "Namespace of move destination page",
- "abusefilter-edit-builder-vars-movedto-text": "Title of move destination page",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Full title of move destination page",
+ "abusefilter-edit-builder-vars-movedto-title": "Title of move destination page",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Full title of move destination page",
+ "abusefilter-edit-builder-vars-movedto-age": "Move destination page age (in seconds)",
"abusefilter-edit-builder-vars-user-editcount": "Edit count of the user",
"abusefilter-edit-builder-vars-user-age": "Age of the user account",
"abusefilter-edit-builder-vars-user-name": "Name of the user account",
@@ -275,10 +352,14 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "Time email address was confirmed",
"abusefilter-edit-builder-vars-recent-contributors": "Last ten users to contribute to the page",
"abusefilter-edit-builder-vars-first-contributor": "First user to contribute to the page",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Last ten users to contribute to move source page",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "First user to contribute to move source page",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Last ten users to contribute to move destination page",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "First user to contribute to move destination page",
"abusefilter-edit-builder-vars-all-links": "All external links in the new text",
"abusefilter-edit-builder-vars-added-links": "All external links added in the edit",
"abusefilter-edit-builder-vars-removed-links": "All external links removed in the edit",
- "abusefilter-edit-builder-vars-old-text": "Old page wikitext, before the edit",
+ "abusefilter-edit-builder-vars-old-text": "Old page wikitext, before the edit (no more in use)",
"abusefilter-edit-builder-vars-new-text": "New page wikitext, after the edit",
"abusefilter-edit-builder-vars-new-pst": "New page wikitext, pre-save transformed",
"abusefilter-edit-builder-vars-diff-pst": "Unified diff of changes made by edit, pre-save transformed",
@@ -289,9 +370,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "Move protection level of the page",
"abusefilter-edit-builder-vars-restrictions-create": "Create protection of the page",
"abusefilter-edit-builder-vars-restrictions-upload": "Upload protection of the file",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Edit protection level of move source page",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Move protection level of move source page",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Create protection of move source page",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Upload protection of move source file",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Edit protection level of move destination page",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Move protection level of move destination page",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Create protection of move destination page",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Upload protection of move destination file",
"abusefilter-edit-builder-vars-old-text-stripped": "Old page text, stripped of any markup",
"abusefilter-edit-builder-vars-old-links": "Links in the page, before the edit",
- "abusefilter-edit-builder-vars-old-html": "Old page wikitext, parsed into HTML",
+ "abusefilter-edit-builder-vars-old-html": "Old page wikitext, parsed into HTML (no more in use)",
"abusefilter-edit-builder-vars-minor-edit": "Whether or not the edit is marked as minor",
"abusefilter-edit-builder-vars-file-sha1": "SHA1 hash of file contents",
"abusefilter-edit-builder-vars-file-size": "Size of the file in bytes",
@@ -318,6 +407,7 @@
"abusefilter-history-filterid": "Filter",
"abusefilter-history-select-legend": "Refine search",
"abusefilter-history-select-user": "User:",
+ "abusefilter-history-select-filter": "Filter ID:",
"abusefilter-history-select-submit": "Refine",
"abusefilter-history-diff": "Changes",
"abusefilter-history-error-hidden": "The filter you requested is hidden, and you cannot view its history.",
@@ -328,14 +418,17 @@
"abusefilter-exception-unclosedstring": "Unclosed string starting at character $1.",
"abusefilter-exception-invalidoperator": "Invalid operator \"$2\" at character $1.",
"abusefilter-exception-unrecognisedtoken": "Unrecognized token \"$2\" at character $1.",
- "abusefilter-exception-noparams": "No parameters given to function \"$2\" at character $1.",
+ "abusefilter-exception-noparams": "No parameters given to function \"$2\" at character $1.\nExpected $3 {{PLURAL:$3|argument|arguments}}.",
"abusefilter-exception-dividebyzero": "Illegal attempt to divide $2 by zero at character $1.",
"abusefilter-exception-unrecognisedvar": "Unrecognized variable $2 at character $1.",
"abusefilter-exception-notenoughargs": "Not enough arguments to function $2 called at character $1.\nExpected $3 {{PLURAL:$3|argument|arguments}}, got $4",
- "abusefilter-exception-regexfailure": "Error in regular expression \"$3\" at character $1: \"$2\"",
+ "abusefilter-exception-regexfailure": "Error in regular expression \"$2\" at character $1.",
"abusefilter-exception-overridebuiltin": "Illegal overriding of built-in variable \"$2\" at character $1.",
- "abusefilter-exception-outofbounds": "Requesting non-existent list item $2 (list size = $3) at character $1.",
- "abusefilter-exception-notlist": "Requesting array item of non-array at character $1.",
+ "abusefilter-exception-outofbounds": "Requesting non-existent array item $2 (array size = $3) at character $1.",
+ "abusefilter-exception-notarray": "Requesting array item of non-array at character $1.",
+ "abusefilter-exception-unclosedcomment": "Unclosed comment at character $1.",
+ "abusefilter-exception-invalidiprange": "Invalid IP range \"$2\" provided at character $1.",
+ "abusefilter-exception-disabledvar": "Variable $2 at character $1 is no more in use.",
"abusefilter-action-tag": "Tag",
"abusefilter-action-throttle": "Throttle",
"abusefilter-action-warn": "Warn",
@@ -351,8 +444,9 @@
"abusefilter-revert-periodstart": "Period start:",
"abusefilter-revert-periodend": "Period end:",
"abusefilter-revert-search": "Select actions",
- "abusefilter-revert-filter": "Filter:",
+ "abusefilter-revert-filter": "Filter ID:",
"abusefilter-revert-preview-intro": "Below are the actions taken by the abuse filter that will be reverted by this action.\nPlease check them carefully, and click \"{{int:abusefilter-revert-confirm}}\" to confirm your selection.",
+ "abusefilter-revert-confirm-legend": "Confirm the revert",
"abusefilter-revert-confirm": "Confirm",
"abusefilter-revert-success": "You have reverted all actions taken by the abuse filter due to [[Special:AbuseFilter/$1|filter $2]].",
"abusefilter-revert-reason": "Automatic revert of all actions taken by the abuse filter due to filter $1.\nReason given: $2",
@@ -364,12 +458,20 @@
"abusefilter-test-submit": "Test",
"abusefilter-test-load": "Load",
"abusefilter-test-user": "Changes by user:",
+ "abusefilter-test-nobots": "Hide bot edits",
"abusefilter-test-period-start": "Changes made after:",
"abusefilter-test-period-end": "Changes made before:",
"abusefilter-test-page": "Changes made to page:",
"abusefilter-test-shownegative": "Show changes that do not match the filter",
"abusefilter-test-syntaxerr": "The filter you entered contained a syntax error.\nYou can receive a full explanation by clicking the \"{{int:abusefilter-edit-check}}\" button.",
"abusefilter-test-badtitle": "The page title you entered was invalid. It may contain one or more characters that cannot be used in titles.",
+ "abusefilter-test-action": "Action type:",
+ "abusefilter-test-search-type-all": "All actions",
+ "abusefilter-test-search-type-edit": "Edits",
+ "abusefilter-test-search-type-move": "Moves",
+ "abusefilter-test-search-type-delete": "Deletions",
+ "abusefilter-test-search-type-upload": "Uploads",
+ "abusefilter-test-search-type-createaccount": "Account creations",
"abusefilter-changeslist-examine": "examine",
"abusefilter-examine": "Examine individual changes",
"abusefilter-examine-intro": "This page allows you to examine the variables generated by the Abuse Filter for an individual change, and test it against filters.",
@@ -396,6 +498,7 @@
"abusefilter-topnav-import": "Import filter",
"abusefilter-log-name": "Abuse filter log",
"abusefilter-log-header": "This log shows a summary of changes made to filters.\nFor full details, see [[Special:AbuseFilter/history|the list]] of recent filter changes.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|created}} $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|modified}} $4 ($5)",
"abusefilter-log-noresults": "No results",
"abusefilter-diff-title": "Differences between versions",
@@ -411,49 +514,16 @@
"abusefilter-import-submit": "Import data",
"abusefilter-group-default": "Default",
"abusefilter-http-error": "An HTTP error occurred: $1.",
- "apihelp-abusefiltercheckmatch-description": "Check to see if an AbuseFilter matches a set of variables, editor logged AbuseFilter event.\n\nvars, rcid or logid is required however only one may be used.",
- "apihelp-abusefiltercheckmatch-summary": "Check to see if an AbuseFilter matches a set of variables, editor logged AbuseFilter event.",
- "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid or logid is required however only one may be used.",
- "apihelp-abusefiltercheckmatch-param-filter": "The full filter text to check for a match.",
- "apihelp-abusefiltercheckmatch-param-vars": "JSON encoded array of variables to test against.",
- "apihelp-abusefiltercheckmatch-param-rcid": "Recent change ID to check against.",
- "apihelp-abusefiltercheckmatch-param-logid": "Abuse filter log ID to check against.",
- "apihelp-abusefiltercheckmatch-example-1": "Test if recent change ID 15 matches a simple filter",
- "apihelp-abusefilterchecksyntax-description": "Check syntax of an AbuseFilter filter.",
- "apihelp-abusefilterchecksyntax-summary": "Check syntax of an AbuseFilter filter.",
- "apihelp-abusefilterchecksyntax-param-filter": "The full filter text to check syntax on.",
- "apihelp-abusefilterchecksyntax-example-1": "Check syntax of a valid filter",
- "apihelp-abusefilterchecksyntax-example-2": "Check syntax of an invalid filter",
- "apihelp-abusefilterevalexpression-description": "Evaluates an AbuseFilter expression.",
- "apihelp-abusefilterevalexpression-summary": "Evaluates an AbuseFilter expression.",
- "apihelp-abusefilterevalexpression-param-expression": "The expression to evaluate.",
- "apihelp-abusefilterevalexpression-example-1": "Evaluate a simple expression",
- "apihelp-abusefilterunblockautopromote-description": "Unblocks a user from receiving autopromotions due to an abusefilter consequence.",
- "apihelp-abusefilterunblockautopromote-summary": "Unblocks a user from receiving autopromotions due to an abusefilter consequence.",
- "apihelp-abusefilterunblockautopromote-param-user": "Username of the user you want to unblock.",
- "apihelp-abusefilterunblockautopromote-example-1": "Remove the block on [[User:Example]]'s autopromotion",
- "apihelp-query+abusefilters-description": "Show details of the abuse filters.",
- "apihelp-query+abusefilters-summary": "Show details of the abuse filters.",
- "apihelp-query+abusefilters-param-startid": "The filter ID to start enumerating from.",
- "apihelp-query+abusefilters-param-endid": "The filter ID to stop enumerating at.",
- "apihelp-query+abusefilters-param-show": "Show only filters which meet these criteria.",
- "apihelp-query+abusefilters-param-limit": "The maximum number of filters to list.",
- "apihelp-query+abusefilters-param-prop": "Which properties to get.",
- "apihelp-query+abusefilters-example-1": "List enabled public filters",
- "apihelp-query+abusefilters-example-2": "Show some details about filters",
- "apihelp-query+abuselog-description": "Show events that were caught by one of the abuse filters.",
- "apihelp-query+abuselog-summary": "Show events that were caught by one of the abuse filters.",
- "apihelp-query+abuselog-param-start": "The timestamp to start enumerating from.",
- "apihelp-query+abuselog-param-end": "The timestamp to stop enumerating at.",
- "apihelp-query+abuselog-param-user": "Show only entries done by a given user or IP address.",
- "apihelp-query+abuselog-param-title": "Show only entries occurring on a given page.",
- "apihelp-query+abuselog-param-filter": "Show only entries that were caught by a given filter ID.",
- "apihelp-query+abuselog-param-limit": "The maximum amount of entries to list.",
- "apihelp-query+abuselog-param-prop": "Which properties to get.",
- "apihelp-query+abuselog-example-1": "Show recent log entries",
- "apihelp-query+abuselog-example-2": "Show recent log entries for [[API]]",
- "apierror-abusefilter-canttest": "You don't have permission to test abuse filters.",
- "apierror-abusefilter-cantcheck": "You don't have permission to check syntax of abuse filters.",
- "apierror-abusefilter-nosuchlogid": "There is no abuselog entry with the id $1.",
- "apierror-abusefilter-badsyntax": "The filter has invalid syntax."
+ "abusefilter-view-private-submit": "View private details",
+ "abusefilter-view-private": "View private details",
+ "abusefilter-view-private-reason": "Reason for accessing private details:",
+ "abusefilter-log-details-id": "Log ID",
+ "abusefilter-invalid-request": "Invalid request! You must access private log details through the form on [[Special:AbuseLog/$1]] and provide a reason.",
+ "abusefilter-invalid-request-noid": "Invalid request! You must access private log details through the form on the abuse log details page and provide a reason.",
+ "log-description-abusefilterprivatedetails": "This log shows a list of times when a user accessed the private details of an abuse log.",
+ "abusefilter-noreason": "Warning: To see the private details of this log, you must provide a reason.",
+ "abusefilter-log-ip-not-available": "Not Available",
+ "abusefilter-tag-reserved": "The <code>abusefilter-condition-limit</code> tag is reserved for internal use by AbuseFilter.",
+ "tag-abusefilter-condition-limit": "condition limit reached",
+ "tag-abusefilter-condition-limit-description": "Edits or other events that couldn't be checked by all active [[Special:AbuseFilter|abuse filters]] ([[mw:Extension:AbuseFilter/Conditions|help]])."
}
diff --git a/AbuseFilter/i18n/eo.json b/AbuseFilter/i18n/eo.json
index 4210b18e..5663b9c5 100644
--- a/AbuseFilter/i18n/eo.json
+++ b/AbuseFilter/i18n/eo.json
@@ -12,14 +12,14 @@
"Matma Rex",
"Robin van der Vliet",
"Rafaneta",
- "Psychoslave"
+ "Psychoslave",
+ "Lucas"
]
},
"abusefilter-desc": "Aplikas aŭtomatan heŭristikon al redaktoj.",
"abusefilter": "Konfiguri filtrilon de misuzado",
"abuselog": "Protokolo pri misuzado",
"abusefilter-intro": "Bonvenon al la administra interfaco de la Misuzada Filtrilo.\nLa Misuzada Filtrilo estas aŭtomata programara ilo por apliki aŭtomata heŭristiko al ĉiuj agoj.\nĈi tiu interfaco montras liston de difinitaj filtriloj, kaj permesas ilin esti modifita.",
- "abusefilter-mustbeeditor": "Pro sekurecaj kialoj, nur uzantoj kun la rajto modifi maluzadajn filtrilojn povas uzi ĉi tiun interfacon.",
"abusefilter-warning": "'''Averto''': Ĉi tiu ago estis aŭtomate identigita kiel malhelpema.\nMalkonstruktivaj redaktoj rapide estos malfaritaj,\nkaj ĉi tia ega aŭ ripetita malkonstruktiva redaktado rezultos, ke via konto aŭ komputilo estos forbarita.\nSe vi kredas ke ĉi tiu redakto estas ja konstruktiva, vi povas klaki Konservi denove por konfirmi ĝin.\nMallonga priskribo pri la regulo de misuzado kiun via ago kongruis estas: $1",
"abusefilter-disallowed": "Ĉi tiu ago estis aŭtomate identigita kiel damaĝa, kaj do estis malpermesita.\nSe vi kredas ke via redakto estis konstruktiva, bonvolu kontakti administranton, kaj informi lin pri kion vi provis fari.\nMallonga priskribo de la misuza regulo, kiun via ago kongruis, estas: $1",
"abusefilter-blocked-display": "Ĉi tiu ago estis aŭtomate taksita kiel malhelpa,\nkaj vi estis preventita farinte ĝin.\nPlue, por protekti {{SITENAME}}n, via uzanto-konto kaj ĉiuj ĉi-ligitaj IP-adresoj estis forbaritaj de redaktado.\nSe ĉi tiu okazis erare, bonvolu kontakti administranton.\nMallonga priskribo de la regulo de misuzado kiun via ago kongruis estas: $1",
@@ -83,8 +83,6 @@
"abusefilter-log-hide-hidden": "Kaŝi ĉi tiun protokoleron de publika vido",
"abusefilter-log-hide-reason": "Kialo:",
"abusefilter-log-hide-forbidden": "Vi ne havas permeson kaŝi liniojn en la protokolo de misuzado.",
- "abusefilter-logentry-suppress": "kaŝis \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "malkaŝis \"[[$1]]\"",
"logentry-abusefilter-hit": "$1 ekagis $4, farante agon \"$5\" ĉe $3. Agoj faritaj: $6 ($7)",
"abusefilter-management": "Administrado de filtriloj de misuzo",
"abusefilter-list": "Ĉiuj filtriloj",
@@ -116,7 +114,6 @@
"abusefilter-list-options-scope": "Montri filtrilojn el:",
"abusefilter-list-options-scope-local": "Loka vikio",
"abusefilter-list-options-scope-global": "Ĝeneralaj reguloj",
- "abusefilter-list-options-disabled": "Malŝaltitaj filtriloj:",
"abusefilter-list-options-hidedisabled": "Kaŝi malŝaltitajn filtrilojn",
"abusefilter-list-options-submit": "Ĝisdatigi",
"abusefilter-tools-text": "Jen iloj kiuj eble estos utilaj formigi kaj sencimigi misuzadajn filtrilojn.",
@@ -132,11 +129,10 @@
"abusefilter-edit": "Redakti misuzan filtrilon",
"abusefilter-edit-subtitle": "Redaktis filtrilon $1",
"abusefilter-edit-subtitle-new": "Krei filtron",
- "abusefilter-edit-oldwarning": "<strong>Vi redaktas malnovan version de ĉi tiu filtrilo.\nĈi tiuj statistikoj estas por la plej lasta versio de la filtrilo.\nSe vi konservus ŝanĝojn, vi anstataŭigus ĉiujn ŝanĝojn ekde la version vi redaktas.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Reiri al la historio de ĉi tiu filtrilo]].",
+ "abusefilter-edit-oldwarning": "<strong>Vi redaktas malnovan version de ĉi tiu filtrilo.\nĈi tiuj statistikoj estas por la plej lasta versio de la filtrilo.\nSe vi konservos ŝanĝojn, vi anstataŭigos ĉiujn ŝanĝojn ekde la versio, kiun vi redaktas.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Reiri al la historio de ĉi tiu filtrilo]].",
"abusefilter-edit-status-label": "Statistikoj:",
"abusefilter-edit-status": "El la {{PLURAL:$1|lasta 1 ago|lastaj $1 agoj}}, ĉi tiu filtrilo kongruis $2 ($3%).",
"abusefilter-edit-status-profile": "El la {{PLURAL:$1|lasta 1 ago|lastaj $1 agoj}}, ĉi tiu filtrilo kongruis $2 ($3%).\nAveraĝe, ĝia plenumtempo estas $4ms, kaj ĝi konsumas $5 {{PLURAL:$5|kondiĉon|kondiĉojn}} de la kondiĉa limo.",
- "abusefilter-edit-throttled": "'''Averto''': Ĉi tiu filtrilo aŭtomate malebligiĝis pro sekureco. Ĝi atingis la limo kontruanta pli ol $1% de agoj.",
"abusefilter-edit-new": "Nova filtrilo",
"abusefilter-edit-save": "Konservi filtrilon",
"abusefilter-edit-id": "Identigo de filtrilo:",
@@ -155,7 +151,6 @@
"abusefilter-edit-consequences": "Agoj farotaj kiam kongrua",
"abusefilter-edit-action-warn": "Plenumi ĉi tiun agojn post averti la uzanton",
"abusefilter-edit-action-disallow": "Preventi la uzanton fari tian agon",
- "abusefilter-edit-action-flag": "Indiki ĉi tiun redakton en la protokolo pri misuzado",
"abusefilter-edit-action-blockautopromote": "Maldoni la aŭtomate konfirmitan statuson de uzanto",
"abusefilter-edit-action-degroup": "Forigi la uzanton de ĉiuj altrajtaj grupoj",
"abusefilter-edit-action-block": "Forbari la uzanton kaj/aŭ IP-adreson de redaktado",
@@ -164,7 +159,6 @@
"abusefilter-edit-action-tag": "Flagi la redakton por plua kontrolado",
"abusefilter-edit-throttle-count": "Nombro de agoj por permisigi",
"abusefilter-edit-throttle-period": "Tempdaŭro:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekundo|sekundoj}}",
"abusefilter-edit-throttle-groups": "Trafike limigi de:\n:''(po unu por linio, kombini per komoj)''",
"abusefilter-edit-warn-message": "Sistema mesaĝo por uzi kiel averto:",
"abusefilter-edit-warn-other": "Alia mesaĝo",
@@ -251,22 +245,21 @@
"abusefilter-edit-builder-vars-oldsize": "Malnova grandeco de paĝo",
"abusefilter-edit-builder-vars-removedlines": "Linioj forigitaj en redakto",
"abusefilter-edit-builder-vars-summary": "Redakta resumo/kialo",
- "abusefilter-edit-builder-vars-article-id": "Paĝa identigo",
- "abusefilter-edit-builder-vars-article-ns": "Paĝa nomspaco",
- "abusefilter-edit-builder-vars-article-text": "Paĝa titolo (sen nomspaco)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Plena paĝa titolo",
- "abusefilter-edit-builder-vars-article-views": "Rigardado de paĝoj",
+ "abusefilter-edit-builder-vars-page-id": "Paĝa identigo",
+ "abusefilter-edit-builder-vars-page-ns": "Paĝa nomspaco",
+ "abusefilter-edit-builder-vars-page-title": "Paĝa titolo (sen nomspaco)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Plena paĝa titolo",
"abusefilter-edit-builder-vars-movedfrom-id": "Paĝa identigo de movota fonta paĝo",
"abusefilter-edit-builder-vars-movedfrom-ns": "Nomspaco de movada fontpaĝo",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titolo de mova fonta paĝo",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Plena titolo de alinoma fonta paĝo",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titolo de mova fonta paĝo",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Plena titolo de alinoma fonta paĝo",
"abusefilter-edit-builder-vars-movedto-id": "Paĝo-identigo de mova cela paĝo",
"abusefilter-edit-builder-vars-movedto-ns": "Nomspaco de la destino-paĝo",
- "abusefilter-edit-builder-vars-movedto-text": "Titolo de cela paĝo de alinomado",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Plena titolo de alinomigita cela paĝo",
+ "abusefilter-edit-builder-vars-movedto-title": "Titolo de cela paĝo de alinomado",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Plena titolo de alinomigita cela paĝo",
"abusefilter-edit-builder-vars-user-editcount": "Redakto-kontado de uzanto",
- "abusefilter-edit-builder-vars-user-age": "Aĝo de uzula konto",
- "abusefilter-edit-builder-vars-user-name": "Nomo de uzula konto",
+ "abusefilter-edit-builder-vars-user-age": "Aĝo de la uzantokonto",
+ "abusefilter-edit-builder-vars-user-name": "Nomo de uzantokonto",
"abusefilter-edit-builder-vars-user-groups": "Grupoj (inkluzivante implicaj) de uzanto",
"abusefilter-edit-builder-vars-user-rights": "Rajtoj de la uzanto",
"abusefilter-edit-builder-vars-user-blocked": "Ĉu uzanto estas blokita",
@@ -324,7 +317,7 @@
"abusefilter-exception-regexfailure": "Eraro en regulara esprimo \"$3\" ĉe signo $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Malpermesita transpasado de integrita variablo \"$2\" ĉe signo $1.",
"abusefilter-exception-outofbounds": "Petante mankantan listeron $2 (lista grandeco = $3) ĉe signo $1.",
- "abusefilter-exception-notlist": "Petante tabelan eron de netabelaĵo ĉe signo $1.",
+ "abusefilter-exception-notarray": "Petante tabelan eron de netabelaĵo ĉe signo $1.",
"abusefilter-action-tag": "Etikedo",
"abusefilter-action-throttle": "Trafik-limigilo",
"abusefilter-action-warn": "Averti",
@@ -384,7 +377,6 @@
"abusefilter-topnav-import": "Importi filtrilon",
"abusefilter-log-name": "Protokolo pri misuzadaj filtriloj",
"abusefilter-log-header": "Ĉi tiu protokolo montras resumon de ŝanĝoj faritaj al filtriloj.\nPor plenaj detaloj, vidu [[Special:AbuseFilter/history|la liston]] de lastaj filtrilaj ŝanĝoj.",
- "abusefilter-log-entry-modify": "modifita $1 ($2)",
"abusefilter-log-noresults": "Mankas rezultoj",
"abusefilter-diff-title": "Diferencoj inter versioj",
"abusefilter-diff-item": "Ero",
diff --git a/AbuseFilter/i18n/es-formal.json b/AbuseFilter/i18n/es-formal.json
new file mode 100644
index 00000000..058dcb87
--- /dev/null
+++ b/AbuseFilter/i18n/es-formal.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "MarcoAurelio"
+ ]
+ },
+ "abusefilter-intro": "Sea bienvenido a la interfaz de administración del filtro antiabusos.\nEl filtro antiabusos es un programa que aplica heurística a todas las ediciones.\nLa intrerfaz muestra una lista de filtros definidos, y le permite modificarlos.",
+ "abusefilter-warning": "'''Atención:''' Esta acción ha sido automáticamente identificada como dañina.\nLas ediciones contraproducentes son rápidamente revertidas y los sucesivos intentos de persistir en su adición resultarán en que su cuenta y/o direcciones IP sean bloqueadas.\nSi usted cree que la edición era constructiva, puede volver a intentar enviarla para confirmarla.\nUna breve referencia de la regla del filtro antiabusos que su edición ha disparado es: $1",
+ "abusefilter-disallowed": "Esta acción ha sido automáticamente identificada como dañina y su ejecución ha sido deshabilitada.\nSi usted cree que su acción por contra resultaba constructiva por favor informe a un administrador acerca de lo que usted intentaba realizar.\nUna breve descripción de la regla del filtro antiabusos que se ha disparado es: $1"
+}
diff --git a/AbuseFilter/i18n/es.json b/AbuseFilter/i18n/es.json
index 46745b28..38928e15 100644
--- a/AbuseFilter/i18n/es.json
+++ b/AbuseFilter/i18n/es.json
@@ -45,14 +45,19 @@
"Dgstranz",
"Sophivorus",
"Fortega",
- "Josecurioso"
+ "Josecurioso",
+ "RicardoSGZ",
+ "Daimona Eaytoy",
+ "Astroemi",
+ "Agusbou2015",
+ "Jelou"
]
},
"abusefilter-desc": "Aplica heurísticas automáticas a las ediciones",
"abusefilter": "Configuración del filtro antiabusos",
"abuselog": "Registro del filtro antiabusos",
"abusefilter-intro": "Te damos la bienvenida a la interfaz de administración del filtro antiabusos.\nEl filtro antiabusos es un mecanismo de software automatizado que aplica heurística a todas las acciones.\nEsta interfaz muestra una lista de filtros definidos, que pueden ser modificados.",
- "abusefilter-mustbeeditor": "Por razones de seguridad, solamente los usuarios con derechos para modificar filtros antiabuso pueden usar esta interfaz.",
+ "abusefilter-mustviewprivateoredit": "Por razones de seguridad, solamente los usuarios con derechos para ver filtros antiabuso privados o modificar filtros pueden usar esta interfaz.",
"abusefilter-warning": "'''Atención''': Esta acción ha sido identificada automáticamente como dañina.\nLas acciones no constructivas serán revertidas rápidamente y\nla repetición de dichas acciones tendrá como consecuencia que tu cuenta o dirección IP sean bloqueadas.\nSi crees que esta acción es constructiva, puedes guardar de nuevo los cambios para confirmarlo.\nUna breve explicación acerca de la regla del filtro antiabusos que se ha disparado con tu acción es: $1",
"abusefilter-disallowed": "Esta acción ha sido identificada automáticamente como dañina, y por tanto ha sido deshabilitada.\nSi crees que tu acción es legítima, por favor, ponte en contacto con un administrador e infórmale de lo que intentabas hacer.\nUna breve explicación acerca de la regla del filtro antiabusos que se ha disparado con tu acción es: $1",
"abusefilter-blocked-display": "Esta acción ha sido identificada automáticamente como dañina, y ha sido cancelada.\nAdemás, con el objetivo de proteger {{SITENAME}}, tu cuenta de usuario y todas tus direcciones IP asociadas han sido bloqueadas.\nSi la acción ha sido erróneamente identificada como dañina, por favor, contacta con un administrador.\nUna breve explicación acerca de la regla del filtro antiabusos que se ha disparado con tu acción es: $1",
@@ -67,18 +72,20 @@
"right-abusefilter-log": "Ver el registro del filtro antiabusos",
"right-abusefilter-log-detail": "Ver entradas del registro detalladas del filtro antiabusos",
"right-abusefilter-private": "Ver datos privados en el registro del filtro antiabusos",
+ "right-abusefilter-private-log": "Ver el registro de acceso a datos privados del filtro antiabusos",
"right-abusefilter-modify-restricted": "Modificar filtros antiabusos con acciones restringidas",
"right-abusefilter-revert": "Revertir todos los cambios realizados por un determinado filtro antiabusos",
"right-abusefilter-view-private": "Ver filtros antiabusos marcados como privados",
"right-abusefilter-log-private": "Ver las entradas del registro de filtros antiabusos marcadas como privadas",
"right-abusefilter-hide-log": "Ocultar entradas en el registro del filtro antiabusos",
"right-abusefilter-hidden-log": "Ver entradas ocultas en el registro del filtro antiabusos",
- "right-abusefilter-modify-global": "Crear o modificar filtros globales antiabusos.",
+ "right-abusefilter-modify-global": "Crear o modificar filtros antiabusos globales.",
"action-abusefilter-modify": "modificar los filtros antiabusos",
"action-abusefilter-view": "ver los filtros antiabusos",
"action-abusefilter-log": "ver registro del filtro antiabusos",
"action-abusefilter-log-detail": "ver entradas detalladas del filtro antiabusos",
"action-abusefilter-private": "ver datos privados en el registro del filtro antiabusos",
+ "action-abusefilter-private-log": "ver el registro de acceso a datos privados del filtro antiabusos",
"action-abusefilter-modify-restricted": "modificar filtros antiabusos con acciones restringidas",
"action-abusefilter-revert": "revertir todos los cambios realizados por un determinado filtro antiabusos",
"action-abusefilter-view-private": "ver filtros antiabusos marcados como privados",
@@ -87,49 +94,70 @@
"abusefilter-log-summary": "Este registro muestra una lista de todas las acciones detectadas por los filtros.",
"abusefilter-log-search": "Buscar en el registro del filtro antiabusos",
"abusefilter-log-search-user": "Usuario:",
- "abusefilter-log-search-filter": "ID de filtro (separar con barras verticales):",
+ "abusefilter-log-search-filter": "Ids. de filtros (separar con barras verticales):",
"abusefilter-log-search-title": "Título:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Impacto:",
+ "abusefilter-log-search-impact-all": "Todas las acciones",
+ "abusefilter-log-search-impact-saved": "Solo cambios guardados",
+ "abusefilter-log-search-impact-not-saved": "Sin cambios guardados",
"abusefilter-log-search-entries-label": "Visibilidad:",
"abusefilter-log-search-entries-all": "Todas las entradas",
"abusefilter-log-search-entries-hidden": "Solo las entradas ocultas",
"abusefilter-log-search-entries-visible": "Solo las entradas visibles",
+ "abusefilter-log-search-action-other": "Otro",
+ "abusefilter-log-search-action-any": "Cualquiera",
+ "abusefilter-log-search-action-taken-label": "Medida adoptada:",
+ "abusefilter-log-search-action-taken-any": "Cualquiera",
"abusefilter-log-search-submit": "Buscar",
- "abusefilter-log-entry": "$1: $2 {{GENDER:$8|disparó}} un filtro antiabusos, {{GENDER:$8|al realizar}} la acción «$3» en $4.\nAcciones tomadas: $5.\nDescripción del filtro: $6",
+ "abusefilter-log-entry": "$1: $2 {{GENDER:$8|desencadenó}} un filtro antiabusos, {{GENDER:$8|al realizar}} la acción «$3» en $4.\nAcciones tomadas: $5.\nDescripción del filtro: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|desencadenó}} un filtro antiabusos {{GENDER:$8|al realizar}} la acción «$3» en $4.\nAcciones tomadas: $5.\nDescripción del filtro: $6 ($7)",
- "abusefilter-log-detailedentry-meta": "$1: $2 {{GENDER:$9|disparó}} $3 {{GENDER:$9|al realizar}} la acción «$4» en $5.\nAcciones tomadas: $6.\nDescripción del filtro: $7 ($8)",
+ "abusefilter-log-detailedentry-meta": "$1: $2 {{GENDER:$9|desencadenó}} $3 {{GENDER:$9|al realizar}} la acción «$4» en $5.\nAcciones tomadas: $6.\nDescripción del filtro: $7 ($8)",
"abusefilter-log-detailedentry-global": "filtro global $1",
"abusefilter-log-detailedentry-local": "filtro $1",
"abusefilter-log-detailslink": "detalles",
- "abusefilter-log-diff": "diff",
+ "abusefilter-log-diff": "dif",
"abusefilter-log-hidelink": "ajustar visibilidad",
"abusefilter-log-details-legend": "Detalles de la entrada del registro $1",
"abusefilter-log-details-var": "Variable",
"abusefilter-log-details-val": "Valor",
"abusefilter-log-details-vars": "Parámetros de acción",
- "abusefilter-log-details-private": "Datos privados",
+ "abusefilter-log-details-private": "Datos privados del registro",
"abusefilter-log-details-ip": "Dirección IP originante",
+ "abusefilter-log-details-checkuser": "Verificar usuario",
"abusefilter-log-noactions": "ninguna",
"abusefilter-log-details-diff": "Cambios hechos en la edición",
"abusefilter-log-linkoncontribs": "registro del filtro antiabusos",
"abusefilter-log-linkoncontribs-text": "Registro del filtro antiabusos para {{GENDER:$1|este usuario|esta usuaria}}",
+ "abusefilter-log-linkonhistory": "ver registro de abusos",
+ "abusefilter-log-linkonhistory-text": "Ver el registro de abusos de esta página",
"abusefilter-log-hidden": "(entrada oculta)",
"abusefilter-log-hidden-implicit": "(oculto porque se ha eliminado la revisión)",
"abusefilter-log-cannot-see-details": "No tienes permiso para ver los detalles de esta entrada.",
- "abusefilter-log-nonexistent": "No existe ninguna entrada con la ID proporcionada.",
- "abusefilter-log-details-hidden": "No puedes ver los detalles de esta entrada porque ésta es privada.",
+ "abusefilter-log-cannot-see-private-details": "No tienes permiso para ver los detalles privados de esta entrada.",
+ "abusefilter-log-nonexistent": "No existe ninguna entrada con el identificador proporcionado.",
+ "abusefilter-log-details-hidden": "No puedes ver los detalles de esta entrada porque esta es privada.",
+ "abusefilter-log-details-hidden-implicit": "No puedes ver los detalles para esta entrada porque su revisión asociada no es visible al público.",
"abusefilter-log-private-not-included": "Uno o más de los identificadores de filtro que has especificado son privados. Debido a que no tienes permitido ver los detalles de los filtros privados, estos filtros no se han buscado.",
"abusefilter-log-hide-legend": "Ocultar entrada del registro",
- "abusefilter-log-hide-id": "ID de la entrada del registro:",
+ "abusefilter-log-hide-id": "Id. de la entrada del registro:",
"abusefilter-log-hide-hidden": "Ocultar esta entrada de la vista pública",
"abusefilter-log-hide-reason": "Motivo:",
+ "abusefilter-log-hide-reason-other": "Otro motivo:",
"abusefilter-log-hide-forbidden": "No tienes permiso para ocultar entradas del registro de abusos",
- "abusefilter-logentry-suppress": "ocultó «[[$1]]»",
- "abusefilter-logentry-unsuppress": "mostró «[[$1]]»",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|ocultó}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|desocultó}} $3",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|disparó}} $4 al {{GENDER:$2|realizar}} la acción «$5» en $3. Medidas adoptadas: $6 ($7)",
+ "log-action-filter-abusefilter": "Tipo de cambio de filtro:",
+ "log-action-filter-abusefilter-create": "Creación de filtro nuevo",
+ "log-action-filter-abusefilter-modify": "Modificación de filtro",
+ "log-action-filter-suppress-abuselog": "Supresiones del filtro antiabusos",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|accedió}} a los detalles privados de $3",
+ "abusefilterprivatedetails-log-name": "Registro de acceso a datos privados del filtro antiabusos",
"abusefilter-management": "Administración del filtro antiabusos",
"abusefilter-list": "Todos los filtros",
"abusefilter-list-id": "Identificación de filtro",
+ "abusefilter-list-pattern": "Patrón",
"abusefilter-list-status": "Estado",
"abusefilter-list-public": "Descripción pública",
"abusefilter-list-consequences": "Consecuencias",
@@ -142,9 +170,10 @@
"abusefilter-list-group": "Grupo de filtros",
"abusefilter-hidden": "Privado",
"abusefilter-unhidden": "Público",
- "abusefilter-enabled": "Habilitado",
+ "abusefilter-enabled": "Activado",
"abusefilter-deleted": "Eliminado",
"abusefilter-disabled": "Desactivado",
+ "abusefilter-throttled": "limitado",
"abusefilter-hitcount": "$1 {{PLURAL:$1|detección|detecciones}}",
"abusefilter-new": "Crear un filtro nuevo",
"abusefilter-return": "Regresar a la gestión de filtros",
@@ -158,11 +187,19 @@
"abusefilter-list-options-scope-local": "Solo reglas locales",
"abusefilter-list-options-scope-global": "Solo reglas globales",
"abusefilter-list-options-scope-all": "Reglas locales y globales",
- "abusefilter-list-options-disabled": "Filtros deshabilitados:",
- "abusefilter-list-options-hidedisabled": "Esconder filtros deshabilitados",
+ "abusefilter-list-options-further-options": "Más opciones:",
+ "abusefilter-list-options-hidedisabled": "Ocultar filtros desactivados",
+ "abusefilter-list-options-hideprivate": "Ocultar filtros privados",
+ "abusefilter-list-options-searchfield": "Buscar entre las reglas:",
+ "abusefilter-list-options-searchpattern": "Insertar un patrón",
+ "abusefilter-list-options-searchoptions": "Modo de búsqueda:",
+ "abusefilter-list-options-search-like": "Consulta simple",
+ "abusefilter-list-options-search-rlike": "Expresión regular",
+ "abusefilter-list-options-search-irlike": "Expresión regular sin distinción de uso de mayúsculas",
+ "abusefilter-list-regexerror": "Se produjo un problema al buscar: hay un error de sintaxis en la expresión regular.",
"abusefilter-list-options-submit": "Actualizar",
"abusefilter-tools-text": "Aquí hay algunas herramientas que pueden ser útiles formulando y reparando filtros antiabusos.",
- "abusefilter-tools-expr": "Expresión de quien prueba",
+ "abusefilter-tools-expr": "Probador de expresiones",
"abusefilter-tools-submitexpr": "Evaluar",
"abusefilter-tools-reautoconfirm": "Restaurar el estado autoconfirmado",
"abusefilter-tools-reautoconfirm-user": "Usuario:",
@@ -174,15 +211,18 @@
"abusefilter-edit": "Editar el filtro antiabusos",
"abusefilter-edit-subtitle": "Editando filtro $1",
"abusefilter-edit-subtitle-new": "Creando un filtro",
+ "abusefilter-edit-token-not-match": "¡La edición no fue guardada! Por favor vuelve a intentarlo.",
"abusefilter-edit-oldwarning": "<strong>Estás editando una versión antigua de este filtro.\nLas estadísticas citadas son para la versión más reciente del filtro.\nSi grabas tus cambios, sobrescribirás todos los cambios realizados desde la revisión que estás editando.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Volver al historial de este filtro]].",
"abusefilter-edit-status-label": "Estadísticas:",
"abusefilter-edit-status": "De {{PLURAL:$1|la última acción|las últimas $1 acciones}}, este filtro ha coincidido con $2 ($3 %).",
- "abusefilter-edit-status-profile": "De {{PLURAL:$1|la última acción|las últimas acciones}}, este filtro ha coincidido con $2 ($3%).\nEn promedio, su tiempo de ejecución es de $4 ms, y consume $5 {{PLURAL:$5|condición|condiciones}} del límite de condiciones.",
- "abusefilter-edit-throttled": "'''Advertencia''': este filtro ha sido deshabilitado automáticamente como medida de seguridad.\nEl filtro ha sobrepasado el límite de dispararse en más del $1% de las acciones.",
+ "abusefilter-edit-status-profile": "De {{PLURAL:$1|la última acción|las últimas $1 acciones}}, este filtro ha coincidido con $2 ($3 %).\nEn promedio, su tiempo de ejecución es de $4 ms, y consume $5 {{PLURAL:$5|condición|condiciones}} del límite de condiciones.",
+ "abusefilter-edit-throttled-warning": "'''Atención:''' este filtro se marcó automáticamente como perjudicial. Como medida de seguridad, no se ejecutarán las acciones siguientes ($1). Revisa y [[mw:Extension:AbuseFilter/Conditions|optimiza]] las condiciones para eliminar esta restricción",
"abusefilter-edit-new": "Filtro nuevo",
"abusefilter-edit-save": "Guardar filtro",
- "abusefilter-edit-id": "Identificación de filtro:",
+ "abusefilter-edit-id": "Identificador de filtro:",
+ "abusefilter-edit-switch-editor": "Cambiar de editor",
"abusefilter-edit-description": "Descripción:\n:''(visible públicamente)''",
+ "abusefilter-edit-field-description": "descripción",
"abusefilter-edit-group": "Grupo de filtros:",
"abusefilter-edit-flags": "Opciones:",
"abusefilter-edit-enabled": "Activar este filtro",
@@ -190,35 +230,53 @@
"abusefilter-edit-hidden": "Ocultar los detalles de este filtro al público",
"abusefilter-edit-global": "Filtro global",
"abusefilter-edit-rules": "Condiciones:",
+ "abusefilter-edit-field-conditions": "condiciones",
"abusefilter-edit-notes": "Notas:",
"abusefilter-edit-lastmod": "Última modificación del filtro:",
"abusefilter-edit-lastmod-text": "$1 por $2",
"abusefilter-edit-hitcount": "Detecciones del filtro:",
"abusefilter-edit-consequences": "Medidas que tomar cuando las condiciones coincidan",
- "abusefilter-edit-action-warn": "Disparar el filtro después de dar al usuario una advertencia",
+ "abusefilter-edit-action-warn": "Desencadenar estas acciones tras alertar al usuario",
"abusefilter-edit-action-disallow": "Prevenir al usuario de realizar la acción en cuestión",
"abusefilter-edit-action-blockautopromote": "Revocar el estado autoconfirmado del usuario",
"abusefilter-edit-action-degroup": "Retirar al usuario todos los permisos de su cuenta",
"abusefilter-edit-action-block": "Bloquear al usuario o dirección IP",
+ "abusefilter-edit-action-blocktalk": "Bloquear al usuario o dirección IP impidiendo que pueda usar su página de discusión",
"abusefilter-edit-action-throttle": "Disparar el filtro solamente si el usuario sobrepasa un cierto límite de ritmo de edición",
- "abusefilter-edit-action-rangeblock": "Bloquear el rango /16 del usuario que origina el disparo del filtro",
+ "abusefilter-edit-action-rangeblock": "Bloquear el intervalo de IP respectivo del cual proviene el usuario",
"abusefilter-edit-action-tag": "Marcar la edición para una revisión posterior",
"abusefilter-edit-throttle-count": "Número de acciones a permitir:",
- "abusefilter-edit-throttle-period": "Período de tiempo:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|segundo|segundos}}",
- "abusefilter-edit-throttle-groups": "Agrupar limitador por:\n:''(uno por línea, combinar con comas)''",
+ "abusefilter-edit-throttle-period": "Período (en segundos):",
+ "abusefilter-edit-throttle-groups": "Agrupar limitador por:",
+ "abusefilter-edit-throttle-ip": "Dirección IP",
+ "abusefilter-edit-throttle-user": "Cuenta de usuario",
+ "abusefilter-edit-throttle-range": "Rango /16",
+ "abusefilter-edit-throttle-creationdate": "Hora del servidor en la que se produjo la creación de cuenta",
+ "abusefilter-edit-throttle-editcount": "Recuento de ediciones",
+ "abusefilter-edit-throttle-site": "El sitio entero",
+ "abusefilter-edit-throttle-page": "Página",
+ "abusefilter-throttle-details": "Permitir $1 {{PLURAL:$1|acción|acciones}} cada $2 {{PLURAL:$2|segundo|segundos}}, límite agrupado por: $3",
"abusefilter-edit-warn-message": "Mensaje del sistema para usar por la advertencia:",
"abusefilter-edit-warn-other": "Otro mensaje",
"abusefilter-edit-warn-other-label": "Nombre de página de otro mensaje:\n:''(sin prefijo MediaWiki)''",
"abusefilter-edit-warn-actions": "Acciones:",
- "abusefilter-edit-warn-preview": "Previsualizar mensaje seleccionado",
+ "abusefilter-edit-warn-preview": "Mostrar/Ocultar el mensaje seleccionado",
"abusefilter-edit-warn-edit": "Crear o editar el mensaje seleccionado",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Etiquetas]] que se aplicarán (una por renglón):",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Etiquetas]] que se aplicarán:",
+ "abusefilter-edit-tag-placeholder": "Añadir etiquetas (una por una o separadas por comas)",
+ "abusefilter-edit-tag-hidden-placeholder": "Añadir etiquetas (separadas por comas)",
+ "abusefilter-edit-block-anon-durations": "Duración del bloqueo para usuarios anónimos:",
+ "abusefilter-edit-block-user-durations": "Duración del bloqueo para usuarios registrados:",
+ "abusefilter-block-anon": "Bloquear usuarios anónimos",
+ "abusefilter-block-user": "bloquear usuarios registrados",
+ "abusefilter-block-talk": "no puede editar su página de discusión",
"abusefilter-edit-denied": "No puedes ver detalles de este filtro porque es privado",
"abusefilter-edit-main": "Parámetros de filtro",
"abusefilter-edit-done-subtitle": "Filtro editado",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Tus cambios]] al [[Special:AbuseFilter/$1|filtro $3]] han sido guardados.",
"abusefilter-edit-badsyntax": "Hay un error de sintaxis en el filtro que especificaste.\nEl resultado del analizador fue: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Los siguientes campos son requeridos: $1",
+ "abusefilter-edit-deleting-enabled": "No puedes marcar un filtro activo como borrado.",
"abusefilter-edit-restricted": "No puedes editar este filtro, porque contiene una o más acciones restringidas.\nPor favor, solicita a un usuario con permisos suficientes para agregar acciones restringidas que haga el cambio por ti.",
"abusefilter-edit-viewhistory": "Ver el historial de este filtro",
"abusefilter-edit-history": "Historial:",
@@ -230,7 +288,7 @@
"abusefilter-edit-export": "Exportar este filtro a otro wiki",
"abusefilter-edit-syntaxok": "No se detectaron errores de sintaxis.",
"abusefilter-edit-syntaxerr": "Se detectó un error de sintaxis: $1",
- "abusefilter-edit-bad-tags": "Una o más de las etiquetas que especificaste no son válidas.\nLas etiquetas deberían ser cortas, no deberían contener caracteres especiales y no deben estar reservadas por otro programa. Inténtalo con otro nombre de etiqueta",
+ "abusefilter-edit-bad-tags": "Una o más de las etiquetas que especificaste no son válidas.\nLas etiquetas deben ser breves, no deben contener caracteres especiales y no deben estar reservadas por otro programa. Prueba a elegir otro nombre de etiqueta.",
"abusefilter-edit-notallowed": "No se te permite crear o editar filtros antiabusos",
"abusefilter-edit-notallowed-global": "No se te permite crear o editar filtros antiabusos globales",
"abusefilter-edit-notallowed-global-custom-msg": "Los mensajes de alerta personalizados no admiten filtros globales",
@@ -243,8 +301,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Módulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Exponente (**)",
"abusefilter-edit-builder-group-op-comparison": "Operadores de comparación",
- "abusefilter-edit-builder-op-comparison-equal": "Igual a (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "No igual a (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Valor equivalente a (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Valor y tipo equivalente a (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Valor diferente de (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Valor y tipo diferente de (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Menor que (<)",
"abusefilter-edit-builder-op-comparison-gt": "Mayor que (>)",
"abusefilter-edit-builder-op-comparison-lte": "Menor o igual a (<=)",
@@ -254,7 +314,7 @@
"abusefilter-edit-builder-op-bool-and": "Y (&)",
"abusefilter-edit-builder-op-bool-or": "O (|)",
"abusefilter-edit-builder-group-misc": "Miscelánea",
- "abusefilter-edit-builder-misc-in": "contenido en la cadena (in)",
+ "abusefilter-edit-builder-misc-in": "Contenido en la cadena (in)",
"abusefilter-edit-builder-misc-like": "Coincide con patrón (like)",
"abusefilter-edit-builder-misc-rlike": "Coincide con expresión regular (rlike)",
"abusefilter-edit-builder-misc-irlike": "Coincide con la expresión regular, no distingue entre mayúsculas y minúsculas (irlike)",
@@ -267,25 +327,32 @@
"abusefilter-edit-builder-funcs-lcase": "A minúsculas (lcase)",
"abusefilter-edit-builder-funcs-ucase": "A mayúsculas (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normalizar caracteres confusos (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normalizar una cadena y buscar en ella varias subcadenas en el modo OR (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Normalizar una cadena y buscar en ella varias subcadenas en el modo AND (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Quitar caracteres dobles (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Caracteres especiales / caracteres totales (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normalizar (norm)",
"abusefilter-edit-builder-funcs-count": "Número de veces que la cadena X aparece en la cadena Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Número de veces que la expresión regular X aparece en la cadena Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Matriz de correspondencias de expresiones regulares en un texto para cada grupo de captura (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Eliminar espacio en blanco (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Eliminar caracteres especiales (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "¿Está la IP dentro del intervalo? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Buscar múltiples subcadenas en la cadena (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Buscar en una cadena varias subcadenas en el modo OR. (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Buscar en una cadena varias subcadenas en el modo AND. (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Comprobar si el primer argumento es igual (===) a alguno de los argumentos siguientes (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Subcadena (substr)",
"abusefilter-edit-builder-funcs-strpos": "Posición de la subcadena en la cadena (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Reemplazar subcadena con una cadena (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Cadena de escape como literal en una expresión regular (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Establecer variable (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Normalizar entidades HTML en caracteres unicode (sanitize)",
"abusefilter-edit-builder-group-vars": "Variables",
"abusefilter-edit-builder-vars-accountname": "Nombre de usuario (en la creación de la cuenta)",
"abusefilter-edit-builder-vars-timestamp": "Hora Unix del cambio",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Fecha y hora del registro",
"abusefilter-edit-builder-vars-action": "Acción",
- "abusefilter-edit-builder-vars-addedlines": "Lineas añadidas en revisión",
+ "abusefilter-edit-builder-vars-addedlines": "Renglones añadidos en la edición",
"abusefilter-edit-builder-vars-delta": "Cambio en tamaño en revisión",
"abusefilter-edit-builder-vars-diff": "Diff unificado de cambios hechos durante la edición",
"abusefilter-edit-builder-vars-newsize": "Nuevo tamaño de la página",
@@ -294,19 +361,21 @@
"abusefilter-edit-builder-vars-new-content-model": "Modelo de contenido nuevo",
"abusefilter-edit-builder-vars-removedlines": "Líneas eliminadas en la edición",
"abusefilter-edit-builder-vars-summary": "Resumen de edición/razón",
- "abusefilter-edit-builder-vars-article-id": "ID de la página",
- "abusefilter-edit-builder-vars-article-ns": "Espacio de nombres de la página",
- "abusefilter-edit-builder-vars-article-text": "Título de página (sin espacio de nombres)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Título completo de la página",
- "abusefilter-edit-builder-vars-article-views": "Vistas de la página",
+ "abusefilter-edit-builder-vars-page-id": "ID de la página",
+ "abusefilter-edit-builder-vars-page-ns": "Espacio de nombres de la página",
+ "abusefilter-edit-builder-vars-page-title": "Título de página (sin espacio de nombres)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Título completo de la página",
+ "abusefilter-edit-builder-vars-page-age": "Antigüedad de la página (en segundos)",
"abusefilter-edit-builder-vars-movedfrom-id": "ID de la página fuente a trasladar",
"abusefilter-edit-builder-vars-movedfrom-ns": "Espacio de nombres de la página de origen que trasladar",
- "abusefilter-edit-builder-vars-movedfrom-text": "Título de la página fuente a trasladar",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Título completo de la página fuente a trasladar",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Título de la página original del traslado",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Título completo de la página original del traslado",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Antigüedad de página origen del traslado (en segundos)",
"abusefilter-edit-builder-vars-movedto-id": "ID de la página de destino del traslado",
"abusefilter-edit-builder-vars-movedto-ns": "Espacio de nombres de la página de destino del traslado",
- "abusefilter-edit-builder-vars-movedto-text": "Título de la página de destino del traslado",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Título completo de la página de destino del traslado",
+ "abusefilter-edit-builder-vars-movedto-title": "Título de la página de destino del traslado",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Título completo de la página de destino del traslado",
+ "abusefilter-edit-builder-vars-movedto-age": "Antigüedad de página destino del traslado (en segundos)",
"abusefilter-edit-builder-vars-user-editcount": "Contador de ediciones del usuario",
"abusefilter-edit-builder-vars-user-age": "Antigüedad de la cuenta de usuario",
"abusefilter-edit-builder-vars-user-name": "Nombre de la cuenta de usuario",
@@ -316,10 +385,14 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "El tiempo que hace que la dirección de correo electrónico fue confirmada",
"abusefilter-edit-builder-vars-recent-contributors": "Últimos diez usuarios en contribuir en la página",
"abusefilter-edit-builder-vars-first-contributor": "Primer usuario en contribuir a la página",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Últimos diez usuarios en contribuir en la página origen del traslado",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Primeros diez usuarios en contribuir en la página origen del traslado",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Últimos diez usuarios en contribuir en la página destino del traslado",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Últimos diez usuarios en contribuir en la página origen del traslado",
"abusefilter-edit-builder-vars-all-links": "Todos los vínculos externos en el nuevo texto",
"abusefilter-edit-builder-vars-added-links": "Todos los vínculos externos agregados en la edición",
"abusefilter-edit-builder-vars-removed-links": "Todos los vínculos externos eliminados en la edición",
- "abusefilter-edit-builder-vars-old-text": "Antiguo wikitexto de la página, antes de la edición",
+ "abusefilter-edit-builder-vars-old-text": "Antiguo wikitexto de la página, antes de la edición (ya no se usa)",
"abusefilter-edit-builder-vars-new-text": "Nuevo wikitexto de la página, después de la edición",
"abusefilter-edit-builder-vars-new-pst": "Nuevo wikitexto de la página, aplicando transformaciones pre-guardado",
"abusefilter-edit-builder-vars-diff-pst": "Diff unificado de cambios por edición, pre-guardado transformado",
@@ -330,9 +403,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "Nivel de protección para el traslado de la página",
"abusefilter-edit-builder-vars-restrictions-create": "Nivel de protección para la creación de la página",
"abusefilter-edit-builder-vars-restrictions-upload": "Nivel de protección para la subida del archivo",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Nivel de protección para la edición de la página origen del traslado",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Nivel de protección para el traslado de la página origen del traslado",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Nivel de protección para la creación de la página origen del traslado",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Nivel de protección para la subida del archivo origen del traslado",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Nivel de protección para la edición de la página destino del traslado",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Nivel de protección para el traslado de la página destino del traslado",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Nivel de protección para el traslado de la página destino del traslado",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Nivel de protección para la subida del archivo destino del traslado",
"abusefilter-edit-builder-vars-old-text-stripped": "Texto antiguo de la página, libre de cualquier elemento de marcado",
"abusefilter-edit-builder-vars-old-links": "Vínculos en la página, antes de la edición",
- "abusefilter-edit-builder-vars-old-html": "Antiguo wikitexto de la página, analizado en HTML",
+ "abusefilter-edit-builder-vars-old-html": "Antiguo wikitexto de la página, analizado en HTML (ya no se usa)",
"abusefilter-edit-builder-vars-minor-edit": "Si la edición ha sido marcada o no como menor",
"abusefilter-edit-builder-vars-file-sha1": "Hash SHA1 del contenido del archivo",
"abusefilter-edit-builder-vars-file-size": "Tamaño del archivo en bytes",
@@ -345,7 +426,7 @@
"abusefilter-history": "Historial de cambios del filtro antiabusos n.º $1",
"abusefilter-history-foruser": "Cambios por $1",
"abusefilter-history-hidden": "Oculto",
- "abusefilter-history-enabled": "Habilitado",
+ "abusefilter-history-enabled": "Activado",
"abusefilter-history-global": "Global",
"abusefilter-history-timestamp": "Hora",
"abusefilter-history-user": "Usuario",
@@ -359,6 +440,7 @@
"abusefilter-history-filterid": "Filtro",
"abusefilter-history-select-legend": "Refinar búsqueda",
"abusefilter-history-select-user": "Usuario:",
+ "abusefilter-history-select-filter": "Identificador del filtro:",
"abusefilter-history-select-submit": "Refinar",
"abusefilter-history-diff": "Cambios",
"abusefilter-history-error-hidden": "El filtro que has solicitado está oculto y no puedes ver su historial.",
@@ -369,14 +451,17 @@
"abusefilter-exception-unclosedstring": "Cadena no cerrada empezando en el carácter $1",
"abusefilter-exception-invalidoperator": "Operador no válido «$2» en el carácter $1.",
"abusefilter-exception-unrecognisedtoken": "Token \"$2\" no reconocido en el carácter $1.",
- "abusefilter-exception-noparams": "No se ha introducido ningún parámetro a la función «$2» en el carácter $1.",
+ "abusefilter-exception-noparams": "No se proporcionó ningún parámetro a la función «$2» en el carácter $1.\nSe {{PLURAL:$3|esperaba $3 argumento|esperaban $3 argumentos}}.",
"abusefilter-exception-dividebyzero": "Intento ilegal de dividir $2 entre cero en carácter $1.",
"abusefilter-exception-unrecognisedvar": "Variable no reconocida $2 en el carácter $1",
"abusefilter-exception-notenoughargs": "No se han proporcionado todos los argumentos necesarios a la función $2, que fue llamada en el carácter $1.\nSe {{PLURAL:$3|esperaba|esperaban}} $3 {{PLURAL:$3|argumento|argumentos}} y se {{PLURAL:$4|ha|han}} proporcionado $4.",
"abusefilter-exception-regexfailure": "Error en la expresión regular «$3» en el carácter $1: «$2»",
"abusefilter-exception-overridebuiltin": "Anulación incorrecta de la variable «$2» en el carácter $1.",
- "abusefilter-exception-outofbounds": "Solicitando objeto de listado no existente $2 (tamaño del listado = $3) en el carácter $1.",
- "abusefilter-exception-notlist": "Solicitando un objeto de matriz en un objeto que no es una matriz, en el carácter $1.",
+ "abusefilter-exception-outofbounds": "Solicitando un elemento inexistente $2 en la matriz (tamaño de la matriz = $3) en el carácter $1.",
+ "abusefilter-exception-notarray": "Solicitando un objeto de matriz en un objeto que no es una matriz, en el carácter $1.",
+ "abusefilter-exception-unclosedcomment": "Comentario sin cerrar en el carácter $1.",
+ "abusefilter-exception-invalidiprange": "Se proporcionó un intervalo de IP no válido, «$2», en el carácter $1.",
+ "abusefilter-exception-disabledvar": "La variable $2 en el carácter $1 no se encuentra en uso.",
"abusefilter-action-tag": "Etiquetar",
"abusefilter-action-throttle": "Limitar",
"abusefilter-action-warn": "Advertir",
@@ -392,8 +477,9 @@
"abusefilter-revert-periodstart": "Comienzo de periodo:",
"abusefilter-revert-periodend": "Fin de periodo:",
"abusefilter-revert-search": "Seleccionar acciones",
- "abusefilter-revert-filter": "Filtro:",
+ "abusefilter-revert-filter": "Id. de filtro:",
"abusefilter-revert-preview-intro": "Debajo están las acciones tomadas por el filtro antiabusos que serán revertidas por esta acción. Por favor verifícalas cuidadosamente, y haz clic en \"{{int:abusefilter-revert-confirm}}\" para confirmar tu selección.",
+ "abusefilter-revert-confirm-legend": "Confirmar la reversión",
"abusefilter-revert-confirm": "Confirmar",
"abusefilter-revert-success": "Has revertido todas las acciones tomadas por el filtro antiabusos debido al [[Special:AbuseFilter/$1|filtro $2]].",
"abusefilter-revert-reason": "Reversión automática de todas las acciones tomadas por el filtro antiabusos debido al filtro $1.\nRazón dada: $2",
@@ -405,12 +491,20 @@
"abusefilter-test-submit": "Prueba",
"abusefilter-test-load": "Cargar",
"abusefilter-test-user": "Cambios por usuario:",
+ "abusefilter-test-nobots": "Ocultar ediciones de robots",
"abusefilter-test-period-start": "Cambios hechos después:",
"abusefilter-test-period-end": "Cambios hechos antes:",
"abusefilter-test-page": "Cambios hechos a la página:",
"abusefilter-test-shownegative": "Mostrar cambios que no coincidan con el filtro",
"abusefilter-test-syntaxerr": "El filtro que has ingresado contiene un error de sintaxis.\nPuedes recibir una explicación completa haciendo clic en el botón \"{{int:abusefilter-edit-check}}\".",
"abusefilter-test-badtitle": "El título de página introducido no era válido. Puede contener uno o más caracteres que no se pueden utilizar en títulos.",
+ "abusefilter-test-action": "Tipo de acción:",
+ "abusefilter-test-search-type-all": "Todas las acciones",
+ "abusefilter-test-search-type-edit": "Ediciones",
+ "abusefilter-test-search-type-move": "Traslados",
+ "abusefilter-test-search-type-delete": "Borrados",
+ "abusefilter-test-search-type-upload": "Subidas",
+ "abusefilter-test-search-type-createaccount": "Creaciones de cuentas",
"abusefilter-changeslist-examine": "examinar",
"abusefilter-examine": "Examinar cambios individuales",
"abusefilter-examine-intro": "Esta página te permite examinar las variables generadas por el filtro antiabusos para un cambio individual, y probarlas contra los filtros.",
@@ -437,6 +531,7 @@
"abusefilter-topnav-import": "Importar filtro",
"abusefilter-log-name": "Registro del filtro antiabusos",
"abusefilter-log-header": "Este registro muestra un resumen de cambios hechos a los filtros.\nPara detalles completos, ver [[Special:AbuseFilter/history|la lista]] de cambios recientes de filtros.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|creó}} $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|modificó}} el $4 ($5)",
"abusefilter-log-noresults": "No hay resultados",
"abusefilter-diff-title": "Diferencias entre versiones",
@@ -452,48 +547,16 @@
"abusefilter-import-submit": "Importar datos",
"abusefilter-group-default": "Predeterminado",
"abusefilter-http-error": "Se produjo un error de HTTP: $1.",
- "apihelp-abusefiltercheckmatch-description": "Comprueba si el filtro antiabusos coincide con un conjunto de variables, evento del registro del editor antiabusos.\n\nSe necesita \"vars\", \"rcid\" o \"logid\", pero solo se utiliza uno.",
- "apihelp-abusefiltercheckmatch-extended-description": "Se requieren vars, rcid o logid, pero sólo uno puede ser usado.",
- "apihelp-abusefiltercheckmatch-param-filter": "El texto completo que se comprobará en busca de coincidencias.",
- "apihelp-abusefiltercheckmatch-param-vars": "Matriz JSON codificada de variables para realizar la prueba.",
- "apihelp-abusefiltercheckmatch-param-rcid": "Identificador del cambio reciente contra el cual verificar.",
- "apihelp-abusefiltercheckmatch-param-logid": "ID del registro del filtro antiabusos para comprobarlo.",
- "apihelp-abusefiltercheckmatch-example-1": "Prueba si el reciente cambio con identificador 15 coincide con un filtro simple",
- "apihelp-abusefilterchecksyntax-description": "Comprobar la sintaxis de un filtro antiabusos.",
- "apihelp-abusefilterchecksyntax-summary": "Verificar el código de un filtro antiabusos.",
- "apihelp-abusefilterchecksyntax-param-filter": "El texto completo del filtro cuya sintaxis se comprobará.",
- "apihelp-abusefilterchecksyntax-example-1": "Comprobar sintaxis de un filtro válido",
- "apihelp-abusefilterchecksyntax-example-2": "Comprobar sintaxis de un filtro no válido",
- "apihelp-abusefilterevalexpression-description": "Evalúa una expresión del filtro antiabusos.",
- "apihelp-abusefilterevalexpression-summary": "Evalúa una expresión del filtro antiabusos.",
- "apihelp-abusefilterevalexpression-param-expression": "La expresión que se evaluará.",
- "apihelp-abusefilterevalexpression-example-1": "Evaluar una expresión simple",
- "apihelp-abusefilterunblockautopromote-description": "Desbloquea un usuario de recibir autopromociones como consecuencia del filtro antiabusos.",
- "apihelp-abusefilterunblockautopromote-summary": "Desbloquea a un usuario para que pueda recibir permisos de usuario otorgados automáticamente por el sistema, anteriormente impedido como consecuencia de un disparo del filtro antiabusos.",
- "apihelp-abusefilterunblockautopromote-param-user": "El nombre del usuario que se desbloqueará.",
- "apihelp-abusefilterunblockautopromote-example-1": "Eliminar el bloqueo en la autopromoción de [[User:Example]]",
- "apihelp-query+abusefilters-description": "Mostrar detalles de los filtros antiabusos.",
- "apihelp-query+abusefilters-summary": "Mostrar los detalles de los filtros antiabusos.",
- "apihelp-query+abusefilters-param-startid": "El identificador de filtro para comenzar la enumeración.",
- "apihelp-query+abusefilters-param-endid": "El identificador de filtro para detener la enumeración.",
- "apihelp-query+abusefilters-param-show": "Sólo mostrar los filtros que cumplan con estos criterios.",
- "apihelp-query+abusefilters-param-limit": "El número máximo de filtros a listar.",
- "apihelp-query+abusefilters-param-prop": "Qué propiedades obtener",
- "apihelp-query+abusefilters-example-1": "Listar los filtros públicos habilitados",
- "apihelp-query+abusefilters-example-2": "Mostrar algunos detalles acerca de los filtros",
- "apihelp-query+abuselog-description": "Mostrar eventos que fueron detectados por uno de los filtros antiabusos.",
- "apihelp-query+abuselog-summary": "Mostrar los eventos que fueron detectados por uno de los filtros antiabusos.",
- "apihelp-query+abuselog-param-start": "El sello de tiempo para comenzar la enumeración",
- "apihelp-query+abuselog-param-end": "El sello de tiempo para detener la enumeración.",
- "apihelp-query+abuselog-param-user": "Mostrar solo entradas correspondientes a un usuario o IP determinado.",
- "apihelp-query+abuselog-param-title": "Mostrar solo entradas correspondientes a una página determinada.",
- "apihelp-query+abuselog-param-filter": "Mostrar solo entradas capturadas por un identificador de filtro determinado.",
- "apihelp-query+abuselog-param-limit": "La cantidad máxima de entradas que aparecerán.",
- "apihelp-query+abuselog-param-prop": "Qué propiedades se obtendrán.",
- "apihelp-query+abuselog-example-1": "Mostrar entradas recientes del registro",
- "apihelp-query+abuselog-example-2": "Mostrar entradas recientes del registro para [[API]]",
- "apierror-abusefilter-canttest": "No tienes permiso para probar filtros antiabusos.",
- "apierror-abusefilter-cantcheck": "No tienes permiso para comprobar la sintaxis de los filtros antiabusos.",
- "apierror-abusefilter-nosuchlogid": "No existe ninguna entrada en el registro de abusos con la ID $1.",
- "apierror-abusefilter-badsyntax": "El filtro contiene sintaxis no válida."
+ "abusefilter-view-private-submit": "Ver detalles privados",
+ "abusefilter-view-private": "Ver detalles privados",
+ "abusefilter-view-private-reason": "Razón para acceder a los detalles privados:",
+ "abusefilter-log-details-id": "Identificador del registro",
+ "abusefilter-invalid-request": "Solicitud inválida. Debes acceder a los detalles privados del registro a través del formulario en [[Special:AbuseLog/$1]] y consignar una razón para ello.",
+ "abusefilter-invalid-request-noid": "Solicitud inválida. Debes acceder a los detalles privados del registro a través del formulario en el registro del filtro antiabusos y consignar una razón.",
+ "log-description-abusefilterprivatedetails": "Este registro muestra un listado de ocasiones en el que un usuario accedió a los datos privados de un registro del filtro antiabusos.",
+ "abusefilter-noreason": "Aviso: Para ver los datos privados del registro debes proporcionar una razón.",
+ "abusefilter-log-ip-not-available": "No disponible",
+ "abusefilter-tag-reserved": "La etiqueta <code>abusefilter-condition-limit</code> está reservada para uso interno del filtro antiabusos.",
+ "tag-abusefilter-condition-limit": "límite de condiciones superado",
+ "tag-abusefilter-condition-limit-description": "Ediciones u otros eventos que no pudieron ser verificados por todos los [[Special:AbuseFilter|filtros antiabusos]] ([[mw:Extension:AbuseFilter/Conditions|ayuda]])."
}
diff --git a/AbuseFilter/i18n/et.json b/AbuseFilter/i18n/et.json
index 47c5409a..63e12125 100644
--- a/AbuseFilter/i18n/et.json
+++ b/AbuseFilter/i18n/et.json
@@ -5,14 +5,14 @@
"Morel",
"Oop",
"Pikne",
- "Matma Rex"
+ "Matma Rex",
+ "Cumbril"
]
},
"abusefilter-desc": "Rakendab muudatuste juures automaatset heuristikat.",
"abusefilter": "Väärtarvitusfiltri häälestus",
"abuselog": "Väärtarvituslogi",
"abusefilter-intro": "Tere tulemast väärtarvitusfiltri haldamisliidesesse.\nVäärtarvitusfilter on mehhanism, mis rakendab kõigi muudatuste juures automaatset heuristikat.\nLiidesega saab vaadata määratletud filtrite loendit ja filtreid muuta.",
- "abusefilter-mustbeeditor": "Turvalisuskaalutlusel võivad seda liidest kasutada ainult kasutajad, kellel on väärtarvitusfiltri muutmise õigus.",
"abusefilter-warning": "'''Hoiatus''': See toiming on automaatselt kahjulikuks arvatud.\nEbaasjalikud tegevused pööratakse kiiresti tagasi\nning korduvate ja halvimate muudatuste tagajärjel blokeeritakse su konto või IP-aadress.\nKui arvad selle toimingu asjaliku olevat, võid kinnituseks selle uuesti salvestada.\nSinu toimingule vastanud väärtarvitusfiltri reegli lühikirjeldus: $1",
"abusefilter-disallowed": "See toiming on automaatselt kahjulikuks arvatud ja on seetõttu keelatud.\nKui arvad toimingu asjaliku olevat, võta palun teha soovitud muudatuse asjus administraatoriga ühendust.\nSinu toimingule vastanud väärtarvitusfiltri reegli lühikirjeldus: $1",
"abusefilter-blocked-display": "See toiming on automaatselt kahjulikuks arvatud\nja sul ei lastud seda sooritada.\nKaitsmaks {{GRAMMAR:partitive|{{SITENAME}}}} on lisaks sellele sinu konto ja kõikide seostuvate IP-aadresside redigeerimisõigus blokeeritud.\nKui tegu on eksitusega, võta palun ühendust administraatoriga.\nSinu toimingule vastanud väärtarvitusfiltri reegli lühikirjeldus: $1",
@@ -27,10 +27,11 @@
"right-abusefilter-log": "Vaadata väärtarvituslogi",
"right-abusefilter-log-detail": "Vaadata väärtarvituslogi üksikasjalikke sissekandeid",
"right-abusefilter-private": "Vaadata väärtarvituslogis isiklikke andmeid",
+ "right-abusefilter-private-log": "Vaadata väärtarvitusfiltri isiklike üksikasjade juurdepääsu logi",
"right-abusefilter-modify-restricted": "Muuta piirangutega toimingute abil väärtarvitusfiltreid",
"right-abusefilter-revert": "Tühistada kõik kindla väärtarvitusfiltri tehtud muudatused",
- "right-abusefilter-view-private": "Vaadata erafiltreid",
- "right-abusefilter-log-private": "Vaadata isiklikuks märgitud väärtarvitusfiltri sissekandeid",
+ "right-abusefilter-view-private": "Vaadata kinniseks märgitud väärtarvitusfiltreid",
+ "right-abusefilter-log-private": "Vaadata kinniseks märgitud väärtarvitusfiltrite sissekandeid",
"right-abusefilter-hide-log": "Peita väärtarvitusfiltri logisissekandeid",
"right-abusefilter-hidden-log": "Vaadata peidetud väärtarvitusfiltri logisissekandeid",
"right-abusefilter-modify-global": "Luua või muuta globaalseid filtreid",
@@ -39,16 +40,31 @@
"action-abusefilter-log": "vaadata väärtarvituslogi",
"action-abusefilter-log-detail": "vaadata väärtarvituslogi üksikasjalikke sissekandeid",
"action-abusefilter-private": "vaadata väärtarvituslogis isiklikke andmeid",
+ "action-abusefilter-private-log": "vaadata väärtarvitusfiltri isiklike üksikasjade juurdepääsu logi",
"action-abusefilter-modify-restricted": "muuta piirangutega toimingute abil väärtarvitusfiltreid",
"action-abusefilter-revert": "tühistada kõiki kindla väärtarvitusfiltri tehtud muudatusi",
- "action-abusefilter-view-private": "vaadata isiklikuks märgitud filtreid",
+ "action-abusefilter-view-private": "vaadata kinniseks märgitud filtreid",
+ "action-abusefilter-log-private": "vaadata kinniseks märgitud väärtarvitusfiltrite logisid",
"abusefilter-log": "Väärtarvitusfiltri logi",
"abusefilter-log-summary": "Selles logis on loetletud tegevused, mille filtrid on tabanud.",
"abusefilter-log-search": "Otsimine väärtarvituslogist",
"abusefilter-log-search-user": "Kasutaja:",
- "abusefilter-log-search-filter": "Filtri-IDd (eraldatud püstkriipsudega):",
+ "abusefilter-log-search-filter": "Filtrite ID-d (eraldatud püstkriipsudega):",
"abusefilter-log-search-title": "Pealkiri:",
"abusefilter-log-search-wiki": "Viki:",
+ "abusefilter-log-search-impact": "Mõju ulatus:",
+ "abusefilter-log-search-impact-all": "Kõik toimingud",
+ "abusefilter-log-search-impact-saved": "Ainult salvestatud muudatused",
+ "abusefilter-log-search-impact-not-saved": "Ilma salvestatud muudatusteta",
+ "abusefilter-log-search-entries-label": "Nähtavus:",
+ "abusefilter-log-search-entries-all": "Kõik sissekanded",
+ "abusefilter-log-search-entries-hidden": "Ainult peidetud sissekanded",
+ "abusefilter-log-search-entries-visible": "Ainult nähtavad sissekanded",
+ "abusefilter-log-search-action-label": "Vallandav toiming:",
+ "abusefilter-log-search-action-other": "Muu",
+ "abusefilter-log-search-action-any": "Mis tahes",
+ "abusefilter-log-search-action-taken-label": "Sooritatud toiming:",
+ "abusefilter-log-search-action-taken-any": "Mis tahes",
"abusefilter-log-search-submit": "Otsi",
"abusefilter-log-entry": "$1: $2 vallandas väärtarvitusfiltri, {{GENDER:$8|sooritades}} leheküljel \"$4\" tegevust \"$3\".\nFiltritoiming: $5;\nFiltri kirjeldus: $6",
"abusefilter-log-entry-withdiff": "$1: $2 vallandas väärtarvitusfiltri, {{GENDER:$8|sooritades}} leheküljel \"$4\" tegevust \"$3\".\nFiltri sooritatud toiming: $5;\nFiltri kirjeldus: $6 ($7)",
@@ -62,25 +78,32 @@
"abusefilter-log-details-var": "Muutuja",
"abusefilter-log-details-val": "Väärtus",
"abusefilter-log-details-vars": "Toimingu parameetrid",
- "abusefilter-log-details-private": "Isiklikud andmed",
+ "abusefilter-log-details-private": "Isiklikud logiüksikasjad",
"abusefilter-log-details-ip": "Põhjustaja IP-aadress",
"abusefilter-log-noactions": "ei midagi",
"abusefilter-log-details-diff": "Redigeerimisega tehtud muudatused",
"abusefilter-log-linkoncontribs": "väärtarvituslogi",
"abusefilter-log-linkoncontribs-text": "Väärtarvituslogi selle {{GENDER:$1|kasutaja}} jaoks",
+ "abusefilter-log-linkonhistory": "vaata väärtarvituslogi",
+ "abusefilter-log-linkonhistory-text": "Vaata väärtarvituslogi selle lehekülje kohta",
"abusefilter-log-hidden": "sissekanne peidetud",
"abusefilter-log-hidden-implicit": "(peidetud, sest redaktsioon on kustutatud)",
"abusefilter-log-cannot-see-details": "Sul pole õigust näha üksikasju selle sissekande kohta.",
+ "abusefilter-log-cannot-see-private-details": "Sul pole lubatud näha selle sissekande isiklikke üksikasju.",
+ "abusefilter-log-nonexistent": "Toodud ID-ga sissekanne puudub.",
"abusefilter-log-details-hidden": "Sa ei saa selle sissekande üksikasju vaadata, sest see on üldsuse eest peidetud.",
- "abusefilter-log-private-not-included": "Määratud identifikaatoritest vähemalt üks vastab erafiltrile. Kuna sul pole lubatud vaadata erafiltrite andmeid, siis neid filtreid ei otsitud.",
+ "abusefilter-log-private-not-included": "Määratud identifikaatoritest vähemalt üks vastab kinnisele filtrile. Kuna sul pole lubatud vaadata kinniste filtrite andmeid, siis neid filtreid ei otsitud.",
"abusefilter-log-hide-legend": "Peida logisissekanne",
"abusefilter-log-hide-id": "Logisissekande ID:",
"abusefilter-log-hide-hidden": "Peida see sissekanne üldsuse eest",
"abusefilter-log-hide-reason": "Põhjus:",
"abusefilter-log-hide-forbidden": "Sul pole õigust peita väärtarvitusfiltri logisissekandeid.",
- "abusefilter-logentry-suppress": "peitis sissekande \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "tegi nähtavaks sissekande \"[[$1]]\"",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|vallandas}} filtri $4, {{GENDER:$2|sooritades}} leheküljel $3 tegevust \"$5\". Toiming: $6 ($7)",
+ "log-action-filter-abusefilter": "Filtri muudatuse tüüp:",
+ "log-action-filter-abusefilter-create": "Uue filtri koostamine",
+ "log-action-filter-abusefilter-modify": "Filtri muutmine",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|pöördus}} logisissekande $3 isiklike üksikasjade poole",
+ "abusefilterprivatedetails-log-name": "Väärtarvitusfiltri isiklike üksikasjade juurdepääsu logi",
"abusefilter-management": "Väärtarvitusfiltri haldamine",
"abusefilter-list": "Kõik filtrid",
"abusefilter-list-id": "Filtri ID",
@@ -94,13 +117,13 @@
"abusefilter-list-limit": "Lehekülje kohta:",
"abusefilter-list-lastmodified": "Viimati muudetud",
"abusefilter-list-group": "Filtrirühm",
- "abusefilter-hidden": "Erafilter",
+ "abusefilter-hidden": "Kinnine",
"abusefilter-unhidden": "Avalik",
"abusefilter-enabled": "Lubatud",
"abusefilter-deleted": "Kustutatud",
"abusefilter-disabled": "Keelatud",
"abusefilter-hitcount": "$1 {{PLURAL:$1|tabamus|tabamust}}",
- "abusefilter-new": "Loo uus filter",
+ "abusefilter-new": "Koosta uus filter",
"abusefilter-return": "Naase filtri haldamise juurde",
"abusefilter-status-global": "Globaalne",
"abusefilter-list-options": "Sätted",
@@ -112,8 +135,15 @@
"abusefilter-list-options-scope-local": "Ainult kohalikud reeglid",
"abusefilter-list-options-scope-global": "Ainult globaalsed reeglid",
"abusefilter-list-options-scope-all": "Kohalikud ja globaalsed reeglid",
- "abusefilter-list-options-disabled": "Keelatud filtrid:",
+ "abusefilter-list-options-further-options": "Lisasuvandid:",
"abusefilter-list-options-hidedisabled": "Peida keelatud filtrid",
+ "abusefilter-list-options-hideprivate": "Peida kinnised filtrid",
+ "abusefilter-list-options-searchfield": "Otsimine reeglitest:",
+ "abusefilter-list-options-searchpattern": "Sisesta võrdluskuju",
+ "abusefilter-list-options-searchoptions": "Otsirežiim:",
+ "abusefilter-list-options-search-like": "Lihtpäring",
+ "abusefilter-list-options-search-rlike": "Regulaaravaldis",
+ "abusefilter-list-options-search-irlike": "Tõstutundetu regulaaravaldis",
"abusefilter-list-options-submit": "Uuenda",
"abusefilter-tools-text": "Siin on mõned tööriistad, mis võivad olla väärtarvitusfiltrite koostamise ja veatõrje juures kasulikud.",
"abusefilter-tools-expr": "Avaldiste katsetamine",
@@ -127,16 +157,17 @@
"abusefilter-status": "Viimasest {{PLURAL:$1|ühest toimingust|$1 toimingust}} {{PLURAL:$2|üks|$2}} ($3%) on küündinud tingimuste ülemmäärani $4. {{PLURAL:$5|Üks toiming|$5 toimingut}} ($6%) on vastanud ühele praegu töötavale filtrile.",
"abusefilter-edit": "Väärtarvitusfiltri muutmine",
"abusefilter-edit-subtitle": "Filtri $1 muutmine",
- "abusefilter-edit-subtitle-new": "Filtri loomine",
+ "abusefilter-edit-subtitle-new": "Filtri koostamine",
"abusefilter-edit-oldwarning": "<strong>Muudad selle filtri vana versiooni.\nAllpool toodud arvandmed käivad filtri uusima versiooni kohta.\nKui oma muudatused salvestad, kirjutad üle kõik redigeeritavast redaktsioonist uuemad muudatused. </strong> &bull;\n[[Special:AbuseFilter/history/$2|Naase selle filtri ajaloo juurde]].",
"abusefilter-edit-status-label": "Arvandmed:",
"abusefilter-edit-status": "Viimasest {{PLURAL:$1|ühest toimingust|$1 toimingust}} on sellele filtrile vastanud $2 ($3%).",
"abusefilter-edit-status-profile": "Viimasest {{PLURAL:$1|ühest toimingust|$1 toimingust}} on sellele filtrile vastanud $2 ($3%).\nKeskmiselt on selle filtri tööaeg $4 ms ja see kasutab tingimuste ülemmäära {{PLURAL:$5|üht tingimust|$5 tingimust}}.",
- "abusefilter-edit-throttled": "'''Hoiatus''': See filter keelati automaatselt ohutuskaalutlusel.\nSee ületas $1% toimingutele vastamise piirnormi.",
"abusefilter-edit-new": "Uus filter",
"abusefilter-edit-save": "Salvesta filter",
"abusefilter-edit-id": "Filtri ID:",
+ "abusefilter-edit-switch-editor": "Vaheta toimeti",
"abusefilter-edit-description": "Kirjeldus:\n:''(avalikult nähtav)''",
+ "abusefilter-edit-field-description": "kirjeldus",
"abusefilter-edit-group": "Filtrirühm:",
"abusefilter-edit-flags": "Sätted:",
"abusefilter-edit-enabled": "Luba see filter",
@@ -144,6 +175,7 @@
"abusefilter-edit-hidden": "Peida selle filtri üksikasjad avalikust vaatest",
"abusefilter-edit-global": "Globaalne filter",
"abusefilter-edit-rules": "Tingimused:",
+ "abusefilter-edit-field-conditions": "tingimused",
"abusefilter-edit-notes": "Märkmed:",
"abusefilter-edit-lastmod": "Filtrit viimati muudetud:",
"abusefilter-edit-lastmod-text": "$1. Muutja: $2",
@@ -154,20 +186,37 @@
"abusefilter-edit-action-blockautopromote": "Võta kasutajalt automaatselt kinnitatud kasutaja õigused ära",
"abusefilter-edit-action-degroup": "Eemalda kasutaja kõigist eesõigustatud rühmadest",
"abusefilter-edit-action-block": "Keela kasutajal ja/või IP-aadressil redigeerimine",
+ "abusefilter-edit-action-blocktalk": "Keela kasutajal ja/või IP-aadressil enda arutelulehekülje redigeerimine",
"abusefilter-edit-action-throttle": "Päästa toimingud vaid siis valla, kui kasutaja ületab limiidi",
- "abusefilter-edit-action-rangeblock": "Blokeeri /16 vahemik, kust kasutaja pärineb",
+ "abusefilter-edit-action-rangeblock": "Blokeeri vastav IP-aadressivahemik, kust kasutaja pärineb",
"abusefilter-edit-action-tag": "Märgista muudatus edasiseks läbivaatuseks",
"abusefilter-edit-throttle-count": "Lubatud toimingute määr:",
- "abusefilter-edit-throttle-period": "Ajavahemik:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekund|sekundit}}",
- "abusefilter-edit-throttle-groups": "Rühma määratlus:\n:''(üks rea kohta, ühenda komadega)''",
+ "abusefilter-edit-throttle-period": "Ajavahemik (sekundites):",
+ "abusefilter-edit-throttle-groups": "Pärssimise rühmitusalus:",
+ "abusefilter-edit-throttle-ip": "IP-aadress",
+ "abusefilter-edit-throttle-user": "Kasutajakonto",
+ "abusefilter-edit-throttle-range": "/16-vahemik",
+ "abusefilter-edit-throttle-creationdate": "Serveriaeg konto loomisel",
+ "abusefilter-edit-throttle-editcount": "Redigeerimise arv",
+ "abusefilter-edit-throttle-site": "Kogu sait",
+ "abusefilter-edit-throttle-page": "Lehekülg",
"abusefilter-edit-warn-message": "Hoiatusena kasutatav süsteemisõnum:",
"abusefilter-edit-warn-other": "Muu sõnum",
- "abusefilter-edit-warn-other-label": "Muu sõnumi lehekülje pealkiri:\n:''(MediaWiki-eesliiteta)''",
+ "abusefilter-edit-warn-other-label": "Muu sõnumi lehekülje pealkiri:\n:''(eesliiteta \"MediaWiki\")''",
"abusefilter-edit-warn-actions": "Toimingud:",
- "abusefilter-edit-warn-preview": "Valitud sõnumi eelvaade",
- "abusefilter-edit-warn-edit": "Loo valitud sõnum või muuda seda",
- "abusefilter-edit-tag-tag": "Kasutatavad [[Special:Tags|märgised]] (rea kohta üks):",
+ "abusefilter-edit-warn-preview": "Näita valitud sõnumi eelvaadet või peida see",
+ "abusefilter-edit-warn-edit": "Koosta valitud sõnum või muuda seda",
+ "abusefilter-edit-disallow-message": "Süsteemisõnum keelamisel:",
+ "abusefilter-edit-disallow-other": "Muu sõnum",
+ "abusefilter-edit-disallow-other-label": "Muu sõnumi lehekülje pealkiri:\n:''(eesliiteta \"MediaWiki\")''",
+ "abusefilter-edit-disallow-actions": "Toimingud:",
+ "abusefilter-edit-disallow-preview": "Näita valitud sõnumi eelvaadet või peida see",
+ "abusefilter-edit-disallow-edit": "Koosta valitud sõnum või muuda seda",
+ "abusefilter-edit-tag-tag": "Rakendatavad [[Special:Tags|märgised]]:",
+ "abusefilter-edit-tag-placeholder": "Lisa märgised (ühekaupa või komaga eraldatud)",
+ "abusefilter-edit-tag-hidden-placeholder": "Lisa märgised (eraldatud komaga)",
+ "abusefilter-edit-block-anon-durations": "Anonüümse kasutaja blokeeringu kestus:",
+ "abusefilter-edit-block-user-durations": "Registreeritud kasutaja blokeeringu kestus:",
"abusefilter-edit-denied": "Sa ei saa selle filtri üksikasju vaadata, sest need pole avalikud.",
"abusefilter-edit-main": "Filtri näitajad",
"abusefilter-edit-done-subtitle": "Filter muudetud",
@@ -184,7 +233,7 @@
"abusefilter-edit-export": "Ekspordi see filter teise vikisse",
"abusefilter-edit-syntaxok": "Süntaksitõrkeid ei leitud.",
"abusefilter-edit-syntaxerr": "Leiti süntaksitõrge: $1",
- "abusefilter-edit-bad-tags": "Mõni määratud märgistest on sobimatu.\nMärgised peaks olema lühikesed, nad ei peaks sisaldama erimärke ja neid ei peaks kasutama muu tarkvara. Proovi valida märgisele uus nimi.",
+ "abusefilter-edit-bad-tags": "Mõni määratud märgistest on sobimatu.\nMärgised peaks olema lühikesed, nad ei tohi sisaldada erimärke ja neid ei tohi kasutada muu tarkvara. Proovi valida märgisele uus nimi.",
"abusefilter-edit-notallowed": "Sul pole lubatud väärtarvitusfiltreid luua ega muuta.",
"abusefilter-edit-notallowed-global": "Sul pole lubatud globaalseid filtreid luua ega muuta.",
"abusefilter-edit-notallowed-global-custom-msg": "Globaalsed filtrid ei toeta kohandatud hoiatussõnumeid.",
@@ -197,7 +246,9 @@
"abusefilter-edit-builder-op-arithmetic-pow": "Astendamine (**)",
"abusefilter-edit-builder-group-op-comparison": "Võrdlustehted",
"abusefilter-edit-builder-op-comparison-equal": "Võrdne (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Väärtus ja tüüp võrdne (===)",
"abusefilter-edit-builder-op-comparison-notequal": "Ei võrdu (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Väärtus ega tüüp ei võrdu (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Väiksem kui (<)",
"abusefilter-edit-builder-op-comparison-gt": "Suurem kui (>)",
"abusefilter-edit-builder-op-comparison-lte": "Väiksem või võrdne (<=)",
@@ -207,7 +258,7 @@
"abusefilter-edit-builder-op-bool-and": "Ja (&)",
"abusefilter-edit-builder-op-bool-or": "Või (|)",
"abusefilter-edit-builder-group-misc": "Mitmesugune",
- "abusefilter-edit-builder-misc-in": "sisaldub sõnes (in)",
+ "abusefilter-edit-builder-misc-in": "Sisaldub sõnes (in)",
"abusefilter-edit-builder-misc-like": "Vastab näidisele (like)",
"abusefilter-edit-builder-misc-rlike": "Vastab regulaaravaldisele (rlike)",
"abusefilter-edit-builder-misc-irlike": "Vastab regulaaravaldisele, tõstutundetu (irlike)",
@@ -220,43 +271,55 @@
"abusefilter-edit-builder-funcs-lcase": "Väiketähesta (lcase)",
"abusefilter-edit-builder-funcs-ucase": "Suurtähesta (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normaliseeri segi aetavad märgid (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normaliseeri ja otsi sõnest mitut alamsõnet režiimis OR (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Normaliseeri ja otsi sõnest mitut alamsõnet režiimis AND (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Eemalda kahekordsed märgid (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Erimärkide ja kõigi märkide suhe (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normaliseeri (norm)",
"abusefilter-edit-builder-funcs-count": "Sõne X esinemiste arv sõnes Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Regulaaravaldise X esinemiste arv sõnes Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Massiiv regulaaravaldise vastetest tekstis iga hõiverühma kohta (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Eemalda tühemikud (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Eemalda erimärgid (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Kas IP-aadress on vahemikus? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Teiste sõnede sisaldumine sõnes (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Otsi sõnest mitut alamsõnet režiimis OR (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Otsi sõnest mitut alamsõnet režiimis AND (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Kontrolli, kas argument on võrdne (===) mõnega järgmistest argumentidest (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Alamsõne (substr)",
"abusefilter-edit-builder-funcs-strpos": "Alamsõne asukoht sõnes (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Asenda alamsõne sõnega (str_replace)",
+ "abusefilter-edit-builder-funcs-rescape": "Katkestussõne regulaaravaldise literaalina (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Määra muutuja (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Normaliseeri HTML-olemid Unicode'i märkideks (sanitize)",
"abusefilter-edit-builder-group-vars": "Muutujad",
"abusefilter-edit-builder-vars-accountname": "Kontonimi (konto loomisel)",
"abusefilter-edit-builder-vars-timestamp": "Muudatuse Unix-ajatempel",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Logi ajatempel",
"abusefilter-edit-builder-vars-action": "Toiming",
"abusefilter-edit-builder-vars-addedlines": "Muudatusega lisatud read",
"abusefilter-edit-builder-vars-delta": "Muudatusega kaasnev suuruse muutus",
"abusefilter-edit-builder-vars-diff": "Muudatusest lähtuva redaktsiooni erinevus",
"abusefilter-edit-builder-vars-newsize": "Uue lehekülje suurus",
"abusefilter-edit-builder-vars-oldsize": "Vana lehekülje suurus",
+ "abusefilter-edit-builder-vars-old-content-model": "Vana sisumudel",
+ "abusefilter-edit-builder-vars-new-content-model": "Uus sisumudel",
"abusefilter-edit-builder-vars-removedlines": "Muudatusega eemaldatud read",
"abusefilter-edit-builder-vars-summary": "Resümee või põhjus",
- "abusefilter-edit-builder-vars-article-id": "Lehekülje ID",
- "abusefilter-edit-builder-vars-article-ns": "Lehekülje nimeruum",
- "abusefilter-edit-builder-vars-article-text": "Lehekülje pealkiri (nimeruumita)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Lehekülje kogupealkiri",
- "abusefilter-edit-builder-vars-article-views": "Lehekülje vaatamisi",
+ "abusefilter-edit-builder-vars-page-id": "Lehekülje ID",
+ "abusefilter-edit-builder-vars-page-ns": "Lehekülje nimeruum",
+ "abusefilter-edit-builder-vars-page-title": "Lehekülje pealkiri (nimeruumita)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Lehekülje kogupealkiri",
+ "abusefilter-edit-builder-vars-page-age": "Lehekülje vanus (sekundites)",
"abusefilter-edit-builder-vars-movedfrom-id": "Teisaldamise lähtelehekülje ID",
"abusefilter-edit-builder-vars-movedfrom-ns": "Teisaldamise lähtelehekülje nimeruum",
- "abusefilter-edit-builder-vars-movedfrom-text": "Teisaldamise lähtelehekülje pealkiri",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Teisaldamise lähtelehekülje kogupealkiri",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Teisaldamise lähtelehekülje pealkiri",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Teisaldamise lähtelehekülje kogupealkiri",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Teisaldamise lähtelehekülje vanus (sekundites)",
"abusefilter-edit-builder-vars-movedto-id": "Teisaldamise sihtlehekülje ID",
"abusefilter-edit-builder-vars-movedto-ns": "Teisaldamise sihtlehekülje nimeruum",
- "abusefilter-edit-builder-vars-movedto-text": "Teisaldamise sihtlehekülje pealkiri",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Teisaldamise sihtlehekülje kogupealkiri",
+ "abusefilter-edit-builder-vars-movedto-title": "Teisaldamise sihtlehekülje pealkiri",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Teisaldamise sihtlehekülje kogupealkiri",
+ "abusefilter-edit-builder-vars-movedto-age": "Teisaldamise sihtlehekülje vanus (sekundites)",
"abusefilter-edit-builder-vars-user-editcount": "Kasutaja kaastööde hulk",
"abusefilter-edit-builder-vars-user-age": "Kasutajakonto vanus",
"abusefilter-edit-builder-vars-user-name": "Kasutajakonto nimi",
@@ -266,23 +329,43 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "E-posti aadressi kinnitamisaeg",
"abusefilter-edit-builder-vars-recent-contributors": "Viimased kümme lehekülge muutnud kasutajat",
"abusefilter-edit-builder-vars-first-contributor": "Kasutaja, kes lehekülge alustas",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Teisaldamise lähtelehekülje viimased kümme kaastöölist",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Teisaldamise lähtelehekülge alustanud kasutaja",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Teisaldamise sihtlehekülje viimased kümme kaastöölist",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Teisaldamise sihtlehekülge alustanud kasutaja",
"abusefilter-edit-builder-vars-all-links": "Kõik uues tekstis sisalduvad välislingid",
"abusefilter-edit-builder-vars-added-links": "Kõik muudatusega lisatud välislingid",
"abusefilter-edit-builder-vars-removed-links": "Kõik muudatusega eemaldatud välislingid",
- "abusefilter-edit-builder-vars-old-text": "Muudatuse-eelse lehekülje vikitekst",
+ "abusefilter-edit-builder-vars-old-text": "Muudatuse-eelse lehekülje vikitekst (ei ole enam kasutuses)",
"abusefilter-edit-builder-vars-new-text": "Muudatuse-järgse lehekülje vikitekst",
+ "abusefilter-edit-builder-vars-new-pst": "Lehekülje uus vikitekst, salvestamiseelne tekst teisendatud",
+ "abusefilter-edit-builder-vars-diff-pst": "Tehtud muudatuste ühenderinevused, salvestamiseelne tekst teisendatud",
+ "abusefilter-edit-builder-vars-addedlines-pst": "Muudatusega lisatud read, salvestamiseelne tekst teisendatud",
"abusefilter-edit-builder-vars-new-text-stripped": "Uus lehekülje tekst igasuguse märgistuseta",
"abusefilter-edit-builder-vars-new-html": "Uue redaktsiooni liigendatud HTML-lähtekood",
"abusefilter-edit-builder-vars-restrictions-edit": "Lehekülje redigeerimiskaitsetase",
"abusefilter-edit-builder-vars-restrictions-move": "Lehekülje teisaldamiskaitsetase",
- "abusefilter-edit-builder-vars-restrictions-create": "Lehekülje loomiskaitse",
+ "abusefilter-edit-builder-vars-restrictions-create": "Lehekülje alustamise kaitse",
"abusefilter-edit-builder-vars-restrictions-upload": "Faili üleslaadimiskaitse",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Teisaldamise lähtelehekülje redigeerimiskaitse tase",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Teisaldamise lähtelehekülje teisaldamiskaitse tase",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Teisaldamise lähtelehekülje alustamiskaitse tase",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Teisaldamise lähtefaili üleslaadimiskaitse tase",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Teisaldamise sihtlehekülje redigeerimiskaitse tase",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Teisaldamise sihtlehekülje teisaldamiskaitse tase",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Teisaldamise sihtlehekülje alustamiskaitse tase",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Teisaldamise sihtfaili üleslaadimiskaitse tase",
"abusefilter-edit-builder-vars-old-text-stripped": "Vana lehekülje tekst igasuguse märgistuseta",
"abusefilter-edit-builder-vars-old-links": "Muudatuse-eelsel leheküljel olnud lingid",
- "abusefilter-edit-builder-vars-old-html": "Lehekülje vana HTML-koodiks liigendaud vikitekst",
+ "abusefilter-edit-builder-vars-old-html": "Lehekülje vana HTML-koodiks liigendaud vikitekst (ei ole enam kasutuses)",
"abusefilter-edit-builder-vars-minor-edit": "Kas märgitud pisimuudatuseks?",
"abusefilter-edit-builder-vars-file-sha1": "Faili sisu SHA1-räsi",
"abusefilter-edit-builder-vars-file-size": "Faili suurus baitides",
+ "abusefilter-edit-builder-vars-file-mime": "Faili MIME tüüp",
+ "abusefilter-edit-builder-vars-file-mediatype": "Faili meediumitüüp",
+ "abusefilter-edit-builder-vars-file-width": "Faili laius pikslites",
+ "abusefilter-edit-builder-vars-file-height": "Faili kõrgus pikslites",
+ "abusefilter-edit-builder-vars-file-bits-per-channel": "Bitte faili värvuskanali kohta",
"abusefilter-filter-log": "Viimased filtri muudatused",
"abusefilter-history": "$1. väärtarvitusfiltri muudatuste ajalugu",
"abusefilter-history-foruser": "Kasutaja $1 muudatused",
@@ -301,6 +384,7 @@
"abusefilter-history-filterid": "Filter",
"abusefilter-history-select-legend": "Täpsem otsimine",
"abusefilter-history-select-user": "Kasutaja:",
+ "abusefilter-history-select-filter": "Filtri ID:",
"abusefilter-history-select-submit": "Täpsusta",
"abusefilter-history-diff": "Muudatused",
"abusefilter-history-error-hidden": "Soovitud filter on peidetud ja sa ei saa selle ajalugu vaadata.",
@@ -311,16 +395,17 @@
"abusefilter-exception-unclosedstring": "Sulgemata sõne, mis algab $1. märgi juures.",
"abusefilter-exception-invalidoperator": "Vigane operaator \"$2\" $1. märgi juures.",
"abusefilter-exception-unrecognisedtoken": "Tundmatu märk \"$2\" $1. märgi juures.",
- "abusefilter-exception-noparams": "$1. märgi juures puuduvad funktsiooni \"$2\" parameetrid.",
+ "abusefilter-exception-noparams": "$1. märgi juures puuduvad funktsiooni \"$2\" parameetrid.\nOodati {{PLURAL:$3|üht argumenti|$3 argumenti}}.",
"abusefilter-exception-dividebyzero": "Lubamatu katse jagada $1. märgi juures väärtust $2 nulliga.",
"abusefilter-exception-unrecognisedvar": "Tundmatu muutuja \"$2\" $1. märgi juures",
"abusefilter-exception-notenoughargs": "Funktsiooni $2 jaoks ei kutsutud märgi $1 juures piisavalt argumente.\nOodati {{PLURAL:$3|üht|$3}} argumenti, oli aga $4",
- "abusefilter-exception-regexfailure": "Tõrge regulaaravaldises \"$3\" $1. märgi juures: \"$2\"",
+ "abusefilter-exception-regexfailure": "Tõrge regulaaravaldises \"$2\" $1. märgi juures.",
"abusefilter-exception-overridebuiltin": "Sisseehitatud muutuja \"$2\" reeglitevastane ülekirjutus märgi $1 juures.",
- "abusefilter-exception-outofbounds": "Päring olematu loendiüksuse $2 (loendi suurus: $3) kohta $1. märgi juures.",
+ "abusefilter-exception-outofbounds": "Päring olematu massiiviüksuse $2 (massiivi suurus: $3) kohta $1. märgi juures.",
"abusefilter-action-tag": "Märgista",
- "abusefilter-action-throttle": "Drosselda",
+ "abusefilter-action-throttle": "Pärsi",
"abusefilter-action-warn": "Hoiata",
+ "abusefilter-action-blockautopromote": "Takista automaatset õiguste andmist",
"abusefilter-action-block": "Blokeeri",
"abusefilter-action-degroup": "Eemalda rühmadest",
"abusefilter-action-rangeblock": "Vahemiku blokeering",
@@ -332,7 +417,7 @@
"abusefilter-revert-periodstart": "Vahemiku algus:",
"abusefilter-revert-periodend": "Vahemiku lõpp:",
"abusefilter-revert-search": "Vali tegevused",
- "abusefilter-revert-filter": "Filter:",
+ "abusefilter-revert-filter": "Filtri ID:",
"abusefilter-revert-preview-intro": "Allpool on loetletud väärtarvitusfiltri tegevused, mis tühistatakse selle toiminguga.\nPalun kontrolli neid hoolikalt ning klõpsa \"{{int:abusefilter-revert-confirm}}\", et oma valikut kinnitada.",
"abusefilter-revert-confirm": "Kinnita",
"abusefilter-revert-success": "Oled tühistanud kõik toimingud, mille väärtarvitusfilter sooritas [[Special:AbuseFilter/$1|filtri $2]] tõttu.",
@@ -345,12 +430,20 @@
"abusefilter-test-submit": "Katseta",
"abusefilter-test-load": "Laadi",
"abusefilter-test-user": "Muudatuste tegija:",
+ "abusefilter-test-nobots": "Peida robotimuudatused",
"abusefilter-test-period-start": "Hilisemad muudatused kui:",
"abusefilter-test-period-end": "Varasemad muudatused kui:",
"abusefilter-test-page": "Muudetud lehekülg:",
"abusefilter-test-shownegative": "Näita muudatusi, mis ei vasta filtrile",
"abusefilter-test-syntaxerr": "Sisestatud filtris oli süntaksitõrge.\nLisaselgituse jaoks klõpsa nuppu \"{{int:abusefilter-edit-check}}\".",
"abusefilter-test-badtitle": "Lehekülje pealkiri, mille sisestasid, oli vigane. Võimalik, et see sisaldab märke, mida ei saa pealkirjades kasutada.",
+ "abusefilter-test-action": "Toimingu tüüp:",
+ "abusefilter-test-search-type-all": "Kõik toimingud",
+ "abusefilter-test-search-type-edit": "Redigeerimised",
+ "abusefilter-test-search-type-move": "Teisaldamised",
+ "abusefilter-test-search-type-delete": "Kustutamised",
+ "abusefilter-test-search-type-upload": "Üleslaadimised",
+ "abusefilter-test-search-type-createaccount": "Kontode loomised",
"abusefilter-changeslist-examine": "uuri",
"abusefilter-examine": "Üksikute muudatuste uurimine",
"abusefilter-examine-intro": "See lehekülg võimaldab uurida üksikute muudatuste jaoks tekitatud muutujaid, mille loob väärtarvitusfilter, ja neid filtrite peal katsetada.",
@@ -377,7 +470,8 @@
"abusefilter-topnav-import": "Filtri importimine",
"abusefilter-log-name": "Väärtarvitusfiltri logi",
"abusefilter-log-header": "Selles logis kuvatakse kokkuvõte filtrite muudatustest.\nÜksikasjad leiad hiljutiste filtrimuudatuste [[Special:AbuseFilter/history|loendist]].",
- "abusefilter-log-entry-modify": "muutis filtrit $1 ($2)",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|koostas}} $4 ($5)",
+ "abusefilter-logentry-modify": "$1 {{GENDER:$2|muutis}} $4 sätteid ($5)",
"abusefilter-log-noresults": "Tulemusi pole",
"abusefilter-diff-title": "Erinevused versioonide vahel",
"abusefilter-diff-item": "Üksus",
@@ -391,5 +485,13 @@
"abusefilter-import-intro": "Selle liidese abil saad teistest vikidest filtreid importida.\nAllikvikis klõpsa redigeerimisliidese asukohas \"{{int:abusefilter-edit-tools}}\" nuppu \"{{int:abusefilter-edit-export}}\".\nKopeeri ilmuva tekstikasti sisu, kleebi see sellesse tekstikasti ja seejärel klõpsa nuppu \"{{int:abusefilter-import-submit}}\".",
"abusefilter-import-submit": "Impordi andmed",
"abusefilter-group-default": "Tavaline",
- "abusefilter-http-error": "Esines HTTP-tõrge: $1."
+ "abusefilter-http-error": "Esines HTTP-tõrge: $1.",
+ "abusefilter-view-private-submit": "Vaata isiklikke üksikasju",
+ "abusefilter-view-private": "Isiklike üksikasjade vaatamine",
+ "abusefilter-view-private-reason": "Põhjus isiklike üksikasjade juurde pääseda:",
+ "abusefilter-log-details-id": "Logisissekande ID",
+ "log-description-abusefilterprivatedetails": "Siin on logitud korrad, mil kasutaja pöördub väärtarvitusfiltri isiklike üksikasjade poole.",
+ "abusefilter-noreason": "Hoiatus: Selleks et näha selle logi isiklikke üksikasju, pead esitama põhjuse.",
+ "tag-abusefilter-condition-limit": "Tingimuste ülempiir käes",
+ "tag-abusefilter-condition-limit-description": "Redaktsioonid või muud sündmused, mida polnud võimalik kõigi aktiivsete [[Special:AbuseFilter|väärtarvitusfiltritega]] kontrollida ([[mw:Extension:AbuseFilter/Conditions|spikker]])."
}
diff --git a/AbuseFilter/i18n/eu.json b/AbuseFilter/i18n/eu.json
index a9aae152..7478d674 100644
--- a/AbuseFilter/i18n/eu.json
+++ b/AbuseFilter/i18n/eu.json
@@ -17,19 +17,33 @@
"abusefilter-desc": "Edizioei heuristika automatikoa aplikatzen die",
"abusefilter": "Gehiegikerien iragazkiaren konfigurazioa",
"abuselog": "Gehiegikerien erregistroa",
- "abusefilter-mustbeeditor": "Segurtasun arrazoiak direla eta, gehiegikeria-filtroak aldatzeko eskumena duten erabiltzaileek soilik balia dezakete interfaze hau.",
+ "abusefilter-blocker": "Gehiegikeria iragazkia",
"right-abusefilter-modify": "Gehiegikeria iragazkiak aldatu",
"right-abusefilter-view": "Gehiegikeria iragazkiak ikusi",
"right-abusefilter-log": "Gehiegikeria loga ikusi",
"right-abusefilter-log-detail": "Gehiegikeria log sarrera detailatua ikusi",
"right-abusefilter-private": "Ikusi datu pribatuak gehiegikeria logean",
+ "action-abusefilter-modify": "gehiegikeria iragazkiak aldatu",
+ "action-abusefilter-view": "Gehiegikeria iragazkiak ikusi",
+ "action-abusefilter-log": "Gehiegikeria loga ikusi",
+ "action-abusefilter-log-detail": "Gehiegikeria log sarrera detailatuak ikusi",
+ "action-abusefilter-private": "Ikusi datu pribatuak gehiegikeria logean",
"abusefilter-log": "Gehiegikeria iragazki loga",
"abusefilter-log-search": "Bilatu gehiegikeria loga",
"abusefilter-log-search-user": "Lankide:",
"abusefilter-log-search-filter": "ID iragazkia (barra bertikalekin banatu):",
"abusefilter-log-search-title": "Izenburua:",
+ "abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-entries-label": "Ikusgarritasuna:",
+ "abusefilter-log-search-entries-all": "Sarrera guztiak",
+ "abusefilter-log-search-entries-hidden": "Ezkutuko sarrerak soilik",
+ "abusefilter-log-search-entries-visible": "Ikusi daitezkeen sarrerak soilik",
"abusefilter-log-search-submit": "Bilatu",
+ "abusefilter-log-detailedentry-global": "$1 iragazi globala",
+ "abusefilter-log-detailedentry-local": "$1 iragazkia",
"abusefilter-log-detailslink": "zehaztapenak",
+ "abusefilter-log-diff": "ezb",
+ "abusefilter-log-hidelink": "ikusgarritasuna egokitu",
"abusefilter-log-details-legend": "$1 log sarreraren zehaztapenak",
"abusefilter-log-details-var": "Aldagarria",
"abusefilter-log-details-val": "Balioa",
@@ -37,6 +51,10 @@
"abusefilter-log-details-private": "Datu pribatuak",
"abusefilter-log-details-ip": "IP helbide sortzailea",
"abusefilter-log-noactions": "bat ere ez",
+ "abusefilter-log-details-diff": "Aldaketan egindako aldaketak",
+ "abusefilter-log-linkoncontribs": "gehiegikerien erregistroa",
+ "abusefilter-log-linkoncontribs-text": "{{GENDER:$1|erabiltzaile honentzako}} gehiegikerien erregistroa",
+ "abusefilter-log-hidden": "(sarrera ezkutatua)",
"abusefilter-log-hide-reason": "Arrazoia:",
"abusefilter-management": "Gehiegikeria iragazkiaren kudeaketa",
"abusefilter-list": "Iragazki guztiak",
@@ -50,6 +68,7 @@
"abusefilter-list-details": "Xehetasunak",
"abusefilter-list-limit": "Kopurua orrialdeko:",
"abusefilter-list-lastmodified": "Azken aldaketa",
+ "abusefilter-list-group": "Iragazi taldea",
"abusefilter-hidden": "Pribatua",
"abusefilter-unhidden": "Publikoa",
"abusefilter-enabled": "Gaitua",
@@ -57,13 +76,17 @@
"abusefilter-disabled": "Ezgaitua",
"abusefilter-hitcount": "{{PLURAL:$1|hit 1|$1 hit}}",
"abusefilter-new": "Iragazki berria sortu",
+ "abusefilter-return": "Iragazi kudeatzailera bueltatu",
"abusefilter-status-global": "Globala",
"abusefilter-list-options": "Aukerak",
"abusefilter-list-options-deleted": "Ezabatutako iragazkiak:",
"abusefilter-list-options-deleted-only": "Erakutsi ezbatutako iragazkiak bakarrik",
"abusefilter-list-options-deleted-hide": "Ezkutatu ezabatutako iragazkiak",
"abusefilter-list-options-deleted-show": "Sartu ezabatutako iragazkiak",
- "abusefilter-list-options-disabled": "Ezgaitutako iragazkiak:",
+ "abusefilter-list-options-scope": "Erakutsi iragazkiak:",
+ "abusefilter-list-options-scope-local": "Arau lokalak soilik",
+ "abusefilter-list-options-scope-global": "Arau globalak soilik",
+ "abusefilter-list-options-scope-all": "Arau lokal eta globalak",
"abusefilter-list-options-hidedisabled": "Ezkutatu ezgaitutako iragazkiak",
"abusefilter-list-options-submit": "Eguneratu",
"abusefilter-tools-expr": "Espresio frogagailua",
@@ -71,6 +94,7 @@
"abusefilter-tools-reautoconfirm": "Berrezarri autokonfirmazio egoera",
"abusefilter-tools-reautoconfirm-user": "Lankidea:",
"abusefilter-tools-reautoconfirm-submit": "Berriro autokonfirmatu",
+ "abusefilter-edit": "Gehiegikeria iragazia aldatzen",
"abusefilter-edit-subtitle": "$1 iragazkia editatzen",
"abusefilter-edit-subtitle-new": "Iragazkiaren sorrera",
"abusefilter-edit-status-label": "Estatistikak:",
@@ -78,19 +102,24 @@
"abusefilter-edit-save": "Iragazkia gorde",
"abusefilter-edit-id": "Iragazkiaren identifikazioa (ID):",
"abusefilter-edit-description": "Deskribapena:\n:''(publikoki ikusgai)''",
+ "abusefilter-edit-group": "Iragazi taldea:",
+ "abusefilter-edit-flags": "Markak:",
"abusefilter-edit-enabled": "Gaitu iragazki hau",
"abusefilter-edit-deleted": "Markatu ezabatua gisa",
+ "abusefilter-edit-global": "Iragazi globala",
"abusefilter-edit-rules": "Baldintzak:",
"abusefilter-edit-notes": "Oharrak:",
+ "abusefilter-edit-lastmod": "Iragazia azkenekoz aldatua:",
+ "abusefilter-edit-lastmod-text": "$1 $2-(e)n bidez",
"abusefilter-edit-action-block": "Erabiltzailea eta/edo IP helbidea blokeatu ediziorik egin ez dezan",
"abusefilter-edit-throttle-count": "Baimendu beharreko ekintza kopurua",
"abusefilter-edit-throttle-period": "Denbora periodoa:",
- "abusefilter-edit-throttle-seconds": "{{PLURAL:$1|segundu bat|$1 segundu}}",
"abusefilter-edit-warn-other": "Beste mezu bat",
"abusefilter-edit-warn-actions": "Ekintzak:",
"abusefilter-edit-warn-preview": "Hautatutako mezuaren aurrebista erakutsi",
"abusefilter-edit-warn-edit": "Sortu/Editatu hautatutako mezua",
"abusefilter-edit-main": "Iragazkiaren parametroak",
+ "abusefilter-edit-done-subtitle": "Iragazia aldatua",
"abusefilter-edit-viewhistory": "Iragazki honen historia begiratu",
"abusefilter-edit-history": "Historia:",
"abusefilter-edit-check": "Egiaztatu sintaxia",
@@ -123,6 +152,7 @@
"abusefilter-edit-builder-misc-cond": "Baldintza (if X then Y else Z)",
"abusefilter-edit-builder-group-funcs": "Funtzioak",
"abusefilter-edit-builder-funcs-length": "Karaktere-katearen luzera (length)",
+ "abusefilter-edit-builder-funcs-norm": "Normalizatu (norm)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Kendu zuriunea (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Kendu karaktere bereziak (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "IPa tartearen barruan dago? (ip_in_range)",
@@ -134,8 +164,9 @@
"abusefilter-edit-builder-vars-newsize": "Orrialdearen tamaina berria",
"abusefilter-edit-builder-vars-oldsize": "Orrialdearen tamaina zaharra",
"abusefilter-edit-builder-vars-summary": "Aldaketaren laburpena edo arrazoia",
- "abusefilter-edit-builder-vars-article-id": "Orriaren IDa",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Orrialdearen izenburu osoa",
+ "abusefilter-edit-builder-vars-page-id": "Orriaren IDa",
+ "abusefilter-edit-builder-vars-page-ns": "Orri izen-tartea",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Orrialdearen izenburu osoa",
"abusefilter-edit-builder-vars-user-editcount": "Erabiltzailearen edizioen kontagailua",
"abusefilter-edit-builder-vars-user-age": "Lankide kontuaren adina",
"abusefilter-edit-builder-vars-user-name": "Lankide kontuaren izena",
@@ -147,8 +178,11 @@
"abusefilter-history-global": "Globala",
"abusefilter-history-timestamp": "Ordua",
"abusefilter-history-user": "Erabiltzailea",
+ "abusefilter-history-flags": "Markak",
+ "abusefilter-history-filter": "Iragazi araua",
"abusefilter-history-comments": "Iruzkinak",
"abusefilter-history-actions": "Ekintzak",
+ "abusefilter-history-backedit": "Iragazi kudeatzailera bueltatu",
"abusefilter-history-deleted": "Ezabatua",
"abusefilter-history-filterid": "Iragazkia",
"abusefilter-history-select-user": "Lankide:",
@@ -156,6 +190,7 @@
"abusefilter-action-tag": "Etiketa",
"abusefilter-action-warn": "Abisatu",
"abusefilter-action-block": "Blokeatu",
+ "abusefilter-action-degroup": "Taldeetatik kendu",
"abusefilter-action-disallow": "Debekatu",
"abusefilter-revert-periodstart": "Periodoaren hasiera:",
"abusefilter-revert-periodend": "Periodoaren amaiera:",
@@ -163,6 +198,7 @@
"abusefilter-revert-filter": "Iragazkia:",
"abusefilter-revert-confirm": "Berretsi",
"abusefilter-revert-reasonfield": "Arrazoia:",
+ "abusefilter-test-submit": "Froga",
"abusefilter-test-load": "Kargatu",
"abusefilter-test-user": "Erabiltzaileak egindako aldaketak:",
"abusefilter-test-period-start": "Geroago egindako aldaketak:",
diff --git a/AbuseFilter/i18n/fa.json b/AbuseFilter/i18n/fa.json
index 61e43f07..f429b251 100644
--- a/AbuseFilter/i18n/fa.json
+++ b/AbuseFilter/i18n/fa.json
@@ -24,14 +24,15 @@
"Alirezaaa",
"Mehran",
"Hosseinblue",
- "Matma Rex"
+ "Matma Rex",
+ "Alifakoor",
+ "Fatemi127"
]
},
"abusefilter-desc": "اکتشافات خودکاری را بر روی ویرایش‌های انجام می‌دهد.",
"abusefilter": "پیکربندی پالایهٔ خرابکاری",
"abuselog": "سیاهه خرابکاری",
"abusefilter-intro": "به صفحهٔ مدیریت پالایهٔ خرابکاری خوش‌آمدید.\nپالایهٔ خرابکاری سازوکاری نرم‌افزاری برای اعمال اکتشافات خودکار روی تمامی اعمال است.\nاین صفحه تمام پالایه‌های تعریف‌شده را فهرست و امکان تغییر آن‌ها را فراهم می‌کند.",
- "abusefilter-mustbeeditor": "به دلایل امنیتی تنها کاربران دارای دسترسی تغییر پالایه‌های خرابکاری اجازهٔ استفاده از این واسط را دارند.",
"abusefilter-warning": "'''هشدار''': این کار به طور خودکار نادرست تشخیص داده‌شده‌است.\nویرایش‌های غیرسازنده به سرعت واگردانی خواهند شد،\nو ویرایش‌های مخرب یا تکرار ویرایش‌های غیرسازنده منجر به بسته شدن حساب یا نشانی آی‌پی شما خواهد شد.\nاگر مطمئنید که این عمل مفید است، برای تأیید آن باید آن را دوباره ارسال کنید.\nخلاصه‌ای از توضیح قانون جلوگیری از خرابکاری که با کار شما مطابقت دارد چنین است: $1",
"abusefilter-disallowed": "این کار به طور خودکار نادرست تشخیص داده شده‌است و بنابراین نامجاز است.\nاگر فکر می‌کنید که عملتان درست بوده‌است لطفاً به یکی از مدیران بگویید که چه می‌خواهید بکنید.\nخلاصه‌ای از توضیح قانون جلوگیری از خرابکاری که با کار شما مطابقت دارد چنین است: $1",
"abusefilter-blocked-display": "این کار به طور خودکار نادرست تشخیص داده‌شده است، و شما از اجرای آن منع شدید.\nبه علاوه، برای حفاظت از {{SITENAME}}، حساب شما و آی‌پی‌های مرتبط با آن به طور خودکار بسته شده‌اند.\nاگر فکر می‌کنید اشتباهی شده با یکی از مدیران تماس بگیرید.\nخلاصه‌ای از توضیح قانون جلوگیری از خرابکاری که با کار شما مطابقت دارد چنین است: $1",
@@ -46,6 +47,7 @@
"right-abusefilter-log": "مشاهدهٔ سیاههٔ خرابکاری",
"right-abusefilter-log-detail": "مشاهدهٔ سیاههٔ خرابکاری به همراه جزئیات",
"right-abusefilter-private": "مشاهدهٔ اطلاعات خصوصی در سیاههٔ خرابکاری",
+ "right-abusefilter-private-log": "نمایش جزئیات خصوصی سیاههٔ دسترسی به پالایهٔ سوءاستفاده",
"right-abusefilter-modify-restricted": "ویرایش پالایه‌های خرابکاری دارای اقدامات محدودکننده",
"right-abusefilter-revert": "واگردانی تمام تغییرات توسط یک پالایهٔ خرابکاری",
"right-abusefilter-view-private": "مشاهدهٔ پالایه‌های خرابکاری علامت خورده به عنوان خصوصی",
@@ -58,6 +60,7 @@
"action-abusefilter-log": "مشاهدهٔ سیاههٔ خرابکاری",
"action-abusefilter-log-detail": "مشاهدهٔ سیاههٔ خرابکاری به همراه جزئیات",
"action-abusefilter-private": "مشاهدهٔ اطلاعات خصوصی در سیاههٔ خرابکاری",
+ "action-abusefilter-private-log": "مشاهده سیاههٔ دسترسی به جزئیات خصوصی سیاههٔ خرابکاری",
"action-abusefilter-modify-restricted": "ویرایش پالایه‌های خرابکاری دارای اقدامات محدودکننده",
"action-abusefilter-revert": "واگردانی تمام تغییرات توسط یک پالایهٔ خرابکاری",
"action-abusefilter-view-private": "مشاهدهٔ پالایه‌های خرابکاری علامت خورده به عنوان خصوصی",
@@ -69,10 +72,18 @@
"abusefilter-log-search-filter": "شناسهٔ پالایه (با خط عمودی جدا کنید):",
"abusefilter-log-search-title": "عنوان:",
"abusefilter-log-search-wiki": "ویکی:",
+ "abusefilter-log-search-impact": "تأثیر:",
+ "abusefilter-log-search-impact-all": "تمام کنش‌ها",
+ "abusefilter-log-search-impact-saved": "تنها تغییرات ذخیره شده",
+ "abusefilter-log-search-impact-not-saved": "بدون تغییر ذخیره شده",
"abusefilter-log-search-entries-label": "پدیداری:",
"abusefilter-log-search-entries-all": "تمام ورودی‌ها",
"abusefilter-log-search-entries-hidden": "فقط ورودی‌های پنهان",
"abusefilter-log-search-entries-visible": "فقط ورودی‌های آشکار",
+ "abusefilter-log-search-action-other": "سایر",
+ "abusefilter-log-search-action-any": "هر کدام",
+ "abusefilter-log-search-action-taken-label": "اقدام صورت‌گرفته:",
+ "abusefilter-log-search-action-taken-any": "همه",
"abusefilter-log-search-submit": "جستجو",
"abusefilter-log-entry": "$1: $2 در حال {{GENDER:$8|انجام}} عمل «$3» بر روی $4 یک پالایهٔ خرابکاری را فعال {{GENDER:$8|کرد}}.\nاقدام صورت‌گرفته: $5؛\nتوضیحات پالایه: $6",
"abusefilter-log-entry-withdiff": "$1: $2 در حال {{GENDER:$8|انجام}} عمل «$3» بر روی $4 یک پالایهٔ خرابکاری را فعال {{GENDER:$8|کرد}}.‌\nاقدام صورت‌گرفته: $5؛\nتوضیحات پالایه: $6 ($7)",
@@ -86,15 +97,19 @@
"abusefilter-log-details-var": "متغیر",
"abusefilter-log-details-val": "مقدار",
"abusefilter-log-details-vars": "پارامترهای عمل",
- "abusefilter-log-details-private": "اطلاعات خصوصی",
+ "abusefilter-log-details-private": "جزئیات خصوصی سیاهه",
"abusefilter-log-details-ip": "آدرس آی‌پی اصلی",
+ "abusefilter-log-details-checkuser": "بازرسی کاربر",
"abusefilter-log-noactions": "هیچ",
"abusefilter-log-details-diff": "تغییرات انجام شده در ویرایش",
"abusefilter-log-linkoncontribs": "سیاههٔ خرابکاری",
"abusefilter-log-linkoncontribs-text": "سیاههٔ خرابکاری‌ها برای {{GENDER:$1|این کاربر}}",
+ "abusefilter-log-linkonhistory": "مشاهدهٔ سیاههٔ خرابکاری",
+ "abusefilter-log-linkonhistory-text": "نمایش سیاههٔ خرابکاری این صفحه",
"abusefilter-log-hidden": "(مورد پنهان)",
"abusefilter-log-hidden-implicit": "(پنهان‌شده چون نسخه حذف شده است)",
"abusefilter-log-cannot-see-details": "برای مشاهده جزئیات این مورد دسترسی ندارید.",
+ "abusefilter-log-cannot-see-private-details": "شما اجازهٔ دیدن جزئیات خصوصی این مورد را ندارید.",
"abusefilter-log-nonexistent": "ورودی‌ای با شناسهٔ ارائه‌شده وجود ندارد.",
"abusefilter-log-details-hidden": "شما نمی‌توانید جزئیات این مورد را ببینید چون از دید عموم مخفی شده‌است.",
"abusefilter-log-private-not-included": "یک یا چند مورد از شناسه‌های پالایه‌ای که انتخاب کرده‌اید خصوصی هستند. به این دلیل که شما مجاز به دیدن جزئیات پالایه‌های خصوصی نیستند، این فیلترها جستجو نشدند.",
@@ -102,13 +117,20 @@
"abusefilter-log-hide-id": "شناسه مورد در سیاهه:",
"abusefilter-log-hide-hidden": "پنهان کردن این مورد از دید عموم",
"abusefilter-log-hide-reason": "دلیل:",
+ "abusefilter-log-hide-reason-other": "دلیل دیگر/اضافی:",
"abusefilter-log-hide-forbidden": "شما دسترسی لازم برای پنهان کردن موارد سیاههٔ خرابکاری را ندارید.",
- "abusefilter-logentry-suppress": "«[[$1]]» را پنهان کرد",
- "abusefilter-logentry-unsuppress": "«[[$1]]» را آشکار کرد",
+ "abusefilter-log-entry-suppress": "$1 $3 را {{GENDER:$2|مخفی کرد}}",
+ "abusefilter-log-entry-unsuppress": "$1 $3 را {{GENDER:$2|از حالت مخفی درآورد}}",
"logentry-abusefilter-hit": "$1 در حال انجام {{GENDER:$2|دادن}} عمل «$5» در $3 $4 را فعال {{GENDER:$2|کرد}}. اقدامات صورت‌گرفته: $6 ($7)",
+ "log-action-filter-abusefilter": "نوع تغییر پالایه",
+ "log-action-filter-abusefilter-create": "ایجاد پالایهٔ جدید",
+ "log-action-filter-abusefilter-modify": "تغییر پالایه",
+ "logentry-abusefilterprivatedetails-access": "$1 به جزئیات خصوصی $3 {{GENDER:$2|دسترسی یافت}}",
+ "abusefilterprivatedetails-log-name": "سیاههٔ دسترسی به جزئیات خصوصی سیاههٔ خرابکاری",
"abusefilter-management": "مدیریت پالایهٔ خرابکاری",
"abusefilter-list": "تمام پالایه‌ها",
"abusefilter-list-id": "شناسهٔ پالایه",
+ "abusefilter-list-pattern": "\nالگو",
"abusefilter-list-status": "وضعیت",
"abusefilter-list-public": "توضیحات عمومی",
"abusefilter-list-consequences": "عواقب",
@@ -124,6 +146,7 @@
"abusefilter-enabled": "فعال",
"abusefilter-deleted": "حذف شده",
"abusefilter-disabled": "غیرفعال",
+ "abusefilter-throttled": "سرعت‌گیری شده",
"abusefilter-hitcount": "$1 مورد پیدا {{PLURAL:$1|شد|شد}}",
"abusefilter-new": "ایجاد یک پالایهٔ تازه",
"abusefilter-return": "بازگشت به مدیریت پالایه",
@@ -137,8 +160,16 @@
"abusefilter-list-options-scope-local": "فقط قوانین محلی",
"abusefilter-list-options-scope-global": "فقط قوانین سراسری",
"abusefilter-list-options-scope-all": "قوانین محلی و سراسری",
- "abusefilter-list-options-disabled": "پالایه‌های غیرفعال:",
+ "abusefilter-list-options-further-options": "گزینه‌های دیگر:",
"abusefilter-list-options-hidedisabled": "نهفتن پالایه‌های غیرفعال",
+ "abusefilter-list-options-hideprivate": "پنهان کردن پالایه‌های خصوصی",
+ "abusefilter-list-options-searchfield": "جستجو در قواعد:",
+ "abusefilter-list-options-searchpattern": "افزودن یک الگو",
+ "abusefilter-list-options-searchoptions": "حالت جستجو:",
+ "abusefilter-list-options-search-like": "پرسمان تخت",
+ "abusefilter-list-options-search-rlike": "عبارت باقاعده",
+ "abusefilter-list-options-search-irlike": "عبارت باقاعده حساس به بزرگی و کوچکی حروف",
+ "abusefilter-list-regexerror": "خطایی در زمان جستجو رخ داد: خطا در ساختار عبارت با قاعده.",
"abusefilter-list-options-submit": "به‌روزرسانی",
"abusefilter-tools-text": "اینجا ابزارهایی برای قاعده‌مندکردن و اشکال‌زدایی پالایه‌های خرابکاری قرار دارند.",
"abusefilter-tools-expr": "آزمایشگر عبارت",
@@ -153,15 +184,18 @@
"abusefilter-edit": "ویرایش پالایهٔ خرابکاری",
"abusefilter-edit-subtitle": "ویرایش پالایهٔ $1",
"abusefilter-edit-subtitle-new": "ایجاد پالایه",
+ "abusefilter-edit-token-not-match": "ویرایش قابل ذخیره شدن نیست! لطفا دوباره سعی کنید.",
"abusefilter-edit-oldwarning": "<strong>شما مشغول ویرایش کردن بر روی نسخهٔ قدیمی از پالایه هستید.\nآمار نقل شده بر اساس آخرین نسخهٔ پالایه است.\nاگر دکمه ذخیره را بفشارید تمام تغییرات بعد از نسخه‌ای که ویرایش می‌کنید را رونویسی خواهید کرد.</strong> &bull;\n[[Special:AbuseFilter/history/$2|بازگشت به تاریخچهٔ این پالایه]].",
"abusefilter-edit-status-label": "آمار:",
"abusefilter-edit-status": "از بین $1 {{PLURAL:$1|عمل|عمل}} گذشته، این پالایه با $2 مورد ($3٪) مطابقت داشت.",
"abusefilter-edit-status-profile": "از آخرین $1 {{PLURAL:$1|عمل|عمل}}، این پالایه با $2 ($3٪) مطابقت داشت.\nبه طور متوسط این پالایه در مدت $4 میلی‌ثانیه اجرا می‌شود و $5 شرط از ظرفیت شرایط را مصرف می‌کند.",
- "abusefilter-edit-throttled": "هشدار: این پالایه به دلایل امنیتی به طور خودکار غیرفعال شد.\nاین پالایه به ظرفیت مطابقت بیش از $1٪ اقدام‌ها رسید.",
+ "abusefilter-edit-throttled-warning": "'''هشدار:''' این پالایه به صورت خودکار مضر تشخیص داده شد. به منظور حفظ امنیت، اقدام‌های روبه‌رو اجرا نخواهند شد ($1). لطفاً شرط‌های پالایه را بررسی و [[mw:Extension:AbuseFilter/Conditions|بهینه‌سازی]] کنید تا این محدودیت برداشته شود",
"abusefilter-edit-new": "پالایه‌ای تازه",
"abusefilter-edit-save": "ذخیره‌سازی پالایه",
"abusefilter-edit-id": "شناسهٔ پالایه:",
+ "abusefilter-edit-switch-editor": "تغییر ویرایشگر",
"abusefilter-edit-description": "توضیحات:\n:''(قابل مشاهده توسط عموم)''",
+ "abusefilter-edit-field-description": "توضیحات",
"abusefilter-edit-group": "گروه پالایه:",
"abusefilter-edit-flags": "پرچم‌ها:",
"abusefilter-edit-enabled": "فعال کردن این پالایه",
@@ -169,6 +203,7 @@
"abusefilter-edit-hidden": "پنهان کردن جزئیات این پالایه از دید عموم",
"abusefilter-edit-global": "پالایهٔ سراسری",
"abusefilter-edit-rules": "شروط:",
+ "abusefilter-edit-field-conditions": "شرایط",
"abusefilter-edit-notes": "یادداشت‌ها:",
"abusefilter-edit-lastmod": "آخرین ویرایش پالایه:",
"abusefilter-edit-lastmod-text": "$1 توسط $2",
@@ -179,25 +214,45 @@
"abusefilter-edit-action-blockautopromote": "وضعیت تأییدشدهٔ کاربر را لغو کن",
"abusefilter-edit-action-degroup": "کاربر را از تمام گروه‌های دارای دسترسی ویژه خارج کن",
"abusefilter-edit-action-block": "دسترسی کاربر و/یا آی‌پی را از ویرایش قطع کن",
+ "abusefilter-edit-action-blocktalk": "جلوگیری از ویرایش صفحهٔ بحث توسط خود کاربر/آی‌پی در زمانی که بسته است",
"abusefilter-edit-action-throttle": "واکنش‌ها را تنها در صورتی که کاربر از یک حد سرعت تجاوز کرد فعال کن",
- "abusefilter-edit-action-rangeblock": "بازهٔ /۱۶ آی‌پی که کاربر از آن می‌آید را ببند",
+ "abusefilter-edit-action-rangeblock": "بازهٔ آی‌پی مرتبطی که کاربر از آن می‌آید را ببند",
"abusefilter-edit-action-tag": "این ویرایش برای بازبینی بعدی علامت‌گذاری کن",
"abusefilter-edit-throttle-count": "تعداد اقدامات مجاز:",
- "abusefilter-edit-throttle-period": "تناوب زمانی:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|ثانیه|ثانیه}}",
- "abusefilter-edit-throttle-groups": "کنترل گروه توسط:\n:''(یکی در هر سطر بنویسید، با کاما تلفیق کنید)''",
+ "abusefilter-edit-throttle-period": "تناوب زمانی (به ثانیه):",
+ "abusefilter-edit-throttle-groups": "کنترل گروه توسط:",
+ "abusefilter-edit-throttle-ip": "نشانی آی‌پی",
+ "abusefilter-edit-throttle-user": "حساب کاربری",
+ "abusefilter-edit-throttle-range": "بازه /16",
+ "abusefilter-edit-throttle-creationdate": "زمان سرور هنگام ایجاد حساب",
+ "abusefilter-edit-throttle-editcount": "شمارش ویرایش‌ها",
+ "abusefilter-edit-throttle-site": "کل وب‌گاه",
+ "abusefilter-edit-throttle-page": "صفحه",
"abusefilter-edit-warn-message": "پیغام سامانه برای استفاده در هشدار:",
"abusefilter-edit-warn-other": "پیام‌های دیگر",
"abusefilter-edit-warn-other-label": "نام صفحهٔ حاوی پیام‌های دیگر:\n: ''(بدون پیشوند مدیاویکی)''",
"abusefilter-edit-warn-actions": "اقدامات:",
- "abusefilter-edit-warn-preview": "پیش‌نمایش پیام انتخاب‌شده",
+ "abusefilter-edit-warn-preview": "نمایش/نهفتن پیش‌نمایش پیام انتخاب‌شده",
"abusefilter-edit-warn-edit": "ایجاد/ویرایش پیام انتخاب‌شده",
- "abusefilter-edit-tag-tag": "[[Special:Tags|برچسب‌ها]] (هر کدام در یک خط):",
+ "abusefilter-edit-disallow-other": "پیام‌های دیگر",
+ "abusefilter-edit-disallow-other-label": "نام صفحهٔ حاوی پیام‌های دیگر:\n:''(بدون پیشوند مدیاویکی)''",
+ "abusefilter-edit-disallow-actions": "اقدامات:",
+ "abusefilter-edit-disallow-preview": "نمایش/نهفتن پیش‌نمایش پیام انتخاب‌شده",
+ "abusefilter-edit-disallow-edit": "ایجاد/ویرایش پیام انتخاب‌شده",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|برچسب‌ها]]:",
+ "abusefilter-edit-tag-placeholder": "افزودن برچسب (یک به یک یا جداشده با کاما)",
+ "abusefilter-edit-tag-hidden-placeholder": "افزودن برچسب‌ها (با ویرگول جداشده)",
+ "abusefilter-edit-block-anon-durations": "مدت قطع دسترسی برای کاربران گمنام:",
+ "abusefilter-edit-block-user-durations": "مدت قطع دسترسی برای کاربران ثبت‌نام‌کرده:",
+ "abusefilter-block-anon": "بستن کاربران ناشناس",
+ "abusefilter-block-user": "بستن کاربران ثبت‌نام‌کرده",
+ "abusefilter-block-talk": "بستن صفحه بحث",
"abusefilter-edit-denied": "شما نمی‌توانید جزئیات این پالایه را ببینید، زیرا از دید عموم پنهان شده‌است.",
"abusefilter-edit-main": "پارامترهای پالایه",
"abusefilter-edit-done-subtitle": "پالایه ویرایش شد",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|تغییرات شما]] در [[Special:AbuseFilter/$1|پالایه $3]] ذخیره شده‌است.",
"abusefilter-edit-badsyntax": "یک خطای نحوی در پالایه‌ای که مشخص کردید وجود دارد.\nخروجی تحلیلگر این بود: <pre>$1</pre>",
+ "abusefilter-edit-deleting-enabled": "امکان حذف یک پالایه فعال وجود ندارد.",
"abusefilter-edit-restricted": "شما نمی‌توانید این پالایه را ویرایش کنید، چون حاوی یک یا چند اقدام محدودشده است.\nلطفاً به منظور انجام تغییر، از یک کاربر با دسترسی اقدام‌های محدودشده درخواست کنید.",
"abusefilter-edit-viewhistory": "نمایش تاریخچهٔ این پالایه",
"abusefilter-edit-history": "تاریخچه:",
@@ -222,8 +277,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "باقی‌مانده (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "توان (**)",
"abusefilter-edit-builder-group-op-comparison": "عملگرهای مقایسه‌ای",
- "abusefilter-edit-builder-op-comparison-equal": "برابر است با (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "برابر نیست با (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "مقدار برابر است با (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "مقدار و نوع برابر است با (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "مقدار برابر نیست با (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "مقدار و نوع برابر نیست با (!==)",
"abusefilter-edit-builder-op-comparison-lt": "کمتر از (>)",
"abusefilter-edit-builder-op-comparison-gt": "بیشتر از (<)",
"abusefilter-edit-builder-op-comparison-lte": "کوچکتر یا مساوی (<=)",
@@ -232,6 +289,7 @@
"abusefilter-edit-builder-op-bool-not": "نقیض (!)",
"abusefilter-edit-builder-op-bool-and": "و (&)",
"abusefilter-edit-builder-op-bool-or": "یا (|)",
+ "abusefilter-edit-builder-op-bool-xor": "XOR (^)",
"abusefilter-edit-builder-group-misc": "متفرقه",
"abusefilter-edit-builder-misc-in": "موجود در یک رشته (in)",
"abusefilter-edit-builder-misc-like": "مطابقت با یک الگو (like)",
@@ -246,15 +304,19 @@
"abusefilter-edit-builder-funcs-lcase": "به حروف کوچک (lcase)",
"abusefilter-edit-builder-funcs-ucase": "به حروف بزرگ (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "بهنجارش نویسه‌های مشوش (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "نرمال‌سازی و جستجوی یک عبارت برای چندین عبارت یا حالت (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "نرمال‌سازی و جستجوی یک عبارت برای چندین عبارت و حالت (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "حذف نویسه‌های دوتایی (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "نویسه‌های ویژه/مجموع نویسه‌ها(specialratio)",
"abusefilter-edit-builder-funcs-norm": "بهنجاری (norm)",
"abusefilter-edit-builder-funcs-count": "تعداد تکرار رشته X در رشته Y (count)",
"abusefilter-edit-builder-funcs-rcount": "تعداد تکرار عبارت باقاعده X در رشته Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "دستهٔ نتیجه‌های عبارت باقاعده از متن برای هر گروه بدست آمده (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "حذف نویسه‌های خالی (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "حذف نویسه‌های ویژه (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "آیا آی‌پی در این محدوده است؟ (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "جستجوی رشته برای چند زیررشته (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "جستجوی رشته برای چند زیررشته با استفاده از شرط «یا» (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "جستجوی رشته برای چند زیررشته با استفاده از شرط «و» (contains_any)",
"abusefilter-edit-builder-funcs-substr": "زیررشته (substr)",
"abusefilter-edit-builder-funcs-strpos": "موقعیت زیررشته در رشته (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "جایگزینی زیررشته با رشته (str_replace)",
@@ -263,6 +325,7 @@
"abusefilter-edit-builder-group-vars": "متغیرها",
"abusefilter-edit-builder-vars-accountname": "نام کاربری (در زمان ایجاد حساب کاربری)",
"abusefilter-edit-builder-vars-timestamp": "زمان یونیکسی تغییر",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "برچسب زمان سیاهه",
"abusefilter-edit-builder-vars-action": "اقدام",
"abusefilter-edit-builder-vars-addedlines": "سطرهای اضافه‌شده در ویرایش",
"abusefilter-edit-builder-vars-delta": "تغییر اندازهٔ صفحه در ویرایش",
@@ -273,19 +336,21 @@
"abusefilter-edit-builder-vars-new-content-model": "مدل محتوای جدید",
"abusefilter-edit-builder-vars-removedlines": "سطرهای حذف شده در ویرایش",
"abusefilter-edit-builder-vars-summary": "خلاصهٔ ویرایش / دلیل",
- "abusefilter-edit-builder-vars-article-id": "شناسهٔ صفحه",
- "abusefilter-edit-builder-vars-article-ns": "فضای نام صفحه",
- "abusefilter-edit-builder-vars-article-text": "عنوان صفحه (بدون فضای نام)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "عنوان کامل صفحه",
- "abusefilter-edit-builder-vars-article-views": "بازدیدهای صفحه",
+ "abusefilter-edit-builder-vars-page-id": "شناسهٔ صفحه",
+ "abusefilter-edit-builder-vars-page-ns": "فضای نام صفحه",
+ "abusefilter-edit-builder-vars-page-title": "عنوان صفحه (بدون فضای نام)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "عنوان کامل صفحه",
+ "abusefilter-edit-builder-vars-page-age": "عمر صفحه (به ثانیه)",
"abusefilter-edit-builder-vars-movedfrom-id": "شناسهٔ صفحهٔ مبدأ انتقال",
"abusefilter-edit-builder-vars-movedfrom-ns": "فضای نام صفحهٔ مبدأ انتقال",
- "abusefilter-edit-builder-vars-movedfrom-text": "عنوان صفحهٔ مبدأ انتقال",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "عنوان کامل صفحهٔ مبدأ انتقال",
+ "abusefilter-edit-builder-vars-movedfrom-title": "عنوان صفحهٔ مبدأ انتقال",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "عنوان کامل صفحهٔ مبدأ انتقال",
+ "abusefilter-edit-builder-vars-movedfrom-age": "عمر صفحه مبدا (به ثانیه)",
"abusefilter-edit-builder-vars-movedto-id": "شناسهٔ صفحهٔ مقصد انتقال",
"abusefilter-edit-builder-vars-movedto-ns": "فضای نام صفحهٔ مقصد انتقال",
- "abusefilter-edit-builder-vars-movedto-text": "عنوان صفحهٔ مقصد انتقال",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "عنوان کامل صفحهٔ مقصد انتقال",
+ "abusefilter-edit-builder-vars-movedto-title": "عنوان صفحهٔ مقصد انتقال",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "عنوان کامل صفحهٔ مقصد انتقال",
+ "abusefilter-edit-builder-vars-movedto-age": "عمر صفحه مقصد (به ثانیه)",
"abusefilter-edit-builder-vars-user-editcount": "شمار ویرایش‌های حساب کاربری",
"abusefilter-edit-builder-vars-user-age": "عمر حساب کاربری",
"abusefilter-edit-builder-vars-user-name": "نام حساب کاربری",
@@ -298,7 +363,7 @@
"abusefilter-edit-builder-vars-all-links": "تمام پیوندهای خارجی در متن تازه",
"abusefilter-edit-builder-vars-added-links": "تمام پیوندهای خارجی اضافه شده در ویرایش",
"abusefilter-edit-builder-vars-removed-links": "تمام پیوندهای خارجی حذف شده در ویرایش",
- "abusefilter-edit-builder-vars-old-text": "ویکی‌متن قدیمی صفحه، قبل از ویرایش",
+ "abusefilter-edit-builder-vars-old-text": "ویکی‌متن قدیمی صفحه، قبل از ویرایش (دیگر استفاده نمی‌شود)",
"abusefilter-edit-builder-vars-new-text": "ویکی‌متن تازه صفحه، بعد از ویرایش",
"abusefilter-edit-builder-vars-new-pst": "صفحهٔ تازه ویکی‌متن، پیش از ذخیره تغییر یافت",
"abusefilter-edit-builder-vars-diff-pst": "یکی کردن تفاوت تغییرات ساخته شده توسط ویرایش، از قبل ذخیره شده تبدیل شده",
@@ -309,9 +374,11 @@
"abusefilter-edit-builder-vars-restrictions-move": "سطح محافظت صفحه برای انتقال",
"abusefilter-edit-builder-vars-restrictions-create": "حفاظت صفحه در برابر ساخت",
"abusefilter-edit-builder-vars-restrictions-upload": "حفاظت پرونده در برابر بارگذاری",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "سطح محافظت صفحه برای صفحه مبدا انتقال",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "انتقال سطح محافظت صفحه مبدا انتقال",
"abusefilter-edit-builder-vars-old-text-stripped": "متن قبلی صفحه، بدون نشانه‌گذاری‌ها",
"abusefilter-edit-builder-vars-old-links": "پیوندهای صفحه، قبل از ویرایش",
- "abusefilter-edit-builder-vars-old-html": "ویکی‌متن قدیمی صفحه، تجزیه شده به اچ‌تی‌ام‌ال",
+ "abusefilter-edit-builder-vars-old-html": "ویکی‌متن قدیمی صفحه، تجزیه شده به اچ‌تی‌ام‌ال (دیگر استفاده نمی‌شود)",
"abusefilter-edit-builder-vars-minor-edit": "نشانه‌گذاری شدن ویرایش به عنوان جزئی",
"abusefilter-edit-builder-vars-file-sha1": "درهم‌سازی محتویات پرونده با SHA1",
"abusefilter-edit-builder-vars-file-size": "اندازهٔ پرونده به بایت",
@@ -338,6 +405,7 @@
"abusefilter-history-filterid": "پالایه",
"abusefilter-history-select-legend": "تصحیح جستجو",
"abusefilter-history-select-user": "کاربر:",
+ "abusefilter-history-select-filter": "شناسهٔ پالایه:",
"abusefilter-history-select-submit": "تصحیح",
"abusefilter-history-diff": "تغییرات",
"abusefilter-history-error-hidden": "پالایه‌ای که شما درخواست کرده‌اید پنهان شده‌است و شما نمی‌توانید تاریخچهٔ آن را ببینید.",
@@ -355,7 +423,7 @@
"abusefilter-exception-regexfailure": "خطا در عبارات باقاعده «$3» در نویسهٔ $1: «$2»",
"abusefilter-exception-overridebuiltin": "رونویسی غیر مجاز متغیر توکار «$2» در نویسه $1.",
"abusefilter-exception-outofbounds": "درخواست مورد ناموجود $2 از فهرست (اندازهٔ فهرست = $3) در نویسهٔ $1.",
- "abusefilter-exception-notlist": "درخواست مورد آرایه از غیر آرایه در نویسه $1.",
+ "abusefilter-exception-notarray": "درخواست مورد آرایه از غیر آرایه در نویسه $1.",
"abusefilter-action-tag": "برچسب",
"abusefilter-action-throttle": "محدودیت سرعت",
"abusefilter-action-warn": "هشدار",
@@ -371,8 +439,9 @@
"abusefilter-revert-periodstart": "شروع بازه زمانی:",
"abusefilter-revert-periodend": "پایان بازه زمانی:",
"abusefilter-revert-search": "انتخاب اقدامات",
- "abusefilter-revert-filter": "پالایه:",
+ "abusefilter-revert-filter": "شناسهٔ پالایه:",
"abusefilter-revert-preview-intro": "در زیر اقدامات صورت گرفته توسط پالایهٔ خرابکاری آمده است که توسط این اقدام واگرادنی می‌شود.\nلطفاً با دقت آن‌ها را بررسی کنید، و به منظور تأیید انتخاب، روی «{{int:abusefilter-revert-confirm}}» کلیک نمایید.",
+ "abusefilter-revert-confirm-legend": "تأیید واگردانی",
"abusefilter-revert-confirm": "تأیید",
"abusefilter-revert-success": "شما همهٔ اقدام‌های صورت گرفته توسط پالایهٔ خرابکاری به دلیل [[Special:AbuseFilter/$1|پالایهٔ $2]] را واگردانی کرده‌اید.",
"abusefilter-revert-reason": "واگردانی خودکار همهٔ اقدام‌های صورت‌گرفته توسط پالایهٔ خرابکاری به دلیل پالایهٔ $1.\nعلت داده‌شده: $2",
@@ -384,12 +453,20 @@
"abusefilter-test-submit": "آزمایش",
"abusefilter-test-load": "بارگیری",
"abusefilter-test-user": "تغییرات کاربر:",
+ "abusefilter-test-nobots": "پنهان کردن ویرایش‌های ربات‌ها",
"abusefilter-test-period-start": "تغییرات انجام شده بعد از:",
"abusefilter-test-period-end": "تغییرات انجام شده پیش از:",
"abusefilter-test-page": "تغییرات انجام شده در صفحه:",
"abusefilter-test-shownegative": "تغییراتی که با پالایه مطابقت ندارد را نشان بده",
"abusefilter-test-syntaxerr": "پالایه‌ای که وارد کردید دارای یک خطای نحوی است.\nشما می‌توانید توضیح کاملی را با کلیک کردن روی دکمه «{{int:abusefilter-edit-check}}» ببینید.",
"abusefilter-test-badtitle": "عنوان صفحه‌ای که وارد کردید، نامعتبر بود. ممکن است شامل یک یا چند نویسه باشد که نمی‌تواند در عنوان‌ها استفاده شود.",
+ "abusefilter-test-action": "اقدام صورت‌گرفته:",
+ "abusefilter-test-search-type-all": "تمام کنش‌ها",
+ "abusefilter-test-search-type-edit": "ویرایش‌ها",
+ "abusefilter-test-search-type-move": "انتقال‌ها",
+ "abusefilter-test-search-type-delete": "حذف‌ها",
+ "abusefilter-test-search-type-upload": "بارگذاری‌ها",
+ "abusefilter-test-search-type-createaccount": "ایجاد حساب",
"abusefilter-changeslist-examine": "آزمودن",
"abusefilter-examine": "بررسی تک تک تغییرات",
"abusefilter-examine-intro": "این صفحه اجازهٔ بررسی متغیرهای تولیدشده توسط پالایهٔ خرابکاری برای یک تغییر، و آزمودنش در برابر پالایه‌ها را می‌دهد.",
@@ -416,6 +493,7 @@
"abusefilter-topnav-import": "درون‌ریزی پالایه",
"abusefilter-log-name": "سیاههٔ پالایهٔ خرابکاری",
"abusefilter-log-header": "این سیاهه خلاصه‌ای از تغییرات پالایه‌ها را نمایش می‌دهد.\nبرای جزئیات کامل [[Special:AbuseFilter/history|فهرست]] تغییرات اخیر پالایه‌ها را ببینید.",
+ "abusefilter-logentry-create": "$1 $4 را {{GENDER:$2|ایجاد کرد}} ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|تغییر داد}} $4 ($5)",
"abusefilter-log-noresults": "بدون نتیجه",
"abusefilter-diff-title": "تفاوت بین نسخه‌ها",
@@ -431,49 +509,15 @@
"abusefilter-import-submit": "درون‌ریزی اطلاعات",
"abusefilter-group-default": "پیش‌فرض",
"abusefilter-http-error": "خطای اچ‌تی‌تی‌پی رخ داد: $1",
- "apihelp-abusefiltercheckmatch-description": "بررسی کنید تا ببینید اگر پالایهٔ خرابکاری با مجموعه‌ای از متغییرها، رویداد سیاههٔ پالایهٔ خرابکاری کاربر مطابق است.\n\n متغییر، شناسهٔ تغییرات اخیر یا شناسهٔ ورود مورد نیاز است، اما فقط یکی از این سه می‌تواند استفاده شود.",
- "apihelp-abusefiltercheckmatch-summary": "بررسی کنید اگر یک پالایهٔ خرابکاری با مجموعه‌ای از متغیرها مطابقت داشت، editor logged AbuseFilter event.",
- "apihelp-abusefiltercheckmatch-extended-description": "vars، rcid، یا logid لازم است هرچند یکی از آنها استفاده می‌شود.",
- "apihelp-abusefiltercheckmatch-param-filter": "متن کامل پالایه برای بررسی یک مورد مطابقت‌یافته.",
- "apihelp-abusefiltercheckmatch-param-vars": "آرایه رمزگذاری شدهٔ به صورت جی‌سان از متغیرها برای آزمایش کردن.",
- "apihelp-abusefiltercheckmatch-param-rcid": "شناسهٔ تغییرات اخیر برای بررسی.",
- "apihelp-abusefiltercheckmatch-param-logid": "شناسهٔ سیاههٔ پالایهٔ خرابکاری برای بررسی.",
- "apihelp-abusefiltercheckmatch-example-1": "آزمایش کنید که آیا تغییرات شمارهٔ ۱۵ با یک پالایهٔ ساده مطابقت دارد یا خیر",
- "apihelp-abusefilterchecksyntax-description": "نحو یک پالایهٔ خرابکاری را بررسی کنید.",
- "apihelp-abusefilterchecksyntax-summary": "نحو یک پالایهٔ خرابکاری را بررسی کنید.",
- "apihelp-abusefilterchecksyntax-param-filter": "متن کامل پالایه برای بررسی کردن نحو",
- "apihelp-abusefilterchecksyntax-example-1": "نحو یک پالایهٔ مجاز را بررسی کنید",
- "apihelp-abusefilterchecksyntax-example-2": "نحو یک پالایهٔ غیر مجاز را بررسی کنید",
- "apihelp-abusefilterevalexpression-description": "یک عبارت پالایهٔ خرابکاری را ارزشیابی می‌کند.",
- "apihelp-abusefilterevalexpression-summary": "یک عبارت پالایهٔ خرابکاری را ارزشیابی می‌کند.",
- "apihelp-abusefilterevalexpression-param-expression": "عبارت برای ارزشیابی.",
- "apihelp-abusefilterevalexpression-example-1": "ارزشیابی یک عبارت ساده",
- "apihelp-abusefilterunblockautopromote-description": "باز کردن یک کاربر از ارتقاء خودکار بر پایهٔ نتیجهٔ پالایهٔ خرابکاری.",
- "apihelp-abusefilterunblockautopromote-summary": "باز کردن یک کاربر از ارتقاء خودکار بر پایهٔ نتیجهٔ پالایهٔ خرابکاری.",
- "apihelp-abusefilterunblockautopromote-param-user": "نام کاربری‌ای که قصد باز کردن آن را دارید.",
- "apihelp-abusefilterunblockautopromote-example-1": "برداشتن قفل بر روی ارتقاء خودکار [[User:Example]]",
- "apihelp-query+abusefilters-description": "نمایش جزئیات پالایهٔ خرابکاری.",
- "apihelp-query+abusefilters-summary": "نمایش جزئیات پالایهٔ خرابکاری.",
- "apihelp-query+abusefilters-param-startid": "شناسهٔ پالایه برای شروع شمارش از آن.",
- "apihelp-query+abusefilters-param-endid": "شناسهٔ پالایه برای توقف شمارش.",
- "apihelp-query+abusefilters-param-show": "نمایش پالایه‌هایی که شامل این موضوع هستند.",
- "apihelp-query+abusefilters-param-limit": "حداکثر تعداد پالایه‌ها برای فهرست کردن.",
- "apihelp-query+abusefilters-param-prop": "خصوصیتی که باید گرفته شود.",
- "apihelp-query+abusefilters-example-1": "نمایش پالایه‌های عمومی فعال",
- "apihelp-query+abusefilters-example-2": "نمایش تعدادی از جزئیات دربارهٔ پالایه‌ها",
- "apihelp-query+abuselog-description": "نمایش رویدادهایی که توسط پالایه جلوگیری شده‌اند.",
- "apihelp-query+abuselog-summary": "نمایش رویدادهایی که توسط پالایه جلوگیری شده‌اند.",
- "apihelp-query+abuselog-param-start": "تاریخی که از آن شمارش شروع شود.",
- "apihelp-query+abuselog-param-end": "تاریخی که شمارش از آن متوقف شود.",
- "apihelp-query+abuselog-param-user": "نمایش ورودی‌های انجام شده توسط کاربر یا آی‌پی.",
- "apihelp-query+abuselog-param-title": "نمایش ورودی‌هایی که بر روی یک صفحهٔ مشخص اعمال شده اند.",
- "apihelp-query+abuselog-param-filter": "نمایش ورودی‌هایی که توسط یک شناسهٔ پالایهٔ داده‌شده جلوگیری شده‌اند.",
- "apihelp-query+abuselog-param-limit": "حداکثر تعداد ورودی‌هایی که نمایش داده شود.",
- "apihelp-query+abuselog-param-prop": "خصوصیتی که باید گرفته شود.",
- "apihelp-query+abuselog-example-1": "نمایش سیاههٔ آخرین ورودی‌ها",
- "apihelp-query+abuselog-example-2": "نمایش آخرین موارد سیاهه از [[API]]",
- "apierror-abusefilter-canttest": "شما اجازهٔ آزمایش پالایه‌های خرابکاری را ندارید.",
- "apierror-abusefilter-cantcheck": "شما اجازهٔ آزمایش نحوی پالایه‌های خرابکاری را ندارید.",
- "apierror-abusefilter-nosuchlogid": "هیچ موردی در سیاههٔ خرابکاری با شناسهٔ $1 وجود ندارد.",
- "apierror-abusefilter-badsyntax": "نحو پالایه غیرمجاز است"
+ "abusefilter-view-private-submit": "نمایش جزئیات خصوصی",
+ "abusefilter-view-private": "نمایش جزئیات خصوصی",
+ "abusefilter-view-private-reason": "دلیل برای دسترسی به جزئیات خصوصی:",
+ "abusefilter-log-details-id": "سیاهه شناسه",
+ "abusefilter-invalid-request": "درخواست غیرمجاز! شما باید جزئیات خصوصی پالایه را از طریق فرمی که در [[Special:AbuseLog/$1]] است درخواست کنید و دلیلی ارائه کنید.",
+ "abusefilter-invalid-request-noid": "درخواست غیرمجاز! شما باید جزئیات خصوصی پالایه را از طریق فرمی که در صفحهٔ جزئیات سیاهه است درخواست کنید و دلیلی ارائه کنید.",
+ "log-description-abusefilterprivatedetails": "این سیاهه فهرستی از مواردی را نشان می‌دهد که کاربری به جزئیات خصوصی یک سیاهه خرابکاری دسترسی یافته‌است.",
+ "abusefilter-noreason": "هشدار: برای دیدن جزئیات خصوصی این پالایه باید دلیلی ارائه کنید.",
+ "abusefilter-log-ip-not-available": "موجود نیست",
+ "tag-abusefilter-condition-limit": "محدودیت تعداد شرایط حاصل شد",
+ "tag-abusefilter-condition-limit-description": "ویرایش‌ها یا عملکردهای دیگری که توسط تمام [[Special:AbuseFilter|پالایه‌های]] فعال بررسی نشدند ([[mw:Extension:AbuseFilter/Conditions|راهنما]])."
}
diff --git a/AbuseFilter/i18n/fi.json b/AbuseFilter/i18n/fi.json
index fa51ec23..061c90a3 100644
--- a/AbuseFilter/i18n/fi.json
+++ b/AbuseFilter/i18n/fi.json
@@ -20,15 +20,16 @@
"ZeiP",
"Matma Rex",
"01miki10",
- "Pyscowicz"
+ "Pyscowicz",
+ "Surjection"
]
},
"abusefilter-desc": "Mahdollistaa muokkauksien suodattamisen automaattisella heuristiikalla.",
"abusefilter": "Väärinkäyttösuodattimen asetukset",
"abuselog": "Väärinkäyttöloki",
"abusefilter-intro": "Tervetuloa väärinkäyttösuodattimen hallintakäyttöliittymään.\nVäärinkäyttösuodatin (Abuse Filter) on automaattinen ohjelmistomekanismi, joka soveltaa automaattista heuristiikkaa kaikkiin toimintoihin.\nTämä käyttöliittymä näyttää luettelon määritetyistä suodattimista ja antaa mahdollisuuden muuttaa niiden asetuksia.",
- "abusefilter-mustbeeditor": "Turvallisuussyistä vain käyttäjät, joilla on oikeus muuttaa väärinkäyttösuodattimia, saavat käyttää tätä käyttöliittymää.",
- "abusefilter-warning": "'''Varoitus''': Tämä muokkaus on automaattisesti tunnistettu haitalliseksi.\nEpäasialliset muokkaukset kumotaan nopeasti ja törkeä tai toistuva häiriköinti johtaa tunnuksesi tai IP-osoitteesi estämiseen.\nJos muokkauksesi on mielestäsi asiallinen, napsauta Tallenna-painiketta uudelleen.\nLyhyt kuvaus säännöstä, jota sovellettiin: $1",
+ "abusefilter-mustviewprivateoredit": "Turvallisuussyistä vain käyttäjät, joilla on oikeus nähdä yksityisiä väärinkäyttösuodattimia tai muokata suodattimia, saavat käyttää tätä käyttöliittymää.",
+ "abusefilter-warning": "'''Varoitus''': Tämä toiminto on automaattisesti tunnistettu haitalliseksi.\nEpäasialliset toiminnot kumotaan nopeasti ja törkeä tai toistuva häiriköinti johtaa tunnuksesi tai IP-osoitteesi estämiseen.\nJos tämä toiminto on mielestäsi asiallinen, napsauta Tallenna-painiketta uudelleen.\nLyhyt kuvaus säännöstä, jota sovellettiin: $1",
"abusefilter-disallowed": "Tämä toiminto on automaattisesti tunnistettu haitalliseksi ja tästä syystä sen suorittamista ei ole sallittu.\nJos olet sitä mieltä, että toimenpiteesi on asiallinen, ota yhteyttä ylläpitäjään ja kerro, mitä yritit tehdä.\nLaukaisemasi väärinkäyttösuodattimen säännön lyhyt kuvaus on: $1",
"abusefilter-blocked-display": "Muokkauksesi on automaattisesti tunnistettu haitalliseksi,\nja sen suorittaminen on estetty.\n{{GRAMMAR:genitive|{{SITENAME}}}} suojelemiseksi muokkaaminen on estetty tunnukseltasi ja kaikilta siihen liittyviltä IP-osoitteilta.\nOta yhteyttä ylläpitäjään mikäli on tapahtunut virhe.\nVäärinkäytön estämisen sääntölauseen lyhyt kuvausteksti on: $1",
"abusefilter-degrouped": "Tämä toimenpide on automaattisesti tunnistettu haitalliseksi.\nSiitä johtuen sitä ei ole sallittu, ja koska käyttäjätilisi on epäilty olevan murrettu, sen kaikki oikeudet on peruttu.\nMikäli tämä on ollut mielestäsi erehdys, ota yhteyttä byrokraattiin ja esitä perustelusi tälle toimenpiteelle, niin oikeutesi saatetaan palauttaa.\nLyhyt kuvaus väärinkäyttösuodattimen säännöstä, joka täsmää toimenpiteeseesi on: $1",
@@ -42,6 +43,7 @@
"right-abusefilter-log": "Nähdä väärinkäyttöloki",
"right-abusefilter-log-detail": "Nähdä yksityiskohtaisia lokimerkintöjä väärinkäyttölokissa",
"right-abusefilter-private": "Tarkastella yksityisiä tietoja väärinkäyttölokissa",
+ "right-abusefilter-private-log": "Nähdä väärinkäyttösuodattimien yksityisen tiedon pääsyloki",
"right-abusefilter-modify-restricted": "Muokata väärinkäyttösuodattimia, joissa on rajoitettuja toimintoja",
"right-abusefilter-revert": "Peruuttaa kaikki muutokset, jotka on tehnyt määritelty väärinkäyttösuodatin",
"right-abusefilter-view-private": "Nähdä ne väärinkäyttösuodattimet, jotka on merkitty yksityisiksi",
@@ -54,9 +56,11 @@
"action-abusefilter-log": "nähdä väärinkäyttölokia",
"action-abusefilter-log-detail": "nähdä tarkempia tietoja väärinkäyttölokista",
"action-abusefilter-private": "tarkastella yksityisiä tietoja väärinkäyttölokista",
+ "action-abusefilter-private-log": "nähdä väärinkäyttösuodattimien yksityisen tiedon pääsylokia",
"action-abusefilter-modify-restricted": "muokata väärinkäyttösuodattimia, joissa on rajoitettuja toimintoja",
"action-abusefilter-revert": "palauttaa kaikkia muutoksia valitulla väärinkäyttösuodattimella",
"action-abusefilter-view-private": "nähdä niitä väärinkäyttösuodattimia, jotka on merkitty yksityisiksi",
+ "action-abusefilter-log-private": "tarkastella yksityisten väärinkäyttösuodattimien lokitietoja",
"abusefilter-log": "Väärinkäyttösuodattimen loki",
"abusefilter-log-summary": "Tämä loki näyttää luettelon kaikista suodattimiin tarttuneista toiminnoista.",
"abusefilter-log-search": "Etsi väärinkäyttölokista",
@@ -64,38 +68,59 @@
"abusefilter-log-search-filter": "Suodattimen numero (erota pystyviivoilla):",
"abusefilter-log-search-title": "Kohteen nimi:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Vaikutus:",
+ "abusefilter-log-search-impact-all": "Kaikki toimenpiteet",
+ "abusefilter-log-search-impact-saved": "Vain tallennetut muutokset",
+ "abusefilter-log-search-impact-not-saved": "Muut kuin tallennetut muutokset",
+ "abusefilter-log-search-entries-label": "Näkyvyys:",
+ "abusefilter-log-search-entries-all": "Kaikki lokimerkinnät",
+ "abusefilter-log-search-entries-hidden": "Vain piilotetut lokimerkinnät",
+ "abusefilter-log-search-entries-visible": "Vain näkyvissä olevat lokimerkinnät",
+ "abusefilter-log-search-action-label": "Laukaissut toiminto:",
+ "abusefilter-log-search-action-other": "Muu",
+ "abusefilter-log-search-action-any": "Kaikki",
+ "abusefilter-log-search-action-taken-label": "Suoritettu toimenpide:",
+ "abusefilter-log-search-action-taken-any": "Kaikki",
"abusefilter-log-search-submit": "Etsi",
- "abusefilter-log-entry": "$1: $2 laukaisi väärinkäyttösuodattimen {{GENDER:$8|käyttäessään}} toimintoa ”$3” kohteessa $4.\nToimenpiteet: $5;\nSuodattimen kuvaus: $6",
- "abusefilter-log-entry-withdiff": "$1: $2 laukaisi väärinkäyttösuodattimen {{GENDER:$8|käyttäessään}} toimintoa ”$3” kohteessa $4.\nToimenpiteet: $5;\nSuodattimen kuvaus: $6 ($7)",
- "abusefilter-log-detailedentry-meta": "$1: $2 laukaisi suodattimen $3 {{GENDER:$9|käyttäessään}} toimintoa ”$4” kohteessa $5.\nToimenpiteet: $6;\nSuodattimen kuvaus: $7 ($8)",
+ "abusefilter-log-entry": "$1: $2 {{GENDER:$8|laukaisi}} väärinkäyttösuodattimen {{GENDER:$8|käyttäessään}} toimintoa ”$3” kohteessa $4.\nToimenpiteet: $5;\nSuodattimen kuvaus: $6",
+ "abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|laukaisi}} väärinkäyttösuodattimen {{GENDER:$8|käyttäessään}} toimintoa ”$3” kohteessa $4.\nToimenpiteet: $5;\nSuodattimen kuvaus: $6 ($7)",
+ "abusefilter-log-detailedentry-meta": "$1: $2 {{GENDER:$9|laukaisi}} suodattimen $3 {{GENDER:$9|käyttäessään}} toimintoa ”$4” kohteessa $5.\nToimenpiteet: $6;\nSuodattimen kuvaus: $7 ($8)",
"abusefilter-log-detailedentry-global": "järjestelmänlaajuinen suodatin $1",
"abusefilter-log-detailedentry-local": "suodatin $1",
"abusefilter-log-detailslink": "tarkat tiedot",
"abusefilter-log-diff": "ero",
"abusefilter-log-hidelink": "säädä näkyvyyttä",
- "abusefilter-log-details-legend": "Lokitapahtuman $1 tarkemmat tiedot",
+ "abusefilter-log-details-legend": "Tarkemmat tiedot koskien lokimerkintää $1",
"abusefilter-log-details-var": "Muuttuja",
"abusefilter-log-details-val": "Arvo",
"abusefilter-log-details-vars": "Toimintoparametrit",
- "abusefilter-log-details-private": "Yksityiset tiedot",
+ "abusefilter-log-details-private": "Yksityiset lokitiedot",
"abusefilter-log-details-ip": "Alkuperäinen IP-osoite",
+ "abusefilter-log-details-checkuser": "Osoitepaljastin",
"abusefilter-log-noactions": "ei mitään",
"abusefilter-log-details-diff": "Muutokset, jotka tehtiin muokkauksessa",
"abusefilter-log-linkoncontribs": "väärinkäyttöloki",
- "abusefilter-log-linkoncontribs-text": "Väärinkäyttöloki tälle käyttäjälle",
+ "abusefilter-log-linkoncontribs-text": "Väärinkäyttöloki {{GENDER:$1|tälle käyttäjälle}}",
+ "abusefilter-log-linkonhistory": "näytä väärinkäyttöloki",
+ "abusefilter-log-linkonhistory-text": "Näytä tämän sivun väärinkäyttöloki",
"abusefilter-log-hidden": "(merkintä on piilotettu)",
"abusefilter-log-hidden-implicit": "(piilotettu, koska versio on poistettu)",
"abusefilter-log-cannot-see-details": "Sinulla ei ole oikeutta nähdä tämän lokimerkinnän tietoja.",
+ "abusefilter-log-cannot-see-private-details": "Sinulla ei ole lupaa tarkastella tämän lokimerkinnän yksityisiä tietoja.",
"abusefilter-log-details-hidden": "Et voi nähdä tämän lokimerkinnän tietoja, koska merkintä on piilotettu eikä ole julkisesti näkyvissä.",
+ "abusefilter-log-details-hidden-implicit": "Et voi nähdä tämän lokimerkinnän tietoja, koska siihen liittyvä versio on piilotettu eikä ole julkisesti näkyvissä.",
"abusefilter-log-private-not-included": "Yksi tai useampi määrittämäsi suodattimen numero on suljettu ulkopuolisilta. Koska sinulla ei ole lupaa nähdä yksityisten suodattimien tietoja, näitä suodattimia ei ole haettu.",
"abusefilter-log-hide-legend": "Piilota lokitapahtuma",
"abusefilter-log-hide-id": "Lokimerkinnän tunnusnumero:",
"abusefilter-log-hide-hidden": "Piilota tämä merkintä julkiselta näkymiseltä",
"abusefilter-log-hide-reason": "Syy:",
"abusefilter-log-hide-forbidden": "Sinulla ei ole oikeutta piilottaa väärinkäyttölokin merkintöjä.",
- "abusefilter-logentry-suppress": "piilotti merkinnän [[$1]]",
- "abusefilter-logentry-unsuppress": "palautti merkinnän [[$1]] näkyviin",
- "logentry-abusefilter-hit": "$1 laukaisi suodattimen $4 suorittaessaan toiminnon \"$5\" kohteessa $3. Toimenpiteet: $6 ($7)",
+ "logentry-abusefilter-hit": "$1 {{GENDER:$2|laukaisi}} suodattimen $4 {{GENDER:$2|suorittaessaan}} toiminnon \"$5\" kohteessa $3. Toimenpiteet: $6 ($7)",
+ "log-action-filter-abusefilter": "Suodattimen muutoksen tyyppi:",
+ "log-action-filter-abusefilter-create": "Uuden suodattimen luonti",
+ "log-action-filter-abusefilter-modify": "Suodattimen muokkaus",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|katsoi}} lokin $3 yksityiset tiedot",
+ "abusefilterprivatedetails-log-name": "Väärinkäyttösuodattimen yksityisen tiedon pääsyloki",
"abusefilter-management": "Väärinkäyttösuodattimen hallinta",
"abusefilter-list": "Kaikki suodattimet",
"abusefilter-list-id": "Suodatin nro",
@@ -127,8 +152,9 @@
"abusefilter-list-options-scope-local": "Vain paikalliset säännöt",
"abusefilter-list-options-scope-global": "Vain järjestelmänlaajuiset säännöt",
"abusefilter-list-options-scope-all": "Paikalliset ja järjestelmänlaajuiset säännöt",
- "abusefilter-list-options-disabled": "Käytöstä poistetut suodattimet:",
"abusefilter-list-options-hidedisabled": "Piilota käytöstä poistetut suodattimet",
+ "abusefilter-list-options-hideprivate": "Piilota yksityiset suodattimet",
+ "abusefilter-list-options-search-rlike": "Säännöllinen lauseke",
"abusefilter-list-options-submit": "Päivitä",
"abusefilter-tools-text": "Tässä on työkaluja, jotka saattavat olla hyödyllisiä väärinkäyttösuodattimien muodostamisessa ja niiden virheenjäljityksessä.",
"abusefilter-tools-expr": "Lausekkeen kokeilu",
@@ -147,11 +173,13 @@
"abusefilter-edit-status-label": "Tilastot:",
"abusefilter-edit-status": "Viimeisestä $1 {{PLURAL:$1|toiminnosta}} tämä suodatin täsmäsi $2 kertaa ($3 %).",
"abusefilter-edit-status-profile": "Viimeisestä $1 toiminnosta tämä suodatin täsmäsi $2 kertaa ($3 %).\nKeskimäärin sen ajoaika on $4 ms, ja se kuluttaa $5 {{PLURAL:$5|ehdon|ehtoa}} ehtorajasta.",
- "abusefilter-edit-throttled": "'''Varoitus''': Tämä suodatin on otettu varotoimena automaattisesti pois käytöstä.\nSuodatin saavutti yli $1 % täsmäävän toiminnon rajan.",
+ "abusefilter-edit-throttled-warning": "'''Varoitus:''' Tämä suodatin merkittiin automaattisesti haitalliseksi. Turvallisuussyistä seuraavia toimintoja ei suoriteta ($1). Tarkista ja [[mw:Extension:AbuseFilter/Conditions|optimoi]] ehtosi poistaaksesi tämän rajoituksen",
"abusefilter-edit-new": "Uusi suodatin",
"abusefilter-edit-save": "Tallenna suodatin",
"abusefilter-edit-id": "Suodatin nro:",
+ "abusefilter-edit-switch-editor": "Vaihda muokkainta",
"abusefilter-edit-description": "Kuvaus:\n:''(julkisesti näkyvillä)''",
+ "abusefilter-edit-field-description": "kuvaus",
"abusefilter-edit-group": "Suodatinryhmä:",
"abusefilter-edit-flags": "Ominaisuudet:",
"abusefilter-edit-enabled": "Ota käyttöön tämä suodatin",
@@ -159,6 +187,7 @@
"abusefilter-edit-hidden": "Piilota suodattimen yksityiskohdat julkiselta näkyvyydeltä",
"abusefilter-edit-global": "Järjestelmänlaajuinen suodatin",
"abusefilter-edit-rules": "Ehtolauseet:",
+ "abusefilter-edit-field-conditions": "ehdot",
"abusefilter-edit-notes": "Huomautukset:",
"abusefilter-edit-lastmod": "Suodatinta viimeksi muutettu:",
"abusefilter-edit-lastmod-text": "$1 – $2",
@@ -169,25 +198,39 @@
"abusefilter-edit-action-blockautopromote": "Poista käyttäjä ryhmästä ''automaattisesti hyväksytyt käyttäjät (autoconfirmed)''",
"abusefilter-edit-action-degroup": "Poista käyttäjä kaikista ryhmistä, joilla on erityisoikeuksia",
"abusefilter-edit-action-block": "Aseta käyttäjälle ja/tai IP-osoitteelle muokkausesto",
+ "abusefilter-edit-action-blocktalk": "Estä käyttäjää ja/tai IP-osoitetta muokkaamasta omaa keskustelusivuaan",
"abusefilter-edit-action-throttle": "Laukaise toiminnot vain jos käyttäjä ylittää rajan",
- "abusefilter-edit-action-rangeblock": "Estä /16-alue, josta käyttäjä tulee",
+ "abusefilter-edit-action-rangeblock": "Estä IP-osoiteavaruus, josta käyttäjä tulee",
"abusefilter-edit-action-tag": "Merkkaa muokkaus lisätarkastelun kohteeksi",
"abusefilter-edit-throttle-count": "Toimintojen sallittu määrä:",
- "abusefilter-edit-throttle-period": "Aikaväli:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekunti|sekuntia}}",
- "abusefilter-edit-throttle-groups": "Ryhmän määritys:\n:''(yksi per rivi, yhdistä pilkun avulla)''",
+ "abusefilter-edit-throttle-period": "Aikaväli (sekunteina):",
+ "abusefilter-edit-throttle-groups": "Ryhmän määritys:",
+ "abusefilter-edit-throttle-ip": "IP-osoite",
+ "abusefilter-edit-throttle-user": "Käyttäjätunnus",
+ "abusefilter-edit-throttle-range": "/16-alue",
+ "abusefilter-edit-throttle-editcount": "Muokkausmäärä",
+ "abusefilter-edit-throttle-site": "Koko sivusto",
+ "abusefilter-edit-throttle-page": "Sivu",
"abusefilter-edit-warn-message": "Varoitukseen käytettävä järjestelmäviesti:",
"abusefilter-edit-warn-other": "Muu viesti",
"abusefilter-edit-warn-other-label": "Muun viestin sivun otsikko:\n:''(ilman Järjestelmäviesti-etuliitettä)''",
"abusefilter-edit-warn-actions": "Toiminnot:",
- "abusefilter-edit-warn-preview": "Esikatsele valittua viestiä",
+ "abusefilter-edit-warn-preview": "Näytä/piilota valitun viestin esikatselu",
"abusefilter-edit-warn-edit": "Luo tai muokkaa valittua viestiä",
- "abusefilter-edit-tag-tag": "Käytettävät [[Special:Tags|merkkaukset]] (yksi per rivi):",
+ "abusefilter-edit-tag-tag": "Käytettävät [[Special:Tags|merkkaukset]]:",
+ "abusefilter-edit-tag-placeholder": "Lisää merkkauksia (yksitellen tai pilkulla erotettuna)",
+ "abusefilter-edit-tag-hidden-placeholder": "Lisää merkkauksia (pilkulla erotettuna)",
+ "abusefilter-edit-block-anon-durations": "Eston pituus kirjautumattomille käyttäjille:",
+ "abusefilter-edit-block-user-durations": "Eston pituus rekisteröityneille käyttäjille:",
+ "abusefilter-block-anon": "estä kirjautumattomat käyttäjät",
+ "abusefilter-block-user": "estä kirjautuneet käyttäjät",
+ "abusefilter-block-talk": "keskustelusivu estetty",
"abusefilter-edit-denied": "Et voi tarkastella tämän suodattimen yksityiskohtia, koska ne eivät ole julkisesti näkyvillä.",
"abusefilter-edit-main": "Suodattimen parametrit",
"abusefilter-edit-done-subtitle": "Suodatinta muokattu",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Muutokset]] [[Special:AbuseFilter/$1|suodattimeen $3]] tallennettiin onnistuneesti.",
"abusefilter-edit-badsyntax": "Määrittämässäsi suodattimessa on syntaksivirhe.\nJäsentimen palaute: <pre>$1</pre>",
+ "abusefilter-edit-deleting-enabled": "Et voi merkitä aktiivista suodatinta poistetuksi.",
"abusefilter-edit-restricted": "Et voi muuttaa tätä suodatinta, koska se sisältää yhden tai useamman rajoitetun toiminnon.\nPyydä rajoitettujen toimintojen lisäämiseen tarvittavien oikeuksien haltijalta, että tämä tekee muutoksen puolestasi.",
"abusefilter-edit-viewhistory": "Näytä tämän suodattimen historia",
"abusefilter-edit-history": "Historia:",
@@ -249,6 +292,7 @@
"abusefilter-edit-builder-funcs-strpos": "Osamerkkijonon sijainti merkkijonossa (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Korvaa osamerkkijono merkkijonolla (str_replace)",
"abusefilter-edit-builder-funcs-set_var": "Aseta muuttujalle arvo (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Muunna HTML-entiteetit Unicode-merkeiksi (sanitointi)",
"abusefilter-edit-builder-group-vars": "Muuttujat",
"abusefilter-edit-builder-vars-accountname": "Käyttäjätunnus (tunnuksen luomisessa)",
"abusefilter-edit-builder-vars-timestamp": "Muutoksen Unix-aikaleima",
@@ -262,19 +306,21 @@
"abusefilter-edit-builder-vars-new-content-model": "Uusi sisältömalli",
"abusefilter-edit-builder-vars-removedlines": "Muokkauksessa poistettujen rivien määrä",
"abusefilter-edit-builder-vars-summary": "Muokkausyhteenveto tai syy",
- "abusefilter-edit-builder-vars-article-id": "Sivun tunnistenumero",
- "abusefilter-edit-builder-vars-article-ns": "Sivun nimiavaruus",
- "abusefilter-edit-builder-vars-article-text": "Sivun nimi (ilman nimiavaruutta)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Sivun koko nimi",
- "abusefilter-edit-builder-vars-article-views": "Sivulatauksia",
+ "abusefilter-edit-builder-vars-page-id": "Sivun tunnistenumero",
+ "abusefilter-edit-builder-vars-page-ns": "Sivun nimiavaruus",
+ "abusefilter-edit-builder-vars-page-title": "Sivun nimi (ilman nimiavaruutta)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Sivun koko nimi",
+ "abusefilter-edit-builder-vars-page-age": "Sivun ikä (sekunteina)",
"abusefilter-edit-builder-vars-movedfrom-id": "Siirron lähdesivun tunnistenumero",
"abusefilter-edit-builder-vars-movedfrom-ns": "Siirron lähdesivun nimiavaruus",
- "abusefilter-edit-builder-vars-movedfrom-text": "Siirron lähdesivun nimi",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Siirron lähdesivun koko nimi",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Siirron lähdesivun nimi",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Siirron lähdesivun koko nimi",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Siirron lähdesivun ikä (sekunteina)",
"abusefilter-edit-builder-vars-movedto-id": "Siirron kohdesivun tunnistenumero",
"abusefilter-edit-builder-vars-movedto-ns": "Siirron kohdesivun nimiavaruus",
- "abusefilter-edit-builder-vars-movedto-text": "Siirron kohdesivun nimi",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Siirron kohdesivun koko nimi",
+ "abusefilter-edit-builder-vars-movedto-title": "Siirron kohdesivun nimi",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Siirron kohdesivun koko nimi",
+ "abusefilter-edit-builder-vars-movedto-age": "Siirron kohdesivun ikä (sekunteina)",
"abusefilter-edit-builder-vars-user-editcount": "Käyttäjän muokkausmäärä",
"abusefilter-edit-builder-vars-user-age": "Käyttäjätunnuksen ikä",
"abusefilter-edit-builder-vars-user-name": "Käyttäjätunnuksen nimi",
@@ -284,10 +330,14 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "Sähköpostiosoite vahvistettiin",
"abusefilter-edit-builder-vars-recent-contributors": "Sivun viimeisimmät kymmenen muokkaajaa",
"abusefilter-edit-builder-vars-first-contributor": "Sivun ensimmäinen muokkaaja",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Siirron lähdesivun 10 viimeistä muokkaajaa",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Siirron lähdesivun ensimmäinen muokkaaja",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Siirron kohdesivun 10 viimeistä muokkaajaa",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Siirron kohdesivun ensimmäinen muokkaaja",
"abusefilter-edit-builder-vars-all-links": "Kaikki ulkoiset linkit uudessa tekstissä",
"abusefilter-edit-builder-vars-added-links": "Kaikki muokkauksessa lisätyt ulkoiset linkit",
"abusefilter-edit-builder-vars-removed-links": "Kaikki muokkauksessa poistetut ulkoiset linkit",
- "abusefilter-edit-builder-vars-old-text": "Sivun vanha wikiteksti, ennen muokkausta",
+ "abusefilter-edit-builder-vars-old-text": "Sivun vanha wikiteksti, ennen muokkausta (ei enää käytössä)",
"abusefilter-edit-builder-vars-new-text": "Sivun uusi wikiteksti, muokkauksen jälkeen",
"abusefilter-edit-builder-vars-new-pst": "Uuden sivun wikiteksti, \"pre-save transformed\"",
"abusefilter-edit-builder-vars-diff-pst": "Yhdistetty eroavaisuus (diffi) muutoksista, jotka on tehty muokkauksessa, \"pre-save transformed\"",
@@ -298,9 +348,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "Sivun siirtosuojauksen taso",
"abusefilter-edit-builder-vars-restrictions-create": "Sivun luontisuojaus",
"abusefilter-edit-builder-vars-restrictions-upload": "Tiedoston tallennussuojaus",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Siirron lähdesivun muokkaussuojauksen taso",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Siirron lähdesivun siirtosuojaus",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Siirron lähdesivun luontisuojaus",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Siirron lähdesivun tallennussuojaus",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Siirron kohdesivun muokkaussuojauksen taso",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Siirron kohdesivun siirtosuojaus",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Siirron kohdesivun luontisuojaus",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Siirron kohdesivun tallennussuojaus",
"abusefilter-edit-builder-vars-old-text-stripped": "Sivun vanhempi teksti, riisuttuna koodimerkinnöistä",
"abusefilter-edit-builder-vars-old-links": "Linkit sivulla ennen muokkausta",
- "abusefilter-edit-builder-vars-old-html": "Vanha sivun wikiteksti jäsennettynä HTML:ksi",
+ "abusefilter-edit-builder-vars-old-html": "Vanha sivun wikiteksti jäsennettynä HTML:ksi (ei enää käytössä)",
"abusefilter-edit-builder-vars-minor-edit": "Onko muokkaus merkitty pieneksi muutokseksi vai ei",
"abusefilter-edit-builder-vars-file-sha1": "Tiedoston sisällön SHA1-tiiviste",
"abusefilter-edit-builder-vars-file-size": "Tiedoston koko tavuina",
@@ -326,6 +384,7 @@
"abusefilter-history-filterid": "Suodatin",
"abusefilter-history-select-legend": "Tarkenna hakua",
"abusefilter-history-select-user": "Käyttäjä:",
+ "abusefilter-history-select-filter": "Suodatin nro:",
"abusefilter-history-select-submit": "Tarkenna",
"abusefilter-history-diff": "Muutokset",
"abusefilter-history-error-hidden": "Pyytämäsi suodatin on piilotettu näkyvistä, etkä voi tarkastella sen historiaa.",
@@ -336,14 +395,17 @@
"abusefilter-exception-unclosedstring": "Sulkematon merkkijono alkaen merkistä $1.",
"abusefilter-exception-invalidoperator": "Virheellinen operaattori ”$2” merkissä $1.",
"abusefilter-exception-unrecognisedtoken": "Tunnistamaton sane ”$2” kohdassa $1.",
- "abusefilter-exception-noparams": "Parametreja ei annettu funktiolle ”$2” merkissä $1.",
+ "abusefilter-exception-noparams": "Parametreja ei annettu funktiolle ”$2” merkissä $1.\nOdotettiin $3 {{PLURAL:$3|argumenttia}}.",
"abusefilter-exception-dividebyzero": "Laiton yritys jakaa $2 nollalla merkissä $1.",
"abusefilter-exception-unrecognisedvar": "Tunnistamaton muuttuja $2 merkissä $1",
"abusefilter-exception-notenoughargs": "Funktiolle $2 ei annettu tarpeeksi argumentteja kutsuttaessa merkissä $1.\nOdotettu $3 {{PLURAL:$3|argumenttia|argumenttia}}, saatu $4.",
"abusefilter-exception-regexfailure": "Virhe säännöllisessä lausekkeessa ”$3” merkin $1 kohdalla: ”$2”",
"abusefilter-exception-overridebuiltin": "Laiton sisäänrakennetun muuttujan ”$2” päällekirjoitus merkissä $1.",
"abusefilter-exception-outofbounds": "Pyydetty olematonta listaelementtiä $2 (listan koko on $3) merkissä $1.",
- "abusefilter-exception-notlist": "Pyydetty taulukkoelementtiä ei-taulukolta merkissä $1.",
+ "abusefilter-exception-notarray": "Pyydetty taulukkoelementtiä ei-taulukolta merkissä $1.",
+ "abusefilter-exception-unclosedcomment": "Sulkematon kommentti merkissä $1.",
+ "abusefilter-exception-invalidiprange": "Virheellinen IP-osoiteavaruus \"$2\" merkissä $1.",
+ "abusefilter-exception-disabledvar": "Muuttuja $2 merkissä $1 ei ole enää käytössä.",
"abusefilter-action-tag": "Merkkaa",
"abusefilter-action-throttle": "Rajoita",
"abusefilter-action-warn": "Varoita",
@@ -359,7 +421,7 @@
"abusefilter-revert-periodstart": "Aikaväli alkaa:",
"abusefilter-revert-periodend": "Aikaväli loppuu:",
"abusefilter-revert-search": "Valitse toimenpiteet",
- "abusefilter-revert-filter": "Suodatin:",
+ "abusefilter-revert-filter": "Suodatin nro:",
"abusefilter-revert-preview-intro": "Alla ovat ne väärinkäyttösuodattimen suorittamat toimenpiteet, jotka peruutetaan tällä toiminnolla.\nTarkista ne huolellisesti ja paina \"{{int:abusefilter-revert-confirm}}\", niin toimenpiteet peruutetaan.",
"abusefilter-revert-confirm": "Vahvista",
"abusefilter-revert-success": "Olet peruuttanut kaikki toimenpiteet, jotka väärinkäyttösuodatin teki [[Special:AbuseFilter/$1|suodattimen $2]] ehtojen mukaisesti.",
@@ -372,6 +434,7 @@
"abusefilter-test-submit": "Kokeile",
"abusefilter-test-load": "Lataa",
"abusefilter-test-user": "Muutokset, jotka on tehnyt käyttäjä:",
+ "abusefilter-test-nobots": "Piilota bottimuokkaukset",
"abusefilter-test-period-start": "Muutokset, jotka on tehty jälkeen:",
"abusefilter-test-period-end": "Muutokset, jotka on tehty ennen:",
"abusefilter-test-page": "Muutokset, jotka on tehty sivulle:",
@@ -404,6 +467,7 @@
"abusefilter-topnav-import": "Tuo suodatin",
"abusefilter-log-name": "Väärinkäyttösuodattimen loki",
"abusefilter-log-header": "Tässä lokissa esitetään yhteenveto suodattimiin tehdyistä muutoksista.\nLisätietoja saat suodattimen [[Special:AbuseFilter/history|viimeisimpien muutosten luettelosta]].",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|loi}} kohteen $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|muutti}} kohdetta $4 ($5)",
"abusefilter-log-noresults": "Ei tuloksia",
"abusefilter-diff-title": "Versioiden välinen ero",
@@ -419,16 +483,11 @@
"abusefilter-import-submit": "Tuo tiedot",
"abusefilter-group-default": "Yleinen",
"abusefilter-http-error": "Tapahtui HTTP-virhe: $1.",
- "apihelp-abusefilterchecksyntax-description": "Tarkista väärinkäyttösuodattimen syntaksi.",
- "apihelp-abusefilterchecksyntax-example-1": "Tarkasta kelvollisen suodattimen ehtolauserakenne",
- "apihelp-abusefilterchecksyntax-example-2": "Tarkasta epäkelvon suodattimen ehtolauserakenne",
- "apihelp-abusefilterevalexpression-description": "Arvioi väärinkäyttösuodattimen lauseketta.",
- "apihelp-abusefilterevalexpression-param-expression": "Arvioitava lauseke.",
- "apihelp-abusefilterevalexpression-example-1": "Arvioi yksinkertaista lauseketta",
- "apihelp-abusefilterunblockautopromote-param-user": "Käyttäjän, jolta haluat poistaa eston, käyttäjänimi.",
- "apihelp-query+abusefilters-description": "Näytä väärinkäyttösuodatinten yksityiskohdat.",
- "apihelp-query+abusefilters-example-1": "Luetteloi käytössä olevat julkiset suodattimet",
- "apihelp-query+abusefilters-example-2": "Näytä joitain tietoja suodattimista",
- "apihelp-query+abuselog-example-1": "Näytä viimeisimmät lokimerkinnät",
- "apierror-abusefilter-badsyntax": "Suodattimella on virheellinen syntaksi."
+ "abusefilter-view-private-submit": "Näytä yksityiskohdat",
+ "abusefilter-view-private": "Näytä yksityiskohdat",
+ "abusefilter-view-private-reason": "Syy yksityiskohtien näyttämiseen:",
+ "abusefilter-log-details-id": "Lokin tunnistenumero",
+ "abusefilter-log-ip-not-available": "Ei saatavissa",
+ "abusefilter-tag-reserved": "Tämä <code>abusefilter-condition-limit</code> merkintä on varattu Väärinkäyttösuodattimen sisäiseen käyttöön.",
+ "tag-abusefilter-condition-limit": "ehtojen raja-arvo on saavutettu"
}
diff --git a/AbuseFilter/i18n/fo.json b/AbuseFilter/i18n/fo.json
index f0f5c03d..65d3d564 100644
--- a/AbuseFilter/i18n/fo.json
+++ b/AbuseFilter/i18n/fo.json
@@ -8,7 +8,6 @@
"abusefilter": "Konfigurasjón av misnýtslufilturi",
"abuselog": "Misnýtsluloggur",
"abusefilter-intro": "Vælkomin til markamótið til handfaring av misnýtslufilturinum.\nMisnýtslufilturið er ein sjálvvirkandi mekanisma í ritbúnaðinum, sum fremur sjálvvirkandi eftirlit við øllum sum fer fram.\nHetta markamótið vísir ein lista við útgreinaðum filtrum, og ger tað møguligt at broyta tey.",
- "abusefilter-mustbeeditor": "Av trygdarávum eru tað bert brúkarar við rættindum til at broyta misnýtslufilturið, ið sleppa at brúka hetta markamótið.",
"abusefilter-warning": "'''Ávaring:''' Henda handlingin er sjálvvirkandi blivin sædd sum skaðilig.\nRættingar ið ikki eru konstruktivar verða skjótt afturstillaðar, \nog ekstremar ella endurtiknar ikki brúkbarar rættingar fara at føra til at tín IP adressa verður sperrað.\nUm tú meinar, at tað ið tú ger er konstuktivt, so kanst tú goyma enna einaferð fyri at vátta tað.\nEin stutt frágreiðing um tann misnýtsluregulin, ið tín handling passaði saman við er: $1",
"abusefilter-disallowed": "Henda gerð er sjálvvirkandi blivin fráboðað sum skaðilig, og verður tí ikki loyvd.\nUm tú meinar, at tað ið tú gjørdi var brúkbart, vinarliga boða so einum administatori frá um tað ið tú ætlaði tær at gera.\nEin stutt frágreiðing um misnýtsluregulin, sum tín gerð passaði saman við er: $1",
"abusefilter-blocked-display": "Tað ið tú gjørdi er sjálvvirkandi blivið identifiserað sum skaðiligt, \nog tú sleppur ikki at fremja tað í verki.\nHarumframt, fyri at verja {{SITENAME}}, er tín brúkarakonta og allar IP adressur, sum kunnu setast í samband við hana, blivin sperrað, so tú ikki sleppur at rætta.\nUm hetta er hent av misgáum, vinarliga set teg so í samband við ein administrator.\nEin stutt frágreiðing um tað slagið av misnýtslu, ið tín handling passaði saman við er: $1",
@@ -65,8 +64,6 @@
"abusefilter-log-hide-hidden": "Fjal henda postin fyri almennum sýningum",
"abusefilter-log-hide-reason": "Orsøk:",
"abusefilter-log-hide-forbidden": "Tú hevur ikki loyvi til at fjala misnýtsluloggpostar.",
- "abusefilter-logentry-suppress": "fjald \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "gjørdi \"[[$1]]\" sjónligt aftur",
"logentry-abusefilter-hit": "$1 útloysti $4, sum førir til handling \"$5\" á $3. Tiltøk sett í verk: $6 ($7)",
"abusefilter-management": "Stýring av misnýtslufilturi",
"abusefilter-list": "Øll filtur",
@@ -99,7 +96,6 @@
"abusefilter-list-options-scope-local": "Bert lokalar ásetingar",
"abusefilter-list-options-scope-global": "Bert alheims ásetingar",
"abusefilter-list-options-scope-all": "Lokalar og globalar ásetingar",
- "abusefilter-list-options-disabled": "Óvirkin filtur:",
"abusefilter-list-options-hidedisabled": "Goym óvirkin filtur",
"abusefilter-list-options-submit": "Dagfør",
"abusefilter-tools-text": "Her eru nøkur tól, sum kunnu vera brúkbar til at formulera og feilsøkja misnýtslufiltur.",
@@ -126,12 +122,10 @@
"abusefilter-edit-lastmod": "Filturið seinast broytt:",
"abusefilter-edit-lastmod-text": "$1 av $2",
"abusefilter-edit-hitcount": "Filturtreff:",
- "abusefilter-edit-action-flag": "Flagga rættindina í misnýtslulogginum",
"abusefilter-edit-action-blockautopromote": "Tak burtur støðu brúkarans sum sjálvvirkandi váttaður brúkari",
"abusefilter-edit-action-degroup": "Tak brúkaran burtur frá øllum bólkum við framíhjárættindum",
"abusefilter-edit-action-block": "Sperra brúkaran og/ella IP adressuna, so viðkomandi ikki sleppur at skriva",
"abusefilter-edit-throttle-period": "Tíðarskeið:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekund|sekundir}}",
"abusefilter-edit-warn-other": "Onnur boð",
"abusefilter-edit-warn-actions": "Handlingar:",
"abusefilter-edit-warn-preview": "Forskoðan av valdu boðum",
@@ -155,11 +149,10 @@
"abusefilter-edit-builder-vars-oldsize": "Gomul síðustødd",
"abusefilter-edit-builder-vars-removedlines": "Linjur tiknar burtur í rætting",
"abusefilter-edit-builder-vars-summary": "Samandráttur av rætting",
- "abusefilter-edit-builder-vars-article-id": "Síðu ID",
- "abusefilter-edit-builder-vars-article-ns": "Navnarúmið hjá síðuni",
- "abusefilter-edit-builder-vars-article-text": "Síðuheiti (uttan navnarúm)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Alt síðuheitið",
- "abusefilter-edit-builder-vars-article-views": "Síðuvísingar",
+ "abusefilter-edit-builder-vars-page-id": "Síðu ID",
+ "abusefilter-edit-builder-vars-page-ns": "Navnarúmið hjá síðuni",
+ "abusefilter-edit-builder-vars-page-title": "Síðuheiti (uttan navnarúm)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Alt síðuheitið",
"abusefilter-edit-builder-vars-user-editcount": "Tal av rættingum hjá brúkara",
"abusefilter-edit-builder-vars-user-age": "Kontoaldur",
"abusefilter-edit-builder-vars-user-name": "Navn á brúkarakonto",
diff --git a/AbuseFilter/i18n/fr.json b/AbuseFilter/i18n/fr.json
index 5fbc909b..f67799d4 100644
--- a/AbuseFilter/i18n/fr.json
+++ b/AbuseFilter/i18n/fr.json
@@ -35,14 +35,16 @@
"TomT0m",
"Wladek92",
"Elfix",
- "Matma Rex"
+ "Matma Rex",
+ "Thibaut120094",
+ "Matěj Suchánek"
]
},
"abusefilter-desc": "Applique des heuristiques automatiques aux modifications",
"abusefilter": "Configuration du filtre antiabus",
"abuselog": "Journal des filtres antiabus",
"abusefilter-intro": "Bienvenue dans l'interface de gestion des filtres antiabus.\nLe filtre antiabus est un mécanisme logiciel automatisé qui permet d'appliquer des heuristiques prédéfinies à toutes les actions.\nCette interface présente une liste des filtres définis, et donne la possibilité de les modifier.",
- "abusefilter-mustbeeditor": "Pour des raisons de sécurité, seuls les utilisateurs avec le droit de modifier les filtres antiabus peuvent utiliser cette interface.",
+ "abusefilter-mustviewprivateoredit": "Pour des raisons de sécurité, seuls les utilisateurs avec le droit de voir les filtres d’abus privés ou de modifier les filtres peuvent utiliser cette interface.",
"abusefilter-warning": "'''Avertissement :''' cette action a été automatiquement identifiée comme nuisible.\nLes actions non constructives seront rapidement annulées et les modifications non constructives répétées ou outrageantes provoqueront le blocage de votre compte ou de votre adresse IP.\nSi vous estimez que cette action est constructive, vous pouvez la soumettre une nouvelle fois pour la confirmer.\nVoici une brève description de la règle de filtrage antiabus ayant détecté votre action : $1",
"abusefilter-disallowed": "Cette action a été automatiquement identifiée comme nuisible, et a donc été empêchée.\nSi vous pensez que votre action était constructive, veuillez contacter un administrateur et l'informer de ce que vous avez essayé de faire.\nVoici une brève description de la règle de filtrage antiabus ayant détecté votre action : $1",
"abusefilter-blocked-display": "Cette action a été automatiquement identifée comme nuisible\net vous avez déjà été empêché de l'exécuter.\nDe plus, pour protéger {{SITENAME}}, votre compte utilisateur et toutes les adresses IP associées ont été bloqués contre toute modification.\nSi ceci est dû à une erreur, veuillez contacter un administrateur.\nVoici une brève description de la règle de filtrage antiabus ayant détecté votre action : $1",
@@ -57,6 +59,7 @@
"right-abusefilter-log": "Voir le journal des filtres antiabus",
"right-abusefilter-log-detail": "Voir les entrées détaillées du journal antiabus",
"right-abusefilter-private": "Voir les données privées dans le journal antiabus",
+ "right-abusefilter-private-log": "Afficher les détails confidentiels du journal d’accès de AbuseFilter",
"right-abusefilter-modify-restricted": "Modifier les filtres antiabus qui ont des actions restreintes",
"right-abusefilter-revert": "Révoquer toutes les modifications effectuées par un filtre antiabus donné",
"right-abusefilter-view-private": "Voir les filtres d'abus marqués comme privé",
@@ -69,10 +72,11 @@
"action-abusefilter-log": "voir le journal des filtres antiabus",
"action-abusefilter-log-detail": "voir les entrées détaillées du journal des filtres antiabus",
"action-abusefilter-private": "voir les données privées dans le journal des filtres antiabus",
+ "action-abusefilter-private-log": "afficher le journal des accès aux détails confidentiels de AbuseFilter",
"action-abusefilter-modify-restricted": "modifier les filtres antiabus avec des actions restreintes",
"action-abusefilter-revert": "révoquer toutes les modifications selon un filtre antiabus donné",
"action-abusefilter-view-private": "voir les filtres antiabus marqués comme privés",
- "action-abusefilter-log-private": "voir les entrées du journal des filtres antiabus marqué comme privées",
+ "action-abusefilter-log-private": "voir les entrées du journal des filtres antiabus marqués comme privés",
"abusefilter-log": "Journal des déclenchements du filtre antiabus",
"abusefilter-log-summary": "Ce journal affiche une liste des actions détectées par les filtres.",
"abusefilter-log-search": "Rechercher dans le journal des filtres antiabus",
@@ -80,13 +84,22 @@
"abusefilter-log-search-filter": "IDs de filtre (séparés par des barres verticales) :",
"abusefilter-log-search-title": "Titre :",
"abusefilter-log-search-wiki": "Wiki :",
+ "abusefilter-log-search-impact": "Impact:",
+ "abusefilter-log-search-impact-all": "Toutes les actions",
+ "abusefilter-log-search-impact-saved": "Modifications sauvegardées uniquement",
+ "abusefilter-log-search-impact-not-saved": "Sans sauvegarder les modifications",
"abusefilter-log-search-entries-label": "Visibilité :",
"abusefilter-log-search-entries-all": "Toutes les entrées",
"abusefilter-log-search-entries-hidden": "Entrées masquées uniquement",
"abusefilter-log-search-entries-visible": "Entrées visibles uniquement",
+ "abusefilter-log-search-action-label": "Action déclenchée:",
+ "abusefilter-log-search-action-other": "Autre",
+ "abusefilter-log-search-action-any": "Tous",
+ "abusefilter-log-search-action-taken-label": "Mesure prise :",
+ "abusefilter-log-search-action-taken-any": "N’importe laquelle",
"abusefilter-log-search-submit": "Rechercher",
- "abusefilter-log-entry": "$1 : $2 {{GENDER:$8:a déclenché}} un filtre antiabus, en {{GENDER:$8|effectuant}} l’action « $3 » sur $4.\nActions entreprises : $5 ;\nDescription du filtre : $6",
- "abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8:a déclenché}} un filtre antiabus, {{GENDER:$8|en effectuant}} l’action « $3 » sur $4.\nAction entreprise : $5  ;\nDescription du filtre : $6 ($7)",
+ "abusefilter-log-entry": "$1 : $2 {{GENDER:$8|a déclenché}} un filtre antiabus, en {{GENDER:$8|effectuant}} l’action « $3 » sur $4.\nActions entreprises : $5 ;\nDescription du filtre : $6",
+ "abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|a déclenché}} un filtre antiabus, {{GENDER:$8|en effectuant}} l’action « $3 » sur $4.\nAction entreprise : $5  ;\nDescription du filtre : $6 ($7)",
"abusefilter-log-detailedentry-meta": "$1 : $2 {{GENDER:$9|a déclenché}} le $3, {{GENDER:$9|en effectuant}} l’action « $4 » sur $5.\nActions entreprises : $6 ;\nDescription du filtre : $7 ($8)",
"abusefilter-log-detailedentry-global": "filtre global $1",
"abusefilter-log-detailedentry-local": "filtre antiabus $1",
@@ -97,29 +110,42 @@
"abusefilter-log-details-var": "Variable",
"abusefilter-log-details-val": "Valeur",
"abusefilter-log-details-vars": "Paramètres de l'action",
- "abusefilter-log-details-private": "Données privées",
+ "abusefilter-log-details-private": "Données confidentiels du journal",
"abusefilter-log-details-ip": "Adresse IP d'origine",
+ "abusefilter-log-details-checkuser": "Vérifier l’utilisateur",
"abusefilter-log-noactions": "néant",
"abusefilter-log-details-diff": "Changements faits lors de la modification",
"abusefilter-log-linkoncontribs": "journal des abus",
- "abusefilter-log-linkoncontribs-text": "Journal des abus de cet{{GENDER:$1| utilisateur|te utilisatrice}}",
+ "abusefilter-log-linkoncontribs-text": "Journal des abus de ce{{GENDER:$1|t utilisateur|tte utilisatrice}}",
+ "abusefilter-log-linkonhistory": "voir le journal des abus",
+ "abusefilter-log-linkonhistory-text": "Voir le journal des abus pour cette page",
"abusefilter-log-hidden": "(entrée masquée)",
"abusefilter-log-hidden-implicit": "(masquée car la version a été supprimée)",
"abusefilter-log-cannot-see-details": "Vous n'avez pas le droit de voir les détails de cette entrée.",
+ "abusefilter-log-cannot-see-private-details": "Vous n’avez pas le droit de voir les détails confidentiels de cette entrée.",
"abusefilter-log-nonexistent": "Il n’existe pas d’entrée associée à l’identifiant spécifié.",
"abusefilter-log-details-hidden": "Vous ne pouvez pas afficher les détails pour cette entrée parce qu'elle est cachée à la vue du public.",
+ "abusefilter-log-details-hidden-implicit": "Vous ne pouvez pas afficher les détails de cette entrée parce que sa révision associée n’est pas visible publiquement.",
"abusefilter-log-private-not-included": "Un ou plusieurs des IDs de filtre que vous avez spécifiés sont privés. Comme vous n’êtes pas autorisé à voir les détails des filtres privés, ces filtres n’ont pas été inclus dans la recherche.",
"abusefilter-log-hide-legend": "Masquer l'entrée dans les journaux",
"abusefilter-log-hide-id": "Identifiant de l'entrée de journal :",
"abusefilter-log-hide-hidden": "Masquer cette entrée à la vue du public",
"abusefilter-log-hide-reason": "Motif :",
+ "abusefilter-log-hide-reason-other": "Motif autre ou supplémentaire :",
"abusefilter-log-hide-forbidden": "Vous n'avez pas le droit de masquer des entrées du journal des abus.",
- "abusefilter-logentry-suppress": "a masqué [[$1]]",
- "abusefilter-logentry-unsuppress": "a démasqué [[$1]]",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|a masqué}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|a démasqué}} $3",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|a déclenché}} $4, {{GENDER:$2|en effectuant}} l’action « $5 » sur $3. Actions entreprises : $6 ($7)",
+ "log-action-filter-abusefilter": "Type de modification de filtre :",
+ "log-action-filter-abusefilter-create": "Création de nouveaux filtres",
+ "log-action-filter-abusefilter-modify": "Filtrer les notifications",
+ "log-action-filter-suppress-abuselog": "Suppression du journal anti-abus",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|a accédé}} aux détails confidentiels pour $3",
+ "abusefilterprivatedetails-log-name": "Détails confidentiels du journal d’accès de AbuseFilter",
"abusefilter-management": "Gestion du filtre antiabus",
"abusefilter-list": "Tous les filtres",
"abusefilter-list-id": "N° filtre",
+ "abusefilter-list-pattern": "Motif",
"abusefilter-list-status": "État",
"abusefilter-list-public": "Description publique",
"abusefilter-list-consequences": "Conséquences",
@@ -135,6 +161,7 @@
"abusefilter-enabled": "Activé",
"abusefilter-deleted": "Supprimé",
"abusefilter-disabled": "Désactivé",
+ "abusefilter-throttled": "limité",
"abusefilter-hitcount": "$1 détection{{PLURAL:$1||s}}",
"abusefilter-new": "Créer un nouveau filtre",
"abusefilter-return": "Revenir à la gestion des filtres",
@@ -148,8 +175,16 @@
"abusefilter-list-options-scope-local": "Règles locales uniquement",
"abusefilter-list-options-scope-global": "Règles globales uniquement",
"abusefilter-list-options-scope-all": "Règles locales et globales",
- "abusefilter-list-options-disabled": "Filtres désactivés :",
+ "abusefilter-list-options-further-options": "Autres options :",
"abusefilter-list-options-hidedisabled": "Masquer les filtres désactivés",
+ "abusefilter-list-options-hideprivate": "Cacher les filtres privés",
+ "abusefilter-list-options-searchfield": "Rechercher dans les règles :",
+ "abusefilter-list-options-searchpattern": "Insérer un motif",
+ "abusefilter-list-options-searchoptions": "Mode de recherche :",
+ "abusefilter-list-options-search-like": "Requête simple",
+ "abusefilter-list-options-search-rlike": "Expression régulière",
+ "abusefilter-list-options-search-irlike": "Expression régulière insensible à la casse",
+ "abusefilter-list-regexerror": "Une erreur s’est produite lors de la recherche : Erreur de syntaxe de l’expression régulière.",
"abusefilter-list-options-submit": "Mettre à jour",
"abusefilter-tools-text": "Voici quelques outils qui peuvent être utiles dans la formulation et le déboguage des filtres antiabus.",
"abusefilter-tools-expr": "Testeur d'expressions",
@@ -164,6 +199,7 @@
"abusefilter-edit": "Modifier le filtre d'abus",
"abusefilter-edit-subtitle": "Modification du filtre $1",
"abusefilter-edit-subtitle-new": "Créer un filtre",
+ "abusefilter-edit-token-not-match": "Les modifications n'ont pas été enregistrées ! Veuillez sauvegarder à nouveau.",
"abusefilter-edit-oldwarning": "<strong>Vous êtes en train de modifier une ancienne version de ce filtre.\nLes statistiques affichées concernent la version la plus récente de celui-ci.\nSi vous enregistrez vos modifications, vous allez écraser tous les changements intervenus depuis la version que vous modifiez.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Revenir à l’historique de ce filtre]]",
"abusefilter-edit-status-label": "Statistiques :",
"abusefilter-edit-status": "{{PLURAL:$1|Dans la dernière action|Parmi les $1 dernières actions}}, ce filtre a été déclenché $2 fois ($3 %).",
@@ -172,7 +208,9 @@
"abusefilter-edit-new": "Nouveau filtre",
"abusefilter-edit-save": "Enregistrer le filtre",
"abusefilter-edit-id": "N° filtre :",
+ "abusefilter-edit-switch-editor": "Basculer d’éditeur",
"abusefilter-edit-description": "Description :\n: ''(visible publiquement)''",
+ "abusefilter-edit-field-description": "description",
"abusefilter-edit-group": "Groupe du filtre :",
"abusefilter-edit-flags": "Drapeaux :",
"abusefilter-edit-enabled": "Activer ce filtre",
@@ -180,6 +218,7 @@
"abusefilter-edit-hidden": "Cacher les détails de ce filtre à la vue publique",
"abusefilter-edit-global": "Filtre global",
"abusefilter-edit-rules": "Conditions :",
+ "abusefilter-edit-field-conditions": "conditions",
"abusefilter-edit-notes": "Notes :",
"abusefilter-edit-lastmod": "Dernière modification du filtre :",
"abusefilter-edit-lastmod-text": "$1 par $2",
@@ -190,25 +229,48 @@
"abusefilter-edit-action-blockautopromote": "Révoquer l'état autoconfirmé du compte utilisateur",
"abusefilter-edit-action-degroup": "Retirer l'utilisateur de tous les groupes privilégiés",
"abusefilter-edit-action-block": "Bloquer en écriture l’utilisateur ou l’adresse IP",
+ "abusefilter-edit-action-blocktalk": "Empêcher l’utilisateur ou l’adresse IP de modifier sa propre page de discussion",
"abusefilter-edit-action-throttle": "Déclencher les actions uniquement si l'utilisateur a dépassé un taux limite",
- "abusefilter-edit-action-rangeblock": "Bloquer la plage IP /16 d'origine de l'utilisateur.",
+ "abusefilter-edit-action-rangeblock": "Bloquer la plage IP respective d’où provient l’utilisateur.",
"abusefilter-edit-action-tag": "Baliser la modification pour une relecture ultérieure.",
"abusefilter-edit-throttle-count": "Nombre d'actions autorisées :",
- "abusefilter-edit-throttle-period": "Laps de temps :",
- "abusefilter-edit-throttle-seconds": "$1 seconde{{PLURAL:$1||s}}",
- "abusefilter-edit-throttle-groups": "Grouper la modération par :\n: ''(un par ligne, séparé par des virgules)''",
+ "abusefilter-edit-throttle-period": "Laps de temps (en secondes) :",
+ "abusefilter-edit-throttle-groups": "Grouper la modération par :",
+ "abusefilter-edit-throttle-ip": "Adresse IP",
+ "abusefilter-edit-throttle-user": "Compte utilisateur",
+ "abusefilter-edit-throttle-range": "intervalle /16",
+ "abusefilter-edit-throttle-creationdate": "Référence horaire du serveur lors de la création du compte",
+ "abusefilter-edit-throttle-editcount": "Compteur de modifications",
+ "abusefilter-edit-throttle-site": "Tout le site",
+ "abusefilter-edit-throttle-page": "Page",
+ "abusefilter-throttle-details": "Permettre $1 {{PLURAL:$1|une action|des actions}} toutes les {{PLURAL:$2|secondes|$2 secondes}}, en groupant les goulots par : $3",
"abusefilter-edit-warn-message": "Message système à utiliser pour l'avertissement :",
"abusefilter-edit-warn-other": "Autre message",
- "abusefilter-edit-warn-other-label": "Nom de page d'un autre message\n: ''(sans le préfixe MediaWiki)''",
+ "abusefilter-edit-warn-other-label": "Nom de page d’un autre message :\n:''(sans le préfixe « MédiaWiki »)''",
"abusefilter-edit-warn-actions": "Actions :",
- "abusefilter-edit-warn-preview": "Prévisualiser le message sélectionné",
+ "abusefilter-edit-warn-preview": "Afficher/Masquer l'aperçu du message sélectionné",
"abusefilter-edit-warn-edit": "Créer ou modifier le message sélectionné",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Balises]] à appliquer (une par ligne) :",
+ "abusefilter-edit-disallow-message": "Message système à utiliser pour interdire :",
+ "abusefilter-edit-disallow-other": "Autre message",
+ "abusefilter-edit-disallow-other-label": "Nom de la page d’un autre message :\n:''(sans le préfixe « MediaWiki: »)''",
+ "abusefilter-edit-disallow-actions": "Actions :",
+ "abusefilter-edit-disallow-preview": "Afficher/Masquer l’aperçu du message sélectionné",
+ "abusefilter-edit-disallow-edit": "Créer/Modifier le message sélectionné",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Balises]] à appliquer :",
+ "abusefilter-edit-tag-placeholder": "Ajouter des balises (une par une, séparées par une virgule)",
+ "abusefilter-edit-tag-hidden-placeholder": "Ajouter des balises (séparées par des virgules)",
+ "abusefilter-edit-block-anon-durations": "Durée de blocage pour les utilisateurs anonymes :",
+ "abusefilter-edit-block-user-durations": "Durée de blocage pour les utilisateurs enregistrés :",
+ "abusefilter-block-anon": "Bloquer les utilisateurs anonymes",
+ "abusefilter-block-user": "bloquer les utilisateurs enregistrés",
+ "abusefilter-block-talk": "page de discussion bloquée",
"abusefilter-edit-denied": "Vous ne pouvez pas voir les détails de ce filtre, parce qu’il est caché à la vue du public",
"abusefilter-edit-main": "Paramètres du filtre",
"abusefilter-edit-done-subtitle": "Filtre modifié",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Vos modifications]] au [[Special:AbuseFilter/$1|filtre $3]] ont été enregistrées.",
"abusefilter-edit-badsyntax": "Le filtre que vous avez spécifié comporte une erreur de syntaxe.\nLe résultat de l'analyseur syntaxique était : <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Les champs suivants sont nécessaires et doivent être remplis : $1",
+ "abusefilter-edit-deleting-enabled": "Vous ne pouvez pas marquer un filtre actif comme supprimé.",
"abusefilter-edit-restricted": "Vous ne pouvez pas modifier ce filtre parce qu'il contient une ou plusieurs actions restreintes.\nDemandez à un utilisateur autorisé à ajouter des actions restreintes d'effectuer la modification pour vous.",
"abusefilter-edit-viewhistory": "Voir l’historique de ce filtre",
"abusefilter-edit-history": "Historique :",
@@ -220,7 +282,7 @@
"abusefilter-edit-export": "Exporter ce filtre vers un autre wiki",
"abusefilter-edit-syntaxok": "Aucune erreur de syntaxe détectée.",
"abusefilter-edit-syntaxerr": "Erreur de syntaxe détectée : $1",
- "abusefilter-edit-bad-tags": "Une (ou plusieurs) balise(s) que vous avez spécifiée(s) n'est (ne sont) pas valide(s).\nLes balises doivent être courtes, ne pas contenir de caractères spéciaux, ni être réservées par d'autres logiciels. Essayez en choisissant un autre nom de balise",
+ "abusefilter-edit-bad-tags": "Au moins une des balises que vous avez spécifiées n’est pas valide.\nLes balises doivent être courtes, ne pas contenir de caractères spéciaux, ni être réservées par d’autres logiciels. Essayez en choisissant un autre nom de balise",
"abusefilter-edit-notallowed": "Vous n'êtes pas autorisé à créer ou modifier des filtres antiabus",
"abusefilter-edit-notallowed-global": "Vous n'avez pas le droit de créer ou de modifier les filtres globaux d'abus",
"abusefilter-edit-notallowed-global-custom-msg": "Les messages d’avertissement personnalisés ne sont pas pris en charge pour les filtres globaux",
@@ -233,8 +295,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Modulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Puissance (**)",
"abusefilter-edit-builder-group-op-comparison": "Opérateurs de comparaison",
- "abusefilter-edit-builder-op-comparison-equal": "Égal à (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Différent de (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Valeur égale à (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Valeur et type égaux à (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Valeur non égale à (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Valeur et type différents de (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Inférieur à (<)",
"abusefilter-edit-builder-op-comparison-gt": "Supérieur à (>)",
"abusefilter-edit-builder-op-comparison-lte": "Inférieur ou égal à (<=)",
@@ -257,23 +321,30 @@
"abusefilter-edit-builder-funcs-lcase": "Convertir en minuscules (lcase)",
"abusefilter-edit-builder-funcs-ucase": "Convertir en majuscules (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normaliser les caractères prêtant à confusion (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normaliser et rechercher dans une chaîne de multiples sous-chaînes avec le critère OU (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Normaliser et rechercher dans une chaîne des multiples sous-chaînes avec le critère ET (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Enlever les caractères doubles (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Caractères spéciaux / total des caractères (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normaliser (norm)",
"abusefilter-edit-builder-funcs-count": "Nombre d'occurrences de la chaîne de caractères X dans la chaîne Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Nombre de fois que l'expression rationnelle X apparaît dans la chaîne Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Tableau de correspondance d’expressions rationnelles avec un texte pour chaque groupe de capture (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Supprimer les espaces (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Supprimer les caractères spéciaux (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "L'adresse IP est-elle dans la plage ? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Rechercher des multiples sous-chaînes dans une chaîne (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Rechercher dans une chaîne des multiples sous-chaînes avec le critère OU (contains_any).",
+ "abusefilter-edit-builder-funcs-contains-all": "Rechercher dans une chaîne des multiples sous-chaînes avec le critère ET (contains_all).",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Vérifier si un argument donné est égal (===) à l'un des arguments suivants (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Sous-chaîne (substr)",
"abusefilter-edit-builder-funcs-strpos": "Position de la sous-chaîne dans la chaîne (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Remplacer la sous-chaîne par la chaîne (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Échapper la chaîne comme littérale dans l'expression rationnelle (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Définir la variable (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Normaliser les entités HTML en caractères unicode (assainir)",
"abusefilter-edit-builder-group-vars": "Variables",
"abusefilter-edit-builder-vars-accountname": "Nom du compte (lors de la création du compte)",
"abusefilter-edit-builder-vars-timestamp": "Horodatage Unix de la modification",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Horodatage du journal",
"abusefilter-edit-builder-vars-action": "Action",
"abusefilter-edit-builder-vars-addedlines": "Lignes ajoutées lors de la modification",
"abusefilter-edit-builder-vars-delta": "Différence de taille lors de la modification",
@@ -284,32 +355,38 @@
"abusefilter-edit-builder-vars-new-content-model": "Nouveau modèle de contenu",
"abusefilter-edit-builder-vars-removedlines": "Lignes supprimées lors de la modification",
"abusefilter-edit-builder-vars-summary": "Résumé/motif de la modification",
- "abusefilter-edit-builder-vars-article-id": "Numéro de la page",
- "abusefilter-edit-builder-vars-article-ns": "Espace de noms de la page",
- "abusefilter-edit-builder-vars-article-text": "Titre de la page (sans l'espace de noms)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Titre complet de la page",
- "abusefilter-edit-builder-vars-article-views": "Pages vues",
+ "abusefilter-edit-builder-vars-page-id": "Numéro de la page",
+ "abusefilter-edit-builder-vars-page-ns": "Espace de noms de la page",
+ "abusefilter-edit-builder-vars-page-title": "Titre de la page (sans l'espace de noms)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Titre complet de la page",
+ "abusefilter-edit-builder-vars-page-age": "Age de la page (en secondes)",
"abusefilter-edit-builder-vars-movedfrom-id": "Numéro de la page d'origine à renommer",
"abusefilter-edit-builder-vars-movedfrom-ns": "Espace de noms de la page d'origine à renommer",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titre de la page d'origine à renommer",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Titre entier de la page d'origine à renommer",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titre de la page d'origine à renommer",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Titre entier de la page d'origine à renommer",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Âge de la page source déplacée (en secondes)",
"abusefilter-edit-builder-vars-movedto-id": "Numéro de la page de destination du renommage",
"abusefilter-edit-builder-vars-movedto-ns": "Espace de noms de la page de destination du renommage",
- "abusefilter-edit-builder-vars-movedto-text": "Titre de la page de destination du renommage",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Titre entier de la page de destination du renommage",
+ "abusefilter-edit-builder-vars-movedto-title": "Titre de la page de destination du renommage",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Titre entier de la page de destination du renommage",
+ "abusefilter-edit-builder-vars-movedto-age": "Âge de la page de destination du déplacement (en secondes)",
"abusefilter-edit-builder-vars-user-editcount": "Compteur de modifications de l'utilisateur",
"abusefilter-edit-builder-vars-user-age": "Âge du compte utilisateur",
- "abusefilter-edit-builder-vars-user-name": "Nom du compte utilisateur",
+ "abusefilter-edit-builder-vars-user-name": "Nom du compte d’utilisateur",
"abusefilter-edit-builder-vars-user-groups": "Groupes (y compris implicites) dont l'utilisateur est membre",
"abusefilter-edit-builder-vars-user-rights": "Droits qu’a un utilisateur",
"abusefilter-edit-builder-vars-user-blocked": "Si l'utilisateur est bloqué",
"abusefilter-edit-builder-vars-user-emailconfirm": "Temps depuis la confirmation de l'adresse courriel",
"abusefilter-edit-builder-vars-recent-contributors": "Les dix derniers contributeurs de la page",
"abusefilter-edit-builder-vars-first-contributor": "Premier utilisateur à contribuer à cette page",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Dix derniers utilisateurs ayant contribué à la page source déplacée",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Premier utilisateur à contribuer à la page source déplacée",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Dix derniers utilisateurs ayant contribué à la page destination déplacée",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Premier utilisateur à contribuer à la page destination déplacée",
"abusefilter-edit-builder-vars-all-links": "Tous les liens externes dans le nouveau texte",
"abusefilter-edit-builder-vars-added-links": "Tous les liens externes ajoutés dans la modification",
"abusefilter-edit-builder-vars-removed-links": "Tous les liens externes retirés lors de la modification",
- "abusefilter-edit-builder-vars-old-text": "Ancien texte de la page, avant la modification",
+ "abusefilter-edit-builder-vars-old-text": "Wikitexte de l’ancienne page, avant la modification (n'est plus utilisé)",
"abusefilter-edit-builder-vars-new-text": "Nouveau texte de la page, après la modification",
"abusefilter-edit-builder-vars-new-pst": "Wikitexte de la nouvelle page, transformé avant enregistrement",
"abusefilter-edit-builder-vars-diff-pst": "Différence unifiée des modifications effectuées dans l’aperçu avant enregistrement transformé",
@@ -320,9 +397,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "Protection contre le renommage",
"abusefilter-edit-builder-vars-restrictions-create": "Protection contre la création",
"abusefilter-edit-builder-vars-restrictions-upload": "Protection contre le téléversement",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Modifier le niveau de protection de la page source déplacée",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Déplacer le niveau de protection de la page source déplacée",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Créer la protection de la page source déplacée",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Télécharger la protection du fichier source déplacé",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Modifier le niveau de protection de la page de destination déplacée",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Déplacer le niveau de protection de la page de destination déplacée",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Créer la protection de la page de destination déplacée",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Télécharger la protection du fichier de destination déplacé",
"abusefilter-edit-builder-vars-old-text-stripped": "Texte de l'ancienne page, dépourvu de toute mise en forme",
"abusefilter-edit-builder-vars-old-links": "Liens dans la page, avant la modification",
- "abusefilter-edit-builder-vars-old-html": "Wikitexte de l'ancienne page, analysé en HTML",
+ "abusefilter-edit-builder-vars-old-html": "Wikitexte de l’ancienne page, analysé en HTML (n'est plus plus utilisé)",
"abusefilter-edit-builder-vars-minor-edit": "Si la modification est marquée comme mineure ou non",
"abusefilter-edit-builder-vars-file-sha1": "hachage SHA1 du contenu du fichier",
"abusefilter-edit-builder-vars-file-size": "Taille du fichier en octets",
@@ -344,11 +429,12 @@
"abusefilter-history-filter": "Règle du filtre",
"abusefilter-history-comments": "Commentaires",
"abusefilter-history-actions": "Actions",
- "abusefilter-history-backedit": "Retour à la page de modification de filtre",
+ "abusefilter-history-backedit": "Retour à la page de modification du filtre",
"abusefilter-history-deleted": "Supprimé",
"abusefilter-history-filterid": "Filtre",
"abusefilter-history-select-legend": "Affiner la recherche",
"abusefilter-history-select-user": "Utilisateur :",
+ "abusefilter-history-select-filter": "ID du filtre :",
"abusefilter-history-select-submit": "Affiner",
"abusefilter-history-diff": "Changements",
"abusefilter-history-error-hidden": "Le filtre que vous avez demandé est caché, et vous ne pouvez pas afficher son historique.",
@@ -359,14 +445,17 @@
"abusefilter-exception-unclosedstring": "Chaîne non fermée débutant au caractère $1.",
"abusefilter-exception-invalidoperator": "Opérateur invalide « $2 » au caractère $1.",
"abusefilter-exception-unrecognisedtoken": "Élément non reconnu « $2 » au caractère $1.",
- "abusefilter-exception-noparams": "Aucun paramètre fourni pour la fonction « $2 » au caractère $1.",
+ "abusefilter-exception-noparams": "Aucun paramètre fourni pour la fonction « $2 » au caractère $1. $3 argument{{PLURAL:$3| attendu|s attendus}}.",
"abusefilter-exception-dividebyzero": "Division illégale de $2 par zéro au caractère $1.",
"abusefilter-exception-unrecognisedvar": "Variable non reconnue $2 au caractère $1",
"abusefilter-exception-notenoughargs": "Pas assez de paramètres pour la fonction $2 appelée au caractère $1.\n$3 {{PLURAL:$3|argument demandé|arguments demandés}}, $4 obtenu{{PLURAL:$4||s}}",
- "abusefilter-exception-regexfailure": "Erreur dans l'expression rationnelle « $3 » au caractère $1 : « $2 »",
+ "abusefilter-exception-regexfailure": "Erreur dans l'expression régulière « $2 » au caractère $1 .",
"abusefilter-exception-overridebuiltin": "Écrasement interdit de la variable disponible par défaut « $2 » au caractère $1.",
- "abusefilter-exception-outofbounds": "Demande de l'élément inexistant $2 (taille de la liste = $3) au caractère $1.",
- "abusefilter-exception-notlist": "Demande d'un élément de tableau appliquée à un non-tableau au caractère $1.",
+ "abusefilter-exception-outofbounds": "Demande d’élément de tableau $2 inexistant (taille du tableau = $3) au caractère $1.",
+ "abusefilter-exception-notarray": "Demande d'un élément de tableau appliquée à un non-tableau au caractère $1.",
+ "abusefilter-exception-unclosedcomment": "Commentaire non fermé au caractère $1.",
+ "abusefilter-exception-invalidiprange": "Intervalle d'adresses IP fourni invalide \"$2\" au caractère $1.",
+ "abusefilter-exception-disabledvar": "La variable $2 au caractère $1 n’est plus utilisée.",
"abusefilter-action-tag": "Baliser",
"abusefilter-action-throttle": "Limiter les modifications",
"abusefilter-action-warn": "Avertir l’utilisateur",
@@ -382,8 +471,9 @@
"abusefilter-revert-periodstart": "Début de la période :",
"abusefilter-revert-periodend": "Fin de la période :",
"abusefilter-revert-search": "Sélectionner les actions",
- "abusefilter-revert-filter": "Filtre :",
+ "abusefilter-revert-filter": "ID de filtre :",
"abusefilter-revert-preview-intro": "Voici les actions réalisées par le filtre antiabus, qui seront révoquées par cette action.\nVeuillez les vérifier attentivement, puis cliquez sur « {{int:abusefilter-revert-confirm}} » pour valider votre sélection.",
+ "abusefilter-revert-confirm-legend": "Confirmer le retour",
"abusefilter-revert-confirm": "Confirmer",
"abusefilter-revert-success": "Vous avez révoqué avec succès toutes les actions entreprises par le filtre antiabus et déclenchées par le [[Special:AbuseFilter/$1|filtre $2]].",
"abusefilter-revert-reason": "Révocation automatique de toutes les actions entreprises par le filtre antiabus et déclenchées par le filtre $1.\nMotif donné : $2",
@@ -395,12 +485,20 @@
"abusefilter-test-submit": "Tester",
"abusefilter-test-load": "Charger",
"abusefilter-test-user": "Modifications par l'utilisateur :",
+ "abusefilter-test-nobots": "Masquer les modifications faites par robot",
"abusefilter-test-period-start": "Changements faits après :",
"abusefilter-test-period-end": "Changements faits avant :",
"abusefilter-test-page": "Modifications apportées à la page :",
"abusefilter-test-shownegative": "Afficher les modifications non prises en compte par le filtre",
"abusefilter-test-syntaxerr": "Le filtre que vous avez saisi contient une erreur de syntaxe.\nVous pouvez recevoir une explication complète en cliquant sur le bouton « {{int:abusefilter-edit-check}} ».",
"abusefilter-test-badtitle": "La titre de page que vous avez saisi n’est pas valide. Il se peut qu’il contienne un ou plusieurs caractères interdits dans les titres.",
+ "abusefilter-test-action": "Type d’action :",
+ "abusefilter-test-search-type-all": "Toutes les actions",
+ "abusefilter-test-search-type-edit": "Modifications",
+ "abusefilter-test-search-type-move": "Déplacements",
+ "abusefilter-test-search-type-delete": "Suppressions",
+ "abusefilter-test-search-type-upload": "Téléversements",
+ "abusefilter-test-search-type-createaccount": "Créations de compte",
"abusefilter-changeslist-examine": "examiner",
"abusefilter-examine": "Examiner des modifications individuelles",
"abusefilter-examine-intro": "Cette page vous permet d'examiner les variables générées pour une modification individuelle par le filtre antiabus et de les tester avec les filtres.",
@@ -427,6 +525,7 @@
"abusefilter-topnav-import": "Importer un filtre",
"abusefilter-log-name": "Journal des modifications du filtre antiabus",
"abusefilter-log-header": "Ce journal affiche un résumé des modifications faites aux filtres.\nPour plus de détails, voyez [[Special:AbuseFilter/history|la liste]] des modifications récentes du filtre.",
+ "abusefilter-logentry-create": "$1 a {{GENDER:$2|créé}} $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|a modifié}} $4 ($5)",
"abusefilter-log-noresults": "Aucun résultat",
"abusefilter-diff-title": "Différences entre les versions",
@@ -442,49 +541,16 @@
"abusefilter-import-submit": "Importer des données",
"abusefilter-group-default": "Par défaut",
"abusefilter-http-error": "Une erreur HTTP s’est produite : $1.",
- "apihelp-abusefiltercheckmatch-description": "Cocher pour voir si un AbuseFilter correspond à un ensemble de variables, événement AbuseFilter tracé par l’éditeur.\n\nvars, rcid ou logid est obligatoire, mais un seul d’entre eux doit être utilisé.",
- "apihelp-abusefiltercheckmatch-summary": "Vérifier pour voir si un AbuseFilter correspond à un ensemble de variables, événement AbuseFilter tracé pour l’éditeur.",
- "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid ou logid est nécessaire bien qu'un seul puisse être utilisé.",
- "apihelp-abusefiltercheckmatch-param-filter": "Le texte complet du filtre pour vérifier une correspondance.",
- "apihelp-abusefiltercheckmatch-param-vars": "Tableau JSON encodé de variables à tester.",
- "apihelp-abusefiltercheckmatch-param-rcid": "ID de la modification récente sur laquelle tester le filtre.",
- "apihelp-abusefiltercheckmatch-param-logid": "ID de l’entrée du journal du filtre antiabus sur laquelle tester le filtre.",
- "apihelp-abusefiltercheckmatch-example-1": "Vérifie si la modification récente d’ID 15 est détectée par un filtre simple",
- "apihelp-abusefilterchecksyntax-description": "Vérifier la syntaxe d’un filtre antiabus.",
- "apihelp-abusefilterchecksyntax-summary": "Vérifier la syntaxe d’un filtre anti-abus.",
- "apihelp-abusefilterchecksyntax-param-filter": "Le texte complet du filtre dont la syntaxe doit être vérifiée.",
- "apihelp-abusefilterchecksyntax-example-1": "Vérifier la syntaxe d’un filtre valide",
- "apihelp-abusefilterchecksyntax-example-2": "Vérifier la syntaxe d’un filtre invalide",
- "apihelp-abusefilterevalexpression-description": "Évalue une expression du filtre antiabus.",
- "apihelp-abusefilterevalexpression-summary": "Evalue l'expression d'un filtre anti-abus.",
- "apihelp-abusefilterevalexpression-param-expression": "L’expression à évaluer.",
- "apihelp-abusefilterevalexpression-example-1": "Évaluer une expression simple",
- "apihelp-abusefilterunblockautopromote-description": "Annule le blocage par un filtre antiabus des promotions automatiques de statut d’un utilisateur.",
- "apihelp-abusefilterunblockautopromote-summary": "Empêche un utilisateur de recevoir des auto-promotions résultant d'un filtre anti-abus.",
- "apihelp-abusefilterunblockautopromote-param-user": "Nom de l’utilisateur à débloquer.",
- "apihelp-abusefilterunblockautopromote-example-1": "Supprime le blocage des promotions automatiques de statut pour [[User:Example]]",
- "apihelp-query+abusefilters-description": "Afficher les détails des filtres antiabus.",
- "apihelp-query+abusefilters-summary": "Afficher les détails des filtres anti-abus.",
- "apihelp-query+abusefilters-param-startid": "Numéro de filtre auquel commencer l’énumération.",
- "apihelp-query+abusefilters-param-endid": "Numéro de filtre auquel terminer l’énumération.",
- "apihelp-query+abusefilters-param-show": "Afficher seulement les filtres correspondant à ces critères.",
- "apihelp-query+abusefilters-param-limit": "Le nombre maximum de filtres à renvoyer.",
- "apihelp-query+abusefilters-param-prop": "Quelles propriétés obtenir.",
- "apihelp-query+abusefilters-example-1": "Afficher les filtres publics activés.",
- "apihelp-query+abusefilters-example-2": "Afficher certains détails sur les filtres.",
- "apihelp-query+abuselog-description": "Afficher les événements détectés par l’un des filtres antiabus.",
- "apihelp-query+abuselog-summary": "Affiche les événements capturés par un des filtres anti-abus.",
- "apihelp-query+abuselog-param-start": "L’horodatage auquel commencer l’énumération.",
- "apihelp-query+abuselog-param-end": "L’horodatage auquel terminer l’énumération.",
- "apihelp-query+abuselog-param-user": "Afficher uniquement les entrées faites par un utilisateur ou une adresse IP donné.",
- "apihelp-query+abuselog-param-title": "Afficher uniquement les entrées se produisant sur une page donnée.",
- "apihelp-query+abuselog-param-filter": "Afficher uniquement les entrées capturées par un ID de filtre donné.",
- "apihelp-query+abuselog-param-limit": "Le nombre maximal d’entrées à liter.",
- "apihelp-query+abuselog-param-prop": "Quelles propriétés obtenir.",
- "apihelp-query+abuselog-example-1": "Afficher les entrées récentes du journal",
- "apihelp-query+abuselog-example-2": "Afficher les entrées récentes du journal pour [[API]]",
- "apierror-abusefilter-canttest": "Vous n'avez pas la permission de tester les filtres antiabus.",
- "apierror-abusefilter-cantcheck": "Vous n’avez pas la permission de vérifier la syntaxe des filtres antiabus.",
- "apierror-abusefilter-nosuchlogid": "Il n'y a pas d'entrée dans le journal des abus avec l'identifiant $1.",
- "apierror-abusefilter-badsyntax": "Le filtre a une syntaxe non valide."
+ "abusefilter-view-private-submit": "Afficher les détails confidentiels",
+ "abusefilter-view-private": "Afficher les détails confidentiels",
+ "abusefilter-view-private-reason": "Motif pour accéder aux détails confidentiels :",
+ "abusefilter-log-details-id": "ID du journal",
+ "abusefilter-invalid-request": "Demande non valide ! Vous devez accéder aux détails confidentiels du journal d’accès via le formulaire sur [[Special:AbuseLog/$1]] et indiquer un motif.",
+ "abusefilter-invalid-request-noid": "Demande non valide ! Vous devez accéder aux détails confidentiels du journal via le formulaire sur la page de détails du journal des abus et indiquer un motif.",
+ "log-description-abusefilterprivatedetails": "Ce journal affiche une liste des horodatages auxquels un utilisateur a accédé aux détails confidentiels d’un journal d’abus.",
+ "abusefilter-noreason": "Avertissement : Pour voir les détails confidentiels de ce journal, vous devez indiquer un motif.",
+ "abusefilter-log-ip-not-available": "Non disponible",
+ "abusefilter-tag-reserved": "La balise <code>abusefilter-condition-limit</code> est réservée à l'usage interne du filtre anti-abus.",
+ "tag-abusefilter-condition-limit": "limite de condition atteinte",
+ "tag-abusefilter-condition-limit-description": "Modifications ou autres événements qui ne peuvent pas être vérifiés par tous les [[Special:AbuseFilter|filtres d’abus]] actifs ([[mw:Extension:AbuseFilter/Conditions|aide]])."
}
diff --git a/AbuseFilter/i18n/frc.json b/AbuseFilter/i18n/frc.json
index 1e2cf6d2..25bd7bc9 100644
--- a/AbuseFilter/i18n/frc.json
+++ b/AbuseFilter/i18n/frc.json
@@ -21,7 +21,6 @@
"abusefilter-tools-reautoconfirm-user": "Useur:",
"abusefilter-edit-flags": "Flags:",
"abusefilter-edit-lastmod-text": "$1 par $2",
- "abusefilter-edit-throttle-seconds": "$1 seconde{{PLURAL:$1||s}}",
"abusefilter-edit-tools": "Outils:",
"abusefilter-edit-builder-group-op-arithmetic": "Opérateurs arithmétiques",
"abusefilter-edit-builder-op-arithmetic-addition": "Addition (+)",
@@ -32,7 +31,6 @@
"abusefilter-edit-builder-funcs-lcase": "Convertir en minuscules (lcase)",
"abusefilter-edit-builder-funcs-ucase": "Convertir en majuscules (ucase)",
"abusefilter-edit-builder-vars-action": "Action",
- "abusefilter-edit-builder-vars-article-views": "Pages vues",
"abusefilter-edit-builder-vars-user-age": "Âge du compte useur",
"abusefilter-edit-builder-vars-user-name": "Nom du compte useur",
"abusefilter-history-hidden": "Caché",
diff --git a/AbuseFilter/i18n/frp.json b/AbuseFilter/i18n/frp.json
index faef4643..52850a11 100644
--- a/AbuseFilter/i18n/frp.json
+++ b/AbuseFilter/i18n/frp.json
@@ -11,7 +11,6 @@
"abusefilter": "Configuracion du filtro d’abus",
"abuselog": "Jornal des abus",
"abusefilter-intro": "Benvegnua dens l’entèrface d’administracion des filtros d’abus.\nLo filtro d’abus est un mècanismo programeria ôtomatisâ que pèrmèt d’aplicar des heristiques prèdèfenies a totes les accions.\nCela entèrface presente una lista des filtros dèfenis, et pués balye la possibilitât de los changiér.",
- "abusefilter-mustbeeditor": "Por des rêsons de sècuritât, solament los usanciérs avouéc lo drêt de changiér los filtros d’abus pôvont utilisar cela entèrface.",
"abusefilter-warning": "'''Avèrtissement :''' cela accion at étâ identifiâ ôtomaticament coment nuésibla.\nLos changements pas constructifs seront rêdo anulâs,\net pués les bètises rèpètâs ou ben que font enjura provoqueront lo blocâjo de voutron compto ou ben de voutra adrèce IP.\nSe vos éte de sûr que voutron changement est constructif, vos lo pouede tornar sometre por lo confirmar.\nVê-que una côrta dèscripcion de la règlla de filtracion d’abus qu’at dècelâ voutra accion : $1",
"abusefilter-disallowed": "Cela accion at étâ identifiâ ôtomaticament coment nuésibla et at vêr étâ empachiê.\nSe vos éte de sûr que voutron changement ére constructif, vos volyéd veriér vers un administrator et pués l’enformar de cen que vos éd tâchiê de fâre.\nVê-que una côrta dèscripcion de la règlla de filtracion d’abus qu’at dècelâ voutra accion : $1",
"abusefilter-blocked-display": "Cela accion at étâ identifiâ ôtomaticament coment nuésibla\net pués vos avéd ja étâ empachiê de l’ègzécutar.\nDe ples, por protègiér {{SITENAME}}, voutron compto usanciér et pués totes les adrèces IP associyês ont étâ blocâs contre tot changement.\nSe cen est diu a una èrror, vos volyéd veriér vers un administrator.\nVê-que una côrta dèscripcion de la règlla de filtracion d’abus qu’at dècelâ voutra accion : $1",
@@ -73,8 +72,6 @@
"abusefilter-log-hide-hidden": "Cachiér cela entrâ a la vua du publico",
"abusefilter-log-hide-reason": "Rêson :",
"abusefilter-log-hide-forbidden": "Vos avéd pas la pèrmission de cachiér des entrâs du jornal des abus.",
- "abusefilter-logentry-suppress": "at cachiê « [[$1]] »",
- "abusefilter-logentry-unsuppress": "at montrâ « [[$1]] »",
"abusefilter-management": "Administracion du filtro d’abus",
"abusefilter-list": "Tôs los filtros",
"abusefilter-list-id": "Numerô du filtro",
@@ -105,7 +102,6 @@
"abusefilter-list-options-scope": "Montrar los filtros dês :",
"abusefilter-list-options-scope-local": "Vouiqui local",
"abusefilter-list-options-scope-global": "Règlles globâles",
- "abusefilter-list-options-disabled": "Filtros dèsactivâs :",
"abusefilter-list-options-hidedisabled": "Cachiér los filtros dèsactivâs",
"abusefilter-list-options-submit": "Betar a jorn",
"abusefilter-tools-text": "Vê-que quârques outils que pôvont étre utilos dens la formulacion et lo dècofierâjo des filtros d’abus.",
@@ -124,7 +120,6 @@
"abusefilter-edit-status-label": "Statistiques :",
"abusefilter-edit-status": "{{PLURAL:$1|Dens la dèrriére accion|Entre-mié les $1 dèrriéres accions}}, cél filtro nen at dècelâ $2 ($3 %).",
"abusefilter-edit-status-profile": "{{PLURAL:$1|Dens la dèrriére accion|Entre-mié les $1 dèrriéres accions}}, cél filtro nen at dècelâ $2 ($3 %).\nEn moyena, lo temps d’ègzécucion de cél filtro est de $4 ms et pués utilise $5 condicion{{PLURAL:$5||s}} de la limita de les condicions.",
- "abusefilter-edit-throttled": "'''Avèrtissement :''' cél filtro at étâ dèsactivâ ôtomaticament per mesera de sècuritât.\nIl at avengiê la limita de dètèccion de més de $1 % de les accions.",
"abusefilter-edit-new": "Filtro novél",
"abusefilter-edit-save": "Encartar lo filtro",
"abusefilter-edit-id": "Numerô du filtro :",
@@ -143,7 +138,6 @@
"abusefilter-edit-consequences": "Accions entreprêses pendent la dètèccion",
"abusefilter-edit-action-warn": "Dècllenchiér celes accions aprés avêr balyê un avèrtissement a l’usanciér",
"abusefilter-edit-action-disallow": "Empachiér l’usanciér de fâre l’accion en quèstion",
- "abusefilter-edit-action-flag": "Marcar lo changement dens lo jornal des abus",
"abusefilter-edit-action-blockautopromote": "Rèvocar l’ètat ôtoconfirmâ du compto usanciér",
"abusefilter-edit-action-degroup": "Enlevar l’usanciér de totes les tropes privilègiyês",
"abusefilter-edit-action-block": "Blocar en ècritura l’usanciér et / ou l’adrèce IP",
@@ -152,7 +146,6 @@
"abusefilter-edit-action-tag": "Balisar lo changement por una rèvision a vegnir",
"abusefilter-edit-throttle-count": "Nombro d’accions ôtorisâs :",
"abusefilter-edit-throttle-period": "Moment :",
- "abusefilter-edit-throttle-seconds": "$1 second{{PLURAL:$1|a|es}}",
"abusefilter-edit-throttle-groups": "Apondre la moderacion per :\n:''(yona per legne, sèparâ per des virgules)''",
"abusefilter-edit-warn-message": "Mèssâjo sistèmo a utilisar por l’avèrtissement :",
"abusefilter-edit-warn-other": "Ôtro mèssâjo",
@@ -235,18 +228,18 @@
"abusefilter-edit-builder-vars-oldsize": "Vielye talye de la pâge",
"abusefilter-edit-builder-vars-removedlines": "Legnes suprimâs pendent lo changement",
"abusefilter-edit-builder-vars-summary": "Rèsumâ de changement / rêson",
- "abusefilter-edit-builder-vars-article-id": "Numerô de la pâge",
- "abusefilter-edit-builder-vars-article-ns": "Èspâço de noms de la pâge",
- "abusefilter-edit-builder-vars-article-text": "Titro de la pâge (sen l’èspâço de noms)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Titro complèt de la pâge",
+ "abusefilter-edit-builder-vars-page-id": "Numerô de la pâge",
+ "abusefilter-edit-builder-vars-page-ns": "Èspâço de noms de la pâge",
+ "abusefilter-edit-builder-vars-page-title": "Titro de la pâge (sen l’èspâço de noms)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Titro complèt de la pâge",
"abusefilter-edit-builder-vars-movedfrom-id": "Numerô de la pâge d’origina a renomar",
"abusefilter-edit-builder-vars-movedfrom-ns": "Èspâço de noms de la pâge d’origina a renomar",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titro de la pâge d’origina a renomar",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Titro complèt de la pâge d’origina a renomar",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titro de la pâge d’origina a renomar",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Titro complèt de la pâge d’origina a renomar",
"abusefilter-edit-builder-vars-movedto-id": "Numerô de la pâge de dèstinacion du changement de nom",
"abusefilter-edit-builder-vars-movedto-ns": "Èspâço de noms de la pâge de dèstinacion du changement de nom",
- "abusefilter-edit-builder-vars-movedto-text": "Titro de la pâge de dèstinacion du changement de nom",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Titro complèt de la pâge de dèstinacion du changement de nom",
+ "abusefilter-edit-builder-vars-movedto-title": "Titro de la pâge de dèstinacion du changement de nom",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Titro complèt de la pâge de dèstinacion du changement de nom",
"abusefilter-edit-builder-vars-user-editcount": "Comptor de changements a l’usanciér",
"abusefilter-edit-builder-vars-user-age": "Âjo du compto usanciér",
"abusefilter-edit-builder-vars-user-name": "Nom du compto usanciér",
@@ -305,7 +298,7 @@
"abusefilter-exception-regexfailure": "Èrror dens l’èxprèssion racionèla « $3 » u caractèro $1 : « $2 »",
"abusefilter-exception-overridebuiltin": "Ècllafâ dèfendua de la variâbla disponibla per dèfôt « $2 » u caractèro $1.",
"abusefilter-exception-outofbounds": "Demanda de l’èlèment pas ègzistent $2 (talye de la lista = $3) u caractèro $1.",
- "abusefilter-exception-notlist": "Demanda d’un èlèment dens ôtra chousa qu’un tablô u caractèro $1.",
+ "abusefilter-exception-notarray": "Demanda d’un èlèment dens ôtra chousa qu’un tablô u caractèro $1.",
"abusefilter-action-tag": "Balisa",
"abusefilter-action-throttle": "Limitar los changements",
"abusefilter-action-warn": "Avèrtir l’usanciér",
@@ -365,7 +358,6 @@
"abusefilter-topnav-import": "Importar un filtro",
"abusefilter-log-name": "Jornal du filtro d’abus",
"abusefilter-log-header": "Ceti jornal montre un rèsumâ des changements fêts ux filtros.\nPor més de dètalys, vêde la [[Special:AbuseFilter/history|lista]] des dèrriérs changements du filtro.",
- "abusefilter-log-entry-modify": "at changiê $1 ($2)",
"abusefilter-log-noresults": "Gins de rèsultat",
"abusefilter-diff-title": "Difèrences entre les vèrsions",
"abusefilter-diff-item": "Articllo",
diff --git a/AbuseFilter/i18n/frr.json b/AbuseFilter/i18n/frr.json
index 16f270d4..ef9b48d4 100644
--- a/AbuseFilter/i18n/frr.json
+++ b/AbuseFilter/i18n/frr.json
@@ -17,5 +17,7 @@
"abusefilter-log-linkoncontribs-text": "Masbrükfilter-logbuk för didiar brüker",
"abusefilter-management": "Masbrük-filter auersicht",
"abusefilter-list": "Aaltumaal",
- "abusefilter-log-name": "Masbrükfilter-logbuk"
+ "abusefilter-topnav": "'''Masbrük-filter nawigatjuun'''",
+ "abusefilter-log-name": "Masbrükfilter-logbuk",
+ "abusefilter-diff-info": "Grünjdooten"
}
diff --git a/AbuseFilter/i18n/fy.json b/AbuseFilter/i18n/fy.json
index dbe261d2..43bbff80 100644
--- a/AbuseFilter/i18n/fy.json
+++ b/AbuseFilter/i18n/fy.json
@@ -37,7 +37,6 @@
"abusefilter-edit-new": "Nije filter",
"abusefilter-edit-save": "Filter bewarje",
"abusefilter-edit-id": "Filternûmer:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekonde|sekonden}}",
"abusefilter-edit-history": "Skiednis:",
"abusefilter-edit-builder-op-arithmetic-addition": "Optelle (+)",
"abusefilter-edit-builder-op-arithmetic-subtraction": "Oftrekke (-)",
diff --git a/AbuseFilter/i18n/gl.json b/AbuseFilter/i18n/gl.json
index a68db49b..3473467d 100644
--- a/AbuseFilter/i18n/gl.json
+++ b/AbuseFilter/i18n/gl.json
@@ -4,14 +4,15 @@
"Elisardojm",
"Toliño",
"Banjo",
- "Matma Rex"
+ "Matma Rex",
+ "Navhy",
+ "Maria zaos"
]
},
"abusefilter-desc": "Aplica heurísticas automáticas ás edicións",
"abusefilter": "Configuración do filtro de abusos",
"abuselog": "Rexistro de abusos",
- "abusefilter-intro": "Benvido á interface do xestor do filtro de abusos.\nO filtro de abusos é un software mecánico automático que aplica heurísticas automáticas a todas as accións.\nEsta interface mostra unha lista dos filtros definidos e permite que estes sexan modificados.",
- "abusefilter-mustbeeditor": "Por razóns de seguridade, só os usuarios cos dereitos necesarios para modificar os filtros de abusos poden empregar esta interface.",
+ "abusefilter-intro": "Benvido á interface do xestor do filtro de abusos.\nO filtro de abusos é un software mecánico automático que aplica heurísticas automáticas a tódalas accións.\nEsta interface amosa unha lista dos filtros definidos e permite que estes sexan modificados.",
"abusefilter-warning": "'''Atención:''' Esta acción foi identificada automaticamente como prexudicial.\nAs accións non construtivas serán revertidas decontado,\ne a repetición destas edicións dará como resultado o bloqueo da súa conta ou do seu enderezo IP.\nSe cre que esta acción é construtiva, pode enviala outra vez para confirmalo.\nVelaquí hai unha breve descrición da regra de abuso coa que coincide a súa acción: $1",
"abusefilter-disallowed": "Esta acción foi identificada automaticamente como prexudicial e por iso non está permitida.\nSe cre que a súa acción foi construtiva, por favor, informe a un administrador do que estaba intentando facer.\nVelaquí hai unha breve descrición da regra de abuso coa que coincide a súa acción: $1",
"abusefilter-blocked-display": "Esta acción foi identificada automaticamente como prexudicial\ne impedíuselle que a executase.\nAdemais, para protexer a {{SITENAME}}, a súa conta de usuario e todos os enderezos IP asociados foron bloqueados fronte á edición.\nSe isto ocorreu por erro, por favor, póñase en contacto cun administrador.\nVelaquí hai unha breve descrición da regra de abuso coa que coincide a súa acción: $1",
@@ -43,16 +44,22 @@
"action-abusefilter-view-private": "ver os filtros de abusos marcados como privados",
"action-abusefilter-log-private": "ver rexistros de filtros de abusos marcados como privados",
"abusefilter-log": "Rexistro do filtro de abusos",
- "abusefilter-log-summary": "Este rexistro mostra unha lista de todas as accións capturadas polos filtros.",
+ "abusefilter-log-summary": "Este rexistro amosa unha lista de tódalas accións capturadas polos filtros.",
"abusefilter-log-search": "Procurar no rexistro de abusos",
"abusefilter-log-search-user": "Usuario:",
"abusefilter-log-search-filter": "Identificadores dos filtros (separados por barras verticais):",
"abusefilter-log-search-title": "Título:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Impacto:",
+ "abusefilter-log-search-impact-all": "Todas as accións",
+ "abusefilter-log-search-impact-saved": "Só trocos gardados",
+ "abusefilter-log-search-impact-not-saved": "Sen trocos gardados",
"abusefilter-log-search-entries-label": "Visibilidade:",
"abusefilter-log-search-entries-all": "Todas as entradas",
"abusefilter-log-search-entries-hidden": "Só as entradas ocultas",
"abusefilter-log-search-entries-visible": "Só as entradas visibles",
+ "abusefilter-log-search-action-taken-label": "Acción feita:",
+ "abusefilter-log-search-action-taken-any": "Calquera",
"abusefilter-log-search-submit": "Procurar",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|accionou}} un filtro de abusos, {{GENDER:$8|levando}} a cabo a acción \"$3\" na páxina $4.\nMedidas tomadas: $5\nDescrición do filtro: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|accionou}} un filtro de abusos, ao {{GENDER:$8|levar}} a cabo a acción \"$3\" na páxina $4.\nMedidas tomadas: $5.\nDescrición do filtro: $6 ($7)",
@@ -66,12 +73,15 @@
"abusefilter-log-details-var": "Variable",
"abusefilter-log-details-val": "Valor",
"abusefilter-log-details-vars": "Parámetros de acción",
- "abusefilter-log-details-private": "Datos privados",
+ "abusefilter-log-details-private": "Detalles do rexistro privado",
"abusefilter-log-details-ip": "Enderezo IP de orixe",
+ "abusefilter-log-details-checkuser": "Verificación de usuario",
"abusefilter-log-noactions": "ningunha",
"abusefilter-log-details-diff": "Cambios feitos na edición",
"abusefilter-log-linkoncontribs": "rexistro de abusos",
"abusefilter-log-linkoncontribs-text": "Rexistro de abusos para {{GENDER:$1|este usuario}}",
+ "abusefilter-log-linkonhistory": "ver rexistro de abusos",
+ "abusefilter-log-linkonhistory-text": "Ver o rexistro de abusos para esta páxina",
"abusefilter-log-hidden": "(entrada agochada)",
"abusefilter-log-hidden-implicit": "(agochado porque se borrou a revisión)",
"abusefilter-log-cannot-see-details": "Non ten os permisos necesarios para ver os detalles desta entrada.",
@@ -83,12 +93,14 @@
"abusefilter-log-hide-hidden": "Agochar esta entrada da vista pública",
"abusefilter-log-hide-reason": "Motivo:",
"abusefilter-log-hide-forbidden": "Non ten os permisos necesarios para agochar entradas do rexistro de abusos.",
- "abusefilter-logentry-suppress": "agochou \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "descubriu \"[[$1]]\"",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|accionou}} $4, ao {{GENDER:$2|levar}} a cabo a acción \"$5\" na páxina \"$3\". Medidas tomadas: $6 ($7)",
+ "log-action-filter-abusefilter": "Tipo de cambio de filtro:",
+ "log-action-filter-abusefilter-create": "Creación de novo filtro",
+ "log-action-filter-abusefilter-modify": "Modificación de filtro",
"abusefilter-management": "Xestión do filtro de abusos",
"abusefilter-list": "Todos os filtros",
"abusefilter-list-id": "ID do filtro",
+ "abusefilter-list-pattern": "Padrón",
"abusefilter-list-status": "Estado",
"abusefilter-list-public": "Descrición pública",
"abusefilter-list-consequences": "Consecuencias",
@@ -110,15 +122,22 @@
"abusefilter-status-global": "Global",
"abusefilter-list-options": "Opcións",
"abusefilter-list-options-deleted": "Filtros eliminados:",
- "abusefilter-list-options-deleted-only": "Mostrar só os filtros eliminados",
+ "abusefilter-list-options-deleted-only": "Amosar só os filtros eliminados",
"abusefilter-list-options-deleted-hide": "Agochar os filtros eliminados",
"abusefilter-list-options-deleted-show": "Incluír os filtros eliminados",
- "abusefilter-list-options-scope": "Mostrar os filtros:",
+ "abusefilter-list-options-scope": "Amosar os filtros:",
"abusefilter-list-options-scope-local": "Só regras locais",
"abusefilter-list-options-scope-global": "Só regras globais",
"abusefilter-list-options-scope-all": "Regras locais e globais",
- "abusefilter-list-options-disabled": "Filtros desactivados:",
+ "abusefilter-list-options-further-options": "Opcións adicionais:",
"abusefilter-list-options-hidedisabled": "Agochar os filtros deshabilitados",
+ "abusefilter-list-options-hideprivate": "Agochar filtros privados",
+ "abusefilter-list-options-searchfield": "Procurar nas regras:",
+ "abusefilter-list-options-searchpattern": "Inserir un padrón",
+ "abusefilter-list-options-searchoptions": "Modo de procura:",
+ "abusefilter-list-options-search-like": "Consulta sinxela",
+ "abusefilter-list-options-search-rlike": "Expresión corrente",
+ "abusefilter-list-options-search-irlike": "Expresión corrente insensíbel ó emprego de letras maiúsculas",
"abusefilter-list-options-submit": "Actualizar",
"abusefilter-tools-text": "Aquí hai algunhas ferramentas que poden ser de utilidade na formulación e depuración dos filtros de abusos.",
"abusefilter-tools-expr": "Verificador de expresións",
@@ -137,11 +156,13 @@
"abusefilter-edit-status-label": "Estatísticas:",
"abusefilter-edit-status": "{{PLURAL:$1|Da última acción|Das $1 últimas accións}}, este filtro coincidiu con $2 (o $3%).",
"abusefilter-edit-status-profile": "{{PLURAL:$1|Da última acción|Das $1 últimas accións}}, este filtro coincidiu con $2 (o $3%).\nDe media, o seu tempo de execución é de $4ms, e consome {{PLURAL:$5|unha condición|$5 condicións}} do límite de condicións.",
- "abusefilter-edit-throttled": "'''Aviso:''' Este filtro foi deshabilitado automaticamente como unha medida de seguridade. Alcanzouse o límite de máis de $1% de coincidencias de accións.",
+ "abusefilter-edit-throttled-warning": "'''Atención:''' Este filtro foi marcado automáticamente como prexudicial. Como medida de seguridade, as seguintes accións non se executarán ($1). Por favor revisa e [[mw:Extension:AbuseFilter/Conditions|optimiza]] as túas condicións para eliminar esta restrición",
"abusefilter-edit-new": "Novo filtro",
"abusefilter-edit-save": "Gardar o filtro",
"abusefilter-edit-id": "ID do filtro:",
+ "abusefilter-edit-switch-editor": "Mudar modo de edición",
"abusefilter-edit-description": "Descrición:\n:''(visible publicamente)''",
+ "abusefilter-edit-field-description": "descrición",
"abusefilter-edit-group": "Grupo de filtros:",
"abusefilter-edit-flags": "Revisións:",
"abusefilter-edit-enabled": "Permitir este filtro",
@@ -149,6 +170,7 @@
"abusefilter-edit-hidden": "Agochar os detalles deste filtro da vista pública",
"abusefilter-edit-global": "Filtro global",
"abusefilter-edit-rules": "Condicións:",
+ "abusefilter-edit-field-conditions": "condicións",
"abusefilter-edit-notes": "Notas:",
"abusefilter-edit-lastmod": "Última modificación do filtro:",
"abusefilter-edit-lastmod-text": "$3 ás $4 por $2",
@@ -159,20 +181,28 @@
"abusefilter-edit-action-blockautopromote": "Revogar o estado de usuario autoconfirmado",
"abusefilter-edit-action-degroup": "Eliminar o usuario de todos os grupos con privilexios",
"abusefilter-edit-action-block": "Bloquear o usuario e/ou o enderezo IP fronte á edición",
+ "abusefilter-edit-action-blocktalk": "Impedir que o usuario ou o enderezo IP editen a sua propria páxina de conversa",
"abusefilter-edit-action-throttle": "Desencadear as accións só se o usuario se salta un límite",
- "abusefilter-edit-action-rangeblock": "Bloquear os rangos /16 de onde o usuario é orixinario.",
+ "abusefilter-edit-action-rangeblock": "Bloquear o rango IP respectivo do que é orixinario o usuario",
"abusefilter-edit-action-tag": "Etiquetar a edición para unha revisión posterior",
"abusefilter-edit-throttle-count": "Número de accións a permitir:",
- "abusefilter-edit-throttle-period": "Período de tempo:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|segundo|segundos}}",
+ "abusefilter-edit-throttle-period": "Período de tempo (en segundos):",
"abusefilter-edit-throttle-groups": "Grupo acelerado por:\n:''(un por liña, combinar con comas)''",
+ "abusefilter-edit-throttle-ip": "Enderezo IP",
+ "abusefilter-edit-throttle-user": "Conta de usuario/a",
+ "abusefilter-edit-throttle-range": "rango /16",
+ "abusefilter-edit-throttle-page": "Páxina",
"abusefilter-edit-warn-message": "Mensaxe do sistema a usar para a advertencia:",
"abusefilter-edit-warn-other": "Outra mensaxe",
"abusefilter-edit-warn-other-label": "Nome da páxina doutra mensaxe:\n:''(sen o prefixo MediaWiki)''",
"abusefilter-edit-warn-actions": "Accións:",
- "abusefilter-edit-warn-preview": "Vista previa da mensaxe seleccionada",
+ "abusefilter-edit-warn-preview": "Amosar/Agochar vista previa da mensaxe seleccionada",
"abusefilter-edit-warn-edit": "Crear/Editar a mensaxe seleccionada",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Etiquetas]] a aplicar (unha por liña):",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Etiquetas]] a aplicar:",
+ "abusefilter-edit-block-anon-durations": "Duración do bloqueo pra os usuarios anónimos:",
+ "abusefilter-edit-block-user-durations": "Duración do bloqueo pra os usuarios rexistados:",
+ "abusefilter-block-anon": "Bloquear usuarios anónimos",
+ "abusefilter-block-user": "Bloquear usuarios rexistrados",
"abusefilter-edit-denied": "Poida que non vexa os detalles deste filtro porque está agochado da vista pública.",
"abusefilter-edit-main": "Parámetros do filtro",
"abusefilter-edit-done-subtitle": "Filtro editado",
@@ -202,8 +232,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Porcentaxe (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Potencia (**)",
"abusefilter-edit-builder-group-op-comparison": "Operadores de comparación",
- "abusefilter-edit-builder-op-comparison-equal": "Igual a (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Desigual a (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Valor igual a (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Valor e tipo igual a (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Valor diferente de (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Valor e tipo diferente de (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Menor que (<)",
"abusefilter-edit-builder-op-comparison-gt": "Maior que (>)",
"abusefilter-edit-builder-op-comparison-lte": "Menor que ou igual a (<=)",
@@ -226,15 +258,17 @@
"abusefilter-edit-builder-funcs-lcase": "Caracteres en minúsculas (lcase)",
"abusefilter-edit-builder-funcs-ucase": "Caracteres en maiúsculas (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normalizar os caracteres confusos (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normalizar e procurar unha cadea de texto para subcadeas múltiples (ccnorm_contains_any)",
"abusefilter-edit-builder-funcs-rmdoubles": "Eliminar os caracteres dobres (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Caracteres especiais / caracteres totais (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normalizar (norm)",
"abusefilter-edit-builder-funcs-count": "Número de veces que a cadea de caracteres X aparece na Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Número de veces que a expresión regular X aparece na cadea de caracteres Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Matriz de coincidencias regex dentro dun texto para cada grupo de captura (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Eliminar o espazo en branco (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Eliminar os caracteres especiais (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Quere ver se o enderezo IP está no rango? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Buscar a cadea para múltiples subcadeas (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Procurar a cadea para múltiples subcadeas (contains_any)",
"abusefilter-edit-builder-funcs-substr": "Subcadea (substr)",
"abusefilter-edit-builder-funcs-strpos": "Posición da subcadea na cadea (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Substituír a subcadea pola cadea (str_replace)",
@@ -243,6 +277,7 @@
"abusefilter-edit-builder-group-vars": "Variables",
"abusefilter-edit-builder-vars-accountname": "Nome da conta (na creación de contas)",
"abusefilter-edit-builder-vars-timestamp": "Hora Unix do cambio",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Data e hora do rexistro",
"abusefilter-edit-builder-vars-action": "Acción",
"abusefilter-edit-builder-vars-addedlines": "Liñas engadidas na edición",
"abusefilter-edit-builder-vars-delta": "Cambio do tamaño na edición",
@@ -253,19 +288,18 @@
"abusefilter-edit-builder-vars-new-content-model": "Modelo de contido novo",
"abusefilter-edit-builder-vars-removedlines": "Liñas eliminadas na edición",
"abusefilter-edit-builder-vars-summary": "Resumo de edición/motivo",
- "abusefilter-edit-builder-vars-article-id": "ID da páxina",
- "abusefilter-edit-builder-vars-article-ns": "Espazo de nomes da páxina",
- "abusefilter-edit-builder-vars-article-text": "Título da páxina (sen o espazo de nomes)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Título completo da páxina",
- "abusefilter-edit-builder-vars-article-views": "Visitas á páxina",
+ "abusefilter-edit-builder-vars-page-id": "ID da páxina",
+ "abusefilter-edit-builder-vars-page-ns": "Espazo de nomes da páxina",
+ "abusefilter-edit-builder-vars-page-title": "Título da páxina (sen o espazo de nomes)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Título completo da páxina",
"abusefilter-edit-builder-vars-movedfrom-id": "ID da páxina que vai ser movida",
"abusefilter-edit-builder-vars-movedfrom-ns": "Espazo de nomes da páxina que non vai ser movida",
- "abusefilter-edit-builder-vars-movedfrom-text": "Título da páxina que vai ser movida",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Nome completo da páxina que vai ser movida",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Título da páxina que vai ser movida",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Nome completo da páxina que vai ser movida",
"abusefilter-edit-builder-vars-movedto-id": "ID da páxina de destino da páxina que vai ser movida",
"abusefilter-edit-builder-vars-movedto-ns": "Espazo de nomes do destino da páxina que vai ser movida",
- "abusefilter-edit-builder-vars-movedto-text": "Nome do destino da páxina que vai ser movida",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Nome completo do destino da páxina que vai ser movida",
+ "abusefilter-edit-builder-vars-movedto-title": "Nome do destino da páxina que vai ser movida",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Nome completo do destino da páxina que vai ser movida",
"abusefilter-edit-builder-vars-user-editcount": "Contador de edicións do usuario",
"abusefilter-edit-builder-vars-user-age": "Idade da conta de usuario",
"abusefilter-edit-builder-vars-user-name": "Nome da conta de usuario",
@@ -318,6 +352,7 @@
"abusefilter-history-filterid": "Filtro",
"abusefilter-history-select-legend": "Procura refinada",
"abusefilter-history-select-user": "Usuario:",
+ "abusefilter-history-select-filter": "ID do filtro:",
"abusefilter-history-select-submit": "Refinar",
"abusefilter-history-diff": "Cambios",
"abusefilter-history-error-hidden": "O filtro que solicitou está agochado, polo que non pode ver o seu historial.",
@@ -335,7 +370,7 @@
"abusefilter-exception-regexfailure": "Erro na expresión regular \"$3\" no carácter $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Ignorancia ilegal da variable incorporada \"$2\" no carácter $1.",
"abusefilter-exception-outofbounds": "O elemento $2 solicitado da lista non existe (tamaño da lista = $3) no carácter $1.",
- "abusefilter-exception-notlist": "Conxunto de elementos solicitados de non conxunto no carácter $1.",
+ "abusefilter-exception-notarray": "Conxunto de elementos solicitados de non conxunto no carácter $1.",
"abusefilter-action-tag": "Etiquetar",
"abusefilter-action-throttle": "Limitar",
"abusefilter-action-warn": "Avisar",
@@ -351,7 +386,7 @@
"abusefilter-revert-periodstart": "Comezo do período:",
"abusefilter-revert-periodend": "Fin do período:",
"abusefilter-revert-search": "Seleccionar as accións",
- "abusefilter-revert-filter": "Filtro:",
+ "abusefilter-revert-filter": "ID do filtro:",
"abusefilter-revert-preview-intro": "A continuación están as accións levadas a cabo polo filtro de abusos que serán revertidas con esta acción.\nPor favor, compróbeas con coidado e prema en \"{{int:abusefilter-revert-confirm}}\" para confirmar a súa selección.",
"abusefilter-revert-confirm": "Confirmar",
"abusefilter-revert-success": "Reverteu todas as accións feitas polo [[Special:AbuseFilter/$1|filtro de abusos $2]].",
@@ -364,12 +399,19 @@
"abusefilter-test-submit": "Probar",
"abusefilter-test-load": "Cargar",
"abusefilter-test-user": "Cambios do usuario:",
+ "abusefilter-test-nobots": "Agochar edicións de bot",
"abusefilter-test-period-start": "Cambios feitos despois:",
"abusefilter-test-period-end": "Cambios feitos antes:",
"abusefilter-test-page": "Cambios feitos na páxina:",
- "abusefilter-test-shownegative": "Mostrar os cambios que non coincidan co filtro",
+ "abusefilter-test-shownegative": "Amosar os cambios que non coincidan co filtro",
"abusefilter-test-syntaxerr": "O filtro que introduciu contiña un erro na súa sintaxe.\nPode obter unha explicación completa premendo no botón \"{{int:abusefilter-edit-check}}\".",
"abusefilter-test-badtitle": "O título de páxina que inseriu non é válido. Se cadra, contén un ou máis caracteres que non se poden usar nos títulos.",
+ "abusefilter-test-search-type-all": "Todas as accións",
+ "abusefilter-test-search-type-edit": "Edicións",
+ "abusefilter-test-search-type-move": "Movementos",
+ "abusefilter-test-search-type-delete": "Eliminacións",
+ "abusefilter-test-search-type-upload": "Cargas",
+ "abusefilter-test-search-type-createaccount": "Creacións de contas",
"abusefilter-changeslist-examine": "examinar",
"abusefilter-examine": "Examinar os cambios individuais",
"abusefilter-examine-intro": "Esta páxina permítelle examinar as variables xeradas polo filtro de abusos dos cambios dun individuo e probalos con outros filtros.",
@@ -383,10 +425,10 @@
"abusefilter-examine-test-button": "Probar o filtro",
"abusefilter-examine-match": "Este cambio activou o filtro.",
"abusefilter-examine-nomatch": "Este cambio non activou o filtro.",
- "abusefilter-examine-syntaxerror": "A sintaxe do filtro é inválida",
+ "abusefilter-examine-syntaxerror": "A sintaxe do filtro non é válida",
"abusefilter-examine-notfound": "O cambio que solicitou non puido ser atopado.",
"abusefilter-examine-incompatible": "O cambio que solicitou non está soportado polo filtro de abusos",
- "abusefilter-examine-noresults": "Non se atoparon resultados para os parámetros de busca que facilitou.",
+ "abusefilter-examine-noresults": "Non se atoparon resultados para os parámetros de procura que facilitou.",
"abusefilter-topnav": "'''Navegación do filtro de abusos'''",
"abusefilter-topnav-home": "Inicio",
"abusefilter-topnav-test": "Conxunto de probas",
@@ -395,7 +437,8 @@
"abusefilter-topnav-tools": "Ferramentas de depuración",
"abusefilter-topnav-import": "Importar un filtro",
"abusefilter-log-name": "Rexistro do filtro de abusos",
- "abusefilter-log-header": "Este rexistro mostra un resumo dos cambios feitos aos filtros.\nPara obter máis detalles, vaia [[Special:AbuseFilter/history|á lista]] dos cambios feitos recentemente nos filtros.",
+ "abusefilter-log-header": "Este rexistro amosa un resumo dos cambios feitos aos filtros.\nPara obter máis detalles, vaia [[Special:AbuseFilter/history|á lista]] dos cambios feitos recentemente nos filtros.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|creou}} $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|modificou}} $4 ($5)",
"abusefilter-log-noresults": "Non hai resultados",
"abusefilter-diff-title": "Diferenzas entre versións",
@@ -411,49 +454,7 @@
"abusefilter-import-submit": "Importar os datos",
"abusefilter-group-default": "Predeterminado",
"abusefilter-http-error": "Produciuse un erro HTTP: $1",
- "apihelp-abusefiltercheckmatch-description": "Revise se un AbuseFilter concorda cun conxunto de variables, evento de rexistro de editor AbuseFilter.\n\nvars, rcid ou logid se necesita aínda que só un pode ser usado.",
- "apihelp-abusefiltercheckmatch-summary": "Verificar se un filtro de abusos coincide cun conxunto de variables, editor gardou evento AbuseFilter.",
- "apihelp-abusefiltercheckmatch-extended-description": "É necesario un dos seguintesː vars, rcid ou logid, e só pode usarse un.",
- "apihelp-abusefiltercheckmatch-param-filter": "O texto completo do filtro para verificar unha correspondencia.",
- "apihelp-abusefiltercheckmatch-param-vars": "Matriz codificada JSON de variables contra as que facer a proba.",
- "apihelp-abusefiltercheckmatch-param-rcid": "ID da modificación recente sobre a que verificar o filtro.",
- "apihelp-abusefiltercheckmatch-param-logid": "ID da entrada do rexistro do filtro antiabusos sobre a que verificar o filtro.",
- "apihelp-abusefiltercheckmatch-example-1": "Verificar se a modificación recente do ID 15 é detectada por un filtro simple",
- "apihelp-abusefilterchecksyntax-description": "Revisar a sintaxe dun filtro Antiabuso.",
- "apihelp-abusefilterchecksyntax-summary": "Revisar a sintaxe dun filtro Antiabuso.",
- "apihelp-abusefilterchecksyntax-param-filter": "O texto completo do filtro para verificar a sintaxe.",
- "apihelp-abusefilterchecksyntax-example-1": "Comprobar a sintaxe dun filtro válido",
- "apihelp-abusefilterchecksyntax-example-2": "Comprobar a sintaxe dun filtro non válido",
- "apihelp-abusefilterevalexpression-description": "Evaluar expresión dun Filtro de Abuso.",
- "apihelp-abusefilterevalexpression-summary": "Avaliar a expresión dun Filtro de anti-abuso.",
- "apihelp-abusefilterevalexpression-param-expression": "Expresión a evaluar.",
- "apihelp-abusefilterevalexpression-example-1": "Evaluar una expresión simple",
- "apihelp-abusefilterunblockautopromote-description": "Desbloquea a un usuario de recibir autopromocións debido a unha consecuencia do filtro de abusos.",
- "apihelp-abusefilterunblockautopromote-summary": "Desbloquea a un usuario de recibir autopromocións debido a unha consecuencia do filtro de abusos.",
- "apihelp-abusefilterunblockautopromote-param-user": "Nome de usuario que quere desbloquear.",
- "apihelp-abusefilterunblockautopromote-example-1": "Quitar o bloqueo por autopromoción de [[User:Example]]",
- "apihelp-query+abusefilters-description": "Mostrar detalles dos fitros de abuso.",
- "apihelp-query+abusefilters-summary": "Mostrar detalles dos fitros de abuso.",
- "apihelp-query+abusefilters-param-startid": "ID do filtro no que comezar a enumeración.",
- "apihelp-query+abusefilters-param-endid": "Selo de tempo para rematar a enumeración.",
- "apihelp-query+abusefilters-param-show": "Só mostrar filtros que cumplan con estos criterios.",
- "apihelp-query+abusefilters-param-limit": "O número máximo de filtros a listar.",
- "apihelp-query+abusefilters-param-prop": "Que propiedades obter",
- "apihelp-query+abusefilters-example-1": "Listar os filtros públicos habilitados",
- "apihelp-query+abusefilters-example-2": "Mostrar algúns detalles sobre os filtros",
- "apihelp-query+abuselog-description": "Mostrar eventos que foron detectados por un dos filtros antiabusos.",
- "apihelp-query+abuselog-summary": "Mostrar eventos que foron detectados por un dos filtros antiabusos.",
- "apihelp-query+abuselog-param-start": "Selo de tempo para comezar a enumeración",
- "apihelp-query+abuselog-param-end": "Selo de tempo para rematar a enumeración.",
- "apihelp-query+abuselog-param-user": "Só mostrar entradas feitas por un usuario ou dirección IP dados.",
- "apihelp-query+abuselog-param-title": "Só mostrar entradas ocorridas nunha páxina dada.",
- "apihelp-query+abuselog-param-filter": "Só mostrar as entradas que foron capturadas por un ID de filtro indicado.",
- "apihelp-query+abuselog-param-limit": "Máximo número de entradas a listar.",
- "apihelp-query+abuselog-param-prop": "Que propiedades obter.",
- "apihelp-query+abuselog-example-1": "Mostrar entradas recentes do rexistro",
- "apihelp-query+abuselog-example-2": "Mostrar entradas recentes do rexistro para [[API]]",
- "apierror-abusefilter-canttest": "Non tes permiso para probar filtros de abusos.",
- "apierror-abusefilter-cantcheck": "Non tes permiso para comprobar a sintaxe de filtros de abusos.",
- "apierror-abusefilter-nosuchlogid": "Non existe ningunha entrada no rexistro de abusos co ID $1.",
- "apierror-abusefilter-badsyntax": "O filtro ten unha sintaxe non válida."
+ "abusefilter-view-private-submit": "Ver detalles privados",
+ "abusefilter-view-private": "Ver detalles privados",
+ "abusefilter-log-ip-not-available": "Non dispoñíbel"
}
diff --git a/AbuseFilter/i18n/gom-deva.json b/AbuseFilter/i18n/gom-deva.json
new file mode 100644
index 00000000..f3d71e28
--- /dev/null
+++ b/AbuseFilter/i18n/gom-deva.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vaishali Parab"
+ ]
+ },
+ "abusefilter-log-search-impact-saved": "फकत बदल सांबाळात",
+ "abusefilter-log-search-action-taken-any": "खंयचेय"
+}
diff --git a/AbuseFilter/i18n/got.json b/AbuseFilter/i18n/got.json
new file mode 100644
index 00000000..a6e415f1
--- /dev/null
+++ b/AbuseFilter/i18n/got.json
@@ -0,0 +1,11 @@
+{
+ "@metadata": {
+ "authors": [
+ "Gothicspeaker"
+ ]
+ },
+ "abusefilter-list-options-further-options": "𐌼𐌰𐌽𐌰𐌲𐌹𐌶𐌴𐌹𐌽𐍃 𐌼𐌰𐌷𐍄𐌴𐌹𐍃:",
+ "abusefilter-test-search-type-all": "𐌰𐌻𐌻𐌰 𐍄𐍉𐌾𐌰",
+ "abusefilter-test-search-type-edit": "𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃",
+ "abusefilter-test-search-type-createaccount": "𐍂𐌰𐌷𐌽𐌴𐌹𐌽𐌰𐌹𐍃 𐌲𐌰𐍃𐌺𐌰𐍆𐍄𐌴𐌹𐍃"
+}
diff --git a/AbuseFilter/i18n/gsw.json b/AbuseFilter/i18n/gsw.json
index df5a6c69..e1cfe5a3 100644
--- a/AbuseFilter/i18n/gsw.json
+++ b/AbuseFilter/i18n/gsw.json
@@ -12,7 +12,6 @@
"abusefilter": "Missbruuchsfilter-Yystellige",
"abuselog": "Missbruuchs-Logbuech",
"abusefilter-intro": "Willchu uf dr Hauptsyte vu dr Missbruuchsfilter-Verwaltig.\nDr Missbruuchsfilter isch e automatische Software-Mechanismus, wu automatische Heurischtike an allene Aktion durfiert.\nDie Syte zeigt e Lischte vu definierte Filter. D Filter chenne uf däre Syte au gänderert wäre.",
- "abusefilter-mustbeeditor": "Us Sicherheitsgrind derfe numme Benutzer die Oberflächi verwände, wu s Rächt hän, Missbruuchsfilter z ändere.",
"abusefilter-warning": "'''Obacht''': Die Aktion isch automatisch as schädlig erkannt wore.\nUnkonschtruktivi Byyträg wäre zmeischt zimli schnäll usegnuh. In widerholte un bsundersch schlimme Fäll wird Dyy Benutzerkonto bzw. Dyyni IP-Adräss gsperrt.\nWänn Du dänksch, ass Dyyni Änderig konschtruktiv gsi isch, chasch si aber bstätige, indäm Du nomol uf „{{int:savearticle}}“ drucksch.\n\nChurzbschryybig vu dr verletzte Regle: '''$1'''",
"abusefilter-disallowed": "Die Aktion isch automatisch as schädlig erkannt wore un isch wäge däm nit durgfiert wore.\nWänn Du dänksch, ass Dyyni Änderig konschtruktiv gsi isch, wänd Di bitte an e Ammann un schryyb em, was Du mit Dyynere Änderig hesch welle.\n\nChurzbschryybig vu dr verletzte Regle: $1",
"abusefilter-blocked-display": "Die Aktion isch automatisch as schädli erkannt wore un isch nit uusgfiert wore.\nDezue isch au no Dyy Benutzerkonto un alli IP-Adrässe wu derzue ghere gsperrt wore.\nWänn Du dänksch, ass des e Fähler isch, no wänd Di bitte an e Ammann.\n\nChurzbschryybig vu dr verletzte Regle: $1",
@@ -75,8 +74,6 @@
"abusefilter-log-hide-hidden": "Dää Yytrag fir d Effentligkeit uusblände",
"abusefilter-log-hide-reason": "Grund:",
"abusefilter-log-hide-forbidden": "Du derfsch d Yytreg vum Missbruuchsfilter-Logbuech nit uusblände.",
- "abusefilter-logentry-suppress": "het [[$1]] uusbländet",
- "abusefilter-logentry-unsuppress": "het [[$1]] sichtbar gmacht",
"logentry-abusefilter-hit": "$1 het bim Ussfüere vo de Aktion „$5“ uff $3 de Filter $4 ussglöst. Usswirkig: $6 ($7)",
"abusefilter-management": "Missbruuchsfilter-Verwaltig",
"abusefilter-list": "Alli Filter",
@@ -108,7 +105,6 @@
"abusefilter-list-options-scope": "Zeig Filter zue:",
"abusefilter-list-options-scope-local": "Lokal Wiki",
"abusefilter-list-options-scope-global": "Globali Regle",
- "abusefilter-list-options-disabled": "Deaktivierti Filter:",
"abusefilter-list-options-hidedisabled": "Deaktivierti Filter uusblände",
"abusefilter-list-options-submit": "Spychere",
"abusefilter-tools-text": "Do sin e paar Wärchzyyg, wu hilfryych chenne syy bim Formuliere un bi dr Fählersuechi vu Missbruuchsfilter.",
@@ -127,7 +123,6 @@
"abusefilter-edit-status-label": "Statischtike:",
"abusefilter-edit-status": "Vu dr letschte {{PLURAL:$1|Aktion|$1 Aktione}} {{PLURAL:$2|isch|sin}} $2 ($3 %) vu däm Filter gchännt wore. Im Durschnitt het dr Filter e Laufzyt vu $4 ms, un är het $5 {{PLURAL:$5|Bedingig|Bedingige}} vum Bedingigslimit brucht.",
"abusefilter-edit-status-profile": "Vu dr letschte {{PLURAL:$1|Aktion|$1 Aktione}} {{PLURAL:$2|isch|sin}} $2 ($3 %) vu däm Filter gchännt wore. Im Durschnitt het dr Filter e Laufzyt vu $4 ms, un är het $5 {{PLURAL:$5|Bedingig|Bedingige}} vum Bedingigslimit brucht.",
- "abusefilter-edit-throttled": "'''Warnig''': Dää Filter isch sicherheitshalber automatisch deaktiviert wure. Är het meh as di definiert Obergränz vu $1 % vu dr Aktione erkannt.",
"abusefilter-edit-new": "Neje Filter",
"abusefilter-edit-save": "Filter spychere",
"abusefilter-edit-id": "Filter-ID:",
@@ -146,7 +141,6 @@
"abusefilter-edit-consequences": "Aktione, wu bi me Träffer uusgfiert wäre",
"abusefilter-edit-action-warn": "Aktione uusfiere noch ere Warnig an de Benutzer",
"abusefilter-edit-action-disallow": "Verhinderet d Aktion, wu vum Benutzer gmacht woren isch",
- "abusefilter-edit-action-flag": "Bearbeitig im Missbruuchs-Logbuech markiere",
"abusefilter-edit-action-blockautopromote": "„Bstätiger-Benutzer“-Status entzieh",
"abusefilter-edit-action-degroup": "Benutzer us allene Gruppe mit Sonderrächt useneh",
"abusefilter-edit-action-block": "Benutzer/IP-Adrädd sperre",
@@ -155,7 +149,6 @@
"abusefilter-edit-action-tag": "Markier d Bearbeitig fir e speteri Iberpriefig.",
"abusefilter-edit-throttle-count": "Aazahl vun erlaubte Aktione:",
"abusefilter-edit-throttle-period": "Zytruum:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|Sekund|Sekunde}}",
"abusefilter-edit-throttle-groups": "Regle fir d Gruppedrossle:\n:''(eini pro Zyyle, verbinde mit Kommas)''",
"abusefilter-edit-warn-message": "Syschtemnochricht fir d Warnig:",
"abusefilter-edit-warn-other": "Anderi Nochricht",
@@ -239,18 +232,18 @@
"abusefilter-edit-builder-vars-oldsize": "Alti Sytegreßi",
"abusefilter-edit-builder-vars-removedlines": "Zyyle bi dr Bearbeitig usegnuh",
"abusefilter-edit-builder-vars-summary": "Zämmefassig",
- "abusefilter-edit-builder-vars-article-id": "Syten-ID",
- "abusefilter-edit-builder-vars-article-ns": "Namensruum vu dr Syte",
- "abusefilter-edit-builder-vars-article-text": "Titel vu dr Syte (ohni Namensruum)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Voller Sytename",
+ "abusefilter-edit-builder-vars-page-id": "Syten-ID",
+ "abusefilter-edit-builder-vars-page-ns": "Namensruum vu dr Syte",
+ "abusefilter-edit-builder-vars-page-title": "Titel vu dr Syte (ohni Namensruum)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Voller Sytename",
"abusefilter-edit-builder-vars-movedfrom-id": "Artikel-ID vu dr Quällsyte",
"abusefilter-edit-builder-vars-movedfrom-ns": "Namensruum vu dr Quällsyte",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titel vu dr Quällsyte",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Vollständige Titel vu dr Quällsyte",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titel vu dr Quällsyte",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Vollständige Titel vu dr Quällsyte",
"abusefilter-edit-builder-vars-movedto-id": "Artikel-ID vu dr Ziilsyte",
"abusefilter-edit-builder-vars-movedto-ns": "Namensruum vu dr Ziilsyte",
- "abusefilter-edit-builder-vars-movedto-text": "Titel vu dr Ziilsyte",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Vollständige Titel vu dr Ziilsyte",
+ "abusefilter-edit-builder-vars-movedto-title": "Titel vu dr Ziilsyte",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Vollständige Titel vu dr Ziilsyte",
"abusefilter-edit-builder-vars-user-editcount": "Byytragszellig vum Benutzer",
"abusefilter-edit-builder-vars-user-age": "Alter vum Benutzerkonto",
"abusefilter-edit-builder-vars-user-name": "Name vum Benutzerkonto",
@@ -308,7 +301,7 @@
"abusefilter-exception-regexfailure": "Fähler im reguläre Uusdruck \"$3\" bim Zeiche $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Nit zuelässigs Uusschalte vu dr yyböute Variable „$2“ bim Zeiche $1.",
"abusefilter-exception-outofbounds": "Frogt noche eme Lischtepunkt $2 (Lischtegreßi = $3) bim Zeiche $1, wu s nit git.",
- "abusefilter-exception-notlist": "Frogt noch eme Punkt in eme Dateberyych bim Zeiche $1, wu s kei Dateberyych het",
+ "abusefilter-exception-notarray": "Frogt noch eme Punkt in eme Dateberyych bim Zeiche $1, wu s kei Dateberyych het",
"abusefilter-action-tag": "Markierig",
"abusefilter-action-throttle": "Drossle",
"abusefilter-action-warn": "Warne",
@@ -368,7 +361,6 @@
"abusefilter-topnav-import": "Filter importiere",
"abusefilter-log-name": "Missbruuchsfilter-Logbuech",
"abusefilter-log-header": "Des Logbuech zeigt d Änderige, wu an Filter gmacht wore sin.\nFir meh Detail lueg d [[Special:AbuseFilter/history|Lischt vu dr letschte Filteränderige]].",
- "abusefilter-log-entry-modify": "het $1 ($2) gänderet",
"abusefilter-log-noresults": "Kei Ergebniss",
"abusefilter-diff-title": "Unterschid zwische dr Versione",
"abusefilter-diff-item": "Yytrag",
diff --git a/AbuseFilter/i18n/gu.json b/AbuseFilter/i18n/gu.json
index 93fafced..e36346e3 100644
--- a/AbuseFilter/i18n/gu.json
+++ b/AbuseFilter/i18n/gu.json
@@ -12,7 +12,6 @@
"abusefilter-desc": "સંપાદનો પર સ્વચલિત સંશોધનાત્મક પ્રણાલી લાગુ કરે છે",
"abusefilter": "દુરુપયોગ ગળણી રૂપરેખા",
"abuselog": "દુરુપયોગ નોંધ",
- "abusefilter-mustbeeditor": "સુરક્ષા કારણો ખાતર, ફક્ત એવા સભ્યો જેની પાસે ખરાબ ફીલ્ટર બદલવાના હક છે તે જ આ ઈન્ટરફેસ નો ઊપયોગ કરી શકે છે.",
"abusefilter-blocker": "દુરુપયોગ ગળણી",
"right-abusefilter-modify": "દુરુપયોગ ગાળકોમાં ફેરફાર કરો",
"right-abusefilter-view": "દુરુપયોગ ગળણી જુઓ",
@@ -49,8 +48,6 @@
"abusefilter-log-hidden": "(દાખલો છુપાયેલ)",
"abusefilter-log-hide-legend": "લૉગ દાખલો છુપાવો",
"abusefilter-log-hide-reason": "કારણ:",
- "abusefilter-logentry-suppress": "છૂપાવો \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "બતાવો \"[[$1]]\"",
"abusefilter-list": "બધાં ગળણાં",
"abusefilter-list-id": "ગાળક ID",
"abusefilter-list-status": "સ્થિતિ",
@@ -79,7 +76,6 @@
"abusefilter-list-options-deleted-show": "દૂર કરેલ ગાળકોનો સમાવેશ કરો",
"abusefilter-list-options-scope-local": "ફક્ત સ્થાનિક નિયમો",
"abusefilter-list-options-scope-global": "ફક્ત વૈશ્વિક નિયમો",
- "abusefilter-list-options-disabled": "અસક્રિય ગાળકો:",
"abusefilter-list-options-hidedisabled": "નિષ્ક્રિય ગાળકો છુપાવો",
"abusefilter-list-options-submit": "સુધારો",
"abusefilter-tools-submitexpr": "પરખો",
@@ -96,7 +92,6 @@
"abusefilter-edit-notes": "નોંધો:",
"abusefilter-edit-lastmod-text": "$1, $2 દ્વારા",
"abusefilter-edit-throttle-period": "સમયગાળો:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|સેકંડ|સેકંડો}}",
"abusefilter-edit-warn-other": "બીજા સંદેશ",
"abusefilter-edit-warn-actions": "ક્રિયાઓ:",
"abusefilter-edit-viewhistory": "આ ગાળકનો ઇતિહાસ જુઓ",
@@ -126,8 +121,8 @@
"abusefilter-edit-builder-vars-action": "ક્રિયા",
"abusefilter-edit-builder-vars-newsize": "નવા પૃષ્ઠનું કદ",
"abusefilter-edit-builder-vars-oldsize": "જુનાં પૃષ્ઠનું કદ",
- "abusefilter-edit-builder-vars-article-id": "પૃષ્ઠ ઓળખ",
- "abusefilter-edit-builder-vars-article-prefixedtext": "પૂર્ણ પાનાં શીર્ષક",
+ "abusefilter-edit-builder-vars-page-id": "પૃષ્ઠ ઓળખ",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "પૂર્ણ પાનાં શીર્ષક",
"abusefilter-edit-builder-vars-user-age": "સભ્ય ખાતાની વય",
"abusefilter-edit-builder-vars-user-name": "સભ્ય ખાતાનું નામ",
"abusefilter-history-foruser": "$1 દ્વારા ફેરફારો",
diff --git a/AbuseFilter/i18n/he.json b/AbuseFilter/i18n/he.json
index 9a303f42..89ac1fad 100644
--- a/AbuseFilter/i18n/he.json
+++ b/AbuseFilter/i18n/he.json
@@ -2,7 +2,6 @@
"@metadata": {
"authors": [
"Amire80",
- "Guycn1",
"Guycn2",
"Ofrahod",
"Rotemliss",
@@ -21,7 +20,7 @@
"abusefilter": "ניהול מסנני ההשחתות",
"abuselog": "יומן השחתות",
"abusefilter-intro": "ברוך בואך לממשק הניהול של מסנן ההשחתות.\nמסנן ההשחתות הוא אמצעי אוטומטי להפעלת בדיקות אוטומטיות על כל הפעולות.\nממשק זה מציג רשימה של מסננים שהוגדרו, ומאפשר לשנות אותם.",
- "abusefilter-mustbeeditor": "מסיבות אבטחה, רק משתמשים עם ההרשאה לשנות מסנני השחתות יכולים להשתמש בממשק זה.",
+ "abusefilter-mustviewprivateoredit": "מסיבות של אבטחה, רק משתמשים עם ההרשאה לצפות במסנני השחתות פרטיים או לערוך מסננים יכולים להשתמש בממשק הזה.",
"abusefilter-warning": "'''אזהרה:''' פעולה זו זוהתה באופן אוטומטי כמזיקה.\nפעולות שאינן מועילות תשוחזרנה במהרה,\nועריכות גסות או חזרה על עריכות לא מועילות תגרומנה לחסימה של החשבון או של כתובת ה־IP שלך.\nאם לדעתך הפעולה הזאת מועילה, ניתן לאשר אותה באמצעות שליחה חוזרת.\nתיאור קצר של החוק שפעולתך הפרה: $1",
"abusefilter-disallowed": "פעולה זו זוהתה באופן אוטומטי כמזיקה, ולכן לא אופשרה.\nאם לדעתך הפעולה שלך הייתה מועילה, באפשרותך ליצור קשר עם מפעיל מערכת ולהודיע לו מה ניסית לעשות.\nתיאור קצר של החוק שפעולתך הפרה: $1",
"abusefilter-blocked-display": "פעולה זו זוהתה באופן אוטומטי כמזיקה,\nולכן אין באפשרותך לבצע אותה.\nבנוסף, כדי להגן על {{SITENAME}}, חשבון המשתמש שלך וכל כתובות ה־IP המשויכות אליו נחסמו מעריכה.\nאם זה אירע בטעות, נא ליצור קשר עם מפעיל מערכת.\nתיאור קצר של החוק שפעולתך הפרה: $1",
@@ -36,6 +35,7 @@
"right-abusefilter-log": "צפייה ביומן ההשחתות",
"right-abusefilter-log-detail": "צפייה ביומן ההשחתות המפורט",
"right-abusefilter-private": "צפייה בנתונים פרטיים ביומן ההשחתות",
+ "right-abusefilter-private-log": "הצגת יומן גישה לנתונים פרטיים של מסנן ההשחתות",
"right-abusefilter-modify-restricted": "שינוי מסנני השחתות עם פעולות מוגבלות",
"right-abusefilter-revert": "שחזור כל השינויים שבוצעו על־ידי מסנן השחתות מסוים",
"right-abusefilter-view-private": "צפייה במסנני השחתות שסומנו כפרטיים",
@@ -48,6 +48,7 @@
"action-abusefilter-log": "לצפות ביומן ההשחתות",
"action-abusefilter-log-detail": "לצפות ביומן ההשחתות המפורט",
"action-abusefilter-private": "לצפות בנתונים פרטיים ביומן ההשחתות",
+ "action-abusefilter-private-log": "להציג את יומן הגישה לנתונים פרטיים של מסנן ההשחתות",
"action-abusefilter-modify-restricted": "לשנות מסנני השחתות עם פעולות מוגבלות",
"action-abusefilter-revert": "לשחזר את כל השינויים שבוצעו על־ידי מסנן השחתות מסוים",
"action-abusefilter-view-private": "לצפות במסנני השחתות שסומנו כפרטיים",
@@ -59,14 +60,23 @@
"abusefilter-log-search-filter": "מספרי מסננים (מופרדים בתווי '|'):",
"abusefilter-log-search-title": "כותרת:",
"abusefilter-log-search-wiki": "אתר ויקי:",
+ "abusefilter-log-search-impact": "השפעה:",
+ "abusefilter-log-search-impact-all": "כל הפעולות",
+ "abusefilter-log-search-impact-saved": "רק שינויים שמורים",
+ "abusefilter-log-search-impact-not-saved": "ללא שינויים שמורים",
"abusefilter-log-search-entries-label": "נִראוּת:",
"abusefilter-log-search-entries-all": "כל הרשומות",
"abusefilter-log-search-entries-hidden": "רק רשומות מוסתרות",
"abusefilter-log-search-entries-visible": "רק רשומות נראות",
+ "abusefilter-log-search-action-label": "פעולה גורמת:",
+ "abusefilter-log-search-action-other": "אחרות",
+ "abusefilter-log-search-action-any": "כלשהן",
+ "abusefilter-log-search-action-taken-label": "הפעולה שננקטה:",
+ "abusefilter-log-search-action-taken-any": "הכול",
"abusefilter-log-search-submit": "חיפוש",
- "abusefilter-log-entry": "$1: $2 {{GENDER:$8|הפעיל|הפעילה}} מסנן השחתות {{GENDER:$8|כשביצע|כשביצעה}} את הפעולה \"$3\" בדף $4.\nהפעולות שננקטו: $5;\nתיאור המסנן: $6",
+ "abusefilter-log-entry": "$1: $2 {{GENDER:$8|גרם|גרמה}} להפעלת מסנן השחתות {{GENDER:$8|כשביצע|כשביצעה}} את הפעולה \"$3\" בדף $4.\nהפעולות שננקטו: $5;\nתיאור המסנן: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|הפעיל|הפעילה}} מסנן השחתות {{GENDER:$8|כשביצע|כשביצעה}} את הפעולה \"$3\" בדף $4.\nהפעולות שננקטו: $5;\nתיאור המסנן: $6 ($7)",
- "abusefilter-log-detailedentry-meta": "$1: $2 {{GENDER:$9|הפעיל|הפעילה}} את $3 כש{{GENDER:$9|ביצע|ביצעה}} את הפעולה \"$4\" בדף $5.\nהפעולות שננקטו: $6;\nתיאור המסנן: $7 ($8)",
+ "abusefilter-log-detailedentry-meta": "$1: $2 {{GENDER:$9|גרם|גרמה}} להפעלת $3 {{GENDER:$9|כשביצע|כשביצעה}} את הפעולה \"$4\" בדף $5.\nהפעולות שננקטו: $6;\nתיאור המסנן: $7 ($8)",
"abusefilter-log-detailedentry-global": "המסנן הגלובלי $1",
"abusefilter-log-detailedentry-local": "מסנן $1",
"abusefilter-log-detailslink": "פרטים",
@@ -76,36 +86,49 @@
"abusefilter-log-details-var": "משתנה",
"abusefilter-log-details-val": "ערך",
"abusefilter-log-details-vars": "פרמטרים לפעולה",
- "abusefilter-log-details-private": "נתונים פרטיים",
+ "abusefilter-log-details-private": "נתוני יומן פרטי",
"abusefilter-log-details-ip": "כתובת ה־IP המקורית",
+ "abusefilter-log-details-checkuser": "בדיקת משתמש",
"abusefilter-log-noactions": "אין",
"abusefilter-log-details-diff": "שינויים שבוצעו בעריכה",
"abusefilter-log-linkoncontribs": "יומן מסנן ההשחתות",
"abusefilter-log-linkoncontribs-text": "יומן ההשחתות עבור {{GENDER:$1|משתמש זה|משתמשת זו}}",
+ "abusefilter-log-linkonhistory": "הצגת יומן ההשחתות",
+ "abusefilter-log-linkonhistory-text": "הצגת יומן ההשחתות עבור דף זה",
"abusefilter-log-hidden": "(רשומה מוסתרת)",
"abusefilter-log-hidden-implicit": "(הוסתר כי הגרסה נמחקה)",
"abusefilter-log-cannot-see-details": "אין לך הרשאה לראות את פרטי הרשומה הזו.",
+ "abusefilter-log-cannot-see-private-details": "אין לך הרשאה לראות את הנתונים הפרטיים של הרשומה הזאת.",
"abusefilter-log-nonexistent": "רשומה עם המזהה שניתן אינה קיימת",
"abusefilter-log-details-hidden": "אין באפשרותך לצפות בפרטים של רשומה זו כי היא הוסתרה מעיני הציבור.",
- "abusefilter-log-private-not-included": "חלק ממספרי המסננים שהגדרת פרטיים. מכיוון שאין לך הרשאה להציג פרטים של מסננים פרטיים, לא נעשה חיפוש במסננים האלה.",
+ "abusefilter-log-details-hidden-implicit": "אין באפשרותך לצפות בפרטים של רשומה זו משום שהגרסה המשויכת אליה מוסתרת מהציבור.",
+ "abusefilter-log-private-not-included": "חלק ממספרי המסננים שהגדרת פרטיים. מכיוון שאין לך הרשאה להציג נתונים של מסננים פרטיים, לא נעשה חיפוש במסננים האלה.",
"abusefilter-log-hide-legend": "הסתרת רשומת יומן",
"abusefilter-log-hide-id": "מספר רשומת היומן:",
"abusefilter-log-hide-hidden": "הסתרת רשומה זו מעיני הציבור",
"abusefilter-log-hide-reason": "סיבה:",
+ "abusefilter-log-hide-reason-other": "סיבה אחרת/נוספת:",
"abusefilter-log-hide-forbidden": "אין לך הרשאה להסתיר רשומות ביומן ההשחתות.",
- "abusefilter-logentry-suppress": "\"[[$1]]\" הוסתר",
- "abusefilter-logentry-unsuppress": "ההסתרה של \"[[$1]]\" בוטלה",
- "logentry-abusefilter-hit": "$1 {{GENDER:$2|הפעיל|הפעילה}} את $4 {{GENDER:$2|כשביצע|כשביצעה}} את הפעולה \"$5\" בדף $3. הפעולות שננקטו: $6 ($7)",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|הסתיר|הסתירה}} את $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|ביטל|ביטלה}} את ההסתרה של $3",
+ "logentry-abusefilter-hit": "$1 {{GENDER:$2|גרם|גרמה}} להפעלת $4 {{GENDER:$2|כשביצע|כשביצעה}} את הפעולה \"$5\" בדף $3. הפעולות שננקטו: $6 ($7)",
+ "log-action-filter-abusefilter": "סוג שינוי המסנן:",
+ "log-action-filter-abusefilter-create": "יצירת מסנן חדש",
+ "log-action-filter-abusefilter-modify": "שינוי מסנן",
+ "log-action-filter-suppress-abuselog": "העלמת יומן סינון השחתות",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|ניגש|ניגשה}} לנתונים פרטיים עבור $3",
+ "abusefilterprivatedetails-log-name": "יומן גישה לנתונים פרטיים של מסנן ההשחתות",
"abusefilter-management": "ניהול מסנני ההשחתות",
"abusefilter-list": "כל המסננים",
"abusefilter-list-id": "מספר המסנן",
+ "abusefilter-list-pattern": "תבנית",
"abusefilter-list-status": "מצב",
"abusefilter-list-public": "תיאור ציבורי",
"abusefilter-list-consequences": "תוצאות",
"abusefilter-list-visibility": "תצוגה",
"abusefilter-list-hitcount": "מספר הפעולות שסוננו",
"abusefilter-list-edit": "עריכה",
- "abusefilter-list-details": "פרטים",
+ "abusefilter-list-details": "נתונים",
"abusefilter-list-limit": "מספר הרשומות לדף:",
"abusefilter-list-lastmodified": "שינוי אחרון",
"abusefilter-list-group": "קבוצת מסננים",
@@ -114,6 +137,7 @@
"abusefilter-enabled": "מופעל",
"abusefilter-deleted": "מחוק",
"abusefilter-disabled": "מבוטל",
+ "abusefilter-throttled": "בוטל באופן אוטומטי",
"abusefilter-hitcount": "{{PLURAL:$1|פעולה אחת סוננה|$1 פעולות סוננו}}",
"abusefilter-new": "יצירת מסנן חדש",
"abusefilter-return": "חזרה לניהול המסננים",
@@ -127,8 +151,16 @@
"abusefilter-list-options-scope-local": "מסננים מקומיים בלבד",
"abusefilter-list-options-scope-global": "מסננים גלובליים בלבד",
"abusefilter-list-options-scope-all": "מסננים גלובליים ומקומיים",
- "abusefilter-list-options-disabled": "מסננים שבוטלו:",
+ "abusefilter-list-options-further-options": "אפשרויות נוספות:",
"abusefilter-list-options-hidedisabled": "הסתרת מסננים שבוטלו",
+ "abusefilter-list-options-hideprivate": "הסתרת מסננים פרטיים",
+ "abusefilter-list-options-searchfield": "חיפוש בתוך החוקים:",
+ "abusefilter-list-options-searchpattern": "הוספת תבנית",
+ "abusefilter-list-options-searchoptions": "מצב החיפוש:",
+ "abusefilter-list-options-search-like": "שאילתה רגילה",
+ "abusefilter-list-options-search-rlike": "ביטוי רגולרי",
+ "abusefilter-list-options-search-irlike": "ביטוי רגולרי שאינו תלוי־רישיות",
+ "abusefilter-list-regexerror": "אירעה שגיאה בעת החיפוש: שגיאה בתחביר הביטוי הרגולרי.",
"abusefilter-list-options-submit": "עדכון",
"abusefilter-tools-text": "להלן מספר כלים שעשויים להיות שימושיים בניסוח ובניפוי השגיאות של מסנני ההשחתות.",
"abusefilter-tools-expr": "בודק הביטויים",
@@ -143,15 +175,18 @@
"abusefilter-edit": "עריכת מסנן השחתות",
"abusefilter-edit-subtitle": "עריכת מסנן $1",
"abusefilter-edit-subtitle-new": "יצירת מסנן",
+ "abusefilter-edit-token-not-match": "העריכה לא נשמרה! נא לשמור שוב.",
"abusefilter-edit-oldwarning": "<strong>זוהי גרסה ישנה של מסנן זה.\nהסטטיסטיקות המופיעות הן עבור הגרסה העדכנית ביותר של המסנן.\nשמירת השינויים שלך תדרוס את כל השינויים מאז הגרסה הזאת.</strong> &bull; [[Special:AbuseFilter/history/$2|חזרה להיסטוריית הגרסאות של מסנן זה]].",
"abusefilter-edit-status-label": "סטטיסטיקות:",
"abusefilter-edit-status": "מתוך {{PLURAL:$1|הפעולה האחרונה|$1 הפעולות האחרונות}}, מסנן זה התאים ל־$2 ($3%).",
"abusefilter-edit-status-profile": "מתוך {{PLURAL:$1|הפעולה האחרונה|$1 הפעולות האחרונות}}, מסנן זה התאים ל־$2 ($3%).\nבממוצע, זמן הריצה שלו הוא $4 מילישניות, והוא משתמש ב{{PLURAL:$5|תנאי אחד|־$5 תנאים}} מתוך מגבלת התנאים.",
- "abusefilter-edit-throttled": "'''אזהרה:''' מסנן זה בוטל אוטומטית כאמצעי בטיחות.\nהמסנן הגיע למגבלה כי הוא סינן יותר מ־$1% מהפעולות.",
+ "abusefilter-edit-throttled-warning": "'''אזהרה:''' המסנן הזה סומן אוטומטית בתור מזיק. בתור אמצעי זהירות, הפעולות הבאות לא תתבצענה ($1). נא לסקור ו[[mw:Extension:AbuseFilter/Conditions|לשפר]] את התנאים שלך כדי להסיר את המגבלה הזאת",
"abusefilter-edit-new": "מסנן חדש",
"abusefilter-edit-save": "שמירת המסנן",
"abusefilter-edit-id": "מספר המסנן:",
+ "abusefilter-edit-switch-editor": "החלפת עורך",
"abusefilter-edit-description": "תיאור:\n:''(ניתן לצפייה ציבורית)''",
+ "abusefilter-edit-field-description": "תיאור",
"abusefilter-edit-group": "קבוצת מסננים:",
"abusefilter-edit-flags": "אפשרויות:",
"abusefilter-edit-enabled": "הפעלת מסנן זה",
@@ -159,35 +194,59 @@
"abusefilter-edit-hidden": "הסתרת פרטי מסנן זה מצפייה ציבורית",
"abusefilter-edit-global": "מסנן גלובלי",
"abusefilter-edit-rules": "תנאים:",
+ "abusefilter-edit-field-conditions": "תנאים",
"abusefilter-edit-notes": "הערות:",
"abusefilter-edit-lastmod": "המסנן שוּנה לאחרונה ב:",
"abusefilter-edit-lastmod-text": "$1 על־ידי $2",
"abusefilter-edit-hitcount": "פעולות שסוננו:",
"abusefilter-edit-consequences": "אילו פעולות לבצע בעת ההתאמה",
- "abusefilter-edit-action-warn": "לבצע את הפעולות האלה לאחר אזהרת המשתמש",
+ "abusefilter-edit-action-warn": "לגרום לביצוע הפעולות האלה לאחר הזהרת המשתמש",
"abusefilter-edit-action-disallow": "למנוע מהמשתמש לבצע את הפעולה הזאת",
"abusefilter-edit-action-blockautopromote": "לשלול מהמשתמש את הרשאות המשתמש הוותיק",
"abusefilter-edit-action-degroup": "לשלול את כל ההרשאות של המשתמש",
"abusefilter-edit-action-block": "לחסום את המשתמש ו/או כתובת ה־IP מעריכה",
- "abusefilter-edit-action-throttle": "לבצע פעולות רק אם המשתמש עובר מגבלה של קצב עריכות",
- "abusefilter-edit-action-rangeblock": "לחסום את טווח ה־/16 שממנו פועל המשתמש",
+ "abusefilter-edit-action-blocktalk": "חסימת המשתמש ו/או כתובת ה־IP מעריכת דף השיחה של עצמם",
+ "abusefilter-edit-action-throttle": "לגרום לביצוע פעולות רק אם המשתמש עובר מגבלה של קצב עריכות",
+ "abusefilter-edit-action-rangeblock": "לחסום את טווח המתאים שממנו פועל המשתמש",
"abusefilter-edit-action-tag": "לתייג את העריכה לבדיקה נוספת",
"abusefilter-edit-throttle-count": "מספר הפעולות המותרות:",
- "abusefilter-edit-throttle-period": "משך הזמן:",
- "abusefilter-edit-throttle-seconds": "{{PLURAL:$1|שנייה אחת|$1 שניות}}",
- "abusefilter-edit-throttle-groups": "הגבלת פעילות לפי קבוצה:\n:''(קבוצה אחת בשורה, יש לשלב עם פסיקים)''",
+ "abusefilter-edit-throttle-period": "משך הזמן (בשניות):",
+ "abusefilter-edit-throttle-groups": "הגבלת פעילות לפי קבוצה:",
+ "abusefilter-edit-throttle-ip": "כתובת IP",
+ "abusefilter-edit-throttle-user": "חשבון משתמש",
+ "abusefilter-edit-throttle-range": "טווח ‎/16",
+ "abusefilter-edit-throttle-creationdate": "הזמן בשרת של יצירת החשבון",
+ "abusefilter-edit-throttle-editcount": "מספר עריכות",
+ "abusefilter-edit-throttle-site": "כל האתר",
+ "abusefilter-edit-throttle-page": "דף",
+ "abusefilter-throttle-details": "{{PLURAL:$1|מותרת פעולה אחת|מותרות $1 פעולות}} בכל {{PLURAL:$2|שנייה|$2 שניות}}, הקבוצות המוגבלות: $3",
"abusefilter-edit-warn-message": "הודעת המערכת המשמשת לאזהרה:",
"abusefilter-edit-warn-other": "הודעה אחרת",
"abusefilter-edit-warn-other-label": "שם הודעת המערכת:\n:''(ללא הקידומת \"מדיה ויקי:\")''",
"abusefilter-edit-warn-actions": "פעולות:",
- "abusefilter-edit-warn-preview": "תצוגה מקדימה של ההודעה שנבחרה",
+ "abusefilter-edit-warn-preview": "הצגת/הסתרת תצוגה מקדימה של ההודעה שנבחרה",
"abusefilter-edit-warn-edit": "יצירת/עריכת ההודעה שנבחרה",
- "abusefilter-edit-tag-tag": "אילו [[Special:Tags|תגים]] להחיל (אחד בכל שורה):",
+ "abusefilter-edit-disallow-message": "הודעת המערכת שתשמש לאיסור:",
+ "abusefilter-edit-disallow-other": "הודעה אחרת",
+ "abusefilter-edit-disallow-other-label": "שם הודעת המערכת האחרת:\n:''(ללא הקידומת \"מדיה ויקי:\")''",
+ "abusefilter-edit-disallow-actions": "פעולות:",
+ "abusefilter-edit-disallow-preview": "הצגת/הסתרת תצוגה מקדימה של ההודעה שנבחרה",
+ "abusefilter-edit-disallow-edit": "יצירת/עריכת ההודעה שנבחרה",
+ "abusefilter-edit-tag-tag": "אילו [[Special:Tags|תגיות]] להחיל:",
+ "abusefilter-edit-tag-placeholder": "הוספת תגיות (אחת אחרי השנייה, או מופרדות באמצעות פסיקים)",
+ "abusefilter-edit-tag-hidden-placeholder": "הוספת תגים (מופרדים בפסיק)",
+ "abusefilter-edit-block-anon-durations": "משך החסימה עבור משתמשים אנונימיים:",
+ "abusefilter-edit-block-user-durations": "משך החסימה עבור משתמשים רשומים:",
+ "abusefilter-block-anon": "חסימת משתמשים אנונימיים",
+ "abusefilter-block-user": "חסימת משתמשים רשומים",
+ "abusefilter-block-talk": "דף השיחה נחסם",
"abusefilter-edit-denied": "אין באפשרותך לצפות בפרטים של מסנן זה, כי הוא מוסתר מעיני הציבור.",
"abusefilter-edit-main": "הפרמטרים של המסנן",
"abusefilter-edit-done-subtitle": "המסנן נערך",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|השינויים שלך]] במסנן [[Special:AbuseFilter/$1|$3]] נשמרו.",
"abusefilter-edit-badsyntax": "ישנה שגיאת תחביר במסנן שציינת.\nהפלט מהמפענח הוא: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "השדות הבאים נדרשים, וחובה למלא אותם: $1",
+ "abusefilter-edit-deleting-enabled": "לא ניתן לסמן מסנן פעיל כמחוק.",
"abusefilter-edit-restricted": "אין באפשרותך לערוך מסנן זה, כי הוא מכיל פעולה מוגבלת אחת או יותר.\nנא לבקש ממשתמש עם הרשאה להוספת פעולות מוגבלות לבצע את השינוי עבורך.",
"abusefilter-edit-viewhistory": "צפייה בהיסטוריית הגרסאות של מסנן זה",
"abusefilter-edit-history": "היסטוריה:",
@@ -199,11 +258,11 @@
"abusefilter-edit-export": "ייצוא מסנן זה לאתר ויקי אחר",
"abusefilter-edit-syntaxok": "לא נמצאו שגיאות תחביר.",
"abusefilter-edit-syntaxerr": "נמצאה שגיאת תחביר: $1",
- "abusefilter-edit-bad-tags": "ציינת תג בלתי־תקין.\nהתגים אמורים להיות קצרים, הם אמורים לא להכיל תווים מיוחדים, והם אמורים לא להיות שמורים לתוכנה אחרת. נא לנסות לבחור שם חדש לתג",
+ "abusefilter-edit-bad-tags": "ציינת תג בלתי־תקין.\nהתגים אמורים להיות קצרים, הם לא יכולים להכיל תווים מיוחדים והם לא יכולים להיות שמורים לתוכנה אחרת. נא לנסות לבחור שם חדש לתג.",
"abusefilter-edit-notallowed": "אין לך הרשאה ליצור או לערוך מסנני השחתות",
"abusefilter-edit-notallowed-global": "אין לך הרשאה ליצור או לערוך מסנני השחתות גלובליים",
"abusefilter-edit-notallowed-global-custom-msg": "הודעות אזהרה מותאמות אישית אינן נתמכות עבור מסננים גלובליים",
- "abusefilter-edit-builder-select": "{{GENDER:|בחר|בחרי|בחרו}} באפשרות כדי להוסיף אותה",
+ "abusefilter-edit-builder-select": "יש לבחור באפשרות כדי להוסיף אותה",
"abusefilter-edit-builder-group-op-arithmetic": "אופרטורים חשבוניים",
"abusefilter-edit-builder-op-arithmetic-addition": "חיבור (+)",
"abusefilter-edit-builder-op-arithmetic-subtraction": "חיסור (-)",
@@ -212,8 +271,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "שארית (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "חזקה (**)",
"abusefilter-edit-builder-group-op-comparison": "אופרטורים להשוואה",
- "abusefilter-edit-builder-op-comparison-equal": "שווה ל־ (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "לא שווה ל־ (‎!=‎)",
+ "abusefilter-edit-builder-op-comparison-equal": "הערך שווה ל־ (‎==‎)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "הערך והסוג שווים ל־ (‎===‎)",
+ "abusefilter-edit-builder-op-comparison-notequal": "הערך לא שווה ל־ (‎!=‎)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "הערך והסוג לא שווים ל־ (‎!==‎)",
"abusefilter-edit-builder-op-comparison-lt": "קטן מ־ (‎<‎)",
"abusefilter-edit-builder-op-comparison-gt": "גדול מ־ (‎>‎)",
"abusefilter-edit-builder-op-comparison-lte": "קטן מ־ או שווה ל־ (‎<=‎)",
@@ -236,23 +297,30 @@
"abusefilter-edit-builder-funcs-lcase": "המרה לאותיות קטנות (lcase)",
"abusefilter-edit-builder-funcs-ucase": "המרה לאותיות רישיות (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "נירמול תווים מבלבלים (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "לנרמל ולחפש במחרוזת תת־מחרוזות מרובות במצב OR‏ (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "נרמול וחיפוש תת־מחרוזות מרובות במחרוזת נתונה במצב AND (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "הסרת תווים כפולים (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "תווים מיוחדים / סך כל התווים (specialratio)",
"abusefilter-edit-builder-funcs-norm": "נירמול (norm)",
"abusefilter-edit-builder-funcs-count": "מספר הפעמים שהמחרוזת X מופיעה במחרוזת Y‏ (count)",
"abusefilter-edit-builder-funcs-rcount": "מספר הפעמים שהביטוי הרגולרי X מופיע במחרוזת Y‏ (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "מערך של התאמות ביטויים רגולריים בתו טקסט של כל קבוצת לכידה (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "הסרת רווח לבן (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "הסרת תווים מיוחדים (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "האם כתובת ה־IP בטווח? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "חיפוש מחרוזות משנה מרובות בתוך מחרוזת (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "חיפוש מחרוזות משנה מרובות בתוך מחרוזת במצב OR‏ (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "חיפוש תת־מחרוזות מרובות במחרוזת נתונה במצב AND‏. (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "בדיקה האם פרמטר נתון שווה (===) לאחד הפרמטרים הבאים (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "מחרוזת משנה (substr)",
"abusefilter-edit-builder-funcs-strpos": "מיקום מחרוזת משנה במחרוזת (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "החלפת מחרוזת משנה עם מחרוזת אחרת (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "לחלף את המחרוזת בתור מחרוזת מפורשת בביטוי רגולרי (rescape)",
"abusefilter-edit-builder-funcs-set_var": "הגדרת משתנה (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "נרמול ישויות HTML לתווי יוניקוד (sanitize)",
"abusefilter-edit-builder-group-vars": "משתנים",
"abusefilter-edit-builder-vars-accountname": "שם החשבון (בעת יצירת חשבון)",
"abusefilter-edit-builder-vars-timestamp": "זמן השינוי בפורמט יוניקס",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "תאריך ושעה של היומן",
"abusefilter-edit-builder-vars-action": "פעולה",
"abusefilter-edit-builder-vars-addedlines": "שורות שנוספו בעריכה",
"abusefilter-edit-builder-vars-delta": "שינוי הגודל בעריכה",
@@ -263,19 +331,21 @@
"abusefilter-edit-builder-vars-new-content-model": "מודל התוכן החדש",
"abusefilter-edit-builder-vars-removedlines": "שורות שהוסרו בעריכה",
"abusefilter-edit-builder-vars-summary": "תקציר עריכה/סיבה",
- "abusefilter-edit-builder-vars-article-id": "מספר הדף",
- "abusefilter-edit-builder-vars-article-ns": "מרחב השם של הדף",
- "abusefilter-edit-builder-vars-article-text": "שם הדף (ללא מרחב השם)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "שם הדף המלא",
- "abusefilter-edit-builder-vars-article-views": "מספר הצגות הדף",
+ "abusefilter-edit-builder-vars-page-id": "מספר הדף",
+ "abusefilter-edit-builder-vars-page-ns": "מרחב השם של הדף",
+ "abusefilter-edit-builder-vars-page-title": "שם הדף (ללא מרחב השם)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "שם הדף המלא",
+ "abusefilter-edit-builder-vars-page-age": "גיל הדף (בשניות)",
"abusefilter-edit-builder-vars-movedfrom-id": "המספר המזהה (ID) של דף המקור בהעברה",
"abusefilter-edit-builder-vars-movedfrom-ns": "מרחב השם של דף המקור בהעברה",
- "abusefilter-edit-builder-vars-movedfrom-text": "שם דף המקור בהעברה",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "השם המלא של דף המקור בהעברה",
+ "abusefilter-edit-builder-vars-movedfrom-title": "שם דף המקור בהעברה",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "השם המלא של דף המקור בהעברה",
+ "abusefilter-edit-builder-vars-movedfrom-age": "גיל הדף של המקור שההעברה נעשתה ממנו (בשניות)",
"abusefilter-edit-builder-vars-movedto-id": "מספר הדף של דף היעד בהעברה",
"abusefilter-edit-builder-vars-movedto-ns": "מרחב השם של דף היעד בהעברה",
- "abusefilter-edit-builder-vars-movedto-text": "שם דף היעד בהעברה",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "השם המלא של דף היעד בהעברה",
+ "abusefilter-edit-builder-vars-movedto-title": "שם דף היעד בהעברה",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "השם המלא של דף היעד בהעברה",
+ "abusefilter-edit-builder-vars-movedto-age": "גיל הדף של היעד שההעברה נעשתה אליו (בשניות)",
"abusefilter-edit-builder-vars-user-editcount": "מספר העריכות של המשתמש",
"abusefilter-edit-builder-vars-user-age": "הזמן שעבר מאז הרשמת המשתמש",
"abusefilter-edit-builder-vars-user-name": "שם חשבון המשתמש",
@@ -285,10 +355,14 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "הזמן שבו אומתה כתובת הדוא\"ל",
"abusefilter-edit-builder-vars-recent-contributors": "עשרת התורמים האחרונים לדף",
"abusefilter-edit-builder-vars-first-contributor": "המשתמש הראשון שתרם לדף",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "עשרת המשתמשים האחרונים שתרמו בדף המקורי שיועבר",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "המשתמש הראשון שתרם בדף המקורי שיועבר",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "עשרת המשתמשים האחרונים שתרמו בדף היעד בהעברה",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "המשתמש הראשון שתרם בדף היעד בהעברה",
"abusefilter-edit-builder-vars-all-links": "כל הקישורים החיצוניים בטקסט החדש",
"abusefilter-edit-builder-vars-added-links": "כל הקישורים החיצוניים שנוספו בעריכה",
"abusefilter-edit-builder-vars-removed-links": "כל הקישורים החיצוניים שהוסרו בעריכה",
- "abusefilter-edit-builder-vars-old-text": "טקסט הדף הישן, לפני העריכה",
+ "abusefilter-edit-builder-vars-old-text": "טקסט הדף הישן, לפני העריכה (לא בשימוש יותר)",
"abusefilter-edit-builder-vars-new-text": "טקסט הדף החדש, לאחר העריכה",
"abusefilter-edit-builder-vars-new-pst": "קוד הוויקי של הדף החדש, מומר לפני שמירה",
"abusefilter-edit-builder-vars-diff-pst": "הצגת השינויים שנעשו בעריכה, בצורת השוואה מאוחדת, עם התמרה לפני שמירה",
@@ -299,9 +373,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "רמת ההגנה על העברת הדף",
"abusefilter-edit-builder-vars-restrictions-create": "רמת ההגנה על יצירת הדף",
"abusefilter-edit-builder-vars-restrictions-upload": "רמת ההגנה על העלאת הקובץ",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "רמת ההגנה מפני עריכה של הדף המקורי שיועבר",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "רמת ההגנה מפני העברה של הדף המקורי שיועבר",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "הגנה מפני יצירה של הדף המקורי שיועבר",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "הגנה מפני העלאה של הקובץ המקורי שיועבר",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "רמת ההגנה מפני עריכה של דף היעד בהעברה",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "רמת ההגנה מפני העברה של דף היעד בהעברה",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "הגנה מפני יצירה של דף היעד בהעברה",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "הגנה מפני העלאה של קובץ היעד בהעברה",
"abusefilter-edit-builder-vars-old-text-stripped": "טקסט הדף הישן, ללא שום שפת סימון",
"abusefilter-edit-builder-vars-old-links": "קישורים בדף, לפני העריכה",
- "abusefilter-edit-builder-vars-old-html": "טקסט הוויקי של הדף הישן, מפוענח ל־HTML",
+ "abusefilter-edit-builder-vars-old-html": "טקסט הוויקי של הדף הישן, מפוענח ל־HTML (לא בשימוש יותר)",
"abusefilter-edit-builder-vars-minor-edit": "האם עריכה זו מסומנת כמשנית או לא",
"abusefilter-edit-builder-vars-file-sha1": "גיבוב SHA1 של תוכן הקובץ",
"abusefilter-edit-builder-vars-file-size": "גודל הקובץ בבתים",
@@ -323,11 +405,12 @@
"abusefilter-history-filter": "חוק מסנן",
"abusefilter-history-comments": "הערות",
"abusefilter-history-actions": "פעולות",
- "abusefilter-history-backedit": "חזרה לעורך המסננים",
+ "abusefilter-history-backedit": "חזרה לעריכת המסנן",
"abusefilter-history-deleted": "נמחק",
"abusefilter-history-filterid": "מסמן",
"abusefilter-history-select-legend": "עידון החיפוש",
"abusefilter-history-select-user": "משתמש:",
+ "abusefilter-history-select-filter": "מספר המסנן:",
"abusefilter-history-select-submit": "עידון",
"abusefilter-history-diff": "הבדלים",
"abusefilter-history-error-hidden": "המסנן שביקשת מוסתר, ואין באפשרותך לצפות בהיסטוריה שלו.",
@@ -338,14 +421,17 @@
"abusefilter-exception-unclosedstring": "מחרוזת שלא נסגרה, מתחילה בתו מספר $1.",
"abusefilter-exception-invalidoperator": "אופרטור בלתי־תקין \"$2\" בתו מספר $1.",
"abusefilter-exception-unrecognisedtoken": "סימן בלתי־מזוהה \"$2\" בתו מספר $1.",
- "abusefilter-exception-noparams": "לא ניתנו פרמטרים לפונקציה \"$2\" בתו מספר $1.",
+ "abusefilter-exception-noparams": "לא ניתנו פרמטרים לפונקציה \"$2\" בתו מספר $1.\n{{PLURAL:$3|היה אמור להיות כאן ארגומנט אחד|היו אמורים להיות כאן $3 ארגומנטים}}.",
"abusefilter-exception-dividebyzero": "ניסיון בלתי־חוקי לחלק את $2 באפס בתו מספר $1.",
"abusefilter-exception-unrecognisedvar": "משתנה בלתי־מזוהה $2 בתו מספר $1",
"abusefilter-exception-notenoughargs": "לא הועברו מספיק ארגומנטים לפונקציה $2 שנקראה בתו מספר $1.\nיש צורך {{PLURAL:$3|בארגומנט אחד|ב־$3 ארגומנטים}}, {{PLURAL:$4|התקבל אחד|התקבלו $4}}",
- "abusefilter-exception-regexfailure": "שגיאה בביטוי הרגולרי \"$3\" בתו מספר $1: \"$2\"",
+ "abusefilter-exception-regexfailure": "שגיאה בביטוי הרגולרי \"$2\" בתו מספר $1.",
"abusefilter-exception-overridebuiltin": "דריסה בלתי־תקינה של המשתנה המובנה \"$2\" בתו מספר $1.",
- "abusefilter-exception-outofbounds": "ביקשו פריט רשימה בלתי קיים $2 (גודל הרשימה = $3) בתו מספר $1.",
- "abusefilter-exception-notlist": "ביקשו פריט מערך מלא־מערך בתו מספר $1.",
+ "abusefilter-exception-outofbounds": "בקשת פריט מערך בלתי קיים $2 (גודל המערך = $3) בתו מספר $1.",
+ "abusefilter-exception-notarray": "ביקשו פריט מערך מלא־מערך בתו מספר $1.",
+ "abusefilter-exception-unclosedcomment": "הערה בלתי־סגורה בתו מספר $1.",
+ "abusefilter-exception-invalidiprange": "טווח IP שגוי \"$2\" בתו מספר $1.",
+ "abusefilter-exception-disabledvar": "המשתנה $2 בתו מספר $1 אינו בשימוש יותר.",
"abusefilter-action-tag": "לתייג",
"abusefilter-action-throttle": "הגבלת תדירות פעולה",
"abusefilter-action-warn": "אזהרה",
@@ -361,8 +447,9 @@
"abusefilter-revert-periodstart": "החל מתאריך:",
"abusefilter-revert-periodend": "עד לתאריך:",
"abusefilter-revert-search": "בחירת פעולות",
- "abusefilter-revert-filter": "מסנן:",
+ "abusefilter-revert-filter": "מספר המסנן:",
"abusefilter-revert-preview-intro": "להלן הפעולות שבוצעו על־ידי מסנן ההשחתות ושישוחזרו על־ידי פעולה זו.\nנא לבדוק אותן בזהירות, וללחוץ על \"{{int:abusefilter-revert-confirm}}\" כדי לאשר את בחירתך.",
+ "abusefilter-revert-confirm-legend": "אישור השחזור",
"abusefilter-revert-confirm": "אישור",
"abusefilter-revert-success": "ביטלת את כל השינויים שבוצעו על־ידי [[Special:AbuseFilter/$1|מסנן מספר $2]].",
"abusefilter-revert-reason": "שחזור אוטומטי של כל הפעולות שבוצעו על־ידי מסנן מספר $1.\nהסיבה שניתנה: $2",
@@ -374,12 +461,20 @@
"abusefilter-test-submit": "בדיקה",
"abusefilter-test-load": "טעינה",
"abusefilter-test-user": "שינויים שבוצעו על־ידי המשתמש:",
+ "abusefilter-test-nobots": "הסתרת עריכות של בוטים",
"abusefilter-test-period-start": "שינויים שנערכו לאחר:",
"abusefilter-test-period-end": "שינויים שנערכו לפני:",
"abusefilter-test-page": "שינויים שבוצעו בדף:",
"abusefilter-test-shownegative": "הצגת שינויים שאינם תואמים את המסנן",
"abusefilter-test-syntaxerr": "במסנן שהכנסת יש שגיאת תחביר.\nבאפשרותך לקבל הסבר מלא באמצעות לחיצה על הכפתור \"{{int:abusefilter-edit-check}}\".",
"abusefilter-test-badtitle": "כותרת הדף שהזנת אינה תקינה. ייתכן שהיא מכילה תו אחד או יותר שלא ניתנים לשימוש בכותרות.",
+ "abusefilter-test-action": "סוג הפעולה:",
+ "abusefilter-test-search-type-all": "כל הפעולות",
+ "abusefilter-test-search-type-edit": "עריכות",
+ "abusefilter-test-search-type-move": "העברות",
+ "abusefilter-test-search-type-delete": "מחיקות",
+ "abusefilter-test-search-type-upload": "העלאות",
+ "abusefilter-test-search-type-createaccount": "יצירת חשבונות",
"abusefilter-changeslist-examine": "בדיקה",
"abusefilter-examine": "בדיקת שינויים ספציפיים",
"abusefilter-examine-intro": "דף זה מאפשר לך לבדוק את המשתנים שמייצר מסנן ההשחתות עבור שינוי ספציפי, ולבדוק זאת אל מול המסננים.",
@@ -406,6 +501,7 @@
"abusefilter-topnav-import": "ייבוא מסנן",
"abusefilter-log-name": "יומן מסנן ההשחתות",
"abusefilter-log-header": "יומן זה מציג סיכום של השינויים שבוצעו במסנני ההשחתות.\nלפרטים מלאים, ראו את [[Special:AbuseFilter/history|רשימת]] השינויים האחרונים במסננים.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|יצר|יצרה}} את $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|שינה|שינתה}} את $4 ($5)",
"abusefilter-log-noresults": "אין תוצאות",
"abusefilter-diff-title": "הבדלים בין גרסאות",
@@ -421,49 +517,16 @@
"abusefilter-import-submit": "ייבוא הנתונים",
"abusefilter-group-default": "ברירת המחדל",
"abusefilter-http-error": "אירעה שגיאת HTTP: $1",
- "apihelp-abusefiltercheckmatch-description": "בדיקה אם מסנן ההשחתות מתאים לערכת משתנים, העורך רושם ביומן אירוע מסנן השחתות.\n\nvars‏, rcid או logid נדרש, אבל אפשר להשתמש רק באחד מהם.",
- "apihelp-abusefiltercheckmatch-summary": "בדיקה האם מסנן השחתות מתאים לערכת משתנים, אירוע מסנן השחתות שנרשם ביומן על־די עורך.",
- "apihelp-abusefiltercheckmatch-extended-description": "נחוץ vars או rcid או logid, אבל רק אחד מהם יכול לשמש.",
- "apihelp-abusefiltercheckmatch-param-filter": "הטקסט המלא של המסנן שייבדק לחיפוש התאמה.",
- "apihelp-abusefiltercheckmatch-param-vars": "מערך מקודד ב־JSON של משתנים שמולם תיערך בדיקה.",
- "apihelp-abusefiltercheckmatch-param-rcid": "מזהה בשינויים האחרונים לבדוק מולו.",
- "apihelp-abusefiltercheckmatch-param-logid": "מזהה ביומן מסנן ההשחתות שמולו הבדיקה תתבצע.",
- "apihelp-abusefiltercheckmatch-example-1": "בדיקה האם שינוי אחרון עם המזהה 15 מתאים למסנן פשוט",
- "apihelp-abusefilterchecksyntax-description": "בדיקת תחביר של מסנן השחתות.",
- "apihelp-abusefilterchecksyntax-summary": "בדיקת תחביר של אחד ממסנני ההשחתות.",
- "apihelp-abusefilterchecksyntax-param-filter": "הטקסט המלא של המסנן לבדיקת תחביר עבורו.",
- "apihelp-abusefilterchecksyntax-example-1": "בדיקת תחביר למסנן תקין",
- "apihelp-abusefilterchecksyntax-example-2": "בדיקת תחביר למסנן לא תקין",
- "apihelp-abusefilterevalexpression-description": "הערכת ביטוח מסנן השחתות.",
- "apihelp-abusefilterevalexpression-summary": "הערכת ביטוי מסנן השחתות.",
- "apihelp-abusefilterevalexpression-param-expression": "איזה ביטוח להעריך.",
- "apihelp-abusefilterevalexpression-example-1": "הערכת ביטוי פשוט",
- "apihelp-abusefilterunblockautopromote-description": "ביטול מניעה ממשתמש לקבל קידום אוטומטי בעקבות תוצאה של פעולת מסנן השחתות.",
- "apihelp-abusefilterunblockautopromote-summary": "מסיר ממשתמש את החסימה מפני קבלת קידום אוטומטי כתוצאה מפעולת מסנן השחתות.",
- "apihelp-abusefilterunblockautopromote-param-user": "שם של משתמש שברצונך ליטול ממנו את המניעה.",
- "apihelp-abusefilterunblockautopromote-example-1": "הסרת מניעת קידום אוטומטי של [[User:Example]]",
- "apihelp-query+abusefilters-description": "הצגת פרטים על מסנן השחתה.",
- "apihelp-query+abusefilters-summary": "הצגת פרטים על מסנני השחתות.",
- "apihelp-query+abusefilters-param-startid": "מזהה המסנן שהמנייה תתחיל ממנו.",
- "apihelp-query+abusefilters-param-endid": "מזהה המסנן שבו תסתיים המנייה.",
- "apihelp-query+abusefilters-param-show": "הצגת מסננים שמתאימים לאמות המידה הבאות.",
- "apihelp-query+abusefilters-param-limit": "המספר המרבי של מסננים שיירשמו.",
- "apihelp-query+abusefilters-param-prop": "אילו מאפיינים לקבל.",
- "apihelp-query+abusefilters-example-1": "רשימת מסננים ציבוריים מופעלים",
- "apihelp-query+abusefilters-example-2": "הצגת פרטים מסוימים על מסננים",
- "apihelp-query+abuselog-description": "הצגת אירועים שנתפסו על־ידי אחד ממסנני ההשחתות.",
- "apihelp-query+abuselog-summary": "הצגת אירועים שנתפסו על־ידי אחד ממסנני ההשחתות.",
- "apihelp-query+abuselog-param-start": "חותם־הזמן שהמנייה תתחיל ממנו.",
- "apihelp-query+abuselog-param-end": "חותם־הזמן שבו תסתיים המנייה.",
- "apihelp-query+abuselog-param-user": "להציג רק עיולים שנעשו על־ידי משתמש נתון או כתובת IP.",
- "apihelp-query+abuselog-param-title": "להציג רק עיולים שאירעו בדך נתון.",
- "apihelp-query+abuselog-param-filter": "להציג רק עיולים שנתפסו במסנן עם מזהה מסנן נתון.",
- "apihelp-query+abuselog-param-limit": "מספר מרבי של עיולים שיהיו ברשימה.",
- "apihelp-query+abuselog-param-prop": "אילו מאפיינים לקבל.",
- "apihelp-query+abuselog-example-1": "להציג עיולי יומן אחרונים",
- "apihelp-query+abuselog-example-2": "הצגת עיולי יומן אחרונים עבור [[API]]",
- "apierror-abusefilter-canttest": "אין לך הרשאה לבחון מסנני השחתות.",
- "apierror-abusefilter-cantcheck": "אין לך הרשאה לבדוק את התחביר של מסנני השחתות.",
- "apierror-abusefilter-nosuchlogid": "אין רשומה ביומן ההשחתות עם המזהה $1.",
- "apierror-abusefilter-badsyntax": "המסנן מכיל תחביר בלתי תקין."
+ "abusefilter-view-private-submit": "הצגת נתונים פרטיים",
+ "abusefilter-view-private": "הצגת נתונים פרטיים",
+ "abusefilter-view-private-reason": "סיבה לגישה לנתונים הפרטיים:",
+ "abusefilter-log-details-id": "מזהה יומן",
+ "abusefilter-invalid-request": "בקשתך הייתה בלתי־חוקית! יש לגשת לנתוני היומן הפרטיים באמצעות הטופס שבדף [[Special:AbuseLog/$1]] ולהקליד סיבה.",
+ "abusefilter-invalid-request-noid": "בקשתך הייתה בלתי־חוקית! יש לגשת לנתוני היומן הפרטיים באמצעות הטופס שבדף הנתונים של יומן ההשחתות ולהקליד סיבה.",
+ "log-description-abusefilterprivatedetails": "יומן זה מציג את הגישה של משתמשים לנתונים פרטיים ביומן ההשחתות.",
+ "abusefilter-noreason": "אזהרה: כדי לצפות בנתונים פרטיים ביומן הזה, יש להקליד סיבה.",
+ "abusefilter-log-ip-not-available": "לא זמין",
+ "abusefilter-tag-reserved": "התגית <code>abusefilter-condition-limit</code> שמורה לשימוש פנימי של מסנן ההשחתות.",
+ "tag-abusefilter-condition-limit": "חריגה מתנאי ההגבלה",
+ "tag-abusefilter-condition-limit-description": "עריכות או פעולות אחרות שלא ניתן היה לבדוק אותן באמצעות כל [[Special:AbuseFilter|מסנני ההשחתות]] הפעילים ([[mw:Extension:AbuseFilter/Conditions|עזרה]])."
}
diff --git a/AbuseFilter/i18n/hi.json b/AbuseFilter/i18n/hi.json
index 4be9bc97..8fc0d746 100644
--- a/AbuseFilter/i18n/hi.json
+++ b/AbuseFilter/i18n/hi.json
@@ -13,14 +13,17 @@
"Hindustanilanguage",
"Matma Rex",
"Sfic",
- "Sachinkatiyar"
+ "Sachinkatiyar",
+ "ArmouredCyborg",
+ "Innocentbunny",
+ "Nitin1485",
+ "Smtchahal"
]
},
"abusefilter-desc": "संपादनों पर स्वतः शोध प्रणाली का प्रयोग लागू करता है",
"abusefilter": "दुरुपयोग फ़िल्टर विन्यास",
"abuselog": "दुरुपयोग लॉग",
"abusefilter-intro": "दुरुपयोग फ़िल्टर प्रबंधन अंतरफल में आपका स्वागत है।\nदुरुपयोग फ़िल्टर सभी कार्यों पर स्वतः शोध प्रणाली लागू करने का एक स्वचालित सॉफ़्टवेयर है।\nयह अंतरफल परिभाषित फ़िल्टरों की एक सूची दिखाता है, और यहाँ पर उन्हें संपादित किया जा सकता है।",
- "abusefilter-mustbeeditor": "सुरक्षा कारणों के लिए, इस पृष्ठ का प्रयोग केवल वही सदस्य कर सकते हैं जिन्हें दुरुपयोग फ़िल्टर को संपादित करने का अधिकार है।",
"abusefilter-warning": "'''चेतावनी''': इस कार्य को स्वचालित रूप से हानिकारक पाया गया है।\nअरचनात्मक संपादनों को शीघ्र पूर्ववत कर दिया जाएगा,\nऔर बार-बार अरचनात्मक और हानिकारक संपादन करने पर आपके सदस्य खाते अथवा आइ॰पी पते को अवरोधित भी किया जा सकता है।\nयदि आपका मानना है कि यह कार्य रचनात्मक है, तो इसे सहेजने के लिये फिर से \"पृष्ठ सहेजें\" का बटन दबाएँ।\nआपके संपादन को पकड़ने वाले नियम का संक्षिप्त विवरण है: $1",
"abusefilter-disallowed": "इस कार्य को स्वचालित रूप से हानिकारक पाया गया है, अतः इसे करने की अनुमति नहीं है।\nयदि आपका मानना है कि आपका कार्य रचनात्मक था, अपने कार्य की जानकारी कृपया किसी प्रबंधक को दें।\nआपके संपादन को पकड़ने वाले नियम का संक्षिप्त विवरण है: $1",
"abusefilter-blocked-display": "इस कार्य को स्वचालित रूप से हानिकारक पाया गया है,\nऔर आपको ऐसा करने से रोका गया है।\nइसके साथ, {{SITENAME}} की सुरक्षा के लिये आपके सदस्य खाते और सभी सम्बंधित आइ॰पी पतों को संपादन से अवरोधित कर दिया गया है।\nयदि यह गलती से हुआ है, कृपया किसी प्रबंधक से संपर्क करें।\nआपके संपादन को पकड़ने वाले नियम का संक्षिप्त विवरण है: $1",
@@ -57,6 +60,11 @@
"abusefilter-log-search-filter": "फ़िल्टर IDs (पाइप के साथ अलग):",
"abusefilter-log-search-title": "शीर्षक:",
"abusefilter-log-search-wiki": "विकी:",
+ "abusefilter-log-search-impact-all": "सभी कार्य",
+ "abusefilter-log-search-entries-label": "दृश्यता:",
+ "abusefilter-log-search-entries-all": "सभी प्रविष्टियाँ",
+ "abusefilter-log-search-entries-hidden": "केवल छुपी प्रविष्टियां",
+ "abusefilter-log-search-action-taken-any": "कोई",
"abusefilter-log-search-submit": "खोज",
"abusefilter-log-entry": "$1: $2 द्वारा $4 पर किये कार्य \"$3\" को दुरुपयोग फ़िल्टर ने पकड़ा।\nफ़िल्टर द्वारा उठाया गया कदम: $5;\nफ़िल्टर विवरण: $6",
"abusefilter-log-detailedentry-meta": "$1: $2 द्वारा $5 पर किये कार्य \"$4\" को दुरुपयोग फ़िल्टर $3 ने पकड़ा।\nफ़िल्टर द्वारा उठाया गया कदम: $6;\nफ़िल्टर विवरण: $7 ($8)",
@@ -74,19 +82,19 @@
"abusefilter-log-noactions": "कोई नहीं",
"abusefilter-log-details-diff": "सम्पादन में किये बदलाव",
"abusefilter-log-linkoncontribs": "दुरुपयोग लॉग",
- "abusefilter-log-linkoncontribs-text": "इस सदस्य के लिए दुरुपयोग लॉग",
+ "abusefilter-log-linkoncontribs-text": "{{GENDER:$1|इस सदस्य}} के लिए दुरुपयोग लॉग",
"abusefilter-log-hidden": "(प्रविष्टि छिपी हुई)",
"abusefilter-log-hidden-implicit": "(प्रविष्टि छुपाई गई है क्योंकि अवतरण हटा दिया गया है)",
"abusefilter-log-cannot-see-details": "आपके पास इस प्रविष्टि का विस्तृत विवरण देखने की अनुमति नहीं है",
+ "abusefilter-log-cannot-see-private-details": "आपको इस प्रविष्टि के निजी विवरण देखने की अनुमति नहीं है।",
"abusefilter-log-details-hidden": "आप इस प्रविष्टि का विस्तृत विवरण नहीं देख सकते हैं क्योंकि इसे सार्वजनिक दृष्टि से छुपाया गया है",
"abusefilter-log-hide-legend": "लॉग प्रविष्टि छुपाएँ",
"abusefilter-log-hide-id": "लॉग प्रविष्टि आइ॰डी:",
"abusefilter-log-hide-hidden": "इस प्रविष्टि को सार्वजनिक दृष्टि से छुपाएँ",
"abusefilter-log-hide-reason": "कारण:",
"abusefilter-log-hide-forbidden": "आपके पास दुरुपयोग लॉग प्रविष्टियाँ छुपाने की अनुमति नहीं है।",
- "abusefilter-logentry-suppress": "\"[[$1]]\" को छुपाया",
- "abusefilter-logentry-unsuppress": "ना छुपाएँ \"[[$1]]\"",
"logentry-abusefilter-hit": "$1 ने $3 पर \"$5\" किया जिसे $4 ने पकड़ा और निम्न कदम उठाया: $6 ($7)",
+ "logentry-abusefilterprivatedetails-access": "$1 $3 के व्यक्तिगत विवरण तक {{{{GENDER:$2|पहुँचा}}",
"abusefilter-management": "दुरुपयोग फ़िल्टर प्रबंधन",
"abusefilter-list": "सभी फ़िल्टर",
"abusefilter-list-id": "फ़िल्टर आइ॰डी",
@@ -118,7 +126,6 @@
"abusefilter-list-options-scope-local": "केवल स्थानीय नियम",
"abusefilter-list-options-scope-global": "केवल वैश्विक नियम",
"abusefilter-list-options-scope-all": "स्थानीय और वैश्विक नियम",
- "abusefilter-list-options-disabled": "अक्षम किये गए फ़िल्टर:",
"abusefilter-list-options-hidedisabled": "अक्षम किये गए फ़िल्टर छुपाएँ",
"abusefilter-list-options-submit": "अद्यतन",
"abusefilter-tools-text": "ये कुछ उपकरण हैं जो दुरुपयोग फ़िल्टर बनाने और डीबग करने में सहायक होंगे।",
@@ -138,10 +145,10 @@
"abusefilter-edit-status-label": "आँकड़े:",
"abusefilter-edit-status": "पिछले $1 {{PLURAL:$1|कार्य|कार्यों}} में से इस फ़िल्टर द्वारा $2 ($3%) पकड़े गए हैं।",
"abusefilter-edit-status-profile": "पिछले $1 {{PLURAL:$1|कार्य|कार्यों}} में से इस फ़िल्टर द्वारा $2 ($3%) पकड़े गए हैं।\nइसका औसत रन-टाइम $4 ms है, और यह शर्त सीमा में से $5 {{PLURAL:$5|शर्त|शर्तों}} का प्रयोग करता है।",
- "abusefilter-edit-throttled": "'''चेतावनी''': इस फ़िल्टर ने $1% से अधिक कार्यों को पकड़ने की सीमा पार कर ली है।\nअतः सुरक्षा कदम के तौर पर इसे स्वचालित रूप से बंद कर दिया गया है।",
"abusefilter-edit-new": "नया फ़िल्टर",
"abusefilter-edit-save": "फ़िल्टर सहेजें",
"abusefilter-edit-id": "फ़िल्टर आइ॰डी:",
+ "abusefilter-edit-switch-editor": "संपादक बदलें",
"abusefilter-edit-description": "विवरण:\n:''(सार्वजनिक)''",
"abusefilter-edit-group": "फ़िल्टर समूह:",
"abusefilter-edit-flags": "झंडे:",
@@ -164,7 +171,6 @@
"abusefilter-edit-action-tag": "समिक्षा के किए बदलाव को टैग करें",
"abusefilter-edit-throttle-count": "संख्या जितने कार्यों की अनुमति देनी है:",
"abusefilter-edit-throttle-period": "समय की अवधि:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|सॅकेंड|सॅकेंड}}",
"abusefilter-edit-warn-message": "चेतावनी के लिये प्रयोग किया जाने वाला अंतरफल संदेश:",
"abusefilter-edit-warn-other": "अन्य संदेश",
"abusefilter-edit-warn-other-label": "अन्य संदेश का पृष्ठ नाम:\n:''(मीडियाविकी उपसर्ग के बिना)''",
@@ -250,19 +256,18 @@
"abusefilter-edit-builder-vars-oldsize": "पुराना पृष्ठ आकार",
"abusefilter-edit-builder-vars-removedlines": "सम्पादन में हटाई गई लाइनें",
"abusefilter-edit-builder-vars-summary": "सम्पादन सारांश/कारण",
- "abusefilter-edit-builder-vars-article-id": "पृष्ठ आइ॰डी",
- "abusefilter-edit-builder-vars-article-ns": "पृष्ठ नामस्थान",
- "abusefilter-edit-builder-vars-article-text": "पृष्ठ शीर्षक (बिना नामस्थान)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "पूर्ण पृष्ठ शीर्षक",
- "abusefilter-edit-builder-vars-article-views": "पृष्ठ प्रदर्शन",
+ "abusefilter-edit-builder-vars-page-id": "पृष्ठ आइ॰डी",
+ "abusefilter-edit-builder-vars-page-ns": "पृष्ठ नामस्थान",
+ "abusefilter-edit-builder-vars-page-title": "पृष्ठ शीर्षक (बिना नामस्थान)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "पूर्ण पृष्ठ शीर्षक",
"abusefilter-edit-builder-vars-movedfrom-id": "स्थानान्तरण से पूर्व पृष्ठ आइ॰डी",
"abusefilter-edit-builder-vars-movedfrom-ns": "स्थानान्तरण से पूर्व पृष्ठ का नामस्थान",
- "abusefilter-edit-builder-vars-movedfrom-text": "स्थानांतरन शीर्षक का स्रोत पृष्ठ",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "स्थानांतरन के पूर्ण शीर्षक का स्रोत पृष्ठ",
+ "abusefilter-edit-builder-vars-movedfrom-title": "स्थानांतरन शीर्षक का स्रोत पृष्ठ",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "स्थानांतरन के पूर्ण शीर्षक का स्रोत पृष्ठ",
"abusefilter-edit-builder-vars-movedto-id": "स्थानांतरन स्थान के पृष्ठ का आई०डी०",
"abusefilter-edit-builder-vars-movedto-ns": "स्थानांतरन स्थान के पृष्ठ का नामस्थान",
- "abusefilter-edit-builder-vars-movedto-text": "स्थानांतरन स्थान पृष्ठ का शीर्षक",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "स्थानांतरन स्थान पृष्ठ का पूर्ण शीर्षक",
+ "abusefilter-edit-builder-vars-movedto-title": "स्थानांतरन स्थान पृष्ठ का शीर्षक",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "स्थानांतरन स्थान पृष्ठ का पूर्ण शीर्षक",
"abusefilter-edit-builder-vars-user-editcount": "सदस्य की सम्पादन गिनती",
"abusefilter-edit-builder-vars-user-age": "सदस्य खाते की आयु",
"abusefilter-edit-builder-vars-user-name": "सदस्यखाते का नाम",
@@ -327,7 +332,7 @@
"abusefilter-exception-regexfailure": "कैरैक्टर $1 पर regex \"$3\" में त्रुटि: \"$2\"",
"abusefilter-exception-overridebuiltin": "अवैध रूप से भीतरी वेरियबल \"$2\" को कैरेक्टर $1 ओवरराइड किया गया है।",
"abusefilter-exception-outofbounds": "निवेदन कर रहे हैं अनुपस्थित सूची आइटम $2 (सूची साइज़ = $3) कैरेक्टर $1 पर।",
- "abusefilter-exception-notlist": "निवेदन कर रहे हैं ऐरे के आइटम को गैर-ऐरे कैरेक्टर $1 पर।",
+ "abusefilter-exception-notarray": "निवेदन कर रहे हैं ऐरे के आइटम को गैर-ऐरे कैरेक्टर $1 पर।",
"abusefilter-action-tag": "टैग",
"abusefilter-action-throttle": "कार्यों की रेट सीमा पार होने पर कदम उठाएँ",
"abusefilter-action-warn": "चेतावनी",
@@ -343,7 +348,8 @@
"abusefilter-revert-periodstart": "अवधि प्रारंभ:",
"abusefilter-revert-periodend": "अवधि अंत:",
"abusefilter-revert-search": "क्रिया चयन करें",
- "abusefilter-revert-filter": "फ़िल्टर:",
+ "abusefilter-revert-filter": "फ़िल्टर आईडी:",
+ "abusefilter-revert-confirm-legend": "वापसी की पुष्टि करें",
"abusefilter-revert-confirm": "पुष्टि",
"abusefilter-revert-reasonfield": "कारण:",
"abusefilter-test": "पूर्व सम्पादनों से किसी फ़िलटर को जाँचें",
@@ -394,22 +400,9 @@
"abusefilter-import-submit": "डेटा आयात करें",
"abusefilter-group-default": "डिफ़ॉल्ट",
"abusefilter-http-error": "एच॰टी॰टी॰पी त्रुटि हुई है: $1 ।",
- "apihelp-abusefiltercheckmatch-param-filter": "मेल खाने को जाँचने के लिए पूर्ण फ़िलटर पाठ ।",
- "apihelp-abusefilterevalexpression-param-expression": "जाँचने की अभिव्यक्ति",
- "apihelp-abusefilterevalexpression-example-1": "सीधी अभिव्यक्ति जाँचना",
- "apihelp-abusefilterunblockautopromote-param-user": "उस सदस्य का सदस्यनाम जिस पर से आप अवरोध हटाना चाहते हैं।",
- "apihelp-abusefilterunblockautopromote-example-1": "[[User:Example]] के स्वतःपदोन्नति पर से अवरोध हटाना",
- "apihelp-query+abusefilters-param-prop": "कौन से गुण पाना चाहिए।",
- "apihelp-query+abusefilters-example-1": "सक्षम सार्वजनिक फ़िलटरों सूची दें",
- "apihelp-query+abusefilters-example-2": "फ़िलटरों के बारे में कुछ जानकारी दिखाइये",
- "apihelp-query+abuselog-description": "उन घटनाओं को दिखाएँ जिन्हें दुरुपयोग फ़िलटरों में से किसी एक द्वारा दिखाया गया है।",
- "apihelp-query+abuselog-param-start": "समयछाप की गिनती प्रारंभ हो रही (स्थान) से।",
- "apihelp-query+abuselog-param-end": "समयछाप की गिनती समाप्त हो रही (स्थान) से।",
- "apihelp-query+abuselog-param-user": "केवल उन प्रविष्टियों को दिखाएँ जो दिए गए सदस्य या आई०पी० पते द्वारा किए गए हैं।",
- "apihelp-query+abuselog-param-title": "केवल उन प्रविष्टियों को दिखाएँ जो दिए गए पृष्ठ पर आ रहे हैं।",
- "apihelp-query+abuselog-param-filter": "केवल उन प्रविष्टियों को दिखाएँ जो दी गई फ़िलटर आई०डी० द्वारा दिखाई गई है।",
- "apihelp-query+abuselog-param-limit": "सूची के अनुसार सर्वाधिक प्रविष्टियाँ।",
- "apihelp-query+abuselog-param-prop": "कौन से गुण पाना चाहिए।",
- "apihelp-query+abuselog-example-1": "हाल के लॉग प्रविष्टियाँ दिखाएँ",
- "apihelp-query+abuselog-example-2": "हाल के लॉग प्रविष्टियाँ [[API]] के लिए दिखाएँ"
+ "abusefilter-view-private-submit": "व्यक्तिगत विवरण देखें",
+ "abusefilter-view-private": "व्यक्तिगत विवरण देखें",
+ "abusefilter-view-private-reason": "निजी विवरण तक पहुंचने का कारण",
+ "abusefilter-invalid-request-noid": "अमान्य अनुरोध! आपको दुर्व्यवहार लॉग विवरण पृष्ठ पर फ़ॉर्म के माध्यम से निजी लॉग विवरण एक्सेस करना होगा और एक कारण प्रदान करना होगा।",
+ "abusefilter-log-ip-not-available": "उपलब्ध नहीं है"
}
diff --git a/AbuseFilter/i18n/hr.json b/AbuseFilter/i18n/hr.json
index c46bb14e..a85e57e7 100644
--- a/AbuseFilter/i18n/hr.json
+++ b/AbuseFilter/i18n/hr.json
@@ -14,8 +14,7 @@
"abusefilter": "Konfiguracija filtra zloporaba",
"abuselog": "Evidencija zloporaba",
"abusefilter-intro": "Dobro došli u sučelje za upravljanje Filtrom protiv zloporaba.\nOvaj je Filtar automatizirani softverski mehanizam koji primjenjuje automatsku heuristiku na sve radnje.\nOvo sučelje prikazuje popis definiranih filtara, te Vam omogućava da ih promijenite.",
- "abusefilter-mustbeeditor": "Iz sigurnosnih razloga, samo suradnici s pravom na izmjenu filtara zloporaba mogu rabiti ovo sučelje.",
- "abusefilter-warning": "'''Upozorenje''': Ova akcija je automatski identificirana kao štetna.\nNesvrhovita uređivanja biti će brzo uklonjena,\na prekomjerno ili ponovljeno nesvrhovito uređivanje će uzrokovati da će vaš račun ili IP adresa biti blokirana.\nUkoliko vjerujete da je vaše uređivanje smisleno, možete ga ponovo poslati da ga potvrdite.\nKratak opis pravila sprječavanja zloporaba koji se podudara s vašim uređivanjem je: $1",
+ "abusefilter-warning": "'''Upozorenje:''' Ova radnja automatski je identificirana kao štetna.\nNesvrhovite radnje bit će brzo uklonjene,\na prekomjerno ili ponovljeno nesvrhovito uređivanje će uzrokovati da će vaš račun ili IP adresa biti blokirana.\nUkoliko vjerujete da je vaše uređivanje smisleno, možete ga ponovo poslati da ga potvrdite.\nKratak opis pravila sprječavanja zloporaba koji se podudara s vašim uređivanjem je: $1",
"abusefilter-disallowed": "Ova je radnja automatski identificirana kao štetna, pa je stoga onemogućena.\nAko vjerujete da je Vaše uređivanje smisleno, molimo kontaktirajte administratora i obavijestite ga o tome što ste pokušali načiniti.\nKratki opis pravila sprječavanja zlouporabe koji se podudara s Vašim uređivanjem je: $1",
"abusefilter-blocked-display": "Ova je radnja automatski identificirana kao štetna,\nstoga ste spriječeni u njenom izvršavanju.\nNadalje, kako bi zaštitili projekt {{SITENAME}}, Vaš suradnički račun i sve povezane IP adrese blokirani su.\nAko se ovo dogodilo pogrješkom, molimo obratite se administratoru.\nKratki opis pravila sprječavanja zloporabe koji se podudara s Vašim uređivanjem je: $1",
"abusefilter-degrouped": "Ova je radnja automatski identificirana kao štetna.\nSlijedom toga, onemogućena je, budući da postoji sumnja da je Vaš račun kompromitiran (ukraden), sva su prava povučena.\nUkoliko mislite da je ovo pogrješka, molimo Vas kontaktirajte birokrata s objašnjenjem ove radnje, a Vaša prava mogu biti vraćena.\nKratki opis pravila sprječavanja zloporabe koji se podudara s Vašim uređivanjem je: $1",
@@ -52,10 +51,19 @@
"abusefilter-log-search-filter": "ID-ovi filtra (razdjeljivač je znak štapića):",
"abusefilter-log-search-title": "Naslov:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Obuhvaćanje:",
+ "abusefilter-log-search-impact-all": "Sve radnje",
+ "abusefilter-log-search-impact-saved": "Samo spremljene izmjene",
+ "abusefilter-log-search-impact-not-saved": "Bez spremljenih izmjena",
"abusefilter-log-search-entries-label": "Vidljivost:",
"abusefilter-log-search-entries-all": "Sve stavke",
"abusefilter-log-search-entries-hidden": "Samo skrivene stavke",
"abusefilter-log-search-entries-visible": "Samo stavke koje su vidljive",
+ "abusefilter-log-search-action-label": "Pokrenuta radnja:",
+ "abusefilter-log-search-action-other": "Ostalo",
+ "abusefilter-log-search-action-any": "Bilo koja",
+ "abusefilter-log-search-action-taken-label": "Poduzete radnje:",
+ "abusefilter-log-search-action-taken-any": "Bilo koja",
"abusefilter-log-search-submit": "Traži",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|pokrenuo|pokrenula}} je filtar zloporabe {{GENDER:$8|izvršivši}} radnju »$3« na $4.\nPoduzete radnje: $5;\nOpis filtra: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|pokrenuo|pokrenula}} je filtar zloporabe {{GENDER:$8|izvršivši}} radnju »$3« na $4.\nPoduzete radnje: $5;\nOpis filtra: $6 ($7)",
@@ -69,12 +77,14 @@
"abusefilter-log-details-var": "Varijabla",
"abusefilter-log-details-val": "Vrijednost",
"abusefilter-log-details-vars": "Parametri postupka",
- "abusefilter-log-details-private": "Privatni podaci",
+ "abusefilter-log-details-private": "Detalji privatne evidencije",
"abusefilter-log-details-ip": "Izvorna IP adresa",
+ "abusefilter-log-details-checkuser": "Provjeri suradnika",
"abusefilter-log-noactions": "ništa",
"abusefilter-log-details-diff": "Promjene napravljene uređivanjem",
"abusefilter-log-linkoncontribs": "evidencija zloporaba",
"abusefilter-log-linkoncontribs-text": "Evidencija zloporaba za {{GENDER:$1|ovoga suradnika|ovu suradnicu}}",
+ "abusefilter-log-linkonhistory": "Vidi evidencije filtra zloporaba",
"abusefilter-log-hidden": "(zapis je skriven)",
"abusefilter-log-hidden-implicit": "(skriveno jer je inačica obrisana)",
"abusefilter-log-cannot-see-details": "Nemate dopuštenje vidjeti potankosti ovog zapisa.",
@@ -85,8 +95,6 @@
"abusefilter-log-hide-hidden": "Sakrij ovaj zapis od javnog pristupa",
"abusefilter-log-hide-reason": "Razlog:",
"abusefilter-log-hide-forbidden": "Nemate dopuštenje za skrivanje zapisa iz evidencije zloporaba.",
- "abusefilter-logentry-suppress": "sakrij \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "otkrij \"[[$1]]\"",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|pokrenuo|pokrenula}} je $4 {{GENDER:$2|izvršivši}} »$5« na $3. Poduzete radnje: $6 ($7)",
"abusefilter-management": "Upravljanje filtrima zloporaba",
"abusefilter-list": "Svi filtri",
@@ -119,7 +127,6 @@
"abusefilter-list-options-scope-local": "Samo lokalna pravila",
"abusefilter-list-options-scope-global": "Samo globalna pravila",
"abusefilter-list-options-scope-all": "Lokalna i globalna pravila",
- "abusefilter-list-options-disabled": "Onemogućeni filtri:",
"abusefilter-list-options-hidedisabled": "Sakrij onemogućene filtre",
"abusefilter-list-options-submit": "Osvježi",
"abusefilter-tools-text": "Nekoliko alata koji mogu biti korisni kod formuliranja i uklanjanja grešaka filtra zloporaba.",
@@ -161,19 +168,18 @@
"abusefilter-edit-action-degroup": "Ukloni suradnika iz svih privilegiranih skupina",
"abusefilter-edit-action-block": "Blokirajte suradnika i/ili IP adrese (onemogući im uređivanje)",
"abusefilter-edit-action-throttle": "Pokreni akcije samo ako je suradnik prešao granicu",
- "abusefilter-edit-action-rangeblock": "Blokiraj raspon /16 odakle suradnik potječe",
+ "abusefilter-edit-action-rangeblock": "Blokiraj raspon adresa odakle suradnik potječe",
"abusefilter-edit-action-tag": "Označi uređivanje za daljnji pregled",
"abusefilter-edit-throttle-count": "Broj omogućenih akcija:",
- "abusefilter-edit-throttle-period": "Vremensko razdoblje:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}",
- "abusefilter-edit-throttle-groups": "Skupno usporavanje prema:\n:''(jedan po retku, zajedno sa zarezima)''",
+ "abusefilter-edit-throttle-period": "Vremensko razdoblje (u sekundama):",
+ "abusefilter-edit-throttle-groups": "Skupno usporavanje prema:",
"abusefilter-edit-warn-message": "Poruka sustava koja će biti rabljena za upozorenje:",
"abusefilter-edit-warn-other": "Ostale poruke",
"abusefilter-edit-warn-other-label": "Ime stranice druge poruke:\n:''(bez MediaWiki prefiksa)''",
"abusefilter-edit-warn-actions": "Akcije:",
- "abusefilter-edit-warn-preview": "Pretpregled odabrane poruke",
+ "abusefilter-edit-warn-preview": "Prikaži/sakrij pretpregled odabrane poruke",
"abusefilter-edit-warn-edit": "Kreiraj/Uredi odabranu poruku",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Oznake]] za primjenu (jedna po retku):",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Oznake]] za primjenu:",
"abusefilter-edit-denied": "Možda ne ćete vidjeti detalje ovoga filtra, zato što je skriven od javnog prikaza.",
"abusefilter-edit-main": "Parametri filtra",
"abusefilter-edit-done-subtitle": "Filtar je uređen",
@@ -190,7 +196,7 @@
"abusefilter-edit-export": "Izvezi ovaj filtar na neki drugi wiki",
"abusefilter-edit-syntaxok": "Nema sintaksnih pogrješaka.",
"abusefilter-edit-syntaxerr": "Sintaktička pogrješka: $1",
- "abusefilter-edit-bad-tags": "Jedna ili više oznaka koje ste naveli nije ispravna.\nOznaka mora biti kratka, i ne bi smjela sadržavati posebne znakove.",
+ "abusefilter-edit-bad-tags": "Jedna ili više oznaka koje ste naveli nije ispravna.\nOznaka mora biti kratka, i ne smije sadržavati posebne znakove i ne smiju biti rezervirani u drugoj programskoj podršci. Probajte izabrati novo ime oznake.",
"abusefilter-edit-notallowed": "Vi ne smijete stvarati ili uređivati filtre zloporaba",
"abusefilter-edit-notallowed-global": "Ne možete stvarati ili uređivati filtre zloporaba",
"abusefilter-edit-builder-select": "Odaberite opciju da biste ju dodali na mjestu pokazivača",
@@ -250,19 +256,18 @@
"abusefilter-edit-builder-vars-oldsize": "Veličina stare stranice",
"abusefilter-edit-builder-vars-removedlines": "Broj redaka uklonjenih uređivanjem",
"abusefilter-edit-builder-vars-summary": "Sažetak uređivanja/svrha",
- "abusefilter-edit-builder-vars-article-id": "ID stranice",
- "abusefilter-edit-builder-vars-article-ns": "Imenski prostor",
- "abusefilter-edit-builder-vars-article-text": "Ime stranice (bez imenskog prostora)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Puni naslov stranice",
- "abusefilter-edit-builder-vars-article-views": "Pregleda stranice",
+ "abusefilter-edit-builder-vars-page-id": "ID stranice",
+ "abusefilter-edit-builder-vars-page-ns": "Imenski prostor",
+ "abusefilter-edit-builder-vars-page-title": "Ime stranice (bez imenskog prostora)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Puni naslov stranice",
"abusefilter-edit-builder-vars-movedfrom-id": "ID broj izvorišne stranice premještanja",
"abusefilter-edit-builder-vars-movedfrom-ns": "Imenski prostor premještane stranice",
- "abusefilter-edit-builder-vars-movedfrom-text": "Naslov stranice koju premještate",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Puni naslov stranice koju premještate",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Naslov stranice koju premještate",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Puni naslov stranice koju premještate",
"abusefilter-edit-builder-vars-movedto-id": "ID broj odredišne stranice premještanja",
"abusefilter-edit-builder-vars-movedto-ns": "Imenski prostor odredišne stranice",
- "abusefilter-edit-builder-vars-movedto-text": "Naslov odredišne stranice",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Puni naslov odredišne stranice",
+ "abusefilter-edit-builder-vars-movedto-title": "Naslov odredišne stranice",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Puni naslov odredišne stranice",
"abusefilter-edit-builder-vars-user-editcount": "Brojač izmjena suradnika",
"abusefilter-edit-builder-vars-user-age": "Starost suradničkog računa",
"abusefilter-edit-builder-vars-user-name": "Ime suradničkog računa",
@@ -321,7 +326,7 @@
"abusefilter-exception-regexfailure": "Pogreška u regularnom izrazu \"$3\" kod znaka $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Nevaljana zamjena predefinirane varijable \"$2\" kod znaka $1.",
"abusefilter-exception-outofbounds": "Traženje nepostojećeg elementa popisa $2 (veličina popisa = $3) kod znaka $1.",
- "abusefilter-exception-notlist": "Traženje člana polja od nečega što nije polje kod znaka $1.",
+ "abusefilter-exception-notarray": "Traženje člana polja od nečega što nije polje kod znaka $1.",
"abusefilter-action-tag": "Oznaka",
"abusefilter-action-throttle": "Uspori",
"abusefilter-action-warn": "Upozori",
@@ -350,14 +355,22 @@
"abusefilter-test-submit": "Test",
"abusefilter-test-load": "Učitaj",
"abusefilter-test-user": "Izmjene prema suradnicima:",
- "abusefilter-test-period-start": "Izmjene napravljene kasnije:",
+ "abusefilter-test-nobots": "Sakrij uređivanja botova",
+ "abusefilter-test-period-start": "Izmjene napravljene nakon:",
"abusefilter-test-period-end": "Izmjene napravljene prije:",
"abusefilter-test-page": "Promjene napravljene na stranici:",
"abusefilter-test-shownegative": "Pokaži izmjene koje se ne podudaraju s filtrom",
"abusefilter-test-syntaxerr": "Filtar koji ste unijeli sadrži sintaktičku pogrešku.\nMožete primiti puno objašnjenje pogreške klikom na gumb \"Provjeri sintaksu\".",
+ "abusefilter-test-action": "Vrsta radnje:",
+ "abusefilter-test-search-type-all": "Sve radnje",
+ "abusefilter-test-search-type-edit": "Uređivanja",
+ "abusefilter-test-search-type-move": "Premještanja",
+ "abusefilter-test-search-type-delete": "Brisanja",
+ "abusefilter-test-search-type-upload": "Postavljanja",
+ "abusefilter-test-search-type-createaccount": "Stvaranja računa",
"abusefilter-changeslist-examine": "ispitaj",
"abusefilter-examine": "Ispitivanje pojedinačnih izmjena",
- "abusefilter-examine-intro": "Ova stranica omogućava ispitivanje varijabli generiranih od strane filtra zloporaba za pojedinu izmjenu i njihovo testiranje u filtru.",
+ "abusefilter-examine-intro": "Ova stranica omogućava ispitivanje varijabli koje je generirao filtar zloporaba za pojedinu izmjenu i njihovo testiranje u filtru.",
"abusefilter-examine-legend": "Odaberite izmjene",
"abusefilter-examine-diff": "Razl URL:",
"abusefilter-examine-user": "Suradnik:",
@@ -381,6 +394,7 @@
"abusefilter-topnav-import": "Uvoz filtra",
"abusefilter-log-name": "Evidencija filtra zloporaba",
"abusefilter-log-header": "Evidencija prikazuje sažetak promjena koje su napravljene filtrima.\nZa detaljnije informacije, vidi [[Special:AbuseFilter/history|popis]] nedavnih izmjena filtara.",
+ "abusefilter-logentry-create": "$1 je {{GENDER:$2|stvorio|stvorila}} $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|promijenio|promijenila}} je $4 ($5)",
"abusefilter-log-noresults": "Nema rezultata",
"abusefilter-diff-title": "Razlike između inačica",
@@ -395,5 +409,12 @@
"abusefilter-import-intro": "Možete rabiti ovo sučelje za uvoz filtara s drugih wikija.\nNa izvornoj wiki, kliknite na poveznicu \"{{int:abusefilter-edit-export}}\" pod \"{{int:abusefilter-edit-tools}}\" na sučelju za uređivanje.\nKopirajte tekst iz okvira koji će se pojaviti, i zalijepite ga u ovaj okvir, a zatim kliknite \"{{int:abusefilter-import-submit}}\".",
"abusefilter-import-submit": "Uvoz podataka",
"abusefilter-group-default": "Zadano",
- "apierror-abusefilter-badsyntax": "Filtar nema valjanu sintaksu."
+ "abusefilter-http-error": "HTTP-pogrješka: $1.",
+ "abusefilter-view-private-submit": "Vidi privatne detalje",
+ "abusefilter-view-private": "Vidi privatne detalje",
+ "abusefilter-view-private-reason": "Razlog pristupu privatnim detaljima:",
+ "abusefilter-log-details-id": "Evidencijski ID",
+ "abusefilter-log-ip-not-available": "Nije dostupno",
+ "tag-abusefilter-condition-limit": "dostignuta granica uvjeta",
+ "tag-abusefilter-condition-limit-description": "Uređivanja ili druge radnje koje nije bilo moguće provjeriti pomoću svih aktivnih [[Special:AbuseFilter|filtara zloporaba]] ([[mw:Extension:AbuseFilter/Conditions|pomoć]])."
}
diff --git a/AbuseFilter/i18n/hrx.json b/AbuseFilter/i18n/hrx.json
index 3e5b1d5a..c3136259 100644
--- a/AbuseFilter/i18n/hrx.json
+++ b/AbuseFilter/i18n/hrx.json
@@ -9,7 +9,6 @@
"abusefilter": "Missbrauchsfilter-Einstellunge",
"abuselog": "Missbrauchsfilter-Logbuch",
"abusefilter-intro": "Willkomme uff der Missbrauchsfilter-Management-Oberfläch.\nDer Missbrauchsfilter ist en automatischer Mechanismus, wo automatische Heiristike uff all Ännrunge oonwenne tut.\nDie Oberfläch zeicht en List von aller definierte Filter und erlaubt das man die verännre tut.",
- "abusefilter-mustbeeditor": "Aus Sicherheitsgründ därrfe nuar Benutzer mit dem Recht zur Ännrung von Missbrauchsfiltre die Schnittstell verwenne.",
"abusefilter-warning": "'''Achtung:''' Die Aktion woard als potentiell unkonstruktiv erkannt.\nSolche Beiträch werre meascht seahr schnell entfernt. In wiederholte und besonnersch schlimme Fälle weard dein Benutzerkonto bzw. dein IP-Adress gesperrt.\nWenns du meenst, dass die Aktion sinnvoll ist, kannst du se zum Beschtätiche erneit speichre.\nKoorzbeschreibung von der verletzte Rechel: $1",
"abusefilter-disallowed": "Die Aktion woard automatisch als schädlich erkannt und deshallrb net ausgeführt.\nWenns du denkst, dass dein Aktion konstruktiv woor, wend dich bittschön on en Administratoar und schildre ihm, was du versuchst host beizutroohn.\nKoorzbeschreibung von der verletzte Rechel: $1",
"abusefilter-blocked-display": "Die Aktion woard automatisch als schädlich erkannt und net ausgefeahrt.\nFerner worre dein Benutzerkonto und alle zugehöriche IP-Adresse gesperrt.\nWenns du denkst, dass es sich hier um en Fehler handelt, wend dich bittschön an en Administratoar.\nKoorzbeschreibung von der verletzte Rechel: $1",
@@ -70,8 +69,6 @@
"abusefilter-log-hide-id": "Logbuch-Eintrags-ID:",
"abusefilter-log-hide-hidden": "Den Eintrooch voar der Öffentlichkeit verberriche",
"abusefilter-log-hide-reason": "Grund:",
- "abusefilter-logentry-suppress": "hat \"[[$1]]\" verborriche",
- "abusefilter-logentry-unsuppress": "hot \"[[$1]]\" sichtbar gemacht",
"abusefilter-management": "Missbrauchsfilter-Verwaltung",
"abusefilter-list": "Alle Filter",
"abusefilter-list-id": "Filterkennung",
@@ -102,7 +99,6 @@
"abusefilter-list-options-scope": "Zeich Filter zu:",
"abusefilter-list-options-scope-local": "Lokales Wiki",
"abusefilter-list-options-scope-global": "Globale Rechle",
- "abusefilter-list-options-disabled": "Deaktivierte Filter:",
"abusefilter-list-options-hidedisabled": "Deaktivierte Filter ausblenne",
"abusefilter-list-options-submit": "Aktualisiere",
"abusefilter-tools-expr": "Expression-Tester",
@@ -130,11 +126,9 @@
"abusefilter-edit-lastmod-text": "$3, $4 Uhr von $2",
"abusefilter-edit-hitcount": "Treffer von der Filter:",
"abusefilter-edit-consequences": "Bei Treffer auszuführende Aktione",
- "abusefilter-edit-action-flag": "Die Beoorbeitung im Missbrauchsfilter-Logbuch markiere.",
"abusefilter-edit-action-tag": "Die Beoorbeitung für en spätre Üwerprüfung markiere.",
"abusefilter-edit-throttle-count": "Oonzoohl von erlaubter Aktione:",
"abusefilter-edit-throttle-period": "Zeitraum:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|Sekund|Sekunde}}",
"abusefilter-edit-throttle-groups": "Rechle für die Gruppedrossel:\n:''(ein jede Zeil, verbinne mit Kommata)''",
"abusefilter-edit-warn-message": "Systemnachricht für die Warnung:",
"abusefilter-edit-warn-other": "Andre Systemnachricht",
@@ -215,19 +209,18 @@
"abusefilter-edit-builder-vars-oldsize": "Alte Seitengröss",
"abusefilter-edit-builder-vars-removedlines": "Doorrich die Beoorbeitung von entfernte Zeile",
"abusefilter-edit-builder-vars-summary": "Zusammenfassung",
- "abusefilter-edit-builder-vars-article-id": "Seitekennnummer",
- "abusefilter-edit-builder-vars-article-ns": "Noomeraum von der Seit",
- "abusefilter-edit-builder-vars-article-text": "Titel von der Seit (ohne Noomeraum)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Voller Seitenoome",
- "abusefilter-edit-builder-vars-article-views": "Seiteuffruf",
+ "abusefilter-edit-builder-vars-page-id": "Seitekennnummer",
+ "abusefilter-edit-builder-vars-page-ns": "Noomeraum von der Seit",
+ "abusefilter-edit-builder-vars-page-title": "Titel von der Seit (ohne Noomeraum)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Voller Seitenoome",
"abusefilter-edit-builder-vars-movedfrom-id": "Seite-ID von der Quellseit",
"abusefilter-edit-builder-vars-movedfrom-ns": "Noomeraum von der Quellseit",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titel von der Quellseit",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Vollständicher Titel von der Quellseit",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titel von der Quellseit",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Vollständicher Titel von der Quellseit",
"abusefilter-edit-builder-vars-movedto-id": "Seite-ID von der Zielseit",
"abusefilter-edit-builder-vars-movedto-ns": "Noomeraum von der Zielseit",
- "abusefilter-edit-builder-vars-movedto-text": "Titel von der Zielseit",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Vollständicher Titel von der Zielseit",
+ "abusefilter-edit-builder-vars-movedto-title": "Titel von der Zielseit",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Vollständicher Titel von der Zielseit",
"abusefilter-edit-builder-vars-user-editcount": "Beitroochszählung von det Benutzer",
"abusefilter-edit-builder-vars-user-age": "Alter von der Benutzerkonto",
"abusefilter-edit-builder-vars-user-name": "Noome von der Benutzerkonto",
@@ -330,7 +323,6 @@
"abusefilter-topnav-tools": "Debugging",
"abusefilter-topnav-import": "Filter importiere",
"abusefilter-log-name": "Missbrauchsfilter-Logbuch",
- "abusefilter-log-entry-modify": "ännerte $1 ($2)",
"abusefilter-log-noresults": "Ken Ergebnisse",
"abusefilter-diff-title": "Unnerschied zwischich Versione",
"abusefilter-diff-item": "Element",
diff --git a/AbuseFilter/i18n/hsb.json b/AbuseFilter/i18n/hsb.json
index caa77f0f..11ae34d7 100644
--- a/AbuseFilter/i18n/hsb.json
+++ b/AbuseFilter/i18n/hsb.json
@@ -10,7 +10,6 @@
"abusefilter": "Konfiguracija znjewužiwanskeho filtra",
"abuselog": "Protokol znjewužiwanjow",
"abusefilter-intro": "Witaj do powjercha zrjadowanja znjewužiwanskich filtrow.\nZnjewužiwanski filter je awtomatizowany softwarowy mechanizm za nałoženje awtomatiskeje heuristiki na wšě akcije.\nPowjerch pokazuje lisćinu definowanych filtrow a dowola je změnić.",
- "abusefilter-mustbeeditor": "Z wěstotnych přičinow móžeja jenož wužiwarjo z prawom znjewužiwanske filtry změnić tutón interfejs wužiwać.",
"abusefilter-warning": "'''Warnowanje''': Tuta akcija bu awtomatisce jako škódna identifikowana.\nNjekonstruktiwne změny budu so spěšnje cofnyć, a njesłyšane abo wospjetowane wobdźěłowanje budźe k tomu wjesć, zo twoje konto abo twoja IP-adresa so blokuje.\nJeli maš tutu akciju za konstruktiwnu, móžeš znowa skkadować, zo by ju wobkrućił. \nKrótke wopisanje znjewužiwanskeho prawidła, kotremuž twoja akcija wotpowěduje, je: $1",
"abusefilter-disallowed": "Tuta akcija bu awtomatisce jako škódna identifikowana a tohodla znjemóžnjena.\nJeli wěriš, zo twoja akcija je konstruktiwna była, informuj prošu administratora, štož sy spytał činić.\nKrótke wopisanje znjewužiwanskeho prawidła, kotremuž twoja akcija wotpowěduje, je: $1",
"abusefilter-blocked-display": "Tuta akcija bu awtomatisce jako škódna identifikowana, a je so ći zadźěwało, ju wuwjesć.\nPřidatnje su so twoje wužiwarske konto a wšě zwjazane IP-addresy přećiwo wobdźěłanju zawrjene, zo by so {{SITENAME}} škitał.\nJeli je so to zmylnje stało, staj so prošu z administratorom do zwiska.\nKrótke wopisanje znjewužiwanskeho prawidła, kotremuž twoja akcija wotpowěduje, je: $1",
@@ -76,8 +75,6 @@
"abusefilter-log-hide-hidden": "Zapis před zjawnosću schować",
"abusefilter-log-hide-reason": "Přičina:",
"abusefilter-log-hide-forbidden": "Nimaš prawo zapiski znjewužiwanskeho protokola schować.",
- "abusefilter-logentry-suppress": "je \"[[$1]]\" schował",
- "abusefilter-logentry-unsuppress": "je \"[[$1]]\" pokazał",
"logentry-abusefilter-hit": "$1 je při wuwjedźenju akcije \"$5\" na $3 $4 zahibał. Skutkowanje: $6 ($7)",
"abusefilter-management": "Zrjadowanje znjewužiwanskich filtrow",
"abusefilter-list": "wšě filtry",
@@ -109,7 +106,6 @@
"abusefilter-list-options-scope": "Filtry pokazać z:",
"abusefilter-list-options-scope-local": "Lokalny wiki",
"abusefilter-list-options-scope-global": "Globalne přawidła",
- "abusefilter-list-options-disabled": "Znjemóžnjene filtry:",
"abusefilter-list-options-hidedisabled": "Znjemóžnjene filtry schować",
"abusefilter-list-options-submit": "Aktualizować",
"abusefilter-tools-text": "Tu su někotre nastroje, kotrež su wužitne, zo bychu znjewužiwanske filtry formulowali a jich zmylki wotstronili.",
@@ -129,7 +125,6 @@
"abusefilter-edit-status-label": "Statistika:",
"abusefilter-edit-status": "Z {{PLURAL:$1|poslednjeje akcije|poslednjeju $1 akcijow|poslednich $1 akcijow|poslednich $1 akcijow}} je tutón filter $2 ($3%) spóznał. Jeho přerězny běžny čas je $4 ms a spjelnja $5 {{PLURAL:$5|wuměnjenje|wuměnjeni|wuměnjenja|wuměnjenjow}} limita wuměnjenjow.",
"abusefilter-edit-status-profile": "Z {{PLURAL:$1|poslednjeje akcije|poslednjeju $1 akcijow|poslednich $1 akcijow|poslednich $1 akcijow}} je tutón filter $2 ($3%) spóznał. Jeho přerězny běžny čas je $4 ms a spjelnja $5 {{PLURAL:$5|wuměnjenje|wuměnjeni|wuměnjenja|wuměnjenjow}} limita wuměnjenjow.",
- "abusefilter-edit-throttled": "'''Warnowanje''': Tutón filter je so awtomatisce wěstoty dla znjemóžnił.\nLimit wjace hač $1 % akcijow je so docpěł.",
"abusefilter-edit-new": "Nowy filter",
"abusefilter-edit-save": "Filter składować",
"abusefilter-edit-id": "ID filtra:",
@@ -147,8 +142,7 @@
"abusefilter-edit-hitcount": "Trjechene filtra:",
"abusefilter-edit-consequences": "Akcije, kotrež maja so při trjechenym wuwjesć",
"abusefilter-edit-action-warn": "Tute akcije po warnowanje wužiwarjej zahibać",
- "abusefilter-edit-action-disallow": "Wujwedźenju dateje akcije přez wužiwarja zadźěwać",
- "abusefilter-edit-action-flag": "Změnu w protokolu znjewužiwanow markěrować",
+ "abusefilter-edit-action-disallow": "Wuwjedźenju tuteje akcije přez wužiwarja zadźěwać",
"abusefilter-edit-action-blockautopromote": "Wužiwarjej awtomatisce wobkrućeny status zebrać",
"abusefilter-edit-action-degroup": "Wužiwarja ze wšěch priwilegowanych skupinow wotstronić",
"abusefilter-edit-action-block": "Wužiwarja a/abo IP-adresu přećiwo změnjenju blokować",
@@ -157,7 +151,6 @@
"abusefilter-edit-action-tag": "Změnu za dalšu přehladku markěrować.",
"abusefilter-edit-throttle-count": "Ličba dowolenych akcijow",
"abusefilter-edit-throttle-period": "Časowy interwal",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekunda|sekundźe|sekundy|sekundow}}",
"abusefilter-edit-throttle-groups": "Haćenje skupiny přez:\n:''(jedne na linku, z komami zwjazać)''",
"abusefilter-edit-warn-message": "Systemowa zdźělanka za warnowanje:",
"abusefilter-edit-warn-other": "Druha powěsć",
@@ -244,19 +237,18 @@
"abusefilter-edit-builder-vars-oldsize": "Stara wulkosć strony",
"abusefilter-edit-builder-vars-removedlines": "Linki při wobdźěłanju wotstronjene",
"abusefilter-edit-builder-vars-summary": "Zjeće/přičina změny",
- "abusefilter-edit-builder-vars-article-id": "ID strony",
- "abusefilter-edit-builder-vars-article-ns": "Mjenjowy rum strony",
- "abusefilter-edit-builder-vars-article-text": "Titul strony (bjez mjenoweho ruma)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Dospołne mjeno strony",
- "abusefilter-edit-builder-vars-article-views": "Wobhladanja strony",
+ "abusefilter-edit-builder-vars-page-id": "ID strony",
+ "abusefilter-edit-builder-vars-page-ns": "Mjenjowy rum strony",
+ "abusefilter-edit-builder-vars-page-title": "Titul strony (bjez mjenoweho ruma)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Dospołne mjeno strony",
"abusefilter-edit-builder-vars-movedfrom-id": "ID strony žórłoweje strony",
"abusefilter-edit-builder-vars-movedfrom-ns": "Mjenowy rum žórłoweje strony",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titul žórłoweje strony",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Dospołny titul žórłoweje strony",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titul žórłoweje strony",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Dospołny titul žórłoweje strony",
"abusefilter-edit-builder-vars-movedto-id": "ID strony ciloweje strony",
"abusefilter-edit-builder-vars-movedto-ns": "Mjenowy rum ciloweje strony",
- "abusefilter-edit-builder-vars-movedto-text": "Titul ciloweje strony",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Dospołny titul ciloweje strony",
+ "abusefilter-edit-builder-vars-movedto-title": "Titul ciloweje strony",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Dospołny titul ciloweje strony",
"abusefilter-edit-builder-vars-user-editcount": "Ličenje změnow wužiwarja",
"abusefilter-edit-builder-vars-user-age": "Staroba wužiwarskeho konta",
"abusefilter-edit-builder-vars-user-name": "Mjeno wužiwarskeho konta",
@@ -321,7 +313,7 @@
"abusefilter-exception-regexfailure": "Zmylk w regularnym wurazu \"$3\" pola znamješka $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Njedowolene zběhnjenje płaćiwosće zatwarjeneje wariable \"$2\" pola znamješka $1.",
"abusefilter-exception-outofbounds": "Požaduje so njeeksistowacy lisćinowy zapisk $2 (lisćinowa wulkosć = $3) pola znamješka $1.",
- "abusefilter-exception-notlist": "Požaduje so zapisk pólneje wariable pola znamješka $1, za objekt, kotryž pólna wariabla njeje.",
+ "abusefilter-exception-notarray": "Požaduje so zapisk pólneje wariable pola znamješka $1, za objekt, kotryž pólna wariabla njeje.",
"abusefilter-action-tag": "Taflička",
"abusefilter-action-throttle": "Haćić",
"abusefilter-action-warn": "Warnować",
@@ -382,7 +374,6 @@
"abusefilter-topnav-import": "Fitler importować",
"abusefilter-log-name": "Protokol znjewužiwanskich filtrow",
"abusefilter-log-header": "Tutón protokol pokazuje zjeće změnow, kotrež buchu na filtrach přewjedźene.\nZa dospołne podrobnosće hlej [[Special:AbuseFilter/history|lisćinu]] njedawnych filtrowych změnow.",
- "abusefilter-log-entry-modify": "změni $1 ($2)",
"abusefilter-log-noresults": "Žane wuslědki",
"abusefilter-diff-title": "Rozdźěle mjez wersijemi",
"abusefilter-diff-item": "Zapisk",
@@ -396,8 +387,5 @@
"abusefilter-import-intro": "Móžeš tutón interfejs wužiwać, zo by filtry z druhich wikijow importował.\nKlikń w žórłowym wikiju na \"{{int:abusefilter-edit-export}}\" pod \"{{int:abusefilter-edit-tools}}\" na wobdźěłowanskim interfejsu. Kopěruj z jewjaceho so tekstoweho pola do tutoho tekstoweho pola a klikń potom na \"{{int:abusefilter-import-submit}}\",",
"abusefilter-import-submit": "Daty importować",
"abusefilter-group-default": "Standard",
- "abusefilter-http-error": "Zmylk wustupi: $1",
- "apihelp-abusefilterchecksyntax-example-1": "Syntaksu płaćiweho filtra přepruwować",
- "apihelp-abusefilterchecksyntax-example-2": "Syntaksu njepłaćiweho filtra přepruwować",
- "apihelp-abusefilterunblockautopromote-param-user": "Mjeno wužiwarja, kotrehož chceš dopušćić"
+ "abusefilter-http-error": "Zmylk wustupi: $1"
}
diff --git a/AbuseFilter/i18n/hu.json b/AbuseFilter/i18n/hu.json
index ef9892bc..073625c6 100644
--- a/AbuseFilter/i18n/hu.json
+++ b/AbuseFilter/i18n/hu.json
@@ -19,8 +19,7 @@
"abusefilter": "Vandálszűrő beállítása",
"abuselog": "Vandálszűrő-napló",
"abusefilter-intro": "Üdvözölünk a Vandálszűrő kezelőfelületén.\nA Vandálszűrő egy automatizált szoftver, ami minden műveletnél automatikus heurisztikát alkalmaz.\nItt tekintheted át és módosíthatod a szűrőket.",
- "abusefilter-mustbeeditor": "Biztonsági okokból csak az erre feljogosított szerkesztők módosíthatják a szűrőket és használhatják ezt a felületet.",
- "abusefilter-warning": "'''Figyelmeztetés:''' ez a művelet károsnak lett minősítve.\nA nem építő jellegű szerkesztések gyorsan vissza lesznek vonva,\na többszöri ilyen jellegű szerkesztés a felhasználói fiók vagy az IP-cím blokkolását vonja maga után.\nHa biztos vagy benne, hogy a szerkesztésed építő jellegű, kattints az Elküld gombra a megerősítéshez.\nA visszaélési szabály rövid leírása, amelynek az általad végzett művelet megfelelt: $1",
+ "abusefilter-warning": "'''Figyelmeztetés:''' ez a művelet károsnak lett minősítve.\nA nem építő jellegű műveletek gyorsan vissza lesznek vonva,\na többszöri ilyen jellegű szerkesztés a felhasználói fiók vagy az IP-cím blokkolását vonja maga után.\nHa biztos vagy benne, hogy a szerkesztésed építő jellegű, kattints az Elküld gombra a megerősítéshez.\nA visszaélési szabály rövid leírása, amelynek az általad végzett művelet megfelelt: $1",
"abusefilter-disallowed": "Ez a művelet automatikusan károsnak lett minősítve, így\nnem hajtható végre.\nHa úgy gondolod, hogy az általad végzett művelet építő jellegű, lépj kapcsolatba egy adminisztrátorral, és jelezd neki, hogy mit szerettél volna csinálni.\nA visszaélési szabály rövid leírása, amelynek az általad végzett művelet megfelelt: $1",
"abusefilter-blocked-display": "Ez a művelet automatikusan károsnak lett minősítve,\nígy nem hajtható végre.\nA(z) {{SITENAME}} védelme érdekében a szerkesztői fiókodat és az összes hozzátartozó IP címet blokkoltuk.\nHa úgy gondolod, hogy a blokkolás egy rendszerhiba eredménye volt, lépj kapcsolatba egy adminisztrátorral, és jelezd neki, hogy mit szerettél volna csinálni.\nA visszaélési szabály rövid leírása, amelynek az általad végzett művelet megfelelt: $1",
"abusefilter-degrouped": "Ez a művelet automatikusan károsnak lett minősítve, ezért nem engedélyezzük. Mivel a felhasználói fiókodat valószínűleg ártó szándékkal használják, az összes szerkesztési jogodat felfüggesztettük.\nHa szerinted ez egy rendszerhiba eredménye volt, akkor lépj kapcsolatba egy bürokratával és magyarázd el neki, hogy mi történt.\nA bürokrata eldöntheti, hogy visszaállítsa-e a korábbi jogaidat.\nA visszaélési szabály rövid leírása, amelynek az általad végzett művelet megfelelt: $1",
@@ -34,6 +33,7 @@
"right-abusefilter-log": "a Vandálszűrő naplójának megtekintése",
"right-abusefilter-log-detail": "Részletes Vandálszűrő-naplóbejegyzések",
"right-abusefilter-private": "személyes adatok megtekintése a Vandálszűrő naplójában",
+ "right-abusefilter-private-log": "a Vandálszűrő privát részletei naplójának megtekintése",
"right-abusefilter-modify-restricted": "vandálszűrők módosítása korlátozott hozzáféréssel",
"right-abusefilter-revert": "Egy adott vandálszűrő által okozott összes változtatás visszavonása",
"right-abusefilter-view-private": "privátként megjelölt vandálszűrők megtekintése",
@@ -46,6 +46,7 @@
"action-abusefilter-log": "a Vandálszűrő naplójának megtekintése",
"action-abusefilter-log-detail": "a Vandálszűrő részletes naplójának megtekintése",
"action-abusefilter-private": "a Vandálszűrő naplójának privát adatokat tartalmazó részének megtekintése",
+ "action-abusefilter-private-log": "a Vandálszűrő privát részletei naplójának megtekintése",
"action-abusefilter-modify-restricted": "vandálszűrők korlátozott szerkesztése",
"action-abusefilter-revert": "egy adott vandálszűrő módosításainak visszavonása",
"action-abusefilter-view-private": "privátként megjelölt vandálszűrők megtekintése",
@@ -56,9 +57,19 @@
"abusefilter-log-search-filter": "Szűrőazonosítók (függőleges vonallal elválasztva):",
"abusefilter-log-search-title": "Cím:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Hatás:",
+ "abusefilter-log-search-impact-all": "Minden művelet",
+ "abusefilter-log-search-impact-saved": "Csak mentett változtatások",
+ "abusefilter-log-search-impact-not-saved": "Mentett változtatások nélkül",
+ "abusefilter-log-search-entries-label": "Láthatóság:",
+ "abusefilter-log-search-entries-all": "Minden bejegyzés",
+ "abusefilter-log-search-entries-hidden": "Csak rejtett bejegyzések",
+ "abusefilter-log-search-entries-visible": "Csak látható bejegyzések",
+ "abusefilter-log-search-action-taken-label": "Végzett művelet:",
+ "abusefilter-log-search-action-taken-any": "Mind",
"abusefilter-log-search-submit": "Keresés",
- "abusefilter-log-entry": "$1: $2 „$3” műveletével {{GENDER:$8|beindított}} egy vandálszűrőt a(z) $4 oldalon.\nElvégzett intézkedések: $5\nA vandálszűrő leírása: $6",
- "abusefilter-log-entry-withdiff": "$1: $2 „$3” műveletével {{GENDER:$8|beindított}} egy vandálszűrőt a(z) $4 oldalon.\nElvégzett intézkedések: $5\nA vandálszűrő leírása: $6 ($7)",
+ "abusefilter-log-entry": "$1: $2 „$3” műveletével {{GENDER:$8|beindított}} egy vandálszűrőt a(z) $4 oldalon.\nElvégzett intézkedések: $5;\nA vandálszűrő leírása: $6",
+ "abusefilter-log-entry-withdiff": "$1: $2 „$3” műveletével {{GENDER:$8|beindított}} egy vandálszűrőt a(z) $4 oldalon.\nElvégzett intézkedések: $5;\nA vandálszűrő leírása: $6 ($7)",
"abusefilter-log-detailedentry-meta": "$1: $2 „$4” műveletével {{GENDER:$9|beindította}} a(z) $3 a(z) $5 lapon.\nVégrehajtott intézkedések: $6;\nA vandálszűrő leírása: $7 ($8)",
"abusefilter-log-detailedentry-global": "$1 azonosítójú globális szűrőt",
"abusefilter-log-detailedentry-local": "$1 azonosítójú szűrőt",
@@ -85,9 +96,10 @@
"abusefilter-log-hide-hidden": "Ennek a tételnek az elrejtése a nyilvánosság elől.",
"abusefilter-log-hide-reason": "Indoklás:",
"abusefilter-log-hide-forbidden": "Nincs jogosultságod elrejteni ezeket a tételeket.",
- "abusefilter-logentry-suppress": "rejtve \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "felfedve \"[[$1]]\"",
- "logentry-abusefilter-hit": "$1 „$5” műveletével beindított a $4 vandálszűrőt a(z) $3 oldalon. Elvégzett intézkedések: $6 ($7)",
+ "logentry-abusefilter-hit": "$1 „$5” műveletével {{GENDER:$2|beindította}} a(z) $4 vandálszűrőt a(z) $3 oldalon. Elvégzett intézkedések: $6 ($7)",
+ "log-action-filter-abusefilter": "Szűrőváltoztatás típusa:",
+ "log-action-filter-abusefilter-create": "Új szűrő létrehozása",
+ "log-action-filter-abusefilter-modify": "Szűrő módosítása",
"abusefilter-management": "Vandálszűrő-kezelés",
"abusefilter-list": "Az összes szűrő",
"abusefilter-list-id": "Szűrőazonosító",
@@ -119,7 +131,6 @@
"abusefilter-list-options-scope-local": "Csak helyi szabályok",
"abusefilter-list-options-scope-global": "Csak globális szabályok",
"abusefilter-list-options-scope-all": "Helyi és globális szabályok",
- "abusefilter-list-options-disabled": "Kikapcsolt szűrők:",
"abusefilter-list-options-hidedisabled": "Kikapcsolt szűrők elrejtése",
"abusefilter-list-options-submit": "Frissítés",
"abusefilter-tools-text": "Egy pár eszköz a vandálszűrők kialakításához és hibakereséséhez.",
@@ -139,7 +150,6 @@
"abusefilter-edit-status-label": "Statisztikák:",
"abusefilter-edit-status": "{{PLURAL:$1|A legutolsó művelet esetén|Az utolsó $1 műveletnél}} ez a szűrő $2 ($3%) alkalommal talált egyezést.",
"abusefilter-edit-status-profile": "{{PLURAL:$1|A legutolsó művelet esetén|Az utolsó $1 műveletnél}} ez a szűrő $2 ($3%) alkalommal talált egyezést.\nAz átlagos futási ideje $4 ms volt, és {{PLURAL:$5|egy|$5}} feltételt használt fel a feltételhatárból.",
- "abusefilter-edit-throttled": "'''Figyelem''': Ezt a szűrő biztonsági okokból automatikusan ki lett kapcsolva,\nmert a műveletek több, mint $1%-ánál egyezést talált.",
"abusefilter-edit-new": "Új szűrő",
"abusefilter-edit-save": "Szűrő mentése",
"abusefilter-edit-id": "Szűrő azonosítója:",
@@ -166,7 +176,6 @@
"abusefilter-edit-action-tag": "Szerkesztés felcímkézése későbbi ellenőrzésre.",
"abusefilter-edit-throttle-count": "Engedélyezett műveletek száma:",
"abusefilter-edit-throttle-period": "Időtartam:",
- "abusefilter-edit-throttle-seconds": "{{PLURAL:$1|egy|$1}} másodperc",
"abusefilter-edit-throttle-groups": "Érintett csoportok:\n:''(soronként egy, csoportosítás vesszővel)''",
"abusefilter-edit-warn-message": "Figyelmeztetéshez használt rendszerüzenet:",
"abusefilter-edit-warn-other": "Más üzenet",
@@ -191,7 +200,7 @@
"abusefilter-edit-export": "Szűrő exportálása egy másik wikibe",
"abusefilter-edit-syntaxok": "Nincs szintaktikai hiba.",
"abusefilter-edit-syntaxerr": "Szintaktikai hiba: $1",
- "abusefilter-edit-bad-tags": "Egy vagy több megadott tag nem érvényes.\nA tageknek rövidnek kell lenniük, és nem tartalmazhatnak speciális karaktereket.",
+ "abusefilter-edit-bad-tags": "Egy vagy több megadott címke nem érvényes.\nA címkéknek rövidnek kell lenniük, nem tartalmazhatnak speciális karaktereket, és nem lehetnek más szoftver számára fenntartottak. Próbálj új címkenevet választani.",
"abusefilter-edit-notallowed": "Nincs engedélyed visszaélési szabályok létrehozására vagy módosítására",
"abusefilter-edit-notallowed-global": "Nincs engedélyed globális vandálszűrők létrehozására vagy módosítására",
"abusefilter-edit-builder-select": "A kurzornál való beszúráshoz válassz egy opciót",
@@ -252,25 +261,25 @@
"abusefilter-edit-builder-vars-oldsize": "régi lapméret",
"abusefilter-edit-builder-vars-removedlines": "a szerkesztés során eltávolított sorok száma",
"abusefilter-edit-builder-vars-summary": "szerkesztési összefoglaló",
- "abusefilter-edit-builder-vars-article-id": "oldalazonosító",
- "abusefilter-edit-builder-vars-article-ns": "lap névtere",
- "abusefilter-edit-builder-vars-article-text": "lap címe (névtér nélkül)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "a lap teljes címe",
+ "abusefilter-edit-builder-vars-page-id": "oldalazonosító",
+ "abusefilter-edit-builder-vars-page-ns": "lap névtere",
+ "abusefilter-edit-builder-vars-page-title": "lap címe (névtér nélkül)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "a lap teljes címe",
"abusefilter-edit-builder-vars-movedfrom-id": "átnevezésnél a forráslap azonosítója",
"abusefilter-edit-builder-vars-movedfrom-ns": "átnevezésnél a forráslap névtere",
- "abusefilter-edit-builder-vars-movedfrom-text": "átnevezésnél a forráslap címe",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "átnevezésnél a forráslap teljes címe",
+ "abusefilter-edit-builder-vars-movedfrom-title": "átnevezésnél a forráslap címe",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "átnevezésnél a forráslap teljes címe",
"abusefilter-edit-builder-vars-movedto-id": "átnevezésnél a céllap azonosítója",
"abusefilter-edit-builder-vars-movedto-ns": "átnevezésnél a céllap névtere",
- "abusefilter-edit-builder-vars-movedto-text": "átnevezésnél a céllap címe",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "átnevezésnél a céllap teljes címe",
+ "abusefilter-edit-builder-vars-movedto-title": "átnevezésnél a céllap címe",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "átnevezésnél a céllap teljes címe",
"abusefilter-edit-builder-vars-user-editcount": "a szerkesztő szerkesztéseinek száma",
"abusefilter-edit-builder-vars-user-age": "a szerkesztő életkora",
"abusefilter-edit-builder-vars-user-name": "a szerkesztő neve",
"abusefilter-edit-builder-vars-user-groups": "a szerkesztő csoportjai (beleértve az implicit csoportokat is)",
"abusefilter-edit-builder-vars-user-rights": "Felhasználó jogai",
"abusefilter-edit-builder-vars-user-blocked": "Ha a felhasználó blokkolva van",
- "abusefilter-edit-builder-vars-user-emailconfirm": "az e-mail cím megerősítésének ideje",
+ "abusefilter-edit-builder-vars-user-emailconfirm": "az e-mail-cím megerősítésének ideje",
"abusefilter-edit-builder-vars-recent-contributors": "a lap utolsó tíz szerkesztője",
"abusefilter-edit-builder-vars-first-contributor": "Az első közreműködő ezen az oldalon",
"abusefilter-edit-builder-vars-all-links": "az új szövegben lévő összes hivatkozás",
@@ -325,7 +334,7 @@
"abusefilter-exception-regexfailure": "A(z) „$3” regex hibás a(z) $1. karakternél: „$2”",
"abusefilter-exception-overridebuiltin": "A(z) $1. karakternél a „$2” beépített változó felülírása nem engedélyezett.",
"abusefilter-exception-outofbounds": "A(z) $1. karakternél nem létező, $2. számú listatagra található hivatkozás, de az egész lista csak $3 hosszú.",
- "abusefilter-exception-notlist": "A(z) $1. karakternél a függvény tömbbe nem tartozó tömbtagot kér.",
+ "abusefilter-exception-notarray": "A(z) $1. karakternél a függvény tömbbe nem tartozó tömbtagot kér.",
"abusefilter-action-tag": "felcímkézés",
"abusefilter-action-throttle": "Szerkesztési sebesség",
"abusefilter-action-warn": "figyelmeztetés",
@@ -386,7 +395,6 @@
"abusefilter-topnav-import": "Szűrő importálása",
"abusefilter-log-name": "Vandálszűrő naplója",
"abusefilter-log-header": "Ebben a naplóban a szűrőkön végzett változtatások története található. A részletekhez lásd [[Special:AbuseFilter/history|a friss szűrőváltoztatások]] oldalát.",
- "abusefilter-log-entry-modify": "megváltoztatta $1-t ($2)",
"abusefilter-log-noresults": "Nincs találat",
"abusefilter-diff-title": "Változatok közötti különbségek",
"abusefilter-diff-item": "Tétel",
@@ -400,8 +408,5 @@
"abusefilter-import-intro": "Ezen a felületen más wikikben készült szűrőket lehet importálni.\nA forráswikin a „{{int:abusefilter-edit-tools}}” alatt kattints az „{{int:abusefilter-edit-export}}” gombra.\nA megjelent szövegdoboz tartalmát ebbe a szövegdobozba másold át, majd kattints az „{{int:abusefilter-import-submit}}” gombra.",
"abusefilter-import-submit": "Adatok importálása",
"abusefilter-group-default": "Alapértelmezett",
- "abusefilter-http-error": "HTTP hiba történt: $1",
- "apihelp-abusefiltercheckmatch-description": "vars, rcid vagy logid szükséges, de csak egyet lehet használni.",
- "apihelp-query+abusefilters-example-1": "Az engedélyezett nyilvános szűrők listázása.",
- "apihelp-query+abuselog-example-1": "Friss naplóbejegyzések mutatása"
+ "abusefilter-http-error": "HTTP hiba történt: $1"
}
diff --git a/AbuseFilter/i18n/ia.json b/AbuseFilter/i18n/ia.json
index 15872ca7..835ff9cd 100644
--- a/AbuseFilter/i18n/ia.json
+++ b/AbuseFilter/i18n/ia.json
@@ -9,7 +9,6 @@
"abusefilter": "Configuration del filtros anti-abuso",
"abuselog": "Registro de abusos",
"abusefilter-intro": "Benvenite al interfacie de gestion del filtro anti-abuso.\nLe filtro anti-abuso es un mechanismo automatic de software pro applicar heuristicas automatic a tote le actiones.\nIste interfacie monstra un lista de filtros definite, e permitte modificar los.",
- "abusefilter-mustbeeditor": "Pro motivos de securitate, solmente le usatores con le permission de modificar le filtros anti-abuso pote usar iste interfacie.",
"abusefilter-warning": "'''Attention:''' Iste action ha essite automaticamente identificate como damnose.\nTote actiones non constructive essera rapidemente revertite,\ne le modification non constructive flagrante o repetite resultara in le blocada de tu conto o adresse IP.\nSi tu crede que iste action es constructive, tu pote submitter lo de novo pro confirmar lo.\nEcce un breve description del regula anti-abuso que detegeva tu action: $1",
"abusefilter-disallowed": "Iste action ha essite automaticamente identificate como damnose,\ne per consequente es prohibite.\nSi tu crede que tu action esseva constructive, per favor informa un administrator de lo que tu tentava facer.\nUn breve description del regula anti-abuso correspondente a tu action es: $1",
"abusefilter-blocked-display": "Iste action ha essite automaticamente identificate como nocive,\ne tu ha essite impedite de executar lo.\nIn addition, pro proteger {{SITENAME}}, tu conto de usator e tote le adresses IP associate ha essite blocate de facer modificationes.\nSi isto ha occurrite in error, per favor contacta un administrator.\nUn breve description del regula anti-abuso correspondente con tu action es: $1",
@@ -47,6 +46,10 @@
"abusefilter-log-search-filter": "IDs de filtro (separar con barras vertical):",
"abusefilter-log-search-title": "Titulo:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-entries-label": "Visibilitate:",
+ "abusefilter-log-search-entries-all": "Tote le entratas",
+ "abusefilter-log-search-entries-hidden": "Solmente entratas celate",
+ "abusefilter-log-search-entries-visible": "Solmente entratas visibile",
"abusefilter-log-search-submit": "Cercar",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|ha provocate}} un filtro anti-abuso, {{GENDER:$8|executante}} le action \"$3\" sur $4.\nActiones prendite: $5;\nDescription del filtro: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|ha provocate}} un filtro anti-abuso, {{GENDER:$8|executante}} le action \"$3\" sur $4\nActiones prendite: $5;\nDescription del filtro: $6 ($7)",
@@ -60,7 +63,7 @@
"abusefilter-log-details-var": "Variabile",
"abusefilter-log-details-val": "Valor",
"abusefilter-log-details-vars": "Parametros del action",
- "abusefilter-log-details-private": "Datos private",
+ "abusefilter-log-details-private": "Detalios private del registro",
"abusefilter-log-details-ip": "Adresse IP de origine",
"abusefilter-log-noactions": "nihil",
"abusefilter-log-details-diff": "Modificationes effectuate",
@@ -77,9 +80,10 @@
"abusefilter-log-hide-hidden": "Celar iste entrata al vista del publico",
"abusefilter-log-hide-reason": "Motivo:",
"abusefilter-log-hide-forbidden": "Tu non ha le permission de celar\nentratas del registro de abusos.",
- "abusefilter-logentry-suppress": "celava \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "revelava [[$1]]",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|ha celate}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|ha restaurate}} $3",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|ha provocate}} $4, exequente le action \"$5\" sur $3. Actiones prendite: $6 ($7)",
+ "log-action-filter-suppress-abuselog": "Suppression de registro de abusos",
"abusefilter-management": "Gestion del filtro anti-abuso",
"abusefilter-list": "Tote le filtros",
"abusefilter-list-id": "ID del filtro",
@@ -111,7 +115,6 @@
"abusefilter-list-options-scope-local": "Solmente regulas local",
"abusefilter-list-options-scope-global": "Solmente regulas global",
"abusefilter-list-options-scope-all": "Regulas local e global",
- "abusefilter-list-options-disabled": "Filtros disactivate:",
"abusefilter-list-options-hidedisabled": " Celar le filtros disactivate",
"abusefilter-list-options-submit": "Actualisar",
"abusefilter-tools-text": "Ecce alcun instrumentos utile pro formular e corriger le filtros anti-abuso.",
@@ -131,7 +134,7 @@
"abusefilter-edit-status-label": "Statisticas:",
"abusefilter-edit-status": "Del ultime $1 {{PLURAL:$1|action|actiones}}, iste filtro ha correspondite a $2 ($3%).",
"abusefilter-edit-status-profile": "Del ultime $1 {{PLURAL:$1|action|actiones}}, iste filtro ha correspondite a $2 ($3%).\nIn media, su durata de execution es $4ms, e illo consume $5 {{PLURAL:$5|condition|conditiones}} ex le limite de conditiones.",
- "abusefilter-edit-throttled": "'''Attention:''' Iste filtro ha essite disactivate automaticamente como mesura de securitate. Illo ha attingite le limite de correspondentia a plus de $1% del actiones.",
+ "abusefilter-edit-throttled-warning": "'''Attention:''' Iste filtro ha essite automaticamente marcate como nocive. Como mesura de securitate, le sequente actiones non essera exequite ($1). Per favor, revide e [[mw:Extension:AbuseFilter/Conditions|optimisa]] tu conditiones pro remover this restriction",
"abusefilter-edit-new": "Nove filtro",
"abusefilter-edit-save": "Salveguardar filtro",
"abusefilter-edit-id": "ID del filtro:",
@@ -147,26 +150,26 @@
"abusefilter-edit-lastmod": "Ultime modification del filtro:",
"abusefilter-edit-lastmod-text": "$1 per $2",
"abusefilter-edit-hitcount": "Accessos al filtro:",
- "abusefilter-edit-consequences": "Actiones a prender in caso de correspondentia",
+ "abusefilter-edit-consequences": "Actiones a prender si corresponde",
"abusefilter-edit-action-warn": "Interprender iste actiones post haber date un advertimento al usator",
"abusefilter-edit-action-disallow": "Impedir que le usator executa le action in question",
"abusefilter-edit-action-blockautopromote": "Revocar le stato autoconfirmate del usator",
"abusefilter-edit-action-degroup": "Remover le usator de tote le gruppos privilegiate",
"abusefilter-edit-action-block": "Blocar le usator e/o adresse IP de facer modificationes",
"abusefilter-edit-action-throttle": "Interprender actiones solmente si le usator excede un limite de frequentia",
- "abusefilter-edit-action-rangeblock": "Blocar le intervallo /16 del qual le usator proveni.",
+ "abusefilter-edit-action-rangeblock": "Blocar le intervallo IP respective del qual le usator proveni.",
"abusefilter-edit-action-tag": "Etiquettar le modification pro revision ulterior.",
"abusefilter-edit-throttle-count": "Numero de actiones a permitter:",
- "abusefilter-edit-throttle-period": "Periodo de tempore:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|secunda|secundas}}",
- "abusefilter-edit-throttle-groups": "Gruppar le limites de frequentia per:\n:''(un per linea; combinar los con commas)''",
+ "abusefilter-edit-throttle-period": "Periodo de tempore (in secundas):",
+ "abusefilter-edit-throttle-groups": "Gruppar le limites de frequentia per:",
"abusefilter-edit-warn-message": "Message de systema pro usar qua advertimento:",
"abusefilter-edit-warn-other": "Altere message",
"abusefilter-edit-warn-other-label": "Nomine de pagina de un altere message:\n:''(sin prefixo MediaWiki)''",
"abusefilter-edit-warn-actions": "Actiones:",
- "abusefilter-edit-warn-preview": "Previsualisar le messages seligite",
+ "abusefilter-edit-warn-preview": "Monstrar/Celar le previsualisation del message seligite",
"abusefilter-edit-warn-edit": "Crear/modificar le messages seligite",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Etiquettas]] a applicar (un per linea):",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Etiquettas]] a applicar:",
+ "abusefilter-edit-tag-hidden-placeholder": "Adder etiquettas (separate per commas)",
"abusefilter-edit-denied": "Tu non pote vider le detalios de iste filtro, perque illo es celate al vista public.",
"abusefilter-edit-main": "Parametros del filtro",
"abusefilter-edit-done-subtitle": "Filtro modificate",
@@ -196,8 +199,8 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Modulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Potentia (**)",
"abusefilter-edit-builder-group-op-comparison": "Operatores de comparation",
- "abusefilter-edit-builder-op-comparison-equal": "Equal a (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Non equal a (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Valor equal a (==)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Valor non equal a (!=)",
"abusefilter-edit-builder-op-comparison-lt": "Minus que (<)",
"abusefilter-edit-builder-op-comparison-gt": "Plus que (>)",
"abusefilter-edit-builder-op-comparison-lte": "Minus que o equal a (<=)",
@@ -247,19 +250,21 @@
"abusefilter-edit-builder-vars-new-content-model": "Nove modello de contento",
"abusefilter-edit-builder-vars-removedlines": "Lineas eliminate durante le modification",
"abusefilter-edit-builder-vars-summary": "Summario/motivo del modification",
- "abusefilter-edit-builder-vars-article-id": "ID del pagina",
- "abusefilter-edit-builder-vars-article-ns": "Spatio de nomines del pagina",
- "abusefilter-edit-builder-vars-article-text": "Titulo del pagina (sin spatio de nomines)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Titulo integre del pagina",
- "abusefilter-edit-builder-vars-article-views": "Visitas de pagina",
+ "abusefilter-edit-builder-vars-page-id": "ID del pagina",
+ "abusefilter-edit-builder-vars-page-ns": "Spatio de nomines del pagina",
+ "abusefilter-edit-builder-vars-page-title": "Titulo del pagina (sin spatio de nomines)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Titulo complete del pagina",
+ "abusefilter-edit-builder-vars-page-age": "Etate del pagina (in secundas)",
"abusefilter-edit-builder-vars-movedfrom-id": "ID del pagina de origine del renomination",
"abusefilter-edit-builder-vars-movedfrom-ns": "Spatio de nomines del pagina de origine pro le renomination",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titulo del pagina de origine pro le renomination",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Titulo integre del pagina de origine pro le renomination",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titulo del pagina a renominar",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Titulo complete del pagina a renominar",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Etate del pagina original (in secundas)",
"abusefilter-edit-builder-vars-movedto-id": "ID del pagina de destination del renomination",
"abusefilter-edit-builder-vars-movedto-ns": "Spatio de nomines del pagina de destination pro le renomination",
- "abusefilter-edit-builder-vars-movedto-text": "Titulo de destination pro le renomination",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Titulo integre de destination",
+ "abusefilter-edit-builder-vars-movedto-title": "Titulo de destination pro le renomination",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Titulo complete de destination",
+ "abusefilter-edit-builder-vars-movedto-age": "Etate del pagina de destination (in secundas)",
"abusefilter-edit-builder-vars-user-editcount": "Numero de modificationes del usator",
"abusefilter-edit-builder-vars-user-age": "Etate del conto de usator",
"abusefilter-edit-builder-vars-user-name": "Nomine del conto de usator",
@@ -329,7 +334,7 @@
"abusefilter-exception-regexfailure": "Error in le expression regular \"$3\" al character $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Supplantation invalide del variabile incorporate \"$2\" al character $1.",
"abusefilter-exception-outofbounds": "Requesta de un elemento de lista non existente $2 (grandor del lista = $3) al character $1.",
- "abusefilter-exception-notlist": "Requesta de un elemento de array ab un variabile non array al character $1.",
+ "abusefilter-exception-notarray": "Requesta de un elemento de array ab un variabile non array al character $1.",
"abusefilter-action-tag": "Etiquettar",
"abusefilter-action-throttle": "Limitar frequentia",
"abusefilter-action-warn": "Advertir",
@@ -390,7 +395,6 @@
"abusefilter-topnav-import": "Importar filtro",
"abusefilter-log-name": "Registro del filtro anti-abuso",
"abusefilter-log-header": "Iste registro monstra un summario del modificationes facite al filtros.\nPro detalios complete, vide [[Special:AbuseFilter/history|le lista]] de cambios recente al filtros.",
- "abusefilter-log-entry-modify": "modificava $1 ($2)",
"abusefilter-log-noresults": "Nulle resultato",
"abusefilter-diff-title": "Differentias inter versiones",
"abusefilter-diff-item": "Entrata",
@@ -404,50 +408,5 @@
"abusefilter-import-intro": "Iste interfacie es pro importar filtros ex altere wikis.\nIn le wiki de origine, clicca \"{{int:abusefilter-edit-export}}\" sub \"{{int:abusefilter-edit-tools}}\" in le interfacie de modification.\nCopia le contento del quadro de texto que appare, e colla lo in iste quadro de texto, pois clicca \"{{int:abusefilter-import-submit}}\".",
"abusefilter-import-submit": "Importar datos",
"abusefilter-group-default": "Predefinite",
- "abusefilter-http-error": "Un error HTTP occurreva: $1.",
- "apihelp-abusefiltercheckmatch-description": "Verifica si un filtro anti-abuso corresponde a un insimul de variabiles. Evento AbuseFilter traciate per le editor.\n\nvars, rcid o logid es obligatori, ma solmente un inter illos pote esser usate.",
- "apihelp-abusefiltercheckmatch-summary": "Verificar si un filtro anti-abuso corresponde a un insimul de variabiles (un redactor registrava un evento AbuseFilter).",
- "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid o logid es requirite, ma solmente un de istes pote esser usate.",
- "apihelp-abusefiltercheckmatch-param-filter": "Le texto complete del filtro pro verificar si un correspondentia existe.",
- "apihelp-abusefiltercheckmatch-param-vars": "Array, codificate in JSON, de variabiles contra le quales testar.",
- "apihelp-abusefiltercheckmatch-param-rcid": "ID de modification recente contra le qual verificar.",
- "apihelp-abusefiltercheckmatch-param-logid": "ID de registro de filtro anti-abuso contra le qual verificar.",
- "apihelp-abusefiltercheckmatch-example-1": "Testar si le ID de modification recente 15 corresponde a un filtro simple",
- "apihelp-abusefilterchecksyntax-description": "Verificar le syntaxe de un filtro anti-abuso.",
- "apihelp-abusefilterchecksyntax-summary": "Verificar le syntaxe de un filtro anti-abuso.",
- "apihelp-abusefilterchecksyntax-param-filter": "Le texto complete del filtro del qual verificar le syntaxe.",
- "apihelp-abusefilterchecksyntax-example-1": "Verificar le syntaxe de un filtro valide",
- "apihelp-abusefilterchecksyntax-example-2": "Verificar le syntaxe de un filtro non valide",
- "apihelp-abusefilterevalexpression-description": "Evaluta un expression de filtro anti-abuso.",
- "apihelp-abusefilterevalexpression-summary": "Evaluta un expression de filtro anti-abuso.",
- "apihelp-abusefilterevalexpression-param-expression": "Le expression a evalutar.",
- "apihelp-abusefilterevalexpression-example-1": "Evalutar un expression simple",
- "apihelp-abusefilterunblockautopromote-description": "Permitte que un usator recipe autopromotiones a causa de un consequentia de filtro anti-abuso.",
- "apihelp-abusefilterunblockautopromote-summary": "Permitte que un usator recipe autopromotiones a causa de un consequentia de filtro anti-abuso.",
- "apihelp-abusefilterunblockautopromote-param-user": "Nomine del usator a disblocar.",
- "apihelp-abusefilterunblockautopromote-example-1": "Remover le blocada de autopromotion de [[User:Example]]",
- "apihelp-query+abusefilters-description": "Monstrar detalios del filtros anti-abuso.",
- "apihelp-query+abusefilters-summary": "Monstrar detalios del filtros anti-abuso.",
- "apihelp-query+abusefilters-param-startid": "Le ID del filtro ubi comenciar a enumerar.",
- "apihelp-query+abusefilters-param-endid": "Le ID del filtro ubi cessar de enumerar.",
- "apihelp-query+abusefilters-param-show": "Monstrar solmente filtros que satisface iste criterios.",
- "apihelp-query+abusefilters-param-limit": "Le numero maxime de filtros a listar.",
- "apihelp-query+abusefilters-param-prop": "Qual proprietates obtener.",
- "apihelp-query+abusefilters-example-1": "Listar le filtros public active",
- "apihelp-query+abusefilters-example-2": "Monstrar alcun detalios sur filtros",
- "apihelp-query+abuselog-description": "Monstrar eventos detegite per un del filtros anti-abuso",
- "apihelp-query+abuselog-summary": "Monstrar eventos detegite per un del filtros anti-abuso.",
- "apihelp-query+abuselog-param-start": "Le data e hora al qual comenciar a enumerar.",
- "apihelp-query+abuselog-param-end": "Le data e hora al qual cessar de enumerar.",
- "apihelp-query+abuselog-param-user": "Monstrar solmente entratas facite per un usator o adresse IP date.",
- "apihelp-query+abuselog-param-title": "Monstrar solmente entratas que occurre in un pagina date.",
- "apihelp-query+abuselog-param-filter": "Monstrar solmente entratas detegite per un ID de filtro date.",
- "apihelp-query+abuselog-param-limit": "Le numero maxime de entratas a listar.",
- "apihelp-query+abuselog-param-prop": "Qual proprietates obtener.",
- "apihelp-query+abuselog-example-1": "Monstrar entratas recente de registro",
- "apihelp-query+abuselog-example-2": "Monstrar entratas recente de registro pro [[API]]",
- "apierror-abusefilter-canttest": "Tu non ha le permission de testar le filtros anti-abuso.",
- "apierror-abusefilter-cantcheck": "Tu non ha le permission de verificar le syntaxe de filtros anti-abuso.",
- "apierror-abusefilter-nosuchlogid": "Il non ha un entrata con ID $1 in le registro de abusos.",
- "apierror-abusefilter-badsyntax": "Le filtro ha un syntaxe invalide."
+ "abusefilter-http-error": "Un error HTTP occurreva: $1."
}
diff --git a/AbuseFilter/i18n/id.json b/AbuseFilter/i18n/id.json
index 124e715b..7f6b0313 100644
--- a/AbuseFilter/i18n/id.json
+++ b/AbuseFilter/i18n/id.json
@@ -12,19 +12,20 @@
"C5st4wr6ch",
"Arifin.wijaya",
"Matma Rex",
- "Rachmat.Wahidi"
+ "Rachmat.Wahidi",
+ "Rachmat04",
+ "Hidayatsrf"
]
},
"abusefilter-desc": "Memberlakukan pemeriksaan heuristik otomatis atas kontribusi pengguna.",
"abusefilter": "Konfigurasi filter penyalahgunaan",
"abuselog": "Catatan penyalahgunaan",
"abusefilter-intro": "Selamat datang di antarmuka pengelola Filter Penyalahgunaan.\nFilter Penyalahgunaan adalah sebuah mekanisme perangkat lunak yang mengaplikasikan heuristik otomatis terhadap semua tindakan. Antarmuka ini menampilkan sebuah daftar filter yang telah ditetapkan, dan filter-filter ini dapat dimodifikasi.",
- "abusefilter-mustbeeditor": "Untuk alasan keamanan, hanya pengguna dengan hak untuk ''memodifikasi filter penyalahgunaan'' saja yang diperbolehkan menggunakan antarmuka ini.",
"abusefilter-warning": "'''Peringatan''': Tindakan ini secara otomatis telah diidentifikasi sebagai tindakan yang merusak.\nSuntingan yang tidak bermanfaat akan segera dibatalkan,\ndan suntingan yang tidak jelas serta berulang-ulang akan berakibat dengan diblokirnya akun ataupun alamat IP Anda.\nJika Anda yakin bahwa suntingan anda adalah suntingan yang bermanfaat, Anda bisa mengklik Kirim sekali lagi untuk mengkonfirmasinya.\nKeterangan singkat tentang peraturan penyalahgunaan yang berkaitan dengan tindakan Anda adalah: $1",
"abusefilter-disallowed": "Aksi ini secara otomatis telah diidentifikasi sebagai tindakan yang merusak,\ndan karenanya ditolak.\nJika Anda yakin bahwa suntingan anda adalah suntingan yang bermanfaat, silakan hubungi pengurus, dan informasikan apa yang sedang Anda lakukan.\nKeterangan singkat tentang peraturan penyalahgunaan yang berkaitan dengan aksi Anda adalah: $1",
"abusefilter-blocked-display": "Tindakan ini secara otomatis telah diidentifikasi sebagai tindakan yang merusak,\ndan sistem telah mencegah tindakan anda tersebut.\nSebagai tambahan, untuk melindungi {{SITENAME}}, akun pengguna anda dan semua alamat IP yang terkait telah diblokir.\nJika menurut anda ini terjadi karena kesalahan, silakan hubungi pengurus.\nKeterangan singkat tentang peraturan penyalahgunaan yang berkaitan dengan tindakan anda adalah: $1",
"abusefilter-degrouped": "Tindakan ini secara otomatis telah diidentifikasi sebagai tindakan yang merusak.\nKonsekuensinya, tindakan ini telah ditolak, dan karena akun anda dianggap mencurigakan, semua hak akses anda telah dicabut.\nJika anda yakin bahwa ini adalah kesalahan, silahkan hubungi seorang birokrat guna menjelaskan tindakan anda, dan kemungkinan hak-hak anda dapat dipulihkan.\nKeterangan singkat tentang peraturan penyalahgunaan yang berkaitan dengan tindakan anda adalah: $1",
- "abusefilter-autopromote-blocked": "Tindakan ini secara otomatis telah diidentifikasi sebagai tindakan yang merusak, dan telah ditolak oleh sistem.\nSebagai tambahan, langkah keamanan yang dilakukan sistem, beberapa hak-hak istimewa yang biasanya diberikan bagi suatu akun yamg wajar telah dibatalkan dari akun anda.\nKeterangan singkat tentang peraturan penyalahgunaan yang berkaitan dengan tindakan anda adalah: $1",
+ "abusefilter-autopromote-blocked": "Tindakan ini secara otomatis telah diidentifikasi sebagai tindakan yang merusak, dan telah ditolak oleh sistem.\nSebagai tambahan, langkah keamanan yang dilakukan sistem, beberapa hak-hak istimewa yang biasanya diberikan bagi suatu akun yang wajar telah dibatalkan dari akun anda.\nKeterangan singkat tentang peraturan penyalahgunaan yang berkaitan dengan tindakan anda adalah: $1",
"abusefilter-blocker": "Filter penyalahgunaan",
"abusefilter-blockreason": "Diblokir secara otomatis oleh filter penyalahgunaan.\nKeterangan mengenai peraturan terkait: $1",
"abusefilter-degroupreason": "Hak akses telah dicabut secara otomatis oleh filter penyalahgunaan.\nKeterangan mengenai peraturan terkait: $1",
@@ -85,8 +86,6 @@
"abusefilter-log-hide-hidden": "Sembunyikan entri ini dari publik",
"abusefilter-log-hide-reason": "Alasan:",
"abusefilter-log-hide-forbidden": "Anda tidak memiliki izin untuk menyembunyikan\nentri catatan penyalahgunaan.",
- "abusefilter-logentry-suppress": "sembunyikan [[$1]]",
- "abusefilter-logentry-unsuppress": "jangan sembunyikan [[$1]]",
"logentry-abusefilter-hit": "$1 memicu $4, melakukan tindakan \"$5\" terhadap $3. Tindakan yang dilakukan: $6 ($7)",
"abusefilter-management": "Manajemen filter penyalahgunaan",
"abusefilter-list": "Semua filter",
@@ -118,7 +117,6 @@
"abusefilter-list-options-scope": "Tampilkan filter dari:",
"abusefilter-list-options-scope-local": "Wiki lokal",
"abusefilter-list-options-scope-global": "Aturan global",
- "abusefilter-list-options-disabled": "Filter yang dinon-aktifkan:",
"abusefilter-list-options-hidedisabled": "Sembunyikan filter yang dinon-aktifkan",
"abusefilter-list-options-submit": "Mutakhirkan",
"abusefilter-tools-text": "Berikut adalah beberapa peralatan yang mungkin berguna untuk merumuskan dan menguji coba filter penyalahgunaan.",
@@ -138,7 +136,6 @@
"abusefilter-edit-status-label": "Statistik:",
"abusefilter-edit-status": "Dari $1 {{PLURAL:$1|tindakan|tindakan}} terakhir, terdapat $2 ($3%) kecocokan dengan filter ini.",
"abusefilter-edit-status-profile": "Dari $1 {{PLURAL:$1|tindakan|tindakan}} terakhir, terdapat $2 ($3%) kecocokan dengan filter ini.\nSecara rata-rata, waktu yang dibutuhkan adalah $4ms dan mengkonsumsi $5 {{PLURAL:$5||}}kondisi dari batas kondisi.",
- "abusefilter-edit-throttled": "'''Peringatan''': Filter ini secara otomatis telah dinonaktifkan untuk alasan keamanan. Telah mencapai limit lebih dari $1% tindakan yang cocok.",
"abusefilter-edit-new": "Filter baru",
"abusefilter-edit-save": "Simpan filter",
"abusefilter-edit-id": "ID filter:",
@@ -157,7 +154,6 @@
"abusefilter-edit-consequences": "Tindakan yang diambil ketika mengenai sasaran",
"abusefilter-edit-action-warn": "Picu tindakan ini setelah memberikan peringatan kepada pengguna",
"abusefilter-edit-action-disallow": "Cegah pengguna melakukan tindakan yang meragukan",
- "abusefilter-edit-action-flag": "Tandai suntingan ini dalam catatan penyalahgunaan",
"abusefilter-edit-action-blockautopromote": "Cabut status konfirmasi otomatis pengguna tersebut",
"abusefilter-edit-action-degroup": "Hapus pengguna dari semua kelompok hak-hak istimewa.",
"abusefilter-edit-action-block": "Blokir pengguna dan alamat IP dari menyunting",
@@ -166,7 +162,6 @@
"abusefilter-edit-action-tag": "Tandai suntingan untuk ditinjau lagi nanti",
"abusefilter-edit-throttle-count": "Jumlah tindakan yang diizinkan:",
"abusefilter-edit-throttle-period": "Periode waktu:",
- "abusefilter-edit-throttle-seconds": "{{PLURAL:$1||}}$1 detik",
"abusefilter-edit-throttle-groups": "Kelompokkan katup menurut:\n:''(satu per baris, kombinasi dengan koma)''",
"abusefilter-edit-warn-message": "Pesan sistem yang digunakan untuk memberi peringatan:",
"abusefilter-edit-warn-other": "Pesan lainnya",
@@ -253,19 +248,18 @@
"abusefilter-edit-builder-vars-oldsize": "Ukuran halaman lama",
"abusefilter-edit-builder-vars-removedlines": "Garis dihilangkan dalam penyunting",
"abusefilter-edit-builder-vars-summary": "Ringkasan suntingan/alasan",
- "abusefilter-edit-builder-vars-article-id": "ID Halaman",
- "abusefilter-edit-builder-vars-article-ns": "Ruangnama halaman",
- "abusefilter-edit-builder-vars-article-text": "Judul Halaman (tanpa ruangnama)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Judul halaman lengkap",
- "abusefilter-edit-builder-vars-article-views": "Kunjungan halaman",
+ "abusefilter-edit-builder-vars-page-id": "ID Halaman",
+ "abusefilter-edit-builder-vars-page-ns": "Ruangnama halaman",
+ "abusefilter-edit-builder-vars-page-title": "Judul Halaman (tanpa ruangnama)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Judul halaman lengkap",
"abusefilter-edit-builder-vars-movedfrom-id": "ID Halaman dari pemindahan halaman sumber",
"abusefilter-edit-builder-vars-movedfrom-ns": "Ruangnama dari pemindahan halaman sumber",
- "abusefilter-edit-builder-vars-movedfrom-text": "Judul dari pemindahan halaman sumber",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Judul lengkap dari pemindahan halaman sumber",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Judul dari pemindahan halaman sumber",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Judul lengkap dari pemindahan halaman sumber",
"abusefilter-edit-builder-vars-movedto-id": "ID halaman dari pemindahan halaman tujuan",
"abusefilter-edit-builder-vars-movedto-ns": "Ruangnama dari pemindahan halaman tujuan",
- "abusefilter-edit-builder-vars-movedto-text": "Judul dari pemindahan halaman tujuan",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Judul lengkap dari pemindahan halaman tujuan",
+ "abusefilter-edit-builder-vars-movedto-title": "Judul dari pemindahan halaman tujuan",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Judul lengkap dari pemindahan halaman tujuan",
"abusefilter-edit-builder-vars-user-editcount": "Jumlah suntingan pengguna",
"abusefilter-edit-builder-vars-user-age": "Umur pengguna",
"abusefilter-edit-builder-vars-user-name": "Nama pengguna",
@@ -328,7 +322,7 @@
"abusefilter-exception-regexfailure": "Kesalahan pada ekspresi biasa \"$3\" pada karakter $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Penyampingan ilegal variabel terpasang \"$2\" pada karakter $1.",
"abusefilter-exception-outofbounds": "Meminta butir daftar $2 yang tak ada (jumlah butir = $3) pada karakter $1.",
- "abusefilter-exception-notlist": "Permintaan butir Larik dari bukan-larik pada karekter $1.",
+ "abusefilter-exception-notarray": "Permintaan butir Larik dari bukan-larik pada karekter $1.",
"abusefilter-action-tag": "Penanda",
"abusefilter-action-throttle": "Batasan",
"abusefilter-action-warn": "Waspada",
@@ -389,7 +383,6 @@
"abusefilter-topnav-import": "Impor penyaring",
"abusefilter-log-name": "Catatan penyaringan penyalahgunaan",
"abusefilter-log-header": "Log ini memberikan ringkasan perubahan yang dilakukan terhadap filter.\nUntuk detail lengkap, lihat [[Special:AbuseFilter/history|daftar]] perubahan filter terbaru.",
- "abusefilter-log-entry-modify": "pengubahan $1 ($2)",
"abusefilter-log-noresults": "Tidak ada hasil",
"abusefilter-diff-title": "Perbedaan versi",
"abusefilter-diff-item": "butir",
diff --git a/AbuseFilter/i18n/ig.json b/AbuseFilter/i18n/ig.json
index 51ed5b61..83130660 100644
--- a/AbuseFilter/i18n/ig.json
+++ b/AbuseFilter/i18n/ig.json
@@ -4,9 +4,9 @@
"Ukabia"
]
},
- "abusefilter-log-search-user": "Ọ'bànifé:",
+ "abusefilter-log-search-user": "Òjìème:",
"abusefilter-log-search-title": "Ishi:",
- "abusefilter-log-search-submit": "Chọwa",
+ "abusefilter-log-search-submit": "Tùwe",
"abusefilter-log-noactions": "efù",
"abusefilter-log-hide-reason": "Mgbághapụtà:",
"abusefilter-list-edit": "Mèzi",
@@ -16,7 +16,7 @@
"abusefilter-unhidden": "Ñkịtị",
"abusefilter-deleted": "Kàchàrà",
"abusefilter-status-global": "Ùwà nílé",
- "abusefilter-tools-reautoconfirm-user": "Ọ'bànifé:",
+ "abusefilter-tools-reautoconfirm-user": "Òjìème:",
"abusefilter-edit-new": "Nzàtá ohürù",
"abusefilter-edit-save": "Domá nzàtá",
"abusefilter-edit-flags": "Ọ́kọ̀lọ́tọ:",
@@ -29,23 +29,23 @@
"abusefilter-edit-builder-op-bool-or": "Ma (|)",
"abusefilter-edit-builder-group-misc": "Mchétá-ma-mchétàghịm",
"abusefilter-edit-builder-vars-action": "Umẹ́",
- "abusefilter-edit-builder-vars-article-id": "ID Ihü",
+ "abusefilter-edit-builder-vars-page-id": "ID Ihü",
"abusefilter-edit-builder-vars-user-age": "Òtù ọ'bànifé nke kàrà",
"abusefilter-history-hidden": "Zonarịrị",
"abusefilter-history-global": "Ùwà nílé",
"abusefilter-history-timestamp": "Ógẹ",
- "abusefilter-history-user": "Ọ'bànifé",
+ "abusefilter-history-user": "Òjìème",
"abusefilter-history-flags": "Ọ́kọ̀lọ́tọ",
"abusefilter-history-actions": "Mmèmé",
"abusefilter-history-deleted": "Kàchàrà",
"abusefilter-history-filterid": "Nzàtà",
- "abusefilter-history-select-user": "Ọ'bànifé:",
+ "abusefilter-history-select-user": "Òjìème:",
"abusefilter-history-diff": "Ihe gbanwere",
"abusefilter-action-tag": "Ọdụ",
"abusefilter-action-warn": "Dọ́ńtị̀",
- "abusefilter-examine-user": "Ọ'bànifé:",
+ "abusefilter-examine-user": "Òjìème:",
"abusefilter-examine-title": "Íshí ihü:",
- "abusefilter-examine-submit": "Chọwa",
+ "abusefilter-examine-submit": "Tùwe",
"abusefilter-topnav-home": "Ụ́lọ̀",
"abusefilter-diff-item": "Ihnye"
}
diff --git a/AbuseFilter/i18n/ilo.json b/AbuseFilter/i18n/ilo.json
index c96a954f..661f1447 100644
--- a/AbuseFilter/i18n/ilo.json
+++ b/AbuseFilter/i18n/ilo.json
@@ -9,7 +9,6 @@
"abusefilter": "Kompigurasion ti sagat ti panagabuso",
"abuselog": "Listaan ti panagabuso",
"abusefilter-intro": "Naragsak nga isasangbay ditoy interface ti pangasiwaan ti Sagat ti Panagabuso.\nTi Sagat ti Panagabuso ket automatiko a mekanismo ti sopwer nga agikabil ti automatiko a panagsolbar ti amin a parikut kadagiti amin a tignay.\nDaytoy nga interface ket ipakitana dagiti listaan dagiti naipalawag a sagat, ken mangipalubos kaniada a mabaliwan.",
- "abusefilter-mustbeeditor": "Para kadagiti rason ti seguridad, dagiti laeng agus-usar nga addaan iti karbengan a mangbaliw kadagiti sagat ti panagabuso ti makausar iti daytoy nga interface.",
"abusefilter-warning": "'''Ballaag''': Daytoy a tignay ket automatiko a nainaganan a makadangran.\nDagiti saan a nasayaat a panagurnos ket napardasto a maisubli,\nken dagiti dakes unay wenno naulit a dakes a panagurnos ket pakaresultaan ti pannakaserra ti pakabilangam wenno ti IP nga adresmo.\nNo namatmatika a daytoy a tignay ket nasayaat, mabalinmo nga ited manen tapno mapasingkedam.\nTi ababa a deskripsion iti alagaden ti panagabuso nga inaramidmo a naipada ket: $1",
"abusefilter-disallowed": "Daytoy a tignay ket automatiko a nainaganan a makadangran, ken iti kasta saan a maipalubos.\nNo namatmatika a ti tignaymo ket nasayaat, pangngaasi nga ipakaammom iti administrador no ania ti padpadasem nga ar-aramiden.\nTi ababa a deskripsion iti alagaden ti panagabuso nga inaramidmo a naipada ket: $1",
"abusefilter-blocked-display": "Daytoy a tignay ket automatiko a nainaganan a makadangran,\nken mapawilanka a mangtungpal iti daytoy.\nKen iti pay maipatinayon, tapno masalakniban ti {{SITENAME}}, ti pakabilangam ken amin dagiti nairaman nga IP nga adresmo ket naserraan ti panagurnos.\nNo daytoy ket biddut a napasamak, pangngaasi a kontaken ti administrador.\nTi ababa a deskripsion iti alagaden ti pangabuso nga inaramidmo a naipada ket: $1",
@@ -59,7 +58,7 @@
"abusefilter-log-details-var": "Sabsabali a kita",
"abusefilter-log-details-val": "Pateg",
"abusefilter-log-details-vars": "Dagiti parametro ti tignay",
- "abusefilter-log-details-private": "Pribado a datos",
+ "abusefilter-log-details-private": "Dagiti salasay ti pribado a listaan",
"abusefilter-log-details-ip": "Tinaudan nga adres ti IP",
"abusefilter-log-noactions": "awan",
"abusefilter-log-details-diff": "Dagiti binaliwan a naaramid ti inurnos",
@@ -75,8 +74,6 @@
"abusefilter-log-hide-hidden": "Ilemmeng daytoy a naikabil manipud iti publiko a panagkita",
"abusefilter-log-hide-reason": "Rason:",
"abusefilter-log-hide-forbidden": "Awan ti pammalubosmo nga agilemmeng kadagiti naikabil iti listaan ti panagabuso.",
- "abusefilter-logentry-suppress": "ilemmeng \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "ipakita \"[[$1]]\"",
"logentry-abusefilter-hit": "Nakalbit ni $1 ti $4, a nagar-aramid ti tignay iti \"$5\" iti $3. Dagiti naaramid a tignay: $6 ($7)",
"abusefilter-management": "Panangasiwa ti sagat ti panagabuso",
"abusefilter-list": "Amin a sagat",
@@ -109,7 +106,6 @@
"abusefilter-list-options-scope-local": "Dagiti lokal nga alagaden laeng",
"abusefilter-list-options-scope-global": "Dagiti global nga alagaden laeng",
"abusefilter-list-options-scope-all": "Dagiti lokal ken global nga alagaden laeng",
- "abusefilter-list-options-disabled": "Dagiti nabaldado a sagat:",
"abusefilter-list-options-hidedisabled": "Ilemmeng dagiti nabaldado a sagat",
"abusefilter-list-options-submit": "Pabaruen",
"abusefilter-tools-text": "Adda ditoy dagiti ramit a naserbi iti panagtempla ken panagkita ti panangtarimaan ti sagat ti panagabuso.",
@@ -129,11 +125,11 @@
"abusefilter-edit-status-label": "Estadistika:",
"abusefilter-edit-status": "Iti naudi a $1 a {{PLURAL:$1|tignay|tigtignay}}, daytoy a sagat ket nakaipada iti $2 ($3%) .",
"abusefilter-edit-status-profile": "Iti naudi a $1 a {{PLURAL:$1|tignay|tigtignay}}, daytoy a sagat ket nakaipada iti $2 ($3%) .\nIti pagtengngaan, ti kabayag a panagandarna ket $4 ms, ken mangibus iti $5 a {{PLURAL:$5|kasasaad|kaskasaad}} iti patingga ti kasasaad.",
- "abusefilter-edit-throttled": "'''Ballaag''': Ti sagat ket automatiko a nabaldado a kas pamay-an ti seguridad.\nNaabotanna ti patingga iti panagipada ti ad-adu ngem $1% kadagiti tignay.",
"abusefilter-edit-new": "Baro a sagat",
"abusefilter-edit-save": "Idulin ti sagat",
"abusefilter-edit-id": "ID ti sagat:",
"abusefilter-edit-description": "Deskripsion\n:''(makita iti publiko)''",
+ "abusefilter-edit-field-description": "deskripsion",
"abusefilter-edit-group": "Grupo ti sagat:",
"abusefilter-edit-flags": "Dagiti wagayway:",
"abusefilter-edit-enabled": "Pakabaelan daytoy a sagat",
@@ -141,6 +137,7 @@
"abusefilter-edit-hidden": "Ilemmeng dagiti salaysay iti daytoy a sagat manipud ti publiko a panagkita",
"abusefilter-edit-global": "Global a sagat",
"abusefilter-edit-rules": "Dagiti kasasaad:",
+ "abusefilter-edit-field-conditions": "dagiti kasasaad",
"abusefilter-edit-notes": "Dagiti nota:",
"abusefilter-edit-lastmod": "Kinaudi a nabaliwan ti sagat:",
"abusefilter-edit-lastmod-text": "$1 babaen ni $2",
@@ -156,7 +153,6 @@
"abusefilter-edit-action-tag": "Ikkan ti etiketa ti inurnos para iti adu pay a panagrepaso",
"abusefilter-edit-throttle-count": "Bilang dagiti ipalubos a tignay:",
"abusefilter-edit-throttle-period": "Paset ti panawen:",
- "abusefilter-edit-throttle-seconds": "$1 a {{PLURAL:$1|segundo|segsegundo}}",
"abusefilter-edit-throttle-groups": "Pinabuntog a grupo babaen ti:\n:''(maysa tunggal maysa a linia, iraman nga addaan ti koma)''",
"abusefilter-edit-warn-message": "Mensahe ti sistema nga usaren para iti ballaag:",
"abusefilter-edit-warn-other": "Sabali pay a mensahe",
@@ -170,6 +166,7 @@
"abusefilter-edit-done-subtitle": "Naurnos ti sagat",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Dagiti binalbaliwam]] iti [[Special:AbuseFilter/$1|sagat $3]] ket naidulinen.",
"abusefilter-edit-badsyntax": "Adda biddut ti sintaksis iti ninaganam a sagat.\nTi naiparuar manipud iti parser ket: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Nasken dagiti sumaganad a pagikabilan ken nasken a mapunno: $1",
"abusefilter-edit-restricted": "Saanmo a maurnos daytoy a sagat, ngamin ket naglaon iti maysa wenno dagiti ad-adu a nagawidan a tignay.\nPangngaasi a damagen ti agar-aramat nga addaan iti pammalubos nga agnayon kadagiti nagawidan a tignay tapno baliwanda para kaniam.",
"abusefilter-edit-viewhistory": "Kitaen ti pakasaritaan iti daytoy a sagat",
"abusefilter-edit-history": "Pakasaritaan:",
@@ -194,8 +191,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Modulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Bileg (**)",
"abusefilter-edit-builder-group-op-comparison": "Dagiti panangipada ti panagipatpataray",
- "abusefilter-edit-builder-op-comparison-equal": "Ag-dagup iti (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Saan nga ag-dagup iti (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Ti pateg ket agdagup iti (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Ti pateg ken kita ket agdagup iti (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Ti pateg ket saan a agdagup iti (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Ti pateg ken kita ket saan nga agdagup iti (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Basbassit ngem (<)",
"abusefilter-edit-builder-op-comparison-gt": "Ad-adu ngem (>)",
"abusefilter-edit-builder-op-comparison-lte": "Basbassit ngen wenno ag-dagup iti (<=)",
@@ -243,19 +242,18 @@
"abusefilter-edit-builder-vars-oldsize": "Daan a kadakkel ti panid",
"abusefilter-edit-builder-vars-removedlines": "Dagiti linia a naikkat iti inurnos",
"abusefilter-edit-builder-vars-summary": "Pakapukpukan ti inurnos/rason",
- "abusefilter-edit-builder-vars-article-id": "ID ti panid",
- "abusefilter-edit-builder-vars-article-ns": "Nagan ti espasio ti panid",
- "abusefilter-edit-builder-vars-article-text": "Titulo ti panid (nga awan ti nagan ti espasio)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Napno a titulo ti panid",
- "abusefilter-edit-builder-vars-article-views": "Dagiti panagkitkita iti panid",
+ "abusefilter-edit-builder-vars-page-id": "ID ti panid",
+ "abusefilter-edit-builder-vars-page-ns": "Nagan ti espasio ti panid",
+ "abusefilter-edit-builder-vars-page-title": "Titulo ti panid (nga awan ti nagan ti espasio)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Napno a titulo ti panid",
"abusefilter-edit-builder-vars-movedfrom-id": "ID ti panid iti naiyalis a taudan ti panid",
"abusefilter-edit-builder-vars-movedfrom-ns": "Nagan ti espasio iti iyalis a taudan ti panid",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titulo iti iyalis a taudan ti panid",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Napno a titulo iti iyalis a taudan ti panid",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titulo iti iyalis a taudan ti panid",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Napno a titulo iti iyalis a taudan ti panid",
"abusefilter-edit-builder-vars-movedto-id": "ID ti panid iti iyalis a papanan ti panid",
"abusefilter-edit-builder-vars-movedto-ns": "Nagan ti espasio ti panid iti iyalis a papanan ti panid",
- "abusefilter-edit-builder-vars-movedto-text": "Titulo iti iyalis a papanan ti panid",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Napno a titulo iti iyalis a papanan ti panid",
+ "abusefilter-edit-builder-vars-movedto-title": "Titulo iti iyalis a papanan ti panid",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Napno a titulo iti iyalis a papanan ti panid",
"abusefilter-edit-builder-vars-user-editcount": "Bilang ti inurnos ti agar-aramat",
"abusefilter-edit-builder-vars-user-age": "Edad ti pakabilangan ti agar-aramat",
"abusefilter-edit-builder-vars-user-name": "Nagan ti pakabilangan ti agar-aramat",
@@ -325,7 +323,7 @@
"abusefilter-exception-regexfailure": "Biddut iti kadawyan a panangiyebkas ti \"$3\" iti karakter ti $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Kalilis ti panagituon iti kinasigud a sabsabali ti \"$2\" iti karakter ti $1.",
"abusefilter-exception-outofbounds": "Agkidkidaw ti awan a banag iti listaan ti $2 (kadakkel ti listaan = $3) iti karakter ti $1.",
- "abusefilter-exception-notlist": "Agkidkidaw kadagiti rimpuok a banag iti saan a rimpuok iti karakter ti $1.",
+ "abusefilter-exception-notarray": "Agkidkidaw kadagiti rimpuok a banag iti saan a rimpuok iti karakter ti $1.",
"abusefilter-action-tag": "Etiketa",
"abusefilter-action-throttle": "Pabuntogen",
"abusefilter-action-warn": "Pakdaaran",
@@ -341,7 +339,7 @@
"abusefilter-revert-periodstart": "Panawen a panagrugi:",
"abusefilter-revert-periodend": "Panawen a panaglippas:",
"abusefilter-revert-search": "Agpili kadagiti tignay",
- "abusefilter-revert-filter": "Sagat:",
+ "abusefilter-revert-filter": "ID ti Sagat:",
"abusefilter-revert-preview-intro": "Dita baba ket dagiti tignay nga inaramid ti sagat ti panagabuso a masublinto babaen ti daytoy a tignay.\nPangngaasi nga agan-annad a kitaen dagiti, ken pinduten ti \"{{int:abusefilter-revert-confirm}}\" tapno mapasingkedam ti pinilim.",
"abusefilter-revert-confirm": "Pasingkedan",
"abusefilter-revert-success": "Insublim amin dagiti tignay nga inaramid babaen ti sagat ti panagabuso gapu ti [[Special:AbuseFilter/$1|sagat ti $2]].",
@@ -386,7 +384,6 @@
"abusefilter-topnav-import": "Agala iti sagat",
"abusefilter-log-name": "Listaan ti Sagat ti Panagabuso",
"abusefilter-log-header": "Daytoy a listaan ket agiparang ti pakapukpukan dagiti binaliwan nga inaramid para kadagiti sagat.\nPara kadagiti napno a salaysay, kitaen [[Special:AbuseFilter/history|ti listaan]] dagiti kaudian panagbaliw iti sagat.",
- "abusefilter-log-entry-modify": "binaliwan ti $1 ($2)",
"abusefilter-log-noresults": "Awan dagiti resulta",
"abusefilter-diff-title": "Dagiti paggiddiatan a nagbaetan dagiti bersion",
"abusefilter-diff-item": "Banag",
@@ -400,39 +397,5 @@
"abusefilter-import-intro": "Mabalinmo nga usaren daytoy nga interface tapno makaala kadagiti sagat manipud kadagiti sabali a wiki.\nIti nataudan a wiki, pinduten ti \"{{int:abusefilter-edit-export}}\" babaen ti \"{{int:abusefilter-edit-tools}}\" iti pagurnosan ti interface.\nKopiaen manipud iti kahon ti teksto nga agparang, ken ipegket iti daytoy a kahon ti teksto, kalpasanna pinduten ti \"{{int:abusefilter-import-submit}}\".",
"abusefilter-import-submit": "Agala iti datos",
"abusefilter-group-default": "Kasisigud",
- "abusefilter-http-error": "Adda napasamak a biddut ti HTTP: $1.",
- "apihelp-abusefiltercheckmatch-description": "Kitaen no ti maysa a sagat ti panagabuso ket maipada iti agasmang iti pagdumadumaan, pasamak ti nailista a Sagat ti Panagabuso.\n\nTi vars, rcid wenno logid ket nasken nupay kasta mabalin laeng ti agusar iti maysa.",
- "apihelp-abusefiltercheckmatch-param-filter": "Ti napno a teksto ti sagat a kitaen para iti panagipada.",
- "apihelp-abusefiltercheckmatch-param-vars": "Ti naikodigo a rimpuok ti panagdumaduma ti JSON a pangisubokan.",
- "apihelp-abusefiltercheckmatch-param-rcid": "Ti kinaudi a panagbaliw ti ID a pangisubokan.",
- "apihelp-abusefiltercheckmatch-param-logid": "Ti listaan ti ID ti sagat ti panagabuso a pangisubokan.",
- "apihelp-abusefiltercheckmatch-example-1": "Subokan no ti kinaudi a panagbaliw ti ID 15 ket maipada iti nalaka a sagat",
- "apihelp-abusefilterchecksyntax-description": "Kitaen ti sintaksis ti sagat ti AbuseFilter.",
- "apihelp-abusefilterchecksyntax-param-filter": "Ti napno a teksto ti sagat a pagkitaan ti sintaksis.",
- "apihelp-abusefilterchecksyntax-example-1": "Kitaen ti sintaksis ti umiso a sagat",
- "apihelp-abusefilterchecksyntax-example-2": "Kitaen ti sintaksis ti saan nga umiso a sagat",
- "apihelp-abusefilterevalexpression-description": "Pateganna ti panangiyebkas ti AbuseFilter.",
- "apihelp-abusefilterevalexpression-param-expression": "Ti panangiyebkas a mapategan.",
- "apihelp-abusefilterevalexpression-example-1": "Pategan ti nalaka a panangiyebkas",
- "apihelp-abusefilterunblockautopromote-description": "Mangikkat ti serra ti agar-aramt manipud iti panagawat kadagiti automatiko a promosion gapu ti pagbanagan ti sagat ti panagabuso.",
- "apihelp-abusefilterunblockautopromote-param-user": "Nagan ti agar-aramat a kayatmo nga ikkaten ti serrana.",
- "apihelp-abusefilterunblockautopromote-example-1": "Ikkaten ti serra ti automatiko a promosion ni [[User:Example]]",
- "apihelp-query+abusefilters-description": "Ipakita dagiti salaysay dagiti sagat ti panagabuso",
- "apihelp-query+abusefilters-param-startid": "Ti ID ti sagat a pangirugian iti panangibilang.",
- "apihelp-query+abusefilters-param-endid": "Ti ID ti sagat a pagsardengan iti panangibilang.",
- "apihelp-query+abusefilters-param-show": "Ipakita laeng dagiti sagat a makaabot kadagitoy a kriteria.",
- "apihelp-query+abusefilters-param-limit": "Ti kaadu dagiti bilang dagiti sagat a mailista.",
- "apihelp-query+abusefilters-param-prop": "Ti maala a tagtagikua.",
- "apihelp-query+abusefilters-example-1": "Ilista dagiti napakabaelan a publiko a sagat",
- "apihelp-query+abusefilters-example-2": "Ipakita salaysay a maipanggep kadagiti sagat",
- "apihelp-query+abuselog-description": "Ipakita dagiti pasamak a naala babaen ti maysa kadagitoy a sagat ti panagabuso",
- "apihelp-query+abuselog-param-start": "Ti oras ken petsa a pangirugian iti panangibilang.",
- "apihelp-query+abuselog-param-end": "Ti oras ken petsa a pagsardengan iti panangibilang.",
- "apihelp-query+abuselog-param-user": "Ipakita laeng dagiti naikabil nga inaramid babaen ti naited nga agar-aramat wenno adres ti IP.",
- "apihelp-query+abuselog-param-title": "Ipakita laeng dagiti naikabil a napasamak iti naited a panid.",
- "apihelp-query+abuselog-param-filter": "Ipakita laeng dagiti naikabil a naala babaen ti naited nga ID ti sagat.",
- "apihelp-query+abuselog-param-limit": "Ti kaadu a bilang dagiti naikabil iti listaan.",
- "apihelp-query+abuselog-param-prop": "Ti maala a tagtagikua.",
- "apihelp-query+abuselog-example-1": "Ipakita ti kinaudi a naikabkabil iti listaan",
- "apihelp-query+abuselog-example-2": "Ipakita ti kinaudi a naikabkabil iti listaan para iti [[API]]"
+ "abusefilter-http-error": "Adda napasamak a biddut ti HTTP: $1."
}
diff --git a/AbuseFilter/i18n/inh.json b/AbuseFilter/i18n/inh.json
index b3db598d..d5c215d2 100644
--- a/AbuseFilter/i18n/inh.json
+++ b/AbuseFilter/i18n/inh.json
@@ -7,27 +7,35 @@
"Adam-Yourist"
]
},
+ "right-abusefilter-view": "боарамал сов леладеш долча хIамай фильтрага хьажар",
+ "right-abusefilter-log": "боарамал сов леладеш долча хIамай тептарага хьажар",
+ "right-abusefilter-view-private": "боарамал сов леладеш долча хIамай къайла фильтрага хьажар",
+ "action-abusefilter-view": "боарамал сов леладеш долча хIамай фильтрага хьажар",
+ "action-abusefilter-log": "боарамал сов леладеш долча хIамай тептарага хьажар",
"abusefilter-log-search-user": "Доакъашхо:",
"abusefilter-log-search-filter": "Фильтрай ID (урагIа така хьаракаца йикъа):",
- "abusefilter-log-search-submit": "Хьалáха",
- "abusefilter-log-detailedentry-local": "фильтр $1",
+ "abusefilter-log-search-submit": "Хьалаха",
+ "abusefilter-log-detailedentry-local": "луттарг $1",
"abusefilter-log-hide-reason": "Бахьан:",
"abusefilter-list-edit": "Нийсде",
"abusefilter-tools-reautoconfirm-user": "Доакъашхо:",
"abusefilter-edit-flags": "Байракхаш:",
"abusefilter-edit-history": "Истори:",
- "abusefilter-edit-tools": "ГӀирсаш:",
+ "abusefilter-edit-tools": "Кечалаш:",
"abusefilter-edit-builder-op-arithmetic-pow": "ЛагӀа (**)",
- "abusefilter-edit-builder-vars-article-id": "ОагIон ID",
+ "abusefilter-edit-builder-vars-page-id": "ОагIон ID",
"abusefilter-history-hidden": "къайла",
"abusefilter-history-global": "Глобальни",
"abusefilter-history-timestamp": "Ха",
"abusefilter-history-user": "Доакъашхо",
"abusefilter-history-flags": "Байракхаш",
+ "abusefilter-history-filterid": "Луттарг",
"abusefilter-history-select-user": "Доакъашхо:",
"abusefilter-history-diff": "Хувцамаш",
"abusefilter-action-tag": "Хьисап",
- "abusefilter-examine-user": "Доакъашхо",
+ "abusefilter-examine-user": "Доакъашхо:",
"abusefilter-examine-title": "ОагIон цIи:",
- "abusefilter-examine-submit": "Хьалáха"
+ "abusefilter-examine-submit": "Хьалáха",
+ "abusefilter-diff-info": "Кертера дараш",
+ "abusefilter-group-default": "Юххьанцара хиннача тайпара"
}
diff --git a/AbuseFilter/i18n/io.json b/AbuseFilter/i18n/io.json
index 46167b4e..31539b6a 100644
--- a/AbuseFilter/i18n/io.json
+++ b/AbuseFilter/i18n/io.json
@@ -3,36 +3,67 @@
"authors": [
"Malafaya",
"Robin van der Vliet",
- "Lakaoso"
+ "Lakaoso",
+ "Joao Xavier"
]
},
+ "abusefilter-desc": "Aplikas automatala heuristiko a la redakturi",
+ "abusefilter": "Figuro dil filtrilo pri misuzo",
+ "abuselog": "Protokolo pri misuzo",
+ "abusefilter-intro": "Bonveno a la kontrol interfacio dil filtrilo di misuzo. La filtrilo di misuzo esas automatala mekanismo di softwaro qua aplikas automatala heuristiko ad omna agadi.\n\nIca interfacio* montras listo pri definita filtrili, e permisas modifikar li.",
+ "right-abusefilter-modify": "Modifikar filtrili pri misuzo",
+ "right-abusefilter-view": "Vidar filtrili di misuzo",
+ "action-abusefilter-log-detail": "Videz detaloza registri di informi pri misuzo",
+ "abusefilter-log-summary": "Ica protokolo montras listo pri omna agadi kaptita dal filtrili.",
+ "abusefilter-log-search": "Serchez la protokolo pri misuzo",
"abusefilter-log-search-user": "Uzero:",
+ "abusefilter-log-search-filter": "Identigo di filtrili (separita per vertikala streki):",
"abusefilter-log-search-title": "Titulo:",
"abusefilter-log-search-submit": "Serchez",
"abusefilter-log-noactions": "nula",
+ "abusefilter-log-linkoncontribs": "Protokolo pri misuzo",
+ "abusefilter-log-linkoncontribs-text": "Registro pri misuzi da {{GENDER:$1|ica uzero}}",
"abusefilter-log-hide-reason": "Motivo:",
"abusefilter-list": "Omna filtrili",
"abusefilter-list-status": "Stando",
"abusefilter-list-edit": "Redaktar",
+ "abusefilter-list-lastmodified": "Lasta modifikuro",
"abusefilter-hidden": "Privata",
"abusefilter-unhidden": "Publika",
"abusefilter-new": "Krear nova filtrilo",
"abusefilter-list-options": "Selekti",
"abusefilter-list-options-deleted-only": "Montrar nur filtrili efacita",
+ "abusefilter-list-options-scope-local": "Nur lokala reguli",
"abusefilter-tools-reautoconfirm-user": "Uzero:",
"abusefilter-edit-status-label": "Statistiko:",
"abusefilter-edit-new": "Nova filtrilo",
"abusefilter-edit-save": "Registragar filtrilo",
"abusefilter-edit-rules": "Kondicioni:",
"abusefilter-edit-lastmod-text": "$1 da $2",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekundo|sekundi}}",
"abusefilter-edit-warn-other": "Altra mesajo",
"abusefilter-edit-done-subtitle": "La filtrilo redaktesas",
"abusefilter-edit-history": "Versionaro:",
+ "abusefilter-edit-check": "Verifikar sintaxo",
"abusefilter-edit-tools": "Utensili:",
+ "abusefilter-edit-builder-select": "Indikez selekto por adjuntar a la kursoro",
"abusefilter-edit-builder-op-arithmetic-addition": "Adiciono (+)",
"abusefilter-edit-builder-op-arithmetic-subtraction": "Sustraciono (-)",
"abusefilter-edit-builder-op-arithmetic-divide": "Divido (/)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Diferanta de (!=)",
+ "abusefilter-edit-builder-op-comparison-lt": "Min kam (<)",
+ "abusefilter-edit-builder-op-comparison-lte": "Min kam od egal ad (<=)",
+ "abusefilter-edit-builder-op-comparison-gte": "Plu granda od egala ad (>=)",
+ "abusefilter-edit-builder-op-bool-not": "Ne (logika NOT) (!)",
+ "abusefilter-edit-builder-op-bool-and": "E (logika AND) (&)",
+ "abusefilter-edit-builder-op-bool-or": "O (Logika 'OR') (|)",
+ "abusefilter-edit-builder-funcs-ccnorm": "Normaligar konfundebla signi (ccnorm)",
+ "abusefilter-edit-builder-funcs-specialratio": "Specala signi / omna signi (specialratio)",
+ "abusefilter-edit-builder-vars-newsize": "Nova grandeso di la pagino",
+ "abusefilter-edit-builder-vars-oldsize": "Antea grandeso (en bicoki*) di la pagino",
+ "abusefilter-edit-builder-vars-recent-contributors": "Lasta 10 uzeri qui redaktis la pagino",
+ "abusefilter-edit-builder-vars-new-text": "Nova pagino di Wikitexto, pos la redakto",
+ "abusefilter-edit-builder-vars-new-pst": "Nova Wikitexto di la pagino, modifikita ante konservo",
+ "abusefilter-filter-log": "Recenta modifiki en la filtrili",
"abusefilter-history-foruser": "Chanji da $1",
"abusefilter-history-global": "Globala",
"abusefilter-history-timestamp": "Tempo",
@@ -42,13 +73,29 @@
"abusefilter-history-filterid": "Filtrilo",
"abusefilter-history-select-user": "Uzero:",
"abusefilter-history-diff": "Chanji",
+ "abusefilter-action-tag": "Etiketo",
"abusefilter-action-degroup": "Forigar ek grupi",
"abusefilter-revert-filter": "Filtrilo:",
+ "abusefilter-test": "Probar filtrilo kontre antea redakturi",
+ "abusefilter-test-intro": "Ica pagino permisas vu probar filtrilo kontre l'antea $1 {{PLURAL:$1|modifiko|modifiki}} en la buxo adinfre.\nPor charjar existanta filtrilo, skribez la nomo dil filtrilo en la buxo infre la redakto-buxo, e pose kliktez la butono \"{{int:abusefilter-test-load}}\".",
+ "abusefilter-test-legend": "Probo di filtrili",
+ "abusefilter-test-load-filter": "Charjar filtrilo kun protokolo (ID):",
"abusefilter-test-submit": "Probez",
+ "abusefilter-test-load": "Charjez",
"abusefilter-test-user": "Chanji per uzero:",
+ "abusefilter-test-period-start": "Modifiki facita pos:",
+ "abusefilter-test-period-end": "Modifiki facita ante:",
+ "abusefilter-test-page": "Modifiki facita en la pagino:",
+ "abusefilter-test-shownegative": "Montrez chanji qui esas diferanta de la filtrilo",
"abusefilter-examine-user": "Uzero:",
"abusefilter-examine-title": "titulo di pagino:",
"abusefilter-examine-submit": "Serchez",
"abusefilter-examine-test-button": "Probez filtrilo",
+ "abusefilter-topnav-test": "Probar grupo",
+ "abusefilter-topnav-examine": "Vidar antea redakti",
+ "abusefilter-topnav-log": "Protokolo ('log') pri misuzo",
+ "abusefilter-topnav-tools": "Utensili por 'debug'",
+ "abusefilter-topnav-import": "Importar filtrilo",
+ "abusefilter-log-header": "Ca protokolo ('log') montras rezumo di modifikuri en la filtrili.\nPor plusa detali, videz [[Special:AbuseFilter/history|la listo di recenta chanji en la filtrili]].",
"abusefilter-diff-version": "Versiono ye $1 {{GENDER:$3|da}} $2"
}
diff --git a/AbuseFilter/i18n/is.json b/AbuseFilter/i18n/is.json
index e09d5348..b88d7d01 100644
--- a/AbuseFilter/i18n/is.json
+++ b/AbuseFilter/i18n/is.json
@@ -4,14 +4,14 @@
"S.Örvarr.S",
"Snævar",
"Matma Rex",
- "Sveinn í Felli"
+ "Sveinn í Felli",
+ "Maxí"
]
},
"abusefilter-desc": "Beitir sjálfvirkri brjóstvitsfræði á breytingar.",
"abusefilter": "Stillingar misnotkunar síunnar",
"abuselog": "Misnotkunarskrá",
"abusefilter-intro": "Velkominn í viðmót Misnotkunar síunnar.\nSían er sjálfvirkt tæki sem gerir sjálfvirkar brjóstvitsfræði athuganir á allar breytingar.\nÞetta viðmót sýnir lista yfir skilgreindar síur og leyfir breytingar á þeim.",
- "abusefilter-mustbeeditor": "Vegna öryggisástæðna, geta eingöngu notendur með réttindi til þess að breyta þessum misnotkunar síum notað þetta viðmót.",
"abusefilter-warning": "'''Viðvörun:''' Þessi aðgerð hefur sjálfvirkt verið merkt sem skaðleg.\nSkaðlegar aðgerðir verða snögglega teknar til baka,\nog svívirðilegar eða síendurteknar breytingar leiða til banns á notenda eða vistfangi þínu.\nEf þú telur að þessi aðgerð sé uppbyggileg, þá mátt þú senda hana aftur til að staðfesta hana.\nStutt lýsing um misnotkunar síuna sem breyting þín passaði við er: $1",
"abusefilter-disallowed": "Þessi aðgerð hefur sjálfvirkt verið merkt sem skaðleg og hefur því verið hafnað.\nEf þú telur að þessi aðgerð hafi verið uppbyggileg, hafðu þá samband við möppudýr um það sem þú reyndir að gera.\nStutt lýsing um misnotkunar síuna sem breyting þín passaði við er: $1",
"abusefilter-blocked-display": "Þessi aðgerð hefur sjálfvirkt verið merkt sem skaðleg og því er bannað að framkvæma hana.\nAð auki, til þess að verja {{SITENAME}}, hefur notendanafn þitt og það vistfang sem þú notaðir síðast verið bannað.\nEf villa leiddi þig hingað, hafðu þá samband við möppudýr.\nStutt lýsing um misnotkunar síuna sem breyting þín passaði við er: $1",
@@ -47,6 +47,8 @@
"abusefilter-log-search-filter": "Síu einkenni (aðgreindu með pípumerki):",
"abusefilter-log-search-title": "Titill:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-entries-label": "Sýnileiki:",
+ "abusefilter-log-search-entries-all": "Allar færslur",
"abusefilter-log-search-submit": "Leita",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|hrundi}} af stað misnotkunar síu, með {{GENDER:$8|framkvæmd}} aðgerðarinnar „$3” á $4.\nAðgerðir: $5;\nLýsing síunnar: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|hrundi}} af stað misnotkunar síu, með {{GENDER:$8|framkvæmd}} aðgerðarinnar „$3” á $4.\nAðgerðir: $5;\nLýsing síunnar: $6 ($7)",
@@ -60,11 +62,11 @@
"abusefilter-log-details-var": "Breyta",
"abusefilter-log-details-val": "Gildi",
"abusefilter-log-details-vars": "Stiki aðgerðar",
- "abusefilter-log-details-private": "Falin skrá",
+ "abusefilter-log-details-private": "Ítarlegt úr einkaannál",
"abusefilter-log-details-ip": "Upprunalegt vistfang",
"abusefilter-log-noactions": "engar",
- "abusefilter-log-linkoncontribs": "misnotkunar skrá",
- "abusefilter-log-linkoncontribs-text": "misnotkunar skrá notandans",
+ "abusefilter-log-linkoncontribs": "misnotkunarskrá",
+ "abusefilter-log-linkoncontribs-text": "Misnotkunarskrá fyrir {{GENDER:$1|þennan notanda}}",
"abusefilter-log-hidden": "(falin færsla)",
"abusefilter-log-hidden-implicit": "(falið vegna þess að breytingum hefur verið eytt)",
"abusefilter-log-cannot-see-details": "Þú hefur ekki leyfi til þess að sjá atriði þessarar innfærslu.",
@@ -74,8 +76,6 @@
"abusefilter-log-hide-hidden": "Fela þessa færslu",
"abusefilter-log-hide-reason": "Ástæða:",
"abusefilter-log-hide-forbidden": "Þú hefur engin réttindi til að fela færslur í misnotkunar skránni",
- "abusefilter-logentry-suppress": "faldi \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "óhaldi „[[$1]]“",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|hrundi}} af stað misnotkunar síu $4, með breytingunni \"$5\" á $3. Framkvæmdi aðgerðirnar $6 ($7)",
"abusefilter-management": "Stjórn misnotkunar síunnar",
"abusefilter-list": "Allar síur",
@@ -105,7 +105,6 @@
"abusefilter-list-options-scope": "Sýna síur:",
"abusefilter-list-options-scope-local": "Eingöngu staðbundnar reglur",
"abusefilter-list-options-scope-global": "Eingöngu altækar reglur",
- "abusefilter-list-options-disabled": "Óvirkar síur:",
"abusefilter-list-options-hidedisabled": "Fela óvirkar síur",
"abusefilter-list-options-submit": "Uppfæra",
"abusefilter-tools-expr": "Segðar prófun",
@@ -118,7 +117,6 @@
"abusefilter-edit-status-label": "Tölfræði:",
"abusefilter-edit-status": "Af síðustu $1 {{PLURAL:$1|aðgerð|aðgerðum}} hefur þessi sía passað við $2 ($3%).",
"abusefilter-edit-status-profile": "Af síðustu $1 {{PLURAL:$1|aðgerð|aðgerðum}} hefur þessi sía passað við $2 ($3%).\nAð meðaltali tekur vinnsla síunnar $4 ms og eyðir $5 {{PLURAL:$5|skilyrði|skilyrðum}} af hámarksfjölda skilyrða.",
- "abusefilter-edit-throttled": "'''Viðvörun''': Sían var sjálfvirkt óvirkjuð sem öryggisráðstöfun.\nHún passaði við fleiri en $1% breytinga.",
"abusefilter-edit-new": "Ný sía",
"abusefilter-edit-save": "Vista síu",
"abusefilter-edit-id": "Síu einkenni:",
@@ -128,13 +126,13 @@
"abusefilter-edit-enabled": "Virkja þessa síu",
"abusefilter-edit-deleted": "Merkja sem eydda",
"abusefilter-edit-hidden": "Fela nánari upplýsingar um þessa síu",
+ "abusefilter-edit-global": "Altæk sía",
"abusefilter-edit-rules": "Skilyrði:",
"abusefilter-edit-notes": "Minnisatriði:",
"abusefilter-edit-lastmod": "Síunni var síðast breytt:",
"abusefilter-edit-lastmod-text": "$1 af $2",
"abusefilter-edit-action-warn": "Virkja þessar aðgerðir eftir að notandinn hefur verið varaður við",
"abusefilter-edit-action-disallow": "Hindra notandann frá því að gera tiltekna aðgerð",
- "abusefilter-edit-action-flag": "Merkja breytinguna í misnotkunarskránni",
"abusefilter-edit-action-blockautopromote": "Endurvekja réttindi sjálfvirkt staðfestra notenda",
"abusefilter-edit-action-degroup": "Fjarlægja öll réttindi notandans",
"abusefilter-edit-action-block": "Banna notandann og/eða vistfang hans frá frekari breytingum",
@@ -143,7 +141,6 @@
"abusefilter-edit-action-tag": "Merkja breytinguna til frekari skoðunar",
"abusefilter-edit-throttle-count": "Fjöldi aðgerða sem eru leyfðir:",
"abusefilter-edit-throttle-period": "Tímalengd:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekúnda|sekúndur}}",
"abusefilter-edit-warn-message": "Kerfisskilaboð sem verða notuð til viðvörunar:",
"abusefilter-edit-warn-other": "Önnur skilaboð",
"abusefilter-edit-warn-other-label": "Nafn viðvörunarskilaboðanna:\n:''(í nafnrýminu Strengir)''",
@@ -167,7 +164,7 @@
"abusefilter-edit-export": "Flytja síuna á annan wiki",
"abusefilter-edit-syntaxok": "Engar málskipunar villur fundust.",
"abusefilter-edit-syntaxerr": "Málskipunar villa fannst: $1",
- "abusefilter-edit-bad-tags": "Ein eða fleiri tög sem þú hefur tilgreind eru ógild.\nTögin eiga að vera stutt og þau mega ekki innihalda sérstök tákn.",
+ "abusefilter-edit-bad-tags": "Eitt eða fleiri merkjanna sem þú hefur tilgreint eru ógild.\nMerki eiga að vera stutt, þau mega ekki innihalda sértákn og þau ættu aldrei að vera frátekin fyrir annan hugbúnað. Reyndu að velja eitthvað annað heiti.",
"abusefilter-edit-notallowed": "Þú getur ekki breytt eða stofnað misnotkunar síu.",
"abusefilter-edit-builder-select": "Veldu möguleika til að bæta honum við bendilinn.",
"abusefilter-edit-builder-group-op-arithmetic": "Reikningsaðgerðir",
@@ -177,6 +174,7 @@
"abusefilter-edit-builder-op-arithmetic-divide": "Deila (/)",
"abusefilter-edit-builder-op-arithmetic-modulo": "Leif (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Veldi (**)",
+ "abusefilter-edit-builder-group-op-comparison": "Samanburðarvirkjar",
"abusefilter-edit-builder-op-comparison-equal": "Jafnt og (==)",
"abusefilter-edit-builder-op-comparison-notequal": "Ekki jafnt og (!=)",
"abusefilter-edit-builder-op-comparison-lt": "Minna en (<)",
@@ -186,6 +184,7 @@
"abusefilter-edit-builder-op-bool-not": "Ekki (!)",
"abusefilter-edit-builder-op-bool-and": "Og (&)",
"abusefilter-edit-builder-op-bool-or": "Eða (|)",
+ "abusefilter-edit-builder-op-bool-xor": "XOR (^)",
"abusefilter-edit-builder-group-misc": "Ýmislegt",
"abusefilter-edit-builder-group-funcs": "Föll",
"abusefilter-edit-builder-funcs-length": "Strengjalengd (length)",
@@ -196,10 +195,10 @@
"abusefilter-edit-builder-vars-newsize": "Ný skrárstærð",
"abusefilter-edit-builder-vars-oldsize": "Eldri skrárstærð",
"abusefilter-edit-builder-vars-removedlines": "Línur fjarlægðar í breytingu",
- "abusefilter-edit-builder-vars-summary": "Breytingarsamantekt/ástæða",
- "abusefilter-edit-builder-vars-article-id": "Einkennisnúmer síðunnar",
- "abusefilter-edit-builder-vars-article-ns": "Nafnrými síðunnar",
- "abusefilter-edit-builder-vars-article-text": "Titill síðunnar (án nafnrýmis)",
+ "abusefilter-edit-builder-vars-summary": "Breytingarágrip/ástæða",
+ "abusefilter-edit-builder-vars-page-id": "Einkennisnúmer síðunnar",
+ "abusefilter-edit-builder-vars-page-ns": "Nafnrými síðunnar",
+ "abusefilter-edit-builder-vars-page-title": "Titill síðunnar (án nafnrýmis)",
"abusefilter-edit-builder-vars-user-editcount": "Breytingaheildartala notanda",
"abusefilter-edit-builder-vars-user-age": "Aldur notandaaðgangsins",
"abusefilter-edit-builder-vars-user-name": "Nafn notandaaðgangs",
@@ -254,7 +253,7 @@
"abusefilter-test-load-filter": "Auðkenni síunnar:",
"abusefilter-test-submit": "Prófun",
"abusefilter-test-load": "Hlaða",
- "abusefilter-test-user": "Breytingar eftir notenda:",
+ "abusefilter-test-user": "Breytingar eftir notanda:",
"abusefilter-test-period-start": "Breytingar gerðar eftir:",
"abusefilter-test-period-end": "Breytingar gerðar fyrir:",
"abusefilter-test-page": "Breytingar á síðu:",
@@ -283,12 +282,17 @@
"abusefilter-topnav-tools": "Kembiforrit",
"abusefilter-topnav-import": "Flytja inn síu",
"abusefilter-log-name": "Misnotkunar síu skrá",
- "abusefilter-log-entry-modify": "breytti $1 ($2)",
"abusefilter-log-noresults": "Engar niðurstöður",
"abusefilter-diff-title": "Munur milli útgáfa",
+ "abusefilter-diff-item": "Atriði",
"abusefilter-diff-version": "Útgáfa frá $1 {{GENDER:$3|eftir}} $2",
"abusefilter-diff-info": "Grunnupplýsingar",
"abusefilter-diff-invalid": "Mistókst að sækja þær útgáfur sem þú óskaðir eftir",
"abusefilter-diff-backhistory": "Aftur í breytingarskrá síunnar",
- "abusefilter-diff-next": "Nýlegri breytingar"
+ "abusefilter-diff-next": "Nýlegri breytingar",
+ "abusefilter-import-submit": "Flytja inn gögn",
+ "abusefilter-group-default": "Sjálfgefið",
+ "abusefilter-http-error": "HTTP-villa kom upp: $1",
+ "abusefilter-log-details-id": "Auðkenni annáls",
+ "abusefilter-log-ip-not-available": "Ekki tiltækt"
}
diff --git a/AbuseFilter/i18n/it.json b/AbuseFilter/i18n/it.json
index f486681b..d1bc9ae7 100644
--- a/AbuseFilter/i18n/it.json
+++ b/AbuseFilter/i18n/it.json
@@ -20,14 +20,20 @@
"Macofe",
"Alexmar983",
"Matma Rex",
- "Greis"
+ "Greis",
+ "Horcrux92",
+ "Daimona Eaytoy",
+ "Fitoschido",
+ "ArTrix",
+ "Sarah Bernabei",
+ "Wim b"
]
},
"abusefilter-desc": "Applica un'euristica automatica alle modifiche.",
"abusefilter": "Configurazione del filtro anti abusi",
"abuselog": "Registro del filtro anti abusi",
"abusefilter-intro": "Benvenuti nell'interfaccia di gestione del filtro anti abusi.\nIl filtro anti abusi è un sistema automatizzato per l'applicazione di euristiche automatiche a tutte le azioni.\nL'interfaccia mostra un elenco dei filtri definiti e ne consente la modifica.",
- "abusefilter-mustbeeditor": "Per motivi di sicurezza, solo gli utenti con il diritto di modificare i filtri anti abusi possono utilizzare questa interfaccia.",
+ "abusefilter-mustviewprivateoredit": "Per motivi di sicurezza, solo gli utenti con il diritto di visualizzare i filtri anti abusi privati o di modificare i filtri possono utilizzare questa interfaccia.",
"abusefilter-warning": "'''Attenzione:''' questa azione è stata ritenuta pericolosa in base a una verifica automatica.\nLe azioni non costruttive verranno prontamente annullate; l'inserimento palese o ripetuto di contributi non costruttivi darà luogo al blocco dell'utenza o del tuo indirizzo IP.\nSe si ritiene che l'azione in questione sia costruttiva, devi inviarla nuovamente per confermarla.\nQuesta è una breve descrizione della regola di sicurezza che è stata violata: $1",
"abusefilter-disallowed": "Questa azione è stata ritenuta pericolosa e quindi impedita in base a una verifica automatica.\nSe si ritiene che l'azione in questione sia costruttiva, contattare un amministratore e informarlo su ciò che si stava tentando di fare.\nQuesta è una breve descrizione della regola di sicurezza che è stata violata: $1",
"abusefilter-blocked-display": "Questa azione è stata ritenuta pericolosa e quindi impedita in base a una verifica automatica.\nInoltre, allo scopo di proteggere {{SITENAME}} l'utenza coinvolta e tutti gli indirizzi IP ad essa associati sono stati bloccati e non possono più effettuare modifiche.\nSe si ritiene che si tratti di un errore, si prega di contattare un amministratore.\nQuesta è una breve descrizione della regola di sicurezza che è stata violata: $1",
@@ -42,6 +48,7 @@
"right-abusefilter-log": "Visualizza il registro del filtro anti abusi",
"right-abusefilter-log-detail": "Visualizza voci dettagliate del registro del filtro anti abusi",
"right-abusefilter-private": "Visualizza i dati privati nel registro del filtro anti abusi",
+ "right-abusefilter-private-log": "Visualizza i dettagli privati del registro di accesso del filtro anti abusi",
"right-abusefilter-modify-restricted": "Modifica i filtri anti abusi con le azioni riservate",
"right-abusefilter-revert": "Annulla tutti i cambiamenti di un determinato filtro anti abusi",
"right-abusefilter-view-private": "Visualizza i filtri anti abusi segnati come privati",
@@ -54,9 +61,11 @@
"action-abusefilter-log": "visualizzare il registro del filtro anti abusi",
"action-abusefilter-log-detail": "visualizzare le voci di dettaglio del registro del filtro anti abusi",
"action-abusefilter-private": "visualizzare le informazioni riservate nel registro del filtro anti abusi",
+ "action-abusefilter-private-log": "visualizzare i dettagli privati del registro di accesso del filtro anti abusi",
"action-abusefilter-modify-restricted": "modificare i filtri anti abusi con le azioni riservate",
"action-abusefilter-revert": "ripristinare tutte le modifiche apportate da un determinato filtro anti abusi",
"action-abusefilter-view-private": "visualizzare i filtri anti abusi segnati come privati",
+ "action-abusefilter-log-private": "visualizzare i registri dei filtri anti abusi contrassegnati come privati",
"abusefilter-log": "Registro del filtro anti abusi",
"abusefilter-log-summary": "Questo registro mostra un elenco di tutte le azioni che hanno attivato uno o più filtri.",
"abusefilter-log-search": "Cerca nel registro del filtro anti abusi",
@@ -64,13 +73,25 @@
"abusefilter-log-search-filter": "ID filtri (separati da barre verticali):",
"abusefilter-log-search-title": "Titolo:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Impatto:",
+ "abusefilter-log-search-impact-all": "Tutte le azioni",
+ "abusefilter-log-search-impact-saved": "Solo modifiche salvate",
+ "abusefilter-log-search-impact-not-saved": "Senza modifiche salvate",
"abusefilter-log-search-entries-label": "Visibilità:",
+ "abusefilter-log-search-entries-all": "Tutte le voci",
+ "abusefilter-log-search-entries-hidden": "Solo le voci nascoste",
+ "abusefilter-log-search-entries-visible": "Solo le voci visibili",
+ "abusefilter-log-search-action-label": "Azione compiuta:",
+ "abusefilter-log-search-action-other": "Altro",
+ "abusefilter-log-search-action-any": "Qualsiasi",
+ "abusefilter-log-search-action-taken-label": "Azione intrapresa:",
+ "abusefilter-log-search-action-taken-any": "Qualsiasi",
"abusefilter-log-search-submit": "Ricerca",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|ha provocato}} l'attivazione di un filtro anti abusi con l'azione \"$3\" su $4.\nAzioni intraprese: $5;\nDescrizione del filtro: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|ha provocato}} l'attivazione di un filtro anti abusi con l'azione \"$3\" su $4.\nAzioni intraprese: $5;\nDescrizione del filtro: $6 ($7)",
- "abusefilter-log-detailedentry-meta": "$1: $2 {{GENDER:$9|ha provocato}} l'attivazione $3 con l'azione \"$4\" su $5.\nAzioni intraprese: $6;\nDescrizione del filtro: $7 ($8)",
+ "abusefilter-log-detailedentry-meta": "$1: $2 {{GENDER:$9|ha attivato}} $3 con l'azione \"$4\" su $5.\nAzioni intraprese: $6;\nDescrizione del filtro: $7 ($8)",
"abusefilter-log-detailedentry-global": "filtro globale $1",
- "abusefilter-log-detailedentry-local": "del filtro $1",
+ "abusefilter-log-detailedentry-local": "il filtro $1",
"abusefilter-log-detailslink": "dettagli",
"abusefilter-log-diff": "diff",
"abusefilter-log-hidelink": "regola visibilità",
@@ -78,28 +99,42 @@
"abusefilter-log-details-var": "Variabile",
"abusefilter-log-details-val": "Valore",
"abusefilter-log-details-vars": "Parametri dell'azione",
- "abusefilter-log-details-private": "Informazioni riservate",
+ "abusefilter-log-details-private": "Dettagli registro privati",
"abusefilter-log-details-ip": "Indirizzo IP di origine",
+ "abusefilter-log-details-checkuser": "Check user",
"abusefilter-log-noactions": "nessuna",
"abusefilter-log-details-diff": "Modifiche effettuate",
"abusefilter-log-linkoncontribs": "filtro anti abusi",
"abusefilter-log-linkoncontribs-text": "Registro del filtro anti abusi relativo a {{GENDER:$1|questo utente}}",
+ "abusefilter-log-linkonhistory": "visualizza il registro del filtro anti abusi",
+ "abusefilter-log-linkonhistory-text": "Visualizza il registro del filtro anti abusi per questa pagina",
"abusefilter-log-hidden": "(voce nascosta)",
"abusefilter-log-hidden-implicit": "(nascosto perché la versione è stata eliminata)",
"abusefilter-log-cannot-see-details": "Non si dispone dei permessi necessari per vedere i dettagli di questa voce del registro.",
+ "abusefilter-log-cannot-see-private-details": "Non si dispone dei permessi necessari per vedere i dettagli di questa voce del registro.",
+ "abusefilter-log-nonexistent": "Una voce con l'ID specificato non esiste.",
"abusefilter-log-details-hidden": "Non è possibile visualizzare i dettagli di questa voce, in quanto nascosta al pubblico.",
+ "abusefilter-log-details-hidden-implicit": "Non è possibile visualizzare i dettagli di questa voce in quanto riferita a una revisione nascosta al pubblico.",
"abusefilter-log-private-not-included": "Uno o più ID filtro che hai indicato sono privati. Poiché non puoi visualizzare i dettagli dei filtri privati, questi filtri non sono stati cercati.",
"abusefilter-log-hide-legend": "Nascondi voce del registro",
"abusefilter-log-hide-id": "ID voce del registro:",
"abusefilter-log-hide-hidden": "Nascondere questa voce dalla visione pubblica",
"abusefilter-log-hide-reason": "Motivo:",
+ "abusefilter-log-hide-reason-other": "Altri motivi/dettagli:",
"abusefilter-log-hide-forbidden": "Non si dispone dei permessi necessari per nascondere le voci del registro abusi.",
- "abusefilter-logentry-suppress": "nascosto \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "mostrato \"[[$1]]\"",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|ha nascosto}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|ha reso visibile}} $3",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|ha attivato}} $4, {{GENDER:$2|eseguendo}} l'azione \"$5\" su $3. Azioni intraprese: $6 ($7)",
+ "log-action-filter-abusefilter": "Tipo di cambiamento del filtro:",
+ "log-action-filter-abusefilter-create": "Creazione di un nuovo filtro",
+ "log-action-filter-abusefilter-modify": "Modifica del filtro",
+ "log-action-filter-suppress-abuselog": "Soppressione registro abusi",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|ha acceduto}} ai dettagli privati di $3",
+ "abusefilterprivatedetails-log-name": "Registro di accesso ai dettagli privati del filtro anti abusi",
"abusefilter-management": "Gestione del filtro anti abusi",
"abusefilter-list": "Tutti i filtri",
"abusefilter-list-id": "ID filtro",
+ "abusefilter-list-pattern": "Pattern",
"abusefilter-list-status": "Stato",
"abusefilter-list-public": "Descrizione pubblica",
"abusefilter-list-consequences": "Conseguenze",
@@ -115,6 +150,7 @@
"abusefilter-enabled": "Attivato",
"abusefilter-deleted": "Cancellato",
"abusefilter-disabled": "Disattivato",
+ "abusefilter-throttled": "azioni disattivate automaticamente",
"abusefilter-hitcount": "$1 {{PLURAL:$1|corrispondenza|corrispondenze}}",
"abusefilter-new": "Crea un nuovo filtro",
"abusefilter-return": "Torna alla gestione dei filtri",
@@ -128,8 +164,16 @@
"abusefilter-list-options-scope-local": "Solo regole locali",
"abusefilter-list-options-scope-global": "Solo regole globali",
"abusefilter-list-options-scope-all": "Regole locali e globali",
- "abusefilter-list-options-disabled": "Filtri disattivati:",
+ "abusefilter-list-options-further-options": "Ulteriori opzioni:",
"abusefilter-list-options-hidedisabled": "Nascondi i filtri disattivati",
+ "abusefilter-list-options-hideprivate": "Nascondi i filtri privati",
+ "abusefilter-list-options-searchfield": "Cerca tra le regole:",
+ "abusefilter-list-options-searchpattern": "Inserisci un pattern",
+ "abusefilter-list-options-searchoptions": "Modalità di ricerca:",
+ "abusefilter-list-options-search-like": "Testo semplice",
+ "abusefilter-list-options-search-rlike": "Espressione regolare",
+ "abusefilter-list-options-search-irlike": "Espressione regolare senza distinzione tra maiuscole e minuscole",
+ "abusefilter-list-regexerror": "Si è verificato un errore durante la ricerca: errore di sintassi nell'espressione regolare.",
"abusefilter-list-options-submit": "Aggiorna",
"abusefilter-tools-text": "Di seguito sono riportati alcuni strumenti utili per la costruzione e la verifica dei filtri anti abusi.",
"abusefilter-tools-expr": "Verifica espressioni",
@@ -144,15 +188,18 @@
"abusefilter-edit": "Modifica filtro anti abusi",
"abusefilter-edit-subtitle": "Modifica del filtro $1",
"abusefilter-edit-subtitle-new": "Creazione filtro",
+ "abusefilter-edit-token-not-match": "La modifica non è stata salvata! Per favore, prova di nuovo.",
"abusefilter-edit-oldwarning": "<strong>Si sta modificando una versione obsoleta di questo filtro.\nLe statistiche citate si riferiscono alla versione più recente del filtro.\nSalvando le modifiche verranno annullati tutti i cambiamenti apportati da questa versione in poi.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Ritorna alla cronologia del filtro]].",
"abusefilter-edit-status-label": "Statistiche:",
"abusefilter-edit-status": "Rispetto {{PLURAL:$1|all'azione più recente|alle $1 azioni più recenti}}, questo filtro ha trovato $2 {{PLURAL:$2|corrispondenza|corrispondenze}} ($3 %).",
"abusefilter-edit-status-profile": "Rispetto {{PLURAL:$1|all'azione più recente|alle $1 azioni più recenti}}, questo filtro ha trovato $2 {{PLURAL:$2|corrispondenza|corrispondenze}} ($3 %).\nIl suo tempo medio di esecuzione è di $4 ms, e impiega $5 {{PLURAL:$5|condizione|condizioni}} del limite di condizioni.",
- "abusefilter-edit-throttled": "'''Attenzione''': Questo filtro è stato disattivato automaticamente come misura precauzionale.\nÈ stato raggiunto il limite massimo di corrispondenze, pari al $1% delle azioni.",
+ "abusefilter-edit-throttled-warning": "Attenzione: questo filtro è stato automaticamente identificato come pericoloso. Come misura di sicurezza, le azioni seguenti non saranno eseguite ($1). Per favore controlla e [[mw:Extension:AbuseFilter/Conditions|ottimizza]] le condizioni per rimuovere questa restrizione.",
"abusefilter-edit-new": "Nuovo filtro",
"abusefilter-edit-save": "Salva filtro",
"abusefilter-edit-id": "ID filtro:",
+ "abusefilter-edit-switch-editor": "Cambia editor",
"abusefilter-edit-description": "Descrizione:\n:''(visibile pubblicamente)''",
+ "abusefilter-edit-field-description": "descrizione",
"abusefilter-edit-group": "Gruppo filtri:",
"abusefilter-edit-flags": "Opzioni:",
"abusefilter-edit-enabled": "Attiva questo filtro",
@@ -160,35 +207,59 @@
"abusefilter-edit-hidden": "Nascondi i dettagli di questo filtro al pubblico",
"abusefilter-edit-global": "Filtro globale",
"abusefilter-edit-rules": "Condizioni:",
+ "abusefilter-edit-field-conditions": "condizioni",
"abusefilter-edit-notes": "Note:",
"abusefilter-edit-lastmod": "Ultima modifica al filtro:",
"abusefilter-edit-lastmod-text": "$1 da parte di $2",
"abusefilter-edit-hitcount": "Corrispondenze per il filtro:",
"abusefilter-edit-consequences": "Azioni da intraprendere in caso di corrispondenza",
- "abusefilter-edit-action-warn": "Attiva le seguenti azioni dopo aver avvisato l'utente",
+ "abusefilter-edit-action-warn": "Attiva le azioni selezionate dopo aver avvisato l'utente",
"abusefilter-edit-action-disallow": "Impedisci all'utente di effettuare l'azione in questione",
- "abusefilter-edit-action-blockautopromote": "Revoca lo stato di autoconfirmed dell'utente",
+ "abusefilter-edit-action-blockautopromote": "Revoca lo stato di autoconfermato dell'utente",
"abusefilter-edit-action-degroup": "Rimuovi l'utente da tutti i gruppi privilegiati",
- "abusefilter-edit-action-block": "Impedisci ogni ulteriore modifica all'utenza o indirizzo IP",
+ "abusefilter-edit-action-block": "Blocca l'utenza o indirizzo IP",
+ "abusefilter-edit-action-blocktalk": "Impedisci all'utente o indirizzo IP di modificare la sua pagina di discussione",
"abusefilter-edit-action-throttle": "Attiva le azioni solo se l'utente supera un limite predeterminato",
- "abusefilter-edit-action-rangeblock": "Blocca l'intervallo /16 di origine dell'utente.",
- "abusefilter-edit-action-tag": "Evidenzia la modifica per una verifica ulteriore.",
+ "abusefilter-edit-action-rangeblock": "Bloccare il rispettivo intervallo IP di origine dell'utente",
+ "abusefilter-edit-action-tag": "Evidenzia la modifica per una verifica ulteriore",
"abusefilter-edit-throttle-count": "Numero di azioni da consentire:",
- "abusefilter-edit-throttle-period": "Periodo di tempo:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|secondo|secondi}}",
- "abusefilter-edit-throttle-groups": "Criteri di raggruppamento per il ritardo:\n:''(uno per riga oppure uniti da virgole)''",
+ "abusefilter-edit-throttle-period": "Periodo di tempo (in secondi):",
+ "abusefilter-edit-throttle-groups": "Criteri di raggruppamento per il rallentamento:",
+ "abusefilter-edit-throttle-ip": "Indirizzo IP",
+ "abusefilter-edit-throttle-user": "Account utente",
+ "abusefilter-edit-throttle-range": "Range /16",
+ "abusefilter-edit-throttle-creationdate": "Orario del server della creazione dell'account",
+ "abusefilter-edit-throttle-editcount": "Conteggio delle modifiche",
+ "abusefilter-edit-throttle-site": "Tutto il sito",
+ "abusefilter-edit-throttle-page": "Pagina",
+ "abusefilter-throttle-details": "Permetti $1 {{PLURAL:$1|azione|azioni}} ogni {{PLURAL:$2|secondo|$2 secondi}}, criteri di raggruppamento: $3",
"abusefilter-edit-warn-message": "Messaggio di sistema da usare come avviso:",
"abusefilter-edit-warn-other": "Altro messaggio",
- "abusefilter-edit-warn-other-label": "Nome della pagina per l'altro messaggio:\n:''(senza il prefisso MediaWiki)''",
+ "abusefilter-edit-warn-other-label": "Nome della pagina per l'altro messaggio:\n:''(senza il prefisso \"MediaWiki:\")''",
"abusefilter-edit-warn-actions": "Azioni:",
- "abusefilter-edit-warn-preview": "Anteprima messaggio selezionato",
+ "abusefilter-edit-warn-preview": "Mostra/nascondi l'anteprima del messaggio selezionato",
"abusefilter-edit-warn-edit": "Crea o modifica il messaggio selezionato",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Etichette]] da aggiungere (una per riga):",
+ "abusefilter-edit-disallow-message": "Messaggio di sistema da usare per l'impedimento:",
+ "abusefilter-edit-disallow-other": "Altro messaggio",
+ "abusefilter-edit-disallow-other-label": "Nome della pagina per l'altro messaggio:\n:''(senza il prefisso \"MediaWiki:\")''",
+ "abusefilter-edit-disallow-actions": "Azioni:",
+ "abusefilter-edit-disallow-preview": "Mostra/nascondi l'anteprima del messaggio selezionato",
+ "abusefilter-edit-disallow-edit": "Crea o modifica il messaggio selezionato",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Etichette]] da aggiungere:",
+ "abusefilter-edit-tag-placeholder": "Aggiungi delle etichette (una ad una o separate da virgole)",
+ "abusefilter-edit-tag-hidden-placeholder": "Aggiungi delle etichette (separate da virgole)",
+ "abusefilter-edit-block-anon-durations": "Durata del blocco per utenti anonimi:",
+ "abusefilter-edit-block-user-durations": "Durata del blocco per utenti registrati:",
+ "abusefilter-block-anon": "Blocca utenti anonimi",
+ "abusefilter-block-user": "blocca utenti registrati",
+ "abusefilter-block-talk": "pagina di discussione bloccata",
"abusefilter-edit-denied": "Non è possibile visualizzare i dettagli di questo filtro, in quanto nascosto al pubblico.",
"abusefilter-edit-main": "Parametri del filtro",
"abusefilter-edit-done-subtitle": "Filtro modificato",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Le modifiche]] al [[Special:AbuseFilter/$1|filtro $3]] sono state salvate correttamente.",
"abusefilter-edit-badsyntax": "Il filtro specificato contiene un errore di sintassi.\nDi seguito viene riportato l'output del parser: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "I seguenti campi sono obbligatori e devono essere compilati: $1",
+ "abusefilter-edit-deleting-enabled": "Non è possibile segnare come cancellato un filtro attivo.",
"abusefilter-edit-restricted": "Non è possibile modificare questo filtro in quanto contiene delle azioni riservate.\nChiedere a un utente abilitato all'inserimento di azioni riservate di effettuare la modifica.",
"abusefilter-edit-viewhistory": "Vedi la cronologia di questo filtro",
"abusefilter-edit-history": "Cronologia:",
@@ -203,7 +274,7 @@
"abusefilter-edit-bad-tags": "Una o più etichette specificate non sono valide.\nLe etichette devono essere corte, non contenere caratteri speciali e non devono essere riservate da altri programmi. Prova a scegliere un altro nome.",
"abusefilter-edit-notallowed": "Non sei autorizzato a creare o modificare i filtri del filtro anti abusi",
"abusefilter-edit-notallowed-global": "Non sei autorizzato a creare o modificare i filtri globali del filtro anti abusi",
- "abusefilter-edit-notallowed-global-custom-msg": "Messaggi di avviso personalizzati non sono supportati per i filtri globali",
+ "abusefilter-edit-notallowed-global-custom-msg": "I messaggi di avviso personalizzati non sono supportati per i filtri globali",
"abusefilter-edit-builder-select": "Scegliere un'opzione per aggiungerla nella posizione del cursore",
"abusefilter-edit-builder-group-op-arithmetic": "Operatori aritmetici",
"abusefilter-edit-builder-op-arithmetic-addition": "Addizione (+)",
@@ -213,8 +284,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Modulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Potenza (**)",
"abusefilter-edit-builder-group-op-comparison": "Operatori di confronto",
- "abusefilter-edit-builder-op-comparison-equal": "Uguale a (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Diverso da (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Valore uguale a (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Valore e tipo uguali a (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Valore diverso da (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Valore e tipo diversi da (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Minore di (<)",
"abusefilter-edit-builder-op-comparison-gt": "Maggiore di (>)",
"abusefilter-edit-builder-op-comparison-lte": "Minore di o uguale a (<=)",
@@ -238,23 +311,30 @@
"abusefilter-edit-builder-funcs-lcase": "Converti in minuscolo (lcase)",
"abusefilter-edit-builder-funcs-ucase": "Converti in maiuscolo (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normalizza caratteri confondibili (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normalizza una stringa e cerca delle sottostringhe al suo interno in modalità OR (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Normalizza una stringa e cerca delle sottostringhe al suo interno in modalità AND (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Rimuovi caratteri doppi (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Caratteri speciali su caratteri totali (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normalizza (norm)",
"abusefilter-edit-builder-funcs-count": "Numero di occorrenze della stringa X nella stringa Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Numero di occorrenze dell'espressione regolare X nella stringa Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Array di corrispondenze di una regex all'intero di un testo per ogni gruppo catturante (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Elimina whitespace (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Rimuovi caratteri speciali (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "L'indirizzo IP appartiene all'intervallo? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Stringa di ricerca per sottostringhe multiple (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Cerca sottostringhe multiple in una stringa data in modalità OR (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Cerca sottostringhe multiple in una stringa data in modalità AND (contains_any)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Controlla se un parametro dato è uguale (===) ad almeno uno dei parametri seguenti (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Sottostringa (substr)",
"abusefilter-edit-builder-funcs-strpos": "Posizione della sottostringa nella stringa (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Sostituisci sottostringa con stringa (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Stringa di escape come valore letterale in regex (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Imposta variabile (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Normalizza le entità HTML in caratteri unicode (sanitize)",
"abusefilter-edit-builder-group-vars": "Variabili",
"abusefilter-edit-builder-vars-accountname": "Nome dell'account (al momento della creazione)",
"abusefilter-edit-builder-vars-timestamp": "Timestamp UNIX della modifica",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Timestamp del registro",
"abusefilter-edit-builder-vars-action": "Azione",
"abusefilter-edit-builder-vars-addedlines": "Righe aggiunte dalla modifica",
"abusefilter-edit-builder-vars-delta": "Cambiamento di dimensione della modifica",
@@ -265,19 +345,21 @@
"abusefilter-edit-builder-vars-new-content-model": "Nuovo modello di contenuto",
"abusefilter-edit-builder-vars-removedlines": "Righe rimosse dalla modifica",
"abusefilter-edit-builder-vars-summary": "Oggetto/motivazione",
- "abusefilter-edit-builder-vars-article-id": "ID della pagina",
- "abusefilter-edit-builder-vars-article-ns": "Namespace della pagina",
- "abusefilter-edit-builder-vars-article-text": "Titolo della pagina (senza namespace)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Titolo completo della pagina",
- "abusefilter-edit-builder-vars-article-views": "Visualizzazioni di pagina",
+ "abusefilter-edit-builder-vars-page-id": "ID della pagina",
+ "abusefilter-edit-builder-vars-page-ns": "Namespace della pagina",
+ "abusefilter-edit-builder-vars-page-title": "Titolo della pagina (senza namespace)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Titolo completo della pagina",
+ "abusefilter-edit-builder-vars-page-age": "Età della pagina (in secondi)",
"abusefilter-edit-builder-vars-movedfrom-id": "Identificativo della pagina origine dello spostamento",
"abusefilter-edit-builder-vars-movedfrom-ns": "Namespace della pagina origine dello spostamento",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titolo della pagina origine dello spostamento",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Titolo completo della pagina origine dello spostamento",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titolo della pagina origine dello spostamento",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Titolo completo della pagina origine dello spostamento",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Età della pagina origine dello spostamento (in secondi)",
"abusefilter-edit-builder-vars-movedto-id": "Identificativo della pagina destinazione dello spostamento",
"abusefilter-edit-builder-vars-movedto-ns": "Namespace della pagina destinazione dello spostamento",
- "abusefilter-edit-builder-vars-movedto-text": "Titolo della pagina destinazione dello spostamento",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Titolo completo della pagina destinazione dello spostamento",
+ "abusefilter-edit-builder-vars-movedto-title": "Titolo della pagina destinazione dello spostamento",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Titolo completo della pagina destinazione dello spostamento",
+ "abusefilter-edit-builder-vars-movedto-age": "Età della pagina destinazione dello spostamento (in secondi)",
"abusefilter-edit-builder-vars-user-editcount": "Edit count dell'utente",
"abusefilter-edit-builder-vars-user-age": "Età dell'account utente",
"abusefilter-edit-builder-vars-user-name": "Nome utente",
@@ -287,10 +369,14 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "Data e ora di conferma dell'indirizzo e-mail",
"abusefilter-edit-builder-vars-recent-contributors": "Ultimi dieci utenti che hanno contribuito alla pagina",
"abusefilter-edit-builder-vars-first-contributor": "Primo utente a contribuire alla pagina",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Ultimi dieci utenti che hanno contribuito alla pagina origine dello spostamento",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Primo utente che ha contribuito alla pagina origine dello spostamento",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Ultimi dieci utenti che hanno contribuito alla pagina destinazione dello spostamento",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Primo utente che ha contribuito alla pagina destinazione dello spostamento",
"abusefilter-edit-builder-vars-all-links": "Tutti i collegamenti esterni nel nuovo testo",
"abusefilter-edit-builder-vars-added-links": "Tutti i collegamenti esterni aggiunti dalla modifica",
"abusefilter-edit-builder-vars-removed-links": "Tutti i collegamenti esterni rimossi dalla modifica",
- "abusefilter-edit-builder-vars-old-text": "Vecchio wikitesto della pagina, precedente alla modifica",
+ "abusefilter-edit-builder-vars-old-text": "Vecchio wikitesto della pagina, precedente alla modifica (non più in uso)",
"abusefilter-edit-builder-vars-new-text": "Nuovo wikitesto della pagina, successivo alla modifica",
"abusefilter-edit-builder-vars-new-pst": "Nuovo testo sorgente della pagina, successivo alla trasformazione presalvataggio",
"abusefilter-edit-builder-vars-diff-pst": "Diff unificato delle modifiche apportate, successivo alla trasformazione presalvataggio",
@@ -301,9 +387,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "Livello di protezione della pagina per gli spostamenti",
"abusefilter-edit-builder-vars-restrictions-create": "Livello di protezione per creare pagine",
"abusefilter-edit-builder-vars-restrictions-upload": "Livello di protezione per caricare file",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Livello di protezione dalle modifiche della pagina origine dello spostamento",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Livello di protezione dallo spostamento della pagina origine dello spostamento",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Livello di protezione dalla creazione della pagina origine dello spostamento",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Livello di protezione dal caricamento del file origine dello spostamento",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Livello di protezione dalle modifiche della pagina destinazione dello spostamento",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Livello di protezione dallo spostamento della pagina destinazione dello spostamento",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Livello di protezione dalla creazione della pagina destinazione dello spostamento",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Livello di protezione dal caricamento del file destinazione dello spostamento",
"abusefilter-edit-builder-vars-old-text-stripped": "Vecchio testo della pagina, privo di qualsiasi formattazione",
"abusefilter-edit-builder-vars-old-links": "Collegamenti nella pagina, prima della modifica",
- "abusefilter-edit-builder-vars-old-html": "Vecchio wikitesto della pagina, interpretato in HTML",
+ "abusefilter-edit-builder-vars-old-html": "Vecchio wikitesto della pagina, interpretato in HTML (non più in uso)",
"abusefilter-edit-builder-vars-minor-edit": "Indica se la modifica è minore o meno",
"abusefilter-edit-builder-vars-file-sha1": "Hash SHA1 del contenuto del file",
"abusefilter-edit-builder-vars-file-size": "Dimensione del file in byte",
@@ -315,8 +409,8 @@
"abusefilter-filter-log": "Ultime modifiche ai filtri",
"abusefilter-history": "Cronologia delle modifiche al filtro anti abusi n. $1",
"abusefilter-history-foruser": "Modifiche apportate da $1",
- "abusefilter-history-hidden": "nascosto",
- "abusefilter-history-enabled": "attivato",
+ "abusefilter-history-hidden": "Nascosto",
+ "abusefilter-history-enabled": "Attivato",
"abusefilter-history-global": "Globale",
"abusefilter-history-timestamp": "Data e ora",
"abusefilter-history-user": "Utente",
@@ -330,31 +424,35 @@
"abusefilter-history-filterid": "Filtro",
"abusefilter-history-select-legend": "Restringi la ricerca",
"abusefilter-history-select-user": "Utente:",
+ "abusefilter-history-select-filter": "ID filtro:",
"abusefilter-history-select-submit": "Restringi",
"abusefilter-history-diff": "Modifiche",
"abusefilter-history-error-hidden": "Il filtro richiesto è nascosto, non è possibile visualizzarne la cronologia.",
"abusefilter-exception-unexpectedatend": "\"$2\" non previsto in corrispondenza del carattere $1.",
"abusefilter-exception-expectednotfound": "$2 mancante in corrispondenza del carattere $1, presente invece $3 $4.",
"abusefilter-exception-unrecognisedkeyword": "Parola chiave $2 sconosciuta in corrispondenza del carattere $1.",
- "abusefilter-exception-unexpectedtoken": "Token intatteso \"$3\" (di tipo $2) in corrispondenza del carattere $1.",
+ "abusefilter-exception-unexpectedtoken": "Token inatteso \"$3\" (di tipo $2) in corrispondenza del carattere $1.",
"abusefilter-exception-unclosedstring": "Stringa iniziata in corrispondenza del carattere $1 non terminata.",
"abusefilter-exception-invalidoperator": "Operatore \"$2\" non valido in corrispondenza del carattere $1.",
"abusefilter-exception-unrecognisedtoken": "Token \"$2\" non riconosciuto in corrispondenza del carattere $1.",
- "abusefilter-exception-noparams": "Parametri mancanti per la funzione \"$2\" in corrispondenza del carattere $1.",
+ "abusefilter-exception-noparams": "Parametri mancanti per la funzione \"$2\" in corrispondenza del carattere $1.\n{{PLURAL:$3|Previsto un argomento|Previsti $3 argomenti}}.",
"abusefilter-exception-dividebyzero": "Tentativo di dividere $2 per zero in corrispondenza del carattere $1.",
"abusefilter-exception-unrecognisedvar": "Variabile $2 non riconosciuta in corrispondenza del carattere $1.",
"abusefilter-exception-notenoughargs": "Argomenti per la funzione $2 chiamata al carattere $1 non sufficienti.\n{{PLURAL:$3|Previsto $3 argomento|Previsti $3 argomenti}}, {{PLURAL:$4|ottenuto|ottenuti}} $4",
- "abusefilter-exception-regexfailure": "Errore nell'espressione regolare \"$3\" al carattere $1: \"$2\"",
+ "abusefilter-exception-regexfailure": "Errore nell'espressione regolare \"$2\" al carattere $1.",
"abusefilter-exception-overridebuiltin": "Sovrascrittura illegale di variabile predefinita \"$2\" al carattere $1.",
- "abusefilter-exception-outofbounds": "Richiesta di voce inesistente dell'elenco $2 (dimensione lista = $3) al carattere $1.",
- "abusefilter-exception-notlist": "Richiesta di un elemento di array da un non array al carattere $1.",
+ "abusefilter-exception-outofbounds": "Richiesta di voce inesistente dell'array $2 (dimensione array = $3) al carattere $1.",
+ "abusefilter-exception-notarray": "Richiesta di un elemento di array da un non array al carattere $1.",
+ "abusefilter-exception-unclosedcomment": "Commento non chiuso in corrispondenza del carattere $1.",
+ "abusefilter-exception-invalidiprange": "Intervallo IP \"$2\" non valido al carattere $1",
+ "abusefilter-exception-disabledvar": "La variabile $2 al carattere $1 non è più utilizzabile.",
"abusefilter-action-tag": "Etichetta",
"abusefilter-action-throttle": "Rallenta",
"abusefilter-action-warn": "Avvisa",
- "abusefilter-action-blockautopromote": "Blocca autopromuovi",
+ "abusefilter-action-blockautopromote": "Blocca autopromozione",
"abusefilter-action-block": "Blocca",
"abusefilter-action-degroup": "Rimuovi dai gruppi",
- "abusefilter-action-rangeblock": "Blocca intervallo",
+ "abusefilter-action-rangeblock": "Blocca classe di indirizzi",
"abusefilter-action-disallow": "Impedisci",
"abusefilter-revert-title": "Annulla tutte le modifiche apportate dal filtro $1",
"abusefilter-revert-intro": "Questo modulo consente di annullare tutte le modifiche apportate dal filtro anti abusi $1.\nUtilizzare questo strumento con particolare attenzione.",
@@ -363,8 +461,9 @@
"abusefilter-revert-periodstart": "Inizio del periodo:",
"abusefilter-revert-periodend": "Fine del periodo:",
"abusefilter-revert-search": "Selezionare le azioni",
- "abusefilter-revert-filter": "Filtro:",
+ "abusefilter-revert-filter": "ID filtro:",
"abusefilter-revert-preview-intro": "Di seguito sono elencate le azioni effettuate dal filtro anti abusi che verranno annullate da quest'azione.\nVerificale con cura e fai clic su \"{{int:abusefilter-revert-confirm}}\" per confermare la selezione.",
+ "abusefilter-revert-confirm-legend": "Conferma il ripristino",
"abusefilter-revert-confirm": "Conferma",
"abusefilter-revert-success": "Sono state annullate tutte le azioni effettuate dal [[Special:AbuseFilter/$1|filtro anti abusi $2]].",
"abusefilter-revert-reason": "Annullamento automatico di tutte le azioni effettuate dal filtro anti abusi $1.\nMotivo indicato: $2",
@@ -375,13 +474,21 @@
"abusefilter-test-load-filter": "Carica filtro con ID:",
"abusefilter-test-submit": "Verifica",
"abusefilter-test-load": "Carica",
- "abusefilter-test-user": "Modifiche apportate dall'utente:",
- "abusefilter-test-period-start": "Modifiche successive al:",
- "abusefilter-test-period-end": "Modifiche precedenti al:",
- "abusefilter-test-page": "Modifiche apportate alla pagina:",
- "abusefilter-test-shownegative": "Mostra le modifiche che non corrispondono al filtro",
+ "abusefilter-test-user": "Cambiamenti apportati dall'utente:",
+ "abusefilter-test-nobots": "Nascondi le modifiche dei bot",
+ "abusefilter-test-period-start": "Cambiamenti successivi al:",
+ "abusefilter-test-period-end": "Cambiamenti precedenti al:",
+ "abusefilter-test-page": "Cambiamenti apportati alla pagina:",
+ "abusefilter-test-shownegative": "Mostra anche i cambiamenti che non attivano il filtro",
"abusefilter-test-syntaxerr": "Il filtro inserito contiene un errore di sintassi.\nPer ottenere una spiegazione completa, fai clic sul pulsante \"{{int:abusefilter-edit-check}}\".",
"abusefilter-test-badtitle": "Il titolo della pagina che hai inserito non è valido; contiene uno o più caratteri che non possono essere utilizzati nei titoli.",
+ "abusefilter-test-action": "Tipo di azione:",
+ "abusefilter-test-search-type-all": "Tutte le azioni",
+ "abusefilter-test-search-type-edit": "Modifiche",
+ "abusefilter-test-search-type-move": "Spostamenti",
+ "abusefilter-test-search-type-delete": "Cancellazioni",
+ "abusefilter-test-search-type-upload": "Caricamenti",
+ "abusefilter-test-search-type-createaccount": "Creazioni di utenze",
"abusefilter-changeslist-examine": "esamina",
"abusefilter-examine": "Esamina le singole modifiche",
"abusefilter-examine-intro": "Questa pagina consente di esaminare le variabili generate dal filtro anti abusi per una particolare modifica, e di provare il funzionamento dei filtri su di essa.",
@@ -408,6 +515,8 @@
"abusefilter-topnav-import": "Importa filtro",
"abusefilter-log-name": "Filtro anti abusi",
"abusefilter-log-header": "Il registro mostra un riassunto delle modifiche effettuate sui filtri.\nPer i dettagli completi, consultare [[Special:AbuseFilter/history|l'elenco]] delle modifiche più recenti agli stessi.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|ha creato}} $4 ($5)",
+ "abusefilter-logentry-modify": "$1 {{GENDER:$2|ha modificato}} $4 ($5)",
"abusefilter-log-noresults": "Nessun risultato",
"abusefilter-diff-title": "Differenze tra le versioni",
"abusefilter-diff-item": "Elemento",
@@ -422,16 +531,16 @@
"abusefilter-import-submit": "Importa dati",
"abusefilter-group-default": "Predefinito",
"abusefilter-http-error": "Si è verificato un errore HTTP: $1.",
- "apihelp-abusefilterchecksyntax-example-1": "Controlla la sintassi di un filtro valido",
- "apihelp-abusefilterchecksyntax-example-2": "Controlla la sintassi di un filtro non valido",
- "apihelp-abusefilterevalexpression-description": "Valuta un'espressione AbuseFilter.",
- "apihelp-abusefilterevalexpression-param-expression": "L'espressione da valutare.",
- "apihelp-abusefilterevalexpression-example-1": "Calcolare una semplice espressione",
- "apihelp-abusefilterunblockautopromote-param-user": "Nome utente dell'utente che vuoi sbloccare.",
- "apihelp-query+abusefilters-param-show": "Mostra solo i filtri che soddisfano questi criteri.",
- "apihelp-query+abusefilters-param-limit": "Il numero massimo di filtri da elencare.",
- "apihelp-query+abusefilters-param-prop": "Quali proprietà ottenere.",
- "apihelp-query+abusefilters-example-1": "Elenca i filtri pubblici abilitati",
- "apihelp-query+abusefilters-example-2": "Mostra alcuni dettagli sui filtri",
- "apihelp-query+abuselog-param-prop": "Quali proprietà ottenere."
+ "abusefilter-view-private-submit": "Visualizza i dettagli privati",
+ "abusefilter-view-private": "Visualizza i dettagli privati",
+ "abusefilter-view-private-reason": "Motivazione per visualizzare i dettagli privati:",
+ "abusefilter-log-details-id": "ID registro",
+ "abusefilter-invalid-request": "Richiesta non valida! È necessario accedere ai dettagli privati del registro tramite il modulo su [[Special:AbuseLog/$1]] e fornire una motivazione.",
+ "abusefilter-invalid-request-noid": "Richiesta non valida! È necessario accedere ai dettagli privati del registro attraverso il modulo sulla pagina dei dettagli del registro abusi fornendo una motivazione.",
+ "log-description-abusefilterprivatedetails": "Questo registro contiene un elenco di accessi ai dettagli privati del registro abusi.",
+ "abusefilter-noreason": "Avviso: per vedere i dettagli privati di questo registro, devi fornire una motivazione.",
+ "abusefilter-log-ip-not-available": "Non disponibile",
+ "abusefilter-tag-reserved": "L'etichetta <code>abusefilter-condition-limit</code> è riservata per utilizzo interno da parte del filtro anti abusi.",
+ "tag-abusefilter-condition-limit": "limite di condizioni raggiunto",
+ "tag-abusefilter-condition-limit-description": "Modifiche o altri eventi che non sono stati controllati da tutti i [[Special:AbuseFilter|filtri anti abusi]] attivi ([[mw:Extension:AbuseFilter/Conditions|aiuto]])."
}
diff --git a/AbuseFilter/i18n/ja.json b/AbuseFilter/i18n/ja.json
index c9cad610..b2cbae17 100644
--- a/AbuseFilter/i18n/ja.json
+++ b/AbuseFilter/i18n/ja.json
@@ -19,14 +19,18 @@
"W.CC",
"Sujiniku",
"Azeha",
- "Matma Rex"
+ "Matma Rex",
+ "Aefgh39622",
+ "Omotecho",
+ "Yusuke1109",
+ "Suyama"
]
},
"abusefilter-desc": "編集に対して、自動的な経験則を適用する",
"abusefilter": "不正利用フィルター設定",
"abuselog": "不正利用記録",
"abusefilter-intro": "不正利用フィルターの管理インターフェイスにようこそ。\n不正利用フィルターは、あらゆる操作に対して自動的な発見的方法を適用する、自動化されたソフトウェア機構です。\nこのインターフェイスでは、定義済みのフィルターを一覧表示してそれらを変更できます。",
- "abusefilter-mustbeeditor": "セキュリティ上の理由から、不正利用フィルターを変更できる権限を持つ利用者だけがこのインターフェイスを使用できます。",
+ "abusefilter-mustviewprivateoredit": "セキュリティ上の理由から、不正利用フィルターを閲覧または変更できる権限を持つ利用者だけがこのインターフェイスを使用できます。",
"abusefilter-warning": "'''警告:''' 行われた操作は自動的に有害と判断されました。\n建設的ではない操作は速やかに差し戻されます。\n被害程度が大きい破壊的編集や頻繁な破壊行為は、アカウントまたはIPアドレスのブロックにつながります。\n行なった操作が確かに建設的だと考える場合は、もう一度投稿してください。\n操作に対して発動した違反規則の概略は次の通りです: $1",
"abusefilter-disallowed": "行なった操作は、有害であると自動的に判断されたため実行できませんでした。\n確かに建設的な操作であると考える場合は、行なおうとしていた操作について管理者にお知らせください。\n操作に対して発動した違反規則の概略は以下の通りです: $1",
"abusefilter-blocked-display": "行なわれた操作は自動的に有害と判断されたため、実行を中断しました。\n同時に{{SITENAME}}を保護するために、利用者アカウントと関連するすべてのIPアドレスが投稿ブロックされました。\nこの措置が誤りである場合は、管理者に連絡してください。\n操作に対して発動した違反規則の概略は次の通りです: $1",
@@ -41,6 +45,7 @@
"right-abusefilter-log": "不正利用記録を閲覧",
"right-abusefilter-log-detail": "不正利用記録の詳細項目を閲覧",
"right-abusefilter-private": "不正利用記録内の非公開データを閲覧",
+ "right-abusefilter-private-log": "不正利用フィルター非公開記録の調査記録を閲覧",
"right-abusefilter-modify-restricted": "制限された操作を含む不正利用フィルターを変更",
"right-abusefilter-revert": "指定した不正利用フィルターによるすべての変更を差し戻す",
"right-abusefilter-view-private": "非公開の不正利用フィルターを閲覧",
@@ -52,10 +57,12 @@
"action-abusefilter-view": "不正利用フィルターの閲覧",
"action-abusefilter-log": "不正利用記録の閲覧",
"action-abusefilter-log-detail": "不正利用記録の詳細項目の閲覧",
- "action-abusefilter-private": "不正利用記録内の非公開データの閲覧",
+ "action-abusefilter-private": "不正利用フィルターの非公開記録を調査",
+ "action-abusefilter-private-log": "不正利用フィルター非公開記録の調査記録を閲覧",
"action-abusefilter-modify-restricted": "制限された操作を含む不正利用フィルターの変更",
"action-abusefilter-revert": "指定した不正利用フィルターによるすべての変更の差し戻し",
"action-abusefilter-view-private": "非公開の不正利用フィルターの閲覧",
+ "action-abusefilter-log-private": "非公開の不正利用フィルター記録の閲覧",
"abusefilter-log": "不正利用フィルター記録",
"abusefilter-log-summary": "この記録はフィルターが発動した全操作の一覧を表示しています。",
"abusefilter-log-search": "不正利用記録を検索",
@@ -63,6 +70,16 @@
"abusefilter-log-search-filter": "フィルターID (\"|\" 区切り):",
"abusefilter-log-search-title": "ページ名:",
"abusefilter-log-search-wiki": "ウィキ:",
+ "abusefilter-log-search-impact": "影響:",
+ "abusefilter-log-search-impact-all": "すべての操作",
+ "abusefilter-log-search-impact-saved": "保存した編集のみ",
+ "abusefilter-log-search-impact-not-saved": "未保存の編集のみ",
+ "abusefilter-log-search-entries-label": "可視性:",
+ "abusefilter-log-search-entries-all": "すべての項目",
+ "abusefilter-log-search-entries-hidden": "非表示項目のみ",
+ "abusefilter-log-search-entries-visible": "表示項目のみ",
+ "abusefilter-log-search-action-other": "その他",
+ "abusefilter-log-search-action-taken-any": "任意",
"abusefilter-log-search-submit": "検索",
"abusefilter-log-entry": "$1: $2 が $4 で「$3」操作を{{GENDER:$8|行い}}不正利用フィルターが発動しました。\n対処操作: $5、\nフィルター解説: $6",
"abusefilter-log-entry-withdiff": "$1: $2 が $4 で「$3」操作を{{GENDER:$8|行い}}不正利用フィルターが発動しました。\n対処操作: $5、\nフィルター解説: $6 ($7)",
@@ -76,28 +93,37 @@
"abusefilter-log-details-var": "変数",
"abusefilter-log-details-val": "値",
"abusefilter-log-details-vars": "対処操作の設定",
- "abusefilter-log-details-private": "個人データ",
+ "abusefilter-log-details-private": "非公開記録の詳細",
"abusefilter-log-details-ip": "発信元のIPアドレス",
+ "abusefilter-log-details-checkuser": "利用者の調査",
"abusefilter-log-noactions": "なし",
"abusefilter-log-details-diff": "編集でなされた変更",
"abusefilter-log-linkoncontribs": "不正利用記録",
"abusefilter-log-linkoncontribs-text": "{{GENDER:$1|この利用者}}の不正利用記録",
+ "abusefilter-log-linkonhistory": "編集フィルター記録を表示",
"abusefilter-log-hidden": "(隠された項目)",
"abusefilter-log-hidden-implicit": "(版が削除されているため非表示)",
"abusefilter-log-cannot-see-details": "この項目の詳細を見る権限がありません。",
+ "abusefilter-log-cannot-see-private-details": "あなたは非公開記録を閲覧する権限がありません",
+ "abusefilter-log-nonexistent": "指定された ID の項目は存在しません。",
"abusefilter-log-details-hidden": "この項目は公開記録から隠されているため、あなたは詳細を閲覧できません。",
"abusefilter-log-private-not-included": "指定したフィルターIDのうち一つ以上はプライベート状態です。プライベートになっているフィルターの詳細を見ることは許可されていないため、これらのフィルターは検索されません。",
"abusefilter-log-hide-legend": "記録項目を隠す",
"abusefilter-log-hide-id": "記録項目ID:",
"abusefilter-log-hide-hidden": "公開記録から、この項目を隠す",
"abusefilter-log-hide-reason": "理由:",
+ "abusefilter-log-hide-reason-other": "その他、または追加の理由:",
"abusefilter-log-hide-forbidden": "不正利用記録の項目を隠す権限がありません。",
- "abusefilter-logentry-suppress": "「[[$1]]」を非公開",
- "abusefilter-logentry-unsuppress": "「[[$1]]」を公開",
"logentry-abusefilter-hit": "$1 が $3 で「$5」操作を{{GENDER:$2|行い}}、 $4 が{{GENDER:$2|作動}}しました。対処操作: $6 ($7)",
+ "log-action-filter-abusefilter": "フィルター変更の種類:",
+ "log-action-filter-abusefilter-create": "フィルターの新規作成",
+ "log-action-filter-abusefilter-modify": "フィルターの変更",
+ "logentry-abusefilterprivatedetails-access": "$1 は $3 の非公開記録を{{GENDER:$2|取得しました}}。",
+ "abusefilterprivatedetails-log-name": "不正利用フィルター非公開記録の調査記録",
"abusefilter-management": "不正利用フィルター管理",
"abusefilter-list": "すべてのフィルター",
"abusefilter-list-id": "フィルターID",
+ "abusefilter-list-pattern": "パターン",
"abusefilter-list-status": "状態",
"abusefilter-list-public": "公開解説",
"abusefilter-list-consequences": "対処操作",
@@ -126,8 +152,12 @@
"abusefilter-list-options-scope-local": "ローカル規則のみ",
"abusefilter-list-options-scope-global": "グローバル規則のみ",
"abusefilter-list-options-scope-all": "ローカルおよびグローバル規則",
- "abusefilter-list-options-disabled": "無効化されたフィルター:",
"abusefilter-list-options-hidedisabled": "無効化されたフィルターを隠す",
+ "abusefilter-list-options-searchpattern": "パターンを挿入",
+ "abusefilter-list-options-searchoptions": "検索モード:",
+ "abusefilter-list-options-search-rlike": "正規表現",
+ "abusefilter-list-options-search-irlike": "正規表現で大文字小文字を区別しない",
+ "abusefilter-list-regexerror": "検索中にエラーが発生しました。正規表現シンタックスエラー。",
"abusefilter-list-options-submit": "更新",
"abusefilter-tools-text": "不正利用フィルターの作成およびデバッグに役立つ場合があるツールです。",
"abusefilter-tools-expr": "式の試験ツール",
@@ -146,11 +176,13 @@
"abusefilter-edit-status-label": "統計:",
"abusefilter-edit-status": "最近の$1{{PLURAL:$1|操作}}のうち、このフィルターは$2件($3%)に対して発動しました。",
"abusefilter-edit-status-profile": "最近の$1{{PLURAL:$1|操作}}のうち、このフィルターは$2件($3%)に対して発動しました。平均して、実行時間は$4ミリ秒で$5件の条件制限を消費しました。",
- "abusefilter-edit-throttled": "'''警告:''' このフィルターは安全対策により自動的に無効化されました。\n操作の$1%以上に一致するという制限に達しました。",
+ "abusefilter-edit-throttled-warning": "'''警告:''' このフィルタは自動的に有害なフラグが立てられました。安全対策として、以下のアクションは実行されません($1)。\nこの制限を解除する条件を確認して[[mw:Extension:AbuseFilter/Conditions|最適化]]してください",
"abusefilter-edit-new": "新規フィルター",
"abusefilter-edit-save": "フィルターを保存",
"abusefilter-edit-id": "フィルターID:",
+ "abusefilter-edit-switch-editor": "エディターを切り替え",
"abusefilter-edit-description": "説明:\n:''(ログで公開)''",
+ "abusefilter-edit-field-description": "説明",
"abusefilter-edit-group": "フィルターグループ:",
"abusefilter-edit-flags": "フラグ:",
"abusefilter-edit-enabled": "このフィルターを有効にする",
@@ -168,20 +200,26 @@
"abusefilter-edit-action-blockautopromote": "利用者の自動承認ステータスを取り消す",
"abusefilter-edit-action-degroup": "利用者をすべての特権グループから除く",
"abusefilter-edit-action-block": "利用者および/またはIPアドレスを編集ブロックする",
+ "abusefilter-edit-action-blocktalk": "利用者やIPユーザーが自分のトークページを編集できないようにする",
"abusefilter-edit-action-throttle": "利用者が設定された速度限界を越えた場合のみ、対処操作を発動する",
- "abusefilter-edit-action-rangeblock": "利用者の発信元を/16レンジでブロックする",
+ "abusefilter-edit-action-rangeblock": "利用者の発信元を該当する IP レンジでブロックする",
"abusefilter-edit-action-tag": "後で再検討するために編集にタグを付ける",
"abusefilter-edit-throttle-count": "許可される操作数:",
"abusefilter-edit-throttle-period": "期間:",
- "abusefilter-edit-throttle-seconds": "$1{{PLURAL:$1|秒}}",
"abusefilter-edit-throttle-groups": "制限をグループ化する:\n:''(1行に1つ、複数項目はカンマ区切り)''",
+ "abusefilter-edit-throttle-ip": "IP アドレス",
+ "abusefilter-edit-throttle-user": "利用者アカウント",
+ "abusefilter-edit-throttle-creationdate": "アカウント作成時のサーバ時刻",
+ "abusefilter-edit-throttle-editcount": "編集回数",
+ "abusefilter-edit-throttle-site": "サイト全体",
+ "abusefilter-edit-throttle-page": "ページ",
"abusefilter-edit-warn-message": "警告に使用するシステムメッセージ:",
"abusefilter-edit-warn-other": "他のメッセージ",
"abusefilter-edit-warn-other-label": "他のメッセージのページ名:\n:''(接頭辞 MediaWiki は省く)''",
"abusefilter-edit-warn-actions": "操作:",
"abusefilter-edit-warn-preview": "選択したメッセージをプレビュー",
"abusefilter-edit-warn-edit": "選択したメッセージを作成または編集",
- "abusefilter-edit-tag-tag": "適用する[[Special:Tags|タグ]] (一行に一つ):",
+ "abusefilter-edit-tag-tag": "適用する[[Special:Tags|タグ]]:",
"abusefilter-edit-denied": "このフィルターは非公開とされているため、あなたは詳細を閲覧できません。",
"abusefilter-edit-main": "フィルターの設定",
"abusefilter-edit-done-subtitle": "フィルターを編集しました",
@@ -198,7 +236,7 @@
"abusefilter-edit-export": "このフィルターを別のウィキにエクスポートする",
"abusefilter-edit-syntaxok": "構文エラーは検出されませんでした。",
"abusefilter-edit-syntaxerr": "構文エラーを検出しました: $1",
- "abusefilter-edit-bad-tags": "指定したタグには無効なものが1つ以上あります。\nタグは短くする必要があり、特殊文字を含んではなりません。",
+ "abusefilter-edit-bad-tags": "指定したタグには無効なものが1つ以上あります。\nタグは短くする必要があり、特殊文字を含まず、他のソフトウェアと重複してはいけません。新しいタグ名を選択してみてください。",
"abusefilter-edit-notallowed": "あなたは不正利用フィルターを作成または編集することが許可されていません",
"abusefilter-edit-notallowed-global": "あなたはグローバル不正利用フィルターを作成または編集することが許可されていません",
"abusefilter-edit-notallowed-global-custom-msg": "グローバルフィルターはカスタムの警告メッセージには対応していません",
@@ -261,19 +299,18 @@
"abusefilter-edit-builder-vars-oldsize": "古いページのサイズ",
"abusefilter-edit-builder-vars-removedlines": "編集で削除された行",
"abusefilter-edit-builder-vars-summary": "編集の要約や理由",
- "abusefilter-edit-builder-vars-article-id": "ページ ID",
- "abusefilter-edit-builder-vars-article-ns": "ページの名前空間",
- "abusefilter-edit-builder-vars-article-text": "ページ名 (名前空間を除く)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "完全なページ名",
- "abusefilter-edit-builder-vars-article-views": "ページ閲覧回数",
+ "abusefilter-edit-builder-vars-page-id": "ページ ID",
+ "abusefilter-edit-builder-vars-page-ns": "ページの名前空間",
+ "abusefilter-edit-builder-vars-page-title": "ページ名 (名前空間を除く)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "完全なページ名",
"abusefilter-edit-builder-vars-movedfrom-id": "移動元のページID",
"abusefilter-edit-builder-vars-movedfrom-ns": "移動元ページの名前空間",
- "abusefilter-edit-builder-vars-movedfrom-text": "移動元のページ名",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "移動元の完全なページ名",
+ "abusefilter-edit-builder-vars-movedfrom-title": "移動元のページ名",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "移動元の完全なページ名",
"abusefilter-edit-builder-vars-movedto-id": "移動先のページID",
"abusefilter-edit-builder-vars-movedto-ns": "移動先ページの名前空間",
- "abusefilter-edit-builder-vars-movedto-text": "移動先のページ名",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "移動先の完全なページ名",
+ "abusefilter-edit-builder-vars-movedto-title": "移動先のページ名",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "移動先の完全なページ名",
"abusefilter-edit-builder-vars-user-editcount": "利用者の編集回数",
"abusefilter-edit-builder-vars-user-age": "利用者アカウントの登録期間",
"abusefilter-edit-builder-vars-user-name": "利用者のアカウント名",
@@ -326,6 +363,7 @@
"abusefilter-history-filterid": "フィルター",
"abusefilter-history-select-legend": "絞り込み検索",
"abusefilter-history-select-user": "利用者:",
+ "abusefilter-history-select-filter": "フィルターID:",
"abusefilter-history-select-submit": "絞り込み",
"abusefilter-history-diff": "差分",
"abusefilter-history-error-hidden": "あなたが要求したフィルターは公開されておらず、履歴を閲覧することができません。",
@@ -340,10 +378,10 @@
"abusefilter-exception-dividebyzero": "$1文字目に$2に対するゼロ除算があります。",
"abusefilter-exception-unrecognisedvar": "$1文字目に認識できない変数「$2」があります。",
"abusefilter-exception-notenoughargs": "$1 文字目で呼び出されている関数 $2 の引数が不足しています。\n$3 個の{{PLURAL:$3|引数}}があるべきですが $4 個しかありません",
- "abusefilter-exception-regexfailure": "$1 文字目の正規表現「$3」にエラーがあります: \"$2\"",
+ "abusefilter-exception-regexfailure": "$1 文字目の正規表現「$2」にエラーがあります。",
"abusefilter-exception-overridebuiltin": "$1 文字目で、組み込みの変数「$2」に誤って上書きしてしまっています。",
"abusefilter-exception-outofbounds": "$1 文字目で、存在しない一覧項目 $2 (一覧のサイズは $3) を要求しています。",
- "abusefilter-exception-notlist": "$1文字目で非配列の配列要素を要求しています。",
+ "abusefilter-exception-notarray": "$1文字目で非配列の配列要素を要求しています。",
"abusefilter-action-tag": "タグ付け",
"abusefilter-action-throttle": "速度を制限",
"abusefilter-action-warn": "警告",
@@ -359,8 +397,9 @@
"abusefilter-revert-periodstart": "期間始め:",
"abusefilter-revert-periodend": "期間終わり:",
"abusefilter-revert-search": "対処操作を選択",
- "abusefilter-revert-filter": "フィルター:",
+ "abusefilter-revert-filter": "フィルター識別子:",
"abusefilter-revert-preview-intro": "以下は、この操作によって差し戻される、不正利用フィルターによる対処操作です。\n注意深く確認し、「{{int:abusefilter-revert-confirm}}」をクリックして選択を確定してください。",
+ "abusefilter-revert-confirm-legend": "巻き戻しを確認",
"abusefilter-revert-confirm": "確定",
"abusefilter-revert-success": "[[Special:AbuseFilter/$1|フィルター $2]] に起因した、不正利用フィルターによるすべての対処操作を差し戻しました。",
"abusefilter-revert-reason": "フィルター $1 に起因した、不正利用フィルターによるすべての対処操作の自動差し戻し。理由: $2",
@@ -372,6 +411,7 @@
"abusefilter-test-submit": "テスト",
"abusefilter-test-load": "読み込み",
"abusefilter-test-user": "変更した利用者:",
+ "abusefilter-test-nobots": "ボットによる編集を表示しない",
"abusefilter-test-period-start": "これ以降の変更:",
"abusefilter-test-period-end": "これ以前の変更:",
"abusefilter-test-page": "変更されるページ:",
@@ -404,7 +444,8 @@
"abusefilter-topnav-import": "フィルターのインポート",
"abusefilter-log-name": "不正利用フィルター記録",
"abusefilter-log-header": "この記録はフィルターに対してなされた変更の要約を表示しています。全詳細は、最近のフィルターの変更[[Special:AbuseFilter/history|一覧]]をご覧ください。",
- "abusefilter-log-entry-modify": "$1 を変更 ($2)",
+ "abusefilter-logentry-create": "$1 が $4 を{{GENDER:$2|作成しました}} ($5)",
+ "abusefilter-logentry-modify": "$1 が $4 ($5) を{{GENDER:$2|変更しました}}",
"abusefilter-log-noresults": "結果なし",
"abusefilter-diff-title": "版間での差分",
"abusefilter-diff-item": "項目",
@@ -419,23 +460,15 @@
"abusefilter-import-submit": "取り込む",
"abusefilter-group-default": "既定",
"abusefilter-http-error": "HTTPエラーが発生: $1",
- "apihelp-abusefilterevalexpression-description": "不正利用フィルターの式を評価します。",
- "apihelp-abusefilterevalexpression-param-expression": "評価する式。",
- "apihelp-abusefilterevalexpression-example-1": "簡単な式を評価します",
- "apihelp-abusefilterunblockautopromote-param-user": "ブロック解除する利用者の利用者名。",
- "apihelp-query+abusefilters-description": "不正利用フィルターの詳細を表示する。",
- "apihelp-query+abusefilters-param-startid": "列挙の始点となるフィルターID。",
- "apihelp-query+abusefilters-param-endid": "列挙の終点となるフィルターID。",
- "apihelp-query+abusefilters-param-limit": "表示するフィルターの最大数。",
- "apihelp-query+abusefilters-param-prop": "取得するプロパティ。",
- "apihelp-query+abusefilters-example-1": "有効化されている公開フィルターを一覧表示する",
- "apihelp-query+abusefilters-example-2": "フィルターに関する詳細の一部を表示します",
- "apihelp-query+abuselog-param-start": "列挙の始点となるタイムスタンプ。",
- "apihelp-query+abuselog-param-end": "列挙の終点となるタイムスタンプ。",
- "apihelp-query+abuselog-param-user": "与えられた利用者またはIPアドレスによる項目のみを表示する。",
- "apihelp-query+abuselog-param-title": "与えられたページに関する項目のみを表示する。",
- "apihelp-query+abuselog-param-limit": "一覧表示する項目の最大量。",
- "apihelp-query+abuselog-param-prop": "取得するプロパティ。",
- "apihelp-query+abuselog-example-1": "最近の不正利用記録を表示する",
- "apihelp-query+abuselog-example-2": "[[API]] の最近の記録項目を表示する"
+ "abusefilter-view-private-submit": "非公開記録を参照",
+ "abusefilter-view-private": "非公開記録を参照",
+ "abusefilter-view-private-reason": "非公開記録の調査理由",
+ "abusefilter-log-details-id": "記録ID",
+ "abusefilter-invalid-request": "無効なリクエスト! [[Special:AbuseLog/$1]]のフォームを使ってプライベートログの詳細にアクセスし、理由を提示する必要があります。",
+ "abusefilter-invalid-request-noid": "無効なリクエスト! 不正利用ログの詳細ページのフォームからプライベートログの詳細にアクセスし、理由を提示する必要があります。",
+ "log-description-abusefilterprivatedetails": "以下は不正利用フィルターの非公開記録を調査した日時の一覧です。",
+ "abusefilter-noreason": "警告: 非公開記録を閲覧するには、理由を入力する必要があります",
+ "abusefilter-log-ip-not-available": "参照不可",
+ "tag-abusefilter-condition-limit": "条件の上限に達しました",
+ "tag-abusefilter-condition-limit-description": "[[Special:AbuseFilter|不正利用フィルター]]([[mw:Extension:AbuseFilter/Conditions|ヘルプ]])によって確認できなかった編集やその他のイベント。"
}
diff --git a/AbuseFilter/i18n/jv.json b/AbuseFilter/i18n/jv.json
index 1a5cb2d4..a304f014 100644
--- a/AbuseFilter/i18n/jv.json
+++ b/AbuseFilter/i18n/jv.json
@@ -5,40 +5,39 @@
"පසිඳු කාවින්ද"
]
},
- "abusefilter-desc": "Patrapaké pamriksan heuristik otomatis nèng suntingan",
+ "abusefilter-desc": "Patrapaké pamriksan heuristik otomatis ing besutan",
"abusefilter": "Setèlan saringan salah-guna",
"abuselog": "Log planggaran",
- "abusefilter-intro": "Sunger Rawuh ing antarmuka panatan Saringan Planggaran.\nSaringan Planggaran kuwi mékanismé piranti alus otomatis sing matrapaké héuristik otomatis nèng kabèh laku.\nAntarmuka iki nuduhaké daptar saringan sing wis ditemtokaké, lan nglilakaké kanggo diowah.",
- "abusefilter-mustbeeditor": "Kanggo alesan kamanan, namung panganggo sing nduwèni hak ngowah saringan planggaran sing bisa nganggo antarmuka iki.",
- "abusefilter-warning": "'''Pènget:''' Tumindak iki wis otomatis tinengeran mbebayani.\nTumindak sing ora konstruktif bakal gagé kabalèkaké, lan besutan sing ora cetha utawa mbolan-balèni bakal njalari akun utawa alamat IP-né panjenengan kablokir.\nYèn yakin tumindak iki konstruktif, panjenengan bisa kirim iki manèh saperlu konfirmasi.\nKaterangan ringkes ngenani palanggaran sing jumbuh karo tumindak panjenengan ya iku: $1",
- "abusefilter-disallowed": "Tumindak iki otomatis konangan mbebayani, mula ora diidinaké.\nManawa yakin tumindaké panjenengan konstruktif, mangga kandhani administrator apa sing arep panjenengan lakoni.\nKaterangan ringkes palanggaran sing jumbuh karo tumindaké panjenengan ya iku: $1",
- "abusefilter-blocked-display": "Laku iki otomatis dianggep mbebayani,\nlan Sampéyan ditolak déning sistem.\nMinangka tambahan, kanggo njagani {{SITENAME}}, akun panganggo lan kabèh sing ana kaitané karo alamat IP Sampéyan wis diblokir saka nyunting.\nYèn iki amarga ana kasalahan, mangga hubungi pangurus.\nKatrangan ringkes aturan planggaran sing padha karo lakuné Sampéyan: $1",
- "abusefilter-autopromote-blocked": "Tumindak iki otomatis kaciri mbebayani, lan ora diidinaké.\nSaliyané iku, minangka upaya pangayoman, sawenèh hak sing ajeg kawènèhaké marang akun-akun sing ana bakal sawetara dijabut saka akun panjenengan.\nKaterangan ringkes ngenani palanggaran sing jumbuh tumindaké panjenengan ya iku: $1",
+ "abusefilter-intro": "Sunger Rawuh ing antarmuka panatan Saringan Planggaran.\nSaringan Planggaran kuwi mékanismé piranti alus otomatis kang matrapaké héuristik otomatis ing kabèh laku.\nAntarmuka iki nuduhaké daptar saringan kang wis ditemtokaké, lan nglilakaké kanggo diowah.",
+ "abusefilter-warning": "'''Pènget:''' Tumindak iki wis otomatis tinengeran mbebayani.\nTumindak kang ora konstruktif bakal gagé kabalèkaké, lan besutan kang ora cetha utawa mbolan-balèni bakal njalari akun utawa alamat IP-né panjenengan kablokir.\nYèn yakin tumindak iki konstruktif, panjenengan bisa kirim iki manèh saperlu konfirmasi.\nKaterangan ringkes ngenani palanggaran kang jumbuh karo tumindak panjenengan ya iku: $1",
+ "abusefilter-disallowed": "Tumindak iki otomatis konangan mbebayani, mula ora diidinaké.\nManawa yakin tumindaké panjenengan konstruktif, mangga kandhani administrator apa kang arep panjenengan lakoni.\nKaterangan ringkes palanggaran kang jumbuh karo tumindaké panjenengan ya iku: $1",
+ "abusefilter-blocked-display": "Laku iki otomatis dianggep mbebayani,\nlan panjenengan ditolak déning sistem.\nMinangka tambahan, kanggo njagani {{SITENAME}}, akun panganggo lan kabèh kang ana kaitané karo alamat IP panjenengan wis diblokir saka mbesut.\nYèn iki amarga ana kasalahan, mangga hubungi pangurus.\nKatrangan ringkes aturan planggaran kang padha karo lakuné panjenengan: $1",
+ "abusefilter-autopromote-blocked": "Tumindak iki otomatis kaciri mbebayani, lan ora diidinaké.\nSaliyané iku, minangka upaya pangayoman, sawenèh hak kang ajeg kawènèhaké marang akun-akun kang ana bakal sawetara dijabut saka akun panjenengan.\nKaterangan ringkes ngenani palanggaran kang jumbuh tumindaké panjenengan ya iku: $1",
"abusefilter-blocker": "Saringan planggaran",
- "abusefilter-blockreason": "Otomatis diblokir déning saringan planggaran.\nKatrangan ngenani aturan sing cocok: $1",
+ "abusefilter-blockreason": "Otomatis diblokir déning saringan planggaran.\nKatrangan ngenani aturan kang cocok: $1",
"abusefilter-degroupreason": "Hak otomatis dijabut déning saringan planggaran.\nKatrangan aturan: $1",
"abusefilter-accountreserved": "Jeneng akun iki dicadhangaké kanggo saringan planggaran.",
"right-abusefilter-modify": "Owah saringan planggaran",
"right-abusefilter-view": "Deleng saringan salah-guna",
"right-abusefilter-log": "Deleng log salah-guna",
- "right-abusefilter-log-detail": "Deleng èntri log salah-guna sing rinci",
+ "right-abusefilter-log-detail": "Deleng èntri log salah-guna kang rinci",
"right-abusefilter-private": "Deleng dhata priangga ing log salah-guna",
"right-abusefilter-modify-restricted": "Owah saringan planggaran mawa laku kawatesi",
- "right-abusefilter-revert": "Balèkaké kabèh owahan déning saringan planggaran sing dimaksud",
- "right-abusefilter-view-private": "Deleng saringan salah-guna sing ditandhani minangka privat",
- "right-abusefilter-log-private": "Deleng èntri log saringan salah-guna sing ditandhani minangka privat",
- "right-abusefilter-hide-log": "Dhelikaké èntri nèng log planggaran",
- "right-abusefilter-hidden-log": "Deleng èntri log salah-guna sing didhelikaké",
+ "right-abusefilter-revert": "Balèkaké kabèh owahan déning saringan planggaran kang dimaksud",
+ "right-abusefilter-view-private": "Deleng saringan salah-guna kang ditandhani minangka privat",
+ "right-abusefilter-log-private": "Deleng èntri log saringan salah-guna kang ditandhani minangka privat",
+ "right-abusefilter-hide-log": "Dhelikaké èntri ing log planggaran",
+ "right-abusefilter-hidden-log": "Deleng èntri log salah-guna kang didhelikaké",
"action-abusefilter-modify": "owah saringan planggaran",
"action-abusefilter-view": "deleng saringan salah-guna",
"action-abusefilter-log": "deleng log salah-guna",
- "action-abusefilter-log-detail": "deleng èntri log salah-guna sing rinci",
+ "action-abusefilter-log-detail": "deleng èntri log salah-guna kang rinci",
"action-abusefilter-private": "deleng dhata priangga ing log salah-guna",
"action-abusefilter-modify-restricted": "owah saringan planggaran mawa laku kawatesi",
- "action-abusefilter-revert": "balèkaké kabèh owahan déning saringan planggaran sing dimaksud",
- "action-abusefilter-view-private": "deleng saringan salah-guna sing ditandhani minangka privat",
+ "action-abusefilter-revert": "balèkaké kabèh owahan déning saringan planggaran kang dimaksud",
+ "action-abusefilter-view-private": "deleng saringan salah-guna kang ditandhani minangka privat",
"abusefilter-log": "Log saringan planggaran",
- "abusefilter-log-summary": "Log iki nuduhaké daptar kabèh laku sing kacekel saringan.",
+ "abusefilter-log-summary": "Log iki nuduhaké daptar kabèh laku kang kacekel saringan.",
"abusefilter-log-search": "Golèk log planggaran",
"abusefilter-log-search-user": "Panganggo:",
"abusefilter-log-search-filter": "ID saringan (dileti tandha pipa):",
@@ -50,7 +49,7 @@
"abusefilter-log-detailslink": "rerincèn",
"abusefilter-log-diff": "prabèdhan",
"abusefilter-log-hidelink": "larasaké kakatonan",
- "abusefilter-log-details-legend": "Rincian kanggo èntri log $1",
+ "abusefilter-log-details-legend": "Rerincèn kanggo èntri log $1",
"abusefilter-log-details-var": "Variabel",
"abusefilter-log-details-val": "Biji",
"abusefilter-log-details-vars": "Paramèter laku",
@@ -62,15 +61,13 @@
"abusefilter-log-linkoncontribs-text": "Log salah-guna kanggo {{GENDER:$1|panganggo iki}}",
"abusefilter-log-hidden": "(èntri kadhelikaké)",
"abusefilter-log-hidden-implicit": "(kadhelikaké marga benahan wis dibusak)",
- "abusefilter-log-cannot-see-details": "Sampéyan ora kalilakaké ndelok rincian èntri iki.",
- "abusefilter-log-details-hidden": "Sampéyan ora bisa ndelok rincian èntri iki amarga kuwi kadhelikaké saka umum.",
+ "abusefilter-log-cannot-see-details": "Panjenengan ora kalilakaké ndeleng rerincèn èntri iki.",
+ "abusefilter-log-details-hidden": "Panjenengan ora bisa ndeleng rerincèn èntri iki amarga kuwi kadhelikaké saka umum.",
"abusefilter-log-hide-legend": "Dhelikaké èntri log",
"abusefilter-log-hide-id": "ID èntri log:",
"abusefilter-log-hide-hidden": "Dhelikaké èntri iki saka umum",
"abusefilter-log-hide-reason": "Alesan:",
- "abusefilter-log-hide-forbidden": "Sampéyan ora kalilakaké ndhelikaké èntri log planggaran.",
- "abusefilter-logentry-suppress": "dhelikaké \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "tuduhaké \"[[$1]]\"",
+ "abusefilter-log-hide-forbidden": "Panjenengan ora kalilakaké ndhelikaké èntri log planggaran.",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|njalari}} $4, {{GENDER:$2|ngayahi}} \"$5\" ing $3. Tumindak diayahi: $6 ($7)",
"abusefilter-management": "Panatan saringan planggaran",
"abusefilter-list": "Kabèh saringan",
@@ -84,14 +81,14 @@
"abusefilter-list-details": "Rerincèn",
"abusefilter-list-limit": "Cacah per kaca:",
"abusefilter-list-lastmodified": "Diowah pungkasan",
- "abusefilter-list-group": "Klompok saringan",
+ "abusefilter-list-group": "Golongan saringan",
"abusefilter-hidden": "Priangga",
"abusefilter-unhidden": "Umum",
"abusefilter-enabled": "Murub",
"abusefilter-deleted": "Dibusak",
"abusefilter-disabled": "Mati",
"abusefilter-new": "Gawé saringan anyar",
- "abusefilter-return": "Balik neng panatan saringan",
+ "abusefilter-return": "Bali menyang tata saringan",
"abusefilter-status-global": "Global",
"abusefilter-list-options": "Pilihan",
"abusefilter-list-options-deleted": "Saringan kabusak:",
@@ -99,22 +96,20 @@
"abusefilter-list-options-deleted-hide": "Dhelikaké saringan kabusak",
"abusefilter-list-options-deleted-show": "Kalebukaké saringan kabusak",
"abusefilter-list-options-scope-global": "Mligi aturan global",
- "abusefilter-list-options-disabled": "Pati saringan:",
- "abusefilter-list-options-hidedisabled": "Dhelikaké saringan sing dipatèni",
+ "abusefilter-list-options-hidedisabled": "Dhelikaké saringan kang dipatèni",
"abusefilter-list-options-submit": "Anyari",
- "abusefilter-tools-text": "Iki sebagéyan prangkat sing mungkin migunani kanggo mormulasi lan njajal panyaring planggaran.",
+ "abusefilter-tools-text": "Iki sebagéyan prangkat kang mungkin migunani kanggo mormulasi lan njajal panyaring planggaran.",
"abusefilter-tools-expr": "Panjajal èksprèsi",
"abusefilter-tools-submitexpr": "Evaluasi",
"abusefilter-tools-reautoconfirm": "Mbalèkaké status pepesthèn otomatis",
"abusefilter-tools-reautoconfirm-user": "Panganggo:",
"abusefilter-tools-reautoconfirm-submit": "Balèni pesthèkaké otomatis",
"abusefilter-reautoconfirm-none": "Status pepesthèn otomatis {{GENDER:$1|panganggo|panganggo|panganggo}} iki ora dijabut.",
- "abusefilter-reautoconfirm-notallowed": "Sampéyan ora dililakaké mbalèkaké status pepesthèn otomatis.",
+ "abusefilter-reautoconfirm-notallowed": "Panjenengan ora dililakaké mbalèkaké status pepesthèn otomatis.",
"abusefilter-reautoconfirm-done": "Status pepesthèn akun wis dibalèkaké",
"abusefilter-edit-subtitle": "Mbesut panyaringan $1",
"abusefilter-edit-subtitle-new": "Nggawé saringan",
"abusefilter-edit-status-label": "Statistik:",
- "abusefilter-edit-throttled": "'''Pèngetan''': Saringan iki otomatis dipatèni kanggo kamanan.\nIki wis ngranggèh luwih saka $1% laku sing padha.",
"abusefilter-edit-new": "Saringan anyar",
"abusefilter-edit-save": "Simpen saringan",
"abusefilter-edit-id": "ID saringan:",
@@ -123,49 +118,48 @@
"abusefilter-edit-flags": "Tenger:",
"abusefilter-edit-enabled": "Urubaké saringan iki",
"abusefilter-edit-deleted": "Tandhai minangka kabusak",
- "abusefilter-edit-hidden": "Dhelikaké rincian saringan iki saka umum",
+ "abusefilter-edit-hidden": "Dhelikaké rerincèn saringan iki saka umum",
"abusefilter-edit-global": "Saringan global",
"abusefilter-edit-rules": "Kahanan:",
"abusefilter-edit-notes": "Cathetan:",
"abusefilter-edit-lastmod": "Saring owahan pungkasan:",
"abusefilter-edit-lastmod-text": "$1 déning $2",
- "abusefilter-edit-consequences": "Tumindak sing diayahi yèn cocog",
- "abusefilter-edit-action-disallow": "Alangi panganggo sing marai mandheg mangu",
+ "abusefilter-edit-consequences": "Tumindak kang diayahi yèn cocog",
+ "abusefilter-edit-action-disallow": "Alangi panganggo kang marai mandheg mangu",
"abusefilter-edit-action-blockautopromote": "Jabut status pepesthèn otomatis panganggo",
- "abusefilter-edit-action-degroup": "Busak panganggo iki saka kabèh golongan mirunggan",
- "abusefilter-edit-action-block": "Blokir panganggo lan/utawa alamat IP saka nyunting",
+ "abusefilter-edit-action-degroup": "Busek panganggo iki saka kabèh golongan mirunggan",
+ "abusefilter-edit-action-block": "Blokir panganggo lan/utawa alamat IP saka mbesut",
"abusefilter-edit-action-rangeblock": "Blokir jangkah /16 asalé panganggo",
"abusefilter-edit-action-tag": "Tandhani besutan nedya dipriksa mengko",
- "abusefilter-edit-throttle-count": "Cacahé laku sing dililakaké:",
+ "abusefilter-edit-throttle-count": "Cacahé laku kang dililakaké:",
"abusefilter-edit-throttle-period": "Periode wektu:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|detik|detik}}",
- "abusefilter-edit-throttle-groups": "Klompokaké klep miturut:\n:''(siji per larik, gabung karo koma)''",
- "abusefilter-edit-warn-message": "Layang sistem sing dianggo kanggo pèngetan:",
+ "abusefilter-edit-throttle-groups": "Pantha klep miturut:",
+ "abusefilter-edit-warn-message": "Layang sistem kang dianggo kanggo pèngetan:",
"abusefilter-edit-warn-other": "Layang liya",
"abusefilter-edit-warn-other-label": "Jeneng kaca saka layang liya:\n:''(tanpa ater-ater MediaWiki)''",
- "abusefilter-edit-warn-actions": "Tumindak:",
- "abusefilter-edit-warn-preview": "Pratuduh layang sing dipilih",
- "abusefilter-edit-warn-edit": "Gawé/Besut layang sing dipilih",
+ "abusefilter-edit-warn-actions": "Laku:",
+ "abusefilter-edit-warn-preview": "Tuduhaké/Dhelikaké pratuduh layang kang pinilih",
+ "abusefilter-edit-warn-edit": "Gawé/Besut layang kang pinilih",
"abusefilter-edit-tag-tag": "[[Special:Tags|Tag]] kanggo cak-cakan (siji saben larik):",
- "abusefilter-edit-denied": "Sampéyan mungkin ora ndelok rincian saka saringan iki amarga kuwi pancen didhelikaké saka umum.",
+ "abusefilter-edit-denied": "Panjenengan mungkin ora ndeleng rerincèn saka saringan iki amarga kuwi pancen didhelikaké saka umum.",
"abusefilter-edit-main": "Paramètèr saringan",
"abusefilter-edit-done-subtitle": "Saringan wis dibesut",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Owahané panjenengan]] tumrap [[Special:AbuseFilter/$1|saringan $3]] wis disimpen.",
- "abusefilter-edit-badsyntax": "Ana kasalahan sintaks nèng saringan sing Sampéyan lebokaké.\nWeton saka parser yakuwi: <pre>$1</pre>",
- "abusefilter-edit-restricted": "Sampéyan ora bisa nyunting saringan ini amarga iki kaisi siji utawa luwih laku sing diwatesi.\nMangga takon panganggo sing nduwèni hak kanggo nggenepi apa sing Sampéyan karepaké.",
+ "abusefilter-edit-badsyntax": "Ana masalah sintaksis ing saringan kang panjenengan lebokaké.\nWeton saka parser ya iku: <pre>$1</pre>",
+ "abusefilter-edit-restricted": "Panjenengan ora bisa mbesut saringan iki amarga isiné lelakon winates cacah siji utawa luwih.\nMangga takon marang siji panganggo kang kawogan saperlu muwuhi lelakon winates lan nggawèkaké owahan kanggo panjenengan.",
"abusefilter-edit-viewhistory": "Deleng sujarahé saringan iki",
"abusefilter-edit-history": "Riwayah:",
"abusefilter-edit-check": "Priksa sintaks",
- "abusefilter-edit-badfilter": "Saringan sing panjenengan jaluk ora ana",
- "abusefilter-edit-revert": "Balekaké tumindak sing diayahi saringan iki",
+ "abusefilter-edit-badfilter": "Saringan kang panjenengan jaluk ora ana",
+ "abusefilter-edit-revert": "Balekaké tumindak kang diayahi saringan iki",
"abusefilter-edit-tools": "Piranti:",
"abusefilter-edit-test-link": "Jajal panyaringan iki tumrap besutan-besutan anyar",
- "abusefilter-edit-export": "Èkspor saringan iki nèng wiki liya",
+ "abusefilter-edit-export": "Èkspor saringan iki ing wiki liya",
"abusefilter-edit-syntaxok": "Ora ana kasalahan sintaks kadètèk.",
"abusefilter-edit-syntaxerr": "Kasalaha sintaks kadètèk: $1",
- "abusefilter-edit-bad-tags": "Tag siji utawa luwih sing kokwèhaké ora sah.\nTag kudu cendhak lan ora ngemu karakter mirunggan.",
+ "abusefilter-edit-bad-tags": "Tenger kang panjenengan lebokaké ora trep.\nTenger kudu cendhak, ora ngemu karakter mirunggan, lan ora dianggo piranti alus liya. Jajal pilih jeneng tenger anyar.",
"abusefilter-edit-notallowed": "Panjenengan ora diidinaké nggawé utawa mbesut saringan palanggaran",
- "abusefilter-edit-builder-select": "Pilih sawijining pilihan kanggo nambahaké nèng kursor",
+ "abusefilter-edit-builder-select": "Pilih sawijining pilihan kanggo nambahaké ing kursor",
"abusefilter-edit-builder-group-op-arithmetic": "Operator aritmatika",
"abusefilter-edit-builder-op-arithmetic-addition": "Panambahan (+)",
"abusefilter-edit-builder-op-arithmetic-subtraction": "Sudan (-)",
@@ -185,54 +179,54 @@
"abusefilter-edit-builder-op-bool-and": "Lan (&)",
"abusefilter-edit-builder-op-bool-or": "Utawa (|)",
"abusefilter-edit-builder-group-misc": "Liyané",
- "abusefilter-edit-builder-misc-in": "kalebu nèng ''string'' (in)",
+ "abusefilter-edit-builder-misc-in": "kinandhut ing ''string'' (in)",
"abusefilter-edit-builder-misc-like": "Pola cocok (like)",
"abusefilter-edit-builder-misc-rlike": "Cocok karo regex (rlike)",
"abusefilter-edit-builder-misc-irlike": "Cocok karo regex, aksara cilik utawa kapital ora ngaruh (irlike)",
- "abusefilter-edit-builder-misc-contains": "''String'' kiri kaisi ''string'' sing bener (contains)",
+ "abusefilter-edit-builder-misc-contains": "''String'' kiri kaisi ''string'' kang bener (contains)",
"abusefilter-edit-builder-misc-stringlit": "''String'' literal (\"\")",
"abusefilter-edit-builder-misc-tern": "Operator terner (X ? Y : Z)",
"abusefilter-edit-builder-misc-cond": "Kondisional (if X then Y else Z)",
"abusefilter-edit-builder-group-funcs": "Fungsi",
"abusefilter-edit-builder-funcs-length": "Dawa ''string'' (length)",
"abusefilter-edit-builder-funcs-lcase": "Dadi aksara cilik (lcase)",
- "abusefilter-edit-builder-funcs-ccnorm": "Normalaké karakter sing mbingungaké (ccnorm)",
- "abusefilter-edit-builder-funcs-rmdoubles": "Busak karakter dobel (rmdoubles)",
- "abusefilter-edit-builder-funcs-specialratio": "Karakter kusus / kabéhé karakter (specialratio)",
+ "abusefilter-edit-builder-funcs-ccnorm": "Normalaké karakter kang bisa mbingungaké (ccnorm)",
+ "abusefilter-edit-builder-funcs-rmdoubles": "Busek karakter dhobel (rmdoubles)",
+ "abusefilter-edit-builder-funcs-specialratio": "Karakter mirunggan / gunggung karakter (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normalaké (norm)",
- "abusefilter-edit-builder-funcs-rmwhitespace": "Busak spasi (rmwhitespace)",
- "abusefilter-edit-builder-funcs-rmspecials": "Busak karakter kusus (rmspecials)",
+ "abusefilter-edit-builder-funcs-rmwhitespace": "Busek sepasi (rmwhitespace)",
+ "abusefilter-edit-builder-funcs-rmspecials": "Busek karakter mirunggan (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "IP ana ing jangkahan? (ip_in_range)",
"abusefilter-edit-builder-funcs-set_var": "Pasang variabel (set_var)",
"abusefilter-edit-builder-group-vars": "Variabel",
"abusefilter-edit-builder-vars-accountname": "Jeneng akun (utawa panggawéan akun)",
"abusefilter-edit-builder-vars-timestamp": "Tandha pergantèn wektu Unix",
- "abusefilter-edit-builder-vars-action": "Tumindak",
- "abusefilter-edit-builder-vars-addedlines": "Larik sing diwuwuh ing besutan",
+ "abusefilter-edit-builder-vars-action": "Laku",
+ "abusefilter-edit-builder-vars-addedlines": "Larik kang diwuwuh ing besutan",
"abusefilter-edit-builder-vars-delta": "Owahaning ukuran ing besutan",
"abusefilter-edit-builder-vars-newsize": "Gedhéné kaca anyar",
"abusefilter-edit-builder-vars-oldsize": "Gedhéné kaca lawas",
- "abusefilter-edit-builder-vars-removedlines": "Larik sing dilih ing besutan",
+ "abusefilter-edit-builder-vars-removedlines": "Larik kang dilih ing besutan",
"abusefilter-edit-builder-vars-summary": "Alesan/ringkesané besutan",
- "abusefilter-edit-builder-vars-article-id": "ID kaca",
- "abusefilter-edit-builder-vars-article-ns": "Bilik jeneng kaca",
- "abusefilter-edit-builder-vars-article-text": "Sesirah kaca (tanpa jagad aran)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Sesirah kaca jangkep",
+ "abusefilter-edit-builder-vars-page-id": "ID kaca",
+ "abusefilter-edit-builder-vars-page-ns": "Bilik jeneng kaca",
+ "abusefilter-edit-builder-vars-page-title": "Sesirah kaca (tanpa jagad aran)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Sesirah kaca jangkep",
"abusefilter-edit-builder-vars-movedfrom-id": "ID kaca pangalihé kaca sumber",
"abusefilter-edit-builder-vars-movedfrom-ns": "Mandala aran pangalih kaca sumber",
- "abusefilter-edit-builder-vars-movedfrom-text": "Sesirah kaca sumber alihan",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Sesirah jangkep kaca sumber alihan",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Sesirah kaca sumber alihan",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Sesirah jangkep kaca sumber alihan",
"abusefilter-edit-builder-vars-movedto-id": "ID kaca saka kaca papan patujon pamidhahan",
"abusefilter-edit-builder-vars-movedto-ns": "Mandala aran pangalihé kaca paran",
- "abusefilter-edit-builder-vars-movedto-text": "Sesirah kaca tujuan alihan",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Sesirah jangkep kaca tujuan alihan",
+ "abusefilter-edit-builder-vars-movedto-title": "Sesirah kaca tujuan alihan",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Sesirah jangkep kaca tujuan alihan",
"abusefilter-edit-builder-vars-user-editcount": "Cacah besutan panganggo",
"abusefilter-edit-builder-vars-user-age": "Yuswané akun panganggo",
"abusefilter-edit-builder-vars-user-name": "Jeneng akun panganggo",
- "abusefilter-edit-builder-vars-user-groups": "Klompok (kanthi jangkep) sing panganggo ana ing njeroné",
+ "abusefilter-edit-builder-vars-user-groups": "Golongan (kabèh) kang panganggoné ana ing jeroné",
"abusefilter-edit-builder-vars-user-emailconfirm": "Wektu alamat layang èlèktronik dipesthèkaké",
- "abusefilter-edit-builder-vars-recent-contributors": "Sepuluh panganggo pungkasan sing ngontribusi nèng kaca",
- "abusefilter-edit-builder-vars-all-links": "Kabèh pranala njaba nèng tèks anyar",
+ "abusefilter-edit-builder-vars-recent-contributors": "Sepuluh panganggo pungkasan kang nyumbang ing kaca",
+ "abusefilter-edit-builder-vars-all-links": "Kabèh pranala njaba ing tèks anyar",
"abusefilter-edit-builder-vars-added-links": "Kabèh pranala njaba katambahaké sajeroning besutan",
"abusefilter-edit-builder-vars-removed-links": "Kabèh pranala njaba kabusak sajeroning besutan",
"abusefilter-edit-builder-vars-old-text": "Tèkswiki kaca lawas, sadurungé dibesut",
@@ -240,7 +234,7 @@
"abusefilter-edit-builder-vars-restrictions-edit": "Besut tataran rereksan kaca",
"abusefilter-edit-builder-vars-restrictions-move": "Pindhah undhak panjagan kaca",
"abusefilter-edit-builder-vars-old-links": "Pranala ing njero kaca, sadurungé dibesut",
- "abusefilter-edit-builder-vars-minor-edit": "Ana utawa ora suntingan sing ditandhai minangka suntingan cilik",
+ "abusefilter-edit-builder-vars-minor-edit": "Ana utawa ora besutan kang ditandhai minangka besutan cilik",
"abusefilter-filter-log": "Owahan saringan paling anyar",
"abusefilter-history": "Riwayah owahan saka Saringan Planggaran #$1",
"abusefilter-history-foruser": "Owahan déning $1",
@@ -253,47 +247,47 @@
"abusefilter-history-flags": "Tenger",
"abusefilter-history-filter": "Aturan saringan",
"abusefilter-history-comments": "Tanggepan",
- "abusefilter-history-actions": "Tumindak",
+ "abusefilter-history-actions": "Laku",
"abusefilter-history-backedit": "Balik menyang pambesutan saringan",
"abusefilter-history-deleted": "Dibusak",
"abusefilter-history-filterid": "Saringan",
"abusefilter-history-select-legend": "Gegolèkan anyar-anyaran",
"abusefilter-history-select-user": "Panganggo:",
"abusefilter-history-diff": "Owah-owahan",
- "abusefilter-history-error-hidden": "Saringan sing Sampéyan jaluk didhelikaké, lan Sampéyan ora bisa ndelok riwayaté.",
- "abusefilter-exception-unexpectedatend": "\"$2\" ora dikarepaké nèng karakter $1.",
+ "abusefilter-history-error-hidden": "Saringan kang panjenengan jaluk didhelikaké, lan panjenengan ora bisa ndeleng riwayaté.",
+ "abusefilter-exception-unexpectedatend": "\"$2\" ora dikarepaké ing karakter $1.",
"abusefilter-exception-unrecognisedkeyword": "Tembung kunci $2 ora dingertèni ing karakter $1.",
- "abusefilter-exception-unexpectedtoken": "Token \"$3\" ora dikarepaké (saka jinis $2) nèng karakter $1.",
- "abusefilter-exception-invalidoperator": "Operator ora sah \"$2\" ing karakter $1.",
- "abusefilter-exception-unrecognisedtoken": "Token \"$2\" ora dikenal nèng karakter $1.",
- "abusefilter-exception-noparams": "Ora ana paramèter diawèhaké kanggo fungsi \"$2\" nèng karakter $1.",
- "abusefilter-exception-dividebyzero": "Upaya ilegal mbagi $2 mawa nol nèng karakter $1.",
- "abusefilter-exception-unrecognisedvar": "Variabel ora dikenal $2 nèng karakter $1",
- "abusefilter-exception-notenoughargs": "Ora cukup panemu kanggo fungsi $2 sing diceluk nèng karakter $1.\nDikarepaké ana $3 {{PLURAL:$3|panemu|panemu}}, nemu $4",
- "abusefilter-exception-regexfailure": "Kasalahan nèng èksprèsi biasa \"$3\" nèng karakter $1: \"$2\"",
+ "abusefilter-exception-unexpectedtoken": "Token \"$3\" ora dikarepaké (saka jinis $2) ing karakter $1.",
+ "abusefilter-exception-invalidoperator": "Operator ora trep \"$2\" ing karakter $1.",
+ "abusefilter-exception-unrecognisedtoken": "Token \"$2\" ora kaweruhan ing karakter $1.",
+ "abusefilter-exception-noparams": "Ora ana paramèter diawèhaké kanggo fungsi \"$2\" ing karakter $1.",
+ "abusefilter-exception-dividebyzero": "Upaya ilegal mbagi $2 mawa nol ing karakter $1.",
+ "abusefilter-exception-unrecognisedvar": "Variabel $2 ora kaweruhan ing karakter $1",
+ "abusefilter-exception-notenoughargs": "Ora cukup panemu kanggo fungsi $2 kang diceluk ing karakter $1.\nDikarepaké ana $3 {{PLURAL:$3|panemu|panemu}}, nemu $4",
+ "abusefilter-exception-regexfailure": "Kasalahan ing èksprèsi biasa \"$3\" ing karakter $1: \"$2\"",
"abusefilter-action-tag": "Tag",
"abusefilter-action-throttle": "Klep panutup",
"abusefilter-action-warn": "Pèngetan",
"abusefilter-action-blockautopromote": "Blokir tawa otomatis",
"abusefilter-action-block": "Blokir",
- "abusefilter-action-degroup": "Singkiraké saka klompok",
+ "abusefilter-action-degroup": "Singkiraké saka golongan",
"abusefilter-action-rangeblock": "Blokir salarikan",
"abusefilter-action-disallow": "Ora dililakaké",
"abusefilter-revert-title": "Balekaké kabèh owahan déning saringan $1",
- "abusefilter-revert-intro": "Pormulir iki nglilakaké Sampéyan mbalèkaké kabèh owahan saka saringan planggaran amarga saringan $1.\nMangga ngati-ati nganggo piranti iki.",
- "abusefilter-revert-preview-item": "$1: $2 {{GENDER:$7|nggawé}} $3 ing $4.\nTumindak sing arep diwurungaké: $5 ($6)",
+ "abusefilter-revert-intro": "Pormulir iki nglilakaké panjenengan mbalèkaké kabèh owahan saka saringan planggaran amarga saringan $1.\nMangga ngati-ati nganggo piranti iki.",
+ "abusefilter-revert-preview-item": "$1: $2 {{GENDER:$7|nggawé}} $3 ing $4.\nTumindak kang arep diwurungaké: $5 ($6)",
"abusefilter-revert-search-legend": "Pilih laku saringan planggaran kanggo dibalèkaké",
"abusefilter-revert-periodstart": "Pèriode lekas:",
"abusefilter-revert-periodend": "Pèriode rampung:",
"abusefilter-revert-search": "Pilih laku",
"abusefilter-revert-filter": "Saringan:",
- "abusefilter-revert-preview-intro": "Ngisor iki laku sing dilakoni saringan planggaran sing arep dibalèkaké déning laku iki.\nMangga priksa sing tenan, lan klik \"pesthèkaké\" kanggo mesthèkaké pilihan Sampéyan.",
+ "abusefilter-revert-preview-intro": "Ngisor iki laku kang dilakoni saringan planggaran kang arep dibalèkaké déning laku iki.\nMangga priksa kang tenan, lan klik \"pesthèkaké\" kanggo mesthèkaké pilihan panjenengan.",
"abusefilter-revert-confirm": "Pesthèkaké",
- "abusefilter-revert-success": "Panjenengan wis mbalèkaké kabèh tumindak sing diayahi saringan salah-guna amarga [[Special:AbuseFilter/$1|saringan $2]].",
- "abusefilter-revert-reason": "Pambalèkan otomatis kabèh laku sing dilakokaké saringan planggaran amarga saringan $1.\nAlesané: $2",
+ "abusefilter-revert-success": "Panjenengan wis mbalèkaké kabèh tumindak kang diayahi saringan salah-guna amarga [[Special:AbuseFilter/$1|saringan $2]].",
+ "abusefilter-revert-reason": "Pambalèkan otomatis kabèh laku kang dilakokaké saringan planggaran amarga saringan $1.\nAlesané: $2",
"abusefilter-revert-reasonfield": "Alesané:",
- "abusefilter-test": "Jajal saringan tumrap suntingan sakdurungé",
- "abusefilter-test-intro": "Kaca iki ngidinaké panjenengan mriksa panyaringan sing dilebokaké ing kothak ngisor iki tumrap {{PLURAL:$1|owahan}} $1 pungkasan.\nSaperlu ngamot panyaringan, ketik ID panyaringan ing kothak sangisoré kothak tèks besut, tumuli klik tombol \"{{int:abusefilter-test-load}}\".",
+ "abusefilter-test": "Jajal saringan tumrap besutan sadurungé",
+ "abusefilter-test-intro": "Kaca iki ngidinaké panjenengan mriksa panyaringan kang dilebokaké ing kothak ngisor iki tumrap {{PLURAL:$1|owahan}} $1 pungkasan.\nSaperlu ngamot panyaringan, ketik ID panyaringan ing kothak sangisoré kothak tèks besut, tumuli klik tombol \"{{int:abusefilter-test-load}}\".",
"abusefilter-test-legend": "Panjajalan saringan",
"abusefilter-test-load-filter": "Emot ID saringan:",
"abusefilter-test-submit": "Jajal",
@@ -302,11 +296,11 @@
"abusefilter-test-period-start": "Owahan digawé sakwisé:",
"abusefilter-test-period-end": "Owahan digawé sakdurungé:",
"abusefilter-test-page": "Owahan digawé ing kaca:",
- "abusefilter-test-shownegative": "Tuduhaké owahan sing cocok karo saringan",
- "abusefilter-test-syntaxerr": "Saringan sing panjenengan isèkaké kena masalah sintaksis.\nPanjenengan bisa nampa wedharan wutuh kanthi ngeklik tombol \"{{int:abusefilter-edit-check}}\".",
+ "abusefilter-test-shownegative": "Tuduhaké owahan kang cocok karo saringan",
+ "abusefilter-test-syntaxerr": "Saringan kang panjenengan isèkaké kena masalah sintaksis.\nPanjenengan bisa nampa wedharan wutuh kanthi ngeklik tombol \"{{int:abusefilter-edit-check}}\".",
"abusefilter-changeslist-examine": "uji",
"abusefilter-examine": "Uji owahan individu",
- "abusefilter-examine-intro": "Kaca iki nglilakaké Sampéyan nguji variabèl saka Saringan Planggaran kanggo sawiji owahan individu, lan jajal tumrap saringan.",
+ "abusefilter-examine-intro": "Kaca iki nglilakaké panjenengan nguji variabèl saka Saringan Planggaran kanggo sawiji owahan individu, lan jajal tumrap saringan.",
"abusefilter-examine-legend": "Pilih owahan",
"abusefilter-examine-diff": "URL beda:",
"abusefilter-examine-user": "Panganggo:",
@@ -317,10 +311,10 @@
"abusefilter-examine-test-button": "Jajal saringan",
"abusefilter-examine-match": "Saringan cocok karo owahan iki.",
"abusefilter-examine-nomatch": "Saringan ora cocok karo owahan iki.",
- "abusefilter-examine-syntaxerror": "Saringan ngemu sintaks sing ora sah",
- "abusefilter-examine-notfound": "Owahan sing Sampéyan karepaké ora ditemokaké.",
- "abusefilter-examine-incompatible": "Owahan sing Sampéyan karepaké ora disengkuyung déning Saringan Planggaran",
- "abusefilter-examine-noresults": "Ora ana kasil sing mèmper paramèter gegolèkanmu.",
+ "abusefilter-examine-syntaxerror": "Saringan ngemu sintaksis kang ora trep",
+ "abusefilter-examine-notfound": "Owahan kang panjenengan karsakaké ora tinemu.",
+ "abusefilter-examine-incompatible": "Owahan kang panjenengan karsakaké ora disengkuyung Saringan Planggaran",
+ "abusefilter-examine-noresults": "Ora ana kasil kang mèmper paramèter gegolèkanmu.",
"abusefilter-topnav": "'''navigasi Saringan Planggaran'''",
"abusefilter-topnav-home": "Latar",
"abusefilter-topnav-test": "Panjajalan saktumpuk",
@@ -329,18 +323,18 @@
"abusefilter-topnav-tools": "Piranti debug",
"abusefilter-topnav-import": "Impor saringan",
"abusefilter-log-name": "Log saringan palanggaran",
- "abusefilter-log-header": "Log iki nuduhaké ringkesan owah-owahan sing digawé tumrap saringan.\nKanggo rerincèn wutuhé, delengen [[Special:AbuseFilter/history|pratélan]] owah-owahan anyaré saringan.",
+ "abusefilter-log-header": "Log iki nuduhaké ringkesan owah-owahan kang digawé tumrap saringan.\nKanggo rerincèn wutuhé, delengen [[Special:AbuseFilter/history|pratélan]] owah-owahan anyaré saringan.",
"abusefilter-log-noresults": "Ora ana asilé",
"abusefilter-diff-title": "Prabédhan antar vèrsi",
"abusefilter-diff-item": "Barang",
- "abusefilter-diff-version": "Vèrsi seka $1 {{GENDER:$3|déning}} $2",
+ "abusefilter-diff-version": "Vèrsi saka $1 {{GENDER:$3|déning}} $2",
"abusefilter-diff-info": "Informasi dhasar",
"abusefilter-diff-pattern": "Kahanan saringan",
- "abusefilter-diff-invalid": "Ora bisa njupuk vèrsi sing dikarepaké",
+ "abusefilter-diff-invalid": "Ora bisa njupuk vèrsi kang dikarepaké",
"abusefilter-diff-backhistory": "Balik menyang sajarahing saringan",
"abusefilter-diff-prev": "Owahan luwih lawas",
"abusefilter-diff-next": "Owahan luwih anyar",
- "abusefilter-import-intro": "Sampéyan bisa nganggo antarmuka iki kanggo ngimpor saringan saka wiki liya.\nNèng wiki sumber, klik \"{{int:abusefilter-edit-export}}\" sakisoré \"{{int:abusefilter-edit-tools}}\" nèng antarmuka panyuntingan.\nSalin saka kothak wedhi sing njedhul, lan tèmplèkaké nèng kothak tèks, banjur klik \"{{int:abusefilter-import-submit}}\".",
+ "abusefilter-import-intro": "Panjenengan bisa nganggo antarmuka iki kanggo ngimpor saringan saka wiki liya.\nIng wiki sumber, klik \"{{int:abusefilter-edit-export}}\" sakisoré \"{{int:abusefilter-edit-tools}}\" ing antarmuka pambesutan.\nSalin saka kothak wedhi kang njedhul, lan tèmplèkaké ing kothak tèks, banjur klik \"{{int:abusefilter-import-submit}}\".",
"abusefilter-import-submit": "Impor data",
"abusefilter-group-default": "Gawan"
}
diff --git a/AbuseFilter/i18n/ka.json b/AbuseFilter/i18n/ka.json
index a7f3c711..82dd4f6e 100644
--- a/AbuseFilter/i18n/ka.json
+++ b/AbuseFilter/i18n/ka.json
@@ -15,7 +15,6 @@
"abusefilter": "ბოროტად გამოყენების ფილტრის კონფიგურაცია",
"abuselog": "ბოროტად გამოყენების ჟურნალი",
"abusefilter-intro": "კეთილი იყოს თქვენი მობრძანება ბოროტად გამოყენების ფილტრის მართვის გვერდზე. ბოროტად გამოყენების ფილტრი წარმოადგენს მომხმარებელთა მოქმედების შესაბამისად ავტომატიზირებულ მექანიზმს ავტომატური ევრისტიკული გამოყენებით. აქ მოყვანილია ყველა დაყენებული ფილტრის სია, რომელთა შეცვლა არის შესაძლებელი.",
- "abusefilter-mustbeeditor": "უსაფრთხოების შეხედულებიდან გამომდინარე, მხოლოდ ბოროტად გამოყენების ფილტრების შეცვლის უფლების მქონემომხმარებლებს შეუძლიათ ამ ინტერფეისის გამოყენება.",
"abusefilter-warning": "'''ყურადღება''': ეს ქმედება ავტომატურად იქნა მიჩნეული არაკონსტრუქციულად.\nამგვარი ცვლილებები მეტწილად ძალიან სწრაფად უქმდება. ქმედების განმეორებისას უარეს შემთხვევაში თქვენი ანგარიში ან IP-მისამართი დაიბლოკება.\nთუ თქვენ მიგაჩნიათ, რომ თქვენი განხორციელებული მოქმედება სასარგებლოა, შეგიძლიათ მიღებით ხელმეორედ დაადასტუროთ ეს.\nდარღვევის მოკლე აღწერა: $1",
"abusefilter-blocker": "ბოროტად გამოყენების ფილტრი",
"abusefilter-blockreason": "ავტომატურად დაიბლოკა ბოროტად გამოყენების ფილტრის მიერ.\nშესაბამისი წესის აღწერა: $1",
@@ -48,6 +47,11 @@
"abusefilter-log-search-filter": "ფილტრის ID (ვერტიკალური ხაზით გაყოფილი):",
"abusefilter-log-search-title": "სათაური:",
"abusefilter-log-search-wiki": "ვიკი:",
+ "abusefilter-log-search-impact": "გავლენა:",
+ "abusefilter-log-search-impact-saved": "მხოლოდ შენახული ცვლილებები",
+ "abusefilter-log-search-impact-not-saved": "მხოლოდ შეუნახავი ცვლილებები",
+ "abusefilter-log-search-action-taken-label": "მიღებული ზომები:",
+ "abusefilter-log-search-action-taken-any": "ყველა",
"abusefilter-log-search-submit": "ძიება",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|გამოიძახა}} ბოროტად გამოყენების ფილტრი, შეასრულა ქმედება „$3“ გვერდზე $4.\nმიღებული ზომები: $5;\nფილტრის აღწერა: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|გამოიძახა}} ბოროტად გამოყენების ფილტრის ამოქმედება, შეასრულა რედაქტირება „$3“ გვერდზე $4.\nშეასრულა ქმედება: $5;\nფილტრის აღწერა: $6 ($7)",
@@ -66,6 +70,8 @@
"abusefilter-log-details-diff": "რედაქტირებისას განხორციელებული ცვლილებები",
"abusefilter-log-linkoncontribs": "ბოროტად გამოყენების ჟურნალი",
"abusefilter-log-linkoncontribs-text": "ბოროტად გამოყენების ფილტრის ჟურნალი ამ მომხმარებლისათვის",
+ "abusefilter-log-linkonhistory": "ბოროტად გამოყენების ფილტრის ჟურნალის გადახედვა",
+ "abusefilter-log-linkonhistory-text": "ამ გვერდისთვის ბოროტად გამოყენების ჟურნალის ჩვენება",
"abusefilter-log-hidden": "(ცვლილება დამალულია)",
"abusefilter-log-hidden-implicit": "(დამალულია, რადგან შესწორება წაიშალა)",
"abusefilter-log-cannot-see-details": "თქვენ არ გაქვთ ამ ჩანაწერის დეტალური ინფორმაციის ხილვის უფლება.",
@@ -75,8 +81,6 @@
"abusefilter-log-hide-hidden": "ამ ცვლილების დამალვა საზოგადოებისათვის",
"abusefilter-log-hide-reason": "მიზეზი:",
"abusefilter-log-hide-forbidden": "თქვენ ბოროტად გამოყენების ფილტრის ჟურნალის ჩანაწერების დამალვის უფლება არა გაქვთ.",
- "abusefilter-logentry-suppress": "\"[[$1]]\"-ის დამალვა",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\"-ის ჩვენება",
"abusefilter-management": "ბოროტად გამოყენების ფილტრის მართვა",
"abusefilter-list": "ყველა ფილტრი",
"abusefilter-list-id": "ფილტრის ID",
@@ -108,8 +112,15 @@
"abusefilter-list-options-scope-local": "მხოლოდ ადგილობრივი წესები",
"abusefilter-list-options-scope-global": "მხოლოდ გლობალური წესები",
"abusefilter-list-options-scope-all": "ადგილობრივი და გლობალური წესები",
- "abusefilter-list-options-disabled": "გათიშული ფილტრები:",
+ "abusefilter-list-options-further-options": "სხვა ოფციონები:",
"abusefilter-list-options-hidedisabled": "დამალეთ გათიშული ფილტრები",
+ "abusefilter-list-options-hideprivate": "პრივატული ფილტრების დამალვა",
+ "abusefilter-list-options-searchfield": "წესებს შორის ძიება:",
+ "abusefilter-list-options-searchpattern": "ნიმუშის ჩასმა",
+ "abusefilter-list-options-searchoptions": "ძიების რეჟიმი:",
+ "abusefilter-list-options-search-like": "უბრალო მოთხოვნა",
+ "abusefilter-list-options-search-rlike": "რეგულარული გამოთქმა",
+ "abusefilter-list-options-search-irlike": "რეგისტრის მიმართ არამგრძნობიარე რეგულარული გამოთქმა",
"abusefilter-list-options-submit": "განახლება",
"abusefilter-tools-text": "აქ არის რამდენიმე სხვადასხვა ხელსაწყო, რომელიც დაგეხმარებათ ბოროტად გამოყენების ფილტრებთან მუშაობაში.",
"abusefilter-tools-expr": "გამოთქმათა შემოწმება",
@@ -128,10 +139,10 @@
"abusefilter-edit-status-label": "სტატისტიკა:",
"abusefilter-edit-status": "ბოლო {{PLURAL:$1|$1 მოქმედებიდან|#$1 მოქმედებებიდან}}, ეს ფილტრი შეესაბამება $2 ($3%).",
"abusefilter-edit-status-profile": "ბოლო {{PLURAL:$1|$1 მოქმედებიდან| მოქმედებებიდან}}, ეს ფილტრი შეესაბამება $2 ($3%).\nსამუშაოს საშუალო დრო — $4 მწ, ის იყენებს $5 {{PLURAL:$5|პირობა|პირობრბს}} პირობების ლიმიტიდან.",
- "abusefilter-edit-throttled": "'''ყურადღება.''' ეს ფილტრი ავტომატურად გაითიშა. მისი პროცენტი აღემატება $1 % ყველა მოქმედებიდან.",
"abusefilter-edit-new": "ახალი ფილტრი",
"abusefilter-edit-save": "ფილტრის შენახვა",
"abusefilter-edit-id": "ფილტრის ID:",
+ "abusefilter-edit-switch-editor": "რედაქტორის გადართვა",
"abusefilter-edit-description": "აღწერა:\n:''(ყველასთვის მისაწვდომელი)''",
"abusefilter-edit-group": "ფილტრის ჯგუფი:",
"abusefilter-edit-flags": "დროშები:",
@@ -155,7 +166,6 @@
"abusefilter-edit-action-tag": "მონიშნეთ შესწორება დამატებითი შემოწმებისთვის",
"abusefilter-edit-throttle-count": "ნებადართული მოქმედებების რაოდენობა:",
"abusefilter-edit-throttle-period": "დროის პერიოდი:",
- "abusefilter-edit-throttle-seconds": "$1 წამი",
"abusefilter-edit-throttle-groups": "ჯგუფების შემცირება:\n:''(თითოსი ერთ ხაზზე, მძიმეებით შეერება)''",
"abusefilter-edit-warn-message": "სისტემური შტყობინება გაფრთხილებისთვის:",
"abusefilter-edit-warn-other": "სხვა შეტყობინება",
@@ -241,19 +251,18 @@
"abusefilter-edit-builder-vars-oldsize": "გვერდის ძველი ზომა",
"abusefilter-edit-builder-vars-removedlines": "წაშლილი ხაზები",
"abusefilter-edit-builder-vars-summary": "ცვლილების აღწერა",
- "abusefilter-edit-builder-vars-article-id": "გვერდის ID",
- "abusefilter-edit-builder-vars-article-ns": "გვერდის სახელთა სივრცე",
- "abusefilter-edit-builder-vars-article-text": "გვერდის სახელი (სახელთა სივრცეების გარეშე)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "გვერდის სრული სახელი",
- "abusefilter-edit-builder-vars-article-views": "გვერდის ხილვა",
+ "abusefilter-edit-builder-vars-page-id": "გვერდის ID",
+ "abusefilter-edit-builder-vars-page-ns": "გვერდის სახელთა სივრცე",
+ "abusefilter-edit-builder-vars-page-title": "გვერდის სახელი (სახელთა სივრცეების გარეშე)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "გვერდის სრული სახელი",
"abusefilter-edit-builder-vars-movedfrom-id": "გადასატაქნი გვერდის ID",
"abusefilter-edit-builder-vars-movedfrom-ns": "გადასატანი გვერდის სახელთა სივრცე",
- "abusefilter-edit-builder-vars-movedfrom-text": "გადასატანი გვერდის სახელწოდენა",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "გადასატანი გვერდის სრული სახელი",
+ "abusefilter-edit-builder-vars-movedfrom-title": "გადასატანი გვერდის სახელწოდენა",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "გადასატანი გვერდის სრული სახელი",
"abusefilter-edit-builder-vars-movedto-id": "გადასატანი გვერდის საბოლოო ID",
"abusefilter-edit-builder-vars-movedto-ns": "გადასარქმევი გვერდის სახელთა საბოლოო სივრცე",
- "abusefilter-edit-builder-vars-movedto-text": "გადატანის საბოლოო გვერდის სრული სახელი",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "გადატანის საბოლოო გვერდის სრული სახელი",
+ "abusefilter-edit-builder-vars-movedto-title": "გადატანის საბოლოო გვერდის სრული სახელი",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "გადატანის საბოლოო გვერდის სრული სახელი",
"abusefilter-edit-builder-vars-user-editcount": "მომხმარებლის რედაქტირებათა რაოდენობა",
"abusefilter-edit-builder-vars-user-age": "ანგარიშს ასაკი",
"abusefilter-edit-builder-vars-user-name": "ანგარიშის სახელი",
@@ -316,7 +325,7 @@
"abusefilter-exception-unrecognisedvar": "გაურკვეველი ცვლადი $2 $1 პოზიციაში.",
"abusefilter-exception-notenoughargs": "არ არის საკმარისი არგუმენრი $2, გამოძახებული პოზიციაში $1.\nველოდებით $3 {{PLURAL:$3|არგუმენტი|არგუმენტს}}, მიღებულია $4",
"abusefilter-exception-regexfailure": "შეცდომა რეგულარულ გამოსახულებაში \"$3\" $1 პოზიციაში: \"$2\"",
- "abusefilter-exception-notlist": "ობიექტისთვის მასივის ელემენტის მოთხოვნა, რომელიც არ წარმოადგენს მასივს, $1 პოზიციაში",
+ "abusefilter-exception-notarray": "ობიექტისთვის მასივის ელემენტის მოთხოვნა, რომელიც არ წარმოადგენს მასივს, $1 პოზიციაში",
"abusefilter-action-tag": "მინიშნება",
"abusefilter-action-throttle": "სემცირება",
"abusefilter-action-warn": "გაფრთხილება",
@@ -339,16 +348,19 @@
"abusefilter-revert-reason": "ბოროტად გამოყენების ფილტრის ყოველი ქმედების ავტომატურად გაუქმება $1 ფილტრის მიზეზით.\nმოცემული მიზეზი: $2",
"abusefilter-revert-reasonfield": "მიზეზი:",
"abusefilter-test": "ფილტრის ტესტირება",
+ "abusefilter-test-intro": "ეს გვერდი შესაძლებლობას გაძლევთ გადასინჯოთ ფილტრი, შეყვანილი ქვემოთმოცემულ ველში, {{PLURAL:$1|ცვლილება|ცვლილებაზე}}. რათა ატვირთოთ არსებული ფილტრი, შეიყვანეთ იგი ტექსტური ველის იდენტიფიკატორში რედაქტირების ველის ქვეშ და დააჭირეთ ღილაკს „{{int:abusefilter-test-load}}“.",
"abusefilter-test-legend": "ფილტრის შემოწმება",
"abusefilter-test-load-filter": "ფილტრ–ID-ის ჩამოტვირთვა",
"abusefilter-test-submit": "შემოწმება",
"abusefilter-test-load": "ატვირთვა",
"abusefilter-test-user": "მომხმარებლის ცვლილებები:",
+ "abusefilter-test-nobots": "ბოტების რედაქტირებების დამალვა",
"abusefilter-test-period-start": "ცვლილებები გაკეთდა მას შემდეგ რაც:",
"abusefilter-test-period-end": "ცვლილებები გაკეთდა მანამ:",
"abusefilter-test-page": "ცვლილებები გაკეთდა გვერდში:",
"abusefilter-test-shownegative": "იმ ცვლილებების ჩვენება, რომლებიც ფილტრს არ ერგებიან",
"abusefilter-test-syntaxerr": "მოცემული ფილტრი შეიცავს სინტაქსურ შეცდომას.\nდამატებითი შენიშვნების სანახავად დააჭირეთ ღილაკს „სინტაქსის შემოწმება“",
+ "abusefilter-test-search-type-all": "ყველა მოქმედება",
"abusefilter-changeslist-examine": "ნახვა",
"abusefilter-examine": "ცალკეული რედაქტირებების ხილვა",
"abusefilter-examine-intro": "ეს გვერდი შესაძლებლობას გაძლევთ ფილტრის მიერ შექმნილი ბოროტად გამოყენებული ცვლადი სიდიდის ხილვას ცალკეული ცვლილებისათვის და მათ ფილტრებში შემოწმებას.",
@@ -375,7 +387,6 @@
"abusefilter-topnav-import": "ფილტრის იმპორტი",
"abusefilter-log-name": "ბოროტად გამოყენების ფილტრის ჟურნალი",
"abusefilter-log-header": "ამ ჟურნალში იწერება ფილტრებში შემოსული ცვლილებები\nიხილეთ დამატებითი ინფორმაცია ფილტრის ბოლო ცვლილებების [[Special:AbuseFilter/history|სიაში]].",
- "abusefilter-log-entry-modify": "შეცვალა $1 ($2)",
"abusefilter-log-noresults": "შედეგები არაა",
"abusefilter-diff-title": "განსხვავება ვერსიებს შორის",
"abusefilter-diff-item": "ელემენტი",
@@ -389,27 +400,5 @@
"abusefilter-import-intro": "თქვენ შეგიძლიათ გამოიყენოთეს ინტერფეისი სხვა ვიკებიდან ფილტრების იმპორტირებისათვის.\nვიკის წყაროში, დააჭირეთ „{{int:abusefilter-edit-export}}“ რედაქტირების ინტერფეისის „{{int:abusefilter-edit-tools}}“ განყოფილებაში.\nდააკოპირეთ ტექსტური ველის შიგთავსი, გადმოიტანეთ ამ გვერდზე და დააჭირეთ „{{int:abusefilter-import-submit}}“.",
"abusefilter-import-submit": "მონაცემების იმპორტირება",
"abusefilter-group-default": "სტანდარტული",
- "abusefilter-http-error": "მოხდა HTTP-ის შეცდომა: $1.",
- "apihelp-abusefiltercheckmatch-param-filter": "ფილტრის სრული ტექსტი, რათა გადაისინჯოს გასწორება",
- "apihelp-abusefiltercheckmatch-param-rcid": "ID ბოლო ცვლილება საწინააღმდეგო გადასინჯვისთვის",
- "apihelp-abusefiltercheckmatch-param-logid": "ბოროტად გამოყენების ფილტრი არეგისტრირებს ID, რათა საწინააღმდეგოდ გადასინჯოს",
- "apihelp-abusefilterchecksyntax-description": "ბოროტად გამოყენების ფილტრის სინტაქსის გადასინჯვა",
- "apihelp-abusefilterchecksyntax-param-filter": "ფილტრის სრული ტექსტი, რათა სინტაქსი გადაისინჯოს",
- "apihelp-abusefilterchecksyntax-example-1": "ნამდვილი ფილტრის სინტაქსის გადასინჯვა",
- "apihelp-abusefilterchecksyntax-example-2": "გამოუსადეგარი ფილტრის სინტაქსის გადასინჯვა",
- "apihelp-abusefilterevalexpression-description": "ბოროტად გამოყენების ფილტრი აფასებს გამოხატვას",
- "apihelp-abusefilterevalexpression-param-expression": "გამოხატვა, რათა შეფასდეს",
- "apihelp-abusefilterevalexpression-example-1": "უბრალო გამოხატვის შეფასება",
- "apihelp-abusefilterunblockautopromote-param-user": "თქვენ გინთად გახსნათ მომხმარებლის მომხმარებლის სახელი",
- "apihelp-query+abusefilters-description": "ბოროტად გამოყენების ფილტრის დეტალების ჩვენება",
- "apihelp-query+abusefilters-param-startid": "ID ფილტრი, რათა დაიწყოს ჩამოთვლა",
- "apihelp-query+abusefilters-param-endid": "ID ფილტრი, რათა შეჩერდეს ჩამოთვლა",
- "apihelp-query+abusefilters-param-show": "აჩვენე მხოლოდ ფილტრები, რომლებიც შეესაბამება ამ კრიტერიუმებს",
- "apihelp-query+abusefilters-param-limit": "ფილტრების სიის მაქსიმალური რაოდენობა",
- "apihelp-query+abusefilters-param-prop": "თვისებების მიღება",
- "apihelp-query+abusefilters-example-1": "საჯარო ფილტრების დასაშვები სია",
- "apihelp-query+abusefilters-example-2": "ფილტრების ზოგიერთი დეტალის ჩვენება",
- "apihelp-query+abuselog-param-prop": "თვისებების მიღება",
- "apihelp-query+abuselog-example-1": "უკანასკნელი ჟურნალის ჩანაწერების ხილვა",
- "apihelp-query+abuselog-example-2": "აჩვენე ჩანაწერების ბოლო ჟურნლი [[API]]-დან"
+ "abusefilter-http-error": "მოხდა HTTP-ის შეცდომა: $1."
}
diff --git a/AbuseFilter/i18n/kab.json b/AbuseFilter/i18n/kab.json
index a465f9e4..6104fabf 100644
--- a/AbuseFilter/i18n/kab.json
+++ b/AbuseFilter/i18n/kab.json
@@ -38,7 +38,6 @@
"abusefilter-list-options-scope-local": "Ilugan kan idiganen",
"abusefilter-list-options-scope-global": "Ilugan kan imuta",
"abusefilter-list-options-scope-all": "Ilugan idiganen akked d imuta",
- "abusefilter-list-options-disabled": "Imzizdigen nsan:",
"abusefilter-list-options-hidedisabled": "Ffer imzizdigen yensan",
"abusefilter-list-options-submit": "Leqqem",
"abusefilter-tools-expr": "Amsekyad n tenfaliyin",
diff --git a/AbuseFilter/i18n/kg.json b/AbuseFilter/i18n/kg.json
index f247d0c3..fb7757cb 100644
--- a/AbuseFilter/i18n/kg.json
+++ b/AbuseFilter/i18n/kg.json
@@ -6,6 +6,5 @@
},
"abusefilter-examine-user": "Sadi:",
"abusefilter-examine-title": "Nkûmbu ya mukânda:",
- "abusefilter-examine-submit": "Sosa",
- "abusefilter-log-entry-modify": "me soba $1 ($2)"
+ "abusefilter-examine-submit": "Sosa"
}
diff --git a/AbuseFilter/i18n/khw.json b/AbuseFilter/i18n/khw.json
index 46032014..8a487c11 100644
--- a/AbuseFilter/i18n/khw.json
+++ b/AbuseFilter/i18n/khw.json
@@ -63,8 +63,8 @@
"abusefilter-edit-builder-vars-newsize": "نوغ صفحہو سائز",
"abusefilter-edit-builder-vars-oldsize": "پرانو صفحہو سائز",
"abusefilter-edit-builder-vars-summary": "خلاصہ/وجہہ ترمیم کورے",
- "abusefilter-edit-builder-vars-article-id": "صفحہ ID",
- "abusefilter-edit-builder-vars-article-ns": "صفحہ نیم سپیس",
+ "abusefilter-edit-builder-vars-page-id": "صفحہ ID",
+ "abusefilter-edit-builder-vars-page-ns": "صفحہ نیم سپیس",
"abusefilter-history-hidden": "کھوشت",
"abusefilter-history-global": "عالمی",
"abusefilter-history-timestamp": "وخت",
diff --git a/AbuseFilter/i18n/kjp.json b/AbuseFilter/i18n/kjp.json
new file mode 100644
index 00000000..af6ab9cf
--- /dev/null
+++ b/AbuseFilter/i18n/kjp.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Rul1902"
+ ]
+ },
+ "abuselog": "ကျံင်းဖၠံင်ပၞံင့်လ်ုၜး ဆ်ုမာၮါင်း",
+ "abusefilter-list-options-scope-local": "ဆ်ုလင်ဍာ ပၞံင့်လ်ုဖးလှ်",
+ "abusefilter-edit-disallow-other": "ၰာႋၰံင် လိက်သုံ့ၜိင်း",
+ "abusefilter-edit-disallow-actions": "ဆ်ုသုဂ်ကၠယ်လ်ုဖး:",
+ "abusefilter-edit-tag-hidden-placeholder": "မာဍိုင် (မာနံင်လ်ုကော်မာ)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "အ​ခေါတ်ကျံင် ဍုဂ်ဍုဂ်ပါင်ပါင်"
+}
diff --git a/AbuseFilter/i18n/kk-cyrl.json b/AbuseFilter/i18n/kk-cyrl.json
index aeb70e2d..90afbed8 100644
--- a/AbuseFilter/i18n/kk-cyrl.json
+++ b/AbuseFilter/i18n/kk-cyrl.json
@@ -67,8 +67,6 @@
"abusefilter-log-hide-hidden": "Бұл жазбаны барлық қатысушыларға көрсетпеу",
"abusefilter-log-hide-reason": "Себебі:",
"abusefilter-log-hide-forbidden": "Қиянаттау журнал енгізілімдерін жасыруға рұқсатыңыз жоқ.",
- "abusefilter-logentry-suppress": "\"[[$1]]\" дегенді жасыру",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\" дегенді жасырмау",
"logentry-abusefilter-hit": "$1 $4 сүзгісін шақырды, $3 бетіндегі орындалу әрекеті: «$5».\nҚолданылған шара: $6 ($7)",
"abusefilter-management": "Қиянаттауды сүзгілеу сүзгіш басқармасы",
"abusefilter-list": "Барлық сүзгіштер",
@@ -101,7 +99,6 @@
"abusefilter-list-options-scope-local": "Тек жергілік басқарулар",
"abusefilter-list-options-scope-global": "Тек ғаламдық басқарулар",
"abusefilter-list-options-scope-all": "Жергілік және ғаламдық басқарулар",
- "abusefilter-list-options-disabled": "Ажыратылған сүзгіштер:",
"abusefilter-list-options-hidedisabled": "Ажыратылған сүзгіштерді жасыру",
"abusefilter-list-options-submit": "Жаңарту",
"abusefilter-tools-expr": "Өрнекті тексеру",
@@ -134,13 +131,11 @@
"abusefilter-edit-consequences": "Сәйкес келу кезінде қабылдау әрекеттері",
"abusefilter-edit-action-warn": "Қатысушыға ескерту жасау шарасын қолдану",
"abusefilter-edit-action-disallow": "Қатысушыға сұраным әрекетіне тыйым салу",
- "abusefilter-edit-action-flag": "Қиянаттау журналында өңдемені белгілеу",
"abusefilter-edit-action-blockautopromote": "Қатысушылардың өздікті құпталған статусын алып тастау",
"abusefilter-edit-action-degroup": "Қатысушыны жеңілдік топтарынан алып тастау",
"abusefilter-edit-action-block": "Қатысушыны және/немесе IP мекен жайды өңдеуден бұғаттау",
"abusefilter-edit-action-tag": "Бұдан кейінгі тексерулер үшін өңдемені белгілеу",
"abusefilter-edit-throttle-count": "Рұқсат етілген әрекеттер саны:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|секунд|секунд}}",
"abusefilter-edit-warn-message": "Ескерту үшін жүйе хабарын қолдану:",
"abusefilter-edit-warn-other": "Басқа хабар",
"abusefilter-edit-warn-other-label": "Басқа хабар бетінің аты:\n:''(МедиаУики префиксінсіз)''",
@@ -187,19 +182,18 @@
"abusefilter-edit-builder-vars-oldsize": "Ескі беттің көлемі",
"abusefilter-edit-builder-vars-removedlines": "Өңдемеде жолдардың алынуы",
"abusefilter-edit-builder-vars-summary": "Өңдеме түйіндемесі/себебі",
- "abusefilter-edit-builder-vars-article-id": "Бет ID-і",
- "abusefilter-edit-builder-vars-article-ns": "Бет атау кеңістігі",
- "abusefilter-edit-builder-vars-article-text": "Беті аты (атау кеңістігінсіз)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Толық бет атауы",
- "abusefilter-edit-builder-vars-article-views": "Бет қаралуы",
+ "abusefilter-edit-builder-vars-page-id": "Бет ID-і",
+ "abusefilter-edit-builder-vars-page-ns": "Бет атау кеңістігі",
+ "abusefilter-edit-builder-vars-page-title": "Беті аты (атау кеңістігінсіз)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Толық бет атауы",
"abusefilter-edit-builder-vars-movedfrom-id": "Жылжытылған қайнар бетінің бет ID-і",
"abusefilter-edit-builder-vars-movedfrom-ns": "Жылжытылған қайнар бетінің атау кеңістігі",
- "abusefilter-edit-builder-vars-movedfrom-text": "Жылжытылған қайнар бетінің атауы",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Жылжытылған қайнар бетінің толық атауы",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Жылжытылған қайнар бетінің атауы",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Жылжытылған қайнар бетінің толық атауы",
"abusefilter-edit-builder-vars-movedto-id": "Жылжытуға тағайындалған беттің ID-і",
"abusefilter-edit-builder-vars-movedto-ns": "Жылжытуға тағайындалған беттің есім кеңістігі",
- "abusefilter-edit-builder-vars-movedto-text": "Жылжытуға тағайындалған беттің атауы",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Жылжытуға тағайындалған беттің толық атауы",
+ "abusefilter-edit-builder-vars-movedto-title": "Жылжытуға тағайындалған беттің атауы",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Жылжытуға тағайындалған беттің толық атауы",
"abusefilter-edit-builder-vars-user-editcount": "Қатысушының өңдеме саны",
"abusefilter-edit-builder-vars-user-age": "Қатысушы тіркелгісінің жасы",
"abusefilter-edit-builder-vars-user-name": "Қатысушы тіркелгісінің есімі",
@@ -276,7 +270,6 @@
"abusefilter-topnav-import": "Сүзгішті импорттау",
"abusefilter-log-name": "Қиянаттауды сүзгілеу журналы",
"abusefilter-log-header": "Бұл журналда сүзгіштердің жасалу өзгерістерінің түйіндемесі көрсетілген.\nТолық егжей-тегжейі үшін жуықтағы сүзгіш өзгерістері [[Special:AbuseFilter/history|тізімін]] қараңыз.",
- "abusefilter-log-entry-modify": "$1 өзгертті ($2)",
"abusefilter-log-noresults": "Нәтиже жоқ",
"abusefilter-diff-title": "Түзетулер арасындағы айырмашылық",
"abusefilter-diff-item": "Дана",
diff --git a/AbuseFilter/i18n/km.json b/AbuseFilter/i18n/km.json
index 430adbd8..2f35736b 100644
--- a/AbuseFilter/i18n/km.json
+++ b/AbuseFilter/i18n/km.json
@@ -78,7 +78,6 @@
"abusefilter-list-options-scope": "មើលតម្រងពីក្នុង៖",
"abusefilter-list-options-scope-local": "វិគីតំបន់",
"abusefilter-list-options-scope-global": "ច្បាប់សាកល",
- "abusefilter-list-options-disabled": "តំម្រងអសកម្ម៖",
"abusefilter-list-options-hidedisabled": "លាក់តម្រងអសកម្ម",
"abusefilter-list-options-submit": "បន្ទាន់សម័យ",
"abusefilter-tools-submitexpr": "វាយតម្លៃ",
@@ -102,7 +101,6 @@
"abusefilter-edit-lastmod-text": "$1 ដោយ $2",
"abusefilter-edit-action-block": "ហាមឃាត់អ្នកប្រើប្រាស់ និង/ឬអាសយដ្ឋានIPពីការកែប្រែ",
"abusefilter-edit-throttle-period": "រយៈពេល៖",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|second|វិនាទី}}",
"abusefilter-edit-warn-message": "សារ​ប្រព័ន្ធ​ដែល​ប្រើ​ប្រាស់​សម្រាប់​ការ​ព្រមាន​៖",
"abusefilter-edit-warn-other": "សារ​ផ្សេងទៀត",
"abusefilter-edit-warn-other-label": "ឈ្មោះ​ទំព័រ​នៃ​សារ​ដទៃ​ផ្សេង​ទៀត​៖\n៖''(ដោយ​គ្មាន​បុព្វបទ​ MediaWiki)''",
@@ -156,10 +154,10 @@
"abusefilter-edit-builder-vars-oldsize": "ទំហំទំព័រចាស់",
"abusefilter-edit-builder-vars-removedlines": "បន្ទាត់ដែលត្រូវបានយកចេញក្នុងកំណែប្រែ",
"abusefilter-edit-builder-vars-summary": "កែប្រែសេចក្តីសង្ខេប/ហេតុផល",
- "abusefilter-edit-builder-vars-article-id": "អត្ថសញ្ញាណទំព័រ",
- "abusefilter-edit-builder-vars-article-ns": "លំហឈ្មោះទំព័រ",
- "abusefilter-edit-builder-vars-article-text": "ចំណង​ជើង​ទំព័រ​ (ដោយ​គ្មាន​លំហ​ឈ្មោះ​)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "ចំនងជើងពេញរបស់អត្ថបទ",
+ "abusefilter-edit-builder-vars-page-id": "អត្ថសញ្ញាណទំព័រ",
+ "abusefilter-edit-builder-vars-page-ns": "លំហឈ្មោះទំព័រ",
+ "abusefilter-edit-builder-vars-page-title": "ចំណង​ជើង​ទំព័រ​ (ដោយ​គ្មាន​លំហ​ឈ្មោះ​)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "ចំនងជើងពេញរបស់អត្ថបទ",
"abusefilter-edit-builder-vars-user-editcount": "កែប្រែចំនួនអ្នកប្រើប្រាស់",
"abusefilter-edit-builder-vars-user-age": "អាយុកាលគណនីអ្នកប្រើប្រាស់",
"abusefilter-edit-builder-vars-user-name": "ឈ្មោះគណនីអ្នកប្រើប្រាស់",
diff --git a/AbuseFilter/i18n/kn.json b/AbuseFilter/i18n/kn.json
index 8012b753..f8670360 100644
--- a/AbuseFilter/i18n/kn.json
+++ b/AbuseFilter/i18n/kn.json
@@ -47,7 +47,6 @@
"abusefilter-list-options-scope": "..ಯಿಂದ ಶೋಧಕಗಳನ್ನು ತೋರಿಸು",
"abusefilter-list-options-scope-local": "ಪ್ರಾದೇಶಿಕ ವಿಕಿ",
"abusefilter-list-options-scope-global": "ಜಾಗತಿಕ ನಿಯಮಗಳು",
- "abusefilter-list-options-disabled": "ನಿಷ್ಕ್ರಿಯ ಶೋಧಕಗಳು",
"abusefilter-list-options-hidedisabled": "ನಿಷ್ಕ್ರಿಯ ಶೋಧಕಗಳನ್ನು ಅಡಗಿಸು",
"abusefilter-list-options-submit": "ಪರಿಷ್ಕರಿಸು",
"abusefilter-tools-submitexpr": "ಮೌಲ್ಯ ನಿರ್ಣಯ ಮಾಡು",
@@ -86,8 +85,8 @@
"abusefilter-edit-builder-vars-oldsize": "ಹಳೇ ಪುಟದ ಅಳತೆ",
"abusefilter-edit-builder-vars-removedlines": "ತಿದ್ದಿದಾಗ ತೆಗೆದ ಸಾಲುಗಳು",
"abusefilter-edit-builder-vars-summary": "ತಿದ್ದಿದಕ್ಕೆ ಸಂಕ್ಷೇಪವಾದ/ಕಾರಣ",
- "abusefilter-edit-builder-vars-article-id": "ಪುಟದ ID",
- "abusefilter-edit-builder-vars-article-prefixedtext": "ಪೂರ್ಣ ಪುಟದ ಹೆಸರು",
+ "abusefilter-edit-builder-vars-page-id": "ಪುಟದ ID",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "ಪೂರ್ಣ ಪುಟದ ಹೆಸರು",
"abusefilter-edit-builder-vars-user-age": "ಬಳಕೆದಾರನ ವಯಸ್ಸು",
"abusefilter-edit-builder-vars-user-name": "ಬಳೆಕೆದಾರನ ಹೆಸರು",
"abusefilter-edit-builder-vars-user-blocked": "ಬಳಕೆದಾರ ನಿರ್ಬಂಧಿಸಲ್ಪಟ್ಟಿರುವನೋ",
diff --git a/AbuseFilter/i18n/ko.json b/AbuseFilter/i18n/ko.json
index 689c7bb3..62b57a0d 100644
--- a/AbuseFilter/i18n/ko.json
+++ b/AbuseFilter/i18n/ko.json
@@ -21,21 +21,24 @@
"Matma Rex",
"Ykhwong",
"Jerrykim306",
- "Delim"
+ "Delim",
+ "Bluemersen",
+ "Tursetic",
+ "Garam"
]
},
"abusefilter-desc": "사용자 편집을 규칙에 따라 자동으로 검사합니다",
- "abusefilter": "편집 필터 관리",
+ "abusefilter": "편집 필터 설정",
"abuselog": "편집 필터 기록",
"abusefilter-intro": "편집 필터 관리 인터페이스를 사용하는 여러분을 환영합니다.\n편집 필터는 모든 행위에 대해 문제가 있는지 자동으로 검사하는 소프트웨어입니다.\n이 인터페이스는 정의된 필터 목록을 나열하며, 나열된 필터는 수정할 수 있습니다.",
- "abusefilter-mustbeeditor": "보안상의 이유로, 편집 필터 편집 권한을 가진 사용자만이 이 양식을 사용할 수 있습니다.",
- "abusefilter-warning": "'''경고:''' 이 동작은 유해한 것으로 자동 판별되었습니다.\n비생산적인 편집은 즉시 되돌려지며,\n이러한 편집이 반복되거나 정도가 심한 경우 계정이나 IP 주소가 차단될 것입니다.\n만약 해당 동작에 문제가 없다면, 확인을 위해 다시 저장해도 됩니다.\n문제가 되는 관련 규칙에 대한 간략한 설명은 다음과 같습니다: $1",
+ "abusefilter-mustviewprivateoredit": "보안상의 이유로, 비공개 편집 필터를 보거나 필터 편집 권한을 가진 사용자만이 이 양식을 사용할 수 있습니다.",
+ "abusefilter-warning": "'''경고:''' 이 동작은 유해한 것으로 자동 판별되었습니다.\n비생산적인 동작은 즉시 되돌려질 것이며,\n이러한 편집이 반복되거나 정도가 심한 경우 계정이나 IP 주소가 차단될 것입니다.\n만약 해당 동작에 문제가 없다면, 확인을 위해 다시 저장해도 됩니다.\n문제가 되는 관련 규칙에 대한 간략한 설명은 다음과 같습니다: $1",
"abusefilter-disallowed": "이 동작은 유해한 것으로 자동 판별되었기 때문에 불허되었습니다.\n이 동작에 문제가 없다면 관리자에게 무엇을 하려 하는지 알려 주세요.\n문제가 되는 관련 규칙에 대한 간략한 설명은 다음과 같습니다: $1",
"abusefilter-blocked-display": "시스템이 현재 동작에 문제가 있다고 판단하여 동작의 실행을 금지하였습니다.\n또한 {{SITENAME}}을(를) 보호하기 위하여 사용 중인 계정과 관련된 IP 주소가 차단되었습니다.\n이 차단이 오류로 인한 것이라면 관리자에게 문의해 주세요.\n문제가 된 필터 규칙은 다음과 같습니다: $1",
"abusefilter-degrouped": "이 동작은 유해한 것으로 자동 판별되었습니다.\n따라서 동작이 불허되었으며, 계정이 비정상적으로 사용된다고 의심되어 모든 권한이 해제되었습니다.\n이것이 잘못된 판별이라고 생각되시면 사무관에게 연락하여 이 동작에 대한 설명을 제공해 주세요. 그러면 권한은 복구될 것입니다.\n문제가 되는 관련 규칙에 대한 간략한 설명은 다음과 같습니다: $1",
"abusefilter-autopromote-blocked": "시스템이 현재 동작에 문제가 있다고 판단하여 동작이 불허되었습니다.\n또한 보안상 이유로 사용자 계정에 부여된 일부 권한이 일시적으로 정지되었습니다.\n문제가 된 필터 규칙은 다음과 같습니다: $1",
"abusefilter-blocker": "편집 필터",
- "abusefilter-blockreason": "편집 필터에 의해 자동적으로 차단되었습니다.\n일치한 규칙에 대한 설명: $1",
+ "abusefilter-blockreason": "편집 필터에 의해 자동으로 차단되었습니다.\n일치한 규칙에 대한 설명: $1",
"abusefilter-degroupreason": "편집 필터에 의해 자동으로 권한이 해제되었습니다.\n규칙 설명: $1",
"abusefilter-accountreserved": "이 계정 이름은 편집 필터가 사용하도록 지정되어 있습니다.",
"right-abusefilter-modify": "편집 필터 수정",
@@ -43,6 +46,7 @@
"right-abusefilter-log": "편집 필터 기록 보기",
"right-abusefilter-log-detail": "편집 필터 기록의 자세한 내용 보기",
"right-abusefilter-private": "편집 필터 기록의 비공개 정보 보기",
+ "right-abusefilter-private-log": "편집 필터 비공개 상세 정보 접근 기록 보기",
"right-abusefilter-modify-restricted": "편집 필터의 제한된 기능 설정 바꾸기",
"right-abusefilter-revert": "주어진 필터에 의한 모든 바뀜을 되돌리기",
"right-abusefilter-view-private": "비공개된 필터 보기",
@@ -55,9 +59,11 @@
"action-abusefilter-log": "편집 필터 기록을 볼",
"action-abusefilter-log-detail": "편집 필터 기록에서 자세한 내용을 볼",
"action-abusefilter-private": "편집 필터 기록에서 비공개 내용을 볼",
+ "action-abusefilter-private-log": "편집 필터 비공개 상세 정보 접근 기록 보기",
"action-abusefilter-modify-restricted": "편집 필터의 제한된 기능 설정을 바꿀",
"action-abusefilter-revert": "주어진 필터에 의한 모든 바뀜을 되돌릴",
"action-abusefilter-view-private": "비공개된 필터를 볼",
+ "action-abusefilter-log-private": "비공개된 필터의 기록을 볼",
"abusefilter-log": "편집 필터 기록",
"abusefilter-log-summary": "이 기록은 필터 규칙과 일치하는 모든 행위에 대한 목록을 보여줍니다.",
"abusefilter-log-search": "편집 필터 기록 검색",
@@ -65,8 +71,19 @@
"abusefilter-log-search-filter": "필터 ID (파이프로 구분):",
"abusefilter-log-search-title": "제목:",
"abusefilter-log-search-wiki": "위키:",
+ "abusefilter-log-search-impact": "결과:",
+ "abusefilter-log-search-impact-all": "모든 조치",
+ "abusefilter-log-search-impact-saved": "저장된 변경사항만",
+ "abusefilter-log-search-impact-not-saved": "저장된 변경사항 제외",
"abusefilter-log-search-entries-label": "공개 여부:",
"abusefilter-log-search-entries-all": "모든 엔트리",
+ "abusefilter-log-search-entries-hidden": "숨겨진 항목만",
+ "abusefilter-log-search-entries-visible": "볼 수 있는 항목만 보기",
+ "abusefilter-log-search-action-label": "필터 작동 원인:",
+ "abusefilter-log-search-action-other": "기타",
+ "abusefilter-log-search-action-any": "모두",
+ "abusefilter-log-search-action-taken-label": "조치:",
+ "abusefilter-log-search-action-taken-any": "모두",
"abusefilter-log-search-submit": "검색",
"abusefilter-log-entry": "$1: $2님이 $4 문서에서 \"$3\" 동작을 {{GENDER:$8|수행하여}} 편집 필터가 {{GENDER:$8|작동하였습니다}}.\n조치: $5;\n필터 설명: $6",
"abusefilter-log-entry-withdiff": "$1: $2님이 $4 문서에서 \"$3\" 동작을 {{GENDER:$8|수행하여}} 편집 필터가 {{GENDER:$8|작동하였습니다}}.\n조치: $5;\n필터 설명: $6 ($7)",
@@ -80,28 +97,42 @@
"abusefilter-log-details-var": "변수",
"abusefilter-log-details-val": "값",
"abusefilter-log-details-vars": "명령 변수",
- "abusefilter-log-details-private": "비공개 정보",
+ "abusefilter-log-details-private": "비공개 기록 상세 정보",
"abusefilter-log-details-ip": "사용자의 IP 주소",
+ "abusefilter-log-details-checkuser": "사용자 검사",
"abusefilter-log-noactions": "없음",
"abusefilter-log-details-diff": "편집에서 바뀐 내용",
"abusefilter-log-linkoncontribs": "편집 필터 기록",
"abusefilter-log-linkoncontribs-text": "{{GENDER:$1|이 사용자}}의 편집 필터 기록",
+ "abusefilter-log-linkonhistory": "편집 필터 기록 보기",
+ "abusefilter-log-linkonhistory-text": "이 문서의 악용 기록 보기",
"abusefilter-log-hidden": "(항목 숨겨짐)",
"abusefilter-log-hidden-implicit": "(특정판이 삭제되어 숨겨짐)",
"abusefilter-log-cannot-see-details": "이 항목의 자세한 내용을 볼 권한이 없습니다.",
+ "abusefilter-log-cannot-see-private-details": "이 항목의 비공개 상세 정보를 볼 권한이 없습니다.",
+ "abusefilter-log-nonexistent": "지정된 ID를 가진 항목이 존재하지 않습니다.",
"abusefilter-log-details-hidden": "이 항목은 비공개로 설정되었기 때문에 이 항목의 자세한 사항을 볼 수 없습니다.",
+ "abusefilter-log-details-hidden-implicit": "연결된 판이 비공개로 설정되었기 때문에 이 항목의 자세한 사항을 볼 수 없습니다.",
"abusefilter-log-private-not-included": "지정한 필터 ID 중 하나 이상이 비공개 필터입니다. 비공개 필터의 자세한 내용을 볼 권한이 없기 때문에 해당 필터는 검색되지 않았습니다.",
"abusefilter-log-hide-legend": "기록 항목 숨기기",
"abusefilter-log-hide-id": "기록 항목 ID:",
"abusefilter-log-hide-hidden": "이 항목을 비공개로 설정",
"abusefilter-log-hide-reason": "이유:",
+ "abusefilter-log-hide-reason-other": "다른 이유/추가적인 이유:",
"abusefilter-log-hide-forbidden": "편집 필터 기록 항목을 숨길 권한이 없습니다.",
- "abusefilter-logentry-suppress": "\"[[$1]]\"을 비공개함",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\"을 공개함",
- "logentry-abusefilter-hit": "$1님이 $3에서 \"$5\" 동작을 하여 $4이(가) 작동하였습니다. 조치: $6 ($7)",
+ "abusefilter-log-entry-suppress": "$1님이 $3 기록을 {{GENDER:$2|숨겼습니다}}",
+ "abusefilter-log-entry-unsuppress": "$1님이 $3 기록의 {{GENDER:$2|숨김을 해제했습니다}}",
+ "logentry-abusefilter-hit": "$1님이 $3에서 \"$5\" 동작을 {{GENDER:$2|하여}} $4이(가) {{GENDER:$2|작동하였습니다}}. 조치: $6 ($7)",
+ "log-action-filter-abusefilter": "필터 변경 유형:",
+ "log-action-filter-abusefilter-create": "새 필터 만들기",
+ "log-action-filter-abusefilter-modify": "필터 수정",
+ "log-action-filter-suppress-abuselog": "악용 기록 숨기기",
+ "logentry-abusefilterprivatedetails-access": "$1님이 $3의 비공개 상세 정보에 {{GENDER:$2|접근하였습니다}}",
+ "abusefilterprivatedetails-log-name": "편집 필터 비공개 상세 정보 접근 기록",
"abusefilter-management": "편집 필터 관리",
"abusefilter-list": "모든 필터",
"abusefilter-list-id": "필터 ID",
+ "abusefilter-list-pattern": "패턴",
"abusefilter-list-status": "상태",
"abusefilter-list-public": "공개적 설명",
"abusefilter-list-consequences": "조치",
@@ -117,6 +148,7 @@
"abusefilter-enabled": "활성화됨",
"abusefilter-deleted": "삭제됨",
"abusefilter-disabled": "비활성화됨",
+ "abusefilter-throttled": "속도 제한",
"abusefilter-hitcount": "$1{{PLURAL:$1|회}}",
"abusefilter-new": "새 필터 만들기",
"abusefilter-return": "필터 관리 페이지로 돌아가기",
@@ -130,8 +162,16 @@
"abusefilter-list-options-scope-local": "로컬 규칙만",
"abusefilter-list-options-scope-global": "전역 규칙만",
"abusefilter-list-options-scope-all": "로컬 및 전역 규칙",
- "abusefilter-list-options-disabled": "비활성화된 필터:",
+ "abusefilter-list-options-further-options": "추가 옵션:",
"abusefilter-list-options-hidedisabled": "비활성화된 필터를 숨기기",
+ "abusefilter-list-options-hideprivate": "비공개 필터 숨기기",
+ "abusefilter-list-options-searchfield": "규칙 내 검색:",
+ "abusefilter-list-options-searchpattern": "패턴 추가",
+ "abusefilter-list-options-searchoptions": "검색 모드:",
+ "abusefilter-list-options-search-like": "순수 쿼리",
+ "abusefilter-list-options-search-rlike": "정규 표현식",
+ "abusefilter-list-options-search-irlike": "대소문자 구별을 하지 않는 정규 표현식",
+ "abusefilter-list-regexerror": "검색 중 오류가 발생했습니다: 정규 표현식 문법 오류.",
"abusefilter-list-options-submit": "적용",
"abusefilter-tools-text": "편집 필터를 제작하고 디버그하는 데 유용한 도구입니다.",
"abusefilter-tools-expr": "구문 검사기",
@@ -146,15 +186,18 @@
"abusefilter-edit": "편집 필터 편집하기",
"abusefilter-edit-subtitle": "필터 $1 편집하기",
"abusefilter-edit-subtitle-new": "필터 만들기",
+ "abusefilter-edit-token-not-match": "편집이 저장되지 않았습니다! 다시 저장해 주십시오.",
"abusefilter-edit-oldwarning": "<strong>이 필터의 이전 버전을 수정하고 있습니다.\n아래의 통계는 이 필터의 최신판에 대한 것입니다.\n변경 사항을 저장하면 편집하고 있는 판 이후의 모든 변경 사항을 덮어쓰게 됩니다.</strong> &bull;\n[[Special:AbuseFilter/history/$2|이 필터의 역사로 돌아가기]].",
"abusefilter-edit-status-label": "통계:",
"abusefilter-edit-status": "최근 {{PLURAL:$1|동작}} $1개 중 $2건($3%)이 이 필터와 일치하였습니다.",
"abusefilter-edit-status-profile": "최근 {{PLURAL:$1|동작}} $1개 중 $2건($3%)이 이 필터와 일치하였습니다.\n평균적으로 필터의 작동 시간은 $4밀리초이며, $5만큼의 {{PLURAL:$5|부하}}가 걸리고 있습니다.",
- "abusefilter-edit-throttled-warning": "'''경고''': 이 필터는 자동으로 유해한 것으로 표시되었습니다. 안전 장치로서 다음의 조치는 실행되지 않을 것입니다. ($1) 검토한 다음 조건을 [[mw:Extension:AbuseFilter/Conditions|최적화]]하여 이 제한을 제거하십시오",
+ "abusefilter-edit-throttled-warning": "'''경고''': 이 필터는 자동으로 유해한 것으로 표시되었습니다. 안전 장치로서 다음의 조치는 실행되지 않을 것입니다. ($1) 검토한 다음 조건을 [[mw:Extension:AbuseFilter/Conditions|최적화]]하여 이 제한을 제거하십시오.",
"abusefilter-edit-new": "새 필터",
"abusefilter-edit-save": "필터 저장하기",
"abusefilter-edit-id": "필터 ID:",
+ "abusefilter-edit-switch-editor": "편집기 전환",
"abusefilter-edit-description": "설명:\n:(공개됨)",
+ "abusefilter-edit-field-description": "설명",
"abusefilter-edit-group": "필터 그룹:",
"abusefilter-edit-flags": "설정:",
"abusefilter-edit-enabled": "이 필터 활성화하기",
@@ -162,6 +205,7 @@
"abusefilter-edit-hidden": "일반 사용자가 필터의 세부 사항을 보지 못하도록 숨기기",
"abusefilter-edit-global": "전역 필터",
"abusefilter-edit-rules": "필터 규칙:",
+ "abusefilter-edit-field-conditions": "조건",
"abusefilter-edit-notes": "참고:",
"abusefilter-edit-lastmod": "필터가 마지막으로 수정된 시각",
"abusefilter-edit-lastmod-text": "$1에 $2님이 바꿈",
@@ -172,25 +216,48 @@
"abusefilter-edit-action-blockautopromote": "사용자의 자동 인증 상태를 해제",
"abusefilter-edit-action-degroup": "모든 사용자 권한을 해제",
"abusefilter-edit-action-block": "사용자 및 IP 주소의 편집을 차단",
+ "abusefilter-edit-action-blocktalk": "사용자 및 IP 주소가 자신의 토론 문서를 편집하지 못하게 합니다",
"abusefilter-edit-action-throttle": "속도 제한을 넘었을 때만 필터를 적용",
- "abusefilter-edit-action-rangeblock": "사용자가 사용한 IP의 /16대역을 차단",
+ "abusefilter-edit-action-rangeblock": "사용자가 사용한 개별 IP 대역을 차단",
"abusefilter-edit-action-tag": "나중에 검토하기 위해 태그하기",
"abusefilter-edit-throttle-count": "허용할 동작 수:",
- "abusefilter-edit-throttle-period": "주기:",
- "abusefilter-edit-throttle-seconds": "$1{{PLURAL:$1|초}}",
- "abusefilter-edit-throttle-groups": "속도 제한 단위:\n:(1줄당 1개씩, 쉼표로 여러 항목 구분)",
+ "abusefilter-edit-throttle-period": "주기 (단위: 초):",
+ "abusefilter-edit-throttle-groups": "속도 제한 묶기 기준:",
+ "abusefilter-edit-throttle-ip": "IP 주소",
+ "abusefilter-edit-throttle-user": "사용자 계정",
+ "abusefilter-edit-throttle-range": "/16 대역",
+ "abusefilter-edit-throttle-creationdate": "계정 만들기 서버 시간",
+ "abusefilter-edit-throttle-editcount": "편집 수",
+ "abusefilter-edit-throttle-site": "사이트 전반",
+ "abusefilter-edit-throttle-page": "문서",
+ "abusefilter-throttle-details": "$2{{PLURAL:$2|초}}당 {{PLURAL:$1|동작}} $1회를 허용, 속도 제한 단위: $3",
"abusefilter-edit-warn-message": "경고할 때 사용할 시스템 메시지:",
"abusefilter-edit-warn-other": "다른 메시지",
- "abusefilter-edit-warn-other-label": "다른 메시지의 이름:\n:({{ns:8}} 접두어를 뺀 이름)",
+ "abusefilter-edit-warn-other-label": "다른 메시지의 문서 이름:\n:(\"미디어위키:\" 접두어를 뺀 이름)",
"abusefilter-edit-warn-actions": "동작:",
- "abusefilter-edit-warn-preview": "선택한 메시지 미리 보기",
+ "abusefilter-edit-warn-preview": "선택한 메시지 미리 보기 표시/숨기기",
"abusefilter-edit-warn-edit": "선택한 메시지를 만들기/편집하기",
- "abusefilter-edit-tag-tag": "적용할 [[Special:Tags|태그]] (1줄당 1개씩):",
+ "abusefilter-edit-disallow-message": "불허에 사용될 시스템 메시지:",
+ "abusefilter-edit-disallow-other": "다른 메시지",
+ "abusefilter-edit-disallow-other-label": "다른 메시지의 문서 이름:\n:(\"미디어위키:\" 접두어를 뺀 이름)",
+ "abusefilter-edit-disallow-actions": "동작:",
+ "abusefilter-edit-disallow-preview": "선택한 메시지 미리 보기 표시/숨기기",
+ "abusefilter-edit-disallow-edit": "선택한 메시지를 만들기/편집하기",
+ "abusefilter-edit-tag-tag": "적용할 [[Special:Tags|태그]]:",
+ "abusefilter-edit-tag-placeholder": "태그 추가 (하나씩 또는 쉼표 구분)",
+ "abusefilter-edit-tag-hidden-placeholder": "태그 추가 (쉼표로 구분)",
+ "abusefilter-edit-block-anon-durations": "익명 사용자의 차단 기간:",
+ "abusefilter-edit-block-user-durations": "등록된 사용자의 차단 기간:",
+ "abusefilter-block-anon": "익명 사용자 차단",
+ "abusefilter-block-user": "등록된 사용자 차단",
+ "abusefilter-block-talk": "토론 문서 차단됨",
"abusefilter-edit-denied": "이 필터는 비공개로 설정되었기 때문에 이 필터의 자세한 사항을 볼 수 없습니다.",
"abusefilter-edit-main": "필터 변수",
"abusefilter-edit-done-subtitle": "필터 편집됨",
- "abusefilter-edit-done": "[[Special:AbuseFilter/$1|필터 $3]]에 대한 [[Special:AbuseFilter/history/$1/diff/prev/$2|당신의 편집]]이 저장되었습니다.",
+ "abusefilter-edit-done": "[[Special:AbuseFilter/$1|필터 $3]]에서 [[Special:AbuseFilter/history/$1/diff/prev/$2|내 편집]]이 저장되었습니다.",
"abusefilter-edit-badsyntax": "입력된 필터에 구문 오류가 있습니다.\n파서 출력값: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "다음의 칸은 필수이므로 채워야 합니다: $1",
+ "abusefilter-edit-deleting-enabled": "사용 중인 필터를 삭제한 것으로 표시할 수 없습니다.",
"abusefilter-edit-restricted": "이 필터는 제한된 조치를 포함하므로 편집할 수 없습니다.\n필터를 편집하려면 제한된 조치를 설정할 수 있는 권한을 가진 사용자에게 문의하십시오.",
"abusefilter-edit-viewhistory": "이 필터의 역사 보기",
"abusefilter-edit-history": "역사:",
@@ -202,7 +269,7 @@
"abusefilter-edit-export": "이 필터를 다른 위키로 내보내기",
"abusefilter-edit-syntaxok": "감지된 구문 오류가 없습니다.",
"abusefilter-edit-syntaxerr": "구문 오류가 감지되었습니다: $1",
- "abusefilter-edit-bad-tags": "입력된 태그 중 올바르지 않은 값이 있습니다.\n태그는 짧고 특수 문자를 포함하지 않아야 합니다.",
+ "abusefilter-edit-bad-tags": "입력된 태그 중 올바르지 않은 값이 있습니다.\n태그는 짧고 특수 문자를 포함하지 않아야 하며, 다른 소프트웨어에 의해 확보되지 않은 것이어야 합니다. 다른 이름을 시도하시기 바랍니다.",
"abusefilter-edit-notallowed": "필터를 만들거나 편집할 권한이 없습니다.",
"abusefilter-edit-notallowed-global": "전역 필터를 만들거나 편집할 권한이 없습니다.",
"abusefilter-edit-notallowed-global-custom-msg": "전역 필터에는 사용자 정의 경고 메시지를 사용할 수 없습니다",
@@ -215,8 +282,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "나머지 (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "제곱 (**)",
"abusefilter-edit-builder-group-op-comparison": "비교 연산자",
- "abusefilter-edit-builder-op-comparison-equal": "같음 (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "같지 않음 (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "다음과 같은 값 (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "다음과 같은 값과 유형 (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "다음과 같지 않은 값 (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "다음과 같지 않은 값과 유형 (!==)",
"abusefilter-edit-builder-op-comparison-lt": "보다 작음 (<)",
"abusefilter-edit-builder-op-comparison-gt": "보다 큼 (>)",
"abusefilter-edit-builder-op-comparison-lte": "작거나 같음 (<=)",
@@ -235,28 +304,35 @@
"abusefilter-edit-builder-misc-stringlit": "문자열 그대로 (\"\")",
"abusefilter-edit-builder-misc-tern": "3단 연산자 (X ? Y : Z)",
"abusefilter-edit-builder-misc-cond": "조건부 (if X then Y else Z)",
- "abusefilter-edit-builder-group-funcs": "기능",
+ "abusefilter-edit-builder-group-funcs": "함수",
"abusefilter-edit-builder-funcs-length": "문자열 길이 (length)",
"abusefilter-edit-builder-funcs-lcase": "소문자로 변환 (lcase)",
"abusefilter-edit-builder-funcs-ucase": "대문자로 변환 (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "혼동되는 글자를 정규화 (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "문자열을 정규화하고 검색하면서 여러 개의 부스트링을 OR 방식으로 찾습니다 (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "문자열을 정규화하고 검색하면서 여러 개의 부스트링을 AND 방식으로 찾습니다 (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "중복되는 글자를 제거 (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "특수 문자 비율 (specialratio)",
"abusefilter-edit-builder-funcs-norm": "정규화 (norm)",
"abusefilter-edit-builder-funcs-count": "문자열 Y 안의 문자열 X의 반복 횟수 (count)",
"abusefilter-edit-builder-funcs-rcount": "문자열 Y 안의 정규 표현식으로 표현된 X의 반복 횟수 (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "수집되는 각각의 그룹마다 텍스트 내에서 일치하는 정규 표현식 배열 (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "공백 제거 (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "특수 문자를 제거 (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "IP가 대역 안에 있는지 여부 (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "문자열에서 여러 하위 문자열 검색 (contains_any)",
- "abusefilter-edit-builder-funcs-substr": "하위 문자열",
+ "abusefilter-edit-builder-funcs-contains-any": "문자열에서 여러 하위 문자열을 OR 방식으로 검색합니다. (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "문자열에서 여러 하위 문자열을 AND 방식으로 검색합니다. (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "주어진 문자열이 다음의 인수 중 어느 것과 동일(===)한지 확인합니다 (equals_to_any)",
+ "abusefilter-edit-builder-funcs-substr": "하위 문자열 (substr)",
"abusefilter-edit-builder-funcs-strpos": "문자열 내의 하위 문자열의 위치 (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "문자열을 찾아 바꾸기 (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "정규 표현식에서 문자열을 리터럴로 이스케이프 (rescape)",
"abusefilter-edit-builder-funcs-set_var": "변수 설정 (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "HTML 엔티티를 유니코드 문자로 일반화합니다 (sanitize)",
"abusefilter-edit-builder-group-vars": "변수",
"abusefilter-edit-builder-vars-accountname": "계정 이름 (계정 만들 때)",
"abusefilter-edit-builder-vars-timestamp": "바뀐 시점의 유닉스 시간 기록",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "기록 타임스탬프",
"abusefilter-edit-builder-vars-action": "동작",
"abusefilter-edit-builder-vars-addedlines": "편집 중 추가된 줄",
"abusefilter-edit-builder-vars-delta": "편집에서의 문서 크기 변화",
@@ -267,19 +343,21 @@
"abusefilter-edit-builder-vars-new-content-model": "새 콘텐츠 모델",
"abusefilter-edit-builder-vars-removedlines": "편집 중 제거된 줄",
"abusefilter-edit-builder-vars-summary": "편집 요약/이유",
- "abusefilter-edit-builder-vars-article-id": "문서 ID",
- "abusefilter-edit-builder-vars-article-ns": "문서 이름공간",
- "abusefilter-edit-builder-vars-article-text": "(이름공간을 뺀) 문서 제목",
- "abusefilter-edit-builder-vars-article-prefixedtext": "전체 문서 제목",
- "abusefilter-edit-builder-vars-article-views": "문서 조회수",
+ "abusefilter-edit-builder-vars-page-id": "문서 ID",
+ "abusefilter-edit-builder-vars-page-ns": "문서 이름공간",
+ "abusefilter-edit-builder-vars-page-title": "(이름공간을 뺀) 문서 제목",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "전체 문서 제목",
+ "abusefilter-edit-builder-vars-page-age": "문서의 나이 (단위: 초)",
"abusefilter-edit-builder-vars-movedfrom-id": "이동 전 문서의 ID",
"abusefilter-edit-builder-vars-movedfrom-ns": "이동 전 문서의 이름공간",
- "abusefilter-edit-builder-vars-movedfrom-text": "이동 전의 제목",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "이동 전 문서의 전체 이름",
+ "abusefilter-edit-builder-vars-movedfrom-title": "이동 전의 제목",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "이동 전 문서의 전체 이름",
+ "abusefilter-edit-builder-vars-movedfrom-age": "이동 원본 문서의 나이 (단위: 초)",
"abusefilter-edit-builder-vars-movedto-id": "이동 후 문서의 ID",
"abusefilter-edit-builder-vars-movedto-ns": "이동 후 문서의 이름공간",
- "abusefilter-edit-builder-vars-movedto-text": "이동 후 문서의 제목",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "이동 후 문서의 전체 제목",
+ "abusefilter-edit-builder-vars-movedto-title": "이동 후 문서의 제목",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "이동 후 문서의 전체 제목",
+ "abusefilter-edit-builder-vars-movedto-age": "이동 대상 문서의 나이 (단위: 초)",
"abusefilter-edit-builder-vars-user-editcount": "사용자의 편집 수",
"abusefilter-edit-builder-vars-user-age": "사용자 계정 만든 후 지난 시간",
"abusefilter-edit-builder-vars-user-name": "사용자 계정 이름",
@@ -287,25 +365,37 @@
"abusefilter-edit-builder-vars-user-rights": "사용자가 가진 권한",
"abusefilter-edit-builder-vars-user-blocked": "사용자의 차단 여부",
"abusefilter-edit-builder-vars-user-emailconfirm": "이메일이 인증된 시각",
- "abusefilter-edit-builder-vars-recent-contributors": "이 문서를 마지막으로 편집한 편집자 10명",
+ "abusefilter-edit-builder-vars-recent-contributors": "이 문서에 마지막으로 기여한 사용자 10명",
"abusefilter-edit-builder-vars-first-contributor": "이 문서에 처음으로 기여한 사용자",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "이동 원본 문서에 마지막으로 기여한 사용자 10명",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "이동 원본 문서에 처음으로 기여한 사용자",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "이동 대상 문서에 마지막으로 기여한 사용자 10명",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "이동 대상 문서에 처음으로 기여한 사용자",
"abusefilter-edit-builder-vars-all-links": "바뀐 글에 포함된 모든 외부 링크",
"abusefilter-edit-builder-vars-added-links": "편집 중 추가된 모든 외부 링크",
"abusefilter-edit-builder-vars-removed-links": "편집 중 제거된 모든 외부 링크",
- "abusefilter-edit-builder-vars-old-text": "편집 전 문서의 내용 (위키문법)",
+ "abusefilter-edit-builder-vars-old-text": "편집 전 과거 문서의 위키텍스트 (더 이상 쓰이지 않음)",
"abusefilter-edit-builder-vars-new-text": "편집 후 문서의 내용 (위키문법)",
"abusefilter-edit-builder-vars-new-pst": "새 문서 위키 텍스트, 변환을 미리 저장",
"abusefilter-edit-builder-vars-diff-pst": "편집으로 인한 바뀐 내용의 차이가 통합됨, 미리 저장 변형됨",
"abusefilter-edit-builder-vars-addedlines-pst": "줄이 편집 중 추가됨, 미리 저장 변형됨",
- "abusefilter-edit-builder-vars-new-text-stripped": "편집 후 문서의 마크업을 제거한 내용",
+ "abusefilter-edit-builder-vars-new-text-stripped": "편집 후 마크업을 제거한 문서 내용",
"abusefilter-edit-builder-vars-new-html": "편집 후의 HTML 소스",
"abusefilter-edit-builder-vars-restrictions-edit": "문서 편집 보호 수준",
"abusefilter-edit-builder-vars-restrictions-move": "문서 이동 보호 수준",
"abusefilter-edit-builder-vars-restrictions-create": "문서의 만들기 보호 설정",
"abusefilter-edit-builder-vars-restrictions-upload": "파일의 올리기 보호 설정",
- "abusefilter-edit-builder-vars-old-text-stripped": "마크업을 제외한 편집 전의 문서 내용",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "이동 원본 문서의 편집 보호 수준",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "이동 원본 문서의 이동 보호 수준",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "이동 원본 문서의 만들기 보호 설정",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "이동 원본 파일의 올리기 보호 설정",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "이동 대상 문서의 편집 보호 수준",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "이동 대상 문서의 이동 보호 수준",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "이동 대상 문서의 만들기 보호 설정",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "이동 대상 파일의 올리기 보호 설정",
+ "abusefilter-edit-builder-vars-old-text-stripped": "편집 전 마크업을 제거한 문서 내용",
"abusefilter-edit-builder-vars-old-links": "편집하기 전의 문서 링크",
- "abusefilter-edit-builder-vars-old-html": "HTML로 변환된 편집 전 문서 내용",
+ "abusefilter-edit-builder-vars-old-html": "HTML로 구문 분석된 과거 문서의 위키텍스트 (더 이상 쓰이지 않음)",
"abusefilter-edit-builder-vars-minor-edit": "사소한 편집으로 표시할지의 여부",
"abusefilter-edit-builder-vars-file-sha1": "파일 내용의 SHA1 해시",
"abusefilter-edit-builder-vars-file-size": "파일 크기 (바이트 단위)",
@@ -332,24 +422,27 @@
"abusefilter-history-filterid": "필터",
"abusefilter-history-select-legend": "검색 구체화",
"abusefilter-history-select-user": "사용자:",
+ "abusefilter-history-select-filter": "필터 ID:",
"abusefilter-history-select-submit": "필터",
"abusefilter-history-diff": "차이",
"abusefilter-history-error-hidden": "요청한 필터는 비공개되어 있어 필터의 역사를 볼 수 없습니다.",
"abusefilter-exception-unexpectedatend": "$1번째 문자에 예상치 못한 \"$2\"가 있습니다.",
- "abusefilter-exception-expectednotfound": "$1번째 문자에 있어야 할 $2가 발견되지 않았습니다. ($3 $4를 대신 찾아보세요.)",
+ "abusefilter-exception-expectednotfound": "$1번째 문자에 있어야 할 $2가 발견되지 않았습니다. ($3 $4이(가) 대신 발견되었습니다)",
"abusefilter-exception-unrecognisedkeyword": "$1번째 문자에 알 수 없는 키워드 $2가 있습니다.",
"abusefilter-exception-unexpectedtoken": "$1번째 문자에 예기치 못한 토큰 \"$3\" ($2형)이 있습니다.",
"abusefilter-exception-unclosedstring": "$1에서 시작하는 닫히지 않은 문자열이 있습니다.",
"abusefilter-exception-invalidoperator": "$1번째 문자에 잘못된 연산자 \"$2\"가 사용되었습니다.",
"abusefilter-exception-unrecognisedtoken": "$1번째 문자에 알 수 없는 토큰 \"$2\"이 있습니다.",
- "abusefilter-exception-noparams": "$1번째 문자에 있는 \"$2\" 함수에 변수가 없습니다.",
+ "abusefilter-exception-noparams": "$1번째 문자에 있는 \"$2\" 함수에 변수가 없습니다.\n{{PLURAL:$3|인수}} $3개를 예측했습니다.",
"abusefilter-exception-dividebyzero": "$1번째 문자에서 $2를 0으로 나누려 하고 있습니다.",
"abusefilter-exception-unrecognisedvar": "$1번째 문자에 알 수 없는 변수 $2가 있습니다.",
"abusefilter-exception-notenoughargs": "$1번째 문자에서 호출한 $2 함수에 변수가 부족합니다.\n{{PLURAL:$3|변수}} $3개가 있어야 하지만 $4개가 있습니다.",
- "abusefilter-exception-regexfailure": "$1번째 글자의 \"$3\" 정규 표현식에서 오류 발생: \"$2\"",
+ "abusefilter-exception-regexfailure": "$1번째 글자의 \"$2\" 정규 표현식에 오류가 있습니다.",
"abusefilter-exception-overridebuiltin": "$1번째 문자에서 소프트웨어에 내장된 변수를 덮는 \"$2\" 변수가 있습니다.",
- "abusefilter-exception-outofbounds": "$1번째 문자에서 존재하지 않는 목록 항목 $2(목록 길이 = $3)를 요구하고 있습니다.",
- "abusefilter-exception-notlist": "$1번째 문자에서 배열이 아닌 배열 항목을 요구하고 있습니다.",
+ "abusefilter-exception-outofbounds": "$1번째 문자에서 존재하지 않는 배열 항목 $2(배열 길이 = $3)를 요청하고 있습니다.",
+ "abusefilter-exception-notarray": "$1번째 문자에서 배열이 아닌 배열 항목을 요구하고 있습니다.",
+ "abusefilter-exception-invalidiprange": "$1 문자열에 유효하지 않은 \"$2\" IP 주소가 제공되었습니다.",
+ "abusefilter-exception-disabledvar": "$1번째 글자에 있는 $2 변수는 더 이상 사용되지 않습니다.",
"abusefilter-action-tag": "태그",
"abusefilter-action-throttle": "속도 제한",
"abusefilter-action-warn": "경고",
@@ -360,13 +453,14 @@
"abusefilter-action-disallow": "불허",
"abusefilter-revert-title": "필터 $1로 모든 편집을 되돌리기",
"abusefilter-revert-intro": "이 양식을 통해 부정 행위 필터 $1이 일으킨 모든 조치를 되돌릴 수 있습니다.\n이 도구를 사용할 때 주의해주세요.",
- "abusefilter-revert-preview-item": "$1: $2가 $4에 $3함\n되돌릴 동작: $5 ($6)",
+ "abusefilter-revert-preview-item": "$1: $2가 $4에 $3{{GENDER:$7|함}}\n되돌릴 동작: $5 ($6)",
"abusefilter-revert-search-legend": "부정 행위 방지 필터의 동작 중 되돌릴 동작 선택하기",
"abusefilter-revert-periodstart": "시작 시간:",
"abusefilter-revert-periodend": "마지막 시간:",
"abusefilter-revert-search": "명령 선택하기",
- "abusefilter-revert-filter": "필터:",
+ "abusefilter-revert-filter": "필터 ID:",
"abusefilter-revert-preview-intro": "다음은 이 동작을 통해 복구될 부정 행위 방지 필터의 동작의 목록입니다.\n주의를 기울여 검토한 후에 \"{{int:abusefilter-revert-confirm}}\" 버튼을 클릭하십시오.",
+ "abusefilter-revert-confirm-legend": "되돌림 확인",
"abusefilter-revert-confirm": "확인",
"abusefilter-revert-success": "[[Special:AbuseFilter/$1|필터 $2]]에 의해 취해진 모든 조치를 되돌렸습니다.",
"abusefilter-revert-reason": "필터 $1에 의해 취해진 모든 조치를 자동으로 되돌림.\n이유: $2",
@@ -378,12 +472,20 @@
"abusefilter-test-submit": "시험",
"abusefilter-test-load": "불러오기",
"abusefilter-test-user": "편집한 사용자:",
+ "abusefilter-test-nobots": "봇 편집 숨기기",
"abusefilter-test-period-start": "특정 판 이후의 편집:",
"abusefilter-test-period-end": "특정 판 이전의 편집:",
"abusefilter-test-page": "바뀌는 문서:",
"abusefilter-test-shownegative": "필터와 일치하지 않는 편집을 보이기",
"abusefilter-test-syntaxerr": "입력한 구문에 오류가 있습니다.\n\"{{int:abusefilter-edit-check}}\" 버튼을 누르면 자세한 설명을 받을 수 있습니다.",
"abusefilter-test-badtitle": "입력하신 문서 제목이 잘못되었습니다. 제목에 사용할 수 없는 하나 이상의 문자를 포함하고 있을 수 있습니다.",
+ "abusefilter-test-action": "조치 유형:",
+ "abusefilter-test-search-type-all": "모든 조치",
+ "abusefilter-test-search-type-edit": "편집",
+ "abusefilter-test-search-type-move": "이동",
+ "abusefilter-test-search-type-delete": "삭제",
+ "abusefilter-test-search-type-upload": "업로드",
+ "abusefilter-test-search-type-createaccount": "계정 만들기",
"abusefilter-changeslist-examine": "검사",
"abusefilter-examine": "특정 편집을 검사",
"abusefilter-examine-intro": "이 문서에서 각각의 편집에 대해 부정 행위 방지 필터가 생성한 변수를 검사하고 필터에 대해 시험해볼 수 있습니다.",
@@ -410,7 +512,8 @@
"abusefilter-topnav-import": "필터 가져오기",
"abusefilter-log-name": "편집 필터 기록",
"abusefilter-log-header": "이 기록은 필터가 바뀜 기록의 요약본을 보여줍니다.\n자세한 정보는 [[Special:AbuseFilter/history|필터의 최근 바뀜]]을 참조하십시오.",
- "abusefilter-logentry-modify": "$1님이 $4을(를) {{GENDER:$2|수정했습니다}} ($5)",
+ "abusefilter-logentry-create": "$1님이 $4 필터를 {{GENDER:$2|만들었습니다}} ($5)",
+ "abusefilter-logentry-modify": "$1님이 $4 필터를 {{GENDER:$2|수정했습니다}} ($5)",
"abusefilter-log-noresults": "결과 없음",
"abusefilter-diff-title": "버전 사이의 차이",
"abusefilter-diff-item": "항목",
@@ -425,37 +528,16 @@
"abusefilter-import-submit": "데이터 가져오기",
"abusefilter-group-default": "기본값",
"abusefilter-http-error": "HTTP 오류가 발생했습니다: $1",
- "apihelp-abusefiltercheckmatch-description": "편집 필터가 변수 집합, 편집자가 기록한 편집 필터 이벤트와 일치하는지 확인합니다.\n\nvars, rcid 또는 logid가 필요하지만 오직 하나만 사용할 수 있습니다.",
- "apihelp-abusefiltercheckmatch-summary": "편집 필터가 변수 집합, 편집자가 기록한 편집 필터 이벤트와 일치하는지 확인합니다.",
- "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid, 또는 logid가 필요하지만 오직 하나만 사용할 수 있습니다.",
- "apihelp-abusefiltercheckmatch-param-filter": "일치하는 항목을 확인하기 위한 전체 필터 텍스트입니다.",
- "apihelp-abusefiltercheckmatch-param-vars": "시험을 위해 JSON으로 인코딩된 변수들의 배열입니다.",
- "apihelp-abusefiltercheckmatch-param-rcid": "검사할 최근 판 번호",
- "apihelp-abusefiltercheckmatch-param-logid": "검사할 최근 편집 필터 로그 번호",
- "apihelp-abusefiltercheckmatch-example-1": "최근의 변경 ID 15가 단순 필터와 일치하는지 시험합니다",
- "apihelp-abusefilterchecksyntax-description": "편집 필터의 구문을 검사합니다.",
- "apihelp-abusefilterchecksyntax-summary": "편집 필터의 구문을 검사합니다.",
- "apihelp-abusefilterchecksyntax-param-filter": "구문을 검사할 전체 필터 텍스트.",
- "apihelp-abusefilterchecksyntax-example-1": "유효한 필터의 문법 검사",
- "apihelp-abusefilterchecksyntax-example-2": "유효하지 않은 필터의 문법 검사",
- "apihelp-abusefilterevalexpression-description": "편집 필터의 식을 검사합니다.",
- "apihelp-abusefilterevalexpression-summary": "편집 필터의 식을 검사합니다.",
- "apihelp-abusefilterevalexpression-param-expression": "검사할 표현식.",
- "apihelp-abusefilterevalexpression-example-1": "간단한 표현식 검사",
- "apihelp-abusefilterunblockautopromote-description": "편집 필터 동작으로 인해 자동 인증을 받지 못하도록 제한된 사용자의 제한을 해제합니다.",
- "apihelp-abusefilterunblockautopromote-summary": "편집 필터 동작으로 인해 자동 인증을 받지 못하도록 제한된 사용자의 제한을 해제합니다.",
- "apihelp-abusefilterunblockautopromote-param-user": "제한을 해제할 사용자의 계정 이름",
- "apihelp-abusefilterunblockautopromote-example-1": "[[User:Example]]의 자동 인증 제한을 해제하기",
- "apihelp-query+abusefilters-description": "편집 필터에 관한 세부 사항을 출력합니다.",
- "apihelp-query+abusefilters-summary": "편집 필터에 관한 세부 사항을 표시합니다.",
- "apihelp-query+abusefilters-param-startid": "열거하기 시작할 필터의 ID",
- "apihelp-query+abusefilters-param-endid": "열거를 마칠 필터의 ID",
- "apihelp-query+abusefilters-param-show": "이 조건을 만족하는 필터만 출력하기.",
- "apihelp-query+abusefilters-param-limit": "열거할 필터의 최대 개수",
- "apihelp-query+abusefilters-param-prop": "얻고자 하는 속성",
- "apihelp-query+abuselog-example-1": "최근 기록 보기",
- "apihelp-query+abuselog-example-2": "[[API]]의 최근 기록 보기",
- "apierror-abusefilter-canttest": "편집 필터를 테스트할 권한이 없습니다.",
- "apierror-abusefilter-cantcheck": "편집 필터의 문법을 검사할 권한이 없습니다.",
- "apierror-abusefilter-badsyntax": "필터에 유효하지 않은 문법이 있습니다."
+ "abusefilter-view-private-submit": "비공개 상세 정보 보기",
+ "abusefilter-view-private": "비공개 상세 정보 보기",
+ "abusefilter-view-private-reason": "비공개 상세 정보에 접근하는 이유:",
+ "abusefilter-log-details-id": "기록 ID",
+ "abusefilter-invalid-request": "잘못된 요청입니다! [[Special:AbuseLog/$1]]의 폼을 통해 비공개 상세 기록에 접근한 다음 이유를 제공해야 합니다.",
+ "abusefilter-invalid-request-noid": "잘못된 요청입니다! 편집필터 기록 세부사항 문서를 통해 비공개 상세 기록에 접근한 다음 이유를 제공해야 합니다.",
+ "log-description-abusefilterprivatedetails": "이 기록은 사용자가 편집 기록의 비공개 상세 정보에 접근한 시간을 나열합니다.",
+ "abusefilter-noreason": "경고: 이 기록의 비공개 상세 정보를 보려면 이유를 지정해야 합니다.",
+ "abusefilter-log-ip-not-available": "사용할 수 없음",
+ "abusefilter-tag-reserved": "<code>abusefilter-condition-limit</code> 태그는 편집 필터에 의해 내부적으로 사용하기 위해 예약되어 있습니다.",
+ "tag-abusefilter-condition-limit": "조건 제한 도달",
+ "tag-abusefilter-condition-limit-description": "[[Special:AbuseFilter|편집필터]]가 모두 확인하지 못한 편집 또는 행위 ([[mw:Extension:AbuseFilter/Conditions|도움말]])"
}
diff --git a/AbuseFilter/i18n/krc.json b/AbuseFilter/i18n/krc.json
index 41f3e927..476842e7 100644
--- a/AbuseFilter/i18n/krc.json
+++ b/AbuseFilter/i18n/krc.json
@@ -15,8 +15,6 @@
"abusefilter-log-noactions": "джокъду",
"abusefilter-log-linkoncontribs": "джорукъдан чыгъыуланы журналы",
"abusefilter-log-hide-reason": "Чурум:",
- "abusefilter-logentry-suppress": "[[$1]] джашыр",
- "abusefilter-logentry-unsuppress": "[[$1]] кёгюз",
"abusefilter-list-id": "Фильтрни ID'си",
"abusefilter-list-status": "Статус",
"abusefilter-list-edit": "Тюрлендир",
diff --git a/AbuseFilter/i18n/ksh.json b/AbuseFilter/i18n/ksh.json
index 2f7979ea..f21b4c70 100644
--- a/AbuseFilter/i18n/ksh.json
+++ b/AbuseFilter/i18n/ksh.json
@@ -9,7 +9,6 @@
"abusefilter": "Ennschtällonge för der Meßbruchsfelter",
"abuselog": "Et Logbohch vum Meßbruchsfelter",
"abusefilter-intro": "Dach!\nHee kanns De Meßbruchsfelter verwallde, aanläje, ändere, fott maache, aan- un ußschallde.\nMeßbruchsfelter sin Projramme, woh mer automahtesch met heurestesche Meddel op de Metmaacher ier Akßuhne oppaß un automahtesch drop antwoodt.\n\nUnge es en Leß met de aanjlaate Felter, woh De eröm draan moodelle kanns.",
- "abusefilter-mustbeeditor": "För sesher ze sen, künne nur Metmaacher di Sigg hee aanloore, di och Feltere aanlääje un ändere dörve.",
"abusefilter-warning": "'''Opjepaß''': Mer han ene Automaht, dä hät dat, wat De jraad\naffjeschek häs, als wahscheinlesche Kappes odder Meßß ennjeschtohf.\nBeschtußte Änderonge wähde su odder su flöck retuhr jenumme.\nUßjemaate un besönders vill extra beschtußte Änderonge sorrje doför,\ndat Dinge Zohjang heh jeschpächt weed: Dinge Nahme als Metmaacher, odder\nde <i lang=\"en\">IP</i>-Addreß vun Dingem Kompjuhter, odder alle beeds sen dann betroffe.\nWann De ävver meins, dat Ding Änderong johd es — Automahte künne\nschlihßlesch och ens donävve lijje — dann donn räujesch noch ens op\n„{{int:savearticle}}“ kleke, öm dat ze beschtähtejje. Dann weet se aanjenumme.\nDäm Automat sing Rääjel koot explezeet, di do jejreffe hät, es: $1",
"abusefilter-disallowed": "Unser Automaht för et Prööfe hät dat, wat De jraad affjescheck häs, als verbodde ennjeshtoof. Wann De ävver meins, dat Ding Änderong joot es —\nAutomahte künne ens donevve lijje — dann donn dat enem Wiki-Köbes\nverzälle, un schriiv och op, wat De donn wollts.\nDäm Automaht sing Rääjel koot explezeet, di do jegreffe hät, es: $1",
"abusefilter-blocked-display": "Unser Automaat för et Prööfe, dä hät dat, wat De jraad affjescheck häs,\nals verbodde ennjeshtoof, un hät et nit zojelohße. Öm dat Wiki hee ze\nschöze, es och Dinge Zohjang jeshperrt woode: Dinge Name als Metmaacher,\nun de IP-Addreß vun Dingem Kompjuter, sen dofun betroffe.\nWann De ävver meins, dat Ding Änderong joht wohr — Automahte künne schliißlesch ens donävve lijje — dann verzäll dat enem Wikki-Köhbeß.\nDäm Automaht sing Rääjel koot explezeet, di do jegreffe hät: $1",
@@ -75,8 +74,6 @@
"abusefilter-log-hide-hidden": "Donn dä Enndraach vör de Öffentleschkeit vershteishe",
"abusefilter-log-hide-reason": "Jrond:",
"abusefilter-log-hide-forbidden": "Do häs nit et Rääsch, Enndrääsch em Meßbruchsfelter singem Logbooch ze versteishe",
- "abusefilter-logentry-suppress": "hät „[[$1]]“ vershtoche",
- "abusefilter-logentry-unsuppress": "hät „[[$1]]“ wider seeschbaa jemaat",
"logentry-abusefilter-hit": "{{GENDER:$1|Dä|Et}|Dä Metmaacher|De|Dat} lhät met „$5“ op dä Sigg „$3“ dä Felter $4 usjelöös, un dä hät bewirk: $6 ($7)",
"abusefilter-management": "Meßbruchsfellter Verwallde",
"abusefilter-list": "All Feltere",
@@ -109,7 +106,6 @@
"abusefilter-list-options-scope-local": "Blohß vun heh däm Wikki",
"abusefilter-list-options-scope-global": "Blohß alljemein Rääjelle",
"abusefilter-list-options-scope-all": "Beids",
- "abusefilter-list-options-disabled": "Ußjeschalldt Feltere:",
"abusefilter-list-options-hidedisabled": "ußblende",
"abusefilter-list-options-submit": "Lohß Jonn!",
"abusefilter-tools-text": "Hee fengks De paa Werkzüch för beim Opboue ze hellfe för Rääjelle för dä Meßbruchsfelter un zom Fäähler Erußklamüüsere.",
@@ -129,7 +125,6 @@
"abusefilter-edit-status-label": "Zahle un Schtatistike:",
"abusefilter-edit-status": "{{PLURAL:$1|De letzte Akßjuhn woodt|Unger de letzte $1 Akßjuhne {{PLURAL:$2|woor_er ein, die|wooren_er $2, die|wood kein}}|Kein Akßjuhn woodt}} vun dämm Felter hee opjejreff{{PLURAL:$1|e|{{PLURAL:$2|e wood|e woode|e}}|e}}. Dat sinn_er $3% jewääse.",
"abusefilter-edit-status-profile": "{{PLURAL:$1|De letzte Akßjuhn woodt|Unger de letzte $1 Akßjuhne {{PLURAL:$2|woor_er ein, die|wooren_er $2, die|wood kein}}|Kein Akßjuhn woodt}} vun dämm Felter hee opjejreff{{PLURAL:$1|e|{{PLURAL:$2|e wood|e woode|e}}|e}}. Dat sinn_er $3% jewääse.\nEm Schnett deiht hä {{PLURAL:$4|ein Millisekund|$4 Millisekunde|kein Millisekund}} bruche, un {{PLURAL:$5|ein Bedengung|$5 Bedengunge|kei Bedengunge}} vun de zohjelohße hühßte Zahl.",
- "abusefilter-edit-throttled": "'''Opjepaß:''' Dä Felter hee es automattesch ußjeschalldt woode. Zor Sescherheit.\nDä hät sing Jrenß övverschredde, un bei mieh wie $1% vun alle Oproofe jejreffe.",
"abusefilter-edit-new": "Neu Felter-Räjel",
"abusefilter-edit-save": "Faßhallde",
"abusefilter-edit-id": "Felter-Räjel-Nommer:",
@@ -148,7 +143,6 @@
"abusefilter-edit-consequences": "De Akßjuhne zom Maache, wann dä Felter jriif",
"abusefilter-edit-action-warn": "Donn dat maache, nohdämm dä Metmaacher en Warnung krääje hät.",
"abusefilter-edit-action-disallow": "Loß dä Metmaacher dat nit maache, wat hä donn wullt",
- "abusefilter-edit-action-flag": "Don de Änderong em Meßbruchs_Logbohch makkehre",
"abusefilter-edit-action-blockautopromote": "Donn däm Metmaacher singe Rääschde als enne beschtäteschte Metmaacher fott nämme",
"abusefilter-edit-action-degroup": "Donn dä Metmaacher uß alle Jroppe met besöndere Rääschte ußdraare",
"abusefilter-edit-action-block": "Donn dä Metmaacher un/odder de IP Addreß för et Ändere sperre",
@@ -157,7 +151,6 @@
"abusefilter-edit-action-tag": "Don de Änderong makkehre, för se schpääder nohzeloore.",
"abusefilter-edit-throttle-count": "De Aanzahl zojelohße Akßjuhne:",
"abusefilter-edit-throttle-period": "De Door fun dä Zigg:",
- "abusefilter-edit-throttle-seconds": "{{PLURAL:$1|Ein Sekund|$1 Sekunde|Kein Sekund}}",
"abusefilter-edit-throttle-groups": "Donn de Bremse en Jroppe, noh:\n:''(eine en en Reih, met Kommas dozwesche)''",
"abusefilter-edit-warn-message": "Dä Name för en Nohreesch, för domet ze warne:",
"abusefilter-edit-warn-other": "Ander Nohreesch",
@@ -245,19 +238,18 @@
"abusefilter-edit-builder-vars-oldsize": "De Sigg iere vörije Ömfang",
"abusefilter-edit-builder-vars-removedlines": "De Reije, di bemm Ändere fott jenomme woodte",
"abusefilter-edit-builder-vars-summary": "{{int:summary}}",
- "abusefilter-edit-builder-vars-article-id": "Dä Sigg ier Nummer en de Datebank",
- "abusefilter-edit-builder-vars-article-ns": "Dat Appachtemang fun dä Sigg",
- "abusefilter-edit-builder-vars-article-text": "De Övverschreff vun dä Sigg (der ohne Appachtemang)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "De kumplätte Övverschreff vun dä Sigg",
- "abusefilter-edit-builder-vars-article-views": "Aanzahl Afroofe vun dä Sigg",
+ "abusefilter-edit-builder-vars-page-id": "Dä Sigg ier Nummer en de Datebank",
+ "abusefilter-edit-builder-vars-page-ns": "Dat Appachtemang fun dä Sigg",
+ "abusefilter-edit-builder-vars-page-title": "De Övverschreff vun dä Sigg (der ohne Appachtemang)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "De kumplätte Övverschreff vun dä Sigg",
"abusefilter-edit-builder-vars-movedfrom-id": "Dä Quell-Sigg ier Nummer en de Datebank",
"abusefilter-edit-builder-vars-movedfrom-ns": "Dat Appachtemang fun dä Quell-Sigg",
- "abusefilter-edit-builder-vars-movedfrom-text": "De Övverschreff vun dä Quälle_Sigg",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "De kumplätte Övverschreff vun dä Quälle_Sigg",
+ "abusefilter-edit-builder-vars-movedfrom-title": "De Övverschreff vun dä Quälle_Sigg",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "De kumplätte Övverschreff vun dä Quälle_Sigg",
"abusefilter-edit-builder-vars-movedto-id": "Dä Zihl-Sigg ier Kännong en de Dahtebangk",
"abusefilter-edit-builder-vars-movedto-ns": "Dat Appachtemang fun dä Zihl-Sigg",
- "abusefilter-edit-builder-vars-movedto-text": "De Övverschreff vun dä Zihl_Sigg",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "De komplätte Övverschreff vun dä Zihl-Sigg",
+ "abusefilter-edit-builder-vars-movedto-title": "De Övverschreff vun dä Zihl_Sigg",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "De komplätte Övverschreff vun dä Zihl-Sigg",
"abusefilter-edit-builder-vars-user-editcount": "De Aanzahl vun däm Metmaacher singe Beidrääsch",
"abusefilter-edit-builder-vars-user-age": "Et Allder fun dämm Metmaacher singe Aanmeldung",
"abusefilter-edit-builder-vars-user-name": "Däm Metmaacher singe Nahme",
@@ -326,7 +318,7 @@
"abusefilter-exception-regexfailure": "En däm rejolähre Ußdrok „$3“, beim $1-te Zeische, doh es ene Fähler: ''$2''.",
"abusefilter-exception-overridebuiltin": "Beim $1-te Zeiche, do es ene Fähler, däm faß enjeboute Parrameeter „$2“ singe Wäät sull verändert wääde. Date jeiht ävver nit.",
"abusefilter-exception-outofbounds": "Beim $1-te Zeiche, do es jet donevve jejange, wi mer uß dä Leß {{PLURAL:$2|et eetste|dat $2-te|et nollte}} Denge eruß holle wullte, et {{PLURAL:$3|es ävver blooß ein|sinn_er ävver bloß $3|senn_er jaa kein}} dren.",
- "abusefilter-exception-notlist": "Beim $1-te Zeiche, do es ene Fähler opjedouch, wi mer uß ene Leß vun enem beshtemmpte Plaaz jät eruß holle wullte, et wohr ävver jaa kei Leß.",
+ "abusefilter-exception-notarray": "Beim $1-te Zeiche, do es ene Fähler opjedouch, wi mer uß ene Leß vun enem beshtemmpte Plaaz jät eruß holle wullte, et wohr ävver jaa kei Leß.",
"abusefilter-action-tag": "Makkehrong",
"abusefilter-action-throttle": "Beschrängke",
"abusefilter-action-warn": "Warne",
@@ -387,7 +379,6 @@
"abusefilter-topnav-import": "Feltere Empotteere",
"abusefilter-log-name": "Et Logbohch övver de Meßbruchsfelter",
"abusefilter-log-header": "En däm Logbohch heh fengks De de Änderonge aan de Feltere em Övverblek. Einzelheite sin en de\n[[Special:AbuseFilter/history|Leß met de neuste Änderunge aan Meßbruchsfeltere]].",
- "abusefilter-log-entry-modify": "hät $1 jeändert ($2)",
"abusefilter-log-noresults": "Nix jefonge",
"abusefilter-diff-title": "De Ungerscheide zwesche de Versione",
"abusefilter-diff-item": "Jääjeschtand",
@@ -401,38 +392,5 @@
"abusefilter-import-intro": "Do kanns hee di Schnettshtell bruche, öm Date vun de Meßbruchsfeltere vun andere Wikis noh hee ze empotteere. En dämm Wiki, woh de Date her kumme, doh donn op „{{int:abusefilter-edit-export}}“ unger „{{int:abusefilter-edit-tools}}“ klecke, op dä Sigg zom Felter Ändere. Donn dä Ennhalt vun däm Kaste met Tex, dä dann doh kütt, en hee dä Kaste eren kopeere, un dann donn hee dä Knopp „{{int:abusefilter-import-submit}}“ klecke.",
"abusefilter-import-submit": "Lohß Jonn!",
"abusefilter-group-default": "Schtandatt",
- "abusefilter-http-error": "Ene <i lang=\"en\">HTTP</i>-Fäähler es opjetrodde: $1.",
- "apihelp-abusefiltercheckmatch-param-filter": "Dä kumplätt Täx vum Fellter, öm för ene Träffer ze lohre.",
- "apihelp-abusefiltercheckmatch-param-vars": "Ene Saz vun Varrejahble em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"JavaScript Object Notation\">JSON</i>-Fommahd, öm doh jähje ze pröhve.",
- "apihelp-abusefiltercheckmatch-param-rcid": "En Kännong us de {{lcfirst:{{int:recentchanges}}}}, öm doh jähje ze pröhve.",
- "apihelp-abusefiltercheckmatch-param-logid": "En Kännong us dem Meßbruchsfelter singem Logbohch, öm doh jähje ze pröhve.",
- "apihelp-abusefiltercheckmatch-example-1": "Donn pröhve, of de Kännong <kbd>15</kbd> us de {{lcfirst:{{int:recentchanges}}}} obb ene eijnfache Felter paß.",
- "apihelp-abusefilterchecksyntax-description": "Donn de Sünntax vun enem beschtemmpte Felter vum Meßbruchsfelter pröhve.",
- "apihelp-abusefilterchecksyntax-param-filter": "Dä kumplätt Täx vum Fellter, öm de Süntax ze pröhfe.",
- "apihelp-abusefilterchecksyntax-example-1": "Donn de Sünntax vun enem jölltejje Felter pröhve.",
- "apihelp-abusefilterchecksyntax-example-2": "Donn de Sünntax vun enem onjölltejje Felter pröhve.",
- "apihelp-abusefilterevalexpression-description": "Deihd ene Ußdrogg vum Meßbruchsfelter ußrääschne.",
- "apihelp-abusefilterevalexpression-param-expression": "Dä Ußdrok zom ußwääte.",
- "apihelp-abusefilterevalexpression-example-1": "Donn ene eijfache Ußdrok ußwääte.",
- "apihelp-abusefilterunblockautopromote-description": "Donn di Schpär ophävve för emen Metmaacher sing automattesche Rääschtzohdeijlong övver der Meßbruchsfellter.",
- "apihelp-abusefilterunblockautopromote-param-user": "Däm Metmaacher singe Nahme, dä De nit mih jeschpächt han wells.",
- "apihelp-abusefilterunblockautopromote-example-1": "Donn di Schpär ophävve för dem Metmaacher „<code lang=\"en\" xml:lang=\"en\" dir=\"ltr\">[[User:Example]]</code>“ sing automattesche Rääschtzohdeijlong.",
- "apihelp-query+abusefilters-description": "Zeijsch Einzelheijte vun dä Meßbruchsfelter aan.",
- "apihelp-query+abusefilters-param-startid": "De Kännong vun däm Felter, vun woh aan opzälle.",
- "apihelp-query+abusefilters-param-endid": "De Kännong vun däm Felter, bes woh hen opzälle.",
- "apihelp-query+abusefilters-param-show": "Zeijsch blohß Felter, op di di Eijeschaffte paße.",
- "apihelp-query+abusefilters-param-limit": "De jrüüßte Zahl Felter för opzeleste.",
- "apihelp-query+abusefilters-param-prop": "Wat för en Eijeschaffte holle.",
- "apihelp-query+abusefilters-example-1": "Donn de ennjeschalldte öffentlesche Fellter opleßte",
- "apihelp-query+abusefilters-example-2": "Zijsch e paa Eijnzelheijte övver Felter",
- "apihelp-query+abuselog-description": "Zeijsch wat vun einem vun dä Meßbruchsfelter jepack woode es.",
- "apihelp-query+abuselog-param-start": "Et Dattom un de Zigg vun woh aff opzälle.",
- "apihelp-query+abuselog-param-end": "Et Dattom un de Zigg vun woh aff opjezallt wähde sull.",
- "apihelp-query+abuselog-param-user": "Zeijsch blohß de Enndrähsch vun enem beschtemmpte Metmaacher udder ene beschtemmpte <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Internet Protocol\">IP</i>-Adräß.",
- "apihelp-query+abuselog-param-title": "Zeijsch blohß de Enndrähsch, di obb ene beschtemmpte Sigg opjedouch sin.",
- "apihelp-query+abuselog-param-filter": "Zeijsch blohß de Enndrähsch em Logbohch di vun däm Felter met dä aanjejovve Kännog jepack woode sin.",
- "apihelp-query+abuselog-param-limit": "De hühßde Aanzahl Enndrähsch för opzeleßte.",
- "apihelp-query+abuselog-param-prop": "Wat för en Eijeschaffte holle.",
- "apihelp-query+abuselog-example-1": "De neuste enndrähsch em Logbohch aanzeije.",
- "apihelp-query+abuselog-example-2": "Zeijsch de neuste Enndrähsch em Logbohch för et [[API|<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i>]]"
+ "abusefilter-http-error": "Ene <i lang=\"en\">HTTP</i>-Fäähler es opjetrodde: $1."
}
diff --git a/AbuseFilter/i18n/ku-latn.json b/AbuseFilter/i18n/ku-latn.json
index 99ee58ba..54b73941 100644
--- a/AbuseFilter/i18n/ku-latn.json
+++ b/AbuseFilter/i18n/ku-latn.json
@@ -15,7 +15,6 @@
"abusefilter-log-diff": "cudahî",
"abusefilter-log-noactions": "tine",
"abusefilter-log-hide-reason": "Sedem:",
- "abusefilter-logentry-suppress": "\"[[$1]]\" hid",
"abusefilter-list": "Hemû fîltreyan",
"abusefilter-list-status": "Rewş",
"abusefilter-list-edit": "Biguherîne",
diff --git a/AbuseFilter/i18n/lad.json b/AbuseFilter/i18n/lad.json
index b34393da..fcedbc6b 100644
--- a/AbuseFilter/i18n/lad.json
+++ b/AbuseFilter/i18n/lad.json
@@ -32,8 +32,6 @@
"abusefilter-edit-id": "Número de filtro:",
"abusefilter-edit-hitcount": "Los filtros alcançados:",
"abusefilter-edit-action-warn": "Lança el filtro dospués de dar un aviso al empleador",
- "abusefilter-edit-action-flag": "Marca el trocamiento, en los rejjistros de filtro de contra-abusos",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sêgondo|sêgondos}}",
"abusefilter-edit-history": "Istoria",
"abusefilter-edit-export": "Taxirea este filtro a un otro viki",
"abusefilter-edit-notallowed": "No se te da permisyón de criar o de trocar los filtros contra-abusos",
diff --git a/AbuseFilter/i18n/lb.json b/AbuseFilter/i18n/lb.json
index 747a8da4..c530d92d 100644
--- a/AbuseFilter/i18n/lb.json
+++ b/AbuseFilter/i18n/lb.json
@@ -11,7 +11,6 @@
"abusefilter": "Astellung vum Mëssbrauchsfilter",
"abuselog": "Lëscht vum Mëssbrauch",
"abusefilter-intro": "Wëllkom op der Säit vum Mëssbrauchsfilter-Management.\nDe Mëssbrauchsfilter ass en automatesche Mechanismus deen et erlaabt automatesch Heuristiken op all Aktiounen unzewennen.\nDës Spezialsäit weist eng Lëscht vun definéierte Filteren an erlaabt et dës z'änneren.",
- "abusefilter-mustbeeditor": "Aus Sécherheetsgrënn kënnen nëmme Benotzer déi d'Recht hunn fir Mëssbrauchsfilteren z'änneren dësen Interface benotzen.",
"abusefilter-warning": "'''Opgepasst:''' Dës Aktioun gouf automatesch als geféierlech erkannt.\nAkltiounen déi net konstruktiv si ginn automatesch zeréckgsat,\na besonnesch schlëmmen oder widderhuelte Fäll gëtt Äre Benotzerkont oder Är IP-Adress gespaart.\nWann Dir mengt datt Är Ännerung konstruktiv ass, kënnt Dir nacheemol op \"Späichere\" klicke fir ze confirméieren.\nEng kuerz Beschreiwung vun der Mëssbrauchsregel op déi Är Aktioun reagéiert huet: $1",
"abusefilter-disallowed": "Dës Aktioun gouf automatesch als schiedlech erkannt,an dofir net zougelooss.\nWann Dir mengt datt Är Ännerung konstruktiv ass, da kontaktéiert w.e.g. en Administrateur, an informéiert deen iwwer dat wat Dir versicht hutt ze maachen.\nEng kuerz Beschreiwung vun der Mëssbrauchsregel, déi op är Aktioun reagéiert huet, ass: $1",
"abusefilter-blocked-display": "Dës Aktioun gouf automatesch als schiedlech identifizéiert,\nan Dir konnt se dowéinst net ausféieren.\nDes weideren, fir {{SITENAME}} ze protegéieren, gouf Äre Benotzerkont an all assoziéiert IP-Adressen automatesch fir all Ännerunge gespaart.\nWann dëst iertemlech geschitt ass da kontaktéiert w.e.g. en Administrateur.\nHei ass eng kuerz Beschreiwung vun der Mëssbrauchsregel op déi Är Aktioun gepasst huet: $1",
@@ -47,7 +46,13 @@
"abusefilter-log-search-filter": "Nummer(ID) vum Filter (mat vertikale Strécher(|) trennen):",
"abusefilter-log-search-title": "Titel:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Impakt:",
+ "abusefilter-log-search-impact-all": "All Aktiounen",
+ "abusefilter-log-search-impact-saved": "Nëmme gespäichert Aktiounen",
+ "abusefilter-log-search-impact-not-saved": "Ouni gespäichert Ännerungen",
"abusefilter-log-search-entries-label": "Visibilitéit:",
+ "abusefilter-log-search-action-other": "Anerer",
+ "abusefilter-log-search-action-taken-any": "Iergend eng",
"abusefilter-log-search-submit": "Sichen",
"abusefilter-log-entry": "$1: $2 huet e Mëssbrauchsfilter {{GENDER:$8|ausgeléist}}, {{GENDER:$8|bei der Aktioun}} \"$3\" op $4.\nAktioune vum Filter: $5;\nBeschreiwung vum Filter: $6",
"abusefilter-log-detailedentry-meta": "$1: $2 huet e Mëssbrauchsfilter $3 {{GENDER:$9|ausgeléist}}, {{GENDER:$9|bei der Aktioun}} \"$4\" op $5.\nAktioune vum Filter: $6;\nBeschreiwung vum Filter: $7 ($8)",
@@ -62,6 +67,7 @@
"abusefilter-log-details-vars": "Parameter vun der Aktioun",
"abusefilter-log-details-private": "Privat Donnéeën",
"abusefilter-log-details-ip": "IP-Adress déi bnotzt gouf",
+ "abusefilter-log-details-checkuser": "Benotzer nokucken",
"abusefilter-log-noactions": "keen",
"abusefilter-log-details-diff": "Ännerungen déi an der Ännerung gemaach goufen",
"abusefilter-log-linkoncontribs": "Logbuch vum Mëssbrauch",
@@ -74,9 +80,9 @@
"abusefilter-log-hide-id": "Entrée vun der ID am Logbuch:",
"abusefilter-log-hide-hidden": "Dëst virun der Ëffentlechkeet verstoppen",
"abusefilter-log-hide-reason": "Grond:",
+ "abusefilter-log-hide-reason-other": "Aneren/zousätzleche Grond:",
"abusefilter-log-hide-forbidden": "Dir hutt net déi néideg Rechter fir Rubriken aus dem Mëssbrauchsfilter ze verstoppen.",
- "abusefilter-logentry-suppress": "huet \"[[$1]]\" verstoppt",
- "abusefilter-logentry-unsuppress": "huet \"[[$1]]\" nees siichtbar gemaach",
+ "log-action-filter-abusefilter": "Typ vun der Ännerung vum Filter:",
"abusefilter-management": "Gestioun vum Mëssbrauchsfilter",
"abusefilter-list": "All Filteren",
"abusefilter-list-id": "Nummer(ID) vum Filter",
@@ -95,6 +101,7 @@
"abusefilter-enabled": "Aktivéiert",
"abusefilter-deleted": "Geläscht",
"abusefilter-disabled": "Desaktivéiert",
+ "abusefilter-throttled": "gebremst",
"abusefilter-hitcount": "{{PLURAL:$1|1 Treffer|$1 Treffer}}",
"abusefilter-new": "En neie Filter uleeën",
"abusefilter-return": "Zréck op d'Gestioun vun de Filteren",
@@ -108,8 +115,9 @@
"abusefilter-list-options-scope-local": "Nëmme lokal Regelen",
"abusefilter-list-options-scope-global": "Nëmme global Regelen",
"abusefilter-list-options-scope-all": "Lokal a global Regelen",
- "abusefilter-list-options-disabled": "Ausgeschalte Filteren",
+ "abusefilter-list-options-further-options": "Aner Optiounen:",
"abusefilter-list-options-hidedisabled": "Ausgeschalte Filtere verstoppen",
+ "abusefilter-list-options-hideprivate": "Privat filtere verstoppen",
"abusefilter-list-options-submit": "Aktualiséieren",
"abusefilter-tools-text": "Hei sinn e puer Funktiounen déi beim Opstellen a bei der Feelersich vu Mëssbrauchsregelen nëtzlech kënne sinn.",
"abusefilter-tools-expr": "Test vun den Expressiounen",
@@ -124,6 +132,7 @@
"abusefilter-edit": "Mëssbrauchsfilter änneren",
"abusefilter-edit-subtitle": "Ännere vum Filter $1",
"abusefilter-edit-subtitle-new": "Filter uleeën",
+ "abusefilter-edit-token-not-match": "D'Ännerung gouf net gespäichert! Späichert et w.e.g. nach eng Kéier.",
"abusefilter-edit-oldwarning": "<strong>Dir sidd am Gaang eng al Versioun vum Filter z'änneren.\nD'Statistike sinn déi vun der leschter Versioun vum Filter.\nWann Dir Är Ännerunge späichert dann iwwerschreiwt Dir all Ännerungen zënter der Versioun déi Dir elo ännert. </strong> &bull;\n[[Special:AbuseFilter/history/$2|Zréck op d'Versiounsgeschicht vun dësem Filter]].",
"abusefilter-edit-status-label": "Statistiken:",
"abusefilter-edit-status": "Dëse Filter huet bei {{PLURAL:$1|der leschter Aktioun|de leschte(n) $1 Aktiounen}}, $2 mol ($3%) ugeschloen.",
@@ -131,7 +140,9 @@
"abusefilter-edit-new": "Neie Filter",
"abusefilter-edit-save": "Filter späicheren",
"abusefilter-edit-id": "Nummer (ID) vum Filter:",
+ "abusefilter-edit-switch-editor": "Editeur wiesselen",
"abusefilter-edit-description": "Beschreiwung:\n:''(ëffentlech)''",
+ "abusefilter-edit-field-description": "Beschreiwung",
"abusefilter-edit-group": "Filter-Grupp:",
"abusefilter-edit-flags": "Fändelen:",
"abusefilter-edit-enabled": "Dëse Filter aktivéieren",
@@ -139,6 +150,7 @@
"abusefilter-edit-hidden": "Verstop d'Detailer vun dësem Filter virun der Ëffentlechkeet",
"abusefilter-edit-global": "Globale Filter",
"abusefilter-edit-rules": "Konditiounen:",
+ "abusefilter-edit-field-conditions": "Konditiounen",
"abusefilter-edit-notes": "Notizen:",
"abusefilter-edit-lastmod": "De Filter gouf fir d'lescht geännert",
"abusefilter-edit-lastmod-text": "$1 vum $2",
@@ -153,14 +165,25 @@
"abusefilter-edit-action-rangeblock": "/16-Beräich spären, aus dem dëse Benotzer kënnt.",
"abusefilter-edit-action-tag": "D'Ännerung fir e spéidert Nokucke markéieren",
"abusefilter-edit-throttle-count": "Zuel vun den erlaabten Aktiounen:",
- "abusefilter-edit-throttle-period": "Zäitraum:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|Sekonn|Sekonnen}}",
+ "abusefilter-edit-throttle-period": "Zäitraum (a Sekonnen):",
+ "abusefilter-edit-throttle-ip": "IP-Adress",
+ "abusefilter-edit-throttle-user": "Benotzerkont",
+ "abusefilter-edit-throttle-editcount": "Zuel vun den Ännerungen",
+ "abusefilter-edit-throttle-site": "De ganzen Internetsite",
+ "abusefilter-edit-throttle-page": "Säit",
"abusefilter-edit-warn-message": "Systemmessage den als Warnung benotzt gëtt:",
"abusefilter-edit-warn-other": "Anere Systemmessage",
"abusefilter-edit-warn-other-label": "Säitennumm vun engem anere Systemmessage:\n:''(ouni MediaWiki-Prefix)''",
"abusefilter-edit-warn-actions": "Aktiounen:",
"abusefilter-edit-warn-preview": "De gewielte Message kucken ouni ofzespäicheren",
"abusefilter-edit-warn-edit": "De gewielte Systemmessage uleeën/änneren",
+ "abusefilter-edit-disallow-other": "Anere Systemmessage",
+ "abusefilter-edit-disallow-actions": "Aktiounen:",
+ "abusefilter-edit-block-anon-durations": "Dauer vun der Spär fir anonym Benotzer:",
+ "abusefilter-edit-block-user-durations": "Dauer vun der Spär fir registréiert Benotzer:",
+ "abusefilter-block-anon": "Anonym Benotzer spären",
+ "abusefilter-block-user": "registréiert Benotzer spären",
+ "abusefilter-block-talk": "Diskussiounssäit gespaart",
"abusefilter-edit-denied": "Dir kënnt Detailer vun dësem Filter net gesinn, well se virum Public verstoppt sinn.",
"abusefilter-edit-main": "Parametere vum Filter",
"abusefilter-edit-done-subtitle": "Filter geännert",
@@ -189,8 +212,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Modulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Potenz (**)",
"abusefilter-edit-builder-group-op-comparison": "Operateure fir ze vergläichen",
- "abusefilter-edit-builder-op-comparison-equal": "Dselwecht wéi (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Verschidde vun (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Wäert selwecht wéi (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Wäert an Typ deselwechte wéi (!==)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Wäert verschidde vun (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Wäert an Typ verschidde vu(n) (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Manner wéi (<)",
"abusefilter-edit-builder-op-comparison-gt": "Méi grouss wéi (>)",
"abusefilter-edit-builder-op-comparison-lte": "Méi kleng oder dselwecht wéi (<=)",
@@ -224,7 +249,7 @@
"abusefilter-edit-builder-vars-accountname": "Numm vum Benotzerkont (beim Uleeë vum Benotzerkont)",
"abusefilter-edit-builder-vars-timestamp": "Unix-Zäitstempel vun der Ännerung",
"abusefilter-edit-builder-vars-action": "Aktioun",
- "abusefilter-edit-builder-vars-addedlines": "Linnen déi bei der Ännerung derbäigesat goufen",
+ "abusefilter-edit-builder-vars-addedlines": "Linnen déi bei der Ännerung dobäigesat goufen",
"abusefilter-edit-builder-vars-delta": "Ännerung vun der Gréisst vun der Säit bei der Ännerung",
"abusefilter-edit-builder-vars-diff": "Gesamtënnerscheed vun den Ännerungen déi bei der Ännerung gemaach goufen",
"abusefilter-edit-builder-vars-newsize": "Nei Säitegréisst",
@@ -233,19 +258,19 @@
"abusefilter-edit-builder-vars-new-content-model": "Neien Inhaltsmodell",
"abusefilter-edit-builder-vars-removedlines": "Linnen déi der Ännerung ewechgeholl goufen",
"abusefilter-edit-builder-vars-summary": "Resumé/Grond vun der Ännerung",
- "abusefilter-edit-builder-vars-article-id": "ID (Nummer) vun der Säit",
- "abusefilter-edit-builder-vars-article-ns": "Nummraum vun der Säit",
- "abusefilter-edit-builder-vars-article-text": "Titel vun der Säit (ouni Nummraum)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Ganzen Titel vun der Säit",
- "abusefilter-edit-builder-vars-article-views": "Zuel wéi dacks d'Säit gewise gouf",
+ "abusefilter-edit-builder-vars-page-id": "ID (Nummer) vun der Säit",
+ "abusefilter-edit-builder-vars-page-ns": "Nummraum vun der Säit",
+ "abusefilter-edit-builder-vars-page-title": "Titel vun der Säit (ouni Nummraum)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Ganzen Titel vun der Säit",
+ "abusefilter-edit-builder-vars-page-age": "Alter vun der Säit (a Sekonnen)",
"abusefilter-edit-builder-vars-movedfrom-id": "Säiten-ID vun der Säit déi geréckelt gëtt",
"abusefilter-edit-builder-vars-movedfrom-ns": "Nummraum vun der Säit déi geréckelt gëtt",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titel vun der Säit déi geréckelt gëtt",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Ganzen titel vun der Säit déi geréckelt gëtt",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titel vun der Säit déi geréckelt gëtt",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Ganzen titel vun der Säit déi geréckelt gëtt",
"abusefilter-edit-builder-vars-movedto-id": "Säiten-ID vun der Säit op déi geréckelt gëtt",
"abusefilter-edit-builder-vars-movedto-ns": "Nummraum vun der Säit op déi eng Säit geréckelt gëtt",
- "abusefilter-edit-builder-vars-movedto-text": "Titel vun der Säit op déi d'Säit geréckelt gëtt",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Ganzen Titel vun der Säit op déi d'Säit geréckelt gëtt",
+ "abusefilter-edit-builder-vars-movedto-title": "Titel vun der Säit op déi d'Säit geréckelt gëtt",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Ganzen Titel vun der Säit op déi d'Säit geréckelt gëtt",
"abusefilter-edit-builder-vars-user-editcount": "Compteur vun den Ännerunge vum Benotzer",
"abusefilter-edit-builder-vars-user-age": "Alter vum Benotzerkont",
"abusefilter-edit-builder-vars-user-name": "Numm vum Benotzerkont",
@@ -256,7 +281,7 @@
"abusefilter-edit-builder-vars-recent-contributors": "Déi lescht zeng Benotzer déi un dësem Artikel geschafft hunn",
"abusefilter-edit-builder-vars-first-contributor": "Éischte Benotzer deen un der Säit geschafft huet",
"abusefilter-edit-builder-vars-all-links": "All extern Linken am neien Text",
- "abusefilter-edit-builder-vars-added-links": "All extern Linken déi bei der Ännerung derbäigesat goufen",
+ "abusefilter-edit-builder-vars-added-links": "All extern Linken déi bei der Ännerung dobäigesat goufen",
"abusefilter-edit-builder-vars-removed-links": "All extern Linken déi bei der Ännerung ewechgeholl goufen",
"abusefilter-edit-builder-vars-old-text": "Alen Text op der Säit, virun der Ännerung",
"abusefilter-edit-builder-vars-new-text": "Neien Text op der Säit, no der Ännerung",
@@ -292,6 +317,7 @@
"abusefilter-history-filterid": "Filter",
"abusefilter-history-select-legend": "Sich verfeineren",
"abusefilter-history-select-user": "Benotzer:",
+ "abusefilter-history-select-filter": "Nummer (ID) vum Filter:",
"abusefilter-history-select-submit": "Verfeineren",
"abusefilter-history-diff": "Ännerungen",
"abusefilter-history-error-hidden": "De Filter deen Dir ugefrot hutt ass verstoppt, an Dir kënnt d'Versiounen dovun net gesinn.",
@@ -321,8 +347,9 @@
"abusefilter-revert-periodstart": "Ufank vun der Period:",
"abusefilter-revert-periodend": "Enn vun der Period:",
"abusefilter-revert-search": "Aktiounen auswielen",
- "abusefilter-revert-filter": "Filter:",
+ "abusefilter-revert-filter": "Nummer (ID) vum Filter:",
"abusefilter-revert-preview-intro": "Hei ënnerdënner stinn déi Aktioune vum Mëssbrauchsfilter déi duerch dës Aktioun zréckgesat wäerte ginn.\nKuckt se w.e.g. genee no a klickt \"{{int:abusefilter-revert-confirm}}\" fir Är Wiel ze confirméieren.",
+ "abusefilter-revert-confirm-legend": "D'Zrécksetze confirméieren",
"abusefilter-revert-confirm": "Confirméieren",
"abusefilter-revert-success": "Dir hutt all Aktioune vum Mëssbrauchsfilter, op Grond vum [[Special:AbuseFilter/$1|Filter $2]] zréckgesat.",
"abusefilter-revert-reason": "All Aktioune vum Mëssbrauchsfilter opgrond vum Filter $1 zrécksetzen.\nGrond: $2",
@@ -334,12 +361,17 @@
"abusefilter-test-submit": "Test",
"abusefilter-test-load": "Lueden",
"abusefilter-test-user": "Ännerunge vum Benotzer:",
+ "abusefilter-test-nobots": "Ännerunge vu Botte verstoppen",
"abusefilter-test-period-start": "Ännerungen nom:",
"abusefilter-test-period-end": "Ännerungen déi virdru gemaach goufen:",
"abusefilter-test-page": "Ännerungen déi op dëser Säit gemaach goufen",
"abusefilter-test-shownegative": "Ännerunge weisen déi net op de Filter passen",
"abusefilter-test-syntaxerr": "Am Filter deen Dir aginn hutt ass e Syntaxfeeler.\nDir kënnt eng komplett Erklärung kréie wann Dir op de Knäppche \"{{int:abusefilter-edit-check}}\" klickt.",
"abusefilter-test-badtitle": "De Säitentitel deen Dir aginn hutt ass net valabel. Et ka sinn datt een oder méi Buschtawen dra sinn déi an Titelen net benotzt kënne ginn.",
+ "abusefilter-test-search-type-all": "All Aktiounen",
+ "abusefilter-test-search-type-edit": "Ännerungen",
+ "abusefilter-test-search-type-delete": "Läschungen",
+ "abusefilter-test-search-type-upload": "Eropgeluede Fichieren",
"abusefilter-changeslist-examine": "ënnersichen",
"abusefilter-examine": "Individuell Ännerungen ënnersichen",
"abusefilter-examine-intro": "Dës Säit erlaabt et d'Variabelen déi vun engem Mëssbrauchsfilter fir eng Ännerung generéiert goufen z'ënnersichen a se mat de Filteren ze testen.",
@@ -381,14 +413,7 @@
"abusefilter-import-submit": "Donnéeën importéieren",
"abusefilter-group-default": "Standard",
"abusefilter-http-error": "Et ass en HTTP-Feeler geschitt: $1.",
- "apihelp-abusefilterchecksyntax-description": "Syntax vun engem Mëssbrauchsfilter nokucken.",
- "apihelp-abusefilterchecksyntax-example-1": "Syntax vun engem valabele Filter nokucken",
- "apihelp-abusefilterchecksyntax-example-2": "Syntax vun engem net-valabele Filter nokucken",
- "apihelp-abusefilterunblockautopromote-param-user": "Benotzernumm vum Benotzer dem seng Spär dir ophiewe wëllt.",
- "apihelp-query+abusefilters-description": "Detailer vum Mëssbrauchsfilter weisen",
- "apihelp-query+abusefilters-summary": "Detailer vun de Mëssbrauchsfiltere weisen",
- "apihelp-query+abusefilters-example-2": "E puer Detailer iwwer Filtere weisen",
- "apierror-abusefilter-canttest": "Dir sidd net berechtegt fir Mëssbrauchsfilteren ze testen.",
- "apierror-abusefilter-cantcheck": "Dir sidd net berechtegt fir d'Syntax vu Mëssbrauchsfilteren no ze kucken.",
- "apierror-abusefilter-badsyntax": "De Filter huet eng net valabel Syntax."
+ "abusefilter-view-private-submit": "Privat Detailer weisen",
+ "abusefilter-view-private": "Privat Detailer weisen",
+ "abusefilter-log-ip-not-available": "Net disponibel"
}
diff --git a/AbuseFilter/i18n/lfn.json b/AbuseFilter/i18n/lfn.json
index d852d1ec..8c2e17e2 100644
--- a/AbuseFilter/i18n/lfn.json
+++ b/AbuseFilter/i18n/lfn.json
@@ -1,14 +1,15 @@
{
"@metadata": {
"authors": [
- "Malafaya"
+ "Malafaya",
+ "Mafcadio"
]
},
+ "abuselog": "Arcivo de malusa",
"abusefilter-log-search-user": "Usor:",
"abusefilter-log-search-title": "Titulo:",
"abusefilter-log-search-submit": "Xerca",
"abusefilter-edit-status-label": "Statistica",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|secondo|secondos}}",
"abusefilter-edit-history": "Istoria",
"abusefilter-edit-builder-op-arithmetic-addition": "Soma (+)",
"abusefilter-edit-builder-op-arithmetic-subtraction": "Sutrae (-)",
diff --git a/AbuseFilter/i18n/li.json b/AbuseFilter/i18n/li.json
index 1e823faf..0ae51b42 100644
--- a/AbuseFilter/i18n/li.json
+++ b/AbuseFilter/i18n/li.json
@@ -10,7 +10,6 @@
"abusefilter": "Misbroekfilterinsjtellinge",
"abuselog": "Misbroeklogbook",
"abusefilter-intro": "Dit is 't beheersjerm van de misbroekfilter.\nDe misbroekfilter is e systeem det automatische heuristiek toepas op alle hanjelinge.\nVia dit sjerm waere alle ingestelde filters waergegaeve en kinne die aangepas waere.",
- "abusefilter-mustbeeditor": "Om veiligheidsredene höbbe allein gebroekers mit 't rech om filters te wiezige de meugelikheid dezen interface te gebroeke.",
"abusefilter-warning": "'''Waarsjuwing''': Dees hanjeling is automatisch geïdentificeerd as sjadelik.\nOnconstructieve bewerkinge waere snel trökgedreid, en herhaald onconstructief bewerke eindig in n blokkade van diene gebroeker of IP.\nAs se dinks det dees bewerking waal constructief is, klik dan opnuuj op \"Pagina opslaon\" om de bewerking te bevestige.\n'n Korte besjrieving van de regel op basis waarvan de bewerking is taegegehouwe vólg noe: $1",
"abusefilter-disallowed": "Deze hanjeling is automatisch geïdentificeerd as sjadelik, en daarom neet toegelaote.\nAs 't dinkt dat de bewerking waol constructief was, naem dan contact op met 'n beheerder, en informeer hem waat de probeerde te doon.\n'ne Korte besjrieving van de regel op basis waarvan de bewerking is tegegehouwe vólgt noe: $1",
"abusefilter-blocked-display": "Dees hanjeling is automatisch geïdentificeerd as sjadelik. Daorom is deze neet oetgeveurd.\nOm {{SITENAME}} te besjerme zeen de gebroeker en alle biebeheurende IP-adresse geblokkeerd.\nAs deze maotregel onterech is genaome, naem dan contact op mit ne beheerder.\nEen korte besjrieving van de regel op basis wovan de bewerking is tegegehouwe volg noe: $1",
@@ -42,34 +41,49 @@
"abusefilter-log-summary": "Dit logbook guf 'ne lies van hanjelinge die opgevange zeen door misbroekfilters.",
"abusefilter-log-search": "Doorzeuk 't misbroeklogbook",
"abusefilter-log-search-user": "Gebroeker:",
- "abusefilter-log-search-filter": "Filter ID:",
+ "abusefilter-log-search-filter": "Filter-nómmer:",
"abusefilter-log-search-title": "Titel:",
+ "abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Inslaag:",
+ "abusefilter-log-search-impact-all": "Alle hanjelinge",
+ "abusefilter-log-search-impact-saved": "Allein opgeslage verangeringe",
+ "abusefilter-log-search-impact-not-saved": "Zónger opgeslage verangeringe",
+ "abusefilter-log-search-entries-label": "Zichbaarheid:",
+ "abusefilter-log-search-entries-all": "Alle regele",
+ "abusefilter-log-search-entries-hidden": "Alllein verborge regele",
+ "abusefilter-log-search-entries-visible": "Allein zichbare regele",
+ "abusefilter-log-search-action-taken-label": "Genome maotregel:",
+ "abusefilter-log-search-action-taken-any": "Alle",
"abusefilter-log-search-submit": "Zeuk",
"abusefilter-log-entry": "$1: $2 leet 'ne misbroekfilter aafgaon bie 't oetveure hanjeling \"$3\" op $4.\nGenaome maatregel: $5.\nFilterbesjrieving: $6",
"abusefilter-log-detailedentry-meta": "$1: $2 leet $3 aafgaon bie 't oetveure van de hanjeling \"$4\" op $5.\nGenaome maatregel: $6.\nFilterbesjrieving: $7 ($8)",
"abusefilter-log-detailedentry-global": "globaal filter $1",
"abusefilter-log-detailedentry-local": "filter $1",
"abusefilter-log-detailslink": "kleinighijjer",
+ "abusefilter-log-diff": "versjil",
"abusefilter-log-hidelink": "pas zichbaarheid aan",
"abusefilter-log-details-legend": "Details veur logregel $1",
"abusefilter-log-details-var": "Variabel",
"abusefilter-log-details-val": "Waerj",
"abusefilter-log-details-vars": "Maotregelparremaeter",
- "abusefilter-log-details-private": "Bepèrk zichber gegaeves",
+ "abusefilter-log-details-private": "Private logdetails",
"abusefilter-log-details-ip": "IP-adres",
+ "abusefilter-log-details-checkuser": "Konterleer gebroeker",
"abusefilter-log-noactions": "gein",
"abusefilter-log-details-diff": "Bewèrkingsangeringer",
"abusefilter-log-linkoncontribs": "filterlogbook",
- "abusefilter-log-linkoncontribs-text": "Filterlogbook veur deze gebroeker",
+ "abusefilter-log-linkoncontribs-text": "Filterlogbook veur deze {{GENDER:$1|gebroeker}}",
"abusefilter-log-hidden": "(meljing verbórge)",
+ "abusefilter-log-hidden-implicit": "(verstaoke went de versie is eweggesjaf)",
+ "abusefilter-log-cannot-see-details": "Doe höbs neet de rechte veur de details van dezen ingank te betrachte.",
+ "abusefilter-log-cannot-see-private-details": "Doe höbs gein rechte veur de private details van dezen ingank te betrachte.",
+ "abusefilter-log-nonexistent": "'nen Ingank mit 't opgegaove nómmer besteit neet.",
"abusefilter-log-details-hidden": "Doe kins de details van dees meljing neet bekieke ómdet dees verbórge is.",
"abusefilter-log-hide-legend": "Verberg logbookregel",
"abusefilter-log-hide-id": "Logbookmeljingsnómmer:",
"abusefilter-log-hide-hidden": "Verberg dees meljing",
"abusefilter-log-hide-reason": "Reeje:",
"abusefilter-log-hide-forbidden": "Doe höbs neet de juuste rechte óm meljinge in 't filterlogbook te verberge.",
- "abusefilter-logentry-suppress": "verbórg [[$1]]",
- "abusefilter-logentry-unsuppress": "maakde [[$1]] zichbaar",
"abusefilter-management": "Misbroekfilterbehieër",
"abusefilter-list": "Al filter",
"abusefilter-list-id": "Filter ID",
@@ -89,72 +103,68 @@
"abusefilter-disabled": "Oetgezatj",
"abusefilter-hitcount": "$1 {{PLURAL:$1|slaag|slaag}}",
"abusefilter-new": "Maak 'ne nuuje filter aan",
- "abusefilter-return": "Trök göch filterbieër",
+ "abusefilter-return": "Trök nao filterbehier",
"abusefilter-status-global": "Globaal",
- "abusefilter-list-options": "Opsjes",
+ "abusefilter-list-options": "Opties",
"abusefilter-list-options-deleted": "Gewösjde filters:",
"abusefilter-list-options-deleted-only": "Tuin allein eweggesjafde filters",
"abusefilter-list-options-deleted-hide": "Verbèrg gewösjdje filters",
- "abusefilter-list-options-deleted-show": "Nöm gwösjdje filters óp",
- "abusefilter-list-options-disabled": "Gewösjdje filters:",
- "abusefilter-list-options-hidedisabled": "Verbèrg oetgezadje filters",
- "abusefilter-list-options-submit": "Wèrk bie",
+ "abusefilter-list-options-deleted-show": "Num eweggesjafde filters op",
+ "abusefilter-list-options-hidedisabled": "Versjtaek oetgesjakelde filters",
+ "abusefilter-list-options-submit": "Wirk bie",
"abusefilter-tools-text": "Dit zeen 'n aantal hulpmiddele die van pas kinne kómme bie 't formulere en debugge van misbroekfilters.",
- "abusefilter-tools-expr": "Expressjetes",
- "abusefilter-tools-submitexpr": "Evaljewieër",
+ "abusefilter-tools-expr": "Expressietester",
+ "abusefilter-tools-submitexpr": "Evaluere",
"abusefilter-tools-reautoconfirm": "Sjtel autematis bevestigde staat opnuuj in",
- "abusefilter-tools-reautoconfirm-user": "Broeker:",
+ "abusefilter-tools-reautoconfirm-user": "Gebroeker:",
"abusefilter-tools-reautoconfirm-submit": "Bevestig opnuuj autematis",
- "abusefilter-reautoconfirm-none": "Veur daen gebroeker is de autematisse bevèstigde status neet ingetróch.",
- "abusefilter-reautoconfirm-notallowed": "Doe haes gein rechten óm de autematis bevèstigde status óppernuuj in te stelle.",
+ "abusefilter-reautoconfirm-none": "Veur daen gebroeker is de autematis bevestigde sjtatus neet ingetrokke.",
+ "abusefilter-reautoconfirm-notallowed": "Doe höbs gein rechte óm de autematis bevestigde sjtatus opnuuj in te sjtèlle.",
"abusefilter-reautoconfirm-done": "De bevestigde gebroekersstatus van de gebroeker is herstèld",
"abusefilter-status": "Van de leste $1 {{PLURAL:$1|hanjeling|hanjelinge}}, {{PLURAL:$2|haet t'r 1|höbbe d'r $2}} ($3%) de drempelwaerd van $4 bereik, en {{PLURAL:$5|pas|passe}} $5 ($6%) bie ein van de hujig ingesjakelde filters.",
- "abusefilter-edit-subtitle": "Bewèrkendje filter $1",
- "abusefilter-edit-oldwarning": "<strong>Doe bös 'n aaj versie van deze filter aan 't bewerke.\nDe weergegaeve statistieke gelje veur de lèste versie van de filter.\nEs 't öch wieziginge opsleit, euversjrief t'r alle wijziginge die nao deze versie zeen gemaak.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Trögk no de gesjiedenis van deze filter]]",
+ "abusefilter-edit-subtitle": "Bezig mit bewirke van filter $1",
+ "abusefilter-edit-oldwarning": "<strong>Doe bis 'n aaj versie van deze filter aan 't bewirke.\nDe weergegeve sjtattestieke gelje veur de lèste versie van dit filter.\nEs de dien wieziginge opsjleis, euversjriefs te alle wieziginge die nao deze versie zeen gemaak.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Trög nao de gesjiedenis van dit filter]]",
"abusefilter-edit-status-label": "Euverzich:",
- "abusefilter-edit-status": "{{PLURAL:$1|De leste hanjeling vóldeej|Van de leste $1 hanjelinge vóldeje d'r $2}} aan deze filter ($3%).",
- "abusefilter-edit-status-profile": "{{PLURAL:$1|De leste hanjeling vóldeej|Van de leste $1 hanjelinge vóldeje d'r $2}} aan deze filter ($3%).\nDe gemiddelde louptied van de filtercontrole is $4ms, en deze gebroek $5 {{PLURAL:$5|conditie|condities}} van de conditielimiet.",
- "abusefilter-edit-throttled": "'''Waorsjoewing''': deze filter is es veiligheidsmaotregel autematis oetgezat. De limiet van vóldoon aan mier es $1% van de hanjelinge is bereik.",
- "abusefilter-edit-new": "Nuuje filter",
- "abusefilter-edit-save": "Slaon filter óp",
- "abusefilter-edit-id": "Filter ID:",
- "abusefilter-edit-description": "Ómsjrieving:\n:''(vólkszichber)''",
- "abusefilter-edit-flags": "Vlegk:",
- "abusefilter-edit-enabled": "Zèt deze filter in",
+ "abusefilter-edit-status": "{{PLURAL:$1|De lèste hanjeling voldeech|Van de lèste $1 hanjelinge voldege d'r $2}} aon dit filter ($3%).",
+ "abusefilter-edit-status-profile": "{{PLURAL:$1|De lèste hanjeling voldeech|Van de lèste $1 hanjelinge voldege d'r $2}} aon dit filter ($3%).\nDe gemiddelde louptied van de filtercontrole is $4ms, en deze gebroek $5 {{PLURAL:$5|conditie|condities}} van de conditielimiet.",
+ "abusefilter-edit-new": "Nuuj filter",
+ "abusefilter-edit-save": "Slaon filter op",
+ "abusefilter-edit-id": "Filternummer:",
+ "abusefilter-edit-description": "Ómsjrieving:\n:''(pebliekelek zichbaar)''",
+ "abusefilter-edit-flags": "Markeringe:",
+ "abusefilter-edit-enabled": "Sjakel dit filter in",
"abusefilter-edit-deleted": "Markeer es eweggesjaf",
- "abusefilter-edit-hidden": "Verbèrg filterdetails veur 't vólk",
+ "abusefilter-edit-hidden": "Verberg filterdetails veur 't pebliek",
"abusefilter-edit-global": "Pas deze filter wikiwied toe",
- "abusefilter-edit-rules": "Regel:",
+ "abusefilter-edit-rules": "Regele:",
"abusefilter-edit-notes": "Noeat:\n:''(privaat)''",
- "abusefilter-edit-lastmod": "Filter lès angerdj:",
- "abusefilter-edit-lastmod-text": "$1 doearch $2",
- "abusefilter-edit-hitcount": "Filter slaag:",
+ "abusefilter-edit-lastmod": "Filter lèts aangepas:",
+ "abusefilter-edit-lastmod-text": "$1 door $2",
+ "abusefilter-edit-hitcount": "Hits filtere:",
"abusefilter-edit-consequences": "Genómme aksjes bie euverkóms",
- "abusefilter-edit-action-warn": "Veur dizze regel oet bedet 'ne broeker 'n waorsjoewing haet bekómme",
- "abusefilter-edit-action-disallow": "Veurkóm dette broeker de hanjeling deit",
- "abusefilter-edit-action-flag": "Mekeer de bewèrking int misbroeklog",
- "abusefilter-edit-action-blockautopromote": "Wis de bevestigdje staat dezer broeker",
- "abusefilter-edit-action-degroup": "Wis de broeker oet alle broekergruup",
- "abusefilter-edit-action-block": "Blok bewèrke doearche broeker ènóf IP",
- "abusefilter-edit-action-throttle": "Veur regel nur oet wenne broeker 'ne drempel euversjriejd",
+ "abusefilter-edit-action-warn": "Veur deze maotregel oet naodet de gebroeker 'n waarsjoewing heet gekrege",
+ "abusefilter-edit-action-disallow": "Veurkóm dat de gebroeker de hanjeling kin oetveure",
+ "abusefilter-edit-action-blockautopromote": "Sjaf de bevestigde status van deze gebroeker eweg",
+ "abusefilter-edit-action-degroup": "Sjaf de gebroeker oet alle gebroekergróppe eweg",
+ "abusefilter-edit-action-block": "Blokkeer bewirke door de gebroeker en/of IP-adres",
+ "abusefilter-edit-action-throttle": "Veur regel allein oet es de gebroeker 'ne drempel euversjriejd",
"abusefilter-edit-action-rangeblock": "Blok de /16reeks wo de gebroeker aafkömp.",
- "abusefilter-edit-action-tag": "Mekeer de bewèrking veur later ketraol.",
- "abusefilter-edit-throttle-count": "Taal ven gooj henjeling:",
+ "abusefilter-edit-action-tag": "Markeer de bewirking veur later kentrol.",
+ "abusefilter-edit-throttle-count": "Aontal hanjelinge die were gepermeteerd:",
"abusefilter-edit-throttle-period": "Tiedsdoer:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|second|second}}",
"abusefilter-edit-throttle-groups": "Groepsbepèrking per tiedseinhed op baas ven:\n:''(eine perlien, combinere mid komma)''",
- "abusefilter-edit-warn-message": "Te broeke systeembrich bie waarsjoeng:",
- "abusefilter-edit-warn-other": "Anger brich",
- "abusefilter-edit-warn-other-label": "Paasjnaam of anger brich:\n:''(zóngre MediaWikiprefix)''",
- "abusefilter-edit-warn-actions": "Henjilign:",
+ "abusefilter-edit-warn-message": "Te gebroeke systeemberich veur waarsjoewing:",
+ "abusefilter-edit-warn-other": "Anger berich",
+ "abusefilter-edit-warn-other-label": "Paasjnaam of anger berich:\n:''(zónger MediaWikiprefix)''",
+ "abusefilter-edit-warn-actions": "Hanjelinge",
"abusefilter-edit-warn-preview": "Veurvertuun geselkteerd brich",
- "abusefilter-edit-warn-edit": "Maak/bewèrk gesillekteerd berich",
+ "abusefilter-edit-warn-edit": "Maak/bewirk geselekteerd berich",
"abusefilter-edit-tag-tag": "Te zètte teg (eine perlien):",
"abusefilter-edit-denied": "De moogs de details dezer filter neet bekieke, omdet die neet zichber vrielik zeen.",
"abusefilter-edit-main": "Filterparamaeter",
- "abusefilter-edit-done-subtitle": "Filter bewèrk",
+ "abusefilter-edit-done-subtitle": "Filter bewirk",
"abusefilter-edit-done": "De wieziginge aan de filter $1 zeen opgeslage.",
- "abusefilter-edit-badsyntax": "d'r Zit 'n syntaxisfout in de opgegaeve filter.\nDe oetveur van de parser waas: <pre>$1</pre>",
+ "abusefilter-edit-badsyntax": "D'r zit 'n syntaxisfout in de opgegaeve filter.\nDe oetveur van de parser waas: <pre>$1</pre>",
"abusefilter-edit-restricted": "Doe kins deze filter neet bewèrken ómdet dezen ein of mier beperkde hanjelinge bevat.\nVraog 'ne gebroeker mit toestömming óm beperkde hanjelingen toe te vogen óm de wieziging veur dich te make.",
"abusefilter-edit-viewhistory": "Bekiek gesjiedenès vanne filter",
"abusefilter-edit-history": "Gesjiedenès:",
@@ -224,18 +234,18 @@
"abusefilter-edit-builder-vars-oldsize": "Aaj paasjgreudje",
"abusefilter-edit-builder-vars-removedlines": "Regels gwösj in biedraag",
"abusefilter-edit-builder-vars-summary": "Bewèrkingssamevatting",
- "abusefilter-edit-builder-vars-article-id": "Paasj ID",
- "abusefilter-edit-builder-vars-article-ns": "Paasjnaomruumde",
- "abusefilter-edit-builder-vars-article-text": "Paasjnaom (zónger naamruumde)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Ganse paasjnaom",
+ "abusefilter-edit-builder-vars-page-id": "Paasj ID",
+ "abusefilter-edit-builder-vars-page-ns": "Paasjnaomruumde",
+ "abusefilter-edit-builder-vars-page-title": "Paasjnaom (zónger naamruumde)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Ganse paasjnaom",
"abusefilter-edit-builder-vars-movedfrom-id": "Pagina-ID venne verplaatsbere naam",
"abusefilter-edit-builder-vars-movedfrom-ns": "Naamruumdje venne verplaatsbere paasj",
- "abusefilter-edit-builder-vars-movedfrom-text": "Naom venne verplaatsber paasj",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Gans noam venne verplaatsbere paasj",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Naom venne verplaatsber paasj",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Gans noam venne verplaatsbere paasj",
"abusefilter-edit-builder-vars-movedto-id": "Pagina-IDbestömming venne verplaatsbere paasj",
"abusefilter-edit-builder-vars-movedto-ns": "Bestömmingsnaamruumde venne verplaatsber paasj",
- "abusefilter-edit-builder-vars-movedto-text": "Bestömminsnaam venne verplaatsber paasj",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Ganse bestömmingsnaom venne verplaatsber paasj",
+ "abusefilter-edit-builder-vars-movedto-title": "Bestömminsnaam venne verplaatsber paasj",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Ganse bestömmingsnaom venne verplaatsber paasj",
"abusefilter-edit-builder-vars-user-editcount": "Broekerbewèrkingtaal",
"abusefilter-edit-builder-vars-user-age": "Broekerlaeftied",
"abusefilter-edit-builder-vars-user-name": "Gebroekersnaam",
@@ -258,7 +268,7 @@
"abusefilter-edit-builder-vars-file-sha1": "SHA1-hashcode van de bestandjsinhawd",
"abusefilter-filter-log": "Recente filterwieziginge",
"abusefilter-history": "Gesjiedenis veur de filter #$1",
- "abusefilter-history-foruser": "Angeringer doearch $1",
+ "abusefilter-history-foruser": "Verangeringe door $1",
"abusefilter-history-hidden": "verbórge",
"abusefilter-history-enabled": "Ingesjakeldj",
"abusefilter-history-global": "Wikiwied",
@@ -291,7 +301,7 @@
"abusefilter-exception-regexfailure": "d'r Is 'n fout aangetróffen in de regulier expressie \"$3\" bie karakter $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "De ingeboewde variable \"$2\" is vervange bie karakter $1.\nDit is neet toegestange.",
"abusefilter-exception-outofbounds": "d'r Is getrach e lieselement ($2 bie liesgruuedje $3) op te haole det neet besteit bie karakter $1.",
- "abusefilter-exception-notlist": "d'r Is getrach e verzamelingselement op te vraogen oet get det gein verzameling is bie karakter $1.",
+ "abusefilter-exception-notarray": "d'r Is getrach e verzamelingselement op te vraogen oet get det gein verzameling is bie karakter $1.",
"abusefilter-action-tag": "Label",
"abusefilter-action-throttle": "Limiete",
"abusefilter-action-warn": "Waorsjuuw",
@@ -351,7 +361,6 @@
"abusefilter-topnav-import": "Importeer filter",
"abusefilter-log-name": "Filterlogbook",
"abusefilter-log-header": "Dit logbook geuf 'n euverzich van filterverangeringe.\nZuuch de [[Special:AbuseFilter/history|lies mit recente filterverangeringe]] veur volledige details.",
- "abusefilter-log-entry-modify": "haet $1 gewiezig ($2)",
"abusefilter-log-noresults": "Gein resultate",
"abusefilter-diff-title": "(Versjil tösje versies)",
"abusefilter-diff-item": "Deil",
diff --git a/AbuseFilter/i18n/lij.json b/AbuseFilter/i18n/lij.json
index 4b172960..68505d33 100644
--- a/AbuseFilter/i18n/lij.json
+++ b/AbuseFilter/i18n/lij.json
@@ -8,7 +8,6 @@
"abusefilter": "Configuaçion do filtro anti abuxi",
"abuselog": "Registro do filtro anti abuxi",
"abusefilter-intro": "Benvegnui inte l'interfaccia de gestion do filtro anti abuxi.\nO filtro anti abuxi o l'è un scistema aotomatizou pe l'appricaçion di œüristeghe aotomattiche a tutte i açioin.\nL'interfaccia a mostra 'na lista di filtri definii e a ne consente a modiffica.",
- "abusefilter-mustbeeditor": "Pe motivi de segueça, solo i utenti co-o drito de modificâ i filtri anti abuxi poeuan doeuviâ questa interfaccia.",
"abusefilter-warning": "'''Attençion''': Quest'açion a l'è stæta aotomaticamente identificâ comme peigoza.\nE modifiche non costruttive saian fito annulæ; l'inseimento paleise o ripetuo di contribui non costruttivi daiâ loeugo a-o blocco de l'utença ò do to adresso IP.\nSe ti pensci che l'açion in question a segge costruttiva, ti devi inviâla torna pe confermâla.\nQuesta a l'è una breve descriçion da reggola anti abuso che t'hæ infranto: $1",
"abusefilter-disallowed": "Quest'açion a l'è stæta aotomaticamente identificâ comme dannoza e quindi impedia.\nSe ti creddi che a to açion a l'ea construtiva, informa un aministratô de quello che ti çercavi de fâ.\nQuesta a l'è una breve descriçion da reggola de segueça ch'a l'è stæta violâ: $1",
"abusefilter-blocked-display": "Quest'açion a l'è stæta aotomaticamente identificâ comme dannoza e t'è stæto impedio de compîla.\nDe ciu, pe proteze {{SITENAME}}, a to utença e tutti i adressi IP associæ son stæti bloccæ da-o fâ modiffiche.\nSe l'è stæto un errô, pe piaxei contatta un aministratô.\nQuesta a l'è una breve descriçion da reggola de segueça ch'a l'è stæta violâ: $1",
diff --git a/AbuseFilter/i18n/lkt.json b/AbuseFilter/i18n/lkt.json
new file mode 100644
index 00000000..3e3ba364
--- /dev/null
+++ b/AbuseFilter/i18n/lkt.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "R12ntech"
+ ]
+ },
+ "abusefilter-log-search-submit": "Wóle",
+ "abusefilter-list-edit": "Yutȟókeča",
+ "abusefilter-examine-submit": "Wóle"
+}
diff --git a/AbuseFilter/i18n/lt.json b/AbuseFilter/i18n/lt.json
index a5c84256..d6b34fcd 100644
--- a/AbuseFilter/i18n/lt.json
+++ b/AbuseFilter/i18n/lt.json
@@ -11,16 +11,17 @@
"Tomasdd",
"Vogone",
"Vpovilaitis",
- "Matma Rex"
+ "Matma Rex",
+ "Manvydasz",
+ "Hugo.arg"
]
},
"abusefilter-desc": "Pakeitimų tikrinimui naudojamas automatinis euristinis tikrinimas",
"abusefilter": "Piktnaudžiavimų filtravimo priemonė",
"abuselog": "Piktnaudžiavimų sąrašas",
"abusefilter-intro": "Sveiki atvykę į piktnaudžiavimų filtrų valdymo puslapį.\nPiktnaudžiavimo filtras yra automatizuota programinė priemonė, kuri atlieka automatinę euristinę visų veiksmų kontrolę.\nŠiame puslapyje yra pateikiamas sąrašas visų apibrėžtų filtrų, ir jame yra leidžiama juos redaguoti.",
- "abusefilter-mustbeeditor": "Saugumo tikslais, tik naudotojai, turintys teisę redaguoti piktnaudžiavimo filtrus, gali naudoti šią priemonę.",
- "abusefilter-warning": "Įspėjimas''': Šis veiksmas automatiškai buvo identifikuotas kaip kenksmingas.\nNekonstruktyvūs pakeitimai bus greitai atmesti, dideli ar pasikartojantys nekonstruktyvūs pakeitimai gali iššaukti Jūsų sąskaitos ar kompiuterio blokavimą.\nJei Jūs manote, kad šis pakeitimas yra konstruktyvus, tai patvirtindami, Jūs galite pakartotinai paspausti butoną \"Išsaugoti\".\nTrumpas aprašymas piktnaudžiavimo taisyklės, kurią Jūsų veiksmas atitinka, yra: $1",
- "abusefilter-disallowed": "Šis veiksmas buvo automatiškai identifikuotas kaip kenksmingas ir todėl jis buvo neleistas įvykdyti.\nJei Jūs galvojate, kad Jūsų pakeitimas buvo konstruktyvus, prašome susisiekti su administratoriumi ir informuoti jį apie tai ką Jūs bandėte daryti.\nTrumpas aprašymas piktnaudžiavimo taisyklės, kurią Jūsų veiksmas atitinka, yra: $1",
+ "abusefilter-warning": "'''Dėmesio:''' Šis veiksmas buvo automatiškai atpažintas kaip kenksmingas.\nNevertingi pakeitimai bus greitai atmesti, dideli ar pasikartojantys nevertingi pakeitimai gali nulemti Jūsų paskyros ar IP adreso blokavimą.\nJei manote, kad šis pakeitimas yra vertingas, tai patvirtindami, paspauskite išsaugojimo mygtuką.\nČia trumpai aprašytas su Jūsų pakeitimu susijęs piktnaudžiavimo filtras: $1",
+ "abusefilter-disallowed": "Šis veiksmas buvo automatiškai atpažintas kaip kenksmingas, todėl neleista jo įvykdyti.\nJei manote, kad pakeitimas buvo vertingas, prašome susisiekti su administratoriumi ir jam pranešti apie tai, ką norėjote padaryti.\nČia trumpai aprašytas su Jūsų veiksmu susijęs piktnaudžiavimo filtras: $1",
"abusefilter-blocked-display": "Šis veiksmas buvo automatiškai identifikuotas kaip kenksmingas ir todėl jis buvo neleistas įvykdyti.\nPapildomai, apsaugant {{SITENAME}}, Jūsų naudotojo sąskaita ir visi atitinkami IP adresai buvo blokuoti pakeitimų atlikimui.\nJei tai įvyko per klaidą, prašome susisiekti su administratoriumi.\nTrumpas aprašymas piktnaudžiavimo taisyklės, kurią Jūsų veiksmas atitinka, yra: $1",
"abusefilter-degrouped": "Šis veiksmas buvo automatiškai identifikuotas kaip kenksmingas ir todėl jis buvo neleistas įvykdyti.\nPapildomai, kadangi susikompromitavo Jūsų naudotojo sąskaita, visos teisės buvo atimtos. Jei Jūs galvojate, kad tai įvyko per klaidą, prašome susisiekti su biurokratu, paaiškindami šią situaciją, tuomet Jūsų teisė bus atstatytos. Trumpas aprašymas piktnaudžiavimo taisyklės, kurią Jūsų veiksmas atitiko, yra: $1",
"abusefilter-autopromote-blocked": "Šis veiksmas buvo automatiškai identifikuotas kaip kenksmingas ir todėl jis buvo neleistas įvykdyti.\nPapildomai, saugumo tikslais, Jūsų naudotojo sąskaitai leidžiamos privilegijuotos galimybės laikinai buvo panaikintos.\nTrumpas aprašymas piktnaudžiavimo taisyklės, kurią Jūsų veiksmas atitinka, yra: $1",
@@ -52,13 +53,24 @@
"abusefilter-log-summary": "Šiame sąraše pateikiami visi veiksmai, aptikti filtrų.",
"abusefilter-log-search": "Ieškoti piktnaudžiavimų protokole",
"abusefilter-log-search-user": "Naudotojas:",
- "abusefilter-log-search-filter": "Filtro ID:",
+ "abusefilter-log-search-filter": "Filtrų ID (atskirti vertikaliais brūkšniais):",
"abusefilter-log-search-title": "Antraštė:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Aprėptis:",
+ "abusefilter-log-search-impact-all": "Visi veiksmai",
+ "abusefilter-log-search-impact-saved": "Tik išsaugoti pakeitimai",
+ "abusefilter-log-search-impact-not-saved": "Be išsaugotų pakeitimų",
+ "abusefilter-log-search-entries-label": "Matomumas:",
+ "abusefilter-log-search-entries-all": "Visi įrašai",
+ "abusefilter-log-search-action-label": "Suaktyvinti veiksmai:",
+ "abusefilter-log-search-action-other": "Kiti",
+ "abusefilter-log-search-action-any": "Bet kuris",
+ "abusefilter-log-search-action-taken-label": "Atlikti veiksmai:",
+ "abusefilter-log-search-action-taken-any": "Bet kuris",
"abusefilter-log-search-submit": "Ieškoti",
- "abusefilter-log-entry": "$1: $2 atliko veiksmą, kuris suaktyvino piktnaudžiavimo filtrą, {{GENDER:$8|atliko}} „$3“ veiksmą $4.\nVeiksmas atliktas: $5;\nFiltro aprašymas: $6",
- "abusefilter-log-entry-withdiff": "$1: $2 atliko veiksmą, kuris suaktyvino filtrą, {{GENDER:$8|atliko}} „$3“ veiksmą $4.\nVeiksmas atliktas: $5;\nFiltro apibūdinimas: $6 ($7)",
- "abusefilter-log-detailedentry-meta": "$1: $2 iššaukė piktnaudžiavimo filtrą $3, atlikdamas veiksmą \"$4\" puslapiui $5.\nBuvo panaudotas veiksmas: $6;\nFiltro aprašymas: $7 ($8)",
+ "abusefilter-log-entry": "$1: $2 atliko veiksmą, kuris {{GENDER:$8|suaktyvino}} piktnaudžiavimo filtrą, {{GENDER:$8|atliko}} „$3“ veiksmą $4.\nVeiksmas atliktas: $5;\nFiltro aprašymas: $6",
+ "abusefilter-log-entry-withdiff": "$1: $2 atliko veiksmą, kuris {{GENDER:$8|suaktyvino}} filtrą, {{GENDER:$8|atliko}} „$3“ veiksmą $4.\nVeiksmas atliktas: $5;\nFiltro apibūdinimas: $6 ($7)",
+ "abusefilter-log-detailedentry-meta": "$1: $2 {{GENDER:$9|sužadino}} piktnaudžiavimo filtrą $3, {{GENDER:$9|atlikdamas|atlikdama}} veiksmą \"$4\" puslapiui $5.\nBuvo panaudotas veiksmas: $6;\nFiltro aprašymas: $7 ($8)",
"abusefilter-log-detailedentry-global": "visuotinis filtras $1",
"abusefilter-log-detailedentry-local": "filtras $1",
"abusefilter-log-detailslink": "detalės",
@@ -68,12 +80,12 @@
"abusefilter-log-details-var": "Kintamasis",
"abusefilter-log-details-val": "Reikšmė",
"abusefilter-log-details-vars": "Veiksmo parametrai",
- "abusefilter-log-details-private": "Privatūs duomenys",
+ "abusefilter-log-details-private": "Privatūs sąrašo duomenys",
"abusefilter-log-details-ip": "Pradinis IP adresas",
- "abusefilter-log-noactions": "nėra",
+ "abusefilter-log-noactions": "Nėra",
"abusefilter-log-details-diff": "Redagavimo pakeitimai",
"abusefilter-log-linkoncontribs": "piktnaudžiavimų sąrašas",
- "abusefilter-log-linkoncontribs-text": "Šio naudotojo piktnaudžiavimų sąrašas",
+ "abusefilter-log-linkoncontribs-text": "{{GENDER:$1|Šio naudotojo|Šios naudotojos}} piktnaudžiavimų sąrašas",
"abusefilter-log-hidden": "(paslėptas įrašas)",
"abusefilter-log-hidden-implicit": "(paslėpta, nes peržiūra buvo panaikinta)",
"abusefilter-log-cannot-see-details": "Jūs neturite teisės peržiūrėti informaciją apie šį įrašą.",
@@ -83,8 +95,6 @@
"abusefilter-log-hide-hidden": "Slėpti šį įrašą nuo višuo rodymo",
"abusefilter-log-hide-reason": "Priežastis",
"abusefilter-log-hide-forbidden": "Jūs neturite teisių paslėpti piktnaudžiavimo žurnalo įrašus.",
- "abusefilter-logentry-suppress": "paslėpti \"[[ $1 ]]\"",
- "abusefilter-logentry-unsuppress": "neslėpti \"[[$1]]\"",
"abusefilter-management": "Piktnaudžiavimo filtrų valdymas",
"abusefilter-list": "Visi filtrai",
"abusefilter-list-id": "Filtro ID",
@@ -116,7 +126,6 @@
"abusefilter-list-options-scope-local": "Tik vietinės taisyklės",
"abusefilter-list-options-scope-global": "Tik visuotinės taisyklės",
"abusefilter-list-options-scope-all": "Vietos ir visuotinės taisyklės",
- "abusefilter-list-options-disabled": "Išjungti filtrai:",
"abusefilter-list-options-hidedisabled": "Paslėpti išjungtus filtrus",
"abusefilter-list-options-submit": "Pakeisti",
"abusefilter-tools-text": "Čia yra keletas priemonių, kurios gali būti naudingos formuluojant ir derinant piktnaudžiavimo filtrus.",
@@ -134,9 +143,8 @@
"abusefilter-edit-subtitle-new": "Kuriant filtrą",
"abusefilter-edit-oldwarning": "<strong>Jūs keičiate seną šio filtro versiją.\nRodoma statistika paskaičiuota paskutinei filtro versijai.\nJei įrašysite pakeitimus, jūs perrašysite visus pakeitimus, darytus po dabar redaguojamos versijos.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Grįžti į šio failo istoriją]].",
"abusefilter-edit-status-label": "Statistika:",
- "abusefilter-edit-status": "{{PLURAL:$1|Paskutinis|Paskutiniai|Paskutinių}} $1 {{PLURAL:$1|veiksmas|veiksmai|veiksmų}}, Šį filtrą atitiko $2 ($3%). Vidutinis jų vykdymo laikas yra $4ms, sunaudota $5 {{PLURAL:$5|sąlyga|sąlygos|sąlygų}} iš limito.",
+ "abusefilter-edit-status": "{{PLURAL:$1|Paskutinis|Paskutiniai|Paskutinių}} $1 {{PLURAL:$1|veiksmas|veiksmai|veiksmų}}, šį filtrą atitiko $2 ($3%).",
"abusefilter-edit-status-profile": "{{PLURAL:$1|Paskutinis|Paskutiniai|Paskutinių}} $1 {{PLURAL:$1|veiksmas|veiksmai|veiksmų}}, Šį filtrą atitiko $2 ($3%). Vidutinis jų vykdymo laikas yra $4ms, sunaudota $5 {{PLURAL:$5|sąlyga|sąlygos|sąlygų}} iš limito.",
- "abusefilter-edit-throttled": "'''Įspėjimas''': Šis filtras saugumo sumetimais buvo automatiškai išjungtas. Jo atitikimų skaičius pasiekė $1% veiksmų ribą.",
"abusefilter-edit-new": "Naujas filtras",
"abusefilter-edit-save": "Išsaugoti filtrą",
"abusefilter-edit-id": "Filtro ID:",
@@ -144,18 +152,17 @@
"abusefilter-edit-group": "Filtro grupė:",
"abusefilter-edit-flags": "Žymės:",
"abusefilter-edit-enabled": "Įjungti šį filtrą",
- "abusefilter-edit-deleted": "Pažymėtas panaikintu",
+ "abusefilter-edit-deleted": "Pažymėti trynimui",
"abusefilter-edit-hidden": "Paslėpti šio filtro detales nuo viešojo matymo",
"abusefilter-edit-global": "Pasaulio filtras",
"abusefilter-edit-rules": "Sąlygos:",
"abusefilter-edit-notes": "Pastabos:",
"abusefilter-edit-lastmod": "Paskutinį kartą filtras buvo keistas:",
- "abusefilter-edit-lastmod-text": "$1 puslapiui $2",
+ "abusefilter-edit-lastmod-text": "$1 naudotojo $2",
"abusefilter-edit-hitcount": "Filtro pritaikymai:",
"abusefilter-edit-consequences": "Veiksmai, kurių imamasi, kai yra tenkinama sąlyga",
"abusefilter-edit-action-warn": "Iškviečia šiuos veiksmus po to, kai vartotojas yra perspėtas",
"abusefilter-edit-action-disallow": "Sulaikyti naudotoją nuo abejotino veiksmo atlikimo",
- "abusefilter-edit-action-flag": "Pažymėti pakeitimą piktnaudžiavimų protokole",
"abusefilter-edit-action-blockautopromote": "Atšaukti naudotojo automatiškai patvirtinto būseną",
"abusefilter-edit-action-degroup": "Pašalinti vartotoją iš visų privilegijuotų grupių",
"abusefilter-edit-action-block": "Blokuoti naudotoją ir / arba IP adresą, neleidžiant redaguoti",
@@ -163,9 +170,11 @@
"abusefilter-edit-action-rangeblock": "Blokuoti /16 aibę nuo kurios naudotojas padėjo",
"abusefilter-edit-action-tag": "Žymė pakeitimų, skirtų vėlesniam peržiūrėjimui",
"abusefilter-edit-throttle-count": "Leidžiamų veiksmų skaičius:",
- "abusefilter-edit-throttle-period": "Laiko periodas:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekundė|sekundės|sekundžių}}",
+ "abusefilter-edit-throttle-period": "Laiko tarpas (sekundėmis):",
"abusefilter-edit-throttle-groups": "Statistikos rinkimo grupė:\n:''(viena eilutėje, jungti kableliais)''",
+ "abusefilter-edit-throttle-ip": "IP adresas",
+ "abusefilter-edit-throttle-user": "Naudotojo paskyra",
+ "abusefilter-edit-throttle-page": "Puslapis",
"abusefilter-edit-warn-message": "Sisteminis pranešimas, kuris naudojamas perspėjimui:",
"abusefilter-edit-warn-other": "Kitas pranešimas",
"abusefilter-edit-warn-other-label": "Kito pranešimo puslapio vardas:\n:''(be MediaWiki priešdėlio)''",
@@ -173,6 +182,8 @@
"abusefilter-edit-warn-preview": "Peržiūrėti pasirinktą pranešimą",
"abusefilter-edit-warn-edit": "Sukurti/Redaguoti pasirinktą pranešimą",
"abusefilter-edit-tag-tag": "Naudojamos žymės (po vieną eilutėje):",
+ "abusefilter-block-anon": "Užblokuoti anoniminiai naudotojai",
+ "abusefilter-block-user": "užblokuoti prisiregistravę naudotojai",
"abusefilter-edit-denied": "Jūs negalite peržiūrėti šio filtro detalių, nes jis yra paslėptas nuo viešojo matymo.",
"abusefilter-edit-main": "Filtro parametrai",
"abusefilter-edit-done-subtitle": "Filtras pakeistas",
@@ -252,21 +263,20 @@
"abusefilter-edit-builder-vars-new-content-model": "Naujo turinio modelis",
"abusefilter-edit-builder-vars-removedlines": "Eilutės išmestos redaguojant",
"abusefilter-edit-builder-vars-summary": "Redagavimo pastaba",
- "abusefilter-edit-builder-vars-article-id": "Puslapio ID",
- "abusefilter-edit-builder-vars-article-ns": "Puslapio vardų sritis",
- "abusefilter-edit-builder-vars-article-text": "Puslapio antraštė (be vardų srities)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Pilna puslapio antraštė",
- "abusefilter-edit-builder-vars-article-views": "Puslapio peržiūros",
+ "abusefilter-edit-builder-vars-page-id": "Puslapio ID",
+ "abusefilter-edit-builder-vars-page-ns": "Puslapio vardų sritis",
+ "abusefilter-edit-builder-vars-page-title": "Puslapio antraštė (be vardų srities)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Pilna puslapio antraštė",
"abusefilter-edit-builder-vars-movedfrom-id": "Pervadinamo puslapio ID",
"abusefilter-edit-builder-vars-movedfrom-ns": "Pervadinamo puslapio vardų sritis",
- "abusefilter-edit-builder-vars-movedfrom-text": "Pervadinamo puslapio antraštė",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Pervadinamo puslapio visa antraštė",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Pervadinamo puslapio antraštė",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Pervadinamo puslapio visa antraštė",
"abusefilter-edit-builder-vars-movedto-id": "Pervadinto puslapio ID",
"abusefilter-edit-builder-vars-movedto-ns": "Pervadinto puslapio vardų sritis",
- "abusefilter-edit-builder-vars-movedto-text": "Pervadinto puslapio antraštė",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Pervadinto puslapio pilna antraštė",
+ "abusefilter-edit-builder-vars-movedto-title": "Pervadinto puslapio antraštė",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Pervadinto puslapio pilna antraštė",
"abusefilter-edit-builder-vars-user-editcount": "Naudotojo redagavimų skaičius",
- "abusefilter-edit-builder-vars-user-age": "Naudotojo sąskaitos amžius",
+ "abusefilter-edit-builder-vars-user-age": "Naudotojo paskyros amžius",
"abusefilter-edit-builder-vars-user-name": "Naudotojo sąskaitos vardas",
"abusefilter-edit-builder-vars-user-groups": "Grupės (imtinai), kurioms naudotojas priklauso",
"abusefilter-edit-builder-vars-user-rights": "Teisės, kurias turi vartotojas",
@@ -330,7 +340,7 @@
"abusefilter-exception-regexfailure": "Reguliarios išraiškos \"$3\" klaida, pozicijoje $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Negalimas pakeitimas statinio kintamojo \"$2\" pozicijoje $1.",
"abusefilter-exception-outofbounds": "Paprašytas neegzistuojantis sąrašo elementas $2 (sąrašo ilgis = $3) pozicijoje $1.",
- "abusefilter-exception-notlist": "Prašomas masyvo elementas kintamajam, kuris nėra masyvas, pozicijoje $1.",
+ "abusefilter-exception-notarray": "Prašomas masyvo elementas kintamajam, kuris nėra masyvas, pozicijoje $1.",
"abusefilter-action-tag": "Žyma",
"abusefilter-action-throttle": "Skaičiuoti statistiką",
"abusefilter-action-warn": "Perspėti",
@@ -346,7 +356,7 @@
"abusefilter-revert-periodstart": "Periodo pradžia:",
"abusefilter-revert-periodend": "Periodo pabaiga:",
"abusefilter-revert-search": "Pasirinkite veiksmus",
- "abusefilter-revert-filter": "Filtras:",
+ "abusefilter-revert-filter": "Filtro ID:",
"abusefilter-revert-preview-intro": "Žemiau yra veiksmai, kurių imasi piktnaudžiavimo filtrą, kuris bus grąžinti šį ieškiniu.\nPrašome atidžiai juos patikrinti, ir spustelėkite \"patvirtinti\", patvirtinkite savo pasirinkimą.",
"abusefilter-revert-confirm": "Patvirtinti",
"abusefilter-revert-success": "!Jūs grįžo dėl piktnaudžiavimo filtro dėl visų veiksmų [[specialus:AbuseFilter/$1|filter $2]].",
@@ -391,7 +401,6 @@
"abusefilter-topnav-import": "Importuoti filtrą",
"abusefilter-log-name": "Piktnaudžiavimų filtro žurnalas",
"abusefilter-log-header": "Šis sąrašas rodo bendrą filtrų pakeitimo statistiką.\nVisas detales žiūrėkite filtrų naujausių pakeitimų [[Special:AbuseFilter/history|sąraše]].",
- "abusefilter-log-entry-modify": "pakeitė $1 ($2)",
"abusefilter-log-noresults": "Nėra rezultatų",
"abusefilter-diff-title": "Skirtumas tarp versijų",
"abusefilter-diff-item": "Elementas",
@@ -405,26 +414,5 @@
"abusefilter-import-intro": "Galite naudoti šią sąsają importuoti filtrus iš kitų wiki.\nŠaltinio wiki, spustelėkite \"{{int:abusefilter-redaguoti-eksporto}}\" pagal \"{{int:abusefilter-įrankiai-paantraštė}}\" redagavimo sąsaja.\nKopijuoti iš teksto lauką, kad pasirodo, ir įklijuokite jį į šį teksto lauką, tada spustelėkite \"{{int:abusefilter-importo-pateikti}}\".",
"abusefilter-import-submit": "Importuoti duomenis",
"abusefilter-group-default": "Numatytasis",
- "abusefilter-http-error": "Įvyko HTTP klaida: $1.",
- "apihelp-abusefilterchecksyntax-example-1": "Tikrinti galimo filtro sintaksę",
- "apihelp-abusefilterchecksyntax-example-2": "Tikrinti negalimo filtro sintaksę",
- "apihelp-abusefilterevalexpression-param-expression": "Išraiška įvertinimui.",
- "apihelp-abusefilterevalexpression-example-1": "Įvertinti paprastą išraišką",
- "apihelp-abusefilterunblockautopromote-param-user": "Vartotojo vardas, kurį norite atblokuoti.",
- "apihelp-query+abusefilters-description": "Rodyti piktnaudžiavimo filtrų detales.",
- "apihelp-query+abusefilters-param-show": "Rodyti tik filtrus, kurie atitinką kriterijų.",
- "apihelp-query+abusefilters-param-limit": "Maksimalus numeris filtrų sąraše.",
- "apihelp-query+abusefilters-param-prop": "Kurias savybes gauti.",
- "apihelp-query+abusefilters-example-1": "Pateikti įgalintų viešų filtrų sąrašą",
- "apihelp-query+abusefilters-example-2": "Rodyti kai kurias detales apie filtrus",
- "apihelp-query+abuselog-description": "Rodyti įvykius, kurie buvo sugauti vieno iš piktnaudžiavimo filtrų.",
- "apihelp-query+abuselog-param-start": "Laiko žymą nuo kurios pradėti.",
- "apihelp-query+abuselog-param-end": "Laiko žymą kuria baigti.",
- "apihelp-query+abuselog-param-user": "Rodyti tik įrašus, kurie buvo duoti vartotojo ar IP adreso.",
- "apihelp-query+abuselog-param-title": "Rodyti tik įrašus, kurie yra duotajame puslapyje.",
- "apihelp-query+abuselog-param-filter": "Rodyti tik įrašus, kurie buvo sugauti pateiktojo filtro ID.",
- "apihelp-query+abuselog-param-limit": "Maksimalus kiekis įrašų sąraše.",
- "apihelp-query+abuselog-param-prop": "Kurias savybes gauti.",
- "apihelp-query+abuselog-example-1": "Rodyti naujus žurnalo įrašus",
- "apihelp-query+abuselog-example-2": "Rodyti naujus [[API]] žurnalo įrašus"
+ "abusefilter-http-error": "Įvyko HTTP klaida: $1."
}
diff --git a/AbuseFilter/i18n/lv.json b/AbuseFilter/i18n/lv.json
index 007ff91a..4d9503a6 100644
--- a/AbuseFilter/i18n/lv.json
+++ b/AbuseFilter/i18n/lv.json
@@ -7,18 +7,19 @@
"Nemo bis",
"Edgars2007",
"Matma Rex",
- "Silraks"
+ "Silraks",
+ "Zuiks",
+ "Mailman"
]
},
"abusefilter-desc": "Pielieto automātiskas heiristikas labojumiem",
"abusefilter": "Ļaunprātīgās izmantošanas filtru konfigurācija",
"abuselog": "Ļaunprātīgo izmantošanu reģistrs",
"abusefilter-intro": "Laipni lūdzam ļaunprātīgās izmantošanas filtru pārvaldības saskarnē.\nĻaunprātīgās izmantošanas filtri ir automatizēta programmatūra, kas pielieto automātiskas heiristikas visām lietotāju darbībām.\nŠajā saskarnē redzami patlaban definētie filtri, un tiek dota iespēja tos izmainīt.",
- "abusefilter-mustbeeditor": "Drošības apsvērumu dēļ šo saskarni var lietot tikai lietotāji, kam ir tiesības mainīt ļaunprātīgās izmantošanas filtrus",
"abusefilter-warning": "'''Uzmanību''': Šī darbība automātiski tika atpazīta kā ļaunprātīga.\nNekonstruktīvi labojumi tiks nekavējoties atcelti,\nun nekaunīgu vai atkārtotu ļaunprātīgu labojumu dēļ tavs konts vai IP adrese var tikt bloķēta.\nJa tu uzskati, ka tavs labojums ir konstruktīvs, tad saglabā lapu vēlreiz, lai to apstiprinātu.\nĪss kopsavilkums noteikumam, kas saistīts ar tevis veikto darbību: $1",
"abusefilter-disallowed": "Šī darbība automātiski tika atpazīta kā ļaunprātīga un tāpēc tika aizliegta.\nJa tu uzskati, ka tavs labojums ir konstruktīvs, lūdzu informē administratoru par to, ko tu centies izdarīt.\nĪss kopsavilkums noteikumam, kas saistīts ar tevis veikto darbību: $1",
"abusefilter-blocked-display": "Šī darbība automātiski tika atpazīta kā ļaunprātīga, un tev ir aizliegts to veikt.\nTurklāt, lai aizsargātu {{SITENAME}}, ir liegti labojumi no tava konta un visām saistītajām IP adresēm.\nJa tu uzskati, ka tas ir noticis kļūdas dēļ, lūdzu sazinies ar administratoru.\nĪss kopsavilkums noteikumam, kas saistīts ar tevis veikto darbību: $1",
- "abusefilter-degrouped": "Šī darbība automātiski tika atpazīta kā ļaunprātīga.\nLīdz ar to tā tika aizliegta un, tā kā ir aizdomas, ka jūsu konts ir apdraudēts, visas tiesības tika atceltas.\nJa tu uzskati, ka tas ir noticis kļūdas dēļ, lūdzu sazinies ar birokrātu un paskaidro šo darbību, lai atgūtu savas tiesības.\nĪss kopsavilkums noteikumam, kas saistīts ar tevis veikto darbību: $1",
+ "abusefilter-degrouped": "Šī darbība automātiski tika atpazīta kā ļaunprātīga.\nLīdz ar to tā tika aizliegta un, tā kā ir aizdomas, ka tavs konts ir apdraudēts, visas tiesības tika atceltas.\nJa tu uzskati, ka tas ir noticis kļūdas dēļ, lūdzu sazinies ar birokrātu un paskaidro šo darbību, lai atgūtu savas tiesības.\nĪss kopsavilkums noteikumam, kas saistīts ar tevis veikto darbību: $1",
"abusefilter-autopromote-blocked": "Šī darbība automātiski tika atpazīta kā ļaunprātīga, un tev ir aizliegts to veikt.\nTurklāt, kā drošības līdzeklis, dažas privilēģijas, kas parasti tiek piešķirtas ilgāk pastāvošiem kontiem, uz laiku ir atceltas no jūsu konta.\nĪss kopsavilkums noteikumam, kas saistīts ar tevis veikto darbību: $1",
"abusefilter-blocker": "Ļaunprātīgo izmantošanu filtrs",
"abusefilter-blockreason": "Automātiski bloķēts ar ļaunprātīgās izmantošanas filtru.\nAtbilstošā likuma apraksts: $1",
@@ -60,7 +61,7 @@
"abusefilter-log-details-var": "Mainīgais",
"abusefilter-log-details-val": "Vērtība",
"abusefilter-log-details-vars": "Darbības parametri",
- "abusefilter-log-details-private": "Privātie dati",
+ "abusefilter-log-details-private": "Privāto datu reģistrs",
"abusefilter-log-details-ip": "Izcelsmes IP adrese",
"abusefilter-log-noactions": "nav",
"abusefilter-log-details-diff": "Veiktās izmaiņas",
@@ -68,13 +69,14 @@
"abusefilter-log-linkoncontribs-text": "Ļaunprātīgo izmaiņu reģistrs šim lietotājam",
"abusefilter-log-hidden": "(slēpts ieraksts)",
"abusefilter-log-details-hidden": "Sīkāka informācija par šo ierakstu nav publiski pieejama.",
- "abusefilter-log-hide-legend": "Slēpt reģistra ierakstu",
+ "abusefilter-log-hide-legend": "Slēpt žurnāla ierakstu",
"abusefilter-log-hide-id": "Reģistra ieraksta ID:",
"abusefilter-log-hide-hidden": "Liegt šim ierakstam publisku redzamību",
"abusefilter-log-hide-reason": "Iemesls:",
+ "abusefilter-log-hide-reason-other": "Cits/papildu iemesls:",
"abusefilter-log-hide-forbidden": "Jums nav tiesību paslēpt ļaunprātīgās izmantošanas reģistra ierakstus.",
- "abusefilter-logentry-suppress": "paslēpa \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "parādīja \"[[$1]]\"",
+ "log-action-filter-abusefilter-create": "Jauna filtra izveide",
+ "log-action-filter-abusefilter-modify": "Filtra izmaiņa",
"abusefilter-management": "Ļaunprātīgās izmantošanas filtru vadība",
"abusefilter-list": "Visi filtri",
"abusefilter-list-id": "Filtra ID",
@@ -105,8 +107,8 @@
"abusefilter-list-options-scope": "Rādīt filtrus:",
"abusefilter-list-options-scope-local": "Tikai vietējie noteikumi",
"abusefilter-list-options-scope-global": "Tikai globālie noteikumi",
- "abusefilter-list-options-disabled": "Atslēgtie filtri:",
"abusefilter-list-options-hidedisabled": "Nerādīt atslēgtos filtrus",
+ "abusefilter-list-options-search-rlike": "Regulārā izteiksme",
"abusefilter-list-options-submit": "Atjaunināt",
"abusefilter-tools-text": "Šeit ir daži rīki, kas var būt noderīgi, lai izveidotu un atkļūdotu ļaunprātīgās izmantošanas filtrus.",
"abusefilter-tools-expr": "Izteiksmes pārbaude",
@@ -125,11 +127,12 @@
"abusefilter-edit-status-label": "Statistika:",
"abusefilter-edit-status": "No {{PLURAL:$1|pēdējām|pēdējās|pēdējām}} $1 {{PLURAL:$1|darbībām|darbības|darbībām}} šis filtrs attiecās uz $2 ($3%).",
"abusefilter-edit-status-profile": "No {{PLURAL:$1|pēdējām|pēdējās|pēdējām}} $1 {{PLURAL:$1|darbībām|darbības|darbībām}} šis filtrs attiecās uz $2 ($3%).\nVidēji tā darbības laiks ir $4 ms, un tas izlieto $5 {{PLURAL:$5|nosacījumus|nosacījumu|nosacījumus}} no nosacījumu limitu.",
- "abusefilter-edit-throttled": "'''Brīdinājums''': Drošības iemeslu dēļ šis filtrs tika automātiski atslēgts.\nTas sasniedza $1% no atļauto darbību limita.",
"abusefilter-edit-new": "Jauns filtrs",
"abusefilter-edit-save": "Saglabāt filtru",
"abusefilter-edit-id": "Filtra ID:",
+ "abusefilter-edit-switch-editor": "Pārslēgt redaktoru",
"abusefilter-edit-description": "Apraksts:\n:''(publiski apskatāms)''",
+ "abusefilter-edit-field-description": "apraksts",
"abusefilter-edit-group": "Filtru grupa:",
"abusefilter-edit-flags": "Iezīmes:",
"abusefilter-edit-enabled": "Ieslēgt šo filtru",
@@ -137,6 +140,7 @@
"abusefilter-edit-hidden": "Liegt šī filtra papildinformācijas publisku apskati",
"abusefilter-edit-global": "Globāls filtrs",
"abusefilter-edit-rules": "Nosacījumi:",
+ "abusefilter-edit-field-conditions": "nosacījumi",
"abusefilter-edit-notes": "Piezīmes:",
"abusefilter-edit-lastmod": "Pēdējoreiz filtrs izmainīts:",
"abusefilter-edit-lastmod-text": "$1 — $2",
@@ -152,7 +156,6 @@
"abusefilter-edit-action-tag": "Atzīmēt labojumu tālākai pārbaudei",
"abusefilter-edit-throttle-count": "Atļauto darbību skaits:",
"abusefilter-edit-throttle-period": "Laika periods:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekundes|sekunde|sekundes}}",
"abusefilter-edit-throttle-groups": "Grupēt pēc:\n:''(pa vienam katrā rindiņā, apvienot ar komatiem)''",
"abusefilter-edit-warn-message": "Sistēmas paziņojums, ko lietot kā brīdinājumu:",
"abusefilter-edit-warn-other": "Cits paziņojums",
@@ -160,7 +163,10 @@
"abusefilter-edit-warn-actions": "Darbības:",
"abusefilter-edit-warn-preview": "Priekšskatīt izvēlēto paziņojumu",
"abusefilter-edit-warn-edit": "Izveidot/Rediģēt izvēlēto paziņojumu",
+ "abusefilter-edit-disallow-actions": "Darbības:",
"abusefilter-edit-tag-tag": "Piemērojamās iezīmes (pa vienai katrā rindiņā):",
+ "abusefilter-block-anon": "Bloķēt anonīmus lietotājus",
+ "abusefilter-block-user": "bloķēt reģistrētus lietotājus",
"abusefilter-edit-denied": "Sīkāka informācija par šo filtru nav publiski pieejama.",
"abusefilter-edit-main": "Filtra parametri",
"abusefilter-edit-done-subtitle": "Filtra rediģēšana pabeigta",
@@ -235,19 +241,18 @@
"abusefilter-edit-builder-vars-oldsize": "Vecais lapas izmērs:",
"abusefilter-edit-builder-vars-removedlines": "Labojumā dzēstās rindas",
"abusefilter-edit-builder-vars-summary": "Labojuma kopsavilkums/iemesls",
- "abusefilter-edit-builder-vars-article-id": "Lapas ID",
- "abusefilter-edit-builder-vars-article-ns": "Lapas vārdtelpa",
- "abusefilter-edit-builder-vars-article-text": "Lapas nosaukums (bez vārdtelpas)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Pilns lapas nosaukums",
- "abusefilter-edit-builder-vars-article-views": "Lapu skatījumi",
+ "abusefilter-edit-builder-vars-page-id": "Lapas ID",
+ "abusefilter-edit-builder-vars-page-ns": "Lapas vārdtelpa",
+ "abusefilter-edit-builder-vars-page-title": "Lapas nosaukums (bez vārdtelpas)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Pilns lapas nosaukums",
"abusefilter-edit-builder-vars-movedfrom-id": "Pārvietojamās lapas ID",
"abusefilter-edit-builder-vars-movedfrom-ns": "Pārvietojamās lapas vārdtelpa",
- "abusefilter-edit-builder-vars-movedfrom-text": "Pārvietojamās lapas nosaukums",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Pilns pārvietojamās lapas nosaukums",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Pārvietojamās lapas nosaukums",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Pilns pārvietojamās lapas nosaukums",
"abusefilter-edit-builder-vars-movedto-id": "Pārvietošanas galamērķa lapas ID",
"abusefilter-edit-builder-vars-movedto-ns": "Pārvietošanas galamērķa vārdtelpa",
- "abusefilter-edit-builder-vars-movedto-text": "Pārvietošanas galamērķa lapas nosaukums",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Pilns pārvietošanas galamērķa lapas nosaukums",
+ "abusefilter-edit-builder-vars-movedto-title": "Pārvietošanas galamērķa lapas nosaukums",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Pilns pārvietošanas galamērķa lapas nosaukums",
"abusefilter-edit-builder-vars-user-editcount": "Lietotāja labojumu skaits",
"abusefilter-edit-builder-vars-user-age": "Lietotāja konta vecums",
"abusefilter-edit-builder-vars-user-name": "Lietotāja konta vārds",
@@ -304,7 +309,7 @@
"abusefilter-exception-regexfailure": "Kļūda regulārajā izteiksmē \"$3\" pozīcijā $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Neatļauta vērtības piešķiršana iebūvētajam mainīgajam \"$2\" pozīcijā $1.",
"abusefilter-exception-outofbounds": "Pieprasīts neeksistējošs saraksta elements $2 (saraksta garums = $3) pozīcijā $1.",
- "abusefilter-exception-notlist": "Pieprasīts masīva elements objektam, kas nav masīvs, pozīcijā $1.",
+ "abusefilter-exception-notarray": "Pieprasīts masīva elements objektam, kas nav masīvs, pozīcijā $1.",
"abusefilter-action-tag": "Iezīme",
"abusefilter-action-throttle": "Apspiest",
"abusefilter-action-warn": "Brīdināt",
@@ -320,7 +325,7 @@
"abusefilter-revert-periodstart": "Perioda sākums:",
"abusefilter-revert-periodend": "Perioda beigas:",
"abusefilter-revert-search": "Izvēlieties darbības",
- "abusefilter-revert-filter": "Filtrs:",
+ "abusefilter-revert-filter": "Filtra ID:",
"abusefilter-revert-confirm": "Apstiprināt",
"abusefilter-revert-reasonfield": "Iemesls:",
"abusefilter-test": "Pārbaudīt filtru pret iepriekšējiem labojumiem",
@@ -329,6 +334,7 @@
"abusefilter-test-submit": "Pārbaudīt",
"abusefilter-test-load": "Ielādēt",
"abusefilter-test-user": "Izmaiņas pēc lietotāja:",
+ "abusefilter-test-nobots": "Paslēpt botu labojumus",
"abusefilter-test-period-start": "Pēc tam veiktās izmaiņas:",
"abusefilter-test-period-end": "Pirms tam veiktās izmaiņas:",
"abusefilter-test-page": "Lapai veiktās izmaiņas:",
@@ -360,5 +366,6 @@
"abusefilter-diff-prev": "Vecāka izmaiņa",
"abusefilter-diff-next": "Jaunāka izmaiņa",
"abusefilter-import-submit": "Importēt datus",
- "abusefilter-group-default": "Noklusējuma"
+ "abusefilter-group-default": "Noklusējuma",
+ "abusefilter-log-ip-not-available": "Nav pieejams"
}
diff --git a/AbuseFilter/i18n/mai.json b/AbuseFilter/i18n/mai.json
index e32792a6..7a5893b3 100644
--- a/AbuseFilter/i18n/mai.json
+++ b/AbuseFilter/i18n/mai.json
@@ -54,8 +54,6 @@
"abusefilter-log-hide-legend": "लॉग प्रवेश नुकाऊँ",
"abusefilter-log-hide-id": "लॉग प्रवेश आइ॰डी:",
"abusefilter-log-hide-reason": "कारण:",
- "abusefilter-logentry-suppress": "\"[[$1]]\" के नुकाएल",
- "abusefilter-logentry-unsuppress": "नैं छुपाऊँ \"[[$1]]\"",
"abusefilter-management": "दुर्व्यवहार फ़िल्टर प्रबन्ध",
"abusefilter-list": "सभ फ़िल्टर",
"abusefilter-list-id": "फ़िल्टर आइ॰डी",
@@ -87,7 +85,6 @@
"abusefilter-list-options-scope-local": "स्थानीय नियम सभ मात्र",
"abusefilter-list-options-scope-global": "ग्लोबल नियम सभ मात्र",
"abusefilter-list-options-scope-all": "स्थानीय आर वैश्विक नियम सभ",
- "abusefilter-list-options-disabled": "अयोग्य फ़िल्टर",
"abusefilter-list-options-hidedisabled": "अयोग्य फ़िल्टर के नुकाऊ",
"abusefilter-list-options-submit": "अद्यतन",
"abusefilter-tools-expr": "अभिव्यक्ति परीक्षक",
@@ -116,7 +113,6 @@
"abusefilter-edit-hitcount": "फिल्टर हिट सभ:",
"abusefilter-edit-throttle-count": "कामसभ कs संख्याके अनुमति:",
"abusefilter-edit-throttle-period": "समय कs अवधि:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|सॅकेंड|सॅकेंडसभ}}",
"abusefilter-edit-warn-other": "अन्य सन्देश",
"abusefilter-edit-warn-actions": "क्रिया सभ",
"abusefilter-edit-warn-preview": "चुन्ल गेल सन्देश के पूर्वावलोकन करु",
@@ -165,11 +161,10 @@
"abusefilter-edit-builder-vars-oldsize": "पुरना पृष्ठ आकार",
"abusefilter-edit-builder-vars-removedlines": "सम्पादन में हटाबल गेल लाइन सभ",
"abusefilter-edit-builder-vars-summary": "सम्पादन सारांश/कारण",
- "abusefilter-edit-builder-vars-article-id": "पृष्ठ आइडी",
- "abusefilter-edit-builder-vars-article-ns": "पृष्ठ नामस्थान",
- "abusefilter-edit-builder-vars-article-text": "पृष्ठ शीर्षक (बिना नामस्थान)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "पूर्ण पृष्ठ शीर्षक",
- "abusefilter-edit-builder-vars-article-views": "पृष्ठ के विचार",
+ "abusefilter-edit-builder-vars-page-id": "पृष्ठ आइडी",
+ "abusefilter-edit-builder-vars-page-ns": "पृष्ठ नामस्थान",
+ "abusefilter-edit-builder-vars-page-title": "पृष्ठ शीर्षक (बिना नामस्थान)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "पूर्ण पृष्ठ शीर्षक",
"abusefilter-edit-builder-vars-user-editcount": "सदस्यक सम्पादन सङ्ख्या",
"abusefilter-edit-builder-vars-user-age": "सदस्यखाताक उमर",
"abusefilter-edit-builder-vars-user-name": "सदस्यखाताक नाम",
@@ -228,7 +223,6 @@
"abusefilter-topnav-tools": "डिबगिंग उपकरण सभ",
"abusefilter-topnav-import": "आयात फ़िल्टर",
"abusefilter-log-name": "दुर्व्यवहार फिल्टर लौग",
- "abusefilter-log-entry-modify": "संशोधित $1 ($2)",
"abusefilter-log-noresults": "कोनो परिणाम नैँ",
"abusefilter-diff-item": "आइटम",
"abusefilter-diff-info": "न्यूनतम जानकारी",
@@ -237,6 +231,5 @@
"abusefilter-diff-prev": "पुरना बदलाब",
"abusefilter-diff-next": "नयाँ बदलाब",
"abusefilter-import-submit": "डेटा आयात करु",
- "abusefilter-group-default": "डिफ़ॉल्ट",
- "apihelp-query+abuselog-example-1": "सन्निकट लौग प्रविष्टिसभ देखाबी"
+ "abusefilter-group-default": "डिफ़ॉल्ट"
}
diff --git a/AbuseFilter/i18n/map-bms.json b/AbuseFilter/i18n/map-bms.json
index acbf5ce5..eade9407 100644
--- a/AbuseFilter/i18n/map-bms.json
+++ b/AbuseFilter/i18n/map-bms.json
@@ -8,7 +8,6 @@
"abusefilter-desc": "Terapna pamriksan heuristik otomatis nang suntingan",
"abusefilter": "Pangaturan saringan planggaran",
"abuselog": "Log planggaran",
- "abusefilter-mustbeeditor": "Kanggo alesan kamanan, mung panganggo sing duwe hak ngowah saringan planggaran sing teyeng nggo ngowaih kiye.",
"abusefilter-blocker": "Saringan planggaran",
"abusefilter-degroupreason": "Hak akses dibedhul otomatis nang saringan planggaran.\nKatrangan aturan: $1",
"abusefilter-accountreserved": "Jeneng akun kiye wis dipesen nggo dienggo nang saringan planggaran.",
@@ -65,8 +64,6 @@
"abusefilter-log-hide-hidden": "Umpetna entri kiye sekang publik",
"abusefilter-log-hide-reason": "Alesan:",
"abusefilter-log-hide-forbidden": "Rika ora duwe ijin nggo ngumpetna entri log planggaran.",
- "abusefilter-logentry-suppress": "umpetna \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "tidokna \"[[$1]]\"",
"logentry-abusefilter-hit": "$1 ngurubna $4, nglakokna tindakan \"$5\" nang $3. Tindakan sing dijikot: $6 ($7)",
"abusefilter-management": "Manajemen saringan planggaran",
"abusefilter-list": "Kabeh saringan",
@@ -99,7 +96,6 @@
"abusefilter-list-options-scope-local": "Kur kewicaksanaan lokal",
"abusefilter-list-options-scope-global": "Aturane global",
"abusefilter-list-options-scope-all": "Kewicaksanaan lokal lan global",
- "abusefilter-list-options-disabled": "Saringan dipateni:",
"abusefilter-tools-reautoconfirm-user": "Panganggo:",
"abusefilter-edit-new": "Saringan anyar",
"abusefilter-edit-save": "Simpen saringan",
@@ -115,7 +111,6 @@
"abusefilter-edit-consequences": "Tindakan sing dijikot dong cocog",
"abusefilter-edit-action-warn": "Urubna tindakan kiye seuwise ngaweh peringatan maring panganggo",
"abusefilter-edit-action-disallow": "Alangi panganggo ben aja nglakokna tindakan sing ngragukna",
- "abusefilter-edit-action-flag": "Tengeri suntingan nang log planggaran",
"abusefilter-edit-warn-other": "Pesen liyane",
"abusefilter-edit-builder-op-arithmetic-addition": "Panambahan (+)",
"abusefilter-edit-builder-op-arithmetic-subtraction": "Sudan (-)",
@@ -135,14 +130,14 @@
"abusefilter-edit-builder-op-bool-and": "Lan (&)",
"abusefilter-edit-builder-op-bool-or": "Utawa (|)",
"abusefilter-edit-builder-group-funcs": "Fungsine",
- "abusefilter-edit-builder-vars-article-id": "ID kaca",
- "abusefilter-edit-builder-vars-article-ns": "Bilikjeneng kaca",
- "abusefilter-edit-builder-vars-article-text": "Judhul kaca (ora nganggo bilikjeneng)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Judhul kaca jangkep",
+ "abusefilter-edit-builder-vars-page-id": "ID kaca",
+ "abusefilter-edit-builder-vars-page-ns": "Bilikjeneng kaca",
+ "abusefilter-edit-builder-vars-page-title": "Judhul kaca (ora nganggo bilikjeneng)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Judhul kaca jangkep",
"abusefilter-edit-builder-vars-movedfrom-id": "ID kaca sekang pamindhahan kaca sumber",
"abusefilter-edit-builder-vars-movedfrom-ns": "Bilikjeneng sekang pamindhahan kaca sumber",
- "abusefilter-edit-builder-vars-movedfrom-text": "Judhul sekang pamindhahan kaca sumber",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Judhul kumplit sekang pamindhahan kaca sumber",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Judhul sekang pamindhahan kaca sumber",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Judhul kumplit sekang pamindhahan kaca sumber",
"abusefilter-edit-builder-vars-movedto-id": "ID kaca sekang kaca papan patujon pamidhahan",
"abusefilter-history-user": "Panganggo",
"abusefilter-history-public": "Katrangan saringan publik",
@@ -181,7 +176,6 @@
"abusefilter-topnav-import": "Impor saringan",
"abusefilter-log-name": "Log Saringan Planggaran",
"abusefilter-log-header": "Log kiye nidokna ringkesan owahan sing degawe ming saringan.\nKanggo rincian sakumplite, deleng [[Special:AbuseFilter/history|daptar]] owah-owahan saringan sing anyar.",
- "abusefilter-log-entry-modify": "Ngowaih $1 ($2)",
"abusefilter-log-noresults": "Ora aba asuke",
"abusefilter-diff-title": "Prabedhan antar versi",
"abusefilter-diff-item": "Barang",
diff --git a/AbuseFilter/i18n/mg.json b/AbuseFilter/i18n/mg.json
index f45ad915..917c31c9 100644
--- a/AbuseFilter/i18n/mg.json
+++ b/AbuseFilter/i18n/mg.json
@@ -11,6 +11,7 @@
"right-abusefilter-log": "Hijery ny tatitry ny abuse filter",
"right-abusefilter-log-detail": "Hijery ny antsipirihan'ny iditry ny Abuse filter",
"right-abusefilter-private": "Hijery ny fampahalalàna tsy sarababem-bahoaka ao amin'ny Abuse filter",
+ "right-abusefilter-private-log": "Mijery ny antsipirihany tsiambaratelon'ny laogim-pamakian'i AbuseFilter",
"right-abusefilter-revert": "Hamafa ny fanovana nataon'ny abuse filter nofidianao",
"right-abusefilter-view-private": "Hijery ny abuse filter voamarika ho tsy sarababem-bahoaka",
"right-abusefilter-hide-log": "Manitrika ny iditra ao amin'ny tatitry ny fanararaotana",
@@ -21,11 +22,13 @@
"action-abusefilter-log": "hijery ny tatitry ny abuse filter",
"action-abusefilter-log-detail": "mijery ny antsipirihan'ny iditra ao amin'ny tatitry ny fanararaotana",
"action-abusefilter-private": "Hijery ny fampahalalàna tsy sarababem-bahoaka ao amin'ny tatitry ny fanararaotana",
+ "action-abusefilter-private-log": "Hijery ny antsipirihany tsiambaratelon'ny laogim-pamakian'i AbuseFilter",
"action-abusefilter-revert": "mamafa ny fanovana araka ny filitra mpanakana fanararaotana nofidiana",
"abusefilter-log": "Laogin'ny sivana manakam-panararaotana",
"abusefilter-log-search-user": "Mpikambana :",
"abusefilter-log-search-title": "Lohateny:",
"abusefilter-log-search-wiki": "Wiki :",
+ "abusefilter-log-search-action-taken-any": "Na inona na inona",
"abusefilter-log-search-submit": "Tadiavo",
"abusefilter-log-detailedentry-global": "sivana eran-tontolo $1",
"abusefilter-log-detailedentry-local": "sivana $1",
@@ -35,13 +38,17 @@
"abusefilter-log-details-val": "Sanda",
"abusefilter-log-details-private": "Fampahalalàna tsy sarababem-bahoaka",
"abusefilter-log-details-ip": "Adiresy IP nihaviana",
+ "abusefilter-log-details-checkuser": "Hanamarina ny mpikambana",
"abusefilter-log-noactions": "tsy misy",
"abusefilter-log-details-diff": "Fiovana natao tao amin'ilay fanovana",
"abusefilter-log-linkoncontribs": "laogiim-panararaotana",
"abusefilter-log-hidden": "(iditra nasitrika)",
+ "abusefilter-log-hide-legend": "Hanafina ny iditra anaty laogy",
+ "abusefilter-log-hide-id": "Mpamantatra ny iditry ny laogy:",
+ "abusefilter-log-hide-hidden": "Hanafina ity iditra ity amin'ny mason'ny vahoaka",
"abusefilter-log-hide-reason": "Antony :",
- "abusefilter-logentry-suppress": "nanitrika [ny] [[$1]]",
- "abusefilter-logentry-unsuppress": "nanala ny fanitrihana [an'i] [[$1]]",
+ "abusefilter-log-hide-forbidden": "Tsy manana zo hanafina ny laogim-panararaotana ianao.",
+ "abusefilterprivatedetails-log-name": "Antsipirihany tsiambaratelon'ny laogim-pamakian'i AbuseFilter",
"abusefilter-list": "Sivana rehetra",
"abusefilter-list-id": "Laharan'ny sivana",
"abusefilter-list-status": "Sata",
@@ -72,7 +79,6 @@
"abusefilter-list-options-scope-local": "Fitsipika an-toerana ihany",
"abusefilter-list-options-scope-global": "Fitsipika eran-tontolo ihany",
"abusefilter-list-options-scope-all": "Fitsipika an-toerana sy eran-tontolo",
- "abusefilter-list-options-disabled": "Sivana tsy miasa:",
"abusefilter-list-options-hidedisabled": "Hanafina ny sivana tsy miasa",
"abusefilter-list-options-submit": "Vaozina",
"abusefilter-tools-submitexpr": "Lanjalanjaina",
@@ -110,11 +116,5 @@
"abusefilter-edit-builder-vars-newsize": "Habem-pejy vaovao",
"abusefilter-edit-builder-vars-oldsize": "Habem-pejy taloha",
"abusefilter-history-global": "Eran-tontolo",
- "abusefilter-test-shownegative": "Aseho ny fiovana tsy miady amin'ny sivana",
- "apihelp-query+abusefilters-description": "Aseho ny antsipirihan'ny sivana manohi-panararaotana",
- "apihelp-query+abusefilters-param-show": "Ny sivana miady amin'ny safidy ihany no aseho",
- "apihelp-query+abusefilters-example-2": "Antsipirihany sasantsasany amin'ny sivana ihany no aseho",
- "apihelp-query+abuselog-param-user": "Iditra nataon'ny mpikambana na adiresy IP nofaritana ihany no aseho.",
- "apihelp-query+abuselog-param-filter": "Iditra tratran'ny IDn-tsivana ihany no aseho.",
- "apihelp-query+abuselog-example-1": "Aseho ireo iditra vao haingana"
+ "abusefilter-test-shownegative": "Aseho ny fiovana tsy miady amin'ny sivana"
}
diff --git a/AbuseFilter/i18n/min.json b/AbuseFilter/i18n/min.json
index e4345841..0c00175d 100644
--- a/AbuseFilter/i18n/min.json
+++ b/AbuseFilter/i18n/min.json
@@ -70,7 +70,6 @@
"abusefilter-edit-enabled": "Aktipan sariang ko",
"abusefilter-edit-lastmod-text": "$1 sampai $2",
"abusefilter-edit-consequences": "Nan dibuek jikok tapek",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|detik}}",
"abusefilter-edit-throttle-groups": "Kalompok pambateh jo:\n:''(ciek per barih, pisahan jo koma)''",
"abusefilter-edit-main": "Parameter sariang",
"abusefilter-edit-done-subtitle": "Sariang lah disuntiang",
@@ -109,7 +108,6 @@
"abusefilter-topnav-import": "Impor panyariang",
"abusefilter-log-name": "Log panyariang panyalahgunoan",
"abusefilter-log-header": "Log iko barisi ringkasan parubahan nan dilakukan pado panyariang.\nUntuak katarangan langkok, caliak [[Special:AbuseFilter/history|daftar]] parubahan panyariang tabaru.",
- "abusefilter-log-entry-modify": "pangubahan $1 ($2)",
"abusefilter-log-noresults": "Indak ado hasil",
"abusefilter-diff-title": "Pabedoan antaro versi",
"abusefilter-diff-item": "Item",
diff --git a/AbuseFilter/i18n/mk.json b/AbuseFilter/i18n/mk.json
index f7790e8a..919022f9 100644
--- a/AbuseFilter/i18n/mk.json
+++ b/AbuseFilter/i18n/mk.json
@@ -4,14 +4,15 @@
"Bjankuloski06",
"Brest",
"Matma Rex",
- "Srdjan m"
+ "Srdjan m",
+ "Vlad5250"
]
},
"abusefilter-desc": "Извршува автоматски хевристички филтрирања во уредувањата",
"abusefilter": "Прилагодувања на филтерот на злоупотреби",
"abuselog": "Дневник на злоупотреби",
"abusefilter-intro": "Добре дојдовте на посредникот за раководење со Филтерот за злоупотреби.\nФилтерот за злоупотреби е автоматизиран програмски механизам за примена на автоматска хевристика врз сите дејства.\nОвој посредник дава список на утврдени филтри, и истиот овозможува нивно менување.",
- "abusefilter-mustbeeditor": "Од безбедносни причини, овој посредник можат да го користат само корисници со право на менување филтри за злоупотреба.",
+ "abusefilter-mustviewprivateoredit": "Од безбедносни причини, овој посредник можат да го користат само корисници со право на гледање лични филтри за злоупотреба или измена на филтри.",
"abusefilter-warning": "'''Предупредување:''' Ова дејство е автоматски утврдено како штетно.\nНеконструктивните дејства ќе бидат набргу отстранети,\nа глупавите или упорни некоструктивни уредувања ќе доведат до блокирање на вашата сметка или IP-адреса.\nАко сметате дека оваа постапка е конструктивна, можете повторно да ја поднесете за да ја потврдите.\nЕве краток опис на правилото за злоупотреби според кое беше утврдено дека сте направиле престап: $1",
"abusefilter-disallowed": "Ова дејство е автоматски утврдено како штетно, и затоа не е дозволено.\nАко сметате дека вашето уредување беше конструктивно, обратете се администратор, и кажете му што впрочем сте сакале да направите.\nЕве краток опис на правилото за злоупотреби според кое беше утврдено дека сте направиле престап: $1",
"abusefilter-blocked-display": "Ова дејство е автоматски утврдено како штетно,\nи забрането Ви е да го извршите.\nПокрај ова, за да се заштити {{SITENAME}}, вашата корисничка сметка и сите поврзани IP-адреси се блокирани од уредување.\nАко оваа реакција се должи на некаква грешка, обратете се на администратор.\nЕве краток опис на правилото за злоупотреби според кое беше утврдено дека сте направиле престап: $1",
@@ -26,6 +27,7 @@
"right-abusefilter-log": "Преглед на дневникот на злоупотреби",
"right-abusefilter-log-detail": "Прегледување на подробности во записите од дневникот на злоупотреби",
"right-abusefilter-private": "Прегледување на лични податоци во дневникот на злоупотреби",
+ "right-abusefilter-private-log": "Преглед на пристап до лични дневнички податоци од Филтерот за злоупотреби",
"right-abusefilter-modify-restricted": "Менување на филтри за злоупотреби со ограничени можности за дејствување",
"right-abusefilter-revert": "Отповикување на сите промени на даден филтер за злоупотреби",
"right-abusefilter-view-private": "Прегледување на филтри за злоупотреби означени како лични",
@@ -38,6 +40,7 @@
"action-abusefilter-log": "прегледување на дневникот за злоупотреби",
"action-abusefilter-log-detail": "прегледување на подробности од записите во дневникот на злоупотреби",
"action-abusefilter-private": "прегледување на лични податоци во дневникот на злоупотреби",
+ "action-abusefilter-private-log": "преглед на пристап до лични дневнички податоци од Филтерот за злоупотреби",
"action-abusefilter-modify-restricted": "менување на филтри за злоупотреби со ограничени можности за дејствување",
"action-abusefilter-revert": "отповикување на сите промени извршени од даден филтер за злоупотреби",
"action-abusefilter-view-private": "прегледување на филтри за злоупотреби означени како лични",
@@ -49,10 +52,19 @@
"abusefilter-log-search-filter": "Филтерски назнаки (одделете со исправени црти):",
"abusefilter-log-search-title": "Наслов:",
"abusefilter-log-search-wiki": "Вики:",
+ "abusefilter-log-search-impact": "Последица:",
+ "abusefilter-log-search-impact-all": "Сите дејства",
+ "abusefilter-log-search-impact-saved": "Само зачувани промени",
+ "abusefilter-log-search-impact-not-saved": "Без зачувани промени",
"abusefilter-log-search-entries-label": "Видливост:",
"abusefilter-log-search-entries-all": "Сите ставки",
"abusefilter-log-search-entries-hidden": "Само скриени ставки",
"abusefilter-log-search-entries-visible": "Само видливи ставки",
+ "abusefilter-log-search-action-label": "Поттикнувачко дејство:",
+ "abusefilter-log-search-action-other": "Друго",
+ "abusefilter-log-search-action-any": "Било кое",
+ "abusefilter-log-search-action-taken-label": "Преземено дејство:",
+ "abusefilter-log-search-action-taken-any": "било кое",
"abusefilter-log-search-submit": "Барај",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|предизвика}} филтер на злоупотреби, {{GENDER:$8|извршувајќи}} го дејството „$3“ на $4.\nПреземени мерки: $5;\nОпис од филтерот: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|предизвика}} филтер на злоупотреби, {{GENDER:$8|извршувајќи}} го дејството „$3“ на $4.\nПреземени мерки: $5;\nОпис од филтерот: $6 ($7)",
@@ -66,29 +78,42 @@
"abusefilter-log-details-var": "Променлива",
"abusefilter-log-details-val": "Вредност",
"abusefilter-log-details-vars": "Параметри на дејството",
- "abusefilter-log-details-private": "Лични податоци",
+ "abusefilter-log-details-private": "Лични дневнички податоци",
"abusefilter-log-details-ip": "Исходна IP-адреса",
+ "abusefilter-log-details-checkuser": "Провери корисник",
"abusefilter-log-noactions": "нема",
"abusefilter-log-details-diff": "Направени промени при уредувањето",
"abusefilter-log-linkoncontribs": "дневник на злоупотреби",
"abusefilter-log-linkoncontribs-text": "Дневник на злоупотреби за {{GENDER:$1|овој корисник|оваа корисничка}}",
+ "abusefilter-log-linkonhistory": "погл. дневник на злоупотреби",
+ "abusefilter-log-linkonhistory-text": "Преглед на дневникот на злоупотреби за страницава",
"abusefilter-log-hidden": "(скриен запис)",
"abusefilter-log-hidden-implicit": "(скриено бидејќи преработката е избришана)",
"abusefilter-log-cannot-see-details": "Немате дозвола да гледате подробности за записот.",
+ "abusefilter-log-cannot-see-private-details": "Немате дозвола да гледате лични дневнички податоци во ставкава.",
"abusefilter-log-nonexistent": "Не постои ставка со укажаната назнака.",
"abusefilter-log-details-hidden": "Не можете да ги прегледувате подробностите на овој запис бидејќи тој е сокриен за јавноста.",
+ "abusefilter-log-details-hidden-implicit": "Не можете да ги прегледувате подробностите на овој запис бидејќи неговата преработка е сокриена за јавноста.",
"abusefilter-log-private-not-included": "Една или повеќе од филтерските назнаки што ги укажавте се лични. Бидејќи не ви е дозволено да ги разгледувате подробностите за личните филтри, овие филтри не се употребени при пребарувањето.",
"abusefilter-log-hide-legend": "Скриј ставка",
"abusefilter-log-hide-id": "ID на записот:",
"abusefilter-log-hide-hidden": "Скриј го записов за јавноста",
"abusefilter-log-hide-reason": "Причина:",
+ "abusefilter-log-hide-reason-other": "Друга/дополнителна причина:",
"abusefilter-log-hide-forbidden": "Немате дозвола да криете записи во дневникот на злоупотреби.",
- "abusefilter-logentry-suppress": "го притаи „[[$1]]“",
- "abusefilter-logentry-unsuppress": "откриено „[[$1]]“",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|го скри}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|го откри}} $3",
"logentry-abusefilter-hit": "$1 го {{GENDER:$2|предизвика}} $4, {{GENDER:$2|извршувајќи}} го дејството „$5“ на $3. Извршени постапки: $6 ($7)",
+ "log-action-filter-abusefilter": "Вид промена во филтерот:",
+ "log-action-filter-abusefilter-create": "Создавање на нов филтер",
+ "log-action-filter-abusefilter-modify": "Измена во филтер",
+ "log-action-filter-suppress-abuselog": "Потиснување на дневникот на злоупотреби",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|пристапи}} до личните податоци за $3",
+ "abusefilterprivatedetails-log-name": "Дневник на пристап до лични податоци од Филтерот за злоупотреби",
"abusefilter-management": "Раководење со филтерот за злоупотреби",
"abusefilter-list": "Сите филтри",
"abusefilter-list-id": "Назнака на филтерот",
+ "abusefilter-list-pattern": "Мостра",
"abusefilter-list-status": "Статус",
"abusefilter-list-public": "Опис достапен за јавноста",
"abusefilter-list-consequences": "Последици",
@@ -104,6 +129,7 @@
"abusefilter-enabled": "Вклучен",
"abusefilter-deleted": "Избришан",
"abusefilter-disabled": "Исклучен",
+ "abusefilter-throttled": "наметнато",
"abusefilter-hitcount": "$1 {{PLURAL:$1|погодок|погодоци}}",
"abusefilter-new": "Создај нов филтер",
"abusefilter-return": "Назад кон раководењето со филтри",
@@ -117,8 +143,16 @@
"abusefilter-list-options-scope-local": "Само месни правила",
"abusefilter-list-options-scope-global": "Само глобални правила",
"abusefilter-list-options-scope-all": "Месни и глобални правила",
- "abusefilter-list-options-disabled": "Исклучени филтери:",
+ "abusefilter-list-options-further-options": "Други поставки:",
"abusefilter-list-options-hidedisabled": "Скриј исклучени филтери",
+ "abusefilter-list-options-hideprivate": "Скриј приватни филтри",
+ "abusefilter-list-options-searchfield": "Пребарајте во склад со правилата:",
+ "abusefilter-list-options-searchpattern": "Вметни мостра",
+ "abusefilter-list-options-searchoptions": "Режим на пребарување:",
+ "abusefilter-list-options-search-like": "Просто пребарување",
+ "abusefilter-list-options-search-rlike": "Регуларен израз",
+ "abusefilter-list-options-search-irlike": "Големинскоразликувачки регуларен израз",
+ "abusefilter-list-regexerror": "Се појави грешка при пребарувањето: Грешка во синтаксата на регуларниот израз.",
"abusefilter-list-options-submit": "Поднови",
"abusefilter-tools-text": "Еве некои алатки кои можат да помогнат со форматирање и отстранување грешки во филтрите за злоупотреби.",
"abusefilter-tools-expr": "Проверка на изрази",
@@ -133,6 +167,7 @@
"abusefilter-edit": "Уредување на филтер за злоупотреби",
"abusefilter-edit-subtitle": "Уредување на филтерот $1",
"abusefilter-edit-subtitle-new": "Создавање на филтер",
+ "abusefilter-edit-token-not-match": "Уредувањето не е зачувано! Зачувајте го повторно.",
"abusefilter-edit-oldwarning": "<strong>Уредувате стара верзија на овој филтер.\nНаведените статистики се однесуваат на најновата верзија на филтерот.\nАко ги зачувате направените промени, ќе ги поклопите сите промени направени од преработката која ја уредувате наваму.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Назад кон историјата на овој филтер]].",
"abusefilter-edit-status-label": "Статистики:",
"abusefilter-edit-status": "Од {{PLURAL:$1|последното дејство|последните $1 дејства}}, овој филтер соодветствува на $2 ($3%).",
@@ -141,7 +176,9 @@
"abusefilter-edit-new": "Нов филтер",
"abusefilter-edit-save": "Зачувај филтер",
"abusefilter-edit-id": "Назнака на филтерот:",
+ "abusefilter-edit-switch-editor": "Смени уредник",
"abusefilter-edit-description": "Опис:\n:''(јавно видлив)''",
+ "abusefilter-edit-field-description": "опис",
"abusefilter-edit-group": "Филтерска група:",
"abusefilter-edit-flags": "Знаменца:",
"abusefilter-edit-enabled": "Овозможи го овој филтер",
@@ -149,6 +186,7 @@
"abusefilter-edit-hidden": "Скриј ги за јавноста информациите за овој филтер",
"abusefilter-edit-global": "Глобален филтер",
"abusefilter-edit-rules": "Услови:",
+ "abusefilter-edit-field-conditions": "услови",
"abusefilter-edit-notes": "Белешки:",
"abusefilter-edit-lastmod": "Неодамна изменети филтри:",
"abusefilter-edit-lastmod-text": "$1 од $2",
@@ -159,25 +197,48 @@
"abusefilter-edit-action-blockautopromote": "Одземи му го автопотврдениот статус на корисникот",
"abusefilter-edit-action-degroup": "Отстрани го корисникот од сите привилегирани групи",
"abusefilter-edit-action-block": "Блокирај го корисникот и/или IP-адресата од уредување",
+ "abusefilter-edit-action-blocktalk": "Блокирај го корисникот и/или IP-адресата од уредување на сопствената разговорна страница",
"abusefilter-edit-action-throttle": "Повикувај дејства само ако ако корисникот пречекори граница на стапка",
- "abusefilter-edit-action-rangeblock": "Блокирај го опсегот /16 од којшто работи корисникот",
+ "abusefilter-edit-action-rangeblock": "Блокирај го соодветниот IP-опсег од којшто работи корисникот",
"abusefilter-edit-action-tag": "Означи го уредувањето за понатамошна проверка",
"abusefilter-edit-throttle-count": "Број на дозволени дејства:",
- "abusefilter-edit-throttle-period": "Временски период:",
- "abusefilter-edit-throttle-seconds": "{{PLURAL:$1|една секунда|$1 секунди}}",
- "abusefilter-edit-throttle-groups": "Истисок по групи:\n:''(еден по ред, комбинирање со запирки)''",
+ "abusefilter-edit-throttle-period": "Временски период (во секунди):",
+ "abusefilter-edit-throttle-groups": "Истисок по групи:",
+ "abusefilter-edit-throttle-ip": "IP-адреси",
+ "abusefilter-edit-throttle-user": "Корисничка сметка",
+ "abusefilter-edit-throttle-range": "/16-опсег",
+ "abusefilter-edit-throttle-creationdate": "Време на послужувачот при создавањето на сметката",
+ "abusefilter-edit-throttle-editcount": "Број на уредувања",
+ "abusefilter-edit-throttle-site": "Целото мреж. место",
+ "abusefilter-edit-throttle-page": "Страница",
+ "abusefilter-throttle-details": "Дозволи $1 {{PLURAL:$1|дејство|дејства}} секои $2 {{PLURAL:$2|секунда|секунди}}, групно наметнување од: $3",
"abusefilter-edit-warn-message": "Системска порака за предупредувањето:",
"abusefilter-edit-warn-other": "Друга порака",
- "abusefilter-edit-warn-other-label": "Име на страница на друга порака:\n:''(без претставката MediaWiki)''",
+ "abusefilter-edit-warn-other-label": "Име на страница на друга порака:\n:''(без претставката „MediaWiki“)''",
"abusefilter-edit-warn-actions": "Дејства:",
- "abusefilter-edit-warn-preview": "Прегледај избрана порака",
+ "abusefilter-edit-warn-preview": "Прикажи/сокриј преглед на избраната порака",
"abusefilter-edit-warn-edit": "Создај/Уреди избрана порака",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Ознаки]] за применување (една по ред):",
+ "abusefilter-edit-disallow-message": "Системска порака за забраната:",
+ "abusefilter-edit-disallow-other": "Друга порака",
+ "abusefilter-edit-disallow-other-label": "Име на страница на друга порака:\n:''(без претставката „MediaWiki“)''",
+ "abusefilter-edit-disallow-actions": "Дејства:",
+ "abusefilter-edit-disallow-preview": "Прикажи/скриј преглед на избраната порака",
+ "abusefilter-edit-disallow-edit": "Создај/уреди избрана порака",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Ознаки]] за примена:",
+ "abusefilter-edit-tag-placeholder": "Додај ознаки (една по една, одделени со запирки)",
+ "abusefilter-edit-tag-hidden-placeholder": "Додај ознаки (одделени со запирки)",
+ "abusefilter-edit-block-anon-durations": "Траење на блокот за анонимни корисници:",
+ "abusefilter-edit-block-user-durations": "Траење на блокот за регистрирани корисници:",
+ "abusefilter-block-anon": "Блокирај анонимни корисници",
+ "abusefilter-block-user": "блокирај регистрирани корисници",
+ "abusefilter-block-talk": "разговорната страница е блокирана",
"abusefilter-edit-denied": "Не можете да ги гледате подробностите на овој филтер бидејќи е скриен за јавноста.",
"abusefilter-edit-main": "Параметри на филтерот",
"abusefilter-edit-done-subtitle": "Филтерот е уреден",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Вашите измени]] во [[Special:AbuseFilter/$1|филтерот $3]] се зачувани.",
"abusefilter-edit-badsyntax": "Во назначениот филтер има синтаксна грешка.\nИзводот од расчленувачот е: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Следниве полиња мора да се пополнат: $1",
+ "abusefilter-edit-deleting-enabled": "Не можете да означите активен филтер како избришан.",
"abusefilter-edit-restricted": "Не можете да го уредувате овој филтер бидејќи содржи еден или повеќе ограничени дејствија.\nПобарајте овие промени за вас да ги направи некој корисник со дозвола за додавање на ограничени дејства.",
"abusefilter-edit-viewhistory": "Преглед на историјата на филтерот",
"abusefilter-edit-history": "Историја:",
@@ -189,7 +250,7 @@
"abusefilter-edit-export": "Извези го филтеров во друго вики",
"abusefilter-edit-syntaxok": "Не пронајдов синтаксни грешки.",
"abusefilter-edit-syntaxerr": "Пронајдена е синтаксна грешка: $1",
- "abusefilter-edit-bad-tags": "Еден или повеќе назначени ознаки се неважечки.\nОзнаките треба да бидат кратки, и не треба да содржат псоебни знаци, и не треба да се резервирани од друг програм. Изберете друг назив на ознаката",
+ "abusefilter-edit-bad-tags": "Еден или повеќе назначени ознаки се неважечки.\nОзнаките треба да бидат кратки, не смеат да содржат псоебни знаци, и не не смеат да се резервирани од друг програм. Изберете друг назив на ознаката",
"abusefilter-edit-notallowed": "Не ви е дозволено да создавате или уредувате филтри за злоупотреби",
"abusefilter-edit-notallowed-global": "Не ви е дозволено да создавате или уредувате глобални филтри за злоупотреби",
"abusefilter-edit-notallowed-global-custom-msg": "Глобалните филтри не поддржуваат кориснички-зададени предупредувања",
@@ -202,8 +263,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Модул (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Степен (**)",
"abusefilter-edit-builder-group-op-comparison": "Оператори за споредба",
- "abusefilter-edit-builder-op-comparison-equal": "Еднакво со (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Не е еднакво со (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Вредност еднаква на (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Вредност и тип еднакви на (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Вредноста не е еднаква на (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Вредноста и типот не се еднакви на (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Помало од (<)",
"abusefilter-edit-builder-op-comparison-gt": "Поголемо од (>)",
"abusefilter-edit-builder-op-comparison-lte": "Помало или еднакво со (<=)",
@@ -227,23 +290,30 @@
"abusefilter-edit-builder-funcs-lcase": "Со мали букви (lcase)",
"abusefilter-edit-builder-funcs-ucase": "Со големи букви (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Нормализирај ги знаците подлежни на забуна (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Нормализирај и пребарај низа со повеќе поднизи во OR-режим (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Нормализирај и пребарај низа со повеќе поднизи во режимот И (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Отстрани повторени знаци (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Посебни знаци / вкупно знаци (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Нормализирај (norm)",
"abusefilter-edit-builder-funcs-count": "Број на јавувања на низата X во низата Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Број на јавувања на регуларнот израз X во низата Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Строј совпаѓања во регуларните изрази во рамките на текстот за секоја зафатна група (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Отстрани празни простори (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Отстрани посебни знаци (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Проверка дали IP-адресата е во опсегот (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Пребарај ја низата за повеќе поднизи (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Пребарај повеќе поднизи во низата во режимот ИЛИ (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Пребарај повеќе поднизи во низата во режим И. (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Провери дали даден аргумент е еднаков (===) на некој од следниве аргументи (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Подниза (substr)",
"abusefilter-edit-builder-funcs-strpos": "Позиција на поднизата во низата (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Замени ја поднизата со низа (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Извод на низа како дословна во рег. изрази (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Постави променлива (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Нормализирај HTML-единици во уникодни знаци (санитаризација)",
"abusefilter-edit-builder-group-vars": "Променливи",
"abusefilter-edit-builder-vars-accountname": "Име на сметката (при нејзиното создавање)",
"abusefilter-edit-builder-vars-timestamp": "Unix-датум и време на промената",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Време и датум на дневникот",
"abusefilter-edit-builder-vars-action": "Дејство",
"abusefilter-edit-builder-vars-addedlines": "Додадени редови во уредувањето",
"abusefilter-edit-builder-vars-delta": "Големинска промена со уредувањето",
@@ -254,19 +324,21 @@
"abusefilter-edit-builder-vars-new-content-model": "Нов содржински модел",
"abusefilter-edit-builder-vars-removedlines": "Редови отстранети во уредувањето",
"abusefilter-edit-builder-vars-summary": "Опис/причина на уредувањето",
- "abusefilter-edit-builder-vars-article-id": "Назнака на страницата",
- "abusefilter-edit-builder-vars-article-ns": "Именски простор на страницата",
- "abusefilter-edit-builder-vars-article-text": "Наслов на страницата (без именски простор)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Полн наслов на страницата",
- "abusefilter-edit-builder-vars-article-views": "Посети",
+ "abusefilter-edit-builder-vars-page-id": "Назнака на страницата",
+ "abusefilter-edit-builder-vars-page-ns": "Именски простор на страницата",
+ "abusefilter-edit-builder-vars-page-title": "Наслов на страницата (без именски простор)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Полн наслов на страницата",
+ "abusefilter-edit-builder-vars-page-age": "Старост на страницата (во секунди)",
"abusefilter-edit-builder-vars-movedfrom-id": "Назнака на страницата за преместување",
"abusefilter-edit-builder-vars-movedfrom-ns": "Именски простор на преименуваната страница",
- "abusefilter-edit-builder-vars-movedfrom-text": "Име на преименуваната страница",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Полн наслов на преместената страница",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Име на преименуваната страница",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Полн наслов на преместената страница",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Старост на изворната страница на преместувањето (во секунди)",
"abusefilter-edit-builder-vars-movedto-id": "Назнака на целната страница за преместување",
"abusefilter-edit-builder-vars-movedto-ns": "Именски простор на целната страница за преместување",
- "abusefilter-edit-builder-vars-movedto-text": "Наслов на целната страница за преместување",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Полн наслов на целната страница за преместување",
+ "abusefilter-edit-builder-vars-movedto-title": "Наслов на целната страница за преместување",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Полн наслов на целната страница за преместување",
+ "abusefilter-edit-builder-vars-movedto-age": "Старост на целната страница на преместувањето (во секунди)",
"abusefilter-edit-builder-vars-user-editcount": "Уреди број на уредувања од корисникот",
"abusefilter-edit-builder-vars-user-age": "Старост на корисничката сметка",
"abusefilter-edit-builder-vars-user-name": "Име на корисничката сметка",
@@ -276,23 +348,35 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "Време кога била потврдена е-поштата",
"abusefilter-edit-builder-vars-recent-contributors": "Последните десет уредници на страницата",
"abusefilter-edit-builder-vars-first-contributor": "Прв уредник на страницата",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Последните десет уредници на изворната преместена страница",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Прв учесник во изворната преместена страница",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Последните десет учесници во целната страница",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Прв учесник во целната страница",
"abusefilter-edit-builder-vars-all-links": "Сите надворешни врски во новиот текст",
"abusefilter-edit-builder-vars-added-links": "Сите надворешни врски додадени во уредувањето",
"abusefilter-edit-builder-vars-removed-links": "Сите надворешни врски отстранети во уредувањето",
- "abusefilter-edit-builder-vars-old-text": "Стар викитекст, пред уредувањето",
+ "abusefilter-edit-builder-vars-old-text": "Викитекст на старата страница, пред уредувањето (вон употреба)",
"abusefilter-edit-builder-vars-new-text": "Нов викитекст по уредувањето",
"abusefilter-edit-builder-vars-new-pst": "Викитекст за нова страница, претворен пред зачувување",
"abusefilter-edit-builder-vars-diff-pst": "Обединети разлики во уредувањето, претворени пред зачувување",
"abusefilter-edit-builder-vars-addedlines-pst": "Додадени редови во уредувањето, претворени пред зачувување",
"abusefilter-edit-builder-vars-new-text-stripped": "Нов текст на страницата, исчистен од секакви ознаки",
- "abusefilter-edit-builder-vars-new-html": "Парсиран HTML-извор на новата преработка",
+ "abusefilter-edit-builder-vars-new-html": "Расчленет HTML-извор на новата преработка",
"abusefilter-edit-builder-vars-restrictions-edit": "Ниво на заштита на страницата од уредувања",
"abusefilter-edit-builder-vars-restrictions-move": "Ниво на заштита од преместување на страницата",
"abusefilter-edit-builder-vars-restrictions-create": "Заштита за создавање на страницата",
"abusefilter-edit-builder-vars-restrictions-upload": "Заштита за подигање на податотеката",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Степен на заштита на преместената страница",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Степен на заштита на изворната страница",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Заштита од создавање на изворната преместена страница",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Заштита од подигање на изворната преместена страница",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Заштита од уредување на целната страница",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Заштита од преместување на целната страница",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Заштита од создавање на целната страница",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Заштита од подигање на целната страница",
"abusefilter-edit-builder-vars-old-text-stripped": "Текст на старата страница, со отстранети ознаки",
"abusefilter-edit-builder-vars-old-links": "Врски на оваа страница, пред уредувањето",
- "abusefilter-edit-builder-vars-old-html": "Викитекст на старата страница, парсиран во HTML",
+ "abusefilter-edit-builder-vars-old-html": "Викитекст на старата страница, расчленет во HTML (вон употреба)",
"abusefilter-edit-builder-vars-minor-edit": "Дали уредувањето е обележано како ситно",
"abusefilter-edit-builder-vars-file-sha1": "SHA1-тараба на содржината на податотеката",
"abusefilter-edit-builder-vars-file-size": "Големина на податотеката во бајти",
@@ -312,13 +396,14 @@
"abusefilter-history-public": "Јавен опис на филтерот",
"abusefilter-history-flags": "Ознаки",
"abusefilter-history-filter": "Правило на филтерот",
- "abusefilter-history-comments": "Коментари",
+ "abusefilter-history-comments": "Прибелешки",
"abusefilter-history-actions": "Дејства",
"abusefilter-history-backedit": "Назад кон уредувањето на филтерот",
"abusefilter-history-deleted": "Избришано",
"abusefilter-history-filterid": "Филтер",
"abusefilter-history-select-legend": "Прецизирај го пребарувањето",
"abusefilter-history-select-user": "Корисник:",
+ "abusefilter-history-select-filter": "Назнака на филтерот:",
"abusefilter-history-select-submit": "Уточни",
"abusefilter-history-diff": "Промени",
"abusefilter-history-error-hidden": "Побараниот филтер е скриен, и затоа не можете да ја гледате неговата историја.",
@@ -329,14 +414,17 @@
"abusefilter-exception-unclosedstring": "Незатворена низа со почеток кај знакот $1.",
"abusefilter-exception-invalidoperator": "Неважечки оператор „$2“ кај знакот $1.",
"abusefilter-exception-unrecognisedtoken": "Нераспознаена шифра „$2“ кај знакот $1.",
- "abusefilter-exception-noparams": "Нема зададено параметри за функцијата „$2“ кај знакот $1.",
+ "abusefilter-exception-noparams": "Нема зададено параметри за функцијата „$2“ кај знакот $1 {{PLURAL:$3|Се очекуваше $3 аргумент|Се очекуваа $3 аргументи}}.",
"abusefilter-exception-dividebyzero": "Недозволен обид за делење на $2 со нула кај знакот $1.",
"abusefilter-exception-unrecognisedvar": "Нераспознаена променлива $2 кај знакот $1",
"abusefilter-exception-notenoughargs": "Нема доволно аргументи за функцијата $2 повикана кај знакот $1.\nСе {{PLURAL:$3|очекуваше $3 аргумент|очекуваа $3 аргументи}}, а {{PLURAL:$4|добиен е|добиени се}} $4",
- "abusefilter-exception-regexfailure": "Грешка во регуларниот израз „$3“ кај знакот $1: „$2“",
+ "abusefilter-exception-regexfailure": "Грешка во регуларниот израз „$2“ кај знакот $1.",
"abusefilter-exception-overridebuiltin": "Недозволено поклопување на вградена променлива „$2“ кај знакот $1.",
- "abusefilter-exception-outofbounds": "Барање за непостоечка ставка во списокот $2 (големина на списокот = $3) кај знакот $1.",
- "abusefilter-exception-notlist": "Барање на елемент од стројот за објект кој не е строј кај знакот $1.",
+ "abusefilter-exception-outofbounds": "Барање за непостоечка ставка во стројот $2 (големина на стројот = $3) кај знакот $1.",
+ "abusefilter-exception-notarray": "Барање на елемент од стројот за објект кој не е строј кај знакот $1.",
+ "abusefilter-exception-unclosedcomment": "Незатворена прибелешка кај знакот $1.",
+ "abusefilter-exception-invalidiprange": "Укажан неважечки IP-опсег „$2“ кај знакот $1.",
+ "abusefilter-exception-disabledvar": "Променливата $2 кај знакот $1 повеќе не се користи.",
"abusefilter-action-tag": "Ознака",
"abusefilter-action-throttle": "Стесни",
"abusefilter-action-warn": "Предупреди",
@@ -352,8 +440,9 @@
"abusefilter-revert-periodstart": "Почеток на периодот:",
"abusefilter-revert-periodend": "Крај на периодот:",
"abusefilter-revert-search": "Избор на дејства",
- "abusefilter-revert-filter": "Филтер:",
+ "abusefilter-revert-filter": "Назнака на филтерот:",
"abusefilter-revert-preview-intro": "Подолу се наведени постапките на филтерот за злоупотреби кои сега ќе бидат вратени.\nПроверете ги внимателно, па стиснете на „{{int:abusefilter-revert-confirm}}“ за да го потврдите избраното.",
+ "abusefilter-revert-confirm-legend": "Потврди го повратокот",
"abusefilter-revert-confirm": "Потврди",
"abusefilter-revert-success": "Ги вративте сите дејства извршени од филтерот за злоупотреби поради [[Special:AbuseFilter/$1|филтерот $2]].",
"abusefilter-revert-reason": "Автоматско отповикување на сите постапки на филтерот за злоупотреби поради филтерот $1.\nНаведена причина: $2",
@@ -365,12 +454,20 @@
"abusefilter-test-submit": "Испробај",
"abusefilter-test-load": "Вчитај",
"abusefilter-test-user": "Промени од корисникот:",
+ "abusefilter-test-nobots": "Скриј ботовски уредувања",
"abusefilter-test-period-start": "Промени направени потоа:",
"abusefilter-test-period-end": "Промени напаравени пред тоа:",
"abusefilter-test-page": "Направени промени во страницата:",
"abusefilter-test-shownegative": "Прикажи промени кои не се совпаѓаат со филтерот",
"abusefilter-test-syntaxerr": "Внесениот филтер содржи синтаксна грешка.\nЌе добиете целосно образложение ако стиснете на копчето „{{int:abusefilter-edit-check}}“.",
"abusefilter-test-badtitle": "Внесениот наслов на страницата е неважечки. Може да содржи еден или повеќе знаци што не се допуштени во наслови.",
+ "abusefilter-test-action": "Вид дејство:",
+ "abusefilter-test-search-type-all": "Сите дејства",
+ "abusefilter-test-search-type-edit": "Уредувања",
+ "abusefilter-test-search-type-move": "Преместувања",
+ "abusefilter-test-search-type-delete": "Бришења",
+ "abusefilter-test-search-type-upload": "Подигања",
+ "abusefilter-test-search-type-createaccount": "Создавања на сметки",
"abusefilter-changeslist-examine": "прегледај",
"abusefilter-examine": "Разгледување на поединечни промени",
"abusefilter-examine-intro": "Оваа страница служи за прегледување на променливите создадени од Филтерот за злоупотреби за поединечна промена, и нивно тестирање со филтри.",
@@ -397,6 +494,7 @@
"abusefilter-topnav-import": "Увези филтер",
"abusefilter-log-name": "Дневник на филтерот за злоупотреба",
"abusefilter-log-header": "Во овој дневник е прикажан преглед на промените направени во филтрите.\nЗа сите подробности, погледајте го [[Special:AbuseFilter/history|списокот]] на скорешни промени во филтрите.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|го создаде}} $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|го измени}} $4 ($5)",
"abusefilter-log-noresults": "Нема исход",
"abusefilter-diff-title": "Разлики помеѓу верзиите",
@@ -412,49 +510,16 @@
"abusefilter-import-submit": "Увези податоци",
"abusefilter-group-default": "По основно",
"abusefilter-http-error": "Се појави грешка во HTTP: $1.",
- "apihelp-abusefiltercheckmatch-description": "Проверете дали филтер за злоупотреби ќе најде збир променливи. Овој настан на филтерот го заведува корисникот.\n\nСе бара vars, rcid или logid (може да се употреби само едно).",
- "apihelp-abusefiltercheckmatch-summary": "Проверете дали филтерот пронаоѓа даден збир променливи, дејство заведено од уредник.",
- "apihelp-abusefiltercheckmatch-extended-description": "Се бара vars, rcid иили logid (може да се употреби само едно од нив).",
- "apihelp-abusefiltercheckmatch-param-filter": "Целосниот текст што го проверува филтерот.",
- "apihelp-abusefiltercheckmatch-param-vars": "Низа од променливи шифрирани во JSON што треба да се проверат.",
- "apihelp-abusefiltercheckmatch-param-rcid": "Назнака на скорешната промена што треба да се провери.",
- "apihelp-abusefiltercheckmatch-param-logid": "Назнака на запис од дневникот на филтерот што треба да се провери.",
- "apihelp-abusefiltercheckmatch-example-1": "Провери дали скорешната промена со назнака 15 ќе биде пронајдена од прост филтер.",
- "apihelp-abusefilterchecksyntax-description": "Провери ја синтаксата на филтер за злоупотреби.",
- "apihelp-abusefilterchecksyntax-summary": "Провери ја синтаксата на даден филтер за слоупотреби.",
- "apihelp-abusefilterchecksyntax-param-filter": "Целосниот текст чија синтакса ја проверува филтерот.",
- "apihelp-abusefilterchecksyntax-example-1": "Провери синтакса на важечки филтер",
- "apihelp-abusefilterchecksyntax-example-2": "Провери синтакса на неважечки филтер",
- "apihelp-abusefilterevalexpression-description": "Оценува израз во Филтерот за злоупотреби.",
- "apihelp-abusefilterevalexpression-summary": "Оценува израз во Филтерот за злоупотреби.",
- "apihelp-abusefilterevalexpression-param-expression": "Изразот што треба да се оцени.",
- "apihelp-abusefilterevalexpression-example-1": "Оцени прост израз",
- "apihelp-abusefilterunblockautopromote-description": "Отстранува блок на автоунапредување на даден корисник, добиен поради последица од филтер за злоупотреби.",
- "apihelp-abusefilterunblockautopromote-summary": "Отстранува блок на автоунапредување на даден корисник, добиен поради последица од филтер за злоупотреби.",
- "apihelp-abusefilterunblockautopromote-param-user": "Корисничкото име што сакате да го одблокирате.",
- "apihelp-abusefilterunblockautopromote-example-1": "Отстрани го блокот од автоунапредувањето на [[User:Example]]",
- "apihelp-query+abusefilters-description": "Прикажи подробности за филтрите за злоупотреба.",
- "apihelp-query+abusefilters-summary": "Прикажи подробности за филтрите за злоупотреба.",
- "apihelp-query+abusefilters-param-startid": "Назнака на филтерот од кајшто ќе почне набројувањето.",
- "apihelp-query+abusefilters-param-endid": "Назнака на филтерот на кајшто ќе запре набројувањето.",
- "apihelp-query+abusefilters-param-show": "Прикажи ги само филтрите што ги исполнуваат овие критериуми.",
- "apihelp-query+abusefilters-param-limit": "Допуштениот број на филтри за наведување во списокот.",
- "apihelp-query+abusefilters-param-prop": "Кои својства да се дадат.",
- "apihelp-query+abusefilters-example-1": "Испиши ги вклучените јавни филтри",
- "apihelp-query+abusefilters-example-2": "Покажувај извесни подробности за филтри",
- "apihelp-query+abuselog-description": "Прикажи ги настаните фатени од еден од филтрите.",
- "apihelp-query+abuselog-summary": "Прикажи ги настаните фатени од еден од филтрите.",
- "apihelp-query+abuselog-param-start": "Од кој датум и време да почне набројувањето.",
- "apihelp-query+abuselog-param-end": "На кој датум и време да запре набројувањето.",
- "apihelp-query+abuselog-param-user": "Прикажи само ставки за даден корисник или IP-адреса.",
- "apihelp-query+abuselog-param-title": "Прикажи само ставки што се однесуваат на дадена страница.",
- "apihelp-query+abuselog-param-filter": "Прикажи само ставки за настани фатени од дадена филтерска назнака.",
- "apihelp-query+abuselog-param-limit": "Највеќе ставки во списоците.",
- "apihelp-query+abuselog-param-prop": "Кои својства да се дадат.",
- "apihelp-query+abuselog-example-1": "Прикажи ги скорешните дневнички ставки",
- "apihelp-query+abuselog-example-2": "Прикажи ги скорешните дневнички ставки за [[API|извршникот]] (API)",
- "apierror-abusefilter-canttest": "Немате дозвола да испробувате филтри на злоупотреба.",
- "apierror-abusefilter-cantcheck": "Немате дозвола да проверувате синтакса на филтри на злоупотреба.",
- "apierror-abusefilter-nosuchlogid": "Нема запис во дневникот на злоупотреби со назнака $1.",
- "apierror-abusefilter-badsyntax": "Филтерот има неважечка синтакса."
+ "abusefilter-view-private-submit": "Погл. лични податоци",
+ "abusefilter-view-private": "Погл. лични податоци",
+ "abusefilter-view-private-reason": "Причина за пристап до лични податоци:",
+ "abusefilter-log-details-id": "Назнака на дневникот",
+ "abusefilter-invalid-request": "Неважечко барање! Мора да пристапите до личните дневнички податоци преку образецот на [[Special:AbuseLog/$1]] и да наведете причина.",
+ "abusefilter-invalid-request-noid": "Неважечко барање! Мора да пристапите до личните дневнички податоци преку образецот на соодветната страница и да наведете причина.",
+ "log-description-abusefilterprivatedetails": "Во овој дневник се прикажани навратите кога даден корисник пристапил до лични податоци во дневникот на филтерот за злоупотреби.",
+ "abusefilter-noreason": "Предупредување: За да гледате лични податоци од овој дневник, ќе мора да наведете причина.",
+ "abusefilter-log-ip-not-available": "Недостапна",
+ "abusefilter-tag-reserved": "Ознаката <code>abusefilter-condition-limit</code> е резервирана за внатрешна употреба во Филтерот на злоупотреби.",
+ "tag-abusefilter-condition-limit": "достигната условната граница",
+ "tag-abusefilter-condition-limit-description": "Уредувањата или другите настани не можеа да се проверат од сите активни [[Special:AbuseFilter|филтри на злоупотреби]] ([[mw:Extension:AbuseFilter/Conditions|помош]])."
}
diff --git a/AbuseFilter/i18n/ml.json b/AbuseFilter/i18n/ml.json
index e9356a66..df9b0d27 100644
--- a/AbuseFilter/i18n/ml.json
+++ b/AbuseFilter/i18n/ml.json
@@ -10,7 +10,6 @@
"abusefilter": "ദുരുപയോഗ അരിപ്പയുടെ ക്രമീകരണങ്ങൾ",
"abuselog": "ദുരുപയോഗരേഖ",
"abusefilter-intro": "ദുരുപയോഗ അരിപ്പയുടെ കൈകാര്യത്തിനുള്ള സമ്പർക്കമുഖത്തിലേയ്ക്ക് സ്വാഗതം.\nഎല്ലാവിധത്തിലുള്ള പ്രവർത്തനങ്ങളിലേയും ദോഷകരമായ നടപടികളെ സ്വയംപ്രതിരോധിക്കുന്ന സോഫ്റ്റ്‌വേർ സൗകര്യമാണ് ദുരുപയോഗ അരിപ്പ.\nഈ സമ്പർക്കമുഖത്തിൽ നിർവചിക്കപ്പെട്ടിരിക്കുന്ന അരിപ്പകളുടെ പട്ടികൾ കാണാനും മാറ്റം വരുത്താനും കഴിയുന്നതാണ്.",
- "abusefilter-mustbeeditor": "സുരക്ഷാ കാരണങ്ങളാൽ, ദുരുപയോഗ അരിപ്പ തിരുത്താൻ അവകാശമുള്ള ഉപയോക്താക്കൾക്ക് മാത്രമേ ഈ സമ്പർക്കമുഖം ഉപയോഗിക്കാൻ കഴിയൂ.",
"abusefilter-warning": "'''മുന്നറിയിപ്പ്''': ഈ പ്രവൃത്തി ദോഷകരമെന്ന് സ്വയം തിരിച്ചറിഞ്ഞിട്ടുള്ളതാണ്.\nസൃഷ്ടിപരമല്ലാത്ത തിരുത്തലുകൾ അതിവേഗം മുൻപ്രാപനം ചെയ്യുന്നതായിരിക്കും, ദുരുദ്ദേശത്തോടെയുള്ള അല്ലെങ്കിൽ ആവർത്തിച്ചുണ്ടാകുന്ന സൃഷ്ടിപരമല്ലാത്ത തിരുത്തലുകൾ താങ്കളുടെ അംഗത്വത്തെയോ ഐ.പി. വിലാസത്തേയോ തടയുന്നതിൽ എത്തിയേക്കാം.\nതാങ്കൾ താങ്കളുടെ തിരുത്തൽ സൃഷ്ടിപരമെന്നു വിശ്വസിക്കുന്നുണ്ടെങ്കിൽ സ്ഥിരീകരിക്കാനായി ദയവായി വീണ്ടും സമർപ്പിക്കുക.\nതാങ്കളുടെ പ്രവൃത്തിയിൽ ബാധകമാകുന്ന ദുരുപയോഗ നിയമത്തിന്റെ ലഘുവിവരണം: $1",
"abusefilter-disallowed": "ഈ പ്രവൃത്തി ദോഷകരമെന്ന് സ്വയം തിരിച്ചറിഞ്ഞിട്ടുള്ളതാണ്, അതിനാലത് അനുവദിക്കാനാകില്ല. താങ്കളുടെ തിരുത്ത് സൃഷ്ടിപരമാണെന്ന് താങ്കൾ വിശ്വസിക്കുന്നുവെങ്കിൽ, ദയവായി കാര്യനിർവാഹകരിലൊരാളെ ബന്ധപ്പെടുക, താങ്കൾ എന്താണ് ചെയ്യാൻ ശ്രമിച്ചതെന്നറിയിക്കുക.\nതാങ്കളുടെ പ്രവൃത്തിയുമായി സാദൃശ്യമുള്ള ദുരുപയോഗ നിയമത്തിന്റെ ലഘുവിവരണം: $1",
"abusefilter-blocked-display": "ഈ പ്രവൃത്തി ദോഷകരമെന്നു സ്വയം തിരിച്ചറിഞ്ഞിട്ടുള്ളതാണ്, ഇതു ചെയ്യുന്നതിൽ നിന്നും താങ്കളെ തടയുന്നതാണ്.\nകൂടുതലായി, {{SITENAME}} സംരക്ഷിക്കുന്നതിനായി താങ്കളുടെ അംഗത്വവും ബന്ധപ്പെട്ട ഐ.പി. വിലാസങ്ങളും തിരുത്തുന്നതിൽ നിന്നും തടയുന്നതാണ്.\nഇത് പിഴവുമൂലമുണ്ടായതെങ്കിൽ ദയവായി ഒരു കാര്യനിർവാഹകനെ ബന്ധപ്പെടുക.\nതാങ്കളുടെ പ്രവൃത്തിയുമായി ഒത്തുപോകുന്ന ദുരുപയോഗനിയമത്തിന്റെ ലഘുവിവരണം കാണുക: $1",
@@ -76,8 +75,6 @@
"abusefilter-log-hide-hidden": "പൊതുജനദൃഷ്ടിയിൽ നിന്ന് ഈ വിവരം മറയ്ക്കുക",
"abusefilter-log-hide-reason": "കാരണം:",
"abusefilter-log-hide-forbidden": "ദുരുപയോഗരേഖയിലെ വിവരങ്ങൾ മറയ്ക്കാനുള്ള അനുവാദം താങ്കൾക്കില്ല.",
- "abusefilter-logentry-suppress": "മറയ്ക്കുക [[$1]]",
- "abusefilter-logentry-unsuppress": "മറ നീക്കുക [[$1]]",
"logentry-abusefilter-hit": "$1 നടത്തിയ പ്രവൃത്തി $4-നെ ഉണർത്തി, $3-യിൽ \"$5\" എന്ന നടപടി എടുക്കുന്നു. എടുത്ത നടപടി: $6 ($7)",
"abusefilter-management": "ദുരുപയോഗ അരിപ്പ കൈകാര്യം",
"abusefilter-list": "എല്ലാ അരിപ്പകളും",
@@ -110,7 +107,6 @@
"abusefilter-list-options-scope-local": "പ്രാദേശിക നയങ്ങൾ മാത്രം",
"abusefilter-list-options-scope-global": "ആഗോളനയങ്ങൾ മാത്രം",
"abusefilter-list-options-scope-all": "പ്രാദേശിക ആഗോള നയങ്ങൾ",
- "abusefilter-list-options-disabled": "നിർജ്ജീവമാക്കപ്പെട്ട അരിപ്പകൾ:",
"abusefilter-list-options-hidedisabled": "നിർജ്ജീവമാക്കപ്പെട്ട അരിപ്പകൾ മറയ്ക്കുക",
"abusefilter-list-options-submit": "പുതുക്കുക",
"abusefilter-tools-text": "ദുരുപയോഗ അരിപ്പകൾ സൃഷ്ടിക്കാനും തെറ്റുതിരുത്താനും ഉപയോഗിക്കാവുന്ന ചില ഉപകരണങ്ങൾ ഇവിടെ നൽകിയിരിക്കുന്നു.",
@@ -130,7 +126,6 @@
"abusefilter-edit-status-label": "സ്ഥിതിവിവരക്കണക്കുകൾ:",
"abusefilter-edit-status": "ഒടുവിലത്തെ {{PLURAL:$1|പ്രവൃത്തിയിൽ|$1 പ്രവൃത്തികളിൽ}}, അരിപ്പ $2 എണ്ണവുമായി ഒത്തുപോയി ($3%).",
"abusefilter-edit-status-profile": "ഒടുവിലത്തെ {{PLURAL:$1|പ്രവൃത്തിയിൽ|$1 പ്രവൃത്തികളിൽ}}, അരിപ്പ $2 എണ്ണവുമായി ഒത്തുപോയി ($3%).\nശരാശരി, പ്രവർത്തന സമയം $4 മില്ലിസെക്കന്റ് ആണ്, ഉപാധികളിൽ {{PLURAL:$5|ഒരുപാധി|$5 ഉപാധികൾ}} ഉപയോഗിച്ചിരിക്കുന്നു.",
- "abusefilter-edit-throttled": "'''മുന്നറിയിപ്പ്''':സുരക്ഷാ മാർഗ്ഗമെന്ന നിലയിൽ ഈ അരിപ്പ സ്വയം പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു.\nപ്രവൃത്തിയുടെ $1% ഒത്തുപോകലുകളുടെ പരിധിയെത്തിയിരിക്കുന്നു.",
"abusefilter-edit-new": "പുതിയ അരിപ്പ",
"abusefilter-edit-save": "അരിപ്പ സേവ് ചെയ്യുക",
"abusefilter-edit-id": "അരിപ്പയുടെ ഐ.ഡി.:",
@@ -149,7 +144,6 @@
"abusefilter-edit-consequences": "ചേർച്ച കണ്ടാൽ കൈക്കൊള്ളേണ്ട നടപടികൾ",
"abusefilter-edit-action-warn": "ഉപയോക്താവിന് മുന്നറിയിപ്പ് കൊടുത്ത ശേഷം ഈ പ്രവൃത്തികൾ തുടങ്ങുക",
"abusefilter-edit-action-disallow": "സംശയകരമായ പ്രവൃത്തി ചെയ്യുന്നതിൽ നിന്നും ഉപയോക്താവിനെ തടയുക",
- "abusefilter-edit-action-flag": "ദുരുപയോഗ രേഖയിൽ തിരുത്തലിന് പതാക ചേർക്കുക",
"abusefilter-edit-action-blockautopromote": "ഉപയോക്താവിന്റെ സ്വയംസ്ഥിരീകൃത സ്ഥിതി പിൻവലിക്കുക",
"abusefilter-edit-action-degroup": "എല്ലാ പ്രത്യേക പദവികളുള്ള സംഘങ്ങളിൽ നിന്നും ഉപയോക്താവിനെ നീക്കുക",
"abusefilter-edit-action-block": "ഉപയോക്താവിനെ ഒപ്പം/അല്ലെങ്കിൽ ഐ.പി. വിലാസത്തെ തിരുത്തുന്നതിൽ നിന്നും തടയുക",
@@ -158,7 +152,6 @@
"abusefilter-edit-action-tag": "കൂടുതൽ സംശോധനത്തിനായി തിരുത്ത് റ്റാഗ് ചെയ്യുക",
"abusefilter-edit-throttle-count": "അനുവദിക്കപ്പെട്ടിരിക്കുന്ന പ്രവർത്തനങ്ങളുടെ എണ്ണം:",
"abusefilter-edit-throttle-period": "കാലയളവ്:",
- "abusefilter-edit-throttle-seconds": "{{PLURAL:$1|ഒരു സെക്കന്റ്|$1 സെക്കന്റുകൾ}}",
"abusefilter-edit-throttle-groups": "സംഘ ത്വരകം:\n:(അർദ്ധവിരാമമുപയോഗിച്ച് യോജിപ്പിച്ച, ഒരു വരിയിൽ ഒരെണ്ണം വീതം)",
"abusefilter-edit-warn-message": "മുന്നറിയിപ്പിനായി ഉപയോഗിക്കുന്ന വ്യവസ്ഥാ സന്ദേശം:",
"abusefilter-edit-warn-other": "മറ്റു സന്ദേശം",
@@ -244,20 +237,19 @@
"abusefilter-edit-builder-vars-oldsize": "താളിന്റെ പഴയ വലിപ്പം",
"abusefilter-edit-builder-vars-removedlines": "തിരുത്തലിൽ ഒഴിവാക്കപ്പെട്ട വരികൾ",
"abusefilter-edit-builder-vars-summary": "ചുരുക്കം/കാരണം തിരുത്തുക",
- "abusefilter-edit-builder-vars-article-id": "താളിന്റെ ഐ.ഡി.",
- "abusefilter-edit-builder-vars-article-ns": "താളിന്റെ നാമമേഖല",
- "abusefilter-edit-builder-vars-article-text": "താളിന്റെ തലക്കെട്ട് (നാമമേഖല ഇല്ലാതെ)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "താളിന്റെ പൂർണ്ണ തലക്കെട്ട്",
- "abusefilter-edit-builder-vars-article-views": "താളിന്റെ എടുത്തുനോക്കലുകൾ",
+ "abusefilter-edit-builder-vars-page-id": "താളിന്റെ ഐ.ഡി.",
+ "abusefilter-edit-builder-vars-page-ns": "താളിന്റെ നാമമേഖല",
+ "abusefilter-edit-builder-vars-page-title": "താളിന്റെ തലക്കെട്ട് (നാമമേഖല ഇല്ലാതെ)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "താളിന്റെ പൂർണ്ണ തലക്കെട്ട്",
"abusefilter-edit-builder-vars-movedfrom-id": "മാറ്റേണ്ട സ്രോതസ്സ് താളിന്റെ ഐ.ഡി.",
"abusefilter-edit-builder-vars-movedfrom-ns": "മാറ്റേണ്ട സ്രോതസ്സ് താളിന്റെ നാമമേഖല",
- "abusefilter-edit-builder-vars-movedfrom-text": "മാറ്റേണ്ട സ്രോതസ്സ് താളിന്റെ തലക്കെട്ട്",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "മാറ്റേണ്ട സ്രോതസ്സ് താളിന്റെ പൂർണ്ണ തലക്കെട്ട്",
+ "abusefilter-edit-builder-vars-movedfrom-title": "മാറ്റേണ്ട സ്രോതസ്സ് താളിന്റെ തലക്കെട്ട്",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "മാറ്റേണ്ട സ്രോതസ്സ് താളിന്റെ പൂർണ്ണ തലക്കെട്ട്",
"abusefilter-edit-builder-vars-movedto-id": "മാറ്റേണ്ട ലക്ഷ്യതാളിന്റെ ഐ.ഡി.",
"abusefilter-edit-builder-vars-movedto-ns": "മാറ്റേണ്ട ലക്ഷ്യതാളിന്റെ നാമമേഖല",
- "abusefilter-edit-builder-vars-movedto-text": "മാറ്റേണ്ട ലക്ഷ്യതാളിന്റെ തലക്കെട്ട്",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "മാറ്റേണ്ട ലക്ഷ്യതാളിന്റെ പൂർണ്ണ തലക്കെട്ട്",
- "abusefilter-edit-builder-vars-user-editcount": "ഉപയോക്താവിന്റെ തിരുത്തലുകളുടെ എണ്ണം",
+ "abusefilter-edit-builder-vars-movedto-title": "മാറ്റേണ്ട ലക്ഷ്യതാളിന്റെ തലക്കെട്ട്",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "മാറ്റേണ്ട ലക്ഷ്യതാളിന്റെ പൂർണ്ണ തലക്കെട്ട്",
+ "abusefilter-edit-builder-vars-user-editcount": "ഉപയോക്താവിന്റെ തിരുത്തുകളുടെ എണ്ണം",
"abusefilter-edit-builder-vars-user-age": "ഉപയോക്തൃ അംഗത്വത്തിന്റെ പ്രായം",
"abusefilter-edit-builder-vars-user-name": "ഉപയോക്തൃ അംഗത്വത്തിന്റെ നാമം",
"abusefilter-edit-builder-vars-user-groups": "ഉപയോക്താവ് ഉൾപ്പെട്ട (സ്വതേ ഉൾപ്പെട്ടത് ഉൾപ്പെടെ) സംഘങ്ങൾ",
@@ -381,7 +373,6 @@
"abusefilter-topnav-import": "അരിപ്പ ഇറക്കുമതി ചെയ്യുക",
"abusefilter-log-name": "ദുരുപയോഗ അരിപ്പയുടെ ഉപയോഗ രേഖ",
"abusefilter-log-header": "അരിപ്പകളിൽ വരുത്തിയ മാറ്റങ്ങളുടെ ചുരുക്കം ഈ രേഖയിൽ കാണാവുന്നതാണ്.\nപൂർണ്ണ വിവരങ്ങൾക്ക്, അരിപ്പകളിലെ സമീപകാലമാറ്റങ്ങളുടെ [[Special:AbuseFilter/history|പട്ടിക]] കാണുക.",
- "abusefilter-log-entry-modify": "$1 ($2) അരിപ്പയിൽ മാറ്റം വരുത്തി",
"abusefilter-log-noresults": "ഫലങ്ങൾ ഒന്നുമില്ല",
"abusefilter-diff-title": "പതിപ്പുകൾ തമ്മിലുള്ള വ്യത്യാസങ്ങൾ",
"abusefilter-diff-item": "ഇനം",
@@ -395,6 +386,5 @@
"abusefilter-import-intro": "മറ്റുവിക്കികളിൽ നിന്ന് അരിപ്പകൾ ഇറക്കുമതി ചെയ്യാൻ ഈ ദൃശ്യമണ്ഡലം ഉപയോഗിക്കാവുന്നതാണ്.\nസ്രോതസ്സ് വിക്കിയിലെ തിരുത്തുവാനുള്ള ദൃശ്യമണ്ഡലത്തിൽ \"{{int:abusefilter-edit-tools}}\" എന്നതിനു താഴെയുള്ള \"{{int:abusefilter-edit-export}}\" ഞെക്കുക.\nഅപ്പോൾ കിട്ടുന്ന ടെക്സ്റ്റ്ബോക്സ് പകർത്തി ഈ ടെക്സ്റ്റ്‌‌ബോക്സിൽ നൽകി, \"{{int:abusefilter-import-submit}}\" ഞെക്കുക.",
"abusefilter-import-submit": "വിവരങ്ങൾ ഇറക്കുമതി ചെയ്യുക",
"abusefilter-group-default": "സ്വതേ",
- "abusefilter-http-error": "ഒരു എച്ച്.റ്റി.റ്റി.പി. പിഴവ് സംഭവിച്ചിരിക്കുന്നു: $1",
- "apihelp-abusefiltercheckmatch-param-filter": "അരിപ്പയിലെ മൊത്തം എഴുത്തും ഒത്തുപോകുന്നുണ്ടോയെന്ന് പരിശോധിക്കുക."
+ "abusefilter-http-error": "ഒരു എച്ച്.റ്റി.റ്റി.പി. പിഴവ് സംഭവിച്ചിരിക്കുന്നു: $1"
}
diff --git a/AbuseFilter/i18n/mn.json b/AbuseFilter/i18n/mn.json
index 47b2810a..390219a8 100644
--- a/AbuseFilter/i18n/mn.json
+++ b/AbuseFilter/i18n/mn.json
@@ -9,7 +9,6 @@
"abusefilter": "Доромжлол шүүх тохиргоо",
"abuselog": "Доромж хийгдсэн лог",
"abusefilter-intro": "Та доромжлолоос сэргийлэх шүүлтүүрийн системд холбогдсон байна.\nУг шүүлтүүр нь автоматаар тохиолдол бүрт өөрчлөлт хийх байдлаар ажиллана.\nЭнд хийгдсэн шүүлтүүрүүдийг жагсаан харуулж тэдгээрийг өөрчилж болно.",
- "abusefilter-mustbeeditor": "Нууцлалийг хадгалах үүднээс зөвхөн зөвшөөрөгдсөн хэрэглэгчдэд уг интерфэйсийг ашиглаж болно.",
"abusefilter-blocker": "Доромжлол шүүгч",
"right-abusefilter-modify": "Доромжлол шүүгчид өөрчлөлт хийх",
"abusefilter-log-search-submit": "Хайх",
diff --git a/AbuseFilter/i18n/mni.json b/AbuseFilter/i18n/mni.json
new file mode 100644
index 00000000..61da435d
--- /dev/null
+++ b/AbuseFilter/i18n/mni.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Awangba Mangang"
+ ]
+ },
+ "abusefilter-log-search-action-any": "ꯑꯃꯥꯍꯦꯛꯇ"
+}
diff --git a/AbuseFilter/i18n/mr.json b/AbuseFilter/i18n/mr.json
index c3237e5a..8368a21c 100644
--- a/AbuseFilter/i18n/mr.json
+++ b/AbuseFilter/i18n/mr.json
@@ -8,15 +8,17 @@
"V.narsikar",
"Ydyashad",
"संतोष दहिवळ",
- "Matma Rex"
+ "Matma Rex",
+ "Pushkar Ekbote",
+ "Sureshkhole",
+ "Susheelkasab"
]
},
"abusefilter-desc": "संपादन गाळणी सर्व संपादनांचा सांगितल्याप्रमाणे स्वयंशोध घेते.",
"abusefilter": "संपादन गाळणी व्यवस्थापन",
"abuselog": "गैरवापर नोंदी",
"abusefilter-intro": "संपादन गाळणी व्यवस्थापन प्रणालीत आपले स्वागत आहे.\n\nसंपादन गाळणी म्हणजे सर्व संपादनांचा सांगितल्याप्रमाणे स्वयंशोध घेणारी स्वयंचलित सॉफ्टवेअर प्रणाली असते. हा इंटरफेस तयार केलेल्या गाळण्यांची यादी दाखवतो आणि त्यात सुधारणा करण्यास अनुमती देतो.",
- "abusefilter-mustbeeditor": "सुरक्षेच्या कारणास्तव,फक्त तेच सदस्य या सुविधेचा वापर करू शकतात, ज्यांना संपादक गाळणीत बदल करावयाचा अधिकार आहे.",
- "abusefilter-warning": "'''सूचना''': आपण करू इच्छित असलेली कृती/लेखन/संपादन अभिप्रेत संकेतास अनुसरून नसावी / अयोग्य असावी अथवा साशंकीत म्हणून स्वयमेव संपादन गाळणीकडून नोंदवली जात आहे.\nआपले संपादन जतन (सेव्ह) करण्यापूर्वी आपण करू इच्छित असलेली कृती/लेखन/संपादन रचनात्मक आहे याची खात्री करून घ्यावी.अरचनात्मक संपादने तात्काळ उलटवली जाण्याची किंवा त्या पेक्षा अधिक प्रतिबंधनांची शक्यता असते.\nआपणास हे संपादन सुयोग्य असल्याची खात्री असेल तर आपण ते नक्की करण्यासाठी ”पुन्हा सोपवा’ वर टिचकी मारू शकता.आपल्या क्रियेशी संलग्न, या गाळणीस लागू असलेल्या नियमाचे थोडक्यात वर्णन आहे:$1",
+ "abusefilter-warning": "'''सूचना''': आपण करू इच्छित असलेली कृती/लेखन/संपादन अभिप्रेत संकेतास अनुसरून नसावी / अयोग्य असावी अथवा साशंकीत म्हणून स्वयमेव संपादन गाळणीकडून नोंदवली जात आहे.\nआपले संपादन जतन (सेव्ह) करण्यापूर्वी आपण करू इच्छित असलेली कृती/लेखन/संपादन रचनात्मक आहे याची खात्री करून घ्यावी.अरचनात्मक संपादने तात्काळ उलटवली जाण्याची किंवा त्यापेक्षा अधिक प्रतिबंधनांची शक्यता असते.\nआपणास हे संपादन सुयोग्य असल्याची खात्री असेल तर आपण ते नक्की करण्यासाठी ”पुन्हा सोपवा’ वर टिचकी मारू शकता.आपल्या क्रियेशी संलग्न, या गाळणीस लागू असलेल्या नियमाचे थोडक्यात वर्णन आहे:$1",
"abusefilter-disallowed": "आपण नुकतीच केलेली क्रिया/लेखन/संपादन अभिप्रेत संकेतास अनुसरून नसावी / 'अयोग्य' असावी अथवा 'साशंकीत’ म्हणून स्वयमेव ज्ञात झाली आहे, आणि नामंजूर करण्यात आलेली आहे.आपली क्रिया रचनात्मक असल्याचे जर आपणास वाटत असेल तर,कृपया ,आपण नेमके काय करू इच्छित होता/प्रयत्न करत होता याची माहिती, संपादन गाळणीच्या अनपेक्षीत क्रिया विषयक चर्चा पानावर प्रचालकांना द्या. आपल्या क्रियेशी संलग्न, या गाळणीस लागू असलेल्या नियमाचे थोडक्यात वर्णन आहे:$1",
"abusefilter-blocked-display": "आपण नुकतीच केलेली क्रिया ही ’अभिप्रेत संकेतास अनुसरून नसलेली' / 'अयोग्य' असल्याची नोंद संपादन गाळणीने स्वयमेव केली आहे, व म्हणून ती क्रिया करण्यास आपणास रोधित करण्यात आलेले आहे.{{SITENAME}} सुरक्षित ठेवण्यासाठी,आपले सदस्यखाते व अंकपत्ता संपादनांसाठी अवरुद्ध करण्यात आलेला आहे.जर हे चुकीने घडले असल्यास संपादन गाळणी चर्चा पानावर प्रचालकाशी कृपया संपर्क साधा.आपल्या क्रियेशी संलग्न, या गाळणीस लागू असलेल्या नियमाचे थोडक्यात वर्णन आहे:$1",
"abusefilter-degrouped": "ही क्रिया हानीकारक म्हणुन स्वयंचलीतरित्या निवडल्या गेली आहे.म्हणुन तीस परवानगी नाकारण्यात येते, व,आपले खात्याबद्दल रदबदली केल्या गेल्याच्या शंकेमुळे आपले सर्व अधिकार रद्द करण्यात आलेले आलेले आहेत. आपणास जर खात्री आहे कि हे चुकीमुळे झालेले आहे तर या क्रियेच्या स्पष्टीकरणासह प्रशासकाशी कृपया संपर्क साधा ,त्यामुळे आपले अधिकार आपणास पुनर्प्राप्त होतील.आपल्या क्रियेशी जुळणा-या दुरुपयोग नियमाचे थोडक्यात वर्णन आहे :$1",
@@ -52,8 +54,14 @@
"abusefilter-log-search-filter": "गाळणी ओळखण (पाईप चिन्हाद्वारे(|) वेगळे केलेले):",
"abusefilter-log-search-title": "शीर्षक:",
"abusefilter-log-search-wiki": "विकि:",
+ "abusefilter-log-search-impact": "परिणाम:",
+ "abusefilter-log-search-impact-all": "सर्व क्रिया",
+ "abusefilter-log-search-impact-saved": "फक्त जतन केलेले बदल",
+ "abusefilter-log-search-impact-not-saved": "बदल जतन न करता",
+ "abusefilter-log-search-action-taken-label": "कारवाई केली",
+ "abusefilter-log-search-action-taken-any": "कुठलेही",
"abusefilter-log-search-submit": "शोधा",
- "abusefilter-log-entry": "$1:$2ने संपादन गाळणी उद्युक्त केली, ज्याने $4 वर \"$3\" क्रिया केली.\nकेलेली कार्यवाही: $5;\nगाळणी वर्णन: $6",
+ "abusefilter-log-entry": "$1:$2ने संपादन गाळणी {{GENDER:$8|उद्युक्त}} केली, ज्याने $4 वर \"$3\" {{GENDER:$8|क्रिया केली}}.\nकेलेली कार्यवाही: $5;\nगाळणी वर्णन: $6",
"abusefilter-log-entry-withdiff": "$1:$2ने अपशब्द गाळणी कार्यान्वयित केली,त्याने $4 वर \"$3\" क्रिया घडली.\nकेलेली कार्यवाही:$5;\nगाळणी वर्णन:$6($7)",
"abusefilter-log-detailedentry-meta": "$1: $2 ने $3 ला कार्यान्वित केले, $5 वर \"$4\" ही क्रिया केली.\nकार्यवाही केली : $6;\nगाळणीचे वर्णन : $7 ($8)",
"abusefilter-log-detailedentry-global": "वैश्विक गाळणी $1",
@@ -81,8 +89,6 @@
"abusefilter-log-hide-hidden": "ही नोंद सार्वजनिक दृश्यतेपासून लपवा",
"abusefilter-log-hide-reason": "कारण:",
"abusefilter-log-hide-forbidden": "आपणास दुरुपयोग गाळणीच्या नोंदवहीतील नोंदी लपविण्याची परवानगी नाही.",
- "abusefilter-logentry-suppress": "\"[[$1]]\" लपविले",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\"ला प्रगट करा",
"logentry-abusefilter-hit": "$3 वर \"$5\" ही क्रिया करून $1 ने $4 ला चेतविले.पुढील कार्यवाही केली: $6 ($7)",
"abusefilter-management": "संपादन गाळणी व्यवस्थापन",
"abusefilter-list": "सर्व गाळण्या",
@@ -115,7 +121,6 @@
"abusefilter-list-options-scope-local": "स्थानिक नियम फक्त",
"abusefilter-list-options-scope-global": "वैश्विक नियम फक्त",
"abusefilter-list-options-scope-all": "स्थानिक व वैश्विक नियम",
- "abusefilter-list-options-disabled": "अकार्यान्वित संपादन गाळण्या",
"abusefilter-list-options-hidedisabled": "अकार्यान्वित संपादन गाळण्या लपवा",
"abusefilter-list-options-submit": "अद्ययावत करा",
"abusefilter-tools-text": "येथे खाली, संपादन गाळणी तयारीस आणि गणकदोष निवारण्यास उपयूक्त सुविधा उपलब्ध आहेत.",
@@ -135,7 +140,6 @@
"abusefilter-edit-status-label": "सांख्यिकी:",
"abusefilter-edit-status": "मागील $1 या {{PLURAL:$1|क्रियेपैकी|क्रियांपैकी}},या गाळणीशी, $2 ($3%)अनुरुपन (मॅच) झाल्या आहेत.",
"abusefilter-edit-status-profile": "मागील $1 या {{PLURAL:$1|क्रियेपैकी|क्रियांपैकी}},या गाळणीशी, $2 ($3%)अनुरुपन (मॅच) झाल्या आहेत. सरासरीने,त्याचा कार्यावधी $4 मिली सेकंद आहे व अटमर्यादेपैकी त्याने $5 {{PLURAL:$5|अटीची|अटींची}} खानापूर्ती केली आहे.",
- "abusefilter-edit-throttled": "'''सूचना:''' सुरक्षीततेचा उपाय म्हणून हि संपादन गाळणी स्वयमेव अकार्यान्वित झाली.\nकारण $1% पेक्षा अधिक कृतींची मर्यादा तीने गाठली.",
"abusefilter-edit-new": "नवीन संपादन गाळणी",
"abusefilter-edit-save": "संपादन गाळणी जतन करा",
"abusefilter-edit-id": "गाळणी क्रमांक",
@@ -154,16 +158,15 @@
"abusefilter-edit-consequences": "अनुरुपन (मॅच) झाल्यावर करावयाची कार्यवाही",
"abusefilter-edit-action-warn": "सदस्यास पुर्व/सजगता सूचना देउन या क्रिया उद्युक्त करा",
"abusefilter-edit-action-disallow": "प्रश्नांकित कृती करण्यापासून, उपयोगकर्त्यास थांबवा",
- "abusefilter-edit-action-flag": "संपादन गाळणी नोंदीत टिपण्यासाठी पताका लावा",
"abusefilter-edit-action-blockautopromote": "सदस्याची स्वयंशाबीत(ऑटोकन्फर्म) स्थिती रद्द करा.",
"abusefilter-edit-action-degroup": "सदस्यास सर्व सवलत-गटांमधून हटवा",
"abusefilter-edit-action-block": "सदस्य व/किंवा त्याचा अंकपत्ता संपादनास प्रतिबंधित करा.",
+ "abusefilter-edit-action-blocktalk": "स्वत:चे बोलपृष्ठ अद्यन्वित करण्यापासून वापरकर्त्याला / आयपी अड्रेसला परावृत्त करा.",
"abusefilter-edit-action-throttle": "केवळ विशीष्ट 'दर मर्यादा'(रेट लिमीट) ओलांडल्यासच, कृती करा",
"abusefilter-edit-action-rangeblock": "सदस्याचा जेथून उद्गम आहे, ती /16 रेंज प्रतिबंधित करा",
"abusefilter-edit-action-tag": "संपादनास, पुढील समीक्षणाकरता खूण करा",
"abusefilter-edit-throttle-count": "परवानगी द्यायच्या क्रियांची संख्या:",
"abusefilter-edit-throttle-period": "कालावधी",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|सेकंद}}",
"abusefilter-edit-warn-message": "पुर्व/सजगता सूचना देण्यासाठी व्यवस्था संदेश निवडा:",
"abusefilter-edit-warn-other": "इतर संदेश",
"abusefilter-edit-warn-other-label": "इतर संदेशाकरीता पृष्ठशीर्षक:\n:''(मिडियाविकि उपसर्गा शिवाय)''",
@@ -237,19 +240,18 @@
"abusefilter-edit-builder-vars-oldsize": "पानाचा जुना आकार",
"abusefilter-edit-builder-vars-removedlines": "संपादनात वगळलेल्या ओळींचे क्षेत्र",
"abusefilter-edit-builder-vars-summary": "संपादन आढावा/ कारण",
- "abusefilter-edit-builder-vars-article-id": "पान क्रमांक (पेज आयडी)",
- "abusefilter-edit-builder-vars-article-ns": "पान नामविश्व",
- "abusefilter-edit-builder-vars-article-text": "पानाचे शीर्षक (नामविश्वा शिवाय)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "पानाचे पूर्ण नाव",
- "abusefilter-edit-builder-vars-article-views": "पानांची दृष्यता",
+ "abusefilter-edit-builder-vars-page-id": "पान क्रमांक (पेज आयडी)",
+ "abusefilter-edit-builder-vars-page-ns": "पान नामविश्व",
+ "abusefilter-edit-builder-vars-page-title": "पानाचे शीर्षक (नामविश्वा शिवाय)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "पानाचे पूर्ण नाव",
"abusefilter-edit-builder-vars-movedfrom-id": "स्थानांतराचे स्रोत पानाची पान ओळखण",
"abusefilter-edit-builder-vars-movedfrom-ns": "स्थानांतराच्या स्रोत पानाचे नामविश्व",
- "abusefilter-edit-builder-vars-movedfrom-text": "स्थानांतराच्या स्रोत पानाचे शीर्षक",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "स्थानांतराच्या स्रोत पानाचा पूर्ण मथळा",
+ "abusefilter-edit-builder-vars-movedfrom-title": "स्थानांतराच्या स्रोत पानाचे शीर्षक",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "स्थानांतराच्या स्रोत पानाचा पूर्ण मथळा",
"abusefilter-edit-builder-vars-movedto-id": "स्थानांतराच्या गंतव्य पानाची पान ओळखण",
"abusefilter-edit-builder-vars-movedto-ns": "स्थानांतराच्या गंतव्य पानाचे नामविश्व",
- "abusefilter-edit-builder-vars-movedto-text": "स्थानांतराच्या गंतव्य पानाचे शीर्षक",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "स्थानांतराच्या गंतव्य पानाचा पूर्ण मथळा",
+ "abusefilter-edit-builder-vars-movedto-title": "स्थानांतराच्या गंतव्य पानाचे शीर्षक",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "स्थानांतराच्या गंतव्य पानाचा पूर्ण मथळा",
"abusefilter-edit-builder-vars-user-editcount": "सदस्य संपादन संख्या",
"abusefilter-edit-builder-vars-user-age": "सदस्य खात्याचे वय",
"abusefilter-edit-builder-vars-user-name": "सदस्य खात्याचे नाव",
@@ -360,7 +362,6 @@
"abusefilter-topnav-import": "संपादन गाळणी आयात करा",
"abusefilter-log-name": "गाळणीने टिपलेल्या नोंदी",
"abusefilter-log-header": "हा क्रमालेख संपादन गाळण्यात केलेल्या बदलांचे संक्षिप्त विवरण दाखवतो.\nपूर्ण विवरणा करिता ,संपादन गाळण्यांमधील अलिकडील बदलांची [[Special:AbuseFilter/history| हि यादी]] पाहा.",
- "abusefilter-log-entry-modify": "फेरबदल $1 ($2)",
"abusefilter-log-noresults": "निकाल नाहीत",
"abusefilter-diff-title": "आवृत्त्यांच्या दरम्यानचा फरक",
"abusefilter-diff-item": "बाब",
@@ -372,12 +373,5 @@
"abusefilter-diff-prev": "जुने बदल",
"abusefilter-diff-next": "नविनतम बदल",
"abusefilter-import-submit": "विदा(डाटा) आयात",
- "abusefilter-group-default": "अविचल (डिफॉल्ट)",
- "apihelp-abusefilterunblockautopromote-description": "अपशब्द गाळणीच्या घटनेद्वारे सदस्यास स्वयंचलित बढती मिळण्यासाठी त्यास अप्रतिबंधित करते.",
- "apihelp-abusefilterunblockautopromote-param-user": "आपणास अप्रतिबंधित करावयाचे असलेल्या सदस्याचे सदस्यनाव.",
- "apihelp-abusefilterunblockautopromote-example-1": "[[User:Example]]चे स्वयंबढतीमुळे त्यावर असलेला प्रतिबंध हटवा",
- "apihelp-query+abusefilters-description": "अपशब्द गाळणीचे वर्णन दाखवा.",
- "apihelp-query+abusefilters-example-1": "सक्षम व सार्वजनिक केलेल्या गाळण्यांची यादी करा",
- "apihelp-query+abusefilters-example-2": "गाळण्यांबाबत काही तपशिल दाखवा",
- "apihelp-query+abuselog-description": "यापैकी एका अपशब्द गाळणीने पकडलेल्या घटना दाखवा."
+ "abusefilter-group-default": "अविचल (डिफॉल्ट)"
}
diff --git a/AbuseFilter/i18n/ms.json b/AbuseFilter/i18n/ms.json
index cbe82718..9b69cb27 100644
--- a/AbuseFilter/i18n/ms.json
+++ b/AbuseFilter/i18n/ms.json
@@ -16,7 +16,6 @@
"abusefilter": "Tatarajah penapis salah guna",
"abuselog": "Log penyalahgunaan",
"abusefilter-intro": "Selamat datang ke antara muka pengurusan Penapis Salah Guna.\nAbuse Filter ialah mekanisme perisian automatik untuk mengenakan swakaji automatik kepada semua tindakan.\nAntara muka ini menunjukkan senarai penapis yang ditakrif, dan membenarkan mereka diubahsuai.",
- "abusefilter-mustbeeditor": "Untuk tujuan keselamatan, hanya pengguna dengan hak mengubahsuai penapis salah guna boleh menggunakan antara muka ini.",
"abusefilter-warning": "'''Amaran''': Tindakan ini telah dikenalpasti secara automatik sebagai berbahaya.\nSuntingan yang tidak membina akan dibalikkan dengan segera, dan suntingan tidak membina yang berat atau berulang-ulang akan menyebabkan akaun atau alamat IP anda disekat.\nJika anda percaya bahawa tindakan ini membina, sila tekan Simpan sekali lagi untuk mengesahkankannya.\nPenerangan ringkas tentang peraturan penyalahgunaan yang sepadan dengan tindakan anda ialah: $1",
"abusefilter-disallowed": "Tindakan ini telah dikenalpasti secara automatik sebagai berbahaya, dan oleh itu tidak dibenarkan.\nJika anda percaya bahawa tindakan anda itu membina, sila hubungi penyelia dan beritahu mereka mengenai perkara yang anda cuba lakukan.\nSatu penerangan ringkas tentang peraturan penyalahgunaan yang sepadan dengan tindakan anda ialah: $1",
"abusefilter-blocked-display": "Tindakan ini secara automatik telah dikenalpasti sebagai berbahaya,\ndan anda telah dilarang dari meneruskannya.\nSebagai tambahan, untuk melindungi {{SITENAME}}, akaun pengguna anda, dan semua alamat IP berkaitan telah disekat daripada menyunting.\nJika terdapat kesalahan, sila hubungi penyelia.\nPenerangan ringkas mengenai penyalahan peraturan yang anda lakukan ialah: $1",
@@ -82,8 +81,6 @@
"abusefilter-log-hide-hidden": "Sorokkan entri ini daripada tatapan umum",
"abusefilter-log-hide-reason": "Sebab:",
"abusefilter-log-hide-forbidden": "Anda tiada kebenaran untuk menyorokkan entri log penyalahgunaan.",
- "abusefilter-logentry-suppress": "\"[[$1]]\" disorokkan",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\" didedahkan",
"logentry-abusefilter-hit": "$1 mencetuskan $4, melakukan tindakan \"$5\" pada $3. Tindakan yang diambil: $6 ($7)",
"abusefilter-management": "Pengurusan penapis salah guna",
"abusefilter-list": "Semua penapis",
@@ -116,7 +113,6 @@
"abusefilter-list-options-scope-local": "Peraturan setempat sahaja",
"abusefilter-list-options-scope-global": "Peraturan sejagat sahaja",
"abusefilter-list-options-scope-all": "Peraturan setempat dan sejagat",
- "abusefilter-list-options-disabled": "Penapis yang dimatikan:",
"abusefilter-list-options-hidedisabled": "Sorokkan penapis yang dimatikan",
"abusefilter-list-options-submit": "Kemas kini",
"abusefilter-tools-text": "Inilah alat-alatan yang mungkin berguna untuk merumuskan dan menyahpepijatkan penapis salah guna.",
@@ -136,7 +132,6 @@
"abusefilter-edit-status-label": "Statistik:",
"abusefilter-edit-status": "Penapis ini telah memadani $2 ($3%) daripada $1 tindakan terkini.",
"abusefilter-edit-status-profile": "Penapis ini telah memadani $2 ($3%) daripada $1 tindakan terkini.\nSecara puratanya, masa berjalannya ialah $4ms, dan ia mengambil $5 syarat daripada had syarat.",
- "abusefilter-edit-throttled": "'''Amaran''': Penapis ini telah dimatikan secara automatik sebagai langkah keselamatan.\nIa telah mencapai had pemadanan lebih $1% tindakan.",
"abusefilter-edit-new": "Penapis baru",
"abusefilter-edit-save": "Simpan penapis",
"abusefilter-edit-id": "ID penapis:",
@@ -163,7 +158,6 @@
"abusefilter-edit-action-tag": "Tag suntingan ini untuk penyemakan selanjutnya",
"abusefilter-edit-throttle-count": "Bilangan tindakan untuk dibenarkan:",
"abusefilter-edit-throttle-period": "Tempoh masa",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|saat|saat}}",
"abusefilter-edit-throttle-groups": "Pendikit kumpulan ikut:\n:''(satu sebaris, gabungkan dengan tanda koma)''",
"abusefilter-edit-warn-message": "Pesanan sistem yang digunakan untuk amaran:",
"abusefilter-edit-warn-other": "Pesanan lain",
@@ -250,19 +244,18 @@
"abusefilter-edit-builder-vars-oldsize": "Saiz laman lama",
"abusefilter-edit-builder-vars-removedlines": "Baris yang dipadamkan dalam suntingan",
"abusefilter-edit-builder-vars-summary": "Ringkasan/sebab suntingan",
- "abusefilter-edit-builder-vars-article-id": "ID laman",
- "abusefilter-edit-builder-vars-article-ns": "Ruang nama laman",
- "abusefilter-edit-builder-vars-article-text": "Tajuk laman (tanpa ruang nama)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Tajuk penuh laman",
- "abusefilter-edit-builder-vars-article-views": "Kunjungan halaman",
+ "abusefilter-edit-builder-vars-page-id": "ID laman",
+ "abusefilter-edit-builder-vars-page-ns": "Ruang nama laman",
+ "abusefilter-edit-builder-vars-page-title": "Tajuk laman (tanpa ruang nama)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Tajuk penuh laman",
"abusefilter-edit-builder-vars-movedfrom-id": "ID laman sumber",
"abusefilter-edit-builder-vars-movedfrom-ns": "Ruang nama laman sumber",
- "abusefilter-edit-builder-vars-movedfrom-text": "Tajuk laman sumber",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Tajuk penuh laman sumber",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Tajuk laman sumber",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Tajuk penuh laman sumber",
"abusefilter-edit-builder-vars-movedto-id": "ID laman sasaran",
"abusefilter-edit-builder-vars-movedto-ns": "Ruang nama laman sasaran",
- "abusefilter-edit-builder-vars-movedto-text": "Tajuk laman sasaran",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Tajuk penuh laman sasaran",
+ "abusefilter-edit-builder-vars-movedto-title": "Tajuk laman sasaran",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Tajuk penuh laman sasaran",
"abusefilter-edit-builder-vars-user-editcount": "Jumlah suntingan pengguna",
"abusefilter-edit-builder-vars-user-age": "Umur akaun pengguna",
"abusefilter-edit-builder-vars-user-name": "Nama akaun pengguna",
@@ -325,7 +318,7 @@
"abusefilter-exception-regexfailure": "Ralat dalam ungkapan nalar \"$3\" di aksara $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Sampukan pembolehubah bina dalam \"$2\" yang terlarang pada aksara $1.",
"abusefilter-exception-outofbounds": "Butir senarai $2 tak wujud (saiz senarai = $3) diminta pada aksara $1.",
- "abusefilter-exception-notlist": "Memohon butir tatasusunan daripada bukan tatasusunan pada aksara $1.",
+ "abusefilter-exception-notarray": "Memohon butir tatasusunan daripada bukan tatasusunan pada aksara $1.",
"abusefilter-action-tag": "Tag",
"abusefilter-action-throttle": "Dikit",
"abusefilter-action-warn": "Ingatkan",
@@ -386,7 +379,6 @@
"abusefilter-topnav-import": "Import penapis",
"abusefilter-log-name": "Log Penapis Salah Guna",
"abusefilter-log-header": "Log ini menunjukkan ringkasan perubahan yang dibuat pada penapis.\nUntuk butiran lanjut, lihat [[Special:AbuseFilter/history|senarai]] perubahan penapis terkini.",
- "abusefilter-log-entry-modify": "$1 diubah suai ($2)",
"abusefilter-log-noresults": "Tiada hasil",
"abusefilter-diff-title": "Perbezaan antara versi",
"abusefilter-diff-item": "Butiran",
diff --git a/AbuseFilter/i18n/mt.json b/AbuseFilter/i18n/mt.json
index 2ca8e74b..c531cd00 100644
--- a/AbuseFilter/i18n/mt.json
+++ b/AbuseFilter/i18n/mt.json
@@ -12,7 +12,6 @@
"abusefilter": "Konfigurazzjoni tal-filtru tal-abbuż",
"abuselog": "Reġistru tal-abbuż",
"abusefilter-intro": "Merħba fl-interfaċċa tal-filtru tal-abbuż.\nIl-filtru tal-abbuż huwa mekkaniżmu ta' softwer awtomatiku li japplika ewristiċi awtomatiċi lil kull azzjoni.\nDin l-interfaċċa turi lista ta' filtri partikolari, u tħalli li jiġu modifikati.",
- "abusefilter-mustbeeditor": "Għal raġunijiet ta' sigurtà, huma biss l-utenti bid-dritt li jimmodifikaw il-filtri tal-abbuż li jistgħu jużaw din l-interfaċċa.",
"abusefilter-warning": "'''Attenzjoni''': Din l-azzjoni ġiet awtomatikament identifikata bħala ta' ħsara.\nIl-modifiki mhux kostruttivi jiġu mħassra mill-ewwel, u l-kontribuzzjonijiet ħżiena jew mhux kostruttivi ripetuti jwasslu biex il-kont jew l-indirizz IP tiegħek jiġi imblukkat.\nJekk temmen li l-modifika tiegħek hija kostruttiva, tista' terġa' tissottomettiha sabiex tikkonfermaha.\nDin deskrizzjoni qasira tar-regola tal-abbuż li tapplika fil-każ tal-azzjoni tiegħek: $1",
"abusefilter-disallowed": "Din l-azzjoni ġiet awtomatikament identifikata bħala ta' ħsara, u għalhekk ma tħallietx tiġi esegwita.\nJekk temmen li l-modifika tiegħek hija kostruttiva, informa wieħed mill- amministraturi dwar xi ppruvajt tagħmel.\nDin deskrizzjoni qasira tar-regola tal-abbuż li tapplika fil-każ tal-azzjoni tiegħek: $1",
"abusefilter-blocked-display": "Din l-azzjoni ġiet awtomatikament identifikata bħala ta' ħsara, u għalhekk ma tħallietx tiġi esegwita.\nBarra minn hekk, sabiex tiġi protetta {{SITENAME}}, il-kont tiegħek u l-indirizzi IP kollha assoċjati ġew imblukkati milli jagħmlu modifiki.\nJekk dan ġara bi żball, ikkuntatja minnufih lil amministratur.\nDeskrizzjoni qasira tar-regola tal-abbuż li ġiet vjolata hi: $1",
@@ -78,8 +77,6 @@
"abusefilter-log-hide-hidden": "Aħbi din id-daħla mid-dehra pubblika",
"abusefilter-log-hide-reason": "Raġuni:",
"abusefilter-log-hide-forbidden": "M'għandekx il-permess li taħbi daħliet tar-reġistru tal-abbużi",
- "abusefilter-logentry-suppress": "aħbi \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "uri \"[[$1]]\"",
"logentry-abusefilter-hit": "$1 attiva $4, esegwixxa l-azzjoni \"$5\" fuq $3. Azzjonijiet meħuda: $6 ($7)",
"abusefilter-management": "Ġestjoni tal-filtru tal-abbuż",
"abusefilter-list": "Il-filtri kollha",
@@ -111,7 +108,6 @@
"abusefilter-list-options-scope": "Uri filtri minn:",
"abusefilter-list-options-scope-local": "Wiki lokali",
"abusefilter-list-options-scope-global": "Regoli globali",
- "abusefilter-list-options-disabled": "Filtri diżattivati:",
"abusefilter-list-options-hidedisabled": "Aħbi filtri diżattivati",
"abusefilter-list-options-submit": "Aġġorna",
"abusefilter-tools-text": "Hawnhekk hawn xi għodda li jistgħu jkunu utli fil-bini u l-verifika tal-filtri kontra l-abbużi.",
@@ -131,7 +127,6 @@
"abusefilter-edit-status-label": "Statistika:",
"abusefilter-edit-status": "Mill-aħħar {{PLURAL:$1|azzjoni|$1 azzjonijiet}}, dan il-filtru sab {{PLURAL:$2|korrispondenza waħda|$2 korrispondenzi}} ($3%).",
"abusefilter-edit-status-profile": "Mill-aħħar {{PLURAL:$1|azzjoni|$1 azzjonijiet}}, dan il-filtru sab {{PLURAL:$2|korrispondenza waħda|$2 korrispondenzi}} ($3%).\nIl-ħin medju ta' eżekuzzjoni hu ta' $4ms, u jikkonsma {{PLURAL:$5|kundizzjoni waħda|$5 kundizzjonijiet}} tal-limitu ta' kundizzjonijiet.",
- "abusefilter-edit-throttled": "'''Twissija''': Dan il-filtru ġie awtomatikament diżattivat bħala miżura ta' sigurtà.\nDan laħaq il-limitu massimu ta' korrispondenzi, pari għal $1% tal-azzjonijiet.",
"abusefilter-edit-new": "Filtru ġdid",
"abusefilter-edit-save": "Salva l-filtru",
"abusefilter-edit-id": "ID tal-filtru:",
@@ -150,7 +145,6 @@
"abusefilter-edit-consequences": "Azzjonijiet meħuda meta l-kondizzjonijiet qabblu",
"abusefilter-edit-action-warn": "Attiva dawn l-azzjonijiet meta tagħti twissija lill-utent",
"abusefilter-edit-action-disallow": "Ipprevjeni l-utent milli jagħmel din l-azzjoni in kwistjoni",
- "abusefilter-edit-action-flag": "Immarka din il-modifika fir-reġistru tal-abbuż",
"abusefilter-edit-action-blockautopromote": "Irrevoka l-istat ta' awtokonfermat tal-utent",
"abusefilter-edit-action-degroup": "Neħħi l-utent mill-gruppi kollha privileġġjati",
"abusefilter-edit-action-block": "Imblokka l-utent u/jew l-indirizz IP mill-immodifikar",
@@ -159,7 +153,6 @@
"abusefilter-edit-action-tag": "Immarka din il-modifika għal aktar verifika",
"abusefilter-edit-throttle-count": "Numru ta' azzjonijiet permessi:",
"abusefilter-edit-throttle-period": "Perjodu ta' żmien:",
- "abusefilter-edit-throttle-seconds": "{{PLURAL:$1|sekonda|$1 sekondi}}",
"abusefilter-edit-throttle-groups": "Kriterji għar-raggruppament għad-dewmien:\n:''(waħda għal kull linja, imwaħħda bil-virgoli)''",
"abusefilter-edit-warn-message": "Messaġġ tas-sistema li għandu jiġu wżat bħala avviż:",
"abusefilter-edit-warn-other": "Messaġ ieħor",
@@ -234,19 +227,18 @@
"abusefilter-edit-builder-vars-oldsize": "Daqs qadim tal-paġna",
"abusefilter-edit-builder-vars-removedlines": "Linji mneħħija mill-modifika",
"abusefilter-edit-builder-vars-summary": "Taqsira/raġuni",
- "abusefilter-edit-builder-vars-article-id": "ID tal-paġna",
- "abusefilter-edit-builder-vars-article-ns": "Spazju tal-ismijiet tal-paġna",
- "abusefilter-edit-builder-vars-article-text": "Titlu tal-paġna (mingħajr spazju tal-ismijiet)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Isem sħiħ tal-paġna",
- "abusefilter-edit-builder-vars-article-views": "Dehriet tal-paġna",
+ "abusefilter-edit-builder-vars-page-id": "ID tal-paġna",
+ "abusefilter-edit-builder-vars-page-ns": "Spazju tal-ismijiet tal-paġna",
+ "abusefilter-edit-builder-vars-page-title": "Titlu tal-paġna (mingħajr spazju tal-ismijiet)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Isem sħiħ tal-paġna",
"abusefilter-edit-builder-vars-movedfrom-id": "ID tal-paġna oriġinali tat-tmexxija",
"abusefilter-edit-builder-vars-movedfrom-ns": "Spazju tal-ismijiet tal-paġna oriġinali tat-tmexxija",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titlu tal-paġna oriġinali tat-tmexxija",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Titlu sħiħ tal-paġna oriġinali tat-tmexxija",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titlu tal-paġna oriġinali tat-tmexxija",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Titlu sħiħ tal-paġna oriġinali tat-tmexxija",
"abusefilter-edit-builder-vars-movedto-id": "ID tal-paġna ta' destinazzjoni tat-tmexxija",
"abusefilter-edit-builder-vars-movedto-ns": "Spazju tal-ismijiet tal-paġna ta' destinazzjoni tat-tmexxija",
- "abusefilter-edit-builder-vars-movedto-text": "Titlu tal-paġna ta' destinazzjoni tat-tmexxija",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Titlu sħiħ tal-paġna ta' destinazzjoni tat-tmexxija",
+ "abusefilter-edit-builder-vars-movedto-title": "Titlu tal-paġna ta' destinazzjoni tat-tmexxija",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Titlu sħiħ tal-paġna ta' destinazzjoni tat-tmexxija",
"abusefilter-edit-builder-vars-user-editcount": "Għadd ta' modifiki tal-utent",
"abusefilter-edit-builder-vars-user-age": "Età tal-kont tal-utent",
"abusefilter-edit-builder-vars-user-name": "Isem tal-kont tal-utent",
@@ -361,7 +353,6 @@
"abusefilter-topnav-import": "Importa filtru",
"abusefilter-log-name": "Reġistru tal-filtru tal-abbuż",
"abusefilter-log-header": "Dan ir-reġistru juri sommarju ta' modifiki li saru mill-filtru.\nGħal aktar dettalji, ara l-[[Special:AbuseFilter/history|lista]] ta' modifiki riċenti tal-filtru.",
- "abusefilter-log-entry-modify": "immodifika $1 ($2)",
"abusefilter-log-noresults": "L-ebda riżultat",
"abusefilter-diff-title": "Differenzi bejn verżjonijiet",
"abusefilter-diff-item": "Element",
diff --git a/AbuseFilter/i18n/mwl.json b/AbuseFilter/i18n/mwl.json
index 26dd5aec..3fd139f5 100644
--- a/AbuseFilter/i18n/mwl.json
+++ b/AbuseFilter/i18n/mwl.json
@@ -1,7 +1,8 @@
{
"@metadata": {
"authors": [
- "MokaAkashiyaPT"
+ "MokaAkashiyaPT",
+ "Athena in Wonderland"
]
},
"abusefilter": "Cunfiguraçon de l filtro de abusos",
diff --git a/AbuseFilter/i18n/my.json b/AbuseFilter/i18n/my.json
index cd4f87a1..c3e7f601 100644
--- a/AbuseFilter/i18n/my.json
+++ b/AbuseFilter/i18n/my.json
@@ -2,13 +2,194 @@
"@metadata": {
"authors": [
"Erikoo",
- "Ninjastrikers"
+ "Ninjastrikers",
+ "Dr Lotus Black"
]
},
- "abusefilter-log-search-user": "အသုံးပြုသူ -",
- "abusefilter-log-search-title": "ခေါင်းစဉ် :",
+ "abusefilter": "အလွဲသုံးစားမှု စိစစ်စနစ် ပြင်ဆင်ခြင်း",
+ "abuselog": "အလွဲသုံးစားပြုမှု မှတ်တမ်း",
+ "abusefilter-intro": "အလွဲသုံးစားမှု စိစစ်စနစ် စီမံခန့်ခွဲရေး interface မှ ကြိုဆိုပါသည်။ အလွဲသုံးစားမှု စိစစ်စနစ်သည် ဆောင်ရွက်ချက်အားလုံးကို အလိုအလျောက် တုန့်ပြန်သည့် အလိုအလျောက် ဆော့ဝဲလ်ဖြစ်ပါသည်။ ဤ interface တွင် သတ်မှတ်ထားသော စိစစ်စနစ်များကို ပြသထားပြီး ပြုပြင်ရန်လည်း ခွင့်ပြုထားပါသည်။",
+ "abusefilter-blocker": "အလွဲသုံးစားမှု စိစစ်စနစ်",
+ "abusefilter-blockreason": "အလွဲသုံးစားမှု စိစစ်စနစ်ဖြင့် အလိုအလျောက် ပိတ်ပင်တားဆီးလိုက်သည်။ ကိုက်ညီသောဥပဒေ၏ ဖော်ပြချက်မှာ $1",
+ "right-abusefilter-modify": "အလွဲသုံးစားမှု စိစစ်စနစ်များကို ပြုပြင်ရန်",
+ "right-abusefilter-view": "အလွဲသုံးစားမှု စိစစ်စနစ်များကို ကြည့်ရန်",
+ "right-abusefilter-log": "အလွဲသုံးစားမှုမှတ်တမ်းကို ကြည့်ရန်",
+ "action-abusefilter-modify": "အလွဲသုံးစားမှု စိစစ်စနစ်များကို ပြုပြင်ရန်",
+ "action-abusefilter-view": "အလွဲသုံးစားမှု စိစစ်စနစ်များကို ကြည့်ရန်",
+ "action-abusefilter-log": "အလွဲသုံးစားမှုမှတ်တမ်းကို ကြည့်ရန်",
+ "abusefilter-log": "အလွဲသုံးစားမှု စိစစ်စနစ် မှတ်တမ်း",
+ "abusefilter-log-summary": "ဤမှတ်တမ်းသည် စိစစ်မှုများက ဖမ်းမိသော လုပ်ဆောင်ချက်အားလုံး၏စာရင်းကို ပြသပေးသည်။",
+ "abusefilter-log-search": "အလွဲသုံးစားမှု မှတ်တမ်းကိုကြည့်ရန်",
+ "abusefilter-log-search-user": "အသုံးပြုသူ:",
+ "abusefilter-log-search-filter": "စိစစ် အိုင်ဒီများ (ဒေါင်လိုက်မျဉ်း '|' ခြား၍):",
+ "abusefilter-log-search-title": "ခေါင်းစဉ်:",
+ "abusefilter-log-search-wiki": "ဝီကီ",
+ "abusefilter-log-search-impact": "သက်ရောက်မှု:",
+ "abusefilter-log-search-impact-all": "ဆောင်ရွက်ချက်များ အားလုံး",
+ "abusefilter-log-search-impact-saved": "သိမ်းပြီးသော ပြောင်းလဲမှုများသာ",
+ "abusefilter-log-search-impact-not-saved": "သိမ်းထားသော ပြောင်းလဲမှုများ မပါဘဲ",
+ "abusefilter-log-search-entries-label": "မြင်နိုင်မှု:",
+ "abusefilter-log-search-action-label": "အစပျိုး လုပ်ဆောင်ချက်:",
+ "abusefilter-log-search-action-other": "အခြား",
+ "abusefilter-log-search-action-any": "မည်သည့်အရာမဆို",
+ "abusefilter-log-search-action-taken-label": "လုပ်ဆောင်ချက် ဆောင်ရွက်ပြီး:",
+ "abusefilter-log-search-action-taken-any": "မည်သည့်အရာမဆို",
"abusefilter-log-search-submit": "ရှာဖွေရန်",
+ "abusefilter-log-detailedentry-local": "စိစစ်မှု $1",
+ "abusefilter-log-detailslink": "အသေးစိတ်",
+ "abusefilter-log-diff": "ကွဲပြားမှု",
+ "abusefilter-log-details-val": "တန်ဖိုး",
+ "abusefilter-log-details-checkuser": "စုံစမ်းစစ်ဆေးသူ",
"abusefilter-log-noactions": "အမည်ညွှန်းမရှိ",
+ "abusefilter-log-linkoncontribs": "အလွဲသုံးစားပြုမှု မှတ်တမ်း",
+ "abusefilter-log-linkoncontribs-text": "{{GENDER:$1|ဤအသုံးပြုသူ}} အတွက် အလွဲသုံးစားမှု မှတ်တမ်း",
+ "abusefilter-log-linkonhistory": "အလွဲသုံးစားမှု မှတ်တမ်းကို ကြည့်ရန်",
+ "abusefilter-log-linkonhistory-text": "ဤစာမျက်နှာအတွက် အလွဲသုံးစားမှုမှတ်တမ်းကို ကြည့်ရန်",
"abusefilter-log-hide-reason": "အ​ကြောင်း​ပြ​ချက်:",
- "abusefilter-examine-submit": "ရှာဖွေရန်"
+ "abusefilter-log-hide-reason-other": "အခြားသော/နောက်ထပ် အကြောင်းပြချက် -",
+ "abusefilter-log-entry-suppress": "$1 က $3 ကို {{GENDER:$2|ဝှက်ခဲ့သည်}}",
+ "log-action-filter-abusefilter": "စိစစ်မှု အပြောင်းအလဲ အမျိုးအစား:",
+ "log-action-filter-abusefilter-create": "စိစစ်မှုအသစ် ဖန်တီးခြင်း",
+ "log-action-filter-abusefilter-modify": "စိစစ်မှု ပြုပြင်ပြောင်းလဲခြင်း",
+ "abusefilter-management": "အလွဲသုံးစားမှု စိစစ်စနစ် စီမံခန့်ခွဲရေး",
+ "abusefilter-list": "စိစစ်မှုများ အားလုံး",
+ "abusefilter-list-id": "စိစစ်မှု အိုင်ဒီ",
+ "abusefilter-list-status": "အခြေအနေ",
+ "abusefilter-list-public": "အများကြည့် ဖော်ပြချက်",
+ "abusefilter-list-consequences": "အကျိုးဆက်များ",
+ "abusefilter-list-visibility": "မြင်နိုင်မှု",
+ "abusefilter-list-hitcount": "ထိမှန်မှု ကြိမ်ရေ",
+ "abusefilter-list-edit": "ပြင်ဆင်ရန်",
+ "abusefilter-list-details": "အသေးစိတ်",
+ "abusefilter-list-limit": "စာမျက်နှာအလိုက် အရေအတွက်",
+ "abusefilter-list-lastmodified": "နောက်ဆုံး ပြုပြင်မှု",
+ "abusefilter-list-group": "စိစစ်မှု အုပ်စု",
+ "abusefilter-hidden": "ပုဂ္ဂလိက",
+ "abusefilter-unhidden": "အများကြည့်",
+ "abusefilter-enabled": "လုပ်ခွင့်ပြုထားပြီး",
+ "abusefilter-deleted": "ဖျက်ပြီး",
+ "abusefilter-disabled": "ပိတ်ထားပြီး",
+ "abusefilter-new": "စိစစ်မှုအသစ်တစ်ခု ဖန်တီးရန်",
+ "abusefilter-return": "စိစစ်မှု စီမံခန့်ခွဲရေးသို့ ပြန်သွားရန်",
+ "abusefilter-status-global": "ဂလိုဘယ်",
+ "abusefilter-list-options": "ရွေးပိုင်ခွင့်",
+ "abusefilter-list-options-deleted": "ဖျက်ထားသော စိစစ်မှုများ:",
+ "abusefilter-list-options-deleted-only": "ဖျက်ထားသော စိစစ်မှုများကိုသာ ပြရန်",
+ "abusefilter-list-options-deleted-hide": "ဖျက်ထားသော စိစစ်မှုများကို ဝှက်ရန်",
+ "abusefilter-list-options-deleted-show": "ဖျက်ထားသော စိစစ်မှုများ အပါဝင်",
+ "abusefilter-list-options-scope": "စိစစ်မှုများကို ပြရန်:",
+ "abusefilter-list-options-scope-local": "ဒေသခံ စည်းမျဉ်းများသာ",
+ "abusefilter-list-options-scope-global": "ဂလိုဘယ် စည်းမျဉ်းများသာ",
+ "abusefilter-list-options-scope-all": "ဒေသခံနှင့် ဂလိုဘယ် စည်းမျဉ်းများ",
+ "abusefilter-list-options-further-options": "ထပ်ပိုး ရွေးချယ်စရာများ:",
+ "abusefilter-list-options-hidedisabled": "ဖျက်ထားသော စိစစ်မှုများကို ဝှက်ရန်",
+ "abusefilter-list-options-hideprivate": "ပုဂ္ဂလိက စိစစ်မှုများကို ဝှက်ထားရန်",
+ "abusefilter-list-options-searchfield": "စည်းမျဉ်းများအတွင်း ရှာဖွေရန်:",
+ "abusefilter-list-options-searchoptions": "ရှာဖွေရေး နည်းလမ်း:",
+ "abusefilter-list-options-submit": "မွမ်းမံ",
+ "abusefilter-tools-reautoconfirm-user": "အသုံးပြုသူ:",
+ "abusefilter-edit": "အလွဲသုံးစားမှု စိစစ်စနစ်ကို တည်းဖြတ်နေသည်",
+ "abusefilter-edit-subtitle": "စိစစ်မှုစနစ် $1 ကို တည်းဖြတ်နေသည်",
+ "abusefilter-edit-subtitle-new": "စိစစ်မှုစနစ်ကို ဖန်တီးနေသည်",
+ "abusefilter-edit-token-not-match": "တည်းဖြတ်မှု မသိမ်းဆည်းခဲ့ပါ။ ကျေးဇူးပြု၍ ထပ်မံသိမ်းဆည်းပါ။",
+ "abusefilter-edit-status-label": "စာရင်းအင်း:",
+ "abusefilter-edit-new": "စိစစ်မှုစနစ် အသစ်",
+ "abusefilter-edit-save": "စိစစ်မှုစနစ်ကို သိမ်းရန်",
+ "abusefilter-edit-id": "စိစစ်မှု အိုင်ဒီ:",
+ "abusefilter-edit-description": "ဖော်ပြချက်:\n:''(လူတိုင်း ကြည့်ရှုနိုင်)''",
+ "abusefilter-edit-field-description": "ဖော်ပြချက်",
+ "abusefilter-edit-group": "စိစစ်မှု အုပ်စု:",
+ "abusefilter-edit-global": "ဂလိုဘယ် စိစစ်မှု",
+ "abusefilter-edit-rules": "အခြေနေများ:",
+ "abusefilter-edit-field-conditions": "အခြေနေများ",
+ "abusefilter-edit-notes": "မှတ်စုများ:",
+ "abusefilter-edit-throttle-period": "အချန်အပိုင်းအခြား (စက္ကန့်ဖြင့်):",
+ "abusefilter-edit-throttle-ip": "အိုင်ပီလိပ်စာ",
+ "abusefilter-edit-throttle-user": "အသုံးပြုသူ အကောင့်",
+ "abusefilter-edit-throttle-editcount": "တည်းဖြတ်မှု အရေအတွက်",
+ "abusefilter-edit-throttle-site": "ဆိုဒ်တစ်ခုလုံး",
+ "abusefilter-edit-throttle-page": "စာမျက်နှာ",
+ "abusefilter-edit-warn-other": "အခြားမက်ဆေ့",
+ "abusefilter-edit-warn-actions": "ဆောင်ရွက်ချက်များ",
+ "abusefilter-edit-main": "စိစစ်မှုစနစ် ပါရာမီတာများ",
+ "abusefilter-edit-viewhistory": "ဤစိစစ်မှု၏ ရာဇဝင်အား ကြည့်ရှုရန်",
+ "abusefilter-edit-history": "ရာဇဝင်:",
+ "abusefilter-edit-tools": "ကိရိယာများ:",
+ "abusefilter-edit-builder-vars-action": "ဆောင်ရွက်ချက်",
+ "abusefilter-edit-builder-vars-page-id": "စာမျက်နှာ အိုင်ဒီ",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "စာမျက်နှာခေါင်းစဉ် အပြည့်အစုံ",
+ "abusefilter-edit-builder-vars-page-age": "စာမျက်နှာ သက်တမ်း (စက္ကန့်ဖြင့်)",
+ "abusefilter-edit-builder-vars-user-editcount": "အသုံးပြုသူ၏ တည်းဖြတ်မှုအရေအတွက်",
+ "abusefilter-edit-builder-vars-user-age": "အသုံးပြုအကောင့်သူ၏ သက်တမ်း",
+ "abusefilter-edit-builder-vars-user-name": "အသုံးပြုသူ၏ အမည်",
+ "abusefilter-edit-builder-vars-restrictions-edit": "စာမျက်နှာ၏ ကာကွယ်မှုအဆင့်ကို ပြင်ဆင်ရန်",
+ "abusefilter-edit-builder-vars-restrictions-move": "စာမျက်နှာ၏ ကာကွယ်မှုအဆင့်ကို ရွေ့ပြောင်းရန်",
+ "abusefilter-edit-builder-vars-restrictions-create": "စာမျက်နှာ၏ ကာကွယ်မှုကို ဖန်တီးရန်",
+ "abusefilter-filter-log": "လတ်တလော စိစစ်မှုစနစ် အပြောင်းအလဲများ",
+ "abusefilter-history": "အလွဲသုံးစားမှု စိစစ်စနစ် #$1 အတွက် ပြောင်းလဲမှုရာဇဝင်",
+ "abusefilter-history-foruser": "$1 အလိုက် ပြောင်းလဲမှုများ",
+ "abusefilter-history-hidden": "ဝှက်",
+ "abusefilter-history-enabled": "လုပ်ခွင့်ပြုထားပြီး",
+ "abusefilter-history-global": "ဂလိုဘယ်",
+ "abusefilter-history-timestamp": "အချိန်",
+ "abusefilter-history-user": "အသုံးပြုသူ",
+ "abusefilter-history-public": "အများကြည့် စိစစ်မှုစနစ် ဖော်ပြချက်",
+ "abusefilter-history-filter": "စိစစ်မှု စည်းမျဉ်း",
+ "abusefilter-history-comments": "မှတ်ချက်များ",
+ "abusefilter-history-actions": "ဆောင်ရွက်ချက်များ",
+ "abusefilter-history-deleted": "ဖျက်ပြီးပြီ",
+ "abusefilter-history-filterid": "စိစစ်မှု",
+ "abusefilter-history-select-legend": "ရှာဖွေမှုကို သန့်စင်ရန်",
+ "abusefilter-history-select-user": "အသုံးပြုသူ :",
+ "abusefilter-history-select-filter": "စိစစ်မှု အိုင်ဒီ:",
+ "abusefilter-history-select-submit": "သန့်စင်ရန်",
+ "abusefilter-history-diff": "အပြောင်းအလဲများ",
+ "abusefilter-action-tag": "စာတွဲ",
+ "abusefilter-action-throttle": "ဖမ်းချုပ်",
+ "abusefilter-action-warn": "သတိပေး",
+ "abusefilter-action-blockautopromote": "အလိုအလျောက်အရောင်းမြှင့်တင်ခြင်းကို တားဆီး",
+ "abusefilter-action-block": "ပိတ်ပင်",
+ "abusefilter-action-degroup": "အုပ်စုများမှ ဖယ်ရှား",
+ "abusefilter-action-disallow": "ခွင့်မပြု",
+ "abusefilter-revert-periodstart": "ကာလ စတင်:",
+ "abusefilter-revert-periodend": "ကာလ ပြီးဆုံး",
+ "abusefilter-revert-search": "လုပ်ဆောင်ချက်များ ရွေးချယ်ရန်",
+ "abusefilter-revert-filter": "စိစစ်မှု အိုင်ဒီ:",
+ "abusefilter-revert-confirm": "အတည်ပြု",
+ "abusefilter-revert-reasonfield": "အ​ကြောင်း​ပြ​ချက်:",
+ "abusefilter-test-user": "အသုံးပြုသူအလိုက် ပြောင်းလဲမှုများ:",
+ "abusefilter-test-nobots": "ဘော့ တည်းဖြတ်မှုများကို ဝှက်ရန်",
+ "abusefilter-test-period-start": "ပြောင်းလဲမှုများ လုပ်ဆောင်ပြီးနောက်:",
+ "abusefilter-test-period-end": "ပြောင်းလဲမှုများ မလုပ်ဆောင်ခင်:",
+ "abusefilter-test-action": "ဆောင်ရွက်ချက် အမျိုးအစား:",
+ "abusefilter-test-search-type-all": "ဆောင်ရွက်ချက်များ အားလုံး",
+ "abusefilter-test-search-type-edit": "တည်းဖြတ်မှုများ",
+ "abusefilter-test-search-type-move": "ရွေ့ပြောင်းမှုများ",
+ "abusefilter-test-search-type-delete": "ဖျက်ပစ်ခြင်းများ",
+ "abusefilter-test-search-type-upload": "ဖိုင်တင်ခြင်းများ",
+ "abusefilter-test-search-type-createaccount": "အကောင့်ဖန်တီးသူမှုများ",
+ "abusefilter-changeslist-examine": "စစ်ဆေး",
+ "abusefilter-examine": "သီးသန့်ပြောင်းလဲမှုများကို စစ်ဆေးရန်",
+ "abusefilter-examine-intro": "ဤစာမျက်နှာသည် သီးသန့်အပြောင်းအလဲအတွက် အလွဲသုံးစားမှု စိစစ်စနစ်မှ ထုတ်ပြန်သည့် ပြောင်းလဲနိုင်သောအကြောင်းအရာများကို စစ်ဆေးရန်နှင့် စမ်းသပ်ရန် ခွင့်ပြုသည်။",
+ "abusefilter-examine-legend": "ပြောင်းလဲမှုများကို ရွေးပါ",
+ "abusefilter-examine-user": "အသုံးပြုသူ:",
+ "abusefilter-examine-title": "စာမျက်နှာ ခေါင်းစဉ်:",
+ "abusefilter-examine-submit": "ရှာဖွေရန်",
+ "abusefilter-examine-test-button": "စိစစ်မှုစနစ်ကို စမ်းသပ်ရန်",
+ "abusefilter-topnav": "'''အလွဲသုံးစား စိစစ်မှု အညွှန်း'''",
+ "abusefilter-topnav-home": "ပင်မ",
+ "abusefilter-topnav-examine": "ယခင်တည်းဖြတ်မှုများကို စစ်ဆေးရန်",
+ "abusefilter-topnav-log": "အလွဲသုံးစားပြုမှု မှတ်တမ်း",
+ "abusefilter-topnav-tools": "အပြစ်ရှာ ကိရိယာများ",
+ "abusefilter-topnav-import": "စိစစ်မှုစနစ် တင်သွင်းရန်",
+ "abusefilter-log-name": "အလွဲသုံးစားမှု စိစစ်စနစ် မှတ်တမ်း",
+ "abusefilter-log-header": "ဤမှတ်တမ်းသည် စိစစ်မှုစနစ်ရှိ ပြုလုပ်ထားသော ပြောင်းလဲမှုများ၏ အကျဉ်းချုပ်ကို ဖော်ပြပေးသည်။ အသေးစိတ် ပြည့်စုံစွာကြည့်လိုပါက လတ်တလော စိစစ်မှု အပြောင်းအလဲများ [[Special:AbuseFilter/history|စာရင်း]]ကို ကြည့်ပါ။",
+ "abusefilter-log-noresults": "မည်သည့်ရလဒ်မှ မရှိပါ",
+ "abusefilter-diff-title": "ဗားရှင်းများကြား ကွဲပြားမှုများ",
+ "abusefilter-diff-info": "အခြေခံသတင်းအချက်အလက်",
+ "abusefilter-diff-backhistory": "စိစစ်မှုရာဇဝင်သို့ ပြန်သွားရန်",
+ "abusefilter-diff-prev": "ပိုဟောင်းသော ပြောင်းလဲမှု",
+ "abusefilter-diff-next": "ပိုသစ်သော ပြောင်းလဲမှု",
+ "abusefilter-group-default": "နဂိုအတိုင်း",
+ "abusefilter-log-ip-not-available": "မရရှိနိုင်ပါ"
}
diff --git a/AbuseFilter/i18n/myv.json b/AbuseFilter/i18n/myv.json
index 8882a280..e82f76a4 100644
--- a/AbuseFilter/i18n/myv.json
+++ b/AbuseFilter/i18n/myv.json
@@ -42,7 +42,6 @@
"abusefilter-list-options-scope-local": "Ансяк тескень видечитне",
"abusefilter-list-options-scope-global": "Ансяк глобальной видечитне",
"abusefilter-list-options-scope-all": "Тескень-глобалонь видечитне",
- "abusefilter-list-options-disabled": "Ве ёнов аравтозь сувтеметне:",
"abusefilter-list-options-hidedisabled": "Кекшемс ве ёнов аравтозь сувтеметнень",
"abusefilter-list-options-submit": "Одкстомтомс",
"abusefilter-tools-submitexpr": "Питне путомс",
@@ -54,7 +53,6 @@
"abusefilter-edit-enabled": "Тевс нолдавозо сувтемесь",
"abusefilter-edit-deleted": "Тешкстамс нардазекс",
"abusefilter-edit-notes": "Тешкстамот:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|секунда|секундат}}",
"abusefilter-edit-warn-actions": "Тевтеематне:",
"abusefilter-edit-warn-edit": "Шкамс/Витнемс-петнемс кочказь сёрминенть",
"abusefilter-edit-main": "Сувтемень параметратне",
@@ -83,9 +81,9 @@
"abusefilter-edit-builder-vars-delta": "Зяросо полавтовсь витнемстэ-петнемстэ",
"abusefilter-edit-builder-vars-newsize": "Лопанть од покшолмазо",
"abusefilter-edit-builder-vars-oldsize": "Лопанть икелень покшолмазо",
- "abusefilter-edit-builder-vars-article-id": "Лопа ID",
- "abusefilter-edit-builder-vars-article-ns": "Лопань лем потмо",
- "abusefilter-edit-builder-vars-article-text": "Лопа конякс (лем потмовтомо)",
+ "abusefilter-edit-builder-vars-page-id": "Лопа ID",
+ "abusefilter-edit-builder-vars-page-ns": "Лопань лем потмо",
+ "abusefilter-edit-builder-vars-page-title": "Лопа конякс (лем потмовтомо)",
"abusefilter-edit-builder-vars-user-age": "Совамо тарканть шказо",
"abusefilter-edit-builder-vars-user-name": "Совамо тарканть лемезэ",
"abusefilter-edit-builder-vars-file-size": "Файланть покшолмазо байтасо",
diff --git a/AbuseFilter/i18n/nah.json b/AbuseFilter/i18n/nah.json
index 8e158418..c952882c 100644
--- a/AbuseFilter/i18n/nah.json
+++ b/AbuseFilter/i18n/nah.json
@@ -7,12 +7,12 @@
]
},
"abusefilter-log-search-user": "Tlatequitiltilīlli:",
- "abusefilter-log-search-title": "Tōcāitl:",
+ "abusefilter-log-search-title": "Tocaitl:",
"abusefilter-log-search-submit": "Tlatemoliztli",
"abusefilter-log-noactions": "ahtlein",
"abusefilter-log-hide-reason": "Tleca:",
"abusefilter-list-edit": "Tlapatlaliztli",
- "abusefilter-edit-throttle-period": "Cāhuitl:",
+ "abusefilter-edit-throttle-period": "Cahuitl:",
"abusefilter-examine-title": "Tlahcuilolamatocaitl:",
"abusefilter-examine-submit": "Tlatemoliztli",
"abusefilter-topnav-home": "Pehualoyan"
diff --git a/AbuseFilter/i18n/nap.json b/AbuseFilter/i18n/nap.json
index 821336ae..c0a80bfe 100644
--- a/AbuseFilter/i18n/nap.json
+++ b/AbuseFilter/i18n/nap.json
@@ -2,28 +2,28 @@
"@metadata": {
"authors": [
"Chelin",
- "C.R."
+ "C.R.",
+ "Ruthven"
]
},
"abusefilter-desc": "Appreca n'euristica automateca a 'e cagnamiente",
"abusefilter": "Configurazion d' 'o filtro anti abbuse",
"abuselog": "Riggistro 'e ll'abbuse",
"abusefilter-intro": "Bemmenuto dint'a l'interfazze 'e gistione 'e filtre anti-abbuse.\n'O filtro abbuse è nu meccanismo software pe' n'apprecà euristeche automateche a tutte l'aziune.\nChist'interfazze fà vedè n'elenco 'e filtre definite, e cunzente a chiste d'essere cagnate.",
- "abusefilter-mustbeeditor": "Pe mutive 'e sicurezza, sulamente l'utente ch' 'e deritte 'e cagnà 'e filtre abbuse ponno ausà sta nterfazza.",
"abusefilter-warning": "'''Attenziò''': St'azione è stata automaticamente identificata comme pericolosa.\n'E cagnamiente nun costruttive so' state annullate ampress ampress, e 'e cagnamiente egregge o ripetitive se segnarranno ncopp' 'o cunto o l'indirizzo IP vuosto ca sarrà bloccato.\n\nSi penzate ca st'azione fosse costruttiva, 'a putisseve signà n'ata vota p' 'o cunfermà. Cu na descriziona ampresso 'e l'azione d'abbuso ca soddisfacesse l'aziona vuosta comme: $1",
"abusefilter-disallowed": "St'azione è stata automaticamente identificata comme pericolosa e, allora nun s'è premmessa.\nSi cridete ca l'aziona vuosta è custruttiva, pe' piacere nfurmate n'ammenistratore 'e chillo ca vulive fà.\nNa descrizione veloce d' 'a regola d'abbuse ncopp'a l'aziona vuosta fosse comm'a chesta: $1",
"abusefilter-blocked-display": "St'azione è stata automaticamente identificata comme pericolosa, e vuje site stato/a bluccato 'a ll'esecuziona soja. \nPure, pe' pruteggere {{SITENAME}}, ll'utente vuosto e ll'IP suòcie a vuje so' state bluccate 'a putè cagnà coccosa.\nSi fosse stato surtanto n'errore, pe' piacere cuntattate n'ammenistatore.\nNa descriziona ampress d' 'e regole 'e ll'abbuse c'avite fato se tròva ccà: $1",
"abusefilter-blocker": "Filtro anti abbuse",
- "abusefilter-blockreason": "Bluccato/a automaticamente 'a nu filtro 'abbuse.\nDescrizione d' 'a regola ccà: $1",
+ "abusefilter-blockreason": "Fremmato automaticamente pe nu filtro 'abbuse.\nDescrizione d' 'a regola ccà: $1",
"abusefilter-degroupreason": "Deritte automatecamente luvate 'a 'o filtro abbuse.\nDescrizione d' 'a regola: $1",
- "abusefilter-accountreserved": "Stu nomme 'e cunto è astipato pe ll'ausà pe' bbia d' 'o filtro abbuse.",
+ "abusefilter-accountreserved": "Sto nomme 'e cunto è astipato p' 'o filtro abbuse.",
"right-abusefilter-modify": "Cagna 'e filtre d'abbuse",
"right-abusefilter-view": "Vide 'e filtre d'abbuse",
"right-abusefilter-log": "Vide 'o riggistro d'abbuse",
"right-abusefilter-log-detail": "Vide cchiù ndettaglio 'e riggistre d'abbuse",
"right-abusefilter-private": "Vide 'e date private int' 'o riggistro d'abbuse",
"right-abusefilter-modify-restricted": "Càgna 'e filtre d'abbuse cu l'aziune lemmetate",
- "right-abusefilter-revert": "Annulla tutte 'e cagnamiente 'a nu filtro d'abbuse dato",
+ "right-abusefilter-revert": "Sfàje tutt' 'e cagnamiente 'e nu filtro d'abbuse dato",
"right-abusefilter-view-private": "Vide filtre abbuse nzignate ccà comme private",
"right-abusefilter-log-private": "Vide 'e voce 'e riggistro 'e filtre abbuse nzignate comme private",
"right-abusefilter-hide-log": "Annascunne voce int'a 'o riggistro abbuse",
@@ -35,7 +35,7 @@
"action-abusefilter-log-detail": "vide cchiù 'ndettaglio 'e riggistre 'abbuse",
"action-abusefilter-private": "vide 'e date private int' 'o riggistro d'abbuse",
"action-abusefilter-modify-restricted": "càgna 'e filtre d'abbuse cu l'aziune lemmetate",
- "action-abusefilter-revert": "annulla tutte 'e cagnamiente 'a nu filtro d'abbuse dato",
+ "action-abusefilter-revert": "sfàje tutt' 'e cagnamiente 'e nu filtro d'abbuse dato",
"action-abusefilter-view-private": "vide filtre abbuse nzignate ccà comme private",
"abusefilter-log": "Riggistro d' 'o filtro anti abbuse",
"abusefilter-log-summary": "Stu riggistro mmustasse n'elenco 'e tutte l'aziune c'avessero appicciato uno o cchiù filtre.",
diff --git a/AbuseFilter/i18n/nb.json b/AbuseFilter/i18n/nb.json
index 378b3628..92a547aa 100644
--- a/AbuseFilter/i18n/nb.json
+++ b/AbuseFilter/i18n/nb.json
@@ -15,14 +15,16 @@
"Jeblad",
"Chameleon222",
"Matma Rex",
- "Jon Harald Søby"
+ "Jon Harald Søby",
+ "Imre Eilertsen",
+ "Matěj Suchánek",
+ "Citadell"
]
},
"abusefilter-desc": "Legger til automatisk heuristikk til redigeringer.",
"abusefilter": "Konfigurasjon av redigeringsfilter",
"abuselog": "Misbrukslogg",
"abusefilter-intro": "Velkommen til grensesnittet for håndtering av redigeringsfilteret.\nRedigeringsfilteret er en automatisert mekanisme i programvaren som utfører automatisk sjekking av alle handlinger.\nDette grensesnittet viser en liste over definerte filtre og tillater endring av dem.",
- "abusefilter-mustbeeditor": "Av sikkerhetsgrunner kan bare brukere med rett til å endre redigeringsfiltre bruke dette grensesnittet.",
"abusefilter-warning": "'''Advarsel''': Handlingen har automatisk blitt identifisert som skadelig.\nIkke-konstruktive handlinger blir raskt tilbakestilt,\nog langvarig forstyrrende redigering vil føre til at din konto eller IP-adresse blir blokkert.\nOm du mener dette er en konstruktiv redigering, klikk «Lagre» igjen for å bekrefte den.\nEn kortfattet beskrivelse av redigeringsregelen som din handling utløste er: $1",
"abusefilter-disallowed": "Denne handlingen har automatisk blitt identifisert som skadelig, og er derfor avvist. Om du mener redigeringen var konstruktiv, kontakt en administrator og informer ham eller henne om hva du prøvde å få til.\nEn kortfattet beskrivelse av redigeringsregelen som din handling utløste er: $1",
"abusefilter-blocked-display": "Denne handlingen har automatisk blitt identifisert som skadelig, og du har blitt hindret fra å gjennomføre den. I tillegg, for å beskytte {{SITENAME}}, har din konto og alle IP-adresser assosiert med denne blitt blokkert fra å redigere. Om dette var en feil, kontakt en administrator.\nEn kortfattet beskrivelse av redigeringsregelen som din handling utløste er: $1",
@@ -60,10 +62,12 @@
"abusefilter-log-search-filter": "Filter-ID (skill med vertikalstrek):",
"abusefilter-log-search-title": "Tittel:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact-all": "Alle handlinger",
"abusefilter-log-search-entries-label": "Synlighet:",
"abusefilter-log-search-entries-all": "Alle elementer",
"abusefilter-log-search-entries-hidden": "Kun skjulte elementer",
"abusefilter-log-search-entries-visible": "Kun synlige elementer",
+ "abusefilter-log-search-action-taken-label": "Handling tatt:",
"abusefilter-log-search-submit": "Søk",
"abusefilter-log-entry": "$1: $2 utløste et redigeringsfilter ved å {{GENDER:$8|gjøre}} en $3 på $4.\nReaksjon: $5;\nfilterbeskrivelse: $6",
"abusefilter-log-entry-withdiff": "$1: $2 utløste et misbruksfilter, ved å {{GENDER:$8|utføre}} handlingen «$3» på $4.\nUtførte handlinger: $5;\nFilterbeskrivelse: $6 ($7)",
@@ -94,12 +98,16 @@
"abusefilter-log-hide-hidden": "Skjul denne oppføringen fra offentlig visning",
"abusefilter-log-hide-reason": "Årsak:",
"abusefilter-log-hide-forbidden": "Du har ikke rettigheter til å skjule\nmisbruksloggoppføringer.",
- "abusefilter-logentry-suppress": "skjulte «[[$1]]»",
- "abusefilter-logentry-unsuppress": "viste «[[$1]]»",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|skjulte}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|fjernet}} skjuling av $3",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|utløste}} $4 ved å utføre handlingen «$5» på $3. Handlinger tatt: $6 ($7)",
+ "log-action-filter-abusefilter": "Type filterendring:",
+ "log-action-filter-abusefilter-create": "Opprettelse av nytt filter",
+ "log-action-filter-abusefilter-modify": "Endring av filter",
"abusefilter-management": "Behandling av redigeringsfilter",
"abusefilter-list": "Alle filtere",
"abusefilter-list-id": "Filter-ID",
+ "abusefilter-list-pattern": "Mønster",
"abusefilter-list-status": "Status",
"abusefilter-list-public": "Offentlig beskrivelse",
"abusefilter-list-consequences": "Konsekvenser",
@@ -115,6 +123,7 @@
"abusefilter-enabled": "Slått på",
"abusefilter-deleted": "Slettet",
"abusefilter-disabled": "Slått av",
+ "abusefilter-throttled": "begrenset",
"abusefilter-hitcount": "$1 {{PLURAL:$1|treff}}",
"abusefilter-new": "Lag et nytt filter",
"abusefilter-return": "Returner til filteradministrasjon",
@@ -128,8 +137,9 @@
"abusefilter-list-options-scope-local": "Kun lokale regler",
"abusefilter-list-options-scope-global": "Kun globale regler",
"abusefilter-list-options-scope-all": "Lokale og globale regler",
- "abusefilter-list-options-disabled": "Deaktiverte filtre:",
"abusefilter-list-options-hidedisabled": "Skjul deaktiverte filtre",
+ "abusefilter-list-options-hideprivate": "Skjul private filtere",
+ "abusefilter-list-options-searchoptions": "Søkemodus:",
"abusefilter-list-options-submit": "Oppdater",
"abusefilter-tools-text": "Her er noen verktøy som kan være nyttige for å lage samt feilsøke redigeringsfiltere.",
"abusefilter-tools-expr": "Uttrykkstester",
@@ -146,13 +156,14 @@
"abusefilter-edit-subtitle-new": "Oppretter filter",
"abusefilter-edit-oldwarning": "<strong>Du redigerer på en gammel versjon av dette filteret. Statistikken oppgitt er for siste versjon av filteret. Hvis du lagrer dine endringer, vil du overskrive alle endringer siden den revisjonen du redigerer</strong> &bull; [[Special:AbuseFilter/history/$2|Gå tilbake til filterets historikk]]",
"abusefilter-edit-status-label": "Statistikk:",
- "abusefilter-edit-status": "Av {{PLURAL:$|den siste handlingen|de siste $1 handlingene}} har dette filteret matchet $2 ($3 %).",
- "abusefilter-edit-status-profile": "Av {{PLURAL:$|den siste handlingen|de siste $1 handlingene}} har dette filteret passet med $2 ($3%).\nKjøretiden er i gjennomsnitt på $4ms, og det bruker {{PLURAL:$5|ett vilkår|$5 vilkår}} av vilkårsgrensen.",
+ "abusefilter-edit-status": "Av {{PLURAL:$1|den siste handlingen|de siste $1 handlingene}} har dette filteret matchet $2 ($3 %).",
+ "abusefilter-edit-status-profile": "Av {{PLURAL:$1|den siste handlingen|de siste $1 handlingene}} har dette filteret passet med $2 ($3%).\nKjøretiden er i gjennomsnitt på $4ms, og det bruker {{PLURAL:$5|ett vilkår|$5 vilkår}} av vilkårsgrensen.",
"abusefilter-edit-throttled-warning": "'''Advarsel:''' Dette filteret ble automatisk flagget som skadefullt. Av sikkerhetsårsaker vil følgende handlinger ikke bli utført ($1). Gå gjennom og [[mw:Extension:AbuseFilter/Conditions|optimer]] betingelsene for å fjerne denne begrensningen",
"abusefilter-edit-new": "Nytt filter",
"abusefilter-edit-save": "Lagre filter",
"abusefilter-edit-id": "Filter-ID:",
"abusefilter-edit-description": "Beskrivelse\n:''(vises offentlig)''",
+ "abusefilter-edit-field-description": "beskrivelse",
"abusefilter-edit-group": "Filtergruppe:",
"abusefilter-edit-flags": "Flagg:",
"abusefilter-edit-enabled": "Slå på dette filteret",
@@ -160,6 +171,7 @@
"abusefilter-edit-hidden": "Skjul detaljer om dette filteret fra offentlig visning",
"abusefilter-edit-global": "Globalt filter",
"abusefilter-edit-rules": "Regelverk:",
+ "abusefilter-edit-field-conditions": "betingelser",
"abusefilter-edit-notes": "Notater:",
"abusefilter-edit-lastmod": "Filter sist endret:",
"abusefilter-edit-lastmod-text": "$1 av $2",
@@ -171,24 +183,37 @@
"abusefilter-edit-action-degroup": "Fjern brukeren fra alle priviligerte grupper",
"abusefilter-edit-action-block": "Blokker brukeren og/eller IP-adressen fra redigering",
"abusefilter-edit-action-throttle": "Gjennomfør handlingen kun dersom brukeren gjør det flere ganger",
- "abusefilter-edit-action-rangeblock": "Blokker /16-adressen som brukeren kommer fra.",
+ "abusefilter-edit-action-rangeblock": "Blokker IP-intervallet brukeren kommer fra",
"abusefilter-edit-action-tag": "Merk endringen for videre gjennomgang.",
"abusefilter-edit-throttle-count": "Antall tillatte handlinger:",
"abusefilter-edit-throttle-period": "Tidsperiode:",
- "abusefilter-edit-throttle-seconds": "{{PLURAL:$1|ett sekund|$1 sekund}}",
"abusefilter-edit-throttle-groups": "Grupper fart etter:\n:''(en på hver linje, kombiner med kommaer)''",
+ "abusefilter-edit-throttle-ip": "IP-adresse",
+ "abusefilter-edit-throttle-user": "Brukerkonto",
+ "abusefilter-edit-throttle-editcount": "Antall redigeringer",
+ "abusefilter-edit-throttle-site": "Hele nettstedet",
+ "abusefilter-edit-throttle-page": "Side",
+ "abusefilter-throttle-details": "Tillat $1 {{PLURAL:$1|handling|handlinger}} hvert {{PLURAL:$2|sekund|$2. sekund}}, grupper bremsing etter: $3",
"abusefilter-edit-warn-message": "Systemmelding å bruke for advarsel:",
"abusefilter-edit-warn-other": "Annen melding",
"abusefilter-edit-warn-other-label": "Side med annen melding:\n:''(uten MediaWiki-prefiks)''",
"abusefilter-edit-warn-actions": "Handlinger:",
"abusefilter-edit-warn-preview": "Forhåndsvis valgt melding",
"abusefilter-edit-warn-edit": "Opprett/rediger valgt melding",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Merkelapper]] å legge på (én per linje):",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Merkelapper]] å legge på:",
+ "abusefilter-edit-tag-placeholder": "Legg til merkelapper (én per linje eller kommaatskilt)",
+ "abusefilter-edit-block-anon-durations": "Blokkeringsvarighet for anonyme brukere:",
+ "abusefilter-edit-block-user-durations": "Blokkeringsvarighet for registrerte brukere:",
+ "abusefilter-block-anon": "Blokker anonyme brukere",
+ "abusefilter-block-user": "blokker registrerte brukere",
+ "abusefilter-block-talk": "blokkert fra å redigere sin egen diskusjonsside",
"abusefilter-edit-denied": "Du kan ikke se detaljene for dette filteret, fordi de er skjult fra offentlig visning.",
"abusefilter-edit-main": "Filterparametere",
"abusefilter-edit-done-subtitle": "Filter redigert",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Dine endringer]] til [[Special:AbuseFilter/$1|filter $3]] er lagret.",
"abusefilter-edit-badsyntax": "Det er en syntaksfeil i filteret du anga. Resultatet fra fortolkeren var: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Følgende felt er påkrevd og må være fylt ut: $1",
+ "abusefilter-edit-deleting-enabled": "Du kan ikke merke et aktivt filter som slettet.",
"abusefilter-edit-restricted": "Du kan ikke redigere dette filteret, fordi det inneholder en eller flere begrensede handlinger.\nSpør en bruker med rettigheter til å legge til begrensede handlinger om å legge til endringen for deg.",
"abusefilter-edit-viewhistory": "Vis dette filterets historikk",
"abusefilter-edit-history": "Historikk:",
@@ -213,7 +238,8 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Modulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Eksponent (**)",
"abusefilter-edit-builder-group-op-comparison": "Sammenligningsoperatorer",
- "abusefilter-edit-builder-op-comparison-equal": "Er lik (==)",
+ "abusefilter-edit-builder-op-comparison-equal": "Verdien er lik (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Verdien og typen er lik (===)",
"abusefilter-edit-builder-op-comparison-notequal": "Er ikke lik (!=)",
"abusefilter-edit-builder-op-comparison-lt": "Mindre enn (<)",
"abusefilter-edit-builder-op-comparison-gt": "Større enn (>)",
@@ -237,11 +263,13 @@
"abusefilter-edit-builder-funcs-lcase": "Gjør om til små bokstaver (lcase)",
"abusefilter-edit-builder-funcs-ucase": "Gjør om til store bokstaver (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normaliser forvirrende bokstaver (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normaliser og søk etter flere understrenger i en steng (ccnorm_contains_any)",
"abusefilter-edit-builder-funcs-rmdoubles": "Fjern doble bokstaver (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Spesialbokstaver / totalt antall bokstaver (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normaliser (norm)",
"abusefilter-edit-builder-funcs-count": "Antall ganger streng X finnes i streng Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Antall ganger regulæruttrykket X dukker opp i strengen Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Tabell over treff i regulære uttrykk innen en tekst for hver oppfangsgruppe (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Fjern mellomrom (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Fjern spesialtegn (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Er IP-en i innenfor område? (ip_in_range)",
@@ -264,19 +292,18 @@
"abusefilter-edit-builder-vars-new-content-model": "Ny innholdsmodell",
"abusefilter-edit-builder-vars-removedlines": "Linjer fjernet i redigering",
"abusefilter-edit-builder-vars-summary": "Redigeringssammendrag",
- "abusefilter-edit-builder-vars-article-id": "Artikkel-ID",
- "abusefilter-edit-builder-vars-article-ns": "Artikkelnavnerom",
- "abusefilter-edit-builder-vars-article-text": "Artikkeltittel (uten navnerom)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Full artikkeltittel",
- "abusefilter-edit-builder-vars-article-views": "Sidevisninger",
+ "abusefilter-edit-builder-vars-page-id": "Artikkel-ID",
+ "abusefilter-edit-builder-vars-page-ns": "Artikkelnavnerom",
+ "abusefilter-edit-builder-vars-page-title": "Artikkeltittel (uten navnerom)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Full artikkeltittel",
"abusefilter-edit-builder-vars-movedfrom-id": "Artikkel-ID til kildeside ved flytting",
"abusefilter-edit-builder-vars-movedfrom-ns": "Navnerom til målside ved flytting",
- "abusefilter-edit-builder-vars-movedfrom-text": "Tittel til kildeside ved flytting",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Full tittel til kildeside ved flytting",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Tittel til kildeside ved flytting",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Full tittel til kildeside ved flytting",
"abusefilter-edit-builder-vars-movedto-id": "Artikkel-ID til målside ved flytting",
"abusefilter-edit-builder-vars-movedto-ns": "Navnerom til målside ved flytting",
- "abusefilter-edit-builder-vars-movedto-text": "Tittel til målside ved flytting",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Full tittel til målside ved flytting",
+ "abusefilter-edit-builder-vars-movedto-title": "Tittel til målside ved flytting",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Full tittel til målside ved flytting",
"abusefilter-edit-builder-vars-user-editcount": "Brukers redigeringsteller",
"abusefilter-edit-builder-vars-user-age": "Alder på brukerkontoen",
"abusefilter-edit-builder-vars-user-name": "Navn på brukerkonto",
@@ -339,14 +366,14 @@
"abusefilter-exception-unclosedstring": "Åpen streng som starter ved tegn nummer $1.",
"abusefilter-exception-invalidoperator": "Ugyldig operator «$2» ved tegn nummer $1.",
"abusefilter-exception-unrecognisedtoken": "Ukjent tegn «$2» ved tegn nummer $1.",
- "abusefilter-exception-noparams": "Ingen parametre ble gitt til funksjonen «$2» ved tegn nummer $1.",
+ "abusefilter-exception-noparams": "Ingen parametre ble gitt til funksjonen «$2» ved tegn nummer $1.\nForventet {{PLURAL:$3|ett argument|$3 argumenter}}.",
"abusefilter-exception-dividebyzero": "Ulovlig forsøk på å dele $2 med null ved tegn nummer $1.",
"abusefilter-exception-unrecognisedvar": "Ukjent variabel $2 ved tegn nummer $1.",
"abusefilter-exception-notenoughargs": "Funksjonskallet $2 ved tegn $1 hadde ikke nok argumenter.\nForventet {{PLURAL:$3|ett argument|$3 argumenter}}, fikk $4",
"abusefilter-exception-regexfailure": "Feil i det regulære uttrykket «$3» ved tegn $1: «$2»",
"abusefilter-exception-overridebuiltin": "Ulovlig overstyring av innebygd variabel «$2» ved tegn $1.",
"abusefilter-exception-outofbounds": "Ber om ikke-eksisterende listeelement $2 (listestørrelse = $3) ved tegn $1.",
- "abusefilter-exception-notlist": "Ber om tabellelement fra en ikke-tabell ved tegn $1.",
+ "abusefilter-exception-notarray": "Ber om tabellelement fra en ikke-tabell ved tegn $1.",
"abusefilter-action-tag": "Merkelapp",
"abusefilter-action-throttle": "Begrensning av endringshastighet",
"abusefilter-action-warn": "Advar",
@@ -362,8 +389,9 @@
"abusefilter-revert-periodstart": "Periodestart:",
"abusefilter-revert-periodend": "Periodeslutt:",
"abusefilter-revert-search": "Velg handlinger",
- "abusefilter-revert-filter": "Filter:",
+ "abusefilter-revert-filter": "Filter-ID:",
"abusefilter-revert-preview-intro": "Nedenfor er handlingene utført av misbruksfilteret som vil bli tilbakestilt av denne handlingen.\nSe nøye gjennom disse og klikk på «{{int:abusefilter-revert-confirm}}» for å bekrefte dette valget.",
+ "abusefilter-revert-confirm-legend": "Bekreft tilbakestillingen",
"abusefilter-revert-confirm": "Bekreft",
"abusefilter-revert-success": "Du har tilbakestilt alle endringene utført av redigeringsfilteret på grunn av [[Special:AbuseFilter/$1|filter $2]].",
"abusefilter-revert-reason": "Automatisk tilbakestilling av alle handlingene utført av redigeringsfilteret på grunn av filter $1.\nGrunnen er gitt som: $2",
@@ -375,12 +403,20 @@
"abusefilter-test-submit": "Test",
"abusefilter-test-load": "Last inn",
"abusefilter-test-user": "Endringer av bruker:",
+ "abusefilter-test-nobots": "Skjul botredigeringer",
"abusefilter-test-period-start": "Endringer utført etter:",
"abusefilter-test-period-end": "Endringer utført før:",
"abusefilter-test-page": "Endringer gjort på siden:",
"abusefilter-test-shownegative": "Vis endringer som ikke passer med dette filteret",
"abusefilter-test-syntaxerr": "Filteret du skrev inn inneholder en syntaksfeil.\nDu kan se en fullstendig forklaring ved å klikke på «{{int:abusefilter-edit-check}}»-knappen.",
"abusefilter-test-badtitle": "Sidetittelen du la inn var ugyldig. Den kan inneholde en eller flere karakterer som ikke kan brukes i titler.",
+ "abusefilter-test-action": "Handlingstype:",
+ "abusefilter-test-search-type-all": "Alle handlinger",
+ "abusefilter-test-search-type-edit": "Redigeringer",
+ "abusefilter-test-search-type-move": "Flyttinger",
+ "abusefilter-test-search-type-delete": "Slettinger",
+ "abusefilter-test-search-type-upload": "Opplastinger",
+ "abusefilter-test-search-type-createaccount": "Kontoopprettelser",
"abusefilter-changeslist-examine": "undersøk",
"abusefilter-examine": "Undersøk enkelte endringer",
"abusefilter-examine-intro": "Denne siden lar deg se igjennom variablene som er laget av redigeringsfilteret for en enkelt endring, samt lar deg teste disse mot filtre.",
@@ -407,6 +443,7 @@
"abusefilter-topnav-import": "Importer filter",
"abusefilter-log-name": "Redigeringsfilterlogg",
"abusefilter-log-header": "Denne loggen viser et sammendrag av endringer gjort i filtrene.\nFor fullstendige detaljer, se [[Special:AbuseFilter/history|listen]] over de siste filterendringene.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|opprettet}} $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|endret}} $4 ($5)",
"abusefilter-log-noresults": "Ingen resultater",
"abusefilter-diff-title": "Forskjeller mellom versjoner",
@@ -422,46 +459,10 @@
"abusefilter-import-submit": "Importer data",
"abusefilter-group-default": "Standard",
"abusefilter-http-error": "En HTTP-feil oppstod: $1",
- "apihelp-abusefiltercheckmatch-description": "Sjekk om et misbruksfilter treffer et sett av variabler, logget misbruksfilterhendelse.\n\nvars, rcid eller logid kreves, men bare én kan brukes.",
- "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid eller logid kreves, men kun én av disse kan brukes.",
- "apihelp-abusefiltercheckmatch-param-filter": "Hele filterteksten som skal sjekkes for treff.",
- "apihelp-abusefiltercheckmatch-param-vars": "JSON-kodet tabell over variabler det skal testes mot.",
- "apihelp-abusefiltercheckmatch-param-rcid": "Siste endringer-ID det skal sjekkes mot.",
- "apihelp-abusefiltercheckmatch-param-logid": "Misbruksfilterlogg-ID det skal sjekkes mot.",
- "apihelp-abusefiltercheckmatch-example-1": "Test om siste endringer-ID 15 treffer på et enkelt filter",
- "apihelp-abusefilterchecksyntax-description": "Sjekk syntaksen til et filter.",
- "apihelp-abusefilterchecksyntax-summary": "Sjekk syntaksen til et misbruksfilter.",
- "apihelp-abusefilterchecksyntax-param-filter": "Hele filterteksten det skal sjekkes syntaks på.",
- "apihelp-abusefilterchecksyntax-example-1": "Sjekk syntaksen til et gyldig filter",
- "apihelp-abusefilterchecksyntax-example-2": "Sjekk syntaksen til et ugyldig filter",
- "apihelp-abusefilterevalexpression-description": "Evaluerer et misbruksfilteruttrykk.",
- "apihelp-abusefilterevalexpression-summary": "Evaluerer et uttrykk i et misbruksfilter.",
- "apihelp-abusefilterevalexpression-param-expression": "Uttrykket som skal evalueres.",
- "apihelp-abusefilterevalexpression-example-1": "Evaluer et enkelt uttrykk",
- "apihelp-abusefilterunblockautopromote-description": "Fjerner blokkeringen av en bruker fra å automatisk forfremmes på grunn av konsekvenser fra et misbruksfilter.",
- "apihelp-abusefilterunblockautopromote-param-user": "Brukernavnet til brukeren du ønsker å avblokkere.",
- "apihelp-abusefilterunblockautopromote-example-1": "Fjerner blokkeringen av automatisk forfremming av [[User:Example]]",
- "apihelp-query+abusefilters-description": "Vis detaljene til misbruksfilterne.",
- "apihelp-query+abusefilters-summary": "Vis detaljer om misbruksfilterne.",
- "apihelp-query+abusefilters-param-startid": "Filter-ID det skal nummereres fra.",
- "apihelp-query+abusefilters-param-endid": "Filter-ID det skal sluttes å nummereres på.",
- "apihelp-query+abusefilters-param-show": "Vis bare filtre som treffer disse kriteriene.",
- "apihelp-query+abusefilters-param-limit": "Maksimalt antall filtre som skal listes opp.",
- "apihelp-query+abusefilters-param-prop": "Hvilke egenskaper som skal hentes.",
- "apihelp-query+abusefilters-example-1": "List opp påslåtte offentlige filtre",
- "apihelp-query+abusefilters-example-2": "Vis noen detaljer om filtre",
- "apihelp-query+abuselog-description": "Vis hendelser som ble fanget opp av ett av misbruksfiltrene.",
- "apihelp-query+abuselog-param-start": "Tidsstempelet nummereringen skal starte på.",
- "apihelp-query+abuselog-param-end": "Tidsstempelet det skal sluttes å nummerere på.",
- "apihelp-query+abuselog-param-user": "Vis bare oppføringer gjort av en gitt bruker eller IP-adresse.",
- "apihelp-query+abuselog-param-title": "Vis bare oppføringer på ei gitt side.",
- "apihelp-query+abuselog-param-filter": "Vis bare oppføringer som ble fanget av en gitt filter-ID.",
- "apihelp-query+abuselog-param-limit": "Maksimalt antall oppføringer som skal listes opp.",
- "apihelp-query+abuselog-param-prop": "Hvilke egenskaper som skal hentes.",
- "apihelp-query+abuselog-example-1": "Vis nylige loggoppføringer",
- "apihelp-query+abuselog-example-2": "Vis nylige loggoppføringer for [[API]]",
- "apierror-abusefilter-canttest": "Du har ikke tillatelse til å teste misbruksfiltre.",
- "apierror-abusefilter-cantcheck": "Du har ikke tillatelse til å sjekke syntaksen til misbruksfiltre.",
- "apierror-abusefilter-nosuchlogid": "Det er ingen misbruksloggoppføring med ID $1.",
- "apierror-abusefilter-badsyntax": "Filteret har ugyldig syntaks."
+ "abusefilter-view-private-submit": "Vis private detaljer",
+ "abusefilter-view-private": "Vis private detaljer",
+ "abusefilter-log-details-id": "Logg-ID",
+ "abusefilter-invalid-request": "Ugyldig forespørsel! For å få tilgang til private loggdetaljer må du gå via skjemaet på [[Special:AbuseLog/$1]] og angi en årsak.",
+ "abusefilter-log-ip-not-available": "Ikke tilgjengelig",
+ "abusefilter-tag-reserved": "Taggen <code>abusefilter-condition-limit</code> er reservert for intern bruk av misbruksfilteret."
}
diff --git a/AbuseFilter/i18n/nds-nl.json b/AbuseFilter/i18n/nds-nl.json
index 36821c57..c6dd8815 100644
--- a/AbuseFilter/i18n/nds-nl.json
+++ b/AbuseFilter/i18n/nds-nl.json
@@ -8,7 +8,6 @@
"abusefilter": "Filterinstellingen",
"abuselog": "Filterlogboek",
"abusefilter-intro": "Welkom bie t beheerscharm veur bewarkingsfilters.\nt Filtersysteem past automatiese heuristiek toe op alle haandelingen.\nDit scharm löt alle in-estelden filters zien, en gif de meugelikheid ze an te passen.",
- "abusefilter-mustbeeditor": "Um veiligheidsredens hebben allinnig gebrukers mit t recht um misbruukfilters te wiezigen de meugelikheid dit beheerscharm te gebruken.",
"abusefilter-warning": "'''Waorschuwing''': disse haandeling wörden automaties as schaolik ezien.\nOnkonstruktieve haandelingen wörden gauw weerummedreid, en herhaoldelik onkonstruktief bewarken eindigt in n blokkering van joew gebruker of IP-adres.\nA'j denken dat disse haandeling wel konstruktief is, bevestig joew haandeling dan nogmaols.\nn Korte beschrieving van de regel op baosis waorvan joew haandeling tegenehölden is: $1",
"abusefilter-disallowed": "Disse haandeling wörden automaties as schaolik ezien, en is daorumme niet toe-estaon.\nA'j denken dat joew haandeling wel konstruktief was, meld dan an de beheerder wa'j probeerden te doon.\nn Korte beschrieving van de regel op baosis waorvan joew haandeling tegenehölden is: $1",
"abusefilter-blocked-display": "Disse haandeling wörden automaties as schaolik ezien, en is daorumme niet uutevoerd.\nUm {{SITENAME}} te bescharmen bin joew gebruker en alle IP-adressen die daorbie heuren eblokkeerd.\nAs disse maotregel onterecht eneumen is, neem dan kontakt op mit n beheerder.\nn Korte beschrieving van de regel op baosis waorvan joew haandeling tegenehölden is: $1",
@@ -66,8 +65,6 @@
"abusefilter-log-hide-legend": "Logboekregel verbargen",
"abusefilter-log-hide-id": "Logboekmeldingsnummer:",
"abusefilter-log-hide-reason": "Reden:",
- "abusefilter-logentry-suppress": "hef [[$1]] verbörgen",
- "abusefilter-logentry-unsuppress": "hef [[$1]] zichtbaor emaakt",
"abusefilter-list": "Alle filters",
"abusefilter-list-id": "Filternummer",
"abusefilter-list-status": "Staotus",
@@ -149,9 +146,9 @@
"abusefilter-edit-builder-vars-newsize": "Nieje ziedgrootte",
"abusefilter-edit-builder-vars-oldsize": "Ouwe ziedgrootte",
"abusefilter-edit-builder-vars-summary": "Bewarkingssamenvatting",
- "abusefilter-edit-builder-vars-article-id": "Zied-ID",
- "abusefilter-edit-builder-vars-article-ns": "Ziednaamruumte",
- "abusefilter-edit-builder-vars-article-text": "Ziednaam (zonder naamruumte)",
+ "abusefilter-edit-builder-vars-page-id": "Zied-ID",
+ "abusefilter-edit-builder-vars-page-ns": "Ziednaamruumte",
+ "abusefilter-edit-builder-vars-page-title": "Ziednaam (zonder naamruumte)",
"abusefilter-history-hidden": "verbörgen",
"abusefilter-history-enabled": "An-ezet",
"abusefilter-history-global": "Globaal",
diff --git a/AbuseFilter/i18n/nds.json b/AbuseFilter/i18n/nds.json
index bdeea7a8..0c4003a9 100644
--- a/AbuseFilter/i18n/nds.json
+++ b/AbuseFilter/i18n/nds.json
@@ -10,7 +10,6 @@
"abusefilter": "Missbruukfilter instellen",
"abuselog": "Missbruuk-Logbook",
"abusefilter-intro": "Willkamen bi dat Verwalten vun’n Missbruukfilter.\nDe Missbruukfilter it en automaatsch Warktüüch, dat automaatsche Heuristiken op all Ännern anwennt.\nDisse Bildschirm wiest en List mit all defineerte Filters un verlöövt dat, jem to ännern.",
- "abusefilter-mustbeeditor": "Ut Sekerheitsgrünn dröfft blot Brukers mit dat Recht, Missbruukfilters to ännern, dissen Bildschirm sehn.",
"abusefilter-warning": "'''Wohrschau''': Diene Akschoon is dör en automaatschen Filter as mööglicherwies negativ kennt worrn.\nSo’n Bidrääg warrt normalerwies gau wedder utsorteert. Wenn dat fakener vörkummt oder to dull is, denn warrt dien Brukerkonto oder dien IP-Adress sperrt.\nWenn du meenst, dat dien Ännern nich negativ is, denn kannst du noch wedder versöken em to spiekern.\nDor liggt dat an, dat de Filter meckert: $1",
"abusefilter-disallowed": "Diene Akschoon is dör en automaatschen Filter as negativ kennt worrn un is nich verlöövt.\nWenn du meenst, dat dien Ännern nich negativ is, denn kannst du en Administrater schrieven un em seggen, wat du doon wullst, dat he di helpt.\nDor liggt dat an, dat de Filter meckert: $1",
"abusefilter-blocked-display": "Diene Akschoon is dör en automaatschen Filter as negativ kennt worrn un is nich verlöövt.\n{{SITENAME}} to schulen, sünd dorüm dien Brukerkonto un dien IP-Adress sperrt worrn.\nWenn du meenst, dat dien Ännern nich negativ is, denn kannst du en Administrater för Help fragen.\nDor liggt dat an, dat de Filter meckert: $1",
@@ -83,7 +82,6 @@
"abusefilter-list-options-deleted-only": "Blot wegsmeten Filters wiesen",
"abusefilter-list-options-deleted-hide": "Wegsmeten Filters versteken",
"abusefilter-list-options-deleted-show": "Wegsmeten Filters wiesen",
- "abusefilter-list-options-disabled": "Utschalt Filters:",
"abusefilter-list-options-hidedisabled": "Utschalt Filters versteken",
"abusefilter-list-options-submit": "Aktuell maken",
"abusefilter-tools-text": "Op disse Sied gifft dat en poor Warktüüch, de bi dat Opstellen vun Missbruukfilters un bi de Fehlersöök helpen köönt.",
@@ -101,7 +99,6 @@
"abusefilter-edit-status-label": "Statistiken:",
"abusefilter-edit-status": "Vun de {{PLURAL:$1|leste een Akschoon|lesten $1 Akschonen}} hett de Filter op $2 ($3 %) passt.\nIn’n Dörsnidd is de Looptied $4 ms.",
"abusefilter-edit-status-profile": "Vun de {{PLURAL:$1|leste een Akschoon|lesten $1 Akschonen}} hett de Filter op $2 ($3 %) passt.\nIn’n Dörsnidd is de Looptied $4 ms.",
- "abusefilter-edit-throttled": "'''Wohrschau''': Disse Filter is ut Sekerheitsgrünn automaatsch utschalt worrn. He hett bi mehr as de angeven Bövergrenz vun $1 % vun all Akschonen meckert.",
"abusefilter-edit-new": "Nee Filter",
"abusefilter-edit-save": "Filter spiekern",
"abusefilter-edit-id": "Filter-ID:",
@@ -119,7 +116,6 @@
"abusefilter-edit-consequences": "Wat passeren schall, wenn de Filter wat funnen hett",
"abusefilter-edit-action-warn": "Disse Akschonen utföhren, nadem de Bruker wohrschaut is",
"abusefilter-edit-action-disallow": "Vörkamen, dat de Bruker de Akschoon utföhrt",
- "abusefilter-edit-action-flag": "Ännern in’t Missbruuk-Logbook markeren",
"abusefilter-edit-action-blockautopromote": "„Bestätigt-Benutzer“-Status wegnehmen",
"abusefilter-edit-action-degroup": "Den Bruker all Sünnerrechten wegnehmen",
"abusefilter-edit-action-block": "Bruker/IP-Adress sperren",
@@ -128,7 +124,6 @@
"abusefilter-edit-action-tag": "Ännern för genauer Ankieken kennteken.",
"abusefilter-edit-throttle-count": "Tall verlöövt Akschonen:",
"abusefilter-edit-throttle-period": "Tiedduur:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|Sekunn|Sekunnen}}",
"abusefilter-edit-throttle-groups": "Regeln för dat Begrenzen för de Gruppen:\n:''(een per Reeg, verbinnen mit Kommas)''",
"abusefilter-edit-warn-message": "Systemnaricht för Wohrschauen:",
"abusefilter-edit-warn-other": "Annere Naricht",
@@ -206,18 +201,18 @@
"abusefilter-edit-builder-vars-oldsize": "Ole Siedengrött",
"abusefilter-edit-builder-vars-removedlines": "Rutnahmen Regen",
"abusefilter-edit-builder-vars-summary": "Grund för’t Ännern",
- "abusefilter-edit-builder-vars-article-id": "Sieden-ID",
- "abusefilter-edit-builder-vars-article-ns": "Naamruum vun de Sied",
- "abusefilter-edit-builder-vars-article-text": "Siedennaam (ahn Naamruum)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Vullen Siedennaam",
+ "abusefilter-edit-builder-vars-page-id": "Sieden-ID",
+ "abusefilter-edit-builder-vars-page-ns": "Naamruum vun de Sied",
+ "abusefilter-edit-builder-vars-page-title": "Siedennaam (ahn Naamruum)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Vullen Siedennaam",
"abusefilter-edit-builder-vars-movedfrom-id": "Sieden-ID vun de to schuven Sied",
"abusefilter-edit-builder-vars-movedfrom-ns": "Naamruum vun de to schuven Sied",
- "abusefilter-edit-builder-vars-movedfrom-text": "Naam vun de to schuven Sied",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Vullen Naam vun de to schuven Sied",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Naam vun de to schuven Sied",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Vullen Naam vun de to schuven Sied",
"abusefilter-edit-builder-vars-movedto-id": "Sieden-ID vun de Sied, op de schaven warrt",
"abusefilter-edit-builder-vars-movedto-ns": "Naamruum vun de Sied, op de schaven warrt",
- "abusefilter-edit-builder-vars-movedto-text": "Naam vun de Sied, op de schaven warrt",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Vullen Naam vun de Sied, op de schaven warrt",
+ "abusefilter-edit-builder-vars-movedto-title": "Naam vun de Sied, op de schaven warrt",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Vullen Naam vun de Sied, op de schaven warrt",
"abusefilter-edit-builder-vars-user-editcount": "Tall Bidrääg vun’n Bruker",
"abusefilter-edit-builder-vars-user-age": "Öller vun dat Brukerkonto",
"abusefilter-edit-builder-vars-user-name": "Naam vun dat Brukerkonto",
@@ -272,7 +267,7 @@
"abusefilter-exception-regexfailure": "Fehler in’n regulären Utdruck „$3“ bi Teken $1: „$2“",
"abusefilter-exception-overridebuiltin": "Verbaden Överschrieven vun inboot Variabel „$2“ bi Teken $1.",
"abusefilter-exception-outofbounds": "Anfeddern vun en nich vörhannen Listenindrag $2 (Listengrött: $3) bi Teken $1.",
- "abusefilter-exception-notlist": "Anfeddern vun en Arrayelement ut en Nich-Array bi Teken „$1“.",
+ "abusefilter-exception-notarray": "Anfeddern vun en Arrayelement ut en Nich-Array bi Teken „$1“.",
"abusefilter-action-tag": "Tag",
"abusefilter-action-throttle": "Begrenzen",
"abusefilter-action-warn": "Wohrschauen",
@@ -332,7 +327,6 @@
"abusefilter-topnav-import": "Filter importeren",
"abusefilter-log-name": "Missbruukfilter-Logbook",
"abusefilter-log-header": "Dit Logbook wiest en Översicht över Ännern an Filters.\nFör mehr Details, kiek di [[Special:AbuseFilter/history|de List]] mit de lesten Ännern an Filters an.",
- "abusefilter-log-entry-modify": "hett $1 ($2) ännert",
"abusefilter-diff-title": "Ünnerscheed twischen Versionen",
"abusefilter-diff-item": "Indrag",
"abusefilter-diff-version": "Version vun $1 vun $2",
diff --git a/AbuseFilter/i18n/ne.json b/AbuseFilter/i18n/ne.json
index ccf69fc2..869e006a 100644
--- a/AbuseFilter/i18n/ne.json
+++ b/AbuseFilter/i18n/ne.json
@@ -15,7 +15,6 @@
"abusefilter": "दुर्व्यवहार फिल्टर विन्यास",
"abuselog": "दुर्व्यवहार लग",
"abusefilter-intro": "दुर्व्यवहार फ़िल्टर प्रबन्धन अंतरफलकमा स्वागत छ।\nदुर्व्यवहार फ़िल्टर सबै कार्यमा स्वचालित heuristics (खोज)को लागि प्रयोग गरिने एउटा स्वचालित सफ्टवेयर प्रणाली हो।\nयस अंतरफलकले परिभाषित फिल्टरको एउटा सूची प्रदर्शित गर्छ, र परिवर्तन गर्ने अनुमति दिन्छ।",
- "abusefilter-mustbeeditor": "सुरक्षा कारणहरूले गर्दा, दुर्व्यवहार फिल्टर परिवर्तन गर्ने अधिकार प्राप्त प्रयोगकर्ताहरूले मात्र यस अन्तरमोहोडाको प्रयोग गर्न सक्नेछन्।",
"abusefilter-warning": "'''चेतावनी:''' यो कार्य हानिकारक भनेर स्वतः चिनियो।\nध्वंसात्मक सम्पादन शीघ्र उल्टाइनेछ,\nर जबरजस्ती अथवा ध्वंसात्मक सम्पादन दोहोराएको परिणाम स्वरुप तपाईंको खाता अथवा IP ठेगानामा प्रतिबन्ध लगाइनेछ।\nयदि तपाईं आफ्नो सम्पादन रचनात्मक भएकोमा विश्वस्त हुनुहुन्छ भनें पुनः '''संग्रह गर्नुहोस्'''मा क्लिक गरेर सुनिश्चित गर्नुहोस्।\nदुर्व्यहार नीति जसमा तपाईंको कार्यसित मेल खाइरहेछ, यसको एउटा संक्षिप्त विवरण यस प्रकार छ: $1",
"abusefilter-disallowed": "यो कार्य हानिकारक भनेर स्वतः चिनियो, अनि यसकारण अनुमति छैन।\nयदि तपाईं आफ्नो सम्पादन रचनात्मक भएकोमा विश्वस्त हुनुहुन्छ भनें कृपया तपाईंले के गर्ने प्रयास गर्नु हुँदै थियो यो कुरा कुनै एक जना प्रबन्धकलाई जनाउनुहोस् ।\nदुर्व्यहार नीति जसमा तपाईंको कार्यसित मेल खाइरहेछ, यसको एउटा संक्षिप्त विवरण यस प्रकार छ: $1",
"abusefilter-blocked-display": "यो कार्य घातक भनेर स्वतः चिनियो,\nर तपाईंलाई यसको क्रियान्वयनमा रोक लगाइएकोछ।\nअनि {{SITENAME}}को सुरक्षाको निम्ति तपाईंको प्रयोगकर्ता खाता अनि सबै सम्बन्धित आई पी ठेगानाहरूमाथि पनि सम्पादन गर्न रोक\nलगाइएकोछ।\nयदि यो गल्तीले भएको भए कृपया प्रबन्धकसित सम्पर्क गर्नुहोला।\nयस गलत कार्य नीतिसित तपाईंको कार्यले मेल खाँदैछ, एउटा संक्षिप्त विवरण यस प्रकार छ :$1",
@@ -59,8 +58,6 @@
"abusefilter-log-hide-hidden": "सार्वजनिक रुपले हेर्न यस इन्ट्रीलाई लुकाउने",
"abusefilter-log-hide-reason": "कारण:",
"abusefilter-log-hide-forbidden": "तपाईंलाई दुरुपयोग लग इन्ट्रीहरू लुकाउने अनुमति छैन।",
- "abusefilter-logentry-suppress": "लुकेका \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "लुकेका \"[[$1]]\"",
"abusefilter-management": "दुर्व्यवहार फिल्टर विन्यास",
"abusefilter-list": "सबै फिल्टरहरु",
"abusefilter-list-id": "फिल्टर परिचय:",
@@ -91,7 +88,6 @@
"abusefilter-list-options-scope-local": "स्थानीय नियम मात्र",
"abusefilter-list-options-scope-global": "विश्वव्यापी नियम मात्र",
"abusefilter-list-options-scope-all": "स्थानीय तथा विश्वव्यापी नियमहरू",
- "abusefilter-list-options-disabled": "निस्क्रिय फिल्टरहरु",
"abusefilter-list-options-hidedisabled": "निस्क्रिय फिल्टरहरु लुकाउने",
"abusefilter-list-options-submit": "अद्यतन",
"abusefilter-tools-expr": "अभिव्यक्ति जाँचकी",
@@ -122,7 +118,6 @@
"abusefilter-edit-hitcount": "फिल्टर गणना:",
"abusefilter-edit-action-degroup": "सबै विशेषाधिकार प्राप्त समूहबाट प्रयोगकर्तालाई निकाल्ने",
"abusefilter-edit-throttle-period": "समयावधि:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|सेकेण्ड|सेकेण्ड}}",
"abusefilter-edit-warn-other": "अन्य सन्देशहरू",
"abusefilter-edit-warn-actions": "कार्य:",
"abusefilter-edit-warn-preview": "छानिएको सन्देशको पूर्वावलोकन",
@@ -165,18 +160,17 @@
"abusefilter-edit-builder-vars-oldsize": "पुरानो पृष्ठको आकार",
"abusefilter-edit-builder-vars-removedlines": "सम्पादनमा हटाइएका पंक्तिहरु",
"abusefilter-edit-builder-vars-summary": "सारांश/कारण सम्पादन",
- "abusefilter-edit-builder-vars-article-id": "पृष्ठको ID",
- "abusefilter-edit-builder-vars-article-ns": "पृष्ठको नेमस्पेस",
- "abusefilter-edit-builder-vars-article-prefixedtext": "पूर्ण पृष्ठको शीर्षक",
- "abusefilter-edit-builder-vars-article-views": "पृष्ठ अवलोकन",
+ "abusefilter-edit-builder-vars-page-id": "पृष्ठको ID",
+ "abusefilter-edit-builder-vars-page-ns": "पृष्ठको नेमस्पेस",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "पूर्ण पृष्ठको शीर्षक",
"abusefilter-edit-builder-vars-movedfrom-id": "सारिएको श्रोत पृष्ठको पृष्ठ आइडी",
"abusefilter-edit-builder-vars-movedfrom-ns": "सारिएको श्रोत पृष्ठको नामस्थान",
- "abusefilter-edit-builder-vars-movedfrom-text": "सारिएको श्रोत पृष्ठको शिर्षक",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "सारिएको श्रोत पृष्ठको पूर्ण शीर्षक",
+ "abusefilter-edit-builder-vars-movedfrom-title": "सारिएको श्रोत पृष्ठको शिर्षक",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "सारिएको श्रोत पृष्ठको पूर्ण शीर्षक",
"abusefilter-edit-builder-vars-movedto-id": "सारिएको श्रोत पृष्ठको पृष्ठ गन्तव्य",
"abusefilter-edit-builder-vars-movedto-ns": "सार्दाको गन्तव्य पृष्ठको नेमस्पेस",
- "abusefilter-edit-builder-vars-movedto-text": "सार्दाको गन्तव्य पृष्ठको शीर्षक",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "सारिएको श्रोत पृष्ठको पूर्ण पृष्ठ गन्तव्य",
+ "abusefilter-edit-builder-vars-movedto-title": "सार्दाको गन्तव्य पृष्ठको शीर्षक",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "सारिएको श्रोत पृष्ठको पूर्ण पृष्ठ गन्तव्य",
"abusefilter-edit-builder-vars-user-editcount": "प्रयोगकर्ताको सम्पादन गणना",
"abusefilter-edit-builder-vars-user-age": "प्रयोगकर्ता खाताको आयु",
"abusefilter-edit-builder-vars-user-name": "प्रयोगकर्ता खाताको नाम",
@@ -272,8 +266,5 @@
"abusefilter-diff-next": "नयाँ परिवर्तन",
"abusefilter-import-submit": "आँकड़ा ल्याउने",
"abusefilter-group-default": "पूर्वनिर्धारित",
- "abusefilter-http-error": "एचटिटिपि त्रुटि उत्पन्न भयो: $1",
- "apihelp-query+abuselog-param-prop": "कुन मान प्राप्त गर्ने।",
- "apihelp-query+abuselog-example-1": "हालैका लग इन्ट्रीहरू देखाउने",
- "apihelp-query+abuselog-example-2": "[[एपिआइ]]को लागि हालैका लग इन्ट्रीहरू देखाउने"
+ "abusefilter-http-error": "एचटिटिपि त्रुटि उत्पन्न भयो: $1"
}
diff --git a/AbuseFilter/i18n/new.json b/AbuseFilter/i18n/new.json
index 2f2d0412..fb90cfe1 100644
--- a/AbuseFilter/i18n/new.json
+++ b/AbuseFilter/i18n/new.json
@@ -37,10 +37,10 @@
"abusefilter-edit-builder-vars-oldsize": "पुलांगु पौ साइज",
"abusefilter-edit-builder-vars-removedlines": "सम्पादनं लिकाःगु लाइन",
"abusefilter-edit-builder-vars-summary": "सम्पादनया सार/कारण",
- "abusefilter-edit-builder-vars-article-id": "पौ ID",
- "abusefilter-edit-builder-vars-article-ns": "पौ नेमस्पेस",
- "abusefilter-edit-builder-vars-article-text": "पौया नां (नेमस्पेस मदयेक)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "पूवंगु पौया नां",
+ "abusefilter-edit-builder-vars-page-id": "पौ ID",
+ "abusefilter-edit-builder-vars-page-ns": "पौ नेमस्पेस",
+ "abusefilter-edit-builder-vars-page-title": "पौया नां (नेमस्पेस मदयेक)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "पूवंगु पौया नां",
"abusefilter-history-user": "छ्य्‌लामि",
"abusefilter-history-diff": "हिला",
"abusefilter-revert-reasonfield": "कारण:"
diff --git a/AbuseFilter/i18n/nl.json b/AbuseFilter/i18n/nl.json
index f3ce163a..ee8984b4 100644
--- a/AbuseFilter/i18n/nl.json
+++ b/AbuseFilter/i18n/nl.json
@@ -22,19 +22,20 @@
"Jeleniccz",
"Mainframe98",
"QZanden",
- "Festina90"
+ "Festina90",
+ "Mar(c)",
+ "Kippenvlees1"
]
},
"abusefilter-desc": "Voert automatisch heuristische analyse uit op bewerkingen",
"abusefilter": "Filterinstellingen",
"abuselog": "Filterlogboek",
"abusefilter-intro": "Dit is het beheerscherm voor bewerkingsfilters.\nHet filtersysteem past automatische heuristiek toe op alle handelingen.\nVia dit scherm worden alle ingestelde filters weergegeven en kunnen ze aangepast worden.",
- "abusefilter-mustbeeditor": "Om veiligheidsredenen hebben alleen gebruikers met het recht om filters te wijzigen de mogelijkheid deze interface te gebruiken.",
- "abusefilter-warning": "'''Waarschuwing:''' deze handeling is automatisch geïdentificeerd als schadelijk.\nOnconstructieve handelingen worden snel teruggedraaid, en herhaald onconstructief bewerken eindigt in een blokkade van uw gebruiker of uw IP-adres.\nAls u denkt dat deze handeling wel constructief is, bevestig uw handeling dan opnieuw.\nEen korte beschrijving van de regel op basis waarvan uw handeling is tegengehouden: $1",
+ "abusefilter-warning": "'''Waarschuwing:''' Deze handeling is automatisch als schadelijk geïdentificeerd.\nOnconstructieve handelingen worden snel teruggedraaid, en herhaald onconstructief bewerken eindigt in een blokkade van uw account of IP-adres.\nAls u denkt dat deze handeling wel constructief is, bevestig uw handeling dan opnieuw.\nEen korte beschrijving van de regel op basis waarvan uw handeling is tegengehouden: $1",
"abusefilter-disallowed": "Deze handeling is automatisch geïdentificeerd als schadelijk, en daarom niet toegelaten.\nAls u denkt dat uw handeling wel constructief was, rapporteer dan aan de beheerder wat u probeerde te doen.\nEen korte beschrijving van de regel op basis waarvan uw handeling is tegengehouden volgt nu: $1",
- "abusefilter-blocked-display": "Deze handeling is automatisch geïdentificeerd als schadelijk. Daarom is deze niet uitgevoerd.\nOm {{SITENAME}} te beschermen zijn uw gebruiker en alle bijbehorende IP-adressen geblokkeerd.\nAls deze maatregel onterecht is genomen, neem dan contact op met een beheerder.\nEen korte beschrijving van de regel op basis waarvan uw bewerking is tegengehouden volgt nu: $1",
+ "abusefilter-blocked-display": "Deze handeling is automatisch geïdentificeerd als schadelijk. Daarom is deze niet uitgevoerd.\nOm {{SITENAME}} te beschermen zijn uw gebruikersaccount en alle bijbehorende IP-adressen geblokkeerd.\nAls deze maatregel onterecht is genomen, neem dan contact op met een beheerder.\nEen korte beschrijving van de regel op basis waarvan uw bewerking is tegengehouden: $1",
"abusefilter-degrouped": "Deze handeling is automatisch geïdentificeerd als schadelijk.\nOmdat is vastgesteld dat deze gebruiker mogelijk door iemand anders wordt misbruikt, zijn alle rechten ingetrokken.\nAls deze maatregel onterecht is genomen, neem dan contact op met een bureaucraat en licht deze handeling toe, zodat uw rechten hersteld kunnen worden.\nEen korte beschrijving van de regel op basis waarvan uw bewerking is tegengehouden volgt nu: $1",
- "abusefilter-autopromote-blocked": "Deze handeling is automatisch geïdentificeerd als schadelijk. Daarom is deze niet uitgevoerd.\nAls aanvullende veiligheidsmaatregel zijn een aantal automatisch toegekende rechten voor uw gebruiker tijdelijk ingetrokken.\nEen korte beschrijving van de regel op basis waarvan uw bewerking is tegengehouden volgt nu: $1",
+ "abusefilter-autopromote-blocked": "Deze handeling is automatisch geïdentificeerd als schadelijk. Daarom is deze niet uitgevoerd.\nAls aanvullende veiligheidsmaatregel zijn een aantal automatisch toegekende rechten voor uw account tijdelijk ingetrokken.\nEen korte beschrijving van de regel op basis waarvan uw bewerking is tegengehouden: $1",
"abusefilter-blocker": "Filter",
"abusefilter-blockreason": "Automatisch geblokkeerd door het filter.\nBeschrijving van de regel die dit heeft veroorzaakt: $1",
"abusefilter-degroupreason": "Rechten zijn automatisch verwijderd door het filter. Regelbeschrijving: $1",
@@ -67,10 +68,17 @@
"abusefilter-log-search-filter": "Filternummers (gescheiden met het teken \"|\"):",
"abusefilter-log-search-title": "Paginanaam:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Impact:",
+ "abusefilter-log-search-impact-all": "Alle acties",
+ "abusefilter-log-search-impact-saved": "Alleen opgeslagen wijzigingen",
+ "abusefilter-log-search-impact-not-saved": "Zonder opgeslagen wijzigingen",
"abusefilter-log-search-entries-label": "Zichtbaarheid:",
"abusefilter-log-search-entries-all": "Alle regels",
"abusefilter-log-search-entries-hidden": "Alleen verborgen regels",
"abusefilter-log-search-entries-visible": "Alleen zichtbare regels",
+ "abusefilter-log-search-action-any": "Alle",
+ "abusefilter-log-search-action-taken-label": "Genomen maatregel:",
+ "abusefilter-log-search-action-taken-any": "Alle",
"abusefilter-log-search-submit": "Zoeken",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|liet een filter afgaan}} bij het {{GENDER:$8|uitvoeren}} van de handeling \"$3\" op $4.\nGenomen maatregel: $5;\nFilterbeschrijving: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|liet een filter afgaan}} bij het {{GENDER:$8|uitvoeren}} van de handeling \"$3\" op $4.\nGenomen maatregel: $5;\nFilterbeschrijving: $6 ($7)",
@@ -84,15 +92,19 @@
"abusefilter-log-details-var": "Variabele",
"abusefilter-log-details-val": "Waarde",
"abusefilter-log-details-vars": "Maatregelparameters",
- "abusefilter-log-details-private": "Beperkt zichtbare gegevens",
+ "abusefilter-log-details-private": "Beperkt zichtbare logboekgegevens",
"abusefilter-log-details-ip": "IP-adres",
+ "abusefilter-log-details-checkuser": "Gebruiker controleren",
"abusefilter-log-noactions": "geen",
"abusefilter-log-details-diff": "Wijzigingen in de bewerking",
"abusefilter-log-linkoncontribs": "filterlogboek",
"abusefilter-log-linkoncontribs-text": "Filterlogboek voor {{GENDER:$1|deze gebruiker}}",
+ "abusefilter-log-linkonhistory": "filterlogboek bekijken",
+ "abusefilter-log-linkonhistory-text": "Filterlogboek voor deze pagina bekijken",
"abusefilter-log-hidden": "(melding verborgen)",
"abusefilter-log-hidden-implicit": "(verborgen omdat de versie verwijderd is)",
"abusefilter-log-cannot-see-details": "U hebt niet de juiste rechten om dit item te bekijken.",
+ "abusefilter-log-cannot-see-private-details": "U hebt niet de juiste rechten om de beperkt zichbare gegevens van dit item te bekijken.",
"abusefilter-log-nonexistent": "Een regel met de opgegeven ID bestaat niet.",
"abusefilter-log-details-hidden": "U kunt de details van deze melding niet bekijken omdat deze verborgen is.",
"abusefilter-log-private-not-included": "Een of meer van de opgegeven filter-ID's zijn persoonlijk. Omdat u de details van privéfilters niet mag zien, is er niet in deze filters gezocht.",
@@ -100,13 +112,17 @@
"abusefilter-log-hide-id": "Logboekmeldingsnummer:",
"abusefilter-log-hide-hidden": "Deze melding verbergen",
"abusefilter-log-hide-reason": "Reden:",
+ "abusefilter-log-hide-reason-other": "Overige/additionele reden:",
"abusefilter-log-hide-forbidden": "U hebt niet de juiste rechten om meldingen in het filterlogboek te verbergen.",
- "abusefilter-logentry-suppress": "heeft [[$1]] verborgen",
- "abusefilter-logentry-unsuppress": "heeft [[$1]] zichtbaar gemaakt",
+ "abusefilter-log-entry-suppress": "$1 heeft $3 {{GENDER:$2|verborgen}}",
+ "abusefilter-log-entry-unsuppress": "$1 heeft $3 {{GENDER:$2|zichtbaar}} gemaakt",
"logentry-abusefilter-hit": "$1 heeft $4 {{GENDER:$2|geactiveerd}} door de handeling \"$5\" op $3\". Uitgevoerde acties: $6 ($7)",
+ "log-action-filter-abusefilter": "Type filterwijziging:",
+ "log-action-filter-abusefilter-modify": "Filteraanpassing",
"abusefilter-management": "Beheer van filters",
"abusefilter-list": "Alle filters",
"abusefilter-list-id": "Filternummer",
+ "abusefilter-list-pattern": "Patroon",
"abusefilter-list-status": "Status",
"abusefilter-list-public": "Openbare beschrijving",
"abusefilter-list-consequences": "Gevolgen",
@@ -135,8 +151,9 @@
"abusefilter-list-options-scope-local": "Alleen lokale regels",
"abusefilter-list-options-scope-global": "Alleen globale regels",
"abusefilter-list-options-scope-all": "Lokale en globale regels",
- "abusefilter-list-options-disabled": "Verwijderde filters:",
"abusefilter-list-options-hidedisabled": "Uitgeschakelde filters verbergen",
+ "abusefilter-list-options-search-rlike": "Reguliere expressie",
+ "abusefilter-list-options-search-irlike": "Hoofdletter-ongevoelige reguliere expressie",
"abusefilter-list-options-submit": "Bijwerken",
"abusefilter-tools-text": "Dit zijn een aantal hulpmiddelen die van pas kunnen komen bij het formuleren en debuggen van filters.",
"abusefilter-tools-expr": "Expressietester",
@@ -155,10 +172,13 @@
"abusefilter-edit-status-label": "Statistieken:",
"abusefilter-edit-status": "{{PLURAL:$1|De laatste handeling voldeed|Van de laatste $1 handelingen voldeden er $2}} aan dit filter ($3%).",
"abusefilter-edit-status-profile": "{{PLURAL:$1|De laatste handeling voldeed|Van de laatste $1 handelingen voldeden er $2}} aan dit filter ($3%).\nDe gemiddelde looptijd van de filtercontrole is $4ms, en deze gebruikt $5 {{PLURAL:$5|conditie|condities}} van de conditielimiet.",
+ "abusefilter-edit-throttled-warning": "'''Waarschuwing:''' Dit filter is automatisch gemarkeerd als schadelijk. Als veiligheidsmaatregel zijn de volgende handelingen niet uitgevoerd ($1). Controleer en [[mw:Extension:AbuseFilter/Conditions|optimaliseer]] de condities om deze limitatie te verwijderen.",
"abusefilter-edit-new": "Nieuw filter",
"abusefilter-edit-save": "Filter opslaan",
"abusefilter-edit-id": "Filternummer:",
+ "abusefilter-edit-switch-editor": "Van tekstverwerker omschakelen",
"abusefilter-edit-description": "Beschrijving:\n:''(publiekelijk zichtbaar)''",
+ "abusefilter-edit-field-description": "beschrijving",
"abusefilter-edit-group": "Filtergroep:",
"abusefilter-edit-flags": "Markeringen:",
"abusefilter-edit-enabled": "Dit filter inschakelen",
@@ -176,25 +196,39 @@
"abusefilter-edit-action-blockautopromote": "De bevestigde status van deze gebruiker verwijderen",
"abusefilter-edit-action-degroup": "De gebruiker uit alle gebruikersgroepen verwijderen",
"abusefilter-edit-action-block": "Bewerken door de gebruiker en/of het IP-adres blokkeren",
+ "abusefilter-edit-action-blocktalk": "Ontneem de gebruiker en/of het IP-adres de mogelijkheid om de eigen overlegpagina te bewerken",
"abusefilter-edit-action-throttle": "Maatregel alleen uitvoeren als de gebruiker een drempelwaarde overschrijdt",
- "abusefilter-edit-action-rangeblock": "De /16-range blokkeren waar de gebruiker vandaan komt",
+ "abusefilter-edit-action-rangeblock": "De bijbehorende IP-range blokkeren waar de gebruiker vandaan komt",
"abusefilter-edit-action-tag": "De bewerking voor nadere beoordeling markeren.",
"abusefilter-edit-throttle-count": "Aantal toe te laten handelingen:",
- "abusefilter-edit-throttle-period": "Tijdsduur:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|seconde|seconden}}",
- "abusefilter-edit-throttle-groups": "Groepsbeperkingen per tijdseenheid op basis van:\n:''(één per regel, combineren met komma's)''",
+ "abusefilter-edit-throttle-period": "Tijdsduur (in seconden):",
+ "abusefilter-edit-throttle-groups": "Beperkingen groeperen op:",
+ "abusefilter-edit-throttle-ip": "IP-adres",
+ "abusefilter-edit-throttle-editcount": "Aantal bewerkingen",
+ "abusefilter-edit-throttle-page": "Pagina",
"abusefilter-edit-warn-message": "Te gebruiken systeembericht voor waarschuwing:",
"abusefilter-edit-warn-other": "Ander bericht",
"abusefilter-edit-warn-other-label": "Paginanaam of ander bericht:\n:''(zonder voorvoegsel MediaWiki)''",
"abusefilter-edit-warn-actions": "Handelingen:",
"abusefilter-edit-warn-preview": "Voorvertoning geselecteerd bericht",
"abusefilter-edit-warn-edit": "Geselecteerd bericht aanmaken/bewerken",
+ "abusefilter-edit-disallow-other": "Ander bericht",
+ "abusefilter-edit-disallow-actions": "Handelingen:",
+ "abusefilter-edit-disallow-preview": "Toon/Verberg voorvertoning van het geselecteerde bericht",
+ "abusefilter-edit-disallow-edit": "Geselecteerd bericht aanmaken/bewerken",
"abusefilter-edit-tag-tag": "[[Special:Tags|Labels]] toe te passen (één per regel):",
+ "abusefilter-edit-block-anon-durations": "Blokkadeduur voor anonieme gebruikers:",
+ "abusefilter-edit-block-user-durations": "Blokkadeduur voor geregistreerde gebruikers:",
+ "abusefilter-block-anon": "Anonieme gebruikers blokkeren",
+ "abusefilter-block-user": "geregistreerde gebruikers blokkeren",
+ "abusefilter-block-talk": "kan eigen overlegpagina niet bewerken",
"abusefilter-edit-denied": "U mag de details van dit filter niet bekijken, omdat die niet openbaar zijn.",
"abusefilter-edit-main": "Filterparameters",
"abusefilter-edit-done-subtitle": "Filter bewerkt",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Uw wijzigingen]] aan [[Special:AbuseFilter/$1|filter $3]] zijn opgeslagen.",
"abusefilter-edit-badsyntax": "Er zit een syntaxisfout in de opgegeven filter.\nDe uitvoer van de parser was: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "De volgende velden zijn verplicht en moeten worden ingevuld: $1",
+ "abusefilter-edit-deleting-enabled": "U kunt een actief filter niet als verwijderd markeren.",
"abusefilter-edit-restricted": "U kunt dit filter niet bewerken omdat die één of meerdere beperkte handelingen bevat.\nVraag een gebruiker met toestemming om beperkte handelingen toe te voegen om de wijziging voor u te maken.",
"abusefilter-edit-viewhistory": "Geschiedenis van het filter bekijken",
"abusefilter-edit-history": "Geschiedenis:",
@@ -206,7 +240,7 @@
"abusefilter-edit-export": "Dit filter exporteren naar een andere wiki",
"abusefilter-edit-syntaxok": "Er zijn geen syntaxisfouten gevonden.",
"abusefilter-edit-syntaxerr": "Er is een syntaxisfout gevonden: $1",
- "abusefilter-edit-bad-tags": "Een of meerdere van de labels die u heeft opgegeven is niet geldig.\nLabels moeten kort zijn, mogen geen speciale tekens bevatten en mogen niet gereserveerd zijn door andere software. Kies een andere labelnaam.",
+ "abusefilter-edit-bad-tags": "Een of meerdere van de labels die u hebt opgegeven zijn niet geldig.\nLabels moeten kort zijn, mogen geen speciale tekens bevatten, en mogen niet gereserveerd zijn door andere software. Kies een andere labelnaam.",
"abusefilter-edit-notallowed": "U hebt geen rechten om filters aan te maken of te wijzigen",
"abusefilter-edit-notallowed-global": "U kunt globale misbruikfilters niet aanmaken of bewerken",
"abusefilter-edit-notallowed-global-custom-msg": "Aangepaste waarschuwingsberichten worden niet ondersteund voor globale filters",
@@ -219,8 +253,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Modulus (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Machtsverheffen (**)",
"abusefilter-edit-builder-group-op-comparison": "Comparatieve operatators",
- "abusefilter-edit-builder-op-comparison-equal": "Gelijk aan (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Niet gelijk aan (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Waarde gelijk aan (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Waarde en type gelijk aan (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Waarde niet gelijk aan (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Waarde en type niet gelijk aan (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Kleiner dan (<)",
"abusefilter-edit-builder-op-comparison-gt": "Groter dan (>)",
"abusefilter-edit-builder-op-comparison-lte": "Kleiner dan of gelijk aan (<=)",
@@ -243,6 +279,8 @@
"abusefilter-edit-builder-funcs-lcase": "Naar kleine letters (lcase)",
"abusefilter-edit-builder-funcs-ucase": "Naar hoofdletters (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Verwarrende tekens normaliseren (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normaliseer en doorzoek een string voor meerdere substringen in OR-modus (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Normaliseer en doorzoek een string voor meerdere substringen in AND-modus (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Dubbele tekens verwijderen (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Speciale tekens / totaal aantal tekens (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normaliseren (norm)",
@@ -270,19 +308,18 @@
"abusefilter-edit-builder-vars-new-content-model": "Nieuw inhoudsmodel",
"abusefilter-edit-builder-vars-removedlines": "Regels verwijderd in bijdrage",
"abusefilter-edit-builder-vars-summary": "Bewerkingssamenvatting",
- "abusefilter-edit-builder-vars-article-id": "Pagina-ID",
- "abusefilter-edit-builder-vars-article-ns": "Paginanaamruimte",
- "abusefilter-edit-builder-vars-article-text": "Paginanaam (zonder naamruimte)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Volledige paginanaam",
- "abusefilter-edit-builder-vars-article-views": "Bekeken pagina's",
+ "abusefilter-edit-builder-vars-page-id": "Pagina-ID",
+ "abusefilter-edit-builder-vars-page-ns": "Paginanaamruimte",
+ "abusefilter-edit-builder-vars-page-title": "Paginanaam (zonder naamruimte)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Volledige paginanaam",
"abusefilter-edit-builder-vars-movedfrom-id": "Pagina-ID van de te hernoemen pagina",
"abusefilter-edit-builder-vars-movedfrom-ns": "Naamruimte van de te verplaatsen pagina",
- "abusefilter-edit-builder-vars-movedfrom-text": "Naam van de te verplaatsen pagina",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Volledige naam van de te verplaatsen pagina",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Naam van de te verplaatsen pagina",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Volledige naam van de te verplaatsen pagina",
"abusefilter-edit-builder-vars-movedto-id": "Pagina-ID van de bestemming van de te hernoemen pagina",
"abusefilter-edit-builder-vars-movedto-ns": "Naamruimte van de bestemming van de te verplaatsen pagina",
- "abusefilter-edit-builder-vars-movedto-text": "Naam van de bestemming van de te verplaatsen pagina",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Volledige naam van de bestemming van de te verplaatsen pagina",
+ "abusefilter-edit-builder-vars-movedto-title": "Naam van de bestemming van de te verplaatsen pagina",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Volledige naam van de bestemming van de te verplaatsen pagina",
"abusefilter-edit-builder-vars-user-editcount": "Aantal bewerkingen gebruiker",
"abusefilter-edit-builder-vars-user-age": "Bestaansduur gebruiker",
"abusefilter-edit-builder-vars-user-name": "Gebruikersaccountnaam",
@@ -295,7 +332,7 @@
"abusefilter-edit-builder-vars-all-links": "Alle externe koppelingen in de nieuwe tekst",
"abusefilter-edit-builder-vars-added-links": "Alle externe koppelingen die in deze bewerking zijn toegevoegd",
"abusefilter-edit-builder-vars-removed-links": "Alle bij deze bewerking toegevoegde externe koppelingen zijn verwijderd",
- "abusefilter-edit-builder-vars-old-text": "Wikitekst van de oude pagina vóór de bewerking",
+ "abusefilter-edit-builder-vars-old-text": "Wikitekst van de oude pagina vóór de bewerking (niet meer in gebruik)",
"abusefilter-edit-builder-vars-new-text": "Wikitekst van de nieuwe pagina ná de bewerking",
"abusefilter-edit-builder-vars-new-pst": "Wikitext nieuwe pagina, voor opslaan getransformeerd",
"abusefilter-edit-builder-vars-diff-pst": "Samengevoegde verschillende van de bewerking, transformaties voor opslaan",
@@ -308,7 +345,7 @@
"abusefilter-edit-builder-vars-restrictions-upload": "Uploadbeveiliging van het bestand",
"abusefilter-edit-builder-vars-old-text-stripped": "Tekst oude pagina, ontdaan van alle opmaak",
"abusefilter-edit-builder-vars-old-links": "Koppelingen in de pagina voor de bewerking",
- "abusefilter-edit-builder-vars-old-html": "Wikitext oude pagina in HTML",
+ "abusefilter-edit-builder-vars-old-html": "Wikitext oude pagina in HTML (niet meer in gebruik)",
"abusefilter-edit-builder-vars-minor-edit": "Of de bewerking wel of niet als klein gemarkeerd is",
"abusefilter-edit-builder-vars-file-sha1": "SHA1-hashcode van de bestandsinhoud",
"abusefilter-edit-builder-vars-file-size": "Grootte van het bestand in bytes",
@@ -335,6 +372,7 @@
"abusefilter-history-filterid": "Filter",
"abusefilter-history-select-legend": "Zoekopdracht verfijnen",
"abusefilter-history-select-user": "Gebruiker:",
+ "abusefilter-history-select-filter": "Filternummer:",
"abusefilter-history-select-submit": "Verfijnen",
"abusefilter-history-diff": "Wijzigingen",
"abusefilter-history-error-hidden": "Het filter dat u hebt opgevraagd is verborgen en u kunt de geschiedenis niet bekijken.",
@@ -352,7 +390,7 @@
"abusefilter-exception-regexfailure": "Er is een fout aangetroffen in de reguliere expressie \"$3\" bij teken $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "De ingebouwde variabele \"$2\" is vervangen bij teken $1.\nDit is niet toegestaan.",
"abusefilter-exception-outofbounds": "Er is getracht een lijstelement ($2 bij lijstgrootte $3) op te halen dat niet niet bestaat bij teken $1.",
- "abusefilter-exception-notlist": "Er is getracht een verzamelingselement op te vragen uit iets dat geen verzameling is bij teken $1.",
+ "abusefilter-exception-notarray": "Er is getracht een verzamelingselement op te vragen uit iets dat geen verzameling is bij teken $1.",
"abusefilter-action-tag": "Label",
"abusefilter-action-throttle": "Limieten",
"abusefilter-action-warn": "Waarschuwen",
@@ -368,7 +406,7 @@
"abusefilter-revert-periodstart": "Begin periode:",
"abusefilter-revert-periodend": "Einde periode:",
"abusefilter-revert-search": "Maatregelen selecteren",
- "abusefilter-revert-filter": "Filter:",
+ "abusefilter-revert-filter": "Filternummer:",
"abusefilter-revert-preview-intro": "Hieronder staan de maatregelen die het filter heeft genomen die door deze handeling worden teruggedraaid.\nControleer de terug te draaien maatregelen zorgvuldig, en klik \"{{int:abusefilter-revert-confirm}}\" om uw selectie te bevestigen.",
"abusefilter-revert-confirm": "Bevestigen",
"abusefilter-revert-success": "U hebt alle maatregelen die door het filter via [[Special:AbuseFilter/$1|filter $2]] zijn genomen teruggedraaid.",
@@ -381,12 +419,19 @@
"abusefilter-test-submit": "Testen",
"abusefilter-test-load": "Laden",
"abusefilter-test-user": "Wijzigingen door gebruiker:",
+ "abusefilter-test-nobots": "Botbewerkingen verbergen",
"abusefilter-test-period-start": "Wijzigingen gemaakt na:",
"abusefilter-test-period-end": "Wijzigingen gemaakt voor:",
"abusefilter-test-page": "Wijzigingen aan pagina:",
"abusefilter-test-shownegative": "Wijzigingen weergeven die niet aan het filter voldoen",
"abusefilter-test-syntaxerr": "Het filter dat u hebt ingevoerd bevat een syntaxisfout.\nDoor op \"{{int:abusefilter-edit-check}}\" te klikken krijgt u een volledige toelichting.",
"abusefilter-test-badtitle": "De paginanaam die u hebt ingevoerd is ongeldig. Deze bevat een of meer tekens die niet kunnen worden gebruikt in paginanamen.",
+ "abusefilter-test-action": "Type handeling:",
+ "abusefilter-test-search-type-all": "Alle acties",
+ "abusefilter-test-search-type-edit": "Bewerkingen",
+ "abusefilter-test-search-type-move": "Hernoemingen",
+ "abusefilter-test-search-type-delete": "Verwijderingen",
+ "abusefilter-test-search-type-upload": "Uploads",
"abusefilter-changeslist-examine": "onderzoeken",
"abusefilter-examine": "Individuele wijzigingen onderzoeken",
"abusefilter-examine-intro": "Via deze pagina kunt u de door het filter aangemaakte variabelen voor een individuele wijziging onderzoeken, en deze testen tegen filters.",
@@ -413,6 +458,7 @@
"abusefilter-topnav-import": "Filter importeren",
"abusefilter-log-name": "Filterlogboek",
"abusefilter-log-header": "Dit logboek geeft een overzicht van wijzigingen aan filters.\nZie de [[Special:AbuseFilter/history|lijst met recente filterwijzigingen]] voor volledige details.",
+ "abusefilter-logentry-create": "$1 heeft $4 {{GENDER:$2|aangemaakt}} ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|heeft}} $4 aangepast ($5)",
"abusefilter-log-noresults": "Geen resultaten",
"abusefilter-diff-title": "Verschillen tussen versies",
@@ -428,47 +474,7 @@
"abusefilter-import-submit": "Filtergegevens importeren",
"abusefilter-group-default": "Standaard",
"abusefilter-http-error": "Er is een HTTP-fout opgetreden: $1.",
- "apihelp-abusefiltercheckmatch-description": "Controleer of een filter overeenkomt met een verzameling variabelen, via tekstverwerker gelogde misbruikfiltergebeurtenis.",
- "apihelp-abusefiltercheckmatch-param-filter": "De volledige filtertekst om te controleren op overeenkomst.",
- "apihelp-abusefiltercheckmatch-param-vars": "JSON-gecodeerde array van variabelen om tegen te testen.",
- "apihelp-abusefiltercheckmatch-param-rcid": "Recentewijzigings-ID om tegen te controleren.",
- "apihelp-abusefiltercheckmatch-param-logid": "Misbruikfilterlogboek-ID om tegen te controleren.",
- "apihelp-abusefiltercheckmatch-example-1": "Testen of recentewijzigings-ID 15 overeenkomst met een eenvoudig filter",
- "apihelp-abusefilterchecksyntax-description": "Controleer de syntaxis van een filter.",
- "apihelp-abusefilterchecksyntax-summary": "Controleer de syntaxis van een filter.",
- "apihelp-abusefilterchecksyntax-param-filter": "De volledige filtertekst om de syntaxis van te controleren.",
- "apihelp-abusefilterchecksyntax-example-1": "Controleer de syntaxis van een geldig filter",
- "apihelp-abusefilterchecksyntax-example-2": "Controleer de syntaxis van een ongeldig filter",
- "apihelp-abusefilterevalexpression-description": "Evalueert een misbruikfilterexpressie.",
- "apihelp-abusefilterevalexpression-summary": "Evalueert een misbruikfilterexpressie.",
- "apihelp-abusefilterevalexpression-param-expression": "De te evalueren expressie.",
- "apihelp-abusefilterevalexpression-example-1": "Evalueer een eenvoudige expressie",
- "apihelp-abusefilterunblockautopromote-description": "Sta een gebruiker toe automatische promoties te krijgen als gevolg van een misbruikfilterregel.",
- "apihelp-abusefilterunblockautopromote-summary": "Sta een gebruiker toe automatische promoties te krijgen als gevolg van een misbruikfilterregel.",
- "apihelp-abusefilterunblockautopromote-param-user": "Gebruikersnaam van de te deblokkeren gebruiker.",
- "apihelp-abusefilterunblockautopromote-example-1": "Verwijder de blokkade van de automatische promotie voor [[User:Example]]",
- "apihelp-query+abusefilters-description": "Details weergeven van de misbruikfilters.",
- "apihelp-query+abusefilters-summary": "Details weergeven van de misbruikfilters.",
- "apihelp-query+abusefilters-param-startid": "Het filter-ID waar de opsomming begint.",
- "apihelp-query+abusefilters-param-endid": "Het filter-ID waar de opsomming eindigt.",
- "apihelp-query+abusefilters-param-show": "Alleen filters weergeven die voldoen aan deze criteria.",
- "apihelp-query+abusefilters-param-limit": "Het maximale aantal weer te geven filters.",
- "apihelp-query+abusefilters-param-prop": "Welke eigenschappen op te vragen.",
- "apihelp-query+abusefilters-example-1": "Ingeschakelde openbare filters weergeven",
- "apihelp-query+abusefilters-example-2": "Enige details over filters weergeven",
- "apihelp-query+abuselog-description": "Gebeurtenissen weergeven die zijn afgevangen door een van de misbruikfilters.",
- "apihelp-query+abuselog-summary": "Gebeurtenissen weergeven die zijn afgevangen door een van de misbruikfilters.",
- "apihelp-query+abuselog-param-start": "Het tijdstip waar de opsomming begint.",
- "apihelp-query+abuselog-param-end": "Het tijdstip waar de opsomming eindigt.",
- "apihelp-query+abuselog-param-user": "Alleen regels weergeven die zijn uitgevoerd door een opgegeven gebruiker of IP-adres.",
- "apihelp-query+abuselog-param-title": "Alleen regels weergeven die betrekking hebben op een opgegeven pagina.",
- "apihelp-query+abuselog-param-filter": "Alleen regels weergeven die zijn afgevangen door een opgegeven filter-ID.",
- "apihelp-query+abuselog-param-limit": "Het maximale aantal regels in de lijst.",
- "apihelp-query+abuselog-param-prop": "Welke eigenschappen op te vragen.",
- "apihelp-query+abuselog-example-1": "Recente logboekregels weergeven",
- "apihelp-query+abuselog-example-2": "Recente logboekregels voor [[API]] weergeven",
- "apierror-abusefilter-canttest": "U hebt geen toestemming om misbruikfilters te testen.",
- "apierror-abusefilter-cantcheck": "U hebt geen toestemming om de syntax van misbruikfilters te controleren.",
- "apierror-abusefilter-nosuchlogid": "Er is geen misbruikfilterregel met de id $1.",
- "apierror-abusefilter-badsyntax": "Het filter heeft een ongeldige syntax."
+ "abusefilter-view-private-reason": "Reden voor het opvragen van privélogboekgegevens:",
+ "abusefilter-log-details-id": "Logboekregel-ID",
+ "abusefilter-log-ip-not-available": "Niet beschikbaar"
}
diff --git a/AbuseFilter/i18n/nn.json b/AbuseFilter/i18n/nn.json
index 125a06a5..2f6d8856 100644
--- a/AbuseFilter/i18n/nn.json
+++ b/AbuseFilter/i18n/nn.json
@@ -5,15 +5,15 @@
"Harald Khan",
"Nghtwlkr",
"Njardarlogar",
- "Matma Rex"
+ "Matma Rex",
+ "Matěj Suchánek"
]
},
"abusefilter-desc": "Legg automatisk til heuristikk til endringar.",
"abusefilter": "Konfigurasjon av endringsfilter",
"abuselog": "Endringsfilterlogg",
"abusefilter-intro": "Velkomen til grensesnittet for handsaming av endringsfilteret.\nEndringsfilteret er ein sjølvgåande mekanisme i programvara som automatisk undersøkjer alle handlingar.\nDette grensesnittet viser ei liste over definerte filter, og gjer det mogeleg å endra dei.",
- "abusefilter-mustbeeditor": "Av tryggingsgrunnar kan berre brukarar med rett til å endra endringsfilteret nytta dette grensesnittet.",
- "abusefilter-warning": "'''Åtvaring:''' Handlinga har automatisk vorte identifisert som skadeleg.\nIkkje-konstruktive endringar vert raskt gjorde om, og langvarig forstyrrande endring vil føra til at kontoen din eller IP-adressa di vert blokkert. Meiner du dette er ei konstruktiv handling, kan du lagra henne om att for å stadfesta dette.\nEi kortfatta skildring av misbruksregelen som handlinga di utløyste er: $1",
+ "abusefilter-warning": "'''Åtvaring:''' Handlinga har automatisk vorte identifisert som skadeleg.\nIkkje-konstruktive handlingar vert raskt gjorde om, og langvarig forstyrrande endring vil føra til at kontoen din eller IP-adressa di vert blokkert. Meiner du dette er ei konstruktiv handling, kan du lagra henne om att for å stadfesta dette.\nEi kortfatta skildring av filterregelen som handlinga di utløyste er: $1",
"abusefilter-disallowed": "Denne handlinga har automatisk vorte identifisert som skadeleg, og vart difor ikkje tillaten.\nOm du meiner handlinga di var konstruktiv, informer ein administrator om kva du freista å få til.\nEi kortfatta skildring av misbruksregelen som handlinga di utløyste er: $1",
"abusefilter-blocked-display": "Denne handlinga har automatisk vorten identifisert som skadeleg, og du har vorten hindra frå å gjennomføra ho.\nI tillegg har kontoen din og alle IP-adresser assosiert med han vorten blokkert frå å endra {{SITENAME}}. Om dette var ein feil, kontakt ein administrator.\nEi kortfatta skildring av misbruksregelen som handlinga di utløyste er: $1",
"abusefilter-degrouped": "Denne handlinga har automatisk vorten identifisert som skadeleg. Difor vart ho ikkje tillaten, og grunna av mistanke om misbruk har kontoen din mista alle rettar. Om du meiner dette er ein feil, kontakt ein byråkrat med ei skildring om kva du gjorde, og rettane dine kan verta gjevne tilbake.\nEi kortfatta skildring av misbruksregelen som handlinga di utløyste er: $1",
@@ -49,6 +49,12 @@
"abusefilter-log-search-filter": "Filter-ID-ar (skil med vertikalliner):",
"abusefilter-log-search-title": "Tittel:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Verknad:",
+ "abusefilter-log-search-impact-all": "Alle handlingar",
+ "abusefilter-log-search-impact-saved": "Berre lagra endringar",
+ "abusefilter-log-search-impact-not-saved": "Utan lagra endringar",
+ "abusefilter-log-search-action-taken-label": "Handling utført:",
+ "abusefilter-log-search-action-taken-any": "Kva som helst",
"abusefilter-log-search-submit": "Søk",
"abusefilter-log-entry": "$1: $2 utløyste eit endringsfilter ved å gjera handlinga «$3» på $4. Reaksjon: $5; Filterskildring: $6",
"abusefilter-log-detailedentry-meta": "$1: $2 utløyste $3 ved å utføra handlinga «$4» på $5. Reaksjon: $6; Filterskildring: $7 ($8)",
@@ -61,12 +67,13 @@
"abusefilter-log-details-var": "Variabel",
"abusefilter-log-details-val": "Verdi",
"abusefilter-log-details-vars": "Handlingsparametrar",
- "abusefilter-log-details-private": "Privat informasjon",
+ "abusefilter-log-details-private": "Private loggdetaljar",
"abusefilter-log-details-ip": "Opphavs-IP",
"abusefilter-log-noactions": "ingen",
"abusefilter-log-details-diff": "Endringar gjorde i endringa",
"abusefilter-log-linkoncontribs": "endringsfilterlogg",
"abusefilter-log-linkoncontribs-text": "Endringsfilterlogg for brukaren",
+ "abusefilter-log-linkonhistory": "sjå endringsfilterlogg",
"abusefilter-log-hidden": "(gøymd oppføring)",
"abusefilter-log-hidden-implicit": "(gøymd av di versjonen har vorte sletta)",
"abusefilter-log-cannot-see-details": "Du har ikkje løyve til å sjå detaljane i oppføringa.",
@@ -76,12 +83,11 @@
"abusefilter-log-hide-hidden": "Gøym oppføringa frå ålmenn vising",
"abusefilter-log-hide-reason": "Årsak:",
"abusefilter-log-hide-forbidden": "Du har ikkje løyve til å gøyma oppføringar i misbruksloggen.",
- "abusefilter-logentry-suppress": "skjulte «[[$1]]»",
- "abusefilter-logentry-unsuppress": "viste «[[$1]]»",
"logentry-abusefilter-hit": "$1 utløyste $4, utførde handlinga «$5» på $3. Handlingar utførde: $6 ($7)",
"abusefilter-management": "Handsaming av endringsfilter",
"abusefilter-list": "Alle filter",
"abusefilter-list-id": "Filter-ID",
+ "abusefilter-list-pattern": "Mønster",
"abusefilter-list-status": "Stode",
"abusefilter-list-public": "Offentleg skildring",
"abusefilter-list-consequences": "Verknader",
@@ -97,6 +103,7 @@
"abusefilter-enabled": "Påslege",
"abusefilter-deleted": "Sletta",
"abusefilter-disabled": "Avslege",
+ "abusefilter-throttled": "avgrensa",
"abusefilter-hitcount": "{{PLURAL:$1|eitt treff|$1 treff}}",
"abusefilter-new": "Lag eit nytt filter",
"abusefilter-return": "Attende til filterhandsaming",
@@ -109,8 +116,15 @@
"abusefilter-list-options-scope": "Vis filter:",
"abusefilter-list-options-scope-local": "Berre lokale reglar",
"abusefilter-list-options-scope-global": "Berre globale reglar",
- "abusefilter-list-options-disabled": "Deaktiverte filter:",
"abusefilter-list-options-hidedisabled": "Gøym avslegne filter",
+ "abusefilter-list-options-hideprivate": "Gøym private filter",
+ "abusefilter-list-options-searchfield": "Søk i reglar:",
+ "abusefilter-list-options-searchpattern": "Skriv inn eit mønster",
+ "abusefilter-list-options-searchoptions": "Søkjemodus:",
+ "abusefilter-list-options-search-like": "Vanleg tekst",
+ "abusefilter-list-options-search-rlike": "Regulæruttrykk",
+ "abusefilter-list-options-search-irlike": "Regulæruttrykk som ikkje skil mellom store og småe bokstavar",
+ "abusefilter-list-regexerror": "Det oppstod ein feil under søking: syntaksfeil i regulæruttrykk.",
"abusefilter-list-options-submit": "Oppdater",
"abusefilter-tools-text": "Her er nokre verktøy som kan vera nyttige for å laga og feilsøkja endringsfilter.",
"abusefilter-tools-expr": "Uttrykkstestar",
@@ -127,12 +141,12 @@
"abusefilter-edit-subtitle-new": "Opprettar filter",
"abusefilter-edit-oldwarning": "<strong>Du endrar ein gammal versjon av dette filteret. Den oppgjevne statistikken gjeld for den seinaste versjonen av filteret. Om du lagrar endringane dine, kjem du til å skriva over alle endringane som blei gjort etter versjonen du no endrar. </strong> &bull; [[Special:AbuseFilter/history/$2|Tilbake til filterhistorikken]]",
"abusefilter-edit-status-label": "Statistikk:",
- "abusefilter-edit-status": "Av {{PLURAL:$|den siste handlinga|dei siste $1 handlingane}} har dette filteret passa med $2 ($3 %).",
- "abusefilter-edit-status-profile": "Av {{PLURAL:$|den siste handlinga|dei siste $1 handlingane}} har dette filteret passa med $2 ($3 %). I snitt er køyretida på $4ms og filteret nyttar {{PLURAL:$5|$5 vilkår}} av vilkårsgrensa.",
- "abusefilter-edit-throttled": "'''Åtvaring:''' Dette filteret vart automatisk slege av grunna tryggingsårsaker. Det nådde grensa ved å slå ut på $1 % av alle handlingar.",
+ "abusefilter-edit-status": "Av {{PLURAL:$1|den siste handlinga|dei siste $1 handlingane}} har dette filteret passa med $2 ($3 %).",
+ "abusefilter-edit-status-profile": "Av {{PLURAL:$1|den siste handlinga|dei siste $1 handlingane}} har dette filteret passa med $2 ($3 %). I snitt er køyretida på $4ms og filteret nyttar {{PLURAL:$5|$5 vilkår}} av vilkårsgrensa.",
"abusefilter-edit-new": "Nytt filter",
"abusefilter-edit-save": "Lagra filter",
"abusefilter-edit-id": "Filter-ID:",
+ "abusefilter-edit-switch-editor": "Byt tekstendrar",
"abusefilter-edit-description": ":''(vert vist offentleg)''",
"abusefilter-edit-group": "Filtergruppe:",
"abusefilter-edit-flags": "Flagg:",
@@ -148,7 +162,6 @@
"abusefilter-edit-consequences": "Handlingar gjennomførte ved treff",
"abusefilter-edit-action-warn": "Utfør desse handlingane etter å ha åtvara brukaren",
"abusefilter-edit-action-disallow": "Hindra brukaren frå å utføra handlinga",
- "abusefilter-edit-action-flag": "Flagg endringa i endringsfilterloggen",
"abusefilter-edit-action-blockautopromote": "Fjern stoda til brukaren som automatisk godkjend",
"abusefilter-edit-action-degroup": "Fjern brukaren frå alle privilegerte grupper",
"abusefilter-edit-action-block": "Blokker brukaren og/eller IP-adressa",
@@ -157,7 +170,6 @@
"abusefilter-edit-action-tag": "Merk endringa for vidare vurdering.",
"abusefilter-edit-throttle-count": "Tal på tillatne handlingar:",
"abusefilter-edit-throttle-period": "Tidsperiode:",
- "abusefilter-edit-throttle-seconds": "{{PLURAL:$1|eitt sekund|$1 sekund}}",
"abusefilter-edit-throttle-groups": "Grupper snøggleik etter:\n:''(eitt for kvar line, kombiner med komma)''",
"abusefilter-edit-warn-message": "Systemmelding som skal verta nytta for åtvaringar:",
"abusefilter-edit-warn-other": "Anna melding",
@@ -219,48 +231,52 @@
"abusefilter-edit-builder-funcs-lcase": "Gjer om til små bokstavar (lcase)",
"abusefilter-edit-builder-funcs-ucase": "Gjer om til store bokstavar (lcase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normaliser forvirrande bokstavar (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normaliser og søk etter fleire delstrengar i ein streng (ccnorm_contains_any)",
"abusefilter-edit-builder-funcs-rmdoubles": "Fjern doble bokstavar (rmdoubles)",
- "abusefilter-edit-builder-funcs-specialratio": "Spesialteikn / totalt tal på spesialteikn(specialratio)",
+ "abusefilter-edit-builder-funcs-specialratio": "Spesialteikn / totalt tal på teikn (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normaliser (norm)",
"abusefilter-edit-builder-funcs-count": "Kor mange gonger strengen X finst i strengen Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Kor mange gonger regulæruttrykket X dukkar opp i strengen Y (rcount)",
- "abusefilter-edit-builder-funcs-rmwhitespace": "Fjerna tomrom (rmwhitespace)",
- "abusefilter-edit-builder-funcs-rmspecials": "Fjerna spesialteikn (rmspecials)",
+ "abusefilter-edit-builder-funcs-get_matches": "Tabell med strengar frå ein tekst som passar regulært uttrykk, for kvar oppfanga gruppe (get_matches)",
+ "abusefilter-edit-builder-funcs-rmwhitespace": "Fjern tomrom (rmwhitespace)",
+ "abusefilter-edit-builder-funcs-rmspecials": "Fjern spesialteikn (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Er IP i rekkja? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Søkjestreng for fleire understrengar (contains_any)",
- "abusefilter-edit-builder-funcs-substr": "Understreng (substr)",
- "abusefilter-edit-builder-funcs-strpos": "Posisjonen til understrengen i streng (strpos)",
- "abusefilter-edit-builder-funcs-str_replace": "Erstatt understreng med streng (str_replace)",
+ "abusefilter-edit-builder-funcs-contains-any": "Søk streng for fleire delstrengar (contains_any)",
+ "abusefilter-edit-builder-funcs-substr": "Delstreng (substr)",
+ "abusefilter-edit-builder-funcs-strpos": "Posisjon til delstreng i streng (strpos)",
+ "abusefilter-edit-builder-funcs-str_replace": "Erstatt delstreng med streng (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Tolk streng bokstavrett i regulæruttrykk (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Set variabel (set_var)",
"abusefilter-edit-builder-group-vars": "Variablar",
"abusefilter-edit-builder-vars-accountname": "Kontonamn (on account creation)",
"abusefilter-edit-builder-vars-timestamp": "Unix-tidsstempelet ved endringa",
"abusefilter-edit-builder-vars-action": "Handling",
- "abusefilter-edit-builder-vars-addedlines": "Linjer lagt til i endring",
+ "abusefilter-edit-builder-vars-addedlines": "Liner lagde til i endring",
"abusefilter-edit-builder-vars-delta": "Storleiksskilnad i endring",
"abusefilter-edit-builder-vars-diff": "Einskapleg skilnad av endringar i endringa",
"abusefilter-edit-builder-vars-newsize": "Ny sidestorleik",
"abusefilter-edit-builder-vars-oldsize": "Gamal sidestorleik",
+ "abusefilter-edit-builder-vars-old-content-model": "Gamal innhaldsmodell",
+ "abusefilter-edit-builder-vars-new-content-model": "Ny innhaldsmodell",
"abusefilter-edit-builder-vars-removedlines": "Liner fjerna i endring",
"abusefilter-edit-builder-vars-summary": "Endringssamandrag/årsak",
- "abusefilter-edit-builder-vars-article-id": "Side-ID",
- "abusefilter-edit-builder-vars-article-ns": "Sidenamnerom",
- "abusefilter-edit-builder-vars-article-text": "Sidetittel (utan namnerom)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Fullstendig sidetittel",
- "abusefilter-edit-builder-vars-article-views": "Sidevisingar",
+ "abusefilter-edit-builder-vars-page-id": "Side-ID",
+ "abusefilter-edit-builder-vars-page-ns": "Sidenamnerom",
+ "abusefilter-edit-builder-vars-page-title": "Sidetittel (utan namnerom)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Fullstendig sidetittel",
"abusefilter-edit-builder-vars-movedfrom-id": "Side-ID til kjeldesida ved flytting",
"abusefilter-edit-builder-vars-movedfrom-ns": "Namnerom til målsida ved flytting",
- "abusefilter-edit-builder-vars-movedfrom-text": "Tittel til kjeldesida ved flytting",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Fullstendig tittel til kjeldesida ved flytting",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Tittel til kjeldesida ved flytting",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Fullstendig tittel til kjeldesida ved flytting",
"abusefilter-edit-builder-vars-movedto-id": "Side-ID til målsida ved flytting",
"abusefilter-edit-builder-vars-movedto-ns": "Namnerom til målsida ved flytting",
- "abusefilter-edit-builder-vars-movedto-text": "Tittel til målsida ved flytting",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Fullstendig tittel til målsida ved flytting",
+ "abusefilter-edit-builder-vars-movedto-title": "Tittel til målsida ved flytting",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Fullstendig tittel til målsida ved flytting",
"abusefilter-edit-builder-vars-user-editcount": "Talet på bidrag av brukaren",
"abusefilter-edit-builder-vars-user-age": "Alder på brukarkonto",
"abusefilter-edit-builder-vars-user-name": "Namn på brukarkonto",
"abusefilter-edit-builder-vars-user-groups": "Grupper (inkludert implisitte) brukaren er i",
+ "abusefilter-edit-builder-vars-user-rights": "Rettar som brukaren har",
"abusefilter-edit-builder-vars-user-blocked": "Om brukaren er blokkert",
"abusefilter-edit-builder-vars-user-emailconfirm": "E-postadressa vart stadfest",
"abusefilter-edit-builder-vars-recent-contributors": "Dei siste fem bidragsytarane til sida",
@@ -281,6 +297,11 @@
"abusefilter-edit-builder-vars-old-html": "Gamal wikitekst på sida, tolka til HTML",
"abusefilter-edit-builder-vars-minor-edit": "Om endringa er markert som småplukk eller ikkje",
"abusefilter-edit-builder-vars-file-sha1": "SHA1-hash av filinnhald",
+ "abusefilter-edit-builder-vars-file-size": "Filstorleik i byte",
+ "abusefilter-edit-builder-vars-file-mime": "MIME-type til fil",
+ "abusefilter-edit-builder-vars-file-mediatype": "Filmedietype",
+ "abusefilter-edit-builder-vars-file-height": "Filhøgd i pikslar",
+ "abusefilter-edit-builder-vars-file-bits-per-channel": "Bit per fargekanal i fila",
"abusefilter-filter-log": "Nylege filterendringar",
"abusefilter-history": "Endringshistorikk for endringsfilter #$1",
"abusefilter-history-foruser": "Endringar av $1",
@@ -316,7 +337,7 @@
"abusefilter-exception-regexfailure": "Feil i det regulære uttrykket «$3» ved teikn $1: «$2»",
"abusefilter-exception-overridebuiltin": "Ulovleg overkøyring av innebygd variabel «$2» ved teikn $1.",
"abusefilter-exception-outofbounds": "Bed om ikkje-eksisterande listeelement $2 (listestorleik = $3) ved teikn $1.",
- "abusefilter-exception-notlist": "Bed om tabellelement fra ein ikkje-tabell ved teikn $1.",
+ "abusefilter-exception-notarray": "Bed om tabellelement frå ein ikkje-tabell ved teikn $1.",
"abusefilter-action-tag": "Merk",
"abusefilter-action-throttle": "Avgrens endringssnøggleik",
"abusefilter-action-warn": "Åtvar",
@@ -369,14 +390,15 @@
"abusefilter-examine-noresults": "Fann ingen resultat for søkjeparametrane du gav.",
"abusefilter-topnav": "'''Endringsfilternavigasjon'''",
"abusefilter-topnav-home": "Heim",
- "abusefilter-topnav-test": "Gruppetesting",
+ "abusefilter-topnav-test": "Endringsgruppetesting",
"abusefilter-topnav-examine": "Gransk tidlegare endringar",
"abusefilter-topnav-log": "Endringsfilterlogg",
"abusefilter-topnav-tools": "Feilsøkingsverktøy",
"abusefilter-topnav-import": "Importer filter",
"abusefilter-log-name": "Logg for endringsfilter",
"abusefilter-log-header": "Denne loggen viser eit samandrag av endringar gjorde i filtera.\nFor utførlege detaljar, sjå [[Special:AbuseFilter/history|lista]] over dei siste filterendringane.",
- "abusefilter-log-entry-modify": "endra $1 ($2)",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|oppretta}} $4 ($5)",
+ "abusefilter-logentry-modify": "$1 {{GENDER:$2|endra}} $4 ($5)",
"abusefilter-log-noresults": "Ingen resultat",
"abusefilter-diff-title": "Skilnader mellom versjonar",
"abusefilter-diff-item": "Element",
@@ -389,5 +411,7 @@
"abusefilter-diff-next": "Nyare endring",
"abusefilter-import-intro": "Du kan nytta dette grensesnittet til å importera filter frå andre wikiar.\nPå kjeldewikien trykkjer du på «{{int:abusefilter-edit-export}}» under «{{int:abusefilter-edit-tools}}» på redigeringsgrensesnittet.\nKopier frå tekstboksen som dukkar opp og lim det inn i tekstboksen her. Trykk so på «{{int:abusefilter-import-submit}}».",
"abusefilter-import-submit": "Importer data",
- "abusefilter-group-default": "Standard"
+ "abusefilter-group-default": "Standard",
+ "tag-abusefilter-condition-limit": "vilkårsgrensa nådd",
+ "tag-abusefilter-condition-limit-description": "Endringar eller andre hendingar som ikkje kunne granskast av alle verksame [[Special:AbuseFilter|endringsfilter]] ([[mw:Extension:AbuseFilter/Conditions|hjelp]])."
}
diff --git a/AbuseFilter/i18n/oc.json b/AbuseFilter/i18n/oc.json
index 4bf1c8a5..fdcee06a 100644
--- a/AbuseFilter/i18n/oc.json
+++ b/AbuseFilter/i18n/oc.json
@@ -2,14 +2,16 @@
"@metadata": {
"authors": [
"Cedric31",
- "Matma Rex"
+ "Matma Rex",
+ "Unuaiga",
+ "Guilhelma",
+ "Matěj Suchánek"
]
},
"abusefilter-desc": "Aplica d'euristicas automaticas a las modificacions",
"abusefilter": "Configuracion del filtre dels abuses",
"abuselog": "Jornal dels abuses",
"abusefilter-intro": "Benvengut(uda) dins l'interfàcia de gestion dels filtres antiabuses.\nLo filtre antiabuses es un mecanisme logicial automatizat que permet d'aplicar d'euristicas predefinidas a totas las accions.\nAquesta interfàcia presenta una lista dels filtres definits, e balha la possibilitat de los modificar.",
- "abusefilter-mustbeeditor": "Per de rasons de seguretat, sols los utilizaires amb lo dreit de modificar los filtres antiabuses pòdon utilizar aquesta interfàcia.",
"abusefilter-warning": "<big>'''Avertiment'''</big> : Aquesta accion es estada identificada automaticament coma nosibla.\nLas edicions que son pas constructivas seràn rapidament anulladas,\ne la repeticion de las asinadas del meteis genre provocarà lo blocatge de vòstre compte o de vòstra adreça IP.\nSe sètz convençu{{GENDER:||t|(da)}} que vòstra modificacion es constructiva, la podètz la sometre un còp de mai per la validar.\nVaquí la descripcion brèva de la règla de l’abús qu'a detectat vòstra accion : $1",
"abusefilter-disallowed": "Aquesta modificacion es estada automaticament idenficada coma nusibla e, per via de consequéncia, pas permesa.\nSe sètz convençu{{GENDER:||t|(da)}} que vòstra modificacion èra constructiva, contactatz un administrator, e informatz-lo de quina accion eratz a far : $1",
"abusefilter-blocked-display": "Aquesta accion es estada identifcada coma nusibla automaticament, e ja sètz estat(ada) empachat(ada) de l’executar.\nEn consequéncia, per protegir {{SITENAME}}, vòstre compte d'utilizaire e totas las adreças IP son estadas blocadas en escritura.\nS'aquò es degut a una error, contactatz un administrator.\nVaquí la descripcion brèva de la règla de l’abús qu'a detectat vòstra accion : $1",
@@ -47,7 +49,7 @@
"abusefilter-log-search-title": "Títol :",
"abusefilter-log-search-wiki": "Wiki :",
"abusefilter-log-search-submit": "Recercar",
- "abusefilter-log-entry": "$1 : $2 {{GENDER:$8:a desenclavat}} un filtre anti-abuses, en {{GENDER:$8|efectuant}} l'accion « $3 » sus $4.\nAccions entrepresas : $5 ;\nDescripcion del filtre : $6",
+ "abusefilter-log-entry": "$1 : $2 {{GENDER:$8|a desenclavat}} un filtre anti-abuses, en {{GENDER:$8|efectuant}} l'accion « $3 » sus $4.\nAccions entrepresas : $5 ;\nDescripcion del filtre : $6",
"abusefilter-log-detailedentry-meta": "$1 : $2 {{GENDER:$9|a desenclavat}} lo $3, {{GENDER:$9|en efectuant}} l'accion « $4 » sus « $5 ».\nAccions entrepresas : $6 ;\nDescripcion del filtre : $7 ($8)",
"abusefilter-log-detailedentry-global": "filtre global $1",
"abusefilter-log-detailedentry-local": "filtre $1 dels abuses",
@@ -70,11 +72,11 @@
"abusefilter-log-hide-id": "Identificant de l'entrada de jornal :",
"abusefilter-log-hide-hidden": "Amagar aquesta entrada a la vista del public",
"abusefilter-log-hide-reason": "Motiu :",
- "abusefilter-logentry-suppress": "a amagat [[$1]]",
- "abusefilter-logentry-unsuppress": "a desamagat [[$1]]",
+ "abusefilter-log-hide-reason-other": "Autra rason / rason suplementària :",
"abusefilter-management": "Gestion del filtre dels abuses",
"abusefilter-list": "Totes los filtres",
"abusefilter-list-id": "Filtre ID",
+ "abusefilter-list-pattern": "Motiu",
"abusefilter-list-status": "Estatut",
"abusefilter-list-public": "Descripcion publica",
"abusefilter-list-consequences": "Consequéncias",
@@ -102,8 +104,14 @@
"abusefilter-list-options-scope": "Afichar los filtres :",
"abusefilter-list-options-scope-local": "Règlas localas unicament",
"abusefilter-list-options-scope-global": "Règlas globalas unicament",
- "abusefilter-list-options-disabled": "Filtres desactivats :",
"abusefilter-list-options-hidedisabled": "Amagar los filtres desactivats",
+ "abusefilter-list-options-searchfield": "Recèrcar dins las règlas :",
+ "abusefilter-list-options-searchpattern": "Inseratz un motiu",
+ "abusefilter-list-options-searchoptions": "Mòde de recèrca :",
+ "abusefilter-list-options-search-like": "Demanda simpla",
+ "abusefilter-list-options-search-rlike": "Expression regulara",
+ "abusefilter-list-options-search-irlike": "Expression regulara insensibla a la caissa",
+ "abusefilter-list-regexerror": "I a agut una error pendent la recèrca. Error de sintaxi dins las expressions regularas.",
"abusefilter-list-options-submit": "Metre a jorn",
"abusefilter-tools-text": "Aquí qualques aisinas que pòdon èsser utilas dins la formulacion o lo desbugatge dels filtres d’abuses.",
"abusefilter-tools-expr": "Tèst d'expression",
@@ -122,11 +130,12 @@
"abusefilter-edit-status-label": "Estatisticas :",
"abusefilter-edit-status": "{{PLURAL:$1|Dins la darrièra accion|Demest las $1 darrièras accions}}, aqueste filtre a atench $2 ($3 %).",
"abusefilter-edit-status-profile": "{{PLURAL:$1|Dins la darrièra accion|Demest las $1 darrièras accions}}, aqueste filtre a atench $2 ($3 %).\nEn mejana, la durada d'execucion d'aqueste filtre es de $4 ms e utiliza $5 condicion{{PLURAL:$5||s}} del limit de las condicions.",
- "abusefilter-edit-throttled": "'''Avertiment''' : Aqueste filtre es estat desactivat automaticament per mesura de seguretat. A atench lo limit de correspondéncia a mai de $1 % de las accions.",
"abusefilter-edit-new": "Filtre novèl",
"abusefilter-edit-save": "Salvar lo filtre",
"abusefilter-edit-id": "Filtre ID :",
+ "abusefilter-edit-switch-editor": "Cambiar d'editor",
"abusefilter-edit-description": "Descripcion :\n:''(Visibla publicament)''",
+ "abusefilter-edit-field-description": "descripcion",
"abusefilter-edit-group": "Grop del filtre :",
"abusefilter-edit-flags": "Drapèus :",
"abusefilter-edit-enabled": "Activar aqueste filtre",
@@ -149,7 +158,6 @@
"abusefilter-edit-action-tag": "Balisar la modificacion per una relectura ulteriora.",
"abusefilter-edit-throttle-count": "Nombre d’accions d'autorizar :",
"abusefilter-edit-throttle-period": "Periòde de temps :",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|segonda|segondas}}",
"abusefilter-edit-throttle-groups": "Grop detengut per :\n:''(un per linha, separat per de virgulas)''",
"abusefilter-edit-warn-message": "Messatge del sistèma d'utilizar per l'avertiment :",
"abusefilter-edit-warn-other": "Autre messatge",
@@ -163,6 +171,7 @@
"abusefilter-edit-done-subtitle": "Filtre modificat",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Vòstras modificacions]] al [[Special:AbuseFilter/$1|filtre $3]] son estadas enregistradas.",
"abusefilter-edit-badsyntax": "I a una error de sintaxi dins lo filtre qu'avètz especificat. Lo resultat del parser èra : <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Los camps seguents son necessaris e devon èstre emplenats : $1",
"abusefilter-edit-restricted": "Podètz pas modificar aqueste filtre perque conten una o mantuna accion restrentas. Demandatz a un utilizaire qu'a lo dreit de modificar los filtres amb d'accions restrentas de far la modificacion per vos.",
"abusefilter-edit-viewhistory": "Veire l’istoric d'aqueste filtre",
"abusefilter-edit-history": "Istoric :",
@@ -187,7 +196,8 @@
"abusefilter-edit-builder-op-arithmetic-pow": "Poténcia (**)",
"abusefilter-edit-builder-group-op-comparison": "Operators de comparason",
"abusefilter-edit-builder-op-comparison-equal": "Egal a (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Diferent de (!=)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Valor e tipe egals a (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Valor diferenta de (!=)",
"abusefilter-edit-builder-op-comparison-lt": "Inferior a (<)",
"abusefilter-edit-builder-op-comparison-gt": "Superior a (<)",
"abusefilter-edit-builder-op-comparison-lte": "Inferior o egal a (<=)",
@@ -235,19 +245,18 @@
"abusefilter-edit-builder-vars-oldsize": "Talha de la pagina anciana",
"abusefilter-edit-builder-vars-removedlines": "Linhas suprimidas al moment de la modificacion",
"abusefilter-edit-builder-vars-summary": "Ensenhador, motiu de la modificacion",
- "abusefilter-edit-builder-vars-article-id": "ID de la pagina",
- "abusefilter-edit-builder-vars-article-ns": "Espaci de noms de la pagina",
- "abusefilter-edit-builder-vars-article-text": "Títol de la pagina (sens lo nom de l’espaci)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Títol complet de la pagina",
- "abusefilter-edit-builder-vars-article-views": "Paginas vistas",
+ "abusefilter-edit-builder-vars-page-id": "ID de la pagina",
+ "abusefilter-edit-builder-vars-page-ns": "Espaci de noms de la pagina",
+ "abusefilter-edit-builder-vars-page-title": "Títol de la pagina (sens lo nom de l’espaci)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Títol complet de la pagina",
"abusefilter-edit-builder-vars-movedfrom-id": "ID de la pagina d’origina del cambiament de nom",
"abusefilter-edit-builder-vars-movedfrom-ns": "Nom d’espaci de nomenatge del cambiament de nom de la pagina d’origina.",
- "abusefilter-edit-builder-vars-movedfrom-text": "Títol del desplaçament de la pagina d’origina",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Títol entièr de la pagina d’origina",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Títol del desplaçament de la pagina d’origina",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Títol entièr de la pagina d’origina",
"abusefilter-edit-builder-vars-movedto-id": "ID de la pagina de destinacion del cambiament de nom",
"abusefilter-edit-builder-vars-movedto-ns": "Nom de l’espaci de nom del cambiament de nom de la pagina de destinacion",
- "abusefilter-edit-builder-vars-movedto-text": "Títol del cambiament de nom de la pagina de destinacion",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Títol entièr del cambiament de nom de la pagina de destinacion",
+ "abusefilter-edit-builder-vars-movedto-title": "Títol del cambiament de nom de la pagina de destinacion",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Títol entièr del cambiament de nom de la pagina de destinacion",
"abusefilter-edit-builder-vars-user-editcount": "Comptador d’edicion de l’utilizaire",
"abusefilter-edit-builder-vars-user-age": "Atge del compte d'utilizaire",
"abusefilter-edit-builder-vars-user-name": "Nom del compte d'utilizaire",
@@ -307,7 +316,7 @@
"abusefilter-exception-regexfailure": "Error dins l’expression regulara « $3 » al caractèr $1 : « $2 »",
"abusefilter-exception-overridebuiltin": "Espotiment interdich de la variabla disponibla per defaut « $2 » al caractèr $1.",
"abusefilter-exception-outofbounds": "Demanda de l'element inexistent $2 (talha de la lista = $3) al caractèr $1.",
- "abusefilter-exception-notlist": "Demanda d'un element dins quicòm mai qu'un tablèu al caractèr $1.",
+ "abusefilter-exception-notarray": "Demanda d'un element dins quicòm mai qu'un tablèu al caractèr $1.",
"abusefilter-action-tag": "Balisar",
"abusefilter-action-throttle": "Regulacion",
"abusefilter-action-warn": "Avertiment",
@@ -323,8 +332,9 @@
"abusefilter-revert-periodstart": "Començament del periòde :",
"abusefilter-revert-periodend": "Fin del periòde :",
"abusefilter-revert-search": "Seleccionar las accions",
- "abusefilter-revert-filter": "Filtre :",
+ "abusefilter-revert-filter": "Filtre ID:",
"abusefilter-revert-preview-intro": "Aquí las accions realizadas pel filtre antiabusses, que seràn revocadas per aquesta accion.\nVerificatz-las menimosament, puèi clicatz sus « {{int:abusefilter-revert-confirm}} » per validar vòstra seleccion.",
+ "abusefilter-revert-confirm-legend": "Confirmar lo retorn",
"abusefilter-revert-confirm": "Confirmar",
"abusefilter-revert-success": "Avètz revocat amb succès totas las accions entrepresas pel filtre d'abuses degut al [[Special:AbuseFilter/$1|filtre $2]]",
"abusefilter-revert-reason": "Revocacion automatica de totas las accions entrepresas pel filtre $1.\nRason balhada : $2",
@@ -367,7 +377,6 @@
"abusefilter-topnav-import": "Importar un filtre",
"abusefilter-log-name": "Jornal del filtre antiabuses",
"abusefilter-log-header": "Aqueste jornal aficha un somari de las modificacions faitas als filtres.\nPer mai de detalhs, vejatz [[Special:AbuseFilter/history|la lista]] dels darrièrs cambiaments del filtre.",
- "abusefilter-log-entry-modify": "a modificat $1 ($2)",
"abusefilter-log-noresults": "Pas cap de resultat",
"abusefilter-diff-title": "Diferéncias entre las versions",
"abusefilter-diff-item": "Article",
@@ -381,6 +390,5 @@
"abusefilter-import-intro": "Podètz utilizar aquesta interfàcia per importar de filtres en provenéncia d’autres wikis.\nSul wiki d’origina, clicatz sus « {{int:abusefilter-edit-export}} » dins « {{int:abusefilter-edit-tools}} » dempuèi l’interfàcia d’edicion.\nCopiatz l'airal de tèxte que s’aficha e empegatz-lo dins aqueste airal de tèxte, puèi clicatz sus « {{int:abusefilter-import-submit}} »,",
"abusefilter-import-submit": "Importar de donadas",
"abusefilter-group-default": "Per defaut",
- "abusefilter-http-error": "Una error HTTP s’es produsida : $1.",
- "apihelp-query+abusefilters-param-prop": "Quinas proprietats obténer."
+ "abusefilter-http-error": "Una error HTTP s’es produsida : $1."
}
diff --git a/AbuseFilter/i18n/or.json b/AbuseFilter/i18n/or.json
index c0de91d6..3df6224b 100644
--- a/AbuseFilter/i18n/or.json
+++ b/AbuseFilter/i18n/or.json
@@ -15,7 +15,6 @@
"abusefilter": "ଅପବ୍ୟବ‌ହାର ଛଣା ସଜାଣି",
"abuselog": "ଅପବ୍ୟବ‌ହାର ଇତିହାସ",
"abusefilter-intro": "ଅପବ୍ୟବହାର ଛଣା ପରିଚାଳନା ଇଣ୍ଟରଫେସକୁ ପାଛୋଟା ।\nଅପବ୍ୟବହାର ଛଣା ଏକ ଆପେଆପେ ହେଉଥିବା ସଫ୍ଟୱାର ପ୍ରକ୍ରିୟା ଯାହା ଆପେଆପେ ଏକ ସାଧାରଣ ଜ୍ଞାନକୁ ନେଇ କାମ ସବୁ କରିଥାଏ ।\nଏହି ଇଣ୍ଟରଫେସ ବଛା କେତେକ ଛଣା ଦେଖାଉଛି, ଏହା ସେସବୁକୁ ବଦଳାଇବା ପାଇଁ ଅନୁମତି ଦେଇଥାଏ ।",
- "abusefilter-mustbeeditor": "ପ୍ରତିରକ୍ଷା କାରଣରୁ, ବାକି ଅପବ୍ୟବହାର ଛଣା ଅଧିକାର ମିଳିଥିବା ବ୍ୟବହାରକାରୀଗଣ କେବଳ ଏହି ଇଣ୍ଟରଫେସ ବ୍ୟବହାର କରିପାରିବେ ।",
"abusefilter-warning": "'''ଚେତାବନୀ''': ଏହି କାମଟି ବିପଦଜନକ ବୋଲି ଚିହ୍ନିତ ହୋଇଛି ।\nଅଣ-ଗଠନମୂଳକ ସମ୍ପାଦନାସବୁ ସଙ୍ଗେ ସଙ୍ଗେ ପଛକୁ ଫେରାଇଦିଅଯିବ,\nଏବଂ ଭୁଲ, ଅଯଥା ତ‌ଥ୍ୟ ଥିବା ଓ ବାରମ୍ବାର ଅଣ-ଗଠନମୂଳକ ସମ୍ପାଦନା କରାଯାଉଥିଲେ ଆପଣଙ୍କ IP ଠିକଣାଟି ଅଟକାଇଦିଆଯିବ ।\nଯଦି ଆପଣ ଏହି ସମ୍ପାଦନାଟି ଗଠନମୂଳକ ବୋଲି ଭାବୁଛନ୍ତି ତେବେ \"ପଠାନ୍ତୁ\" ଉପରେ କ୍ଲିକ କରି ଥୟ କରନ୍ତୁ ।\nଏହି ଅପବ୍ୟବ‌ହାରର ନୀତିବଳି ଥିବା ଏକ ସଂକ୍ଷିପ୍ତ ବିବରଣୀ ଯାହା ଆପଣଙ୍କ କାମ ସଙ୍ଗେ ମିଳୁଛି: $1",
"abusefilter-blocker": "ଅପବ୍ୟବହାର ଛଣା",
"abusefilter-blockreason": "ଅପବ୍ୟବହାର ଛଣା ଦେଇ ଆପେଆପେ ଅଟକାଗଲା ।\nମେଳୁଥିବା ନୀତିର ବିବରଣୀ: $1",
@@ -71,8 +70,6 @@
"abusefilter-log-hide-hidden": "ସମସ୍ତଙ୍କ ଦେଖିବାରୁ ଏହାକୁ ଅଟକାଇବା",
"abusefilter-log-hide-reason": "କାରଣ",
"abusefilter-log-hide-forbidden": "ଲଗ ପ୍ରବେଶସବୁକୁ ଲୁଚାଇବା ପାଇଁ ଏପଣଙ୍କୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ ।",
- "abusefilter-logentry-suppress": "\"[[$1]]\" ଲୁଚାଇଦିଆଗଲା",
- "abusefilter-logentry-unsuppress": "ଲୁଚିଥିବା \"[[$1]]\"କୁ ଦେଖାଇଦିଆଗଲା",
"abusefilter-management": "ଗାଳି ଗୁଲଜ ରୋକିବା ବ୍ୟବସ୍ଥା",
"abusefilter-list": "ସବୁ ଛଣା",
"abusefilter-list-id": "IDଟିକୁ ଛାଣିବା",
@@ -102,7 +99,6 @@
"abusefilter-list-options-deleted-show": "ଲିଭାଯାଇଥିବା ଛଣାଗୁଡ଼ିକୁ ଏହା ସହ ଯୋଗ କରିବେ",
"abusefilter-list-options-scope-local": "ସ୍ଥାନୀୟ ଉଇକି",
"abusefilter-list-options-scope-global": "ସାର୍ବଜନୀନ ନିୟମ ସବୁ",
- "abusefilter-list-options-disabled": "ଅଚଳକରାଯାଇଥିବା ଛଣା:",
"abusefilter-list-options-hidedisabled": "ବନ୍ଦ କରାଯାଇଥିବା ଛଣାଗୁଡିକୁ ଲୁଚାଇବେ",
"abusefilter-list-options-submit": "ଅପଡେଟ କରିବେ",
"abusefilter-tools-text": "ଏଠାରେ ଜିଛି ଉପକରଣ ରଖାଯାଇଛି ଯାହା ଅପବ୍ୟବହାର ରୋକିବା ଓ ନିୟମ ତିଆରିରେ ସହଯୋଗ କରିବ ।",
@@ -116,7 +112,6 @@
"abusefilter-reautoconfirm-done": "ଖାତାର ଆପେଆପେ ସ୍ଥିତିକୁ ପଛକୁ ଫେରାଇଦିଆଗଲା",
"abusefilter-edit-subtitle": "$1 ଛଣାଟିକୁ ସମ୍ପାଦନା କରାଗଲା",
"abusefilter-edit-status-label": "ଆକଳନ:",
- "abusefilter-edit-throttled": "'''ଚେତାବନୀ''': ଏହି ଛଣା ଆପେଆପେ ପ୍ରତିରକ୍ଷା ପାଇଁ ଅଚଳ କରାଗଲା ।\nଏହା $1% ଗୋଟି କାମର ସୀମା ପହଞ୍ଚିଗଲା ।",
"abusefilter-edit-new": "ନୂଆ ଛଣା",
"abusefilter-edit-save": "ଛଣା ସାଇତିବା",
"abusefilter-edit-id": "IDଟିକୁ ଛାଣିବା",
@@ -133,7 +128,6 @@
"abusefilter-edit-consequences": "ମେଲାଯିବା ବେଳେ କରାଯାଇଥିବା କାମମାନ",
"abusefilter-edit-action-warn": "ସେହି ବ୍ୟବହାରକାରୀଙ୍କୁ ଚେତାବନୀ ଦେବାପରେ ଏହି କାମ କରିବେ",
"abusefilter-edit-action-disallow": "ପ୍ରଶ୍ନରେ ଏହି ବ୍ୟବହାରକାରୀଙ୍କୁ ଏହି କାମ କରିବାରୁ ରୋକିବେ",
- "abusefilter-edit-action-flag": "ଅପବ୍ୟବହାର ଇତିହାସରେ ଏହି ସମ୍ପାଦନାକୁ ବାସନ୍ଦ କରିବେ",
"abusefilter-edit-action-blockautopromote": "ବ୍ୟବହାରକାରୀଙ୍କର ଆପେଆପେ ଥୟହୋଇଥିବା ସ୍ଥିତିକୁ ବଦଳାଇଦେବେ",
"abusefilter-edit-action-degroup": "ଏହି ବ୍ୟବହାରକାରୀଙ୍କୁ ଅଧିକ ସ୍ସୁବିଧାସୁଯୋଗ ଥିବା ଦଳରୁ ବାହାର କରିଦେବେ",
"abusefilter-edit-action-block": "ବ୍ୟବହାରକାରୀଙ୍କୁ ବାସନ୍ଦ କରିବେ ଓ/ବା IP ଠିକଣାକୁ ଅଟକାଇବେ",
@@ -142,7 +136,6 @@
"abusefilter-edit-action-tag": "ଆଗକୁ ହେବାକୁ ଥିବା ସମୀକ୍ଷା ପାଇଁ ଏହି ସମ୍ପାଦନାକୁ ଚିହ୍ନିତ କରାଗଲା",
"abusefilter-edit-throttle-count": "ଅନୁମୋଦିତ କାମ ସଂଖ୍ୟା:",
"abusefilter-edit-throttle-period": "କାର୍ଯ୍ୟକାଳ:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|ସେକେଣ୍ଡ|ସେକେଣ୍ଡ}}",
"abusefilter-edit-throttle-groups": "ଦଳ ଗୋଳିଆଘାଣ୍ଟିଆର କାରଣ:\n:''(ଧାଡ଼ି ପ୍ରତି ଗୋଟିଏ, କମା ଦେଇ ଅଲଗା କରାଯାଇଛି)''",
"abusefilter-edit-warn-message": "ଚେତାବନୀ ପାଇଁ ବ୍ୟବହାର ହେବାକୁ ଥିବା ସିଷ୍ଟମ ମେସେଜ:",
"abusefilter-edit-warn-other": "ଭିନ୍ନ ମେସେଜ",
@@ -223,19 +216,18 @@
"abusefilter-edit-builder-vars-oldsize": "ପୁରୁଣା ପୃଷ୍ଠା ଆକାର",
"abusefilter-edit-builder-vars-removedlines": "ବଦଳାଇବା ବେଳେ କଟାଜାଇଥିବା ଧାଡିଗୁଡିକ",
"abusefilter-edit-builder-vars-summary": "ବଦଳ ସାରାଂଶ/କାରଣ",
- "abusefilter-edit-builder-vars-article-id": "ପୃଷ୍ଠା ଆଇଡ଼ି",
- "abusefilter-edit-builder-vars-article-ns": "ପୃଷ୍ଠା ନେମସ୍ପେସ",
- "abusefilter-edit-builder-vars-article-text": "ପୃଷ୍ଠା ଶୀର୍ଷକ (ବିନା ନେମସ୍ପେସ)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "ପୁରା ପୃଷ୍ଠା ନାମ",
- "abusefilter-edit-builder-vars-article-views": "ପୃଷ୍ଠା ଦେଖା ସଂଖ୍ୟା",
+ "abusefilter-edit-builder-vars-page-id": "ପୃଷ୍ଠା ଆଇଡ଼ି",
+ "abusefilter-edit-builder-vars-page-ns": "ପୃଷ୍ଠା ନେମସ୍ପେସ",
+ "abusefilter-edit-builder-vars-page-title": "ପୃଷ୍ଠା ଶୀର୍ଷକ (ବିନା ନେମସ୍ପେସ)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "ପୁରା ପୃଷ୍ଠା ନାମ",
"abusefilter-edit-builder-vars-movedfrom-id": "ଘୁଞ୍ଚାହେବା ମୂଳାଧାର ପୃଷ୍ଠା ID",
"abusefilter-edit-builder-vars-movedfrom-ns": "ଘୁଞ୍ଚାହେବା ମୂଳାଧାର ପୃଷ୍ଠାର ନେମସ୍ପେସ",
- "abusefilter-edit-builder-vars-movedfrom-text": "ଘୁଞ୍ଚାଯିବା ମୂଳାଧାର ପୃଷ୍ଠାର ନାମ",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "ଘୁଞ୍ଚାଯିବା ମୂଳପୃଷ୍ଠାର ପୂରା ନାମ",
+ "abusefilter-edit-builder-vars-movedfrom-title": "ଘୁଞ୍ଚାଯିବା ମୂଳାଧାର ପୃଷ୍ଠାର ନାମ",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "ଘୁଞ୍ଚାଯିବା ମୂଳପୃଷ୍ଠାର ପୂରା ନାମ",
"abusefilter-edit-builder-vars-movedto-id": "ଘୁଞ୍ଚାଯିବା ଲକ୍ଷ ପୃଷ୍ଠାର ପୃଷ୍ଠା ID",
"abusefilter-edit-builder-vars-movedto-ns": "ଘୁଞ୍ଚାଯିବା ଲକ୍ଷ ପୃଷ୍ଠାର ପୃଷ୍ଠାର ନେମସ୍ପେସ",
- "abusefilter-edit-builder-vars-movedto-text": "ଘୁଞ୍ଚାଯିବା ଲକ୍ଷ ପୃଷ୍ଠାର ପୃଷ୍ଠାର ନାମ",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "ଘୁଞ୍ଚାଯିବା ଲକ୍ଷ ପୃଷ୍ଠାର ପୃଷ୍ଠାର ନାମ",
+ "abusefilter-edit-builder-vars-movedto-title": "ଘୁଞ୍ଚାଯିବା ଲକ୍ଷ ପୃଷ୍ଠାର ପୃଷ୍ଠାର ନାମ",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "ଘୁଞ୍ଚାଯିବା ଲକ୍ଷ ପୃଷ୍ଠାର ପୃଷ୍ଠାର ନାମ",
"abusefilter-edit-builder-vars-user-editcount": "ବ୍ୟବହାରକାରୀଙ୍କ ସମ୍ପାଦନା ସଂଖ୍ୟା",
"abusefilter-edit-builder-vars-user-age": "ବ୍ୟବହାରକାରୀଙ୍କ ଖାତାର ବୟସ",
"abusefilter-edit-builder-vars-user-name": "ବ୍ୟବହାରକାରୀଙ୍କ ଖାତାର ନାମ",
@@ -333,7 +325,6 @@
"abusefilter-topnav-tools": "ଡିବଗ କରିବା ଉପକରଣ",
"abusefilter-topnav-import": "ଛଣା ଆମଦାନି କରିବେ",
"abusefilter-log-name": "ଅପବ୍ୟବହାର ଛଣା ଇତିହାସ",
- "abusefilter-log-entry-modify": "$1କୁ ବଦଳାଗଲା ($2)",
"abusefilter-log-noresults": "ପରିଣାମହୀନ",
"abusefilter-diff-title": "ସଙ୍କଳନ ଭିତରେ ଥିବା ତଫାତ",
"abusefilter-diff-item": "ବସ୍ତୁ",
diff --git a/AbuseFilter/i18n/os.json b/AbuseFilter/i18n/os.json
index 6c04d5d2..f7d0c1ef 100644
--- a/AbuseFilter/i18n/os.json
+++ b/AbuseFilter/i18n/os.json
@@ -24,7 +24,7 @@
"abusefilter-edit-throttle-period": "Æмгъуыд:",
"abusefilter-edit-history": "Истори:",
"abusefilter-edit-tools": "Фæрæзтæ:",
- "abusefilter-edit-builder-vars-article-id": "Фарсы ID",
+ "abusefilter-edit-builder-vars-page-id": "Фарсы ID",
"abusefilter-history-timestamp": "Рæстæг",
"abusefilter-history-user": "Архайæг",
"abusefilter-history-deleted": "Аппæрст",
diff --git a/AbuseFilter/i18n/pa.json b/AbuseFilter/i18n/pa.json
index 8c0b20df..2ac9e35c 100644
--- a/AbuseFilter/i18n/pa.json
+++ b/AbuseFilter/i18n/pa.json
@@ -28,7 +28,6 @@
"abusefilter-tools-reautoconfirm-user": "ਵਰਤੋਂਕਾਰ:",
"abusefilter-edit-notes": "ਟਿੱਪਣੀਆਂ:\n:''(ਨਿੱਜੀ}''",
"abusefilter-edit-throttle-period": "ਸਮੇਂ ਦੀ ਮਿਆਦ:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|ਸਕਿੰਟ}}",
"abusefilter-edit-warn-other": "ਹੋਰ ਸੁਨੇਹਾ",
"abusefilter-edit-warn-other-label": "ਹੋਰ ਸੁਨੇਹਾ ਦੇ ਸਫ਼ੇ ਦਾ ਨਾਂ:\n:''(MediaWiki ਅਗੇਤਰ ਤੋਂ ਬਗ਼ੈਰ)''",
"abusefilter-edit-warn-actions": "ਕਾਰਵਾਈਆਂ:",
diff --git a/AbuseFilter/i18n/pam.json b/AbuseFilter/i18n/pam.json
index 7d9e9a44..7146bffb 100644
--- a/AbuseFilter/i18n/pam.json
+++ b/AbuseFilter/i18n/pam.json
@@ -1,13 +1,15 @@
{
"@metadata": {
"authors": [
- "Val2397"
+ "Val2397",
+ "Leeheonjin"
]
},
"abusefilter-log-search-user": "Talagamit",
"abusefilter-log-search-filter": "Salakan ya ing ID",
"abusefilter-log-search-title": "Bansag",
"abusefilter-log-search-wiki": "Wiki",
+ "abusefilter-log-search-action-taken-any": "Andyang sanu",
"abusefilter-log-search-submit": "Manintun",
"abusefilter-log-detailedentry-local": "Salak $1",
"abusefilter-log-diff": "aliwa",
diff --git a/AbuseFilter/i18n/pfl.json b/AbuseFilter/i18n/pfl.json
index 1db66408..d093dad0 100644
--- a/AbuseFilter/i18n/pfl.json
+++ b/AbuseFilter/i18n/pfl.json
@@ -3,14 +3,14 @@
"authors": [
"Manuae",
"Xqt",
- "Matma Rex"
+ "Matma Rex",
+ "Als-Holder"
]
},
"abusefilter-desc": "Bnudzd selbschddendisch Medoode uff Ännarunge",
"abusefilter": "Siewb-Oischdellunge gesche Missbraisch",
"abuselog": "Logbuch fa Missbraisch",
"abusefilter-intro": "Willkumme uffde Owaflesch fa die Hondhawung vunde Missbraisch-Siewb.\nMissbraisch-Siewb sind selbschdschdendischi Voarischdunge, wu vun alle Medoode uff alle Ännarunge õwende dun.\nDie Owaflesch zaischd ä Lischd vun alle Siewb, wu ma a ännare konn.",
- "abusefilter-mustbeeditor": "Weschede Sischahaid derfn bloß Laid mid gnuch Reschd do mache.",
"abusefilter-warning": "'''Bassma uff''': Was du so mache wilschd, wead als uuerwinschd gseje.\nWonns nix isch, weads a glai widda zrigg'gsezd odda gleschd.\nWonn des was dudo meamols magschd nix isch, weaschd gschberd.\nWonn dengge duschd, die Ännarung isch guud, doan konschd a ruhisch waida mache.\nÄ korzi Schildarung vunde Reschl, wudes ausgleesd kabd hod isch: $1",
"abusefilter-disallowed": "Was du do mache wilschd, werd als schedlisch gseje un isch deswesche vabode worre.\nWonn menschd, dasses donoi kead, donn gebem Adminischdrador Bschaid.\nÄ korzi Schildarung vunde Reschl, wudes ausgleesd kabd hod isch: $1",
"abusefilter-blocked-display": "Was du do mache wilschd, isch vun allä als schedlisch gseje worre un deswesche hoschds a ned mache dirfe.\nUm {{SITENAME}} zschidze, isch doi Kondo un a alli domid vabundene IP-Addresse gschberd worre.\nWonn menschd, dass desn Irrdumm isch, donn gebem Adminischdrador Bschaid.\nÄ korzi Schildarung vunde Reschl, wudes ausgleesd kabd hawen isch: $1",
@@ -74,8 +74,6 @@
"abusefilter-log-hide-hidden": "Den Oidrach vaschdeggle",
"abusefilter-log-hide-reason": "Grund:",
"abusefilter-log-hide-forbidden": "Du hoschd kä Räschd fas vaschdeggle vun Oidräsch vum Logbuch vum Missbraisch-Siewb.",
- "abusefilter-logentry-suppress": "Hodd „[[$1]]“ vaschdeggld",
- "abusefilter-logentry-unsuppress": "hodd „[[$1]]“ sischdbaa gmachd",
"logentry-abusefilter-hit": "$1 hodd baide Maßnohm „$5“ uff $3 s'Siewb $4 ausglesd. Bassierd isch: $6 ($7)",
"abusefilter-management": "Vawaldung vunde Missbraisch-Siewb",
"abusefilter-list": "Alli Siewb",
@@ -107,7 +105,6 @@
"abusefilter-list-options-scope": "Zaisch Siewb vun:",
"abusefilter-list-options-scope-local": "Lokales Wiki",
"abusefilter-list-options-scope-global": "Globali Reeschle",
- "abusefilter-list-options-disabled": "Siewb abschdelle:",
"abusefilter-list-options-hidedisabled": "Abgschdellde Siewb vaschdeggle",
"abusefilter-list-options-submit": "uffdadiere",
"abusefilter-tools-text": "Do hodds Wergzaisch, wu baim Baschdle vun Missbraisch-Siewb unde Fehlasuch nidzlisch soi kennen.",
@@ -127,7 +124,6 @@
"abusefilter-edit-status-label": "Schdadischdig:",
"abusefilter-edit-status": "Vunde ledschde {{PLURAL:$1|Agzion isch|$1 Agzione sinn}} $2 ($3 %) vundem Siewb gfunne worre.",
"abusefilter-edit-status-profile": "Vunde ledschde {{PLURAL:$1|Agzion isch|$1 Agzione sinn}} $2 ($3 %) vundem Siewb gfunne worre.\nIm Schnidd hodda dodvu $4 ms un $5 {{PLURAL:$5|Bedingung|Bedingunge}} vunde Hegschdzahl gbrauchd.",
- "abusefilter-edit-throttled": "'''Baßma uff''': S'Siewb isch aus Sichahaidsgrind mol abgschdelld worre. Der hodd midmea als $1 % (feschgleschdi Owagrenz) vunde Maßnohm iwaoigschdimmd.",
"abusefilter-edit-new": "Naije Siewb",
"abusefilter-edit-save": "Siewb schbaischere",
"abusefilter-edit-id": "Siewb-ID",
@@ -146,7 +142,6 @@
"abusefilter-edit-consequences": "Baim Dreffa gibds die Maßnõhm",
"abusefilter-edit-action-warn": "Noch änna Waanung die Maßnõhm ausleese",
"abusefilter-edit-action-disallow": "Die vum Middawaida gwolldi Maßnõhm vahinare",
- "abusefilter-edit-action-flag": "B'aawaidung im Logbuch vunde Missbraisch-Siewb kennzaischne",
"abusefilter-edit-action-blockautopromote": "De Schdadus \"Audomadisch bschdedischda Middawaida\" wegnemme",
"abusefilter-edit-action-degroup": "De Middawaida ausde Grubbe mid Sondaräschd nemme",
"abusefilter-edit-action-block": "Middawaida/IP-Adress schberre",
@@ -155,7 +150,6 @@
"abusefilter-edit-action-tag": "B'awaidung fa ä schbederi Iwabrifung makiere",
"abusefilter-edit-throttle-count": "Õzahl vun zulässische Maßnõhme:",
"abusefilter-edit-throttle-period": "Zaidabschnidd:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|Sekund|Sekunde}}",
"abusefilter-edit-throttle-groups": "Reschle zu drossle fa die Grubb:\n:''(äni bro Zail, midm Komma vabunde)''",
"abusefilter-edit-warn-message": "Sischdemnochrischd fa die Waanung:",
"abusefilter-edit-warn-other": "Õnnare Nochrischde",
@@ -241,19 +235,18 @@
"abusefilter-edit-builder-vars-oldsize": "Aldi Greeß vunde Said",
"abusefilter-edit-builder-vars-removedlines": "G'leschde Zaile vunde B'arwaidung",
"abusefilter-edit-builder-vars-summary": "Iwabligg iwa die B'arwaidung",
- "abusefilter-edit-builder-vars-article-id": "Saide-ID",
- "abusefilter-edit-builder-vars-article-ns": "Noamraum vunde Said",
- "abusefilter-edit-builder-vars-article-text": "Tidl vunde Said (ohne Noameraum)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Gonse Tidl vunde Said",
- "abusefilter-edit-builder-vars-article-views": "Saideuffrief",
+ "abusefilter-edit-builder-vars-page-id": "Saide-ID",
+ "abusefilter-edit-builder-vars-page-ns": "Noamraum vunde Said",
+ "abusefilter-edit-builder-vars-page-title": "Tidl vunde Said (ohne Noameraum)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Gonse Tidl vunde Said",
"abusefilter-edit-builder-vars-movedfrom-id": "Saide-ID vunde Qwellsaid",
"abusefilter-edit-builder-vars-movedfrom-ns": "Noameraum vunde Qwellsaid",
- "abusefilter-edit-builder-vars-movedfrom-text": "Tdl vunde Qwellsaid",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Gonse Tidl vunde Qwellsaid",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Tdl vunde Qwellsaid",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Gonse Tidl vunde Qwellsaid",
"abusefilter-edit-builder-vars-movedto-id": "Saide-ID vunde Zielsaid",
"abusefilter-edit-builder-vars-movedto-ns": "Noameraum vunde Zielsaid",
- "abusefilter-edit-builder-vars-movedto-text": "Titl vunde Zielsaid",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Gonse Tidl vunde Zielsaid",
+ "abusefilter-edit-builder-vars-movedto-title": "Titl vunde Zielsaid",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Gonse Tidl vunde Zielsaid",
"abusefilter-edit-builder-vars-user-editcount": "Baidrachszehla vum Middawaida",
"abusefilter-edit-builder-vars-user-age": "Alda vum Kondo",
"abusefilter-edit-builder-vars-user-name": "Nõme vum Kondo",
@@ -312,7 +305,7 @@
"abusefilter-exception-regexfailure": "Fehla im regex „$3“ oam Zaische $1: „$2“",
"abusefilter-exception-overridebuiltin": "Iwaschraiwe vunde oigbaude Vaänalischi „$2“ oam Zaische $1 isch vabode.",
"abusefilter-exception-outofbounds": "Oafoadarung vum Lischde-Oidrach $2 (Lischdegreeß: $3), wus ned hod, oans Zaische $1.",
- "abusefilter-exception-notlist": "Oafoadarung vunem Daadefeld-Oidrach ausm Ned-Daadefeld baim Zaische „$1“.",
+ "abusefilter-exception-notarray": "Oafoadarung vunem Daadefeld-Oidrach ausm Ned-Daadefeld baim Zaische „$1“.",
"abusefilter-action-tag": "Edikedd",
"abusefilter-action-throttle": "Drossle",
"abusefilter-action-warn": "Warne",
@@ -372,7 +365,6 @@
"abusefilter-topnav-import": "Filda roihole",
"abusefilter-log-name": "Logbuch fa Missbraisch-Filda",
"abusefilter-log-header": "S'Logbuch zaischd ä Zsommefassung vunde Änarunge onde Filda.\nFa Näjares gugschd baide [[Special:AbuseFilter/history|Lischd]] vunde ledschde Änarunge onde Filda.",
- "abusefilter-log-entry-modify": "gänad $1 ($2)",
"abusefilter-log-noresults": "Kä Ergewnis",
"abusefilter-diff-title": "Unnerschied zwische de Versione",
"abusefilter-diff-item": "Oidrach",
diff --git a/AbuseFilter/i18n/pl.json b/AbuseFilter/i18n/pl.json
index a149db51..041ad694 100644
--- a/AbuseFilter/i18n/pl.json
+++ b/AbuseFilter/i18n/pl.json
@@ -24,14 +24,17 @@
"Halibutt",
"Openbk",
"The Polish",
- "InternerowyGołąb"
+ "InternerowyGołąb",
+ "Ankam",
+ "Railfail536",
+ "DeRudySoulStorm"
]
},
"abusefilter-desc": "Zastosowanie automatycznej heurystyki do edycji",
"abusefilter": "Konfiguracja filtru nadużyć",
"abuselog": "Rejestr nadużyć",
"abusefilter-intro": "Zarządzanie filtrem nadużyć.\nFiltr nadużyć jest to oprogramowanie automatycznego stosowania heurystyki do wszystkich akcji.\nInterfejs pozwala przeglądać listę zdefiniowanych filtrów oraz pozwala na ich modyfikowanie.",
- "abusefilter-mustbeeditor": "Ze względów bezpieczeństwa z tego interfejsu mogą korzystać wyłącznie użytkownicy posiadający uprawnienia do zmieniania filtrów nadużyć.",
+ "abusefilter-mustviewprivateoredit": "Ze względów bezpieczeństwa z tego interfejsu mogą korzystać wyłącznie użytkownicy posiadający uprawnienia do zmieniania, lub przeglądania prywatnych filtrów nadużyć.",
"abusefilter-warning": "'''Uwaga:''' Twoje działanie zostało automatycznie zidentyfikowane jako szkodliwe.\nNiewłaściwe działania zostaną szybko wycofane,\na rażące lub powtarzające się niekonstruktywne edytowanie może spowodować zablokowanie Twojego konta lub adresu IP.\nJeśli uważasz, że to, co robisz, ma uzasadnienie, kliknij przycisk „{{int:savearticle}}”, aby zatwierdzić zmiany.\nKrótki opis reguły nadużycia, do której Twoje działanie zostało dopasowane: $1",
"abusefilter-disallowed": "Ta akcja została automatycznie zidentyfikowana jako szkodliwa,\nw związku z tym została odrzucona.\nJeśli uważasz, że ta edycja była zasadna, skontaktuj się z administratorem i poinformuj go o zaistniałej sytuacji.\nKrótki opis reguły nadużycia, do której Twoja akcja została dopasowana: $1",
"abusefilter-blocked-display": "Ta akcja została automatycznie zidentyfikowana jako szkodliwa\ni zostałeś powstrzymany od jej wykonania.\nPonadto w celu ochrony {{GRAMMAR:MS.lp|{{SITENAME}}}} Twojemu kontu użytkownika i wszystkim powiązanym z nim adresom IP zablokowano możliwość edytowania.\nJeśli nastąpiło to przez pomyłkę, skontaktuj się z administratorem.\nKrótki opis reguły nadużycia, do której Twoja akcja została dopasowana: $1",
@@ -46,6 +49,7 @@
"right-abusefilter-log": "Podgląd rejestru nadużyć",
"right-abusefilter-log-detail": "Podgląd szczegółów wpisów w rejestrze nadużyć",
"right-abusefilter-private": "Podgląd prywatnych danych w rejestrze nadużyć",
+ "right-abusefilter-private-log": "Podgląd rejestru dostępu do prywatnych szczegółów filtru nadużyć",
"right-abusefilter-modify-restricted": "Modyfikowanie filtrów nadużyć z zastrzeżonymi operacjami",
"right-abusefilter-revert": "Anulowanie wszystkich zmian wykonanych przez podany filtr nadużyć",
"right-abusefilter-view-private": "Przeglądanie filtrów nadużyć oznaczonych jako prywatne",
@@ -58,6 +62,7 @@
"action-abusefilter-log": "przeglądania rejestru nadużyć",
"action-abusefilter-log-detail": "przeglądania szczegółów wpisów w rejestrze nadużyć",
"action-abusefilter-private": "oglądania prywatnych informacji w rejestrze nadużyć",
+ "action-abusefilter-private-log": "podglądu rejestru dostępu do prywatnych szczegółów filtru nadużyć",
"action-abusefilter-modify-restricted": "zmieniania filtrów nadużyć z ograniczonymi akcjami",
"action-abusefilter-revert": "wycofania wszystkich zmian wskazanych przez filtr nadużyć",
"action-abusefilter-view-private": "wyświetlenia prywatnych filtrów nadużyć",
@@ -69,7 +74,16 @@
"abusefilter-log-search-filter": "Identyfikatory filtru (oddzielone znakiem pionowej kreski):",
"abusefilter-log-search-title": "Tytuł:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Wpływ:",
+ "abusefilter-log-search-impact-all": "Wszystkie akcje",
+ "abusefilter-log-search-impact-saved": "Tylko zapisane zmiany",
+ "abusefilter-log-search-impact-not-saved": "Bez zapisanych zmian",
"abusefilter-log-search-entries-label": "Widoczność:",
+ "abusefilter-log-search-entries-all": "Wszystkie wpisy",
+ "abusefilter-log-search-entries-hidden": "Tylko ukryte wpisy",
+ "abusefilter-log-search-entries-visible": "Tylko nieukryte wpisy",
+ "abusefilter-log-search-action-taken-label": "Podjęta akcja:",
+ "abusefilter-log-search-action-taken-any": "Dowolna",
"abusefilter-log-search-submit": "Szukaj",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|uruchomił|uruchomiła|uruchomił(a)}} filtr nadużyć, {{GENDER:$8|wykonując}} „$3” na $4.\nPodjęte działania: $5;\nOpis filtru: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|uruchomił|uruchomiła|uruchomił(a)}} filtr nadużyć, {{GENDER:$8|wykonując}} „$3” na $4.\nPodjęte działania: $5;\nOpis filtru: $6 ($7)",
@@ -83,28 +97,41 @@
"abusefilter-log-details-var": "Zmienna",
"abusefilter-log-details-val": "Wartość",
"abusefilter-log-details-vars": "Parametry akcji",
- "abusefilter-log-details-private": "Prywatne dane",
+ "abusefilter-log-details-private": "Szczegóły prywatnego rejestru",
"abusefilter-log-details-ip": "Użyte adresy IP",
+ "abusefilter-log-details-checkuser": "Sprawdź użytkownika",
"abusefilter-log-noactions": "brak",
"abusefilter-log-details-diff": "Wprowadzone w edycji zmiany",
"abusefilter-log-linkoncontribs": "rejestr nadużyć",
"abusefilter-log-linkoncontribs-text": "Wpisy w rejestrze nadużyć dla {{GENDER:$1|tego użytkownika|tej użytkowniczki}}",
+ "abusefilter-log-linkonhistory": "rejestr nadużyć",
+ "abusefilter-log-linkonhistory-text": "Zobacz rejestr nadużyć dla tej strony",
"abusefilter-log-hidden": "(wpis ukryty)",
"abusefilter-log-hidden-implicit": "(ukryto, ponieważ usunięto wersję)",
"abusefilter-log-cannot-see-details": "Nie masz uprawnień do przeglądania szczegółów tego wpisu.",
+ "abusefilter-log-cannot-see-private-details": "Nie masz uprawnień do przeglądania prywatnych szczegółów tego wpisu.",
+ "abusefilter-log-nonexistent": "Wpis o podanym identyfikatorze nie istnieje.",
"abusefilter-log-details-hidden": "Nie możesz zobaczyć szczegółów tego wpisu, ponieważ jest ukryty przed widokiem publicznym.",
+ "abusefilter-log-details-hidden-implicit": "Nie możesz zobaczyć szczegółów tego wpisu, ponieważ powiązana edycja strony jest ukryta z widoku publicznego.",
"abusefilter-log-private-not-included": "Jeden lub więcej filtrów identyfikatorów określono jako prywatne. Ponieważ nie jest dozwolone, aby wyświetlić szczegóły prywatnych filtrów, filtry te nie zostały przeszukane.",
"abusefilter-log-hide-legend": "Ukryj wpis w rejestrze",
"abusefilter-log-hide-id": "Identyfikator wpisu w rejestrze",
"abusefilter-log-hide-hidden": "Ukryj ten wpis przed widokiem publicznym",
"abusefilter-log-hide-reason": "Powód",
+ "abusefilter-log-hide-reason-other": "Inny lub dodatkowy powód:",
"abusefilter-log-hide-forbidden": "Nie masz uprawnień do ukrywania\nwpisów w rejestrze nadużyć.",
- "abusefilter-logentry-suppress": "ukrył [[$1]]",
- "abusefilter-logentry-unsuppress": "zakończył ukrywanie [[$1]]",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|ukrył|ukryła|ukrył(a)}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|odkrył|odkryła|odkrył(a)}} $3",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|uruchomił|uruchomiła|uruchomił(a)}} $4, {{GENDER:$2|wykonując}} „$5” na $3. Podjęte działania: $6 ($7)",
+ "log-action-filter-abusefilter": "Rodzaj zmiany filtra:",
+ "log-action-filter-abusefilter-create": "Utworzenie nowego filtra",
+ "log-action-filter-abusefilter-modify": "Modyfikacja filtra",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|uzyskał|uzyskała}} dostęp do prywatnych szczegółów $3",
+ "abusefilterprivatedetails-log-name": "Rejestr dostępu do prywatnych szczegółów filtru nadużyć",
"abusefilter-management": "Zarządzanie filtrem nadużyć",
"abusefilter-list": "Wszystkie filtry",
"abusefilter-list-id": "ID filtru",
+ "abusefilter-list-pattern": "Wzór",
"abusefilter-list-status": "Status",
"abusefilter-list-public": "Publiczny opis",
"abusefilter-list-consequences": "Skutek",
@@ -133,8 +160,16 @@
"abusefilter-list-options-scope-local": "Tylko zasady lokalne",
"abusefilter-list-options-scope-global": "Tylko zasady globalne",
"abusefilter-list-options-scope-all": "Zasady lokalne i globalne",
- "abusefilter-list-options-disabled": "Wyłączone filtry:",
+ "abusefilter-list-options-further-options": "Inne opcje:",
"abusefilter-list-options-hidedisabled": "ukryj wyłączone filtry",
+ "abusefilter-list-options-hideprivate": "Ukryj filtry prywatne",
+ "abusefilter-list-options-searchfield": "Szukaj wśród reguł:",
+ "abusefilter-list-options-searchpattern": "Wstaw wzór",
+ "abusefilter-list-options-searchoptions": "Tryb wyszukiwania:",
+ "abusefilter-list-options-search-like": "Proste zapytanie",
+ "abusefilter-list-options-search-rlike": "Wyrażenie regularne",
+ "abusefilter-list-options-search-irlike": "Wyrażenie regularne niewrażliwe na wielkość liter",
+ "abusefilter-list-regexerror": "Wystąpił błąd podczas wyszukiwania: Błąd składni wyrażenia regularnego.",
"abusefilter-list-options-submit": "Aktualizuj",
"abusefilter-tools-text": "Oto kilka narzędzi, które mogą być przydatne w opracowywaniu i śledzeniu pracy filtrów nadużyć.",
"abusefilter-tools-expr": "Tester wyrażeń",
@@ -149,15 +184,18 @@
"abusefilter-edit": "Edytujesz filtr nadużyć",
"abusefilter-edit-subtitle": "Edytowanie filtru $1",
"abusefilter-edit-subtitle-new": "Tworzenie filtru",
+ "abusefilter-edit-token-not-match": "Edycja nie została zapisana! Zapisz ją ponownie.",
"abusefilter-edit-oldwarning": "<strong>Edytujesz starą wersję tego filtru. Statystyki są notowane dla najnowszej wersji filtru. Jeśli zapiszesz zmiany, zostaną nadpisane wszystkie późniejsze wersje od tej, którą edytujesz.</strong> &bull; [[Special:AbuseFilter/history/$2|Powrót do historii filtru]]",
"abusefilter-edit-status-label": "Statystyki:",
"abusefilter-edit-status": "{{PLURAL:$1|Dla ostatniej $1 akcji|W ostatnich $1 akcjach}} ten filtr pasował do $2 ($3%).",
"abusefilter-edit-status-profile": "{{PLURAL:$1|Dla ostatniej $1 akcji|W ostatnich $1 akcjach}} ten filtr pasował do $2 ($3%).\nŚredni czas wykonania wyniósł $4 ms. Wykorzystano $5 {{PLURAL:$5|warunek|warunki|warunków}} z limitu.",
- "abusefilter-edit-throttled": "'''Uwaga''': Ten filtr został automatycznie wyłączony jako środek bezpieczeństwa. Został osiągnięty limit dopasowań na poziomie większym $1% akcji.",
+ "abusefilter-edit-throttled-warning": "'''Uwaga:''' Ten filtr został automatyczne oznaczony jako groźny. Ze względu bezpieczeństwa, te akcje nie zostaną wykonane ($1). Przejrzyj i [[mw:Extension:AbuseFilter/Conditions|zoptymalizuj]] swoje warunki, aby usunąć to ograniczenie",
"abusefilter-edit-new": "Nowy filtr",
"abusefilter-edit-save": "Zapisz filtr",
"abusefilter-edit-id": "ID filtru",
+ "abusefilter-edit-switch-editor": "Przełącz edytor",
"abusefilter-edit-description": "Opis:\n:''(widoczny publicznie)''",
+ "abusefilter-edit-field-description": "opis",
"abusefilter-edit-group": "Grupa filtru:",
"abusefilter-edit-flags": "Flagi:",
"abusefilter-edit-enabled": "Włącz ten filtr",
@@ -165,6 +203,7 @@
"abusefilter-edit-hidden": "Ukryj szczegóły tego filtru przed widokiem publicznym",
"abusefilter-edit-global": "Filtr globalny",
"abusefilter-edit-rules": "Warunki:",
+ "abusefilter-edit-field-conditions": "warunki",
"abusefilter-edit-notes": "Uwagi:",
"abusefilter-edit-lastmod": "Ostatnia modyfikacja filtru:",
"abusefilter-edit-lastmod-text": "$1 przez $2",
@@ -175,25 +214,41 @@
"abusefilter-edit-action-blockautopromote": "Cofnij użytkownikowi status automatycznie zatwierdzonego",
"abusefilter-edit-action-degroup": "Usuń użytkownika ze wszystkich uprzywilejowanych grup",
"abusefilter-edit-action-block": "Zablokuj użytkownikowi i/lub adresowi IP możliwość edycji",
+ "abusefilter-edit-action-blocktalk": "Zablokuj użytkownikowi/adresowi IP opcję edytowania swojej strony dyskusji",
"abusefilter-edit-action-throttle": "Uruchom akcje tylko wtedy, gdy użytkownik przekroczy poziom limitu",
- "abusefilter-edit-action-rangeblock": "Zablokuj zakres /16 adresów, z którego pochodzi użytkownik",
+ "abusefilter-edit-action-rangeblock": "Zablokuj odpowiedni zakres adresów IP, z którego pochodzi użytkownik",
"abusefilter-edit-action-tag": "Oznacz edycję do późniejszego sprawdzenia",
"abusefilter-edit-throttle-count": "Liczba dozwolonych akcji",
- "abusefilter-edit-throttle-period": "Okres",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekunda|sekundy|sekund}}",
- "abusefilter-edit-throttle-groups": "Filtruj grupy\n:''(po jednej na linię, rozdzielone przecinkami)''",
- "abusefilter-edit-warn-message": "System wiadomości używanych do ostrzegania:",
+ "abusefilter-edit-throttle-period": "Okres (w sekundach):",
+ "abusefilter-edit-throttle-groups": "Grupuj przekroczenia dla:",
+ "abusefilter-edit-throttle-ip": "Adresu IP",
+ "abusefilter-edit-throttle-user": "Konta użytkownika",
+ "abusefilter-edit-throttle-range": "Zakresu /16",
+ "abusefilter-edit-throttle-creationdate": "Czasu utworzenia konta",
+ "abusefilter-edit-throttle-editcount": "Liczby edycji",
+ "abusefilter-edit-throttle-site": "Całej witryny",
+ "abusefilter-edit-throttle-page": "Strony",
+ "abusefilter-edit-warn-message": "Komunikat systemowy wyświetlany jako ostrzeżenie:",
"abusefilter-edit-warn-other": "Inny komunikat",
- "abusefilter-edit-warn-other-label": "Nazwa strony innego komunikatu:\n:''(bez przedrostka MediaWiki)''",
+ "abusefilter-edit-warn-other-label": "Nazwa strony innego komunikatu:\n:''(bez przedrostka \"MediaWiki\")''",
"abusefilter-edit-warn-actions": "Operacje:",
- "abusefilter-edit-warn-preview": "Podgląd wybranego komunikatu",
+ "abusefilter-edit-warn-preview": "Pokaż/Ukryj podgląd wybranego komunikatu",
"abusefilter-edit-warn-edit": "Utwórz lub edytuj wybrany komunikat",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Znaczniki]] do zastosowania (po jednym w wierszu):",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Znaczniki]] do zastosowania:",
+ "abusefilter-edit-tag-placeholder": "Dodaj znaczniki (jeden po drugim lub oddzielone przecinkami)",
+ "abusefilter-edit-tag-hidden-placeholder": "Dodaj znaczniki (oddzielone przecinkami)",
+ "abusefilter-edit-block-anon-durations": "Czas trwania blokady dla użytkowników niezalogowanych:",
+ "abusefilter-edit-block-user-durations": "Czas trwania blokady dla użytkowników zarejestrowanych:",
+ "abusefilter-block-anon": "Zablokuj niezalogowanych użytkowników",
+ "abusefilter-block-user": "zablokuj zarejestrowanych użytkowników",
+ "abusefilter-block-talk": "strona dyskusji zablokowana",
"abusefilter-edit-denied": "Nie możesz zobaczyć szczegółów tego filtru, ponieważ jest ukryty przed widokiem publicznym.",
"abusefilter-edit-main": "Ustawienia filtru",
"abusefilter-edit-done-subtitle": "Filtr został zmodyfikowany",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Twoje zmiany]] w [[Special:AbuseFilter/$1|filtrze $3]] zostały zapisane.",
"abusefilter-edit-badsyntax": "W edytowanym przez Ciebie filtrze wystąpił błąd składni. Parser zwrócił: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Następujące pola są wymagane i muszą zostać wypełnione: $1",
+ "abusefilter-edit-deleting-enabled": "Nie można oznaczyć aktywnego filtra jako usuniętego.",
"abusefilter-edit-restricted": "Nie możesz zmienić ustawień tego filtru, ponieważ zawiera on jedną lub więcej zastrzeżoną operację. Zwróć się do użytkownika z właściwymi uprawnieniami o wykonanie tej zmiany.",
"abusefilter-edit-viewhistory": "Zobacz historię tego filtru",
"abusefilter-edit-history": "Historia",
@@ -205,7 +260,7 @@
"abusefilter-edit-export": "Eksportuj filtr do innej wiki",
"abusefilter-edit-syntaxok": "Nie wykryto błędów składni.",
"abusefilter-edit-syntaxerr": "Wykryto błąd składni – $1",
- "abusefilter-edit-bad-tags": "Co najmniej jedno z oznaczeń jest niepoprawne.\nOznaczenia powinny być krótkie i nie powinny zawierać znaków specjalnych, oraz nie powinny być wykorzystywane przez inne oprogramowanie. Spróbuj wybierać inne oznaczenie.",
+ "abusefilter-edit-bad-tags": "Co najmniej jedno ze znaczników jest niepoprawne.\nNazwy znaczników powinny być krótkie i nie mogą zawierać znaków specjalnych, oraz nie mogą być wykorzystywane przez inne oprogramowanie. Spróbuj wybrać inną nazwę dla znacznika.",
"abusefilter-edit-notallowed": "Nie posiadasz uprawnienia do tworzenia lub edytowania filtrów nadużyć",
"abusefilter-edit-notallowed-global": "Nie posiadasz uprawnienia do tworzenia lub edytowania globalnych filtrów nadużyć",
"abusefilter-edit-notallowed-global-custom-msg": "Niestandardowe komunikaty ostrzegawcze nie są obsługiwane przez filtry globalne",
@@ -218,8 +273,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Modulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Potęga (**)",
"abusefilter-edit-builder-group-op-comparison": "Operatory porównania",
- "abusefilter-edit-builder-op-comparison-equal": "Równoważny (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Różny od (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Wartość równoważna (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Wartość i typ równoważne (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Wartość różna od (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Wartość i typ różne od (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Mniejszy niż (<)",
"abusefilter-edit-builder-op-comparison-gt": "Większy niż (>)",
"abusefilter-edit-builder-op-comparison-lte": "Mniejszy niż lub równy (<=)",
@@ -251,7 +308,7 @@
"abusefilter-edit-builder-funcs-rmwhitespace": "Usuń białe znaki (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Usuń znaki specjalne (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Czy IP jest w zakresie? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Przeszukaj ciąg znaków w poszukiwaniu wielu podciągów (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Przeszukaj ciąg znaków w poszukiwaniu wielu podciągów jako LUB. (contains_any)",
"abusefilter-edit-builder-funcs-substr": "Fragment ciągu znaków (substr)",
"abusefilter-edit-builder-funcs-strpos": "Pozycja podciągu znaków w ciągu (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Zastąp fragment ciągu znaków innym ciągiem (str_replace)",
@@ -270,19 +327,18 @@
"abusefilter-edit-builder-vars-new-content-model": "Nowy model zawartości",
"abusefilter-edit-builder-vars-removedlines": "Linie usunięte podczas edycji",
"abusefilter-edit-builder-vars-summary": "Opis zmian",
- "abusefilter-edit-builder-vars-article-id": "Identyfikator strony",
- "abusefilter-edit-builder-vars-article-ns": "Przestrzeń nazw strony",
- "abusefilter-edit-builder-vars-article-text": "Tytuł strony (bez przestrzeni nazw)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Pełny tytuł strony",
- "abusefilter-edit-builder-vars-article-views": "Liczba odwiedzin strony",
+ "abusefilter-edit-builder-vars-page-id": "Identyfikator strony",
+ "abusefilter-edit-builder-vars-page-ns": "Przestrzeń nazw strony",
+ "abusefilter-edit-builder-vars-page-title": "Tytuł strony (bez przestrzeni nazw)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Pełny tytuł strony",
"abusefilter-edit-builder-vars-movedfrom-id": "Identyfikator źródła przenoszonej strony",
"abusefilter-edit-builder-vars-movedfrom-ns": "Przestrzeń nazw źródła przenoszonej strony",
- "abusefilter-edit-builder-vars-movedfrom-text": "Tytuł źródła przenoszonej strony",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Pełny tytuł źródła przenoszonej strony",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Tytuł źródła przenoszonej strony",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Pełny tytuł źródła przenoszonej strony",
"abusefilter-edit-builder-vars-movedto-id": "ID przeznaczenia przenoszonej strony",
"abusefilter-edit-builder-vars-movedto-ns": "Przestrzeń nazw przeznaczenia przenoszonej strony",
- "abusefilter-edit-builder-vars-movedto-text": "Tytuł przeznaczenia przenoszonej strony",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Pełny tytuł przeznaczenia przenoszonej strony",
+ "abusefilter-edit-builder-vars-movedto-title": "Tytuł przeznaczenia przenoszonej strony",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Pełny tytuł przeznaczenia przenoszonej strony",
"abusefilter-edit-builder-vars-user-editcount": "Liczba edycji użytkownika",
"abusefilter-edit-builder-vars-user-age": "Wiek konta użytkownika",
"abusefilter-edit-builder-vars-user-name": "Nazwa konta użytkownika",
@@ -295,7 +351,7 @@
"abusefilter-edit-builder-vars-all-links": "Wszystkie linki zewnętrzne w nowych tekstach",
"abusefilter-edit-builder-vars-added-links": "Wszystkie linki zewnętrzne dodane w edycji",
"abusefilter-edit-builder-vars-removed-links": "Wszystkie linki zewnętrzne usunięte w edycji",
- "abusefilter-edit-builder-vars-old-text": "Stara treść strony w formacie wiki, przed modyfikacją",
+ "abusefilter-edit-builder-vars-old-text": "Stary wikikod strony w formacie wiki, przed modyfikacją (wyszło z użycia)",
"abusefilter-edit-builder-vars-new-text": "Nowa treść strony w formacie wiki, po modyfikacji",
"abusefilter-edit-builder-vars-new-pst": "Nowa strona Wikitekstu, wstępnie zapisane przekształcone",
"abusefilter-edit-builder-vars-new-text-stripped": "Nowa treść strony pozbawiona wszystkich znaczników",
@@ -304,9 +360,11 @@
"abusefilter-edit-builder-vars-restrictions-move": "Stopień zabezpieczenia strony przed przeniesieniem",
"abusefilter-edit-builder-vars-restrictions-create": "Stopień zabezpieczenia strony przed utworzeniem",
"abusefilter-edit-builder-vars-restrictions-upload": "Stopień zabezpieczenia pliku przed przesłaniem",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Poziom zabezpieczenia przed edycją strony do przeniesienia",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Poziom zabezpieczenia przenoszenia strony źródłowej",
"abusefilter-edit-builder-vars-old-text-stripped": "Stara treść strony pozbawiona wszystkich znaczników",
"abusefilter-edit-builder-vars-old-links": "Łącza na stronie przed edycją",
- "abusefilter-edit-builder-vars-old-html": "Stara treść strony w formacie wiki przetworzona na HTML",
+ "abusefilter-edit-builder-vars-old-html": "Stary wikikod strony w formacie wiki przetworzona na HTML (wyszło z użycia)",
"abusefilter-edit-builder-vars-minor-edit": "Czy edycja oznaczona jest jako drobna",
"abusefilter-edit-builder-vars-file-sha1": "Skrót SHA1 zawartości pliku",
"abusefilter-edit-builder-vars-file-size": "Rozmiar pliku w bajtach",
@@ -319,7 +377,7 @@
"abusefilter-history": "Historia zmian dla filtru nr $1",
"abusefilter-history-foruser": "Zmiany wykonane przez $1",
"abusefilter-history-hidden": "Ukryte",
- "abusefilter-history-enabled": "włączona",
+ "abusefilter-history-enabled": "włączony",
"abusefilter-history-global": "Globalnie",
"abusefilter-history-timestamp": "Kiedy",
"abusefilter-history-user": "Użytkownik",
@@ -329,10 +387,11 @@
"abusefilter-history-comments": "Komentarze",
"abusefilter-history-actions": "Akcje",
"abusefilter-history-backedit": "Powrót do edytora filtrów",
- "abusefilter-history-deleted": "Usunięte",
+ "abusefilter-history-deleted": "usunięty",
"abusefilter-history-filterid": "Filtr",
"abusefilter-history-select-legend": "Zawęź kryteria wyszukiwania",
"abusefilter-history-select-user": "Użytkownik",
+ "abusefilter-history-select-filter": "ID filtru:",
"abusefilter-history-select-submit": "Wykonaj",
"abusefilter-history-diff": "Zmiany",
"abusefilter-history-error-hidden": "Nie można wyświetlić historii, ponieważ wybrany filtr jest ukryty.",
@@ -343,18 +402,19 @@
"abusefilter-exception-unclosedstring": "Niezakończony ciąg znaków rozpoczynający się znakiem nr $1.",
"abusefilter-exception-invalidoperator": "Nieprawidłowy operator „$2”, znak nr $1.",
"abusefilter-exception-unrecognisedtoken": "Nierozpoznany symbol „$2”, znak nr $1.",
- "abusefilter-exception-noparams": "Brak parametrów w wywołaniu funkcji „$2”, znak nr $1.",
+ "abusefilter-exception-noparams": "Brak parametrów dla funkcji „$2” przy znaku $1.\nOczekiwano $3 {{PLURAL:$3|argument|argumentów}}.",
"abusefilter-exception-dividebyzero": "Próba dzielenia $2 przez zero, znak nr $1.",
"abusefilter-exception-unrecognisedvar": "Nierozpoznana zmienna $2, znak nr $1.",
"abusefilter-exception-notenoughargs": "Zbyt mało argumentów dla funkcji $2, wywołanie – znak $1.\nOczekiwano $3 {{PLURAL:$3|argumentu|argumentów}}, użyto $4",
- "abusefilter-exception-regexfailure": "Błąd w wyrażeniu regularnym „$3” na znaku $1 – „$2”",
+ "abusefilter-exception-regexfailure": "Błąd w wyrażeniu regularnym „$2” na znaku $1.",
"abusefilter-exception-overridebuiltin": "Nielegalne nadpisanie wbudowanej zmiennej „$2” – znak $1.",
- "abusefilter-exception-outofbounds": "Żądanie nieistniejącego elementu listy $2 (rozmiar listy = $3) – znak $1.",
- "abusefilter-exception-notlist": "Żądanie elementu tablicy od zmiennej nietablicowej – znak $1.",
+ "abusefilter-exception-outofbounds": "Żądanie nieistniejącego elementu tablicy $2 (rozmiar tablicy = $3) – znak $1.",
+ "abusefilter-exception-notarray": "Żądanie elementu tablicy od zmiennej nietablicowej – znak $1.",
+ "abusefilter-exception-disabledvar": "Zmienna $2 przy znaku $1 nie jest już używana.",
"abusefilter-action-tag": "Znacznik",
"abusefilter-action-throttle": "Ogranicz",
"abusefilter-action-warn": "Ostrzeżenie",
- "abusefilter-action-blockautopromote": "Blokuj automatyczne odrzucanie",
+ "abusefilter-action-blockautopromote": "Blokuj automatyczne przyznawanie uprawnień",
"abusefilter-action-block": "Blokuj",
"abusefilter-action-degroup": "Usuń z grup",
"abusefilter-action-rangeblock": "Blokuj zakres",
@@ -366,8 +426,9 @@
"abusefilter-revert-periodstart": "Termin rozpoczęcia",
"abusefilter-revert-periodend": "Termin zakończenia",
"abusefilter-revert-search": "Wybierz działania",
- "abusefilter-revert-filter": "Filtr",
+ "abusefilter-revert-filter": "ID filtru:",
"abusefilter-revert-preview-intro": "Poniżej znajdują się działania podjęte przez filtr nadużyć, które zostaną wycofane.\nNależy dokładnie je sprawdzić, a następnie kliknąć „{{int:abusefilter-revert-confirm}}”, aby potwierdzić decyzję.",
+ "abusefilter-revert-confirm-legend": "Potwierdź przywrócenie",
"abusefilter-revert-confirm": "Potwierdź",
"abusefilter-revert-success": "Anulowałeś wszystkie działania podjęte przez filtr nadużyć – [[Special:AbuseFilter/$1|filtr $2]].",
"abusefilter-revert-reason": "Automatyczne anulowanie wszystkich działań podjętych przez filtr nadużyć – filtr $1.\nPowód: $2",
@@ -375,16 +436,24 @@
"abusefilter-test": "Sprawdź działanie filtru na poprzedniej edycji",
"abusefilter-test-intro": "Strona pozwala na sprawdzenie wybranego w polu poniżej filtru przy zastosowaniu go do {{PLURAL:$1|ostatniej edycji|ostatnich $1 edycji}}.\nAby załadować istniejący filtr, wprowadź jego ID do pola znajdującego się poniżej pola tekstowego i kliknij przycisk „{{int:abusefilter-test-load}}”.",
"abusefilter-test-legend": "Testowanie filtru",
- "abusefilter-test-load-filter": "Załaduj filtr z identyfikatorem",
+ "abusefilter-test-load-filter": "Załaduj filtr o identyfikatorze:",
"abusefilter-test-submit": "Testuj",
"abusefilter-test-load": "Załaduj",
"abusefilter-test-user": "Zmiany wykonane przez użytkownika",
+ "abusefilter-test-nobots": "Ukryj edycje botów",
"abusefilter-test-period-start": "Zmiany wykonane później niż",
"abusefilter-test-period-end": "Zmiany wykonane wcześniej niż",
"abusefilter-test-page": "Zmiany na stronie:",
"abusefilter-test-shownegative": "Pokaż zmiany, które nie pasują do filtru",
"abusefilter-test-syntaxerr": "Wykryto błąd składni we wprowadzonym filtrze.\nPełne wyjaśnienie dostępne jest po kliknięciu przycisku „{{int:abusefilter-edit-check}}”.",
"abusefilter-test-badtitle": "Wprowadzony przez Ciebie tytuł strony jest nieprawidłowy. Zawiera jeden lub więcej znaków, które nie mogą być używane w tytułach.",
+ "abusefilter-test-action": "Rodzaj akcji:",
+ "abusefilter-test-search-type-all": "Wszystkie działania",
+ "abusefilter-test-search-type-edit": "Edycje",
+ "abusefilter-test-search-type-move": "Przeniesienia",
+ "abusefilter-test-search-type-delete": "Usunięcia",
+ "abusefilter-test-search-type-upload": "Przesłania",
+ "abusefilter-test-search-type-createaccount": "Utworzenia kont",
"abusefilter-changeslist-examine": "sprawdź",
"abusefilter-examine": "Sprawdź pojedyncze zmiany",
"abusefilter-examine-intro": "Strona pozwala sprawdzić zmienne utworzone przez filtr nadużyć dla każdej zmiany oraz sprawdzić ją przy pomocy filtrów.",
@@ -403,7 +472,7 @@
"abusefilter-examine-incompatible": "Żądana zmiana nie jest obsługiwana przez filtr nadużyć",
"abusefilter-examine-noresults": "Nie znaleziono wyników dla zadanych przez Ciebie parametrów wyszukiwania.",
"abusefilter-topnav": "'''Nawigacja po filtrze nadużyć'''",
- "abusefilter-topnav-home": "Start",
+ "abusefilter-topnav-home": "Główna",
"abusefilter-topnav-test": "Testowanie wsadowe",
"abusefilter-topnav-examine": "Skontroluj dawniejsze edycje",
"abusefilter-topnav-log": "Rejestr nadużyć",
@@ -411,9 +480,11 @@
"abusefilter-topnav-import": "Import filtru",
"abusefilter-log-name": "Rejestr filtru nadużyć",
"abusefilter-log-header": "Rejestr zawiera zestawienie zmian wprowadzanych w filtrach.\nPełne informacje odnajdziesz w [[Special:AbuseFilter/history|rejestrze]] ostatnich zmian w filtrach.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|utworzył|utworzyła}} $4 ($5)",
+ "abusefilter-logentry-modify": "$1 {{GENDER:$2|zmienił|zmieniła}} $4 ($5)",
"abusefilter-log-noresults": "Brak wyników",
"abusefilter-diff-title": "Różnice pomiędzy wersjami",
- "abusefilter-diff-item": "Przedmiot",
+ "abusefilter-diff-item": "Element",
"abusefilter-diff-version": "Wersja z $1 autorstwa {{GENDER:$3|użytkownika|użytkowniczki}} $2",
"abusefilter-diff-info": "Podstawowe informacje",
"abusefilter-diff-pattern": "Warunki filtru",
@@ -425,21 +496,11 @@
"abusefilter-import-submit": "Importuj dane",
"abusefilter-group-default": "Domyślne",
"abusefilter-http-error": "Wystąpił błąd HTTP: $1.",
- "apihelp-abusefilterchecksyntax-description": "Sprawdź składnię filtra AbuseFilter.",
- "apihelp-abusefilterevalexpression-param-expression": "Wyrażenie do sprawdzenia.",
- "apihelp-abusefilterunblockautopromote-param-user": "Nazwa użytkownika, którego chcesz odblokować.",
- "apihelp-query+abusefilters-description": "Pokaż szczegóły filtrów nadużyć.",
- "apihelp-query+abusefilters-param-show": "Pokaż tylko filtry, które spełniają te kryteria.",
- "apihelp-query+abusefilters-param-limit": "Maksymalna liczba filtrów do wyświetlenia.",
- "apihelp-query+abusefilters-example-1": "Lista uruchomionych filtrów publicznych",
- "apihelp-query+abusefilters-example-2": "Pokaż szczegóły dotyczące filtrów",
- "apihelp-query+abuselog-description": "Pokaż zdarzenia wyłapane przez jeden z filtrów nadużyć.",
- "apihelp-query+abuselog-param-start": "Znacznik czasu, od którego zacząć wyliczanie.",
- "apihelp-query+abuselog-param-end": "Znacznik czasu, na którym zakończyć wyliczanie.",
- "apihelp-query+abuselog-param-prop": "Jakie właściwości uzyskać.",
- "apihelp-query+abuselog-example-1": "Pokaż ostatnie wpisy w rejestrze",
- "apihelp-query+abuselog-example-2": "Pokaż ostatnie wpisy w dzienniku [[API]]",
- "apierror-abusefilter-canttest": "Nie masz uprawnień do testowania filtrów nadużyć.",
- "apierror-abusefilter-cantcheck": "Nie masz uprawnień do sprawdzania składni filtru nadużyć.",
- "apierror-abusefilter-badsyntax": "Filtr ma nieprawidłową składnię."
+ "abusefilter-view-private-submit": "Zobacz prywatne szczegóły",
+ "abusefilter-view-private": "Zobacz prywatne szczegóły",
+ "abusefilter-view-private-reason": "Powód dostępu do prywatnych szczegółów:",
+ "abusefilter-log-details-id": "ID wpisu",
+ "abusefilter-noreason": "Uwaga: aby podejrzeć poufne szczegóły tego rejestru, musisz podać powód.",
+ "abusefilter-log-ip-not-available": "Niedostępne",
+ "abusefilter-tag-reserved": "Tag <code>abusefilter-condition-limit</code> jest zarezerwowany dla wewnętrznego użytku przez Filtr nadużyć."
}
diff --git a/AbuseFilter/i18n/pms.json b/AbuseFilter/i18n/pms.json
index 7043c70e..aa254123 100644
--- a/AbuseFilter/i18n/pms.json
+++ b/AbuseFilter/i18n/pms.json
@@ -11,7 +11,6 @@
"abusefilter": "Configurassion dël fìlter contra j'abus",
"abuselog": "Registr ëd j'abus",
"abusefilter-intro": "Bin ëvnù ant l'antërfassa ëd gestion dij fìlter contra j'abus.\nËl fìlter contra j'abus a l'é un mecanism ëd programa automatisà ch'a àplica dj'eurìstiche automàtiche a tute j'assion.\nCosta antërfassa a smon na lista ëd fìlter definì e a përmet ëd modificheje.",
- "abusefilter-mustbeeditor": "Për dle rason ëd sigurëssa, mach j'utent con ël drit ëd modifiché ij fìlter contra j'abus a peulo dovré s'antërfassa.",
"abusefilter-warning": "'''Atension''': Costa assion a l'è stàita indentificà an automàtich coma danosa.\nLe modificassion nen costrutive a saran tòst anulà,\ne le modìfiche nen costrutive esagerà o arpetùe a mneran al blocagi ëd sò cont o soa adrëssa IP.\nS'a chërd che soa assion a l'é costrutiva, a peul torna mandela për confermela.\nNa curta descrission ëd la régola dj'abus anté ch'a l'é cascà soa modìfica a l'é: $1",
"abusefilter-disallowed": "Costa assion a l'é stàita identificà an automàtich coma danosa, e donca ampedìa.\nS'a chërd che soa assion a l'era costrutiva, ch'a buta al corent n'aministrator ëd lòn ch'a sërcava ëd fé.\nNa curta descrission ëd la régola dj'abus anté ch'a l'é cascà soa assion a l'é: $1",
"abusefilter-blocked-display": "Cost'assion a l'é stàita identificà automaticament com pericolosa,\ne a l'ha pa podula fé.\nAn pi, për protege {{SITENAME}}, sò cont utent e tute j'adrësse IP associà a son ëstàite blocà dal modifiché.\nSe sossì a l'é n'eror, për piasì ch'a contata n'aministrator.\nNa curta descrission ëd la régola ëd sicurëssa che soa assion a l'ha violà a l'é: $1",
@@ -75,8 +74,6 @@
"abusefilter-log-hide-hidden": "Stërma sta vos da la vista pùblica",
"abusefilter-log-hide-reason": "Rason:",
"abusefilter-log-hide-forbidden": "It l'has pa ël përmess dë stërmé le vos dël registr ëd sicurëssa.",
- "abusefilter-logentry-suppress": "stërma \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "a l'ha dëscoatà \"[[$1]]\"",
"logentry-abusefilter-hit": "$1 a l'ha assionà $4, an fasend l'assion \"$5\" dzora $3. Assion fàite: $6 ($7)",
"abusefilter-management": "Gestion dël filtr ëd sicurëssa",
"abusefilter-list": "Tùit ij filtr",
@@ -108,7 +105,6 @@
"abusefilter-list-options-scope": "Smon-e ij filtr da:",
"abusefilter-list-options-scope-local": "Wiki local",
"abusefilter-list-options-scope-global": "Régole globaj",
- "abusefilter-list-options-disabled": "Filtr disabilità:",
"abusefilter-list-options-hidedisabled": "Stërmé ij filtr disabilità",
"abusefilter-list-options-submit": "Agiorna",
"abusefilter-tools-text": "Ambelessì a-i é dj'utiss ch'a peulo ven-e a taj ant la formolassion e la verìfica dij filtr ëd contra j'abus.",
@@ -128,7 +124,6 @@
"abusefilter-edit-status-label": "Statìstiche:",
"abusefilter-edit-status": "{{PLURAL:$1|Dl'ùltima|Dj'ùltime $1}} assion, ës fìlter a n'ha andividuane $2 ($3%).",
"abusefilter-edit-status-profile": "{{PLURAL:$1|Dl'ùltima|Dj'ùltime $1}} assion, ës fìlter a n'ha andividuane $2 ($3%).\nAn media, sò temp ëd travaj a l'é ëd $4 ms e a consuma $5 {{PLURAL:$5|condission|condission}} dël lìmit ëd condission.",
- "abusefilter-edit-throttled": "'''Avis''': Ës filtr a l'é stàit disabilità an automàtich coma mzura ëd sicurëssa.\nA l'era rivà al lìmit d'identificassion ëd pi che $1% dj'assion.",
"abusefilter-edit-new": "Filtr neuv",
"abusefilter-edit-save": "Salvé ël filtr",
"abusefilter-edit-id": "Identificativ dël fìlter",
@@ -147,7 +142,6 @@
"abusefilter-edit-consequences": "Assion fàite a l'andividuassion",
"abusefilter-edit-action-warn": "Ancaminé ste assion apress avèj dàit n'avis a l'utent",
"abusefilter-edit-action-disallow": "Vieta a l'utent ëd fé l'assion an custion",
- "abusefilter-edit-action-flag": "Marché la modìfica ant ël registr contra j'abus",
"abusefilter-edit-action-blockautopromote": "Gava lë stat d'autoconfirmà a l'utent",
"abusefilter-edit-action-degroup": "Gava l'utent da tute le partìe privilegià",
"abusefilter-edit-action-block": "Blòca l'utent e/o l'adrëssa IP da modifiché",
@@ -156,7 +150,6 @@
"abusefilter-edit-action-tag": "Tichëtté la modìfica per na revision adissional",
"abusefilter-edit-throttle-count": "Nùmer d'assion da përmëtte:",
"abusefilter-edit-throttle-period": "Durà ëd temp:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|second|second}}",
"abusefilter-edit-throttle-groups": "Argropé la moderassion për:\n:''(un për linia, separà con dle vìrgole)''",
"abusefilter-edit-warn-message": "Mëssagi ëd sistema da dovré për l'avis:",
"abusefilter-edit-warn-other": "Àutr mëssagi",
@@ -241,19 +234,18 @@
"abusefilter-edit-builder-vars-oldsize": "Dimension veja dla pàgina",
"abusefilter-edit-builder-vars-removedlines": "Linie gavà ant la modìfica",
"abusefilter-edit-builder-vars-summary": "Resumé o rason ëd la modìfica",
- "abusefilter-edit-builder-vars-article-id": "Identificativ ëd la pàgina",
- "abusefilter-edit-builder-vars-article-ns": "Spassi nominal ëd la pàgina",
- "abusefilter-edit-builder-vars-article-text": "Tìtol ëd la pàgina (sensa spassi nominal)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Tìtol complet ëd la pàgina",
- "abusefilter-edit-builder-vars-article-views": "Pàgine visualisà",
+ "abusefilter-edit-builder-vars-page-id": "Identificativ ëd la pàgina",
+ "abusefilter-edit-builder-vars-page-ns": "Spassi nominal ëd la pàgina",
+ "abusefilter-edit-builder-vars-page-title": "Tìtol ëd la pàgina (sensa spassi nominal)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Tìtol complet ëd la pàgina",
"abusefilter-edit-builder-vars-movedfrom-id": "Identificativ ëd la pàgina sorgiss da tramudé",
"abusefilter-edit-builder-vars-movedfrom-ns": "Spassi nominal ëd la pàgina sorgiss da tramudé",
- "abusefilter-edit-builder-vars-movedfrom-text": "Tìtol ëd la pàgina sorgiss da tramudé",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Tìtol complet ëd la pàgina original da tramudé",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Tìtol ëd la pàgina sorgiss da tramudé",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Tìtol complet ëd la pàgina original da tramudé",
"abusefilter-edit-builder-vars-movedto-id": "Identificativ ëd la pàgina ëd destinassion ëd lë spostament",
"abusefilter-edit-builder-vars-movedto-ns": "Spassi nominal ëd la pàgina ëd destinassion ëd lë spostament",
- "abusefilter-edit-builder-vars-movedto-text": "Tìtol ëd la pàgina ëd destinassion ëd lë spostament",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Tìtol complet ëd la pàgina ëd destinassion ëd lë spostament",
+ "abusefilter-edit-builder-vars-movedto-title": "Tìtol ëd la pàgina ëd destinassion ëd lë spostament",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Tìtol complet ëd la pàgina ëd destinassion ëd lë spostament",
"abusefilter-edit-builder-vars-user-editcount": "Conteur ëd modìfiche dl'utent",
"abusefilter-edit-builder-vars-user-age": "Età dël cont ëd l'utent",
"abusefilter-edit-builder-vars-user-name": "Nòm dël cont ëd l'utent",
@@ -312,7 +304,7 @@
"abusefilter-exception-regexfailure": "Eror ant l'espression regolar \"$3\" al caràter $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Coatà ëd fasson ilegal la variàbil dë stàndard \"$2\" al caràter $1.",
"abusefilter-exception-outofbounds": "Arcesta ëd l'element inesistent $2 ëd la lista (dimension ëd la lista = $3) al caràter $1.",
- "abusefilter-exception-notlist": "Arcesta ëd n'element fòra ëd na tàula al caràter $1.",
+ "abusefilter-exception-notarray": "Arcesta ëd n'element fòra ëd na tàula al caràter $1.",
"abusefilter-action-tag": "Tichëtta",
"abusefilter-action-throttle": "Vàlvola",
"abusefilter-action-warn": "Avisa",
@@ -372,7 +364,6 @@
"abusefilter-topnav-import": "Amporté un filtr",
"abusefilter-log-name": "Registr dij Filtr ëd Sicurëssa",
"abusefilter-log-header": "Sto registr a smon un resumé dij cambi fàit ai filtr.\nPër ij detaj complet, ch'a bèica [[Special:AbuseFilter/history|la lista]] dle modìfiche recent dël filtr.",
- "abusefilter-log-entry-modify": "modificà $1 ($2)",
"abusefilter-log-noresults": "Gnun arzultà",
"abusefilter-diff-title": "Diferense antra le version",
"abusefilter-diff-item": "Element",
diff --git a/AbuseFilter/i18n/pnb.json b/AbuseFilter/i18n/pnb.json
new file mode 100644
index 00000000..7d0251e8
--- /dev/null
+++ b/AbuseFilter/i18n/pnb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "BukhariSaeed"
+ ]
+ },
+ "abusefilter-history-diff": "تبدیلیاں"
+}
diff --git a/AbuseFilter/i18n/ps.json b/AbuseFilter/i18n/ps.json
index fe960a68..b16614a1 100644
--- a/AbuseFilter/i18n/ps.json
+++ b/AbuseFilter/i18n/ps.json
@@ -29,8 +29,6 @@
"abusefilter-log-linkoncontribs": "د ورانکارۍ يادښت",
"abusefilter-log-linkoncontribs-text": "د دې کارن د ورانکارۍ يادښت",
"abusefilter-log-hide-reason": "سبب:",
- "abusefilter-logentry-suppress": "\"[[$1]]\" پټول",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\" ناپټول",
"abusefilter-list": "ټول چاڼگران",
"abusefilter-list-id": "د چاڼگر پېژند",
"abusefilter-list-status": "دريځ",
@@ -56,7 +54,6 @@
"abusefilter-list-options-scope": "چاڼگران ښکاره کول:",
"abusefilter-list-options-scope-local": "يوازې سيمه ايزه قانونونه",
"abusefilter-list-options-scope-global": "يوازې نړېوال قانونونه",
- "abusefilter-list-options-disabled": "ناچارن چاڼگران:",
"abusefilter-list-options-hidedisabled": "ناچارن چاڼگران پټول",
"abusefilter-list-options-submit": "اوسمهالول",
"abusefilter-tools-submitexpr": "ارزول",
@@ -74,7 +71,6 @@
"abusefilter-edit-rules": "شرطونه:",
"abusefilter-edit-notes": "يادونې:\n:''(شخصي)",
"abusefilter-edit-throttle-period": "د وخت موده:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|ثانيه|ثانيې}}",
"abusefilter-edit-warn-other": "بل پيغام",
"abusefilter-edit-warn-actions": "چارې:",
"abusefilter-edit-warn-edit": "ټاکلی پيغام سمول/جوړول",
@@ -92,10 +88,9 @@
"abusefilter-edit-builder-vars-action": "چاره",
"abusefilter-edit-builder-vars-newsize": "د نوي مخ کچه",
"abusefilter-edit-builder-vars-oldsize": "د زوړ مخ کچه",
- "abusefilter-edit-builder-vars-article-id": "د مخ پېژند",
- "abusefilter-edit-builder-vars-article-ns": "د مخ نوم-تشيال",
- "abusefilter-edit-builder-vars-article-prefixedtext": "د مخ بشپړ سرليک",
- "abusefilter-edit-builder-vars-article-views": "د مخ د کتلو شمېر",
+ "abusefilter-edit-builder-vars-page-id": "د مخ پېژند",
+ "abusefilter-edit-builder-vars-page-ns": "د مخ نوم-تشيال",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "د مخ بشپړ سرليک",
"abusefilter-edit-builder-vars-user-editcount": "د کارن سمون شمېر",
"abusefilter-edit-builder-vars-user-age": "د کارن گڼون عمر",
"abusefilter-edit-builder-vars-user-name": "د گڼون نوم",
diff --git a/AbuseFilter/i18n/pt-br.json b/AbuseFilter/i18n/pt-br.json
index fc68ea5e..86450cf0 100644
--- a/AbuseFilter/i18n/pt-br.json
+++ b/AbuseFilter/i18n/pt-br.json
@@ -25,14 +25,16 @@
"Matma Rex",
"TheEduGobi",
"!Silent",
- "Felipe L. Ewald"
+ "Felipe L. Ewald",
+ "Eduardo Addad de Oliveira",
+ "Pedrofariasm"
]
},
"abusefilter-desc": "Aplica heurísticas automáticas às edições",
"abusefilter": "Configuração do filtro de edições",
"abuselog": "Registro de abusos",
"abusefilter-intro": "Bem-vindo à interface de gestão do Filtro de Abusos.\nO Filtro de Abuso é um mecanismo de ''software'' automatizado de aplicação de heurísticas automáticas a todas as ações.\nEsta interface mostra uma lista de filtros definidos e permite que sejam modificados.",
- "abusefilter-mustbeeditor": "Por razões de segurança, apenas os usuários com o direito de modificar filtros de abusos podem usar esta interface.",
+ "abusefilter-mustviewprivateoredit": "Por razões de segurança, só os usuários com o direito de ver filtros de abuso privados ou de modificar filtros podem usar esta interface.",
"abusefilter-warning": "'''Aviso:''' esta operação foi identificada automaticamente como prejudicial.\nEdições não construtivas serão revertidas rapidamente,\ne a repetição destas edições resultará no bloqueio da sua conta ou do seu endereço IP.\nSe você acredita que esta edição é construtiva, pode submeter novamente para confirmá-la.\nUma breve descrição da regra de abuso com a qual a sua ação coincidiu é: $1",
"abusefilter-disallowed": "Esta ação foi identificada automaticamente como prejudicial e foi consequentemente desautorizada.\nSe você crê que a sua edição foi construtiva, por favor contate um administrador e informe-o do que você estava tentando fazer.\nUma breve descrição da regra de abuso com a qual a sua ação coincidiu é: $1",
"abusefilter-blocked-display": "Esta ação foi identificada automaticamente como prejudicial\ne você foi impedido de executá-la.\nAlém disso, para proteger o {{SITENAME}}, sua conta de usuário e todos os endereços IP associados foram impedidas de editar.\nSe isto ocorreu por engano, por favor contate um administrador.\nUma breve descrição da regra de abuso com a qual a sua ação coincidiu é: $1",
@@ -47,6 +49,7 @@
"right-abusefilter-log": "Ver o registro de abusos",
"right-abusefilter-log-detail": "Ver entradas detalhadas do registro de abusos",
"right-abusefilter-private": "Ver dados privados no registro de abusos",
+ "right-abusefilter-private-log": "Veja o registro de acesso de detalhes privados no Filtro de abuso",
"right-abusefilter-modify-restricted": "Modificar filtros de abusos com ações restritas",
"right-abusefilter-revert": "Reverter todas as modificações feitas por um dado filtro de abusos",
"right-abusefilter-view-private": "Ver filtros de abuso marcados como privados",
@@ -59,6 +62,7 @@
"action-abusefilter-log": "ver o registro de abusos",
"action-abusefilter-log-detail": "ver entradas detalhadas do registro de abusos",
"action-abusefilter-private": "ver dados privados no registro de abusos",
+ "action-abusefilter-private-log": "ver o registo de consultas dos detalhes privados do filtro de abusos",
"action-abusefilter-modify-restricted": "modificar filtros de abuso com ações restritas",
"action-abusefilter-revert": "reverter todas as alterações feitas por um dado filtro de abuso",
"action-abusefilter-view-private": "ver filtros de abuso marcados como privados",
@@ -70,6 +74,19 @@
"abusefilter-log-search-filter": "ID dos filtros (separar com barras verticais):",
"abusefilter-log-search-title": "Título:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Impacto:",
+ "abusefilter-log-search-impact-all": "Todas as ações",
+ "abusefilter-log-search-impact-saved": "Apenas alterações salvadas",
+ "abusefilter-log-search-impact-not-saved": "Sem alterações salvadas",
+ "abusefilter-log-search-entries-label": "Visibilidade:",
+ "abusefilter-log-search-entries-all": "Todas as entradas",
+ "abusefilter-log-search-entries-hidden": "Só as entradas ocultadas",
+ "abusefilter-log-search-entries-visible": "Só as entradas visíveis",
+ "abusefilter-log-search-action-label": "Ação de acionamento:",
+ "abusefilter-log-search-action-other": "Outro",
+ "abusefilter-log-search-action-any": "Qualquer",
+ "abusefilter-log-search-action-taken-label": "Ação realizada:",
+ "abusefilter-log-search-action-taken-any": "Qualquer",
"abusefilter-log-search-submit": "Pesquisar",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|disparou}} um filtro de abuso, {{GENDER:$8|executando}} a operação “$3” em $4.\nAções tomadas: $5;\nDescrição do filtro: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|disparou}} um filtro de abuso, {{GENDER:$8|executando}} a operação “$3” em $4.\nAções tomadas: $5;\nDescrição do filtro: $6 ($7)",
@@ -83,29 +100,42 @@
"abusefilter-log-details-var": "Variável",
"abusefilter-log-details-val": "Valor",
"abusefilter-log-details-vars": "Parâmetros de ação",
- "abusefilter-log-details-private": "Dados privados",
+ "abusefilter-log-details-private": "Detalhes do registro privado",
"abusefilter-log-details-ip": "Endereço de IP de origem",
+ "abusefilter-log-details-checkuser": "Verificar usuário",
"abusefilter-log-noactions": "nenhum",
"abusefilter-log-details-diff": "Alterações feitas na edição",
"abusefilter-log-linkoncontribs": "registro de abusos",
"abusefilter-log-linkoncontribs-text": "Registro de abuso para {{GENDER:$1|este usuário}}",
+ "abusefilter-log-linkonhistory": "ver o registro de abusos",
+ "abusefilter-log-linkonhistory-text": "Ver o registro de abusos para esta página",
"abusefilter-log-hidden": "(entrada ocultada)",
"abusefilter-log-hidden-implicit": "(oculto porque a revisão foi eliminada)",
"abusefilter-log-cannot-see-details": "Você não tem permissão para ver os detalhes desta entrada.",
+ "abusefilter-log-cannot-see-private-details": "Você não tem permissão para ver detalhes particulares desta entrada.",
"abusefilter-log-nonexistent": "Não existe entrada com o ID fornecido.",
"abusefilter-log-details-hidden": "Você não pode ver os detalhes desta entrada porque estes estão ocultados ao público.",
+ "abusefilter-log-details-hidden-implicit": "Não pode ver os detalhes desta entrada porque a revisão associada está ocultada do público.",
"abusefilter-log-private-not-included": "Um ou mais ID(s) do(s) filtro(s) especificado(s) são particular(es). Por você não ter permissão para ver detalhes de filtros particulares, estes filtros não foram adicionados ao resultado da busca.",
"abusefilter-log-hide-legend": "Ocultar entrada",
"abusefilter-log-hide-id": "ID da entrada:",
"abusefilter-log-hide-hidden": "Ocultar esta entrada da vista do público",
"abusefilter-log-hide-reason": "Motivo:",
+ "abusefilter-log-hide-reason-other": "Outro motivo/motivo adicional:",
"abusefilter-log-hide-forbidden": "Não tem permissão para ocultar\nentradas do registro de abusos.",
- "abusefilter-logentry-suppress": "ocultou “[[$1]]”",
- "abusefilter-logentry-unsuppress": "revelou “[[$1]]”",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|escondeu}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|reexibida}} $3",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|disparou}} $4, {{GENDER:$2|executando}} a operação “$5” em $3. Ações tomadas: $6 ($7)",
+ "log-action-filter-abusefilter": "Tipo de alteração de filtro:",
+ "log-action-filter-abusefilter-create": "Criação de novos filtros",
+ "log-action-filter-abusefilter-modify": "Modificação de filtros",
+ "log-action-filter-suppress-abuselog": "Supressão de registro de abuso",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|acessou}} detalhes privados de $3",
+ "abusefilterprivatedetails-log-name": "registro de acesso do do Filtro de abuso para detalhes privados",
"abusefilter-management": "Gerenciamento do filtro de abuso",
"abusefilter-list": "Todos os filtros",
"abusefilter-list-id": "Identificação de filtro",
+ "abusefilter-list-pattern": "Padrão",
"abusefilter-list-status": "Estado",
"abusefilter-list-public": "Descrição pública",
"abusefilter-list-consequences": "Consequências",
@@ -121,6 +151,7 @@
"abusefilter-enabled": "Ativo",
"abusefilter-deleted": "Excluído",
"abusefilter-disabled": "Desativado",
+ "abusefilter-throttled": "limitado",
"abusefilter-hitcount": "$1 {{PLURAL:$1|resultado|resultados}}",
"abusefilter-new": "Criar um novo filtro",
"abusefilter-return": "Voltar ao gerenciamento de filtros",
@@ -134,8 +165,16 @@
"abusefilter-list-options-scope-local": "Apenas regras locais",
"abusefilter-list-options-scope-global": "Apenas regras globais",
"abusefilter-list-options-scope-all": "Regras globais e locais",
- "abusefilter-list-options-disabled": "Filtros desativados:",
+ "abusefilter-list-options-further-options": "Mais opções:",
"abusefilter-list-options-hidedisabled": "Ocultar filtros desativados",
+ "abusefilter-list-options-hideprivate": "Ocultar os filtros privados",
+ "abusefilter-list-options-searchfield": "Pesquise nas regras:",
+ "abusefilter-list-options-searchpattern": "Inserir um padrão",
+ "abusefilter-list-options-searchoptions": "Modo de pesquisa:",
+ "abusefilter-list-options-search-like": "Consulta simples",
+ "abusefilter-list-options-search-rlike": "Expressão regular",
+ "abusefilter-list-options-search-irlike": "Expressão regular insensível a maiúsculas",
+ "abusefilter-list-regexerror": "Ocorreu um erro durante a pesquisa: Erro de sintaxe de expressão regular.",
"abusefilter-list-options-submit": "Atualizar",
"abusefilter-tools-text": "Aqui estão algumas ferramentas que poderão ser úteis na formulação e depuração dos filtros de abuso.",
"abusefilter-tools-expr": "Testador de expressões",
@@ -143,22 +182,25 @@
"abusefilter-tools-reautoconfirm": "Restaurar estatuto autoconfirmado",
"abusefilter-tools-reautoconfirm-user": "Usuário:",
"abusefilter-tools-reautoconfirm-submit": "Re-autoconfirmar",
- "abusefilter-reautoconfirm-none": "Não foi suspensa o estatuto autoconfirmado {{GENDER:$1|desse usuário|dessa usuária|desses usuários}}.",
+ "abusefilter-reautoconfirm-none": "Não foi suspenso o estado autoconfirmado {{GENDER:$1|desse usuário|dessa usuária|desse(a) usuário(a)}}.",
"abusefilter-reautoconfirm-notallowed": "Você não está autorizado a restaurar o estado autoconfirmado.",
"abusefilter-reautoconfirm-done": "O estado autoconfirmado da conta foi restaurado",
"abusefilter-status": "{{PLURAL:$1|Da última 1 ação|Das últimas $1 ações}}, $2 ($3%) {{PLURAL:$2|atingiu|atingiram}} o limite de $4 condições, e $5 ($6%) {{PLURAL:$5|correspondeu|corresponderam}} a um dos filtros neste momento ativos.",
"abusefilter-edit": "Editando um filtro de abusos",
"abusefilter-edit-subtitle": "Editando filtro $1",
"abusefilter-edit-subtitle-new": "Criando filtro",
+ "abusefilter-edit-token-not-match": "A edição não foi publicada! Por favor, grave novamente.",
"abusefilter-edit-oldwarning": "<strong>Você está editando uma versão antiga deste filtro.\nAs estatísticas transcritas são relativas à versão mais recente do filtro.\nSe gravar as suas modificações, irá sobrepor todas as modificações desde a revisão que você está aeditando.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Voltar ao histórico deste filtro]].",
"abusefilter-edit-status-label": "Estatísticas:",
"abusefilter-edit-status": "{{PLURAL:$1|Da última $1 ação|Das últimas $1 ações}}, este filtro correspondeu com $2 ($3%).",
"abusefilter-edit-status-profile": "{{PLURAL:$1|Da última 1 ação|Das últimas $1 ações}}, este filtro correspondeu com $2 ($3%).\nEm média, o seu tempo de execução é de $4 ms, e consome $5 {{PLURAL:$5|condição|condições}} do seu limite de condições.",
- "abusefilter-edit-throttled": "'''Aviso''': Este filtro foi automaticamente desativado como medida de segurança.\nO filtro atingiu o limite de correspondência com mais de $1% de ações.",
+ "abusefilter-edit-throttled-warning": "'''Aviso:''' Este filtro foi automaticamente identificado como prejudicial. Como medida de prevenção, as seguintes operações não serão executadas ($1). Para remover esta restrição reveja e [[mw:Extension:AbuseFilter/Conditions|otimize]] as suas condições, por favor",
"abusefilter-edit-new": "Novo filtro",
"abusefilter-edit-save": "Salvar filtro",
"abusefilter-edit-id": "ID do filtro:",
+ "abusefilter-edit-switch-editor": "Alterar Editor",
"abusefilter-edit-description": "Descrição:\n:''(publicamente visível)''",
+ "abusefilter-edit-field-description": "descrição",
"abusefilter-edit-group": "Grupo de filtros:",
"abusefilter-edit-flags": "Sinalizações:",
"abusefilter-edit-enabled": "Ativar este filtro",
@@ -166,6 +208,7 @@
"abusefilter-edit-hidden": "Ocultar detalhes deste filtro do visionamento público",
"abusefilter-edit-global": "Filtro global",
"abusefilter-edit-rules": "Condições:",
+ "abusefilter-edit-field-conditions": "condições",
"abusefilter-edit-notes": "Notas:",
"abusefilter-edit-lastmod": "Última modificação do filtro:",
"abusefilter-edit-lastmod-text": "$1 por $2",
@@ -176,25 +219,48 @@
"abusefilter-edit-action-blockautopromote": "Revogar o estatuto autoconfirmado do usuário",
"abusefilter-edit-action-degroup": "Remover o usuário de todos os grupos privilegiados",
"abusefilter-edit-action-block": "Bloquear o usuário e/ou endereço IP para edição",
+ "abusefilter-edit-action-blocktalk": "Impedir que o usuário ou o endereço IP editem a sua própria página de discussão",
"abusefilter-edit-action-throttle": "Disparar ações apenas se o usuário passar um limite de rapidez",
- "abusefilter-edit-action-rangeblock": "Bloquear o intervalo /16 do qual este usuário provém",
+ "abusefilter-edit-action-rangeblock": "Bloquear o intervalo do IP respectivo do qual este usuário provém",
"abusefilter-edit-action-tag": "Etiquetar a edição para revisão posterior",
"abusefilter-edit-throttle-count": "Número de ações a permitir:",
- "abusefilter-edit-throttle-period": "Período de tempo:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|segundo|segundos}}",
- "abusefilter-edit-throttle-groups": "Agrupar limitador por:\n:''(um por linha, combinar com vírgulas)''",
+ "abusefilter-edit-throttle-period": "Período de tempo (em segundos):",
+ "abusefilter-edit-throttle-groups": "Agrupar limitador por:",
+ "abusefilter-edit-throttle-ip": "Endereço de IP",
+ "abusefilter-edit-throttle-user": "Conta de usuário",
+ "abusefilter-edit-throttle-range": "Gama /16",
+ "abusefilter-edit-throttle-creationdate": "Hora do servidor de criação da conta",
+ "abusefilter-edit-throttle-editcount": "Contador de edições",
+ "abusefilter-edit-throttle-site": "Todo o ''site''",
+ "abusefilter-edit-throttle-page": "Página",
+ "abusefilter-throttle-details": "Permitir $1 {{PLURAL:$1|operação|operações}} a cada $2 {{PLURAL:$2|segundo|segundos}}, agrupar o limitador por: $3",
"abusefilter-edit-warn-message": "Mensagem de sistema para usar como aviso:",
"abusefilter-edit-warn-other": "Outra mensagem",
- "abusefilter-edit-warn-other-label": "Nome da página de outra mensagem:\n:''(sem prefixo MediaWiki)''",
+ "abusefilter-edit-warn-other-label": "Nome da página de outra mensagem:\n:''(sem prefixo \"MediaWiki\")''",
"abusefilter-edit-warn-actions": "Ações:",
- "abusefilter-edit-warn-preview": "Prever mensagem selecionada",
+ "abusefilter-edit-warn-preview": "Mostrar/ocultar a pré-visualização da mensagem selecionada",
"abusefilter-edit-warn-edit": "Criar/editar mensagem selecionada",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Etiquetas]] a aplicar (uma por linha):",
+ "abusefilter-edit-disallow-message": "Mensagem do sistema a ser usada para não permitir:",
+ "abusefilter-edit-disallow-other": "Outra mensagem",
+ "abusefilter-edit-disallow-other-label": "Nome da página da outra mensagem:\n:''(sem prefixo \"MediaWiki:\")''",
+ "abusefilter-edit-disallow-actions": "Ações:",
+ "abusefilter-edit-disallow-preview": "Mostrar/ocultar a pré-visualização da mensagem selecionada",
+ "abusefilter-edit-disallow-edit": "Criar/editar mensagem selecionada",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Etiquetas]] para aplicar:",
+ "abusefilter-edit-tag-placeholder": "Adicionar etiquetas (uma a uma, ou separadas por vírgulas)",
+ "abusefilter-edit-tag-hidden-placeholder": "Adicionar etiquetas (separadas por vírgulas)",
+ "abusefilter-edit-block-anon-durations": "Duração do bloqueio para os usuários anônimos:",
+ "abusefilter-edit-block-user-durations": "Duração do bloqueio para os usuários registados:",
+ "abusefilter-block-anon": "Bloquear usuários anônimos",
+ "abusefilter-block-user": "usuários registrados bloqueado",
+ "abusefilter-block-talk": "página de discussão bloqueada",
"abusefilter-edit-denied": "Você não pode ver os detalhes deste filtro porque ele está ocultado da visualização pública.",
"abusefilter-edit-main": "Parâmetros do filtro",
"abusefilter-edit-done-subtitle": "Filtro editado",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Suas alterações]] ao [[Special:AbuseFilter/$1|filtro $3]] foram salvas.",
"abusefilter-edit-badsyntax": "Há um erro de sintaxe no filtro que especificou.\nO resultado de saída do analisador foi: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Os seguintes campos são obrigatórios e têm de ser preenchidos: $1",
+ "abusefilter-edit-deleting-enabled": "Você não pode marcar um filtro ativo como excluído.",
"abusefilter-edit-restricted": "Você não pode editar este filtro, porque ele contém uma ou mais ações restritas.\nPor favor, peça a um usuário com permissão de adicionamento de ações restritas para efetuar a alteração por si.",
"abusefilter-edit-viewhistory": "Ver o histórico deste filtro",
"abusefilter-edit-history": "Histórico:",
@@ -206,7 +272,7 @@
"abusefilter-edit-export": "Exportar este filtro para outra wiki",
"abusefilter-edit-syntaxok": "Nenhum erro de sintaxe foi detectado.",
"abusefilter-edit-syntaxerr": "Erro de sintaxe detectado: $1",
- "abusefilter-edit-bad-tags": "Uma ou mais das etiquetas que você especificou não são válidas.\nEtiquetas devem ser curtas, não devem conter caracteres especiais e não devem ser reservadas por outros softwares. Tente escolher um novo nome de etiqueta",
+ "abusefilter-edit-bad-tags": "Uma ou mais das etiquetas que especificou não são válidas.\nAs etiquetas devem ser curtas, não podem conter caracteres especiais e não podem estar reservadas por outro programa. Tente escolher um novo nome de etiqueta.",
"abusefilter-edit-notallowed": "Você não tem permissão para criar ou editar filtros de abuso",
"abusefilter-edit-notallowed-global": "Você não está autorizada a criar ou editar filtros de abuso globais",
"abusefilter-edit-notallowed-global-custom-msg": "Mensagens de advertência personalizados não são suportadas por filtros globais",
@@ -219,8 +285,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Módulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Potência (**)",
"abusefilter-edit-builder-group-op-comparison": "Operadores de comparação",
- "abusefilter-edit-builder-op-comparison-equal": "Igual a (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Diferente de (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Valor igual a (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Valor e tipo iguais a (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Valor diferente de (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Valor e tipo diferentes de (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Menor que (<)",
"abusefilter-edit-builder-op-comparison-gt": "Maior que (>)",
"abusefilter-edit-builder-op-comparison-lte": "Menor que ou igual a (<=)",
@@ -244,23 +312,30 @@
"abusefilter-edit-builder-funcs-lcase": "Para minúscula (lcase)",
"abusefilter-edit-builder-funcs-ucase": "Para letras maiúsculas (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normalizar caracteres confundíveis (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normalizar um texto e nele pesquisar vários subtextos no modo OU (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Normalizar um texto e nele pesquisar vários subtextos no modo E (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Remover caracteres duplos (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Caracteres especiais / total de caracteres (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normalizar (norm)",
"abusefilter-edit-builder-funcs-count": "Número de vezes que o texto X aparece no texto Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Número de vezes que a regex X aparece no texto Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Matriz de correspondências regex num texto para cada grupo de captura (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Remover espaços em branco (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Remover caracteres especiais (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "O IP está no intervalo? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Pesquisar num texto vários outros textos (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Pesquisar num texto vários subtextos no modo OU. (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Pesquisar num texto vários subtextos no modo E. (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Verificar se um dado argumento é igual (===) a algum dos seguintes argumentos (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Subtexto (substr)",
"abusefilter-edit-builder-funcs-strpos": "Posição do subtexto no texto (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Substituir o subtexto pelo texto (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Sequência de escape literal na expressão regular (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Atribuir variável (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Normalizar as entidades de HTML em caracteres Unicode (sanitize)",
"abusefilter-edit-builder-group-vars": "Variáveis",
"abusefilter-edit-builder-vars-accountname": "Nome de conta (na criação da conta)",
"abusefilter-edit-builder-vars-timestamp": "Data Unix da mudança",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Timestamp do log",
"abusefilter-edit-builder-vars-action": "Ação",
"abusefilter-edit-builder-vars-addedlines": "Linhas adicionadas na edição",
"abusefilter-edit-builder-vars-delta": "Alteração de tamanho na edição",
@@ -271,19 +346,21 @@
"abusefilter-edit-builder-vars-new-content-model": "Novo modelo de conteúdo",
"abusefilter-edit-builder-vars-removedlines": "Linhas removidas na edição",
"abusefilter-edit-builder-vars-summary": "Resumo ou motivo da edição",
- "abusefilter-edit-builder-vars-article-id": "ID da página",
- "abusefilter-edit-builder-vars-article-ns": "Domínio da página",
- "abusefilter-edit-builder-vars-article-text": "Título da página (sem o domínio)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Título completo da página",
- "abusefilter-edit-builder-vars-article-views": "Visualização de páginas",
+ "abusefilter-edit-builder-vars-page-id": "ID da página",
+ "abusefilter-edit-builder-vars-page-ns": "Domínio da página",
+ "abusefilter-edit-builder-vars-page-title": "Título da página (sem o domínio)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Título completo da página",
+ "abusefilter-edit-builder-vars-page-age": "Idade da página (em segundos)",
"abusefilter-edit-builder-vars-movedfrom-id": "ID da página fonte da movimentação",
"abusefilter-edit-builder-vars-movedfrom-ns": "Domínio da página fonte da movimentação",
- "abusefilter-edit-builder-vars-movedfrom-text": "Título da página fonte da movimentação",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Título completo da página fonte da movimentação",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Título da página fonte da movimentação",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Título completo da página fonte da movimentação",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Idade da página de origem da movimentação (em segundos)",
"abusefilter-edit-builder-vars-movedto-id": "ID da página destino da movimentação",
"abusefilter-edit-builder-vars-movedto-ns": "Domínio da página destino da movimentação",
- "abusefilter-edit-builder-vars-movedto-text": "Título da página destino da movimentação",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Título completo da página destino da movimentação",
+ "abusefilter-edit-builder-vars-movedto-title": "Título da página destino da movimentação",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Título completo da página destino da movimentação",
+ "abusefilter-edit-builder-vars-movedto-age": "Idade da página de destino da movimentação (em segundos)",
"abusefilter-edit-builder-vars-user-editcount": "Contagem de edições do usuário",
"abusefilter-edit-builder-vars-user-age": "Idade da conta de usuário",
"abusefilter-edit-builder-vars-user-name": "Nome da conta de usuário",
@@ -293,10 +370,14 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "Há quanto tempo o endereço de e-mail foi confirmado",
"abusefilter-edit-builder-vars-recent-contributors": "Últimos dez usuários que colaboraram na página",
"abusefilter-edit-builder-vars-first-contributor": "Primeiro usuário a contribuir na página",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Últimos dez usuários que colaboraram na página de origem da movimentação",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Primeiro usuário que colaborou na página de origem da movimentação",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Últimos dez usuários que colaboraram na página de destino da movimentação",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Primeiro usuário que colaborou na página de destino da movimentação",
"abusefilter-edit-builder-vars-all-links": "Todos os links externos no novo texto",
"abusefilter-edit-builder-vars-added-links": "Todos os links externos adicionados na edição",
"abusefilter-edit-builder-vars-removed-links": "Todos os links externos removidos na edição",
- "abusefilter-edit-builder-vars-old-text": "Texto Wiki anterior da página, antes da edição",
+ "abusefilter-edit-builder-vars-old-text": "Texto wiki anterior da página, antes da edição (já não é usado)",
"abusefilter-edit-builder-vars-new-text": "Nova página com texto wiki, após a edição",
"abusefilter-edit-builder-vars-new-pst": "Nova página de wiki texto, transformada antes de salvar",
"abusefilter-edit-builder-vars-diff-pst": "Diferenças unificadas das alterações nesta edição, transformadas antes da gravação",
@@ -307,9 +388,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "Nível de proteção de movimentação da página",
"abusefilter-edit-builder-vars-restrictions-create": "Proteção para criação da página",
"abusefilter-edit-builder-vars-restrictions-upload": "Proteção para carregamento do arquivo",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Nível de proteção de edições da página de origem da movimentação",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Nível de proteção de movimentações da página de origem da movimentação",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Proteção de criação da página de origem da movimentação",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Proteção de carregamento do arquivo de origem da movimentação",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Nível de proteção de edições da página de destino da movimentação",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Nível de proteção de movimentações da página de destino da movimentação",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Proteção de criação da página de destino da movimentação",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Proteção de carregamento do arquivo de destino da movimentação",
"abusefilter-edit-builder-vars-old-text-stripped": "Texto anterior da página, sem a formatação",
"abusefilter-edit-builder-vars-old-links": "Links na página, antes da edição",
- "abusefilter-edit-builder-vars-old-html": "Texto wiki anterior da página, convertido para HTML",
+ "abusefilter-edit-builder-vars-old-html": "Texto wiki anterior da página, convertido para HTML (já não é usado)",
"abusefilter-edit-builder-vars-minor-edit": "Se a edição está marcada ou não como menor",
"abusefilter-edit-builder-vars-file-sha1": "Hash SHA1 do conteúdo do arquivo",
"abusefilter-edit-builder-vars-file-size": "Tamanho do arquivo em bytes",
@@ -336,6 +425,7 @@
"abusefilter-history-filterid": "Filtro",
"abusefilter-history-select-legend": "Melhorar pesquisa",
"abusefilter-history-select-user": "Usuário:",
+ "abusefilter-history-select-filter": "ID do filtro:",
"abusefilter-history-select-submit": "Refinar",
"abusefilter-history-diff": "Mudanças",
"abusefilter-history-error-hidden": "O filtro que solicitou está ocultado e não pode ver o seu histórico.",
@@ -346,14 +436,17 @@
"abusefilter-exception-unclosedstring": "Texto com início na posição $1, não foi fechado.",
"abusefilter-exception-invalidoperator": "Operador “$2” inválido, na posição $1.",
"abusefilter-exception-unrecognisedtoken": "Excerto “$2” não reconhecido, na posição $1.",
- "abusefilter-exception-noparams": "Não foram fornecidos parâmetros à função “$2”, na posição $1.",
+ "abusefilter-exception-noparams": "Nenhum parâmetro dado à função \"$2\" no caractere $1.\nEsperado $3 {{PLURAL:$3|argumento|argumentos}}.",
"abusefilter-exception-dividebyzero": "Tentativa ilegal de dividir $2 por zero, na posição $1.",
"abusefilter-exception-unrecognisedvar": "Variável não reconhecida $2, na posição $1.",
"abusefilter-exception-notenoughargs": "Argumentos insuficientes para a função $2, na posição $1.\nEsperava-se $3 {{PLURAL:$3|argumento|argumentos}}, obteve-se $4",
- "abusefilter-exception-regexfailure": "Erro na expressão regular “$3”, na posição $1: “$2”",
+ "abusefilter-exception-regexfailure": "Erro na expressão regular “$2”, na posição $1: “$1”",
"abusefilter-exception-overridebuiltin": "Sobreposição ilegal da variável integrada “$2”, na posição $1.",
- "abusefilter-exception-outofbounds": "Solicitando item $2 não existente na lista (tamanho da lista = $3) na posição $1.",
- "abusefilter-exception-notlist": "Solicitando uma entrada de matriz a uma não matriz, na posição $1.",
+ "abusefilter-exception-outofbounds": "Foi solicitada a entrada $2 que não existe na matriz (tamanho da matriz = $3) na posição $1.",
+ "abusefilter-exception-notarray": "Solicitando uma entrada de matriz a uma não matriz, na posição $1.",
+ "abusefilter-exception-unclosedcomment": "Comentário por fechar, no caráter $1.",
+ "abusefilter-exception-invalidiprange": "Foi fornecida uma gama IP inválida \"$2\" no carácter $1.",
+ "abusefilter-exception-disabledvar": "A variável $2 na posição $1 deixou de ser usada.",
"abusefilter-action-tag": "Etiquetar",
"abusefilter-action-throttle": "Limitador",
"abusefilter-action-warn": "Avisar",
@@ -369,8 +462,9 @@
"abusefilter-revert-periodstart": "Início do período:",
"abusefilter-revert-periodend": "Fim do período:",
"abusefilter-revert-search": "Selecionar ações",
- "abusefilter-revert-filter": "Filtro:",
+ "abusefilter-revert-filter": "ID do filtro:",
"abusefilter-revert-preview-intro": "Abaixo estão as alterações feitas pelo filtro de abusos que serão revertidas por esta operação.\nPor favor, verifique-as cuidadosamente e clique \"{{int:abusefilter-revert-confirm}}\" para confirmar a sua seleção.",
+ "abusefilter-revert-confirm-legend": "Confirmar a reversão",
"abusefilter-revert-confirm": "Confirmar",
"abusefilter-revert-success": "Reverteu todas as alterações feitas pelo filtro de abusos devido ao [[Special:AbuseFilter/$1|filtro $2]].",
"abusefilter-revert-reason": "Reversão automática de todas as alterações feitas pelo filtro de abusos devido ao filtro $1.\nMotivo dado: $2",
@@ -382,12 +476,20 @@
"abusefilter-test-submit": "Testar",
"abusefilter-test-load": "Carregar",
"abusefilter-test-user": "Alterações pelo usuário:",
+ "abusefilter-test-nobots": "Ocultar edições de bot",
"abusefilter-test-period-start": "Alterações feitas depois:",
"abusefilter-test-period-end": "Alterações feitas antes de:",
"abusefilter-test-page": "Alterações à página:",
"abusefilter-test-shownegative": "Mostrar alterações que não correspondam ao filtro",
"abusefilter-test-syntaxerr": "O filtro que introduziu continha um erro de sintaxe.\nPara ver uma explicação completa clique o botão \"Verificar sintaxe\".",
"abusefilter-test-badtitle": "O título de página que você inseriu estava inválido. Esse deve conter um ou mais caracteres que não podem ser utilizados em títulos.",
+ "abusefilter-test-action": "Tipo de ação:",
+ "abusefilter-test-search-type-all": "Todas as ações",
+ "abusefilter-test-search-type-edit": "Edições",
+ "abusefilter-test-search-type-move": "Movimentações",
+ "abusefilter-test-search-type-delete": "Eliminações",
+ "abusefilter-test-search-type-upload": "Carregamentos",
+ "abusefilter-test-search-type-createaccount": "Criações de contas",
"abusefilter-changeslist-examine": "examinar",
"abusefilter-examine": "Examinar alterações individuais",
"abusefilter-examine-intro": "Esta página permite-lhe examinar as variáveis geradas pelo Filtro de Abusos para uma alteração individual, e testá-la com os filtros.",
@@ -414,7 +516,8 @@
"abusefilter-topnav-import": "Importar filtro",
"abusefilter-log-name": "Registro do filtro de abusos",
"abusefilter-log-header": "Este registro mostra um resumo das alterações efetuadas aos filtros.\nPara detalhes completos, ver [[Special:AbuseFilter/history|a lista]] de alterações recentes a filtros.",
- "abusefilter-log-entry-modify": "modificou $1 ($2)",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|criou}} $4 ($5)",
+ "abusefilter-logentry-modify": "$1 {{GENDER:$2|modificou}} $4 ($5)",
"abusefilter-log-noresults": "Nenhum resultado",
"abusefilter-diff-title": "Diferenças entre versões",
"abusefilter-diff-item": "Item",
@@ -429,49 +532,16 @@
"abusefilter-import-submit": "Importar dados",
"abusefilter-group-default": "Padrão",
"abusefilter-http-error": "Ocorreu um erro HTTP: $1.",
- "apihelp-abusefiltercheckmatch-description": "Verifique para ver se um AbuseFilter corresponde a um conjunto de variáveis, evento de AbuseFilter com editor registrado.\n\nvars, rcid ou logid são requeridos ainda que somente um possa ser usado.",
- "apihelp-abusefiltercheckmatch-summary": "Verifique se um AbuseFilter corresponde a um conjunto de variáveis, o evento AbuseFilter foi registrado pelo editor.",
- "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid ou logid é necessário, no entanto, apenas um pode ser usado.",
- "apihelp-abusefiltercheckmatch-param-filter": "O texto do filtro completo para verificar por uma correspondência.",
- "apihelp-abusefiltercheckmatch-param-vars": "Matriz codificada JSON de variáveis para um teste de comparação.",
- "apihelp-abusefiltercheckmatch-param-rcid": "ID da mudança recente para verificação.",
- "apihelp-abusefiltercheckmatch-param-logid": "ID do registro do filtro de Abuso para verificação.",
- "apihelp-abusefiltercheckmatch-example-1": "Testar se a mudança recente do ID 15 corresponde a um filtro simples",
- "apihelp-abusefilterchecksyntax-description": "Verificar a sintaxe de um filtro AbuseFilter.",
- "apihelp-abusefilterchecksyntax-summary": "Verificar a sintaxe de um filtro AbuseFilter.",
- "apihelp-abusefilterchecksyntax-param-filter": "O texto completo do filtro para verificar a sintaxe.",
- "apihelp-abusefilterchecksyntax-example-1": "Verificar a sintaxe de um filtro válido",
- "apihelp-abusefilterchecksyntax-example-2": "Verificar a sintaxe de um filtro inválido",
- "apihelp-abusefilterevalexpression-description": "Avalia uma expressão AbuseFilter.",
- "apihelp-abusefilterevalexpression-summary": "Avalia uma expressão AbuseFilter.",
- "apihelp-abusefilterevalexpression-param-expression": "A expressão para avaliar.",
- "apihelp-abusefilterevalexpression-example-1": "Avaliar uma simples expressão",
- "apihelp-abusefilterunblockautopromote-description": "Desbloqueia um usuário de receber auto-promoções devido a uma consequência do abusefilter.",
- "apihelp-abusefilterunblockautopromote-summary": "Desbloqueia um usuário de receber auto-promoções devido a uma consequência do abusefilter.",
- "apihelp-abusefilterunblockautopromote-param-user": "Nome do usuário que deseja desbloquear.",
- "apihelp-abusefilterunblockautopromote-example-1": "Remover o bloqueio por auto-promoção de [[User:Example]]",
- "apihelp-query+abusefilters-description": "Mostrar detalhes dos filtros de abuso.",
- "apihelp-query+abusefilters-summary": "Mostrar detalhes dos filtros de abuso.",
- "apihelp-query+abusefilters-param-startid": "O ID do filtro para começar a enumeração.",
- "apihelp-query+abusefilters-param-endid": "O ID do filtro para parar a enumeração.",
- "apihelp-query+abusefilters-param-show": "Mostrar apenas filtros que atendam a esses critérios.",
- "apihelp-query+abusefilters-param-limit": "O número máximo de filtros para listar.",
- "apihelp-query+abusefilters-param-prop": "Que propriedades obter.",
- "apihelp-query+abusefilters-example-1": "Lista de filtros públicos habilitados",
- "apihelp-query+abusefilters-example-2": "Mostrar alguns detalhes sobre os filtros",
- "apihelp-query+abuselog-description": "Mostrar os eventos que foram detectados por um dos filtros de abuso.",
- "apihelp-query+abuselog-summary": "Mostrar os eventos que foram detectados por um dos filtros de abuso.",
- "apihelp-query+abuselog-param-start": "O timestamp para começar a enumeração.",
- "apihelp-query+abuselog-param-end": "O timestamp para parar a enumeração.",
- "apihelp-query+abuselog-param-user": "Mostrar apenas as entradas feitas por um determinado usuário ou endereço IP.",
- "apihelp-query+abuselog-param-title": "Mostrar apenas as entradas ocorridas em uma determinada página.",
- "apihelp-query+abuselog-param-filter": "Mostrar apenas as entradas que foram capturadas por um determinado ID do filtro.",
- "apihelp-query+abuselog-param-limit": "A quantidade máxima de entradas para listar.",
- "apihelp-query+abuselog-param-prop": "Que propriedades obter.",
- "apihelp-query+abuselog-example-1": "Mostrar entradas de registro recentes",
- "apihelp-query+abuselog-example-2": "Mostrar entradas de registro recentes para [[API]]",
- "apierror-abusefilter-canttest": "Você não tem permissão para testar filtros de edições.",
- "apierror-abusefilter-cantcheck": "Você não tem permissão para conferir a sintaxe de filtros de edições.",
- "apierror-abusefilter-nosuchlogid": "Não há entrada no registro de abusos com o id $1.",
- "apierror-abusefilter-badsyntax": "O filtro tem sintaxe inválida."
+ "abusefilter-view-private-submit": "Ver detalhes privados",
+ "abusefilter-view-private": "Ver detalhes privados",
+ "abusefilter-view-private-reason": "Razão para acessar detalhes privados:",
+ "abusefilter-log-details-id": "ID de log",
+ "abusefilter-invalid-request": "Pedido inválido! Você deve acessar os detalhes do registro privado através do formulário em [[Special:AbuseLog/$1]] e fornecer um motivo.",
+ "abusefilter-invalid-request-noid": "Pedido inválido! Você deve acessar os detalhes do registro privado através do formulário na página de detalhes do registro de abuso e fornecer um motivo.",
+ "log-description-abusefilterprivatedetails": "Este registro mostra uma lista de vezes em que um usuário acessou os detalhes privados de um registro de abuso.",
+ "abusefilter-noreason": "Aviso: para ver os detalhes particulares deste log, você deve fornecer um motivo.",
+ "abusefilter-log-ip-not-available": "Não disponível",
+ "abusefilter-tag-reserved": "A etiqueta <code>abusefilter-condition-limit</code> é reservado para uso interno pelo Filtro de Abuso.",
+ "tag-abusefilter-condition-limit": "limite de condições atingido",
+ "tag-abusefilter-condition-limit-description": "Edições ou outros acontecimentos que não puderam ser verificados por todos os [[Special:AbuseFilter|filtros de abuso]] ativos ([[mw:Extension:AbuseFilter/Conditions|ajuda]])."
}
diff --git a/AbuseFilter/i18n/pt.json b/AbuseFilter/i18n/pt.json
index 440021c8..52b894b4 100644
--- a/AbuseFilter/i18n/pt.json
+++ b/AbuseFilter/i18n/pt.json
@@ -24,14 +24,16 @@
"He7d3r",
"Opraco",
"Matma Rex",
- "Mansil"
+ "Mansil",
+ "Athena in Wonderland",
+ "Daimona Eaytoy"
]
},
"abusefilter-desc": "Aplica heurísticas automáticas às edições.",
"abusefilter": "Configuração do filtro de abusos",
"abuselog": "Registo de abusos",
"abusefilter-intro": "Bem-vindo à interface de gestão do Filtro de Abusos.\nO Filtro de Abusos é um mecanismo de software automatizado de aplicação de heurísticas automáticas a todas as operações.\nEsta interface mostra uma lista dos filtros definidos e permite que estes sejam modificados.",
- "abusefilter-mustbeeditor": "Por razões de segurança, apenas os utilizadores com o direito de modificar filtros de abuso podem usar esta interface.",
+ "abusefilter-mustviewprivateoredit": "Por razões de segurança, só os utilizadores com o direito de ver filtros de abuso privados ou de modificar filtros podem usar esta interface.",
"abusefilter-warning": "'''Aviso:''' esta operação foi identificada de forma automática como prejudicial.\nAs operações não construtivas serão revertidas rapidamente,\ne a repetição destas edições resultará no bloqueio da sua conta ou do seu endereço IP.\nSe crê que esta operação é construtiva, pode enviar novamente para confirmá-la.\nSegue-se uma breve descrição da regra de prevenção de abusos que detetou a sua operação: $1",
"abusefilter-disallowed": "Esta operação foi identificada automaticamente como prejudicial,\ne foi consequentemente desautorizada.\nSe crê que a sua edição foi construtiva, por favor contacte um administrador, e informe-o do que estava a tentar fazer.\nSegue-se uma breve descrição da regra de prevenção de abusos que detetou a sua ação: $1",
"abusefilter-blocked-display": "Esta operação foi automaticamente identificada como prejudicial e está impedido de executá-la.\nAdicionalmente, para proteger a wiki {{SITENAME}}, foram bloqueadas as edições pela sua conta e por todos os endereços IP associados.\nSe considera que este bloqueio é indevido, por favor contacte um administrador.\nSegue-se uma breve descrição da regra de prevenção de abusos que detetou a sua ação: $1",
@@ -46,6 +48,7 @@
"right-abusefilter-log": "Ver o registo de abusos",
"right-abusefilter-log-detail": "Ver entradas detalhadas do registo de abusos",
"right-abusefilter-private": "Ver dados privados no registo de abusos",
+ "right-abusefilter-private-log": "Ver o registo de consultas dos detalhes privados do filtro de abusos",
"right-abusefilter-modify-restricted": "Modificar filtros de abuso com ações restritas",
"right-abusefilter-revert": "Reverter todas as alterações feitas por um dado filtro de abuso",
"right-abusefilter-view-private": "Ver filtros de abuso marcados como privados",
@@ -58,6 +61,7 @@
"action-abusefilter-log": "ver o registo de abusos",
"action-abusefilter-log-detail": "ver entradas detalhadas do registo de abusos",
"action-abusefilter-private": "ver dados privados do registo de abusos",
+ "action-abusefilter-private-log": "ver o registo de consultas dos detalhes privados do filtro de abusos",
"action-abusefilter-modify-restricted": "modificar filtros de abuso com ações restritas",
"action-abusefilter-revert": "reverter todas as alterações feitas por um dado filtro de abuso",
"action-abusefilter-view-private": "ver filtros de abuso marcados como privados",
@@ -69,14 +73,23 @@
"abusefilter-log-search-filter": "ID dos filtros (separar com barras verticais):",
"abusefilter-log-search-title": "Título:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Impacto:",
+ "abusefilter-log-search-impact-all": "Todas as ações",
+ "abusefilter-log-search-impact-saved": "Apenas alterações gravadas",
+ "abusefilter-log-search-impact-not-saved": "Sem alterações gravadas",
"abusefilter-log-search-entries-label": "Visibilidade:",
"abusefilter-log-search-entries-all": "Todas as entradas",
"abusefilter-log-search-entries-hidden": "Só as entradas ocultadas",
"abusefilter-log-search-entries-visible": "Só as entradas visíveis",
+ "abusefilter-log-search-action-label": "Ação desencadeadora:",
+ "abusefilter-log-search-action-other": "Outra",
+ "abusefilter-log-search-action-any": "Qualquer",
+ "abusefilter-log-search-action-taken-label": "Ação realizada:",
+ "abusefilter-log-search-action-taken-any": "Qualquer",
"abusefilter-log-search-submit": "Pesquisar",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|acionou}} um filtro de abusos ao {{GENDER:$8|executar}} a operação \"$3\" em $4.\nAções tomadas: $5;\nDescrição do filtro: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|acionou}} um filtro de abusos ao {{GENDER:$8|executar}} a operação \"$3\" em $4.\nAções tomadas: $5;\nDescrição do filtro: $6 ($7)",
- "abusefilter-log-detailedentry-meta": "$1: $2 {{GENDER:$9|acionou}} o filtro $3 ao {{GENDER:$9|executar}} a operação \"$4\" em $5.\nAções tomadas: $6;\nDescrição do filtro: $7 ($8)",
+ "abusefilter-log-detailedentry-meta": "$1: $2 {{GENDER:$9|acionou}} o $3 ao {{GENDER:$9|executar}} a operação \"$4\" em $5.\nAções tomadas: $6;\nDescrição do filtro: $7 ($8)",
"abusefilter-log-detailedentry-global": "filtro global $1",
"abusefilter-log-detailedentry-local": "filtro $1",
"abusefilter-log-detailslink": "detalhes",
@@ -86,29 +99,42 @@
"abusefilter-log-details-var": "Variável",
"abusefilter-log-details-val": "Valor",
"abusefilter-log-details-vars": "Parâmetros de ação",
- "abusefilter-log-details-private": "Dados privados",
+ "abusefilter-log-details-private": "Detalhes do registo privado",
"abusefilter-log-details-ip": "Endereço IP de origem",
+ "abusefilter-log-details-checkuser": "Verificação de utilizadores",
"abusefilter-log-noactions": "nenhuma",
"abusefilter-log-details-diff": "Modificações feitas na edição",
"abusefilter-log-linkoncontribs": "registo de abusos",
"abusefilter-log-linkoncontribs-text": "Registo de abusos para {{GENDER:$1|este utilizador|esta utilizadora}}",
+ "abusefilter-log-linkonhistory": "ver o registo de abusos",
+ "abusefilter-log-linkonhistory-text": "Ver o registo de abusos para esta página",
"abusefilter-log-hidden": "(entrada ocultada)",
"abusefilter-log-hidden-implicit": "(oculto porque a revisão foi eliminada)",
"abusefilter-log-cannot-see-details": "Não tem permissão para ver os detalhes desta entrada.",
+ "abusefilter-log-cannot-see-private-details": "Não tem permissão para ver os detalhes privados desta entrada.",
"abusefilter-log-nonexistent": "Não existe nenhuma entrada com o identificador fornecido.",
"abusefilter-log-details-hidden": "Não pode ver os detalhes desta entrada porque estes estão ocultados ao público.",
+ "abusefilter-log-details-hidden-implicit": "Não pode ver os detalhes desta entrada porque a revisão associada está ocultada do público.",
"abusefilter-log-private-not-included": "Um ou mais ID do(s) filtro(s) especificado(s) são particular(es). Por você não ter permissão para ver detalhes de filtros particulares, estes filtros não foram adicionados ao resultado da busca.",
"abusefilter-log-hide-legend": "Ocultar entrada",
"abusefilter-log-hide-id": "ID da entrada:",
"abusefilter-log-hide-hidden": "Ocultar esta entrada da vista do público",
"abusefilter-log-hide-reason": "Motivo:",
+ "abusefilter-log-hide-reason-other": "Outro motivo/motivo adicional:",
"abusefilter-log-hide-forbidden": "Não tem permissão para ocultar\nentradas do registo de abusos.",
- "abusefilter-logentry-suppress": "ocultou [[$1]]",
- "abusefilter-logentry-unsuppress": "revelou [[$1]]",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|ocultou}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|revelou}} $3",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|acionou}} o filtro $4, ao {{GENDER:$2|executar}} a operação \"$5\" em $3.\nAções tomadas: $6 ($7)",
+ "log-action-filter-abusefilter": "Tipo de alteração de filtro:",
+ "log-action-filter-abusefilter-create": "Criação de novos filtros",
+ "log-action-filter-abusefilter-modify": "Modificação de filtros",
+ "log-action-filter-suppress-abuselog": "Supressão do registo de abusos",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|acedeu}} aos detalhes privados de $3",
+ "abusefilterprivatedetails-log-name": "Registo de consulta dos detalhes privados do filtro de abusos",
"abusefilter-management": "Administração do filtro de abusos",
"abusefilter-list": "Todos os filtros",
"abusefilter-list-id": "ID do filtro",
+ "abusefilter-list-pattern": "Padrão",
"abusefilter-list-status": "Estado",
"abusefilter-list-public": "Descrição pública",
"abusefilter-list-consequences": "Consequências",
@@ -124,6 +150,7 @@
"abusefilter-enabled": "Ativado",
"abusefilter-deleted": "Eliminado",
"abusefilter-disabled": "Desativado",
+ "abusefilter-throttled": "limitado",
"abusefilter-hitcount": "$1 {{PLURAL:$1|resultado|resultados}}",
"abusefilter-new": "Criar um filtro novo",
"abusefilter-return": "Voltar à administração de filtros",
@@ -137,8 +164,16 @@
"abusefilter-list-options-scope-local": "Apenas regras locais",
"abusefilter-list-options-scope-global": "Apenas regras globais",
"abusefilter-list-options-scope-all": "Regras locais e globais",
- "abusefilter-list-options-disabled": "Filtros desativados:",
+ "abusefilter-list-options-further-options": "Mais opções:",
"abusefilter-list-options-hidedisabled": "Ocultar filtros desativados",
+ "abusefilter-list-options-hideprivate": "Ocultar os filtros privados",
+ "abusefilter-list-options-searchfield": "Procurar nas regras:",
+ "abusefilter-list-options-searchpattern": "Inserir um padrão",
+ "abusefilter-list-options-searchoptions": "Modo de pesquisa:",
+ "abusefilter-list-options-search-like": "Consulta simples",
+ "abusefilter-list-options-search-rlike": "Expressão regular",
+ "abusefilter-list-options-search-irlike": "Expressão regular insensível ao uso de letras maiúsculas",
+ "abusefilter-list-regexerror": "Ocorreu um erro durante a pesquisa: Erro de sintaxe na expressão regular.",
"abusefilter-list-options-submit": "Atualizar",
"abusefilter-tools-text": "Aqui estão algumas ferramentas que poderão ser úteis na formulação e depuração dos filtros de abuso.",
"abusefilter-tools-expr": "Testador de expressões",
@@ -153,6 +188,7 @@
"abusefilter-edit": "A editar filtro de abusos",
"abusefilter-edit-subtitle": "A editar o filtro $1",
"abusefilter-edit-subtitle-new": "A criar filtro",
+ "abusefilter-edit-token-not-match": "A edição não foi publicada! Por favor, grave novamente.",
"abusefilter-edit-oldwarning": "<strong>Está a editar uma versão antiga deste filtro.\nAs estatísticas transcritas são relativas à versão mais recente do filtro.\nSe gravar as suas modificações, irá sobrepor todas as modificações desde a revisão que está a editar.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Voltar ao histórico deste filtro]].",
"abusefilter-edit-status-label": "Estatísticas:",
"abusefilter-edit-status": "{{PLURAL:$1|Da última 1 ação|Das últimas $1 ações}}, $2 ($3%) acionaram este filtro.",
@@ -161,7 +197,9 @@
"abusefilter-edit-new": "Novo filtro",
"abusefilter-edit-save": "Gravar filtro",
"abusefilter-edit-id": "ID do filtro:",
+ "abusefilter-edit-switch-editor": "Alterar modo de edição",
"abusefilter-edit-description": "Descrição:\n:''(publicamente visível)''",
+ "abusefilter-edit-field-description": "descrição",
"abusefilter-edit-group": "Grupo de filtros:",
"abusefilter-edit-flags": "Sinalizações:",
"abusefilter-edit-enabled": "Ativar este filtro",
@@ -169,6 +207,7 @@
"abusefilter-edit-hidden": "Ocultar detalhes deste filtro do visionamento público",
"abusefilter-edit-global": "Filtro global",
"abusefilter-edit-rules": "Condições:",
+ "abusefilter-edit-field-conditions": "condições",
"abusefilter-edit-notes": "Notas:",
"abusefilter-edit-lastmod": "Última modificação do filtro:",
"abusefilter-edit-lastmod-text": "$1 por $2",
@@ -179,25 +218,48 @@
"abusefilter-edit-action-blockautopromote": "Revogar o estatuto autoconfirmado do utilizador",
"abusefilter-edit-action-degroup": "Remover o utilizador de todos os grupos privilegiados",
"abusefilter-edit-action-block": "Bloquear o utilizador e/ou endereço IP para edição",
+ "abusefilter-edit-action-blocktalk": "Impedir que o utilizador ou o endereço IP editem a sua própria página de discussão",
"abusefilter-edit-action-throttle": "Desencadear ações só se o utilizador ultrapassar uma frequência limite de edições",
- "abusefilter-edit-action-rangeblock": "Bloquear o intervalo /16 do qual este utilizador provém",
+ "abusefilter-edit-action-rangeblock": "Bloquear a gama IP respetiva da qual o utilizador provém",
"abusefilter-edit-action-tag": "Etiquetar a edição para revisão posterior",
"abusefilter-edit-throttle-count": "Número de ações que serão permitidas:",
- "abusefilter-edit-throttle-period": "Período de tempo:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|segundo|segundos}}",
- "abusefilter-edit-throttle-groups": "Agrupar limitador por:\n:''(um por linha, combinar com vírgulas)''",
+ "abusefilter-edit-throttle-period": "Período de tempo (em segundos):",
+ "abusefilter-edit-throttle-groups": "Agrupar limitador por:",
+ "abusefilter-edit-throttle-ip": "Endereço IP",
+ "abusefilter-edit-throttle-user": "Conta de utilizador",
+ "abusefilter-edit-throttle-range": "Gama /16",
+ "abusefilter-edit-throttle-creationdate": "Hora do servidor da criação da conta",
+ "abusefilter-edit-throttle-editcount": "Contagem de edições",
+ "abusefilter-edit-throttle-site": "Todo o ''site''",
+ "abusefilter-edit-throttle-page": "Página",
+ "abusefilter-throttle-details": "Permitir $1 {{PLURAL:$1|operação|operações}} a cada $2 {{PLURAL:$2|segundo|segundos}}, agrupar o limitador por: $3",
"abusefilter-edit-warn-message": "Mensagem de sistema para usar como aviso:",
"abusefilter-edit-warn-other": "Outra mensagem",
- "abusefilter-edit-warn-other-label": "Nome da página de outra mensagem:\n:''(sem prefixo MediaWiki)''",
+ "abusefilter-edit-warn-other-label": "Nome de página de outra mensagem:\n:''(sem o prefixo \"MediaWiki:\")''",
"abusefilter-edit-warn-actions": "Ações:",
- "abusefilter-edit-warn-preview": "Antever mensagem selecionada",
+ "abusefilter-edit-warn-preview": "Mostrar/esconder antevisão da mensagem selecionada",
"abusefilter-edit-warn-edit": "Criar/editar mensagem selecionada",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Etiquetas]] a aplicar (uma por linha):",
+ "abusefilter-edit-disallow-message": "Mensagem de sistema a ser usada para não permitir:",
+ "abusefilter-edit-disallow-other": "Outra mensagem",
+ "abusefilter-edit-disallow-other-label": "Nome de página de outra mensagem:\n:''(sem o prefixo \"MediaWiki:\")''",
+ "abusefilter-edit-disallow-actions": "Ações:",
+ "abusefilter-edit-disallow-preview": "Mostrar/esconder antevisão da mensagem selecionada",
+ "abusefilter-edit-disallow-edit": "Criar/editar mensagem selecionada",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Etiquetas]] a aplicar:",
+ "abusefilter-edit-tag-placeholder": "Adicionar etiquetas (uma a uma, ou separadas por vírgulas)",
+ "abusefilter-edit-tag-hidden-placeholder": "Adicionar etiquetas (separadas por vírgulas)",
+ "abusefilter-edit-block-anon-durations": "Duração do bloqueio para os utilizadores anónimos:",
+ "abusefilter-edit-block-user-durations": "Duração do bloqueio para os utilizadores registados:",
+ "abusefilter-block-anon": "Bloquear utilizadores anónimos",
+ "abusefilter-block-user": "bloquear utilizadores registados",
+ "abusefilter-block-talk": "página de discussão bloqueada",
"abusefilter-edit-denied": "Não pode ver detalhes deste filtro, porque ele está ocultado de vista pública.",
"abusefilter-edit-main": "Parâmetros do filtro",
"abusefilter-edit-done-subtitle": "Filtro editado",
"abusefilter-edit-done": "Gravou com sucesso as [[Special:AbuseFilter/history/$1/diff/prev/$2|alterações]] ao [[Special:AbuseFilter/$1|filtro $3]].",
"abusefilter-edit-badsyntax": "Há um erro de sintaxe no filtro que especificou.\nO resultado de saída do analisador foi: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Os seguintes campos são obrigatórios e têm de ser preenchidos: $1",
+ "abusefilter-edit-deleting-enabled": "Não pode marcar um filtro ativo como eliminado.",
"abusefilter-edit-restricted": "Não pode editar este filtro, porque ele contém uma ou mais ações restritas.\nPor favor, peça a um utilizador com permissão de adicionamento de ações restritas para efetuar a alteração por si.",
"abusefilter-edit-viewhistory": "Ver o histórico deste filtro",
"abusefilter-edit-history": "Histórico:",
@@ -209,7 +271,7 @@
"abusefilter-edit-export": "Exportar este filtro para outra wiki",
"abusefilter-edit-syntaxok": "Não foi detetado nenhum erro de sintaxe.",
"abusefilter-edit-syntaxerr": "Erro de sintaxe detetado: $1",
- "abusefilter-edit-bad-tags": "Uma ou mais das etiquetas que especificou não são válidas.\nAs etiquetas devem ser curtas, não devem conter caracteres especiais e não devem estar reservadas por outro programa. Tente escolher um novo nome de etiqueta",
+ "abusefilter-edit-bad-tags": "Uma ou mais das etiquetas que especificou não são válidas.\nAs etiquetas devem ser curtas, não podem conter caracteres especiais e não podem estar reservadas por outro programa. Tente escolher um novo nome de etiqueta.",
"abusefilter-edit-notallowed": "Não tem permissão para criar ou editar filtros de abuso",
"abusefilter-edit-notallowed-global": "Não tem permissão para criar ou editar filtros de abuso globais",
"abusefilter-edit-notallowed-global-custom-msg": "Não são suportadas mensagens de advertência personalizadas para filtros globais",
@@ -222,21 +284,23 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Módulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Potência (**)",
"abusefilter-edit-builder-group-op-comparison": "Operadores de comparação",
- "abusefilter-edit-builder-op-comparison-equal": "Igual a (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Diferente de (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Valor igual a (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Valor e tipo iguais a (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Valor diferente de (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Valor e tipo diferentes de (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Menor que (<)",
"abusefilter-edit-builder-op-comparison-gt": "Maior que (>)",
"abusefilter-edit-builder-op-comparison-lte": "Menor ou igual a (<=)",
"abusefilter-edit-builder-op-comparison-gte": "Maior ou igual a (>=)",
- "abusefilter-edit-builder-group-op-bool": "Operadores booleanos",
+ "abusefilter-edit-builder-group-op-bool": "Operadores boolianos",
"abusefilter-edit-builder-op-bool-not": "Negação (!)",
"abusefilter-edit-builder-op-bool-and": "Conjunção/E (&)",
"abusefilter-edit-builder-op-bool-or": "Disjunção/Ou (|)",
"abusefilter-edit-builder-group-misc": "Diversos",
"abusefilter-edit-builder-misc-in": "contido num texto (in)",
"abusefilter-edit-builder-misc-like": "Corresponde a um padrão (like)",
- "abusefilter-edit-builder-misc-rlike": "Corresponde a uma regex (rlike)",
- "abusefilter-edit-builder-misc-irlike": "Corresponde a regex, sem distinguir maiúsculas de minúsculas (irlike)",
+ "abusefilter-edit-builder-misc-rlike": "Corresponde a uma expressão regular (rlike)",
+ "abusefilter-edit-builder-misc-irlike": "Corresponde a uma expressão regular, sem distinguir maiúsculas de minúsculas (irlike)",
"abusefilter-edit-builder-misc-contains": "Texto da esquerda contém o da direita (contains)",
"abusefilter-edit-builder-misc-stringlit": "Texto literal (\"\")",
"abusefilter-edit-builder-misc-tern": "Operador ternário (X ? Y : Z)",
@@ -246,23 +310,30 @@
"abusefilter-edit-builder-funcs-lcase": "Para minúscula (lcase)",
"abusefilter-edit-builder-funcs-ucase": "Para maiúscula (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normalizar caracteres confundíveis (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normalizar um texto e nele pesquisar vários subtextos no modo OU (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Normalizar um texto e nele pesquisar vários subtextos no modo E (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Remover caracteres duplos (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Caracteres especiais / total de caracteres (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normalizar (norm)",
"abusefilter-edit-builder-funcs-count": "Número de vezes que o texto X aparece no texto Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Número de vezes que a regex X aparece no texto Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Matriz de correspondências regex num texto para cada grupo de captura (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Remover espaços em branco (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Remover caracteres especiais (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "O IP está no intervalo? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Pesquisar num texto vários outros textos (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Pesquisar num texto vários subtextos no modo OU. (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Pesquisar num texto vários subtextos no modo E. (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Verificar se um dado argumento é igual (===) a algum dos seguintes argumentos (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Subtexto (substr)",
"abusefilter-edit-builder-funcs-strpos": "Posição do subtexto no texto (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Substituir o subtexto pelo texto (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Sequência de escape literal na expressão regular (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Atribuir variável (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Normalizar as entidades de HTML em caracteres Unicode (sanitize)",
"abusefilter-edit-builder-group-vars": "Variáveis",
"abusefilter-edit-builder-vars-accountname": "Nome de conta (na criação da conta)",
"abusefilter-edit-builder-vars-timestamp": "Data Unix da mudança",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Data e hora do registo",
"abusefilter-edit-builder-vars-action": "Ação",
"abusefilter-edit-builder-vars-addedlines": "Linhas adicionadas na edição",
"abusefilter-edit-builder-vars-delta": "Alteração de tamanho na edição",
@@ -273,32 +344,38 @@
"abusefilter-edit-builder-vars-new-content-model": "Novo modelo de conteúdo",
"abusefilter-edit-builder-vars-removedlines": "Linhas removidas na edição",
"abusefilter-edit-builder-vars-summary": "Resumo ou motivo da edição",
- "abusefilter-edit-builder-vars-article-id": "ID da página",
- "abusefilter-edit-builder-vars-article-ns": "Espaço nominal da página",
- "abusefilter-edit-builder-vars-article-text": "Título da página (sem espaço nominal)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Título completo da página",
- "abusefilter-edit-builder-vars-article-views": "Visualizações de página",
+ "abusefilter-edit-builder-vars-page-id": "ID da página",
+ "abusefilter-edit-builder-vars-page-ns": "Espaço nominal da página",
+ "abusefilter-edit-builder-vars-page-title": "Título da página (sem espaço nominal)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Título completo da página",
+ "abusefilter-edit-builder-vars-page-age": "Idade da página (em segundos)",
"abusefilter-edit-builder-vars-movedfrom-id": "ID da página fonte da movimentação",
"abusefilter-edit-builder-vars-movedfrom-ns": "Espaço nominal da página fonte da movimentação",
- "abusefilter-edit-builder-vars-movedfrom-text": "Título da página fonte da movimentação",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Título completo da página fonte da movimentação",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Título da página fonte da movimentação",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Título completo da página fonte da movimentação",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Idade da página de origem da movimentação (em segundos)",
"abusefilter-edit-builder-vars-movedto-id": "ID da página de destino da movimentação",
"abusefilter-edit-builder-vars-movedto-ns": "Espaço nominal da página de destino da movimentação",
- "abusefilter-edit-builder-vars-movedto-text": "Título da página de destino da movimentação",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Título completo da página de destino da movimentação",
+ "abusefilter-edit-builder-vars-movedto-title": "Título da página de destino da movimentação",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Título completo da página de destino da movimentação",
+ "abusefilter-edit-builder-vars-movedto-age": "Idade da página de destino da movimentação (em segundos)",
"abusefilter-edit-builder-vars-user-editcount": "Contagem de edições do utilizador",
"abusefilter-edit-builder-vars-user-age": "Idade da conta de utilizador",
"abusefilter-edit-builder-vars-user-name": "Nome da conta de utilizador",
"abusefilter-edit-builder-vars-user-groups": "Grupos (incluindo implícitos) nos quais o utilizador se encontra",
- "abusefilter-edit-builder-vars-user-rights": "Privilégios que um(a) utilizador(a) tem",
+ "abusefilter-edit-builder-vars-user-rights": "Privilégios que o utilizador tem",
"abusefilter-edit-builder-vars-user-blocked": "Se o utilizador está bloqueado",
"abusefilter-edit-builder-vars-user-emailconfirm": "Há quanto tempo o endereço de correio eletrónico foi confirmado",
"abusefilter-edit-builder-vars-recent-contributors": "Últimos dez utilizadores que colaboraram na página",
"abusefilter-edit-builder-vars-first-contributor": "Primeiro utilizador a editar a página",
- "abusefilter-edit-builder-vars-all-links": "Todos os links externos no novo texto",
- "abusefilter-edit-builder-vars-added-links": "Todos os links externos adicionados na edição",
- "abusefilter-edit-builder-vars-removed-links": "Todos os links externos removidos na edição",
- "abusefilter-edit-builder-vars-old-text": "Texto wiki anterior da página, antes da edição",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Últimos dez utilizadores que colaboraram na página de origem da movimentação",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Primeiro utilizador que colaborou na página de origem da movimentação",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Últimos dez utilizadores que colaboraram na página de destino da movimentação",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Primeiro utilizador que colaborou na página de destino da movimentação",
+ "abusefilter-edit-builder-vars-all-links": "Todas as hiperligações externas no novo texto",
+ "abusefilter-edit-builder-vars-added-links": "Todas as hiperligações externas adicionadas na edição",
+ "abusefilter-edit-builder-vars-removed-links": "Todas as hiperligações externas removidas na edição",
+ "abusefilter-edit-builder-vars-old-text": "Texto wiki anterior da página, antes da edição (já não é usado)",
"abusefilter-edit-builder-vars-new-text": "Texto wiki novo da página, após a edição",
"abusefilter-edit-builder-vars-new-pst": "Texto wiki novo, transformado antes da gravação",
"abusefilter-edit-builder-vars-diff-pst": "Diferenças unificadas das alterações nesta edição, transformadas antes da gravação",
@@ -309,9 +386,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "Nível de proteção de movimentação da página",
"abusefilter-edit-builder-vars-restrictions-create": "Proteção para a criação da página",
"abusefilter-edit-builder-vars-restrictions-upload": "Proteção de carregamento de ficheiros",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Nível de proteção de edições da página de origem da movimentação",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Nível de proteção de movimentações da página de origem da movimentação",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Proteção de criação da página de origem da movimentação",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Proteção de carregamento do ficheiro de origem da movimentação",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Nível de proteção de edições da página de destino da movimentação",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Nível de proteção de movimentações da página de destino da movimentação",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Proteção de criação da página de destino da movimentação",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Proteção de carregamento do ficheiro de destino da movimentação",
"abusefilter-edit-builder-vars-old-text-stripped": "Texto anterior da página, sem a formatação",
- "abusefilter-edit-builder-vars-old-links": "Links na página, antes da edição",
- "abusefilter-edit-builder-vars-old-html": "Texto Wiki anterior da página, convertido para HTML",
+ "abusefilter-edit-builder-vars-old-links": "Hiperligações na página, antes da edição",
+ "abusefilter-edit-builder-vars-old-html": "Texto wiki anterior da página, convertido para HTML (já não é usado)",
"abusefilter-edit-builder-vars-minor-edit": "Se a edição está marcada ou não como menor",
"abusefilter-edit-builder-vars-file-sha1": "Resumo criptográfico (<i>hash</i>) SHA1 do conteúdo do ficheiro",
"abusefilter-edit-builder-vars-file-size": "Tamanho do ficheiro em bytes",
@@ -338,6 +423,7 @@
"abusefilter-history-filterid": "Filtro",
"abusefilter-history-select-legend": "Melhorar pesquisa",
"abusefilter-history-select-user": "Utilizador:",
+ "abusefilter-history-select-filter": "ID do filtro:",
"abusefilter-history-select-submit": "Melhorar",
"abusefilter-history-diff": "Alterações",
"abusefilter-history-error-hidden": "O filtro que solicitou está ocultado e não pode ver o seu histórico.",
@@ -348,14 +434,17 @@
"abusefilter-exception-unclosedstring": "Texto com início na posição $1, não foi fechado.",
"abusefilter-exception-invalidoperator": "Operador \"$2\" inválido, na posição $1.",
"abusefilter-exception-unrecognisedtoken": "Excerto \"$2\" não reconhecido, na posição $1.",
- "abusefilter-exception-noparams": "Não foram fornecidos parâmetros à função \"$2\", na posição $1.",
+ "abusefilter-exception-noparams": "Não foram fornecidos parâmetros à função \"$2\", na posição $1.\n{{PLURAL:$3|Era esperado $3 argumento|Eram esperados $3 argumentos}}.",
"abusefilter-exception-dividebyzero": "Tentativa ilegal de dividir $2 por zero, na posição $1.",
"abusefilter-exception-unrecognisedvar": "Variável não reconhecida $2, na posição $1",
"abusefilter-exception-notenoughargs": "Argumentos insuficientes para a função $2, na posição $1.\nEsperava-se $3 {{PLURAL:$3|argumento|argumentos}}, obteve-se $4",
"abusefilter-exception-regexfailure": "Erro na expressão regular \"$3\", na posição $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Sobreposição ilegal da variável integrada \"$2\", na posição $1.",
- "abusefilter-exception-outofbounds": "Foi solicitada a entrada $2 que não existe na lista (tamanho da lista = $3) na posição $1.",
- "abusefilter-exception-notlist": "Foi solicitada uma entrada de matriz a uma não matriz, na posição $1.",
+ "abusefilter-exception-outofbounds": "Foi solicitada a entrada $2 que não existe na matriz (tamanho da matriz = $3) na posição $1.",
+ "abusefilter-exception-notarray": "Foi solicitada uma entrada de matriz a uma não matriz, na posição $1.",
+ "abusefilter-exception-unclosedcomment": "Comentário por fechar, no carácter $1.",
+ "abusefilter-exception-invalidiprange": "Foi fornecida uma gama IP inválida \"$2\" no carácter $1.",
+ "abusefilter-exception-disabledvar": "A variável $2 na posição $1 deixou de ser usada.",
"abusefilter-action-tag": "Etiquetar",
"abusefilter-action-throttle": "Limitador",
"abusefilter-action-warn": "Avisar",
@@ -371,8 +460,9 @@
"abusefilter-revert-periodstart": "Início do período:",
"abusefilter-revert-periodend": "Fim do período:",
"abusefilter-revert-search": "Selecionar ações",
- "abusefilter-revert-filter": "Filtro:",
+ "abusefilter-revert-filter": "ID do filtro:",
"abusefilter-revert-preview-intro": "Abaixo estão as alterações feitas pelo filtro de abusos que serão revertidas por esta operação.\nPor favor, verifique-as cuidadosamente e clique em \"{{int:abusefilter-revert-confirm}}\" para confirmar a sua seleção.",
+ "abusefilter-revert-confirm-legend": "Confirmar a reversão",
"abusefilter-revert-confirm": "Confirmar",
"abusefilter-revert-success": "Reverteu todas as alterações feitas pelo filtro de abusos devido ao [[Special:AbuseFilter/$1|filtro $2]].",
"abusefilter-revert-reason": "Reversão automática de todas as alterações feitas pelo filtro de abusos devido ao filtro $1.\nMotivo dado: $2",
@@ -384,12 +474,20 @@
"abusefilter-test-submit": "Testar",
"abusefilter-test-load": "Carregar",
"abusefilter-test-user": "Alterações pelo utilizador:",
+ "abusefilter-test-nobots": "Ocultar edições de robôs",
"abusefilter-test-period-start": "Alterações feitas após:",
"abusefilter-test-period-end": "Alterações feitas antes de:",
"abusefilter-test-page": "Alterações à página:",
"abusefilter-test-shownegative": "Mostrar alterações que não coincidem com o filtro",
"abusefilter-test-syntaxerr": "O filtro que introduziu continha um erro de sintaxe.\nPara ver uma explicação completa clique o botão \"{{int:abusefilter-edit-check}}\".",
"abusefilter-test-badtitle": "O título de página que inseriu não é válido. Talvez contenha um ou mais caracteres que não podem ser usados nos títulos.",
+ "abusefilter-test-action": "Tipo de ação:",
+ "abusefilter-test-search-type-all": "Todas as ações",
+ "abusefilter-test-search-type-edit": "Edições",
+ "abusefilter-test-search-type-move": "Movimentações",
+ "abusefilter-test-search-type-delete": "Eliminações",
+ "abusefilter-test-search-type-upload": "Carregamentos",
+ "abusefilter-test-search-type-createaccount": "Criações de contas",
"abusefilter-changeslist-examine": "examinar",
"abusefilter-examine": "Examinar alterações individuais",
"abusefilter-examine-intro": "Esta página permite-lhe examinar as variáveis geradas pelo Filtro de Abusos para uma alteração individual, e testá-la com os filtros.",
@@ -416,6 +514,7 @@
"abusefilter-topnav-import": "Importar filtro",
"abusefilter-log-name": "Registo de filtragens de abusos",
"abusefilter-log-header": "Este registo mostra um resumo das alterações efetuadas a filtros.\nPara todos os detalhes, ver [[Special:AbuseFilter/history|a lista]] de alterações recentes a filtros.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|criou}} $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|modificou}} $4 ($5)",
"abusefilter-log-noresults": "Não foram encontrados resultados.",
"abusefilter-diff-title": "Diferenças entre versões",
@@ -431,49 +530,16 @@
"abusefilter-import-submit": "Importar dados",
"abusefilter-group-default": "Padrão",
"abusefilter-http-error": "Ocorreu um erro HTTP: $1.",
- "apihelp-abusefiltercheckmatch-description": "Verifique se um filtro de abusos coincide com um conjunto de variáveis, evento do registo de abusos com editor registado.\n\nÉ necessário um dos seguintes: vars, rcid ou logid (só um pode ser usado).",
- "apihelp-abusefiltercheckmatch-summary": "Verifique se um filtro de abusos coincide com um conjunto de variáveis, evento do registo de abusos com editor registado.",
- "apihelp-abusefiltercheckmatch-extended-description": "É necessário um dos seguintes: vars, rcid ou logid (só um pode ser usado).",
- "apihelp-abusefiltercheckmatch-param-filter": "O texto completo do filtro para verificar a coincidência.",
- "apihelp-abusefiltercheckmatch-param-vars": "Matriz codificada JSON de variáveis para o teste.",
- "apihelp-abusefiltercheckmatch-param-rcid": "Identificador da mudança recente para testar.",
- "apihelp-abusefiltercheckmatch-param-logid": "Identificador do registo de abusos para testar.",
- "apihelp-abusefiltercheckmatch-example-1": "Testar se a mudança recente com o identificador 15 é detetada por um filtro simples",
- "apihelp-abusefilterchecksyntax-description": "Verificar a sintaxe de um filtro de abusos.",
- "apihelp-abusefilterchecksyntax-summary": "Verificar a sintaxe de um filtro de abusos.",
- "apihelp-abusefilterchecksyntax-param-filter": "O texto completo do filtro para verificar a sintaxe.",
- "apihelp-abusefilterchecksyntax-example-1": "Verificar a sintaxe de um filtro válido",
- "apihelp-abusefilterchecksyntax-example-2": "Verificar a sintaxe de um filtro inválido",
- "apihelp-abusefilterevalexpression-description": "Avalia uma expressão do filtro de abusos.",
- "apihelp-abusefilterevalexpression-summary": "Avalia uma expressão do filtro de abusos.",
- "apihelp-abusefilterevalexpression-param-expression": "A expressão para avaliar.",
- "apihelp-abusefilterevalexpression-example-1": "Avaliar uma expressão simples",
- "apihelp-abusefilterunblockautopromote-description": "Desbloqueia um utilizador de receber autopromoções em consequência do filtro de abusos.",
- "apihelp-abusefilterunblockautopromote-summary": "Desbloqueia um utilizador de receber autopromoções em consequência do filtro de abusos.",
- "apihelp-abusefilterunblockautopromote-param-user": "Nome do utilizador que pretende desbloquear.",
- "apihelp-abusefilterunblockautopromote-example-1": "Remover o bloqueio de autopromoção de [[User:Example]]",
- "apihelp-query+abusefilters-description": "Mostrar detalhes dos filtros de abuso.",
- "apihelp-query+abusefilters-summary": "Mostrar detalhes dos filtros de abuso.",
- "apihelp-query+abusefilters-param-startid": "O identificador do filtro onde será iniciada a enumeração.",
- "apihelp-query+abusefilters-param-endid": "O identificador do filtro onde será parada a enumeração.",
- "apihelp-query+abusefilters-param-show": "Mostrar só os filtros que preenchem estes critérios.",
- "apihelp-query+abusefilters-param-limit": "O número máximo de filtros que serão listados.",
- "apihelp-query+abusefilters-param-prop": "Que propriedades obter.",
- "apihelp-query+abusefilters-example-1": "Listar os filtros públicos ativos",
- "apihelp-query+abusefilters-example-2": "Mostrar alguns detalhes dos filtros",
- "apihelp-query+abuselog-description": "Mostrar os eventos que foram detetados por um dos filtros de abuso.",
- "apihelp-query+abuselog-summary": "Mostrar os eventos que foram detetados por um dos filtros de abuso.",
- "apihelp-query+abuselog-param-start": "A data e hora onde começar a enumeração.",
- "apihelp-query+abuselog-param-end": "A data e hora onde parar a enumeração.",
- "apihelp-query+abuselog-param-user": "Mostrar só as entradas de um determinado utilizador ou endereço IP.",
- "apihelp-query+abuselog-param-title": "Mostrar só as entradas de uma determinada página.",
- "apihelp-query+abuselog-param-filter": "Mostrar só as entradas que foram detetadas por um determinado identificador de filtro.",
- "apihelp-query+abuselog-param-limit": "O número máximo de entradas que serão listadas.",
- "apihelp-query+abuselog-param-prop": "Que propriedades obter.",
- "apihelp-query+abuselog-example-1": "Mostrar entradas recentes do registo",
- "apihelp-query+abuselog-example-2": "Mostrar entradas recentes do registo para [[API]]",
- "apierror-abusefilter-canttest": "Não tem permissão para testar filtros de abuso.",
- "apierror-abusefilter-cantcheck": "Não tem permissão para verificar a sintaxe de filtros de abuso.",
- "apierror-abusefilter-nosuchlogid": "Não há nenhuma entrada no registo de abusos com o identificador $1.",
- "apierror-abusefilter-badsyntax": "O filtro contém sintaxe inválida."
+ "abusefilter-view-private-submit": "Ver detalhes privados",
+ "abusefilter-view-private": "Ver detalhes privados",
+ "abusefilter-view-private-reason": "Motivo do acesso aos detalhes privados:",
+ "abusefilter-log-details-id": "Identificador do registo",
+ "abusefilter-invalid-request": "Pedido inválido! Deve aceder aos detalhes privados do registo através do formulário em [[Special:AbuseLog/$1]] e fornecer um motivo.",
+ "abusefilter-invalid-request-noid": "Pedido inválido! Deve aceder aos detalhes privados do registo através do formulário na página dos detalhes do registo de abusos e fornecer um motivo.",
+ "log-description-abusefilterprivatedetails": "Este registo mostra uma lista das vezes em que o utilizador consultou os detalhes privados de um registo de abusos.",
+ "abusefilter-noreason": "Aviso: Para ver os detalhes privados deste registo, deve fornecer um motivo.",
+ "abusefilter-log-ip-not-available": "Indisponível",
+ "abusefilter-tag-reserved": "O elemento <code>abusefilter-condition-limit</code> está reservado para uso interno pelo Filtro de Abusos.",
+ "tag-abusefilter-condition-limit": "limite de condições atingido",
+ "tag-abusefilter-condition-limit-description": "Edições ou outros acontecimentos que não puderam ser verificados por todos os [[Special:AbuseFilter|filtros de abuso]] ativos ([[mw:Extension:AbuseFilter/Conditions|ajuda]])."
}
diff --git a/AbuseFilter/i18n/qqq.json b/AbuseFilter/i18n/qqq.json
index 4b445ffb..69ac7e4c 100644
--- a/AbuseFilter/i18n/qqq.json
+++ b/AbuseFilter/i18n/qqq.json
@@ -33,14 +33,16 @@
"Liuxinyu970226",
"Legoktm",
"Pikne",
- "Amire80"
+ "Amire80",
+ "Ankam",
+ "Daimona Eaytoy"
]
},
"abusefilter-desc": "{{desc|name=Abuse Filter|url=https://www.mediawiki.org/wiki/Extension:AbuseFilter}}",
"abusefilter": "{{doc-special|AbuseFilter}}",
"abuselog": "{{doc-special|AbuseLog}}\n{{Identical|Abuse log}}",
"abusefilter-intro": "Introduction text for the list of filter rules.",
- "abusefilter-mustbeeditor": "\"No access\" message shown when a user does not have access rights.",
+ "abusefilter-mustviewprivateoredit": "\"No access\" message shown when a user does not have access rights.",
"abusefilter-warning": "A warning message shown when a user tries to save an edit which matches some abuse filter rule. Parameters:\n* $1 is a short description of the abuse filter rule which triggered this action\n* $2 is the filter id",
"abusefilter-disallowed": "Message given to user because of a triggered filter. Parameters:\n* $1 is a filter description\n* $2 is the filter id",
"abusefilter-blocked-display": "Message given to user because of a triggered filter. Parameters:\n* $1 is a filter description\n* $2 is the filter id",
@@ -55,6 +57,7 @@
"right-abusefilter-log": "{{doc-right|abusefilter-log}}",
"right-abusefilter-log-detail": "{{doc-right|abusefilter-log-detail}}",
"right-abusefilter-private": "{{doc-right|abusefilter-private}}",
+ "right-abusefilter-private-log": "{{doc-right|abusefilter-private-log}}",
"right-abusefilter-modify-restricted": "{{doc-right|abusefilter-modify-restricted}}",
"right-abusefilter-revert": "{{doc-right|abusefilter-revert}}",
"right-abusefilter-view-private": "{{doc-right|abusefilter-view-private}}",
@@ -67,6 +70,7 @@
"action-abusefilter-log": "{{doc-action|abusefilter-log}}",
"action-abusefilter-log-detail": "{{doc-action|abusefilter-log-detail}}",
"action-abusefilter-private": "{{doc-action|abusefilter-private}}",
+ "action-abusefilter-private-log": "{{doc-action|abusefilter-private-log}}",
"action-abusefilter-modify-restricted": "{{doc-action|abusefilter-modify-restricted}}",
"action-abusefilter-revert": "{{doc-action|abusefilter-revert}}",
"action-abusefilter-view-private": "{{doc-action|abusefilter-view-private}}",
@@ -78,10 +82,19 @@
"abusefilter-log-search-filter": "Field label in abuse filter log page.",
"abusefilter-log-search-title": "Field label in abuse filter log page.\n{{Identical|Title}}",
"abusefilter-log-search-wiki": "Label for text field that allows the user to limit search results to a specific wiki, by name.\n{{Identical|Wiki}}",
+ "abusefilter-log-search-impact": "Label for options allowing to filter abuse log by whether the action was actually saved.\n{{Identical|Impact}}",
+ "abusefilter-log-search-impact-all": "Option allowing to find all actions in abuse log.",
+ "abusefilter-log-search-impact-saved": "Option allowing to find saved changes only in abuse log.",
+ "abusefilter-log-search-impact-not-saved": "Option allowing to filter saved changes out from abuse log.",
"abusefilter-log-search-entries-label": "Label for options allowing to find entries with specified visibility.\n{{Identical|Visibility}}",
"abusefilter-log-search-entries-all": "Option allowing to find all entries in abuse log.",
"abusefilter-log-search-entries-hidden": "Option allowing to find hidden entries only in abuse log.",
"abusefilter-log-search-entries-visible": "Option allowing to find visible entries only in abuse log.",
+ "abusefilter-log-search-action-label": "Label for options allowing to find entries with specified action that triggered abuse filters.",
+ "abusefilter-log-search-action-other": "Option allowing to find all entries triggered by an unspecified action in abuse log.\n{{Identical|Other}}",
+ "abusefilter-log-search-action-any": "Option allowing to find any entry in abuse log.\n{{Identical|Any}}",
+ "abusefilter-log-search-action-taken-label": "Label for options allowing to find entries with specified action taken by abuse filters.",
+ "abusefilter-log-search-action-taken-any": "Option allowing to find any entry in abuse log.\n{{Identical|Any}}",
"abusefilter-log-search-submit": "Button text to search log in abuse filter log page.\n{{Identical|Search}}",
"abusefilter-log-entry": "This message is for a log entry. Parameters:\n* $1 - timestamp\n* $2 - user\n* $3 - action by user\n* $4 - link to page the action that triggered the filter was made on\n* $5 - actions taken by the filter\n* $6 - comments in filter description\n* $8 - raw username, for GENDER support\n{{Related|Abusefilter-log}}",
"abusefilter-log-entry-withdiff": "This message is for a log entry. Parameters:\n* $1 - timestamp\n* $2 - user\n* $3 - action by user\n* $4 - link to page the action that triggered the filter was made on\n* $5 - actions taken by the filter\n* $6 - comments in filter description\n* $7 - link to diff\n* $8 - raw username, for GENDER support\n{{Related|Abusefilter-log}}",
@@ -97,28 +110,40 @@
"abusefilter-log-details-vars": "Caption on a detail view of [[Special:AbuseLog]]",
"abusefilter-log-details-private": "Header for private log details.",
"abusefilter-log-details-ip": "Row label in private log details.",
+ "abusefilter-log-details-checkuser": "Text to use as link to [[Special:Checkuser]] for the given IP.\n{{Identical|Check user}}",
"abusefilter-log-noactions": "Text displayed in Special:AbuseLog when a rule was triggered, but no action was taken.\n{{Identical|None}}",
"abusefilter-log-details-diff": "Header for differences between two edits in log details.",
"abusefilter-log-linkoncontribs": "Link text added on [[Special:Contributions]] and other relevant special pages.\n{{Identical|Abuse log}}",
"abusefilter-log-linkoncontribs-text": "Title for link added on [[Special:Contributions]] and other relevant special pages. Parameters:\n* $1 is the target user name used for GENDER.",
+ "abusefilter-log-linkonhistory": "Link text added to the subtitle of the revision history page.",
+ "abusefilter-log-linkonhistory-text": "Title for link added to the subtitle of the revision history page.",
"abusefilter-log-hidden": "Text for a hidden log entry.",
"abusefilter-log-hidden-implicit": "Explanatory text to be shown beside an abuse filter log entry if it cannot be viewed due to its corresponding revision being hidden",
"abusefilter-log-cannot-see-details": "Message shown instead of log row details for users without permissions to see them.",
+ "abusefilter-log-cannot-see-private-details": "Message shown instead of log row private details for users without permissions to see them.",
"abusefilter-log-nonexistent": "Message shown instead of log row details when the provided log ID does not exist.",
"abusefilter-log-details-hidden": "Message shown instead of log row details when those are hidden.",
- "abusefilter-log-details-hidden-implicit": "Message shown instead of log row details when their associated revision is hidden.",
+ "abusefilter-log-details-hidden-implicit": "Message shown instead of log row details when their associated revision is hidden.",
"abusefilter-log-private-not-included": "Message shown when an unauthorized user searches by ID for private filters.",
"abusefilter-log-hide-legend": "Legend for form to hide a log entry.",
"abusefilter-log-hide-id": "Field label in form to hide a log entry.",
"abusefilter-log-hide-hidden": "Checkbox label in form to hide a log entry.",
"abusefilter-log-hide-reason": "{{Identical|Reason}}",
+ "abusefilter-log-hide-reason-other": "{{Identical|Other/additional reason}}",
"abusefilter-log-hide-forbidden": "Message shown instead of a \"hide log entry\" form when not having the correct user rights.",
- "abusefilter-logentry-suppress": "Log entry when hiding an abuse filter log entry. Parameters:\n* $1 is a link to the log ID with the log ID as description.",
- "abusefilter-logentry-unsuppress": "Log entry when unhiding an abuse filter log entry. Parameters:\n* $1 is a link to the log ID with the log ID as description.",
+ "abusefilter-log-entry-suppress": "Log entry when hiding an abuse filter log entry. Parameters:\n* $1 - a link to a user page with a user name as link text, followed by a series of related links\n* $2 - raw username, for GENDER support\n* $3 – a link to the log ID.",
+ "abusefilter-log-entry-unsuppress": "Log entry when unhiding an abuse filter log entry. Parameters:\n* $1 - a link to a user page with a user name as link text, followed by a series of related links\n* $2 - raw username, for GENDER support\n* $3 – a link to the log ID.",
"logentry-abusefilter-hit": "This message is for a log entry. Parameters:\n* $1 - user who performed the action\n* $2 - user who performed the action (to be used with GENDER)\n* $3 - link to the page, that the action that triggered the filter was made on\n* $4 - link to filter\n* $5 - action by user, like 'edit', 'move', 'create' etc.\n* $6 - actions taken by the filter\n* $7 - action details link",
+ "log-action-filter-abusefilter": "{{doc-log-action-filter-action|abusefilter}}",
+ "log-action-filter-abusefilter-create": "{{doc-log-action-filter-action|abusefilter|create}}",
+ "log-action-filter-abusefilter-modify": "{{doc-log-action-filter-action|abusefilter|modify}}",
+ "log-action-filter-suppress-abuselog": "{{doc-log-action-filter-action|suppress|abuselog}}",
+ "logentry-abusefilterprivatedetails-access": "This message is for a log entry. Parameters:\n* $1 User who accessed the private logs\n* $2 User who accessed the private logs (used for gender)\n* $3 The log entry of which private details were accessed",
+ "abusefilterprivatedetails-log-name": "Log name",
"abusefilter-management": "Title of [[Special:AbuseFilter]]",
"abusefilter-list": "Used as HTML <code><nowiki><h2></nowiki></code> heading.\n\nFollowed by the fieldset label {{msg-mw|Abusefilter-list-options}}.",
"abusefilter-list-id": "Column header in abuse filter overview for the filter identifier.\n{{Identical|Filter ID}}",
+ "abusefilter-list-pattern": "Column header in abuse filter overview for the filter pattern.\n{{Identical|Pattern}}",
"abusefilter-list-status": "Column header in abuse filter overview for the filter status.\n{{Identical|Status}}",
"abusefilter-list-public": "Column header in abuse filter overview for the public filter description.",
"abusefilter-list-consequences": "Column header in abuse filter overview for the filter consequences.",
@@ -134,6 +159,7 @@
"abusefilter-enabled": "Abuse filter status.\n{{Identical|Enabled}}",
"abusefilter-deleted": "Abuse filter status.\n{{Identical|Deleted}}",
"abusefilter-disabled": "Abuse filter status.\n{{Identical|Disabled}}",
+ "abusefilter-throttled": "Abuse filter status where some actions have been automatically disabled. See {{msg-mw|abusefilter-edit-throttled-warning}}",
"abusefilter-hitcount": "Indicates number of times an abuse filter was triggered. Parameters:\n* $1 is the number of hits.",
"abusefilter-new": "Link text for creating a new abuse filter.",
"abusefilter-return": "Link displayed when filtering abuse filters without results.",
@@ -147,8 +173,16 @@
"abusefilter-list-options-scope-local": "Radio button indicating that local rules should be shown.",
"abusefilter-list-options-scope-global": "Radio button indicating that global rules should be shown",
"abusefilter-list-options-scope-all": "Radio button indicating that local and global rules should be shown",
- "abusefilter-list-options-disabled": "Field label in filter form.",
- "abusefilter-list-options-hidedisabled": "Radio button label in filter form.",
+ "abusefilter-list-options-further-options": "Field label in filter form.",
+ "abusefilter-list-options-hidedisabled": "Checkbox label in filter form.",
+ "abusefilter-list-options-hideprivate": "Checkbox label in filter form.",
+ "abusefilter-list-options-searchfield": "Field label in filter form.",
+ "abusefilter-list-options-searchpattern": "Text input for search pattern",
+ "abusefilter-list-options-searchoptions": "Field label in filter form.",
+ "abusefilter-list-options-search-like": "Radio button label in filter form.",
+ "abusefilter-list-options-search-rlike": "Radio button label in filter form. See [[w:en:regular expression]]",
+ "abusefilter-list-options-search-irlike": "Radio button label in filter form. See [[w:en:regular expression]]",
+ "abusefilter-list-regexerror": "Error message text.",
"abusefilter-list-options-submit": "Submit button text in filter form to update a filtered list.\n{{Identical|Update}}",
"abusefilter-tools-text": "Introduction test for abuse filter tools.",
"abusefilter-tools-expr": "Fieldset legend for form to test a filter expression.",
@@ -163,6 +197,7 @@
"abusefilter-edit": "Page title when editing an abuse filter.",
"abusefilter-edit-subtitle": "Page subtitle when editing an abuse filter. Parameters:\n* $1 - filter ID\n* $2 - (Unused) history ID\nSee also:\n* {{msg-mw|Abusefilter-edit-subtitle-new}} - if the filter ID is \"new\".",
"abusefilter-edit-subtitle-new": "Page subtitle when creating an abuse filter. Parameters:\n* $1 - (Unused) filter ID\n* $2 - (Unused) history ID\nSee also:\n* {{msg-mw|Abusefilter-edit-subtitle}} - if editing the existing filter",
+ "abusefilter-edit-token-not-match": "Warning displayed when saving the filter didn't succeed.",
"abusefilter-edit-oldwarning": "Warning displayed when editing an older version of a filter. Parameters:\n* $1 - (Unused) history ID\n* $2 - filter ID",
"abusefilter-edit-status-label": "Field label for abuse filter statistics.\n{{Identical|Statistics}}",
"abusefilter-edit-status": "Parameters:\n* $1 - number of actions\n* $2 - matched count\n* $3 - matched percentage",
@@ -171,7 +206,9 @@
"abusefilter-edit-new": "Field value in case an edited filter is new.",
"abusefilter-edit-save": "Submit button text to save a filter.",
"abusefilter-edit-id": "Field label for filter identifier.\n{{Identical|Filter ID}}",
+ "abusefilter-edit-switch-editor": "Button to switch between classic editor and Ace editor",
"abusefilter-edit-description": "Field label for publicly viewable abuse filter description.",
+ "abusefilter-edit-field-description": "Name of the filter public description, to be used in error message.",
"abusefilter-edit-group": "\"Filter group\" a filter is in. Filters can be grouped, and only one group is run per action. The default group, \"default\", will be used in 99% of cases.",
"abusefilter-edit-flags": "Field label for abuse filter flags (checkboxes for \"hidden\", \"enabled\" and \"deleted\").\n{{Identical|Flag}}",
"abusefilter-edit-enabled": "Checkbox label for a filter flag.",
@@ -179,9 +216,10 @@
"abusefilter-edit-hidden": "Checkbox label for a filter flag.",
"abusefilter-edit-global": "Checkbox label for a filter flag.",
"abusefilter-edit-rules": "Field label for filter rules.\n{{Identical|Condition}}",
+ "abusefilter-edit-field-conditions": "Description for filter rules, to be used in error message.\n{{Identical|Condition}}",
"abusefilter-edit-notes": "Field label for filter notes.\n{{Identical|Note}}",
"abusefilter-edit-lastmod": "Field label for filter's last modified timestamp.",
- "abusefilter-edit-lastmod-text": "This message is used on [[Special:AbuseFilter]] to indicate the last modified date, time and user for existing rules.\n\nParameters:\n* $1 - a time and date (duplicated in $3 and $4)\n* $2 - a link to a user page with a user name as link text, followed by a series of related links\n* $3 - (Optional) the date\n* $4 - (Optional) the time\n* $5 - (Optional) the username, for GENDER support",
+ "abusefilter-edit-lastmod-text": "This message is used on [[Special:AbuseFilter]] to indicate the last modified date, time and user for existing rules.\n\nParameters:\n* $1 - a time and date (duplicated in $3 and $4), with link to the latest change\n* $2 - a link to a user page with a user name as link text, followed by a series of related links\n* $3 - (Optional) the date\n* $4 - (Optional) the time\n* $5 - (Optional) the username, for GENDER support",
"abusefilter-edit-hitcount": "Field label in edit rule form after which the number of filter hits is displayed.",
"abusefilter-edit-consequences": "Shown as the header of a section on the filter editing page, showing a list of checkboxes with different action names, and as the table header on the filter version differences page. Refers to a list of actions that will be triggered when an edit matches the filter.",
"abusefilter-edit-action-warn": "{{doc-abusefilter-action}}",
@@ -189,25 +227,50 @@
"abusefilter-edit-action-blockautopromote": "{{doc-abusefilter-action}}",
"abusefilter-edit-action-degroup": "{{doc-abusefilter-action}}",
"abusefilter-edit-action-block": "{{doc-abusefilter-action}}",
+ "abusefilter-edit-action-blocktalk": "{{doc-abusefilter-action}}",
"abusefilter-edit-action-throttle": "{{doc-abusefilter-action}}",
"abusefilter-edit-action-rangeblock": "{{doc-abusefilter-action}}",
"abusefilter-edit-action-tag": "{{doc-abusefilter-action}}",
"abusefilter-edit-throttle-count": "Field label for entering the number of allowed hits before triggering the filter consequences.",
- "abusefilter-edit-throttle-period": "Field label for entering a time period.",
- "abusefilter-edit-throttle-seconds": "Throttle period in seconds. Parameters:\n* $1 - a number of seconds\n{{Identical|Second}}",
+ "abusefilter-edit-throttle-period": "Field label for entering a time period in seconds.\n{{Identical|Second}}",
"abusefilter-edit-throttle-groups": "Field label for properties to group throttle counts by (for example IP address and username). Throttling is the concept of limiting occurrences of a certain action in a given time frame.",
+ "abusefilter-edit-throttle-hidden-placeholder": "Label for a textarea where users may insert throttling criteria.",
+ "abusefilter-edit-throttle-placeholder": "Label for an input field where users may insert throttling criteria.",
+ "abusefilter-throttle-ip": "Throttle option.",
+ "abusefilter-throttle-user": "Throttle option.",
+ "abusefilter-throttle-range": "Throttle option.",
+ "abusefilter-throttle-creationdate": "Throttle option.",
+ "abusefilter-throttle-editcount": "Throttle option.",
+ "abusefilter-throttle-site": "Throttle option.",
+ "abusefilter-throttle-page": "Throttle option.",
+ "abusefilter-throttle-details": "Description for Special:AbuseFilter/history with a detailed description for throttle action. Parameters:\n* $1 is the number of allowed actions, $2 is the time in seconds to use before resetting the action count, $3 is a list of throttled groups",
"abusefilter-edit-warn-message": "Field label for dropdown list with system messages.",
- "abusefilter-edit-warn-other": "Option in dropdown menu to specify no item from the list should be used.",
- "abusefilter-edit-warn-other-label": "Field label for entering a system message key to use as warning text.",
+ "abusefilter-edit-warn-other": "Option in dropdown menu to specify no item from the list should be used.\n\nSee also:\n* {{msg-mw|abusefilter-edit-disallow-other}}",
+ "abusefilter-edit-warn-other-label": "Field label for entering a system message key to use as warning text.\n\nSee also:\n* {{msg-mw|abusefilter-edit-disallow-other-label}}",
"abusefilter-edit-warn-actions": "Field label for two action buttons in abuse filter editor. The button texts are {{msg-mw|abusefilter-edit-warn-preview}} and {{msg-mw|abusefilter-edit-warn-edit}}.\n{{Identical|Action}}",
"abusefilter-edit-warn-preview": "Button text for actions relating to a warning message for an abuse filter.\n\nSee also:\n* {{msg-mw|Abusefilter-edit-warn-actions}}\n* {{msg-mw|Abusefilter-edit-warn-edit}}",
- "abusefilter-edit-warn-edit": "Button text for actions relating to a warning message for an abuse filter.\n\nSee also:\n* {{msg-mw|Abusefilter-edit-warn-actions}}\n* {{msg-mw|Abusefilter-edit-warn-preview}}",
- "abusefilter-edit-tag-tag": "Field label for multi line field in which tags can be added for a revision in case the abuse filter applies.",
+ "abusefilter-edit-warn-edit": "Button text for actions relating to a warning message for an abuse filter.\n\nSee also:\n* {{msg-mw|Abusefilter-edit-warn-actions}}\n* {{msg-mw|Abusefilter-edit-warn-preview}}\n* {{msg-mw|Abusefilter-edit-disallow-edit}}",
+ "abusefilter-edit-disallow-message": "Field label for dropdown list with system messages.\n\nSee also:\n* {{msg-mw|abusefilter-edit-warn-message}}",
+ "abusefilter-edit-disallow-other": "Option in dropdown menu to specify no item from the list should be used.\n\nSee also:\n* {{msg-mw|abusefilter-edit-warn-other}}",
+ "abusefilter-edit-disallow-other-label": "Field label for entering a system message key to use as disallow text.\n\nSee also:\n* {{msg-mw|Abusefilter-edit-warn-other-label}}",
+ "abusefilter-edit-disallow-actions": "Field label for two action buttons in abuse filter editor. The button texts are {{msg-mw|abusefilter-edit-disallow-preview}} and {{msg-mw|abusefilter-edit-disallow-edit}}.\n{{Identical|Action}}\nSee also:\n* {{msg-mw|abusefilter-edit-warn-actions}}",
+ "abusefilter-edit-disallow-preview": "Button text for actions relating to a warning message for an abuse filter.\n\nSee also:\n* {{msg-mw|Abusefilter-edit-disallow-actions}}\n* {{msg-mw|Abusefilter-edit-disallow-edit}}",
+ "abusefilter-edit-disallow-edit": "Button text for actions relating to a disallow message for an abuse filter.\n\nSee also:\n* {{msg-mw|Abusefilter-edit-disallow-actions}}\n* {{msg-mw|Abusefilter-edit-disallow-preview}}\n* {{msg-mw|Abusefilter-edit-warn-edit}}",
+ "abusefilter-edit-tag-tag": "Field label for a field in which tags can be added for a revision in case the abuse filter applies.",
+ "abusefilter-edit-tag-placeholder": "Placeholder for a field where the user may insert tags.",
+ "abusefilter-edit-tag-hidden-placeholder": "Placeholder for a field where the user may insert tags.",
+ "abusefilter-edit-block-anon-durations": "Field label for select element allowing to select block duration for anonymous users",
+ "abusefilter-edit-block-user-durations": "Field label for select element allowing to select block duration for registered users",
+ "abusefilter-block-anon": "Specification for type of block. 'Block' is a verb.\n{{Identical|Block}}",
+ "abusefilter-block-user": "Specification for type of block 'Block' is a verb.",
+ "abusefilter-block-talk": "Specification for type of block. See {{msg-mw|Blocklist-nousertalk}}",
"abusefilter-edit-denied": "Text used when a user has to access to filter details.",
"abusefilter-edit-main": "Fieldset legend for edit filter form.",
"abusefilter-edit-done-subtitle": "Page subtitle when as filter was edited and saved.",
"abusefilter-edit-done": "Text displayed to a user after editing a filter. Parameters:\n* $1 - a filter ID\n* $2 - the ID of the change itself\n* $3 - localized filter ID",
"abusefilter-edit-badsyntax": "Message to warn a user that a filter could not be edited for a given reason. Parameters:\n* $1 is a parser error text.",
+ "abusefilter-edit-missingfields": "Message to warn a user that a filter could not be edited for a given reason. Parameters:\n* $1 is a list of missing fields.",
+ "abusefilter-edit-deleting-enabled": "Message to warn a user that an active filter can't be marked as deleted",
"abusefilter-edit-restricted": "Message to warn a user that a filter could not be edited for a given reason.",
"abusefilter-edit-viewhistory": "Link description for link that leads to a revision overview for a filter.",
"abusefilter-edit-history": "Field label for {{msg-mw|abusefilter-edit-viewhistory}}.\n{{Identical|History}}",
@@ -223,6 +286,11 @@
"abusefilter-edit-notallowed": "Error message when trying to modify a filter while not allowed.",
"abusefilter-edit-notallowed-global": "Error message when trying to modify a global filter while not allowed.",
"abusefilter-edit-notallowed-global-custom-msg": "Error message when trying to add a custom warning message to a global filter, which is not allowed.",
+ "abusefilter-edit-invalid-throttlecount": "Error message when trying to provide an invalid action count for \"throttle\" action.",
+ "abusefilter-edit-invalid-throttleperiod": "Error message when trying to provide an invalid time period for \"throttle\" action.",
+ "abusefilter-edit-empty-throttlegroups": "Error message when trying to save a filter with \"throttle\" action enabled but no throttle groups selected.",
+ "abusefilter-edit-duplicated-throttlegroups": "Error message when trying to save a filter with \"throttle\" action enabled and duplicated throttle groups.",
+ "abusefilter-edit-invalid-throttlegroups": "Error message when trying to save a filter with \"throttle\" action enabled and invalid throttle groups.",
"abusefilter-edit-builder-select": "Default value for dropdown menu that allows inserting abuse filter syntax in the filter definition field.",
"abusefilter-edit-builder-group-op-arithmetic": "Group entry in dropdown menu.",
"abusefilter-edit-builder-op-arithmetic-addition": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-op-arithmetic}}.",
@@ -233,7 +301,9 @@
"abusefilter-edit-builder-op-arithmetic-pow": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-op-arithmetic}}.",
"abusefilter-edit-builder-group-op-comparison": "Group entry in dropdown menu.",
"abusefilter-edit-builder-op-comparison-equal": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-op-comparison}}.",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-op-comparison}}.",
"abusefilter-edit-builder-op-comparison-notequal": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-op-comparison}}.",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-op-comparison}}.",
"abusefilter-edit-builder-op-comparison-lt": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-op-comparison}}.\n{{Identical|Less than}}",
"abusefilter-edit-builder-op-comparison-gt": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-op-comparison}}.\n{{Identical|Greater than}}",
"abusefilter-edit-builder-op-comparison-lte": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-op-comparison}}.",
@@ -257,23 +327,30 @@
"abusefilter-edit-builder-funcs-lcase": "{{doc-important|Do not translate \"'''lcase'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-funcs-ucase": "{{doc-important|Do not translate \"'''ucase'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-funcs-ccnorm": "{{doc-important|Do not translate \"'''ccnorm'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "{{doc-important|Do not translate \"'''ccnorm_contains_any'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "{{doc-important|Do not translate \"'''ccnorm_contains_all'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-funcs-rmdoubles": "{{doc-important|Do not translate \"'''rmdoubles'''\".}}\nAbuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.\n\nFunctional explanation: rmdoubles removes repeated characters in the argument, and returns the result. For example: \"foobybboo\" will return \"fobybo\".",
"abusefilter-edit-builder-funcs-specialratio": "{{doc-important|Do not translate \"'''specialratio'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-funcs-norm": "{{doc-important|Do not translate \"'''norm'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-funcs-count": "{{doc-important|Do not translate \"'''count'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-funcs-rcount": "{{doc-important|Do not translate \"rcount\".}}\nAbuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.\n\n\"regex\" stands for \"regular expression\".",
+ "abusefilter-edit-builder-funcs-get_matches": "{{doc-important|Do not translate \"get_matches\"}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-funcs-rmwhitespace": "{{doc-important|Do not translate \"rmwhitespace\"}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-funcs-rmspecials": "{{doc-important|Do not translate \"'''rmspecials'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-funcs-ip_in_range": "{{doc-important|Do not translate \"'''ip_in_range'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-funcs-contains-any": "{{doc-important|Do not translate \"'''contains_any'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
+ "abusefilter-edit-builder-funcs-contains-all": "{{doc-important|Do not translate \"'''contains_all'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
+ "abusefilter-edit-builder-funcs-equals-to-any": "{{doc-important|Do not translate <code><nowiki>===</nowiki></code> and <code><nowiki>equals_to_any</nowiki></code> (but feel free to change brackets to reflect bracket rules of your language).}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-funcs-substr": "{{doc-important|Do not translate \"'''substr'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-funcs-strpos": "{{doc-important|Do not translate \"'''strpos'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-funcs-str_replace": "{{doc-important|Do not translate \"'''str_replace'''\".}} Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-funcs-rescape": "{{doc-important|Do not translate \"'''rescape'''\".}}\nAbuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.\n\n\"regex\" stands for \"regular expression\".",
"abusefilter-edit-builder-funcs-set_var": "{{doc-important|Do not translate \"'''set_var'''\".}}\nAbuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
+ "abusefilter-edit-builder-funcs-sanitize": "{{doc-important|Do not translate \"'''sanitize'''\".}}\nAbuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-funcs}}.",
"abusefilter-edit-builder-group-vars": "Group entry in dropdown menu.\n{{Identical|Variable}}",
"abusefilter-edit-builder-vars-accountname": "This variable is used only during account creation and contains the username of the newly created account. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-timestamp": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Label for the log timestamp (in expanded, human-readable form), shown in the private details of a log.",
"abusefilter-edit-builder-vars-action": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.\n{{Identical|Action}}",
"abusefilter-edit-builder-vars-addedlines": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-delta": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
@@ -284,19 +361,21 @@
"abusefilter-edit-builder-vars-new-content-model": "New content model of the page. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-removedlines": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-summary": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
- "abusefilter-edit-builder-vars-article-id": "Abuse filter syntax option in a dropdown from the group {{msg-mw|Abusefilter-edit-builder-group-vars}}.\n{{Identical|Page ID}}",
- "abusefilter-edit-builder-vars-article-ns": "The namespace that the page for the trigger is supposed to be in. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
- "abusefilter-edit-builder-vars-article-text": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
- "abusefilter-edit-builder-vars-article-views": "The number of views that the page has. May not be enabled on all wikis. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.\n{{Identical|Page view}}",
+ "abusefilter-edit-builder-vars-page-id": "Abuse filter syntax option in a dropdown from the group {{msg-mw|Abusefilter-edit-builder-group-vars}}.\n{{Identical|Page ID}}",
+ "abusefilter-edit-builder-vars-page-ns": "The namespace that the page for the trigger is supposed to be in. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-page-title": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-page-age": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-movedfrom-id": "Paraphrase: The page ID of the page to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
- "abusefilter-edit-builder-vars-movedfrom-ns": "Paraphrase: Namespace of the page that is to be moved.\n\nAbuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
- "abusefilter-edit-builder-vars-movedfrom-text": "Paraphrase: Name of the page that is to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Paraphrase: Full name of the page that is to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-movedfrom-ns": "Paraphrase: Namespace of the page that is to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Paraphrase: Name of the page that is to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Paraphrase: Full name of the page that is to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Paraphrase: The number of seconds since the first revision was made on the page that is to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-movedto-id": "Paraphrased: Page ID of the destination of the page that is to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-movedto-ns": "Paraphrased: Namespace of the destination of the page that is to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
- "abusefilter-edit-builder-vars-movedto-text": "Paraphrased: Name of the destination of the page that is to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Paraphrased: Full name of the destination of the page that is to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-movedto-title": "Paraphrased: Name of the destination of the page that is to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Paraphrased: Full name of the destination of the page that is to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-movedto-age": "Paraphrase: The number of seconds since the first revision was made on the destination of the page that is to be moved. Returns zero when page is non-existent. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-user-editcount": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-user-age": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-user-name": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
@@ -306,6 +385,10 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-recent-contributors": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-first-contributor": "Paraphrased: The user who created the earliest revision of the page. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Paraphrased: The user who created the earliest revision of the page that is to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Paraphrased: The user who created the earliest revision of the page that is to be moved. Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-all-links": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-added-links": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-removed-links": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
@@ -320,6 +403,14 @@
"abusefilter-edit-builder-vars-restrictions-move": "This variable contains the level of protection required to move the page. (\"Move\" here is not a verb, but an adjective, like \"Move-related protection level\"). Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.\n\nSee also {{msg-mw|Abusefilter-edit-builder-vars-restrictions-edit}}, {{msg-mw|Abusefilter-edit-builder-vars-restrictions-create}}, {{msg-mw|Abusefilter-edit-builder-vars-restrictions-upload}}.",
"abusefilter-edit-builder-vars-restrictions-create": "This variable contains the level of protection required to create the page. (\"Create\" here is not a verb, but an adjective, like \"Create-related protection level\"). Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.\n\nSee also {{msg-mw|Abusefilter-edit-builder-vars-restrictions-edit}}, {{msg-mw|Abusefilter-edit-builder-vars-restrictions-move}}, {{msg-mw|Abusefilter-edit-builder-vars-restrictions-upload}}.",
"abusefilter-edit-builder-vars-restrictions-upload": "This variable contains the level of protection required to upload a file. (\"Upload\" here is not a verb, but an adjective, like \"Upload-related protection level\"). Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.\n\nSee also {{msg-mw|Abusefilter-edit-builder-vars-restrictions-edit}}, {{msg-mw|Abusefilter-edit-builder-vars-restrictions-move}}, {{msg-mw|Abusefilter-edit-builder-vars-restrictions-create}}.",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "This variable contains the level of protection required to edit the page that is to be moved. (\"Edit\" here is not a verb, but an adjective, like \"Edit-related protection level\"). Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.\n\nSee also {{msg-mw|Abusefilter-edit-builder-vars-movedfrom-restrictions-create}}, {{msg-mw|Abusefilter-edit-builder-vars-movedfrom-restrictions-move}}, {{msg-mw|Abusefilter-edit-builder-vars-movedfrom-restrictions-upload}}.",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "This variable contains the level of protection required to move the page that is to be moved. (\"Move\" here is not a verb, but an adjective, like \"Move-related protection level\"). Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.\n\nSee also {{msg-mw|Abusefilter-edit-builder-vars-movedfrom-restrictions-edit}}, {{msg-mw|Abusefilter-edit-builder-vars-movedfrom-restrictions-create}}, {{msg-mw|Abusefilter-edit-builder-vars-movedfrom-restrictions-upload}}.",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "This variable contains the level of protection required to create the page that is to be moved. (\"Create\" here is not a verb, but an adjective, like \"Create-related protection level\"). Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.\n\nSee also {{msg-mw|Abusefilter-edit-builder-vars-movedfrom-restrictions-edit}}, {{msg-mw|Abusefilter-edit-builder-vars-movedfrom-restrictions-move}}, {{msg-mw|Abusefilter-edit-builder-vars-movedfrom-restrictions-upload}}.",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "This variable contains the level of protection required to upload the file that is to be moved. (\"Upload\" here is not a verb, but an adjective, like \"Upload-related protection level\"). Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.\n\nSee also {{msg-mw|Abusefilter-edit-builder-vars-movedfrom-restrictions-edit}}, {{msg-mw|Abusefilter-edit-builder-vars-movedfrom-restrictions-move}}, {{msg-mw|Abusefilter-edit-builder-vars-movedfrom-restrictions-create}}.",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "This variable contains the level of protection required to edit the page that is to be moved. (\"Edit\" here is not a verb, but an adjective, like \"Edit-related protection level\"). Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.\n\nSee also {{msg-mw|Abusefilter-edit-builder-vars-movedto-restrictions-create}}, {{msg-mw|Abusefilter-edit-builder-vars-movedto-restrictions-move}}, {{msg-mw|Abusefilter-edit-builder-vars-movedto-restrictions-upload}}.",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "This variable contains the level of protection required to move the page that is to be moved. (\"Move\" here is not a verb, but an adjective, like \"Move-related protection level\"). Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.\n\nSee also {{msg-mw|Abusefilter-edit-builder-vars-movedto-restrictions-edit}}, {{msg-mw|Abusefilter-edit-builder-vars-movedto-restrictions-create}}, {{msg-mw|Abusefilter-edit-builder-vars-movedto-restrictions-upload}}.",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "This variable contains the level of protection required to create the page that is to be moved. (\"Create\" here is not a verb, but an adjective, like \"Create-related protection level\"). Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.\n\nSee also {{msg-mw|Abusefilter-edit-builder-vars-movedto-restrictions-edit}}, {{msg-mw|Abusefilter-edit-builder-vars-movedto-restrictions-move}}, {{msg-mw|Abusefilter-edit-builder-vars-movedto-restrictions-upload}}.",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "This variable contains the level of protection required to upload the file that is to be moved. (\"Upload\" here is not a verb, but an adjective, like \"Upload-related protection level\"). Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.\n\nSee also {{msg-mw|Abusefilter-edit-builder-vars-movedto-restrictions-edit}}, {{msg-mw|Abusefilter-edit-builder-vars-movedto-restrictions-move}}, {{msg-mw|Abusefilter-edit-builder-vars-movedto-restrictions-create}}.",
"abusefilter-edit-builder-vars-old-text-stripped": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-old-links": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
"abusefilter-edit-builder-vars-old-html": "Abuse filter syntax option in a dropdown from the group {{msg-mw|abusefilter-edit-builder-group-vars}}.",
@@ -349,6 +440,7 @@
"abusefilter-history-filterid": "{{Identical|Filter}}",
"abusefilter-history-select-legend": "Used as legend on [[Special:AbuseFilter/history]]",
"abusefilter-history-select-user": "Used as label for the \"User\" input box. Field takes a username to filter events by.\n{{Identical|User}}",
+ "abusefilter-history-select-filter": "Used as label for the \"Filter ID\" input box. Field takes a filter id to filter events by.",
"abusefilter-history-select-submit": "Used as submit button on [[Special:AbuseFilter/history]]",
"abusefilter-history-diff": "{{Identical|Change}}",
"abusefilter-history-error-hidden": "Error message shown to user if the filter they are trying to view is hidden and they do not have permission to view it.",
@@ -359,14 +451,17 @@
"abusefilter-exception-unclosedstring": "Error message from the abuse filter parser.\nParameters:\n* $1 - Position in the string",
"abusefilter-exception-invalidoperator": "Error message from the abuse filter parser.\nParameters:\n* $1 - Position in the string\n* $2 - Invalid operator",
"abusefilter-exception-unrecognisedtoken": "Error message from the abuse filter parser.\nParameters:\n* $1 - Position in the string\n* $2 - Unrecognized token",
- "abusefilter-exception-noparams": "Error message from the abuse filter parser.\nParameters:\n* $1 - Position in the string\n* $2 - Function",
+ "abusefilter-exception-noparams": "Error message from the abuse filter parser.\nParameters:\n* $1 - Position in the string\n* $2 - Function\n* $3 - the number of expected arguments",
"abusefilter-exception-dividebyzero": "Error message from the abuse filter parser.\nParameters:\n* $1 - Position in the string\n* $2 - AFPData (integer or float?)",
"abusefilter-exception-unrecognisedvar": "Error message from the abuse filter parser. Parameters:\n* $1 - Position in the string\n* $2 - Unrecognized variable",
"abusefilter-exception-notenoughargs": "Error message from the abuse filter parser. Parameters:\n* $1 - position in the string (numeral)\n* $2 - a function name\n* $3 - the number of expected arguments\n* $4 - the number of passed arguments (also supports PLURAL)",
- "abusefilter-exception-regexfailure": "Error message from the abuse filter parser. Parameters:\n* $1 - Position in the string\n* $2 - Error message\n* $3 - Regular expression",
+ "abusefilter-exception-regexfailure": "Error message from the abuse filter parser. Parameters:\n* $1 - Position in the string\n* $2 - Regular expression",
"abusefilter-exception-overridebuiltin": "Error message from the abuse filter parser. Parameters:\n* $1 - Position in the string\n* $2 - Built-in variable",
- "abusefilter-exception-outofbounds": "Error message from the abuse filter parser. Parameters:\n* $1 - Position in the string\n* $2 - Index\n* $3 - Number of items in list",
- "abusefilter-exception-notlist": "Error message from the abuse filter parser. Parameters:\n* $1 - Position in the string",
+ "abusefilter-exception-outofbounds": "Error message from the abuse filter parser. Parameters:\n* $1 - Position in the string\n* $2 - Index\n* $3 - Number of items in array",
+ "abusefilter-exception-notarray": "Error message from the abuse filter parser. Parameters:\n* $1 - Position in the string",
+ "abusefilter-exception-unclosedcomment": "Error message from the abuse filter parser. Parameters:\n* $1 - Position in the string",
+ "abusefilter-exception-invalidiprange": "Error message from the abuse filter parser. Parameters:\n* $1 - Position in the string\n* $2 - String provided as an argument to a function",
+ "abusefilter-exception-disabledvar": "Error message from the abuse filter parser. Parameters:\n* $1 - Position in the string\n* $2 - Name of the disabled variable",
"abusefilter-action-tag": "{{doc-abusefilter-action}}\n\nThe edit or change can be 'tagged' with a particular tag, which will be shown on Recent Changes, contributions, logs, new pages, history, and everywhere else. \n\nThis is a verb in the imperative form.\n\n{{Identical|Tag}}",
"abusefilter-action-throttle": "{{doc-abusefilter-action}}",
"abusefilter-action-warn": "{{doc-abusefilter-action}}",
@@ -374,16 +469,17 @@
"abusefilter-action-block": "{{doc-abusefilter-action}}\n\nUsers matching the filter will be blocked indefinitely, with a descriptive block summary indicating the rule that was triggered.\n\nThis is a verb.\n{{Identical|Block}}",
"abusefilter-action-degroup": "{{doc-abusefilter-action}}\n\n'''Removing from privileged groups'''\n\nUsers matching the filter will be '''removed from all privileged groups''' (sysop, bureaucrat, etc). A descriptive summary will be used, detailing the rule that was triggered. \nAdditional information: https://www.mediawiki.org/wiki/Extension:AbuseFilter/Actions",
"abusefilter-action-rangeblock": "{{doc-abusefilter-action}}\n\n'''Range-block'''\n\nSomewhat of a 'nuclear option', the entire /16 range from which the rule was triggered will be blocked for 24 hours.\n\nThis is a verb in the imperative form.",
- "abusefilter-action-disallow": "{{doc-abusefilter-action}}\n\nTo '''disallow''' actions means that actions matching the filter will be '''prevented''', and a descriptive error message will be shown. Additional information: https://www.mediawiki.org/wiki/Extension:AbuseFilter/Actions",
+ "abusefilter-action-disallow": "{{doc-abusefilter-action}}\n\nTo '''disallow''' actions means that actions matching the filter will be '''prevented''', and a descriptive error message will be shown. Additional information: https://www.mediawiki.org/wiki/Extension:AbuseFilter/Actions\n{{Identical|Disallow}}",
"abusefilter-revert-title": "Used as page title of [[Special:AbuseFilter/revert/1]] (go to [[Special:AbuseFilter]], open a filter, click \"Revert actions taken by this filter\").\n\nParameters:\n* $1 - filter ID",
"abusefilter-revert-intro": "Parameters:\n* $1 - filter",
- "abusefilter-revert-preview-item": "Parameters:\n* $1 is a localised time and date\n* $2 is the linked user that made a change\n* $3 is the action\n* $4 is the page title of the page that was changed\n* $5 is a (localised) comma separated list of actions\n* $6 is link to the log details with {{msg-mw|abusefilter-log-detailslink}} as link description.\n* $7 is a raw username, which can be used for GENDER.",
+ "abusefilter-revert-preview-item": "Parameters:\n* $1 is a localised time and date\n* $2 is the linked user that made a change\n* $3 is the action (one of block, blockautopromote or degroup)\n* $4 is the page title of the page that was changed\n* $5 is a (localised) comma separated list of actions\n* $6 is link to the log details with {{msg-mw|abusefilter-log-detailslink}} as link description.\n* $7 is a raw username, which can be used for GENDER.",
"abusefilter-revert-search-legend": "Used as label on [[Special:AbuseFilter/revert]]",
"abusefilter-revert-periodstart": "Used as label on [[Special:AbuseFilter/revert]]",
"abusefilter-revert-periodend": "Used as label on [[Special:AbuseFilter/revert]]",
"abusefilter-revert-search": "Used as label on [[Special:AbuseFilter/revert]]",
- "abusefilter-revert-filter": "{{Identical|Filter}}",
+ "abusefilter-revert-filter": "{{Identical|Filter ID}}",
"abusefilter-revert-preview-intro": "Refers to {{msg-mw|Abusefilter-revert-confirm}}.",
+ "abusefilter-revert-confirm-legend": "Form fieldset for [[Special:AbuseFilter/revert]] asking the user to confirm the revert. Refers to {{msg-mw|Abusefilter-revert-confirm}}.",
"abusefilter-revert-confirm": "This is also used in {{msg-mw|Abusefilter-revert-preview-intro}}. When changing this message, please also remember to change that one.\n{{Identical|Confirm}}",
"abusefilter-revert-success": "Parameters:\n* $1 - a filter ID\n* $2 - localized filter ID",
"abusefilter-revert-reason": "Parameters:\n* $1 is a filter ID\n* $2 is a reason",
@@ -395,12 +491,20 @@
"abusefilter-test-submit": "Caption of the submit button on [[Special:AbuseFilter/test]].\n{{Identical|Test}}",
"abusefilter-test-load": "Text on a button, and referred to in {{msg-mw|abusefilter-test-intro}}\n{{Identical|Load}}",
"abusefilter-test-user": "Used as label on [[Special:AbuseFilter/test]]",
+ "abusefilter-test-nobots": "Used as label on [[Special:AbuseFilter/test]]",
"abusefilter-test-period-start": "Used as label on [[Special:AbuseFilter/test]]",
"abusefilter-test-period-end": "Used as label on [[Special:AbuseFilter/test]]",
"abusefilter-test-page": "Used as label on [[Special:AbuseFilter/test]]",
"abusefilter-test-shownegative": "Used as label on [[Special:AbuseFilter/test]]",
"abusefilter-test-syntaxerr": "Refers to {{msg-mw|Abusefilter-edit-check}}.",
"abusefilter-test-badtitle": "Message if a bad title is entered on [[Special:AbuseFilter/test]]",
+ "abusefilter-test-action": "Used as label on [[Special:AbuseFilter/test]]",
+ "abusefilter-test-search-type-all": "Option allowing to show every type of action.",
+ "abusefilter-test-search-type-edit": "Option allowing to only show edits.",
+ "abusefilter-test-search-type-move": "Option allowing to only show moves.",
+ "abusefilter-test-search-type-delete": "Option allowing to only show deletions.",
+ "abusefilter-test-search-type-upload": "Option allowing to only show uploads.",
+ "abusefilter-test-search-type-createaccount": "Option allowing to only show account creations.",
"abusefilter-changeslist-examine": "Used as link text on [[Special:AbuseFilter]]",
"abusefilter-examine": "Used as special page label",
"abusefilter-examine-intro": "Used as intro on [[Special:AbuseFilter/examine]]",
@@ -427,6 +531,7 @@
"abusefilter-topnav-import": "Used as link text in the navigation toolbar.\n\nThe link points to [[Special:AbuseLog]].",
"abusefilter-log-name": "{{doc-logpage}}",
"abusefilter-log-header": "Used as description on [[Special:Log/abusefilter]]",
+ "abusefilter-logentry-create": "Parameters:\n* $1 - a link to a user page with a user name as link text, followed by a series of related links\n* $2 - raw username, for GENDER support\n* $3 - (unused)\n* $4 - text {{msg-mw|abusefilter-log-detailedentry-local}} linked to the filter created\n* $5 - text {{msg-mw|abusefilter-log-detailslink}} linked to the filter change details\n{{Identical|Created}}",
"abusefilter-logentry-modify": "Parameters:\n* $1 - a link to a user page with a user name as link text, followed by a series of related links\n* $2 - raw username, for GENDER support\n* $3 - (unused)\n* $4 - text {{msg-mw|abusefilter-log-detailedentry-local}} linked to the modified filter\n* $5 - text {{msg-mw|abusefilter-log-detailslink}} linked to the filter change details",
"abusefilter-log-noresults": "{{Identical|No result}}",
"abusefilter-diff-title": "Similar to {{msg-mw|Difference}}",
@@ -442,49 +547,16 @@
"abusefilter-import-submit": "Used as label for the Submit button.\n\nPreceded by the textarea.\n\nUsed in:\n* {{msg-mw|Abusefilter-import-intro}}.",
"abusefilter-group-default": "The name for the default filter group. Most filters will be in this group.\n{{Identical|Default}}",
"abusefilter-http-error": "Error message for HTTP requests. Parameters:\n* $1 - HTTP response code.",
- "apihelp-abusefiltercheckmatch-description": "{{doc-apihelp-description|abusefiltercheckmatch}}",
- "apihelp-abusefiltercheckmatch-summary": "{{doc-apihelp-summary|abusefiltercheckmatch}}",
- "apihelp-abusefiltercheckmatch-extended-description": "{{doc-apihelp-extended-description|abusefiltercheckmatch}}",
- "apihelp-abusefiltercheckmatch-param-filter": "{{doc-apihelp-param|abusefiltercheckmatch|filter}}",
- "apihelp-abusefiltercheckmatch-param-vars": "{{doc-apihelp-param|abusefiltercheckmatch|vars}}",
- "apihelp-abusefiltercheckmatch-param-rcid": "{{doc-apihelp-param|abusefiltercheckmatch|rcid}}",
- "apihelp-abusefiltercheckmatch-param-logid": "The \"log ID\" is the numerical identifier of an entry in the log of the abuse filter extensions. \"Check against\" means said ID is used to control a check over abuse filter functioning related to the respective log entry.\n----\n{{doc-apihelp-param|abusefiltercheckmatch|logid}}",
- "apihelp-abusefiltercheckmatch-example-1": "{{doc-apihelp-example|abusefiltercheckmatch}}",
- "apihelp-abusefilterchecksyntax-description": "{{doc-apihelp-description|abusefilterchecksyntax}}",
- "apihelp-abusefilterchecksyntax-summary": "{{doc-apihelp-summary|abusefilterchecksyntax}}",
- "apihelp-abusefilterchecksyntax-param-filter": "{{doc-apihelp-param|abusefilterchecksyntax|filter}}",
- "apihelp-abusefilterchecksyntax-example-1": "{{doc-apihelp-example|abusefilterchecksyntax}}",
- "apihelp-abusefilterchecksyntax-example-2": "{{doc-apihelp-example|abusefilterchecksyntax}}",
- "apihelp-abusefilterevalexpression-description": "{{doc-apihelp-description|abusefilterevalexpression}}",
- "apihelp-abusefilterevalexpression-summary": "{{doc-apihelp-summary|abusefilterevalexpression}}",
- "apihelp-abusefilterevalexpression-param-expression": "{{doc-apihelp-param|abusefilterevalexpression|expression}}",
- "apihelp-abusefilterevalexpression-example-1": "{{doc-apihelp-example|abusefilterevalexpression}}",
- "apihelp-abusefilterunblockautopromote-description": "{{doc-apihelp-description|abusefilterunblockautopromote}}\n Autopromotion is an automatic system that gives rights to users when certain conditions are met.",
- "apihelp-abusefilterunblockautopromote-summary": "{{doc-apihelp-summary|abusefilterunblockautopromote}}\n Autopromotion is an automatic system that gives rights to users when certain conditions are met.",
- "apihelp-abusefilterunblockautopromote-param-user": "{{doc-apihelp-param|abusefilterunblockautopromote|user}}",
- "apihelp-abusefilterunblockautopromote-example-1": "{{doc-apihelp-example|abusefilterunblockautopromote}}\n Autopromotion is an automatic system that gives rights to users when certain conditions are met.",
- "apihelp-query+abusefilters-description": "{{doc-apihelp-description|query+abusefilters}}",
- "apihelp-query+abusefilters-summary": "{{doc-apihelp-summary|query+abusefilters}}",
- "apihelp-query+abusefilters-param-startid": "{{doc-apihelp-param|query+abusefilters|startid}}",
- "apihelp-query+abusefilters-param-endid": "{{doc-apihelp-param|query+abusefilters|endid}}",
- "apihelp-query+abusefilters-param-show": "{{doc-apihelp-param|query+abusefilters|show}}",
- "apihelp-query+abusefilters-param-limit": "{{doc-apihelp-param|query+abusefilters|limit}}",
- "apihelp-query+abusefilters-param-prop": "{{doc-apihelp-param|query+abusefilters|prop}}",
- "apihelp-query+abusefilters-example-1": "{{doc-apihelp-example|query+abusefilters}}",
- "apihelp-query+abusefilters-example-2": "{{doc-apihelp-example|query+abusefilters}}",
- "apihelp-query+abuselog-description": "{{doc-apihelp-description|query+abuselog}}",
- "apihelp-query+abuselog-summary": "{{doc-apihelp-summary|query+abuselog}}",
- "apihelp-query+abuselog-param-start": "{{doc-apihelp-param|query+abuselog|start}}",
- "apihelp-query+abuselog-param-end": "{{doc-apihelp-param|query+abuselog|end}}",
- "apihelp-query+abuselog-param-user": "{{doc-apihelp-param|query+abuselog|user}}",
- "apihelp-query+abuselog-param-title": "{{doc-apihelp-param|query+abuselog|title}}",
- "apihelp-query+abuselog-param-filter": "{{doc-apihelp-param|query+abuselog|filter}}",
- "apihelp-query+abuselog-param-limit": "{{doc-apihelp-param|query+abuselog|limit}}",
- "apihelp-query+abuselog-param-prop": "{{doc-apihelp-param|query+abuselog|prop}}",
- "apihelp-query+abuselog-example-1": "{{doc-apihelp-example|query+abuselog}}",
- "apihelp-query+abuselog-example-2": "{{doc-apihelp-example|query+abuselog}}",
- "apierror-abusefilter-canttest": "{{doc-apierror}}",
- "apierror-abusefilter-cantcheck": "{{doc-apierror}}",
- "apierror-abusefilter-nosuchlogid": "{{doc-apierror}}\n\nParameters:\n* $1 - AbuseFilter log ID number.",
- "apierror-abusefilter-badsyntax": "{{doc-apierror}}"
+ "abusefilter-view-private-submit": "Submit button label for viewing private details of an abuse log",
+ "abusefilter-view-private": "Legend for abuse filter log entry private details form.",
+ "abusefilter-view-private-reason": "Label for the textbox where the user enters the reason they are accessing private log details.",
+ "abusefilter-log-details-id": "Row label in private log details.",
+ "abusefilter-invalid-request": "Warning shown when accessing the private details page without submitting the form properly. Parameters:\n* $1 is the ID of the log requested.",
+ "abusefilter-invalid-request-noid": "Warning shown when accessing the private details page without a log ID parameter.",
+ "log-description-abusefilterprivatedetails": "The description of the abuse filter private details access log.",
+ "abusefilter-noreason": "Warning message shown when no reasons is given to access the private details of an abuse log.",
+ "abusefilter-log-ip-not-available": "Text shown when IP address is not available.\n{{Identical|Not available}}",
+ "abusefilter-tag-reserved": "Error message displayed on [[Special:Tags]] when a user attempts to manually create a change tag reserved by AbuseFilter.",
+ "tag-abusefilter-condition-limit": "Change tag for edits that reached the condition limit",
+ "tag-abusefilter-condition-limit-description": "Description for \"condition limit reached\" change tag"
}
diff --git a/AbuseFilter/i18n/ro.json b/AbuseFilter/i18n/ro.json
index 023d8958..467cae64 100644
--- a/AbuseFilter/i18n/ro.json
+++ b/AbuseFilter/i18n/ro.json
@@ -19,7 +19,6 @@
"abusefilter": "Configurare filtru de abuz",
"abuselog": "Jurnal abuzuri",
"abusefilter-intro": "Bun venit la interfața de gestionare a filtrului de abuzuri.\nFiltrul de abuzuri este un mecanism software automat care aplică euristici automate tuturor acțiunilor.\nAceastă interfață afișează o listă de filtre definite și permite modificarea acestora.",
- "abusefilter-mustbeeditor": "Din motive de securitate, doar utilizatorii cu drept de modificare a filtrelor de abuz pot utiliza această interfață.",
"abusefilter-warning": "'''Atenție:''' Această acțiune a fost identificată în mod automat ca fiind periculoasă.\nModificările neconstructive vor fi rapid înlăturate,\niar cele evident neconstructive și repetate vor avea ca efect blocarea contului sau adresei IP de la care vă conectați.\nDacă într-adevăr credeți că această acțiune este constructivă, o puteți retrimite pentru a o confirma.\nO descriere sumară a regulii abuzului care se potrivește acțiunii dumneavoastră este: $1",
"abusefilter-disallowed": "Această acțiune a fost identificată în mod automat ca fiind periculoasă, din acest motiv fiind refuzată.\nDacă într-adevăr credeți că acțiunea dumneavoastră a fost constructivă, vă rugăm să contactați un administrator și să-l informați despre ceea ce doriți să întreprindeți.\nO descriere sumară a regulii abuzului care se potrivește acțiunii dumneavoastră este: $1",
"abusefilter-blocked-display": "Această acțiune a fost identificată în mod automat ca fiind periculoasă;\ndrept urmare ați fost împiedicat să o executați.\nÎn plus, pentru a proteja {{SITENAME}}, contul dumneavoastră și toate adresele IP asociate acestuia au fost blocate de la modificare.\nDacă blocarea este eronată, vă rugăm să contactați un administrator.\nO descriere sumară a regulii abuzului care se potrivește acțiunii dumneavoastră este: $1",
@@ -56,8 +55,13 @@
"abusefilter-log-search-filter": "ID-uri filtre (separate prin bare verticale):",
"abusefilter-log-search-title": "Titlu:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-entries-label": "Vizibilitate:",
+ "abusefilter-log-search-entries-all": "Toate intrările",
+ "abusefilter-log-search-entries-hidden": "Doar intrările ascunse",
+ "abusefilter-log-search-entries-visible": "Doar intrările vizibile",
"abusefilter-log-search-submit": "Caută",
"abusefilter-log-entry": "$1: $2 a declanșat un filtru de abuz, executând acțiunea „$3” asupra paginii $4.\nMăsura luată: $5;\nDescrierea filtrului: $6",
+ "abusefilter-log-entry-withdiff": "$1: $2 a declanșat un filtru de abuz, executând acțiunea „$3” asupra paginii $4.\nMăsura luată: $5;\nDescrierea filtrului: $6 ($7)",
"abusefilter-log-detailedentry-meta": "$1: $2 a declanșat $3, executând acțiunea „$4” asupra paginii $5.\nMăsura luată: $6;\nDescrierea filtrului: $7 ($8)",
"abusefilter-log-detailedentry-global": "filtru global $1",
"abusefilter-log-detailedentry-local": "filtrul $1",
@@ -83,8 +87,6 @@
"abusefilter-log-hide-hidden": "Ascunde această intrare afișării publice",
"abusefilter-log-hide-reason": "Motiv:",
"abusefilter-log-hide-forbidden": "Nu aveți permisiunea să ascundeți intrările din jurnalul de abuzuri.",
- "abusefilter-logentry-suppress": "ascunde „[[$1]]”",
- "abusefilter-logentry-unsuppress": "dezvăluie „[[$1]]”",
"logentry-abusefilter-hit": "$1 a declanșat $4 prin efectuarea acțiunii „$5” la $3. Acțiuni întreprinse: $6 ($7)",
"abusefilter-management": "Administrare filtru abuz",
"abusefilter-list": "Toate filtrele",
@@ -117,7 +119,6 @@
"abusefilter-list-options-scope-local": "Doar reguli locale",
"abusefilter-list-options-scope-global": "Doar reguli globale",
"abusefilter-list-options-scope-all": "Reguli locale și globale",
- "abusefilter-list-options-disabled": "Filtre dezactivate:",
"abusefilter-list-options-hidedisabled": "Ascunde filtrele dezactivate",
"abusefilter-list-options-submit": "Actualizează",
"abusefilter-tools-text": "Aici sunt câteva unelte care pot fi utile în formularea și depanarea filtrelor abuz.",
@@ -137,7 +138,6 @@
"abusefilter-edit-status-label": "Statistici:",
"abusefilter-edit-status": "Din {{PLURAL:$1|ultima acțiune|ultimele $1 acțiuni| ultimele $1 de acțiuni}}, acest filtru a găsit $2 ($3%).",
"abusefilter-edit-status-profile": "Din {{PLURAL:$1|ultima acțiune|ultimele $1 acțiuni| ultimele $1 de acțiuni}}, acest filtru a găsit $2 ($3%).\nÎn medie, timpul său de rulare este de $4 ms și consumă $5 {{PLURAL:$5|condiție|condiții|de condiții}} ale limitei de condiții.",
- "abusefilter-edit-throttled": "'''Atenție''': Acest filtru a fost dezactivat automat ca o măsură de siguranță. A atins limita de potrivire la mai mult de $1% din acțiuni.",
"abusefilter-edit-new": "Filtru nou",
"abusefilter-edit-save": "Salvează filtru",
"abusefilter-edit-id": "ID filtru:",
@@ -156,7 +156,6 @@
"abusefilter-edit-consequences": "Acțiuni efectuate la detectare",
"abusefilter-edit-action-warn": "Declanșează aceste acțiuni după ce ai avertizat utilizatorul",
"abusefilter-edit-action-disallow": "Nu permite utilizatorului efectuarea acestei acțiuni",
- "abusefilter-edit-action-flag": "Semnalizează modificarea în jurnalul abuz",
"abusefilter-edit-action-blockautopromote": "Revocă statutul autoconfirmat al utilizatorului",
"abusefilter-edit-action-degroup": "Elimină utilizatorul din toate grupurile cu privilegii",
"abusefilter-edit-action-block": "Blochează utilizatorul și/sau adresa IP la modificare",
@@ -165,7 +164,6 @@
"abusefilter-edit-action-tag": "Marchează modificarea pentru revizuire ulterioară",
"abusefilter-edit-throttle-count": "Număr de acțiuni permise:",
"abusefilter-edit-throttle-period": "Perioadă de timp:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|secundă|secunde}}",
"abusefilter-edit-throttle-groups": "Grupează ?throttle? după:\n:''(una pe linie, despărțite prin virgule)''",
"abusefilter-edit-warn-message": "Mesaj de sistem de utilizat pentru avertizare:",
"abusefilter-edit-warn-other": "Alt mesaj",
@@ -251,19 +249,18 @@
"abusefilter-edit-builder-vars-oldsize": "Mărimea paginii vechi",
"abusefilter-edit-builder-vars-removedlines": "Linii eliminate în urma modificării",
"abusefilter-edit-builder-vars-summary": "Sumar modificare/motivare",
- "abusefilter-edit-builder-vars-article-id": "ID pagină",
- "abusefilter-edit-builder-vars-article-ns": "Spațiul de nume al paginii",
- "abusefilter-edit-builder-vars-article-text": "Titlul paginii (fără spațiu de nume)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Titlul complet al paginii",
- "abusefilter-edit-builder-vars-article-views": "Vizualizări ale paginii",
+ "abusefilter-edit-builder-vars-page-id": "ID pagină",
+ "abusefilter-edit-builder-vars-page-ns": "Spațiul de nume al paginii",
+ "abusefilter-edit-builder-vars-page-title": "Titlul paginii (fără spațiu de nume)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Titlul complet al paginii",
"abusefilter-edit-builder-vars-movedfrom-id": "ID-ul paginii sursă de redenumit",
"abusefilter-edit-builder-vars-movedfrom-ns": "Spațiul de nume al paginii sursă de redenumit",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titlul paginii sursă de redenumit",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Titlul complet al paginii sursă de redenumit",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titlul paginii sursă de redenumit",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Titlul complet al paginii sursă de redenumit",
"abusefilter-edit-builder-vars-movedto-id": "ID-ul paginii destinație",
"abusefilter-edit-builder-vars-movedto-ns": "Spațiul de nume al paginii destinație",
- "abusefilter-edit-builder-vars-movedto-text": "Titlul paginii destinație",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Titlul complet al paginii destinație",
+ "abusefilter-edit-builder-vars-movedto-title": "Titlul paginii destinație",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Titlul complet al paginii destinație",
"abusefilter-edit-builder-vars-user-editcount": "Numărul modificărilor utilizatorului",
"abusefilter-edit-builder-vars-user-age": "Vârsta contului utilizatorului",
"abusefilter-edit-builder-vars-user-name": "Numele contului de utilizator",
@@ -290,6 +287,9 @@
"abusefilter-edit-builder-vars-minor-edit": "Indiferent dacă modificarea este sau nu marcată ca minoră",
"abusefilter-edit-builder-vars-file-sha1": "Hash-ul SHA1 al conținutului fișierului",
"abusefilter-edit-builder-vars-file-size": "Dimensiunea fișierului în octeți",
+ "abusefilter-edit-builder-vars-file-mime": "Tipul MIME al fișierului",
+ "abusefilter-edit-builder-vars-file-width": "Lățimea fișierului în pixeli",
+ "abusefilter-edit-builder-vars-file-height": "Înălțimea fișierului în pixeli",
"abusefilter-filter-log": "Schimbări recente ale filtrului",
"abusefilter-history": "Istoricul modificărilor pentru Filtrul Abuz #$1",
"abusefilter-history-foruser": "Schimbări efectuate de $1",
@@ -325,7 +325,7 @@
"abusefilter-exception-regexfailure": "Eroare în expresia regulată „$3” la caracterul $1: „$2”",
"abusefilter-exception-overridebuiltin": "Folosire interzisă a variabilei disponibilă implicit „$2” la caracterul $1.",
"abusefilter-exception-outofbounds": "Se solicită elementul $2 inexistent în listă (mărimea listei = $3) la caracterul $1",
- "abusefilter-exception-notlist": "Se solicită un element al vectorului pentru ceva ce nu este vector la caracterul $1.",
+ "abusefilter-exception-notarray": "Se solicită un element al vectorului pentru ceva ce nu este vector la caracterul $1.",
"abusefilter-action-tag": "Etichetă",
"abusefilter-action-throttle": "Limitare",
"abusefilter-action-warn": "Avertizează",
@@ -386,7 +386,7 @@
"abusefilter-topnav-import": "Importă filtru",
"abusefilter-log-name": "Jurnal filtru abuz",
"abusefilter-log-header": "Acest jurnal afișează un rezumat de schimbări realizate de filtre.\nPentru informații complete, vedeți [[Special:AbuseFilter/history|lista]] cu schimbările ale filtrului recente.",
- "abusefilter-log-entry-modify": "a modificat $1 ($2)",
+ "abusefilter-logentry-modify": "$1 {{GENDER:$2|a modificat}} $4 ($5)",
"abusefilter-log-noresults": "Niciun rezultat",
"abusefilter-diff-title": "Diferențe între versiuni",
"abusefilter-diff-item": "Element",
@@ -400,12 +400,5 @@
"abusefilter-import-intro": "Puteți folosi această interfață pentru a importa filtre din alte wikiuri.\nÎn wikiul sursă, apăsați „{{int:abusefilter-edit-export}}” din „{{int:abusefilter-edit-tools}}”, în cadrul interfeței de editare.\nCopiați conținutul din caseta care apare și lipiți-l în această casetă de text, după care apăsați „{{int:abusefilter-import-submit}}”.",
"abusefilter-import-submit": "Importă datele",
"abusefilter-group-default": "Implicit",
- "abusefilter-http-error": "A apărut o eroare HTTP: $1.",
- "apihelp-abusefilterchecksyntax-description": "Verifică sintaxa unui filtru AbuseFilter.",
- "apihelp-abusefilterchecksyntax-param-filter": "Textul complet al filtrului pentru care trebuie verificată sintaxa.",
- "apihelp-abusefilterchecksyntax-example-1": "Verifică sintaxa unui filtru valid.",
- "apihelp-abusefilterchecksyntax-example-2": "Verifică sintaxa unui filtru invalid.",
- "apihelp-abusefilterevalexpression-description": "Evaluează valoarea unei expresii AbuseFilter.",
- "apihelp-abusefilterevalexpression-param-expression": "Expresia de evaluat.",
- "apihelp-abusefilterevalexpression-example-1": "Evaluează o expresie simplă"
+ "abusefilter-http-error": "A apărut o eroare HTTP: $1."
}
diff --git a/AbuseFilter/i18n/roa-tara.json b/AbuseFilter/i18n/roa-tara.json
index 66f5979b..fc886f0a 100644
--- a/AbuseFilter/i18n/roa-tara.json
+++ b/AbuseFilter/i18n/roa-tara.json
@@ -11,7 +11,7 @@
"abusefilter": "Configurazione d'u filtre de le abbuse",
"abuselog": "Archivie de l'abusaminde",
"abusefilter-intro": "Bovègne jndr'â gestione filtre abbuse de le 'nderfazze.\n'U filtre abbuse jè 'nu meccanisme software pè applechesce l'euristeche automateche a totte le aziune.\nQuèste 'nderfazze fàce vedè 'nu elenghe de filtre definite, e conzente a lòre de essere cangiate.",
- "abusefilter-mustbeeditor": "Pè raggione de sicurezze, sule le utinde cu 'u diritte de cangià le filtre abbuse pòtene ausà quèste 'nderfazze.",
+ "abusefilter-mustviewprivateoredit": "Pè mutive de sicurezze, sule le utinde cu 'u diritte de 'ndrucà le filtre abbuse private ponne ausà sta 'nderfacce.",
"abusefilter-warning": "'''Attenzione''': St'azione ha state automaticamende idendificate cumme pericolose.\nLe cangiaminde non costruttive onne state annullate veloce veloce, e le cangiaminde egregge o repetitive onna resultà sus a 'u cunde tune o l'indirizze IP ca adda avenè bloccate.\nCe tu cride ca st'azione éte costruttive, tu puè confermarle arrete.\n'Na descriziona veloce d'a regole de l'abbuse ca soddisfe l'aziona toje éte: $1",
"abusefilter-disallowed": "St'azione ha state automaticamende idendificate cumme pericolose e, allore non g'avène conzendite.\nCe tu cride ca l'aziona toje ere costruttive, pe piacere 'mborme 'n'amministratore de quidde ca tu ste pruvave a fà.\n'Na descrizione veloce d'a regole de l'abbuse sus 'a quale l'aziona toje s'ha scundrate: $1",
"abusefilter-blocked-display": "St'azione ha state automatecamende idendificate cumme pericolose,\ne tu è state bloccate da l'esecuziona soje.\nIn aggiundem pe proteggere {{SITENAME}}, 'u cunde utende tune e tutte le indirizze IP associate onne state bloccate pe le cangiaminde.\nCe quiste ca ha successe ha state 'n'errore, pe piacere condatte 'n'amministratore.\n'Na descrizione veloce de le regole de l'abbuse ca l'aziona toje s'ha scundrate jè: $1",
@@ -26,6 +26,7 @@
"right-abusefilter-log": "Vide l'archivije de le abbuse",
"right-abusefilter-log-detail": "Vide l'abbuse dettagliate de le vôsce de reggistre",
"right-abusefilter-private": "Vide le date private jndr'ô reggistre de le abbuse",
+ "right-abusefilter-private-log": "'Ndruche le dettaglie private d'u reggistre de le abbuse d'u filtre ande abbuse",
"right-abusefilter-modify-restricted": "Cangià le filtre de le abbuse cu aziune limitate",
"right-abusefilter-revert": "Annullà totte le cangiaminde da 'nu date filtre de le abbuse",
"right-abusefilter-view-private": "Vide le filtre de le abbuse ca sonde signate cumme private",
@@ -38,6 +39,7 @@
"action-abusefilter-log": "vide l'archivije de le abbuse",
"action-abusefilter-log-detail": "Vide l'abbuse dettagliate de le vôsce de l'archivije",
"action-abusefilter-private": "Vide le date private jndr'à ll'archivije de le abbuse",
+ "action-abusefilter-private-log": "'ndruche le dettaglie private d'u reggistre de le abbuse d'u filtre ande abbuse",
"action-abusefilter-modify-restricted": "Cangià le filtre de le abbuse, cu aziune limitate",
"action-abusefilter-revert": "Annullà totte le cangiaminde da 'nu date filtre de le abbuse",
"action-abusefilter-view-private": "Vide le filtre de le abbuse ca sonde signate cumme private",
@@ -49,10 +51,19 @@
"abusefilter-log-search-filter": "ID d'u filtre (separate da le |):",
"abusefilter-log-search-title": "Titele:",
"abusefilter-log-search-wiki": "Uicchi:",
+ "abusefilter-log-search-impact": "Imbatte:",
+ "abusefilter-log-search-impact-all": "Tutte le aziune",
+ "abusefilter-log-search-impact-saved": "Sulamende le cangiaminde reggistrate",
+ "abusefilter-log-search-impact-not-saved": "Senze le cangiaminde reggistrate",
"abusefilter-log-search-entries-label": "Visibbiletà",
"abusefilter-log-search-entries-all": "Tutte le vôsce",
"abusefilter-log-search-entries-hidden": "Scunne sulamende le vôsce",
"abusefilter-log-search-entries-visible": "Fà 'ndrucà sulamende le vôsce",
+ "abusefilter-log-search-action-label": "Azione fatte:",
+ "abusefilter-log-search-action-other": "Otre",
+ "abusefilter-log-search-action-any": "Tutte",
+ "abusefilter-log-search-action-taken-label": "Azione pigghiate:",
+ "abusefilter-log-search-action-taken-any": "Tutte",
"abusefilter-log-search-submit": "Cirche",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|innescate}} 'nu filtre de le abbuse, ca {{GENDER:$8|face}} l'azione \"$3\" sus a $4.\nAziune fatte: $5;\nDescriziune d'u filtre: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|scatenate}} da 'nu filtre de abbuse, {{GENDER:$8|combletanne}} l'azione \"$3\" sus a $4.\nAziune pigghiate: $5;\nDescrizione d'u filtre: $6 ($7)",
@@ -66,29 +77,40 @@
"abusefilter-log-details-var": "Variabbele",
"abusefilter-log-details-val": "Valore",
"abusefilter-log-details-vars": "Parametre de l'azione",
- "abusefilter-log-details-private": "Date private",
+ "abusefilter-log-details-private": "Dettaglie de l'archivije private",
"abusefilter-log-details-ip": "Inderizze IP origgenarie",
+ "abusefilter-log-details-checkuser": "Utende verificatore",
"abusefilter-log-noactions": "ninde",
"abusefilter-log-details-diff": "Cangiaminde fatte cu 'u cangiamende",
"abusefilter-log-linkoncontribs": "archivije de l'abbuse",
"abusefilter-log-linkoncontribs-text": "Archivije de l'abbuse pe {{GENDER:$1|stu utende}}",
+ "abusefilter-log-linkonhistory": "'ndruche l'archivije de le abbuse",
+ "abusefilter-log-linkonhistory-text": "'Ndruche l'archivie de l'abbuse pe sta pàgene",
"abusefilter-log-hidden": "(vôsce scunnute)",
"abusefilter-log-hidden-implicit": "(scunnute purcé le revisiune onne state scangellate)",
"abusefilter-log-cannot-see-details": "Tu non ge tìne 'u permesse pe 'ndrucà le dettaglie de sta vôsce.",
+ "abusefilter-log-cannot-see-private-details": "Tu non ge tìne 'u permesse pe 'ndrucà le dettaglie private de sta vôsce.",
"abusefilter-log-nonexistent": "'Na vôsce cu l'ID date non g'esiste.",
"abusefilter-log-details-hidden": "Tu non ge pòte vedè le dettaglie de quèste vôsce, piccè sonde scunnute da 'a viste d'u pubbleche.",
+ "abusefilter-log-details-hidden-implicit": "Non ge puè 'ndrucà le dettaglie pe sta vôsce, purcé 'a revisione associate jè scunnute da 'u 'ndrucamende pubbleche.",
"abusefilter-log-private-not-included": "Une o cchiù ID d'u filtre ca è specificate sò private. Siccome non ge tìne le permesse de 'ndrucà le dettaglie de le filtre private, chiste filtre non g'onne state cercate.",
"abusefilter-log-hide-legend": "Scunne le vôsce de l'archivije",
"abusefilter-log-hide-id": "Vôsce d'u reggistre ID:",
"abusefilter-log-hide-hidden": "Scunnere quèste vôsce d'a viste d'u pubbleche",
"abusefilter-log-hide-reason": "Mutive:",
+ "abusefilter-log-hide-reason-other": "Otre/addizionale mutive:",
"abusefilter-log-hide-forbidden": "Tu non ge tène 'u permesse de scunnere le vôsce de l'achivije de le abbuse.",
- "abusefilter-logentry-suppress": "scunne \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "fa vedè \"[[$1]]\"",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|ave scunnute}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|ave carecate}} $3",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|innescate}} $4, {{GENDER:$2|eseguenne}} l'azione \"$5\" sus a $3. Aziune pigghiate: $6 ($7)",
+ "log-action-filter-abusefilter": "Tipe de cangiamende d'u filtre:",
+ "log-action-filter-abusefilter-create": "Ccrejazione de 'nu filtre nuève",
+ "log-action-filter-abusefilter-modify": "Cangiamende d'u filtre",
+ "log-action-filter-suppress-abuselog": "Scangellazzione de l'archivije de le abbuse",
"abusefilter-management": "Gestione d'u filtre de le abbuse",
"abusefilter-list": "Tutte le filtre",
"abusefilter-list-id": "ID d'u filtre",
+ "abusefilter-list-pattern": "Pattern",
"abusefilter-list-status": "State",
"abusefilter-list-public": "Descriziona pubbleche",
"abusefilter-list-consequences": "Conseguenze",
@@ -104,6 +126,7 @@
"abusefilter-enabled": "Abbilitate",
"abusefilter-deleted": "Scangillete",
"abusefilter-disabled": "Disabbilitate",
+ "abusefilter-throttled": "aziune disattivate automaticamende",
"abusefilter-hitcount": "$1 {{PLURAL:$1|successe|successe}}",
"abusefilter-new": "Ccreje 'nu filtre nuève",
"abusefilter-return": "Tuèrne a 'a gestione de le filtre",
@@ -117,8 +140,15 @@
"abusefilter-list-options-scope-local": "Sulamende regole locale",
"abusefilter-list-options-scope-global": "Sulamende regole globbale",
"abusefilter-list-options-scope-all": "Regole locale e globbale",
- "abusefilter-list-options-disabled": "Filtre disabbilitate:",
+ "abusefilter-list-options-further-options": "Otre opziune",
"abusefilter-list-options-hidedisabled": "Scunne le filtre disabbilitate",
+ "abusefilter-list-options-hideprivate": "Scunne le filtre private",
+ "abusefilter-list-options-searchfield": "Cirche 'mbrà le regole:",
+ "abusefilter-list-options-searchpattern": "Mitte 'nu pattern",
+ "abusefilter-list-options-searchoptions": "Mode de recerche:",
+ "abusefilter-list-options-search-like": "'Nderrogazione semblice",
+ "abusefilter-list-options-search-rlike": "Espressione regolare",
+ "abusefilter-list-options-search-irlike": "Espressione regolare senze penzà a maiuscole e minuscole",
"abusefilter-list-options-submit": "Aggiorne",
"abusefilter-tools-text": "Aqquà se iacchiene quacche strumènde ca pòtene essere utile jndr'à formulazziune e jndr'ô debugging de le filtre de le abbuse.",
"abusefilter-tools-expr": "Test de le espressiune",
@@ -141,7 +171,9 @@
"abusefilter-edit-new": "Filtre nueve",
"abusefilter-edit-save": "Reggistre 'u filtre",
"abusefilter-edit-id": "ID d'u filtre:",
+ "abusefilter-edit-switch-editor": "Cange 'u cangiatore",
"abusefilter-edit-description": "Descrizione:\n:''(vesibbele pubblecamende)''",
+ "abusefilter-edit-field-description": "descrizione",
"abusefilter-edit-group": "Filtre de gruppe:",
"abusefilter-edit-flags": "Bandiere:",
"abusefilter-edit-enabled": "Abbilite stu filtre",
@@ -149,6 +181,7 @@
"abusefilter-edit-hidden": "Scunne le dettaglie de quiste filtre ad 'a viste d'u pubbleche",
"abusefilter-edit-global": "Filtre globbale",
"abusefilter-edit-rules": "Condiziune:",
+ "abusefilter-edit-field-conditions": "condiziune",
"abusefilter-edit-notes": "Note:",
"abusefilter-edit-lastmod": "Filtre l'urteme cangiate:",
"abusefilter-edit-lastmod-text": "$1 da $2",
@@ -160,19 +193,32 @@
"abusefilter-edit-action-degroup": "Luà l'utinde da totte le gruppe privilegiate",
"abusefilter-edit-action-block": "Blocche le utinde e/o le inderizze IP da l'editaziune",
"abusefilter-edit-action-throttle": "Attivà le aziune sule se l'utinde tène 'nu limite de percenduale",
- "abusefilter-edit-action-rangeblock": "Blocche 'u /16 cambe d'a quale l'utinde jè origgenarie",
+ "abusefilter-edit-action-rangeblock": "Blocche 'u rispettive 'ndervalle de IP de origgine de l'utende",
"abusefilter-edit-action-tag": "Tag de cangiaminde pè n'otre revisiune",
"abusefilter-edit-throttle-count": "Numere de aziune permesse:",
- "abusefilter-edit-throttle-period": "Periode de tiembe:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|'u seconde|le seconde}}",
- "abusefilter-edit-throttle-groups": "Gruppe throttle de:\n:''(une pè righe, combinate cu 'na virgole)''",
+ "abusefilter-edit-throttle-period": "Periode de tiembe (in seconde):",
+ "abusefilter-edit-throttle-groups": "Criterie de raggruppamende pe:",
+ "abusefilter-edit-throttle-ip": "Indirizze IP",
+ "abusefilter-edit-throttle-user": "Cunde de l'utende",
+ "abusefilter-edit-throttle-range": "Range /16",
+ "abusefilter-edit-throttle-editcount": "Condegge de le cangiaminde",
+ "abusefilter-edit-throttle-site": "Tutte 'u site",
+ "abusefilter-edit-throttle-page": "Pàgene",
"abusefilter-edit-warn-message": "Messagge de sisteme da ausà pè l'avvise:",
"abusefilter-edit-warn-other": "Otre messagge",
- "abusefilter-edit-warn-other-label": "Nome d'a paggene de n'otre mesagge:\n:''(senze prefisse MediaWiki)''",
+ "abusefilter-edit-warn-other-label": "Nome d'a paggene de n'otre mesagge:\n:''(senze prefisse ''MediaWiki:'')''",
"abusefilter-edit-warn-actions": "Aziune:",
- "abusefilter-edit-warn-preview": "Fa l'andeprime d'u messagge scacchiate",
+ "abusefilter-edit-warn-preview": "'Ndruche/Scunne l'andeprime d'u messagge scacchiate",
"abusefilter-edit-warn-edit": "Ccreje/Cange 'u messagge scacchiate",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Tag]] da applecà (une pè righe):",
+ "abusefilter-edit-disallow-message": "Messagge de sisteme da ausà pè 'u 'mbedimende:",
+ "abusefilter-edit-disallow-other": "Otre messagge",
+ "abusefilter-edit-disallow-other-label": "Nome d'a paggene de n'otre mesagge:\n:''(senze prefisse ''MediaWiki:'')''",
+ "abusefilter-edit-disallow-actions": "Aziune:",
+ "abusefilter-edit-disallow-preview": "'Ndruche/Scunne l'andeprime d'u messagge scacchiate",
+ "abusefilter-edit-disallow-edit": "Ccreje/Cange 'u messagge scacchiate",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Tag]] da applecà:",
+ "abusefilter-edit-tag-hidden-placeholder": "Aggiunge le tag (separate da le virgole)",
+ "abusefilter-block-user": "blocche le utinde reggistrate",
"abusefilter-edit-denied": "Non ge puè uardà le dettaglie de stu filtre, purcé jè scunnute da 'a viste d'u pubbleche.",
"abusefilter-edit-main": "Parametre d'u filtre",
"abusefilter-edit-done-subtitle": "Filtre cangiate",
@@ -202,8 +248,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Reste (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Putenze (**)",
"abusefilter-edit-builder-group-op-comparison": "Operatore de combronde",
- "abusefilter-edit-builder-op-comparison-equal": "Uguale a (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Diverse da (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Valore uguale a (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Valore e tipe uguale a (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Valore diverse da (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Valore e tipe diverse da (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Cchiù peccinne de (<)",
"abusefilter-edit-builder-op-comparison-gt": "Cchiù granne de (>)",
"abusefilter-edit-builder-op-comparison-lte": "cchiù piccine o uguale (<=)",
@@ -227,15 +275,19 @@
"abusefilter-edit-builder-funcs-lcase": "'U cchù vasce (lcase)",
"abusefilter-edit-builder-funcs-ucase": "Jndr'à maiuscole (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normalezzà le carattere ca se pòtene confonnere (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normalizze e cirche 'na stringhe jndr'à cchiù sottostringhe o cu 'u mode OR (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Normalizze e cirche 'na stringhe jndr'à cchiù sottostringhe o cu 'u mode AND (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Luà le carattere doppie (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Carattere speciale / carattere totale (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normalizze (norm)",
"abusefilter-edit-builder-funcs-count": "Numere de vote jndre cui 'a stringhe X se iacchie jndr'à stringhe Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Numere de vote jndre cui 'u regex X se iacchie jndr'à stringhe Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Matrice de corrispondenze de 'na regex a 'u 'nderne de 'nu teste pe ogne gruppe catturande (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Live le spazie vianghe (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Live le carattere speciale (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "L'IP stè jndr'à l'indervalle? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Stringhe de recerche pè cchiù sottestringhe (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Stringhe de recerche pè cchiù sottestringhe o cu 'u mode OR (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Stringhe de recerche pè cchiù sottestringhe o cu 'u mode AND (contains_all)",
"abusefilter-edit-builder-funcs-substr": "Sottostringhe (substr)",
"abusefilter-edit-builder-funcs-strpos": "Posiziune de sottostringhe in stringhe (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Cangià 'na sottostringhe cu 'na stringhe (str_replace)",
@@ -254,19 +306,18 @@
"abusefilter-edit-builder-vars-new-content-model": "Modelle nuéve de condenute",
"abusefilter-edit-builder-vars-removedlines": "Linee luàte cu 'nu cangiaminde",
"abusefilter-edit-builder-vars-summary": "Oggette d'u cangiaminde/raggione",
- "abusefilter-edit-builder-vars-article-id": "ID d'a pàgene",
- "abusefilter-edit-builder-vars-article-ns": "Namespace d'a pàgene",
- "abusefilter-edit-builder-vars-article-text": "Nome d'a pagene (senze namespace)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Titele comblete d'a pàgene",
- "abusefilter-edit-builder-vars-article-views": "Pàggene viste",
+ "abusefilter-edit-builder-vars-page-id": "ID d'a pàgene",
+ "abusefilter-edit-builder-vars-page-ns": "Namespace d'a pàgene",
+ "abusefilter-edit-builder-vars-page-title": "Nome d'a pagene (senze namespace)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Titele comblete d'a pàgene",
"abusefilter-edit-builder-vars-movedfrom-id": "Pagene ID pè mòvere 'a pagene de origgene",
"abusefilter-edit-builder-vars-movedfrom-ns": "Namespace pè mòvere 'a pagene de origgene",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titole pè mòvere 'a pagene de origgene",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Titole comblete pè mòvere 'a pagene de origgene",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titole pè mòvere 'a pagene de origgene",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Titole comblete pè mòvere 'a pagene de origgene",
"abusefilter-edit-builder-vars-movedto-id": "Pagene ID pè mòvere 'a pagene de destinaziune",
"abusefilter-edit-builder-vars-movedto-ns": " Namespace pè mòvere 'a pagene de destinaziune",
- "abusefilter-edit-builder-vars-movedto-text": "Titole pè mòvere 'a pagene de destinaziune",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Titole comblete pè mòvere 'a pagene de destinaziune",
+ "abusefilter-edit-builder-vars-movedto-title": "Titole pè mòvere 'a pagene de destinaziune",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Titole comblete pè mòvere 'a pagene de destinaziune",
"abusefilter-edit-builder-vars-user-editcount": "Cunde de le cangiaminde pe l'utende",
"abusefilter-edit-builder-vars-user-age": "Età d'u cunde utende",
"abusefilter-edit-builder-vars-user-name": "Nome d'u cunde utende",
@@ -279,7 +330,7 @@
"abusefilter-edit-builder-vars-all-links": "Totte le link esterne jndr'ô teste nuève",
"abusefilter-edit-builder-vars-added-links": "Totte le link esterne aggiunde jndr'à lle cangiaminde",
"abusefilter-edit-builder-vars-removed-links": "Totte le link esterne luàte jndr'à lle cangiaminde",
- "abusefilter-edit-builder-vars-old-text": "Vècchie pagene wikitext, prime de le cangiaminde",
+ "abusefilter-edit-builder-vars-old-text": "Vècchia pàgene uicchiteste, apprime d'u cangiamende (no cchiù ausate)",
"abusefilter-edit-builder-vars-new-text": "Nuève pagene wikitext, dope le cangiaminde",
"abusefilter-edit-builder-vars-new-pst": "Pàgena nove de uicchiteste, trasformate in pre-reggistrazione",
"abusefilter-edit-builder-vars-diff-pst": "Unifiche le differenze de le cangiaminde fatte da 'nu cangiamende, trasformate apprime d'a reggistrazione",
@@ -292,7 +343,7 @@
"abusefilter-edit-builder-vars-restrictions-upload": "Careche 'a protezzione d'u file",
"abusefilter-edit-builder-vars-old-text-stripped": "Teste d'a pagene vècchie, cu ogne markup luàte",
"abusefilter-edit-builder-vars-old-links": "Cullegaminde jndr'à pagene, prime de le cangiaminde",
- "abusefilter-edit-builder-vars-old-html": "Vècche pagene wikitext, analizzate sus HTML",
+ "abusefilter-edit-builder-vars-old-html": "Vècchia pàgene de uicchiteste, analizzate cu l'HTML (no cchiù ausate)",
"abusefilter-edit-builder-vars-minor-edit": "Ce o none ce 'u cangiaminde jè condrassignate cumme minore",
"abusefilter-edit-builder-vars-file-sha1": "SHA1 miskulanze d'u condenute de le file",
"abusefilter-edit-builder-vars-file-size": "Dimenzione d'u file in byte",
@@ -319,6 +370,7 @@
"abusefilter-history-filterid": "Filtre",
"abusefilter-history-select-legend": "Refenisce 'a ricerche",
"abusefilter-history-select-user": "Utende:",
+ "abusefilter-history-select-filter": "ID d'u filtre:",
"abusefilter-history-select-submit": "Refenisce",
"abusefilter-history-diff": "Cangiaminde",
"abusefilter-history-error-hidden": "'U filtre ce tu hàve rechieste jè scunnute, e tu non ge pòte vedè 'a storie soje.",
@@ -329,14 +381,14 @@
"abusefilter-exception-unclosedstring": "Stringhe ca non g'ète chiuse partenne da 'u carattere $1.",
"abusefilter-exception-invalidoperator": "Operatore invalide \"$2\" ad 'u carattere $1.",
"abusefilter-exception-unrecognisedtoken": "Signe non recanosciute \"$2\" ad 'u carattere $1.",
- "abusefilter-exception-noparams": "Nisciune parametre date da 'a funziune \"$2\" ad 'u carattere $1.",
+ "abusefilter-exception-noparams": "Nisciune parametre date da 'a funziune \"$2\" pu carattere $1.\nPreviste {{PLURAL:$3|'n argomende|$3 arguminde}}.",
"abusefilter-exception-dividebyzero": "Tendative illegale de scucchià $2 pè zere ad 'u carattere $1.",
"abusefilter-exception-unrecognisedvar": "Variabbele non recanosciute $2 ad 'u carattere $1",
"abusefilter-exception-notenoughargs": "Non ge stonne sufficiènde argumènde pè 'a funzune $2 chiamate ad 'u carattere $1.\nPreviste $3 {{PLURAL:$3|argumènde|argumènde}}, got $4",
- "abusefilter-exception-regexfailure": "Errore jndr'à ll'espressiune regolare\"$3\" ad 'u carattere $1: \"$2\"",
+ "abusefilter-exception-regexfailure": "Errore jndr'à l'espressione regolare \"$2\" ad 'u carattere $1.",
"abusefilter-exception-overridebuiltin": "Annullamènde illegale de variabbele 'ngorporate \"$2\" ad 'u carattere $1.",
- "abusefilter-exception-outofbounds": "Rechieste de 'na vôsce jndr'à ll'elenghe inesistende $2 (furmate liste = $3) ad 'u carattere $1.",
- "abusefilter-exception-notlist": "Rechieste de l'elemènde serie de non serie ad 'u carattere $1.",
+ "abusefilter-exception-outofbounds": "Rechieste de 'na vôsce jndr'à ll'elenghe inesistende $2 (lunghezze de l'elenghe = $3) pu carattere $1.",
+ "abusefilter-exception-notarray": "Rechieste de l'elemènde serie de non serie ad 'u carattere $1.",
"abusefilter-action-tag": "Tag",
"abusefilter-action-throttle": "Annullate",
"abusefilter-action-warn": "Avvertì",
@@ -352,7 +404,7 @@
"abusefilter-revert-periodstart": "Inizie d'u periode:",
"abusefilter-revert-periodend": "Fine d'u periode:",
"abusefilter-revert-search": "Scacchie l'aziune",
- "abusefilter-revert-filter": "Filtre:",
+ "abusefilter-revert-filter": "ID d'u filtre:",
"abusefilter-revert-preview-intro": "Aqquà abbasce stonne elengate le aziune combiute da 'u filtre de le abbuse ca onna essere repristenate da sta azione.\nPe piacere verifiche attentamènde, e cazze \"{{int:abusefilter-revert-confirm}}\" pe confermà 'a selezione.",
"abusefilter-revert-confirm": "Conferme",
"abusefilter-revert-success": " Tu hé repristenate totte le aziune combiute da 'u filtre de le abbuse a cause d'u [[Special:AbuseFilter/$1|filtre $2]].",
@@ -371,6 +423,11 @@
"abusefilter-test-shownegative": "Fàce vedè sule le cangiaminde ca non ge sonde correspondende ad 'u filtre",
"abusefilter-test-syntaxerr": "'U filtre ca tu é mise tène 'n'errore de sindasse.\nTu pòte avè 'na spiegazione comblete ce cazze 'u pulsande \"{{int:abusefilter-edit-check}}\".",
"abusefilter-test-badtitle": "'U titole d'a pàgene inserite ere invalide. Jidde pò tené une o cchiù carattere ca non ge ponne essere ausate jndr'à le titole.",
+ "abusefilter-test-search-type-edit": "Cangiaminde",
+ "abusefilter-test-search-type-move": "Spustaminde",
+ "abusefilter-test-search-type-delete": "Scangellaziune",
+ "abusefilter-test-search-type-upload": "Carecaminde",
+ "abusefilter-test-search-type-createaccount": "Ccrejaziune de cunde utinde",
"abusefilter-changeslist-examine": "esamine",
"abusefilter-examine": "Esamine le cangiaminde individuale",
"abusefilter-examine-intro": "Quèste pagene conzente de esaminà le variabbele generate da 'u filtre de le abbuse pè 'nu cangiaminde individuale, e prove jidde condre le filtre.",
@@ -397,6 +454,7 @@
"abusefilter-topnav-import": "'Mbortazione d'u filtre",
"abusefilter-log-name": "Archivije de le filtre de le abbuse",
"abusefilter-log-header": "Quiste reggistre fàce vedè 'nu elenghe de cangiaminde combiute da le filtre.\nPè avè cchiù dettaglie, vide [[Special:AbuseFilter/history|'a liste]] de le cangiaminde recende d'u filtre.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|ccrejate}} $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|cangiate}} $4 ($5)",
"abusefilter-log-noresults": "Nisciune resultate",
"abusefilter-diff-title": "Differenze 'mbrà versiune",
@@ -412,49 +470,5 @@
"abusefilter-import-submit": "'Mborte date",
"abusefilter-group-default": "De base",
"abusefilter-http-error": "Ha assute 'n'errore HTTP: $1.",
- "apihelp-abusefiltercheckmatch-description": "Verifiche ce 'nu AbuseFilter soddisfe 'nu 'nzieme de variabbile, avvenimende de cangiatore de AbuseFilter tracciate.\n\nvars, rcid o logid so obbligatorie comungue sulamende une adda essere ausate.",
- "apihelp-abusefiltercheckmatch-summary": "Condrolle de 'ndrucà ce 'nu AbuseFilter s'accocchie cu 'nu 'nzieme de variabbile, cangiatore loggate cumme fatte de AbuseFilter.",
- "apihelp-abusefiltercheckmatch-extended-description": "vars, rcid o logid jè obbligatorie e comungue sulamende une a vote se pò ausà.",
- "apihelp-abusefiltercheckmatch-param-filter": "'U filtre de teste chine da verificà pe 'nu combronde.",
- "apihelp-abusefiltercheckmatch-param-vars": "L'array de variabbile decodificate JSON da testà.",
- "apihelp-abusefiltercheckmatch-param-rcid": "Cangiaminde recende de l'ID da testà.",
- "apihelp-abusefiltercheckmatch-param-logid": "ID de l'archivije d'u filtre de abbuse da verificà.",
- "apihelp-abusefiltercheckmatch-example-1": "Teste ce 'u cangiamende recende de l'ID 15 soddisfe 'nu filtre facile-facile",
- "apihelp-abusefilterchecksyntax-description": "Verifiche 'a sindasse de 'nu filtre AbuseFilter.",
- "apihelp-abusefilterchecksyntax-summary": "Verifiche 'a sindasse de 'nu filtre AbuseFilter.",
- "apihelp-abusefilterchecksyntax-param-filter": "'U filtre de teste chine da verificà pa sindasse.",
- "apihelp-abusefilterchecksyntax-example-1": "Verifiche 'a sindasse de 'nu filtre valide",
- "apihelp-abusefilterchecksyntax-example-2": "Verifiche 'a sindasse de 'nu filtre invalide",
- "apihelp-abusefilterevalexpression-description": "Valute 'n'espressione de AbuseFilter.",
- "apihelp-abusefilterevalexpression-summary": "Valute 'n'espressione de AbuseFilter.",
- "apihelp-abusefilterevalexpression-param-expression": "L'espressione da valutà.",
- "apihelp-abusefilterevalexpression-example-1": "Valute 'n'espressione facile-facile",
- "apihelp-abusefilterunblockautopromote-description": "Sblocche 'n'utende da ricevere auto promozziune cumme conseguenze de 'nu filtre de abbuse.",
- "apihelp-abusefilterunblockautopromote-summary": "Sblocche 'n'utende da ricevere auto promozziune cumme conseguenze de 'nu filtre de abbuse.",
- "apihelp-abusefilterunblockautopromote-param-user": "Nome de l'utende ca vue ccù sblocche.",
- "apihelp-abusefilterunblockautopromote-example-1": "Live 'u blocche sus a l'autopromozzione de [[User:Example]]",
- "apihelp-query+abusefilters-description": "Fà vedè le dettaglie de le filtre de abbuse.",
- "apihelp-query+abusefilters-summary": "Fà 'ndrucà le dettaglie de le filtre de abbuse.",
- "apihelp-query+abusefilters-param-startid": "L'ID d'u filtre da addò accumenze l'enumerazione.",
- "apihelp-query+abusefilters-param-endid": "L'ID dìu filtre ca stoppe l'enumerazione.",
- "apihelp-query+abusefilters-param-show": "Fà vedè sulamende le filtre ca se iacchiane cu stu criterie.",
- "apihelp-query+abusefilters-param-limit": "'U numere massime de filtre da elengà.",
- "apihelp-query+abusefilters-param-prop": "Quale probbietà a pigghià.",
- "apihelp-query+abusefilters-example-1": "Elenghe de le filtre pubbleche abbilitate",
- "apihelp-query+abusefilters-example-2": "Fà vedè le dettaglie sus a le filtre",
- "apihelp-query+abuselog-description": "Fà vedè le avveneminde ca onne state azzecate da filtre de abbuse.",
- "apihelp-query+abuselog-summary": "Fà 'ndrucà le avveneminde ca onne state azzecate da filtre de abbuse.",
- "apihelp-query+abuselog-param-start": "L'orarie da addò accumenze l'enumerazione.",
- "apihelp-query+abuselog-param-end": "L'orarie ca stoppe l'enumerazione.",
- "apihelp-query+abuselog-param-user": "Fà vedè sulamende le vôsce fatte da 'nu date utende o indirizze IP.",
- "apihelp-query+abuselog-param-title": "Fà vedè sulamende le vôsce ca iessene sus a 'na data pàgene.",
- "apihelp-query+abuselog-param-filter": "Fà vedè sulamende le vôsce ca sò azzeccate da 'nu specifiche ID de filtre.",
- "apihelp-query+abuselog-param-limit": "'U numere massime de vôsce jndr'à l'elenghe.",
- "apihelp-query+abuselog-param-prop": "Quale probbietà a pigghià.",
- "apihelp-query+abuselog-example-1": "Fà vedè le vôsce de l'archivije recende",
- "apihelp-query+abuselog-example-2": "Fà vedè le vôsce de l'archivije recende pe [[API]]",
- "apierror-abusefilter-canttest": "Non ge tìne le permesse pe testà le filtre de abbuse.",
- "apierror-abusefilter-cantcheck": "Non ge tìne le permesse pe testà 'a sindasse de le filtre de abbuse.",
- "apierror-abusefilter-nosuchlogid": "Non ge stonne vôsce jndr'à l'archivije de le abbuse cu le id $1.",
- "apierror-abusefilter-badsyntax": "'U filtre tène 'na sindasse invalide."
+ "abusefilter-view-private-submit": "'Ndruche le dettaglie private"
}
diff --git a/AbuseFilter/i18n/ru.json b/AbuseFilter/i18n/ru.json
index 3bc45afe..61d3f4b1 100644
--- a/AbuseFilter/i18n/ru.json
+++ b/AbuseFilter/i18n/ru.json
@@ -26,28 +26,45 @@
"Cat1987",
"Туллук",
"Facenapalm",
- "Redredsonia"
+ "Redredsonia",
+ "Putnik",
+ "Smigles",
+ "Mouse21",
+ "Patrick Star",
+ "Happy13241",
+ "Jack who built the house",
+ "Ole Yves",
+ "Katunchik",
+ "Artsiom91",
+ "Movses",
+ "Abiyoyo",
+ "Ping08",
+ "Stjn",
+ "Vlad5250",
+ "MaxBioHazard",
+ "Shaleych"
]
},
"abusefilter-desc": "Позволяет применять автоматические эвристические фильтры к правкам",
"abusefilter": "Настройка фильтра злоупотреблений",
"abuselog": "Журнал злоупотреблений",
- "abusefilter-intro": "Добро пожаловать на страницу управления фильтром злоупотреблений.\nФильтр злоупотреблений представляет собой автоматизированный механизм применения эвристик к действиям участников.\nЗдесь приведён список всех установленных фильтров.",
- "abusefilter-mustbeeditor": "По соображениям безопасности, только участники с правом изменения фильтров злоупотреблений могут использовать этот интерфейс.",
- "abusefilter-warning": "'''Внимание'''. Данное действие было автоматически определено как нежелательное.\nНеконструктивные действия будут быстро отменены,\nгрубые или неоднократные неконструктивные правки приведут к блокировке вашей учётной записи или IP-адреса.\nЕсли вы уверены, что это конструктивное действие, вы можете нажать кнопку отправки или сохранения ещё раз.\nКраткое описание сработавшего фильтра, которому соответствовали ваши действия: $1",
- "abusefilter-disallowed": "Данное действие было автоматически определено как вредоносное, и потому запрещено.\nЕсли вы уверены, что это конструктивная правка, пожалуйста, обратитесь к администратору и расскажите, что вы собирались сделать.\nКраткое описание сработавшего фильтра, которому соответствовали ваши действия: $1",
- "abusefilter-blocked-display": "Данное действие было автоматически определено как вредоносное,\nвам было запрещено его выполнение.\nКроме того, в целях защиты {{grammar:genitive|{{SITENAME}}}}, ваша учётная запись и связанные с ней IP-адреса были заблокированы.\nЕсли вы видите в этом ошибку, пожалуйста, свяжитесь с администратором.\nКраткое описание сработавшего фильтра, которому соответствовали ваши действия: $1",
- "abusefilter-degrouped": "Данное действие было автоматически определено как вредоносное.\nДействие было отклонено; ваша учётная запись считается скомпрометированной, с неё сняты все права.\nЕсли вы считаете, что это ошибка, пожалуйста, свяжитесь с бюрократом и объясните ему ваши действия, тогда ваши права будут восстановлены.\nКраткое описание сработавшего фильтра, которому соответствовали ваши действия: $1",
- "abusefilter-autopromote-blocked": "Данное действие было автоматически определено как вредоносное и потому запрещено.\nКроме того, в целях безопасности с вашей учётной записи сняты некоторые привилегии, обычно предоставляемые зарегистрированным учётным записям.\nКраткое описание сработавшего фильтра, которому соответствовали ваши действия: $1",
+ "abusefilter-intro": "Добро пожаловать на страницу управления фильтром злоупотреблений.\nФильтр злоупотреблений представляет собой автоматизированный механизм применения эвристик к действиям участников.\nНиже приведён список всех установленных фильтров.",
+ "abusefilter-mustviewprivateoredit": "По соображениям безопасности, только участники с правом просмотра и изменения частных фильтров злоупотреблений могут использовать этот интерфейс.",
+ "abusefilter-warning": "'''Внимание'''. Данное действие было автоматически определено как нежелательное.\nНеконструктивные действия будут быстро отменены,\nгрубые или неоднократные неконструктивные правки приведут к блокировке вашей учётной записи или IP-адреса.\nЕсли вы уверены, что это конструктивное действие, вы можете нажать кнопку отправки или сохранения ещё раз.\nКраткое описание сработавшего фильтра: $1",
+ "abusefilter-disallowed": "Данное действие было автоматически определено как вредоносное, и потому запрещено.\nЕсли вы уверены, что это конструктивная правка, пожалуйста, обратитесь к администратору и расскажите, что вы собирались сделать.\nКраткое описание сработавшего фильтра: $1",
+ "abusefilter-blocked-display": "Данное действие было автоматически определено как вредоносное,\nвам было запрещено его выполнение.\nКроме того, в целях защиты {{grammar:genitive|{{SITENAME}}}}, ваша учётная запись и связанные с ней IP-адреса были заблокированы.\nЕсли вы видите в этом ошибку, пожалуйста, свяжитесь с администратором.\nКраткое описание сработавшего фильтра: $1",
+ "abusefilter-degrouped": "Данное действие было автоматически определено как вредоносное.\nДействие было отклонено; ваша учётная запись считается скомпрометированной, с неё сняты все права.\nЕсли вы считаете, что это ошибка, пожалуйста, свяжитесь с бюрократом и объясните ему ваши действия, тогда ваши права будут восстановлены.\nКраткое описание сработавшего фильтра: $1",
+ "abusefilter-autopromote-blocked": "Данное действие было автоматически определено как вредоносное и потому запрещено.\nКроме того, в целях безопасности с вашей учётной записи сняты некоторые привилегии, обычно предоставляемые зарегистрированным учётным записям.\nКраткое описание сработавшего фильтра: $1",
"abusefilter-blocker": "Фильтр злоупотреблений",
- "abusefilter-blockreason": "Автоматически заблокирован фильтром злоупотреблений. Описание соответствующего правила: $1",
- "abusefilter-degroupreason": "Фильтр злоупотреблений автоматически снял права. Описание правила: $1",
+ "abusefilter-blockreason": "Автоматически заблокирован фильтром злоупотреблений. Описание фильтра: $1",
+ "abusefilter-degroupreason": "Фильтр злоупотреблений автоматически снял права. Описание фильтра: $1",
"abusefilter-accountreserved": "Эта учётная запись зарезервирована для использования фильтром злоупотреблений.",
"right-abusefilter-modify": "изменение фильтров злоупотреблений",
"right-abusefilter-view": "просмотр фильтров злоупотреблений",
"right-abusefilter-log": "просмотр журнала злоупотреблений",
"right-abusefilter-log-detail": "просмотр подробностей в журнале фильтра злоупотреблений",
"right-abusefilter-private": "просмотр частных сведений в журнале злоупотреблений",
+ "right-abusefilter-private-log": "просмотр журнала доступа к личной информации фильтров злоупотребления",
"right-abusefilter-modify-restricted": "изменение ограничивающих фильтров злоупотреблений",
"right-abusefilter-revert": "откат изменений, произведённых фильтром злоупотреблений",
"right-abusefilter-view-private": "просмотр скрытых фильтров злоупотреблений",
@@ -60,6 +77,7 @@
"action-abusefilter-log": "просмотр журнала злоупотреблений",
"action-abusefilter-log-detail": "просматривать подробности журнала фильтра злоупотреблений",
"action-abusefilter-private": "просмотр личных данных в журнале злоупотреблений",
+ "action-abusefilter-private-log": "просмотреть журнал доступа к личной информации фильтр злоупотребления",
"action-abusefilter-modify-restricted": "изменять фильтры злоупотреблений с запрещающими действиями",
"action-abusefilter-revert": "отмена всех действий, выполненных фильтром злоупотреблений",
"action-abusefilter-view-private": "просмотр фильтров злоупотреблений, отмеченных как скрытые",
@@ -68,13 +86,22 @@
"abusefilter-log-summary": "В этом журнале представлен список всех действий, обнаруженных фильтрами.",
"abusefilter-log-search": "Поиск в журнале злоупотреблений",
"abusefilter-log-search-user": "Участник:",
- "abusefilter-log-search-filter": "ID фильтра (разделённые символом вертикальной линии):",
+ "abusefilter-log-search-filter": "ID фильтров (разделённые символом вертикальной линии):",
"abusefilter-log-search-title": "Заголовок:",
"abusefilter-log-search-wiki": "Википроект:",
+ "abusefilter-log-search-impact": "Влияние:",
+ "abusefilter-log-search-impact-all": "Все действия",
+ "abusefilter-log-search-impact-saved": "Только сохранённые изменения",
+ "abusefilter-log-search-impact-not-saved": "Только несохранённые изменения",
"abusefilter-log-search-entries-label": "Видимость:",
"abusefilter-log-search-entries-all": "Все записи",
"abusefilter-log-search-entries-hidden": "Только скрытые записи",
"abusefilter-log-search-entries-visible": "Только видимые записи",
+ "abusefilter-log-search-action-label": "Действие:",
+ "abusefilter-log-search-action-other": "Другое",
+ "abusefilter-log-search-action-any": "любое",
+ "abusefilter-log-search-action-taken-label": "Предпринятые меры:",
+ "abusefilter-log-search-action-taken-any": "Все",
"abusefilter-log-search-submit": "Найти",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|вызвал|вызвала}} срабатывание фильтра злоупотреблений, выполнив действие «$3» на странице $4.\nПредпринятые меры: $5;\nОписание фильтра: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|вызвал|вызвала}} срабатывание фильтра злоупотреблений, выполнив действие «$3» на странице $4.\nПредпринятые меры: $5;\nОписание фильтра: $6 ($7)",
@@ -88,29 +115,42 @@
"abusefilter-log-details-var": "Переменная",
"abusefilter-log-details-val": "Значение",
"abusefilter-log-details-vars": "Параметры действия",
- "abusefilter-log-details-private": "Приватные данные",
+ "abusefilter-log-details-private": "Скрытые данные журнала",
"abusefilter-log-details-ip": "Исходящий IP-адрес",
+ "abusefilter-log-details-checkuser": "Проверить участника",
"abusefilter-log-noactions": "нет",
"abusefilter-log-details-diff": "Изменения, сделанные в правке",
"abusefilter-log-linkoncontribs": "журнал злоупотреблений",
"abusefilter-log-linkoncontribs-text": "Записи журнала злоупотреблений для {{GENDER:$1|этого участника|этой участницы}}",
+ "abusefilter-log-linkonhistory": "просмотр журнала фильтров",
+ "abusefilter-log-linkonhistory-text": "Показать журналы злоупотреблений для этой страницы",
"abusefilter-log-hidden": "(запись скрыта)",
"abusefilter-log-hidden-implicit": "(скрыто, так как правка была удалена)",
"abusefilter-log-cannot-see-details": "У вас нет разрешения на просмотр подробностей этой записи.",
+ "abusefilter-log-cannot-see-private-details": "У вас нет разрешения просматривать личные данные этой записи.",
"abusefilter-log-nonexistent": "Записи с указанным ID не существует.",
"abusefilter-log-details-hidden": "Вы не можете просмотреть подробности этой записи, поскольку она была скрыта.",
- "abusefilter-log-private-not-included": "Один или несколько идентификаторов фильтра, заданых вами, являются частными. Поскольку вы не можете просматривать сведения частных фильтров, эти фильтры не будут использованы при поиске.",
- "abusefilter-log-hide-legend": "Скрыть запись в журнале",
+ "abusefilter-log-details-hidden-implicit": "Вы не можете просмотреть подробности этой записи, поскольку соответствующая ей версия была скрыта.",
+ "abusefilter-log-private-not-included": "Один или несколько заданных вами идентификатора принадлежать скрытым фильтрам. Поскольку вы не можете просматривать скрытые фильтры, они не будут отображены в поиске.",
+ "abusefilter-log-hide-legend": "Скрыть запись журнала",
"abusefilter-log-hide-id": "ID записи журнала:",
"abusefilter-log-hide-hidden": "Скрыть эту запись от публичного просмотра",
"abusefilter-log-hide-reason": "Причина:",
+ "abusefilter-log-hide-reason-other": "Другая/дополнительная причина:",
"abusefilter-log-hide-forbidden": "У вас нет разрешения на сокрытие\nзаписей журнала злоупотреблений.",
- "abusefilter-logentry-suppress": "скрыть [[$1]]",
- "abusefilter-logentry-unsuppress": "показать [[$1]]",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|скрыл|скрыла}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|открыл|открыла}} $3",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|вызвал|вызвала}} срабатывание фильтра $4, выполнив действие «$5» на странице $3. Предпринятые меры: $6 ($7)",
+ "log-action-filter-abusefilter": "Тип смены фильтра:",
+ "log-action-filter-abusefilter-create": "Создание нового фильтра",
+ "log-action-filter-abusefilter-modify": "Изменение фильтра",
+ "log-action-filter-suppress-abuselog": "Подавление журнала злоупотреблений",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|доступ к}} личные данные для $3",
+ "abusefilterprivatedetails-log-name": "Журнал доступа к конфиденциальным данным фильтр злоупотребления",
"abusefilter-management": "Управление фильтром злоупотреблений",
"abusefilter-list": "Все фильтры",
"abusefilter-list-id": "ID фильтра",
+ "abusefilter-list-pattern": "Паттерн",
"abusefilter-list-status": "Состояние",
"abusefilter-list-public": "Общедоступное описание",
"abusefilter-list-consequences": "Последствия",
@@ -122,7 +162,7 @@
"abusefilter-list-lastmodified": "Последнее изменение",
"abusefilter-list-group": "Группа фильтра",
"abusefilter-hidden": "Скрытый",
- "abusefilter-unhidden": "Общедоступное",
+ "abusefilter-unhidden": "Общедоступный",
"abusefilter-enabled": "Включён",
"abusefilter-deleted": "Удалён",
"abusefilter-disabled": "Выключен",
@@ -139,8 +179,16 @@
"abusefilter-list-options-scope-local": "Только локальные правила",
"abusefilter-list-options-scope-global": "Только глобальные правила",
"abusefilter-list-options-scope-all": "Локальные и глобальные правила",
- "abusefilter-list-options-disabled": "Отключённые фильтры:",
+ "abusefilter-list-options-further-options": "Другие настройки:",
"abusefilter-list-options-hidedisabled": "Скрыть отключённые фильтры",
+ "abusefilter-list-options-hideprivate": "Скрыть приватные фильтры",
+ "abusefilter-list-options-searchfield": "Найти среди правил:",
+ "abusefilter-list-options-searchpattern": "Вставить паттерн",
+ "abusefilter-list-options-searchoptions": "Режим поиска:",
+ "abusefilter-list-options-search-like": "Простой запрос",
+ "abusefilter-list-options-search-rlike": "Регулярное выражение",
+ "abusefilter-list-options-search-irlike": "Нечувствительное к регистру регулярное выражение",
+ "abusefilter-list-regexerror": "Во время поиска произошла ошибка: Синтаксическая ошибка регулярного выражения.",
"abusefilter-list-options-submit": "Обновить",
"abusefilter-tools-text": "Здесь находятся некоторые инструменты, которые могут помочь в формулировании и отладке фильтров злоупотреблений.",
"abusefilter-tools-expr": "Проверка выражения",
@@ -155,15 +203,18 @@
"abusefilter-edit": "Править фильтр злоупотреблений",
"abusefilter-edit-subtitle": "Изменение фильтра $1",
"abusefilter-edit-subtitle-new": "Создание фильтра",
+ "abusefilter-edit-token-not-match": "Ваша правка не сохранена! Попробуйте ещё раз.",
"abusefilter-edit-oldwarning": "<strong>Вы правите старую версию фильтра. Статистика приводится для последней версии фильтра. Если вы сохраните вашу правку, то вы перезапишите сделанные ранее изменения.</strong> &bull; [[Special:AbuseFilter/history/$2|Вернуться к странице истории фильтра]]",
"abusefilter-edit-status-label": "Статистика:",
"abusefilter-edit-status": "Из {{PLURAL:$1|последнего $1 действия|последних $1 действий}}, этот фильтр соответствует $2 ($3%).",
"abusefilter-edit-status-profile": "Из {{PLURAL:$1|последнего $1 действия|последних $1 действий}}, этот фильтр соответствует $2 ($3%).\nСреднее время его работы — $4 мс, он использует $5 {{PLURAL:$5|условие|условий|условия}} из лимита условий.",
- "abusefilter-edit-throttled": "'''Предупреждение.''' Этот фильтр был автоматически отключён в качестве меры предосторожности. Процент его срабатываний превысил $1 % от всех действий.",
+ "abusefilter-edit-throttled-warning": "'''Внимание:''' Этот фильтр автоматически помечен как вредный. В качестве меры безопасности следующие действия не будут выполнены ($1). Пожалуйста, проверьте и [[mw:Extension:AbuseFilter/Conditions|оптимизируйте]] ваши условия, чтобы удалить это ограничение",
"abusefilter-edit-new": "Новый фильтр",
"abusefilter-edit-save": "Сохранить фильтр",
"abusefilter-edit-id": "ID фильтра:",
+ "abusefilter-edit-switch-editor": "Переключить редактор",
"abusefilter-edit-description": "Описание:\n:''(общедоступное)''",
+ "abusefilter-edit-field-description": "описание",
"abusefilter-edit-group": "Группа фильтра:",
"abusefilter-edit-flags": "Флаги:",
"abusefilter-edit-enabled": "Включить этот фильтр",
@@ -171,6 +222,7 @@
"abusefilter-edit-hidden": "Скрыть подробности этого фильтра от обычных участников",
"abusefilter-edit-global": "Глобальный фильтр",
"abusefilter-edit-rules": "Условия:",
+ "abusefilter-edit-field-conditions": "условия",
"abusefilter-edit-notes": "Примечания:",
"abusefilter-edit-lastmod": "Последнее изменение фильтра:",
"abusefilter-edit-lastmod-text": "$1 — $2",
@@ -181,25 +233,46 @@
"abusefilter-edit-action-blockautopromote": "Снять с участника статус автоподтверждения",
"abusefilter-edit-action-degroup": "Исключить участника из всех привилегированных групп",
"abusefilter-edit-action-block": "Заблокировать участника или IP-адрес",
+ "abusefilter-edit-action-blocktalk": "Блокировать пользователя и/или IP-адрес от редактирования собственной страницы обсуждения",
"abusefilter-edit-action-throttle": "Применять меры только если участник превышает предел",
- "abusefilter-edit-action-rangeblock": "Блокировать диапазон /16, из которого работает участник.",
+ "abusefilter-edit-action-rangeblock": "Блокировать соответствующий диапазон, из которого работает участник.",
"abusefilter-edit-action-tag": "Отметить правку для дальнейшей проверки",
"abusefilter-edit-throttle-count": "Количество разрешённых действий:",
- "abusefilter-edit-throttle-period": "Отрезок времени:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
- "abusefilter-edit-throttle-groups": "Сужение по группам:\n:''(по одному на строке, соединения запятыми)''",
+ "abusefilter-edit-throttle-period": "Отрезок времени (в секундах):",
+ "abusefilter-edit-throttle-groups": "Сужение по группам:\n''(по одному на строке, разделение запятыми)''",
+ "abusefilter-edit-throttle-ip": "IP-адрес",
+ "abusefilter-edit-throttle-user": "Учётная запись",
+ "abusefilter-edit-throttle-range": "Диапазон /16",
+ "abusefilter-edit-throttle-creationdate": "Серверное время регистрации",
+ "abusefilter-edit-throttle-editcount": "Счётчик правок",
+ "abusefilter-edit-throttle-site": "Весь сайт",
+ "abusefilter-edit-throttle-page": "Страница",
"abusefilter-edit-warn-message": "Системное сообщение для предупреждений:",
"abusefilter-edit-warn-other": "Другое сообщение",
- "abusefilter-edit-warn-other-label": "Название страницы другого сообщения:\n:''(без префикса MediaWiki)''",
+ "abusefilter-edit-warn-other-label": "Название страницы другого сообщения:\n:''(без префикса MediaWiki:)''",
"abusefilter-edit-warn-actions": "Действия:",
- "abusefilter-edit-warn-preview": "Предпросмотр выбранного сообщения",
+ "abusefilter-edit-warn-preview": "Показать/скрыть предпросмотр выбранного сообщения",
"abusefilter-edit-warn-edit": "Создать/Изменить выбранное сообщение",
- "abusefilter-edit-tag-tag": "Применяемые [[Special:Tags|метки]] (по одной на строку):",
+ "abusefilter-edit-disallow-other": "Другое сообщение",
+ "abusefilter-edit-disallow-other-label": "Название страницы другого сообщения:\n:''(без префикса MediaWiki:)''",
+ "abusefilter-edit-disallow-actions": "Действия:",
+ "abusefilter-edit-disallow-preview": "Показать/скрыть предпросмотр выбранного сообщения",
+ "abusefilter-edit-disallow-edit": "Создать/Изменить выбранное сообщение",
+ "abusefilter-edit-tag-tag": "Применяемые [[Special:Tags|метки]]:",
+ "abusefilter-edit-tag-placeholder": "Добавить метки (разделённые запятыми)",
+ "abusefilter-edit-tag-hidden-placeholder": "Добавить метки (через запятую)",
+ "abusefilter-edit-block-anon-durations": "Длительность блокировки для анонимных пользователей:",
+ "abusefilter-edit-block-user-durations": "Длительность блокировки для зарегистрированных пользователей:",
+ "abusefilter-block-anon": "Блокировать анонимных участников",
+ "abusefilter-block-user": "блокировать зарегистрированных участников",
+ "abusefilter-block-talk": "страница обсуждения заблокирована",
"abusefilter-edit-denied": "Вы не можете просмотреть подробную информацию об этом фильтре, так как она скрыта от обычных участников.",
"abusefilter-edit-main": "Параметры фильтра",
"abusefilter-edit-done-subtitle": "Фильтр исправлен",
"abusefilter-edit-done": "Вы успешно сохранили [[Special:AbuseFilter/history/$1/diff/prev/$2|изменения]] в [[Special:AbuseFilter/$1|фильтре $3]].",
"abusefilter-edit-badsyntax": "В указанном фильтре обнаружены синтаксические ошибки. Парсер выдал следующее сообщение: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Следующие поля обязательны и должны быть заполнены: $1",
+ "abusefilter-edit-deleting-enabled": "Вы не можете отметить активный фильтр как удалённый.",
"abusefilter-edit-restricted": "Вы не можете изменить этот фильтр, так как он содержит одно или несколько ограничивающих действий. Пожалуйста, попросите участника с соответствующими правами сделать требуемые изменения.",
"abusefilter-edit-viewhistory": "Показать историю этого фильтра",
"abusefilter-edit-history": "История:",
@@ -224,8 +297,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Модуль (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Степень (**)",
"abusefilter-edit-builder-group-op-comparison": "Операторы сравнения",
- "abusefilter-edit-builder-op-comparison-equal": "Равны (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Не равно (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Значение, равное (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Значение и тип, равный (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Значение не равно (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Значение и тип, не равный (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Меньше (<)",
"abusefilter-edit-builder-op-comparison-gt": "Более чем (>)",
"abusefilter-edit-builder-op-comparison-lte": "Меньше или равно (<=)",
@@ -248,47 +323,56 @@
"abusefilter-edit-builder-funcs-length": "Длина строки (length)",
"abusefilter-edit-builder-funcs-lcase": "В нижний регистр (lcase)",
"abusefilter-edit-builder-funcs-ucase": "В верхний регистр",
- "abusefilter-edit-builder-funcs-ccnorm": "Нормализации неоднозначных символов (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm": "Нормализация неоднозначных символов (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Нормализовать и найти строку для нескольких подстрок в режиме OR (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Нормализовать и найти строку для нескольких подстрок в режиме AND (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Удаление повторяющихся символов (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Специальных символов / всего символов (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Нормализация (norm)",
"abusefilter-edit-builder-funcs-count": "Число включений подстроки X в строку Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Сколько раз рег. выр. X встречается в строке Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Массив регулярных выражений совпадает с текстом для каждой группы захвата (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Удалить пробелы (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Удалить специальные символы (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Присутствие IP в диапазоне (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Строка содержит любую из следующих строк (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Строка содержит для нескольких подстрок в режиме OR. (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Строка содержит для нескольких подстрок в режиме AND. (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Проверить, является ли аргумент равным (===) одному из следующих аргументов (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Подстрока (substr)",
"abusefilter-edit-builder-funcs-strpos": "Положение подстроки в строке (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Замена подстроки в строке (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Экранирование строки для использования в регулярных выражениях (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Установить переменную (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Нормализация символов HTML в юникод (sanitize)",
"abusefilter-edit-builder-group-vars": "Переменные",
"abusefilter-edit-builder-vars-accountname": "Имя учётной записи (при создании учётной записи)",
"abusefilter-edit-builder-vars-timestamp": "Unix-время изменения",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Временная метка журнала",
"abusefilter-edit-builder-vars-action": "Действие",
"abusefilter-edit-builder-vars-addedlines": "Добавленные строки",
"abusefilter-edit-builder-vars-delta": "Изменение размера в правке",
"abusefilter-edit-builder-vars-diff": "Унифицированная разница изменений правки",
"abusefilter-edit-builder-vars-newsize": "Новый размер страницы",
"abusefilter-edit-builder-vars-oldsize": "Старый размер страницы",
- "abusefilter-edit-builder-vars-old-content-model": "Модель содержимого страницы",
+ "abusefilter-edit-builder-vars-old-content-model": "Старая модель содержимого",
"abusefilter-edit-builder-vars-new-content-model": "Новая модель содержимого",
"abusefilter-edit-builder-vars-removedlines": "Удалённые строки",
"abusefilter-edit-builder-vars-summary": "Описание правки",
- "abusefilter-edit-builder-vars-article-id": "ID страницы",
- "abusefilter-edit-builder-vars-article-ns": "Пространство имён страницы",
- "abusefilter-edit-builder-vars-article-text": "Название страницы (без пространства имён)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Полное название страницы",
- "abusefilter-edit-builder-vars-article-views": "Просмотров страниц",
+ "abusefilter-edit-builder-vars-page-id": "ID страницы",
+ "abusefilter-edit-builder-vars-page-ns": "Пространство имён страницы",
+ "abusefilter-edit-builder-vars-page-title": "Название страницы (без пространства имён)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Полное название страницы",
+ "abusefilter-edit-builder-vars-page-age": "Возраст страницы (в секундах)",
"abusefilter-edit-builder-vars-movedfrom-id": "ID переименовываемой страницы",
"abusefilter-edit-builder-vars-movedfrom-ns": "Пространство имён переименовываемой страницы",
- "abusefilter-edit-builder-vars-movedfrom-text": "Название переименовываемой страницы",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Полное название переименовываемой страницы",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Название переименовываемой страницы",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Полное название переименовываемой страницы",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Возраст исходной страницы при переименовании (в секундах)",
"abusefilter-edit-builder-vars-movedto-id": "ID целевой страницы переименования",
"abusefilter-edit-builder-vars-movedto-ns": "Пространство имён целевой страницы переименования",
- "abusefilter-edit-builder-vars-movedto-text": "Название целевой страницы переименования",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Полное название целевой страницы переименования",
+ "abusefilter-edit-builder-vars-movedto-title": "Название целевой страницы переименования",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Полное название целевой страницы переименования",
+ "abusefilter-edit-builder-vars-movedto-age": "Возраст целевой страницы при переименовании (в секундах)",
"abusefilter-edit-builder-vars-user-editcount": "Число правок участника",
"abusefilter-edit-builder-vars-user-age": "Возраст учётной записи",
"abusefilter-edit-builder-vars-user-name": "Имя учётной записи",
@@ -298,23 +382,35 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "Время подтверждения адреса эл. почты",
"abusefilter-edit-builder-vars-recent-contributors": "Последние десять редакторов страницы",
"abusefilter-edit-builder-vars-first-contributor": "Первый сделавший свой вклад в страницу",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Последние десять пользователей, редактировавших страницу, которая перемещается",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Первый пользователь внесет вклад в перемещение исходной страницы",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Последние десять участников, редактировавших целевую страницу",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Первый пользователь внесет вклад в перемещение страницы назначения",
"abusefilter-edit-builder-vars-all-links": "Все внешние ссылки в новом тексте",
"abusefilter-edit-builder-vars-added-links": "Все внешние ссылки, добавленные в правке",
"abusefilter-edit-builder-vars-removed-links": "Все внешние ссылки, удалённые в правке",
- "abusefilter-edit-builder-vars-old-text": "Старый викитекст, до правки страницы",
- "abusefilter-edit-builder-vars-new-text": "Новый викитекст, после правки страницы",
- "abusefilter-edit-builder-vars-new-pst": "Викитекст новой страницы, преобразованный перед сохранением",
+ "abusefilter-edit-builder-vars-old-text": "Старый вики-текст, до правки страницы (больше не используется)",
+ "abusefilter-edit-builder-vars-new-text": "Новый вики-текст, после правки страницы",
+ "abusefilter-edit-builder-vars-new-pst": "Вики-текст новой страницы, преобразованный перед сохранением",
"abusefilter-edit-builder-vars-diff-pst": "Унифицированный diff изменений в процессе редактирования, преобразованных перед сохранением",
"abusefilter-edit-builder-vars-addedlines-pst": "Строчки, добавленные при редактировании, преобразованные перед сохранением",
"abusefilter-edit-builder-vars-new-text-stripped": "Новый текст страницы, очищенный от разметки",
"abusefilter-edit-builder-vars-new-html": "Разобранный HTML-код новой версии",
"abusefilter-edit-builder-vars-restrictions-edit": "Уровень защиты страницы от правок",
"abusefilter-edit-builder-vars-restrictions-move": "Уровень защиты страницы от переименований",
- "abusefilter-edit-builder-vars-restrictions-create": "Защита создания страницы",
+ "abusefilter-edit-builder-vars-restrictions-create": "Защита от создания страницы",
"abusefilter-edit-builder-vars-restrictions-upload": "Защита загрузки файла",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Уровень защиты от редактирования для страницы-источника",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Уровень защиты от переименования для страницы-источника",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Защита от создания исходной страницы при перемещении",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Защита при загрузке файла, который переносится",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Изменить уровень защиты от переименования целевой страницы",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Изменить уровень защиты от переименования целевой страницы",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Защита от создания целевой страницы при перемещении",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Загрузить защиту файла назначения перемещения",
"abusefilter-edit-builder-vars-old-text-stripped": "Текст старой страницы, лишённый разметки",
"abusefilter-edit-builder-vars-old-links": "Ссылки на странице до правки",
- "abusefilter-edit-builder-vars-old-html": "Викитекст старой страницы, преобразованный в HTML",
+ "abusefilter-edit-builder-vars-old-html": "Вики-текст старой страницы, преобразованный в HTML (боьше не используется)",
"abusefilter-edit-builder-vars-minor-edit": "Была ли правка отмечена как «малое изменение»",
"abusefilter-edit-builder-vars-file-sha1": "SHA1-хэш содержания файла",
"abusefilter-edit-builder-vars-file-size": "Размер файла в байтах",
@@ -341,6 +437,7 @@
"abusefilter-history-filterid": "Фильтр",
"abusefilter-history-select-legend": "Уточнить поиск",
"abusefilter-history-select-user": "Участник:",
+ "abusefilter-history-select-filter": "ID фильтра:",
"abusefilter-history-select-submit": "Уточнить",
"abusefilter-history-diff": "Изменения",
"abusefilter-history-error-hidden": "Запрашиваемый фильтр скрыт, вы не можете просмотреть его историю.",
@@ -351,14 +448,17 @@
"abusefilter-exception-unclosedstring": "Незакрытое строковое выражение, начинающееся с позиции $1.",
"abusefilter-exception-invalidoperator": "Ошибочный оператор «$2» в позиции $1.",
"abusefilter-exception-unrecognisedtoken": "Неопознанный знак «$2» в позиции $1.",
- "abusefilter-exception-noparams": "Не указаны параметры для функции «$2» в позиции $1.",
+ "abusefilter-exception-noparams": "Не указаны параметры для функции «$2» в позиции $1. Ожидалось $3 {{PLURAL:$3|аргумент|аргумента|аргументов}}.",
"abusefilter-exception-dividebyzero": "Попытка деления $2 на ноль в позиции $1.",
"abusefilter-exception-unrecognisedvar": "Неопознанная переменная $2 в позиции $1",
"abusefilter-exception-notenoughargs": "Не хватает аргументов в функции $2, вызываемой в позиции $1.\nОжидается $3 {{PLURAL:$3|аргумент|аргументов|аргумента}}, {{PLURAL:$4|получен|получено}} $4",
"abusefilter-exception-regexfailure": "Ошибка в регулярном выражении «$3» в позиции $1: «$2»",
"abusefilter-exception-overridebuiltin": "Недопустимое переопределение встроенной переменной «$2» в позиции $1.",
"abusefilter-exception-outofbounds": "Запрос несуществующего элемента списка $2 (размер списка = $3) в позиции $1.",
- "abusefilter-exception-notlist": "Запрос элемента массива для объекта, не являющемся массивом, в позиции $1.",
+ "abusefilter-exception-notarray": "Запрос элемента массива для объекта, не являющемся массивом, в позиции $1.",
+ "abusefilter-exception-unclosedcomment": "Незакрытый комментарий в позиции $1",
+ "abusefilter-exception-invalidiprange": "Неверный диапазон IP-адресов «$2» на позиции $1.",
+ "abusefilter-exception-disabledvar": "Переменная $2 на позиции $1 более не используется.",
"abusefilter-action-tag": "Метка",
"abusefilter-action-throttle": "Сужение",
"abusefilter-action-warn": "Предупреждение",
@@ -374,8 +474,9 @@
"abusefilter-revert-periodstart": "Начало периода:",
"abusefilter-revert-periodend": "Окончание периода:",
"abusefilter-revert-search": "Выбор действий",
- "abusefilter-revert-filter": "Фильтр:",
+ "abusefilter-revert-filter": "ID фильтра:",
"abusefilter-revert-preview-intro": "Ниже приведены выполненные фильтром злоупотреблений действия, которые будут отменены.\nПожалуйста, внимательно их проверьте и нажмите «{{int:abusefilter-revert-confirm}}», чтоб подтвердить свой выбор.",
+ "abusefilter-revert-confirm-legend": "Подтвердите откат",
"abusefilter-revert-confirm": "Подтвердить",
"abusefilter-revert-success": "Вы откатили все действия, выполненные фильтром злоупотреблений [[Special:AbuseFilter/$1|$2]].",
"abusefilter-revert-reason": "Автоматический откат всех действий, выполненных фильтром злоупотреблений $1.\nУказанная причина: $2",
@@ -387,12 +488,20 @@
"abusefilter-test-submit": "Проверить",
"abusefilter-test-load": "Загрузить",
"abusefilter-test-user": "Изменения сделаны участником:",
+ "abusefilter-test-nobots": "Скрыть правки ботов",
"abusefilter-test-period-start": "Изменения сделаны после:",
"abusefilter-test-period-end": "Изменения сделаны до:",
"abusefilter-test-page": "Изменения сделаны на странице:",
"abusefilter-test-shownegative": "Показывать изменения, не попадающие под фильтр",
"abusefilter-test-syntaxerr": "Введённый вами фильтр содержит синтаксическую ошибку.\nВы можете получить подробное объяснение, нажав на кнопку «{{int:abusefilter-edit-check}}».",
"abusefilter-test-badtitle": "Заголовок страниц, который вы ввели, некорректен. Возможно, он содержит один или более символов, которые нельзя использовать в названиях.",
+ "abusefilter-test-action": "Тип действия:",
+ "abusefilter-test-search-type-all": "Все действия",
+ "abusefilter-test-search-type-edit": "Правки",
+ "abusefilter-test-search-type-move": "Переименования",
+ "abusefilter-test-search-type-delete": "Удаления",
+ "abusefilter-test-search-type-upload": "Загрузки",
+ "abusefilter-test-search-type-createaccount": "Создания учётных записей",
"abusefilter-changeslist-examine": "просмотреть",
"abusefilter-examine": "Просмотр отдельных изменений",
"abusefilter-examine-intro": "Эта страница позволяет вам просмотреть переменные, созданные фильтром злоупотреблений для отдельной правки и проверить их в фильтрах.",
@@ -419,6 +528,7 @@
"abusefilter-topnav-import": "Импорт фильтра",
"abusefilter-log-name": "Журнал фильтра злоупотреблений",
"abusefilter-log-header": "В этот журнал записываются описания изменений, произведённых в фильтрах.\nПодробности можно найти в [[Special:AbuseFilter/history|списке]] последних изменений фильтров.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|создано}} $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|изменил|изменила}} $4 ($5)",
"abusefilter-log-noresults": "Ничего не найдено",
"abusefilter-diff-title": "Различия между версиями",
@@ -428,55 +538,22 @@
"abusefilter-diff-pattern": "Условия фильтрации",
"abusefilter-diff-invalid": "Не удаётся получить запрошенные версии",
"abusefilter-diff-backhistory": "Вернуться к истории фильтра",
- "abusefilter-diff-prev": "Старые изменения",
- "abusefilter-diff-next": "Новые изменения",
+ "abusefilter-diff-prev": "Предыдущая правка",
+ "abusefilter-diff-next": "Следующая правка",
"abusefilter-import-intro": "Вы можете использовать этот интерфейс для импорта фильтров из других вики.\nВ исходной вики, нажмите «{{int:abusefilter-edit-export}}» в разделе «{{int:abusefilter-edit-tools}}» интерфейса редактирования.\nСкопируйте содержание текстового поля, вставьте его на эту страницу и нажмите «{{int:abusefilter-import-submit}}».",
"abusefilter-import-submit": "Импортировать данные",
"abusefilter-group-default": "По умолчанию",
"abusefilter-http-error": "Произошла ошибка HTTP: $1.",
- "apihelp-abusefiltercheckmatch-description": "Проверка, удовлетворяет ли фильтру злоупотреблений набор переменных или событие фильтра злоупотреблений, записанное редактором.\n\nПеременные vars, rcid и logid обязательны, однако только одна из них может быть использована.",
- "apihelp-abusefiltercheckmatch-summary": "Проверка, удовлетворяет ли фильтру злоупотреблений набор переменных или событие фильтра злоупотреблений, записанное редактором.",
- "apihelp-abusefiltercheckmatch-extended-description": "Переменные vars, rcid и logid обязательны, однако только одна из них может быть использована.",
- "apihelp-abusefiltercheckmatch-param-filter": "Полный текст фильтра для проверки совпадения.",
- "apihelp-abusefiltercheckmatch-param-vars": "Массив проверяемых переменных, закодированный в JSON.",
- "apihelp-abusefiltercheckmatch-param-rcid": "Идентификатор проверяемого недавнего изменения.",
- "apihelp-abusefiltercheckmatch-param-logid": "Идентификатор проверяемой записи в логе злоупотреблений.",
- "apihelp-abusefiltercheckmatch-example-1": "Проверить, удовлетворяет ли недавнее изменение с идентификатором 15 простому фильтру",
- "apihelp-abusefilterchecksyntax-description": "Проверка синтаксиса фильтра злоупотреблений.",
- "apihelp-abusefilterchecksyntax-summary": "Проверка синтаксиса фильтра злоупотреблений.",
- "apihelp-abusefilterchecksyntax-param-filter": "Полный текст фильтра для проверки синтаксиса.",
- "apihelp-abusefilterchecksyntax-example-1": "Проверить синтаксис корректного фильтра",
- "apihelp-abusefilterchecksyntax-example-2": "Проверить синтаксис некорректного фильтра",
- "apihelp-abusefilterevalexpression-description": "Вычисление выражения фильтра злоупотреблений",
- "apihelp-abusefilterevalexpression-summary": "Вычисление выражения фильтра злоупотреблений",
- "apihelp-abusefilterevalexpression-param-expression": "Вычисляемое выражение.",
- "apihelp-abusefilterevalexpression-example-1": "Вычислить простое выражение",
- "apihelp-abusefilterunblockautopromote-description": "Разблокировка получаемого автоповышения участника вследствие фильтра злоупотреблений.",
- "apihelp-abusefilterunblockautopromote-summary": "Разблокировка получаемого автоповышения участника вследствие фильтра злоупотреблений.",
- "apihelp-abusefilterunblockautopromote-param-user": "Логин разблокируемого участника.",
- "apihelp-abusefilterunblockautopromote-example-1": "Удаление блока с автоповышения [[User:Example]]",
- "apihelp-query+abusefilters-description": "Отображение подробностей фильтров злоупотреблений",
- "apihelp-query+abusefilters-summary": "Отображение подробностей фильтров злоупотреблений",
- "apihelp-query+abusefilters-param-startid": "Идентификатор фильтра, с которого начать перечисление.",
- "apihelp-query+abusefilters-param-endid": "Идентификатор фильтра, на котором закончить перечисление.",
- "apihelp-query+abusefilters-param-show": "Показывать только фильтры, которые отвечают этим критериям.",
- "apihelp-query+abusefilters-param-limit": "Максимальное число фильтров в списке.",
- "apihelp-query+abusefilters-param-prop": "Какие свойства необходимо получить.",
- "apihelp-query+abusefilters-example-1": "Список включённых публичных фильтров",
- "apihelp-query+abusefilters-example-2": "Показать дополнительную информацию о фильтрах",
- "apihelp-query+abuselog-description": "Отображение событий, на которых сработал один из фильтров злоупотреблений.",
- "apihelp-query+abuselog-summary": "Отображение событий, на которых сработал один из фильтров злоупотреблений.",
- "apihelp-query+abuselog-param-start": "Временная метка, с которой начать перечисление.",
- "apihelp-query+abuselog-param-end": "Временная метка, на которой закончить перечисление.",
- "apihelp-query+abuselog-param-user": "Показать только записи, связанные с данным участником или IP-адресом.",
- "apihelp-query+abuselog-param-title": "Показать только записи, связанные с данной страницей.",
- "apihelp-query+abuselog-param-filter": "Показать только записи, связанные с фильтром с данным идентификатором.",
- "apihelp-query+abuselog-param-limit": "Максимальное количество записей в списке.",
- "apihelp-query+abuselog-param-prop": "Какие свойства необходимо получить.",
- "apihelp-query+abuselog-example-1": "Показать последние записи в журнале",
- "apihelp-query+abuselog-example-2": "Показать последние записи в журнале [[API]]",
- "apierror-abusefilter-canttest": "У вас недостаточно прав для проверки фильтров злоупотреблений.",
- "apierror-abusefilter-cantcheck": "У вас недостаточно прав для проверки синтаксиса фильтра злоупотреблений.",
- "apierror-abusefilter-nosuchlogid": "Не существует записи в журнале злоупотреблений с идентификатором $1.",
- "apierror-abusefilter-badsyntax": "Синтаксическая ошибка в фильтре."
+ "abusefilter-view-private-submit": "Просмотр личные данные",
+ "abusefilter-view-private": "Просмотр личные данные",
+ "abusefilter-view-private-reason": "Причина доступа к личные данные:",
+ "abusefilter-log-details-id": "ID журнала",
+ "abusefilter-invalid-request": "Неверный запрос! Вы должны получить доступ к частным данным журнала через форму на [[Special:AbuseLog/$1]] и обеспечить причину.",
+ "abusefilter-invalid-request-noid": "Неверный запрос! Вы должны получить доступ к частным данным журнала через форму на странице сведений о журнале злоупотреблений и указать причину.",
+ "log-description-abusefilterprivatedetails": "В этом журнале отображается список случаев, когда пользователь просматривал личные данные журнала злоупотреблений.",
+ "abusefilter-noreason": "Предупреждение. Чтобы просмотреть личные данные этого журнала, вы должны указать причину.",
+ "abusefilter-log-ip-not-available": "Не доступно",
+ "abusefilter-tag-reserved": "Метка <code>abusefilter-condition-limit</code> зарезервирована для использования фильтром злоупотреблений.",
+ "tag-abusefilter-condition-limit": "предел условия достигнут",
+ "tag-abusefilter-condition-limit-description": "Правки или другие действия, которые не могут быть проверены всеми активными [[Special:AbuseFilter|фильтрами злоупотреблений]] ([[mw:Extension:AbuseFilter/Conditions|справка]])."
}
diff --git a/AbuseFilter/i18n/rue.json b/AbuseFilter/i18n/rue.json
index 9b0d629d..fbfea584 100644
--- a/AbuseFilter/i18n/rue.json
+++ b/AbuseFilter/i18n/rue.json
@@ -3,14 +3,15 @@
"authors": [
"Dim Grits",
"Gazeb",
- "Matma Rex"
+ "Matma Rex",
+ "Matěj Suchánek",
+ "Vlad5250"
]
},
"abusefilter-desc": "Придавать автоматічны геврістікы до едітовань",
"abusefilter": "Конфіґурація філтрів знеужываня",
"abuselog": "Запис знеужываня",
"abusefilter-intro": "Вітайте у інтерфейсї керованя філтрів зловжываня.\nФілтер зловжываня є автоматічный софтверовый механізм, через котрого ся вшыткы операції тестують за помочі автоматічных еврістік.\nВ тім інтерфейсї можете видїти список дефінованых філтрів і мінити їх.",
- "abusefilter-mustbeeditor": "З беспечностных причін, лем хоснователї з правами зміны філтрів можуть хосновати тот інтерфейс.",
"abusefilter-warning": "'''Позірь:''' Тота дїя была автоматічно ідентіфікована як шкодлива.\nНеконштруктівны едітованя будуть швыдко ревертованы, в&nbsp;повторяный або заважных припадах може быти ваше конто хоснователя ці IP-адреса заблокованы.\nКідь тримете свою дїю за правилну, можете єй підтвердити кликнутём на Уложыти зміны.\nКуртый опис правила, котре вашу дїю означіло за шкодливу : $1",
"abusefilter-disallowed": "Тота дїя была автоматічно означена як шкодлива,\nі зато заборонена.\nКідь вірите, же ваше едітованя є конштруктівне, просиме контактуйте адміністратора і дайте му знати, што сьте хотїли зробити.\nКороткый опис правила, котре вашу дїю означіло за шкодливу: $1",
"abusefilter-blocked-display": "Тота дїя была автоматічно означена як шкодлива,\nі зато была заборонена.\nОкрім того про охорону проєкту {{SITENAME}} было вашому конту хоснователя і з ним звязанін IP-адресї зоблоковане едітованя.\nКідь собі думате, же ся їднать о хыбу, контактуйте адміністратора.\nКороткый опис правила, котре ваші дїю означіло за шкодливу: $1",
@@ -31,6 +32,7 @@
"right-abusefilter-log-private": "Перегляд записів журналу зловжывань, позначеных як пріватны",
"right-abusefilter-hide-log": "Схованя записів в протоколї знеужытя",
"right-abusefilter-hidden-log": "Перегляд схованых заисів в протоколї знеужываня",
+ "right-abusefilter-modify-global": "Створїня або зміна ґлобалных філтрів знеужываня",
"action-abusefilter-modify": "управовати філтры знеужываня",
"action-abusefilter-view": "перезерати філтры знеужываня",
"action-abusefilter-log": "перезерати протоколу знеужываня",
@@ -47,7 +49,8 @@
"abusefilter-log-search-title": "Назва:",
"abusefilter-log-search-wiki": "Вікі:",
"abusefilter-log-search-submit": "Глядати",
- "abusefilter-log-entry": "$1: $2 {{GENDER:$2|спустив|спустила|спустилиl}} філтер знеужываня почас дїї „$3“ на $4.\nЗрроблены опатрїня: $5;\nПопис філтра: $6",
+ "abusefilter-log-entry": "$1: $2 {{GENDER:$8|спустив|спустила|спустили}} філтер знеужываня почас дїї „$3“ на $4.\nЗроблены опатрїня: $5;\nПопис філтра: $6",
+ "abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|спустив|спустила|спустили}} філтер знеужываня почас дїї „$3“ на $4.\nЗроблены опатрїня: $5;\nПопис філтра: $6 ($7)",
"abusefilter-log-detailedentry-meta": "$1: $2 {{GENDER:$2|спустив|спустила|спустилиl}} $3 почас дїї „$4“ на $5.\nЗрроблены опатрїня: $6;\nПопис філтра: $7 ($8)",
"abusefilter-log-detailedentry-global": "ґлобалный філтер $1",
"abusefilter-log-detailedentry-local": "філтер $1",
@@ -73,8 +76,6 @@
"abusefilter-log-hide-hidden": "Сховати тот запис перед публічным приступом",
"abusefilter-log-hide-reason": "Причіна:",
"abusefilter-log-hide-forbidden": "Не маєте права про схованя записів в протоколї знеужытя",
- "abusefilter-logentry-suppress": "сховати [[$1]]",
- "abusefilter-logentry-unsuppress": "указати [[$1]]",
"logentry-abusefilter-hit": "$1 {{#gender:$1|выкликав|выкликала}} спрацовованя $4, выконуючі дїю \"$5\" на $3. Учінены крокы: $6 ($7)",
"abusefilter-management": "Управлїня філтром едітовань",
"abusefilter-list": "Вшыткы філтры",
@@ -103,10 +104,9 @@
"abusefilter-list-options-deleted-only": "Указати лем змазаны філтры",
"abusefilter-list-options-deleted-hide": "Сховати змазаны філтры",
"abusefilter-list-options-deleted-show": "Указати і змазаны філтры",
- "abusefilter-list-options-scope": "Вказати філтры почінаючі з:",
+ "abusefilter-list-options-scope": "Вказати філтры:",
"abusefilter-list-options-scope-local": "Локална вікі",
"abusefilter-list-options-scope-global": "Ґлобалны правила",
- "abusefilter-list-options-disabled": "Выпнуты філтры:",
"abusefilter-list-options-hidedisabled": "Сховати выпнуты філтры",
"abusefilter-list-options-submit": "Обновити",
"abusefilter-tools-text": "Ту суть уведены дакотры інштрументы, котры ся можуть придати про прираву і штелёваня філтрів знеужываня.",
@@ -125,7 +125,6 @@
"abusefilter-edit-status-label": "Штатістіка:",
"abusefilter-edit-status": "Z {{PLURAL:$1|1 послїдня дїя|послїднїх $1 дїй}} тому філтру {{PLURAL:$2|одповідала|одповідали|одповідало}} $2 ($3 %).",
"abusefilter-edit-status-profile": "Z {{PLURAL:$1|1 послїдня дїя|послїднїх $1 дїй}} тому філтру {{PLURAL:$2|одповідала|одповідали|одповідало}} $2 ($3 %).\nСередня доба біжаня філтру є $4 мс, філтер потребує $5 з доволеного чісла подмінок.",
- "abusefilter-edit-throttled": "'''Позор''': Тот філтер быв з безпечностных причін автоматічно выпнутый.\nОдповідало му веце як доволеный ліміт $1 % вшыткых операцій.",
"abusefilter-edit-new": "Новый філтер",
"abusefilter-edit-save": "Уложыти філтер",
"abusefilter-edit-id": "ІД філтра:",
@@ -144,7 +143,6 @@
"abusefilter-edit-consequences": "Опатрїня выконаны при сповнїню подмінок",
"abusefilter-edit-action-warn": "Перед выконанём того опатрїня перше хоснователя варовати",
"abusefilter-edit-action-disallow": "Заборонити хоснователёві выконати дїю",
- "abusefilter-edit-action-flag": "Позначіти едітованя в лоґу знеужывань",
"abusefilter-edit-action-blockautopromote": "Одобрати хоснователёві статус \"схваленый\"",
"abusefilter-edit-action-degroup": "Одстранити хоснователя із вшыткых прівілеґованых ґруп",
"abusefilter-edit-action-block": "Заблоковати хоснователя або IP адресу",
@@ -153,7 +151,6 @@
"abusefilter-edit-action-tag": "Позначіти едітованя про далшу перевірку",
"abusefilter-edit-throttle-count": "Чісло доволеных дїй:",
"abusefilter-edit-throttle-period": "Часовый інтервал:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|секунда|секунды|секунд}}",
"abusefilter-edit-throttle-groups": "Ліміты раховати оддїлено про:\n:\"(каждый рядок єден ліміт, ґрупы оддїлюйте комами)\"",
"abusefilter-edit-warn-message": "Сістемне повідомлїня зображене як варованя:",
"abusefilter-edit-warn-other": "Іншы повідомлїня",
@@ -237,18 +234,18 @@
"abusefilter-edit-builder-vars-oldsize": "Старый розмір сторінкы",
"abusefilter-edit-builder-vars-removedlines": "Рядкы вылучены почас едітованя",
"abusefilter-edit-builder-vars-summary": "Опис/причіна едітованя",
- "abusefilter-edit-builder-vars-article-id": "ID сторінкы",
- "abusefilter-edit-builder-vars-article-ns": "Простор назв сторінкы",
- "abusefilter-edit-builder-vars-article-text": "Назва сторінкы (без простору назв)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Повна назва сторінкы",
+ "abusefilter-edit-builder-vars-page-id": "ID сторінкы",
+ "abusefilter-edit-builder-vars-page-ns": "Простор назв сторінкы",
+ "abusefilter-edit-builder-vars-page-title": "Назва сторінкы (без простору назв)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Повна назва сторінкы",
"abusefilter-edit-builder-vars-movedfrom-id": "ID переменованой сторінкы",
"abusefilter-edit-builder-vars-movedfrom-ns": "Простор назв сторінкы што ся переменовавать",
- "abusefilter-edit-builder-vars-movedfrom-text": "Назва переменованой жрідловой сторінкы",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Повна назва переменованой жрідловой сторінкы",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Назва переменованой жрідловой сторінкы",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Повна назва переменованой жрідловой сторінкы",
"abusefilter-edit-builder-vars-movedto-id": "Ідентіфікатор цілёвой сторінкы переменованя",
"abusefilter-edit-builder-vars-movedto-ns": "Простор нязв до котрого ся пересувать",
- "abusefilter-edit-builder-vars-movedto-text": "Назва цілёвой сторінкы переменованя",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Повна назва цілёвой сторінкы переменованя",
+ "abusefilter-edit-builder-vars-movedto-title": "Назва цілёвой сторінкы переменованя",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Повна назва цілёвой сторінкы переменованя",
"abusefilter-edit-builder-vars-user-editcount": "Чісло едітовань хоснователя",
"abusefilter-edit-builder-vars-user-age": "Вік хосновательского конта",
"abusefilter-edit-builder-vars-user-name": "Імя конта хоснователя",
@@ -307,7 +304,7 @@
"abusefilter-exception-regexfailure": "Хыба в речуларнім выразї „$3“ на позіції $1: „$2“",
"abusefilter-exception-overridebuiltin": "Недоволене передефінованя перемінной „$2“ на позіції $1.",
"abusefilter-exception-outofbounds": "На позіції $1 пожадована неєствуюча $2. положка списку (розмір списку = $3).",
- "abusefilter-exception-notlist": "На позіції $1 пожадованый елемент поля про перемінны, котры не суть поле.",
+ "abusefilter-exception-notarray": "На позіції $1 пожадованый елемент поля про перемінны, котры не суть поле.",
"abusefilter-action-tag": "Значка",
"abusefilter-action-throttle": "Обмеджіня",
"abusefilter-action-warn": "Варованя",
@@ -326,7 +323,7 @@
"abusefilter-revert-filter": "Філтер:",
"abusefilter-revert-preview-intro": "Ниже сурь уведены дїї выконаны філтром знеужываня, котры тов дїёв будуть навернуты.\nСтаростливо їх перевірте і клікнутём на \"підтвердити\" можете їх навернутя схвалити.",
"abusefilter-revert-confirm": "Підтвердити",
- "abusefilter-revert-success": "{{GRAMMAR:|Вернув|Вернула|Вернули}} сьте вшыткы дїї, котры філтер знеужываня выконав на базї [[Special:AbuseFilter/$1|філтру $2]].",
+ "abusefilter-revert-success": "{{GENDER:|Вернув|Вернула|Вернули}} сьте вшыткы дїї, котры філтер знеужываня выконав на базї [[Special:AbuseFilter/$1|філтру $2]].",
"abusefilter-revert-reason": "Автоматічне вернутя вшыткых змін, котры філтер знеужытя выконав про філтер $1.\nДана причіня: $2",
"abusefilter-revert-reasonfield": "Прічіна:",
"abusefilter-test": "Перевірити філтер на послїднїх змінах",
@@ -367,7 +364,6 @@
"abusefilter-topnav-import": "Імпорт філтру",
"abusefilter-log-name": "Лоґ філтра знеужываня",
"abusefilter-log-header": "Тот лоґ обсягує перегляд змін філтрів.\nДетайлы найдете у [[Special:AbuseFilter/history|списки послїднїх змін філтрів]].",
- "abusefilter-log-entry-modify": "змінив $1 ($2)",
"abusefilter-log-noresults": "Жадны ресултаты",
"abusefilter-diff-title": "Різниця міджі верзіями",
"abusefilter-diff-item": "Елемент",
diff --git a/AbuseFilter/i18n/sa.json b/AbuseFilter/i18n/sa.json
index dced187d..8e8d5be3 100644
--- a/AbuseFilter/i18n/sa.json
+++ b/AbuseFilter/i18n/sa.json
@@ -44,8 +44,6 @@
"abusefilter-log-details-hidden": "अस्य विवरणानि भवान् द्रष्टुं नार्हति यतः इदं सार्वजनिकवीक्षणात् गुहितम् ।",
"abusefilter-log-hide-hidden": "सार्वजनिकदर्शनात् अयं प्रवेशः विलोप्यताम्",
"abusefilter-log-hide-reason": "कारणम् :",
- "abusefilter-logentry-suppress": "\"[[$1]]\" विलोप्यताम्",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\" न विलोप्यताम्",
"abusefilter-management": "दुरुपयुक्तशोधकस्य प्रबन्धनम्",
"abusefilter-list": "सर्वे शोधकाः",
"abusefilter-list-id": "शोधकस्य अभिज्ञापकम् :",
@@ -75,7 +73,6 @@
"abusefilter-list-options-deleted-show": "निष्कासिताः शोधकाः योज्यन्ताम्",
"abusefilter-list-options-scope-local": "स्थानीयविकि",
"abusefilter-list-options-scope-global": "जागतिकनियमाः",
- "abusefilter-list-options-disabled": "कृताक्षमाः शोधकाः :",
"abusefilter-list-options-hidedisabled": "कृतनिष्क्रियाः शोधकाः विलोप्यन्ताम्",
"abusefilter-list-options-submit": "नवीक्रियताम्",
"abusefilter-tools-text": "दुरुपयुक्त-शोधिकानां दोषनिरूपणे निर्माणे च उपयुक्तानि कानिचन उपकरणानि अत्र विद्यन्ते ।",
@@ -121,9 +118,9 @@
"abusefilter-edit-builder-vars-oldsize": "पुरानपृष्ठस्य आकारः",
"abusefilter-edit-builder-vars-removedlines": "सम्पादने निष्कासिताः पङ्क्तयः",
"abusefilter-edit-builder-vars-summary": "सम्पादनस्य सारांशः/कारणम्",
- "abusefilter-edit-builder-vars-article-id": "पृष्ठाभिज्ञापकम्",
- "abusefilter-edit-builder-vars-article-text": "पृष्ठस्य शीर्षकम् (नामावकाशं विना)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "पूर्णपृष्ठस्य शीर्षकम्",
+ "abusefilter-edit-builder-vars-page-id": "पृष्ठाभिज्ञापकम्",
+ "abusefilter-edit-builder-vars-page-title": "पृष्ठस्य शीर्षकम् (नामावकाशं विना)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "पूर्णपृष्ठस्य शीर्षकम्",
"abusefilter-edit-builder-vars-user-editcount": "सदस्यस्य सम्पादनानां गणना",
"abusefilter-edit-builder-vars-user-age": "योजकलेखायाः आयुः",
"abusefilter-edit-builder-vars-user-name": "योजकलेखायाः नाम",
diff --git a/AbuseFilter/i18n/sah.json b/AbuseFilter/i18n/sah.json
index 38e228f6..69803fd2 100644
--- a/AbuseFilter/i18n/sah.json
+++ b/AbuseFilter/i18n/sah.json
@@ -9,7 +9,6 @@
"abusefilter": "Аһара түһүү фильтрын туоруоруута",
"abuselog": "Аһара түһүү (злоупотребление) сурунаала",
"abusefilter-intro": "Омсо сиидэтин сирэйигэр нөрүөн нөргүй.\nОмсо сиидэтэ кыттааччылар уларытыыларын аптамаатынан хамсатар устуука буолар.\nМанна туруоруллубут сиидэлэр бары көстөллөр, уларытыахха сөп.",
- "abusefilter-mustbeeditor": "Бу интерфейсы куттал суох буолуутун сиэринэн омсо сиидэлэрин эрэ уларытар кыахтаах кыттааччылар уларытыахтарын сөп.",
"abusefilter-warning": "'''Болҕой''': Бу дьайыыҥ аптамаатынан омсолоох курдук бэлиэтэммит.\nТуһата суох көннөрүүлэриҥ түргэнник сотуллуохтара,\nоннук көннөрүүҥ бөдөҥ эбэтэр хаста да оҥоһуллубут буоллаҕына аатыҥ эбэтэр IP-аадырыҥ хааччахтаныа.\nОл эрээри, туһалаах дьайыыны оҥороргун эрэнэр буоллаххына, өссө биирдэ ыытар эбэтэр бигэргэтэр тимэҕи баттаа.\nЭн оҥорбут дьайыыгын кытта ситимнэммит сиэр кылгас ис хоһооно: $1",
"abusefilter-disallowed": "Бу дьайыы апатамаатынан омсолоох курдук бэлиэтэммит,\nонон бобуллубут.\nОл гынан баран, туһалаах көннөрүүнү оҥордум диэн эрэнэр буоллаххына, дьаһабылга тахсан тугу гынаары гынаргын кэпсээ.\nЭн оҥорбут дьайыыгын кытта ситимнэммит аһара түһүү кылгас ис хоһооно: $1",
"abusefilter-blocked-display": "Бу дьайыы апатамаатынан омсолоох курдук бэлиэтэммит,\nонон оҥороруҥ бобуллубут.\nОну таһынан {{SITENAME}} бырайыагы көмүскүүр соруктаах эн аатыҥ уонна IP-иҥ хааччахтаннылар.\nОл гынан баран, маны сыыһа дьаһал диир буоллаххына дьаһабылга таҕыс.\nЭн оҥорбут дьайыыгын кытта ситимнэммит аһара түһүү кылгас ис хоһооно: $1",
@@ -73,8 +72,6 @@
"abusefilter-log-hide-hidden": "Бу суругу аһаҕастык көрүүттэн кистээ",
"abusefilter-log-hide-reason": "Төрүөтэ:",
"abusefilter-log-hide-forbidden": "Омсо сурунаалын суруктарын кистиир быраабыҥ суох эбит.",
- "abusefilter-logentry-suppress": "маны кистээ [[$1]]",
- "abusefilter-logentry-unsuppress": "көстөр гын [[$1]]",
"abusefilter-management": "Омсо сиидэтин салайыы",
"abusefilter-list": "Бары сиидэлэр",
"abusefilter-list-id": "Сиидэ нүөмэрэ",
@@ -105,7 +102,6 @@
"abusefilter-list-options-scope": "Сиидэлэри мантан көрдөр:",
"abusefilter-list-options-scope-local": "Бу биики",
"abusefilter-list-options-scope-global": "Аан сиэр",
- "abusefilter-list-options-disabled": "Холбоммотох сиидэлэр:",
"abusefilter-list-options-hidedisabled": "Холбоммотох сиидэлэри көрдөрүмэ",
"abusefilter-list-options-submit": "Саҥарт",
"abusefilter-tools-text": "Манна омсо сиидэлэрин туруорууларын уларытарга уонна сөпкө суруйарга аналлаах сэп-сэбиргэл көстөр.",
@@ -125,7 +121,6 @@
"abusefilter-edit-status-label": "Статистиката:",
"abusefilter-edit-status": "Бүтэһик $1 {{PLURAL:$1|дьайыыттан|дьайыылартан}}, бу сиидэ $2 ($3%) сөп түбэһэр.",
"abusefilter-edit-status-profile": "Бүтэһик $1 {{PLURAL:$1|дьайыыттан|дьайыылартан}}, бу сиидэ $2 ($3%) сөп түбэһэр.\nКини үлэтэ ортотунан — $4 мс, усулуобуйа лимиититтэн $5 {{PLURAL:$5|усулуобуйаны|усулуобуйатын}} туттар.",
- "abusefilter-edit-throttled": "'''Сэрэтии.''' Бу сиидэ сэрэх муҥутаан араарыллыбыт.\nҮлэлиир бырыһыана бары дьайыылартан өлүүтэ $1 %-тан тахсыбыт.",
"abusefilter-edit-new": "Саҥа сиидэ",
"abusefilter-edit-save": "Сиидэни бигэргэт",
"abusefilter-edit-id": "Сиидэ нүөмэрэ:",
@@ -144,7 +139,6 @@
"abusefilter-edit-consequences": "Ылыллар дьаһаныылар",
"abusefilter-edit-action-warn": "Кыттааччыны сэрэтэн баран бу дьаһаллары ылынарга",
"abusefilter-edit-action-disallow": "Кыттааччы бу дьайыытын боборго",
- "abusefilter-edit-action-flag": "Омсо сурунаалыгар көннөрүүнү бэлиэтииргэ",
"abusefilter-edit-action-blockautopromote": "Аптамаатынан бигэргэтэр кыаҕы кыттааччыттан устарга",
"abusefilter-edit-action-degroup": "Кыттааччыны туох баар ордук быраабынан туһанар бөлөхтөртөн соторго",
"abusefilter-edit-action-block": "Бу кыттааччы уонна/эбэтэр бу IP-ттан киирэр киһи ону маны уларытарын боборго",
@@ -153,7 +147,6 @@
"abusefilter-edit-action-tag": "Кэлин бэрэбиэркэлиир курдук бэлиэтээ.",
"abusefilter-edit-throttle-count": "Көҥүллэммит дьайыылар ахсааннара:",
"abusefilter-edit-throttle-period": "Кэм далааһына:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|сөкүүндэ|сөкүүндэ}}",
"abusefilter-edit-throttle-groups": "Бөлөхтөрүнэн ылҕааһын:\n:''(устуруокаҕа биирдии, соппутуойунан араарыы)''",
"abusefilter-edit-warn-message": "Тиһилик сэрэтэр биллэриитэ:",
"abusefilter-edit-warn-other": "Атын сурук",
@@ -239,19 +232,18 @@
"abusefilter-edit-builder-vars-oldsize": "Сирэй урукку кээмэйэ",
"abusefilter-edit-builder-vars-removedlines": "Уларытыы түмүгэр сотуллубут устуруокалар ахсааннара",
"abusefilter-edit-builder-vars-summary": "Быһаарыыны/төрүөтүн көннөр",
- "abusefilter-edit-builder-vars-article-id": "Сирэй нүөмэрэ",
- "abusefilter-edit-builder-vars-article-ns": "Сирэй аатын дала",
- "abusefilter-edit-builder-vars-article-text": "Сирэй аата (аат далыттан ураты)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Сирэй толору аата",
- "abusefilter-edit-builder-vars-article-views": "Сирэйдэри көрүү",
+ "abusefilter-edit-builder-vars-page-id": "Сирэй нүөмэрэ",
+ "abusefilter-edit-builder-vars-page-ns": "Сирэй аатын дала",
+ "abusefilter-edit-builder-vars-page-title": "Сирэй аата (аат далыттан ураты)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Сирэй толору аата",
"abusefilter-edit-builder-vars-movedfrom-id": "Аата уларыйар сирэй нүөмэрэ",
"abusefilter-edit-builder-vars-movedfrom-ns": "Аата уларыйар сирэй аатын дала",
- "abusefilter-edit-builder-vars-movedfrom-text": "Аата уларыйар сирэй аата",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Аата уларыйар сирэй толору аата",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Аата уларыйар сирэй аата",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Аата уларыйар сирэй толору аата",
"abusefilter-edit-builder-vars-movedto-id": "Аата уларыйбытын кэннэ нүөмэрэ",
"abusefilter-edit-builder-vars-movedto-ns": "Аата уларыйбытын кэннэ маннык аат далыгар киирэр",
- "abusefilter-edit-builder-vars-movedto-text": "Аата уларыйдаҕына маннык буолар",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Аата уларыйдаҕына толору аата маннык буолар",
+ "abusefilter-edit-builder-vars-movedto-title": "Аата уларыйдаҕына маннык буолар",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Аата уларыйдаҕына толору аата маннык буолар",
"abusefilter-edit-builder-vars-user-editcount": "Кыттааччы уларытыытын ахсаана",
"abusefilter-edit-builder-vars-user-age": "Бэлиэтэммит \"сааһа\"",
"abusefilter-edit-builder-vars-user-name": "Бэлиэтэммит аата",
@@ -366,7 +358,6 @@
"abusefilter-topnav-import": "Сиидэни импортааһын",
"abusefilter-log-name": "Омсо сиидэтин сурунаала",
"abusefilter-log-header": "Бу сурунаалга туох баар сиидэлэргэ оҥоһуллубут улартыылар суруллаллар.\nСиһилии сиидэлэр кэнники улартыыларын [[Special:AbuseFilter/history|тиһигэр]] көрүөххүн сөп.",
- "abusefilter-log-entry-modify": "уларыппыт $1 ($2)",
"abusefilter-log-noresults": "Туох да көстүбэтэ",
"abusefilter-diff-title": "Барыллары тэҥнээн көрүү",
"abusefilter-diff-item": "Элэмиэн",
diff --git a/AbuseFilter/i18n/scn.json b/AbuseFilter/i18n/scn.json
index 3b9bd96c..4e2a9a53 100644
--- a/AbuseFilter/i18n/scn.json
+++ b/AbuseFilter/i18n/scn.json
@@ -11,7 +11,6 @@
"abusefilter": "Cunfigurazzioni dû filtru anti-abbusi",
"abuselog": "Riggistru di l'abbusi",
"abusefilter-intro": "Bimminutu ntâ ntirfaccia di gistioni dû filtru anti-abbusi.\nLu filtru anti-abbusi è nu miccanismu software autumatizzatu chi àpprica cuntrolli di tipu eurìsticu supra a tutti l'azzioni ca si fannu.\nSta ntirfaccia ammustra na lista di li filtri difinuti, e cunzenti di canciàrili.",
- "abusefilter-mustbeeditor": "Pi mutivi di sicurizza, sulu l'utenti cû drittu di canciari li filtri anti-abbusi ponnu adupirari sta ntirfaccia.",
"abusefilter-warning": "'''Accura:''' St'azzioni fu idintificata di manera autumàtica comu n'azzioni dannìfica.\nLi canciamenti ca nun sunnu custruttivi vèninu annullati vittivitti, e fari canciamenti ca nun sunnu custruttivi di manera palisi e arripituta è mutivu di bloccu dû tò cuntu o dû tò nnirizzu IP.\nSi penzi ca pi daveru st'azzioni è custruttiva, la poi mannari n'àutra vota pi cunfirmàrila.\nNu riassuntu dâ règula anti-abbusi ca fu viulata dâ tò azzioni è: $1",
"abusefilter-disallowed": "St'azzioni fu idintificata di manera autumàtica comu n'azzioni dannìfica, e dunca nun fu cunzintuta.\nSi penzi ca mmeci st'azzioni è custruttiva, pi favuri nforma a n'amministraturi di zocchi stai pruvannu a fari.\nNu riassuntu dâ règula anti-abbusi ca fu viulata dâ tò azzioni è: $1",
"abusefilter-blocked-display": "St'azzioni fu idintificata di manera autumàtica comu n'azzioni dannìfica, e ti fu mpidutu di purtàrila a cumpimentu.\nSparti, pi prutèggiri a {{SITENAME}}, lu tò cuntu utenti e tutti li nnirizzi IP rilativi foru bluccati dû putiri fari canciamenti.\nSi penzi ca sta cosa ammattìu pi sbagghiu, pi favuri cuntatta a n'amministraturi.\nNu riassuntu dâ règula anti-abbusi ca fu viulata dâ tò azzioni è: $1",
@@ -77,8 +76,6 @@
"abusefilter-log-hide-hidden": "Ammuccia sta vuci dû pùbblicu",
"abusefilter-log-hide-reason": "Mutivu:",
"abusefilter-log-hide-forbidden": "Nun hai lu pirmissu d'ammucciari li vuci dû riggistru di l'abbusi.",
- "abusefilter-logentry-suppress": "ammucciau «[[$1]]»",
- "abusefilter-logentry-unsuppress": "ammustrau «[[$1]]»",
"logentry-abusefilter-hit": "$1 fici scattari $4, ntô fari l'azzioni «$5» nta $3. Misuri pigghiati: $6 ($7)",
"abusefilter-management": "Gistioni dû filtru anti-abbusi",
"abusefilter-list": "Tutti li filtri",
@@ -111,7 +108,6 @@
"abusefilter-list-options-scope-local": "Sulu li règuli lucali",
"abusefilter-list-options-scope-global": "Sulu li règuli glubbali",
"abusefilter-list-options-scope-all": "Tutti li règuli, lucali e glubbali",
- "abusefilter-list-options-disabled": "Filtri disattivati:",
"abusefilter-list-options-hidedisabled": "Ammuccia li filtri disattivati",
"abusefilter-list-options-submit": "Aggiorna",
"abusefilter-tools-text": "Ccà ci sunnu na para di strummenti ca ponnu giuvari pi priparari e currèggiri li filtri anti-abbusi.",
@@ -130,7 +126,6 @@
"abusefilter-edit-oldwarning": "<strong>Stai canciannu na virsioni vecchia di stu filtru.\nLi statìstichi sunnu arrifiruti â virsioni dû filtru cchiù nova.\nSi sarvi li tò canciamenti, suprascrivi tutti l'àutri canciamenti fatti appressu dâ virsioni ca stai canciannu.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Torna â crunuluggìa di stu filtru]].",
"abusefilter-edit-status-label": "Statìstichi:",
"abusefilter-edit-status": "Di {{PLURAL:$1|l'ùrtima|l'ùrtimi}} $1 {{PLURAL:$1|azzioni}}, $2 (lu $3%) {{PLURAL:$2|fici|fìciru}} scattari stu filtru.",
- "abusefilter-edit-throttled": "'''Accura:''' Stu filtru fu disattivatu autumaticamenti comu misura di sicurizza.\nScattau na quantità di voti supiriuri ô lìmiti màssimu, ch'è pari ô $1% di tutti l'azzioni.",
"abusefilter-edit-new": "Filtru novu",
"abusefilter-edit-save": "Sarva lu filtru",
"abusefilter-edit-id": "ID dû filtru:",
@@ -149,7 +144,6 @@
"abusefilter-edit-consequences": "Misuri pigghiati quannu scatta",
"abusefilter-edit-action-warn": "Fai st'azzioni dopu d'aviri datu n'avvirtimentu a l'utenti",
"abusefilter-edit-action-disallow": "Mpidisci a l'utenti di purtari a tèrmini l'azzioni",
- "abusefilter-edit-action-flag": "Signala lu canciamentu ntô riggistru di l'abbusi",
"abusefilter-edit-action-blockautopromote": "Rèvuca lu statu di utenti autu-cunfirmatu",
"abusefilter-edit-action-degroup": "Leva a l'utenti di tutti li gruppa priviliggiati",
"abusefilter-edit-action-block": "Blocca a l'utenti o lu nnirizzu IP pi nun putiri fari canciamenti",
@@ -158,7 +152,6 @@
"abusefilter-edit-action-tag": "Marca lu canciamentu comu canciamentu d'arrivìdiri megghiu",
"abusefilter-edit-throttle-count": "Nùmmiru d’azzioni di cunzèntiri:",
"abusefilter-edit-throttle-period": "Pirìudu di tempu:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|secunnu|secunni}}",
"abusefilter-edit-throttle-groups": "Raggruppa l'allintamenti a secunna di:\n:''(unu pi riga, cumminari chî vìrguli)''",
"abusefilter-edit-warn-message": "Missaggiu di sistema d'adupirari comu avvisu:",
"abusefilter-edit-warn-other": "Àutru missaggiu",
@@ -245,19 +238,18 @@
"abusefilter-edit-builder-vars-oldsize": "Grannizza vecchia dâ pàggina",
"abusefilter-edit-builder-vars-removedlines": "Nùmmiru di righi livati ntô canciamentu",
"abusefilter-edit-builder-vars-summary": "Riassuntu/mutivu dû canciamentu",
- "abusefilter-edit-builder-vars-article-id": "ID dâ pàggina",
- "abusefilter-edit-builder-vars-article-ns": "Namespace dâ pàggina",
- "abusefilter-edit-builder-vars-article-text": "Tìtulu dâ pàggina (senza namespace)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Tìtulu cumpletu dâ pàggina",
- "abusefilter-edit-builder-vars-article-views": "Nùmmiru di taliati dâ pàggina",
+ "abusefilter-edit-builder-vars-page-id": "ID dâ pàggina",
+ "abusefilter-edit-builder-vars-page-ns": "Namespace dâ pàggina",
+ "abusefilter-edit-builder-vars-page-title": "Tìtulu dâ pàggina (senza namespace)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Tìtulu cumpletu dâ pàggina",
"abusefilter-edit-builder-vars-movedfrom-id": "ID dâ pàggina orìggini dû spustamentu",
"abusefilter-edit-builder-vars-movedfrom-ns": "Namespace dâ pàggina orìggini dû spustamentu",
- "abusefilter-edit-builder-vars-movedfrom-text": "Tìtulu dâ pàggina orìggini dû spustamentu",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Tìtulu cumpletu dâ pàggina orìggini dû spustamentu",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Tìtulu dâ pàggina orìggini dû spustamentu",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Tìtulu cumpletu dâ pàggina orìggini dû spustamentu",
"abusefilter-edit-builder-vars-movedto-id": "ID dâ pàggina distinazzioni dû spustamentu",
"abusefilter-edit-builder-vars-movedto-ns": "Namespace dâ pàggina distinazzioni dû spustamentu",
- "abusefilter-edit-builder-vars-movedto-text": "Tìtulu dâ pàggina distinazzioni dû spustamentu",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Tìtulu cumpletu dâ pàggina distinazzioni dû spustamentu",
+ "abusefilter-edit-builder-vars-movedto-title": "Tìtulu dâ pàggina distinazzioni dû spustamentu",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Tìtulu cumpletu dâ pàggina distinazzioni dû spustamentu",
"abusefilter-edit-builder-vars-user-editcount": "Cunteggiu dî canciamenti di l'utenti",
"abusefilter-edit-builder-vars-user-age": "Anzianità dû cuntu di l'utenti",
"abusefilter-edit-builder-vars-user-name": "Nomu dû cuntu di l'utenti",
@@ -322,7 +314,7 @@
"abusefilter-exception-regexfailure": "Erruri ntâ sprissioni rigulari «$3» ô caràttiri $1: «$2»",
"abusefilter-exception-overridebuiltin": "Suprascrittura nun cunzintuta dâ variàbbili ncurpurata «$2» ô caràttiri $1.",
"abusefilter-exception-outofbounds": "Veni addumannatu di na lista l'elimentu $2 ca nun esisti (lunghizza dâ lista = $3), ô caràttiri $1.",
- "abusefilter-exception-notlist": "Veni addumannatu l’elementu dûn vitturi nta na cosa ca nun è un vitturi, ô caràttiri $1.",
+ "abusefilter-exception-notarray": "Veni addumannatu l’elementu dûn vitturi nta na cosa ca nun è un vitturi, ô caràttiri $1.",
"abusefilter-action-tag": "Etichetta",
"abusefilter-action-throttle": "Allenta",
"abusefilter-action-warn": "Avverti",
@@ -383,7 +375,6 @@
"abusefilter-topnav-import": "Mporta nu filtru",
"abusefilter-log-name": "Riggistru dû filtru anti-abbusi",
"abusefilter-log-header": "Stu riggistru ammustra nu riassuntu dî canciamenti ca foru fatti ntê filtri.\nPî dittagghî cumpleti, talìa [[Special:AbuseFilter/history|l'elencu]] dî canciamenti ricenti.",
- "abusefilter-log-entry-modify": "canciau $1 ($2)",
"abusefilter-log-noresults": "Nuddu risurtatu",
"abusefilter-diff-title": "Diffirenzi ntra li virsiuni",
"abusefilter-diff-item": "Elimentu",
@@ -397,39 +388,5 @@
"abusefilter-import-intro": "Poi adupirari sta ntirfaccia pi mpurtari filtri di l'àutri wiki.\nNtâ wiki d'orìggini, clicca «{{int:abusefilter-edit-export}}» sutta a «{{int:abusefilter-edit-tools}}», ntâ ntirfaccia pû canciamentu dî filtri.\nCopia lu testu dâ casedda ca cumpari, e ncòddalu nta sta casedda ccà, e appoi clicca «{{int:abusefilter-import-submit}}».",
"abusefilter-import-submit": "Mporta li dati",
"abusefilter-group-default": "Pridifinutu",
- "abusefilter-http-error": "Ammattìu n'erruri HTTP: $1.",
- "apihelp-abusefiltercheckmatch-description": "Cuntrolla si n'AbuseFilter currispunni a nu nzemi di variàbbili, a nu canciamentu o a n'eventu AbuseFilter riggistratu.\n\nS'havi a spicificari pi forza o vars, o rcid, o logid, ma sulu unu di chisti.",
- "apihelp-abusefiltercheckmatch-param-filter": "Lu testu cumpletu dûn filtru, pi cuntrullari si currispunni.",
- "apihelp-abusefiltercheckmatch-param-vars": "Nu vitturi di variàbbili n furmatu JSON, pi cuntrullari si currispunni.",
- "apihelp-abusefiltercheckmatch-param-rcid": "L'ID dûn canciamentu ricenti, pi cuntrullari si currispunni.",
- "apihelp-abusefiltercheckmatch-param-logid": "L'ID di n'eventu dû riggistru dû filtru anti-abbusi, pi cuntrullari si currispunni.",
- "apihelp-abusefiltercheckmatch-example-1": "Cuntrolla si lu canciamentu ricenti chi havi ID 15 currispunni a nu filtru sìmplici",
- "apihelp-abusefilterchecksyntax-description": "Cuntrolla la sintassi di nu filtru AbuseFilter.",
- "apihelp-abusefilterchecksyntax-param-filter": "Lu testu cumpletu dû filtru dû quali si voli cuntrullari la sintassi.",
- "apihelp-abusefilterchecksyntax-example-1": "Cuntrolla la sintassi di nu filtru bonu",
- "apihelp-abusefilterchecksyntax-example-2": "Cuntrolla la sintassi di nu filtru malu",
- "apihelp-abusefilterevalexpression-description": "Vàluta na sprissioni d'AbuseFilter.",
- "apihelp-abusefilterevalexpression-param-expression": "La sprissioni di valutari.",
- "apihelp-abusefilterevalexpression-example-1": "Vàluta na sprissioni sìmplici",
- "apihelp-abusefilterunblockautopromote-description": "Leva a n'utenti lu bloccu di l'autu-cunferma c'avìa arricivutu comu cunziquenza di nu filtru anti-abbusi.",
- "apihelp-abusefilterunblockautopromote-param-user": "Nomu di l'utenti chi si voli sbluccari.",
- "apihelp-abusefilterunblockautopromote-example-1": "Leva lu bloccu di l'autu-cunferma a l'utenti [[User:Example]]",
- "apihelp-query+abusefilters-description": "Ammustra li dittagghî dî filtri anti-abbusi.",
- "apihelp-query+abusefilters-param-startid": "L'ID dû primu filtru ca si voli pigghiari a cunziddirazzioni.",
- "apihelp-query+abusefilters-param-endid": "L'ID di l'ùrtimu filtru ca si voli pigghiari a cunziddirazzioni.",
- "apihelp-query+abusefilters-param-show": "Ammustra sulu li filtri ca currispùnnunu a sti criterî.",
- "apihelp-query+abusefilters-param-limit": "Lu nùmmiru màssimu di filtri di elincari.",
- "apihelp-query+abusefilters-param-prop": "Quali prupità pigghiari.",
- "apihelp-query+abusefilters-example-1": "Elenca li filtri pùbblici ca sunnu attivati",
- "apihelp-query+abusefilters-example-2": "Ammustra na para di dittagghî supra ê filtri",
- "apihelp-query+abuselog-description": "Ammustra l'eventi ca foru ntircittati di nu filtru anti-abbusi.",
- "apihelp-query+abuselog-param-start": "La data e ura a pàrtiri dî quali l'eventi si vonnu pigghiari a cunziddirazzioni.",
- "apihelp-query+abuselog-param-end": "La data e ura a finiri chî quali l'eventi si vonnu pigghiari a cunziddirazzioni.",
- "apihelp-query+abuselog-param-user": "Ammustra sulu l'azzioni fatti di nu certu utenti o nnirizzu IP.",
- "apihelp-query+abuselog-param-title": "Ammustra sulu l'azzioni fatti nta na certa pàggina.",
- "apihelp-query+abuselog-param-filter": "Ammustra sulu l'azzioni ntircittati di nu filtru cu na certa ID.",
- "apihelp-query+abuselog-param-limit": "Lu nùmmiru màssimu di vuci di elincari.",
- "apihelp-query+abuselog-param-prop": "Quali prupità pigghiari.",
- "apihelp-query+abuselog-example-1": "Ammustra li vuci di riggistru ricenti",
- "apihelp-query+abuselog-example-2": "Ammustra li vuci di riggistru ricenti pi [[API]]"
+ "abusefilter-http-error": "Ammattìu n'erruri HTTP: $1."
}
diff --git a/AbuseFilter/i18n/sco.json b/AbuseFilter/i18n/sco.json
index 4008d9ab..0afbd34b 100644
--- a/AbuseFilter/i18n/sco.json
+++ b/AbuseFilter/i18n/sco.json
@@ -8,7 +8,6 @@
"abusefilter": "Abuiss filter confeeguration",
"abuselog": "Abuiss log",
"abusefilter-intro": "Weelcome til the Abuiss Filter management interface.\nThe Abuiss Filter is aen autæmated saffware mechanism o appliein autæmatic heuristics til aw actions.\nThis interface shaws ae leet o defined filters, n permits thaim tae be modified.",
- "abusefilter-mustbeeditor": "Fer securitie raisons, yinly uisers wi the richt tae modify abuiss filters can uise this interface.",
"abusefilter-warning": "'''Warnishment:''' This action haes been autæmaticlie ideentified aes harmful.\nOnconstructeeve eedits will be quicklie reverted, n egregioos or repeated onconstructeeve eeeditin will result in yer accoont or IP address bein blockit.\nGif ye true this action tae be constructeeve, ye can haun it in again tae confirm it.\nAe brief descreeption o the abuiss rule that yer action matched is: $1",
"abusefilter-log-search-filter": "Filter IDs (separate wi pipes):",
"abusefilter-log-private-not-included": "Yin or mair o the filter IDs that ye speceefied ar private. Cause ye'r na permitit tae see details o private filters, thir filters hae na been raked fer."
diff --git a/AbuseFilter/i18n/sd.json b/AbuseFilter/i18n/sd.json
index 16208280..484c745d 100644
--- a/AbuseFilter/i18n/sd.json
+++ b/AbuseFilter/i18n/sd.json
@@ -1,11 +1,40 @@
{
"@metadata": {
"authors": [
- "Mehtab ahmed"
+ "Mehtab ahmed",
+ "Indus Asia",
+ "Saraiki"
]
},
+ "abuselog": "غلط-استعمال لاگ",
+ "abusefilter-blocker": "غلط-استعمال ڇاڻي",
+ "right-abusefilter-modify": "غلط-استعمال ڇاڻين کي بدلايو",
+ "right-abusefilter-view": "غلط-استعمال ڇاڻيون ڏيکاريو",
+ "right-abusefilter-log": "غلط-استعمال لاگ ڏيکاريو",
+ "right-abusefilter-log-detail": "غلط-استعمال لاگ جون ڊگھيون داخلائون ڏيکاريو",
+ "right-abusefilter-private": "غلط-استعمال لاگ ۾ خانگي مودا ڏيکاريو",
+ "right-abusefilter-hide-log": "غلط-استعمال لاگ ۾ داخلائون لڪايو",
+ "right-abusefilter-hidden-log": "غلط-استعمال لاگ جون لڪيل داخلائون ڏيکاريو",
+ "action-abusefilter-modify": "غلط-استعمال ڇاڻيون بدلايو",
+ "action-abusefilter-view": "غلط-استعمال ڇاڻيون ڏيکاريو",
+ "action-abusefilter-log": "غلط-استعمال لاگ ڏيکاريو",
+ "action-abusefilter-log-detail": "غلط-استعمال لاگ جون ڊگھيون داخلائون ڏيکاريو",
+ "action-abusefilter-private": "غلط-استعمال لاگ ۾ خانگي مواد ڏيکاريو",
+ "abusefilter-log": "غلط-استعمال ڇاڻي لاگ",
+ "abusefilter-log-search": "غلط-استعمال لاگ ڳوليو",
+ "abusefilter-log-linkoncontribs": "غلط-استعمال لاگ",
+ "abusefilter-log-linkoncontribs-text": "{{GENDER:$1|ھن واپرائيندڙ}} لاءِ غلط-استعمال لاگ",
+ "abusefilter-log-hide-forbidden": "توھان کي غلط-استعمال لاگ جي داخلائن کي لڪائڻ جي اجازت ناھي.",
+ "abusefilter-edit-status-label": "انگ اکر:",
+ "abusefilter-edit-disallow-actions": "عمل",
+ "abusefilter-edit-tools": "اوزار:",
"abusefilter-history-diff": "تبديليون",
"abusefilter-revert-confirm": "پڪ ڪريو",
+ "abusefilter-examine-legend": "تبديليون چونڊيو",
"abusefilter-examine-title": "صفحي جو عنوان:",
+ "abusefilter-topnav-examine": "پوين ترميمن کي تپاسيو",
+ "abusefilter-topnav-log": "غلط-استعمال لاگ",
+ "abusefilter-log-name": "غلط-استعمال ڇاڻي لاگ",
+ "abusefilter-log-noresults": "ڪي به نتيجا ناھن",
"abusefilter-diff-item": "جزو"
}
diff --git a/AbuseFilter/i18n/sh.json b/AbuseFilter/i18n/sh.json
index c131a293..76f37a94 100644
--- a/AbuseFilter/i18n/sh.json
+++ b/AbuseFilter/i18n/sh.json
@@ -9,7 +9,6 @@
"abusefilter": "Konfiguracija filtera za zloupotrebu",
"abuselog": "Evidencija zloupotreba",
"abusefilter-intro": "Dobrodošli u interfejs upravljanja filterom zloupotreba.\nFilter zloupotreba je automatizirani softverski mehanizam za pravljenje automatskih heuristika za sve akcije.\nOvaj interfejs prikazuje spisak napravljenih filtera i omogućuje Vam da ih prilagodite.",
- "abusefilter-mustbeeditor": "Iz sigurnosnih razloga, samo korisnici sa pravom da promijene filtere zloupotrebe mogu koristiti ovaj interfejs.",
"abusefilter-warning": "'''Upozorenje''': Ova akcija je automatski identificirana kao štetna.\nNekonstruktivna uređivanja biti će brzo uklonjena,\na prekomjerno ili ponovljeno nekonstruktivno uređivanje će uzrokovati da vaš račun ili IP adresa budu blokirani.\nUkoliko vjerujete da je vaše uređivanje konstruktivno, možete ga ponovo poslati da ga potvrdite.\nKratak opis pravila sprječavanja zloupotreaba koji se podudara s vašim uređivanjem je: $1",
"abusefilter-disallowed": "Ova akcija je automatski identificirana kao štetna, pa je stoga onemogućena.\nAko vjerujete da je uređivanje konstruktivno, molimo kontaktirajte administratora i obavijestite ga o tome što ste pokušali učiniti.\nKratak opis pravila spriječavanja zloupotrebe koji se podudara s vašim uređivanjem je: $1",
"abusefilter-blocked-display": "Ova akcija je automatski identificirana kao opasna,\ni kao takva onemogućena da se izvrši.\nDodatno, da bi se zaštitio {{SITENAME}}, Vaš korisnički račun i sve pripadajuće IP adrese su blokirane za uređivanje.\nAko se desila greška, molimo da kontaktirate administratora.\nKratki opis prekršenih pravila koja odgovaraju Vašoj akciji je: $1",
@@ -70,8 +69,6 @@
"abusefilter-log-details-hidden": "Ne možete da vidite detalje ovog filtera jer su sakriveni.",
"abusefilter-log-hide-reason": "Razlog:",
"abusefilter-log-hide-forbidden": "Nemate dozvolu da sakrivate unose u izveštaju filtera zloupotrebe.",
- "abusefilter-logentry-suppress": "sakrij „[[$1]]“",
- "abusefilter-logentry-unsuppress": "prikaži „[[$1]]“",
"abusefilter-management": "Upravljanje filterom protiv zloupotrebe",
"abusefilter-list": "Svi filteri",
"abusefilter-list-id": "ID filtera",
@@ -91,7 +88,6 @@
"abusefilter-reautoconfirm-notallowed": "Nije vam dozvoljeno da vratite samopotvrđeni status.",
"abusefilter-edit": "Uređivanje filtera zloupotrebe",
"abusefilter-edit-action-disallow": "Spreči korisnika da izvrši dotičnu akciju",
- "abusefilter-edit-action-flag": "Označi izmenu u izveštaju zloupotrebe",
"abusefilter-edit-action-blockautopromote": "Vrati samopotvrđeni status korisnika",
"abusefilter-edit-action-degroup": "Ukloni korisnika iz svih korisničkih grupa",
"abusefilter-edit-action-block": "Blokiraj izmene korisnika i/ili IP adrese",
@@ -166,7 +162,6 @@
"abusefilter-topnav-import": "Uvezi filter",
"abusefilter-log-name": "Evidencija filtera zloupotrebe",
"abusefilter-log-header": "Ovde je prikazan sažetak izmena koje su napravili filteri.\nZa više informacija pogledajte [[Special:AbuseFilter/history|pregled]] skorašnjih izmjena.",
- "abusefilter-log-entry-modify": "izmenio $1 ($2)",
"abusefilter-log-noresults": "Nema rezultata",
"abusefilter-diff-title": "Razlike između revizija",
"abusefilter-diff-item": "Stavka",
diff --git a/AbuseFilter/i18n/si.json b/AbuseFilter/i18n/si.json
index 2217c360..ec5babde 100644
--- a/AbuseFilter/i18n/si.json
+++ b/AbuseFilter/i18n/si.json
@@ -7,14 +7,14 @@
"ශ්වෙත",
"සුරනිමල",
"Susith Chandira Gts",
- "Macofe"
+ "Macofe",
+ 1100100
]
},
"abusefilter-desc": "සංස්කරණ සඳහා ස්වයංක්‍රීය විවරණෝපයෝගී යෙදේ",
"abusefilter": "අනිසි පෙරහන් සැකසුම",
"abuselog": "අනිසි සටහන්",
"abusefilter-intro": "අපයෙදුම් පෙරහන් කළමනාකරණ අතුරු මුහුණතට ඔබව සාදරයෙන් පිළිගනිමු.\nThe Abuse Filter is an automated software mechanism of applying automatic heuristics to all actions.\nThis interface shows a list of defined filters, and allows them to be modified.",
- "abusefilter-mustbeeditor": "ආරක්ෂක හේතුන් නිසා, අපයෙදුම් පෙරහන් වෙනස් කිරීමට අවසර ඇති පරිශීලකයන් පමණක් මෙම අතුරුමුහුණත භාවිතා කරන්න.",
"abusefilter-warning": "'''අවවාදයයි''':මෙම ක්‍රියාව හානිදායක බව ස්වයංක්‍රීයව හඳුනාගෙන ඇත.\nUnconstructive edits will be quickly reverted,\nand egregious or repeated unconstructive editing will result in your account or IP address being blocked.\nIf you believe this edit to be constructive, you may click Submit again to confirm it.\nA brief description of the abuse rule which your action matched is: $1",
"abusefilter-blocker": "අපයෙදුම් පෙරහන",
"abusefilter-blockreason": "අපයෙදුම් පෙරහන මඟින් ස්වයන්ක්‍රියව වාරණය කර ඇත.\nගැලපුණු නීතියේ විස්තරය: $1",
@@ -72,8 +72,6 @@
"abusefilter-log-hide-hidden": "පොදු දර්ශනයෙන් මෙම ඇතුලත් කිරීම සඟවන්න",
"abusefilter-log-hide-reason": "හේතුව:",
"abusefilter-log-hide-forbidden": "අපයෙදුම් ලඝු ඇතුලත් කිරීම් සැඟවීමට ඔබ හට අවසර නොමැත.",
- "abusefilter-logentry-suppress": "සඟ \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "නොසඟ \"[[$1]]\"",
"abusefilter-management": "අපයෙදුම් පෙරහන් කළමනාකරණය",
"abusefilter-list": "සියලු පෙරහන්",
"abusefilter-list-id": "පෙරනයේ නම",
@@ -104,7 +102,6 @@
"abusefilter-list-options-scope": "පෙරහන් මේවා වෙතින් පෙන්වන්න:",
"abusefilter-list-options-scope-local": "ප්‍රාදේශීය විකිය",
"abusefilter-list-options-scope-global": "ගෝලීය නීතිරීති",
- "abusefilter-list-options-disabled": "අක්‍රීය කෙරුණු පෙරහන්:",
"abusefilter-list-options-hidedisabled": "අක්‍රීය පෙරහන් සඟවන්න",
"abusefilter-list-options-submit": "යාවත්කාල කරන්න",
"abusefilter-tools-text": "අපයෙදුම් පෙරහන් සූත්‍රකරණය සහ නිදොස් කිරීමෙහිදී ප්‍රයෝජනවත් විය හැකි මෙවලම් කිහිපයක් මෙන්න.",
@@ -137,7 +134,6 @@
"abusefilter-edit-consequences": "ගැළපුණු විට සිදු කල යුතු ක්‍රියාකාරකම්",
"abusefilter-edit-action-warn": "පරිශීලකට අවවාද කිරීමෙන් පසු මෙම ක්‍රියාවන් පුරන්න",
"abusefilter-edit-action-disallow": "ප්‍රශ්න විමසීමේදී ක්‍රියාවක් සිදු කිරීමෙන් පරිශීලක වලක්වන්න.",
- "abusefilter-edit-action-flag": "අපයෙදුම් ලඝු සටහනෙහි සංස්කරණය ධජිකරණය කරන්න",
"abusefilter-edit-action-blockautopromote": "පරිශීලකගේ ස්වයංතහවුරුකිරීම් තත්වය අහෝසි කරන්න",
"abusefilter-edit-action-degroup": "සියලුම හිමිකම් සමූහයන්ගෙන් මෙම පරිශිලකයා ඉවත් කරන්න",
"abusefilter-edit-action-block": "පරිශීලකගේ සහ/හෝ අයිපී ලිපිනය සංස්කරණයෙන් වාරණය කරන්න",
@@ -146,7 +142,6 @@
"abusefilter-edit-action-tag": "ඉදිරි නිර්ක්ෂණ සඳහා සංස්කරණය ටැග් කරන්න",
"abusefilter-edit-throttle-count": "අවසරදෙන ක්‍රියාකාරකම් ගණන:",
"abusefilter-edit-throttle-period": "කාලපරිච්ඡේදය:",
- "abusefilter-edit-throttle-seconds": "{{PLURAL:$1|තත්පර|තත්පර}} $1 ක්",
"abusefilter-edit-warn-message": "අවවාද සඳහා යොදාගත හැකි පද්ධති පණිවුඩය:",
"abusefilter-edit-warn-other": "අනිත් පණිවුඩය",
"abusefilter-edit-warn-other-label": "අනෙත් පණිවුඩයේ පිටු නාමය:\n:''(මාධ්‍යවිකි උපසර්ගය නොමැතිව)''",
@@ -227,18 +222,18 @@
"abusefilter-edit-builder-vars-oldsize": "පැරණි පිටුවේ ප්‍රමාණය",
"abusefilter-edit-builder-vars-removedlines": "සංස්කරණයේදී ඉවත් කෙරූ පේළි",
"abusefilter-edit-builder-vars-summary": "සාරාංශය/හේතුව සංස්කරණය කරන්න",
- "abusefilter-edit-builder-vars-article-id": "පිටු හැඳුනුම",
- "abusefilter-edit-builder-vars-article-ns": "පිටු නාමඅවකාශය",
- "abusefilter-edit-builder-vars-article-text": "පිටුවේ මාතෘකාව (නාමඅවකාශයක් නොමැතිව)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "සම්පූර්ණ පිටු නාමය",
+ "abusefilter-edit-builder-vars-page-id": "පිටු හැඳුනුම",
+ "abusefilter-edit-builder-vars-page-ns": "පිටු නාමඅවකාශය",
+ "abusefilter-edit-builder-vars-page-title": "පිටුවේ මාතෘකාව (නාමඅවකාශයක් නොමැතිව)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "සම්පූර්ණ පිටු නාමය",
"abusefilter-edit-builder-vars-movedfrom-id": "ගෙනයාම් මූලාශ්‍ර පිටුවේ පිටු හැඳුනුම",
"abusefilter-edit-builder-vars-movedfrom-ns": "ගෙනයාම් මූලාශ්‍ර පිටුවේ නාමඅවකාශය",
- "abusefilter-edit-builder-vars-movedfrom-text": "ගෙනයාම් මූලාශ්‍ර පිටුවේ මාතෘකාව",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "ගෙනයාම් මූලාශ්‍ර පිටුවේ සම්පූර්ණ මාතෘකාව",
+ "abusefilter-edit-builder-vars-movedfrom-title": "ගෙනයාම් මූලාශ්‍ර පිටුවේ මාතෘකාව",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "ගෙනයාම් මූලාශ්‍ර පිටුවේ සම්පූර්ණ මාතෘකාව",
"abusefilter-edit-builder-vars-movedto-id": "ගෙනයාම් ගමනාන්ත පිටුවේ පිටු හැඳුනුම",
"abusefilter-edit-builder-vars-movedto-ns": "ගෙනයාම් ගමනාන්ත පිටුවේ නාමඅවකාශය",
- "abusefilter-edit-builder-vars-movedto-text": "ගෙනයාම් ගමනාන්ත පිටුවේ මාතෘකාව",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "ගෙනයාම් ගමනාන්ත පිටුවේ සම්පූර්ණ මාතෘකාව",
+ "abusefilter-edit-builder-vars-movedto-title": "ගෙනයාම් ගමනාන්ත පිටුවේ මාතෘකාව",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "ගෙනයාම් ගමනාන්ත පිටුවේ සම්පූර්ණ මාතෘකාව",
"abusefilter-edit-builder-vars-user-editcount": "පරිශීලකයාගේ සංස්කරණ ගණන",
"abusefilter-edit-builder-vars-user-age": "පරිශීලක ගිණුමෙහි වයස",
"abusefilter-edit-builder-vars-user-name": "පරිශීලක ගිණුමෙහි නම",
@@ -343,7 +338,6 @@
"abusefilter-topnav-import": "පෙරහන ආයාත කරන්න",
"abusefilter-log-name": "අපයෙදුම් පෙරහන් ලඝු සටහන",
"abusefilter-log-header": "පෙරහන් වෙත සිදු කරන ලද වෙනස්කම් වල සාරාංශයක් මෙම ලඝු සටහනෙන් පෙන්වයි.\nසම්පූර්ණ විස්තර සඳහා, මෑත පෙරහන් වෙනස්කම්වල [[Special:AbuseFilter/history|ලැයිස්තුව]] බලන්න.",
- "abusefilter-log-entry-modify": "$1 වෙනස්කරන ලදී ($2)",
"abusefilter-log-noresults": "ප්‍රතිඵල නොමැත",
"abusefilter-diff-title": "අනුවාද අතර වෙනස්කම්",
"abusefilter-diff-item": "අයිතමය",
diff --git a/AbuseFilter/i18n/sk.json b/AbuseFilter/i18n/sk.json
index a76a4474..a3ee9de9 100644
--- a/AbuseFilter/i18n/sk.json
+++ b/AbuseFilter/i18n/sk.json
@@ -7,14 +7,15 @@
"Sudo77(new)",
"Kusavica",
"Matma Rex",
- "TomášPolonec"
+ "TomášPolonec",
+ "Patriccck"
]
},
"abusefilter-desc": "Vykonáva automatickú heuristiku úprav.",
"abusefilter": "Nastavenie filtra zneužití",
"abuselog": "Záznam zneužití",
"abusefilter-intro": "Vitajte v rozhraní na správu Filtrov zneužití.\nFilter zneužití je automatizovaný softvérový mechanizmus, ktorý na všetky operácie používa automatickú heuristiku.\nToto rozhranie zobrazuje zoznam definovaných filtrov a umožňuje ich zmenu.",
- "abusefilter-mustbeeditor": "Z bezpečnostných dôvodov môžu toto rozhraniepoužívať iba používatelia s právom meniť filtre zneužitia.",
+ "abusefilter-mustviewprivateoredit": "Z bezpečnostných dôvodov môžu toto rozhranie používať len používatelia s oprávnením spravovať filtre zneužitia alebo prezerať neverejné filtre.",
"abusefilter-warning": "'''Upozornenie:''' Táto činnosť bola automaticky identifikovaná ako škodlivá.\nNekonštruktívne úpravy budú rýchlo vrátené a zjavné alebo opakované nekonštruktívne zásahy budú mať za následok zablokovanie vášho účtu alebo IP adresy. Ak veríte, že je táto úprava konštruktívna, môžete znova kliknúť na Uložiť, čím ju potvrdíte.\nStručný popis pravidla zneužitia, ktoré zachytilo vašu úpravu, je: $1",
"abusefilter-disallowed": "Táto činnosť bola automaticky identifikovaná ako škodlivá a preto bola odmietnutá.\nAk veríte, že je táto úprava konštruktívna, kontaktujte prosím správcu a oznámte im, čo ste sa {{GENDER:|pokúšal|pokúšala|pokúšali}} urobiť.\nStručný popis pravidla zneužitia, ktoré zachytilo vašu úpravu, je: $1",
"abusefilter-blocked-display": "Táto činnosť bola automaticky identifikovaná ako škodlivá a preto bola odmietnutá.\nNaviac, na ochranu {{GRAMMAR:genitív|{{SITENAME}}}} boli zablokované úpravy z vášho používateľského účtu a všetkých príslušných IP adries.\nAk veríte, že to je omyl, kontaktujte prosím správcu.\nStručný popis pravidla zneužitia, ktoré zachytilo vašu úpravu, je: $1",
@@ -31,8 +32,8 @@
"right-abusefilter-private": "Zobraziť osobné údaje v zázname zneužití",
"right-abusefilter-modify-restricted": "Zmeniť filtre zneužitia s obmedzenými operáciami",
"right-abusefilter-revert": "Vrátiť všetky zmeny vykonané zadaným filtrom zneužitia",
- "right-abusefilter-view-private": "Zobraziť filtre zneužitia označené ako súkromné",
- "right-abusefilter-log-private": "Zobrazenie protokolovacích záznamov filtrov zneužívania označených ako tajné",
+ "right-abusefilter-view-private": "Zobraziť filtre zneužitia označené ako neverejné",
+ "right-abusefilter-log-private": "Zobrazenie záznamov filtrov zneužitia označených ako neverejné",
"right-abusefilter-hide-log": "Skryť položky v zázname zneužití",
"right-abusefilter-hidden-log": "Zobraziť skryté položky v zázname zneužití",
"right-abusefilter-modify-global": "Vytvoriť alebo upraviť globálne filtre zneužívania",
@@ -43,7 +44,8 @@
"action-abusefilter-private": "zobraziť privátne údaje v zázname filtra zneužití",
"action-abusefilter-modify-restricted": "zmeniť filtre zneužití s obmedzenými operáciami",
"action-abusefilter-revert": "vrátiť všetky zmeny vykonané daným filtrom zneužití",
- "action-abusefilter-view-private": "zobraziť filtre zneužitia označené ako súkromné",
+ "action-abusefilter-view-private": "zobraziť filtre zneužitia označené ako neverejné",
+ "action-abusefilter-log-private": "zobraziť záznamy filtrov zneužitia označených ako neverejné",
"abusefilter-log": "Záznam filtra zneužití",
"abusefilter-log-summary": "Tento záznam zobrazuje zoznam všetkých operácií, ktoré filtre zachytili.",
"abusefilter-log-search": "Hľadať v zázname filtra zneužití",
@@ -51,11 +53,18 @@
"abusefilter-log-search-filter": "ID filtra:",
"abusefilter-log-search-title": "Názov:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Účinok:",
+ "abusefilter-log-search-impact-all": "Všetky akcie",
+ "abusefilter-log-search-impact-saved": "Len uložené úpravy",
+ "abusefilter-log-search-impact-not-saved": "Bez uložených úprav",
"abusefilter-log-search-entries-label": "Viditeľnosť:",
"abusefilter-log-search-entries-all": "Všetky vstupy",
+ "abusefilter-log-search-action-taken-label": "Vykonaná akcia:",
+ "abusefilter-log-search-action-taken-any": "Všetky",
"abusefilter-log-search-submit": "Hľadať",
"abusefilter-log-entry": "$1: $2 spustil filter zneužití, pri vykonávaní operácie „$3“ na $4.\nVykonané opatrenia: $5;\nPopis filtra: $6",
- "abusefilter-log-detailedentry-meta": "$1: $2 spustil filter $3, vykonaná operácia „$4“ na $5.\nVykonané opatrenia: $6;\nPopis filtra: $7 ($8)",
+ "abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|spustil|spustila|spustil(a)}} filter pri činnosti „$3“ na $4.\nVykonané opatrenia: $5;\nPopis filtra: $6 ($7)",
+ "abusefilter-log-detailedentry-meta": "$1: $2 {{GENDER:$9|spustil|spustila|spustil(a)}} filter $3, vykonaná operácia „$4“ na $5.\nVykonané opatrenia: $6;\nPopis filtra: $7 ($8)",
"abusefilter-log-detailedentry-global": "globálny filter $1",
"abusefilter-log-detailedentry-local": "filter $1",
"abusefilter-log-detailslink": "podrobnosti",
@@ -75,14 +84,13 @@
"abusefilter-log-hidden-implicit": "(položka skrytá, pretože bola odstránená revízia)",
"abusefilter-log-cannot-see-details": "Nemáte oprávnenie na prehliadanie podrobností tejto položky.",
"abusefilter-log-details-hidden": "Nemôžete si pozrieť podrobnosti tejto položky, pretože je verejnosti skrytá.",
+ "abusefilter-log-private-not-included": "Jeden alebo viac filtrov s uvedeným ID je neverejných. Keďže nemáte oprávnenie prezerať si podrobnosti neverejných filtrov, neboli tieto filtre prehľadávané.",
"abusefilter-log-hide-legend": "Skryť položku v zázname",
"abusefilter-log-hide-id": "ID položky záznamu:",
"abusefilter-log-hide-hidden": "Skryť túto položku pred verejnosťou",
"abusefilter-log-hide-reason": "Dôvod:",
"abusefilter-log-hide-forbidden": "Nemáte oprávnenie skrývať položky záznamu zneužití.",
- "abusefilter-logentry-suppress": "skryl „[[$1]]“",
- "abusefilter-logentry-unsuppress": "odkryl „[[$1]]“",
- "logentry-abusefilter-hit": "$1 spustil $4, ktorý vykonal činnosť „$5“ na $3. Vykonané kroky: $6 ($7)",
+ "logentry-abusefilter-hit": "$1 {{GENDER:$2|spustil|spustila|spustil(a)}} $4, ktorý vykonal činnosť „$5“ na $3. Vykonané kroky: $6 ($7)",
"abusefilter-management": "Správa filtra zneužití",
"abusefilter-list": "Všetky filtre",
"abusefilter-list-id": "ID filtra",
@@ -96,8 +104,8 @@
"abusefilter-list-limit": "Počet na stránku:",
"abusefilter-list-lastmodified": "Posledná zmena",
"abusefilter-list-group": "Skupinový filter",
- "abusefilter-hidden": "Súkromné",
- "abusefilter-unhidden": "Verejné",
+ "abusefilter-hidden": "Neverejný",
+ "abusefilter-unhidden": "Verejný",
"abusefilter-enabled": "Zapnuté",
"abusefilter-deleted": "Zmazané",
"abusefilter-disabled": "Vypnuté",
@@ -114,8 +122,14 @@
"abusefilter-list-options-scope-local": "Lokálna wiki",
"abusefilter-list-options-scope-global": "Globálne pravidlá",
"abusefilter-list-options-scope-all": "Lokálne aj globálne pravidlá",
- "abusefilter-list-options-disabled": "Vypnuté filtre:",
+ "abusefilter-list-options-further-options": "Ďalšie možnosti:",
"abusefilter-list-options-hidedisabled": "Skryť vypnuté filtre",
+ "abusefilter-list-options-hideprivate": "Skryť neverejné filtre",
+ "abusefilter-list-options-searchfield": "Hľadať v podmienkach:",
+ "abusefilter-list-options-searchoptions": "Spôsob hľadania:",
+ "abusefilter-list-options-search-like": "Obyčajný výraz",
+ "abusefilter-list-options-search-rlike": "Regulárny výraz",
+ "abusefilter-list-options-search-irlike": "Regulárny výraz nerozlišujúci veľkosť písmen",
"abusefilter-list-options-submit": "Aktualizovať",
"abusefilter-tools-text": "Tu sa nachádzajú niektoré nástroje, ktoré možno využiť pri tvorbe a ladení filtrov zneužitia.",
"abusefilter-tools-expr": "Tester výrazov",
@@ -134,10 +148,10 @@
"abusefilter-edit-status-label": "Štatistika:",
"abusefilter-edit-status": "{{PLURAL:$1|Z poslednej $1 operácie|Z posledných $1 operácií}} tomuto filtru {{PLURAL:$2|zodpovedala|zodpovedali|zodpovedalo}} $2 ($3 %).",
"abusefilter-edit-status-profile": "{{PLURAL:$1|Z poslednej $1 operácie|Z posledných $1 operácií}} tomuto filtru {{PLURAL:$2|zodpovedala|zodpovedali|zodpovedalo}} $2 ($3 %).\nPriemerný čas behu je $4 ms a spotrebuje $5 {{PLURAL:$5|podmienku|podmienky|podmienok}} z celkového povoleného počtu podmienok.",
- "abusefilter-edit-throttled": "'''Upozornenie''': V rámci bezpečnostných opatrení bol tento filter automaticky vypnutý. Dosiahol hodnotu obmedzenia $1 % operácií, ktoré mu zodpovedajú.",
"abusefilter-edit-new": "Nový filter",
"abusefilter-edit-save": "Uložiť filter",
"abusefilter-edit-id": "ID filtra:",
+ "abusefilter-edit-switch-editor": "Prepnúť editor",
"abusefilter-edit-description": "Popis:\n:''(verejne viditeľný)''",
"abusefilter-edit-group": "Skupinový filter:",
"abusefilter-edit-flags": "Príznaky:",
@@ -146,7 +160,7 @@
"abusefilter-edit-hidden": "Skryť verejné zobrazovanie podrobností filtra",
"abusefilter-edit-global": "Globálny filter",
"abusefilter-edit-rules": "Pravidlá:",
- "abusefilter-edit-notes": "Poznámky:\n:''(súkromný)''",
+ "abusefilter-edit-notes": "Poznámky:",
"abusefilter-edit-lastmod": "Posledná zmena filtra:",
"abusefilter-edit-lastmod-text": "$1, $2",
"abusefilter-edit-hitcount": "Počet zásahov filtra:",
@@ -156,13 +170,13 @@
"abusefilter-edit-action-blockautopromote": "Odobrať používateľovi stav „zaregistrovaný”",
"abusefilter-edit-action-degroup": "Odstrániť používateľa zo všetkých privilegovaných skupín",
"abusefilter-edit-action-block": "Zablokovať úpravy používateľa a/alebo IP adresy",
- "abusefilter-edit-action-throttle": "Spustiť operáciu iba ak používateľ dosiahne limit rýchlosti úprav",
+ "abusefilter-edit-action-throttle": "Spustiť operáciu len ak používateľ dosiahne limit rýchlosti úprav",
"abusefilter-edit-action-rangeblock": "Zablokovať /16 rozsah, z ktorého pochádza adresa používateľa.",
"abusefilter-edit-action-tag": "Označiť úpravu na ďalšiu kontrolu.",
"abusefilter-edit-throttle-count": "Počet povolených operácií:",
"abusefilter-edit-throttle-period": "Časový interval:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekunda|sekundy|sekúnd}}",
"abusefilter-edit-throttle-groups": "Obmedzenie rýchlosti úprav skupiny:\n:''(jedna na riadok, viaceré oddelené čiarkami)''",
+ "abusefilter-throttle-details": "Povoliť $1 {{PLURAL:$1|akciu|akcie|akcií}} {{PLURAL:$2|každú sekundu|každé $2 sekundy|každých $2 sekúnd}}, limity počítané pre: $3",
"abusefilter-edit-warn-message": "Systémová správa použitá pri upozornení:",
"abusefilter-edit-warn-other": "Iná správa",
"abusefilter-edit-warn-other-label": "Názov stránky inej správy:\n:''(bez predpony MediaWiki)''",
@@ -199,7 +213,9 @@
"abusefilter-edit-builder-op-arithmetic-pow": "Umocnenie (**)",
"abusefilter-edit-builder-group-op-comparison": "Operátory porovnávania",
"abusefilter-edit-builder-op-comparison-equal": "Rovná sa (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Hodnota a typ sa rovnajú (===)",
"abusefilter-edit-builder-op-comparison-notequal": "Nerovná sa (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Hodnota alebo typ sa nerovnajú (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Menší ako (<)",
"abusefilter-edit-builder-op-comparison-gt": "Väčší ako (>)",
"abusefilter-edit-builder-op-comparison-lte": "Menší alebo rovný ako (<=)",
@@ -219,22 +235,29 @@
"abusefilter-edit-builder-misc-cond": "Podmienka (if X then Y else Z)",
"abusefilter-edit-builder-group-funcs": "Funkcie",
"abusefilter-edit-builder-funcs-length": "Dĺžka reťazca (length)",
- "abusefilter-edit-builder-funcs-lcase": "Na malé písmená (lcase)",
+ "abusefilter-edit-builder-funcs-lcase": "Zmeniť na malé písmená (lcase)",
+ "abusefilter-edit-builder-funcs-ucase": "Zmeniť na veľké písmená (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normalizovať zameniteľné znaky (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normalizovať reťazec a hľadať v ňom viacero podreťazcov v režime OR (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Normalizovať reťazec a hľadať v ňom viacero podreťazcov v režime AND (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Odstrániť dvojité znaky (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Špeciálne znaky / znakov celkom (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normalizovať (norm)",
"abusefilter-edit-builder-funcs-count": "Koľkokrát sa reťazec X nachádza v reťazci Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Koľkokrát sa regulárny výraz X vyskytuje v texte Y (rcount)",
- "abusefilter-edit-builder-funcs-rmwhitespace": "Odstrániť netlačiteľné znaky (rmwhitespace)",
+ "abusefilter-edit-builder-funcs-get_matches": "Pole zhôd regulárnych výrazov s textom pre každú skupinu zachytenia (get_matches)",
+ "abusefilter-edit-builder-funcs-rmwhitespace": "Odstrániť medzery a iné biele znaky (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Odstrániť špeciálne znaky (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Patrí IP do rozsahu? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Hľadať viacero reťazcov v texte (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Hľadať v reťazci viacero podreťazcov v režime OR (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Hľadať v reťazci viacero podreťazcov v režime AND (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Zistí, či je daný argument rovný (===) ľubovoľnému z nasledujúcich argumentov (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Podreťazec (substr)",
"abusefilter-edit-builder-funcs-strpos": "Pozícia podreťazca v reťazci (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Nahradiť reťazec reťazcom (str_replace)",
- "abusefilter-edit-builder-funcs-rescape": "Označkovať reťazec ako literál v regulárnom výraze (rescape)",
+ "abusefilter-edit-builder-funcs-rescape": "Označkovať reťazec ako literál pre regulárny výraz (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Nastaviť premennnú (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Normalizovať HTML entity na unicode znaky (sanitize)",
"abusefilter-edit-builder-group-vars": "Premenné",
"abusefilter-edit-builder-vars-accountname": "Názov účtu (on account creation)",
"abusefilter-edit-builder-vars-timestamp": "Čas úpravy v unixovom formáte",
@@ -244,21 +267,21 @@
"abusefilter-edit-builder-vars-diff": "Zjednotený diff zmien vykonaných pri úprave",
"abusefilter-edit-builder-vars-newsize": "Nová veľkosť stránky",
"abusefilter-edit-builder-vars-oldsize": "Stará veľkosť stránky",
+ "abusefilter-edit-builder-vars-old-content-model": "Pôvodný model obsahu",
"abusefilter-edit-builder-vars-removedlines": "Riadky odstránené pri úprave",
"abusefilter-edit-builder-vars-summary": "Zhrnutie úprav/zdôvodnenie",
- "abusefilter-edit-builder-vars-article-id": "ID stránky",
- "abusefilter-edit-builder-vars-article-ns": "Menný priestor stránok",
- "abusefilter-edit-builder-vars-article-text": "Názov stránky (bez menného priestoru)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Plný názov stránky",
- "abusefilter-edit-builder-vars-article-views": "Zobrazenia stránky",
- "abusefilter-edit-builder-vars-movedfrom-id": "ID stránky presunutia zdrojovej stránky",
- "abusefilter-edit-builder-vars-movedfrom-ns": "Menný priestor presunutia zdrojovej stránky",
- "abusefilter-edit-builder-vars-movedfrom-text": "Názov presunutia zdrojovej stránky",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Plný názov presunutia zdrojovej stránky",
- "abusefilter-edit-builder-vars-movedto-id": "ID stránky presunutia cieľovej stránky",
- "abusefilter-edit-builder-vars-movedto-ns": "Menný priestor presunutia cieľovej stránky",
- "abusefilter-edit-builder-vars-movedto-text": "Názov presunutia cieľovej stránky",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Plný názov presunutia cieľovej stránky",
+ "abusefilter-edit-builder-vars-page-id": "ID stránky",
+ "abusefilter-edit-builder-vars-page-ns": "Menný priestor stránky",
+ "abusefilter-edit-builder-vars-page-title": "Názov stránky (bez menného priestoru)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Úplný názov stránky",
+ "abusefilter-edit-builder-vars-movedfrom-id": "ID presúvanej stránky",
+ "abusefilter-edit-builder-vars-movedfrom-ns": "Menný priestor presúvanej stránky",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Názov presúvanej stránky",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Úplný názov presúvanej stránky",
+ "abusefilter-edit-builder-vars-movedto-id": "ID stránky, na ktorú sa presúva",
+ "abusefilter-edit-builder-vars-movedto-ns": "Menný priestor, do ktorého sa presúva",
+ "abusefilter-edit-builder-vars-movedto-title": "Názov, na ktorý sa stránka presúva",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Úplný názov, na ktorý sa stránka presúva",
"abusefilter-edit-builder-vars-user-editcount": "Počet úprav používateľa",
"abusefilter-edit-builder-vars-user-age": "Vek používateľského účtu",
"abusefilter-edit-builder-vars-user-name": "Názov používateľského účtu",
@@ -266,22 +289,37 @@
"abusefilter-edit-builder-vars-user-rights": "Práva, ktoré má používateľ",
"abusefilter-edit-builder-vars-user-blocked": "Či je používateľ zablokovaný",
"abusefilter-edit-builder-vars-user-emailconfirm": "Čas, kedy bola overená e-mailová adresa",
- "abusefilter-edit-builder-vars-recent-contributors": "Poslední piati prispievatelia tejto stránky",
+ "abusefilter-edit-builder-vars-recent-contributors": "Posledných desať prispievateľov tejto stránky",
"abusefilter-edit-builder-vars-first-contributor": "Prvý autor tejto stránky",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Posledných desať používateľov, ktorí editovali presúvanú stránku",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Prvý používateľ, ktorý editoval presúvanú stránku",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Posledných desať používateľov, ktorí editovali stránku, na ktorú sa presúva",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Prvý používateľ, ktorý editoval stránku, na ktorú sa presúva",
"abusefilter-edit-builder-vars-all-links": "Všetky externé odkazy v novom texte",
"abusefilter-edit-builder-vars-added-links": "Všetky externé odkazy pridané v úprave",
"abusefilter-edit-builder-vars-removed-links": "Všetky externé odkazy odstránené v úprave",
- "abusefilter-edit-builder-vars-old-text": "Starý wikitext stránky pred úpravou",
+ "abusefilter-edit-builder-vars-old-text": "Pôvodný wikitext stránky pred úpravou (už sa nepoužíva)",
"abusefilter-edit-builder-vars-new-text": "Nový wikitext stránky po úprave",
- "abusefilter-edit-builder-vars-new-text-stripped": "Nový text stránky zbavený všetkého formátovania",
- "abusefilter-edit-builder-vars-new-html": "Vytvorený HTML zdroj novej revízie",
- "abusefilter-edit-builder-vars-restrictions-edit": "Upraviť úroveň zamknutia stránky",
- "abusefilter-edit-builder-vars-restrictions-move": "Presunúť úroveň zamknutia stránky",
- "abusefilter-edit-builder-vars-restrictions-create": "Ochrániť stránku",
- "abusefilter-edit-builder-vars-restrictions-upload": "Ochrana súboru pred nahraním",
- "abusefilter-edit-builder-vars-old-text-stripped": "Starý text stránky zbavený všetkých značiek",
+ "abusefilter-edit-builder-vars-new-pst": "Nový wikitext stránky, po transformácii pred uložením",
+ "abusefilter-edit-builder-vars-diff-pst": "Zjednotený diff zmien vykonaných pri úprave, po transformácii pred uložením",
+ "abusefilter-edit-builder-vars-addedlines-pst": "Riadky pridané pri úprave, po transformácii pred uložením",
+ "abusefilter-edit-builder-vars-new-text-stripped": "Nový text stránky zbavený formátovania",
+ "abusefilter-edit-builder-vars-new-html": "Vygenerovaný HTML markup novej revízie",
+ "abusefilter-edit-builder-vars-restrictions-edit": "Úroveň zámku stránky pre úpravy",
+ "abusefilter-edit-builder-vars-restrictions-move": "Úroveň zámku stránky pre presuny",
+ "abusefilter-edit-builder-vars-restrictions-create": "Úroveň zámku stránky pre založenie",
+ "abusefilter-edit-builder-vars-restrictions-upload": "Úroveň zámku súboru pre upload",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Úroveň zámku presúvanej stránky pre úpravy",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Úroveň zámku presúvanej stránky pre presuny",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Úroveň zámku presúvanej stránky pre založenie",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Úroveň zámku presúvanej stránky pre upload súboru",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Úroveň zámku stránky, na ktorú sa presúva, pre úpravy",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Úroveň zámku stránky, na ktorú sa presúva, pre presuny",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Úroveň zámku stránky, na ktorú sa presúva, pre založenie",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Úroveň zámku stránky, na ktorú sa presúva, pre upload",
+ "abusefilter-edit-builder-vars-old-text-stripped": "Pôvodný text stránky, zbavený všetkých značiek",
"abusefilter-edit-builder-vars-old-links": "Odkazy na stránke pred úpravou",
- "abusefilter-edit-builder-vars-old-html": "Starý wikitext stránky prevedený do HTML",
+ "abusefilter-edit-builder-vars-old-html": "Pôvodný wikitext stránky, prevedený na HTML (už sa nepoužíva)",
"abusefilter-edit-builder-vars-minor-edit": "Či je alebo nie je táto úprava označená ako drobná",
"abusefilter-edit-builder-vars-file-sha1": "SHA1 haš obsahu súboru",
"abusefilter-edit-builder-vars-file-size": "Veľkosť súboru v bajtoch",
@@ -325,15 +363,15 @@
"abusefilter-exception-regexfailure": "Chyba v regulárnom výraze „$3“ na znaku $1: „$2“",
"abusefilter-exception-overridebuiltin": "Neplatné prekrytie vstavanej premennej „$2“ na pozícii $1.",
"abusefilter-exception-outofbounds": "Požadovaná bola neexistujúca položka zoznamu $2 (veľkosť zoznamu = $3) na pozícii $1.",
- "abusefilter-exception-notlist": "Požaduje sa položka poľa premennej, ktorá nie je pole na pozícii $1.",
+ "abusefilter-exception-notarray": "Požaduje sa položka poľa premennej, ktorá nie je pole na pozícii $1.",
"abusefilter-action-tag": "Značka",
- "abusefilter-action-throttle": "Obmedziť",
- "abusefilter-action-warn": "Upoz.",
- "abusefilter-action-blockautopromote": "Blokovať autom. povýšenie",
- "abusefilter-action-block": "Blokovať",
- "abusefilter-action-degroup": "Odstrániť zo skupín",
+ "abusefilter-action-throttle": "Obmedzenie",
+ "abusefilter-action-warn": "Upozornenie",
+ "abusefilter-action-blockautopromote": "Blokovanie autom. povýšenia",
+ "abusefilter-action-block": "Zablokovanie",
+ "abusefilter-action-degroup": "Odstránenie zo skupin",
"abusefilter-action-rangeblock": "Blokovanie rozsahu",
- "abusefilter-action-disallow": "Zakázať",
+ "abusefilter-action-disallow": "Zákaz",
"abusefilter-revert-title": "Vrátiť všetky zmeny filtra $1",
"abusefilter-revert-intro": "Tento formulár vám umožňuje vrátiť všetky zmeny vykonané filtrom zneužitia $1.\nProsím, buďte opatrní pri používaní tohto nástroja.",
"abusefilter-revert-preview-item": "$1: $2 vykonal $3 na $4. Operácie, ktoré sa majú vrátiť: $5 ($6)",
@@ -341,7 +379,7 @@
"abusefilter-revert-periodstart": "Začiatok obdobia:",
"abusefilter-revert-periodend": "Koniec obdobia:",
"abusefilter-revert-search": "Vyberte operácie",
- "abusefilter-revert-filter": "Filter:",
+ "abusefilter-revert-filter": "ID filtra:",
"abusefilter-revert-preview-intro": "Dolu je zoznam operácií vykonaných filtrom zneužitia, ktoré táto operácia vráti.\nProsím, pozorne ich skontrolujte a potvrďte svoj výber kliknutím na na „Potvrdiť“.",
"abusefilter-revert-confirm": "Potvrdiť",
"abusefilter-revert-success": "Vrátili ste všetky zmeny vykonané filtrom zneužitia [[Special:AbuseFilter/$1|$2]].",
@@ -354,12 +392,20 @@
"abusefilter-test-submit": "Otestovať",
"abusefilter-test-load": "Načítať",
"abusefilter-test-user": "Zmeny vykonané používateľom:",
+ "abusefilter-test-nobots": "Skryť úpravy botov",
"abusefilter-test-period-start": "Zmeny vykonané po:",
"abusefilter-test-period-end": "Zmeny vykonané pred:",
- "abusefilter-test-page": "Vykonané zmeny stránky:",
- "abusefilter-test-shownegative": "Zobraziť úpravy, ktoré nezodpovedajú filtru",
+ "abusefilter-test-page": "Dotknutá stránka:",
+ "abusefilter-test-shownegative": "Zobraziť aj úpravy, ktoré filtru nezodpovedajú",
"abusefilter-test-syntaxerr": "Filter, ktorý ste zadali obsahoval syntaktickú chybu.\nKompletné vysvetlenie dostanete po kliknutí na tlačidlo „Skontrolovať syntax“.",
"abusefilter-test-badtitle": "Zadaný názov stránky je neplatný. Možno obsahuje jeden či viac znakov, ktoré nie je možné používať v názvoch stránok.",
+ "abusefilter-test-action": "Typ akcie:",
+ "abusefilter-test-search-type-all": "Všetky akcie",
+ "abusefilter-test-search-type-edit": "Úpravy",
+ "abusefilter-test-search-type-move": "Presuny",
+ "abusefilter-test-search-type-delete": "Zmazania",
+ "abusefilter-test-search-type-upload": "Uploady súborov",
+ "abusefilter-test-search-type-createaccount": "Založenia účtov",
"abusefilter-changeslist-examine": "preskúmať",
"abusefilter-examine": "Preskúmať jednotlivé zmeny",
"abusefilter-examine-intro": "Táto stránka vám umožňuje preskúmať premenné vytvorené Filtrom zneužití pre jednotlivé zmeny a otestovať ich voči filtrom.",
diff --git a/AbuseFilter/i18n/skr-arab.json b/AbuseFilter/i18n/skr-arab.json
new file mode 100644
index 00000000..e7c16d92
--- /dev/null
+++ b/AbuseFilter/i18n/skr-arab.json
@@ -0,0 +1,51 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saraiki"
+ ]
+ },
+ "abusefilter-log-search-user": "ورتݨ آلا:",
+ "abusefilter-log-search-title": "عنوان:",
+ "abusefilter-log-search-wiki": "وکی:",
+ "abusefilter-log-search-impact": "اثر:",
+ "abusefilter-log-search-action-other": "ٻیا",
+ "abusefilter-log-search-action-any": "کوئی ہک",
+ "abusefilter-log-search-action-taken-any": "کوئی ہک",
+ "abusefilter-log-search-submit": "ڳولو",
+ "abusefilter-log-diff": "فرق",
+ "abusefilter-log-details-val": "قدر",
+ "abusefilter-log-noactions": "کوئی وی کائنی",
+ "abusefilter-log-hide-reason": "وجہ:",
+ "abusefilter-list": "سارے چھاݨے",
+ "abusefilter-list-id": "نتارے دی آئی ڈی",
+ "abusefilter-list-pattern": "نمونہ ترتیب نال",
+ "abusefilter-list-status": "حیثیت",
+ "abusefilter-list-public": "عوامی تفصیل",
+ "abusefilter-list-consequences": "نتیجے",
+ "abusefilter-deleted": "مٹا ݙتے",
+ "abusefilter-tools-reautoconfirm-user": "ورتݨ آلا:",
+ "abusefilter-edit-switch-editor": "ایڈیٹر وٹاؤ",
+ "abusefilter-edit-field-description": "تفصیل",
+ "abusefilter-edit-field-conditions": "شرطاں",
+ "abusefilter-edit-throttle-page": "ورقہ",
+ "abusefilter-edit-disallow-other": "ٻیا سنیہا",
+ "abusefilter-edit-disallow-actions": "کم:",
+ "abusefilter-edit-tools": "آوزار:",
+ "abusefilter-history-timestamp": "ویلا",
+ "abusefilter-history-user": "ورتݨ آلا",
+ "abusefilter-history-deleted": "مٹا ݙتے",
+ "abusefilter-history-filterid": "چھاݨاں",
+ "abusefilter-history-select-user": "ورتݨ آلا:",
+ "abusefilter-history-diff": "تبدیلیاں",
+ "abusefilter-action-tag": "ٹیگ",
+ "abusefilter-action-warn": "خبردار",
+ "abusefilter-action-block": "پابندی لاؤ",
+ "abusefilter-revert-filter": "چھاݨے دی آئی ڈی:",
+ "abusefilter-revert-confirm": "تصدیق",
+ "abusefilter-test-search-type-all": "سارے کم",
+ "abusefilter-examine-user": "ورتݨ آلا:",
+ "abusefilter-view-private-submit": "ذاتی تفصیلاں ݙیکھو",
+ "abusefilter-view-private": "ذاتی تفصیلاں ݙیکھو",
+ "abusefilter-log-details-id": "لاگ آئی ڈی",
+ "abusefilter-log-ip-not-available": "دستیاب کائنی"
+}
diff --git a/AbuseFilter/i18n/sl.json b/AbuseFilter/i18n/sl.json
index 367e8c5a..f4f5fa1d 100644
--- a/AbuseFilter/i18n/sl.json
+++ b/AbuseFilter/i18n/sl.json
@@ -4,14 +4,14 @@
"Dbc334",
"Eleassar",
"Emperyan",
- "Matma Rex"
+ "Matma Rex",
+ "Janezdrilc"
]
},
"abusefilter-desc": "Pri urejanjih uporabi samodejno hevristiko",
"abusefilter": "Konfiguracija filtrov zlorab",
"abuselog": "Dnevnik zlorab",
"abusefilter-intro": "Dobrodošli v vmesniku upravljanja s filtri zlorab.\nFilter zlorab je samodejni mehanizem programja, ki uporabi samodejno hevristiko za vsa dejanja.\nVmesnik prikazuje seznam določenih filtrov in omogoča, da jih spremenite.",
- "abusefilter-mustbeeditor": "Iz varnostnih razlogov si vmesnik lahko ogledajo samo uporabniki s pravico spreminjanja filtrov zlorab.",
"abusefilter-warning": "'''Opozorilo:''' To dejanje je bilo samodejno zaznano kot škodljivo.\nNekoristna dejanja bodo hitro povrnjena,\nnezaslišana ali ponavljajoča nekoristna urejanja pa bodo sledila v blokado vašega računa ali IP-naslova.\nČe verjamete, da je to dejanje koristno, ga lahko ponovno potrdite.\nKratek opis pravila zlorab, ki mu je ustrezalo vaše dejanje: $1",
"abusefilter-disallowed": "To dejanje je bilo samodejno zaznano kot škodljivo in je zato prepovedano.\nČe verjamete, da je bilo vaše dejanje koristno, prosimo, obvestite administratorja o tem, kar ste skušali storiti.\nKratek opis pravila zlorab, ki mu je ustrezalo vaše dejanje: $1",
"abusefilter-blocked-display": "To dejanje je bilo samodejno prepoznano kot škodljivo\nin vam je zato bila njegova izvedba preprečena.\nPoleg tega je bilo zavoljo zaščite {{GRAMMAR:rodilnik|{{SITENAME}}}} vašemu uporabniškemu računu in vsem pripadajočim IP-naslovom preprečeno urejanje.\nČe se je to zgodilo po pomoti, se obrnite na administratorja.\nKratek opis pravila zlorab, kateremu je ustrezalo vaše dejanje: $1",
@@ -41,6 +41,7 @@
"action-abusefilter-modify-restricted": "spreminjanje filtra zlorab z omejenimi dejanji",
"action-abusefilter-revert": "povrnitev vse sprememb danega filtra zlorab",
"action-abusefilter-view-private": "ogled filtrov zlorab označenih kot zasebni",
+ "action-abusefilter-log-private": "prikaži dnevnike filtrov zlorab, ki so označeni kot zasebni",
"abusefilter-log": "Dnevnik filtrov zlorab",
"abusefilter-log-summary": "Ta dnevnik prikazuje seznam vseh dejanj, ki so jih ujeli filtri.",
"abusefilter-log-search": "Iskanje po dnevniku zlorab",
@@ -48,6 +49,15 @@
"abusefilter-log-search-filter": "ID filtra (ločeno z navpičnicami):",
"abusefilter-log-search-title": "Naslov:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Vpliv:",
+ "abusefilter-log-search-impact-all": "Vsa dejanja",
+ "abusefilter-log-search-impact-saved": "Samo shranjene spremembe",
+ "abusefilter-log-search-impact-not-saved": "Brez shranjenih sprememb",
+ "abusefilter-log-search-entries-label": "Vidljivost:",
+ "abusefilter-log-search-entries-all": "Vsi vpisi",
+ "abusefilter-log-search-entries-hidden": "Samo skriti vpisi",
+ "abusefilter-log-search-entries-visible": "Samo vidni vpisi",
+ "abusefilter-log-search-action-taken-any": "Katerikoli",
"abusefilter-log-search-submit": "Iskanje",
"abusefilter-log-entry": "$1: $2 je med izvajanjem dejanja »$3« na $4 {{GENDER:$8|sprožil|sprožila|sprožil(-a)}} filter zlorab.\nSprejeti ukrepi: $5;\nOpis filtra: $6",
"abusefilter-log-detailedentry-meta": "$1: $2 je med izvajanjem dejanja »$4« na $5 {{GENDER:$9|sprožil|sprožila|sprožil(-a)}} $3.\nSprejeti ukrepi: $6;\nOpis filtra: $7 ($8)",
@@ -60,12 +70,14 @@
"abusefilter-log-details-var": "Spremenljivka",
"abusefilter-log-details-val": "Vrednost",
"abusefilter-log-details-vars": "Parametri dejanja",
- "abusefilter-log-details-private": "Zasebni podatki",
+ "abusefilter-log-details-private": "Zasebne podrobnosti o dnevniku",
"abusefilter-log-details-ip": "Izvirni IP-naslov",
+ "abusefilter-log-details-checkuser": "Preveri uporabnika",
"abusefilter-log-noactions": "nobeno",
"abusefilter-log-details-diff": "Spremembe narejene v urejanju",
"abusefilter-log-linkoncontribs": "dnevnik zlorab",
"abusefilter-log-linkoncontribs-text": "Dnevnik zlorab {{GENDER:$1|tega uporabnika|te uporabnice}}",
+ "abusefilter-log-linkonhistory": "poglej dnevnik filtrov zlorab",
"abusefilter-log-hidden": "(vnos je skrit)",
"abusefilter-log-hidden-implicit": "(skrito, ker je redakcija izbrisana)",
"abusefilter-log-cannot-see-details": "Nimate dovoljenja za ogled podrobnosti tega vnosa.",
@@ -74,13 +86,16 @@
"abusefilter-log-hide-id": "ID dnevniškega vnosa:",
"abusefilter-log-hide-hidden": "Skrij ta vnos pred javnim vpogledom",
"abusefilter-log-hide-reason": "Razlog:",
+ "abusefilter-log-hide-reason-other": "Drug/dodaten razlog:",
"abusefilter-log-hide-forbidden": "Nimate dovoljenja za skrivanje dnevniških vnosov zlorab.",
- "abusefilter-logentry-suppress": "je skril(-a) »[[$1]]«",
- "abusefilter-logentry-unsuppress": "je prikazal(-a) »[[$1]]«",
"logentry-abusefilter-hit": "$1 je {{GENDER:$2|sprožil|sprožila|sprožil(-a)}} $4 z dejanjem »$5« na $3. Ukrepi: $6 ($7)",
+ "log-action-filter-abusefilter": "Vrsta spremembe filtra:",
+ "log-action-filter-abusefilter-create": "Ustvaritev novega filtra",
+ "log-action-filter-abusefilter-modify": "Sprememba filtra",
"abusefilter-management": "Upravljanje filtrov zlorab",
"abusefilter-list": "Vsi filtri",
"abusefilter-list-id": "ID filtra",
+ "abusefilter-list-pattern": "Vzorec",
"abusefilter-list-status": "Stanje",
"abusefilter-list-public": "Javni opis",
"abusefilter-list-consequences": "Posledice",
@@ -108,8 +123,15 @@
"abusefilter-list-options-scope": "Prikaži filtre:",
"abusefilter-list-options-scope-local": "Samo lokalna pravila",
"abusefilter-list-options-scope-global": "Samo globalna pravila",
- "abusefilter-list-options-disabled": "Onemogočeni filtri:",
+ "abusefilter-list-options-scope-all": "Lokalna in globalna pravila",
+ "abusefilter-list-options-further-options": "Nadaljnje možnosti:",
"abusefilter-list-options-hidedisabled": "Skrij onemogočene filtre",
+ "abusefilter-list-options-hideprivate": "Skrij zasebne filtre",
+ "abusefilter-list-options-searchfield": "Išči v skladu s pravili:",
+ "abusefilter-list-options-searchpattern": "Vnesi vzorec",
+ "abusefilter-list-options-searchoptions": "Način iskanja:",
+ "abusefilter-list-options-search-like": "Goli iskalni niz",
+ "abusefilter-list-options-search-rlike": "Regularni izraz",
"abusefilter-list-options-submit": "Posodobi",
"abusefilter-tools-text": "Tukaj je nekaj orodij, ki so lahko koristna pri oblikovanju in popravljanju napak filtrov zlorab.",
"abusefilter-tools-expr": "Preizkuševalec izrazov",
@@ -128,11 +150,12 @@
"abusefilter-edit-status-label": "Statistike:",
"abusefilter-edit-status": "Od {{PLURAL:$1|zadnjega $1 dejanja|zadnjih $1 dejanj}} se je ta filter ujemal z/s $2 ($3 %).",
"abusefilter-edit-status-profile": "Od {{PLURAL:$1|zadnjega $1 dejanja|zadnjih $1 dejanj}} se je ta filter ujemal z/s $2 ($3 %).\nV povprečju je njegov čas delovanja $4 ms, porabi pa $5 {{PLURAL:$5|pogoj|pogoja|pogoje|pogojev}} omejitve pogojev.",
- "abusefilter-edit-throttled": "'''Opozorilo''': Ta filter je bil samodejno onemogočen zavoljo varnosti.\nDosegel je mejo ujemanja več kot $1 % dejanj.",
"abusefilter-edit-new": "Nov filter",
"abusefilter-edit-save": "Shrani filter",
"abusefilter-edit-id": "ID filtra:",
+ "abusefilter-edit-switch-editor": "Preklopi urejevalnik",
"abusefilter-edit-description": "Opis:\n:''(javno vidno)''",
+ "abusefilter-edit-field-description": "opis",
"abusefilter-edit-group": "Skupina filtra:",
"abusefilter-edit-flags": "Oznake:",
"abusefilter-edit-enabled": "Omogoči ta filter",
@@ -140,6 +163,7 @@
"abusefilter-edit-hidden": "Skrij podrobnosti tega filtra pred javnim vpogledom",
"abusefilter-edit-global": "Globalni filter",
"abusefilter-edit-rules": "Pogoji:",
+ "abusefilter-edit-field-conditions": "pogoji",
"abusefilter-edit-notes": "Opombe:",
"abusefilter-edit-lastmod": "Zadnja sprememba filtra:",
"abusefilter-edit-lastmod-text": "dne $1 s strani $2",
@@ -150,20 +174,32 @@
"abusefilter-edit-action-blockautopromote": "Odvzami uporabnikovo stanje samodejne potrditve",
"abusefilter-edit-action-degroup": "Odstrani uporabnika iz vseh priviligiranih skupin",
"abusefilter-edit-action-block": "Uporabniku in/ali IP-naslovu prepreči urejanje",
+ "abusefilter-edit-action-blocktalk": "Blokiraj uporabnika in /ali IP naslov za urejanje njihovih lastnih pogovornih strani",
"abusefilter-edit-action-throttle": "Sproži dejanja le, če uporabnik prekorači stopnjo omejitve",
- "abusefilter-edit-action-rangeblock": "Blokiraj območje /16, iz katerega izvira uporabnik",
+ "abusefilter-edit-action-rangeblock": "Blokiraj območje pripadajočega IP-ja, iz katerega izvira uporabnik",
"abusefilter-edit-action-tag": "Označi urejanje za nadaljnji pregled",
"abusefilter-edit-throttle-count": "Število dovoljenih dejanj:",
- "abusefilter-edit-throttle-period": "Časovno obdobje:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekunda|sekundi|sekunde|sekund}}",
- "abusefilter-edit-throttle-groups": "Zaduši skupino po:\n:''(ena na vrstico, združeno z vejicami)''",
+ "abusefilter-edit-throttle-period": "Časovno obdobje (v sekundah):",
+ "abusefilter-edit-throttle-groups": "Omejevanje skupine:",
+ "abusefilter-edit-throttle-ip": "IP naslov",
+ "abusefilter-edit-throttle-user": "Uporabniški račun",
+ "abusefilter-edit-throttle-creationdate": "Datum stražnika ustvaritve računa",
+ "abusefilter-edit-throttle-editcount": "Število urejanj",
+ "abusefilter-edit-throttle-site": "Celotna stran",
+ "abusefilter-edit-throttle-page": "Stran",
"abusefilter-edit-warn-message": "Sistemsko sporočilo, uporabljeno za opozorilo:",
"abusefilter-edit-warn-other": "Drugo sporočilo",
"abusefilter-edit-warn-other-label": "Ime strani drugega sporočila:\n:''(brez predpone MediaWiki)''",
"abusefilter-edit-warn-actions": "Dejanja:",
- "abusefilter-edit-warn-preview": "Predogled izbranega sporočila",
+ "abusefilter-edit-warn-preview": "Prikaži/skrij predogled izbranega sporočila",
"abusefilter-edit-warn-edit": "Ustvari/Uredi izbrano sporočilo",
- "abusefilter-edit-tag-tag": "Uporabljene [[Special:Tags|oznake]] (ena na vrstico):",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Oznake]] za uporabo:",
+ "abusefilter-edit-tag-placeholder": "Dodaj oznake (eno po eno ali ločene z vejico)",
+ "abusefilter-edit-block-anon-durations": "Trajanje blokiranja za anonimne uporabnike:",
+ "abusefilter-edit-block-user-durations": "Trajanje blokiranja za registrirane uporabnike:",
+ "abusefilter-block-anon": "Blokiraj anonimne uporabnike",
+ "abusefilter-block-user": "blokiraj registrirane uporabnike",
+ "abusefilter-block-talk": "blokirane pogovorne strani",
"abusefilter-edit-denied": "Ne morete si ogledati podrobnosti filtra, ker je skrit pred javnim pogledom.",
"abusefilter-edit-main": "Parametri filtra",
"abusefilter-edit-done-subtitle": "Filter je urejen",
@@ -193,8 +229,8 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Modulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Potenciranje (**)",
"abusefilter-edit-builder-group-op-comparison": "Operatorji primerjanja",
- "abusefilter-edit-builder-op-comparison-equal": "Enako kot (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Ni enako kot (==)",
+ "abusefilter-edit-builder-op-comparison-equal": "Vrednost je enaka (==)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Vrednost ni enaka (!=)",
"abusefilter-edit-builder-op-comparison-lt": "Manjše od (<)",
"abusefilter-edit-builder-op-comparison-gt": "Večje od (>)",
"abusefilter-edit-builder-op-comparison-lte": "Manjše ali enako kot (<=)",
@@ -225,7 +261,7 @@
"abusefilter-edit-builder-funcs-rmwhitespace": "Odstrani presledke (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Odstrani posebne znake (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Je IP v območju? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "V nizu poišči več podnizov (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "V nizu poišči več podnizov v načinu ALI. (contains_any)",
"abusefilter-edit-builder-funcs-substr": "Podniz (substr)",
"abusefilter-edit-builder-funcs-strpos": "Položaj podniza v nizu (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Zamenjaj podniz z nizom (str_replace)",
@@ -240,21 +276,22 @@
"abusefilter-edit-builder-vars-diff": "Poenotene razlike sprememb, narejenih z urejanjem",
"abusefilter-edit-builder-vars-newsize": "Nova velikost strani",
"abusefilter-edit-builder-vars-oldsize": "Stara velikost strani",
+ "abusefilter-edit-builder-vars-old-content-model": "Stari model vsebine",
+ "abusefilter-edit-builder-vars-new-content-model": "Novi model vsebine",
"abusefilter-edit-builder-vars-removedlines": "Vrstice odstranjene v urejanju",
"abusefilter-edit-builder-vars-summary": "Povzetek urejanja/razlog",
- "abusefilter-edit-builder-vars-article-id": "ID strani",
- "abusefilter-edit-builder-vars-article-ns": "Imenski prostor strani",
- "abusefilter-edit-builder-vars-article-text": "Naslov strani (brez imenskega prostora)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Polni naslov strani",
- "abusefilter-edit-builder-vars-article-views": "Ogledi strani",
+ "abusefilter-edit-builder-vars-page-id": "ID strani",
+ "abusefilter-edit-builder-vars-page-ns": "Imenski prostor strani",
+ "abusefilter-edit-builder-vars-page-title": "Naslov strani (brez imenskega prostora)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Polni naslov strani",
"abusefilter-edit-builder-vars-movedfrom-id": "ID izvorne strani prestavljanja",
"abusefilter-edit-builder-vars-movedfrom-ns": "Imenski prostor izvorne strani prestavljanja",
- "abusefilter-edit-builder-vars-movedfrom-text": "Naslov izvorne strani prestavljanja",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Polni naslov izvorne strani prestavljanja",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Naslov izvorne strani prestavljanja",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Polni naslov izvorne strani prestavljanja",
"abusefilter-edit-builder-vars-movedto-id": "ID ciljne strani prestavljanja",
"abusefilter-edit-builder-vars-movedto-ns": "Imenski prostor ciljne strani prestavljanja",
- "abusefilter-edit-builder-vars-movedto-text": "Naslov ciljne strani prestavljanja",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Polni naslov ciljne strani prestavljanja",
+ "abusefilter-edit-builder-vars-movedto-title": "Naslov ciljne strani prestavljanja",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Polni naslov ciljne strani prestavljanja",
"abusefilter-edit-builder-vars-user-editcount": "Število urejanj uporabnika",
"abusefilter-edit-builder-vars-user-age": "Starost uporabniškega računa",
"abusefilter-edit-builder-vars-user-name": "Ime uporabniškega računa",
@@ -266,7 +303,7 @@
"abusefilter-edit-builder-vars-all-links": "Vse zunanje povezave v novem besedilu",
"abusefilter-edit-builder-vars-added-links": "Vse zunanje povezave dodane med urejanjem",
"abusefilter-edit-builder-vars-removed-links": "Vse zunanje povezave odstranjene med urejanjem",
- "abusefilter-edit-builder-vars-old-text": "Staro wikibesedilo strani, pred urejanjem",
+ "abusefilter-edit-builder-vars-old-text": "Staro wikibesedilo strani, pred urejanjem (se ne uporablja več)",
"abusefilter-edit-builder-vars-new-text": "Novo wikibesedilo strani, po urejanju",
"abusefilter-edit-builder-vars-new-pst": "Wikibesedilo nove strani, preoblikovano pred shranjevanjem",
"abusefilter-edit-builder-vars-new-text-stripped": "Novo besedilo strani, z odstranjenimi oznakami",
@@ -277,9 +314,11 @@
"abusefilter-edit-builder-vars-restrictions-upload": "Zaščita datoteke pred nalaganjem",
"abusefilter-edit-builder-vars-old-text-stripped": "Staro besedilo strani, z odstranjenimi oznakami",
"abusefilter-edit-builder-vars-old-links": "Povezave na strani, pred urejanjem",
- "abusefilter-edit-builder-vars-old-html": "Staro wikibesedilo strani, razčlenjeno v HTML",
+ "abusefilter-edit-builder-vars-old-html": "Staro wikibesedilo strani, razčlenjeno v HTML (se ne uporablja več)",
"abusefilter-edit-builder-vars-minor-edit": "Ali je bilo urejanje označeno kot manjše",
"abusefilter-edit-builder-vars-file-sha1": "Odtis SHA1 vsebine datoteke",
+ "abusefilter-edit-builder-vars-file-size": "Velikost datoteke v znakih",
+ "abusefilter-edit-builder-vars-file-height": "Višina datoteke v pikslih",
"abusefilter-filter-log": "Zadnje spremembe filtrov",
"abusefilter-history": "Zgodovina sprememb filtra zlorab #$1",
"abusefilter-history-foruser": "Spremembe $1",
@@ -308,14 +347,14 @@
"abusefilter-exception-unclosedstring": "Nezaključen niz, začet pri znaku $1.",
"abusefilter-exception-invalidoperator": "Neveljavni operator »$2« pri znaku $1.",
"abusefilter-exception-unrecognisedtoken": "Neprepoznan žeton »$2« pri znaki $1.",
- "abusefilter-exception-noparams": "Funkciji »$2«, pri znaku $1, ni bil določen noben parameter.",
+ "abusefilter-exception-noparams": "Funkciji »$2«, pri znaku $1, ni bil določen noben parameter.\nPričakovali smo $3 {{PLURAL:$3|parameter|parametra|parametre|parametrov}}.",
"abusefilter-exception-dividebyzero": "Nedovoljen poskus deljenja $2 z ničlo pri znaku $1.",
"abusefilter-exception-unrecognisedvar": "Neprepoznana spremenljivka $2 pri znaku $1.",
"abusefilter-exception-notenoughargs": "Funkcija $2, klicana pri znaku $1, nima dovolj parametrov.\n{{PLURAL:$3|Pričakovan je $3 parameter|Pričakovana sta $3 parametra|Pričakovani so $3 parametri|Pričakovanih je $3 parametrov}}, dobil sem jih $4",
"abusefilter-exception-regexfailure": "Napaka v regularnem izrazu »$3« pri znaku $1: »$2«",
"abusefilter-exception-overridebuiltin": "Nedovoljeno prepisovanje vgrajene spremenljivke »$2« pri znaku $1.",
- "abusefilter-exception-outofbounds": "Zahtevanje neobstoječega vnosa seznama $2 (velikost seznama = $3) pri znaku $1.",
- "abusefilter-exception-notlist": "Zahtevanje elementa polja v nepolju pri znaku $1.",
+ "abusefilter-exception-outofbounds": "Zahtevanje neobstoječega vnosa polja $2 (velikost polja = $3) pri znaku $1.",
+ "abusefilter-exception-notarray": "Zahtevanje elementa polja v nepolju pri znaku $1.",
"abusefilter-action-tag": "Označi",
"abusefilter-action-throttle": "Zaduši",
"abusefilter-action-warn": "Opozori",
@@ -331,7 +370,7 @@
"abusefilter-revert-periodstart": "Začetek obdobja:",
"abusefilter-revert-periodend": "Konec obdobja:",
"abusefilter-revert-search": "Izberite dejanja",
- "abusefilter-revert-filter": "Filter:",
+ "abusefilter-revert-filter": "ID filtra:",
"abusefilter-revert-preview-intro": "Spodaj se nahajajo dejanja filtra zlorab, ki bodo vrnjena s tem dejanjem.\nProsimo, skrbno jih preverite in kliknite »{{int:abusefilter-revert-confirm}}«, da potrdite izbiro.",
"abusefilter-revert-confirm": "Potrdi",
"abusefilter-revert-success": "Vrnili ste vsa dejanja filtra zlorab zaradi [[Special:AbuseFilter/$1|filtra $2]].",
@@ -344,12 +383,20 @@
"abusefilter-test-submit": "Preizkusi",
"abusefilter-test-load": "Naloži",
"abusefilter-test-user": "Spremembe uporabnika:",
- "abusefilter-test-period-start": "Pozneje napravljene spremembe:",
- "abusefilter-test-period-end": "Spremembe narejene prej:",
+ "abusefilter-test-nobots": "Skrij urejanja botov",
+ "abusefilter-test-period-start": "Spremembe narejene po:",
+ "abusefilter-test-period-end": "Spremembe narejene pred:",
"abusefilter-test-page": "Spremembe na strani:",
"abusefilter-test-shownegative": "Prikaži spremembe, ki se ne ujemajo s filtrom",
"abusefilter-test-syntaxerr": "Vnesen filter vsebuje skladenjsko napako.\nPolno pojasnilo lahko dobite s klikom na gumb »{{int:abusefilter-edit-check}}«.",
"abusefilter-test-badtitle": "Vneseni naslov strani ni veljaven. Vsebuje enega ali več znakov, ki jih ni mogoče uporabiti v naslovih.",
+ "abusefilter-test-action": "Vrsta dejanja:",
+ "abusefilter-test-search-type-all": "Vsa dejanja",
+ "abusefilter-test-search-type-edit": "Urejanja",
+ "abusefilter-test-search-type-move": "Preimenovanja",
+ "abusefilter-test-search-type-delete": "Izbrisi",
+ "abusefilter-test-search-type-upload": "Nalaganja",
+ "abusefilter-test-search-type-createaccount": "Ustvaritve računov",
"abusefilter-changeslist-examine": "preuči",
"abusefilter-examine": "Preuči posamezne spremembe",
"abusefilter-examine-intro": "Ta stran vam omogoča preverjanje spremenljivk, ki jih ustvari filter zlorab, za posamezno spremembo in jo preizkusi ob filtrih.",
@@ -376,7 +423,6 @@
"abusefilter-topnav-import": "Uvozi filter",
"abusefilter-log-name": "Dnevnik filtrov zlorab",
"abusefilter-log-header": "Ta dnevnik prikazuje povzetek sprememb filtrov.\nZa vse podrobnosti si oglejte [[Special:AbuseFilter/history|seznam]] zadnjih sprememb filtrov.",
- "abusefilter-log-entry-modify": "je spremenil(-a) $1 ($2)",
"abusefilter-log-noresults": "Ni zadetkov",
"abusefilter-diff-title": "Razlike med različicami",
"abusefilter-diff-item": "Postavka",
@@ -389,5 +435,9 @@
"abusefilter-diff-next": "Novejša sprememba",
"abusefilter-import-intro": "Ta vmesnik lahko uporabite za uvoz filtrov iz drugih wikijev.\nNa izvornem wikiju kliknite »{{int:abusefilter-edit-export}}« pod »{{int:abusefilter-edit-tools}}« v urejevalnem vmesniku.\nNato skopirajte besedilo v prikazanem polju, prilepite ga v to polje in kliknite »{{int:abusefilter-import-submit}}«.",
"abusefilter-import-submit": "Uvozi podatke",
- "abusefilter-group-default": "Privzeto"
+ "abusefilter-group-default": "Privzeto",
+ "abusefilter-view-private-submit": "Prikaži zasebne podatke",
+ "abusefilter-view-private": "Prikaži zasebne podatke",
+ "abusefilter-view-private-reason": "Razlog za dostop do zasebnih podatkov:",
+ "abusefilter-log-details-id": "ID dnevnika"
}
diff --git a/AbuseFilter/i18n/sq.json b/AbuseFilter/i18n/sq.json
index a8363a7e..9c059336 100644
--- a/AbuseFilter/i18n/sq.json
+++ b/AbuseFilter/i18n/sq.json
@@ -6,14 +6,14 @@
"Vinie007",
"Kosovastar",
"Matma Rex",
- "Arianit"
+ "Arianit",
+ "Bjakupi"
]
},
"abusefilter-desc": "Zbaton automatikisht deduktimin e redaktimeve",
"abusefilter": "Shpërdoron filter konfigurimin",
"abuselog": "Shpërdoron gjurmën e kyçjes",
"abusefilter-intro": "Mirë se vini në ballinën kryesore të Filter shpërdoruesit.\nFilter shpërdoruesi është një mekanizëm i automatizuar sofverik Për të aplikuar deduktimin automatik të të gjitha veprimeve.\nKjo ballinë tregon një listë të filtrave të përcaktuara, dhe i lejon ata të modifikohen.",
- "abusefilter-mustbeeditor": "Për arsye sigurie, vetëm përdoruesit me të drejtën për të modifikuar filtra abuzimit mund të përdorin këtë interface.",
"abusefilter-warning": "' ' ' Kujdes ' ' ' : Ky veprim është identifikuar automatikisht si i dëmshëm.\nRedaktimet jo-konstruktive do të rikthehen shpejt dhe redaktimet skandaloze apo jo-konstruktive të përsëritura do të rezultojë në llogarinë tuaj ose IP adresën si të bllokuara.\nNëse besoni ky redaktim të jetë konstruktiv, mund të shtypni Paraqit edhe njëherë për ta konfirmuar.\nNjë përshkrim i shkurtër i rregullave të shpërdorimit që veprimet tuaja janë përputhur janë: $1",
"abusefilter-disallowed": "Ky veprim është identifikuar automatikisht si i dëmshëm, dhe për këtë arsye i ndaluar.\nNëse besoni se redaktimi i juaj të jetë konstruktiv, ju lutem informoni administratorin se çfarë ishit duke tentuar të bënit.\nNjë përshkrim i shkurtër i rregullave të shpërdorimit që veprimet tuaja janë përputhur janë: $1",
"abusefilter-blocked-display": "Ky veprim është identifikuar automatikisht si i dëmshëm,\ndhe ju keni qenë të penguar në ekzekutimin e tij.\nNë mënyrë për të mbrojtur {{SITENAME}} , emri i përdoruesit tuaj dhe të gjitha IP adresat e lidhura janë bllokuar nga redaktimi.\nNëse kjo ka ndodhur në gabim, ju lutem kontaktoni administratorin.\n Një përshkrim i shkurtër i rregullave të shpërdorimit që veprimet tuaja janë përputhur janë: $1",
@@ -71,8 +71,6 @@
"abusefilter-log-hide-hidden": "Fsheh këtë term nga opinioni publik",
"abusefilter-log-hide-reason": "Arsyeja:",
"abusefilter-log-hide-forbidden": "Ju nuk keni leje për të fshehur shpërdorimin e shënimeve të kyçjes.",
- "abusefilter-logentry-suppress": "Fshehur \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "trego \"[[$1]]\"",
"abusefilter-management": "Shpërdoro filtër menaxhmentin",
"abusefilter-list": "Të gjithë filtrat",
"abusefilter-list-id": "Filtër ID-ja",
@@ -90,6 +88,7 @@
"abusefilter-enabled": "I Aktivizuar",
"abusefilter-deleted": "E Fshirë",
"abusefilter-disabled": "I Çaktivizuar",
+ "abusefilter-throttled": "Te gjitha te paperkthyera, te dala afati te perkthyera...",
"abusefilter-hitcount": "$1 {{PLURAL:$1|klikim|klikime}}",
"abusefilter-new": "Krijo filter të ri",
"abusefilter-return": "Kthehu tek filtër menaxhmenti",
@@ -99,8 +98,8 @@
"abusefilter-list-options-deleted-only": "Trego vetëm filtrat e fshirë",
"abusefilter-list-options-deleted-hide": "Fsheh filtrat e fshirë",
"abusefilter-list-options-deleted-show": "Përfshij filtra e fshirë",
- "abusefilter-list-options-disabled": "Filtrat e deaktivizuar",
"abusefilter-list-options-hidedisabled": "Fsheh filtrat e deaktivizuar",
+ "abusefilter-list-options-hideprivate": "Fshehni filterat privat",
"abusefilter-list-options-submit": "Përditëso",
"abusefilter-tools-text": "Këtu janë disa mjete të cilat mund të jenë të dobishme në formulimin dhe korigjimin e kodit të filtrave të shpërdorimit",
"abusefilter-tools-expr": "Testues i shprehjes",
@@ -117,7 +116,6 @@
"abusefilter-edit-status-label": "Statistikat:",
"abusefilter-edit-status": "fundit $1 {{PLURAL:$1|veprimi i|veprimet e}}, ky filtër i ka krahasuar $2 ($3%).",
"abusefilter-edit-status-profile": "fundit $1 {{PLURAL:$1|veprimi i|veprimet e}}, ky filtër i ka krahasuar $2 ($3%).\nMesatarisht, koha e rrjedhës është $4ms, dhe konsumon $5 {{PLURAL:$5|kusht|kushtet}} e kufirit të kushtit",
- "abusefilter-edit-throttled": "' ' ' Kujdes ' ' ' : Ky filtër është deaktivizuar automatikisht si masë sigurie.\nKa arritur kufirin e përputhjes së më shumë se $1% veprimeve.",
"abusefilter-edit-new": "Filtër i ri",
"abusefilter-edit-save": "Ruaj filtrin",
"abusefilter-edit-id": "Filter ID-ja:",
@@ -143,7 +141,6 @@
"abusefilter-edit-action-tag": "Etiketo redaktimin për shqyrtim të mëtejshëm",
"abusefilter-edit-throttle-count": "Numri i veprimeve për të lejuar:",
"abusefilter-edit-throttle-period": "Periudha kohore:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekondë|sekonda}}",
"abusefilter-edit-throttle-groups": "Vavula (throttle) nga:\n: ' ' (një për linjë, e kombinuar me presje) ' '",
"abusefilter-edit-warn-message": "Porosi e sistemit për t'u përdorur për paralajmërim:",
"abusefilter-edit-warn-other": "Porosi të tjera",
@@ -226,18 +223,18 @@
"abusefilter-edit-builder-vars-oldsize": "Madhësia e vjetër e faqes",
"abusefilter-edit-builder-vars-removedlines": "Linjat e hequra në redaktim",
"abusefilter-edit-builder-vars-summary": "Redaktimi përmbledhja / arsyeja",
- "abusefilter-edit-builder-vars-article-id": "ID-ja e faqes",
- "abusefilter-edit-builder-vars-article-ns": "Hapsira (namespace) e faqes",
- "abusefilter-edit-builder-vars-article-text": "Titulli i faqes (pa hapsirë - namespace)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Titulli i plotë i faqes",
+ "abusefilter-edit-builder-vars-page-id": "ID-ja e faqes",
+ "abusefilter-edit-builder-vars-page-ns": "Hapsira (namespace) e faqes",
+ "abusefilter-edit-builder-vars-page-title": "Titulli i faqes (pa hapsirë - namespace)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Titulli i plotë i faqes",
"abusefilter-edit-builder-vars-movedfrom-id": "ID faqja e burimit lëvizës të faqes",
"abusefilter-edit-builder-vars-movedfrom-ns": "Hapësira e burimit lëvizës të faqes",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titulli i faqes burimore lëvizëse",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Titulli i plotë i burimit lëvizës të faqes",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titulli i faqes burimore lëvizëse",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Titulli i plotë i burimit lëvizës të faqes",
"abusefilter-edit-builder-vars-movedto-id": "ID faqja e destinacionit lëvizës të faqes",
"abusefilter-edit-builder-vars-movedto-ns": "Hapsira e destinacionit lëvizës të faqes",
- "abusefilter-edit-builder-vars-movedto-text": "Titulli i destinacionit lëvizës të faqes",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Titulli i plotë i destinacionit lëvizës të faqes",
+ "abusefilter-edit-builder-vars-movedto-title": "Titulli i destinacionit lëvizës të faqes",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Titulli i plotë i destinacionit lëvizës të faqes",
"abusefilter-edit-builder-vars-user-editcount": "Redakto numërimin e përdoruesit",
"abusefilter-edit-builder-vars-user-age": "Mosha e përdoruesit të llogarisë",
"abusefilter-edit-builder-vars-user-name": "Emri i përdoruesit të llogarisë",
@@ -291,6 +288,7 @@
"abusefilter-exception-unrecognisedvar": "Variabël e panjohur $2 tek karakteri $1",
"abusefilter-exception-notenoughargs": "Pa argumente të mjaftueshme në funsionin $2 të thirrur tek karakteri $1.\nE pritshme $3 {{PLURAL:$3|argumenti|argumentet}}, mori $4",
"abusefilter-exception-regexfailure": "Gabim në shprehje të rregullt \" $3 \" tek karakterin $1 : \" $2 \"",
+ "abusefilter-exception-invalidiprange": "IP distance invalide $2 e sjellur ne karakteret $1",
"abusefilter-action-tag": "Etiketo",
"abusefilter-action-throttle": "Mbyll",
"abusefilter-action-warn": "Paralajmëro",
diff --git a/AbuseFilter/i18n/sr-ec.json b/AbuseFilter/i18n/sr-ec.json
index 48514003..fb2d70f3 100644
--- a/AbuseFilter/i18n/sr-ec.json
+++ b/AbuseFilter/i18n/sr-ec.json
@@ -10,48 +10,66 @@
"Сербијана",
"Matma Rex",
"Dungodung",
- "Obsuser"
+ "Obsuser",
+ "Acamicamacaraca",
+ "Zoranzoki21",
+ "BadDog"
]
},
- "abusefilter-desc": "Извршава аутоматско хеуристичко филтрирање измена",
- "abusefilter": "Поставке филтера против злоупотребе",
- "abuselog": "Извештај злоупотребе",
- "abusefilter-intro": "Добро дошли у окружење за управљање Филтером против злоупотребе.\nТо је софтверски механизам који примењује аутоматску хеуристику за све радње.\nОво окружење приказује списак одређених филтера и омогућава вам да их промените.",
- "abusefilter-mustbeeditor": "Из сигурносних разлога, само корисници са одговарајућим правима на измену филтерâ против злоупотребе могу користити ово окружење.",
- "abusefilter-warning": "'''Упозорење''': Аутоматски филтер је препознао ову измену као потенцијално штетну.\nНеконструктивне акције ће бити враћене и могу да доведу до забране уређивања.\nУколико сматрате да измена ипак јесте конструктивна, кликните још једанпут на дугме „Сачувај страницу“.\nКратак опис правила злоупотребе које сте активирали: $1",
+ "abusefilter-desc": "Примењује аутоматске хеуристике изменама",
+ "abusefilter": "Конфигурација филтера злоупотребе",
+ "abuselog": "Дневник злоупотребе",
+ "abusefilter-intro": "Добро дошли у интерфејс за управљање филтером злоупотребе.\nТо је аутоматизовани софтверски механизам који примењује хеуристику за све радње.\nОвај интерфејс приказује списак дефинисаних филтера и дозвољава вам да их измените.",
+ "abusefilter-warning": "'''Упозорење''': Ова радња је аутоматски идентификована као штетна.\nНеконструктивне радње ће брзо бити враћене,\nа прекомерно или поновљено неконструктивно уређивање ће довести до блокирања вашег налога или IP адресе.\nУколико верујете да је ова радња конструктивна, можете је поново послати да је потврдите.\nКратак опис правила о злоупотреби који се подудара са вашом радњом: $1",
"abusefilter-disallowed": "Аутоматски филтер је препознао ову измену као потенцијално штетну и стога је није дозволио.\nУколико сматрате да измена ипак јесте конструктивна, обавестите неког од администратора о томе шта покушавате да учините.\nКратак опис повређеног правила: $1",
- "abusefilter-blocked-display": "Аутоматски филтер је препознао ову измену као потенцијално штетну и није вам допуштено да је извршите.\nОсим тога, да би се заштититио/ла {{SITENAME}}, ваш налог и одговарајуће ИП адресе су блокиране.\nУколико се ово догодило грешком, контактирајте неког од администратора.\nКратак опис повређеног правила: $1",
+ "abusefilter-blocked-display": "Аутоматски филтер је препознао ову измену као потенцијално штетну и није вам допуштено да је извршите.\nОсим тога, да би се заштититио/ла {{SITENAME}}, ваш налог и одговарајуће IP адресе су блокиране.\nУколико се ово догодило грешком, контактирајте неког од администратора.\nКратак опис повређеног правила: $1",
"abusefilter-degrouped": "Аутоматски филтер је препознао ову измену као потенцијално штетну.\nСтога измена није дозвољена, а уклоњена су вам и сва овлашћења која сте имали. Уколико сматрате да је до тога дошло грешком, контактирајте неког од бирократа, објасните шта сте урадили и овлашћења ће вам можда бити враћена.\nКратак опис повређеног правила: $1",
"abusefilter-autopromote-blocked": "Аутоматски филтер је препознао ову измену као потенцијално штетну и стога је није дозволио.\nОсим тога, из предострожности су вам привремено уклоњена одређена овлашћења.\nКратак опис повређеног правила: $1",
- "abusefilter-blocker": "Филтер против злоупотребе",
+ "abusefilter-blocker": "Филтер злоупотребе",
"abusefilter-blockreason": "Блокирани сте од стране филтера против злоупотребе.\nОпис повређеног правила: $1",
- "abusefilter-degroupreason": "Филтер је аутоматски уклонио овлашћења.\nОпис правила: $1",
+ "abusefilter-degroupreason": "Филтер злоупотребе је аутоматски одузео права.\nОпис правила: $1",
"abusefilter-accountreserved": "Ово корисничко име је резервисано од стране филтера против злоупотребе.",
- "right-abusefilter-modify": "уређивање филтера против злоупотребе",
- "right-abusefilter-view": "прегледање филтера против злоупотребе",
- "right-abusefilter-log": "прегледање извештаја злоупотребе",
- "right-abusefilter-log-detail": "прегледање детаљних података у извештају злоупотребе",
- "right-abusefilter-private": "прегледање приватних података у извештају злоупотребе",
- "right-abusefilter-modify-restricted": "мењање филтера злоупотребе с ограниченим радњама",
- "right-abusefilter-revert": "враћање свих измена које је направио филтер против злоупотребе",
- "right-abusefilter-view-private": "прегледање приватних филтера против злоупотребе",
- "right-abusefilter-hide-log": "сакривање уноса у извештају злоупотребе",
- "right-abusefilter-hidden-log": "прегледање сакривених уноса у извештају злоупотребе",
- "action-abusefilter-modify": "уређивање филтера против злоупотребе",
- "action-abusefilter-view": "прегледање филтера против злоупотребе",
- "action-abusefilter-log": "прегледање извештаја злоупотребе",
- "action-abusefilter-log-detail": "прегледање детаљних уноса у извештају злоупотребе",
- "action-abusefilter-private": "прегледање личних података у извештају злоупотребе",
- "action-abusefilter-modify-restricted": "мењање филтера против злоупотребе с ограниченим радњама",
- "action-abusefilter-revert": "враћање свих измена које је направио филтер против злоупотребе",
- "action-abusefilter-view-private": "прегледање приватних филтера против злоупотребе",
+ "right-abusefilter-modify": "мењање филтерâ против злоупотребе",
+ "right-abusefilter-view": "прегледање филтерâ против злоупотребе",
+ "right-abusefilter-log": "прегледање дневника злоупотребе",
+ "right-abusefilter-log-detail": "прегледање детаљних уноса у евиденцији злоупотребе",
+ "right-abusefilter-private": "прегледање приватних података у евиденцији злоупотребе",
+ "right-abusefilter-modify-restricted": "мењање филтерâ против злоупотребе са ограниченим радњама",
+ "right-abusefilter-revert": "враћање свих промена које је направио филтер злоупотребе",
+ "right-abusefilter-view-private": "прегледање филтера против злоупотребе означених као приватни",
+ "right-abusefilter-log-private": "прегледање уноса у евиденцији злоупотребе означених као приватни",
+ "right-abusefilter-hide-log": "сакривање уноса у евиденцији злоупотребе",
+ "right-abusefilter-hidden-log": "прегледање скривених уноса у евиденцији злоупотребе",
+ "right-abusefilter-modify-global": "прављење или мењање глобалних филтера против злоупотребе",
+ "action-abusefilter-modify": "измењујете филтере против злоупотребе",
+ "action-abusefilter-view": "прегледате филтере против злоупотребе",
+ "action-abusefilter-log": "прегледате дневник злоупотребе",
+ "action-abusefilter-log-detail": "прегледате детаљне уносе у евиденцији злоупотребе",
+ "action-abusefilter-private": "прегледате приватне податаке у евиденцији злоупотребе",
+ "action-abusefilter-modify-restricted": "мењате филтере прозив злоупотребе са ограниченим радњама",
+ "action-abusefilter-revert": "вратите све промене датог филтера против злоупотребе",
+ "action-abusefilter-view-private": "прегледате филтере против злоупотребе означене као приватни",
+ "action-abusefilter-log-private": "прегледање дневника филтера против злоупотребе означених као приватни",
"abusefilter-log": "Дневник филтера против злоупотребе",
- "abusefilter-log-summary": "Овај извештај приказује списак свих радњи које су извршили филтери.",
- "abusefilter-log-search": "Претрага извештаја злоупотребе",
+ "abusefilter-log-summary": "Овај дневник приказује списак свих радњи које су задржали филтери.",
+ "abusefilter-log-search": "Претрага дневника злоупотребе",
"abusefilter-log-search-user": "Корисник:",
- "abusefilter-log-search-filter": "ID филтера:",
+ "abusefilter-log-search-filter": "ID-ови филтера (одвојени усправним цртама):",
"abusefilter-log-search-title": "Наслов:",
"abusefilter-log-search-wiki": "Вики:",
+ "abusefilter-log-search-impact": "Утицај:",
+ "abusefilter-log-search-impact-all": "Све радње",
+ "abusefilter-log-search-impact-saved": "Само сачуване промене",
+ "abusefilter-log-search-impact-not-saved": "Без сачуваних измена",
+ "abusefilter-log-search-entries-label": "Видљивост:",
+ "abusefilter-log-search-entries-all": "Сви уноси",
+ "abusefilter-log-search-entries-hidden": "Само сакривени уноси",
+ "abusefilter-log-search-entries-visible": "Само видљиви уноси",
+ "abusefilter-log-search-action-label": "Покренута радња:",
+ "abusefilter-log-search-action-other": "други",
+ "abusefilter-log-search-action-any": "Било који",
+ "abusefilter-log-search-action-taken-label": "Предузета радња:",
+ "abusefilter-log-search-action-taken-any": "Било која",
"abusefilter-log-search-submit": "Претражи",
"abusefilter-log-entry": "$1: $2 је {{GENDER:$8|активирао}} филтер, {{GENDER:$8|изводећи}} радњу „$3“ на страници $4.\nПредузете радње: $5;\nОпис филтера: $6",
"abusefilter-log-entry-withdiff": "$1: $2 је {{GENDER:$8|активирао}} филтер злоупотребе, {{GENDER:$8|изводећи}} радњу „$3“ на страници $4.\nПредузете радње: $5;\nОпис филтера: $6 ($7)",
@@ -61,28 +79,37 @@
"abusefilter-log-detailslink": "детаљи",
"abusefilter-log-diff": "разл",
"abusefilter-log-hidelink": "подеси видљивост",
- "abusefilter-log-details-legend": "Детаљи уноса $1",
+ "abusefilter-log-details-legend": "Детаљи уноса у евиденцији $1",
"abusefilter-log-details-var": "Променљива",
"abusefilter-log-details-val": "Вредност",
"abusefilter-log-details-vars": "Параметри радње",
- "abusefilter-log-details-private": "Приватни подаци",
- "abusefilter-log-details-ip": "Изворна ИП адреса",
+ "abusefilter-log-details-private": "Приватни детаљи дневника",
+ "abusefilter-log-details-ip": "Изворна IP адреса",
+ "abusefilter-log-details-checkuser": "Провери корисника",
"abusefilter-log-noactions": "ништа",
- "abusefilter-log-details-diff": "Измене направљене при уређивању",
+ "abusefilter-log-details-diff": "Промене направљене при уређивању",
"abusefilter-log-linkoncontribs": "дневник злоупотребе",
- "abusefilter-log-linkoncontribs-text": "Извештај злоупотребе овог корисника",
+ "abusefilter-log-linkoncontribs-text": "Дневник злоупотребе {{GENDER:$1|овог корисника|ове кориснице}}",
+ "abusefilter-log-linkonhistory": "прикажи дневник злоупотребе",
+ "abusefilter-log-linkonhistory-text": "Погледајте дневник злоупотребе ове странице",
"abusefilter-log-hidden": "(унос је сакривен)",
- "abusefilter-log-hidden-implicit": "(скривено зато што је измена обрисана)",
- "abusefilter-log-cannot-see-details": "Немате овлашћење да видите детаље овог уноса.",
- "abusefilter-log-details-hidden": "Не можете да видите детаље овог филтера јер су сакривени.",
- "abusefilter-log-hide-legend": "Сакриј унос у извештају",
- "abusefilter-log-hide-id": "ID уноса:",
- "abusefilter-log-hide-hidden": "Сакриј овај унос из јавног приказа",
+ "abusefilter-log-hidden-implicit": "(скривено јер је измена избрисана)",
+ "abusefilter-log-cannot-see-details": "Немате дозволу да видите детаље овог уноса.",
+ "abusefilter-log-cannot-see-private-details": "Немате дозволу да видите приватне детаље овог уноса.",
+ "abusefilter-log-nonexistent": "Унос са наведеним ID-ом не постоји.",
+ "abusefilter-log-details-hidden": "Не можете да видите детаље овог филтера јер су сакривени за јавни преглед.",
+ "abusefilter-log-hide-legend": "Сакриј унос у евиденцији",
+ "abusefilter-log-hide-id": "ID уноса у евиденцији:",
+ "abusefilter-log-hide-hidden": "Сакриј овај унос од јавног прегледа",
"abusefilter-log-hide-reason": "Разлог:",
+ "abusefilter-log-hide-reason-other": "Други/додатни разлог:",
"abusefilter-log-hide-forbidden": "Немате дозволу да сакривате уносе у извештају злоупотребе.",
- "abusefilter-logentry-suppress": "сакриј „[[$1]]“",
- "abusefilter-logentry-unsuppress": "откри „[[$1]]“",
+ "abusefilter-log-entry-suppress": "$1 је {{GENDER:$2|сакрио|сакрила}} унос у евиденцији $3",
"logentry-abusefilter-hit": "$1 је {{GENDER:$2|активирао|активирала}} $4, изводећи радњу „$5“ на страници $3. Предузете радње: $6 ($7)",
+ "log-action-filter-abusefilter": "Тип промене филтера:",
+ "log-action-filter-abusefilter-create": "нови филтер",
+ "log-action-filter-abusefilter-modify": "уређивање филтера",
+ "log-action-filter-suppress-abuselog": "Сакривање дневника злоупотребе",
"abusefilter-management": "Управљање филтером против злоупотребе",
"abusefilter-list": "Сви филтери",
"abusefilter-list-id": "ID филтера",
@@ -114,8 +141,9 @@
"abusefilter-list-options-scope-local": "Само локална правила",
"abusefilter-list-options-scope-global": "Само глобална правила",
"abusefilter-list-options-scope-all": "Локална и глобална правила",
- "abusefilter-list-options-disabled": "Онемогућени филтери:",
"abusefilter-list-options-hidedisabled": "Сакриј онемогућене филтере",
+ "abusefilter-list-options-searchoptions": "Претражи режим:",
+ "abusefilter-list-options-search-rlike": "Регуларни израз",
"abusefilter-list-options-submit": "Ажурирај",
"abusefilter-tools-text": "Овде се налазе алатке које су корисне за исправљање грешака на филтеру против злоупотребе.",
"abusefilter-tools-expr": "Тестирање филтера",
@@ -130,14 +158,17 @@
"abusefilter-edit": "Уређивање филтера злоупотребе",
"abusefilter-edit-subtitle": "Уређујете филтер $1",
"abusefilter-edit-subtitle-new": "Прављење филтера",
- "abusefilter-edit-oldwarning": "<strong>Уређујете старо издање овог филтера.\nИсказане статистике су за најновије издање.\nАко сачувате, обрисаћете све измене настале од ревизије коју управо уређујете.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Назад на историју овог филтера]].",
+ "abusefilter-edit-token-not-match": "Измена није сачувана. Сачувајте је поново.",
+ "abusefilter-edit-oldwarning": "<strong>Уређујете стару верзију овог филтера.\nИсказане статистике су за најновију верзију филтера.\nАко сачувате измене, обрисаћете све измене настале од измене коју управо уређујете.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Назад на историју овог филтера]].",
"abusefilter-edit-status-label": "Статистике:",
"abusefilter-edit-status": "Од {{PLURAL:$1|последње радње|последње $1 радње|последњих $1 радњи}}, овај филтер се поклопио $2 ($3%).",
"abusefilter-edit-status-profile": "Од {{PLURAL:$1|последње радње|последње $1 радње|последњих $1 радњи}}, овај филтер се поклопио $2 ($3%).\nУ просеку, његово време покретања је $4 мс, а троши $5 {{PLURAL:$5|услов|услова}}.",
"abusefilter-edit-new": "Нови филтер",
"abusefilter-edit-save": "Сачувај филтер",
"abusefilter-edit-id": "ID филтера:",
+ "abusefilter-edit-switch-editor": "Промени уређивач",
"abusefilter-edit-description": "Опис:\n:''(јавно видљиво)''",
+ "abusefilter-edit-field-description": "опис",
"abusefilter-edit-group": "Група филтера:",
"abusefilter-edit-flags": "Заставице:",
"abusefilter-edit-enabled": "Омогући овај филтер",
@@ -145,30 +176,43 @@
"abusefilter-edit-hidden": "Сакриј детаље овог филтера из јавног приказа",
"abusefilter-edit-global": "Глобални филтер",
"abusefilter-edit-rules": "Услови:",
+ "abusefilter-edit-field-conditions": "услови",
"abusefilter-edit-notes": "Напомене:",
"abusefilter-edit-lastmod": "Последња измена филтера:",
"abusefilter-edit-lastmod-text": "$3, $4 од {{GENDER:$5|корисника|кориснице|корисника}} $2",
"abusefilter-edit-hitcount": "Погоци филтера:",
- "abusefilter-edit-consequences": "Предузете радње при поклапању",
+ "abusefilter-edit-consequences": "Предузети радње при поклапању",
"abusefilter-edit-action-warn": "Покрени ове радње након што упозорите корисника",
"abusefilter-edit-action-disallow": "Спречи корисника да изврши дотичну радњу",
"abusefilter-edit-action-blockautopromote": "Врати самопотврђени статус корисника",
"abusefilter-edit-action-degroup": "Уклони корисника са свих овлашћених група",
- "abusefilter-edit-action-block": "Блокирај корисника / ИП адресу од уређивања",
+ "abusefilter-edit-action-block": "Блокирај корисника/цу и/или IP адресу од уређивања",
"abusefilter-edit-action-throttle": "Покрени радње само ако корисник пређе ограничење учесталости",
- "abusefilter-edit-action-rangeblock": "Блокирај /16 опсег ИП адреса корисника",
+ "abusefilter-edit-action-rangeblock": "Блокирај /16 опсег IP адреса корисника",
"abusefilter-edit-action-tag": "Означи измену за будући преглед",
"abusefilter-edit-throttle-count": "Број дозвољених радњи:",
- "abusefilter-edit-throttle-period": "Временски период:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|секунд|секунда|секунди}}",
- "abusefilter-edit-throttle-groups": "Групно успоравање према:\n:''(један по реду, заједно са запетама)''",
+ "abusefilter-edit-throttle-period": "Временски период (у секундама):",
+ "abusefilter-edit-throttle-groups": "Групно успоравање према:",
+ "abusefilter-edit-throttle-ip": "IP адреса",
+ "abusefilter-edit-throttle-user": "Кориснички налог",
+ "abusefilter-edit-throttle-editcount": "Број измена",
+ "abusefilter-edit-throttle-page": "Страница",
"abusefilter-edit-warn-message": "Системска порука која ће се користити за упозорење:",
"abusefilter-edit-warn-other": "Остале поруке",
- "abusefilter-edit-warn-other-label": "Назив странице друге поруке:\n:''(без префикса „Медијавики“)''",
+ "abusefilter-edit-warn-other-label": "Име странице друге поруке:\n:''(без префикса „Медијавики”)''",
"abusefilter-edit-warn-actions": "Радње:",
- "abusefilter-edit-warn-preview": "Прегледај изабрану поруку",
+ "abusefilter-edit-warn-preview": "Прикажи/сакриј преглед изабране поруке",
"abusefilter-edit-warn-edit": "Направи/уреди изабрану поруку",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Ознаке]] за примену (једна по реду):",
+ "abusefilter-edit-disallow-message": "Системска порука која ће се користити за упозорење:",
+ "abusefilter-edit-disallow-other": "Друге поруке",
+ "abusefilter-edit-disallow-other-label": "Име странице друге поруке:\n:''(без префикса „Медијавики”)''",
+ "abusefilter-edit-disallow-actions": "Радње:",
+ "abusefilter-edit-disallow-preview": "Прикажи/сакриј преглед изабране поруке",
+ "abusefilter-edit-disallow-edit": "Направи/уреди изабрану поруку",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Ознаке]] за примену:",
+ "abusefilter-edit-tag-hidden-placeholder": "Додајте ознаке (одвојене зарезом)",
+ "abusefilter-block-anon": "Блокирај анонимне кориснике",
+ "abusefilter-block-user": "блокирај регистроване кориснике",
"abusefilter-edit-denied": "Не можете видети детаље овог филтера јер је сакривен из јавног приказа.",
"abusefilter-edit-main": "Параметри филтера",
"abusefilter-edit-done-subtitle": "Филтер је уређен",
@@ -185,7 +229,7 @@
"abusefilter-edit-export": "Извези овај филтер на други вики",
"abusefilter-edit-syntaxok": "Нема синтаксних грешака.",
"abusefilter-edit-syntaxerr": "Откривена је синтактичка грешка: $1",
- "abusefilter-edit-bad-tags": "Једна или више ознака које сте навели нису валидне.\nОзнака мора бити кратка и не би требала имати специјалне карактере.",
+ "abusefilter-edit-bad-tags": "Једна или више ознака које сте навели нису валидне.\nОзнака мора бити кратка и не сме садржати специјалне карактере, и они не смеју бити коришћени од стране другог софтвера. Покушајте са бирањем нове ознаке.",
"abusefilter-edit-notallowed": "Није вам дозвољено да правите или уређујете филтере против злоупотребе",
"abusefilter-edit-notallowed-global": "Није вам дозвољено да правите или уређујете глобалне филтере против злоупотребе",
"abusefilter-edit-builder-select": "Изаберите могућност за додавање на показивач",
@@ -197,8 +241,8 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Модул (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Степеновање (**)",
"abusefilter-edit-builder-group-op-comparison": "Оператори за поређење",
- "abusefilter-edit-builder-op-comparison-equal": "Једнако са (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Није једнако са (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Вредност једнака са (==)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Вредност није једнака са (!=)",
"abusefilter-edit-builder-op-comparison-lt": "Мање од (<)",
"abusefilter-edit-builder-op-comparison-gt": "Веће од (>)",
"abusefilter-edit-builder-op-comparison-lte": "Мање или једнако са (<=)",
@@ -220,6 +264,7 @@
"abusefilter-edit-builder-group-funcs": "Функције",
"abusefilter-edit-builder-funcs-length": "Дужина ниске (length)",
"abusefilter-edit-builder-funcs-lcase": "Малим словима (lcase)",
+ "abusefilter-edit-builder-funcs-ucase": "Великим словима (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Нормализуј знаке подложне забуни (ccnorm)",
"abusefilter-edit-builder-funcs-rmdoubles": "Уклони поновљене знакове (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Посебни знакови / укупно знакова (specialratio)",
@@ -228,15 +273,17 @@
"abusefilter-edit-builder-funcs-rcount": "Број јављања регуларног израза X у нисци Y (rcount)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Уклони размаке (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Уклони посебне знакове (rmspecials)",
- "abusefilter-edit-builder-funcs-ip_in_range": "Провери да ли је ИП адреса у опсегу (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Претражи ниску на више подниски (contains_any)",
+ "abusefilter-edit-builder-funcs-ip_in_range": "Да ли је IP у опсегу? (ip_in_range)",
+ "abusefilter-edit-builder-funcs-contains-any": "Претражи ниску за више подниски у OR режиму. (contains_any)",
"abusefilter-edit-builder-funcs-substr": "Подниска (substr)",
"abusefilter-edit-builder-funcs-strpos": "Положај подниске у нисци (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Замени подниску с ниском (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Избегни буквалне ниске у регексу (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Постави променљиву (set_var)",
"abusefilter-edit-builder-group-vars": "Променљиве",
- "abusefilter-edit-builder-vars-accountname": "Назив налога (у тренутку отварања)",
+ "abusefilter-edit-builder-vars-accountname": "Име налога (у тренутку отварања)",
+ "abusefilter-edit-builder-vars-timestamp": "Јуниксов временски потпис измене",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Временска ознака дневника",
"abusefilter-edit-builder-vars-action": "Радња",
"abusefilter-edit-builder-vars-addedlines": "Додати редови у измени",
"abusefilter-edit-builder-vars-delta": "Промена величине у измени",
@@ -246,21 +293,24 @@
"abusefilter-edit-builder-vars-new-content-model": "Нови модел садржаја",
"abusefilter-edit-builder-vars-removedlines": "Уклоњени редови у измени",
"abusefilter-edit-builder-vars-summary": "Опис/разлог измене",
- "abusefilter-edit-builder-vars-article-id": "ID странице",
- "abusefilter-edit-builder-vars-article-ns": "Именски простор странице",
- "abusefilter-edit-builder-vars-article-text": "Наслов странице (без именског простора)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Пун наслов странице",
+ "abusefilter-edit-builder-vars-page-id": "ID странице",
+ "abusefilter-edit-builder-vars-page-ns": "Именски простор странице",
+ "abusefilter-edit-builder-vars-page-title": "Наслов странице (без именског простора)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Пун наслов странице",
+ "abusefilter-edit-builder-vars-page-age": "Старост странице (у секундама)",
"abusefilter-edit-builder-vars-movedfrom-id": "ID изворне странице премештања",
"abusefilter-edit-builder-vars-movedfrom-ns": "Именски простор премештене странице",
- "abusefilter-edit-builder-vars-movedfrom-text": "Наслов странице коју премештате",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Пун наслов странице коју премештате",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Наслов странице коју премештате",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Пун наслов странице коју премештате",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Премести старост изворне странице (у секундама)",
"abusefilter-edit-builder-vars-movedto-id": "ID одредишне странице премештања",
"abusefilter-edit-builder-vars-movedto-ns": "Именски простор одредишне странице",
- "abusefilter-edit-builder-vars-movedto-text": "Наслов одредишне странице",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Пун наслов одредишне странице",
+ "abusefilter-edit-builder-vars-movedto-title": "Наслов одредишне странице",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Пун наслов одредишне странице",
+ "abusefilter-edit-builder-vars-movedto-age": "Премести старост одредишне странице (у секундама)",
"abusefilter-edit-builder-vars-user-editcount": "Бројач корисничких измена",
"abusefilter-edit-builder-vars-user-age": "Старост корисничког налога",
- "abusefilter-edit-builder-vars-user-name": "Назив корисничког налога",
+ "abusefilter-edit-builder-vars-user-name": "Име корисничког налога",
"abusefilter-edit-builder-vars-user-groups": "Групе (укључујући посредне) у којима је корисник",
"abusefilter-edit-builder-vars-user-rights": "Права која корисник има",
"abusefilter-edit-builder-vars-user-emailconfirm": "Време када је имејл адреса потврђена",
@@ -268,16 +318,17 @@
"abusefilter-edit-builder-vars-all-links": "Све спољашње везе у новом тексту",
"abusefilter-edit-builder-vars-added-links": "Све спољашње везе додате у измени",
"abusefilter-edit-builder-vars-removed-links": "Све спољашње везе уклоњене у измени",
- "abusefilter-edit-builder-vars-old-text": "Стари викитекст пре измене",
+ "abusefilter-edit-builder-vars-old-text": "Стари викитекст пре измене (није више у употреби)",
"abusefilter-edit-builder-vars-new-text": "Нови викитекст после измене",
+ "abusefilter-edit-builder-vars-addedlines-pst": "Линије додане у уређивању, трансформиране у несачуване",
"abusefilter-edit-builder-vars-new-text-stripped": "Текст нове странице, без икаквих обележавања",
"abusefilter-edit-builder-vars-new-html": "Рашчлањени HTML извор нове измене",
- "abusefilter-edit-builder-vars-restrictions-edit": "Степен заштите странице (уређивање)",
- "abusefilter-edit-builder-vars-restrictions-move": "Степен заштите странице (премештање)",
+ "abusefilter-edit-builder-vars-restrictions-edit": "Ниво заштите странице (уређивање)",
+ "abusefilter-edit-builder-vars-restrictions-move": "Ниво заштите странице (премештање)",
"abusefilter-edit-builder-vars-old-text-stripped": "Текст старе странице, без икаквих обележавања",
"abusefilter-edit-builder-vars-old-links": "Везе на страници, пре уређивања",
- "abusefilter-edit-builder-vars-old-html": "Викитекст старе странице, рашчлањен у HTML",
- "abusefilter-edit-builder-vars-minor-edit": "Да ли је измена била означена као мала",
+ "abusefilter-edit-builder-vars-old-html": "Викитекст старе странице, рашчлањен у HTML (није више у употреби)",
+ "abusefilter-edit-builder-vars-minor-edit": "Да ли је измена била означена као мања",
"abusefilter-edit-builder-vars-file-sha1": "Дисперзија SHA1 садржаја датотеке",
"abusefilter-filter-log": "Скорашње измене филтера",
"abusefilter-history": "Историја измена филтера #$1",
@@ -297,24 +348,25 @@
"abusefilter-history-filterid": "Филтер",
"abusefilter-history-select-legend": "Прецизирај претрагу",
"abusefilter-history-select-user": "Корисник:",
+ "abusefilter-history-select-filter": "ID филтера:",
"abusefilter-history-select-submit": "Прочисти",
"abusefilter-history-diff": "Измене",
- "abusefilter-history-error-hidden": "Тражени филтер је сакривен, и зато не можете да видите његову историју.",
+ "abusefilter-history-error-hidden": "Филтер који сте тражили је сакривен. Не можете да видите његову историју.",
"abusefilter-exception-unexpectedatend": "Неочекивано „$2“ код знака $1.",
"abusefilter-exception-expectednotfound": "Очекивало се $2 код знака $1, није нађено (уместо тога је пронађено $3 $4).",
"abusefilter-exception-unrecognisedkeyword": "Непрепозната кључна реч $2 код знака $1.",
- "abusefilter-exception-unexpectedtoken": "Неочекивани жетон „$3“ (од врсте $2) код знака $1.",
+ "abusefilter-exception-unexpectedtoken": "Неочекивани токен „$3“ (типа $2) код знака $1.",
"abusefilter-exception-unclosedstring": "Незатворена ниска почиње са знаком $1.",
"abusefilter-exception-invalidoperator": "Неисправан оператор „$2“ код знака $1.",
- "abusefilter-exception-unrecognisedtoken": "Непрепознати жетон „$2“ код знака $1.",
- "abusefilter-exception-noparams": "Нема наведених параметара за функцију „$2“ код знака $1.",
+ "abusefilter-exception-unrecognisedtoken": "Непрепознат токен „$2“ код знака $1.",
+ "abusefilter-exception-noparams": "Нема наведених параметара за функцију „$2” код знака $1.\n{{PLURAL:$3|Очекиван $3 аргумент|Очекивано $3 аргумената}}.",
"abusefilter-exception-dividebyzero": "Недозвољен покушај дељења $2 с нулом код знака $1.",
"abusefilter-exception-unrecognisedvar": "Непрепозната променљива $2 код знака $1",
"abusefilter-exception-notenoughargs": "Недовољно аргумената за функцију $2 позвану на карактеру $1.\n{{PLURAL:$3|Очекивало се аргумената:}} $3, а добијено: $4",
"abusefilter-exception-regexfailure": "Грешка у регуларном изрзу „$3“ код знака $1: „$2“",
"abusefilter-exception-overridebuiltin": "Недозвољено мењање променљиве „$2“ на карактеру $1.",
- "abusefilter-exception-outofbounds": "Захтевање непостојеће ставке у списку $2 (величина списка = $3) код знака $1.",
- "abusefilter-exception-notlist": "Захтевање ставке низа за објекат који није низ код знака $1.",
+ "abusefilter-exception-outofbounds": "Захтевање непостојеће ставке у низу $2 (величина низа = $3) код знака $1.",
+ "abusefilter-exception-notarray": "Захтевање ставке низа за објекат који није низ код знака $1.",
"abusefilter-action-tag": "означено",
"abusefilter-action-throttle": "успори",
"abusefilter-action-warn": "упозори",
@@ -330,8 +382,9 @@
"abusefilter-revert-periodstart": "Почетак периода:",
"abusefilter-revert-periodend": "Крај периода:",
"abusefilter-revert-search": "Изабери радње",
- "abusefilter-revert-filter": "Филтер:",
+ "abusefilter-revert-filter": "ID филтера:",
"abusefilter-revert-preview-intro": "Испод су приказане радње које ће бити враћене.\nПажљиво их проверите и кликните на опцију „потврди“ да бисте потврдили свој избор.",
+ "abusefilter-revert-confirm-legend": "Потврди враћање",
"abusefilter-revert-confirm": "Потврди",
"abusefilter-revert-success": "Вратили сте све радње које је преузео филтер за уређивање због [[Special:AbuseFilter/$1|филтерa $2]].",
"abusefilter-revert-reason": "Аутоматско враћање свих радњи које је начинио филтер $1.\nРазлог: $2",
@@ -343,15 +396,22 @@
"abusefilter-test-submit": "Тестирај",
"abusefilter-test-load": "Учитај",
"abusefilter-test-user": "Измене од корисника:",
+ "abusefilter-test-nobots": "Сакриј измене ботова",
"abusefilter-test-period-start": "Измене направљене после:",
"abusefilter-test-period-end": "Измене направљене пре:",
"abusefilter-test-page": "Измене направљене на страници:",
"abusefilter-test-shownegative": "Прикажи измене које не одговарају филтеру",
"abusefilter-test-syntaxerr": "Филтер који сте унели садржи синтаксне грешке.\nДа бисте добили детаљно објашњење кликните на дугме „{{int:abusefilter-edit-check}}“.",
+ "abusefilter-test-action": "Тип радње:",
+ "abusefilter-test-search-type-all": "Све радње",
+ "abusefilter-test-search-type-edit": "Измене",
+ "abusefilter-test-search-type-delete": "Брисања",
+ "abusefilter-test-search-type-upload": "Отпремања",
+ "abusefilter-test-search-type-createaccount": "Отварања налога",
"abusefilter-changeslist-examine": "прегледај",
"abusefilter-examine": "Испитај појединачне измене",
"abusefilter-examine-intro": "Ова страница омогућава испитивање променљивих које је генерисао филтер злоупотреба за одређену измену и испробавање на филтерима.",
- "abusefilter-examine-legend": "Изаберите измене",
+ "abusefilter-examine-legend": "Изаберите промене",
"abusefilter-examine-diff": "Адреса разлике:",
"abusefilter-examine-user": "Корисник:",
"abusefilter-examine-title": "Наслов странице:",
@@ -370,22 +430,28 @@
"abusefilter-topnav-test": "групно испробавање",
"abusefilter-topnav-examine": "испитај прошле измене",
"abusefilter-topnav-log": "историја злоупотребе",
- "abusefilter-topnav-tools": "алати за дебаговање",
+ "abusefilter-topnav-tools": "Алатке за дебаговање",
"abusefilter-topnav-import": "увези филтер",
- "abusefilter-log-name": "Дневник филтера против злоупотребе",
+ "abusefilter-log-name": "Дневник филтера злоупотребе",
"abusefilter-log-header": "Овде је приказан сажетак измена начињених над филтерима.\nЗа више информација погледајте [[Special:AbuseFilter/history|преглед]] скорашњих измена.",
+ "abusefilter-logentry-create": "$1 је {{GENDER:$2|направио|направила}} $4 ($5)",
+ "abusefilter-logentry-modify": "$1 је {{GENDER:$2|уредио|уредила}} $4 ($5)",
"abusefilter-log-noresults": "Нема резултата",
"abusefilter-diff-title": "Разлике између издања",
"abusefilter-diff-item": "Ставка",
- "abusefilter-diff-version": "Верзија од $1 {{GENDER:$3|од}} $2",
+ "abusefilter-diff-version": "Издање од $1 {{GENDER:$3|од}} $2",
"abusefilter-diff-info": "Основни подаци",
"abusefilter-diff-pattern": "Услови филтера",
- "abusefilter-diff-invalid": "Не могу да прибавим захтеване верзије",
+ "abusefilter-diff-invalid": "Не могу да прибавим захтеваног издања",
"abusefilter-diff-backhistory": "Повратак на историју филтера",
"abusefilter-diff-prev": "Старије измене",
"abusefilter-diff-next": "Новије измене",
"abusefilter-import-intro": "Ово корисничко окружење служи за увоз филтера са других викија.\nНа изворном викију, кликните на „{{int:abusefilter-edit-export}}“ под „{{int:abusefilter-edit-tools}}“ у уређивачком оквиру.\nКопирајте садржај из поља које се појави и налепите га у ово поље, па кликните на „{{int:abusefilter-import-submit}}“.",
"abusefilter-import-submit": "Увези податке",
"abusefilter-group-default": "Подразумевано",
- "abusefilter-http-error": "Дошло је до HTTP грешке: $1."
+ "abusefilter-http-error": "Дошло је до HTTP грешке: $1.",
+ "abusefilter-view-private-submit": "Погледај приватне детаље",
+ "abusefilter-view-private-reason": "Разлог за приступање приватним детаљима:",
+ "abusefilter-log-ip-not-available": "Недоступно",
+ "tag-abusefilter-condition-limit": "достигнуто условно ограничење"
}
diff --git a/AbuseFilter/i18n/sr-el.json b/AbuseFilter/i18n/sr-el.json
index c84eacb5..dd64d2a1 100644
--- a/AbuseFilter/i18n/sr-el.json
+++ b/AbuseFilter/i18n/sr-el.json
@@ -8,14 +8,14 @@
"Михајло Анђелковић",
"Matma Rex",
"Сербијана",
- "Obsuser"
+ "Obsuser",
+ "Zoranzoki21"
]
},
"abusefilter-desc": "Izvršava automatsko heurističko filtriranje izmena",
"abusefilter": "Postavke filtera protiv zloupotrebe",
"abuselog": "Izveštaj zloupotrebe",
"abusefilter-intro": "Dobro došli u okruženje za upravljanje Filterom protiv zloupotrebe.\nTo je softverski mehanizam koji primenjuje automatsku heuristiku za sve radnje.\nOvo okruženje prikazuje spisak određenih filtera i omogućava vam da ih promenite.",
- "abusefilter-mustbeeditor": "Iz sigurnosnih razloga, samo korisnici sa odgovarajućim pravima na izmenu filtera protiv zloupotrebe mogu koristiti ovo okruženje.",
"abusefilter-warning": "'''Upozorenje''': Automatski filter je prepoznao ovu izmenu kao potencijalno štetnu.\nNekonstruktivne akcije će biti vraćene i mogu da dovedu do zabrane uređivanja.\nUkoliko smatrate da izmena ipak jeste konstruktivna, kliknite još jedanput na dugme „Sačuvaj stranicu“.\nKratak opis pravila zloupotrebe koje ste aktivirali: $1",
"abusefilter-disallowed": "Automatski filter je prepoznao ovu izmenu kao potencijalno štetnu i stoga je nije dozvolio.\nUkoliko smatrate da izmena ipak jeste konstruktivna, obavestite nekog od administratora o tome šta pokušavate da učinite.\nKratak opis povređenog pravila: $1",
"abusefilter-blocked-display": "Automatski filter je prepoznao ovu izmenu kao potencijalno štetnu i nije vam dopušteno da je izvršite.\nOsim toga, da bi se zaštititio/la {{SITENAME}}, vaš nalog i odgovarajuće IP adrese su blokirane.\nUkoliko se ovo dogodilo greškom, kontaktirajte nekog od administratora.\nKratak opis povređenog pravila: $1",
@@ -78,8 +78,6 @@
"abusefilter-log-hide-hidden": "Sakrij ovaj unos iz javnog prikaza",
"abusefilter-log-hide-reason": "Razlog:",
"abusefilter-log-hide-forbidden": "Nemate dozvolu da sakrivate unose u izveštaju zloupotrebe.",
- "abusefilter-logentry-suppress": "sakrij „[[$1]]“",
- "abusefilter-logentry-unsuppress": "otkri „[[$1]]“",
"logentry-abusefilter-hit": "$1 je {{GENDER:$2|aktivirao|aktivirala}} $4, izvodeći radnju „$5“ na stranici $3. Preduzete radnje: $6 ($7)",
"abusefilter-management": "Upravljanje filterom protiv zloupotrebe",
"abusefilter-list": "Svi filteri",
@@ -112,7 +110,6 @@
"abusefilter-list-options-scope-local": "Samo lokalna pravila",
"abusefilter-list-options-scope-global": "Samo globalna pravila",
"abusefilter-list-options-scope-all": "Lokalna i globalna pravila",
- "abusefilter-list-options-disabled": "Onemogućeni filteri:",
"abusefilter-list-options-hidedisabled": "Sakrij onemogućene filtere",
"abusefilter-list-options-submit": "Ažuriraj",
"abusefilter-tools-text": "Ovde se nalaze alatke koje su korisne za ispravljanje grešaka na filteru protiv zloupotrebe.",
@@ -128,11 +125,10 @@
"abusefilter-edit": "Uređivanje filtera zloupotrebe",
"abusefilter-edit-subtitle": "Uređujete filter $1",
"abusefilter-edit-subtitle-new": "Pravljenje filtera",
- "abusefilter-edit-oldwarning": "<strong>Uređujete staro izdanje ovog filtera.\nIskazane statistike su za najnovije izdanje.\nAko sačuvate, obrisaćete sve izmene nastale od revizije koju upravo uređujete.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Nazad na istoriju ovog filtera]].",
+ "abusefilter-edit-oldwarning": "<strong>Uređujete staro izdanje ovog filtera.\nIskazane statistike su za najnovije izdanje.\nAko sačuvate, obrisaćete sve izmene nastale od izmene koju upravo uređujete.</strong> &bull;\n[[Special:AbuseFilter/history/$2|Nazad na istoriju ovog filtera]].",
"abusefilter-edit-status-label": "Statistike:",
"abusefilter-edit-status": "Od {{PLURAL:$1|1=poslednje radnje|poslednje $1 radnje|poslednjih $1 radnji}}, ovaj filter se poklopio $2 ($3%).",
"abusefilter-edit-status-profile": "Od {{PLURAL:$1|poslednje radnje|poslednje $1 radnje|poslednjih $1 radnji}}, ovaj filter se poklopio $2 ($3%).\nU proseku, njegovo vreme pokretanja je $4 ms, a troši $5 {{PLURAL:$5|uslov|uslova}}.",
- "abusefilter-edit-throttled": "'''Upozorenje:''' ovaj filter je onemogućen iz sigurnosnih razloga.\nDostignuto je ograničenje podudaranja s više od $1% radnji.",
"abusefilter-edit-new": "Novi filter",
"abusefilter-edit-save": "Sačuvaj filter",
"abusefilter-edit-id": "ID filtera:",
@@ -159,7 +155,6 @@
"abusefilter-edit-action-tag": "Označi izmenu za budući pregled",
"abusefilter-edit-throttle-count": "Broj dozvoljenih radnji:",
"abusefilter-edit-throttle-period": "Vremenski period:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekund|sekunda|sekundi}}",
"abusefilter-edit-throttle-groups": "Grupno usporavanje prema:\n:''(jedan po redu, zajedno sa zapetama)''",
"abusefilter-edit-warn-message": "Sistemska poruka koja će se koristiti za upozorenje:",
"abusefilter-edit-warn-other": "Ostale poruke",
@@ -243,18 +238,18 @@
"abusefilter-edit-builder-vars-oldsize": "Veličina stare strane",
"abusefilter-edit-builder-vars-removedlines": "Linije uklonjene tokom izmene",
"abusefilter-edit-builder-vars-summary": "Opis/razlog izmene",
- "abusefilter-edit-builder-vars-article-id": "ID stranice",
- "abusefilter-edit-builder-vars-article-ns": "Imenski prostor stranice",
- "abusefilter-edit-builder-vars-article-text": "Naslov stranice (bez imenskog prostora)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Pun naslov stranice",
+ "abusefilter-edit-builder-vars-page-id": "ID stranice",
+ "abusefilter-edit-builder-vars-page-ns": "Imenski prostor stranice",
+ "abusefilter-edit-builder-vars-page-title": "Naslov stranice (bez imenskog prostora)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Pun naslov stranice",
"abusefilter-edit-builder-vars-movedfrom-id": "ID izvorne stranice premeštanja",
"abusefilter-edit-builder-vars-movedfrom-ns": "Imenski prostor premeštene stranice",
- "abusefilter-edit-builder-vars-movedfrom-text": "Naslov stranice koju premeštate",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Pun naslov stranice koju premeštate",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Naslov stranice koju premeštate",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Pun naslov stranice koju premeštate",
"abusefilter-edit-builder-vars-movedto-id": "ID odredišne stranice premeštanja",
"abusefilter-edit-builder-vars-movedto-ns": "Imenski prostor odredišne stranice",
- "abusefilter-edit-builder-vars-movedto-text": "Naslov odredišne stranice",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Pun naslov odredišne stranice",
+ "abusefilter-edit-builder-vars-movedto-title": "Naslov odredišne stranice",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Pun naslov odredišne stranice",
"abusefilter-edit-builder-vars-user-editcount": "Korisički brojač izmena",
"abusefilter-edit-builder-vars-user-age": "Starost korisničkog naloga",
"abusefilter-edit-builder-vars-user-name": "Naziv korisničkog naloga",
@@ -265,7 +260,7 @@
"abusefilter-edit-builder-vars-all-links": "Sve spoljašnje veze u novom tekstu",
"abusefilter-edit-builder-vars-added-links": "Sve spoljašnje veze dodate u izmeni",
"abusefilter-edit-builder-vars-removed-links": "Sve spoljašnje veze uklonjene u izmeni",
- "abusefilter-edit-builder-vars-old-text": "Vikitekst stare strane, pre izmene",
+ "abusefilter-edit-builder-vars-old-text": "Stari vikitekst pre izmene (nije više u upotrebi)",
"abusefilter-edit-builder-vars-new-text": "Novi vikitekst posle izmene",
"abusefilter-edit-builder-vars-new-text-stripped": "Tekst nove stranice, bez ikakvih obeležavanja",
"abusefilter-edit-builder-vars-new-html": "Raščlanjeni HTML izvor nove izmene",
@@ -273,7 +268,7 @@
"abusefilter-edit-builder-vars-restrictions-move": "Stepen zaštite stranice (premeštanje)",
"abusefilter-edit-builder-vars-old-text-stripped": "Tekst stare stranice, bez ikakvih obeležavanja",
"abusefilter-edit-builder-vars-old-links": "Veze na stranici, pre uređivanja",
- "abusefilter-edit-builder-vars-old-html": "Vikitekst stare stranice, raščlanjen u HTML",
+ "abusefilter-edit-builder-vars-old-html": "Vikitekst stare stranice, raščlanjen u HTML (nije više u upotrebi)",
"abusefilter-edit-builder-vars-minor-edit": "Da li je izmena bila označena kao mala",
"abusefilter-edit-builder-vars-file-sha1": "Disperzija SHA1 sadržaja datoteke",
"abusefilter-filter-log": "Skorašnje izmene filtera",
@@ -311,7 +306,7 @@
"abusefilter-exception-regexfailure": "Greška u regularnom izrzu \"$3\" na karakteru $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Nedozvoljeno menjanje promenljive „$2“ na karakteru $1.",
"abusefilter-exception-outofbounds": "Zahtevanje nepostojećeg elementa spiska $2 (veličina spiska = $3) na karakteru $1.",
- "abusefilter-exception-notlist": "Zahtevanje člana niza od nečega što nije niz, na karakteru $1.",
+ "abusefilter-exception-notarray": "Zahtevanje člana niza od nečega što nije niz, na karakteru $1.",
"abusefilter-action-tag": "označeno",
"abusefilter-action-throttle": "uspori",
"abusefilter-action-warn": "upozori",
diff --git a/AbuseFilter/i18n/stq.json b/AbuseFilter/i18n/stq.json
index 407156cb..8bda67d6 100644
--- a/AbuseFilter/i18n/stq.json
+++ b/AbuseFilter/i18n/stq.json
@@ -53,7 +53,6 @@
"abusefilter-log-noactions": "neen",
"abusefilter-log-hide-reason": "Gruund:",
"abusefilter-log-hide-forbidden": "Du hääst nit ju Begjuchtigenge, die Iendraage fon dät Misbruuksieuwe-Logbouk tou fersteeten.",
- "abusefilter-logentry-suppress": "häd „[[$1]]“ ferstat",
"abusefilter-management": "Misbruukssieuwe-Ferwaltenge",
"abusefilter-list": "Aal Sieuwen",
"abusefilter-list-id": "Sieuwe-ID",
@@ -78,7 +77,6 @@
"abusefilter-list-options-deleted-only": "Bloot läskede Sieuwen bekiekje",
"abusefilter-list-options-deleted-hide": "Läskede Sieuwen fersteete",
"abusefilter-list-options-deleted-show": "Läskede Sieuwen ienbeluuke",
- "abusefilter-list-options-disabled": "Deaktivierde Sieuwen",
"abusefilter-list-options-hidedisabled": "Deaktivierde Sieuwen fersteete",
"abusefilter-list-options-submit": "Spiekerje",
"abusefilter-tools-text": "Hier sunt wäkke Reewen, do der hälpe konnen bie dät Formulierjen un bie ju Failersäike fon Misbruukssieuwen.",
@@ -95,7 +93,6 @@
"abusefilter-edit-status-label": "Statistike:",
"abusefilter-edit-status": "Fon {{PLURAL:$1|ju|do}} lääste {{PLURAL:$1|Aktion|$1 Aktione}} {{PLURAL:$2|wuud|wuuden}} $2 ($3 %) fon disse Sieuwe wierkoand.",
"abusefilter-edit-status-profile": "Fon {{PLURAL:$1|ju|do}} lääste {{PLURAL:$1|Aktion|$1 Aktione}} {{PLURAL:$2|wuud|wuuden}} $2 ($3 %) fon disse Sieuwe wierkoand.\nIn n Truchsnit bedruuch hiere Beoarbaidengstied $4 ms un do benöödigeden $5 {{PLURAL:$5|Bedingenge|Bedingengen}} fon ju ferlööwede Hoochsttaal.",
- "abusefilter-edit-throttled": "'''Woarskauenge''': Disse Sieuwe wuud sicherhaidshoolwe automatisk deaktivierd. Ju häd moor as dät definierde Buppeskeed fon $1 % fon do Aktione ärkoand.",
"abusefilter-edit-new": "Näie Sieuwe",
"abusefilter-edit-save": "Sieuwe spiekerje",
"abusefilter-edit-id": "Sieuwe-ID:",
@@ -112,7 +109,6 @@
"abusefilter-edit-consequences": "Bie Träffere uuttoufierende Aktione",
"abusefilter-edit-action-warn": "Aktione ätter Woarskauenge fon dän Benutser uutfiere",
"abusefilter-edit-action-disallow": "Unnerbint ju fon dän Benutser foarsäine Aktion",
- "abusefilter-edit-action-flag": "Beoarbaidenge in dät Misbruuks-Logbouk markierje",
"abusefilter-edit-action-blockautopromote": "„Bestäätiger Benutser“-Stoatus äntluuke",
"abusefilter-edit-action-degroup": "Benutser uut aal Gruppen mäd Sunnergjuchte wächhoalje",
"abusefilter-edit-action-block": "Benutser/IP-Adrässe speere",
@@ -120,7 +116,6 @@
"abusefilter-edit-action-rangeblock": "/16-Range speere, uut dän die Benutser stamt.",
"abusefilter-edit-throttle-count": "Antaal toulätte Aktione:",
"abusefilter-edit-throttle-period": "Tiedruum:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|Sekunde|Sekunden}}",
"abusefilter-edit-throttle-groups": "Räägele foar ju Gruppendröisel:\n:''(een pro Riege, ferbiende mäd Kommata)''",
"abusefilter-edit-warn-message": "Systemättergjucht foar ju Woarskauenge:",
"abusefilter-edit-denied": "Du koast do Details fon disse Sieuwe nit ienkiekje, deeruum dät do ferstopped sunt",
@@ -173,18 +168,18 @@
"abusefilter-edit-builder-vars-oldsize": "Oolde Siedengrööte",
"abusefilter-edit-builder-vars-removedlines": "Riegen bie ju Beoarbaidenge wächhoald",
"abusefilter-edit-builder-vars-summary": "Touhoopefoatenge",
- "abusefilter-edit-builder-vars-article-id": "Sieden-ID",
- "abusefilter-edit-builder-vars-article-ns": "Noomensruumte fon ju Siede",
- "abusefilter-edit-builder-vars-article-text": "Tittel fon ju Siede (sunner Noomensruumte)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Fullen Siedennoome",
+ "abusefilter-edit-builder-vars-page-id": "Sieden-ID",
+ "abusefilter-edit-builder-vars-page-ns": "Noomensruumte fon ju Siede",
+ "abusefilter-edit-builder-vars-page-title": "Tittel fon ju Siede (sunner Noomensruumte)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Fullen Siedennoome",
"abusefilter-edit-builder-vars-movedfrom-id": "Artikkel-ID fon ju Wällesiede",
"abusefilter-edit-builder-vars-movedfrom-ns": "Noomensruum fon ju Wällesiede",
- "abusefilter-edit-builder-vars-movedfrom-text": "Tittel fon ju Wällesiede",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Fulboodigen Tittel fon ju Wällesiede",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Tittel fon ju Wällesiede",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Fulboodigen Tittel fon ju Wällesiede",
"abusefilter-edit-builder-vars-movedto-id": "Artikkel-ID fon ju Sielsiede",
"abusefilter-edit-builder-vars-movedto-ns": "Noomensruum fon ju Sielsiede",
- "abusefilter-edit-builder-vars-movedto-text": "Tittel fon ju Sielsiede",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Fulboodigen Tittel fon ju Sielsiede",
+ "abusefilter-edit-builder-vars-movedto-title": "Tittel fon ju Sielsiede",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Fulboodigen Tittel fon ju Sielsiede",
"abusefilter-edit-builder-vars-user-editcount": "Biedraachställenge fon dän Benutser",
"abusefilter-edit-builder-vars-user-age": "Oaler fon Benutserkonto",
"abusefilter-edit-builder-vars-user-name": "Noome fon dät Benutserkonto",
diff --git a/AbuseFilter/i18n/sv.json b/AbuseFilter/i18n/sv.json
index 123e08cd..09a13fbc 100644
--- a/AbuseFilter/i18n/sv.json
+++ b/AbuseFilter/i18n/sv.json
@@ -29,15 +29,16 @@
"Marfuas",
"Josve05a",
"Matma Rex",
- "Matěj Suchánek"
+ "Matěj Suchánek",
+ "Bengtsson96"
]
},
"abusefilter-desc": "Tillämpar automatiska filter på redigeringar",
"abusefilter": "Konfiguration av missbruksfilter",
"abuselog": "Missbrukslogg",
"abusefilter-intro": "Välkommen till gränssnittet för hantering av missbruksfiltret.\nMissbruksfiltret är en automatisk mjukvarumekanism som utför automatisk kontroll av alla handlingar.\nDetta gränssnitt visar en lista över definierade filter och gör det möjligt att ändra i dessa.",
- "abusefilter-mustbeeditor": "Av säkerhetsskäl kan bara användare med rätt att modifiera missbruksfiltret använda detta gränssnitt.",
- "abusefilter-warning": "'''Varning:''' Denna handling har automatiskt identifierats som skadlig.\nDestruktiva redigeringar kommer snabbt att återställas,\noch återkommande förstörande redigeringar kommer leda till att ditt konto eller IP-adress blir blockerad.\nOm du anser att denna handling är konstruktiv, klicka på \"Spara\" igen för att bekräfta det.\nEn kortfattad beskrivning av missbruksregler som din handling utlöste är: $1",
+ "abusefilter-mustviewprivateoredit": "Av säkerhetsskäl kan bara användare med rättigheten att visa privata missbruksfilter eller modifiera missbruksfiltret använda detta gränssnitt.",
+ "abusefilter-warning": "'''Varning:''' Denna handling har automatiskt identifierats som skadlig.\nDestruktiva handlingar kommer snabbt att återställas,\noch återkommande förstörande redigeringar kommer leda till att ditt konto eller IP-adress blir blockerad.\nOm du anser att denna handling är konstruktiv, klicka på \"Spara\" igen för att bekräfta det.\nEn kortfattad beskrivning av missbruksregler som din handling utlöste är: $1",
"abusefilter-disallowed": "Denna handling har automatiskt identifierats som skadlig och tillåts därför inte.\nOm du anser att din handling var konstruktiv, kontakta en administratör och informera denna om vad du försökte göra.\nEn kortfattad beskrivning av missbruksregeln som din handling utlöste är: $1",
"abusefilter-blocked-display": "Denna handling har automatiskt identifierats som skadlig och du har blivit hindrad från att genomföra den.\nDessutom har ditt användarkonto och alla associerade IP-adresser blivit blockerade från att redigera {{SITENAME}}.\nOm detta var ett fel, var god kontakta en administratör.\nEn kortfattad beskrivning av missbruksregeln som din handling utlöste är: $1",
"abusefilter-degrouped": "Denna handling har automatiskt identifierats som skadlig.\nDärför tilläts den inte, och på grund av misstanke om missbruk har ditt konto mist alla rättigheter.\nOm du menar att detta har skett på grund av ett fel, var god kontakta en byråkrat med en förklaring av vad du gjorde, så kan dina rättigheter återställas.\nEn kortfattad beskrivning av missbruksregeln som din handling utlöste är: $1",
@@ -51,6 +52,7 @@
"right-abusefilter-log": "Visa missbruksloggen",
"right-abusefilter-log-detail": "Visa detaljerade element i missbruksloggen",
"right-abusefilter-private": "Visa privat information i missbruksloggen",
+ "right-abusefilter-private-log": "Visa missbruksfiltrets privata detaljer i åtkomstloggen",
"right-abusefilter-modify-restricted": "Justera missbruksfilter med begränsade handlingar",
"right-abusefilter-revert": "Återställ alla ändringar gjorda av ett visst missbruksfilter",
"right-abusefilter-view-private": "Visa missbruksfilter som är markerade som privata",
@@ -63,20 +65,35 @@
"action-abusefilter-log": "se missbruksloggen",
"action-abusefilter-log-detail": "se detaljerna i missbruksloggen",
"action-abusefilter-private": "se privat data i missbruksloggen",
+ "action-abusefilter-private-log": "visa missbruksfiltrets privata detaljer i åtkomstloggen",
"action-abusefilter-modify-restricted": "ändra missbruksfilter med begränsade handlingar",
"action-abusefilter-revert": "återställ alla ändringar av ett angivet missbruksfilter",
"action-abusefilter-view-private": "visa missbruksfilter markerade som privata",
+ "action-abusefilter-log-private": "visa loggar över missbruksfilter som är märkta som privata",
"abusefilter-log": "Logg för missbruksfilter",
"abusefilter-log-summary": "Denna logg visar en lista över alla handlingar som fångats upp av filtren.",
"abusefilter-log-search": "Sök i missbruksloggen",
"abusefilter-log-search-user": "Användare:",
- "abusefilter-log-search-filter": "Filter-ID:",
+ "abusefilter-log-search-filter": "Filter-ID (separeras med vertikalstreck):",
"abusefilter-log-search-title": "Titel:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "Påverkan:",
+ "abusefilter-log-search-impact-all": "Alla handlingar",
+ "abusefilter-log-search-impact-saved": "Endast sparade ändringar",
+ "abusefilter-log-search-impact-not-saved": "Utan sparade ändringar",
+ "abusefilter-log-search-entries-label": "Synlighet",
+ "abusefilter-log-search-entries-all": "Alla poster",
+ "abusefilter-log-search-entries-hidden": "Endast dolda poster",
+ "abusefilter-log-search-entries-visible": "Endast synliga poster",
+ "abusefilter-log-search-action-label": "Utlösande åtgärd:",
+ "abusefilter-log-search-action-other": "Övrigt",
+ "abusefilter-log-search-action-any": "Alla",
+ "abusefilter-log-search-action-taken-label": "Vidtagna handlingar:",
+ "abusefilter-log-search-action-taken-any": "Alla",
"abusefilter-log-search-submit": "Sök",
- "abusefilter-log-entry": "$1: $2 utlöste ett missbruksfilter genom att {{GENDER:$8|göra}} handlingen \"$3\" på $4.\nUtförd handling: $5;\nFilterbeskrivning: $6",
- "abusefilter-log-entry-withdiff": "$1: $2 utlöste ett missbruksfilter genom att {{GENDER:$8|utföra}} handlingen \"$3\" på $4.\nUtförd handling: $5;\nFilterbeskrivning: $6 ($7)",
- "abusefilter-log-detailedentry-meta": "$1: $2 utlöste $3, genom att {{GENDER:$9|göra}} handlingen \"$4\" på $5.\nUtförd handling: $6;\nFilterbeskrivning: $7 ($8)",
+ "abusefilter-log-entry": "$1: $2 {{GENDER:$8|utlöste}} ett missbruksfilter genom att {{GENDER:$8|göra}} handlingen \"$3\" på $4.\nUtförd handling: $5;\nFilterbeskrivning: $6",
+ "abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|utlöste}} ett missbruksfilter genom att {{GENDER:$8|utföra}} handlingen \"$3\" på $4.\nUtförd handling: $5;\nFilterbeskrivning: $6 ($7)",
+ "abusefilter-log-detailedentry-meta": "$1: $2 {{GENDER:$9|utlöste}} $3, genom att {{GENDER:$9|göra}} handlingen \"$4\" på $5.\nUtförd handling: $6;\nFilterbeskrivning: $7 ($8)",
"abusefilter-log-detailedentry-global": "globalt filter $1",
"abusefilter-log-detailedentry-local": "filter $1",
"abusefilter-log-detailslink": "detaljer",
@@ -86,28 +103,42 @@
"abusefilter-log-details-var": "Variabel",
"abusefilter-log-details-val": "Värde",
"abusefilter-log-details-vars": "Handlingsparametrar",
- "abusefilter-log-details-private": "Privat information",
+ "abusefilter-log-details-private": "Privata loggdetaljer",
"abusefilter-log-details-ip": "Upphovs-IP",
+ "abusefilter-log-details-checkuser": "Kontrollera användare",
"abusefilter-log-noactions": "ingen",
"abusefilter-log-details-diff": "Ändringar utförda i redigeringen",
"abusefilter-log-linkoncontribs": "missbrukslogg",
"abusefilter-log-linkoncontribs-text": "Missbrukslogg för {{GENDER:$1|den här användaren}}",
+ "abusefilter-log-linkonhistory": "visa missbrukslogg",
+ "abusefilter-log-linkonhistory-text": "Visa missbruksloggen för denna sida",
"abusefilter-log-hidden": "(post dold)",
"abusefilter-log-hidden-implicit": "(dold eftersom versionen har tagits bort)",
"abusefilter-log-cannot-see-details": "Du har inte behörighet att se detaljer om den här posten.",
+ "abusefilter-log-cannot-see-private-details": "Du har inte behörighet för att se privata detaljer över denna post.",
+ "abusefilter-log-nonexistent": "En post med angivet ID finns inte.",
"abusefilter-log-details-hidden": "Du kan inte se detaljerna för denna post eftersom den är dold från allmän visning",
+ "abusefilter-log-details-hidden-implicit": "Du kan inte se detaljerna för detta element eftersom dess associerade sidversion är dold från allmän vy.",
"abusefilter-log-private-not-included": "En eller flera av de Filter-ID du angav är privata. Då du saknar tillstånd att se detaljer för privata filter, har dessa filter inte sökts.",
"abusefilter-log-hide-legend": "Dölj loggpost",
"abusefilter-log-hide-id": "Loggpost-ID:",
"abusefilter-log-hide-hidden": "Dölj denna posten från allmän visning",
"abusefilter-log-hide-reason": "Orsak:",
+ "abusefilter-log-hide-reason-other": "Annan/ytterligare anledning:",
"abusefilter-log-hide-forbidden": "Du har inte behörighet att dölja\nmissbrukslogg-poster.",
- "abusefilter-logentry-suppress": "dolde \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "visade \"[[$1]]\"",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|dolde}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|återställde}} $3",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|utlöste}} $4, {{GENDER:$2|utförde}} åtgärden \"$5\" på $3. Åtgärder: $6 ($7)",
+ "log-action-filter-abusefilter": "Typ av filterändring:",
+ "log-action-filter-abusefilter-create": "Nya skapade filter",
+ "log-action-filter-abusefilter-modify": "Ändring av filter",
+ "log-action-filter-suppress-abuselog": "Censur av missbrukslogg",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|fick åtkomst}} till privata detaljer för $3",
+ "abusefilterprivatedetails-log-name": "Missbruksfilter för privata detaljer i åtkomstloggen",
"abusefilter-management": "Hantering av missbruksfilter",
"abusefilter-list": "Alla filter",
"abusefilter-list-id": "Filter-ID",
+ "abusefilter-list-pattern": "Mönster",
"abusefilter-list-status": "Status",
"abusefilter-list-public": "Offentlig beskrivning",
"abusefilter-list-consequences": "Konsekvenser",
@@ -123,6 +154,7 @@
"abusefilter-enabled": "Aktiverat",
"abusefilter-deleted": "Raderad",
"abusefilter-disabled": "Avaktiverat",
+ "abusefilter-throttled": "begränsad",
"abusefilter-hitcount": "$1 {{PLURAL:$1|träff|träffar}}",
"abusefilter-new": "Skapa ett nytt filter",
"abusefilter-return": "Återvänd till filteradministration",
@@ -136,8 +168,16 @@
"abusefilter-list-options-scope-local": "Endast lokala regler",
"abusefilter-list-options-scope-global": "Endast globala regler",
"abusefilter-list-options-scope-all": "Lokala och globala regler",
- "abusefilter-list-options-disabled": "Avaktiverade filter:",
+ "abusefilter-list-options-further-options": "Ytterligare alternativ:",
"abusefilter-list-options-hidedisabled": "Göm avaktiverade filter",
+ "abusefilter-list-options-hideprivate": "Dölj privata filter",
+ "abusefilter-list-options-searchfield": "Sök inom regler:",
+ "abusefilter-list-options-searchpattern": "Ange ett mönster",
+ "abusefilter-list-options-searchoptions": "Sökläge:",
+ "abusefilter-list-options-search-like": "Vanlig fråga",
+ "abusefilter-list-options-search-rlike": "Reguljärt uttryck",
+ "abusefilter-list-options-search-irlike": "Icke-skiftlägeskänsligt reguljärt uttryck",
+ "abusefilter-list-regexerror": "Ett fel uppstod under sökning: Syntaxfel i reguljärt uttryck.",
"abusefilter-list-options-submit": "Uppdatera",
"abusefilter-tools-text": "Här är några verktyg som kan vara användbara för att skapa och felsöka missbruksfilter.",
"abusefilter-tools-expr": "Uttryckstestare",
@@ -152,15 +192,18 @@
"abusefilter-edit": "Redigerar missbruksfilter",
"abusefilter-edit-subtitle": "Redigerar filtret $1",
"abusefilter-edit-subtitle-new": "Skapa filter",
+ "abusefilter-edit-token-not-match": "Redigeringen sparades inte! Var god spara igen.",
"abusefilter-edit-oldwarning": "<strong>Du redigerar en gammal version av detta filter. Den angivna statistiken gäller den senaste versionen av filtret. Om du sparar dina ändringar kommer du att skriva över alla ändringar som gjorts efter den version du redigerar. </strong> &bull; [[Special:AbuseFilter/history/$2|Återvänd till detta filters historik]]",
"abusefilter-edit-status-label": "Statistik:",
"abusefilter-edit-status": "Av {{PLURAL:$1|den senaste handlingen|de senaste $1 handlingarna}} har detta filter matchat $2 ($3 %).",
"abusefilter-edit-status-profile": "Av {{PLURAL:$1|den senaste handlingen|de senaste $1 handlingarna}} har detta filter matchat $2 ($3 %). Körtiden är i genomsnitt $4 ms och filtret använder $5 {{PLURAL:$5|villkor|villkor}} av villkorsgränsen.",
- "abusefilter-edit-throttled": "'''Varning''': Detta filter blev automatiskt avaktiverat som en säkerhetsåtgärd. Det nådde gränsen genom att utlösas av mer än $1&nbsp;% av handlingarna.",
+ "abusefilter-edit-throttled-warning": "'''Varning:''' Detta filter flaggades automatiskt som skadligt. Följande åtgärder kommer inte utföras av säkerhetsskäl ($1). Granska och [[mw:Extension:AbuseFilter/Conditions|optimera villkoren]] för att ta bort denna begränsning",
"abusefilter-edit-new": "Nytt filter",
"abusefilter-edit-save": "Spara filter",
"abusefilter-edit-id": "Filter-ID:",
+ "abusefilter-edit-switch-editor": "Byt redigerare",
"abusefilter-edit-description": "Beskrivning:\n:''(visas offentligt)''",
+ "abusefilter-edit-field-description": "beskrivning",
"abusefilter-edit-group": "Filtergrupp:",
"abusefilter-edit-flags": "Flaggor:",
"abusefilter-edit-enabled": "Aktivera detta filter",
@@ -168,6 +211,7 @@
"abusefilter-edit-hidden": "Dölj detaljer om detta filter",
"abusefilter-edit-global": "Globalt filter",
"abusefilter-edit-rules": "Regelverk:",
+ "abusefilter-edit-field-conditions": "villkor",
"abusefilter-edit-notes": "Noteringar:",
"abusefilter-edit-lastmod": "Filter senast ändrat:",
"abusefilter-edit-lastmod-text": "$1 av $2",
@@ -178,25 +222,42 @@
"abusefilter-edit-action-blockautopromote": "Återta användarens status som automatiskt bekräftad",
"abusefilter-edit-action-degroup": "Ta bort användaren från alla användargrupper",
"abusefilter-edit-action-block": "Blockera användaren och/eller IP-adressen från redigering",
+ "abusefilter-edit-action-blocktalk": "Blockera användaren och/eller IP-adressen från att redigera sin egen diskussionssida",
"abusefilter-edit-action-throttle": "Genomför handlingar endast om användaren överstiger en limit",
- "abusefilter-edit-action-rangeblock": "Blockera /16-intervallet varifrån användaren kommer.",
+ "abusefilter-edit-action-rangeblock": "Blockera respektive IP-intervall varifrån användaren kommer",
"abusefilter-edit-action-tag": "Märk redigeringen för vidare granskning.",
"abusefilter-edit-throttle-count": "Antal tillåtna handlingar:",
- "abusefilter-edit-throttle-period": "Tidsperiod:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekund|sekunder}}",
- "abusefilter-edit-throttle-groups": "Gruppbegränsning på:\n:''(en per rad, kombinera med komman)''",
+ "abusefilter-edit-throttle-period": "Tidsperiod (i sekunder):",
+ "abusefilter-edit-throttle-groups": "Gruppera begränsningarna på:",
+ "abusefilter-edit-throttle-ip": "IP-adress",
+ "abusefilter-edit-throttle-user": "Användarkonto",
+ "abusefilter-edit-throttle-range": "/16-intervall",
+ "abusefilter-edit-throttle-creationdate": "Servertid för skapat konto",
+ "abusefilter-edit-throttle-editcount": "Antal redigeringar",
+ "abusefilter-edit-throttle-site": "Hela webbplatsen",
+ "abusefilter-edit-throttle-page": "Sida",
+ "abusefilter-throttle-details": "Tillåt $1 {{PLURAL:$1|åtgärd|åtgärder}} efter $2 {{PLURAL:$2|sekund|sekunder}}, gruppbegränsat efter: $3",
"abusefilter-edit-warn-message": "Systemmeddelande att använda för varning:",
"abusefilter-edit-warn-other": "Annat meddelande",
"abusefilter-edit-warn-other-label": "Sidnamn för annat meddelande:\n:''(utan MediaWiki-prefix)''",
"abusefilter-edit-warn-actions": "Åtgärder:",
- "abusefilter-edit-warn-preview": "Förhandsgranska valt meddelande",
+ "abusefilter-edit-warn-preview": "Visa/dölj förhandsgranskning av valt meddelande",
"abusefilter-edit-warn-edit": "Skapa/redigera valt meddelande",
- "abusefilter-edit-tag-tag": "[[Special:Tags|Märken]] att lägga på (en per rad):",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|Märken]] att tillämpa:",
+ "abusefilter-edit-tag-placeholder": "Lägg till märken (en per rad eller separerade med komma)",
+ "abusefilter-edit-tag-hidden-placeholder": "Lägg till taggar (kommaseparerade)",
+ "abusefilter-edit-block-anon-durations": "Varaktighet för blockering av anonyma användare:",
+ "abusefilter-edit-block-user-durations": "Varaktighet för blockering av registrerade användare:",
+ "abusefilter-block-anon": "Blockera anonyma användare",
+ "abusefilter-block-user": "blockera registrerade användare",
+ "abusefilter-block-talk": "blockerad diskussionssida",
"abusefilter-edit-denied": "Du kan inte se detaljer för detta filtret, eftersom det är dolt från allmänheten.",
"abusefilter-edit-main": "Filterparametrar",
"abusefilter-edit-done-subtitle": "Filter redigerat",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Dina ändringar]] på [[Special:AbuseFilter/$1|filter $3]] har sparats.",
"abusefilter-edit-badsyntax": "Det är ett syntaxfel i filtret du angav. Resultatet från parsern var: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "Följande fält är nödvändiga och måste fyllas i: $1",
+ "abusefilter-edit-deleting-enabled": "Du kan inte märka ett aktivt filter som raderat.",
"abusefilter-edit-restricted": "Du kan inte ändra detta filter eftersom det innehåller en eller fler begränsade handlingar. Vänligen fråga en användare med behörighet att lägga till begränsade handlingar att göra ändringen åt dig.",
"abusefilter-edit-viewhistory": "Visa det här filtrets historik",
"abusefilter-edit-history": "Historik:",
@@ -208,7 +269,7 @@
"abusefilter-edit-export": "Exportera det här filtret till en annan wiki",
"abusefilter-edit-syntaxok": "Inga syntaxfel upptäcktes.",
"abusefilter-edit-syntaxerr": "Syntaxfel uppstod: $1",
- "abusefilter-edit-bad-tags": "En eller flera av de märken du angav är inte giltigt. Märken skall vara korta och de får inte innehålla några specialtecken och de bör inte reserveras av andra programvaror. Försök att välja ett nytt märkesnamn",
+ "abusefilter-edit-bad-tags": "En eller flera av de märken du angav är inte giltigt.\nMärken skall vara korta och de kan inte innehålla några specialtecken och de kan inte reserveras av andra programvaror. Försök att välja ett nytt märkesnamn",
"abusefilter-edit-notallowed": "Du har inte tillåtelse att skapa eller ändra missbruksfilter",
"abusefilter-edit-notallowed-global": "Du har inte tillåtelse att skapa eller ändra globala missbruksfilter",
"abusefilter-edit-notallowed-global-custom-msg": "Anpassade varningsmeddelanden stöds inte för globala filter",
@@ -221,8 +282,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Modulo (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Dignitet (**)",
"abusefilter-edit-builder-group-op-comparison": "Jämförelseoperatorer",
- "abusefilter-edit-builder-op-comparison-equal": "Lika med (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Inte lika med (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Värdet är lika med (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Värdet och typen är lika med (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Värdet är inte lika med (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Värdet och typen är inte lika med (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Mindre än (<)",
"abusefilter-edit-builder-op-comparison-gt": "Mer än (>)",
"abusefilter-edit-builder-op-comparison-lte": "Mindre än eller lika med (<=)",
@@ -245,23 +308,30 @@
"abusefilter-edit-builder-funcs-lcase": "Gör om till små bokstäver (lcase)",
"abusefilter-edit-builder-funcs-ucase": "Till versaler (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Normalisera förvirrande tecken (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Normalisera och sök efter en sträng med flera strängdelar i OR-läget (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Normalisera och sök efter en sträng med flera strängdelar i AND-läget (ccnorm_contains_any)",
"abusefilter-edit-builder-funcs-rmdoubles": "Ta bort dubbla tecken (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Specialtecken / totalt antal tecken (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Normalisera (norm)",
"abusefilter-edit-builder-funcs-count": "Antal gånger sträng X finns i sträng Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Antal gånger regex X dyker upp i strängen Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Lista över reguljära matchningar inom en text för varje fångstgrupp (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Ta bort blanktecken (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Ta bort specialtecken (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Är IP-numret i intervallet? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Sök efter flera delsträngar i strängen (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Sök efter flera strängdelar i OR-läget (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Sök i sträng efter flera strängdelar i AND-läget. (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Kontrollerar om ett angivet argument är lika med (===) ett av följande argument (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Delsträng (substr)",
"abusefilter-edit-builder-funcs-strpos": "Delsträngens position i strängen (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Ersätt delsträng med sträng (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Escapa strängen i regex (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Ställ in variabel (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Normalisera HTML-entiteter till Unicode-tecken (sanitize)",
"abusefilter-edit-builder-group-vars": "Variabler",
"abusefilter-edit-builder-vars-accountname": "Kontonamn (on account creation)",
"abusefilter-edit-builder-vars-timestamp": "Unix-tidsstämpel från förändringen",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Loggens tidsstämpel",
"abusefilter-edit-builder-vars-action": "Åtgärd",
"abusefilter-edit-builder-vars-addedlines": "Rader tillagda i redigering",
"abusefilter-edit-builder-vars-delta": "Storleksändring i redigering",
@@ -272,19 +342,21 @@
"abusefilter-edit-builder-vars-new-content-model": "Ny innehållsmodell",
"abusefilter-edit-builder-vars-removedlines": "Borttagna rader i redigering",
"abusefilter-edit-builder-vars-summary": "Redigeringssammanfattning",
- "abusefilter-edit-builder-vars-article-id": "Sid-ID",
- "abusefilter-edit-builder-vars-article-ns": "Sidnamnrymd",
- "abusefilter-edit-builder-vars-article-text": "Sidtitel (utan namnrymd)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Hela sidtiteln",
- "abusefilter-edit-builder-vars-article-views": "Sidvisningar",
+ "abusefilter-edit-builder-vars-page-id": "Sid-ID",
+ "abusefilter-edit-builder-vars-page-ns": "Sidnamnrymd",
+ "abusefilter-edit-builder-vars-page-title": "Sidtitel (utan namnrymd)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Hela sidtiteln",
+ "abusefilter-edit-builder-vars-page-age": "Sidans ålder (i sekunder)",
"abusefilter-edit-builder-vars-movedfrom-id": "Sid-ID till källsidan vid flyttning",
"abusefilter-edit-builder-vars-movedfrom-ns": "Namnrymd för källsidan vid flyttning",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titel för källsidan vid flyttning",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Fullständig titel av källsidan vid flyttning",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titel för källsidan vid flyttning",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Fullständig titel av källsidan vid flyttning",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Ålder för källsidan att flytta (i sekunder)",
"abusefilter-edit-builder-vars-movedto-id": "Sid-ID för målsida vid flyttning",
"abusefilter-edit-builder-vars-movedto-ns": "Namnrymd för målsida vid flyttning",
- "abusefilter-edit-builder-vars-movedto-text": "Titel för målsida vid flyttning",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Hel titel för målsida vid flyttning",
+ "abusefilter-edit-builder-vars-movedto-title": "Titel för målsida vid flyttning",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Hel titel för målsida vid flyttning",
+ "abusefilter-edit-builder-vars-movedto-age": "Ålder för destinationssidan (i sekunder)",
"abusefilter-edit-builder-vars-user-editcount": "Användarens redigeringsantal",
"abusefilter-edit-builder-vars-user-age": "Användarkontots ålder",
"abusefilter-edit-builder-vars-user-name": "Användarkontots namn",
@@ -293,11 +365,15 @@
"abusefilter-edit-builder-vars-user-blocked": "Ifall användaren är blockerad",
"abusefilter-edit-builder-vars-user-emailconfirm": "Tid e-postadressen blev bekräftad",
"abusefilter-edit-builder-vars-recent-contributors": "De senaste tio som bidragit till sidan",
- "abusefilter-edit-builder-vars-first-contributor": "Första användare att bidra till sidan",
+ "abusefilter-edit-builder-vars-first-contributor": "Första användaren att bidra till sidan",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "De senaste tio användarna som bidragit till att flytta källsidan",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Första användaren att bidra till att flytta källsidan",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "De senaste tio användarna som bidragit till att flytta destinationssidan",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Första användaren att bidra till att flytta destinationssidan",
"abusefilter-edit-builder-vars-all-links": "Alla externa länkar i den nya texten",
"abusefilter-edit-builder-vars-added-links": "Alla externa länkar tillagda i redigeringen",
"abusefilter-edit-builder-vars-removed-links": "Alla externa länkar borttagna i redigeringen",
- "abusefilter-edit-builder-vars-old-text": "Sidans gamla wikitext, före redigeringen",
+ "abusefilter-edit-builder-vars-old-text": "Gamla sidans wikitext, innan redigeringen (används inte längre)",
"abusefilter-edit-builder-vars-new-text": "Sidans nya wikitext, efter redigeringen",
"abusefilter-edit-builder-vars-new-pst": "Ny sida wikitext förändrades innan den sparades",
"abusefilter-edit-builder-vars-diff-pst": "Sammanslagen diff av ändringarna gjorda under redigering, innan de sparades",
@@ -308,9 +384,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "Skyddsnivå för flytt av sidan",
"abusefilter-edit-builder-vars-restrictions-create": "Skydd mot sidans skapelse",
"abusefilter-edit-builder-vars-restrictions-upload": "Ladda upp skydd för den här filen",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Redigera skyddsnivå för flyttning av källsida",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Flytta skyddsnivå för flyttning av källsida",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Skapa skyddsnivå för flyttning av källsida",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Ladda upp skyddsnivå för flyttning av källfil",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Redigera skyddsnivå för flyttning av destinationssida",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Flytta skyddsnivå för flyttning av destinationssida",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Skapa skyddsnivå för flyttning av destinationssida",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Ladda upp skyddsnivå för flyttning av destinationsfil",
"abusefilter-edit-builder-vars-old-text-stripped": "Gammal sidtext, med all kodning borttagen",
"abusefilter-edit-builder-vars-old-links": "Länkar i denna sida, före redigeringen",
- "abusefilter-edit-builder-vars-old-html": "Gammal sidwikitext, parsad till HTML",
+ "abusefilter-edit-builder-vars-old-html": "Gammal sidwikitext, parsad till HTML (används inte längre)",
"abusefilter-edit-builder-vars-minor-edit": "Huruvida redigeringen är markerad som mindre",
"abusefilter-edit-builder-vars-file-sha1": "SHA1-hash av filinnehållet",
"abusefilter-edit-builder-vars-file-size": "Storlek på filen i bytes",
@@ -318,6 +402,7 @@
"abusefilter-edit-builder-vars-file-mediatype": "Media typ av filen",
"abusefilter-edit-builder-vars-file-width": "Bredd på filen i pixlar",
"abusefilter-edit-builder-vars-file-height": "Höjd på filen i pixlar",
+ "abusefilter-edit-builder-vars-file-bits-per-channel": "Bitar per färgkanal för filen",
"abusefilter-filter-log": "Senaste filterändringar",
"abusefilter-history": "Ändringshistorik för missbruksfilter #$1",
"abusefilter-history-foruser": "Ändringar av $1",
@@ -336,24 +421,28 @@
"abusefilter-history-filterid": "Filter",
"abusefilter-history-select-legend": "Förfina sökning",
"abusefilter-history-select-user": "Användare:",
+ "abusefilter-history-select-filter": "Filter-ID:",
"abusefilter-history-select-submit": "Förfina",
"abusefilter-history-diff": "Ändringar",
"abusefilter-history-error-hidden": "Filtret du eftersökte är dolt och du kan inte se dess historik.",
"abusefilter-exception-unexpectedatend": "Oväntad \"$2\" vid tecken $1.",
"abusefilter-exception-expectednotfound": "Förväntade en $2 vid tecken $1, men hittade det inte (hittade $3 $4 istället).",
"abusefilter-exception-unrecognisedkeyword": "Obekant nyckelord $2 vid tecken $1.",
- "abusefilter-exception-unexpectedtoken": "Oväntad token \"$3\" (av typen $2) vid tecken $1.",
+ "abusefilter-exception-unexpectedtoken": "Oväntad nyckel \"$3\" (av typen $2) vid tecken $1.",
"abusefilter-exception-unclosedstring": "Ostängd sträng som startar vid tecken $1.",
"abusefilter-exception-invalidoperator": "Ogiltig operatör \"$2\" vid tecken $1.",
"abusefilter-exception-unrecognisedtoken": "Obekant token \"$2\" vid tecken $1.",
- "abusefilter-exception-noparams": "Inga parametrar givna till funktion \"$2\" vid tecken $1.",
+ "abusefilter-exception-noparams": "Inga parametrar gavs i funktion \"$2\" vid tecknet $1.\n$3 {{PLURAL:$3|argument}} förväntades.",
"abusefilter-exception-dividebyzero": "Ogiltigt försök att dividera $2 med noll vid tecken $1.",
"abusefilter-exception-unrecognisedvar": "Okänd variabel $2 vid tecken $1",
"abusefilter-exception-notenoughargs": "Funktionen $2 anropades med för få argument vid teckenposition $1. $3 {{PLURAL:$3|argument|argument}} väntades, fick bara $4.",
"abusefilter-exception-regexfailure": "Fel i det reguljära uttrycket \"$3\" vid teckenposition $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Ogiltig överskrivning av inbyggd variabel \"$2\" vid teckenposition $1.",
- "abusefilter-exception-outofbounds": "Begärde icke-existerande listelement $2 (listans storkel = $3) vid teckenposition $1.",
- "abusefilter-exception-notlist": "Begär tabellelement från en icketabell vid teckenposition $1.",
+ "abusefilter-exception-outofbounds": "Begärde icke-befintligt listelement $2 (arraystorlek = $3) vid teckenposition $1.",
+ "abusefilter-exception-notarray": "Begär tabellelement från en icketabell vid teckenposition $1.",
+ "abusefilter-exception-unclosedcomment": "Öppen kommentar vid tecken $1.",
+ "abusefilter-exception-invalidiprange": "\"$2\" är ett ogiltigt IP-intervall vid tecknet $1.",
+ "abusefilter-exception-disabledvar": "Variabeln $2 vid tecknet $1 används inte längre.",
"abusefilter-action-tag": "Tagg",
"abusefilter-action-throttle": "Begränsning",
"abusefilter-action-warn": "Varna",
@@ -369,8 +458,9 @@
"abusefilter-revert-periodstart": "Periodstart:",
"abusefilter-revert-periodend": "Periodslut:",
"abusefilter-revert-search": "Välj handlingar",
- "abusefilter-revert-filter": "Filter:",
+ "abusefilter-revert-filter": "Filter-ID:",
"abusefilter-revert-preview-intro": "Nedan är de handlingar som är gjorda av missbruksfiltret som kommer att återställas av denna handling. Vänligen kontrollera dem noggrant, och klicka \"{{int:abusefilter-revert-confirm}}\" för att bekräfta ditt val.",
+ "abusefilter-revert-confirm-legend": "Bekräfta återställning",
"abusefilter-revert-confirm": "Bekräfta",
"abusefilter-revert-success": "Du har återställt alla handlingar som missbruksfiltret gjort på grund av [[Special:AbuseFilter/$1|filter $2]].",
"abusefilter-revert-reason": "Automatisk återställning av alla handlingar som missbruksfiltret gjort på grund av filter $1. Angiven anledning: $2",
@@ -382,12 +472,20 @@
"abusefilter-test-submit": "Test",
"abusefilter-test-load": "Ladda",
"abusefilter-test-user": "Ändringar av användare:",
+ "abusefilter-test-nobots": "Dölj botredigeringar",
"abusefilter-test-period-start": "Ändringar gjorda efter:",
"abusefilter-test-period-end": "Ändringar gjorda före:",
"abusefilter-test-page": "Ändringar på sidan:",
"abusefilter-test-shownegative": "Visa ändringar som inte matchar filtret",
"abusefilter-test-syntaxerr": "Det filter du skrev in innehöll ett syntaxfel.\nDu kan se en fullständig förklaring genom att klicka på knappen \"{{int:abusefilter-edit-check}}\".",
"abusefilter-test-badtitle": "Sidrubriken du angett är ogiltigt. Den kan innehålla ett eller flera tecken som inte kan användas i rubriker.",
+ "abusefilter-test-action": "Handlingstyp:",
+ "abusefilter-test-search-type-all": "Alla handlingar",
+ "abusefilter-test-search-type-edit": "Redigeringar",
+ "abusefilter-test-search-type-move": "Flyttningar",
+ "abusefilter-test-search-type-delete": "Raderingar",
+ "abusefilter-test-search-type-upload": "Uppladdningar",
+ "abusefilter-test-search-type-createaccount": "Skapade konton",
"abusefilter-changeslist-examine": "undersök",
"abusefilter-examine": "Undersök enstaka ändringar",
"abusefilter-examine-intro": "Denna sida låter dig undersöka variablerna skapade av missbruksfiltret för en enstaka ändring, och testa den mot filter.",
@@ -414,9 +512,10 @@
"abusefilter-topnav-import": "Importera filter",
"abusefilter-log-name": "Missbruksfilterändringar",
"abusefilter-log-header": "Denna logg visar en sammanfattning av ändringar som har gjorts i filtren.\nFör fullständiga detaljer, se [[Special:AbuseFilter/history|listan]] över de senaste filterändringarna.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|skapade}} $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|ändrade}} $4 ($5)",
"abusefilter-log-noresults": "Inga resultat",
- "abusefilter-diff-title": "Differenser mellan versioner",
+ "abusefilter-diff-title": "Skillnader mellan versioner",
"abusefilter-diff-item": "Element",
"abusefilter-diff-version": "Version från $1 {{GENDER:$3|av}} $2",
"abusefilter-diff-info": "Grundläggande information",
@@ -429,36 +528,16 @@
"abusefilter-import-submit": "Importera data",
"abusefilter-group-default": "Standard",
"abusefilter-http-error": "Ett HTTP-fel uppstod: $1.",
- "apihelp-abusefiltercheckmatch-param-filter": "Fulla filtertexten att jämföra med för en träff.",
- "apihelp-abusefiltercheckmatch-param-vars": "JSON-kodad lista av variabler att testa mot.",
- "apihelp-abusefiltercheckmatch-param-rcid": "Senaste ändrings-ID att jämföra med.",
- "apihelp-abusefiltercheckmatch-param-logid": "Missbruksfilterlogg-ID att jämföra med.",
- "apihelp-abusefiltercheckmatch-example-1": "Testa om senaste ändring-ID 15 matchar ett enkelt filter",
- "apihelp-abusefilterchecksyntax-description": "Kontrollera syntax för ett AbuseFilter-filter.",
- "apihelp-abusefilterchecksyntax-param-filter": "Den fulla texten att kontrollera syntaxen på.",
- "apihelp-abusefilterchecksyntax-example-1": "Kontrollera syntax för ett giltigt filter",
- "apihelp-abusefilterchecksyntax-example-2": "Kontrollera syntax för ett ogiltigt filter",
- "apihelp-abusefilterevalexpression-description": "Utvärdera ett AbuseFilter-uttryck.",
- "apihelp-abusefilterevalexpression-param-expression": "Uttrycket att utvärdera.",
- "apihelp-abusefilterevalexpression-example-1": "Beräkna en enkel formel",
- "apihelp-abusefilterunblockautopromote-param-user": "Användarnamn för användaren du vill avblockera.",
- "apihelp-abusefilterunblockautopromote-example-1": "Ta bort blockeringen på [[User:Example]]s autobefordran",
- "apihelp-query+abusefilters-description": "Visa detaljer för missbruksfiltret.",
- "apihelp-query+abusefilters-param-startid": "Filter-ID att börja räkna upp från.",
- "apihelp-query+abusefilters-param-endid": "Filter-ID att sluta räkna upp vid.",
- "apihelp-query+abusefilters-param-show": "Visa enbart filter som matchar dessa kriterier.",
- "apihelp-query+abusefilters-param-limit": "Det maximala antalet filter att lista.",
- "apihelp-query+abusefilters-param-prop": "Vilka egenskaper som ska hämtas.",
- "apihelp-query+abusefilters-example-1": "Lista aktiva publika filter",
- "apihelp-query+abusefilters-example-2": "Visa några detaljer om filtren",
- "apihelp-query+abuselog-description": "Visa händelser som en av missbruksfiltren har fångat.",
- "apihelp-query+abuselog-param-start": "Tidsstämpel att börja räkna upp från.",
- "apihelp-query+abuselog-param-end": "Tidsstämpeln att sluta räkna upp vid.",
- "apihelp-query+abuselog-param-user": "Visa enbart poster gjorda av en viss användare eller IP-adress.",
- "apihelp-query+abuselog-param-title": "Visa endast poster som förekommer på en viss sida.",
- "apihelp-query+abuselog-param-filter": "Visa endast poster som fångats av ett visst filter-ID.",
- "apihelp-query+abuselog-param-limit": "Det maximala antalet poster att lista.",
- "apihelp-query+abuselog-param-prop": "Vilka egenskaper att hämta.",
- "apihelp-query+abuselog-example-1": "Visa de senaste loggposterna",
- "apihelp-query+abuselog-example-2": "Visa de senaste loggposterna för [[API]]"
+ "abusefilter-view-private-submit": "Visa privata detaljer",
+ "abusefilter-view-private": "Visa privata detaljer",
+ "abusefilter-view-private-reason": "Anledning för att komma åt privata detaljer:",
+ "abusefilter-log-details-id": "Logg-ID",
+ "abusefilter-invalid-request": "Ogiltig begäran! Du måste få åtkomst till privata loggdetaljer via formuläret på [[Special:AbuseLog/$1]] och ange en anledning.",
+ "abusefilter-invalid-request-noid": "Ogiltig begäran! Du måste få åtkomst till privata loggdetaljer via formuläret på missbruksloggens detaljsida och ange en anledning.",
+ "log-description-abusefilterprivatedetails": "Denna logg visar en lista över antalet gånger en användare får åtkomst till privata detaljer i en missbrukslogg.",
+ "abusefilter-noreason": "Varning: För att se privata detaljer i denna logg måste du ange en anledning.",
+ "abusefilter-log-ip-not-available": "Inte tillgänglig",
+ "abusefilter-tag-reserved": "Taggen <code>abusefilter-condition-limit</code> är reserverad för intern användning av AbuseFilter.",
+ "tag-abusefilter-condition-limit": "villkorsgräns är nådd",
+ "tag-abusefilter-condition-limit-description": "Redigeringar eller andra händelser som inte kunde kontrolleras av alla aktiva [[Special:AbuseFilter|missbruksfilter]] ([[mw:Extension:AbuseFilter/Conditions|hjälp]])."
}
diff --git a/AbuseFilter/i18n/sw.json b/AbuseFilter/i18n/sw.json
index cc21a204..58ec3946 100644
--- a/AbuseFilter/i18n/sw.json
+++ b/AbuseFilter/i18n/sw.json
@@ -4,7 +4,8 @@
"Ikiwaner",
"Kwisha",
"Lloffiwr",
- "Stephenwanjau"
+ "Stephenwanjau",
+ "Rance"
]
},
"abuselog": "Kumbukumbu ya matumizi mabaya",
@@ -19,9 +20,8 @@
"abusefilter-log-details-val": "Thamani",
"abusefilter-log-details-private": "Data binafsi",
"abusefilter-log-noactions": "usichague",
+ "abusefilter-log-details-hidden-implicit": "Huwezi kutazama maelezo kwa ingizo hili kwa sababu ukaguzi unaohusiana na ingizo haujawekwa wazi kwa kila mtu kutazama",
"abusefilter-log-hide-reason": "Sababu:",
- "abusefilter-logentry-suppress": "ilificha \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "fichua \"[[$1]]\"",
"abusefilter-list": "Chujio zote",
"abusefilter-list-id": "ID ya chujio",
"abusefilter-list-status": "Hali",
@@ -48,7 +48,6 @@
"abusefilter-list-options-deleted-show": "Jumuisha chujio zilizofutwa",
"abusefilter-list-options-scope": "Onyesha chujio:",
"abusefilter-list-options-scope-local": "Sheria za hapa pekee",
- "abusefilter-list-options-disabled": "Chujio zilizolemazwa:",
"abusefilter-list-options-hidedisabled": "Ficha chujio zilizofutwa",
"abusefilter-list-options-submit": "Sasisha",
"abusefilter-tools-submitexpr": "Pima",
@@ -65,8 +64,15 @@
"abusefilter-edit-rules": "Masharti:",
"abusefilter-edit-notes": "Vidokezo:",
"abusefilter-edit-lastmod-text": "$1 na $2",
+ "abusefilter-edit-throttle-period": "Kiwango cha muda (katika sekunde)",
+ "abusefilter-edit-throttle-ip": "Anuani ya Itifaki ya Muunganiko wa mtandao wa Kompyuta",
+ "abusefilter-edit-throttle-user": "Akaunti ya mtumiaji",
+ "abusefilter-edit-throttle-editcount": "Idadi ya hariri",
+ "abusefilter-edit-throttle-site": "Tovuti nzima",
+ "abusefilter-edit-throttle-page": "Ukurasa",
"abusefilter-edit-warn-other": "Ujumbe mwingine",
"abusefilter-edit-warn-actions": "Vitendo:",
+ "abusefilter-edit-warn-preview": "Onyesha/Ficha uhakiki wa ujumbe uliochaguliwa",
"abusefilter-edit-main": "Vigezo vya chujio",
"abusefilter-edit-done-subtitle": "Chujio imehaririwa",
"abusefilter-edit-done": "Umefaulu kuhifadhi mabadiliko yako kwa chujio $1.",
@@ -92,10 +98,10 @@
"abusefilter-edit-builder-vars-oldsize": "Saizi nzee ya ukurasa",
"abusefilter-edit-builder-vars-removedlines": "Laini zilizotolewa kwa hariri",
"abusefilter-edit-builder-vars-summary": "Muhtasari wa hariri/sababu",
- "abusefilter-edit-builder-vars-article-id": "ID ya ukurasa",
- "abusefilter-edit-builder-vars-article-ns": "Eneo la Wiki la ukurasa",
- "abusefilter-edit-builder-vars-article-text": "Mada ya ukurasa (bila eneo la wiki)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Mada ya ukurasa mzima",
+ "abusefilter-edit-builder-vars-page-id": "ID ya ukurasa",
+ "abusefilter-edit-builder-vars-page-ns": "Eneo la Wiki la ukurasa",
+ "abusefilter-edit-builder-vars-page-title": "Mada ya ukurasa (bila eneo la wiki)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Kichwa kamili cha ukurasa",
"abusefilter-edit-builder-vars-user-editcount": "Idadi ya hariri ya mtumiaji",
"abusefilter-edit-builder-vars-user-age": "Umri wa akaunti ya mtumiaji",
"abusefilter-edit-builder-vars-user-name": "Jina la akaunti ya mtumiaji",
@@ -146,7 +152,6 @@
"abusefilter-topnav-tools": "Vifaa vya kueua",
"abusefilter-topnav-import": "Leta chujio",
"abusefilter-log-name": "Kumbukumbu ya matumizi mabaya ya chujio",
- "abusefilter-log-entry-modify": "ilirekebisha $1 ($2)",
"abusefilter-log-noresults": "Hakuna matokeo",
"abusefilter-diff-title": "Tofauti kati ya matokeo",
"abusefilter-diff-item": "Kifaa",
diff --git a/AbuseFilter/i18n/szl.json b/AbuseFilter/i18n/szl.json
index 075f9bd1..0bda61ed 100644
--- a/AbuseFilter/i18n/szl.json
+++ b/AbuseFilter/i18n/szl.json
@@ -9,7 +9,6 @@
"abusefilter": "Konfiguracyjo filtra zńyłużyćůw",
"abuselog": "↓Register zńyłużyćůw",
"abusefilter-intro": "Regiyrowańy registrym zńyłużyćów\nRegister zńyłużyćów je program, kery automatyczńy używo heurystyka do wszyjskich akcyj.\nInterface pozwolo przeglůndać lista zedefińůwanych filtrůw a je pomjyńać.",
- "abusefilter-mustbeeditor": "Lo bezpjyczyństwa, tyn interface mogům używać jyno używocze, kere majům prawo pomjyńać filter zńyłużyćów.",
"abusefilter-warning": "'''Pozůr''': Ta akcyjo bůła automatyczńy uznono szkodzůnco.\nFelerne pomjyny bydům cofńynte nazod, a fest złe abo uopakujůnce śe edytowańy skůńczy śe zwarćem twojigo kůnta abo IP.\nEli uważosz, aże to co żeś zrobjůł je dobre, spamjyntej pomjany bez „{{int:savearticle}}”.\nKrůtki uopis regli zńyłużyćo, keremu przipasowano twojo akcyjo: $1",
"abusefilter-disallowed": "Ta akcyjo bůła automatyczńy uznona szkodzůnco i uodćepńynto.\nEli uważosz, aże ta edycyjo bůła ajntlichowo, pedź uo tyj sytuacyji administratůrowi.\nKrůtki uopis regla zńyłużyćo, keremu bůła przipasowano twojo akcyjo: $1",
"abusefilter-blocker": "Filter zńyłużyćów",
diff --git a/AbuseFilter/i18n/ta.json b/AbuseFilter/i18n/ta.json
index 8a3477c8..83367bc8 100644
--- a/AbuseFilter/i18n/ta.json
+++ b/AbuseFilter/i18n/ta.json
@@ -17,7 +17,6 @@
"abusefilter-desc": "தொகுப்புகள் தானியங்கியாய் முறைவரிசைப்படுத்துதலைச் செயற்படுத்தும்",
"abusefilter": "முறைகேடு வடிக்கட்டி அமைப்பு",
"abuselog": "முறைகேடு பதிவு",
- "abusefilter-mustbeeditor": "பாதுகாப்பு கருதி, முறைகேடு வடிகட்டியை மாற்றும் உரிமையுடைய பயனர்கள் மட்டுமே இந்த இடைமுகத்தைப் பயன்படுத்தலாம்",
"abusefilter-blocker": "முறைகேடு வடிகட்டி",
"abusefilter-accountreserved": "இப்பயனர் கணக்குப்பெயர் முறைகேடு வடிகட்டி பயன்படுத்துவதற்காக ஒதுக்கப்பட்டது",
"right-abusefilter-modify": "முறைகேடு வடிகட்டியை மாற்றியமை",
@@ -67,8 +66,6 @@
"abusefilter-log-hide-hidden": "பொதுப் பார்வையில் இருந்து இப்பதிவை மறை",
"abusefilter-log-hide-reason": "காரணம்:",
"abusefilter-log-hide-forbidden": "முறைகேட்டுப் பதிவேட்டு உள்ளிடுகைகளை மறைக்க உரிமை இல்லை",
- "abusefilter-logentry-suppress": "\"[[$1]]\" இன் மறைப்பு",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\" இன் மறைப்பு நீக்கல்",
"abusefilter-management": "முறைகேட்டு வடிகட்டி மேலாண்மை",
"abusefilter-list": "எல்லா வடிகட்டிகளும்",
"abusefilter-list-id": "வடிகட்டி எண்",
@@ -99,7 +96,6 @@
"abusefilter-list-options-scope": "வடிக்கட்டிகளைக் காட்டுக",
"abusefilter-list-options-scope-local": "உள் விக்கி",
"abusefilter-list-options-scope-global": "உலக விதிகள்",
- "abusefilter-list-options-disabled": "செயலிழக்கம் செய்யப்பட்ட வடிகட்டிகள்:",
"abusefilter-list-options-hidedisabled": "செயலிழக்கம் செய்யப்பட்ட வடிகட்டிகளை மறைக்கவும்",
"abusefilter-list-options-submit": "புதுப்பி",
"abusefilter-tools-submitexpr": "மதிப்பீடு செய்",
@@ -128,7 +124,6 @@
"abusefilter-edit-action-tag": "தொகுப்பை பின்னர் மீள்பார்வை செய்யக் குறித்துக்கொள்",
"abusefilter-edit-throttle-count": "அனுமதிக்கப்பட வேண்டிய செயல்களின் எண்ணிக்கை:",
"abusefilter-edit-throttle-period": "கால நேரம்:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|வினாடி|வினாடிகள்}}",
"abusefilter-edit-warn-message": "எச்சரிக்கைக்காகப் பயன்படுத்துவதற்கான முறைமைச் செய்தி:",
"abusefilter-edit-warn-other": "மற்ற செய்தி",
"abusefilter-edit-warn-other-label": "மற்றச் செய்தியின் பக்கப் பெயர்:\n:''(மீடியாவிக்கி முன்னொட்டின்றி)''",
@@ -202,12 +197,11 @@
"abusefilter-edit-builder-vars-oldsize": "பழைய பக்க அளவு",
"abusefilter-edit-builder-vars-removedlines": "தொகுக்கும் போது நீக்கப்பட்ட வரிகள்",
"abusefilter-edit-builder-vars-summary": "தொகுப்பின் சுருக்கம்/காரணம்",
- "abusefilter-edit-builder-vars-article-id": "பக்கத்தின் அடையாளம்",
- "abusefilter-edit-builder-vars-article-ns": "பக்கத்தின் பெயர்வெளி",
- "abusefilter-edit-builder-vars-article-text": "பக்கத்தின் தலைப்பு (பெயர்வெளி இல்லாமல்)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "முழு பக்கத்தின் தலைப்பு",
- "abusefilter-edit-builder-vars-article-views": "பக்க நோக்குகள்",
- "abusefilter-edit-builder-vars-movedto-text": "நகர்த்தல் இலக்குப் பக்கத்தின் தலைப்பு",
+ "abusefilter-edit-builder-vars-page-id": "பக்கத்தின் அடையாளம்",
+ "abusefilter-edit-builder-vars-page-ns": "பக்கத்தின் பெயர்வெளி",
+ "abusefilter-edit-builder-vars-page-title": "பக்கத்தின் தலைப்பு (பெயர்வெளி இல்லாமல்)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "முழு பக்கத்தின் தலைப்பு",
+ "abusefilter-edit-builder-vars-movedto-title": "நகர்த்தல் இலக்குப் பக்கத்தின் தலைப்பு",
"abusefilter-edit-builder-vars-user-editcount": "பயனரின் தொகுப்புக்களின் எண்ணிக்கை",
"abusefilter-edit-builder-vars-user-age": "பயனர் கணக்கின் வயது",
"abusefilter-edit-builder-vars-user-name": "பயனர் கணக்கின் பெயர்",
@@ -278,7 +272,6 @@
"abusefilter-topnav-tools": "பிழை திருத்தும் கருவிகள்",
"abusefilter-topnav-import": "வடிகட்டியை இறக்குமதி செய்",
"abusefilter-log-name": "முறைகேடு வடிகட்டிப் பதிகை",
- "abusefilter-log-entry-modify": "$1 திருத்தப்பட்டது ($2)",
"abusefilter-log-noresults": "முடிவுகள் ஏதுமில்லை",
"abusefilter-diff-title": "பதிப்புகளுக்கிடையிலான வேறுபாடு",
"abusefilter-diff-item": "பொருள்",
diff --git a/AbuseFilter/i18n/tcy.json b/AbuseFilter/i18n/tcy.json
index f5d54d14..6f43452f 100644
--- a/AbuseFilter/i18n/tcy.json
+++ b/AbuseFilter/i18n/tcy.json
@@ -66,7 +66,7 @@
"abusefilter-edit-builder-group-misc": "ಇತರೆ",
"abusefilter-edit-builder-vars-action": "ಕ್ರಿಯೆಕ್ಕುಲು",
"abusefilter-edit-builder-vars-newsize": "ಪೊಸ ಪುಟೊದ ಅಳತೆ",
- "abusefilter-edit-builder-vars-article-id": "ಪುಟೊದ ಐಡಿ",
+ "abusefilter-edit-builder-vars-page-id": "ಪುಟೊದ ಐಡಿ",
"abusefilter-history-hidden": "ದೆಂಗಾನ",
"abusefilter-history-enabled": "ಶಕ್ತಗೊಳಿಸಾಯಿನ",
"abusefilter-history-global": "ಜಾಗತಿಕ",
diff --git a/AbuseFilter/i18n/te.json b/AbuseFilter/i18n/te.json
index 1e019735..53650b7a 100644
--- a/AbuseFilter/i18n/te.json
+++ b/AbuseFilter/i18n/te.json
@@ -11,7 +11,8 @@
},
"abusefilter": "దుర్వినియోగ వడపోతల స్వరూపణం",
"abuselog": "దురుపయోగాల చర్యానివేదిక",
- "abusefilter-mustbeeditor": "భద్రతా కారణాల దృష్ట్యా, దుర్వినియోగ వడపోతలను మార్చే హక్కున్న వాడుకరులు మాత్రమే ఈ ముఖాంతరాన్ని ఉపయోగించవచ్చు.",
+ "abusefilter-intro": "దుశ్చర్య వడపోతల నిర్వహణ ఇంటర్‌ఫేసుకు స్వాగతం.\nదుశ్చర్యల వడపోత అనేది ఇక్కడ జరిగే అన్ని చర్యలకు ఆటోమాటిగ్గా వర్తించే నియమాలతో కూడిన సాఫ్టువేరు మెకానిజము.\nవికీలో నిర్వచించిన వడపోతలను ఈ ఇంటర్‌ఫేసులో చూదవచ్చు, వాటిని మార్చనూ వచ్చు.",
+ "abusefilter-mustviewprivateoredit": "భద్రతా కారణాల దృష్ట్యా, దుర్వినియోగ వడపోతలను మార్చే హక్కున్న వాడుకరులు మాత్రమే ఈ ఇంటర్‌ఫేసును ఉపయోగించవచ్చు.",
"abusefilter-warning": "'''హెచ్చరిక''': ఈ చర్య హానికరమని ఆటోమాటిగ్గా గుర్తించబడింది.\nపసలేని మార్పుచేర్పులు వెంటనే రద్దు చెయ్యబడతాయి,\nకొట్టొచ్చినట్టుగా కనబడే తప్పులు చేసినా, పదేపదే పసలేని మార్పుచేర్పులు చేసినా.. మీ ఖాతా లేదా ఐపీ అడ్రసు నిషేధానికి దారితీయవచ్చు.\nఈ మార్పు సరైనదేనని మీరు నమ్మితే, మళ్ళీ సమర్పించండి.\nమీ చర్యను దుశ్చర్యగా భావించేందుకు దారితీసిన నియమం క్లుప్తంగా ఇది: $1",
"abusefilter-disallowed": "ఈ చర్య హానికరమని ఆటోమాటిగ్గా గుర్తించబడింది. అంచేత నిరాకరించాం.\nఒకవేళ మీ మార్పుచేర్పులు సరైనవని మీరు నమ్మితే, మీరు చెయ్యదలచిన దాని గురించి నిర్వాహకులెవరికైనా తెలియబరచండి.\nమీ చర్యను దుశ్చర్యగా భావించడానికి దారితీసిన నియమం క్లుప్తంగా ఇలా వివరిస్తోంది: $1",
"abusefilter-blocked-display": "ఈ చర్య హానికరమని ఆటోమాటిగ్గా గుర్తించబడింది. అంచేత దాన్ని చెయ్యకుండా మిమ్మల్ని నిరోధించాం.\nఅంతేకాక, {{SITENAME}} ను పరిరక్షించేందుకుగాను, మీ వాడుకరిఖాతా, దానికి సంబంధించిన ఐపీ అడ్రసుల ద్వారా మార్పుచేర్పులు చెయ్యకుండా నిరోధించాం.\nఒకవేళ ఇది పొరపాటున జరిగి ఉంటే, ఎవరైనా ఒక నిర్వాహకుని సంప్రదించండి.\nమీ చర్యను దుర్వినియోగంగా ఎత్తిచూపిన సదరు నియమం క్లుప్తంగా ఇలా చెబుతోంది: $1",
@@ -29,6 +30,7 @@
"right-abusefilter-modify-restricted": "నియంత్రిత చర్యలతో కూడిన దుర్వినియోగ వడపోతలను మార్చగలగడం",
"right-abusefilter-revert": "ఒక నిర్దిష్ట దుశ్చర్య వడపోత యొక్క అన్ని మార్పులని తిప్పికొట్టడం",
"right-abusefilter-view-private": "అంతరంగికం అని గుర్తించిన దుర్వినియోగ వడపోతలను చూడగలగడం",
+ "right-abusefilter-log-private": "గోప్యము అని గుర్తించిన వడపోతల లాగ్ వివరాలు చూడడం",
"right-abusefilter-hide-log": "దుర్వినియోగ చిట్టా లోని పద్దులను దాచగలగడం",
"right-abusefilter-hidden-log": "దాచివున్న దుర్వినియోగ చిట్టా పద్దులను చూడగలగడం",
"action-abusefilter-modify": "దుర్వినియోగ వడపోతలను మార్చడానికి",
@@ -47,7 +49,7 @@
"abusefilter-log-search-title": "శీర్షిక:",
"abusefilter-log-search-wiki": "వికీ:",
"abusefilter-log-search-submit": "వెతుకు",
- "abusefilter-log-entry": "$1: $4లో చర్య \"$3\"ని చెయ్యడం ద్వారా $2 ఒక దుర్వినియోగ వడపోతని కదిలించారు.\nతీసుకున్న చర్య: $5;\nవడపోత వివరణ: $6",
+ "abusefilter-log-entry": "$1: $4లో \"$3\" చర్యను చెయ్యడం ద్వారా $2 ఒక దుర్వినియోగ వడపోతను {{GENDER:$8|కదిలించారు}}.\nతీసుకున్న చర్య: $5;\nవడపోత వివరణ: $6",
"abusefilter-log-entry-withdiff": "$1: $2 $4 లో \"$3\" పని చేసి, దుశ్చర్య వడపోతను ప్రేరేపించారు.\nతీసుకున్న చర్య: $5;\nవడపోత వివరం: $6 ($7)",
"abusefilter-log-detailedentry-meta": "↓ $1: $2, $3 ను ప్రయోగించారు. దాంతో $5 పై \"$4\" చర్య జరిగింది.\nజరిగిన చర్యలు: $6;\nవడపోతకం వివరణ: $7 ($8)",
"abusefilter-log-detailedentry-global": "సార్వత్రిక వడపోత $1",
@@ -64,7 +66,7 @@
"abusefilter-log-noactions": "ఏమీలేవు",
"abusefilter-log-details-diff": "దిద్దుబాటులో చేసిన మార్పులు",
"abusefilter-log-linkoncontribs": "దుర్వినియోగాల చిట్టా",
- "abusefilter-log-linkoncontribs-text": "ఈ వాడుకరి యొక్క దుర్వినియోగాల చిట్టా",
+ "abusefilter-log-linkoncontribs-text": "{{GENDER:$1|ఈ వాడుకరి}} దుర్వినియోగాల చిట్టా",
"abusefilter-log-hidden": "(పద్దుని దాచారు)",
"abusefilter-log-hidden-implicit": "(కూర్పును తొలగించారు కాబట్టి, అది దాచబడింది)",
"abusefilter-log-cannot-see-details": "ఈ ఎంట్రీ వివరాలు చూసే అనుమతి మీకు లేదు.",
@@ -74,8 +76,6 @@
"abusefilter-log-hide-hidden": "బహిరంగ వీక్షణం నుండి ఈ పద్దుని దాచు",
"abusefilter-log-hide-reason": "కారణం:",
"abusefilter-log-hide-forbidden": "దుర్వినియోగ చిట్టా పద్దులను దాచే అనుమతి మీకు లేదు.",
- "abusefilter-logentry-suppress": "\"[[$1]]\"ని దాచారు",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\"ని చూపించారు",
"logentry-abusefilter-hit": "$1, పేజీ $3 లో \"$5\" పని చేసి, $4 ను ప్రేరేపించారు. తీసుకున్న చర్య: $6 ($7)",
"abusefilter-management": "దుర్వినియోగ వడపోతల నిర్వహణ",
"abusefilter-list": "అన్ని వడపోతలు",
@@ -108,7 +108,6 @@
"abusefilter-list-options-scope-local": "స్థానిక నియమాలు మాత్రమే",
"abusefilter-list-options-scope-global": "సార్వత్రిక నియమాలు మాత్రమే",
"abusefilter-list-options-scope-all": "స్థానిక, సార్వత్రిక నియమాలు",
- "abusefilter-list-options-disabled": "అచేతన వడపోతలు:",
"abusefilter-list-options-hidedisabled": "అచేతన వడపోతలను దాచు",
"abusefilter-list-options-submit": "తాజాకరించు",
"abusefilter-tools-text": "దుర్వినియోగ వడపోతకాలను తయారుచెయ్యడంలోను, డీబగ్గింగులోనూ ఉపయోగపడగల పరికరాలు కొన్నింటిని చూడండి.",
@@ -123,7 +122,6 @@
"abusefilter-edit-status-label": "గణాంకాలు:",
"abusefilter-edit-status": "గత $1 {{PLURAL:$1|చర్యలో|చర్యలలో}}, ఈ వడపోత $2 సార్లు సరిపోలింది ($3%).",
"abusefilter-edit-status-profile": "గత $1 {{PLURAL:$1|చర్యలో|చర్యలలో}}, ఈ వడపోత $2 సార్లు సరిపోలింది ($3%).\nసగటున అది నడిచిన సమయం $4 ms, అది నిబంధనల పరిమితిలో $5 {{PLURAL:$5|నిబంధనను|నిబంధనలను}} వినియోగిస్తుంది.",
- "abusefilter-edit-throttled": "'''హెచ్చరిక:'' భద్రత రీత్యా ఈ వడపోతను ఆటోమాటిగ్గా అశక్తం చేసాం.\nఅది $1% కంటే ఎక్కువ చర్యల పరిమితిని చేరింది.",
"abusefilter-edit-new": "కొత్త జల్లెడ",
"abusefilter-edit-save": "జల్లెడ భద్రపరచు",
"abusefilter-edit-id": "వడపోత ID:",
@@ -147,7 +145,6 @@
"abusefilter-edit-action-tag": "ఈ మార్పును సమీక్షార్థం గుర్తు పెట్టు",
"abusefilter-edit-throttle-count": "అనుమతించాల్సిన చర్యల సంఖ్య:",
"abusefilter-edit-throttle-period": "కాల వ్యవధి:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|క్షణం|క్షణాలు}}",
"abusefilter-edit-warn-message": "హెచ్చరికకై ఉపయోగించాల్సిన వ్యవస్థా సందేశం:",
"abusefilter-edit-warn-other": "ఇతర సందేశం",
"abusefilter-edit-warn-other-label": "ఇతర సందేశం యొక్క పేజీ పేరు:\n:''(మీడియావికీ ఉపసర్గ లేకుండా)''",
@@ -161,7 +158,7 @@
"abusefilter-edit-done": "[[Special:AbuseFilter/$1|వడపోత $3]] లో [[Special:AbuseFilter/history/$1/diff/prev/$2|మీరు చేసిన మార్పులను]] భద్రపరచాం.",
"abusefilter-edit-badsyntax": "మీరిచ్చిన వడపోతలో ఓ సింటాక్స్ దోషం ఉంది.\nపార్సరు నుంచి వచ్చిన ఔట్‍పుట్ ఇది: <pre>$1</pre>",
"abusefilter-edit-restricted": "ఈ వడపోతను మీరు మార్చలేరు. ఎంచేతంటే, అందులో ఒకటో, మరిన్నో నిరోధిత చర్యలున్నాయి.\nనిరోధిత చర్యలకు అనుమతులు కలిగిన వాడుకరిని అడిగి, సదరు మార్పును చేయించుకోండి.",
- "abusefilter-edit-viewhistory": "ఈ వడపోత యొక్క చరిత్రని చూడండి",
+ "abusefilter-edit-viewhistory": "ఈ వడపోత చరిత్రను చూడండి",
"abusefilter-edit-history": "చరిత్ర:",
"abusefilter-edit-check": "సింటాక్సును సరిచూసుకోండి",
"abusefilter-edit-badfilter": "మీరు పేర్కొన్న వడపోత లేనే లేదు",
@@ -224,19 +221,18 @@
"abusefilter-edit-builder-vars-oldsize": "పాత పేజీ పరిమాణం",
"abusefilter-edit-builder-vars-removedlines": "మార్పులో తొలగించిన పంక్తులు",
"abusefilter-edit-builder-vars-summary": "మార్పు సంగ్రహం/కారణం",
- "abusefilter-edit-builder-vars-article-id": "పుట ID",
- "abusefilter-edit-builder-vars-article-ns": "పేజీ పేరుబరి",
- "abusefilter-edit-builder-vars-article-text": "పేజీ శీర్షిక (పేరుబరి లేకుండా)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "పేజీ పూర్తి శీర్షిక",
- "abusefilter-edit-builder-vars-article-views": "పేజీ వీక్షణలు",
+ "abusefilter-edit-builder-vars-page-id": "పుట ID",
+ "abusefilter-edit-builder-vars-page-ns": "పేజీ పేరుబరి",
+ "abusefilter-edit-builder-vars-page-title": "పేజీ శీర్షిక (పేరుబరి లేకుండా)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "పేజీ పూర్తి శీర్షిక",
"abusefilter-edit-builder-vars-movedfrom-id": "తరలింపు మూల పుట యొక్క పుట ID",
"abusefilter-edit-builder-vars-movedfrom-ns": "తరలింపు మూల పుట యొక్క పేరుబరి",
- "abusefilter-edit-builder-vars-movedfrom-text": "తరలింపు మూల పుట యొక్క శీర్షిక",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "తరలింపు మూల పుట యొక్క పూర్తి శీర్షిక",
+ "abusefilter-edit-builder-vars-movedfrom-title": "తరలింపు మూల పుట యొక్క శీర్షిక",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "తరలింపు మూల పుట యొక్క పూర్తి శీర్షిక",
"abusefilter-edit-builder-vars-movedto-id": "తరలింపు గమ్యస్థాన పుట యొక్క పుట ID",
"abusefilter-edit-builder-vars-movedto-ns": "తరలింపు గమ్యస్థాన పుట యొక్క పేరుబరి",
- "abusefilter-edit-builder-vars-movedto-text": "తరలింపు గమ్యస్థాన పేజీ యొక్క శీర్షిక",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "తరలింపు గమ్యస్థాన పేజీ యొక్క పూర్తి శీర్షిక",
+ "abusefilter-edit-builder-vars-movedto-title": "తరలింపు గమ్యస్థాన పేజీ యొక్క శీర్షిక",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "తరలింపు గమ్యస్థాన పేజీ యొక్క పూర్తి శీర్షిక",
"abusefilter-edit-builder-vars-user-editcount": "వాడుకరి యొక్క మార్పుల సంఖ్య",
"abusefilter-edit-builder-vars-user-age": "వాడుకరి ఖాతా యొక్క వయసు",
"abusefilter-edit-builder-vars-user-name": "వాడుకరి ఖాతా యొక్క పేరు",
@@ -335,7 +331,6 @@
"abusefilter-topnav-import": "వడపోత దిగుమతి",
"abusefilter-log-name": "దుర్వినియోగ వడపోతల చిట్టా",
"abusefilter-log-header": "వడపోతలకు జరిగిన మార్పుల సంగ్రహాన్ని ఈ చిట్టా చూపిస్తుంది.\nపూర్తి వివరాల కొరకు, ఇటీవలి [[Special:AbuseFilter/history|వడపోత మార్పుల జాబితా]]ని చూడండి.",
- "abusefilter-log-entry-modify": "$1ని మార్చారు ($2)",
"abusefilter-log-noresults": "ఫలితాలు లేవు",
"abusefilter-diff-title": "కూర్పుల మధ్య తేడాలు",
"abusefilter-diff-item": "అంశం",
@@ -348,6 +343,5 @@
"abusefilter-diff-next": "కొత్త మార్పు",
"abusefilter-import-intro": "ఇతర వికీల నుండి వడపోతకాలను దిగుమతి చేసుకునేందుకు ఈ ఇంటరుఫేసును వాడవచ్చు.\nమూలవికీలో, ఎడిటింగ్ ఇంటరుఫేసులోని \"{{int:abusefilter-edit-tools}}\" కింద ఉన్న \"{{int:abusefilter-edit-export}}\" ను నొక్కండి.\nఅప్పుడు కనిపించే టెక్స్టుబాక్సులో ఉన్న పాఠ్యాన్ని కాపీ చేసుకుని, దాన్ని ఈ టెక్స్టుబాక్సులో పేస్టు చెయ్యండి. ఆ తరవాత \"{{int:abusefilter-import-submit}}\" నొక్కండి.",
"abusefilter-import-submit": "భోగట్టాని దిగుమతించు",
- "abusefilter-group-default": "అప్రమేయం",
- "apihelp-query+abuselog-example-1": "ఇటీవలి చిట్టా పద్దులను చూపించు"
+ "abusefilter-group-default": "అప్రమేయం"
}
diff --git a/AbuseFilter/i18n/tg-cyrl.json b/AbuseFilter/i18n/tg-cyrl.json
index decc255d..e5ab2a57 100644
--- a/AbuseFilter/i18n/tg-cyrl.json
+++ b/AbuseFilter/i18n/tg-cyrl.json
@@ -12,7 +12,7 @@
"abusefilter-log-details-val": "Қимат",
"abusefilter-list-edit": "Вироиш",
"abusefilter-edit-builder-vars-old-content-model": "Навъи таркибии саҳифа",
- "abusefilter-edit-builder-vars-article-id": "Рамзи саҳифа",
+ "abusefilter-edit-builder-vars-page-id": "Рамзи саҳифа",
"abusefilter-examine-submit": "Ҷустуҷӯ",
"abusefilter-diff-item": "Элемент"
}
diff --git a/AbuseFilter/i18n/th.json b/AbuseFilter/i18n/th.json
index ba20d3dc..f236181f 100644
--- a/AbuseFilter/i18n/th.json
+++ b/AbuseFilter/i18n/th.json
@@ -17,7 +17,6 @@
"abusefilter": "โครงแบบตัวกรองการละเมิดกฎ",
"abuselog": "ปูมการละเมิดกฎ",
"abusefilter-intro": "ยินดีต้อนรับสู่อินเตอร์เฟซการจัดการตัวกรองการละเมิดกฎ\nตัวกรองการละเมิดกฎเป็นซอฟต์แวร์อัตโนมัติในการวิเคราะห์พฤติกรรมการกระทำทั้งหมด\nอินเตอร์เฟซนี้แสดงรายการตัวกรองที่กำหนดไว้และสามารถแก้ไขได้",
- "abusefilter-mustbeeditor": "เฉพาะผู้ใช้ที่มีสิทธิแก้ไขตัวกรองการละเมิดกฎเท่านั้นที่สามารถใช้อินเตอร์เฟซนี้ เพื่อความปลอดภัย",
"abusefilter-warning": "'''คำเตือน''': การกระทำนี้ถูกระบุว่าไม่เหมาะสมอัตโนมัติ\nการแก้ไขที่ไม่เหมาะสมหรือเป็นภัยต่อระบบจะถูกย้อนกลับโดยเร็ว\nและการแก้ไขที่ไม่สร้างสรรค์อย่างยิ่ง หรือซ้ำหลายครั้งจะส่งผลให้บัญชีหรือเลขที่อยู่ไอพีของคุณถูกบล็อก\nหากคุณเชื่อว่าการกระทำนี้สร้างสรรค์ คุณอาจส่งอีกครั้งเพื่อยืนยัน\nคำอธิบายอย่างย่อเกี่ยวกับการละเมิดกฎที่ตรงกับการกระทำของคุณ: $1",
"abusefilter-disallowed": "การกระทำนี้ถูกระบุว่าไม่เหมาะสมอัตโนมัติ จึงไม่ได้รับอนุญาตให้ดำเนินการต่อ\nหากคุณเชื่อว่าการกระทำของคุณสร้างสรรค์ โปรดแจ้งผู้ดูแลระบบถึงสิ่งที่คุณพยายามทำ\nคำอธิบายโดยสรุปเกี่ยวกับการละเมิดกฎที่ตรงกับการกระทำของคุณ คือ $1",
"abusefilter-blocked-display": "การดำเนินการนี้ถูกระบุว่าไม่เหมาะสมอัตโนมัติ\nและคุณถูกกันมิให้ดำเนินการ\nนอกจากนี้ เพื่อปกป้อง {{SITENAME}} บัญชีผู้ใช้ของคุณและทุกเลขที่อยู่ไอพีที่เกี่ยวข้องถูกบล็อกมิให้แก้ไขแล้ว\nหากสิ่งนี้เกิดจากข้อผิดพลาด โปรดติดต่อผู้ดูแลระบบ\nคำอธิบายโดยสรุปเกี่ยวกับการละเมิดกฎที่ตรงกับการกระทำของคุณ คือ $1",
@@ -83,8 +82,6 @@
"abusefilter-log-hide-hidden": "ซ่อนหน่วยนี้มิให้ปรากฏต่อสาธารณะ",
"abusefilter-log-hide-reason": "สาเหตุ:",
"abusefilter-log-hide-forbidden": "คุณไม่มีสิทธิซ่อนหน่วยปูมการละเมิดกฎ",
- "abusefilter-logentry-suppress": "ซ่อน \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "เปิดเผย \"[[$1]]\"",
"logentry-abusefilter-hit": "$1 เรียกคำสั่งจาก $4 ขณะกระทำการ \"$5\" บน $3\nสิ่งที่ตัวกรองดำเนินการ: $6 ($7)",
"abusefilter-management": "การจัดการตัวกรองการละเมิดกฎ",
"abusefilter-list": "ตัวกรองทั้งหมด",
@@ -117,7 +114,6 @@
"abusefilter-list-options-scope-local": "เฉพาะกฎท้องถิ่น",
"abusefilter-list-options-scope-global": "เฉพาะกฎทั่วโลก",
"abusefilter-list-options-scope-all": "กฎท้องถิ่นและทั่วโลก",
- "abusefilter-list-options-disabled": "ตัวกรองที่ปิดใช้งาน:",
"abusefilter-list-options-hidedisabled": "ซ่อนตัวกรองที่ปิดใช้งาน",
"abusefilter-list-options-submit": "อัปเดต",
"abusefilter-tools-text": "นี่เป็นเครื่องมือซึ่งอาจเป็นประโยชน์ในการคิดระบบและการแก้จุดบกพร่องของตัวกรองการละเมิดกฎ",
@@ -137,7 +133,6 @@
"abusefilter-edit-status-label": "สถิติ:",
"abusefilter-edit-status": "จาก $1 การกระทำล่าสุด ตรงกับตัวกรองนี้ $2 ครั้ง ($3%)",
"abusefilter-edit-status-profile": "จาก $1 การกระทำล่าสุด ตรงกับตัวกรองนี้ $2 ครั้ง ($3%) โดยเฉลี่ย เวลาดำเนินงานอยู่ที่ $4 มิลลิวินาที และใช้ $5 เงื่อนไขของขีดจำกัดเงื่อนไข",
- "abusefilter-edit-throttled": "'''คำเตือน ''': ตัวกรองนี้ถูกปิดใช้งานอัตโนมัติตามมาตรการความปลอดภัย\nเนื่องจากถึงขีดจำกัดการตรวจจับมากกว่า $1% ของการกระทำทั้งหมด",
"abusefilter-edit-new": "ตัวกรองใหม่",
"abusefilter-edit-save": "บันทึกตัวกรอง",
"abusefilter-edit-id": "หมายเลขประจำตัวกรอง:",
@@ -164,7 +159,6 @@
"abusefilter-edit-action-tag": "ติดป้ายกำกับการแก้ไขเพื่อทบทวนต่อไป",
"abusefilter-edit-throttle-count": "จำนวนการกระทำที่อนุญาต:",
"abusefilter-edit-throttle-period": "ช่วงเวลา:",
- "abusefilter-edit-throttle-seconds": "$1 วินาที",
"abusefilter-edit-warn-message": "ข้อความระบบที่ใช้เตือน",
"abusefilter-edit-warn-other": "ข้อความอื่น",
"abusefilter-edit-warn-other-label": "ชื่อหน้าของข้อความอื่น:\n:''(โดยไม่มีคำขึ้นต้นมีเดียวิกิ)''",
@@ -249,19 +243,18 @@
"abusefilter-edit-builder-vars-oldsize": "ขนาดหน้าเก่า",
"abusefilter-edit-builder-vars-removedlines": "บรรทัดที่นำออกในการแก้ไข",
"abusefilter-edit-builder-vars-summary": "คำอธิบายอย่างย่อ/เหตุผล",
- "abusefilter-edit-builder-vars-article-id": "หมายเลขประจำหน้า",
- "abusefilter-edit-builder-vars-article-ns": "เนมสเปซหน้า",
- "abusefilter-edit-builder-vars-article-text": "ชื่อหน้า (ไม่มีเนมสเปซ)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "ชื่อเต็มหน้า",
- "abusefilter-edit-builder-vars-article-views": "จำนวนการเข้าชมหน้า",
+ "abusefilter-edit-builder-vars-page-id": "หมายเลขประจำหน้า",
+ "abusefilter-edit-builder-vars-page-ns": "เนมสเปซหน้า",
+ "abusefilter-edit-builder-vars-page-title": "ชื่อหน้า (ไม่มีเนมสเปซ)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "ชื่อเต็มหน้า",
"abusefilter-edit-builder-vars-movedfrom-id": "หมายเลขประจำหน้าต้นทางที่เปลี่ยนชื่อ",
"abusefilter-edit-builder-vars-movedfrom-ns": "เนมสเปซหน้าต้นทางที่เปลี่ยนชื่อ",
- "abusefilter-edit-builder-vars-movedfrom-text": "ชื่อหน้าต้นทางที่เปลี่ยนชื่อ",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "ชื่อเต็มหน้าต้นทางที่เปลี่ยนชื่อ",
+ "abusefilter-edit-builder-vars-movedfrom-title": "ชื่อหน้าต้นทางที่เปลี่ยนชื่อ",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "ชื่อเต็มหน้าต้นทางที่เปลี่ยนชื่อ",
"abusefilter-edit-builder-vars-movedto-id": "หมายเลขประจำหน้าปลายทางที่เปลี่ยนชื่อ",
"abusefilter-edit-builder-vars-movedto-ns": "เนมสเปซหน้าปลายทางที่เปลี่ยนชื่อ",
- "abusefilter-edit-builder-vars-movedto-text": "ชื่อหน้าปลายทางที่เปลี่ยนชื่อ",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "ชื่อเต็มหน้าปลายทางที่เปลี่ยนชื่อ",
+ "abusefilter-edit-builder-vars-movedto-title": "ชื่อหน้าปลายทางที่เปลี่ยนชื่อ",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "ชื่อเต็มหน้าปลายทางที่เปลี่ยนชื่อ",
"abusefilter-edit-builder-vars-user-editcount": "จำนวนการแก้ไขของผู้ใช้",
"abusefilter-edit-builder-vars-user-age": "อายุบัญชีผู้ใช้",
"abusefilter-edit-builder-vars-user-name": "ชื่อบัญชีผู้ใช้",
@@ -374,7 +367,6 @@
"abusefilter-topnav-import": "นำเข้าตัวกรอง",
"abusefilter-log-name": "ปูมตัวกรองการละเมิดกฏ",
"abusefilter-log-header": "ปูมนี้แสดงสรุปการเปลี่ยนแปลงต่อตัวกรอง \nสำหรับรายละเอียดเต็ม ดู[[Special:AbuseFilter/history|รายการ]]การเปลี่ยนแปลงตัวกรองล่าสุด",
- "abusefilter-log-entry-modify": "แก้ไข $1 ($2)",
"abusefilter-log-noresults": "ไม่มีผลลัพธ์",
"abusefilter-diff-title": "ความแตกต่างระหว่างรุ่น",
"abusefilter-diff-item": "รายการ",
diff --git a/AbuseFilter/i18n/tk.json b/AbuseFilter/i18n/tk.json
index b0a57cb9..0ef45188 100644
--- a/AbuseFilter/i18n/tk.json
+++ b/AbuseFilter/i18n/tk.json
@@ -8,7 +8,6 @@
"abusefilter-desc": "Özgerdişlerde awtomatik ewristik filtleri ulanýar",
"abusefilter": "Erbet ulanmak filtri konfigurasiýasy",
"abuselog": "Erbet ulanmak gündeligi",
- "abusefilter-mustbeeditor": "Howpsuzlyk sebäpleri üçin, bu interfeýsi diňe erbet ulanmak filtrlerini üýtgetmäge hukugy bolan ulanyjylar ulanyp bilýär.",
"abusefilter-blocker": "Erbet ulanmak filtri",
"abusefilter-accountreserved": "Bu hasap ady betniýetli ulanyş filtri tarapyndan ulanylar ýaly ätiýaçlyga goýuldy.",
"right-abusefilter-modify": "Erbet ulanmak filtrlerini üýtget",
@@ -59,8 +58,6 @@
"abusefilter-log-hide-hidden": "Bu ýazgyny köpçüligiň görmeginden gizle",
"abusefilter-log-hide-reason": "Sebäp:",
"abusefilter-log-hide-forbidden": "Betniýetli ulanyş gündeliginiň ýazgylaryny gizlemäge rugsadyňyz ýok.",
- "abusefilter-logentry-suppress": "gizle: \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "görkez: \"[[$1]]\"",
"abusefilter-management": "Erbet Ulanmak filtr dolandyryşy",
"abusefilter-list": "Ähli filtrler",
"abusefilter-list-id": "Filtr ID-si",
@@ -87,7 +84,6 @@
"abusefilter-list-options-deleted-only": "Diňe öçürilen filtrleri görkez",
"abusefilter-list-options-deleted-hide": "Öçürilen filtrleri gizle",
"abusefilter-list-options-deleted-show": "Öçürilen filtreri degişli et",
- "abusefilter-list-options-disabled": "Ýapyk filtrler:",
"abusefilter-list-options-hidedisabled": "Ýapyk filtrleri gizle",
"abusefilter-list-options-submit": "Täzele",
"abusefilter-tools-expr": "Aňlatma synagy",
@@ -103,7 +99,6 @@
"abusefilter-edit-status-label": "Statistikalar:",
"abusefilter-edit-status": "Bu filtr soňky $1 {{PLURAL:$1|hereketden|hereketden}} $2 (%$3) sanysyna gabat geldi.",
"abusefilter-edit-status-profile": "Bu filtr soňky $1 {{PLURAL:$1|hereketden|hereketden}} $2 (%$3) sanysyna gabat geldi.\nOrtaça alnanda, işlän wagty $4ms, we onuň şert çägi $5 sany şerti sarp edýär.",
- "abusefilter-edit-throttled": "'''Duýduryş''': Bu filtr howpsuzlyk çäresi hökmünde awtomatik ýapyldy.\nOl hereketleriň %$1 sanysyndan artykmaç gabat gelme çägine baryp ýetdi.",
"abusefilter-edit-new": "Täze filtr",
"abusefilter-edit-save": "Filtri ýazdyr",
"abusefilter-edit-id": "Filtr ID-si:",
@@ -120,13 +115,11 @@
"abusefilter-edit-hitcount": "Filtr hitleri:",
"abusefilter-edit-consequences": "Gabat gelende edilýäm hereketler",
"abusefilter-edit-action-disallow": "Ulanyjynyň soralýan hereketi amala aşyrmagynyň öňüni al",
- "abusefilter-edit-action-flag": "Özgerdişi erbet ulanmak gündeliginde baýdakla",
"abusefilter-edit-action-degroup": "Ulanyjyny ähli artykmaç hukukly toparlardan aýyr",
"abusefilter-edit-action-block": "Ulanyjyny we/ýa-da IP adresini redaktirlemekden blokirle",
"abusefilter-edit-action-tag": "Özgerdişi ýene gözden geçiriler ýaly tegle",
"abusefilter-edit-throttle-count": "Rugsat berlen hereketleriň sany:",
"abusefilter-edit-throttle-period": "Wagt periody:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|sekunt|sekunt}}",
"abusefilter-edit-throttle-groups": "Topar gysyjy:\n:''(her setire bir sany, otur bilen birleşdiriň)''",
"abusefilter-edit-warn-message": "Duýduryş üçin ulanylýan ulgam habarlaşygy:",
"abusefilter-edit-warn-other": "Başga habarlaşyk",
@@ -207,18 +200,18 @@
"abusefilter-edit-builder-vars-oldsize": "Köne sahypa ölçegi",
"abusefilter-edit-builder-vars-removedlines": "Özgerdişden aýrylan setirler",
"abusefilter-edit-builder-vars-summary": "Özgerdiş düşündirişi/sebäbi",
- "abusefilter-edit-builder-vars-article-id": "Sahypa ID-si",
- "abusefilter-edit-builder-vars-article-ns": "Sahypa at giňişligi",
- "abusefilter-edit-builder-vars-article-text": "Sahypa ady (at giňişliksiz)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Doly sahypa ady",
+ "abusefilter-edit-builder-vars-page-id": "Sahypa ID-si",
+ "abusefilter-edit-builder-vars-page-ns": "Sahypa at giňişligi",
+ "abusefilter-edit-builder-vars-page-title": "Sahypa ady (at giňişliksiz)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Doly sahypa ady",
"abusefilter-edit-builder-vars-movedfrom-id": "Geçirme çeşme sahypasynyň sahypa ID-si",
"abusefilter-edit-builder-vars-movedfrom-ns": "Geçirme çeşme sahypasynyň at giňişligi",
- "abusefilter-edit-builder-vars-movedfrom-text": "Geçirilýän çeşme sahypanyň ady",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Geçirilýän çeşme sahypanyň doly ady",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Geçirilýän çeşme sahypanyň ady",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Geçirilýän çeşme sahypanyň doly ady",
"abusefilter-edit-builder-vars-movedto-id": "Geçirilýän niýetlenilýän sahypanyň sahypa ID-si",
"abusefilter-edit-builder-vars-movedto-ns": "Geçirilýän niýetlenilýän sahypanyň at giňişligi",
- "abusefilter-edit-builder-vars-movedto-text": "Geçirilýän niýetlenilýän sahypanyň ady",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Geçirilýän niýetlenilýän sahypanyň doly ady",
+ "abusefilter-edit-builder-vars-movedto-title": "Geçirilýän niýetlenilýän sahypanyň ady",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Geçirilýän niýetlenilýän sahypanyň doly ady",
"abusefilter-edit-builder-vars-user-editcount": "Ulanyjynyň özgerdiş sany",
"abusefilter-edit-builder-vars-user-age": "Ulanyjy hasabynyň ýaşy",
"abusefilter-edit-builder-vars-user-name": "Ulanyjy hasabynyň ady",
@@ -319,7 +312,6 @@
"abusefilter-topnav-import": "Filtri importirle",
"abusefilter-log-name": "Erbet ulanmak filtr gündeligi",
"abusefilter-log-header": "Bu gündelik filtrlerde edilen üýtgeşmeleriň düşündirişini görkezýär.\nJikme-jik maglumat üçin, soňky filtr üýtgeşmeleriniň [[Special:AbuseFilter/history|sanawyna]] serediň.",
- "abusefilter-log-entry-modify": "üýtgetdi $1 ($2)",
"abusefilter-diff-title": "Wersiýalaryň aratapawutlary",
"abusefilter-diff-item": "Element",
"abusefilter-diff-version": "$2 tarapyndan $1 çykgydyndan wersiýa",
diff --git a/AbuseFilter/i18n/tl.json b/AbuseFilter/i18n/tl.json
index fbfc3df0..ee85d816 100644
--- a/AbuseFilter/i18n/tl.json
+++ b/AbuseFilter/i18n/tl.json
@@ -4,18 +4,18 @@
"AnakngAraw",
"Jojit fb",
"Matma Rex",
- "Emem.calist"
+ "Emem.calist",
+ "Sky Harbor"
]
},
"abusefilter-desc": "Naghahain ng mga kusang gabay-aral/heuristiko sa mga pamamatnugot",
"abusefilter": "Pagkakaayos ng pansala ng pang-aabuso",
"abuselog": "Tala ng pang-aabuso",
"abusefilter-intro": "Maligayang pagdating sa ugnayang-hangganan ng pamamahala ng Pansala ng Pang-aabuso.\nAng Pansala ng Pang-aabuso ay isang kusang mekanismo ng sopwer ng paggamit ng automatikong tulong ng pagkatuto sa lahat ng mga kilos.\nNagpapakita ang ugnayang-hangganang ito ng isang talaan ng binigyang kahulugang mga pansala, at nagpapahintulot na mabago ang mga ito.",
- "abusefilter-mustbeeditor": "Para sa mga dahilang pangkaligtasan, mga tagagamit lamang na may karapatang baguhin ang mga pansala ng pang-aabuso ang maaaring gumamit ng ugnayang-hangganang ito.",
"abusefilter-warning": "'''Babala''': Ang galaw na ito ay kusang kinilala bilang mapanganib. Mabilisang ibabalik sa dati ang hindi nakapagpapainam na pagbabago, at magbubunga ang kapansin-pansin at paulit-ulit na hindi maiinam na pagbabago ng pagharang sa akawnt o adres ng IP. Kung sa tingin mong mainam ang pagbabagong ito, maaaring mong pindutin uli ang Ipasa upang tiyakin ito. Isang maikling paglalarawan ng alituntunin sa pang-aabuso na tumugma sa iyong galaw ang: $1",
"abusefilter-disallowed": "Ang kilos na ito ay kusang nakilala bilang makakapinsala,\nkaya't hindi pinahintulutan.\nKung naniniwala kang mabuti ang iyong ginawang pagbabago, makipag-ugnayan sa isang tagapangasiwa, at ipagbigay-alam sa kanila ang kung ano ang sinusubok mong gawin.\nIsang maiksing paglalarawan ng alituntunin sa pang-aabuso na tumugma sa kilos mo ang: $1",
"abusefilter-blocked-display": "Ang kilos na ito ay kusang nakilala bilang makakapinsala,\nat pinigilan ang pagsasakatuparan mo nito.\nBilang karagdagan, upang mapagsanggalang ang {{SITENAME}}, hinadlangan sa paggawa ng mga pagbabago ang iyong akawnt at lahat ng mga kaugnay na adres ng IP.\nKung naganap ito dahil sa isang pagkakamali, makipag-ugnayan sa isang tagapangasiwa.\nIsang maiksing paglalarawan ng alituntunin sa pang-aabuso na tumugma sa kilos mo ang: $1",
- "abusefilter-degrouped": "Ang kilos na ito ay kusang nakilala bilang makakapinsala.\nBilang kinahinatnan, hindi ito pinahintulutan, at, dahil sa pinaghihinalaang nalantad sa kapahamakan ang kuwenta mo, pinawalan ng bisa ang lahat ng mga karapatan.\nKung naniniwala kang isa itong pagkakamali, makipag-ugnayan sa isang burokrato na may isang paliwanag hinggil sa kilos na ito, at maaaring maibalik sa dati ang mga karapatan mo.\nIsang maiksing paglalarawan ng alituntunin sa pang-aabuso na tumugma sa kilos mo ang: $1",
+ "abusefilter-degrouped": "Ang aksyon na ito ay kusang nakilala bilang makakapinsala.\nBilang kinahinatnan, hindi ito pinahintulutan, at, dahil sa pinaghihinalaang nalantad sa kapahamakan ang account mo, pinawalan ng bisa ang lahat ng mga karapatan.\nKung naniniwala kang isa itong pagkakamali, makipag-ugnayan sa isang burokrato na may isang paliwanag hinggil sa kilos na ito, at maaaring maibalik sa dati ang mga karapatan mo.\nIsang maiksing paglalarawan ng alituntunin sa pang-aabuso na tumugma sa aksyon mo ang: $1",
"abusefilter-autopromote-blocked": "Ang kilos na ito ay kusang nakilala bilang makakapinsala, at hindi ito pinahintulutan.\nBilang karagdagan, bilang isang pamamaraang pangkaligtasan, pansamantalang pinawalan ng bisa ang ilang mga pribilehiyong palagiang ibinibigay sa kinikilala nang mga akawnt.\nIsang maiksing paglalarawan ng alituntunin sa pang-aabuso na tumugma sa kilos mo ang: $1",
"abusefilter-blocker": "Pansala ng pang-aabuso",
"abusefilter-blockreason": "Kusang hinadlangan ng pansala ng pang-aabuso. Paglalarawan ng tumugmang alituntunin: $1",
@@ -47,6 +47,9 @@
"abusefilter-log-search-filter": "ID ng pansala:",
"abusefilter-log-search-title": "Pamagat:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact-all": "Lahat, kung ano man",
+ "abusefilter-log-search-action-taken-label": "Natatanging Hakbang",
+ "abusefilter-log-search-action-taken-any": "Kahit Ano",
"abusefilter-log-search-submit": "Maghanap",
"abusefilter-log-entry": "$1: nagpagalaw si $2 ng isang pansala ng pang-aabuso, na nagsagawa ng $3 sa $4.\nMga kilos na ginawa: $5;\nPaglalarawan ng pansala: $6",
"abusefilter-log-detailedentry-meta": "$1: nagpagalaw si $2 ng $3, na nagsagawa ng kilos na $4 sa $5. Mga kilos na ginawa: $6; Paglalarawan ng pansala: $7 ($8)",
@@ -74,8 +77,6 @@
"abusefilter-log-hide-hidden": "Itago ang ipinasok na ito mula sa paningin ng madla",
"abusefilter-log-hide-reason": "Dahilan:",
"abusefilter-log-hide-forbidden": "Wala kang pahintulot na itago ang mga pagpapasok sa tala ng pang-aabuso.",
- "abusefilter-logentry-suppress": "itinago ang \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "hindi itinago ang \"[[$1]]\"",
"logentry-abusefilter-hit": "Nakanti ni $1 ang $4, na nagsagawa ng kilos na \"$5\" doon sa $3. Mga kilos na ginawa: $6 ($7)",
"abusefilter-management": "Pamamahala ng pansala ng pang-aabuso",
"abusefilter-list": "Lahat ng mga pansala",
@@ -107,7 +108,6 @@
"abusefilter-list-options-scope": "Ipakita ang mga pansala magmula sa:",
"abusefilter-list-options-scope-local": "Katutubong wiki",
"abusefilter-list-options-scope-global": "Mga patakarang pangglobo",
- "abusefilter-list-options-disabled": "Hindi pinagaganang mga pansala:",
"abusefilter-list-options-hidedisabled": "Itago ang hindi pinagaganang mga pansala",
"abusefilter-list-options-submit": "Isapanahon",
"abusefilter-tools-text": "Narito ang ilang mga kagamitang maaaring maging kapakipakinabang sa paggawa ng at pagtatanggal ng depekto mula sa mga pansala ng pang-aabuso.",
@@ -126,7 +126,6 @@
"abusefilter-edit-status-label": "Mga estadistika:",
"abusefilter-edit-status": "Mula sa huling $1 na {{PLURAL:$1|kilos|mga kilos}}, tumugma ang pansalang ito sa $2 ($3%).",
"abusefilter-edit-status-profile": "Mula sa huling $1 na {{PLURAL:$1|kilos|mga kilos}}, tumugma ang pansalang ito sa $2 ($3%).\nSa karaniwan, ang oras ng pagtakbo nito ay $4ms, at gumugugol ng $5 na {{PLURAL:$5|kundisyon|mga kundisyon}} ng hangganan ng kundisyon.",
- "abusefilter-edit-throttled": "'''Babala''': Kusang hindi pinagana ang pansalang ito bilang isang pamamaraang pangkaligtasan. Umabot na ito sa hangganan ng pagtugma sa mahigit kaysa $1% na mga kilos.",
"abusefilter-edit-new": "Bagong pansala",
"abusefilter-edit-save": "Itala ang pansala",
"abusefilter-edit-id": "ID ng pansala:",
@@ -145,7 +144,6 @@
"abusefilter-edit-consequences": "Mga kilos na ginawa noong tumugma",
"abusefilter-edit-action-warn": "Paganahin ang mga kilos na ito pagkaraang bigyan ng isang babala ang tagagamit",
"abusefilter-edit-action-disallow": "Pigilan ang tagagamit na magawa ang kilos na sinisiyasat",
- "abusefilter-edit-action-flag": "Ibandila ang pagbabago sa tala ng pang-aabuso",
"abusefilter-edit-action-blockautopromote": "Pawalan ng bisa ang kalagayang kusang natiyak ng tagagamit",
"abusefilter-edit-action-degroup": "Tanggalin ang tagagamit mula sa lahat ng mga pangkat na may pribilehiyo",
"abusefilter-edit-action-block": "Hadlangan ang tagagamit at/o adres ng IP na makagawa ng pagbabago",
@@ -154,15 +152,19 @@
"abusefilter-edit-action-tag": "Tatakan ang pagbabago para sa karagdagang pagsusuri.",
"abusefilter-edit-throttle-count": "Bilang ng papayagang mga kilos:",
"abusefilter-edit-throttle-period": "Panahong saklaw:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|segundo|mga segundo}}",
"abusefilter-edit-throttle-groups": "Siiling nakapangkat sa pamamagitan ng:\n:''(isa bawat guhit, pagsamahing may mga kuwit)''",
+ "abusefilter-edit-throttle-ip": "Direksiyong IP",
+ "abusefilter-edit-throttle-user": "Account ng tagagamit",
+ "abusefilter-edit-throttle-range": "Ranggong /16",
+ "abusefilter-edit-throttle-page": "Pahina",
+ "abusefilter-throttle-details": "Panatilihing $1 {{PLURAL:$1|action|actions}} kada- $2 {{PLURAL:$2|second|seconds}}, sa mga grupong naitakda na: $3",
"abusefilter-edit-warn-message": "Mensahe ng sistemang gagamitin para sa babala:",
"abusefilter-edit-warn-other": "Iba pang mensahe",
"abusefilter-edit-warn-other-label": "Pangalan ng pahina ng iba pang mensahe:\n:''(walang unlapi ng MediaWiki)''",
"abusefilter-edit-warn-actions": "Mga kilos:",
- "abusefilter-edit-warn-preview": "Paunang tingnan muna ang piniling mensahe",
+ "abusefilter-edit-warn-preview": "Ipakita/itago ang paunang tingnan ng piniling mensahe",
"abusefilter-edit-warn-edit": "Likhain/Baguhin ang piniling mensahe",
- "abusefilter-edit-tag-tag": "Mga tatak na gagamitin (isa sa bawat guhit):",
+ "abusefilter-edit-tag-tag": "Mga [[Special:Tags|etiketang]] gagamitin:",
"abusefilter-edit-denied": "Hindi mo maaaring tingnan ang mga detalye ng pansalang ito, dahil nakatago ito mula sa pagtanaw ng madla.",
"abusefilter-edit-main": "Mga parametro ng pansala",
"abusefilter-edit-done-subtitle": "Binagong pansala",
@@ -239,18 +241,18 @@
"abusefilter-edit-builder-vars-oldsize": "Lumang sukat ng pahina",
"abusefilter-edit-builder-vars-removedlines": "Mga guhit na tinanggal sa pagbago",
"abusefilter-edit-builder-vars-summary": "Buod ng pagbago/dahilan",
- "abusefilter-edit-builder-vars-article-id": "ID ng pahina",
- "abusefilter-edit-builder-vars-article-ns": "Espasyo ng pangalan ng pahina",
- "abusefilter-edit-builder-vars-article-text": "Pamagat ng pahina (walang espasyo ng pangalan)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Buong pamagat ng pahina",
+ "abusefilter-edit-builder-vars-page-id": "ID ng pahina",
+ "abusefilter-edit-builder-vars-page-ns": "Espasyo ng pangalan ng pahina",
+ "abusefilter-edit-builder-vars-page-title": "Pamagat ng pahina (walang espasyo ng pangalan)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Buong pamagat ng pahina",
"abusefilter-edit-builder-vars-movedfrom-id": "ID ng pahina ng ililipat na pinagmulang pahina",
"abusefilter-edit-builder-vars-movedfrom-ns": "Espasyo ng pangalan ng ililipat na pinagmulang pahina",
- "abusefilter-edit-builder-vars-movedfrom-text": "Pamagat ng ililipat na pinagmulang pahina",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Buong pamagat ng ililipat na pinagmulang pahina",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Pamagat ng ililipat na pinagmulang pahina",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Buong pamagat ng ililipat na pinagmulang pahina",
"abusefilter-edit-builder-vars-movedto-id": "ID ng pahina ng ililipat na kapupuntahan ng pahina",
"abusefilter-edit-builder-vars-movedto-ns": "Espasyo ng pangalan ng ililipat na kapupuntahan ng pahina",
- "abusefilter-edit-builder-vars-movedto-text": "Pamagat ng ililipat na kapupuntahan ng pahina",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Buong pamagat ng ililipat na kapupuntahan ng pahina",
+ "abusefilter-edit-builder-vars-movedto-title": "Pamagat ng ililipat na kapupuntahan ng pahina",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Buong pamagat ng ililipat na kapupuntahan ng pahina",
"abusefilter-edit-builder-vars-user-editcount": "Bilang ng pamamatnugot ng tagagamit",
"abusefilter-edit-builder-vars-user-age": "Edad ng akawnt ng tagagamit",
"abusefilter-edit-builder-vars-user-name": "Pangalan ng akawnt ng tagagamit",
@@ -307,7 +309,7 @@
"abusefilter-exception-regexfailure": "Kamalian sa pangkaraniwang pagsasaad na \"$3\" sa panitik na $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Hindi makabatas na pangingibabaw sa likas na nakakabit na pabagu-bagong \"$2\" sa panitik na $1.",
"abusefilter-exception-outofbounds": "Humihiling ng hindi umiiral na nakatalang bagay na $2 (sukat ng talaan = $3) sa panitik na $1.",
- "abusefilter-exception-notlist": "Humihiling ng hanay ng bagay ng hindi nakahanay sa panitik na $1.",
+ "abusefilter-exception-notarray": "Humihiling ng hanay ng bagay ng hindi nakahanay sa panitik na $1.",
"abusefilter-action-tag": "Tatakan",
"abusefilter-action-throttle": "Siilin",
"abusefilter-action-warn": "Magbabala",
@@ -367,7 +369,6 @@
"abusefilter-topnav-import": "Angkatin ang pansala",
"abusefilter-log-name": "Talaan ng Pansala ng Pang-aabuso",
"abusefilter-log-header": "Nagpapakita ang talaang ito ng isang buod ng mga pagbabagong ginawa sa mga pansala.\nPara sa buong mga detalye, tingnan [[Special:AbuseFilter/history|ang talaan]] ng kamakailang mga pagbabago sa pansala.",
- "abusefilter-log-entry-modify": "binago ang $1 ($2)",
"abusefilter-log-noresults": "Walang mga resulta",
"abusefilter-diff-title": "Mga pagkakaiba sa pagitan ng mga bersyon",
"abusefilter-diff-item": "Bagay",
diff --git a/AbuseFilter/i18n/tr.json b/AbuseFilter/i18n/tr.json
index cca2a506..672f92cb 100644
--- a/AbuseFilter/i18n/tr.json
+++ b/AbuseFilter/i18n/tr.json
@@ -14,14 +14,19 @@
"Sayginer",
"Mavrikant",
"Ömer Berkay",
- "Matma Rex"
+ "Matma Rex",
+ "Diyapazon",
+ "Hedda",
+ "Rapsar",
+ "TmY e12",
+ "By erdo can"
]
},
"abusefilter-desc": "Değişikliklere otomatik bulucu yöntemler uygular",
"abusefilter": "Kötüye kullanım süzgeci yapılandırması",
"abuselog": "Kötüye kullanım günlüğü",
"abusefilter-intro": "Kötüye Kullanım Süzgeci yönetim arayüzüne hoş geldiniz.\nKötüye Kullanım Süzgeci, tüm işlemlere otomatik bulucu yöntemler uygulayan otomatik bir yazılım mekanizmasıdır.\nBu arayüz, tanımlı süzgeçlerin listesini gösterir ve değiştirilmelerine olanak sağlar.",
- "abusefilter-mustbeeditor": "Güvenlik nedeniyle, bu arayüzü sadece suistimal filtrelerini değiştirme yetkisine sahip kullanıcılar kullanabilir.",
+ "abusefilter-mustviewprivateoredit": "Güvenlik nedenleriyle, yalnızca özel kötüye kullanım filtrelerini görüntüleme veya filtreleri değiştirme hakkı olan kullanıcılar bu arayüzü kullanabilir.",
"abusefilter-warning": "'''Uyarı''': Bu eylem otomatikman zararlı olarak tanımlanmıştır.\nYapıcı olmayan değişiklikler hızlıca geri döndürülecektir,\nve çok kötü ya da tekrar eden yapıcı olmayan değişiklikler hesabınızın ya da IP adresinizin engellenmesiyle sonuçlanacaktır.\nEğer bu değişikliğin yapıcı olduğuna inanıyorsanız, onaylamak için tekrar Gönder'e basabilirsiniz.\nEyleminizin eşleştiği suistimal kuralının kısa bir açıklaması: $1",
"abusefilter-disallowed": "Otomatik olarak bu işlemin zararlı olduğu belirlendi ve izin verilmedi.\nİşleminizin yapıcı olduğunu düşünüyorsanız, lütfen ne yapmaya çalıştığınız konusunda bir hizmetliye bilgi verin.\nİşleminizin eşleştiği kötüye kullanım kuralının kısa bir açıklaması: $1",
"abusefilter-blocked-display": "Otomatik olarak bu işlemin zararlı olduğu belirlendi ve işlemi gerçekleştirmeniz önlendi.\nEk olarak, {{SITENAME}} için bir koruma olarak kullanıcı hesabınız ve tüm ilişkili IP adresleriniz de engellendi.\nBu bir hata sonucu meydana geldiyse, lütfen bir hizmetliyle irtibata geçin.\nİşleminizin eşleştiği kötüye kullanım kuralının kısa bir açıklaması: $1",
@@ -36,6 +41,7 @@
"right-abusefilter-log": "Kötüye kullanım günlüğünü gör",
"right-abusefilter-log-detail": "Ayrıntılı suistimal girdilerini gör",
"right-abusefilter-private": "Kötüye kullanım günlüğündeki özel verileri gör",
+ "right-abusefilter-private-log": "AbuseFilter özel ayrıntıları erişim günlüğünü görüntüle",
"right-abusefilter-modify-restricted": "Kısıtlı eylemler içeren suistimal filtrelerini değiştir",
"right-abusefilter-revert": "Verilen bir suistimal filtresi tarafından yapılan tüm değişiklikleri geri al",
"right-abusefilter-view-private": "Özel olarak işaretlenmiş suistimal filtrelerini gör",
@@ -48,9 +54,11 @@
"action-abusefilter-log": "kötüye kullanım günlüğünü görmek",
"action-abusefilter-log-detail": "ayrıntılı kötüye kullanım günlüğünü girdilerini görmek",
"action-abusefilter-private": "kötüye kullanım günlüğündeki özel verileri görmek",
+ "action-abusefilter-private-log": "AbuseFilter özel ayrıntıları erişim günlüğünü gör",
"action-abusefilter-modify-restricted": "kısıtlanmış işlemlere sahip kötüye kullanım süzgeçlerini değiştirmek",
"action-abusefilter-revert": "belirli bir kötüye kullanım süzgecindeki tüm değişiklikleri geri almak",
"action-abusefilter-view-private": "özel olarak işaretlenmiş kötüye kullanım süzgeçlerini görmeye",
+ "action-abusefilter-log-private": "Özel olarak işaretlenmiş kötüye kullanım süzgeci günlüklerini gör",
"abusefilter-log": "Kötüye kullanım süzgeci günlüğü",
"abusefilter-log-summary": "Bu günlük, süzgeçlere yakalanan tüm eylemlerin bir listesini gösterir.",
"abusefilter-log-search": "Kötüye kullanım günlüğünde ara",
@@ -58,6 +66,15 @@
"abusefilter-log-search-filter": "Süzgeç kimlikleri (dikey çizgilerle ayrılmıştır):",
"abusefilter-log-search-title": "Başlık:",
"abusefilter-log-search-wiki": "Viki:",
+ "abusefilter-log-search-impact-all": "Tüm eylemler",
+ "abusefilter-log-search-impact-saved": "Yalnızca kaydedilen değişiklikler",
+ "abusefilter-log-search-impact-not-saved": "Kaydedilmiş değişiklikler olmadan",
+ "abusefilter-log-search-entries-all": "Tüm girdiler",
+ "abusefilter-log-search-entries-hidden": "Sadece gizli girdiler",
+ "abusefilter-log-search-entries-visible": "Sadece görünen girdiler",
+ "abusefilter-log-search-action-label": "Tetikleme eylemi:",
+ "abusefilter-log-search-action-other": "Diğer",
+ "abusefilter-log-search-action-any": "Hiç",
"abusefilter-log-search-submit": "Ara",
"abusefilter-log-entry": "$1: $2 bir suistimal filtresini tetikledi, $4 sayfasında \"$3\" eylemi yapılıyor.\nYapılan eylemler: $5;\nFiltre açıklaması: $6",
"abusefilter-log-detailedentry-meta": "$1: $2, tetiklediği süzgeç: $3, $5 sayfasında \"$4\" eylemini yaptı.\nYapılan eylemler: $6;\nSüzgeç açıklaması: $7 ($8)",
@@ -70,27 +87,31 @@
"abusefilter-log-details-var": "Değişken",
"abusefilter-log-details-val": "Değer",
"abusefilter-log-details-vars": "Eylem parametreleri",
- "abusefilter-log-details-private": "Özel veri",
+ "abusefilter-log-details-private": "Özel günlük detayları",
"abusefilter-log-details-ip": "Kaynak IP adresi",
+ "abusefilter-log-details-checkuser": "Denetçi",
"abusefilter-log-noactions": "yok",
"abusefilter-log-details-diff": "Düzenleme yapılan değişiklikler",
"abusefilter-log-linkoncontribs": "kötüye kullanım günlüğü",
"abusefilter-log-linkoncontribs-text": "{{GENDER:$1|Bu kullanıcı}} için kötüye kullanım günlüğü",
+ "abusefilter-log-linkonhistory": "istismar günlüğünü görüntüle",
+ "abusefilter-log-linkonhistory-text": "Bu sayfa için kötüye kullanım günlüğünü görüntüle",
"abusefilter-log-hidden": "(gizli girdi)",
"abusefilter-log-hidden-implicit": "(gizlendi çünkü revizyon silindi)",
"abusefilter-log-cannot-see-details": "Bu giriş detaylarını görebilmek için izniniz yok.",
+ "abusefilter-log-cannot-see-private-details": "Bu maddenin özel ayrıntılarını görme izniniz yok.",
"abusefilter-log-details-hidden": "Bu girdinin ayrıntılarını göremezsiniz çünkü herkese açık değil",
+ "abusefilter-log-details-hidden-implicit": "İlgili revizyonun silinmesi nedeniyle ayrıntılarını maalesef görüntüleyemezsiniz.",
"abusefilter-log-hide-legend": "Günlük girişini gizle",
"abusefilter-log-hide-id": "Günlük girdi numarası:",
"abusefilter-log-hide-hidden": "Bu girdiyi herkesin görüntülemesini engelle",
"abusefilter-log-hide-reason": "Sebep:",
"abusefilter-log-hide-forbidden": "Kötüye kullanım günlüğü girdilerini gizleme yetkiniz yok.",
- "abusefilter-logentry-suppress": "\"[[$1]]\" gizledi",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\" gizlilik kaldırıldı",
"logentry-abusefilter-hit": "$1, $3 sayfasında \"$5\" eylemini yaparak, $4 süzgecini tetikledi. Alınan eylemler: $6 ($7)",
"abusefilter-management": "Kötüye kullanım süzgeci yönetimi",
"abusefilter-list": "Tüm süzgeçler",
"abusefilter-list-id": "Süzgeç kimliği",
+ "abusefilter-list-pattern": "Desen",
"abusefilter-list-status": "Durum",
"abusefilter-list-public": "Genel açıklama",
"abusefilter-list-consequences": "Sonuçlar",
@@ -115,12 +136,19 @@
"abusefilter-list-options-deleted-only": "Sadece silinmiş süzgeçleri göster",
"abusefilter-list-options-deleted-hide": "Silinmiş süzgeçleri gizle",
"abusefilter-list-options-deleted-show": "Silinmiş süzgeçleri içer",
- "abusefilter-list-options-scope": "Süzgeçleri şuradan göster:",
- "abusefilter-list-options-scope-local": "Yerel viki",
- "abusefilter-list-options-scope-global": "Genel kurallar",
+ "abusefilter-list-options-scope": "Süzgeçleri göster:",
+ "abusefilter-list-options-scope-local": "Sadece yerel kurallar",
+ "abusefilter-list-options-scope-global": "Sadece genel kurallar",
"abusefilter-list-options-scope-all": "Yerel ve genel kurallar",
- "abusefilter-list-options-disabled": "Devre dışı süzgeçler:",
+ "abusefilter-list-options-further-options": "Diğer seçenekler:",
"abusefilter-list-options-hidedisabled": "Devre dışı süzgeçleri gizle",
+ "abusefilter-list-options-hideprivate": "Özel filtreleri gizle",
+ "abusefilter-list-options-searchfield": "Kurallarda ara:",
+ "abusefilter-list-options-searchpattern": "Bir desen gir",
+ "abusefilter-list-options-searchoptions": "Arama modu:",
+ "abusefilter-list-options-search-like": "Düz sorgu",
+ "abusefilter-list-options-search-rlike": "Düzenli sorgu",
+ "abusefilter-list-options-search-irlike": "Büyük-küçük harfe duyarlı sorgu",
"abusefilter-list-options-submit": "Güncelle",
"abusefilter-tools-text": "Burada suistimal filtrelerini formüle ederken ve hata ayıklarken yararlı olabilecek bazı araçlar bulunmaktadır.",
"abusefilter-tools-expr": "İfade testi",
@@ -139,11 +167,12 @@
"abusefilter-edit-status-label": "İstatistikler:",
"abusefilter-edit-status": "Son $1 {{PLURAL:$1|eylemde|eylemde}}, $2 eylem ($3%) oranında bu filtreyle eşleşti.",
"abusefilter-edit-status-profile": "Son $1 {{PLURAL:$1|eylemde|eylemde}}, $2 eylem ($3%) oranında bu filtreyle eşleşti.\nOrtalama çalışma süresi $4ms olan bu süzgeç koşul sınırının $5 koşulunu tüketiyor.",
- "abusefilter-edit-throttled": "'''Uyarı''': Bu filtre bir güvenlik tedbiri olarak otomatikman devre dışı bırakıldı.\nEylemlerin %$1'inden fazla eşleşme sınırına erişti.",
"abusefilter-edit-new": "Yeni süzgeç",
"abusefilter-edit-save": "Süzgeci kaydet",
"abusefilter-edit-id": "Süzgeç kimliği:",
+ "abusefilter-edit-switch-editor": "Düzenleme aracını değiştir",
"abusefilter-edit-description": "Açıklama:\n:''(umumi olarak görünebilir)''",
+ "abusefilter-edit-field-description": "açıklama",
"abusefilter-edit-group": "Filtre grubu:",
"abusefilter-edit-flags": "İşaretler:",
"abusefilter-edit-enabled": "Bu süzgeci etkinleştir",
@@ -151,11 +180,12 @@
"abusefilter-edit-hidden": "Bu süzgecin ayrıntılarını genel görünümden gizle",
"abusefilter-edit-global": "Küresel filtre",
"abusefilter-edit-rules": "Şartlar:",
+ "abusefilter-edit-field-conditions": "şartlar",
"abusefilter-edit-notes": "Notlar:",
"abusefilter-edit-lastmod": "Süzgeci son değiştiren:",
"abusefilter-edit-lastmod-text": "$1 tarihinde $2 tarafından",
"abusefilter-edit-hitcount": "Süzgeç eşleşmeleri:",
- "abusefilter-edit-consequences": "Eşleştiğinde eylemler yapılır",
+ "abusefilter-edit-consequences": "Eşleştiğinde yapılacaklar",
"abusefilter-edit-action-warn": "Kullanıcıya bir uyarı verdikten sonra bu eylemleri tetikle",
"abusefilter-edit-action-disallow": "Kullanıcının, sorudaki eylemi yapmasını engelle",
"abusefilter-edit-action-blockautopromote": "Kullanıcının otomatik onaylı durumunu iptal et",
@@ -166,15 +196,22 @@
"abusefilter-edit-action-tag": "İleride gözden geçirme için değişikliği etiketle.",
"abusefilter-edit-throttle-count": "İzin verilen eylem sayısı:",
"abusefilter-edit-throttle-period": "Zaman periyodu:",
- "abusefilter-edit-throttle-seconds": "$1 saniye",
"abusefilter-edit-throttle-groups": "Grup kısma yapan:\n:''(her satıra bir tane, virgülle birleştirin)''",
+ "abusefilter-edit-throttle-ip": "IP adresi",
+ "abusefilter-edit-throttle-user": "Kullanıcı hesabı",
+ "abusefilter-edit-throttle-editcount": "Değişiklik sayısı",
+ "abusefilter-edit-throttle-site": "Tüm site",
+ "abusefilter-edit-throttle-page": "Sayfa",
"abusefilter-edit-warn-message": "Uyarı için kullanılan sistem mesajı:",
"abusefilter-edit-warn-other": "Diğer mesaj",
"abusefilter-edit-warn-other-label": "Diğer mesajın sayfa adı:\n:''(MediaWiki ön eki olmadan)''",
"abusefilter-edit-warn-actions": "Eylemler:",
- "abusefilter-edit-warn-preview": "Seçili mesajı önizle",
+ "abusefilter-edit-warn-preview": "Seçilen mesajın önizlemesini göster/gizle",
"abusefilter-edit-warn-edit": "Seçili mesajı oluştur/değiştir",
"abusefilter-edit-tag-tag": "Uygulanacak etiketler (her satıra bir tane):",
+ "abusefilter-block-anon": "Anonim kullanıcıları engelle",
+ "abusefilter-block-user": "kayıtlı kullanıcıları engelle",
+ "abusefilter-block-talk": "mesaj sayfası engellendi",
"abusefilter-edit-denied": "Bu süzgecin ayrıntılarını göremeyebilirsiniz, çünkü umumi görünümden gizlenmiş.",
"abusefilter-edit-main": "Süzgeç değişkenleri",
"abusefilter-edit-done-subtitle": "Süzgeç değiştirildi",
@@ -252,19 +289,18 @@
"abusefilter-edit-builder-vars-oldsize": "Eski sayfa boyutu",
"abusefilter-edit-builder-vars-removedlines": "Değişiklikte çıkarılan satırlar",
"abusefilter-edit-builder-vars-summary": "Değişiklik özeti/sebebi",
- "abusefilter-edit-builder-vars-article-id": "Sayfa IDsi",
- "abusefilter-edit-builder-vars-article-ns": "Sayfa ad alanı",
- "abusefilter-edit-builder-vars-article-text": "Sayfa başlığı (ad alanı olmadan)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Tam sayfa başlığı",
- "abusefilter-edit-builder-vars-article-views": "Sayfa görüntülenmesi",
+ "abusefilter-edit-builder-vars-page-id": "Sayfa IDsi",
+ "abusefilter-edit-builder-vars-page-ns": "Sayfa ad alanı",
+ "abusefilter-edit-builder-vars-page-title": "Sayfa başlığı (ad alanı olmadan)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Tam sayfa başlığı",
"abusefilter-edit-builder-vars-movedfrom-id": "Kaynak taşıma sayfasının sayfa IDsi",
"abusefilter-edit-builder-vars-movedfrom-ns": "Kaynak taşıma sayfasının ad alanı",
- "abusefilter-edit-builder-vars-movedfrom-text": "Kaynak taşıma sayfası başlığı",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Kaynak taşıma sayfasının tam başlığı",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Kaynak taşıma sayfası başlığı",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Kaynak taşıma sayfasının tam başlığı",
"abusefilter-edit-builder-vars-movedto-id": "Hedef taşıma sayfasının sayfa IDsi",
"abusefilter-edit-builder-vars-movedto-ns": "Hedef taşıma sayfasının ad alanı",
- "abusefilter-edit-builder-vars-movedto-text": "Hedef taşıma sayfasının başlığı",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Hedef taşıma sayfasının tam başlığı",
+ "abusefilter-edit-builder-vars-movedto-title": "Hedef taşıma sayfasının başlığı",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Hedef taşıma sayfasının tam başlığı",
"abusefilter-edit-builder-vars-user-editcount": "Kullanıcının değişiklik sayısı",
"abusefilter-edit-builder-vars-user-age": "Kullanıcı hesabının yaşı",
"abusefilter-edit-builder-vars-user-name": "Kullanıcı hesabının adı",
@@ -326,7 +362,7 @@
"abusefilter-exception-regexfailure": "\"$3\" düzenli ifadesinin $1 karakterinde hata: \"$2\"",
"abusefilter-exception-overridebuiltin": "$1 karakterinde \"$2\" yerleşik değişkeninin kuraldışı geçersiz kılınması.",
"abusefilter-exception-outofbounds": "$1 karakterindeki mevcut olmayan liste öğesi $2 (liste boyutu = $3) isteniyor.",
- "abusefilter-exception-notlist": "$1 karakterinde dizi olmayan dizi öğesi isteniyor.",
+ "abusefilter-exception-notarray": "$1 karakterinde dizi olmayan dizi öğesi isteniyor.",
"abusefilter-action-tag": "Etiketle",
"abusefilter-action-throttle": "Kısıtla",
"abusefilter-action-warn": "Uyar",
@@ -355,6 +391,7 @@
"abusefilter-test-submit": "Deneme",
"abusefilter-test-load": "Yükle",
"abusefilter-test-user": "Kullanıcının değişiklikleri:",
+ "abusefilter-test-nobots": "Bot değişikliklerini gizle",
"abusefilter-test-period-start": "Sonradan yapılan değişiklikler:",
"abusefilter-test-period-end": "Önceden yapılan değişiklikler:",
"abusefilter-test-page": "Sayfaya yapılan değişiklikler:",
@@ -386,7 +423,6 @@
"abusefilter-topnav-import": "Süzgeci içe aktar",
"abusefilter-log-name": "Kötüye kullanım süzgeci günlüğü",
"abusefilter-log-header": "Bu günlük filtrelere yapılan değişikliklerin bir özetini gösterir.\nTam ayrıntılar için, son filtre değişiklikleri [[Special:AbuseFilter/history|listesine]] bakın.",
- "abusefilter-log-entry-modify": "$1 numaralı süzgeci değiştirdi ($2)",
"abusefilter-log-noresults": "Sonuç yok",
"abusefilter-diff-title": "Sürümler arasındaki farklar",
"abusefilter-diff-item": "Öğe",
diff --git a/AbuseFilter/i18n/tt-cyrl.json b/AbuseFilter/i18n/tt-cyrl.json
index ebd33d63..1e9dfcae 100644
--- a/AbuseFilter/i18n/tt-cyrl.json
+++ b/AbuseFilter/i18n/tt-cyrl.json
@@ -11,6 +11,7 @@
"abusefilter-log": "Яман эшләр көндәлеге",
"abusefilter-log-linkoncontribs": "яман эшләр көндәлеге",
"abusefilter-status-global": "Глобаль",
+ "abusefilter-list-options-submit": "Яңарту",
"abusefilter-topnav-log": "Яман эшләр көндәлеге",
"abusefilter-log-name": "Яман эшләр көндәлеге"
}
diff --git a/AbuseFilter/i18n/tzm.json b/AbuseFilter/i18n/tzm.json
index 71ad25ec..50270be8 100644
--- a/AbuseFilter/i18n/tzm.json
+++ b/AbuseFilter/i18n/tzm.json
@@ -6,14 +6,13 @@
},
"abusefilter-log-search-title": "ⴰⵣⵡⵉⵍ:",
"abusefilter-edit-flags": "ⴰⵙⵏⵖⵎⵙ:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|ⵜⴰⵙⵏⴰⵜ|ⵜⵉⵙⵏⴰⵜⵉⵏ}}",
"abusefilter-edit-warn-other": "ⵜⴰⴱⵔⴰⵜ ⵏⵏⵉⴹⵏ",
"abusefilter-edit-history": "ⴰⵎⵣⵔⵓⵢ:",
"abusefilter-edit-tools": "ⵉⵎⴰⵙⵙⵏ:",
"abusefilter-edit-builder-op-arithmetic-modulo": "Modulo (%)",
"abusefilter-edit-builder-op-bool-and": "ⴷ (&)",
"abusefilter-edit-builder-op-bool-or": "ⵏⵖ (|)",
- "abusefilter-edit-builder-vars-article-id": "ⵓⵟⵟⵓⵏ ⵏ ⵜⴰⵙⵏⴰ (ID)",
+ "abusefilter-edit-builder-vars-page-id": "ⵓⵟⵟⵓⵏ ⵏ ⵜⴰⵙⵏⴰ (ID)",
"abusefilter-history-timestamp": "ⴰⴽⵓⴷ",
"abusefilter-history-diff": "ⵉⴱⴷⴷⴻⵍⵏ",
"abusefilter-action-block": "ⴰⵙⴳⴷⵍ",
diff --git a/AbuseFilter/i18n/udm.json b/AbuseFilter/i18n/udm.json
index 64592ddd..580bbbf6 100644
--- a/AbuseFilter/i18n/udm.json
+++ b/AbuseFilter/i18n/udm.json
@@ -15,6 +15,5 @@
"abusefilter-unhidden": "Котькинлы адӟиськись",
"abusefilter-edit-denied": "Тӥ уд быгатӥське тупен информациез учкыны та фильтр сярысь, малы ке шуоно со ватэмын огшоры викиавторъёслэсь.",
"abusefilter-edit-notallowed": "Тӥ уд лэзиськиське умойтэм ужъёсыз фильтръёсыз кылдытыны яке тупатъяны",
- "abusefilter-edit-notallowed-global": "Тӥ уд лэзиськиське умойтэм ужъёсыз глобальной фильтръёсыз кылдытыны яке тупатъяны",
- "abusefilter-log-entry-modify": "воштӥз $1 ($2)"
+ "abusefilter-edit-notallowed-global": "Тӥ уд лэзиськиське умойтэм ужъёсыз глобальной фильтръёсыз кылдытыны яке тупатъяны"
}
diff --git a/AbuseFilter/i18n/ug-arab.json b/AbuseFilter/i18n/ug-arab.json
index f038e51b..820c5417 100644
--- a/AbuseFilter/i18n/ug-arab.json
+++ b/AbuseFilter/i18n/ug-arab.json
@@ -11,7 +11,6 @@
"abusefilter": "سۈيىئىستىمال سۈزگۈچ سەپلىمىسى",
"abuselog": "سۈيىئىستىمال خاتىرىسى",
"abusefilter-intro": "سۈيىئىستىمال سۈزگۈچ باشقۇرۇش ئارا يۈزىگە خۇش كەلدىڭىز.\nسۈيىئىستىمال سۈزگۈچى يېقىنقى بارلىق تەھرىر قىلمىشلىغا ئۆزلۈكىدىن ھۆكۈم قىلىدىغان يۇمشاق دېتال سىستېمىسىدۇر.\nبۇ ئارايۈزدە نۆۋەتتىكى ھەممە سۈزگۈچلەر تىزىملىكى بار، باشقۇرغۇچىلارنىڭ بۇ سۈزگۈچلەرنى ئۆزگەرتىشىگە يول قويۇلىدۇ.",
- "abusefilter-mustbeeditor": "بىخەتەرلىكنى ئويلۇشۇپ، بۇ ئارايۈزنى سۈيىئىستىمال سۈزگۈچنى تەھرىرلىيەلەيدىغان ئىشلەتكۈچىلەرلا ئىشلىتەلەيدۇ.",
"abusefilter-warning": "'''ئاگاھلاندۇرۇش''': قىلمىشىڭىزنىڭ خەتەرلىك ئىكەنلىكى ئاپتوماتىك بايقالدى.\nئەھمىيەتسىز تەھرىرلەش تېز سۈرئەتتە ئەسلىگە قايتۇرۇلىدۇ،\nچەكتىن ئاشقان ياكى تەكرارلانغان ئەھمىيەتسىز تەھرىرلەش ھېساباتىڭىز ياكى IP ئادرېسىڭىزنىڭ چەكلىنىشىنى كەلتۈرۈپ چىقىرىدۇ.\nئەگەر شۇ قېتىملىق تەھرىرلەشنىڭ ئەھمىيىتى بار دەپ قارىسىڭىز، سىز يەنە قايتا چېكىپ تاپشۇرۇشنى جەزملىسىڭىز بولىدۇ.\nبۇ قېتىملىق تەھرىرلەش قىلمىشىڭىزغا ماس كەلگەن سۈزگۈچ قائىدىسىنىڭ چۈشەندۈرۈشى تۆۋەندىكىچە: $1",
"abusefilter-disallowed": "قىلمىشىڭىزنىڭ خەتەرلىك ئىكەنلىكى ئاپتوماتىك بايقىلىپ چەكلەندى. \nئەگەر شۇ قېتىملىق تەھرىرلەشنىڭ ئەھمىيىتى بار دەپ قارىسىڭىز، باشقۇرغۇچى بىلەن ئالاقىلىشىپ، سىز قىلماقچى بولغان ئىشنى ئۇلارغا ئېيتىڭ. \nبۇ قېتىملىق تەھرىرلەش قىلمىشىڭىزغا ماس كەلگەن سۈزگۈچ قائىدىسىنىڭ چۈشەندۈرۈشى تۆۋەندىكىچە: $1",
"abusefilter-blocked-display": "قىلمىشىڭىزنىڭ خەتەرلىك ئىكەنلىكى ئاپتوماتىك بايقىلىپ، داۋاملاشتۇرۇش توسۇلدى. ئۇندىن باشقا {{SITENAME}} نى قوغداش ئۈچۈن، ھېساباتىڭىز ۋە ئۇنىڭغا مۇناسىۋەتلىك IP ئادرېسلارنىڭ ھەممىسىنىڭ تەھرىرلىشى چەكلەندى.\nئەگەر شۇ قېتىملىق تەھرىرلەشنى سىستېما خاتا پەرەز قىلغان دەپ قارىسىڭىز، باشقۇرغۇچى بىلەن ئالاقىلىشىڭ.\nبۇ قېتىملىق تەھرىرلەش قىلمىشىڭىزغا ماس كەلگەن سۈزگۈچ قائىدىسىنىڭ چۈشەندۈرۈشى تۆۋەندىكىچە: $1",
@@ -74,8 +73,6 @@
"abusefilter-log-hide-hidden": "بۇ تۈرنى ئاممىۋى كۆرۈنۈشتىن يوشۇر",
"abusefilter-log-hide-reason": "سەۋەب:",
"abusefilter-log-hide-forbidden": "سۈيىئىستىمال خاتىرە تۈرىنى يوشۇرۇش ھوقۇقىڭىز يوق.",
- "abusefilter-logentry-suppress": "\"[[$1]]\" يوشۇرۇش",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\" يوشۇرما",
"logentry-abusefilter-hit": "$1 بولسا $4 غا تەسىر قىلىپ $3 دا \"$5\" مەشغۇلاتنى ئېلىپ باردى، مەشغۇلاتى: $6 ($7)",
"abusefilter-management": "سۈيىئىستىمال سۈزگۈچ باشقۇرۇش",
"abusefilter-list": "ھەممە سۈزگۈچلەر",
@@ -107,7 +104,6 @@
"abusefilter-list-options-scope": "سۈزگۈچ كۆرسىتىش ئورنى:",
"abusefilter-list-options-scope-local": "يەرلىك ۋىكى",
"abusefilter-list-options-scope-global": "ئومۇمىي قائىدە",
- "abusefilter-list-options-disabled": "چەكلەنگەن سۈزگۈچلەر:",
"abusefilter-list-options-hidedisabled": "چەكلەنگەن سۈزگۈچلەرنى يوشۇر",
"abusefilter-list-options-submit": "يېڭىلا",
"abusefilter-tools-text": "بۇلار سۈيىئىستىمال سۈزگۈچلەرنى ياساش ۋە سىناشتا لازىملىق بولغان قورللاردۇر.",
@@ -126,7 +122,6 @@
"abusefilter-edit-status-label": "ستاتىستىكا:",
"abusefilter-edit-status": "ئاخىرقى {{PLURAL:$1|مەشغۇلات}}تا $2 ($3%) قېتىملىق تەھرىرلەش بۇ سۈزگۈچنى قوزغاتتى. ئۇنىڭ ئوتتۇرىچە ئىجرا قىلىنىش ۋاقتى $4 ms (مىللىسېكۇنت)، {{PLURAL:$5|چەكلىمە}}نى سەرپ قىلدى.",
"abusefilter-edit-status-profile": "ئاخىرقى {{PLURAL:$1|مەشغۇلات}}تا $2 ($3%) قېتىملىق تەھرىرلەش بۇ سۈزگۈچنى قوزغاتتى. ئۇنىڭ ئوتتۇرىچە ئىجرا قىلىنىش ۋاقتى $4 ms (مىللىسېكۇنت)، {{PLURAL:$5|چەكلىمە}}نى سەرپ قىلدى.",
- "abusefilter-edit-throttled": "'''ئاگاھلاندۇرۇش''': بۇ سۈزگۈچ بىخەتەرلىك سەۋەبىدىن ئۆزلۈكىدىن توختىتىلدى.\n$1 ماس كەلگەن مەشغۇلات چېكىگە يەتتى.",
"abusefilter-edit-new": "يېڭى سۈزگۈچ",
"abusefilter-edit-save": "سۈزگۈچ ساقلا",
"abusefilter-edit-id": "سۈزگۈچ IDسى:",
@@ -153,7 +148,6 @@
"abusefilter-edit-action-tag": "تېخىمۇ ئىلگىرىلەپ تەكشۈرۈش ئۈچۈن بۇ تەھرىرلەشكە بەلگە سال",
"abusefilter-edit-throttle-count": "يول قويۇلىدىغان مەشغۇلات قېتىم سانى:",
"abusefilter-edit-throttle-period": "ۋاقىت ئۇزۇنلۇقى:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|سېكۇنت|سېكۇنت}}",
"abusefilter-edit-throttle-groups": "چەكلىنىدىغان گۇرۇپپا:\n''(ھەر قۇرغا بىردىن، ئىنگلىزچە پەش بىلەن ئۇلىنىدۇ)'':",
"abusefilter-edit-warn-message": "ئاگاھلاندۇرۇشقا ئىشلىتىلىدىغان سىستېما ئۇچۇرى:",
"abusefilter-edit-warn-other": "باشقا ئۇچۇر",
@@ -238,19 +232,18 @@
"abusefilter-edit-builder-vars-oldsize": "كونا بەت چوڭلۇقى",
"abusefilter-edit-builder-vars-removedlines": "تەھرىرلەشتە چىقىرىۋەتكەن قۇرلار",
"abusefilter-edit-builder-vars-summary": "تەھرىر ئۈزۈندىسى/سەۋەب",
- "abusefilter-edit-builder-vars-article-id": "بەت نومۇرى",
- "abusefilter-edit-builder-vars-article-ns": "بەت ئات بوشلۇقى",
- "abusefilter-edit-builder-vars-article-text": "بەت ماۋزۇسى (ئات بوشلۇقىنى ئۆز ئىچىگە ئالمايدۇ)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "تولۇق بەت ماۋزۇسى",
- "abusefilter-edit-builder-vars-article-views": "بەتنىڭ كۆرۈلگەن قېتىم سانى",
+ "abusefilter-edit-builder-vars-page-id": "بەت نومۇرى",
+ "abusefilter-edit-builder-vars-page-ns": "بەت ئات بوشلۇقى",
+ "abusefilter-edit-builder-vars-page-title": "بەت ماۋزۇسى (ئات بوشلۇقىنى ئۆز ئىچىگە ئالمايدۇ)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "تولۇق بەت ماۋزۇسى",
"abusefilter-edit-builder-vars-movedfrom-id": "يۆتكىگەن ئەسلى بەتنىڭ بەت نومۇرى",
"abusefilter-edit-builder-vars-movedfrom-ns": "يۆتكىگەن ئەسلى بەتنىڭ ئات بوشلۇقى",
- "abusefilter-edit-builder-vars-movedfrom-text": "يۆتكىگەن ئەسلى بەتنىڭ ماۋزۇسى",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "يۆتكىگەن ئەسلى بەتنىڭ تولۇق ماۋزۇسى",
+ "abusefilter-edit-builder-vars-movedfrom-title": "يۆتكىگەن ئەسلى بەتنىڭ ماۋزۇسى",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "يۆتكىگەن ئەسلى بەتنىڭ تولۇق ماۋزۇسى",
"abusefilter-edit-builder-vars-movedto-id": "يۆتكىگەن نىشان بەتنىڭ بەت نومۇرى",
"abusefilter-edit-builder-vars-movedto-ns": "يۆتكىگەن نىشان بەتنىڭ ئات بوشلۇقى",
- "abusefilter-edit-builder-vars-movedto-text": "يۆتكىگەن نىشان بەتنىڭ ماۋزۇسى",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "يۆتكىگەن نىشان بەتنىڭ تولۇق ماۋزۇسى",
+ "abusefilter-edit-builder-vars-movedto-title": "يۆتكىگەن نىشان بەتنىڭ ماۋزۇسى",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "يۆتكىگەن نىشان بەتنىڭ تولۇق ماۋزۇسى",
"abusefilter-edit-builder-vars-user-editcount": "ئىشلەتكۈچىنىڭ تەھرىرلىگەن سانى",
"abusefilter-edit-builder-vars-user-age": "ئىشلەتكۈچى ھېساتىنىڭ ياشى",
"abusefilter-edit-builder-vars-user-name": "ئىشلەتكۈچى ھېساتىنىڭ ئاتى",
@@ -309,7 +302,7 @@
"abusefilter-exception-regexfailure": "$1 ھەرپنىڭ \"$3\" مۇنتىزىم ئىپادىسىدە خاتالىق بار: \"$2\"",
"abusefilter-exception-overridebuiltin": "$1 ھەرپتىكى قانۇنسىز قاپلايدىغان ئىچكى ئۆزگەرگۈچى \"$2\".",
"abusefilter-exception-outofbounds": "$1 ھەرپتە مەۋجۇت بولمىغان تىزىم تۈرى $2 (تىزىم ئۇزۇنلۇقى = $3) نى ئىلتىماس قىلدى",
- "abusefilter-exception-notlist": "$1 ھەرپتىكى سانلار قاتارى ئەمەسكە سانلار قاتارى تۈرىنى ئىلتىماس قىلدى.",
+ "abusefilter-exception-notarray": "$1 ھەرپتىكى سانلار قاتارى ئەمەسكە سانلار قاتارى تۈرىنى ئىلتىماس قىلدى.",
"abusefilter-action-tag": "خەتكۈش",
"abusefilter-action-throttle": "ئېقىم تەڭشەش",
"abusefilter-action-warn": "ئاگاھلاندۇرۇش",
diff --git a/AbuseFilter/i18n/uk.json b/AbuseFilter/i18n/uk.json
index 688b9c70..956518fb 100644
--- a/AbuseFilter/i18n/uk.json
+++ b/AbuseFilter/i18n/uk.json
@@ -19,14 +19,16 @@
"DonDrakon",
"Piramidion",
"Matma Rex",
- "Максим Підліснюк"
+ "Максим Підліснюк",
+ "Avatar6",
+ "Vlad5250"
]
},
"abusefilter-desc": "Застосовує до редагувань автоматичні евристики.",
"abusefilter": "Налаштування фільтра редагувань",
"abuselog": "Журнал зловживань",
"abusefilter-intro": "Ласкаво просимо на сторінку керування фільтром редагувань.\nФільтр редагувань — це автоматизований механізм застосування автоматичних евристик до дій користувачів.\nТут наведений список усіх установлених фільтрів, надається можливість їх зміни.",
- "abusefilter-mustbeeditor": "З причин безпеки, тільки користувачі з правом зміни фільтрів редагувань можуть використовувати цей інтерфейс.",
+ "abusefilter-mustviewprivateoredit": "З причин безпеки, цей інтерфейс можуть використовувати тільки користувачі з правом переглядати приватні фільтри редагувань чи редагувати фільтри.",
"abusefilter-warning": "'''Увага:''' ця дія була автоматично визначена як шкідлива.\nНеконструктивні дії будуть швидко скасовані,\nгрубі або неодноразові неконструктивні редагування призведуть до блокування вашого облікового запису або IP-адреси.\nЯкщо Ви вважаєте, що це редагування конструктивне, то Ви можете ще раз натиснути «Зберегти сторінку», щоб підтвердити редагування.\nКороткий опис зловживання, на яке схожа Ваша дія: $1",
"abusefilter-disallowed": "Ця дія автоматично визначена як шкідлива, і тому заборонена.\nЯкщо Ви вважаєте, що вона конструктивна, будь ласка, зверніться до адміністратора і розкажіть йому, що Ви хотіли зробити.\nКороткий опис правила, яке порушує Ваша дія: $1",
"abusefilter-blocked-display": "Ця дія була автоматично визначена як шкідлива,\nі тому її виконання заборонене.\nОкрім того, для захисту проекту {{SITENAME}} ваш обліковий запис і пов'язані з ним IP-адреси були заблоковані.\nЯкщо ви вважаєте це помилковим, то зв'яжіться з адміністратором.\nКороткий опис зловживання, яке пов'язане з вашою дією: $1",
@@ -41,6 +43,7 @@
"right-abusefilter-log": "перегляд журналу зловживань",
"right-abusefilter-log-detail": "перегляд детальних записів журналу зловживань",
"right-abusefilter-private": "перегляд приватних даних у журналі зловживань",
+ "right-abusefilter-private-log": "перегляд журналу доступу до приватних деталей фільтрів редагувань",
"right-abusefilter-modify-restricted": "зміна фільтрів з обмежуючими діями",
"right-abusefilter-revert": "відкіт змін, зроблених фільтром редагувань",
"right-abusefilter-view-private": "перегляд приватних фільтрів зловживань",
@@ -53,6 +56,7 @@
"action-abusefilter-log": "переглядати журнал зловживань",
"action-abusefilter-log-detail": "переглядати деталі журналу зловживань",
"action-abusefilter-private": "переглядати особисті дані в журналі зловживань",
+ "action-abusefilter-private-log": "перегляд журналу доступу до приватних деталей фільтрів редагувань",
"action-abusefilter-modify-restricted": "змінювати фільтри редагувань із заборонювальними діями",
"action-abusefilter-revert": "скасовувати всі зміни зазначеного фільтра редагувань",
"action-abusefilter-view-private": "перегляд приватних фільтрів зловживань",
@@ -64,10 +68,19 @@
"abusefilter-log-search-filter": "Ідентифікатори фільтру (відокремлені вертикальними рисками):",
"abusefilter-log-search-title": "Заголовок:",
"abusefilter-log-search-wiki": "Вікі:",
+ "abusefilter-log-search-impact": "Вплив:",
+ "abusefilter-log-search-impact-all": "Усі дії",
+ "abusefilter-log-search-impact-saved": "Лише збережені зміни",
+ "abusefilter-log-search-impact-not-saved": "Без збережених змін",
"abusefilter-log-search-entries-label": "Видимість:",
"abusefilter-log-search-entries-all": "Усі записи",
"abusefilter-log-search-entries-hidden": "Лише приховані записи",
"abusefilter-log-search-entries-visible": "Лише видимі записи",
+ "abusefilter-log-search-action-label": "Запускальна дія:",
+ "abusefilter-log-search-action-other": "Інше",
+ "abusefilter-log-search-action-any": "Будь-що",
+ "abusefilter-log-search-action-taken-label": "Вжиті заходи:",
+ "abusefilter-log-search-action-taken-any": "Будь-які",
"abusefilter-log-search-submit": "Знайти",
"abusefilter-log-entry": "$1: $2 {{GENDER:$8|запустив|запустила}} фільтр редагувань, виконуючи «$3» на сторінці $4.\nУжиті заходи: $5.\nОпис фільтру: $6",
"abusefilter-log-entry-withdiff": "$1: $2 {{GENDER:$8|запустив|запустила}} фільтр редагувань, виконуючи «$3» на сторінці $4.\nУжиті заходи: $5.\nОпис фільтру: $6 ($7)",
@@ -81,29 +94,42 @@
"abusefilter-log-details-var": "Змінна",
"abusefilter-log-details-val": "Значення",
"abusefilter-log-details-vars": "Параметри дії",
- "abusefilter-log-details-private": "Приватні дані",
+ "abusefilter-log-details-private": "Приватні журнальовані дані",
"abusefilter-log-details-ip": "Вихідна IP-адреса",
+ "abusefilter-log-details-checkuser": "Перевірити користувача",
"abusefilter-log-noactions": "нема",
"abusefilter-log-details-diff": "Зміни, зроблені редагуванням",
"abusefilter-log-linkoncontribs": "журнал зловживань",
"abusefilter-log-linkoncontribs-text": "Журнал зловживань {{GENDER:$1|цього користувача|цієї користувачки}}",
+ "abusefilter-log-linkonhistory": "журнал зловживань",
+ "abusefilter-log-linkonhistory-text": "Показати журнали зловживань для цієї сторінки",
"abusefilter-log-hidden": "(запис приховано)",
"abusefilter-log-hidden-implicit": "(приховано, бо версію було вилучено)",
"abusefilter-log-cannot-see-details": "Ви не маєте дозволу на перегляд відомостей про цей запис.",
+ "abusefilter-log-cannot-see-private-details": "У Вас немає прав на перегляд приватних даних для цього запису.",
"abusefilter-log-nonexistent": "Запис з вказаним ідентифікатором не існує.",
"abusefilter-log-details-hidden": "Ви не можете проглянути докладну інформацію про цей фільтр, оскільки вона прихована від звичайних користувачів.",
+ "abusefilter-log-details-hidden-implicit": "Ви не можете проглянути докладну інформацію про цей запис, оскільки його відповідна версія прихована.",
"abusefilter-log-private-not-included": "Один або декілька ідентифікаторів фільтра, заданих вами, є приватними. Оскільки ви не можете переглядати відомості приватних фільтрів, ці фільтри не будуть використані при пошуку.",
"abusefilter-log-hide-legend": "Сховати запис у журналі",
"abusefilter-log-hide-id": "ID записи журналу:",
"abusefilter-log-hide-hidden": "Приховати цей запис від інших користувачів.",
"abusefilter-log-hide-reason": "Причина:",
+ "abusefilter-log-hide-reason-other": "Інша/додаткова причина:",
"abusefilter-log-hide-forbidden": "У вас немає дозволу, щоб приховувати\nзаписи журналу зловживань.",
- "abusefilter-logentry-suppress": "сховати [[$1]]",
- "abusefilter-logentry-unsuppress": "показати [[$1]]",
+ "abusefilter-log-entry-suppress": "$1 {{GENDER:$2|сховав|сховала}} $3",
+ "abusefilter-log-entry-unsuppress": "$1 {{GENDER:$2|відкрив|відкрила}} $3",
"logentry-abusefilter-hit": "$1 {{#GENDER:$2|викликав|викликала}} спрацьовування $4, виконуючи дію «$5» на $3. Вжиті заходи: $6 ($7)",
+ "log-action-filter-abusefilter": "Тип зміни фільтра:",
+ "log-action-filter-abusefilter-create": "Створення нового фільтра",
+ "log-action-filter-abusefilter-modify": "Зміна фільтра",
+ "log-action-filter-suppress-abuselog": "Приховування журналу зловживань",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|отримав|отримала}} доступ до приватних даних для $3",
+ "abusefilterprivatedetails-log-name": "Журнал доступу до приватних даних фільтра редагувань",
"abusefilter-management": "Управління фільтрами редагувань",
"abusefilter-list": "Усі фільтри",
"abusefilter-list-id": "ІД фільтра",
+ "abusefilter-list-pattern": "Взірець",
"abusefilter-list-status": "Стан",
"abusefilter-list-public": "Публічний опис",
"abusefilter-list-consequences": "Наслідки",
@@ -119,6 +145,7 @@
"abusefilter-enabled": "Увімкнений",
"abusefilter-deleted": "Вилучений",
"abusefilter-disabled": "Вимкнений",
+ "abusefilter-throttled": "обмежено",
"abusefilter-hitcount": "$1 {{PLURAL:$1|спрацьовування|спрацьовування|спрацьовувань}}",
"abusefilter-new": "Створити фільтр",
"abusefilter-return": "Повернутися до керування фільтрами",
@@ -132,8 +159,16 @@
"abusefilter-list-options-scope-local": "Тільки локальні правила",
"abusefilter-list-options-scope-global": "Тільки глобальні правила",
"abusefilter-list-options-scope-all": "Локальні і глобальні правила",
- "abusefilter-list-options-disabled": "Відключені фільтри:",
+ "abusefilter-list-options-further-options": "Інші опції:",
"abusefilter-list-options-hidedisabled": "Приховати відключені фільтри:",
+ "abusefilter-list-options-hideprivate": "Приховати приватні фільтри",
+ "abusefilter-list-options-searchfield": "Знайти серед правил:",
+ "abusefilter-list-options-searchpattern": "Вставити взірець",
+ "abusefilter-list-options-searchoptions": "Режим пошуку:",
+ "abusefilter-list-options-search-like": "Простий запит",
+ "abusefilter-list-options-search-rlike": "Регулярний вираз",
+ "abusefilter-list-options-search-irlike": "Нечутливий до регістру регулярний вираз",
+ "abusefilter-list-regexerror": "Сталася помилка при пошуку: синтаксична помилка регулярного виразу.",
"abusefilter-list-options-submit": "Оновити",
"abusefilter-tools-text": "Тут є деякі засоби, які можуть пригодитися у формулюванні та налагодженні фільтрів редагувань.",
"abusefilter-tools-expr": "Випробувач виразів",
@@ -148,6 +183,7 @@
"abusefilter-edit": "Зміна фільтру редагувань",
"abusefilter-edit-subtitle": "Редагування фільтру $1",
"abusefilter-edit-subtitle-new": "Створення фільтру",
+ "abusefilter-edit-token-not-match": "Ваше редагування не збережене! Будь ласка, збережіть знову.",
"abusefilter-edit-oldwarning": "<strong>Ви редагуєте стару версію цього фільтра. Статистика наведена для найновішої версії фільтра. Якщо ви збережете свої зміни, ви перезапишете усі редагування починаючи з версії, яку ви редагуєте.</strong> &bull; [[Special:AbuseFilter/history/$2|Повернутися до історії цього фільтру]]",
"abusefilter-edit-status-label": "Статистика:",
"abusefilter-edit-status": "Серед $1 {{PLURAL:$1|останньої дії|останніх дій}} цей фільтр знайшов {{PLURAL:$2|$2 збіг|$2 збіги|$2 збігів}} ($3%).",
@@ -156,7 +192,9 @@
"abusefilter-edit-new": "Новий фільтр",
"abusefilter-edit-save": "Зберегти фільтр",
"abusefilter-edit-id": "ІД фільтра:",
+ "abusefilter-edit-switch-editor": "Перемкнути редактор",
"abusefilter-edit-description": "Опис:\n:''(публічний) ''",
+ "abusefilter-edit-field-description": "опис",
"abusefilter-edit-group": "Група фільтру:",
"abusefilter-edit-flags": "Прапорці:",
"abusefilter-edit-enabled": "Увімкнути цей фільтр",
@@ -164,6 +202,7 @@
"abusefilter-edit-hidden": "Приховати деталі цього фільтру від загальнодоступного огляду",
"abusefilter-edit-global": "Глобальний фільтр",
"abusefilter-edit-rules": "Умови:",
+ "abusefilter-edit-field-conditions": "умови",
"abusefilter-edit-notes": "Примітки:",
"abusefilter-edit-lastmod": "Остання зміна фільтру:",
"abusefilter-edit-lastmod-text": "$1 користувачем $2",
@@ -174,25 +213,42 @@
"abusefilter-edit-action-blockautopromote": "Зняти з користувача статус автопідтвердження",
"abusefilter-edit-action-degroup": "Виключити користувача з усіх привілейованих груп",
"abusefilter-edit-action-block": "Заблокувати користувача та/або IP-адресу",
+ "abusefilter-edit-action-blocktalk": "Заблокувати користувачеві та/або IP-адресі можливість редагувати власну сторінку обговорення",
"abusefilter-edit-action-throttle": "Уживати заходи тільки тільки тоді, коли користувач переходить межу",
- "abusefilter-edit-action-rangeblock": "Блокувати діапазон /16, з якого працює користувач.",
+ "abusefilter-edit-action-rangeblock": "Заблокувати відповідний IP-діапазон, з якого працює користувач",
"abusefilter-edit-action-tag": "Позначити зміну для подальшої перевірки",
"abusefilter-edit-throttle-count": "Кількість дозволених дій:",
- "abusefilter-edit-throttle-period": "Відтинок часу:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|секунда|секунди|секунд}}",
- "abusefilter-edit-throttle-groups": "Звуження за групами:\n:''(один на рядок, з'єднання комами) ''",
+ "abusefilter-edit-throttle-period": "Відтинок часу (у секундах):",
+ "abusefilter-edit-throttle-groups": "Звуження за групами:",
+ "abusefilter-edit-throttle-ip": "IP-адреса",
+ "abusefilter-edit-throttle-user": "Обліковий запис",
+ "abusefilter-edit-throttle-range": "Діапазон /16",
+ "abusefilter-edit-throttle-creationdate": "Серверний час створення облікового запису",
+ "abusefilter-edit-throttle-editcount": "Лічильник редагувань",
+ "abusefilter-edit-throttle-site": "Весь сайт",
+ "abusefilter-edit-throttle-page": "Сторінка",
+ "abusefilter-throttle-details": "Дозволити $1 {{PLURAL:$1|дію|дії|дій}} {{PLURAL:$2|кожну $2 секунду|кожні $2 секунди|кожні $2 секунд}}, звужувати за групами: $3",
"abusefilter-edit-warn-message": "Системне повідомлення для попереджень:",
"abusefilter-edit-warn-other": "Інше повідомлення",
"abusefilter-edit-warn-other-label": "Назва сторінки іншого повідомлення:\n:''(без префікса MediaWiki)''",
"abusefilter-edit-warn-actions": "Дії:",
- "abusefilter-edit-warn-preview": "Попередній перегляд вибраного повідомлення",
+ "abusefilter-edit-warn-preview": "Показати/приховати попередній перегляд вибраного повідомлення",
"abusefilter-edit-warn-edit": "Створити/редагувати вибране повідомлення",
- "abusefilter-edit-tag-tag": "Присвоювані [[Special:Tags|мітки]] (по одній у рядку):",
+ "abusefilter-edit-tag-tag": "Присвоювані [[Special:Tags|мітки]]:",
+ "abusefilter-edit-tag-placeholder": "Додати мітки (по одній або через кому)",
+ "abusefilter-edit-tag-hidden-placeholder": "Додати мітки (через кому)",
+ "abusefilter-edit-block-anon-durations": "Тривалість блокування для анонімних користувачів:",
+ "abusefilter-edit-block-user-durations": "Тривалість блокування для зареєстрованих користувачів:",
+ "abusefilter-block-anon": "Блокувати анонімних користувачів",
+ "abusefilter-block-user": "блокувати зареєстрованих користувачів",
+ "abusefilter-block-talk": "сторінку обговорення заблоковано",
"abusefilter-edit-denied": "Ви не можете проглянути докладну інформацію про цей фільтр, бо вона прихована від публічного перегляду.",
"abusefilter-edit-main": "Параметри фільтра",
"abusefilter-edit-done-subtitle": "Фільтр змінено",
"abusefilter-edit-done": "[[Special:AbuseFilter/history/$1/diff/prev/$2|Ваші зміни]] на [[Special:AbuseFilter/$1|фільтр $3]] вже збережено.",
"abusefilter-edit-badsyntax": "У вказному вами фільтрі є синтаксична помилка.\nСинтаксичний аналізатор видав таке повідомлення: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": " Наступні поля повинні бути заповнені обов'язково: $1",
+ "abusefilter-edit-deleting-enabled": "Ви не можете позначити активний фільтр як вилучений.",
"abusefilter-edit-restricted": "Ви не можете змінити цей фільтр, оскільки він містить одну або декілька обмежуючих дій. Будь ласка, попросіть користувача з відповідними правами змінити фільтр для вас.",
"abusefilter-edit-viewhistory": "Показати історію цього фільтра",
"abusefilter-edit-history": "Історія:",
@@ -204,7 +260,7 @@
"abusefilter-edit-export": "Експортувати цей фільтр до іншої вікі",
"abusefilter-edit-syntaxok": "Не знайдено синтаксичних помилок",
"abusefilter-edit-syntaxerr": "Знайдено синтаксичну помилку: $1",
- "abusefilter-edit-bad-tags": "Принаймні одна з вказаних Вами міток неправильна.\nМітка має бути короткою і не має містити спецсимволів, а також мітки не повинні бути закріпленими за іншими програмами. Спробуйте обрати якусь іншу назву для мітки",
+ "abusefilter-edit-bad-tags": "Принаймні одна з вказаних Вами міток неправильна.\nМітка має бути короткою і не має містити спецсимволів, а також мітки не повинні бути закріпленими за іншими програмами. Спробуйте обрати якусь іншу назву для мітки.",
"abusefilter-edit-notallowed": "У вас нема права створювати чи змінювати фільтри редагувань",
"abusefilter-edit-notallowed-global": "Вам не дозволено створювати чи редагувати глобальні фільтри зловживань",
"abusefilter-edit-notallowed-global-custom-msg": "Користувацькі повідомлення попереджень не підтримуються для глобальних фільтрів",
@@ -217,8 +273,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "Модуль (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "Степінь (**)",
"abusefilter-edit-builder-group-op-comparison": "Оператори порівняння",
- "abusefilter-edit-builder-op-comparison-equal": "Рівні (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "Не рівні (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "Значення, рівне (==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "Значення й тип, рівні (===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "Значення не рівне (!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "Значення й тип не рівні (!==)",
"abusefilter-edit-builder-op-comparison-lt": "Менше (<)",
"abusefilter-edit-builder-op-comparison-gt": "Більше (>)",
"abusefilter-edit-builder-op-comparison-lte": "Менше або рівне (<=)",
@@ -242,23 +300,30 @@
"abusefilter-edit-builder-funcs-lcase": "У нижній регістр (lcase)",
"abusefilter-edit-builder-funcs-ucase": "У верхній регістр (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "Нормалізація неоднозначних символів (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "Нормалізувати й здійснити пошук декількох підрядків у режимі OR (ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "Нормалізувати й здійснити пошук декількох підрядків у режимі AND (ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "Вилучення подвійних символів (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Відношення к-сті спеціальних символів до загальної к-сті символів (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Нормалізація (norm)",
"abusefilter-edit-builder-funcs-count": "Скільки разів підрядок X зустрічається в рядку Y (count)",
"abusefilter-edit-builder-funcs-rcount": "Скільки разів регулярний вираз X зустрічається в рядку Y (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "Масив збігів регулярних виразів у межах тексту для кожної групи захоплення (get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "Вилучити пробіли (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "Видалити спеціальні символи (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "Присутність IP-адреси в діапазоні (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "Рядок містить будь-який з таких рядків (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "Пошуковий рядок для декількох підрядків у режимі OR. (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "Пошуковий рядок для декількох підрядків у режимі AND. (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "Перевірити, чи заданий аргумент дорівнює (===) будь-якому з наступних аргументів (equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "Підрядок (substr)",
"abusefilter-edit-builder-funcs-strpos": "Положення підрядка в рядку (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Заміна підрядка в рядку (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "Екранувати рядок для використання в регулярному вислові (rescape)",
"abusefilter-edit-builder-funcs-set_var": "Встановити змінну (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "Нормалізувати HTML-сутності в Unicode-символи (sanitize)",
"abusefilter-edit-builder-group-vars": "Змінні",
"abusefilter-edit-builder-vars-accountname": "Ім'я облікового запису (при створенні облікового запису)",
"abusefilter-edit-builder-vars-timestamp": "Unix-час редагування",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "Часова мітка журналу",
"abusefilter-edit-builder-vars-action": "Дія",
"abusefilter-edit-builder-vars-addedlines": "Додані рядки",
"abusefilter-edit-builder-vars-delta": "Зміна розміру після редагування",
@@ -269,19 +334,21 @@
"abusefilter-edit-builder-vars-new-content-model": "Нова модель вмісту",
"abusefilter-edit-builder-vars-removedlines": "Видалені рядки",
"abusefilter-edit-builder-vars-summary": "Опис/причина редагування",
- "abusefilter-edit-builder-vars-article-id": "Ідентифікатор сторінки",
- "abusefilter-edit-builder-vars-article-ns": "Простір назв сторінки",
- "abusefilter-edit-builder-vars-article-text": "Назва сторінки (без простору назв)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Повна назва сторінки",
- "abusefilter-edit-builder-vars-article-views": "Переглядів сторінки",
+ "abusefilter-edit-builder-vars-page-id": "Ідентифікатор сторінки",
+ "abusefilter-edit-builder-vars-page-ns": "Простір назв сторінки",
+ "abusefilter-edit-builder-vars-page-title": "Назва сторінки (без простору назв)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Повна назва сторінки",
+ "abusefilter-edit-builder-vars-page-age": "Вік сторінки (у секундах)",
"abusefilter-edit-builder-vars-movedfrom-id": "Ідентифікатор сторінки, що перейменовується",
"abusefilter-edit-builder-vars-movedfrom-ns": "Простір назв сторінки, що перейменовується",
- "abusefilter-edit-builder-vars-movedfrom-text": "Назва сторінки, що перейменовується",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Повна назва сторінки, що перейменовується",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Назва сторінки, що перейменовується",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Повна назва сторінки, що перейменовується",
+ "abusefilter-edit-builder-vars-movedfrom-age": "Вік вихідної сторінки при перейменуванні (в секундах)",
"abusefilter-edit-builder-vars-movedto-id": "Ідентифікатор цільової сторінки перейменування",
"abusefilter-edit-builder-vars-movedto-ns": "Простір назв цільової сторінки перейменування",
- "abusefilter-edit-builder-vars-movedto-text": "Назва цільової сторінки перейменування",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Повна назва цільової сторінки перейменування",
+ "abusefilter-edit-builder-vars-movedto-title": "Назва цільової сторінки перейменування",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Повна назва цільової сторінки перейменування",
+ "abusefilter-edit-builder-vars-movedto-age": "Вік цільової сторінки при перейменуванні (у секундах)",
"abusefilter-edit-builder-vars-user-editcount": "Число редагувань користувача",
"abusefilter-edit-builder-vars-user-age": "Вік облікового запису",
"abusefilter-edit-builder-vars-user-name": "Ім'я облікового запису",
@@ -291,10 +358,14 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "Час підтвердження адреси ел. пошти",
"abusefilter-edit-builder-vars-recent-contributors": "Останні десять редакторів сторінки",
"abusefilter-edit-builder-vars-first-contributor": "Користувач, що створив цю сторінку",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "Останні десять користувачів, що робили внесок у вихідну сторінку перейменування",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "Перший користувач, що робив внесок у вихідну сторінку перейменування",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "Останні десять користувачів, що робили внесок у цільову сторінку перейменування",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "Перший користувач, що робив внесок у цільову сторінку перейменування",
"abusefilter-edit-builder-vars-all-links": "Усі зовнішні посилання в новому тексті",
"abusefilter-edit-builder-vars-added-links": "Усі зовнішні посилання, додані редагуванням",
"abusefilter-edit-builder-vars-removed-links": "Усі зовнішні посилання, вилучені редагуванням",
- "abusefilter-edit-builder-vars-old-text": "Старий вікітекст, перед редагуванням сторінки",
+ "abusefilter-edit-builder-vars-old-text": "Стара вікірозмітка, до редагування сторінки (більше не використовується)",
"abusefilter-edit-builder-vars-new-text": "Новий вікітекст, після редагування сторінки",
"abusefilter-edit-builder-vars-new-pst": "Нова сторінка вікітексту з попередньо збереженим перетворенням",
"abusefilter-edit-builder-vars-diff-pst": "Уніфікований diff змін у процесі редагування, перетворених перед збереженням",
@@ -305,9 +376,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "Рівень захисту сторінки від перейменувань",
"abusefilter-edit-builder-vars-restrictions-create": "Захист сторінки від створення",
"abusefilter-edit-builder-vars-restrictions-upload": "Захист від завантаження файлу",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "Рівень захисту від редагувань вихідної сторінки перейменування",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "Рівень захисту від перейменувань вихідної сторінки перейменування",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "Рівень захисту від створення вихідної сторінки перейменування",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "Рівень захисту від завантажень вихідної сторінки перейменування",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "Рівень захисту від редагування цільової сторінки перейменування",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Рівень захисту від перейменувань цільової сторінки перейменування",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Рівень захисту від створення цільової сторінки перейменування",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "Рівень захисту від завантажень цільової сторінки перейменування",
"abusefilter-edit-builder-vars-old-text-stripped": "Текст старої сторінки, позбавлений розмітки",
"abusefilter-edit-builder-vars-old-links": "Посилання на сторінці перед редагуванням",
- "abusefilter-edit-builder-vars-old-html": "Вікітекст старої сторінки, перетворений в HTML",
+ "abusefilter-edit-builder-vars-old-html": "Стара вікірозмітка сторінки, перетворена в HTML (більше не використовується)",
"abusefilter-edit-builder-vars-minor-edit": "Чи було редагування позначене як незначне",
"abusefilter-edit-builder-vars-file-sha1": "SHA1-хеш вмісту файлу",
"abusefilter-edit-builder-vars-file-size": "Розмір файлу у байтах",
@@ -334,6 +413,7 @@
"abusefilter-history-filterid": "Фільтр",
"abusefilter-history-select-legend": "Уточнити пошук",
"abusefilter-history-select-user": "Користувач:",
+ "abusefilter-history-select-filter": "Ідентифікатор фільтра:",
"abusefilter-history-select-submit": "Уточнити",
"abusefilter-history-diff": "Зміни",
"abusefilter-history-error-hidden": "Цей фільтр прихований, ви не можете проглянути його історію.",
@@ -344,14 +424,17 @@
"abusefilter-exception-unclosedstring": "Незакритий рядковий вираз на позиції $1.",
"abusefilter-exception-invalidoperator": "Помилковий оператор \"$2\" на позиції $1.",
"abusefilter-exception-unrecognisedtoken": "Неопізнаний токен \"$2\" на позиції $1.",
- "abusefilter-exception-noparams": "Не вказані параметри для функції \"$2\" на позиції $1.",
+ "abusefilter-exception-noparams": "Не вказані параметри для функції «$2» на позиції $1. Очікується $3 {{PLURAL:$3|аргумент|аргументи|аргументів}}.",
"abusefilter-exception-dividebyzero": "Ділення $2 на нуль на позиції $1.",
"abusefilter-exception-unrecognisedvar": "Неопізнана змінна $2 на позиції $1",
"abusefilter-exception-notenoughargs": "Замало аргументів для функції $2, що викликається на позиції $1.\nОчікується $3 {{PLURAL:$3|аргумент|аргументи|аргументів}}, а вказано $4",
"abusefilter-exception-regexfailure": "Помилка в регулярному виразі \"$3\" на позиції $1: \"$2\"",
"abusefilter-exception-overridebuiltin": "Недопустиме перевизначення вбудованої змінної \"$2\" на позиції $1.",
"abusefilter-exception-outofbounds": "Запит на неіснуючий елементу списку $2 (розмір списку = $3) на позиції $1.",
- "abusefilter-exception-notlist": "Запит на елемент масиву для об'єкту, що не є масивом, на позиції $1.",
+ "abusefilter-exception-notarray": "Запит на елемент масиву для об'єкту, що не є масивом, на позиції $1.",
+ "abusefilter-exception-unclosedcomment": "Незакритий коментар у позиції $1.",
+ "abusefilter-exception-invalidiprange": "Недійсний IP-діапазон «$2», поданий у позиції $1.",
+ "abusefilter-exception-disabledvar": "Змінна $2 у позиції $1 більше не використовується.",
"abusefilter-action-tag": "Мітка",
"abusefilter-action-throttle": "Звузити",
"abusefilter-action-warn": "Попередження",
@@ -367,8 +450,9 @@
"abusefilter-revert-periodstart": "Початок періоду:",
"abusefilter-revert-periodend": "Закінчення періоду:",
"abusefilter-revert-search": "Вибір дій",
- "abusefilter-revert-filter": "Фільтр:",
+ "abusefilter-revert-filter": "ID фільтра:",
"abusefilter-revert-preview-intro": "Нижче приведені виконані фільтром редагувань дії, які будуть скасовані.\nБудь ласка, уважно їх перевірте та натисніть \"{{int:abusefilter-revert-confirm}}\" для підтвердження виділеного.",
+ "abusefilter-revert-confirm-legend": "Підтвердіть відкат",
"abusefilter-revert-confirm": "Підтвердити",
"abusefilter-revert-success": "Ви відкотили всі дії, виконані фільтром редагувань [[Special:AbuseFilter/$1|$2]].",
"abusefilter-revert-reason": "Автоматичний відкіт всіх дій, виконаних фільтром редагувань $1.\nВказана причина: $2",
@@ -380,12 +464,20 @@
"abusefilter-test-submit": "Перевірити",
"abusefilter-test-load": "Завантажити",
"abusefilter-test-user": "Зміни користувача:",
+ "abusefilter-test-nobots": "Приховати редагування ботів",
"abusefilter-test-period-start": "Зміни зроблені після:",
"abusefilter-test-period-end": "Зміни зроблені до:",
"abusefilter-test-page": "Зміни на сторінці:",
"abusefilter-test-shownegative": "Показувати зміни, які не попадають під фільтр",
"abusefilter-test-syntaxerr": "Введений вами фільтр містить синтаксичну помилку.\nВи можете отримати докладне пояснення, натиснувши кнопку \"{{int:abusefilter-edit-check}}\"",
"abusefilter-test-badtitle": "Вами введено хибний заголовок сторінки. Можливо, він містить один або кілька символів, які не можна вживати у назвах.",
+ "abusefilter-test-action": "Тип дії:",
+ "abusefilter-test-search-type-all": "Усі дії",
+ "abusefilter-test-search-type-edit": "Редагування",
+ "abusefilter-test-search-type-move": "Перейменування",
+ "abusefilter-test-search-type-delete": "Вилучення",
+ "abusefilter-test-search-type-upload": "Завантаження",
+ "abusefilter-test-search-type-createaccount": "Створення облікових записів",
"abusefilter-changeslist-examine": "переглянути",
"abusefilter-examine": "Перегляд окремих змін",
"abusefilter-examine-intro": "Ця сторінка дозволяє вам переглянути змінні, створені фільтром редагувань для окремої зміни і перевірити їх у фільтрах.",
@@ -412,6 +504,7 @@
"abusefilter-topnav-import": "Імпорт фільтру",
"abusefilter-log-name": "Журнал фільтру редагувань",
"abusefilter-log-header": "У цей журнал записуються описи змін, зроблених у фільтрах.\nПодробиці можна знайти в [[Special:AbuseFilter/history|списку]] останніх змін фільтрів.",
+ "abusefilter-logentry-create": "$1 {{GENDER:$2|створив|створила}} $4 ($5)",
"abusefilter-logentry-modify": "$1 {{GENDER:$2|змінив|змінила}} $4 ($5)",
"abusefilter-log-noresults": "Немає результатів",
"abusefilter-diff-title": "Різниця між версіями",
@@ -427,49 +520,16 @@
"abusefilter-import-submit": "Імпортувати дані",
"abusefilter-group-default": "Стандартна",
"abusefilter-http-error": "Сталася помилка HTTP: $1.",
- "apihelp-abusefiltercheckmatch-description": "Перевірте, чи AbuseFilter має збіги з набором змінних, подією AbuseFilter, внесеною в журнал редактором.\n\nПотрібні vars, rcid або logid, але використати можна лише один.",
- "apihelp-abusefiltercheckmatch-summary": "Перевірити, щоб побачити, чи Фільтр зловживань відповідає набору змінних, журнальована дія, яка запускається користувачем.",
- "apihelp-abusefiltercheckmatch-extended-description": "Необхідні vars, rcid або logid, однак можна використати лише один з цих параметрів.",
- "apihelp-abusefiltercheckmatch-param-filter": "Повнотекстовий фільтр для перевірки на відповідність.",
- "apihelp-abusefiltercheckmatch-param-vars": "JSON-кодований масив змінних, за яким тестувати.",
- "apihelp-abusefiltercheckmatch-param-rcid": "ID у нових редагуваннях, на основі якого має бути здійснена перевірка.",
- "apihelp-abusefiltercheckmatch-param-logid": "ID із журналу фільтра зловживань, на основі якого має бути здійснена перевірка.",
- "apihelp-abusefiltercheckmatch-example-1": "Перевірити, чи ID 15 в нових редагуваннях відповідає простому фільтру.",
- "apihelp-abusefilterchecksyntax-description": "Перевірити синтаксис фільтру зловживань.",
- "apihelp-abusefilterchecksyntax-summary": "Перевірити синтаксис фільтра зловживань.",
- "apihelp-abusefilterchecksyntax-param-filter": "Повний текст фільтру, синтаксис якого необхідно перевірити.",
- "apihelp-abusefilterchecksyntax-example-1": "Перевірити синтаксис правильного фільтру",
- "apihelp-abusefilterchecksyntax-example-2": "Перевірити синтаксис неправильного фільтру",
- "apihelp-abusefilterevalexpression-description": "Оцінює значення виразу Фільтру зловживань.",
- "apihelp-abusefilterevalexpression-summary": "Оцінює вираз фільтра зловживань.",
- "apihelp-abusefilterevalexpression-param-expression": "Вираз до оцінки.",
- "apihelp-abusefilterevalexpression-example-1": "Оцінити простий вираз",
- "apihelp-abusefilterunblockautopromote-description": "Зняти з користувача викликане фільтром зловживань обмеження отримувати автоматичне просування.",
- "apihelp-abusefilterunblockautopromote-summary": "Розблоковує користувача від отримування автоматичних просувань через послідовність фільтрів.",
- "apihelp-abusefilterunblockautopromote-param-user": "Ім'я користувача, якого Ви хочете розблокувати.",
- "apihelp-abusefilterunblockautopromote-example-1": "Зняти блокування з автоматичного просування користувача [[User:Example]]",
- "apihelp-query+abusefilters-description": "Показати подробиці фільтрів зловживань.",
- "apihelp-query+abusefilters-summary": "Показати деталі фільтрів зловживань.",
- "apihelp-query+abusefilters-param-startid": "ID фільтра, з якого почати перелічувати.",
- "apihelp-query+abusefilters-param-endid": "ID фільтра, на якому закінчити перелічувати.",
- "apihelp-query+abusefilters-param-show": "Показати тільки фільтри, які відповідають цим критеріям.",
- "apihelp-query+abusefilters-param-limit": "Максимальна кількість фільтрів у списку.",
- "apihelp-query+abusefilters-param-prop": "Які властивості необхідно отримати.",
- "apihelp-query+abusefilters-example-1": "Показати список увімкнених публічних фільтрів",
- "apihelp-query+abusefilters-example-2": "Показати деталі про фільтри",
- "apihelp-query+abuselog-description": "Показати події, спіймані одним з фільтрів зловживань.",
- "apihelp-query+abuselog-summary": "Показати дії, виявлені одним з фільтрів зловживань.",
- "apihelp-query+abuselog-param-start": "Часова мітка початку переліку.",
- "apihelp-query+abuselog-param-end": "Часова мітка закінчення переліку.",
- "apihelp-query+abuselog-param-user": "Показати тільки елементи, зроблені певним користувачем або IP-адресою.",
- "apihelp-query+abuselog-param-title": "Показати лише елементи, що наявні на даній сторінці.",
- "apihelp-query+abuselog-param-filter": "Показати лише елементи, спіймані за допомогою даного ідентифікатора фільтра.",
- "apihelp-query+abuselog-param-limit": "Максимальна кількість елементів для переліку.",
- "apihelp-query+abuselog-param-prop": "Які властивості отримати.",
- "apihelp-query+abuselog-example-1": "Показати останні записи в журналі",
- "apihelp-query+abuselog-example-2": "Показати останні записи в журналі [[API]]",
- "apierror-abusefilter-canttest": "Ви не маєте дозволу тестувати фільтри зловживань.",
- "apierror-abusefilter-cantcheck": "Ви не маєте дозволу перевіряти синтаксис фільтрів зловживань.",
- "apierror-abusefilter-nosuchlogid": "Немає запису зловживання з id $1.",
- "apierror-abusefilter-badsyntax": "Фільтр має неправильний синтаксис."
+ "abusefilter-view-private-submit": "Переглянути приватні дані",
+ "abusefilter-view-private": "Переглянути приватні дані",
+ "abusefilter-view-private-reason": "Причина доступу до приватних даних:",
+ "abusefilter-log-details-id": "ID журналу",
+ "abusefilter-invalid-request": "Недійсний запит! Ви повинні отримувати доступ до приватних даних журналу через форму на [[Special:AbuseLog/$1]] і вказати причину.",
+ "abusefilter-invalid-request-noid": "Недійсний запит! Ви повинні отримувати доступ до приватних даних журналу через форму на сторінці деталей журналу зловживань і вказати причину.",
+ "log-description-abusefilterprivatedetails": "У цьому журналі подано список випадків, коли користувач отримував доступ до приватних даних журналу зловживань.",
+ "abusefilter-noreason": "Попередження. Щоб переглянути приватні дані цього журналу, ви повинні вказати причину.",
+ "abusefilter-log-ip-not-available": "Не доступно",
+ "abusefilter-tag-reserved": "Мітка <code>abusefilter-condition-limit</code> зарезервована для внутрішнього використання фільтром зловживань.",
+ "tag-abusefilter-condition-limit": "досягнутий ліміт умови",
+ "tag-abusefilter-condition-limit-description": "Редагування або інші події, що не могли бути перевірені усіма активними [[Special:AbuseFilter|фільтрами зловживань]] ([[mw:Extension:AbuseFilter/Conditions|довідка]])."
}
diff --git a/AbuseFilter/i18n/ur.json b/AbuseFilter/i18n/ur.json
index 5ed6c2d5..a6affab9 100644
--- a/AbuseFilter/i18n/ur.json
+++ b/AbuseFilter/i18n/ur.json
@@ -3,11 +3,15 @@
"authors": [
"පසිඳු කාවින්ද",
"عثمان خان شاہ",
- "Muhammad Shuaib"
+ "Muhammad Shuaib",
+ "Zainab Meher",
+ "Abdulq",
+ "BukhariSaeed"
]
},
"abusefilter": "مقطار غلط کاری کی ترتیب",
"abuselog": "غلط استعمال کی لاگ ان کریں",
+ "abusefilter-disallowed": "یہ عمل روک دیا گیا ہے کیونکہ خود کار طریقے سے نقصان دہ شناخت ہوا ہے۔\nاگر آپ کو یقین ہے کہ آپ کا عمل فائدہ مند تھا، تو براہ مہربانی آپ کسی منتظم کو مطلع کریں کہ آپ کیا کرنے کی کوشش کر رہے تھے۔\nآپ کے عمل کی رک جانے کی مختصر وجہ یہ ہے: $1",
"abusefilter-blocker": "غلط استعمال فلٹر کریں",
"right-abusefilter-modify": "غلط کاری کے مقطاروں میں ترمیم",
"right-abusefilter-view": "غلط کاری کے مقطاروں کا مشاہدہ",
@@ -32,16 +36,20 @@
"abusefilter-log-search-user": "صارف:",
"abusefilter-log-search-title": "عنوان:",
"abusefilter-log-search-wiki": "ویکی:",
+ "abusefilter-log-search-action-other": "دیگر",
+ "abusefilter-log-search-action-any": "کوئی بھی",
"abusefilter-log-search-submit": "تلاش",
"abusefilter-log-detailslink": "تفصیلات",
+ "abusefilter-log-diff": "فرق",
"abusefilter-log-hidelink": "رویت کو ایڈجسٹ",
"abusefilter-log-details-var": "متغیر",
"abusefilter-log-details-val": "قدر",
"abusefilter-log-details-vars": "کارروائی کے پیرامیٹر",
- "abusefilter-log-details-private": "نجی اعداد و شمار",
+ "abusefilter-log-details-private": "نجی نوشتہ کی تفصیلات",
"abusefilter-log-noactions": "کوئی بھی نہیں",
"abusefilter-log-details-diff": "تبدیلیوں میں ترمیم کی گئی",
"abusefilter-log-linkoncontribs": "غلط استعمال کی لاگ ان کریں",
+ "abusefilter-log-linkonhistory": "نوشتہ غلط کاری دیکھیں",
"abusefilter-log-hide-reason": "وجہ:",
"abusefilter-log-hide-forbidden": "آپ غلط استعمال لاگ ان میں لکھے گئے مراسلے کو چھپانے کے لئے اجازت نہیں ہے.",
"abusefilter-management": "غلط استعمال فلٹر کا انتظام",
@@ -69,8 +77,11 @@
"abusefilter-list-options-deleted-hide": "فلٹر چھپائیں حذف کر دی ہے",
"abusefilter-list-options-deleted-show": "خارج کردہ فلٹر شامل ہیں",
"abusefilter-list-options-scope": "مقطارات دکھائیں:",
- "abusefilter-list-options-disabled": "معذور فلٹر:",
"abusefilter-list-options-hidedisabled": "چھپائیں فلٹر غیر فعال کر دیا",
+ "abusefilter-list-options-searchfield": "اصول کے مظابق تلاش",
+ "abusefilter-list-options-searchpattern": "نمونہ شامل کریں",
+ "abusefilter-list-options-searchoptions": "طریقہ تلاش",
+ "abusefilter-list-options-search-like": "واضح سوال",
"abusefilter-list-options-submit": "اپ ڈیٹ",
"abusefilter-tools-expr": "اظہار ٹیسٹر",
"abusefilter-tools-reautoconfirm-user": "صارف:",
@@ -78,21 +89,24 @@
"abusefilter-edit-status-label": "اعداد و شمار:",
"abusefilter-edit-new": "نئے فلٹر کریں",
"abusefilter-edit-save": "فلٹر کو محفوظ کریں",
+ "abusefilter-edit-switch-editor": "خانہ ترمیم تبدیل کریں",
"abusefilter-edit-group": "فلٹر گروپ:",
"abusefilter-edit-enabled": "اس فلٹر کو فعال",
"abusefilter-edit-deleted": "حذف کر کے طور پر نشان زد کریں",
"abusefilter-edit-hidden": "عوامی نقطہ نظر سے اس فلٹر کی تفصیلات چھپائیں",
"abusefilter-edit-rules": "شروط:",
"abusefilter-edit-hitcount": "فلٹر مشاہدات:",
- "abusefilter-edit-consequences": "اعمال لے لیا جب جستجو",
+ "abusefilter-edit-consequences": "مطابقت پائی جانے کی صورت میں ضروری اقدامات",
"abusefilter-edit-action-warn": "دے صارف ایک انتباہ کے بعد ان کے اعمال کو دکھانے کا محرک",
"abusefilter-edit-action-disallow": "ےہ سوال کارروائی سے صارف کی روک تھام",
- "abusefilter-edit-action-flag": "پرچم کے غلط استعمال کے لاگ ان میں ترمیم کریں",
"abusefilter-edit-action-degroup": "تمام مراعات یافتہ طبقے کے موضوعات سے صارف حذف کریں",
"abusefilter-edit-action-block": "میں صارف اور/یا ترمیم سے آئی پی ایڈریس بلاک",
+ "abusefilter-edit-action-rangeblock": "متفرق آئ پی رینج کو بندکریں جس سے صارف اختراع کرتا ھے۔",
"abusefilter-edit-action-tag": "ٹیگ مزید کا جائزہ کے لئے ترمیم کریں",
"abusefilter-edit-throttle-count": "اجازت دینے کے لئے اعمال کی تعداد:",
- "abusefilter-edit-throttle-period": "وقت کی مدت:",
+ "abusefilter-edit-throttle-period": "وقت کی مدت (سیکنڈ میں):",
+ "abusefilter-edit-throttle-ip": "آئی پی پتا",
+ "abusefilter-edit-throttle-user": "صارف کھاتہ",
"abusefilter-edit-warn-message": "انتباہ کے لئے استعمال کرنے کے لئے نظام پیغام:",
"abusefilter-edit-warn-other": "دوسرے پیغام",
"abusefilter-edit-warn-actions": "اعمال:",
@@ -112,18 +126,19 @@
"abusefilter-edit-builder-group-op-arithmetic": "حساب آپریٹرز",
"abusefilter-edit-builder-group-misc": "متفرق",
"abusefilter-edit-builder-group-funcs": "افعال",
+ "abusefilter-edit-builder-funcs-get_matches": "ریجکس میچ میں ہر جوڑ کے گرو کی صف آرائی متن سے ملتی ہے۔",
"abusefilter-edit-builder-vars-action": "کارروائی",
"abusefilter-edit-builder-vars-newsize": "نیا صفحہ کا سائز",
"abusefilter-edit-builder-vars-oldsize": "پرانے صفحہ کا سائز",
"abusefilter-edit-builder-vars-removedlines": "لائنوں ترمیم میں ہٹا دیا جاتا",
"abusefilter-edit-builder-vars-summary": "خلاصہ/وجہ میں ترمیم کریں",
- "abusefilter-edit-builder-vars-article-ns": "صفحہ نیم سپیس",
- "abusefilter-edit-builder-vars-article-prefixedtext": "مکمل صفحہ کا عنوان",
- "abusefilter-edit-builder-vars-movedfrom-text": "اقدام ذریعہ صفحہ کا عنوان",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "اقدام ذریعہ صفحہ کا مکمل عنوان",
+ "abusefilter-edit-builder-vars-page-ns": "صفحہ نیم سپیس",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "مکمل صفحہ کا عنوان",
+ "abusefilter-edit-builder-vars-movedfrom-title": "اقدام ذریعہ صفحہ کا عنوان",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "اقدام ذریعہ صفحہ کا مکمل عنوان",
"abusefilter-edit-builder-vars-movedto-ns": "نیم سپیس میں منتقل منزل صفحے کے",
- "abusefilter-edit-builder-vars-movedto-text": "اقدام منزل صفحہ کا عنوان",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "اقدام منزل صفحہ کا مکمل عنوان",
+ "abusefilter-edit-builder-vars-movedto-title": "اقدام منزل صفحہ کا عنوان",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "اقدام منزل صفحہ کا مکمل عنوان",
"abusefilter-edit-builder-vars-user-editcount": "صارف کے شمار میں ترمیم کریں",
"abusefilter-edit-builder-vars-user-age": "صارف اکاؤنٹ کی عمر",
"abusefilter-edit-builder-vars-user-name": "صارف اکاؤنٹ کا نام",
@@ -156,7 +171,7 @@
"abusefilter-action-degroup": "گروپ سے حذف کریں",
"abusefilter-revert-periodend": "مدت ختم:",
"abusefilter-revert-search": "اعمال کا انتخاب",
- "abusefilter-revert-filter": "فلٹر کریں:",
+ "abusefilter-revert-filter": "ٓئی ڈی فلٹر کریں:",
"abusefilter-revert-confirm": "اس بات کی تصدیق",
"abusefilter-test-submit": "ٹیسٹ",
"abusefilter-test-load": "بوجھ",
@@ -189,5 +204,6 @@
"abusefilter-diff-item": "آئٹم کو",
"abusefilter-diff-info": "بنیادی معلومات",
"abusefilter-diff-pattern": "فلٹر حالات",
- "abusefilter-group-default": "پہلے سے طے شدہ"
+ "abusefilter-group-default": "پہلے سے طے شدہ",
+ "tag-abusefilter-condition-limit": "تعداد شرائط کے حدود تک جا پہنچا"
}
diff --git a/AbuseFilter/i18n/vec.json b/AbuseFilter/i18n/vec.json
index 16cd8162..2ad9de49 100644
--- a/AbuseFilter/i18n/vec.json
+++ b/AbuseFilter/i18n/vec.json
@@ -6,14 +6,14 @@
"GatoSelvadego",
"Nemo bis",
"Nick1915",
- "Matma Rex"
+ "Matma Rex",
+ "Cusolotto"
]
},
"abusefilter-desc": "Àplica dele eurìstiche automatiche a le modifiche.",
"abusefilter": "Configurassion del filtro abusi",
"abuselog": "Registro abusi",
"abusefilter-intro": "Benvegnù in te l'interfacia de gestion del Filtro Abusi.\nEl Filtro Abusi el xe un sistema automatixà par l'aplicassion de eurìstiche automatiche a tute le azion.\nSta interfacia la mostra un elenco dei filtri definìi e la parmete de modificarli.",
- "abusefilter-mustbeeditor": "Par motivi de sicuressa, solo i utenti col dirito de modificar i filtri abusi i pol doparar sta interfacia.",
"abusefilter-warning": "'''Ocio''': sta azion la xe stà ritegnùa pericolosa in base a na verifica automatica.\nLe modifiche mia costrutive le vegnarà prontamente anulà; l'inserimento palese o ripetùo de contributi mia costrutivi el darà luogo al bloco de l'utensa o del to indirizo IP.\nSe te ritien che la modifica in question la sia costrutiva, strucar de novo su Invia par confermarla.\nSta qua la xe na breve descrission de la regola de sicureza che xe stà violà: $1",
"abusefilter-disallowed": "Sta azion la xe stà ritegnùa pericolosa in base a na verifica automatica.\nSe te ritien che la modifica in question la sia costrutiva, par piaser dighelo a un aministrador.\nSta qua la xe na breve descrission de la regola de sicureza che xe stà violà: $1",
"abusefilter-blocked-display": "Sta azion la xe stà ritegnùa pericolosa in base a na verifica automatica,\ne quindi te xe stà inpedìo de farla.\nInoltre, par protegere {{SITENAME}}, l'utensa coivolta e tuti i indirizi IP associà i xe stà blocà e no i pole pi far modifiche.\nSe te ritien che la modifica in question la sia costrutiva, par piaser dighelo a un aministrador.\nSta qua la xe na breve descrission de la regola de sicureza che xe stà violà: $1",
@@ -70,9 +70,8 @@
"abusefilter-log-hide-id": "ID de l'elemento:",
"abusefilter-log-hide-hidden": "Scondi sto elemento da la vista publica",
"abusefilter-log-hide-reason": "Motivassion:",
+ "abusefilter-log-hide-reason-other": "Altra motivasion:",
"abusefilter-log-hide-forbidden": "No te ghè el parmesso de scondar i elementi del registro dei abusi.",
- "abusefilter-logentry-suppress": "ga sconto \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "ga descuerto \"[[$1]]\"",
"abusefilter-management": "Gestion del filtro abusi",
"abusefilter-list": "Tuti i filtri",
"abusefilter-list-id": "ID del filtro",
@@ -99,7 +98,6 @@
"abusefilter-list-options-deleted-only": "Fà védar solo i filtri scancelè",
"abusefilter-list-options-deleted-hide": "Scondi i filtri scancelè",
"abusefilter-list-options-deleted-show": "Includi i filtri scancelè",
- "abusefilter-list-options-disabled": "Filtri destachè:",
"abusefilter-list-options-hidedisabled": "Scondi i filtri destachè",
"abusefilter-list-options-submit": "Ajorna",
"abusefilter-tools-text": "Qua ghe xe alcuni strumenti utili par la costrussion e la verifica dei filtri abusi.",
@@ -117,17 +115,18 @@
"abusefilter-edit-status-label": "Statìsteghe:",
"abusefilter-edit-status": "Rispeto {{PLURAL:$1|a l'azion pi recente|a le $1 azioni pi recenti}}, sto filtro el gà catà $2 {{PLURAL:$2|corispondensa|corispondense}} ($3 %).",
"abusefilter-edit-status-profile": "Rispeto {{PLURAL:$1|a l'azion pi recente|a le $1 azioni pi recenti}}, sto filtro el gà catà $2 {{PLURAL:$2|corispondensa|corispondense}} ($3 %).\nEl so tempo medio de esecuzion xe de $4 ms, e impiega $5 {{PLURAL:$5|condizione|condizioni}} del limite de condizioni.",
- "abusefilter-edit-throttled": "'''Ocio''': sto filtro el xe stà disativà automaticamente par sicuressa.\nXe stà ragiunto el limite massimo de corispondense, pari al $1% de le azion.",
"abusefilter-edit-new": "Filtro novo",
"abusefilter-edit-save": "Salva filtro",
"abusefilter-edit-id": "ID del filtro:",
"abusefilter-edit-description": "Descrission:\n:''(visibile publicamente)''",
+ "abusefilter-edit-field-description": "descrision",
"abusefilter-edit-flags": "Flag:",
"abusefilter-edit-enabled": "Intaca sto filtro",
"abusefilter-edit-deleted": "Segna come scancelà",
"abusefilter-edit-hidden": "Scondi i detagli de sto filtro da la vista pùblica",
"abusefilter-edit-global": "Àplica sto filtro globalmente",
"abusefilter-edit-rules": "Condission:",
+ "abusefilter-edit-field-conditions": "condisioni",
"abusefilter-edit-notes": "Note:\n:''(private)''",
"abusefilter-edit-lastmod": "Filtro modifegà l'ultima olta:",
"abusefilter-edit-lastmod-text": "$1 da $2",
@@ -135,7 +134,6 @@
"abusefilter-edit-consequences": "Azioni in caso de corispondensa",
"abusefilter-edit-action-warn": "Ativa le seguenti azion dopo aver avisà l'utente",
"abusefilter-edit-action-disallow": "Fèrma l'utente prima che el cònpia l'azion in question",
- "abusefilter-edit-action-flag": "Evidensia la modifica in tel registro dei abusi",
"abusefilter-edit-action-blockautopromote": "Revoca a l'utente el stato de autoconfermà",
"abusefilter-edit-action-degroup": "Cava l'utente da tuti quanti i grupi con privilegi",
"abusefilter-edit-action-block": "Inpedìssighe le modifiche a l'utensa e/o a l'indirisso IP",
@@ -144,7 +142,6 @@
"abusefilter-edit-action-tag": "Segna la modifica par na verifica ulteriore",
"abusefilter-edit-throttle-count": "Nùmaro de azioni de permétar:",
"abusefilter-edit-throttle-period": "Perìodo de tenpo:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|secondo|secondi}}",
"abusefilter-edit-throttle-groups": "Criteri de ragruppamento par el ritardo:\n:''(uno par riga opure unìi da virgole)''",
"abusefilter-edit-warn-message": "Messajo de sistema da doparar come avertimento:",
"abusefilter-edit-warn-other": "Altro messajo",
@@ -227,18 +224,18 @@
"abusefilter-edit-builder-vars-oldsize": "Vecia dimension de la pàxena",
"abusefilter-edit-builder-vars-removedlines": "Righe cavà da la modifica",
"abusefilter-edit-builder-vars-summary": "Ojeto/motivassion",
- "abusefilter-edit-builder-vars-article-id": "ID de la pàxena",
- "abusefilter-edit-builder-vars-article-ns": "Namespace de la pàxena",
- "abusefilter-edit-builder-vars-article-text": "Tìtolo de la pàxena (sensa namespace)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Tìtolo de la pàxena par intiero",
+ "abusefilter-edit-builder-vars-page-id": "ID de la pàxena",
+ "abusefilter-edit-builder-vars-page-ns": "Namespace de la pàxena",
+ "abusefilter-edit-builder-vars-page-title": "Tìtolo de la pàxena (sensa namespace)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Tìtolo de la pàxena par intiero",
"abusefilter-edit-builder-vars-movedfrom-id": "ID de la pagina origine del spostamento",
"abusefilter-edit-builder-vars-movedfrom-ns": "Namespace de la pagina origine del spostamento",
- "abusefilter-edit-builder-vars-movedfrom-text": "Titolo de la pagina origine del spostamento",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Titolo conpleto de la pagina origine del spostamento",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Titolo de la pagina origine del spostamento",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Titolo conpleto de la pagina origine del spostamento",
"abusefilter-edit-builder-vars-movedto-id": "ID de la pagina destinassion del spostamento",
"abusefilter-edit-builder-vars-movedto-ns": "Namespace de la pagina destinassion del spostamento",
- "abusefilter-edit-builder-vars-movedto-text": "Titolo de la pagina destinassion del spostamento",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Titolo conpleto de la pagina destinassion del spostamento",
+ "abusefilter-edit-builder-vars-movedto-title": "Titolo de la pagina destinassion del spostamento",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Titolo conpleto de la pagina destinassion del spostamento",
"abusefilter-edit-builder-vars-user-editcount": "Conta dei contributi de l'utente",
"abusefilter-edit-builder-vars-user-age": "Età de l'account utente",
"abusefilter-edit-builder-vars-user-name": "Nome utente",
@@ -294,7 +291,7 @@
"abusefilter-exception-regexfailure": "Eròr al caràtere $1 de l'espression regolare \"$3\": \"$2\"",
"abusefilter-exception-overridebuiltin": "Overriding mia valido de la variàbile built-in \"$2\" al caràtere $1.",
"abusefilter-exception-outofbounds": "Richiesta de voce inesistente de l'elenco $2 (dimension lista = $3) al caratere $1.",
- "abusefilter-exception-notlist": "Richiesta de un elemento de array da un non array al caratere $1.",
+ "abusefilter-exception-notarray": "Richiesta de un elemento de array da un non array al caratere $1.",
"abusefilter-action-tag": "Tag",
"abusefilter-action-throttle": "Ralenta",
"abusefilter-action-warn": "Avisa",
@@ -354,7 +351,6 @@
"abusefilter-topnav-import": "Inporta filtro",
"abusefilter-log-name": "Registro del filtro abusi",
"abusefilter-log-header": "El registro el mostra un riassunto de le modifiche fate sui filtri.\nPar i detagli completi, varda [[Special:AbuseFilter/history|l'elenco]] de le modifiche pi recenti ai filtri.",
- "abusefilter-log-entry-modify": "gà modifegà $1 ($2)",
"abusefilter-diff-title": "Difarense tra le version",
"abusefilter-diff-item": "Elemento",
"abusefilter-diff-version": "Version del $1, fata da $2",
diff --git a/AbuseFilter/i18n/vep.json b/AbuseFilter/i18n/vep.json
index f9238e0d..b5a727bd 100644
--- a/AbuseFilter/i18n/vep.json
+++ b/AbuseFilter/i18n/vep.json
@@ -45,7 +45,7 @@
"abusefilter-edit-builder-vars-action": "Tegend",
"abusefilter-edit-builder-vars-newsize": "Uz' lehtpolen suruz",
"abusefilter-edit-builder-vars-oldsize": "Edeline lehtpolen suruz",
- "abusefilter-edit-builder-vars-article-id": "Lehtpolen ID",
+ "abusefilter-edit-builder-vars-page-id": "Lehtpolen ID",
"abusefilter-history-hidden": "Peittud",
"abusefilter-history-enabled": "Kävutamas",
"abusefilter-history-global": "Globaline",
diff --git a/AbuseFilter/i18n/vi.json b/AbuseFilter/i18n/vi.json
index 5102da6e..3892ed9f 100644
--- a/AbuseFilter/i18n/vi.json
+++ b/AbuseFilter/i18n/vi.json
@@ -14,7 +14,6 @@
"abusefilter": "Thiết lập bộ lọc sai phạm",
"abuselog": "Nhật trình sai phạm",
"abusefilter-intro": "Hoan nghênh bạn đã và trang quản lý Bộ lọc sai phạm.\nBộ lọc sai phạm là chức năng phần mềm để tự động xử lý các tác vụ trang theo điều kiện.\nTrang này có danh sách bộ lọc định trước để cấu hình.",
- "abusefilter-mustbeeditor": "Vì lý do an toàn, cần có quyền sửa đổi bộ lọc sai phạm để sử dụng trang này.",
"abusefilter-warning": "'''Cảnh báo''': Tác vụ này đã được tự động xác định là nguy hại.\nNhững tác vụ không có tính xây dựng sẽ nhanh chóng bị hồi lại,\nvà sửa đổi không có tính xây dựng xảy ra thường xuyên và liên tục sẽ dẫn đến việc cấm tài khoản hoặc địa chỉ IP của bạn.\nNếu bạn tin rằng tác vụ này là có tính xây dựng, bạn có thể lưu trang một lần nữa để xác nhận điều đó.\nMiêu tả ngắn về quy định nguy hại mà tác vụ của bạn gặp phải là: $1",
"abusefilter-disallowed": "Tác vụ này đã được tự động xác định là nguy hại,\nvà do đó không được phép thực hiện.\nNếu bạn tin rằng tác vụ của bạn là có tính xây dựng, xin hãy liên hệ với một bảo quản viên, và thông báo cho họ về những điều bạn đang cố gắng làm.\nMiêu tả ngắn về quy định nguy hại mà tác vụ của bạn gặp phải là: $1",
"abusefilter-blocked-display": "Tác vụ này đã được tự động xác định là nguy hại,\nvà bị ngăn không cho bạn thực hiện nó.\nNgoài ra, để bảo vệ {{PAGENAME}}, tài khoản cá nhân của bạn và tất cả các địa chỉ IP đi cùng với nó đã bị cấm sửa đổi.\nNếu điều này xảy ra do nhầm lẫn, xin hãy liên hệ với một bảo quản viên.\nMiêu tả ngắn về quy định nguy hại mà tác vụ của bạn gặp phải là: $1",
@@ -86,8 +85,6 @@
"abusefilter-log-hide-hidden": "Ẩn mục này khỏi công cộng",
"abusefilter-log-hide-reason": "Lý do:",
"abusefilter-log-hide-forbidden": "Bạn không có quyền ẩn mục trong nhật trình sai phạm.",
- "abusefilter-logentry-suppress": "đã ẩn “[[$1]]”",
- "abusefilter-logentry-unsuppress": "đã hiển thị lại [[$1]]",
"logentry-abusefilter-hit": "$1 {{GENDER:$2}}gây $4 khi thực hiện tác vụ “$5” tại $3, bộ lọc gây ra các tác vụ: $6 ($7)",
"abusefilter-management": "Quản lý bộ lọc sai phạm",
"abusefilter-list": "Các bộ lọc",
@@ -120,7 +117,6 @@
"abusefilter-list-options-scope-local": "Chỉ các quy định địa phương",
"abusefilter-list-options-scope-global": "Chỉ các quy định toàn cục",
"abusefilter-list-options-scope-all": "Quy tắc địa phương và toàn cục",
- "abusefilter-list-options-disabled": "Bộ lọc đã tắt:",
"abusefilter-list-options-hidedisabled": "Ẩn bộ lọc đã tắt",
"abusefilter-list-options-submit": "Cập nhật",
"abusefilter-tools-text": "Dưới đây là một số công cụ có thể hữu ích trong việc công thức hóa và gỡ rối các bộ lọc sai phạm.",
@@ -140,7 +136,6 @@
"abusefilter-edit-status-label": "Thống kê:",
"abusefilter-edit-status": "Trong số $1 tác vụ cuối cùng, bộ lọc này đã so trùng được $2 tác vụ ($3%).",
"abusefilter-edit-status-profile": "Trong vòng $1 {{PLURAL:$1|tác vụ|tác vụ}} cuối, bộ lọc này đã so trùng được $2 tác vụ ($3%).\nThời gian chạy trung bình là $4ms, và sử dụng $5 {{PLURAL:$5||}} điều kiện trong giới hạn các điều kiện.",
- "abusefilter-edit-throttled": "'''Cảnh báo''': Bộ lọc này bị tự động tắt để an toàn. Nó đã đạt đến giới hạn so trùng là hơn $1% số tác vụ.",
"abusefilter-edit-new": "Bộ lọc mới",
"abusefilter-edit-save": "Lưu bộ lọc",
"abusefilter-edit-id": "ID bộ lọc:",
@@ -167,7 +162,6 @@
"abusefilter-edit-action-tag": "Đánh dấu sửa đổi này để xem xét về sau.",
"abusefilter-edit-throttle-count": "Số tác vụ cho phép:",
"abusefilter-edit-throttle-period": "Thời gian:",
- "abusefilter-edit-throttle-seconds": "$1 giây",
"abusefilter-edit-throttle-groups": "Chặn nhóm theo:\n:''(mỗi nhóm 1 dòng, kết hợp với dấu phẩy)''",
"abusefilter-edit-warn-message": "Thông báo hệ thống dùng để cảnh báo:",
"abusefilter-edit-warn-other": "Thông điệp khác",
@@ -256,19 +250,18 @@
"abusefilter-edit-builder-vars-new-content-model": "Kiểu nội dung mới",
"abusefilter-edit-builder-vars-removedlines": "Số dòng bị xóa trong sửa đổi",
"abusefilter-edit-builder-vars-summary": "Tóm tắt / Lý do sửa đổi",
- "abusefilter-edit-builder-vars-article-id": "Mã số trang",
- "abusefilter-edit-builder-vars-article-ns": "Không gian tên chính",
- "abusefilter-edit-builder-vars-article-text": "Tựa đề trang (không có không gian tên)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Tựa đề trang đầy đủ",
- "abusefilter-edit-builder-vars-article-views": "Số lần xem trang",
+ "abusefilter-edit-builder-vars-page-id": "Mã số trang",
+ "abusefilter-edit-builder-vars-page-ns": "Không gian tên chính",
+ "abusefilter-edit-builder-vars-page-title": "Tựa đề trang (không có không gian tên)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Tựa đề trang đầy đủ",
"abusefilter-edit-builder-vars-movedfrom-id": "Mã số của trang định di chuyển",
"abusefilter-edit-builder-vars-movedfrom-ns": "Không gian tên của trang định di chuyển",
- "abusefilter-edit-builder-vars-movedfrom-text": "Tựa đề của trang định di chuyển",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Tựa đề đầy đủ của trang định di chuyển",
+ "abusefilter-edit-builder-vars-movedfrom-title": "Tựa đề của trang định di chuyển",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "Tựa đề đầy đủ của trang định di chuyển",
"abusefilter-edit-builder-vars-movedto-id": "Mã số của trang di chuyển đến",
"abusefilter-edit-builder-vars-movedto-ns": "Không gian tên của trang di chuyển đến",
- "abusefilter-edit-builder-vars-movedto-text": "Tựa đề của trang di chuyển đến",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "Tựa đề đầy đủ của trang di chuyển đến",
+ "abusefilter-edit-builder-vars-movedto-title": "Tựa đề của trang di chuyển đến",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "Tựa đề đầy đủ của trang di chuyển đến",
"abusefilter-edit-builder-vars-user-editcount": "Số lần sửa đổi của thành viên",
"abusefilter-edit-builder-vars-user-age": "Thời gian tồn tại tài khoản người dùng",
"abusefilter-edit-builder-vars-user-name": "Tên của tài khoản thành viên",
@@ -338,7 +331,7 @@
"abusefilter-exception-regexfailure": "Lỗi trong biểu thức chính quy “$3” tại ký tự $1: “$2”",
"abusefilter-exception-overridebuiltin": "Đè lên biến số phần mềm “$2” một cách bất hợp lệ tại ký tự $1.",
"abusefilter-exception-outofbounds": "Yêu cầu khoản danh sách thứ $2 không tồn tại (chỉ co $3 khoản) tại ký tự $1.",
- "abusefilter-exception-notlist": "Yêu cầu khoản mảng từ cấu trúc không phải mảng tại ký tự $1.",
+ "abusefilter-exception-notarray": "Yêu cầu khoản mảng từ cấu trúc không phải mảng tại ký tự $1.",
"abusefilter-action-tag": "Thẻ",
"abusefilter-action-throttle": "Thắt cổ chai",
"abusefilter-action-warn": "Cảnh báo",
@@ -413,38 +406,5 @@
"abusefilter-import-intro": "Trang này để nhập bộ lọc từ wiki khác.\nTại trang sửa đổi của wiki nguồn, hãy bấm “{{int:abusefilter-edit-export}}” dưới đề mục “{{int:abusefilter-edit-tools}}”.\nSau đó, chép văn bản từ hộp sẽ hiện ra, dán nó vào hộp ở đây, và bấm “{{int:abusefilter-import-submit}}”.",
"abusefilter-import-submit": "Nhập dữ liệu",
"abusefilter-group-default": "Mặc định",
- "abusefilter-http-error": "Đã xuất hiện lỗi HTTP: $1.",
- "apihelp-abusefiltercheckmatch-description": "Đánh dấu vào đây để kiểm tra xem nếu một AbuseFilter (bộ lọc lạm dụng) có khớp với tập hợp các biến hay không, trình biên tập đã ghi vào sự kiện của AbuseFilter.\n\nvars, rcid hoặc logid được yêu cầu tuy nhiên chỉ một trong số đó có thể sẽ được dùng.",
- "apihelp-abusefiltercheckmatch-param-filter": "Văn bản đầy đủ để kiểm tra sự ăn khớp của bộ lọc.",
- "apihelp-abusefiltercheckmatch-param-vars": "Mảng mã hóa JSON của các biến để kiểm tra lại.",
- "apihelp-abusefiltercheckmatch-param-rcid": "ID thay đổi gần đây để kiểm tra lại.",
- "apihelp-abusefiltercheckmatch-param-logid": "ID đăng nhập bộ lọc lạm dụng để kiểm tra lại.",
- "apihelp-abusefiltercheckmatch-example-1": "Kiểm tra nếu thay đổi gần đây ID 15 có ăn khớp với một bộ lọc đơn giản",
- "apihelp-abusefilterchecksyntax-description": "Kiểm tra cú pháp của một bộ lọc AbuseFilter.",
- "apihelp-abusefilterchecksyntax-param-filter": "Văn bản lọc đầy đủ để kiểm tra cú pháp trên.",
- "apihelp-abusefilterchecksyntax-example-1": "Kiểm tra cú pháp của một bộ lọc hợp lệ",
- "apihelp-abusefilterchecksyntax-example-2": "Kiểm tra cú pháp của một bộ lọc không hợp lệ",
- "apihelp-abusefilterevalexpression-description": "Đánh giá một biểu thức AbuseFilter.",
- "apihelp-abusefilterevalexpression-param-expression": "Đánh giá biểu thức.",
- "apihelp-abusefilterevalexpression-example-1": "Đánh giá một biểu thức đơn giản",
- "apihelp-abusefilterunblockautopromote-param-user": "Tên người dùng của người dùng mà bạn muốn bỏ khóa.",
- "apihelp-query+abusefilters-description": "Hiển thị chi tiết của các bộ lọc lạm dụng.",
- "apihelp-query+abusefilters-param-startid": "ID bộ lọc để bắt đầu việc đếm.",
- "apihelp-query+abusefilters-param-endid": "ID bộ lọc để dừng việc đếm.",
- "apihelp-query+abusefilters-param-show": "Chỉ hiện các bộ lọc đáp ứng được những tiêu chí này.",
- "apihelp-query+abusefilters-param-limit": "Số lượng tối đa các bộ lọc được liệt kê.",
- "apihelp-query+abusefilters-param-prop": "Thuộc tính mà bạn muốn lấy.",
- "apihelp-query+abusefilters-example-1": "Danh sách kích hoạt các bộ lọc công cộng",
- "apihelp-query+abusefilters-example-2": "Hiện một số chi tiết về các bộ lọc",
- "apihelp-query+abuselog-description": "Hiển thị các sự kiện đã được bắt bởi một trong các bộ lọc lạm dụng.",
- "apihelp-query+abuselog-param-start": "Các dấu thời gian (timestamp) để bắt đầu việc đếm.",
- "apihelp-query+abuselog-param-end": "Dấu thời gian để dừng việc đếm.",
- "apihelp-query+abuselog-param-user": "Chỉ hiện các mục được thực hiện bởi một người dùng hoặc địa chỉ IP.",
- "apihelp-query+abuselog-param-title": "Chỉ hiện các mục xuất hiện trong một trang nhất định.",
- "apihelp-query+abuselog-param-filter": "Chỉ hiển thị các mục đã được bắt bởi một ID bộ lọc nhất định.",
- "apihelp-query+abuselog-param-limit": "Số lượng các mục tối đa để đưa vào danh sách.",
- "apihelp-query+abuselog-param-prop": "Thuộc tính mà bạn muốn lấy.",
- "apihelp-query+abuselog-example-1": "Hiển thị các mục nhật trình gần đây",
- "apihelp-query+abuselog-example-2": "Hiển thị các mục nhật trình gần đây cho [[API]]",
- "apierror-abusefilter-badsyntax": "Bộ lọc có cú pháp không hợp lệ."
+ "abusefilter-http-error": "Đã xuất hiện lỗi HTTP: $1."
}
diff --git a/AbuseFilter/i18n/wa.json b/AbuseFilter/i18n/wa.json
index aa7c11d9..69a76beb 100644
--- a/AbuseFilter/i18n/wa.json
+++ b/AbuseFilter/i18n/wa.json
@@ -6,6 +6,7 @@
]
},
"abusefilter-log-hide-reason": "Råjhon:",
+ "abusefilter-list-edit": "Candjî",
"abusefilter-deleted": "Disfacé",
"abusefilter-tools-reautoconfirm-user": "Uzeu:",
"abusefilter-edit-tools": "Usteyes:",
@@ -59,10 +60,10 @@
"abusefilter-edit-builder-vars-oldsize": "Grandeu di dvant del pådje",
"abusefilter-edit-builder-vars-removedlines": "Royes disfacêyes avou l' candjmint",
"abusefilter-edit-builder-vars-summary": "Rascourti do candjmint",
- "abusefilter-edit-builder-vars-article-id": "ID del pådje",
- "abusefilter-edit-builder-vars-article-ns": "Espåce di lomaedje del pådje",
- "abusefilter-edit-builder-vars-article-text": "Tite del pådje (sins l' espåce di lomaedje)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "Tite del pådje en etir",
+ "abusefilter-edit-builder-vars-page-id": "ID del pådje",
+ "abusefilter-edit-builder-vars-page-ns": "Espåce di lomaedje del pådje",
+ "abusefilter-edit-builder-vars-page-title": "Tite del pådje (sins l' espåce di lomaedje)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "Tite del pådje en etir",
"abusefilter-history-timestamp": "Date",
"abusefilter-history-user": "Uzeu",
"abusefilter-history-flags": "Drapeas",
diff --git a/AbuseFilter/i18n/war.json b/AbuseFilter/i18n/war.json
index 76eff4c8..46fe0a90 100644
--- a/AbuseFilter/i18n/war.json
+++ b/AbuseFilter/i18n/war.json
@@ -61,7 +61,6 @@
"abusefilter-list-options-deleted-show": "Iglakip an mga ginpara nga panara",
"abusefilter-list-options-scope": "Igpakita an mga panara tikang:",
"abusefilter-list-options-scope-local": "Lokal nga wiki",
- "abusefilter-list-options-disabled": "Ginparong an mga panara:",
"abusefilter-list-options-hidedisabled": "Igtago an mga ginparong nga mga panara",
"abusefilter-list-options-submit": "Igpayana",
"abusefilter-tools-reautoconfirm-user": "Gumaramit:",
diff --git a/AbuseFilter/i18n/wuu.json b/AbuseFilter/i18n/wuu.json
index 25d536f3..cb463715 100644
--- a/AbuseFilter/i18n/wuu.json
+++ b/AbuseFilter/i18n/wuu.json
@@ -4,9 +4,9 @@
"飞舞回堂前"
]
},
- "abusefilter-warning": "'''警告:'''侬个行为畀自动识别为有危害性。呒不意义个编辑会畀马上恢复,而过分或者重复个无意义编辑会让侬个账号或IP地址畀查封。如果侬确定本次操作有意义,侬可以再次提交确认。搭侬伊届行为匹配个过滤规则是:$1",
+ "abusefilter-warning": "'''警告:'''侬个行为畀自动识别为有危害性。呒不意义个操作会畀马上恢复,而过分或者重复个无意义编辑会让侬个账号或IP地址畀查封。如果侬确定本次操作有意义,侬可以再次提交确认。搭侬个操作匹配个过滤规则是:$1",
"abusefilter-disallowed": "侬个行为畀自动识别为有害操作并畀禁止。如果侬认为该次编辑是有建设性个,请拿侬要做个事体告诉管理员。搭侬本次行为匹配个过滤规则是:$1",
- "abusefilter-log-entry": "$1:$2来勒$4{{GENDER:$8|执行}}操作“$3”辰光触发着过滤器。采取个动作:$5;过滤器说明:$6",
+ "abusefilter-log-entry": "$1:$2来勒$4{{GENDER:$8|执行}}操作“$3”辰光{{GENDER:$8|触发着}}过滤器。采取个动作:$5;过滤器说明:$6",
"abusefilter-log-entry-withdiff": "$1:$2来勒$4{{GENDER:$8|执行}}操作“$3”辰光触发着过滤器。采取个动作:$5;过滤器说明:$6($7)",
"abusefilter-log-detailedentry-meta": "$1:$2来勒$5{{GENDER:$9|执行}}操作“$4”辰光触发着$3。采取个动作:$6;过滤器说明:$7($8)",
"abusefilter-log-hide-reason": "理由:",
diff --git a/AbuseFilter/i18n/xmf.json b/AbuseFilter/i18n/xmf.json
index a5a27455..730adca6 100644
--- a/AbuseFilter/i18n/xmf.json
+++ b/AbuseFilter/i18n/xmf.json
@@ -31,8 +31,6 @@
"abusefilter-log-hide-hidden": "ამ ცვლილების დამალვა საზოგადოებისათვის",
"abusefilter-log-hide-reason": "სამანჯელი:",
"abusefilter-log-hide-forbidden": "თქვენ ბოროტად გამოყენების ფილტრის ჟურნალის ჩანაწერების დამალვის უფლება არა გაქვთ.",
- "abusefilter-logentry-suppress": "\"[[$1]]\"-ის დამალვა",
- "abusefilter-logentry-unsuppress": "\"[[$1]]\"-ის ჩვენება",
"abusefilter-management": "ბოროტად გამოყენების ფილტრის მართვა",
"abusefilter-list": "ყველა ფილტრი",
"abusefilter-list-id": "ფილტრის ID",
@@ -62,7 +60,6 @@
"abusefilter-list-options-scope-local": "მხოლოდ ადგილობრივი წესები",
"abusefilter-list-options-scope-global": "მხოლოდ გლობალური წესები",
"abusefilter-list-options-scope-all": "ადგილობრივი და გლობალური წესები",
- "abusefilter-list-options-disabled": "გათიშული ფილტრები:",
"abusefilter-list-options-hidedisabled": "დამალეთ გათიშული ფილტრები",
"abusefilter-list-options-submit": "განახლება",
"abusefilter-tools-text": "აქ არის რამდენიმე სხვადასხვა ხელსაწყო, რომელიც დაგეხმარებათ ბოროტად გამოყენების ფილტრებთან მუშაობაში.",
diff --git a/AbuseFilter/i18n/yi.json b/AbuseFilter/i18n/yi.json
index e930b9a9..d90288a1 100644
--- a/AbuseFilter/i18n/yi.json
+++ b/AbuseFilter/i18n/yi.json
@@ -12,7 +12,6 @@
"abusefilter-desc": "ווענדט אויטאמאטישע הייריסטיק צו רעדאקטירונגען",
"abusefilter": "שלעכט־באניצן פילטער קאנפיגוראציע",
"abuselog": "שלעכט־באניצן לאג",
- "abusefilter-mustbeeditor": "צוליב זיכערהייט־גרונטן, קענען נאר באניצער מיטן רעכט ענדערן מיסברויך־פילטערס ניצן דעם אייבערפלאך.",
"abusefilter-warning": "'''ווארענונג''': די פעולה איז געווארן אויטאמאַטיש אידענטיציפירט אלס שעדלעך.\nאומקאנסטרוקטיווע אַקציעס וועלן גיך ווערן צוריקגעשטעלט,\nאון גראבע אדער איבערגעחזרטע אומקאנסטרוקטיווע רעדאַקטירונג וועלן ברענגען צו בלאקירן אײַער קאנטע אדער IP אדרעס.\nווען איר האַלט אַז די רעדאַקטירונג איז יא קאנסטרוקטיוו, מעגט איר קליקן \"אויפהיטן\" נאכאַמאָל צו באַשטעטיגן זי.\nא קורצע באַשרייבונג פונעם כלל וואס איז געבראכן: $1",
"abusefilter-disallowed": "די אקציע האט מען אידענטיפֿיצירט אויטאמאטיש ווי שעדלעך, און דעריבער גע'אַסרט.\nווען איר האַלט אַז די רעדאַקטירונג איז יא קאנסטרוקטיוו, מעגט איר קליקן \"אויפהיטן\" נאכאַמאָל צו באַשטעטיגן זי.\nא קורצע באַשרייבונג פונעם כלל וואס איז געבראכן: $1",
"abusefilter-blocked-display": "די פעולה ווערט גערעכנט שעדלעך,\nאון מען האט אײַך פארמײַדט פון אויספירן זי.\nדערצו, כדי שיצן {{SITENAME}}, אײַער באניצער קאנטע און אלע אסאציאירטע IP אדרעסן זענען געווארן בלאקירט פון רעדאקטירן.\nIf this has occurred in error, please contact an administrator.\nA brief description of the abuse rule which your action matched is: $1",
@@ -41,6 +40,8 @@
"abusefilter-log-search-filter": "פֿילטער נומערן (שיידל מיט רערן '|')",
"abusefilter-log-search-title": "טיטל:",
"abusefilter-log-search-wiki": "וויקי:",
+ "abusefilter-log-search-impact-all": "אלע פעולות",
+ "abusefilter-log-search-action-taken-any": "יעדע",
"abusefilter-log-search-submit": "זוכן",
"abusefilter-log-detailedentry-global": "גלאבאלער פֿילטער $1",
"abusefilter-log-detailedentry-local": "פֿילטער $1",
@@ -51,8 +52,9 @@
"abusefilter-log-details-var": "וואַריאַבל",
"abusefilter-log-details-val": "ווערט",
"abusefilter-log-details-vars": "אקציע פאראמעטערס",
- "abusefilter-log-details-private": "פריוואטע דאטן",
+ "abusefilter-log-details-private": "פריוואטע לאג פרטים",
"abusefilter-log-details-ip": "IP־אדרעס פון איניציאטאר",
+ "abusefilter-log-details-checkuser": "בודק זײַן באניצער",
"abusefilter-log-noactions": "קיין",
"abusefilter-log-details-diff": "ענדערונגען אדורכגעפירט ביי רעדאקטירן",
"abusefilter-log-linkoncontribs": "שלעכט־באניצן לאג",
@@ -63,8 +65,6 @@
"abusefilter-log-hide-legend": "באהאלטן לאגבוך איינגאב",
"abusefilter-log-hide-id": "לאגבוך איינגאב ID:",
"abusefilter-log-hide-reason": "אורזאַך:",
- "abusefilter-logentry-suppress": "האט פארבארגן \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "האט געוויזן \"[[$1]]\"",
"abusefilter-management": "שעדיקונג־פילטער פארוואלטונג",
"abusefilter-list": "אלע פֿילטערס",
"abusefilter-list-id": "פֿילטער נומער",
@@ -96,7 +96,6 @@
"abusefilter-list-options-scope-local": "נאר לאקאַלע כללים",
"abusefilter-list-options-scope-global": "נאר גלאבאלע כללים",
"abusefilter-list-options-scope-all": "לאקאלע און גלאבאלע רעגלען",
- "abusefilter-list-options-disabled": "אומאקטיווירטע פֿילטערס:",
"abusefilter-list-options-hidedisabled": "באהאלטן אומאקטיווירטע פילטערס",
"abusefilter-list-options-submit": "דערהײַנטיקן",
"abusefilter-tools-expr": "אויסדרוק־קאנטראלירער",
@@ -130,8 +129,7 @@
"abusefilter-edit-action-disallow": "פארמײַדן באניצער פון אויספירן די פעולה",
"abusefilter-edit-action-tag": "מארקירן די רעדאקטירורונג פאר שפעטערער רעצענסיע",
"abusefilter-edit-throttle-count": "צאל ערלויבטע אקציעס:",
- "abusefilter-edit-throttle-period": "תקופה פון צײַט:",
- "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|סעקונדע|סעקונדעס}}",
+ "abusefilter-edit-throttle-period": "תקופה פון צײַט (אין סעקונדן):",
"abusefilter-edit-warn-message": "סיסטעם־מעלדונג פאר ווארענונג:",
"abusefilter-edit-warn-other": "אנדער מעלדונג",
"abusefilter-edit-warn-other-label": "בלאטנאמען פון אנדער מעלדונג:\n:''(אן מעדיעוויקי פרעפיקס)''",
@@ -139,6 +137,7 @@
"abusefilter-edit-warn-preview": "פאראויסזען געקליבענע מעלדונג",
"abusefilter-edit-warn-edit": "שאפן/רעדאקטירן געקליבענע מעלדונג",
"abusefilter-edit-tag-tag": "גילטיקע [[Special:Tags|טאגן]] (איינער אין א שורה):",
+ "abusefilter-block-anon": "בלאקירן אַנאנימע באַניצער",
"abusefilter-edit-denied": "איר קענט נישט באקוקן פרטים פון דעם פילטער, ווייל ער איז באהאלטן פונעם קהל.",
"abusefilter-edit-main": "פילטער פאראמעטערס",
"abusefilter-edit-done-subtitle": "פילטער רעדאקטירט",
@@ -161,8 +160,8 @@
"abusefilter-edit-builder-op-arithmetic-divide": "צעטיילן (/)",
"abusefilter-edit-builder-op-arithmetic-pow": "פאטענץ (**)",
"abusefilter-edit-builder-group-op-comparison": "פארגלייכס אפעראטארן",
- "abusefilter-edit-builder-op-comparison-equal": "גלייך צו (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "נישט גלייך צו (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "ווערט איז גלייך צו (==)",
+ "abusefilter-edit-builder-op-comparison-notequal": "ווערט איז נישט גלייך צו (!=)",
"abusefilter-edit-builder-op-comparison-lt": "ווינציקער ווי (<)",
"abusefilter-edit-builder-op-comparison-gt": "גרעסער ווי (>)",
"abusefilter-edit-builder-op-comparison-lte": "קלע נער אדער גלײַך (<=)",
@@ -188,19 +187,18 @@
"abusefilter-edit-builder-vars-oldsize": "אלטע בלאט גרייס",
"abusefilter-edit-builder-vars-removedlines": "שורות אראפגענומען בײַם רעדאקטירן",
"abusefilter-edit-builder-vars-summary": "רעדאקטירונג רעזומע/סיבה",
- "abusefilter-edit-builder-vars-article-id": "בלאט נומער",
- "abusefilter-edit-builder-vars-article-ns": "בלאט נאמענטייל",
- "abusefilter-edit-builder-vars-article-text": "בלאט טיטל (אן נאמענטייל)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "פֿולער בלאטנאמען",
- "abusefilter-edit-builder-vars-article-views": "בלאט באקוקן",
+ "abusefilter-edit-builder-vars-page-id": "בלאט נומער",
+ "abusefilter-edit-builder-vars-page-ns": "בלאט נאמענטייל",
+ "abusefilter-edit-builder-vars-page-title": "בלאט טיטל (אן נאמענטייל)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "פֿולער בלאטנאמען",
"abusefilter-edit-builder-vars-movedfrom-id": "בלאט־נומער פון מקור בלאט",
"abusefilter-edit-builder-vars-movedfrom-ns": "נאמענטייל פון מקור בלאט",
- "abusefilter-edit-builder-vars-movedfrom-text": "טיטל פון מקור־בלאט",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "פולשטענדיקער נאמען פון מקור־בלאט",
+ "abusefilter-edit-builder-vars-movedfrom-title": "טיטל פון מקור־בלאט",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "פולשטענדיקער נאמען פון מקור־בלאט",
"abusefilter-edit-builder-vars-movedto-id": "בלאט־נומער פון ציל בלאט",
"abusefilter-edit-builder-vars-movedto-ns": "נאמענטייל פון ציל בלאט",
- "abusefilter-edit-builder-vars-movedto-text": "טיטל פון ציל בלאט",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "פולשטענדיקער טיטל פון ציל בלאט",
+ "abusefilter-edit-builder-vars-movedto-title": "טיטל פון ציל בלאט",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "פולשטענדיקער טיטל פון ציל בלאט",
"abusefilter-edit-builder-vars-user-editcount": "רעדאקטירונג צאל פון באניצער",
"abusefilter-edit-builder-vars-user-age": "עלטער פון דער באניצער־קאנטע",
"abusefilter-edit-builder-vars-user-name": "נאמען פון באניצער־קאנטע",
@@ -244,7 +242,7 @@
"abusefilter-revert-periodstart": "תקופה אָנהייב:",
"abusefilter-revert-periodend": "תקופה סוף",
"abusefilter-revert-search": "קלויבט פעולות",
- "abusefilter-revert-filter": "פֿילטער:",
+ "abusefilter-revert-filter": "פֿילטער נומער:",
"abusefilter-revert-confirm": "באַשטעטיקן",
"abusefilter-revert-reasonfield": "אורזאַך:",
"abusefilter-test-submit": "פּרובירן",
@@ -263,7 +261,6 @@
"abusefilter-topnav-log": "שלעכט־באניצן לאג",
"abusefilter-topnav-import": "אימפארטירן פֿילטער",
"abusefilter-log-name": "פֿילטער לאגבוך",
- "abusefilter-log-entry-modify": "געענדערט $1 ($2)",
"abusefilter-log-noresults": "קיין רעזולטאטן",
"abusefilter-diff-title": "אונטערשייד צווישן ווערסיעס",
"abusefilter-diff-item": "איינהייט",
@@ -276,6 +273,5 @@
"abusefilter-diff-next": "נײַערע ענדערונג",
"abusefilter-import-submit": "אימפארטירן דאַטן",
"abusefilter-group-default": "גרונטלעך",
- "abusefilter-http-error": "א HTTP גרײַז האט פאַסירט: $1",
- "apierror-abusefilter-badsyntax": "דער פֿילטער האט אומגילטיגן סינטאקס."
+ "abusefilter-http-error": "א HTTP גרײַז האט פאַסירט: $1"
}
diff --git a/AbuseFilter/i18n/yo.json b/AbuseFilter/i18n/yo.json
index 61bed6b6..0c354e5d 100644
--- a/AbuseFilter/i18n/yo.json
+++ b/AbuseFilter/i18n/yo.json
@@ -1,10 +1,10 @@
{
"@metadata": {
"authors": [
- "Demmy"
+ "Demmy",
+ "Wikicology"
]
},
- "abusefilter-mustbeeditor": "Fún ìdáàbò, àwọn oníṣe tí wọ́n ní ẹ̀tọ́ láti ṣàtúnṣe àwọn ajọ̀ ìbàjẹ́ nìkan ni wọ́n le lo ìfojúkojú yìí.",
"abusefilter-disallowed": "Ìgbéṣe yìí ti jẹ́ dídámọ̀ fúnrararẹ̀ bíi eléwu, bíi bẹ́ẹ̀ ó ti jẹ́ dídílọ́nà.\nTí ẹ bá nígbàgbọ́ pé àtúnṣe yín jẹ́ awúlò, ẹ jọ̀wọ́ ẹ fi tó olùmójútó kan létí ohun tí ẹ fẹ́ ṣe.\nÌjúwe ní sókí òfin ìbàjẹ́ tí ó bá ìgbéṣe yín mu ni: $1",
"abusefilter-blocked-display": "Ìgbéṣe yìí ti jẹ́ dídámọ̀ fúnrararẹ̀ bíi eléwu, bíi bẹ́ẹ̀ ẹ ti jẹ́ dídílọ́nà láti ṣeé.\nBákannáà láti dá àbò bo {{SITENAME}}, àpamọ́ oníṣe yín àti gbogbo àwọn àdírẹ́sì IP tí wọ́n jọṣe mọ́ọn ti jẹ́ dídílọ́nà láti ṣàtúnṣe.\nTó bá jẹ́ pé àsìṣe ló ṣẹlẹ̀, ẹ jọ̀wọ́ ẹ fi tó olùmójútó kan létí.\nÌjúwe ní sókí òfin ìbàjẹ́ tí ó bá ìgbéṣe yín mu ni: $1",
"abusefilter-log-search-user": "Oníṣe:",
@@ -26,7 +26,7 @@
"abusefilter-edit-status-label": "Àwọn statistiki:",
"abusefilter-edit-deleted": "Fàlàsí bíi píparẹ́",
"abusefilter-edit-lastmod-text": "$1 latọwọ́ $2",
- "abusefilter-edit-throttle-seconds": "{{PLURAL:$1|ìṣẹ́júkejì|ìṣẹ́júkejì}} $1",
+ "abusefilter-edit-throttle-page": "Ojú ewé",
"abusefilter-edit-warn-other": "Ìránṣẹ́ míràn",
"abusefilter-edit-warn-actions": "Àwọn ìgbéṣe:",
"abusefilter-edit-warn-preview": "Àkọ́yẹ̀wò ìránṣẹ́ ṣíṣàyàn",
@@ -56,7 +56,7 @@
"abusefilter-edit-builder-vars-action": "Ìgbéṣe",
"abusefilter-edit-builder-vars-newsize": "Ìtóbi ojúewé tuntun",
"abusefilter-edit-builder-vars-removedlines": "Àwọn ìlà tó jẹ́ yíyọkúrò nínú àtúnṣe",
- "abusefilter-edit-builder-vars-article-id": "Nọ́mbà Ìdámọ̀ Ojúewé",
+ "abusefilter-edit-builder-vars-page-id": "Nọ́mbà Ìdámọ̀ Ojúewé",
"abusefilter-history-foruser": "Àwọn ìyípadà látọwọ́ $1",
"abusefilter-history-hidden": "Bíbòmọ́lẹ̀",
"abusefilter-history-enabled": "Gbígbàláyè",
diff --git a/AbuseFilter/i18n/yue.json b/AbuseFilter/i18n/yue.json
index 23ae998c..f59d3fb3 100644
--- a/AbuseFilter/i18n/yue.json
+++ b/AbuseFilter/i18n/yue.json
@@ -7,16 +7,16 @@
"Waihorace",
"Wong128hk",
"Matma Rex",
- "Deryck Chan"
+ "Deryck Chan",
+ "Hello903hello"
]
},
"abusefilter-desc": "應用自動行為到編輯",
"abusefilter": "濫用過濾器設定",
"abuselog": "濫用紀錄",
"abusefilter-intro": "歡迎到濫用過濾器管理界面。\n濫用過濾器係一個自動化軟件程序應用自動行為到任何動作度。\n呢個界面顯示一個定義咗嘅過濾器,容許去改佢哋。",
- "abusefilter-mustbeeditor": "基於保安理由,淨係得有權限改濫用過濾器嘅用戶先可以用呢個界面。",
- "abusefilter-warning": "'''警告''': 呢個動作已經自動認定咗做有害嘅。\n冇建設性嘅編輯將會好快噉還原,\n同埋過份或者重覆嘅編輯會令到你個戶口或者電腦封鎖。\n如果你相信呢個編輯係有建設性嘅,你可以撳多一下遞交去確認佢。\n一個簡明濫用條件嘅描述同你嘅動作配合嘅係: $1",
- "abusefilter-disallowed": "呢個動作已經自動認定咗做有害嘅,\n已經唔容許。\n如果你相信呢個編輯係有建設性嘅,請同管理員聯絡,通知佢哋你會試吓點做。\n一個簡明濫用條件嘅描述同你嘅動作配合嘅係: $1",
+ "abusefilter-warning": "'''警告:'''爾個動作已經自動認定咗做有害嘅。\n無建設性嘅動作將會好快噉還原,\n同埋過份或者重覆嘅編輯會令到你個戶口或者電腦封鎖。\n如果你相信爾個動作係有建設性嘅,你可以遞交多一次去確認佢。\n一個簡明濫用條件嘅描述同你嘅動作配合嘅係: $1",
+ "abusefilter-disallowed": "爾個動作已經自動認定咗做有害嘅,已經唔容許。\n如果你相信爾個動作係有建設性嘅,請同管理員聯絡,通知佢哋你啱啱想做物。\n一個簡明濫用條件嘅描述同你嘅動作配合嘅係: $1",
"abusefilter-blocked-display": "呢個動作已經自動認定咗做有害嘅,\n你已經被防止執行佢。\n除此之外,要保謢{{SITENAME}},你嘅戶口同全部有關嘅IP地址已經全部封鎖,唔畀編輯。\n如果出錯,請同管理員聯絡。\n一個簡明濫用條件嘅描述同你嘅動作配合嘅係: $1",
"abusefilter-degrouped": "呢個動作已經自動認定咗做有害嘅,\n結果,佢已經唔容許,重有,你個戶口可能已經被盜用,所有嘅權限已經拎走咗。\n如果你相信呢個係有錯嘅話,請聯絡事務員為呢個動作解釋,你嘅權限可能會恢復。\n一個簡明濫用條件嘅描述同你嘅動作配合嘅係: $1",
"abusefilter-autopromote-blocked": "呢個動作已經自動認定咗做有害嘅,已經唔容許。\n除此之外,為咗保安理由,一啲開戶口嘅權限已經響你個戶口度拎走咗。\n一個簡明濫用條件嘅描述同你嘅動作配合嘅係: $1",
@@ -44,11 +44,11 @@
"abusefilter-log-summary": "呢個紀錄列示咗由過濾器捉到嘅全部動作。",
"abusefilter-log-search": "搵濫用紀錄",
"abusefilter-log-search-user": "用戶:",
- "abusefilter-log-search-filter": "過濾器ID:",
+ "abusefilter-log-search-filter": "過濾器ID(用條豎綫 | 隔開):",
"abusefilter-log-search-title": "標題:",
"abusefilter-log-search-submit": "搵",
- "abusefilter-log-entry": "$1: $2觸發咗濫用過濾器,響$4做咗『$3』動作。\n做咗嘅嘢: $5;\n過濾器描述: $6",
- "abusefilter-log-detailedentry-meta": "$1: $2觸發咗$3,響$5做咗『$4』動作。\n做咗嘅嘢: $6;\n過濾器描述: $7 ($8)",
+ "abusefilter-log-entry": "$1:$2響《$4》{{GENDER:$8|做緊}}「$3」動作嗰陣,{{GENDER:$8|觸發咗}}個濫用過濾器。\n做咗嘅嘢:$5;\n過濾器描述:$6",
+ "abusefilter-log-detailedentry-meta": "$1:$2響《$5》{{GENDER:$9|做緊}}「$4」動作嗰陣,{{GENDER:$9|觸發咗}}$3。\n做咗嘅嘢:$6;\n過濾器描述:$7($8)",
"abusefilter-log-detailedentry-global": "全域過濾器$1",
"abusefilter-log-detailedentry-local": "過濾器$1",
"abusefilter-log-detailslink": "細節",
@@ -56,12 +56,14 @@
"abusefilter-log-details-var": "變數",
"abusefilter-log-details-val": "值",
"abusefilter-log-details-vars": "動作參數",
- "abusefilter-log-details-private": "私人資料",
+ "abusefilter-log-details-private": "私人日誌資料",
"abusefilter-log-details-ip": "原生IP地址",
"abusefilter-log-noactions": "無",
"abusefilter-log-details-diff": "響編輯嘅更動",
"abusefilter-log-linkoncontribs": "濫用紀錄",
- "abusefilter-log-linkoncontribs-text": "呢位用戶嘅濫用紀錄",
+ "abusefilter-log-linkoncontribs-text": "{{GENDER:$1|爾位用戶}}嘅濫用紀錄",
+ "abusefilter-log-linkonhistory": "去睇濫用過濾器紀錄",
+ "abusefilter-log-linkonhistory-text": "睇呢頁嘅濫用過濾器紀錄",
"abusefilter-management": "濫用過濾器管理",
"abusefilter-list": "全部過濾器",
"abusefilter-list-id": "過濾器ID",
@@ -88,7 +90,6 @@
"abusefilter-list-options-deleted-only": "只係顯示刪咗嘅過濾器",
"abusefilter-list-options-deleted-hide": "隱藏刪咗嘅過濾器",
"abusefilter-list-options-deleted-show": "包含刪咗嘅過濾器",
- "abusefilter-list-options-disabled": "閂咗嘅過濾器:",
"abusefilter-list-options-hidedisabled": "隱藏閂咗嘅過濾器",
"abusefilter-list-options-submit": "更新",
"abusefilter-tools-text": "呢度有啲有用嘅工具去將濫用過濾器公式化同除錯。",
@@ -107,7 +108,6 @@
"abusefilter-edit-status-label": "統計:",
"abusefilter-edit-status": "響之前$1{{PLURAL:$1|次|次}}動作,呢個過濾器已經配合咗$2次 ($3%)。",
"abusefilter-edit-status-profile": "響之前$1{{PLURAL:$1|次|次}}動作,呢個過濾器已經配合咗$2次 ($3%)。\n平均,佢嘅運行時間係$4毫秒,用左$5{{PLURAL:$5|次|次}}限制。",
- "abusefilter-edit-throttled": "'''警告''': 呢個過濾器因為安全緣故,已經自動噉閂咗。\n佢到達咗配合多過$1%嘅動作。",
"abusefilter-edit-new": "新過濾器",
"abusefilter-edit-save": "保存過濾器",
"abusefilter-edit-id": "過濾器ID:",
@@ -133,15 +133,16 @@
"abusefilter-edit-action-tag": "摘編輯再睇落去",
"abusefilter-edit-throttle-count": "可以容許嘅動作:",
"abusefilter-edit-throttle-period": "時段:",
- "abusefilter-edit-throttle-seconds": "$1秒",
- "abusefilter-edit-throttle-groups": "由組截住:\n:''(一行一個,用逗號組合)''",
+ "abusefilter-edit-throttle-groups": "由組截住:",
+ "abusefilter-edit-throttle-ip": "IP地址",
+ "abusefilter-edit-throttle-editcount": "編輯次數",
"abusefilter-edit-warn-message": "用系統訊息去警告:",
"abusefilter-edit-warn-other": "其它訊息",
"abusefilter-edit-warn-other-label": "其它訊息嘅頁名:\n:''(無MediaWiki字頭)''",
"abusefilter-edit-warn-actions": "動作:",
- "abusefilter-edit-warn-preview": "預覽揀咗嘅訊息",
+ "abusefilter-edit-warn-preview": "顯示/收埋揀咗嘅訊息嘅預覽",
"abusefilter-edit-warn-edit": "開/編輯揀咗嘅訊息",
- "abusefilter-edit-tag-tag": "[[Special:Tags|摘]]嘅名 (一行一個):",
+ "abusefilter-edit-tag-tag": "[[Special:Tags|摘]]嘅名:",
"abusefilter-edit-denied": "你唔係以去睇呢個過濾器嘅細節,因為響公共顯示度隱藏咗。",
"abusefilter-edit-main": "過濾器參數",
"abusefilter-edit-done-subtitle": "改咗嘅過濾器",
@@ -169,8 +170,8 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "模數 (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "次方 (**)",
"abusefilter-edit-builder-group-op-comparison": "比較運算符",
- "abusefilter-edit-builder-op-comparison-equal": "等於 (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "唔等於 (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "值等於(==)",
+ "abusefilter-edit-builder-op-comparison-notequal": "值唔等於(!=)",
"abusefilter-edit-builder-op-comparison-lt": "細過 (<)",
"abusefilter-edit-builder-op-comparison-gt": "大過 (>)",
"abusefilter-edit-builder-op-comparison-lte": "細過或等於 (<=)",
@@ -217,18 +218,18 @@
"abusefilter-edit-builder-vars-oldsize": "版嘅舊大細",
"abusefilter-edit-builder-vars-removedlines": "編輯拎走咗行數",
"abusefilter-edit-builder-vars-summary": "編輯摘要/原因",
- "abusefilter-edit-builder-vars-article-id": "頁ID",
- "abusefilter-edit-builder-vars-article-ns": "頁空間名",
- "abusefilter-edit-builder-vars-article-text": "頁名 (無空間名)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "完整頁標題",
+ "abusefilter-edit-builder-vars-page-id": "頁ID",
+ "abusefilter-edit-builder-vars-page-ns": "頁空間名",
+ "abusefilter-edit-builder-vars-page-title": "頁名 (無空間名)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "完整頁標題",
"abusefilter-edit-builder-vars-movedfrom-id": "移動來源頁ID",
"abusefilter-edit-builder-vars-movedfrom-ns": "移動來源頁空間名",
- "abusefilter-edit-builder-vars-movedfrom-text": "移動來源頁標題",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "移動來源頁完整標題",
+ "abusefilter-edit-builder-vars-movedfrom-title": "移動來源頁標題",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "移動來源頁完整標題",
"abusefilter-edit-builder-vars-movedto-id": "移動目的頁ID",
"abusefilter-edit-builder-vars-movedto-ns": "移動目的頁空間名",
- "abusefilter-edit-builder-vars-movedto-text": "移動目的頁完整標題",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "移動目的頁完整標題",
+ "abusefilter-edit-builder-vars-movedto-title": "移動目的頁完整標題",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "移動目的頁完整標題",
"abusefilter-edit-builder-vars-user-editcount": "用戶編輯次數",
"abusefilter-edit-builder-vars-user-age": "用戶戶口年期",
"abusefilter-edit-builder-vars-user-name": "用戶戶口名",
@@ -284,7 +285,7 @@
"abusefilter-exception-regexfailure": "響字元 $1 度 \"$3\" 正表式錯誤: \"$2\"",
"abusefilter-exception-overridebuiltin": "響字元 $1 度有非法覆蓋全建變數 \"$2\"。",
"abusefilter-exception-outofbounds": "響字元 $1 度有未存在嘅表項 $2 (表項大細 = $3)。",
- "abusefilter-exception-notlist": "響字元 $1 度非陣列需要陣列項目。",
+ "abusefilter-exception-notarray": "響字元 $1 度非陣列需要陣列項目。",
"abusefilter-action-tag": "標籤",
"abusefilter-action-throttle": "控頻",
"abusefilter-action-warn": "警告",
@@ -300,14 +301,14 @@
"abusefilter-revert-periodstart": "開始範圍:",
"abusefilter-revert-periodend": "完結範圍:",
"abusefilter-revert-search": "揀動作",
- "abusefilter-revert-filter": "過濾器:",
- "abusefilter-revert-preview-intro": "下面係呢個動作將會復原由濫用過濾器嘅動作。\n請小心檢查,再撳『確認』去確認你嘅選擇。",
+ "abusefilter-revert-filter": "過濾器ID:",
+ "abusefilter-revert-preview-intro": "下面係爾個動作將會復原由濫用過濾器嘅動作。\n請小心檢查,再撳「{{int:abusefilter-revert-confirm}}」去確認你嘅選擇。",
"abusefilter-revert-confirm": "確認",
"abusefilter-revert-success": "你已經復原咗由[[Special:AbuseFilter/$1|過濾器$2]]做咗嘅全部動作。",
"abusefilter-revert-reason": "自動復原由過濾器$1做咗嘅全部動作。\n畀咗嘅原因: $2",
- "abusefilter-revert-reasonfield": "復原嘅原因:",
+ "abusefilter-revert-reasonfield": "原因:",
"abusefilter-test": "用之前嘅編輯去試過濾器",
- "abusefilter-test-intro": "呢一版容許你用下面輸入個盒去檢查針對之前$1次更改嘅過濾器。\n要載入現有嘅過濾器,響編輯盒下面盒嘅輸入佢嘅過濾器ID,再撳『載入』掣。",
+ "abusefilter-test-intro": "爾一版容許你用下面輸入個盒去檢查針對之前$1次{{PLURAL:$1|更改}}嘅過濾器。\n要載入現有嘅過濾器,喺編輯盒下面嘅盒輸入佢嘅過濾器ID,再撳「{{int:abusefilter-test-load}}」掣。",
"abusefilter-test-legend": "試緊過濾器",
"abusefilter-test-load-filter": "載入過濾器ID:",
"abusefilter-test-submit": "測試",
@@ -317,7 +318,7 @@
"abusefilter-test-period-end": "更改之前嘅嘢:",
"abusefilter-test-page": "對頁更改過嘅嘢:",
"abusefilter-test-shownegative": "顯示唔配合過濾器嘅更改",
- "abusefilter-test-syntaxerr": "你所輸入嘅過濾器有語法錯誤。\n你可以撳『檢查語法』掣去收一個完整嘅解釋。",
+ "abusefilter-test-syntaxerr": "你所輸入嘅過濾器有語法錯誤。\n你可以撳「{{int:abusefilter-edit-check}}」掣去收一個完整嘅解釋。",
"abusefilter-changeslist-examine": "查吓",
"abusefilter-examine": "查個別更改",
"abusefilter-examine-intro": "呢一版容許你去查吓一次個別更改由濫用過濾器產生嘅變數,再由過濾器測試。",
@@ -344,7 +345,6 @@
"abusefilter-topnav-import": "倒入過濾器",
"abusefilter-log-name": "濫用過濾器紀錄",
"abusefilter-log-header": "呢個紀錄顯示過濾器更改過嘅摘要。\n要知更多細節,睇之前過濾器更改嘅[[Special:AbuseFilter/history|表]]。",
- "abusefilter-log-entry-modify": "改咗 $1 ($2)",
"abusefilter-diff-title": "唔同版本之間嘅差異",
"abusefilter-diff-item": "項目",
"abusefilter-diff-version": "響 $1 由 $2 做嘅版本",
diff --git a/AbuseFilter/i18n/zgh.json b/AbuseFilter/i18n/zgh.json
new file mode 100644
index 00000000..8b573350
--- /dev/null
+++ b/AbuseFilter/i18n/zgh.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mdb897"
+ ]
+ },
+ "abusefilter-edit-throttle-creationdate": "ⴰⴽⵓⴷ ⵏ ⵓⵎⴰⴽⴽⴰⵢ ⴷⴰⵔ ⵜⵓⴳⵉ ⵏ ⵓⵎⵉⴹⴰⵏ"
+}
diff --git a/AbuseFilter/i18n/zh-hans.json b/AbuseFilter/i18n/zh-hans.json
index 2f6ba785..eece8148 100644
--- a/AbuseFilter/i18n/zh-hans.json
+++ b/AbuseFilter/i18n/zh-hans.json
@@ -42,14 +42,19 @@
"EagerLin",
"Wmr",
"逆襲的天邪鬼",
- "WhitePhosphorus"
+ "WhitePhosphorus",
+ "A2093064",
+ "NeverBehave",
+ "JerryLiu",
+ "夢蝶葬花",
+ "A Chinese Wikipedian"
]
},
"abusefilter-desc": "对编辑行为自动进行条件判定",
"abusefilter": "滥用过滤器配置",
"abuselog": "滥用日志",
"abusefilter-intro": "欢迎访问防滥用过滤器管理界面。防滥用过滤器是一个可以针对所有最近编辑动作进行自动化判断的软件系统。本界面包含了现有过滤器的列表,并允许管理人员修改它们。",
- "abusefilter-mustbeeditor": "出于安全考虑,只有拥有编辑防滥用过滤器权限的用户方可使用本界面。",
+ "abusefilter-mustviewprivateoredit": "出于安全考虑,只有拥有查看私有防滥用过滤器或修改过滤器权限的用户方可使用本界面。",
"abusefilter-warning": "'''警告:'''此操作已被自动识别为有害。无意义的操作会被迅速地回退,而过分或重复的无意义编辑会导致您的帐户或IP地址遭到封禁。如果您确信本次操作是有意义的,您可以再次点击提交以确认它。与您此次行为所匹配的过滤规则概述如下:$1",
"abusefilter-disallowed": "此操作已被自动识别为有害,并因此不被允许。如果您认为您的该次编辑是有意义的,请联系管理员,并告知他们您尝试做到的事。与您此次行为所匹配的过滤规则概述如下:$1",
"abusefilter-blocked-display": "系统已自动将您的操作识别为有害动作,故已阻止该操作。除此之外,为了保护{{SITENAME}},您的用户帐户以及所有相关联的IP地址都被禁止进行编辑。如果您认为这是系统误判,请联系管理员。与您此次行为所匹配的过滤规则概述如下:$1",
@@ -64,6 +69,7 @@
"right-abusefilter-log": "查看滥用日志",
"right-abusefilter-log-detail": "查看详细滥用日志",
"right-abusefilter-private": "查看滥用日志中的私有数据",
+ "right-abusefilter-private-log": "查看防滥用过滤器私有详情访问日志",
"right-abusefilter-modify-restricted": "修改包含受限动作的防滥用过滤器",
"right-abusefilter-revert": "撤销指定防滥用过滤器作出的所有更改",
"right-abusefilter-view-private": "查看被标记为私有的防滥用过滤器",
@@ -76,6 +82,7 @@
"action-abusefilter-log": "查看滥用日志",
"action-abusefilter-log-detail": "查看详细滥用日志",
"action-abusefilter-private": "查看滥用日志中的私有数据",
+ "action-abusefilter-private-log": "查看防滥用过滤器私有详情访问日志",
"action-abusefilter-modify-restricted": "以有限的操作修改防滥用过滤器",
"action-abusefilter-revert": "还原指定防滥用过滤器作出的所有更改",
"action-abusefilter-view-private": "查看被标记为私有的防滥用过滤器",
@@ -87,10 +94,19 @@
"abusefilter-log-search-filter": "过滤器ID(以竖线分隔):",
"abusefilter-log-search-title": "标题:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "影响:",
+ "abusefilter-log-search-impact-all": "所有操作",
+ "abusefilter-log-search-impact-saved": "仅保存的更改",
+ "abusefilter-log-search-impact-not-saved": "没有保存的更改",
"abusefilter-log-search-entries-label": "可见性:",
"abusefilter-log-search-entries-all": "所有记录",
"abusefilter-log-search-entries-hidden": "只显示隐藏记录",
"abusefilter-log-search-entries-visible": "只显示可见记录",
+ "abusefilter-log-search-action-label": "触发的操作:",
+ "abusefilter-log-search-action-other": "其他",
+ "abusefilter-log-search-action-any": "任何",
+ "abusefilter-log-search-action-taken-label": "采取的行动:",
+ "abusefilter-log-search-action-taken-any": "任何",
"abusefilter-log-search-submit": "搜索",
"abusefilter-log-entry": "$1:$2在$4{{GENDER:$8|执行}}操作“$3”时{{GENDER:$8|触发}}了过滤器。采取的行动:$5;过滤器描述:$6",
"abusefilter-log-entry-withdiff": "$1:$2在$4{{GENDER:$8|执行}}操作“$3”时{{GENDER:$8|触发}}了过滤器。采取的行动:$5;过滤器描述:$6($7)",
@@ -104,29 +120,42 @@
"abusefilter-log-details-var": "变量",
"abusefilter-log-details-val": "值",
"abusefilter-log-details-vars": "操作参数",
- "abusefilter-log-details-private": "私有数据",
+ "abusefilter-log-details-private": "私有日志详情",
"abusefilter-log-details-ip": "原始IP地址",
+ "abusefilter-log-details-checkuser": "用户查核",
"abusefilter-log-noactions": "无",
"abusefilter-log-details-diff": "编辑中的更改",
"abusefilter-log-linkoncontribs": "滥用日志",
- "abusefilter-log-linkoncontribs-text": "{{GENDER:$1|本用户}}的滥用日志",
+ "abusefilter-log-linkoncontribs-text": "{{GENDER:$1|此用户}}的滥用日志",
+ "abusefilter-log-linkonhistory": "查看滥用日志",
+ "abusefilter-log-linkonhistory-text": "查看该页面的滥用日志",
"abusefilter-log-hidden": "(记录已被隐藏)",
"abusefilter-log-hidden-implicit": "(因为修订已被删除而隐藏)",
"abusefilter-log-cannot-see-details": "您没有权限去查看这个记录条目的细节。",
+ "abusefilter-log-cannot-see-private-details": "您没有权限查看此记录的私有详情。",
"abusefilter-log-nonexistent": "提供ID的实体不存在。",
- "abusefilter-log-details-hidden": "你无法查看详细信息,因为此条目已被从公共范围隐藏。",
+ "abusefilter-log-details-hidden": "您无法查看详细信息,因为此条目已被从公共范围隐藏。",
+ "abusefilter-log-details-hidden-implicit": "您无法查看此记录的详细信息,因为其与从公开视图中隐藏的修订版本相关联。",
"abusefilter-log-private-not-included": "一个或多个您指定的过滤器ID是私有的。因为您不被允许查看私有过滤器的详情,所以这些过滤器未被寻找。",
"abusefilter-log-hide-legend": "隐藏日志条目",
"abusefilter-log-hide-id": "日志记录ID:",
"abusefilter-log-hide-hidden": "对公众隐藏此日志项目",
"abusefilter-log-hide-reason": "原因:",
+ "abusefilter-log-hide-reason-other": "其他/附加原因:",
"abusefilter-log-hide-forbidden": "您没有权限去隐藏此滥用记录条目。",
- "abusefilter-logentry-suppress": "隐藏“[[$1]]”",
- "abusefilter-logentry-unsuppress": "取消隐藏“[[$1]]”",
+ "abusefilter-log-entry-suppress": "$1{{GENDER:$2|隐藏}}$3",
+ "abusefilter-log-entry-unsuppress": "$1{{GENDER:$2|取消隐藏}}$3",
"logentry-abusefilter-hit": "$1在$3{{GENDER:$2|执行}}操作“$5”时{{GENDER:$2|触发}}了$4。采取的行动:$6($7)",
+ "log-action-filter-abusefilter": "过滤器更改的类型:",
+ "log-action-filter-abusefilter-create": "新过滤器创建",
+ "log-action-filter-abusefilter-modify": "过滤器修改",
+ "log-action-filter-suppress-abuselog": "滥用日志监督",
+ "logentry-abusefilterprivatedetails-access": "$1{{GENDER:$2|访问了}}$3的私有详情",
+ "abusefilterprivatedetails-log-name": "防滥用过滤器私有详情访问日志",
"abusefilter-management": "滥用过滤器管理",
"abusefilter-list": "所有过滤器",
"abusefilter-list-id": "过滤器ID",
+ "abusefilter-list-pattern": "模式",
"abusefilter-list-status": "状态",
"abusefilter-list-public": "公开说明",
"abusefilter-list-consequences": "处理",
@@ -142,6 +171,7 @@
"abusefilter-enabled": "已启用",
"abusefilter-deleted": "已删除",
"abusefilter-disabled": "已停用",
+ "abusefilter-throttled": "已控制",
"abusefilter-hitcount": "$1次触发",
"abusefilter-new": "新建过滤器",
"abusefilter-return": "返回过滤器管理界面",
@@ -155,8 +185,16 @@
"abusefilter-list-options-scope-local": "仅本地规则",
"abusefilter-list-options-scope-global": "仅全域规则",
"abusefilter-list-options-scope-all": "本地和全域规则",
- "abusefilter-list-options-disabled": "已停用过滤器:",
+ "abusefilter-list-options-further-options": "更多选项:",
"abusefilter-list-options-hidedisabled": "隐藏已停用过滤器",
+ "abusefilter-list-options-hideprivate": "隐藏私有过滤器",
+ "abusefilter-list-options-searchfield": "在规则内搜索:",
+ "abusefilter-list-options-searchpattern": "键入模式",
+ "abusefilter-list-options-searchoptions": "搜索模式:",
+ "abusefilter-list-options-search-like": "纯文本查询",
+ "abusefilter-list-options-search-rlike": "正则表达式",
+ "abusefilter-list-options-search-irlike": "不区分大小写的正则表达式",
+ "abusefilter-list-regexerror": "搜索时发生错误:正则表达式语法错误。",
"abusefilter-list-options-submit": "更新",
"abusefilter-tools-text": "这里提供了一些实用的制作和测试防滥用过滤器的工具。",
"abusefilter-tools-expr": "表达式测试器",
@@ -167,10 +205,11 @@
"abusefilter-reautoconfirm-none": "该用户的自动确认状态并没有被撤销过",
"abusefilter-reautoconfirm-notallowed": "您不被允许恢复自动确认状态。",
"abusefilter-reautoconfirm-done": "该账户的自动确认状态已恢复",
- "abusefilter-status": "在最后$1次操作中,有$2($3%){{PLURAL:$2|次}}操作达到了$4次的条件比较上限,有$5($6%){{PLURAL:$5|次}}编辑触发了已启用的过滤器之一。",
+ "abusefilter-status": "在最近$1次{{PLURAL:$1|操作}}中,$2($3%)个过滤器{{PLURAL:$2|已}}达到$4次条件比较上限,$5($6%)次操作{{PLURAL:$5|已}}匹配当前启用的过滤器之一。",
"abusefilter-edit": "编辑滥用过滤器",
"abusefilter-edit-subtitle": "编辑过滤器$1",
"abusefilter-edit-subtitle-new": "创建过滤器",
+ "abusefilter-edit-token-not-match": "编辑尚未保存!请再次尝试保存。",
"abusefilter-edit-oldwarning": "<strong>您正在编辑该过滤器的旧版本。统计中引用的是该过滤器的最新版本。如果您保存您的编辑,所编辑版本之后的所有更改均会被覆盖。</strong> &bull;\n[[Special:AbuseFilter/history/$2|返回该过滤器的历史记录]]。",
"abusefilter-edit-status-label": "统计:",
"abusefilter-edit-status": "在最近的$1次{{PLURAL:$1|操作}}中,有$2($3%)次触发了本过滤器。",
@@ -179,7 +218,9 @@
"abusefilter-edit-new": "新建过滤器",
"abusefilter-edit-save": "保存过滤器",
"abusefilter-edit-id": "过滤器ID:",
+ "abusefilter-edit-switch-editor": "切换编辑器",
"abusefilter-edit-description": "说明:\n:''(公开可见)''",
+ "abusefilter-edit-field-description": "描述",
"abusefilter-edit-group": "过滤器组:",
"abusefilter-edit-flags": "标记:",
"abusefilter-edit-enabled": "启用本过滤器",
@@ -187,6 +228,7 @@
"abusefilter-edit-hidden": "向公众隐藏本过滤器的详细信息",
"abusefilter-edit-global": "全域过滤器",
"abusefilter-edit-rules": "条件:",
+ "abusefilter-edit-field-conditions": "条件",
"abusefilter-edit-notes": "注释:",
"abusefilter-edit-lastmod": "过滤器最后更改:",
"abusefilter-edit-lastmod-text": "$1,$2",
@@ -197,25 +239,48 @@
"abusefilter-edit-action-blockautopromote": "撤销用户的自动确认状态",
"abusefilter-edit-action-degroup": "将用户从所有权限组中移除",
"abusefilter-edit-action-block": "封禁进行编辑的用户和/或IP地址",
+ "abusefilter-edit-action-blocktalk": "封禁用户和/或IP地址编辑自己讨论页的权利",
"abusefilter-edit-action-throttle": "只当用户触犯频率上限后方触发操作",
- "abusefilter-edit-action-rangeblock": "根据用户使用的IP地址进行/16的广域封禁",
+ "abusefilter-edit-action-rangeblock": "封禁用户来源的对应IP段",
"abusefilter-edit-action-tag": "标记该编辑以供进一步检查",
"abusefilter-edit-throttle-count": "允许的操作次数:",
- "abusefilter-edit-throttle-period": "时长:",
- "abusefilter-edit-throttle-seconds": "$1{{PLURAL:$1|秒}}",
- "abusefilter-edit-throttle-groups": "受限群组:\n:''(每行一个,且以半角逗号相连)''",
+ "abusefilter-edit-throttle-period": "期限(秒):",
+ "abusefilter-edit-throttle-groups": "受限群组:",
+ "abusefilter-edit-throttle-ip": "IP地址",
+ "abusefilter-edit-throttle-user": "用户账户",
+ "abusefilter-edit-throttle-range": "/16段",
+ "abusefilter-edit-throttle-creationdate": "账户创建的服务器时间",
+ "abusefilter-edit-throttle-editcount": "编辑计数",
+ "abusefilter-edit-throttle-site": "整个网站",
+ "abusefilter-edit-throttle-page": "页面",
+ "abusefilter-throttle-details": "允许每$2{{PLURAL:$2|秒}}$1次{{PLURAL:$1|操作}},受限群组:$3",
"abusefilter-edit-warn-message": "用作警告的系统消息:",
"abusefilter-edit-warn-other": "其他消息",
"abusefilter-edit-warn-other-label": "其他消息的页面名:\n:''(无须MediaWiki前缀)''",
"abusefilter-edit-warn-actions": "操作:",
- "abusefilter-edit-warn-preview": "预览所选消息",
+ "abusefilter-edit-warn-preview": "显示/隐藏所选消息的预览",
"abusefilter-edit-warn-edit": "创建/编辑所选消息",
- "abusefilter-edit-tag-tag": "欲应用的[[Special:Tags|标签]](每行一个):",
+ "abusefilter-edit-disallow-message": "用作警告的系统消息:",
+ "abusefilter-edit-disallow-other": "其他消息",
+ "abusefilter-edit-disallow-other-label": "其他消息的页面名:\n:''(无须MediaWiki前缀)''",
+ "abusefilter-edit-disallow-actions": "操作:",
+ "abusefilter-edit-disallow-preview": "显示/隐藏所选消息的预览",
+ "abusefilter-edit-disallow-edit": "创建/编辑所选消息",
+ "abusefilter-edit-tag-tag": "要应用的[[Special:Tags|标签]]:",
+ "abusefilter-edit-tag-placeholder": "添加标签(一个一个,或是逗号分隔)",
+ "abusefilter-edit-tag-hidden-placeholder": "添加标签(逗号分隔)",
+ "abusefilter-edit-block-anon-durations": "匿名用户的封禁持续时间:",
+ "abusefilter-edit-block-user-durations": "注册用户的封禁持续时间:",
+ "abusefilter-block-anon": "封禁匿名用户",
+ "abusefilter-block-user": "封禁注册用户",
+ "abusefilter-block-talk": "讨论页已禁止使用",
"abusefilter-edit-denied": "您无法查看该过滤器的详情,因为它已设定为向公众隐藏。",
"abusefilter-edit-main": "过滤器参数",
"abusefilter-edit-done-subtitle": "已编辑过滤器",
"abusefilter-edit-done": "您已成功保存您对[[Special:AbuseFilter/$1|过滤器$3]]的[[Special:AbuseFilter/history/$1/diff/prev/$2|修改]]。",
"abusefilter-edit-badsyntax": "您指定的过滤器中存有语法错误。解析器的输出结果为:<pre>$1</pre>",
+ "abusefilter-edit-missingfields": "需要以下字段,且均为必填项:$1",
+ "abusefilter-edit-deleting-enabled": "您不能标记应用的过滤器为已删除。",
"abusefilter-edit-restricted": "您无法编辑此过滤器,因为其中包含一个或多个受限操作。请寻求拥有相应权限用户的帮助,以协助您作出相应修改。",
"abusefilter-edit-viewhistory": "查看过滤器历史",
"abusefilter-edit-history": "历史:",
@@ -227,7 +292,7 @@
"abusefilter-edit-export": "导出此过滤器",
"abusefilter-edit-syntaxok": "没有检测到语法错误。",
"abusefilter-edit-syntaxerr": "检测到语法错误:$1",
- "abusefilter-edit-bad-tags": "您指定的一个或更多的标签无效。标签不应过短,不应包含特殊字符,且不应被其他软件保留。尝试选择新的标签名",
+ "abusefilter-edit-bad-tags": "一个或更多您指定的标签无效。标签应该较短,但不得包含特殊字符,且不得被其他软件保留。尝试选择新的标签名。",
"abusefilter-edit-notallowed": "您未被允许创建或编辑防滥用过滤器",
"abusefilter-edit-notallowed-global": "您未被允许创建或编辑全域防滥用过滤器",
"abusefilter-edit-notallowed-global-custom-msg": "对于全域过滤器,不支持自定义警告消息",
@@ -240,8 +305,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "模(%)",
"abusefilter-edit-builder-op-arithmetic-pow": "幂(**)",
"abusefilter-edit-builder-group-op-comparison": "比较运算符",
- "abusefilter-edit-builder-op-comparison-equal": "等于(==)",
- "abusefilter-edit-builder-op-comparison-notequal": "不等于(!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "值等于(==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "值和类型等于(===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "值不等于(!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "值和类型不等于(!==)",
"abusefilter-edit-builder-op-comparison-lt": "小于(<)",
"abusefilter-edit-builder-op-comparison-gt": "大于(>)",
"abusefilter-edit-builder-op-comparison-lte": "小于或等于(<=)",
@@ -265,23 +332,30 @@
"abusefilter-edit-builder-funcs-lcase": "字母小写化(lcase)",
"abusefilter-edit-builder-funcs-ucase": "字母大写(ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "规范化易混淆字符(ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "在OR模式中标准化并搜索字符串以获取多个子字符串(ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "在AND模式中标准化并搜索字符串以获取多个子字符串(ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "去除双字节字符(rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "特殊字符比(specialratio)",
"abusefilter-edit-builder-funcs-norm": "规范化(norm)",
"abusefilter-edit-builder-funcs-count": "字符串 X 在字符串 Y 中出现的次数(count)",
"abusefilter-edit-builder-funcs-rcount": "正则表达式 X 在字符串 Y 中匹配的次数(rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "匹配文本中每个捕捉组的正则表达式数组(get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "移除空白字符(rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "移除特殊字符(rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "IP地址是否在范围内?(ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "在字符串中搜索多个子字符串(contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "在OR模式中搜索字符串以获得多个子字符串。(contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "在AND模式中搜索字符串以获得多个子字符串。(contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "检查指定参数是否等同于(===)以下任意参数之一(equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "子字符串(substr)",
"abusefilter-edit-builder-funcs-strpos": "子字符串在字符串中的位置(strpos)",
"abusefilter-edit-builder-funcs-str_replace": "在字符串中替换子字符串(str_replace)",
"abusefilter-edit-builder-funcs-rescape": "转义字符串以在正则表达式中使用 (rescape)",
"abusefilter-edit-builder-funcs-set_var": "设置变量(set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "标准化HTML记录为unicode字符(sanitize)",
"abusefilter-edit-builder-group-vars": "变量",
"abusefilter-edit-builder-vars-accountname": "帐户(创建时)的名称",
"abusefilter-edit-builder-vars-timestamp": "更改的Unix时间戳",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "日志时间戳",
"abusefilter-edit-builder-vars-action": "操作",
"abusefilter-edit-builder-vars-addedlines": "编辑增加的行",
"abusefilter-edit-builder-vars-delta": "编辑前后的大小改变",
@@ -292,19 +366,21 @@
"abusefilter-edit-builder-vars-new-content-model": "新的内容模型",
"abusefilter-edit-builder-vars-removedlines": "编辑移除的行",
"abusefilter-edit-builder-vars-summary": "编辑摘要/原因",
- "abusefilter-edit-builder-vars-article-id": "页面编号",
- "abusefilter-edit-builder-vars-article-ns": "页面名字空间",
- "abusefilter-edit-builder-vars-article-text": "页面标题(不含名字空间)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "完整页面标题",
- "abusefilter-edit-builder-vars-article-views": "页面查看次数",
+ "abusefilter-edit-builder-vars-page-id": "页面编号",
+ "abusefilter-edit-builder-vars-page-ns": "页面名字空间",
+ "abusefilter-edit-builder-vars-page-title": "页面标题(不含名字空间)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "完整页面标题",
+ "abusefilter-edit-builder-vars-page-age": "页面年龄(以秒为单位)",
"abusefilter-edit-builder-vars-movedfrom-id": "移动源页面的页面编号",
"abusefilter-edit-builder-vars-movedfrom-ns": "移动源页面的名字空间",
- "abusefilter-edit-builder-vars-movedfrom-text": "移动源页面的标题",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "移动源页面的完整标题",
+ "abusefilter-edit-builder-vars-movedfrom-title": "移动源页面的标题",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "移动源页面的完整标题",
+ "abusefilter-edit-builder-vars-movedfrom-age": "移动来源页面年龄(以秒为单位)",
"abusefilter-edit-builder-vars-movedto-id": "移动目的页面的页面编号",
"abusefilter-edit-builder-vars-movedto-ns": "移动目的页面的名字空间",
- "abusefilter-edit-builder-vars-movedto-text": "移动目的页面的标题",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "移动目的页面的完整标题",
+ "abusefilter-edit-builder-vars-movedto-title": "移动目的页面的标题",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "移动目的页面的完整标题",
+ "abusefilter-edit-builder-vars-movedto-age": "移动目标页面年龄(以秒为单位)",
"abusefilter-edit-builder-vars-user-editcount": "用户的编辑次数",
"abusefilter-edit-builder-vars-user-age": "用户账户的年龄",
"abusefilter-edit-builder-vars-user-name": "用户账户名称",
@@ -314,10 +390,14 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "电子邮件地址得到确认的时间",
"abusefilter-edit-builder-vars-recent-contributors": "最后十位对该页面贡献的用户",
"abusefilter-edit-builder-vars-first-contributor": "贡献页面的第一位用户",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "最近十位对移动来源页面有贡献的用户",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "第一位对移动来源页面有贡献的用户",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "最近十位对移动目标页面有贡献的用户",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "第一位对移动目标页面有贡献的用户",
"abusefilter-edit-builder-vars-all-links": "新内容中的所有外部链接",
"abusefilter-edit-builder-vars-added-links": "新内容中新增的所有外部链接",
"abusefilter-edit-builder-vars-removed-links": "新内容中移除的所有外部链接",
- "abusefilter-edit-builder-vars-old-text": "编辑前的旧页面,wiki代码格式",
+ "abusefilter-edit-builder-vars-old-text": "旧页面的wiki文本,在编辑之前(不再继续使用)",
"abusefilter-edit-builder-vars-new-text": "编辑后的新页面,wiki代码格式",
"abusefilter-edit-builder-vars-new-pst": "新页面维基语言,预保存转换",
"abusefilter-edit-builder-vars-diff-pst": "统一所有由编辑、预保存转换更改的差异",
@@ -328,9 +408,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "页面的移动保护级别",
"abusefilter-edit-builder-vars-restrictions-create": "创建页面的保护",
"abusefilter-edit-builder-vars-restrictions-upload": "上传文件的保护",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "移动来源页面的编辑保护级别",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "移动来源页面的移动保护级别",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "移动来源页面的创建保护",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "移动来源文件的上传保护",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "移动目标页面的编辑保护级别",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "移动目标页面的移动保护级别",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "移动目标页面的创建保护",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "移动目标文件的上传保护",
"abusefilter-edit-builder-vars-old-text-stripped": "编辑前的旧页面,去除所有标记",
"abusefilter-edit-builder-vars-old-links": "旧内容中的所有外部链接",
- "abusefilter-edit-builder-vars-old-html": "编辑前的旧页面,已解析为HTML源码",
+ "abusefilter-edit-builder-vars-old-html": "旧页面的wiki文本,解析为HTML(不再继续使用)",
"abusefilter-edit-builder-vars-minor-edit": "编辑是否被标记为小编辑",
"abusefilter-edit-builder-vars-file-sha1": "文件内容的SHA1值",
"abusefilter-edit-builder-vars-file-size": "文件大小,单位字节",
@@ -357,6 +445,7 @@
"abusefilter-history-filterid": "过滤器",
"abusefilter-history-select-legend": "精确搜索",
"abusefilter-history-select-user": "用户:",
+ "abusefilter-history-select-filter": "过滤器ID:",
"abusefilter-history-select-submit": "重新查询",
"abusefilter-history-diff": "更改",
"abusefilter-history-error-hidden": "您所请求的过滤器是隐藏的,因此您无法查看其历史。",
@@ -367,31 +456,35 @@
"abusefilter-exception-unclosedstring": "由$1处开始的字符串没有关闭。",
"abusefilter-exception-invalidoperator": "字符$1处存在非法运算符“$2”。",
"abusefilter-exception-unrecognisedtoken": "字符$1处存在无法识别的标记“$2”。",
- "abusefilter-exception-noparams": "字符$1处没有给出函数“$2”所需的参数。",
+ "abusefilter-exception-noparams": "字符$1处没有给出函数“$2”所需的参数。应为$3个{{PLURAL:$3|参数}}。",
"abusefilter-exception-dividebyzero": "字符$1处非法将$2除以零。",
"abusefilter-exception-unrecognisedvar": "字符$1处存在无法识别的变量$2。",
"abusefilter-exception-notenoughargs": "字符$1处调用的函数$2未得到足够的参数。预期有$3个参数,得到了$4个。",
"abusefilter-exception-regexfailure": "字符$1处的正则表达式“$3”存在错误:“$2”。",
"abusefilter-exception-overridebuiltin": "字符$1处非法覆盖内建变量“$2”。",
- "abusefilter-exception-outofbounds": "字符$1处请求了不存在的列表项$2(列表长度 = $3)。",
- "abusefilter-exception-notlist": "字符$1处向非数组请求了数组项。",
+ "abusefilter-exception-outofbounds": "字符$1正在请求不存在的数组项$2(数组大小 = $3)。",
+ "abusefilter-exception-notarray": "字符$1正在请求非数组的数组项。",
+ "abusefilter-exception-unclosedcomment": "字符$1处有未闭合注释。",
+ "abusefilter-exception-invalidiprange": "字符$1处提供了无效的IP地址段“$2”。",
+ "abusefilter-exception-disabledvar": "字符$1的变量$2不再继续使用。",
"abusefilter-action-tag": "标签",
"abusefilter-action-throttle": "频率控制",
"abusefilter-action-warn": "警告",
- "abusefilter-action-blockautopromote": "禁止自动授权",
+ "abusefilter-action-blockautopromote": "撤销自动确认",
"abusefilter-action-block": "封禁",
"abusefilter-action-degroup": "从用户组移除",
"abusefilter-action-rangeblock": "区段封禁",
"abusefilter-action-disallow": "阻止",
"abusefilter-revert-title": "撤销过滤器$1作出的所有操作",
- "abusefilter-revert-intro": "本表格允许你撤销过滤器$1作出的所有操作。请谨慎使用此工具。",
+ "abusefilter-revert-intro": "本表格允许您撤销过滤器$1作出的所有操作。请谨慎使用此工具。",
"abusefilter-revert-preview-item": "$1:$2在$4上{{GENDER:$7|作出}}了$3。要被回退的操作:$5($6)",
"abusefilter-revert-search-legend": "选择需要被撤销的过滤器操作",
"abusefilter-revert-periodstart": "开始时间:",
"abusefilter-revert-periodend": "结束时间:",
"abusefilter-revert-search": "选择操作",
- "abusefilter-revert-filter": "过滤器:",
+ "abusefilter-revert-filter": "过滤器ID:",
"abusefilter-revert-preview-intro": "下面列出了本次操作将要撤销的防滥用过滤器操作。请仔细检查下面的各项,并点击“{{int:abusefilter-revert-confirm}}”按钮确认您的选择。",
+ "abusefilter-revert-confirm-legend": "确认回退",
"abusefilter-revert-confirm": "确认",
"abusefilter-revert-success": "您已经撤销了[[Special:AbuseFilter/$1|过滤器$2]]作出的所有操作。",
"abusefilter-revert-reason": "自动撤销了过滤器$1的所有操作,原因如下:$2",
@@ -403,12 +496,20 @@
"abusefilter-test-submit": "测试",
"abusefilter-test-load": "载入",
"abusefilter-test-user": "编辑者:",
+ "abusefilter-test-nobots": "隐藏机器人编辑",
"abusefilter-test-period-start": "编辑时间晚于:",
"abusefilter-test-period-end": "编辑时间早于:",
"abusefilter-test-page": "对页面的更改:",
"abusefilter-test-shownegative": "显示不与过滤器匹配的更改",
"abusefilter-test-syntaxerr": "您所输入的过滤器存有语法错误。请点击“{{int:abusefilter-edit-check}}”按钮进行语法检查,并获取详细解释。",
"abusefilter-test-badtitle": "您输入的页面标题无效。它可能包含无法作为标题使用的一个或多个字符。",
+ "abusefilter-test-action": "操作类型:",
+ "abusefilter-test-search-type-all": "所有操作",
+ "abusefilter-test-search-type-edit": "编辑",
+ "abusefilter-test-search-type-move": "移动",
+ "abusefilter-test-search-type-delete": "删除",
+ "abusefilter-test-search-type-upload": "上传",
+ "abusefilter-test-search-type-createaccount": "账户创建",
"abusefilter-changeslist-examine": "检查",
"abusefilter-examine": "检查单独更改",
"abusefilter-examine-intro": "本页面允许您检查防滥用过滤器根据某次单独更改所生成的变量,并使用过滤器进行测试。",
@@ -435,6 +536,7 @@
"abusefilter-topnav-import": "导入过滤器",
"abusefilter-log-name": "滥用过滤器日志",
"abusefilter-log-header": "本日志展示过滤器更改的摘要。详情请见最近的过滤器更改[[Special:AbuseFilter/history|列表]]。",
+ "abusefilter-logentry-create": "$1{{GENDER:$2|创建}}了$4($5)",
"abusefilter-logentry-modify": "$1{{GENDER:$2|修改了}}$4($5)",
"abusefilter-log-noresults": "没有结果",
"abusefilter-diff-title": "版本间的差异",
@@ -450,49 +552,16 @@
"abusefilter-import-submit": "导入数据",
"abusefilter-group-default": "默认",
"abusefilter-http-error": "发生一个HTTP错误:$1。",
- "apihelp-abusefiltercheckmatch-description": "检查以查看一组变量是否匹配防滥用过滤器,编辑者会被记录相关事件。\n\nvars、rcid或logid是必须的,然而只有一个会被使用。",
- "apihelp-abusefiltercheckmatch-summary": "检查防滥用过滤器是否匹配变量集,及编辑者记录的防滥用过滤器活动。",
- "apihelp-abusefiltercheckmatch-extended-description": "需要vars、rcid或logid,然而只有其中一个会用到。",
- "apihelp-abusefiltercheckmatch-param-filter": "要检查是否匹配的完整过滤器文本。",
- "apihelp-abusefiltercheckmatch-param-vars": "要测试是否触发的JSON编码数组变量。",
- "apihelp-abusefiltercheckmatch-param-rcid": "要检查是否触发的最近更改ID。",
- "apihelp-abusefiltercheckmatch-param-logid": "用以检查的滥用过滤器日志ID。",
- "apihelp-abusefiltercheckmatch-example-1": "测试最近更改ID15是否匹配简单过滤器",
- "apihelp-abusefilterchecksyntax-description": "检查一个防滥用过滤器的语法。",
- "apihelp-abusefilterchecksyntax-summary": "检查一个防滥用过滤器的语法。",
- "apihelp-abusefilterchecksyntax-param-filter": "要检查语法的完整过滤器文本。",
- "apihelp-abusefilterchecksyntax-example-1": "检查有效过滤器的语法",
- "apihelp-abusefilterchecksyntax-example-2": "检查无效过滤器的语法",
- "apihelp-abusefilterevalexpression-description": "评估防滥用过滤器的表达式。",
- "apihelp-abusefilterevalexpression-summary": "评估防滥用过滤器的表达式。",
- "apihelp-abusefilterevalexpression-param-expression": "要评估的表达式。",
- "apihelp-abusefilterevalexpression-example-1": "评估一个简单的表达式",
- "apihelp-abusefilterunblockautopromote-description": "从由于防滥用过滤器的结果而接受的autopromotions解封用户。",
- "apihelp-abusefilterunblockautopromote-summary": "从由于防滥用过滤器的结果而接受的autopromotions解封用户。",
- "apihelp-abusefilterunblockautopromote-param-user": "您希望解封的用户的用户名。",
- "apihelp-abusefilterunblockautopromote-example-1": "移除对[[User:Example]]的自动提升封禁",
- "apihelp-query+abusefilters-description": "显示防滥用过滤器的详细说明。",
- "apihelp-query+abusefilters-summary": "显示防滥用过滤器的详细说明。",
- "apihelp-query+abusefilters-param-startid": "枚举的起始过滤器ID。",
- "apihelp-query+abusefilters-param-endid": "枚举的结束过滤器ID。",
- "apihelp-query+abusefilters-param-show": "只显示符合这些标准的过滤器。",
- "apihelp-query+abusefilters-param-limit": "过滤器列表的最大数量。",
- "apihelp-query+abusefilters-param-prop": "要获取的属性。",
- "apihelp-query+abusefilters-example-1": "列出启用的公开过滤器",
- "apihelp-query+abusefilters-example-2": "显示有关过滤器的一些详细说明",
- "apihelp-query+abuselog-description": "显示一个滥用过滤器的捕获事件。",
- "apihelp-query+abuselog-summary": "显示一个滥用过滤器的捕获事件。",
- "apihelp-query+abuselog-param-start": "枚举的起始时间戳。",
- "apihelp-query+abuselog-param-end": "枚举的结束时间戳。",
- "apihelp-query+abuselog-param-user": "只显示由指定的用户或IP地址完成的记录。",
- "apihelp-query+abuselog-param-title": "只显示在指定页面上发生过的条项。",
- "apihelp-query+abuselog-param-filter": "只显示被指定过滤器ID捕获过的记录。",
- "apihelp-query+abuselog-param-limit": "列出日志记录的最大数量。",
- "apihelp-query+abuselog-param-prop": "要获得的属性。",
- "apihelp-query+abuselog-example-1": "显示最近日志记录",
- "apihelp-query+abuselog-example-2": "显示[[API]]的最近日志记录",
- "apierror-abusefilter-canttest": "您没有权限测试防滥用过滤器。",
- "apierror-abusefilter-cantcheck": "您没有权限检查防滥用过滤器的语法。",
- "apierror-abusefilter-nosuchlogid": "没有id为$1的滥用日志记录。",
- "apierror-abusefilter-badsyntax": "过滤器存在语法错误。"
+ "abusefilter-view-private-submit": "查看私有详情",
+ "abusefilter-view-private": "查看私有详情",
+ "abusefilter-view-private-reason": "访问私有详情的原因:",
+ "abusefilter-log-details-id": "日志ID",
+ "abusefilter-invalid-request": "无效请求!您必须通过[[Special:AbuseLog/$1]]上的表单提供原因后才能访问私有日志详情。",
+ "abusefilter-invalid-request-noid": "无效请求!您必须通过在滥用日志详情上的表单提供原因后才能访问私有日志详情。",
+ "log-description-abusefilterprivatedetails": "此日志显示用户访问私有滥用日志详情的时间列表。",
+ "abusefilter-noreason": "警告:要查看此日志的私有详情,您必须提供原因。",
+ "abusefilter-log-ip-not-available": "不可用",
+ "abusefilter-tag-reserved": "<code>abusefilter-condition-limit</code>标签由防滥用过滤器保留作内部使用。",
+ "tag-abusefilter-condition-limit": "已达到条件限制",
+ "tag-abusefilter-condition-limit-description": "不能被所有激活的[[Special:AbuseFilter|防滥用过滤器]]检查到的编辑或其他活动([[mw:Extension:AbuseFilter/Conditions|帮助]])。"
}
diff --git a/AbuseFilter/i18n/zh-hant.json b/AbuseFilter/i18n/zh-hant.json
index 86eb1ce9..fff51d35 100644
--- a/AbuseFilter/i18n/zh-hant.json
+++ b/AbuseFilter/i18n/zh-hant.json
@@ -31,28 +31,33 @@
"Matma Rex",
"1233thehongkonger",
"逆襲的天邪鬼",
- "Corainn"
+ "Corainn",
+ "A2093064",
+ "Laundry Machine",
+ "Kly",
+ "Sanmosa"
]
},
"abusefilter-desc": "套用自動啟發式演算法於編輯",
"abusefilter": "防濫用過濾器設定",
"abuselog": "濫用日誌",
- "abusefilter-intro": "歡迎使用防濫用過濾器管理介面。\n防濫用過濾器是針對所有編輯動作進行自動化判斷的軟體機制。\n本介面包含了現有的過濾器清單並允許修改。",
- "abusefilter-mustbeeditor": "基於安全性考量,僅擁有權限修改防濫用過濾器的使用者可使用本介面。",
- "abusefilter-warning": "'''警告''':此操作已被系統自動識別為有害動作。\n沒有建設性的編輯將會被快速還原,\n嚴重或重複的非建設性的編輯將導致您的帳號或 IP 位址被封鎖。\n如果您認為您的編輯是具有建設性的,您可以再送出一次以確認。\n與您的操作符合的濫用規則描述為:$1",
+ "abusefilter-intro": "歡迎使用防濫用過濾器管理介面。防濫用過濾器是針對所有編輯動作進行自動化判斷的軟體機制。本介面包含了現有的過濾器清單並允許修改。",
+ "abusefilter-mustviewprivateoredit": "基於安全性考量,僅擁有查看非公開防濫用過濾器、或是修改過濾器權限的使用者可使用本介面。",
+ "abusefilter-warning": "'''警告''':此操作已被系統自動識別為有害動作。\n沒有建設性的操作將會被快速還原,\n嚴重或重複的非建設性的編輯將導致您的帳號或 IP 位址被封鎖。\n如果您認為您的編輯是具有建設性的,您可以再送出一次以確認。\n與您的操作符合的濫用規則描述為:$1",
"abusefilter-disallowed": "此操作已被系統自動識別為有害動作並已禁止。\n如果您認為您的操作是有建設性的,請與管理員聯絡,並告知您剛才嘗試進行的事。\n與您的操作符合的濫用規則描述為:$1",
"abusefilter-blocked-display": "此操作已被系統自動識別為有害動作,\n系統已阻止您執行此操作。\n為了保護 {{SITENAME}},您的帳號及所有其相關的 IP 位址皆會被封鎖,不允許編輯。\n如果這是系統誤判,請聯絡管理員。\n與您的操作符合的濫用規則描述為:$1",
- "abusefilter-degrouped": "系統已自動將您的操作識別為有害動作。\n因此已阻止此操作。另外,由於您的帳號疑似遭到盜用,您的所有權限均已取消。\n如果您認為這是系統誤判,請附上此操作的解釋並聯繫行政員,這樣或許能取回權限。\n與您的操作符合的濫用規則描述為:$1",
+ "abusefilter-degrouped": "系統已自動將您的操作識別為有害動作。\n因此已禁止此操作。另外,由於您的帳號疑似遭到盜用,您的所有權限均已取消。\n如果您認為這是系統誤判,請附上此操作的解釋並聯繫行政員,這樣或許能取回權限。\n與您的操作符合的濫用規則描述為:$1",
"abusefilter-autopromote-blocked": "此操作已被系統自動識別為有害動作並已禁止。\n基於安全性考量,部份例行授予已建立帳號的權限將暫時從您的帳號上撤回。\n與您的操作符合的濫用規則描述為:$1",
"abusefilter-blocker": "防濫用過濾器",
"abusefilter-blockreason": "已由防濫用過濾器自動封鎖。\n符合的規則描述為︰$1",
- "abusefilter-degroupreason": "已由防濫用過濾器自動撤銷權限。\n規則描述︰$1",
+ "abusefilter-degroupreason": "已由防濫用篩選器自動移除權限。\n規則描述︰$1",
"abusefilter-accountreserved": "此帳號名稱已保留給防濫用過濾器使用。",
"right-abusefilter-modify": "修改防濫用過濾器",
"right-abusefilter-view": "檢視防濫用過濾器",
"right-abusefilter-log": "檢視濫用日誌",
- "right-abusefilter-log-detail": "檢視詳細的濫用日誌項目",
+ "right-abusefilter-log-detail": "檢視濫用日誌詳細資料",
"right-abusefilter-private": "檢視濫用日誌中的非公開資料",
+ "right-abusefilter-private-log": "檢視防濫用過濾器非公開詳細資料存取日誌",
"right-abusefilter-modify-restricted": "修改防濫用過濾器使用已限制的動作",
"right-abusefilter-revert": "還原所有指定防濫用過濾器做的變更",
"right-abusefilter-view-private": "檢視標記為非公開的防濫用過濾器",
@@ -65,20 +70,35 @@
"action-abusefilter-log": "檢視濫用日誌",
"action-abusefilter-log-detail": "檢視濫用日誌詳細資料",
"action-abusefilter-private": "檢視濫用日誌中的非公開資料",
+ "action-abusefilter-private-log": "檢視防濫用過濾器非公開詳細資料存取日誌",
"action-abusefilter-modify-restricted": "修改防濫用過濾器使用已限制的動作",
"action-abusefilter-revert": "還原所有指定防濫用過濾器做的變更",
"action-abusefilter-view-private": "檢視標記為非公開的防濫用過濾器",
- "abusefilter-log": "觸發防濫用過濾器日誌",
+ "action-abusefilter-log-private": "檢視標記為非公開的濫用過濾器日誌項目",
+ "abusefilter-log": "防濫用過濾器日誌",
"abusefilter-log-summary": "此日誌顯示曾觸發過濾器的所有操作清單。",
"abusefilter-log-search": "搜尋濫用日誌",
"abusefilter-log-search-user": "使用者:",
"abusefilter-log-search-filter": "過濾器 ID (以 | 符號分隔) :",
"abusefilter-log-search-title": "標題:",
"abusefilter-log-search-wiki": "Wiki:",
+ "abusefilter-log-search-impact": "影響:",
+ "abusefilter-log-search-impact-all": "所有操作",
+ "abusefilter-log-search-impact-saved": "僅儲存的變更",
+ "abusefilter-log-search-impact-not-saved": "未儲存的變更",
+ "abusefilter-log-search-entries-label": "可見性:",
+ "abusefilter-log-search-entries-all": "所有紀錄",
+ "abusefilter-log-search-entries-hidden": "只顯示隱藏項目",
+ "abusefilter-log-search-entries-visible": "只顯示可見項目",
+ "abusefilter-log-search-action-label": "觸發的操作:",
+ "abusefilter-log-search-action-other": "其它",
+ "abusefilter-log-search-action-any": "任何",
+ "abusefilter-log-search-action-taken-label": "採取的動作:",
+ "abusefilter-log-search-action-taken-any": "任何",
"abusefilter-log-search-submit": "搜尋",
"abusefilter-log-entry": "$1:$2 在 $4 {{GENDER:$8|執行}}操作 \"$3\" 時{{GENDER:$8|觸發}}防濫用過濾器。\n採取的動作:$5;\n過濾器描述:$6",
"abusefilter-log-entry-withdiff": "$1:$2 {{GENDER:$8|執行}}操作 \"$3\" 於 $4 時{{GENDER:$8|觸發}}防濫用過濾器。\n採取的動作:$5;\n過濾器描述:$6 ($7)",
- "abusefilter-log-detailedentry-meta": "$1:$2 在 $5 {{GENDER:$9|執行}}操作 \"$4\" 時{{GENDER:$9|觸發}}了 $3。\n採取的行動:$6;\n過濾器描述:$7 ($8)",
+ "abusefilter-log-detailedentry-meta": "$1:$2在$5{{GENDER:$9|執行}}操作「$4」時{{GENDER:$9|觸發}}了$3。採取的行動:$6;過濾器描述:$7($8)",
"abusefilter-log-detailedentry-global": "全域過濾器 $1",
"abusefilter-log-detailedentry-local": "過濾器 $1",
"abusefilter-log-detailslink": "詳細資料",
@@ -88,28 +108,42 @@
"abusefilter-log-details-var": "變數",
"abusefilter-log-details-val": "值",
"abusefilter-log-details-vars": "動作參數",
- "abusefilter-log-details-private": "非公開資料",
+ "abusefilter-log-details-private": "非公開日誌詳細資料",
"abusefilter-log-details-ip": "來源 IP 位址",
+ "abusefilter-log-details-checkuser": "查核使用者",
"abusefilter-log-noactions": "無",
"abusefilter-log-details-diff": "在編輯中所做的變更",
"abusefilter-log-linkoncontribs": "濫用日誌",
"abusefilter-log-linkoncontribs-text": "{{GENDER:$1|此使用者}}的濫用日誌",
+ "abusefilter-log-linkonhistory": "檢視濫用日誌",
+ "abusefilter-log-linkonhistory-text": "檢視此頁面的濫用日誌",
"abusefilter-log-hidden": "(隱藏項目)",
"abusefilter-log-hidden-implicit": "(隱藏,因修訂已刪除)",
"abusefilter-log-cannot-see-details": "您沒有權限查看此項目詳細資料。",
+ "abusefilter-log-cannot-see-private-details": "您沒有權限查看此項目的非公開詳細資料。",
+ "abusefilter-log-nonexistent": "指定 ID 的實體不存在。",
"abusefilter-log-details-hidden": "此為非公開項目,您無法檢視詳細資料。",
+ "abusefilter-log-details-hidden-implicit": "因相關修訂為非公開項目,您無法檢視詳細資料。",
"abusefilter-log-private-not-included": "您指定一個或多個過濾器 ID 為非公開的。由於您未被允許檢視這些非公開過濾器,搜尋結果不會包含這些過濾器。",
"abusefilter-log-hide-legend": "隱藏日誌項目",
"abusefilter-log-hide-id": "日誌項目 ID:",
"abusefilter-log-hide-hidden": "隱藏此日誌項目",
"abusefilter-log-hide-reason": "原因:",
+ "abusefilter-log-hide-reason-other": "其它/額外的原因:",
"abusefilter-log-hide-forbidden": "您沒有權限隱藏濫用日誌項目。",
- "abusefilter-logentry-suppress": "隱藏 \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "取消隱藏 \"[[$1]]\"",
- "logentry-abusefilter-hit": "$1 於 $3 執行操作 \"$5\" 已觸發 $4。採取的動作:$6 ($7)",
+ "abusefilter-log-entry-suppress": "$1{{GENDER:$2|隱藏了}} $3",
+ "abusefilter-log-entry-unsuppress": "$1{{GENDER:$2|取消隱藏}} $3",
+ "logentry-abusefilter-hit": "$1 於 $3 {{GENDER:$2|執行}}操作 \"$5\" {{GENDER:$2|已觸發}} $4。採取的動作:$6 ($7)",
+ "log-action-filter-abusefilter": "篩選器變更的類型:",
+ "log-action-filter-abusefilter-create": "新過濾器建立",
+ "log-action-filter-abusefilter-modify": "過濾器修改",
+ "log-action-filter-suppress-abuselog": "濫用日誌監督",
+ "logentry-abusefilterprivatedetails-access": "$1{{GENDER:$2|存取了}}$3的非公開詳細資料",
+ "abusefilterprivatedetails-log-name": "防濫用過濾器非公開詳細資料存取日誌",
"abusefilter-management": "防濫用過濾器管理",
"abusefilter-list": "所有過濾器",
"abusefilter-list-id": "過濾器 ID",
+ "abusefilter-list-pattern": "模式",
"abusefilter-list-status": "狀態",
"abusefilter-list-public": "公開描述",
"abusefilter-list-consequences": "處理方式",
@@ -125,6 +159,7 @@
"abusefilter-enabled": "已開啟",
"abusefilter-deleted": "已刪除",
"abusefilter-disabled": "已停用",
+ "abusefilter-throttled": "受限制",
"abusefilter-hitcount": "$1 次命中",
"abusefilter-new": "建立新的過濾器",
"abusefilter-return": "返回過濾器管理",
@@ -138,8 +173,16 @@
"abusefilter-list-options-scope-local": "僅本地規則",
"abusefilter-list-options-scope-global": "僅全域規則",
"abusefilter-list-options-scope-all": "本地及全域規則",
- "abusefilter-list-options-disabled": "已停用的過濾器:",
+ "abusefilter-list-options-further-options": "進階選項:",
"abusefilter-list-options-hidedisabled": "隱藏已停用的過濾器",
+ "abusefilter-list-options-hideprivate": "隱藏非公開過濾器",
+ "abusefilter-list-options-searchfield": "在規則內搜尋:",
+ "abusefilter-list-options-searchpattern": "輸入模式",
+ "abusefilter-list-options-searchoptions": "搜尋模式:",
+ "abusefilter-list-options-search-like": "純文字查詢",
+ "abusefilter-list-options-search-rlike": "正規表達式",
+ "abusefilter-list-options-search-irlike": "不區分大小寫的正規表達式",
+ "abusefilter-list-regexerror": "搜尋時發生錯誤:正規表達式語法錯誤。",
"abusefilter-list-options-submit": "更新",
"abusefilter-tools-text": "本頁提供可協助您製訂與檢測防濫用過濾器的工具。",
"abusefilter-tools-expr": "表示法測試器",
@@ -150,19 +193,22 @@
"abusefilter-reautoconfirm-none": "該使用者之自動確認狀態並沒有被停止過。",
"abusefilter-reautoconfirm-notallowed": "您未被允許還原自動確認狀態。",
"abusefilter-reautoconfirm-done": "該帳號的自動確認狀態已被還原",
- "abusefilter-status": "在最近 $1 次操作中,有 $2 ($3%) 次操作達到 $4 次的比較條件限制,且有 $5 ($6%) 次操作符合其中一個已開啟的過濾器。",
+ "abusefilter-status": "在最近 $1 次近期變更中,有 $2 ($3%) 個過濾器達到 $4 次的比較條件限制,且有 $5 ($6%) 次近期變更符合其中一個已開啟的過濾器。",
"abusefilter-edit": "正在編輯防濫用過濾器",
"abusefilter-edit-subtitle": "正在編輯過濾器 $1",
"abusefilter-edit-subtitle-new": "正在建立過濾器",
+ "abusefilter-edit-token-not-match": "編輯沒被儲存!請再儲存一次看看。",
"abusefilter-edit-oldwarning": "<strong>您正編輯舊版本的過濾器。\n統計資訊引用的是最近版本的過濾器資訊。\n若您儲存目前的修改,您將會覆蓋所有自您修訂版本之後的所有變更。</strong> &bull;\n[[Special:AbuseFilter/history/$2|返回此過濾器歷史]]。",
"abusefilter-edit-status-label": "統計資訊:",
"abusefilter-edit-status": "在最近 $1 次{{PLURAL:$1|操作}}中,此過濾器已命中 $2 ($3%) 次。",
"abusefilter-edit-status-profile": "在最近 $1 次操作中,此過濾器已命中 $2 ($3%) 次。\n其平均執行時間為 $4 ms,且使用了條件限制中 $5 個條件。",
- "abusefilter-edit-throttled": "'''警告'''︰此過濾器已自動停用以策安全。\n此過濾器已超過操作命中次數限制 $1 次。",
+ "abusefilter-edit-throttled-warning": "'''警告:'''該過濾器已自動標示為有害。作為安全措施,以下操作將不會執行($1)。請複查並[[mw:Extension:AbuseFilter/Conditions|優化]]您的條件來移除該限制",
"abusefilter-edit-new": "新過濾器",
"abusefilter-edit-save": "儲存過濾器",
"abusefilter-edit-id": "過濾器 ID:",
+ "abusefilter-edit-switch-editor": "切換編輯器",
"abusefilter-edit-description": "描述:\n:''(可公開檢視)''",
+ "abusefilter-edit-field-description": "描述",
"abusefilter-edit-group": "過濾器群組:",
"abusefilter-edit-flags": "旗標:",
"abusefilter-edit-enabled": "開啟此過濾器",
@@ -170,35 +216,59 @@
"abusefilter-edit-hidden": "隱藏此過濾器的詳細資料",
"abusefilter-edit-global": "全域過濾器",
"abusefilter-edit-rules": "條件:",
+ "abusefilter-edit-field-conditions": "條件",
"abusefilter-edit-notes": "說明:",
"abusefilter-edit-lastmod": "過濾器最近修改:",
"abusefilter-edit-lastmod-text": "於 $1 由 $2",
"abusefilter-edit-hitcount": "過濾器命中次數:",
"abusefilter-edit-consequences": "符合條件時採取的動作",
"abusefilter-edit-action-warn": "在警告使用者後才觸發這些動作",
- "abusefilter-edit-action-disallow": "避免使用者進行可疑動作",
- "abusefilter-edit-action-blockautopromote": "撤銷使用者自動確認狀態",
+ "abusefilter-edit-action-disallow": "禁止使用者進行可疑動作",
+ "abusefilter-edit-action-blockautopromote": "撤銷使用者的自動確認狀態",
"abusefilter-edit-action-degroup": "從所有已授權的群組中移除該使用者",
"abusefilter-edit-action-block": "禁止該使用者及/或 IP 位址進行編輯",
+ "abusefilter-edit-action-blocktalk": "阻止用戶和/或 IP 位址在封禁期間編輯自己的對話頁",
"abusefilter-edit-action-throttle": "僅在使用者超過頻率限制後觸發動作",
- "abusefilter-edit-action-rangeblock": "封鎖使用者來源位置的 /16 子網段區間。",
+ "abusefilter-edit-action-rangeblock": "封鎖使用者來源位置的對應子網段區間。",
"abusefilter-edit-action-tag": "標記該編輯需要進一步審查",
"abusefilter-edit-throttle-count": "允許的操作次數:",
- "abusefilter-edit-throttle-period": "期間:",
- "abusefilter-edit-throttle-seconds": "$1 秒",
- "abusefilter-edit-throttle-groups": "群組門檻依︰\n:''(一行一筆,以逗號相連)''",
+ "abusefilter-edit-throttle-period": "期間(秒):",
+ "abusefilter-edit-throttle-groups": "群組門檻依︰",
+ "abusefilter-edit-throttle-ip": "IP 位址",
+ "abusefilter-edit-throttle-user": "使用者帳號",
+ "abusefilter-edit-throttle-range": "/16 範圍",
+ "abusefilter-edit-throttle-creationdate": "建立帳號的伺服器時間",
+ "abusefilter-edit-throttle-editcount": "編輯次數",
+ "abusefilter-edit-throttle-site": "整個站台",
+ "abusefilter-edit-throttle-page": "頁面",
+ "abusefilter-throttle-details": "允許每 $2 {{PLURAL:$2|秒|秒}} $1 次{{PLURAL:$1|操作|操作}},門檻群組依:$3",
"abusefilter-edit-warn-message": "警告用的系統訊息:",
"abusefilter-edit-warn-other": "其他訊息",
- "abusefilter-edit-warn-other-label": "其他訊息的頁面名稱:\n:''(不含 MediaWiki 字首)''",
+ "abusefilter-edit-warn-other-label": "其他訊息的頁面名稱:\n:''(不含 \"MediaWiki:\" 字首)''",
"abusefilter-edit-warn-actions": "動作:",
- "abusefilter-edit-warn-preview": "預覽已選擇的訊息",
+ "abusefilter-edit-warn-preview": "顯示/隱藏已選預覽的訊息",
"abusefilter-edit-warn-edit": "建立/編輯已選擇的訊息",
- "abusefilter-edit-tag-tag": "欲套用的[[Special:Tags|標籤]] (一行一筆):",
+ "abusefilter-edit-disallow-message": "使用於不允許的系統訊息:",
+ "abusefilter-edit-disallow-other": "其它訊息",
+ "abusefilter-edit-disallow-other-label": "其它訊息的頁面名稱:\n:''(不含 \"MediaWiki:\" 字首)''",
+ "abusefilter-edit-disallow-actions": "操作:",
+ "abusefilter-edit-disallow-preview": "顯示/隱藏已選預覽的訊息",
+ "abusefilter-edit-disallow-edit": "建立/編輯已選擇的訊息",
+ "abusefilter-edit-tag-tag": "欲套用的[[Special:Tags|標籤]]:",
+ "abusefilter-edit-tag-placeholder": "添加標籤(一個接一個,或是以逗號各個區分)",
+ "abusefilter-edit-tag-hidden-placeholder": "添加標籤(逗號分隔)",
+ "abusefilter-edit-block-anon-durations": "匿名使用者的封禁持續時間:",
+ "abusefilter-edit-block-user-durations": "註冊使用者的封禁持續時間:",
+ "abusefilter-block-anon": "封鎖匿名使用者",
+ "abusefilter-block-user": "封鎖已註冊使用者",
+ "abusefilter-block-talk": "已封鎖對話頁",
"abusefilter-edit-denied": "該過濾器已設為不公開,您無法檢視此過濾器的詳細資料。",
"abusefilter-edit-main": "過濾器參數",
"abusefilter-edit-done-subtitle": "已編輯過濾器",
- "abusefilter-edit-done": "已儲存 [[Special:AbuseFilter/history/$1/diff/prev/$2|您的變更]] 至 [[Special:AbuseFilter/$1|過濾器 $3]]。",
+ "abusefilter-edit-done": "您對[[Special:AbuseFilter/$1|過濾器$3]]的[[Special:AbuseFilter/history/$1/diff/prev/$2|變更]]已儲存。",
"abusefilter-edit-badsyntax": "您指定的過濾器中有語法錯誤。\n語法分析器的回應為:<pre>$1</pre>",
+ "abusefilter-edit-missingfields": "需要填寫這些必填欄位:$1",
+ "abusefilter-edit-deleting-enabled": "您不能標記啟用的過濾器為已刪除。",
"abusefilter-edit-restricted": "該過濾器包含了一個或多個已限制的動作,您無法編輯此過濾器。\n請聯絡擁有新增已限制動作權限的使用者協助您修改。",
"abusefilter-edit-viewhistory": "檢視此過濾器歷史",
"abusefilter-edit-history": "歷史:",
@@ -210,7 +280,7 @@
"abusefilter-edit-export": "匯出此過濾器至其他 Wiki",
"abusefilter-edit-syntaxok": "沒有偵測到語法錯誤。",
"abusefilter-edit-syntaxerr": "已偵測到語法錯誤:$1",
- "abusefilter-edit-bad-tags": "您指定的一個或多個標籤無效。\n標籤不應過長、不可包含特殊字元,而且不應被其他軟體所保留。嘗試選擇一個新的標籤名。",
+ "abusefilter-edit-bad-tags": "您指定的一個或多個標籤無效。標籤不能過長、不可包含特殊字元,而且不能被其他軟體所占用。嘗試選擇一個新的標籤名。",
"abusefilter-edit-notallowed": "您沒有權限建立或編輯防濫用過濾器",
"abusefilter-edit-notallowed-global": "您沒有權限建立或編輯全域防濫用過濾器",
"abusefilter-edit-notallowed-global-custom-msg": "全域過濾器不支援使用字訂警告訊息",
@@ -223,8 +293,10 @@
"abusefilter-edit-builder-op-arithmetic-modulo": "模除 (%)",
"abusefilter-edit-builder-op-arithmetic-pow": "次方 (**)",
"abusefilter-edit-builder-group-op-comparison": "比較運算子",
- "abusefilter-edit-builder-op-comparison-equal": "等於 (==)",
- "abusefilter-edit-builder-op-comparison-notequal": "不等於 (!=)",
+ "abusefilter-edit-builder-op-comparison-equal": "值等於(==)",
+ "abusefilter-edit-builder-op-comparison-equal-strict": "值和類型等於(===)",
+ "abusefilter-edit-builder-op-comparison-notequal": "值不等於(!=)",
+ "abusefilter-edit-builder-op-comparison-notequal-strict": "值和類型不等於(!==)",
"abusefilter-edit-builder-op-comparison-lt": "小於 (<)",
"abusefilter-edit-builder-op-comparison-gt": "大於 (>)",
"abusefilter-edit-builder-op-comparison-lte": "小於等於 (<=)",
@@ -248,23 +320,30 @@
"abusefilter-edit-builder-funcs-lcase": "轉為小寫 (lcase)",
"abusefilter-edit-builder-funcs-ucase": "轉為大寫 (ucase)",
"abusefilter-edit-builder-funcs-ccnorm": "正規化易混淆字元 (ccnorm)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "在OR模式中標準化並搜尋字串的多個子字串(ccnorm_contains_any)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-all": "在 AND 模式中標準化並搜尋字串的多個子字串(ccnorm_contains_all)",
"abusefilter-edit-builder-funcs-rmdoubles": "移除雙位元字元 (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "特殊字元數 / 總字元數比例 (specialratio)",
"abusefilter-edit-builder-funcs-norm": "正規化 (norm)",
"abusefilter-edit-builder-funcs-count": "字串 X 在字串 Y 裡出現的次數 (count)",
"abusefilter-edit-builder-funcs-rcount": "正規表式法 X 出現在字串 Y 的次數 (rcount)",
+ "abusefilter-edit-builder-funcs-get_matches": "正規表達式匹配文字中的捕捉陣列(get_matches)",
"abusefilter-edit-builder-funcs-rmwhitespace": "移除空白字元 (rmwhitespace)",
"abusefilter-edit-builder-funcs-rmspecials": "移除特殊字元 (rmspecials)",
"abusefilter-edit-builder-funcs-ip_in_range": "IP 是否在範圍內? (ip_in_range)",
- "abusefilter-edit-builder-funcs-contains-any": "搜尋字串中是否包含任何子字串 (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-any": "在 OR 模式中搜尋字串中是否包含任何子字串。 (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "在 AND 模式中搜索字串以獲得多個子字串。 (contains_all)",
+ "abusefilter-edit-builder-funcs-equals-to-any": "檢查所給予參數是否等於(===)任何以下的參數(equals_to_any)",
"abusefilter-edit-builder-funcs-substr": "子字串 (substr)",
"abusefilter-edit-builder-funcs-strpos": "取得子字串在字串中的位置 (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "取代子字串為字串 (str_replace)",
"abusefilter-edit-builder-funcs-rescape": "於正規表式法中的字串加上跳脫符號 (rescape)",
"abusefilter-edit-builder-funcs-set_var": "設定變數 (set_var)",
+ "abusefilter-edit-builder-funcs-sanitize": "將 HTML 項目標準化成萬國碼字元(過濾內容)",
"abusefilter-edit-builder-group-vars": "變數",
- "abusefilter-edit-builder-vars-accountname": "帳號名稱 (on account creation)",
+ "abusefilter-edit-builder-vars-accountname": "帳號(建立時)的名稱",
"abusefilter-edit-builder-vars-timestamp": "變更的 Unix 時間戳記",
+ "abusefilter-edit-builder-vars-timestamp-expanded": "日誌時間戳",
"abusefilter-edit-builder-vars-action": "動作",
"abusefilter-edit-builder-vars-addedlines": "編輯增加的行數",
"abusefilter-edit-builder-vars-delta": "編輯變更的大小",
@@ -275,19 +354,21 @@
"abusefilter-edit-builder-vars-new-content-model": "新內容模型",
"abusefilter-edit-builder-vars-removedlines": "編輯移除的行數",
"abusefilter-edit-builder-vars-summary": "編輯摘要/原因",
- "abusefilter-edit-builder-vars-article-id": "頁面 ID",
- "abusefilter-edit-builder-vars-article-ns": "頁面命名空間",
- "abusefilter-edit-builder-vars-article-text": "頁面標題 (不含命名空間)",
- "abusefilter-edit-builder-vars-article-prefixedtext": "完整頁面標題",
- "abusefilter-edit-builder-vars-article-views": "頁面檢視次數",
+ "abusefilter-edit-builder-vars-page-id": "頁面 ID",
+ "abusefilter-edit-builder-vars-page-ns": "頁面命名空間",
+ "abusefilter-edit-builder-vars-page-title": "頁面標題 (不含命名空間)",
+ "abusefilter-edit-builder-vars-page-prefixedtitle": "完整頁面標題",
+ "abusefilter-edit-builder-vars-page-age": "頁面年齡(以秒為單位)",
"abusefilter-edit-builder-vars-movedfrom-id": "移動來源頁面的頁面 ID",
"abusefilter-edit-builder-vars-movedfrom-ns": "移動來源頁面的命名空間",
- "abusefilter-edit-builder-vars-movedfrom-text": "移動來源頁面的標題",
- "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "移動來源頁面的完整標題",
+ "abusefilter-edit-builder-vars-movedfrom-title": "移動來源頁面的標題",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtitle": "移動來源頁面的完整標題",
+ "abusefilter-edit-builder-vars-movedfrom-age": "移動來源頁面年齡(以秒為單位)",
"abusefilter-edit-builder-vars-movedto-id": "移動目標頁面的頁面 ID",
"abusefilter-edit-builder-vars-movedto-ns": "移動目標頁面的命名空間",
- "abusefilter-edit-builder-vars-movedto-text": "移動目標頁面的標題",
- "abusefilter-edit-builder-vars-movedto-prefixedtext": "移動目標頁面的完整標題",
+ "abusefilter-edit-builder-vars-movedto-title": "移動目標頁面的標題",
+ "abusefilter-edit-builder-vars-movedto-prefixedtitle": "移動目標頁面的完整標題",
+ "abusefilter-edit-builder-vars-movedto-age": "移動目標頁面年齡(以秒為單位)",
"abusefilter-edit-builder-vars-user-editcount": "使用者編輯次數",
"abusefilter-edit-builder-vars-user-age": "使用者帳號年齡",
"abusefilter-edit-builder-vars-user-name": "使用者帳號名稱",
@@ -297,10 +378,14 @@
"abusefilter-edit-builder-vars-user-emailconfirm": "電子郵件地址的確認時間",
"abusefilter-edit-builder-vars-recent-contributors": "最近十位貢獻給該頁面的使用者",
"abusefilter-edit-builder-vars-first-contributor": "貢獻該頁面的第一位使用者",
- "abusefilter-edit-builder-vars-all-links": "所有一開始加入的外部連結",
+ "abusefilter-edit-builder-vars-movedfrom-recent-contributors": "最近十位對移動來源頁面有貢獻的使用者",
+ "abusefilter-edit-builder-vars-movedfrom-first-contributor": "第一位對移動來源頁面有貢獻的使用者",
+ "abusefilter-edit-builder-vars-movedto-recent-contributors": "最近十位對移動目標頁面有貢獻的使用者",
+ "abusefilter-edit-builder-vars-movedto-first-contributor": "第一位對移動目標頁面有貢獻的使用者",
+ "abusefilter-edit-builder-vars-all-links": "新內容中的所有外部連結",
"abusefilter-edit-builder-vars-added-links": "所有編輯後加入的外部連結",
"abusefilter-edit-builder-vars-removed-links": "所有編輯後移除的外部連結",
- "abusefilter-edit-builder-vars-old-text": "在編輯前舊頁面上的 Wikitext",
+ "abusefilter-edit-builder-vars-old-text": "在編輯前舊頁面上的 Wikitext(已不使用)",
"abusefilter-edit-builder-vars-new-text": "在編後新頁面上的 Wikitext",
"abusefilter-edit-builder-vars-new-pst": "新頁面 Wikitext,於儲存前轉換",
"abusefilter-edit-builder-vars-diff-pst": "編輯所做的變更 Unified,儲存前轉換",
@@ -311,9 +396,17 @@
"abusefilter-edit-builder-vars-restrictions-move": "移動該頁面的保護層級",
"abusefilter-edit-builder-vars-restrictions-create": "頁面的建立保護",
"abusefilter-edit-builder-vars-restrictions-upload": "頁面的上傳保護",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-edit": "移動來源頁面的編輯保護層級",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-move": "移動來源頁面的移動保護層級",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-create": "移動來源頁面的建立保護",
+ "abusefilter-edit-builder-vars-movedfrom-restrictions-upload": "移動來源檔案的上傳保護",
+ "abusefilter-edit-builder-vars-movedto-restrictions-edit": "移動目標頁面的編輯保護層級",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "移動目標頁面的移動保護層級",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "移動目標頁面的建立保護",
+ "abusefilter-edit-builder-vars-movedto-restrictions-upload": "移動目標檔案的上傳保護",
"abusefilter-edit-builder-vars-old-text-stripped": "舊頁面文字,移除所有標籤",
- "abusefilter-edit-builder-vars-old-links": "編輯前,頁面中的連結",
- "abusefilter-edit-builder-vars-old-html": "舊頁面 Wikitext,已解析為 HTML",
+ "abusefilter-edit-builder-vars-old-links": "舊內容中的所有外部連結",
+ "abusefilter-edit-builder-vars-old-html": "舊頁面 Wikitext,已解析為 HTML(已不使用)",
"abusefilter-edit-builder-vars-minor-edit": "是否將編輯標示為小修訂",
"abusefilter-edit-builder-vars-file-sha1": "檔案內容的 SHA1 雜湊值",
"abusefilter-edit-builder-vars-file-size": "文件大小(單位:位元組)",
@@ -321,6 +414,7 @@
"abusefilter-edit-builder-vars-file-mediatype": "文件的媒體類型",
"abusefilter-edit-builder-vars-file-width": "文件寬度(像素)",
"abusefilter-edit-builder-vars-file-height": "文件高度(像素)",
+ "abusefilter-edit-builder-vars-file-bits-per-channel": "檔案位元色板",
"abusefilter-filter-log": "最近過濾器變更",
"abusefilter-history": "防濫用過濾器 #$1 的修訂歷史",
"abusefilter-history-foruser": "由 $1 所作的變更",
@@ -339,6 +433,7 @@
"abusefilter-history-filterid": "篩選器",
"abusefilter-history-select-legend": "精確搜尋",
"abusefilter-history-select-user": "使用者:",
+ "abusefilter-history-select-filter": "過濾器ID:",
"abusefilter-history-select-submit": "精確",
"abusefilter-history-diff": "變更",
"abusefilter-history-error-hidden": "您請求的過濾器目前狀態為隱藏,故無法檢視其歷史",
@@ -349,22 +444,25 @@
"abusefilter-exception-unclosedstring": "於第 $1 個字元處開始未結束字串。",
"abusefilter-exception-invalidoperator": "於第 $1 個字元處使用了無效的運算子 \"$2\"。",
"abusefilter-exception-unrecognisedtoken": "於第 $1 個字元處出現預期之外的符號 \"$2\"。",
- "abusefilter-exception-noparams": "於第 $1 個字元處未傳入函數 \"$2\" 的參數。",
+ "abusefilter-exception-noparams": "於第 $1 個字元處未傳入函式「$2」的參數。\n應要有 $3 個{{PLURAL:$3|參數|參數}}。",
"abusefilter-exception-dividebyzero": "於第 $1 個字元處嘗試非法將 $2 除以 0。",
"abusefilter-exception-unrecognisedvar": "於第 $1 個字元處出現無法識別的變數 $2。",
"abusefilter-exception-notenoughargs": "於第 $1 個字元處函數 $2 未傳入足夠的參數。\n\t預期有 $3 個參數,僅使用了 $4 個",
- "abusefilter-exception-regexfailure": "於第 $1 個字元處的正規表示法 \"$3\" 錯誤:\"$2\"。",
+ "abusefilter-exception-regexfailure": "於第 $1 個字元處的正規表示法「$2」錯誤。",
"abusefilter-exception-overridebuiltin": "於第 $1 個字元處非法覆蓋內建的變數 \"$2\"。",
- "abusefilter-exception-outofbounds": "於第 $1 個字元處使用了不存在的清單項目 $2 (清單大小 = $3)。",
- "abusefilter-exception-notlist": "於第 $1 個字元處於非陣列中使用了陣列項目。",
+ "abusefilter-exception-outofbounds": "於第 $1 個字元處使用了不存在的陣列項目 $2(陣列大小 = $3)。",
+ "abusefilter-exception-notarray": "於第 $1 個字元處於非陣列中使用了陣列項目。",
+ "abusefilter-exception-unclosedcomment": "在第 $1 字元有未關閉評論。",
+ "abusefilter-exception-invalidiprange": "在字元 $1 提供了無效 IP 範圍 \"$2\"。",
+ "abusefilter-exception-disabledvar": "在 $1 字元上的變數 $2 已不使用。",
"abusefilter-action-tag": "標籤",
"abusefilter-action-throttle": "門檻值",
"abusefilter-action-warn": "警告",
- "abusefilter-action-blockautopromote": "禁止自動授權",
+ "abusefilter-action-blockautopromote": "撤銷自動確認",
"abusefilter-action-block": "封鎖",
"abusefilter-action-degroup": "從使用者群組中移除",
"abusefilter-action-rangeblock": "範圍封鎖",
- "abusefilter-action-disallow": "不允許",
+ "abusefilter-action-disallow": "禁止",
"abusefilter-revert-title": "還原所有由過濾器 $1 所做的變更",
"abusefilter-revert-intro": "此表單允許您還原所有由防濫用過濾器 $1 所做的變更。\n使用此工具時請小心謹慎。",
"abusefilter-revert-preview-item": "$1:$2 於 $4 上{{GENDER:$7|作出}}了 \"$3\"。\n要還原的動作:$5 ($6)",
@@ -372,25 +470,34 @@
"abusefilter-revert-periodstart": "開始時間:",
"abusefilter-revert-periodend": "結束時間:",
"abusefilter-revert-search": "請選擇動作",
- "abusefilter-revert-filter": "過濾器:",
+ "abusefilter-revert-filter": "過濾器ID:",
"abusefilter-revert-preview-intro": "此動作將會還原以下防濫用過濾器所做的動作。\n請仔細檢查,並點 \"{{int:abusefilter-revert-confirm}}\" 確認您的選擇。",
+ "abusefilter-revert-confirm-legend": "確認回退",
"abusefilter-revert-confirm": "確認",
"abusefilter-revert-success": "您已還原了防濫用過濾器 [[Special:AbuseFilter/$1|$2]] 所做的所有動作。",
"abusefilter-revert-reason": "自動還原了防濫用過濾器 $1 所做的所有動作。\n原因為:$2",
"abusefilter-revert-reasonfield": "原因:",
- "abusefilter-test": "使用先前的編測試過濾器",
+ "abusefilter-test": "使用先前的編輯測試過濾器",
"abusefilter-test-intro": "此頁面允許您使用以下方文字框輸入的過濾器檢查最後 $1 次的變更。\n若要讀取其他已存在的過濾器,請輸入過濾器 ID 於編輯文字框下方的文字框,並點選 \"{{int:abusefilter-test-load}}\" 按鈕。",
"abusefilter-test-legend": "過濾器測試中",
"abusefilter-test-load-filter": "讀取過濾器 ID:",
"abusefilter-test-submit": "測試",
"abusefilter-test-load": "讀取",
"abusefilter-test-user": "變更的使用者:",
+ "abusefilter-test-nobots": "隱藏機器人編輯",
"abusefilter-test-period-start": "變更時間晚於:",
"abusefilter-test-period-end": "變更時間早於:",
"abusefilter-test-page": "對頁面做的變更:",
"abusefilter-test-shownegative": "顯示不符合過濾器的變更",
"abusefilter-test-syntaxerr": "您輸入的過濾器語法錯誤。\n請點選 \"{{int:abusefilter-edit-check}}\" 按鈕取得完整說明。",
"abusefilter-test-badtitle": "您輸入的頁面標題無效。它可能包含無法作為標題使用的一個或多個字元。",
+ "abusefilter-test-action": "操作類型:",
+ "abusefilter-test-search-type-all": "所有操作",
+ "abusefilter-test-search-type-edit": "編輯",
+ "abusefilter-test-search-type-move": "移動",
+ "abusefilter-test-search-type-delete": "刪除",
+ "abusefilter-test-search-type-upload": "上傳",
+ "abusefilter-test-search-type-createaccount": "帳號建立",
"abusefilter-changeslist-examine": "檢查",
"abusefilter-examine": "檢查單次變更",
"abusefilter-examine-intro": "此頁面讓您可檢查由防濫用過濾器每次變更所產生的變數並使用過濾器測試。",
@@ -417,7 +524,8 @@
"abusefilter-topnav-import": "匯入過濾器",
"abusefilter-log-name": "修改防濫用過濾器日誌",
"abusefilter-log-header": "此日誌顯示了所有對過濾器所作變更摘要。\n詳細資訊請見最近過濾器變更[[Special:AbuseFilter/history|清單]]。",
- "abusefilter-log-entry-modify": "已修改 $1 ($2)",
+ "abusefilter-logentry-create": "$1{{GENDER:$2|建立}}了$4($5)",
+ "abusefilter-logentry-modify": "$1{{GENDER:$2|修改了}}$4($5)",
"abusefilter-log-noresults": "沒有結果",
"abusefilter-diff-title": "修訂版本間差異",
"abusefilter-diff-item": "項目",
@@ -432,5 +540,16 @@
"abusefilter-import-submit": "匯入資料",
"abusefilter-group-default": "預設",
"abusefilter-http-error": "發生 HTTP 錯誤:$1。",
- "apihelp-abusefiltercheckmatch-description": "檢查一組變量是否配合防濫用過濾器,編輯者會被記錄相關事件。\n\nvars、rcid或logid是必須填入的,然而只會使用其中一個。"
+ "abusefilter-view-private-submit": "檢視非公開詳細資料",
+ "abusefilter-view-private": "檢視非公開詳細資料",
+ "abusefilter-view-private-reason": "存取非公開詳細資料的原因:",
+ "abusefilter-log-details-id": "日誌ID",
+ "abusefilter-invalid-request": "無效請求!您必須透過[[Special:AbuseLog/$1]]上的表單提供原因後才能存取非公開日誌詳細資料。",
+ "abusefilter-invalid-request-noid": "無效請求!您必須透過在濫用日誌詳細資料上的表單提供原因後才能訪問非公開日誌詳細資料。",
+ "log-description-abusefilterprivatedetails": "此日誌顯示用戶存取非公開濫用日誌詳細資料的時間列表。",
+ "abusefilter-noreason": "警告:要查看此日誌的非公開詳細資料,您必須提供原因。",
+ "abusefilter-log-ip-not-available": "不可用",
+ "abusefilter-tag-reserved": "<code>abusefilter-condition-limit</code> 標籤由防濫用過濾器保留用於內部使用。",
+ "tag-abusefilter-condition-limit": "達到條件限制",
+ "tag-abusefilter-condition-limit-description": "不能被所有啟用的[[Special:AbuseFilter|防濫用過濾器]]檢查的編輯或其他日誌活動([[mw:Extension:AbuseFilter/Conditions|幫助]])。"
}
diff --git a/AbuseFilter/i18n/zh-hk.json b/AbuseFilter/i18n/zh-hk.json
new file mode 100644
index 00000000..92c0fb6d
--- /dev/null
+++ b/AbuseFilter/i18n/zh-hk.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liuxinyu970226"
+ ]
+ },
+ "abusefilter-log-search-user": "用戶:",
+ "abusefilter-tools-reautoconfirm-user": "用戶:",
+ "abusefilter-edit-action-blockautopromote": "撤銷用戶自動確認狀態",
+ "abusefilter-history-user": "用戶",
+ "abusefilter-history-select-user": "用戶:",
+ "abusefilter-examine-user": "用戶:"
+}
diff --git a/AbuseFilter/includes/AFComputedVariable.php b/AbuseFilter/includes/AFComputedVariable.php
index 45d635bb..15847598 100644
--- a/AbuseFilter/includes/AFComputedVariable.php
+++ b/AbuseFilter/includes/AFComputedVariable.php
@@ -1,15 +1,19 @@
<?php
+use Wikimedia\Rdbms\Database;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Logger\LoggerFactory;
+
class AFComputedVariable {
public $mMethod, $mParameters;
public static $userCache = [];
public static $articleCache = [];
/**
- * @param $method
- * @param $parameters
+ * @param string $method
+ * @param array $parameters
*/
- function __construct( $method, $parameters ) {
+ public function __construct( $method, $parameters ) {
$this->mMethod = $method;
$this->mParameters = $parameters;
}
@@ -19,11 +23,11 @@ class AFComputedVariable {
*
*
* @param string $wikitext
- * @param WikiPage $article
+ * @param Article $article
*
* @return object
*/
- function parseNonEditWikitext( $wikitext, $article ) {
+ public function parseNonEditWikitext( $wikitext, $article ) {
static $cache = [];
$cacheKey = md5( $wikitext ) . ':' . $article->getTitle()->getPrefixedText();
@@ -47,10 +51,10 @@ class AFComputedVariable {
* in case a user name is given as argument. Nowadays user objects are passed
* directly but many old log entries rely on this.
*
- * @param $user string|User
+ * @param string|User $user
* @return User
*/
- static function getUserObject( $user ) {
+ public static function getUserObject( $user ) {
if ( $user instanceof User ) {
$username = $user->getName();
} else {
@@ -59,7 +63,8 @@ class AFComputedVariable {
return self::$userCache[$username];
}
- wfDebug( "Couldn't find user $username in cache\n" );
+ $logger = LoggerFactory::getInstance( 'AbuseFilter' );
+ $logger->debug( "Couldn't find user $username in cache" );
}
if ( count( self::$userCache ) > 1000 ) {
@@ -67,7 +72,7 @@ class AFComputedVariable {
}
if ( $user instanceof User ) {
- $userCache[$username] = $user;
+ self::$userCache[$username] = $user;
return $user;
}
@@ -86,11 +91,11 @@ class AFComputedVariable {
}
/**
- * @param $namespace
- * @param $title Title
+ * @param int $namespace
+ * @param string $title
* @return Article
*/
- static function articleFromTitle( $namespace, $title ) {
+ public static function articleFromTitle( $namespace, $title ) {
if ( isset( self::$articleCache["$namespace:$title"] ) ) {
return self::$articleCache["$namespace:$title"];
}
@@ -99,7 +104,8 @@ class AFComputedVariable {
self::$articleCache = [];
}
- wfDebug( "Creating article object for $namespace:$title in cache\n" );
+ $logger = LoggerFactory::getInstance( 'AbuseFilter' );
+ $logger->debug( "Creating article object for $namespace:$title in cache" );
// TODO: use WikiPage instead!
$t = Title::makeTitle( $namespace, $title );
@@ -109,11 +115,11 @@ class AFComputedVariable {
}
/**
- * @param WikiPage $article
+ * @param Article $article
* @return array
*/
- static function getLinksFromDB( $article ) {
- // Stolen from ConfirmEdit
+ public static function getLinksFromDB( $article ) {
+ // Stolen from ConfirmEdit, SimpleCaptcha::getLinksFromTracker
$id = $article->getId();
if ( !$id ) {
return [];
@@ -134,12 +140,12 @@ class AFComputedVariable {
}
/**
- * @param $vars AbuseFilterVariableHolder
+ * @param AbuseFilterVariableHolder $vars
* @return AFPData|array|int|mixed|null|string
* @throws MWException
* @throws AFPException
*/
- function compute( $vars ) {
+ public function compute( $vars ) {
$parameters = $this->mParameters;
$result = null;
@@ -151,6 +157,8 @@ class AFComputedVariable {
switch ( $this->mMethod ) {
case 'diff':
+ // Currently unused. Kept for backwards compatibility since it remains
+ // as mMethod for old variables. A fallthrough would instead change old results.
$text1Var = $parameters['oldtext-var'];
$text2Var = $parameters['newtext-var'];
$text1 = $vars->getVar( $text1Var )->toString();
@@ -159,6 +167,21 @@ class AFComputedVariable {
$format = new UnifiedDiffFormatter();
$result = $format->format( $diffs );
break;
+ case 'diff-array':
+ // Introduced with T74329 to uniform the diff to MW's standard one.
+ // The difference with 'diff' method is noticeable when one of the
+ // $text is empty: it'll be treated as **really** empty, instead of
+ // an empty string.
+ $text1Var = $parameters['oldtext-var'];
+ $text2Var = $parameters['newtext-var'];
+ $text1 = $vars->getVar( $text1Var )->toString();
+ $text2 = $vars->getVar( $text2Var )->toString();
+ $text1 = $text1 === '' ? [] : explode( "\n", $text1 );
+ $text2 = $text2 === '' ? [] : explode( "\n", $text2 );
+ $diffs = new Diff( $text1, $text2 );
+ $format = new UnifiedDiffFormatter();
+ $result = $format->format( $diffs );
+ break;
case 'diff-split':
$diff = $vars->getVar( $parameters['diff-var'] )->toString();
$line_prefix = $parameters['line-prefix'];
@@ -186,7 +209,6 @@ class AFComputedVariable {
if ( $article->getContentModel() === CONTENT_MODEL_WIKITEXT ) {
$textVar = $parameters['text-var'];
- // XXX: Use prepareContentForEdit. But we need a Content object for that.
$new_text = $vars->getVar( $textVar )->toString();
$content = ContentHandler::makeContent( $new_text, $article->getTitle() );
$editInfo = $article->prepareContentForEdit( $content );
@@ -203,11 +225,12 @@ class AFComputedVariable {
$parameters['title']
);
+ $logger = LoggerFactory::getInstance( 'AbuseFilter' );
if ( $vars->getVar( 'context' )->toString() == 'filter' ) {
$links = $this->getLinksFromDB( $article );
- wfDebug( "AbuseFilter: loading old links from DB\n" );
+ $logger->debug( 'Loading old links from DB' );
} elseif ( $article->getContentModel() === CONTENT_MODEL_WIKITEXT ) {
- wfDebug( "AbuseFilter: loading old links from Parser\n" );
+ $logger->debug( 'Loading old links from Parser' );
$textVar = $parameters['text-var'];
$wikitext = $vars->getVar( $textVar )->toString();
@@ -351,6 +374,18 @@ class AFComputedVariable {
$registration = $obj->getRegistration();
$result = wfTimestamp( TS_UNIX, $asOf ) - wfTimestampOrNull( TS_UNIX, $registration );
break;
+ case 'page-age':
+ $title = Title::makeTitle( $parameters['namespace'], $parameters['title'] );
+
+ $firstRevisionTime = $title->getEarliestRevTime();
+ if ( !$firstRevisionTime ) {
+ $result = 0;
+ break;
+ }
+
+ $asOf = $parameters['asof'];
+ $result = wfTimestamp( TS_UNIX, $asOf ) - wfTimestampOrNull( TS_UNIX, $firstRevisionTime );
+ break;
case 'user-groups':
// Deprecated but needed by old log entries
$user = $parameters['user'];
@@ -362,10 +397,16 @@ class AFComputedVariable {
$result = strlen( $s );
break;
case 'subtract':
+ // Currently unused, kept for backwards compatibility for old filters.
$v1 = $vars->getVar( $parameters['val1-var'] )->toFloat();
$v2 = $vars->getVar( $parameters['val2-var'] )->toFloat();
$result = $v1 - $v2;
break;
+ case 'subtract-int':
+ $v1 = $vars->getVar( $parameters['val1-var'] )->toInt();
+ $v2 = $vars->getVar( $parameters['val2-var'] )->toInt();
+ $result = $v1 - $v2;
+ break;
case 'revision-text-by-id':
$rev = Revision::newFromId( $parameters['revid'] );
$result = AbuseFilter::revisionToString( $rev );
@@ -390,33 +431,36 @@ class AFComputedVariable {
/**
* @param Title $title
- * @return string[] List of the last 10 (unique) authors from $title
+ * @return string[] Usernames of the last 10 (unique) authors from $title
*/
public static function getLastPageAuthors( Title $title ) {
if ( !$title->exists() ) {
return [];
}
- $cache = ObjectCache::getMainWANInstance();
+ $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+ $fname = __METHOD__;
return $cache->getWithSetCallback(
$cache->makeKey( 'last-10-authors', 'revision', $title->getLatestRevID() ),
$cache::TTL_MINUTE,
- function ( $oldValue, &$ttl, array &$setOpts ) use ( $title ) {
+ function ( $oldValue, &$ttl, array &$setOpts ) use ( $title, $fname ) {
$dbr = wfGetDB( DB_REPLICA );
$setOpts += Database::getCacheSetOptions( $dbr );
// Get the last 100 edit authors with a trivial query (avoid T116557)
+ $revQuery = Revision::getQueryInfo();
$revAuthors = $dbr->selectFieldValues(
- 'revision',
- 'rev_user_text',
+ $revQuery['tables'],
+ $revQuery['fields']['rev_user_text'],
[ 'rev_page' => $title->getArticleID() ],
- __METHOD__,
+ $fname,
// Some pages have < 10 authors but many revisions (e.g. bot pages)
[ 'ORDER BY' => 'rev_timestamp DESC',
'LIMIT' => 100,
// Force index per T116557
- 'USE INDEX' => 'page_timestamp',
- ]
+ 'USE INDEX' => [ 'revision' => 'page_timestamp' ],
+ ],
+ $revQuery['joins']
);
// Get the last 10 distinct authors within this set of edits
$users = [];
diff --git a/AbuseFilter/includes/AbuseFilter.class.php b/AbuseFilter/includes/AbuseFilter.php
index 3ce5cdb4..2566c25e 100644
--- a/AbuseFilter/includes/AbuseFilter.class.php
+++ b/AbuseFilter/includes/AbuseFilter.php
@@ -1,7 +1,10 @@
<?php
+use MediaWiki\Linker\LinkRenderer;
use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\Session\SessionManager;
use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
/**
* This class contains most of the business logic of AbuseFilter. It consists of mostly
@@ -18,7 +21,8 @@ class AbuseFilter {
public static $condCount = 0;
/** @var array Map of (action ID => string[]) */
- public static $tagsToSet = []; // FIXME: avoid global state here
+ // FIXME: avoid global state here
+ public static $tagsToSet = [];
public static $history_mappings = [
'af_pattern' => 'afh_pattern',
@@ -42,7 +46,9 @@ class AbuseFilter {
],
'op-comparison' => [
'==' => 'equal',
+ '===' => 'equal-strict',
'!=' => 'notequal',
+ '!==' => 'notequal-strict',
'<' => 'lt',
'>' => 'gt',
'<=' => 'lte',
@@ -69,20 +75,26 @@ class AbuseFilter {
'lcase(string)' => 'lcase',
'ucase(string)' => 'ucase',
'ccnorm(string)' => 'ccnorm',
+ 'ccnorm_contains_any(haystack,needle1,needle2,..)' => 'ccnorm-contains-any',
+ 'ccnorm_contains_all(haystack,needle1,needle2,..)' => 'ccnorm-contains-all',
'rmdoubles(string)' => 'rmdoubles',
'specialratio(string)' => 'specialratio',
'norm(string)' => 'norm',
'count(needle,haystack)' => 'count',
'rcount(needle,haystack)' => 'rcount',
+ 'get_matches(needle,haystack)' => 'get_matches',
'rmwhitespace(text)' => 'rmwhitespace',
'rmspecials(text)' => 'rmspecials',
'ip_in_range(ip, range)' => 'ip_in_range',
- 'contains_any(haystack,needle1,needle2,needle3)' => 'contains-any',
+ 'contains_any(haystack,needle1,needle2,...)' => 'contains-any',
+ 'contains_all(haystack,needle1,needle2,...)' => 'contains-all',
+ 'equals_to_any(haystack,needle1,needle2,...)' => 'equals-to-any',
'substr(subject, offset, length)' => 'substr',
'strpos(haystack, needle)' => 'strpos',
'str_replace(subject, search, replace)' => 'str_replace',
'rescape(string)' => 'rescape',
'set_var(var,value)' => 'set_var',
+ 'sanitize(string)' => 'sanitize',
],
'vars' => [
'timestamp' => 'timestamp',
@@ -97,19 +109,21 @@ class AbuseFilter {
'old_content_model' => 'old-content-model',
'removed_lines' => 'removedlines',
'summary' => 'summary',
- 'article_articleid' => 'article-id',
- 'article_namespace' => 'article-ns',
- 'article_text' => 'article-text',
- 'article_prefixedtext' => 'article-prefixedtext',
- // 'article_views' => 'article-views', # May not be enabled, defined in getBuilderValues()
- 'moved_from_articleid' => 'movedfrom-id',
+ 'page_id' => 'page-id',
+ 'page_namespace' => 'page-ns',
+ 'page_title' => 'page-title',
+ 'page_prefixedtitle' => 'page-prefixedtitle',
+ 'page_age' => 'page-age',
+ 'moved_from_id' => 'movedfrom-id',
'moved_from_namespace' => 'movedfrom-ns',
- 'moved_from_text' => 'movedfrom-text',
- 'moved_from_prefixedtext' => 'movedfrom-prefixedtext',
- 'moved_to_articleid' => 'movedto-id',
+ 'moved_from_title' => 'movedfrom-title',
+ 'moved_from_prefixedtitle' => 'movedfrom-prefixedtitle',
+ 'moved_from_age' => 'movedfrom-age',
+ 'moved_to_id' => 'movedto-id',
'moved_to_namespace' => 'movedto-ns',
- 'moved_to_text' => 'movedto-text',
- 'moved_to_prefixedtext' => 'movedto-prefixedtext',
+ 'moved_to_title' => 'movedto-title',
+ 'moved_to_prefixedtitle' => 'movedto-prefixedtitle',
+ 'moved_to_age' => 'movedto-age',
'user_editcount' => 'user-editcount',
'user_age' => 'user-age',
'user_name' => 'user-name',
@@ -127,14 +141,24 @@ class AbuseFilter {
'added_lines_pst' => 'addedlines-pst',
'new_text' => 'new-text-stripped',
'new_html' => 'new-html',
- 'article_restrictions_edit' => 'restrictions-edit',
- 'article_restrictions_move' => 'restrictions-move',
- 'article_restrictions_create' => 'restrictions-create',
- 'article_restrictions_upload' => 'restrictions-upload',
- 'article_recent_contributors' => 'recent-contributors',
- 'article_first_contributor' => 'first-contributor',
- // 'old_text' => 'old-text-stripped', # Disabled, performance
- // 'old_html' => 'old-html', # Disabled, performance
+ 'page_restrictions_edit' => 'restrictions-edit',
+ 'page_restrictions_move' => 'restrictions-move',
+ 'page_restrictions_create' => 'restrictions-create',
+ 'page_restrictions_upload' => 'restrictions-upload',
+ 'page_recent_contributors' => 'recent-contributors',
+ 'page_first_contributor' => 'first-contributor',
+ 'moved_from_restrictions_edit' => 'movedfrom-restrictions-edit',
+ 'moved_from_restrictions_move' => 'movedfrom-restrictions-move',
+ 'moved_from_restrictions_create' => 'movedfrom-restrictions-create',
+ 'moved_from_restrictions_upload' => 'movedfrom-restrictions-upload',
+ 'moved_from_recent_contributors' => 'movedfrom-recent-contributors',
+ 'moved_from_first_contributor' => 'movedfrom-first-contributor',
+ 'moved_to_restrictions_edit' => 'movedto-restrictions-edit',
+ 'moved_to_restrictions_move' => 'movedto-restrictions-move',
+ 'moved_to_restrictions_create' => 'movedto-restrictions-create',
+ 'moved_to_restrictions_upload' => 'movedto-restrictions-upload',
+ 'moved_to_recent_contributors' => 'movedto-recent-contributors',
+ 'moved_to_first_contributor' => 'movedto-first-contributor',
'old_links' => 'old-links',
'minor_edit' => 'minor-edit',
'file_sha1' => 'file-sha1',
@@ -147,13 +171,43 @@ class AbuseFilter {
],
];
+ /** @var array Old vars which aren't in use anymore */
+ public static $disabledVars = [
+ 'old_text' => 'old-text-stripped',
+ 'old_html' => 'old-html'
+ ];
+
+ public static $deprecatedVars = [
+ 'article_text' => 'page_title',
+ 'article_prefixedtext' => 'page_prefixedtitle',
+ 'article_namespace' => 'page_namespace',
+ 'article_articleid' => 'page_id',
+ 'article_restrictions_edit' => 'page_restrictions_edit',
+ 'article_restrictions_move' => 'page_restrictions_move',
+ 'article_restrictions_create' => 'page_restrictions_create',
+ 'article_restrictions_upload' => 'page_restrictions_upload',
+ 'article_recent_contributors' => 'page_recent_contributors',
+ 'article_first_contributor' => 'page_first_contributor',
+ 'moved_from_text' => 'moved_from_title',
+ 'moved_from_prefixedtext' => 'moved_from_prefixedtitle',
+ 'moved_from_articleid' => 'moved_from_id',
+ 'moved_to_text' => 'moved_to_title',
+ 'moved_to_prefixedtext' => 'moved_to_prefixedtitle',
+ 'moved_to_articleid' => 'moved_to_id',
+ ];
+
public static $editboxName = null;
/**
* @param IContextSource $context
* @param string $pageType
+ * @param LinkRenderer $linkRenderer
*/
- public static function addNavigationLinks( IContextSource $context, $pageType ) {
+ public static function addNavigationLinks(
+ IContextSource $context,
+ $pageType,
+ LinkRenderer $linkRenderer
+ ) {
$linkDefs = [
'home' => 'Special:AbuseFilter',
'recentchanges' => 'Special:AbuseFilter/history',
@@ -161,21 +215,25 @@ class AbuseFilter {
'log' => 'Special:AbuseLog',
];
- if ( $context->getUser()->isAllowed( 'abusefilter-modify' ) ) {
+ if ( $context->getUser()->isAllowedAny( 'abusefilter-modify', 'abusefilter-view-private' ) ) {
$linkDefs = array_merge( $linkDefs, [
'test' => 'Special:AbuseFilter/test',
- 'tools' => 'Special:AbuseFilter/tools',
- 'import' => 'Special:AbuseFilter/import',
+ 'tools' => 'Special:AbuseFilter/tools'
+ ] );
+ }
+
+ if ( $context->getUser()->isAllowed( 'abusefilter-modify' ) ) {
+ $linkDefs = array_merge( $linkDefs, [
+ 'import' => 'Special:AbuseFilter/import'
] );
}
- // Save some translator work
+ // Re-use the message
$msgOverrides = [
'recentchanges' => 'abusefilter-filter-log',
];
$links = [];
- $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
foreach ( $linkDefs as $name => $page ) {
// Give grep a chance to find the usages:
@@ -197,7 +255,9 @@ class AbuseFilter {
}
}
- $linkStr = $context->msg( 'parentheses', $context->getLanguage()->pipeList( $links ) )->text();
+ $linkStr = $context->msg( 'parentheses' )
+ ->rawParams( $context->getLanguage()->pipeList( $links ) )
+ ->text();
$linkStr = $context->msg( 'abusefilter-topnav' )->parse() . " $linkStr";
$linkStr = Xml::tags( 'div', [ 'class' => 'mw-abusefilter-navigation' ], $linkStr );
@@ -206,7 +266,6 @@ class AbuseFilter {
}
/**
- * @static
* @param User $user
* @return AbuseFilterVariableHolder
*/
@@ -267,16 +326,30 @@ class AbuseFilter {
}
$realValues = self::$builderValues;
- global $wgDisableCounters;
- if ( !$wgDisableCounters ) {
- $realValues['vars']['article_views'] = 'article-views';
- }
+
Hooks::run( 'AbuseFilter-builder', [ &$realValues ] );
return $realValues;
}
/**
+ * @return array
+ */
+ public static function getDeprecatedVariables() {
+ static $deprecatedVars = null;
+
+ if ( $deprecatedVars ) {
+ return $deprecatedVars;
+ }
+
+ $deprecatedVars = self::$deprecatedVars;
+
+ Hooks::run( 'AbuseFilter-deprecatedVariables', [ &$deprecatedVars ] );
+
+ return $deprecatedVars;
+ }
+
+ /**
* @param string $filter
* @return bool
*/
@@ -294,7 +367,7 @@ class AbuseFilter {
}
if ( $filter === 'new' ) {
return false;
- };
+ }
$hidden = $dbr->selectField(
'abuse_filter',
'af_hidden',
@@ -319,8 +392,10 @@ class AbuseFilter {
}
}
+ /**
+ * For use in batch scripts and the like
+ */
public static function disableConditionLimit() {
- // For use in batch scripts and the like
self::$condLimitEnabled = false;
}
@@ -336,21 +411,11 @@ class AbuseFilter {
return $vars;
}
- $vars->setVar( $prefix . '_ARTICLEID', $title->getArticleID() );
+ $vars->setVar( $prefix . '_ID', $title->getArticleID() );
$vars->setVar( $prefix . '_NAMESPACE', $title->getNamespace() );
- $vars->setVar( $prefix . '_TEXT', $title->getText() );
- $vars->setVar( $prefix . '_PREFIXEDTEXT', $title->getPrefixedText() );
-
- global $wgDisableCounters;
- if ( !$wgDisableCounters && !$title->isSpecialPage() ) {
- // Support: HitCounters extension
- // XXX: This should be part of the extension (T159069)
- if ( method_exists( 'HitCounters\HitCounters', 'getCount' ) ) {
- $vars->setVar( $prefix . '_VIEWS', HitCounters\HitCounters::getCount( $title ) );
- }
- }
+ $vars->setVar( $prefix . '_TITLE', $title->getText() );
+ $vars->setVar( $prefix . '_PREFIXEDTITLE', $title->getPrefixedText() );
- // Use restrictions.
global $wgRestrictionTypes;
foreach ( $wgRestrictionTypes as $action ) {
$vars->setLazyLoadVar( "{$prefix}_restrictions_$action", 'get-page-restrictions',
@@ -367,6 +432,13 @@ class AbuseFilter {
'namespace' => $title->getNamespace()
] );
+ $vars->setLazyLoadVar( "{$prefix}_age", 'page-age',
+ [
+ 'title' => $title->getText(),
+ 'namespace' => $title->getNamespace(),
+ 'asof' => wfTimestampNow()
+ ] );
+
$vars->setLazyLoadVar( "{$prefix}_first_contributor", 'load-first-author',
[
'title' => $title->getText(),
@@ -379,8 +451,9 @@ class AbuseFilter {
}
/**
- * @param $filter
- * @return mixed
+ * @param string $filter
+ * @return true|array True when successful, otherwise a two-element array with exception message
+ * and character position of the syntax error
*/
public static function checkSyntax( $filter ) {
global $wgAbuseFilterParserClass;
@@ -392,11 +465,10 @@ class AbuseFilter {
}
/**
- * @param $expr
- * @param array $vars
+ * @param string $expr
* @return string
*/
- public static function evaluateExpression( $expr, $vars = [] ) {
+ public static function evaluateExpression( $expr ) {
global $wgAbuseFilterParserClass;
if ( self::checkSyntax( $expr ) !== true ) {
@@ -404,7 +476,7 @@ class AbuseFilter {
}
/** @var $parser AbuseFilterParser */
- $parser = new $wgAbuseFilterParserClass( $vars );
+ $parser = new $wgAbuseFilterParserClass;
return $parser->evaluateExpression( $expr );
}
@@ -432,10 +504,10 @@ class AbuseFilter {
try {
$result = $parser->parse( $conds, self::$condCount );
} catch ( Exception $excep ) {
- // Sigh.
$result = false;
- wfDebugLog( 'AbuseFilter', 'AbuseFilter parser error: ' . $excep->getMessage() . "\n" );
+ $logger = LoggerFactory::getInstance( 'AbuseFilter' );
+ $logger->debug( 'AbuseFilter parser error: ' . $excep->getMessage() );
if ( !$ignoreError ) {
throw $excep;
@@ -450,19 +522,36 @@ class AbuseFilter {
*
* @param AbuseFilterVariableHolder $vars
* @param string $group The filter's group (as defined in $wgAbuseFilterValidGroups)
+ * @param Title|null $title
+ * @param string $mode 'execute' for edits and logs, 'stash' for cached matches
*
* @return bool[] Map of (integer filter ID => bool)
*/
- public static function checkAllFilters( $vars, $group = 'default' ) {
+ public static function checkAllFilters(
+ $vars,
+ $group = 'default',
+ Title $title = null,
+ $mode = 'execute'
+ ) {
global $wgAbuseFilterCentralDB, $wgAbuseFilterIsCentral;
+ global $wgAbuseFilterConditionLimit;
- // Fetch from the database.
+ // Ensure that we start fresh, see T193374
+ self::$condCount = 0;
+
+ // Fetch filters to check from the database.
$filter_matched = [];
$dbr = wfGetDB( DB_REPLICA );
+ $fields = [
+ 'af_id',
+ 'af_pattern',
+ 'af_public_comments',
+ 'af_timestamp'
+ ];
$res = $dbr->select(
'abuse_filter',
- '*',
+ $fields,
[
'af_enabled' => 1,
'af_deleted' => 0,
@@ -472,7 +561,7 @@ class AbuseFilter {
);
foreach ( $res as $row ) {
- $filter_matched[$row->af_id] = self::checkFilter( $row, $vars, true );
+ $filter_matched[$row->af_id] = self::checkFilter( $row, $vars, $title, '', $mode );
}
if ( $wgAbuseFilterCentralDB && !$wgAbuseFilterIsCentral ) {
@@ -483,16 +572,17 @@ class AbuseFilter {
$res = ObjectCache::getMainWANInstance()->getWithSetCallback(
$globalRulesKey,
WANObjectCache::TTL_INDEFINITE,
- function () use ( $group, $fname ) {
+ function () use ( $group, $fname, $fields ) {
global $wgAbuseFilterCentralDB;
- $fdb = wfGetLB( $wgAbuseFilterCentralDB )->getConnectionRef(
+ $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+ $fdb = $lbFactory->getMainLB( $wgAbuseFilterCentralDB )->getConnectionRef(
DB_REPLICA, [], $wgAbuseFilterCentralDB
);
return iterator_to_array( $fdb->select(
'abuse_filter',
- '*',
+ $fields,
[
'af_enabled' => 1,
'af_deleted' => 0,
@@ -510,45 +600,61 @@ class AbuseFilter {
foreach ( $res as $row ) {
$filter_matched['global-' . $row->af_id] =
- self::checkFilter( $row, $vars, true, 'global-' );
+ self::checkFilter( $row, $vars, $title, 'global-', $mode );
}
}
- // Update statistics, and disable filters which are over-blocking.
- self::recordStats( $filter_matched, $group );
+ if ( $title instanceof Title && self::$condCount > $wgAbuseFilterConditionLimit ) {
+ $actionID = implode( '-', [
+ $title->getPrefixedText(),
+ $vars->getVar( 'user_name' )->toString(),
+ $vars->getVar( 'action' )->toString()
+ ] );
+ self::bufferTagsToSetByAction( [ $actionID => [ 'abusefilter-condition-limit' ] ] );
+ }
+
+ if ( $mode === 'execute' ) {
+ // Update statistics, and disable filters which are over-blocking.
+ self::recordStats( $filter_matched, $group );
+ }
return $filter_matched;
}
/**
- * @static
* @param stdClass $row
* @param AbuseFilterVariableHolder $vars
- * @param bool $profile
+ * @param Title|null $title
* @param string $prefix
+ * @param string $mode 'execute' for edits and logs, 'stash' for cached matches
* @return bool
*/
- public static function checkFilter( $row, $vars, $profile = false, $prefix = '' ) {
- global $wgAbuseFilterProfile;
+ public static function checkFilter(
+ $row,
+ $vars,
+ Title $title = null,
+ $prefix = '',
+ $mode = 'execute'
+ ) {
+ global $wgAbuseFilterProfile, $wgAbuseFilterRuntimeProfile,
+ $wgAbuseFilterSlowFilterRuntimeLimit;
$filterID = $prefix . $row->af_id;
- $startConds = $startTime = null;
- if ( $profile && $wgAbuseFilterProfile ) {
- $startConds = self::$condCount;
- $startTime = microtime( true );
- }
+ // Record data to be used if profiling is enabled and mode is 'execute'
+ $startConds = self::$condCount;
+ $startTime = microtime( true );
// Store the row somewhere convenient
self::$filterCache[$filterID] = $row;
- // Check conditions...
$pattern = trim( $row->af_pattern );
if (
self::checkConditions(
$pattern,
$vars,
- true /* ignore errors */
+ // Ignore errors
+ true
)
) {
// Record match.
@@ -558,19 +664,51 @@ class AbuseFilter {
$result = false;
}
- if ( $profile && $wgAbuseFilterProfile ) {
- $endTime = microtime( true );
- $endConds = self::$condCount;
+ $timeTaken = microtime( true ) - $startTime;
+ $condsUsed = self::$condCount - $startConds;
- $timeTaken = $endTime - $startTime;
- $condsUsed = $endConds - $startConds;
+ if ( $wgAbuseFilterProfile && $mode === 'execute' ) {
self::recordProfilingResult( $row->af_id, $timeTaken, $condsUsed );
}
+ $runtime = $timeTaken * 1000;
+ if ( $mode === 'execute' && $wgAbuseFilterRuntimeProfile &&
+ $runtime > $wgAbuseFilterSlowFilterRuntimeLimit ) {
+ self::recordSlowFilter( $filterID, $runtime, $condsUsed, $result, $title );
+ }
+
return $result;
}
/**
+ * Logs slow filter's runtime data for later analysis
+ *
+ * @param string $filterId
+ * @param float $runtime
+ * @param int $totalConditions
+ * @param bool $matched
+ * @param Title|null $title
+ */
+ private static function recordSlowFilter(
+ $filterId, $runtime, $totalConditions, $matched, Title $title = null
+ ) {
+ $title = $title ? $title->getPrefixedText() : '';
+
+ $logger = LoggerFactory::getInstance( 'AbuseFilterSlow' );
+ $logger->info(
+ 'Edit filter {filter_id} on {wiki} is taking longer than expected',
+ [
+ 'wiki' => wfWikiID(),
+ 'filter_id' => $filterId,
+ 'title' => $title,
+ 'runtime' => $runtime,
+ 'matched' => $matched,
+ 'total_conditions' => $totalConditions
+ ]
+ );
+ }
+
+ /**
* @param int $filter
*/
public static function resetFilterProfile( $filter ) {
@@ -631,8 +769,10 @@ class AbuseFilter {
return [ 0, 0 ];
}
- $timeProfile = ( $curTotal / $curCount ) * 1000; // 1000 ms in a sec
- $timeProfile = round( $timeProfile, 2 ); // Return in ms, rounded to 2dp
+ // 1000 ms in a sec
+ $timeProfile = ( $curTotal / $curCount ) * 1000;
+ // Return in ms, rounded to 2dp
+ $timeProfile = round( $timeProfile, 2 );
$condProfile = ( $curConds / $curCount );
$condProfile = round( $condProfile, 0 );
@@ -648,7 +788,7 @@ class AbuseFilter {
* @return string|bool
*/
public static function decodeGlobalName( $filter ) {
- if ( strpos( $filter, 'global-' ) == 0 ) {
+ if ( strpos( $filter, 'global-' ) === 0 ) {
return substr( $filter, strlen( 'global-' ) );
}
@@ -692,7 +832,7 @@ class AbuseFilter {
}
/**
- * @param DatabaseBase $dbr
+ * @param IDatabase $dbr
* @param string[] $filters
* @param string $prefix
* @return array[]
@@ -718,14 +858,13 @@ class AbuseFilter {
if ( $row->af_throttled
&& !empty( $wgAbuseFilterRestrictions[$row->afa_consequence] )
) {
- # Don't do the action
+ // Don't do the action
} elseif ( $row->afa_filter != $row->af_id ) {
- // We probably got a NULL, as it's a LEFT JOIN.
- // Don't add it.
+ // We probably got a NULL, as it's a LEFT JOIN. Don't add it.
} else {
$actionsByFilter[$prefix . $row->afa_filter][$row->afa_consequence] = [
'action' => $row->afa_consequence,
- 'parameters' => explode( "\n", $row->afa_parameters )
+ 'parameters' => array_filter( explode( "\n", $row->afa_parameters ) )
];
}
}
@@ -734,34 +873,36 @@ class AbuseFilter {
}
/**
- * Executes a list of actions.
+ * Executes a set of actions.
*
* @param string[] $filters
* @param Title $title
* @param AbuseFilterVariableHolder $vars
+ * @param User $user
* @return Status returns the operation's status. $status->isOK() will return true if
* there were no actions taken, false otherwise. $status->getValue() will return
* an array listing the actions taken. $status->getErrors() etc. will provide
* the errors and warnings to be shown to the user to explain the actions.
*/
- public static function executeFilterActions( $filters, $title, $vars ) {
+ public static function executeFilterActions( $filters, $title, $vars, User $user ) {
global $wgMainCacheType;
$actionsByFilter = self::getConsequencesForFilters( $filters );
$actionsTaken = array_fill_keys( $filters, [] );
$messages = [];
+ // Accumulator to track max block to issue
+ $maxExpiry = -1;
- global $wgOut, $wgAbuseFilterDisallowGlobalLocalBlocks, $wgAbuseFilterRestrictions;
+ global $wgAbuseFilterDisallowGlobalLocalBlocks, $wgAbuseFilterRestrictions,
+ $wgAbuseFilterBlockDuration, $wgAbuseFilterAnonBlockDuration;
foreach ( $actionsByFilter as $filter => $actions ) {
// Special-case handling for warnings.
- $parsed_public_comments = $wgOut->parseInline(
- self::getFilter( $filter )->af_public_comments
- );
+ $filter_public_comments = self::getFilter( $filter )->af_public_comments;
$global_filter = self::decodeGlobalName( $filter ) !== false;
- // If the filter is throttled and throttling is available via object
+ // If the filter has "throttle" enabled and throttling is available via object
// caching, check to see if the user has hit the throttle.
if ( !empty( $actions['throttle'] ) && $wgMainCacheType !== CACHE_NONE ) {
$parameters = $actions['throttle']['parameters'];
@@ -789,42 +930,82 @@ class AbuseFilter {
if ( !empty( $actions['warn'] ) ) {
$parameters = $actions['warn']['parameters'];
- $warnKey = 'abusefilter-warned-' . md5( $title->getPrefixedText() ) . '-' . $filter;
+ $action = $vars->getVar( 'action' )->toString();
+ // Generate a unique key to determine whether the user has already been warned.
+ // We'll warn again if one of these changes: session, page, triggered filter or action
+ $warnKey = 'abusefilter-warned-' . md5( $title->getPrefixedText() ) .
+ '-' . $filter . '-' . $action;
// Make sure the session is started prior to using it
- if ( session_id() === '' ) {
- wfSetupSession();
- }
+ $session = SessionManager::getGlobalSession();
+ $session->persist();
- if ( !isset( $_SESSION[$warnKey] ) || !$_SESSION[$warnKey] ) {
- $_SESSION[$warnKey] = true;
+ if ( !isset( $session[$warnKey] ) || !$session[$warnKey] ) {
+ $session[$warnKey] = true;
// Threaten them a little bit
- if ( !empty( $parameters[0] ) && strlen( $parameters[0] ) ) {
+ if ( isset( $parameters[0] ) ) {
$msg = $parameters[0];
} else {
$msg = 'abusefilter-warning';
}
- $messages[] = [ $msg, $parsed_public_comments, $filter ];
+ $messages[] = [ $msg, $filter_public_comments, $filter ];
$actionsTaken[$filter][] = 'warn';
- continue; // Don't do anything else.
+ // Don't do anything else.
+ continue;
} else {
// We already warned them
- $_SESSION[$warnKey] = false;
+ $session[$warnKey] = false;
}
unset( $actions['warn'] );
}
- // prevent double warnings
+ // Prevent double warnings
if ( count( array_intersect_key( $actions, array_filter( $wgAbuseFilterRestrictions ) ) ) > 0 &&
!empty( $actions['disallow'] )
) {
unset( $actions['disallow'] );
}
+ // Find out the max expiry to issue the longest triggered block.
+ // Need to check here since methods like user->getBlock() aren't available
+ if ( !empty( $actions['block'] ) ) {
+ $parameters = $actions['block']['parameters'];
+
+ if ( count( $parameters ) === 3 ) {
+ // New type of filters with custom block
+ if ( $user->isAnon() ) {
+ $expiry = $parameters[1];
+ } else {
+ $expiry = $parameters[2];
+ }
+ } else {
+ // Old type with fixed expiry
+ if ( $user->isAnon() && $wgAbuseFilterAnonBlockDuration !== null ) {
+ // The user isn't logged in and the anon block duration
+ // doesn't default to $wgAbuseFilterBlockDuration.
+ $expiry = $wgAbuseFilterAnonBlockDuration;
+ } else {
+ $expiry = $wgAbuseFilterBlockDuration;
+ }
+ }
+
+ $currentExpiry = SpecialBlock::parseExpiryInput( $expiry );
+ if ( $currentExpiry > SpecialBlock::parseExpiryInput( $maxExpiry ) ) {
+ // Save the parameters to issue the block with
+ $maxExpiry = $expiry;
+ $blockValues = [
+ self::getFilter( $filter )->af_public_comments,
+ $filter,
+ is_array( $parameters ) && in_array( 'blocktalk', $parameters )
+ ];
+ }
+ unset( $actions['block'] );
+ }
+
// Do the rest of the actions
foreach ( $actions as $action => $info ) {
$newMsg = self::takeConsequenceAction(
@@ -833,7 +1014,8 @@ class AbuseFilter {
$title,
$vars,
self::getFilter( $filter )->af_public_comments,
- $filter
+ $filter,
+ $user
);
if ( $newMsg !== null ) {
@@ -843,6 +1025,30 @@ class AbuseFilter {
}
}
+ // Since every filter has been analysed, we now know what the
+ // longest block duration is, so we can issue the block if
+ // maxExpiry has been changed.
+ if ( $maxExpiry !== -1 ) {
+ self::doAbuseFilterBlock(
+ [
+ 'desc' => $blockValues[0],
+ 'number' => $blockValues[1]
+ ],
+ $user->getName(),
+ $maxExpiry,
+ true,
+ $blockValues[2]
+ );
+ $message = [
+ 'abusefilter-blocked-display',
+ $blockValues[0],
+ $blockValues[1]
+ ];
+ // Manually add the message. If we're here, there is one.
+ $messages[] = $message;
+ $actionsTaken[ $blockValues[1] ][] = 'block';
+ }
+
return self::buildStatus( $actionsTaken, $messages );
}
@@ -852,7 +1058,7 @@ class AbuseFilter {
*
* @param array[] $actionsTaken associative array mapping each filter to the list if
* actions taken because of that filter.
- * @param array[] $messages a list if arrays, where each array contains a message key
+ * @param array[] $messages a list of arrays, where each array contains a message key
* followed by any message parameters.
*
* @return Status
@@ -861,7 +1067,7 @@ class AbuseFilter {
$status = Status::newGood( $actionsTaken );
foreach ( $messages as $msg ) {
- call_user_func_array( [ $status, 'fatal' ], $msg );
+ $status->fatal( ...$msg );
}
return $status;
@@ -871,27 +1077,14 @@ class AbuseFilter {
* @param AbuseFilterVariableHolder $vars
* @param Title $title
* @param string $group The filter's group (as defined in $wgAbuseFilterValidGroups)
- * @param User $user The user performing the action; defaults to $wgUser
+ * @param User $user The user performing the action
* @param string $mode Use 'execute' to run filters and log or 'stash' to only cache matches
* @return Status
*/
public static function filterAction(
- $vars, $title, $group = 'default', $user = null, $mode = 'execute'
+ AbuseFilterVariableHolder $vars, Title $title, $group, User $user, $mode = 'execute'
) {
- global $wgUser, $wgTitle, $wgRequest, $wgAbuseFilterRuntimeProfile;
-
- $context = RequestContext::getMain();
- $oldContextTitle = $context->getTitle();
-
- $oldWgTitle = $wgTitle;
-
- if ( !$wgTitle ) {
- $wgTitle = SpecialPage::getTitleFor( 'AbuseFilter' );
- }
-
- if ( !$user ) {
- $user = $wgUser;
- }
+ global $wgRequest, $wgAbuseFilterRuntimeProfile, $wgAbuseFilterLogIP;
$logger = LoggerFactory::getInstance( 'StashEdit' );
$statsd = MediaWikiServices::getInstance()->getStatsdDataFactory();
@@ -927,7 +1120,7 @@ class AbuseFilter {
$statsd->increment( 'abusefilter.check-stash.hit' );
}
} else {
- $filter_matched = self::checkAllFilters( $vars, $group );
+ $filter_matched = self::checkAllFilters( $vars, $group, $title, $mode );
if ( $isForEdit && $mode !== 'stash' ) {
$logger->info( __METHOD__ . ": cache miss for '$title' (key $stashKey)." );
$statsd->increment( 'abusefilter.check-stash.miss' );
@@ -969,11 +1162,11 @@ class AbuseFilter {
if ( count( $matched_filters ) == 0 ) {
$status = Status::newGood();
} else {
- $status = self::executeFilterActions( $matched_filters, $title, $vars );
+ $status = self::executeFilterActions( $matched_filters, $title, $vars, $user );
$actions_taken = $status->getValue();
$action = $vars->getVar( 'ACTION' )->toString();
- // If $wgUser isn't safe to load (e.g. a failure during
+ // If $user isn't safe to load (e.g. a failure during
// AbortAutoAccount), create a dummy anonymous user instead.
$user = $user->isSafeToLoad() ? $user : new User;
@@ -981,10 +1174,12 @@ class AbuseFilter {
$log_template = [
'afl_user' => $user->getId(),
'afl_user_text' => $user->getName(),
- 'afl_timestamp' => wfGetDB( DB_REPLICA )->timestamp( wfTimestampNow() ),
+ 'afl_timestamp' => wfGetDB( DB_REPLICA )->timestamp(),
'afl_namespace' => $title->getNamespace(),
'afl_title' => $title->getDBkey(),
- 'afl_ip' => $wgRequest->getIP()
+ 'afl_action' => $action,
+ // DB field is not null, so nothing
+ 'afl_ip' => ( $wgAbuseFilterLogIP ) ? $wgRequest->getIP() : ""
];
// Hack to avoid revealing IPs of people creating accounts
@@ -992,19 +1187,7 @@ class AbuseFilter {
$log_template['afl_user_text'] = $vars->getVar( 'accountname' )->toString();
}
- self::addLogEntries( $actions_taken, $log_template, $action, $vars, $group );
- }
-
- // Bug 53498: If we screwed around with $wgTitle, reset it so the title
- // is correctly picked up from the request later. Do the same for the
- // main RequestContext, because that might have picked up the bogus
- // title from $wgTitle.
- if ( $wgTitle !== $oldWgTitle ) {
- $wgTitle = $oldWgTitle;
- }
-
- if ( $context->getTitle() !== $oldContextTitle && $oldContextTitle instanceof Title ) {
- $context->setTitle( $oldContextTitle );
+ self::addLogEntries( $actions_taken, $log_template, $vars, $group );
}
return $status;
@@ -1022,18 +1205,31 @@ class AbuseFilter {
if ( $globalIndex ) {
// Global wiki filter
if ( !$wgAbuseFilterCentralDB ) {
- return null; // not enabled
+ return null;
}
$id = $globalIndex;
- $lb = wfGetLB( $wgAbuseFilterCentralDB );
+ $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+ $lb = $lbFactory->getMainLB( $wgAbuseFilterCentralDB );
$dbr = $lb->getConnectionRef( DB_REPLICA, [], $wgAbuseFilterCentralDB );
} else {
// Local wiki filter
$dbr = wfGetDB( DB_REPLICA );
}
- $row = $dbr->selectRow( 'abuse_filter', '*', [ 'af_id' => $id ], __METHOD__ );
+ $fields = [
+ 'af_id',
+ 'af_pattern',
+ 'af_public_comments',
+ 'af_timestamp'
+ ];
+
+ $row = $dbr->selectRow(
+ 'abuse_filter',
+ $fields,
+ [ 'af_id' => $id ],
+ __METHOD__
+ );
self::$filterCache[$id] = $row ?: null;
}
@@ -1052,11 +1248,17 @@ class AbuseFilter {
) {
$inputVars = $vars->exportNonLazyVars();
// Exclude noisy fields that have superficial changes
- unset( $inputVars['old_html'] );
- unset( $inputVars['new_html'] );
- unset( $inputVars['user_age'] );
- unset( $inputVars['timestamp'] );
- unset( $inputVars['_VIEWS'] );
+ $excludedVars = [
+ 'old_html' => true,
+ 'new_html' => true,
+ 'user_age' => true,
+ 'timestamp' => true,
+ 'page_age' => true,
+ 'moved_from_age' => true,
+ 'moved_to_age' => true
+ ];
+
+ $inputVars = array_diff_key( $inputVars, $excludedVars );
ksort( $inputVars );
$hash = md5( serialize( $inputVars ) );
@@ -1072,14 +1274,10 @@ class AbuseFilter {
/**
* @param array[] $actions_taken
* @param array $log_template
- * @param string $action
* @param AbuseFilterVariableHolder $vars
* @param string $group The filter's group (as defined in $wgAbuseFilterValidGroups)
- * @return mixed
*/
- public static function addLogEntries( $actions_taken, $log_template, $action,
- $vars, $group = 'default'
- ) {
+ public static function addLogEntries( $actions_taken, $log_template, $vars, $group = 'default' ) {
$dbw = wfGetDB( DB_MASTER );
$central_log_template = [
@@ -1095,17 +1293,11 @@ class AbuseFilter {
$globalIndex = self::decodeGlobalName( $filter );
$thisLog = $log_template;
$thisLog['afl_filter'] = $filter;
- $thisLog['afl_action'] = $action;
$thisLog['afl_actions'] = implode( ',', $actions );
// Don't log if we were only throttling.
if ( $thisLog['afl_actions'] != 'throttle' ) {
$log_rows[] = $thisLog;
-
- if ( !$globalIndex ) {
- $logged_local_filters[] = $filter;
- }
-
// Global logging
if ( $globalIndex ) {
$title = Title::makeTitle( $thisLog['afl_namespace'], $thisLog['afl_title'] );
@@ -1116,6 +1308,8 @@ class AbuseFilter {
$central_log_rows[] = $centralLog;
$logged_global_filters[] = $globalIndex;
+ } else {
+ $logged_local_filters[] = $filter;
}
}
}
@@ -1126,7 +1320,8 @@ class AbuseFilter {
// Only store the var dump if we're actually going to add log rows.
$var_dump = self::storeVarDump( $vars );
- $var_dump = "stored-text:$var_dump"; // To distinguish from stuff stored directly
+ // To distinguish from stuff stored directly
+ $var_dump = "stored-text:$var_dump";
$stash = ObjectCache::getMainStashInstance();
@@ -1147,7 +1342,6 @@ class AbuseFilter {
$user = User::newFromId( $data['afl_user'] );
$user->setName( $data['afl_user_text'] );
$entry->setPerformer( $user );
- // Set action target
$entry->setTarget( Title::makeTitle( $data['afl_namespace'], $data['afl_title'] ) );
// Additional info
$entry->setParameters( [
@@ -1159,7 +1353,7 @@ class AbuseFilter {
// Send data to CheckUser if installed and we
// aren't already sending a notification to recentchanges
- if ( is_callable( 'CheckUserHooks::updateCheckUserData' )
+ if ( ExtensionRegistry::getInstance()->isLoaded( 'CheckUser' )
&& strpos( $wgAbuseFilterNotifications, 'rc' ) === false
) {
$rc = $entry->getRecentChange();
@@ -1205,7 +1399,7 @@ class AbuseFilter {
foreach ( $central_log_rows as $row ) {
$fdb->insert( 'abuse_filter_log', $row, __METHOD__ );
- $global_log_ids[] = $dbw->insertId();
+ $global_log_ids[] = $fdb->insertId();
}
$fdb->onTransactionPreCommitOrIdle(
@@ -1254,7 +1448,7 @@ class AbuseFilter {
}
}
- // Store to ES if applicable
+ // Store to ExternalStore if applicable
global $wgDefaultExternalStore, $wgAbuseFilterCentralDB;
if ( $wgDefaultExternalStore ) {
if ( $global ) {
@@ -1292,12 +1486,12 @@ class AbuseFilter {
* Retrieve a var dump from External Storage or the text table
* Some of this code is stolen from Revision::loadText et al
*
- * @param $stored_dump
+ * @param string $stored_dump
*
- * @return object|AbuseFilterVariableHolder|bool
+ * @return array|object|AbuseFilterVariableHolder|bool
*/
public static function loadVarDump( $stored_dump ) {
- // Back-compat
+ // Backward compatibility
if ( substr( $stored_dump, 0, strlen( 'stored-text:' ) ) !== 'stored-text:' ) {
$data = unserialize( $stored_dump );
if ( is_array( $data ) ) {
@@ -1346,6 +1540,10 @@ class AbuseFilter {
foreach ( $vars as $key => $value ) {
$obj->setVar( $key, $value );
}
+ // If old variable names are used, make sure to keep them
+ if ( count( array_intersect_key( self::getDeprecatedVariables(), $obj->mVars ) ) !== 0 ) {
+ $obj->mVarsVersion = 1;
+ }
}
return $obj;
@@ -1358,25 +1556,21 @@ class AbuseFilter {
* @param AbuseFilterVariableHolder $vars
* @param string $rule_desc
* @param int|string $rule_number
+ * @param User $user
*
* @return array|null a message describing the action that was taken,
* or null if no action was taken. The message is given as an array
* containing the message key followed by any message parameters.
- *
- * @note: Returning the message as an array instead of a Message object is
- * needed for compatibility with MW 1.20: we will be constructing a
- * Status object from these messages, and before 1.21, Status did
- * not accept Message objects to be added directly.
*/
public static function takeConsequenceAction( $action, $parameters, $title,
- $vars, $rule_desc, $rule_number ) {
+ $vars, $rule_desc, $rule_number, User $user ) {
global $wgAbuseFilterCustomActionsHandlers, $wgRequest;
$message = null;
switch ( $action ) {
case 'disallow':
- if ( strlen( $parameters[0] ) ) {
+ if ( isset( $parameters[0] ) ) {
$message = [ $parameters[0], $rule_desc, $rule_number ];
} else {
// Generic message.
@@ -1387,40 +1581,22 @@ class AbuseFilter {
];
}
break;
+ case 'rangeblock':
+ global $wgAbuseFilterRangeBlockSize, $wgBlockCIDRLimit;
- case 'block':
- global $wgAbuseFilterBlockDuration, $wgAbuseFilterAnonBlockDuration, $wgUser;
- if ( $wgUser->isAnon() && $wgAbuseFilterAnonBlockDuration !== null ) {
- // The user isn't logged in and the anon block duration
- // doesn't default to $wgAbuseFilterBlockDuration.
- $expiry = $wgAbuseFilterAnonBlockDuration;
+ $ip = $wgRequest->getIP();
+ if ( IP::isIPv6( $ip ) ) {
+ $CIDRsize = max( $wgAbuseFilterRangeBlockSize['IPv6'], $wgBlockCIDRLimit['IPv6'] );
} else {
- $expiry = $wgAbuseFilterBlockDuration;
+ $CIDRsize = max( $wgAbuseFilterRangeBlockSize['IPv4'], $wgBlockCIDRLimit['IPv4'] );
}
-
- self::doAbuseFilterBlock(
- [
- 'desc' => $rule_desc,
- 'number' => $rule_number
- ],
- $wgUser->getName(),
- $expiry,
- true
- );
-
- $message = [
- 'abusefilter-blocked-display',
- $rule_desc,
- $rule_number
- ];
- break;
- case 'rangeblock':
+ $blockCIDR = $ip . '/' . $CIDRsize;
self::doAbuseFilterBlock(
[
'desc' => $rule_desc,
'number' => $rule_number
],
- IP::sanitizeRange( $wgRequest->getIP() . '/16' ),
+ IP::sanitizeRange( $blockCIDR ),
'1 week',
false
);
@@ -1432,13 +1608,15 @@ class AbuseFilter {
];
break;
case 'degroup':
- global $wgUser;
- if ( !$wgUser->isAnon() ) {
- // Remove all groups from the user. Ouch.
- $groups = $wgUser->getGroups();
+ if ( !$user->isAnon() ) {
+ // Remove all groups from the user.
+ $groups = $user->getGroups();
+ // Make sure that the stored var dump contains user groups, since we may
+ // need them if reverting this degroup via Special:AbuseFilter/revert
+ $vars->setVar( 'user_groups', $groups );
foreach ( $groups as $group ) {
- $wgUser->removeGroup( $group );
+ $user->removeGroup( $group );
}
$message = [
@@ -1452,31 +1630,30 @@ class AbuseFilter {
break;
}
- // Log it.
- $log = new LogPage( 'rights' );
-
- $log->addEntry( 'rights',
- $wgUser->getUserPage(),
+ $logEntry = new ManualLogEntry( 'rights', 'rights' );
+ $logEntry->setPerformer( self::getFilterUser() );
+ $logEntry->setTarget( $user->getUserPage() );
+ $logEntry->setComment(
wfMessage(
'abusefilter-degroupreason',
$rule_desc,
$rule_number
- )->inContentLanguage()->text(),
- [
- implode( ', ', $groups ),
- ''
- ],
- self::getFilterUser()
+ )->inContentLanguage()->text()
);
+ $logEntry->setParameters( [
+ '4::oldgroups' => $groups,
+ '5::newgroups' => []
+ ] );
+ $logEntry->publish( $logEntry->insert() );
}
break;
case 'blockautopromote':
- global $wgUser;
- if ( !$wgUser->isAnon() ) {
- $blockPeriod = (int)mt_rand( 3 * 86400, 7 * 86400 ); // Block for 3-7 days.
+ if ( !$user->isAnon() ) {
+ // Block for 3-7 days.
+ $blockPeriod = (int)mt_rand( 3 * 86400, 7 * 86400 );
ObjectCache::getMainStashInstance()->set(
- self::autoPromoteBlockKey( $wgUser ), true, $blockPeriod
+ self::autoPromoteBlockKey( $user ), true, $blockPeriod
);
$message = [
@@ -1487,16 +1664,17 @@ class AbuseFilter {
}
break;
+ case 'block':
+ // Do nothing, handled at the end of executeFilterActions. Here for completeness.
+ break;
case 'flag':
// Do nothing. Here for completeness.
break;
case 'tag':
// Mark with a tag on recentchanges.
- global $wgUser;
-
$actionID = implode( '-', [
- $title->getPrefixedText(), $wgUser->getName(),
+ $title->getPrefixedText(), $user->getName(),
$vars->getVar( 'ACTION' )->toString()
] );
@@ -1520,7 +1698,8 @@ class AbuseFilter {
$message = [ $msg ];
}
} else {
- wfDebugLog( 'AbuseFilter', "Unrecognised action $action" );
+ $logger = LoggerFactory::getInstance( 'AbuseFilter' );
+ $logger->debug( "Unrecognised action $action" );
}
}
@@ -1531,11 +1710,14 @@ class AbuseFilter {
* @param array[] $tagsByAction Map of (integer => string[])
*/
private static function bufferTagsToSetByAction( array $tagsByAction ) {
- foreach ( $tagsByAction as $actionID => $tags ) {
- if ( !isset( self::$tagsToSet[$actionID] ) ) {
- self::$tagsToSet[$actionID] = $tags;
- } else {
- self::$tagsToSet[$actionID] = array_merge( self::$tagsToSet[$actionID], $tags );
+ global $wgAbuseFilterActions;
+ if ( isset( $wgAbuseFilterActions['tag'] ) && $wgAbuseFilterActions['tag'] ) {
+ foreach ( $tagsByAction as $actionID => $tags ) {
+ if ( !isset( self::$tagsToSet[$actionID] ) ) {
+ self::$tagsToSet[$actionID] = $tags;
+ } else {
+ self::$tagsToSet[$actionID] = array_merge( self::$tagsToSet[$actionID], $tags );
+ }
}
}
}
@@ -1546,8 +1728,15 @@ class AbuseFilter {
* @param string $target
* @param string $expiry
* @param bool $isAutoBlock
+ * @param bool $preventEditOwnUserTalk
*/
- protected static function doAbuseFilterBlock( array $rule, $target, $expiry, $isAutoBlock ) {
+ protected static function doAbuseFilterBlock(
+ array $rule,
+ $target,
+ $expiry,
+ $isAutoBlock,
+ $preventEditOwnUserTalk = false
+ ) {
$filterUser = self::getFilterUser();
$reason = wfMessage(
'abusefilter-blockreason',
@@ -1561,7 +1750,7 @@ class AbuseFilter {
$block->isHardblock( false );
$block->isAutoblocking( $isAutoBlock );
$block->prevents( 'createaccount', true );
- $block->prevents( 'editownusertalk', false );
+ $block->prevents( 'editownusertalk', $preventEditOwnUserTalk );
$block->mExpiry = SpecialBlock::parseExpiryInput( $expiry );
$success = $block->insert();
@@ -1577,6 +1766,9 @@ class AbuseFilter {
// Conditionally added same as SpecialBlock
$flags[] = 'noautoblock';
}
+ if ( $preventEditOwnUserTalk === true ) {
+ $flags[] = 'nousertalk';
+ }
$logParams['6::flags'] = implode( ',', $flags );
$logEntry = new ManualLogEntry( 'block', 'block' );
@@ -1591,8 +1783,8 @@ class AbuseFilter {
}
/**
- * @param $throttleId
- * @param $types
+ * @param string $throttleId
+ * @param string $types
* @param Title $title
* @param string $rateCount
* @param string $ratePeriod
@@ -1606,27 +1798,30 @@ class AbuseFilter {
$key = self::throttleKey( $throttleId, $types, $title, $global );
$count = intval( $stash->get( $key ) );
- wfDebugLog( 'AbuseFilter', "Got value $count for throttle key $key\n" );
+ $logger = LoggerFactory::getInstance( 'AbuseFilter' );
+ $logger->debug( "Got value $count for throttle key $key" );
if ( $count > 0 ) {
$stash->incr( $key );
$count++;
- wfDebugLog( 'AbuseFilter', "Incremented throttle key $key" );
+ $logger->debug( "Incremented throttle key $key" );
} else {
- wfDebugLog( 'AbuseFilter', "Added throttle key $key with value 1" );
+ $logger->debug( "Added throttle key $key with value 1" );
$stash->add( $key, 1, $ratePeriod );
$count = 1;
}
if ( $count > $rateCount ) {
- wfDebugLog( 'AbuseFilter', "Throttle $key hit value $count -- maximum is $rateCount." );
+ $logger->debug( "Throttle $key hit value $count -- maximum is $rateCount." );
- return true; // THROTTLED
+ // THROTTLED
+ return true;
}
- wfDebugLog( 'AbuseFilter', "Throttle $key not hit!" );
+ $logger->debug( "Throttle $key not hit!" );
- return false; // NOT THROTTLED
+ // NOT THROTTLED
+ return false;
}
/**
@@ -1669,7 +1864,7 @@ class AbuseFilter {
}
/**
- * @param $throttleId
+ * @param string $throttleId
* @param string $type
* @param Title $title
* @param bool $global
@@ -1732,14 +1927,13 @@ class AbuseFilter {
* @param string $group The filter's group (as defined in $wgAbuseFilterValidGroups)
*/
public static function recordStats( $filters, $group = 'default' ) {
- global $wgAbuseFilterConditionLimit;
+ global $wgAbuseFilterConditionLimit, $wgAbuseFilterProfileActionsCap;
$stash = ObjectCache::getMainStashInstance();
// Figure out if we've triggered overflows and blocks.
$overflow_triggered = ( self::$condCount > $wgAbuseFilterConditionLimit );
- // Store some keys...
$overflow_key = self::filterLimitReachedKey();
$total_key = self::filterUsedKey( $group );
@@ -1747,7 +1941,7 @@ class AbuseFilter {
$storage_period = self::$statsStoragePeriod;
- if ( !$total || $total > 10000 ) {
+ if ( !$total || $total > $wgAbuseFilterProfileActionsCap ) {
// This is for if the total doesn't exist, or has gone past 10,000.
// Recreate all the keys at the same time, so they expire together.
$stash->set( $total_key, 0, $storage_period );
@@ -1759,7 +1953,6 @@ class AbuseFilter {
$stash->set( self::filterMatchesKey(), 0, $storage_period );
}
- // Increment total
$stash->incr( $total_key );
// Increment overflow counter, if our condition limit overflowed
@@ -1795,7 +1988,7 @@ class AbuseFilter {
$stash = ObjectCache::getMainStashInstance();
foreach ( $filters as $filter ) {
- // determine emergency disable values for this action
+ // Determine emergency disable values for this action
$emergencyDisableThreshold =
self::getEmergencyValue( $wgAbuseFilterEmergencyDisableThreshold, $group );
$filterEmergencyDisableCount =
@@ -1848,7 +2041,7 @@ class AbuseFilter {
* @return mixed
*/
public static function getEmergencyValue( array $emergencyValue, $group ) {
- return isset( $emergencyValue[$group] ) ? $emergencyValue[$group] : $emergencyValue['default'];
+ return $emergencyValue[$group] ?? $emergencyValue['default'];
}
/**
@@ -1881,6 +2074,19 @@ class AbuseFilter {
$username = wfMessage( 'abusefilter-blocker' )->inContentLanguage()->text();
$user = User::newSystemUser( $username, [ 'steal' => true ] );
+ if ( !$user ) {
+ // User name is invalid. Don't throw because this is a system message, easy
+ // to change and make wrong either by mistake or intentionally to break the site.
+ wfWarn(
+ 'The AbuseFilter user\'s name is invalid. Please change it in ' .
+ 'MediaWiki:abusefilter-blocker'
+ );
+ // Use the default name to avoid breaking other stuff. This should have no harm,
+ // aside from blocks temporarily attributed to another user.
+ $defaultName = wfMessage( 'abusefilter-blocker' )->inLanguage( 'en' )->text();
+ $user = User::newSystemUser( $defaultName, [ 'steal' => true ] );
+ }
+
// Promote user to 'sysop' so it doesn't look
// like an unprivileged account is blocking users
if ( !in_array( 'sysop', $user->getGroups() ) ) {
@@ -1891,87 +2097,474 @@ class AbuseFilter {
}
/**
- * @param string $rules
- * @param string $textName
- * @param bool $addResultDiv
+ * Extract values for syntax highlight
+ *
* @param bool $canEdit
+ * @return array
+ */
+ public static function getAceConfig( $canEdit ) {
+ $values = self::getBuilderValues();
+ $deprecatedVars = self::getDeprecatedVariables();
+
+ $builderVariables = implode( '|', array_keys( $values['vars'] ) );
+ $builderFunctions = implode( '|', array_keys( AbuseFilterParser::$mFunctions ) );
+ // AbuseFilterTokenizer::$keywords also includes constants (true, false and null),
+ // but Ace redefines these constants afterwards so this will not be an issue
+ $builderKeywords = implode( '|', AbuseFilterTokenizer::$keywords );
+ // Extract operators from tokenizer like we do in AbuseFilterParserTest
+ $operators = implode( '|', array_map( function ( $op ) {
+ return preg_quote( $op, '/' );
+ }, AbuseFilterTokenizer::$operators ) );
+ $deprecatedVariables = implode( '|', array_keys( $deprecatedVars ) );
+ $disabledVariables = implode( '|', array_keys( self::$disabledVars ) );
+
+ return [
+ 'variables' => $builderVariables,
+ 'functions' => $builderFunctions,
+ 'keywords' => $builderKeywords,
+ 'operators' => $operators,
+ 'deprecated' => $deprecatedVariables,
+ 'disabled' => $disabledVariables,
+ 'aceReadOnly' => !$canEdit
+ ];
+ }
+
+ /**
+ * Build input and button for loading a filter
+ *
* @return string
*/
- static function buildEditBox( $rules, $textName = 'wpFilterRules', $addResultDiv = true,
- $canEdit = true ) {
- global $wgOut;
-
- $textareaAttrib = [ 'dir' => 'ltr' ]; # Rules are in English
- if ( !$canEdit ) {
- $textareaAttrib['readonly'] = 'readonly';
- }
-
- global $wgUser;
- $noTestAttrib = [];
- if ( !$wgUser->isAllowed( 'abusefilter-modify' ) ) {
- $noTestAttrib['disabled'] = 'disabled';
- $addResultDiv = false;
- }
-
- $rules = rtrim( $rules ) . "\n";
- $rules = Xml::textarea( $textName, $rules, 40, 15, $textareaAttrib );
-
- if ( $canEdit ) {
- $dropDown = self::getBuilderValues();
- // Generate builder drop-down
- $builder = '';
-
- $builder .= Xml::option( wfMessage( 'abusefilter-edit-builder-select' )->text() );
-
- foreach ( $dropDown as $group => $values ) {
- // Give grep a chance to find the usages:
- // abusefilter-edit-builder-group-op-arithmetic, abusefilter-edit-builder-group-op-comparison,
- // abusefilter-edit-builder-group-op-bool, abusefilter-edit-builder-group-misc,
- // abusefilter-edit-builder-group-funcs, abusefilter-edit-builder-group-vars
- $builder .=
- Xml::openElement(
- 'optgroup',
- [ 'label' => wfMessage( "abusefilter-edit-builder-group-$group" )->text() ]
- ) . "\n";
-
- foreach ( $values as $content => $name ) {
- $builder .=
- Xml::option(
- wfMessage( "abusefilter-edit-builder-$group-$name" )->text(),
- $content
- ) . "\n";
+ public static function buildFilterLoader() {
+ $loadText =
+ new OOUI\TextInputWidget(
+ [
+ 'type' => 'number',
+ 'name' => 'wpInsertFilter',
+ 'id' => 'mw-abusefilter-load-filter'
+ ]
+ );
+ $loadButton =
+ new OOUI\ButtonWidget(
+ [
+ 'label' => wfMessage( 'abusefilter-test-load' )->text(),
+ 'id' => 'mw-abusefilter-load'
+ ]
+ );
+ $loadGroup =
+ new OOUI\ActionFieldLayout(
+ $loadText,
+ $loadButton,
+ [
+ 'label' => wfMessage( 'abusefilter-test-load-filter' )->text()
+ ]
+ );
+ // CSS class for reducing default input field width
+ $loadDiv =
+ Xml::tags(
+ 'div',
+ [ 'class' => 'mw-abusefilter-load-filter-id' ],
+ $loadGroup
+ );
+ return $loadDiv;
+ }
+
+ /**
+ * Check whether a filter is allowed to use a tag
+ *
+ * @param string $tag Tag name
+ * @return Status
+ */
+ public static function isAllowedTag( $tag ) {
+ $tagNameStatus = ChangeTags::isTagNameValid( $tag );
+
+ if ( !$tagNameStatus->isGood() ) {
+ return $tagNameStatus;
+ }
+
+ $finalStatus = Status::newGood();
+
+ $canAddStatus =
+ ChangeTags::canAddTagsAccompanyingChange(
+ [ $tag ]
+ );
+
+ if ( $canAddStatus->isGood() ) {
+ return $finalStatus;
+ }
+
+ if ( $tag === 'abusefilter-condition-limit' ) {
+ $finalStatus->fatal( 'abusefilter-tag-reserved' );
+ return $finalStatus;
+ }
+
+ $alreadyDefinedTags = [];
+ AbuseFilterHooks::onListDefinedTags( $alreadyDefinedTags );
+
+ if ( in_array( $tag, $alreadyDefinedTags, true ) ) {
+ return $finalStatus;
+ }
+
+ $canCreateTagStatus = ChangeTags::canCreateTag( $tag );
+ if ( $canCreateTagStatus->isGood() ) {
+ return $finalStatus;
+ }
+
+ $finalStatus->fatal( 'abusefilter-edit-bad-tags' );
+ return $finalStatus;
+ }
+
+ /**
+ * Validate throttle parameters
+ *
+ * @param array $params Throttle parameters
+ * @return null|string Null on success, a string with the error message on failure
+ */
+ public static function checkThrottleParameters( $params ) {
+ $throttleRate = explode( ',', $params[1] );
+ $throttleCount = $throttleRate[0];
+ $throttlePeriod = $throttleRate[1];
+ $throttleGroups = array_slice( $params, 2 );
+ $validGroups = [
+ 'ip',
+ 'user',
+ 'range',
+ 'creationdate',
+ 'editcount',
+ 'site',
+ 'page'
+ ];
+
+ $error = null;
+ if ( preg_match( '/^[1-9][0-9]*$/', $throttleCount ) === 0 ) {
+ $error = 'abusefilter-edit-invalid-throttlecount';
+ } elseif ( preg_match( '/^[1-9][0-9]*$/', $throttlePeriod ) === 0 ) {
+ $error = 'abusefilter-edit-invalid-throttleperiod';
+ } elseif ( !$throttleGroups ) {
+ $error = 'abusefilter-edit-empty-throttlegroups';
+ } else {
+ $valid = true;
+ // Groups should be unique in three ways: no direct duplicates like 'user' and 'user',
+ // no duplicated subgroups, not even shuffled ('ip,user' and 'user,ip') and no duplicates
+ // within subgroups ('user,ip,user')
+ $uniqueGroups = [];
+ $uniqueSubGroups = true;
+ // Every group should be valid, and subgroups should have valid groups inside
+ foreach ( $throttleGroups as $group ) {
+ if ( strpos( $group, ',' ) !== false ) {
+ $subGroups = explode( ',', $group );
+ if ( $subGroups !== array_unique( $subGroups ) ) {
+ $uniqueSubGroups = false;
+ break;
+ }
+ foreach ( $subGroups as $subGroup ) {
+ if ( !in_array( $subGroup, $validGroups ) ) {
+ $valid = false;
+ break 2;
+ }
+ }
+ sort( $subGroups );
+ $uniqueGroups[] = implode( ',', $subGroups );
+ } else {
+ if ( !in_array( $group, $validGroups ) ) {
+ $valid = false;
+ break;
+ }
+ $uniqueGroups[] = $group;
+ }
+ }
+
+ if ( !$valid ) {
+ $error = 'abusefilter-edit-invalid-throttlegroups';
+ } elseif ( !$uniqueSubGroups || $uniqueGroups !== array_unique( $uniqueGroups ) ) {
+ $error = 'abusefilter-edit-duplicated-throttlegroups';
+ }
+ }
+
+ return $error;
+ }
+
+ /**
+ * Checks whether user input for the filter editing form is valid and if so saves the filter
+ *
+ * @param AbuseFilterViewEdit $page
+ * @param int|string $filter
+ * @param WebRequest $request
+ * @param stdClass $newRow
+ * @param array $actions
+ * @return Status
+ */
+ public static function saveFilter( $page, $filter, $request, $newRow, $actions ) {
+ $validationStatus = Status::newGood();
+
+ // Check the syntax
+ $syntaxerr = self::checkSyntax( $request->getVal( 'wpFilterRules' ) );
+ if ( $syntaxerr !== true ) {
+ $validationStatus->error( 'abusefilter-edit-badsyntax', $syntaxerr[0] );
+ return $validationStatus;
+ }
+ // Check for missing required fields (title and pattern)
+ $missing = [];
+ if ( !$request->getVal( 'wpFilterRules' ) ||
+ trim( $request->getVal( 'wpFilterRules' ) ) === '' ) {
+ $missing[] = wfMessage( 'abusefilter-edit-field-conditions' )->escaped();
+ }
+ if ( !$request->getVal( 'wpFilterDescription' ) ) {
+ $missing[] = wfMessage( 'abusefilter-edit-field-description' )->escaped();
+ }
+ if ( count( $missing ) !== 0 ) {
+ $missing = $page->getLanguage()->commaList( $missing );
+ $validationStatus->error( 'abusefilter-edit-missingfields', $missing );
+ return $validationStatus;
+ }
+
+ // Don't allow setting as deleted an active filter
+ if ( $request->getCheck( 'wpFilterEnabled' ) == true &&
+ $request->getCheck( 'wpFilterDeleted' ) == true ) {
+ $validationStatus->error( 'abusefilter-edit-deleting-enabled' );
+ return $validationStatus;
+ }
+
+ // If we've activated the 'tag' option, check the arguments for validity.
+ if ( !empty( $actions['tag'] ) ) {
+ foreach ( $actions['tag']['parameters'] as $tag ) {
+ $status = self::isAllowedTag( $tag );
+
+ if ( !$status->isGood() ) {
+ $err = $status->getErrors();
+ $msg = $err[0]['message'];
+ $validationStatus->error( $msg );
+ return $validationStatus;
}
+ }
+ }
- $builder .= Xml::closeElement( 'optgroup' ) . "\n";
+ // If 'throttle' is selected, check its parameters
+ if ( !empty( $actions['throttle'] ) ) {
+ $throttleCheck = self::checkThrottleParameters( $actions['throttle']['parameters'] );
+ if ( $throttleCheck !== null ) {
+ $validationStatus->error( $throttleCheck );
+ return $validationStatus;
}
+ }
+
+ $differences = self::compareVersions(
+ [ $newRow, $actions ],
+ [ $newRow->mOriginalRow, $newRow->mOriginalActions ]
+ );
- $rules .=
- Xml::tags(
- 'select',
- [ 'id' => 'wpFilterBuilder', ],
- $builder
- ) . ' ';
+ // Don't allow adding a new global rule, or updating a
+ // rule that is currently global, without permissions.
+ if ( !$page->canEditFilter( $newRow ) || !$page->canEditFilter( $newRow->mOriginalRow ) ) {
+ $validationStatus->fatal( 'abusefilter-edit-notallowed-global' );
+ return $validationStatus;
+ }
- // Add syntax checking
- $rules .= Xml::element( 'input',
- [
- 'type' => 'button',
- 'value' => wfMessage( 'abusefilter-edit-check' )->text(),
- 'id' => 'mw-abusefilter-syntaxcheck'
- ] + $noTestAttrib );
+ // Don't allow custom messages on global rules
+ if ( $newRow->af_global == 1 && (
+ $request->getVal( 'wpFilterWarnMessage' ) !== 'abusefilter-warning' ||
+ $request->getVal( 'wpFilterDisallowMessage' ) !== 'abusefilter-disallowed'
+ ) ) {
+ $validationStatus->fatal( 'abusefilter-edit-notallowed-global-custom-msg' );
+ return $validationStatus;
+ }
+
+ $origActions = $newRow->mOriginalActions;
+ $wasGlobal = (bool)$newRow->mOriginalRow->af_global;
+
+ unset( $newRow->mOriginalRow );
+ unset( $newRow->mOriginalActions );
+
+ // Check for non-changes
+ if ( !count( $differences ) ) {
+ $validationStatus->setResult( true, false );
+ return $validationStatus;
+ }
+
+ // Check for restricted actions
+ $restrictions = $page->getConfig()->get( 'AbuseFilterRestrictions' );
+ if ( count( array_intersect_key(
+ array_filter( $restrictions ),
+ array_merge(
+ array_filter( $actions ),
+ array_filter( $origActions )
+ )
+ ) )
+ && !$page->getUser()->isAllowed( 'abusefilter-modify-restricted' )
+ ) {
+ $validationStatus->error( 'abusefilter-edit-restricted' );
+ return $validationStatus;
+ }
+
+ // Everything went fine, so let's save the filter
+ list( $new_id, $history_id ) =
+ self::doSaveFilter( $newRow, $differences, $filter, $actions, $wasGlobal, $page );
+ $validationStatus->setResult( true, [ $new_id, $history_id ] );
+ return $validationStatus;
+ }
+
+ /**
+ * Saves new filter's info to DB
+ *
+ * @param stdClass $newRow
+ * @param int|string $filter
+ * @param array $differences
+ * @param array $actions
+ * @param bool $wasGlobal
+ * @param AbuseFilterViewEdit $page
+ * @return int[] first element is new ID, second is history ID
+ */
+ private static function doSaveFilter(
+ $newRow,
+ $differences,
+ $filter,
+ $actions,
+ $wasGlobal,
+ $page
+ ) {
+ $user = $page->getUser();
+ $dbw = wfGetDB( DB_MASTER );
+
+ // Convert from object to array
+ $newRow = get_object_vars( $newRow );
+
+ // Set last modifier.
+ $newRow['af_timestamp'] = $dbw->timestamp();
+ $newRow['af_user'] = $user->getId();
+ $newRow['af_user_text'] = $user->getName();
+
+ $dbw->startAtomic( __METHOD__ );
+
+ // Insert MAIN row.
+ if ( $filter == 'new' ) {
+ $new_id = $dbw->nextSequenceValue( 'abuse_filter_af_id_seq' );
+ $is_new = true;
+ } else {
+ $new_id = $filter;
+ $is_new = false;
+ }
+
+ // Reset throttled marker, if we're re-enabling it.
+ $newRow['af_throttled'] = $newRow['af_throttled'] && !$newRow['af_enabled'];
+ $newRow['af_id'] = $new_id;
+
+ // T67807: integer 1's & 0's might be better understood than booleans
+ $newRow['af_enabled'] = (int)$newRow['af_enabled'];
+ $newRow['af_hidden'] = (int)$newRow['af_hidden'];
+ $newRow['af_throttled'] = (int)$newRow['af_throttled'];
+ $newRow['af_deleted'] = (int)$newRow['af_deleted'];
+ $newRow['af_global'] = (int)$newRow['af_global'];
+
+ $dbw->replace( 'abuse_filter', [ 'af_id' ], $newRow, __METHOD__ );
+
+ if ( $is_new ) {
+ $new_id = $dbw->insertId();
+ }
+
+ // Actions
+ $availableActions = $page->getConfig()->get( 'AbuseFilterActions' );
+ $actionsRows = [];
+ foreach ( array_filter( $availableActions ) as $action => $_ ) {
+ // Check if it's set
+ $enabled = isset( $actions[$action] ) && (bool)$actions[$action];
+
+ if ( $enabled ) {
+ $parameters = $actions[$action]['parameters'];
+ if ( $action === 'throttle' && $parameters[0] === 'new' ) {
+ // FIXME: Do we really need to keep the filter ID inside throttle parameters?
+ // We'd save space, keep things simpler and avoid this hack. Note: if removing
+ // it, a maintenance script will be necessary to clean up the table.
+ $parameters[0] = $new_id;
+ }
+
+ $thisRow = [
+ 'afa_filter' => $new_id,
+ 'afa_consequence' => $action,
+ 'afa_parameters' => implode( "\n", $parameters )
+ ];
+ $actionsRows[] = $thisRow;
+ }
+ }
+
+ // Create a history row
+ $afh_row = [];
+
+ foreach ( self::$history_mappings as $af_col => $afh_col ) {
+ $afh_row[$afh_col] = $newRow[$af_col];
+ }
+
+ // Actions
+ $displayActions = [];
+ foreach ( $actions as $action ) {
+ $displayActions[$action['action']] = $action['parameters'];
+ }
+ $afh_row['afh_actions'] = serialize( $displayActions );
+
+ $afh_row['afh_changed_fields'] = implode( ',', $differences );
+
+ // Flags
+ $flags = [];
+ if ( $newRow['af_hidden'] ) {
+ $flags[] = 'hidden';
+ }
+ if ( $newRow['af_enabled'] ) {
+ $flags[] = 'enabled';
+ }
+ if ( $newRow['af_deleted'] ) {
+ $flags[] = 'deleted';
+ }
+ if ( $newRow['af_global'] ) {
+ $flags[] = 'global';
+ }
+
+ $afh_row['afh_flags'] = implode( ',', $flags );
+
+ $afh_row['afh_filter'] = $new_id;
+ $afh_row['afh_id'] = $dbw->nextSequenceValue( 'abuse_filter_af_id_seq' );
+
+ // Do the update
+ $dbw->insert( 'abuse_filter_history', $afh_row, __METHOD__ );
+ $history_id = $dbw->insertId();
+ if ( $filter != 'new' ) {
+ $dbw->delete(
+ 'abuse_filter_action',
+ [ 'afa_filter' => $filter ],
+ __METHOD__
+ );
}
+ $dbw->insert( 'abuse_filter_action', $actionsRows, __METHOD__ );
- if ( $addResultDiv ) {
- $rules .= Xml::element( 'div',
- [ 'id' => 'mw-abusefilter-syntaxresult', 'style' => 'display: none;' ],
- '&#160;' );
+ $dbw->endAtomic( __METHOD__ );
+
+ // Invalidate cache if this was a global rule
+ if ( $wasGlobal || $newRow['af_global'] ) {
+ $group = 'default';
+ if ( isset( $newRow['af_group'] ) && $newRow['af_group'] != '' ) {
+ $group = $newRow['af_group'];
+ }
+
+ $globalRulesKey = self::getGlobalRulesKey( $group );
+ ObjectCache::getMainWANInstance()->touchCheckKey( $globalRulesKey );
}
- // Add script
- $wgOut->addModules( 'ext.abuseFilter.edit' );
- self::$editboxName = $textName;
+ // Logging
+ $subtype = $filter === 'new' ? 'create' : 'modify';
+ $logEntry = new ManualLogEntry( 'abusefilter', $subtype );
+ $logEntry->setPerformer( $user );
+ $logEntry->setTarget( $page->getTitle( $new_id ) );
+ $logEntry->setParameters( [
+ 'historyId' => $history_id,
+ 'newId' => $new_id
+ ] );
+ $logid = $logEntry->insert();
+ $logEntry->publish( $logid );
+
+ // Purge the tag list cache so the fetchAllTags hook applies tag changes
+ if ( isset( $actions['tag'] ) ) {
+ AbuseFilterHooks::purgeTagCache();
+ }
- return $rules;
+ self::resetFilterProfile( $new_id );
+ return [ $new_id, $history_id ];
}
/**
@@ -1983,7 +2576,7 @@ class AbuseFilter {
*
* @return array
*/
- static function compareVersions( $version_1, $version_2 ) {
+ public static function compareVersions( $version_1, $version_2 ) {
$compareFields = [
'af_public_comments',
'af_pattern',
@@ -2010,9 +2603,11 @@ class AbuseFilter {
if ( !isset( $actions1[$action] ) && !isset( $actions2[$action] ) ) {
// They're both unset
} elseif ( isset( $actions1[$action] ) && isset( $actions2[$action] ) ) {
- // They're both set.
+ // They're both set. Double check needed, e.g. per T180194
if ( array_diff( $actions1[$action]['parameters'],
- $actions2[$action]['parameters'] ) ) {
+ $actions2[$action]['parameters'] ) ||
+ array_diff( $actions2[$action]['parameters'],
+ $actions1[$action]['parameters'] ) ) {
// Different parameters
$differences[] = 'actions';
}
@@ -2029,28 +2624,28 @@ class AbuseFilter {
* @param stdClass $row
* @return array
*/
- static function translateFromHistory( $row ) {
- # Translate into an abuse_filter row with some black magic.
- # This is ever so slightly evil!
+ public static function translateFromHistory( $row ) {
+ // Manually translate into an abuse_filter row.
$af_row = new stdClass;
foreach ( self::$history_mappings as $af_col => $afh_col ) {
$af_row->$af_col = $row->$afh_col;
}
- # Process flags
-
+ // Process flags
$af_row->af_deleted = 0;
$af_row->af_hidden = 0;
$af_row->af_enabled = 0;
- $flags = explode( ',', $row->afh_flags );
- foreach ( $flags as $flag ) {
- $col_name = "af_$flag";
- $af_row->$col_name = 1;
+ if ( $row->afh_flags !== '' ) {
+ $flags = explode( ',', $row->afh_flags );
+ foreach ( $flags as $flag ) {
+ $col_name = "af_$flag";
+ $af_row->$col_name = 1;
+ }
}
- # Process actions
+ // Process actions
$actions_raw = unserialize( $row->afh_actions );
$actions_output = [];
if ( is_array( $actions_raw ) ) {
@@ -2069,13 +2664,15 @@ class AbuseFilter {
* @param string $action
* @return string
*/
- static function getActionDisplay( $action ) {
+ public static function getActionDisplay( $action ) {
// Give grep a chance to find the usages:
// abusefilter-action-tag, abusefilter-action-throttle, abusefilter-action-warn,
// abusefilter-action-blockautopromote, abusefilter-action-block, abusefilter-action-degroup,
// abusefilter-action-rangeblock, abusefilter-action-disallow
- $display = wfMessage( "abusefilter-action-$action" )->text();
- $display = wfMessage( "abusefilter-action-$action", $display )->isDisabled() ? $action : $display;
+ $display = wfMessage( "abusefilter-action-$action" )->escaped();
+ $display = wfMessage( "abusefilter-action-$action", $display )->isDisabled()
+ ? htmlspecialchars( $action )
+ : $display;
return $display;
}
@@ -2145,18 +2742,11 @@ class AbuseFilter {
$vars->addHolders(
self::generateUserVars( $user ),
- self::generateTitleVars( $title, 'ARTICLE' )
+ self::generateTitleVars( $title, 'PAGE' )
);
$vars->setVar( 'ACTION', 'delete' );
- if ( class_exists( CommentStore::class ) ) {
- $vars->setVar( 'SUMMARY', CommentStore::newKey( 'rc_comment' )
- // $row comes from RecentChange::selectFields()
- ->getCommentLegacy( wfGetDB( DB_REPLICA ), $row )->text
- );
- } else {
- $vars->setVar( 'SUMMARY', $row->rc_comment );
- }
+ $vars->setVar( 'SUMMARY', CommentStore::getStore()->getComment( 'rc_comment', $row )->text );
return $vars;
}
@@ -2178,18 +2768,11 @@ class AbuseFilter {
$vars->addHolders(
self::generateUserVars( $user ),
- self::generateTitleVars( $title, 'ARTICLE' )
+ self::generateTitleVars( $title, 'PAGE' )
);
$vars->setVar( 'ACTION', 'edit' );
- if ( class_exists( CommentStore::class ) ) {
- $vars->setVar( 'SUMMARY', CommentStore::newKey( 'rc_comment' )
- // $row comes from RecentChange::selectFields()
- ->getCommentLegacy( wfGetDB( DB_REPLICA ), $row )->text
- );
- } else {
- $vars->setVar( 'SUMMARY', $row->rc_comment );
- }
+ $vars->setVar( 'SUMMARY', CommentStore::getStore()->getComment( 'rc_comment', $row )->text );
$vars->setLazyLoadVar( 'new_wikitext', 'revision-text-by-id',
[ 'revid' => $row->rc_this_oldid ] );
@@ -2229,21 +2812,14 @@ class AbuseFilter {
self::generateTitleVars( $newTitle, 'MOVED_TO' )
);
- if ( class_exists( CommentStore::class ) ) {
- $vars->setVar( 'SUMMARY', CommentStore::newKey( 'rc_comment' )
- // $row comes from RecentChange::selectFields()
- ->getCommentLegacy( wfGetDB( DB_REPLICA ), $row )->text
- );
- } else {
- $vars->setVar( 'SUMMARY', $row->rc_comment );
- }
+ $vars->setVar( 'SUMMARY', CommentStore::getStore()->getComment( 'rc_comment', $row )->text );
$vars->setVar( 'ACTION', 'move' );
return $vars;
}
/**
- * @param Title $title
+ * @param Title|null $title
* @param Page|null $page
* @return AbuseFilterVariableHolder
*/
@@ -2255,13 +2831,13 @@ class AbuseFilter {
$page = WikiPage::factory( $title );
}
- $vars->setLazyLoadVar( 'edit_diff', 'diff',
+ $vars->setLazyLoadVar( 'edit_diff', 'diff-array',
[ 'oldtext-var' => 'old_wikitext', 'newtext-var' => 'new_wikitext' ] );
- $vars->setLazyLoadVar( 'edit_diff_pst', 'diff',
+ $vars->setLazyLoadVar( 'edit_diff_pst', 'diff-array',
[ 'oldtext-var' => 'old_wikitext', 'newtext-var' => 'new_pst' ] );
$vars->setLazyLoadVar( 'new_size', 'length', [ 'length-var' => 'new_wikitext' ] );
$vars->setLazyLoadVar( 'old_size', 'length', [ 'length-var' => 'old_wikitext' ] );
- $vars->setLazyLoadVar( 'edit_delta', 'subtract',
+ $vars->setLazyLoadVar( 'edit_delta', 'subtract-int',
[ 'val1-var' => 'new_size', 'val2-var' => 'old_size' ] );
// Some more specific/useful details about the changes.
@@ -2279,8 +2855,6 @@ class AbuseFilter {
[ 'oldlink-var' => 'old_links', 'newlink-var' => 'all_links' ] );
$vars->setLazyLoadVar( 'new_text', 'strip-html',
[ 'html-var' => 'new_html' ] );
- $vars->setLazyLoadVar( 'old_text', 'strip-html',
- [ 'html-var' => 'old_html' ] );
if ( $title instanceof Title ) {
$vars->setLazyLoadVar( 'all_links', 'links-from-wikitext',
@@ -2311,12 +2885,6 @@ class AbuseFilter {
'wikitext-var' => 'new_wikitext',
'article' => $page
] );
- $vars->setLazyLoadVar( 'old_html', 'parse-wikitext-nonedit',
- [
- 'namespace' => $title->getNamespace(),
- 'title' => $title->getText(),
- 'wikitext-var' => 'old_wikitext'
- ] );
}
return $vars;
@@ -2358,13 +2926,21 @@ class AbuseFilter {
}
// Now, build the body of the table.
+ $deprecatedVars = self::getDeprecatedVariables();
foreach ( $vars as $key => $value ) {
$key = strtolower( $key );
+ if ( array_key_exists( $key, $deprecatedVars ) ) {
+ $key = $deprecatedVars[$key];
+ }
if ( !empty( $variableMessageMappings[$key] ) ) {
$mapping = $variableMessageMappings[$key];
$keyDisplay = $context->msg( "abusefilter-edit-builder-vars-$mapping" )->parse() .
- ' ' . Xml::element( 'code', null, $context->msg( 'parentheses', $key )->text() );
+ ' ' . Xml::element( 'code', null, $context->msg( 'parentheses' )->rawParams( $key )->text() );
+ } elseif ( !empty( self::$disabledVars[$key] ) ) {
+ $mapping = self::$disabledVars[$key];
+ $keyDisplay = $context->msg( "abusefilter-edit-builder-vars-$mapping" )->parse() .
+ ' ' . Xml::element( 'code', null, $context->msg( 'parentheses' )->rawParams( $key )->text() );
} else {
$keyDisplay = Xml::element( 'code', null, $key );
}
@@ -2393,15 +2969,70 @@ class AbuseFilter {
* @param string[] $parameters
* @return string
*/
- static function formatAction( $action, $parameters ) {
+ public static function formatAction( $action, $parameters ) {
/** @var $wgLang Language */
global $wgLang;
- if ( count( $parameters ) == 0 ) {
+ if ( count( $parameters ) === 0 ||
+ ( $action === 'block' && count( $parameters ) !== 3 ) ) {
$displayAction = self::getActionDisplay( $action );
} else {
- $displayAction = self::getActionDisplay( $action ) .
+ if ( $action === 'block' ) {
+ // Needs to be treated separately since the message is more complex
+ $messages = [
+ wfMessage( 'abusefilter-block-anon' )->escaped() .
+ wfMessage( 'colon-separator' )->escaped() .
+ $wgLang->translateBlockExpiry( $parameters[1] ),
+ wfMessage( 'abusefilter-block-user' )->escaped() .
+ wfMessage( 'colon-separator' )->escaped() .
+ $wgLang->translateBlockExpiry( $parameters[2] )
+ ];
+ if ( $parameters[0] === 'blocktalk' ) {
+ $messages[] = wfMessage( 'abusefilter-block-talk' )->escaped();
+ }
+ $displayAction = $wgLang->commaList( $messages );
+ } elseif ( $action === 'throttle' ) {
+ array_shift( $parameters );
+ list( $actions, $time ) = explode( ',', array_shift( $parameters ) );
+
+ if ( $parameters === [ '' ] ) {
+ // Having empty groups won't happen for new filters due to validation upon saving,
+ // but old entries may have it. We'd better not show a broken message. Also,
+ // the array has an empty string inside because we haven't been passing an empty array
+ // as the default when retrieving wpFilterThrottleGroups with getArray (when it was
+ // a CheckboxMultiselect).
+ $groups = '';
+ } else {
+ // Join comma-separated groups in a commaList with a final "and", and convert to messages.
+ // Messages used here: abusefilter-throttle-ip, abusefilter-throttle-user,
+ // abusefilter-throttle-site, abusefilter-throttle-creationdate, abusefilter-throttle-editcount
+ // abusefilter-throttle-range, abusefilter-throttle-page
+ foreach ( $parameters as &$val ) {
+ if ( strpos( $val, ',' ) !== false ) {
+ $subGroups = explode( ',', $val );
+ foreach ( $subGroups as &$group ) {
+ $msg = wfMessage( "abusefilter-throttle-$group" );
+ // We previously accepted literally everything in this field, so old entries
+ // may have weird stuff.
+ $group = $msg->exists() ? $msg->text() : $group;
+ }
+ unset( $group );
+ $val = $wgLang->listToText( $subGroups );
+ } else {
+ $msg = wfMessage( "abusefilter-throttle-$val" );
+ $val = $msg->exists() ? $msg->text() : $val;
+ }
+ }
+ unset( $val );
+ $groups = $wgLang->semicolonList( $parameters );
+ }
+ $displayAction = self::getActionDisplay( $action ) .
wfMessage( 'colon-separator' )->escaped() .
- $wgLang->semicolonList( $parameters );
+ wfMessage( 'abusefilter-throttle-details' )->params( $actions, $time, $groups )->escaped();
+ } else {
+ $displayAction = self::getActionDisplay( $action ) .
+ wfMessage( 'colon-separator' )->escaped() .
+ $wgLang->semicolonList( array_map( 'htmlspecialchars', $parameters ) );
+ }
}
return $displayAction;
@@ -2411,13 +3042,13 @@ class AbuseFilter {
* @param string $value
* @return string
*/
- static function formatFlags( $value ) {
+ public static function formatFlags( $value ) {
/** @var $wgLang Language */
global $wgLang;
$flags = array_filter( explode( ',', $value ) );
$flags_display = [];
foreach ( $flags as $flag ) {
- $flags_display[] = wfMessage( "abusefilter-history-$flag" )->text();
+ $flags_display[] = wfMessage( "abusefilter-history-$flag" )->escaped();
}
return $wgLang->commaList( $flags_display );
@@ -2427,7 +3058,7 @@ class AbuseFilter {
* @param string $filterID
* @return string
*/
- static function getGlobalFilterDescription( $filterID ) {
+ public static function getGlobalFilterDescription( $filterID ) {
global $wgAbuseFilterCentralDB;
if ( !$wgAbuseFilterCentralDB ) {
@@ -2457,7 +3088,7 @@ class AbuseFilter {
* @param string $group The filter's group (as defined in $wgAbuseFilterValidGroups)
* @return string A name for that filter group, or the input.
*/
- static function nameGroup( $group ) {
+ public static function nameGroup( $group ) {
// Give grep a chance to find the usages: abusefilter-group-default
$msg = "abusefilter-group-$group";
@@ -2474,7 +3105,7 @@ class AbuseFilter {
* Note also that if the revision for any reason is not an Revision
* the function returns with an empty string.
*
- * @param Revision $revision a valid revision
+ * @param Revision|null $revision a valid revision
* @param int $audience one of:
* Revision::FOR_PUBLIC to be displayed to all users
* Revision::FOR_THIS_USER to be displayed to the given user
@@ -2482,7 +3113,7 @@ class AbuseFilter {
* @return string|null the content of the revision as some kind of string,
* or an empty string if it can not be found
*/
- static function revisionToString( $revision, $audience = Revision::FOR_THIS_USER ) {
+ public static function revisionToString( $revision, $audience = Revision::FOR_THIS_USER ) {
if ( !$revision instanceof Revision ) {
return '';
}
@@ -2509,7 +3140,7 @@ class AbuseFilter {
*
* @return string a suitable string representation of the content.
*/
- static function contentToString( Content $content ) {
+ public static function contentToString( Content $content ) {
$text = null;
if ( Hooks::run( 'AbuseFilter-contentToString', [ $content, &$text ] ) ) {
@@ -2518,21 +3149,15 @@ class AbuseFilter {
: $content->getTextForSearchIndex();
}
- if ( is_string( $text ) ) {
- // T22310
- // XXX: Is this really needed? Should we rather apply PST?
- $text = str_replace( "\r\n", "\n", $text );
- } else {
- $text = '';
- }
-
+ // T22310
+ $text = TextContent::normalizeLineEndings( (string)$text );
return $text;
}
- /*
+ /**
* Get the history ID of the first change to a given filter
*
- * @param int $filterId Filter id
+ * @param int $filterID Filter id
* @return int
*/
public static function getFirstFilterChange( $filterID ) {
diff --git a/AbuseFilter/includes/AbuseFilterChangesList.php b/AbuseFilter/includes/AbuseFilterChangesList.php
new file mode 100644
index 00000000..94855f34
--- /dev/null
+++ b/AbuseFilter/includes/AbuseFilterChangesList.php
@@ -0,0 +1,123 @@
+<?php
+
+class AbuseFilterChangesList extends OldChangesList {
+
+ /**
+ * @var string
+ */
+ private $testFilter;
+
+ /**
+ * @param Skin $skin
+ * @param string $testFilter
+ */
+ public function __construct( Skin $skin, $testFilter ) {
+ parent::__construct( $skin );
+ $this->testFilter = $testFilter;
+ }
+
+ /**
+ * @param string &$s
+ * @param RecentChange &$rc
+ * @param string[] &$classes
+ * @suppress PhanUndeclaredProperty for $rc->filterResult, which isn't a big deal
+ */
+ public function insertExtra( &$s, &$rc, &$classes ) {
+ if ( (int)$rc->getAttribute( 'rc_deleted' ) !== 0 ) {
+ $s .= ' ' . $this->msg( 'abusefilter-log-hidden-implicit' )->parse();
+ if ( !$this->userCan( $rc, Revision::SUPPRESSED_ALL ) ) {
+ return;
+ }
+ }
+
+ $examineParams = [];
+ if ( $this->testFilter ) {
+ $examineParams['testfilter'] = $this->testFilter;
+ }
+
+ $title = SpecialPage::getTitleFor( 'AbuseFilter', 'examine/' . $rc->mAttribs['rc_id'] );
+ $examineLink = $this->linkRenderer->makeLink(
+ $title,
+ new HtmlArmor( $this->msg( 'abusefilter-changeslist-examine' )->parse() ),
+ [],
+ $examineParams
+ );
+
+ $s .= ' ' . $this->msg( 'parentheses' )->rawParams( $examineLink )->escaped();
+
+ // Add CSS classes for match and not match
+ if ( isset( $rc->filterResult ) ) {
+ $class = $rc->filterResult ?
+ 'mw-abusefilter-changeslist-match' :
+ 'mw-abusefilter-changeslist-nomatch';
+
+ $classes[] = $class;
+ }
+ }
+
+ /**
+ * Insert links to user page, user talk page and eventually a blocking link.
+ * Like the parent, but don't hide details if user can see them.
+ *
+ * @param string &$s HTML to update
+ * @param RecentChange &$rc
+ */
+ public function insertUserRelatedLinks( &$s, &$rc ) {
+ $links = $this->getLanguage()->getDirMark() . Linker::userLink( $rc->mAttribs['rc_user'],
+ $rc->mAttribs['rc_user_text'] ) .
+ Linker::userToolLinks( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] );
+
+ if ( $this->isDeleted( $rc, Revision::DELETED_USER ) ) {
+ if ( $this->userCan( $rc, Revision::DELETED_USER ) ) {
+ $s .= ' <span class="history-deleted">' . $links . '</span>';
+ } else {
+ $s .= ' <span class="history-deleted">' .
+ $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
+ }
+ } else {
+ $s .= $links;
+ }
+ }
+
+ /**
+ * Insert a formatted comment. Like the parent, but don't hide details if user can see them.
+ * @param RecentChange $rc
+ * @return string
+ */
+ public function insertComment( $rc ) {
+ if ( $this->isDeleted( $rc, Revision::DELETED_COMMENT ) ) {
+ if ( $this->userCan( $rc, Revision::DELETED_COMMENT ) ) {
+ return ' <span class="history-deleted">' .
+ Linker::commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() ) . '</span>';
+ } else {
+ return ' <span class="history-deleted">' .
+ $this->msg( 'rev-deleted-comment' )->escaped() . '</span>';
+ }
+ } else {
+ return Linker::commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() );
+ }
+ }
+
+ /**
+ * Insert a formatted action. The same as parent, but with a different audience in LogFormatter
+ *
+ * @param RecentChange $rc
+ * @return string
+ */
+ public function insertLogEntry( $rc ) {
+ $formatter = LogFormatter::newFromRow( $rc->mAttribs );
+ $formatter->setContext( $this->getContext() );
+ $formatter->setAudience( LogFormatter::FOR_THIS_USER );
+ $formatter->setShowUserToolLinks( true );
+ $mark = $this->getLanguage()->getDirMark();
+ return $formatter->getActionText() . " $mark" . $formatter->getComment();
+ }
+
+ /**
+ * @param string &$s
+ * @param RecentChange &$rc
+ */
+ public function insertRollback( &$s, &$rc ) {
+ // Kill rollback links.
+ }
+}
diff --git a/AbuseFilter/includes/AbuseFilter.hooks.php b/AbuseFilter/includes/AbuseFilterHooks.php
index 9ad8e076..20c07e4a 100644
--- a/AbuseFilter/includes/AbuseFilter.hooks.php
+++ b/AbuseFilter/includes/AbuseFilterHooks.php
@@ -1,23 +1,24 @@
<?php
-use MediaWiki\Auth\AuthManager;
+use MediaWiki\Linker\LinkRenderer;
use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\Database;
class AbuseFilterHooks {
const FETCH_ALL_TAGS_KEY = 'abusefilter-fetch-all-tags';
+ /** @var AbuseFilterVariableHolder|bool */
public static $successful_action_vars = false;
- /** @var WikiPage|Article|bool */
- public static $last_edit_page = false; // make sure edit filter & edit save hooks match
+ /** @var WikiPage|Article|bool|null Make sure edit filter & edit save hooks match */
+ public static $last_edit_page = false;
// So far, all of the error message out-params for these hooks accept HTML.
- // Hooray!
/**
* Called right after configuration has been loaded.
*/
public static function onRegistration() {
global $wgAbuseFilterAvailableActions, $wgAbuseFilterRestrictedActions,
- $wgAuthManagerAutoConfig;
+ $wgAuthManagerAutoConfig, $wgActionFilteredLogs;
if ( isset( $wgAbuseFilterAvailableActions ) || isset( $wgAbuseFilterRestrictedActions ) ) {
wfWarn( '$wgAbuseFilterAvailableActions and $wgAbuseFilterRestrictedActions have been '
@@ -28,8 +29,15 @@ class AbuseFilterHooks {
$wgAuthManagerAutoConfig['preauth'][AbuseFilterPreAuthenticationProvider::class] = [
'class' => AbuseFilterPreAuthenticationProvider::class,
- 'sort' => 5, // run after normal preauth providers to keep the log cleaner
+ // Run after normal preauth providers to keep the log cleaner
+ 'sort' => 5,
];
+
+ $wgActionFilteredLogs['suppress'] = array_merge(
+ $wgActionFilteredLogs['suppress'],
+ // Message: log-action-filter-suppress-abuselog
+ [ 'abuselog' => [ 'hide-afl', 'unhide-afl' ] ]
+ );
}
/**
@@ -41,7 +49,6 @@ class AbuseFilterHooks {
* @param string $summary Edit summary for page
* @param User $user the user performing the edit
* @param bool $minoredit whether this is a minor edit according to the user.
- * @return bool Always true
*/
public static function onEditFilterMergedContent( IContextSource $context, Content $content,
Status $status, $summary, User $user, $minoredit
@@ -54,8 +61,6 @@ class AbuseFilterHooks {
// Produce a useful error message for API edits
$status->apiHookResult = self::getApiResult( $filterStatus );
}
-
- return true;
}
/**
@@ -112,10 +117,10 @@ class AbuseFilterHooks {
// Load vars for filters to check
$vars = self::newVariableHolderForEdit(
- $user, $title, $page, $summary, $content, $oldcontent, $text
+ $user, $title, $page, $summary, $content, $text, $oldcontent
);
- $filter_result = AbuseFilter::filterAction( $vars, $title );
+ $filter_result = AbuseFilter::filterAction( $vars, $title, 'default', $user );
if ( !$filter_result->isOK() ) {
$status->merge( $filter_result );
@@ -134,19 +139,19 @@ class AbuseFilterHooks {
* @param WikiPage|null $page
* @param string $summary
* @param Content $newcontent
- * @param Content|null $oldcontent
* @param string $text
+ * @param Content|null $oldcontent
* @return AbuseFilterVariableHolder
* @throws MWException
*/
private static function newVariableHolderForEdit(
User $user, Title $title, $page, $summary, Content $newcontent,
- $oldcontent = null, $text
+ $text, $oldcontent = null
) {
$vars = new AbuseFilterVariableHolder();
$vars->addHolders(
AbuseFilter::generateUserVars( $user ),
- AbuseFilter::generateTitleVars( $title, 'ARTICLE' )
+ AbuseFilter::generateTitleVars( $title, 'PAGE' )
);
$vars->setVar( 'action', 'edit' );
$vars->setVar( 'summary', $summary );
@@ -189,7 +194,7 @@ class AbuseFilterHooks {
// The value is a nested structure keyed by filter id, which doesn't make sense when we only
// return the result from one filter. Flatten it to a plain array of actions.
$actionsTaken = array_values( array_unique(
- call_user_func_array( 'array_merge', array_values( $status->getValue() ) )
+ array_merge( ...array_values( $status->getValue() ) )
) );
$code = ( $actionsTaken === [ 'warn' ] ) ? 'abusefilter-warning' : 'abusefilter-disallowed';
@@ -212,7 +217,7 @@ class AbuseFilterHooks {
}
/**
- * @param Article|WikiPage $article
+ * @param WikiPage $wikiPage
* @param User $user
* @param string $content Content
* @param string $summary
@@ -223,29 +228,28 @@ class AbuseFilterHooks {
* @param Revision $revision
* @param Status $status
* @param int $baseRevId
- * @return bool
*/
public static function onPageContentSaveComplete(
- &$article, &$user, $content, $summary, $minoredit, $watchthis, $sectionanchor,
- &$flags, $revision, &$status, $baseRevId
+ WikiPage $wikiPage, $user, $content, $summary, $minoredit, $watchthis, $sectionanchor,
+ $flags, $revision, $status, $baseRevId
) {
if ( !self::$successful_action_vars || !$revision ) {
self::$successful_action_vars = false;
-
- return true;
+ return;
}
- /** @var AbuseFilterVariableHolder $vars */
+ /** @var AbuseFilterVariableHolder|bool $vars */
$vars = self::$successful_action_vars;
- if ( $vars->getVar( 'article_prefixedtext' )->toString() !==
- $article->getTitle()->getPrefixedText()
+ if ( $vars->getVar( 'page_prefixedtitle' )->toString() !==
+ $wikiPage->getTitle()->getPrefixedText()
) {
- return true;
+ return;
}
- if ( !self::identicalPageObjects( $article, self::$last_edit_page ) ) {
- return true; // this isn't the edit $successful_action_vars was set for
+ if ( !self::identicalPageObjects( $wikiPage, self::$last_edit_page ) ) {
+ // This isn't the edit $successful_action_vars was set for
+ return;
}
self::$last_edit_page = false;
@@ -254,7 +258,7 @@ class AbuseFilterHooks {
$log_ids = $vars->getVar( 'local_log_ids' )->toNative();
$dbw = wfGetDB( DB_MASTER );
- if ( count( $log_ids ) ) {
+ if ( $log_ids !== null && count( $log_ids ) ) {
$dbw->update( 'abuse_filter_log',
[ 'afl_rev_id' => $revision->getId() ],
[ 'afl_id' => $log_ids ],
@@ -266,7 +270,7 @@ class AbuseFilterHooks {
if ( $vars->getVar( 'global_log_ids' ) ) {
$log_ids = $vars->getVar( 'global_log_ids' )->toNative();
- if ( count( $log_ids ) ) {
+ if ( $log_ids !== null && count( $log_ids ) ) {
global $wgAbuseFilterCentralDB;
$fdb = wfGetDB( DB_MASTER, [], $wgAbuseFilterCentralDB );
@@ -277,8 +281,6 @@ class AbuseFilterHooks {
);
}
}
-
- return true;
}
/**
@@ -296,8 +298,7 @@ class AbuseFilterHooks {
/**
* @param User $user
- * @param array $promote
- * @return bool
+ * @param array &$promote
*/
public static function onGetAutoPromoteGroups( $user, &$promote ) {
if ( $promote ) {
@@ -314,8 +315,6 @@ class AbuseFilterHooks {
$promote = [];
}
}
-
- return true;
}
/**
@@ -338,7 +337,7 @@ class AbuseFilterHooks {
$vars->setVar( 'SUMMARY', $reason );
$vars->setVar( 'ACTION', 'move' );
- $result = AbuseFilter::filterAction( $vars, $oldTitle );
+ $result = AbuseFilter::filterAction( $vars, $oldTitle, 'default', $user );
$status->merge( $result );
return $result->isOK();
@@ -348,22 +347,22 @@ class AbuseFilterHooks {
* @param WikiPage $article
* @param User $user
* @param string $reason
- * @param string $error
+ * @param string &$error
* @param Status $status
* @return bool
*/
- public static function onArticleDelete( &$article, &$user, &$reason, &$error, &$status ) {
+ public static function onArticleDelete( $article, $user, $reason, &$error, $status ) {
$vars = new AbuseFilterVariableHolder;
$vars->addHolders(
AbuseFilter::generateUserVars( $user ),
- AbuseFilter::generateTitleVars( $article->getTitle(), 'ARTICLE' )
+ AbuseFilter::generateTitleVars( $article->getTitle(), 'PAGE' )
);
$vars->setVar( 'SUMMARY', $reason );
$vars->setVar( 'ACTION', 'delete' );
- $filter_result = AbuseFilter::filterAction( $vars, $article->getTitle() );
+ $filter_result = AbuseFilter::filterAction( $vars, $article->getTitle(), 'default', $user );
$status->merge( $filter_result );
$error = $filter_result->isOK() ? '' : $filter_result->getHTML();
@@ -372,65 +371,7 @@ class AbuseFilterHooks {
}
/**
- * @param User $user
- * @param string $message
- * @param bool $autocreate Indicates whether the account is created automatically.
- * @return bool
- * @deprecated AbuseFilterPreAuthenticationProvider will take over this functionality
- */
- private static function checkNewAccount( $user, &$message, $autocreate ) {
- if ( $user->getName() == wfMessage( 'abusefilter-blocker' )->inContentLanguage()->text() ) {
- $message = wfMessage( 'abusefilter-accountreserved' )->text();
-
- return false;
- }
-
- $vars = new AbuseFilterVariableHolder;
-
- // Add variables only for a registered user, so IP addresses of
- // new users won't be exposed
- global $wgUser;
- if ( !$autocreate && $wgUser->getId() ) {
- $vars->addHolders( AbuseFilter::generateUserVars( $wgUser ) );
- }
-
- $vars->setVar( 'ACTION', $autocreate ? 'autocreateaccount' : 'createaccount' );
- $vars->setVar( 'ACCOUNTNAME', $user->getName() );
-
- $filter_result = AbuseFilter::filterAction(
- $vars, SpecialPage::getTitleFor( 'Userlogin' ) );
-
- $message = $filter_result->isOK() ? '' : $filter_result->getWikiText();
-
- return $filter_result->isOK();
- }
-
- /**
- * @param User $user
- * @param string $message
- * @return bool
- * @deprecated AbuseFilterPreAuthenticationProvider will take over this functionality
- */
- public static function onAbortNewAccount( $user, &$message ) {
- return self::checkNewAccount( $user, $message, false );
- }
-
- /**
- * @param User $user
- * @param string $message
- * @return bool
- * @deprecated AbuseFilterPreAuthenticationProvider will take over this functionality
- */
- public static function onAbortAutoAccount( $user, &$message ) {
- // FIXME: ERROR MESSAGE IS SHOWN IN A WEIRD WAY, BEACUSE $message
- // HERE MEANS NAME OF THE MESSAGE, NOT THE TEXT OF THE MESSAGE AS
- // IN AbortNewAccount HOOK WHICH WE CANNOT PROVIDE!
- return self::checkNewAccount( $user, $message, true );
- }
-
- /**
* @param RecentChange $recentChange
- * @return bool
*/
public static function onRecentChangeSave( $recentChange ) {
$title = Title::makeTitle(
@@ -440,14 +381,12 @@ class AbuseFilterHooks {
$action = $recentChange->mAttribs['rc_log_type'] ?
$recentChange->mAttribs['rc_log_type'] : 'edit';
$actionID = implode( '-', [
- $title->getPrefixedText(), $recentChange->mAttribs['rc_user_text'], $action
+ $title->getPrefixedText(), $recentChange->getAttribute( 'rc_user_text' ), $action
] );
if ( isset( AbuseFilter::$tagsToSet[$actionID] ) ) {
$recentChange->addTags( AbuseFilter::$tagsToSet[$actionID] );
}
-
- return true;
}
/**
@@ -471,11 +410,11 @@ class AbuseFilterHooks {
/**
* @param array $tags
* @param bool $enabled
- * @return bool
*/
private static function fetchAllTags( array &$tags, $enabled ) {
$services = MediaWikiServices::getInstance();
$cache = $services->getMainWANObjectCache();
+ $fname = __METHOD__;
$tags = $cache->getWithSetCallback(
// Key to store the cached value under
@@ -485,14 +424,14 @@ class AbuseFilterHooks {
$cache::TTL_MINUTE,
// Function that derives the new key value
- function ( $oldValue, &$ttl, array &$setOpts ) use ( $enabled, $tags ) {
+ function ( $oldValue, &$ttl, array &$setOpts ) use ( $enabled, $tags, $fname ) {
global $wgAbuseFilterCentralDB, $wgAbuseFilterIsCentral;
$dbr = wfGetDB( DB_REPLICA );
// Account for any snapshot/replica DB lag
$setOpts += Database::getCacheSetOptions( $dbr );
- # This is a pretty awful hack.
+ // This is a pretty awful hack.
$where = [ 'afa_consequence' => 'tag', 'af_deleted' => false ];
if ( $enabled ) {
@@ -502,7 +441,7 @@ class AbuseFilterHooks {
[ 'abuse_filter_action', 'abuse_filter' ],
'afa_parameters',
$where,
- __METHOD__,
+ $fname,
[],
[ 'abuse_filter' => [ 'INNER JOIN', 'afa_filter=af_id' ] ]
);
@@ -520,7 +459,7 @@ class AbuseFilterHooks {
[ 'abuse_filter_action', 'abuse_filter' ],
'afa_parameters',
$where,
- __METHOD__,
+ $fname,
[],
[ 'abuse_filter' => [ 'INNER JOIN', 'afa_filter=af_id' ] ]
);
@@ -536,31 +475,28 @@ class AbuseFilterHooks {
}
);
- return true;
+ $tags[] = 'abusefilter-condition-limit';
}
/**
- * @param string[] $tags
- * @return bool
+ * @param string[] &$tags
*/
public static function onListDefinedTags( array &$tags ) {
- return self::fetchAllTags( $tags, false );
+ self::fetchAllTags( $tags, false );
}
/**
- * @param string[] $tags
- * @return bool
+ * @param string[] &$tags
*/
public static function onChangeTagsListActive( array &$tags ) {
- return self::fetchAllTags( $tags, true );
+ self::fetchAllTags( $tags, true );
}
/**
- * @param DatabaseUpdater|null $updater
+ * @param DatabaseUpdater $updater
* @throws MWException
- * @return bool
*/
- public static function onLoadExtensionSchemaUpdates( $updater = null ) {
+ public static function onLoadExtensionSchemaUpdates( DatabaseUpdater $updater ) {
$dir = dirname( __DIR__ );
if ( $updater->getDB()->getType() == 'mysql' || $updater->getDB()->getType() == 'sqlite' ) {
@@ -649,22 +585,74 @@ class AbuseFilterHooks {
$updater->addExtensionUpdate( [
'addPgField', 'abuse_filter', 'af_global', 'SMALLINT NOT NULL DEFAULT 0' ] );
$updater->addExtensionUpdate( [
+ 'addPgField', 'abuse_filter', 'af_group', "TEXT NOT NULL DEFAULT 'default'" ] );
+ $updater->addExtensionUpdate( [
+ 'addPgExtIndex', 'abuse_filter', 'abuse_filter_group_enabled_id',
+ "(af_group, af_enabled, af_id)"
+ ] );
+ $updater->addExtensionUpdate( [
+ 'addPgField', 'abuse_filter_history', 'afh_group', "TEXT" ] );
+ $updater->addExtensionUpdate( [
'addPgField', 'abuse_filter_log', 'afl_wiki', 'TEXT' ] );
$updater->addExtensionUpdate( [
'addPgField', 'abuse_filter_log', 'afl_deleted', 'SMALLINT' ] );
$updater->addExtensionUpdate( [
+ 'setDefault', 'abuse_filter_log', 'afl_deleted', '0' ] );
+ $updater->addExtensionUpdate( [
+ 'changeNullableField', 'abuse_filter_log', 'afl_deleted', 'NOT NULL', true ] );
+ $updater->addExtensionUpdate( [
+ 'addPgField', 'abuse_filter_log', 'afl_patrolled_by', 'INTEGER' ] );
+ $updater->addExtensionUpdate( [
+ 'addPgField', 'abuse_filter_log', 'afl_rev_id', 'INTEGER' ] );
+ $updater->addExtensionUpdate( [
+ 'addPgField', 'abuse_filter_log', 'afl_log_id', 'INTEGER' ] );
+ $updater->addExtensionUpdate( [
'changeField', 'abuse_filter_log', 'afl_filter', 'TEXT', '' ] );
$updater->addExtensionUpdate( [
- 'addPgExtIndex', 'abuse_filter_log', 'abuse_filter_log_ip', "(afl_ip)" ] );
+ 'changeField', 'abuse_filter_log', 'afl_namespace', "INTEGER", '' ] );
+ $updater->addExtensionUpdate( [
+ 'dropPgIndex', 'abuse_filter_log', 'abuse_filter_log_filter' ] );
+ $updater->addExtensionUpdate( [
+ 'dropPgIndex', 'abuse_filter_log', 'abuse_filter_log_ip' ] );
+ $updater->addExtensionUpdate( [
+ 'dropPgIndex', 'abuse_filter_log', 'abuse_filter_log_title' ] );
+ $updater->addExtensionUpdate( [
+ 'dropPgIndex', 'abuse_filter_log', 'abuse_filter_log_user' ] );
+ $updater->addExtensionUpdate( [
+ 'dropPgIndex', 'abuse_filter_log', 'abuse_filter_log_user_text' ] );
+ $updater->addExtensionUpdate( [
+ 'dropPgIndex', 'abuse_filter_log', 'abuse_filter_log_wiki' ] );
+ $updater->addExtensionUpdate( [
+ 'addPgExtIndex', 'abuse_filter_log', 'abuse_filter_log_filter_timestamp',
+ '(afl_filter,afl_timestamp)'
+ ] );
+ $updater->addExtensionUpdate( [
+ 'addPgExtIndex', 'abuse_filter_log', 'abuse_filter_log_user_timestamp',
+ '(afl_user,afl_user_text,afl_timestamp)'
+ ] );
+ $updater->addExtensionUpdate( [
+ 'addPgExtIndex', 'abuse_filter_log', 'abuse_filter_log_page_timestamp',
+ '(afl_namespace,afl_title,afl_timestamp)'
+ ] );
+ $updater->addExtensionUpdate( [
+ 'addPgExtIndex', 'abuse_filter_log', 'abuse_filter_log_ip_timestamp',
+ '(afl_ip, afl_timestamp)'
+ ] );
$updater->addExtensionUpdate( [
- 'addPgExtIndex', 'abuse_filter_log', 'abuse_filter_log_wiki', "(afl_wiki)" ] );
+ 'addPgExtIndex', 'abuse_filter_log', 'abuse_filter_log_rev_id',
+ '(afl_rev_id)'
+ ] );
+ $updater->addExtensionUpdate( [
+ 'addPgExtIndex', 'abuse_filter_log', 'abuse_filter_log_log_id',
+ '(afl_log_id)'
+ ] );
$updater->addExtensionUpdate( [
- 'changeField', 'abuse_filter_log', 'afl_namespace', "INTEGER" ] );
+ 'addPgExtIndex', 'abuse_filter_log', 'abuse_filter_log_wiki_timestamp',
+ '(afl_wiki,afl_timestamp)'
+ ] );
}
$updater->addExtensionUpdate( [ [ __CLASS__, 'createAbuseFilterUser' ] ] );
-
- return true;
}
/**
@@ -678,26 +666,48 @@ class AbuseFilterHooks {
if ( $user && !$updater->updateRowExists( 'create abusefilter-blocker-user' ) ) {
$user = User::newSystemUser( $username, [ 'steal' => true ] );
$updater->insertUpdateRow( 'create abusefilter-blocker-user' );
- # Promote user so it doesn't look too crazy.
+ // Promote user so it doesn't look too crazy.
$user->addGroup( 'sysop' );
}
}
/**
- * @param $id
+ * @param int $id
* @param Title $nt
- * @param array $tools
+ * @param array &$tools
* @param SpecialPage $sp for context
*/
- public static function onContributionsToolLinks( $id, $nt, &$tools, SpecialPage $sp ) {
- if ( $sp->getUser()->isAllowed( 'abusefilter-log' ) ) {
+ public static function onContributionsToolLinks( $id, $nt, array &$tools, SpecialPage $sp ) {
+ $username = $nt->getText();
+ if ( $sp->getUser()->isAllowed( 'abusefilter-log' ) && !IP::isValidRange( $username ) ) {
$linkRenderer = $sp->getLinkRenderer();
$tools['abuselog'] = $linkRenderer->makeLink(
SpecialPage::getTitleFor( 'AbuseLog' ),
$sp->msg( 'abusefilter-log-linkoncontribs' )->text(),
[ 'title' => $sp->msg( 'abusefilter-log-linkoncontribs-text',
- $nt->getText() )->text() ],
- [ 'wpSearchUser' => $nt->getText() ]
+ $username )->text() ],
+ [ 'wpSearchUser' => $username ]
+ );
+ }
+ }
+
+ /**
+ * @param IContextSource $context
+ * @param LinkRenderer $linkRenderer
+ * @param string[] &$links
+ */
+ public static function onHistoryPageToolLinks(
+ IContextSource $context,
+ LinkRenderer $linkRenderer,
+ array &$links
+ ) {
+ $user = $context->getUser();
+ if ( $user->isAllowed( 'abusefilter-log' ) ) {
+ $links[] = $linkRenderer->makeLink(
+ SpecialPage::getTitleFor( 'AbuseLog' ),
+ $context->msg( 'abusefilter-log-linkonhistory' )->text(),
+ [ 'title' => $context->msg( 'abusefilter-log-linkonhistory-text' )->text() ],
+ [ 'wpSearchTitle' => $context->getTitle()->getPrefixedText() ]
);
}
}
@@ -756,7 +766,7 @@ class AbuseFilterHooks {
$vars = new AbuseFilterVariableHolder;
$vars->addHolders(
AbuseFilter::generateUserVars( $user ),
- AbuseFilter::generateTitleVars( $title, 'ARTICLE' )
+ AbuseFilter::generateTitleVars( $title, 'PAGE' )
);
$vars->setVar( 'ACTION', $action );
@@ -768,7 +778,11 @@ class AbuseFilterHooks {
$vars->setVar( 'file_size', $upload->getFileSize() );
$vars->setVar( 'file_mime', $props['mime'] );
- $vars->setVar( 'file_mediatype', MimeMagic::singleton()->getMediaType( null, $props['mime'] ) );
+ $vars->setVar(
+ 'file_mediatype',
+ MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer()
+ ->getMediaType( null, $props['mime'] )
+ );
$vars->setVar( 'file_width', $props['width'] );
$vars->setVar( 'file_height', $props['height'] );
$vars->setVar( 'file_bits_per_channel', $props['bits'] );
@@ -806,7 +820,7 @@ class AbuseFilterHooks {
$vars->addHolders( AbuseFilter::getEditVars( $title, $page ) );
}
- $filter_result = AbuseFilter::filterAction( $vars, $title );
+ $filter_result = AbuseFilter::filterAction( $vars, $title, 'default', $user );
if ( !$filter_result->isOK() ) {
$messageAndParams = $filter_result->getErrorsArray()[0];
@@ -824,8 +838,7 @@ class AbuseFilterHooks {
/**
* Adds global variables to the Javascript as needed
*
- * @param array $vars
- * @return bool
+ * @param array &$vars
*/
public static function onMakeGlobalVariablesScript( array &$vars ) {
if ( isset( AbuseFilter::$editboxName ) && AbuseFilter::$editboxName !== null ) {
@@ -838,22 +851,17 @@ class AbuseFilterHooks {
'id' => AbuseFilterViewExamine::$examineId,
];
}
-
- return true;
}
/**
* Tables that Extension:UserMerge needs to update
*
- * @param array $updateFields
- * @return bool
+ * @param array &$updateFields
*/
public static function onUserMergeAccountFields( array &$updateFields ) {
$updateFields[] = [ 'abuse_filter', 'af_user', 'af_user_text' ];
$updateFields[] = [ 'abuse_filter_log', 'afl_user', 'afl_user_text' ];
$updateFields[] = [ 'abuse_filter_history', 'afh_user', 'afh_user_text' ];
-
- return true;
}
/**
@@ -863,7 +871,7 @@ class AbuseFilterHooks {
* @param Content $content
* @param ParserOutput $output
* @param string $summary
- * @param User $user
+ * @param User|null $user
*/
public static function onParserOutputStashForEdit(
WikiPage $page, Content $content, ParserOutput $output, $summary = '', $user = null
@@ -880,9 +888,9 @@ class AbuseFilterHooks {
// Cache any resulting filter matches.
// Do this outside the synchronous stash lock to avoid any chance of slowdown.
DeferredUpdates::addCallableUpdate(
- function () use ( $user, $page, $summary, $content, $oldcontent, $text ) {
+ function () use ( $user, $page, $summary, $content, $text, $oldcontent ) {
$vars = self::newVariableHolderForEdit(
- $user, $page->getTitle(), $page, $summary, $content, $oldcontent, $text
+ $user, $page->getTitle(), $page, $summary, $content, $text, $oldcontent
);
AbuseFilter::filterAction( $vars, $page->getTitle(), 'default', $user, 'stash' );
},
diff --git a/AbuseFilter/includes/AbuseFilterModifyLogFormatter.php b/AbuseFilter/includes/AbuseFilterModifyLogFormatter.php
index 8a148f23..769c27d3 100644
--- a/AbuseFilter/includes/AbuseFilterModifyLogFormatter.php
+++ b/AbuseFilter/includes/AbuseFilterModifyLogFormatter.php
@@ -2,8 +2,15 @@
class AbuseFilterModifyLogFormatter extends LogFormatter {
+ /**
+ * @return string
+ */
protected function getMessageKey() {
- return 'abusefilter-logentry-modify';
+ $subtype = $this->entry->getSubtype();
+ // Messages that can be used here:
+ // * abusefilter-logentry-create
+ // * abusefilter-logentry-modify
+ return "abusefilter-logentry-$subtype";
}
/**
diff --git a/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php b/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php
index 9058c6ee..ed72c5a4 100644
--- a/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php
+++ b/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php
@@ -1,12 +1,25 @@
<?php
use MediaWiki\Auth\AbstractPreAuthenticationProvider;
+use MediaWiki\Auth\AuthenticationRequest;
class AbuseFilterPreAuthenticationProvider extends AbstractPreAuthenticationProvider {
+ /**
+ * @param User $user
+ * @param User $creator
+ * @param AuthenticationRequest[] $reqs
+ * @return StatusValue
+ */
public function testForAccountCreation( $user, $creator, array $reqs ) {
return $this->testUser( $user, $creator, false );
}
+ /**
+ * @param User $user
+ * @param bool|string $autocreate
+ * @param array $options
+ * @return StatusValue
+ */
public function testUserForCreation( $user, $autocreate, array $options = [] ) {
// if this is not an autocreation, testForAccountCreation already handled it
if ( $autocreate ) {
diff --git a/AbuseFilter/includes/AbuseFilterSuppressLogFormatter.php b/AbuseFilter/includes/AbuseFilterSuppressLogFormatter.php
new file mode 100644
index 00000000..b547b02b
--- /dev/null
+++ b/AbuseFilter/includes/AbuseFilterSuppressLogFormatter.php
@@ -0,0 +1,16 @@
+<?php
+
+class AbuseFilterSuppressLogFormatter extends LogFormatter {
+
+ /**
+ * @return string
+ */
+ protected function getMessageKey() {
+ if ( $this->entry->getSubtype() === 'unhide-afl' ) {
+ return 'abusefilter-log-entry-unsuppress';
+ } else {
+ return 'abusefilter-log-entry-suppress';
+ }
+ }
+
+}
diff --git a/AbuseFilter/includes/AbuseFilterVariableHolder.php b/AbuseFilter/includes/AbuseFilterVariableHolder.php
index 8a1a1ee4..498c7b4e 100644
--- a/AbuseFilter/includes/AbuseFilterVariableHolder.php
+++ b/AbuseFilter/includes/AbuseFilterVariableHolder.php
@@ -1,9 +1,17 @@
<?php
class AbuseFilterVariableHolder {
+ /** @var (AFPData|AFComputedVariable)[] */
public $mVars = [];
- public static $varBlacklist = [ 'context' ];
+ /** @var string[] Variables used to store meta-data, we'd better be safe. See T191715 */
+ public static $varBlacklist = [ 'context', 'global_log_ids', 'local_log_ids' ];
+
+ /** @var int 2 is the default and means that new variables names (from T173889) should be used.
+ * 1 means that the old ones should be used, e.g. if this object is constructed from an
+ * afl_var_dump which still bears old variables.
+ */
+ public $mVarsVersion = 2;
public function __construct() {
// Backwards-compatibility (unused now)
@@ -11,10 +19,10 @@ class AbuseFilterVariableHolder {
}
/**
- * @param $variable
- * @param $datum
+ * @param string $variable
+ * @param mixed $datum
*/
- function setVar( $variable, $datum ) {
+ public function setVar( $variable, $datum ) {
$variable = strtolower( $variable );
if ( !( $datum instanceof AFPData || $datum instanceof AFComputedVariable ) ) {
$datum = AFPData::newFromPHPVar( $datum );
@@ -24,11 +32,11 @@ class AbuseFilterVariableHolder {
}
/**
- * @param $variable
- * @param $method
- * @param $parameters
+ * @param string $variable
+ * @param string $method
+ * @param array $parameters
*/
- function setLazyLoadVar( $variable, $method, $parameters ) {
+ public function setLazyLoadVar( $variable, $method, $parameters ) {
$placeholder = new AFComputedVariable( $method, $parameters );
$this->setVar( $variable, $placeholder );
}
@@ -36,13 +44,19 @@ class AbuseFilterVariableHolder {
/**
* Get a variable from the current object
*
- * @param $variable string
+ * @param string $variable
* @return AFPData
*/
- function getVar( $variable ) {
+ public function getVar( $variable ) {
$variable = strtolower( $variable );
+ if ( $this->mVarsVersion === 1 && in_array( $variable, AbuseFilter::getDeprecatedVariables() ) ) {
+ // Variables are stored with old names, but the parser has given us
+ // a new name. Translate it back.
+ $variable = array_search( $variable, AbuseFilter::getDeprecatedVariables() );
+ }
if ( isset( $this->mVars[$variable] ) ) {
if ( $this->mVars[$variable] instanceof AFComputedVariable ) {
+ /** @suppress PhanUndeclaredMethod False positive */
$value = $this->mVars[$variable]->compute( $this );
$this->setVar( $variable, $value );
return $value;
@@ -58,21 +72,12 @@ class AbuseFilterVariableHolder {
*/
public static function merge() {
$newHolder = new AbuseFilterVariableHolder;
- call_user_func_array( [ $newHolder, "addHolders" ], func_get_args() );
+ $newHolder->addHolders( ...func_get_args() );
return $newHolder;
}
/**
- * @param $addHolder
- * @throws MWException
- * @deprecated use addHolders() instead
- */
- public function addHolder( $addHolder ) {
- $this->addHolders( $addHolder );
- }
-
- /**
* Merge any number of holders given as arguments into this holder.
*
* @throws MWException
@@ -88,7 +93,7 @@ class AbuseFilterVariableHolder {
}
}
- function __wakeup() {
+ public function __wakeup() {
// Reset the context.
$this->setVar( 'context', 'stored' );
}
@@ -98,7 +103,7 @@ class AbuseFilterVariableHolder {
*
* @return string[]
*/
- function exportAllVars() {
+ public function exportAllVars() {
$exported = [];
foreach ( array_keys( $this->mVars ) as $varName ) {
if ( !in_array( $varName, self::$varBlacklist ) ) {
@@ -114,7 +119,7 @@ class AbuseFilterVariableHolder {
*
* @return string[]
*/
- function exportNonLazyVars() {
+ public function exportNonLazyVars() {
$exported = [];
foreach ( $this->mVars as $varName => $data ) {
if (
@@ -134,8 +139,8 @@ class AbuseFilterVariableHolder {
* either set $compute to an array with the name of the variable or set
* $compute to true to compute all not yet set variables.
*
- * @param $compute array|bool Variables we should copute if not yet set
- * @param $includeUserVars bool Include user set variables
+ * @param array|bool $compute Variables we should copute if not yet set
+ * @param bool $includeUserVars Include user set variables
* @return array
*/
public function dumpAllVars( $compute = [], $includeUserVars = false ) {
@@ -150,15 +155,18 @@ class AbuseFilterVariableHolder {
$coreVariables = AbuseFilter::getBuilderValues();
$coreVariables = array_keys( $coreVariables['vars'] );
+ $deprecatedVariables = array_keys( AbuseFilter::getDeprecatedVariables() );
+ $coreVariables = array_merge( $coreVariables, $deprecatedVariables );
// Title vars can have several prefixes
- $prefixes = [ 'ARTICLE', 'MOVED_FROM', 'MOVED_TO' ];
+ $prefixes = [ 'MOVED_FROM', 'MOVED_TO', 'PAGE' ];
$titleVars = [
- '_ARTICLEID',
+ '_ID',
'_NAMESPACE',
- '_TEXT',
- '_PREFIXEDTEXT',
- '_recent_contributors'
+ '_TITLE',
+ '_PREFIXEDTITLE',
+ '_recent_contributors',
+ '_age',
];
foreach ( $wgRestrictionTypes as $action ) {
$titleVars[] = "_restrictions_$action";
@@ -190,21 +198,25 @@ class AbuseFilterVariableHolder {
}
/**
- * @param $var
+ * @param string $var
* @return bool
*/
- function varIsSet( $var ) {
+ public function varIsSet( $var ) {
return array_key_exists( $var, $this->mVars );
}
/**
* Compute all vars which need DB access. Useful for vars which are going to be saved
* cross-wiki or used for offline analysis.
+ *
+ * @suppress PhanUndeclaredProperty for $value->mMethod (phan thinks $value is always AFPData)
+ * @suppress PhanUndeclaredMethod for $value->compute (phan thinks $value is always AFPData)
*/
- function computeDBVars() {
+ public function computeDBVars() {
static $dbTypes = [
'links-from-wikitext-or-database',
'load-recent-authors',
+ 'page-age',
'get-page-restrictions',
'simple-user-accessor',
'user-age',
diff --git a/AbuseFilter/includes/AbuseLogHitFormatter.php b/AbuseFilter/includes/AbuseLogHitFormatter.php
index 4daf0e57..a2fbb284 100644
--- a/AbuseFilter/includes/AbuseLogHitFormatter.php
+++ b/AbuseFilter/includes/AbuseLogHitFormatter.php
@@ -1,4 +1,5 @@
<?php
+
use MediaWiki\MediaWikiServices;
/**
@@ -17,9 +18,11 @@ class AbuseLogHitFormatter extends LogFormatter {
$params = parent::getMessageParameters();
$filter_title = SpecialPage::getTitleFor( 'AbuseFilter', $entry['filter'] );
- $filter_caption = $this->msg( 'abusefilter-log-detailedentry-local' )->params( $entry['filter'] );
+ $filter_caption = $this->msg( 'abusefilter-log-detailedentry-local' )
+ ->params( $entry['filter'] )
+ ->text();
$log_title = SpecialPage::getTitleFor( 'AbuseLog', $entry['log'] );
- $log_caption = $this->msg( 'abusefilter-log-detailslink' );
+ $log_caption = $this->msg( 'abusefilter-log-detailslink' )->text();
$params[4] = $entry['action'];
diff --git a/AbuseFilter/includes/TableDiffFormatterFullContext.php b/AbuseFilter/includes/TableDiffFormatterFullContext.php
new file mode 100644
index 00000000..e962e9cf
--- /dev/null
+++ b/AbuseFilter/includes/TableDiffFormatterFullContext.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * Like TableDiffFormatter, but will always render the full context
+ * (even for empty diffs).
+ *
+ * @private
+ */
+class TableDiffFormatterFullContext extends TableDiffFormatter {
+ /**
+ * Format a diff.
+ *
+ * @param Diff $diff
+ * @return string The formatted output.
+ */
+ public function format( $diff ) {
+ $xlen = $ylen = 0;
+
+ // Calculate the length of the left and the right side
+ foreach ( $diff->edits as $edit ) {
+ if ( $edit->orig ) {
+ $xlen += count( $edit->orig );
+ }
+ if ( $edit->closing ) {
+ $ylen += count( $edit->closing );
+ }
+ }
+
+ // Just render the diff with no preprocessing
+ $this->startDiff();
+ $this->block( 1, $xlen, 1, $ylen, $diff->edits );
+ $end = $this->endDiff();
+
+ return $end;
+ }
+}
diff --git a/AbuseFilter/includes/Views/AbuseFilterView.php b/AbuseFilter/includes/Views/AbuseFilterView.php
index b8d5fd57..9b019335 100644
--- a/AbuseFilter/includes/Views/AbuseFilterView.php
+++ b/AbuseFilter/includes/Views/AbuseFilterView.php
@@ -3,7 +3,7 @@
use Wikimedia\Rdbms\IDatabase;
abstract class AbuseFilterView extends ContextSource {
- public $mFilter, $mHistoryID, $mSubmit;
+ public $mFilter, $mHistoryID, $mSubmit, $mPage, $mParams;
/**
* @var \MediaWiki\Linker\LinkRenderer
@@ -11,10 +11,10 @@ abstract class AbuseFilterView extends ContextSource {
protected $linkRenderer;
/**
- * @param $page SpecialAbuseFilter
- * @param $params array
+ * @param SpecialAbuseFilter $page
+ * @param array $params
*/
- function __construct( $page, $params ) {
+ public function __construct( $page, $params ) {
$this->mPage = $page;
$this->mParams = $params;
$this->setContext( $this->mPage->getContext() );
@@ -25,11 +25,14 @@ abstract class AbuseFilterView extends ContextSource {
* @param string $subpage
* @return Title
*/
- function getTitle( $subpage = '' ) {
+ public function getTitle( $subpage = '' ) {
return $this->mPage->getPageTitle( $subpage );
}
- abstract function show();
+ /**
+ * Function to show the page
+ */
+ abstract public function show();
/**
* @return bool
@@ -63,11 +66,193 @@ abstract class AbuseFilterView extends ContextSource {
}
/**
+ * @param string $rules
+ * @param string $textName
+ * @param bool $addResultDiv
+ * @param bool $externalForm
+ * @param bool $needsModifyRights
+ * @param-taint $rules none
+ * @return string
+ */
+ public function buildEditBox(
+ $rules,
+ $textName = 'wpFilterRules',
+ $addResultDiv = true,
+ $externalForm = false,
+ $needsModifyRights = true
+ ) {
+ $this->getOutput()->enableOOUI();
+
+ // Rules are in English
+ $editorAttrib = [ 'dir' => 'ltr' ];
+
+ $noTestAttrib = [];
+ $isUserAllowed = $needsModifyRights ?
+ $this->getUser()->isAllowed( 'abusefilter-modify' ) :
+ $this->canViewPrivate();
+ if ( !$isUserAllowed ) {
+ $noTestAttrib['disabled'] = 'disabled';
+ $addResultDiv = false;
+ }
+
+ $rules = rtrim( $rules ) . "\n";
+ $canEdit = $needsModifyRights ? $this->canEdit() : $this->canViewPrivate();
+ $switchEditor = null;
+
+ if ( ExtensionRegistry::getInstance()->isLoaded( 'CodeEditor' ) ) {
+ $editorAttrib['name'] = 'wpAceFilterEditor';
+ $editorAttrib['id'] = 'wpAceFilterEditor';
+ $editorAttrib['class'] = 'mw-abusefilter-editor';
+
+ $switchEditor =
+ new OOUI\ButtonWidget(
+ [
+ 'label' => $this->msg( 'abusefilter-edit-switch-editor' )->text(),
+ 'id' => 'mw-abusefilter-switcheditor'
+ ] + $noTestAttrib
+ );
+
+ $rulesContainer = Xml::element( 'div', $editorAttrib, $rules );
+
+ // Dummy textarea for submitting form and to use in case JS is disabled
+ $textareaAttribs = [];
+ if ( !$canEdit ) {
+ $textareaAttribs['readonly'] = 'readonly';
+ }
+ if ( $externalForm ) {
+ $textareaAttribs['form'] = 'wpFilterForm';
+ }
+ $rulesContainer .= Xml::textarea( $textName, $rules, 40, 15, $textareaAttribs );
+
+ $editorConfig = AbuseFilter::getAceConfig( $canEdit );
+
+ // Add Ace configuration variable
+ $this->getOutput()->addJsConfigVars( 'aceConfig', $editorConfig );
+ } else {
+ if ( !$canEdit ) {
+ $editorAttrib['readonly'] = 'readonly';
+ }
+ if ( $externalForm ) {
+ $editorAttrib['form'] = 'wpFilterForm';
+ }
+ $rulesContainer = Xml::textarea( $textName, $rules, 40, 15, $editorAttrib );
+ }
+
+ if ( $canEdit ) {
+ // Generate builder drop-down
+ $rawDropDown = AbuseFilter::getBuilderValues();
+
+ // The array needs to be rearranged to be understood by OOUI. It comes with the format
+ // [ group-msg-key => [ text-to-add => text-msg-key ] ] and we need it as
+ // [ group-msg => [ text-msg => text-to-add ] ]
+ // Also, the 'other' element must be the first one.
+ $dropDownOptions = [ $this->msg( 'abusefilter-edit-builder-select' )->text() => 'other' ];
+ foreach ( $rawDropDown as $group => $values ) {
+ // Give grep a chance to find the usages:
+ // abusefilter-edit-builder-group-op-arithmetic, abusefilter-edit-builder-group-op-comparison,
+ // abusefilter-edit-builder-group-op-bool, abusefilter-edit-builder-group-misc,
+ // abusefilter-edit-builder-group-funcs, abusefilter-edit-builder-group-vars
+ $localisedGroup = $this->msg( "abusefilter-edit-builder-group-$group" )->text();
+ $dropDownOptions[ $localisedGroup ] = array_flip( $values );
+ $newKeys = array_map(
+ function ( $key ) use ( $group ) {
+ return $this->msg( "abusefilter-edit-builder-$group-$key" )->text();
+ },
+ array_keys( $dropDownOptions[ $localisedGroup ] )
+ );
+ $dropDownOptions[ $localisedGroup ] = array_combine(
+ $newKeys, $dropDownOptions[ $localisedGroup ] );
+ }
+
+ $dropDownList = Xml::listDropDownOptionsOoui( $dropDownOptions );
+ $dropDown = new OOUI\DropdownInputWidget( [
+ 'name' => 'wpFilterBuilder',
+ 'inputId' => 'wpFilterBuilder',
+ 'options' => $dropDownList
+ ] );
+
+ $formElements = [ new OOUI\FieldLayout( $dropDown ) ];
+
+ // Button for syntax check
+ $syntaxCheck =
+ new OOUI\ButtonWidget(
+ [
+ 'label' => $this->msg( 'abusefilter-edit-check' )->text(),
+ 'id' => 'mw-abusefilter-syntaxcheck'
+ ] + $noTestAttrib
+ );
+
+ // Button for switching editor (if Ace is used)
+ if ( $switchEditor !== null ) {
+ $formElements[] = new OOUI\FieldLayout(
+ new OOUI\Widget( [
+ 'content' => new OOUI\HorizontalLayout( [
+ 'items' => [ $switchEditor, $syntaxCheck ]
+ ] )
+ ] )
+ );
+ } else {
+ $formElements[] = new OOUI\FieldLayout( $syntaxCheck );
+ }
+
+ $fieldSet = new OOUI\FieldsetLayout( [
+ 'items' => $formElements,
+ 'classes' => [ 'mw-abusefilter-edit-buttons', 'mw-abusefilter-javascript-tools' ]
+ ] );
+
+ $rulesContainer .= $fieldSet;
+ }
+
+ if ( $addResultDiv ) {
+ $rulesContainer .= Xml::element( 'div',
+ [ 'id' => 'mw-abusefilter-syntaxresult', 'style' => 'display: none;' ],
+ '&#160;' );
+ }
+
+ // Add script
+ $this->getOutput()->addModules( 'ext.abuseFilter.edit' );
+ AbuseFilter::$editboxName = $textName;
+
+ return $rulesContainer;
+ }
+
+ /**
* @param IDatabase $db
+ * @param string|bool $action 'edit', 'move', 'createaccount', 'delete' or false for all
* @return string
*/
- public function buildTestConditions( IDatabase $db ) {
+ public function buildTestConditions( IDatabase $db, $action = false ) {
// If one of these is true, we're abusefilter compatible.
+ switch ( $action ) {
+ case 'edit':
+ return $db->makeList( [
+ // Actually, this is only one condition, but this way we get it as string
+ 'rc_source' => [
+ RecentChange::SRC_EDIT,
+ RecentChange::SRC_NEW,
+ ]
+ ], LIST_AND );
+ case 'move':
+ return $db->makeList( [
+ 'rc_source' => RecentChange::SRC_LOG,
+ 'rc_log_type' => 'move',
+ 'rc_log_action' => 'move'
+ ], LIST_AND );
+ case 'createaccount':
+ return $db->makeList( [
+ 'rc_source' => RecentChange::SRC_LOG,
+ 'rc_log_type' => 'newusers',
+ 'rc_log_action' => [ 'create', 'autocreate' ]
+ ], LIST_AND );
+ case 'delete':
+ return $db->makeList( [
+ 'rc_source' => RecentChange::SRC_LOG,
+ 'rc_log_type' => 'delete',
+ 'rc_log_action' => 'delete'
+ ], LIST_AND );
+ // @ToDo: case 'upload'
+ }
+
return $db->makeList( [
'rc_source' => [
RecentChange::SRC_EDIT,
@@ -82,7 +267,7 @@ abstract class AbuseFilterView extends ContextSource {
], LIST_AND ),
$db->makeList( [
'rc_log_type' => 'newusers',
- 'rc_log_action' => 'create'
+ 'rc_log_action' => [ 'create', 'autocreate' ]
], LIST_AND ),
$db->makeList( [
'rc_log_type' => 'delete',
@@ -95,10 +280,21 @@ abstract class AbuseFilterView extends ContextSource {
}
/**
- * @static
+ * @param string|int $id
+ * @param string|null $text
+ * @return string HTML
+ */
+ public function getLinkToLatestDiff( $id, $text = null ) {
+ return $this->linkRenderer->makeKnownLink(
+ $this->getTitle( "history/$id/diff/prev/cur" ),
+ $text
+ );
+ }
+
+ /**
* @return bool
*/
- static function canViewPrivate() {
+ public static function canViewPrivate() {
global $wgUser;
static $canView = null;
@@ -110,102 +306,3 @@ abstract class AbuseFilterView extends ContextSource {
}
}
-
-class AbuseFilterChangesList extends OldChangesList {
- /**
- * @param $s
- * @param $rc
- * @param $classes array
- */
- public function insertExtra( &$s, &$rc, &$classes ) {
- if ( (int)$rc->getAttribute( 'rc_deleted' ) !== 0 ) {
- $s .= ' ' . $this->msg( 'abusefilter-log-hidden-implicit' )->parse();
- if ( !$this->userCan( $rc, Revision::SUPPRESSED_ALL ) ) {
- return;
- }
- }
-
- $examineParams = empty( $rc->examineParams ) ? [] : $rc->examineParams;
-
- $title = SpecialPage::getTitleFor( 'AbuseFilter', 'examine/' . $rc->mAttribs['rc_id'] );
- $examineLink = $this->linkRenderer->makeLink(
- $title,
- new HtmlArmor( $this->msg( 'abusefilter-changeslist-examine' )->parse() ),
- [],
- $examineParams
- );
-
- $s .= ' '.$this->msg( 'parentheses' )->rawParams( $examineLink )->escaped();
-
- # If we have a match..
- if ( isset( $rc->filterResult ) ) {
- $class = $rc->filterResult ?
- 'mw-abusefilter-changeslist-match' :
- 'mw-abusefilter-changeslist-nomatch';
-
- $classes[] = $class;
- }
- }
-
- /**
- * Insert links to user page, user talk page and eventually a blocking link.
- * Like the parent, but don't hide details if user can see them.
- *
- * @param string &$s HTML to update
- * @param RecentChange &$rc
- */
- public function insertUserRelatedLinks( &$s, &$rc ) {
- $links = $this->getLanguage()->getDirMark() . Linker::userLink( $rc->mAttribs['rc_user'],
- $rc->mAttribs['rc_user_text'] ) .
- Linker::userToolLinks( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] );
-
- if ( $this->isDeleted( $rc, Revision::DELETED_USER ) ) {
- if ( $this->userCan( $rc, Revision::DELETED_USER ) ) {
- $s .= ' <span class="history-deleted">' . $links . '</span>';
- } else {
- $s .= ' <span class="history-deleted">' .
- $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
- }
- } else {
- $s .= $links;
- }
- }
-
- /**
- * Insert a formatted comment. Like the parent, but don't hide details if user can see them.
- * @param RecentChange $rc
- * @return string
- */
- public function insertComment( $rc ) {
- if ( $this->isDeleted( $rc, Revision::DELETED_COMMENT ) ) {
- if ( $this->userCan( $rc, Revision::DELETED_COMMENT ) ) {
- return ' <span class="history-deleted">' .
- Linker::commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() ) . '</span>';
- } else {
- return ' <span class="history-deleted">' .
- $this->msg( 'rev-deleted-comment' )->escaped() . '</span>';
- }
- } else {
- return Linker::commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() );
- }
- }
-
- /**
- * Insert a formatted action. The same as parent, but with a different audience in LogFormatter
- *
- * @param RecentChange $rc
- * @return string
- */
- public function insertLogEntry( $rc ) {
- $formatter = LogFormatter::newFromRow( $rc->mAttribs );
- $formatter->setContext( $this->getContext() );
- $formatter->setAudience( LogFormatter::FOR_THIS_USER );
- $formatter->setShowUserToolLinks( true );
- $mark = $this->getLanguage()->getDirMark();
- return $formatter->getActionText() . " $mark" . $formatter->getComment();
- }
-
- // Kill rollback links.
- public function insertRollback( &$s, &$rc ) {
- }
-}
diff --git a/AbuseFilter/includes/Views/AbuseFilterViewDiff.php b/AbuseFilter/includes/Views/AbuseFilterViewDiff.php
index 6c29664e..8128ad65 100644
--- a/AbuseFilter/includes/Views/AbuseFilterViewDiff.php
+++ b/AbuseFilter/includes/Views/AbuseFilterViewDiff.php
@@ -1,100 +1,86 @@
<?php
-/**
- * Like TableDiffFormatter, but will always render the full context
- * (even for empty diffs).
- *
- * @private
- */
-class TableDiffFormatterFullContext extends TableDiffFormatter {
- /**
- * Format a diff.
- *
- * @param Diff $diff
- * @return string The formatted output.
- */
- function format( $diff ) {
- $xlen = $ylen = 0;
-
- // Calculate the length of the left and the right side
- foreach ( $diff->edits as $edit ) {
- if ( $edit->orig ) {
- $xlen += count( $edit->orig );
- }
- if ( $edit->closing ) {
- $ylen += count( $edit->closing );
- }
- }
-
- // Just render the diff with no preprocessing
- $this->startDiff();
- $this->block( 1, $xlen, 1, $ylen, $diff->edits );
- $end = $this->endDiff();
-
- return $end;
- }
-}
-
class AbuseFilterViewDiff extends AbuseFilterView {
public $mOldVersion = null;
public $mNewVersion = null;
public $mNextHistoryId = null;
public $mFilter = null;
- function show() {
+ /**
+ * Shows the page
+ */
+ public function show() {
$show = $this->loadData();
$out = $this->getOutput();
+ $out->enableOOUI();
+ $out->addModuleStyles( [ 'oojs-ui.styles.icons-movement' ] );
$links = [];
if ( $this->mFilter ) {
- $links['abusefilter-history-backedit'] = $this->getTitle( $this->mFilter );
- $links['abusefilter-diff-backhistory'] = $this->getTitle( 'history/' . $this->mFilter );
+ $links['abusefilter-history-backedit'] =
+ $this->getTitle( $this->mFilter )->getFullURL();
+ $links['abusefilter-diff-backhistory'] =
+ $this->getTitle( 'history/' . $this->mFilter )->getFullURL();
}
- foreach ( $links as $msg => $title ) {
- $links[$msg] = $this->linkRenderer->makeLink( $title, $this->msg( $msg )->text() );
+ foreach ( $links as $msg => $href ) {
+ $links[$msg] =
+ new OOUI\ButtonWidget( [
+ 'label' => $this->msg( $msg )->text(),
+ 'href' => $href
+ ] );
}
- $backlinks = $this->getLanguage()->pipeList( $links );
- $out->addHTML( Xml::tags( 'p', null, $backlinks ) );
+ $backlinks =
+ new OOUI\HorizontalLayout( [
+ 'items' => $links
+ ] );
+ $out->addHTML( $backlinks );
if ( $show ) {
$out->addHTML( $this->formatDiff() );
-
// Next and previous change links
- $links = [];
+ $buttons = [];
if ( AbuseFilter::getFirstFilterChange( $this->mFilter ) !=
$this->mOldVersion['meta']['history_id']
) {
// Create a "previous change" link if this isn't the first change of the given filter
- $links[] = $this->linkRenderer->makeLink(
- $this->getTitle(
- 'history/' . $this->mFilter . '/diff/prev/' . $this->mOldVersion['meta']['history_id']
- ),
- $this->getLanguage()->getArrow( 'backwards' ) .
- ' ' . $this->msg( 'abusefilter-diff-prev' )->text()
- );
+ $href = $this->getTitle(
+ 'history/' . $this->mFilter . '/diff/prev/' . $this->mOldVersion['meta']['history_id']
+ )->getFullURL();
+ $buttons[] = new OOUI\ButtonWidget( [
+ 'label' => $this->msg( 'abusefilter-diff-prev' )->text(),
+ 'href' => $href,
+ 'icon' => 'previous'
+ ] );
}
if ( !is_null( $this->mNextHistoryId ) ) {
// Create a "next change" link if this isn't the last change of the given filter
- $links[] = $this->linkRenderer->makeLink(
- $this->getTitle(
- 'history/' . $this->mFilter . '/diff/prev/' . $this->mNextHistoryId
- ),
- $this->msg( 'abusefilter-diff-next' )->text() .
- ' ' . $this->getLanguage()->getArrow( 'forwards' )
- );
+ $href = $this->getTitle(
+ 'history/' . $this->mFilter . '/diff/prev/' . $this->mNextHistoryId
+ )->getFullURL();
+ $buttons[] = new OOUI\ButtonWidget( [
+ 'label' => $this->msg( 'abusefilter-diff-next' )->text(),
+ 'href' => $href,
+ 'icon' => 'next'
+ ] );
}
- if ( count( $links ) > 0 ) {
- $backlinks = $this->getLanguage()->pipeList( $links );
- $out->addHTML( Xml::tags( 'p', null, $backlinks ) );
+ if ( count( $buttons ) > 0 ) {
+ $buttons = new OOUI\HorizontalLayout( [
+ 'items' => $buttons,
+ 'classes' => [ 'mw-abusefilter-history-buttons' ]
+ ] );
+ $out->addHTML( $buttons );
}
}
}
- function loadData() {
+ /**
+ * @return bool
+ */
+ public function loadData() {
$oldSpec = $this->mParams[3];
$newSpec = $this->mParams[4];
$this->mFilter = $this->mParams[1];
@@ -127,7 +113,7 @@ class AbuseFilterViewDiff extends AbuseFilterView {
* @param int $historyId History id to find next change of
* @return int|null Id of the next change or null if there isn't one
*/
- function getNextHistoryId( $historyId ) {
+ public function getNextHistoryId( $historyId ) {
$dbr = wfGetDB( DB_REPLICA );
$row = $dbr->selectRow(
'abuse_filter_history',
@@ -145,7 +131,12 @@ class AbuseFilterViewDiff extends AbuseFilterView {
return null;
}
- function loadSpec( $spec, $otherSpec ) {
+ /**
+ * @param string $spec
+ * @param string $otherSpec
+ * @return array|null
+ */
+ public function loadSpec( $spec, $otherSpec ) {
static $dependentSpecs = [ 'prev', 'next' ];
static $cache = [];
@@ -154,18 +145,31 @@ class AbuseFilterViewDiff extends AbuseFilterView {
}
$dbr = wfGetDB( DB_REPLICA );
+ // All but afh_filter, afh_deleted and afh_changed_fields
+ $selectFields = [
+ 'afh_id',
+ 'afh_user',
+ 'afh_user_text',
+ 'afh_timestamp',
+ 'afh_pattern',
+ 'afh_comments',
+ 'afh_flags',
+ 'afh_public_comments',
+ 'afh_actions',
+ 'afh_group',
+ ];
$row = null;
if ( is_numeric( $spec ) ) {
$row = $dbr->selectRow(
'abuse_filter_history',
- '*',
+ $selectFields,
[ 'afh_id' => $spec, 'afh_filter' => $this->mFilter ],
__METHOD__
);
} elseif ( $spec == 'cur' ) {
$row = $dbr->selectRow(
'abuse_filter_history',
- '*',
+ $selectFields,
[ 'afh_filter' => $this->mFilter ],
__METHOD__,
[ 'ORDER BY' => 'afh_timestamp desc' ]
@@ -176,7 +180,7 @@ class AbuseFilterViewDiff extends AbuseFilterView {
$row = $dbr->selectRow(
'abuse_filter_history',
- '*',
+ $selectFields,
[
'afh_filter' => $this->mFilter,
'afh_id<' . $dbr->addQuotes( $other['meta']['history_id'] ),
@@ -196,7 +200,7 @@ class AbuseFilterViewDiff extends AbuseFilterView {
$row = $dbr->selectRow(
'abuse_filter_history',
- '*',
+ $selectFields,
[
'afh_filter' => $this->mFilter,
'afh_id>' . $dbr->addQuotes( $other['meta']['history_id'] ),
@@ -222,7 +226,11 @@ class AbuseFilterViewDiff extends AbuseFilterView {
return $data;
}
- function loadFromHistoryRow( $row ) {
+ /**
+ * @param stdClass $row
+ * @return array
+ */
+ public function loadFromHistoryRow( $row ) {
return [
'meta' => [
'history_id' => $row->afh_id,
@@ -246,7 +254,7 @@ class AbuseFilterViewDiff extends AbuseFilterView {
* @param int $history_id
* @return string
*/
- function formatVersionLink( $timestamp, $history_id ) {
+ public function formatVersionLink( $timestamp, $history_id ) {
$filter = $this->mFilter;
$text = $this->getLanguage()->timeanddate( $timestamp, true );
$title = $this->getTitle( "history/$filter/item/$history_id" );
@@ -259,7 +267,7 @@ class AbuseFilterViewDiff extends AbuseFilterView {
/**
* @return string
*/
- function formatDiff() {
+ public function formatDiff() {
$oldVersion = $this->mOldVersion;
$newVersion = $this->mNewVersion;
@@ -300,17 +308,17 @@ class AbuseFilterViewDiff extends AbuseFilterView {
$headings = Xml::tags( 'tr', null, $headings );
+ $body = '';
// Basic info
+ $infoHeader = $this->getHeaderRow( 'abusefilter-diff-info' );
$info = '';
- $info .= $this->getHeaderRow( 'abusefilter-diff-info' );
$info .= $this->getDiffRow(
'abusefilter-edit-description',
$oldVersion['info']['description'],
$newVersion['info']['description']
);
- global $wgAbuseFilterValidGroups;
if (
- count( $wgAbuseFilterValidGroups ) > 1 ||
+ count( $this->getConfig()->get( 'AbuseFilterValidGroups' ) ) > 1 ||
$oldVersion['info']['group'] != $newVersion['info']['group']
) {
$info .= $this->getDiffRow(
@@ -331,29 +339,43 @@ class AbuseFilterViewDiff extends AbuseFilterView {
$newVersion['info']['notes']
);
+ if ( $info !== '' ) {
+ $body .= $infoHeader . $info;
+ }
+
// Pattern
- $info .= $this->getHeaderRow( 'abusefilter-diff-pattern' );
- $info .= $this->getDiffRow(
+ $patternHeader = $this->getHeaderRow( 'abusefilter-diff-pattern' );
+ $pattern = '';
+ $pattern .= $this->getDiffRow(
'abusefilter-edit-rules',
$oldVersion['pattern'],
- $newVersion['pattern'],
- 'text'
+ $newVersion['pattern']
);
+ if ( $pattern !== '' ) {
+ $body .= $patternHeader . $pattern;
+ }
+
// Actions
+ $actionsHeader = $this->getHeaderRow( 'abusefilter-edit-consequences' );
+ $actions = '';
+
$oldActions = $this->stringifyActions( $oldVersion['actions'] );
$newActions = $this->stringifyActions( $newVersion['actions'] );
- $info .= $this->getHeaderRow( 'abusefilter-edit-consequences' );
- $info .= $this->getDiffRow(
+ $actions .= $this->getDiffRow(
'abusefilter-edit-consequences',
$oldActions,
$newActions
);
+ if ( $actions !== '' ) {
+ $body .= $actionsHeader . $actions;
+ }
+
$html = "<table class='wikitable'>
<thead>$headings</thead>
- <tbody>$info</tbody>
+ <tbody>$body</tbody>
</table>";
$html = Xml::tags( 'h2', null, $this->msg( 'abusefilter-diff-title' )->parse() ) . $html;
@@ -365,7 +387,7 @@ class AbuseFilterViewDiff extends AbuseFilterView {
* @param array $actions
* @return array
*/
- function stringifyActions( $actions ) {
+ public function stringifyActions( $actions ) {
$lines = [];
ksort( $actions );
@@ -384,7 +406,7 @@ class AbuseFilterViewDiff extends AbuseFilterView {
* @param string $msg
* @return string
*/
- function getHeaderRow( $msg ) {
+ public function getHeaderRow( $msg ) {
$html = $this->msg( $msg )->parse();
$html = Xml::tags( 'th', [ 'colspan' => 3 ], $html );
$html = Xml::tags( 'tr', [ 'class' => 'mw-abusefilter-diff-header' ], $html );
@@ -398,7 +420,7 @@ class AbuseFilterViewDiff extends AbuseFilterView {
* @param array|string $new
* @return string
*/
- function getDiffRow( $msg, $old, $new ) {
+ public function getDiffRow( $msg, $old, $new ) {
if ( !is_array( $old ) ) {
$old = explode( "\n", preg_replace( "/\\\r\\\n?/", "\n", $old ) );
}
@@ -406,6 +428,10 @@ class AbuseFilterViewDiff extends AbuseFilterView {
$new = explode( "\n", preg_replace( "/\\\r\\\n?/", "\n", $new ) );
}
+ if ( $old === $new ) {
+ return '';
+ }
+
$diffEngine = new DifferenceEngine( $this->getContext() );
$diffEngine->showDiffStyle();
diff --git a/AbuseFilter/includes/Views/AbuseFilterViewEdit.php b/AbuseFilter/includes/Views/AbuseFilterViewEdit.php
index 952fcce7..e4c5a93e 100644
--- a/AbuseFilter/includes/Views/AbuseFilterViewEdit.php
+++ b/AbuseFilter/includes/Views/AbuseFilterViewEdit.php
@@ -1,87 +1,25 @@
<?php
class AbuseFilterViewEdit extends AbuseFilterView {
+ public static $mLoadedRow = null, $mLoadedActions = null;
/**
* @param SpecialAbuseFilter $page
* @param array $params
*/
- function __construct( $page, $params ) {
+ public function __construct( $page, $params ) {
parent::__construct( $page, $params );
$this->mFilter = $page->mFilter;
$this->mHistoryID = $page->mHistoryID;
}
- /// @todo When older versions of MediaWiki are no longer
- /// supported, remove this method and call ChangeTags::isTagNameValid directly
- /// Because it's planned for removal, this is private.
/**
- * Check whether the characters in the tag name are valid.
- *
- * @param string $tag Tag name
- * @return Status
+ * Shows the page
*/
- private static function isTagNameValid( $tag ) {
- if ( is_callable( 'ChangeTags::isTagNameValid' ) ) {
- $status = ChangeTags::isTagNameValid( $tag );
- } else {
- // BC
- if ( strpos( $tag, ',' ) !== false || strpos( $tag, '|' ) !== false ||
- strpos( $tag, '/' ) !== false ||
- !Title::makeTitleSafe( NS_MEDIAWIKI, "tag-{$tag}-description" )
- ) {
- $status = Status::newFatal( 'abusefilter-edit-bad-tags' );
- } else {
- $status = Status::newGood();
- }
- }
-
- return $status;
- }
-
- /**
- * Check whether a filter is allowed to use a tag
- *
- * @param string $tag Tag name
- * @return Status
- */
- protected function isAllowedTag( $tag ) {
- $tagNameStatus = self::isTagNameValid( $tag );
-
- if ( !$tagNameStatus->isGood() ) {
- return $tagNameStatus;
- }
-
- $finalStatus = Status::newGood();
-
- $canAddStatus =
- ChangeTags::canAddTagsAccompanyingChange(
- [ $tag ]
- );
-
- if ( $canAddStatus->isGood() ) {
- return $finalStatus;
- }
-
- $alreadyDefinedTags = [];
- AbuseFilterHooks::onListDefinedTags( $alreadyDefinedTags );
-
- if ( in_array( $tag, $alreadyDefinedTags, true ) ) {
- return $finalStatus;
- }
-
- $canCreateTagStatus = ChangeTags::canCreateTag( $tag );
- if ( $canCreateTagStatus->isGood() ) {
- return $finalStatus;
- }
-
- $finalStatus->fatal( 'abusefilter-edit-bad-tags' );
- return $finalStatus;
- }
-
- function show() {
+ public function show() {
$user = $this->getUser();
$out = $this->getOutput();
$request = $this->getRequest();
+ $config = $this->getConfig();
$out->setPageTitle( $this->msg( 'abusefilter-edit' ) );
$out->addHelpLink( 'Extension:AbuseFilter/Rules format' );
@@ -104,11 +42,17 @@ class AbuseFilterViewEdit extends AbuseFilterView {
}
}
- // Add default warning messages
- $this->exposeWarningMessages();
+ // Add the default warning and disallow messages in a JS variable
+ $this->exposeMessages();
if ( $filter == 'new' && !$this->canEdit() ) {
- $out->addWikiMsg( 'abusefilter-edit-notallowed' );
+ $out->addHTML(
+ Xml::tags(
+ 'p',
+ null,
+ Html::errorBox( $this->msg( 'abusefilter-edit-notallowed' )->parse() )
+ )
+ );
return;
}
@@ -117,246 +61,55 @@ class AbuseFilterViewEdit extends AbuseFilterView {
$editToken, [ 'abusefilter', $filter ], $request );
if ( $tokenMatches && $this->canEdit() ) {
- // Check syntax
- $syntaxerr = AbuseFilter::checkSyntax( $request->getVal( 'wpFilterRules' ) );
- if ( $syntaxerr !== true ) {
- $out->addHTML(
- $this->buildFilterEditor(
- $this->msg(
- 'abusefilter-edit-badsyntax',
- [ $syntaxerr[0] ]
- )->parseAsBlock(),
- $filter, $history_id
- )
- );
- return;
- }
-
- $dbw = wfGetDB( DB_MASTER );
-
list( $newRow, $actions ) = $this->loadRequest( $filter );
-
- $differences = AbuseFilter::compareVersions(
- [ $newRow, $actions ],
- [ $newRow->mOriginalRow, $newRow->mOriginalActions ]
- );
-
- // Don't allow adding a new global rule, or updating a
- // rule that is currently global, without permissions.
- if ( !$this->canEditFilter( $newRow ) || !$this->canEditFilter( $newRow->mOriginalRow ) ) {
- $out->addWikiMsg( 'abusefilter-edit-notallowed-global' );
- return;
- }
-
- // Don't allow custom messages on global rules
- if ( $newRow->af_global == 1 &&
- $request->getVal( 'wpFilterWarnMessage' ) !== 'abusefilter-warning'
- ) {
- $out->addWikiMsg( 'abusefilter-edit-notallowed-global-custom-msg' );
- return;
- }
-
- $origActions = $newRow->mOriginalActions;
- $wasGlobal = (bool)$newRow->mOriginalRow->af_global;
-
- unset( $newRow->mOriginalRow );
- unset( $newRow->mOriginalActions );
-
- // Check for non-changes
- if ( !count( $differences ) ) {
- $out->redirect( $this->getTitle()->getLocalURL() );
- return;
- }
-
- // Check for restricted actions
- global $wgAbuseFilterRestrictions;
- if ( count( array_intersect_key(
- array_filter( $wgAbuseFilterRestrictions ),
- array_merge(
- array_filter( $actions ),
- array_filter( $origActions )
- )
- ) )
- && !$user->isAllowed( 'abusefilter-modify-restricted' )
- ) {
- $out->addHTML(
- $this->buildFilterEditor(
- $this->msg( 'abusefilter-edit-restricted' )->parseAsBlock(),
- $this->mFilter,
- $history_id
- )
- );
- return;
- }
-
- // If we've activated the 'tag' option, check the arguments for validity.
- if ( !empty( $actions['tag'] ) ) {
- foreach ( $actions['tag']['parameters'] as $tag ) {
- $status = $this->isAllowedTag( $tag );
-
- if ( !$status->isGood() ) {
- $out->addHTML(
- $this->buildFilterEditor(
- $status->getMessage()->parseAsBlock(),
- $this->mFilter,
- $history_id
- )
- );
- return;
- }
+ $status = AbuseFilter::saveFilter( $this, $filter, $request, $newRow, $actions );
+ if ( !$status->isGood() ) {
+ $err = $status->getErrors();
+ $msg = $err[0]['message'];
+ $params = $err[0]['params'];
+ if ( $status->isOK() ) {
+ $out->addHTML(
+ $this->buildFilterEditor(
+ $this->msg( $msg, $params )->parseAsBlock(),
+ $filter,
+ $history_id
+ )
+ );
+ } else {
+ $out->addWikiMsg( $msg );
}
- }
-
- $newRow = get_object_vars( $newRow ); // Convert from object to array
-
- // Set last modifier.
- $newRow['af_timestamp'] = $dbw->timestamp( wfTimestampNow() );
- $newRow['af_user'] = $user->getId();
- $newRow['af_user_text'] = $user->getName();
-
- $dbw->startAtomic( __METHOD__ );
-
- // Insert MAIN row.
- if ( $filter == 'new' ) {
- $new_id = $dbw->nextSequenceValue( 'abuse_filter_af_id_seq' );
- $is_new = true;
} else {
- $new_id = $this->mFilter;
- $is_new = false;
- }
-
- // Reset throttled marker, if we're re-enabling it.
- $newRow['af_throttled'] = $newRow['af_throttled'] && !$newRow['af_enabled'];
- $newRow['af_id'] = $new_id; // ID.
-
- // T67807
- // integer 1's & 0's might be better understood than booleans
- $newRow['af_enabled'] = (int)$newRow['af_enabled'];
- $newRow['af_hidden'] = (int)$newRow['af_hidden'];
- $newRow['af_throttled'] = (int)$newRow['af_throttled'];
- $newRow['af_deleted'] = (int)$newRow['af_deleted'];
- $newRow['af_global'] = (int)$newRow['af_global'];
-
- $dbw->replace( 'abuse_filter', [ 'af_id' ], $newRow, __METHOD__ );
-
- if ( $is_new ) {
- $new_id = $dbw->insertId();
- }
-
- // Actions
- global $wgAbuseFilterActions;
- $deadActions = [];
- $actionsRows = [];
- foreach ( array_filter( $wgAbuseFilterActions ) as $action => $_ ) {
- // Check if it's set
- $enabled = isset( $actions[$action] ) && (bool)$actions[$action];
-
- if ( $enabled ) {
- $parameters = $actions[$action]['parameters'];
-
- $thisRow = [
- 'afa_filter' => $new_id,
- 'afa_consequence' => $action,
- 'afa_parameters' => implode( "\n", $parameters )
- ];
- $actionsRows[] = $thisRow;
+ if ( $status->getValue() === false ) {
+ // No change
+ $out->redirect( $this->getTitle()->getLocalURL() );
} else {
- $deadActions[] = $action;
- }
- }
-
- // Create a history row
- $afh_row = [];
-
- foreach ( AbuseFilter::$history_mappings as $af_col => $afh_col ) {
- $afh_row[$afh_col] = $newRow[$af_col];
- }
-
- // Actions
- $displayActions = [];
- foreach ( $actions as $action ) {
- $displayActions[$action['action']] = $action['parameters'];
- }
- $afh_row['afh_actions'] = serialize( $displayActions );
-
- $afh_row['afh_changed_fields'] = implode( ',', $differences );
-
- // Flags
- $flags = [];
- if ( $newRow['af_hidden'] ) {
- $flags[] = 'hidden';
- }
- if ( $newRow['af_enabled'] ) {
- $flags[] = 'enabled';
- }
- if ( $newRow['af_deleted'] ) {
- $flags[] = 'deleted';
- }
- if ( $newRow['af_global'] ) {
- $flags[] = 'global';
- }
-
- $afh_row['afh_flags'] = implode( ',', $flags );
-
- $afh_row['afh_filter'] = $new_id;
- $afh_row['afh_id'] = $dbw->nextSequenceValue( 'abuse_filter_af_id_seq' );
-
- // Do the update
- $dbw->insert( 'abuse_filter_history', $afh_row, __METHOD__ );
- $history_id = $dbw->insertId();
- if ( $filter != 'new' ) {
- $dbw->delete(
- 'abuse_filter_action',
- [ 'afa_filter' => $filter ],
- __METHOD__
- );
- }
- $dbw->insert( 'abuse_filter_action', $actionsRows, __METHOD__ );
-
- $dbw->endAtomic( __METHOD__ );
-
- // Invalidate cache if this was a global rule
- if ( $wasGlobal || $newRow['af_global'] ) {
- $group = 'default';
- if ( isset( $newRow['af_group'] ) && $newRow['af_group'] != '' ) {
- $group = $newRow['af_group'];
+ list( $new_id, $history_id ) = $status->getValue();
+ $out->redirect(
+ $this->getTitle()->getLocalURL(
+ [
+ 'result' => 'success',
+ 'changedfilter' => $new_id,
+ 'changeid' => $history_id,
+ ]
+ )
+ );
}
-
- $globalRulesKey = AbuseFilter::getGlobalRulesKey( $group );
- ObjectCache::getMainWANInstance()->touchCheckKey( $globalRulesKey );
}
-
- // Logging
- $logEntry = new ManualLogEntry( 'abusefilter', 'modify' );
- $logEntry->setPerformer( $user );
- $logEntry->setTarget( $this->getTitle( $new_id ) );
- $logEntry->setParameters( [
- 'historyId' => $history_id,
- 'newId' => $new_id
- ] );
- $logid = $logEntry->insert();
- $logEntry->publish( $logid );
-
- // Purge the tag list cache so the fetchAllTags hook applies tag changes
- if ( isset( $actions['tag'] ) ) {
- AbuseFilterHooks::purgeTagCache();
- }
-
- AbuseFilter::resetFilterProfile( $new_id );
-
- $out->redirect(
- $this->getTitle()->getLocalURL(
- [
- 'result' => 'success',
- 'changedfilter' => $new_id,
- 'changeid' => $history_id,
- ]
- )
- );
} else {
if ( $tokenMatches ) {
- // lost rights meanwhile
- $out->addWikiMsg( 'abusefilter-edit-notallowed' );
+ // Lost rights meanwhile
+ $out->addHTML(
+ Xml::tags(
+ 'p',
+ null,
+ Html::errorBox( $this->msg( 'abusefilter-edit-notallowed' )->parse() )
+ )
+ );
+ } elseif ( $request->wasPosted() ) {
+ // Warn the user to re-attempt save
+ $out->addHTML(
+ Html::warningBox( $this->msg( 'abusefilter-edit-token-not-match' )->escaped() )
+ );
}
if ( $history_id ) {
@@ -377,19 +130,21 @@ class AbuseFilterViewEdit extends AbuseFilterView {
* Builds the full form for edit filters.
* Loads data either from the database or from the HTTP request.
* The request takes precedence over the database
- * @param $error string An error message to show above the filter box.
- * @param $filter int The filter ID
- * @param $history_id int The history ID of the filter, if applicable. Otherwise null
+ * @param string|null $error An error message to show above the filter box.
+ * @param int $filter The filter ID
+ * @param int|null $history_id The history ID of the filter, if applicable. Otherwise null
* @return bool|string False if there is a failure building the editor,
* otherwise the HTML text for the editor.
*/
- function buildFilterEditor( $error, $filter, $history_id = null ) {
+ public function buildFilterEditor( $error, $filter, $history_id = null ) {
if ( $filter === null ) {
return false;
}
// Build the edit form
$out = $this->getOutput();
+ $out->enableOOUI();
+ $out->addJsConfigVars( 'isFilterEditor', true );
$lang = $this->getLanguage();
$user = $this->getUser();
@@ -397,9 +152,19 @@ class AbuseFilterViewEdit extends AbuseFilterView {
list( $row, $actions ) = $this->loadRequest( $filter, $history_id );
if ( !$row ) {
- $out->addWikiMsg( 'abusefilter-edit-badfilter' );
- $out->addHTML( $this->linkRenderer->makeLink( $this->getTitle(),
- $this->msg( 'abusefilter-return' )->text() ) );
+ $out->addHTML(
+ Xml::tags(
+ 'p',
+ null,
+ Html::errorBox( $this->msg( 'abusefilter-edit-badfilter' )->parse() )
+ )
+ );
+ $href = $this->getTitle()->getFullURL();
+ $btn = new OOUI\ButtonWidget( [
+ 'label' => $this->msg( 'abusefilter-return' )->text(),
+ 'href' => $href
+ ] );
+ $out->addHTML( $btn );
return false;
}
@@ -412,60 +177,57 @@ class AbuseFilterViewEdit extends AbuseFilterView {
if ( ( ( isset( $row->af_hidden ) && $row->af_hidden ) ||
AbuseFilter::filterHidden( $filter ) )
&& !$this->canViewPrivate() ) {
- return $this->msg( 'abusefilter-edit-denied' )->text();
+ return $this->msg( 'abusefilter-edit-denied' )->escaped();
}
$output = '';
if ( $error ) {
- $out->addHTML( "<span class=\"error\">$error</span>" );
+ $output .= Html::errorBox( $error );
}
// Read-only attribute
$readOnlyAttrib = [];
- $cbReadOnlyAttrib = []; // For checkboxes
-
- $styleAttrib = [ 'style' => 'width:95%' ];
if ( !$this->canEditFilter( $row ) ) {
- $readOnlyAttrib['readonly'] = 'readonly';
- $cbReadOnlyAttrib['disabled'] = 'disabled';
+ $readOnlyAttrib['disabled'] = 'disabled';
}
$fields = [];
$fields['abusefilter-edit-id'] =
$this->mFilter == 'new' ?
- $this->msg( 'abusefilter-edit-new' )->text() :
+ $this->msg( 'abusefilter-edit-new' )->escaped() :
$lang->formatNum( $filter );
$fields['abusefilter-edit-description'] =
- Xml::input(
- 'wpFilterDescription',
- 45,
- isset( $row->af_public_comments ) ? $row->af_public_comments : '',
- array_merge( $readOnlyAttrib, $styleAttrib )
- );
-
- global $wgAbuseFilterValidGroups;
- if ( count( $wgAbuseFilterValidGroups ) > 1 ) {
- $groupSelector = new XmlSelect(
- 'wpFilterGroup',
- 'mw-abusefilter-edit-group-input',
- 'default'
+ new OOUI\TextInputWidget( [
+ 'name' => 'wpFilterDescription',
+ 'value' => $row->af_public_comments ?? ''
+ ] + $readOnlyAttrib
);
+ $validGroups = $this->getConfig()->get( 'AbuseFilterValidGroups' );
+ if ( count( $validGroups ) > 1 ) {
+ $groupSelector =
+ new OOUI\DropdownInputWidget( [
+ 'name' => 'wpFilterGroup',
+ 'id' => 'mw-abusefilter-edit-group-input',
+ 'value' => 'default',
+ 'disabled' => !empty( $readOnlyAttrib )
+ ] );
+
+ $options = [];
if ( isset( $row->af_group ) && $row->af_group ) {
- $groupSelector->setDefault( $row->af_group );
+ $groupSelector->setValue( $row->af_group );
}
- foreach ( $wgAbuseFilterValidGroups as $group ) {
- $groupSelector->addOption( AbuseFilter::nameGroup( $group ), $group );
+ foreach ( $validGroups as $group ) {
+ $options += [ AbuseFilter::nameGroup( $group ) => $group ];
}
- if ( !empty( $readOnlyAttrib ) ) {
- $groupSelector->setAttribute( 'disabled', 'disabled' );
- }
+ $options = Xml::listDropDownOptionsOoui( $options );
+ $groupSelector->setOptions( $options );
- $fields['abusefilter-edit-group'] = $groupSelector->getHTML();
+ $fields['abusefilter-edit-group'] = $groupSelector;
}
// Hit count display
@@ -484,14 +246,13 @@ class AbuseFilterViewEdit extends AbuseFilterView {
if ( $filter !== 'new' ) {
// Statistics
- global $wgAbuseFilterProfile;
$stash = ObjectCache::getMainStashInstance();
$matches_count = (int)$stash->get( AbuseFilter::filterMatchesKey( $filter ) );
$total = (int)$stash->get( AbuseFilter::filterUsedKey( $row->af_group ) );
if ( $total > 0 ) {
$matches_percent = sprintf( '%.2f', 100 * $matches_count / $total );
- if ( $wgAbuseFilterProfile ) {
+ if ( $this->getConfig()->get( 'AbuseFilterProfile' ) ) {
list( $timeProfile, $condProfile ) = AbuseFilter::getFilterProfile( $filter );
$fields['abusefilter-edit-status-label'] = $this->msg( 'abusefilter-edit-status-profile' )
->numParams( $total, $matches_count, $matches_percent, $timeProfile, $condProfile )
@@ -504,35 +265,32 @@ class AbuseFilterViewEdit extends AbuseFilterView {
}
}
- $fields['abusefilter-edit-rules'] = AbuseFilter::buildEditBox(
+ $fields['abusefilter-edit-rules'] = $this->buildEditBox(
$row->af_pattern,
'wpFilterRules',
- true,
- $this->canEditFilter( $row )
- );
- $fields['abusefilter-edit-notes'] = Xml::textarea(
- 'wpFilterNotes',
- ( isset( $row->af_comments ) ? $row->af_comments . "\n" : "\n" ),
- 40, 15,
- $readOnlyAttrib
+ true
);
+ $fields['abusefilter-edit-notes'] =
+ new OOUI\MultilineTextInputWidget( [
+ 'name' => 'wpFilterNotes',
+ 'value' => isset( $row->af_comments ) ? $row->af_comments . "\n" : "\n",
+ 'rows' => 15
+ ] + $readOnlyAttrib
+ );
- // Build checkboxen
+ // Build checkboxes
$checkboxes = [ 'hidden', 'enabled', 'deleted' ];
$flags = '';
- global $wgAbuseFilterIsCentral;
- if ( $wgAbuseFilterIsCentral ) {
+ if ( $this->getConfig()->get( 'AbuseFilterIsCentral' ) ) {
$checkboxes[] = 'global';
}
if ( isset( $row->af_throttled ) && $row->af_throttled ) {
- global $wgAbuseFilterRestrictions;
-
$filterActions = explode( ',', $row->af_actions );
$throttledActions = array_intersect_key(
array_flip( $filterActions ),
- array_filter( $wgAbuseFilterRestrictions )
+ array_filter( $this->getConfig()->get( 'AbuseFilterRestrictions' ) )
);
if ( $throttledActions ) {
@@ -544,9 +302,11 @@ class AbuseFilterViewEdit extends AbuseFilterView {
);
$flags .= $out->parse(
- $this->msg( 'abusefilter-edit-throttled-warning' )
- ->plaintextParams( $lang->commaList( $throttledActions ) )
- ->text()
+ Html::warningBox(
+ $this->msg( 'abusefilter-edit-throttled-warning' )
+ ->plaintextParams( $lang->commaList( $throttledActions ) )
+ ->text()
+ )
);
}
}
@@ -561,18 +321,39 @@ class AbuseFilterViewEdit extends AbuseFilterView {
$dbField = "af_$checkboxId";
$postVar = 'wpFilter' . ucfirst( $checkboxId );
+ $checkboxAttribs = [
+ 'name' => $postVar,
+ 'id' => $postVar,
+ 'selected' => $row->$dbField ?? false,
+ ] + $readOnlyAttrib;
+ $labelAttribs = [
+ 'label' => $this->msg( $message )->text(),
+ 'align' => 'inline',
+ ];
+
if ( $checkboxId == 'global' && !$this->canEditGlobal() ) {
- $cbReadOnlyAttrib['disabled'] = 'disabled';
+ $checkboxAttribs['disabled'] = 'disabled';
}
- $checkbox = Xml::checkLabel(
- $this->msg( $message )->text(),
- $postVar,
- $postVar,
- isset( $row->$dbField ) ? $row->$dbField : false,
- $cbReadOnlyAttrib
- );
- $checkbox = Xml::tags( 'p', null, $checkbox );
+ // Set readonly on deleted if the filter isn't disabled
+ if ( $checkboxId == 'deleted' && $row->af_enabled == 1 ) {
+ $checkboxAttribs['disabled'] = 'disabled';
+ }
+
+ // Add infusable where needed
+ if ( $checkboxId == 'deleted' || $checkboxId == 'enabled' ) {
+ $checkboxAttribs['infusable'] = true;
+ if ( $checkboxId == 'deleted' ) {
+ $labelAttribs['id'] = $postVar . 'Label';
+ $labelAttribs['infusable'] = true;
+ }
+ }
+
+ $checkbox =
+ new OOUI\FieldLayout(
+ new OOUI\CheckboxInputWidget( $checkboxAttribs ),
+ $labelAttribs
+ );
$flags .= $checkbox;
}
@@ -604,15 +385,24 @@ class AbuseFilterViewEdit extends AbuseFilterView {
$userLink =
Linker::userLink( $row->af_user, $row->af_user_text ) .
Linker::userToolLinks( $row->af_user, $row->af_user_text );
- $userName = $row->af_user_text;
$fields['abusefilter-edit-lastmod'] =
$this->msg( 'abusefilter-edit-lastmod-text' )
->rawParams(
- $lang->timeanddate( $row->af_timestamp, true ),
+ $this->getLinkToLatestDiff(
+ $filter,
+ $lang->timeanddate( $row->af_timestamp, true )
+ ),
$userLink,
- $lang->date( $row->af_timestamp, true ),
- $lang->time( $row->af_timestamp, true ),
- $userName
+ $this->getLinkToLatestDiff(
+ $filter,
+ $lang->date( $row->af_timestamp, true )
+ ),
+ $this->getLinkToLatestDiff(
+ $filter,
+ $lang->time( $row->af_timestamp, true )
+ )
+ )->params(
+ wfEscapeWikiText( $row->af_user_text )
)->parse();
$history_display = new HtmlArmor( $this->msg( 'abusefilter-edit-viewhistory' )->parse() );
$fields['abusefilter-edit-history'] =
@@ -623,10 +413,13 @@ class AbuseFilterViewEdit extends AbuseFilterView {
$exportText = FormatJson::encode( [ 'row' => $row, 'actions' => $actions ] );
$tools .= Xml::tags( 'a', [ 'href' => '#', 'id' => 'mw-abusefilter-export-link' ],
$this->msg( 'abusefilter-edit-export' )->parse() );
- $tools .= Xml::element( 'textarea',
- [ 'readonly' => 'readonly', 'id' => 'mw-abusefilter-export' ],
- $exportText
- );
+ $tools .=
+ new OOUI\MultilineTextInputWidget( [
+ 'id' => 'mw-abusefilter-export',
+ 'readOnly' => true,
+ 'value' => $exportText,
+ 'rows' => 10
+ ] );
$fields['abusefilter-edit-tools'] = $tools;
@@ -638,10 +431,14 @@ class AbuseFilterViewEdit extends AbuseFilterView {
);
if ( $this->canEditFilter( $row ) ) {
- $form .= Xml::submitButton(
- $this->msg( 'abusefilter-edit-save' )->text(),
- [ 'accesskey' => 's' ]
- );
+ $form .=
+ new OOUI\ButtonInputWidget( [
+ 'type' => 'submit',
+ 'label' => $this->msg( 'abusefilter-edit-save' )->text(),
+ 'useInputTag' => true,
+ 'accesskey' => 's',
+ 'flags' => [ 'progressive', 'primary' ]
+ ] );
$form .= Html::hidden(
'wpEditToken',
$user->getEditToken( [ 'abusefilter', $filter ] )
@@ -663,15 +460,15 @@ class AbuseFilterViewEdit extends AbuseFilterView {
/**
* Builds the "actions" editor for a given filter.
- * @param $row stdClass A row from the abuse_filter table.
- * @param $actions Array of rows from the abuse_filter_action table
+ * @param stdClass $row A row from the abuse_filter table.
+ * @param array $actions Array of rows from the abuse_filter_action table
* corresponding to the abuse filter held in $row.
- * @return HTML text for an action editor.
+ * @return string HTML text for an action editor.
*/
- function buildConsequenceEditor( $row, $actions ) {
- global $wgAbuseFilterActions;
-
- $enabledActions = array_filter( $wgAbuseFilterActions );
+ public function buildConsequenceEditor( $row, $actions ) {
+ $enabledActions = array_filter(
+ $this->getConfig()->get( 'AbuseFilterActions' )
+ );
$setActions = [];
foreach ( $enabledActions as $action => $_ ) {
@@ -681,9 +478,9 @@ class AbuseFilterViewEdit extends AbuseFilterView {
$output = '';
foreach ( $enabledActions as $action => $_ ) {
- MediaWiki\suppressWarnings();
+ Wikimedia\suppressWarnings();
$params = $actions[$action]['parameters'];
- MediaWiki\restoreWarnings();
+ Wikimedia\restoreWarnings();
$output .= $this->buildConsequenceSelector(
$action, $setActions[$action], $params, $row );
}
@@ -692,39 +489,45 @@ class AbuseFilterViewEdit extends AbuseFilterView {
}
/**
- * @param $action string The action to build an editor for
- * @param $set bool Whether or not the action is activated
- * @param $parameters array Action parameters
- * @param $row stdClass abuse_filter row object
- * @return string
+ * @param string $action The action to build an editor for
+ * @param bool $set Whether or not the action is activated
+ * @param array $parameters Action parameters
+ * @param stdClass $row abuse_filter row object
+ * @return string|\OOUI\FieldLayout
*/
- function buildConsequenceSelector( $action, $set, $parameters, $row ) {
- global $wgAbuseFilterActions, $wgMainCacheType;
-
- if ( empty( $wgAbuseFilterActions[$action] ) ) {
+ public function buildConsequenceSelector( $action, $set, $parameters, $row ) {
+ $config = $this->getConfig();
+ $actions = $config->get( 'AbuseFilterActions' );
+ if ( empty( $actions[$action] ) ) {
return '';
}
$readOnlyAttrib = [];
- $cbReadOnlyAttrib = []; // For checkboxes
if ( !$this->canEditFilter( $row ) ) {
- $readOnlyAttrib['readonly'] = 'readonly';
- $cbReadOnlyAttrib['disabled'] = 'disabled';
+ $readOnlyAttrib['disabled'] = 'disabled';
}
switch ( $action ) {
case 'throttle':
// Throttling is only available via object caching
- if ( $wgMainCacheType === CACHE_NONE ) {
+ if ( $config->get( 'MainCacheType' ) === CACHE_NONE ) {
return '';
}
- $throttleSettings = Xml::checkLabel(
- $this->msg( 'abusefilter-edit-action-throttle' )->text(),
- 'wpFilterActionThrottle',
- "mw-abusefilter-action-checkbox-$action",
- $set,
- [ 'class' => 'mw-abusefilter-action-checkbox' ] + $cbReadOnlyAttrib );
+ $throttleSettings =
+ new OOUI\FieldLayout(
+ new OOUI\CheckboxInputWidget( [
+ 'name' => 'wpFilterActionThrottle',
+ 'id' => 'mw-abusefilter-action-checkbox-throttle',
+ 'selected' => $set,
+ 'classes' => [ 'mw-abusefilter-action-checkbox' ]
+ ] + $readOnlyAttrib
+ ),
+ [
+ 'label' => $this->msg( 'abusefilter-edit-action-throttle' )->text(),
+ 'align' => 'inline'
+ ]
+ );
$throttleFields = [];
if ( $set ) {
@@ -733,94 +536,188 @@ class AbuseFilterViewEdit extends AbuseFilterView {
$throttleCount = $throttleRate[0];
$throttlePeriod = $throttleRate[1];
- $throttleGroups = implode( "\n", array_slice( $parameters, 1 ) );
+ $throttleGroups = array_slice( $parameters, 1 );
} else {
$throttleCount = 3;
$throttlePeriod = 60;
- $throttleGroups = "user\n";
+ $throttleGroups = [ 'user' ];
}
$throttleFields['abusefilter-edit-throttle-count'] =
- Xml::input( 'wpFilterThrottleCount', 20, $throttleCount, $readOnlyAttrib );
+ new OOUI\FieldLayout(
+ new OOUI\TextInputWidget( [
+ 'type' => 'number',
+ 'name' => 'wpFilterThrottleCount',
+ 'value' => $throttleCount
+ ] + $readOnlyAttrib
+ ),
+ [
+ 'label' => $this->msg( 'abusefilter-edit-throttle-count' )->text()
+ ]
+ );
$throttleFields['abusefilter-edit-throttle-period'] =
- $this->msg( 'abusefilter-edit-throttle-seconds' )
- ->rawParams( Xml::input( 'wpFilterThrottlePeriod', 20, $throttlePeriod,
- $readOnlyAttrib )
- )->parse();
- $throttleFields['abusefilter-edit-throttle-groups'] =
- Xml::textarea( 'wpFilterThrottleGroups', $throttleGroups . "\n",
- 40, 5, $readOnlyAttrib );
+ new OOUI\FieldLayout(
+ new OOUI\TextInputWidget( [
+ 'type' => 'number',
+ 'name' => 'wpFilterThrottlePeriod',
+ 'value' => $throttlePeriod
+ ] + $readOnlyAttrib
+ ),
+ [
+ 'label' => $this->msg( 'abusefilter-edit-throttle-period' )->text()
+ ]
+ );
+
+ $throttleConfig = [
+ 'values' => $throttleGroups,
+ 'label' => $this->msg( 'abusefilter-edit-throttle-groups' )->parse(),
+ 'disabled' => $readOnlyAttrib
+ ];
+ $this->getOutput()->addJsConfigVars( 'throttleConfig', $throttleConfig );
+
+ $hiddenGroups =
+ new OOUI\FieldLayout(
+ new OOUI\MultilineTextInputWidget( [
+ 'name' => 'wpFilterThrottleGroups',
+ 'value' => implode( "\n", $throttleGroups ),
+ 'rows' => 5,
+ 'placeholder' => $this->msg( 'abusefilter-edit-throttle-hidden-placeholder' )->text(),
+ 'infusable' => true,
+ 'id' => 'mw-abusefilter-hidden-throttle-field'
+ ] + $readOnlyAttrib
+ ),
+ [
+ 'label' => new OOUI\HtmlSnippet(
+ $this->msg( 'abusefilter-edit-throttle-groups' )->parse()
+ ),
+ 'align' => 'top',
+ 'id' => 'mw-abusefilter-hidden-throttle'
+ ]
+ );
+
+ $throttleFields['abusefilter-edit-throttle-groups'] = $hiddenGroups;
+
$throttleSettings .=
Xml::tags(
'div',
[ 'id' => 'mw-abusefilter-throttle-parameters' ],
- Xml::buildForm( $throttleFields )
+ new OOUI\FieldsetLayout( [ 'items' => $throttleFields ] )
);
return $throttleSettings;
+ case 'disallow':
case 'warn':
- global $wgAbuseFilterDefaultWarningMessage;
$output = '';
- $checkbox = Xml::checkLabel(
- $this->msg( 'abusefilter-edit-action-warn' )->text(),
- 'wpFilterActionWarn',
- "mw-abusefilter-action-checkbox-$action",
- $set,
- [ 'class' => 'mw-abusefilter-action-checkbox' ] + $cbReadOnlyAttrib );
- $output .= Xml::tags( 'p', null, $checkbox );
- if ( $set ) {
- $warnMsg = $parameters[0];
+ $formName = $action === 'warn' ? 'wpFilterActionWarn' : 'wpFilterActionDisallow';
+ $checkbox =
+ new OOUI\FieldLayout(
+ new OOUI\CheckboxInputWidget( [
+ 'name' => $formName,
+ // mw-abusefilter-action-checkbox-warn, mw-abusefilter-action-checkbox-disallow
+ 'id' => "mw-abusefilter-action-checkbox-$action",
+ 'selected' => $set,
+ 'classes' => [ 'mw-abusefilter-action-checkbox' ]
+ ] + $readOnlyAttrib
+ ),
+ [
+ // abusefilter-edit-action-warn, abusefilter-edit-action-disallow
+ 'label' => $this->msg( "abusefilter-edit-action-$action" )->text(),
+ 'align' => 'inline'
+ ]
+ );
+ $output .= $checkbox;
+ $defaultWarnMsg = $config->get( 'AbuseFilterDefaultWarningMessage' );
+ $defaultDisallowMsg = $config->get( 'AbuseFilterDefaultDisallowMessage' );
+
+ if ( $set && isset( $parameters[0] ) ) {
+ $msg = $parameters[0];
} elseif (
$row &&
- isset( $row->af_group ) && $row->af_group &&
- isset( $wgAbuseFilterDefaultWarningMessage[$row->af_group] )
+ isset( $row->af_group ) && $row->af_group && (
+ ( $action === 'warn' && isset( $defaultWarnMsg[$row->af_group] ) ) ||
+ ( $action === 'disallow' && isset( $defaultDisallowMsg[$row->af_group] ) )
+ )
) {
- $warnMsg = $wgAbuseFilterDefaultWarningMessage[$row->af_group];
+ $msg = $action === 'warn' ? $defaultWarnMsg[$row->af_group] :
+ $defaultDisallowMsg[$row->af_group];
} else {
- $warnMsg = 'abusefilter-warning';
+ $msg = $action === 'warn' ? 'abusefilter-warning' : 'abusefilter-disallowed';
}
- $warnFields['abusefilter-edit-warn-message'] =
- $this->getExistingSelector( $warnMsg, !empty( $readOnlyAttrib ) );
- $warnFields['abusefilter-edit-warn-other-label'] =
- Xml::input(
- 'wpFilterWarnMessageOther',
- 45,
- $warnMsg,
- [ 'id' => 'mw-abusefilter-warn-message-other' ] + $cbReadOnlyAttrib
+ $fields["abusefilter-edit-$action-message"] =
+ $this->getExistingSelector( $msg, !empty( $readOnlyAttrib ), $action );
+ $otherFieldName = $action === 'warn' ? 'wpFilterWarnMessageOther'
+ : 'wpFilterDisallowMessageOther';
+
+ $fields["abusefilter-edit-$action-other-label"] =
+ new OOUI\FieldLayout(
+ new OOUI\TextInputWidget( [
+ 'name' => $otherFieldName,
+ 'value' => $msg,
+ // mw-abusefilter-warn-message-other, mw-abusefilter-disallow-message-other
+ 'id' => "mw-abusefilter-$action-message-other",
+ 'infusable' => true
+ ] + $readOnlyAttrib
+ ),
+ [
+ 'label' => new OOUI\HtmlSnippet(
+ // abusefilter-edit-warn-other-label, abusefilter-edit-disallow-other-label
+ $this->msg( "abusefilter-edit-$action-other-label" )->parse()
+ )
+ ]
);
- $previewButton = Xml::element(
- 'input',
- [
- 'type' => 'button',
- 'id' => 'mw-abusefilter-warn-preview-button',
- 'value' => $this->msg( 'abusefilter-edit-warn-preview' )->text()
- ]
- );
- $editButton = '';
- if ( $this->getUser()->isAllowed( 'editinterface' ) ) {
- $editButton .= ' ' . Xml::element(
- 'input',
- [
- 'type' => 'button',
- 'id' => 'mw-abusefilter-warn-edit-button',
- 'value' => $this->msg( 'abusefilter-edit-warn-edit' )->text()
+ $previewButton =
+ new OOUI\ButtonInputWidget( [
+ // abusefilter-edit-warn-preview, abusefilter-edit-disallow-preview
+ 'label' => $this->msg( "abusefilter-edit-$action-preview" )->text(),
+ // mw-abusefilter-warn-preview-button, mw-abusefilter-disallow-preview-button
+ 'id' => "mw-abusefilter-$action-preview-button",
+ 'infusable' => true,
+ 'flags' => 'progressive'
]
);
+
+ $buttonGroup = $previewButton;
+ if ( $this->getUser()->isAllowed( 'editinterface' ) ) {
+ $editButton =
+ new OOUI\ButtonInputWidget( [
+ // abusefilter-edit-warn-edit, abusefilter-edit-disallow-edit
+ 'label' => $this->msg( "abusefilter-edit-$action-edit" )->text(),
+ // mw-abusefilter-warn-edit-button, mw-abusefilter-disallow-edit-button
+ 'id' => "mw-abusefilter-$action-edit-button"
+ ]
+ );
+ $buttonGroup =
+ new OOUI\Widget( [
+ 'content' =>
+ new OOUI\HorizontalLayout( [
+ 'items' => [ $previewButton, $editButton ],
+ 'classes' => [
+ 'mw-abusefilter-preview-buttons',
+ 'mw-abusefilter-javascript-tools'
+ ]
+ ] )
+ ] );
}
- $previewHolder = Xml::element(
+ $previewHolder = Xml::tags(
'div',
- [ 'id' => 'mw-abusefilter-warn-preview' ], ''
+ [
+ // mw-abusefilter-warn-preview, mw-abusefilter-disallow-preview
+ 'id' => "mw-abusefilter-$action-preview",
+ 'style' => 'display:none'
+ ],
+ ''
);
- $warnFields['abusefilter-edit-warn-actions'] =
- Xml::tags( 'p', null, $previewButton . $editButton ) . "\n$previewHolder";
+ $fields["abusefilter-edit-$action-actions"] = $buttonGroup;
$output .=
Xml::tags(
'div',
- [ 'id' => 'mw-abusefilter-warn-parameters' ],
- Xml::buildForm( $warnFields )
- );
+ // mw-abusefilter-warn-parameters, mw-abusefilter-disallow-parameters
+ [ 'id' => "mw-abusefilter-$action-parameters" ],
+ new OOUI\FieldsetLayout( [ 'items' => $fields ] )
+ ) . $previewHolder;
+
return $output;
case 'tag':
if ( $set ) {
@@ -830,71 +727,225 @@ class AbuseFilterViewEdit extends AbuseFilterView {
}
$output = '';
- $checkbox = Xml::checkLabel(
- $this->msg( 'abusefilter-edit-action-tag' )->text(),
- 'wpFilterActionTag',
- "mw-abusefilter-action-checkbox-$action",
- $set,
- [ 'class' => 'mw-abusefilter-action-checkbox' ] + $cbReadOnlyAttrib
- );
- $output .= Xml::tags( 'p', null, $checkbox );
-
- $tagFields['abusefilter-edit-tag-tag'] =
- Xml::textarea( 'wpFilterTags', implode( "\n", $tags ), 40, 5, $readOnlyAttrib );
+ $checkbox =
+ new OOUI\FieldLayout(
+ new OOUI\CheckboxInputWidget( [
+ 'name' => 'wpFilterActionTag',
+ 'id' => 'mw-abusefilter-action-checkbox-tag',
+ 'selected' => $set,
+ 'classes' => [ 'mw-abusefilter-action-checkbox' ]
+ ] + $readOnlyAttrib
+ ),
+ [
+ 'label' => $this->msg( 'abusefilter-edit-action-tag' )->text(),
+ 'align' => 'inline'
+ ]
+ );
+ $output .= $checkbox;
+
+ $tagConfig = [
+ 'values' => $tags,
+ 'label' => $this->msg( 'abusefilter-edit-tag-tag' )->parse(),
+ 'disabled' => $readOnlyAttrib
+ ];
+ $this->getOutput()->addJsConfigVars( 'tagConfig', $tagConfig );
+
+ $hiddenTags =
+ new OOUI\FieldLayout(
+ new OOUI\MultilineTextInputWidget( [
+ 'name' => 'wpFilterTags',
+ 'value' => implode( ',', $tags ),
+ 'rows' => 5,
+ 'placeholder' => $this->msg( 'abusefilter-edit-tag-hidden-placeholder' )->text(),
+ 'infusable' => true,
+ 'id' => 'mw-abusefilter-hidden-tag-field'
+ ] + $readOnlyAttrib
+ ),
+ [
+ 'label' => new OOUI\HtmlSnippet(
+ $this->msg( 'abusefilter-edit-tag-tag' )->parse()
+ ),
+ 'align' => 'top',
+ 'id' => 'mw-abusefilter-hidden-tag'
+ ]
+ );
$output .=
Xml::tags( 'div',
[ 'id' => 'mw-abusefilter-tag-parameters' ],
- Xml::buildForm( $tagFields )
+ $hiddenTags
+ );
+ return $output;
+ case 'block':
+ if ( $set && count( $parameters ) === 3 ) {
+ // Both blocktalk and custom block durations available
+ $blockTalk = $parameters[0];
+ $defaultAnonDuration = $parameters[1];
+ $defaultUserDuration = $parameters[2];
+ } else {
+ if ( $set && count( $parameters ) === 1 ) {
+ // Only blocktalk available
+ $blockTalk = $parameters[0];
+ }
+ if ( $config->get( 'AbuseFilterAnonBlockDuration' ) ) {
+ $defaultAnonDuration = $config->get( 'AbuseFilterAnonBlockDuration' );
+ } else {
+ $defaultAnonDuration = $config->get( 'AbuseFilterBlockDuration' );
+ }
+ $defaultUserDuration = $config->get( 'AbuseFilterBlockDuration' );
+ }
+ $suggestedBlocks = SpecialBlock::getSuggestedDurations( null, false );
+ $suggestedBlocks = self::normalizeBlocks( $suggestedBlocks );
+
+ $output = '';
+ $checkbox =
+ new OOUI\FieldLayout(
+ new OOUI\CheckboxInputWidget( [
+ 'name' => 'wpFilterActionBlock',
+ 'id' => 'mw-abusefilter-action-checkbox-block',
+ 'selected' => $set,
+ 'classes' => [ 'mw-abusefilter-action-checkbox' ]
+ ] + $readOnlyAttrib
+ ),
+ [
+ 'label' => $this->msg( 'abusefilter-edit-action-block' )->text(),
+ 'align' => 'inline'
+ ]
+ );
+ $output .= $checkbox;
+
+ $suggestedBlocks = Xml::listDropDownOptionsOoui( $suggestedBlocks );
+
+ $anonDuration =
+ new OOUI\DropdownInputWidget( [
+ 'name' => 'wpBlockAnonDuration',
+ 'options' => $suggestedBlocks,
+ 'value' => $defaultAnonDuration,
+ 'disabled' => !$this->canEditFilter( $row )
+ ] );
+
+ $userDuration =
+ new OOUI\DropdownInputWidget( [
+ 'name' => 'wpBlockUserDuration',
+ 'options' => $suggestedBlocks,
+ 'value' => $defaultUserDuration,
+ 'disabled' => !$this->canEditFilter( $row )
+ ] );
+
+ $blockOptions = [];
+ if ( $config->get( 'BlockAllowsUTEdit' ) === true ) {
+ $talkCheckbox =
+ new OOUI\FieldLayout(
+ new OOUI\CheckboxInputWidget( [
+ 'name' => 'wpFilterBlockTalk',
+ 'id' => 'mw-abusefilter-action-checkbox-blocktalk',
+ 'selected' => isset( $blockTalk ) && $blockTalk == 'blocktalk',
+ 'classes' => [ 'mw-abusefilter-action-checkbox' ]
+ ] + $readOnlyAttrib
+ ),
+ [
+ 'label' => $this->msg( 'abusefilter-edit-action-blocktalk' )->text(),
+ 'align' => 'left'
+ ]
+ );
+
+ $blockOptions['abusefilter-edit-block-options'] = $talkCheckbox;
+ }
+ $blockOptions['abusefilter-edit-block-anon-durations'] =
+ new OOUI\FieldLayout(
+ $anonDuration,
+ [
+ 'label' => $this->msg( 'abusefilter-edit-block-anon-durations' )->text()
+ ]
);
+ $blockOptions['abusefilter-edit-block-user-durations'] =
+ new OOUI\FieldLayout(
+ $userDuration,
+ [
+ 'label' => $this->msg( 'abusefilter-edit-block-user-durations' )->text()
+ ]
+ );
+
+ $output .= Xml::tags(
+ 'div',
+ [ 'id' => 'mw-abusefilter-block-parameters' ],
+ new OOUI\FieldsetLayout( [ 'items' => $blockOptions ] )
+ );
+
return $output;
+
default:
// Give grep a chance to find the usages:
- // abusefilter-edit-action-warn, abusefilter-edit-action-disallow
- // abusefilter-edit-action-blockautopromote
- // abusefilter-edit-action-degroup, abusefilter-edit-action-block
- // abusefilter-edit-action-throttle, abusefilter-edit-action-rangeblock
- // abusefilter-edit-action-tag
+ // abusefilter-edit-action-disallow,
+ // abusefilter-edit-action-blockautopromote,
+ // abusefilter-edit-action-degroup,
+ // abusefilter-edit-action-rangeblock,
$message = 'abusefilter-edit-action-' . $action;
$form_field = 'wpFilterAction' . ucfirst( $action );
$status = $set;
- $thisAction = Xml::checkLabel(
- $this->msg( $message )->text(),
- $form_field,
- "mw-abusefilter-action-checkbox-$action",
- $status,
- [ 'class' => 'mw-abusefilter-action-checkbox' ] + $cbReadOnlyAttrib
- );
- $thisAction = Xml::tags( 'p', null, $thisAction );
+ $thisAction =
+ new OOUI\FieldLayout(
+ new OOUI\CheckboxInputWidget( [
+ 'name' => $form_field,
+ 'id' => "mw-abusefilter-action-checkbox-$action",
+ 'selected' => $status,
+ 'classes' => [ 'mw-abusefilter-action-checkbox' ]
+ ] + $readOnlyAttrib
+ ),
+ [
+ 'label' => $this->msg( $message )->text(),
+ 'align' => 'inline'
+ ]
+ );
+ $thisAction = $thisAction;
return $thisAction;
}
}
/**
- * @param $warnMsg string
- * @param $readOnly bool
- * @return string
+ * @param string $warnMsg
+ * @param bool $readOnly
+ * @param string $action
+ * @return \OOUI\FieldLayout
*/
- function getExistingSelector( $warnMsg, $readOnly = false ) {
- $existingSelector = new XmlSelect(
- 'wpFilterWarnMessage',
- 'mw-abusefilter-warn-message-existing',
- $warnMsg == 'abusefilter-warning' ? 'abusefilter-warning' : 'other'
- );
+ public function getExistingSelector( $warnMsg, $readOnly = false, $action = 'warn' ) {
+ if ( $action === 'warn' ) {
+ $action = 'warning';
+ $formId = 'warn';
+ $inputName = 'wpFilterWarnMessage';
+ } elseif ( $action === 'disallow' ) {
+ $action = 'disallowed';
+ $formId = 'disallow';
+ $inputName = 'wpFilterDisallowMessage';
+ } else {
+ throw new MWException( "Unexpected action value $action" );
+ }
- $existingSelector->addOption( 'abusefilter-warning' );
+ $existingSelector =
+ new OOUI\DropdownInputWidget( [
+ 'name' => $inputName,
+ // mw-abusefilter-warn-message-existing, mw-abusefilter-disallow-message-existing
+ 'id' => "mw-abusefilter-$formId-message-existing",
+ // abusefilter-warning, abusefilter-disallowed
+ 'value' => $warnMsg == "abusefilter-$action" ? "abusefilter-$action" : 'other',
+ 'infusable' => true
+ ] );
+
+ // abusefilter-warning, abusefilter-disallowed
+ $options = [ "abusefilter-$action" => "abusefilter-$action" ];
if ( $readOnly ) {
- $existingSelector->setAttribute( 'disabled', 'disabled' );
+ $existingSelector->setDisabled( true );
} else {
// Find other messages.
$dbr = wfGetDB( DB_REPLICA );
+ $pageTitlePrefix = "Abusefilter-$action";
$res = $dbr->select(
'page',
[ 'page_title' ],
[
'page_namespace' => 8,
- 'page_title LIKE ' . $dbr->addQuotes( 'Abusefilter-warning%' )
+ 'page_title LIKE ' . $dbr->addQuotes( $pageTitlePrefix . '%' )
],
__METHOD__
);
@@ -902,27 +953,87 @@ class AbuseFilterViewEdit extends AbuseFilterView {
$lang = $this->getLanguage();
foreach ( $res as $row ) {
if ( $lang->lcfirst( $row->page_title ) == $lang->lcfirst( $warnMsg ) ) {
- $existingSelector->setDefault( $lang->lcfirst( $warnMsg ) );
+ $existingSelector->setValue( $lang->lcfirst( $warnMsg ) );
}
- if ( $row->page_title != 'Abusefilter-warning' ) {
- $existingSelector->addOption( $lang->lcfirst( $row->page_title ) );
+ if ( $row->page_title != "Abusefilter-$action" ) {
+ $options += [ $lang->lcfirst( $row->page_title ) => $lang->lcfirst( $row->page_title ) ];
}
}
}
- $existingSelector->addOption( $this->msg( 'abusefilter-edit-warn-other' )->text(), 'other' );
+ // abusefilter-edit-warn-other, abusefilter-edit-disallow-other
+ $options += [ $this->msg( "abusefilter-edit-$formId-other" )->text() => 'other' ];
+
+ $options = Xml::listDropDownOptionsOoui( $options );
+ $existingSelector->setOptions( $options );
+
+ $existingSelector =
+ new OOUI\FieldLayout(
+ $existingSelector,
+ [
+ // abusefilter-edit-warn-message, abusefilter-edit-disallow-message
+ 'label' => $this->msg( "abusefilter-edit-$formId-message" )->text()
+ ]
+ );
+
+ return $existingSelector;
+ }
+
+ /**
+ * @todo Maybe we should also check if global values belong to $durations
+ * and determine the right point to add them if missing.
+ *
+ * @param array $durations
+ * @return array
+ */
+ protected static function normalizeBlocks( $durations ) {
+ global $wgAbuseFilterBlockDuration, $wgAbuseFilterAnonBlockDuration;
+ // We need to have same values since it may happen that ipblocklist
+ // and one (or both) of the global variables use different wording
+ // for the same duration. In such case, when setting the default of
+ // the dropdowns it would fail.
+ $anonDuration = self::getAbsoluteBlockDuration( $wgAbuseFilterAnonBlockDuration );
+ $userDuration = self::getAbsoluteBlockDuration( $wgAbuseFilterBlockDuration );
+ foreach ( $durations as &$duration ) {
+ $currentDuration = self::getAbsoluteBlockDuration( $duration );
+
+ if ( $duration !== $wgAbuseFilterBlockDuration &&
+ $currentDuration === $userDuration ) {
+ $duration = $wgAbuseFilterBlockDuration;
+
+ } elseif ( $duration !== $wgAbuseFilterAnonBlockDuration &&
+ $currentDuration === $anonDuration ) {
+ $duration = $wgAbuseFilterAnonBlockDuration;
+ }
+ }
+
+ return $durations;
+ }
- return $existingSelector->getHTML();
+ /**
+ * Converts a string duration to an absolute timestamp, i.e. unrelated to the current
+ * time, taking into account infinity durations as well. The second parameter of
+ * strtotime is set to 0 in order to convert the duration in seconds (instead of
+ * a timestamp), thus making it unaffected by the execution time of the code.
+ *
+ * @param string $duration
+ * @return string|int
+ */
+ protected static function getAbsoluteBlockDuration( $duration ) {
+ if ( wfIsInfinity( $duration ) ) {
+ return 'infinity';
+ }
+ return strtotime( $duration, 0 );
}
/**
* Loads filter data from the database by ID.
- * @param $id int The filter's ID number
+ * @param int $id The filter's ID number
* @return array|null Either an associative array representing the filter,
* or NULL if the filter does not exist.
*/
- function loadFilterData( $id ) {
+ public function loadFilterData( $id ) {
if ( $id == 'new' ) {
$obj = new stdClass;
$obj->af_pattern = '';
@@ -969,8 +1080,9 @@ class AbuseFilterViewEdit extends AbuseFilterView {
// Load the actions
$actions = [];
- $res = $dbr->select( 'abuse_filter_action',
- '*',
+ $res = $dbr->select(
+ 'abuse_filter_action',
+ [ 'afa_consequence', 'afa_parameters' ],
[ 'afa_filter' => $id ],
__METHOD__
);
@@ -978,7 +1090,7 @@ class AbuseFilterViewEdit extends AbuseFilterView {
foreach ( $res as $actionRow ) {
$thisAction = [];
$thisAction['action'] = $actionRow->afa_consequence;
- $thisAction['parameters'] = explode( "\n", $actionRow->afa_parameters );
+ $thisAction['parameters'] = array_filter( explode( "\n", $actionRow->afa_parameters ) );
$actions[$actionRow->afa_consequence] = $thisAction;
}
@@ -991,21 +1103,21 @@ class AbuseFilterViewEdit extends AbuseFilterView {
* Either from the HTTP request or from the filter/history_id given.
* The HTTP request always takes precedence.
* Includes caching.
- * @param $filter int The filter ID being requested.
- * @param $history_id int If any, the history ID being requested.
- * @return Array with filter data if available, otherwise null.
+ * @param int $filter The filter ID being requested.
+ * @param int|null $history_id If any, the history ID being requested.
+ * @return array|null Array with filter data if available, otherwise null.
* The first element contains the abuse_filter database row,
* the second element is an array of related abuse_filter_action rows.
*/
- function loadRequest( $filter, $history_id = null ) {
- static $row = null;
- static $actions = null;
+ public function loadRequest( $filter, $history_id = null ) {
+ $row = self::$mLoadedRow;
+ $actions = self::$mLoadedActions;
$request = $this->getRequest();
if ( !is_null( $actions ) && !is_null( $row ) ) {
return [ $row, $actions ];
} elseif ( $request->wasPosted() ) {
- # Nothing, we do it all later
+ // Nothing, we do it all later
} elseif ( $history_id ) {
return $this->loadHistoryItem( $history_id );
} else {
@@ -1051,18 +1163,17 @@ class AbuseFilterViewEdit extends AbuseFilterView {
$row->af_group = $request->getVal( 'wpFilterGroup', 'default' );
- $row->af_deleted = $request->getBool( 'wpFilterDeleted' );
- $row->af_enabled = $request->getBool( 'wpFilterEnabled' ) && !$row->af_deleted;
- $row->af_hidden = $request->getBool( 'wpFilterHidden' );
- global $wgAbuseFilterIsCentral;
- $row->af_global = $request->getBool( 'wpFilterGlobal' ) && $wgAbuseFilterIsCentral;
+ $row->af_deleted = $request->getCheck( 'wpFilterDeleted' );
+ $row->af_enabled = $request->getCheck( 'wpFilterEnabled' );
+ $row->af_hidden = $request->getCheck( 'wpFilterHidden' );
+ $row->af_global = $request->getCheck( 'wpFilterGlobal' )
+ && $this->getConfig()->get( 'AbuseFilterIsCentral' );
// Actions
- global $wgAbuseFilterActions;
$actions = [];
- foreach ( array_filter( $wgAbuseFilterActions ) as $action => $_ ) {
+ foreach ( array_filter( $this->getConfig()->get( 'AbuseFilterActions' ) ) as $action => $_ ) {
// Check if it's set
- $enabled = $request->getBool( 'wpFilterAction' . ucfirst( $action ) );
+ $enabled = $request->getCheck( 'wpFilterAction' . ucfirst( $action ) );
if ( $enabled ) {
$parameters = [];
@@ -1071,10 +1182,20 @@ class AbuseFilterViewEdit extends AbuseFilterView {
// We need to load the parameters
$throttleCount = $request->getIntOrNull( 'wpFilterThrottleCount' );
$throttlePeriod = $request->getIntOrNull( 'wpFilterThrottlePeriod' );
- $throttleGroups = explode( "\n",
- trim( $request->getText( 'wpFilterThrottleGroups' ) ) );
+ // First explode with \n, which is the delimiter used in the textarea
+ $rawGroups = explode( "\n", $request->getText( 'wpFilterThrottleGroups' ) );
+ // Trim any space, both as an actual group and inside subgroups
+ $throttleGroups = [];
+ foreach ( $rawGroups as $group ) {
+ if ( strpos( $group, ',' ) !== false ) {
+ $subGroups = explode( ',', $group );
+ $throttleGroups[] = implode( ',', array_map( 'trim', $subGroups ) );
+ } elseif ( trim( $group ) !== '' ) {
+ $throttleGroups[] = trim( $group );
+ }
+ }
- $parameters[0] = $this->mFilter; // For now, anyway
+ $parameters[0] = $this->mFilter;
$parameters[1] = "$throttleCount,$throttlePeriod";
$parameters = array_merge( $parameters, $throttleGroups );
} elseif ( $action == 'warn' ) {
@@ -1085,8 +1206,21 @@ class AbuseFilterViewEdit extends AbuseFilterView {
}
$parameters[0] = $specMsg;
+ } elseif ( $action == 'block' ) {
+ $parameters[0] = $request->getCheck( 'wpFilterBlockTalk' ) ?
+ 'blocktalk' : 'noTalkBlockSet';
+ $parameters[1] = $request->getVal( 'wpBlockAnonDuration' );
+ $parameters[2] = $request->getVal( 'wpBlockUserDuration' );
+ } elseif ( $action == 'disallow' ) {
+ $specMsg = $request->getVal( 'wpFilterDisallowMessage' );
+
+ if ( $specMsg == 'other' ) {
+ $specMsg = $request->getVal( 'wpFilterDisallowMessageOther' );
+ }
+
+ $parameters[0] = $specMsg;
} elseif ( $action == 'tag' ) {
- $parameters = explode( "\n", $request->getText( 'wpFilterTags' ) );
+ $parameters = explode( ',', trim( $request->getText( 'wpFilterTags' ) ) );
}
$thisAction = [ 'action' => $action, 'parameters' => $parameters ];
@@ -1097,20 +1231,21 @@ class AbuseFilterViewEdit extends AbuseFilterView {
$row->af_actions = implode( ',', array_keys( array_filter( $actions ) ) );
+ self::$mLoadedRow = $row;
+ self::$mLoadedActions = $actions;
return [ $row, $actions ];
}
/**
* Loads historical data in a form that the editor can understand.
- * @param $id int History ID
+ * @param int $id History ID
* @return array|bool False if the history ID is not valid, otherwise array in the usual format:
* First element contains the abuse_filter row (as it was).
* Second element contains an array of abuse_filter_action rows.
*/
- function loadHistoryItem( $id ) {
+ public function loadHistoryItem( $id ) {
$dbr = wfGetDB( DB_REPLICA );
- // Load the row.
$row = $dbr->selectRow( 'abuse_filter_history',
'*',
[ 'afh_id' => $id ],
@@ -1124,11 +1259,17 @@ class AbuseFilterViewEdit extends AbuseFilterView {
return AbuseFilter::translateFromHistory( $row );
}
- protected function exposeWarningMessages() {
- global $wgOut, $wgAbuseFilterDefaultWarningMessage;
- $wgOut->addJsConfigVars(
+ /**
+ * Exports the default warning and disallow messages to a JS variable
+ */
+ protected function exposeMessages() {
+ $this->getOutput()->addJsConfigVars(
'wgAbuseFilterDefaultWarningMessage',
- $wgAbuseFilterDefaultWarningMessage
+ $this->getConfig()->get( 'AbuseFilterDefaultWarningMessage' )
+ );
+ $this->getOutput()->addJsConfigVars(
+ 'wgAbuseFilterDefaultDisallowMessage',
+ $this->getConfig()->get( 'AbuseFilterDefaultDisallowMessage' )
);
}
}
diff --git a/AbuseFilter/includes/Views/AbuseFilterViewExamine.php b/AbuseFilter/includes/Views/AbuseFilterViewExamine.php
index 4d72a7d4..6c3d065c 100644
--- a/AbuseFilter/includes/Views/AbuseFilterViewExamine.php
+++ b/AbuseFilter/includes/Views/AbuseFilterViewExamine.php
@@ -4,10 +4,13 @@ class AbuseFilterViewExamine extends AbuseFilterView {
public static $examineType = null;
public static $examineId = null;
- public $mCounter, $mSearchUser, $mSearchPeriodStart, $mSearchPeriodEnd,
- $mTestFilter;
+ public $mCounter, $mSearchUser, $mSearchPeriodStart, $mSearchPeriodEnd;
+ public $mTestFilter;
- function show() {
+ /**
+ * Shows the page
+ */
+ public function show() {
$out = $this->getOutput();
$out->setPageTitle( $this->msg( 'abusefilter-examine' ) );
$out->addWikiMsg( 'abusefilter-examine-intro' );
@@ -27,25 +30,36 @@ class AbuseFilterViewExamine extends AbuseFilterView {
}
}
- function showSearch() {
+ /**
+ * Shows the search form
+ */
+ public function showSearch() {
+ $RCMaxAge = $this->getConfig()->get( 'RCMaxAge' );
+ $min = wfTimestamp( TS_ISO_8601, time() - $RCMaxAge );
+ $max = wfTimestampNow();
$formDescriptor = [
'SearchUser' => [
'label-message' => 'abusefilter-test-user',
'type' => 'user',
+ 'ipallowed' => true,
'default' => $this->mSearchUser,
],
'SearchPeriodStart' => [
'label-message' => 'abusefilter-test-period-start',
- 'type' => 'text',
+ 'type' => 'datetime',
'default' => $this->mSearchPeriodStart,
+ 'min' => $min,
+ 'max' => $max,
],
'SearchPeriodEnd' => [
'label-message' => 'abusefilter-test-period-end',
- 'type' => 'text',
+ 'type' => 'datetime',
'default' => $this->mSearchPeriodEnd,
+ 'min' => $min,
+ 'max' => $max,
],
];
- $htmlForm = HTMLForm::factory( 'table', $formDescriptor, $this->getContext() );
+ $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
$htmlForm->setWrapperLegendMsg( 'abusefilter-examine-legend' )
->addHiddenField( 'submit', 1 )
->setSubmitTextMsg( 'abusefilter-examine-submit' )
@@ -58,8 +72,11 @@ class AbuseFilterViewExamine extends AbuseFilterView {
}
}
- function showResults() {
- $changesList = new AbuseFilterChangesList( $this->getSkin() );
+ /**
+ * Show search results
+ */
+ public function showResults() {
+ $changesList = new AbuseFilterChangesList( $this->getSkin(), $this->mTestFilter );
$output = $changesList->beginRecentChangesList();
$this->mCounter = 1;
@@ -74,14 +91,20 @@ class AbuseFilterViewExamine extends AbuseFilterView {
$this->getOutput()->addHTML( $output );
}
- function showExaminerForRC( $rcid ) {
+ /**
+ * @param int $rcid
+ */
+ public function showExaminerForRC( $rcid ) {
// Get data
$dbr = wfGetDB( DB_REPLICA );
+ $rcQuery = RecentChange::getQueryInfo();
$row = $dbr->selectRow(
- 'recentchanges',
- RecentChange::selectFields(),
+ $rcQuery['tables'],
+ $rcQuery['fields'],
[ 'rc_id' => $rcid ],
- __METHOD__
+ __METHOD__,
+ [],
+ $rcQuery['joins']
);
$out = $this->getOutput();
if ( !$row ) {
@@ -102,10 +125,23 @@ class AbuseFilterViewExamine extends AbuseFilterView {
$this->showExaminer( $vars );
}
- function showExaminerForLogEntry( $logid ) {
+ /**
+ * @param int $logid
+ */
+ public function showExaminerForLogEntry( $logid ) {
// Get data
$dbr = wfGetDB( DB_REPLICA );
- $row = $dbr->selectRow( 'abuse_filter_log', '*', [ 'afl_id' => $logid ], __METHOD__ );
+ $row = $dbr->selectRow(
+ 'abuse_filter_log',
+ [
+ 'afl_filter',
+ 'afl_deleted',
+ 'afl_var_dump',
+ 'afl_rev_id'
+ ],
+ [ 'afl_id' => $logid ],
+ __METHOD__
+ );
$out = $this->getOutput();
if ( !$row ) {
@@ -138,8 +174,12 @@ class AbuseFilterViewExamine extends AbuseFilterView {
$this->showExaminer( $vars );
}
- function showExaminer( $vars ) {
+ /**
+ * @param AbuseFilterVariableHolder|null $vars
+ */
+ public function showExaminer( $vars ) {
$output = $this->getOutput();
+ $output->enableOOUI();
if ( !$vars ) {
$output->addWikiMsg( 'abusefilter-examine-incompatible' );
@@ -155,34 +195,16 @@ class AbuseFilterViewExamine extends AbuseFilterView {
$output->addModules( 'ext.abuseFilter.examine' );
// Add test bit
- if ( $this->getUser()->isAllowed( 'abusefilter-modify' ) ) {
+ if ( $this->canViewPrivate() ) {
$tester = Xml::tags( 'h2', null, $this->msg( 'abusefilter-examine-test' )->parse() );
- $tester .= AbuseFilter::buildEditBox( $this->mTestFilter, 'wpTestFilter', false );
- $tester .=
- "\n" .
- Xml::inputLabel(
- $this->msg( 'abusefilter-test-load-filter' )->text(),
- 'wpInsertFilter',
- 'mw-abusefilter-load-filter',
- 10,
- ''
- ) .
- '&#160;' .
- Xml::element(
- 'input',
- [
- 'type' => 'button',
- 'value' => $this->msg( 'abusefilter-test-load' )->text(),
- 'id' => 'mw-abusefilter-load'
- ]
- );
+ $tester .= $this->buildEditBox( $this->mTestFilter, 'wpTestFilter', false, false, false );
+ $tester .= AbuseFilter::buildFilterLoader();
$html .= Xml::tags( 'div', [ 'id' => 'mw-abusefilter-examine-editor' ], $tester );
$html .= Xml::tags( 'p',
null,
- Xml::element( 'input',
+ new OOUI\ButtonInputWidget(
[
- 'type' => 'button',
- 'value' => $this->msg( 'abusefilter-examine-test-button' )->text(),
+ 'label' => $this->msg( 'abusefilter-examine-test-button' )->text(),
'id' => 'mw-abusefilter-examine-test'
]
) .
@@ -206,83 +228,19 @@ class AbuseFilterViewExamine extends AbuseFilterView {
$output->addHTML( $html );
}
- function loadParameters() {
+ /**
+ * Loads parameters from request
+ */
+ public function loadParameters() {
$request = $this->getRequest();
- $searchUsername = $request->getText( 'wpSearchUser' );
$this->mSearchPeriodStart = $request->getText( 'wpSearchPeriodStart' );
$this->mSearchPeriodEnd = $request->getText( 'wpSearchPeriodEnd' );
$this->mSubmit = $request->getCheck( 'submit' );
$this->mTestFilter = $request->getText( 'testfilter' );
// Normalise username
- $userTitle = Title::newFromText( $searchUsername );
-
- if ( $userTitle && $userTitle->getNamespace() == NS_USER ) {
- $this->mSearchUser = $userTitle->getText(); // Allow User:Blah syntax.
- } elseif ( $userTitle ) {
- // Not sure of the value of prefixedText over text, but no need to munge unnecessarily.
- $this->mSearchUser = $userTitle->getPrefixedText();
- } else {
- $this->mSearchUser = '';
- }
- }
-}
-
-class AbuseFilterExaminePager extends ReverseChronologicalPager {
- /**
- * @param AbuseFilterViewExamine $page
- * @param AbuseFilterChangesList $changesList
- */
- function __construct( $page, $changesList ) {
- parent::__construct();
- $this->mChangesList = $changesList;
- $this->mPage = $page;
- }
-
- /**
- * @fixme this is similar to AbuseFilterViewTestBatch::doTest
- */
- function getQueryInfo() {
- $dbr = wfGetDB( DB_REPLICA );
- $conds = [];
- $conds['rc_user_text'] = $this->mPage->mSearchUser;
-
- $startTS = strtotime( $this->mPage->mSearchPeriodStart );
- if ( $startTS ) {
- $conds[] = 'rc_timestamp>=' . $dbr->addQuotes( $dbr->timestamp( $startTS ) );
- }
- $endTS = strtotime( $this->mPage->mSearchPeriodEnd );
- if ( $endTS ) {
- $conds[] = 'rc_timestamp<=' . $dbr->addQuotes( $dbr->timestamp( $endTS ) );
- }
-
- $conds[] = $this->mPage->buildTestConditions( $dbr );
-
- $info = [
- 'tables' => 'recentchanges',
- 'fields' => RecentChange::selectFields(),
- 'conds' => array_filter( $conds ),
- 'options' => [ 'ORDER BY' => 'rc_timestamp DESC' ],
- ];
-
- return $info;
- }
-
- function formatRow( $row ) {
- $rc = RecentChange::newFromRow( $row );
- $rc->counter = $this->mPage->mCounter++;
- return $this->mChangesList->recentChangesLine( $rc, false );
- }
-
- function getIndexField() {
- return 'rc_id';
- }
-
- function getTitle() {
- return $this->mPage->getTitle( 'examine' );
- }
-
- function getEmptyBody() {
- return $this->msg( 'abusefilter-examine-noresults' )->parseAsBlock();
+ $searchUsername = $request->getText( 'wpSearchUser' );
+ $userTitle = Title::newFromText( $searchUsername, NS_USER );
+ $this->mSearchUser = $userTitle ? $userTitle->getText() : '';
}
}
diff --git a/AbuseFilter/includes/Views/AbuseFilterViewHistory.php b/AbuseFilter/includes/Views/AbuseFilterViewHistory.php
index a6ef187c..66a14a56 100644
--- a/AbuseFilter/includes/Views/AbuseFilterViewHistory.php
+++ b/AbuseFilter/includes/Views/AbuseFilterViewHistory.php
@@ -1,22 +1,30 @@
<?php
class AbuseFilterViewHistory extends AbuseFilterView {
- function __construct( $page, $params ) {
+ /**
+ * @param SpecialAbuseFilter $page
+ * @param array $params
+ */
+ public function __construct( $page, $params ) {
parent::__construct( $page, $params );
$this->mFilter = $page->mFilter;
}
- function show() {
+ /**
+ * Shows the page
+ */
+ public function show() {
$out = $this->getOutput();
- $filter = $this->mFilter;
+ $out->enableOOUI();
+ $filter = $this->getRequest()->getText( 'filter' ) ?: $this->mFilter;
if ( $filter ) {
- $out->setPageTitle( $this->msg( 'abusefilter-history', $filter ) );
+ $out->setPageTitle( $this->msg( 'abusefilter-history' )->numParams( $filter ) );
} else {
$out->setPageTitle( $this->msg( 'abusefilter-filter-log' ) );
}
- # Check perms. abusefilter-modify is a superset of abusefilter-view-private
+ // Check perms. abusefilter-modify is a superset of abusefilter-view-private
if ( $filter && AbuseFilter::filterHidden( $filter )
&& !$this->getUser()->isAllowedAny( 'abusefilter-modify', 'abusefilter-view-private' )
) {
@@ -24,30 +32,36 @@ class AbuseFilterViewHistory extends AbuseFilterView {
return;
}
- # Useful links
+ // Useful links
$links = [];
if ( $filter ) {
- $links['abusefilter-history-backedit'] = $this->getTitle( $filter );
+ $links['abusefilter-history-backedit'] = $this->getTitle( $filter )->getFullURL();
}
foreach ( $links as $msg => $title ) {
- $links[$msg] = $this->linkRenderer->makeLink(
- $title,
- new HtmlArmor( $this->msg( $msg )->parse() )
- );
+ $links[$msg] =
+ new OOUI\ButtonWidget( [
+ 'label' => $this->msg( $msg )->text(),
+ 'href' => $title
+ ] );
}
- $backlinks = $this->getLanguage()->pipeList( $links );
- $out->addHTML( Xml::tags( 'p', null, $backlinks ) );
+ $backlinks =
+ new OOUI\HorizontalLayout( [
+ 'items' => $links
+ ] );
+ $out->addHTML( $backlinks );
- # For user
+ // For user
$user = User::getCanonicalName( $this->getRequest()->getText( 'user' ), 'valid' );
if ( $user ) {
$out->addSubtitle(
$this->msg(
'abusefilter-history-foruser',
- Linker::userLink( 1 /* We don't really need to get a user ID */, $user ),
- $user // For GENDER
+ // We don't really need to get a user ID
+ Linker::userLink( 1, $user ),
+ // For GENDER
+ $user
)->text()
);
}
@@ -59,223 +73,30 @@ class AbuseFilterViewHistory extends AbuseFilterView {
'default' => $user,
'size' => '45',
'label-message' => 'abusefilter-history-select-user'
- ]
+ ],
+ 'filter' => [
+ 'type' => 'text',
+ 'name' => 'filter',
+ 'default' => $filter,
+ 'size' => '45',
+ 'label-message' => 'abusefilter-history-select-filter'
+ ],
];
- $htmlForm = HTMLForm::factory( 'table', $formDescriptor, $this->getContext() );
+ $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
$htmlForm->setSubmitTextMsg( 'abusefilter-history-select-submit' )
->setWrapperLegendMsg( 'abusefilter-history-select-legend' )
- ->setAction( $this->getTitle( "history/$filter" )->getLocalURL() )
+ ->setAction( $this->getTitle( 'history' )->getLocalURL() )
->setMethod( 'get' )
->prepareForm()
->displayForm( false );
$pager = new AbuseFilterHistoryPager( $filter, $this, $user, $this->linkRenderer );
- $table = $pager->getBody();
-
- $out->addHTML( $pager->getNavigationBar() . $table . $pager->getNavigationBar() );
- }
-}
-
-class AbuseFilterHistoryPager extends TablePager {
-
- protected $linkRenderer;
- /**
- * @param $filter
- * @param $page ContextSource
- * @param $user string User name
- * @param \MediaWiki\Linker\LinkRenderer $linkRenderer
- */
- function __construct( $filter, $page, $user, $linkRenderer ) {
- $this->mFilter = $filter;
- $this->mPage = $page;
- $this->mUser = $user;
- $this->mDefaultDirection = true;
- $this->linkRenderer = $linkRenderer;
- parent::__construct( $this->mPage->getContext() );
- }
-
- function getFieldNames() {
- static $headers = null;
-
- if ( !empty( $headers ) ) {
- return $headers;
- }
-
- $headers = [
- 'afh_timestamp' => 'abusefilter-history-timestamp',
- 'afh_user_text' => 'abusefilter-history-user',
- 'afh_public_comments' => 'abusefilter-history-public',
- 'afh_flags' => 'abusefilter-history-flags',
- 'afh_actions' => 'abusefilter-history-actions',
- 'afh_id' => 'abusefilter-history-diff',
- ];
-
- if ( !$this->mFilter ) {
- // awful hack
- $headers = [ 'afh_filter' => 'abusefilter-history-filterid' ] + $headers;
- unset( $headers['afh_comments'] );
- }
-
- foreach ( $headers as &$msg ) {
- $msg = $this->msg( $msg )->text();
- }
-
- return $headers;
- }
-
- function formatValue( $name, $value ) {
- $lang = $this->getLanguage();
-
- $row = $this->mCurrentRow;
-
- switch ( $name ) {
- case 'afh_filter':
- $formatted = $this->linkRenderer->makeLink(
- SpecialPage::getTitleFor( 'AbuseFilter', intval( $row->afh_filter ) ),
- $lang->formatNum( $row->afh_filter )
- );
- break;
- case 'afh_timestamp':
- $title = SpecialPage::getTitleFor( 'AbuseFilter',
- 'history/' . $row->afh_filter . '/item/' . $row->afh_id );
- $formatted = $this->linkRenderer->makeLink(
- $title,
- $lang->timeanddate( $row->afh_timestamp, true )
- );
- break;
- case 'afh_user_text':
- $formatted =
- Linker::userLink( $row->afh_user, $row->afh_user_text ) . ' ' .
- Linker::userToolLinks( $row->afh_user, $row->afh_user_text );
- break;
- case 'afh_public_comments':
- $formatted = htmlspecialchars( $value, ENT_QUOTES, 'UTF-8', false );
- break;
- case 'afh_flags':
- $formatted = AbuseFilter::formatFlags( $value );
- break;
- case 'afh_actions':
- $actions = unserialize( $value );
-
- $display_actions = '';
- foreach ( $actions as $action => $parameters ) {
- $displayAction = AbuseFilter::formatAction( $action, $parameters );
- $display_actions .= Xml::tags( 'li', null, $displayAction );
- }
- $display_actions = Xml::tags( 'ul', null, $display_actions );
-
- $formatted = $display_actions;
- break;
- case 'afh_id':
- $formatted = '';
- if ( AbuseFilter::getFirstFilterChange( $row->afh_filter ) != $value ) {
- // Set a link to a diff with the previous version if this isn't the first edit to the filter
- $title = $this->mPage->getTitle(
- 'history/' . $row->afh_filter . "/diff/prev/$value" );
- $formatted = $this->linkRenderer->makeLink(
- $title,
- new HtmlArmor( $this->msg( 'abusefilter-history-diff' )->parse() )
- );
- }
- break;
- default:
- $formatted = "Unable to format $name";
- break;
- }
-
- $mappings = array_flip( AbuseFilter::$history_mappings ) +
- [ 'afh_actions' => 'actions', 'afh_id' => 'id' ];
- $changed = explode( ',', $row->afh_changed_fields );
-
- $fieldChanged = false;
- if ( $name == 'afh_flags' ) {
- // This is a bit freaky, but it works.
- // Basically, returns true if any of those filters are in the $changed array.
- $filters = [ 'af_enabled', 'af_hidden', 'af_deleted', 'af_global' ];
- if ( count( array_diff( $filters, $changed ) ) < count( $filters ) ) {
- $fieldChanged = true;
- }
- } elseif ( in_array( $mappings[$name], $changed ) ) {
- $fieldChanged = true;
- }
-
- if ( $fieldChanged ) {
- $formatted = Xml::tags( 'div',
- [ 'class' => 'mw-abusefilter-history-changed' ],
- $formatted
- );
- }
-
- return $formatted;
- }
-
- function getQueryInfo() {
- $info = [
- 'tables' => [ 'abuse_filter_history', 'abuse_filter' ],
- 'fields' => [
- 'afh_filter',
- 'afh_timestamp',
- 'afh_user_text',
- 'afh_public_comments',
- 'afh_flags',
- 'afh_comments',
- 'afh_actions',
- 'afh_id',
- 'afh_user',
- 'afh_changed_fields',
- 'afh_pattern',
- 'afh_id',
- 'af_hidden'
- ],
- 'conds' => [],
- 'join_conds' => [
- 'abuse_filter' =>
- [
- 'LEFT JOIN',
- 'afh_filter=af_id',
- ],
- ],
- ];
-
- if ( $this->mUser ) {
- $info['conds']['afh_user_text'] = $this->mUser;
- }
-
- if ( $this->mFilter ) {
- $info['conds']['afh_filter'] = $this->mFilter;
- }
-
- if ( !$this->getUser()->isAllowedAny(
- 'abusefilter-modify', 'abusefilter-view-private' )
- ) {
- // Hide data the user can't see.
- $info['conds']['af_hidden'] = 0;
- }
-
- return $info;
- }
-
- function getIndexField() {
- return 'afh_timestamp';
- }
-
- function getDefaultSort() {
- return 'afh_timestamp';
- }
-
- function isFieldSortable( $name ) {
- $sortable_fields = [ 'afh_timestamp', 'afh_user_text' ];
- return in_array( $name, $sortable_fields );
- }
-
- /**
- * Title used for self-links.
- *
- * @return Title
- */
- function getTitle() {
- return $this->mPage->getTitle( 'history/' . $this->mFilter );
+ $out->addHTML(
+ $pager->getNavigationBar() .
+ $pager->getBody() .
+ $pager->getNavigationBar()
+ );
}
}
diff --git a/AbuseFilter/includes/Views/AbuseFilterViewImport.php b/AbuseFilter/includes/Views/AbuseFilterViewImport.php
index 6bd4c269..01e2fc85 100644
--- a/AbuseFilter/includes/Views/AbuseFilterViewImport.php
+++ b/AbuseFilter/includes/Views/AbuseFilterViewImport.php
@@ -1,7 +1,10 @@
<?php
class AbuseFilterViewImport extends AbuseFilterView {
- function show() {
+ /**
+ * Shows the page
+ */
+ public function show() {
$out = $this->getOutput();
if ( !$this->getUser()->isAllowed( 'abusefilter-modify' ) ) {
$out->addWikiMsg( 'abusefilter-edit-notallowed' );
diff --git a/AbuseFilter/includes/Views/AbuseFilterViewList.php b/AbuseFilter/includes/Views/AbuseFilterViewList.php
index daecf8d7..ad92ad6c 100644
--- a/AbuseFilter/includes/Views/AbuseFilterViewList.php
+++ b/AbuseFilter/includes/Views/AbuseFilterViewList.php
@@ -4,48 +4,76 @@
* The default view used in Special:AbuseFilter
*/
class AbuseFilterViewList extends AbuseFilterView {
- function show() {
- global $wgAbuseFilterCentralDB, $wgAbuseFilterIsCentral;
-
+ /**
+ * Shows the page
+ */
+ public function show() {
$out = $this->getOutput();
$request = $this->getRequest();
+ $config = $this->getConfig();
- // Status info...
+ // Show filter performance statistics
$this->showStatus();
$out->addWikiMsg( 'abusefilter-intro' );
// New filter button
if ( $this->canEdit() ) {
- $title = $this->getTitle( 'new' );
- $link = $this->linkRenderer->makeLink( $title, $this->msg( 'abusefilter-new' )->text() );
- $links = Xml::tags( 'p', null, $link ) . "\n";
- $out->addHTML( $links );
+ $out->enableOOUI();
+ $link = new OOUI\ButtonWidget( [
+ 'label' => $this->msg( 'abusefilter-new' )->text(),
+ 'href' => $this->getTitle( 'new' )->getFullURL(),
+ ] );
+ $out->addHTML( $link );
}
- // Options.
$conds = [];
$deleted = $request->getVal( 'deletedfilters' );
- $hidedisabled = $request->getBool( 'hidedisabled' );
+ $furtherOptions = $request->getArray( 'furtheroptions', [] );
+ // Backward compatibility with old links
+ if ( $request->getBool( 'hidedisabled' ) ) {
+ $furtherOptions[] = 'hidedisabled';
+ }
+ if ( $request->getBool( 'hideprivate' ) ) {
+ $furtherOptions[] = 'hideprivate';
+ }
$defaultscope = 'all';
- if ( isset( $wgAbuseFilterCentralDB ) && !$wgAbuseFilterIsCentral ) {
+ if ( $config->get( 'AbuseFilterCentralDB' ) !== null
+ && !$config->get( 'AbuseFilterIsCentral' ) ) {
// Show on remote wikis as default only local filters
$defaultscope = 'local';
}
$scope = $request->getVal( 'rulescope', $defaultscope );
+ $searchEnabled = $this->canViewPrivate() && !(
+ $config->get( 'AbuseFilterCentralDB' ) !== null &&
+ !$config->get( 'AbuseFilterIsCentral' ) &&
+ $scope == 'global' );
+
+ if ( $searchEnabled ) {
+ $querypattern = $request->getVal( 'querypattern' );
+ $searchmode = $request->getVal( 'searchoption', 'LIKE' );
+ } else {
+ $querypattern = '';
+ $searchmode = '';
+ }
+
if ( $deleted == 'show' ) {
- # Nothing
+ // Nothing
} elseif ( $deleted == 'only' ) {
$conds['af_deleted'] = 1;
- } else { # hide, or anything else.
+ } else {
+ // hide, or anything else.
$conds['af_deleted'] = 0;
$deleted = 'hide';
}
- if ( $hidedisabled ) {
+ if ( in_array( 'hidedisabled', $furtherOptions ) ) {
$conds['af_deleted'] = 0;
$conds['af_enabled'] = 1;
}
+ if ( in_array( 'hideprivate', $furtherOptions ) ) {
+ $conds['af_hidden'] = 0;
+ }
if ( $scope == 'local' ) {
$conds['af_global'] = 0;
@@ -53,123 +81,206 @@ class AbuseFilterViewList extends AbuseFilterView {
$conds['af_global'] = 1;
}
- $this->showList( $conds, compact( 'deleted', 'hidedisabled', 'scope' ) );
- }
-
- function showList( $conds = [ 'af_deleted' => 0 ], $optarray = [] ) {
- global $wgAbuseFilterCentralDB, $wgAbuseFilterIsCentral;
+ $dbr = wfGetDB( DB_REPLICA );
+
+ if ( $querypattern !== '' ) {
+ if ( $searchmode !== 'LIKE' ) {
+ // Check regex pattern validity
+ Wikimedia\suppressWarnings();
+ $validreg = preg_match( '/' . $querypattern . '/', null );
+ Wikimedia\restoreWarnings();
+
+ if ( $validreg === false ) {
+ $out->addHTML(
+ Xml::tags(
+ 'p',
+ null,
+ Html::errorBox( $this->msg( 'abusefilter-list-regexerror' )->parse() )
+ )
+ );
+ $this->showList(
+ [ 'af_deleted' => 0 ],
+ compact(
+ 'deleted',
+ 'furtherOptions',
+ 'querypattern',
+ 'searchmode',
+ 'scope',
+ 'searchEnabled'
+ )
+ );
+ return;
+ }
+ if ( $searchmode === 'RLIKE' ) {
+ $conds[] = 'af_pattern RLIKE ' .
+ $dbr->addQuotes( $querypattern );
+ } else {
+ $conds[] = 'LOWER( CAST( af_pattern AS char ) ) RLIKE ' .
+ strtolower( $dbr->addQuotes( $querypattern ) );
+ }
+ } else {
+ // Build like query escaping tokens and encapsulating in % to search everywhere
+ $conds[] = 'LOWER( CAST( af_pattern AS char ) ) ' .
+ $dbr->buildLike(
+ $dbr->anyString(),
+ strtolower( $querypattern ),
+ $dbr->anyString()
+ );
+ }
+ }
- $output = '';
- $output .= Xml::element( 'h2', null,
- $this->msg( 'abusefilter-list' )->parse() );
+ $this->showList(
+ $conds,
+ compact(
+ 'deleted',
+ 'furtherOptions',
+ 'querypattern',
+ 'searchmode',
+ 'scope',
+ 'searchEnabled'
+ )
+ );
+ }
- $pager = new AbuseFilterPager( $this, $conds, $this->linkRenderer );
+ /**
+ * @param array $conds
+ * @param array $optarray
+ */
+ public function showList( $conds = [ 'af_deleted' => 0 ], $optarray = [] ) {
+ $config = $this->getConfig();
+ $this->getOutput()->addHTML(
+ Xml::tags( 'h2', null, $this->msg( 'abusefilter-list' )->parse() )
+ );
$deleted = $optarray['deleted'];
- $hidedisabled = $optarray['hidedisabled'];
+ $furtherOptions = $optarray['furtherOptions'];
$scope = $optarray['scope'];
-
- # Options form
- $fields = [];
- $fields['abusefilter-list-options-deleted'] =
- Xml::radioLabel(
- $this->msg( 'abusefilter-list-options-deleted-show' )->text(),
- 'deletedfilters',
- 'show',
- 'mw-abusefilter-deletedfilters-show',
- $deleted == 'show'
- ) .
- Xml::radioLabel(
- $this->msg( 'abusefilter-list-options-deleted-hide' )->text(),
- 'deletedfilters',
- 'hide',
- 'mw-abusefilter-deletedfilters-hide',
- $deleted == 'hide'
- ) .
- Xml::radioLabel(
- $this->msg( 'abusefilter-list-options-deleted-only' )->text(),
- 'deletedfilters',
- 'only',
- 'mw-abusefilter-deletedfilters-only',
- $deleted == 'only'
+ $searchEnabled = $optarray['searchEnabled'];
+ $querypattern = $optarray['querypattern'];
+ $searchmode = $optarray['searchmode'];
+
+ if (
+ $config->get( 'AbuseFilterCentralDB' ) !== null
+ && !$config->get( 'AbuseFilterIsCentral' )
+ && $scope == 'global'
+ ) {
+ $pager = new GlobalAbuseFilterPager(
+ $this,
+ $conds,
+ $this->linkRenderer
+ );
+ } else {
+ $pager = new AbuseFilterPager(
+ $this,
+ $conds,
+ $this->linkRenderer,
+ [ $querypattern, $searchmode ]
);
+ }
- if ( isset( $wgAbuseFilterCentralDB ) ) {
- $fields['abusefilter-list-options-scope'] =
- Xml::radioLabel(
- $this->msg( 'abusefilter-list-options-scope-local' )->text(),
- 'rulescope',
- 'local',
- 'mw-abusefilter-rulescope-local',
- $scope == 'local'
- ) .
- Xml::radioLabel(
- $this->msg( 'abusefilter-list-options-scope-global' )->text(),
- 'rulescope',
- 'global',
- 'mw-abusefilter-rulescope-global',
- $scope == 'global'
- );
+ // Options form
+ $formDescriptor = [];
+ $formDescriptor['deletedfilters'] = [
+ 'name' => 'deletedfilters',
+ 'type' => 'radio',
+ 'flatlist' => true,
+ 'label-message' => 'abusefilter-list-options-deleted',
+ 'options-messages' => [
+ 'abusefilter-list-options-deleted-show' => 'show',
+ 'abusefilter-list-options-deleted-hide' => 'hide',
+ 'abusefilter-list-options-deleted-only' => 'only',
+ ],
+ 'default' => $deleted,
+ ];
- if ( $wgAbuseFilterIsCentral ) {
+ if ( $config->get( 'AbuseFilterCentralDB' ) !== null ) {
+ $optionsMsg = [
+ 'abusefilter-list-options-scope-local' => 'local',
+ 'abusefilter-list-options-scope-global' => 'global',
+ ];
+ if ( $config->get( 'AbuseFilterIsCentral' ) ) {
// For central wiki: add third scope option
- $fields['abusefilter-list-options-scope'] .=
- Xml::radioLabel(
- $this->msg( 'abusefilter-list-options-scope-all' )->text(),
- 'rulescope',
- 'all',
- 'mw-abusefilter-rulescope-all',
- $scope == 'all'
- );
+ $optionsMsg['abusefilter-list-options-scope-all'] = 'all';
}
+ $formDescriptor['rulescope'] = [
+ 'name' => 'rulescope',
+ 'type' => 'radio',
+ 'flatlist' => true,
+ 'label-message' => 'abusefilter-list-options-scope',
+ 'options-messages' => $optionsMsg,
+ 'default' => $scope,
+ ];
}
- $fields['abusefilter-list-options-disabled'] =
- Xml::checkLabel(
- $this->msg( 'abusefilter-list-options-hidedisabled' )->text(),
- 'hidedisabled',
- 'mw-abusefilter-disabledfilters-hide',
- $hidedisabled
- );
- $fields['abusefilter-list-limit'] = $pager->getLimitSelect();
-
- $options = Xml::buildForm( $fields, 'abusefilter-list-options-submit' );
- $options .= Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() );
- $options = Xml::tags( 'form',
- [
- 'method' => 'get',
- 'action' => $this->getTitle()->getFullURL()
+ $formDescriptor['furtheroptions'] = [
+ 'name' => 'furtheroptions',
+ 'type' => 'multiselect',
+ 'label-message' => 'abusefilter-list-options-further-options',
+ 'flatlist' => true,
+ 'options' => [
+ $this->msg( 'abusefilter-list-options-hideprivate' )->parse() => 'hideprivate',
+ $this->msg( 'abusefilter-list-options-hidedisabled' )->parse() => 'hidedisabled',
],
- $options
- );
- $options = Xml::fieldset( $this->msg( 'abusefilter-list-options' )->text(), $options );
-
- $output .= $options;
+ 'default' => $furtherOptions
+ ];
- if ( isset( $wgAbuseFilterCentralDB ) && !$wgAbuseFilterIsCentral && $scope == 'global' ) {
- $globalPager = new GlobalAbuseFilterPager( $this, $conds, $this->linkRenderer );
- $output .=
- $globalPager->getNavigationBar() .
- $globalPager->getBody() .
- $globalPager->getNavigationBar();
- } else {
- $output .=
- $pager->getNavigationBar() .
- $pager->getBody() .
- $pager->getNavigationBar();
+ // ToDo: Since this is only for saving space, we should convert it to use a 'hide-if'
+ if ( $searchEnabled ) {
+ $formDescriptor['querypattern'] = [
+ 'name' => 'querypattern',
+ 'type' => 'text',
+ 'label-message' => 'abusefilter-list-options-searchfield',
+ 'placeholder' => $this->msg( 'abusefilter-list-options-searchpattern' )->text(),
+ 'default' => $querypattern
+ ];
+
+ $formDescriptor['searchoption'] = [
+ 'name' => 'searchoption',
+ 'type' => 'radio',
+ 'flatlist' => true,
+ 'label-message' => 'abusefilter-list-options-searchoptions',
+ 'options-messages' => [
+ 'abusefilter-list-options-search-like' => 'LIKE',
+ 'abusefilter-list-options-search-rlike' => 'RLIKE',
+ 'abusefilter-list-options-search-irlike' => 'IRLIKE',
+ ],
+ 'default' => $searchmode
+ ];
}
- $this->getOutput()->addHTML( $output );
- }
+ $formDescriptor['limit'] = [
+ 'name' => 'limit',
+ 'type' => 'select',
+ 'label-message' => 'abusefilter-list-limit',
+ 'options' => $pager->getLimitSelectList(),
+ 'default' => $pager->getLimit(),
+ ];
- function showStatus() {
- global $wgAbuseFilterConditionLimit, $wgAbuseFilterValidGroups;
+ HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() )
+ ->addHiddenField( 'title', $this->getTitle()->getPrefixedDBkey() )
+ ->setAction( $this->getTitle()->getFullURL() )
+ ->setWrapperLegendMsg( 'abusefilter-list-options' )
+ ->setSubmitTextMsg( 'abusefilter-list-options-submit' )
+ ->setMethod( 'get' )
+ ->prepareForm()
+ ->displayForm( false );
+
+ $this->getOutput()->addHTML(
+ $pager->getNavigationBar() .
+ $pager->getBody() .
+ $pager->getNavigationBar()
+ );
+ }
+ /**
+ * Show stats
+ */
+ public function showStatus() {
$stash = ObjectCache::getMainStashInstance();
$overflow_count = (int)$stash->get( AbuseFilter::filterLimitReachedKey() );
$match_count = (int)$stash->get( AbuseFilter::filterMatchesKey() );
$total_count = 0;
- foreach ( $wgAbuseFilterValidGroups as $group ) {
+ foreach ( $this->getConfig()->get( 'AbuseFilterValidGroups' ) as $group ) {
$total_count += (int)$stash->get( AbuseFilter::filterUsedKey( $group ) );
}
@@ -182,7 +293,7 @@ class AbuseFilterViewList extends AbuseFilterView {
$total_count,
$overflow_count,
$overflow_percent,
- $wgAbuseFilterConditionLimit,
+ $this->getConfig()->get( 'AbuseFilterConditionLimit' ),
$match_count,
$match_percent
)->parse();
@@ -192,255 +303,3 @@ class AbuseFilterViewList extends AbuseFilterView {
}
}
}
-
-/**
- * Class to build paginated filter list
- */
-// Probably no need to autoload this class, as it will only be called from the class above.
-class AbuseFilterPager extends TablePager {
-
- /**
- * @var \MediaWiki\Linker\LinkRenderer
- */
- protected $linkRenderer;
-
- function __construct( $page, $conds, $linkRenderer ) {
- $this->mPage = $page;
- $this->mConds = $conds;
- $this->linkRenderer = $linkRenderer;
- parent::__construct( $this->mPage->getContext() );
- }
-
- function getQueryInfo() {
- return [
- 'tables' => [ 'abuse_filter' ],
- 'fields' => [
- 'af_id',
- 'af_enabled',
- 'af_deleted',
- 'af_global',
- 'af_public_comments',
- 'af_hidden',
- 'af_hit_count',
- 'af_timestamp',
- 'af_user_text',
- 'af_user',
- 'af_actions',
- 'af_group',
- ],
- 'conds' => $this->mConds,
- ];
- }
-
- function getFieldNames() {
- static $headers = null;
-
- if ( !empty( $headers ) ) {
- return $headers;
- }
-
- $headers = [
- 'af_id' => 'abusefilter-list-id',
- 'af_public_comments' => 'abusefilter-list-public',
- 'af_actions' => 'abusefilter-list-consequences',
- 'af_enabled' => 'abusefilter-list-status',
- 'af_timestamp' => 'abusefilter-list-lastmodified',
- 'af_hidden' => 'abusefilter-list-visibility',
- ];
-
- if ( $this->mPage->getUser()->isAllowed( 'abusefilter-log-detail' ) ) {
- $headers['af_hit_count'] = 'abusefilter-list-hitcount';
- }
-
- global $wgAbuseFilterValidGroups;
- if ( count( $wgAbuseFilterValidGroups ) > 1 ) {
- $headers['af_group'] = 'abusefilter-list-group';
- }
-
- foreach ( $headers as &$msg ) {
- $msg = $this->msg( $msg )->text();
- }
-
- return $headers;
- }
-
- function formatValue( $name, $value ) {
- $lang = $this->getLanguage();
- $row = $this->mCurrentRow;
-
- switch ( $name ) {
- case 'af_id':
- return $this->linkRenderer->makeLink(
- SpecialPage::getTitleFor( 'AbuseFilter', intval( $value ) ),
- $lang->formatNum( intval( $value ) )
- );
- case 'af_public_comments':
- return $this->linkRenderer->makeLink(
- SpecialPage::getTitleFor( 'AbuseFilter', intval( $row->af_id ) ),
- $value
- );
- case 'af_actions':
- $actions = explode( ',', $value );
- $displayActions = [];
- foreach ( $actions as $action ) {
- $displayActions[] = AbuseFilter::getActionDisplay( $action );
- }
- return htmlspecialchars( $lang->commaList( $displayActions ) );
- case 'af_enabled':
- $statuses = [];
- if ( $row->af_deleted ) {
- $statuses[] = $this->msg( 'abusefilter-deleted' )->parse();
- } elseif ( $row->af_enabled ) {
- $statuses[] = $this->msg( 'abusefilter-enabled' )->parse();
- } else {
- $statuses[] = $this->msg( 'abusefilter-disabled' )->parse();
- }
-
- global $wgAbuseFilterIsCentral;
- if ( $row->af_global && $wgAbuseFilterIsCentral ) {
- $statuses[] = $this->msg( 'abusefilter-status-global' )->parse();
- }
-
- return $lang->commaList( $statuses );
- case 'af_hidden':
- $msg = $value ? 'abusefilter-hidden' : 'abusefilter-unhidden';
- return $this->msg( $msg )->parse();
- case 'af_hit_count':
- if ( SpecialAbuseLog::canSeeDetails( $row->af_id, $row->af_hidden ) ) {
- $count_display = $this->msg( 'abusefilter-hitcount' )
- ->numParams( $value )->parse();
- $link = $this->linkRenderer->makeKnownLink(
- SpecialPage::getTitleFor( 'AbuseLog' ),
- $count_display,
- [],
- [ 'wpSearchFilter' => $row->af_id ]
- );
- } else {
- $link = "";
- }
- return $link;
- case 'af_timestamp':
- $userLink =
- Linker::userLink(
- $row->af_user,
- $row->af_user_text
- ) .
- Linker::userToolLinks(
- $row->af_user,
- $row->af_user_text
- );
- $user = $row->af_user_text;
- return $this->msg( 'abusefilter-edit-lastmod-text' )
- ->rawParams( $lang->timeanddate( $value, true ),
- $userLink,
- $lang->date( $value, true ),
- $lang->time( $value, true ),
- $user
- )->parse();
- case 'af_group':
- return AbuseFilter::nameGroup( $value );
- break;
- default:
- throw new MWException( "Unknown row type $name!" );
- }
- }
-
- function getDefaultSort() {
- return 'af_id';
- }
-
- function getRowClass( $row ) {
- if ( $row->af_enabled ) {
- return 'mw-abusefilter-list-enabled';
- } elseif ( $row->af_deleted ) {
- return 'mw-abusefilter-list-deleted';
- } else {
- return 'mw-abusefilter-list-disabled';
- }
- }
-
- function isFieldSortable( $name ) {
- $sortable_fields = [
- 'af_id',
- 'af_enabled',
- 'af_throttled',
- 'af_user_text',
- 'af_timestamp',
- 'af_hidden',
- 'af_group',
- ];
- if ( $this->mPage->getUser()->isAllowed( 'abusefilter-log-detail' ) ) {
- $sortable_fields[] = 'af_hit_count';
- }
- return in_array( $name, $sortable_fields );
- }
-}
-
-/**
- * Class to build paginated filter list for wikis using global abuse filters
- */
-class GlobalAbuseFilterPager extends AbuseFilterPager {
- function __construct( $page, $conds, $linkRenderer ) {
- parent::__construct( $page, $conds, $linkRenderer );
- global $wgAbuseFilterCentralDB;
- $this->mDb = wfGetDB( DB_REPLICA, [], $wgAbuseFilterCentralDB );
- }
-
- function formatValue( $name, $value ) {
- $lang = $this->getLanguage();
- $row = $this->mCurrentRow;
-
- switch ( $name ) {
- case 'af_id':
- return $lang->formatNum( intval( $value ) );
- case 'af_public_comments':
- return $this->getOutput()->parseInline( $value );
- case 'af_actions':
- $actions = explode( ',', $value );
- $displayActions = [];
- foreach ( $actions as $action ) {
- $displayActions[] = AbuseFilter::getActionDisplay( $action );
- }
- return htmlspecialchars( $lang->commaList( $displayActions ) );
- case 'af_enabled':
- $statuses = [];
- if ( $row->af_deleted ) {
- $statuses[] = $this->msg( 'abusefilter-deleted' )->parse();
- } elseif ( $row->af_enabled ) {
- $statuses[] = $this->msg( 'abusefilter-enabled' )->parse();
- } else {
- $statuses[] = $this->msg( 'abusefilter-disabled' )->parse();
- }
- if ( $row->af_global ) {
- $statuses[] = $this->msg( 'abusefilter-status-global' )->parse();
- }
-
- return $lang->commaList( $statuses );
- case 'af_hidden':
- $msg = $value ? 'abusefilter-hidden' : 'abusefilter-unhidden';
- return $this->msg( $msg, 'parseinline' )->parse();
- case 'af_hit_count':
- // If the rule is hidden, don't show it, even to priviledged local admins
- if ( $row->af_hidden ) {
- return '';
- }
- return $this->msg( 'abusefilter-hitcount' )->numParams( $value )->parse();
- case 'af_timestamp':
- $user = $row->af_user_text;
- return $this->msg(
- 'abusefilter-edit-lastmod-text',
- $lang->timeanddate( $value, true ),
- $user,
- $lang->date( $value, true ),
- $lang->time( $value, true ),
- $user
- )->parse();
- case 'af_group':
- // If this is global, local name probably doesn't exist, but try
- return AbuseFilter::nameGroup( $value );
- break;
- default:
- throw new MWException( "Unknown row type $name!" );
- }
- }
-}
diff --git a/AbuseFilter/includes/Views/AbuseFilterViewRevert.php b/AbuseFilter/includes/Views/AbuseFilterViewRevert.php
index 1e8c77b0..38a0d073 100644
--- a/AbuseFilter/includes/Views/AbuseFilterViewRevert.php
+++ b/AbuseFilter/includes/Views/AbuseFilterViewRevert.php
@@ -1,10 +1,14 @@
<?php
class AbuseFilterViewRevert extends AbuseFilterView {
- public $origPeriodStart, $origPeriodEnd, $mPeriodStart, $mPeriodEnd,
- $mReason;
+ public $origPeriodStart, $origPeriodEnd, $mPeriodStart, $mPeriodEnd;
+ public $mReason;
- function show() {
+ /**
+ * Shows the page
+ */
+ public function show() {
+ $lang = $this->getLanguage();
$filter = $this->mPage->mFilter;
$user = $this->getUser();
@@ -20,32 +24,50 @@ class AbuseFilterViewRevert extends AbuseFilterView {
return;
}
- $out->addWikiMsg( 'abusefilter-revert-intro', $filter );
- $out->setPageTitle( $this->msg( 'abusefilter-revert-title', $filter ) );
-
- // First, the search form.
- $searchFields = [];
- $searchFields['abusefilter-revert-filter'] =
- Xml::element( 'strong', null, $filter );
- $searchFields['abusefilter-revert-periodstart'] =
- Xml::input( 'wpPeriodStart', 45, $this->origPeriodStart );
- $searchFields['abusefilter-revert-periodend'] =
- Xml::input( 'wpPeriodEnd', 45, $this->origPeriodEnd );
- $searchForm = Xml::buildForm( $searchFields, 'abusefilter-revert-search' );
- $searchForm .= "\n" . Html::hidden( 'submit', 1 );
- $searchForm =
- Xml::tags(
- 'form',
- [
- 'action' => $this->getTitle( "revert/$filter" )->getLocalURL(),
- 'method' => 'post'
- ],
- $searchForm
+ $out->addWikiMsg( 'abusefilter-revert-intro', Message::numParam( $filter ) );
+ $out->setPageTitle( $this->msg( 'abusefilter-revert-title' )->numParams( $filter ) );
+
+ // First, the search form. Limit dates to avoid huge queries
+ $RCMaxAge = $this->getConfig()->get( 'RCMaxAge' );
+ $min = wfTimestamp( TS_ISO_8601, time() - $RCMaxAge );
+ $max = wfTimestampNow();
+ $filterLink =
+ $this->linkRenderer->makeLink(
+ SpecialPage::getTitleFor( 'AbuseFilter', intval( $filter ) ),
+ $lang->formatNum( intval( $filter ) )
);
- $searchForm =
- Xml::fieldset( $this->msg( 'abusefilter-revert-search-legend' )->text(), $searchForm );
-
- $out->addHTML( $searchForm );
+ $searchFields = [];
+ $searchFields['filterid'] = [
+ 'type' => 'info',
+ 'default' => $filterLink,
+ 'raw' => true,
+ 'label-message' => 'abusefilter-revert-filter'
+ ];
+ $searchFields['periodstart'] = [
+ 'type' => 'datetime',
+ 'name' => 'wpPeriodStart',
+ 'default' => $this->origPeriodStart,
+ 'label-message' => 'abusefilter-revert-periodstart',
+ 'min' => $min,
+ 'max' => $max
+ ];
+ $searchFields['periodend'] = [
+ 'type' => 'datetime',
+ 'name' => 'wpPeriodEnd',
+ 'default' => $this->origPeriodEnd,
+ 'label-message' => 'abusefilter-revert-periodend',
+ 'min' => $min,
+ 'max' => $max
+ ];
+
+ HTMLForm::factory( 'ooui', $searchFields, $this->getContext() )
+ ->addHiddenField( 'submit', 1 )
+ ->setAction( $this->getTitle( "revert/$filter" )->getLocalURL() )
+ ->setWrapperLegendMsg( 'abusefilter-revert-search-legend' )
+ ->setSubmitTextMsg( 'abusefilter-revert-search' )
+ ->setMethod( 'post' )
+ ->prepareForm()
+ ->displayForm( false );
if ( $this->mSubmit ) {
// Add a summary of everything that will be reversed.
@@ -53,7 +75,6 @@ class AbuseFilterViewRevert extends AbuseFilterView {
// Look up all of them.
$results = $this->doLookup();
- $lang = $this->getLanguage();
$list = [];
foreach ( $results as $result ) {
@@ -62,12 +83,17 @@ class AbuseFilterViewRevert extends AbuseFilterView {
$result['actions'] );
$msg = $this->msg( 'abusefilter-revert-preview-item' )
- ->rawParams(
- $lang->timeanddate( $result['timestamp'], true ),
- Linker::userLink( $result['userid'], $result['user'] ),
- $result['action'],
- $this->linkRenderer->makeLink( $result['title'] ),
- $lang->commaList( $displayActions ),
+ ->params(
+ $lang->timeanddate( $result['timestamp'], true )
+ )->rawParams(
+ Linker::userLink( $result['userid'], $result['user'] )
+ )->params(
+ $result['action']
+ )->rawParams(
+ $this->linkRenderer->makeLink( $result['title'] )
+ )->params(
+ $lang->commaList( $displayActions )
+ )->rawParams(
$this->linkRenderer->makeLink(
SpecialPage::getTitleFor( 'AbuseLog' ),
$this->msg( 'abusefilter-log-detailslink' )->text(),
@@ -81,30 +107,48 @@ class AbuseFilterViewRevert extends AbuseFilterView {
$out->addHTML( Xml::tags( 'ul', null, implode( "\n", $list ) ) );
// Add a button down the bottom.
- $confirmForm =
- Html::hidden( 'editToken', $user->getEditToken( "abusefilter-revert-$filter" ) ) .
- Html::hidden( 'title', $this->getTitle( "revert/$filter" )->getPrefixedDBkey() ) .
- Html::hidden( 'wpPeriodStart', $this->origPeriodStart ) .
- Html::hidden( 'wpPeriodEnd', $this->origPeriodEnd ) .
- Xml::inputLabel(
- $this->msg( 'abusefilter-revert-reasonfield' )->text(),
- 'wpReason', 'wpReason', 45
- ) .
- "\n" .
- Xml::submitButton( $this->msg( 'abusefilter-revert-confirm' )->text() );
- $confirmForm = Xml::tags(
- 'form',
- [
- 'action' => $this->getTitle( "revert/$filter" )->getLocalURL(),
- 'method' => 'post'
- ],
- $confirmForm
- );
- $out->addHTML( $confirmForm );
+ $confirmForm = [];
+ $confirmForm['edittoken'] = [
+ 'type' => 'hidden',
+ 'name' => 'editToken',
+ 'default' => $user->getEditToken( "abusefilter-revert-$filter" )
+ ];
+ $confirmForm['title'] = [
+ 'type' => 'hidden',
+ 'name' => 'title',
+ 'default' => $this->getTitle( "revert/$filter" )->getPrefixedDBkey()
+ ];
+ $confirmForm['wpPeriodStart'] = [
+ 'type' => 'hidden',
+ 'name' => 'wpPeriodStart',
+ 'default' => $this->origPeriodStart
+ ];
+ $confirmForm['wpPeriodEnd'] = [
+ 'type' => 'hidden',
+ 'name' => 'wpPeriodEnd',
+ 'default' => $this->origPeriodEnd
+ ];
+ $confirmForm['reason'] = [
+ 'type' => 'text',
+ 'label-message' => 'abusefilter-revert-reasonfield',
+ 'name' => 'wpReason',
+ 'id' => 'wpReason',
+ ];
+ HTMLForm::factory( 'ooui', $confirmForm, $this->getContext() )
+ ->setAction( $this->getTitle( "revert/$filter" )->getLocalURL() )
+ ->setWrapperLegendMsg( 'abusefilter-revert-confirm-legend' )
+ ->setSubmitTextMsg( 'abusefilter-revert-confirm' )
+ ->setMethod( 'post' )
+ ->prepareForm()
+ ->displayForm( false );
+
}
}
- function doLookup() {
+ /**
+ * @return array
+ */
+ public function doLookup() {
$periodStart = $this->mPeriodStart;
$periodEnd = $this->mPeriodEnd;
$filter = $this->mPage->mFilter;
@@ -114,14 +158,26 @@ class AbuseFilterViewRevert extends AbuseFilterView {
$dbr = wfGetDB( DB_REPLICA );
if ( $periodStart ) {
- $conds[] = 'afl_timestamp>' . $dbr->addQuotes( $dbr->timestamp( $periodStart ) );
+ $conds[] = 'afl_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( $periodStart ) );
}
if ( $periodEnd ) {
- $conds[] = 'afl_timestamp<' . $dbr->addQuotes( $dbr->timestamp( $periodEnd ) );
+ $conds[] = 'afl_timestamp <= ' . $dbr->addQuotes( $dbr->timestamp( $periodEnd ) );
}
- // Database query.
- $res = $dbr->select( 'abuse_filter_log', '*', $conds, __METHOD__ );
+ // All but afl_filter, afl_ip, afl_deleted, afl_patrolled_by, afl_rev_id and afl_log_id
+ $selectFields = [
+ 'afl_id',
+ 'afl_user',
+ 'afl_user_text',
+ 'afl_action',
+ 'afl_actions',
+ 'afl_var_dump',
+ 'afl_timestamp',
+ 'afl_namespace',
+ 'afl_title',
+ 'afl_wiki',
+ ];
+ $res = $dbr->select( 'abuse_filter_log', $selectFields, $conds, __METHOD__ );
$results = [];
foreach ( $res as $row ) {
@@ -150,7 +206,10 @@ class AbuseFilterViewRevert extends AbuseFilterView {
return $results;
}
- function loadParameters() {
+ /**
+ * Loads parameters from request
+ */
+ public function loadParameters() {
$request = $this->getRequest();
$this->origPeriodStart = $request->getText( 'wpPeriodStart' );
@@ -161,7 +220,10 @@ class AbuseFilterViewRevert extends AbuseFilterView {
$this->mReason = $request->getVal( 'wpReason' );
}
- function attemptRevert() {
+ /**
+ * @return bool
+ */
+ public function attemptRevert() {
$filter = $this->mPage->mFilter;
$token = $this->getRequest()->getVal( 'editToken' );
if ( !$this->getUser()->matchEditToken( $token, "abusefilter-revert-$filter" ) ) {
@@ -175,22 +237,25 @@ class AbuseFilterViewRevert extends AbuseFilterView {
$this->revertAction( $action, $result );
}
}
- $this->getOutput()->addWikiMsg(
- 'abusefilter-revert-success',
- $filter,
- $this->getLanguage()->formatNum( $filter )
+ $this->getOutput()->wrapWikiMsg(
+ '<p class="success">$1</p>',
+ [
+ 'abusefilter-revert-success',
+ $filter,
+ $this->getLanguage()->formatNum( $filter )
+ ]
);
return true;
}
/**
- * @param $action string
- * @param $result array
+ * @param string $action
+ * @param array $result
* @return bool
* @throws MWException
*/
- function revertAction( $action, $result ) {
+ public function revertAction( $action, $result ) {
switch ( $action ) {
case 'block':
$block = Block::newFromTarget( $result['user'] );
@@ -216,8 +281,7 @@ class AbuseFilterViewRevert extends AbuseFilterView {
return true;
case 'degroup':
// Pull the user's groups from the vars.
- $oldGroups = $result['vars']['USER_GROUPS'];
- $oldGroups = explode( ',', $oldGroups );
+ $oldGroups = $result['vars']->getVar( 'user_groups' )->toNative();
$oldGroups = array_diff(
$oldGroups,
array_intersect( $oldGroups, User::getImplicitGroups() )
@@ -245,15 +309,21 @@ class AbuseFilterViewRevert extends AbuseFilterView {
$dbw->insert( 'user_groups', $rows, __METHOD__, [ 'IGNORE' ] );
$user->invalidateCache();
- $log = new LogPage( 'rights' );
- $log->addEntry( 'rights', $user->getUserPage(),
+ $logEntry = new ManualLogEntry( 'rights', 'rights' );
+ $logEntry->setTarget( $user->getUserPage() );
+ $logEntry->setPerformer( $this->getUser() );
+ $logEntry->setComment(
$this->msg(
'abusefilter-revert-reason',
$this->mPage->mFilter,
$this->mReason
- )->inContentLanguage()->text(),
- [ implode( ',', $currentGroups ), implode( ',', $newGroups ) ]
+ )->inContentLanguage()->text()
);
+ $logEntry->setParameters( [
+ '4::oldgroups' => $currentGroups,
+ '5::newgroups' => $newGroups
+ ] );
+ $logEntry->publish( $logEntry->insert() );
return true;
}
diff --git a/AbuseFilter/includes/Views/AbuseFilterViewTestBatch.php b/AbuseFilter/includes/Views/AbuseFilterViewTestBatch.php
index abc33fc6..168933ec 100644
--- a/AbuseFilter/includes/Views/AbuseFilterViewTestBatch.php
+++ b/AbuseFilter/includes/Views/AbuseFilterViewTestBatch.php
@@ -4,16 +4,19 @@ class AbuseFilterViewTestBatch extends AbuseFilterView {
// Hard-coded for now.
protected static $mChangeLimit = 100;
- public $mShowNegative, $mTestPeriodStart, $mTestPeriodEnd, $mTestPage,
- $mTestUser;
+ public $mShowNegative, $mTestPeriodStart, $mTestPeriodEnd, $mTestPage;
+ public $mTestUser, $mExcludeBots, $mTestAction;
- function show() {
+ /**
+ * Shows the page
+ */
+ public function show() {
$out = $this->getOutput();
AbuseFilter::disableConditionLimit();
- if ( !$this->getUser()->isAllowed( 'abusefilter-modify' ) ) {
- $out->addWikiMsg( 'abusefilter-mustbeeditor' );
+ if ( !$this->canViewPrivate() ) {
+ $out->addWikiMsg( 'abusefilter-mustviewprivateoredit' );
return;
}
@@ -21,56 +24,95 @@ class AbuseFilterViewTestBatch extends AbuseFilterView {
$out->setPageTitle( $this->msg( 'abusefilter-test' ) );
$out->addWikiMsg( 'abusefilter-test-intro', self::$mChangeLimit );
+ $out->enableOOUI();
$output = '';
- $output .= AbuseFilter::buildEditBox( $this->mFilter, 'wpTestFilter' ) . "\n";
$output .=
- Xml::inputLabel(
- $this->msg( 'abusefilter-test-load-filter' )->text(),
- 'wpInsertFilter',
- 'mw-abusefilter-load-filter',
- 10,
- ''
- ) .
- '&#160;' .
- Xml::element(
- 'input',
- [
- 'type' => 'button',
- 'value' => $this->msg( 'abusefilter-test-load' )->text(),
- 'id' => 'mw-abusefilter-load'
- ]
- );
+ $this->buildEditBox(
+ $this->mFilter,
+ 'wpTestFilter',
+ true,
+ true,
+ false
+ ) . "\n";
+
+ $output .= AbuseFilter::buildFilterLoader();
$output = Xml::tags( 'div', [ 'id' => 'mw-abusefilter-test-editor' ], $output );
- $output .= Xml::tags( 'p', null, Xml::checkLabel(
- $this->msg( 'abusefilter-test-shownegative' )->text(),
- 'wpShowNegative', 'wpShowNegative', $this->mShowNegative )
- );
-
- // Selectory stuff
- $selectFields = [];
- $selectFields['abusefilter-test-user'] = Xml::input( 'wpTestUser', 45, $this->mTestUser );
- $selectFields['abusefilter-test-period-start'] =
- Xml::input( 'wpTestPeriodStart', 45, $this->mTestPeriodStart );
- $selectFields['abusefilter-test-period-end'] =
- Xml::input( 'wpTestPeriodEnd', 45, $this->mTestPeriodEnd );
- $selectFields['abusefilter-test-page'] =
- Xml::input( 'wpTestPage', 45, $this->mTestPage );
-
- $output .= Xml::buildForm( $selectFields, 'abusefilter-test-submit' );
-
- $output .= Html::hidden( 'title', $this->getTitle( 'test' )->getPrefixedDBkey() );
- $output = Xml::tags( 'form',
- [
- 'action' => $this->getTitle( 'test' )->getLocalURL(),
- 'method' => 'post'
- ],
- $output
- );
-
- $output = Xml::fieldset( $this->msg( 'abusefilter-test-legend' )->text(), $output );
-
+ $RCMaxAge = $this->getConfig()->get( 'RCMaxAge' );
+ $min = wfTimestamp( TS_ISO_8601, time() - $RCMaxAge );
+ $max = wfTimestampNow();
+
+ // Search form
+ $formFields = [];
+ $formFields['wpTestAction'] = [
+ 'name' => 'wpTestAction',
+ 'type' => 'select',
+ 'label-message' => 'abusefilter-test-action',
+ 'options' => [
+ $this->msg( 'abusefilter-test-search-type-all' )->text() => 0,
+ $this->msg( 'abusefilter-test-search-type-edit' )->text() => 'edit',
+ $this->msg( 'abusefilter-test-search-type-move' )->text() => 'move',
+ $this->msg( 'abusefilter-test-search-type-delete' )->text() => 'delete',
+ $this->msg( 'abusefilter-test-search-type-createaccount' )->text() => 'createaccount'
+ // @ToDo: add 'upload' once T170249 is resolved
+ ]
+ ];
+ $formFields['wpTestUser'] = [
+ 'name' => 'wpTestUser',
+ 'type' => 'user',
+ 'ipallowed' => true,
+ 'label-message' => 'abusefilter-test-user',
+ 'default' => $this->mTestUser
+ ];
+ $formFields['wpExcludeBots'] = [
+ 'name' => 'wpExcludeBots',
+ 'type' => 'check',
+ 'label-message' => 'abusefilter-test-nobots',
+ 'default' => $this->mExcludeBots
+ ];
+ $formFields['wpTestPeriodStart'] = [
+ 'name' => 'wpTestPeriodStart',
+ 'type' => 'datetime',
+ 'label-message' => 'abusefilter-test-period-start',
+ 'default' => $this->mTestPeriodStart,
+ 'min' => $min,
+ 'max' => $max
+ ];
+ $formFields['wpTestPeriodEnd'] = [
+ 'name' => 'wpTestPeriodEnd',
+ 'type' => 'datetime',
+ 'label-message' => 'abusefilter-test-period-end',
+ 'default' => $this->mTestPeriodEnd,
+ 'min' => $min,
+ 'max' => $max
+ ];
+ $formFields['wpTestPage'] = [
+ 'name' => 'wpTestPage',
+ 'type' => 'title',
+ 'label-message' => 'abusefilter-test-page',
+ 'default' => $this->mTestPage,
+ 'creatable' => true,
+ 'required' => false
+ ];
+ $formFields['wpShowNegative'] = [
+ 'name' => 'wpShowNegative',
+ 'type' => 'check',
+ 'label-message' => 'abusefilter-test-shownegative',
+ 'selected' => $this->mShowNegative
+ ];
+
+ $htmlForm = HTMLForm::factory( 'ooui', $formFields, $this->getContext() )
+ ->addHiddenField( 'title', $this->getTitle( 'test' )->getPrefixedDBkey() )
+ ->setId( 'wpFilterForm' )
+ ->setWrapperLegendMsg( 'abusefilter-list-options' )
+ ->setAction( $this->getTitle( 'test' )->getLocalURL() )
+ ->setSubmitTextMsg( 'abusefilter-test-submit' )
+ ->setMethod( 'post' )
+ ->prepareForm()
+ ->getHTML( true );
+
+ $output = Xml::fieldset( $this->msg( 'abusefilter-test-legend' )->text(), $output . $htmlForm );
$out->addHTML( $output );
if ( $this->getRequest()->wasPosted() ) {
@@ -79,9 +121,9 @@ class AbuseFilterViewTestBatch extends AbuseFilterView {
}
/**
- * @fixme this is similar to AbuseFilterExaminePager::getQueryInfo
+ * Loads the revisions and checks the given syntax against them
*/
- function doTest() {
+ public function doTest() {
// Quick syntax check.
$out = $this->getOutput();
$result = AbuseFilter::checkSyntax( $this->mFilter );
@@ -92,7 +134,12 @@ class AbuseFilterViewTestBatch extends AbuseFilterView {
$dbr = wfGetDB( DB_REPLICA );
$conds = [];
- $conds['rc_user_text'] = $this->mTestUser;
+
+ if ( (string)$this->mTestUser !== '' ) {
+ $conds[] = ActorMigration::newMigration()->getWhere(
+ $dbr, 'rc_user', User::newFromName( $this->mTestUser, false )
+ )['conds'];
+ }
if ( $this->mTestPeriodStart ) {
$conds[] = 'rc_timestamp >= ' .
@@ -113,18 +160,28 @@ class AbuseFilterViewTestBatch extends AbuseFilterView {
}
}
- $conds[] = $this->buildTestConditions( $dbr );
+ $action = $this->mTestAction != '0' ? $this->mTestAction : false;
+ $conds[] = $this->buildTestConditions( $dbr, $action );
+
+ $conds = array_filter( $conds );
+
+ // To be added after filtering, otherwise it gets stripped
+ if ( $this->mExcludeBots ) {
+ $conds['rc_bot'] = 0;
+ }
// Get our ChangesList
- $changesList = new AbuseFilterChangesList( $this->getSkin() );
+ $changesList = new AbuseFilterChangesList( $this->getSkin(), $this->mFilter );
$output = $changesList->beginRecentChangesList();
+ $rcQuery = RecentChange::getQueryInfo();
$res = $dbr->select(
- 'recentchanges',
- RecentChange::selectFields(),
- array_filter( $conds ),
+ $rcQuery['tables'],
+ $rcQuery['fields'],
+ $conds,
__METHOD__,
- [ 'LIMIT' => self::$mChangeLimit, 'ORDER BY' => 'rc_timestamp desc' ]
+ [ 'LIMIT' => self::$mChangeLimit, 'ORDER BY' => 'rc_timestamp desc' ],
+ $rcQuery['joins']
);
$counter = 1;
@@ -141,7 +198,7 @@ class AbuseFilterViewTestBatch extends AbuseFilterView {
if ( $result || $this->mShowNegative ) {
// Stash result in RC item
$rc = RecentChange::newFromRow( $row );
- $rc->examineParams['testfilter'] = $this->mFilter;
+ /** @suppress PhanUndeclaredProperty for $rc->filterResult, which isn't a big deal */
$rc->filterResult = $result;
$rc->counter = $counter++;
$output .= $changesList->recentChangesLine( $rc, false );
@@ -153,7 +210,10 @@ class AbuseFilterViewTestBatch extends AbuseFilterView {
$out->addHTML( $output );
}
- function loadParameters() {
+ /**
+ * Loads parameters from request
+ */
+ public function loadParameters() {
$request = $this->getRequest();
$this->mFilter = $request->getText( 'wpTestFilter' );
@@ -162,6 +222,8 @@ class AbuseFilterViewTestBatch extends AbuseFilterView {
$this->mTestPeriodEnd = $request->getText( 'wpTestPeriodEnd' );
$this->mTestPeriodStart = $request->getText( 'wpTestPeriodStart' );
$this->mTestPage = $request->getText( 'wpTestPage' );
+ $this->mExcludeBots = $request->getBool( 'wpExcludeBots' );
+ $this->mTestAction = $request->getText( 'wpTestAction' );
if ( !$this->mFilter
&& count( $this->mParams ) > 1
@@ -176,15 +238,7 @@ class AbuseFilterViewTestBatch extends AbuseFilterView {
}
// Normalise username
- $userTitle = Title::newFromText( $testUsername );
-
- if ( $userTitle && $userTitle->getNamespace() == NS_USER ) {
- $this->mTestUser = $userTitle->getText(); // Allow User:Blah syntax.
- } elseif ( $userTitle ) {
- // Not sure of the value of prefixedText over text, but no need to munge unnecessarily.
- $this->mTestUser = $userTitle->getPrefixedText();
- } else {
- $this->mTestUser = null; // No user specified.
- }
+ $userTitle = Title::newFromText( $testUsername, NS_USER );
+ $this->mTestUser = $userTitle ? $userTitle->getText() : null;
}
}
diff --git a/AbuseFilter/includes/Views/AbuseFilterViewTools.php b/AbuseFilter/includes/Views/AbuseFilterViewTools.php
index c8625617..44ee0eb4 100644
--- a/AbuseFilter/includes/Views/AbuseFilterViewTools.php
+++ b/AbuseFilter/includes/Views/AbuseFilterViewTools.php
@@ -1,12 +1,16 @@
<?php
class AbuseFilterViewTools extends AbuseFilterView {
- function show() {
+ /**
+ * Shows the page
+ */
+ public function show() {
$out = $this->getOutput();
- $user = $this->getUser();
+ $out->enableOOUI();
+ $request = $this->getRequest();
- if ( !$user->isAllowed( 'abusefilter-modify' ) ) {
- $out->addWikiMsg( 'abusefilter-mustbeeditor' );
+ if ( !$this->canViewPrivate() ) {
+ $out->addWikiMsg( 'abusefilter-mustviewprivateoredit' );
return;
}
@@ -15,16 +19,21 @@ class AbuseFilterViewTools extends AbuseFilterView {
// Expression evaluator
$eval = '';
- $eval .= AbuseFilter::buildEditBox( '', 'wpTestExpr' );
-
- $eval .= Xml::tags( 'p', null,
- Xml::element( 'input',
- [
- 'type' => 'button',
- 'id' => 'mw-abusefilter-submitexpr',
- 'value' => $this->msg( 'abusefilter-tools-submitexpr' )->text() ]
- )
+ $eval .= $this->buildEditBox(
+ $request->getText( 'wpTestExpr' ),
+ 'wpTestExpr',
+ true,
+ false,
+ false
);
+
+ $eval .=
+ Xml::tags( 'p', null,
+ new OOUI\ButtonInputWidget( [
+ 'label' => $this->msg( 'abusefilter-tools-submitexpr' )->text(),
+ 'id' => 'mw-abusefilter-submitexpr'
+ ] )
+ );
$eval .= Xml::element( 'p', [ 'id' => 'mw-abusefilter-expr-result' ], ' ' );
$eval = Xml::fieldset( $this->msg( 'abusefilter-tools-expr' )->text(), $eval );
@@ -33,23 +42,21 @@ class AbuseFilterViewTools extends AbuseFilterView {
$out->addModules( 'ext.abuseFilter.tools' );
// Hacky little box to re-enable autoconfirmed if it got disabled
- $rac = '';
- $rac .= Xml::inputLabel(
- $this->msg( 'abusefilter-tools-reautoconfirm-user' )->text(),
- 'wpReAutoconfirmUser',
- 'reautoconfirm-user',
- 45
- );
- $rac .= '&#160;';
- $rac .= Xml::element(
- 'input',
- [
- 'type' => 'button',
- 'id' => 'mw-abusefilter-reautoconfirmsubmit',
- 'value' => $this->msg( 'abusefilter-tools-reautoconfirm-submit' )->text()
- ]
- );
- $rac = Xml::fieldset( $this->msg( 'abusefilter-tools-reautoconfirm' )->text(), $rac );
- $out->addHTML( $rac );
+ $formDescriptor = [
+ 'RestoreAutoconfirmed' => [
+ 'label-message' => 'abusefilter-tools-reautoconfirm-user',
+ 'type' => 'user',
+ 'name' => 'wpReAutoconfirmUser',
+ 'id' => 'reautoconfirm-user',
+ 'infusable' => true
+ ],
+ ];
+ $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
+ $htmlForm->setWrapperLegendMsg( 'abusefilter-tools-reautoconfirm' )
+ ->setSubmitTextMsg( 'abusefilter-tools-reautoconfirm-submit' )
+ ->setSubmitName( 'wpReautoconfirmSubmit' )
+ ->setSubmitId( 'mw-abusefilter-reautoconfirmsubmit' )
+ ->prepareForm()
+ ->displayForm( false );
}
}
diff --git a/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php b/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php
index bcea726e..9d4fd8c3 100644
--- a/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php
+++ b/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php
@@ -1,12 +1,15 @@
<?php
class ApiAbuseFilterCheckMatch extends ApiBase {
+ /**
+ * @see ApiBase::execute
+ */
public function execute() {
$params = $this->extractRequestParams();
$this->requireOnlyOneParameter( $params, 'vars', 'rcid', 'logid' );
// "Anti-DoS"
- if ( !$this->getUser()->isAllowed( 'abusefilter-modify' ) ) {
+ if ( !$this->getUser()->isAllowedAny( 'abusefilter-modify', 'abusefilter-view-private' ) ) {
$this->dieWithError( 'apierror-abusefilter-canttest', 'permissiondenied' );
}
@@ -19,11 +22,14 @@ class ApiAbuseFilterCheckMatch extends ApiBase {
}
} elseif ( $params['rcid'] ) {
$dbr = wfGetDB( DB_REPLICA );
+ $rcQuery = RecentChange::getQueryInfo();
$row = $dbr->selectRow(
- 'recentchanges',
- RecentChange::selectFields(),
+ $rcQuery['tables'],
+ $rcQuery['fields'],
[ 'rc_id' => $params['rcid'] ],
- __METHOD__
+ __METHOD__,
+ [],
+ $rcQuery['joins']
);
if ( !$row ) {
@@ -35,7 +41,7 @@ class ApiAbuseFilterCheckMatch extends ApiBase {
$dbr = wfGetDB( DB_REPLICA );
$row = $dbr->selectRow(
'abuse_filter_log',
- '*',
+ 'afl_var_dump',
[ 'afl_id' => $params['logid'] ],
__METHOD__
);
@@ -63,6 +69,10 @@ class ApiAbuseFilterCheckMatch extends ApiBase {
);
}
+ /**
+ * @see ApiBase::getAllowedParams
+ * @return array
+ */
public function getAllowedParams() {
return [
'filter' => [
@@ -80,6 +90,7 @@ class ApiAbuseFilterCheckMatch extends ApiBase {
/**
* @see ApiBase::getExamplesMessages()
+ * @return array
*/
protected function getExamplesMessages() {
return [
diff --git a/AbuseFilter/includes/api/ApiAbuseFilterCheckSyntax.php b/AbuseFilter/includes/api/ApiAbuseFilterCheckSyntax.php
index b0ac3f73..213fb904 100644
--- a/AbuseFilter/includes/api/ApiAbuseFilterCheckSyntax.php
+++ b/AbuseFilter/includes/api/ApiAbuseFilterCheckSyntax.php
@@ -2,9 +2,12 @@
class ApiAbuseFilterCheckSyntax extends ApiBase {
+ /**
+ * @see ApiBase::execute
+ */
public function execute() {
// "Anti-DoS"
- if ( !$this->getUser()->isAllowed( 'abusefilter-modify' ) ) {
+ if ( !$this->getUser()->isAllowedAny( 'abusefilter-modify', 'abusefilter-view-private' ) ) {
$this->dieWithError( 'apierror-abusefilter-cantcheck', 'permissiondenied' );
}
@@ -26,6 +29,10 @@ class ApiAbuseFilterCheckSyntax extends ApiBase {
$this->getResult()->addValue( null, $this->getModuleName(), $r );
}
+ /**
+ * @see ApiBase::getAllowedParams
+ * @return array
+ */
public function getAllowedParams() {
return [
'filter' => [
@@ -36,6 +43,7 @@ class ApiAbuseFilterCheckSyntax extends ApiBase {
/**
* @see ApiBase::getExamplesMessages()
+ * @return array
*/
protected function getExamplesMessages() {
return [
diff --git a/AbuseFilter/includes/api/ApiAbuseFilterEvalExpression.php b/AbuseFilter/includes/api/ApiAbuseFilterEvalExpression.php
index 74fb0852..18701670 100644
--- a/AbuseFilter/includes/api/ApiAbuseFilterEvalExpression.php
+++ b/AbuseFilter/includes/api/ApiAbuseFilterEvalExpression.php
@@ -1,6 +1,9 @@
<?php
class ApiAbuseFilterEvalExpression extends ApiBase {
+ /**
+ * @see ApiBase::execute()
+ */
public function execute() {
$params = $this->extractRequestParams();
@@ -9,6 +12,10 @@ class ApiAbuseFilterEvalExpression extends ApiBase {
$this->getResult()->addValue( null, $this->getModuleName(), [ 'result' => $result ] );
}
+ /**
+ * @see ApiBase::getAllowedParams()
+ * @return array
+ */
public function getAllowedParams() {
return [
'expression' => [
@@ -19,6 +26,7 @@ class ApiAbuseFilterEvalExpression extends ApiBase {
/**
* @see ApiBase::getExamplesMessages()
+ * @return array
*/
protected function getExamplesMessages() {
return [
diff --git a/AbuseFilter/includes/api/ApiAbuseFilterUnblockAutopromote.php b/AbuseFilter/includes/api/ApiAbuseFilterUnblockAutopromote.php
index 5ceb17f8..195e72d3 100644
--- a/AbuseFilter/includes/api/ApiAbuseFilterUnblockAutopromote.php
+++ b/AbuseFilter/includes/api/ApiAbuseFilterUnblockAutopromote.php
@@ -1,6 +1,9 @@
<?php
class ApiAbuseFilterUnblockAutopromote extends ApiBase {
+ /**
+ * @see ApiBase::execute()
+ */
public function execute() {
$this->checkUserRightsAny( 'abusefilter-modify' );
@@ -10,7 +13,7 @@ class ApiAbuseFilterUnblockAutopromote extends ApiBase {
if ( $user === false ) {
$encParamName = $this->encodeParamName( 'user' );
$this->dieWithError(
- [ 'apierror-baduser', $encParamName, wfEscapeWikiText( $param['user'] ) ],
+ [ 'apierror-baduser', $encParamName, wfEscapeWikiText( $params['user'] ) ],
"baduser_{$encParamName}"
);
}
@@ -27,14 +30,26 @@ class ApiAbuseFilterUnblockAutopromote extends ApiBase {
$this->getResult()->addValue( null, $this->getModuleName(), $res );
}
+ /**
+ * @see ApiBase::mustBePosted()
+ * @return bool
+ */
public function mustBePosted() {
return true;
}
+ /**
+ * @see ApiBase::isWriteMode()
+ * @return bool
+ */
public function isWriteMode() {
return true;
}
+ /**
+ * @see ApiBase::getAllowedParams()
+ * @return array
+ */
public function getAllowedParams() {
return [
'user' => [
@@ -45,12 +60,17 @@ class ApiAbuseFilterUnblockAutopromote extends ApiBase {
];
}
+ /**
+ * @see ApiBase::needsToken()
+ * @return string
+ */
public function needsToken() {
return 'csrf';
}
/**
* @see ApiBase::getExamplesMessages()
+ * @return array
*/
protected function getExamplesMessages() {
return [
diff --git a/AbuseFilter/includes/api/ApiQueryAbuseFilters.php b/AbuseFilter/includes/api/ApiQueryAbuseFilters.php
index 79808125..cafe20d1 100644
--- a/AbuseFilter/includes/api/ApiQueryAbuseFilters.php
+++ b/AbuseFilter/includes/api/ApiQueryAbuseFilters.php
@@ -30,10 +30,17 @@
* @ingroup Extensions
*/
class ApiQueryAbuseFilters extends ApiQueryBase {
+ /**
+ * @param ApiQuery $query
+ * @param string $moduleName
+ */
public function __construct( $query, $moduleName ) {
parent::__construct( $query, $moduleName, 'abf' );
}
+ /**
+ * @see ApiQueryBase::execute()
+ */
public function execute() {
$user = $this->getUser();
$this->checkUserRightsAny( 'abusefilter-view' );
@@ -150,6 +157,10 @@ class ApiQueryAbuseFilters extends ApiQueryBase {
$result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'filter' );
}
+ /**
+ * @see ApiQueryBase::getAllowedParams()
+ * @return array
+ */
public function getAllowedParams() {
return [
'startid' => [
@@ -205,6 +216,7 @@ class ApiQueryAbuseFilters extends ApiQueryBase {
/**
* @see ApiBase::getExamplesMessages()
+ * @return array
*/
protected function getExamplesMessages() {
return [
diff --git a/AbuseFilter/includes/api/ApiQueryAbuseLog.php b/AbuseFilter/includes/api/ApiQueryAbuseLog.php
index b559b0c5..bf085318 100644
--- a/AbuseFilter/includes/api/ApiQueryAbuseLog.php
+++ b/AbuseFilter/includes/api/ApiQueryAbuseLog.php
@@ -30,10 +30,17 @@
* @ingroup Extensions
*/
class ApiQueryAbuseLog extends ApiQueryBase {
+ /**
+ * @param ApiQuery $query
+ * @param string $moduleName
+ */
public function __construct( $query, $moduleName ) {
parent::__construct( $query, $moduleName, 'afl' );
}
+ /**
+ * @see ApiQueryBase::execute()
+ */
public function execute() {
$user = $this->getUser();
$errors = $this->getTitle()->getUserPermissionsErrors(
@@ -49,7 +56,6 @@ class ApiQueryAbuseLog extends ApiQueryBase {
$fld_ids = isset( $prop['ids'] );
$fld_filter = isset( $prop['filter'] );
$fld_user = isset( $prop['user'] );
- $fld_ip = isset( $prop['ip'] );
$fld_title = isset( $prop['title'] );
$fld_action = isset( $prop['action'] );
$fld_details = isset( $prop['details'] );
@@ -57,10 +63,9 @@ class ApiQueryAbuseLog extends ApiQueryBase {
$fld_timestamp = isset( $prop['timestamp'] );
$fld_hidden = isset( $prop['hidden'] );
$fld_revid = isset( $prop['revid'] );
+ $isCentral = $this->getConfig()->get( 'AbuseFilterIsCentral' );
+ $fld_wiki = $isCentral && isset( $prop['wiki'] );
- if ( $fld_ip ) {
- $this->checkUserRightsAny( 'abusefilter-private' );
- }
if ( $fld_details ) {
$this->checkUserRightsAny( 'abusefilter-log-detail' );
}
@@ -90,11 +95,11 @@ class ApiQueryAbuseLog extends ApiQueryBase {
$this->addFields( 'afl_filter' );
$this->addFieldsIf( 'afl_id', $fld_ids );
$this->addFieldsIf( 'afl_user_text', $fld_user );
- $this->addFieldsIf( 'afl_ip', $fld_ip );
$this->addFieldsIf( [ 'afl_namespace', 'afl_title' ], $fld_title );
$this->addFieldsIf( 'afl_action', $fld_action );
$this->addFieldsIf( 'afl_var_dump', $fld_details );
$this->addFieldsIf( 'afl_actions', $fld_result );
+ $this->addFieldsIf( 'afl_wiki', $fld_wiki );
if ( $fld_filter ) {
$this->addTables( 'abuse_filter' );
@@ -105,6 +110,8 @@ class ApiQueryAbuseLog extends ApiQueryBase {
$this->addOption( 'LIMIT', $params['limit'] + 1 );
+ $this->addWhereIf( [ 'afl_id' => $params['logid'] ], isset( $params['logid'] ) );
+
$this->addWhereRange( 'afl_timestamp', $params['dir'], $params['start'], $params['end'] );
$db = $this->getDB();
@@ -135,7 +142,11 @@ class ApiQueryAbuseLog extends ApiQueryBase {
}
$this->addWhereIf( [ 'afl_filter' => $params['filter'] ], isset( $params['filter'] ) );
- $this->addWhereIf( $notDeletedCond, !SpecialAbuseLog::canSeeHidden( $user ) );
+ $this->addWhereIf( $notDeletedCond, !SpecialAbuseLog::canSeeHidden() );
+ if ( isset( $params['wiki'] ) ) {
+ // 'wiki' won't be set if $wgAbuseFilterIsCentral = false
+ $this->addWhereIf( [ 'afl_wiki' => $params['wiki'] ], $isCentral );
+ }
$title = $params['title'];
if ( !is_null( $title ) ) {
@@ -170,10 +181,7 @@ class ApiQueryAbuseLog extends ApiQueryBase {
$entry = [];
if ( $fld_ids ) {
$entry['id'] = intval( $row->afl_id );
- $entry['filter_id'] = '';
- if ( $canSeeDetails ) {
- $entry['filter_id'] = $row->afl_filter;
- }
+ $entry['filter_id'] = $canSeeDetails ? $row->afl_filter : '';
}
if ( $fld_filter ) {
$globalIndex = AbuseFilter::decodeGlobalName( $row->afl_filter );
@@ -186,8 +194,8 @@ class ApiQueryAbuseLog extends ApiQueryBase {
if ( $fld_user ) {
$entry['user'] = $row->afl_user_text;
}
- if ( $fld_ip ) {
- $entry['ip'] = $row->afl_ip;
+ if ( $fld_wiki ) {
+ $entry['wiki'] = $row->afl_wiki;
}
if ( $fld_title ) {
$title = Title::makeTitle( $row->afl_namespace, $row->afl_title );
@@ -200,10 +208,7 @@ class ApiQueryAbuseLog extends ApiQueryBase {
$entry['result'] = $row->afl_actions;
}
if ( $fld_revid && !is_null( $row->afl_rev_id ) ) {
- $entry['revid'] = '';
- if ( $canSeeDetails ) {
- $entry['revid'] = $row->afl_rev_id;
- }
+ $entry['revid'] = $canSeeDetails ? $row->afl_rev_id : '';
}
if ( $fld_timestamp ) {
$ts = new MWTimestamp( $row->afl_timestamp );
@@ -237,8 +242,15 @@ class ApiQueryAbuseLog extends ApiQueryBase {
$result->addIndexedTagName( [ 'query', $this->getModuleName() ], 'item' );
}
+ /**
+ * @see ApiQueryBase::getAllowedParams()
+ * @return array
+ */
public function getAllowedParams() {
- return [
+ $params = [
+ 'logid' => [
+ ApiBase::PARAM_TYPE => 'integer'
+ ],
'start' => [
ApiBase::PARAM_TYPE => 'timestamp'
],
@@ -256,6 +268,7 @@ class ApiQueryAbuseLog extends ApiQueryBase {
'user' => null,
'title' => null,
'filter' => [
+ ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_ISMULTI => true
],
'limit' => [
@@ -271,7 +284,6 @@ class ApiQueryAbuseLog extends ApiQueryBase {
'ids',
'filter',
'user',
- 'ip',
'title',
'action',
'details',
@@ -283,10 +295,19 @@ class ApiQueryAbuseLog extends ApiQueryBase {
ApiBase::PARAM_ISMULTI => true
]
];
+ if ( $this->getConfig()->get( 'AbuseFilterIsCentral' ) ) {
+ $params['wiki'] = [
+ ApiBase::PARAM_TYPE => 'string',
+ ];
+ $params['prop'][ApiBase::PARAM_DFLT] .= '|wiki';
+ $params['prop'][ApiBase::PARAM_TYPE][] = 'wiki';
+ }
+ return $params;
}
/**
* @see ApiBase::getExamplesMessages()
+ * @return array
*/
protected function getExamplesMessages() {
return [
diff --git a/AbuseFilter/includes/pagers/AbuseFilterExaminePager.php b/AbuseFilter/includes/pagers/AbuseFilterExaminePager.php
new file mode 100644
index 00000000..02b13755
--- /dev/null
+++ b/AbuseFilter/includes/pagers/AbuseFilterExaminePager.php
@@ -0,0 +1,82 @@
+<?php
+
+class AbuseFilterExaminePager extends ReverseChronologicalPager {
+ public $mChangesList, $mPage;
+
+ /**
+ * @param AbuseFilterViewExamine $page
+ * @param AbuseFilterChangesList $changesList
+ */
+ public function __construct( $page, $changesList ) {
+ parent::__construct();
+ $this->mChangesList = $changesList;
+ $this->mPage = $page;
+ }
+
+ /**
+ * @return array
+ */
+ public function getQueryInfo() {
+ $dbr = wfGetDB( DB_REPLICA );
+ $conds = [];
+
+ if ( (string)$this->mPage->mSearchUser !== '' ) {
+ $conds[] = ActorMigration::newMigration()->getWhere(
+ $dbr, 'rc_user', User::newFromName( $this->mPage->mSearchUser, false )
+ )['conds'];
+ }
+
+ $startTS = strtotime( $this->mPage->mSearchPeriodStart );
+ if ( $startTS ) {
+ $conds[] = 'rc_timestamp>=' . $dbr->addQuotes( $dbr->timestamp( $startTS ) );
+ }
+ $endTS = strtotime( $this->mPage->mSearchPeriodEnd );
+ if ( $endTS ) {
+ $conds[] = 'rc_timestamp<=' . $dbr->addQuotes( $dbr->timestamp( $endTS ) );
+ }
+
+ $conds[] = $this->mPage->buildTestConditions( $dbr );
+
+ $rcQuery = RecentChange::getQueryInfo();
+ $info = [
+ 'tables' => $rcQuery['tables'],
+ 'fields' => $rcQuery['fields'],
+ 'conds' => array_filter( $conds ),
+ 'options' => [ 'ORDER BY' => 'rc_timestamp DESC' ],
+ 'join_conds' => $rcQuery['joins'],
+ ];
+
+ return $info;
+ }
+
+ /**
+ * @param stdClass $row
+ * @return string
+ */
+ public function formatRow( $row ) {
+ $rc = RecentChange::newFromRow( $row );
+ $rc->counter = $this->mPage->mCounter++;
+ return $this->mChangesList->recentChangesLine( $rc, false );
+ }
+
+ /**
+ * @return string
+ */
+ public function getIndexField() {
+ return 'rc_id';
+ }
+
+ /**
+ * @return Title
+ */
+ public function getTitle() {
+ return $this->mPage->getTitle( 'examine' );
+ }
+
+ /**
+ * @return string
+ */
+ public function getEmptyBody() {
+ return $this->msg( 'abusefilter-examine-noresults' )->parseAsBlock();
+ }
+}
diff --git a/AbuseFilter/includes/pagers/AbuseFilterHistoryPager.php b/AbuseFilter/includes/pagers/AbuseFilterHistoryPager.php
new file mode 100644
index 00000000..265c97f1
--- /dev/null
+++ b/AbuseFilter/includes/pagers/AbuseFilterHistoryPager.php
@@ -0,0 +1,229 @@
+<?php
+
+use MediaWiki\Linker\LinkRenderer;
+
+class AbuseFilterHistoryPager extends TablePager {
+ public $mFilter, $mPage, $mUser;
+
+ protected $linkRenderer;
+ /**
+ * @param string $filter
+ * @param AbuseFilterViewHistory $page
+ * @param string $user User name
+ * @param LinkRenderer $linkRenderer
+ */
+ public function __construct( $filter, $page, $user, $linkRenderer ) {
+ $this->mFilter = $filter;
+ $this->mPage = $page;
+ $this->mUser = $user;
+ $this->mDefaultDirection = true;
+ $this->linkRenderer = $linkRenderer;
+ parent::__construct( $this->mPage->getContext() );
+ }
+
+ /**
+ * @see Pager::getFieldNames()
+ * @return array
+ */
+ public function getFieldNames() {
+ static $headers = null;
+
+ if ( !empty( $headers ) ) {
+ return $headers;
+ }
+
+ $headers = [
+ 'afh_timestamp' => 'abusefilter-history-timestamp',
+ 'afh_user_text' => 'abusefilter-history-user',
+ 'afh_public_comments' => 'abusefilter-history-public',
+ 'afh_flags' => 'abusefilter-history-flags',
+ 'afh_actions' => 'abusefilter-history-actions',
+ 'afh_id' => 'abusefilter-history-diff',
+ ];
+
+ if ( !$this->mFilter ) {
+ // awful hack
+ $headers = [ 'afh_filter' => 'abusefilter-history-filterid' ] + $headers;
+ unset( $headers['afh_comments'] );
+ }
+
+ foreach ( $headers as &$msg ) {
+ $msg = $this->msg( $msg )->text();
+ }
+
+ return $headers;
+ }
+
+ /**
+ * @param string $name
+ * @param string $value
+ * @return string
+ */
+ public function formatValue( $name, $value ) {
+ $lang = $this->getLanguage();
+
+ $row = $this->mCurrentRow;
+
+ switch ( $name ) {
+ case 'afh_filter':
+ $formatted = $this->linkRenderer->makeLink(
+ SpecialPage::getTitleFor( 'AbuseFilter', intval( $row->afh_filter ) ),
+ $lang->formatNum( $row->afh_filter )
+ );
+ break;
+ case 'afh_timestamp':
+ $title = SpecialPage::getTitleFor( 'AbuseFilter',
+ 'history/' . $row->afh_filter . '/item/' . $row->afh_id );
+ $formatted = $this->linkRenderer->makeLink(
+ $title,
+ $lang->timeanddate( $row->afh_timestamp, true )
+ );
+ break;
+ case 'afh_user_text':
+ $formatted =
+ Linker::userLink( $row->afh_user, $row->afh_user_text ) . ' ' .
+ Linker::userToolLinks( $row->afh_user, $row->afh_user_text );
+ break;
+ case 'afh_public_comments':
+ $formatted = htmlspecialchars( $value, ENT_QUOTES, 'UTF-8', false );
+ break;
+ case 'afh_flags':
+ $formatted = AbuseFilter::formatFlags( $value );
+ break;
+ case 'afh_actions':
+ $actions = unserialize( $value );
+
+ $display_actions = '';
+
+ foreach ( $actions as $action => $parameters ) {
+ $displayAction = AbuseFilter::formatAction( $action, $parameters );
+ $display_actions .= Xml::tags( 'li', null, $displayAction );
+ }
+ $display_actions = Xml::tags( 'ul', null, $display_actions );
+
+ $formatted = $display_actions;
+ break;
+ case 'afh_id':
+ $formatted = '';
+ if ( AbuseFilter::getFirstFilterChange( $row->afh_filter ) != $value ) {
+ // Set a link to a diff with the previous version if this isn't the first edit to the filter
+ $title = $this->mPage->getTitle(
+ 'history/' . $row->afh_filter . "/diff/prev/$value" );
+ $formatted = $this->linkRenderer->makeLink(
+ $title,
+ new HtmlArmor( $this->msg( 'abusefilter-history-diff' )->parse() )
+ );
+ }
+ break;
+ default:
+ $formatted = "Unable to format $name";
+ break;
+ }
+
+ $mappings = array_flip( AbuseFilter::$history_mappings ) +
+ [ 'afh_actions' => 'actions', 'afh_id' => 'id' ];
+ $changed = explode( ',', $row->afh_changed_fields );
+
+ $fieldChanged = false;
+ if ( $name == 'afh_flags' ) {
+ // This is a bit freaky, but it works.
+ // Basically, returns true if any of those filters are in the $changed array.
+ $filters = [ 'af_enabled', 'af_hidden', 'af_deleted', 'af_global' ];
+ if ( count( array_diff( $filters, $changed ) ) < count( $filters ) ) {
+ $fieldChanged = true;
+ }
+ } elseif ( in_array( $mappings[$name], $changed ) ) {
+ $fieldChanged = true;
+ }
+
+ if ( $fieldChanged ) {
+ $formatted = Xml::tags( 'div',
+ [ 'class' => 'mw-abusefilter-history-changed' ],
+ $formatted
+ );
+ }
+
+ return $formatted;
+ }
+
+ /**
+ * @return array
+ */
+ public function getQueryInfo() {
+ $info = [
+ 'tables' => [ 'abuse_filter_history', 'abuse_filter' ],
+ // All fields but afh_deleted on abuse_filter_history
+ 'fields' => [
+ 'afh_filter',
+ 'afh_timestamp',
+ 'afh_user_text',
+ 'afh_public_comments',
+ 'afh_flags',
+ 'afh_comments',
+ 'afh_actions',
+ 'afh_id',
+ 'afh_user',
+ 'afh_changed_fields',
+ 'afh_pattern',
+ 'af_hidden'
+ ],
+ 'conds' => [],
+ 'join_conds' => [
+ 'abuse_filter' =>
+ [
+ 'LEFT JOIN',
+ 'afh_filter=af_id',
+ ],
+ ],
+ ];
+
+ if ( $this->mUser ) {
+ $info['conds']['afh_user_text'] = $this->mUser;
+ }
+
+ if ( $this->mFilter ) {
+ $info['conds']['afh_filter'] = $this->mFilter;
+ }
+
+ if ( !$this->getUser()->isAllowedAny(
+ 'abusefilter-modify', 'abusefilter-view-private' )
+ ) {
+ // Hide data the user can't see.
+ $info['conds']['af_hidden'] = 0;
+ }
+
+ return $info;
+ }
+
+ /**
+ * @return string
+ */
+ public function getIndexField() {
+ return 'afh_timestamp';
+ }
+
+ /**
+ * @return string
+ */
+ public function getDefaultSort() {
+ return 'afh_timestamp';
+ }
+
+ /**
+ * @param string $name
+ * @return bool
+ */
+ public function isFieldSortable( $name ) {
+ $sortable_fields = [ 'afh_timestamp', 'afh_user_text' ];
+ return in_array( $name, $sortable_fields );
+ }
+
+ /**
+ * Title used for self-links.
+ *
+ * @return Title
+ */
+ public function getTitle() {
+ return $this->mPage->getTitle( 'history/' . $this->mFilter );
+ }
+}
diff --git a/AbuseFilter/includes/pagers/AbuseFilterPager.php b/AbuseFilter/includes/pagers/AbuseFilterPager.php
new file mode 100644
index 00000000..2092b850
--- /dev/null
+++ b/AbuseFilter/includes/pagers/AbuseFilterPager.php
@@ -0,0 +1,296 @@
+<?php
+
+use MediaWiki\Linker\LinkRenderer;
+
+/**
+ * Class to build paginated filter list
+ */
+class AbuseFilterPager extends TablePager {
+
+ /**
+ * @var LinkRenderer
+ */
+ protected $linkRenderer;
+
+ public $mPage, $mConds, $mQuery;
+
+ /**
+ * @param AbuseFilterViewList $page
+ * @param array $conds
+ * @param LinkRenderer $linkRenderer
+ * @param array $query
+ */
+ public function __construct( $page, $conds, $linkRenderer, $query ) {
+ $this->mPage = $page;
+ $this->mConds = $conds;
+ $this->linkRenderer = $linkRenderer;
+ $this->mQuery = $query;
+ parent::__construct( $this->mPage->getContext() );
+ }
+
+ /**
+ * @return array
+ */
+ public function getQueryInfo() {
+ return [
+ 'tables' => [ 'abuse_filter' ],
+ 'fields' => [
+ // All columns but af_comments
+ 'af_id',
+ 'af_enabled',
+ 'af_deleted',
+ 'af_pattern',
+ 'af_global',
+ 'af_public_comments',
+ 'af_hidden',
+ 'af_hit_count',
+ 'af_timestamp',
+ 'af_user_text',
+ 'af_user',
+ 'af_actions',
+ 'af_group',
+ 'af_throttled'
+ ],
+ 'conds' => $this->mConds,
+ ];
+ }
+
+ /**
+ * @see Pager::getFieldNames()
+ * @return array
+ */
+ public function getFieldNames() {
+ static $headers = null;
+
+ if ( !empty( $headers ) ) {
+ return $headers;
+ }
+
+ $headers = [
+ 'af_id' => 'abusefilter-list-id',
+ 'af_public_comments' => 'abusefilter-list-public',
+ 'af_actions' => 'abusefilter-list-consequences',
+ 'af_enabled' => 'abusefilter-list-status',
+ 'af_timestamp' => 'abusefilter-list-lastmodified',
+ 'af_hidden' => 'abusefilter-list-visibility',
+ ];
+
+ if ( $this->mPage->getUser()->isAllowed( 'abusefilter-log-detail' ) ) {
+ $headers['af_hit_count'] = 'abusefilter-list-hitcount';
+ }
+
+ if ( AbuseFilterView::canViewPrivate() && !empty( $this->mQuery[0] ) ) {
+ $headers['af_pattern'] = 'abusefilter-list-pattern';
+ }
+
+ if ( count( $this->getConfig()->get( 'AbuseFilterValidGroups' ) ) > 1 ) {
+ $headers['af_group'] = 'abusefilter-list-group';
+ }
+
+ foreach ( $headers as &$msg ) {
+ $msg = $this->msg( $msg )->text();
+ }
+
+ return $headers;
+ }
+
+ /**
+ * @param string $name
+ * @param string $value
+ * @return string
+ */
+ public function formatValue( $name, $value ) {
+ $lang = $this->getLanguage();
+ $row = $this->mCurrentRow;
+
+ switch ( $name ) {
+ case 'af_id':
+ return $this->linkRenderer->makeLink(
+ SpecialPage::getTitleFor( 'AbuseFilter', intval( $value ) ),
+ $lang->formatNum( intval( $value ) )
+ );
+ case 'af_pattern':
+ if ( $this->mQuery[1] === 'LIKE' ) {
+ $position = mb_stripos( $row->af_pattern, $this->mQuery[0] );
+ if ( $position === false ) {
+ // This may happen due to problems with character encoding
+ // which aren't easy to solve
+ return htmlspecialchars( mb_substr( $row->af_pattern, 0, 50 ) );
+ }
+ $length = mb_strlen( $this->mQuery[0] );
+ } else {
+ $regex = '/' . $this->mQuery[0] . '/u';
+ if ( $this->mQuery[1] === 'IRLIKE' ) {
+ $regex .= 'i';
+ }
+
+ $matches = [];
+ Wikimedia\suppressWarnings();
+ $check = preg_match(
+ $regex,
+ $row->af_pattern,
+ $matches
+ );
+ Wikimedia\restoreWarnings();
+ // This may happen in case of catastrophic backtracking
+ if ( $check === false ) {
+ return htmlspecialchars( mb_substr( $row->af_pattern, 0, 50 ) );
+ }
+
+ $length = mb_strlen( $matches[0] );
+ $position = mb_strpos( $row->af_pattern, $matches[0] );
+ }
+
+ $remaining = 50 - $length;
+ if ( $remaining <= 0 ) {
+ // Truncate the filter pattern and only show the first 50 characters of the match
+ $pattern = '<b>' .
+ htmlspecialchars( mb_substr( $row->af_pattern, $position, 50 ) ) .
+ '</b>';
+ } else {
+ // Center the snippet on the matched string
+ $minoffset = max( $position - round( $remaining / 2 ), 0 );
+ $pattern = mb_substr( $row->af_pattern, $minoffset, 50 );
+ $pattern =
+ htmlspecialchars( mb_substr( $pattern, 0, $position - $minoffset ) ) .
+ '<b>' .
+ htmlspecialchars( mb_substr( $pattern, $position - $minoffset, $length ) ) .
+ '</b>' .
+ htmlspecialchars( mb_substr(
+ $pattern,
+ $position - $minoffset + $length,
+ $remaining - ( $position - $minoffset + $length )
+ )
+ );
+ }
+ return $pattern;
+ case 'af_public_comments':
+ return $this->linkRenderer->makeLink(
+ SpecialPage::getTitleFor( 'AbuseFilter', intval( $row->af_id ) ),
+ $value
+ );
+ case 'af_actions':
+ $actions = explode( ',', $value );
+ $displayActions = [];
+ foreach ( $actions as $action ) {
+ $displayActions[] = AbuseFilter::getActionDisplay( $action );
+ }
+ return $lang->commaList( $displayActions );
+ case 'af_enabled':
+ $statuses = [];
+ if ( $row->af_deleted ) {
+ $statuses[] = $this->msg( 'abusefilter-deleted' )->parse();
+ } elseif ( $row->af_enabled ) {
+ $statuses[] = $this->msg( 'abusefilter-enabled' )->parse();
+ if ( $row->af_throttled ) {
+ $statuses[] = $this->msg( 'abusefilter-throttled' )->parse();
+ }
+ } else {
+ $statuses[] = $this->msg( 'abusefilter-disabled' )->parse();
+ }
+
+ if ( $row->af_global && $this->getConfig()->get( 'AbuseFilterIsCentral' ) ) {
+ $statuses[] = $this->msg( 'abusefilter-status-global' )->parse();
+ }
+
+ return $lang->commaList( $statuses );
+ case 'af_hidden':
+ $msg = $value ? 'abusefilter-hidden' : 'abusefilter-unhidden';
+ return $this->msg( $msg )->parse();
+ case 'af_hit_count':
+ if ( SpecialAbuseLog::canSeeDetails( $row->af_id, $row->af_hidden ) ) {
+ $count_display = $this->msg( 'abusefilter-hitcount' )
+ ->numParams( $value )->text();
+ $link = $this->linkRenderer->makeKnownLink(
+ SpecialPage::getTitleFor( 'AbuseLog' ),
+ $count_display,
+ [],
+ [ 'wpSearchFilter' => $row->af_id ]
+ );
+ } else {
+ $link = "";
+ }
+ return $link;
+ case 'af_timestamp':
+ $userLink =
+ Linker::userLink(
+ $row->af_user,
+ $row->af_user_text
+ ) .
+ Linker::userToolLinks(
+ $row->af_user,
+ $row->af_user_text
+ );
+
+ return $this->msg( 'abusefilter-edit-lastmod-text' )
+ ->rawParams(
+ $this->mPage->getLinkToLatestDiff(
+ $row->af_id,
+ $lang->timeanddate( $value, true )
+ ),
+ $userLink,
+ $this->mPage->getLinkToLatestDiff(
+ $row->af_id,
+ $lang->date( $value, true )
+ ),
+ $this->mPage->getLinkToLatestDiff(
+ $row->af_id,
+ $lang->time( $value, true )
+ )
+ )->params(
+ wfEscapeWikiText( $row->af_user_text )
+ )->parse();
+ case 'af_group':
+ return AbuseFilter::nameGroup( $value );
+ default:
+ throw new MWException( "Unknown row type $name!" );
+ }
+ }
+
+ /**
+ * @return string
+ */
+ public function getDefaultSort() {
+ return 'af_id';
+ }
+
+ /**
+ * @return string
+ */
+ public function getTableClass() {
+ return 'TablePager mw-abusefilter-list-scrollable';
+ }
+
+ /**
+ * @see TablePager::getRowClass()
+ * @param stdClass $row
+ * @return string
+ */
+ public function getRowClass( $row ) {
+ if ( $row->af_enabled ) {
+ return $row->af_throttled ? 'mw-abusefilter-list-throttled' : 'mw-abusefilter-list-enabled';
+ } elseif ( $row->af_deleted ) {
+ return 'mw-abusefilter-list-deleted';
+ } else {
+ return 'mw-abusefilter-list-disabled';
+ }
+ }
+
+ /**
+ * @param string $name
+ * @return bool
+ */
+ public function isFieldSortable( $name ) {
+ $sortable_fields = [
+ 'af_id',
+ 'af_enabled',
+ 'af_timestamp',
+ 'af_hidden',
+ 'af_group',
+ ];
+ if ( $this->mPage->getUser()->isAllowed( 'abusefilter-log-detail' ) ) {
+ $sortable_fields[] = 'af_hit_count';
+ }
+ return in_array( $name, $sortable_fields );
+ }
+}
diff --git a/AbuseFilter/includes/pagers/AbuseLogPager.php b/AbuseFilter/includes/pagers/AbuseLogPager.php
new file mode 100644
index 00000000..5c4f1a66
--- /dev/null
+++ b/AbuseFilter/includes/pagers/AbuseLogPager.php
@@ -0,0 +1,89 @@
+<?php
+
+use Wikimedia\Rdbms\IResultWrapper;
+
+class AbuseLogPager extends ReverseChronologicalPager {
+ /**
+ * @var SpecialAbuseLog
+ */
+ public $mForm;
+
+ /**
+ * @var array
+ */
+ public $mConds;
+
+ /**
+ * @param SpecialAbuseLog $form
+ * @param array $conds
+ */
+ public function __construct( $form, $conds = [] ) {
+ $this->mForm = $form;
+ $this->mConds = $conds;
+ parent::__construct();
+ }
+
+ /**
+ * @param object $row
+ * @return string
+ */
+ public function formatRow( $row ) {
+ return $this->mForm->formatRow( $row );
+ }
+
+ /**
+ * @return array
+ */
+ public function getQueryInfo() {
+ $conds = $this->mConds;
+
+ $info = [
+ 'tables' => [ 'abuse_filter_log', 'abuse_filter' ],
+ 'fields' => '*',
+ 'conds' => $conds,
+ 'join_conds' =>
+ [ 'abuse_filter' =>
+ [
+ 'LEFT JOIN',
+ 'af_id=afl_filter',
+ ],
+ ],
+ ];
+
+ if ( !$this->mForm->canSeeHidden() ) {
+ $db = $this->mDb;
+ $info['conds'][] = SpecialAbuseLog::getNotDeletedCond( $db );
+ }
+
+ return $info;
+ }
+
+ /**
+ * @param IResultWrapper $result
+ */
+ protected function preprocessResults( $result ) {
+ if ( $this->getNumRows() === 0 ) {
+ return;
+ }
+
+ $lb = new LinkBatch();
+ $lb->setCaller( __METHOD__ );
+ foreach ( $result as $row ) {
+ // Only for local wiki results
+ if ( !$row->afl_wiki ) {
+ $lb->add( $row->afl_namespace, $row->afl_title );
+ $lb->add( NS_USER, $row->afl_user );
+ $lb->add( NS_USER_TALK, $row->afl_user_text );
+ }
+ }
+ $lb->execute();
+ $result->seek( 0 );
+ }
+
+ /**
+ * @return string
+ */
+ public function getIndexField() {
+ return 'afl_timestamp';
+ }
+}
diff --git a/AbuseFilter/includes/pagers/GlobalAbuseFilterPager.php b/AbuseFilter/includes/pagers/GlobalAbuseFilterPager.php
new file mode 100644
index 00000000..30173475
--- /dev/null
+++ b/AbuseFilter/includes/pagers/GlobalAbuseFilterPager.php
@@ -0,0 +1,81 @@
+<?php
+
+use MediaWiki\Linker\LinkRenderer;
+
+/**
+ * Class to build paginated filter list for wikis using global abuse filters
+ */
+class GlobalAbuseFilterPager extends AbuseFilterPager {
+ /**
+ * @param AbuseFilterViewList $page
+ * @param array $conds
+ * @param LinkRenderer $linkRenderer
+ */
+ public function __construct( $page, $conds, $linkRenderer ) {
+ parent::__construct( $page, $conds, $linkRenderer, [ '', 'LIKE' ] );
+ $this->mDb = wfGetDB(
+ DB_REPLICA, [], $this->getConfig()->get( 'AbuseFilterCentralDB' ) );
+ }
+
+ /**
+ * @param string $name
+ * @param string $value
+ * @return string
+ */
+ public function formatValue( $name, $value ) {
+ $lang = $this->getLanguage();
+ $row = $this->mCurrentRow;
+
+ switch ( $name ) {
+ case 'af_id':
+ return $lang->formatNum( intval( $value ) );
+ case 'af_public_comments':
+ return $this->getOutput()->parseInline( $value );
+ case 'af_actions':
+ $actions = explode( ',', $value );
+ $displayActions = [];
+ foreach ( $actions as $action ) {
+ $displayActions[] = AbuseFilter::getActionDisplay( $action );
+ }
+ return $lang->commaList( $displayActions );
+ case 'af_enabled':
+ $statuses = [];
+ if ( $row->af_deleted ) {
+ $statuses[] = $this->msg( 'abusefilter-deleted' )->parse();
+ } elseif ( $row->af_enabled ) {
+ $statuses[] = $this->msg( 'abusefilter-enabled' )->parse();
+ } else {
+ $statuses[] = $this->msg( 'abusefilter-disabled' )->parse();
+ }
+ if ( $row->af_global ) {
+ $statuses[] = $this->msg( 'abusefilter-status-global' )->parse();
+ }
+
+ return $lang->commaList( $statuses );
+ case 'af_hidden':
+ $msg = $value ? 'abusefilter-hidden' : 'abusefilter-unhidden';
+ return $this->msg( $msg )->parse();
+ case 'af_hit_count':
+ // If the rule is hidden, don't show it, even to priviledged local admins
+ if ( $row->af_hidden ) {
+ return '';
+ }
+ return $this->msg( 'abusefilter-hitcount' )->numParams( $value )->parse();
+ case 'af_timestamp':
+ $user = $row->af_user_text;
+ return $this->msg(
+ 'abusefilter-edit-lastmod-text',
+ $lang->timeanddate( $value, true ),
+ $user,
+ $lang->date( $value, true ),
+ $lang->time( $value, true ),
+ $user
+ )->parse();
+ case 'af_group':
+ // If this is global, local name probably doesn't exist, but try
+ return AbuseFilter::nameGroup( $value );
+ default:
+ throw new MWException( "Unknown row type $name!" );
+ }
+ }
+}
diff --git a/AbuseFilter/includes/parser/AFPData.php b/AbuseFilter/includes/parser/AFPData.php
index d5a0069d..de8d8270 100644
--- a/AbuseFilter/includes/parser/AFPData.php
+++ b/AbuseFilter/includes/parser/AFPData.php
@@ -7,7 +7,7 @@ class AFPData {
const DNULL = 'null';
const DBOOL = 'bool';
const DFLOAT = 'float';
- const DLIST = 'list';
+ const DARRAY = 'array';
// Translation table mapping shell-style wildcards to PCRE equivalents.
// Derived from <http://www.php.net/manual/en/function.fnmatch.php#100207>
@@ -28,7 +28,7 @@ class AFPData {
/**
* @param string $type
- * @param null $val
+ * @param mixed|null $val
*/
public function __construct( $type = self::DNULL, $val = null ) {
$this->type = $type;
@@ -36,7 +36,7 @@ class AFPData {
}
/**
- * @param $var
+ * @param mixed $var
* @return AFPData
* @throws AFPException
*/
@@ -55,7 +55,7 @@ class AFPData {
$result[] = self::newFromPHPVar( $item );
}
- return new AFPData( self::DLIST, $result );
+ return new AFPData( self::DARRAY, $result );
} elseif ( is_null( $var ) ) {
return new AFPData();
} else {
@@ -73,8 +73,8 @@ class AFPData {
}
/**
- * @param $orig AFPData
- * @param $target
+ * @param AFPData $orig
+ * @param string $target
* @return AFPData
*/
public static function castTypes( $orig, $target ) {
@@ -85,7 +85,7 @@ class AFPData {
return new AFPData();
}
- if ( $orig->type == self::DLIST ) {
+ if ( $orig->type == self::DARRAY ) {
if ( $target == self::DBOOL ) {
return new AFPData( self::DBOOL, (bool)count( $orig->data ) );
}
@@ -117,13 +117,13 @@ class AFPData {
if ( $target == self::DSTRING ) {
return new AFPData( self::DSTRING, strval( $orig->data ) );
}
- if ( $target == self::DLIST ) {
- return new AFPData( self::DLIST, [ $orig ] );
+ if ( $target == self::DARRAY ) {
+ return new AFPData( self::DARRAY, [ $orig ] );
}
}
/**
- * @param $value AFPData
+ * @param AFPData $value
* @return AFPData
*/
public static function boolInvert( $value ) {
@@ -131,17 +131,22 @@ class AFPData {
}
/**
- * @param $base AFPData
- * @param $exponent AFPData
+ * @param AFPData $base
+ * @param AFPData $exponent
* @return AFPData
*/
public static function pow( $base, $exponent ) {
- return new AFPData( self::DFLOAT, pow( $base->toFloat(), $exponent->toFloat() ) );
+ $res = pow( $base->toNumber(), $exponent->toNumber() );
+ if ( $res === (int)$res ) {
+ return new AFPData( self::DINT, $res );
+ } else {
+ return new AFPData( self::DFLOAT, $res );
+ }
}
/**
- * @param $a AFPData
- * @param $b AFPData
+ * @param AFPData $a
+ * @param AFPData $b
* @return AFPData
*/
public static function keywordIn( $a, $b ) {
@@ -156,8 +161,8 @@ class AFPData {
}
/**
- * @param $a AFPData
- * @param $b AFPData
+ * @param AFPData $a
+ * @param AFPData $b
* @return AFPData
*/
public static function keywordContains( $a, $b ) {
@@ -172,51 +177,64 @@ class AFPData {
}
/**
- * @param $value
- * @param $list
+ * @param AFPData $d1
+ * @param AFPData $d2
+ * @param bool $strict whether to also check types
* @return bool
*/
- public static function listContains( $value, $list ) {
- // Should use built-in PHP function somehow
- foreach ( $list->data as $item ) {
- if ( self::equals( $value, $item ) ) {
- return true;
+ public static function equals( $d1, $d2, $strict = false ) {
+ if ( $d1->type != self::DARRAY && $d2->type != self::DARRAY ) {
+ $typecheck = $d1->type == $d2->type || !$strict;
+ return $typecheck && $d1->toString() === $d2->toString();
+ } elseif ( $d1->type == self::DARRAY && $d2->type == self::DARRAY ) {
+ $data1 = $d1->data;
+ $data2 = $d2->data;
+ if ( count( $data1 ) !== count( $data2 ) ) {
+ return false;
+ }
+ $length = count( $data1 );
+ for ( $i = 0; $i < $length; $i++ ) {
+ $result = self::equals( $data1[$i], $data2[$i], $strict );
+ if ( $result === false ) {
+ return false;
+ }
+ }
+ return true;
+ } else {
+ // Trying to compare an array to something else
+ if ( $strict ) {
+ return false;
+ }
+ if ( $d1->type == self::DARRAY && count( $d1->data ) === 0 ) {
+ return ( $d2->type == self::DBOOL && $d2->toBool() == false ) || $d2->type == self::DNULL;
+ } elseif ( $d2->type == self::DARRAY && count( $d2->data ) === 0 ) {
+ return ( $d1->type == self::DBOOL && $d1->toBool() == false ) || $d1->type == self::DNULL;
+ } else {
+ return false;
}
}
-
- return false;
}
/**
- * @param $d1 AFPData
- * @param $d2 AFPData
- * @return bool
- */
- public static function equals( $d1, $d2 ) {
- return $d1->type != self::DLIST && $d2->type != self::DLIST &&
- $d1->toString() === $d2->toString();
- }
-
- /**
- * @param $str AFPData
- * @param $pattern AFPData
+ * @param AFPData $str
+ * @param AFPData $pattern
* @return AFPData
*/
public static function keywordLike( $str, $pattern ) {
$str = $str->toString();
$pattern = '#^' . strtr( preg_quote( $pattern->toString(), '#' ), self::$wildcardMap ) . '$#u';
- MediaWiki\suppressWarnings();
+ Wikimedia\suppressWarnings();
$result = preg_match( $pattern, $str );
- MediaWiki\restoreWarnings();
+ Wikimedia\restoreWarnings();
return new AFPData( self::DBOOL, (bool)$result );
}
/**
- * @param $str AFPData
- * @param $regex AFPData
- * @param $pos
- * @param $insensitive bool
+ * @param AFPData $str
+ * @param AFPData $regex
+ * @param int $pos
+ * @param bool $insensitive
* @return AFPData
* @throws Exception
*/
@@ -231,12 +249,14 @@ class AFPData {
$pattern .= 'i';
}
+ Wikimedia\suppressWarnings();
$result = preg_match( $pattern, $str );
+ Wikimedia\restoreWarnings();
if ( $result === false ) {
throw new AFPUserVisibleException(
'regexfailure',
$pos,
- [ 'unspecified error in preg_match()', $pattern ]
+ [ $pattern ]
);
}
@@ -244,9 +264,9 @@ class AFPData {
}
/**
- * @param $str
- * @param $regex
- * @param $pos
+ * @param AFPData $str
+ * @param AFPData $regex
+ * @param int $pos
* @return AFPData
*/
public static function keywordRegexInsensitive( $str, $regex, $pos ) {
@@ -254,7 +274,7 @@ class AFPData {
}
/**
- * @param $data AFPData
+ * @param AFPData $data
* @return AFPData
*/
public static function unaryMinus( $data ) {
@@ -266,9 +286,9 @@ class AFPData {
}
/**
- * @param $a AFPData
- * @param $b AFPData
- * @param $op string
+ * @param AFPData $a
+ * @param AFPData $b
+ * @param string $op
* @return AFPData
* @throws AFPException
*/
@@ -284,13 +304,14 @@ class AFPData {
if ( $op == '^' ) {
return new AFPData( self::DBOOL, $a xor $b );
}
- throw new AFPException( "Invalid boolean operation: {$op}" ); // Should never happen.
+ // Should never happen.
+ throw new AFPException( "Invalid boolean operation: {$op}" );
}
/**
- * @param $a AFPData
- * @param $b AFPData
- * @param $op string
+ * @param AFPData $a
+ * @param AFPData $b
+ * @param string $op
* @return AFPData
* @throws AFPException
*/
@@ -302,10 +323,10 @@ class AFPData {
return new AFPData( self::DBOOL, !self::equals( $a, $b ) );
}
if ( $op == '===' ) {
- return new AFPData( self::DBOOL, $a->type == $b->type && self::equals( $a, $b ) );
+ return new AFPData( self::DBOOL, self::equals( $a, $b, true ) );
}
if ( $op == '!==' ) {
- return new AFPData( self::DBOOL, $a->type != $b->type || !self::equals( $a, $b ) );
+ return new AFPData( self::DBOOL, !self::equals( $a, $b, true ) );
}
$a = $a->toString();
$b = $b->toString();
@@ -321,31 +342,22 @@ class AFPData {
if ( $op == '<=' ) {
return new AFPData( self::DBOOL, $a <= $b );
}
- throw new AFPException( "Invalid comparison operation: {$op}" ); // Should never happen
+ // Should never happen
+ throw new AFPException( "Invalid comparison operation: {$op}" );
}
/**
- * @param $a AFPData
- * @param $b AFPData
- * @param $op string
- * @param $pos
+ * @param AFPData $a
+ * @param AFPData $b
+ * @param string $op
+ * @param int $pos
* @return AFPData
* @throws AFPUserVisibleException
* @throws AFPException
*/
public static function mulRel( $a, $b, $op, $pos ) {
- // Figure out the type.
- if ( $a->type == self::DFLOAT || $b->type == self::DFLOAT ||
- $a->toFloat() != $a->toString() || $b->toFloat() != $b->toString()
- ) {
- $type = self::DFLOAT;
- $a = $a->toFloat();
- $b = $b->toFloat();
- } else {
- $type = self::DINT;
- $a = $a->toInt();
- $b = $b->toInt();
- }
+ $a = $a->toNumber();
+ $b = $b->toNumber();
if ( $op != '*' && $b == 0 ) {
throw new AFPUserVisibleException( 'dividebyzero', $pos, [ $a ] );
@@ -362,37 +374,49 @@ class AFPData {
throw new AFPException( "Invalid multiplication-related operation: {$op}" );
}
- if ( $type == self::DINT ) {
+ if ( $data === (int)$data ) {
$data = intval( $data );
+ $type = self::DINT;
} else {
$data = floatval( $data );
+ $type = self::DFLOAT;
}
return new AFPData( $type, $data );
}
/**
- * @param $a AFPData
- * @param $b AFPData
+ * @param AFPData $a
+ * @param AFPData $b
* @return AFPData
*/
public static function sum( $a, $b ) {
if ( $a->type == self::DSTRING || $b->type == self::DSTRING ) {
return new AFPData( self::DSTRING, $a->toString() . $b->toString() );
- } elseif ( $a->type == self::DLIST && $b->type == self::DLIST ) {
- return new AFPData( self::DLIST, array_merge( $a->toList(), $b->toList() ) );
+ } elseif ( $a->type == self::DARRAY && $b->type == self::DARRAY ) {
+ return new AFPData( self::DARRAY, array_merge( $a->toArray(), $b->toArray() ) );
} else {
- return new AFPData( self::DFLOAT, $a->toFloat() + $b->toFloat() );
+ $res = $a->toNumber() + $b->toNumber();
+ if ( $res === (int)$res ) {
+ return new AFPData( self::DINT, $res );
+ } else {
+ return new AFPData( self::DFLOAT, $res );
+ }
}
}
/**
- * @param $a AFPData
- * @param $b AFPData
+ * @param AFPData $a
+ * @param AFPData $b
* @return AFPData
*/
public static function sub( $a, $b ) {
- return new AFPData( self::DFLOAT, $a->toFloat() - $b->toFloat() );
+ $res = $a->toNumber() - $b->toNumber();
+ if ( $res === (int)$res ) {
+ return new AFPData( self::DINT, $res );
+ } else {
+ return new AFPData( self::DFLOAT, $res );
+ }
}
/** Convert shorteners */
@@ -411,8 +435,8 @@ class AFPData {
return $this->toFloat();
case self::DINT:
return $this->toInt();
- case self::DLIST:
- $input = $this->toList();
+ case self::DARRAY:
+ $input = $this->toArray();
$output = [];
foreach ( $input as $item ) {
$output[] = $item->toNative();
@@ -454,7 +478,17 @@ class AFPData {
return self::castTypes( $this, self::DINT )->data;
}
- public function toList() {
- return self::castTypes( $this, self::DLIST )->data;
+ /**
+ * @return int|float
+ */
+ public function toNumber() {
+ return $this->type == self::DINT ? $this->toInt() : $this->toFloat();
+ }
+
+ /**
+ * @return array
+ */
+ public function toArray() {
+ return self::castTypes( $this, self::DARRAY )->data;
}
}
diff --git a/AbuseFilter/includes/parser/AFPParserState.php b/AbuseFilter/includes/parser/AFPParserState.php
index 7a4f5a73..453948d1 100644
--- a/AbuseFilter/includes/parser/AFPParserState.php
+++ b/AbuseFilter/includes/parser/AFPParserState.php
@@ -3,6 +3,10 @@
class AFPParserState {
public $pos, $token;
+ /**
+ * @param AFPToken $token
+ * @param int $pos
+ */
public function __construct( $token, $pos ) {
$this->token = $token;
$this->pos = $pos;
diff --git a/AbuseFilter/includes/parser/AFPToken.php b/AbuseFilter/includes/parser/AFPToken.php
index 2f7d9c99..897f5ded 100644
--- a/AbuseFilter/includes/parser/AFPToken.php
+++ b/AbuseFilter/includes/parser/AFPToken.php
@@ -21,7 +21,7 @@
* * Entry - catches unexpected characters
* * Semicolon - ;
* * Set - :=
- * * Conditionls (IF) - if-then-else-end, cond ? a :b
+ * * Conditionals (IF) - if-then-else-end, cond ? a :b
* * BoolOps (BO) - &, |, ^
* * CompOps (CO) - ==, !=, ===, !==, >, <, >=, <=
* * SumRel (SR) - +, -
@@ -30,13 +30,12 @@
* * BoolNeg (BN) - ! operation
* * SpecialOperators (SO) - in and like
* * Unarys (U) - plus and minus in cases like -5 or -(2 * +2)
- * * ListElement (LE) - list[number]
+ * * ArrayElement (AE) - array[number]
* * Braces (B) - ( and )
* * Functions (F)
* * Atom (A) - return value
*/
class AFPToken {
- // Types of tken
const TNONE = 'T_NONE';
const TID = 'T_ID';
const TKEYWORD = 'T_KEYWORD';
@@ -53,6 +52,11 @@ class AFPToken {
public $value;
public $pos;
+ /**
+ * @param string $type
+ * @param mixed|null $value
+ * @param int $pos
+ */
public function __construct( $type = self::TNONE, $value = null, $pos = 0 ) {
$this->type = $type;
$this->value = $value;
diff --git a/AbuseFilter/includes/parser/AFPTreeNode.php b/AbuseFilter/includes/parser/AFPTreeNode.php
index e185616c..a3c2a063 100644
--- a/AbuseFilter/includes/parser/AFPTreeNode.php
+++ b/AbuseFilter/includes/parser/AFPTreeNode.php
@@ -15,12 +15,12 @@ class AFPTreeNode {
// ASSIGNMENT (formerly known as SET) is a node which is responsible for
// assigning values to variables. ASSIGNMENT is a (variable name [string],
// value [tree node]) tuple, INDEX_ASSIGNMENT (which is used to assign
- // values at list offsets) is a (variable name [string], index [tree node],
- // value [tree node]) tuple, and LIST_APPEND has the form of (variable name
+ // values at array offsets) is a (variable name [string], index [tree node],
+ // value [tree node]) tuple, and ARRAY_APPEND has the form of (variable name
// [string], value [tree node]).
const ASSIGNMENT = 'ASSIGNMENT';
const INDEX_ASSIGNMENT = 'INDEX_ASSIGNMENT';
- const LIST_APPEND = 'LIST_APPEND';
+ const ARRAY_APPEND = 'ARRAY_APPEND';
// CONDITIONAL represents both a ternary operator and an if-then-else-end
// construct. The format is (condition, evaluated-if-true,
@@ -53,13 +53,12 @@ class AFPTreeNode {
// filter language. The format is (keyword, left operand, right operand).
const KEYWORD_OPERATOR = 'KEYWORD_OPERATOR';
- // UNARY is either unary minus or unary plus. The format is (operator,
- // operand).
+ // UNARY is either unary minus or unary plus. The format is (operator, operand).
const UNARY = 'UNARY';
- // LIST_INDEX is an operation of accessing a list by an offset. The format
- // is (list, offset).
- const LIST_INDEX = 'LIST_INDEX';
+ // ARRAY_INDEX is an operation of accessing an array by an offset. The format
+ // is (array, offset).
+ const ARRAY_INDEX = 'ARRAY_INDEX';
// Since parenthesis only manipulate precedence of the operators, they are
// not explicitly represented in the tree.
@@ -69,9 +68,9 @@ class AFPTreeNode {
// elements are the arguments.
const FUNCTION_CALL = 'FUNCTION_CALL';
- // LIST_DEFINITION is a list literal. The $children field contains tree
- // nodes for the values of each of the list element used.
- const LIST_DEFINITION = 'LIST_DEFINITION';
+ // ARRAY_DEFINITION is an array literal. The $children field contains tree
+ // nodes for the values of each of the array element used.
+ const ARRAY_DEFINITION = 'ARRAY_DEFINITION';
// ATOM is a node representing a literal. The only element of $children is a
// token corresponding to the literal.
@@ -90,12 +89,20 @@ class AFPTreeNode {
// Position used for error reporting.
public $position;
+ /**
+ * @param string $type
+ * @param AFPTreeNode[]|string[]|AFPToken $children
+ * @param int $position
+ */
public function __construct( $type, $children, $position ) {
$this->type = $type;
$this->children = $children;
$this->position = $position;
}
+ /**
+ * @return string
+ */
public function toDebugString() {
return implode( "\n", $this->toDebugStringInner() );
}
diff --git a/AbuseFilter/includes/parser/AFPTreeParser.php b/AbuseFilter/includes/parser/AFPTreeParser.php
index 345adcb8..4fa35356 100644
--- a/AbuseFilter/includes/parser/AFPTreeParser.php
+++ b/AbuseFilter/includes/parser/AFPTreeParser.php
@@ -26,6 +26,9 @@ class AFPTreeParser {
$this->resetState();
}
+ /**
+ * Resets the state
+ */
public function resetState() {
$this->mTokens = [];
$this->mPos = 0;
@@ -174,7 +177,7 @@ class AFPTreeParser {
$value = $this->doLevelSet();
if ( $index === 'append' ) {
return new AFPTreeNode(
- AFPTreeNode::LIST_APPEND, [ $varname, $value ], $position );
+ AFPTreeNode::ARRAY_APPEND, [ $varname, $value ], $position );
} else {
return new AFPTreeNode(
AFPTreeNode::INDEX_ASSIGNMENT,
@@ -412,7 +415,7 @@ class AFPTreeParser {
$leftOperand = $this->doLevelUnarys();
$keyword = strtolower( $this->mCur->value );
if ( $this->mCur->type == AFPToken::TKEYWORD &&
- in_array( $keyword, array_keys( AbuseFilterParser::$mKeywords ) )
+ isset( AbuseFilterParser::$mKeywords[$keyword] )
) {
$position = $this->mPos;
$this->move();
@@ -438,24 +441,24 @@ class AFPTreeParser {
if ( $this->mCur->type == AFPToken::TOP && ( $op == "+" || $op == "-" ) ) {
$position = $this->mPos;
$this->move();
- $argument = $this->doLevelListElements();
+ $argument = $this->doLevelArrayElements();
return new AFPTreeNode( AFPTreeNode::UNARY, [ $op, $argument ], $position );
}
- return $this->doLevelListElements();
+ return $this->doLevelArrayElements();
}
/**
- * Handles accessing a list element by an offset.
+ * Handles accessing an array element by an offset.
*
* @return AFPTreeNode
* @throws AFPUserVisibleException
*/
- protected function doLevelListElements() {
- $list = $this->doLevelParenthesis();
+ protected function doLevelArrayElements() {
+ $array = $this->doLevelParenthesis();
while ( $this->mCur->type == AFPToken::TSQUAREBRACKET && $this->mCur->value == '[' ) {
$position = $this->mPos;
$index = $this->doLevelSemicolon();
- $list = new AFPTreeNode( AFPTreeNode::LIST_INDEX, [ $list, $index ], $position );
+ $array = new AFPTreeNode( AFPTreeNode::ARRAY_INDEX, [ $array, $index ], $position );
if ( !( $this->mCur->type == AFPToken::TSQUAREBRACKET && $this->mCur->value == ']' ) ) {
throw new AFPUserVisibleException( 'expectednotfound', $this->mPos,
@@ -464,7 +467,7 @@ class AFPTreeParser {
$this->move();
}
- return $list;
+ return $array;
}
/**
@@ -568,14 +571,14 @@ class AFPTreeParser {
/** @noinspection PhpMissingBreakStatementInspection */
case AFPToken::TSQUAREBRACKET:
if ( $this->mCur->value == '[' ) {
- $list = [];
+ $array = [];
while ( true ) {
$this->move();
if ( $this->mCur->type == AFPToken::TSQUAREBRACKET && $this->mCur->value == ']' ) {
break;
}
- $list[] = $this->doLevelSet();
+ $array[] = $this->doLevelSet();
if ( $this->mCur->type == AFPToken::TSQUAREBRACKET && $this->mCur->value == ']' ) {
break;
@@ -589,7 +592,7 @@ class AFPTreeParser {
}
}
- $result = new AFPTreeNode( AFPTreeNode::LIST_DEFINITION, $list, $this->mPos );
+ $result = new AFPTreeNode( AFPTreeNode::ARRAY_DEFINITION, $array, $this->mPos );
break;
}
diff --git a/AbuseFilter/includes/parser/AFPUserVisibleException.php b/AbuseFilter/includes/parser/AFPUserVisibleException.php
index 45eea745..ab4b2264 100644
--- a/AbuseFilter/includes/parser/AFPUserVisibleException.php
+++ b/AbuseFilter/includes/parser/AFPUserVisibleException.php
@@ -3,8 +3,11 @@
// Exceptions that we might conceivably want to report to ordinary users
// (i.e. exceptions that don't represent bugs in the extension itself)
class AFPUserVisibleException extends AFPException {
- public $mExceptionId;
+ /** @var string */
+ public $mExceptionID;
+ /** @var int */
public $mPosition;
+ /** @var array */
public $mParams;
/**
@@ -12,7 +15,7 @@ class AFPUserVisibleException extends AFPException {
* @param int $position
* @param array $params
*/
- function __construct( $exception_id, $position, $params ) {
+ public function __construct( $exception_id, $position, $params ) {
$this->mExceptionID = $exception_id;
$this->mPosition = $position;
$this->mParams = $params;
@@ -22,6 +25,9 @@ class AFPUserVisibleException extends AFPException {
parent::__construct( $msg );
}
+ /**
+ * @return Message
+ */
public function getMessageObj() {
// Give grep a chance to find the usages:
// abusefilter-exception-unexpectedatend, abusefilter-exception-expectednotfound
@@ -31,10 +37,11 @@ class AFPUserVisibleException extends AFPException {
// abusefilter-exception-dividebyzero, abusefilter-exception-unrecognisedvar
// abusefilter-exception-notenoughargs, abusefilter-exception-regexfailure
// abusefilter-exception-overridebuiltin, abusefilter-exception-outofbounds
- // abusefilter-exception-notlist
+ // abusefilter-exception-notarray, abusefilter-exception-unclosedcomment
+ // abusefilter-exception-invalidiprange, abusefilter-exception-disabledvar
return wfMessage(
'abusefilter-exception-' . $this->mExceptionID,
- array_merge( [ $this->mPosition ], $this->mParams )
+ $this->mPosition, ...$this->mParams
);
}
}
diff --git a/AbuseFilter/includes/parser/AbuseFilterCachingParser.php b/AbuseFilter/includes/parser/AbuseFilterCachingParser.php
index 0c5ba69e..ef634fd4 100644
--- a/AbuseFilter/includes/parser/AbuseFilterCachingParser.php
+++ b/AbuseFilter/includes/parser/AbuseFilterCachingParser.php
@@ -12,6 +12,7 @@ class AbuseFilterCachingParser extends AbuseFilterParser {
* Return the generated version of the parser for cache invalidation
* purposes. Automatically tracks list of all functions and invalidates the
* cache if it is changed.
+ * @return string
*/
public static function getCacheVersion() {
static $version = null;
@@ -30,11 +31,18 @@ class AbuseFilterCachingParser extends AbuseFilterParser {
return $version;
}
+ /**
+ * Resets the state of the parser
+ */
public function resetState() {
$this->mVars = new AbuseFilterVariableHolder;
$this->mCur = new AFPToken();
}
+ /**
+ * @param string $code
+ * @return AFPData
+ */
public function intEval( $code ) {
static $cache = null;
if ( !$cache ) {
@@ -63,7 +71,7 @@ class AbuseFilterCachingParser extends AbuseFilterParser {
* Evaluate the value of the specified AST node.
*
* @param AFPTreeNode $node The node to evaluate.
- * @return AFPData
+ * @return AFPData|AFPTreeNode|string
* @throws AFPException
* @throws AFPUserVisibleException
* @throws MWException
@@ -71,8 +79,7 @@ class AbuseFilterCachingParser extends AbuseFilterParser {
public function evalNode( AFPTreeNode $node ) {
// A lot of AbuseFilterParser features rely on $this->mCur->pos or
// $this->mPos for error reporting.
- // FIXME: this is a hack which needs to be removed when the parsers are
- // merged.
+ // FIXME: this is a hack which needs to be removed when the parsers are merged.
$this->mPos = $node->position;
$this->mCur->pos = $node->position;
@@ -102,9 +109,9 @@ class AbuseFilterCachingParser extends AbuseFilterParser {
default:
throw new AFPException( "Unknown token provided in the ATOM node" );
}
- case AFPTreeNode::LIST_DEFINITION:
+ case AFPTreeNode::ARRAY_DEFINITION:
$items = array_map( [ $this, 'evalNode' ], $node->children );
- return new AFPData( AFPData::DLIST, $items );
+ return new AFPData( AFPData::DARRAY, $items );
case AFPTreeNode::FUNCTION_CALL:
$functionName = $node->children[0];
@@ -131,23 +138,23 @@ class AbuseFilterCachingParser extends AbuseFilterParser {
return $result;
- case AFPTreeNode::LIST_INDEX:
- list( $list, $offset ) = $node->children;
+ case AFPTreeNode::ARRAY_INDEX:
+ list( $array, $offset ) = $node->children;
- $list = $this->evalNode( $list );
- if ( $list->type != AFPData::DLIST ) {
- throw new AFPUserVisibleException( 'notlist', $node->position, [] );
+ $array = $this->evalNode( $array );
+ if ( $array->type != AFPData::DARRAY ) {
+ throw new AFPUserVisibleException( 'notarray', $node->position, [] );
}
$offset = $this->evalNode( $offset )->toInt();
- $list = $list->toList();
- if ( count( $list ) <= $offset ) {
+ $array = $array->toArray();
+ if ( count( $array ) <= $offset ) {
throw new AFPUserVisibleException( 'outofbounds', $node->position,
- [ $offset, count( $list ) ] );
+ [ $offset, count( $array ) ] );
}
- return $list[$offset];
+ return $array[$offset];
case AFPTreeNode::UNARY:
list( $operation, $argument ) = $node->children;
@@ -182,8 +189,8 @@ class AbuseFilterCachingParser extends AbuseFilterParser {
list( $op, $leftOperand, $rightOperand ) = $node->children;
$leftOperand = $this->evalNode( $leftOperand );
$rightOperand = $this->evalNode( $rightOperand );
- return AFPData::mulRel( $leftOperand, $rightOperand, $op, /* FIXME */
- 0 );
+ // FIXME
+ return AFPData::mulRel( $leftOperand, $rightOperand, $op, 0 );
case AFPTreeNode::SUM_REL:
list( $op, $leftOperand, $rightOperand ) = $node->children;
@@ -234,34 +241,34 @@ class AbuseFilterCachingParser extends AbuseFilterParser {
case AFPTreeNode::INDEX_ASSIGNMENT:
list( $varName, $offset, $value ) = $node->children;
- $list = $this->mVars->getVar( $varName );
- if ( $list->type != AFPData::DLIST ) {
- throw new AFPUserVisibleException( 'notlist', $node->position, [] );
+ $array = $this->mVars->getVar( $varName );
+ if ( $array->type != AFPData::DARRAY ) {
+ throw new AFPUserVisibleException( 'notarray', $node->position, [] );
}
$offset = $this->evalNode( $offset )->toInt();
- $list = $list->toList();
- if ( count( $list ) <= $offset ) {
+ $array = $array->toArray();
+ if ( count( $array ) <= $offset ) {
throw new AFPUserVisibleException( 'outofbounds', $node->position,
- [ $offset, count( $list ) ] );
+ [ $offset, count( $array ) ] );
}
- $list[$offset] = $this->evalNode( $value );
- $this->setUserVariable( $varName, new AFPData( AFPData::DLIST, $list ) );
+ $array[$offset] = $this->evalNode( $value );
+ $this->setUserVariable( $varName, new AFPData( AFPData::DARRAY, $array ) );
return $value;
- case AFPTreeNode::LIST_APPEND:
+ case AFPTreeNode::ARRAY_APPEND:
list( $varName, $value ) = $node->children;
- $list = $this->mVars->getVar( $varName );
- if ( $list->type != AFPData::DLIST ) {
- throw new AFPUserVisibleException( 'notlist', $node->position, [] );
+ $array = $this->mVars->getVar( $varName );
+ if ( $array->type != AFPData::DARRAY ) {
+ throw new AFPUserVisibleException( 'notarray', $node->position, [] );
}
- $list = $list->toList();
- $list[] = $this->evalNode( $value );
- $this->setUserVariable( $varName, new AFPData( AFPData::DLIST, $list ) );
+ $array = $array->toArray();
+ $array[] = $this->evalNode( $value );
+ $this->setUserVariable( $varName, new AFPData( AFPData::DARRAY, $array ) );
return $value;
case AFPTreeNode::SEMICOLON:
diff --git a/AbuseFilter/includes/parser/AbuseFilterParser.php b/AbuseFilter/includes/parser/AbuseFilterParser.php
index f9bd15b3..89ddea0f 100644
--- a/AbuseFilter/includes/parser/AbuseFilterParser.php
+++ b/AbuseFilter/includes/parser/AbuseFilterParser.php
@@ -1,14 +1,19 @@
<?php
+use Wikimedia\Equivset\Equivset;
+use MediaWiki\Logger\LoggerFactory;
+
class AbuseFilterParser {
- public $mCode, $mTokens, $mPos, $mCur, $mShortCircuit, $mAllowShort, $mLen;
+ public $mCode, $mTokens, $mPos, $mShortCircuit, $mAllowShort, $mLen;
+ /** @var AFPToken The current token */
+ public $mCur;
/**
* @var AbuseFilterVariableHolder
*/
public $mVars;
- // length,lcase,ucase,ccnorm,rmdoubles,specialratio,rmspecials,norm,count
+ // length,lcase,ucase,ccnorm,rmdoubles,specialratio,rmspecials,norm,count,get_matches
public static $mFunctions = [
'lcase' => 'funcLc',
'ucase' => 'funcUc',
@@ -19,14 +24,19 @@ class AbuseFilterParser {
'bool' => 'castBool',
'norm' => 'funcNorm',
'ccnorm' => 'funcCCNorm',
+ 'ccnorm_contains_any' => 'funcCCNormContainsAny',
+ 'ccnorm_contains_all' => 'funcCCNormContainsAll',
'specialratio' => 'funcSpecialRatio',
'rmspecials' => 'funcRMSpecials',
'rmdoubles' => 'funcRMDoubles',
'rmwhitespace' => 'funcRMWhitespace',
'count' => 'funcCount',
'rcount' => 'funcRCount',
+ 'get_matches' => 'funcGetMatches',
'ip_in_range' => 'funcIPInRange',
'contains_any' => 'funcContainsAny',
+ 'contains_all' => 'funcContainsAll',
+ 'equals_to_any' => 'funcEqualsToAny',
'substr' => 'funcSubstr',
'strlen' => 'funcLen',
'strpos' => 'funcStrPos',
@@ -34,6 +44,7 @@ class AbuseFilterParser {
'rescape' => 'funcStrRegexEscape',
'set' => 'funcSetVar',
'set_var' => 'funcSetVar',
+ 'sanitize' => 'funcSanitize',
];
// Functions that affect parser state, and shouldn't be cached.
@@ -48,15 +59,20 @@ class AbuseFilterParser {
'contains' => 'keywordContains',
'rlike' => 'keywordRegex',
'irlike' => 'keywordRegexInsensitive',
- 'regex' => 'keywordRegex'
+ 'regex' => 'keywordRegex',
];
public static $funcCache = [];
/**
+ * @var Equivset
+ */
+ protected static $equivset;
+
+ /**
* Create a new instance
*
- * @param $vars AbuseFilterVariableHolder
+ * @param AbuseFilterVariableHolder|null $vars
*/
public function __construct( $vars = null ) {
$this->resetState();
@@ -65,6 +81,9 @@ class AbuseFilterParser {
}
}
+ /**
+ * Resets the state of the parser.
+ */
public function resetState() {
$this->mCode = '';
$this->mTokens = [];
@@ -75,12 +94,13 @@ class AbuseFilterParser {
}
/**
- * @param $filter
- * @return array|bool
+ * @param string $filter
+ * @return true|array True when successful, otherwise a two-element array with exception message
+ * and character position of the syntax error
*/
public function checkSyntax( $filter ) {
+ $origAS = $this->mAllowShort;
try {
- $origAS = $this->mAllowShort;
$this->mAllowShort = false;
$this->parse( $filter );
} catch ( AFPUserVisibleException $excep ) {
@@ -94,28 +114,7 @@ class AbuseFilterParser {
}
/**
- * @param $name
- * @param $value
- */
- public function setVar( $name, $value ) {
- $this->mVars->setVar( $name, $value );
- }
-
- /**
- * @param $vars
- */
- public function setVars( $vars ) {
- if ( is_array( $vars ) ) {
- foreach ( $vars as $name => $var ) {
- $this->setVar( $name, $var );
- }
- } elseif ( $vars instanceof AbuseFilterVariableHolder ) {
- $this->mVars->addHolders( $vars );
- }
- }
-
- /**
- * @return AFPToken
+ * Move to the next token
*/
protected function move() {
list( $this->mCur, $this->mPos ) = $this->mTokens[$this->mPos];
@@ -139,16 +138,9 @@ class AbuseFilterParser {
}
/**
- * @return mixed
* @throws AFPUserVisibleException
*/
protected function skipOverBraces() {
- if ( !( $this->mCur->type == AFPToken::TBRACE && $this->mCur->value == '(' ) ||
- !$this->mShortCircuit
- ) {
- return;
- }
-
$braces = 1;
while ( $this->mCur->type != AFPToken::TNONE && $braces > 0 ) {
$this->move();
@@ -166,7 +158,7 @@ class AbuseFilterParser {
}
/**
- * @param $code
+ * @param string $code
* @return bool
*/
public function parse( $code ) {
@@ -174,7 +166,7 @@ class AbuseFilterParser {
}
/**
- * @param $filter
+ * @param string $filter
* @return string
*/
public function evaluateExpression( $filter ) {
@@ -182,11 +174,11 @@ class AbuseFilterParser {
}
/**
- * @param $code
+ * @param string $code
* @return AFPData
*/
- function intEval( $code ) {
- // Setup, resetting
+ public function intEval( $code ) {
+ // Reset all class members to their default value
$this->mCode = $code;
$this->mTokens = AbuseFilterTokenizer::tokenize( $code );
$this->mPos = 0;
@@ -199,25 +191,12 @@ class AbuseFilterParser {
return $result;
}
- /**
- * @param $a
- * @param $b
- * @return int
- */
- static function lengthCompare( $a, $b ) {
- if ( strlen( $a ) == strlen( $b ) ) {
- return 0;
- }
-
- return ( strlen( $a ) < strlen( $b ) ) ? -1 : 1;
- }
-
/* Levels */
/**
* Handles unexpected characters after the expression
*
- * @param $result AFPData
+ * @param AFPData &$result
* @throws AFPUserVisibleException
*/
protected function doLevelEntry( &$result ) {
@@ -232,8 +211,9 @@ class AbuseFilterParser {
}
/**
- * Handles multiple expressions
- * @param $result AFPData
+ * Handles multiple expressions delimited by a semicolon
+ *
+ * @param AFPData &$result
*/
protected function doLevelSemicolon( &$result ) {
do {
@@ -245,9 +225,9 @@ class AbuseFilterParser {
}
/**
- * Handles multiple expressions
+ * Handles assignments (:=)
*
- * @param $result AFPData
+ * @param AFPData &$result
* @throws AFPUserVisibleException
*/
protected function doLevelSet( &$result ) {
@@ -269,11 +249,11 @@ class AbuseFilterParser {
[ $varname ]
);
}
- $list = $this->mVars->getVar( $varname );
- if ( $list->type != AFPData::DLIST ) {
- throw new AFPUserVisibleException( 'notlist', $this->mCur->pos, [] );
+ $array = $this->mVars->getVar( $varname );
+ if ( $array->type != AFPData::DARRAY ) {
+ throw new AFPUserVisibleException( 'notarray', $this->mCur->pos, [] );
}
- $list = $list->toList();
+ $array = $array->toArray();
$this->move();
if ( $this->mCur->type == AFPToken::TSQUAREBRACKET && $this->mCur->value == ']' ) {
$idx = 'new';
@@ -287,7 +267,7 @@ class AbuseFilterParser {
throw new AFPUserVisibleException( 'expectednotfound', $this->mCur->pos,
[ ']', $this->mCur->type, $this->mCur->value ] );
}
- if ( count( $list ) <= $idx ) {
+ if ( count( $array ) <= $idx ) {
throw new AFPUserVisibleException( 'outofbounds', $this->mCur->pos,
[ $idx, count( $result->data ) ] );
}
@@ -297,11 +277,11 @@ class AbuseFilterParser {
$this->move();
$this->doLevelSet( $result );
if ( $idx === 'new' ) {
- $list[] = $result;
+ $array[] = $result;
} else {
- $list[$idx] = $result;
+ $array[$idx] = $result;
}
- $this->setUserVariable( $varname, new AFPData( AFPData::DLIST, $list ) );
+ $this->setUserVariable( $varname, new AFPData( AFPData::DARRAY, $array ) );
return;
} else {
@@ -315,7 +295,9 @@ class AbuseFilterParser {
}
/**
- * @param $result AFPData
+ * Handles conditionals: if-then-else and ternary operator
+ *
+ * @param AFPData &$result
* @throws AFPUserVisibleException
*/
protected function doLevelConditions( &$result ) {
@@ -436,7 +418,9 @@ class AbuseFilterParser {
}
/**
- * @param $result AFPData
+ * Handles boolean operators (&, |, ^)
+ *
+ * @param AFPData &$result
*/
protected function doLevelBoolOps( &$result ) {
$this->doLevelCompares( $result );
@@ -446,7 +430,7 @@ class AbuseFilterParser {
$this->move();
$r2 = new AFPData();
- // We can go on quickly as either one statement with | is true or on with & is false
+ // We can go on quickly as either one statement with | is true or one with & is false
if ( ( $op == '&' && !$result->toBool() ) || ( $op == '|' && $result->toBool() ) ) {
$orig = $this->mShortCircuit;
$this->mShortCircuit = $this->mAllowShort;
@@ -463,7 +447,9 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * Handles comparison operators
+ *
+ * @param AFPData &$result
*/
protected function doLevelCompares( &$result ) {
$this->doLevelSumRels( $result );
@@ -474,7 +460,8 @@ class AbuseFilterParser {
$r2 = new AFPData();
$this->doLevelSumRels( $r2 );
if ( $this->mShortCircuit ) {
- break; // The result doesn't matter.
+ // The result doesn't matter.
+ break;
}
AbuseFilter::triggerLimiter();
$result = AFPData::compareOp( $result, $r2, $op );
@@ -482,7 +469,9 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * Handles sum-related operations (+ and -)
+ *
+ * @param AFPData &$result
*/
protected function doLevelSumRels( &$result ) {
$this->doLevelMulRels( $result );
@@ -493,7 +482,8 @@ class AbuseFilterParser {
$r2 = new AFPData();
$this->doLevelMulRels( $r2 );
if ( $this->mShortCircuit ) {
- break; // The result doesn't matter.
+ // The result doesn't matter.
+ break;
}
if ( $op == '+' ) {
$result = AFPData::sum( $result, $r2 );
@@ -505,7 +495,9 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * Handles multiplication-related operations (*, / and %)
+ *
+ * @param AFPData &$result
*/
protected function doLevelMulRels( &$result ) {
$this->doLevelPow( $result );
@@ -516,14 +508,17 @@ class AbuseFilterParser {
$r2 = new AFPData();
$this->doLevelPow( $r2 );
if ( $this->mShortCircuit ) {
- break; // The result doesn't matter.
+ // The result doesn't matter.
+ break;
}
$result = AFPData::mulRel( $result, $r2, $op, $this->mCur->pos );
}
}
/**
- * @param $result
+ * Handles powers (**)
+ *
+ * @param AFPData &$result
*/
protected function doLevelPow( &$result ) {
$this->doLevelBoolInvert( $result );
@@ -532,21 +527,25 @@ class AbuseFilterParser {
$expanent = new AFPData();
$this->doLevelBoolInvert( $expanent );
if ( $this->mShortCircuit ) {
- break; // The result doesn't matter.
+ // The result doesn't matter.
+ break;
}
$result = AFPData::pow( $result, $expanent );
}
}
/**
- * @param $result
+ * Handles boolean inversion (!)
+ *
+ * @param AFPData &$result
*/
protected function doLevelBoolInvert( &$result ) {
if ( $this->mCur->type == AFPToken::TOP && $this->mCur->value == '!' ) {
$this->move();
$this->doLevelSpecialWords( $result );
if ( $this->mShortCircuit ) {
- return; // The result doesn't matter.
+ // The result doesn't matter.
+ return;
}
$result = AFPData::boolInvert( $result );
} else {
@@ -555,13 +554,15 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * Handles keywords (in, like, rlike, contains, ...)
+ *
+ * @param AFPData &$result
*/
protected function doLevelSpecialWords( &$result ) {
$this->doLevelUnarys( $result );
$keyword = strtolower( $this->mCur->value );
if ( $this->mCur->type == AFPToken::TKEYWORD
- && in_array( $keyword, array_keys( self::$mKeywords ) )
+ && isset( self::$mKeywords[$keyword] )
) {
$func = self::$mKeywords[$keyword];
$this->move();
@@ -569,7 +570,8 @@ class AbuseFilterParser {
$this->doLevelUnarys( $r2 );
if ( $this->mShortCircuit ) {
- return; // The result doesn't matter.
+ // The result doesn't matter.
+ return;
}
AbuseFilter::triggerLimiter();
@@ -579,29 +581,34 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * Handles unary plus and minus, like in -5 or -(2 * +2)
+ *
+ * @param AFPData &$result
*/
protected function doLevelUnarys( &$result ) {
$op = $this->mCur->value;
if ( $this->mCur->type == AFPToken::TOP && ( $op == "+" || $op == "-" ) ) {
$this->move();
- $this->doLevelListElements( $result );
+ $this->doLevelArrayElements( $result );
if ( $this->mShortCircuit ) {
- return; // The result doesn't matter.
+ // The result doesn't matter.
+ return;
}
if ( $op == '-' ) {
$result = AFPData::unaryMinus( $result );
}
} else {
- $this->doLevelListElements( $result );
+ $this->doLevelArrayElements( $result );
}
}
/**
- * @param $result
+ * Handles array elements, parsing expressions like array[number]
+ *
+ * @param AFPData &$result
* @throws AFPUserVisibleException
*/
- protected function doLevelListElements( &$result ) {
+ protected function doLevelArrayElements( &$result ) {
$this->doLevelBraces( $result );
while ( $this->mCur->type == AFPToken::TSQUAREBRACKET && $this->mCur->value == '[' ) {
$idx = new AFPData();
@@ -611,21 +618,23 @@ class AbuseFilterParser {
[ ']', $this->mCur->type, $this->mCur->value ] );
}
$idx = $idx->toInt();
- if ( $result->type == AFPData::DLIST ) {
+ if ( $result->type == AFPData::DARRAY ) {
if ( count( $result->data ) <= $idx ) {
throw new AFPUserVisibleException( 'outofbounds', $this->mCur->pos,
[ $idx, count( $result->data ) ] );
}
$result = $result->data[$idx];
} else {
- throw new AFPUserVisibleException( 'notlist', $this->mCur->pos, [] );
+ throw new AFPUserVisibleException( 'notarray', $this->mCur->pos, [] );
}
$this->move();
}
}
/**
- * @param $result
+ * Handles brackets, only ( and )
+ *
+ * @param AFPData &$result
* @throws AFPUserVisibleException
*/
protected function doLevelBraces( &$result ) {
@@ -649,7 +658,9 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * Handles functions
+ *
+ * @param AFPData &$result
* @throws AFPUserVisibleException
*/
protected function doLevelFunction( &$result ) {
@@ -671,15 +682,21 @@ class AbuseFilterParser {
$this->skipOverBraces();
$this->move();
- return; // The result doesn't matter.
+ // The result doesn't matter.
+ return;
}
$args = [];
- do {
- $r = new AFPData();
- $this->doLevelSemicolon( $r );
- $args[] = $r;
- } while ( $this->mCur->type == AFPToken::TCOMMA );
+ $state = $this->getState();
+ $this->move();
+ if ( $this->mCur->type != AFPToken::TBRACE || $this->mCur->value != ')' ) {
+ $this->setState( $state );
+ do {
+ $r = new AFPData();
+ $this->doLevelSemicolon( $r );
+ $args[] = $r;
+ } while ( $this->mCur->type == AFPToken::TCOMMA );
+ }
if ( $this->mCur->type != AFPToken::TBRACE || $this->mCur->value != ')' ) {
throw new AFPUserVisibleException( 'expectednotfound',
@@ -713,9 +730,10 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * Handles the return value
+ *
+ * @param AFPData &$result
* @throws AFPUserVisibleException
- * @return AFPData
*/
protected function doLevelAtom( &$result ) {
$tok = $this->mCur->value;
@@ -752,14 +770,16 @@ class AbuseFilterParser {
}
break;
case AFPToken::TNONE:
- return; // Handled at entry level
+ // Handled at entry level
+ return;
case AFPToken::TBRACE:
if ( $this->mCur->value == ')' ) {
- return; // Handled at the entry level
+ // Handled at the entry level
+ return;
}
case AFPToken::TSQUAREBRACKET:
if ( $this->mCur->value == '[' ) {
- $list = [];
+ $array = [];
while ( true ) {
$this->move();
if ( $this->mCur->type == AFPToken::TSQUAREBRACKET && $this->mCur->value == ']' ) {
@@ -767,7 +787,7 @@ class AbuseFilterParser {
}
$item = new AFPData();
$this->doLevelSet( $item );
- $list[] = $item;
+ $array[] = $item;
if ( $this->mCur->type == AFPToken::TSQUAREBRACKET && $this->mCur->value == ']' ) {
break;
}
@@ -779,7 +799,7 @@ class AbuseFilterParser {
);
}
}
- $result = new AFPData( AFPData::DLIST, $list );
+ $result = new AFPData( AFPData::DARRAY, $array );
break;
}
default:
@@ -798,19 +818,28 @@ class AbuseFilterParser {
/* End of levels */
/**
- * @param $var
+ * @param string $var
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function getVarValue( $var ) {
$var = strtolower( $var );
$builderValues = AbuseFilter::getBuilderValues();
+ $deprecatedVars = AbuseFilter::getDeprecatedVariables();
+ if ( array_key_exists( $var, $deprecatedVars ) ) {
+ $logger = LoggerFactory::getInstance( 'AbuseFilterDeprecatedVars' );
+ $logger->debug( "AbuseFilter: deprecated variable $var used." );
+ $var = $deprecatedVars[$var];
+ }
if ( !( array_key_exists( $var, $builderValues['vars'] )
|| $this->mVars->varIsSet( $var ) )
) {
+ $msg = array_key_exists( $var, AbuseFilter::$disabledVars ) ?
+ 'disabledvar' :
+ 'unrecognisedvar';
// If the variable is invalid, throw an exception
throw new AFPUserVisibleException(
- 'unrecognisedvar',
+ $msg,
$this->mCur->pos,
[ $var ]
);
@@ -820,13 +849,18 @@ class AbuseFilterParser {
}
/**
- * @param $name
- * @param $value
+ * @param string $name
+ * @param mixed $value
* @throws AFPUserVisibleException
*/
protected function setUserVariable( $name, $value ) {
$builderValues = AbuseFilter::getBuilderValues();
- if ( array_key_exists( $name, $builderValues['vars'] ) ) {
+ $deprecatedVars = AbuseFilter::getDeprecatedVariables();
+ $blacklistedValues = AbuseFilterVariableHolder::$varBlacklist;
+ if ( array_key_exists( $name, $builderValues['vars'] ) ||
+ array_key_exists( $name, AbuseFilter::$disabledVars ) ||
+ array_key_exists( $name, $deprecatedVars ) ||
+ in_array( $name, $blacklistedValues ) ) {
throw new AFPUserVisibleException( 'overridebuiltin', $this->mCur->pos, [ $name ] );
}
$this->mVars->setVar( $name, $value );
@@ -835,17 +869,17 @@ class AbuseFilterParser {
// Built-in functions
/**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function funcLc( $args ) {
global $wgContLang;
- if ( count( $args ) < 1 ) {
+ if ( count( $args ) === 0 ) {
throw new AFPUserVisibleException(
- 'notenoughargs',
+ 'noparams',
$this->mCur->pos,
- [ 'lc', 2, count( $args ) ]
+ [ 'lc', 1 ]
);
}
$s = $args[0]->toString();
@@ -854,17 +888,17 @@ class AbuseFilterParser {
}
/**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function funcUc( $args ) {
global $wgContLang;
- if ( count( $args ) < 1 ) {
+ if ( count( $args ) === 0 ) {
throw new AFPUserVisibleException(
- 'notenoughargs',
+ 'noparams',
$this->mCur->pos,
- [ 'uc', 2, count( $args ) ]
+ [ 'uc', 1 ]
);
}
$s = $args[0]->toString();
@@ -873,20 +907,20 @@ class AbuseFilterParser {
}
/**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function funcLen( $args ) {
- if ( count( $args ) < 1 ) {
+ if ( count( $args ) === 0 ) {
throw new AFPUserVisibleException(
- 'notenoughargs',
+ 'noparams',
$this->mCur->pos,
- [ 'len', 2, count( $args ) ]
+ [ 'len', 1 ]
);
}
- if ( $args[0]->type == AFPData::DLIST ) {
- // Don't use toString on lists, but count
+ if ( $args[0]->type == AFPData::DARRAY ) {
+ // Don't use toString on arrays, but count
return new AFPData( AFPData::DINT, count( $args[0]->data ) );
}
$s = $args[0]->toString();
@@ -895,37 +929,16 @@ class AbuseFilterParser {
}
/**
- * @param $args
- * @return AFPData
- * @throws AFPUserVisibleException
- */
- protected function funcSimpleNorm( $args ) {
- if ( count( $args ) < 1 ) {
- throw new AFPUserVisibleException(
- 'notenoughargs',
- $this->mCur->pos,
- [ 'simplenorm', 2, count( $args ) ]
- );
- }
- $s = $args[0]->toString();
-
- $s = preg_replace( '/[\d\W]+/', '', $s );
- $s = strtolower( $s );
-
- return new AFPData( AFPData::DSTRING, $s );
- }
-
- /**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function funcSpecialRatio( $args ) {
- if ( count( $args ) < 1 ) {
+ if ( count( $args ) === 0 ) {
throw new AFPUserVisibleException(
- 'notenoughargs',
+ 'noparams',
$this->mCur->pos,
- [ 'specialratio', 1, count( $args ) ]
+ [ 'specialratio', 1 ]
);
}
$s = $args[0]->toString();
@@ -942,20 +955,20 @@ class AbuseFilterParser {
}
/**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function funcCount( $args ) {
- if ( count( $args ) < 1 ) {
+ if ( count( $args ) === 0 ) {
throw new AFPUserVisibleException(
- 'notenoughargs',
+ 'noparams',
$this->mCur->pos,
- [ 'count', 1, count( $args ) ]
+ [ 'count', 1 ]
);
}
- if ( $args[0]->type == AFPData::DLIST && count( $args ) == 1 ) {
+ if ( $args[0]->type == AFPData::DARRAY && count( $args ) == 1 ) {
return new AFPData( AFPData::DINT, count( $args[0]->data ) );
}
@@ -965,7 +978,7 @@ class AbuseFilterParser {
$needle = $args[0]->toString();
$haystack = $args[1]->toString();
- // Bug #60203: Keep empty parameters from causing PHP warnings
+ // T62203: Keep empty parameters from causing PHP warnings
if ( $needle === '' ) {
$count = 0;
} else {
@@ -977,17 +990,17 @@ class AbuseFilterParser {
}
/**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
* @throws Exception
*/
protected function funcRCount( $args ) {
- if ( count( $args ) < 1 ) {
+ if ( count( $args ) === 0 ) {
throw new AFPUserVisibleException(
- 'notenoughargs',
+ 'noparams',
$this->mCur->pos,
- [ 'rcount', 1, count( $args ) ]
+ [ 'rcount', 1 ]
);
}
@@ -997,18 +1010,20 @@ class AbuseFilterParser {
$needle = $args[0]->toString();
$haystack = $args[1]->toString();
- # Munge the regex
+ // Munge the regex
$needle = preg_replace( '!(\\\\\\\\)*(\\\\)?/!', '$1\/', $needle );
$needle = "/$needle/u";
- // Omit the '$matches' argument to avoid computing them, just count.
+ // Suppress and restore needed per T177744
+ Wikimedia\suppressWarnings();
$count = preg_match_all( $needle, $haystack );
+ Wikimedia\restoreWarnings();
if ( $count === false ) {
throw new AFPUserVisibleException(
'regexfailure',
$this->mCur->pos,
- [ 'unspecified error in preg_match_all()', $needle ]
+ [ $needle ]
);
}
}
@@ -1017,7 +1032,60 @@ class AbuseFilterParser {
}
/**
- * @param $args
+ * Returns an array of matches of needle in the haystack, the first one for the whole regex,
+ * the other ones for every capturing group.
+ *
+ * @param array $args
+ * @return AFPData An array of matches.
+ * @throws AFPUserVisibleException
+ */
+ protected function funcGetMatches( $args ) {
+ if ( count( $args ) < 2 ) {
+ throw new AFPUserVisibleException(
+ 'notenoughargs',
+ $this->mCur->pos,
+ [ 'get_matches', 2, count( $args ) ]
+ );
+ }
+ $needle = $args[0]->toString();
+ $haystack = $args[1]->toString();
+
+ // Count the amount of capturing groups in the submitted pattern.
+ // This way we can return a fixed-dimension array, much easier to manage.
+ // First, strip away escaped parentheses
+ $sanitized = preg_replace( '/(\\\\\\\\)*\\\\\(/', '', $needle );
+ // Then strip starting parentheses of non-capturing groups
+ // (also atomics, lookahead and so on, even if not every of them is supported)
+ $sanitized = preg_replace( '/\(\?/', '', $sanitized );
+ // Finally create an array of falses with dimension = # of capturing groups
+ $groupscount = substr_count( $sanitized, '(' ) + 1;
+ $falsy = array_fill( 0, $groupscount, false );
+
+ // Munge the regex by escaping slashes
+ $needle = preg_replace( '!(\\\\\\\\)*(\\\\)?/!', '$1\/', $needle );
+ $needle = "/$needle/u";
+
+ // Suppress and restore are here for the same reason as T177744
+ Wikimedia\suppressWarnings();
+ $check = preg_match( $needle, $haystack, $matches );
+ Wikimedia\restoreWarnings();
+
+ if ( $check === false ) {
+ throw new AFPUserVisibleException(
+ 'regexfailure',
+ $this->mCur->pos,
+ [ $needle ]
+ );
+ }
+
+ // Returned array has non-empty positions identical to the ones returned
+ // by the third parameter of a standard preg_match call ($matches in this case).
+ // We want an union with falsy to return a fixed-dimension array.
+ return AFPData::newFromPHPVar( $matches + $falsy );
+ }
+
+ /**
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1033,22 +1101,30 @@ class AbuseFilterParser {
$ip = $args[0]->toString();
$range = $args[1]->toString();
+ if ( !IP::isValidRange( $range ) ) {
+ throw new AFPUserVisibleException(
+ 'invalidiprange',
+ $this->mCur->pos,
+ [ $range ]
+ );
+ }
+
$result = IP::isInRange( $ip, $range );
return new AFPData( AFPData::DBOOL, $result );
}
/**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function funcCCNorm( $args ) {
- if ( count( $args ) < 1 ) {
+ if ( count( $args ) === 0 ) {
throw new AFPUserVisibleException(
- 'notenoughargs',
+ 'noparams',
$this->mCur->pos,
- [ 'ccnorm', 1, count( $args ) ]
+ [ 'ccnorm', 1 ]
);
}
$s = $args[0]->toString();
@@ -1060,7 +1136,28 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
+ * @return AFPData
+ * @throws AFPUserVisibleException
+ */
+ protected function funcSanitize( $args ) {
+ if ( count( $args ) === 0 ) {
+ throw new AFPUserVisibleException(
+ 'noparams',
+ $this->mCur->pos,
+ [ 'sanitize', 1 ]
+ );
+ }
+ $s = $args[0]->toString();
+
+ $s = html_entity_decode( $s, ENT_QUOTES, 'UTF-8' );
+ $s = Sanitizer::decodeCharReferences( $s );
+
+ return new AFPData( AFPData::DSTRING, $s );
+ }
+
+ /**
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1074,53 +1171,177 @@ class AbuseFilterParser {
}
$s = array_shift( $args );
- $s = $s->toString();
- $searchStrings = [];
+ return new AFPData( AFPData::DBOOL, self::contains( $s, $args, true ) );
+ }
- foreach ( $args as $arg ) {
- $searchStrings[] = $arg->toString();
+ /**
+ * @param array $args
+ * @return AFPData
+ * @throws AFPUserVisibleException
+ */
+ protected function funcContainsAll( $args ) {
+ if ( count( $args ) < 2 ) {
+ throw new AFPUserVisibleException(
+ 'notenoughargs',
+ $this->mCur->pos,
+ [ 'contains_all', 2, count( $args ) ]
+ );
}
- if ( function_exists( 'fss_prep_search' ) ) {
- $fss = fss_prep_search( $searchStrings );
- $result = fss_exec_search( $fss, $s );
+ $s = array_shift( $args );
- $ok = is_array( $result );
- } else {
- $ok = false;
- foreach ( $searchStrings as $needle ) {
- // Bug #60203: Keep empty parameters from causing PHP warnings
- if ( $needle !== '' && strpos( $s, $needle ) !== false ) {
- $ok = true;
- break;
- }
+ return new AFPData( AFPData::DBOOL, self::contains( $s, $args, false, false ) );
+ }
+
+ /**
+ * Normalize and search a string for multiple substrings in OR mode
+ *
+ * @param array $args
+ * @return AFPData
+ * @throws AFPUserVisibleException
+ */
+ protected function funcCCNormContainsAny( $args ) {
+ if ( count( $args ) < 2 ) {
+ throw new AFPUserVisibleException(
+ 'notenoughargs',
+ $this->mCur->pos,
+ [ 'ccnorm_contains_any', 2, count( $args ) ]
+ );
+ }
+
+ $s = array_shift( $args );
+
+ return new AFPData( AFPData::DBOOL, self::contains( $s, $args, true, true ) );
+ }
+
+ /**
+ * Normalize and search a string for multiple substrings in AND mode
+ *
+ * @param array $args
+ * @return AFPData
+ * @throws AFPUserVisibleException
+ */
+ protected function funcCCNormContainsAll( $args ) {
+ if ( count( $args ) < 2 ) {
+ throw new AFPUserVisibleException(
+ 'notenoughargs',
+ $this->mCur->pos,
+ [ 'ccnorm_contains_all', 2, count( $args ) ]
+ );
+ }
+
+ $s = array_shift( $args );
+
+ return new AFPData( AFPData::DBOOL, self::contains( $s, $args, false, true ) );
+ }
+
+ /**
+ * Search for substrings in a string
+ *
+ * Use is_any to determine wether to use logic OR (true) or AND (false).
+ *
+ * Use normalize = true to make use of ccnorm and
+ * normalize both sides of the search.
+ *
+ * @param AFPData $string
+ * @param AFPData[] $values
+ * @param bool $is_any
+ * @param bool $normalize
+ *
+ * @return bool
+ */
+ protected static function contains( $string, $values, $is_any = true, $normalize = false ) {
+ $string = $string->toString();
+
+ if ( $string === '' ) {
+ return false;
+ }
+
+ if ( $normalize ) {
+ $string = self::ccnorm( $string );
+ }
+
+ foreach ( $values as $needle ) {
+ $needle = $needle->toString();
+ if ( $normalize ) {
+ $needle = self::ccnorm( $needle );
+ }
+ if ( $needle === '' ) {
+ // T62203: Keep empty parameters from causing PHP warnings
+ continue;
+ }
+
+ $is_found = strpos( $string, $needle ) !== false;
+ if ( $is_found === $is_any ) {
+ // If I'm here and it's ANY (OR) => something is found.
+ // If I'm here and it's ALL (AND) => nothing is found.
+ // In both cases, we've had enough.
+ return $is_found;
}
}
- return new AFPData( AFPData::DBOOL, $ok );
+ // If I'm here and it's ANY (OR) => nothing was found: return false ($is_any is true)
+ // If I'm here and it's ALL (AND) => everything was found: return true ($is_any is false)
+ return ! $is_any;
}
/**
- * @param $s
- * @return mixed
+ * @param array $args
+ * @return AFPData
+ * @throws AFPUserVisibleException
*/
- protected function ccnorm( $s ) {
- if ( is_callable( 'AntiSpoof::normalizeString' ) ) {
- $s = AntiSpoof::normalizeString( $s );
- } else {
- // AntiSpoof isn't available, so ignore and return same string
- wfDebugLog(
- 'AbuseFilter',
- "Can't compute normalized string (ccnorm) as the AntiSpoof Extension isn't installed."
+ protected function funcEqualsToAny( $args ) {
+ if ( count( $args ) < 2 ) {
+ throw new AFPUserVisibleException(
+ 'notenoughargs',
+ $this->mCur->pos,
+ [ 'equals_to_any', 2, count( $args ) ]
);
}
- return $s;
+ $s = array_shift( $args );
+
+ return new AFPData( AFPData::DBOOL, self::equalsToAny( $s, $args ) );
}
/**
- * @param $s string
+ * Check if the given string is equals to any of the following strings
+ *
+ * @param AFPData $string
+ * @param AFPData[] $values
+ *
+ * @return bool
+ */
+ protected static function equalsToAny( $string, $values ) {
+ $string = $string->toString();
+
+ foreach ( $values as $needle ) {
+ $needle = $needle->toString();
+
+ if ( $string === $needle ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * @param string $s
+ * @return mixed
+ */
+ protected static function ccnorm( $s ) {
+ // Instantiate a single version of the equivset so the data is only loaded once.
+ if ( !self::$equivset ) {
+ self::$equivset = new Equivset();
+ }
+
+ return self::$equivset->normalize( $s );
+ }
+
+ /**
+ * @param string $s
* @return array|string
*/
protected function rmspecials( $s ) {
@@ -1128,7 +1349,7 @@ class AbuseFilterParser {
}
/**
- * @param $s string
+ * @param string $s
* @return array|string
*/
protected function rmdoubles( $s ) {
@@ -1136,7 +1357,7 @@ class AbuseFilterParser {
}
/**
- * @param $s string
+ * @param string $s
* @return array|string
*/
protected function rmwhitespace( $s ) {
@@ -1144,16 +1365,16 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function funcRMSpecials( $args ) {
- if ( count( $args ) < 1 ) {
+ if ( count( $args ) === 0 ) {
throw new AFPUserVisibleException(
- 'notenoughargs',
+ 'noparams',
$this->mCur->pos,
- [ 'rmspecials', 1, count( $args ) ]
+ [ 'rmspecials', 1 ]
);
}
$s = $args[0]->toString();
@@ -1164,16 +1385,16 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function funcRMWhitespace( $args ) {
- if ( count( $args ) < 1 ) {
+ if ( count( $args ) === 0 ) {
throw new AFPUserVisibleException(
- 'notenoughargs',
+ 'noparams',
$this->mCur->pos,
- [ 'rmwhitespace', 1, count( $args ) ]
+ [ 'rmwhitespace', 1 ]
);
}
$s = $args[0]->toString();
@@ -1184,16 +1405,16 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function funcRMDoubles( $args ) {
- if ( count( $args ) < 1 ) {
+ if ( count( $args ) === 0 ) {
throw new AFPUserVisibleException(
- 'notenoughargs',
+ 'noparams',
$this->mCur->pos,
- [ 'rmdoubles', 1, count( $args ) ]
+ [ 'rmdoubles', 1 ]
);
}
$s = $args[0]->toString();
@@ -1204,16 +1425,16 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function funcNorm( $args ) {
- if ( count( $args ) < 1 ) {
+ if ( count( $args ) === 0 ) {
throw new AFPUserVisibleException(
- 'notenoughargs',
+ 'noparams',
$this->mCur->pos,
- [ 'norm', 1, count( $args ) ]
+ [ 'norm', 1 ]
);
}
$s = $args[0]->toString();
@@ -1227,7 +1448,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1255,7 +1476,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1271,7 +1492,7 @@ class AbuseFilterParser {
$haystack = $args[0]->toString();
$needle = $args[1]->toString();
- // Bug #60203: Keep empty parameters from causing PHP warnings
+ // T62203: Keep empty parameters from causing PHP warnings
if ( $needle === '' ) {
return new AFPData( AFPData::DINT, -1 );
}
@@ -1292,7 +1513,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1313,14 +1534,17 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function funcStrRegexEscape( $args ) {
- if ( count( $args ) < 1 ) {
- throw new AFPUserVisibleException( 'notenoughargs', $this->mCur->pos,
- [ 'rescape', 1, count( $args ) ] );
+ if ( count( $args ) === 0 ) {
+ throw new AFPUserVisibleException(
+ 'noparams',
+ $this->mCur->pos,
+ [ 'rescape', 1 ]
+ );
}
$string = $args[0]->toString();
@@ -1331,7 +1555,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return mixed
* @throws AFPUserVisibleException
*/
@@ -1353,13 +1577,17 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function castString( $args ) {
- if ( count( $args ) < 1 ) {
- throw new AFPUserVisibleException( 'noparams', $this->mCur->pos, [ __METHOD__ ] );
+ if ( count( $args ) === 0 ) {
+ throw new AFPUserVisibleException(
+ 'noparams',
+ $this->mCur->pos,
+ [ 'string', 1 ]
+ );
}
$val = $args[0];
@@ -1367,13 +1595,17 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function castInt( $args ) {
- if ( count( $args ) < 1 ) {
- throw new AFPUserVisibleException( 'noparams', $this->mCur->pos, [ __METHOD__ ] );
+ if ( count( $args ) === 0 ) {
+ throw new AFPUserVisibleException(
+ 'noparams',
+ $this->mCur->pos,
+ [ 'int', 1 ]
+ );
}
$val = $args[0];
@@ -1381,13 +1613,17 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function castFloat( $args ) {
- if ( count( $args ) < 1 ) {
- throw new AFPUserVisibleException( 'noparams', $this->mCur->pos, [ __METHOD__ ] );
+ if ( count( $args ) === 0 ) {
+ throw new AFPUserVisibleException(
+ 'noparams',
+ $this->mCur->pos,
+ [ 'float', 1 ]
+ );
}
$val = $args[0];
@@ -1395,13 +1631,17 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
protected function castBool( $args ) {
- if ( count( $args ) < 1 ) {
- throw new AFPUserVisibleException( 'noparams', $this->mCur->pos, [ __METHOD__ ] );
+ if ( count( $args ) === 0 ) {
+ throw new AFPUserVisibleException(
+ 'noparams',
+ $this->mCur->pos,
+ [ 'bool', 1 ]
+ );
}
$val = $args[0];
diff --git a/AbuseFilter/includes/parser/AbuseFilterTokenizer.php b/AbuseFilter/includes/parser/AbuseFilterTokenizer.php
index 025314e8..d95a6864 100644
--- a/AbuseFilter/includes/parser/AbuseFilterTokenizer.php
+++ b/AbuseFilter/includes/parser/AbuseFilterTokenizer.php
@@ -19,15 +19,24 @@ class AbuseFilterTokenizer {
// ** comes before *, etc. They are sorted to make it easy to spot
// such errors.
public static $operators = [
- '!==', '!=', '!', // Inequality
- '**', '*', // Multiplication/exponentiation
- '/', '+', '-', '%', // Other arithmetic
- '&', '|', '^', // Logic
- ':=', // Setting
- '?', ':', // Ternery
- '<=', '<', // Less than
- '>=', '>', // Greater than
- '===', '==', '=', // Equality
+ // Inequality
+ '!==', '!=', '!',
+ // Multiplication/exponentiation
+ '**', '*',
+ // Other arithmetic
+ '/', '+', '-', '%',
+ // Logic
+ '&', '|', '^',
+ // Setting
+ ':=',
+ // Ternary
+ '?', ':',
+ // Less than
+ '<=', '<',
+ // Greater than
+ '>=', '>',
+ // Equality
+ '===', '==', '=',
];
public static $punctuation = [
@@ -63,7 +72,7 @@ class AbuseFilterTokenizer {
* @throws AFPException
* @throws AFPUserVisibleException
*/
- static function tokenize( $code ) {
+ public static function tokenize( $code ) {
static $tokenizerCache = null;
if ( !$tokenizerCache ) {
@@ -113,6 +122,10 @@ class AbuseFilterTokenizer {
// Read past comments
while ( preg_match( self::COMMENT_START_RE, $code, $matches, 0, $offset ) ) {
+ if ( strpos( $code, '*/', $offset ) === false ) {
+ throw new AFPUserVisibleException(
+ 'unclosedcomment', $offset, [] );
+ }
$offset = strpos( $code, '*/', $offset ) + 2;
}
@@ -148,7 +161,7 @@ class AbuseFilterTokenizer {
if ( preg_match( self::RADIX_RE, $code, $matches, 0, $offset ) ) {
$token = $matches[0];
$input = $matches[1];
- $baseChar = isset( $matches[2] ) ? $matches[2] : null;
+ $baseChar = $matches[2] ?? null;
// Sometimes the base char gets mixed in with the rest of it because
// the regex targets hex, too.
// This mostly happens with binary
@@ -233,7 +246,8 @@ class AbuseFilterTokenizer {
if ( preg_match( '/^[0-9A-Fa-f]{2}$/', $chr ) ) {
$chr = base_convert( $chr, 16, 10 );
$token .= chr( $chr );
- $offset += 2; # \xXX -- 2 done later
+ // \xXX -- 2 done later
+ $offset += 2;
} else {
$token .= 'x';
}
@@ -245,6 +259,7 @@ class AbuseFilterTokenizer {
$offset += 2;
} else {
+ // Should never happen
$token .= $code[$offset];
$offset++;
}
diff --git a/AbuseFilter/includes/special/SpecialAbuseFilter.php b/AbuseFilter/includes/special/SpecialAbuseFilter.php
index 04d58191..ccd2f8ee 100644
--- a/AbuseFilter/includes/special/SpecialAbuseFilter.php
+++ b/AbuseFilter/includes/special/SpecialAbuseFilter.php
@@ -7,10 +7,16 @@ class SpecialAbuseFilter extends SpecialPage {
parent::__construct( 'AbuseFilter', 'abusefilter-view' );
}
+ /**
+ * @return bool
+ */
public function doesWrites() {
return true;
}
+ /**
+ * @param string|null $subpage
+ */
public function execute( $subpage ) {
$out = $this->getOutput();
$request = $this->getRequest();
@@ -23,7 +29,6 @@ class SpecialAbuseFilter extends SpecialPage {
$this->loadParameters( $subpage );
$out->setPageTitle( $this->msg( 'abusefilter-management' ) );
- // Are we allowed?
$this->checkPermissions();
if ( $request->getVal( 'result' ) == 'success' ) {
@@ -83,8 +88,9 @@ class SpecialAbuseFilter extends SpecialPage {
$view = 'AbuseFilterViewHistory';
$pageType = 'recentchanges';
} elseif ( count( $params ) == 2 ) {
- # Second param is a filter ID
+ // Second param is a filter ID
$view = 'AbuseFilterViewHistory';
+ $pageType = 'recentchanges';
$this->mFilter = $params[1];
} elseif ( count( $params ) == 4 && $params[2] == 'item' ) {
$this->mFilter = $params[1];
@@ -108,14 +114,18 @@ class SpecialAbuseFilter extends SpecialPage {
}
// Links at the top
- AbuseFilter::addNavigationLinks( $this->getContext(), $pageType );
+ AbuseFilter::addNavigationLinks(
+ $this->getContext(), $pageType, $this->getLinkRenderer() );
/** @var AbuseFilterView $v */
$v = new $view( $this, $params );
$v->show();
}
- function loadParameters( $subpage ) {
+ /**
+ * @param string|null $subpage
+ */
+ public function loadParameters( $subpage ) {
$filter = $subpage;
if ( !is_numeric( $filter ) && $filter != 'new' ) {
@@ -124,6 +134,9 @@ class SpecialAbuseFilter extends SpecialPage {
$this->mFilter = $filter;
}
+ /**
+ * @return string
+ */
protected function getGroupName() {
return 'wiki';
}
diff --git a/AbuseFilter/includes/special/SpecialAbuseLog.php b/AbuseFilter/includes/special/SpecialAbuseLog.php
index a8eac3a0..ab2e2cbc 100644
--- a/AbuseFilter/includes/special/SpecialAbuseLog.php
+++ b/AbuseFilter/includes/special/SpecialAbuseLog.php
@@ -6,30 +6,74 @@ class SpecialAbuseLog extends SpecialPage {
*/
protected $mSearchUser;
+ protected $mSearchPeriodStart;
+
+ protected $mSearchPeriodEnd;
+
/**
* @var Title
*/
protected $mSearchTitle;
+ /**
+ * @var string
+ */
+ protected $mSearchAction;
+
+ /**
+ * @var string
+ */
+ protected $mSearchActionTaken;
+
protected $mSearchWiki;
protected $mSearchFilter;
protected $mSearchEntries;
+ protected $mSearchImpact;
+
public function __construct() {
parent::__construct( 'AbuseLog', 'abusefilter-log' );
}
+ /**
+ * @return bool
+ */
public function doesWrites() {
return true;
}
+ /**
+ * Main routine
+ *
+ * $parameter string is converted into the $args array, which can come in
+ * three shapes:
+ *
+ * An array of size 2: only if the URL is like Special:AbuseLog/private/id
+ * where id is the log identifier. In this case, the private details of the
+ * log (e.g. IP address) will be shown.
+ *
+ * An array of size 1: either the URL is like Special:AbuseLog/id where
+ * the id is log identifier, in which case the details of the log except for
+ * private bits (e.g. IP address) are shown, or the URL is incomplete as in
+ * Special:AbuseLog/private (without speciying id), in which case a warning
+ * is shown to the user
+ *
+ * An array of size 0 when URL is like Special:AbuseLog or an array of size
+ * 1 when the URL is like Special:AbuseFilter/ (i.e. without anything after
+ * the slash). In this case, if the parameter `hide` was passed, it will be
+ * used as the identifier of the log entry that we want to hide; otherwise,
+ * the abuse logs are shown as a list, with a search form above the list.
+ *
+ * @param string $parameter URL parameters
+ */
public function execute( $parameter ) {
$out = $this->getOutput();
$request = $this->getRequest();
- AbuseFilter::addNavigationLinks( $this->getContext(), 'log' );
+ AbuseFilter::addNavigationLinks(
+ $this->getContext(), 'log', $this->getLinkRenderer() );
$this->setHeaders();
$this->outputHeader( 'abusefilter-log-summary' );
@@ -46,7 +90,6 @@ class SpecialAbuseLog extends SpecialPage {
$errors = $this->getPageTitle()->getUserPermissionsErrors(
'abusefilter-log', $this->getUser(), true, [ 'ns-specialprotected' ] );
if ( count( $errors ) ) {
- // Go away.
$out->showPermissionsErrorPage( $errors, 'abusefilter-log' );
return;
@@ -54,68 +97,153 @@ class SpecialAbuseLog extends SpecialPage {
$detailsid = $request->getIntOrNull( 'details' );
$hideid = $request->getIntOrNull( 'hide' );
+ $args = explode( '/', $parameter );
- if ( $parameter ) {
- $detailsid = $parameter;
- }
-
- if ( $detailsid ) {
- $this->showDetails( $detailsid );
- } elseif ( $hideid ) {
- $this->showHideForm( $hideid );
+ if ( count( $args ) === 2 && $args[0] === 'private' ) {
+ $this->showPrivateDetails( $args[1] );
+ } elseif ( count( $args ) === 1 && $args[0] !== '' ) {
+ if ( $args[0] === 'private' ) {
+ $out->addWikiMsg( 'abusefilter-invalid-request-noid' );
+ } else {
+ $this->showDetails( $args[0] );
+ }
} else {
- // Show the search form.
- $this->searchForm();
-
- // Show the log itself.
- $this->showList();
+ if ( $hideid ) {
+ $this->showHideForm( $hideid );
+ } else {
+ $this->searchForm();
+ $this->showList();
+ }
}
}
- function loadParameters() {
- global $wgAbuseFilterIsCentral;
-
+ /**
+ * Loads parameters from request
+ */
+ public function loadParameters() {
$request = $this->getRequest();
- $this->mSearchUser = trim( $request->getText( 'wpSearchUser' ) );
- if ( $wgAbuseFilterIsCentral ) {
+ $searchUsername = trim( $request->getText( 'wpSearchUser' ) );
+ $userTitle = Title::newFromText( $searchUsername, NS_USER );
+ $this->mSearchUser = $userTitle ? $userTitle->getText() : null;
+ if ( $this->getConfig()->get( 'AbuseFilterIsCentral' ) ) {
$this->mSearchWiki = $request->getText( 'wpSearchWiki' );
}
- $u = User::newFromName( $this->mSearchUser );
- if ( $u ) {
- $this->mSearchUser = $u->getName(); // Username normalisation
- } elseif ( IP::isIPAddress( $this->mSearchUser ) ) {
- // It's an IP
- $this->mSearchUser = IP::sanitizeIP( $this->mSearchUser );
- } else {
- $this->mSearchUser = null;
- }
-
+ $this->mSearchPeriodStart = $request->getText( 'wpSearchPeriodStart' );
+ $this->mSearchPeriodEnd = $request->getText( 'wpSearchPeriodEnd' );
$this->mSearchTitle = $request->getText( 'wpSearchTitle' );
$this->mSearchFilter = null;
+ $this->mSearchAction = $request->getText( 'wpSearchAction' );
+ $this->mSearchActionTaken = $request->getText( 'wpSearchActionTaken' );
if ( self::canSeeDetails() ) {
$this->mSearchFilter = $request->getText( 'wpSearchFilter' );
}
$this->mSearchEntries = $request->getText( 'wpSearchEntries' );
+ $this->mSearchImpact = $request->getText( 'wpSearchImpact' );
}
- function searchForm() {
- global $wgAbuseFilterIsCentral;
+ /**
+ * @return string[]
+ */
+ private function getAllActions() {
+ $config = $this->getConfig();
+ return array_unique(
+ array_merge(
+ array_keys( $config->get( 'AbuseFilterActions' ) ),
+ array_keys( $config->get( 'AbuseFilterCustomActionsHandlers' ) )
+ )
+ );
+ }
+
+ /**
+ * @return string[]
+ */
+ private function getAllFilterableActions() {
+ return [
+ 'edit',
+ 'move',
+ 'upload',
+ 'stashupload',
+ 'delete',
+ 'createaccount',
+ 'autocreateaccount',
+ ];
+ }
+ /**
+ * Builds the search form
+ */
+ public function searchForm() {
$formDescriptor = [
'SearchUser' => [
'label-message' => 'abusefilter-log-search-user',
'type' => 'user',
+ 'ipallowed' => true,
'default' => $this->mSearchUser,
],
+ 'SearchPeriodStart' => [
+ 'label-message' => 'abusefilter-test-period-start',
+ 'type' => 'datetime',
+ 'default' => $this->mSearchPeriodStart
+ ],
+ 'SearchPeriodEnd' => [
+ 'label-message' => 'abusefilter-test-period-end',
+ 'type' => 'datetime',
+ 'default' => $this->mSearchPeriodEnd
+ ],
'SearchTitle' => [
'label-message' => 'abusefilter-log-search-title',
'type' => 'title',
'default' => $this->mSearchTitle,
- ]
+ 'required' => false
+ ],
+ 'SearchImpact' => [
+ 'label-message' => 'abusefilter-log-search-impact',
+ 'type' => 'select',
+ 'options' => [
+ $this->msg( 'abusefilter-log-search-impact-all' )->text() => 0,
+ $this->msg( 'abusefilter-log-search-impact-saved' )->text() => 1,
+ $this->msg( 'abusefilter-log-search-impact-not-saved' )->text() => 2,
+ ],
+ ],
+ ];
+ $filterableActions = $this->getAllFilterableActions();
+ $actions = array_combine( $filterableActions, $filterableActions );
+ $actions[ $this->msg( 'abusefilter-log-search-action-other' )->text() ] = 'other';
+ $actions[ $this->msg( 'abusefilter-log-search-action-any' )->text() ] = 'any';
+ $formDescriptor['SearchAction'] = [
+ 'label-message' => 'abusefilter-log-search-action-label',
+ 'type' => 'select',
+ 'options' => $actions,
+ 'default' => 'any',
+ ];
+ $options = [
+ $this->msg( 'abusefilter-log-noactions' )->text() => 'noactions',
+ $this->msg( 'abusefilter-log-search-action-taken-any' )->text() => '',
];
+ foreach ( $this->getAllActions() as $action ) {
+ $key = AbuseFilter::getActionDisplay( $action );
+ $options[$key] = $action;
+ }
+ ksort( $options );
+ $formDescriptor['SearchActionTaken'] = [
+ 'label-message' => 'abusefilter-log-search-action-taken-label',
+ 'type' => 'select',
+ 'options' => $options,
+ ];
+ if ( self::canSeeHidden() ) {
+ $formDescriptor['SearchEntries'] = [
+ 'type' => 'select',
+ 'label-message' => 'abusefilter-log-search-entries-label',
+ 'options' => [
+ $this->msg( 'abusefilter-log-search-entries-all' )->text() => 0,
+ $this->msg( 'abusefilter-log-search-entries-hidden' )->text() => 1,
+ $this->msg( 'abusefilter-log-search-entries-visible' )->text() => 2,
+ ],
+ ];
+ }
if ( self::canSeeDetails() ) {
$formDescriptor['SearchFilter'] = [
'label-message' => 'abusefilter-log-search-filter',
@@ -123,7 +251,7 @@ class SpecialAbuseLog extends SpecialPage {
'default' => $this->mSearchFilter,
];
}
- if ( $wgAbuseFilterIsCentral ) {
+ if ( $this->getConfig()->get( 'AbuseFilterIsCentral' ) ) {
// Add free form input for wiki name. Would be nice to generate
// a select with unique names in the db at some point.
$formDescriptor['SearchWiki'] = [
@@ -132,19 +260,8 @@ class SpecialAbuseLog extends SpecialPage {
'default' => $this->mSearchWiki,
];
}
- if ( self::canSeeHidden() ) {
- $formDescriptor['SearchEntries'] = [
- 'type' => 'select',
- 'label-message' => 'abusefilter-log-search-entries-label',
- 'options' => [
- $this->msg( 'abusefilter-log-search-entries-all' )->text() => 0,
- $this->msg( 'abusefilter-log-search-entries-hidden' )->text() => 1,
- $this->msg( 'abusefilter-log-search-entries-visible' )->text() => 2,
- ],
- ];
- }
- $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() )
+ HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() )
->setWrapperLegendMsg( 'abusefilter-log-search' )
->setSubmitTextMsg( 'abusefilter-log-search-submit' )
->setMethod( 'get' )
@@ -153,12 +270,12 @@ class SpecialAbuseLog extends SpecialPage {
}
/**
- * @param $id
- * @return mixed
+ * @param string $id
*/
- function showHideForm( $id ) {
+ public function showHideForm( $id ) {
+ $output = $this->getOutput();
if ( !$this->getUser()->isAllowed( 'abusefilter-hide-log' ) ) {
- $this->getOutput()->addWikiMsg( 'abusefilter-log-hide-forbidden' );
+ $output->addWikiMsg( 'abusefilter-log-hide-forbidden' );
return;
}
@@ -167,7 +284,7 @@ class SpecialAbuseLog extends SpecialPage {
$row = $dbr->selectRow(
[ 'abuse_filter_log', 'abuse_filter' ],
- '*',
+ 'afl_deleted',
[ 'afl_id' => $id ],
__METHOD__,
[],
@@ -178,15 +295,24 @@ class SpecialAbuseLog extends SpecialPage {
return;
}
+ $hideReasonsOther = $this->msg( 'revdelete-reasonotherlist' )->text();
+ $hideReasons = $this->msg( 'revdelete-reason-dropdown' )->inContentLanguage()->text();
+ $hideReasons = Xml::listDropDownOptions( $hideReasons, [ 'other' => $hideReasonsOther ] );
+
$formInfo = [
'logid' => [
'type' => 'info',
- 'default' => $id,
+ 'default' => (string)$id,
'label-message' => 'abusefilter-log-hide-id',
],
+ 'dropdownreason' => [
+ 'type' => 'select',
+ 'options' => $hideReasons,
+ 'label-message' => 'abusefilter-log-hide-reason'
+ ],
'reason' => [
'type' => 'text',
- 'label-message' => 'abusefilter-log-hide-reason',
+ 'label-message' => 'abusefilter-log-hide-reason-other',
],
'hidden' => [
'type' => 'toggle',
@@ -195,19 +321,24 @@ class SpecialAbuseLog extends SpecialPage {
],
];
- $form = new HTMLForm( $formInfo, $this->getContext() );
- $form->setTitle( $this->getPageTitle() );
- $form->setWrapperLegend( $this->msg( 'abusefilter-log-hide-legend' )->text() );
- $form->addHiddenField( 'hide', $id );
- $form->setSubmitCallback( [ $this, 'saveHideForm' ] );
- $form->show();
+ HTMLForm::factory( 'ooui', $formInfo, $this->getContext() )
+ ->setTitle( $this->getPageTitle() )
+ ->setWrapperLegend( $this->msg( 'abusefilter-log-hide-legend' )->text() )
+ ->addHiddenField( 'hide', $id )
+ ->setSubmitCallback( [ $this, 'saveHideForm' ] )
+ ->show();
+
+ // Show suppress log for this entry
+ $suppressLogPage = new LogPage( 'suppress' );
+ $output->addHTML( "<h2>" . $suppressLogPage->getName()->escaped() . "</h2>\n" );
+ LogEventsList::showLogExtract( $output, 'suppress', $this->getPageTitle( $id ) );
}
/**
- * @param $fields
+ * @param array $fields
* @return bool
*/
- function saveHideForm( $fields ) {
+ public function saveHideForm( $fields ) {
$logid = $this->getRequest()->getVal( 'hide' );
$dbw = wfGetDB( DB_MASTER );
@@ -219,17 +350,30 @@ class SpecialAbuseLog extends SpecialPage {
__METHOD__
);
- $logPage = new LogPage( 'suppress' );
- $action = $fields['hidden'] ? 'hide-afl' : 'unhide-afl';
+ $reason = $fields['dropdownreason'];
+ if ( $reason === 'other' ) {
+ $reason = $fields['reason'];
+ } elseif ( $fields['reason'] !== '' ) {
+ $reason .=
+ $this->msg( 'colon-separator' )->inContentLanguage()->text() . $fields['reason'];
+ }
- $logPage->addEntry( $action, $this->getPageTitle( $logid ), $fields['reason'] );
+ $action = $fields['hidden'] ? 'hide-afl' : 'unhide-afl';
+ $logEntry = new ManualLogEntry( 'suppress', $action );
+ $logEntry->setPerformer( $this->getUser() );
+ $logEntry->setTarget( $this->getPageTitle( $logid ) );
+ $logEntry->setComment( $reason );
+ $logEntry->insert();
$this->getOutput()->redirect( SpecialPage::getTitleFor( 'AbuseLog' )->getFullURL() );
return true;
}
- function showList() {
+ /**
+ * Shows the results list
+ */
+ public function showList() {
$out = $this->getOutput();
// Generate conditions list.
@@ -247,6 +391,17 @@ class SpecialAbuseLog extends SpecialPage {
}
}
+ $dbr = wfGetDB( DB_REPLICA );
+ if ( $this->mSearchPeriodStart ) {
+ $conds[] = 'afl_timestamp >= ' .
+ $dbr->addQuotes( $dbr->timestamp( strtotime( $this->mSearchPeriodStart ) ) );
+ }
+
+ if ( $this->mSearchPeriodEnd ) {
+ $conds[] = 'afl_timestamp <= ' .
+ $dbr->addQuotes( $dbr->timestamp( strtotime( $this->mSearchPeriodEnd ) ) );
+ }
+
if ( $this->mSearchWiki ) {
if ( $this->mSearchWiki == wfWikiID() ) {
$conds['afl_wiki'] = null;
@@ -291,7 +446,47 @@ class SpecialAbuseLog extends SpecialPage {
if ( $this->mSearchEntries == '1' ) {
$conds['afl_deleted'] = 1;
} elseif ( $this->mSearchEntries == '2' ) {
- $conds[] = self::getNotDeletedCond( wfGetDB( DB_REPLICA ) );
+ $conds[] = self::getNotDeletedCond( $dbr );
+ }
+ }
+
+ if ( in_array( $this->mSearchImpact, [ '1', '2' ] ) ) {
+ $unsuccessfulActionConds = $dbr->makeList( [
+ 'afl_rev_id' => null,
+ 'afl_log_id' => null,
+ ], LIST_AND );
+ if ( $this->mSearchImpact == '1' ) {
+ $conds[] = "NOT ( $unsuccessfulActionConds )";
+ } else {
+ $conds[] = $unsuccessfulActionConds;
+ }
+ }
+
+ if ( $this->mSearchActionTaken ) {
+ if ( in_array( $this->mSearchActionTaken, $this->getAllActions() ) ) {
+ $list = [ 'afl_actions' => $this->mSearchActionTaken ];
+ $list[] = 'afl_actions' . $dbr->buildLike(
+ $this->mSearchActionTaken, ',', $dbr->anyString() );
+ $list[] = 'afl_actions' . $dbr->buildLike(
+ $dbr->anyString(), ',', $this->mSearchActionTaken );
+ $list[] = 'afl_actions' . $dbr->buildLike(
+ $dbr->anyString(),
+ ',', $this->mSearchActionTaken, ',',
+ $dbr->anyString()
+ );
+ $conds[] = $dbr->makeList( $list, LIST_OR );
+ } elseif ( $this->mSearchActionTaken === 'noactions' ) {
+ $conds['afl_actions'] = '';
+ }
+ }
+
+ if ( $this->mSearchAction ) {
+ $filterableActions = $this->getAllFilterableActions();
+ if ( in_array( $this->mSearchAction, $filterableActions ) ) {
+ $conds['afl_action'] = $this->mSearchAction;
+ } elseif ( $this->mSearchAction === 'other' ) {
+ $list = $dbr->makeList( [ 'afl_action' => $filterableActions ], LIST_OR );
+ $conds[] = "NOT ( $list )";
}
}
@@ -308,10 +503,9 @@ class SpecialAbuseLog extends SpecialPage {
}
/**
- * @param $id
- * @return mixed
+ * @param string $id
*/
- function showDetails( $id ) {
+ public function showDetails( $id ) {
$out = $this->getOutput();
$dbr = wfGetDB( DB_REPLICA );
@@ -343,7 +537,7 @@ class SpecialAbuseLog extends SpecialPage {
return;
}
- if ( self::isHidden( $row ) && !self::canSeeHidden() ) {
+ if ( self::isHidden( $row ) === true && !self::canSeeHidden() ) {
$out->addWikiMsg( 'abusefilter-log-details-hidden' );
return;
@@ -359,7 +553,9 @@ class SpecialAbuseLog extends SpecialPage {
$output = Xml::element(
'legend',
null,
- $this->msg( 'abusefilter-log-details-legend', $id )->text()
+ $this->msg( 'abusefilter-log-details-legend' )
+ ->numParams( $id )
+ ->text()
);
$output .= Xml::tags( 'p', null, $this->formatRow( $row, false ) );
@@ -376,8 +572,10 @@ class SpecialAbuseLog extends SpecialPage {
$diffEngine->showDiffStyle();
- $formattedDiff = $diffEngine->generateTextDiffBody( $old_wikitext, $new_wikitext );
- $formattedDiff = $diffEngine->addHeader( $formattedDiff, '', '' );
+ $formattedDiff = $diffEngine->addHeader(
+ $diffEngine->generateTextDiffBody( $old_wikitext, $new_wikitext ),
+ '', ''
+ );
$output .=
Xml::tags(
@@ -395,45 +593,276 @@ class SpecialAbuseLog extends SpecialPage {
$output .= AbuseFilter::buildVarDumpTable( $vars, $this->getContext() );
if ( self::canSeePrivate() ) {
- // Private stuff, like IPs.
- $header =
- Xml::element( 'th', null, $this->msg( 'abusefilter-log-details-var' )->text() ) .
- Xml::element( 'th', null, $this->msg( 'abusefilter-log-details-val' )->text() );
- $output .= Xml::element( 'h3', null, $this->msg( 'abusefilter-log-details-private' )->text() );
- $output .=
- Xml::openElement( 'table',
- [
- 'class' => 'wikitable mw-abuselog-private',
- 'style' => 'width: 80%;'
- ]
+ $formDescriptor = [
+ 'Reason' => [
+ 'label-message' => 'abusefilter-view-private-reason',
+ 'type' => 'text',
+ 'size' => 45,
+ ],
+ ];
+
+ $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $this->getContext() );
+ $htmlForm->setWrapperLegendMsg( 'abusefilter-view-private' )
+ ->setAction( $this->getPageTitle( 'private/' . $id )->getLocalURL() )
+ ->setSubmitTextMsg( 'abusefilter-view-private-submit' )
+ ->setMethod( 'post' )
+ ->prepareForm();
+
+ $output .= $htmlForm->getHTML( false );
+ }
+
+ $out->addHTML( Xml::tags( 'fieldset', null, $output ) );
+ }
+
+ /**
+ * @param string $id
+ * @return void
+ */
+ public function showPrivateDetails( $id ) {
+ $lang = $this->getLanguage();
+ $out = $this->getOutput();
+ $request = $this->getRequest();
+
+ $dbr = wfGetDB( DB_REPLICA );
+
+ $reason = $request->getText( 'wpReason' );
+
+ // Make sure it is a valid request
+ $token = $request->getVal( 'wpEditToken' );
+ if ( !$request->wasPosted() || !$this->getUser()->matchEditToken( $token ) ) {
+ $out->addHTML(
+ Xml::tags(
+ 'p',
+ null,
+ Html::errorBox( $this->msg( 'abusefilter-invalid-request' )->params( $id )->parse() )
+ )
+ );
+
+ return;
+ }
+
+ if ( !$this->checkReason( $reason ) ) {
+ $out->addWikiMsg( 'abusefilter-noreason' );
+ $this->showDetails( $id );
+ return;
+ }
+
+ $row = $dbr->selectRow(
+ [ 'abuse_filter_log', 'abuse_filter' ],
+ [ 'afl_id', 'afl_filter', 'afl_user_text', 'afl_timestamp', 'afl_ip', 'af_id',
+ 'af_public_comments', 'af_hidden' ],
+ [ 'afl_id' => $id ],
+ __METHOD__,
+ [],
+ [ 'abuse_filter' => [ 'LEFT JOIN', 'af_id=afl_filter' ] ]
+ );
+
+ if ( !$row ) {
+ $out->addWikiMsg( 'abusefilter-log-nonexistent' );
+
+ return;
+ }
+
+ if ( AbuseFilter::decodeGlobalName( $row->afl_filter ) ) {
+ $filter_hidden = null;
+ } else {
+ $filter_hidden = $row->af_hidden;
+ }
+
+ if ( !self::canSeeDetails( $row->afl_filter, $filter_hidden ) ) {
+ $out->addWikiMsg( 'abusefilter-log-cannot-see-details' );
+
+ return;
+ }
+
+ if ( !self::canSeePrivate() ) {
+ $out->addWikiMsg( 'abusefilter-log-cannot-see-private-details' );
+
+ return;
+ }
+
+ // Log accessing private details
+ if ( $this->getConfig()->get( 'AbuseFilterPrivateLog' ) ) {
+ $user = $this->getUser();
+ self::addLogEntry( $id, $reason, $user );
+ }
+
+ // Show private details (IP).
+ $output = Xml::element(
+ 'legend',
+ null,
+ $this->msg( 'abusefilter-log-details-private' )->text()
+ );
+
+ $header =
+ Xml::element( 'th', null, $this->msg( 'abusefilter-log-details-var' )->text() ) .
+ Xml::element( 'th', null, $this->msg( 'abusefilter-log-details-val' )->text() );
+
+ $output .=
+ Xml::openElement( 'table',
+ [
+ 'class' => 'wikitable mw-abuselog-private',
+ 'style' => 'width: 80%;'
+ ]
+ ) .
+ Xml::openElement( 'tbody' );
+ $output .= $header;
+
+ // Log ID
+ $linkRenderer = $this->getLinkRenderer();
+ $output .=
+ Xml::tags( 'tr', null,
+ Xml::element( 'td',
+ [ 'style' => 'width: 30%;' ],
+ $this->msg( 'abusefilter-log-details-id' )->text()
) .
- Xml::openElement( 'tbody' );
- $output .= $header;
+ Xml::openElement( 'td' ) .
+ $linkRenderer->makeKnownLink(
+ $this->getPageTitle( $row->afl_id ),
+ $lang->formatNum( $row->afl_id )
+ ) .
+ Xml::closeElement( 'td' )
+ );
+
+ // Timestamp
+ $output .=
+ Xml::tags( 'tr', null,
+ Xml::element( 'td',
+ [ 'style' => 'width: 30%;' ],
+ $this->msg( 'abusefilter-edit-builder-vars-timestamp-expanded' )->text()
+ ) .
+ Xml::element( 'td',
+ null,
+ $lang->timeanddate( $row->afl_timestamp, true )
+ )
+ );
+
+ // User
+ $output .=
+ Xml::tags( 'tr', null,
+ Xml::element( 'td',
+ [ 'style' => 'width: 30%;' ],
+ $this->msg( 'abusefilter-edit-builder-vars-user-name' )->text()
+ ) .
+ Xml::element( 'td',
+ null,
+ $row->afl_user_text
+ )
+ );
+
+ // Filter ID
+ $output .=
+ Xml::tags( 'tr', null,
+ Xml::element( 'td',
+ [ 'style' => 'width: 30%;' ],
+ $this->msg( 'abusefilter-list-id' )->text()
+ ) .
+ Xml::openElement( 'td' ) .
+ $linkRenderer->makeKnownLink(
+ SpecialPage::getTitleFor( 'AbuseFilter', $row->af_id ),
+ $lang->formatNum( $row->af_id )
+ ) .
+ Xml::closeElement( 'td' )
+ );
+
+ // Filter description
+ $output .=
+ Xml::tags( 'tr', null,
+ Xml::element( 'td',
+ [ 'style' => 'width: 30%;' ],
+ $this->msg( 'abusefilter-list-public' )->text()
+ ) .
+ Xml::element( 'td',
+ null,
+ $row->af_public_comments
+ )
+ );
- // IP address
+ // IP address
+ if ( $row->afl_ip !== '' ) {
+ if ( ExtensionRegistry::getInstance()->isLoaded( 'CheckUser' ) &&
+ $this->getUser()->isAllowed( 'checkuser' ) ) {
+ $CULink = '&nbsp;&middot;&nbsp;' . $linkRenderer->makeKnownLink(
+ SpecialPage::getTitleFor(
+ 'CheckUser',
+ $row->afl_ip
+ ),
+ $this->msg( 'abusefilter-log-details-checkuser' )->text()
+ );
+ } else {
+ $CULink = '';
+ }
$output .=
Xml::tags( 'tr', null,
Xml::element( 'td',
[ 'style' => 'width: 30%;' ],
$this->msg( 'abusefilter-log-details-ip' )->text()
) .
- Xml::element( 'td', null, $row->afl_ip )
+ Xml::tags(
+ 'td',
+ null,
+ self::getUserLinks( 0, $row->afl_ip ) . $CULink
+ )
+ );
+ } else {
+ $output .=
+ Xml::tags( 'tr', null,
+ Xml::element( 'td',
+ [ 'style' => 'width: 30%;' ],
+ $this->msg( 'abusefilter-log-details-ip' )->text()
+ ) .
+ Xml::element(
+ 'td',
+ null,
+ $this->msg( 'abusefilter-log-ip-not-available' )->text()
+ )
);
-
- $output .= Xml::closeElement( 'tbody' ) . Xml::closeElement( 'table' );
}
+ $output .= Xml::closeElement( 'tbody' ) . Xml::closeElement( 'table' );
+
$output = Xml::tags( 'fieldset', null, $output );
$out->addHTML( $output );
}
/**
- * @param $filter_id null
- * @param $filter_hidden null
+ * If specifying a reason for viewing private details of abuse log is required
+ * then it makes sure that a reason is provided.
+ *
+ * @param string $reason
* @return bool
*/
- static function canSeeDetails( $filter_id = null, $filter_hidden = null ) {
+ protected function checkReason( $reason ) {
+ return ( !$this->getConfig()->get( 'AbuseFilterForceSummary' ) || strlen( $reason ) > 0 );
+ }
+
+ /**
+ * @param int $logID int The ID of the AbuseFilter log that was accessed
+ * @param string $reason The reason provided for accessing private details
+ * @param User $user The user who accessed the private details
+ * @return void
+ */
+ public static function addLogEntry( $logID, $reason, $user ) {
+ $target = self::getTitleFor( 'AbuseLog', $logID );
+
+ $logEntry = new ManualLogEntry( 'abusefilterprivatedetails', 'access' );
+ $logEntry->setPerformer( $user );
+ $logEntry->setTarget( $target );
+ $logEntry->setParameters( [
+ '4::logid' => $logID,
+ ] );
+ $logEntry->setComment( $reason );
+
+ $logEntry->insert();
+ }
+
+ /**
+ * @param string|null $filter_id
+ * @param bool|int|null $filter_hidden
+ * @return bool
+ */
+ public static function canSeeDetails( $filter_id = null, $filter_hidden = null ) {
global $wgUser;
if ( $filter_id !== null ) {
@@ -453,7 +882,7 @@ class SpecialAbuseLog extends SpecialPage {
/**
* @return bool
*/
- static function canSeePrivate() {
+ public static function canSeePrivate() {
global $wgUser;
return $wgUser->isAllowed( 'abusefilter-private' );
@@ -462,18 +891,18 @@ class SpecialAbuseLog extends SpecialPage {
/**
* @return bool
*/
- static function canSeeHidden() {
+ public static function canSeeHidden() {
global $wgUser;
return $wgUser->isAllowed( 'abusefilter-hidden-log' );
}
/**
- * @param $row
- * @param $isListItem bool
+ * @param stdClass $row
+ * @param bool $isListItem
* @return String
*/
- function formatRow( $row, $isListItem = true ) {
+ public function formatRow( $row, $isListItem = true ) {
$user = $this->getUser();
$lang = $this->getLanguage();
@@ -484,7 +913,7 @@ class SpecialAbuseLog extends SpecialPage {
$diffLink = false;
$isHidden = self::isHidden( $row );
- if ( !self::canSeeHidden() && $isHidden ) {
+ if ( !self::canSeeHidden() && $isHidden === true ) {
return '';
}
@@ -524,7 +953,7 @@ class SpecialAbuseLog extends SpecialPage {
$actions_taken = $row->afl_actions;
if ( !strlen( trim( $actions_taken ) ) ) {
- $actions_taken = $this->msg( 'abusefilter-log-noactions' )->text();
+ $actions_taken = $this->msg( 'abusefilter-log-noactions' )->escaped();
} else {
$actions = explode( ',', $actions_taken );
$displayActions = [];
@@ -539,11 +968,12 @@ class SpecialAbuseLog extends SpecialPage {
if ( $globalIndex ) {
// Pull global filter description
- $parsed_comments =
- $this->getOutput()->parseInline( AbuseFilter::getGlobalFilterDescription( $globalIndex ) );
+ $escaped_comments = Sanitizer::escapeHtmlAllowEntities(
+ AbuseFilter::getGlobalFilterDescription( $globalIndex ) );
$filter_hidden = null;
} else {
- $parsed_comments = $this->getOutput()->parseInline( $row->af_public_comments );
+ $escaped_comments = Sanitizer::escapeHtmlAllowEntities(
+ $row->af_public_comments );
$filter_hidden = $row->af_hidden;
}
@@ -579,11 +1009,10 @@ class SpecialAbuseLog extends SpecialPage {
}
if ( $globalIndex ) {
- global $wgAbuseFilterCentralDB;
- $globalURL =
- WikiMap::getForeignURL( $wgAbuseFilterCentralDB,
- 'Special:AbuseFilter/' . $globalIndex );
-
+ $globalURL = WikiMap::getForeignURL(
+ $this->getConfig()->get( 'AbuseFilterCentralDB' ),
+ 'Special:AbuseFilter/' . $globalIndex
+ );
$linkText = $this->msg( 'abusefilter-log-detailedentry-global' )
->numParams( $globalIndex )->escaped();
$filterLink = Linker::makeExternalLink( $globalURL, $linkText );
@@ -600,7 +1029,7 @@ class SpecialAbuseLog extends SpecialPage {
$row->afl_action,
$pageLink,
$actions_taken,
- $parsed_comments,
+ $escaped_comments,
$lang->pipeList( $actionLinks )
)->params( $row->afl_user_text )->parse();
} else {
@@ -615,8 +1044,9 @@ class SpecialAbuseLog extends SpecialPage {
$row->afl_action,
$pageLink,
$actions_taken,
- $parsed_comments,
- $diffLink // Passing $7 to 'abusefilter-log-entry' will do nothing, as it's not used.
+ $escaped_comments,
+ // Passing $7 to 'abusefilter-log-entry' will do nothing, as it's not used.
+ $diffLink
)->params( $row->afl_user_text )->parse();
}
@@ -636,6 +1066,11 @@ class SpecialAbuseLog extends SpecialPage {
}
}
+ /**
+ * @param int $userId
+ * @param string $userName
+ * @return string
+ */
protected static function getUserLinks( $userId, $userName ) {
static $cache = [];
@@ -648,7 +1083,7 @@ class SpecialAbuseLog extends SpecialPage {
}
/**
- * @param $db DatabaseBase
+ * @param \Wikimedia\Rdbms\IDatabase $db
* @return string
*/
public static function getNotDeletedCond( $db ) {
@@ -665,12 +1100,17 @@ class SpecialAbuseLog extends SpecialPage {
/**
* Given a log entry row, decides whether or not it can be viewed by the public.
*
- * @param $row stdClass The abuse_filter_log row object.
+ * @param stdClass $row The abuse_filter_log row object.
*
* @return bool|string true if the item is explicitly hidden, false if it is not.
* The string 'implicit' if it is hidden because the corresponding revision is hidden.
*/
public static function isHidden( $row ) {
+ // First, check if the entry is hidden. Since this is an oversight-level deletion,
+ // it's more important than the associated revision being deleted.
+ if ( $row->afl_deleted ) {
+ return true;
+ }
if ( $row->afl_rev_id ) {
$revision = Revision::newFromId( $row->afl_rev_id );
if ( $revision && $revision->getVisibility() != 0 ) {
@@ -678,87 +1118,13 @@ class SpecialAbuseLog extends SpecialPage {
}
}
- return (bool)$row->afl_deleted;
- }
-
- protected function getGroupName() {
- return 'changes';
- }
-}
-
-class AbuseLogPager extends ReverseChronologicalPager {
- /**
- * @var SpecialAbuseLog
- */
- public $mForm;
-
- /**
- * @var array
- */
- public $mConds;
-
- /**
- * @param SpecialAbuseLog $form
- * @param array $conds
- * @param bool $details
- */
- function __construct( $form, $conds = [], $details = false ) {
- $this->mForm = $form;
- $this->mConds = $conds;
- parent::__construct();
- }
-
- function formatRow( $row ) {
- return $this->mForm->formatRow( $row );
- }
-
- function getQueryInfo() {
- $conds = $this->mConds;
-
- $info = [
- 'tables' => [ 'abuse_filter_log', 'abuse_filter' ],
- 'fields' => '*',
- 'conds' => $conds,
- 'join_conds' =>
- [ 'abuse_filter' =>
- [
- 'LEFT JOIN',
- 'af_id=afl_filter',
- ],
- ],
- ];
-
- if ( !$this->mForm->canSeeHidden() ) {
- $db = $this->mDb;
- $info['conds'][] = SpecialAbuseLog::getNotDeletedCond( $db );
- }
-
- return $info;
+ return false;
}
/**
- * @param ResultWrapper $result
+ * @return string
*/
- protected function preprocessResults( $result ) {
- if ( $this->getNumRows() === 0 ) {
- return;
- }
-
- $lb = new LinkBatch();
- $lb->setCaller( __METHOD__ );
- foreach ( $result as $row ) {
- // Only for local wiki results
- if ( !$row->afl_wiki ) {
- $lb->add( $row->afl_namespace, $row->afl_title );
- $lb->add( NS_USER, $row->afl_user );
- $lb->add( NS_USER_TALK, $row->afl_user_text );
- }
- }
- $lb->execute();
- $result->seek( 0 );
- }
-
- function getIndexField() {
- return 'afl_timestamp';
+ protected function getGroupName() {
+ return 'changes';
}
}
diff --git a/AbuseFilter/maintenance/addMissingLoggingEntries.php b/AbuseFilter/maintenance/addMissingLoggingEntries.php
index 70ab03fb..3a4d8658 100644
--- a/AbuseFilter/maintenance/addMissingLoggingEntries.php
+++ b/AbuseFilter/maintenance/addMissingLoggingEntries.php
@@ -1,4 +1,5 @@
<?php
+
if ( getenv( 'MW_INSTALL_PATH' ) ) {
$IP = getenv( 'MW_INSTALL_PATH' );
} else {
@@ -13,9 +14,12 @@ class AddMissingLoggingEntries extends Maintenance {
public function __construct() {
parent::__construct();
- $this->requireExtension( 'AbuseFilter' );
+ $this->requireExtension( 'Abuse Filter' );
}
+ /**
+ * @see Maintenance::execute
+ */
public function execute() {
$logParams = [];
$afhRows = [];
@@ -54,8 +58,10 @@ class AddMissingLoggingEntries extends Maintenance {
);
foreach ( $logResult as $row ) {
- $params = explode( "\n", $row->log_params ); // id . '\n' . filter
- $afhId = $params[0]; // id
+ // id . '\n' . filter
+ $params = explode( "\n", $row->log_params );
+ // id
+ $afhId = $params[0];
// Forget this row had any issues - it just has a different timestamp in the log
unset( $afhRows[$afhId] );
}
@@ -66,30 +72,24 @@ class AddMissingLoggingEntries extends Maintenance {
$dbw = wfGetDB( DB_MASTER );
- if ( class_exists( CommentStore::class ) ) {
- $commentFields = CommentStore::newKey( 'log_comment' )->insert( $dbw, '' );
- } else {
- $commentFields = [ 'log_comment' => '' ];
- }
-
$count = 0;
foreach ( $afhRows as $row ) {
if ( $count % 100 == 0 ) {
wfWaitForSlaves();
}
+ $user = User::newFromAnyId( $row->afh_user, $row->afh_user_text, null );
$dbw->insert(
'logging',
[
'log_type' => 'abusefilter',
'log_action' => 'modify',
'log_timestamp' => $row->afh_timestamp,
- 'log_user' => $row->afh_user,
'log_namespace' => -1,
'log_title' => SpecialPageFactory::getLocalNameFor( 'AbuseFilter' ) . '/' . $row->afh_filter,
'log_params' => $row->afh_id . '\n' . $row->afh_filter,
'log_deleted' => $row->afh_deleted,
- 'log_user_text' => $row->afh_user_text,
- ] + $commentFields,
+ ] + CommentStore::getStore()->insert( $dbw, 'log_comment', '' )
+ + ActorMigration::newMigration()->getInsertValues( $dbw, 'log_user', $user ),
__METHOD__
);
$count++;
diff --git a/AbuseFilter/maintenance/normalizeThrottleParameters.php b/AbuseFilter/maintenance/normalizeThrottleParameters.php
new file mode 100644
index 00000000..d4595c7f
--- /dev/null
+++ b/AbuseFilter/maintenance/normalizeThrottleParameters.php
@@ -0,0 +1,411 @@
+<?php
+/**
+ * Normalizes throttle parameters as part of the overhaul described in T203587
+ *
+ * Tasks performed by this script:
+ * - Remove duplicated throttle groups (T203584)
+ * - Remove unrecognized stuff from throttle groups (T203584)
+ * - Checks if throttle count or period have extra commas inside. If this leads to the filter acting
+ * like it would with throttle disabled, we just disable it. Otherwise, since we don't know what
+ * the filter is meant to do, we just ask users to evaluate and fix every case by hand. This is
+ * highly unlikely to happen anyway. (T203585)
+ * - If throttle groups are empty (or only contain unknown keywords), ask users to fix every case
+ * by hand. (T203584)
+ *
+ * @ingroup Maintenance
+ */
+if ( getenv( 'MW_INSTALL_PATH' ) ) {
+ $IP = getenv( 'MW_INSTALL_PATH' );
+} else {
+ $IP = __DIR__ . '/../../..';
+}
+require_once "$IP/maintenance/Maintenance.php";
+
+/**
+ * Normalizes throttle parameters, see T203587
+ */
+class NormalizeThrottleParameters extends LoggedUpdateMaintenance {
+ public function __construct() {
+ parent::__construct();
+
+ $this->mDescription = 'Normalize AbuseFilter throttle parameters - T203587';
+ $this->addOption( 'dry-run', 'Perform a dry run' );
+ $this->requireExtension( 'Abuse Filter' );
+ }
+
+ /**
+ * @see Maintenance::getUpdateKey()
+ * @return string
+ */
+ public function getUpdateKey() {
+ return __CLASS__;
+ }
+
+ /** @var \Wikimedia\Rdbms\IDatabase $db The master database */
+ private $dbw;
+
+ /**
+ * Rollback the current transaction and emit a fatal error
+ *
+ * @param string $msg The message of the error
+ */
+ protected function fail( $msg ) {
+ $this->rollbackTransaction( $this->dbw, __METHOD__ );
+ $this->fatalError( $msg );
+ }
+
+ /**
+ * Get normalized throttle groups
+ *
+ * @param array $params Throttle parameters
+ * @return array[] The first element is the array of old throttle groups, the second
+ * is an array of formatted throttle groups
+ */
+ private function getNewGroups( $params ) {
+ $validGroups = [
+ 'ip',
+ 'user',
+ 'range',
+ 'creationdate',
+ 'editcount',
+ 'site',
+ 'page'
+ ];
+ $rawGroups = array_slice( $params, 2 );
+ $newGroups = [];
+ // We use a standard order to check for duplicates. This variable is not used as the actual
+ // array of groups to avoid silly changes like 'ip,user' => 'user,ip'. In this variable we also
+ // store trimmed groups, so that 'ip, user' is considered to be the same as 'ip,user', just
+ // as the actual code does. And again, we don't want to edit the filter just to strip spaces.
+ $normalizedGroups = [];
+ // Every group should be valid, and subgroups should have valid groups inside. Only keep
+ // valid (sub)groups.
+ foreach ( $rawGroups as $group ) {
+ // Groups must be lowercase.
+ $group = strtolower( $group );
+ if ( strpos( $group, ',' ) !== false ) {
+ // No duplicates in subgroups
+ $subGroups = array_unique( explode( ',', $group ) );
+ $uniqueGroup = implode( ',', $subGroups );
+ $valid = true;
+ foreach ( $subGroups as $subGroup ) {
+ if ( !in_array( trim( $subGroup ), $validGroups ) ) {
+ $valid = false;
+ break;
+ }
+ }
+ sort( $subGroups );
+ if ( $valid && !in_array( $subGroups, $normalizedGroups ) ) {
+ $newGroups[] = $uniqueGroup;
+ $normalizedGroups[] = array_map( 'trim', $subGroups );
+ }
+ } elseif ( in_array( trim( $group ), $validGroups ) ) {
+ $newGroups[] = $group;
+ $normalizedGroups[] = trim( $group );
+ }
+ }
+
+ // Remove duplicates
+ $newGroups = array_unique( $newGroups );
+
+ return [ $rawGroups, $newGroups ];
+ }
+
+ /**
+ * Check if throttle rate is malformed, i.e. if it has extra commas or a part of it is empty
+ *
+ * @param string $rate The throttle rate as saved in the DB ("count,period")
+ * @return string|null String with error type or null if the rate is valid
+ */
+ private function checkThrottleRate( $rate ) {
+ if ( preg_match( '/^,/', $rate ) === 1 ) {
+ // The comma was inserted at least in throttle count. This behaves like if
+ // throttling isn't enabled, so just disable it
+ return 'disable';
+ } elseif ( preg_match( '/^\d+,$/', $rate ) === 1 || preg_match( '/^\d+,\d+$/', $rate ) === 0 ) {
+ // First condition is for comma only inside throttle period. The behaviour in this case
+ // is unclear, ask users to fix this by hand. Second condition is for every other case;
+ // since it's unpredictable what the problem is, we just ask to fix it by hand.
+ return 'hand';
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @see Maintenance::doDBUpdates
+ * @return bool
+ */
+ public function doDBUpdates() {
+ $user = AbuseFilter::getFilterUser();
+ $this->dbw = wfGetDB( DB_MASTER );
+ $dryRun = $this->hasOption( 'dry-run' );
+
+ // IDs of filters with invalid rate (count or period)
+ $invalidRate = [];
+ // IDs of filters with invalid groups
+ $invalidGroups = [];
+ // IDs of filters where throttle parameters are completely empty, and even the filter ID is
+ // missing. This happened for filters containing a throttle group with a comma inside which
+ // were modified between the OOUI switch (gerrit/421487) and throttle repair (gerrit/459368):
+ // a bug caused all existing throttle parameters to be wiped away, so that afa_consequence
+ // holds an empty string and (unserialize(afh_actions))['throttle'] is null.
+ $totallyEmpty = [];
+
+ $this->beginTransaction( $this->dbw, __METHOD__ );
+
+ // Only select throttle actions
+ $actionRows = $this->dbw->select(
+ 'abuse_filter_action',
+ [ 'afa_filter', 'afa_parameters' ],
+ [ 'afa_consequence' => 'throttle' ],
+ __METHOD__,
+ [ 'LOCK IN SHARE MODE' ]
+ );
+
+ $newActionRows = [];
+ // Save new, sanitized throttle parameters to be copied in abuse_filter_history.
+ // The structure is [ filterID => val ] where "val" is either an array with new params
+ // or null if throttle must be removed.
+ $historyThrottleParams = [];
+ $deleteActionIDs = [];
+ $changeActionIDs = [];
+ foreach ( $actionRows as $actRow ) {
+ $filter = $actRow->afa_filter;
+
+ if ( $actRow->afa_parameters === '' ) {
+ // All parameters are empty. See comment above the declaration of $totallyEmpty for
+ // why this happens. Definitely to be fixed by hand, without further checks.
+ $totallyEmpty[] = $filter;
+ continue;
+ }
+
+ $params = explode( "\n", $actRow->afa_parameters );
+ $rateCheck = $this->checkThrottleRate( $params[1] );
+ list( $oldGroups, $newGroups ) = $this->getNewGroups( $params );
+
+ // If the rate is invalid or the groups are empty (or only contain invalid identifiers),
+ // it means that the throttle limit is never reached. Since we cannot guess what the
+ // filter should do, nor we want to impose a default, we ask to manually fix the problem.
+ if ( $rateCheck === 'hand' ) {
+ $invalidRate[] = $filter;
+ }
+ if ( count( $newGroups ) === 0 ) {
+ $invalidGroups[] = $filter;
+ }
+ if ( $rateCheck === 'hand' || count( $newGroups ) === 0 ) {
+ continue;
+ }
+
+ if ( $rateCheck === 'disable' ) {
+ // Invalid rate, disable throttle for the filter
+ $deleteActionIDs[] = $actRow->afa_filter;
+ $historyThrottleParams[ $actRow->afa_filter ] = null;
+ } elseif ( $oldGroups !== $newGroups ) {
+ $newParams = array_merge( array_slice( $params, 0, 2 ), $newGroups );
+ $newActionRows[] = [
+ 'afa_filter' => $actRow->afa_filter,
+ 'afa_consequence' => 'throttle',
+ 'afa_parameters' => implode( "\n", $newParams )
+ ];
+ $changeActionIDs[] = $actRow->afa_filter;
+ $historyThrottleParams[ $actRow->afa_filter ] = $newParams;
+ } else {
+ // The filter is not broken!
+ continue;
+ }
+ }
+
+ if ( $invalidRate || $invalidGroups || $totallyEmpty ) {
+ $invalidMsg = '';
+ if ( $invalidRate ) {
+ $invalidMsg .= 'Throttle count and period are malformed or empty for the following filters: ' .
+ implode( ', ', $invalidRate ) . '. ' .
+ "Please fix them by hand in the way they're meant to be, then launch the script again.\n";
+ }
+ if ( $invalidGroups ) {
+ $invalidMsg .= 'Throttle groups are empty for the following filters: ' .
+ implode( ', ', $invalidGroups ) . '. ' .
+ "Please add some groups or disable throttling, then launch the script again.\n";
+ }
+ if ( $totallyEmpty ) {
+ $invalidMsg .= 'Throttle parameters are empty for the following filters: ' .
+ implode( ', ', $totallyEmpty ) . '. ' .
+ 'This was probably caused by a temporary bug and you should be able to find valid ' .
+ "parameters in each filter's history. Please restore them, then launch the script again.\n";
+ }
+
+ $this->fail( $invalidMsg );
+ }
+
+ // Use the same timestamps in abuse_filter and abuse_filter_history, since this is
+ // what we do in the actual code.
+ $timestamps = [];
+ $changeActionCount = count( $changeActionIDs );
+ if ( $changeActionCount ) {
+ if ( $dryRun ) {
+ $this->output(
+ "normalizeThrottleParameter has found $changeActionCount rows to change in " .
+ "abuse_filter_action for the following IDs: " . implode( ', ', $changeActionIDs ) . "\n"
+ );
+ } else {
+ $this->dbw->replace(
+ 'abuse_filter_action',
+ [ [ 'afa_filter', 'afa_consequence' ] ],
+ $newActionRows,
+ __METHOD__
+ );
+ // Touch the abuse_filter table to update the "filter last modified" field
+ foreach ( $changeActionIDs as $id ) {
+ $timestamps[ $id ] = $this->dbw->timestamp();
+
+ $this->dbw->update(
+ 'abuse_filter',
+ [
+ 'af_user' => $user->getId(),
+ 'af_user_text' => $user->getName(),
+ 'af_timestamp' => $timestamps[ $id ]
+ ],
+ [ 'af_id' => $id ],
+ __METHOD__
+ );
+ }
+ }
+ }
+
+ $deleteActionCount = count( $deleteActionIDs );
+ if ( $deleteActionCount ) {
+ if ( $dryRun ) {
+ $this->output(
+ "normalizeThrottleParameter has found $deleteActionCount rows to delete in " .
+ "abuse_filter_action and update in abuse_filter for the following IDs: " .
+ implode( ', ', $deleteActionIDs ) . "\n"
+ );
+ } else {
+ // Delete rows in abuse_filter_action
+ $this->dbw->delete(
+ 'abuse_filter_action',
+ [
+ 'afa_consequence' => 'throttle',
+ 'afa_filter' => $deleteActionIDs
+ ],
+ __METHOD__
+ );
+ // Update abuse_filter. abuse_filter_history done later
+ foreach ( $deleteActionIDs as $id ) {
+ $timestamps[ $id ] = $this->dbw->timestamp();
+
+ $this->dbw->update(
+ 'abuse_filter',
+ [
+ 'af_user' => $user->getId(),
+ 'af_user_text' => $user->getName(),
+ 'af_timestamp' => $timestamps[ $id ],
+ // Use string replacement so that we can avoid an extra query to retrieve the
+ // value and then explode, remove throttle and implode again.
+ 'af_actions = ' . $this->dbw->strreplace(
+ $this->dbw->strreplace( 'af_actions', "',throttle'", "''" ),
+ "'throttle'",
+ "''"
+ )
+ ],
+ [ 'af_id' => $id ],
+ __METHOD__
+ );
+ }
+ }
+ }
+ $affectedActionRows = $changeActionCount + $deleteActionCount;
+
+ $touchedIDs = array_merge( $changeActionIDs, $deleteActionIDs );
+ if ( count( $touchedIDs ) === 0 ) {
+ $this->output( "No throttle parameters to normalize.\n" );
+ $this->commitTransaction( $this->dbw, __METHOD__ );
+ return !$dryRun;
+ }
+
+ // Create new history rows for every changed filter
+
+ $newHistoryRows = [];
+ $changeHistoryFilters = [];
+ foreach ( $touchedIDs as $filter ) {
+ $histRow = $this->dbw->selectRow(
+ 'abuse_filter_history',
+ [
+ 'afh_filter',
+ 'afh_pattern',
+ 'afh_comments',
+ 'afh_flags',
+ 'afh_public_comments',
+ 'afh_deleted',
+ 'afh_group'
+ ],
+ [ 'afh_filter' => $filter ],
+ __METHOD__,
+ [ 'ORDER BY' => 'afh_id DESC', 'LOCK IN SHARE MODE' ]
+ );
+
+ if ( !isset( $historyThrottleParams[ $filter ] ) ) {
+ // Sanity
+ $this->fail( "Throttle parameters weren't saved for filter $filter" );
+ }
+
+ $timestamp = $timestamps[ $filter ] ?? null;
+ if ( !$timestamp && !$dryRun ) {
+ // Sanity check
+ $this->fail( "The timestamp wasn't saved for filter $filter" );
+ }
+
+ $actions = unserialize( $histRow->afh_actions );
+ if ( $historyThrottleParams[ $filter ] === null ) {
+ // Invalid rate, disable throttle for the filter
+ unset( $actions['throttle'] );
+ } else {
+ $actions['throttle'] = $historyThrottleParams[ $filter ];
+ }
+
+ $newHistoryRows[] = [
+ 'afh_user' => $user->getId(),
+ 'afh_user_text' => $user->getName(),
+ 'afh_timestamp' => $timestamp,
+ 'afh_changed_fields' => 'actions',
+ 'afh_actions' => serialize( $actions )
+ ] + get_object_vars( $histRow );
+ $changeHistoryFilters[] = $filter;
+ }
+
+ $historyCount = count( $changeHistoryFilters );
+ if ( $historyCount !== $affectedActionRows ) {
+ // Sanity: prevent unexpected errors.
+ $this->fail(
+ "The amount of affected rows isn't equal for abuse_filter_action and abuse_filter history. " .
+ "Found $affectedActionRows for the former and $historyCount for the latter."
+ );
+ }
+ if ( count( $newHistoryRows ) ) {
+ if ( $dryRun ) {
+ $this->output(
+ "normalizeThrottleParameter would insert $historyCount rows in abuse_filter_history" .
+ " for the following filters: " . implode( ', ', $changeHistoryFilters ) . "\n"
+ );
+ } else {
+ $this->dbw->insert(
+ 'abuse_filter_history',
+ $newHistoryRows,
+ __METHOD__
+ );
+ }
+ }
+
+ $this->commitTransaction( $this->dbw, __METHOD__ );
+ $changed = $affectedActionRows + $historyCount;
+ $resultMsg = $dryRun ?
+ "Throttle parameter normalization would change a total of $changed rows.\n" :
+ "Throttle parameters successfully normalized. Changed $changed rows.\n";
+ $this->output( $resultMsg );
+ return !$dryRun;
+ }
+}
+
+$maintClass = 'NormalizeThrottleParameters';
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/AbuseFilter/maintenance/purgeOldLogIPData.php b/AbuseFilter/maintenance/purgeOldLogIPData.php
index ad1dbdce..10f000fe 100644
--- a/AbuseFilter/maintenance/purgeOldLogIPData.php
+++ b/AbuseFilter/maintenance/purgeOldLogIPData.php
@@ -13,15 +13,16 @@ class PurgeOldLogIPData extends Maintenance {
$this->mDescription = 'Purge old IP Address data from AbuseFilter logs';
$this->setBatchSize( 200 );
- $this->requireExtension( 'AbuseFilter' );
+ $this->requireExtension( 'Abuse Filter' );
}
+ /**
+ * @see Maintenance:execute()
+ */
public function execute() {
- global $wgAbuseFilterLogIPMaxAge;
-
$this->output( "Purging old IP Address data from abuse_filter_log...\n" );
$dbw = wfGetDB( DB_MASTER );
- $cutoffUnix = time() - $wgAbuseFilterLogIPMaxAge;
+ $cutoffUnix = time() - $this->getConfig()->get( 'AbuseFilterLogIPMaxAge' );
$count = 0;
do {
@@ -33,7 +34,7 @@ class PurgeOldLogIPData extends Maintenance {
"afl_timestamp < " . $dbw->addQuotes( $dbw->timestamp( $cutoffUnix ) )
],
__METHOD__,
- [ 'LIMIT' => $this->mBatchSize ]
+ [ 'LIMIT' => $this->getBatchSize() ]
);
if ( $ids ) {
@@ -48,7 +49,7 @@ class PurgeOldLogIPData extends Maintenance {
wfWaitForSlaves();
}
- } while ( count( $ids ) >= $this->mBatchSize );
+ } while ( count( $ids ) >= $this->getBatchSize() );
$this->output( "$count rows.\n" );
diff --git a/AbuseFilter/modules/ext.abuseFilter.css b/AbuseFilter/modules/ext.abuseFilter.css
index 8e6b5224..2f6cab1e 100644
--- a/AbuseFilter/modules/ext.abuseFilter.css
+++ b/AbuseFilter/modules/ext.abuseFilter.css
@@ -43,6 +43,41 @@ td.mw-abuselog-var {
width: 30%;
}
+table.mw-abusefilter-list-scrollable {
+ display: block;
+ border: 0;
+ overflow-x: auto;
+}
+
+.client-nojs .mw-abusefilter-javascript-tools {
+ display: none;
+}
+
+#mw-abusefilter-throttle-parameters,
+#mw-abusefilter-warn-parameters,
+#mw-abusefilter-disallow-parameters,
+#mw-abusefilter-tag-parameters,
+#mw-abusefilter-block-parameters {
+ width: 50%;
+ padding-left: 3em;
+}
+
+.mw-abusefilter-preview-buttons {
+ text-align: center;
+}
+
+#mw-abusefilter-warn-preview,
+#mw-abusefilter-disallow-preview {
+ border: 1px solid #a2a9b1;
+ margin: 2em;
+ padding: 1em;
+}
+
+.client-nojs #mw-abusefilter-export-link,
+.client-js #mw-abusefilter-export {
+ display: none;
+}
+
tr.mw-abusefilter-list-disabled,
tr.mw-abusefilter-list-disabled td {
color: #666;
@@ -53,6 +88,11 @@ tr.mw-abusefilter-list-deleted td {
color: #aaa;
}
+tr.mw-abusefilter-list-throttled,
+tr.mw-abusefilter-list-throttled td {
+ color: #f00;
+}
+
.mw-abusefilter-examine-match,
.mw-abusefilter-syntaxresult-ok,
li.mw-abusefilter-changeslist-match {
@@ -67,9 +107,29 @@ li.mw-abusefilter-changeslist-nomatch {
background-image: url( red_x.png );
}
+div.mw-abusefilter-editor {
+ max-width: 75em;
+ height: 30em;
+ line-height: 1.5em;
+ border: 1px solid #a2a9b1;
+ display: none;
+}
+
+fieldset.mw-abusefilter-edit-buttons {
+ margin-top: 1em;
+}
+
+.mw-abusefilter-load-filter-id {
+ max-width: 50em;
+}
+
+.client-nojs .mw-abusefilter-load-filter-id {
+ display: none;
+}
+
#mw-abusefilter-syntaxresult,
-li.mw-abusefilter-changeslist-nomatch,
-li.mw-abusefilter-changeslist-match {
+ul li.mw-abusefilter-changeslist-nomatch,
+ul li.mw-abusefilter-changeslist-match {
/* Do not consolidate these into a "background:" rule; it will override the background-image: settings in above rulesets */
background-repeat: no-repeat;
padding-left: 25px;
@@ -91,7 +151,17 @@ li.mw-abusefilter-changeslist-match {
display: inline;
}
-.client-nojs #mw-abusefilter-export-link,
-.client-js #mw-abusefilter-export {
- display: none;
+.mw-abusefilter-history-buttons {
+ text-align: center;
+}
+
+/* Ace highlight customisation */
+
+span.ace_invalid.ace_deprecated {
+ color: #fe6767;
+ background-color: initial;
+}
+
+span.ace_support.ace_function {
+ color: #495dd0;
}
diff --git a/AbuseFilter/modules/ext.abuseFilter.edit.js b/AbuseFilter/modules/ext.abuseFilter.edit.js
index 53a8c734..93008139 100644
--- a/AbuseFilter/modules/ext.abuseFilter.edit.js
+++ b/AbuseFilter/modules/ext.abuseFilter.edit.js
@@ -4,58 +4,47 @@
* @author John Du Hart
* @author Marius Hoch <hoo@online.de>
*/
+/* global ace */
-( function( mw, $ ) {
+( function ( mw, $, OO ) {
'use strict';
- // Filter textarea
- // @var {jQuery}
- var $filterBox;
+ // @var {jQuery} Filter editor for JS and jQuery handling
+ var $filterBox,
+ // Filter editor for Ace specific functions
+ filterEditor,
+ // @var {jQuery} Hidden textarea for submitting form
+ $plainTextBox,
+ // @var {boolean} To determine what editor to use
+ useAce = false,
+ // Infused OOUI elements
+ toggleWarnPreviewButton, warnMessageExisting, warnMessageOther,
+ toggleDisallowPreviewButton, disallowMessageExisting, disallowMessageOther;
/**
- * Returns the currently selected warning message
+ * Returns the currently selected warning or disallow message.
*
- * @returns {string} current warning message
+ * @param {string} action The action to get the message for
+ * @return {string} current warning message
*/
- function getCurrentWarningMessage() {
- var message = $( '#mw-abusefilter-warn-message-existing' ).val();
+ function getCurrentMessage( action ) {
+ var existing = action === 'warn' ? warnMessageExisting : disallowMessageExisting,
+ other = action === 'warn' ? warnMessageOther : disallowMessageOther,
+ message = existing.getValue();
if ( message === 'other' ) {
- message = $( '#mw-abusefilter-warn-message-other' ).val();
+ message = other.getValue();
}
return message;
}
/**
- * Sends the current filter text to be checked for syntax issues.
- *
- * @context HTMLElement
- * @param {jQuery.Event} e
- */
- function doSyntaxCheck() {
- /*jshint validthis:true */
- var filter = $filterBox.val(),
- api = new mw.Api();
-
- $( this )
- .prop( 'disabled', true )
- .injectSpinner( 'abusefilter-syntaxcheck' );
-
- api.post( {
- action: 'abusefilterchecksyntax',
- filter: filter
- } )
- .done( processSyntaxResult )
- .fail( processSyntaxResultFailure );
- }
-
- /**
* Things always needed after syntax checks
*
- * @param {string} resultText
+ * @param {string} resultText The message to show, telling if the syntax is valid
* @param {string} className Class to add
- * @param {bool} syntaxOk Is the syntax ok?
+ * @param {boolean} syntaxOk Is the syntax ok?
*/
function processSyntaxResultAlways( resultText, className, syntaxOk ) {
$.removeSpinner( 'abusefilter-syntaxcheck' );
@@ -69,11 +58,28 @@
}
/**
- * Takes the data retrieved in doSyntaxCheck and processes it
+ * Switch between Ace Editor and classic textarea
+ */
+ function switchEditor() {
+ if ( useAce ) {
+ useAce = false;
+ $filterBox.hide();
+ $plainTextBox.show();
+ } else {
+ useAce = true;
+ filterEditor.session.setValue( $plainTextBox.val() );
+ $filterBox.show();
+ $plainTextBox.hide();
+ }
+ }
+
+ /**
+ * Takes the data retrieved in doSyntaxCheck and processes it.
*
* @param {Object} data Data returned from the AJAX request
*/
function processSyntaxResult( data ) {
+ var position;
data = data.abusefilterchecksyntax;
if ( data.status === 'ok' ) {
@@ -91,14 +97,22 @@
false
);
- $filterBox
- .focus()
- .textSelection( 'setSelection', { start: data.character } );
+ if ( useAce ) {
+ filterEditor.focus();
+ // Convert index (used in textareas) in position {row, column} for ace
+ position = filterEditor.session.getDocument().indexToPosition( data.character );
+ filterEditor.navigateTo( position.row, position.column );
+ filterEditor.scrollToRow( position.row );
+ } else {
+ $plainTextBox
+ .focus()
+ .textSelection( 'setSelection', { start: data.character } );
+ }
}
}
/**
- * Acts on errors after doSyntaxCheck
+ * Acts on errors after doSyntaxCheck.
*
* @param {string} error Error code returned from the AJAX request
* @param {Object} details Details about the error
@@ -113,7 +127,29 @@
}
/**
- * Adds text to the filter textarea
+ * Sends the current filter text to be checked for syntax issues.
+ *
+ * @context HTMLElement
+ * @param {jQuery.Event} e The event fired when the function is called
+ */
+ function doSyntaxCheck() {
+ var filter = $plainTextBox.val(),
+ api = new mw.Api();
+
+ $( this )
+ .prop( 'disabled', true )
+ .injectSpinner( { id: 'abusefilter-syntaxcheck', size: 'large' } );
+
+ api.post( {
+ action: 'abusefilterchecksyntax',
+ filter: filter
+ } )
+ .done( processSyntaxResult )
+ .fail( processSyntaxResultFailure );
+ }
+
+ /**
+ * Adds text to the filter textarea.
* Fired by a change event from the #wpFilterBuilder dropdown
*/
function addText() {
@@ -123,9 +159,15 @@
return;
}
- $filterBox.textSelection(
- 'encapsulateSelection', { 'pre': $filterBuilder.val() + ' ' }
- );
+ if ( useAce ) {
+ filterEditor.insert( $filterBuilder.val() + ' ' );
+ $plainTextBox.val( filterEditor.getSession().getValue() );
+ filterEditor.focus();
+ } else {
+ $plainTextBox.textSelection(
+ 'encapsulateSelection', { pre: $filterBuilder.val() + ' ' }
+ );
+ }
$filterBuilder.prop( 'selectedIndex', 0 );
}
@@ -133,18 +175,17 @@
* Fetches a filter from the API and inserts it into the filter box.
*
* @context HTMLElement
- * @param {jQuery.Event} e
+ * @param {jQuery.Event} e The event fired when the function is called
*/
function fetchFilter() {
- /*jshint validthis:true */
- var filterId = $.trim( $( '#mw-abusefilter-load-filter' ).val() ),
+ var filterId = $.trim( $( '#mw-abusefilter-load-filter input' ).val() ),
api;
if ( filterId === '' ) {
return;
}
- $( this ).injectSpinner( 'fetch-spinner' );
+ $( this ).injectSpinner( { id: 'fetch-spinner', size: 'large' } );
// We just ignore errors or unexisting filters over here
api = new mw.Api();
@@ -156,24 +197,27 @@
abfendid: filterId,
abflimit: 1
} )
- .always( function() {
- $.removeSpinner( 'fetch-spinner' );
- } )
- .done( function( data ) {
- if ( data.query.abusefilters[0] !== undefined ) {
- $filterBox.val( data.query.abusefilters[0].pattern );
- }
- } );
+ .always( function () {
+ $.removeSpinner( 'fetch-spinner' );
+ } )
+ .done( function ( data ) {
+ if ( data.query.abusefilters[ 0 ] !== undefined ) {
+ if ( useAce ) {
+ filterEditor.setValue( data.query.abusefilters[ 0 ].pattern );
+ }
+ $plainTextBox.val( data.query.abusefilters[ 0 ].pattern );
+ }
+ } );
}
/**
- * Cycles through all action checkboxes and hides parameter divs
+ * Cycles through all action checkboxes and hides parameter divs.
* that don't have checked boxes
*/
function hideDeselectedActions() {
- $( 'input.mw-abusefilter-action-checkbox' ).each( function() {
+ $( '.mw-abusefilter-action-checkbox input' ).each( function () {
// mw-abusefilter-action-checkbox-{$action}
- var action = this.id.substr( 31 ),
+ var action = this.parentNode.id.substr( 31 ),
$params = $( '#mw-abusefilter-' + action + '-parameters' );
if ( $params.length ) {
@@ -187,91 +231,125 @@
}
/**
- * Fetches the selected warning message for previewing
+ * Fetches the selected warning message for previewing.
+ *
+ * @param {string} action The action the message refers to
*/
- function previewWarnMessage() {
+ function previewMessage( action ) {
var api = new mw.Api(),
args = [
- $( 'input[name=wpFilterDescription]' ).val(),
+ '<nowiki>' + $( 'input[name=wpFilterDescription]' ).val() + '</nowiki>',
$( '#mw-abusefilter-edit-id' ).children().last().text()
],
- message = getCurrentWarningMessage();
- api.get( {
- action: 'query',
- meta: 'allmessages',
- ammessages: message,
- amargs: args.join( '|' ),
- } )
- .done( function( data ) {
- api.parse( data.query.allmessages[0]['*'], {
- disablelimitreport: '',
- preview: '',
- prop: 'text',
- title: 'MediaWiki:' + message,
+ message = getCurrentMessage( action ),
+ // mw-abusefilter-warn-preview, mw-abusefilter-disallow-preview
+ $element = $( '#mw-abusefilter-' + action + '-preview' ),
+ previewButton = action === 'warn' ? toggleWarnPreviewButton : toggleDisallowPreviewButton;
+
+ if ( !$element.is( ':visible' ) ) {
+ api.get( {
+ action: 'query',
+ meta: 'allmessages',
+ ammessages: message,
+ amargs: args.join( '|' )
} )
- .done( function( html ) {
- $( '#mw-abusefilter-warn-preview' ).html( html );
- } );
- } );
+ .done( function ( data ) {
+ api.parse( data.query.allmessages[ 0 ][ '*' ], {
+ disablelimitreport: '',
+ preview: '',
+ prop: 'text',
+ title: 'MediaWiki:' + message
+ } )
+ .done( function ( html ) {
+ $element.show().html( html );
+ previewButton.setFlags(
+ { destructive: true, progressive: false }
+ );
+ } );
+ } );
+ } else {
+ $element.hide();
+ previewButton.setFlags( { destructive: false, progressive: true } );
+ }
}
/**
- * Redirects the browser to the warning message for editing
+ * Redirects the browser to the message for editing.
+ *
+ * @param {string} action The action for which the message is used
*/
- function editWarnMessage() {
- var message = getCurrentWarningMessage();
-
- window.location = mw.config.get( 'wgScript' ) + '?title=MediaWiki:' + mw.util.wikiUrlencode( message ) + '&action=edit&preload=MediaWiki:abusefilter-warning';
+ function editMessage( action ) {
+ var message = getCurrentMessage( action ),
+ defaultMsg = action === 'warn' ? 'warning' : 'disallowed',
+ url = mw.config.get( 'wgScript' ) +
+ '?title=MediaWiki:' + mw.util.wikiUrlencode( message ) +
+ '&action=edit&preload=MediaWiki:abusefilter-' + defaultMsg;
+
+ window.open( url, '_blank' );
}
/**
- * Called if the filter group (#mw-abusefilter-edit-group-input) is changed.
+ * Called if the filter group (#mw-abusefilter-edit-group-input select) is changed.
*
* @context HTMLELement
- * @param {jQuery.Event} e
+ * @param {jQuery.Event} e The event fired when the function is called
*/
function onFilterGroupChange() {
- /*jshint validthis:true */
- var $afWarnMessageExisting, $afWarnMessageOther, newVal;
+ var $afWarnMessageExisting, $afDisallowMessageExisting, newVal;
if ( !$( '#mw-abusefilter-action-warn-checkbox' ).is( ':checked' ) ) {
- $afWarnMessageExisting = $( '#mw-abusefilter-warn-message-existing' );
- $afWarnMessageOther = $( '#mw-abusefilter-warn-message-other' );
- newVal = mw.config.get( 'wgAbuseFilterDefaultWarningMessage' )[$( this ).val()];
+ $afWarnMessageExisting = $( '#mw-abusefilter-warn-message-existing select' );
+ newVal = mw.config.get( 'wgAbuseFilterDefaultWarningMessage' )[ $( this ).val() ];
if ( $afWarnMessageExisting.find( 'option[value=\'' + newVal + '\']' ).length ) {
$afWarnMessageExisting.val( newVal );
- $afWarnMessageOther.val( '' );
+ warnMessageOther.setValue( '' );
} else {
$afWarnMessageExisting.val( 'other' );
- $afWarnMessageOther.val( newVal );
+ warnMessageOther.setValue( newVal );
+ }
+ }
+
+ if ( !$( '#mw-abusefilter-action-disallow-checkbox' ).is( ':checked' ) ) {
+ $afDisallowMessageExisting = $( '#mw-abusefilter-disallow-message-existing select' );
+ newVal = mw.config.get( 'wgAbuseFilterDefaultDisallowMessage' )[ $( this ).val() ];
+
+ if ( $afDisallowMessageExisting.find( 'option[value=\'' + newVal + '\']' ).length ) {
+ $afDisallowMessageExisting.val( newVal );
+ disallowMessageOther.setValue( '' );
+ } else {
+ $afDisallowMessageExisting.val( 'other' );
+ disallowMessageOther.setValue( newVal );
}
}
}
/**
- * Remove the options for warning messages if the filter is set to global
+ * Remove the options for warning and disallow messages if the filter is set to global.
*/
function toggleCustomMessages() {
// Use the table over here as hideDeselectedActions might alter the visibility of the div
- var $warnOptions = $( '#mw-abusefilter-warn-parameters > table' );
+ var $warnOptions = $( '#mw-abusefilter-warn-parameters > table' ),
+ $disallowOptions = $( '#mw-abusefilter-disallow-parameters > table' );
if ( $( '#wpFilterGlobal' ).is( ':checked' ) ) {
// It's a global filter, so use the default message and hide the option from the user
- $( '#mw-abusefilter-warn-message-existing option[value="abusefilter-warning"]' )
- .prop( 'selected', true );
+ warnMessageExisting.setValue( 'abusefilter-warning' );
+ disallowMessageExisting.setValue( 'abusefilter-disallowed' );
$warnOptions.hide();
+ $disallowOptions.hide();
} else {
$warnOptions.show();
+ $disallowOptions.show();
}
}
/**
- * Called if the user presses a key in the load filter field
+ * Called if the user presses a key in the load filter field.
*
* @context HTMLELement
- * @param {jQuery.Event} e
+ * @param {jQuery.Event} e The event fired when the function is called
*/
function onFilterKeypress( e ) {
if ( e.type === 'keypress' && e.which === 13 ) {
@@ -280,12 +358,126 @@
}
}
+ /**
+ * Builds a TagMultiselectWidget, to be used both for throttle groups and change tags
+ *
+ * @param {string} action Either 'throttle' or 'tag', will be used to build element IDs
+ * @param {Array} config The array with configuration passed from PHP code
+ */
+ function buildSelector( action, config ) {
+ var disabled = config.disabled.length !== 0,
+ // mw-abusefilter-throttle-parameters, mw-abusefilter-tag-parameters
+ $container = $( '#mw-abusefilter-' + action + '-parameters' ),
+ // Character used to separate elements in the textarea.
+ separator = action === 'throttle' ? '\n' : ',',
+ selector, field, hiddenField;
+
+ selector =
+ new OO.ui.TagMultiselectWidget( {
+ inputPosition: 'outline',
+ allowArbitrary: true,
+ allowEditTags: true,
+ selected: config.values,
+ // abusefilter-edit-throttle-placeholder, abusefilter-edit-tag-placeholder
+ placeholder: OO.ui.msg( 'abusefilter-edit-' + action + '-placeholder' ),
+ disabled: disabled
+ } );
+ field =
+ new OO.ui.FieldLayout(
+ selector,
+ {
+ label: $( $.parseHTML( config.label ) ),
+ align: 'top'
+ }
+ );
+
+ // mw-abusefilter-hidden-throttle-field, mw-abusefilter-hidden-tag-field
+ hiddenField = OO.ui.infuse( $( '#mw-abusefilter-hidden-' + action + '-field' ) );
+ selector.on( 'change', function () {
+ hiddenField.setValue( selector.getValue().join( separator ) );
+ } );
+
+ // mw-abusefilter-hidden-throttle, mw-abusefilter-hidden-tag
+ $( '#mw-abusefilter-hidden-' + action ).hide();
+ $container.append( field.$element );
+ }
+
// On ready initialization
- $( document ).ready( function() {
- var $exportBox = $( '#mw-abusefilter-export' );
- $filterBox = $( '#' + mw.config.get( 'abuseFilterBoxName' ) );
+ $( document ).ready( function () {
+ var basePath, readOnly,
+ $exportBox = $( '#mw-abusefilter-export' ),
+ isFilterEditor = mw.config.get( 'isFilterEditor' ),
+ tagConfig = mw.config.get( 'tagConfig' ),
+ throttleConfig = mw.config.get( 'throttleConfig' ),
+ cbEnabled, cbDeleted;
+
+ if ( isFilterEditor ) {
+ // Configure the actual editing interface
+ if ( tagConfig ) {
+ // Build the tag selector
+ buildSelector( 'tag', tagConfig );
+ }
+ if ( throttleConfig ) {
+ // Build the throttle groups selector
+ buildSelector( 'throttle', throttleConfig );
+ }
+
+ toggleWarnPreviewButton = OO.ui.infuse( $( '#mw-abusefilter-warn-preview-button' ) );
+ warnMessageExisting = OO.ui.infuse( $( '#mw-abusefilter-warn-message-existing' ) );
+ warnMessageOther = OO.ui.infuse( $( '#mw-abusefilter-warn-message-other' ) );
+ toggleDisallowPreviewButton = OO.ui.infuse( $( '#mw-abusefilter-disallow-preview-button' ) );
+ disallowMessageExisting = OO.ui.infuse( $( '#mw-abusefilter-disallow-message-existing' ) );
+ disallowMessageOther = OO.ui.infuse( $( '#mw-abusefilter-disallow-message-other' ) );
+ }
+
+ $plainTextBox = $( '#' + mw.config.get( 'abuseFilterBoxName' ) );
+
+ if ( $( '#wpAceFilterEditor' ).length ) {
+ // CodeEditor is installed.
+ mw.loader.using( [ 'ext.abuseFilter.ace' ] ).then( function () {
+ $filterBox = $( '#wpAceFilterEditor' );
+
+ filterEditor = ace.edit( 'wpAceFilterEditor' );
+ filterEditor.session.setMode( 'ace/mode/abusefilter' );
+
+ // Ace setup from codeEditor extension
+ basePath = mw.config.get( 'wgExtensionAssetsPath', '' );
+ if ( basePath.slice( 0, 2 ) === '//' ) {
+ // ACE uses web workers, which have importScripts, which don't like
+ // relative links. This is a problem only when the assets are on another
+ // server, so this rewrite should suffice.
+ basePath = window.location.protocol + basePath;
+ }
+ ace.config.set( 'basePath', basePath + '/CodeEditor/modules/ace' );
+
+ // Settings for Ace editor box
+ readOnly = mw.config.get( 'aceConfig' ).aceReadOnly;
+
+ filterEditor.setTheme( 'ace/theme/textmate' );
+ filterEditor.session.setOption( 'useWorker', false );
+ filterEditor.setReadOnly( readOnly );
+ filterEditor.$blockScrolling = Infinity;
+
+ // Display Ace editor
+ switchEditor();
+
+ // Hide the syntax ok message when the text changes and sync dummy box
+ filterEditor.on( 'change', function () {
+ var $el = $( '#mw-abusefilter-syntaxresult' );
+
+ if ( $el.data( 'syntaxOk' ) ) {
+ $el.hide();
+ }
+
+ $plainTextBox.val( filterEditor.getSession().getValue() );
+ } );
+
+ $( '#mw-abusefilter-switcheditor' ).click( switchEditor );
+ } );
+ }
+
// Hide the syntax ok message when the text changes
- $filterBox.keyup( function() {
+ $plainTextBox.change( function () {
var $el = $( '#mw-abusefilter-syntaxresult' );
if ( $el.data( 'syntaxOk' ) ) {
@@ -295,23 +487,59 @@
$( '#mw-abusefilter-load' ).click( fetchFilter );
$( '#mw-abusefilter-load-filter' ).keypress( onFilterKeypress );
- $( '#mw-abusefilter-warn-preview-button' ).click( previewWarnMessage );
- $( '#mw-abusefilter-warn-edit-button' ).click( editWarnMessage );
- $( 'input.mw-abusefilter-action-checkbox' ).click( hideDeselectedActions );
- hideDeselectedActions();
- $( '#wpFilterGlobal' ).change( toggleCustomMessages );
- toggleCustomMessages();
+ if ( isFilterEditor ) {
+ // Add logic for flags and consequences
+ $( '#mw-abusefilter-warn-preview-button' ).click(
+ function () { previewMessage( 'warn' ); }
+ );
+ $( '#mw-abusefilter-disallow-preview-button' ).click(
+ function () { previewMessage( 'disallow' ); }
+ );
+ $( '#mw-abusefilter-warn-edit-button' ).click(
+ function () { editMessage( 'warn' ); }
+ );
+ $( '#mw-abusefilter-disallow-edit-button' ).click(
+ function () { editMessage( 'disallow' ); }
+ );
+ $( '.mw-abusefilter-action-checkbox input' ).click( hideDeselectedActions );
+ hideDeselectedActions();
+
+ $( '#wpFilterGlobal' ).change( toggleCustomMessages );
+ toggleCustomMessages();
+
+ cbEnabled = OO.ui.infuse( $( '#wpFilterEnabled' ) );
+ cbDeleted = OO.ui.infuse( $( '#wpFilterDeleted' ) );
+ OO.ui.infuse( $( '#wpFilterDeletedLabel' ) );
+ cbEnabled.on( 'change',
+ function () {
+ cbDeleted.setDisabled( cbEnabled.isSelected() );
+ if ( cbEnabled.isSelected() ) {
+ cbDeleted.setSelected( false );
+ }
+ }
+ );
+
+ cbDeleted.on( 'change',
+ function () {
+ if ( cbDeleted.isSelected() ) {
+ cbEnabled.setSelected( false );
+ }
+ }
+ );
+
+ $( '#mw-abusefilter-edit-group-input select' ).change( onFilterGroupChange );
+
+ $( '#mw-abusefilter-export-link' ).click(
+ function ( e ) {
+ e.preventDefault();
+ $exportBox.toggle();
+ }
+ );
+ }
$( '#mw-abusefilter-syntaxcheck' ).click( doSyntaxCheck );
$( '#wpFilterBuilder' ).change( addText );
- $( '#mw-abusefilter-edit-group-input' ).change( onFilterGroupChange );
- $( '#mw-abusefilter-export-link' ).click(
- function( e ) {
- e.preventDefault();
- $exportBox.toggle();
- }
- );
} );
-} ( mediaWiki, jQuery ) );
+}( mediaWiki, jQuery, OO ) );
diff --git a/AbuseFilter/modules/ext.abuseFilter.examine.js b/AbuseFilter/modules/ext.abuseFilter.examine.js
index aee39eff..b8d4591a 100644
--- a/AbuseFilter/modules/ext.abuseFilter.examine.js
+++ b/AbuseFilter/modules/ext.abuseFilter.examine.js
@@ -5,47 +5,16 @@
* @author Marius Hoch <hoo@online.de>
*/
-( function( mw, $ ) {
+( function ( mw, $ ) {
'use strict';
- // Syntax result div
- // @type {jQuery}
+ // @var {jQuery} Syntax result div
var $syntaxResult;
/**
- * Tests the filter against an rc event or abuse log entry.
- *
- * @context HTMLElement
- * @param {jQuery.Event} e
- */
- function examinerTestFilter() {
- /*jshint validthis:true */
- var filter = $( '#wpTestFilter' ).val(),
- examine = mw.config.get( 'abuseFilterExamine' ),
- params = {
- action: 'abusefiltercheckmatch',
- filter: filter
- },
- api = new mw.Api();
-
- $( this ).injectSpinner( 'filter-check' );
-
- if ( examine.type === 'rc' ) {
- params.rcid = examine.id;
- } else {
- params.logid = examine.id;
- }
-
- // Use post due to the rather large amount of data
- api.post( params )
- .done( examinerTestProcess )
- .fail( examinerTestProcessFailure );
- }
-
- /**
* Processes the results of the filter test
*
- * @param {Object} data
+ * @param {Object} data The response of the API request
*/
function examinerTestProcess( data ) {
var msg, exClass;
@@ -82,8 +51,9 @@
} else if ( error === 'nosuchrcid' || error === 'nosuchlogid' ) {
msg = 'abusefilter-examine-notfound';
} else if ( error === 'permissiondenied' ) {
- // The 'abusefilter-modify' right is needed to use this API
- msg = 'abusefilter-mustbeeditor';
+ // The 'abusefilter-modify' or 'abusefilter-view-private' right is needed
+ // to use this API
+ msg = 'abusefilter-mustviewprivateoredit';
} else if ( error === 'http' ) {
msg = 'abusefilter-http-error';
} else {
@@ -95,8 +65,37 @@
.show();
}
- $( document ).ready( function() {
+ /**
+ * Tests the filter against an rc event or abuse log entry.
+ *
+ * @context HTMLElement
+ * @param {jQuery.Event} e The event fired when the function is called
+ */
+ function examinerTestFilter() {
+ var filter = $( '#wpTestFilter' ).val(),
+ examine = mw.config.get( 'abuseFilterExamine' ),
+ params = {
+ action: 'abusefiltercheckmatch',
+ filter: filter
+ },
+ api = new mw.Api();
+
+ $( this ).injectSpinner( { id: 'filter-check', size: 'large' } );
+
+ if ( examine.type === 'rc' ) {
+ params.rcid = examine.id;
+ } else {
+ params.logid = examine.id;
+ }
+
+ // Use post due to the rather large amount of data
+ api.post( params )
+ .done( examinerTestProcess )
+ .fail( examinerTestProcessFailure );
+ }
+
+ $( document ).ready( function () {
$syntaxResult = $( '#mw-abusefilter-syntaxresult' );
$( '#mw-abusefilter-examine-test' ).click( examinerTestFilter );
} );
-} ( mediaWiki, jQuery ) );
+}( mediaWiki, jQuery ) );
diff --git a/AbuseFilter/modules/ext.abuseFilter.tools.js b/AbuseFilter/modules/ext.abuseFilter.tools.js
index 637d44a8..52e2712e 100644
--- a/AbuseFilter/modules/ext.abuseFilter.tools.js
+++ b/AbuseFilter/modules/ext.abuseFilter.tools.js
@@ -5,68 +5,41 @@
* @author Marius Hoch <hoo@online.de>
*/
-( function( mw, $ ) {
+( function ( mw, $, OO ) {
'use strict';
/**
* Submits the expression to be evaluated.
* @context HTMLElement
- * @param {jQuery.Event} e
+ * @param {jQuery.Event} e The event fired when the function is called
*/
function doExprSubmit() {
- /*jshint validthis:true */
var expr = $( '#wpTestExpr' ).val(),
api = new mw.Api();
- $( this ).injectSpinner( 'abusefilter-expr' );
+ $( this ).injectSpinner( { id: 'abusefilter-expr', size: 'large' } );
api.post( {
action: 'abusefilterevalexpression',
expression: expr
} )
- .fail( function( error, details ) {
- var msg = error === 'http' ? 'abusefilter-http-error' : 'unknown-error';
- $.removeSpinner( 'abusefilter-expr' );
- $( '#mw-abusefilter-expr-result' )
- .text( mw.msg( msg, details.exception ) );
- } )
- .done( function( data ) {
- $.removeSpinner( 'abusefilter-expr' );
-
- $( '#mw-abusefilter-expr-result' )
- .text( data.abusefilterevalexpression.result );
- } );
- }
-
- /**
- * Submits a call to reautoconfirm a user.
- * @context HTMLElement
- * @param {jQuery.Event} e
- */
- function doReautoSubmit() {
- /*jshint validthis:true */
- var name = $( '#reautoconfirm-user' ).val(),
- api;
+ .fail( function ( error, details ) {
+ var msg = error === 'http' ? 'abusefilter-http-error' : 'unknown-error';
+ $.removeSpinner( 'abusefilter-expr' );
+ $( '#mw-abusefilter-expr-result' )
+ .text( mw.msg( msg, details.exception ) );
+ } )
+ .done( function ( data ) {
+ $.removeSpinner( 'abusefilter-expr' );
- if ( name === '' ) {
- return;
- }
-
- $( this ).injectSpinner( 'abusefilter-reautoconfirm' );
-
- api = new mw.Api();
- api.post( {
- action: 'abusefilterunblockautopromote',
- user: name,
- token: mw.user.tokens.get( 'editToken' )
- } )
- .done( processReautoconfirm )
- .fail( processReautoconfirmFailure );
+ $( '#mw-abusefilter-expr-result' )
+ .text( data.abusefilterevalexpression.result );
+ } );
}
/**
* Processes the result of the unblocking autopromotions for a user
*
- * @param {Object} data
+ * @param {Object} data The response of the API request
*/
function processReautoconfirm( data ) {
mw.notify(
@@ -79,8 +52,8 @@
/**
* Processes the result of the unblocking autopromotions for a user in case of an error
*
- * @param {string} errorCode
- * @param {Object} data
+ * @param {string} errorCode Identifier of the error
+ * @param {Object} data The response of the API request
*/
function processReautoconfirmFailure( errorCode, data ) {
var msg;
@@ -104,8 +77,36 @@
$.removeSpinner( 'abusefilter-reautoconfirm' );
}
- $( document ).ready( function() {
+ /**
+ * Submits a call to reautoconfirm a user.
+ * @context HTMLElement
+ * @param {jQuery.Event} e The event fired when the function is called
+ * @return {boolean} False to prevent form submission
+ */
+ function doReautoSubmit() {
+ var nameField = OO.ui.infuse( $( '#reautoconfirm-user' ) ),
+ name = nameField.getValue(),
+ api;
+
+ if ( name === '' ) {
+ return false;
+ }
+
+ $( this ).injectSpinner( { id: 'abusefilter-reautoconfirm', size: 'large' } );
+
+ api = new mw.Api();
+ api.post( {
+ action: 'abusefilterunblockautopromote',
+ user: name,
+ token: mw.user.tokens.get( 'editToken' )
+ } )
+ .done( processReautoconfirm )
+ .fail( processReautoconfirmFailure );
+ return false;
+ }
+
+ $( document ).ready( function () {
$( '#mw-abusefilter-submitexpr' ).click( doExprSubmit );
$( '#mw-abusefilter-reautoconfirmsubmit' ).click( doReautoSubmit );
} );
-} ( mediaWiki, jQuery ) );
+}( mediaWiki, jQuery, OO ) );
diff --git a/AbuseFilter/modules/mode-abusefilter.js b/AbuseFilter/modules/mode-abusefilter.js
new file mode 100644
index 00000000..a4d82a8f
--- /dev/null
+++ b/AbuseFilter/modules/mode-abusefilter.js
@@ -0,0 +1,114 @@
+/* global ace, mw */
+ace.define( 'ace/mode/abusefilter_highlight_rules', [ 'require', 'exports', 'module', 'ace/lib/oop', 'ace/mode/text_highlight_rules' ], function ( require, exports ) {
+ 'use strict';
+
+ var oop = require( 'ace/lib/oop' ),
+ TextHighlightRules = require( './text_highlight_rules' ).TextHighlightRules,
+ AFHighlightRules = function () {
+ var cfg = mw.config.get( 'aceConfig' ),
+ constants = ( 'true|false|null' ),
+ keywordMapper = this.createKeywordMapper(
+ {
+ keyword: cfg.keywords,
+ 'support.function': cfg.functions,
+ 'constant.language': constants,
+ 'variable.language': cfg.variables,
+ 'invalid.deprecated': cfg.deprecated,
+ 'invalid.illegal': cfg.disabled
+ },
+ 'identifier'
+ ),
+ integer = '(?:(?:[1-9]\\d*)|(?:0))',
+ fraction = '(?:\\.\\d+)',
+ intPart = '(?:\\d+)',
+ pointFloat = '(?:(?:' + intPart + '?' + fraction + ')|(?:' + intPart + '\\.))',
+ floatNumber = '(?:' + pointFloat + ')',
+ singleQuoteString = '\'(?:[^\\\\]|\\\\.)*?\'',
+ doubleQuoteString = '"(?:[^\\\\]|\\\\.)*?"';
+
+ this.$rules = {
+ start: [ {
+ token: 'comment',
+ regex: '\\/\\*',
+ next: 'comment'
+ }, {
+ token: 'string',
+ regex: doubleQuoteString
+ }, {
+ token: 'string',
+ regex: singleQuoteString
+ }, {
+ token: 'constant.numeric',
+ regex: floatNumber
+ }, {
+ token: 'constant.numeric',
+ regex: integer + '\\b'
+ }, {
+ token: keywordMapper,
+ regex: '[a-zA-Z_][a-zA-Z0-9_]*\\b'
+ }, {
+ token: 'keyword.operator',
+ regex: cfg.operators
+ }, {
+ token: 'paren.lparen',
+ regex: '[\\[\\(]'
+ }, {
+ token: 'paren.rparen',
+ regex: '[\\]\\)]'
+ }, {
+ token: 'text',
+ regex: '\\s+|\\w+'
+ } ],
+ comment: [ {
+ token: 'comment',
+ regex: '\\*\\/',
+ next: 'start'
+ }, {
+ defaultToken: 'comment'
+ } ]
+ };
+
+ this.normalizeRules();
+ };
+
+ oop.inherits( AFHighlightRules, TextHighlightRules );
+
+ exports.AFHighlightRules = AFHighlightRules;
+} );
+
+ace.define( 'ace/mode/abusefilter', [ 'require', 'exports', 'module', 'ace/lib/oop', 'ace/mode/text', 'ace/mode/abusefilter_highlight_rules' ], function ( require, exports ) {
+ 'use strict';
+
+ var oop = require( 'ace/lib/oop' ),
+ TextMode = require( './text' ).Mode,
+ AFHighlightRules = require( './abusefilter_highlight_rules' ).AFHighlightRules,
+ MatchingBraceOutdent = require( './matching_brace_outdent' ).MatchingBraceOutdent,
+ Mode = function () {
+ this.HighlightRules = AFHighlightRules;
+ this.$behaviour = this.$defaultBehaviour;
+ this.$outdent = new MatchingBraceOutdent();
+ };
+ oop.inherits( Mode, TextMode );
+
+ ( function () {
+ this.blockComment = {
+ start: '/*',
+ end: '*/'
+ };
+ this.getNextLineIndent = function ( state, line ) {
+ var indent = this.$getIndent( line );
+ return indent;
+ };
+ this.checkOutdent = function ( state, line, input ) {
+ return this.$outdent.checkOutdent( line, input );
+ };
+ this.autoOutdent = function ( state, doc, row ) {
+ this.$outdent.autoOutdent( doc, row );
+ };
+
+ this.$id = 'ace/mode/abusefilter';
+ } )
+ .call( Mode.prototype );
+
+ exports.Mode = Mode;
+} );
diff --git a/AbuseFilter/package.json b/AbuseFilter/package.json
index 520545df..4745d1fd 100644
--- a/AbuseFilter/package.json
+++ b/AbuseFilter/package.json
@@ -1,15 +1,18 @@
{
- "private": true,
- "scripts": {
- "test": "grunt test"
- },
- "devDependencies": {
- "grunt": "1.0.1",
- "grunt-banana-checker": "0.5.0",
- "grunt-contrib-jshint": "1.0.0",
- "grunt-jsonlint": "1.0.7",
- "grunt-stylelint": "0.6.0",
- "stylelint": "7.8.0",
- "stylelint-config-wikimedia": "0.4.1"
- }
+ "private": true,
+ "description": "Build tools for the AbuseFilter mediawiki extension.",
+ "scripts": {
+ "test": "grunt test"
+ },
+ "devDependencies": {
+ "eslint-config-wikimedia": "0.7.2",
+ "eslint-plugin-qunit": "3.3.1",
+ "grunt": "1.0.3",
+ "grunt-banana-checker": "0.6.0",
+ "grunt-eslint": "21.0.0",
+ "grunt-jsonlint": "1.1.0",
+ "grunt-stylelint": "0.10.0",
+ "stylelint": "9.2.0",
+ "stylelint-config-wikimedia": "0.4.3"
+ }
}
diff --git a/AbuseFilter/phpcs.xml b/AbuseFilter/phpcs.xml
deleted file mode 100644
index 47cfb3c3..00000000
--- a/AbuseFilter/phpcs.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0"?>
-<ruleset>
- <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
- <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationProtected" />
- <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic" />
- <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamComment" />
- <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamName" />
- <exclude name="MediaWiki.Commenting.FunctionComment.MissingParamTag" />
- <exclude name="MediaWiki.Commenting.FunctionComment.MissingReturn" />
- <exclude name="MediaWiki.Commenting.FunctionComment.ParamNameNoMatch" />
- <exclude name="MediaWiki.Commenting.FunctionComment.WrongStyle" />
- <exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
- <exclude name="MediaWiki.Files.ClassMatchesFilename.WrongCase" />
- <exclude name="MediaWiki.Files.OneClassPerFile.MultipleFound" />
- <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment"/>
- </rule>
- <rule ref="Generic.Files.LineLength">
- <exclude-pattern>AbuseFilter.alias.php</exclude-pattern>
- </rule>
- <file>.</file>
- <arg name="extensions" value="php,php5,inc"/>
- <arg name="encoding" value="UTF-8"/>
- <exclude-pattern>vendor</exclude-pattern>
- <exclude-pattern>node_modules</exclude-pattern>
- <exclude-pattern>extensions/AntiSpoof</exclude-pattern>
-</ruleset>
diff --git a/AbuseFilter/tests/parserTests/arith.t b/AbuseFilter/tests/parserTests/arith.t
index e3c42e32..1f88e9df 100644
--- a/AbuseFilter/tests/parserTests/arith.t
+++ b/AbuseFilter/tests/parserTests/arith.t
@@ -1 +1,27 @@
-(1 + 1 == 2) & (5 - 3 = 2) & (2 * 3 = 6) & (10 / 2 = 5) & (10 % 7 = 3) & (2 ** 4 = 16)
+(1 + 1 === 2) &
+(1.5 + 1.5 === 3.0) &
+(2.5 + 1 === 3.5) &
+(0 + 1 === 1) &
+(2.5 + 0 === 2.5) &
+(5 - 3 === 2) &
+(5 - 3.5 === 1.5) &
+(5.5 - 3.5 === 2.0) &
+(1 - 0 === 1) &
+(2.5 - 0 === 2.5) &
+(2 * 3 === 6) &
+(2 * 3.5 === 7.0) &
+(2.5 * 3.5 === 8.75) &
+(2.5 * 0 === 0.0) &
+(10 / 2 === 5) &
+(10 / 2.5 === 4.0) &
+(18 / 36 === 0.5) &
+(0 / 36 === 0) &
+(12.5 / 2.5 === 5.0) &
+(10.5 / 2.5 === 4.2) &
+(10 % 7 === 3) &
+(10.48762 % 7 === 3) &
+(10 % 7.123576 === 3) &
+(2 ** 4 === 16) &
+(2.5 ** 2 === 6.25) &
+(2.5 ** 0 === 1.0) &
+(1000 ** 0 === 1) \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/list-assignment.r b/AbuseFilter/tests/parserTests/array-assignment.r
index 4736e080..4736e080 100644
--- a/AbuseFilter/tests/parserTests/list-assignment.r
+++ b/AbuseFilter/tests/parserTests/array-assignment.r
diff --git a/AbuseFilter/tests/parserTests/array-assignment.t b/AbuseFilter/tests/parserTests/array-assignment.t
new file mode 100644
index 00000000..a22294e3
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/array-assignment.t
@@ -0,0 +1,6 @@
+test_array := [ [1, 2], [3, 4] ];
+
+test_array[1] := 42;
+test_array[] := 17;
+
+test_array[0][0] == 1 & test_array[0][1] == 2 & test_array[1] == 42 & test_array[2] == 17
diff --git a/AbuseFilter/tests/parserTests/list-inequality.r b/AbuseFilter/tests/parserTests/array-comparisons.r
index 4736e080..4736e080 100644
--- a/AbuseFilter/tests/parserTests/list-inequality.r
+++ b/AbuseFilter/tests/parserTests/array-comparisons.r
diff --git a/AbuseFilter/tests/parserTests/array-comparisons.t b/AbuseFilter/tests/parserTests/array-comparisons.t
new file mode 100644
index 00000000..dc6122f5
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/array-comparisons.t
@@ -0,0 +1,15 @@
+a := [1, 2, 3];
+b := [1, 2, 3];
+c := [2, 3, 4];
+d := [1, 2, 3, 4];
+e := ['1', '2', '3'];
+f := [[['1']]];
+g := [[[1]]];
+h := [[1, 2], 3];
+i := [['1', 2], '3'];
+j := [1];
+k := ['1'];
+l := [];
+
+a == b & a === b & a != c & b != d & a == e & a !== e & f == g & f !== g & h == i & h !== i & e != i & j != 1 &
+k != '1' & l == false & l == null & l !== false & l !== null & false == l & null == l & false !== l & null !== l
diff --git a/AbuseFilter/tests/parserTests/atombraces.r b/AbuseFilter/tests/parserTests/atombraces.r
new file mode 100644
index 00000000..f4efce9f
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/atombraces.r
@@ -0,0 +1 @@
+NOT MATCH
diff --git a/AbuseFilter/tests/parserTests/atombraces.t b/AbuseFilter/tests/parserTests/atombraces.t
new file mode 100644
index 00000000..5bb50190
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/atombraces.t
@@ -0,0 +1 @@
+( )
diff --git a/AbuseFilter/tests/parserTests/cast.t b/AbuseFilter/tests/parserTests/cast.t
index 0ec2720e..c0bc317c 100644
--- a/AbuseFilter/tests/parserTests/cast.t
+++ b/AbuseFilter/tests/parserTests/cast.t
@@ -1 +1 @@
-(string(1) === "1") & (int("1") === 1) & (float(1) === 1.0)
+(string(1) === "1") & (int("1") === 1) & (float(1) === 1.0) & bool(1) & !bool(0)
diff --git a/AbuseFilter/tests/parserTests/shortcircuit.r b/AbuseFilter/tests/parserTests/ccnorm-contains-all.r
index 4736e080..4736e080 100644
--- a/AbuseFilter/tests/parserTests/shortcircuit.r
+++ b/AbuseFilter/tests/parserTests/ccnorm-contains-all.r
diff --git a/AbuseFilter/tests/parserTests/ccnorm-contains-all.t b/AbuseFilter/tests/parserTests/ccnorm-contains-all.t
new file mode 100644
index 00000000..9a8635c8
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/ccnorm-contains-all.t
@@ -0,0 +1 @@
+ccnorm_contains_all("the f00 is on the b4r", "foo", "is on", "bar")
diff --git a/AbuseFilter/tests/parserTests/whitespace.r b/AbuseFilter/tests/parserTests/ccnorm-contains-any.r
index 4736e080..4736e080 100644
--- a/AbuseFilter/tests/parserTests/whitespace.r
+++ b/AbuseFilter/tests/parserTests/ccnorm-contains-any.r
diff --git a/AbuseFilter/tests/parserTests/ccnorm-contains-any.t b/AbuseFilter/tests/parserTests/ccnorm-contains-any.t
new file mode 100644
index 00000000..6aeac35c
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/ccnorm-contains-any.t
@@ -0,0 +1 @@
+ccnorm_contains_any("like 4ny0ne else", "foo", "aNyon3") & ccnorm_contains_any("street f1ghter","F1ght")
diff --git a/AbuseFilter/tests/parserTests/comment.t b/AbuseFilter/tests/parserTests/comment.t
index 2ddf5829..3252b87a 100644
--- a/AbuseFilter/tests/parserTests/comment.t
+++ b/AbuseFilter/tests/parserTests/comment.t
@@ -1 +1,4 @@
-1 /* a */ == /* b */ "1" /* c */
+1 /* a */ == /* b */ "1" /* c */ /* &
+
+1/0
+*/
diff --git a/AbuseFilter/tests/parserTests/concatenation.r b/AbuseFilter/tests/parserTests/concatenation.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/concatenation.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/concatenation.t b/AbuseFilter/tests/parserTests/concatenation.t
new file mode 100644
index 00000000..c4a8065f
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/concatenation.t
@@ -0,0 +1,7 @@
+'foo' + 'bar' === 'foobar' &
+'' + 'foo' + '' === 'foo' &
+'foo' + ' ' + 'bar' === 'foo bar' &
+'foo' + 234 === 'foo234' &
+452 + 'foo' === '452foo' &
+'foo' + false === 'foo' &
+'foo' + [ 'bar', 'foo' ] === 'foobar\nfoo\n'
diff --git a/AbuseFilter/tests/parserTests/contains-all.r b/AbuseFilter/tests/parserTests/contains-all.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/contains-all.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/contains-all.t b/AbuseFilter/tests/parserTests/contains-all.t
new file mode 100644
index 00000000..f8b81b24
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/contains-all.t
@@ -0,0 +1 @@
+contains_all("the foo is on the bar", "foo", "is on", "bar") & !(contains_all(['foo', 'bar', 'hey'], 'foo', 'bar', 'sup')) & contains_all([1, 2, 3], '1', '2', '3') \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/contains-any.r b/AbuseFilter/tests/parserTests/contains-any.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/contains-any.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/contains-any.t b/AbuseFilter/tests/parserTests/contains-any.t
new file mode 100644
index 00000000..56f1c8bd
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/contains-any.t
@@ -0,0 +1 @@
+contains_any("like anyone else", "else", "someone") & contains_any("street fighter", "fight") & !(contains_any('My foo is cute', 'bar', 'wtf')) & contains_any([[1], [2,3]], 1)
diff --git a/AbuseFilter/tests/parserTests/contains.r b/AbuseFilter/tests/parserTests/contains.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/contains.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/contains.t b/AbuseFilter/tests/parserTests/contains.t
new file mode 100644
index 00000000..5aeb638a
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/contains.t
@@ -0,0 +1,7 @@
+"quux" contains "ux" &
+['1', 'foo'] contains '1' &
+'fo obar' contains 'foo' === false &
+['foo'] contains 'f' &
+'' contains 'a' === false &
+'a' contains '' === false &
+'' contains '' === false \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/containsfunction.r b/AbuseFilter/tests/parserTests/containsfunction.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/containsfunction.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/containsfunction.t b/AbuseFilter/tests/parserTests/containsfunction.t
new file mode 100644
index 00000000..418c9e2c
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/containsfunction.t
@@ -0,0 +1,2 @@
+contains_any( "", "a") === false &
+contains_any( "a", "", "a") === true \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/count.t b/AbuseFilter/tests/parserTests/count.t
index 5733b0b2..cc9e719f 100644
--- a/AbuseFilter/tests/parserTests/count.t
+++ b/AbuseFilter/tests/parserTests/count.t
@@ -1,6 +1,8 @@
-count("a,b,c,d") = 4 &
-count(",", "a,b,c,d") = 3 &
-count("", "abcd") = 0 &
-count("a", "abab") = 2 &
-count("ab", "abab") = 2 &
-count("aa", "aaaaa") = 2
+count("a,b,c,d") === 4 &
+count(",", "a,b,c,d") === 3 &
+count("", "abcd") === 0 &
+count("a", "abab") === 2 &
+count("ab", "abab") === 2 &
+count("aa", "aaaaa") === 2 &
+count( [ "a", "b", "c" ] ) === 3 &
+count( [] ) === 0
diff --git a/AbuseFilter/tests/parserTests/equals-to-any.r b/AbuseFilter/tests/parserTests/equals-to-any.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/equals-to-any.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/equals-to-any.t b/AbuseFilter/tests/parserTests/equals-to-any.t
new file mode 100644
index 00000000..e10220ca
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/equals-to-any.t
@@ -0,0 +1,4 @@
+equals_to_any( "foo", "bar", "foo", "pizza" ) &
+equals_to_any( 15, 3, 77, 18, 15 ) &
+equals_to_any( "", 3, 77, 18, 15, "duh" ) === false &
+equals_to_any( "", 3, 77, 18, 15, "duh", "" ) \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/expn.t b/AbuseFilter/tests/parserTests/expn.t
index bd39c386..17849182 100644
--- a/AbuseFilter/tests/parserTests/expn.t
+++ b/AbuseFilter/tests/parserTests/expn.t
@@ -1,2 +1,2 @@
/* In filter language, the exponentiation is left-associative */
-(2 ** 3 ** 2) == 64
+(2 ** 3 ** 2) === 64
diff --git a/AbuseFilter/tests/parserTests/float.t b/AbuseFilter/tests/parserTests/float.t
index 9ce8c919..e31067e0 100644
--- a/AbuseFilter/tests/parserTests/float.t
+++ b/AbuseFilter/tests/parserTests/float.t
@@ -1 +1 @@
-(5 / 2 = 2) & (5. / 2 = 2.5) & (5 / 2. = 2.5) & (int(.5) = 0)
+(5 / 2 === 2.5) & (int(5 / 2) === 2) & (5. / 2 === 2.5) & (5 / 2. === 2.5) & (int(.5) === 0)
diff --git a/AbuseFilter/tests/parserTests/get-matches.r b/AbuseFilter/tests/parserTests/get-matches.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/get-matches.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/get-matches.t b/AbuseFilter/tests/parserTests/get-matches.t
new file mode 100644
index 00000000..88e163b4
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/get-matches.t
@@ -0,0 +1,4 @@
+/* More complete tests for get_matches are in AbuseFilterParserTest.php */
+a := get_matches('I am a (dog|cat)', 'What did you say?');
+get_matches('The (truth|pineapple) is (?:rarely)? pure and (nee*v(ah|er) sh?imple)', 'The truth is rarely pure and never simple, Wilde said') == ['The truth is rarely pure and never simple', 'truth', 'never simple', 'er'] &
+a === [false, false] \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/ifthen.t b/AbuseFilter/tests/parserTests/ifthen.t
index 160d1ab8..c22a3947 100644
--- a/AbuseFilter/tests/parserTests/ifthen.t
+++ b/AbuseFilter/tests/parserTests/ifthen.t
@@ -1 +1,2 @@
-(if 1 then 2 else 3 end) == 2
+(if 1 then 2 else 3 end) === 2 &
+(if false then 2 else 3 end) === 3
diff --git a/AbuseFilter/tests/parserTests/in.t b/AbuseFilter/tests/parserTests/in.t
index 467639ce..73d480d3 100644
--- a/AbuseFilter/tests/parserTests/in.t
+++ b/AbuseFilter/tests/parserTests/in.t
@@ -1 +1 @@
-"foo" in "foobar" & "quux" contains "ux"
+"foo" in "foobar" & '1' in ['1', 'foo'] & !('foo' in 'fo obar') & 'f' in ['foo']
diff --git a/AbuseFilter/tests/parserTests/lazyboolinvert.r b/AbuseFilter/tests/parserTests/lazyboolinvert.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/lazyboolinvert.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/lazyboolinvert.t b/AbuseFilter/tests/parserTests/lazyboolinvert.t
new file mode 100644
index 00000000..71f5f213
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/lazyboolinvert.t
@@ -0,0 +1 @@
+1 === 1 | !true
diff --git a/AbuseFilter/tests/parserTests/lazyfunction.r b/AbuseFilter/tests/parserTests/lazyfunction.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/lazyfunction.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/lazyfunction.t b/AbuseFilter/tests/parserTests/lazyfunction.t
new file mode 100644
index 00000000..4c77b374
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/lazyfunction.t
@@ -0,0 +1 @@
+1 === 1 | contains_any( "a", "b")
diff --git a/AbuseFilter/tests/parserTests/lazykeyword.r b/AbuseFilter/tests/parserTests/lazykeyword.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/lazykeyword.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/lazykeyword.t b/AbuseFilter/tests/parserTests/lazykeyword.t
new file mode 100644
index 00000000..da680aef
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/lazykeyword.t
@@ -0,0 +1 @@
+1 === 1 | "a" like "b"
diff --git a/AbuseFilter/tests/parserTests/lazypow.r b/AbuseFilter/tests/parserTests/lazypow.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/lazypow.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/lazypow.t b/AbuseFilter/tests/parserTests/lazypow.t
new file mode 100644
index 00000000..8b650e27
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/lazypow.t
@@ -0,0 +1 @@
+1 === 1 | 2**3 === 8
diff --git a/AbuseFilter/tests/parserTests/lazysum.r b/AbuseFilter/tests/parserTests/lazysum.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/lazysum.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/lazysum.t b/AbuseFilter/tests/parserTests/lazysum.t
new file mode 100644
index 00000000..9fedb3f3
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/lazysum.t
@@ -0,0 +1 @@
+1 === 1 | 2 + 3 === 5
diff --git a/AbuseFilter/tests/parserTests/lazyunarys.r b/AbuseFilter/tests/parserTests/lazyunarys.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/lazyunarys.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/lazyunarys.t b/AbuseFilter/tests/parserTests/lazyunarys.t
new file mode 100644
index 00000000..51a1ce3e
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/lazyunarys.t
@@ -0,0 +1 @@
+1 === 1 | -4 !== 4
diff --git a/AbuseFilter/tests/parserTests/list-assignment.t b/AbuseFilter/tests/parserTests/list-assignment.t
deleted file mode 100644
index c055541b..00000000
--- a/AbuseFilter/tests/parserTests/list-assignment.t
+++ /dev/null
@@ -1,6 +0,0 @@
-test_list := [ [1, 2], [3, 4] ];
-
-test_list[1] := 42;
-test_list[] := 17;
-
-test_list[0][0] == 1 & test_list[0][1] == 2 & test_list[1] == 42 & test_list[2] == 17
diff --git a/AbuseFilter/tests/parserTests/list-inequality.t b/AbuseFilter/tests/parserTests/list-inequality.t
deleted file mode 100644
index 6ffed4f0..00000000
--- a/AbuseFilter/tests/parserTests/list-inequality.t
+++ /dev/null
@@ -1,3 +0,0 @@
-a := [1, 2, 3];
-
-a != a
diff --git a/AbuseFilter/tests/parserTests/multipleskipbraces.r b/AbuseFilter/tests/parserTests/multipleskipbraces.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/multipleskipbraces.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/multipleskipbraces.t b/AbuseFilter/tests/parserTests/multipleskipbraces.t
new file mode 100644
index 00000000..ea8def7f
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/multipleskipbraces.t
@@ -0,0 +1 @@
+1 === 1 | ( ( ( 3 === 2 ) ) )
diff --git a/AbuseFilter/tests/parserTests/mwexamples-arithmetic.r b/AbuseFilter/tests/parserTests/mwexamples-arithmetic.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/mwexamples-arithmetic.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/mwexamples-arithmetic.t b/AbuseFilter/tests/parserTests/mwexamples-arithmetic.t
new file mode 100644
index 00000000..7cfaf4af
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/mwexamples-arithmetic.t
@@ -0,0 +1,8 @@
+/* Examples from [[mw:Extension:AbuseFilter/Rules format#Arithmetic]] */
+
+1 + 1 === 2 &
+2 * 2 === 4 &
+12 / 24 === 0.5 &
+24 / 12 === 2 &
+9 ** 2 === 81 &
+6 % 5 === 1 \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/mwexamples-arrays.r b/AbuseFilter/tests/parserTests/mwexamples-arrays.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/mwexamples-arrays.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/mwexamples-arrays.t b/AbuseFilter/tests/parserTests/mwexamples-arrays.t
new file mode 100644
index 00000000..91538fed
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/mwexamples-arrays.t
@@ -0,0 +1,10 @@
+/* Examples from [[mw:Extension:AbuseFilter/Rules format#Lists]] */
+
+a_array := [ 5, 6, 7, 10];
+a_array[0] == 5 &
+length(a_array) == 4 &
+string(a_array) == "5\n6\n7\n10\n" &
+5 in a_array == true &
+'5' in a_array == true &
+'5\n6' in a_array == true &
+1 in a_array == true \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/mwexamples-bools.r b/AbuseFilter/tests/parserTests/mwexamples-bools.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/mwexamples-bools.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/mwexamples-bools.t b/AbuseFilter/tests/parserTests/mwexamples-bools.t
new file mode 100644
index 00000000..a8e88539
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/mwexamples-bools.t
@@ -0,0 +1,13 @@
+/* Examples from [[mw:Extension:AbuseFilter/Rules format#Boolean operations]] */
+
+(1 | 1) &
+(1 | 0) &
+!(0 | 0) &
+(1 & 1) &
+!(1 & 0) &
+!(0 & 0) &
+!(1 ^ 1) &
+(1 ^ 0) &
+!(0 ^ 0) &
+!(!1)
+
diff --git a/AbuseFilter/tests/parserTests/mwexamples-comparisons.r b/AbuseFilter/tests/parserTests/mwexamples-comparisons.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/mwexamples-comparisons.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/mwexamples-comparisons.t b/AbuseFilter/tests/parserTests/mwexamples-comparisons.t
new file mode 100644
index 00000000..76582590
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/mwexamples-comparisons.t
@@ -0,0 +1,22 @@
+/* Examples from [[mw:Extension:AbuseFilter/Rules format#Simple comparisons]] */
+
+!(1 == 2) &
+(1 <= 2) &
+!(1 >= 2) &
+(1 != 2) &
+(1 < 2) &
+!(1 > 2) &
+(2 = 2) &
+('' == false) &
+!('' === false) &
+(1 == true) &
+!(1 === true) &
+(['1','2','3'] == ['1','2','3']) &
+([1,2,3] === [1,2,3]) &
+(['1','2','3'] == [1,2,3]) &
+!(['1','2','3'] === [1,2,3]) &
+([1,1,''] == [true, true, false]) &
+([] == false) &
+([] == null) &
+!(['1'] == '1')
+
diff --git a/AbuseFilter/tests/parserTests/mwexamples-functions.r b/AbuseFilter/tests/parserTests/mwexamples-functions.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/mwexamples-functions.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/mwexamples-functions.t b/AbuseFilter/tests/parserTests/mwexamples-functions.t
new file mode 100644
index 00000000..ea5bf1b1
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/mwexamples-functions.t
@@ -0,0 +1,22 @@
+/* Examples from [[mw:Extension:AbuseFilter/Rules format#Functions]] */
+
+length( "Wikipedia" ) === 9 &
+lcase( "WikiPedia" ) === 'wikipedia' &
+ccnorm( "w1k1p3d14" ) === 'WIKIPEDIA' &
+ccnorm( "ωɨƙɩᑭƐƉ1α" ) === 'WIKIPEDIA' &
+ccnorm_contains_any( "w1k1p3d14", "wiKiP3D1A", "foo", "bar" ) === true &
+ccnorm_contains_any( "w1k1p3d14", "foo", "bar", "baz" ) === false &
+ccnorm_contains_any( "w1k1p3d14 is 4w3s0me", "bar", "baz", "some" ) === true &
+ccnorm( "ìíîïĩїį!ľ₤ĺľḷĿ" ) === 'IIIIIII!LLLLLL' &
+norm( "!!ω..ɨ..ƙ..ɩ..ᑭᑭ..Ɛ.Ɖ@@1%%α!!" ) === 'WIKIPEDAIA' &
+norm( "F00 B@rr" ) === 'FOBAR' &
+rmdoubles( "foobybboo" ) === 'fobybo' &
+specialratio( "Wikipedia!" ) === 0.1 &
+count( "foo", "foofooboofoo" ) === 3 &
+count( "foo,bar,baz" ) === 3 &
+rmspecials( "FOOBAR!!1" ) === 'FOOBAR1' &
+rescape( "abc* (def)" ) === 'abc\* \(def\)' &
+str_replace( "foobarbaz", "bar", "-" ) === 'foo-baz' &
+ip_in_range( "127.0.10.0", "127.0.0.0/12" ) === true &
+contains_any( "foobar", "x", "y", "f" ) === true &
+get_matches( "(foo?ba+r) is (so+ good)", "fobaaar is soooo good to eat" ) === ['fobaaar is soooo good', 'fobaaar', 'soooo good'] \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/mwexamples-keywords.r b/AbuseFilter/tests/parserTests/mwexamples-keywords.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/mwexamples-keywords.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/mwexamples-keywords.t b/AbuseFilter/tests/parserTests/mwexamples-keywords.t
new file mode 100644
index 00000000..d2fbb4a5
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/mwexamples-keywords.t
@@ -0,0 +1,10 @@
+/* Examples from [[mw:Extension:AbuseFilter/Rules format#Keywords]] */
+
+("1234" like "12?4") &
+("1234" like "12*") &
+("foo" in "foobar") &
+("foobar" contains "foo") &
+("o" in ["foo", "bar"]) &
+("foo" regex "\w+") &
+("a\b" regex "a\\\\b") &
+("a\b" regex "a\x5C\x5Cb") \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/ord.t b/AbuseFilter/tests/parserTests/ord.t
index a82aafa7..6c94f4b6 100644
--- a/AbuseFilter/tests/parserTests/ord.t
+++ b/AbuseFilter/tests/parserTests/ord.t
@@ -1 +1,8 @@
-(1 > 0) & (0 < 1) & (2 >= 2) & (2 <= 2)
+1 > 0 &
+0 < 1 &
+2 >= 2 &
+2 <= 2 &
+0.1 < 0.2 &
+0.001 <= 0.001 &
+-0.01 < 0.01 &
+0 >= -0.0001
diff --git a/AbuseFilter/tests/parserTests/rcount.r b/AbuseFilter/tests/parserTests/rcount.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/rcount.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/rcount.t b/AbuseFilter/tests/parserTests/rcount.t
new file mode 100644
index 00000000..a514dad5
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/rcount.t
@@ -0,0 +1,3 @@
+rcount("a,b,c,d") = 4 &
+rcount(".", "abcd") = 4
+
diff --git a/AbuseFilter/tests/parserTests/rmwhitespace.r b/AbuseFilter/tests/parserTests/rmwhitespace.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/rmwhitespace.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/rmwhitespace.t b/AbuseFilter/tests/parserTests/rmwhitespace.t
new file mode 100644
index 00000000..d6da2114
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/rmwhitespace.t
@@ -0,0 +1,2 @@
+rmwhitespace( "foobar" ) === "foobar" &
+rmwhitespace( "foo bar bar foo" ) === "foobarbarfoo"
diff --git a/AbuseFilter/tests/parserTests/sanitize.r b/AbuseFilter/tests/parserTests/sanitize.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/sanitize.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/sanitize.t b/AbuseFilter/tests/parserTests/sanitize.t
new file mode 100644
index 00000000..06036c0c
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/sanitize.t
@@ -0,0 +1 @@
+sanitize('&#1740;&#1705;') = 'یک'
diff --git a/AbuseFilter/tests/parserTests/shortcircuit-and.r b/AbuseFilter/tests/parserTests/shortcircuit-and.r
new file mode 100644
index 00000000..33a8a805
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/shortcircuit-and.r
@@ -0,0 +1 @@
+NOT_MATCH \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/shortcircuit-and.t b/AbuseFilter/tests/parserTests/shortcircuit-and.t
new file mode 100644
index 00000000..d87746de
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/shortcircuit-and.t
@@ -0,0 +1,2 @@
+/* The division by zero should not be executed and not crash the filter */
+false & 1/0 \ No newline at end of file
diff --git a/AbuseFilter/tests/parserTests/shortcircuit-or.r b/AbuseFilter/tests/parserTests/shortcircuit-or.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/shortcircuit-or.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/shortcircuit.t b/AbuseFilter/tests/parserTests/shortcircuit-or.t
index bec088f6..bec088f6 100644
--- a/AbuseFilter/tests/parserTests/shortcircuit.t
+++ b/AbuseFilter/tests/parserTests/shortcircuit-or.t
diff --git a/AbuseFilter/tests/parserTests/specialratio.t b/AbuseFilter/tests/parserTests/specialratio.t
index c4a3565a..5a1380a8 100644
--- a/AbuseFilter/tests/parserTests/specialratio.t
+++ b/AbuseFilter/tests/parserTests/specialratio.t
@@ -1 +1,2 @@
-specialratio("foó;") = 0.25
+specialratio("foó;") === 0.25 &
+specialratio("") === 0.0
diff --git a/AbuseFilter/tests/parserTests/string.t b/AbuseFilter/tests/parserTests/string.t
index f6036cef..47685ed9 100644
--- a/AbuseFilter/tests/parserTests/string.t
+++ b/AbuseFilter/tests/parserTests/string.t
@@ -1 +1,6 @@
-"a\tb" = "a b" & "a\qb" = "a\qb"
+"a\tb" === "a b" &
+"a\qb" === "a\qb" &
+"a\"b" === 'a"b' &
+"a\rb" !== "a\r\nb" &
+"\x66\x6f\x6f" === "foo" &
+"some\xstring" === "somexstring"
diff --git a/AbuseFilter/tests/parserTests/strpos.r b/AbuseFilter/tests/parserTests/strpos.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/strpos.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/strpos.t b/AbuseFilter/tests/parserTests/strpos.t
new file mode 100644
index 00000000..65312318
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/strpos.t
@@ -0,0 +1,4 @@
+strpos( "foobarfoo", "foo" ) === 0 &
+strpos( "foobarfoo", "" ) === -1 &
+strpos( "foobarfoo", "foo", 1 ) === 6 &
+strpos( "foobarfoo", "lol" ) === -1
diff --git a/AbuseFilter/tests/parserTests/substr.r b/AbuseFilter/tests/parserTests/substr.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/substr.r
@@ -0,0 +1 @@
+MATCH
diff --git a/AbuseFilter/tests/parserTests/substr.t b/AbuseFilter/tests/parserTests/substr.t
new file mode 100644
index 00000000..b1135066
--- /dev/null
+++ b/AbuseFilter/tests/parserTests/substr.t
@@ -0,0 +1,2 @@
+substr( "foobar", 0, 3 ) === "foo" &
+substr( "barfoo", 4 ) === "oo"
diff --git a/AbuseFilter/tests/phan/config.php b/AbuseFilter/tests/phan/config.php
new file mode 100644
index 00000000..99685d08
--- /dev/null
+++ b/AbuseFilter/tests/phan/config.php
@@ -0,0 +1,19 @@
+<?php
+
+$cfg = require __DIR__ . '/../../vendor/mediawiki/mediawiki-phan-config/src/config.php';
+
+$cfg['directory_list'] = array_merge(
+ $cfg['directory_list'],
+ [
+ './../../extensions/CheckUser',
+ ]
+);
+
+$cfg['exclude_analysis_directory_list'] = array_merge(
+ $cfg['exclude_analysis_directory_list'],
+ [
+ './../../extensions/CheckUser',
+ ]
+);
+
+return $cfg;
diff --git a/AbuseFilter/tests/phpunit/AFPDataTest.php b/AbuseFilter/tests/phpunit/AFPDataTest.php
new file mode 100644
index 00000000..88315da4
--- /dev/null
+++ b/AbuseFilter/tests/phpunit/AFPDataTest.php
@@ -0,0 +1,122 @@
+<?php
+/**
+ * Tests for the AFPData 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
+ *
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * @group Test
+ * @group AbuseFilter
+ *
+ * @covers AFPData
+ * @covers AbuseFilterTokenizer
+ * @covers AFPToken
+ * @covers AFPUserVisibleException
+ * @covers AFPException
+ * @covers AbuseFilterParser
+ */
+class AFPDataTest extends MediaWikiTestCase {
+ /**
+ * @return AbuseFilterParser
+ */
+ public static function getParser() {
+ static $parser = null;
+ if ( !$parser ) {
+ $parser = new AbuseFilterParser();
+ } else {
+ $parser->resetState();
+ }
+ return $parser;
+ }
+
+ /**
+ * Base method for testing exceptions
+ *
+ * @param string $excep Identifier of the exception (e.g. 'unexpectedtoken')
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ */
+ private function exceptionTest( $excep, $expr, $caller ) {
+ $parser = self::getParser();
+ try {
+ $parser->parse( $expr );
+ } catch ( AFPUserVisibleException $e ) {
+ $this->assertEquals(
+ $excep,
+ $e->mExceptionID,
+ "Exception $excep not thrown in AFPData::$caller"
+ );
+ return;
+ }
+
+ $this->fail( "Exception $excep not thrown in AFPData::$caller" );
+ }
+
+ /**
+ * Test the 'regexfailure' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AFPData::keywordRegex
+ * @dataProvider regexFailure
+ */
+ public function testRegexFailureException( $expr, $caller ) {
+ $this->exceptionTest( 'regexfailure', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testRegexFailureException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function regexFailure() {
+ return [
+ [ "'a' rlike '('", 'keywordRegex' ],
+ ];
+ }
+
+ /**
+ * Test the 'dividebyzero' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AFPData::mulRel
+ * @dataProvider divideByZero
+ */
+ public function testDivideByZeroException( $expr, $caller ) {
+ $this->exceptionTest( 'dividebyzero', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testRegexFailureException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function divideByZero() {
+ return [
+ [ '1/0', 'mulRel' ],
+ ];
+ }
+}
diff --git a/AbuseFilter/tests/phpunit/AbuseFilterConsequencesTest.php b/AbuseFilter/tests/phpunit/AbuseFilterConsequencesTest.php
new file mode 100644
index 00000000..4be865b5
--- /dev/null
+++ b/AbuseFilter/tests/phpunit/AbuseFilterConsequencesTest.php
@@ -0,0 +1,902 @@
+<?php
+/**
+ * Complete tests where filters are saved, actions are executed and the right
+ * consequences are expected to be taken
+ *
+ * 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.0-or-later
+ */
+
+/**
+ * @group Test
+ * @group AbuseFilter
+ * @group AbuseFilterConsequences
+ * @group Database
+ *
+ * @covers AbuseFilter
+ * @covers AbuseFilterHooks
+ * @covers AbuseFilterParser
+ * @covers AFPData
+ * @covers AbuseFilterTokenizer
+ * @covers AFPToken
+ * @covers AbuseFilterVariableHolder
+ * @covers AFComputedVariable
+ */
+class AbuseFilterConsequencesTest extends MediaWikiTestCase {
+ protected static $mUser;
+
+ /**
+ * @var array This tables will be deleted in parent::tearDown
+ */
+ protected $tablesUsed = [
+ 'abuse_filter',
+ 'abuse_filter_action',
+ 'abuse_filter_history',
+ 'abuse_filter_log',
+ 'page'
+ ];
+
+ // Properties of the filter rows that we're not interested in changing.
+ // Write them once to save space
+ protected static $defaultRowSection = [
+ 'af_user_text' => 'FilterTester',
+ 'af_user' => 0,
+ 'af_timestamp' => '20180707105743',
+ 'af_group' => 'default',
+ 'af_hit_count' => 0,
+ ];
+
+ // Filters that may be created, their key is the ID.
+ protected static $filters = [
+ 1 => [
+ 'af_id' => 1,
+ 'af_pattern' => 'added_lines irlike "foo"',
+ 'af_enabled' => 1,
+ 'af_comments' => 'Comments',
+ 'af_public_comments' => 'Mock filter for edit',
+ 'af_hidden' => 0,
+ 'af_throttled' => 0,
+ 'af_deleted' => 0,
+ 'af_actions' => 'warn,tag',
+ 'af_global' => 0,
+ 'actions' => [
+ 'warn' => [
+ 'abusefilter-my-warning'
+ ],
+ 'tag' => [
+ 'filtertag'
+ ]
+ ]
+ ],
+ 2 => [
+ 'af_id' => 2,
+ 'af_pattern' => 'action = "move" & moved_to_title contains "test" & moved_to_title === moved_to_text',
+ 'af_enabled' => 1,
+ 'af_comments' => 'No comment',
+ 'af_public_comments' => 'Mock filter for move',
+ 'af_hidden' => 1,
+ 'af_throttled' => 0,
+ 'af_deleted' => 0,
+ 'af_actions' => 'disallow,block',
+ 'af_global' => 0,
+ 'actions' => [
+ 'disallow' => [],
+ 'block' => [
+ 'blocktalk',
+ '8 hours',
+ 'infinity'
+ ]
+ ]
+ ],
+ 3 => [
+ 'af_id' => 3,
+ 'af_pattern' => 'action = "delete" & "test" in lcase(page_prefixedtitle) & page_prefixedtitle === article_prefixedtext',
+ 'af_enabled' => 1,
+ 'af_comments' => '',
+ 'af_public_comments' => 'Mock filter for delete',
+ 'af_hidden' => 0,
+ 'af_throttled' => 0,
+ 'af_deleted' => 0,
+ 'af_actions' => 'degroup',
+ 'af_global' => 0,
+ 'actions' => [
+ 'degroup' => []
+ ]
+ ],
+ 4 => [
+ 'af_id' => 4,
+ 'af_pattern' => 'action contains "createaccount" & accountname rlike "user" & page_title === article_text',
+ 'af_enabled' => 1,
+ 'af_comments' => '1',
+ 'af_public_comments' => 'Mock filter for createaccount',
+ 'af_hidden' => 1,
+ 'af_throttled' => 0,
+ 'af_deleted' => 0,
+ 'af_actions' => '',
+ 'af_global' => 0,
+ 'actions' => []
+ ],
+ 5 => [
+ 'af_id' => 5,
+ 'af_pattern' => 'user_name == "FilteredUser"',
+ 'af_enabled' => 1,
+ 'af_comments' => '',
+ 'af_public_comments' => 'Mock filter',
+ 'af_hidden' => 0,
+ 'af_throttled' => 0,
+ 'af_deleted' => 0,
+ 'af_actions' => 'tag',
+ 'af_global' => 0,
+ 'actions' => [
+ 'tag' => [
+ 'firstTag',
+ 'secondTag'
+ ]
+ ]
+ ],
+ 6 => [
+ 'af_id' => 6,
+ 'af_pattern' => 'edit_delta === 7',
+ 'af_enabled' => 1,
+ 'af_comments' => '',
+ 'af_public_comments' => 'Mock filter with edit_delta',
+ 'af_hidden' => 1,
+ 'af_throttled' => 0,
+ 'af_deleted' => 0,
+ 'af_actions' => 'disallow',
+ 'af_global' => 0,
+ 'actions' => [
+ 'disallow' => []
+ ]
+ ],
+ 7 => [
+ 'af_id' => 7,
+ 'af_pattern' => 'timestamp === int(timestamp)',
+ 'af_enabled' => 1,
+ 'af_comments' => '',
+ 'af_public_comments' => 'Mock filter with timestamp',
+ 'af_hidden' => 0,
+ 'af_throttled' => 0,
+ 'af_deleted' => 0,
+ 'af_actions' => 'degroup',
+ 'af_global' => 0,
+ 'actions' => [
+ 'degroup' => []
+ ]
+ ],
+ 8 => [
+ 'af_id' => 8,
+ 'af_pattern' => 'added_lines_pst irlike "\\[\\[Link\\|Link\\]\\]"',
+ 'af_enabled' => 1,
+ 'af_comments' => '',
+ 'af_public_comments' => 'Mock filter with pst',
+ 'af_hidden' => 0,
+ 'af_hit_count' => 0,
+ 'af_deleted' => 0,
+ 'af_actions' => 'disallow,block',
+ 'af_global' => 0,
+ 'actions' => [
+ 'disallow' => [],
+ 'block' => [
+ 'NoTalkBlockSet',
+ '4 hours',
+ '4 hours'
+ ]
+ ]
+ ],
+ 9 => [
+ 'af_id' => 9,
+ 'af_pattern' => 'new_size > old_size',
+ 'af_enabled' => 1,
+ 'af_comments' => '',
+ 'af_public_comments' => 'Mock filter with size',
+ 'af_hidden' => 1,
+ 'af_throttled' => 0,
+ 'af_deleted' => 0,
+ 'af_actions' => 'disallow,block',
+ 'af_global' => 0,
+ 'actions' => [
+ 'disallow' => [],
+ 'block' => [
+ 'blocktalk',
+ '3 hours',
+ '3 hours'
+ ]
+ ]
+ ],
+ 10 => [
+ 'af_id' => 10,
+ 'af_pattern' => '1 == 1',
+ 'af_enabled' => 1,
+ 'af_comments' => '',
+ 'af_public_comments' => 'Mock throttled filter',
+ 'af_hidden' => 1,
+ 'af_throttled' => 1,
+ 'af_deleted' => 0,
+ 'af_actions' => 'tag,block',
+ 'af_global' => 0,
+ 'actions' => [
+ 'tag' => [
+ 'testTag'
+ ],
+ 'block' => [
+ 'blocktalk',
+ 'infinity',
+ 'infinity'
+ ]
+ ]
+ ],
+ 11 => [
+ 'af_id' => 11,
+ 'af_pattern' => '1 == 1',
+ 'af_enabled' => 1,
+ 'af_comments' => '',
+ 'af_public_comments' => 'Mock filter which throttles',
+ 'af_hidden' => 0,
+ 'af_throttled' => 0,
+ 'af_deleted' => 0,
+ 'af_actions' => 'throttle,disallow',
+ 'af_global' => 0,
+ 'actions' => [
+ 'throttle' => [
+ 11,
+ '1,3600',
+ 'user'
+ ],
+ 'disallow' => []
+ ]
+ ],
+ 12 => [
+ 'af_id' => 12,
+ 'af_pattern' => 'page_title == user_name & user_name === page_title',
+ 'af_enabled' => 1,
+ 'af_comments' => '',
+ 'af_public_comments' => 'Mock filter for userpage',
+ 'af_hidden' => 0,
+ 'af_throttled' => 0,
+ 'af_deleted' => 0,
+ 'af_actions' => 'disallow,block,degroup',
+ 'af_global' => 0,
+ 'actions' => [
+ 'disallow' => [],
+ 'block' => [
+ 'blocktalk',
+ '8 hours',
+ '1 day'
+ ],
+ 'degroup' => []
+ ]
+ ],
+ 13 => [
+ 'af_id' => 13,
+ 'af_pattern' => '2 == 2',
+ 'af_enabled' => 1,
+ 'af_comments' => '',
+ 'af_public_comments' => 'Another throttled mock filter',
+ 'af_hidden' => 0,
+ 'af_throttled' => 1,
+ 'af_deleted' => 0,
+ 'af_actions' => 'block,degroup',
+ 'af_global' => 0,
+ 'actions' => [
+ 'block' => [
+ 'blocktalk',
+ '8 hours',
+ '1 day'
+ ],
+ 'degroup' => []
+ ]
+ ],
+ 14 => [
+ 'af_id' => 14,
+ 'af_pattern' => '5/int(article_text) == 3',
+ 'af_enabled' => 1,
+ 'af_comments' => '',
+ 'af_public_comments' => 'Filter with a possible division by zero',
+ 'af_hidden' => 0,
+ 'af_throttled' => 0,
+ 'af_deleted' => 0,
+ 'af_actions' => 'disallow',
+ 'af_global' => 0,
+ 'actions' => [
+ 'disallow' => []
+ ]
+ ]
+ ];
+
+ /**
+ * @see MediaWikiTestCase::setUp
+ */
+ protected function setUp() {
+ parent::setUp();
+ $user = User::newFromName( 'FilteredUser' );
+ $user->addToDatabase();
+ $user->addGroup( 'sysop' );
+ if ( $user->isBlocked() ) {
+ $block = Block::newFromTarget( $user );
+ $block->delete();
+ }
+ self::$mUser = $user;
+ // Make sure that the config we're using is the one we're expecting
+ $this->setMwGlobals( [
+ 'wgUser' => $user,
+ 'wgAbuseFilterActions' => [
+ 'throttle' => true,
+ 'warn' => true,
+ 'disallow' => true,
+ 'blockautopromote' => true,
+ 'block' => true,
+ 'rangeblock' => true,
+ 'degroup' => true,
+ 'tag' => true
+ ],
+ 'wgAbuseFilterRuntimeProfile' => true,
+ 'wgAbuseFilterProfile' => true
+ ] );
+ }
+
+ /**
+ * Performs an edit. Freely adapted from EditPageTest::assertEdit
+ *
+ * @param Title $title Title of the page to edit
+ * @param string $oldText Old content of the page
+ * @param string $newText The new content of the page
+ * @param string $summary The summary of the edit
+ * @return Status
+ */
+ private static function doEdit( $title, $oldText, $newText, $summary ) {
+ $page = WikiPage::factory( $title );
+ $content = ContentHandler::makeContent( $oldText, $title );
+ $page->doEditContent( $content, 'Creating the page for testing AbuseFilter.' );
+
+ $params = [
+ 'wpTextbox1' => $newText,
+ 'wpSummary' => $summary,
+ 'wpEditToken' => self::$mUser->getEditToken(),
+ 'wpEdittime' => $page->getTimestamp(),
+ 'wpStarttime' => wfTimestampNow(),
+ 'wpUnicodeCheck' => EditPage::UNICODE_CHECK,
+ 'wpSectionTitle' => '',
+ 'wpMinorEdit' => false,
+ 'wpWatchthis' => false
+ ];
+ $req = new FauxRequest( $params, true );
+
+ $article = new Article( $title );
+ $article->getContext()->setTitle( $title );
+ $article->getContext()->setUser( self::$mUser );
+ $ep = new EditPage( $article );
+ $ep->setContextTitle( $title );
+ $ep->importFormData( $req );
+ return $ep->internalAttemptSave( $result );
+ }
+
+ /**
+ * Executes an action to filter
+ *
+ * @param array $params Parameters of the action
+ * @param array $options Further options
+ * @return Status|Status[]
+ */
+ private static function doAction( $params, $options ) {
+ $type = array_shift( $params );
+ $target = array_shift( $params );
+ $target = Title::newFromText( $target );
+ // Make sure that previous blocks don't affect the test
+ self::$mUser->clearInstanceCache();
+
+ switch ( $type ) {
+ case 'edit':
+ if ( in_array( 'makeGoodEditFirst', $options ) ) {
+ $firstStatus = self::doEdit(
+ $target, $params['oldText'], $params['firstNewText'], $params['summary']
+ );
+ $secondStatus = self::doEdit(
+ $target, $params['firstNewText'], $params['secondNewText'], $params['summary']
+ );
+ $status = [ $firstStatus, $secondStatus ];
+ } else {
+ $status = self::doEdit( $target, $params['oldText'], $params['newText'], $params['summary'] );
+ }
+ break;
+ case 'move':
+ $move = new MovePage( $target, Title::newFromText( $params['newTitle'] ) );
+ $status = $move->checkPermissions( self::$mUser, 'AbuseFilter move test' );
+ break;
+ case 'delete':
+ $page = WikiPage::factory( $target );
+ $content = ContentHandler::makeContent( 'Page to be deleted in AbuseFilter test', $target );
+ $page->doEditContent( $content, 'Creating the page for testing deletion AbuseFilter.' );
+ $status = $page->doDeleteArticleReal( 'Testing deletion in AbuseFilter' );
+ break;
+ case 'createaccount':
+ $user = User::newFromName( $params['username'] );
+ $provider = new AbuseFilterPreAuthenticationProvider();
+ $status = $provider->testForAccountCreation( $user, $user, [] );
+ break;
+ }
+
+ // Clear cache since we'll need to retrieve some fresh data about the user
+ // like blocks and groups later when checking expected values
+ self::$mUser->clearInstanceCache();
+
+ return $status;
+ }
+
+ /**
+ * Creates new filters with the given ids, referred to self::$filters
+ *
+ * @param int[] $ids IDs of the filters to create
+ */
+ private static function createFilters( $ids ) {
+ global $wgAbuseFilterActions;
+ $dbw = wfGetDB( DB_MASTER );
+
+ foreach ( $ids as $id ) {
+ $filter = array_merge( self::$filters[$id], self::$defaultRowSection );
+ $actions = $filter['actions'];
+ unset( $filter['actions'] );
+
+ $dbw->replace(
+ 'abuse_filter',
+ [ 'af_id' ],
+ $filter,
+ __METHOD__
+ );
+
+ $actionRows = [];
+ foreach ( array_filter( $wgAbuseFilterActions ) as $action => $_ ) {
+ if ( isset( $actions[$action] ) ) {
+ $parameters = $actions[$action];
+
+ $thisRow = [
+ 'afa_filter' => $id,
+ 'afa_consequence' => $action,
+ 'afa_parameters' => implode( "\n", $parameters )
+ ];
+ $actionsRows[] = $thisRow;
+ }
+ }
+
+ $dbw->replace(
+ 'abuse_filter_action',
+ [ 'afa_filter' ],
+ $actionsRows,
+ __METHOD__
+ );
+ }
+ }
+
+ /**
+ * Creates new filters, execute an action and check the consequences
+ *
+ * @param string $testDescription A short description of the test, used for error reporting
+ * @param int[] $createIds IDs of the filters to create
+ * @param array $actionParams Details of the action we need to execute to trigger filters
+ * @param array $consequences The consequences we're expecting
+ * @param array $options Further options for the test
+ * @covers AbuseFilter
+ * @dataProvider provideFilters
+ */
+ public function testFilterConsequences(
+ $testDescription,
+ $createIds,
+ $actionParams,
+ $consequences,
+ $options
+ ) {
+ global $wgLang;
+ self::createFilters( $createIds );
+
+ if ( in_array( 'makeGoodEditFirst', $options ) ) {
+ $this->setMwGlobals( [
+ // Necessary to test throttle
+ 'wgMainCacheType' => CACHE_ANYTHING
+ ] );
+ }
+ if ( in_array( 'hitCondsLimit', $options ) ) {
+ $this->setMwGlobals( [
+ 'wgAbuseFilterConditionLimit' => 0
+ ] );
+ }
+ if ( in_array( 'hitTimeLimit', $options ) ) {
+ $this->setMwGlobals( [
+ 'wgAbuseFilterSlowFilterRuntimeLimit' => 0
+ ] );
+ }
+ if ( in_array( 'hitThrottleLimit', $options ) ) {
+ $this->setMwGlobals( [
+ 'wgAbuseFilterEmergencyDisableCount' => [
+ 'default' => 0
+ ]
+ ] );
+ }
+
+ $result = self::doAction( $actionParams, $options );
+
+ $expectedErrors = [];
+ $testErrorMessage = false;
+ foreach ( $consequences as $consequence => $ids ) {
+ foreach ( $ids as $id ) {
+ $params = self::$filters[$id]['actions'][$consequence];
+ $success = true;
+ switch ( $consequence ) {
+ case 'warn':
+ // Aborts the hook with the warning message as error.
+ $expectedErrors['warn'][] = $params[0];
+ break;
+ case 'disallow':
+ // Aborts the hook with 'abusefilter-disallowed' error.
+ $expectedErrors['disallow'][] = 'abusefilter-disallowed';
+ break;
+ case 'block':
+ // Aborts the hook with 'abusefilter-blocked-display' error. Should block
+ // the user with expected duration and options.
+ $userBlock = self::$mUser->getBlock( false );
+
+ if ( !$userBlock ) {
+ $testErrorMessage = "User isn't blocked.";
+ break;
+ }
+
+ $shouldPreventTalkEdit = $params[0] === 'blocktalk';
+ $edittalkCheck = $userBlock->prevents( 'editownusertalk' ) === $shouldPreventTalkEdit;
+ if ( !$edittalkCheck ) {
+ $testErrorMessage = 'The expected block option "edittalk" options does not ' .
+ 'match the actual one.';
+ break;
+ }
+
+ $expectedExpiry = SpecialBlock::parseExpiryInput( $params[2] );
+ // Get rid of non-numeric 'infinity' by setting it to 0
+ $actualExpiry = wfIsInfinity( $userBlock->getExpiry() ) ? 0 : $userBlock->getExpiry();
+ $expectedExpiry = wfIsInfinity( $expectedExpiry ) ? 0 : $expectedExpiry;
+ // We need to take into account code execution time. 10 seconds should be enough
+ $durationCheck = abs( strtotime( $actualExpiry ) - strtotime( $expectedExpiry ) ) < 10;
+ if ( !$durationCheck ) {
+ $testErrorMessage = "The expected block expiry ($expectedExpiry) does not " .
+ "match the actual one ($actualExpiry).";
+ break;
+ }
+
+ $expectedErrors['block'][] = 'abusefilter-blocked-display';
+ break;
+ case 'degroup':
+ // Aborts the hook with 'abusefilter-degrouped' error and degroups the user.
+ $expectedErrors['degroup'][] = 'abusefilter-degrouped';
+ $groupCheck = !in_array( 'sysop', self::$mUser->getEffectiveGroups() );
+ if ( !$groupCheck ) {
+ $testErrorMessage = 'The user was not degrouped.';
+ }
+ break;
+ case 'tag':
+ // Only add tags, to be retrieved in tag_summary table.
+ if ( $actionParams[1] === null ) {
+ // It's an account creation, so no tags.
+ break;
+ }
+ $title = Title::newFromText( $actionParams[1] );
+ $page = WikiPage::factory( $title );
+ $revId = $page->getLatest();
+ $dbr = wfGetDB( DB_REPLICA );
+ $appliedTags = $dbr->selectField(
+ 'tag_summary',
+ 'ts_tags',
+ [ 'ts_rev_id' => $revId ],
+ __METHOD__
+ );
+ $appliedTags = explode( ',', $appliedTags );
+
+ $tagCheck = count( array_diff( $params, $appliedTags ) ) === 0;
+ if ( !$tagCheck ) {
+ $expectedTags = $wgLang->commaList( $params );
+ $actualTags = $wgLang->commaList( $appliedTags );
+
+ $testErrorMessage = "Expected the edit to have the following tags: $expectedTags. " .
+ "Got the following instead: $actualTags.";
+ }
+ break;
+ case 'throttle':
+ // The action was executed twice and $result is an array of two Status objects.
+ if ( !$result[0]->isGood() ) {
+ // The first one should be fine
+ $testErrorMessage = "The first edit should have been saved, being only throttled.";
+ break;
+ }
+
+ $result = $result[1];
+ break;
+ }
+
+ if ( $testErrorMessage ) {
+ $this->fail( "$testErrorMessage Test description: $testDescription" );
+ }
+ }
+ }
+
+ if ( in_array( 'hitThrottleLimit', $options ) ) {
+ $dbr = wfGetDB( DB_REPLICA );
+ $throttled = true;
+ foreach ( $createIds as $filter ) {
+ $curThrottle = $dbr->selectField(
+ 'abuse_filter',
+ 'af_throttled',
+ [ 'af_id' => $filter ],
+ __METHOD__
+ );
+ $throttled &= $curThrottle;
+ }
+
+ if ( !$throttled ) {
+ $expectedThrottled = $wgLang->commaList( $createIds );
+ $this->fail( 'Expected the following filters to be automatically ' .
+ "throttled: $expectedThrottled." );
+ }
+ }
+
+ // Errors have a priority order
+ $expected = $expectedErrors['warn'] ?? $expectedErrors['degroup'] ??
+ $expectedErrors['block'] ?? $expectedErrors['disallow'] ?? null;
+ if ( isset( $expectedErrors['degroup'] ) && $expected === $expectedErrors['degroup'] &&
+ isset( $expectedErrors['block'] ) ) {
+ // Degroup and block warning can be fired together
+ $expected = array_merge( $expectedErrors['degroup'], $expectedErrors['block'] );
+ } elseif ( !is_array( $expected ) ) {
+ $expected = (array)$expected;
+ }
+
+ $errors = $result->getErrors();
+
+ $actual = [];
+ foreach ( $errors as $error ) {
+ $msg = $error['message'];
+ if ( strpos( $msg, 'abusefilter' ) !== false ) {
+ $actual[] = $msg;
+ }
+ }
+
+ $expectedDisplay = $wgLang->commaList( $expected );
+ $actualDisplay = $wgLang->commaList( $actual );
+
+ $this->assertEquals(
+ $expected,
+ $actual,
+ "The edit should have returned the following error messages: $expectedDisplay. " .
+ "Got $actualDisplay instead. Test description: $testDescription"
+ );
+ }
+
+ /**
+ * Data provider for creating and editing filters. For every test case, we pass
+ * - an array with the IDs of the filters to be created (listed in self::$filters),
+ * - an array with details of the action to execute in order to trigger the filters,
+ * - an array of expected consequences of the form
+ * [ 'consequence name' => [ IDs of the filter to take its parameters from ] ]
+ * Such IDs may be more than one if we have a warning that is shown twice.
+ * - an array with further options for testing
+ *
+ * @return array
+ */
+ public function provideFilters() {
+ return [
+ [
+ 'Basic test for "edit" action.',
+ [ 1, 2 ],
+ [
+ 'edit',
+ 'Test page',
+ 'oldText' => 'Some old text for the test.',
+ 'newText' => 'I like foo',
+ 'summary' => 'Test AbuseFilter for edit action.'
+ ],
+ [ 'warn' => [ 1 ] ],
+ []
+ ],
+ [
+ 'Basic test for "move" action.',
+ [ 2 ],
+ [
+ 'move',
+ 'Test page',
+ 'newTitle' => 'Another test page'
+ ],
+ [ 'disallow' => [ 2 ], 'block' => [ 2 ] ],
+ []
+ ],
+ [
+ 'Basic test for "delete" action.',
+ [ 2, 3 ],
+ [
+ 'delete',
+ 'Test page'
+ ],
+ [ 'degroup' => [ 3 ] ],
+ []
+ ],
+ [
+ 'Basic test for "createaccount" action.',
+ [ 1, 2, 3, 4 ],
+ [
+ 'createaccount',
+ null,
+ 'username' => 'AnotherUser'
+ ],
+ [],
+ []
+ ],
+ [
+ 'Test to check that all tags are applied.',
+ [ 5 ],
+ [
+ 'edit',
+ 'User:FilteredUser',
+ 'oldText' => 'Hey.',
+ 'newText' => 'I am a very nice user, really!',
+ 'summary' => ''
+ ],
+ [ 'tag' => [ 5 ] ],
+ []
+ ],
+ [
+ 'Test to check that the edit is disallowed.',
+ [ 6 ],
+ [
+ 'edit',
+ 'Help:Help',
+ 'oldText' => 'Some help.',
+ 'newText' => 'Some help for you',
+ 'summary' => 'Help! I need somebody'
+ ],
+ [ 'disallow' => [ 6 ] ],
+ []
+ ],
+ [
+ 'Test to check that degroup and block are executed together.',
+ [ 2, 3, 7, 8 ],
+ [
+ 'edit',
+ 'Link',
+ 'oldText' => 'What is a link?',
+ 'newText' => 'A link is something like this: [[Link|]].',
+ 'summary' => 'Explaining'
+ ],
+ [ 'degroup' => [ 7 ], 'block' => [ 8 ] ],
+ []
+ ],
+ [
+ 'Test to check that the block duration is the longest one.',
+ [ 8, 9 ],
+ [
+ 'edit',
+ 'Whatever',
+ 'oldText' => 'Whatever is whatever',
+ 'newText' => 'Whatever is whatever, whatever it is. BTW, here is a [[Link|]]',
+ 'summary' => 'Whatever'
+ ],
+ [ 'disallow' => [ 8 ], 'block' => [ 8 ] ],
+ []
+ ],
+ [
+ 'Test to check that throttled filters only execute "safe" actions.',
+ [ 10 ],
+ [
+ 'edit',
+ 'Buffalo',
+ 'oldText' => 'Buffalo',
+ 'newText' => 'Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo.',
+ 'summary' => 'Buffalo!'
+ ],
+ [ 'tag' => [ 10 ] ],
+ []
+ ],
+ [
+ 'Test to see that throttling works well.',
+ [ 11 ],
+ [
+ 'edit',
+ 'Throttle',
+ 'oldText' => 'What is throttle?',
+ 'firstNewText' => 'Throttle is something that should happen...',
+ 'secondNewText' => '... Right now!',
+ 'summary' => 'Throttle'
+ ],
+ [ 'throttle' => [ 11 ], 'disallow' => [ 11 ] ],
+ [ 'makeGoodEditFirst' ]
+ ],
+ [
+ 'Test to check that degroup and block are both executed and degroup warning is shown twice.',
+ [ 1, 3, 7, 12 ],
+ [
+ 'edit',
+ 'User:FilteredUser',
+ 'oldText' => '',
+ 'newText' => 'A couple of lines about me...',
+ 'summary' => 'My user page'
+ ],
+ [ 'block' => [ 12 ], 'degroup' => [ 7, 12 ] ],
+ []
+ ],
+ [
+ 'Test to check that every throttled filter only executes "safe" actions.',
+ [ 10, 13 ],
+ [
+ 'edit',
+ 'Tyger! Tyger! Burning bright',
+ 'oldText' => 'In the forests of the night',
+ 'newText' => 'What immortal hand or eye',
+ 'summary' => 'Could frame thy fearful symmetry?'
+ ],
+ [ 'tag' => [ 10 ] ],
+ []
+ ],
+ [
+ 'Test to check that runtime exceptions (division by zero) are correctly handled.',
+ [ 14 ],
+ [
+ 'edit',
+ '0',
+ 'oldText' => 'Old text',
+ 'newText' => 'New text',
+ 'summary' => 'Some summary'
+ ],
+ [],
+ []
+ ],
+ [
+ 'Test to check that the conditions limit works.',
+ [ 8, 10 ],
+ [
+ 'edit',
+ 'Anything',
+ 'oldText' => 'Bar',
+ 'newText' => 'Foo',
+ 'summary' => ''
+ ],
+ [],
+ [ 'hitCondsLimit' ]
+ ],
+ [
+ 'Test slow executions.',
+ [ 7, 12 ],
+ [
+ 'edit',
+ 'Something',
+ 'oldText' => 'Please allow me',
+ 'newText' => 'to introduce myself',
+ 'summary' => ''
+ ],
+ [ 'degroup' => [ 7 ] ],
+ [ 'hitTimeLimit' ]
+ ],
+ [
+ 'Test throttling a dangerous filter.',
+ [ 13 ],
+ [
+ 'edit',
+ 'My page',
+ 'oldText' => '',
+ 'newText' => 'AbuseFilter will not block me',
+ 'summary' => ''
+ ],
+ [],
+ [ 'hitThrottleLimit' ]
+ ],
+ ];
+ }
+}
diff --git a/AbuseFilter/tests/phpunit/AbuseFilterParserTest.php b/AbuseFilter/tests/phpunit/AbuseFilterParserTest.php
new file mode 100644
index 00000000..747e500a
--- /dev/null
+++ b/AbuseFilter/tests/phpunit/AbuseFilterParserTest.php
@@ -0,0 +1,744 @@
+<?php
+/**
+ * Tests for the AbuseFilter parser
+ *
+ * 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.0-or-later
+ * @author Marius Hoch < hoo@online.de >
+ */
+
+/**
+ * @group Test
+ * @group AbuseFilter
+ * @group AbuseFilterParser
+ *
+ * @covers AbuseFilterCachingParser
+ * @covers AFPTreeParser
+ * @covers AFPTreeNode
+ * @covers AFPParserState
+ * @covers AbuseFilterParser
+ * @covers AbuseFilterTokenizer
+ * @covers AFPToken
+ * @covers AFPUserVisibleException
+ * @covers AFPException
+ * @covers AFPData
+ * @covers AbuseFilterVariableHolder
+ * @covers AFComputedVariable
+ */
+class AbuseFilterParserTest extends MediaWikiTestCase {
+ /**
+ * @return AbuseFilterParser
+ */
+ public static function getParser() {
+ static $parser = null;
+ if ( !$parser ) {
+ $parser = new AbuseFilterParser();
+ } else {
+ $parser->resetState();
+ }
+ return $parser;
+ }
+
+ /**
+ * @return AbuseFilterParser[]
+ */
+ public static function getParsers() {
+ static $parsers = null;
+ if ( !$parsers ) {
+ $parsers = [
+ new AbuseFilterParser()
+ // @ToDo: Here we should also instantiate an AbuseFilterCachingParser as we'll have
+ // fixed its problems (T156095). Right now it may break otherwise working tests (see T201193)
+ ];
+ }
+ return $parsers;
+ }
+
+ /**
+ * @dataProvider readTests
+ */
+ public function testParser( $testName, $rule, $expected ) {
+ foreach ( self::getParsers() as $parser ) {
+ $actual = $parser->parse( $rule );
+ $this->assertEquals( $expected, $actual, 'Running parser test ' . $testName );
+ }
+ }
+
+ /**
+ * @return array
+ */
+ public function readTests() {
+ $tests = [];
+ $testPath = __DIR__ . "/../parserTests";
+ $testFiles = glob( $testPath . "/*.t" );
+
+ foreach ( $testFiles as $testFile ) {
+ $testName = substr( $testFile, 0, -2 );
+
+ $resultFile = $testName . '.r';
+ $rule = trim( file_get_contents( $testFile ) );
+ $result = trim( file_get_contents( $resultFile ) ) === 'MATCH';
+
+ $tests[] = [
+ basename( $testName ),
+ $rule,
+ $result
+ ];
+ }
+
+ return $tests;
+ }
+
+ /**
+ * Test expression evaluation
+ *
+ * @dataProvider provideExpressions
+ */
+ public function testEvaluateExpression( $expr, $expected ) {
+ foreach ( self::getParsers() as $parser ) {
+ $actual = $parser->evaluateExpression( $expr );
+ $this->assertEquals( $expected, $actual );
+ }
+ }
+
+ /**
+ * Data provider for testEvaluateExpression
+ *
+ * @return array
+ */
+ public function provideExpressions() {
+ return [
+ [ '1 === 1', true ],
+ [ 'rescape( "abc* (def)" )', 'abc\* \(def\)' ],
+ [ 'str_replace( "foobarbaz", "bar", "-" )', 'foo-baz' ],
+ [ 'rmdoubles( "foobybboo" )', 'fobybo' ],
+ [ 'lcase("FÁmí")', 'fámí' ],
+ [ 'substr( "foobar", 0, 3 )', 'foo' ]
+ ];
+ }
+
+ /**
+ * Ensure that AbuseFilterTokenizer::OPERATOR_RE matches the contents
+ * and order of AbuseFilterTokenizer::$operators.
+ */
+ public function testOperatorRe() {
+ $operatorRe = '/(' . implode( '|', array_map( function ( $op ) {
+ return preg_quote( $op, '/' );
+ }, AbuseFilterTokenizer::$operators ) ) . ')/A';
+ $this->assertEquals( $operatorRe, AbuseFilterTokenizer::OPERATOR_RE );
+ }
+
+ /**
+ * Ensure that AbuseFilterTokenizer::RADIX_RE matches the contents
+ * and order of AbuseFilterTokenizer::$bases.
+ */
+ public function testRadixRe() {
+ $baseClass = implode( '', array_keys( AbuseFilterTokenizer::$bases ) );
+ $radixRe = "/([0-9A-Fa-f]+(?:\.\d*)?|\.\d+)([$baseClass])?/Au";
+ $this->assertEquals( $radixRe, AbuseFilterTokenizer::RADIX_RE );
+ }
+
+ /**
+ * Ensure the number of conditions counted for given expressions is right.
+ *
+ * @dataProvider condCountCases
+ */
+ public function testCondCount( $rule, $expected ) {
+ $parser = self::getParser();
+ $countBefore = AbuseFilter::$condCount;
+ $parser->parse( $rule );
+ $countAfter = AbuseFilter::$condCount;
+ $actual = $countAfter - $countBefore;
+ $this->assertEquals( $expected, $actual, 'Condition count for ' . $rule );
+ }
+
+ /**
+ * Data provider for testCondCount method.
+ * @return array
+ */
+ public function condCountCases() {
+ return [
+ [ '((("a" == "b")))', 1 ],
+ [ 'contains_any("a", "b", "c")', 1 ],
+ [ '"a" == "b" == "c"', 2 ],
+ [ '"a" in "b" + "c" in "d" + "e" in "f"', 3 ],
+ [ 'true', 0 ],
+ [ '"a" == "a" | "c" == "d"', 1 ],
+ [ '"a" == "b" & "c" == "d"', 1 ],
+ ];
+ }
+
+ /**
+ * Ensure get_matches function captures returns expected output.
+ * @param string $needle Regex to pass to get_matches.
+ * @param string $haystack String to run regex against.
+ * @param string[] $expected The expected values of the matched groups.
+ * @covers AbuseFilterParser::funcGetMatches
+ * @dataProvider getMatchesCases
+ */
+ public function testGetMatches( $needle, $haystack, $expected ) {
+ $parser = self::getParser();
+ $afpData = $parser->intEval( "get_matches('$needle', '$haystack')" )->data;
+
+ // Extract matches from AFPData.
+ $matches = array_map( function ( $afpDatum ) {
+ return $afpDatum->data;
+ }, $afpData );
+
+ $this->assertEquals( $expected, $matches );
+ }
+
+ /**
+ * Data provider for get_matches method.
+ * @return array
+ */
+ public function getMatchesCases() {
+ return [
+ [
+ 'You say (.*) \(and I say (.*)\)\.',
+ 'You say hello (and I say goodbye).',
+ [
+ 'You say hello (and I say goodbye).',
+ 'hello',
+ 'goodbye',
+ ],
+ ],
+ [
+ 'I(?: am)? the ((walrus|egg man).*)\!',
+ 'I am the egg man, I am the walrus !',
+ [
+ 'I am the egg man, I am the walrus !',
+ 'egg man, I am the walrus ',
+ 'egg man',
+ ],
+ ],
+ [
+ 'this (does) not match',
+ 'foo bar',
+ [
+ false,
+ false,
+ ],
+ ],
+ ];
+ }
+
+ /**
+ * Base method for testing exceptions
+ *
+ * @param string $excep Identifier of the exception (e.g. 'unexpectedtoken')
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ */
+ private function exceptionTest( $excep, $expr, $caller ) {
+ $parser = self::getParser();
+ try {
+ $parser->parse( $expr );
+ } catch ( AFPUserVisibleException $e ) {
+ $this->assertEquals(
+ $excep,
+ $e->mExceptionID,
+ "Exception $excep not thrown in AbuseFilterParser::$caller"
+ );
+ return;
+ }
+
+ $this->fail( "Exception $excep not thrown in AbuseFilterParser::$caller" );
+ }
+
+ /**
+ * Test the 'expectednotfound' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AbuseFilterParser::doLevelSet
+ * @covers AbuseFilterParser::doLevelConditions
+ * @covers AbuseFilterParser::doLevelBraces
+ * @covers AbuseFilterParser::doLevelFunction
+ * @covers AbuseFilterParser::doLevelAtom
+ * @covers AbuseFilterParser::skipOverBraces
+ * @covers AbuseFilterParser::doLevelArrayElements
+ * @dataProvider expectedNotFound
+ */
+ public function testExpectedNotFoundException( $expr, $caller ) {
+ $this->exceptionTest( 'expectednotfound', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testExpectedNotFoundException.
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function expectedNotFound() {
+ return [
+ [ 'a:= [1,2,3]; a[1 = 4', 'doLevelSet' ],
+ [ "if 1 = 1 'foo'", 'doLevelConditions' ],
+ [ "if 1 = 1 then 'foo'", 'doLevelConditions' ],
+ [ "if 1 = 1 then 'foo' else 'bar'", 'doLevelConditions' ],
+ [ "a := 1 = 1 ? 'foo'", 'doLevelConditions' ],
+ [ '(1 = 1', 'doLevelBraces' ],
+ [ 'lcase = 3', 'doLevelFunction' ],
+ [ 'lcase( 3 = 1', 'doLevelFunction' ],
+ [ 'a := [1,2', 'doLevelAtom' ],
+ [ '1 = 1 | (', 'skipOverBraces' ],
+ [ 'a := [1,2,3]; 3 = a[5', 'doLevelArrayElements' ],
+ ];
+ }
+
+ /**
+ * Test the 'unexpectedatend' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AbuseFilterParser::doLevelEntry
+ * @dataProvider unexpectedAtEnd
+ */
+ public function testUnexpectedAtEndException( $expr, $caller ) {
+ $this->exceptionTest( 'unexpectedatend', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testUnexpectedAtEndException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function unexpectedAtEnd() {
+ return [
+ [ "'a' = 1 )", 'doLevelEntry' ],
+ ];
+ }
+
+ /**
+ * Test the 'unrecognisedvar' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AbuseFilterParser::doLevelSet
+ * @covers AbuseFilterParser::getVarValue
+ * @dataProvider unrecognisedVar
+ */
+ public function testUnrecognisedVarException( $expr, $caller ) {
+ $this->exceptionTest( 'unrecognisedvar', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testUnrecognisedVarException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function unrecognisedVar() {
+ return [
+ [ 'a[1] := 5', 'doLevelSet' ],
+ [ 'a = 5', 'getVarValue' ],
+ ];
+ }
+
+ /**
+ * Test the 'notarray' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AbuseFilterParser::doLevelSet
+ * @covers AbuseFilterParser::doLevelArrayElements
+ * @dataProvider notArray
+ */
+ public function testNotArrayException( $expr, $caller ) {
+ $this->exceptionTest( 'notarray', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testNotArrayException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function notArray() {
+ return [
+ [ 'a := 5; a[1] = 5', 'doLevelSet' ],
+ [ 'a := 1; 3 = a[5]', 'doLevelArrayElements' ],
+ ];
+ }
+
+ /**
+ * Test the 'outofbounds' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AbuseFilterParser::doLevelSet
+ * @covers AbuseFilterParser::doLevelArrayElements
+ * @dataProvider outOfBounds
+ */
+ public function testOutOfBoundsException( $expr, $caller ) {
+ $this->exceptionTest( 'outofbounds', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testOutOfBoundsException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function outOfBounds() {
+ return [
+ [ 'a := [2]; a[5] = 9', 'doLevelSet' ],
+ [ 'a := [1,2,3]; 3 = a[5]', 'doLevelArrayElements' ],
+ ];
+ }
+
+ /**
+ * Test the 'unrecognisedkeyword' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AbuseFilterParser::doLevelAtom
+ * @dataProvider unrecognisedKeyword
+ */
+ public function testUnrecognisedKeywordException( $expr, $caller ) {
+ $this->exceptionTest( 'unrecognisedkeyword', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testUnrecognisedKeywordException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function unrecognisedKeyword() {
+ return [
+ [ '5 = rlike', 'doLevelAtom' ],
+ ];
+ }
+
+ /**
+ * Test the 'unexpectedtoken' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AbuseFilterParser::doLevelAtom
+ * @dataProvider unexpectedToken
+ */
+ public function testUnexpectedTokenException( $expr, $caller ) {
+ $this->exceptionTest( 'unexpectedtoken', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testUnexpectedTokenException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function unexpectedToken() {
+ return [
+ [ '1 =? 1', 'doLevelAtom' ],
+ ];
+ }
+
+ /**
+ * Test the 'disabledvar' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AbuseFilterParser::getVarValue
+ * @dataProvider disabledVar
+ */
+ public function testDisabledVarException( $expr, $caller ) {
+ $this->exceptionTest( 'disabledvar', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testDisabledVarException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function disabledVar() {
+ return [
+ [ 'old_text = 1', 'getVarValue' ],
+ ];
+ }
+
+ /**
+ * Test the 'overridebuiltin' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AbuseFilterParser::setUserVariable
+ * @dataProvider overrideBuiltin
+ */
+ public function testOverrideBuiltinException( $expr, $caller ) {
+ $this->exceptionTest( 'overridebuiltin', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testOverrideBuiltinException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function overrideBuiltin() {
+ return [
+ [ 'added_lines := 1', 'setUserVariable' ],
+ ];
+ }
+
+ /**
+ * Test the 'regexfailure' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AbuseFilterParser::funcRCount
+ * @covers AbuseFilterParser::funcGetMatches
+ * @dataProvider regexFailure
+ */
+ public function testRegexFailureException( $expr, $caller ) {
+ $this->exceptionTest( 'regexfailure', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testRegexFailureException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function regexFailure() {
+ return [
+ [ "rcount('(','a')", 'funcRCount' ],
+ [ "get_matches('this (should fail', 'any haystack')", 'funcGetMatches' ],
+ ];
+ }
+
+ /**
+ * Test the 'invalidiprange' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AbuseFilterParser::funcIPInRange
+ * @dataProvider invalidIPRange
+ */
+ public function testInvalidIPRangeException( $expr, $caller ) {
+ $this->exceptionTest( 'invalidiprange', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testInvalidIPRangeException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function invalidIPRange() {
+ return [
+ [ "ip_in_range('0.0.0.0', 'lol')", 'funcIPInRange' ],
+ ];
+ }
+
+ /**
+ * Test functions which take exactly one parameters calling them
+ * without 0 params. They should throw a 'noparams' exception.
+ *
+ * @param string $func The function to test
+ * @covers AbuseFilterParser::funcLc
+ * @covers AbuseFilterParser::funcUc
+ * @covers AbuseFilterParser::funcLen
+ * @covers AbuseFilterParser::funcSpecialRatio
+ * @covers AbuseFilterParser::funcCount
+ * @covers AbuseFilterParser::funcRCount
+ * @covers AbuseFilterParser::funcCCNorm
+ * @covers AbuseFilterParser::funcSanitize
+ * @covers AbuseFilterParser::funcRMSpecials
+ * @covers AbuseFilterParser::funcRMWhitespace
+ * @covers AbuseFilterParser::funcRMDoubles
+ * @covers AbuseFilterParser::funcNorm
+ * @covers AbuseFilterParser::funcStrRegexEscape
+ * @covers AbuseFilterParser::castString
+ * @covers AbuseFilterParser::castInt
+ * @covers AbuseFilterParser::castFloat
+ * @covers AbuseFilterParser::castBool
+ * @dataProvider oneParamFuncs
+ * @expectedException AFPUserVisibleException
+ * @expectedExceptionMessageRegExp /^No parameters given to function/
+ */
+ public function testNoParamsException( $func ) {
+ $parser = self::getParser();
+ $parser->parse( "$func()" );
+ }
+
+ /**
+ * Data provider for testNoParamsException, returns a list of
+ * functions taking a single parameter
+ *
+ * @return array
+ */
+ public function oneParamFuncs() {
+ return [
+ [ 'lcase' ],
+ [ 'ucase' ],
+ [ 'length' ],
+ [ 'strlen' ],
+ [ 'specialratio' ],
+ [ 'count' ],
+ [ 'rcount' ],
+ [ 'ccnorm' ],
+ [ 'sanitize' ],
+ [ 'rmspecials' ],
+ [ 'rmwhitespace' ],
+ [ 'rmdoubles' ],
+ [ 'norm' ],
+ [ 'rescape' ],
+ [ 'string' ],
+ [ 'int' ],
+ [ 'float' ],
+ [ 'bool' ],
+ ];
+ }
+
+ /**
+ * Test functions taking two parameters by providing only one.
+ * They should throw a 'notenoughargs' exception.
+ *
+ * @param string $func The function to test
+ * @covers AbuseFilterParser::funcGetMatches
+ * @covers AbuseFilterParser::funcIPInRange
+ * @covers AbuseFilterParser::funcContainsAny
+ * @covers AbuseFilterParser::funcContainsAll
+ * @covers AbuseFilterParser::funcCCNormContainsAny
+ * @covers AbuseFilterParser::funcCCNormContainsAll
+ * @covers AbuseFilterParser::funcEqualsToAny
+ * @covers AbuseFilterParser::funcSubstr
+ * @covers AbuseFilterParser::funcStrPos
+ * @covers AbuseFilterParser::funcSetVar
+ * @dataProvider twoParamsFuncs
+ * @expectedException AFPUserVisibleException
+ * @expectedExceptionMessageRegExp /^Not enough arguments to function [^ ]+ called at character \d+.\nExpected 2 arguments, got 1/
+ */
+ public function testNotEnoughArgsExceptionTwo( $func ) {
+ $parser = self::getParser();
+ // Nevermind if the argument can't be string since we check the amount
+ // of parameters before anything else.
+ $parser->parse( "$func('foo')" );
+ }
+
+ /**
+ * Data provider for testNotEnoughArgsExceptionTwo, returns the list of
+ * functions taking two parameters.
+ *
+ * @return array
+ */
+ public function twoParamsFuncs() {
+ return [
+ [ 'get_matches' ],
+ [ 'ip_in_range' ],
+ [ 'contains_any' ],
+ [ 'contains_all' ],
+ [ 'ccnorm_contains_any' ],
+ [ 'ccnorm_contains_all' ],
+ [ 'equals_to_any' ],
+ [ 'substr' ],
+ [ 'strpos' ],
+ [ 'set_var' ],
+ ];
+ }
+
+ /**
+ * Test functions taking three parameters by providing only two.
+ * They should throw a 'notenoughargs' exception.
+ *
+ * @param string $func The function to test
+ * @covers AbuseFilterParser::funcStrReplace
+ * @dataProvider threeParamsFuncs
+ * @expectedException AFPUserVisibleException
+ * @expectedExceptionMessageRegExp /^Not enough arguments to function [^ ]+ called at character \d+.\nExpected 3 arguments, got 2/
+ */
+ public function testNotEnoughArgsExceptionThree( $func ) {
+ $parser = self::getParser();
+ // Nevermind if the argument can't be string since we check the amount
+ // of parameters before anything else.
+ $parser->parse( "$func('foo', 'bar')" );
+ }
+
+ /**
+ * Data provider for testNotEnoughArgsExceptionThree, returns the list of
+ * functions taking three parameters.
+ *
+ * @return array
+ */
+ public function threeParamsFuncs() {
+ return [
+ [ 'str_replace' ],
+ ];
+ }
+
+ /**
+ * Check that deprecated variables are correctly translated to the new ones with a debug notice
+ *
+ * @param string $old The old name of the variable
+ * @param string $new The new name of the variable
+ * @dataProvider provideDeprecatedVars
+ */
+ public function testDeprecatedVars( $old, $new ) {
+ $loggerMock = new TestLogger();
+ $loggerMock->setCollect( true );
+ $this->setLogger( 'AbuseFilterDeprecatedVars', $loggerMock );
+
+ $parser = self::getParser();
+ $actual = $parser->parse( "$old === $new" );
+
+ $loggerBuffer = $loggerMock->getBuffer();
+ // Check that the use has been logged
+ $found = false;
+ foreach ( $loggerBuffer as $entry ) {
+ $check = preg_match( '/AbuseFilter: deprecated variable/', $entry[1] );
+ if ( $check ) {
+ $found = true;
+ break;
+ }
+ }
+ if ( !$found ) {
+ $this->fail( "The use of the deprecated variable $old was not logged." );
+ }
+
+ $this->assertTrue( $actual, "AbuseFilter deprecated variable $old is not parsed correctly" );
+ }
+
+ /**
+ * Data provider for testDeprecatedVars
+ * @return array
+ */
+ public function provideDeprecatedVars() {
+ $deprecated = AbuseFilter::$deprecatedVars;
+ $data = [];
+ foreach ( $deprecated as $old => $new ) {
+ $data[] = [ $old, $new ];
+ }
+ return $data;
+ }
+}
diff --git a/AbuseFilter/tests/phpunit/AbuseFilterSaveTest.php b/AbuseFilter/tests/phpunit/AbuseFilterSaveTest.php
new file mode 100644
index 00000000..6a5b3121
--- /dev/null
+++ b/AbuseFilter/tests/phpunit/AbuseFilterSaveTest.php
@@ -0,0 +1,596 @@
+<?php
+/**
+ * Tests for validating and saving a filter
+ *
+ * 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.0-or-later
+ */
+
+/**
+ * @group Test
+ * @group AbuseFilter
+ * @group AbuseFilterSave
+ * @group Database
+ *
+ * @covers AbuseFilter
+ * @covers AbuseFilterViewEdit
+ * @covers AbuseFilterParser
+ */
+class AbuseFilterSaveTest extends MediaWikiTestCase {
+ protected static $mUser, $mParameters;
+
+ /**
+ * @var array This tables will be deleted in parent::tearDown
+ */
+ protected $tablesUsed = [
+ 'abuse_filter',
+ 'abuse_filter_action',
+ 'abuse_filter_history',
+ 'abuse_filter_log'
+ ];
+
+ /**
+ * @see MediaWikiTestCase::setUp
+ */
+ protected function setUp() {
+ parent::setUp();
+ $user = User::newFromName( 'FilterTester' );
+ $user->addToDatabase();
+ $user->addGroup( 'filterEditor' );
+ RequestContext::getMain()->setUser( $user );
+ self::$mUser = $user;
+ // Make sure that the config we're using is the one we're expecting
+ $this->setMwGlobals( [
+ 'wgUser' => $user,
+ 'wgAbuseFilterRestrictions' => [
+ 'degroup' => true
+ ],
+ 'wgAbuseFilterIsCentral' => true,
+ 'wgAbuseFilterActions' => [
+ 'throttle' => true,
+ 'warn' => true,
+ 'disallow' => true,
+ 'blockautopromote' => true,
+ 'block' => true,
+ 'rangeblock' => true,
+ 'degroup' => true,
+ 'tag' => true
+ ],
+ 'wgAbuseFilterValidGroups' => [
+ 'default',
+ 'flow'
+ ]
+ ] );
+ $this->setGroupPermissions( [
+ 'filterEditor' => [
+ 'abusefilter-modify' => true,
+ 'abusefilter-modify-restricted' => false,
+ 'abusefilter-modify-global' => false,
+ ],
+ 'filterEditorGlobal' => [
+ 'abusefilter-modify' => true,
+ 'abusefilter-modify-global' => true,
+ ]
+ ] );
+ }
+
+ /**
+ * Gets an instance of AbuseFilterViewEdit ready for creating or editing filter
+ *
+ * @param string $filter 'new' for a new filter, its ID otherwise
+ * @return AbuseFilterViewEdit
+ */
+ private static function getViewEdit( $filter ) {
+ $special = new SpecialAbuseFilter();
+ $context = RequestContext::getMain( self::getRequest() );
+ $context->setRequest( self::getRequest() );
+
+ $special->setContext( $context );
+ $special->mFilter = $filter;
+ $viewEdit = new AbuseFilterViewEdit( $special, [ $filter ] );
+ // Being a static property, it's not deleted between tests
+ $viewEdit::$mLoadedRow = null;
+
+ return $viewEdit;
+ }
+
+ /**
+ * Creates a FauxRequest object
+ *
+ * @return FauxRequest
+ */
+ private static function getRequest() {
+ $params = [
+ 'wpFilterRules' => self::$mParameters['rules'],
+ 'wpFilterDescription' => self::$mParameters['description'],
+ 'wpFilterNotes' => self::$mParameters['notes'],
+ 'wpFilterGroup' => self::$mParameters['group'],
+ 'wpFilterEnabled' => self::$mParameters['enabled'],
+ 'wpFilterHidden' => self::$mParameters['hidden'],
+ 'wpFilterDeleted' => self::$mParameters['deleted'],
+ 'wpFilterGlobal' => self::$mParameters['global'],
+ 'wpFilterActionThrottle' => self::$mParameters['throttleEnabled'],
+ 'wpFilterThrottleCount' => self::$mParameters['throttleCount'],
+ 'wpFilterThrottlePeriod' => self::$mParameters['throttlePeriod'],
+ 'wpFilterThrottleGroups' => self::$mParameters['throttleGroups'],
+ 'wpFilterActionWarn' => self::$mParameters['warnEnabled'],
+ 'wpFilterWarnMessage' => self::$mParameters['warnMessage'],
+ 'wpFilterWarnMessageOther' => self::$mParameters['warnMessageOther'],
+ 'wpFilterActionDisallow' => self::$mParameters['disallowEnabled'],
+ 'wpFilterActionBlockautopromote' => self::$mParameters['blockautopromoteEnabled'],
+ 'wpFilterActionDegroup' => self::$mParameters['degroupEnabled'],
+ 'wpFilterActionBlock' => self::$mParameters['blockEnabled'],
+ 'wpFilterBlockTalk' => self::$mParameters['blockTalk'],
+ 'wpBlockAnonDuration' => self::$mParameters['blockAnons'],
+ 'wpBlockUserDuration' => self::$mParameters['blockUsers'],
+ 'wpFilterActionRangeblock' => self::$mParameters['rangeblockEnabled'],
+ 'wpFilterActionTag' => self::$mParameters['tagEnabled'],
+ 'wpFilterTags' => self::$mParameters['tagTags'],
+ ];
+
+ // Checkboxes aren't included at all if they aren't selected. We can remove them
+ // this way (instead of iterating a hardcoded list) since they're the only false values
+ $params = array_filter( $params, function ( $el ) {
+ return $el !== false;
+ } );
+
+ $request = new FauxRequest( $params, true );
+ return $request;
+ }
+
+ /**
+ * Creates $amount new filters, in case we need to test updating an existing one
+ *
+ * @param int $amount How many filters to create
+ */
+ private static function createNewFilters( $amount ) {
+ $defaultRow = [
+ 'af_pattern' => '/**/',
+ 'af_user' => 0,
+ 'af_user_text' => 'FilterTester',
+ 'af_timestamp' => wfTimestampNow(),
+ 'af_enabled' => 1,
+ 'af_comments' => '',
+ 'af_public_comments' => 'Mock filter',
+ 'af_hidden' => 0,
+ 'af_hit_count' => 0,
+ 'af_throttled' => 0,
+ 'af_deleted' => 0,
+ 'af_actions' => '',
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ];
+
+ $dbw = wfGetDB( DB_MASTER );
+ for ( $i = 1; $i <= $amount; $i++ ) {
+ $dbw->replace(
+ 'abuse_filter',
+ [ 'af_id' ],
+ $defaultRow,
+ __METHOD__
+ );
+ }
+ }
+
+ /**
+ * Validate and save a filter given its parameters
+ *
+ * @param array $args Parameters of the filter and metadata for the test
+ * @covers AbuseFilter::saveFilter
+ * @dataProvider provideFilters
+ */
+ public function testSaveFilter( $args ) {
+ // Preliminar stuff for the test
+ if ( $args['testData']['customUserGroup'] ) {
+ self::$mUser->addGroup( $args['testData']['customUserGroup'] );
+ }
+
+ if ( $args['testData']['needsOtherFilters'] ) {
+ self::createNewFilters( $args['testData']['needsOtherFilters'] );
+ }
+
+ $fixedParameters = [
+ 'id' => 'new',
+ 'notes' => '',
+ 'group' => 'default',
+ 'enabled' => true,
+ 'hidden' => false,
+ 'global' => false,
+ 'deleted' => false,
+ 'throttled' => 0,
+ 'throttleEnabled' => false,
+ 'throttleCount' => 0,
+ 'throttlePeriod' => 0,
+ 'throttleGroups' => '',
+ 'warnEnabled' => false,
+ 'warnMessage' => 'abusefilter-warning',
+ 'warnMessageOther' => '',
+ 'disallowEnabled' => false,
+ 'blockautopromoteEnabled' => false,
+ 'degroupEnabled' => false,
+ 'blockEnabled' => false,
+ 'blockTalk' => false,
+ 'blockAnons' => 'infinity',
+ 'blockUsers' => 'infinity',
+ 'rangeblockEnabled' => false,
+ 'tagEnabled' => false,
+ 'tagTags' => ''
+ ];
+
+ // Extract parameters from testset and build what we need to save a filter
+ // The values specified in the testset will overwrite the fixed ones.
+ self::$mParameters = $args['filterParameters'] + $fixedParameters;
+ $filter = self::$mParameters['id'];
+ $viewEdit = self::getViewEdit( $filter );
+ $request = self::getRequest();
+ list( $newRow, $actions ) = $viewEdit->loadRequest( $filter );
+ self::$mParameters['rowActions'] = implode( ',', array_keys( array_filter( $actions ) ) );
+
+ // Send data for validation and saving
+ $status = AbuseFilter::saveFilter( $viewEdit, $filter, $request, $newRow, $actions );
+
+ // Must be removed for the next test
+ if ( $args['testData']['customUserGroup'] ) {
+ self::$mUser->removeGroup( $args['testData']['customUserGroup'] );
+ }
+
+ $shouldFail = $args['testData']['shouldFail'];
+ $shouldBeSaved = $args['testData']['shouldBeSaved'];
+ $furtherInfo = null;
+ $expected = true;
+ if ( $shouldFail ) {
+ if ( $status->isGood() ) {
+ $furtherInfo = 'The filter validation returned a valid status.';
+ $result = false;
+ } else {
+ $result = $status->getErrors();
+ $result = $result[0]['message'];
+ $expected = $args['testData']['expectedMessage'];
+ }
+ } else {
+ if ( $shouldBeSaved ) {
+ $value = $status->getValue();
+ $result = $status->isGood() && is_array( $value ) && count( $value ) === 2 &&
+ is_numeric( $value[0] ) && is_numeric( $value[1] );
+ } else {
+ $result = $status->isGood() && $status->getValue() === false;
+ }
+ }
+
+ $errorMessage = $args['testData']['doingWhat'] . '. Expected: ' .
+ $args['testData']['expectedResult'] . '.';
+ if ( $furtherInfo ) {
+ $errorMessage .= "\nFurther info: " . $furtherInfo;
+ }
+ $this->assertEquals(
+ $expected,
+ $result,
+ $errorMessage
+ );
+ }
+
+ /**
+ * Data provider for creating and editing filters.
+ * @return array
+ */
+ public function provideFilters() {
+ return [
+ [
+ [
+ 'filterParameters' => [
+ 'rules' => '',
+ 'description' => '',
+ 'blockautopromoteEnabled' => true,
+ ],
+ 'testData' => [
+ 'doingWhat' => 'Trying to save a filter without description and rules',
+ 'expectedResult' => 'a "missing required fields" error message',
+ 'expectedMessage' => 'abusefilter-edit-missingfields',
+ 'shouldFail' => true,
+ 'shouldBeSaved' => false,
+ 'customUserGroup' => '',
+ 'needsOtherFilters' => false
+ ]
+ ]
+ ],
+ [
+ [
+ 'filterParameters' => [
+ 'rules' => '/* My rules */',
+ 'description' => 'Some new filter',
+ 'enabled' => false,
+ 'deleted' => true,
+ ],
+ 'testData' => [
+ 'doingWhat' => 'Trying to save a filter with only rules and description',
+ 'expectedResult' => 'the saving to be successful',
+ 'expectedMessage' => '',
+ 'shouldFail' => false,
+ 'shouldBeSaved' => true,
+ 'customUserGroup' => '',
+ 'needsOtherFilters' => false
+ ]
+ ]
+ ],
+ [
+ [
+ 'filterParameters' => [
+ 'rules' => 'rlike',
+ 'description' => 'This syntax aint good',
+ 'blockEnabled' => true,
+ 'blockTalk' => true,
+ 'blockAnons' => '8 hours',
+ ],
+ 'testData' => [
+ 'doingWhat' => 'Trying to save a filter with wrong syntax',
+ 'expectedResult' => 'a "wrong syntax" error message',
+ 'expectedMessage' => 'abusefilter-edit-badsyntax',
+ 'shouldFail' => true,
+ 'shouldBeSaved' => false,
+ 'customUserGroup' => '',
+ 'needsOtherFilters' => false
+ ]
+ ]
+ ],
+ [
+ [
+ 'filterParameters' => [
+ 'rules' => '1==1',
+ 'description' => 'Enabled and deleted',
+ 'deleted' => true,
+ 'blockEnabled' => true,
+ 'blockTalk' => true,
+ 'blockAnons' => '8 hours',
+ ],
+ 'testData' => [
+ 'doingWhat' => 'Trying to save a filter marking it both enabled and deleted',
+ 'expectedResult' => 'an error message',
+ 'expectedMessage' => 'abusefilter-edit-deleting-enabled',
+ 'shouldFail' => true,
+ 'shouldBeSaved' => false,
+ 'customUserGroup' => '',
+ 'needsOtherFilters' => false
+ ]
+ ]
+ ],
+ [
+ [
+ 'filterParameters' => [
+ 'rules' => '1==1',
+ 'description' => 'Reserved tag',
+ 'notes' => 'Some notes',
+ 'hidden' => true,
+ 'tagEnabled' => true,
+ 'tagTags' => 'mw-undo'
+ ],
+ 'testData' => [
+ 'doingWhat' => 'Trying to save a filter with a reserved tag',
+ 'expectedResult' => 'an error message saying that the tag cannot be used',
+ 'expectedMessage' => 'abusefilter-edit-bad-tags',
+ 'shouldFail' => true,
+ 'shouldBeSaved' => false,
+ 'customUserGroup' => '',
+ 'needsOtherFilters' => false
+ ]
+ ]
+ ],
+ [
+ [
+ 'filterParameters' => [
+ 'rules' => '1==1',
+ 'description' => 'Invalid tag',
+ 'notes' => 'Some notes',
+ 'tagEnabled' => true,
+ 'tagTags' => 'some|tag'
+ ],
+ 'testData' => [
+ 'doingWhat' => 'Trying to save a filter with an invalid tag',
+ 'expectedResult' => 'an error message saying that the tag cannot be used',
+ 'expectedMessage' => 'tags-create-invalid-chars',
+ 'shouldFail' => true,
+ 'shouldBeSaved' => false,
+ 'customUserGroup' => '',
+ 'needsOtherFilters' => false
+ ]
+ ]
+ ],
+ [
+ [
+ 'filterParameters' => [
+ 'rules' => '1==1',
+ 'description' => 'Global without perms',
+ 'global' => true,
+ 'disallowEnabled' => true,
+ ],
+ 'testData' => [
+ 'doingWhat' => 'Trying to save a global filter without enough rights',
+ 'expectedResult' => 'an error message saying that I do not have the required rights',
+ 'expectedMessage' => 'abusefilter-edit-notallowed-global',
+ 'shouldFail' => true,
+ 'shouldBeSaved' => false,
+ 'customUserGroup' => '',
+ 'needsOtherFilters' => false
+ ]
+ ]
+ ],
+ [
+ [
+ 'filterParameters' => [
+ 'rules' => '1==1',
+ 'description' => 'Global with invalid warn message',
+ 'global' => true,
+ 'warnEnabled' => true,
+ 'warnMessage' => 'abusefilter-beautiful-warning',
+ ],
+ 'testData' => [
+ 'doingWhat' => 'Trying to save a global filter with a custom warn message',
+ 'expectedResult' => 'an error message saying that custom warn messages ' .
+ 'cannot be used for global rules',
+ 'expectedMessage' => 'abusefilter-edit-notallowed-global-custom-msg',
+ 'shouldFail' => true,
+ 'shouldBeSaved' => false,
+ 'customUserGroup' => 'filterEditorGlobal',
+ 'needsOtherFilters' => false
+ ]
+ ]
+ ],
+ [
+ [
+ 'filterParameters' => [
+ 'rules' => '1==1',
+ 'description' => 'Restricted action',
+ 'degroupEnabled' => true,
+ ],
+ 'testData' => [
+ 'doingWhat' => 'Trying to save a filter with a restricted action',
+ 'expectedResult' => 'an error message saying that the action is restricted',
+ 'expectedMessage' => 'abusefilter-edit-restricted',
+ 'shouldFail' => true,
+ 'shouldBeSaved' => false,
+ 'customUserGroup' => '',
+ 'needsOtherFilters' => false
+ ]
+ ]
+ ],
+ [
+ [
+ 'filterParameters' => [
+ 'id' => '1',
+ 'rules' => '/**/',
+ 'description' => 'Mock filter',
+ ],
+ 'testData' => [
+ 'doingWhat' => 'Trying to save a filter without changing anything',
+ 'expectedResult' => 'the validation to pass without the filter being saved',
+ 'expectedMessage' => '',
+ 'shouldFail' => false,
+ 'shouldBeSaved' => false,
+ 'customUserGroup' => '',
+ 'needsOtherFilters' => 1
+ ]
+ ]
+ ],
+ [
+ [
+ 'filterParameters' => [
+ 'rules' => '1==1',
+ 'description' => 'Invalid throttle groups',
+ 'notes' => 'Throttle... Again',
+ 'throttleEnabled' => true,
+ 'throttleCount' => 11,
+ 'throttlePeriod' => 111,
+ 'throttleGroups' => 'user\nfoo'
+ ],
+ 'testData' => [
+ 'doingWhat' => 'Trying to save a filter with invalid throttle groups',
+ 'expectedResult' => 'an error message saying that throttle groups are invalid',
+ 'expectedMessage' => 'abusefilter-edit-invalid-throttlegroups',
+ 'shouldFail' => true,
+ 'shouldBeSaved' => false,
+ 'customUserGroup' => '',
+ 'needsOtherFilters' => false
+ ]
+ ]
+ ]
+ ];
+ }
+
+ /**
+ * Check that our tag validation is working properly. Note that we only need one test
+ * for each called function. Consistency within ChangeTags functions should be
+ * assured by tests in core. The test for canAddTagsAccompanyingChange and canCreateTag
+ * are missing because they won't actually fail, never. Resolving T173917 would
+ * greatly improve the situation and could help writing better tests.
+ *
+ * @param string $tag The tag to validate
+ * @param string|null $error The expected error message. Null if validations should pass
+ * @covers AbuseFilter::isAllowedTag
+ * @dataProvider provideTags
+ */
+ public function testIsAllowedTag( $tag, $error ) {
+ $status = AbuseFilter::isAllowedTag( $tag );
+
+ if ( !$status->isGood() ) {
+ $actualError = $status->getErrors();
+ $actualError = $actualError[0]['message'];
+ } else {
+ $actualError = null;
+ if ( $error !== null ) {
+ $this->fail( "Tag validation returned a valid status instead of the expected '$error' error." );
+ }
+ }
+
+ $this->assertSame(
+ $error,
+ $actualError,
+ "Expected message '$error', got '$actualError' while validating the tag '$tag'."
+ );
+ }
+
+ /**
+ * Data provider for testIsAllowedTag
+ * @return array
+ */
+ public function provideTags() {
+ return [
+ [ 'a|b', 'tags-create-invalid-chars' ],
+ [ 'mw-undo', 'abusefilter-edit-bad-tags' ],
+ [ 'abusefilter-condition-limit', 'abusefilter-tag-reserved' ],
+ [ 'my_tag', null ],
+ ];
+ }
+
+ /**
+ * Check that throttle parameters validation works fine
+ *
+ * @param array $params Throttle parameters
+ * @param string|null $error The expected error message. Null if validations should pass
+ * @covers AbuseFilter::checkThrottleParameters
+ * @dataProvider provideThrottleParameters
+ */
+ public function testCheckThrottleParameters( $params, $error ) {
+ $result = AbuseFilter::checkThrottleParameters( $params );
+ $this->assertSame( $error, $result, 'Throttle parameter validation does not work as expected.' );
+ }
+
+ /**
+ * Data provider for testCheckThrottleParameters
+ * @return array
+ */
+ public function provideThrottleParameters() {
+ return [
+ [ [ '1', '5,23', 'user', 'ip', 'page,range', 'ip,user', 'range,ip' ], null ],
+ [ [ '1', '5.3,23', 'user', 'ip' ], 'abusefilter-edit-invalid-throttlecount' ],
+ [ [ '1', '-3,23', 'user', 'ip' ], 'abusefilter-edit-invalid-throttlecount' ],
+ [ [ '1', '5,2.3', 'user', 'ip' ], 'abusefilter-edit-invalid-throttleperiod' ],
+ [ [ '1', '4,-14', 'user', 'ip' ], 'abusefilter-edit-invalid-throttleperiod' ],
+ [ [ '1', '3,33' ], 'abusefilter-edit-empty-throttlegroups' ],
+ [ [ '1', '3,33', 'user', 'ip,foo,user' ], 'abusefilter-edit-invalid-throttlegroups' ],
+ [ [ '1', '3,33', 'foo', 'ip,user' ], 'abusefilter-edit-invalid-throttlegroups' ],
+ [ [ '1', '3,33', 'foo', 'ip,user,bar' ], 'abusefilter-edit-invalid-throttlegroups' ],
+ [ [ '1', '3,33', 'user', 'ip,page,user' ], null ],
+ [
+ [ '1', '3,33', 'ip', 'user','user,ip', 'ip,user', 'user,ip,user', 'user', 'ip,ip,user' ],
+ 'abusefilter-edit-duplicated-throttlegroups'
+ ],
+ [ [ '1', '3,33', 'ip,ip,user' ], 'abusefilter-edit-duplicated-throttlegroups' ],
+ [ [ '1', '3,33', 'user,ip', 'ip,user' ], 'abusefilter-edit-duplicated-throttlegroups' ],
+ ];
+ }
+}
diff --git a/AbuseFilter/tests/phpunit/AbuseFilterTest.php b/AbuseFilter/tests/phpunit/AbuseFilterTest.php
new file mode 100644
index 00000000..926116e2
--- /dev/null
+++ b/AbuseFilter/tests/phpunit/AbuseFilterTest.php
@@ -0,0 +1,1413 @@
+<?php
+/**
+ * Generic tests for utility functions in AbuseFilter
+ *
+ * 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.0-or-later
+ */
+
+/**
+ * @group Test
+ * @group AbuseFilter
+ * @group AbuseFilterGeneric
+ * @group Database
+ *
+ * @covers AbuseFilter
+ * @covers AFPData
+ * @covers AbuseFilterVariableHolder
+ * @covers AFComputedVariable
+ */
+class AbuseFilterTest extends MediaWikiTestCase {
+ /** @var User */
+ protected static $mUser;
+ /** @var Title */
+ protected static $mTitle;
+ /** @var WikiPage */
+ protected static $mPage;
+ /** @var AbuseFilterVariableHolder */
+ protected static $mVariables;
+
+ /**
+ * @var array These tables will be deleted in parent::tearDown.
+ * We need it to happen to make tests on fresh pages.
+ */
+ protected $tablesUsed = [
+ 'page',
+ 'page_restrictions',
+ 'abuse_filter',
+ 'abuse_filter_history',
+ 'abuse_filter_log',
+ 'abuse_filter_actions'
+ ];
+
+ /**
+ * @see MediaWikiTestCase::setUp
+ */
+ protected function setUp() {
+ parent::setUp();
+ MWTimestamp::setFakeTime( 1514700000 );
+ $user = User::newFromName( 'AnotherFilteredUser' );
+ $user->addToDatabase();
+ $user->addGroup( 'basicFilteredUser' );
+ self::$mUser = $user;
+ MWTimestamp::setFakeTime( false );
+
+ self::$mVariables = new AbuseFilterVariableHolder();
+
+ // Make sure that the config we're using is the one we're expecting
+ $this->setMwGlobals( [
+ 'wgUser' => $user,
+ 'wgRestrictionTypes' => [
+ 'create',
+ 'edit',
+ 'move',
+ 'upload'
+ ],
+ 'wgAbuseFilterRestrictions' => [
+ 'degroup' => true
+ ],
+ 'wgAbuseFilterIsCentral' => true,
+ 'wgAbuseFilterActions' => [
+ 'throttle' => true,
+ 'warn' => true,
+ 'disallow' => true,
+ 'blockautopromote' => true,
+ 'block' => true,
+ 'rangeblock' => true,
+ 'degroup' => true,
+ 'tag' => true
+ ],
+ 'wgAbuseFilterValidGroups' => [
+ 'default',
+ 'flow'
+ ],
+ 'wgEnableParserLimitReporting' => false
+ ] );
+ $this->setGroupPermissions( [
+ 'basicFilteredUser' => [
+ 'abusefilter-view' => true
+ ],
+ 'intermediateFilteredUser' => [
+ 'abusefilter-log' => true
+ ],
+ 'privilegedFilteredUser' => [
+ 'abusefilter-private' => true,
+ 'abusefilter-revert' => true
+ ]
+ ] );
+ }
+
+ /**
+ * @see MediaWikiTestCase::tearDown
+ */
+ protected function tearDown() {
+ MWTimestamp::setFakeTime( false );
+ $userGroups = self::$mUser->getGroups();
+ // We want to start fresh
+ foreach ( $userGroups as $group ) {
+ self::$mUser->removeGroup( $group );
+ }
+ parent::tearDown();
+ }
+
+ /**
+ * Given the name of a variable, naturally sets it to a determined amount
+ *
+ * @param string $var The variable name
+ * @return array the first position is the result (mixed), the second is a boolean
+ * indicating whether we've been able to compute the given variable
+ */
+ private static function computeExpectedUserVariable( $var ) {
+ $success = true;
+ switch ( $var ) {
+ case 'user_editcount':
+ // Create a page and make the user edit it 7 times
+ $page = WikiPage::factory( Title::newFromText( 'UTPage' ) );
+ $page->doEditContent(
+ new WikitextContent( 'AbuseFilter test, page creation' ),
+ 'Testing page for AbuseFilter',
+ EDIT_NEW,
+ false,
+ self::$mUser
+ );
+ for ( $i = 1; $i <= 7; $i++ ) {
+ $page->doEditContent(
+ new WikitextContent( "AbuseFilter test, page revision #$i" ),
+ 'Testing page for AbuseFilter',
+ EDIT_UPDATE,
+ false,
+ self::$mUser
+ );
+ }
+ // Reload to reflect deferred update
+ self::$mUser->clearInstanceCache();
+ $result = 7;
+ break;
+ case 'user_name':
+ $result = self::$mUser->getName();
+ break;
+ case 'user_emailconfirm':
+ $time = wfTimestampNow();
+ self::$mUser->setEmailAuthenticationTimestamp( $time );
+ $result = $time;
+ break;
+ case 'user_groups':
+ self::$mUser->addGroup( 'intermediateFilteredUser' );
+ $result = self::$mUser->getEffectiveGroups();
+ break;
+ case 'user_rights':
+ self::$mUser->addGroup( 'privilegedFilteredUser' );
+ $result = self::$mUser->getRights();
+ break;
+ case 'user_blocked':
+ $block = new Block();
+ $block->setTarget( self::$mUser );
+ $block->setBlocker( 'UTSysop' );
+ $block->mReason = 'Testing AbuseFilter variable user_blocked';
+ $block->mExpiry = 'infinity';
+
+ $block->insert();
+ $result = true;
+ break;
+ default:
+ $success = false;
+ $result = null;
+ }
+ return [ $result, $success ];
+ }
+
+ /**
+ * Check that the generated user-related variables are correct
+ *
+ * @param string $varName The name of the variable we're currently testing
+ * @covers AbuseFilter::generateUserVars
+ * @dataProvider provideUserVars
+ */
+ public function testGenerateUserVars( $varName ) {
+ list( $computed, $successfully ) = self::computeExpectedUserVariable( $varName );
+ if ( !$successfully ) {
+ $this->fail( "Given unknown user-related variable $varName." );
+ }
+
+ $variableHolder = AbuseFilter::generateUserVars( self::$mUser );
+ $actual = $variableHolder->getVar( $varName )->toNative();
+ $this->assertSame(
+ $computed,
+ $actual,
+ "AbuseFilter variable $varName is computed wrongly."
+ );
+ }
+
+ /**
+ * Data provider for testGenerateUserVars
+ * @return array
+ */
+ public function provideUserVars() {
+ return [
+ [ 'user_editcount' ],
+ [ 'user_name' ],
+ [ 'user_emailconfirm' ],
+ [ 'user_groups' ],
+ [ 'user_rights' ],
+ [ 'user_blocked' ]
+ ];
+ }
+
+ /**
+ * Check that user_age is correct. Needs a separate function to take into account the
+ * difference between timestamps due to test execution time
+ *
+ * @covers AbuseFilter::generateUserVars
+ */
+ public function testUserAgeVar() {
+ // Set a fake timestamp so that execution time won't be a problem
+ MWTimestamp::setFakeTime( 1514700163 );
+ $variableHolder = AbuseFilter::generateUserVars( self::$mUser );
+ $actual = $variableHolder->getVar( 'user_age' )->toNative();
+
+ $this->assertEquals(
+ 163,
+ $actual,
+ "AbuseFilter variable user_age is computed wrongly. Expected: 163, actual: $actual."
+ );
+ }
+
+ /**
+ * Given the name of a variable, naturally sets it to a determined amount
+ *
+ * @param string $suffix The suffix of the variable
+ * @param string|null $options Further options for the test
+ * @return array the first position is the result (mixed), the second is a boolean
+ * indicating whether we've been able to compute the given variable. If false, then
+ * the result may be null if the requested variable doesn't exist, or false if there
+ * has been some other problem.
+ */
+ private static function computeExpectedTitleVariable( $suffix, $options = null ) {
+ self::$mTitle = Title::newFromText( 'AbuseFilter test' );
+ $page = WikiPage::factory( self::$mTitle );
+
+ if ( $options === 'restricted' ) {
+ $action = str_replace( '_restrictions_', '', $suffix );
+ $namespace = 0;
+ if ( $action === 'upload' ) {
+ // Only files can have it
+ $namespace = 6;
+ }
+ self::$mTitle = Title::makeTitle( $namespace, 'AbuseFilter restrictions test' );
+ $page = WikiPage::factory( self::$mTitle );
+ if ( $action !== 'create' ) {
+ // To apply other restrictions, the title has to exist
+ $page->doEditContent(
+ new WikitextContent( 'AbuseFilter test for title variables' ),
+ 'Testing page for AbuseFilter',
+ EDIT_NEW,
+ false,
+ self::$mUser
+ );
+ }
+ $_ = false;
+ $s = $page->doUpdateRestrictions(
+ [ $action => true ],
+ [ $action => 'infinity' ],
+ $_,
+ 'Testing restrictions for AbuseFilter',
+ self::$mUser
+ );
+ }
+ $success = true;
+ switch ( $suffix ) {
+ case '_id':
+ $result = self::$mTitle->getArticleID();
+ break;
+ case '_namespace':
+ $result = self::$mTitle->getNamespace();
+ break;
+ case '_title':
+ $result = self::$mTitle->getText();
+ break;
+ case '_prefixedtitle':
+ $result = self::$mTitle->getPrefixedText();
+ break;
+ case '_restrictions_create':
+ $restrictions = self::$mTitle->getRestrictions( 'create' );
+ $restrictions = count( $restrictions ) ? $restrictions : [];
+ $preliminarCheck = !( $options === 'restricted' xor count( $restrictions ) );
+ if ( $preliminarCheck ) {
+ $result = $restrictions;
+ } else {
+ $success = false;
+ $result = false;
+ }
+ break;
+ case '_restrictions_edit':
+ $restrictions = self::$mTitle->getRestrictions( 'edit' );
+ $restrictions = count( $restrictions ) ? $restrictions : [];
+ $preliminarCheck = !( $options === 'restricted' xor count( $restrictions ) );
+ if ( $preliminarCheck ) {
+ $result = $restrictions;
+ } else {
+ $success = false;
+ $result = false;
+ }
+ break;
+ case '_restrictions_move':
+ $restrictions = self::$mTitle->getRestrictions( 'move' );
+ $restrictions = count( $restrictions ) ? $restrictions : [];
+ $preliminarCheck = !( $options === 'restricted' xor count( $restrictions ) );
+ if ( $preliminarCheck ) {
+ $result = $restrictions;
+ } else {
+ $success = false;
+ $result = false;
+ }
+ break;
+ case '_restrictions_upload':
+ $restrictions = self::$mTitle->getRestrictions( 'upload' );
+ $restrictions = count( $restrictions ) ? $restrictions : [];
+ $preliminarCheck = !( $options === 'restricted' xor count( $restrictions ) );
+ if ( $preliminarCheck ) {
+ $result = $restrictions;
+ } else {
+ $success = false;
+ $result = false;
+ }
+ break;
+ case '_recent_contributors':
+ // Create the page and make a couple of edits from different users
+ $page->doEditContent(
+ new WikitextContent( 'AbuseFilter test for title variables' ),
+ 'Testing page for AbuseFilter',
+ EDIT_NEW,
+ false,
+ self::$mUser
+ );
+ $mockContributors = [ 'Alice', 'Bob', 'Charlie' ];
+ foreach ( $mockContributors as $user ) {
+ $page->doEditContent(
+ new WikitextContent( "AbuseFilter test, page revision by $user" ),
+ 'Testing page for AbuseFilter',
+ EDIT_UPDATE,
+ false,
+ User::newFromName( $user )
+ );
+ }
+ $contributors = array_reverse( $mockContributors );
+ array_push( $contributors, self::$mUser->getName() );
+ $result = $contributors;
+ break;
+ case '_first_contributor':
+ // Create the page and make a couple of edits from different users
+ $page->doEditContent(
+ new WikitextContent( 'AbuseFilter test for title variables' ),
+ 'Testing page for AbuseFilter',
+ EDIT_NEW,
+ false,
+ self::$mUser
+ );
+ $mockContributors = [ 'Alice', 'Bob', 'Charlie' ];
+ foreach ( $mockContributors as $user ) {
+ $page->doEditContent(
+ new WikitextContent( "AbuseFilter test, page revision by $user" ),
+ 'Testing page for AbuseFilter',
+ EDIT_UPDATE,
+ false,
+ User::newFromName( $user )
+ );
+ }
+ $result = self::$mUser->getName();
+ break;
+ default:
+ $success = false;
+ $result = null;
+ }
+ return [ $result, $success ];
+ }
+
+ /**
+ * Check that the generated title-related variables are correct
+ *
+ * @param string $prefix The prefix of the variables we're currently testing
+ * @param string $suffix The suffix of the variables we're currently testing
+ * @param string|null $options Whether we want to execute the test with specific options
+ * Right now, this can only be 'restricted' for restrictions variables; in this case,
+ * the tested title will have the requested restriction.
+ * @covers AbuseFilter::generateTitleVars
+ * @dataProvider provideTitleVars
+ */
+ public function testGenerateTitleVars( $prefix, $suffix, $options = null ) {
+ $varName = $prefix . $suffix;
+ list( $computed, $successfully ) = self::computeExpectedTitleVariable( $suffix, $options );
+ if ( !$successfully ) {
+ if ( $computed === null ) {
+ $this->fail( "Given unknown title-related variable $varName." );
+ } else {
+ $this->fail( "AbuseFilter variable $varName is computed wrongly." );
+ }
+ }
+
+ $variableHolder = AbuseFilter::generateTitleVars( self::$mTitle, $prefix );
+ $actual = $variableHolder->getVar( $varName )->toNative();
+ $this->assertSame(
+ $computed,
+ $actual,
+ "AbuseFilter variable $varName is computed wrongly."
+ );
+ }
+
+ /**
+ * Data provider for testGenerateUserVars
+ * @return array
+ */
+ public function provideTitleVars() {
+ return [
+ [ 'page', '_id' ],
+ [ 'page', '_namespace' ],
+ [ 'page', '_title' ],
+ [ 'page', '_prefixedtitle' ],
+ [ 'page', '_restrictions_create' ],
+ [ 'page', '_restrictions_create', 'restricted' ],
+ [ 'page', '_restrictions_edit' ],
+ [ 'page', '_restrictions_edit', 'restricted' ],
+ [ 'page', '_restrictions_move' ],
+ [ 'page', '_restrictions_move', 'restricted' ],
+ [ 'page', '_restrictions_upload' ],
+ [ 'page', '_restrictions_upload', 'restricted' ],
+ [ 'page', '_first_contributor' ],
+ [ 'page', '_recent_contributors' ],
+ [ 'moved_from', '_id' ],
+ [ 'moved_from', '_namespace' ],
+ [ 'moved_from', '_title' ],
+ [ 'moved_from', '_prefixedtitle' ],
+ [ 'moved_from', '_restrictions_create' ],
+ [ 'moved_from', '_restrictions_create', 'restricted' ],
+ [ 'moved_from', '_restrictions_edit' ],
+ [ 'moved_from', '_restrictions_edit', 'restricted' ],
+ [ 'moved_from', '_restrictions_move' ],
+ [ 'moved_from', '_restrictions_move', 'restricted' ],
+ [ 'moved_from', '_restrictions_upload' ],
+ [ 'moved_from', '_restrictions_upload', 'restricted' ],
+ [ 'moved_from', '_first_contributor' ],
+ [ 'moved_from', '_recent_contributors' ],
+ [ 'moved_to', '_id' ],
+ [ 'moved_to', '_namespace' ],
+ [ 'moved_to', '_title' ],
+ [ 'moved_to', '_prefixedtitle' ],
+ [ 'moved_to', '_restrictions_create' ],
+ [ 'moved_to', '_restrictions_create', 'restricted' ],
+ [ 'moved_to', '_restrictions_edit' ],
+ [ 'moved_to', '_restrictions_edit', 'restricted' ],
+ [ 'moved_to', '_restrictions_move' ],
+ [ 'moved_to', '_restrictions_move', 'restricted' ],
+ [ 'moved_to', '_restrictions_upload' ],
+ [ 'moved_to', '_restrictions_upload', 'restricted' ],
+ [ 'moved_to', '_first_contributor' ],
+ [ 'moved_to', '_recent_contributors' ],
+ ];
+ }
+
+ /**
+ * Check that _age variables are correct. They need a separate function to take into
+ * account the difference between timestamps due to test execution time
+ *
+ * @param string $prefix Prefix of the variable to test
+ * @covers AbuseFilter::generateTitleVars
+ * @dataProvider provideAgeVars
+ */
+ public function testAgeVars( $prefix ) {
+ $varName = $prefix . '_age';
+
+ MWTimestamp::setFakeTime( 1514700000 );
+ self::$mTitle = Title::newFromText( 'AbuseFilter test' );
+ $page = WikiPage::factory( self::$mTitle );
+ $page->doEditContent(
+ new WikitextContent( 'AbuseFilter _age variables test' ),
+ 'Testing page for AbuseFilter',
+ EDIT_NEW,
+ false,
+ self::$mUser
+ );
+
+ MWTimestamp::setFakeTime( 1514700123 );
+ $variableHolder = AbuseFilter::generateTitleVars( self::$mTitle, $prefix );
+ $actual = $variableHolder->getVar( $varName )->toNative();
+ $this->assertEquals(
+ 123,
+ $actual,
+ "AbuseFilter variable $varName is computed wrongly. Expected: 123, actual: $actual."
+ );
+ }
+
+ /**
+ * Data provider for testAgeVars
+ * @return array
+ */
+ public function provideAgeVars() {
+ return [
+ [ 'page' ],
+ [ 'moved_from' ],
+ [ 'moved_to' ],
+ ];
+ }
+
+ /**
+ * Check that version comparing works well
+ *
+ * @param array $firstVersion [ stdClass, array ]
+ * @param array $secondVersion [ stdClass, array ]
+ * @param array $expected The differences
+ * @covers AbuseFilter::compareVersions
+ * @dataProvider provideVersions
+ */
+ public function testCompareVersions( $firstVersion, $secondVersion, $expected ) {
+ $differences = AbuseFilter::compareVersions( $firstVersion, $secondVersion );
+
+ $this->assertSame(
+ $expected,
+ $differences,
+ 'AbuseFilter::compareVersions did not output the expected result.'
+ );
+ }
+
+ /**
+ * Data provider for testCompareVersions
+ * @return array
+ */
+ public function provideVersions() {
+ return [
+ [
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ],
+ [
+ 'disallow' => [
+ 'action' => 'disallow',
+ 'parameters' => []
+ ]
+ ]
+ ],
+ [
+ (object)[
+ 'af_public_comments' => 'OtherComments',
+ 'af_pattern' => '/*Other pattern*/',
+ 'af_comments' => 'Other comments',
+ 'af_deleted' => 1,
+ 'af_enabled' => 0,
+ 'af_hidden' => 1,
+ 'af_global' => 1,
+ 'af_group' => 'flow'
+ ],
+ [
+ 'disallow' => [
+ 'action' => 'disallow',
+ 'parameters' => []
+ ]
+ ]
+ ],
+ [
+ 'af_public_comments',
+ 'af_pattern',
+ 'af_comments',
+ 'af_deleted',
+ 'af_enabled',
+ 'af_hidden',
+ 'af_global',
+ 'af_group',
+ ]
+ ],
+ [
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ],
+ [
+ 'disallow' => [
+ 'action' => 'disallow',
+ 'parameters' => []
+ ]
+ ]
+ ],
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ],
+ [
+ 'disallow' => [
+ 'action' => 'disallow',
+ 'parameters' => []
+ ]
+ ]
+ ],
+ []
+ ],
+ [
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ],
+ [
+ 'disallow' => [
+ 'action' => 'disallow',
+ 'parameters' => []
+ ]
+ ]
+ ],
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ],
+ [
+ 'degroup' => [
+ 'action' => 'degroup',
+ 'parameters' => []
+ ]
+ ]
+ ],
+ [ 'actions' ]
+ ],
+ [
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ],
+ [
+ 'disallow' => [
+ 'action' => 'disallow',
+ 'parameters' => []
+ ]
+ ]
+ ],
+ [
+ (object)[
+ 'af_public_comments' => 'OtherComments',
+ 'af_pattern' => '/*Other pattern*/',
+ 'af_comments' => 'Other comments',
+ 'af_deleted' => 1,
+ 'af_enabled' => 0,
+ 'af_hidden' => 1,
+ 'af_global' => 1,
+ 'af_group' => 'flow'
+ ],
+ [
+ 'blockautopromote' => [
+ 'action' => 'blockautopromote',
+ 'parameters' => []
+ ]
+ ]
+ ],
+ [
+ 'af_public_comments',
+ 'af_pattern',
+ 'af_comments',
+ 'af_deleted',
+ 'af_enabled',
+ 'af_hidden',
+ 'af_global',
+ 'af_group',
+ 'actions'
+ ]
+ ],
+ [
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ],
+ [
+ 'disallow' => [
+ 'action' => 'disallow',
+ 'parameters' => []
+ ]
+ ]
+ ],
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ],
+ [
+ 'warn' => [
+ 'action' => 'warn',
+ 'parameters' => [
+ 'abusefilter-warning'
+ ]
+ ]
+ ]
+ ],
+ [ 'actions' ]
+ ],
+ [
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ],
+ [
+ 'warn' => [
+ 'action' => 'warn',
+ 'parameters' => [
+ 'abusefilter-warning'
+ ]
+ ]
+ ]
+ ],
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ],
+ [
+ 'disallow' => [
+ 'action' => 'disallow',
+ 'parameters' => []
+ ]
+ ]
+ ],
+ [ 'actions' ]
+ ],
+ [
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ],
+ [
+ 'warn' => [
+ 'action' => 'warn',
+ 'parameters' => [
+ 'abusefilter-warning'
+ ]
+ ]
+ ]
+ ],
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ],
+ [
+ 'warn' => [
+ 'action' => 'warn',
+ 'parameters' => [
+ 'abusefilter-my-best-warning'
+ ]
+ ],
+ 'degroup' => [
+ 'action' => 'degroup',
+ 'parameters' => []
+ ]
+ ]
+ ],
+ [ 'actions' ]
+ ],
+ [
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ],
+ [
+ 'warn' => [
+ 'action' => 'warn',
+ 'parameters' => [
+ 'abusefilter-warning'
+ ]
+ ]
+ ]
+ ],
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Other Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 1,
+ 'af_global' => 0,
+ 'af_group' => 'flow'
+ ],
+ [
+ 'warn' => [
+ 'action' => 'warn',
+ 'parameters' => [
+ 'abusefilter-my-best-warning'
+ ]
+ ]
+ ]
+ ],
+ [
+ 'af_pattern',
+ 'af_hidden',
+ 'af_group',
+ 'actions'
+ ]
+ ],
+ [
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'default'
+ ],
+ [
+ 'warn' => [
+ 'action' => 'warn',
+ 'parameters' => [
+ 'abusefilter-beautiful-warning'
+ ]
+ ]
+ ]
+ ],
+ [
+ (object)[
+ 'af_public_comments' => 'Comments',
+ 'af_pattern' => '/*Pattern*/',
+ 'af_comments' => 'Comments',
+ 'af_deleted' => 0,
+ 'af_enabled' => 1,
+ 'af_hidden' => 0,
+ 'af_global' => 0,
+ 'af_group' => 'flow'
+ ],
+ [
+ 'warn' => [
+ 'action' => 'warn',
+ 'parameters' => [
+ 'abusefilter-my-best-warning'
+ ]
+ ]
+ ]
+ ],
+ [
+ 'af_group',
+ 'actions'
+ ]
+ ],
+ ];
+ }
+
+ /**
+ * Check that row translating from abuse_filter_history to abuse_filter is working fine
+ *
+ * @param stdClass $row The row to translate
+ * @param array $expected The expected result
+ * @covers AbuseFilter::translateFromHistory
+ * @dataProvider provideHistoryRows
+ */
+ public function testTranslateFromHistory( $row, $expected ) {
+ $actual = AbuseFilter::translateFromHistory( $row );
+
+ $this->assertEquals(
+ $expected,
+ $actual,
+ 'AbuseFilter::translateFromHistory produced a wrong output.'
+ );
+ }
+
+ /**
+ * Data provider for testTranslateFromHistory
+ * @return array
+ */
+ public function provideHistoryRows() {
+ return [
+ [
+ (object)[
+ 'afh_filter' => 1,
+ 'afh_user' => 0,
+ 'afh_user_text' => 'FilteredUser',
+ 'afh_timestamp' => '20180706142932',
+ 'afh_pattern' => '/*Pattern*/',
+ 'afh_comments' => 'Comments',
+ 'afh_flags' => 'enabled,hidden',
+ 'afh_public_comments' => 'Description',
+ 'afh_actions' => serialize( [
+ 'degroup' => [],
+ 'disallow' => []
+ ] ),
+ 'afh_deleted' => 0,
+ 'afh_changed_fields' => 'actions',
+ 'afh_group' => 'default'
+ ],
+ [
+ (object)[
+ 'af_pattern' => '/*Pattern*/',
+ 'af_user' => 0,
+ 'af_user_text' => 'FilteredUser',
+ 'af_timestamp' => '20180706142932',
+ 'af_comments' => 'Comments',
+ 'af_public_comments' => 'Description',
+ 'af_deleted' => 0,
+ 'af_id' => 1,
+ 'af_group' => 'default',
+ 'af_hidden' => 1,
+ 'af_enabled' => 1
+ ],
+ [
+ 'degroup' => [
+ 'action' => 'degroup',
+ 'parameters' => []
+ ],
+ 'disallow' => [
+ 'action' => 'disallow',
+ 'parameters' => []
+ ]
+ ]
+ ]
+ ],
+ [
+ (object)[
+ 'afh_filter' => 5,
+ 'afh_user' => 0,
+ 'afh_user_text' => 'FilteredUser',
+ 'afh_timestamp' => '20180706145516',
+ 'afh_pattern' => '1 === 1',
+ 'afh_comments' => '',
+ 'afh_flags' => '',
+ 'afh_public_comments' => 'Our best filter',
+ 'afh_actions' => serialize( [
+ 'warn' => [
+ 'abusefilter-warning',
+ ''
+ ],
+ 'disallow' => [],
+ ] ),
+ 'afh_deleted' => 0,
+ 'afh_changed_fields' => 'af_pattern,af_comments,af_enabled,actions',
+ 'afh_group' => 'flow'
+ ],
+ [
+ (object)[
+ 'af_pattern' => '1 === 1',
+ 'af_user' => 0,
+ 'af_user_text' => 'FilteredUser',
+ 'af_timestamp' => '20180706145516',
+ 'af_comments' => '',
+ 'af_public_comments' => 'Our best filter',
+ 'af_deleted' => 0,
+ 'af_id' => 5,
+ 'af_group' => 'flow',
+ 'af_hidden' => 0,
+ 'af_enabled' => 0
+ ],
+ [
+ 'warn' => [
+ 'action' => 'warn',
+ 'parameters' => [
+ 'abusefilter-warning',
+ ''
+ ]
+ ],
+ 'disallow' => [
+ 'action' => 'disallow',
+ 'parameters' => []
+ ]
+ ]
+ ]
+ ],
+ [
+ (object)[
+ 'afh_filter' => 7,
+ 'afh_user' => 1,
+ 'afh_user_text' => 'AnotherUser',
+ 'afh_timestamp' => '20160511185604',
+ 'afh_pattern' => 'added_lines irlike "lol" & summary == "ggwp"',
+ 'afh_comments' => 'Show vandals no mercy, for you shall receive none.',
+ 'afh_flags' => 'enabled,hidden',
+ 'afh_public_comments' => 'Whatever',
+ 'afh_actions' => serialize( [
+ 'warn' => [
+ 'abusefilter-warning',
+ ''
+ ],
+ 'disallow' => [],
+ 'block' => [
+ 'blocktalk',
+ '8 hours',
+ 'infinity'
+ ]
+ ] ),
+ 'afh_deleted' => 0,
+ 'afh_changed_fields' => 'af_pattern,af_comments,af_enabled,af_public_comments,actions',
+ 'afh_group' => 'default'
+ ],
+ [
+ (object)[
+ 'af_pattern' => 'added_lines irlike "lol" & summary == "ggwp"',
+ 'af_user' => 1,
+ 'af_user_text' => 'AnotherUser',
+ 'af_timestamp' => '20160511185604',
+ 'af_comments' => 'Show vandals no mercy, for you shall receive none.',
+ 'af_public_comments' => 'Whatever',
+ 'af_deleted' => 0,
+ 'af_id' => 7,
+ 'af_group' => 'default',
+ 'af_hidden' => 1,
+ 'af_enabled' => 1
+ ],
+ [
+ 'warn' => [
+ 'action' => 'warn',
+ 'parameters' => [
+ 'abusefilter-warning',
+ ''
+ ]
+ ],
+ 'disallow' => [
+ 'action' => 'disallow',
+ 'parameters' => []
+ ],
+ 'block' => [
+ 'action' => 'block',
+ 'parameters' => [
+ 'blocktalk',
+ '8 hours',
+ 'infinity'
+ ]
+ ]
+ ]
+ ]
+ ],
+ [
+ (object)[
+ 'afh_filter' => 131,
+ 'afh_user' => 15,
+ 'afh_user_text' => 'YetAnotherUser',
+ 'afh_timestamp' => '20180511185604',
+ 'afh_pattern' => 'user_name == "Thatguy"',
+ 'afh_comments' => '',
+ 'afh_flags' => 'hidden,deleted',
+ 'afh_public_comments' => 'No comment.',
+ 'afh_actions' => serialize( [
+ 'throttle' => [
+ '131',
+ '3,60',
+ 'user'
+ ],
+ 'tag' => [
+ 'mytag',
+ 'yourtag'
+ ]
+ ] ),
+ 'afh_deleted' => 1,
+ 'afh_changed_fields' => 'af_pattern',
+ 'afh_group' => 'default'
+ ],
+ [
+ (object)[
+ 'af_pattern' => 'user_name == "Thatguy"',
+ 'af_user' => 15,
+ 'af_user_text' => 'YetAnotherUser',
+ 'af_timestamp' => '20180511185604',
+ 'af_comments' => '',
+ 'af_public_comments' => 'No comment.',
+ 'af_deleted' => 1,
+ 'af_id' => 131,
+ 'af_group' => 'default',
+ 'af_hidden' => 1,
+ 'af_enabled' => 0
+ ],
+ [
+ 'throttle' => [
+ 'action' => 'throttle',
+ 'parameters' => [
+ '131',
+ '3,60',
+ 'user'
+ ]
+ ],
+ 'tag' => [
+ 'action' => 'tag',
+ 'parameters' => [
+ 'mytag',
+ 'yourtag'
+ ]
+ ]
+ ]
+ ]
+ ]
+ ];
+ }
+
+ /**
+ * Given the name of a variable, naturally sets it to a determined amount
+ *
+ * @param string $old The old wikitext of the page
+ * @param string $new The new wikitext of the page
+ * @return array
+ */
+ private static function computeExpectedEditVariable( $old, $new ) {
+ global $wgParser;
+ $popts = ParserOptions::newFromUser( self::$mUser );
+ // Order matters here. Some variables rely on other ones.
+ $variables = [
+ 'new_html',
+ 'new_pst',
+ 'new_text',
+ 'edit_diff',
+ 'edit_diff_pst',
+ 'new_size',
+ 'old_size',
+ 'edit_delta',
+ 'added_lines',
+ 'removed_lines',
+ 'added_lines_pst',
+ 'all_links',
+ 'old_links',
+ 'added_links',
+ 'removed_links'
+ ];
+
+ // Set required variables
+ self::$mVariables->setVar( 'old_wikitext', $old );
+ self::$mVariables->setVar( 'new_wikitext', $new );
+ self::$mVariables->setVar( 'summary', 'Testing page for AbuseFilter' );
+
+ $computedVariables = [];
+ foreach ( $variables as $var ) {
+ $success = true;
+ // Reset text variables since some operations are changing them.
+ $oldText = $old;
+ $newText = $new;
+ switch ( $var ) {
+ case 'edit_diff_pst':
+ $newText = self::$mVariables->getVar( 'new_pst' )->toString();
+ // Intentional fall-through
+ case 'edit_diff':
+ $diffs = new Diff( explode( "\n", $oldText ), explode( "\n", $newText ) );
+ $format = new UnifiedDiffFormatter();
+ $result = $format->format( $diffs );
+ break;
+ case 'new_size':
+ $result = strlen( $newText );
+ break;
+ case 'old_size':
+ $result = strlen( $oldText );
+ break;
+ case 'edit_delta':
+ $result = strlen( $newText ) - strlen( $oldText );
+ break;
+ case 'added_lines_pst':
+ case 'added_lines':
+ case 'removed_lines':
+ $diffVariable = $var === 'added_lines_pst' ? 'edit_diff_pst' : 'edit_diff';
+ $diff = self::$mVariables->getVar( $diffVariable )->toString();
+ $line_prefix = $var === 'removed_lines' ? '-' : '+';
+ $diff_lines = explode( "\n", $diff );
+ $interest_lines = [];
+ foreach ( $diff_lines as $line ) {
+ if ( substr( $line, 0, 1 ) === $line_prefix ) {
+ $interest_lines[] = substr( $line, strlen( $line_prefix ) );
+ }
+ }
+ $result = $interest_lines;
+ break;
+ case 'new_text':
+ $newHtml = self::$mVariables->getVar( 'new_html' )->toString();
+ $result = StringUtils::delimiterReplace( '<', '>', '', $newHtml );
+ break;
+ case 'new_pst':
+ case 'new_html':
+ $article = self::$mPage;
+ $content = ContentHandler::makeContent( $newText, $article->getTitle() );
+ $editInfo = $article->prepareContentForEdit( $content );
+
+ if ( $var === 'new_pst' ) {
+ $result = $editInfo->pstContent->serialize( $editInfo->format );
+ } else {
+ $result = $editInfo->output->getText();
+ }
+ break;
+ case 'all_links':
+ $article = self::$mPage;
+ $content = ContentHandler::makeContent( $newText, $article->getTitle() );
+ $editInfo = $article->prepareContentForEdit( $content );
+ $result = array_keys( $editInfo->output->getExternalLinks() );
+ break;
+ case 'old_links':
+ $article = self::$mPage;
+ $popts->setTidy( true );
+ $edit = $wgParser->parse( $oldText, $article->getTitle(), $popts );
+ $result = array_keys( $edit->getExternalLinks() );
+ break;
+ case 'added_links':
+ case 'removed_links':
+ $oldLinks = self::$mVariables->getVar( 'old_links' )->toString();
+ $newLinks = self::$mVariables->getVar( 'all_links' )->toString();
+ $oldLinks = explode( "\n", $oldLinks );
+ $newLinks = explode( "\n", $newLinks );
+
+ if ( $var === 'added_links' ) {
+ $result = array_diff( $newLinks, $oldLinks );
+ } else {
+ $result = array_diff( $oldLinks, $newLinks );
+ }
+ break;
+ default:
+ $success = false;
+ $result = null;
+ }
+ $computedVariables[$var] = [ $result, $success ];
+ self::$mVariables->setVar( $var, $result );
+ }
+ return $computedVariables;
+ }
+
+ /**
+ * Check that the generated variables for edits are correct
+ *
+ * @param string $oldText The old wikitext of the page
+ * @param string $newText The new wikitext of the page
+ * @covers AbuseFilter::getEditVars
+ * @dataProvider provideEditVars
+ */
+ public function testGetEditVars( $oldText, $newText ) {
+ global $wgLang;
+ self::$mTitle = Title::makeTitle( 0, 'AbuseFilter test' );
+ self::$mPage = WikiPage::factory( self::$mTitle );
+
+ self::$mPage->doEditContent(
+ new WikitextContent( $oldText ),
+ 'Creating the test page',
+ EDIT_NEW,
+ false,
+ self::$mUser
+ );
+ self::$mPage->doEditContent(
+ new WikitextContent( $newText ),
+ 'Testing page for AbuseFilter',
+ EDIT_UPDATE,
+ false,
+ self::$mUser
+ );
+
+ $computeResult = self::computeExpectedEditVariable( $oldText, $newText );
+
+ $computedVariables = [];
+ foreach ( $computeResult as $varName => $computed ) {
+ if ( !$computed[1] ) {
+ $this->fail( "Given unknown edit variable $varName." );
+ }
+ $computedVariables[$varName] = $computed[0];
+ }
+
+ self::$mVariables->addHolders( AbuseFilter::getEditVars( self::$mTitle, self::$mPage ) );
+
+ $actualVariables = [];
+ foreach ( self::$mVariables->mVars as $varName => $_ ) {
+ $actualVariables[$varName] = self::$mVariables->getVar( $varName )->toNative();
+ }
+
+ $differences = [];
+ foreach ( $computedVariables as $var => $computed ) {
+ if ( !isset( $actualVariables[$var] ) ) {
+ $this->fail( "AbuseFilter::getEditVars didn't set the $var variable." );
+ } elseif ( $computed !== $actualVariables[$var] ) {
+ $differences[] = $var;
+ }
+ }
+
+ $this->assertCount(
+ 0,
+ $differences,
+ 'The following AbuseFilter variables are computed wrongly: ' . $wgLang->commaList( $differences )
+ );
+ }
+
+ /**
+ * Data provider for testGetEditVars
+ * @return array
+ */
+ public function provideEditVars() {
+ return [
+ [
+ '[https://www.mediawiki.it/wiki/Extension:AbuseFilter AbuseFilter] test page',
+ 'Adding something to compute edit variables. Here are some diacritics to make sure ' .
+ "the test behaves well with unicode: Là giù cascherò io altresì.\n名探偵コナン.\n" .
+ "[[Help:Pre Save Transform|]] should make the difference as well.\n" .
+ 'Instead, [https://www.mediawiki.it this] is an external link.'
+ ],
+ [
+ 'Adding something to compute edit variables. Here are some diacritics to make sure ' .
+ "the test behaves well with unicode: Là giù cascherò io altresì.\n名探偵コナン.\n" .
+ "[[Help:Pre Save Transform|]] should make the difference as well.\n" .
+ 'Instead, [https://www.mediawiki.it this] is an external link.',
+ '[https://www.mediawiki.it/wiki/Extension:AbuseFilter AbuseFilter] test page'
+ ],
+ [
+ "A '''foo''' is not a ''bar''.",
+ "Actually, according to [http://en.wikipedia.org ''Wikipedia''], a '''''foo''''' " .
+ 'is <small>more or less</small> the same as a <b>bar</b>, except that a foo is ' .
+ 'usually provided together with a [[cellar door|]] to make it work<ref>Yes, really</ref>.'
+ ],
+ [
+ 'This edit will be pretty smll',
+ 'This edit will be pretty small'
+ ]
+ ];
+ }
+}
diff --git a/AbuseFilter/tests/phpunit/AbuseFilterTokenizerTest.php b/AbuseFilter/tests/phpunit/AbuseFilterTokenizerTest.php
new file mode 100644
index 00000000..f573126f
--- /dev/null
+++ b/AbuseFilter/tests/phpunit/AbuseFilterTokenizerTest.php
@@ -0,0 +1,146 @@
+<?php
+/**
+ * Tests for the AFPData 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
+ *
+ * @license GPL-2.0-or-later
+ */
+
+/**
+ * @group Test
+ * @group AbuseFilter
+ *
+ * @covers AbuseFilterTokenizer
+ * @covers AFPToken
+ * @covers AbuseFilterParser
+ * @covers AFPUserVisibleException
+ * @covers AFPException
+ */
+class AbuseFilterTokenizerTest extends MediaWikiTestCase {
+ /**
+ * @return AbuseFilterParser
+ */
+ public static function getParser() {
+ static $parser = null;
+ if ( !$parser ) {
+ $parser = new AbuseFilterParser();
+ } else {
+ $parser->resetState();
+ }
+ return $parser;
+ }
+
+ /**
+ * Base method for testing exceptions
+ *
+ * @param string $excep Identifier of the exception (e.g. 'unexpectedtoken')
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ */
+ private function exceptionTest( $excep, $expr, $caller ) {
+ $parser = self::getParser();
+ try {
+ $parser->parse( $expr );
+ } catch ( AFPUserVisibleException $e ) {
+ $this->assertEquals(
+ $excep,
+ $e->mExceptionID,
+ "Exception $excep not thrown in AbuseFilterTokenizer::$caller"
+ );
+ return;
+ }
+
+ $this->fail( "Exception $excep not thrown in AbuseFilterTokenizer::$caller" );
+ }
+
+ /**
+ * Test the 'unclosedcomment' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AbuseFilterTokenizer::nextToken
+ * @dataProvider unclosedComment
+ */
+ public function testUnclosedCommentException( $expr, $caller ) {
+ $this->exceptionTest( 'unclosedcomment', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testUnclosedCommentException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function unclosedComment() {
+ return [
+ [ ' /**** / * /', 'nextToken' ],
+ ];
+ }
+
+ /**
+ * Test the 'unrecognisedtoken' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AbuseFilterTokenizer::nextToken
+ * @dataProvider unrecognisedToken
+ */
+ public function testUnrecognisedTokenException( $expr, $caller ) {
+ $this->exceptionTest( 'unrecognisedtoken', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testUnrecognisedTokenException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function unrecognisedToken() {
+ return [
+ [ '#', 'nextToken' ],
+ ];
+ }
+
+ /**
+ * Test the 'unclosedstring' exception
+ *
+ * @param string $expr The expression to test
+ * @param string $caller The function where the exception is thrown
+ * @covers AbuseFilterTokenizer::readStringLiteral
+ * @dataProvider unclosedString
+ */
+ public function testUnclosedStringException( $expr, $caller ) {
+ $this->exceptionTest( 'unclosedstring', $expr, $caller );
+ }
+
+ /**
+ * Data provider for testUnclosedStringException
+ * The second parameter is the function where the exception is raised.
+ * One expression for each throw.
+ *
+ * @return array
+ */
+ public function unclosedString() {
+ return [
+ [ '"', 'readStringLiteral' ],
+ ];
+ }
+}
diff --git a/AbuseFilter/tests/phpunit/parserTest.php b/AbuseFilter/tests/phpunit/parserTest.php
deleted file mode 100644
index b253e858..00000000
--- a/AbuseFilter/tests/phpunit/parserTest.php
+++ /dev/null
@@ -1,145 +0,0 @@
-<?php
-/**
- * Tests for the AbuseFilter parser
- *
- * 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
- *
- * @group Test
- * @group AbuseFilter
- *
- * @licence GNU GPL v2+
- * @author Marius Hoch < hoo@online.de >
- */
-class AbuseFilterParserTest extends MediaWikiTestCase {
- /**
- * @return AbuseFilterParser
- */
- static function getParser() {
- static $parser = null;
- if ( !$parser ) {
- $parser = new AbuseFilterParser();
- }
- return $parser;
- }
-
- /**
- * @return [AbuseFilterParser]
- */
- static function getParsers() {
- static $parsers = null;
- if ( !$parsers ) {
- $parsers = [
- new AbuseFilterParser(),
- new AbuseFilterCachingParser()
- ];
- }
- return $parsers;
- }
-
- /**
- * @dataProvider readTests
- */
- public function testParser( $testName, $rule, $expected ) {
- if ( !class_exists( 'AntiSpoof' ) && preg_match( '/(cc)?norm\(/i', $rule ) ) {
- // The norm and ccnorm parser functions aren't working correctly without AntiSpoof
- $this->markTestSkipped( 'Parser test ' . $testName . ' requires the AntiSpoof extension' );
- }
-
- foreach ( self::getParsers() as $parser ) {
- $actual = $parser->parse( $rule );
- $this->assertEquals( $expected, $actual, 'Running parser test ' . $testName );
- }
- }
-
- /**
- * @return array
- */
- public function readTests() {
- $tests = [];
- $testPath = __DIR__ . "/../parserTests";
- $testFiles = glob( $testPath . "/*.t" );
-
- foreach ( $testFiles as $testFile ) {
- $testName = substr( $testFile, 0, -2 );
-
- $resultFile = $testName . '.r';
- $rule = trim( file_get_contents( $testFile ) );
- $result = trim( file_get_contents( $resultFile ) ) == 'MATCH';
-
- $tests[] = [
- basename( $testName ),
- $rule,
- $result
- ];
- }
-
- return $tests;
- }
-
- /**
- * Ensure that AbuseFilterTokenizer::OPERATOR_RE matches the contents
- * and order of AbuseFilterTokenizer::$operators.
- */
- public function testOperatorRe() {
- $operatorRe = '/(' . implode( '|', array_map( function ( $op ) {
- return preg_quote( $op, '/' );
- }, AbuseFilterTokenizer::$operators ) ) . ')/A';
- $this->assertEquals( $operatorRe, AbuseFilterTokenizer::OPERATOR_RE );
- }
-
- /**
- * Ensure that AbuseFilterTokenizer::RADIX_RE matches the contents
- * and order of AbuseFilterTokenizer::$bases.
- */
- public function testRadixRe() {
- $baseClass = implode( '', array_keys( AbuseFilterTokenizer::$bases ) );
- $radixRe = "/([0-9A-Fa-f]+(?:\.\d*)?|\.\d+)([$baseClass])?/Au";
- $this->assertEquals( $radixRe, AbuseFilterTokenizer::RADIX_RE );
- }
-
- /**
- * Ensure the number of conditions counted for given expressions is right.
- *
- * @dataProvider condCountCases
- */
- public function testCondCount( $rule, $expected ) {
- $parser = self::getParser();
- // Set some variables for convenience writing test cases
- $parser->setVars( array_combine( range( 'a', 'f' ), range( 'a', 'f' ) ) );
- $countBefore = AbuseFilter::$condCount;
- $parser->parse( $rule );
- $countAfter = AbuseFilter::$condCount;
- $actual = $countAfter - $countBefore;
- $this->assertEquals( $expected, $actual, 'Condition count for ' . $rule );
- }
-
- /**
- * @return array
- */
- public function condCountCases() {
- return [
- [ '(((a == b)))', 1 ],
- [ 'contains_any(a, b, c)', 1 ],
- [ 'a == b == c', 2 ],
- [ 'a in b + c in d + e in f', 3 ],
- [ 'true', 0 ],
- [ 'a == a | c == d', 1 ],
- [ 'a == b & c == d', 1 ],
- ];
- }
-}
diff --git a/AbuseFilter/version b/AbuseFilter/version
index f4ee6f0d..8e3b7f7f 100644
--- a/AbuseFilter/version
+++ b/AbuseFilter/version
@@ -1,4 +1,4 @@
-AbuseFilter: REL1_30
-2018-10-23T15:00:45
+AbuseFilter: REL1_32
+2019-03-17T10:00:20
-1d26a0b
+01df828