diff --git a/admin/templates/comments.html.twig b/admin/templates/comments.html.twig index 6fea510..b78920f 100644 --- a/admin/templates/comments.html.twig +++ b/admin/templates/comments.html.twig @@ -75,6 +75,13 @@ }); + {% if grav.twig.warning_message|length %} +
+

{{ "PLUGIN_COMMENTS.WARNINGS"|tu }}

+

{{ grav.twig.warning_message }}

+
+ {% endif %} +

Comments in the last 7 days

diff --git a/blueprints.yaml b/blueprints.yaml index 9caf823..4a188aa 100644 --- a/blueprints.yaml +++ b/blueprints.yaml @@ -29,19 +29,9 @@ form: 0: PLUGIN_ADMIN.DISABLED validate: type: bool - pingbacks: - type: toggle - label: Pingbacks - highlight: 1 - default: 0 - options: - 1: PLUGIN_ADMIN.ENABLED - 0: PLUGIN_ADMIN.DISABLED - validate: - type: bool commenting: type: toggle - label: Commenting + label: PLUGIN_COMMENTS.COMMENTS highlight: 1 default: 0 options: @@ -49,3 +39,59 @@ form: 0: PLUGIN_ADMIN.DISABLED validate: type: bool + nested: + type: toggle + label: PLUGIN_COMMENTS.COMMENTS_NESTED + highlight: 1 + default: 0 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool + pingbacks: + type: toggle + label: PLUGIN_COMMENTS.COMMENTS_PINGBACKS + highlight: 1 + default: 0 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool + recaptcha: + type: toggle + label: PLUGIN_COMMENTS.RECAPTCHA + highlight: 1 + default: 0 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool + akismet: + type: toggle + label: PLUGIN_COMMENTS.AKISMET + highlight: 1 + default: 0 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool + akismet_apikey: + type: text + label: PLUGIN_COMMENTS.AKISMET_APIKEY + highlight: 1 + default: + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + akismet_site: + type: text + label: PLUGIN_COMMENTS.AKISMET_SITE_OVERRIDE + highlight: 1 + default: + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED diff --git a/comments.php b/comments.php index b1b0b7f..2070221 100644 --- a/comments.php +++ b/comments.php @@ -17,6 +17,8 @@ use RocketTheme\Toolbox\File\File; use RocketTheme\Toolbox\Event\Event; use Symfony\Component\Yaml\Yaml; +require_once 'extern/akismet/Akismet.class.php'; + class CommentsPlugin extends Plugin { protected $route = 'comments'; @@ -27,6 +29,8 @@ class CommentsPlugin extends Plugin protected $comments_cache_id; protected $pingbacks_cache_id; + protected $akismet_enabled; + /** * @return array */ @@ -85,6 +89,7 @@ class CommentsPlugin extends Plugin $this->grav['twig']->pingbacks_enabled = $this->pingbacks_enabled; $this->grav['twig']->comments = $this->fetchComments(); $this->grav['twig']->pingbacks = $this->fetchPingbacks(); + $this->grav['twig']->akismet_enabled = $this->grav['config']->get('plugins.comments.akismet'); } /** @@ -117,6 +122,8 @@ class CommentsPlugin extends Plugin $this->commenting_enabled = $this->grav['config']->get('plugins.comments.commenting'); $this->pingbacks_enabled = $this->grav['config']->get('plugins.comments.pingbacks'); + + $this->akismet_enabled = $this->grav['config']->get('plugins.comments.akismet'); } /** @@ -124,8 +131,6 @@ class CommentsPlugin extends Plugin */ public function initializeFrontend() { - $this->calculateEnable(); - $this->enable([ 'onTwigTemplatePaths' => ['onTwigTemplatePaths', 0], ]); @@ -182,6 +187,8 @@ class CommentsPlugin extends Plugin */ public function onPluginsInitialized() { + $this->calculateEnable(); + if ($this->isAdmin()) { $this->initializeAdmin(); } else { @@ -218,7 +225,7 @@ class CommentsPlugin extends Plugin $name = filter_var(urldecode($post['name']), FILTER_SANITIZE_STRING); $email = filter_var(urldecode($post['email']), FILTER_SANITIZE_STRING); $title = filter_var(urldecode($post['title']), FILTER_SANITIZE_STRING); - $site = filter_var(urldecode($post['site']), FILTER_SANITIZE_STRING); + $site = isset($post['site']) ? filter_var(urldecode($post['site']), FILTER_SANITIZE_STRING) : ""; if (isset($this->grav['user'])) { $user = $this->grav['user']; @@ -232,6 +239,25 @@ class CommentsPlugin extends Plugin $language = $this->grav['language']; $lang = $language->getLanguage(); + if ($this->akismet_enabled) { + $key = $this->grav['config']->get('plugins.comments.akismet_apikey'); + $url_override = $this->grav['config']->get('plugins.comments.akismet_site'); + $url = !empty($url_override) ? $url_override : $_SERVER['HTTP_HOST']; + + $akismet = new \Akismet($url, $key); + $akismet->setCommentAuthor($name); + $akismet->setCommentAuthorEmail($email); + $akismet->setCommentAuthorURL($site); + $akismet->setCommentContent($text); + //$akismet->setPermalink($comment->post->permalink); + //try { + $spam = ($akismet->isCommentSpam()) ? 'spam' : 'ham'; + //return; + //} catch (Exception $e) { + // EventLog::log($e->getMessage(), 'notice', 'comment', 'HabariAkismet'); + //} + } + $filename = DATA_DIR . 'comments'; $filename .= ($lang ? '/' . $lang : ''); $filename .= $path . '.yaml'; @@ -245,7 +271,8 @@ class CommentsPlugin extends Plugin 'date' => date('D, d M Y H:i:s', time()), 'author' => $name, 'email' => $email, - 'site' => $site + 'site' => $site, + 'approved' => ( !isset($spam) || $spam == 'ham' ? 'true' : 'false' ) ]; } else { $data = array( @@ -256,7 +283,8 @@ class CommentsPlugin extends Plugin 'date' => date('D, d M Y H:i:s', time()), 'author' => $name, 'email' => $email, - 'site' => $site + 'site' => $site, + 'approved' => ( !isset($spam) || $spam == 'ham' ? 'true' : 'false' ) ]) ); } @@ -451,6 +479,20 @@ class CommentsPlugin extends Plugin public function onTwigAdminTemplatePaths() { $this->grav['twig']->twig_paths[] = __DIR__ . '/admin/templates'; + $this->grav['twig']->akismet_enabled = $this->akismet_enabled; + + if ($this->akismet_enabled) { + $key = $this->grav['config']->get('plugins.comments.akismet_apikey'); + $url_override = $this->grav['config']->get('plugins.comments.akismet_site'); + $url = !empty($url_override) ? $url_override : $_SERVER['HTTP_HOST']; + + $akismet = new \Akismet($url, $key); + if ($akismet->isKeyValid()) { + $this->grav['twig']->warning_message = ""; + } else { + $this->grav['twig']->warning_message = sprintf("Akismet API key \"%s\" is invalid for the url \"%s\". Provide a correct url override or make sure you're registered. Please check to make sure the key is entered correctly.", $key, $url); + } + } } /** @@ -459,6 +501,8 @@ class CommentsPlugin extends Plugin public function onAdminMenu() { $this->grav['twig']->plugins_hooked_nav['PLUGIN_COMMENTS.COMMENTS'] = ['route' => $this->route, 'icon' => 'fa-file-text']; + + } /** diff --git a/comments.yaml b/comments.yaml index 3115067..7c414f2 100644 --- a/comments.yaml +++ b/comments.yaml @@ -1,6 +1,8 @@ enabled: true pingbacks: true commenting: true +akismet_enabled: true +warning_message: "" enable_on_routes: - '/blog' @@ -28,7 +30,7 @@ form: required: true - name: blah - label: PLUGIN_COMMENTS.EMAIL_LABEL + label: PLUGIN_COMMENTS.SITE_LABEL placeholder: "https://leetnightshade.com" type: text validate: diff --git a/extern/habariakismet/vendor/Akismet.class.php b/extern/akismet/Akismet.class.php similarity index 100% rename from extern/habariakismet/vendor/Akismet.class.php rename to extern/akismet/Akismet.class.php diff --git a/extern/habariakismet/habariakismet.plugin.php b/extern/habariakismet/habariakismet.plugin.php deleted file mode 100644 index aa6399d..0000000 --- a/extern/habariakismet/habariakismet.plugin.php +++ /dev/null @@ -1,148 +0,0 @@ -plugin_id()) { - $actions[] = _t('Configure'); - } - - return $actions; - } - - public function action_plugin_ui($plugin_id, $action) - { - if ($plugin_id == $this->plugin_id()) { - switch ($action) { - case _t('Configure'): - - $form = new FormUI(strtolower(get_class($this))); - $form->append('select', 'provider', 'habariakismet__provider', _t('Service')); - $form->provider->options = array( - 'Akismet' => 'Akismet', - 'TypePad AntiSpam' => 'TypePad AntiSpam' - ); - $api_key = $form->append('text', 'api_key', 'habariakismet__api_key', _t('API Key')); - $api_key->add_validator('validate_required'); - $api_key->add_validator(array($this, 'validate_api_key')); - $form->append('submit', 'save', 'Save'); - $form->out(); - break; - } - } - } - - public function validate_api_key($key, $control, $form) - { - $endpoint = ($form->provider->value == 'Akismet') ? self::SERVER_AKISMET : self::SERVER_TYPEPAD; - - $a = new Akismet(Site::get_url('habari'), $key); - $a->setAkismetServer($endpoint); - - if (!$a->isKeyValid()) { - return array(sprintf(_t('Sorry, the %s API key %s is invalid. Please check to make sure the key is entered correctly.'), $form->provider->value, $key)); - } - - return array(); - } - - public function set_priorities() - { - return array( - 'action_comment_insert_before' => 1 - ); - } - - public function action_comment_insert_before(Comment $comment) - { - $api_key = Options::get('habariakismet__api_key'); - $provider = Options::get('habariakismet__provider'); - - if ($api_key == null || $provider == null) { - return; - } - - $endpoint = ($provider == 'Akismet') ? self::SERVER_AKISMET : self::SERVER_TYPEPAD; - - $a = new Akismet(Site::get_url('habari'), $api_key); - $a->setAkismetServer($endpoint); - $a->setCommentAuthor($comment->name); - $a->setCommentAuthorEmail($comment->email); - $a->setCommentAuthorURL($comment->url); - $a->setCommentContent($comment->content); - $a->setPermalink($comment->post->permalink); - - try { - $comment->status = ($a->isCommentSpam()) ? 'spam' : 'ham'; - return; - } catch (Exception $e) { - EventLog::log($e->getMessage(), 'notice', 'comment', 'HabariAkismet'); - } - } - - public function action_admin_moderate_comments($action, $comments, $handler) - { - $false_negatives = 0; - $false_positives = 0; - - $provider = Options::get('habariakismet__provider'); - $endpoint = ($provider == 'Akismet') ? self::SERVER_AKISMET : self::SERVER_TYPEPAD; - - $a = new Akismet(Site::get_url('habari'), Options::get('habariakismet__api_key')); - $a->setAkismetServer($endpoint); - - foreach ($comments as $comment) { - switch ($action) { - case 'spam': - if ($comment->status == Comment::STATUS_APPROVED || $comment->status == Comment::STATUS_UNAPPROVED) { - $a->setCommentAuthor($comment->name); - $a->setCommentAuthorEmail($comment->email); - $a->setCommentAuthorURL($comment->url); - $a->setCommentContent($comment->content); - - $a->submitSpam(); - - $false_negatives++; - } - - break; - case 'approved': - if ($comment->status == Comment::STATUS_SPAM) { - $a->setCommentAuthor($comment->name); - $a->setCommentAuthorEmail($comment->email); - $a->setCommentAuthorURL($comment->url); - $a->setCommentContent($comment->content); - - $a->submitHam(); - - $false_positives++; - } - - break; - } - } - - if ($false_negatives) { - Session::notice(_t('Reported %d false negatives to %s.', array($false_negatives, $provider))); - } - - if ($false_positives) { - Session::notice(_t('Reported %d false positives to %s.', array($false_positives, $provider))); - } - } -} - -?> diff --git a/extern/habariakismet/habariakismet.plugin.xml b/extern/habariakismet/habariakismet.plugin.xml deleted file mode 100644 index b1c59a4..0000000 --- a/extern/habariakismet/habariakismet.plugin.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - Habari Akismet - Apache Software License 2.0 - http://habariproject.org - The Habari Community - 0.2 - 98bdb03a-a7e5-4c2a-a875-dcfe1d89f130 - - \ No newline at end of file diff --git a/languages.yaml b/languages.yaml index 173ba3c..ebb2ecc 100644 --- a/languages.yaml +++ b/languages.yaml @@ -1,7 +1,13 @@ de: PLUGIN_COMMENTS: ADD_COMMENT: Kommentar hinzufügen + AKISMET: Akismet + AKISMET_APIKEY: Akismet API Key + AKISMET_SITE_OVERRIDE: Akismet Site Override COMMENTS: Kommentare + COMMENTS_NESTED: Nested Comments + COMMENTS_NONE: There are no comments yet. + COMMENTS_PINGBACKS: Pingbacks EMAIL_NOT_CONFIGURED: Email nicht konfiguriert NEW_COMMENT_EMAIL_SUBJECT: 'Neuer Kommentar für %1$s' NEW_COMMENT_EMAIL_BODY: '

Ein neuer Kommentar am %1$s von %3$s (%4$s).

Seite: %2$s

Text: %5$s

' @@ -16,14 +22,21 @@ de: EMAIL_PLACEHOLDER: "Email-Adresse eingeben" MESSAGE_LABEL: "Kommentar" MESSAGE_PLACEHOLDER: "Kommentar eingeben" + RECAPTCHA: reCAPTCHA + SITE_LABEL: Site SUBMIT_COMMENT_BUTTON_TEXT: "Absenden" EMAIL_NEW_COMMENT_SUBJECT: "[Neuer Kommentar] von {{ form.value.name|e }}" THANK_YOU_MESSAGE: "Vielen Dank für den Kommentar!" + WARNINGS: Warnings en: PLUGIN_COMMENTS: ADD_COMMENT: Add a comment + AKISMET: Akismet + AKISMET_APIKEY: Akismet API Key + AKISMET_SITE_OVERRIDE: Akismet Site Override COMMENTS: Comments + COMMENTS_NESTED: Nested Comments COMMENTS_NONE: There are no comments yet. COMMENTS_PINGBACKS: Pingbacks EMAIL_NOT_CONFIGURED: Email not configured @@ -40,14 +53,23 @@ en: EMAIL_PLACEHOLDER: "Enter your email address" MESSAGE_LABEL: "Comment" MESSAGE_PLACEHOLDER: "Enter your comment" + RECAPTCHA: reCAPTCHA + SITE_LABEL: Site SUBMIT_COMMENT_BUTTON_TEXT: "Submit" EMAIL_NEW_COMMENT_SUBJECT: "[New Comment] from {{ form.value.name|e }}" THANK_YOU_MESSAGE: "Thank you for writing your comment!" + WARNINGS: Warnings es: PLUGIN_COMMENTS: ADD_COMMENT: Agregar un comentario + AKISMET: Akismet + AKISMET_APIKEY: Akismet API Key + AKISMET_SITE_OVERRIDE: Akismet Site Override COMMENTS: Comentarios + COMMENTS_NESTED: Nested Comments + COMMENTS_NONE: There are no comments yet. + COMMENTS_PINGBACKS: Pingbacks EMAIL_NOT_CONFIGURED: El Email no está configurado NEW_COMMENT_EMAIL_SUBJECT: 'Nuevo comentario en %1$s' NEW_COMMENT_EMAIL_BODY: '

Un nuevo comentario se hizo en %1$s por %3$s (%4$s).

Page: %2$s

Text: %5$s

' @@ -62,14 +84,23 @@ es: EMAIL_PLACEHOLDER: "Escriba su email" MESSAGE_LABEL: "Comentario" MESSAGE_PLACEHOLDER: "Escriba su comentario" + RECAPTCHA: reCAPTCHA + SITE_LABEL: Site SUBMIT_COMMENT_BUTTON_TEXT: "Enviar" EMAIL_NEW_COMMENT_SUBJECT: "[Nuevo comentario] de {{ form.value.name|e }}" THANK_YOU_MESSAGE: "Gracias por escribir su comentario!" + WARNINGS: Warnings fr: PLUGIN_COMMENTS: ADD_COMMENT: Ajouter un commentaire + AKISMET: Akismet + AKISMET_APIKEY: Akismet API Key + AKISMET_SITE_OVERRIDE: Akismet Site Override COMMENTS: Commentaires + COMMENTS_NESTED: Nested Comments + COMMENTS_NONE: There are no comments yet. + COMMENTS_PINGBACKS: Pingbacks EMAIL_NOT_CONFIGURED: E-mail non configuré NEW_COMMENT_EMAIL_SUBJECT: 'Nouveau commentaire sur %1$s' NEW_COMMENT_EMAIL_BODY: '

Un nouveau commentaire a été publié sur %1$s par %3$s (%4$s).

Page : %2$s

Texte : %5$s

' @@ -84,14 +115,23 @@ fr: EMAIL_PLACEHOLDER: "Indiquez votre adresse e-mail" MESSAGE_LABEL: "Commentaire" MESSAGE_PLACEHOLDER: "Rédigez votre commentaire" + RECAPTCHA: reCAPTCHA + SITE_LABEL: Site SUBMIT_COMMENT_BUTTON_TEXT: "Envoyer" EMAIL_NEW_COMMENT_SUBJECT: "[Nouveau commentaire] de {{ form.value.name|e }}" THANK_YOU_MESSAGE: "Merci d'avoir rédigé votre commentaire !" + WARNINGS: Warnings hr: PLUGIN_COMMENTS: ADD_COMMENT: Dodaj komentar + AKISMET: Akismet + AKISMET_APIKEY: Akismet API Key + AKISMET_SITE_OVERRIDE: Akismet Site Override COMMENTS: Komentari + COMMENTS_NESTED: Nested Comments + COMMENTS_NONE: There are no comments yet. + COMMENTS_PINGBACKS: Pingbacks EMAIL_NOT_CONFIGURED: Email adresa nije podešena NEW_COMMENT_EMAIL_SUBJECT: 'Novi komentar na %1$s' NEW_COMMENT_EMAIL_BODY: '

Novi komentar je napisan na %1$s od %3$s (%4$s).

Stranica:: %2$s

Tekst: %5$s

' @@ -106,14 +146,23 @@ hr: EMAIL_PLACEHOLDER: "Unesite email adresu" MESSAGE_LABEL: "Komentar" MESSAGE_PLACEHOLDER: "Unesite komentar" + RECAPTCHA: reCAPTCHA + SITE_LABEL: Site SUBMIT_COMMENT_BUTTON_TEXT: "Pošalji" EMAIL_NEW_COMMENT_SUBJECT: "[Novi komentar] od {{ form.value.name|e }}" THANK_YOU_MESSAGE: "Hvala Vam što ste napisali svoj komentar!" + WARNINGS: Warnings it: PLUGIN_COMMENTS: ADD_COMMENT: Aggiungi un commento + AKISMET: Akismet + AKISMET_APIKEY: Akismet API Key + AKISMET_SITE_OVERRIDE: Akismet Site Override COMMENTS: Commenti + COMMENTS_NESTED: Nested Comments + COMMENTS_NONE: There are no comments yet. + COMMENTS_PINGBACKS: Pingbacks EMAIL_NOT_CONFIGURED: Email non configurata NEW_COMMENT_EMAIL_SUBJECT: 'Nuovo commento su %1$s' NEW_COMMENT_EMAIL_BODY: '

Un nuovo commento è stato postato su %1$s da %3$s (%4$s).

Pagina: %2$s

Testo: %5$s

' @@ -128,14 +177,23 @@ it: EMAIL_PLACEHOLDER: "Inserisci il tuo indirizzo email" MESSAGE_LABEL: "Messaggio" MESSAGE_PLACEHOLDER: "Inserisci il tuo commento" + RECAPTCHA: reCAPTCHA + SITE_LABEL: Site SUBMIT_COMMENT_BUTTON_TEXT: "Invia" EMAIL_NEW_COMMENT_SUBJECT: "[Nuovo commento] da {{ form.value.name|e }}" THANK_YOU_MESSAGE: "Grazie per il tuo commento!" + WARNINGS: Warnings ja: PLUGIN_COMMENTS: ADD_COMMENT: コメントを追加する + AKISMET: Akismet + AKISMET_APIKEY: Akismet API Key + AKISMET_SITE_OVERRIDE: Akismet Site Override COMMENTS: コメント + COMMENTS_NESTED: Nested Comments + COMMENTS_NONE: There are no comments yet. + COMMENTS_PINGBACKS: Pingbacks EMAIL_NOT_CONFIGURED: メールアドレスは設定さていません NEW_COMMENT_EMAIL_SUBJECT: '%1$sについて新しいコメント' NEW_COMMENT_EMAIL_BODY: '

新しいコメントが%1$sについて%3$sから(%4$s)書かれた.

ページー : %2$s

文書 : %5$s

' @@ -150,14 +208,23 @@ ja: EMAIL_PLACEHOLDER: "ご自分のメールアドレスをここに..." MESSAGE_LABEL: "コメント" MESSAGE_PLACEHOLDER: "コメントをここに" + RECAPTCHA: reCAPTCHA + SITE_LABEL: Site SUBMIT_COMMENT_BUTTON_TEXT: "送信する" EMAIL_NEW_COMMENT_SUBJECT: "[新しいコメント]、 {{ form.value.name|e }}から" THANK_YOU_MESSAGE: "コメントを書いてくださいましてありがとうございました!" + WARNINGS: Warnings pl: PLUGIN_COMMENTS: ADD_COMMENT: Dodaj komentarz + AKISMET: Akismet + AKISMET_APIKEY: Akismet API Key + AKISMET_SITE_OVERRIDE: Akismet Site Override COMMENTS: Komentarzy + COMMENTS_NESTED: Nested Comments + COMMENTS_NONE: There are no comments yet. + COMMENTS_PINGBACKS: Pingbacks EMAIL_NOT_CONFIGURED: Email jest nie skofigurowany NEW_COMMENT_EMAIL_SUBJECT: 'Nowy komentarz %1$s' NEW_COMMENT_EMAIL_BODY: '

Pojawił się nowy komentarz, napisany %1$s przez %3$s (%4$s).

Strona: %2$s

Treść: %5$s

' @@ -170,7 +237,13 @@ pl: ru: PLUGIN_COMMENTS: ADD_COMMENT: Добавить комментарий + AKISMET: Akismet + AKISMET_APIKEY: Akismet API Key + AKISMET_SITE_OVERRIDE: Akismet Site Override COMMENTS: Комментарии + COMMENTS_NESTED: Nested Comments + COMMENTS_NONE: There are no comments yet. + COMMENTS_PINGBACKS: Pingbacks EMAIL_NOT_CONFIGURED: Email не настроен NEW_COMMENT_EMAIL_SUBJECT: 'Новый комментарий к %1$s' NEW_COMMENT_EMAIL_BODY: '

Новый комментарий был сделан на %1$s by %3$s (%4$s).

Страница: %2$s

Текст: %5$s

' @@ -183,7 +256,13 @@ ru: pt-br: PLUGIN_COMMENTS: ADD_COMMENT: Escreva um comentário + AKISMET: Akismet + AKISMET_APIKEY: Akismet API Key + AKISMET_SITE_OVERRIDE: Akismet Site Override COMMENTS: Comentários + COMMENTS_NESTED: Nested Comments + COMMENTS_NONE: There are no comments yet. + COMMENTS_PINGBACKS: Pingbacks EMAIL_NOT_CONFIGURED: E-mail não configurado NEW_COMMENT_EMAIL_SUBJECT: 'Novo comentário em %1$s' NEW_COMMENT_EMAIL_BODY: '

Um novo comentário foi feito em %1$s por %3$s (%4$s).

Página: %2$s

Texto: %5$s

' @@ -198,14 +277,23 @@ pt-br: EMAIL_PLACEHOLDER: "Escreva seu e-mail. Ex.: seunome@provedor.com.br" MESSAGE_LABEL: "Comentário" MESSAGE_PLACEHOLDER: "Escreva seu comentário" + RECAPTCHA: reCAPTCHA + SITE_LABEL: Site SUBMIT_COMMENT_BUTTON_TEXT: "Enviar" EMAIL_NEW_COMMENT_SUBJECT: "[Novo comentário] de {{ form.value.name|e }}" THANK_YOU_MESSAGE: "Obrigada por enviar seu comentário!" + WARNINGS: Warnings ro: PLUGIN_COMMENTS: ADD_COMMENT: 'Adăugați un comentariu' + AKISMET: Akismet + AKISMET_APIKEY: Akismet API Key + AKISMET_SITE_OVERRIDE: Akismet Site Override COMMENTS: 'Comentarii' + COMMENTS_NESTED: Nested Comments + COMMENTS_NONE: There are no comments yet. + COMMENTS_PINGBACKS: Pingbacks EMAIL_NOT_CONFIGURED: 'Adresa de email nu este configurată' NEW_COMMENT_EMAIL_SUBJECT: 'Comentariu nou pentru %1$s' NEW_COMMENT_EMAIL_BODY: '

Un nou comentariu a fost adăugat la %1$s de către %3$s (%4$s).

Pagină: %2$s

Text: %5$s

' @@ -220,14 +308,23 @@ ro: EMAIL_PLACEHOLDER: "Introduceți adresa Dvs. de email" MESSAGE_LABEL: "Comentariu" MESSAGE_PLACEHOLDER: "Scrieți comentariul Dvs." + RECAPTCHA: reCAPTCHA + SITE_LABEL: Site SUBMIT_COMMENT_BUTTON_TEXT: "Trimiteți" EMAIL_NEW_COMMENT_SUBJECT: "[Comentariu nou] from {{ form.value.name|e }}" THANK_YOU_MESSAGE: "Vă mulțumim pentru comentariu!" + WARNINGS: Warnings no: PLUGIN_COMMENTS: ADD_COMMENT: Skriv en kommentar + AKISMET: Akismet + AKISMET_APIKEY: Akismet API Key + AKISMET_SITE_OVERRIDE: Akismet Site Override COMMENTS: Kommentarer + COMMENTS_NESTED: Nested Comments + COMMENTS_NONE: There are no comments yet. + COMMENTS_PINGBACKS: Pingbacks EMAIL_NOT_CONFIGURED: Epost er ikke konfigurert NEW_COMMENT_EMAIL_SUBJECT: 'Ny kommentar på %1$s' NEW_COMMENT_EMAIL_BODY: '

En ny kommentar er skrevet på %1$s av %3$s (%4$s).

Side: %2$s

Tekst: %5$s

' @@ -242,6 +339,9 @@ no: EMAIL_PLACEHOLDER: "Skriv din epost adresse" MESSAGE_LABEL: "Kommentar" MESSAGE_PLACEHOLDER: "Skriv din kommentar" + RECAPTCHA: reCAPTCHA + SITE_LABEL: Site SUBMIT_COMMENT_BUTTON_TEXT: "Send" EMAIL_NEW_COMMENT_SUBJECT: "[Ny kommentar] fra {{ form.value.name|e }}" THANK_YOU_MESSAGE: "Takk for din kommentar!" + WARNINGS: Warnings