code:
# Translation of StatusNet - Activity 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 - Activity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:28+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-01-30 18:15:05+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-activity\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Text for "joined list" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group home URL, %4$s is a group name.
#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s joined the group %4$s."
msgstr "%2$s s'ha unit al grup %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s started following %4$s."
msgstr ""
"%2$s ha començat a seguir %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) started following %3$s (%4$s)."
msgstr "%1$s (%2$s) ha començat a seguir %3$s (%4$s)."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s stopped following %4$s."
msgstr ""
"%2$s ha deixat de seguir %4$s."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) stopped following %3$s (%4$s)."
msgstr "%1$s (%2$s) ha deixat de seguir %3$s (%4$s)."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid "%2$s liked %4$s's update."
msgstr ""
"A %2$s li ha agradat l'actualització de %4$s."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) liked %3$s's status (%4$s)."
msgstr "A %1$s (%2$s) li ha agradat l'estat de %3$s (%4$s)."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid ""
"%2$s stopped liking %4$s's update."
msgstr ""
"A %2$s li ha deixat d'agradar l'actualització de %4$s."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) stopped liking %3$s's status (%4$s)."
msgstr "A %1$s (%2$s) li ha deixat d'agradar l'estat de %3$s (%4$s)."

#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) joined the group %3$s (%4$s)."
msgstr "%1$s (%2$s) s'ha unit al grup %3$s (%4$s)."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s left the group %4$s."
msgstr "%2$s ha deixat el grup %4$s."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) left the group %3$s (%4$s)."
msgstr "%1$s (%2$s) ha deixat el grup %3$s (%4$s)."

#. TRANS: Plugin description.
msgid "Emits notices when social activities happen."
msgstr "Emet avisos quan passen activitats socials."


code:
# Translation of StatusNet - Activity to German (Deutsch)
# Exported from translatewiki.net
#
# Author: Marcel083
# Author: Tiin
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Activity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:29+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:15:05+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-activity\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Text for "joined list" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group home URL, %4$s is a group name.
#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s joined the group %4$s."
msgstr ""
"%2$s hat die Gruppe %4$s betreten."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s started following %4$s."
msgstr "%2$s folgt jetzt %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) started following %3$s (%4$s)."
msgstr "%1$s (%2$s) folgt jetzt %3$s (%4$s)."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s stopped following %4$s."
msgstr ""
"%2$s folgt jetzt nicht mehr %4$s."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) stopped following %3$s (%4$s)."
msgstr "%1$s (%2$s) folgt jetzt nicht mehr %3$s (%4$s)."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid "%2$s liked %4$s's update."
msgstr "%2$s gefällt %4$s's Post."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) liked %3$s's status (%4$s)."
msgstr "%1$s (%2$s) gefällt %3$s's Status (%4$s)."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid ""
"%2$s stopped liking %4$s's update."
msgstr ""
"%2$s gefällt %4$s's Update nicht "
"mehr."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) stopped liking %3$s's status (%4$s)."
msgstr "%1$s (%2$s) gefällt %3$s's Status (%4$s) nicht mehr."

#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) joined the group %3$s (%4$s)."
msgstr "%1$s (%2$s) hat die Gruppe %3$s (%4$s) betreten."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s left the group %4$s."
msgstr ""
"%2$s hat die Gruppe %4$s verlassen."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) left the group %3$s (%4$s)."
msgstr "%1$s (%2$s) hat die Gruppe %3$s (%4$s) verlassen."

#. TRANS: Plugin description.
msgid "Emits notices when social activities happen."
msgstr "Gibt Hinweise, wenn soziale Aktivitäten geschehen."

license: mit


code:
# Translation of StatusNet - Activity 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 - Activity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:29+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:15:05+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-activity\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Text for "joined list" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group home URL, %4$s is a group name.
#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s joined the group %4$s."
msgstr "%2$s se unió al grupo %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s started following %4$s."
msgstr "%2$s empieza a seguir %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) started following %3$s (%4$s)."
msgstr "%1$s (%2$s) empieza a seguir %3$s (%4$s)."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s stopped following %4$s."
msgstr "%2$s deja de seguir %4$s."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) stopped following %3$s (%4$s)."
msgstr "%1$s (%2$s) deja de seguir %3$s (%4$s)."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid "%2$s liked %4$s's update."
msgstr ""
"%2$s le gusta %4$s's actualizaciones</"
"a>."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) liked %3$s's status (%4$s)."
msgstr "%1$s (%2$s) le gusta el estado de %3$s's (%4$s)."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid ""
"%2$s stopped liking %4$s's update."
msgstr ""
"%2$s deja de seguir las actualizaciones de %4$s."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) stopped liking %3$s's status (%4$s)."
msgstr "%1$s( %2$s ) dejó de seguir el estado de %3$s ( %4$s )."

#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) joined the group %3$s (%4$s)."
msgstr "%1$s( %2$s ) se unió al grupo  %3$s  ( %4$s )."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s left the group %4$s."
msgstr "%2$s deja al grupo %4$s."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) left the group %3$s (%4$s)."
msgstr "%1$s( %2$s ) deja al grupo  %3$s  ( %4$s )."

#. TRANS: Plugin description.
msgid "Emits notices when social activities happen."
msgstr "Emite mensajes cuando se producen actividades sociales."


code:
# Translation of StatusNet - Activity 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 - Activity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:29+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-01-30 18:15:05+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-activity\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Text for "joined list" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group home URL, %4$s is a group name.
#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s joined the group %4$s."
msgstr "%2$s %4$s taldekoa da orain."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s started following %4$s."
msgstr ""
"%2$s %4$s jarraitzen hasi da."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) started following %3$s (%4$s)."
msgstr "%1$s (%2$s) %3$s (%4$s) jarraitzen hasi da."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s stopped following %4$s."
msgstr ""
"%2$s(e)k %4$s jarraitzeari utzi "
"dio."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) stopped following %3$s (%4$s)."
msgstr "%1$s(e)k (%2$s) %3$s (%4$s) jarraitzeari utzi dio."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid "%2$s liked %4$s's update."
msgstr ""
"%2$s(e)k %4$s(r)en eguneraketa "
"atsegin du."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) liked %3$s's status (%4$s)."
msgstr "%1$s(e)k (%2$s) %3$s(r)en egoera (%4$s) atsegin du."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid ""
"%2$s stopped liking %4$s's update."
msgstr ""
"%2$s(r)i ez zaio dagoeneko %4$s(r)en "
"eguneraketa atsegin."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) stopped liking %3$s's status (%4$s)."
msgstr "%1$s(r)i (%2$s) ez zaio dagoeneko %3$s(r)en egoera (%4$s) atsegin."

