code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Persian (http://www.transifex.com/gnu-social/gnu-social/language/fa/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Finnish (http://www.transifex.com/gnu-social/gnu-social/language/fi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""

repo_name: spookie/gnu

license: mit


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2011 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:31+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: French (http://www.transifex.com/gnu-social/gnu-social/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr "Spam détecté."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Friulian (http://www.transifex.com/gnu-social/gnu-social/language/fur/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fur\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2011 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:31+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Galician (http://www.transifex.com/gnu-social/gnu-social/language/gl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: gl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr "Spam detectado."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2011 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:42+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Hebrew (http://www.transifex.com/gnu-social/gnu-social/language/he/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: he\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr "זוהה זבל."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Upper Sorbian (http://www.transifex.com/gnu-social/gnu-social/language/hsb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hsb\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Hungarian (http://www.transifex.com/gnu-social/gnu-social/language/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Armenian (Armenia) (http://www.transifex.com/gnu-social/gnu-social/language/hy_AM/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hy_AM\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2011 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:31+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Interlingua (http://www.transifex.com/gnu-social/gnu-social/language/ia/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ia\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr "Spam detegite."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Indonesian (http://www.transifex.com/gnu-social/gnu-social/language/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
# Ciencisto Dementa <maliktunga@users.noreply.github.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-06-17 00:24+0000\n"
"Last-Translator: Ciencisto Dementa <maliktunga@users.noreply.github.com>\n"
"Language-Team: Ido (http://www.transifex.com/gnu-social/gnu-social/language/io/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: io\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr "Mesajacho detektita."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Icelandic (http://www.transifex.com/gnu-social/gnu-social/language/is/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: is\n"
"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2012 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:31+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Italian (http://www.transifex.com/gnu-social/gnu-social/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr "Identificato come Spam."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2012 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:42+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Japanese (http://www.transifex.com/gnu-social/gnu-social/language/ja/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ja\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr "迷惑メールを検出しました。"


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Georgian (http://www.transifex.com/gnu-social/gnu-social/language/ka/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ka\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Korean (http://www.transifex.com/gnu-social/gnu-social/language/ko/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ko\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Colognian (http://www.transifex.com/gnu-social/gnu-social/language/ksh/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ksh\n"
"Plural-Forms: nplurals=3; plural=(n==0) ? 0 : (n==1) ? 1 : 2;\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/gnu-social/gnu-social/language/lb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: lb\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Lithuanian (http://www.transifex.com/gnu-social/gnu-social/language/lt/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: lt\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:39+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Latvian (http://www.transifex.com/gnu-social/gnu-social/language/lv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: lv\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Malagasy (http://www.transifex.com/gnu-social/gnu-social/language/mg/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: mg\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2011 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:31+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Macedonian (http://www.transifex.com/gnu-social/gnu-social/language/mk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: mk\n"
"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr "Утврден е спам."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Malayalam (http://www.transifex.com/gnu-social/gnu-social/language/ml/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ml\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Malay (http://www.transifex.com/gnu-social/gnu-social/language/ms/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ms\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Burmese (http://www.transifex.com/gnu-social/gnu-social/language/my/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: my\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Norwegian Bokmål (http://www.transifex.com/gnu-social/gnu-social/language/nb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nb\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:30+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Nepali (http://www.transifex.com/gnu-social/gnu-social/language/ne/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ne\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2011 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:31+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Dutch (http://www.transifex.com/gnu-social/gnu-social/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr "Spam gedetecteerd."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Norwegian Nynorsk (http://www.transifex.com/gnu-social/gnu-social/language/nn/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nn\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Polish (http://www.transifex.com/gnu-social/gnu-social/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl\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: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Portuguese (http://www.transifex.com/gnu-social/gnu-social/language/pt/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pt\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
# no and no <nicolasmaia@tutanota.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-04-15 15:13+0000\n"
"Last-Translator: no and no <nicolasmaia@tutanota.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/gnu-social/gnu-social/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr "Spam detectado."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Romanian (Romania) (http://www.transifex.com/gnu-social/gnu-social/language/ro_RO/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ro_RO\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Russian (http://www.transifex.com/gnu-social/gnu-social/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Slovenian (http://www.transifex.com/gnu-social/gnu-social/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sl\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Serbian (http://www.transifex.com/gnu-social/gnu-social/language/sr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sr\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: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2011 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:31+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Swedish (http://www.transifex.com/gnu-social/gnu-social/language/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr "Spam upptäcktes."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Tamil (http://www.transifex.com/gnu-social/gnu-social/language/ta/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ta\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Telugu (http://www.transifex.com/gnu-social/gnu-social/language/te/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: te\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2011 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:31+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Tagalog (http://www.transifex.com/gnu-social/gnu-social/language/tl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: tl\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr "Nakapansin ng Basurang Liham."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Turkish (http://www.transifex.com/gnu-social/gnu-social/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: tr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2011 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:31+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Ukrainian (http://www.transifex.com/gnu-social/gnu-social/language/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: uk\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: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr "Виявлено спам."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Urdu (Pakistan) (http://www.transifex.com/gnu-social/gnu-social/language/ur_PK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ur_PK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Vietnamese (http://www.transifex.com/gnu-social/gnu-social/language/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: vi\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Chinese (http://www.transifex.com/gnu-social/gnu-social/language/zh/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/gnu-social/gnu-social/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:28+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/gnu-social/gnu-social/language/zh_TW/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_TW\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#. TRANS: Client exception thrown when notice content triggers the spam
#. filter.
#: MollomPlugin.php:87
msgid "Spam Detected."
msgstr ""


code:
NodeInfoProtocols: List of protocols to be reported on NodeInfo requests
- &$protocols - Add protocol to the list so it is informed upon request


code:
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social 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.
//
// GNU social 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 GNU social.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Plugin that presents basic instance information using the [NodeInfo standard](http://nodeinfo.diaspora.software/).
 *
 * @package   NodeInfo
 * @author    Stéphane Bérubé <chimo@chromic.org>
 * @author    Diogo Cordeiro <diogo@fc.up.pt>
 * @copyright 2018-2019 Free Software Foundation, Inc http://www.fsf.org
 * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
 */

defined('GNUSOCIAL') || die();

/**
 * Controls cache and routes
 *
 * @copyright 2018-2019 Free Software Foundation, Inc http://www.fsf.org
 * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
 */
class NodeinfoPlugin extends Plugin
{
    const PLUGIN_VERSION = '2.0.1';

    public function onRouterInitialized($m): bool
    {
        $m->connect(
            '.well-known/nodeinfo',
            ['action' => 'nodeinfojrd']
        );

        $m->connect(
            'api/nodeinfo/2.0.json',
            ['action' => 'nodeinfo_2_0']
        );

        return true;
    }

    /**
     * Make sure necessary tables are filled out.
     *
     * @return bool hook true
     * @author Diogo Cordeiro <diogo@fc.up.pt>
     */
    public function onCheckSchema(): bool
    {
        // Ensure schema
        $schema = Schema::get();
        $schema->ensureTable('usage_stats', Usage_stats::schemaDef());

        // Ensure default rows
        if (Usage_stats::getKV('type', 'users') == null) {
            $us = new Usage_stats();
            $us->type = 'users';
            $us->insert();
        }

        if (Usage_stats::getKV('type', 'posts') == null) {
            $us = new Usage_stats();
            $us->type = 'posts';
            $us->insert();
        }

        if (Usage_stats::getKV('type', 'comments') == null) {
            $us = new Usage_stats();
            $us->type = 'comments';
            $us->insert();
        }

        return true;
    }

    /**
     * Increment notices/replies counter
     *
     * @param  Notice $notice
     * @return bool hook flag
     * @author Diogo Cordeiro <diogo@fc.up.pt>
     */
    public function onStartNoticeDistribute(Notice $notice): bool
    {
        assert($notice->id > 0);        // Ignore if not a valid notice

        $profile = $notice->getProfile();

        if (!$profile->isLocal()) {
            return true;
        }

        // Ignore for activity/non-(post/share)-verb notices
        if (method_exists('ActivityUtils', 'compareVerbs')) {
            $is_valid_verb = ActivityUtils::compareVerbs(
                $notice->verb,
                [ActivityVerb::POST,
                 ActivityVerb::SHARE]
            );
        } else {
            $is_valid_verb = ($notice->verb == ActivityVerb::POST ||
                              $notice->verb == ActivityVerb::SHARE);
        }
        if ($notice->source == 'activity' || !$is_valid_verb) {
            return true;
        }

        // Is a reply?
        if ($notice->reply_to) {
            $us = Usage_stats::getKV('type', 'comments');
            $us->count += 1;
            $us->update();
            return true;
        }

        // Is an Announce?
        if ($notice->isRepeat()) {
            return true;
        }

        $us = Usage_stats::getKV('type', 'posts');
        $us->count += 1;
        $us->update();

        // That was it
        return true;
    }

    /**
     * Decrement notices/replies counter
     *
     * @param  User $user
     * @param  Notice $notice
     * @return bool hook flag
     * @throws UserNoProfileException
     * @author Diogo Cordeiro <diogo@fc.up.pt>
     */
    public function onStartDeleteOwnNotice(User $user, Notice $notice): bool
    {
        $profile = $user->getProfile();

        // Only count local notices
        if (!$profile->isLocal()) {
            return true;
        }

        if ($notice->reply_to) {
            $us = Usage_stats::getKV('type', 'comments');
            $us->count -= 1;
            $us->update();
            return true;
        }

        $us = Usage_stats::getKV('type', 'posts');
        $us->count -= 1;
        $us->update();
        return true;
    }

    /**
     * Increment users counter
     *
     * @return bool hook flag
     * @author Diogo Cordeiro <diogo@fc.up.pt>
     */
    public function onEndRegistrationTry(): bool
    {
        $us = Usage_stats::getKV('type', 'users');
        $us->count += 1;
        $us->update();
        return true;
    }

    /**
     * Decrement users counter
     *
     * @return bool hook flag
     * @author Diogo Cordeiro <diogo@fc.up.pt>
     */
    public function onEndDeleteUser(): bool
    {
        $us = Usage_stats::getKV('type', 'users');
        $us->count -= 1;
        $us->update();
        return true;
    }

    /**
     * Plugin version information
     *
     * @param  array $versions
     * @return bool hook true
     * @throws Exception
     */
    public function onPluginVersion(array &$versions): bool
    {
        $versions[] = [
            'name' => 'Nodeinfo',
            'version' => self::PLUGIN_VERSION,
            'author' => 'Stéphane Bérubé, Diogo Cordeiro',
            'homepage' => 'https://code.chromic.org/chimo/gs-nodeinfo',
            'description' => _m('Plugin that presents basic instance information using the NodeInfo standard.')
        ];
        return true;
    }

    /**
     * Cache was added in a newer version of the plugin, this ensures we fix cached values on upgrade
     *
     * @return bool hook flag
     * @author Diogo Cordeiro <diogo@fc.up.pt>
     */
    public function onEndUpgrade(): bool
    {
        $users = new Usage_stats();
        if ($users->getUserCount() == 0) {
            define('NODEINFO_UPGRADE', true);
            require_once __DIR__ . DIRECTORY_SEPARATOR . 'scripts' . DIRECTORY_SEPARATOR . 'fix_stats.php';
        }
        return true;
    }
}


code:
# Nodeinfo support for GNU social

Plugin that presents basic instance information using the [NodeInfo standard](http://nodeinfo.diaspora.software/).

The information is presented at the "/nodeinfo/2.0.json" endpoint.

Other tools can then scrape that information and present it in various ways.
For example: [https://fediverse.network/](https://fediverse.network/)


code:
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social 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.
//
// GNU social 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 GNU social.  If not, see <http://www.gnu.org/licenses/>.

/**
 * The information is presented at the "api/nodeinfo/2.0.json" endpoint.
 *
 * @package   NodeInfo
 * @author    Stéphane Bérubé <chimo@chromic.org>
 * @author    Diogo Cordeiro <diogo@fc.up.pt>
 * @copyright 2018-2019 Free Software Foundation, Inc http://www.fsf.org
 * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
 */

defined('GNUSOCIAL') || die();

/**
 * NodeInfo 2.0
 *
 * @copyright 2018-2019 Free Software Foundation, Inc http://www.fsf.org
 * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
 */
class Nodeinfo_2_0Action extends Action
{
    private $plugins;

    protected function handle(): void
    {
        parent::handle();
        header('Access-Control-Allow-Origin: *');
        $this->plugins = $this->getActivePluginList();
        $this->showNodeInfo();
    }

    /**
     * Most functionality depends on the active plugins, this gives us enough information concerning that
     *
     * @return array
     * @author Stéphane Bérubé <chimo@chromic.org>
     * @author Diogo Cordeiro <diogo@fc.up.pt>
     */
    public function getActivePluginList(): array
    {
        $plugin_version = [];
        $plugins = [];

        Event::handle('PluginVersion', [&$plugin_version]);

        foreach ($plugin_version as $plugin) {
            $plugins[str_replace(' ', '', strtolower($plugin['name']))] = true;
        }

        return $plugins;
    }

    /**
     * The NodeInfo page
     *
     * @return void
     * @author Stéphane Bérubé <chimo@chromic.org>
     * @author Diogo Cordeiro <diogo@fc.up.pt>
     */
    public function showNodeInfo(): void
    {
        $openRegistrations = $this->getRegistrationsStatus();
        $userCount = $this->getUserCount();
        $postCount = $this->getPostCount();
        $commentCount = $this->getCommentCount();

        $usersActiveHalfyear = $this->getActiveUsers(180);
        $usersActiveMonth = $this->getActiveUsers(30);

        $protocols = $this->getProtocols();
        $inboundServices = $this->getInboundServices();
        $outboundServices = $this->getOutboundServices();

        $metadata = $this->getMetadata();

        /* Required NodeInfo fields
              "version",
              "software",
              "protocols",
              "services",
              "openRegistrations",
              "usage",
              "metadata"
         */

        $json = json_encode([
            // The schema version, must be 2.0.
            'version' => '2.0',

            // [Mandatory] Metadata about server software in use.
            'software' => [
                'name' => 'gnusocial', // The canonical name of this server software.
                'version' => GNUSOCIAL_VERSION // The version of this server software.
            ],

            // The protocols supported on this server.
            // The spec requires an array containing at least 1 item but we can't ensure that.
            'protocols' => $protocols,

            // The third party sites this server can connect to via their application API.
            'services' => [
                // The third party sites this server can retrieve messages from for combined display with regular traffic.
                'inbound' => $inboundServices,
                // The third party sites this server can publish messages to on the behalf of a user.
                'outbound' => $outboundServices
            ],

            // Whether this server allows open self-registration.
            'openRegistrations' => $openRegistrations,

            // Usage statistics for this server.
            'usage' => [
                'users' => [
                    // The total amount of on this server registered users.
                    'total' => $userCount,
                    // The amount of users that signed in at least once in the last 180 days.
                    'activeHalfyear' => $usersActiveHalfyear,
                    // The amount of users that signed in at least once in the last 30 days.
                    'activeMonth' => $usersActiveMonth
                ],
                // The amount of posts that were made by users that are registered on this server.
                'localPosts' => $postCount,
                // The amount of comments that were made by users that are registered on this server.
                'localComments' => $commentCount
            ],

            // Free form key value pairs for software specific values. Clients should not rely on any specific key present.
            'metadata' => $metadata
        ]);

        header('Content-Type: application/json; profile=http://nodeinfo.diaspora.software/ns/schema/2.0#; charset=utf-8');
        print $json;
    }

    /**
     * The protocols supported on this server.
     * The spec requires an array containing at least 1 item but we can't ensure that
     *
     * These can only be one of:
     *  - activitypub,
     *  - buddycloud,
     *  - dfrn,
     *  - diaspora,
     *  - libertree,
     *  - ostatus,
     *  - pumpio,
     *  - tent,
     *  - xmpp,
     *  - zot
     *
     * @return array
     * @author Diogo Cordeiro <diogo@fc.up.pt>
     */
    public function getProtocols(): array
    {
        $protocols = [];

        Event::handle('NodeInfoProtocols', [&$protocols]);

        return $protocols;
    }

    /**
     * The third party sites this server can retrieve messages from for combined display with regular traffic.
     *
     * These can only be one of:
     *  - atom1.0,
     *  - gnusocial,
     *  - imap,
     *  - pnut,
     *  - pop3,
     *  - pumpio,
     *  - rss2.0,
     *  - twitter
     *
     * @return array
     * @author Diogo Cordeiro <diogo@fc.up.pt>
     * @author Stéphane Bérubé <chimo@chromic.org>
     */
    public function getInboundServices(): array
    {
        $inboundServices = [];
        $ostatusEnabled = array_key_exists('ostatus', $this->plugins);

        // We need those two to read feeds (despite WebSub).
        if ($ostatusEnabled && array_key_exists('feedpoller', $this->plugins)) {
            $inboundServices[] = 'atom1.0';
            $inboundServices[] = 'rss2.0';
        }

        if (array_key_exists('twitterbridge', $this->plugins) && common_config('twitterimport', 'enabled')) {
            $inboundServices[] = 'twitter';
        }

        if (array_key_exists('imap', $this->plugins)) {
            $inboundServices[] = 'imap';
        }

        // We can receive messages from another GNU social instance if we have at least one of those enabled.
        // And the same happens in the other instance
        if ($ostatusEnabled || array_key_exists('activitypub', $this->plugins)) {
            $inboundServices[] = 'gnusocial';
        }

        return $inboundServices;
    }

    /**
     * The third party sites this server can publish messages to on the behalf of a user.
     *
     * These can only be one of:
     *  - atom1.0,
     *  - blogger,
     *  - buddycloud,
     *  - diaspora,
     *  - dreamwidth,
     *  - drupal,
     *  - facebook,
     *  - friendica,
     *  - gnusocial,
     *  - google,
     *  - insanejournal,
     *  - libertree,
     *  - linkedin,
     *  - livejournal,
     *  - mediagoblin,
     *  - myspace,
     *  - pinterest,
     *  - pnut,
     *  - posterous,
     *  - pumpio,
     *  - redmatrix,
     *  - rss2.0,
     *  - smtp,
     *  - tent,
     *  - tumblr,
     *  - twitter,
     *  - wordpress,
     *  - xmpp
     *
     * @return array
     * @author Diogo Cordeiro <diogo@fc.up.pt>
     * @author Stéphane Bérubé <chimo@chromic.org>
     */
    public function getOutboundServices(): array
    {
        // Those two are always available
        $outboundServices = ['atom1.0', 'rss2.0'];

        if (array_key_exists('twitterbridge', $this->plugins)) {
            $outboundServices[] = 'twitter';
        }

        // We can send messages to another GNU social instance if we have at least one of those enabled.
        // And the same happens in the other instance
        if (array_key_exists('ostatus', $this->plugins) ||
            array_key_exists('activitypub', $this->plugins)) {
            $outboundServices[] = 'gnusocial';
        }

        $xmppEnabled = (array_key_exists('xmpp', $this->plugins) && common_config('xmpp', 'enabled')) ? true : false;
        if ($xmppEnabled) {
            $outboundServices[] = 'xmpp';
        }

        return $outboundServices;
    }

    /**
     * Whether this server allows open self-registration.
     *
     * @return bool
     * @author Stéphane Bérubé <chimo@chromic.org>
     */
    public function getRegistrationsStatus(): bool
    {
        $areRegistrationsClosed = (common_config('site', 'closed')) ? true : false;
        $isSiteInviteOnly = (common_config('site', 'inviteonly')) ? true : false;

        return !($areRegistrationsClosed || $isSiteInviteOnly);
    }

    /**
     * The total amount of on this server registered users.
     *
     * @return int
     * @author Stéphane Bérubé <chimo@chromic.org>
     */
    public function getUserCount(): int
    {
        $users = new Usage_stats();
        $userCount = $users->getUserCount();

        return $userCount;
    }

    /**
     * The amount of users that were active at least once in the last $days days.
     *
     * Technically, the NodeInfo spec defines 'active' as 'signed in at least once in the
     * last {180, 30} days depending on request', but GNU social doesn't keep track of when
     * users last logged in.
     *
     * Therefore, we use Favourites, Notices and Date of account creation to underestimate a
     * value. Underestimate because a user that only logs in to see his feed is too an active
     * user.
     *
     * @param  int $days
     * @return int
     * @author Diogo Cordeiro <diogo@fc.up.pt>
     */
    public function getActiveUsers(int $days): int
    {
        $userTable = common_database_tablename('user');
        $query = <<<END
            SELECT COUNT(DISTINCT profile_id) AS active_users_count
              FROM (
                SELECT profile_id FROM notice
                  WHERE notice.created >= CURRENT_DATE - INTERVAL '{$days}' DAY AND notice.is_local = 1
                UNION ALL
                SELECT user_id FROM fave INNER JOIN {$userTable} ON fave.user_id = {$userTable}.id
                  WHERE fave.created >= CURRENT_DATE - INTERVAL '{$days}' DAY
                UNION ALL
                SELECT id FROM {$userTable} WHERE {$userTable}.created >= CURRENT_DATE - INTERVAL '{$days}' DAY
              ) AS source
              WHERE profile_id NOT IN (SELECT profile_id FROM profile_role WHERE role = 'silenced')
            END;

        $activeUsersCount = new DB_DataObject();
        $activeUsersCount->query($query);
        $activeUsersCount->fetch();
        return $activeUsersCount->active_users_count;
    }

    /**
     * The amount of posts that were made by users that are registered on this server.
     *
     * @return int
     * @author Stéphane Bérubé <chimo@chromic.org>
     */
    public function getPostCount(): int
    {
        $posts = new Usage_stats();
        $postCount = $posts->getPostCount();

        return $postCount;
    }

    /**
     * The amount of comments that were made by users that are registered on this server.
     *
     * @return int
     * @author Stéphane Bérubé <chimo@chromic.org>
     */
    public function getCommentCount(): int
    {
        $comments = new Usage_stats();
        $commentCount = $comments->getCommentCount();

        return $commentCount;
    }

    /**
     * Some additional information related to this GNU social instance
     *
     * @return array
     * @author Diogo Cordeiro <diogo@fc.up.pt>
     */
    public function getMetadata(): array
    {
        $metadata = [
            'nodeName' => common_config('site', 'name'),
            'software' => [
                'homepage' => GNUSOCIAL_ENGINE_URL,
                'repository' => GNUSOCIAL_ENGINE_REPO_URL,
            ],
            'uploadLimit' => common_get_preferred_php_upload_limit(),
            'postFormats' => [
                'text/plain',
                'text/html'
            ],
            'features' => []
        ];

        if (array_key_exists('poll', $this->plugins)) {
            $metadata['features'][] = 'polls';
        }

        return $metadata;
    }
}


code:
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social 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.
//
// GNU social 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 GNU social.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Provided in /.well-known/nodeinfo
 *
 * @package   NodeInfo
 * @author    Stéphane Bérubé <chimo@chromic.org>
 * @copyright 2018-2019 Free Software Foundation, Inc http://www.fsf.org
 * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
 */

defined('GNUSOCIAL') || die();

/**
 * JRD document for NodeInfo
 *
 * @copyright 2018-2019 Free Software Foundation, Inc http://www.fsf.org
 * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
 */
class NodeinfoJRDAction extends XrdAction
{
    const NODEINFO_2_0_REL = 'http://nodeinfo.diaspora.software/ns/schema/2.0';

    protected $defaultformat = 'json';

    protected function setXRD()
    {
        $this->xrd->links[] = new XML_XRD_Element_link(self::NODEINFO_2_0_REL, common_local_url('nodeinfo_2_0'));
    }
}


code:
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social 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.
//
// GNU social 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 GNU social.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Table for storing Nodeinfo statistics
 *
 * @package   NodeInfo
 * @author    Diogo Cordeiro <diogo@fc.up.pt>
 * @copyright 2018-2019 Free Software Foundation, Inc http://www.fsf.org
 * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
 */

defined('GNUSOCIAL') || die();

/**
 * Table Definition for usage_stats and some getters
 *
 * @copyright 2018-2019 Free Software Foundation, Inc http://www.fsf.org
 * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
 */
class Usage_stats extends Managed_DataObject
{
    public $__table = 'usage_stats';         // table name
    public $type;                            // varchar(191)  unique_key   not 255 because utf8mb4 takes more space
    public $count;                           // int(4)
    public $modified;                        // datetime()   not_null default_CURRENT_TIMESTAMP

    /**
     * Table Definition for usage_stats
     *
     * @return array
     */
    public static function schemaDef(): array
    {
        return [
            'description' => 'node stats',
            'fields' => [
                'type' => ['type' => 'varchar', 'not null' => true, 'length' => 191, 'description' => 'Type of countable entity'],
                'count' => ['type' => 'int', 'size' => 'int', 'default' => 0, 'description' => 'Number of entities of this type'],
                'modified' => ['type' => 'datetime', 'not null' => true, 'default' => 'CURRENT_TIMESTAMP', 'description' => 'date this record was modified'],
            ],
            'primary key' => ['type'],
            'indexes' => [
                'user_stats_idx' => ['type'],
            ],
        ];
    }

    /**
     * Total number of users
     *
     * @return int
     */
    public function getUserCount(): int
    {
        return Usage_stats::getKV('type', 'users')->count;
    }

    /**
     * Total number of dents
     *
     * @return int
     */
    public function getPostCount(): int
    {
        return Usage_stats::getKV('type', 'posts')->count;
    }

    /**
     * Total number of replies
     *
     * @return int
     */
    public function getCommentCount(): int
    {
        return Usage_stats::getKV('type', 'comments')->count;
    }
}


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

#: NodeinfoPlugin.php:214
msgid ""
"Plugin that presents basic instance information using the NodeInfo standard."
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
# Diogo Cordeiro <diogo@fc.up.pt>, 2019
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-04-22 05:48+0100\n"
"PO-Revision-Date: 2019-06-12 03:19+0100\n"
"Last-Translator: Diogo Cordeiro <diogo@fc.up.pt>\n"
"Language-Team: English (United Kingdom) (http://www.transifex.com/gnu-social/gnu-social/language/en_GB/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: en_GB\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Plugin description.
#: NodeinfoPlugin.php:34
msgid "Plugin that presents basic instance information using the NodeInfo standard."
msgstr "Plugin that presents basic instance information using the NodeInfo standard."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
# Miguel Dantas <biodantasgs@gmail.com>, 2019
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-06-08 18:38+0100\n"
"PO-Revision-Date: 2019-06-12 03:20+0100\n"
"Last-Translator: Miguel Dantas <biodantasgs@gmail.com>\n"
"Language-Team: Esperanto (http://www.transifex.com/gnu-social/gnu-social/language/eo/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: eo\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Plugin description.
#: NodeinfoPlugin.php:34
msgid "Plugin that presents basic instance information using the NodeInfo standard."
msgstr "Kromaĵo kiu prezentas bazajn informojn pri instancoj uzante la normon NodeInfo."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
# Miguel Dantas <biodantasgs@gmail.com>, 2019
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-06-08 18:38+0100\n"
"PO-Revision-Date: 2019-06-12 03:21+0100\n"
"Last-Translator: Miguel Dantas <biodantasgs@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/gnu-social/gnu-social/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Plugin description.
#: NodeinfoPlugin.php:34
msgid "Plugin that presents basic instance information using the NodeInfo standard."
msgstr "Complemento que presenta información básica sobre una instancia usando el standard NodeInfo."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
# Miguel Dantas <biodantasgs@gmail.com>, 2019
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 22019-06-08 18:39+0100\n"
"PO-Revision-Date: 2019-06-12 03:21+0100\n"
"Last-Translator: Miguel Dantas <biodantasgs@gmail.com>\n"
"Language-Team: Polish (http://www.transifex.com/gnu-social/gnu-social/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl\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: Plugin description.
#: NodeinfoPlugin.php:34
msgid "Plugin that presents basic instance information using the NodeInfo standard."
msgstr "Wtyczka która prezentuje podstawowe informacje o instancji używając standardu NodeInfo."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
# Diogo Cordeiro <diogo@fc.up.pt>, 2019
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-04-22 05:48+0100\n"
"PO-Revision-Date: 2019-06-12 03:21+0100\n"
"Last-Translator: Diogo Cordeiro <diogo@fc.up.pt>\n"
"Language-Team: Portuguese (http://www.transifex.com/gnu-social/gnu-social/language/pt/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pt\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Plugin description.
#: NodeinfoPlugin.php:34
msgid "Plugin that presents basic instance information using the NodeInfo standard."
msgstr "Este plugin apresenta informação básica da instância no formato do padrão NodeInfo."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
# Diogo Cordeiro <diogo@fc.up.pt>, 2019
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-04-22 05:48+0100\n"
"PO-Revision-Date: 2019-06-12 03:22+0100\n"
"Last-Translator: Diogo Cordeiro <diogo@fc.up.pt>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/gnu-social/gnu-social/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Plugin description.
#: NodeinfoPlugin.php:34
msgid "Plugin that presents basic instance information using the NodeInfo standard."
msgstr "Este plugin apresenta informação básica da instância no formato do padrão NodeInfo."


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
# Alexei Sorokin <sor.alexei@meowr.ru>, 2019
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-04-22 05:48+0100\n"
"PO-Revision-Date: 2019-06-12 03:22+0100\n"
"Last-Translator: Alexei Sorokin <sor.alexei@meowr.ru>\n"
"Language-Team: Russian (http://www.transifex.com/gnu-social/gnu-social/language/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pt\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Plugin description.
#: NodeinfoPlugin.php:34
msgid "Plugin that presents basic instance information using the NodeInfo standard."
msgstr "Плагин, представляющий основную информацию инстанса, используя стандарт NodeInfo."


code:
#!/usr/bin/env php
<?php
// This file is part of GNU social - https://www.gnu.org/software/social
//
// GNU social 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.
//
// GNU social 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 GNU social.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Fix Nodeinfo statistics
 *
 * @package   NodeInfo
 * @author    Diogo Cordeiro <diogo@fc.up.pt>
 * @copyright 2019 Free Software Foundation, Inc http://www.fsf.org
 * @license   https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later
 */

define('INSTALLDIR', dirname(__DIR__, 3));
define('PUBLICDIR', INSTALLDIR . DIRECTORY_SEPARATOR . 'public');

if (!defined('NODEINFO_UPGRADE')) {
    $longoptions = ['type='];

    $helptext = <<<END_OF_HELP
fix_stats.php [options]
Counts the stats from database values and updates the table.

    --type          Type: can be 'users', 'posts' or 'comments'. Or 'all', to update all the types.

END_OF_HELP;

    require_once INSTALLDIR . '/scripts/commandline.inc';

    $valid_types = ['all', 'users', 'posts', 'comments'];

    $verbose = have_option('v', 'verbose');

    $type_to_fix = get_option_value('type');
    if (!in_array($type_to_fix, $valid_types)) {
        echo "You must provide a valid type!\n\n";
        show_help();
        exit(1);
    }

    if ($verbose) {
        echo "Started.\n\n";
    }
} else {
    echo "Nodeinfo will now fix stats\n";
    $type_to_fix = 'all';
    $verbose = true;
}

if ($type_to_fix == 'all' || $type_to_fix == 'users') {
    if ($verbose) {
        echo "[+] Updating Users stats...\n";
    }
    $us = Usage_stats::getKV('users');
    $us->count = getUserCount();
    $us->update();
}

if ($type_to_fix == 'all' || $type_to_fix == 'posts') {
    if ($verbose) {
        echo "[+] Updating Posts stats...\n";
    }
    $us = Usage_stats::getKV('posts');
    $us->count = getPostCount();
    $us->update();
}

if ($type_to_fix == 'all' || $type_to_fix == 'comments') {
    if ($verbose) {
        echo "[+] Updating Comments stats...\n";
    }
    $us = Usage_stats::getKV('comments');
    $us->count = getCommentCount();
    $us->update();
}

if ($verbose) {
    echo "\nDONE.\n";
}

/*
 * Counting functions
 */

/**
 * Total number of users
 *
 * @return int
 * @author Stéphane Bérubé <chimo@chromic.org>
 */
function getUserCount(): int
{
    $users = new User();
    $userCount = $users->count();

    return $userCount;
}

/**
 * Total number of dents
 *
 * @return int
 * @author Stéphane Bérubé <chimo@chromic.org>
 */
function getPostCount()
{
    $notices = new Notice();
    $notices->is_local = Notice::LOCAL_PUBLIC;
    $notices->whereAdd('reply_to IS NULL');
    $noticeCount = $notices->count();

    return $noticeCount;
}

/**
 * Total number of replies
 *
 * @return int
 * @author Stéphane Bérubé <chimo@chromic.org>
 */
function getCommentCount()
{
    $notices = new Notice();
    $notices->is_local = Notice::LOCAL_PUBLIC;
    $notices->whereAdd('reply_to IS NOT NULL');
    $commentCount = $notices->count();

    return $commentCount;
}


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

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

define('NOTICE_TITLE_PLUGIN_VERSION', '0.1');

/**
 * NoticeTitle plugin to add an optional title to notices.
 *
 * Stores notice titles in a secondary table, notice_title.
 *
 * @category  NoticeTitle
 * @package   StatusNet
 * @author    Evan Prodromou <evan@status.net>
 * @copyright 2010 StatusNet, Inc.
 * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
 * @link      http://status.net/
 */
class NoticeTitlePlugin extends Plugin
{

    // By default, notice-title widget will be available to all users.
    // With restricted on, only users who have been granted the
    // "richedit" role get it.
    public $restricted = false;

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

        // For storing titles for notices
        $schema->ensureTable('notice_title', Notice_title::schemaDef());
        return true;
    }

    /**
     * Provide plugin version information.
     *
     * This data is used when showing the version page.
     *
     * @param array &$versions array of version data arrays; see EVENTS.txt
     *
     * @return boolean hook value
     */
    public function onPluginVersion(array &$versions): bool
    {
        $url = GNUSOCIAL_ENGINE_REPO_URL . 'tree/master/plugins/NoticeTitle';

        $versions[] = array('name' => 'NoticeTitle',
                            'version' => NOTICE_TITLE_PLUGIN_VERSION,
                            'author' => 'Evan Prodromou',
                            'homepage' => $url,
                            'rawdescription' =>
                            // TRANS: Plugin description.
                            _m('Adds optional titles to notices.'));
        return true;
    }

    /**
     * Show title entry when showing notice form
     *
     * @param Form $form Form being shown
     *
     * @return boolean hook value
     */
    function onStartShowNoticeFormData($form)
    {
        if ($this->isAllowedRichEdit()) {
            $form->out->element('style',
                                null,
                                'label#notice_data-text-label { display: none }');
            $form->out->element('input', array('type' => 'text',
                                               'id' => 'notice_title',
                                               'name' => 'notice_title',
                                               'size' => 40,
                                               'maxlength' => Notice_title::MAXCHARS));
        }
        return true;
    }

    /**
     * Validate notice title before saving
     *
     * @param Action  $action    NewNoticeAction being executed
     * @param Profile $author    Profile object for the author of the notice being saved
     * @param string  &$text     Text of the notice
     * @param array   &$options  Options array
     *
     * @return boolean hook value
     */
    function onStartNoticeSaveWeb(Action $action, Profile $author, &$content, &$options)
    {
        $title = $action->trimmed('notice_title');
        if (!empty($title) && $this->isAllowedRichEdit()) {
            if (mb_strlen($title) > Notice_title::MAXCHARS) {
                // TRANS: Exception thrown when a notice title is too long.
                // TRANS: %d is the maximum number of characters allowed in a title (used for plural).
                throw new Exception(sprintf(_m('The notice title is too long (maximum %d character).',
                                               'The notice title is too long (maximum %d characters).',
                                               Notice_title::MAXCHARS),
                                            Notice_title::MAXCHARS));
            }
        }
        return true;
    }

    /**
     * Save notice title after notice is saved
     *
     * @param Action $action NewNoticeAction being executed
     * @param Notice $notice Notice that was saved
     *
     * @return boolean hook value
     */
    function onEndNoticeSaveWeb($action, $notice)
    {
        if (!empty($notice)) {

            $title = $action->trimmed('notice_title');

            if (!empty($title) && $this->isAllowedRichEdit()) {

                $nt = new Notice_title();

                $nt->notice_id = $notice->id;
                $nt->title     = $title;

                $nt->insert();
            }
        }

        return true;
    }

    /**
     * Show the notice title in lists
     *
     * @param NoticeListItem $nli NoticeListItem being shown
     *
     * @return boolean hook value
     */
    function onStartShowNoticeTitle(NoticeListItem $nli)
    {
        $title = Notice_title::fromNotice($nli->notice);

        if (!empty($title)) {
            $nli->elementStart('h4', array('class' => 'p-name'));
            $nli->element('a', array('href' => $nli->notice->getUrl()), $title);
            $nli->elementEnd('h4');
            return false;
        }

        return true;
    }

    /**
     * Show the notice title in RSS output
     *
     * @param Notice $notice Notice being shown
     * @param array  &$entry array of values used for RSS output
     *
     * @return boolean hook value
     */
    function onEndRssEntryArray($notice, &$entry)
    {
        $title = Notice_title::fromNotice($notice);

        if (!empty($title)) {
            $entry['title'] = $title;
        }

        return true;
    }

    /**
     * Show the notice title in Atom output
     *
     * @param Notice      $notice Notice being shown
     * @param Activity    $act   Activity object to be modified
     * @param Profile     $scoped Currently logged in/scoped profile
     *
     * @return boolean hook value
     */
    function onEndNoticeAsActivity(Notice $stored, Activity $act, Profile $scoped=null)
    {
        $title = Notice_title::fromNotice($stored);

        if (!empty($title)) {
            foreach ($act->objects as $obj) {
                if ($obj->id == $stored->getUri()) {
                    $obj->title = $title;
                    break;
                }
            }
        }

        return true;
    }

    /**
     * Remove title when the notice is deleted
     *
     * @param Notice $notice Notice being deleted
     *
     * @return boolean hook value
     */
    function onNoticeDeleteRelated($notice)
    {
        $nt = Notice_title::getKV('notice_id', $notice->id);

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

        return true;
    }

    /**
     * If a notice has a title, show it in the <title> element
     *
     * @param Action $action Action being executed
     *
     * @return boolean hook value
     */
    function onStartShowHeadTitle($action)
    {
        $actionName = $action->trimmed('action');

        if ($actionName == 'shownotice') {
            $title = Notice_title::fromNotice($action->notice);
            if (!empty($title)) {
                $action->element('title', null,
                                 // TRANS: Page title. %1$s is the title, %2$s is the site name.
                                 sprintf(_m("%1\$s - %2\$s"),
                                         $title,
                                         common_config('site', 'name')));
            }
        }

        return true;
    }

    /**
     * If a notice has a title, show it in the <h1> element
     *
     * @param Notice $notice Notice we're getting the title for
     * @param string $title  Reference to the variable which we set to the notice's title
     *
     * @return boolean hook value
     */
    function onGetNoticeTitle(Notice $notice, &$title)
    {
        $title = Notice_title::fromNotice($notice);
        if (!is_null($title)) {
            return false;
        }

        return true;
    }

    /**
     * Does the current user have permission to use the notice-title widget?
     * Always true unless the plugin's "restricted" setting is on, in which
     * case it's limited to users with the "richedit" role.
     *
     * @todo FIXME: make that more sanely configurable :)
     *
     * @return boolean
     */
    private function isAllowedRichEdit()
    {
        if ($this->restricted) {
            $user = common_current_user();
            return !empty($user) && $user->hasRole('richedit');
        } else {
            return true;
        }
    }
}


code:
The NoticeTitle plugin allows users to add titles to notices.

Installation
============
add "addPlugin('NoticeTitle');"
to the bottom of your config.php

Settings
========
restricted: Whether this option is restriced to users with the "richedit" role.

Example
=======
addPlugin('NoticeTitle', array(
    'restricted' => false
));

path: plugins/NoticeTitle/README


code:
<?php
/**
 * Data class for notice titles
 *
 * PHP version 5
 *
 * @category Data
 * @package  StatusNet
 * @author   Evan Prodromou <evan@status.net>
 * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
 * @link     http://status.net/
 *
 * StatusNet - the distributed open-source microblogging tool
 * Copyright (C) 2010, StatusNet, Inc.
 *
 * 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/>.
 */

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

require_once INSTALLDIR . '/classes/Memcached_DataObject.php';

/**
 * Data class for notice titles
 *
 * @category Action
 * @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 Notice_title extends Managed_DataObject
{
    const MAXCHARS = 191;   // not 255 because utf8mb4 takes more space

    public $__table = 'notice_title'; // table name
    public $notice_id;                         // int(11)  primary_key not_null
    public $title;                             // varchar(191)   not 255 because utf8mb4 takes more space
    public $created;                           // datetime()   not_null
    public $modified;                          // timestamp()   not_null default_CURRENT_TIMESTAMP

    public static function schemaDef()
    {
        return array(
            'fields' => array(
                'notice_id' => array('type' => 'int', 'not null' => true, 'description' => 'notice id this title relates to'),
                'title' => array('type' => 'varchar', 'length' => Notice_title::MAXCHARS, 'description' => 'title to notice'),
                'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'),
                'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'),
            ),
            'primary key' => array('notice_id'),
            'foreign keys' => array(
                'notice_title_notice_id_fkey' => array('notice', array('notice_id' => 'id')),
            ),
        );
    }

    /**
     * Get a notice title based on the notice
     *
     * @param Notice $notice Notice to fetch a title for
     *
     * @return string title of the notice, or null if none
     */
    static function fromNotice($notice)
    {
        $nt = Notice_title::getKV('notice_id', $notice->id);
        if (empty($nt)) {
            return null;
        } else {
            return $nt->title;
        }
    }
}


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

#. TRANS: Plugin description.
#: NoticeTitlePlugin.php:97
msgid "Adds optional titles to notices."
msgstr ""

#. TRANS: Exception thrown when a notice title is too long.
#. TRANS: %d is the maximum number of characters allowed in a title (used for plural).
#: NoticeTitlePlugin.php:140
#, php-format
msgid "The notice title is too long (maximum %d character)."
msgid_plural "The notice title is too long (maximum %d characters)."
msgstr[0] ""
msgstr[1] ""

#. TRANS: Page title. %1$s is the title, %2$s is the site name.
#: NoticeTitlePlugin.php:276
#, php-format
msgid "%1$s - %2$s"
msgstr ""


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:29+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Afrikaans (http://www.transifex.com/gnu-social/gnu-social/language/af/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: af\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Plugin description.
#: NoticeTitlePlugin.php:97
msgid "Adds optional titles to notices."
msgstr ""

#. TRANS: Exception thrown when a notice title is too long.
#. TRANS: %d is the maximum number of characters allowed in a title (used for
#. plural).
#: NoticeTitlePlugin.php:140
#, php-format
msgid "The notice title is too long (maximum %d character)."
msgid_plural "The notice title is too long (maximum %d characters)."
msgstr[0] ""
msgstr[1] ""

#. TRANS: Page title. %1$s is the title, %2$s is the site name.
#: NoticeTitlePlugin.php:276
#, php-format
msgid "%1$s - %2$s"
msgstr "%1$s - %2$s"


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2010 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:42+0000\n"
"Last-Translator: digitaldreamer <digitaldreamer@email.cz>\n"
"Language-Team: Arabic (http://www.transifex.com/gnu-social/gnu-social/language/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"

#. TRANS: Plugin description.
#: NoticeTitlePlugin.php:97
msgid "Adds optional titles to notices."
msgstr "يضيف عناوين اختيارية إلى الإشعارات."

#. TRANS: Exception thrown when a notice title is too long.
#. TRANS: %d is the maximum number of characters allowed in a title (used for
#. plural).
#: NoticeTitlePlugin.php:140
#, php-format
msgid "The notice title is too long (maximum %d character)."
msgid_plural "The notice title is too long (maximum %d characters)."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
msgstr[5] ""

#. TRANS: Page title. %1$s is the title, %2$s is the site name.
#: NoticeTitlePlugin.php:276
#, php-format
msgid "%1$s - %2$s"
msgstr "%1$s - %2$s"


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:29+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Arabic (Egypt) (http://www.transifex.com/gnu-social/gnu-social/language/ar_EG/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ar_EG\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"

#. TRANS: Plugin description.
#: NoticeTitlePlugin.php:97
msgid "Adds optional titles to notices."
msgstr ""

#. TRANS: Exception thrown when a notice title is too long.
#. TRANS: %d is the maximum number of characters allowed in a title (used for
#. plural).
#: NoticeTitlePlugin.php:140
#, php-format
msgid "The notice title is too long (maximum %d character)."
msgid_plural "The notice title is too long (maximum %d characters)."
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
msgstr[5] ""

#. TRANS: Page title. %1$s is the title, %2$s is the site name.
#: NoticeTitlePlugin.php:276
#, php-format
msgid "%1$s - %2$s"
msgstr "%1$s - %2$s"


code:
# Translation file for GNU social - the free software social networking platform
# Copyright (C) 2015 - 2019 Free Software Foundation, Inc http://www.fsf.org
# This file is under https://www.gnu.org/licenses/agpl v3 or later
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: GNU social\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-02-02 17:47+0100\n"
"PO-Revision-Date: 2015-02-07 09:29+0000\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: Asturian (http://www.transifex.com/gnu-social/gnu-social/language/ast/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ast\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

#. TRANS: Plugin description.
#: NoticeTitlePlugin.php:97
msgid "Adds optional titles to notices."
msgstr ""

#. TRANS: Exception thrown when a notice title is too long.
#. TRANS: %d is the maximum number of characters allowed in a title (used for
#. plural).
#: NoticeTitlePlugin.php:140
#, php-format
msgid "The notice title is too long (maximum %d character)."
msgid_plural "The notice title is too long (maximum %d characters)."
msgstr[0] ""
msgstr[1] ""

#. TRANS: Page title. %1$s is the title, %2$s is the site name.
#: NoticeTitlePlugin.php:276
#, php-format
msgid "%1$s - %2$s"
msgstr ""