code:
# Translation of StatusNet - Blog to Catalan (català)
# Exported from translatewiki.net
#
# Author: Toniher
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
"Language-Team: Catalan <https://translatewiki.net/wiki/Portal:ca>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: ca\n"
"X-Message-Group: #out-statusnet-plugin-blog\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
msgid "Must be logged in to post a blog entry."
msgstr "Cal haver iniciat una sessió per enviar una entrada de blog."

#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
msgid "Title required."
msgstr "Cal un títol."

#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
msgid "Content required."
msgstr "Cal un contingut."

#. TRANS: Page title after sending a notice.
msgid "Blog entry saved"
msgstr "S'ha desat l'entrada de blog."

#. TRANS: Plugin description.
msgid "Let users write and share long-form texts."
msgstr "Permet als usuaris escriure i compartir textos de formularis llargs."

#. TRANS: Blog application title.
msgctxt "TITLE"
msgid "Blog"
msgstr "Blog"

#. TRANS: Exception thrown when there are too many activity objects.
msgid "Too many activity objects."
msgstr "Masses objectes d'activitat."

#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
msgid "Wrong type for object."
msgstr "Tipus d'objecte incorrecte."

#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
msgid "Unknown verb for blog entries."
msgstr "Verb desconegut de les entrades de blog."

#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
#, php-format
msgid "No blog entry for notice %s."
msgstr "No hi ha entrada de blog de l'avís %s."

#. TRANS: Client exception thrown when referring to a non-existing blog entry.
msgid "No such entry."
msgstr "No existeix l'entrada."

#. TRANS: Title for a blog entry without a title.
msgid "Untitled"
msgstr "Sense títol"

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Title"
msgstr "Títol"

#. TRANS: Field title on blog entry form.
msgid "Title of the blog entry."
msgstr "Títol de l'entrada de blog."

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Text"
msgstr "Text"

#. TRANS: Field title on blog entry form.
msgid "Text of the blog entry."
msgstr "Text de l'entrada de blog."

#. TRANS: Button text to save a blog entry.
msgctxt "BUTTON"
msgid "Save"
msgstr "Desa"


code:
# Translation of StatusNet - Blog to German (Deutsch)
# Exported from translatewiki.net
#
# Author: Inkowik
# Author: Marcel083
# Author: Tiin
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
"Language-Team: German <https://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-blog\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
msgid "Must be logged in to post a blog entry."
msgstr "Du musst angemeldet sein, um einen Blog-Eintrag zu erstellen."

#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
msgid "Title required."
msgstr "Titel erforderlich."

#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
msgid "Content required."
msgstr "Inhalt erforderlich."

#. TRANS: Page title after sending a notice.
msgid "Blog entry saved"
msgstr "Blog-Eintrag gespeichert"

#. TRANS: Plugin description.
msgid "Let users write and share long-form texts."
msgstr "Benutzer lange Tetxte schreiben und teilen lassen."

#. TRANS: Blog application title.
msgctxt "TITLE"
msgid "Blog"
msgstr "Blog"

#. TRANS: Exception thrown when there are too many activity objects.
msgid "Too many activity objects."
msgstr "Zu viele Aktivitätsobjekte."

#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
msgid "Wrong type for object."
msgstr "Falscher Objekktyp."

#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
msgid "Unknown verb for blog entries."
msgstr "Unbekanntes Verb für Blogeinträge."

#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
#, php-format
msgid "No blog entry for notice %s."
msgstr "Kein Blogeintrag für %s."

#. TRANS: Client exception thrown when referring to a non-existing blog entry.
msgid "No such entry."
msgstr "Kein solcher Eintrag"

#. TRANS: Title for a blog entry without a title.
msgid "Untitled"
msgstr "Ohne Titel"

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Title"
msgstr "Titel"

#. TRANS: Field title on blog entry form.
msgid "Title of the blog entry."
msgstr "Titel des Blog-Eintrags"

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Text"
msgstr "Text"

#. TRANS: Field title on blog entry form.
msgid "Text of the blog entry."
msgstr "Text des Blog-Eintrages"

#. TRANS: Button text to save a blog entry.
msgctxt "BUTTON"
msgid "Save"
msgstr "Speichern"

license: mit


code:
# Translation of StatusNet - Blog to Spanish (español)
# Exported from translatewiki.net
#
# Author: Erchache2000
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
"Language-Team: Spanish <https://translatewiki.net/wiki/Portal:es>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: es\n"
"X-Message-Group: #out-statusnet-plugin-blog\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
msgid "Must be logged in to post a blog entry."
msgstr "Debe haber iniciado sesión para publicar una entrada de blog."

#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
msgid "Title required."
msgstr "Título requerido."

#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
msgid "Content required."
msgstr "Contenido requerido."

#. TRANS: Page title after sending a notice.
msgid "Blog entry saved"
msgstr "Entrada de blog guardada"

#. TRANS: Plugin description.
msgid "Let users write and share long-form texts."
msgstr ""
"Permiten a los usuarios escribir y compartir formulario con texto largo."

#. TRANS: Blog application title.
msgctxt "TITLE"
msgid "Blog"
msgstr "Blog"

#. TRANS: Exception thrown when there are too many activity objects.
msgid "Too many activity objects."
msgstr "Demasiados objetos de actividad."

#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
msgid "Wrong type for object."
msgstr "Tipo incorrecto para el objeto."

#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
msgid "Unknown verb for blog entries."
msgstr "Verbo desconocido para las entradas de blog."

#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
#, php-format
msgid "No blog entry for notice %s."
msgstr "Ninguna entrada de blog de notificación  %s ."

#. TRANS: Client exception thrown when referring to a non-existing blog entry.
msgid "No such entry."
msgstr "No hay tal entrada."

#. TRANS: Title for a blog entry without a title.
msgid "Untitled"
msgstr "Sin título"

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Title"
msgstr "Título"

#. TRANS: Field title on blog entry form.
msgid "Title of the blog entry."
msgstr "Título de la entrada de blog."

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Text"
msgstr "Texto"

#. TRANS: Field title on blog entry form.
msgid "Text of the blog entry."
msgstr "Texto de la entrada de blog."

#. TRANS: Button text to save a blog entry.
msgctxt "BUTTON"
msgid "Save"
msgstr "Guardar"


code:
# Translation of StatusNet - Blog to Basque (euskara)
# Exported from translatewiki.net
#
# Author: Artsuaga
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
"Language-Team: Basque <https://translatewiki.net/wiki/Portal:eu>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: eu\n"
"X-Message-Group: #out-statusnet-plugin-blog\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
msgid "Must be logged in to post a blog entry."
msgstr "Saioa hasi behar duzu blogean sarrera bat idazteko."

#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
msgid "Title required."
msgstr "Titulua beharrezkoa."

#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
msgid "Content required."
msgstr "Edukia beharrezkoa."

#. TRANS: Page title after sending a notice.
msgid "Blog entry saved"
msgstr "Blog sarrera gordea"

#. TRANS: Plugin description.
msgid "Let users write and share long-form texts."
msgstr "Erabiltzaileei testu luzeak idatzi eta partekatzen uzten die."

#. TRANS: Blog application title.
msgctxt "TITLE"
msgid "Blog"
msgstr "Bloga"

#. TRANS: Exception thrown when there are too many activity objects.
msgid "Too many activity objects."
msgstr "Jarduera objetu gehiegi."