#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) joined the group %3$s (%4$s)."
msgstr "%1$s (%2$s) %3$s (%4$s) taldera batu da."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s left the group %4$s."
msgstr ""
"%2$s(e)k %4$s taldea utzi du."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) left the group %3$s (%4$s)."
msgstr "%1$s(e)k (%2$s) %3$s (%4$s) taldea utzi du."

#. TRANS: Plugin description.
msgid "Emits notices when social activities happen."
msgstr ""
"Oharrak argitaratzen ditu iharduera bat dagoenean (lagun egin, taldekide "
"izan, taldea utzi...)."


code:
# Translation of StatusNet - Activity to French (français)
# Exported from translatewiki.net
#
# Author: Gomoko
# Author: Jean-Frédéric
# Author: Od1n
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Activity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:29+0000\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:15:05+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: Text for "joined list" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group home URL, %4$s is a group name.
#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s joined the group %4$s."
msgstr ""
"%2$s a rejoint le groupe %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s started following %4$s."
msgstr "%2$s suit désormais %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) started following %3$s (%4$s)."
msgstr "%1$s (%2$s) suit désormais %3$s (%4$s)."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s stopped following %4$s."
msgstr "%2$s a cessé de suivre %4$s."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) stopped following %3$s (%4$s)."
msgstr "%1$s (%2$s) a arrêté de suivre %3$s (%4$s)."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid "%2$s liked %4$s's update."
msgstr "%2$s a aimé %4$s's update."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) liked %3$s's status (%4$s)."
msgstr "%1$s (%2$s) a aimé le statut de %3$s (%4$s)."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid ""
"%2$s stopped liking %4$s's update."
msgstr ""
"%2$s n'aime plus les mises à jour de %4"
"$s."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) stopped liking %3$s's status (%4$s)."
msgstr "%1$s (%2$s) n'aime plus le statut de %3$s (%4$s)."

#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) joined the group %3$s (%4$s)."
msgstr "%1$s (%2$s) a rejoint le groupe %3$s (%4$s)."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s left the group %4$s."
msgstr ""
"%2$s a quitté le groupe %4$s."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) left the group %3$s (%4$s)."
msgstr "%1$s (%2$s) a quitté le groupe %3$s (%4$s)."

#. TRANS: Plugin description.
msgid "Emits notices when social activities happen."
msgstr "Émettre des avis lorsque des activités sociales se produisent."


code:
# Translation of StatusNet - Activity 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 - Activity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:29+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:15:05+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-activity\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Text for "joined list" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group home URL, %4$s is a group name.
#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s joined the group %4$s."
msgstr "%2$s uniuse ao grupo %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s started following %4$s."
msgstr ""
"%2$s comezou a seguir a %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) started following %3$s (%4$s)."
msgstr "%1$s (%2$s) comezou a seguir a %3$s (%4$s)."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s stopped following %4$s."
msgstr ""
"%2$s deixou de seguir a %4$s."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) stopped following %3$s (%4$s)."
msgstr "%1$s (%2$s) deixou de seguir a %3$s (%4$s)."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid "%2$s liked %4$s's update."
msgstr ""
"%2$s gustou da actualización de %4$s</"
"a>."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) liked %3$s's status (%4$s)."
msgstr "%1$s (%2$s) gustou do estado de %3$s (%4$s)."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid ""
"%2$s stopped liking %4$s's update."
msgstr ""
"%2$s deixou de gustar da actualización "
"de %4$s."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) stopped liking %3$s's status (%4$s)."
msgstr "%1$s (%2$s) deixou de gustar do estado de %3$s (%4$s)."

#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) joined the group %3$s (%4$s)."
msgstr "%1$s (%2$s) uniuse ao grupo %3$s (%4$s)."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s left the group %4$s."
msgstr "%2$s deixou o grupo %4$s."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) left the group %3$s (%4$s)."
msgstr "%1$s (%2$s) deixou o grupo %3$s (%4$s)."

#. TRANS: Plugin description.
msgid "Emits notices when social activities happen."
msgstr "Emite notificacións cando acontecen actividades sociais."


code:
# Translation of StatusNet - Activity 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 - Activity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:29+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:15:05+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-activity\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Text for "joined list" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group home URL, %4$s is a group name.
#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s joined the group %4$s."
msgstr ""
"%2$s adhereva al gruppo %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s started following %4$s."
msgstr ""
"%2$s comenciava a sequer %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) started following %3$s (%4$s)."
msgstr "%1$s (%2$s) comenciava a sequer %3$s (%4$s)."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s stopped following %4$s."
msgstr "%2$s cessava de sequer %4$s."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) stopped following %3$s (%4$s)."
msgstr "%1$s (%2$s) cessava de sequer %3$s (%4$s)."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid "%2$s liked %4$s's update."
msgstr ""
"%2$s amava le actualisation de %4$s</"
"a>."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) liked %3$s's status (%4$s)."
msgstr "%1$s (%2$s) amava le stato de %3$s (%4$s)."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid ""
"%2$s stopped liking %4$s's update."
msgstr ""
"%2$s cessava de amar le actualisation "
"de %4$s."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) stopped liking %3$s's status (%4$s)."
msgstr "%1$s (%2$s) cessava de amar le stato de %3$s (%4$s)."

#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) joined the group %3$s (%4$s)."
msgstr "%1$s (%2$s) adhereva al gruppo %3$s (%4$s)."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s left the group %4$s."
msgstr "%2$s quitava le gruppo %4$s."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) left the group %3$s (%4$s)."
msgstr "%1$s (%2$s) quitava le gruppo %3$s (%4$s)."

