summaryrefslogtreecommitdiff
path: root/extensions/ConfirmEdit/ReCaptchaNoCaptcha
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/ConfirmEdit/ReCaptchaNoCaptcha')
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.class.php148
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.php13
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/extension.json17
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ast.json14
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/de.json14
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/en.json12
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/es.json14
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/fr.json14
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/gl.json14
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ht.json9
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lb.json8
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/mk.json14
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pl.json13
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pt.json13
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/qqq.json12
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/uk.json14
-rw-r--r--extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/zh-hans.json14
17 files changed, 357 insertions, 0 deletions
diff --git a/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.class.php b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.class.php
new file mode 100644
index 00000000..7631b82f
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.class.php
@@ -0,0 +1,148 @@
+<?php
+class ReCaptchaNoCaptcha extends SimpleCaptcha {
+ private $error = null;
+ /**
+ * Get the captcha form.
+ * @return string
+ */
+ function getForm( OutputPage $out ) {
+ global $wgReCaptchaSiteKey;
+
+ // Insert reCAPTCHA script.
+ // See https://developers.google.com/recaptcha/docs/faq
+ $out->addHeadItem(
+ 'g-recaptchascript',
+ '<script src="https://www.google.com/recaptcha/api.js" async defer></script>'
+ );
+ $output = Html::element( 'div', array(
+ 'class' => array(
+ 'g-recaptcha',
+ 'mw-confirmedit-captcha-fail' => !!$this->error,
+ ),
+ 'data-sitekey' => $wgReCaptchaSiteKey
+ ) );
+ $htmlUrlencoded = htmlspecialchars( urlencode( $wgReCaptchaSiteKey ) );
+ $output .= <<<HTML
+<noscript>
+ <div style="width: 302px; height: 422px;">
+ <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}"
+ frameborder="0" scrolling="no"
+ style="width: 302px; height:422px; border-style: none;">
+ </iframe>
+ </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>
+ </div>
+</noscript>
+HTML;
+ return $output;
+ }
+
+ protected function logCheckError( $info ) {
+ if ( $info instanceof Status ) {
+ $errors = $status->getErrorsArray();
+ $error = $errors[0][0];
+ } elseif ( is_array( $info ) ) {
+ $error = implode( ',', $info );
+ } else {
+ $error = $info;
+ }
+ wfDebugLog( 'captcha', 'Unable to validate response: ' . $error );
+ }
+
+ /**
+ * Check, if the user solved the captcha.
+ *
+ * Based on reference implementation:
+ * https://github.com/google/recaptcha#php
+ *
+ * @return boolean
+ */
+ function passCaptcha() {
+ global $wgRequest, $wgReCaptchaSecretKey, $wgReCaptchaSendRemoteIP;
+
+ $url = 'https://www.google.com/recaptcha/api/siteverify';
+ // Build data to append to request
+ $data = array(
+ 'secret' => $wgReCaptchaSecretKey,
+ 'response' => $wgRequest->getVal( 'g-recaptcha-response' ),
+ );
+ if ( $wgReCaptchaSendRemoteIP ) {
+ $data['remoteip'] = $wgRequest->getIP();
+ }
+ $url = wfAppendQuery( $url, $data );
+ $request = MWHttpRequest::factory( $url, array( 'method' => 'GET' ) );
+ $status = $request->execute();
+ if ( !$status->isOK() ) {
+ $this->error = 'http';
+ $this->logStatusError( $status );
+ return false;
+ }
+ $response = FormatJson::decode( $request->getContent(), true );
+ if ( !$response ) {
+ $this->error = 'json';
+ $this->logStatusError( $this->error );
+ return false;
+ }
+ if ( isset( $response['error-codes'] ) ) {
+ $this->error = 'recaptcha-api';
+ $this->logCheckError( $response['error-codes'] );
+ return false;
+ }
+
+ return $response['success'];
+ }
+
+ function addCaptchaAPI( &$resultArr ) {
+ global $wgReCaptchaSiteKey;
+
+ $resultArr['captcha']['type'] = 'recaptchanocaptcha';
+ $resultArr['captcha']['mime'] = 'image/png';
+ $resultArr['captcha']['key'] = $wgReCaptchaSiteKey;
+ $resultArr['captcha']['error'] = $this->error;
+ }
+
+ /**
+ * Show a message asking the user to enter a captcha on edit
+ * The result will be treated as wiki text
+ *
+ * @param $action string Action being performed
+ * @return string Wikitext
+ */
+ function getMessage( $action ) {
+ $name = 'renocaptcha-' . $action;
+ $msg = wfMessage( $name );
+
+ $text = $msg->isDisabled() ? wfMessage( 'renocaptcha-edit' )->text() : $msg->text();
+ if ( $this->error ) {
+ $text = '<div class="error">' . $text . '</div>';
+ }
+ return $text;
+ }
+
+ public function APIGetAllowedParams( &$module, &$params, $flags ) {
+ if ( $flags && $this->isAPICaptchaModule( $module ) ) {
+ $params['g-recaptcha-response'] = null;
+ }
+
+ return true;
+ }
+
+ public function APIGetParamDescription( &$module, &$desc ) {
+ if ( $this->isAPICaptchaModule( $module ) ) {
+ $desc['g-recaptcha-response'] = 'Field from the ReCaptcha widget';
+ }
+
+ return true;
+ }
+}
diff --git a/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.php b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.php
new file mode 100644
index 00000000..e7528b7a
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/ReCaptchaNoCaptcha.php
@@ -0,0 +1,13 @@
+<?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/extensions/ConfirmEdit/ReCaptchaNoCaptcha/extension.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/extension.json
new file mode 100644
index 00000000..25379bc6
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/extension.json
@@ -0,0 +1,17 @@
+{
+ "name": "ReCaptchaNoCaptcha",
+ "MessagesDirs": {
+ "ReCaptchaNoCaptcha": [
+ "i18n"
+ ]
+ },
+ "AutoloadClasses": {
+ "ReCaptchaNoCaptcha": "ReCaptchaNoCaptcha.class.php"
+ },
+ "config": {
+ "CaptchaClass": "ReCaptchaNoCaptcha",
+ "ReCaptchaSiteKey": "",
+ "ReCaptchaSecretKey": "",
+ "ReCaptchaSendRemoteIP": false
+ }
+}
diff --git a/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ast.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ast.json
new file mode 100644
index 00000000..2669f48e
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ast.json
@@ -0,0 +1,14 @@
+{
+ "@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:"
+}
diff --git a/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/de.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/de.json
new file mode 100644
index 00000000..782ef932
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/de.json
@@ -0,0 +1,14 @@
+{
+ "@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:"
+}
diff --git a/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/en.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/en.json
new file mode 100644
index 00000000..f924c5d6
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/en.json
@@ -0,0 +1,12 @@
+{
+ "@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:"
+}
diff --git a/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/es.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/es.json
new file mode 100644
index 00000000..c0ff07d7
--- /dev/null
+++ b/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/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/fr.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/fr.json
new file mode 100644
index 00000000..85962dd7
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/fr.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Wladek92"
+ ]
+ },
+ "renocaptcha-edit": "Pour protéger le wiki contre les spams de modifications automatiques, 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 spams automatisées, nous vous demandons de bien vouloir résoudre le CAPTCHA suivant:",
+ "renocaptcha-badlogin": "Pour protéger le wiki contre les spams automatisés de craquage 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 :"
+}
diff --git a/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/gl.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/gl.json
new file mode 100644
index 00000000..418ef29e
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/gl.json
@@ -0,0 +1,14 @@
+{
+ "@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:"
+}
diff --git a/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ht.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/ht.json
new file mode 100644
index 00000000..6ecc8918
--- /dev/null
+++ b/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/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lb.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/lb.json
new file mode 100644
index 00000000..09884e6e
--- /dev/null
+++ b/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/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/mk.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/mk.json
new file mode 100644
index 00000000..96f644df
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/mk.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06"
+ ]
+ },
+ "renocaptcha-edit": "Со цел да го заштитиме викито од автоматизирани спам-уредувања, би ве замолиле да го решите прикажаното на сликичката:",
+ "renocaptcha-addurl": "Во уредувањето имате ставено нови надворешни врски. Со цел да го заштитиме викито од автоматизиран спам, би ве замолиле да го решите прикажаното на сликичката:",
+ "renocaptcha-badlogin": "Со цел да го заштитиме викито од автоматизирано пробивање на лозинки, би ве замолиле да го решите прикажаното на сликичката:",
+ "renocaptcha-createaccount": "Со цел да го заштитиме викито од автоматизирано создавање на сметки, би ве замолиле да го решите прикажаното на сликичката:",
+ "renocaptcha-createaccount-fail": "Го немате решено прикажаното на сликичката.",
+ "renocaptcha-create": "Со цел да го заштитиме викито од автоматизирано создавање на страници, би ве замолиле да го решите прикажаното на сликичката:",
+ "renocaptcha-noscript": "За несреќа, ја имате исклучено JavaScript, па затоа не можеме автоматски да одредиме дали сте човек или не. Решете го прикажаното на сликичката погоре и прекопирајте го добиеното во следново поле:"
+}
diff --git a/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pl.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pl.json
new file mode 100644
index 00000000..56263a4a
--- /dev/null
+++ b/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/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pt.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pt.json
new file mode 100644
index 00000000..67c417aa
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/pt.json
@@ -0,0 +1,13 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vitorvicentevalente"
+ ]
+ },
+ "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-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:"
+}
diff --git a/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/qqq.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/qqq.json
new file mode 100644
index 00000000..c778953b
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/qqq.json
@@ -0,0 +1,12 @@
+{
+ "@metadata": {
+ "authors": []
+ },
+ "renocaptcha-edit": "Message above the CAPTCHA for edit action.",
+ "renocaptcha-addurl": "Message above the CAPTCHA for addurl (user added new external links to the page) action.",
+ "renocaptcha-badlogin": "Message above the CAPTCHA for badlogin action.",
+ "renocaptcha-createaccount": "Message above the CAPTCHA for createaccount (user creates a new account) action.",
+ "renocaptcha-createaccount-fail": "Error message, when the CAPTCHA isn't solved correctly.",
+ "renocaptcha-create": "Message above the CAPTCHA for create (user creates a new page) action.",
+ "renocaptcha-noscript": "This messages is warning you have javascript disabled so you have to manualy input the text into the textbox."
+}
diff --git a/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/uk.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/uk.json
new file mode 100644
index 00000000..11715edd
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/uk.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ата"
+ ]
+ },
+ "renocaptcha-edit": "Щоб захистити вікі від автоматичного спаму в редагуваннях, ми уклінно просимо Вас ввести CAPTCHA:",
+ "renocaptcha-addurl": "Ваше редагування містить нові зовнішні посилання. Щоб захистити вікі від автоматичного спаму в редагуваннях, ми уклінно просимо Вас ввести CAPTCHA:",
+ "renocaptcha-badlogin": "Щоб захистити вікі від автоматичного зламування паролів, ми уклінно просимо Вас ввести CAPTCHA:",
+ "renocaptcha-createaccount": "Щоб захистити вікі від автоматичного створення облікових записів, ми уклінно просимо Вас ввести CAPTCHA:",
+ "renocaptcha-createaccount-fail": "Схоже, Вам не вдалося ввести CAPTCHA.",
+ "renocaptcha-create": "Щоб захистити вікі від автоматичного створення сторінок, ми уклінно просимо Вас ввести CAPTCHA:",
+ "renocaptcha-noscript": "На жаль, Ви вимкнули JavaScript, і ми не можемо розпізнати автоматично, людина Ви чи ні. Будь ласка, введіть текст із CAPTCHA, що вгорі, у відповідне текстове поле:"
+}
diff --git a/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/zh-hans.json b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/zh-hans.json
new file mode 100644
index 00000000..8079d98a
--- /dev/null
+++ b/extensions/ConfirmEdit/ReCaptchaNoCaptcha/i18n/zh-hans.json
@@ -0,0 +1,14 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liuxinyu970226"
+ ]
+ },
+ "renocaptcha-edit": "为保护wiki免于自动化编辑破坏,我们希望您输入下面的验证码:",
+ "renocaptcha-addurl": "您的编辑包含新的外部链接。为保护wiki免于自动化破坏,我们希望您输入下面的验证码:",
+ "renocaptcha-badlogin": "为保护wiki免于自动化密码破解,我们希望您输入下面的验证码:",
+ "renocaptcha-createaccount": "为保护wiki免于自动化账户创建,我们希望您输入下面的验证码:",
+ "renocaptcha-createaccount-fail": "看起来您未输入正确的验证码。",
+ "renocaptcha-create": "为保护wiki免于自动化页面创建,我们希望您输入下面的验证码:",
+ "renocaptcha-noscript": "不幸的是,您禁用了JavaScript,因此我们不能自动识别您是否是一个人。请识别上方的验证码,并将结果文本复制至下面的文本区域:"
+}