#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
msgid "Wrong type for object."
msgstr "Objetuarentzat moeta okerra."

#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
msgid "Unknown verb for blog entries."
msgstr "Aditz ezezaguna blog sarerrentzat."

#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
#, php-format
msgid "No blog entry for notice %s."
msgstr "%s oharrarentzat ez dago blog sarrerarik."

#. TRANS: Client exception thrown when referring to a non-existing blog entry.
msgid "No such entry."
msgstr "Ez dago sarrera hori."

#. TRANS: Title for a blog entry without a title.
msgid "Untitled"
msgstr "Titulurik gabea"

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Title"
msgstr "Titulua"

#. TRANS: Field title on blog entry form.
msgid "Title of the blog entry."
msgstr "Blog sarreraren titulua."

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Text"
msgstr "Testua"

#. TRANS: Field title on blog entry form.
msgid "Text of the blog entry."
msgstr "Blog sarreraren testua."

#. TRANS: Button text to save a blog entry.
msgctxt "BUTTON"
msgid "Save"
msgstr "Gorde"


code:
# Translation of StatusNet - Blog to French (français)
# Exported from translatewiki.net
#
# Author: Davidtsm
# Author: Gomoko
# Author: Karl1263
# Author: Lucky
# Author: Od1n
# Author: Sherbrooke
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
"Language-Team: French <https://translatewiki.net/wiki/Portal:fr>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: fr\n"
"X-Message-Group: #out-statusnet-plugin-blog\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
msgid "Must be logged in to post a blog entry."
msgstr "Vous devez être connecté pour publier un billet."

#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
msgid "Title required."
msgstr "Titre requis."

#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
msgid "Content required."
msgstr "Contenu requis."

#. TRANS: Page title after sending a notice.
msgid "Blog entry saved"
msgstr "Billet enregistré"

#. TRANS: Plugin description.
msgid "Let users write and share long-form texts."
msgstr "Laissez les utilisateurs écrire et partager des textes longs"

#. TRANS: Blog application title.
msgctxt "TITLE"
msgid "Blog"
msgstr "Blog"

#. TRANS: Exception thrown when there are too many activity objects.
msgid "Too many activity objects."
msgstr "Trop d'objets d'activité"

#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
msgid "Wrong type for object."
msgstr "Mauvais type d'objet."

#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
msgid "Unknown verb for blog entries."
msgstr "Verbe inconnu pour les entrées du blog."

#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
#, php-format
msgid "No blog entry for notice %s."
msgstr "Aucune entrée de blog pour l'avis %s."

#. TRANS: Client exception thrown when referring to a non-existing blog entry.
msgid "No such entry."
msgstr "Enregistrement introuvable"

#. TRANS: Title for a blog entry without a title.
msgid "Untitled"
msgstr "Sans titre"

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Title"
msgstr "Titre"

#. TRANS: Field title on blog entry form.
msgid "Title of the blog entry."
msgstr "Titre de l'entrée de blog."

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Text"
msgstr "Texte"

#. TRANS: Field title on blog entry form.
msgid "Text of the blog entry."
msgstr "Texte de l'entrée de blog."

#. TRANS: Button text to save a blog entry.
msgctxt "BUTTON"
msgid "Save"
msgstr "Enregistrer"


code:
# Translation of StatusNet - Blog to Galician (galego)
# Exported from translatewiki.net
#
# Author: Toliño
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
"Language-Team: Galician <https://translatewiki.net/wiki/Portal:gl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: gl\n"
"X-Message-Group: #out-statusnet-plugin-blog\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
msgid "Must be logged in to post a blog entry."
msgstr "Cómpre estar rexistrado para publicar unha entrada de blogue."

#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
msgid "Title required."
msgstr "O título é obrigatorio."

#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
msgid "Content required."
msgstr "Cómpre algún contido."

#. TRANS: Page title after sending a notice.
msgid "Blog entry saved"
msgstr "Entrada de blogue gardada"

#. TRANS: Plugin description.
msgid "Let users write and share long-form texts."
msgstr "Permite aos usuarios escribir e compartir textos longos."

#. TRANS: Blog application title.
msgctxt "TITLE"
msgid "Blog"
msgstr "Blogue"

#. TRANS: Exception thrown when there are too many activity objects.
msgid "Too many activity objects."
msgstr "Demasiados obxectos de actividade."

#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
msgid "Wrong type for object."
msgstr "Tipo incorrecto para o obxecto."

#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
msgid "Unknown verb for blog entries."
msgstr "Verbo descoñecido para a entrada de blogue."

#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
#, php-format
msgid "No blog entry for notice %s."
msgstr "A nota %s non ten ningunha entrada de blogue."

#. TRANS: Client exception thrown when referring to a non-existing blog entry.
msgid "No such entry."
msgstr "Non hai tal entrada."

#. TRANS: Title for a blog entry without a title.
msgid "Untitled"
msgstr "Sen título"

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Title"
msgstr "Título"

#. TRANS: Field title on blog entry form.
msgid "Title of the blog entry."
msgstr "Título da entrada de blogue."

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Text"
msgstr "Texto"

#. TRANS: Field title on blog entry form.
msgid "Text of the blog entry."
msgstr "Texto da entrada de blogue."

#. TRANS: Button text to save a blog entry.
msgctxt "BUTTON"
msgid "Save"
msgstr "Gardar"


code:
# Translation of StatusNet - Blog to Interlingua (interlingua)
# Exported from translatewiki.net
#
# Author: McDutchie
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:53+0000\n"
"Language-Team: Interlingua <https://translatewiki.net/wiki/Portal:ia>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: ia\n"
"X-Message-Group: #out-statusnet-plugin-blog\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
msgid "Must be logged in to post a blog entry."
msgstr "Es necessari aperir session pro publicar un articulo de blog."

#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
msgid "Title required."
msgstr "Titulo requirite."

#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
msgid "Content required."
msgstr "Contento requirite."

#. TRANS: Page title after sending a notice.
msgid "Blog entry saved"
msgstr "Articulo de blog salveguardate"

#. TRANS: Plugin description.
msgid "Let users write and share long-form texts."
msgstr "Permitte que usatores scribe e divide textos longe."

#. TRANS: Blog application title.
msgctxt "TITLE"
msgid "Blog"
msgstr "Blog"

#. TRANS: Exception thrown when there are too many activity objects.
msgid "Too many activity objects."
msgstr "Troppo de objectos de activitate."

#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
msgid "Wrong type for object."
msgstr "Typo errate pro iste objecto."

#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
msgid "Unknown verb for blog entries."
msgstr "Verbo incognite pro articulos de blog."

#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
#, php-format
msgid "No blog entry for notice %s."
msgstr "Nulle articulo de blog pro le nota %s."

#. TRANS: Client exception thrown when referring to a non-existing blog entry.
msgid "No such entry."
msgstr "Articulo non existe."

#. TRANS: Title for a blog entry without a title.
msgid "Untitled"
msgstr "Sin titulo"

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Title"
msgstr "Titulo"

#. TRANS: Field title on blog entry form.
msgid "Title of the blog entry."
msgstr "Le titulo del articulo de blog."

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Text"
msgstr "Texto"

#. TRANS: Field title on blog entry form.
msgid "Text of the blog entry."
msgstr "Le texto del articulo de blog."