#. TRANS: Plugin description.
msgid "Emits notices when social activities happen."
msgstr "Emitte notificationes quando activitates social occurre."


code:
# Translation of StatusNet - Activity 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 - Activity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:29+0000\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:15:05+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: Text for "joined list" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group home URL, %4$s is a group name.
#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s joined the group %4$s."
msgstr ""
"%2$s unisciti al gruppo %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s started following %4$s."
msgstr ""
"%2$s ha iniziato a seguire %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) started following %3$s (%4$s)."
msgstr "%1$s (%2$s) ha iniziato a seguire %3$s (%4$s)."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s stopped following %4$s."
msgstr ""
"%2$s ha smesso di seguire %4$s."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) stopped following %3$s (%4$s)."
msgstr "%1$s (%2$s) ha smesso di seguire %3$s (%4$s)."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid "%2$s liked %4$s's update."
msgstr ""
"%2$s piace l'aggiornamento di %4$s."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) liked %3$s's status (%4$s)."
msgstr "%1$s (%2$s) piace lo stato di %3$s (%4$s)."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid ""
"%2$s stopped liking %4$s's update."
msgstr ""
"%2$s non piace più l'aggiornamento di %"
"4$s."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) stopped liking %3$s's status (%4$s)."
msgstr "%1$s (%2$s) non piace più lo stato di %3$s (%4$s)."

#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) joined the group %3$s (%4$s)."
msgstr "%1$s (%2$s) si è unito al gruppo %3$s (%4$s)."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s left the group %4$s."
msgstr ""
"%2$s è uscito dal gruppo %4$s."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) left the group %3$s (%4$s)."
msgstr "%1$s (%2$s) è uscito dal gruppo %3$s (%4$s)."

#. TRANS: Plugin description.
msgid "Emits notices when social activities happen."
msgstr "Emette avvisi quando avvengono le attività sociali."


code:
# Translation of StatusNet - Activity 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 - Activity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:29+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:15:05+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-activity\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: Text for "joined list" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group home URL, %4$s is a group name.
#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s joined the group %4$s."
msgstr ""
"%2$s prisijungė prie grupės %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s started following %4$s."
msgstr "%2$s pradėjo sekti %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) started following %3$s (%4$s)."
msgstr ""

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s stopped following %4$s."
msgstr "%2$s nustojo sekti %4$s."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) stopped following %3$s (%4$s)."
msgstr ""

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid "%2$s liked %4$s's update."
msgstr ""

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) liked %3$s's status (%4$s)."
msgstr ""

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid ""
"%2$s stopped liking %4$s's update."
msgstr ""

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) stopped liking %3$s's status (%4$s)."
msgstr ""

#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) joined the group %3$s (%4$s)."
msgstr "%1$s (%2$s) prisijungė prie grupės %3$s (%4$s)."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s left the group %4$s."
msgstr "%2$s paliko grupę %4$s."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) left the group %3$s (%4$s)."
msgstr "%1$s (%2$s) paliko grupę %3$s (%4$s)."

#. TRANS: Plugin description.
msgid "Emits notices when social activities happen."
msgstr ""


code:
# Translation of StatusNet - Activity 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 - Activity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:29+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:15:05+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-activity\n"
"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"

#. TRANS: Text for "joined list" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group home URL, %4$s is a group name.
#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s joined the group %4$s."
msgstr ""
"%2$s се зачлени во групата %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s started following %4$s."
msgstr ""
"%2$s почна да го следи корисникот %4"
"$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) started following %3$s (%4$s)."
msgstr "%1$s (%2$s) почна да го следи корисникот %3$s (%4$s)."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s stopped following %4$s."
msgstr ""
"%2$s престана да го следи корисникот %4"
"$s."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) stopped following %3$s (%4$s)."
msgstr "%1$s (%2$s) престана да го следи корисникот %3$s (%4$s)."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid "%2$s liked %4$s's update."
msgstr ""
"%2$s ја бендиса објавата на %4$s."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) liked %3$s's status (%4$s)."
msgstr "%1$s (%2$s) го бендиса статусот на %3$s (%4$s)."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid ""
"%2$s stopped liking %4$s's update."
msgstr ""
"%2$s повеќе не ја бендисува објавата "
"на %4$s."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) stopped liking %3$s's status (%4$s)."
msgstr "%1$s (%2$s) повеќе не го бендисува статусот на %3$s (%4$s)."

#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) joined the group %3$s (%4$s)."
msgstr "%1$s (%2$s) се зачлени во групата %3$s (%4$s)."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s left the group %4$s."
msgstr ""
"%2$s ја напушти групата %4$s."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) left the group %3$s (%4$s)."
msgstr "%1$s (%2$s) ја напушти групата %3$s (%4$s)."

#. TRANS: Plugin description.
msgid "Emits notices when social activities happen."
msgstr "Емитува известувања кога се одвиваат друштвени активности."


code:
# Translation of StatusNet - Activity 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 - Activity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:29+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:15:05+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-activity\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Text for "joined list" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group home URL, %4$s is a group name.
#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s joined the group %4$s."
msgstr ""
"%2$s is lid geworden van de groep %4"
"$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s started following %4$s."
msgstr "%2$s is %4$s gaan volgen."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) started following %3$s (%4$s)."
msgstr "%1$s (%2$s) is %3$s (%4$s) gaan volgen."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s stopped following %4$s."
msgstr "%2$s volgt %4$s niet langer."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) stopped following %3$s (%4$s)."
msgstr "%1$s (%2$s) volgt %3$s (%4$s) niet langer."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid "%2$s liked %4$s's update."
msgstr ""
"%2$s vindt de status van %4$s leuk."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) liked %3$s's status (%4$s)."
msgstr "%1$s (%2$s) vindt de status van %3$s leuk (%4$s)."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid ""
"%2$s stopped liking %4$s's update."
msgstr ""
"%2$s vindt de status van %4$s niet "
"langer leuk."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) stopped liking %3$s's status (%4$s)."
msgstr "%1$s (%2$s) vindt de status van %3$s niet langer leuk (%4$s)."

