jenkins-bot has submitted this change and it was merged.

Change subject: Add i18n for API module help
......................................................................


Add i18n for API module help

MediaWiki core change I04b1a384 added support for i18n of API module
help. This takes advantage of that while still maintaining backwards
compatibility with earlier versions of MediaWiki.

Once support for MediaWiki before 1.25 is dropped, the methods marked
deprecated in this patch may be removed.

Change-Id: I67395aff48185f3e09da31b51a08aa2541fe6a17
---
M api/ApiAbuseFilterCheckMatch.php
M api/ApiAbuseFilterCheckSyntax.php
M api/ApiAbuseFilterEvalExpression.php
M api/ApiAbuseFilterUnblockAutopromote.php
M api/ApiQueryAbuseFilters.php
M api/ApiQueryAbuseLog.php
M i18n/en.json
M i18n/qqq.json
8 files changed, 576 insertions(+), 411 deletions(-)

Approvals:
  Legoktm: Looks good to me, approved
  Jforrester: Looks good to me, but someone else must approve
  jenkins-bot: Verified



diff --git a/api/ApiAbuseFilterCheckMatch.php b/api/ApiAbuseFilterCheckMatch.php
index 49b2ee0..9129b97 100644
--- a/api/ApiAbuseFilterCheckMatch.php
+++ b/api/ApiAbuseFilterCheckMatch.php
@@ -77,6 +77,9 @@
                );
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getParamDescription() {
                return array(
                        'filter' => 'The full filter text to check for a match',
@@ -86,6 +89,9 @@
                );
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getDescription() {
                return array(
                        'Check to see if an AbuseFilter matches a set of 
variables, edit'
@@ -100,7 +106,13 @@
                );
        }
 
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
+       /**
+        * @see ApiBase::getExamplesMessages()
+        */
+       protected function getExamplesMessages() {
+               return array(
+                       
'action=abusefiltercheckmatch&filter=!("autoconfirmed"%20in%20user_groups)&rcid=15'
+                               => 'apihelp-abusefiltercheckmatch-example-1',
+               );
        }
 }
diff --git a/api/ApiAbuseFilterCheckSyntax.php 
b/api/ApiAbuseFilterCheckSyntax.php
index 23c744a..17e16d3 100644
--- a/api/ApiAbuseFilterCheckSyntax.php
+++ b/api/ApiAbuseFilterCheckSyntax.php
@@ -34,18 +34,27 @@
                );
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getParamDescription() {
                return array(
                        'filter' => 'The full filter text to check syntax on',
                );
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getDescription() {
                return array(
                        'Check syntax of an AbuseFilter filter'
                );
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getExamples() {
                return array(
                        'api.php?action=abusefilterchecksyntax&filter="foo"',
@@ -53,7 +62,15 @@
                );
        }
 
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
+       /**
+        * @see ApiBase::getExamplesMessages()
+        */
+       protected function getExamplesMessages() {
+               return array(
+                       'action=abusefilterchecksyntax&filter="foo"'
+                               => 'apihelp-abusefilterchecksyntax-example-1',
+                       
'action=abusefilterchecksyntax&filter="bar"%20bad_variable'
+                               => 'apihelp-abusefilterchecksyntax-example-2',
+               );
        }
 }
diff --git a/api/ApiAbuseFilterEvalExpression.php 
b/api/ApiAbuseFilterEvalExpression.php
index 74c66fe..a664df1 100644
--- a/api/ApiAbuseFilterEvalExpression.php
+++ b/api/ApiAbuseFilterEvalExpression.php
@@ -17,25 +17,40 @@
                );
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getParamDescription() {
                return array(
                        'expression' => 'The expression to evaluate',
                );
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getDescription() {
                return array(
                        'Evaluates an AbuseFilter expression'
                );
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getExamples() {
                return array(
                        
'api.php?action=abusefilterevalexpression&expression=lcase("FOO")'
                );
        }
 
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
+       /**
+        * @see ApiBase::getExamplesMessages()
+        */
+       protected function getExamplesMessages() {
+               return array(
+                       
'action=abusefilterevalexpression&expression=lcase("FOO")'
+                               => 
'apihelp-abusefilterevalexpression-example-1',
+               );
        }
 }
diff --git a/api/ApiAbuseFilterUnblockAutopromote.php 
b/api/ApiAbuseFilterUnblockAutopromote.php
index 08a7ff0..73d1558 100644
--- a/api/ApiAbuseFilterUnblockAutopromote.php
+++ b/api/ApiAbuseFilterUnblockAutopromote.php
@@ -47,6 +47,9 @@
                );
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getParamDescription() {
                return array(
                        'user' => 'Username of the user you want to unblock',
@@ -54,6 +57,9 @@
                );
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getDescription() {
                return 'Unblocks a user from receiving autopromotions due to an 
abusefilter consequence';
        }
@@ -66,13 +72,22 @@
                return '';
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getExamples() {
                return array(
                        
"api.php?action=abusefilterunblockautopromote&user=Bob&token=%2B\\"
                );
        }
 
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
+       /**
+        * @see ApiBase::getExamplesMessages()
+        */
+       protected function getExamplesMessages() {
+               return array(
+                       
'action=abusefilterunblockautopromote&user=Example&token=123ABC'
+                               => 
'apihelp-abusefilterunblockautopromote-example-1',
+               );
        }
 }
diff --git a/api/ApiQueryAbuseFilters.php b/api/ApiQueryAbuseFilters.php
index 286db71..dbc0d3a 100644
--- a/api/ApiQueryAbuseFilters.php
+++ b/api/ApiQueryAbuseFilters.php
@@ -164,7 +164,9 @@
                                        'older',
                                        'newer'
                                ),
-                               ApiBase::PARAM_DFLT => 'newer'
+                               ApiBase::PARAM_DFLT => 'newer',
+                               /** @todo Once support for MediaWiki < 1.25 is 
dropped, just use ApiBase::PARAM_HELP_MSG directly */
+                               constant( 'ApiBase::PARAM_HELP_MSG' ) ?: '' => 
'api-help-param-direction',
                        ),
                        'show' => array(
                                ApiBase::PARAM_ISMULTI => true,
@@ -203,6 +205,9 @@
                );
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getParamDescription() {
                return array(
                        'startid' => 'The filter id to start enumerating from',
@@ -214,10 +219,16 @@
                );
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getDescription() {
                return 'Show details of the abuse filters.';
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getExamples() {
                return array(
                        
'api.php?action=query&list=abusefilters&abfshow=enabled|!private',
@@ -225,7 +236,15 @@
                );
        }
 
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
+       /**
+        * @see ApiBase::getExamplesMessages()
+        */
+       protected function getExamplesMessages() {
+               return array(
+                       
'action=query&list=abusefilters&abfshow=enabled|!private'
+                               => 'apihelp-query+abusefilters-example-1',
+                       
'action=query&list=abusefilters&abfprop=id|description|pattern'
+                               => 'apihelp-query+abusefilters-example-2',
+               );
        }
 }
diff --git a/api/ApiQueryAbuseLog.php b/api/ApiQueryAbuseLog.php
index ae2ad91..397ee03 100644
--- a/api/ApiQueryAbuseLog.php
+++ b/api/ApiQueryAbuseLog.php
@@ -238,7 +238,9 @@
                                        'newer',
                                        'older'
                                ),
-                               ApiBase::PARAM_DFLT => 'older'
+                               ApiBase::PARAM_DFLT => 'older',
+                               /** @todo Once support for MediaWiki < 1.25 is 
dropped, just use ApiBase::PARAM_HELP_MSG directly */
+                               constant( 'ApiBase::PARAM_HELP_MSG' ) ?: '' => 
'api-help-param-direction',
                        ),
                        'user' => null,
                        'title' => null,