#. TRANS: Button text to save a blog entry.
msgctxt "BUTTON"
msgid "Save"
msgstr "Salveguardar"


code:
# Translation of StatusNet - Blog to Italian (italiano)
# Exported from translatewiki.net
#
# Author: Ximo17
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
msgid "Must be logged in to post a blog entry."
msgstr "Bisogna effettuare l'accesso per poter scrivere qualcosa nel blog."

#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
msgid "Title required."
msgstr "Titolo richiesto."

#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
msgid "Content required."
msgstr "Contenuto richiesto."

#. TRANS: Page title after sending a notice.
msgid "Blog entry saved"
msgstr "Voce del blog salvata"

#. TRANS: Plugin description.
msgid "Let users write and share long-form texts."
msgstr ""
"Consentire agli utenti di scrivere e condividere testi con un formato lungo."

#. TRANS: Blog application title.
msgctxt "TITLE"
msgid "Blog"
msgstr "Blog"

#. TRANS: Exception thrown when there are too many activity objects.
msgid "Too many activity objects."
msgstr "Troppi oggetti dell'attività."

#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
msgid "Wrong type for object."
msgstr "Tipo di oggetto sbagliato."

#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
msgid "Unknown verb for blog entries."
msgstr "Verbo sconosciuto per le voci del blog."

#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
#, php-format
msgid "No blog entry for notice %s."
msgstr "Nessuna voce del blog per la notizia  %s ."

#. TRANS: Client exception thrown when referring to a non-existing blog entry.
msgid "No such entry."
msgstr "Nessuna voce."

#. TRANS: Title for a blog entry without a title.
msgid "Untitled"
msgstr "Senza titolo"

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Title"
msgstr "Titolo"

#. TRANS: Field title on blog entry form.
msgid "Title of the blog entry."
msgstr "Titolo della voce del blog."

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Text"
msgstr "Testo"

#. TRANS: Field title on blog entry form.
msgid "Text of the blog entry."
msgstr "Testo della voce del blog."

#. TRANS: Button text to save a blog entry.
msgctxt "BUTTON"
msgid "Save"
msgstr "Salva"


code:
# Translation of StatusNet - Blog to Lithuanian (lietuvių)
# Exported from translatewiki.net
#
# Author: Eitvys200
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
"Language-Team: Lithuanian <https://translatewiki.net/wiki/Portal:lt>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: lt\n"
"X-Message-Group: #out-statusnet-plugin-blog\n"
"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
"2 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"

#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
msgid "Must be logged in to post a blog entry."
msgstr "Turite būti prisijungęs, kad galėtumėte rašyti dienoraščio įrašą."

#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
msgid "Title required."
msgstr "Pavadinimas būtinas."

#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
msgid "Content required."
msgstr "Turinys būtinas."

#. TRANS: Page title after sending a notice.
msgid "Blog entry saved"
msgstr "Dienoraščio įrašas išsaugotas"

#. TRANS: Plugin description.
msgid "Let users write and share long-form texts."
msgstr ""

#. TRANS: Blog application title.
msgctxt "TITLE"
msgid "Blog"
msgstr "Dienoraštis"

#. TRANS: Exception thrown when there are too many activity objects.
msgid "Too many activity objects."
msgstr "Per daug aktyvių objektui."

#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
msgid "Wrong type for object."
msgstr ""

#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
msgid "Unknown verb for blog entries."
msgstr ""

#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
#, php-format
msgid "No blog entry for notice %s."
msgstr ""

#. TRANS: Client exception thrown when referring to a non-existing blog entry.
msgid "No such entry."
msgstr "Tokio įrašo nėra."

#. TRANS: Title for a blog entry without a title.
msgid "Untitled"
msgstr ""

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Title"
msgstr ""

#. TRANS: Field title on blog entry form.
msgid "Title of the blog entry."
msgstr ""

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Text"
msgstr "Tekstas"

#. TRANS: Field title on blog entry form.
msgid "Text of the blog entry."
msgstr ""

#. TRANS: Button text to save a blog entry.
msgctxt "BUTTON"
msgid "Save"
msgstr "Išsaugoti"


code:
# Translation of StatusNet - Blog to Macedonian (македонски)
# Exported from translatewiki.net
#
# Author: Bjankuloski06
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
"Language-Team: Macedonian <https://translatewiki.net/wiki/Portal:mk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: mk\n"
"X-Message-Group: #out-statusnet-plugin-blog\n"
"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"

#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
msgid "Must be logged in to post a blog entry."
msgstr "Мора да сте најавени за да објавите блоговски запис."

#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
msgid "Title required."
msgstr "Се бара наслов."

#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
msgid "Content required."
msgstr "Се бара содржина."

#. TRANS: Page title after sending a notice.
msgid "Blog entry saved"
msgstr "Блоговскиот запис е зачуван."

#. TRANS: Plugin description.
msgid "Let users write and share long-form texts."
msgstr ""
"Им овозможува на корисниците да пишуваат и споделуваат текстови во долг "
"облик."

#. TRANS: Blog application title.
msgctxt "TITLE"
msgid "Blog"
msgstr "Блог"

#. TRANS: Exception thrown when there are too many activity objects.
msgid "Too many activity objects."
msgstr "Премногу објекти на активност."

#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
msgid "Wrong type for object."
msgstr "Погрешен тип на објект."

#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
msgid "Unknown verb for blog entries."
msgstr "Непознат глаголот за блоговските записи."

#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
#, php-format
msgid "No blog entry for notice %s."
msgstr "Нема блоговски запис за забелешката %s."

#. TRANS: Client exception thrown when referring to a non-existing blog entry.
msgid "No such entry."
msgstr "Нема таква ставка."

#. TRANS: Title for a blog entry without a title.
msgid "Untitled"
msgstr "Без наслов"

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Title"
msgstr "Наслов"

#. TRANS: Field title on blog entry form.
msgid "Title of the blog entry."
msgstr "Наслов на блоговскиот запис."

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Text"
msgstr "Текст"

#. TRANS: Field title on blog entry form.
msgid "Text of the blog entry."
msgstr "Текст на блоговскиот запис."

#. TRANS: Button text to save a blog entry.
msgctxt "BUTTON"
msgid "Save"
msgstr "Зачувај"


code:
# Translation of StatusNet - Blog to Dutch (Nederlands)
# Exported from translatewiki.net
#
# Author: SPQRobin
# Author: Siebrand
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
"Language-Team: Dutch <https://translatewiki.net/wiki/Portal:nl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: nl\n"
"X-Message-Group: #out-statusnet-plugin-blog\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
msgid "Must be logged in to post a blog entry."
msgstr "U moet aangemeld zijn om een blogbericht te posten."

#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
msgid "Title required."
msgstr "Titel is verplicht."

#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
msgid "Content required."
msgstr "Inhoud is verplicht."

#. TRANS: Page title after sending a notice.
msgid "Blog entry saved"
msgstr "Blogbericht is opgeslagen"

#. TRANS: Plugin description.
msgid "Let users write and share long-form texts."
msgstr "Laat gebruikers langere teksten schrijven en delen."

#. TRANS: Blog application title.
msgctxt "TITLE"
msgid "Blog"
msgstr "Blog"

#. TRANS: Exception thrown when there are too many activity objects.
msgid "Too many activity objects."
msgstr "Te veel activiteitobjecten."

#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
msgid "Wrong type for object."
msgstr "Verkeerde type voor object."