#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) joined the group %3$s (%4$s)."
msgstr "%1$s (%2$s) is lid geworden van de groep %3$s (%4$s)."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s left the group %4$s."
msgstr ""
"%2$s heeft de groep %4$s verlaten."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) left the group %3$s (%4$s)."
msgstr "%1$s (%2$s) heeft de groep %3$s verlaten (%4$s)."

#. TRANS: Plugin description.
msgid "Emits notices when social activities happen."
msgstr "Verstuurt mededelingen als sociale activiteiten gebeuren."


code:
# Translation of StatusNet - Activity to Polish (polski)
# Exported from translatewiki.net
#
# Author: BeginaFelicysym
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Activity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:30+0000\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:15:05+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=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && "
"(n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"

#. TRANS: Text for "joined list" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group home URL, %4$s is a group name.
#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s joined the group %4$s."
msgstr "%2$s dołączył do grupy %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s started following %4$s."
msgstr "%2$s zaczął obserwować %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) started following %3$s (%4$s)."
msgstr "%1$s (%2$s) zaczął obserwować %3$s (%4$s)."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s stopped following %4$s."
msgstr ""
"%2$s zakończył obserwację %4$s."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) stopped following %3$s (%4$s)."
msgstr "%1$s (%2$s) zakończył obserwację %3$s (%4$s)."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid "%2$s liked %4$s's update."
msgstr ""
"%2$s polubił aktualizację użytkownika %"
"4$s."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) liked %3$s's status (%4$s)."
msgstr "%1$s (%2$s) polubił status (%4$s) użytkownika %3$s."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid ""
"%2$s stopped liking %4$s's update."
msgstr ""
"%2$s przestał lubić aktualizację "
"użytkownika %4$s."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) stopped liking %3$s's status (%4$s)."
msgstr "%1$s (%2$s) przestał lubić status (%4$s) użytkownika %3$s."

#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) joined the group %3$s (%4$s)."
msgstr "%1$s (%2$s) dołączył do grupy %3$s (%4$s)."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s left the group %4$s."
msgstr "%2$s opuścił grupę %4$s."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) left the group %3$s (%4$s)."
msgstr "%1$s (%2$s) opuścił grupę %3$s (%4$s)."

#. TRANS: Plugin description.
msgid "Emits notices when social activities happen."
msgstr "Wysyła ogłoszenia, gdy się dzieją się zdarzenia towarzyskie."


code:
# Translation of StatusNet - Activity to Russian (русский)
# Exported from translatewiki.net
#
# Author: Lockal
# --
# This file is distributed under the same license as the StatusNet package.
#
msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Activity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:30+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:15:05+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-activity\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: Text for "joined list" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group home URL, %4$s is a group name.
#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s joined the group %4$s."
msgstr ""
"%2$s присоединился к группе %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, fuzzy, php-format
msgid "%2$s started following %4$s."
msgstr "%2$s начал следить за %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) started following %3$s (%4$s)."
msgstr "%1$s (%2$s) начал следить за %3$s (%4$s)."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s stopped following %4$s."
msgstr ""
"%2$s перестал следить за %4$s."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) stopped following %3$s (%4$s)."
msgstr "%1$s (%2$s) перестал следить за %3$s (%4$s)."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid "%2$s liked %4$s's update."
msgstr ""
"%2$s добавил обновление %4$s в "
"число любимых."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) liked %3$s's status (%4$s)."
msgstr "%1$s (%2$s) добавил статус %3$s в число любимых (%4$s)."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid ""
"%2$s stopped liking %4$s's update."
msgstr ""
"%2$s убрал обновление %4$s из "
"числа любимых."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) stopped liking %3$s's status (%4$s)."
msgstr "%1$s (%2$s) убрал статус %3$s из числа любимых (%4$s)."

#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) joined the group %3$s (%4$s)."
msgstr "%1$s (%2$s) присоединился к группе %3$s (%4$s)."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s left the group %4$s."
msgstr "%2$s покинул группу %4$s."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) left the group %3$s (%4$s)."
msgstr "%1$s (%2$s) покинул группу %3$s (%4$s)."

#. TRANS: Plugin description.
msgid "Emits notices when social activities happen."
msgstr "Выдаёт уведомления, когда происходит социальная деятельность."


code:
# Translation of StatusNet - Activity 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 - Activity\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-06-30 11:07+0000\n"
"PO-Revision-Date: 2012-06-30 11:07:30+0000\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-POT-Import-Date: 2012-01-30 18:15:05+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: Text for "joined list" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group home URL, %4$s is a group name.
#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s joined the group %4$s."
msgstr ""
"Sumali si %2$s sa pangkat na %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s started following %4$s."
msgstr ""
"Nagsimulang sundan ni %2$s si %4$s."

#. TRANS: Text for "started following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) started following %3$s (%4$s)."
msgstr "Nagsimulang sundan ni %1$s (%2$s) si %3$s (%4$s)."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a profile URL, %4$s is a profile name.
#, php-format
msgid "%2$s stopped following %4$s."
msgstr ""
"Huminto si %2$s sa pagsunod kay %4$s</"
"a>."

#. TRANS: Text for "stopped following" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a profile name, %4$s is a profile URL.
#, php-format
msgid "%1$s (%2$s) stopped following %3$s (%4$s)."
msgstr "Huminto si %1$s (%2$s) sa pagsunod kay %3$s (%4$s)."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid "%2$s liked %4$s's update."
msgstr ""
"Nagustuhan ni %2$s ang pagsasapanahon "
"ni %4$s."

#. TRANS: Text for "liked" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) liked %3$s's status (%4$s)."
msgstr "Nagustuhan ni %1$s (%2$s) ang katayuan ni %3$s (%4$s)."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a notice URL, %4$s is an author name.
#, php-format
msgid ""
"%2$s stopped liking %4$s's update."
msgstr ""
"Huminto sa paggusto si %2$s kay %4$s's "
"update."

#. TRANS: Text for "stopped liking" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is an author name, %4$s is a notice URL.
#, php-format
msgid "%1$s (%2$s) stopped liking %3$s's status (%4$s)."
msgstr "Huminto si %1$s (%2$s) sa paggusto ng katayuan ni %3$s (%4$s)."