@@ -272,6 +274,9 @@
                );
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getParamDescription() {
                return array(
                        'start' => 'The timestamp to start enumerating from',
@@ -285,10 +290,16 @@
                );
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getDescription() {
                return 'Show events that were caught by one of the abuse 
filters.';
        }
 
+       /**
+        * @deprecated since MediaWiki core 1.25
+        */
        public function getExamples() {
                return array(
                        'api.php?action=query&list=abuselog',
@@ -296,7 +307,15 @@
                );
        }
 
-       public function getVersion() {
-               return __CLASS__ . ': $Id$';
+       /**
+        * @see ApiBase::getExamplesMessages()
+        */
+       protected function getExamplesMessages() {
+               return array(
+                       'action=query&list=abuselog'
+                               => 'apihelp-query+abuselog-example-1',
+                       'action=query&list=abuselog&afltitle=API'
+                               => 'apihelp-query+abuselog-example-2',
+               );
        }
 }
diff --git a/i18n/en.json b/i18n/en.json
index b7935d1..1ed8fcf 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -1,398 +1,432 @@
 {
-    "@metadata": {
-        "authors": [
-            "Andrew Garrett",
-            "Kunal Mehta"
-        ]
-    },
-    "abusefilter-desc": "Applies automatic heuristics to edits",
-    "abusefilter": "Abuse filter configuration",
-    "abuselog": "Abuse log",
-    "abusefilter-intro": "Welcome to the Abuse Filter management 
interface.\nThe Abuse Filter is an automated software mechanism of applying 
automatic heuristics to all actions.\nThis interface shows a list of defined 
filters, and allows them to be modified.",
-    "abusefilter-mustbeeditor": "For security reasons, only users with the 
right to modify abuse filters may use this interface.",
-    "abusefilter-warning": "'''Warning:''' This action has been automatically 
identified as harmful.\nUnconstructive edits will be quickly reverted,\nand 
egregious or repeated unconstructive editing will result in your account or IP 
address being blocked.\nIf you believe this action to be constructive, you may 
submit it again to confirm it.\nA brief description of the abuse rule which 
your action matched is: $1",
-    "abusefilter-disallowed": "This action has been automatically identified 
as harmful, and therefore disallowed.\nIf you believe your action was 
constructive, please inform an administrator of what you were trying to do.\nA 
brief description of the abuse rule which your action matched is: $1",
-    "abusefilter-blocked-display": "This action has been automatically 
identified as harmful,\nand you have been prevented from executing it.\nIn 
addition, to protect {{SITENAME}}, your user account and all associated IP 
addresses have been blocked from editing.\nIf this has occurred in error, 
please contact an administrator.\nA brief description of the abuse rule which 
your action matched is: $1",
-    "abusefilter-degrouped": "This action has been automatically identified as 
harmful.\nConsequently, it has been disallowed, and, since your account is 
suspected of being compromised, all rights have been revoked.\nIf you believe 
this to have been in error, please contact a bureaucrat with an explanation of 
this action, and your rights may be restored.\nA brief description of the abuse 
rule which your action matched is: $1",
-    "abusefilter-autopromote-blocked": "This action has been automatically 
identified as harmful, and it has been disallowed.\nIn addition, as a security 
measure, some privileges routinely granted to established accounts have been 
temporarily revoked from your account.\nA brief description of the abuse rule 
which your action matched is: $1",
-    "abusefilter-blocker": "Abuse filter",
-    "abusefilter-blockreason": "Automatically blocked by abuse 
filter.\nDescription of matched rule: $1",
-    "abusefilter-degroupreason": "Rights automatically stripped by abuse 
filter.\nRule description: $1",
-    "abusefilter-accountreserved": "This account name is reserved for use by 
the abuse filter.",
-    "right-abusefilter-modify": "Modify abuse filters",
-    "right-abusefilter-view": "View abuse filters",
-    "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-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",
-    "right-abusefilter-log-private": "View log entries of abuse filters marked 
as private",
-    "right-abusefilter-hide-log": "Hide entries in the abuse log",
-    "right-abusefilter-hidden-log": "View hidden abuse log entries",
-    "right-abusefilter-modify-global": "Create or modify global abuse filters",
-    "action-abusefilter-modify": "modify abuse filters",
-    "action-abusefilter-view": "view abuse filters",
-    "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-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",
-    "abusefilter-log": "Abuse filter log",
-    "abusefilter-log-summary": "This log shows a list of all actions caught by 
the filters.",
-    "abusefilter-log-search": "Search the abuse log",
-    "abusefilter-log-search-user": "User:",
-    "abusefilter-log-search-filter": "Filter IDs (separate with pipes):",
-    "abusefilter-log-search-title": "Title:",
-    "abusefilter-log-search-wiki": "Wiki:",
-    "abusefilter-log-search-submit": "Search",
-    "abusefilter-log-entry": "$1: $2 triggered an abuse filter, performing the 
action \"$3\" on $4.\nActions taken: $5;\nFilter description: $6",
-    "abusefilter-log-entry-withdiff": "$1: $2 triggered an abuse filter, 
performing the action \"$3\" on $4.\nActions taken: $5;\nFilter description: $6 
($7)",
-    "abusefilter-log-detailedentry-meta": "$1: $2 triggered $3, performing the 
action \"$4\" on $5.\nActions taken: $6;\nFilter description: $7 ($8)",
-    "abusefilter-log-detailedentry-global": "global filter $1",
-    "abusefilter-log-detailedentry-local": "filter $1",
-    "abusefilter-log-detailslink": "details",
-    "abusefilter-log-diff": "diff",
-    "abusefilter-log-hidelink": "adjust visibility",
-    "abusefilter-log-details-legend": "Details for log entry $1",
-    "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-ip": "Originating IP address",
-    "abusefilter-log-noactions": "none",
-    "abusefilter-log-details-diff": "Changes made in edit",
-    "abusefilter-log-linkoncontribs": "abuse log",
-    "abusefilter-log-linkoncontribs-text": "Abuse log for this user",
-    "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-details-hidden": "You cannot view the details for this 
entry because it 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-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 triggered $4, performing the action \"$5\" 
on $3. Actions taken: $6 ($7)",
-    "abusefilter-management": "Abuse filter management",
-    "abusefilter-list": "All filters",
-    "abusefilter-list-id": "Filter ID",
-    "abusefilter-list-status": "Status",
-    "abusefilter-list-public": "Public description",
-    "abusefilter-list-consequences": "Consequences",
-    "abusefilter-list-visibility": "Visibility",
-    "abusefilter-list-hitcount": "Hit count",
-    "abusefilter-list-edit": "Edit",
-    "abusefilter-list-details": "Details",
-    "abusefilter-list-limit": "Number per page:",
-    "abusefilter-list-lastmodified": "Last modified",
-    "abusefilter-list-group": "Filter group",
-    "abusefilter-hidden": "Private",
-    "abusefilter-unhidden": "Public",
-    "abusefilter-enabled": "Enabled",
-    "abusefilter-deleted": "Deleted",
-    "abusefilter-disabled": "Disabled",
-    "abusefilter-hitcount": "$1 {{PLURAL:$1|hit|hits}}",
-    "abusefilter-new": "Create a new filter",
-    "abusefilter-return": "Return to filter management",
-    "abusefilter-status-global": "Global",
-    "abusefilter-list-options": "Options",
-    "abusefilter-list-options-deleted": "Deleted filters:",
-    "abusefilter-list-options-deleted-only": "Show only deleted filters",
-    "abusefilter-list-options-deleted-hide": "Hide deleted filters",
-    "abusefilter-list-options-deleted-show": "Include deleted filters",
-    "abusefilter-list-options-scope": "Show filters from:",
-    "abusefilter-list-options-scope-local": "Local wiki",
-    "abusefilter-list-options-scope-global": "Global rules",
-    "abusefilter-list-options-disabled": "Disabled filters:",
-    "abusefilter-list-options-hidedisabled": "Hide disabled filters",
-    "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",
-    "abusefilter-tools-submitexpr": "Evaluate",
-    "abusefilter-tools-reautoconfirm": "Restore autoconfirmed status",
-    "abusefilter-tools-reautoconfirm-user": "User:",
-    "abusefilter-tools-reautoconfirm-submit": "Re-autoconfirm",
-    "abusefilter-reautoconfirm-none": "That user has not had 
{{GENDER:$1|his|her|their}} autoconfirmed status suspended.",
-    "abusefilter-reautoconfirm-notallowed": "You are not allowed to restore 
autoconfirmed status.",
-    "abusefilter-reautoconfirm-done": "Account's autoconfirmed status has been 
restored",
-    "abusefilter-status": "Of the last $1 {{PLURAL:$1|action|actions}}, $2 
($3%) {{PLURAL:$2|has|have}} reached the condition limit of $4, and $5 ($6%) 
{{PLURAL:$5|has|have}} matched one of the filters currently enabled.",
-    "abusefilter-edit": "Editing abuse filter",
-    "abusefilter-edit-subtitle": "Editing filter $1",
-    "abusefilter-edit-subtitle-new": "Creating filter",
-    "abusefilter-edit-oldwarning": "<strong>You are editing an old version of 
this filter.\nThe statistics quoted are for the most recent version of the 
filter.\nIf you save your changes, you will overwrite all changes since the 
revision you are editing.</strong> 
&bull;\n[[Special:AbuseFilter/history/$2|Return to this filter's history]].",
-    "abusefilter-edit-status-label": "Statistics:",
-    "abusefilter-edit-status": "Of the last $1 {{PLURAL:$1|action|actions}}, 
this filter has matched $2 ($3%).\nOn average, its run time is $4 ms, and it 
consumes $5 {{PLURAL:$5|condition|conditions}} of the condition limit.",
-    "abusefilter-edit-throttled": "'''Warning:''' This filter was 
automatically disabled as a safety measure.\nIt reached the limit of matching 
more than $1% of actions.",
-    "abusefilter-edit-new": "New filter",
-    "abusefilter-edit-save": "Save filter",
-    "abusefilter-edit-id": "Filter ID:",
-    "abusefilter-edit-description": "Description:\n:''(publicly viewable)''",
-    "abusefilter-edit-group": "Filter group:",
-    "abusefilter-edit-flags": "Flags:",
-    "abusefilter-edit-enabled": "Enable this filter",
-    "abusefilter-edit-deleted": "Mark as deleted",
-    "abusefilter-edit-hidden": "Hide details of this filter from public view",
-    "abusefilter-edit-global": "Global filter",
-    "abusefilter-edit-rules": "Conditions:",
-    "abusefilter-edit-notes": "Notes:",
-    "abusefilter-edit-lastmod": "Filter last modified:",
-    "abusefilter-edit-lastmod-text": "$1 by $2",
-    "abusefilter-edit-hitcount": "Filter hits:",
-    "abusefilter-edit-consequences": "Actions taken when matched",
-    "abusefilter-edit-action-warn": "Trigger these actions after giving the 
user a warning",
-    "abusefilter-edit-action-disallow": "Prevent the user from performing the 
action in question",
-    "abusefilter-edit-action-flag": "Flag the edit in the abuse log",
-    "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-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-tag": "Tag the edit for further review",
-    "abusefilter-edit-throttle-count": "Number of actions to allow:",
-    "abusefilter-edit-throttle-period": "Period of time:",
-    "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|second|seconds}}",
-    "abusefilter-edit-throttle-groups": "Group throttle by:\n:''(one per line, 
combine with commas)''",
-    "abusefilter-edit-warn-message": "System message to use for warning:",
-    "abusefilter-edit-warn-other": "Other message",
-    "abusefilter-edit-warn-other-label": "Page name of other 
message:\n:''(without MediaWiki prefix)''",
-    "abusefilter-edit-warn-actions": "Actions:",
-    "abusefilter-edit-warn-preview": "Preview selected message",
-    "abusefilter-edit-warn-edit": "Create/Edit selected message",
-    "abusefilter-edit-tag-tag": "Tags to apply (one per line):",
-    "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-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:",
-    "abusefilter-edit-check": "Check syntax",
-    "abusefilter-edit-badfilter": "The filter you specified does not exist",
-    "abusefilter-edit-revert": "Revert actions taken by this filter",
-    "abusefilter-edit-tools": "Tools:",
-    "abusefilter-edit-test-link": "Test this filter against recent edits",
-    "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, and they should not contain special characters.",
-    "abusefilter-edit-notallowed": "You are not permitted to create or edit 
abuse filters",
-    "abusefilter-edit-notallowed-global": "You are not permitted to create or 
edit global abuse filters",
-    "abusefilter-edit-notallowed-global-custom-msg": "Custom warning messages 
are not supported for global filters",
-    "abusefilter-edit-builder-select": "Select an option to add it at the 
cursor",
-    "abusefilter-edit-builder-group-op-arithmetic": "Arithmetic operators",
-    "abusefilter-edit-builder-op-arithmetic-addition": "Addition (+)",
-    "abusefilter-edit-builder-op-arithmetic-subtraction": "Subtraction (-)",
-    "abusefilter-edit-builder-op-arithmetic-multiplication": "Multiplication 
(*)",
-    "abusefilter-edit-builder-op-arithmetic-divide": "Division (/)",
-    "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-lt": "Less than (<)",
-    "abusefilter-edit-builder-op-comparison-gt": "Greater than (>)",
-    "abusefilter-edit-builder-op-comparison-lte": "Less than or equal to (<=)",
-    "abusefilter-edit-builder-op-comparison-gte": "Greater than or equal to 
(>=)",
-    "abusefilter-edit-builder-group-op-bool": "Boolean operators",
-    "abusefilter-edit-builder-op-bool-not": "Not (!)",
-    "abusefilter-edit-builder-op-bool-and": "And (&)",
-    "abusefilter-edit-builder-op-bool-or": "Or (|)",
-    "abusefilter-edit-builder-op-bool-xor": "XOR (^)",
-    "abusefilter-edit-builder-group-misc": "Miscellaneous",
-    "abusefilter-edit-builder-misc-in": "contained in string (in)",
-    "abusefilter-edit-builder-misc-like": "Matches pattern (like)",
-    "abusefilter-edit-builder-misc-rlike": "Matches regex (rlike)",
-    "abusefilter-edit-builder-misc-irlike": "Matches regex, case insensitive 
(irlike)",
-    "abusefilter-edit-builder-misc-contains": "Left string contains right 
string (contains)",
-    "abusefilter-edit-builder-misc-stringlit": "String literal (\"\")",
-    "abusefilter-edit-builder-misc-tern": "Ternary operator (X ? Y : Z)",
-    "abusefilter-edit-builder-misc-cond": "Conditional (if X then Y else Z)",
-    "abusefilter-edit-builder-group-funcs": "Functions",
-    "abusefilter-edit-builder-funcs-length": "String length (length)",
-    "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-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-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-substr": "Substring (substr)",
-    "abusefilter-edit-builder-funcs-strpos": "Position of substring in string 
(strpos)",
-    "abusefilter-edit-builder-funcs-str_replace": "Replace substring with 
string (str_replace)",
-    "abusefilter-edit-builder-funcs-rescape": "Escape string as literal in 
regex (rescape)",
-    "abusefilter-edit-builder-funcs-set_var": "Set variable (set_var)",
-    "abusefilter-edit-builder-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-action": "Action",
-    "abusefilter-edit-builder-vars-addedlines": "Lines added in edit",
-    "abusefilter-edit-builder-vars-delta": "Size change in edit",
-    "abusefilter-edit-builder-vars-diff": "Unified diff of changes made by 
edit",
-    "abusefilter-edit-builder-vars-newsize": "New page size",
-    "abusefilter-edit-builder-vars-oldsize": "Old page size",
-    "abusefilter-edit-builder-vars-removedlines": "Lines removed in edit",
-    "abusefilter-edit-builder-vars-summary": "Edit summary/reason",
-    "abusefilter-edit-builder-vars-article-id": "Page ID",
-    "abusefilter-edit-builder-vars-article-ns": "Page namespace",
-    "abusefilter-edit-builder-vars-article-text": "Page title (without 
namespace)",
-    "abusefilter-edit-builder-vars-article-prefixedtext": "Full page title",
-    "abusefilter-edit-builder-vars-article-views": "Page views",
-    "abusefilter-edit-builder-vars-movedfrom-id": "Page ID of move source 
page",
-    "abusefilter-edit-builder-vars-movedfrom-ns": "Namespace of move source 
page",
-    "abusefilter-edit-builder-vars-movedfrom-text": "Title of move source 
page",
-    "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Full title of 
move source page",
-    "abusefilter-edit-builder-vars-movedto-id": "Page ID of move destination 
page",
-    "abusefilter-edit-builder-vars-movedto-ns": "Namespace of move destination 
page",
-    "abusefilter-edit-builder-vars-movedto-text": "Title of move destination 
page",
-    "abusefilter-edit-builder-vars-movedto-prefixedtext": "Full title of move 
destination page",
-    "abusefilter-edit-builder-vars-user-editcount": "Edit count of user",
-    "abusefilter-edit-builder-vars-user-age": "Age of user account",
-    "abusefilter-edit-builder-vars-user-name": "Name of user account",
-    "abusefilter-edit-builder-vars-user-groups": "Groups (including implicit) 
user is in",
-    "abusefilter-edit-builder-vars-user-rights": "Rights that a user has",
-    "abusefilter-edit-builder-vars-user-blocked": "Whether user is blocked",
-    "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-all-links": "All external links in the new 
text",
-    "abusefilter-edit-builder-vars-added-links": "All external links added in 
the edit",
-    "abusefilter-edit-builder-vars-removed-links": "All external links removed 
in the edit",
-    "abusefilter-edit-builder-vars-old-text": "Old page wikitext, before the 
edit",
-    "abusefilter-edit-builder-vars-new-text": "New page wikitext, after the 
edit",
-    "abusefilter-edit-builder-vars-new-pst": "New page wikitext, pre-save 
transformed",
-    "abusefilter-edit-builder-vars-diff-pst": "Unified diff of changes made by 
edit, pre-save transformed",
-    "abusefilter-edit-builder-vars-addedlines-pst": "Lines added in edit, 
pre-save transformed",
-    "abusefilter-edit-builder-vars-new-text-stripped": "New page text, 
stripped of any markup",
-    "abusefilter-edit-builder-vars-new-html": "Parsed HTML source of the new 
revision",
-    "abusefilter-edit-builder-vars-restrictions-edit": "Edit protection level 
of the page",
-    "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-old-text-stripped": "Old page text, 
stripped of any markup",
-    "abusefilter-edit-builder-vars-old-links": "Links in the page, before the 
edit",
-    "abusefilter-edit-builder-vars-old-html": "Old page wikitext, parsed into 
HTML",
-    "abusefilter-edit-builder-vars-minor-edit": "Whether or not the edit is 
marked as minor",
-    "abusefilter-edit-builder-vars-file-sha1": "SHA1 hash of file contents",
-    "abusefilter-filter-log": "Recent filter changes",
-    "abusefilter-history": "Change history for Abuse Filter #$1",
-    "abusefilter-history-foruser": "Changes by $1",
-    "abusefilter-history-hidden": "Hidden",
-    "abusefilter-history-enabled": "Enabled",
-    "abusefilter-history-global": "Global",
-    "abusefilter-history-timestamp": "Time",
-    "abusefilter-history-user": "User",
-    "abusefilter-history-public": "Public filter description",
-    "abusefilter-history-flags": "Flags",
-    "abusefilter-history-filter": "Filter rule",
-    "abusefilter-history-comments": "Comments",
-    "abusefilter-history-actions": "Actions",
-    "abusefilter-history-backedit": "Back to filter editor",
-    "abusefilter-history-deleted": "Deleted",
-    "abusefilter-history-filterid": "Filter",
-    "abusefilter-history-select-legend": "Refine search",
-    "abusefilter-history-select-user": "User:",
-    "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.",
-    "abusefilter-exception-unexpectedatend": "Unexpected \"$2\" at character 
$1.",
-    "abusefilter-exception-expectednotfound": "Expected a $2 at character $1, 
not found (found $3 $4 instead).",
-    "abusefilter-exception-unrecognisedkeyword": "Unrecognized keyword $2 at 
character $1.",
-    "abusefilter-exception-unexpectedtoken": "Unexpected token \"$3\" (of type 
$2) at character $1.",
-    "abusefilter-exception-unclosedstring": "Unclosed string starting at 
character $1.",
-    "abusefilter-exception-invalidoperator": "Invalid operator \"$2\" at 
character $1.",
-    "abusefilter-exception-unrecognisedtoken": "Unrecognized token \"$2\" at 
character $1.",
-    "abusefilter-exception-noparams": "No parameters given to function \"$2\" 
at character $1.",
-    "abusefilter-exception-dividebyzero": "Illegal attempt to divide $2 by 
zero at character $1.",
-    "abusefilter-exception-unrecognisedvar": "Unrecognized variable $2 at 
character $1.",
-    "abusefilter-exception-notenoughargs": "Not enough arguments to function 
$2 called at character $1.\n\tExpected $3 {{PLURAL:$3|argument|arguments}}, got 
$4",
-    "abusefilter-exception-regexfailure": "Error in regular expression \"$3\" 
at character $1: \"$2\"",
-    "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-action-tag": "Tag",
-    "abusefilter-action-throttle": "Throttle",
-    "abusefilter-action-warn": "Warn",
-    "abusefilter-action-blockautopromote": "Block autopromote",
-    "abusefilter-action-block": "Block",
-    "abusefilter-action-degroup": "Remove from groups",
-    "abusefilter-action-rangeblock": "Range-block",
-    "abusefilter-action-disallow": "Disallow",
-    "abusefilter-revert-title": "Revert all changes by filter $1",
-    "abusefilter-revert-intro": "This form allows you to revert all changes 
made by the abuse filter due to filter $1.\nPlease exercise care in using this 
tool.",
-    "abusefilter-revert-preview-item": "$1: $2 made a $3 on $4.\nActions to be 
reverted: $5 ($6)",
-    "abusefilter-revert-search-legend": "Select abuse filter actions to be 
reverted",
-    "abusefilter-revert-periodstart": "Period start:",
-    "abusefilter-revert-periodend": "Period end:",
-    "abusefilter-revert-search": "Select actions",
-    "abusefilter-revert-filter": "Filter:",
-    "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": "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",
-    "abusefilter-revert-reasonfield": "Reason:",
-    "abusefilter-test": "Test a filter against previous edits",
-    "abusefilter-test-intro": "This page allows you to check a filter entered 
in the box below against the last $1 {{PLURAL:$1|change|changes}}.\nTo load an 
existing filter, type its filter ID into the box below the edit textbox, and 
click the \"{{int:abusefilter-test-load}}\" button.",
-    "abusefilter-test-legend": "Filter testing",
-    "abusefilter-test-load-filter": "Load filter ID:",
-    "abusefilter-test-submit": "Test",
-    "abusefilter-test-load": "Load",
-    "abusefilter-test-user": "Changes by user:",
-    "abusefilter-test-period-start": "Changes made after:",
-    "abusefilter-test-period-end": "Changes made before:",
-    "abusefilter-test-page": "Changes made to page:",
-    "abusefilter-test-shownegative": "Show changes that do not match the 
filter",
-    "abusefilter-test-syntaxerr": "The filter you entered contained a syntax 
error.\nYou can receive a full explanation by clicking the 
\"{{int:abusefilter-edit-check}}\" button.",
-    "abusefilter-test-badtitle": "The page title you entered was invalid. It 
may contain one or more characters that cannot be used in titles.",
-    "abusefilter-changeslist-examine": "examine",
-    "abusefilter-examine": "Examine individual changes",
-    "abusefilter-examine-intro": "This page allows you to examine the 
variables generated by the Abuse Filter for an individual change, and test it 
against filters.",
-    "abusefilter-examine-legend": "Select changes",
-    "abusefilter-examine-diff": "Diff URL:",
-    "abusefilter-examine-user": "User:",
-    "abusefilter-examine-title": "Page title:",
-    "abusefilter-examine-submit": "Search",
-    "abusefilter-examine-vars": "Variables generated for this change",
-    "abusefilter-examine-test": "Test this change against a filter",
-    "abusefilter-examine-test-button": "Test filter",
-    "abusefilter-examine-match": "The filter matched this change.",
-    "abusefilter-examine-nomatch": "The filter did not match this change.",
-    "abusefilter-examine-syntaxerror": "The filter has invalid syntax",
-    "abusefilter-examine-notfound": "The change you requested could not be 
found.",
-    "abusefilter-examine-incompatible": "The change you requested is not 
supported by the Abuse Filter",
-    "abusefilter-examine-noresults": "No results were found for the search 
parameters you provided.",
-    "abusefilter-topnav": "'''Abuse Filter navigation'''",
-    "abusefilter-topnav-home": "Home",
-    "abusefilter-topnav-test": "Batch testing",
-    "abusefilter-topnav-examine": "Examine past edits",
-    "abusefilter-topnav-log": "Abuse Log",
-    "abusefilter-topnav-tools": "Debugging tools",
-    "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-log-entry-modify": "modified $1 ($2)",
-    "abusefilter-log-noresults": "No results",
-    "abusefilter-diff-title": "Differences between versions",
-    "abusefilter-diff-item": "Item",
-    "abusefilter-diff-version": "Version from $1 {{GENDER:$3|by}} $2",
-    "abusefilter-diff-info": "Basic information",
-    "abusefilter-diff-pattern": "Filter conditions",
-    "abusefilter-diff-invalid": "Unable to fetch the requested versions",
-    "abusefilter-diff-backhistory": "Back to filter history",
-    "abusefilter-diff-prev": "Older change",
-    "abusefilter-diff-next": "Newer change",
-    "abusefilter-import-intro": "You can use this interface to import filters 
from other wikis.\nOn the source wiki, click 
\"{{int:abusefilter-edit-export}}\" under \"{{int:abusefilter-edit-tools}}\" on 
the editing interface.\nCopy from the textbox that appears, and paste it into 
this textbox, then click \"{{int:abusefilter-import-submit}}\".",
-    "abusefilter-import-submit": "Import data",
-    "abusefilter-group-default": "Default",
-    "abusefilter-http-error": "An HTTP error occurred: $1."
+       "@metadata": {
+               "authors": [
+                       "Andrew Garrett",
+                       "Kunal Mehta"
+               ]
+       },
+       "abusefilter-desc": "Applies automatic heuristics to edits",
+       "abusefilter": "Abuse filter configuration",
+       "abuselog": "Abuse log",
+       "abusefilter-intro": "Welcome to the Abuse Filter management 
interface.\nThe Abuse Filter is an automated software mechanism of applying 
automatic heuristics to all actions.\nThis interface shows a list of defined 
filters, and allows them to be modified.",
+       "abusefilter-mustbeeditor": "For security reasons, only users with the 
right to modify abuse filters may use this interface.",
+       "abusefilter-warning": "'''Warning:''' This action has been 
automatically identified as harmful.\nUnconstructive edits will be quickly 
reverted,\nand egregious or repeated unconstructive editing will result in your 
account or IP address being blocked.\nIf you believe this action to be 
constructive, you may submit it again to confirm it.\nA brief description of 
the abuse rule which your action matched is: $1",
+       "abusefilter-disallowed": "This action has been automatically 
identified as harmful, and therefore disallowed.\nIf you believe your action 
was constructive, please inform an administrator of what you were trying to 
do.\nA brief description of the abuse rule which your action matched is: $1",
+       "abusefilter-blocked-display": "This action has been automatically 
identified as harmful,\nand you have been prevented from executing it.\nIn 
addition, to protect {{SITENAME}}, your user account and all associated IP 
addresses have been blocked from editing.\nIf this has occurred in error, 
please contact an administrator.\nA brief description of the abuse rule which 
your action matched is: $1",
+       "abusefilter-degrouped": "This action has been automatically identified 
as harmful.\nConsequently, it has been disallowed, and, since your account is 
suspected of being compromised, all rights have been revoked.\nIf you believe 
this to have been in error, please contact a bureaucrat with an explanation of 
this action, and your rights may be restored.\nA brief description of the abuse 
rule which your action matched is: $1",
+       "abusefilter-autopromote-blocked": "This action has been automatically 
identified as harmful, and it has been disallowed.\nIn addition, as a security 
measure, some privileges routinely granted to established accounts have been 
temporarily revoked from your account.\nA brief description of the abuse rule 
which your action matched is: $1",
+       "abusefilter-blocker": "Abuse filter",
+       "abusefilter-blockreason": "Automatically blocked by abuse 
filter.\nDescription of matched rule: $1",
+       "abusefilter-degroupreason": "Rights automatically stripped by abuse 
filter.\nRule description: $1",
+       "abusefilter-accountreserved": "This account name is reserved for use 
by the abuse filter.",
+       "right-abusefilter-modify": "Modify abuse filters",
+       "right-abusefilter-view": "View abuse filters",
+       "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-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",
+       "right-abusefilter-log-private": "View log entries of abuse filters 
marked as private",
+       "right-abusefilter-hide-log": "Hide entries in the abuse log",
+       "right-abusefilter-hidden-log": "View hidden abuse log entries",
+       "right-abusefilter-modify-global": "Create or modify global abuse 
filters",
+       "action-abusefilter-modify": "modify abuse filters",
+       "action-abusefilter-view": "view abuse filters",
+       "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-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",
+       "abusefilter-log": "Abuse filter log",
+       "abusefilter-log-summary": "This log shows a list of all actions caught 
by the filters.",
+       "abusefilter-log-search": "Search the abuse log",
+       "abusefilter-log-search-user": "User:",
+       "abusefilter-log-search-filter": "Filter IDs (separate with pipes):",
+       "abusefilter-log-search-title": "Title:",
+       "abusefilter-log-search-wiki": "Wiki:",
+       "abusefilter-log-search-submit": "Search",
+       "abusefilter-log-entry": "$1: $2 triggered an abuse filter, performing 
the action \"$3\" on $4.\nActions taken: $5;\nFilter description: $6",
+       "abusefilter-log-entry-withdiff": "$1: $2 triggered an abuse filter, 
performing the action \"$3\" on $4.\nActions taken: $5;\nFilter description: $6 
($7)",
+       "abusefilter-log-detailedentry-meta": "$1: $2 triggered $3, performing 
the action \"$4\" on $5.\nActions taken: $6;\nFilter description: $7 ($8)",
+       "abusefilter-log-detailedentry-global": "global filter $1",
+       "abusefilter-log-detailedentry-local": "filter $1",
+       "abusefilter-log-detailslink": "details",
+       "abusefilter-log-diff": "diff",
+       "abusefilter-log-hidelink": "adjust visibility",
+       "abusefilter-log-details-legend": "Details for log entry $1",
+       "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-ip": "Originating IP address",
+       "abusefilter-log-noactions": "none",
+       "abusefilter-log-details-diff": "Changes made in edit",
+       "abusefilter-log-linkoncontribs": "abuse log",
+       "abusefilter-log-linkoncontribs-text": "Abuse log for this user",
+       "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-details-hidden": "You cannot view the details for this 
entry because it 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-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 triggered $4, performing the action 
\"$5\" on $3. Actions taken: $6 ($7)",
+       "abusefilter-management": "Abuse filter management",
+       "abusefilter-list": "All filters",
+       "abusefilter-list-id": "Filter ID",
+       "abusefilter-list-status": "Status",
+       "abusefilter-list-public": "Public description",
+       "abusefilter-list-consequences": "Consequences",
+       "abusefilter-list-visibility": "Visibility",
+       "abusefilter-list-hitcount": "Hit count",
+       "abusefilter-list-edit": "Edit",
+       "abusefilter-list-details": "Details",
+       "abusefilter-list-limit": "Number per page:",
+       "abusefilter-list-lastmodified": "Last modified",
+       "abusefilter-list-group": "Filter group",
+       "abusefilter-hidden": "Private",
+       "abusefilter-unhidden": "Public",
+       "abusefilter-enabled": "Enabled",
+       "abusefilter-deleted": "Deleted",
+       "abusefilter-disabled": "Disabled",
+       "abusefilter-hitcount": "$1 {{PLURAL:$1|hit|hits}}",
+       "abusefilter-new": "Create a new filter",
+       "abusefilter-return": "Return to filter management",
+       "abusefilter-status-global": "Global",
+       "abusefilter-list-options": "Options",
+       "abusefilter-list-options-deleted": "Deleted filters:",
+       "abusefilter-list-options-deleted-only": "Show only deleted filters",
+       "abusefilter-list-options-deleted-hide": "Hide deleted filters",
+       "abusefilter-list-options-deleted-show": "Include deleted filters",
+       "abusefilter-list-options-scope": "Show filters from:",
+       "abusefilter-list-options-scope-local": "Local wiki",
+       "abusefilter-list-options-scope-global": "Global rules",
+       "abusefilter-list-options-disabled": "Disabled filters:",
+       "abusefilter-list-options-hidedisabled": "Hide disabled filters",
+       "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",
+       "abusefilter-tools-submitexpr": "Evaluate",
+       "abusefilter-tools-reautoconfirm": "Restore autoconfirmed status",
+       "abusefilter-tools-reautoconfirm-user": "User:",
+       "abusefilter-tools-reautoconfirm-submit": "Re-autoconfirm",
+       "abusefilter-reautoconfirm-none": "That user has not had 
{{GENDER:$1|his|her|their}} autoconfirmed status suspended.",
+       "abusefilter-reautoconfirm-notallowed": "You are not allowed to restore 
autoconfirmed status.",
+       "abusefilter-reautoconfirm-done": "Account's autoconfirmed status has 
been restored",
+       "abusefilter-status": "Of the last $1 {{PLURAL:$1|action|actions}}, $2 
($3%) {{PLURAL:$2|has|have}} reached the condition limit of $4, and $5 ($6%) 
{{PLURAL:$5|has|have}} matched one of the filters currently enabled.",
+       "abusefilter-edit": "Editing abuse filter",
+       "abusefilter-edit-subtitle": "Editing filter $1",
+       "abusefilter-edit-subtitle-new": "Creating filter",
+       "abusefilter-edit-oldwarning": "<strong>You are editing an old version 
of this filter.\nThe statistics quoted are for the most recent version of the 
filter.\nIf you save your changes, you will overwrite all changes since the 
revision you are editing.</strong> 
&bull;\n[[Special:AbuseFilter/history/$2|Return to this filter's history]].",
+       "abusefilter-edit-status-label": "Statistics:",
+       "abusefilter-edit-status": "Of the last $1 
{{PLURAL:$1|action|actions}}, this filter has matched $2 ($3%).\nOn average, 
its run time is $4 ms, and it consumes $5 {{PLURAL:$5|condition|conditions}} of 
the condition limit.",
+       "abusefilter-edit-throttled": "'''Warning:''' This filter was 
automatically disabled as a safety measure.\nIt reached the limit of matching 
more than $1% of actions.",
+       "abusefilter-edit-new": "New filter",
+       "abusefilter-edit-save": "Save filter",
+       "abusefilter-edit-id": "Filter ID:",
+       "abusefilter-edit-description": "Description:\n:''(publicly 
viewable)''",
+       "abusefilter-edit-group": "Filter group:",
+       "abusefilter-edit-flags": "Flags:",
+       "abusefilter-edit-enabled": "Enable this filter",
+       "abusefilter-edit-deleted": "Mark as deleted",
+       "abusefilter-edit-hidden": "Hide details of this filter from public 
view",
+       "abusefilter-edit-global": "Global filter",
+       "abusefilter-edit-rules": "Conditions:",
+       "abusefilter-edit-notes": "Notes:",
+       "abusefilter-edit-lastmod": "Filter last modified:",
+       "abusefilter-edit-lastmod-text": "$1 by $2",
+       "abusefilter-edit-hitcount": "Filter hits:",
+       "abusefilter-edit-consequences": "Actions taken when matched",
+       "abusefilter-edit-action-warn": "Trigger these actions after giving the 
user a warning",
+       "abusefilter-edit-action-disallow": "Prevent the user from performing 
the action in question",
+       "abusefilter-edit-action-flag": "Flag the edit in the abuse log",
+       "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-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-tag": "Tag the edit for further review",
+       "abusefilter-edit-throttle-count": "Number of actions to allow:",
+       "abusefilter-edit-throttle-period": "Period of time:",
+       "abusefilter-edit-throttle-seconds": "$1 {{PLURAL:$1|second|seconds}}",
+       "abusefilter-edit-throttle-groups": "Group throttle by:\n:''(one per 
line, combine with commas)''",
+       "abusefilter-edit-warn-message": "System message to use for warning:",
+       "abusefilter-edit-warn-other": "Other message",
+       "abusefilter-edit-warn-other-label": "Page name of other 
message:\n:''(without MediaWiki prefix)''",
+       "abusefilter-edit-warn-actions": "Actions:",
+       "abusefilter-edit-warn-preview": "Preview selected message",
+       "abusefilter-edit-warn-edit": "Create/Edit selected message",
+       "abusefilter-edit-tag-tag": "Tags to apply (one per line):",
+       "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-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:",
+       "abusefilter-edit-check": "Check syntax",
+       "abusefilter-edit-badfilter": "The filter you specified does not exist",
+       "abusefilter-edit-revert": "Revert actions taken by this filter",
+       "abusefilter-edit-tools": "Tools:",
+       "abusefilter-edit-test-link": "Test this filter against recent edits",
+       "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, and they should not contain special 
characters.",
+       "abusefilter-edit-notallowed": "You are not permitted to create or edit 
abuse filters",
+       "abusefilter-edit-notallowed-global": "You are not permitted to create 
or edit global abuse filters",
+       "abusefilter-edit-notallowed-global-custom-msg": "Custom warning 
messages are not supported for global filters",
+       "abusefilter-edit-builder-select": "Select an option to add it at the 
cursor",
+       "abusefilter-edit-builder-group-op-arithmetic": "Arithmetic operators",
+       "abusefilter-edit-builder-op-arithmetic-addition": "Addition (+)",
+       "abusefilter-edit-builder-op-arithmetic-subtraction": "Subtraction (-)",
+       "abusefilter-edit-builder-op-arithmetic-multiplication": 
"Multiplication (*)",
+       "abusefilter-edit-builder-op-arithmetic-divide": "Division (/)",
+       "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-lt": "Less than (<)",
+       "abusefilter-edit-builder-op-comparison-gt": "Greater than (>)",
+       "abusefilter-edit-builder-op-comparison-lte": "Less than or equal to 
(<=)",
+       "abusefilter-edit-builder-op-comparison-gte": "Greater than or equal to 
(>=)",
+       "abusefilter-edit-builder-group-op-bool": "Boolean operators",
+       "abusefilter-edit-builder-op-bool-not": "Not (!)",
+       "abusefilter-edit-builder-op-bool-and": "And (&)",
+       "abusefilter-edit-builder-op-bool-or": "Or (|)",
+       "abusefilter-edit-builder-op-bool-xor": "XOR (^)",
+       "abusefilter-edit-builder-group-misc": "Miscellaneous",
+       "abusefilter-edit-builder-misc-in": "contained in string (in)",
+       "abusefilter-edit-builder-misc-like": "Matches pattern (like)",
+       "abusefilter-edit-builder-misc-rlike": "Matches regex (rlike)",
+       "abusefilter-edit-builder-misc-irlike": "Matches regex, case 
insensitive (irlike)",
+       "abusefilter-edit-builder-misc-contains": "Left string contains right 
string (contains)",
+       "abusefilter-edit-builder-misc-stringlit": "String literal (\"\")",
+       "abusefilter-edit-builder-misc-tern": "Ternary operator (X ? Y : Z)",
+       "abusefilter-edit-builder-misc-cond": "Conditional (if X then Y else 
Z)",
+       "abusefilter-edit-builder-group-funcs": "Functions",
+       "abusefilter-edit-builder-funcs-length": "String length (length)",
+       "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-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-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-substr": "Substring (substr)",
+       "abusefilter-edit-builder-funcs-strpos": "Position of substring in 
string (strpos)",
+       "abusefilter-edit-builder-funcs-str_replace": "Replace substring with 
string (str_replace)",
+       "abusefilter-edit-builder-funcs-rescape": "Escape string as literal in 
regex (rescape)",
+       "abusefilter-edit-builder-funcs-set_var": "Set variable (set_var)",
+       "abusefilter-edit-builder-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-action": "Action",
+       "abusefilter-edit-builder-vars-addedlines": "Lines added in edit",
+       "abusefilter-edit-builder-vars-delta": "Size change in edit",
+       "abusefilter-edit-builder-vars-diff": "Unified diff of changes made by 
edit",
+       "abusefilter-edit-builder-vars-newsize": "New page size",
+       "abusefilter-edit-builder-vars-oldsize": "Old page size",
+       "abusefilter-edit-builder-vars-removedlines": "Lines removed in edit",
+       "abusefilter-edit-builder-vars-summary": "Edit summary/reason",
+       "abusefilter-edit-builder-vars-article-id": "Page ID",
+       "abusefilter-edit-builder-vars-article-ns": "Page namespace",
+       "abusefilter-edit-builder-vars-article-text": "Page title (without 
namespace)",
+       "abusefilter-edit-builder-vars-article-prefixedtext": "Full page title",
+       "abusefilter-edit-builder-vars-article-views": "Page views",
+       "abusefilter-edit-builder-vars-movedfrom-id": "Page ID of move source 
page",
+       "abusefilter-edit-builder-vars-movedfrom-ns": "Namespace of move source 
page",
+       "abusefilter-edit-builder-vars-movedfrom-text": "Title of move source 
page",
+       "abusefilter-edit-builder-vars-movedfrom-prefixedtext": "Full title of 
move source page",
+       "abusefilter-edit-builder-vars-movedto-id": "Page ID of move 
destination page",
+       "abusefilter-edit-builder-vars-movedto-ns": "Namespace of move 
destination page",
+       "abusefilter-edit-builder-vars-movedto-text": "Title of move 
destination page",
+       "abusefilter-edit-builder-vars-movedto-prefixedtext": "Full title of 
move destination page",
+       "abusefilter-edit-builder-vars-user-editcount": "Edit count of user",
+       "abusefilter-edit-builder-vars-user-age": "Age of user account",
+       "abusefilter-edit-builder-vars-user-name": "Name of user account",
+       "abusefilter-edit-builder-vars-user-groups": "Groups (including 
implicit) user is in",
+       "abusefilter-edit-builder-vars-user-rights": "Rights that a user has",
+       "abusefilter-edit-builder-vars-user-blocked": "Whether user is blocked",
+       "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-all-links": "All external links in the 
new text",
+       "abusefilter-edit-builder-vars-added-links": "All external links added 
in the edit",
+       "abusefilter-edit-builder-vars-removed-links": "All external links 
removed in the edit",
+       "abusefilter-edit-builder-vars-old-text": "Old page wikitext, before 
the edit",
+       "abusefilter-edit-builder-vars-new-text": "New page wikitext, after the 
edit",
+       "abusefilter-edit-builder-vars-new-pst": "New page wikitext, pre-save 
transformed",
+       "abusefilter-edit-builder-vars-diff-pst": "Unified diff of changes made 
by edit, pre-save transformed",
+       "abusefilter-edit-builder-vars-addedlines-pst": "Lines added in edit, 
pre-save transformed",
+       "abusefilter-edit-builder-vars-new-text-stripped": "New page text, 
stripped of any markup",
+       "abusefilter-edit-builder-vars-new-html": "Parsed HTML source of the 
new revision",
+       "abusefilter-edit-builder-vars-restrictions-edit": "Edit protection 
level of the page",
+       "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-old-text-stripped": "Old page text, 
stripped of any markup",
+       "abusefilter-edit-builder-vars-old-links": "Links in the page, before 
the edit",
+       "abusefilter-edit-builder-vars-old-html": "Old page wikitext, parsed 
into HTML",
+       "abusefilter-edit-builder-vars-minor-edit": "Whether or not the edit is 
marked as minor",
+       "abusefilter-edit-builder-vars-file-sha1": "SHA1 hash of file contents",
+       "abusefilter-filter-log": "Recent filter changes",
+       "abusefilter-history": "Change history for Abuse Filter #$1",
+       "abusefilter-history-foruser": "Changes by $1",
+       "abusefilter-history-hidden": "Hidden",
+       "abusefilter-history-enabled": "Enabled",
+       "abusefilter-history-global": "Global",
+       "abusefilter-history-timestamp": "Time",
+       "abusefilter-history-user": "User",
+       "abusefilter-history-public": "Public filter description",
+       "abusefilter-history-flags": "Flags",
+       "abusefilter-history-filter": "Filter rule",
+       "abusefilter-history-comments": "Comments",
+       "abusefilter-history-actions": "Actions",
+       "abusefilter-history-backedit": "Back to filter editor",
+       "abusefilter-history-deleted": "Deleted",
+       "abusefilter-history-filterid": "Filter",
+       "abusefilter-history-select-legend": "Refine search",
+       "abusefilter-history-select-user": "User:",
+       "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.",
+       "abusefilter-exception-unexpectedatend": "Unexpected \"$2\" at 
character $1.",
+       "abusefilter-exception-expectednotfound": "Expected a $2 at character 
$1, not found (found $3 $4 instead).",
+       "abusefilter-exception-unrecognisedkeyword": "Unrecognized keyword $2 
at character $1.",
+       "abusefilter-exception-unexpectedtoken": "Unexpected token \"$3\" (of 
type $2) at character $1.",
+       "abusefilter-exception-unclosedstring": "Unclosed string starting at 
character $1.",
+       "abusefilter-exception-invalidoperator": "Invalid operator \"$2\" at 
character $1.",
+       "abusefilter-exception-unrecognisedtoken": "Unrecognized token \"$2\" 
at character $1.",
+       "abusefilter-exception-noparams": "No parameters given to function 
\"$2\" at character $1.",
+       "abusefilter-exception-dividebyzero": "Illegal attempt to divide $2 by 
zero at character $1.",
+       "abusefilter-exception-unrecognisedvar": "Unrecognized variable $2 at 
character $1.",
+       "abusefilter-exception-notenoughargs": "Not enough arguments to 
function $2 called at character $1.\n\tExpected $3 
{{PLURAL:$3|argument|arguments}}, got $4",
+       "abusefilter-exception-regexfailure": "Error in regular expression 
\"$3\" at character $1: \"$2\"",
+       "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-action-tag": "Tag",
+       "abusefilter-action-throttle": "Throttle",
+       "abusefilter-action-warn": "Warn",
+       "abusefilter-action-blockautopromote": "Block autopromote",
+       "abusefilter-action-block": "Block",
+       "abusefilter-action-degroup": "Remove from groups",
+       "abusefilter-action-rangeblock": "Range-block",
+       "abusefilter-action-disallow": "Disallow",
+       "abusefilter-revert-title": "Revert all changes by filter $1",
+       "abusefilter-revert-intro": "This form allows you to revert all changes 
made by the abuse filter due to filter $1.\nPlease exercise care in using this 
tool.",
+       "abusefilter-revert-preview-item": "$1: $2 made a $3 on $4.\nActions to 
be reverted: $5 ($6)",
+       "abusefilter-revert-search-legend": "Select abuse filter actions to be 
reverted",
+       "abusefilter-revert-periodstart": "Period start:",
+       "abusefilter-revert-periodend": "Period end:",
+       "abusefilter-revert-search": "Select actions",
+       "abusefilter-revert-filter": "Filter:",
+       "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": "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",
+       "abusefilter-revert-reasonfield": "Reason:",
+       "abusefilter-test": "Test a filter against previous edits",
+       "abusefilter-test-intro": "This page allows you to check a filter 
entered in the box below against the last $1 {{PLURAL:$1|change|changes}}.\nTo 
load an existing filter, type its filter ID into the box below the edit 
textbox, and click the \"{{int:abusefilter-test-load}}\" button.",
+       "abusefilter-test-legend": "Filter testing",
+       "abusefilter-test-load-filter": "Load filter ID:",
+       "abusefilter-test-submit": "Test",
+       "abusefilter-test-load": "Load",
+       "abusefilter-test-user": "Changes by user:",
+       "abusefilter-test-period-start": "Changes made after:",
+       "abusefilter-test-period-end": "Changes made before:",
+       "abusefilter-test-page": "Changes made to page:",
+       "abusefilter-test-shownegative": "Show changes that do not match the 
filter",
+       "abusefilter-test-syntaxerr": "The filter you entered contained a 
syntax error.\nYou can receive a full explanation by clicking the 
\"{{int:abusefilter-edit-check}}\" button.",
+       "abusefilter-test-badtitle": "The page title you entered was invalid. 
It may contain one or more characters that cannot be used in titles.",
+       "abusefilter-changeslist-examine": "examine",
+       "abusefilter-examine": "Examine individual changes",
+       "abusefilter-examine-intro": "This page allows you to examine the 
variables generated by the Abuse Filter for an individual change, and test it 
against filters.",
+       "abusefilter-examine-legend": "Select changes",
+       "abusefilter-examine-diff": "Diff URL:",
+       "abusefilter-examine-user": "User:",
+       "abusefilter-examine-title": "Page title:",
+       "abusefilter-examine-submit": "Search",
+       "abusefilter-examine-vars": "Variables generated for this change",
+       "abusefilter-examine-test": "Test this change against a filter",
+       "abusefilter-examine-test-button": "Test filter",
+       "abusefilter-examine-match": "The filter matched this change.",
+       "abusefilter-examine-nomatch": "The filter did not match this change.",
+       "abusefilter-examine-syntaxerror": "The filter has invalid syntax",
+       "abusefilter-examine-notfound": "The change you requested could not be 
found.",
+       "abusefilter-examine-incompatible": "The change you requested is not 
supported by the Abuse Filter",
+       "abusefilter-examine-noresults": "No results were found for the search 
parameters you provided.",
+       "abusefilter-topnav": "'''Abuse Filter navigation'''",
+       "abusefilter-topnav-home": "Home",
+       "abusefilter-topnav-test": "Batch testing",
+       "abusefilter-topnav-examine": "Examine past edits",
+       "abusefilter-topnav-log": "Abuse Log",
+       "abusefilter-topnav-tools": "Debugging tools",
+       "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-log-entry-modify": "modified $1 ($2)",
+       "abusefilter-log-noresults": "No results",
+       "abusefilter-diff-title": "Differences between versions",
+       "abusefilter-diff-item": "Item",
+       "abusefilter-diff-version": "Version from $1 {{GENDER:$3|by}} $2",
+       "abusefilter-diff-info": "Basic information",
+       "abusefilter-diff-pattern": "Filter conditions",
+       "abusefilter-diff-invalid": "Unable to fetch the requested versions",
+       "abusefilter-diff-backhistory": "Back to filter history",
+       "abusefilter-diff-prev": "Older change",
+       "abusefilter-diff-next": "Newer change",
+       "abusefilter-import-intro": "You can use this interface to import 
filters from other wikis.\nOn the source wiki, click 
\"{{int:abusefilter-edit-export}}\" under \"{{int:abusefilter-edit-tools}}\" on 
the editing interface.\nCopy from the textbox that appears, and paste it into 
this textbox, then click \"{{int:abusefilter-import-submit}}\".",
+       "abusefilter-import-submit": "Import data",
+       "abusefilter-group-default": "Default",
+       "abusefilter-http-error": "An HTTP error occurred: $1.",
+       "apihelp-abusefiltercheckmatch-description": "Check to see if an 
AbuseFilter matches a set of variables, editor logged AbuseFilter 
event.\n\nvars, rcid or logid is required however only one may be used.",
+       "apihelp-abusefiltercheckmatch-param-filter": "The full filter text to 
check for a match.",
+       "apihelp-abusefiltercheckmatch-param-vars": "JSON encoded array of 
variables to test against.",
+       "apihelp-abusefiltercheckmatch-param-rcid": "Recent change ID to check 
against.",
+       "apihelp-abusefiltercheckmatch-param-logid": "Abuse filter log ID to 
check against.",
+       "apihelp-abusefiltercheckmatch-example-1": "Test if recent change ID 15 
matches a simple filter",
+       "apihelp-abusefilterchecksyntax-description": "Check syntax of an 
AbuseFilter filter.",
+       "apihelp-abusefilterchecksyntax-param-filter": "The full filter text to 
check syntax on.",
+       "apihelp-abusefilterchecksyntax-example-1": "Check syntax of a valid 
filter",
+       "apihelp-abusefilterchecksyntax-example-2": "Check syntax of an invalid 
filter",
+       "apihelp-abusefilterevalexpression-description": "Evaluates an 
AbuseFilter expression.",
+       "apihelp-abusefilterevalexpression-param-expression": "The expression 
to evaluate.",
+       "apihelp-abusefilterevalexpression-example-1": "Evaluate a simple 
expression",
+       "apihelp-abusefilterunblockautopromote-description": "Unblocks a user 
from receiving autopromotions due to an abusefilter consequence.",
+       "apihelp-abusefilterunblockautopromote-param-user": "Username of the 
user you want to unblock.",
+       "apihelp-abusefilterunblockautopromote-example-1": "Remove the block on 
[[User:Example]]'s autopromotion",
+       "apihelp-query+abusefilters-description": "Show details of the abuse 
filters.",
+       "apihelp-query+abusefilters-param-startid": "The filter ID to start 
enumerating from.",
+       "apihelp-query+abusefilters-param-endid": "The filter ID to stop 
enumerating at.",
+       "apihelp-query+abusefilters-param-show": "Show only filters which meet 
these criteria.",
+       "apihelp-query+abusefilters-param-limit": "The maximum number of 
filters to list.",
+       "apihelp-query+abusefilters-param-prop": "Which properties to get.",
+       "apihelp-query+abusefilters-example-1": "List enabled public filters",
+       "apihelp-query+abusefilters-example-2": "Show some details about 
filters",
+       "apihelp-query+abuselog-description": "Show events that were caught by 
one of the abuse filters.",
+       "apihelp-query+abuselog-param-start": "The timestamp to start 
enumerating from.",
+       "apihelp-query+abuselog-param-end": "The timestamp to stop enumerating 
at.",
+       "apihelp-query+abuselog-param-user": "Show only entries done by a given 
user or IP address.",
+       "apihelp-query+abuselog-param-title": "Show only entries occurring on a 
given page.",
+       "apihelp-query+abuselog-param-filter": "Show only entries that were 
caught by a given filter ID.",
+       "apihelp-query+abuselog-param-limit": "The maximum amount of entries to 
list.",
+       "apihelp-query+abuselog-param-prop": "Which properties to get.",
+       "apihelp-query+abuselog-example-1": "Show recent log entries",
+       "apihelp-query+abuselog-example-2": "Show recent log entries for 
[[API]]"
 }