#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
msgid "Unknown verb for blog entries."
msgstr "Onbekende werkwoord voor blogberichten."

#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
#, php-format
msgid "No blog entry for notice %s."
msgstr "Er is geen blogbericht voor de mededeling %s."

#. TRANS: Client exception thrown when referring to a non-existing blog entry.
msgid "No such entry."
msgstr "Geen dergelijke vermelding."

#. TRANS: Title for a blog entry without a title.
msgid "Untitled"
msgstr "Zonder titel"

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Title"
msgstr "Titel"

#. TRANS: Field title on blog entry form.
msgid "Title of the blog entry."
msgstr "Titel van het blogbericht."

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Text"
msgstr "Tekst"

#. TRANS: Field title on blog entry form.
msgid "Text of the blog entry."
msgstr "Tekst van het blogbericht."

#. TRANS: Button text to save a blog entry.
msgctxt "BUTTON"
msgid "Save"
msgstr "Opslaan"


code:
# Translation of StatusNet - Blog to Tagalog (Tagalog)
# Exported from translatewiki.net
#
# Author: AnakngAraw
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
msgid "Must be logged in to post a blog entry."
msgstr "Kailangang nakalagda upang makapagpaskil ng isang pagpapasok ng blog."

#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
msgid "Title required."
msgstr "Kailangan ang pamagat."

#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
msgid "Content required."
msgstr "Kailangang may nilalaman."

#. TRANS: Page title after sending a notice.
msgid "Blog entry saved"
msgstr "Nasagip ang pagpapasok ng blog"

#. TRANS: Plugin description.
msgid "Let users write and share long-form texts."
msgstr ""
"Payagan ang mga tagagamit na makapagsulat at magsalo ng mga tekstong "
"mahahaba."

#. TRANS: Blog application title.
msgctxt "TITLE"
msgid "Blog"
msgstr "Blog"

#. TRANS: Exception thrown when there are too many activity objects.
msgid "Too many activity objects."
msgstr "Masyadong maraming mga bagay ng gawain."

#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
msgid "Wrong type for object."
msgstr "Maling uri para sa bagay."

#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
msgid "Unknown verb for blog entries."
msgstr "Hindi nalalamang pandiwa para sa mga pagpapasok ng blog."

#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
#, php-format
msgid "No blog entry for notice %s."
msgstr "Walang pagpapasok ng blog para sa pabatid na %s."

#. TRANS: Client exception thrown when referring to a non-existing blog entry.
msgid "No such entry."
msgstr "Walang ganyang pagpapasok."

#. TRANS: Title for a blog entry without a title.
msgid "Untitled"
msgstr "Walang pamagat"

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Title"
msgstr "Pamagat"

#. TRANS: Field title on blog entry form.
msgid "Title of the blog entry."
msgstr "Pamagat ng pagpapasok ng blog."

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Text"
msgstr "Teksto"

#. TRANS: Field title on blog entry form.
msgid "Text of the blog entry."
msgstr "Pamagat ng pagpapasok ng blog."

#. TRANS: Button text to save a blog entry.
msgctxt "BUTTON"
msgid "Save"
msgstr "Sagipin"


code:
# Translation of StatusNet - Blog to Turkish (Türkçe)
# Exported from translatewiki.net
#
# Author: Emperyan
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blog\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
"Language-Team: Turkish <https://translatewiki.net/wiki/Portal:tr>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-02-25 15:25:35+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: tr\n"
"X-Message-Group: #out-statusnet-plugin-blog\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#. TRANS: Client exception thrown when trying to post a blog entry while not logged in.
msgid "Must be logged in to post a blog entry."
msgstr ""

#. TRANS: Client exception thrown when trying to post a blog entry without providing a title.
msgid "Title required."
msgstr "Başlık gerekli."

#. TRANS: Client exception thrown when trying to post a blog entry without providing content.
msgid "Content required."
msgstr "İçerik gerekli."

#. TRANS: Page title after sending a notice.
msgid "Blog entry saved"
msgstr "Günce girdisini kaydedildi."

#. TRANS: Plugin description.
msgid "Let users write and share long-form texts."
msgstr ""

#. TRANS: Blog application title.
msgctxt "TITLE"
msgid "Blog"
msgstr "Günce"

#. TRANS: Exception thrown when there are too many activity objects.
msgid "Too many activity objects."
msgstr ""

#. TRANS: Exception thrown when blog plugin comes across a non-blog entry type object.
msgid "Wrong type for object."
msgstr ""

#. TRANS: Exception thrown when blog plugin comes across a undefined verb.
msgid "Unknown verb for blog entries."
msgstr "Günce girişleri için bilinmeyen bir eylem."

#. TRANS: Exception thrown when requesting a non-existing blog entry for notice.
#, php-format
msgid "No blog entry for notice %s."
msgstr ""

#. TRANS: Client exception thrown when referring to a non-existing blog entry.
msgid "No such entry."
msgstr "Böyle bir girdi yok."

#. TRANS: Title for a blog entry without a title.
msgid "Untitled"
msgstr "Başlıksız"

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Title"
msgstr "Başlık"

#. TRANS: Field title on blog entry form.
msgid "Title of the blog entry."
msgstr ""

#. TRANS: Field label on blog entry form.
msgctxt "LABEL"
msgid "Text"
msgstr "Metin"

#. TRANS: Field title on blog entry form.
msgid "Text of the blog entry."
msgstr ""

#. TRANS: Button text to save a blog entry.
msgctxt "BUTTON"
msgid "Save"
msgstr "Kaydet"


code:
<?php
/**
 * StatusNet, the distributed open-source microblogging tool
 *
 * Plugin to check submitted notices with blogspam.net
 *
 * PHP version 5
 *
 * LICENCE: This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @category  Plugin
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @author    Brion Vibber <brion@status.net>
 * @copyright 2009 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    exit(1);
}

define('BLOGSPAMNETPLUGIN_VERSION', '0.1');

/**
 * Plugin to check submitted notices with blogspam.net
 *
 * When new notices are saved, we check their text with blogspam.net (or
 * a compatible service).
 *
 * Blogspam.net is supposed to catch blog comment spam, and I found that
 * some of its tests (min/max size, bayesian match) gave a lot of false positives.
 * So, I've turned those tests off by default. This may not get as many
 * hits, but it's better than nothing.
 *
 * @category Plugin
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
 * @link     http://status.net/
 *
 * @see      Event
 */
class BlogspamNetPlugin extends Plugin
{
    var $baseUrl = 'http://test.blogspam.net:8888/';

    function __construct($url=null)
    {
        parent::__construct();
        if ($url) {
            $this->baseUrl = $url;
        }
    }