#. TRANS: Text for "joined group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) joined the group %3$s (%4$s)."
msgstr "Sumali si %1$s (%2$s) sa pangkat na %3$s (%4$s)."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile URL, %2$s is a profile name,
#. TRANS: %3$s is a group URL, %4$s is a group name.
#, php-format
msgid "%2$s left the group %4$s."
msgstr ""
"Umalis si %2$s mula sa pangkat na %4"
"$s."

#. TRANS: Text for "left group" item in activity plugin.
#. TRANS: %1$s is a profile name, %2$s is a profile URL,
#. TRANS: %3$s is a group name, %4$s is a group URL.
#, php-format
msgid "%1$s (%2$s) left the group %3$s (%4$s)."
msgstr "Umalis si %1$s (%2$s) mula sa pangkat na %3$s (%4$s)."

#. TRANS: Plugin description.
msgid "Emits notices when social activities happen."
msgstr "Nagbubuga ng mga pabatid kapag nagaganap ang mga gawaing panlipunan."


code:
<?php
/**
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2011,2012, StatusNet, Inc.
 *
 * ActivitySpam Plugin
 *
 * 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  Spam
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011,2012 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    // This check helps protect against security problems;
    // your code file can't be executed directly from the web.
    exit(1);
}

/**
 * Check new notices with activity spam service.
 *
 * @category  Spam
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011,2012 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */
class ActivitySpamPlugin extends Plugin
{
    public $server = null;
    public $hideSpam = false;

    const REVIEWSPAM = 'ActivitySpamPlugin::REVIEWSPAM';
    const TRAINSPAM = 'ActivitySpamPlugin::TRAINSPAM';

    /**
     * Initializer
     *
     * @return boolean hook value; true means continue processing, false means stop.
     */
    function initialize()
    {
        $this->filter = new SpamFilter(common_config('activityspam', 'server'),
                                       common_config('activityspam', 'consumerkey'),
                                       common_config('activityspam', 'secret'));

        $this->hideSpam = common_config('activityspam', 'hidespam');

        // Let DB_DataObject find Spam_score

        common_config_set('db', 'class_location',
                          common_config('db', 'class_location') .':'.dirname(__FILE__));

        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('spam_score', Spam_score::schemaDef());

        Spam_score::upgrade();

        return true;
    }

    /**
     * When a notice is saved, check its spam score
     *
     * @param Notice $notice Notice that was just saved
     *
     * @return boolean hook value; true means continue processing, false means stop.
     */

    function onEndNoticeSave($notice)
    {
        try {

            $result = $this->filter->test($notice);

            $score = Spam_score::saveNew($notice, $result);

            $this->log(LOG_INFO, "Notice " . $notice->id . " has spam score " . $score->score);

        } catch (Exception $e) {
            // Log but continue
            $this->log(LOG_ERR, $e->getMessage());
        }

        return true;
    }

    function onNoticeDeleteRelated($notice) {
        $score = Spam_score::getKV('notice_id', $notice->id);
        if (!empty($score)) {
            $score->delete();
        }
        return true;
    }

    function onUserRightsCheck($profile, $right, &$result) {
        switch ($right) {
        case self::REVIEWSPAM:
        case self::TRAINSPAM:
            $result = ($profile->hasRole(Profile_role::MODERATOR) || $profile->hasRole('modhelper'));
            return false;
        default:
            return true;
        }
    }

    function onGetSpamFilter(&$filter) {
        $filter = $this->filter;
        return false;
    }

    function onEndShowNoticeOptionItems($nli)
    {
        $profile = Profile::current();

        if (!empty($profile) && $profile->hasRight(self::TRAINSPAM)) {

            $notice = $nli->getNotice();
            $out = $nli->getOut();

            if (!empty($notice)) {

                $score = Spam_score::getKV('notice_id', $notice->id);

                if (empty($score)) {
                    // If it's empty, we can train it.
                    $form = new TrainSpamForm($out, $notice);
                    $form->show();
                } else if ($score->is_spam) {
                    $form = new TrainHamForm($out, $notice);
                    $form->show();
                } else if (!$score->is_spam) {
                    $form = new TrainSpamForm($out, $notice);
                    $form->show();
                }
            }
        }

        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)
    {
        $m->connect('main/train/spam',
                    array('action' => 'train', 'category' => 'spam'));
        $m->connect('main/train/ham',
                    array('action' => 'train', 'category' => 'ham'));
        $m->connect('main/spam',
                    array('action' => 'spam'));
        return true;
    }

    function onEndShowStyles($action)
    {
        $action->element('style', null,
                         '.form-train-spam input.submit { background: url('.$this->path('icons/bullet_black.png').') no-repeat 0px 0px } ' . "\n" .
                         '.form-train-ham input.submit { background: url('.$this->path('icons/exclamation.png').') no-repeat 0px 0px } ');
        return true;
    }

    function onEndPublicGroupNav($nav)
    {
        $user = common_current_user();

        if (!empty($user) && $user->hasRight(self::REVIEWSPAM)) {
            $nav->out->menuItem(common_local_url('spam'),
                                _m('MENU','Spam'),
                                // TRANS: Menu item title in search group navigation panel.
                                _('Notices marked as spam'),
                                $nav->actionName == 'spam',
                                'nav_timeline_spam');
        }

        return true;
    }

    function onPluginVersion(&$versions)
    {
        $versions[] = array('name' => 'ActivitySpam',
                            'version' => GNUSOCIAL_VERSION,
                            'author' => 'Evan Prodromou',
                            'homepage' => 'http://status.net/wiki/Plugin:ActivitySpam',
                            'description' =>
                            _m('Test notices against the Activity Spam service.'));
        return true;
    }

    function onEndNoticeInScope($notice, $profile, &$bResult)
    {
        if ($this->hideSpam) {
            if ($bResult) {

                $score = Spam_score::getKV('notice_id', $notice->id);

                if (!empty($score) && $score->is_spam) {
                    if (empty($profile) ||
                        ($profile->id !== $notice->profile_id &&
                         !$profile->hasRight(self::REVIEWSPAM))) {
                        $bResult = false;
                    }
                }
            }
        }

        return true;
    }

