Adding basic Akismet stuff. Seems to work. Still working on it, make

sure it's okay.
This commit is contained in:
Ernst 2017-12-05 17:03:12 -08:00
parent 607e0fa6d4
commit 6a6b1973a1
8 changed files with 216 additions and 175 deletions

View File

@ -75,6 +75,13 @@
});
</script>
{% if grav.twig.warning_message|length %}
<div class="admin-block">
<h1>{{ "PLUGIN_COMMENTS.WARNINGS"|tu }}</h1>
<p class="center">{{ grav.twig.warning_message }}</p>
</div>
{% endif %}
<h1>Comments in the last 7 days</h1>
<div class="admin-block">

View File

@ -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

View File

@ -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'];
}
/**

View File

@ -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:

View File

@ -1,148 +0,0 @@
<?php
require_once 'vendor/Akismet.class.php';
class HabariAkismet extends Plugin
{
const SERVER_AKISMET = 'rest.akismet.com';
const SERVER_TYPEPAD = 'api.antispam.typepad.com';
public function action_plugin_activation($file)
{
if (realpath($file) == __FILE__) {
Session::notice(_t('Please set your Akismet or TypePad AntiSpam API Key in the configuration.'));
}
}
public function filter_plugin_config($actions, $plugin_id)
{
if ($plugin_id == $this->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 <b>invalid</b>. 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)));
}
}
}
?>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<pluggable type="plugin" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://schemas.habariproject.org/Pluggable-1.3.xsd">
<name>Habari Akismet</name>
<license url="http://www.apache.org/licenses/LICENSE-2.0.html">Apache Software License 2.0</license>
<url>http://habariproject.org</url>
<author url="http://habariproject.org/">The Habari Community</author>
<version>0.2</version>
<guid>98bdb03a-a7e5-4c2a-a875-dcfe1d89f130</guid>
<description><![CDATA[Provides the Akismet and TypePad AntiSpam spam filter webservices to Habari comments.]]></description>
</pluggable>

View File

@ -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: '<p>Ein neuer Kommentar am %1$s von %3$s (%4$s).</p><p>Seite: %2$s</p><p>Text: %5$s</p>'
@ -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: '<p>Un nuevo comentario se hizo en %1$s por %3$s (%4$s).</p><p>Page: %2$s</p><p>Text: %5$s</p>'
@ -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: '<p>Un nouveau commentaire a été publié sur %1$s par %3$s (%4$s).</p><p>Page : %2$s</p><p>Texte : %5$s</p>'
@ -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: '<p>Novi komentar je napisan na %1$s od %3$s (%4$s).</p><p>Stranica:: %2$s</p><p>Tekst: %5$s</p>'
@ -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: '<p>Un nuovo commento è stato postato su %1$s da %3$s (%4$s).</p><p>Pagina: %2$s</p><p>Testo: %5$s</p>'
@ -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: '<p>新しいコメントが%1$sについて%3$sから(%4$s)書かれた.</p><p>ページー : %2$s</p><p>文書 : %5$s</p>'
@ -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: '<p>Pojawił się nowy komentarz, napisany %1$s przez %3$s (%4$s).</p><p>Strona: %2$s</p><p>Treść: %5$s</p>'
@ -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: '<p>Новый комментарий был сделан на %1$s by %3$s (%4$s).</p><p>Страница: %2$s</p><p>Текст: %5$s</p>'
@ -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: '<p>Um novo comentário foi feito em %1$s por %3$s (%4$s).</p><p>Página: %2$s</p><p>Texto: %5$s</p>'
@ -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: '<p>Un nou comentariu a fost adăugat la %1$s de către %3$s (%4$s).</p><p>Pagină: %2$s</p><p>Text: %5$s</p>'
@ -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: '<p>En ny kommentar er skrevet på %1$s av %3$s (%4$s).</p><p>Side: %2$s</p><p>Tekst: %5$s</p>'
@ -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