    function onStartNoticeSave($notice)
    {
        $args = $this->testArgs($notice);
        common_debug("Blogspamnet args = " . print_r($args, TRUE));
        $requestBody = xmlrpc_encode_request('testComment', array($args));

        $request = new HTTPClient($this->baseUrl, HTTPClient::METHOD_POST);
        $request->setHeader('Content-Type', 'text/xml');
        $request->setBody($requestBody);
        $httpResponse = $request->send();

        $response = xmlrpc_decode($httpResponse->getBody());
        if (xmlrpc_is_fault($response)) {
            throw new ServerException("$response[faultString] ($response[faultCode])", 500);
        } else {
            common_debug("Blogspamnet results = " . $response);
            if (preg_match('/^ERROR(:(.*))?$/', $response, $match)) {
                // TRANS: Server exception thrown when blogspam.net returns error status.
                // TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
                throw new ServerException(sprintf(_m('Error from %1$s: %2$s'), $this->baseUrl, $match[2]), 500);
            } else if (preg_match('/^SPAM(:(.*))?$/', $response, $match)) {
                // TRANS: Server exception thrown when blogspam.net returns spam status.
                // TRANS: Does not end with period because of unknown contents for %s (spam match).
                throw new ClientException(sprintf(_m('Spam checker results: %s'), $match[2]), 400);
            } else if (preg_match('/^OK$/', $response)) {
                // don't do anything
            } else {
                // TRANS: Server exception thrown when blogspam.net returns an unexpected status.
                // TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
                throw new ServerException(sprintf(_m('Unexpected response from %1$s: %2$s'), $this->baseUrl, $response), 500);
            }
        }
        return true;
    }

    function testArgs($notice)
    {
        $args = array();
        $args['comment'] = $notice->content;
        $args['ip'] = $this->getClientIP();

        if (isset($_SERVER) && array_key_exists('HTTP_USER_AGENT', $_SERVER)) {
            $args['agent'] = $_SERVER['HTTP_USER_AGENT'];
        }

        $profile = $notice->getProfile();

        if ($profile && $profile->homepage) {
            $args['link'] = $profile->homepage;
        }

        if ($profile && $profile->fullname) {
            $args['name'] = $profile->fullname;
        } else {
            $args['name'] = $profile->nickname;
        }

        $args['site'] = common_root_url();
        $args['version'] = $this->userAgent();

        $args['options'] = "max-size=" . common_config('site','textlimit') . ",min-size=0,min-words=0,exclude=bayasian";

        return $args;
    }

    function getClientIP()
    {
        if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
            // Note: order matters here; use proxy-forwarded stuff first
            foreach (array('HTTP_X_FORWARDED_FOR', 'CLIENT-IP', 'REMOTE_ADDR') as $k) {
                if (isset($_SERVER[$k])) {
                    return $_SERVER[$k];
                }
            }
        }
        return '127.0.0.1';
    }

    function version()
    {
        return BLOGSPAMNETPLUGIN_VERSION;
    }

    function onPluginVersion(&$versions)
    {
        $versions[] = array('name' => 'BlogspamNet',
                            'version' => BLOGSPAMNETPLUGIN_VERSION,
                            'author' => 'Evan Prodromou, Brion Vibber',
                            'homepage' => 'http://status.net/wiki/Plugin:BlogspamNet',
                            'rawdescription' =>
                            // TRANS: Plugin description.
                            _m('Plugin to check submitted notices with blogspam.net.'));
        return true;
    }
}


code:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#: BlogspamNetPlugin.php:87
#, php-format
msgid "Error from %1$s: %2$s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#: BlogspamNetPlugin.php:91
#, php-format
msgid "Spam checker results: %s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#: BlogspamNetPlugin.php:97
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr ""

#. TRANS: Plugin description.
#: BlogspamNetPlugin.php:159
msgid "Plugin to check submitted notices with blogspam.net."
msgstr ""


code:
# Translation of StatusNet - BlogspamNet to Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
# Exported from translatewiki.net
#
# Author: EugeneZelenko
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-09 18:34+0000\n"
"PO-Revision-Date: 2011-04-09 18:36:41+0000\n"
"Language-Team: Belarusian (Taraškievica orthography) <http://translatewiki."
"net/wiki/Portal:be-tarask>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-04-03 13:40:22+0000\n"
"X-Generator: MediaWiki 1.18alpha (r85732); Translate extension (2011-03-11)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: be-tarask\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr ""

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr ""
"Дапаўненьне для праверкі дасланых абвяшчэньняў з дапамогай blogspam.net."


code:
# Translation of StatusNet - BlogspamNet to Breton (Brezhoneg)
# Exported from translatewiki.net
#
# Author: Fulup
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-09 18:34+0000\n"
"PO-Revision-Date: 2011-04-09 18:36:41+0000\n"
"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-04-03 13:40:22+0000\n"
"X-Generator: MediaWiki 1.18alpha (r85732); Translate extension (2011-03-11)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: br\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr ""

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "Astenn evit gwiriañ gant blogspam.net ar c'hmennoù kaset."


code:
# Translation of StatusNet - BlogspamNet to German (Deutsch)
# Exported from translatewiki.net
#
# Author: Giftpflanze
# Author: The Evil IP address
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
"Language-Team: German <https://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:14:59+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr "Fehler von %1$s: %2$s"

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr "Spamüberprüfungsergebnisse: %s"

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr "Unerwartete Antwort von %1$s: %2$s"

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "Plugin zur Überprüfung von Nachrichten mit blogspam.net."


code:
# Translation of StatusNet - BlogspamNet to Spanish (español)
# Exported from translatewiki.net
#
# Author: Erchache2000
# Author: Translationista
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
"Language-Team: Spanish <https://translatewiki.net/wiki/Portal:es>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:14:59+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: es\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr "Error de %1$s: %2$s"

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr "Resultados de comprobador de spam:%s"

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr "Respuesta inesperada de  %1$s :%2$s"

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "Extensión para revisar los mensajes enviados con blogspam.net."


code:
# Translation of StatusNet - BlogspamNet to Basque (euskara)
# Exported from translatewiki.net
#
# Author: Artsuaga
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:14:59+0000\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr "%1$s(e)n akatsa: %2$s"

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr "Spam egiaztatzailearen emaitza: %s"

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr "Ezusteko erantzuna %1$s(e)n: %2$s"

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "blogspam.net-ekin oharrak egiaztatzeko plugina."


code:
# Translation of StatusNet - BlogspamNet to Finnish (Suomi)
# Exported from translatewiki.net
#
# Author: Nike
# Author: XTL
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-09 18:34+0000\n"
"PO-Revision-Date: 2011-04-09 18:36:41+0000\n"
"Language-Team: Finnish <http://translatewiki.net/wiki/Portal:fi>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-04-03 13:40:22+0000\n"
"X-Generator: MediaWiki 1.18alpha (r85732); Translate extension (2011-03-11)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fi\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr ""

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "Liitännäinen viestien tarkastamiseen blogspam.net-palvelun avulla."


code:
# Translation of StatusNet - BlogspamNet to French (français)
# Exported from translatewiki.net
#
# Author: Iketsi
# Author: Peter17
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:54+0000\n"
"Language-Team: French <https://translatewiki.net/wiki/Portal:fr>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:14:59+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: fr\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr "Erreur de %1$s : %2$s"

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr "Résultats du vérificateur de spam : %s"

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr "Réponse inattendue de %1$s : %2$s"

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "Extension pour vérifier avec blogspam.net les avis soumis."


code:
# Translation of StatusNet - BlogspamNet to Galician (galego)
# Exported from translatewiki.net
#
# Author: Toliño
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:55+0000\n"
"Language-Team: Galician <https://translatewiki.net/wiki/Portal:gl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:14:59+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: gl\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr "Erro de %1$s: %2$s"

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr "Resultados do verificador de spam: %s"

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr "Resposta inesperada de %1$s: %2$s"

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "Complemento para comprobar as notas enviadas con blogspam.net."