    /**
     * Pre-cache our spam scores if needed.
     */
    function onEndNoticeListPrefill(array &$notices, array &$profiles, array $notice_ids, Profile $scoped=null) {
        if ($this->hideSpam) {
            Spam_score::multiGet('notice_id', $notice_ids);
        }
        return true;
    }
}


code:
<?php
/**
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2012, StatusNet, Inc.
 *
 * Stream of latest spam messages
 *
 * 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  Spam
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2012 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    // This check helps protect against security problems;
    // your code file can't be executed directly from the web.
    exit(1);
}

require_once INSTALLDIR.'/lib/noticelist.php';

/**
 * SpamAction
 *
 * Shows the latest spam on the service
 *
 * @category  Spam
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2012 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

class SpamAction extends Action
{
    var $page = null;
    var $notices = null;

    function title() {
        return _("Latest Spam");
    }

    /**
     * For initializing members of the class.
     *
     * @param array $argarray misc. arguments
     *
     * @return boolean true
     */

    function prepare($argarray)
    {
        parent::prepare($argarray);

        $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;

        // User must be logged in.

        $user = common_current_user();

        if (empty($user)) {
            throw new ClientException(_("You must be logged in to review."), 403);
        }

        // User must have the right to review spam

        if (!$user->hasRight(ActivitySpamPlugin::REVIEWSPAM)) {
            throw new ClientException(_('You cannot review spam on this site.'), 403);
        }

        $stream = new SpamNoticeStream($user->getProfile());

        $this->notices = $stream->getNotices(($this->page-1)*NOTICES_PER_PAGE,
                                             NOTICES_PER_PAGE + 1);

        if($this->page > 1 && $this->notices->N == 0) {
            throw new ClientException(_('No such page.'), 404);
        }

        return true;
    }

    /**
     * Handler method
     *
     * @param array $argarray is ignored since it's now passed in in prepare()
     *
     * @return void
     */

    function handle($argarray=null)
    {
        parent::handle($args);

        $this->showPage();
    }

    /**
     * Fill the content area
     *
     * Shows a list of the notices in the public stream, with some pagination
     * controls.
     *
     * @return void
     */

    function showContent()
    {
        $nl = new NoticeList($this->notices, $this);

        $cnt = $nl->show();

        if ($cnt == 0) {
            $this->showEmptyList();
        }

        $this->pagination($this->page > 1,
                          $cnt > NOTICES_PER_PAGE,
                          $this->page,
                          'spam');
    }

    function showEmptyList()
    {
        // TRANS: Text displayed for public feed when there are no public notices.
        $message = _('This is the timeline of spam messages for %%site.name%% but none have been detected yet.');

        $this->elementStart('div', 'guide');
        $this->raw(common_markup_to_html($message));
        $this->elementEnd('div');
    }

    /**
     * Return true if read only.
     *
     * MAY override
     *
     * @param array $args other arguments
     *
     * @return boolean is read only action?
     */

    function isReadOnly($args)
    {
        return true;
    }
}


code:
<?php
/**
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2012, StatusNet, Inc.
 *
 * Train a notice as spam
 *
 * 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  Spam
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2012 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    // This check helps protect against security problems;
    // your code file can't be executed directly from the web.
    exit(1);
}

/**
 * Train a notice as spam
 *
 * @category  Spam
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2012 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

class TrainAction extends Action
{
    protected $notice = null;
    protected $filter = null;
    protected $category = null;

    /**
     * For initializing members of the class.
     *
     * @param array $argarray misc. arguments
     *
     * @return boolean true
     */

    function prepare($argarray)
    {
        parent::prepare($argarray);

        // User must be logged in.

        $user = common_current_user();

        if (empty($user)) {
            throw new ClientException(_("You must be logged in to train spam."), 403);
        }

        // User must have the right to review spam

        if (!$user->hasRight(ActivitySpamPlugin::TRAINSPAM)) {
            throw new ClientException(_('You cannot review spam on this site.'), 403);
        }

        $id = $this->trimmed('notice');

        $this->notice = Notice::getKV('id', $id);

        if (empty($this->notice)) {
            throw new ClientException(_("No such notice."));
        }

        $this->checkSessionToken();

        $filter = null;

        Event::handle('GetSpamFilter', array(&$filter));

        if (empty($filter)) {
            throw new ServerException(_("No spam filter configured."));
        }

        $this->filter = $filter;

        $this->category = $this->trimmed('category');

        if ($this->category !== SpamFilter::SPAM &&
            $this->category !== SpamFilter::HAM)
        {
            throw new ClientException(_("No such category."));
        }

        return true;
    }

    /**
     * Handler method
     *
     * @param array $argarray is ignored since it's now passed in in prepare()
     *
     * @return void
     */

    function handle($argarray=null)
    {
        // Train

        $this->filter->trainOnError($this->notice, $this->category);

        // Re-test

        $result = $this->filter->test($this->notice);

        // Update or insert

        $score = Spam_score::save($this->notice, $result);

        // Show new toggle form

        if ($this->category === SpamFilter::SPAM) {
            $form = new TrainHamForm($this, $this->notice);
        } else {
            $form = new TrainSpamForm($this, $this->notice);
        }

        if ($this->boolean('ajax')) {
            $this->startHTML('text/xml;charset=utf-8');
            $this->elementStart('head');
            // TRANS: Page title for page on which we train the spam filter for ham or spam
            $this->element('title', null, _('Train spam filter'));
            $this->elementEnd('head');
            $this->elementStart('body');
            $form->show();
            $this->elementEnd('body');
            $this->endHTML();
        } else {
            common_redirect(common_local_url('spam'), 303);
        }
    }
}


code:
<?php
  /**
   * StatusNet - the distributed open-source microblogging tool
   * Copyright (C) 2011, StatusNet, Inc.
   *
   * Score of a notice by activity spam service
   *
   * 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  Spam
   * @package   StatusNet
   * @author    Evan Prodromou <evan@status.net>
   * @copyright 2011 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);
}

/**
 * Score of a notice per the activity spam service
 *
 * @category Spam
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 *
 * @see      DB_DataObject
 */