diff --git a/i18n/qqq.json b/i18n/qqq.json
index ba17e01..3a2680c 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -368,5 +368,39 @@
        "abusefilter-import-intro": "{{doc-important|Do not translate 
<code><nowiki>{{int:abusefilter-edit-export}}</nowiki></code>, 
<code><nowiki>{{int:abusefilter-tools-subtitle}}</nowiki></code>, and 
<code><nowiki>{{int:abusefilter-import-submit}}</nowiki></code> unless you 
absolute must substitute any of them.}}\n\nRefers to:\n* 
{{msg-mw|Abusefilter-edit-export}}\n* {{msg-mw|Abusefilter-edit-tools}}\n* 
{{msg-mw|Abusefilter-import-submit}}",
        "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-http-error": "Error message for HTTP requests. 
Parameters:\n* $1 - HTTP response code.",
+       "apihelp-abusefiltercheckmatch-description": 
"{{doc-apihelp-description|abusefiltercheckmatch}}",
+       "apihelp-abusefiltercheckmatch-param-filter": 
"{{doc-apihelp-param|abusefiltercheckmatch|filter}}",
+       "apihelp-abusefiltercheckmatch-param-vars": 
"{{doc-apihelp-param|abusefiltercheckmatch|vars}}",
+       "apihelp-abusefiltercheckmatch-param-rcid": 
"{{doc-apihelp-param|abusefiltercheckmatch|rcid}}",
+       "apihelp-abusefiltercheckmatch-param-logid": 
"{{doc-apihelp-param|abusefiltercheckmatch|logid}}",
+       "apihelp-abusefiltercheckmatch-example-1": 
"{{doc-apihelp-example|abusefiltercheckmatch}}",
+       "apihelp-abusefilterchecksyntax-description": 
"{{doc-apihelp-description|abusefilterchecksyntax}}",
+       "apihelp-abusefilterchecksyntax-param-filter": 
"{{doc-apihelp-param|abusefilterchecksyntax|filter}}",
+       "apihelp-abusefilterchecksyntax-example-1": 
"{{doc-apihelp-example|abusefilterchecksyntax}}",
+       "apihelp-abusefilterchecksyntax-example-2": 
"{{doc-apihelp-example|abusefilterchecksyntax}}",
+       "apihelp-abusefilterevalexpression-description": 
"{{doc-apihelp-description|abusefilterevalexpression}}",
+       "apihelp-abusefilterevalexpression-param-expression": 
"{{doc-apihelp-param|abusefilterevalexpression|expression}}",
+       "apihelp-abusefilterevalexpression-example-1": 
"{{doc-apihelp-example|abusefilterevalexpression}}",
+       "apihelp-abusefilterunblockautopromote-description": 
"{{doc-apihelp-description|abusefilterunblockautopromote}}",
+       "apihelp-abusefilterunblockautopromote-param-user": 
"{{doc-apihelp-param|abusefilterunblockautopromote|user}}",
+       "apihelp-abusefilterunblockautopromote-example-1": 
"{{doc-apihelp-example|abusefilterunblockautopromote}}",
+       "apihelp-query+abusefilters-description": 
"{{doc-apihelp-description|query+abusefilters}}",
+       "apihelp-query+abusefilters-param-startid": 
"{{doc-apihelp-param|query+abusefilters|startid}}",
+       "apihelp-query+abusefilters-param-endid": 
"{{doc-apihelp-param|query+abusefilters|endid}}",
+       "apihelp-query+abusefilters-param-show": 
"{{doc-apihelp-param|query+abusefilters|show}}",
+       "apihelp-query+abusefilters-param-limit": 
"{{doc-apihelp-param|query+abusefilters|limit}}",
+       "apihelp-query+abusefilters-param-prop": 
"{{doc-apihelp-param|query+abusefilters|prop}}",
+       "apihelp-query+abusefilters-example-1": 
"{{doc-apihelp-example|query+abusefilters}}",
+       "apihelp-query+abusefilters-example-2": 
"{{doc-apihelp-example|query+abusefilters}}",
+       "apihelp-query+abuselog-description": 
"{{doc-apihelp-description|query+abuselog}}",
+       "apihelp-query+abuselog-param-start": 
"{{doc-apihelp-param|query+abuselog|start}}",
+       "apihelp-query+abuselog-param-end": 
"{{doc-apihelp-param|query+abuselog|end}}",
+       "apihelp-query+abuselog-param-user": 
"{{doc-apihelp-param|query+abuselog|user}}",
+       "apihelp-query+abuselog-param-title": 
"{{doc-apihelp-param|query+abuselog|title}}",
+       "apihelp-query+abuselog-param-filter": 
"{{doc-apihelp-param|query+abuselog|filter}}",
+       "apihelp-query+abuselog-param-limit": 
"{{doc-apihelp-param|query+abuselog|limit}}",
+       "apihelp-query+abuselog-param-prop": 
"{{doc-apihelp-param|query+abuselog|prop}}",
+       "apihelp-query+abuselog-example-1": 
"{{doc-apihelp-example|query+abuselog}}",
+       "apihelp-query+abuselog-example-2": 
"{{doc-apihelp-example|query+abuselog}}"
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/169801
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I67395aff48185f3e09da31b51a08aa2541fe6a17
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/AbuseFilter
Gerrit-Branch: master
Gerrit-Owner: Anomie <[email protected]>
Gerrit-Reviewer: Anomie <[email protected]>
Gerrit-Reviewer: Hoo man <[email protected]>
Gerrit-Reviewer: Jackmcbarn <[email protected]>
Gerrit-Reviewer: Jforrester <[email protected]>
Gerrit-Reviewer: Legoktm <[email protected]>
Gerrit-Reviewer: Se4598 <[email protected]>
Gerrit-Reviewer: Siebrand <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to