code:
# Translation of StatusNet - BlogspamNet to Hebrew (עברית)
# Exported from translatewiki.net
#
# Author: YaronSh
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-09 18:34+0000\n"
"PO-Revision-Date: 2011-04-09 18:36:41+0000\n"
"Language-Team: Hebrew <http://translatewiki.net/wiki/Portal:he>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-04-03 13:40:22+0000\n"
"X-Generator: MediaWiki 1.18alpha (r85732); Translate extension (2011-03-11)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: he\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr ""

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "תוסף לבדיקת ההתרעות הנשלחות מול blogspam.net."


code:
# Translation of StatusNet - BlogspamNet to Interlingua (interlingua)
# Exported from translatewiki.net
#
# Author: McDutchie
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:55+0000\n"
"Language-Team: Interlingua <https://translatewiki.net/wiki/Portal:ia>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:14:59+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: ia\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr "Error de %1$s: %2$s"

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr "Resultatos del controlo anti-spam: %s"

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr "Responsa inexpectate de %1$s: %2$s"

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "Plug-in pro verificar notas submittite contra blogspam.net."


code:
# Translation of StatusNet - BlogspamNet to Italian (italiano)
# Exported from translatewiki.net
#
# Author: Ximo17
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:55+0000\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:14:59+0000\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr "Errore da %1$s: %2$s"

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr "Risultati verifica spam: %s"

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr "Risposta inaspettata da %1$s: %2$s"

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "Plugin per controllare gli avvisi inviati con blogspam.net."


code:
# Translation of StatusNet - BlogspamNet to Lithuanian (lietuvių)
# Exported from translatewiki.net
#
# Author: Eitvys200
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:55+0000\n"
"Language-Team: Lithuanian <https://translatewiki.net/wiki/Portal:lt>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:14:59+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: lt\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
"2 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr "Klaida iš %1$s: %2$s"

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr "Šlamštas tikrintuvo rezultatai: %s"

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr "Netikėtas atsakymas iš %1$s: %2$s"

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr ""


code:
# Translation of StatusNet - BlogspamNet to Macedonian (македонски)
# Exported from translatewiki.net
#
# Author: Bjankuloski06
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:55+0000\n"
"Language-Team: Macedonian <https://translatewiki.net/wiki/Portal:mk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:14:59+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: mk\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr "Грешка од %1$s: %2$s"

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr "Резултати од проверката на спам: %s"

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr "Неочекуван одговор од %1$s: %2$s"

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "Приклучок за проверка на поднесените забелешки со blogspam.net."


code:
# Translation of StatusNet - BlogspamNet to Norwegian Bokmål (norsk (bokmål))
# Exported from translatewiki.net
#
# Author: Nghtwlkr
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:55+0000\n"
"Language-Team: Norwegian Bokmål <https://translatewiki.net/wiki/Portal:nb>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:14:59+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: nb\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr "Feil fra %1$s: %2$s"

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr "Uventet svar fra %1$s: %2$s"

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "Utvidelse for å sjekke innsendte notiser med blogspam.net."


code:
# Translation of StatusNet - BlogspamNet to Dutch (Nederlands)
# Exported from translatewiki.net
#
# Author: Siebrand
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:55+0000\n"
"Language-Team: Dutch <https://translatewiki.net/wiki/Portal:nl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:14:59+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: nl\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr "Fout van %1$s: %2$s"

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr "Spamcontroleresultaten: %s"

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr "Onverwacht antwoord van %1$s: %2$s"

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "Plug-in om mededelingen te controleren tegen blogspam.net."


code:
# Translation of StatusNet - BlogspamNet to Portuguese (Português)
# Exported from translatewiki.net
#
# Author: GTNS
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-09 18:34+0000\n"
"PO-Revision-Date: 2011-04-09 18:36:41+0000\n"
"Language-Team: Portuguese <http://translatewiki.net/wiki/Portal:pt>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-04-03 13:40:22+0000\n"
"X-Generator: MediaWiki 1.18alpha (r85732); Translate extension (2011-03-11)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr ""

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "Plugin para verificar mensagens submetidas com o blogspam.net."


code:
# Translation of StatusNet - BlogspamNet to Russian (русский)
# Exported from translatewiki.net
#
# Author: Александр Сигачёв
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:55+0000\n"
"Language-Team: Russian <https://translatewiki.net/wiki/Portal:ru>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:14:59+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: ru\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr "Результат проверки на спам: %s"

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr ""

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "Плагин для проверки отправленных сообщений с помощью blogspam.net."


code:
# Translation of StatusNet - BlogspamNet to Tagalog (Tagalog)
# Exported from translatewiki.net
#
# Author: AnakngAraw
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:55+0000\n"
"Language-Team: Tagalog <https://translatewiki.net/wiki/Portal:tl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:14:59+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: tl\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr "Kamalian mula sa %1$s: %2$s"

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr "Mga kinalabasan ng pangsuri ng basurang liham: %s"

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr "Hindi inaasahang tugon mula sa %1$s: %2$s"

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr ""
"Pamasak upang masuri ang ipinasang mga pabatid sa pamamagitan ng blogspam."
"net."


code:
# Translation of StatusNet - BlogspamNet to Ukrainian (українська)
# Exported from translatewiki.net
#
# Author: Boogie
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:55+0000\n"
"Language-Team: Ukrainian <https://translatewiki.net/wiki/Portal:uk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:14:59+0000\n"
"X-Generator: MediaWiki 1.20alpha (233fc08); Translate 2012-06-21\n"
"X-Translation-Project: translatewiki.net <https://translatewiki.net>\n"
"X-Language-Code: uk\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n%10 >= "
"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr "Помилка з %1$s: %2$s"

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr "Результати перевірки спаму: %s"

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr "Неочікувана відповідь від %1$s: %2$s"

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "Додаток для перевірки вказаних повідомлень на blogspam.net."


code:
# Translation of StatusNet - BlogspamNet to Simplified Chinese (中文(简体))
# Exported from translatewiki.net
#
# Author: ZhengYiFeng
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BlogspamNet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-04-09 18:34+0000\n"
"PO-Revision-Date: 2011-04-09 18:36:41+0000\n"
"Language-Team: Simplified Chinese <http://translatewiki.net/wiki/Portal:zh-"
"hans>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2011-04-03 13:40:22+0000\n"
"X-Generator: MediaWiki 1.18alpha (r85732); Translate extension (2011-03-11)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hans\n"
"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#. TRANS: Server exception thrown when blogspam.net returns error status.
#. TRANS: %1$s is the base URL, %2$s is the error (unknown contents; no period).
#, php-format
msgid "Error from %1$s: %2$s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns spam status.
#. TRANS: Does not end with period because of unknown contents for %s (spam match).
#, php-format
msgid "Spam checker results: %s"
msgstr ""

#. TRANS: Server exception thrown when blogspam.net returns an unexpected status.
#. TRANS: %1$s is the base URL, %2$s is the response (unknown contents; no period).
#, php-format
msgid "Unexpected response from %1$s: %2$s"
msgstr ""

#. TRANS: Plugin description.
msgid "Plugin to check submitted notices with blogspam.net."
msgstr "通过 blogspam.net 检查发布的消息的插件。"