class Spam_score extends Managed_DataObject
{
    const MAX_SCALE = 10000;
    public $__table = 'spam_score'; // table name

    public $notice_id;   // int
    public $score;       // float
    public $created;     // datetime

    function saveNew($notice, $result) {

        $score = new Spam_score();

        $score->notice_id      = $notice->id;
        $score->score          = $result->probability;
        $score->is_spam        = $result->isSpam;
        $score->scaled         = Spam_score::scale($score->score);
        $score->created        = common_sql_now();
        $score->notice_created = $notice->created;

        $score->insert();

        self::blow('spam_score:notice_ids');

        return $score;
    }

    function save($notice, $result) {

        $orig  = null;
        $score = Spam_score::getKV('notice_id', $notice->id);

        if (empty($score)) {
            $score = new Spam_score();
        } else {
            $orig = clone($score);
        }

        $score->notice_id      = $notice->id;
        $score->score          = $result->probability;
        $score->is_spam        = $result->isSpam;
        $score->scaled         = Spam_score::scale($score->score);
        $score->created        = common_sql_now();
        $score->notice_created = $notice->created;

        if (empty($orig)) {
            $score->insert();
        } else {
            $score->update($orig);
        }

        self::blow('spam_score:notice_ids');

        return $score;
    }

    function delete($useWhere=false)
    {
        self::blow('spam_score:notice_ids');
        self::blow('spam_score:notice_ids;last');
        return parent::delete($useWhere);
    }

    /**
     * The One True Thingy that must be defined and declared.
     */
    public static function schemaDef()
    {
        return array(
            'description' => 'score of the notice per activityspam',
            'fields' => array(
                'notice_id' => array('type' => 'int',
                                     'not null' => true,
                                     'description' => 'notice getting scored'),
                'score' => array('type' => 'double',
                                 'not null' => true,
                                 'description' => 'score for the notice (0.0, 1.0)'),
                'scaled' => array('type' => 'int',
                                  'description' => 'scaled score for the notice (0, 10000)'),
                'is_spam' => array('type' => 'tinyint',
                                   'description' => 'flag for spamosity'),
                'created' => array('type' => 'datetime',
                                   'not null' => true,
                                   'description' => 'date this record was created'),
                'notice_created' => array('type' => 'datetime',
                                          'description' => 'date the notice was created'),
            ),
            'primary key' => array('notice_id'),
            'foreign keys' => array(
                'spam_score_notice_id_fkey' => array('notice', array('notice_id' => 'id')),
            ),
            'indexes' => array(
                'spam_score_created_idx' => array('created'),
                'spam_score_scaled_idx' => array('scaled'),
            ),
        );
    }

    public static function upgrade()
    {
        Spam_score::upgradeScaled();
        Spam_score::upgradeIsSpam();
        Spam_score::upgradeNoticeCreated();
    }

    protected static function upgradeScaled()
    {
        $score = new Spam_score();
        $score->whereAdd('scaled IS NULL');

        if ($score->find()) {
            while ($score->fetch()) {
                $orig = clone($score);
                $score->scaled = Spam_score::scale($score->score);
                $score->update($orig);
            }
        }
    }

    protected static function upgradeIsSpam()
    {
        $score = new Spam_score();
        $score->whereAdd('is_spam IS NULL');

        if ($score->find()) {
            while ($score->fetch()) {
                $orig = clone($score);
                $score->is_spam = ($score->score >= 0.90) ? 1 : 0;
                $score->update($orig);
            }
        }
    }

    protected static function upgradeNoticeCreated()
    {
        $score = new Spam_score();
        $score->whereAdd('notice_created IS NULL');

        if ($score->find()) {
            while ($score->fetch()) {
                $notice = Notice::getKV('id', $score->notice_id);
                if (!empty($notice)) {
                    $orig = clone($score);
                    $score->notice_created = $notice->created;
                    $score->update($orig);
                }
            }
        }
    }

    public static function scale($score)
    {
        $raw = round($score * Spam_score::MAX_SCALE);
        return max(0, min(Spam_score::MAX_SCALE, $raw));
    }
}


code:
<?php
/**
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2011, StatusNet, Inc.
 *
 * Toggle indicating spam, click to train as ham
 *
 * 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  Spam
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    // This check helps protect against security problems;
    // your code file can't be executed directly from the web.
    exit(1);
}

/**
 * Form
 *
 * @category  Spam
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

class TrainHamForm extends Form {

    var $notice  = null;

    function __construct($out, $notice) {
        parent::__construct($out);
        $this->notice = $notice;
    }

    /**
     * Name of the form
     *
     * Sub-classes should overload this with the name of their form.
     *
     * @return void
     */

    function formLegend()
    {
        return _("Train ham");
    }

    /**
     * Visible or invisible data elements
     *
     * Display the form fields that make up the data of the form.
     * Sub-classes should overload this to show their data.
     *
     * @return void
     */

    function formData()
    {
        $this->hidden('notice', $this->notice->id);
    }

    /**
     * Buttons for form actions
     *
     * Submit and cancel buttons (or whatever)
     * Sub-classes should overload this to show their own buttons.
     *
     * @return void
     */

    function formActions()
    {
        $this->submit('train-ham-submit-' . $this->notice->id,
                      _('Clear spam'),
                      'submit',
                      null,
                      _("Clear spam"));
    }

    /**
     * ID of the form
     *
     * Should be unique on the page. Sub-classes should overload this
     * to show their own IDs.
     *
     * @return int ID of the form
     */

    function id()
    {
        return 'train-ham-' . $this->notice->id;
    }

    /**
     * Action of the form.
     *
     * URL to post to. Should be overloaded by subclasses to give
     * somewhere to post to.
     *
     * @return string URL to post to
     */

    function action()
    {
        return common_local_url('train', array('category' => 'ham'));
    }

    /**
     * Class of the form. May include space-separated list of multiple classes.
     *
     * If 'ajax' is included, the form will automatically be submitted with
     * an 'ajax=1' parameter added, and the resulting form or error message
     * will replace the form after submission.
     *
     * It's up to you to make sure that the target action supports this!
     *
     * @return string the form's class
     */

    function formClass()
    {
        return 'form-train-ham ajax';
    }
}


