summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha
diff options
context:
space:
mode:
authorYaco <franco@reevo.org>2020-06-04 11:01:00 -0300
committerYaco <franco@reevo.org>2020-06-04 11:01:00 -0300
commitfc7369835258467bf97eb64f184b93691f9a9fd5 (patch)
treedaabd60089d2dd76d9f5fb416b005fbe159c799d /www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha
first commit
Diffstat (limited to 'www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha')
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/HTMLReCaptchaNoCaptchaField.php74
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.class.php247
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.php14
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptchaAuthenticationRequest.php30
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/extension.json20
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ast.json16
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ba.json10
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ca.json8
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/cs.json16
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/de.json16
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/en.json14
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/es.json14
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/fr.json19
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/gl.json16
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ht.json9
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/hu.json16
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ia.json16
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/it.json14
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ja.json12
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ko.json16
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lb.json8
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lij.json16
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lt.json16
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/mk.json16
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/nb.json16
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pl.json13
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pt-br.json16
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pt.json18
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/qqq.json16
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ru.json14
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/sv.json18
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/uk.json17
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/zh-hans.json16
-rw-r--r--www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/zh-hant.json17
34 files changed, 814 insertions, 0 deletions
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/HTMLReCaptchaNoCaptchaField.php b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/HTMLReCaptchaNoCaptchaField.php
new file mode 100644
index 00000000..e1a39a60
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/HTMLReCaptchaNoCaptchaField.php
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * Creates a ReCaptcha v2 widget. Does not return any data; handling the data submitted by the
+ * widget is callers' responsibility.
+ */
+class HTMLReCaptchaNoCaptchaField extends HTMLFormField {
+ /** @var string Public key parameter to be passed to ReCaptcha. */
+ protected $key;
+
+ /** @var string Error returned by ReCaptcha in the previous round. */
+ protected $error;
+
+ /**
+ * Parameters:
+ * - key: (string, required) ReCaptcha public key
+ * - error: (string) ReCaptcha error from previous round
+ * @param array $params
+ */
+ public function __construct( array $params ) {
+ $params += [ 'error' => null ];
+ parent::__construct( $params );
+
+ $this->key = $params['key'];
+ $this->error = $params['error'];
+
+ $this->mName = 'g-recaptcha-response';
+ }
+
+ public function getInputHTML( $value ) {
+ $out = $this->mParent->getOutput();
+ $lang = htmlspecialchars( urlencode( $this->mParent->getLanguage()->getCode() ) );
+
+ // Insert reCAPTCHA script, in display language, if available.
+ // Language falls back to the browser's display language.
+ // See https://developers.google.com/recaptcha/docs/faq
+ $out->addHeadItem(
+ 'g-recaptchascript',
+ "<script src=\"https://www.google.com/recaptcha/api.js?hl={$lang}\" async defer></script>"
+ );
+ $output = Html::element( 'div', [
+ 'class' => [
+ 'g-recaptcha',
+ 'mw-confirmedit-captcha-fail' => !!$this->error,
+ ],
+ 'data-sitekey' => $this->key,
+ ] );
+ $htmlUrlencoded = htmlspecialchars( urlencode( $this->key ) );
+ $output .= <<<HTML
+<noscript>
+ <div>
+ <div style="width: 302px; height: 422px; position: relative;">
+ <div style="width: 302px; height: 422px; position: absolute;">
+ <iframe src="https://www.google.com/recaptcha/api/fallback?k={$htmlUrlencoded}&hl={$lang}"
+ frameborder="0" scrolling="no"
+ style="width: 302px; height:422px; border-style: none;">
+ </iframe>
+ </div>
+ </div>
+ <div style="width: 300px; height: 60px; border-style: none;
+ bottom: 12px; left: 25px; margin: 0px; padding: 0px; right: 25px;
+ background: #f9f9f9; border: 1px solid #c1c1c1; border-radius: 3px;">
+ <textarea id="g-recaptcha-response" name="g-recaptcha-response"
+ class="g-recaptcha-response"
+ style="width: 250px; height: 40px; border: 1px solid #c1c1c1;
+ margin: 10px 25px; padding: 0px; resize: none;" >
+ </textarea>
+ </div>
+ </div>
+</noscript>
+HTML;
+ return $output;
+ }
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.class.php b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.class.php
new file mode 100644
index 00000000..19aa1093
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.class.php
@@ -0,0 +1,247 @@
+<?php
+
+use MediaWiki\Auth\AuthenticationRequest;
+
+class ReCaptchaNoCaptcha extends SimpleCaptcha {
+ // used for renocaptcha-edit, renocaptcha-addurl, renocaptcha-badlogin, renocaptcha-createaccount,
+ // renocaptcha-create, renocaptcha-sendemail via getMessage()
+ protected static $messagePrefix = 'renocaptcha-';
+
+ private $error = null;
+ /**
+ * Get the captcha form.
+ * @param int $tabIndex
+ * @return array
+ */
+ function getFormInformation( $tabIndex = 1 ) {
+ global $wgReCaptchaSiteKey, $wgLang;
+ $lang = htmlspecialchars( urlencode( $wgLang->getCode() ) );
+
+ $output = Html::element( 'div', [
+ 'class' => [
+ 'g-recaptcha',
+ 'mw-confirmedit-captcha-fail' => !!$this->error,
+ ],
+ 'data-sitekey' => $wgReCaptchaSiteKey
+ ] );
+ $htmlUrlencoded = htmlspecialchars( urlencode( $wgReCaptchaSiteKey ) );
+ $output .= <<<HTML
+<noscript>
+ <div>
+ <div style="width: 302px; height: 422px; position: relative;">
+ <div style="width: 302px; height: 422px; position: absolute;">
+ <iframe src="https://www.google.com/recaptcha/api/fallback?k={$htmlUrlencoded}&hl={$lang}"
+ frameborder="0" scrolling="no"
+ style="width: 302px; height:422px; border-style: none;">
+ </iframe>
+ </div>
+ </div>
+ <div style="width: 300px; height: 60px; border-style: none;
+ bottom: 12px; left: 25px; margin: 0px; padding: 0px; right: 25px;
+ background: #f9f9f9; border: 1px solid #c1c1c1; border-radius: 3px;">
+ <textarea id="g-recaptcha-response" name="g-recaptcha-response"
+ class="g-recaptcha-response"
+ style="width: 250px; height: 40px; border: 1px solid #c1c1c1;
+ margin: 10px 25px; padding: 0px; resize: none;" >
+ </textarea>
+ </div>
+ </div>
+</noscript>
+HTML;
+ return [
+ 'html' => $output,
+ 'headitems' => [
+ // Insert reCAPTCHA script, in display language, if available.
+ // Language falls back to the browser's display language.
+ // See https://developers.google.com/recaptcha/docs/faq
+ "<script src=\"https://www.google.com/recaptcha/api.js?hl={$lang}\" async defer></script>"
+ ]
+ ];
+ }
+
+ /**
+ * @param Status|array|string $info
+ */
+ protected function logCheckError( $info ) {
+ if ( $info instanceof Status ) {
+ $errors = $info->getErrorsArray();
+ $error = $errors[0][0];
+ } elseif ( is_array( $info ) ) {
+ $error = implode( ',', $info );
+ } else {
+ $error = $info;
+ }
+
+ wfDebugLog( 'captcha', 'Unable to validate response: ' . $error );
+ }
+
+ /**
+ * @param WebRequest $request
+ * @return array
+ */
+ protected function getCaptchaParamsFromRequest( WebRequest $request ) {
+ $index = 'not used'; // ReCaptchaNoCaptcha combines captcha ID + solution into a single value
+ // API is hardwired to return captchaWord, so use that if the standard isempty
+ $response = $request->getVal( 'g-recaptcha-response', $request->getVal( 'captchaWord' ) );
+ return [ $index, $response ];
+ }
+
+ /**
+ * Check, if the user solved the captcha.
+ *
+ * Based on reference implementation:
+ * https://github.com/google/recaptcha#php
+ *
+ * @param mixed $_ Not used (ReCaptcha v2 puts index and solution in a single string)
+ * @param string $word captcha solution
+ * @return bool
+ */
+ function passCaptcha( $_, $word ) {
+ global $wgRequest, $wgReCaptchaSecretKey, $wgReCaptchaSendRemoteIP;
+
+ $url = 'https://www.google.com/recaptcha/api/siteverify';
+ // Build data to append to request
+ $data = [
+ 'secret' => $wgReCaptchaSecretKey,
+ 'response' => $word,
+ ];
+ if ( $wgReCaptchaSendRemoteIP ) {
+ $data['remoteip'] = $wgRequest->getIP();
+ }
+ $url = wfAppendQuery( $url, $data );
+ $request = MWHttpRequest::factory( $url, [ 'method' => 'GET' ] );
+ $status = $request->execute();
+ if ( !$status->isOK() ) {
+ $this->error = 'http';
+ $this->logCheckError( $status );
+ return false;
+ }
+ $response = FormatJson::decode( $request->getContent(), true );
+ if ( !$response ) {
+ $this->error = 'json';
+ $this->logCheckError( $this->error );
+ return false;
+ }
+ if ( isset( $response['error-codes'] ) ) {
+ $this->error = 'recaptcha-api';
+ $this->logCheckError( $response['error-codes'] );
+ return false;
+ }
+
+ return $response['success'];
+ }
+
+ /**
+ * @param array &$resultArr
+ */
+ function addCaptchaAPI( &$resultArr ) {
+ $resultArr['captcha'] = $this->describeCaptchaType();
+ $resultArr['captcha']['error'] = $this->error;
+ }
+
+ /**
+ * @return array
+ */
+ public function describeCaptchaType() {
+ global $wgReCaptchaSiteKey;
+ return [
+ 'type' => 'recaptchanocaptcha',
+ 'mime' => 'image/png',
+ 'key' => $wgReCaptchaSiteKey,
+ ];
+ }
+
+ /**
+ * Show a message asking the user to enter a captcha on edit
+ * The result will be treated as wiki text
+ *
+ * @param string $action Action being performed
+ * @return string Wikitext
+ */
+ public function getMessage( $action ) {
+ $msg = parent::getMessage( $action );
+ if ( $this->error ) {
+ $msg = new RawMessage( '<div class="error">$1</div>', [ $msg ] );
+ }
+ return $msg;
+ }
+
+ /**
+ * @param ApiBase &$module
+ * @param array &$params
+ * @param int $flags
+ * @return bool
+ */
+ public function APIGetAllowedParams( &$module, &$params, $flags ) {
+ if ( $flags && $this->isAPICaptchaModule( $module ) ) {
+ $params['g-recaptcha-response'] = [
+ ApiBase::PARAM_HELP_MSG => 'renocaptcha-apihelp-param-g-recaptcha-response',
+ ];
+ }
+
+ return true;
+ }
+
+ public function getError() {
+ return $this->error;
+ }
+
+ public function storeCaptcha( $info ) {
+ // ReCaptcha is stored by Google; the ID will be generated at that time as well, and
+ // the one returned here won't be used. Just pretend this worked.
+ return 'not used';
+ }
+
+ public function retrieveCaptcha( $index ) {
+ // just pretend it worked
+ return [ 'index' => $index ];
+ }
+
+ public function getCaptcha() {
+ // ReCaptcha is handled by frontend code + an external provider; nothing to do here.
+ return [];
+ }
+
+ /**
+ * @param array $captchaData
+ * @param string $id
+ * @return Message
+ */
+ public function getCaptchaInfo( $captchaData, $id ) {
+ return wfMessage( 'renocaptcha-info' );
+ }
+
+ /**
+ * @return ReCaptchaNoCaptchaAuthenticationRequest
+ */
+ public function createAuthenticationRequest() {
+ return new ReCaptchaNoCaptchaAuthenticationRequest();
+ }
+
+ /**
+ * @param array $requests
+ * @param array $fieldInfo
+ * @param array &$formDescriptor
+ * @param string $action
+ */
+ public function onAuthChangeFormFields(
+ array $requests, array $fieldInfo, array &$formDescriptor, $action
+ ) {
+ global $wgReCaptchaSiteKey;
+
+ $req = AuthenticationRequest::getRequestByClass( $requests,
+ CaptchaAuthenticationRequest::class, true );
+ if ( !$req ) {
+ return;
+ }
+
+ // ugly way to retrieve error information
+ $captcha = ConfirmEditHooks::getInstance();
+
+ $formDescriptor['captchaWord'] = [
+ 'class' => HTMLReCaptchaNoCaptchaField::class,
+ 'key' => $wgReCaptchaSiteKey,
+ 'error' => $captcha->getError(),
+ ] + $formDescriptor['captchaWord'];
+ }
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.php b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.php
new file mode 100644
index 00000000..9654dee8
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.php
@@ -0,0 +1,14 @@
+<?php
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'ConfirmEdit/ReCaptchaNoCaptcha' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['ReCaptchaNoCaptcha'] = __DIR__ . '/i18n';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for ReCaptchaNoCaptcha extension. ' .
+ 'Please use wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for more details.'
+ ); */
+ return;
+} else {
+ die( 'This version of the ReCaptchaNoCaptcha extension requires MediaWiki 1.25+' );
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptchaAuthenticationRequest.php b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptchaAuthenticationRequest.php
new file mode 100644
index 00000000..01b845dd
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptchaAuthenticationRequest.php
@@ -0,0 +1,30 @@
+<?php
+
+use MediaWiki\Auth\AuthenticationRequest;
+
+/**
+ * Authentication request for ReCaptcha v2. Unlike the parent class, no session storage is used
+ * and there is no ID; Google provides a single proof string after successfully solving a captcha.
+ */
+class ReCaptchaNoCaptchaAuthenticationRequest extends CaptchaAuthenticationRequest {
+ public function __construct() {
+ parent::__construct( null, null );
+ }
+
+ public function loadFromSubmission( array $data ) {
+ // unhack the hack in parent
+ return AuthenticationRequest::loadFromSubmission( $data );
+ }
+
+ public function getFieldInfo() {
+ $fieldInfo = parent::getFieldInfo();
+
+ return [
+ 'captchaWord' => [
+ 'type' => 'string',
+ 'label' => $fieldInfo['captchaInfo']['label'],
+ 'help' => wfMessage( 'renocaptcha-help' ),
+ ],
+ ];
+ }
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/extension.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/extension.json
new file mode 100644
index 00000000..23bbf5ac
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/extension.json
@@ -0,0 +1,20 @@
+{
+ "name": "ReCaptchaNoCaptcha",
+ "MessagesDirs": {
+ "ReCaptchaNoCaptcha": [
+ "i18n"
+ ]
+ },
+ "AutoloadClasses": {
+ "ReCaptchaNoCaptcha": "ReCaptchaNoCaptcha.class.php",
+ "HTMLReCaptchaNoCaptchaField": "HTMLReCaptchaNoCaptchaField.php",
+ "ReCaptchaNoCaptchaAuthenticationRequest": "ReCaptchaNoCaptchaAuthenticationRequest.php"
+ },
+ "config": {
+ "CaptchaClass": "ReCaptchaNoCaptcha",
+ "ReCaptchaSiteKey": "",
+ "ReCaptchaSecretKey": "",
+ "ReCaptchaSendRemoteIP": false
+ },
+ "manifest_version": 1
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ast.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ast.json
new file mode 100644
index 00000000..d5bc558b
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ast.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xuacu"
+ ]
+ },
+ "renocaptcha-edit": "Pa protexer la wiki escontra'l spam d'ediciones automatizáu, pidímoste que resuelvas el siguiente CAPTCHA:",
+ "renocaptcha-addurl": "La to edición incluye enllaces esternos nuevos. Pa protexer la wiki escontra'l spam automáticu, pidímoste que resuelvas el siguiente CAPTCHA:",
+ "renocaptcha-badlogin": "Para protexer la wiki escontra'l frayamientu automáticu de contraseñes, pidímoste amablemente que resuelvas el siguiente CAPTCHA:",
+ "renocaptcha-createaccount": "Pa protexer la wiki escontra la creación de cuentes automatizada, pidímoste que resuelvas el siguiente CAPTCHA:",
+ "renocaptcha-createaccount-fail": "Paez que nun resolvisti'l CAPTCHA.",
+ "renocaptcha-create": "Pa protexer la wiki escontra la creación de páxines automatizada, pidímoste que resuelvas el siguiente CAPTCHA:",
+ "renocaptcha-noscript": "Por desgracia desactivasti JavaScript, polo que nun podemos reconocer automáticamente si yes humanu o non. Resuelve'l CAPTCHA de más arriba y copia'l testu resultante nel siguiente cuadru de testu:",
+ "renocaptcha-help": "Por favor, resuelve l'enigma ReCaptcha NoCaptcha y devuelve los valores de respuesta como captchaWord.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Campu del widget ReCaptcha."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ba.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ba.json
new file mode 100644
index 00000000..95748bf3
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ba.json
@@ -0,0 +1,10 @@
+{
+ "@metadata": {
+ "authors": [
+ "Азат Хәлилов",
+ "Айбикә"
+ ]
+ },
+ "renocaptcha-createaccount-fail": "Һеҙ CAPTCHA -ны сисә алманығыҙ",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "ReCaptcha виджеты майҙаны"
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ca.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ca.json
new file mode 100644
index 00000000..aa4e8704
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ca.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "QuimGil"
+ ]
+ },
+ "renocaptcha-createaccount": "Per a protegir el wiki contra la creació automatitzada de comptes, us demanem que resolgueu la següent CAPTCHA:"
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/cs.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/cs.json
new file mode 100644
index 00000000..ee5fca6f
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/cs.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Mormegil"
+ ]
+ },
+ "renocaptcha-edit": "V zájmu ochrany této wiki před automatickým spamováním vás prosíme o vyřešení následujícího testu CAPTCHA:",
+ "renocaptcha-addurl": "Vaše editace obsahuje nové externí odkazy. V zájmu ochrany této wiki před automatickým spamováním vás prosíme o vyřešení následujícího testu CAPTCHA:",
+ "renocaptcha-badlogin": "V zájmu ochrany této wiki proti automatickým pokusům uhodnout heslo vás prosíme o vyřešení následujícího testu CAPTCHA:",
+ "renocaptcha-createaccount": "V zájmu ochrany této wiki před automatickým vytvářením účtů vás prosíme o vyřešení následujícího testu CAPTCHA:",
+ "renocaptcha-createaccount-fail": "Vypadá to, že jste nevyřešili test CAPTCHA.",
+ "renocaptcha-create": "V zájmu ochrany před automatickým zakládáním stránek vás prosíme o vyřešení následujícího testu CAPTCHA:",
+ "renocaptcha-noscript": "Bohužel máte vypnutý JavaScript, takže nedokážeme automaticky rozpoznat, jestli jste člověk nebo ne. Vyřešte prosím výše zobrazený test CAPTCHA a výsledný text zkopírujte do následujícího pole:",
+ "renocaptcha-help": "Vyřešte výzvu ReCaptcha NoCaptcha a vraťte hodnotu odpovědi jako captchaWord.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Pole z widgetu ReCaptcha."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/de.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/de.json
new file mode 100644
index 00000000..b4cfc1bc
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/de.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Metalhead64"
+ ]
+ },
+ "renocaptcha-edit": "Um das Wiki vor automatisiertem Bearbeitungsspam zu schützen, bitten wir dich, das folgende CAPTCHA zu lösen:",
+ "renocaptcha-addurl": "Deine Bearbeitung enthält neue Weblinks. Um das Wiki vor automatisiertem Spam zu schützen, bitten wir dich, das folgende CAPTCHA zu lösen:",
+ "renocaptcha-badlogin": "Um das Wiki vor automatisiertem Knacken des Passwortes zu schützen, bitten wir dich, das folgende CAPTCHA zu lösen:",
+ "renocaptcha-createaccount": "Um das Wiki vor automatisiertem Spam zu schützen, bitten wir dich, das folgende CAPTCHA zu lösen:",
+ "renocaptcha-createaccount-fail": "Es scheint, als ob du das CAPTCHA nicht gelöst hast.",
+ "renocaptcha-create": "Um das Wiki vor automatisierter Seitenerstellung zu schützen, bitten wir dich, das folgende CAPTCHA zu lösen:",
+ "renocaptcha-noscript": "Da du leider JavaScript deaktiviert hast, konnten wir nicht feststellen, ob du ein Mensch bist oder nicht. Bitte löse das obige CAPTCHA und kopiere den resultierenden Text in das folgende Textfeld:",
+ "renocaptcha-help": "Bitte löse eine ReCaptcha-NoCaptcha-Herausforderung und gib den Antwortwert als captchaWord zurück.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Feld von dem ReCaptcha-Widget."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/en.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/en.json
new file mode 100644
index 00000000..68a57e82
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/en.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": []
+ },
+ "renocaptcha-edit": "To protect the wiki against automated edit spam, we kindly ask you to solve the following CAPTCHA:",
+ "renocaptcha-addurl": "Your edit includes new external links. To protect the wiki against automated spam, we kindly ask you to solve the following CAPTCHA:",
+ "renocaptcha-badlogin": "To protect the wiki against automated password cracking, we kindly ask you to solve the following CAPTCHA:",
+ "renocaptcha-createaccount": "To protect the wiki against automated account creation, we kindly ask you to solve the following CAPTCHA:",
+ "renocaptcha-createaccount-fail": "It seems you haven't solved the CAPTCHA.",
+ "renocaptcha-create": "To protect the wiki against automated page creation, we kindly ask you to solve the following CAPTCHA:",
+ "renocaptcha-noscript": "Unhappily you have disabled JavaScript, so we can't recognize automatically, if you're a human or not. Please solve the CAPTCHA above and copy the resulting text into the following textarea:",
+ "renocaptcha-help": "Please solve a ReCaptcha NoCaptcha challenge and return the response value as captchaWord.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Field from the ReCaptcha widget."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/es.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/es.json
new file mode 100644
index 00000000..c0ff07d7
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/es.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Macofe"
+ ]
+ },
+ "renocaptcha-edit": "Para proteger el wiki contra el spam automatizado, te pedimos que resuelvas el siguiente CAPTCHA:",
+ "renocaptcha-addurl": "Tu edición incluye enlaces externos nuevos. Para proteger el wiki contra el spam automatizado, te pedimos que resuelvas el siguiente CAPTCHA:",
+ "renocaptcha-badlogin": "Para proteger el wiki contra el descifrado automatizado de contraseñas, te pedimos que resuelvas el siguiente CAPTCHA:",
+ "renocaptcha-createaccount": "Para proteger el wiki contra la creación automatizada de cuentas, te pedimos que resuelvas el siguiente CAPTCHA:",
+ "renocaptcha-createaccount-fail": "Parece que no has resuelto el CAPTCHA.",
+ "renocaptcha-create": "Para proteger el wiki contra la creación automatizada de páginas, te pedimos que resuelvas el siguiente CAPTCHA:",
+ "renocaptcha-noscript": "Por desgracia has desactivado JavaScript, por lo que no se puede reconocer automáticamente, si eres un humano o no. Resuelve el CAPTCHA de arriba y copia el texto resultante en el siguiente cuadro:"
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/fr.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/fr.json
new file mode 100644
index 00000000..b3ba902e
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/fr.json
@@ -0,0 +1,19 @@
+{
+ "@metadata": {
+ "authors": [
+ "Wladek92",
+ "Orlodrim",
+ "Gomoko",
+ "Urhixidur"
+ ]
+ },
+ "renocaptcha-edit": "Pour protéger le wiki contre les pourriels de modification automatique, nous vous demandons de bien vouloir résoudre le CAPTCHA suivant :",
+ "renocaptcha-addurl": "Votre édition comprend de nouveaux liens externes. Pour protéger le wiki contre les pourriels automatisés, nous vous demandons de bien vouloir résoudre le CAPTCHA suivant :",
+ "renocaptcha-badlogin": "Pour protéger le wiki contre le craquage automatisé des mots de passe, nous vous prions de bien vouloir résoudre le CAPTCHA suivant :",
+ "renocaptcha-createaccount": "Pour protéger le wiki contre la création automatisée des pages, nous vous prions de bien vouloir résoudre le CAPTCHA suivant:",
+ "renocaptcha-createaccount-fail": "Il semble que vous n'ayiez pas résolu le CAPTCHA.",
+ "renocaptcha-create": "Pour protéger le wiki contre la création automatisée de pages, nous vous prions de bien vouloir résoudre le CAPTCHA suivant:",
+ "renocaptcha-noscript": "Malheureusement, vous avez désactivé JavaScript, donc nous ne pouvons pas reconnaître automatiquement, si vous êtes un humain ou pas. Veuillez résoudre le CAPTCHA ci-dessus et copiez le texte qui en résulte dans la zone de texte suivante :",
+ "renocaptcha-help": "Veuillez résoudre un défi ReCaptcha NoCaptcha et renvoyer la valeur de la réponse comme captchaWord.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Champ du formulaire ReCaptcha."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/gl.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/gl.json
new file mode 100644
index 00000000..84b0d397
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/gl.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Elisardojm"
+ ]
+ },
+ "renocaptcha-edit": "Para protexer a wiki contra edicións de spam automatizadas, por iso pedímoslle amablemente que resolva o seguinte CAPTCHA:",
+ "renocaptcha-addurl": "A súa edición inclúe novas ligazóns externas. Para protexer a wiki contra o spam automático, pedímoslle amablemente que resolva o seguinte CAPTCHA:",
+ "renocaptcha-badlogin": "Para protexer a wiki contra a ruptura automática de contrasinais, pedímoslle amablemente que resolva o seguinte CAPTCHA:",
+ "renocaptcha-createaccount": "Para protexer a wiki contra a creación automática de contas, pedímoslle amablemente que resolva o seguinte CAPTCHA:",
+ "renocaptcha-createaccount-fail": "Parece que non resolveu o CAPTCHA.",
+ "renocaptcha-create": "Para protexer a wiki contra a creación automática de páxinas, pedímoslle amablemente que resolva o seguinte CAPTCHA:",
+ "renocaptcha-noscript": "Desafortunadamente desactivou o JavaScript, polo que non podemos recoñecer automaticamente se vostede é unha persoa ou non. Por favor, resolva o CAPTCHA de arriba e copie o texto coa solución na seguinte área de texto:",
+ "renocaptcha-help": "Por favor, resolva o enigma ReCaptcha NoCaptcha e devolva os valores de resposta como captchaWord.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Campo do formulario ReCaptcha."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ht.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ht.json
new file mode 100644
index 00000000..6ecc8918
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ht.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bfpage"
+ ]
+ },
+ "renocaptcha-createaccount-fail": "Li sanble ou pa te rezoud CAPTCHA la.",
+ "renocaptcha-create": "Pou pwoteje wiki sa a nan paj kreyasyon fè pa yon machin oswa pwogram otomatik ki fonksyone, nou dous mande w yo rezoud CAPTCHA sa a:"
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/hu.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/hu.json
new file mode 100644
index 00000000..7587188b
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/hu.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Tacsipacsi",
+ "Máté"
+ ]
+ },
+ "renocaptcha-edit": "Az automatizált spamek megelőzése miatt kérjük, oldd meg a következő CAPTCHA-t:",
+ "renocaptcha-addurl": "A szerkesztésed új külső hivatkozásokat tartalmaz. Az automatizált spamek megelőzése miatt kérjük, oldd meg a következő CAPTCHA-t:",
+ "renocaptcha-badlogin": "Hogy az automatizált jelszófeltörési kísérleteket megelőzzük, kérjük, oldd meg a következő CAPTCHA-t:",
+ "renocaptcha-createaccount": "A felhasználói fiókok automatizált létrehozásának elkerülésére kérjük, oldd meg a következő CAPTCHA-t:",
+ "renocaptcha-createaccount-fail": "Úgy tűnik, nem oldottad meg a CAPTCHA-t.",
+ "renocaptcha-create": "Az automatizált laplétrehozás megelőzése miatt kérjük, oldd meg a következő CAPTCHA-t:",
+ "renocaptcha-noscript": "Sajnos letiltottad a JavaScriptet, így nem tudjuk automatikusan felismerni, hogy ember vagy-e. Kérjük, oldd meg a fenti CAPTCHA-t, és másold be a megoldást az alábbi szövegmezőbe:",
+ "renocaptcha-help": "Oldd meg a ReCaptcha NoCaptcha-feladatot és küldd vissza a választ captchaWord paraméterként."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ia.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ia.json
new file mode 100644
index 00000000..61ec038d
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ia.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "renocaptcha-edit": "Pro proteger le wiki contra le spam automatisate, per favor, resolve le CAPTCHA sequente:",
+ "renocaptcha-addurl": "Iste modification include nove ligamines externe. Pro proteger le wiki contra le spam automatisate, per favor, resolve le CAPTCHA sequente:",
+ "renocaptcha-badlogin": "Pro proteger le wiki contra le furto automatisate de contrasignos, per favor, resolve le CAPTCHA sequente:",
+ "renocaptcha-createaccount": "Pro proteger le wiki contra le creation automatisate de contos, per favor, resolve le CAPTCHA sequente:",
+ "renocaptcha-createaccount-fail": "Pare que tu non ha resolvite le CAPTCHA.",
+ "renocaptcha-create": "Pro proteger le wiki contra le creation automatisate de paginas, per favor, resolve le CAPTCHA sequente:",
+ "renocaptcha-noscript": "Infelicemente tu ha disactivate JavaScript, dunque nos non pote recognoscer automaticamente si tu es un humano o non. Per favor, resolve le CAPTCHA hic supra e copia le texto resultante in le quadro sequente:",
+ "renocaptcha-help": "Per favor, resolve un defia ReCaptcha NoCaptcha e retorna le valor del responsa como captchaWord.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Campo del formulario ReCaptcha."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/it.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/it.json
new file mode 100644
index 00000000..260f1109
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/it.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Selven",
+ "Beta16"
+ ]
+ },
+ "renocaptcha-edit": "Per proteggere il wiki contro modifiche automatizzate di spam, ti chiediamo gentilmente di risolvere il seguente CAPTCHA:",
+ "renocaptcha-addurl": "La tua modifica aggiunge nuovi collegamenti esterni. Per proteggere il wiki contro modifiche automatizzate di spam, ti chiediamo gentilmente di risolvere il seguente CAPTCHA:",
+ "renocaptcha-badlogin": "Per proteggere il wiki contro tentativi automatizzati di violazione password, ti chiediamo gentilmente di risolvere il seguente CAPTCHA:",
+ "renocaptcha-createaccount": "Per proteggere il wiki contro la creazione automatizzata di utenze, ti chiediamo gentilmente di risolvere il seguente CAPTCHA:",
+ "renocaptcha-createaccount-fail": "Sembra che non hai risolto il CAPTCHA.",
+ "renocaptcha-create": "Per proteggere il wiki contro la creazione automatizzata di pagine, ti chiediamo gentilmente di risolvere il seguente CAPTCHA:"
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ja.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ja.json
new file mode 100644
index 00000000..fcecaaed
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ja.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ayame"
+ ]
+ },
+ "renocaptcha-edit": "Wikiを自動編集スパムから保護するために、下のチェックボックスをクリックしてください。",
+ "renocaptcha-addurl": "あなたは新しい外部リンクを追加しました。Wikiを自動投稿スパムから保護するために、下のチェックボックスをクリックしてください。",
+ "renocaptcha-badlogin": "あなたのアカウントを攻撃から保護するために、下のチェックボックスをクリックしてください。",
+ "renocaptcha-createaccount": "Wikiをアカウント自動作成から保護するために、下のチェックボックスをクリックしてください。",
+ "renocaptcha-create": "Wikiを記事の自動作成から保護するために、下のチェックボックスをクリックしてください。"
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ko.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ko.json
new file mode 100644
index 00000000..ac1bdc32
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ko.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hwangjy9",
+ "Yearning",
+ "아라"
+ ]
+ },
+ "renocaptcha-edit": "자동 편집 스팸으로부터 위키를 보호하기 위해, 다음 CAPTCHA를 풀어주세요:",
+ "renocaptcha-addurl": "편집에 새로운 바깥 고리가 포함되어 있습니다. 자동 스팸으로부터 위키를 보호하기 위해, 다음 CAPTCHA를 풀어주세요:",
+ "renocaptcha-badlogin": "자동화된 비밀번호 깨기로부터 위키를 보호하기 위해, 다음 CAPTCHA를 풀어주세요:",
+ "renocaptcha-createaccount": "자동 계정 만들기로부터 위키를 보호하기 위해, 다음 CAPTCHA를 풀어주세요:",
+ "renocaptcha-createaccount-fail": "보안문자가 틀렸습니다.",
+ "renocaptcha-create": "자동 문서 만들기로부터 위키를 보호하기 위해, 다음 CAPTCHA를 풀어주세요:",
+ "renocaptcha-noscript": "당신은 자바스크립트를 비활성화하여 저희는 당신이 사람인지 자동으로 판별하지 못합니다. 다음 글상자에 위 보안문자를 입력하세요:"
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lb.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lb.json
new file mode 100644
index 00000000..09884e6e
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Robby"
+ ]
+ },
+ "renocaptcha-createaccount-fail": "Et schéngt wéi wann Dir de CAPTCHA net geléist hätt."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lij.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lij.json
new file mode 100644
index 00000000..41077744
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lij.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Giromin Cangiaxo"
+ ]
+ },
+ "renocaptcha-edit": "Pe proteze a wiki contra e modiffiche aotomatizæ de spam, te domandemmo gentilmente de resciorve o seguente CAPTCHA:",
+ "renocaptcha-addurl": "A to modiffica a l'azonze di noeuvi inganci esterni. Pe proteze a wiki da-o spam aotomatizou, te domandemmo gentilmente de resciorve o seguente CAPTCHA:",
+ "renocaptcha-badlogin": "Pe proteze a wiki da-a sforçatua aotomatizâ de password, te domandemmo gentilmente de resciorve o seguente CAPTCHA:",
+ "renocaptcha-createaccount": "Pe proteze a wiki da-a creaçion aotomatizâ de noeuve utençe, te domandemmo gentilmente de resciorve o seguente CAPTCHA:",
+ "renocaptcha-createaccount-fail": "Pâ che ti no t'aggi resciorto o CAPTCHA.",
+ "renocaptcha-create": "Pe proteze a wiki da-a creaçion aotomatizâ de paggine, te domandemmo gentilmente de resciorve o seguente CAPTCHA:",
+ "renocaptcha-noscript": "Purtroppo t'hæ disattivou o JavaScript e no poemo riconosce aotomaticamente se t'ê uman o no. Pe piaxei resciorvi o CAPTCHA chì de d'ato e coppia o scrito risultante inta casella chì aproeuvo.",
+ "renocaptcha-help": "Pe piaxei resciorvi a sfidda ReCaptcha NoCaptcha e riporta o valô de risposta comme captchaWord.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Campo da-o widget ReCaptcha."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lt.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lt.json
new file mode 100644
index 00000000..5cb7fe4c
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lt.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eitvys200"
+ ]
+ },
+ "renocaptcha-edit": "Kad apsaugotume vikį nuo automatinio keitimų šlamšto, prašome išspręsti šį CAPTCHA:",
+ "renocaptcha-addurl": "Jūsų keitime yra naujų išorinių nuorodų. Kad apsaugotume vikį nuo automatinio šlamšto, prašome išspręsti šį CAPTCHA:",
+ "renocaptcha-badlogin": "Kad apsaugotume vikį nuo automatinio slaptažodžių spėjimo, prašome išspręsti šį CAPTCHA:",
+ "renocaptcha-createaccount": "Kad apsaugotume vikį nuo automatinio paskyrų kūrimo, prašome išspręsti šį CAPTCHA:",
+ "renocaptcha-createaccount-fail": "Atrodo, kad jūs neišsprendėte CAPTCHA.",
+ "renocaptcha-create": "Kad apsaugotume vikį nuo automatinio puslapių kūrimo, prašome išspręsti šį CAPTCHA:",
+ "renocaptcha-noscript": "Deja, jūs išjungėte JavaScript, todėl negalime automatiškai atpažinti ar esate žmogus ar ne. Prašome išspręsti CAPTCHA, esantį aukščiau, ir nukopijuoti atsiradusį tekstą į šį teksto lauką:",
+ "renocaptcha-help": "Prašome išspręsti ReCaptcha NoCaptcha iššūkį ir gražinti atsakymo reikšmę kaip captchaWord.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Laukas iš ReCaptcha valdiklio."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/mk.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/mk.json
new file mode 100644
index 00000000..ed14aec4
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/mk.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06"
+ ]
+ },
+ "renocaptcha-edit": "Со цел да го заштитиме викито од автоматизирани спам-уредувања, би ве замолиле да го решите прикажаното на сликичката:",
+ "renocaptcha-addurl": "Во уредувањето имате ставено нови надворешни врски. Со цел да го заштитиме викито од автоматизиран спам, би ве замолиле да го решите прикажаното на сликичката:",
+ "renocaptcha-badlogin": "Со цел да го заштитиме викито од автоматизирано пробивање на лозинки, би ве замолиле да го решите прикажаното на сликичката:",
+ "renocaptcha-createaccount": "Со цел да го заштитиме викито од автоматизирано создавање на сметки, би ве замолиле да го решите прикажаното на сликичката:",
+ "renocaptcha-createaccount-fail": "Го немате решено прикажаното на сликичката.",
+ "renocaptcha-create": "Со цел да го заштитиме викито од автоматизирано создавање на страници, би ве замолиле да го решите прикажаното на сликичката:",
+ "renocaptcha-noscript": "За несреќа, ја имате исклучено JavaScript, па затоа не можеме автоматски да одредиме дали сте човек или не. Решете го прикажаното на сликичката погоре и прекопирајте го добиеното во следново поле:",
+ "renocaptcha-help": "Решете го предизвикот ReCaptcha NoCaptcha и вратете а вреднсота на одговорот како captchaWord.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Поле од поср. елемент ReCaptcha."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/nb.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/nb.json
new file mode 100644
index 00000000..edc7c4af
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/nb.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jon Harald Søby"
+ ]
+ },
+ "renocaptcha-edit": "For å beskytte wikien mot automatisk redigeringsspam ber vi deg å løse følgende CAPTCHA:",
+ "renocaptcha-addurl": "Redigeringen din inneholder nye eksterne lenker. For å beskytte wikien mot automatisk spam ber vi deg løse følgende CAPTCHA:",
+ "renocaptcha-badlogin": "For å beskytte wikien mot automatisk passordknekking ber vi deg løse følgende CAPTCHA:",
+ "renocaptcha-createaccount": "For å beskytte wikien mot automatisk kontooppretting ber vi deg løse følgende CAPTCHA:",
+ "renocaptcha-createaccount-fail": "Det ser ut til at du ikke løste CAPTCHA-en.",
+ "renocaptcha-create": "For å beskytte wikien mot automatisk sideoppretting ber vi deg løse følgende CAPTCHA:",
+ "renocaptcha-noscript": "Du har dessverre slått av JavaScript, så vi kan ikke automatisk oppdage om du er et menneske eller ikke. Løs CAPTCHA-en ovenfor og kopier den resulterende teksten i følgende tekstboks:",
+ "renocaptcha-help": "Løs en ReCaptcha NoCaptcha-oppgave og returner svarverdien som captchaWord.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Felt fra ReCaptcha-widgeten."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pl.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pl.json
new file mode 100644
index 00000000..56263a4a
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pl.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Chrumps"
+ ]
+ },
+ "renocaptcha-edit": "W celu ochrony przed zautomatyzowanym spamem edycyjnym, proszę wpisać poniższy tekst CAPTCHA:",
+ "renocaptcha-addurl": "Wprowadzony przez Ciebie tekst zawiera nowe linki zewnętrzne. W celu ochrony przed zautomatyzowanym spamem, proszę wpisać poniższy tekst CAPTCHA:",
+ "renocaptcha-badlogin": "W celu ochrony przed zautomatyzowanym łamaniem hasła, proszę wpisać poniższy tekst CAPTCHA:",
+ "renocaptcha-createaccount": "W celu ochrony przed zautomatyzowanym utworzeniem konta, proszę wpisać poniższy tekst CAPTCHA:",
+ "renocaptcha-createaccount-fail": "Wydaje się, że CAPTCHA nie został wpisany prawidłowo.",
+ "renocaptcha-create": "W celu ochrony przed zautomatyzowanym utworzeniem strony, proszę wpisać poniższy tekst CAPTCHA:"
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pt-br.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pt-br.json
new file mode 100644
index 00000000..eddee511
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pt-br.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eduardo Addad de Oliveira"
+ ]
+ },
+ "renocaptcha-edit": "Para proteger a wiki contra a edição automatizada de spam, pedimos gentilmente que resolva o seguinte código CAPTCHA:",
+ "renocaptcha-addurl": "A sua edição inclui novas ligações externas. Para proteger a wiki contra o spam automático, pedimos gentilmente que resolva o seguinte código CAPTCHA:",
+ "renocaptcha-badlogin": "Para proteger a wiki da quebra de senha automatizada, pedimos que resolva o seguinte CAPTCHA:",
+ "renocaptcha-createaccount": "Para proteger a wiki contra a criação automatizada de conta, pedimos que resolva o seguinte código CAPTCHA:",
+ "renocaptcha-createaccount-fail": "Parece que não resolveu o código CAPTCHA ainda.",
+ "renocaptcha-create": "Para proteger a wiki contra a criação automatizada de páginas novas, pedimos que resolva o seguinte código CAPTCHA:",
+ "renocaptcha-noscript": "Infelizmente desativou o JavaScript, o que nos impossibilita de reconhecer automaticamente se é um humano ou não. Por favor, resolva o código CAPTCHA abaixo e copie o resultado para o campo de texto seguinte:",
+ "renocaptcha-help": "Resolva um desafio ReCaptcha NoCaptcha e devolva o valor da resposta como captchaWord.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Campo do <i>widget</i> ReCaptcha."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pt.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pt.json
new file mode 100644
index 00000000..862cae31
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pt.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vitorvicentevalente",
+ "Fúlvio",
+ "Hamilton Abreu"
+ ]
+ },
+ "renocaptcha-edit": "Para proteger a wiki contra a edição automatizada de spam, pedimos gentilmente que resolva o seguinte código CAPTCHA:",
+ "renocaptcha-addurl": "A sua edição inclui novas ligações externas. Para proteger a wiki contra o spam automático, pedimos gentilmente que resolva o seguinte código CAPTCHA:",
+ "renocaptcha-badlogin": "Para proteger a wiki da quebra de palavras-passe automatizada, pedimos que resolva o seguinte CAPTCHA:",
+ "renocaptcha-createaccount": "Para proteger a wiki contra a criação automatizada de conta, pedimos que resolva o seguinte código CAPTCHA:",
+ "renocaptcha-createaccount-fail": "Parece que não resolveu o código CAPTCHA ainda.",
+ "renocaptcha-create": "Para proteger a wiki contra a criação automatizada de páginas novas, pedimos que resolva o seguinte código CAPTCHA:",
+ "renocaptcha-noscript": "Infelizmente desativou o JavaScript, o que nos impossibilita de reconhecer automaticamente se é um humano ou não. Por favor, resolva o código CAPTCHA abaixo e copie o resultado para o campo de texto seguinte:",
+ "renocaptcha-help": "Resolva um desafio ReCaptcha NoCaptcha e devolva o valor da resposta como captchaWord.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Campo do <i>widget</i> ReCaptcha."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/qqq.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/qqq.json
new file mode 100644
index 00000000..cf0c6cc0
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/qqq.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liuxinyu970226"
+ ]
+ },
+ "renocaptcha-edit": "Message above the CAPTCHA for edit action.\n{{related|ConfirmEdit-edit}}",
+ "renocaptcha-addurl": "Message above the CAPTCHA for addurl (user added new external links to the page) action.\n{{related|ConfirmEdit-addurl}}",
+ "renocaptcha-badlogin": "Message above the CAPTCHA for badlogin action.\n{{related|ConfirmEdit-badlogin}}",
+ "renocaptcha-createaccount": "Message above the CAPTCHA for createaccount (user creates a new account) action.\n{{related|ConfirmEdit-createaccount}}",
+ "renocaptcha-createaccount-fail": "Error message, when the CAPTCHA isn't solved correctly.\n{{related|ConfirmEdit-createaccount-fail}}",
+ "renocaptcha-create": "Message above the CAPTCHA for create (user creates a new page) action.\n{{related|ConfirmEdit-create}}",
+ "renocaptcha-noscript": "This messages is warning you have javascript disabled so you have to manualy input the text into the textbox.",
+ "renocaptcha-help": "Explanation of how to solve the CAPTCHA for API clients.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "{{doc-apihelp-param|description=the \"g-recaptcha-response\" parameter added by [[mw:Extension:ConfirmEdit]]|noseealso=1}}"
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ru.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ru.json
new file mode 100644
index 00000000..e899d141
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ru.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Okras",
+ "Facenapalm"
+ ]
+ },
+ "renocaptcha-edit": "В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:",
+ "renocaptcha-addurl": "Ваша правка содержит новые внешние ссылки. В целях защиты от автоматического спама просим вас решить следующую каптчу:",
+ "renocaptcha-badlogin": "В целях защиты от автоматического подбора пароля просим вас решить следующую каптчу:",
+ "renocaptcha-createaccount": "В целях защиты от автоматического создания учётных записей просим вас решить следующую каптчу:",
+ "renocaptcha-createaccount-fail": "Похоже, вы не разгадали капчу.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Поле от виджета ReCaptcha."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/sv.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/sv.json
new file mode 100644
index 00000000..0aa3b168
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/sv.json
@@ -0,0 +1,18 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jopparn",
+ "Lokal Profil",
+ "WikiPhoenix"
+ ]
+ },
+ "renocaptcha-edit": "För att skydda wikin mot automatiserad redigeringsspam ber vi dig att lösa följande CAPTCHA:",
+ "renocaptcha-addurl": "Din redigering innehåller nya externa länkar. För att skydda wikin mot automatiserat spam ber vi dig att lösa följande CAPTCHA:",
+ "renocaptcha-badlogin": "För att skydda wikin mot automatiserat knäckande av lösenord, ber vi dig att lösa följande CAPTCHA:",
+ "renocaptcha-createaccount": "För att skydda wikin mot automatiserat kontoskapande, ber vi dig att lösa följande CAPTCHA:",
+ "renocaptcha-createaccount-fail": "Det verkar som att du inte har löst CAPTCHA.",
+ "renocaptcha-create": "För att skydda wikin mot automatiserat sidskapande, ber vi dig att lösa följande CAPTCHA:",
+ "renocaptcha-noscript": "Olyckligtvis har du inaktiverat JavaScript, så vi kan inte automatiskt känna igen om du är en människa eller inte. Vänligen lös CAPTCHAN ovan och kopiera den resulterande texten i följande textruta:",
+ "renocaptcha-help": "Lös en ReCaptcha NoCaptcha-utmaning och returnera lösningsvärdet som captchaWord.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Fält från ReCaptcha-widgeten."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/uk.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/uk.json
new file mode 100644
index 00000000..d95c8183
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/uk.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ата",
+ "Piramidion"
+ ]
+ },
+ "renocaptcha-edit": "Щоб захистити вікі від автоматичного спаму в редагуваннях, ми уклінно просимо Вас ввести CAPTCHA:",
+ "renocaptcha-addurl": "Ваше редагування містить нові зовнішні посилання. Щоб захистити вікі від автоматичного спаму в редагуваннях, ми уклінно просимо Вас ввести CAPTCHA:",
+ "renocaptcha-badlogin": "Щоб захистити вікі від автоматичного зламування паролів, ми уклінно просимо Вас ввести CAPTCHA:",
+ "renocaptcha-createaccount": "Щоб захистити вікі від автоматичного створення облікових записів, ми уклінно просимо Вас ввести CAPTCHA:",
+ "renocaptcha-createaccount-fail": "Схоже, Вам не вдалося ввести CAPTCHA.",
+ "renocaptcha-create": "Щоб захистити вікі від автоматичного створення сторінок, ми уклінно просимо Вас ввести CAPTCHA:",
+ "renocaptcha-noscript": "На жаль, Ви вимкнули JavaScript, і ми не можемо розпізнати автоматично, людина Ви чи ні. Будь ласка, введіть текст із CAPTCHA, що вгорі, у відповідне текстове поле:",
+ "renocaptcha-help": "Будь ласка, вирішіть завдання ReCaptcha NoCaptcha і введіть значення відповіді як captchaWord.",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "Поле із віджета ReCaptcha."
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/zh-hans.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/zh-hans.json
new file mode 100644
index 00000000..557d77cd
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/zh-hans.json
@@ -0,0 +1,16 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liuxinyu970226"
+ ]
+ },
+ "renocaptcha-edit": "为保护wiki免于自动化编辑破坏,我们恳请您输入下面的验证码:",
+ "renocaptcha-addurl": "您的编辑包含新的外部链接。为保护wiki免于自动化破坏,我们恳请您输入下面的验证码:",
+ "renocaptcha-badlogin": "为保护wiki免于自动化密码破解,我们希望您输入下面的验证码:",
+ "renocaptcha-createaccount": "为保护wiki免于自动化账户创建,我们恳请您输入下面的验证码:",
+ "renocaptcha-createaccount-fail": "看起来您未输入正确的验证码。",
+ "renocaptcha-create": "为保护wiki免于自动化页面创建,我们恳请您输入下面的验证码:",
+ "renocaptcha-noscript": "不幸的是,您禁用了JavaScript,因此我们不能自动识别您是否是一个人。请识别上方的验证码,并将结果文本复制至下面的文本区域:",
+ "renocaptcha-help": "请识别ReCaptcha无验证码挑战,并将响应值作为验证码文本返回。",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "来自ReCaptcha小部件的字段。"
+}
diff --git a/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/zh-hant.json b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/zh-hant.json
new file mode 100644
index 00000000..38eb5d82
--- /dev/null
+++ b/www/wiki/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/zh-hant.json
@@ -0,0 +1,17 @@
+{
+ "@metadata": {
+ "authors": [
+ "A2093064",
+ "Kly"
+ ]
+ },
+ "renocaptcha-edit": "為保護 wiki 防止自動化垃圾內容編輯程式,我們希望您輸入下面的驗證碼:",
+ "renocaptcha-addurl": "您的編輯使用了新的外部連結。為了防止自動化垃圾內容編輯程式,我們要麻煩您輸入在下面方塊中顯示的單字。",
+ "renocaptcha-badlogin": "為保護wiki免遭自動化的密碼破解,我們希望您輸入下面的驗證碼:",
+ "renocaptcha-createaccount": "為保護 wiki 防止自動化帳號建立程式,我們希望您輸入下面的驗證碼:",
+ "renocaptcha-createaccount-fail": "看來您的驗證碼似乎不正確。",
+ "renocaptcha-create": "為保護 wiki 防止自動化頁面建立程式,我們希望您輸入下面的驗證碼:",
+ "renocaptcha-noscript": "很遺憾地,因為您停用了 JavaScript 功能,因此我們無法自動識別出您是否是非機器人的正常個人用戶。請解決上方的驗證碼,並複製結果的文字內容到以下文字方框裡:",
+ "renocaptcha-help": "請解決 ReCaptcha NoCaptcha 的盤問並回傳作為驗證碼文字的回應值。",
+ "renocaptcha-apihelp-param-g-recaptcha-response": "自 ReCaptcha 小工具的欄位。"
+}