code:
<?php
/**
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2010, StatusNet, Inc.
 *
 * A plugin to enable social-bookmarking functionality
 *
 * PHP version 5
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * @category  SocialBookmark
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2010 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    exit(1);
}

/**
 * Bookmark plugin main class
 *
 * @category  Bookmark
 * @package   StatusNet
 * @author    Brion Vibber <brionv@status.net>
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2010 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */
class BookmarkPlugin extends MicroAppPlugin
{
    const VERSION         = '0.1';
    const IMPORTDELICIOUS = 'BookmarkPlugin:IMPORTDELICIOUS';

    var $oldSaveNew = true;

    /**
     * Authorization for importing delicious bookmarks
     *
     * By default, everyone can import bookmarks except silenced people.
     *
     * @param Profile $profile Person whose rights to check
     * @param string  $right   Right to check; const value
     * @param boolean &$result Result of the check, writeable
     *
     * @return boolean hook value
     */
    function onUserRightsCheck($profile, $right, &$result)
    {
        if ($right == self::IMPORTDELICIOUS) {
            $result = !$profile->isSilenced();
            return false;
        }
        return true;
    }

    /**
     * Database schema setup
     *
     * @see Schema
     * @see ColumnDef
     *
     * @return boolean hook value; true means continue processing, false means stop.
     */
    function onCheckSchema()
    {
        $schema = Schema::get();

        $schema->ensureTable('bookmark', Bookmark::schemaDef());

        return true;
    }

    /**
     * Show the CSS necessary for this plugin
     *
     * @param Action $action the action being run
     *
     * @return boolean hook value
     */
    function onEndShowStyles($action)
    {
        $action->cssLink($this->path('css/bookmark.css'));
        return true;
    }

    function onEndShowScripts($action)
    {
        $action->script($this->path('js/bookmark.js'));
        return true;
    }

    /**
     * Map URLs to actions
     *
     * @param URLMapper $m path-to-action mapper
     *
     * @return boolean hook value; true means continue processing, false means stop.
     */
    public function onRouterInitialized(URLMapper $m)
    {
        if (common_config('singleuser', 'enabled')) {
            $nickname = User::singleUserNickname();
            $m->connect('bookmarks',
                        array('action' => 'bookmarks', 'nickname' => $nickname));
            $m->connect('bookmarks/rss',
                        array('action' => 'bookmarksrss', 'nickname' => $nickname));
        } else {
            $m->connect(':nickname/bookmarks',
                        array('action' => 'bookmarks'),
                        array('nickname' => Nickname::DISPLAY_FMT));
            $m->connect(':nickname/bookmarks/rss',
                        array('action' => 'bookmarksrss'),
                        array('nickname' => Nickname::DISPLAY_FMT));
        }

        $m->connect('api/bookmarks/:id.:format',
                    array('action' => 'ApiTimelineBookmarks',
                          'id' => Nickname::INPUT_FMT,
                          'format' => '(xml|json|rss|atom|as)'));

        $m->connect('main/bookmark/new',
                    array('action' => 'newbookmark'),
                    array('id' => '[0-9]+'));

        $m->connect('main/bookmark/popup',
                    array('action' => 'bookmarkpopup'));

        $m->connect('main/bookmark/import',
                    array('action' => 'importdelicious'));

        $m->connect('main/bookmark/forurl',
                    array('action' => 'bookmarkforurl'));

        $m->connect('bookmark/:id',
                    array('action' => 'showbookmark'),
                    array('id' => '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'));

        $m->connect('notice/by-url/:id',
                    array('action' => 'noticebyurl'),
                    array('id' => '[0-9]+'));

        return true;
    }

    /**
     * Add our two queue handlers to the queue manager
     *
     * @param QueueManager $qm current queue manager
     *
     * @return boolean hook value
     */
    function onEndInitializeQueueManager($qm)
    {
        $qm->connect('dlcsback', 'DeliciousBackupImporter');
        $qm->connect('dlcsbkmk', 'DeliciousBookmarkImporter');
        return true;
    }

    /**
     * Plugin version data
     *
     * @param array &$versions array of version data
     *
     * @return value
     */
    function onPluginVersion(&$versions)
    {
        $versions[] = array('name' => 'Bookmark',
                            'version' => self::VERSION,
                            'author' => 'Evan Prodromou, Stephane Berube, Jean Baptiste Favre',
                            'homepage' => 'http://status.net/wiki/Plugin:Bookmark',
                            'description' =>
                            // TRANS: Plugin description.
                            _m('Simple extension for supporting bookmarks. ') .
                            'BookmarkList feature has been developped by Stephane Berube. ' .
                            'Integration has been done by Jean Baptiste Favre.');
        return true;
    }

    /**
     * Load our document if requested
     *
     * @param string &$title  Title to fetch
     * @param string &$output HTML to output
     *
     * @return boolean hook value
     */
    function onStartLoadDoc(&$title, &$output)
    {
        if ($title == 'bookmarklet') {
            $filename = INSTALLDIR.'/plugins/Bookmark/bookmarklet';

            $c      = file_get_contents($filename);
            $output = common_markup_to_html($c);
            return false; // success!
        }

        return true;
    }

    /**
     * Show a link to our delicious import page on profile settings form
     *
     * @param Action $action Profile settings action being shown
     *
     * @return boolean hook value
     */
    function onEndProfileSettingsActions($action)
    {
        $user = common_current_user();

        if (!empty($user) && $user->hasRight(self::IMPORTDELICIOUS)) {
            $action->elementStart('li');
            $action->element('a',
                             array('href' => common_local_url('importdelicious')),
                             // TRANS: Link text in proile leading to import form.
                             _m('Import del.icio.us bookmarks'));
            $action->elementEnd('li');
        }

        return true;
    }

    /**
     * Modify the default menu to link to our custom action
     *
     * Using event handlers, it's possible to modify the default UI for pages
     * almost without limit. In this method, we add a menu item to the default
     * primary menu for the interface to link to our action.
     *
     * The Action class provides a rich set of events to hook, as well as output
     * methods.
     *
     * @param Action $action The current action handler. Use this to
     * do any output.
     *
     * @return boolean hook value; true means continue processing, false means stop.
     *
     * @see Action
     */
    function onEndPersonalGroupNav(Menu $menu, Profile $target, Profile $scoped=null)
    {
        $menu->menuItem(common_local_url('bookmarks', array('nickname' => $target->getNickname())),
                          // TRANS: Menu item in sample plugin.
                          _m('Bookmarks'),
                          // TRANS: Menu item title in sample plugin.
                          _m('A list of your bookmarks'), false, 'nav_timeline_bookmarks');
        return true;
    }

    function types()
    {
        return array(ActivityObject::BOOKMARK);
    }

    /**
     * When a notice is deleted, delete the related Bookmark
     *
     * @param Notice $notice Notice being deleted
     *
     * @return boolean hook value
     */
    function deleteRelated(Notice $notice)
    {
    	if ($this->isMyNotice($notice)) {

        	$nb = Bookmark::getByNotice($notice);

        	if (!empty($nb)) {
            	$nb->delete();
        	}
    	}

        return true;
    }