code:
<?php
/**
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2011, StatusNet, Inc.
 *
 * Toggle indicating ham, click to train as spam
 *
 * 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  Spam
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

if (!defined('STATUSNET')) {
    // This check helps protect against security problems;
    // your code file can't be executed directly from the web.
    exit(1);
}

/**
 * Form
 *
 * @category  Spam
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2011 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

class TrainSpamForm extends Form {

    var $notice  = null;

    function __construct($out, $notice) {
        parent::__construct($out);
        $this->notice = $notice;
    }

    /**
     * Name of the form
     *
     * Sub-classes should overload this with the name of their form.
     *
     * @return void
     */

    function formLegend()
    {
        return _("Train spam");
    }

    /**
     * Visible or invisible data elements
     *
     * Display the form fields that make up the data of the form.
     * Sub-classes should overload this to show their data.
     *
     * @return void
     */

    function formData()
    {
        $this->hidden('notice', $this->notice->id);
    }

    /**
     * Buttons for form actions
     *
     * Submit and cancel buttons (or whatever)
     * Sub-classes should overload this to show their own buttons.
     *
     * @return void
     */

    function formActions()
    {
        $this->submit('train-spam-submit-' . $this->notice->id,
                      _('Train spam'),
                      'submit',
                      null,
                      _("Mark as spam"));
    }

    /**
     * ID of the form
     *
     * Should be unique on the page. Sub-classes should overload this
     * to show their own IDs.
     *
     * @return int ID of the form
     */

    function id()
    {
        return 'train-spam-' . $this->notice->id;
    }

    /**
     * Action of the form.
     *
     * URL to post to. Should be overloaded by subclasses to give
     * somewhere to post to.
     *
     * @return string URL to post to
     */

    function action()
    {
        return common_local_url('train', array('category' => 'spam'));
    }

    /**
     * Class of the form. May include space-separated list of multiple classes.
     *
     * If 'ajax' is included, the form will automatically be submitted with
     * an 'ajax=1' parameter added, and the resulting form or error message
     * will replace the form after submission.
     *
     * It's up to you to make sure that the target action supports this!
     *
     * @return string the form's class
     */

    function formClass()
    {
        return 'form-train-spam ajax';
    }
}


code:
<?php
  /**
   * StatusNet - the distributed open-source microblogging tool
   * Copyright (C) 2012, StatusNet, Inc.
   *
   * Spam filter class
   *
   * 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  Spam
   * @package   StatusNet
   * @author    Evan Prodromou <evan@status.net>
   * @copyright 2012 StatusNet, Inc.
   * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
   * @link      http://status.net/
   */

if (!defined('STATUSNET')) {
    // This check helps protect against security problems;
    // your code file can't be executed directly from the web.
    exit(1);
}

/**
 * Spam filter class
 *
 * Local proxy for remote filter
 *
 * @category  Spam
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2012 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */

class SpamFilter extends OAuthClient {

    const HAM  = 'ham';
    const SPAM = 'spam';

    public $server;

    function __construct($server, $consumerKey, $secret) {
        parent::__construct($consumerKey, $secret);
        $this->server = $server;
    }

    protected function toActivity($notice) {
        // FIXME: need this to autoload ActivityStreamsMediaLink
        $doc = new ActivityStreamJSONDocument();

        $activity = $notice->asActivity(null);

        return $activity;
    }

    public function test($notice) {

        $activity = $this->toActivity($notice);
        return $this->testActivity($activity);
    }

    public function testActivity($activity) {

        $response = $this->postJSON($this->server . "/is-this-spam", $activity->asArray());

        $result = json_decode($response->getBody());

        return $result;
    }

    public function train($notice, $category) {

        $activity = $this->toActivity($notice);
        return $this->trainActivity($activity, $category);

    }

    public function trainActivity($activity, $category) {

        switch ($category) {
        case self::HAM:
            $endpoint = '/this-is-ham';
            break;
        case self::SPAM:
            $endpoint = '/this-is-spam';
            break;
        default:
            throw new Exception("Unknown category: " + $category);
        }

        $response = $this->postJSON($this->server . $endpoint, $activity->asArray());

        // We don't do much with the results
        return true;
    }

    public function trainOnError($notice, $category) {

        $activity = $this->toActivity($notice);

        return $this->trainActivityOnError($activity, $category);
    }

    public function trainActivityOnError($activity, $category) {

        $result = $this->testActivity($activity);

        if (($category === self::SPAM && $result->isSpam) ||
            ($category === self::HAM && !$result->isSpam)) {
            return true;
        } else {
            return $this->trainActivity($activity, $category);
        }
    }

    function postJSON($url, $body)
    {
        $request = OAuthRequest::from_consumer_and_token($this->consumer,
                                                         $this->token,
                                                         'POST',
                                                         $url);

        $request->sign_request($this->sha1_method,
                               $this->consumer,
                               $this->token);

        $hclient = new HTTPClient($url);

        $hclient->setConfig(array('connect_timeout' => 120,
                                  'timeout' => 120,
                                  'follow_redirects' => true,
                                  'ssl_verify_peer' => false,
                                  'ssl_verify_host' => false));

        $hclient->setMethod(HTTP_Request2::METHOD_POST);
        $hclient->setBody(json_encode($body));
        $hclient->setHeader('Content-Type', 'application/json');
        $hclient->setHeader($request->to_header());

        // Twitter is strict about accepting invalid "Expect" headers
        // No reason not to clear it still here -ESP

        $hclient->setHeader('Expect', '');

        try {
            $response = $hclient->send();
            $code = $response->getStatus();
            if (!$response->isOK()) {
                throw new OAuthClientException($response->getBody(), $code);
            }
            return $response;
        } catch (Exception $e) {
            throw new OAuthClientException($e->getMessage(), $e->getCode());
        }
    }
}