summaryrefslogtreecommitdiff
path: root/www
diff options
context:
space:
mode:
authorYaco <franco@reevo.org>2019-08-03 16:50:14 -0300
committerYaco <franco@reevo.org>2019-08-03 16:50:14 -0300
commite1819c81fb9a1df4e58429eac87c77c70eb78197 (patch)
tree2211e26faf4703f4a4bbcdb1277c6f9f6b551464 /www
parent85e095bdc9a89081cc2574fbaa2164d171879039 (diff)
actualiza AbuseFilter
Diffstat (limited to 'www')
-rw-r--r--www/wiki/extensions/AbuseFilter/.eslintrc.json10
-rw-r--r--www/wiki/extensions/AbuseFilter/.jshintignore1
-rw-r--r--www/wiki/extensions/AbuseFilter/.jshintrc31
-rw-r--r--www/wiki/extensions/AbuseFilter/.phpcs.xml15
-rw-r--r--www/wiki/extensions/AbuseFilter/.stylelintrc.json2
-rw-r--r--www/wiki/extensions/AbuseFilter/AbuseFilter.php124
-rw-r--r--www/wiki/extensions/AbuseFilter/Gruntfile.js19
-rw-r--r--www/wiki/extensions/AbuseFilter/abusefilter.tables.pg.sql7
-rw-r--r--www/wiki/extensions/AbuseFilter/composer.json21
-rw-r--r--www/wiki/extensions/AbuseFilter/extension.json260
-rw-r--r--www/wiki/extensions/AbuseFilter/gitinfo.json2
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/af.json23
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/aln.json1
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ar.json174
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/arz.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ast.json62
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/az.json38
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/azb.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ba.json1
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/bcl.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/be-tarask.json16
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/be.json4
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/bg.json68
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/bn.json14
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/br.json2
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/bs.json9
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ca.json8
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ce.json6
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ckb.json2
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/cs.json83
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/csb.json8
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/da.json24
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/de.json92
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/diq.json4
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/dsb.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/el.json24
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/en.json84
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/eo.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/es-formal.json11
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/es.json112
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/et.json88
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/eu.json39
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/fa.json64
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/fi.json49
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/fo.json1
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/fr.json96
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/frp.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/frr.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/gl.json17
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/gom-deva.json9
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/gsw.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/he.json89
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/hi.json25
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/hr.json15
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/hrx.json2
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/hsb.json5
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/hu.json29
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ia.json11
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/id.json9
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ilo.json2
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/io.json46
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/is.json30
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/it.json76
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ja.json48
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/jv.json1
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ka.json2
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/kg.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/kk-cyrl.json2
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ko.json81
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ksh.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/lad.json1
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/lb.json33
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/li.json5
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/lt.json21
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/lv.json20
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/mai.json1
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/map-bms.json2
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/mg.json9
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/min.json1
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/mk.json89
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ml.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/mr.json20
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ms.json2
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/mt.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/mwl.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/nb.json14
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/nds.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/nl.json34
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/nn.json34
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/oc.json24
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/or.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/pam.json4
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/pfl.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/pl.json48
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/pms.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/pt-br.json96
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/pt.json97
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/qqq.json82
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ro.json19
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/roa-tara.json4
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ru.json129
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/rue.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/sah.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/scn.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/sd.json29
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/sh.json2
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/si.json5
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/sk.json12
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/skr-arab.json45
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/sl.json14
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/sq.json1
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/sr-ec.json61
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/sr-el.json1
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/stq.json2
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/sv.json124
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/sw.json1
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ta.json1
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/te.json2
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/th.json2
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/tk.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/tl.json6
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/tr.json8
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/udm.json3
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ug-arab.json4
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/uk.json7
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/ur.json14
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/vec.json9
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/vi.json1
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/wuu.json4
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/yi.json6
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/yue.json21
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/zh-hans.json97
-rw-r--r--www/wiki/extensions/AbuseFilter/i18n/zh-hant.json157
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/AFComputedVariable.php35
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/AbuseFilter.php (renamed from www/wiki/extensions/AbuseFilter/includes/AbuseFilter.class.php)551
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/AbuseFilterChangesList.php118
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/AbuseFilterHooks.php (renamed from www/wiki/extensions/AbuseFilter/includes/AbuseFilter.hooks.php)135
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/AbuseFilterModifyLogFormatter.php9
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php1
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/AbuseFilterVariableHolder.php20
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/AbuseLogHitFormatter.php1
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/TableDiffFormatterFullContext.php36
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterView.php103
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewDiff.php35
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewEdit.php228
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewExamine.php133
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewHistory.php220
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewList.php501
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewRevert.php144
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewTestBatch.php143
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewTools.php3
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php12
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckSyntax.php1
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterEvalExpression.php1
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterUnblockAutopromote.php1
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/api/ApiQueryAbuseFilters.php1
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/api/ApiQueryAbuseLog.php25
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/pagers/AbuseFilterExaminePager.php72
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/pagers/AbuseFilterHistoryPager.php204
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/pagers/AbuseFilterPager.php260
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/pagers/AbuseLogPager.php79
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/pagers/GlobalAbuseFilterPager.php70
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/parser/AFPData.php159
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/parser/AFPUserVisibleException.php2
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/parser/AbuseFilterCachingParser.php1
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php326
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/parser/AbuseFilterTokenizer.php4
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseFilter.php6
-rw-r--r--www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseLog.php579
-rw-r--r--www/wiki/extensions/AbuseFilter/maintenance/addMissingLoggingEntries.php15
-rw-r--r--www/wiki/extensions/AbuseFilter/maintenance/purgeOldLogIPData.php6
-rw-r--r--www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.css27
-rw-r--r--www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.edit.js243
-rw-r--r--www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.examine.js65
-rw-r--r--www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.tools.js80
-rw-r--r--www/wiki/extensions/AbuseFilter/modules/mode-abusefilter.js117
-rw-r--r--www/wiki/extensions/AbuseFilter/package.json15
-rw-r--r--www/wiki/extensions/AbuseFilter/phpcs.xml26
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/arith.t28
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/cast.t2
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/ccnorm-contains-all.r (renamed from www/wiki/extensions/AbuseFilter/tests/parserTests/list-inequality.r)0
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/ccnorm-contains-all.t1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/ccnorm-contains-any.r (renamed from www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit.r)0
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/ccnorm-contains-any.t1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/comment.t5
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/contains-all.r (renamed from www/wiki/extensions/AbuseFilter/tests/parserTests/whitespace.r)0
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/contains-all.t1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/contains-any.r1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/contains-any.t1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/contains.r1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/contains.t1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/expn.t2
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/float.t2
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/get-matches.r1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/get-matches.t4
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/in.t2
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/list-comparisons.r1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/list-comparisons.t11
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/list-inequality.t3
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-arithmetic.r1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-arithmetic.t8
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-bools.r1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-bools.t13
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-comparisons.r1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-comparisons.t20
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-functions.r1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-functions.t22
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-keywords.r1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-keywords.t9
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-lists.r1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-lists.t10
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/ord.t9
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit-and.r1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit-and.t2
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit-or.r1
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit-or.t (renamed from www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit.t)0
-rw-r--r--www/wiki/extensions/AbuseFilter/tests/phpunit/AbuseFilterParserTest.php (renamed from www/wiki/extensions/AbuseFilter/tests/phpunit/parserTest.php)93
-rw-r--r--www/wiki/extensions/AbuseFilter/version6
218 files changed, 6123 insertions, 2647 deletions
diff --git a/www/wiki/extensions/AbuseFilter/.eslintrc.json b/www/wiki/extensions/AbuseFilter/.eslintrc.json
new file mode 100644
index 00000000..48432407
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/.eslintrc.json
@@ -0,0 +1,10 @@
+{
+ "extends": "wikimedia",
+ "env": {
+ "browser": true,
+ "jquery": true
+ },
+ "globals": {
+ "mediaWiki": false
+ }
+}
diff --git a/www/wiki/extensions/AbuseFilter/.jshintignore b/www/wiki/extensions/AbuseFilter/.jshintignore
deleted file mode 100644
index 3c3629e6..00000000
--- a/www/wiki/extensions/AbuseFilter/.jshintignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules
diff --git a/www/wiki/extensions/AbuseFilter/.jshintrc b/www/wiki/extensions/AbuseFilter/.jshintrc
deleted file mode 100644
index 63b4f381..00000000
--- a/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/.phpcs.xml b/www/wiki/extensions/AbuseFilter/.phpcs.xml
new file mode 100644
index 00000000..40cca63c
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/.phpcs.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<ruleset>
+ <rule ref="./vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
+ <exclude name="MediaWiki.Commenting.FunctionComment.MissingDocumentationPublic" />
+ <exclude name="MediaWiki.VariableAnalysis.ForbiddenGlobalVariables.ForbiddenGlobal$wgTitle" />
+ <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment" />
+ <exclude name="Squiz.Scope.MethodScope.Missing" />
+ </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"/>
+</ruleset>
diff --git a/www/wiki/extensions/AbuseFilter/.stylelintrc.json b/www/wiki/extensions/AbuseFilter/.stylelintrc.json
index d691e9d9..b681cd2e 100644
--- a/www/wiki/extensions/AbuseFilter/.stylelintrc.json
+++ b/www/wiki/extensions/AbuseFilter/.stylelintrc.json
@@ -1,6 +1,6 @@
{
"extends": "stylelint-config-wikimedia",
"rules": {
- "selector-no-id": null
+ "selector-max-id": null
}
}
diff --git a/www/wiki/extensions/AbuseFilter/AbuseFilter.php b/www/wiki/extensions/AbuseFilter/AbuseFilter.php
deleted file mode 100644
index 7f13eaf1..00000000
--- a/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/Gruntfile.js b/www/wiki/extensions/AbuseFilter/Gruntfile.js
index 69ec8e0f..39559a79 100644
--- a/www/wiki/extensions/AbuseFilter/Gruntfile.js
+++ b/www/wiki/extensions/AbuseFilter/Gruntfile.js
@@ -1,17 +1,14 @@
-/*jshint node:true */
+/* eslint-env node */
module.exports = function ( grunt ) {
- grunt.loadNpmTasks( 'grunt-contrib-jshint' );
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/**'
]
@@ -19,10 +16,11 @@ module.exports = function ( grunt ) {
banana: {
all: 'i18n/'
},
- jsonlint: {
+ eslint: {
all: [
- '**/*.json',
+ '**/*.js',
'!node_modules/**',
+ '!modules/mode-abusefilter.js',
'!vendor/**'
]
},
@@ -30,11 +28,12 @@ module.exports = function ( grunt ) {
all: [
'**/*.css',
'!node_modules/**',
+ '!modules/mode-abusefilter.js',
'!vendor/**'
]
}
} );
- grunt.registerTask( 'test', [ 'jshint', 'jsonlint', 'banana', 'stylelint' ] );
+ grunt.registerTask( 'test', [ 'jsonlint', 'banana', 'eslint', 'stylelint' ] );
grunt.registerTask( 'default', 'test' );
};
diff --git a/www/wiki/extensions/AbuseFilter/abusefilter.tables.pg.sql b/www/wiki/extensions/AbuseFilter/abusefilter.tables.pg.sql
index 3336c30c..45d68233 100644
--- a/www/wiki/extensions/AbuseFilter/abusefilter.tables.pg.sql
+++ b/www/wiki/extensions/AbuseFilter/abusefilter.tables.pg.sql
@@ -21,9 +21,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 (
@@ -72,7 +74,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/www/wiki/extensions/AbuseFilter/composer.json b/www/wiki/extensions/AbuseFilter/composer.json
index 24494978..95b25ade 100644
--- a/www/wiki/extensions/AbuseFilter/composer.json
+++ b/www/wiki/extensions/AbuseFilter/composer.json
@@ -3,21 +3,26 @@
"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.0"
},
"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": "18.0.0",
+ "jakub-onderka/php-console-highlighter": "0.3.2",
+ "mediawiki/minus-x": "0.3.1"
},
"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 ."
]
}
}
diff --git a/www/wiki/extensions/AbuseFilter/extension.json b/www/wiki/extensions/AbuseFilter/extension.json
index a043b6c5..5ae55c7c 100644
--- a/www/wiki/extensions/AbuseFilter/extension.json
+++ b/www/wiki/extensions/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,15 +28,41 @@
"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"
@@ -46,7 +73,22 @@
},
"LogActionsHandlers": {
"abusefilter/hit": "AbuseLogHitFormatter",
- "abusefilter/modify": "AbuseFilterModifyLogFormatter"
+ "abusefilter/modify": "AbuseFilterModifyLogFormatter",
+ "abusefilter/create": "AbuseFilterModifyLogFormatter",
+ "abusefilterprivatedetails/access": "LogFormatter"
+ },
+ "ActionFilteredLogs": {
+ "abusefilter": {
+ "modify": [
+ "modify"
+ ],
+ "create": [
+ "create"
+ ]
+ }
+ },
+ "LogRestrictions": {
+ "abusefilterprivatedetails": "abusefilter-private-log"
},
"APIModules": {
"abusefilterchecksyntax": "ApiAbuseFilterCheckSyntax",
@@ -67,32 +109,32 @@
"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",
"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",
@@ -112,7 +154,6 @@
},
"ResourceModules": {
"ext.abuseFilter": {
- "position": "top",
"styles": "ext.abuseFilter.css"
},
"ext.abuseFilter.edit": {
@@ -162,6 +203,10 @@
"jquery.spinner",
"mediawiki.api"
]
+ },
+ "ext.abuseFilter.ace": {
+ "scripts": "mode-abusefilter.js",
+ "dependencies": "ext.codeEditor.ace"
}
},
"ResourceFileModulePaths": {
@@ -169,13 +214,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",
@@ -194,63 +232,147 @@
"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"
- },
- "AbuseFilterConditionLimit": 1000,
- "AbuseFilterParserClass": "AbuseFilterParser",
+ "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"
+ },
"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"
- },
- "AbuseFilterNotifications": false,
- "AbuseFilterNotificationsPrivate": false,
- "AbuseFilterCentralDB": null,
- "AbuseFilterIsCentral": false,
- "AbuseFilterDisallowGlobalLocalBlocks": false,
- "AbuseFilterBlockDuration": "indefinite",
- "AbuseFilterAnonBlockDuration": null,
- "AbuseFilterCustomActionsHandlers": [],
- "AbuseFilterValidGroups": [
- "default"
- ],
+ "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."
+ },
"AbuseFilterDefaultWarningMessage": {
- "default": "abusefilter-warning",
- "_merge_strategy": "array_plus"
+ "value": {
+ "default": "abusefilter-warning"
+ },
+ "_merge_strategy": "array_plus",
+ "description": "Default warning messages, per filter group"
+ },
+ "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."
},
- "AbuseFilterLogIPMaxAge": 7776000,
- "AbuseFilterProfile": false,
- "AbuseFilterRuntimeProfile": false
+ "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 users are allowed to access private information from a filter log entry."
+ },
+ "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/www/wiki/extensions/AbuseFilter/gitinfo.json b/www/wiki/extensions/AbuseFilter/gitinfo.json
index 0db3da4b..3cd629bd 100644
--- a/www/wiki/extensions/AbuseFilter/gitinfo.json
+++ b/www/wiki/extensions/AbuseFilter/gitinfo.json
@@ -1 +1 @@
-{"headSHA1": "6f31b953456fe44118342bf1f15dcc8f82ebadf3\n", "head": "6f31b953456fe44118342bf1f15dcc8f82ebadf3\n", "remoteURL": "https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter", "branch": "6f31b953456fe44118342bf1f15dcc8f82ebadf3\n", "headCommitDate": "1543881237"} \ No newline at end of file
+{"branch": "adc078946322291d65d1bab2850b93c5dee5548a\n", "headCommitDate": "1551033298", "remoteURL": "https://gerrit.wikimedia.org/r/mediawiki/extensions/AbuseFilter", "head": "adc078946322291d65d1bab2850b93c5dee5548a\n", "headSHA1": "adc078946322291d65d1bab2850b93c5dee5548a\n"} \ No newline at end of file
diff --git a/www/wiki/extensions/AbuseFilter/i18n/af.json b/www/wiki/extensions/AbuseFilter/i18n/af.json
index a504ac5d..7d1af8d5 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/af.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/af.json
@@ -2,16 +2,17 @@
"@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",
@@ -78,7 +79,7 @@
"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:",
@@ -113,7 +114,6 @@
"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",
@@ -213,14 +213,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 +242,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 +251,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 +270,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 +282,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/www/wiki/extensions/AbuseFilter/i18n/aln.json b/www/wiki/extensions/AbuseFilter/i18n/aln.json
index 648729ef..5e4b136d 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/aln.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/aln.json
@@ -67,7 +67,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/www/wiki/extensions/AbuseFilter/i18n/ar.json b/www/wiki/extensions/AbuseFilter/i18n/ar.json
index 59d76c42..ffc213b4 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ar.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ar.json
@@ -33,7 +33,7 @@
"abuselog": "سجل الإساءة",
"abusefilter-intro": "مرحبا بك إلى واجهة التحكم بمرشح الإساءة.\nمرشح الإساءة هو ميكانيكية برمجية آلية لتطبيق ضوابط تلقائية لكل الأفعال.\nهذه الواجهة تعرض قائمة بالمرشحات المعرفة، وتسمح بتعديلها.",
"abusefilter-mustbeeditor": "لأسباب أمنية، فالمستخدمون ذوو صلاحية تعديل مرشّحات الإساءة وحدهم يمكنهم استخدام هذه الواجهة.",
- "abusefilter-warning": "'''تحذير''': حُسِب هذا الفعل ضارًّا.\nالتعديلات غير البناءة سريعا ما تُسترجع،\nو مواصلة عمل تعديلات غير بنّاءة أو الإصرار عليها سيؤدي إلى منع حسابك أو حاسوبك.\nإذا كنت ترى أن هذا التعديل بنّاء، فأودعه مجددا لتأكيده.\nالوصف المختصر لقاعدة الإساءة التي طابقها فعلك: $1",
+ "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,20 @@
"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 فعل مرشح إساءة، مؤديا الفعل \"$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,8 +95,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": "عنوان الأيبي المصدر",
+ "abusefilter-log-details-checkuser": "تدقيق المستخدم",
"abusefilter-log-noactions": "لا شيء",
"abusefilter-log-details-diff": "التغييرات التي أجريت في التعديل",
"abusefilter-log-linkoncontribs": "سجل الإساءة",
@@ -91,19 +105,28 @@
"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-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)",
+ "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": "تعديل المرشح",
+ "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": "العواقب",
@@ -131,8 +154,16 @@
"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-hidedisabled": "أخفِ المرشحات المعطلة",
+ "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": "مختبر التعبير",
@@ -149,20 +180,23 @@
"abusefilter-edit-subtitle-new": "أنشئ مُرشِّحًا",
"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-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,8 +207,9 @@
"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": "فترة من الزمن:",
@@ -187,11 +222,16 @@
"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-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-badsyntax": "هناك خطأ صياغة في المرشح الذي حددته. الخرج من المحلل كان: <pre>$1</pre>",
+ "abusefilter-edit-missingfields": "الحقول التالية مطلوبة ويجب ملؤها: $1",
"abusefilter-edit-restricted": "أنت لا يمكنك تعديل هذا المرشح، لأنه يحتوي على واحد أو أكثر من الأفعال المحظورة.\nمن فضلك سل مستخدما ذا سماح إضافة الأفعال المحظورة ليفعل التغيير لك.",
"abusefilter-edit-viewhistory": "عرض تاريخ هذا المرشح",
"abusefilter-edit-history": "التاريخ:",
@@ -203,7 +243,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 +256,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,15 +283,19 @@
"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-substr": "سلسلة فرعية (substr)",
"abusefilter-edit-builder-funcs-strpos": "موضع السلسلة الفرعية في السلسلة (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "استبدال السلسلة الفرعية بسلسلة (str_replace)",
@@ -258,12 +304,15 @@
"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": "هوية الصفحة",
@@ -286,25 +335,46 @@
"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-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-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-edit-block-options": "خيارات المنع:",
"abusefilter-filter-log": "تغييرات المرشح الأخيرة",
"abusefilter-history": "غير التاريخ لمرشح الإساءة #$1",
"abusefilter-history-foruser": "تغييرات من قبل $1",
@@ -323,6 +393,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": "المرشح الذي طلبته مخفي، وأنت لا يمكنك رؤية تاريخه.",
@@ -341,6 +412,7 @@
"abusefilter-exception-overridebuiltin": "تجاوز غير قانوني لمتغير موجود مسبقا \"$2\" عند الحرف $1.",
"abusefilter-exception-outofbounds": "طلب مدخلة قائمة غير موجودة $2 (حجم القائمة = $3) عند الحرف $1.",
"abusefilter-exception-notlist": "طلب مدخلة مصفوفة لغير مصفوفة عند الحرف $1.",
+ "abusefilter-exception-unclosedcomment": "تعليق غير مغلق في الحرف $1.",
"abusefilter-action-tag": "وسم",
"abusefilter-action-throttle": "حد",
"abusefilter-action-warn": "تحذير",
@@ -351,19 +423,20 @@
"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": "اختبار",
@@ -373,7 +446,7 @@
"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-changeslist-examine": "افحص",
"abusefilter-examine": "افحص التغييرات الفردية",
@@ -401,6 +474,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 +489,62 @@
"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": "غير متاح",
+ "tag-abusefilter-condition-limit": "تم التوصل إلى حد الشرط",
+ "tag-abusefilter-condition-limit-description": "التعديلات أو الأحداث الأخرى التي لا يمكن التحقق منها من قبل جميع [[Special:AbuseFilter|مرشحات الإساءة]] النشطة ([[mw:Extension:AbuseFilter/Conditions|مساعدة]]).",
+ "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-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/www/wiki/extensions/AbuseFilter/i18n/arz.json b/www/wiki/extensions/AbuseFilter/i18n/arz.json
index 41622aa5..059b6703 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/arz.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/arz.json
@@ -107,7 +107,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 +124,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": "امنع المستخدم و/أو عنوان الأيبى من التحرير",
@@ -344,7 +342,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/www/wiki/extensions/AbuseFilter/i18n/ast.json b/www/wiki/extensions/AbuseFilter/i18n/ast.json
index adf429fd..30607f38 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ast.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ast.json
@@ -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,16 @@
"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-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,8 +73,9 @@
"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",
@@ -74,6 +83,7 @@
"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-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.",
@@ -85,9 +95,15 @@
"abusefilter-logentry-suppress": "anubre \"[[$1]]\"",
"abusefilter-logentry-unsuppress": "amuesa \"[[$1]]\"",
"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",
+ "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",
@@ -118,6 +134,13 @@
"abusefilter-list-options-scope-all": "Regles llocales y globales",
"abusefilter-list-options-disabled": "Filtros desactivaos:",
"abusefilter-list-options-hidedisabled": "Despintar filtros desactivaos",
+ "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",
@@ -140,6 +163,7 @@
"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-group": "Grupu de filtros:",
"abusefilter-edit-flags": "Marques:",
@@ -158,8 +182,9 @@
"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:",
@@ -172,6 +197,10 @@
"abusefilter-edit-warn-preview": "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-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": "usuarios anónimos",
+ "abusefilter-block-user": "usuarios rexistraos",
"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",
@@ -188,7 +217,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",
@@ -225,15 +254,19 @@
"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-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)",
@@ -242,6 +275,7 @@
"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",
@@ -299,6 +333,7 @@
"abusefilter-edit-builder-vars-file-width": "Anchor del ficheru en pixels",
"abusefilter-edit-builder-vars-file-height": "Altor del ficheru en pixels",
"abusefilter-edit-builder-vars-file-bits-per-channel": "Bits per canal de color del ficheru",
+ "abusefilter-edit-block-options": "Opciones de bloquéu:",
"abusefilter-filter-log": "Cambios de recién nos filtros",
"abusefilter-history": "Historial de cambios de la peñera d'abusos #$1",
"abusefilter-history-foruser": "Cambios de $1",
@@ -317,6 +352,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.",
@@ -350,8 +386,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",
@@ -394,7 +431,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,6 +448,17 @@
"abusefilter-import-submit": "Importar datos",
"abusefilter-group-default": "Predetermináu",
"abusefilter-http-error": "Hebo un error HTTP: $1.",
+ "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",
+ "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]]).",
"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.",
@@ -449,6 +498,7 @@
"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.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/az.json b/www/wiki/extensions/AbuseFilter/i18n/az.json
index cde20d00..2e48a8cf 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/az.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/az.json
@@ -47,14 +47,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ı",
@@ -78,7 +78,7 @@
"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 +93,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",
@@ -110,24 +110,36 @@
"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,7 +179,7 @@
"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-id": "Səhifənin identifikatoru",
"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-user-editcount": "İstifadəçinin redaktə sayı",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/azb.json b/www/wiki/extensions/AbuseFilter/i18n/azb.json
index 907fab3c..34ca4ef4 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/azb.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/azb.json
@@ -130,7 +130,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 +148,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": "ایستیفادچینی و / و یا ایپ اونوانینی دییشیک‌لیک ائتمه‌یه مانعه",
@@ -374,7 +372,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/www/wiki/extensions/AbuseFilter/i18n/ba.json b/www/wiki/extensions/AbuseFilter/i18n/ba.json
index 6a85093e..5bca4575 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ba.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ba.json
@@ -138,7 +138,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": "Һөҙгөс идентификаторы:",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/bcl.json b/www/wiki/extensions/AbuseFilter/i18n/bcl.json
index 328c0cad..05287cf8 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/bcl.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/bcl.json
@@ -127,7 +127,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 +145,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",
@@ -374,7 +372,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/www/wiki/extensions/AbuseFilter/i18n/be-tarask.json b/www/wiki/extensions/AbuseFilter/i18n/be-tarask.json
index cd8feeff..0f3f31ff 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/be-tarask.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/be-tarask.json
@@ -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": "Зьмены, зробленыя ў рэдагаваньні",
@@ -134,7 +134,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,7 +156,7 @@
"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": "Пэрыяд часу:",
@@ -186,7 +185,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 +198,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 +230,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)",
@@ -345,7 +344,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 +389,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/www/wiki/extensions/AbuseFilter/i18n/be.json b/www/wiki/extensions/AbuseFilter/i18n/be.json
index f625f8b2..a1b7827a 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/be.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/be.json
@@ -4,7 +4,8 @@
"LexArt",
"Тест",
"Mikalai Udodau",
- "Дзяніс Тутэйшы"
+ "Дзяніс Тутэйшы",
+ "Artsiom91"
]
},
"abusefilter": "Настройкі фільтра злоўжыванняў",
@@ -17,6 +18,7 @@
"abusefilter-log-hide-reason": "Прычына:",
"abusefilter-list-edit": "Правіць",
"abusefilter-new": "Стварыць новы фільтр",
+ "abusefilter-list-options-scope-local": "Толькі лакальныя правілы",
"abusefilter-list-options-submit": "Абнавіць",
"abusefilter-edit-status-label": "Статыстыка:",
"abusefilter-edit-new": "Новы фільтр",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/bg.json b/www/wiki/extensions/AbuseFilter/i18n/bg.json
index 85561104..71349c61 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/bg.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/bg.json
@@ -10,7 +10,8 @@
"පසිඳු කාවින්ද",
"StanProg",
"Vodnokon4e",
- "Matma Rex"
+ "Matma Rex",
+ "ShockD"
]
},
"abusefilter-desc": "Прилага автоматични евристики към редакциите.",
@@ -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)",
@@ -85,9 +96,12 @@
"abusefilter-log-hide-hidden": "Скриване на този запис от публичен преглед",
"abusefilter-log-hide-reason": "Причина:",
"abusefilter-log-hide-forbidden": "Нямате необходимите права да скривате записи от дневника на злоупотребите.",
- "abusefilter-logentry-suppress": "скриване на \"[[$1]]\"",
- "abusefilter-logentry-unsuppress": "показване на \"[[$1]]\"",
+ "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,7 +129,7 @@
"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": "Локални и глобални правила",
@@ -128,7 +142,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,10 +153,10 @@
"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-group": "Група на филтъра:",
"abusefilter-edit-flags": "Флагове:",
@@ -162,12 +176,12 @@
"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-groups": "Ограничаване по групи:\n:„(по една на ред, комбинирани със запетаи)“",
"abusefilter-edit-warn-message": "Използвано системно съобщение за предупреждение:",
"abusefilter-edit-warn-other": "Друго съобщение",
"abusefilter-edit-warn-other-label": "Наименование на друго системно съобщение:\n:''(без представката MediaWiki)''",
@@ -175,12 +189,12 @@
"abusefilter-edit-warn-preview": "Предварителен преглед на избраното съобщение",
"abusefilter-edit-warn-edit": "Създаване или редактиране на избраното съобщение",
"abusefilter-edit-tag-tag": "[[Special:Tags|Етикети]] за прилагане (по един на ред):",
- "abusefilter-edit-denied": "Не можете да видите детайлите на този филтър, защото са скрити от публичен достъп.",
+ "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 +205,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": "Потребителските предупредителни съобщения не се поддържат за глобалните филтри",
@@ -254,7 +268,7 @@
"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-summary": "Редактиране на резюме/причина",
"abusefilter-edit-builder-vars-article-id": "Номер на страница",
"abusefilter-edit-builder-vars-article-ns": "Именно пространство на страницата",
"abusefilter-edit-builder-vars-article-text": "Заглавие на страницата (без именно пространство)",
@@ -321,19 +335,19 @@
"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-action-tag": "Етикет",
@@ -350,14 +364,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 +381,17 @@
"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-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 +409,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": "Елемент",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/bn.json b/www/wiki/extensions/AbuseFilter/i18n/bn.json
index 314b3a07..2b464f75 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/bn.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/bn.json
@@ -51,8 +51,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": "আইপি ঠিকানা সংরক্ষন করা হচ্ছে",
+ "abusefilter-log-details-checkuser": "ব্যবহারকারী পরীক্ষণ",
"abusefilter-log-noactions": "কিছু নয়",
"abusefilter-log-details-diff": "সম্পাদনার সময় পরিবর্তিত হয়েছে",
"abusefilter-log-linkoncontribs": "অপব্যবহার লগ",
@@ -98,6 +99,7 @@
"abusefilter-list-options-scope-all": "স্থানীয় এবং বৈশ্বিক নিয়ম",
"abusefilter-list-options-disabled": "ফিল্টারগুলো নিষ্ক্রিয় করো",
"abusefilter-list-options-hidedisabled": "নিষ্ক্রিয় ফিল্টারগুলো লুকাও",
+ "abusefilter-list-options-searchoptions": "অনুসন্ধান মোড:",
"abusefilter-list-options-submit": "হালনাগাদ",
"abusefilter-tools-expr": "এক্সপ্রেশন পরীক্ষক",
"abusefilter-tools-reautoconfirm-user": "ব্যবহারকারী:",
@@ -109,7 +111,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": "এই ফিল্টারটি সক্রিয় করো",
@@ -140,7 +144,7 @@
"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": "মান এটির সমান (==)",
"abusefilter-edit-builder-op-comparison-notequal": "সমান নয় (!=)",
"abusefilter-edit-builder-op-comparison-lt": "থেকে কম (<)",
"abusefilter-edit-builder-op-comparison-gt": "থেকে বেশি (>)",
@@ -157,10 +161,12 @@
"abusefilter-edit-builder-misc-irlike": "সাদৃশ্যপূর্ণ রিজেক্স, কেস সেনসিটিভ (irlike)",
"abusefilter-edit-builder-group-funcs": "ফাংশন",
"abusefilter-edit-builder-funcs-length": "স্ট্রিংয়ের দৈর্ঘ্য (length)",
+ "abusefilter-edit-builder-funcs-ccnorm-contains-any": "একাধিক উপস্ট্রিংয়ের জন্য একটি স্ট্রিং স্বাভাবিক করুন ও অনুসন্ধান করুন (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-timestamp-expanded": "লগের সময় ও তারিখ",
"abusefilter-edit-builder-vars-action": "অ্যাকশন",
"abusefilter-edit-builder-vars-addedlines": "সম্পাদনায় লাইন যোগ করা হয়েছে",
"abusefilter-edit-builder-vars-delta": "সম্পাদনায় আকৃতি পরিবর্তন করা হয়েছে",
@@ -190,6 +196,7 @@
"abusefilter-edit-builder-vars-old-text": "সম্পাদনার পূর্বে, পুরোনো পাতার উইকিটেক্সট",
"abusefilter-edit-builder-vars-new-text": "সম্পাদনার পর, নতুন পাতার উইকিটেক্সট",
"abusefilter-edit-builder-vars-restrictions-edit": "পাতার সুরক্ষা পর্যায় সম্পাদনা",
+ "abusefilter-edit-block-options": "বাধাদানের বিকল্প:",
"abusefilter-filter-log": "সাম্প্রতিক ফিল্টার পরিবর্তন",
"abusefilter-history-foruser": "$1 কর্তৃক পরিবর্তন হয়েছে",
"abusefilter-history-hidden": "লুকায়িত",
@@ -237,5 +244,6 @@
"abusefilter-diff-backhistory": "ফিল্টার ইতিহাসে ফিরে যান",
"abusefilter-import-submit": "উপাত্ত আমদানী",
"abusefilter-group-default": "পূর্বনির্ধারিত",
- "abusefilter-http-error": "একটি HTTP ত্রুটি ঘটেছে: $1।"
+ "abusefilter-http-error": "একটি HTTP ত্রুটি ঘটেছে: $1।",
+ "abusefilter-log-ip-not-available": "উপলব্ধ নয়"
}
diff --git a/www/wiki/extensions/AbuseFilter/i18n/br.json b/www/wiki/extensions/AbuseFilter/i18n/br.json
index a2316ffe..c58d23d9 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/br.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/br.json
@@ -127,7 +127,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 :",
@@ -371,7 +370,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/www/wiki/extensions/AbuseFilter/i18n/bs.json b/www/wiki/extensions/AbuseFilter/i18n/bs.json
index 39d124e0..0a6b322d 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/bs.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/bs.json
@@ -84,7 +84,7 @@
"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",
@@ -134,7 +134,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:",
@@ -373,16 +372,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/www/wiki/extensions/AbuseFilter/i18n/ca.json b/www/wiki/extensions/AbuseFilter/i18n/ca.json
index 0cc938f1..326cf86c 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ca.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ca.json
@@ -96,6 +96,9 @@
"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.",
@@ -128,6 +131,7 @@
"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-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 +150,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 +162,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",
@@ -391,7 +396,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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/ce.json b/www/wiki/extensions/AbuseFilter/i18n/ce.json
index 59ab4ca0..4d1df95f 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ce.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ce.json
@@ -110,6 +110,7 @@
"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,7 +128,6 @@
"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 литтаран",
@@ -234,7 +234,7 @@
"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-article-views": "АгӀонашка хьовсийна",
"abusefilter-edit-builder-vars-movedfrom-id": "ЦӀе хуьйцуш йолу агӀонан ID",
"abusefilter-edit-builder-vars-movedfrom-ns": "ЦӀе хуьйцуш йолу агӀонан цӀерийн меттиг",
"abusefilter-edit-builder-vars-movedfrom-text": "ЦӀе хуьйцуш йолу агӀона цӀе",
@@ -345,7 +345,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": "ЮхагӀо литтаран истори йолче",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/ckb.json b/www/wiki/extensions/AbuseFilter/i18n/ckb.json
index 2071da93..acbf97ca 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ckb.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ckb.json
@@ -101,7 +101,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": "پێناسەی پاڵوێنە:",
@@ -229,7 +228,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/www/wiki/extensions/AbuseFilter/i18n/cs.json b/www/wiki/extensions/AbuseFilter/i18n/cs.json
index 06b652af..d4203061 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/cs.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/cs.json
@@ -13,7 +13,10 @@
"Urbanecm",
"Matma Rex",
"Martin Urbanec",
- "Dvorapa"
+ "Dvorapa",
+ "Danny B.",
+ "Ilimanaq29",
+ "Patriccck"
]
},
"abusefilter-desc": "Podrobuje editace automatickým heuristikám",
@@ -35,6 +38,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 +51,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 +63,16 @@
"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-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,8 +86,9 @@
"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í",
@@ -80,6 +96,7 @@
"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-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.",
@@ -87,13 +104,20 @@
"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]]“",
"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",
+ "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",
@@ -124,6 +148,13 @@
"abusefilter-list-options-scope-all": "Místní i globální pravidla",
"abusefilter-list-options-disabled": "Vypnuté filtry:",
"abusefilter-list-options-hidedisabled": "Skrýt vypnuté 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ů",
@@ -146,7 +177,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 +187,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,8 +198,9 @@
"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:",
@@ -178,11 +213,16 @@
"abusefilter-edit-warn-preview": "Zobrazit 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-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": "Anonymní uživatelé",
+ "abusefilter-block-user": "Registrovaní uživatelé",
"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-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 +234,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 +247,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 typs 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,15 +273,19 @@
"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-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)",
@@ -248,6 +294,7 @@
"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í",
@@ -305,6 +352,7 @@
"abusefilter-edit-builder-vars-file-width": "Šířka souboru v pixelech",
"abusefilter-edit-builder-vars-file-height": "Výška souboru v pixelech",
"abusefilter-edit-builder-vars-file-bits-per-channel": "Barevná hloubka souboru v bitech na barevný kanál",
+ "abusefilter-edit-block-options": "Nastavení zablokování:",
"abusefilter-filter-log": "Poslední změny filtrů",
"abusefilter-history": "Historie změn filtru zneužití #$1",
"abusefilter-history-foruser": "Změny provedené uživatelem $1",
@@ -323,6 +371,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.",
@@ -356,7 +405,7 @@
"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": "Potvrdit",
"abusefilter-revert-success": "Všechny operace, které filtr zneužití provedl na základě [[Special:AbuseFilter/$1|filtru $2]], byly vráceny.",
@@ -401,6 +450,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,6 +466,17 @@
"abusefilter-import-submit": "Importovat data",
"abusefilter-group-default": "Výchozí",
"abusefilter-http-error": "Došlo k chybě HTTP: $1.",
+ "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á",
+ "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]]).",
"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.",
@@ -423,10 +484,12 @@
"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í.",
@@ -448,8 +511,10 @@
"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-cantcheck": "Nemáte oprávnění kontrolovat syntaxi filtrů zneužití.",
+ "apierror-abusefilter-badsyntax": "Filtr má neplatnou syntaxi."
}
diff --git a/www/wiki/extensions/AbuseFilter/i18n/csb.json b/www/wiki/extensions/AbuseFilter/i18n/csb.json
new file mode 100644
index 00000000..4373ca23
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/i18n/da.json b/www/wiki/extensions/AbuseFilter/i18n/da.json
index fd0c11b4..d6c3c720 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/da.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/da.json
@@ -15,7 +15,9 @@
"Tjernobyl",
"MGA73",
"Matma Rex",
- "Cgtdk"
+ "Cgtdk",
+ "Jorn Ari",
+ "Joedalton"
]
},
"abusefilter-desc": "Anvender automatiske heuristikker på redigeringer",
@@ -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",
@@ -72,7 +75,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,6 +84,7 @@
"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:",
@@ -90,6 +94,7 @@
"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",
@@ -141,7 +146,6 @@
"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:",
@@ -177,6 +181,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": "anonyme brugere",
+ "abusefilter-block-user": "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",
@@ -247,6 +254,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",
@@ -387,7 +395,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 +407,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/www/wiki/extensions/AbuseFilter/i18n/de.json b/www/wiki/extensions/AbuseFilter/i18n/de.json
index 9078949c..59a9e313 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/de.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/de.json
@@ -25,7 +25,9 @@
"Predatorix",
"Inkowik",
"Matma Rex",
- "MGChecker"
+ "MGChecker",
+ "Daimona Eaytoy",
+ "ToBeFree"
]
},
"abusefilter-desc": "Wendet Heuristiken automatisch auf Bearbeitungen an",
@@ -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,16 @@
"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-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,8 +97,9 @@
"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",
@@ -96,6 +107,7 @@
"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-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.",
@@ -103,13 +115,20 @@
"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",
"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",
+ "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",
@@ -140,6 +159,13 @@
"abusefilter-list-options-scope-all": "Lokale und globale Regeln",
"abusefilter-list-options-disabled": "Deaktivierte Filter:",
"abusefilter-list-options-hidedisabled": "Deaktivierte 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",
@@ -162,7 +188,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 +198,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,8 +209,9 @@
"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:",
@@ -194,11 +224,16 @@
"abusefilter-edit-warn-preview": "Vorschau der gewählten Systemnachricht",
"abusefilter-edit-warn-edit": "Gewählte Systemnachricht erstellen/bearbeiten",
"abusefilter-edit-tag-tag": "Gültige [[Special:Tags|Benennungen]] (eine pro Zeile):",
+ "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",
+ "abusefilter-block-user": "angemeldete Benutzer",
"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-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 +245,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 +258,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,15 +284,19 @@
"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-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)",
@@ -264,6 +305,7 @@
"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",
@@ -296,6 +338,10 @@
"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",
@@ -310,6 +356,14 @@
"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",
@@ -321,6 +375,7 @@
"abusefilter-edit-builder-vars-file-width": "Breite der Datei in Pixel",
"abusefilter-edit-builder-vars-file-height": "Höhe der Datei in Pixel",
"abusefilter-edit-builder-vars-file-bits-per-channel": "Bits pro Farbkanal der Datei",
+ "abusefilter-edit-block-options": "Sperroptionen:",
"abusefilter-filter-log": "Missbrauchsfilter-Änderungen",
"abusefilter-history": "Versionsgeschichte für Missbrauchsfilter $1",
"abusefilter-history-foruser": "Änderungen von $1",
@@ -339,6 +394,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.",
@@ -357,6 +413,7 @@
"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-unclosedcomment": "Nicht abgeschlossener Kommentar bei Zeichen $1.",
"abusefilter-action-tag": "Markierung",
"abusefilter-action-throttle": "Drosseln",
"abusefilter-action-warn": "Warnen",
@@ -372,8 +429,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",
@@ -417,6 +475,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,11 +491,26 @@
"abusefilter-import-submit": "Daten importieren",
"abusefilter-group-default": "Standard",
"abusefilter-http-error": "Ein HTTP-Fehler ist aufgetreten: $1.",
+ "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",
+ "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]]).",
+ "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.",
@@ -454,6 +528,7 @@
"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-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.",
@@ -461,6 +536,7 @@
"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.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/diq.json b/www/wiki/extensions/AbuseFilter/i18n/diq.json
index 372d842d..ccf03232 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/diq.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/diq.json
@@ -141,7 +141,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î",
@@ -391,7 +390,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 +400,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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/dsb.json b/www/wiki/extensions/AbuseFilter/i18n/dsb.json
index 2671a633..93eb3dc9 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/dsb.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/dsb.json
@@ -129,7 +129,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 +147,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ś",
@@ -379,7 +377,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/www/wiki/extensions/AbuseFilter/i18n/el.json b/www/wiki/extensions/AbuseFilter/i18n/el.json
index bce0f830..bd8526d1 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/el.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/el.json
@@ -15,7 +15,9 @@
"Protnet",
"ZaDiak",
"Αντιγόνη",
- "Matma Rex"
+ "Matma Rex",
+ "KATRINE1992",
+ "Nikosgranturismogt"
]
},
"abusefilter-desc": "Εφαρμόζει αυτόματη ανίχνευση σε επεξεργασίες",
@@ -70,7 +72,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": "Αλλαγές που πραγματοποιήθηκαν κατά την επεξεργασία",
@@ -119,6 +121,10 @@
"abusefilter-list-options-scope-global": "Μόνο καθολικοί κανόνες",
"abusefilter-list-options-disabled": "Απενεργοποιημένα φίλτρα:",
"abusefilter-list-options-hidedisabled": "Απόκρυψη απενεργοποιημένων φίλτρων",
+ "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 +143,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 +156,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 +164,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 από την επεξεργασία",
@@ -203,8 +210,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 +239,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)",
@@ -340,8 +348,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,7 +393,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/www/wiki/extensions/AbuseFilter/i18n/en.json b/www/wiki/extensions/AbuseFilter/i18n/en.json
index b30040e8..bfc6e400 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/en.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/en.json
@@ -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,16 @@
"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-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,8 +72,9 @@
"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",
@@ -73,21 +82,28 @@
"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.",
"abusefilter-log-private-not-included": "One or more of the filter IDs you specified are private. Because you are not allowed to view details of private filters, these filters have not been searched for.",
"abusefilter-log-hide-legend": "Hide log entry",
"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]]\"",
"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",
+ "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",
@@ -118,6 +134,13 @@
"abusefilter-list-options-scope-all": "Local and global rules",
"abusefilter-list-options-disabled": "Disabled filters:",
"abusefilter-list-options-hidedisabled": "Hide disabled 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",
@@ -140,7 +163,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 +173,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,8 +184,9 @@
"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:",
@@ -172,11 +199,16 @@
"abusefilter-edit-warn-preview": "Preview selected message",
"abusefilter-edit-warn-edit": "Create/Edit selected message",
"abusefilter-edit-tag-tag": "[[Special:Tags|Tags]] to apply (one per line):",
+ "abusefilter-edit-block-anon-durations": "Block duration for anonymous users:",
+ "abusefilter-edit-block-user-durations": "Block duration for registered users:",
+ "abusefilter-block-anon": "anonymous users",
+ "abusefilter-block-user": "registered users",
"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-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,7 +220,7 @@
"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",
@@ -201,8 +233,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,15 +260,19 @@
"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-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)",
@@ -243,6 +281,7 @@
"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",
@@ -275,6 +314,10 @@
"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",
@@ -289,6 +332,14 @@
"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",
@@ -300,6 +351,7 @@
"abusefilter-edit-builder-vars-file-width": "Width of the file in pixels",
"abusefilter-edit-builder-vars-file-height": "Height of the file in pixels",
"abusefilter-edit-builder-vars-file-bits-per-channel": "Bits per color channel of the file",
+ "abusefilter-edit-block-options": "Block options:",
"abusefilter-filter-log": "Recent filter changes",
"abusefilter-history": "Change history for Abuse Filter #$1",
"abusefilter-history-foruser": "Changes by $1",
@@ -318,6 +370,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.",
@@ -336,6 +389,7 @@
"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-unclosedcomment": "Unclosed comment at character $1.",
"abusefilter-action-tag": "Tag",
"abusefilter-action-throttle": "Throttle",
"abusefilter-action-warn": "Warn",
@@ -351,8 +405,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",
@@ -396,6 +451,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,6 +467,17 @@
"abusefilter-import-submit": "Import data",
"abusefilter-group-default": "Default",
"abusefilter-http-error": "An HTTP error occurred: $1.",
+ "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",
+ "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]]).",
"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.",
@@ -450,6 +517,7 @@
"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.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/eo.json b/www/wiki/extensions/AbuseFilter/i18n/eo.json
index 4210b18e..2b7a0e85 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/eo.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/eo.json
@@ -136,7 +136,6 @@
"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 +154,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",
@@ -384,7 +382,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/www/wiki/extensions/AbuseFilter/i18n/es-formal.json b/www/wiki/extensions/AbuseFilter/i18n/es-formal.json
new file mode 100644
index 00000000..e8ea164b
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/i18n/es-formal.json
@@ -0,0 +1,11 @@
+{
+ "@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-mustbeeditor": "Por razones de seguridad, sólo los usuarios con permisos para modificar filtros antiabusos pueden utilizar esta interfaz.",
+ "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/www/wiki/extensions/AbuseFilter/i18n/es.json b/www/wiki/extensions/AbuseFilter/i18n/es.json
index 46745b28..6b8615e4 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/es.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/es.json
@@ -45,7 +45,9 @@
"Dgstranz",
"Sophivorus",
"Fortega",
- "Josecurioso"
+ "Josecurioso",
+ "RicardoSGZ",
+ "Daimona Eaytoy"
]
},
"abusefilter-desc": "Aplica heurísticas automáticas a las ediciones",
@@ -67,18 +69,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,28 +91,35 @@
"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-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",
@@ -116,20 +127,28 @@
"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-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-logentry-unsuppress": "reveló «[[$1]]»",
"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",
+ "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,7 +161,7 @@
"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-hitcount": "$1 {{PLURAL:$1|detección|detecciones}}",
@@ -158,11 +177,16 @@
"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-disabled": "Filtros desactivados:",
+ "abusefilter-list-options-hidedisabled": "Ocultar filtros desactivados",
+ "abusefilter-list-options-searchpattern": "Insertar un patrón",
+ "abusefilter-list-options-searchoptions": "Modo de búsqueda:",
+ "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:",
@@ -177,12 +201,14 @@
"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,18 +216,20 @@
"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:",
@@ -214,6 +242,10 @@
"abusefilter-edit-warn-preview": "Previsualizar 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-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": "usuarios anónimos",
+ "abusefilter-block-user": "usuarios registrados",
"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",
@@ -230,7 +262,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 +275,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 (<=)",
@@ -267,15 +301,19 @@
"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-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)",
@@ -284,8 +322,9 @@
"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",
@@ -301,8 +340,8 @@
"abusefilter-edit-builder-vars-article-views": "Vistas de la página",
"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-text": "Título de la página original del traslado",
+ "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Título completo de la página original del traslado",
"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",
@@ -341,11 +380,12 @@
"abusefilter-edit-builder-vars-file-width": "Anchura del archivo en píxeles",
"abusefilter-edit-builder-vars-file-height": "Altura del archivo en píxeles",
"abusefilter-edit-builder-vars-file-bits-per-channel": "Bits por canal de color del archivo",
+ "abusefilter-edit-block-options": "Opciones de bloqueo:",
"abusefilter-filter-log": "Cambios recientes de filtros",
"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 +399,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.",
@@ -392,8 +433,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",
@@ -437,6 +479,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,7 +495,17 @@
"abusefilter-import-submit": "Importar datos",
"abusefilter-group-default": "Predeterminado",
"abusefilter-http-error": "Se produjo un error de HTTP: $1.",
+ "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",
"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-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.",
@@ -490,6 +543,7 @@
"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.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/et.json b/www/wiki/extensions/AbuseFilter/i18n/et.json
index 47c5409a..68738747 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/et.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/et.json
@@ -5,7 +5,8 @@
"Morel",
"Oop",
"Pikne",
- "Matma Rex"
+ "Matma Rex",
+ "Cumbril"
]
},
"abusefilter-desc": "Rakendab muudatuste juures automaatset heuristikat.",
@@ -27,10 +28,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 +41,28 @@
"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-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,7 +76,7 @@
"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",
@@ -71,8 +85,10 @@
"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",
@@ -81,6 +97,11 @@
"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 +115,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",
@@ -114,6 +135,10 @@
"abusefilter-list-options-scope-all": "Kohalikud ja globaalsed reeglid",
"abusefilter-list-options-disabled": "Keelatud filtrid:",
"abusefilter-list-options-hidedisabled": "Peida keelatud filtrid",
+ "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,12 +152,11 @@
"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:",
@@ -155,7 +179,7 @@
"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-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:",
@@ -166,7 +190,7 @@
"abusefilter-edit-warn-other-label": "Muu sõnumi lehekülje pealkiri:\n:''(MediaWiki-eesliiteta)''",
"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-warn-edit": "Koosta valitud sõnum või muuda seda",
"abusefilter-edit-tag-tag": "Kasutatavad [[Special:Tags|märgised]] (rea kohta üks):",
"abusefilter-edit-denied": "Sa ei saa selle filtri üksikasju vaadata, sest need pole avalikud.",
"abusefilter-edit-main": "Filtri näitajad",
@@ -184,7 +208,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.",
@@ -220,18 +244,23 @@
"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-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-group-vars": "Muutujad",
"abusefilter-edit-builder-vars-accountname": "Kontonimi (konto loomisel)",
@@ -242,6 +271,8 @@
"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",
@@ -271,11 +302,14 @@
"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-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-old-text-stripped": "Vana lehekülje tekst igasuguse märgistuseta",
"abusefilter-edit-builder-vars-old-links": "Muudatuse-eelsel leheküljel olnud lingid",
@@ -283,6 +317,11 @@
"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 +340,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.",
@@ -321,6 +361,7 @@
"abusefilter-action-tag": "Märgista",
"abusefilter-action-throttle": "Drosselda",
"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 +373,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.",
@@ -377,7 +418,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 +433,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/www/wiki/extensions/AbuseFilter/i18n/eu.json b/www/wiki/extensions/AbuseFilter/i18n/eu.json
index a9aae152..00773a24 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/eu.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/eu.json
@@ -18,18 +18,33 @@
"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 +52,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 +69,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,12 +77,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-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-disabled": "Ezgaitutako iragazkiak:",
"abusefilter-list-options-hidedisabled": "Ezkutatu ezgaitutako iragazkiak",
"abusefilter-list-options-submit": "Eguneratu",
@@ -71,6 +96,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,10 +104,15 @@
"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:",
@@ -91,6 +122,7 @@
"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 +155,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)",
@@ -135,6 +168,7 @@
"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-ns": "Orri izen-tartea",
"abusefilter-edit-builder-vars-article-prefixedtext": "Orrialdearen izenburu osoa",
"abusefilter-edit-builder-vars-user-editcount": "Erabiltzailearen edizioen kontagailua",
"abusefilter-edit-builder-vars-user-age": "Lankide kontuaren adina",
@@ -147,8 +181,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 +193,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 +201,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/www/wiki/extensions/AbuseFilter/i18n/fa.json b/www/wiki/extensions/AbuseFilter/i18n/fa.json
index 61e43f07..7eb94310 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/fa.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/fa.json
@@ -24,7 +24,8 @@
"Alirezaaa",
"Mehran",
"Hosseinblue",
- "Matma Rex"
+ "Matma Rex",
+ "Alifakoor"
]
},
"abusefilter-desc": "اکتشافات خودکاری را بر روی ویرایش‌های انجام می‌دهد.",
@@ -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,16 @@
"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|انجام}} عمل «$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,8 +95,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": "آدرس آی‌پی اصلی",
+ "abusefilter-log-details-checkuser": "بازرسی کاربر",
"abusefilter-log-noactions": "هیچ",
"abusefilter-log-details-diff": "تغییرات انجام شده در ویرایش",
"abusefilter-log-linkoncontribs": "سیاههٔ خرابکاری",
@@ -95,6 +105,7 @@
"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": "یک یا چند مورد از شناسه‌های پالایه‌ای که انتخاب کرده‌اید خصوصی هستند. به این دلیل که شما مجاز به دیدن جزئیات پالایه‌های خصوصی نیستند، این فیلترها جستجو نشدند.",
@@ -106,9 +117,15 @@
"abusefilter-logentry-suppress": "«[[$1]]» را پنهان کرد",
"abusefilter-logentry-unsuppress": "«[[$1]]» را آشکار کرد",
"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": "عواقب",
@@ -139,6 +156,13 @@
"abusefilter-list-options-scope-all": "قوانین محلی و سراسری",
"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-search-rlike": "عبارت باقاعده",
+ "abusefilter-list-options-search-irlike": "عبارت باقاعده حساس به بزرگی و کوچکی حروف",
+ "abusefilter-list-regexerror": "خطایی در زمان جستجو رخ داد: خطا در ساختار عبارت با قاعده.",
"abusefilter-list-options-submit": "به‌روزرسانی",
"abusefilter-tools-text": "اینجا ابزارهایی برای قاعده‌مندکردن و اشکال‌زدایی پالایه‌های خرابکاری قرار دارند.",
"abusefilter-tools-expr": "آزمایشگر عبارت",
@@ -157,10 +181,11 @@
"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-group": "گروه پالایه:",
"abusefilter-edit-flags": "پرچم‌ها:",
@@ -179,8 +204,9 @@
"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": "تناوب زمانی:",
@@ -193,6 +219,10 @@
"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-edit-denied": "شما نمی‌توانید جزئیات این پالایه را ببینید، زیرا از دید عموم پنهان شده‌است.",
"abusefilter-edit-main": "پارامترهای پالایه",
"abusefilter-edit-done-subtitle": "پالایه ویرایش شد",
@@ -232,6 +262,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 +277,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 +298,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": "تغییر اندازهٔ صفحه در ویرایش",
@@ -320,6 +356,7 @@
"abusefilter-edit-builder-vars-file-width": "عرض پرونده به پیکسل",
"abusefilter-edit-builder-vars-file-height": "ارتفاع پرونده به پیکسل",
"abusefilter-edit-builder-vars-file-bits-per-channel": "تعداد بیت در هر کانال رنگ پرونده",
+ "abusefilter-edit-block-options": "گزینه‌های قطع دسترسی:",
"abusefilter-filter-log": "تغییرات اخیر پالایه‌ها",
"abusefilter-history": "تاریخچهٔ تغییرهای پالایهٔ خرابکاری #$1",
"abusefilter-history-foruser": "تغییرات توسط $1",
@@ -338,6 +375,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": "پالایه‌ای که شما درخواست کرده‌اید پنهان شده‌است و شما نمی‌توانید تاریخچهٔ آن را ببینید.",
@@ -371,8 +409,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",
@@ -416,6 +455,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,6 +471,17 @@
"abusefilter-import-submit": "درون‌ریزی اطلاعات",
"abusefilter-group-default": "پیش‌فرض",
"abusefilter-http-error": "خطای اچ‌تی‌تی‌پی رخ داد: $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": "موجود نیست",
+ "tag-abusefilter-condition-limit": "محدودیت تعداد شرایط حاصل شد",
+ "tag-abusefilter-condition-limit-description": "ویرایش‌ها یا عملکردهای دیگری که توسط تمام [[Special:AbuseFilter|پالایه‌های]] فعال بررسی نشدند ([[mw:Extension:AbuseFilter/Conditions|راهنما]]).",
"apihelp-abusefiltercheckmatch-description": "بررسی کنید تا ببینید اگر پالایهٔ خرابکاری با مجموعه‌ای از متغییرها، رویداد سیاههٔ پالایهٔ خرابکاری کاربر مطابق است.\n\n متغییر، شناسهٔ تغییرات اخیر یا شناسهٔ ورود مورد نیاز است، اما فقط یکی از این سه می‌تواند استفاده شود.",
"apihelp-abusefiltercheckmatch-summary": "بررسی کنید اگر یک پالایهٔ خرابکاری با مجموعه‌ای از متغیرها مطابقت داشت، editor logged AbuseFilter event.",
"apihelp-abusefiltercheckmatch-extended-description": "vars، rcid، یا logid لازم است هرچند یکی از آنها استفاده می‌شود.",
@@ -470,6 +521,7 @@
"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": "شما اجازهٔ آزمایش پالایه‌های خرابکاری را ندارید.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/fi.json b/www/wiki/extensions/AbuseFilter/i18n/fi.json
index fa51ec23..eda38b7d 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/fi.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/fi.json
@@ -28,7 +28,7 @@
"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-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",
@@ -57,6 +57,7 @@
"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,28 +65,40 @@
"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-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-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-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",
@@ -95,7 +108,10 @@
"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",
"abusefilter-management": "Väärinkäyttösuodattimen hallinta",
"abusefilter-list": "Kaikki suodattimet",
"abusefilter-list-id": "Suodatin nro",
@@ -147,7 +163,7 @@
"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:",
@@ -183,6 +199,8 @@
"abusefilter-edit-warn-preview": "Esikatsele valittua viestiä",
"abusefilter-edit-warn-edit": "Luo tai muokkaa valittua viestiä",
"abusefilter-edit-tag-tag": "Käytettävät [[Special:Tags|merkkaukset]] (yksi per rivi):",
+ "abusefilter-block-anon": "kirjautumattomat käyttäjät",
+ "abusefilter-block-user": "kirjautuneet käyttäjät",
"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",
@@ -284,6 +302,7 @@
"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-movedto-recent-contributors": "Siirron kohdesivun 10 viimeistä muokkaajaa",
"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",
@@ -298,6 +317,9 @@
"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-move": "Siirron lähdesivun siirtosuojaus",
+ "abusefilter-edit-builder-vars-movedto-restrictions-move": "Siirron kohdesivun siirtosuojaus",
+ "abusefilter-edit-builder-vars-movedto-restrictions-create": "Siirron kohdesivun luontisuojaus",
"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",
@@ -308,6 +330,7 @@
"abusefilter-edit-builder-vars-file-mediatype": "Tiedoston mediatyyppi",
"abusefilter-edit-builder-vars-file-width": "Tiedoston leveys pikseleissä",
"abusefilter-edit-builder-vars-file-height": "Tiedoston korkeus pikseleissä",
+ "abusefilter-edit-block-options": "Eston asetukset:",
"abusefilter-filter-log": "Suodattimien viimeisimmät muutokset",
"abusefilter-history": "Muutoshistoria väärinkäyttösuodattimelle numero $1",
"abusefilter-history-foruser": "Käyttäjän $1 muokkaukset",
@@ -326,6 +349,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.",
@@ -404,6 +428,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,6 +444,12 @@
"abusefilter-import-submit": "Tuo tiedot",
"abusefilter-group-default": "Yleinen",
"abusefilter-http-error": "Tapahtui HTTP-virhe: $1.",
+ "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",
+ "tag-abusefilter-condition-limit": "ehtojen raja-arvo on saavutettu",
"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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/fo.json b/www/wiki/extensions/AbuseFilter/i18n/fo.json
index f0f5c03d..cae81420 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/fo.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/fo.json
@@ -126,7 +126,6 @@
"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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/fr.json b/www/wiki/extensions/AbuseFilter/i18n/fr.json
index 5fbc909b..d377e245 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/fr.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/fr.json
@@ -35,7 +35,8 @@
"TomT0m",
"Wladek92",
"Elfix",
- "Matma Rex"
+ "Matma Rex",
+ "Thibaut120094"
]
},
"abusefilter-desc": "Applique des heuristiques automatiques aux modifications",
@@ -57,6 +58,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 +71,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,10 +83,16 @@
"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-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)",
@@ -97,15 +106,17 @@
"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-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-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.",
@@ -113,13 +124,20 @@
"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]]",
"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",
+ "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",
@@ -148,8 +166,15 @@
"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-disabled": "Filtres désactivés :",
"abusefilter-list-options-hidedisabled": "Masquer les filtres désactivé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",
@@ -172,7 +197,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 +207,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,8 +218,9 @@
"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 :",
@@ -204,11 +233,16 @@
"abusefilter-edit-warn-preview": "Prévisualiser le 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-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": "utilisateurs anonymes",
+ "abusefilter-block-user": "utilisateurs enregistrés",
"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-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 +254,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 +267,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,15 +293,19 @@
"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-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)",
@@ -274,6 +314,7 @@
"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",
@@ -299,13 +340,17 @@
"abusefilter-edit-builder-vars-movedto-prefixedtext": "Titre entier de la page de destination du renommage",
"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",
@@ -320,6 +365,14 @@
"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",
@@ -331,6 +384,7 @@
"abusefilter-edit-builder-vars-file-width": "Largeur du fichier en pixels",
"abusefilter-edit-builder-vars-file-height": "Hauteur du fichier en pixels",
"abusefilter-edit-builder-vars-file-bits-per-channel": "Nombre de bits par canal de couleur dans le fichier",
+ "abusefilter-edit-block-options": "Options de blocage :",
"abusefilter-filter-log": "Modifications récentes des filtres",
"abusefilter-history": "Historique des modifications du filtre antiabus n° $1",
"abusefilter-history-foruser": "Modifications par $1",
@@ -344,11 +398,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.",
@@ -367,6 +422,7 @@
"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-unclosedcomment": "Commentaire non fermé au caractère $1.",
"abusefilter-action-tag": "Baliser",
"abusefilter-action-throttle": "Limiter les modifications",
"abusefilter-action-warn": "Avertir l’utilisateur",
@@ -382,8 +438,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",
@@ -427,6 +484,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,6 +500,17 @@
"abusefilter-import-submit": "Importer des données",
"abusefilter-group-default": "Par défaut",
"abusefilter-http-error": "Une erreur HTTP s’est produite : $1.",
+ "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",
+ "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]]).",
"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é.",
@@ -481,6 +550,7 @@
"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.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/frp.json b/www/wiki/extensions/AbuseFilter/i18n/frp.json
index faef4643..8f459afb 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/frp.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/frp.json
@@ -124,7 +124,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 +142,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",
@@ -365,7 +363,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/www/wiki/extensions/AbuseFilter/i18n/frr.json b/www/wiki/extensions/AbuseFilter/i18n/frr.json
index 16f270d4..c26aef9f 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/frr.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/frr.json
@@ -17,5 +17,6 @@
"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-log-name": "Masbrükfilter-logbuk",
+ "abusefilter-diff-info": "Grünjdooten"
}
diff --git a/www/wiki/extensions/AbuseFilter/i18n/gl.json b/www/wiki/extensions/AbuseFilter/i18n/gl.json
index a68db49b..4c6bab02 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/gl.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/gl.json
@@ -4,7 +4,8 @@
"Elisardojm",
"Toliño",
"Banjo",
- "Matma Rex"
+ "Matma Rex",
+ "Navhy"
]
},
"abusefilter-desc": "Aplica heurísticas automáticas ás edicións",
@@ -86,6 +87,9 @@
"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",
@@ -137,7 +141,7 @@
"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:",
@@ -160,7 +164,7 @@
"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-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:",
@@ -226,11 +230,13 @@
"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)",
@@ -351,7 +357,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]].",
@@ -383,7 +389,7 @@
"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.",
@@ -396,6 +402,7 @@
"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-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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/gom-deva.json b/www/wiki/extensions/AbuseFilter/i18n/gom-deva.json
new file mode 100644
index 00000000..f3d71e28
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/i18n/gsw.json b/www/wiki/extensions/AbuseFilter/i18n/gsw.json
index df5a6c69..9fad304d 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/gsw.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/gsw.json
@@ -127,7 +127,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 +145,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",
@@ -368,7 +366,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/www/wiki/extensions/AbuseFilter/i18n/he.json b/www/wiki/extensions/AbuseFilter/i18n/he.json
index 9a303f42..bd87ff28 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/he.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/he.json
@@ -2,7 +2,6 @@
"@metadata": {
"authors": [
"Amire80",
- "Guycn1",
"Guycn2",
"Ofrahod",
"Rotemliss",
@@ -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,10 +60,16 @@
"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)",
@@ -76,8 +83,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": "יומן מסנן ההשחתות",
@@ -85,27 +93,35 @@
"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-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)",
+ "log-action-filter-abusefilter": "סוג שינוי המסנן:",
+ "log-action-filter-abusefilter-create": "יצירת מסנן חדש",
+ "log-action-filter-abusefilter-modify": "שינוי מסנן",
+ "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": "קבוצת מסננים",
@@ -129,6 +145,13 @@
"abusefilter-list-options-scope-all": "מסננים גלובליים ומקומיים",
"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-search-rlike": "ביטוי רגולרי",
+ "abusefilter-list-options-search-irlike": "ביטוי רגולרי שאינו תלוי־רישיות",
+ "abusefilter-list-regexerror": "אירעה שגיאה בעת החיפוש: שגיאה בתחביר הביטוי הרגולרי.",
"abusefilter-list-options-submit": "עדכון",
"abusefilter-tools-text": "להלן מספר כלים שעשויים להיות שימושיים בניסוח ובניפוי השגיאות של מסנני ההשחתות.",
"abusefilter-tools-expr": "בודק הביטויים",
@@ -147,11 +170,13 @@
"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,6 +184,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",
@@ -169,8 +195,9 @@
"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": "משך הזמן:",
@@ -183,11 +210,16 @@
"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-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-restricted": "אין באפשרותך לערוך מסנן זה, כי הוא מכיל פעולה מוגבלת אחת או יותר.\nנא לבקש ממשתמש עם הרשאה להוספת פעולות מוגבלות לבצע את השינוי עבורך.",
"abusefilter-edit-viewhistory": "צפייה בהיסטוריית הגרסאות של מסנן זה",
"abusefilter-edit-history": "היסטוריה:",
@@ -199,7 +231,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": "הודעות אזהרה מותאמות אישית אינן נתמכות עבור מסננים גלובליים",
@@ -212,8 +244,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,15 +270,17 @@
"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": "מספר הפעמים שהמחרוזת 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-substr": "מחרוזת משנה (substr)",
"abusefilter-edit-builder-funcs-strpos": "מיקום מחרוזת משנה במחרוזת (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "החלפת מחרוזת משנה עם מחרוזת אחרת (str_replace)",
@@ -253,6 +289,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": "שינוי הגודל בעריכה",
@@ -285,6 +322,10 @@
"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": "כל הקישורים החיצוניים שהוסרו בעריכה",
@@ -299,6 +340,14 @@
"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",
@@ -310,6 +359,7 @@
"abusefilter-edit-builder-vars-file-width": "רוחב הקובץ בפיקסלים",
"abusefilter-edit-builder-vars-file-height": "גובה הקובץ בפיקסלים",
"abusefilter-edit-builder-vars-file-bits-per-channel": "ביטים לערוץ צבע של הקובץ",
+ "abusefilter-edit-block-options": "אפשרויות חסימה:",
"abusefilter-filter-log": "שינויים אחרונים במסננים",
"abusefilter-history": "היסטוריית השינויים של מסנן ההשחתות #$1",
"abusefilter-history-foruser": "שינויים שבוצעו על־ידי $1",
@@ -323,11 +373,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": "המסנן שביקשת מוסתר, ואין באפשרותך לצפות בהיסטוריה שלו.",
@@ -346,6 +397,7 @@
"abusefilter-exception-overridebuiltin": "דריסה בלתי־תקינה של המשתנה המובנה \"$2\" בתו מספר $1.",
"abusefilter-exception-outofbounds": "ביקשו פריט רשימה בלתי קיים $2 (גודל הרשימה = $3) בתו מספר $1.",
"abusefilter-exception-notlist": "ביקשו פריט מערך מלא־מערך בתו מספר $1.",
+ "abusefilter-exception-unclosedcomment": "הערה בלתי־סגורה בתו מספר $1.",
"abusefilter-action-tag": "לתייג",
"abusefilter-action-throttle": "הגבלת תדירות פעולה",
"abusefilter-action-warn": "אזהרה",
@@ -361,8 +413,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",
@@ -406,6 +459,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,6 +475,17 @@
"abusefilter-import-submit": "ייבוא הנתונים",
"abusefilter-group-default": "ברירת המחדל",
"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": "לא זמין",
+ "tag-abusefilter-condition-limit": "חריגה מתנאי ההגבלה",
+ "tag-abusefilter-condition-limit-description": "עריכות או פעולות אחרות שלא ניתן היה לבדוק אותן באמצעות כל [[Special:AbuseFilter|מסנני ההשחתות]] הפעילים ([[mw:Extension:AbuseFilter/Conditions|עזרה]]).",
"apihelp-abusefiltercheckmatch-description": "בדיקה אם מסנן ההשחתות מתאים לערכת משתנים, העורך רושם ביומן אירוע מסנן השחתות.\n\nvars‏, rcid או logid נדרש, אבל אפשר להשתמש רק באחד מהם.",
"apihelp-abusefiltercheckmatch-summary": "בדיקה האם מסנן השחתות מתאים לערכת משתנים, אירוע מסנן השחתות שנרשם ביומן על־די עורך.",
"apihelp-abusefiltercheckmatch-extended-description": "נחוץ vars או rcid או logid, אבל רק אחד מהם יכול לשמש.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/hi.json b/www/wiki/extensions/AbuseFilter/i18n/hi.json
index 4be9bc97..b47ccc06 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/hi.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/hi.json
@@ -13,7 +13,11 @@
"Hindustanilanguage",
"Matma Rex",
"Sfic",
- "Sachinkatiyar"
+ "Sachinkatiyar",
+ "ArmouredCyborg",
+ "Innocentbunny",
+ "Nitin1485",
+ "Smtchahal"
]
},
"abusefilter-desc": "संपादनों पर स्वतः शोध प्रणाली का प्रयोग लागू करता है",
@@ -57,6 +61,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,10 +83,11 @@
"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": "लॉग प्रविष्टि आइ॰डी:",
@@ -87,6 +97,7 @@
"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": "फ़िल्टर आइ॰डी",
@@ -138,10 +149,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": "झंडे:",
@@ -343,7 +354,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,6 +406,11 @@
"abusefilter-import-submit": "डेटा आयात करें",
"abusefilter-group-default": "डिफ़ॉल्ट",
"abusefilter-http-error": "एच॰टी॰टी॰पी त्रुटि हुई है: $1 ।",
+ "abusefilter-view-private-submit": "व्यक्तिगत विवरण देखें",
+ "abusefilter-view-private": "व्यक्तिगत विवरण देखें",
+ "abusefilter-view-private-reason": "निजी विवरण तक पहुंचने का कारण",
+ "abusefilter-invalid-request-noid": "अमान्य अनुरोध! आपको दुर्व्यवहार लॉग विवरण पृष्ठ पर फ़ॉर्म के माध्यम से निजी लॉग विवरण एक्सेस करना होगा और एक कारण प्रदान करना होगा।",
+ "abusefilter-log-ip-not-available": "उपलब्ध नहीं है",
"apihelp-abusefiltercheckmatch-param-filter": "मेल खाने को जाँचने के लिए पूर्ण फ़िलटर पाठ ।",
"apihelp-abusefilterevalexpression-param-expression": "जाँचने की अभिव्यक्ति",
"apihelp-abusefilterevalexpression-example-1": "सीधी अभिव्यक्ति जाँचना",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/hr.json b/www/wiki/extensions/AbuseFilter/i18n/hr.json
index c46bb14e..34491733 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/hr.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/hr.json
@@ -15,7 +15,7 @@
"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 +52,16 @@
"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-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)",
@@ -71,6 +77,7 @@
"abusefilter-log-details-vars": "Parametri postupka",
"abusefilter-log-details-private": "Privatni podaci",
"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",
@@ -350,14 +357,14 @@
"abusefilter-test-submit": "Test",
"abusefilter-test-load": "Učitaj",
"abusefilter-test-user": "Izmjene prema suradnicima:",
- "abusefilter-test-period-start": "Izmjene napravljene kasnije:",
+ "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-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:",
@@ -395,5 +402,7 @@
"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",
+ "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ć]]).",
"apierror-abusefilter-badsyntax": "Filtar nema valjanu sintaksu."
}
diff --git a/www/wiki/extensions/AbuseFilter/i18n/hrx.json b/www/wiki/extensions/AbuseFilter/i18n/hrx.json
index 3e5b1d5a..229d80a1 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/hrx.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/hrx.json
@@ -130,7 +130,6 @@
"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:",
@@ -330,7 +329,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/www/wiki/extensions/AbuseFilter/i18n/hsb.json b/www/wiki/extensions/AbuseFilter/i18n/hsb.json
index caa77f0f..cad5416b 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/hsb.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/hsb.json
@@ -129,7 +129,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 +146,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ć",
@@ -382,7 +380,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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/hu.json b/www/wiki/extensions/AbuseFilter/i18n/hu.json
index ef9892bc..093fdda7 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/hu.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/hu.json
@@ -20,7 +20,7 @@
"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 +34,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 +47,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 +58,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",
@@ -87,7 +99,10 @@
"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ó",
@@ -139,7 +154,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:",
@@ -191,7 +205,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",
@@ -270,7 +284,7 @@
"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",
@@ -386,7 +400,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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/ia.json b/www/wiki/extensions/AbuseFilter/i18n/ia.json
index 15872ca7..ca83971e 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ia.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ia.json
@@ -47,6 +47,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)",
@@ -131,7 +135,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,14 +151,14 @@
"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:",
@@ -390,7 +394,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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/id.json b/www/wiki/extensions/AbuseFilter/i18n/id.json
index 124e715b..1ddced00 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/id.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/id.json
@@ -12,7 +12,9 @@
"C5st4wr6ch",
"Arifin.wijaya",
"Matma Rex",
- "Rachmat.Wahidi"
+ "Rachmat.Wahidi",
+ "Rachmat04",
+ "Hidayatsrf"
]
},
"abusefilter-desc": "Memberlakukan pemeriksaan heuristik otomatis atas kontribusi pengguna.",
@@ -24,7 +26,7 @@
"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",
@@ -138,7 +140,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 +158,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",
@@ -389,7 +389,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/www/wiki/extensions/AbuseFilter/i18n/ilo.json b/www/wiki/extensions/AbuseFilter/i18n/ilo.json
index c96a954f..99fa34f6 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ilo.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ilo.json
@@ -129,7 +129,6 @@
"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:",
@@ -386,7 +385,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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/io.json b/www/wiki/extensions/AbuseFilter/i18n/io.json
index 46167b4e..97640a0e 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/io.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/io.json
@@ -3,22 +3,38 @@
"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.",
+ "abusefilter-mustbeeditor": "Por motivi di sekureso, ica interfacio povas modifikesar nur dal uzeri kun yuri por modifikar la filtrili di misuzo.",
+ "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",
@@ -29,10 +45,24 @@
"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-oldsize": "Antea grandeso (en bicoki*) di la pagino",
+ "abusefilter-edit-builder-vars-recent-contributors": "Lasta 10 uzeri qui redaktis la pagino",
+ "abusefilter-filter-log": "Recenta modifiki en la filtrili",
"abusefilter-history-foruser": "Chanji da $1",
"abusefilter-history-global": "Globala",
"abusefilter-history-timestamp": "Tempo",
@@ -44,11 +74,25 @@
"abusefilter-history-diff": "Chanji",
"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-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 modifiki en la filtrili.\nPor plura 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/www/wiki/extensions/AbuseFilter/i18n/is.json b/www/wiki/extensions/AbuseFilter/i18n/is.json
index e09d5348..27c98dff 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/is.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/is.json
@@ -4,7 +4,8 @@
"S.Örvarr.S",
"Snævar",
"Matma Rex",
- "Sveinn í Felli"
+ "Sveinn í Felli",
+ "Maxí"
]
},
"abusefilter-desc": "Beitir sjálfvirkri brjóstvitsfræði á breytingar.",
@@ -47,6 +48,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 +63,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.",
@@ -118,7 +121,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 +130,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",
@@ -167,7 +169,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 +179,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 +189,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,7 +200,7 @@
"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-summary": "Breytingarágrip/á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)",
@@ -283,12 +287,18 @@
"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",
+ "apierror-abusefilter-badsyntax": "Sían er með ranga málskipun."
}
diff --git a/www/wiki/extensions/AbuseFilter/i18n/it.json b/www/wiki/extensions/AbuseFilter/i18n/it.json
index f486681b..cd989bac 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/it.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/it.json
@@ -20,7 +20,10 @@
"Macofe",
"Alexmar983",
"Matma Rex",
- "Greis"
+ "Greis",
+ "Horcrux92",
+ "Daimona Eaytoy",
+ "Fitoschido"
]
},
"abusefilter-desc": "Applica un'euristica automatica alle modifiche.",
@@ -57,6 +60,7 @@
"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 +68,19 @@
"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-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-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,7 +88,7 @@
"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-noactions": "nessuna",
"abusefilter-log-details-diff": "Modifiche effettuate",
@@ -93,13 +103,15 @@
"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-logentry-suppress": "ha nascosto \"[[$1]]\"",
+ "abusefilter-logentry-unsuppress": "ha reso visibile \"[[$1]]\"",
"logentry-abusefilter-hit": "$1 {{GENDER:$2|ha attivato}} $4, {{GENDER:$2|eseguendo}} l'azione \"$5\" su $3. Azioni intraprese: $6 ($7)",
"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",
@@ -130,6 +142,13 @@
"abusefilter-list-options-scope-all": "Regole locali e globali",
"abusefilter-list-options-disabled": "Filtri disattivati:",
"abusefilter-list-options-hidedisabled": "Nascondi i filtri disattivati",
+ "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",
@@ -148,11 +167,13 @@
"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 conseguenti non saranno eseguite ($1). Per favore controlla e [[mw:Extension:AbuseFilter/Conditions|ottimizza]] le tue 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,6 +181,7 @@
"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",
@@ -167,11 +189,12 @@
"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-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-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:",
@@ -184,11 +207,16 @@
"abusefilter-edit-warn-preview": "Anteprima 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-block-anon-durations": "Durata del blocco per utenti anonimi:",
+ "abusefilter-edit-block-user-durations": "Durata del blocco per utenti registrati:",
+ "abusefilter-block-anon": "utenti anonimi",
+ "abusefilter-block-user": "utenti registrati",
"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-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:",
@@ -213,8 +241,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,15 +268,19 @@
"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-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)",
@@ -312,6 +346,7 @@
"abusefilter-edit-builder-vars-file-width": "Larghezza del file in pixel",
"abusefilter-edit-builder-vars-file-height": "Altezza del file in pixel",
"abusefilter-edit-builder-vars-file-bits-per-channel": "Bit per canale di colore del file",
+ "abusefilter-edit-block-options": "Opzioni del blocco:",
"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",
@@ -330,13 +365,14 @@
"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.",
@@ -348,13 +384,14 @@
"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-unclosedcomment": "Commento non chiuso in corrispondenza del carattere $1.",
"abusefilter-action-tag": "Etichetta",
"abusefilter-action-throttle": "Rallenta",
"abusefilter-action-warn": "Avvisa",
"abusefilter-action-blockautopromote": "Blocca autopromuovi",
"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,7 +400,7 @@
"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": "Conferma",
"abusefilter-revert-success": "Sono state annullate tutte le azioni effettuate dal [[Special:AbuseFilter/$1|filtro anti abusi $2]].",
@@ -408,6 +445,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,6 +461,13 @@
"abusefilter-import-submit": "Importa dati",
"abusefilter-group-default": "Predefinito",
"abusefilter-http-error": "Si è verificato un errore HTTP: $1.",
+ "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-log-ip-not-available": "Non disponibile",
+ "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]]).",
"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.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/ja.json b/www/wiki/extensions/AbuseFilter/i18n/ja.json
index c9cad610..804e933c 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ja.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ja.json
@@ -19,7 +19,10 @@
"W.CC",
"Sujiniku",
"Azeha",
- "Matma Rex"
+ "Matma Rex",
+ "Aefgh39622",
+ "Omotecho",
+ "Yusuke1109"
]
},
"abusefilter-desc": "編集に対して、自動的な経験則を適用する",
@@ -41,6 +44,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 +56,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 +69,10 @@
"abusefilter-log-search-filter": "フィルターID (\"|\" 区切り):",
"abusefilter-log-search-title": "ページ名:",
"abusefilter-log-search-wiki": "ウィキ:",
+ "abusefilter-log-search-entries-label": "可視性:",
+ "abusefilter-log-search-entries-all": "すべての項目",
+ "abusefilter-log-search-entries-hidden": "非表示項目のみ",
+ "abusefilter-log-search-entries-visible": "表示項目のみ",
"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,8 +86,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": "不正利用記録",
@@ -85,6 +96,8 @@
"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": "記録項目を隠す",
@@ -95,6 +108,11 @@
"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",
@@ -146,7 +164,7 @@
"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:",
@@ -168,8 +186,9 @@
"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": "期間:",
@@ -198,7 +217,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": "グローバルフィルターはカスタムの警告メッセージには対応していません",
@@ -404,7 +423,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,6 +439,15 @@
"abusefilter-import-submit": "取り込む",
"abusefilter-group-default": "既定",
"abusefilter-http-error": "HTTPエラーが発生: $1",
+ "abusefilter-view-private-submit": "非公開記録を参照",
+ "abusefilter-view-private": "非公開記録を参照",
+ "abusefilter-view-private-reason": "非公開記録の調査理由",
+ "abusefilter-invalid-request": "無効なリクエスト! [[Special:AbuseLog/$1]]のフォームを使ってプライベートログの詳細にアクセスし、理由を提示する必要があります。",
+ "abusefilter-invalid-request-noid": "無効なリクエスト! 不正利用ログの詳細ページのフォームからプライベートログの詳細にアクセスし、理由を提示する必要があります。",
+ "log-description-abusefilterprivatedetails": "以下は不正利用フィルターの非公開記録を調査した日時の一覧です。",
+ "abusefilter-noreason": "警告: 非公開記録を閲覧するには、理由を入力する必要があります",
+ "abusefilter-log-ip-not-available": "参照不可",
+ "tag-abusefilter-condition-limit-description": "[[Special:AbuseFilter|不正利用フィルター]]([[mw:Extension:AbuseFilter/Conditions|ヘルプ]])によって確認できなかった編集やその他のイベント。",
"apihelp-abusefilterevalexpression-description": "不正利用フィルターの式を評価します。",
"apihelp-abusefilterevalexpression-param-expression": "評価する式。",
"apihelp-abusefilterevalexpression-example-1": "簡単な式を評価します",
@@ -437,5 +466,8 @@
"apihelp-query+abuselog-param-limit": "一覧表示する項目の最大量。",
"apihelp-query+abuselog-param-prop": "取得するプロパティ。",
"apihelp-query+abuselog-example-1": "最近の不正利用記録を表示する",
- "apihelp-query+abuselog-example-2": "[[API]] の最近の記録項目を表示する"
+ "apihelp-query+abuselog-example-2": "[[API]] の最近の記録項目を表示する",
+ "apierror-abusefilter-canttest": "不正利用フィルターをテストする権限がありません。",
+ "apierror-abusefilter-cantcheck": "不正利用フィルターの構文を確認する権限がありません。",
+ "apierror-abusefilter-badsyntax": "フィルターの構文が無効です。"
}
diff --git a/www/wiki/extensions/AbuseFilter/i18n/jv.json b/www/wiki/extensions/AbuseFilter/i18n/jv.json
index 1a5cb2d4..4a7dc270 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/jv.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/jv.json
@@ -114,7 +114,6 @@
"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:",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/ka.json b/www/wiki/extensions/AbuseFilter/i18n/ka.json
index a7f3c711..734c9f16 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ka.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ka.json
@@ -128,7 +128,6 @@
"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:",
@@ -375,7 +374,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/www/wiki/extensions/AbuseFilter/i18n/kg.json b/www/wiki/extensions/AbuseFilter/i18n/kg.json
index f247d0c3..fb7757cb 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/kg.json
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/i18n/kk-cyrl.json b/www/wiki/extensions/AbuseFilter/i18n/kk-cyrl.json
index aeb70e2d..3a27087f 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/kk-cyrl.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/kk-cyrl.json
@@ -134,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": "Қатысушыны және/немесе IP мекен жайды өңдеуден бұғаттау",
@@ -276,7 +275,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/www/wiki/extensions/AbuseFilter/i18n/ko.json b/www/wiki/extensions/AbuseFilter/i18n/ko.json
index 689c7bb3..0d48434e 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ko.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ko.json
@@ -21,7 +21,10 @@
"Matma Rex",
"Ykhwong",
"Jerrykim306",
- "Delim"
+ "Delim",
+ "Bluemersen",
+ "Tursetic",
+ "Garam"
]
},
"abusefilter-desc": "사용자 편집을 규칙에 따라 자동으로 검사합니다",
@@ -35,7 +38,7 @@
"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,6 +59,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": "비공개된 필터를 볼",
@@ -65,8 +70,14 @@
"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-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,8 +91,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": "편집 필터 기록",
@@ -89,19 +101,27 @@
"abusefilter-log-hidden": "(항목 숨겨짐)",
"abusefilter-log-hidden-implicit": "(특정판이 삭제되어 숨겨짐)",
"abusefilter-log-cannot-see-details": "이 항목의 자세한 내용을 볼 권한이 없습니다.",
+ "abusefilter-log-cannot-see-private-details": "이 항목의 비공개 상세 정보를 볼 권한이 없습니다.",
"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\" 동작을 하여 $4이(가) 작동하였습니다. 조치: $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": "조치",
@@ -132,6 +152,13 @@
"abusefilter-list-options-scope-all": "로컬 및 전역 규칙",
"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-search-rlike": "정규 표현식",
+ "abusefilter-list-options-search-irlike": "대소문자 구별을 하지 않는 정규 표현식",
+ "abusefilter-list-regexerror": "검색 중 오류가 발생했습니다: 정규 표현식 문법 오류.",
"abusefilter-list-options-submit": "적용",
"abusefilter-tools-text": "편집 필터를 제작하고 디버그하는 데 유용한 도구입니다.",
"abusefilter-tools-expr": "구문 검사기",
@@ -150,11 +177,13 @@
"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 +191,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,8 +202,9 @@
"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": "주기:",
@@ -186,11 +217,16 @@
"abusefilter-edit-warn-preview": "선택한 메시지 미리 보기",
"abusefilter-edit-warn-edit": "선택한 메시지를 만들기/편집하기",
"abusefilter-edit-tag-tag": "적용할 [[Special:Tags|태그]] (1줄당 1개씩):",
+ "abusefilter-edit-block-anon-durations": "익명 사용자의 차단 기간:",
+ "abusefilter-edit-block-user-durations": "등록된 사용자의 차단 기간:",
+ "abusefilter-block-anon": "익명 사용자",
+ "abusefilter-block-user": "등록된 사용자",
"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-restricted": "이 필터는 제한된 조치를 포함하므로 편집할 수 없습니다.\n필터를 편집하려면 제한된 조치를 설정할 수 있는 권한을 가진 사용자에게 문의하십시오.",
"abusefilter-edit-viewhistory": "이 필터의 역사 보기",
"abusefilter-edit-history": "역사:",
@@ -215,8 +251,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": "작거나 같음 (<=)",
@@ -240,15 +278,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": "문자열을 정규화하고 검색하면서 여러 개의 부스트링을 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-contains-any": "문자열에서 여러 하위 문자열을 OR 방식으로 검색합니다. (contains_any)",
+ "abusefilter-edit-builder-funcs-contains-all": "문자열에서 여러 하위 문자열을 AND 방식으로 검색합니다. (contains_any)",
"abusefilter-edit-builder-funcs-substr": "하위 문자열",
"abusefilter-edit-builder-funcs-strpos": "문자열 내의 하위 문자열의 위치 (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "문자열을 찾아 바꾸기 (str_replace)",
@@ -257,6 +299,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": "편집에서의 문서 크기 변화",
@@ -297,13 +340,13 @@
"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-old-text-stripped": "편집 전 마크업을 제거한 문서 내용",
"abusefilter-edit-builder-vars-old-links": "편집하기 전의 문서 링크",
"abusefilter-edit-builder-vars-old-html": "HTML로 변환된 편집 전 문서 내용",
"abusefilter-edit-builder-vars-minor-edit": "사소한 편집으로 표시할지의 여부",
@@ -314,6 +357,7 @@
"abusefilter-edit-builder-vars-file-width": "파일의 너비 (단위: 픽셀)",
"abusefilter-edit-builder-vars-file-height": "파일의 높이 (단위: 픽셀)",
"abusefilter-edit-builder-vars-file-bits-per-channel": "파일의 컬러 채널 당 비트",
+ "abusefilter-edit-block-options": "차단 옵션:",
"abusefilter-filter-log": "최근 필터의 바뀜",
"abusefilter-history": "편집 필터 #$1의 편집 역사",
"abusefilter-history-foruser": "$1의 편집",
@@ -332,6 +376,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": "요청한 필터는 비공개되어 있어 필터의 역사를 볼 수 없습니다.",
@@ -365,8 +410,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",
@@ -410,7 +456,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,6 +472,14 @@
"abusefilter-import-submit": "데이터 가져오기",
"abusefilter-group-default": "기본값",
"abusefilter-http-error": "HTTP 오류가 발생했습니다: $1",
+ "abusefilter-view-private-submit": "비공개 상세 정보 보기",
+ "abusefilter-view-private": "비공개 상세 정보 보기",
+ "abusefilter-view-private-reason": "비공개 상세 정보에 접근하는 이유:",
+ "abusefilter-log-details-id": "기록 ID",
+ "log-description-abusefilterprivatedetails": "이 기록은 사용자가 편집 기록의 비공개 상세 정보에 접근한 시간을 나열합니다.",
+ "abusefilter-noreason": "경고: 이 기록의 비공개 상세 정보를 보려면 이유를 지정해야 합니다.",
+ "abusefilter-log-ip-not-available": "사용할 수 없음",
+ "tag-abusefilter-condition-limit": "조건 제한에 도달했습니다",
"apihelp-abusefiltercheckmatch-description": "편집 필터가 변수 집합, 편집자가 기록한 편집 필터 이벤트와 일치하는지 확인합니다.\n\nvars, rcid 또는 logid가 필요하지만 오직 하나만 사용할 수 있습니다.",
"apihelp-abusefiltercheckmatch-summary": "편집 필터가 변수 집합, 편집자가 기록한 편집 필터 이벤트와 일치하는지 확인합니다.",
"apihelp-abusefiltercheckmatch-extended-description": "vars, rcid, 또는 logid가 필요하지만 오직 하나만 사용할 수 있습니다.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/ksh.json b/www/wiki/extensions/AbuseFilter/i18n/ksh.json
index 2f7979ea..c81444b8 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ksh.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ksh.json
@@ -129,7 +129,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 +147,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",
@@ -387,7 +385,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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/lad.json b/www/wiki/extensions/AbuseFilter/i18n/lad.json
index b34393da..9a3779f4 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/lad.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/lad.json
@@ -32,7 +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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/lb.json b/www/wiki/extensions/AbuseFilter/i18n/lb.json
index 747a8da4..b10e6767 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/lb.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/lb.json
@@ -47,7 +47,12 @@
"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-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,11 @@
"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",
@@ -131,7 +139,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 +149,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",
@@ -161,6 +172,10 @@
"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-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",
+ "abusefilter-block-user": "registréiert Benotzer",
"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 +204,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 +241,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",
@@ -256,7 +273,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",
@@ -274,6 +291,7 @@
"abusefilter-edit-builder-vars-file-size": "Gréisst vum Fichier a Bytes",
"abusefilter-edit-builder-vars-file-width": "Breet vum Fichier a Pixel",
"abusefilter-edit-builder-vars-file-height": "Héicht vum Fichier a Pixel",
+ "abusefilter-edit-block-options": "Spär-Optiounen",
"abusefilter-filter-log": "Rezent Ännerunge vu Filteren",
"abusefilter-history": "Historique vun den Ännerunge vum Mëssbrauchsfilter #$1",
"abusefilter-history-foruser": "Ännerunge vum $1",
@@ -292,6 +310,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 +340,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",
@@ -381,6 +401,9 @@
"abusefilter-import-submit": "Donnéeën importéieren",
"abusefilter-group-default": "Standard",
"abusefilter-http-error": "Et ass en HTTP-Feeler geschitt: $1.",
+ "abusefilter-view-private-submit": "Privat Detailer weisen",
+ "abusefilter-view-private": "Privat Detailer weisen",
+ "abusefilter-log-ip-not-available": "Net disponibel",
"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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/li.json b/www/wiki/extensions/AbuseFilter/i18n/li.json
index 1e823faf..8716d4cc 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/li.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/li.json
@@ -114,7 +114,6 @@
"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:",
@@ -132,7 +131,6 @@
"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",
@@ -258,7 +256,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",
@@ -351,7 +349,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/www/wiki/extensions/AbuseFilter/i18n/lt.json b/www/wiki/extensions/AbuseFilter/i18n/lt.json
index a5c84256..3e93246f 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/lt.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/lt.json
@@ -11,7 +11,9 @@
"Tomasdd",
"Vogone",
"Vpovilaitis",
- "Matma Rex"
+ "Matma Rex",
+ "Manvydasz",
+ "Hugo.arg"
]
},
"abusefilter-desc": "Pakeitimų tikrinimui naudojamas automatinis euristinis tikrinimas",
@@ -19,8 +21,8 @@
"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",
@@ -58,7 +60,7 @@
"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-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",
@@ -136,7 +138,6 @@
"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-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 +145,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",
@@ -173,6 +173,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": "anoniminiai naudotojai",
+ "abusefilter-block-user": "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",
@@ -266,7 +268,7 @@
"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-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",
@@ -391,7 +393,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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/lv.json b/www/wiki/extensions/AbuseFilter/i18n/lv.json
index 007ff91a..3fedf731 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/lv.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/lv.json
@@ -7,7 +7,8 @@
"Nemo bis",
"Edgars2007",
"Matma Rex",
- "Silraks"
+ "Silraks",
+ "Zuiks"
]
},
"abusefilter-desc": "Pielieto automātiskas heiristikas labojumiem",
@@ -18,7 +19,7 @@
"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",
@@ -68,13 +69,16 @@
"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",
@@ -107,6 +111,7 @@
"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 +130,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 +143,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",
@@ -320,7 +327,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",
@@ -360,5 +367,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/www/wiki/extensions/AbuseFilter/i18n/mai.json b/www/wiki/extensions/AbuseFilter/i18n/mai.json
index e32792a6..590d5df0 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/mai.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/mai.json
@@ -228,7 +228,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": "न्यूनतम जानकारी",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/map-bms.json b/www/wiki/extensions/AbuseFilter/i18n/map-bms.json
index acbf5ce5..1e2bd553 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/map-bms.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/map-bms.json
@@ -115,7 +115,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 (-)",
@@ -181,7 +180,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/www/wiki/extensions/AbuseFilter/i18n/mg.json b/www/wiki/extensions/AbuseFilter/i18n/mg.json
index f45ad915..6d724b98 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/mg.json
+++ b/www/wiki/extensions/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,19 @@
"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-log-hide-forbidden": "Tsy manana zo hanafina ny laogim-panararaotana ianao.",
"abusefilter-logentry-suppress": "nanitrika [ny] [[$1]]",
"abusefilter-logentry-unsuppress": "nanala ny fanitrihana [an'i] [[$1]]",
+ "abusefilterprivatedetails-log-name": "Antsipirihany tsiambaratelon'ny laogim-pamakian'i AbuseFilter",
"abusefilter-list": "Sivana rehetra",
"abusefilter-list-id": "Laharan'ny sivana",
"abusefilter-list-status": "Sata",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/min.json b/www/wiki/extensions/AbuseFilter/i18n/min.json
index e4345841..1a3f2b1e 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/min.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/min.json
@@ -109,7 +109,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/www/wiki/extensions/AbuseFilter/i18n/mk.json b/www/wiki/extensions/AbuseFilter/i18n/mk.json
index f7790e8a..20e53753 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/mk.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/mk.json
@@ -26,6 +26,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 +39,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 +51,16 @@
"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)",
@@ -66,8 +74,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": "дневник на злоупотреби",
@@ -75,6 +84,7 @@
"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": "Една или повеќе од филтерските назнаки што ги укажавте се лични. Бидејќи не ви е дозволено да ги разгледувате подробностите за личните филтри, овие филтри не се употребени при пребарувањето.",
@@ -82,13 +92,20 @@
"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 го {{GENDER:$2|предизвика}} $4, {{GENDER:$2|извршувајќи}} го дејството „$5“ на $3. Извршени постапки: $6 ($7)",
+ "log-action-filter-abusefilter": "Вид промена во филтерот:",
+ "log-action-filter-abusefilter-create": "Создавање на нов филтер",
+ "log-action-filter-abusefilter-modify": "Измена во филтер",
+ "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 +136,13 @@
"abusefilter-list-options-scope-all": "Месни и глобални правила",
"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-search-rlike": "Регуларен израз",
+ "abusefilter-list-options-search-irlike": "Големинскоразликувачки регуларен израз",
+ "abusefilter-list-regexerror": "Се појави грешка при пребарувањето: Грешка во синтаксата на регуларниот израз.",
"abusefilter-list-options-submit": "Поднови",
"abusefilter-tools-text": "Еве некои алатки кои можат да помогнат со форматирање и отстранување грешки во филтрите за злоупотреби.",
"abusefilter-tools-expr": "Проверка на изрази",
@@ -141,7 +165,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 +175,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,8 +186,9 @@
"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": "Временски период:",
@@ -173,11 +201,16 @@
"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-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-restricted": "Не можете да го уредувате овој филтер бидејќи содржи еден или повеќе ограничени дејствија.\nПобарајте овие промени за вас да ги направи некој корисник со дозвола за додавање на ограничени дејства.",
"abusefilter-edit-viewhistory": "Преглед на историјата на филтерот",
"abusefilter-edit-history": "Историја:",
@@ -189,7 +222,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 +235,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,15 +262,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": "Нормализирај и пребарај низа со повеќе поднизи во 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-substr": "Подниза (substr)",
"abusefilter-edit-builder-funcs-strpos": "Позиција на поднизата во низата (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Замени ја поднизата со низа (str_replace)",
@@ -244,6 +283,7 @@
"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": "Големинска промена со уредувањето",
@@ -276,6 +316,10 @@
"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": "Сите надворешни врски отстранети во уредувањето",
@@ -285,14 +329,22 @@
"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": "Големина на податотеката во бајти",
@@ -301,6 +353,7 @@
"abusefilter-edit-builder-vars-file-width": "Ширина на податотеката во пиксели",
"abusefilter-edit-builder-vars-file-height": "Висина на податотеката во пиксели",
"abusefilter-edit-builder-vars-file-bits-per-channel": "Битови по боен канал на податотеката",
+ "abusefilter-edit-block-options": "Можности за блокирање:",
"abusefilter-filter-log": "Скорешни промени во филтери",
"abusefilter-history": "Историја на промените во Филтерот за злоупотреби #$1",
"abusefilter-history-foruser": "Промени од $1",
@@ -312,13 +365,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": "Побараниот филтер е скриен, и затоа не можете да ја гледате неговата историја.",
@@ -337,6 +391,7 @@
"abusefilter-exception-overridebuiltin": "Недозволено поклопување на вградена променлива „$2“ кај знакот $1.",
"abusefilter-exception-outofbounds": "Барање за непостоечка ставка во списокот $2 (големина на списокот = $3) кај знакот $1.",
"abusefilter-exception-notlist": "Барање на елемент од стројот за објект кој не е строј кај знакот $1.",
+ "abusefilter-exception-unclosedcomment": "Незатворена прибелешка кај знакот $1.",
"abusefilter-action-tag": "Ознака",
"abusefilter-action-throttle": "Стесни",
"abusefilter-action-warn": "Предупреди",
@@ -352,8 +407,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",
@@ -397,6 +453,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,6 +469,17 @@
"abusefilter-import-submit": "Увези податоци",
"abusefilter-group-default": "По основно",
"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": "Недостапна",
+ "tag-abusefilter-condition-limit": "достигната условната граница",
+ "tag-abusefilter-condition-limit-description": "Уредувањата или другите настани не можеа да се проверат од сите активни [[Special:AbuseFilter|филтри на злоупотреби]] ([[mw:Extension:AbuseFilter/Conditions|помош]]).",
"apihelp-abusefiltercheckmatch-description": "Проверете дали филтер за злоупотреби ќе најде збир променливи. Овој настан на филтерот го заведува корисникот.\n\nСе бара vars, rcid или logid (може да се употреби само едно).",
"apihelp-abusefiltercheckmatch-summary": "Проверете дали филтерот пронаоѓа даден збир променливи, дејство заведено од уредник.",
"apihelp-abusefiltercheckmatch-extended-description": "Се бара vars, rcid иили logid (може да се употреби само едно од нив).",
@@ -451,6 +519,7 @@
"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": "Немате дозвола да испробувате филтри на злоупотреба.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/ml.json b/www/wiki/extensions/AbuseFilter/i18n/ml.json
index e9356a66..f29c9317 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ml.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ml.json
@@ -130,7 +130,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 +148,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": "ഉപയോക്താവിനെ ഒപ്പം/അല്ലെങ്കിൽ ഐ.പി. വിലാസത്തെ തിരുത്തുന്നതിൽ നിന്നും തടയുക",
@@ -381,7 +379,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/www/wiki/extensions/AbuseFilter/i18n/mr.json b/www/wiki/extensions/AbuseFilter/i18n/mr.json
index c3237e5a..d568675b 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/mr.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/mr.json
@@ -8,7 +8,10 @@
"V.narsikar",
"Ydyashad",
"संतोष दहिवळ",
- "Matma Rex"
+ "Matma Rex",
+ "Pushkar Ekbote",
+ "Sureshkhole",
+ "Susheelkasab"
]
},
"abusefilter-desc": "संपादन गाळणी सर्व संपादनांचा सांगितल्याप्रमाणे स्वयंशोध घेते.",
@@ -16,7 +19,7 @@
"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 +55,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",
@@ -135,7 +144,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,10 +162,10 @@
"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": "संपादनास, पुढील समीक्षणाकरता खूण करा",
@@ -271,6 +279,7 @@
"abusefilter-edit-builder-vars-minor-edit": "संपादनातील बदल छोटा म्हणून दर्शविला जातो आहे अथवा नाही",
"abusefilter-edit-builder-vars-file-sha1": "संचिका मजकुराचा SHA1 hash",
"abusefilter-edit-builder-vars-file-size": "संचिकेचा आकार बाईटमध्ये",
+ "abusefilter-edit-block-options": "अडवणूकीचे पर्याय",
"abusefilter-filter-log": "गाळण्यांचे अलिकडील बदल",
"abusefilter-history": "संपादन गाळणी #$1 करिता बदलांचा इतिहास",
"abusefilter-history-foruser": "$1 सदस्याचे बदल",
@@ -360,7 +369,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/www/wiki/extensions/AbuseFilter/i18n/ms.json b/www/wiki/extensions/AbuseFilter/i18n/ms.json
index cbe82718..30f5d9d1 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ms.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ms.json
@@ -136,7 +136,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:",
@@ -386,7 +385,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/www/wiki/extensions/AbuseFilter/i18n/mt.json b/www/wiki/extensions/AbuseFilter/i18n/mt.json
index 2ca8e74b..e44c9c6c 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/mt.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/mt.json
@@ -131,7 +131,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 +149,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",
@@ -361,7 +359,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/www/wiki/extensions/AbuseFilter/i18n/mwl.json b/www/wiki/extensions/AbuseFilter/i18n/mwl.json
index 26dd5aec..3fd139f5 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/mwl.json
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/i18n/nb.json b/www/wiki/extensions/AbuseFilter/i18n/nb.json
index 378b3628..8f8e38cd 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/nb.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/nb.json
@@ -15,7 +15,8 @@
"Jeblad",
"Chameleon222",
"Matma Rex",
- "Jon Harald Søby"
+ "Jon Harald Søby",
+ "Imre Eilertsen"
]
},
"abusefilter-desc": "Legger til automatisk heuristikk til redigeringer.",
@@ -100,6 +101,7 @@
"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",
@@ -130,6 +132,7 @@
"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-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",
@@ -153,6 +156,7 @@
"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 +164,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,7 +176,7 @@
"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:",
@@ -237,11 +242,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)",
@@ -423,6 +430,7 @@
"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-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.",
@@ -439,6 +447,7 @@
"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.",
@@ -451,6 +460,7 @@
"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.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/nds.json b/www/wiki/extensions/AbuseFilter/i18n/nds.json
index bdeea7a8..3b7bba8d 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/nds.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/nds.json
@@ -101,7 +101,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 +118,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",
@@ -332,7 +330,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/www/wiki/extensions/AbuseFilter/i18n/nl.json b/www/wiki/extensions/AbuseFilter/i18n/nl.json
index f3ce163a..9ad2c4cc 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/nl.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/nl.json
@@ -22,7 +22,8 @@
"Jeleniccz",
"Mainframe98",
"QZanden",
- "Festina90"
+ "Festina90",
+ "Mar(c)"
]
},
"abusefilter-desc": "Voert automatisch heuristische analyse uit op bewerkingen",
@@ -30,11 +31,11 @@
"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,16 @@
"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-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)",
@@ -86,6 +93,7 @@
"abusefilter-log-details-vars": "Maatregelparameters",
"abusefilter-log-details-private": "Beperkt zichtbare gegevens",
"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",
@@ -104,6 +112,8 @@
"abusefilter-logentry-suppress": "heeft [[$1]] verborgen",
"abusefilter-logentry-unsuppress": "heeft [[$1]] 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",
@@ -155,6 +165,7 @@
"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:",
@@ -176,8 +187,9 @@
"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:",
@@ -206,7 +218,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",
@@ -243,6 +255,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)",
@@ -317,6 +331,7 @@
"abusefilter-edit-builder-vars-file-width": "Breedte van het bestand in pixels",
"abusefilter-edit-builder-vars-file-height": "De hoogte van het bestand in pixels",
"abusefilter-edit-builder-vars-file-bits-per-channel": "Bits per kleurkanaal van het bestand",
+ "abusefilter-edit-block-options": "Blokkeringsopties:",
"abusefilter-filter-log": "Recente filterwijzigingen",
"abusefilter-history": "Geschiedenis voor het filter #$1",
"abusefilter-history-foruser": "Wijzigingen door $1",
@@ -335,6 +350,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.",
@@ -413,6 +429,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,7 +445,11 @@
"abusefilter-import-submit": "Filtergegevens importeren",
"abusefilter-group-default": "Standaard",
"abusefilter-http-error": "Er is een HTTP-fout opgetreden: $1.",
+ "abusefilter-view-private-reason": "Reden voor het opvragen van privélogboekgegevens:",
+ "abusefilter-log-details-id": "Logboekregel-ID",
+ "abusefilter-log-ip-not-available": "Niet beschikbaar",
"apihelp-abusefiltercheckmatch-description": "Controleer of een filter overeenkomt met een verzameling variabelen, via tekstverwerker gelogde misbruikfiltergebeurtenis.",
+ "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.",
@@ -465,6 +486,7 @@
"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.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/nn.json b/www/wiki/extensions/AbuseFilter/i18n/nn.json
index 125a06a5..a74068fd 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/nn.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/nn.json
@@ -13,7 +13,7 @@
"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",
@@ -129,7 +129,6 @@
"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-new": "Nytt filter",
"abusefilter-edit-save": "Lagra filter",
"abusefilter-edit-id": "Filter-ID:",
@@ -148,7 +147,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",
@@ -219,25 +217,27 @@
"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",
@@ -261,6 +261,7 @@
"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 +282,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",
@@ -376,7 +382,7 @@
"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-modify": "$1 {{GENDER:$2|endra}} $4 ($5)",
"abusefilter-log-noresults": "Ingen resultat",
"abusefilter-diff-title": "Skilnader mellom versjonar",
"abusefilter-diff-item": "Element",
@@ -389,5 +395,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/www/wiki/extensions/AbuseFilter/i18n/oc.json b/www/wiki/extensions/AbuseFilter/i18n/oc.json
index 4bf1c8a5..9ce88c41 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/oc.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/oc.json
@@ -2,7 +2,9 @@
"@metadata": {
"authors": [
"Cedric31",
- "Matma Rex"
+ "Matma Rex",
+ "Unuaiga",
+ "Guilhelma"
]
},
"abusefilter-desc": "Aplica d'euristicas automaticas a las modificacions",
@@ -70,11 +72,13 @@
"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-log-hide-reason-other": "Autra rason / rason suplementària :",
"abusefilter-logentry-suppress": "a amagat [[$1]]",
"abusefilter-logentry-unsuppress": "a desamagat [[$1]]",
"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",
@@ -104,6 +108,13 @@
"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 +133,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",
@@ -163,6 +175,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 +200,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 (<=)",
@@ -323,8 +337,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 +382,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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/or.json b/www/wiki/extensions/AbuseFilter/i18n/or.json
index c0de91d6..319935fc 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/or.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/or.json
@@ -116,7 +116,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 +132,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 ଠିକଣାକୁ ଅଟକାଇବେ",
@@ -333,7 +331,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/www/wiki/extensions/AbuseFilter/i18n/pam.json b/www/wiki/extensions/AbuseFilter/i18n/pam.json
index 7d9e9a44..7146bffb 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/pam.json
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/i18n/pfl.json b/www/wiki/extensions/AbuseFilter/i18n/pfl.json
index 1db66408..7318fccc 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/pfl.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/pfl.json
@@ -127,7 +127,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 +145,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",
@@ -372,7 +370,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/www/wiki/extensions/AbuseFilter/i18n/pl.json b/www/wiki/extensions/AbuseFilter/i18n/pl.json
index a149db51..49c4a7a8 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/pl.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/pl.json
@@ -24,7 +24,9 @@
"Halibutt",
"Openbk",
"The Polish",
- "InternerowyGołąb"
+ "InternerowyGołąb",
+ "Ankam",
+ "Railfail536"
]
},
"abusefilter-desc": "Zastosowanie automatycznej heurystyki do edycji",
@@ -46,6 +48,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 +61,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 +73,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,8 +96,9 @@
"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ć",
@@ -92,19 +106,28 @@
"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-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]]",
"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",
@@ -135,6 +158,9 @@
"abusefilter-list-options-scope-all": "Zasady lokalne i globalne",
"abusefilter-list-options-disabled": "Wyłączone filtry:",
"abusefilter-list-options-hidedisabled": "ukryj wyłączone filtry",
+ "abusefilter-list-options-searchpattern": "Wstaw wzór",
+ "abusefilter-list-options-search-rlike": "Wyrażenie regularne",
+ "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ń",
@@ -153,11 +179,13 @@
"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 +193,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",
@@ -176,7 +205,7 @@
"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-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",
@@ -189,6 +218,10 @@
"abusefilter-edit-warn-preview": "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-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": "użytkownicy niezalogowani",
+ "abusefilter-block-user": "zarejestrowani użytkownicy",
"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",
@@ -315,6 +348,7 @@
"abusefilter-edit-builder-vars-file-width": "Szerokość pliku w pikselach",
"abusefilter-edit-builder-vars-file-height": "Wysokość pliku w pikselach",
"abusefilter-edit-builder-vars-file-bits-per-channel": "Liczba bitów na kanał kolorów pliku",
+ "abusefilter-edit-block-options": "Opcje blokowania:",
"abusefilter-filter-log": "Ostatnie zmiany ustawień filtru",
"abusefilter-history": "Historia zmian dla filtru nr $1",
"abusefilter-history-foruser": "Zmiany wykonane przez $1",
@@ -333,6 +367,7 @@
"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.",
@@ -411,6 +446,8 @@
"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",
@@ -425,6 +462,9 @@
"abusefilter-import-submit": "Importuj dane",
"abusefilter-group-default": "Domyślne",
"abusefilter-http-error": "Wystąpił błąd HTTP: $1.",
+ "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",
"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ć.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/pms.json b/www/wiki/extensions/AbuseFilter/i18n/pms.json
index 7043c70e..c9735f07 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/pms.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/pms.json
@@ -128,7 +128,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 +146,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é",
@@ -372,7 +370,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/www/wiki/extensions/AbuseFilter/i18n/pt-br.json b/www/wiki/extensions/AbuseFilter/i18n/pt-br.json
index fc68ea5e..25406e82 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/pt-br.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/pt-br.json
@@ -25,7 +25,8 @@
"Matma Rex",
"TheEduGobi",
"!Silent",
- "Felipe L. Ewald"
+ "Felipe L. Ewald",
+ "Eduardo Addad de Oliveira"
]
},
"abusefilter-desc": "Aplica heurísticas automáticas às edições",
@@ -47,6 +48,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 +61,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 +73,16 @@
"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-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,8 +96,9 @@
"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",
@@ -92,6 +106,7 @@
"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-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.",
@@ -99,13 +114,20 @@
"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]]”",
"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",
+ "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",
@@ -136,6 +158,13 @@
"abusefilter-list-options-scope-all": "Regras globais e locais",
"abusefilter-list-options-disabled": "Filtros desativados:",
"abusefilter-list-options-hidedisabled": "Ocultar filtros desativados",
+ "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,7 +172,7 @@
"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.",
@@ -154,11 +183,13 @@
"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 +197,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,8 +208,9 @@
"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:",
@@ -190,11 +223,16 @@
"abusefilter-edit-warn-preview": "Prever mensagem selecionada",
"abusefilter-edit-warn-edit": "Criar/editar mensagem selecionada",
"abusefilter-edit-tag-tag": "[[Special:Tags|Etiquetas]] a aplicar (uma por linha):",
+ "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": "usuários anônimos",
+ "abusefilter-block-user": "usuários registrados",
"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-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 +244,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 +257,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,15 +284,19 @@
"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-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)",
@@ -261,6 +305,7 @@
"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",
@@ -293,6 +338,10 @@
"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",
@@ -307,6 +356,14 @@
"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",
@@ -318,6 +375,7 @@
"abusefilter-edit-builder-vars-file-width": "Largura do arquivo em pixels",
"abusefilter-edit-builder-vars-file-height": "Altura do arquivo em pixels",
"abusefilter-edit-builder-vars-file-bits-per-channel": "Bits por canal de cor do arquivo",
+ "abusefilter-edit-block-options": "Opções de bloqueio:",
"abusefilter-filter-log": "Modificações recentes de filtros",
"abusefilter-history": "Histórico de modificações do Filtro de Abusos #$1",
"abusefilter-history-foruser": "Modificações por $1",
@@ -336,6 +394,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.",
@@ -354,6 +413,7 @@
"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-unclosedcomment": "Comentário por fechar, no caráter $1.",
"abusefilter-action-tag": "Etiquetar",
"abusefilter-action-throttle": "Limitador",
"abusefilter-action-warn": "Avisar",
@@ -369,8 +429,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",
@@ -414,7 +475,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,6 +491,17 @@
"abusefilter-import-submit": "Importar dados",
"abusefilter-group-default": "Padrão",
"abusefilter-http-error": "Ocorreu um erro HTTP: $1.",
+ "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",
+ "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]]).",
"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.",
@@ -468,6 +541,7 @@
"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.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/pt.json b/www/wiki/extensions/AbuseFilter/i18n/pt.json
index 440021c8..3b15c264 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/pt.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/pt.json
@@ -24,7 +24,9 @@
"He7d3r",
"Opraco",
"Matma Rex",
- "Mansil"
+ "Mansil",
+ "Athena in Wonderland",
+ "Daimona Eaytoy"
]
},
"abusefilter-desc": "Aplica heurísticas automáticas às edições.",
@@ -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,10 +73,16 @@
"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-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)",
@@ -86,8 +96,9 @@
"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",
@@ -95,6 +106,7 @@
"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-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.",
@@ -102,13 +114,20 @@
"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]]",
"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",
+ "logentry-abusefilterprivatedetails-access": "$1 {{GENDER:$2|acedeu}} os 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",
@@ -139,6 +158,13 @@
"abusefilter-list-options-scope-all": "Regras locais e globais",
"abusefilter-list-options-disabled": "Filtros desativados:",
"abusefilter-list-options-hidedisabled": "Ocultar filtros desativados",
+ "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",
@@ -161,7 +187,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 +197,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,8 +208,9 @@
"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:",
@@ -193,11 +223,16 @@
"abusefilter-edit-warn-preview": "Antever mensagem selecionada",
"abusefilter-edit-warn-edit": "Criar/editar mensagem selecionada",
"abusefilter-edit-tag-tag": "[[Special:Tags|Etiquetas]] a aplicar (uma por linha):",
+ "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": "utilizadores anónimos",
+ "abusefilter-block-user": "utilizadores registados",
"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-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 +244,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,8 +257,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 ou igual a (<=)",
@@ -246,15 +283,19 @@
"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-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)",
@@ -263,6 +304,7 @@
"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",
@@ -295,9 +337,13 @@
"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-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",
"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",
@@ -309,9 +355,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",
"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",
@@ -320,6 +374,7 @@
"abusefilter-edit-builder-vars-file-width": "Largura do ficheiro em píxeis",
"abusefilter-edit-builder-vars-file-height": "Altura do ficheiro em píxeis",
"abusefilter-edit-builder-vars-file-bits-per-channel": "Bits por canal de cor do ficheiro",
+ "abusefilter-edit-block-options": "Opções de bloqueio:",
"abusefilter-filter-log": "Modificações recentes de filtros",
"abusefilter-history": "Histórico de modificações do Filtro de Abusos #$1",
"abusefilter-history-foruser": "Modificações por $1",
@@ -338,6 +393,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.",
@@ -356,6 +412,7 @@
"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-unclosedcomment": "Comentário por fechar, no caráter $1.",
"abusefilter-action-tag": "Etiquetar",
"abusefilter-action-throttle": "Limitador",
"abusefilter-action-warn": "Avisar",
@@ -371,8 +428,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",
@@ -416,6 +474,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,6 +490,17 @@
"abusefilter-import-submit": "Importar dados",
"abusefilter-group-default": "Padrão",
"abusefilter-http-error": "Ocorreu um erro HTTP: $1.",
+ "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",
+ "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]]).",
"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).",
@@ -470,6 +540,7 @@
"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.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/qqq.json b/www/wiki/extensions/AbuseFilter/i18n/qqq.json
index 4b445ffb..5c7ca6bd 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/qqq.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/qqq.json
@@ -33,7 +33,9 @@
"Liuxinyu970226",
"Legoktm",
"Pikne",
- "Amire80"
+ "Amire80",
+ "Ankam",
+ "Daimona Eaytoy"
]
},
"abusefilter-desc": "{{desc|name=Abuse Filter|url=https://www.mediawiki.org/wiki/Extension:AbuseFilter}}",
@@ -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,16 @@
"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-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,6 +107,7 @@
"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}}",
@@ -104,21 +115,28 @@
"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-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.",
"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}}",
+ "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.",
@@ -149,6 +167,13 @@
"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-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.",
@@ -171,7 +196,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,6 +206,7 @@
"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",
@@ -189,6 +217,7 @@
"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}}",
@@ -203,11 +232,16 @@
"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-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",
+ "abusefilter-block-user": "Specification for type of block",
"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-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}}",
@@ -233,7 +267,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,15 +293,19 @@
"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-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}}.",
@@ -274,6 +314,7 @@
"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}}.",
@@ -290,7 +331,7 @@
"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-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-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-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-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}}.",
@@ -306,6 +347,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 +365,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}}.",
@@ -331,6 +384,7 @@
"abusefilter-edit-builder-vars-file-width": "This variable contains the width of the file in pixels",
"abusefilter-edit-builder-vars-file-height": "This variable contains the height of the file in pixels",
"abusefilter-edit-builder-vars-file-bits-per-channel": "This variable contains the number of bits per color channel of the file",
+ "abusefilter-edit-block-options": "Label for the checkbox for block options",
"abusefilter-filter-log": "Used as page title.",
"abusefilter-history": "Used as page title.\n\n\"Change history\" is the \"history of changes\"\n\nParameters:\n* $1 - filter ID\n\nIf the filter ID is not specified, {{msg-mw|Abusefilter-filter-log}} will be used.",
"abusefilter-history-foruser": "Parameters:\n* $1 - a link to the changing user's page\n* $2 - (Optional) the plain text username",
@@ -349,6 +403,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.",
@@ -367,6 +422,7 @@
"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-unclosedcomment": "Error message from the abuse filter parser. Parameters:\n* $1 - Position in the string",
"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 +430,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",
@@ -427,6 +484,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,6 +500,17 @@
"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.",
+ "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}}",
+ "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",
"apihelp-abusefiltercheckmatch-description": "{{doc-apihelp-description|abusefiltercheckmatch}}",
"apihelp-abusefiltercheckmatch-summary": "{{doc-apihelp-summary|abusefiltercheckmatch}}",
"apihelp-abusefiltercheckmatch-extended-description": "{{doc-apihelp-extended-description|abusefiltercheckmatch}}",
@@ -481,6 +550,7 @@
"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}}",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/ro.json b/www/wiki/extensions/AbuseFilter/i18n/ro.json
index 023d8958..36342fc7 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ro.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ro.json
@@ -56,8 +56,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",
@@ -137,7 +142,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 +160,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",
@@ -290,6 +293,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",
@@ -386,7 +392,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",
@@ -401,11 +407,16 @@
"abusefilter-import-submit": "Importă datele",
"abusefilter-group-default": "Implicit",
"abusefilter-http-error": "A apărut o eroare HTTP: $1.",
+ "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-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/www/wiki/extensions/AbuseFilter/i18n/roa-tara.json b/www/wiki/extensions/AbuseFilter/i18n/roa-tara.json
index 66f5979b..6df40e63 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/roa-tara.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/roa-tara.json
@@ -160,7 +160,7 @@
"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:",
@@ -227,11 +227,13 @@
"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 (ccnorm_contains_any)",
"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)",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/ru.json b/www/wiki/extensions/AbuseFilter/i18n/ru.json
index 3bc45afe..fd689086 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ru.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ru.json
@@ -26,28 +26,36 @@
"Cat1987",
"Туллук",
"Facenapalm",
- "Redredsonia"
+ "Redredsonia",
+ "Putnik",
+ "Smigles",
+ "Mouse21",
+ "Patrick Star",
+ "Happy13241",
+ "Jack who built the house",
+ "Ole Yves"
]
},
"abusefilter-desc": "Позволяет применять автоматические эвристические фильтры к правкам",
"abusefilter": "Настройка фильтра злоупотреблений",
"abuselog": "Журнал злоупотреблений",
- "abusefilter-intro": "Добро пожаловать на страницу управления фильтром злоупотреблений.\nФильтр злоупотреблений представляет собой автоматизированный механизм применения эвристик к действиям участников.\nЗдесь приведён список всех установленных фильтров.",
+ "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-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 +68,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 +77,19 @@
"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-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,8 +103,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": "журнал злоупотреблений",
@@ -97,20 +113,28 @@
"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-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]]",
"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": "Изменение фильтра",
+ "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 +146,7 @@
"abusefilter-list-lastmodified": "Последнее изменение",
"abusefilter-list-group": "Группа фильтра",
"abusefilter-hidden": "Скрытый",
- "abusefilter-unhidden": "Общедоступное",
+ "abusefilter-unhidden": "Общедоступный",
"abusefilter-enabled": "Включён",
"abusefilter-deleted": "Удалён",
"abusefilter-disabled": "Выключен",
@@ -141,6 +165,13 @@
"abusefilter-list-options-scope-all": "Локальные и глобальные правила",
"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-search-rlike": "Регулярное выражение",
+ "abusefilter-list-options-search-irlike": "Нечувствительное к регистру регулярное выражение",
+ "abusefilter-list-regexerror": "Во время поиска произошла ошибка: Синтаксическая ошибка регулярного выражения.",
"abusefilter-list-options-submit": "Обновить",
"abusefilter-tools-text": "Здесь находятся некоторые инструменты, которые могут помочь в формулировании и отладке фильтров злоупотреблений.",
"abusefilter-tools-expr": "Проверка выражения",
@@ -159,11 +190,13 @@
"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 +204,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,8 +215,9 @@
"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": "Отрезок времени:",
@@ -195,11 +230,16 @@
"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-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-restricted": "Вы не можете изменить этот фильтр, так как он содержит одно или несколько ограничивающих действий. Пожалуйста, попросите участника с соответствующими правами сделать требуемые изменения.",
"abusefilter-edit-viewhistory": "Показать историю этого фильтра",
"abusefilter-edit-history": "История:",
@@ -224,8 +264,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": "Меньше или равно (<=)",
@@ -249,15 +291,19 @@
"abusefilter-edit-builder-funcs-lcase": "В нижний регистр (lcase)",
"abusefilter-edit-builder-funcs-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-substr": "Подстрока (substr)",
"abusefilter-edit-builder-funcs-strpos": "Положение подстроки в строке (strpos)",
"abusefilter-edit-builder-funcs-str_replace": "Замена подстроки в строке (str_replace)",
@@ -266,13 +312,14 @@
"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": "Описание правки",
@@ -298,12 +345,16 @@
"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": "Новый текст страницы, очищенный от разметки",
@@ -312,9 +363,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,6 +382,7 @@
"abusefilter-edit-builder-vars-file-width": "Ширина файла в пикселях",
"abusefilter-edit-builder-vars-file-height": "Высота файла в пикселях",
"abusefilter-edit-builder-vars-file-bits-per-channel": "Глубина цвета в файле",
+ "abusefilter-edit-block-options": "Параметры блокировки:",
"abusefilter-filter-log": "Последние изменения фильтров",
"abusefilter-history": "История изменений фильтра злоупотреблений #$1",
"abusefilter-history-foruser": "Изменения сделанные $1",
@@ -341,6 +401,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": "Запрашиваемый фильтр скрыт, вы не можете просмотреть его историю.",
@@ -374,8 +435,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",
@@ -419,6 +481,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,12 +491,23 @@
"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.",
+ "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|help]]).",
"apihelp-abusefiltercheckmatch-description": "Проверка, удовлетворяет ли фильтру злоупотреблений набор переменных или событие фильтра злоупотреблений, записанное редактором.\n\nПеременные vars, rcid и logid обязательны, однако только одна из них может быть использована.",
"apihelp-abusefiltercheckmatch-summary": "Проверка, удовлетворяет ли фильтру злоупотреблений набор переменных или событие фильтра злоупотреблений, записанное редактором.",
"apihelp-abusefiltercheckmatch-extended-description": "Переменные vars, rcid и logid обязательны, однако только одна из них может быть использована.",
@@ -473,6 +547,7 @@
"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": "У вас недостаточно прав для проверки фильтров злоупотреблений.",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/rue.json b/www/wiki/extensions/AbuseFilter/i18n/rue.json
index 9b0d629d..51026061 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/rue.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/rue.json
@@ -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 адресу",
@@ -367,7 +365,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/www/wiki/extensions/AbuseFilter/i18n/sah.json b/www/wiki/extensions/AbuseFilter/i18n/sah.json
index 38e228f6..6e72cd2f 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/sah.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/sah.json
@@ -125,7 +125,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 +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-ттан киирэр киһи ону маны уларытарын боборго",
@@ -366,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/www/wiki/extensions/AbuseFilter/i18n/scn.json b/www/wiki/extensions/AbuseFilter/i18n/scn.json
index 3b9bd96c..65d9ff2d 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/scn.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/scn.json
@@ -130,7 +130,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 +148,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",
@@ -383,7 +381,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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/sd.json b/www/wiki/extensions/AbuseFilter/i18n/sd.json
index 16208280..c42aea07 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/sd.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/sd.json
@@ -1,11 +1,38 @@
{
"@metadata": {
"authors": [
- "Mehtab ahmed"
+ "Mehtab ahmed",
+ "Indus Asia"
]
},
+ "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-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/www/wiki/extensions/AbuseFilter/i18n/sh.json b/www/wiki/extensions/AbuseFilter/i18n/sh.json
index c131a293..0cd7b4c4 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/sh.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/sh.json
@@ -91,7 +91,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 +165,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/www/wiki/extensions/AbuseFilter/i18n/si.json b/www/wiki/extensions/AbuseFilter/i18n/si.json
index 2217c360..79b3898e 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/si.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/si.json
@@ -7,7 +7,8 @@
"ශ්වෙත",
"සුරනිමල",
"Susith Chandira Gts",
- "Macofe"
+ "Macofe",
+ 1100100
]
},
"abusefilter-desc": "සංස්කරණ සඳහා ස්වයංක්‍රීය විවරණෝපයෝගී යෙදේ",
@@ -137,7 +138,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": "පරිශීලකගේ සහ/හෝ අයිපී ලිපිනය සංස්කරණයෙන් වාරණය කරන්න",
@@ -343,7 +343,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/www/wiki/extensions/AbuseFilter/i18n/sk.json b/www/wiki/extensions/AbuseFilter/i18n/sk.json
index a76a4474..4f44a092 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/sk.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/sk.json
@@ -7,7 +7,8 @@
"Sudo77(new)",
"Kusavica",
"Matma Rex",
- "TomášPolonec"
+ "TomášPolonec",
+ "Patriccck"
]
},
"abusefilter-desc": "Vykonáva automatickú heuristiku úprav.",
@@ -55,7 +56,8 @@
"abusefilter-log-search-entries-all": "Všetky vstupy",
"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",
@@ -82,7 +84,7 @@
"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",
@@ -134,10 +136,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:",
@@ -341,7 +343,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]].",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/skr-arab.json b/www/wiki/extensions/AbuseFilter/i18n/skr-arab.json
new file mode 100644
index 00000000..6289725d
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/i18n/skr-arab.json
@@ -0,0 +1,45 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saraiki"
+ ]
+ },
+ "abusefilter-log-search-user": "ورتݨ آلا:",
+ "abusefilter-log-search-title": "عنوان:",
+ "abusefilter-log-search-wiki": "وکی:",
+ "abusefilter-log-search-impact": "اثر:",
+ "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-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-examine-user": "ورتݨ آلا:",
+ "abusefilter-view-private-submit": "ذاتی تفصیلاں ݙیکھو",
+ "abusefilter-view-private": "ذاتی تفصیلاں ݙیکھو",
+ "abusefilter-log-details-id": "لاگ آئی ڈی",
+ "abusefilter-log-ip-not-available": "دستیاب کائنی"
+}
diff --git a/www/wiki/extensions/AbuseFilter/i18n/sl.json b/www/wiki/extensions/AbuseFilter/i18n/sl.json
index 367e8c5a..8b03d197 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/sl.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/sl.json
@@ -60,7 +60,7 @@
"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-noactions": "nobeno",
"abusefilter-log-details-diff": "Spremembe narejene v urejanju",
@@ -128,7 +128,6 @@
"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:",
@@ -151,7 +150,7 @@
"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-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:",
@@ -193,8 +192,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 +224,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)",
@@ -331,7 +330,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]].",
@@ -376,7 +375,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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/sq.json b/www/wiki/extensions/AbuseFilter/i18n/sq.json
index a8363a7e..86171713 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/sq.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/sq.json
@@ -117,7 +117,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:",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/sr-ec.json b/www/wiki/extensions/AbuseFilter/i18n/sr-ec.json
index 48514003..586dbe6f 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/sr-ec.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/sr-ec.json
@@ -10,15 +10,18 @@
"Сербијана",
"Matma Rex",
"Dungodung",
- "Obsuser"
+ "Obsuser",
+ "Acamicamacaraca",
+ "Zoranzoki21",
+ "BadDog"
]
},
"abusefilter-desc": "Извршава аутоматско хеуристичко филтрирање измена",
- "abusefilter": "Поставке филтера против злоупотребе",
+ "abusefilter": "Подешавања филтера против злоупотребе",
"abuselog": "Извештај злоупотребе",
"abusefilter-intro": "Добро дошли у окружење за управљање Филтером против злоупотребе.\nТо је софтверски механизам који примењује аутоматску хеуристику за све радње.\nОво окружење приказује списак одређених филтера и омогућава вам да их промените.",
"abusefilter-mustbeeditor": "Из сигурносних разлога, само корисници са одговарајућим правима на измену филтерâ против злоупотребе могу користити ово окружење.",
- "abusefilter-warning": "'''Упозорење''': Аутоматски филтер је препознао ову измену као потенцијално штетну.\nНеконструктивне акције ће бити враћене и могу да доведу до забране уређивања.\nУколико сматрате да измена ипак јесте конструктивна, кликните још једанпут на дугме „Сачувај страницу“.\nКратак опис правила злоупотребе које сте активирали: $1",
+ "abusefilter-warning": "'''Упозорење''': Аутоматски филтер је препознао ову измену као потенцијално штетну.\nНеконструктивне радње ће бити враћене и могу да доведу до забране уређивања.\nУколико сматрате да измена ипак јесте конструктивна, кликните још једанпут на дугме „Сачувај страницу”.\nКратак опис правила злоупотребе које сте активирали: $1",
"abusefilter-disallowed": "Аутоматски филтер је препознао ову измену као потенцијално штетну и стога је није дозволио.\nУколико сматрате да измена ипак јесте конструктивна, обавестите неког од администратора о томе шта покушавате да учините.\nКратак опис повређеног правила: $1",
"abusefilter-blocked-display": "Аутоматски филтер је препознао ову измену као потенцијално штетну и није вам допуштено да је извршите.\nОсим тога, да би се заштититио/ла {{SITENAME}}, ваш налог и одговарајуће ИП адресе су блокиране.\nУколико се ово догодило грешком, контактирајте неког од администратора.\nКратак опис повређеног правила: $1",
"abusefilter-degrouped": "Аутоматски филтер је препознао ову измену као потенцијално штетну.\nСтога измена није дозвољена, а уклоњена су вам и сва овлашћења која сте имали. Уколико сматрате да је до тога дошло грешком, контактирајте неког од бирократа, објасните шта сте урадили и овлашћења ће вам можда бити враћена.\nКратак опис повређеног правила: $1",
@@ -27,7 +30,7 @@
"abusefilter-blockreason": "Блокирани сте од стране филтера против злоупотребе.\nОпис повређеног правила: $1",
"abusefilter-degroupreason": "Филтер је аутоматски уклонио овлашћења.\nОпис правила: $1",
"abusefilter-accountreserved": "Ово корисничко име је резервисано од стране филтера против злоупотребе.",
- "right-abusefilter-modify": "уређивање филтера против злоупотребе",
+ "right-abusefilter-modify": "Уређивање филтера против злоупотребе",
"right-abusefilter-view": "прегледање филтера против злоупотребе",
"right-abusefilter-log": "прегледање извештаја злоупотребе",
"right-abusefilter-log-detail": "прегледање детаљних података у извештају злоупотребе",
@@ -35,8 +38,10 @@
"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": "прегледање извештаја злоупотребе",
@@ -45,6 +50,7 @@
"action-abusefilter-modify-restricted": "мењање филтера против злоупотребе с ограниченим радњама",
"action-abusefilter-revert": "враћање свих измена које је направио филтер против злоупотребе",
"action-abusefilter-view-private": "прегледање приватних филтера против злоупотребе",
+ "action-abusefilter-log-private": "преглед дневника филтера против злоупотребе означене као приватне",
"abusefilter-log": "Дневник филтера против злоупотребе",
"abusefilter-log-summary": "Овај извештај приказује списак свих радњи које су извршили филтери.",
"abusefilter-log-search": "Претрага извештаја злоупотребе",
@@ -52,6 +58,15 @@
"abusefilter-log-search-filter": "ID филтера:",
"abusefilter-log-search-title": "Наслов:",
"abusefilter-log-search-wiki": "Вики:",
+ "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)",
@@ -65,15 +80,17 @@
"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-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": "ID уноса:",
@@ -83,6 +100,9 @@
"abusefilter-logentry-suppress": "сакриј „[[$1]]“",
"abusefilter-logentry-unsuppress": "откри „[[$1]]“",
"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": "уређивање филтера",
"abusefilter-management": "Управљање филтером против злоупотребе",
"abusefilter-list": "Сви филтери",
"abusefilter-list-id": "ID филтера",
@@ -105,7 +125,7 @@
"abusefilter-new": "Направи нови филтер",
"abusefilter-return": "Назад на управљање филтерима",
"abusefilter-status-global": "Глобално",
- "abusefilter-list-options": "Опције",
+ "abusefilter-list-options": "Подешавања",
"abusefilter-list-options-deleted": "Обрисани филтери:",
"abusefilter-list-options-deleted-only": "Прикажи само обрисане филтере",
"abusefilter-list-options-deleted-hide": "Сакриј обрисане филтере",
@@ -130,7 +150,7 @@
"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-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|услов|услова}}.",
@@ -149,14 +169,14 @@
"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-throttle": "Покрени радње само ако корисник пређе ограничење учесталости",
- "abusefilter-edit-action-rangeblock": "Блокирај /16 опсег ИП адреса корисника",
+ "abusefilter-edit-action-rangeblock": "Блокирај /16 опсег IP адреса корисника",
"abusefilter-edit-action-tag": "Означи измену за будући преглед",
"abusefilter-edit-throttle-count": "Број дозвољених радњи:",
"abusefilter-edit-throttle-period": "Временски период:",
@@ -169,6 +189,8 @@
"abusefilter-edit-warn-preview": "Прегледај изабрану поруку",
"abusefilter-edit-warn-edit": "Направи/уреди изабрану поруку",
"abusefilter-edit-tag-tag": "[[Special:Tags|Ознаке]] за примену (једна по реду):",
+ "abusefilter-block-anon": "анонимни корисници",
+ "abusefilter-block-user": "регистровани корисници",
"abusefilter-edit-denied": "Не можете видети детаље овог филтера јер је сакривен из јавног приказа.",
"abusefilter-edit-main": "Параметри филтера",
"abusefilter-edit-done-subtitle": "Филтер је уређен",
@@ -220,6 +242,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,7 +251,7 @@
"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-ip_in_range": "Провери да ли је IP адреса у опсегу (ip_in_range)",
"abusefilter-edit-builder-funcs-contains-any": "Претражи ниску на више подниски (contains_any)",
"abusefilter-edit-builder-funcs-substr": "Подниска (substr)",
"abusefilter-edit-builder-funcs-strpos": "Положај подниске у нисци (strpos)",
@@ -237,6 +260,8 @@
"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-timestamp-expanded": "Временски потпис дневника",
"abusefilter-edit-builder-vars-action": "Радња",
"abusefilter-edit-builder-vars-addedlines": "Додати редови у измени",
"abusefilter-edit-builder-vars-delta": "Промена величине у измени",
@@ -250,6 +275,7 @@
"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-movedfrom-id": "ID изворне странице премештања",
"abusefilter-edit-builder-vars-movedfrom-ns": "Именски простор премештене странице",
"abusefilter-edit-builder-vars-movedfrom-text": "Наслов странице коју премештате",
@@ -270,6 +296,7 @@
"abusefilter-edit-builder-vars-removed-links": "Све спољашње везе уклоњене у измени",
"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": "Степен заштите странице (уређивање)",
@@ -277,7 +304,7 @@
"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-minor-edit": "Да ли је измена била означена као мања",
"abusefilter-edit-builder-vars-file-sha1": "Дисперзија SHA1 садржаја датотеке",
"abusefilter-filter-log": "Скорашње измене филтера",
"abusefilter-history": "Историја измена филтера #$1",
@@ -370,17 +397,19 @@
"abusefilter-topnav-test": "групно испробавање",
"abusefilter-topnav-examine": "испитај прошле измене",
"abusefilter-topnav-log": "историја злоупотребе",
- "abusefilter-topnav-tools": "алати за дебаговање",
+ "abusefilter-topnav-tools": "Алатке за дебаговање",
"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": "Ставка",
- "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": "Новије измене",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/sr-el.json b/www/wiki/extensions/AbuseFilter/i18n/sr-el.json
index c84eacb5..ff2942c7 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/sr-el.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/sr-el.json
@@ -132,7 +132,6 @@
"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:",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/stq.json b/www/wiki/extensions/AbuseFilter/i18n/stq.json
index 407156cb..69fc08d7 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/stq.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/stq.json
@@ -95,7 +95,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 +111,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",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/sv.json b/www/wiki/extensions/AbuseFilter/i18n/sv.json
index 123e08cd..47157bcc 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/sv.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/sv.json
@@ -29,7 +29,8 @@
"Marfuas",
"Josve05a",
"Matma Rex",
- "Matěj Suchánek"
+ "Matěj Suchánek",
+ "Bengtsson96"
]
},
"abusefilter-desc": "Tillämpar automatiska filter på redigeringar",
@@ -37,7 +38,7 @@
"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-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,32 @@
"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-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,8 +100,9 @@
"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",
@@ -95,19 +110,28 @@
"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-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]]\"",
"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",
+ "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",
@@ -138,6 +162,13 @@
"abusefilter-list-options-scope-all": "Lokala och globala regler",
"abusefilter-list-options-disabled": "Avaktiverade filter:",
"abusefilter-list-options-hidedisabled": "Göm avaktiverade 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",
@@ -156,11 +187,13 @@
"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 filteret flaggades automatiskt som skadligt. Föjande å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 +201,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,8 +212,9 @@
"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:",
@@ -192,11 +227,16 @@
"abusefilter-edit-warn-preview": "Förhandsgranska 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-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": "anonyma användare",
+ "abusefilter-block-user": "registrerade användare",
"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-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 +248,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 +261,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,15 +287,19 @@
"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-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)",
@@ -262,6 +308,7 @@
"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",
@@ -293,7 +340,11 @@
"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",
@@ -308,6 +359,14 @@
"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",
@@ -318,6 +377,8 @@
"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-edit-block-options": "Blockeringsalternativ:",
"abusefilter-filter-log": "Senaste filterändringar",
"abusefilter-history": "Ändringshistorik för missbruksfilter #$1",
"abusefilter-history-foruser": "Ändringar av $1",
@@ -336,6 +397,7 @@
"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.",
@@ -354,6 +416,7 @@
"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-unclosedcomment": "Öppen kommentar vid tecken $1.",
"abusefilter-action-tag": "Tagg",
"abusefilter-action-throttle": "Begränsning",
"abusefilter-action-warn": "Varna",
@@ -369,8 +432,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",
@@ -414,9 +478,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,21 +494,40 @@
"abusefilter-import-submit": "Importera data",
"abusefilter-group-default": "Standard",
"abusefilter-http-error": "Ett HTTP-fel uppstod: $1.",
+ "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",
+ "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]]).",
+ "apihelp-abusefiltercheckmatch-description": "Kontrollera om ett missbruksfilter matchar en grupp variabler som är loggade händelser 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 som är loggade händelser 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.",
@@ -452,6 +536,7 @@
"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-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.",
@@ -459,6 +544,11 @@
"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]]"
+ "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/www/wiki/extensions/AbuseFilter/i18n/sw.json b/www/wiki/extensions/AbuseFilter/i18n/sw.json
index cc21a204..747eadca 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/sw.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/sw.json
@@ -146,7 +146,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/www/wiki/extensions/AbuseFilter/i18n/ta.json b/www/wiki/extensions/AbuseFilter/i18n/ta.json
index 8a3477c8..521f7127 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ta.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ta.json
@@ -278,7 +278,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/www/wiki/extensions/AbuseFilter/i18n/te.json b/www/wiki/extensions/AbuseFilter/i18n/te.json
index 1e019735..c9557e22 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/te.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/te.json
@@ -123,7 +123,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:",
@@ -335,7 +334,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/www/wiki/extensions/AbuseFilter/i18n/th.json b/www/wiki/extensions/AbuseFilter/i18n/th.json
index ba20d3dc..5f51b1ac 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/th.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/th.json
@@ -137,7 +137,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": "หมายเลขประจำตัวกรอง:",
@@ -374,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": "รายการ",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/tk.json b/www/wiki/extensions/AbuseFilter/i18n/tk.json
index b0a57cb9..cdb6a55f 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/tk.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/tk.json
@@ -103,7 +103,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,7 +119,6 @@
"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",
@@ -319,7 +317,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/www/wiki/extensions/AbuseFilter/i18n/tl.json b/www/wiki/extensions/AbuseFilter/i18n/tl.json
index fbfc3df0..e198b98c 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/tl.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/tl.json
@@ -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)",
@@ -126,7 +129,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 +147,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",
@@ -367,7 +368,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/www/wiki/extensions/AbuseFilter/i18n/tr.json b/www/wiki/extensions/AbuseFilter/i18n/tr.json
index cca2a506..bf4346cd 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/tr.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/tr.json
@@ -14,7 +14,8 @@
"Sayginer",
"Mavrikant",
"Ömer Berkay",
- "Matma Rex"
+ "Matma Rex",
+ "Diyapazon"
]
},
"abusefilter-desc": "Değişikliklere otomatik bulucu yöntemler uygular",
@@ -58,6 +59,9 @@
"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-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)",
@@ -139,7 +143,6 @@
"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:",
@@ -386,7 +389,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/www/wiki/extensions/AbuseFilter/i18n/udm.json b/www/wiki/extensions/AbuseFilter/i18n/udm.json
index 64592ddd..580bbbf6 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/udm.json
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/i18n/ug-arab.json b/www/wiki/extensions/AbuseFilter/i18n/ug-arab.json
index f038e51b..de724361 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ug-arab.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ug-arab.json
@@ -126,7 +126,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سى:",
@@ -381,5 +380,6 @@
"abusefilter-diff-next": "يىقىنقى ئۆزگەرتىشلەر",
"abusefilter-import-intro": "سىز بۇ ئارايۈز ئارقىلىق باشقا ۋىكىدىكى سۈزگۈچنى ئەكىرەلەيسىز. مەنبەدىن سۈزگۈچ تەھرىر ئارايۈزىنى چېكىپ \"{{int:abusefilter-edit-tools}}\" نىڭ ئاستىدىكى \"{{int:abusefilter-edit-export}}\"نى چېكىڭ. ئارقىدىن كۆرۈنگەن تېكىست قۇتىسىنىڭ مەزمۇنىنى كۆچۈرۈپ، ئاستىدىكى تېكىست قۇتىسىغا چاپلاڭ ھەمدە \"{{int:abusefilter-import-submit}}\"نى چېكىڭ.",
"abusefilter-import-submit": "سانلىق مەلۇمات كىرگۈزۈش",
- "abusefilter-group-default": "كۆڭۈلدىكى"
+ "abusefilter-group-default": "كۆڭۈلدىكى",
+ "apihelp-query+abuselog-param-wiki": "ۋىكىدىن كەلگەن كۆرسىتىش ئۇچۇرى."
}
diff --git a/www/wiki/extensions/AbuseFilter/i18n/uk.json b/www/wiki/extensions/AbuseFilter/i18n/uk.json
index 688b9c70..26153ac8 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/uk.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/uk.json
@@ -19,7 +19,8 @@
"DonDrakon",
"Piramidion",
"Matma Rex",
- "Максим Підліснюк"
+ "Максим Підліснюк",
+ "Avatar6"
]
},
"abusefilter-desc": "Застосовує до редагувань автоматичні евристики.",
@@ -157,6 +158,7 @@
"abusefilter-edit-save": "Зберегти фільтр",
"abusefilter-edit-id": "ІД фільтра:",
"abusefilter-edit-description": "Опис:\n:''(публічний) ''",
+ "abusefilter-edit-field-description": "опис",
"abusefilter-edit-group": "Група фільтру:",
"abusefilter-edit-flags": "Прапорці:",
"abusefilter-edit-enabled": "Увімкнути цей фільтр",
@@ -164,6 +166,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",
@@ -193,6 +196,7 @@
"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-restricted": "Ви не можете змінити цей фільтр, оскільки він містить одну або декілька обмежуючих дій. Будь ласка, попросіть користувача з відповідними правами змінити фільтр для вас.",
"abusefilter-edit-viewhistory": "Показати історію цього фільтра",
"abusefilter-edit-history": "Історія:",
@@ -242,6 +246,7 @@
"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-rmdoubles": "Вилучення подвійних символів (rmdoubles)",
"abusefilter-edit-builder-funcs-specialratio": "Відношення к-сті спеціальних символів до загальної к-сті символів (specialratio)",
"abusefilter-edit-builder-funcs-norm": "Нормалізація (norm)",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/ur.json b/www/wiki/extensions/AbuseFilter/i18n/ur.json
index 5ed6c2d5..c547b5ae 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/ur.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/ur.json
@@ -3,7 +3,9 @@
"authors": [
"පසිඳු කාවින්ද",
"عثمان خان شاہ",
- "Muhammad Shuaib"
+ "Muhammad Shuaib",
+ "Zainab Meher",
+ "Abdulq"
]
},
"abusefilter": "مقطار غلط کاری کی ترتیب",
@@ -71,6 +73,10 @@
"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,6 +84,7 @@
"abusefilter-edit-status-label": "اعداد و شمار:",
"abusefilter-edit-new": "نئے فلٹر کریں",
"abusefilter-edit-save": "فلٹر کو محفوظ کریں",
+ "abusefilter-edit-switch-editor": "خانہ ترمیم تبدیل کریں",
"abusefilter-edit-group": "فلٹر گروپ:",
"abusefilter-edit-enabled": "اس فلٹر کو فعال",
"abusefilter-edit-deleted": "حذف کر کے طور پر نشان زد کریں",
@@ -87,9 +94,9 @@
"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": "وقت کی مدت:",
@@ -112,6 +119,7 @@
"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": "پرانے صفحہ کا سائز",
@@ -156,7 +164,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": "بوجھ",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/vec.json b/www/wiki/extensions/AbuseFilter/i18n/vec.json
index 16cd8162..1341a32c 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/vec.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/vec.json
@@ -6,7 +6,8 @@
"GatoSelvadego",
"Nemo bis",
"Nick1915",
- "Matma Rex"
+ "Matma Rex",
+ "Cusolotto"
]
},
"abusefilter-desc": "Àplica dele eurìstiche automatiche a le modifiche.",
@@ -70,6 +71,7 @@
"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]]\"",
@@ -117,17 +119,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 +138,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",
@@ -354,7 +356,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/www/wiki/extensions/AbuseFilter/i18n/vi.json b/www/wiki/extensions/AbuseFilter/i18n/vi.json
index 5102da6e..5c9ea676 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/vi.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/vi.json
@@ -140,7 +140,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:",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/wuu.json b/www/wiki/extensions/AbuseFilter/i18n/wuu.json
index 25d536f3..cb463715 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/wuu.json
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/i18n/yi.json b/www/wiki/extensions/AbuseFilter/i18n/yi.json
index e930b9a9..89484da6 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/yi.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/yi.json
@@ -41,6 +41,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 +53,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": "שלעכט־באניצן לאג",
@@ -263,7 +266,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": "איינהייט",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/yue.json b/www/wiki/extensions/AbuseFilter/i18n/yue.json
index 23ae998c..eff05259 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/yue.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/yue.json
@@ -7,7 +7,8 @@
"Waihorace",
"Wong128hk",
"Matma Rex",
- "Deryck Chan"
+ "Deryck Chan",
+ "Hello903hello"
]
},
"abusefilter-desc": "應用自動行為到編輯",
@@ -15,8 +16,8 @@
"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",
@@ -56,12 +57,12 @@
"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-management": "濫用過濾器管理",
"abusefilter-list": "全部過濾器",
"abusefilter-list-id": "過濾器ID",
@@ -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:",
@@ -301,13 +301,13 @@
"abusefilter-revert-periodend": "完結範圍:",
"abusefilter-revert-search": "揀動作",
"abusefilter-revert-filter": "過濾器:",
- "abusefilter-revert-preview-intro": "下面係呢個動作將會復原由濫用過濾器嘅動作。\n請小心檢查,再撳『確認』去確認你嘅選擇。",
+ "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 +317,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 +344,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/www/wiki/extensions/AbuseFilter/i18n/zh-hans.json b/www/wiki/extensions/AbuseFilter/i18n/zh-hans.json
index 2f6ba785..700db677 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/zh-hans.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/zh-hans.json
@@ -42,7 +42,9 @@
"EagerLin",
"Wmr",
"逆襲的天邪鬼",
- "WhitePhosphorus"
+ "WhitePhosphorus",
+ "A2093064",
+ "NeverBehave"
]
},
"abusefilter-desc": "对编辑行为自动进行条件判定",
@@ -64,6 +66,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 +79,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 +91,16 @@
"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-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 +114,38 @@
"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-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-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{{GENDER:$2|执行}}操作“$5”时{{GENDER:$2|触发}}了$4。采取的行动:$6($7)",
+ "log-action-filter-abusefilter": "过滤器更改的类型:",
+ "log-action-filter-abusefilter-create": "新过滤器创建",
+ "log-action-filter-abusefilter-modify": "过滤器修改",
+ "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": "处理",
@@ -157,6 +176,13 @@
"abusefilter-list-options-scope-all": "本地和全域规则",
"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-search-rlike": "正则表达式",
+ "abusefilter-list-options-search-irlike": "不区分大小写的正则表达式",
+ "abusefilter-list-regexerror": "搜索时发生错误:正则表达式语法错误。",
"abusefilter-list-options-submit": "更新",
"abusefilter-tools-text": "这里提供了一些实用的制作和测试防滥用过滤器的工具。",
"abusefilter-tools-expr": "表达式测试器",
@@ -167,7 +193,7 @@
"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": "创建过滤器",
@@ -179,7 +205,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 +215,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,8 +226,9 @@
"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": "时长:",
@@ -211,11 +241,16 @@
"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-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-restricted": "您无法编辑此过滤器,因为其中包含一个或多个受限操作。请寻求拥有相应权限用户的帮助,以协助您作出相应修改。",
"abusefilter-edit-viewhistory": "查看过滤器历史",
"abusefilter-edit-history": "历史:",
@@ -227,7 +262,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 +275,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,15 +302,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": "在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-substr": "子字符串(substr)",
"abusefilter-edit-builder-funcs-strpos": "子字符串在字符串中的位置(strpos)",
"abusefilter-edit-builder-funcs-str_replace": "在字符串中替换子字符串(str_replace)",
@@ -282,6 +323,7 @@
"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": "编辑前后的大小改变",
@@ -314,6 +356,10 @@
"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": "新内容中移除的所有外部链接",
@@ -328,6 +374,14 @@
"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源码",
@@ -339,6 +393,7 @@
"abusefilter-edit-builder-vars-file-width": "文件宽度(像素)",
"abusefilter-edit-builder-vars-file-height": "文件高度(像素)",
"abusefilter-edit-builder-vars-file-bits-per-channel": "文件的位/颜色通道",
+ "abusefilter-edit-block-options": "封禁选项:",
"abusefilter-filter-log": "最近过滤器更改",
"abusefilter-history": "滥用过滤器#$1的更改历史",
"abusefilter-history-foruser": "由$1做出的更改",
@@ -357,6 +412,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": "您所请求的过滤器是隐藏的,因此您无法查看其历史。",
@@ -375,23 +431,25 @@
"abusefilter-exception-overridebuiltin": "字符$1处非法覆盖内建变量“$2”。",
"abusefilter-exception-outofbounds": "字符$1处请求了不存在的列表项$2(列表长度 = $3)。",
"abusefilter-exception-notlist": "字符$1处向非数组请求了数组项。",
+ "abusefilter-exception-unclosedcomment": "字符$1处有未闭合注释。",
"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",
@@ -435,6 +493,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,6 +509,17 @@
"abusefilter-import-submit": "导入数据",
"abusefilter-group-default": "默认",
"abusefilter-http-error": "发生一个HTTP错误:$1。",
+ "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|帮助]])。",
"apihelp-abusefiltercheckmatch-description": "检查以查看一组变量是否匹配防滥用过滤器,编辑者会被记录相关事件。\n\nvars、rcid或logid是必须的,然而只有一个会被使用。",
"apihelp-abusefiltercheckmatch-summary": "检查防滥用过滤器是否匹配变量集,及编辑者记录的防滥用过滤器活动。",
"apihelp-abusefiltercheckmatch-extended-description": "需要vars、rcid或logid,然而只有其中一个会用到。",
@@ -489,6 +559,7 @@
"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": "您没有权限测试防滥用过滤器。",
diff --git a/www/wiki/extensions/AbuseFilter/i18n/zh-hant.json b/www/wiki/extensions/AbuseFilter/i18n/zh-hant.json
index 86eb1ce9..d68d7e2e 100644
--- a/www/wiki/extensions/AbuseFilter/i18n/zh-hant.json
+++ b/www/wiki/extensions/AbuseFilter/i18n/zh-hant.json
@@ -31,7 +31,11 @@
"Matma Rex",
"1233thehongkonger",
"逆襲的天邪鬼",
- "Corainn"
+ "Corainn",
+ "A2093064",
+ "Laundry Machine",
+ "Kly",
+ "Sanmosa"
]
},
"abusefilter-desc": "套用自動啟發式演算法於編輯",
@@ -39,10 +43,10 @@
"abuselog": "濫用日誌",
"abusefilter-intro": "歡迎使用防濫用過濾器管理介面。\n防濫用過濾器是針對所有編輯動作進行自動化判斷的軟體機制。\n本介面包含了現有的過濾器清單並允許修改。",
"abusefilter-mustbeeditor": "基於安全性考量,僅擁有權限修改防濫用過濾器的使用者可使用本介面。",
- "abusefilter-warning": "'''警告''':此操作已被系統自動識別為有害動作。\n沒有建設性的編輯將會被快速還原,\n嚴重或重複的非建設性的編輯將導致您的帳號或 IP 位址被封鎖。\n如果您認為您的編輯是具有建設性的,您可以再送出一次以確認。\n與您的操作符合的濫用規則描述為:$1",
+ "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",
@@ -51,8 +55,9 @@
"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,32 @@
"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-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-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,8 +105,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": "濫用日誌",
@@ -97,19 +115,28 @@
"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\" 已觸發 $4。採取的動作:$6 ($7)",
+ "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": "過濾器修改",
+ "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": "處理方式",
@@ -140,17 +167,24 @@
"abusefilter-list-options-scope-all": "本地及全域規則",
"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-search-rlike": "正規表達式",
+ "abusefilter-list-options-search-irlike": "不區分大小寫的正規表達式",
+ "abusefilter-list-regexerror": "搜尋時發生錯誤:正規表達式語法錯誤。",
"abusefilter-list-options-submit": "更新",
"abusefilter-tools-text": "本頁提供可協助您製訂與檢測防濫用過濾器的工具。",
"abusefilter-tools-expr": "表示法測試器",
"abusefilter-tools-submitexpr": "評估",
"abusefilter-tools-reautoconfirm": "還原自動確認狀態",
- "abusefilter-tools-reautoconfirm-user": "使用者:",
+ "abusefilter-tools-reautoconfirm-user": "用戶:",
"abusefilter-tools-reautoconfirm-submit": "重新自動確認",
"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": "正在建立過濾器",
@@ -158,11 +192,13 @@
"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,18 +206,20 @@
"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": "期間:",
@@ -194,11 +232,16 @@
"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-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-restricted": "該過濾器包含了一個或多個已限制的動作,您無法編輯此過濾器。\n請聯絡擁有新增已限制動作權限的使用者協助您修改。",
"abusefilter-edit-viewhistory": "檢視此過濾器歷史",
"abusefilter-edit-history": "歷史:",
@@ -210,7 +253,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 +266,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 +293,28 @@
"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-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": "帳號名稱 (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": "編輯變更的大小",
@@ -297,6 +347,10 @@
"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": "所有編輯後移除的外部連結",
@@ -311,6 +365,14 @@
"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",
@@ -321,6 +383,7 @@
"abusefilter-edit-builder-vars-file-mediatype": "文件的媒體類型",
"abusefilter-edit-builder-vars-file-width": "文件寬度(像素)",
"abusefilter-edit-builder-vars-file-height": "文件高度(像素)",
+ "abusefilter-edit-block-options": "封禁選項:",
"abusefilter-filter-log": "最近過濾器變更",
"abusefilter-history": "防濫用過濾器 #$1 的修訂歷史",
"abusefilter-history-foruser": "由 $1 所作的變更",
@@ -328,7 +391,7 @@
"abusefilter-history-enabled": "已開啟",
"abusefilter-history-global": "全域",
"abusefilter-history-timestamp": "時間",
- "abusefilter-history-user": "使用者",
+ "abusefilter-history-user": "用戶",
"abusefilter-history-public": "公開的過濾器描述",
"abusefilter-history-flags": "旗標",
"abusefilter-history-filter": "過濾器規則",
@@ -338,7 +401,8 @@
"abusefilter-history-deleted": "已刪除",
"abusefilter-history-filterid": "篩選器",
"abusefilter-history-select-legend": "精確搜尋",
- "abusefilter-history-select-user": "使用者:",
+ "abusefilter-history-select-user": "用戶:",
+ "abusefilter-history-select-filter": "過濾器ID:",
"abusefilter-history-select-submit": "精確",
"abusefilter-history-diff": "變更",
"abusefilter-history-error-hidden": "您請求的過濾器目前狀態為隱藏,故無法檢視其歷史",
@@ -360,11 +424,11 @@
"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,8 +436,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",
@@ -396,7 +461,7 @@
"abusefilter-examine-intro": "此頁面讓您可檢查由防濫用過濾器每次變更所產生的變數並使用過濾器測試。",
"abusefilter-examine-legend": "請選擇變更",
"abusefilter-examine-diff": "Diff URL:",
- "abusefilter-examine-user": "使用者:",
+ "abusefilter-examine-user": "用戶:",
"abusefilter-examine-title": "頁面標題:",
"abusefilter-examine-submit": "搜尋",
"abusefilter-examine-vars": "此次變更產生的變數",
@@ -417,7 +482,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 +498,38 @@
"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": "不可用",
+ "tag-abusefilter-condition-limit": "達到條件限制",
+ "tag-abusefilter-condition-limit-description": "不能被所有啟用的[[Special:AbuseFilter|防濫用過濾器]]檢查的編輯或其他日誌活動([[mw:Extension:AbuseFilter/Conditions|幫助]])。",
+ "apihelp-abusefiltercheckmatch-description": "檢查一組變量是否配合防濫用過濾器,編輯者會被記錄相關事件。\n\nvars、rcid或logid是必須填入的,然而只會使用其中一個。",
+ "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-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-limit": "篩選能列出的最大數量。",
+ "apihelp-query+abusefilters-example-1": "列出啟用的公開過濾器",
+ "apihelp-query+abuselog-param-start": "起始列舉的時間戳記。",
+ "apihelp-query+abuselog-param-end": "終止列舉的時間戳記。",
+ "apihelp-query+abuselog-param-limit": "項目能列出的最大數量。",
+ "apihelp-query+abuselog-param-prop": "要取得的屬性。",
+ "apihelp-query+abuselog-example-1": "顯示近期的日誌項目",
+ "apihelp-query+abuselog-example-2": "顯示 [[API]] 近期的日誌項目",
+ "apierror-abusefilter-badsyntax": "此過濾器含有無效語法。"
}
diff --git a/www/wiki/extensions/AbuseFilter/includes/AFComputedVariable.php b/www/wiki/extensions/AbuseFilter/includes/AFComputedVariable.php
index 45d635bb..43dac6a1 100644
--- a/www/wiki/extensions/AbuseFilter/includes/AFComputedVariable.php
+++ b/www/wiki/extensions/AbuseFilter/includes/AFComputedVariable.php
@@ -1,13 +1,16 @@
<?php
+use Wikimedia\Rdbms\Database;
+use MediaWiki\MediaWikiServices;
+
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 ) {
$this->mMethod = $method;
@@ -47,7 +50,7 @@ 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 ) {
@@ -67,7 +70,7 @@ class AFComputedVariable {
}
if ( $user instanceof User ) {
- $userCache[$username] = $user;
+ self::$userCache[$username] = $user;
return $user;
}
@@ -86,8 +89,8 @@ class AFComputedVariable {
}
/**
- * @param $namespace
- * @param $title Title
+ * @param int $namespace
+ * @param Title $title
* @return Article
*/
static function articleFromTitle( $namespace, $title ) {
@@ -134,7 +137,7 @@ class AFComputedVariable {
}
/**
- * @param $vars AbuseFilterVariableHolder
+ * @param AbuseFilterVariableHolder $vars
* @return AFPData|array|int|mixed|null|string
* @throws MWException
* @throws AFPException
@@ -362,10 +365,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 );
@@ -397,7 +406,7 @@ class AFComputedVariable {
return [];
}
- $cache = ObjectCache::getMainWANInstance();
+ $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
return $cache->getWithSetCallback(
$cache->makeKey( 'last-10-authors', 'revision', $title->getLatestRevID() ),
@@ -406,17 +415,19 @@ class AFComputedVariable {
$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__,
// 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/www/wiki/extensions/AbuseFilter/includes/AbuseFilter.class.php b/www/wiki/extensions/AbuseFilter/includes/AbuseFilter.php
index 3ce5cdb4..c9afd66f 100644
--- a/www/wiki/extensions/AbuseFilter/includes/AbuseFilter.class.php
+++ b/www/wiki/extensions/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
@@ -42,7 +45,9 @@ class AbuseFilter {
],
'op-comparison' => [
'==' => 'equal',
+ '===' => 'equal-strict',
'!=' => 'notequal',
+ '!==' => 'notequal-strict',
'<' => 'lt',
'>' => 'gt',
'<=' => 'lte',
@@ -69,15 +74,19 @@ 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',
'substr(subject, offset, length)' => 'substr',
'strpos(haystack, needle)' => 'strpos',
'str_replace(subject, search, replace)' => 'str_replace',
@@ -133,6 +142,18 @@ class AbuseFilter {
'article_restrictions_upload' => 'restrictions-upload',
'article_recent_contributors' => 'recent-contributors',
'article_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_text' => 'old-text-stripped', # Disabled, performance
// 'old_html' => 'old-html', # Disabled, performance
'old_links' => 'old-links',
@@ -152,8 +173,13 @@ class AbuseFilter {
/**
* @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',
@@ -175,7 +201,6 @@ class AbuseFilter {
];
$links = [];
- $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
foreach ( $linkDefs as $name => $page ) {
// Give grep a chance to find the usages:
@@ -294,7 +319,7 @@ class AbuseFilter {
}
if ( $filter === 'new' ) {
return false;
- };
+ }
$hidden = $dbr->selectField(
'abuse_filter',
'af_hidden',
@@ -379,7 +404,7 @@ class AbuseFilter {
}
/**
- * @param $filter
+ * @param string $filter
* @return mixed
*/
public static function checkSyntax( $filter ) {
@@ -392,7 +417,7 @@ class AbuseFilter {
}
/**
- * @param $expr
+ * @param string $expr
* @param array $vars
* @return string
*/
@@ -450,11 +475,19 @@ 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.
$filter_matched = [];
@@ -472,7 +505,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 ) {
@@ -510,12 +543,23 @@ 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;
}
@@ -524,20 +568,19 @@ class AbuseFilter {
* @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 ) {
+ 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;
@@ -558,19 +601,50 @@ 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 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 ) {
@@ -692,7 +766,7 @@ class AbuseFilter {
}
/**
- * @param DatabaseBase $dbr
+ * @param IDatabase $dbr
* @param string[] $filters
* @param string $prefix
* @return array[]
@@ -725,7 +799,7 @@ class AbuseFilter {
} 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 ) )
];
}
}
@@ -751,13 +825,14 @@ class AbuseFilter {
$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;
@@ -792,12 +867,11 @@ class AbuseFilter {
$warnKey = 'abusefilter-warned-' . md5( $title->getPrefixedText() ) . '-' . $filter;
// 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] ) ) {
@@ -805,14 +879,14 @@ class AbuseFilter {
} 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.
} else {
// We already warned them
- $_SESSION[$warnKey] = false;
+ $session[$warnKey] = false;
}
unset( $actions['warn'] );
@@ -825,6 +899,43 @@ class AbuseFilter {
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'] ) ) {
+ global $wgUser;
+ $parameters = $actions['block']['parameters'];
+
+ if ( count( $parameters ) === 3 ) {
+ // New type of filters with custom block
+ if ( $wgUser->isAnon() ) {
+ $expiry = $parameters[1];
+ } else {
+ $expiry = $parameters[2];
+ }
+ } else {
+ // Old type with fixed expiry
+ if ( $wgUser->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(
@@ -843,6 +954,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]
+ ],
+ $wgUser->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 );
}
@@ -878,7 +1013,7 @@ class AbuseFilter {
public static function filterAction(
$vars, $title, $group = 'default', $user = null, $mode = 'execute'
) {
- global $wgUser, $wgTitle, $wgRequest, $wgAbuseFilterRuntimeProfile;
+ global $wgUser, $wgTitle, $wgRequest, $wgAbuseFilterRuntimeProfile, $wgAbuseFilterLogIP;
$context = RequestContext::getMain();
$oldContextTitle = $context->getTitle();
@@ -927,7 +1062,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' );
@@ -984,7 +1119,8 @@ class AbuseFilter {
'afl_timestamp' => wfGetDB( DB_REPLICA )->timestamp( wfTimestampNow() ),
'afl_namespace' => $title->getNamespace(),
'afl_title' => $title->getDBkey(),
- 'afl_ip' => $wgRequest->getIP()
+ // DB field is not null, so nothing
+ 'afl_ip' => ( $wgAbuseFilterLogIP ) ? $wgRequest->getIP() : ""
];
// Hack to avoid revealing IPs of people creating accounts
@@ -1159,7 +1295,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();
@@ -1292,7 +1428,7 @@ 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
*/
@@ -1362,11 +1498,6 @@ class AbuseFilter {
* @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 ) {
@@ -1376,7 +1507,7 @@ class AbuseFilter {
switch ( $action ) {
case 'disallow':
- if ( strlen( $parameters[0] ) ) {
+ if ( !empty( $parameters[0] ) && strlen( $parameters[0] ) ) {
$message = [ $parameters[0], $rule_desc, $rule_number ];
} else {
// Generic message.
@@ -1387,40 +1518,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'] );
}
-
+ $blockCIDR = $ip . '/' . $CIDRsize;
self::doAbuseFilterBlock(
[
'desc' => $rule_desc,
'number' => $rule_number
],
- $wgUser->getName(),
- $expiry,
- true
- );
-
- $message = [
- 'abusefilter-blocked-display',
- $rule_desc,
- $rule_number
- ];
- break;
- case 'rangeblock':
- self::doAbuseFilterBlock(
- [
- 'desc' => $rule_desc,
- 'number' => $rule_number
- ],
- IP::sanitizeRange( $wgRequest->getIP() . '/16' ),
+ IP::sanitizeRange( $blockCIDR ),
'1 week',
false
);
@@ -1487,6 +1600,9 @@ 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;
@@ -1531,11 +1647,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 +1665,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 +1687,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 +1703,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 +1720,8 @@ class AbuseFilter {
}
/**
- * @param $throttleId
- * @param $types
+ * @param string $throttleId
+ * @param array $types
* @param Title $title
* @param string $rateCount
* @param string $ratePeriod
@@ -1669,7 +1798,7 @@ class AbuseFilter {
}
/**
- * @param $throttleId
+ * @param string $throttleId
* @param string $type
* @param Title $title
* @param bool $global
@@ -1732,7 +1861,7 @@ 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();
@@ -1747,7 +1876,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 );
@@ -1891,20 +2020,41 @@ class AbuseFilter {
}
/**
+ * Extract values for syntax highlight
+ *
+ * @param bool $canEdit
+ * @return array
+ */
+ public static function getAceConfig( $canEdit ) {
+ $values = self::getBuilderValues();
+ $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 );
+
+ return [
+ 'variables' => $builderVariables,
+ 'functions' => $builderFunctions,
+ 'keywords' => $builderKeywords,
+ 'aceReadOnly' => !$canEdit
+ ];
+ }
+
+ /**
* @param string $rules
* @param string $textName
* @param bool $addResultDiv
* @param bool $canEdit
+ * @param bool $externalForm
* @return string
*/
static function buildEditBox( $rules, $textName = 'wpFilterRules', $addResultDiv = true,
- $canEdit = true ) {
+ $canEdit = true, $externalForm = false ) {
global $wgOut;
- $textareaAttrib = [ 'dir' => 'ltr' ]; # Rules are in English
- if ( !$canEdit ) {
- $textareaAttrib['readonly'] = 'readonly';
- }
+ $wgOut->enableOOUI();
+ $editorAttrib = [ 'dir' => 'ltr' ]; # Rules are in English
global $wgUser;
$noTestAttrib = [];
@@ -1914,55 +2064,107 @@ class AbuseFilter {
}
$rules = rtrim( $rules ) . "\n";
- $rules = Xml::textarea( $textName, $rules, 40, 15, $textareaAttrib );
+
+ if ( ExtensionRegistry::getInstance()->isLoaded( 'CodeEditor' ) ) {
+ $editorAttrib['name'] = 'wpAceFilterEditor';
+ $editorAttrib['id'] = 'wpAceFilterEditor';
+ $editorAttrib['class'] = 'mw-abusefilter-editor';
+
+ $switchEditor =
+ new OOUI\ButtonWidget(
+ [
+ 'label' => wfMessage( '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 ( $externalForm ) {
+ $textareaAttribs['form'] = 'wpFilterForm';
+ }
+ $rulesContainer .= Xml::textarea( $textName, $rules, 40, 15, $textareaAttribs );
+
+ $editorConfig = self::getAceConfig( $canEdit );
+
+ // Add Ace configuration variable
+ $wgOut->addJsConfigVars( 'aceConfig', $editorConfig );
+ } else {
+ if ( !$canEdit ) {
+ $editorAttrib['readonly'] = 'readonly';
+ }
+ if ( $externalForm ) {
+ $editorAttrib['form'] = 'wpFilterForm';
+ }
+ $rulesContainer = Xml::textarea( $textName, $rules, 40, 15, $editorAttrib );
+ }
if ( $canEdit ) {
- $dropDown = self::getBuilderValues();
// Generate builder drop-down
- $builder = '';
-
- $builder .= Xml::option( wfMessage( 'abusefilter-edit-builder-select' )->text() );
+ $dropDown = self::getBuilderValues();
+ // The array needs to be rearranged to be understood by OOUI
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";
-
+ $localisedLabel = wfMessage( "abusefilter-edit-builder-group-$group" )->text();
+ $dropDown[ $localisedLabel ] = $dropDown[ $group ];
+ unset( $dropDown[ $group ] );
+ $dropDown[ $localisedLabel ] = array_flip( $dropDown[ $localisedLabel ] );
foreach ( $values as $content => $name ) {
- $builder .=
- Xml::option(
- wfMessage( "abusefilter-edit-builder-$group-$name" )->text(),
- $content
- ) . "\n";
+ $localisedInnerLabel = wfMessage( "abusefilter-edit-builder-$group-$name" )->text();
+ $dropDown[ $localisedLabel ][ $localisedInnerLabel ] = $dropDown[ $localisedLabel ][ $name ];
+ unset( $dropDown[ $localisedLabel ][ $name ] );
}
+ }
+
+ $dropDown = [ wfMessage( 'abusefilter-edit-builder-select' )->text() => 'other' ] + $dropDown;
+ $dropDown = Xml::listDropDownOptionsOoui( $dropDown );
+ $dropDown = new OOUI\DropdownInputWidget( [
+ 'name' => 'wpFilterBuilder',
+ 'inputId' => 'wpFilterBuilder',
+ 'options' => $dropDown
+ ] );
+
+ $dropDown = new OOUI\FieldLayout( $dropDown );
+ $formElements = [ $dropDown ];
- $builder .= Xml::closeElement( 'optgroup' ) . "\n";
+ // Button for syntax check
+ $syntaxCheck =
+ new OOUI\ButtonWidget(
+ [
+ 'label' => wfMessage( 'abusefilter-edit-check' )->text(),
+ 'id' => 'mw-abusefilter-syntaxcheck'
+ ] + $noTestAttrib
+ );
+ $group = $syntaxCheck;
+
+ // Button for switching editor (if Ace is used)
+ if ( isset( $switchEditor ) ) {
+ $group =
+ new OOUI\Widget( [
+ 'content' => new OOUI\HorizontalLayout( [
+ 'items' => [ $switchEditor, $syntaxCheck ]
+ ] )
+ ] );
}
+ $group = new OOUI\FieldLayout( $group );
+ $formElements[] = $group;
- $rules .=
- Xml::tags(
- 'select',
- [ 'id' => 'wpFilterBuilder', ],
- $builder
- ) . ' ';
+ $fieldSet = new OOUI\FieldsetLayout( [
+ 'items' => $formElements,
+ 'classes' => [ 'mw-abusefilter-edit-buttons' ]
+ ] );
- // Add syntax checking
- $rules .= Xml::element( 'input',
- [
- 'type' => 'button',
- 'value' => wfMessage( 'abusefilter-edit-check' )->text(),
- 'id' => 'mw-abusefilter-syntaxcheck'
- ] + $noTestAttrib );
+ $rulesContainer .= $fieldSet;
}
if ( $addResultDiv ) {
- $rules .= Xml::element( 'div',
+ $rulesContainer .= Xml::element( 'div',
[ 'id' => 'mw-abusefilter-syntaxresult', 'style' => 'display: none;' ],
'&#160;' );
}
@@ -1971,7 +2173,46 @@ class AbuseFilter {
$wgOut->addModules( 'ext.abuseFilter.edit' );
self::$editboxName = $textName;
- return $rules;
+ return $rulesContainer;
+ }
+
+ /**
+ * Build input and button for loading a filter
+ *
+ * @return string
+ */
+ static function buildFilterLoader() {
+ $loadText =
+ new OOUI\TextInputWidget(
+ [
+ 'type' => 'number',
+ 'name' => 'wpInsertFilter',
+ 'id' => 'mw-abusefilter-load-filter'
+ ]
+ );
+ $loadButton =
+ new OOUI\ButtonInputWidget(
+ [
+ '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;
}
/**
@@ -2011,8 +2252,11 @@ class AbuseFilter {
// They're both unset
} elseif ( isset( $actions1[$action] ) && isset( $actions2[$action] ) ) {
// 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';
}
@@ -2074,7 +2318,7 @@ class AbuseFilter {
// 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" )->escaped();
$display = wfMessage( "abusefilter-action-$action", $display )->isDisabled() ? $action : $display;
return $display;
@@ -2149,14 +2393,7 @@ class AbuseFilter {
);
$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;
}
@@ -2182,14 +2419,7 @@ class AbuseFilter {
);
$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,14 +2459,7 @@ 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;
@@ -2261,7 +2484,7 @@ class AbuseFilter {
[ '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.
@@ -2396,12 +2619,28 @@ class AbuseFilter {
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
+ $displayAction = self::getActionDisplay( 'block' ) .
+ ' ' .
+ wfMessage( 'abusefilter-block-anon' ) .
+ wfMessage( 'colon-separator' )->escaped() .
+ $wgLang->translateBlockExpiry( $parameters[1] ) .
+ wfMessage( 'comma-separator' )->escaped() .
+ $wgLang->lcfirst( self::getActionDisplay( 'block' ) ) .
+ ' ' .
+ wfMessage( 'abusefilter-block-user' ) .
wfMessage( 'colon-separator' )->escaped() .
- $wgLang->semicolonList( $parameters );
+ $wgLang->translateBlockExpiry( $parameters[2] );
+ } else {
+ $displayAction = self::getActionDisplay( $action ) .
+ wfMessage( 'colon-separator' )->escaped() .
+ htmlspecialchars( $wgLang->semicolonList( $parameters ) );
+ }
}
return $displayAction;
@@ -2417,7 +2656,7 @@ class AbuseFilter {
$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 );
@@ -2529,10 +2768,10 @@ class AbuseFilter {
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/www/wiki/extensions/AbuseFilter/includes/AbuseFilterChangesList.php b/www/wiki/extensions/AbuseFilter/includes/AbuseFilterChangesList.php
new file mode 100644
index 00000000..c5996796
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/includes/AbuseFilterChangesList.php
@@ -0,0 +1,118 @@
+<?php
+
+class AbuseFilterChangesList extends OldChangesList {
+
+ /**
+ * @var string
+ */
+ private $testFilter;
+
+ public function __construct( Skin $skin, $testFilter ) {
+ parent::__construct( $skin );
+ $this->testFilter = $testFilter;
+ }
+
+ /**
+ * @param string &$s
+ * @param RecentChange &$rc
+ * @param string[] &$classes
+ */
+ 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();
+
+ # 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();
+ }
+
+ /**
+ * @param string &$s
+ * @param RecentChange &$rc
+ */
+ public function insertRollback( &$s, &$rc ) {
+ // Kill rollback links.
+ }
+}
diff --git a/www/wiki/extensions/AbuseFilter/includes/AbuseFilter.hooks.php b/www/wiki/extensions/AbuseFilter/includes/AbuseFilterHooks.php
index 9ad8e076..07e289bd 100644
--- a/www/wiki/extensions/AbuseFilter/includes/AbuseFilter.hooks.php
+++ b/www/wiki/extensions/AbuseFilter/includes/AbuseFilterHooks.php
@@ -1,7 +1,7 @@
<?php
-use MediaWiki\Auth\AuthManager;
use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\Database;
class AbuseFilterHooks {
const FETCH_ALL_TAGS_KEY = 'abusefilter-fetch-all-tags';
@@ -212,21 +212,22 @@ class AbuseFilterHooks {
}
/**
- * @param Article|WikiPage $article
- * @param User $user
+ * @param WikiPage &$wikiPage
+ * @param User &$user
* @param string $content Content
* @param string $summary
* @param bool $minoredit
* @param bool $watchthis
* @param string $sectionanchor
- * @param int $flags
+ * @param int &$flags
* @param Revision $revision
- * @param Status $status
+ * @param Status &$status
* @param int $baseRevId
+ *
* @return bool
*/
public static function onPageContentSaveComplete(
- &$article, &$user, $content, $summary, $minoredit, $watchthis, $sectionanchor,
+ WikiPage &$wikiPage, &$user, $content, $summary, $minoredit, $watchthis, $sectionanchor,
&$flags, $revision, &$status, $baseRevId
) {
if ( !self::$successful_action_vars || !$revision ) {
@@ -239,12 +240,12 @@ class AbuseFilterHooks {
$vars = self::$successful_action_vars;
if ( $vars->getVar( 'article_prefixedtext' )->toString() !==
- $article->getTitle()->getPrefixedText()
+ $wikiPage->getTitle()->getPrefixedText()
) {
return true;
}
- if ( !self::identicalPageObjects( $article, self::$last_edit_page ) ) {
+ if ( !self::identicalPageObjects( $wikiPage, self::$last_edit_page ) ) {
return true; // this isn't the edit $successful_action_vars was set for
}
self::$last_edit_page = false;
@@ -254,7 +255,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 +267,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 );
@@ -296,7 +297,7 @@ class AbuseFilterHooks {
/**
* @param User $user
- * @param array $promote
+ * @param array &$promote
* @return bool
*/
public static function onGetAutoPromoteGroups( $user, &$promote ) {
@@ -345,11 +346,11 @@ class AbuseFilterHooks {
}
/**
- * @param WikiPage $article
- * @param User $user
- * @param string $reason
- * @param string $error
- * @param Status $status
+ * @param WikiPage &$article
+ * @param User &$user
+ * @param string &$reason
+ * @param string &$error
+ * @param Status &$status
* @return bool
*/
public static function onArticleDelete( &$article, &$user, &$reason, &$error, &$status ) {
@@ -372,63 +373,6 @@ 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
*/
@@ -440,7 +384,7 @@ 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] ) ) {
@@ -536,11 +480,13 @@ class AbuseFilterHooks {
}
);
+ $tags[] = 'abusefilter-condition-limit';
+
return true;
}
/**
- * @param string[] $tags
+ * @param string[] &$tags
* @return bool
*/
public static function onListDefinedTags( array &$tags ) {
@@ -548,7 +494,7 @@ class AbuseFilterHooks {
}
/**
- * @param string[] $tags
+ * @param string[] &$tags
* @return bool
*/
public static function onChangeTagsListActive( array &$tags ) {
@@ -556,11 +502,11 @@ class AbuseFilterHooks {
}
/**
- * @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' ) {
@@ -659,7 +605,15 @@ class AbuseFilterHooks {
$updater->addExtensionUpdate( [
'addPgExtIndex', 'abuse_filter_log', 'abuse_filter_log_wiki', "(afl_wiki)" ] );
$updater->addExtensionUpdate( [
- 'changeField', 'abuse_filter_log', 'afl_namespace', "INTEGER" ] );
+ 'changeField', 'abuse_filter_log', 'afl_namespace', "INTEGER", '' ] );
+ $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( [ [ __CLASS__, 'createAbuseFilterUser' ] ] );
@@ -684,20 +638,21 @@ class AbuseFilterHooks {
}
/**
- * @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 ]
);
}
}
@@ -768,7 +723,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'] );
@@ -824,7 +783,7 @@ class AbuseFilterHooks {
/**
* Adds global variables to the Javascript as needed
*
- * @param array $vars
+ * @param array &$vars
* @return bool
*/
public static function onMakeGlobalVariablesScript( array &$vars ) {
@@ -845,7 +804,7 @@ class AbuseFilterHooks {
/**
* Tables that Extension:UserMerge needs to update
*
- * @param array $updateFields
+ * @param array &$updateFields
* @return bool
*/
public static function onUserMergeAccountFields( array &$updateFields ) {
diff --git a/www/wiki/extensions/AbuseFilter/includes/AbuseFilterModifyLogFormatter.php b/www/wiki/extensions/AbuseFilter/includes/AbuseFilterModifyLogFormatter.php
index 8a148f23..769c27d3 100644
--- a/www/wiki/extensions/AbuseFilter/includes/AbuseFilterModifyLogFormatter.php
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php b/www/wiki/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php
index 9058c6ee..046c4c30 100644
--- a/www/wiki/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php
+++ b/www/wiki/extensions/AbuseFilter/includes/AbuseFilterPreAuthenticationProvider.php
@@ -1,6 +1,7 @@
<?php
use MediaWiki\Auth\AbstractPreAuthenticationProvider;
+use MediaWiki\Auth\AuthenticationRequest;
class AbuseFilterPreAuthenticationProvider extends AbstractPreAuthenticationProvider {
public function testForAccountCreation( $user, $creator, array $reqs ) {
diff --git a/www/wiki/extensions/AbuseFilter/includes/AbuseFilterVariableHolder.php b/www/wiki/extensions/AbuseFilter/includes/AbuseFilterVariableHolder.php
index 8a1a1ee4..dd6f0be6 100644
--- a/www/wiki/extensions/AbuseFilter/includes/AbuseFilterVariableHolder.php
+++ b/www/wiki/extensions/AbuseFilter/includes/AbuseFilterVariableHolder.php
@@ -11,8 +11,8 @@ class AbuseFilterVariableHolder {
}
/**
- * @param $variable
- * @param $datum
+ * @param string $variable
+ * @param mixed $datum
*/
function setVar( $variable, $datum ) {
$variable = strtolower( $variable );
@@ -24,9 +24,9 @@ class AbuseFilterVariableHolder {
}
/**
- * @param $variable
- * @param $method
- * @param $parameters
+ * @param string $variable
+ * @param string $method
+ * @param array $parameters
*/
function setLazyLoadVar( $variable, $method, $parameters ) {
$placeholder = new AFComputedVariable( $method, $parameters );
@@ -36,7 +36,7 @@ class AbuseFilterVariableHolder {
/**
* Get a variable from the current object
*
- * @param $variable string
+ * @param string $variable
* @return AFPData
*/
function getVar( $variable ) {
@@ -64,7 +64,7 @@ class AbuseFilterVariableHolder {
}
/**
- * @param $addHolder
+ * @param self $addHolder
* @throws MWException
* @deprecated use addHolders() instead
*/
@@ -134,8 +134,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 ) {
@@ -190,7 +190,7 @@ class AbuseFilterVariableHolder {
}
/**
- * @param $var
+ * @param string $var
* @return bool
*/
function varIsSet( $var ) {
diff --git a/www/wiki/extensions/AbuseFilter/includes/AbuseLogHitFormatter.php b/www/wiki/extensions/AbuseFilter/includes/AbuseLogHitFormatter.php
index 4daf0e57..b6bc83e4 100644
--- a/www/wiki/extensions/AbuseFilter/includes/AbuseLogHitFormatter.php
+++ b/www/wiki/extensions/AbuseFilter/includes/AbuseLogHitFormatter.php
@@ -1,4 +1,5 @@
<?php
+
use MediaWiki\MediaWikiServices;
/**
diff --git a/www/wiki/extensions/AbuseFilter/includes/TableDiffFormatterFullContext.php b/www/wiki/extensions/AbuseFilter/includes/TableDiffFormatterFullContext.php
new file mode 100644
index 00000000..f88b953f
--- /dev/null
+++ b/www/wiki/extensions/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.
+ */
+ 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/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterView.php b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterView.php
index b8d5fd57..11b06bbf 100644
--- a/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterView.php
+++ b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterView.php
@@ -11,8 +11,8 @@ abstract class AbuseFilterView extends ContextSource {
protected $linkRenderer;
/**
- * @param $page SpecialAbuseFilter
- * @param $params array
+ * @param SpecialAbuseFilter $page
+ * @param array $params
*/
function __construct( $page, $params ) {
$this->mPage = $page;
@@ -110,102 +110,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/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewDiff.php b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewDiff.php
index 6c29664e..4a3b1881 100644
--- a/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewDiff.php
+++ b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewDiff.php
@@ -1,40 +1,5 @@
<?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;
diff --git a/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewEdit.php b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewEdit.php
index 952fcce7..9f4db06e 100644
--- a/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewEdit.php
+++ b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewEdit.php
@@ -11,33 +11,6 @@ class AbuseFilterViewEdit extends AbuseFilterView {
$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
- */
- 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
*
@@ -45,7 +18,7 @@ class AbuseFilterViewEdit extends AbuseFilterView {
* @return Status
*/
protected function isAllowedTag( $tag ) {
- $tagNameStatus = self::isTagNameValid( $tag );
+ $tagNameStatus = ChangeTags::isTagNameValid( $tag );
if ( !$tagNameStatus->isGood() ) {
return $tagNameStatus;
@@ -131,6 +104,28 @@ class AbuseFilterViewEdit extends AbuseFilterView {
);
return;
}
+ // Check for missing required fields (title and pattern)
+ $missing = [];
+ if ( !$request->getVal( 'wpFilterRules' ) ||
+ trim( $request->getVal( 'wpFilterRules' ) ) === '' ) {
+ $missing[] = $this->msg( 'abusefilter-edit-field-conditions' )->escaped();
+ }
+ if ( !$request->getVal( 'wpFilterDescription' ) ) {
+ $missing[] = $this->msg( 'abusefilter-edit-field-description' )->escaped();
+ }
+ if ( count( $missing ) !== 0 ) {
+ $missing = $this->getLanguage()->commaList( $missing );
+ $out->addHTML(
+ $this->buildFilterEditor(
+ $this->msg(
+ 'abusefilter-edit-missingfields',
+ $missing
+ )->parseAsBlock(),
+ $filter, $history_id
+ )
+ );
+ return;
+ }
$dbw = wfGetDB( DB_MASTER );
@@ -327,7 +322,8 @@ class AbuseFilterViewEdit extends AbuseFilterView {
}
// Logging
- $logEntry = new ManualLogEntry( 'abusefilter', 'modify' );
+ $subtype = $filter === 'new' ? 'create' : 'modify';
+ $logEntry = new ManualLogEntry( 'abusefilter', $subtype );
$logEntry->setPerformer( $user );
$logEntry->setTarget( $this->getTitle( $new_id ) );
$logEntry->setParameters( [
@@ -377,9 +373,9 @@ 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 $error An error message to show above the filter box.
+ * @param int $filter The filter ID
+ * @param int $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.
*/
@@ -412,7 +408,7 @@ 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 = '';
@@ -435,7 +431,7 @@ class AbuseFilterViewEdit extends AbuseFilterView {
$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(
@@ -517,7 +513,7 @@ class AbuseFilterViewEdit extends AbuseFilterView {
$readOnlyAttrib
);
- // Build checkboxen
+ // Build checkboxes
$checkboxes = [ 'hidden', 'enabled', 'deleted' ];
$flags = '';
@@ -544,9 +540,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 ) )
+ ->escaped()
+ )
);
}
}
@@ -663,8 +661,8 @@ 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.
*/
@@ -692,10 +690,10 @@ 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
+ * @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
*/
function buildConsequenceSelector( $action, $set, $parameters, $row ) {
@@ -847,13 +845,94 @@ class AbuseFilterViewEdit extends AbuseFilterView {
Xml::buildForm( $tagFields )
);
return $output;
+ case 'block':
+ global $wgBlockAllowsUTEdit, $wgAbuseFilterBlockDuration,
+ $wgAbuseFilterAnonBlockDuration;
+
+ 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 ( $wgAbuseFilterAnonBlockDuration ) {
+ $defaultAnonDuration = $wgAbuseFilterAnonBlockDuration;
+ } else {
+ $defaultAnonDuration = $wgAbuseFilterBlockDuration;
+ }
+ $defaultUserDuration = $wgAbuseFilterBlockDuration;
+ }
+ $suggestedBlocks = SpecialBlock::getSuggestedDurations();
+ $suggestedBlocks = self::normalizeBlocks( $suggestedBlocks );
+
+ $output = '';
+ $checkbox = Xml::checkLabel(
+ $this->msg( 'abusefilter-edit-action-block' )->text(),
+ 'wpFilterActionBlock',
+ "mw-abusefilter-action-checkbox-block",
+ $set,
+ [ 'class' => 'mw-abusefilter-action-checkbox' ] + $cbReadOnlyAttrib );
+ $output .= Xml::tags( 'p', null, $checkbox );
+ if ( $wgBlockAllowsUTEdit === true ) {
+ $talkCheckbox =
+ Xml::checkLabel(
+ $this->msg( 'abusefilter-edit-action-blocktalk' )->text(),
+ 'wpFilterBlockTalk',
+ 'mw-abusefilter-action-checkbox-blocktalk',
+ isset( $blockTalk ) && $blockTalk == 'blocktalk',
+ [ 'class' => 'mw-abusefilter-action-checkbox' ] + $cbReadOnlyAttrib
+ );
+ }
+
+ $anonDuration = new XmlSelect(
+ 'wpBlockAnonDuration',
+ false,
+ 'default'
+ );
+ $anonDuration->addOptions( $suggestedBlocks );
+
+ $userDuration = new XmlSelect(
+ 'wpBlockUserDuration',
+ false,
+ 'default'
+ );
+ $userDuration->addOptions( $suggestedBlocks );
+
+ // Set defaults
+ $anonDuration->setDefault( $defaultAnonDuration );
+ $userDuration->setDefault( $defaultUserDuration );
+
+ if ( !$this->canEditFilter( $row ) ) {
+ $anonDuration->setAttribute( 'disabled', 'disabled' );
+ $userDuration->setAttribute( 'disabled', 'disabled' );
+ }
+
+ if ( $wgBlockAllowsUTEdit === true ) {
+ $durations['abusefilter-edit-block-options'] = $talkCheckbox;
+ }
+ $durations['abusefilter-edit-block-anon-durations'] = $anonDuration->getHTML();
+ $durations['abusefilter-edit-block-user-durations'] = $userDuration->getHTML();
+
+ $rawOutput = Xml::buildForm( $durations );
+
+ $output .= Xml::tags(
+ 'div',
+ [ 'id' => 'mw-abusefilter-block-parameters' ],
+ $rawOutput
+ );
+
+ 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-degroup, abusefilter-edit-action-throttle
+ // abusefilter-edit-action-rangeblock, abusefilter-edit-action-tag
$message = 'abusefilter-edit-action-' . $action;
$form_field = 'wpFilterAction' . ucfirst( $action );
$status = $set;
@@ -871,8 +950,8 @@ class AbuseFilterViewEdit extends AbuseFilterView {
}
/**
- * @param $warnMsg string
- * @param $readOnly bool
+ * @param string $warnMsg
+ * @param bool $readOnly
* @return string
*/
function getExistingSelector( $warnMsg, $readOnly = false ) {
@@ -917,8 +996,39 @@ class AbuseFilterViewEdit extends AbuseFilterView {
}
/**
+ * @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.
+ foreach ( $durations as &$duration ) {
+ $currentDuration = SpecialBlock::parseExpiryInput( $duration );
+ $anonDuration = SpecialBlock::parseExpiryInput( $wgAbuseFilterAnonBlockDuration );
+ $userDuration = SpecialBlock::parseExpiryInput( $wgAbuseFilterBlockDuration );
+
+ if ( $duration !== $wgAbuseFilterBlockDuration &&
+ $currentDuration === $userDuration ) {
+ $duration = $wgAbuseFilterBlockDuration;
+
+ } elseif ( $duration !== $wgAbuseFilterAnonBlockDuration &&
+ $currentDuration === $anonDuration ) {
+ $duration = $wgAbuseFilterAnonBlockDuration;
+ }
+ }
+
+ return $durations;
+ }
+
+ /**
* 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.
*/
@@ -978,7 +1088,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,8 +1101,8 @@ 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.
+ * @param int $filter The filter ID being requested.
+ * @param int $history_id If any, the history ID being requested.
* @return 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.
@@ -1085,8 +1195,13 @@ 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 == 'tag' ) {
- $parameters = explode( "\n", $request->getText( 'wpFilterTags' ) );
+ $parameters = explode( "\n", trim( $request->getText( 'wpFilterTags' ) ) );
}
$thisAction = [ 'action' => $action, 'parameters' => $parameters ];
@@ -1102,7 +1217,7 @@ class AbuseFilterViewEdit extends AbuseFilterView {
/**
* 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.
@@ -1124,6 +1239,9 @@ class AbuseFilterViewEdit extends AbuseFilterView {
return AbuseFilter::translateFromHistory( $row );
}
+ /**
+ * @return null
+ */
protected function exposeWarningMessages() {
global $wgOut, $wgAbuseFilterDefaultWarningMessage;
$wgOut->addJsConfigVars(
diff --git a/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewExamine.php b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewExamine.php
index 4d72a7d4..73cb2d10 100644
--- a/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewExamine.php
+++ b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewExamine.php
@@ -4,8 +4,8 @@ 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() {
$out = $this->getOutput();
@@ -28,6 +28,9 @@ class AbuseFilterViewExamine extends AbuseFilterView {
}
function showSearch() {
+ $RCMaxAge = $this->getConfig()->get( 'RCMaxAge' );
+ $min = wfTimestamp( TS_ISO_8601, time() - $RCMaxAge );
+ $max = wfTimestampNow();
$formDescriptor = [
'SearchUser' => [
'label-message' => 'abusefilter-test-user',
@@ -36,16 +39,20 @@ class AbuseFilterViewExamine extends AbuseFilterView {
],
'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' )
@@ -59,7 +66,7 @@ class AbuseFilterViewExamine extends AbuseFilterView {
}
function showResults() {
- $changesList = new AbuseFilterChangesList( $this->getSkin() );
+ $changesList = new AbuseFilterChangesList( $this->getSkin(), $this->mTestFilter );
$output = $changesList->beginRecentChangesList();
$this->mCounter = 1;
@@ -77,11 +84,14 @@ class AbuseFilterViewExamine extends AbuseFilterView {
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 ) {
@@ -105,7 +115,12 @@ class AbuseFilterViewExamine extends AbuseFilterView {
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_id' => $logid ],
+ __METHOD__
+ );
$out = $this->getOutput();
if ( !$row ) {
@@ -140,6 +155,7 @@ class AbuseFilterViewExamine extends AbuseFilterView {
function showExaminer( $vars ) {
$output = $this->getOutput();
+ $output->enableOOUI();
if ( !$vars ) {
$output->addWikiMsg( 'abusefilter-examine-incompatible' );
@@ -158,31 +174,13 @@ class AbuseFilterViewExamine extends AbuseFilterView {
if ( $this->getUser()->isAllowed( 'abusefilter-modify' ) ) {
$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 .= 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'
]
) .
@@ -208,81 +206,14 @@ class AbuseFilterViewExamine extends AbuseFilterView {
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/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewHistory.php b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewHistory.php
index a6ef187c..f98241c0 100644
--- a/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewHistory.php
+++ b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewHistory.php
@@ -8,10 +8,10 @@ class AbuseFilterViewHistory extends AbuseFilterView {
function show() {
$out = $this->getOutput();
- $filter = $this->mFilter;
+ $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' ) );
}
@@ -59,13 +59,20 @@ 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 );
@@ -76,206 +83,3 @@ class AbuseFilterViewHistory extends AbuseFilterView {
$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 );
- }
-}
diff --git a/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewList.php b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewList.php
index daecf8d7..715fa536 100644
--- a/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewList.php
+++ b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewList.php
@@ -17,10 +17,12 @@ class AbuseFilterViewList extends AbuseFilterView {
// 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.
@@ -34,6 +36,17 @@ class AbuseFilterViewList extends AbuseFilterView {
}
$scope = $request->getVal( 'rulescope', $defaultscope );
+ $searchEnabled = $this->canViewPrivate() && !( isset( $wgAbuseFilterCentralDB ) &&
+ !$wgAbuseFilterIsCentral && $scope == 'global' );
+
+ if ( $searchEnabled ) {
+ $querypattern = $request->getVal( 'querypattern' );
+ $searchmode = $request->getVal( 'searchoption', 'LIKE' );
+ } else {
+ $querypattern = '';
+ $searchmode = '';
+ }
+
if ( $deleted == 'show' ) {
# Nothing
} elseif ( $deleted == 'only' ) {
@@ -53,112 +66,172 @@ class AbuseFilterViewList extends AbuseFilterView {
$conds['af_global'] = 1;
}
- $this->showList( $conds, compact( 'deleted', 'hidedisabled', 'scope' ) );
+ $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->wrapWikiMsg(
+ '<div class="errorbox">$1</div>',
+ 'abusefilter-list-regexerror'
+ );
+ $this->showList(
+ [ 'af_deleted' => 0 ],
+ compact( 'deleted', 'hidedisabled', '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()
+ );
+ }
+ }
+
+ $this->showList(
+ $conds,
+ compact( 'deleted', 'hidedisabled', 'querypattern', 'searchmode', 'scope', 'searchEnabled' )
+ );
}
function showList( $conds = [ 'af_deleted' => 0 ], $optarray = [] ) {
global $wgAbuseFilterCentralDB, $wgAbuseFilterIsCentral;
- $output = '';
- $output .= Xml::element( 'h2', null,
- $this->msg( 'abusefilter-list' )->parse() );
-
- $pager = new AbuseFilterPager( $this, $conds, $this->linkRenderer );
+ $this->getOutput()->addHTML(
+ Xml::element( 'h2', null, $this->msg( 'abusefilter-list' )->parse() )
+ );
$deleted = $optarray['deleted'];
$hidedisabled = $optarray['hidedisabled'];
$scope = $optarray['scope'];
+ $searchEnabled = $optarray['searchEnabled'];
+ $querypattern = $optarray['querypattern'];
+ $searchmode = $optarray['searchmode'];
- # 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'
+ if ( isset( $wgAbuseFilterCentralDB ) && !$wgAbuseFilterIsCentral && $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 ( isset( $wgAbuseFilterCentralDB ) ) {
+ $optionsMsg = [
+ 'abusefilter-list-options-scope-local' => 'local',
+ 'abusefilter-list-options-scope-global' => 'global',
+ ];
if ( $wgAbuseFilterIsCentral ) {
// 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()
- ],
- $options
- );
- $options = Xml::fieldset( $this->msg( 'abusefilter-list-options' )->text(), $options );
+ $formDescriptor['info'] = [
+ 'type' => 'info',
+ 'default' => $this->msg( 'abusefilter-list-options-disabled' )->parse(),
+ ];
- $output .= $options;
+ $formDescriptor['hidedisabled'] = [
+ 'name' => 'hidedisabled',
+ 'type' => 'check',
+ 'label-message' => 'abusefilter-list-options-hidedisabled',
+ 'selected' => $hidedisabled,
+ ];
- 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
+ ];
}
+ $formDescriptor['limit'] = [
+ 'name' => 'limit',
+ 'type' => 'select',
+ 'label-message' => 'abusefilter-list-limit',
+ 'options' => $pager->getLimitSelectList(),
+ 'default' => $pager->getLimit(),
+ ];
+
+ 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 );
+
+ $output =
+ $pager->getNavigationBar() .
+ $pager->getBody() .
+ $pager->getNavigationBar();
+
$this->getOutput()->addHTML( $output );
}
@@ -192,255 +265,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/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewRevert.php b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewRevert.php
index 1e8c77b0..ef3773d7 100644
--- a/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewRevert.php
+++ b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewRevert.php
@@ -1,10 +1,11 @@
<?php
class AbuseFilterViewRevert extends AbuseFilterView {
- public $origPeriodStart, $origPeriodEnd, $mPeriodStart, $mPeriodEnd,
- $mReason;
+ public $origPeriodStart, $origPeriodEnd, $mPeriodStart, $mPeriodEnd;
+ public $mReason;
function show() {
+ $lang = $this->getLanguage();
$filter = $this->mPage->mFilter;
$user = $this->getUser();
@@ -20,32 +21,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 +72,6 @@ class AbuseFilterViewRevert extends AbuseFilterView {
// Look up all of them.
$results = $this->doLookup();
- $lang = $this->getLanguage();
$list = [];
foreach ( $results as $result ) {
@@ -81,26 +99,41 @@ 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 );
+
}
}
@@ -175,18 +208,21 @@ 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
*/
diff --git a/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewTestBatch.php b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewTestBatch.php
index abc33fc6..47c4be84 100644
--- a/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewTestBatch.php
+++ b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewTestBatch.php
@@ -4,8 +4,8 @@ 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;
function show() {
$out = $this->getOutput();
@@ -21,56 +21,75 @@ 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'
- ]
- );
+ AbuseFilter::buildEditBox(
+ $this->mFilter,
+ 'wpTestFilter',
+ true,
+ true,
+ true
+ ) . "\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['wpTestUser'] = [
+ 'name' => 'wpTestUser',
+ 'type' => 'user',
+ 'ipallowed' => true,
+ 'label-message' => 'abusefilter-test-user',
+ 'default' => $this->mTestUser
+ ];
+ $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
+ ];
+ $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();
+ $htmlForm = $htmlForm->getHTML( $htmlForm );
+
+ $output = Xml::fieldset( $this->msg( 'abusefilter-test-legend' )->text(), $output . $htmlForm );
$out->addHTML( $output );
if ( $this->getRequest()->wasPosted() ) {
@@ -92,7 +111,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 >= ' .
@@ -116,15 +140,17 @@ class AbuseFilterViewTestBatch extends AbuseFilterView {
$conds[] = $this->buildTestConditions( $dbr );
// 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(),
+ $rcQuery['tables'],
+ $rcQuery['fields'],
array_filter( $conds ),
__METHOD__,
- [ 'LIMIT' => self::$mChangeLimit, 'ORDER BY' => 'rc_timestamp desc' ]
+ [ 'LIMIT' => self::$mChangeLimit, 'ORDER BY' => 'rc_timestamp desc' ],
+ $rcQuery['joins']
);
$counter = 1;
@@ -141,7 +167,6 @@ class AbuseFilterViewTestBatch extends AbuseFilterView {
if ( $result || $this->mShowNegative ) {
// Stash result in RC item
$rc = RecentChange::newFromRow( $row );
- $rc->examineParams['testfilter'] = $this->mFilter;
$rc->filterResult = $result;
$rc->counter = $counter++;
$output .= $changesList->recentChangesLine( $rc, false );
@@ -176,15 +201,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/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewTools.php b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewTools.php
index c8625617..cff4b22f 100644
--- a/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewTools.php
+++ b/www/wiki/extensions/AbuseFilter/includes/Views/AbuseFilterViewTools.php
@@ -4,6 +4,7 @@ class AbuseFilterViewTools extends AbuseFilterView {
function show() {
$out = $this->getOutput();
$user = $this->getUser();
+ $request = $this->getRequest();
if ( !$user->isAllowed( 'abusefilter-modify' ) ) {
$out->addWikiMsg( 'abusefilter-mustbeeditor' );
@@ -15,7 +16,7 @@ class AbuseFilterViewTools extends AbuseFilterView {
// Expression evaluator
$eval = '';
- $eval .= AbuseFilter::buildEditBox( '', 'wpTestExpr' );
+ $eval .= AbuseFilter::buildEditBox( $request->getText( 'wpTestExpr' ), 'wpTestExpr' );
$eval .= Xml::tags( 'p', null,
Xml::element( 'input',
diff --git a/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php b/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php
index bcea726e..252c153d 100644
--- a/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php
+++ b/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckMatch.php
@@ -19,11 +19,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 +38,7 @@ class ApiAbuseFilterCheckMatch extends ApiBase {
$dbr = wfGetDB( DB_REPLICA );
$row = $dbr->selectRow(
'abuse_filter_log',
- '*',
+ 'afl_var_dump',
[ 'afl_id' => $params['logid'] ],
__METHOD__
);
@@ -80,6 +83,7 @@ class ApiAbuseFilterCheckMatch extends ApiBase {
/**
* @see ApiBase::getExamplesMessages()
+ * @return array
*/
protected function getExamplesMessages() {
return [
diff --git a/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckSyntax.php b/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckSyntax.php
index b0ac3f73..4854024d 100644
--- a/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckSyntax.php
+++ b/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterCheckSyntax.php
@@ -36,6 +36,7 @@ class ApiAbuseFilterCheckSyntax extends ApiBase {
/**
* @see ApiBase::getExamplesMessages()
+ * @return array
*/
protected function getExamplesMessages() {
return [
diff --git a/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterEvalExpression.php b/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterEvalExpression.php
index 74fb0852..edf4b688 100644
--- a/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterEvalExpression.php
+++ b/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterEvalExpression.php
@@ -19,6 +19,7 @@ class ApiAbuseFilterEvalExpression extends ApiBase {
/**
* @see ApiBase::getExamplesMessages()
+ * @return array
*/
protected function getExamplesMessages() {
return [
diff --git a/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterUnblockAutopromote.php b/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterUnblockAutopromote.php
index 5ceb17f8..07f134ec 100644
--- a/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterUnblockAutopromote.php
+++ b/www/wiki/extensions/AbuseFilter/includes/api/ApiAbuseFilterUnblockAutopromote.php
@@ -51,6 +51,7 @@ class ApiAbuseFilterUnblockAutopromote extends ApiBase {
/**
* @see ApiBase::getExamplesMessages()
+ * @return array
*/
protected function getExamplesMessages() {
return [
diff --git a/www/wiki/extensions/AbuseFilter/includes/api/ApiQueryAbuseFilters.php b/www/wiki/extensions/AbuseFilter/includes/api/ApiQueryAbuseFilters.php
index 79808125..d730483d 100644
--- a/www/wiki/extensions/AbuseFilter/includes/api/ApiQueryAbuseFilters.php
+++ b/www/wiki/extensions/AbuseFilter/includes/api/ApiQueryAbuseFilters.php
@@ -205,6 +205,7 @@ class ApiQueryAbuseFilters extends ApiQueryBase {
/**
* @see ApiBase::getExamplesMessages()
+ * @return array
*/
protected function getExamplesMessages() {
return [
diff --git a/www/wiki/extensions/AbuseFilter/includes/api/ApiQueryAbuseLog.php b/www/wiki/extensions/AbuseFilter/includes/api/ApiQueryAbuseLog.php
index 9155bac1..6cd4f17c 100644
--- a/www/wiki/extensions/AbuseFilter/includes/api/ApiQueryAbuseLog.php
+++ b/www/wiki/extensions/AbuseFilter/includes/api/ApiQueryAbuseLog.php
@@ -35,6 +35,8 @@ class ApiQueryAbuseLog extends ApiQueryBase {
}
public function execute() {
+ global $wgAbuseFilterIsCentral;
+
$user = $this->getUser();
$errors = $this->getTitle()->getUserPermissionsErrors(
'abusefilter-log', $user, true, [ 'ns-specialprotected' ] );
@@ -56,6 +58,7 @@ class ApiQueryAbuseLog extends ApiQueryBase {
$fld_timestamp = isset( $prop['timestamp'] );
$fld_hidden = isset( $prop['hidden'] );
$fld_revid = isset( $prop['revid'] );
+ $fld_wiki = $wgAbuseFilterIsCentral && isset( $prop['wiki'] );
if ( $fld_details ) {
$this->checkUserRightsAny( 'abusefilter-log-detail' );
@@ -90,6 +93,7 @@ class ApiQueryAbuseLog extends ApiQueryBase {
$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' );
@@ -131,6 +135,10 @@ class ApiQueryAbuseLog extends ApiQueryBase {
$this->addWhereIf( [ 'afl_filter' => $params['filter'] ], isset( $params['filter'] ) );
$this->addWhereIf( $notDeletedCond, !SpecialAbuseLog::canSeeHidden( $user ) );
+ if ( isset( $params['wiki'] ) ) {
+ // 'wiki' won't be set if $wgAbuseFilterIsCentral = false
+ $this->addWhereIf( [ 'afl_wiki' => $params['wiki'] ], $wgAbuseFilterIsCentral );
+ }
$title = $params['title'];
if ( !is_null( $title ) ) {
@@ -181,6 +189,9 @@ class ApiQueryAbuseLog extends ApiQueryBase {
if ( $fld_user ) {
$entry['user'] = $row->afl_user_text;
}
+ if ( $fld_wiki ) {
+ $entry['wiki'] = $row->afl_wiki;
+ }
if ( $fld_title ) {
$title = Title::makeTitle( $row->afl_namespace, $row->afl_title );
ApiQueryBase::addTitleInfo( $entry, $title );
@@ -230,7 +241,9 @@ class ApiQueryAbuseLog extends ApiQueryBase {
}
public function getAllowedParams() {
- return [
+ global $wgAbuseFilterIsCentral;
+
+ $params = [
'start' => [
ApiBase::PARAM_TYPE => 'timestamp'
],
@@ -248,6 +261,7 @@ class ApiQueryAbuseLog extends ApiQueryBase {
'user' => null,
'title' => null,
'filter' => [
+ ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_ISMULTI => true
],
'limit' => [
@@ -274,10 +288,19 @@ class ApiQueryAbuseLog extends ApiQueryBase {
ApiBase::PARAM_ISMULTI => true
]
];
+ if ( $wgAbuseFilterIsCentral ) {
+ $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/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseFilterExaminePager.php b/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseFilterExaminePager.php
new file mode 100644
index 00000000..495bd4f8
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseFilterExaminePager.php
@@ -0,0 +1,72 @@
+<?php
+
+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
+ * @return array
+ */
+ 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 );
+ }
+
+ function getIndexField() {
+ return 'rc_id';
+ }
+
+ function getTitle() {
+ return $this->mPage->getTitle( 'examine' );
+ }
+
+ function getEmptyBody() {
+ return $this->msg( 'abusefilter-examine-noresults' )->parseAsBlock();
+ }
+}
diff --git a/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseFilterHistoryPager.php b/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseFilterHistoryPager.php
new file mode 100644
index 00000000..375b940e
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseFilterHistoryPager.php
@@ -0,0 +1,204 @@
+<?php
+
+class AbuseFilterHistoryPager extends TablePager {
+
+ protected $linkRenderer;
+ /**
+ * @param string $filter
+ * @param ContextSource $page
+ * @param string $user 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 );
+ }
+}
diff --git a/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseFilterPager.php b/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseFilterPager.php
new file mode 100644
index 00000000..f4e62ad7
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseFilterPager.php
@@ -0,0 +1,260 @@
+<?php
+
+/**
+ * Class to build paginated filter list
+ */
+class AbuseFilterPager extends TablePager {
+
+ /**
+ * @var \MediaWiki\Linker\LinkRenderer
+ */
+ protected $linkRenderer;
+
+ function __construct( $page, $conds, $linkRenderer, $query ) {
+ $this->mPage = $page;
+ $this->mConds = $conds;
+ $this->linkRenderer = $linkRenderer;
+ $this->mQuery = $query;
+ parent::__construct( $this->mPage->getContext() );
+ }
+
+ function getQueryInfo() {
+ return [
+ 'tables' => [ 'abuse_filter' ],
+ 'fields' => [
+ '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',
+ ],
+ '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';
+ }
+
+ if ( AbuseFilterView::canViewPrivate() && !empty( $this->mQuery[0] ) ) {
+ $headers['af_pattern'] = 'abusefilter-list-pattern';
+ }
+
+ 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_pattern':
+ if ( $this->mQuery[1] === 'LIKE' ) {
+ $position = mb_strpos(
+ strtolower( $row->af_pattern ),
+ strtolower( $this->mQuery[0] ),
+ 0,
+ 'UTF8'
+ );
+ 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, 'UTF8' ) );
+ }
+ $length = mb_strlen( $this->mQuery[0], 'UTF8' );
+ } elseif ( $this->mQuery[1] === 'RLIKE' ) {
+ Wikimedia\suppressWarnings();
+ $check = preg_match(
+ '/' . $this->mQuery[0] . '/',
+ $row->af_pattern,
+ $matches,
+ PREG_OFFSET_CAPTURE
+ );
+ Wikimedia\restoreWarnings();
+ // This may happen in case of catastrophic backtracking
+ if ( $check === false ) {
+ return htmlspecialchars( mb_substr( $row->af_pattern, 0, 50, 'UTF8' ) );
+ }
+ $length = mb_strlen( $matches[0][0], 'UTF8' );
+ $position = $matches[0][1];
+ } elseif ( $this->mQuery[1] === 'IRLIKE' ) {
+ Wikimedia\suppressWarnings();
+ $check = preg_match(
+ '/' . $this->mQuery[0] . '/i',
+ $row->af_pattern,
+ $matches,
+ PREG_OFFSET_CAPTURE
+ );
+ Wikimedia\restoreWarnings();
+ // This may happen in case of catastrophic backtracking
+ if ( $check === false ) {
+ return htmlspecialchars( mb_substr( $row->af_pattern, 0, 50, 'UTF8' ) );
+ }
+ $length = mb_strlen( $matches[0][0], 'UTF8' );
+ $position = $matches[0][1];
+ }
+ $remaining = 50 - $length;
+ if ( $remaining <= 0 ) {
+ $pattern = '<b>' .
+ htmlspecialchars( mb_substr( $row->af_pattern, 0, 50, 'UTF8' ) ) .
+ '</b>';
+ } else {
+ $minoffset = max( $position - round( $remaining / 2 ), 0 );
+ $pattern = mb_substr( $row->af_pattern, $minoffset, 50, 'UTF8' );
+ $pattern =
+ htmlspecialchars( mb_substr( $pattern, 0, $position - $minoffset, 'UTF8' ) ) .
+ '<b>' .
+ htmlspecialchars( mb_substr( $pattern, $position - $minoffset, $length, 'UTF8' ) ) .
+ '</b>' .
+ htmlspecialchars( mb_substr(
+ $pattern,
+ $position - $minoffset + $length,
+ $remaining - ( $position - $minoffset + $length ),
+ 'UTF8'
+ )
+ );
+ }
+ 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 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 getTableClass() {
+ return 'TablePager mw-abusefilter-list-scrollable';
+ }
+
+ 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 );
+ }
+}
diff --git a/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseLogPager.php b/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseLogPager.php
new file mode 100644
index 00000000..8b4513fe
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/includes/pagers/AbuseLogPager.php
@@ -0,0 +1,79 @@
+<?php
+
+use Wikimedia\Rdbms\ResultWrapper;
+
+class AbuseLogPager extends ReverseChronologicalPager {
+ /**
+ * @var SpecialAbuseLog
+ */
+ public $mForm;
+
+ /**
+ * @var array
+ */
+ public $mConds;
+
+ /**
+ * @param SpecialAbuseLog $form
+ * @param array $conds
+ */
+ function __construct( $form, $conds = [] ) {
+ $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;
+ }
+
+ /**
+ * @param ResultWrapper $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 );
+ }
+
+ function getIndexField() {
+ return 'afl_timestamp';
+ }
+}
diff --git a/www/wiki/extensions/AbuseFilter/includes/pagers/GlobalAbuseFilterPager.php b/www/wiki/extensions/AbuseFilter/includes/pagers/GlobalAbuseFilterPager.php
new file mode 100644
index 00000000..36c84a01
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/includes/pagers/GlobalAbuseFilterPager.php
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * 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, [ '', 'LIKE' ] );
+ 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 )->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/www/wiki/extensions/AbuseFilter/includes/parser/AFPData.php b/www/wiki/extensions/AbuseFilter/includes/parser/AFPData.php
index d5a0069d..ff1faa98 100644
--- a/www/wiki/extensions/AbuseFilter/includes/parser/AFPData.php
+++ b/www/wiki/extensions/AbuseFilter/includes/parser/AFPData.php
@@ -36,7 +36,7 @@ class AFPData {
}
/**
- * @param $var
+ * @param mixed $var
* @return AFPData
* @throws AFPException
*/
@@ -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 ) {
@@ -123,7 +123,7 @@ class AFPData {
}
/**
- * @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,8 +177,8 @@ class AFPData {
}
/**
- * @param $value
- * @param $list
+ * @param string $value
+ * @param mixed $list
* @return bool
*/
public static function listContains( $value, $list ) {
@@ -188,35 +193,56 @@ class AFPData {
}
/**
- * @param $d1 AFPData
- * @param $d2 AFPData
+ * @ToDo Should we also build a proper system to compare arrays with different types?
+ * @param AFPData $d1
+ * @param AFPData $d2
+ * @param bool $strict whether to also check types
* @return bool
*/
- public static function equals( $d1, $d2 ) {
- return $d1->type != self::DLIST && $d2->type != self::DLIST &&
- $d1->toString() === $d2->toString();
+ public static function equals( $d1, $d2, $strict = false ) {
+ if ( $d1->type != self::DLIST && $d2->type != self::DLIST ) {
+ $typecheck = $d1->type == $d2->type || !$strict;
+ return $typecheck && $d1->toString() === $d2->toString();
+ } elseif ( $d1->type == self::DLIST && $d2->type == self::DLIST ) {
+ $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
+ return false;
+ }
}
/**
- * @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,7 +257,9 @@ class AFPData {
$pattern .= 'i';
}
+ Wikimedia\suppressWarnings();
$result = preg_match( $pattern, $str );
+ Wikimedia\restoreWarnings();
if ( $result === false ) {
throw new AFPUserVisibleException(
'regexfailure',
@@ -244,9 +272,9 @@ class AFPData {
}
/**
- * @param $str
- * @param $regex
- * @param $pos
+ * @param string $str
+ * @param string $regex
+ * @param int $pos
* @return AFPData
*/
public static function keywordRegexInsensitive( $str, $regex, $pos ) {
@@ -254,7 +282,7 @@ class AFPData {
}
/**
- * @param $data AFPData
+ * @param AFPData $data
* @return AFPData
*/
public static function unaryMinus( $data ) {
@@ -266,9 +294,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
*/
@@ -288,9 +316,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
*/
@@ -302,10 +330,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();
@@ -325,27 +353,17 @@ class AFPData {
}
/**
- * @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,18 +380,20 @@ 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 ) {
@@ -382,17 +402,27 @@ class AFPData {
} elseif ( $a->type == self::DLIST && $b->type == self::DLIST ) {
return new AFPData( self::DLIST, array_merge( $a->toList(), $b->toList() ) );
} 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 */
@@ -454,6 +484,13 @@ class AFPData {
return self::castTypes( $this, self::DINT )->data;
}
+ /**
+ * @return int|float
+ */
+ public function toNumber() {
+ return $this->type == self::DINT ? $this->toInt() : $this->toFloat();
+ }
+
public function toList() {
return self::castTypes( $this, self::DLIST )->data;
}
diff --git a/www/wiki/extensions/AbuseFilter/includes/parser/AFPUserVisibleException.php b/www/wiki/extensions/AbuseFilter/includes/parser/AFPUserVisibleException.php
index 45eea745..b6e89d03 100644
--- a/www/wiki/extensions/AbuseFilter/includes/parser/AFPUserVisibleException.php
+++ b/www/wiki/extensions/AbuseFilter/includes/parser/AFPUserVisibleException.php
@@ -31,7 +31,7 @@ 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-notlist, abusefilter-exception-unclosedcomment
return wfMessage(
'abusefilter-exception-' . $this->mExceptionID,
array_merge( [ $this->mPosition ], $this->mParams )
diff --git a/www/wiki/extensions/AbuseFilter/includes/parser/AbuseFilterCachingParser.php b/www/wiki/extensions/AbuseFilter/includes/parser/AbuseFilterCachingParser.php
index 0c5ba69e..37384356 100644
--- a/www/wiki/extensions/AbuseFilter/includes/parser/AbuseFilterCachingParser.php
+++ b/www/wiki/extensions/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;
diff --git a/www/wiki/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php b/www/wiki/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php
index f9bd15b3..50f8dddc 100644
--- a/www/wiki/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php
+++ b/www/wiki/extensions/AbuseFilter/includes/parser/AbuseFilterParser.php
@@ -1,5 +1,7 @@
<?php
+use Wikimedia\Equivset\Equivset;
+
class AbuseFilterParser {
public $mCode, $mTokens, $mPos, $mCur, $mShortCircuit, $mAllowShort, $mLen;
@@ -8,7 +10,7 @@ class AbuseFilterParser {
*/
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 +21,18 @@ 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',
'substr' => 'funcSubstr',
'strlen' => 'funcLen',
'strpos' => 'funcStrPos',
@@ -48,15 +54,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 $vars
*/
public function __construct( $vars = null ) {
$this->resetState();
@@ -75,7 +86,7 @@ class AbuseFilterParser {
}
/**
- * @param $filter
+ * @param string $filter
* @return array|bool
*/
public function checkSyntax( $filter ) {
@@ -94,15 +105,15 @@ class AbuseFilterParser {
}
/**
- * @param $name
- * @param $value
+ * @param string $name
+ * @param mixed $value
*/
public function setVar( $name, $value ) {
$this->mVars->setVar( $name, $value );
}
/**
- * @param $vars
+ * @param mixed $vars
*/
public function setVars( $vars ) {
if ( is_array( $vars ) ) {
@@ -166,7 +177,7 @@ class AbuseFilterParser {
}
/**
- * @param $code
+ * @param string $code
* @return bool
*/
public function parse( $code ) {
@@ -174,7 +185,7 @@ class AbuseFilterParser {
}
/**
- * @param $filter
+ * @param string $filter
* @return string
*/
public function evaluateExpression( $filter ) {
@@ -182,10 +193,10 @@ class AbuseFilterParser {
}
/**
- * @param $code
+ * @param string $code
* @return AFPData
*/
- function intEval( $code ) {
+ public function intEval( $code ) {
// Setup, resetting
$this->mCode = $code;
$this->mTokens = AbuseFilterTokenizer::tokenize( $code );
@@ -200,8 +211,8 @@ class AbuseFilterParser {
}
/**
- * @param $a
- * @param $b
+ * @param string $a
+ * @param string $b
* @return int
*/
static function lengthCompare( $a, $b ) {
@@ -217,7 +228,7 @@ class AbuseFilterParser {
/**
* Handles unexpected characters after the expression
*
- * @param $result AFPData
+ * @param AFPData &$result
* @throws AFPUserVisibleException
*/
protected function doLevelEntry( &$result ) {
@@ -233,7 +244,7 @@ class AbuseFilterParser {
/**
* Handles multiple expressions
- * @param $result AFPData
+ * @param AFPData &$result
*/
protected function doLevelSemicolon( &$result ) {
do {
@@ -247,7 +258,7 @@ class AbuseFilterParser {
/**
* Handles multiple expressions
*
- * @param $result AFPData
+ * @param AFPData &$result
* @throws AFPUserVisibleException
*/
protected function doLevelSet( &$result ) {
@@ -315,7 +326,7 @@ class AbuseFilterParser {
}
/**
- * @param $result AFPData
+ * @param AFPData &$result
* @throws AFPUserVisibleException
*/
protected function doLevelConditions( &$result ) {
@@ -436,7 +447,7 @@ class AbuseFilterParser {
}
/**
- * @param $result AFPData
+ * @param AFPData &$result
*/
protected function doLevelBoolOps( &$result ) {
$this->doLevelCompares( $result );
@@ -463,7 +474,7 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * @param string &$result
*/
protected function doLevelCompares( &$result ) {
$this->doLevelSumRels( $result );
@@ -482,7 +493,7 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * @param string &$result
*/
protected function doLevelSumRels( &$result ) {
$this->doLevelMulRels( $result );
@@ -505,7 +516,7 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * @param string &$result
*/
protected function doLevelMulRels( &$result ) {
$this->doLevelPow( $result );
@@ -523,7 +534,7 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * @param string &$result
*/
protected function doLevelPow( &$result ) {
$this->doLevelBoolInvert( $result );
@@ -539,7 +550,7 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * @param string &$result
*/
protected function doLevelBoolInvert( &$result ) {
if ( $this->mCur->type == AFPToken::TOP && $this->mCur->value == '!' ) {
@@ -555,7 +566,7 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * @param string &$result
*/
protected function doLevelSpecialWords( &$result ) {
$this->doLevelUnarys( $result );
@@ -579,7 +590,7 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * @param string &$result
*/
protected function doLevelUnarys( &$result ) {
$op = $this->mCur->value;
@@ -598,7 +609,7 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * @param string &$result
* @throws AFPUserVisibleException
*/
protected function doLevelListElements( &$result ) {
@@ -625,7 +636,7 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * @param string &$result
* @throws AFPUserVisibleException
*/
protected function doLevelBraces( &$result ) {
@@ -649,7 +660,7 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * @param string &$result
* @throws AFPUserVisibleException
*/
protected function doLevelFunction( &$result ) {
@@ -713,7 +724,7 @@ class AbuseFilterParser {
}
/**
- * @param $result
+ * @param string &$result
* @throws AFPUserVisibleException
* @return AFPData
*/
@@ -798,7 +809,7 @@ class AbuseFilterParser {
/* End of levels */
/**
- * @param $var
+ * @param string $var
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -820,8 +831,8 @@ class AbuseFilterParser {
}
/**
- * @param $name
- * @param $value
+ * @param string $name
+ * @param string $value
* @throws AFPUserVisibleException
*/
protected function setUserVariable( $name, $value ) {
@@ -835,7 +846,7 @@ class AbuseFilterParser {
// Built-in functions
/**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -854,7 +865,7 @@ class AbuseFilterParser {
}
/**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -873,7 +884,7 @@ class AbuseFilterParser {
}
/**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -895,7 +906,7 @@ class AbuseFilterParser {
}
/**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -916,7 +927,7 @@ class AbuseFilterParser {
}
/**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -942,7 +953,7 @@ class AbuseFilterParser {
}
/**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -965,7 +976,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,7 +988,7 @@ class AbuseFilterParser {
}
/**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
* @throws Exception
@@ -1017,7 +1028,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 A list 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,
+ [ 'unspecified error in preg_match()', $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-dimention array.
+ return AFPData::newFromPHPVar( $matches + $falsy );
+ }
+
+ /**
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1039,7 +1103,7 @@ class AbuseFilterParser {
}
/**
- * @param $args
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1060,7 +1124,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1074,53 +1138,139 @@ 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) it means that something is found.
+ // Just enough! Found!
+ // If I'm here and it's ALL (AND) it means that something isn't found.
+ // Just enough! Not found!
+ return $is_found;
}
}
- return new AFPData( AFPData::DBOOL, $ok );
+ // If I'm here and it's ANY (OR) it means that nothing was found:
+ // return false (because $is_any is true)
+ // If I'm here and it's ALL (AND) it means that everything were found:
+ // return true (because $is_any is false)
+ return ! $is_any;
}
/**
- * @param $s
+ * @param string $s
* @return mixed
*/
- 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 static function ccnorm( $s ) {
+ // Instatiate a single version of the equivset so the data is not loaded
+ // more than once.
+ if ( !self::$equivset ) {
+ self::$equivset = new Equivset();
}
- return $s;
+ return self::$equivset->normalize( $s );
}
/**
- * @param $s string
+ * @param string $s
* @return array|string
*/
protected function rmspecials( $s ) {
@@ -1128,7 +1278,7 @@ class AbuseFilterParser {
}
/**
- * @param $s string
+ * @param string $s
* @return array|string
*/
protected function rmdoubles( $s ) {
@@ -1136,7 +1286,7 @@ class AbuseFilterParser {
}
/**
- * @param $s string
+ * @param string $s
* @return array|string
*/
protected function rmwhitespace( $s ) {
@@ -1144,7 +1294,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1164,7 +1314,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1184,7 +1334,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1204,7 +1354,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1227,7 +1377,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1255,7 +1405,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1271,7 +1421,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 +1442,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1313,7 +1463,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1331,7 +1481,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return mixed
* @throws AFPUserVisibleException
*/
@@ -1353,7 +1503,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1367,7 +1517,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1381,7 +1531,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
@@ -1395,7 +1545,7 @@ class AbuseFilterParser {
}
/**
- * @param $args array
+ * @param array $args
* @return AFPData
* @throws AFPUserVisibleException
*/
diff --git a/www/wiki/extensions/AbuseFilter/includes/parser/AbuseFilterTokenizer.php b/www/wiki/extensions/AbuseFilter/includes/parser/AbuseFilterTokenizer.php
index 025314e8..a97fccaf 100644
--- a/www/wiki/extensions/AbuseFilter/includes/parser/AbuseFilterTokenizer.php
+++ b/www/wiki/extensions/AbuseFilter/includes/parser/AbuseFilterTokenizer.php
@@ -113,6 +113,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;
}
diff --git a/www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseFilter.php b/www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseFilter.php
index 04d58191..1a4cbf4d 100644
--- a/www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseFilter.php
+++ b/www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseFilter.php
@@ -108,7 +108,8 @@ 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 );
@@ -124,6 +125,9 @@ class SpecialAbuseFilter extends SpecialPage {
$this->mFilter = $filter;
}
+ /**
+ * @return string
+ */
protected function getGroupName() {
return 'wiki';
}
diff --git a/www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseLog.php b/www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseLog.php
index a8eac3a0..b1d9e410 100644
--- a/www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseLog.php
+++ b/www/wiki/extensions/AbuseFilter/includes/special/SpecialAbuseLog.php
@@ -11,12 +11,19 @@ class SpecialAbuseLog extends SpecialPage {
*/
protected $mSearchTitle;
+ /**
+ * @var string
+ */
+ protected $mSearchActionTaken;
+
protected $mSearchWiki;
protected $mSearchFilter;
protected $mSearchEntries;
+ protected $mSearchImpact;
+
public function __construct() {
parent::__construct( 'AbuseLog', 'abusefilter-log' );
}
@@ -25,11 +32,36 @@ class SpecialAbuseLog extends SpecialPage {
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' );
@@ -54,21 +86,23 @@ 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();
+ }
}
}
@@ -94,11 +128,26 @@ class SpecialAbuseLog extends SpecialPage {
$this->mSearchTitle = $request->getText( 'wpSearchTitle' );
$this->mSearchFilter = null;
+ $this->mSearchActionTaken = $request->getText( 'wpSearchActionTaken' );
if ( self::canSeeDetails() ) {
$this->mSearchFilter = $request->getText( 'wpSearchFilter' );
}
$this->mSearchEntries = $request->getText( 'wpSearchEntries' );
+ $this->mSearchImpact = $request->getText( 'wpSearchImpact' );
+ }
+
+ /**
+ * @return string[]
+ */
+ private function getAllActions() {
+ global $wgAbuseFilterActions, $wgAbuseFilterCustomActionsHandlers;
+ return array_unique(
+ array_merge(
+ array_keys( $wgAbuseFilterActions ),
+ array_keys( $wgAbuseFilterCustomActionsHandlers )
+ )
+ );
}
function searchForm() {
@@ -114,8 +163,42 @@ class SpecialAbuseLog extends SpecialPage {
'label-message' => 'abusefilter-log-search-title',
'type' => 'title',
'default' => $this->mSearchTitle,
- ]
+ ],
+ '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,
+ ],
+ ],
+ ];
+ $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',
@@ -132,17 +215,6 @@ 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() )
->setWrapperLegendMsg( 'abusefilter-log-search' )
@@ -153,7 +225,7 @@ class SpecialAbuseLog extends SpecialPage {
}
/**
- * @param $id
+ * @param string $id
* @return mixed
*/
function showHideForm( $id ) {
@@ -167,7 +239,7 @@ class SpecialAbuseLog extends SpecialPage {
$row = $dbr->selectRow(
[ 'abuse_filter_log', 'abuse_filter' ],
- '*',
+ 'afl_deleted',
[ 'afl_id' => $id ],
__METHOD__,
[],
@@ -178,15 +250,24 @@ class SpecialAbuseLog extends SpecialPage {
return;
}
+ $hideReasonsOther = $this->msg( 'revdelete-reasonotherlist' )->text();
+ $hideReasons = $this->msg( 'revdelete-reason-dropdown' )->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,16 +276,16 @@ 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();
}
/**
- * @param $fields
+ * @param array $fields
* @return bool
*/
function saveHideForm( $fields ) {
@@ -219,10 +300,18 @@ class SpecialAbuseLog extends SpecialPage {
__METHOD__
);
+ $reason = $fields['dropdownreason'];
+ if ( $reason === 'other' ) {
+ $reason = $fields['reason'];
+ } elseif ( $fields['reason'] !== '' ) {
+ $reason .=
+ $this->msg( 'colon-separator' )->inContentLanguage()->text() . $fields['reason'];
+ }
+
$logPage = new LogPage( 'suppress' );
$action = $fields['hidden'] ? 'hide-afl' : 'unhide-afl';
- $logPage->addEntry( $action, $this->getPageTitle( $logid ), $fields['reason'] );
+ $logPage->addEntry( $action, $this->getPageTitle( $logid ), $reason );
$this->getOutput()->redirect( SpecialPage::getTitleFor( 'AbuseLog' )->getFullURL() );
@@ -287,11 +376,42 @@ class SpecialAbuseLog extends SpecialPage {
$conds['afl_title'] = $searchTitle->getDBkey();
}
+ $dbr = wfGetDB( DB_REPLICA );
if ( self::canSeeHidden() ) {
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'] = '';
}
}
@@ -308,7 +428,7 @@ class SpecialAbuseLog extends SpecialPage {
}
/**
- * @param $id
+ * @param string $id
* @return mixed
*/
function showDetails( $id ) {
@@ -359,7 +479,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 ) );
@@ -395,42 +517,273 @@ 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 );
+ }
+
+ $output = Xml::tags( 'fieldset', null, $output );
+
+ $out->addHTML( $output );
+ }
+
+ /**
+ * @param string $id
+ * @return null
+ */
+ function showPrivateDetails( $id ) {
+ global $wgAbuseFilterPrivateLog;
+
+ $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->wrapWikiMsg( '<div class="errorbox">$1</div>',
+ [ 'abusefilter-invalid-request', $id ] );
+
+ return;
+ }
+
+ if ( !$this->checkReason( $reason ) ) {
+ $out->addWikiMsg( 'abusefilter-noreason' );
+ $this->showDetails( $id );
+ return false;
+ }
+
+ $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( $row->afl_filter, $filter_hidden ) ) {
+ $out->addWikiMsg( 'abusefilter-log-cannot-see-private-details' );
+
+ return;
+ }
+
+ // Log accessing private details
+ if ( $wgAbuseFilterPrivateLog ) {
+ $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( '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::openElement( 'tbody' );
- $output .= $header;
+ 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
+ */
+ protected function checkReason( $reason ) {
+ global $wgAbuseFilterForceSummary;
+ return ( !$wgAbuseFilterForceSummary || 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 $filter_id
+ * @param bool $filter_hidden
* @return bool
*/
static function canSeeDetails( $filter_id = null, $filter_hidden = null ) {
@@ -469,8 +822,8 @@ class SpecialAbuseLog extends SpecialPage {
}
/**
- * @param $row
- * @param $isListItem bool
+ * @param stdClass $row
+ * @param bool $isListItem
* @return String
*/
function formatRow( $row, $isListItem = true ) {
@@ -524,7 +877,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 +892,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;
}
@@ -600,7 +954,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,7 +969,7 @@ class SpecialAbuseLog extends SpecialPage {
$row->afl_action,
$pageLink,
$actions_taken,
- $parsed_comments,
+ $escaped_comments,
$diffLink // Passing $7 to 'abusefilter-log-entry' will do nothing, as it's not used.
)->params( $row->afl_user_text )->parse();
}
@@ -636,6 +990,11 @@ class SpecialAbuseLog extends SpecialPage {
}
}
+ /**
+ * @param int $userId
+ * @param string $userName
+ * @return string
+ */
protected static function getUserLinks( $userId, $userName ) {
static $cache = [];
@@ -648,7 +1007,7 @@ class SpecialAbuseLog extends SpecialPage {
}
/**
- * @param $db DatabaseBase
+ * @param \Wikimedia\Rdbms\IDatabase $db
* @return string
*/
public static function getNotDeletedCond( $db ) {
@@ -665,7 +1024,7 @@ 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.
@@ -681,84 +1040,10 @@ 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;
- }
-
- /**
- * @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/www/wiki/extensions/AbuseFilter/maintenance/addMissingLoggingEntries.php b/www/wiki/extensions/AbuseFilter/maintenance/addMissingLoggingEntries.php
index 70ab03fb..2ad06afd 100644
--- a/www/wiki/extensions/AbuseFilter/maintenance/addMissingLoggingEntries.php
+++ b/www/wiki/extensions/AbuseFilter/maintenance/addMissingLoggingEntries.php
@@ -1,4 +1,5 @@
<?php
+
if ( getenv( 'MW_INSTALL_PATH' ) ) {
$IP = getenv( 'MW_INSTALL_PATH' );
} else {
@@ -13,7 +14,7 @@ class AddMissingLoggingEntries extends Maintenance {
public function __construct() {
parent::__construct();
- $this->requireExtension( 'AbuseFilter' );
+ $this->requireExtension( 'Abuse Filter' );
}
public function execute() {
@@ -66,30 +67,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/www/wiki/extensions/AbuseFilter/maintenance/purgeOldLogIPData.php b/www/wiki/extensions/AbuseFilter/maintenance/purgeOldLogIPData.php
index ad1dbdce..1a4b560b 100644
--- a/www/wiki/extensions/AbuseFilter/maintenance/purgeOldLogIPData.php
+++ b/www/wiki/extensions/AbuseFilter/maintenance/purgeOldLogIPData.php
@@ -13,7 +13,7 @@ class PurgeOldLogIPData extends Maintenance {
$this->mDescription = 'Purge old IP Address data from AbuseFilter logs';
$this->setBatchSize( 200 );
- $this->requireExtension( 'AbuseFilter' );
+ $this->requireExtension( 'Abuse Filter' );
}
public function execute() {
@@ -33,7 +33,7 @@ class PurgeOldLogIPData extends Maintenance {
"afl_timestamp < " . $dbw->addQuotes( $dbw->timestamp( $cutoffUnix ) )
],
__METHOD__,
- [ 'LIMIT' => $this->mBatchSize ]
+ [ 'LIMIT' => $this->getBatchSize() ]
);
if ( $ids ) {
@@ -48,7 +48,7 @@ class PurgeOldLogIPData extends Maintenance {
wfWaitForSlaves();
}
- } while ( count( $ids ) >= $this->mBatchSize );
+ } while ( count( $ids ) >= $this->getBatchSize() );
$this->output( "$count rows.\n" );
diff --git a/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.css b/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.css
index 8e6b5224..8ae9bc1b 100644
--- a/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.css
+++ b/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.css
@@ -43,6 +43,12 @@ td.mw-abuselog-var {
width: 30%;
}
+table.mw-abusefilter-list-scrollable {
+ display: block;
+ border: 0;
+ overflow-x: auto;
+}
+
tr.mw-abusefilter-list-disabled,
tr.mw-abusefilter-list-disabled td {
color: #666;
@@ -67,9 +73,26 @@ 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 {
+ width: 25%;
+ min-width: 250px;
+}
+
#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;
diff --git a/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.edit.js b/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.edit.js
index 53a8c734..176a45e5 100644
--- a/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.edit.js
+++ b/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.edit.js
@@ -4,18 +4,26 @@
* @author John Du Hart
* @author Marius Hoch <hoo@online.de>
*/
+/* global ace */
-( function( mw, $ ) {
+( function ( mw, $ ) {
'use strict';
- // Filter textarea
+ // Filter editor for JS and jQuery handling
// @var {jQuery}
- var $filterBox;
+ var $filterBox,
+ // Filter editor for Ace specific functions
+ filterEditor,
+ // Hidden textarea for submitting form
+ // @var {jQuery}
+ $plainTextBox,
+ // Bool to determine what editor to use
+ useAce = false;
/**
* Returns the currently selected warning message
*
- * @returns {string} current warning message
+ * @return {string} current warning message
*/
function getCurrentWarningMessage() {
var message = $( '#mw-abusefilter-warn-message-existing' ).val();
@@ -28,29 +36,6 @@
}
/**
- * 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
@@ -69,11 +54,53 @@
}
/**
+ * Converts index (used in textareas) in position {row, column} for ace
+ *
+ * @author danyaPostfactum (https://github.com/ajaxorg/ace/issues/1162)
+ *
+ * @param {string} index Part of data returned from the AJAX request
+ * @return {Object} row and column
+ */
+ function indexToPosition( index ) {
+ var lines = filterEditor.session.getDocument().$lines,
+ newLineChar = filterEditor.session.doc.getNewLineCharacter(),
+ currentIndex = 0,
+ row, length;
+ for ( row = 0; row < lines.length; row++ ) {
+ length = filterEditor.session.getLine( row ).length;
+ if ( currentIndex + length >= index ) {
+ return {
+ row: row,
+ column: index - currentIndex
+ };
+ }
+ currentIndex += length + newLineChar.length;
+ }
+ }
+
+ /**
+ * 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,9 +118,16 @@
false
);
- $filterBox
- .focus()
- .textSelection( 'setSelection', { start: data.character } );
+ if ( useAce ) {
+ filterEditor.focus();
+ position = indexToPosition( data.character );
+ filterEditor.navigateTo( position.row, position.column );
+ filterEditor.scrollToRow( position.row );
+ } else {
+ $plainTextBox
+ .focus()
+ .textSelection( 'setSelection', { start: data.character } );
+ }
}
}
@@ -113,6 +147,28 @@
}
/**
+ * Sends the current filter text to be checked for syntax issues.
+ *
+ * @context HTMLElement
+ * @param {jQuery.Event} e
+ */
+ 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
*/
@@ -123,9 +179,14 @@
return;
}
- $filterBox.textSelection(
- 'encapsulateSelection', { 'pre': $filterBuilder.val() + ' ' }
- );
+ if ( useAce ) {
+ filterEditor.insert( $filterBuilder.val() + ' ' );
+ $plainTextBox.val( filterEditor.getSession().getValue() );
+ } else {
+ $plainTextBox.textSelection(
+ 'encapsulateSelection', { pre: $filterBuilder.val() + ' ' }
+ );
+ }
$filterBuilder.prop( 'selectedIndex', 0 );
}
@@ -136,15 +197,14 @@
* @param {jQuery.Event} e
*/
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,14 +216,17 @@
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 );
+ }
+ } );
}
/**
@@ -171,7 +234,7 @@
* that don't have checked boxes
*/
function hideDeselectedActions() {
- $( 'input.mw-abusefilter-action-checkbox' ).each( function() {
+ $( 'input.mw-abusefilter-action-checkbox' ).each( function () {
// mw-abusefilter-action-checkbox-{$action}
var action = this.id.substr( 31 ),
$params = $( '#mw-abusefilter-' + action + '-parameters' );
@@ -192,7 +255,7 @@
function previewWarnMessage() {
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();
@@ -200,19 +263,19 @@
action: 'query',
meta: 'allmessages',
ammessages: message,
- amargs: args.join( '|' ),
+ amargs: args.join( '|' )
} )
- .done( function( data ) {
- api.parse( data.query.allmessages[0]['*'], {
- disablelimitreport: '',
- preview: '',
- prop: 'text',
- title: 'MediaWiki:' + message,
- } )
- .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 ) {
+ $( '#mw-abusefilter-warn-preview' ).html( html );
+ } );
} );
- } );
}
/**
@@ -221,7 +284,9 @@
function editWarnMessage() {
var message = getCurrentWarningMessage();
- window.location = mw.config.get( 'wgScript' ) + '?title=MediaWiki:' + mw.util.wikiUrlencode( message ) + '&action=edit&preload=MediaWiki:abusefilter-warning';
+ window.location = mw.config.get( 'wgScript' ) +
+ '?title=MediaWiki:' + mw.util.wikiUrlencode( message ) +
+ '&action=edit&preload=MediaWiki:abusefilter-warning';
}
/**
@@ -231,13 +296,12 @@
* @param {jQuery.Event} e
*/
function onFilterGroupChange() {
- /*jshint validthis:true */
var $afWarnMessageExisting, $afWarnMessageOther, 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()];
+ newVal = mw.config.get( 'wgAbuseFilterDefaultWarningMessage' )[ $( this ).val() ];
if ( $afWarnMessageExisting.find( 'option[value=\'' + newVal + '\']' ).length ) {
$afWarnMessageExisting.val( newVal );
@@ -281,11 +345,58 @@
}
// 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' );
+
+ $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
+ // Protocol relative
+ 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
+ $filterBox.keyup( 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.keyup( function () {
var $el = $( '#mw-abusefilter-syntaxresult' );
if ( $el.data( 'syntaxOk' ) ) {
@@ -308,10 +419,10 @@
$( '#mw-abusefilter-edit-group-input' ).change( onFilterGroupChange );
$( '#mw-abusefilter-export-link' ).click(
- function( e ) {
+ function ( e ) {
e.preventDefault();
$exportBox.toggle();
}
);
} );
-} ( mediaWiki, jQuery ) );
+}( mediaWiki, jQuery ) );
diff --git a/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.examine.js b/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.examine.js
index aee39eff..e51becf6 100644
--- a/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.examine.js
+++ b/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.examine.js
@@ -5,7 +5,7 @@
* @author Marius Hoch <hoo@online.de>
*/
-( function( mw, $ ) {
+( function ( mw, $ ) {
'use strict';
// Syntax result div
@@ -13,36 +13,6 @@
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
@@ -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
+ */
+ 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/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.tools.js b/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.tools.js
index 637d44a8..aa212771 100644
--- a/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.tools.js
+++ b/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.tools.js
@@ -5,7 +5,7 @@
* @author Marius Hoch <hoo@online.de>
*/
-( function( mw, $ ) {
+( function ( mw, $ ) {
'use strict';
/**
@@ -14,7 +14,6 @@
* @param {jQuery.Event} e
*/
function doExprSubmit() {
- /*jshint validthis:true */
var expr = $( '#wpTestExpr' ).val(),
api = new mw.Api();
$( this ).injectSpinner( 'abusefilter-expr' );
@@ -23,44 +22,18 @@
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 );
+ } );
}
/**
@@ -104,8 +77,33 @@
$.removeSpinner( 'abusefilter-reautoconfirm' );
}
- $( document ).ready( function() {
+ /**
+ * Submits a call to reautoconfirm a user.
+ * @context HTMLElement
+ * @param {jQuery.Event} e
+ */
+ function doReautoSubmit() {
+ var name = $( '#reautoconfirm-user' ).val(),
+ api;
+
+ 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 );
+ }
+
+ $( document ).ready( function () {
$( '#mw-abusefilter-submitexpr' ).click( doExprSubmit );
$( '#mw-abusefilter-reautoconfirmsubmit' ).click( doReautoSubmit );
} );
-} ( mediaWiki, jQuery ) );
+}( mediaWiki, jQuery ) );
diff --git a/www/wiki/extensions/AbuseFilter/modules/mode-abusefilter.js b/www/wiki/extensions/AbuseFilter/modules/mode-abusefilter.js
new file mode 100644
index 00000000..f705913b
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/modules/mode-abusefilter.js
@@ -0,0 +1,117 @@
+/* global ace, mw */
+ace.define( 'ace/mode/abusefilter_highlight_rules', [ 'require', 'exports', 'module', 'ace/lib/oop', 'ace/mode/text_highlight_rules' ], function ( require, exports, module ) {
+ 'use strict';
+
+ var oop = require( 'ace/lib/oop' ),
+ TextHighlightRules = require( './text_highlight_rules' ).TextHighlightRules,
+ AFHighlightRules = function () {
+
+ var keywords = ( mw.config.get( 'aceConfig' ).keywords ),
+ constants = ( 'true|false|null' ),
+ functions = ( mw.config.get( 'aceConfig' ).functions ),
+ variables = ( mw.config.get( 'aceConfig' ).variables ),
+ deprecated = ( '' ), // Template for deprecated vars, already registered within ace settings.
+ keywordMapper = this.createKeywordMapper(
+ {
+ 'keyword': keywords,
+ 'support.function': functions,
+ 'constant.language': constants,
+ 'variable.language': variables,
+ 'keyword.deprecated': deprecated
+ },
+ 'identifier'
+ ),
+ decimalInteger = '(?:(?:[1-9]\\d*)|(?:0))',
+ hexInteger = '(?:0[xX][\\dA-Fa-f]+)',
+ integer = '(?:' + decimalInteger + '|' + hexInteger + ')',
+ fraction = '(?:\\.\\d+)',
+ intPart = '(?:\\d+)',
+ pointFloat = '(?:(?:' + intPart + '?' + fraction + ')|(?:' + intPart + '\\.))',
+ floatNumber = '(?:' + pointFloat + ')';
+
+ this.$rules = {
+ 'start': [ {
+ token: 'comment',
+ regex: '\\/\\*',
+ next: 'comment'
+ }, {
+ token: 'string', // " string
+ regex: '"(?:[^\\\\]|\\\\.)*?"'
+ }, {
+ token: 'string', // ' string
+ regex: "'(?:[^\\\\]|\\\\.)*?'"
+ }, {
+ token: 'constant.numeric', // float
+ regex: floatNumber
+ }, {
+ token: 'constant.numeric', // integer
+ regex: integer + '\\b'
+ }, {
+ token: keywordMapper,
+ regex: '[a-zA-Z_$][a-zA-Z0-9_$]*\\b'
+ }, {
+ token: 'keyword.operator',
+ regex: '\\+|\\-|\\*\\*|\\*|\\/|%|\\^|&|\\||<|>|<=|=>|==|!=|===|!==|:=|=|!'
+ }, {
+ 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, module ) {
+ '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, tab ) {
+ 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/www/wiki/extensions/AbuseFilter/package.json b/www/wiki/extensions/AbuseFilter/package.json
index 520545df..3888c6f2 100644
--- a/www/wiki/extensions/AbuseFilter/package.json
+++ b/www/wiki/extensions/AbuseFilter/package.json
@@ -4,12 +4,13 @@
"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"
+ "eslint-config-wikimedia": "0.5.0",
+ "grunt": "1.0.2",
+ "grunt-banana-checker": "0.6.0",
+ "grunt-eslint": "20.1.0",
+ "grunt-jsonlint": "1.1.0",
+ "grunt-stylelint": "0.10.0",
+ "stylelint": "9.2.0",
+ "stylelint-config-wikimedia": "0.4.3"
}
}
diff --git a/www/wiki/extensions/AbuseFilter/phpcs.xml b/www/wiki/extensions/AbuseFilter/phpcs.xml
deleted file mode 100644
index 47cfb3c3..00000000
--- a/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/arith.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/arith.t
index e3c42e32..1f88e9df 100644
--- a/www/wiki/extensions/AbuseFilter/tests/parserTests/arith.t
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/cast.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/cast.t
index 0ec2720e..c0bc317c 100644
--- a/www/wiki/extensions/AbuseFilter/tests/parserTests/cast.t
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/list-inequality.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/ccnorm-contains-all.r
index 4736e080..4736e080 100644
--- a/www/wiki/extensions/AbuseFilter/tests/parserTests/list-inequality.r
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/ccnorm-contains-all.r
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/ccnorm-contains-all.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/ccnorm-contains-all.t
new file mode 100644
index 00000000..9a8635c8
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/ccnorm-contains-any.r
index 4736e080..4736e080 100644
--- a/www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit.r
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/ccnorm-contains-any.r
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/ccnorm-contains-any.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/ccnorm-contains-any.t
new file mode 100644
index 00000000..6aeac35c
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/comment.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/comment.t
index 2ddf5829..3252b87a 100644
--- a/www/wiki/extensions/AbuseFilter/tests/parserTests/comment.t
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/comment.t
@@ -1 +1,4 @@
-1 /* a */ == /* b */ "1" /* c */
+1 /* a */ == /* b */ "1" /* c */ /* &
+
+1/0
+*/
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/whitespace.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/contains-all.r
index 4736e080..4736e080 100644
--- a/www/wiki/extensions/AbuseFilter/tests/parserTests/whitespace.r
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/contains-all.r
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/contains-all.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/contains-all.t
new file mode 100644
index 00000000..f8b81b24
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/contains-any.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/contains-any.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/contains-any.r
@@ -0,0 +1 @@
+MATCH
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/contains-any.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/contains-any.t
new file mode 100644
index 00000000..56f1c8bd
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/contains.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/contains.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/contains.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/contains.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/contains.t
new file mode 100644
index 00000000..cac43d24
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/contains.t
@@ -0,0 +1 @@
+"quux" contains "ux" & ['1', 'foo'] contains '1' & !('fo obar' contains 'foo') & ['foo'] contains 'f' \ No newline at end of file
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/expn.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/expn.t
index bd39c386..17849182 100644
--- a/www/wiki/extensions/AbuseFilter/tests/parserTests/expn.t
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/float.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/float.t
index 9ce8c919..e31067e0 100644
--- a/www/wiki/extensions/AbuseFilter/tests/parserTests/float.t
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/get-matches.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/get-matches.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/get-matches.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/get-matches.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/get-matches.t
new file mode 100644
index 00000000..88e163b4
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/in.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/in.t
index 467639ce..73d480d3 100644
--- a/www/wiki/extensions/AbuseFilter/tests/parserTests/in.t
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/list-comparisons.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/list-comparisons.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/list-comparisons.r
@@ -0,0 +1 @@
+MATCH
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/list-comparisons.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/list-comparisons.t
new file mode 100644
index 00000000..db431573
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/list-comparisons.t
@@ -0,0 +1,11 @@
+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'];
+
+a == b & a === b & a != c & b != d & a == e & a !== e & f == g & f !== g & h == i & h !== i & e != i
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/list-inequality.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/list-inequality.t
deleted file mode 100644
index 6ffed4f0..00000000
--- a/www/wiki/extensions/AbuseFilter/tests/parserTests/list-inequality.t
+++ /dev/null
@@ -1,3 +0,0 @@
-a := [1, 2, 3];
-
-a != a
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-arithmetic.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-arithmetic.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-arithmetic.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-arithmetic.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-arithmetic.t
new file mode 100644
index 00000000..7cfaf4af
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-bools.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-bools.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-bools.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-bools.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-bools.t
new file mode 100644
index 00000000..a8e88539
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-comparisons.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-comparisons.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-comparisons.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-comparisons.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-comparisons.t
new file mode 100644
index 00000000..7d0ada0d
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-comparisons.t
@@ -0,0 +1,20 @@
+/* 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]) &
+!(['1'] == '1')
+
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-functions.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-functions.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-functions.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-functions.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-functions.t
new file mode 100644
index 00000000..ea5bf1b1
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-keywords.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-keywords.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-keywords.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-keywords.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-keywords.t
new file mode 100644
index 00000000..d6ca07d4
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-keywords.t
@@ -0,0 +1,9 @@
+/* Examples from [[mw:Extension:AbuseFilter/Rules format#Keywords]] */
+
+("1234" like "12?4") &
+("1234" like "12*") &
+("foo" in "foobar") &
+("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/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-lists.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-lists.r
new file mode 100644
index 00000000..f629599c
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-lists.r
@@ -0,0 +1 @@
+MATCH \ No newline at end of file
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-lists.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-lists.t
new file mode 100644
index 00000000..904413b3
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/mwexamples-lists.t
@@ -0,0 +1,10 @@
+/* Examples from [[mw:Extension:AbuseFilter/Rules format#Lists]] */
+
+a_list := [ 5, 6, 7, 10];
+a_list[0] == 5 &
+length(a_list) == 4 &
+string(a_list) == "5\n6\n7\n10\n" &
+5 in a_list == true &
+'5' in a_list == true &
+'5\n6' in a_list == true &
+1 in a_list == true \ No newline at end of file
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/ord.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/ord.t
index a82aafa7..6c94f4b6 100644
--- a/www/wiki/extensions/AbuseFilter/tests/parserTests/ord.t
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit-and.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit-and.r
new file mode 100644
index 00000000..33a8a805
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit-and.r
@@ -0,0 +1 @@
+NOT_MATCH \ No newline at end of file
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit-and.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit-and.t
new file mode 100644
index 00000000..d87746de
--- /dev/null
+++ b/www/wiki/extensions/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/www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit-or.r b/www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit-or.r
new file mode 100644
index 00000000..4736e080
--- /dev/null
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit-or.r
@@ -0,0 +1 @@
+MATCH
diff --git a/www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit.t b/www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit-or.t
index bec088f6..bec088f6 100644
--- a/www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit.t
+++ b/www/wiki/extensions/AbuseFilter/tests/parserTests/shortcircuit-or.t
diff --git a/www/wiki/extensions/AbuseFilter/tests/phpunit/parserTest.php b/www/wiki/extensions/AbuseFilter/tests/phpunit/AbuseFilterParserTest.php
index b253e858..d7560e92 100644
--- a/www/wiki/extensions/AbuseFilter/tests/phpunit/parserTest.php
+++ b/www/wiki/extensions/AbuseFilter/tests/phpunit/AbuseFilterParserTest.php
@@ -19,11 +19,17 @@
*
* @file
*
+ * @license GPL-2.0-or-later
+ * @author Marius Hoch < hoo@online.de >
+ */
+
+/**
* @group Test
* @group AbuseFilter
*
- * @licence GNU GPL v2+
- * @author Marius Hoch < hoo@online.de >
+ * @covers AbuseFilterCachingParser
+ * @covers AbuseFilterParser
+ * @covers AbuseFilterTokenizer
*/
class AbuseFilterParserTest extends MediaWikiTestCase {
/**
@@ -38,7 +44,7 @@ class AbuseFilterParserTest extends MediaWikiTestCase {
}
/**
- * @return [AbuseFilterParser]
+ * @return AbuseFilterParser[]
*/
static function getParsers() {
static $parsers = null;
@@ -55,11 +61,6 @@ class AbuseFilterParserTest extends MediaWikiTestCase {
* @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 );
@@ -129,6 +130,7 @@ class AbuseFilterParserTest extends MediaWikiTestCase {
}
/**
+ * Data provider for testCondCount method.
* @return array
*/
public function condCountCases() {
@@ -142,4 +144,79 @@ class AbuseFilterParserTest extends MediaWikiTestCase {
[ 'a == b & c == d', 1 ],
];
}
+
+ /**
+ * get_matches should throw an exception with an invalid number of arguments.
+ * @expectedException AFPUserVisibleException
+ * @covers AbuseFilterParser::funcGetMatches
+ */
+ public function testGetMatchesInvalidArgs() {
+ $parser = self::getParser();
+ $parser->parse( "get_matches('')" );
+ }
+
+ /**
+ * get_matches should throw an exception when given an invalid regular expression.
+ * @expectedException AFPUserVisibleException
+ * @covers AbuseFilterParser::funcGetMatches
+ */
+ public function testGetMatchesInvalidRegex() {
+ $parser = self::getParser();
+ $parser->parse( "get_matches('this (should fail')" );
+ }
+
+ /**
+ * 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,
+ ],
+ ],
+ ];
+ }
}
diff --git a/www/wiki/extensions/AbuseFilter/version b/www/wiki/extensions/AbuseFilter/version
index c5b07ba0..3eab4936 100644
--- a/www/wiki/extensions/AbuseFilter/version
+++ b/www/wiki/extensions/AbuseFilter/version
@@ -1,4 +1,4 @@
-AbuseFilter: REL1_30
-2018-12-04T01:00:10
+AbuseFilter: REL1_31
+2019-02-24T19:00:14
-6f31b95
+adc0789