    /**
     * Save a bookmark from an activity
     *
     * @param Activity $activity Activity to save
     * @param Profile  $actor    Profile to use as author
     * @param array    $options  Options to pass to bookmark-saving code
     *
     * @return Notice resulting notice
     */
    function saveNoticeFromActivity(Activity $activity, Profile $actor, array $options=array())
    {
        $bookmark = $activity->objects[0];

        $relLinkEls = ActivityUtils::getLinks($bookmark->element, 'related');

        if (count($relLinkEls) < 1) {
            // TRANS: Client exception thrown when a bookmark is formatted incorrectly.
            throw new ClientException(_m('Expected exactly 1 link '.
                                        'rel=related in a Bookmark.'));
        }

        if (count($relLinkEls) > 1) {
            common_log(LOG_WARNING,
                       "Got too many link rel=related in a Bookmark.");
        }

        $linkEl = $relLinkEls[0];

        $url = $linkEl->getAttribute('href');

        $tags = array();

        foreach ($activity->categories as $category) {
            $tags[] = common_canonical_tag($category->term);
        }

        if (!empty($activity->time)) {
            $options['created'] = common_sql_date($activity->time);
        }

        // Fill in location if available

        $location = $activity->context->location;

        if ($location) {
            $options['lat'] = $location->lat;
            $options['lon'] = $location->lon;
            if ($location->location_id) {
                $options['location_ns'] = $location->location_ns;
                $options['location_id'] = $location->location_id;
            }
        }

        $options['groups']  = array();
        $options['replies'] = array();  // TODO: context->attention

        foreach ($activity->context->attention as $attnUrl=>$type) {
            try {
                $other = Profile::fromUri($attnUrl);
                if ($other->isGroup()) {
                    $options['groups'][] = $other->id;
                } else {
                    $options['replies'][] = $attnUrl;
                }
            } catch (UnknownUriException $e) {
                // We simply don't know this URI, despite lookup attempts.
            }
        }

        // Maintain direct reply associations
        // @fixme what about conversation ID?

        if (!empty($activity->context->replyToID)) {
            $orig = Notice::getKV('uri',
                                      $activity->context->replyToID);
            if (!empty($orig)) {
                $options['reply_to'] = $orig->id;
            }
        }

        return Bookmark::saveNew($actor,
                                 $bookmark->title,
                                 $url,
                                 $tags,
                                 $bookmark->summary,
                                 $options);
    }

    function activityObjectFromNotice(Notice $notice)
    {
        assert($this->isMyNotice($notice));

        common_log(LOG_INFO,
                   "Formatting notice {$notice->uri} as a bookmark.");

        $object = new ActivityObject();
        $nb = Bookmark::getByNotice($notice);

        $object->id      = $notice->uri;
        $object->type    = ActivityObject::BOOKMARK;
        $object->title   = $nb->title;
        $object->summary = $nb->description;
        $object->link    = $notice->getUrl();

        // Attributes of the URL

        $attachments = $notice->attachments();

        if (count($attachments) != 1) {
            // TRANS: Server exception thrown when a bookmark has multiple attachments.
            throw new ServerException(_m('Bookmark notice with the '.
                                        'wrong number of attachments.'));
        }

        $target = $attachments[0];

        $attrs = array('rel' => 'related',
                       'href' => $target->url);

        if (!empty($target->title)) {
            $attrs['title'] = $target->title;
        }

        $object->extra[] = array('link', $attrs, null);

        // Attributes of the thumbnail, if any

        try {
            $thumbnail = $target->getThumbnail();
            $tattrs = array('rel' => 'preview',
                            'href' => $thumbnail->url);

            if (!empty($thumbnail->width)) {
                $tattrs['media:width'] = $thumbnail->width;
            }

            if (!empty($thumbnail->height)) {
                $tattrs['media:height'] = $thumbnail->height;
            }

            $object->extra[] = array('link', $tattrs, null);
        } catch (UnsupportedMediaException $e) {
            // No image thumbnail metadata available
        }

        return $object;
    }

    function entryForm($out)
    {
        return new InitialBookmarkForm($out);
    }

    function tag()
    {
        return 'bookmark';
    }

    function appTitle()
    {
        // TRANS: Application title.
        return _m('TITLE','Bookmark');
    }

    function onEndUpgrade()
    {
        // Version 0.9.x of the plugin didn't stamp notices
        // with verb and object-type (for obvious reasons). Update
        // those notices here.

        $notice = new Notice();

        $notice->whereAdd('exists (select uri from bookmark where bookmark.uri = notice.uri)');
        $notice->whereAdd('((object_type is null) or (object_type = "' .ActivityObject::NOTE.'"))');

        $notice->find();

        while ($notice->fetch()) {
            $original = clone($notice);
            $notice->verb        = ActivityVerb::POST;
            $notice->object_type = ActivityObject::BOOKMARK;
            $notice->update($original);
        }
    }

    public function activityObjectOutputJson(ActivityObject $obj, array &$out)
    {
        assert($obj->type == ActivityObject::BOOKMARK);

        $bm = Bookmark::getKV('uri', $obj->id);

        if (empty($bm)) {
            throw new ServerException("Unknown bookmark: " . $obj->id);
        }

        $out['displayName'] = $bm->title;
        $out['targetUrl']   = $bm->url;

        return true;
    }

    protected function showNoticeItemNotice(NoticeListItem $nli)
    {
        $nli->out->elementStart('div', 'entry-title');
        $nli->showAuthor();
        $nli->showContent();
        $nli->out->elementEnd('div');
    }

    protected function showNoticeContent(Notice $stored, HTMLOutputter $out, Profile $scoped=null)
    {
        $nb = Bookmark::getByNotice($stored);

        if (empty($nb)) {
            common_log(LOG_ERR, "No bookmark for notice {$stored->id}");
            parent::showContent();
            return;
        } else if (empty($nb->url)) {
            common_log(LOG_ERR, "No url for bookmark {$nb->id} for notice {$stored->id}");
            parent::showContent();
            return;
        }

        $profile = $stored->getProfile();

        // Whether to nofollow
        $attrs = array('href' => $nb->url, 'class' => 'bookmark-title');

        $nf = common_config('nofollow', 'external');

        if ($nf == 'never' || ($nf == 'sometimes' and $out instanceof ShowstreamAction)) {
            $attrs['rel'] = 'external';
        } else {
            $attrs['rel'] = 'nofollow external';
        }

        $out->elementStart('h3');
        $out->element('a', $attrs, $nb->title);
        $out->elementEnd('h3');

        // Replies look like "for:" tags
        $replies = $stored->getReplies();
        $tags = $stored->getTags();

        if (!empty($nb->description)) {
            $out->element('p',
                          array('class' => 'bookmark-description'),
                          $nb->description);
        }

        if (!empty($replies) || !empty($tags)) {

            $out->elementStart('ul', array('class' => 'bookmark-tags'));

            foreach ($replies as $reply) {
                $other = Profile::getKV('id', $reply);
                if (!empty($other)) {
                    $out->elementStart('li');
                    $out->element('a', array('rel' => 'tag',
                                             'href' => $other->profileurl,
                                             'title' => $other->getBestName()),
                                  sprintf('for:%s', $other->nickname));
                    $out->elementEnd('li');
                    $out->text(' ');
                }
            }

            foreach ($tags as $tag) {
                $tag = trim($tag);
                if (!empty($tag)) {
                    $out->elementStart('li');
                    $out->element('a',
                                  array('rel' => 'tag',
                                        'href' => Notice_tag::url($tag)),
                                  $tag);
                    $out->elementEnd('li');
                    $out->text(' ');
                }
            }

            $out->elementEnd('ul');
        }

    }
}


code: Depends on the oEmbed plugin (Oembed).

path: plugins/Bookmark/README