forked from friendica/friendica-addons
Compare commits
47 commits
7f073ec520
...
cd95ca1a0a
Author | SHA1 | Date | |
---|---|---|---|
Tobias Diekershoff | cd95ca1a0a | ||
Tobias Diekershoff | 5c04e7136f | ||
heluecht | 179382d8a9 | ||
Tobias Diekershoff | a55f80cb39 | ||
Tobias Diekershoff | 4ad7d61893 | ||
Michael | 4bfdb45e81 | ||
Tobias Diekershoff | 4414471100 | ||
46a55f13f7 | |||
Tobias Diekershoff | a97cccb6b2 | ||
Michael | c0535db742 | ||
Tobias Diekershoff | 0c04b086cb | ||
589cf712cc | |||
heluecht | ce53e48cb2 | ||
f3db763c59 | |||
heluecht | 4e5998c73d | ||
5f27f72b0d | |||
Tobias Diekershoff | b0a95ca2d2 | ||
Hannes Heute | b2108c7a4c | ||
Hypolite Petovan | abca07b29d | ||
hankg | 14e7413eb2 | ||
Hypolite Petovan | d3dcd5428c | ||
18e512cc8b | |||
7d5446a778 | |||
Hypolite Petovan | 38ea90104d | ||
08b46e5536 | |||
Hypolite Petovan | 39567cf701 | ||
Tobias Diekershoff | 2789e880dc | ||
Tobias Diekershoff | 1556ebfb33 | ||
3e1b98d5d9 | |||
Tobias Diekershoff | ed07c987a6 | ||
Michael | af868f45ab | ||
Tobias Diekershoff | 7f0cf2527c | ||
Michael | 9525259fc8 | ||
Tobias Diekershoff | f7ca152754 | ||
Michael | 6f56932f12 | ||
Tobias Diekershoff | b6f2e7dd50 | ||
Michael | fa16adccaf | ||
Tobias Diekershoff | 252f3e222a | ||
Michael | 231d830db0 | ||
Tobias Diekershoff | 27e362213f | ||
Michael | 734d35d22b | ||
Hypolite Petovan | 722fdc07fb | ||
Michael | 77c471ab4d | ||
heluecht | bac665864e | ||
Tobias Diekershoff | c7f4d183b1 | ||
Hypolite Petovan | 010261c1dc | ||
Philipp Holzer | 3f26f9785e |
|
@ -5,7 +5,7 @@
|
|||
#
|
||||
# Translators:
|
||||
# fabrixxm <fabrix.xm@gmail.com>, 2018
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2021
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-05-11 08:54-0400\n"
|
||||
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2023\n"
|
||||
"Language-Team: Italian (https://app.transifex.com/Friendica/teams/12172/it/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -125,7 +125,7 @@ msgstr "Annulla"
|
|||
|
||||
#: advancedcontentfilter.php:295
|
||||
msgid "This addon requires this node having at least one post"
|
||||
msgstr ""
|
||||
msgstr "Questo addon richiede che questo nodo abbia almeno un messaggio"
|
||||
|
||||
#: advancedcontentfilter.php:325 advancedcontentfilter.php:336
|
||||
#: advancedcontentfilter.php:347 advancedcontentfilter.php:383
|
||||
|
|
|
@ -27,6 +27,7 @@ $a->strings['Add new rule'] = 'Aggiungi nuova regola';
|
|||
$a->strings['Rule Name'] = 'Nome Regola';
|
||||
$a->strings['Rule Expression'] = 'Espressione Regola';
|
||||
$a->strings['Cancel'] = 'Annulla';
|
||||
$a->strings['This addon requires this node having at least one post'] = 'Questo addon richiede che questo nodo abbia almeno un messaggio';
|
||||
$a->strings['You must be logged in to use this method'] = 'Devi essere autenticato per usare questo metodo';
|
||||
$a->strings['Invalid form security token, please refresh the page.'] = 'Token di sicurezza invalido, aggiorna la pagina.';
|
||||
$a->strings['The rule name and expression are required.'] = 'Il nome e l\'espressione della regola sono richiesti.';
|
||||
|
|
|
@ -15,6 +15,7 @@ use Friendica\Core\Logger;
|
|||
use Friendica\Core\Renderer;
|
||||
use Friendica\Core\System;
|
||||
use Friendica\Network\HTTPException\ForbiddenException;
|
||||
use Friendica\Util\HTTPSignature;
|
||||
use Friendica\Util\Network;
|
||||
|
||||
require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
|
||||
|
@ -76,6 +77,8 @@ function blockbot_init_1()
|
|||
return;
|
||||
}
|
||||
|
||||
blockbot_log_activitypub($_SERVER['REQUEST_URI'], $_SERVER['HTTP_USER_AGENT']);
|
||||
|
||||
if (blockbot_is_crawler($parts)) {
|
||||
Logger::debug('Crawler found - reject', $logdata);
|
||||
blockbot_reject();
|
||||
|
@ -169,7 +172,7 @@ function blockbot_init_1()
|
|||
|
||||
function blockbot_save($database, $userAgent)
|
||||
{
|
||||
if (!DI::config()->get('blockbot', 'training') || !function_exists('dba_open')) {
|
||||
if (!DI::config()->get('blockbot', 'logging') || !function_exists('dba_open')) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -181,6 +184,36 @@ function blockbot_save($database, $userAgent)
|
|||
dba_close($resource);
|
||||
}
|
||||
|
||||
function blockbot_log_activitypub(string $url, string $agent)
|
||||
{
|
||||
if (!DI::config()->get('blockbot', 'logging')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$bot = ['/.well-known/nodeinfo', '/nodeinfo/2.0', '/nodeinfo/1.0'];
|
||||
if (in_array($url, $bot)) {
|
||||
blockbot_save('activitypub-stats', $agent);
|
||||
}
|
||||
|
||||
$bot = ['/api/v1/instance', '/api/v2/instance', '/api/v1/instance/extended_description',
|
||||
'/api/v1/instance/peers'];
|
||||
if (in_array($url, $bot)) {
|
||||
blockbot_save('activitypub-api-stats', $agent);
|
||||
}
|
||||
|
||||
if (substr($url, 0, 6) == '/api/v') {
|
||||
blockbot_save('activitypub-api', $agent);
|
||||
}
|
||||
|
||||
if (($_SERVER['REQUEST_METHOD'] == 'POST') && in_array('inbox', explode('/', parse_url($url, PHP_URL_PATH)))) {
|
||||
blockbot_save('activitypub-inbox-agents', $agent);
|
||||
}
|
||||
|
||||
if (!empty($_SERVER['HTTP_SIGNATURE']) && !empty(HTTPSignature::getSigner('', $_SERVER))) {
|
||||
blockbot_save('activitypub-signature-agents', $agent);
|
||||
}
|
||||
}
|
||||
|
||||
function blockbot_check_login_attempt(string $url, array $logdata)
|
||||
{
|
||||
if (in_array(trim(parse_url($url, PHP_URL_PATH), '/'), ['login', 'lostpass', 'register'])) {
|
||||
|
@ -466,6 +499,7 @@ function blockbot_is_fediverse_client(array $parts): bool
|
|||
'megalodonandroid', 'fedilab', 'mastodonapp', 'toot!', 'intravnews',
|
||||
'pixeldroid', 'greatnews', 'protopage', 'newsfox', 'vienna', 'wp-urldetails', 'husky',
|
||||
'activitypub-go-http-client', 'mobilesafari', 'mastodon-ios', 'mastodonpy', 'techniverse',
|
||||
'relatica',
|
||||
];
|
||||
|
||||
foreach ($parts as $part) {
|
||||
|
|
|
@ -68,6 +68,7 @@ const BLUEKSY_STATUS_TOKEN_FAIL = 13;
|
|||
const BLUESKY_DIRECTORY = 'https://plc.directory'; // Path to the directory server service to fetch the PDS of a given DID
|
||||
const BLUESKY_PDS = 'https://bsky.social'; // Path to the personal data server service (PDS) to fetch the DID for a given handle
|
||||
const BLUESKY_WEB = 'https://bsky.app'; // Path to the web interface with the user profile and posts
|
||||
const BLUESKY_HOSTNAME = 'bsky.social'; // Host name to be added to the handle if incomplete
|
||||
|
||||
function bluesky_install()
|
||||
{
|
||||
|
@ -293,9 +294,9 @@ function bluesky_block(array &$hook_data)
|
|||
|
||||
$activity = bluesky_xrpc_post($hook_data['uid'], 'com.atproto.repo.createRecord', $post);
|
||||
if (!empty($activity->uri)) {
|
||||
$cdata = Contact::getPublicAndUserContactID($hook_data['contact']['id'], $hook_data['uid']);
|
||||
if (!empty($cdata['user'])) {
|
||||
Contact::remove($cdata['user']);
|
||||
$ucid = Contact::getUserContactId($hook_data['contact']['id'], $hook_data['uid']);
|
||||
if ($ucid) {
|
||||
Contact::remove($ucid);
|
||||
}
|
||||
Logger::debug('Successfully blocked contact', ['url' => $hook_data['contact']['url'], 'uri' => $activity->uri]);
|
||||
}
|
||||
|
@ -355,8 +356,11 @@ function bluesky_settings(array &$data)
|
|||
|
||||
if (DI::config()->get('bluesky', 'friendica_handles')) {
|
||||
$self = User::getById(DI::userSession()->getLocalUserId(), ['nickname']);
|
||||
$handle = $self['nickname'] . '.' . DI::baseUrl()->getHost();
|
||||
$friendica_handle = ['bluesky_friendica_handle', DI::l10n()->t('Allow to use %s as your Bluesky handle.', $handle), $custom_handle, DI::l10n()->t('When enabled, you can use %s as your Bluesky handle. After you enabled this option, please go to https://bsky.app/settings and select to change your handle. Select that you have got your own domain. Then enter %s and select "No DNS Panel". Then select "Verify Text File".', $handle, $handle)];
|
||||
$host_handle = $self['nickname'] . '.' . DI::baseUrl()->getHost();
|
||||
$friendica_handle = ['bluesky_friendica_handle', DI::l10n()->t('Allow to use %s as your Bluesky handle.', $host_handle), $custom_handle, DI::l10n()->t('When enabled, you can use %s as your Bluesky handle. After you enabled this option, please go to https://bsky.app/settings and select to change your handle. Select that you have got your own domain. Then enter %s and select "No DNS Panel". Then select "Verify Text File".', $host_handle, $host_handle)];
|
||||
if ($custom_handle) {
|
||||
$handle = $host_handle;
|
||||
}
|
||||
} else {
|
||||
$friendica_handle = [];
|
||||
}
|
||||
|
@ -369,7 +373,7 @@ function bluesky_settings(array &$data)
|
|||
'$import_feeds' => ['bluesky_import_feeds', DI::l10n()->t('Import the pinned feeds'), $import_feeds, DI::l10n()->t('When activated, Posts will be imported from all the feeds that you pinned in Bluesky.')],
|
||||
'$custom_handle' => $friendica_handle,
|
||||
'$pds' => ['bluesky_pds', DI::l10n()->t('Personal Data Server'), $pds, DI::l10n()->t('The personal data server (PDS) is the system that hosts your profile.'), '', 'readonly'],
|
||||
'$handle' => ['bluesky_handle', DI::l10n()->t('Bluesky handle'), $handle],
|
||||
'$handle' => ['bluesky_handle', DI::l10n()->t('Bluesky handle'), $handle, '', '', $custom_handle ? 'readonly' : ''],
|
||||
'$did' => ['bluesky_did', DI::l10n()->t('Bluesky DID'), $did, DI::l10n()->t('This is the unique identifier. It will be fetched automatically, when the handle is entered.'), '', 'readonly'],
|
||||
'$password' => ['bluesky_password', DI::l10n()->t('Bluesky app password'), '', DI::l10n()->t("Please don't add your real password here, but instead create a specific app password in the Bluesky settings.")],
|
||||
'$status' => bluesky_get_status($handle, $did, $pds, $token),
|
||||
|
@ -440,7 +444,7 @@ function bluesky_settings_post(array &$b)
|
|||
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'handle', $handle);
|
||||
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'import', intval($_POST['bluesky_import']));
|
||||
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'import_feeds', intval($_POST['bluesky_import_feeds']));
|
||||
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'friendica_handle', intval($_POST['bluesky_friendica_handle']));
|
||||
DI::pConfig()->set(DI::userSession()->getLocalUserId(), 'bluesky', 'friendica_handle', intval($_POST['bluesky_friendica_handle'] ?? false));
|
||||
|
||||
if (!empty($handle)) {
|
||||
$did = bluesky_get_user_did(DI::userSession()->getLocalUserId(), empty($old_did) || $old_handle != $handle);
|
||||
|
@ -510,9 +514,10 @@ function bluesky_cron()
|
|||
|
||||
$abandon_limit = date(DateTimeFormat::MYSQL, time() - $abandon_days * 86400);
|
||||
|
||||
$pconfigs = DBA::selectToArray('pconfig', [], ['cat' => 'bluesky', 'k' => 'import', 'v' => true]);
|
||||
$pconfigs = DBA::selectToArray('pconfig', [], ["`cat` = ? AND `k` IN (?, ?) AND `v`", 'bluesky', 'import', 'import_feeds']);
|
||||
foreach ($pconfigs as $pconfig) {
|
||||
if (empty(bluesky_get_user_did($pconfig['uid']))) {
|
||||
Logger::debug('User has got no valid DID', ['uid' => $pconfig['uid']]);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -524,19 +529,27 @@ function bluesky_cron()
|
|||
}
|
||||
|
||||
// Refresh the token now, so that it doesn't need to be refreshed in parallel by the following workers
|
||||
Logger::debug('Refresh the token', ['uid' => $pconfig['uid']]);
|
||||
bluesky_get_token($pconfig['uid']);
|
||||
|
||||
Worker::add(['priority' => Worker::PRIORITY_MEDIUM, 'force_priority' => true], 'addon/bluesky/bluesky_notifications.php', $pconfig['uid'], $last);
|
||||
if (DI::pConfig()->get($pconfig['uid'], 'bluesky', 'import')) {
|
||||
Worker::add(['priority' => Worker::PRIORITY_MEDIUM, 'force_priority' => true], 'addon/bluesky/bluesky_timeline.php', $pconfig['uid'], $last);
|
||||
|
||||
}
|
||||
if (DI::pConfig()->get($pconfig['uid'], 'bluesky', 'import_feeds')) {
|
||||
Logger::debug('Fetch feeds for user', ['uid' => $pconfig['uid']]);
|
||||
$feeds = bluesky_get_feeds($pconfig['uid']);
|
||||
foreach ($feeds as $feed) {
|
||||
Worker::add(['priority' => Worker::PRIORITY_MEDIUM, 'force_priority' => true], 'addon/bluesky/bluesky_feed.php', $pconfig['uid'], $feed, $last);
|
||||
}
|
||||
}
|
||||
Logger::debug('Polling done for user', ['uid' => $pconfig['uid']]);
|
||||
}
|
||||
|
||||
Logger::notice('Polling done for all users');
|
||||
|
||||
DI::keyValue()->set('bluesky_last_poll', time());
|
||||
|
||||
$last_clean = DI::keyValue()->get('bluesky_last_clean');
|
||||
if (empty($last_clean) || ($last_clean + 86400 < time())) {
|
||||
Logger::notice('Start contact cleanup');
|
||||
|
@ -550,8 +563,6 @@ function bluesky_cron()
|
|||
}
|
||||
|
||||
Logger::notice('cron_end');
|
||||
|
||||
DI::keyValue()->set('bluesky_last_poll', time());
|
||||
}
|
||||
|
||||
function bluesky_hook_fork(array &$b)
|
||||
|
@ -964,6 +975,7 @@ function bluesky_upload_blob(int $uid, array $photo): ?stdClass
|
|||
return null;
|
||||
}
|
||||
|
||||
Item::incrementOutbound(Protocol::BLUESKY);
|
||||
Logger::debug('Uploaded blob', ['return' => $data, 'uid' => $uid, 'retrial' => $retrial, 'height' => $new_height, 'width' => $new_width, 'size' => $new_size, 'orig-height' => $height, 'orig-width' => $width, 'orig-size' => $size]);
|
||||
return $data->blob;
|
||||
}
|
||||
|
@ -1037,8 +1049,8 @@ function bluesky_process_reason(stdClass $reason, string $uri, int $uid)
|
|||
$item['owner-link'] = $item['author-link'];
|
||||
$item['owner-avatar'] = $item['author-avatar'];
|
||||
if (Item::insert($item)) {
|
||||
$cdata = Contact::getPublicAndUserContactID($contact['id'], $uid);
|
||||
Item::update(['post-reason' => Item::PR_ANNOUNCEMENT, 'causer-id' => $cdata['public']], ['uri' => $uri, 'uid' => $uid]);
|
||||
$pcid = Contact::getPublicContactId($contact['id'], $uid);
|
||||
Item::update(['post-reason' => Item::PR_ANNOUNCEMENT, 'causer-id' => $pcid], ['uri' => $uri, 'uid' => $uid]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1217,7 +1229,11 @@ function bluesky_get_header(stdClass $post, string $uri, int $uid, int $fetch_ui
|
|||
'source' => json_encode($post),
|
||||
];
|
||||
|
||||
$account = Contact::selectFirstAccountUser(['pid'], ['id' => $contact['id']]);
|
||||
|
||||
$item['author-id'] = $account['pid'];
|
||||
$item['uri-id'] = ItemURI::getIdByURI($uri);
|
||||
$item['owner-id'] = $item['author-id'];
|
||||
$item['owner-name'] = $item['author-name'];
|
||||
$item['owner-link'] = $item['author-link'];
|
||||
$item['owner-avatar'] = $item['author-avatar'];
|
||||
|
@ -1522,8 +1538,7 @@ function bluesky_fetch_missing_post(string $uri, int $uid, int $fetch_uid, int $
|
|||
Logger::debug('Reply count', ['level' => $level, 'uid' => $uid, 'uri' => $uri]);
|
||||
|
||||
if ($causer != 0) {
|
||||
$cdata = Contact::getPublicAndUserContactID($causer, $uid);
|
||||
$causer = $cdata['public'] ?? 0;
|
||||
$causer = Contact::getPublicContactId($causer, $uid);
|
||||
}
|
||||
|
||||
return bluesky_process_thread($data->thread, $uid, $fetch_uid, $post_reason, $causer, $level, $last_poll);
|
||||
|
@ -1592,7 +1607,7 @@ function bluesky_process_thread(stdClass $thread, int $uid, int $fetch_uid, int
|
|||
|
||||
function bluesky_get_contact(stdClass $author, int $uid, int $fetch_uid): array
|
||||
{
|
||||
$condition = ['network' => Protocol::BLUESKY, 'uid' => 0, 'url' => $author->did];
|
||||
$condition = ['network' => Protocol::BLUESKY, 'uid' => 0, 'nurl' => $author->did];
|
||||
$contact = Contact::selectFirst(['id', 'updated'], $condition);
|
||||
|
||||
$update = empty($contact) || $contact['updated'] < DateTimeFormat::utc('now -24 hours');
|
||||
|
@ -1610,7 +1625,7 @@ function bluesky_get_contact(stdClass $author, int $uid, int $fetch_uid): array
|
|||
}
|
||||
|
||||
if ($uid != 0) {
|
||||
$condition = ['network' => Protocol::BLUESKY, 'uid' => $uid, 'url' => $author->did];
|
||||
$condition = ['network' => Protocol::BLUESKY, 'uid' => $uid, 'nurl' => $author->did];
|
||||
|
||||
$contact = Contact::selectFirst(['id', 'rel', 'uid'], $condition);
|
||||
if (!isset($fields['rel']) && isset($contact['rel'])) {
|
||||
|
@ -1705,6 +1720,9 @@ function bluesky_get_feeds(int $uid): array
|
|||
{
|
||||
$type = '$type';
|
||||
$preferences = bluesky_get_preferences($uid);
|
||||
if (empty($preferences) || empty($preferences->preferences)) {
|
||||
return [];
|
||||
}
|
||||
foreach ($preferences->preferences as $preference) {
|
||||
if ($preference->$type == 'app.bsky.actor.defs#savedFeedsPref') {
|
||||
return $preference->pinned ?? [];
|
||||
|
@ -1713,7 +1731,7 @@ function bluesky_get_feeds(int $uid): array
|
|||
return [];
|
||||
}
|
||||
|
||||
function bluesky_get_preferences(int $uid): stdClass
|
||||
function bluesky_get_preferences(int $uid): ?stdClass
|
||||
{
|
||||
$cachekey = 'bluesky:preferences:' . $uid;
|
||||
$data = DI::cache()->get($cachekey);
|
||||
|
@ -1722,6 +1740,9 @@ function bluesky_get_preferences(int $uid): stdClass
|
|||
}
|
||||
|
||||
$data = bluesky_xrpc_get($uid, 'app.bsky.actor.getPreferences');
|
||||
if (empty($data)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
DI::cache()->set($cachekey, $data, Duration::HOUR);
|
||||
return $data;
|
||||
|
@ -1764,6 +1785,14 @@ function bluesky_get_did_by_dns(string $handle): string
|
|||
|
||||
function bluesky_get_did(string $handle): string
|
||||
{
|
||||
if ($handle == '') {
|
||||
return '';
|
||||
}
|
||||
|
||||
if (strpos($handle, '.') === false) {
|
||||
$handle .= '.' . BLUESKY_HOSTNAME;
|
||||
}
|
||||
|
||||
// Deactivated at the moment, since it isn't reliable by now
|
||||
//$did = bluesky_get_did_by_dns($handle);
|
||||
//if ($did != '') {
|
||||
|
@ -1907,7 +1936,11 @@ function bluesky_create_token(int $uid, string $password): string
|
|||
|
||||
function bluesky_xrpc_post(int $uid, string $url, $parameters): ?stdClass
|
||||
{
|
||||
return bluesky_post($uid, '/xrpc/' . $url, json_encode($parameters), ['Content-type' => 'application/json', 'Authorization' => ['Bearer ' . bluesky_get_token($uid)]]);
|
||||
$data = bluesky_post($uid, '/xrpc/' . $url, json_encode($parameters), ['Content-type' => 'application/json', 'Authorization' => ['Bearer ' . bluesky_get_token($uid)]]);
|
||||
if (!empty($data)) {
|
||||
Item::incrementOutbound(Protocol::BLUESKY);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
function bluesky_post(int $uid, string $url, string $params, array $headers): ?stdClass
|
||||
|
@ -1965,5 +1998,6 @@ function bluesky_get(string $url, string $accept_content = HttpClientAccept::DEF
|
|||
return null;
|
||||
}
|
||||
|
||||
Item::incrementInbound(Protocol::BLUESKY);
|
||||
return json_decode($curlResult->getBodyString());
|
||||
}
|
||||
|
|
|
@ -6,55 +6,55 @@
|
|||
# Translators:
|
||||
# fabrixxm <fabrix.xm@gmail.com>, 2018
|
||||
# Davide Pesenti <mrjive@mrjive.it>, 2018
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2021
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2023
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-12-29 00:53+0000\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2018-04-07 05:23+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
|
||||
"Language-Team: Italian (https://www.transifex.com/Friendica/teams/12172/it/)\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2023\n"
|
||||
"Language-Team: Italian (https://app.transifex.com/Friendica/teams/12172/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"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: catavatar.php:48
|
||||
msgid "Use Cat as Avatar"
|
||||
msgstr "Usa il Gatto come avatar"
|
||||
|
||||
#: catavatar.php:49
|
||||
msgid "More Random Cat!"
|
||||
msgstr "Altro Gatto a caso!"
|
||||
|
||||
#: catavatar.php:50
|
||||
msgid "Reset to email Cat"
|
||||
msgstr "Reimposta Gatto"
|
||||
|
||||
#: catavatar.php:52
|
||||
msgid "Cat Avatar Settings"
|
||||
msgstr "Impostazioni Avatar Gatto"
|
||||
|
||||
#: catavatar.php:53
|
||||
msgid "Set default profile avatar or randomize the cat."
|
||||
msgstr "Imposta l'immagine di profilo predefinita o crea un gatto casuale."
|
||||
|
||||
#: catavatar.php:78
|
||||
#: catavatar.php:53
|
||||
msgid "Cat Avatar Settings"
|
||||
msgstr "Impostazioni Avatar Gatto"
|
||||
|
||||
#: catavatar.php:56
|
||||
msgid "Use Cat as Avatar"
|
||||
msgstr "Usa il Gatto come avatar"
|
||||
|
||||
#: catavatar.php:57
|
||||
msgid "Another random Cat!"
|
||||
msgstr "Un altro Gatto casuale!"
|
||||
|
||||
#: catavatar.php:58
|
||||
msgid "Reset to email Cat"
|
||||
msgstr "Reimposta Gatto"
|
||||
|
||||
#: catavatar.php:77
|
||||
msgid "The cat hadn't found itself."
|
||||
msgstr "Il gatto non ha trovato sé stesso."
|
||||
|
||||
#: catavatar.php:87
|
||||
#: catavatar.php:86
|
||||
msgid "There was an error, the cat ran away."
|
||||
msgstr "Si è verificato un errore, il gatto è scappato."
|
||||
|
||||
#: catavatar.php:93
|
||||
#: catavatar.php:92
|
||||
msgid "Profile Photos"
|
||||
msgstr "Foto del profilo"
|
||||
|
||||
#: catavatar.php:108
|
||||
#: catavatar.php:102
|
||||
msgid "Meow!"
|
||||
msgstr "Miao!"
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Use Cat as Avatar'] = 'Usa il Gatto come avatar';
|
||||
$a->strings['More Random Cat!'] = 'Altro Gatto a caso!';
|
||||
$a->strings['Reset to email Cat'] = 'Reimposta Gatto';
|
||||
$a->strings['Cat Avatar Settings'] = 'Impostazioni Avatar Gatto';
|
||||
$a->strings['Set default profile avatar or randomize the cat.'] = 'Imposta l\'immagine di profilo predefinita o crea un gatto casuale.';
|
||||
$a->strings['Cat Avatar Settings'] = 'Impostazioni Avatar Gatto';
|
||||
$a->strings['Use Cat as Avatar'] = 'Usa il Gatto come avatar';
|
||||
$a->strings['Another random Cat!'] = 'Un altro Gatto casuale!';
|
||||
$a->strings['Reset to email Cat'] = 'Reimposta Gatto';
|
||||
$a->strings['The cat hadn\'t found itself.'] = 'Il gatto non ha trovato sé stesso.';
|
||||
$a->strings['There was an error, the cat ran away.'] = 'Si è verificato un errore, il gatto è scappato.';
|
||||
$a->strings['Profile Photos'] = 'Foto del profilo';
|
||||
|
|
|
@ -152,7 +152,7 @@ function curweather_network_mod_init(string &$body)
|
|||
|
||||
function curweather_addon_settings_post($post)
|
||||
{
|
||||
if (!DI::userSession()->getLocalUserId() || empty($_POST['curweather-settings-submit'])) {
|
||||
if (!DI::userSession()->getLocalUserId() || empty($_POST['curweather-submit'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#
|
||||
# Translators:
|
||||
# bob lebonche <lebonche@tutanota.com>, 2021
|
||||
# cracrayol, 2024
|
||||
# Hypolite Petovan <hypolite@mrpetovan.com>, 2022
|
||||
# Hypolite Petovan <hypolite@mrpetovan.com>, 2016
|
||||
# ea1cd8241cb389ffb6f92bc6891eff5d_dc12308 <70dced5587d47e18d88f9298024d96f8_93383>, 2015
|
||||
|
@ -15,8 +16,8 @@ msgstr ""
|
|||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2014-06-22 11:34+0000\n"
|
||||
"Last-Translator: Hypolite Petovan <hypolite@mrpetovan.com>, 2022\n"
|
||||
"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"Last-Translator: cracrayol, 2024\n"
|
||||
"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
@ -45,7 +46,7 @@ msgstr "Vent"
|
|||
|
||||
#: curweather.php:140
|
||||
msgid "Last Updated"
|
||||
msgstr "Dernière mise-à-jour"
|
||||
msgstr "Dernière mise à jour"
|
||||
|
||||
#: curweather.php:141
|
||||
msgid "Data by"
|
||||
|
|
|
@ -10,7 +10,7 @@ $a->strings['Current Weather'] = 'Météo actuelle';
|
|||
$a->strings['Relative Humidity'] = 'Humidité relative';
|
||||
$a->strings['Pressure'] = 'Pression';
|
||||
$a->strings['Wind'] = 'Vent';
|
||||
$a->strings['Last Updated'] = 'Dernière mise-à-jour';
|
||||
$a->strings['Last Updated'] = 'Dernière mise à jour';
|
||||
$a->strings['Data by'] = 'Données de';
|
||||
$a->strings['Show on map'] = 'Montrer sur la carte';
|
||||
$a->strings['There was a problem accessing the weather data. But have a look'] = 'Une erreur est survenue lors de l\'accès aux données météo. Vous pouvez quand même jeter un oeil';
|
||||
|
|
|
@ -5,27 +5,27 @@
|
|||
#
|
||||
# Translators:
|
||||
# fabrixxm <fabrix.xm@gmail.com>, 2014-2015
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2021
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2021,2023
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-02-16 12:57+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2014-06-22 11:34+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021,2023\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/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"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: curweather.php:47
|
||||
msgid "Error fetching weather data. Error was: "
|
||||
msgstr "Errore durante il recupero dei dati meteo. L'errore è stato:"
|
||||
|
||||
#: curweather.php:130 curweather.php:192
|
||||
#: curweather.php:130
|
||||
msgid "Current Weather"
|
||||
msgstr "Meteo"
|
||||
|
||||
|
@ -61,66 +61,66 @@ msgstr "C'è stato un problema accedendo ai dati meteo, ma dai un'occhiata"
|
|||
msgid "at OpenWeatherMap"
|
||||
msgstr "a OpenWeatherMap"
|
||||
|
||||
#: curweather.php:179
|
||||
#: curweather.php:178
|
||||
msgid "No APPID found, please contact your admin to obtain one."
|
||||
msgstr "APPID non trovata, contatta il tuo amministratore per averne una."
|
||||
|
||||
#: curweather.php:191 curweather.php:229
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
||||
#: curweather.php:192
|
||||
msgid "Settings"
|
||||
msgstr "Impostazioni"
|
||||
|
||||
#: curweather.php:194
|
||||
#: curweather.php:188
|
||||
msgid "Enter either the name of your location or the zip code."
|
||||
msgstr "Inserisci il nome della tua posizione o il CAP"
|
||||
|
||||
#: curweather.php:195
|
||||
#: curweather.php:189
|
||||
msgid "Your Location"
|
||||
msgstr "La tua Posizione"
|
||||
|
||||
#: curweather.php:195
|
||||
#: curweather.php:189
|
||||
msgid ""
|
||||
"Identifier of your location (name or zip code), e.g. <em>Berlin,DE</em> or "
|
||||
"<em>14476,DE</em>."
|
||||
msgstr "Identificatore della tua posizione (nome o CAP), p.e. <em>Roma, IT</em> or <em>00186,IT</em>."
|
||||
|
||||
#: curweather.php:196
|
||||
#: curweather.php:190
|
||||
msgid "Units"
|
||||
msgstr "Unità"
|
||||
|
||||
#: curweather.php:196
|
||||
#: curweather.php:190
|
||||
msgid "select if the temperature should be displayed in °C or °F"
|
||||
msgstr "scegli se la temperatura deve essere mostrata in °C o in °F"
|
||||
|
||||
#: curweather.php:197
|
||||
#: curweather.php:191
|
||||
msgid "Show weather data"
|
||||
msgstr "Mostra dati meteo"
|
||||
|
||||
#: curweather.php:232
|
||||
#: curweather.php:196
|
||||
msgid "Current Weather Settings"
|
||||
msgstr "Impostazioni Meteo"
|
||||
|
||||
#: curweather.php:227
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
||||
#: curweather.php:230
|
||||
msgid "Caching Interval"
|
||||
msgstr "Intervallo di cache"
|
||||
|
||||
#: curweather.php:234
|
||||
#: curweather.php:232
|
||||
msgid ""
|
||||
"For how long should the weather data be cached? Choose according your "
|
||||
"OpenWeatherMap account type."
|
||||
msgstr "Per quanto tempo i dati meteo devono essere memorizzati? Scegli a seconda del tuo tipo di account su OpenWeatherMap."
|
||||
|
||||
#: curweather.php:235
|
||||
#: curweather.php:233
|
||||
msgid "no cache"
|
||||
msgstr "nessuna cache"
|
||||
|
||||
#: curweather.php:236 curweather.php:237 curweather.php:238 curweather.php:239
|
||||
#: curweather.php:234 curweather.php:235 curweather.php:236 curweather.php:237
|
||||
msgid "minutes"
|
||||
msgstr "minuti"
|
||||
|
||||
#: curweather.php:242
|
||||
#: curweather.php:240
|
||||
msgid "Your APPID"
|
||||
msgstr "Il tuo APPID"
|
||||
|
||||
#: curweather.php:242
|
||||
#: curweather.php:240
|
||||
msgid "Your API key provided by OpenWeatherMap"
|
||||
msgstr "La tua chiave API da OpenWeatherMap"
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Error fetching weather data. Error was: '] = 'Errore durante il recupero dei dati meteo. L\'errore è stato:';
|
||||
$a->strings['Current Weather'] = 'Meteo';
|
||||
|
@ -16,14 +16,14 @@ $a->strings['Show on map'] = 'Mostra sulla mappa';
|
|||
$a->strings['There was a problem accessing the weather data. But have a look'] = 'C\'è stato un problema accedendo ai dati meteo, ma dai un\'occhiata';
|
||||
$a->strings['at OpenWeatherMap'] = 'a OpenWeatherMap';
|
||||
$a->strings['No APPID found, please contact your admin to obtain one.'] = 'APPID non trovata, contatta il tuo amministratore per averne una.';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Settings'] = 'Impostazioni';
|
||||
$a->strings['Enter either the name of your location or the zip code.'] = 'Inserisci il nome della tua posizione o il CAP';
|
||||
$a->strings['Your Location'] = 'La tua Posizione';
|
||||
$a->strings['Identifier of your location (name or zip code), e.g. <em>Berlin,DE</em> or <em>14476,DE</em>.'] = 'Identificatore della tua posizione (nome o CAP), p.e. <em>Roma, IT</em> or <em>00186,IT</em>.';
|
||||
$a->strings['Units'] = 'Unità';
|
||||
$a->strings['select if the temperature should be displayed in °C or °F'] = 'scegli se la temperatura deve essere mostrata in °C o in °F';
|
||||
$a->strings['Show weather data'] = 'Mostra dati meteo';
|
||||
$a->strings['Current Weather Settings'] = 'Impostazioni Meteo';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Caching Interval'] = 'Intervallo di cache';
|
||||
$a->strings['For how long should the weather data be cached? Choose according your OpenWeatherMap account type.'] = 'Per quanto tempo i dati meteo devono essere memorizzati? Scegli a seconda del tuo tipo di account su OpenWeatherMap.';
|
||||
$a->strings['no cache'] = 'nessuna cache';
|
||||
|
|
|
@ -5,45 +5,41 @@
|
|||
#
|
||||
# Translators:
|
||||
# fabrixxm <fabrix.xm@gmail.com>, 2014,2018
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2020-2021
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2020-2021,2023
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-02-16 12:55+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2014-06-22 11:41+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2020-2021,2023\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/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"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: dwpost.php:41
|
||||
#: dwpost.php:43
|
||||
msgid "Post to Dreamwidth"
|
||||
msgstr "Invia a Dreamwidth"
|
||||
|
||||
#: dwpost.php:72 dwpost.php:76
|
||||
msgid "Dreamwidth Export"
|
||||
msgstr "Esporta Dreamwidth"
|
||||
#: dwpost.php:63
|
||||
msgid "Enable Dreamwidth Post Addon"
|
||||
msgstr "Abilita il componente aggiuntivo di pubblicazione Dreamwidth"
|
||||
|
||||
#: dwpost.php:80
|
||||
msgid "Enable dreamwidth Post Addon"
|
||||
msgstr "Abilita il componente aggiuntivo di invio a Dreamwidth"
|
||||
|
||||
#: dwpost.php:85
|
||||
msgid "dreamwidth username"
|
||||
#: dwpost.php:64
|
||||
msgid "Dreamwidth username"
|
||||
msgstr "Nome utente Dreamwidth"
|
||||
|
||||
#: dwpost.php:90
|
||||
msgid "dreamwidth password"
|
||||
msgstr "password Dreamwidth"
|
||||
#: dwpost.php:65
|
||||
msgid "Dreamwidth password"
|
||||
msgstr "Password Dreamwidth"
|
||||
|
||||
#: dwpost.php:95
|
||||
msgid "Post to dreamwidth by default"
|
||||
msgstr "Invia sempre a Dreamwidth"
|
||||
#: dwpost.php:66
|
||||
msgid "Post to Dreamwidth by default"
|
||||
msgstr "Pubblica su dreamwidth per impostazione predefinita"
|
||||
|
||||
#: dwpost.php:100
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
#: dwpost.php:71
|
||||
msgid "Dreamwidth Export"
|
||||
msgstr "Esporta Dreamwidth"
|
||||
|
|
|
@ -3,12 +3,11 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Post to Dreamwidth'] = 'Invia a Dreamwidth';
|
||||
$a->strings['Enable Dreamwidth Post Addon'] = 'Abilita il componente aggiuntivo di pubblicazione Dreamwidth';
|
||||
$a->strings['Dreamwidth username'] = 'Nome utente Dreamwidth';
|
||||
$a->strings['Dreamwidth password'] = 'Password Dreamwidth';
|
||||
$a->strings['Post to Dreamwidth by default'] = 'Pubblica su dreamwidth per impostazione predefinita';
|
||||
$a->strings['Dreamwidth Export'] = 'Esporta Dreamwidth';
|
||||
$a->strings['Enable dreamwidth Post Addon'] = 'Abilita il componente aggiuntivo di invio a Dreamwidth';
|
||||
$a->strings['dreamwidth username'] = 'Nome utente Dreamwidth';
|
||||
$a->strings['dreamwidth password'] = 'password Dreamwidth';
|
||||
$a->strings['Post to dreamwidth by default'] = 'Invia sempre a Dreamwidth';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
# Translators:
|
||||
# bob lebonche <lebonche@tutanota.com>, 2021
|
||||
# ButterflyOfFire, 2020
|
||||
# cracrayol, 2024
|
||||
# Hypolite Petovan <hypolite@mrpetovan.com>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
@ -13,8 +14,8 @@ msgstr ""
|
|||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:27+0000\n"
|
||||
"Last-Translator: bob lebonche <lebonche@tutanota.com>, 2021\n"
|
||||
"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"Last-Translator: cracrayol, 2024\n"
|
||||
"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
@ -29,7 +30,7 @@ msgstr "Remplacer les coordonnées par le nom de la localité la plus proche dan
|
|||
|
||||
#: geonames.php:136
|
||||
msgid "Enable Geonames Addon"
|
||||
msgstr "Activer l'application complémentaire Geonames"
|
||||
msgstr "Activer l'extension Geonames"
|
||||
|
||||
#: geonames.php:141
|
||||
msgid "Geonames Settings"
|
||||
|
|
|
@ -6,5 +6,5 @@ function string_plural_select_fr($n){
|
|||
if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Replace numerical coordinates by the nearest populated location name in your posts.'] = 'Remplacer les coordonnées par le nom de la localité la plus proche dans votre publication.';
|
||||
$a->strings['Enable Geonames Addon'] = 'Activer l\'application complémentaire Geonames';
|
||||
$a->strings['Enable Geonames Addon'] = 'Activer l\'extension Geonames';
|
||||
$a->strings['Geonames Settings'] = 'Paramètres Geonames';
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
# Translators:
|
||||
# bob lebonche <lebonche@tutanota.com>, 2021
|
||||
# ButterflyOfFire, 2020
|
||||
# cracrayol, 2024
|
||||
# Hypolite Petovan <hypolite@mrpetovan.com>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
@ -13,8 +14,8 @@ msgstr ""
|
|||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:30+0000\n"
|
||||
"Last-Translator: bob lebonche <lebonche@tutanota.com>, 2021\n"
|
||||
"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"Last-Translator: cracrayol, 2024\n"
|
||||
"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
@ -29,7 +30,7 @@ msgstr "Permettre le filtrage des notifications de commentaires par courriel sur
|
|||
|
||||
#: gnot.php:64
|
||||
msgid "Enable this addon?"
|
||||
msgstr "Activer cette application complémentaire ?"
|
||||
msgstr "Activer cette extension ?"
|
||||
|
||||
#: gnot.php:69
|
||||
msgid "Gnot Settings"
|
||||
|
|
|
@ -6,6 +6,6 @@ function string_plural_select_fr($n){
|
|||
if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Allows threading of email comment notifications on Gmail and anonymising the subject line.'] = 'Permettre le filtrage des notifications de commentaires par courriel sur Gmail et l\'anonymisation de l\'objet.';
|
||||
$a->strings['Enable this addon?'] = 'Activer cette application complémentaire ?';
|
||||
$a->strings['Enable this addon?'] = 'Activer cette extension ?';
|
||||
$a->strings['Gnot Settings'] = 'Paramètres Gnot';
|
||||
$a->strings['[Friendica:Notify] Comment to conversation #%d'] = '[Friendica:Notify] Commentaire vers conversation #%d';
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#
|
||||
# Translators:
|
||||
# bob lebonche <lebonche@tutanota.com>, 2021
|
||||
# cracrayol, 2024
|
||||
# Marie Olive <lacellule101@gmail.com>, 2018
|
||||
# ea1cd8241cb389ffb6f92bc6891eff5d_dc12308 <70dced5587d47e18d88f9298024d96f8_93383>, 2015
|
||||
msgid ""
|
||||
|
@ -13,8 +14,8 @@ msgstr ""
|
|||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:33+0000\n"
|
||||
"Last-Translator: bob lebonche <lebonche@tutanota.com>, 2021\n"
|
||||
"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"Last-Translator: cracrayol, 2024\n"
|
||||
"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
@ -50,7 +51,7 @@ msgid ""
|
|||
"Libravatar addon is installed, too. Please disable Libravatar addon or this "
|
||||
"Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if "
|
||||
"nothing was found at Libravatar."
|
||||
msgstr "L'application complémentaire Libravatar est aussi installée. Merci de désactiver l'application complémentaire Libravatar ou cette application complémentaire Gravatar. L'application complémentaire se repliera sur Gravatar si rien n'est trouvé dans Libravatar."
|
||||
msgstr "L'extension Libravatar est aussi installée. Merci de désactiver l'extension Libravatar ou cette extension Gravatar. L'extension se repliera sur Gravatar si rien n'est trouvé dans Libravatar."
|
||||
|
||||
#: gravatar.php:102
|
||||
msgid "Save Settings"
|
||||
|
|
|
@ -11,7 +11,7 @@ $a->strings['monster face'] = 'Face de monstre';
|
|||
$a->strings['computer generated face'] = 'visage généré par ordinateur';
|
||||
$a->strings['retro arcade style face'] = 'Face style retro arcade';
|
||||
$a->strings['Information'] = 'Information';
|
||||
$a->strings['Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar.'] = 'L\'application complémentaire Libravatar est aussi installée. Merci de désactiver l\'application complémentaire Libravatar ou cette application complémentaire Gravatar. L\'application complémentaire se repliera sur Gravatar si rien n\'est trouvé dans Libravatar.';
|
||||
$a->strings['Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar.'] = 'L\'extension Libravatar est aussi installée. Merci de désactiver l\'extension Libravatar ou cette extension Gravatar. L\'extension se repliera sur Gravatar si rien n\'est trouvé dans Libravatar.';
|
||||
$a->strings['Save Settings'] = 'Sauvegarder les paramètres.';
|
||||
$a->strings['Default avatar image'] = 'Image par défaut d\'avatar';
|
||||
$a->strings['Select default avatar image if none was found at Gravatar. See README'] = 'Sélectionner l\'avatar par défaut, si aucun n\'est trouvé sur Gravatar. Voir Lisezmoi.';
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#
|
||||
# Translators:
|
||||
# bob lebonche <lebonche@tutanota.com>, 2021
|
||||
# cracrayol, 2024
|
||||
# Hypolite Petovan <hypolite@mrpetovan.com>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
@ -12,8 +13,8 @@ msgstr ""
|
|||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 08:37+0000\n"
|
||||
"Last-Translator: bob lebonche <lebonche@tutanota.com>, 2021\n"
|
||||
"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"Last-Translator: cracrayol, 2024\n"
|
||||
"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
@ -26,7 +27,7 @@ msgstr "Publier sur Insanejournal"
|
|||
|
||||
#: ijpost.php:61
|
||||
msgid "Enable InsaneJournal Post Addon"
|
||||
msgstr "Activer l'application complémentaire InsaneJournalPost"
|
||||
msgstr "Activer l'extension InsaneJournal"
|
||||
|
||||
#: ijpost.php:62
|
||||
msgid "InsaneJournal username"
|
||||
|
|
|
@ -6,7 +6,7 @@ function string_plural_select_fr($n){
|
|||
if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Post to Insanejournal'] = 'Publier sur Insanejournal';
|
||||
$a->strings['Enable InsaneJournal Post Addon'] = 'Activer l\'application complémentaire InsaneJournalPost';
|
||||
$a->strings['Enable InsaneJournal Post Addon'] = 'Activer l\'extension InsaneJournal';
|
||||
$a->strings['InsaneJournal username'] = 'Identifiant du InsaneJournal';
|
||||
$a->strings['InsaneJournal password'] = 'Mot de passe du InsaneJournal';
|
||||
$a->strings['Post to InsaneJournal by default'] = 'Publier sur le InsaneJournal par défaut';
|
||||
|
|
|
@ -50,7 +50,11 @@ function js_upload_post_init(array &$b)
|
|||
// list of valid extensions
|
||||
$allowedExtensions = [];
|
||||
foreach (Images::IMAGETYPES as $type) {
|
||||
$allowedExtensions[] = image_type_to_extension($type, false);
|
||||
$extension = image_type_to_extension($type, false);
|
||||
if ($extension == 'jpeg') {
|
||||
$allowedExtensions[] = 'jpg';
|
||||
}
|
||||
$allowedExtensions[] = $extension;
|
||||
}
|
||||
|
||||
// max file size in bytes
|
||||
|
|
|
@ -5,14 +5,15 @@
|
|||
#
|
||||
# Translators:
|
||||
# bob lebonche <lebonche@tutanota.com>, 2021
|
||||
# cracrayol, 2024
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:14-0500\n"
|
||||
"PO-Revision-Date: 2015-07-07 15:14+0000\n"
|
||||
"Last-Translator: bob lebonche <lebonche@tutanota.com>, 2021\n"
|
||||
"Language-Team: French (http://www.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"Last-Translator: cracrayol, 2024\n"
|
||||
"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
@ -21,7 +22,7 @@ msgstr ""
|
|||
|
||||
#: krynn.php:127
|
||||
msgid "Enable Krynn Addon"
|
||||
msgstr "Activer l'application complémentaire Krynn"
|
||||
msgstr "Activer l'extension Krynn"
|
||||
|
||||
#: krynn.php:132
|
||||
msgid "Krynn Settings"
|
||||
|
|
|
@ -5,5 +5,5 @@ function string_plural_select_fr($n){
|
|||
$n = intval($n);
|
||||
if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Enable Krynn Addon'] = 'Activer l\'application complémentaire Krynn';
|
||||
$a->strings['Enable Krynn Addon'] = 'Activer l\'extension Krynn';
|
||||
$a->strings['Krynn Settings'] = 'Paramètres de Krynn';
|
||||
|
|
|
@ -5,45 +5,41 @@
|
|||
#
|
||||
# Translators:
|
||||
# fabrixxm <fabrix.xm@gmail.com>, 2014-2015,2018
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2021
|
||||
# Sylke Vicious <silkevicious@gmail.com>, 2021,2023
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
|
||||
"PO-Revision-Date: 2021-02-16 12:47+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
"POT-Creation-Date: 2023-06-03 15:49-0400\n"
|
||||
"PO-Revision-Date: 2014-06-23 09:44+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021,2023\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/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"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: libertree.php:37
|
||||
#: libertree.php:39
|
||||
msgid "Post to libertree"
|
||||
msgstr "Invia a Libertree"
|
||||
|
||||
#: libertree.php:71 libertree.php:75
|
||||
msgid "libertree Export"
|
||||
msgstr "Esporta libertree"
|
||||
|
||||
#: libertree.php:79
|
||||
#: libertree.php:59
|
||||
msgid "Enable Libertree Post Addon"
|
||||
msgstr "Abilita il componente aggiuntivo di invio a Libertree"
|
||||
|
||||
#: libertree.php:84
|
||||
msgid "Libertree API token"
|
||||
msgstr "Token API Libertree"
|
||||
|
||||
#: libertree.php:89
|
||||
#: libertree.php:60
|
||||
msgid "Libertree site URL"
|
||||
msgstr "Indirizzo sito Libertree"
|
||||
|
||||
#: libertree.php:94
|
||||
#: libertree.php:61
|
||||
msgid "Libertree API token"
|
||||
msgstr "Token API Libertree"
|
||||
|
||||
#: libertree.php:62
|
||||
msgid "Post to Libertree by default"
|
||||
msgstr "Invia sempre a Libertree"
|
||||
|
||||
#: libertree.php:100
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
#: libertree.php:67
|
||||
msgid "Libertree Export"
|
||||
msgstr "Esporta Libertree"
|
||||
|
|
|
@ -3,12 +3,11 @@
|
|||
if(! function_exists("string_plural_select_it")) {
|
||||
function string_plural_select_it($n){
|
||||
$n = intval($n);
|
||||
return intval($n != 1);
|
||||
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Post to libertree'] = 'Invia a Libertree';
|
||||
$a->strings['libertree Export'] = 'Esporta libertree';
|
||||
$a->strings['Enable Libertree Post Addon'] = 'Abilita il componente aggiuntivo di invio a Libertree';
|
||||
$a->strings['Libertree API token'] = 'Token API Libertree';
|
||||
$a->strings['Libertree site URL'] = 'Indirizzo sito Libertree';
|
||||
$a->strings['Libertree API token'] = 'Token API Libertree';
|
||||
$a->strings['Post to Libertree by default'] = 'Invia sempre a Libertree';
|
||||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Libertree Export'] = 'Esporta Libertree';
|
||||
|
|
|
@ -5,16 +5,18 @@
|
|||
#
|
||||
# Translators:
|
||||
# Andreas H., 2014
|
||||
# foss <oss@disr.it>, 2022
|
||||
# Raroun, 2023
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018
|
||||
# Ulf Rompe <transifex.com@rompe.org>, 2019
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-03-11 19:13+0100\n"
|
||||
"PO-Revision-Date: 2019-02-18 15:05+0000\n"
|
||||
"Last-Translator: Ulf Rompe <transifex.com@rompe.org>\n"
|
||||
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"POT-Creation-Date: 2021-11-21 19:15-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 09:54+0000\n"
|
||||
"Last-Translator: Raroun, 2023\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
@ -29,72 +31,76 @@ msgstr "Absender"
|
|||
msgid "Email address that stream items will appear to be from."
|
||||
msgstr "E-Mail-Adresse, die in hochgeladenen Artikeln erscheint."
|
||||
|
||||
#: mailstream.php:82 mailstream.php:380
|
||||
#: mailstream.php:82
|
||||
msgid "Save Settings"
|
||||
msgstr "Einstellungen speichern"
|
||||
|
||||
#: mailstream.php:223
|
||||
#: mailstream.php:311
|
||||
msgid "Re:"
|
||||
msgstr "Re:"
|
||||
|
||||
#: mailstream.php:231
|
||||
#: mailstream.php:324 mailstream.php:327
|
||||
msgid "Friendica post"
|
||||
msgstr "Friendica-Veröffentlichung"
|
||||
|
||||
#: mailstream.php:234
|
||||
#: mailstream.php:330
|
||||
msgid "Diaspora post"
|
||||
msgstr "Diaspora-Veröffentlichung"
|
||||
|
||||
#: mailstream.php:244
|
||||
#: mailstream.php:340
|
||||
msgid "Feed item"
|
||||
msgstr "Artikel-Feed"
|
||||
|
||||
#: mailstream.php:247
|
||||
#: mailstream.php:343
|
||||
msgid "Email"
|
||||
msgstr "E-Mail"
|
||||
|
||||
#: mailstream.php:249
|
||||
#: mailstream.php:345
|
||||
msgid "Friendica Item"
|
||||
msgstr "Friendica-Artikel"
|
||||
|
||||
#: mailstream.php:293
|
||||
#: mailstream.php:419
|
||||
msgid "Upstream"
|
||||
msgstr "Upstream"
|
||||
|
||||
#: mailstream.php:294
|
||||
#: mailstream.php:420
|
||||
msgid "URI"
|
||||
msgstr "URI"
|
||||
|
||||
#: mailstream.php:421
|
||||
msgid "Local"
|
||||
msgstr "Lokal"
|
||||
|
||||
#: mailstream.php:362
|
||||
#: mailstream.php:499
|
||||
msgid "Enabled"
|
||||
msgstr "eingeschaltet"
|
||||
msgstr "Aktiv"
|
||||
|
||||
#: mailstream.php:366
|
||||
#: mailstream.php:504
|
||||
msgid "Email Address"
|
||||
msgstr "E-Mail-Adresse"
|
||||
|
||||
#: mailstream.php:368
|
||||
#: mailstream.php:506
|
||||
msgid "Leave blank to use your account email address"
|
||||
msgstr "Leer lassen für deine Konto-E-Mail-Addresse"
|
||||
|
||||
#: mailstream.php:371
|
||||
#: mailstream.php:510
|
||||
msgid "Exclude Likes"
|
||||
msgstr "Likes ignorieren"
|
||||
|
||||
#: mailstream.php:373
|
||||
#: mailstream.php:512
|
||||
msgid "Check this to omit mailing \"Like\" notifications"
|
||||
msgstr "Diese Option verhindert das Versenden von \"Like\"-Benachrichtigungen per E-Mail."
|
||||
|
||||
#: mailstream.php:376
|
||||
#: mailstream.php:516
|
||||
msgid "Attach Images"
|
||||
msgstr "Bilder anhängen"
|
||||
|
||||
#: mailstream.php:378
|
||||
#: mailstream.php:518
|
||||
msgid ""
|
||||
"Download images in posts and attach them to the email. Useful for reading "
|
||||
"email while offline."
|
||||
msgstr "Sollen Bilder, die im Beitrag eingebettet sind, als Dateianhang in den E-Mails verschickt werden?"
|
||||
|
||||
#: mailstream.php:379
|
||||
#: mailstream.php:525
|
||||
msgid "Mail Stream Settings"
|
||||
msgstr "Mail-Nachrichten-Einstellungen"
|
||||
|
|
|
@ -15,8 +15,9 @@ $a->strings['Feed item'] = 'Artikel-Feed';
|
|||
$a->strings['Email'] = 'E-Mail';
|
||||
$a->strings['Friendica Item'] = 'Friendica-Artikel';
|
||||
$a->strings['Upstream'] = 'Upstream';
|
||||
$a->strings['URI'] = 'URI';
|
||||
$a->strings['Local'] = 'Lokal';
|
||||
$a->strings['Enabled'] = 'eingeschaltet';
|
||||
$a->strings['Enabled'] = 'Aktiv';
|
||||
$a->strings['Email Address'] = 'E-Mail-Adresse';
|
||||
$a->strings['Leave blank to use your account email address'] = 'Leer lassen für deine Konto-E-Mail-Addresse';
|
||||
$a->strings['Exclude Likes'] = 'Likes ignorieren';
|
||||
|
|
|
@ -34,26 +34,7 @@ function mailstream_install()
|
|||
Hook::register('post_remote_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook');
|
||||
Hook::register('mailstream_send_hook', 'addon/mailstream/mailstream.php', 'mailstream_send_hook');
|
||||
|
||||
Logger::info("mailstream: installed");
|
||||
}
|
||||
|
||||
/**
|
||||
* Enforces that mailstream_install has set up the current version
|
||||
*/
|
||||
function mailstream_check_version()
|
||||
{
|
||||
if (!is_null(DI::config()->get('mailstream', 'dbversion'))) {
|
||||
DI::config()->delete('mailstream', 'dbversion');
|
||||
Logger::info("mailstream_check_version: old version detected, reinstalling");
|
||||
mailstream_install();
|
||||
Hook::loadHooks();
|
||||
Hook::add(
|
||||
'mailstream_convert_table_entries',
|
||||
'addon/mailstream/mailstream.php',
|
||||
'mailstream_convert_table_entries'
|
||||
);
|
||||
Hook::fork(Worker::PRIORITY_LOW, 'mailstream_convert_table_entries');
|
||||
}
|
||||
Logger::info("installed mailstream");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -105,7 +86,7 @@ function mailstream_generate_id(string $uri): string
|
|||
$host = DI::baseUrl()->getHost();
|
||||
$resource = hash('md5', $uri);
|
||||
$message_id = "<" . $resource . "@" . $host . ">";
|
||||
Logger::debug('mailstream: Generated message ID ' . $message_id . ' for URI ' . $uri);
|
||||
Logger::debug('generated message ID', ['id' => $message_id, 'uri' => $uri]);
|
||||
return $message_id;
|
||||
}
|
||||
|
||||
|
@ -114,20 +95,20 @@ function mailstream_send_hook(array $data)
|
|||
$criteria = array('uid' => $data['uid'], 'contact-id' => $data['contact-id'], 'uri' => $data['uri']);
|
||||
$item = Post::selectFirst([], $criteria);
|
||||
if (empty($item)) {
|
||||
Logger::error('mailstream_send_hook could not find item');
|
||||
Logger::error('could not find item');
|
||||
return;
|
||||
}
|
||||
|
||||
$user = User::getById($item['uid']);
|
||||
if (empty($user)) {
|
||||
Logger::error('mailstream_send_hook could not fund user', ['uid' => $item['uid']]);
|
||||
Logger::error('could not find user', ['uid' => $item['uid']]);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mailstream_send($data['message_id'], $item, $user)) {
|
||||
Logger::debug('mailstream_send_hook send failed, will retry', $data);
|
||||
Logger::debug('send failed, will retry', $data);
|
||||
if (!Worker::defer()) {
|
||||
Logger::error('mailstream_send_hook failed and could not defer', $data);
|
||||
Logger::error('failed and could not defer', $data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -142,35 +123,33 @@ function mailstream_send_hook(array $data)
|
|||
*/
|
||||
function mailstream_post_hook(array &$item)
|
||||
{
|
||||
mailstream_check_version();
|
||||
|
||||
if ($item['uid'] === 0) {
|
||||
Logger::debug('mailstream: root user, skipping item ' . $item['id']);
|
||||
return;
|
||||
}
|
||||
if (!DI::pConfig()->get($item['uid'], 'mailstream', 'enabled')) {
|
||||
Logger::debug('mailstream: not enabled.', ['item' => $item['id'], ' uid ' => $item['uid']]);
|
||||
return;
|
||||
}
|
||||
if (!$item['uid']) {
|
||||
Logger::debug('mailstream: no uid for item ' . $item['id']);
|
||||
return;
|
||||
}
|
||||
if (!$item['contact-id']) {
|
||||
Logger::debug('mailstream: no contact-id for item ' . $item['id']);
|
||||
Logger::debug('no contact-id', ['item' => $item['id']]);
|
||||
return;
|
||||
}
|
||||
if (!$item['uri']) {
|
||||
Logger::debug('mailstream: no uri for item ' . $item['id']);
|
||||
Logger::debug('no uri', ['item' => $item['id']]);
|
||||
return;
|
||||
}
|
||||
if ($item['verb'] == Activity::ANNOUNCE) {
|
||||
Logger::debug('mailstream: announce item ', ['item' => $item['id']]);
|
||||
Logger::debug('ignoring announce', ['item' => $item['id']]);
|
||||
return;
|
||||
}
|
||||
if (DI::pConfig()->get($item['uid'], 'mailstream', 'nolikes')) {
|
||||
if ($item['verb'] == Activity::LIKE) {
|
||||
Logger::debug('mailstream: like item ' . $item['id']);
|
||||
Logger::debug('ignoring like', ['item' => $item['id']]);
|
||||
return;
|
||||
}
|
||||
if ($item['verb'] == Activity::DISLIKE) {
|
||||
Logger::debug('mailstream: dislike item ' . $item['id']);
|
||||
Logger::debug('ignoring dislike', ['item' => $item['id']]);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -220,8 +199,13 @@ function mailstream_do_images(array &$item, array &$attachments)
|
|||
$cookiejar = tempnam(System::getTempPath(), 'cookiejar-mailstream-');
|
||||
try {
|
||||
$curlResult = DI::httpClient()->fetchFull($url, HttpClientAccept::DEFAULT, 0, $cookiejar);
|
||||
if (!$curlResult->isSuccess()) {
|
||||
Logger::debug('mailstream: fetch image url failed', [
|
||||
'url' => $url, 'item_id' => $item['id'], 'return_code' => $curlResult->getReturnCode()]);
|
||||
continue;
|
||||
}
|
||||
} catch (InvalidArgumentException $e) {
|
||||
Logger::error('mailstream_do_images exception fetching url', ['url' => $url, 'item_id' => $item['id']]);
|
||||
Logger::error('exception fetching url', ['url' => $url, 'item_id' => $item['id']]);
|
||||
continue;
|
||||
}
|
||||
$attachments[$url] = [
|
||||
|
@ -322,13 +306,12 @@ function mailstream_subject(array $item): string
|
|||
}
|
||||
$contact = Contact::selectFirst([], ['id' => $item['contact-id'], 'uid' => $item['uid']]);
|
||||
if (!DBA::isResult($contact)) {
|
||||
Logger::error(
|
||||
'mailstream_subject no contact for item',
|
||||
['id' => $item['id'],
|
||||
Logger::error('no contact', [
|
||||
'item' => $item['id'],
|
||||
'plink' => $item['plink'],
|
||||
'contact id' => $item['contact-id'],
|
||||
'uid' => $item['uid']]
|
||||
);
|
||||
'uid' => $item['uid']
|
||||
]);
|
||||
return DI::l10n()->t("Friendica post");
|
||||
}
|
||||
if ($contact['network'] === 'dfrn') {
|
||||
|
@ -365,17 +348,16 @@ function mailstream_subject(array $item): string
|
|||
function mailstream_send(string $message_id, array $item, array $user): bool
|
||||
{
|
||||
if (!is_array($item)) {
|
||||
Logger::error('mailstream_send item is empty', ['message_id' => $message_id]);
|
||||
Logger::error('item is empty', ['message_id' => $message_id]);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!$item['visible']) {
|
||||
Logger::debug('mailstream_send item not yet visible', ['item uri' => $item['uri']]);
|
||||
Logger::debug('item not yet visible', ['item uri' => $item['uri']]);
|
||||
return false;
|
||||
}
|
||||
if (!$message_id) {
|
||||
Logger::error('mailstream_send no message ID supplied', ['item uri' => $item['uri'],
|
||||
'user email' => $user['email']]);
|
||||
Logger::error('no message ID supplied', ['item uri' => $item['uri'], 'user email' => $user['email']]);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -432,13 +414,15 @@ function mailstream_send(string $message_id, array $item, array $user): bool
|
|||
if (!$mail->Send()) {
|
||||
throw new Exception($mail->ErrorInfo);
|
||||
}
|
||||
Logger::debug('mailstream_send sent message', ['message ID' => $mail->MessageID,
|
||||
Logger::debug('sent message', [
|
||||
'message ID' => $mail->MessageID,
|
||||
'subject' => $mail->Subject,
|
||||
'address' => $address]);
|
||||
'address' => $address
|
||||
]);
|
||||
} catch (phpmailerException $e) {
|
||||
Logger::debug('mailstream_send PHPMailer exception sending message ' . $message_id . ': ' . $e->errorMessage());
|
||||
Logger::debug('PHPMailer exception sending message', ['id' => $message_id, 'error' => $e->errorMessage()]);
|
||||
} catch (Exception $e) {
|
||||
Logger::debug('mailstream_send exception sending message ' . $message_id . ': ' . $e->getMessage());
|
||||
Logger::debug('exception sending message', ['id' => $message_id, 'error' => $e->getMessage()]);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -462,29 +446,6 @@ function mailstream_html_wrap(string &$text)
|
|||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert v1 mailstream table entries to v2 workerqueue items
|
||||
*/
|
||||
function mailstream_convert_table_entries()
|
||||
{
|
||||
$ms_item_ids = DBA::selectToArray('mailstream_item', [], ['message-id', 'uri', 'uid', 'contact-id'], ["`mailstream_item`.`completed` IS NULL"]);
|
||||
Logger::debug('mailstream_convert_table_entries processing ' . count($ms_item_ids) . ' items');
|
||||
foreach ($ms_item_ids as $ms_item_id) {
|
||||
$send_hook_data = array('uid' => $ms_item_id['uid'],
|
||||
'contact-id' => $ms_item_id['contact-id'],
|
||||
'uri' => $ms_item_id['uri'],
|
||||
'message_id' => $ms_item_id['message-id'],
|
||||
'tries' => 0);
|
||||
if (!$ms_item_id['message-id'] || !strlen($ms_item_id['message-id'])) {
|
||||
Logger::info('mailstream_convert_table_entries: item has no message-id.', ['item' => $ms_item_id['id'], 'uri' => $ms_item_id['uri']]);
|
||||
continue;
|
||||
}
|
||||
Logger::info('mailstream_convert_table_entries: convert item to workerqueue', $send_hook_data);
|
||||
Hook::fork(Worker::PRIORITY_LOW, 'mailstream_send_hook', $send_hook_data);
|
||||
}
|
||||
DBA::e('DROP TABLE `mailstream_item`');
|
||||
}
|
||||
|
||||
/**
|
||||
* Form for configuring mailstream features for a user
|
||||
*
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Florent C., 2023
|
||||
# cracrayol, 2023-2024
|
||||
# Nicolas Derive, 2022-2023
|
||||
# StefOfficiel <pichard.stephane@free.fr>, 2015
|
||||
# Vincent Vindarel <vindarel@mailz.org>, 2018
|
||||
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-12-10 14:42-0500\n"
|
||||
"PO-Revision-Date: 2014-06-23 10:34+0000\n"
|
||||
"Last-Translator: Florent C., 2023\n"
|
||||
"Last-Translator: cracrayol, 2023-2024\n"
|
||||
"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -42,7 +42,7 @@ msgstr "Liste de mots-clés - séparés par des virgules - à cacher"
|
|||
msgid ""
|
||||
"Use /expression/ to provide regular expressions, #tag to specfically match "
|
||||
"hashtags (case-insensitive), or regular words (case-sensitive)"
|
||||
msgstr "Utiliser /expression/ pour fournir des expressions régulières, #tag pour correspondre à un tag (insensible à la casse), ou des mots classiques (sensible à la casse)"
|
||||
msgstr "Utiliser /expression/ pour fournir des expressions régulières, #etiquette pour correspondre à une étiquette (insensible à la casse), ou des mots classiques (sensible à la casse)"
|
||||
|
||||
#: nsfw.php:72
|
||||
msgid "Content Filter (NSFW and more)"
|
||||
|
|
|
@ -8,7 +8,7 @@ function string_plural_select_fr($n){
|
|||
$a->strings['This addon searches for specified words/text in posts and collapses them. It can be used to filter content tagged with for instance #NSFW that may be deemed inappropriate at certain times or places, such as being at work. It is also useful for hiding irrelevant or annoying content from direct view.'] = 'Cette extension recherche des mots/textes spécifiés dans les publications et les masque. Elle peut être utilisée pour filtrer le contenu étiqueté par exemple avec #NSFW qui peut être considéré comme inapproprié à certains moments ou endroits, comme par exemple au travail. Elle est aussi utile pour cacher du contenu non pertinent ou ennuyeux d\'une vue directe.';
|
||||
$a->strings['Enable Content filter'] = 'Activer le filtrage de contenu';
|
||||
$a->strings['Comma separated list of keywords to hide'] = 'Liste de mots-clés - séparés par des virgules - à cacher';
|
||||
$a->strings['Use /expression/ to provide regular expressions, #tag to specfically match hashtags (case-insensitive), or regular words (case-sensitive)'] = 'Utiliser /expression/ pour fournir des expressions régulières, #tag pour correspondre à un tag (insensible à la casse), ou des mots classiques (sensible à la casse)';
|
||||
$a->strings['Use /expression/ to provide regular expressions, #tag to specfically match hashtags (case-insensitive), or regular words (case-sensitive)'] = 'Utiliser /expression/ pour fournir des expressions régulières, #etiquette pour correspondre à une étiquette (insensible à la casse), ou des mots classiques (sensible à la casse)';
|
||||
$a->strings['Content Filter (NSFW and more)'] = 'Filtre de contenu (NSFW et autres)';
|
||||
$a->strings['Regular expression "%s" fails to compile'] = 'La compilation de l\'expression régulière "%s" a échoué';
|
||||
$a->strings['Filtered tag: %s'] = 'Tag filtré : %s';
|
||||
|
|
213
ratioed/RatioedPanel.php
Normal file
213
ratioed/RatioedPanel.php
Normal file
|
@ -0,0 +1,213 @@
|
|||
<?php
|
||||
|
||||
namespace Friendica\Addon\ratioed;
|
||||
|
||||
use Friendica\Content\Pager;
|
||||
use Friendica\Core\Logger;
|
||||
use Friendica\Core\Renderer;
|
||||
use Friendica\Database\DBA;
|
||||
use Friendica\DI;
|
||||
use Friendica\Model\User;
|
||||
use Friendica\Module\Moderation\Users\Active;
|
||||
|
||||
/**
|
||||
* This class implements the "Behaviour" panel in Moderation/Users
|
||||
*/
|
||||
class RatioedPanel extends Active
|
||||
{
|
||||
protected function content(array $request = []): string
|
||||
{
|
||||
Active::content();
|
||||
|
||||
if (isset(DI::args()->getArgv()[1]) and DI::args()->getArgv()[1] === 'help') {
|
||||
$template = Renderer::getMarkupTemplate('/help.tpl', 'addon/ratioed/');
|
||||
return Renderer::replaceMacros($template, array('$config' => DI::baseUrl() . '/settings/addon'));
|
||||
}
|
||||
|
||||
$action = $this->parameters['action'] ?? '';
|
||||
$uid = $this->parameters['uid'] ?? 0;
|
||||
|
||||
if ($uid) {
|
||||
$user = User::getById($uid, ['username', 'blocked']);
|
||||
if (!$user) {
|
||||
$this->systemMessages->addNotice($this->t('User not found'));
|
||||
$this->baseUrl->redirect('moderation/users');
|
||||
}
|
||||
}
|
||||
|
||||
switch ($action) {
|
||||
case 'delete':
|
||||
if ($this->session->getLocalUserId() != $uid) {
|
||||
self::checkFormSecurityTokenRedirectOnError('moderation/users/active', 'moderation_users_active', 't');
|
||||
// delete user
|
||||
User::remove($uid);
|
||||
|
||||
$this->systemMessages->addNotice($this->t('User "%s" deleted', $user['username']));
|
||||
} else {
|
||||
$this->systemMessages->addNotice($this->t('You can\'t remove yourself'));
|
||||
}
|
||||
|
||||
$this->baseUrl->redirect('moderation/users/active');
|
||||
break;
|
||||
case 'block':
|
||||
self::checkFormSecurityTokenRedirectOnError('moderation/users/active', 'moderation_users_active', 't');
|
||||
User::block($uid);
|
||||
$this->systemMessages->addNotice($this->t('User "%s" blocked', $user['username']));
|
||||
$this->baseUrl->redirect('moderation/users/active');
|
||||
break;
|
||||
}
|
||||
$pager = new Pager($this->l10n, $this->args->getQueryString(), 100);
|
||||
|
||||
$valid_orders = [
|
||||
'name',
|
||||
'email',
|
||||
'register_date',
|
||||
'last-activity',
|
||||
'last-item',
|
||||
'page-flags',
|
||||
];
|
||||
|
||||
$order = 'last-item';
|
||||
$order_direction = '-';
|
||||
if (!empty($request['o'])) {
|
||||
$new_order = $request['o'];
|
||||
if ($new_order[0] === '-') {
|
||||
$order_direction = '-';
|
||||
$new_order = substr($new_order, 1);
|
||||
}
|
||||
|
||||
if (in_array($new_order, $valid_orders)) {
|
||||
$order = $new_order;
|
||||
}
|
||||
}
|
||||
|
||||
$users = User::getList($pager->getStart(), $pager->getItemsPerPage(), 'active', $order, ($order_direction == '-'));
|
||||
|
||||
$users = array_map($this->setupUserCallback(), $users);
|
||||
|
||||
$header_titles = [
|
||||
$this->t('Name'),
|
||||
$this->t('Email'),
|
||||
$this->t('Register date'),
|
||||
$this->t('Last login'),
|
||||
$this->t('Last public item'),
|
||||
$this->t('Type'),
|
||||
$this->t('Blocked by'),
|
||||
$this->t('Comments last 24h'),
|
||||
$this->t('Reactions last 24h'),
|
||||
$this->t('Ratio last 24h'),
|
||||
];
|
||||
$field_names = [
|
||||
'name',
|
||||
'email',
|
||||
'register_date',
|
||||
'login_date',
|
||||
'lastitem_date',
|
||||
'page_flags',
|
||||
'blocked_by',
|
||||
'comments',
|
||||
'reactions',
|
||||
'ratio',
|
||||
];
|
||||
$th_users = array_map(null, $header_titles, $valid_orders, $field_names);
|
||||
|
||||
$count = $this->database->count('user', ["`verified` AND NOT `blocked` AND NOT `account_removed` AND NOT `account_expired` AND `uid` != ?", 0]);
|
||||
|
||||
$t = Renderer::getMarkupTemplate('ratioed.tpl', 'addon/ratioed');
|
||||
return self::getTabsHTML('ratioed') . Renderer::replaceMacros($t, [
|
||||
// strings //
|
||||
'$title' => $this->t('Moderation'),
|
||||
'$help_url' => $this->baseUrl . '/ratioed/help',
|
||||
'$page' => $this->t('Behaviour'),
|
||||
'$select_all' => $this->t('select all'),
|
||||
'$delete' => $this->t('Delete'),
|
||||
'$block' => $this->t('Block'),
|
||||
'$blocked' => $this->t('User blocked'),
|
||||
'$siteadmin' => $this->t('Site admin'),
|
||||
'$accountexpired' => $this->t('Account expired'),
|
||||
'$h_newuser' => $this->t('Create a new user'),
|
||||
|
||||
'$th_users' => $th_users,
|
||||
'$order_users' => $order,
|
||||
'$order_direction_users' => $order_direction,
|
||||
|
||||
'$confirm_delete_multi' => $this->t('Selected users will be deleted!\n\nEverything these users had posted on this site will be permanently deleted!\n\nAre you sure?'),
|
||||
'$confirm_delete' => $this->t('The user {0} will be deleted!\n\nEverything this user has posted on this site will be permanently deleted!\n\nAre you sure?'),
|
||||
|
||||
'$form_security_token' => self::getFormSecurityToken('moderation_users_active'),
|
||||
|
||||
// values //
|
||||
'$baseurl' => $this->baseUrl,
|
||||
'$query_string' => $this->args->getQueryString(),
|
||||
|
||||
'$users' => $users,
|
||||
'$count' => $count,
|
||||
'$pager' => $pager->renderFull($count),
|
||||
]);
|
||||
}
|
||||
|
||||
protected function setupUserCallback(): \Closure
|
||||
{
|
||||
Logger::debug("ratioed: setupUserCallback");
|
||||
$parentCallback = parent::setupUserCallback();
|
||||
return function ($user) use ($parentCallback) {
|
||||
$blocked_count = DBA::count('user-contact', ['uid' => $user['uid'], 'is-blocked' => 1]);
|
||||
$user['blocked_by'] = $blocked_count;
|
||||
|
||||
$self_contact_result = DBA::p('SELECT admin_contact.id AS user_contact_uid FROM contact AS admin_contact JOIN contact AS user_contact ON admin_contact.`uri-id` = user_contact.`uri-id` AND admin_contact.self = 0 AND user_contact.self = 1 WHERE user_contact.uid = ?', $user['uid']);
|
||||
if (DBA::isResult($self_contact_result)) {
|
||||
$self_contact_result_row = DBA::fetch($self_contact_result);
|
||||
$user['user_contact_uid'] = $self_contact_result_row['user_contact_uid'];
|
||||
}
|
||||
else {
|
||||
$user['user_contact_uid'] = NULL;
|
||||
}
|
||||
|
||||
if ($user['user_contact_uid']) {
|
||||
$post_engagement_result = DBA::p('SELECT SUM(`comments`) AS `comment_count`, SUM(`activities`) AS `activities_count` FROM `post-engagement` WHERE `post-engagement`.created > DATE_SUB(now(), INTERVAL 1 DAY) AND `post-engagement`.`owner-id` = ?', $user['user_contact_uid']);
|
||||
if (DBA::isResult($post_engagement_result)) {
|
||||
$post_engagement_result_row = DBA::fetch($post_engagement_result);
|
||||
$user['comments'] = $post_engagement_result_row['comment_count'];
|
||||
$user['reactions'] = $post_engagement_result_row['activities_count'];
|
||||
if ($user['reactions'] > 0) {
|
||||
$user['ratio'] = number_format($user['comments'] / $user['reactions'], 1, '.', '');
|
||||
$user['ratioed'] = (float)($user['ratio']) >= 2.0;
|
||||
}
|
||||
else {
|
||||
if ($user['comments'] == 0) {
|
||||
$user['ratio'] = '0';
|
||||
$user['ratioed'] = false;
|
||||
}
|
||||
else {
|
||||
$user['ratio'] = '∞';
|
||||
$user['ratioed'] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$user['comments'] = 'error';
|
||||
$user['reactions'] = 'error';
|
||||
$user['ratio'] = 'error';
|
||||
$user['ratioed'] = false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$user['comments'] = 'error';
|
||||
$user['reactions'] = 'error';
|
||||
$user['ratio'] = 'error';
|
||||
$user['ratioed'] = false;
|
||||
}
|
||||
|
||||
$user = $parentCallback($user);
|
||||
Logger::debug("ratioed: setupUserCallback", [
|
||||
'uid' => $user['uid'],
|
||||
'blocked_by' => $user['blocked_by'],
|
||||
'comments' => $user['comments'],
|
||||
'reactions' => $user['reactions'],
|
||||
'ratio' => $user['ratio'],
|
||||
'ratioed' => $user['ratioed'],
|
||||
]);
|
||||
return $user;
|
||||
};
|
||||
}
|
||||
}
|
58
ratioed/ratioed.php
Normal file
58
ratioed/ratioed.php
Normal file
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
/**
|
||||
* Name: Ratioed
|
||||
* Description: Additional moderation user table with statistics about user behaviour
|
||||
* Version: 0.1
|
||||
* Author: Matthew Exon <http://mat.exon.name>
|
||||
*/
|
||||
|
||||
use Friendica\Addon\ratioed\RatioedPanel;
|
||||
use Friendica\Core\Hook;
|
||||
use Friendica\Core\Logger;
|
||||
use Friendica\DI;
|
||||
|
||||
/**
|
||||
* Sets up the addon hooks and updates data in the database if needed
|
||||
*/
|
||||
function ratioed_install()
|
||||
{
|
||||
Hook::register('moderation_users_tabs', 'addon/ratioed/ratioed.php', 'ratioed_users_tabs');
|
||||
|
||||
Logger::info("ratioed: installed");
|
||||
}
|
||||
|
||||
/**
|
||||
* This is a statement rather than an actual function definition. The simple
|
||||
* existence of this method is checked to figure out if the addon offers a
|
||||
* module.
|
||||
*/
|
||||
function ratioed_module() {}
|
||||
|
||||
/**
|
||||
* @brief Adds additional users tab to the moderation panel
|
||||
*
|
||||
* @param array $arr Parameters, including "tabs" which is the list to modify, and "selectedTab", which is the currently selected tab ID
|
||||
*/
|
||||
function ratioed_users_tabs(array &$arr) {
|
||||
Logger::debug("ratioed: users tabs");
|
||||
|
||||
array_push($arr['tabs'], [
|
||||
'label' => DI::l10n()->t('Behaviour'),
|
||||
'url' => 'ratioed',
|
||||
'sel' => $arr['selectedTab'] == 'ratioed' ? 'active' : '',
|
||||
'title' => DI::l10n()->t('Statistics about users behaviour'),
|
||||
'id' => 'admin-users-ratioed',
|
||||
'accesskey' => 'r',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Displays the ratioed tab in the moderation panel
|
||||
*/
|
||||
function ratioed_content() {
|
||||
Logger::debug("ratioed: content");
|
||||
|
||||
$ratioed = DI::getDice()->create(RatioedPanel::class, [$_SERVER]);
|
||||
$httpException = DI::getDice()->create(Friendica\Module\Special\HTTPException::class);
|
||||
$ratioed->run($httpException);
|
||||
}
|
92
ratioed/templates/help.tpl
Normal file
92
ratioed/templates/help.tpl
Normal file
|
@ -0,0 +1,92 @@
|
|||
<div class="panel 'help-content-wrapper">
|
||||
<div class="panel-body">
|
||||
<h2>Ratioed Plugin Help</h2>
|
||||
<p>
|
||||
This plugin provides administrators with additional statistics about
|
||||
the behaviour of users. These may be useful as early warning signs
|
||||
that warrant more carefully watching the behaviour of a user. They
|
||||
are <em>not</em> suitable as a trigger for instantly blocking,
|
||||
muting, or reporting a user, since they lack context.
|
||||
</p>
|
||||
<p>
|
||||
The name of the plugin comes
|
||||
from <a href="https://knowyourmeme.com/editorials/guides/what-is-the-ratio-and-what-does-it-mean-to-get-ratioed-twitters-1-rule-explained">"The
|
||||
Ratio"</a>, a well-known quick rule of thumb:
|
||||
</p>
|
||||
<blockquote>
|
||||
If the Replies:RT ratio is greater than 2:1, you done messed up.
|
||||
</blockquote>
|
||||
<p>
|
||||
To "get ratioed" is to receive a large number of comments in a short
|
||||
space of time, with relatively few likes or boosts. If commenters
|
||||
were enthusiastic about the posts, they would also have liked or
|
||||
boosted them. Receiving many comments without such likes or boosts
|
||||
indicates the comments were probably angry. This anger may or may
|
||||
not be justified, but either way this is probably something
|
||||
moderators should be aware of.
|
||||
</p>
|
||||
<p>
|
||||
This plugin allows viewing of an actual ratio, calculated over the
|
||||
last 24 hours. This is a useful timeframe for sudden dogpiling
|
||||
events that administrators might not otherwise notice. The plugin
|
||||
also calculates other statistics.
|
||||
</p>
|
||||
<h3>Explanation of Statistics</h3>
|
||||
<h4>Blocked by</h4>
|
||||
<p>
|
||||
This summarises the number of users on remote servers that have
|
||||
blocked this user.
|
||||
</p>
|
||||
<p>
|
||||
Note that the ActivityPub spec expressly says that
|
||||
implementations "SHOULD NOT" forward such block messages to
|
||||
remote servers. Nevertheless some implementations do this
|
||||
anyway, notably Mastodon. This statistic can only count block
|
||||
messages from servers that do this, as well as blocks from local
|
||||
users. As such, it is usually an undercount.
|
||||
</p>
|
||||
<p>
|
||||
The reason the spec recommends against forwarding these messages
|
||||
is that they can lead to retaliation. For this reason, this
|
||||
plugin deliberately does not provide any way to investigate
|
||||
exactly who blocked the user.
|
||||
</p>
|
||||
<h4>Comments last 24h</h4>
|
||||
<p>
|
||||
This gives the number of comments made on the top-level posts that
|
||||
this user made within the last 24 hours.
|
||||
</p>
|
||||
<h4>Reactions last 24h</h4>
|
||||
<p>
|
||||
This collects the number of likes, boosts, or other "one-click"
|
||||
interactions made on the user's top-level posts within the last 24
|
||||
hours.
|
||||
</p>
|
||||
<h4>Ratio last 24h</h4>
|
||||
<p>
|
||||
This is the ratio between "Comments last 24h" and "Reactions last
|
||||
24h". It is intended to approximate the traditional ratio as
|
||||
understood on Twitter.
|
||||
</p>
|
||||
<h3>Performance</h3>
|
||||
<p>
|
||||
The statistics are computed from scratch each time the page loads.
|
||||
It's possible that this might put a heavy load on the database. and
|
||||
the page may take a long time to load.
|
||||
</p>
|
||||
<h3>Extending</h3>
|
||||
<p>
|
||||
Suggestions for additional statistics are welcome, especially from
|
||||
moderators. This plugin should be considered a sandbox for
|
||||
experimentation, so it is not necessary to prove that any statistic
|
||||
is correlated with unwanted behaviour.
|
||||
</p>
|
||||
<p>
|
||||
However, this plugin does deal with potentially sensitive
|
||||
information. Even if moderators do in principle have access to all
|
||||
information, it should not necessarily be highlighted. Statistics
|
||||
should be kept anonymous and neutral. Also, they should be
|
||||
presented only to moderators, not to the users themselves.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
164
ratioed/templates/ratioed.tpl
Normal file
164
ratioed/templates/ratioed.tpl
Normal file
|
@ -0,0 +1,164 @@
|
|||
<script type="text/javascript" src="view/theme/frio/js/mod_admin.js?v={{constant('\Friendica\App::VERSION')}}"></script>
|
||||
<link rel="stylesheet" href="view/theme/frio/css/mod_admin.css?v={{constant('\Friendica\App::VERSION')}}" type="text/css" media="screen"/>
|
||||
|
||||
<div id="admin-users" class="adminpage generic-page-wrapper">
|
||||
<h1>{{$title}} - {{$page}} ({{$count}})</h1>
|
||||
<p>
|
||||
<a href="{{$base_url}}/moderation/users/create" class="btn btn-primary"><i class="fa fa-user-plus"></i> {{$h_newuser}}</a>
|
||||
</p>
|
||||
<form action="{{$baseurl}}/{{$query_string}}" method="post">
|
||||
<input type="hidden" name="form_security_token" value="{{$form_security_token}}">
|
||||
<table id="users" class="table table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" id="admin-settings-users-select" class="selecttoggle" data-select-class="users_ckbx"/>
|
||||
<label for="admin-settings-users-select"></label>
|
||||
</div>
|
||||
</th>
|
||||
<th></th>
|
||||
{{foreach $th_users as $k=>$th}}
|
||||
{{if $k < 2 || $order_users == $th.1 || ($k==5 && !in_array($order_users,[$th_users.2.1, $th_users.3.1, $th_users.4.1])) }}
|
||||
<th class="th-{{$k}}">
|
||||
<a href="{{$baseurl}}/moderation/users/active?o={{if $order_direction_users == "+"}}-{{/if}}{{$th.1}}" class="table-order">
|
||||
{{if $order_users == $th.1}}
|
||||
{{if $order_direction_users == "+"}}
|
||||
↓
|
||||
{{else}}
|
||||
↑
|
||||
{{/if}}
|
||||
{{else}}
|
||||
↕
|
||||
{{/if}}
|
||||
{{$th.0}}
|
||||
</a>
|
||||
</th>
|
||||
{{/if}}
|
||||
{{/foreach}}
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{foreach $users as $u}}
|
||||
<tr id="user-{{$u.uid}}" class="{{if $u.ratioed}}blocked{{/if}}">
|
||||
<td>
|
||||
{{if $u.is_deletable}}
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" class="users_ckbx" id="id_user_{{$u.uid}}" name="user[]" value="{{$u.uid}}"/>
|
||||
<label for="id_user_{{$u.uid}}"></label>
|
||||
</div>
|
||||
{{else}}
|
||||
|
||||
{{/if}}
|
||||
</td>
|
||||
<td><img class="avatar-nano" src="{{$u.micro}}" title="{{$u.nickname}}"></td>
|
||||
<td><a href="{{$u.url}}" title="{{$u.nickname}}"> {{$u.name}}</a></td>
|
||||
<td>{{$u.email}}</td>
|
||||
{{if $order_users == $th_users.2.1}}
|
||||
<td>{{$u.register_date}}</td>
|
||||
{{/if}}
|
||||
|
||||
{{if $order_users == $th_users.3.1}}
|
||||
<td>{{$u.login_date}}</td>
|
||||
{{/if}}
|
||||
|
||||
{{if $order_users == $th_users.4.1}}
|
||||
<td>{{$u.lastitem_date}}</td>
|
||||
{{/if}}
|
||||
|
||||
{{if !in_array($order_users,[$th_users.2.1, $th_users.3.1, $th_users.4.1]) }}
|
||||
<td>
|
||||
<i class="fa
|
||||
{{if $u.page_flags_raw==0}}fa-user{{/if}} {{* PAGE_NORMAL *}}
|
||||
{{if $u.page_flags_raw==1}}fa-bullhorn{{/if}} {{* PAGE_SOAPBOX *}}
|
||||
{{if $u.page_flags_raw==2}}fa-users{{/if}} {{* PAGE_COMMUNITY *}}
|
||||
{{if $u.page_flags_raw==3}}fa-heart{{/if}} {{* PAGE_FREELOVE *}}
|
||||
{{if $u.page_flags_raw==4}}fa-rss{{/if}} {{* PAGE_BLOG *}}
|
||||
{{if $u.page_flags_raw==5}}fa-user-secret{{/if}} {{* PAGE_PRVGROUP *}}
|
||||
" title="{{$u.page_flags}}">
|
||||
</i>
|
||||
{{if $u.page_flags_raw==0 && $u.account_type_raw > 0}}
|
||||
<i class="fa
|
||||
{{if $u.account_type_raw==1}}fa-sitemap{{/if}} {{* ACCOUNT_TYPE_ORGANISATION *}}
|
||||
{{if $u.account_type_raw==2}}fa-newspaper-o{{/if}} {{* ACCOUNT_TYPE_NEWS *}}
|
||||
{{if $u.account_type_raw==3}}fa-comments{{/if}} {{* ACCOUNT_TYPE_COMMUNITY *}}
|
||||
" title="{{$u.account_type}}">
|
||||
</i>
|
||||
{{/if}}
|
||||
{{if $u.is_admin}}<i class="fa fa-user-secret text-primary" title="{{$siteadmin}}"></i>{{/if}}
|
||||
{{if $u.account_expired}}<i class="fa fa-clock-o text-warning" title="{{$accountexpired}}"></i>{{/if}}
|
||||
</td>
|
||||
{{/if}}
|
||||
|
||||
<td class="text-right">
|
||||
<button type="button" class="btn-link admin-settings-action-link" onclick="return details({{$u.uid}})"><span class="caret"></span></button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="user-{{$u.uid}}-detail" class=" details hidden {{if $u.blocked != 0}}blocked{{/if}}">
|
||||
<td> </td>
|
||||
<td colspan="4">
|
||||
{{if $order_users != $th_users.2.1}}
|
||||
<p>
|
||||
<a href="{{$baseurl}}/ratioed?o={{if $order_direction_users == "+"}}-{{/if}}{{$th_users.2.1}}" class="btn-link table-order">
|
||||
↕ {{$th_users.2.0}}</a> : {{$u.register_date}}
|
||||
</p>
|
||||
{{/if}}
|
||||
|
||||
{{if $order_users != $th_users.3.1}}
|
||||
<p>
|
||||
<a href="{{$baseurl}}/ratioed?o={{if $order_direction_users == "+"}}-{{/if}}{{$th_users.3.1}}" class="btn-link table-order">
|
||||
↕ {{$th_users.3.0}}</a> : {{$u.login_date}}
|
||||
</p>
|
||||
{{/if}}
|
||||
|
||||
{{if $order_users != $th_users.4.1}}
|
||||
<p>
|
||||
<a href="{{$baseurl}}/ratioed?o={{if $order_direction_users == "+"}}-{{/if}}{{$th_users.4.1}}" class="btn-link table-order">
|
||||
↕ {{$th_users.4.0}}</a> : {{$u.lastitem_date}}
|
||||
</p>
|
||||
{{/if}}
|
||||
|
||||
{{if in_array($order_users,[$th_users.2.1, $th_users.3.1, $th_users.4.1]) }}
|
||||
<p>
|
||||
<a href="{{$baseurl}}/ratioed?o={{if $order_direction_users == "+"}}-{{/if}}{{$th_users.5.1}}" class="btn-link table-order">
|
||||
↕ {{$th_users.5.0}}</a> : {{$u.page_flags}}{{if $u.page_flags_raw==0 && $u.account_type_raw > 0}}, {{$u.account_type}}{{/if}} {{if $u.is_admin}}({{$siteadmin}}){{/if}} {{if $u.account_expired}}({{$accountexpired}}){{/if}}
|
||||
</p>
|
||||
{{/if}}
|
||||
|
||||
{{foreach $th_users as $k=>$th}}
|
||||
{{if $order_users != $th.1 && $k > 5}}
|
||||
<p>
|
||||
{{$th.0}} : {{$u[$th.2]}}
|
||||
</p>
|
||||
{{/if}}
|
||||
{{/foreach}}
|
||||
|
||||
</td>
|
||||
<td class="text-right">
|
||||
{{if $u.is_deletable}}
|
||||
<a href="{{$baseurl}}/moderation/users/active/block/{{$u.uid}}?t={{$form_security_token}}" class="admin-settings-action-link" title="{{$block}}">
|
||||
<i class="fa fa-ban" aria-hidden="true"></i>
|
||||
</a>
|
||||
<a href="{{$baseurl}}/moderation/users/active/delete/{{$u.uid}}?t={{$form_security_token}}" class="admin-settings-action-link" title="{{$delete}}" onclick="return confirm_delete('{{$confirm_delete}}','{{$u.name}}')">
|
||||
<i class="fa fa-trash" aria-hidden="true"></i>
|
||||
</a>
|
||||
{{else}}
|
||||
|
||||
{{/if}}
|
||||
</td>
|
||||
</tr>
|
||||
{{/foreach}}
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="panel-footer">
|
||||
<button type="submit" name="page_users_block" value="1" class="btn btn-warning">
|
||||
<i class="fa fa-ban" aria-hidden="true"></i> {{$block}}
|
||||
</button>
|
||||
<button type="submit" name="page_users_delete" value="1" class="btn btn-danger" onclick="return confirm_delete('{{$confirm_delete_multi}}')">
|
||||
<i class="fa fa-trash" aria-hidden="true"></i> {{$delete}}
|
||||
</button>
|
||||
</div>
|
||||
{{$pager nofilter}}
|
||||
</form>
|
||||
</div>
|
|
@ -5,7 +5,7 @@
|
|||
#
|
||||
# Translators:
|
||||
# Hypolite Petovan <hypolite@mrpetovan.com>, 2022
|
||||
# Florent C., 2023
|
||||
# cracrayol, 2024
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
|
@ -14,7 +14,7 @@ msgstr ""
|
|||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:16-0500\n"
|
||||
"PO-Revision-Date: 2018-03-20 07:26+0000\n"
|
||||
"Last-Translator: Florent C., 2023\n"
|
||||
"Last-Translator: cracrayol, 2024\n"
|
||||
"Language-Team: French (https://app.transifex.com/Friendica/teams/12172/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -24,7 +24,7 @@ msgstr ""
|
|||
|
||||
#: securemail.php:50
|
||||
msgid "Enable Secure Mail"
|
||||
msgstr "Activer l'extension des emails sécurisés"
|
||||
msgstr "Activer l'extension des courriels sécurisés"
|
||||
|
||||
#: securemail.php:51
|
||||
msgid "Public key"
|
||||
|
@ -36,7 +36,7 @@ msgstr "Votre clé publique PGP formatée compatible ASCII"
|
|||
|
||||
#: securemail.php:56
|
||||
msgid "\"Secure Mail\" Settings"
|
||||
msgstr "Paramètres des emails sécurisés"
|
||||
msgstr "Paramètres des courriels sécurisés"
|
||||
|
||||
#: securemail.php:59
|
||||
msgid "Save Settings"
|
||||
|
|
|
@ -5,10 +5,10 @@ function string_plural_select_fr($n){
|
|||
$n = intval($n);
|
||||
if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
|
||||
}}
|
||||
$a->strings['Enable Secure Mail'] = 'Activer l\'extension des emails sécurisés';
|
||||
$a->strings['Enable Secure Mail'] = 'Activer l\'extension des courriels sécurisés';
|
||||
$a->strings['Public key'] = 'Clé publique';
|
||||
$a->strings['Your public PGP key, ascii armored format'] = 'Votre clé publique PGP formatée compatible ASCII';
|
||||
$a->strings['"Secure Mail" Settings'] = 'Paramètres des emails sécurisés';
|
||||
$a->strings['"Secure Mail" Settings'] = 'Paramètres des courriels sécurisés';
|
||||
$a->strings['Save Settings'] = 'Enregistrer les paramètres';
|
||||
$a->strings['Save and send test'] = 'Enregistrer et envoyer un message de test';
|
||||
$a->strings['Test email sent'] = 'Courriel de test envoyé avec succès';
|
||||
|
|
|
@ -8,64 +8,81 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-07-25 13:15+0000\n"
|
||||
"PO-Revision-Date: 2021-02-20 00:23+0000\n"
|
||||
"Last-Translator: Farida Khalaf <faridakhalaf@hotmail.com>\n"
|
||||
"Language-Team: Arabic (http://www.transifex.com/Friendica/friendica/language/ar/)\n"
|
||||
"POT-Creation-Date: 2023-04-29 06:56+0000\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:58+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Arabic (http://app.transifex.com/Friendica/friendica/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"
|
||||
|
||||
#: tumblr.php:40
|
||||
#: tumblr.php:243
|
||||
msgid "Permission denied."
|
||||
msgstr "الطلب مرفوض."
|
||||
|
||||
#: tumblr.php:70 tumblr.php:284
|
||||
#: tumblr.php:296
|
||||
msgid "Save Settings"
|
||||
msgstr "Save Settings"
|
||||
|
||||
#: tumblr.php:72
|
||||
#: tumblr.php:297
|
||||
msgid "Consumer Key"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:73
|
||||
#: tumblr.php:298
|
||||
msgid "Consumer Secret"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:178
|
||||
msgid "You are now authenticated to tumblr."
|
||||
#: tumblr.php:299
|
||||
msgid "Maximum tags"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:179
|
||||
msgid "return to the connector page"
|
||||
msgstr "الرجوع إلى صفحة الموصل"
|
||||
|
||||
#: tumblr.php:195
|
||||
msgid "Post to Tumblr"
|
||||
#: tumblr.php:299
|
||||
msgid ""
|
||||
"Maximum number of tags that a user can follow. Enter 0 to deactivate the "
|
||||
"feature."
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:225 tumblr.php:229
|
||||
msgid "Tumblr Export"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:233
|
||||
msgid "(Re-)Authenticate your tumblr page"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:237
|
||||
msgid "Enable Tumblr Post Addon"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:243
|
||||
msgid "Post to Tumblr by default"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:264
|
||||
#: tumblr.php:336
|
||||
msgid "Post to page:"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:278
|
||||
#: tumblr.php:342
|
||||
msgid "(Re-)Authenticate your tumblr page"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:343
|
||||
msgid "You are not authenticated to tumblr"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:348
|
||||
msgid "Enable Tumblr Post Addon"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:349
|
||||
msgid "Post to Tumblr by default"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:350
|
||||
msgid "Import the remote timeline"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:351
|
||||
msgid "Subscribed tags"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:351
|
||||
#, php-format
|
||||
msgid ""
|
||||
"Comma separated list of up to %d tags that will be imported additionally to "
|
||||
"the timeline"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:357
|
||||
msgid "Tumblr Import/Export"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:375
|
||||
msgid "Post to Tumblr"
|
||||
msgstr ""
|
||||
|
|
|
@ -7,4 +7,3 @@ function string_plural_select_ar($n){
|
|||
}}
|
||||
$a->strings['Permission denied.'] = 'الطلب مرفوض.';
|
||||
$a->strings['Save Settings'] = 'Save Settings';
|
||||
$a->strings['return to the connector page'] = 'الرجوع إلى صفحة الموصل';
|
||||
|
|
|
@ -11,7 +11,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"POT-Creation-Date: 2023-04-29 06:56+0000\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:58+0000\n"
|
||||
"Last-Translator: Aditoo, 2018\n"
|
||||
"Language-Team: Czech (http://app.transifex.com/Friendica/friendica/language/cs/)\n"
|
||||
|
@ -21,54 +21,71 @@ msgstr ""
|
|||
"Language: cs\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: tumblr.php:39
|
||||
#: tumblr.php:243
|
||||
msgid "Permission denied."
|
||||
msgstr "Přístup odmítnut."
|
||||
|
||||
#: tumblr.php:69
|
||||
#: tumblr.php:296
|
||||
msgid "Save Settings"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:71
|
||||
#: tumblr.php:297
|
||||
msgid "Consumer Key"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:72
|
||||
#: tumblr.php:298
|
||||
msgid "Consumer Secret"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:177
|
||||
msgid "You are now authenticated to tumblr."
|
||||
msgstr "Nyní jste přihlášen/a k Tumblr."
|
||||
#: tumblr.php:299
|
||||
msgid "Maximum tags"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:178
|
||||
msgid "return to the connector page"
|
||||
msgstr "návrat ke stránce konektor"
|
||||
#: tumblr.php:299
|
||||
msgid ""
|
||||
"Maximum number of tags that a user can follow. Enter 0 to deactivate the "
|
||||
"feature."
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:194
|
||||
msgid "Post to Tumblr"
|
||||
msgstr "Posílat na Tumblr"
|
||||
|
||||
#: tumblr.php:225
|
||||
#: tumblr.php:336
|
||||
msgid "Post to page:"
|
||||
msgstr "Posílat na stránku:"
|
||||
|
||||
#: tumblr.php:231
|
||||
#: tumblr.php:342
|
||||
msgid "(Re-)Authenticate your tumblr page"
|
||||
msgstr "(Znovu) přihlásit k Vaší stránce Tumblr"
|
||||
|
||||
#: tumblr.php:232
|
||||
#: tumblr.php:343
|
||||
msgid "You are not authenticated to tumblr"
|
||||
msgstr "Nyní nejste přihlášen/a k Tumblr."
|
||||
|
||||
#: tumblr.php:237
|
||||
#: tumblr.php:348
|
||||
msgid "Enable Tumblr Post Addon"
|
||||
msgstr "Povolit doplněk Tumblr Post"
|
||||
|
||||
#: tumblr.php:238
|
||||
#: tumblr.php:349
|
||||
msgid "Post to Tumblr by default"
|
||||
msgstr "Ve výchozím stavu posílat příspěvky na Tumblr"
|
||||
|
||||
#: tumblr.php:244
|
||||
msgid "Tumblr Export"
|
||||
#: tumblr.php:350
|
||||
msgid "Import the remote timeline"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:351
|
||||
msgid "Subscribed tags"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:351
|
||||
#, php-format
|
||||
msgid ""
|
||||
"Comma separated list of up to %d tags that will be imported additionally to "
|
||||
"the timeline"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:357
|
||||
msgid "Tumblr Import/Export"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:375
|
||||
msgid "Post to Tumblr"
|
||||
msgstr "Posílat na Tumblr"
|
||||
|
|
|
@ -6,11 +6,9 @@ function string_plural_select_cs($n){
|
|||
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
|
||||
}}
|
||||
$a->strings['Permission denied.'] = 'Přístup odmítnut.';
|
||||
$a->strings['You are now authenticated to tumblr.'] = 'Nyní jste přihlášen/a k Tumblr.';
|
||||
$a->strings['return to the connector page'] = 'návrat ke stránce konektor';
|
||||
$a->strings['Post to Tumblr'] = 'Posílat na Tumblr';
|
||||
$a->strings['Post to page:'] = 'Posílat na stránku:';
|
||||
$a->strings['(Re-)Authenticate your tumblr page'] = '(Znovu) přihlásit k Vaší stránce Tumblr';
|
||||
$a->strings['You are not authenticated to tumblr'] = 'Nyní nejste přihlášen/a k Tumblr.';
|
||||
$a->strings['Enable Tumblr Post Addon'] = 'Povolit doplněk Tumblr Post';
|
||||
$a->strings['Post to Tumblr by default'] = 'Ve výchozím stavu posílat příspěvky na Tumblr';
|
||||
$a->strings['Post to Tumblr'] = 'Posílat na Tumblr';
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
#
|
||||
#
|
||||
# Translators:
|
||||
# Raroun, 2023
|
||||
# Raroun, 2023
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2014-2015
|
||||
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021
|
||||
# Ulf Rompe <transifex.com@rompe.org>, 2019
|
||||
|
@ -11,9 +13,9 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"POT-Creation-Date: 2023-04-29 06:56+0000\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:58+0000\n"
|
||||
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2018,2021\n"
|
||||
"Last-Translator: Raroun, 2023\n"
|
||||
"Language-Team: German (http://app.transifex.com/Friendica/friendica/language/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -21,54 +23,71 @@ msgstr ""
|
|||
"Language: de\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: tumblr.php:39
|
||||
#: tumblr.php:243
|
||||
msgid "Permission denied."
|
||||
msgstr "Zugriff verweigert."
|
||||
|
||||
#: tumblr.php:69
|
||||
#: tumblr.php:296
|
||||
msgid "Save Settings"
|
||||
msgstr "Einstellungen speichern"
|
||||
|
||||
#: tumblr.php:71
|
||||
#: tumblr.php:297
|
||||
msgid "Consumer Key"
|
||||
msgstr "Consumer Key"
|
||||
|
||||
#: tumblr.php:72
|
||||
#: tumblr.php:298
|
||||
msgid "Consumer Secret"
|
||||
msgstr "Consumer Secret"
|
||||
|
||||
#: tumblr.php:177
|
||||
msgid "You are now authenticated to tumblr."
|
||||
msgstr "Du bist nun auf tumblr authentifiziert."
|
||||
#: tumblr.php:299
|
||||
msgid "Maximum tags"
|
||||
msgstr "Maximale Anzahl an Tags"
|
||||
|
||||
#: tumblr.php:178
|
||||
msgid "return to the connector page"
|
||||
msgstr "zurück zur Connector-Seite"
|
||||
#: tumblr.php:299
|
||||
msgid ""
|
||||
"Maximum number of tags that a user can follow. Enter 0 to deactivate the "
|
||||
"feature."
|
||||
msgstr "Maximale Anzahl von Tags, die ein Benutzer verfolgen kann. Geben Sie 0 ein, um die Funktion zu deaktivieren."
|
||||
|
||||
#: tumblr.php:194
|
||||
msgid "Post to Tumblr"
|
||||
msgstr "Auf Tumblr veröffentlichen"
|
||||
|
||||
#: tumblr.php:225
|
||||
#: tumblr.php:336
|
||||
msgid "Post to page:"
|
||||
msgstr "Auf tumblr veröffentlichen"
|
||||
|
||||
#: tumblr.php:231
|
||||
#: tumblr.php:342
|
||||
msgid "(Re-)Authenticate your tumblr page"
|
||||
msgstr "(Re-)Authentifizierung deiner tumblr-Seite"
|
||||
|
||||
#: tumblr.php:232
|
||||
#: tumblr.php:343
|
||||
msgid "You are not authenticated to tumblr"
|
||||
msgstr "Du bist gegenüber tumblr nicht authentifiziert"
|
||||
|
||||
#: tumblr.php:237
|
||||
#: tumblr.php:348
|
||||
msgid "Enable Tumblr Post Addon"
|
||||
msgstr "Tumblr-Post-Addon aktivieren"
|
||||
|
||||
#: tumblr.php:238
|
||||
#: tumblr.php:349
|
||||
msgid "Post to Tumblr by default"
|
||||
msgstr "Standardmäßig bei Tumblr veröffentlichen"
|
||||
|
||||
#: tumblr.php:244
|
||||
msgid "Tumblr Export"
|
||||
msgstr "Tumblr Export"
|
||||
#: tumblr.php:350
|
||||
msgid "Import the remote timeline"
|
||||
msgstr "Importiere die entfernte Timeline"
|
||||
|
||||
#: tumblr.php:351
|
||||
msgid "Subscribed tags"
|
||||
msgstr "Abonnierte Tags"
|
||||
|
||||
#: tumblr.php:351
|
||||
#, php-format
|
||||
msgid ""
|
||||
"Comma separated list of up to %d tags that will be imported additionally to "
|
||||
"the timeline"
|
||||
msgstr "Durch Kommata getrennte Liste von bis zu %d Tags, die zusätzlich in die Timeline importiert werden sollen"
|
||||
|
||||
#: tumblr.php:357
|
||||
msgid "Tumblr Import/Export"
|
||||
msgstr "Tumblr Import/Export"
|
||||
|
||||
#: tumblr.php:375
|
||||
msgid "Post to Tumblr"
|
||||
msgstr "Auf Tumblr veröffentlichen"
|
||||
|
|
|
@ -9,12 +9,15 @@ $a->strings['Permission denied.'] = 'Zugriff verweigert.';
|
|||
$a->strings['Save Settings'] = 'Einstellungen speichern';
|
||||
$a->strings['Consumer Key'] = 'Consumer Key';
|
||||
$a->strings['Consumer Secret'] = 'Consumer Secret';
|
||||
$a->strings['You are now authenticated to tumblr.'] = 'Du bist nun auf tumblr authentifiziert.';
|
||||
$a->strings['return to the connector page'] = 'zurück zur Connector-Seite';
|
||||
$a->strings['Post to Tumblr'] = 'Auf Tumblr veröffentlichen';
|
||||
$a->strings['Maximum tags'] = 'Maximale Anzahl an Tags';
|
||||
$a->strings['Maximum number of tags that a user can follow. Enter 0 to deactivate the feature.'] = 'Maximale Anzahl von Tags, die ein Benutzer verfolgen kann. Geben Sie 0 ein, um die Funktion zu deaktivieren.';
|
||||
$a->strings['Post to page:'] = 'Auf tumblr veröffentlichen';
|
||||
$a->strings['(Re-)Authenticate your tumblr page'] = '(Re-)Authentifizierung deiner tumblr-Seite';
|
||||
$a->strings['You are not authenticated to tumblr'] = 'Du bist gegenüber tumblr nicht authentifiziert';
|
||||
$a->strings['Enable Tumblr Post Addon'] = 'Tumblr-Post-Addon aktivieren';
|
||||
$a->strings['Post to Tumblr by default'] = 'Standardmäßig bei Tumblr veröffentlichen';
|
||||
$a->strings['Tumblr Export'] = 'Tumblr Export';
|
||||
$a->strings['Import the remote timeline'] = 'Importiere die entfernte Timeline';
|
||||
$a->strings['Subscribed tags'] = 'Abonnierte Tags';
|
||||
$a->strings['Comma separated list of up to %d tags that will be imported additionally to the timeline'] = 'Durch Kommata getrennte Liste von bis zu %d Tags, die zusätzlich in die Timeline importiert werden sollen';
|
||||
$a->strings['Tumblr Import/Export'] = 'Tumblr Import/Export';
|
||||
$a->strings['Post to Tumblr'] = 'Auf Tumblr veröffentlichen';
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#
|
||||
# Translators:
|
||||
# bob lebonche <lebonche@tutanota.com>, 2021
|
||||
# Florent C., 2023
|
||||
# cracrayol, 2023-2024
|
||||
# StefOfficiel <pichard.stephane@free.fr>, 2015
|
||||
msgid ""
|
||||
msgstr ""
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-04-29 06:56+0000\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:58+0000\n"
|
||||
"Last-Translator: Florent C., 2023\n"
|
||||
"Last-Translator: cracrayol, 2023-2024\n"
|
||||
"Language-Team: French (http://app.transifex.com/Friendica/friendica/language/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -39,13 +39,13 @@ msgstr "Secret utilisateur"
|
|||
|
||||
#: tumblr.php:299
|
||||
msgid "Maximum tags"
|
||||
msgstr "Tags maximum"
|
||||
msgstr "Étiquettes maximum"
|
||||
|
||||
#: tumblr.php:299
|
||||
msgid ""
|
||||
"Maximum number of tags that a user can follow. Enter 0 to deactivate the "
|
||||
"feature."
|
||||
msgstr "Nombre maximum de tags qu'un utilisateur peut suivre. Entrez 0 pour désactiver cette fonctionnalité."
|
||||
msgstr "Nombre maximum d'étiquettes qu'un utilisateur peut suivre. Entrez 0 pour désactiver cette fonctionnalité."
|
||||
|
||||
#: tumblr.php:336
|
||||
msgid "Post to page:"
|
||||
|
@ -73,14 +73,14 @@ msgstr "Importer le flux distant"
|
|||
|
||||
#: tumblr.php:351
|
||||
msgid "Subscribed tags"
|
||||
msgstr "Tags suivis"
|
||||
msgstr "Étiquettes suivies"
|
||||
|
||||
#: tumblr.php:351
|
||||
#, php-format
|
||||
msgid ""
|
||||
"Comma separated list of up to %d tags that will be imported additionally to "
|
||||
"the timeline"
|
||||
msgstr "Liste séparée par des virgules contenant jusqu'à %d tags qui seront importés dans le flux"
|
||||
msgstr "Liste contenant jusqu'à %d étiquettes, séparées par des virgules, qui seront importées dans le flux"
|
||||
|
||||
#: tumblr.php:357
|
||||
msgid "Tumblr Import/Export"
|
||||
|
|
|
@ -9,15 +9,15 @@ $a->strings['Permission denied.'] = 'Permission refusée.';
|
|||
$a->strings['Save Settings'] = 'Sauvegarder les paramètres';
|
||||
$a->strings['Consumer Key'] = 'Clé utilisateur';
|
||||
$a->strings['Consumer Secret'] = 'Secret utilisateur';
|
||||
$a->strings['Maximum tags'] = 'Tags maximum';
|
||||
$a->strings['Maximum number of tags that a user can follow. Enter 0 to deactivate the feature.'] = 'Nombre maximum de tags qu\'un utilisateur peut suivre. Entrez 0 pour désactiver cette fonctionnalité.';
|
||||
$a->strings['Maximum tags'] = 'Étiquettes maximum';
|
||||
$a->strings['Maximum number of tags that a user can follow. Enter 0 to deactivate the feature.'] = 'Nombre maximum d\'étiquettes qu\'un utilisateur peut suivre. Entrez 0 pour désactiver cette fonctionnalité.';
|
||||
$a->strings['Post to page:'] = 'Publier sur la page :';
|
||||
$a->strings['(Re-)Authenticate your tumblr page'] = '(re)Authentifiez votre page Tumblr';
|
||||
$a->strings['You are not authenticated to tumblr'] = 'Vous n\'êtes pas identifié sur Tumblr';
|
||||
$a->strings['Enable Tumblr Post Addon'] = 'Activez l\'extension de publication Tumblr';
|
||||
$a->strings['Post to Tumblr by default'] = 'Publier sur Tumblr par défaut';
|
||||
$a->strings['Import the remote timeline'] = 'Importer le flux distant';
|
||||
$a->strings['Subscribed tags'] = 'Tags suivis';
|
||||
$a->strings['Comma separated list of up to %d tags that will be imported additionally to the timeline'] = 'Liste séparée par des virgules contenant jusqu\'à %d tags qui seront importés dans le flux';
|
||||
$a->strings['Subscribed tags'] = 'Étiquettes suivies';
|
||||
$a->strings['Comma separated list of up to %d tags that will be imported additionally to the timeline'] = 'Liste contenant jusqu\'à %d étiquettes, séparées par des virgules, qui seront importées dans le flux';
|
||||
$a->strings['Tumblr Import/Export'] = 'Import/Export Tumblr';
|
||||
$a->strings['Post to Tumblr'] = 'Publier vers Tumblr';
|
||||
|
|
|
@ -10,7 +10,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"POT-Creation-Date: 2023-04-29 06:56+0000\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:58+0000\n"
|
||||
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2021\n"
|
||||
"Language-Team: Italian (http://app.transifex.com/Friendica/friendica/language/it/)\n"
|
||||
|
@ -20,54 +20,71 @@ msgstr ""
|
|||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
||||
|
||||
#: tumblr.php:39
|
||||
#: tumblr.php:243
|
||||
msgid "Permission denied."
|
||||
msgstr "Permesso negato."
|
||||
|
||||
#: tumblr.php:69
|
||||
#: tumblr.php:296
|
||||
msgid "Save Settings"
|
||||
msgstr "Salva Impostazioni"
|
||||
|
||||
#: tumblr.php:71
|
||||
#: tumblr.php:297
|
||||
msgid "Consumer Key"
|
||||
msgstr "Consumer Key"
|
||||
|
||||
#: tumblr.php:72
|
||||
#: tumblr.php:298
|
||||
msgid "Consumer Secret"
|
||||
msgstr "Consumer Secret"
|
||||
|
||||
#: tumblr.php:177
|
||||
msgid "You are now authenticated to tumblr."
|
||||
msgstr "Sei autenticato su Tumblr."
|
||||
#: tumblr.php:299
|
||||
msgid "Maximum tags"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:178
|
||||
msgid "return to the connector page"
|
||||
msgstr "ritorna alla pagina del connettore"
|
||||
#: tumblr.php:299
|
||||
msgid ""
|
||||
"Maximum number of tags that a user can follow. Enter 0 to deactivate the "
|
||||
"feature."
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:194
|
||||
msgid "Post to Tumblr"
|
||||
msgstr "Invia a Tumblr"
|
||||
|
||||
#: tumblr.php:225
|
||||
#: tumblr.php:336
|
||||
msgid "Post to page:"
|
||||
msgstr "Invia alla pagina:"
|
||||
|
||||
#: tumblr.php:231
|
||||
#: tumblr.php:342
|
||||
msgid "(Re-)Authenticate your tumblr page"
|
||||
msgstr "(Ri)Autenticati con la tua pagina Tumblr"
|
||||
|
||||
#: tumblr.php:232
|
||||
#: tumblr.php:343
|
||||
msgid "You are not authenticated to tumblr"
|
||||
msgstr "Non sei autenticato su Tumblr"
|
||||
|
||||
#: tumblr.php:237
|
||||
#: tumblr.php:348
|
||||
msgid "Enable Tumblr Post Addon"
|
||||
msgstr "Abilita componente aggiuntivo di invio a Tumblr"
|
||||
|
||||
#: tumblr.php:238
|
||||
#: tumblr.php:349
|
||||
msgid "Post to Tumblr by default"
|
||||
msgstr "Invia sempre a Tumblr"
|
||||
|
||||
#: tumblr.php:244
|
||||
msgid "Tumblr Export"
|
||||
msgstr "Esporta Tumblr"
|
||||
#: tumblr.php:350
|
||||
msgid "Import the remote timeline"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:351
|
||||
msgid "Subscribed tags"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:351
|
||||
#, php-format
|
||||
msgid ""
|
||||
"Comma separated list of up to %d tags that will be imported additionally to "
|
||||
"the timeline"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:357
|
||||
msgid "Tumblr Import/Export"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:375
|
||||
msgid "Post to Tumblr"
|
||||
msgstr "Invia a Tumblr"
|
||||
|
|
|
@ -9,12 +9,9 @@ $a->strings['Permission denied.'] = 'Permesso negato.';
|
|||
$a->strings['Save Settings'] = 'Salva Impostazioni';
|
||||
$a->strings['Consumer Key'] = 'Consumer Key';
|
||||
$a->strings['Consumer Secret'] = 'Consumer Secret';
|
||||
$a->strings['You are now authenticated to tumblr.'] = 'Sei autenticato su Tumblr.';
|
||||
$a->strings['return to the connector page'] = 'ritorna alla pagina del connettore';
|
||||
$a->strings['Post to Tumblr'] = 'Invia a Tumblr';
|
||||
$a->strings['Post to page:'] = 'Invia alla pagina:';
|
||||
$a->strings['(Re-)Authenticate your tumblr page'] = '(Ri)Autenticati con la tua pagina Tumblr';
|
||||
$a->strings['You are not authenticated to tumblr'] = 'Non sei autenticato su Tumblr';
|
||||
$a->strings['Enable Tumblr Post Addon'] = 'Abilita componente aggiuntivo di invio a Tumblr';
|
||||
$a->strings['Post to Tumblr by default'] = 'Invia sempre a Tumblr';
|
||||
$a->strings['Tumblr Export'] = 'Esporta Tumblr';
|
||||
$a->strings['Post to Tumblr'] = 'Invia a Tumblr';
|
||||
|
|
|
@ -10,64 +10,81 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"POT-Creation-Date: 2023-04-29 06:56+0000\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:58+0000\n"
|
||||
"Last-Translator: Piotr Strębski <strebski@gmail.com>, 2022\n"
|
||||
"Language-Team: Polish (http://www.transifex.com/Friendica/friendica/language/pl/)\n"
|
||||
"Language-Team: Polish (http://app.transifex.com/Friendica/friendica/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=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
||||
|
||||
#: tumblr.php:39
|
||||
#: tumblr.php:243
|
||||
msgid "Permission denied."
|
||||
msgstr "Odmowa dostępu."
|
||||
|
||||
#: tumblr.php:69
|
||||
#: tumblr.php:296
|
||||
msgid "Save Settings"
|
||||
msgstr "Zapisz ustawienia"
|
||||
|
||||
#: tumblr.php:71
|
||||
#: tumblr.php:297
|
||||
msgid "Consumer Key"
|
||||
msgstr "Klucz klienta"
|
||||
|
||||
#: tumblr.php:72
|
||||
#: tumblr.php:298
|
||||
msgid "Consumer Secret"
|
||||
msgstr "Tajny klucz klienta"
|
||||
|
||||
#: tumblr.php:177
|
||||
msgid "You are now authenticated to tumblr."
|
||||
msgstr "Jesteś teraz uwierzytelniony na tumblr."
|
||||
#: tumblr.php:299
|
||||
msgid "Maximum tags"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:178
|
||||
msgid "return to the connector page"
|
||||
msgstr "powrót do strony łącza"
|
||||
#: tumblr.php:299
|
||||
msgid ""
|
||||
"Maximum number of tags that a user can follow. Enter 0 to deactivate the "
|
||||
"feature."
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:194
|
||||
msgid "Post to Tumblr"
|
||||
msgstr "Opublikuj w Tumblr"
|
||||
|
||||
#: tumblr.php:225
|
||||
#: tumblr.php:336
|
||||
msgid "Post to page:"
|
||||
msgstr "Opublikuj na stronie:"
|
||||
|
||||
#: tumblr.php:231
|
||||
#: tumblr.php:342
|
||||
msgid "(Re-)Authenticate your tumblr page"
|
||||
msgstr "(Re-) Uwierzytelnij swoją stronę tumblr"
|
||||
|
||||
#: tumblr.php:232
|
||||
#: tumblr.php:343
|
||||
msgid "You are not authenticated to tumblr"
|
||||
msgstr "Nie jesteś uwierzytelniony w tumblr"
|
||||
|
||||
#: tumblr.php:237
|
||||
#: tumblr.php:348
|
||||
msgid "Enable Tumblr Post Addon"
|
||||
msgstr "Włącz dodatek Tumblr"
|
||||
|
||||
#: tumblr.php:238
|
||||
#: tumblr.php:349
|
||||
msgid "Post to Tumblr by default"
|
||||
msgstr "Wyślij domyślnie do Tumblr"
|
||||
|
||||
#: tumblr.php:244
|
||||
msgid "Tumblr Export"
|
||||
msgstr "Eksportuj do Tumblr"
|
||||
#: tumblr.php:350
|
||||
msgid "Import the remote timeline"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:351
|
||||
msgid "Subscribed tags"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:351
|
||||
#, php-format
|
||||
msgid ""
|
||||
"Comma separated list of up to %d tags that will be imported additionally to "
|
||||
"the timeline"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:357
|
||||
msgid "Tumblr Import/Export"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:375
|
||||
msgid "Post to Tumblr"
|
||||
msgstr "Opublikuj w Tumblr"
|
||||
|
|
|
@ -9,12 +9,9 @@ $a->strings['Permission denied.'] = 'Odmowa dostępu.';
|
|||
$a->strings['Save Settings'] = 'Zapisz ustawienia';
|
||||
$a->strings['Consumer Key'] = 'Klucz klienta';
|
||||
$a->strings['Consumer Secret'] = 'Tajny klucz klienta';
|
||||
$a->strings['You are now authenticated to tumblr.'] = 'Jesteś teraz uwierzytelniony na tumblr.';
|
||||
$a->strings['return to the connector page'] = 'powrót do strony łącza';
|
||||
$a->strings['Post to Tumblr'] = 'Opublikuj w Tumblr';
|
||||
$a->strings['Post to page:'] = 'Opublikuj na stronie:';
|
||||
$a->strings['(Re-)Authenticate your tumblr page'] = '(Re-) Uwierzytelnij swoją stronę tumblr';
|
||||
$a->strings['You are not authenticated to tumblr'] = 'Nie jesteś uwierzytelniony w tumblr';
|
||||
$a->strings['Enable Tumblr Post Addon'] = 'Włącz dodatek Tumblr';
|
||||
$a->strings['Post to Tumblr by default'] = 'Wyślij domyślnie do Tumblr';
|
||||
$a->strings['Tumblr Export'] = 'Eksportuj do Tumblr';
|
||||
$a->strings['Post to Tumblr'] = 'Opublikuj w Tumblr';
|
||||
|
|
|
@ -10,64 +10,81 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: friendica\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-11-21 19:17-0500\n"
|
||||
"PO-Revision-Date: 2022-01-16 00:55+0000\n"
|
||||
"Last-Translator: Kristoffer Grundström <lovaren@gmail.com>\n"
|
||||
"Language-Team: Swedish (http://www.transifex.com/Friendica/friendica/language/sv/)\n"
|
||||
"POT-Creation-Date: 2023-04-29 06:56+0000\n"
|
||||
"PO-Revision-Date: 2014-06-23 12:58+0000\n"
|
||||
"Last-Translator: Kristoffer Grundström <lovaren@gmail.com>, 2022\n"
|
||||
"Language-Team: Swedish (http://app.transifex.com/Friendica/friendica/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"
|
||||
|
||||
#: tumblr.php:39
|
||||
#: tumblr.php:243
|
||||
msgid "Permission denied."
|
||||
msgstr "Åtkomst nekad."
|
||||
|
||||
#: tumblr.php:69
|
||||
#: tumblr.php:296
|
||||
msgid "Save Settings"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:71
|
||||
#: tumblr.php:297
|
||||
msgid "Consumer Key"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:72
|
||||
#: tumblr.php:298
|
||||
msgid "Consumer Secret"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:177
|
||||
msgid "You are now authenticated to tumblr."
|
||||
msgstr "Du är nu autentiserad till tumblr."
|
||||
|
||||
#: tumblr.php:178
|
||||
msgid "return to the connector page"
|
||||
#: tumblr.php:299
|
||||
msgid "Maximum tags"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:194
|
||||
msgid "Post to Tumblr"
|
||||
#: tumblr.php:299
|
||||
msgid ""
|
||||
"Maximum number of tags that a user can follow. Enter 0 to deactivate the "
|
||||
"feature."
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:225
|
||||
#: tumblr.php:336
|
||||
msgid "Post to page:"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:231
|
||||
#: tumblr.php:342
|
||||
msgid "(Re-)Authenticate your tumblr page"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:232
|
||||
#: tumblr.php:343
|
||||
msgid "You are not authenticated to tumblr"
|
||||
msgstr "Du är inte autentiserad till tumblr"
|
||||
|
||||
#: tumblr.php:237
|
||||
#: tumblr.php:348
|
||||
msgid "Enable Tumblr Post Addon"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:238
|
||||
#: tumblr.php:349
|
||||
msgid "Post to Tumblr by default"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:244
|
||||
msgid "Tumblr Export"
|
||||
#: tumblr.php:350
|
||||
msgid "Import the remote timeline"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:351
|
||||
msgid "Subscribed tags"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:351
|
||||
#, php-format
|
||||
msgid ""
|
||||
"Comma separated list of up to %d tags that will be imported additionally to "
|
||||
"the timeline"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:357
|
||||
msgid "Tumblr Import/Export"
|
||||
msgstr ""
|
||||
|
||||
#: tumblr.php:375
|
||||
msgid "Post to Tumblr"
|
||||
msgstr ""
|
||||
|
|
|
@ -6,5 +6,4 @@ function string_plural_select_sv($n){
|
|||
return intval($n != 1);
|
||||
}}
|
||||
$a->strings['Permission denied.'] = 'Åtkomst nekad.';
|
||||
$a->strings['You are now authenticated to tumblr.'] = 'Du är nu autentiserad till tumblr.';
|
||||
$a->strings['You are not authenticated to tumblr'] = 'Du är inte autentiserad till tumblr';
|
||||
|
|
|
@ -133,6 +133,7 @@ function tumblr_item_by_link(array &$hookData)
|
|||
Logger::debug('Got post', ['blog' => $matches[1], 'id' => $matches[2], 'result' => $result->response->posts]);
|
||||
if (!empty($result->response->posts)) {
|
||||
$hookData['item_id'] = tumblr_process_post($result->response->posts[0], $hookData['uid'], Item::PR_FETCHED);
|
||||
Item::incrementInbound(Protocol::TUMBLR);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -203,9 +204,9 @@ function tumblr_block(array &$hook_data)
|
|||
$hook_data['result'] = ($result->meta->status <= 399);
|
||||
|
||||
if ($hook_data['result']) {
|
||||
$cdata = Contact::getPublicAndUserContactID($hook_data['contact']['id'], $hook_data['uid']);
|
||||
if (!empty($cdata['user'])) {
|
||||
Contact::remove($cdata['user']);
|
||||
$ucid = Contact::getUserContactId($hook_data['contact']['id'], $hook_data['uid']);
|
||||
if ($ucid) {
|
||||
Contact::remove($ucid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -238,9 +239,7 @@ function tumblr_get_contact_uuid(array $contact): string
|
|||
* existence of this method is checked to figure out if the addon offers a
|
||||
* module.
|
||||
*/
|
||||
function tumblr_module()
|
||||
{
|
||||
}
|
||||
function tumblr_module() {}
|
||||
|
||||
function tumblr_content()
|
||||
{
|
||||
|
@ -608,6 +607,15 @@ function tumblr_send_legacy(array $b)
|
|||
$body = BBCode::removeShareInformation($b['body']);
|
||||
$body = Post\Media::removeFromEndOfBody($body);
|
||||
|
||||
if (!empty($b['quote-uri-id'])) {
|
||||
$quote = Post::selectFirstPost(['uri', 'plink'], ['uri-id' => $b['quote-uri-id']]);
|
||||
if (!empty($quote)) {
|
||||
if ((strpos($body, $quote['plink'] ?: $quote['uri']) === false) && (strpos($body, $quote['uri']) === false)) {
|
||||
$body .= "\n[url]" . ($quote['plink'] ?: $quote['uri']) . "[/url]\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($photo !== false) {
|
||||
$params['type'] = 'photo';
|
||||
$params['caption'] = BBCode::convertForUriId($b['uri-id'], $body, BBCode::CONNECTORS);
|
||||
|
@ -648,7 +656,7 @@ function tumblr_send_legacy(array $b)
|
|||
} else {
|
||||
$params['type'] = 'text';
|
||||
$params['title'] = $title;
|
||||
$params['body'] = BBCode::convertForUriId($b['uri-id'], $b['body'], BBCode::CONNECTORS);
|
||||
$params['body'] = BBCode::convertForUriId($b['uri-id'], $body, BBCode::CONNECTORS);
|
||||
}
|
||||
|
||||
if (isset($params['caption']) && (trim($title) != '')) {
|
||||
|
@ -747,6 +755,7 @@ function tumblr_fetch_tags(int $uid, int $last_poll)
|
|||
$post = Post::selectFirst(['uri-id'], ['id' => $id]);
|
||||
$stored = Post\Category::storeFileByURIId($post['uri-id'], $uid, Post\Category::SUBCRIPTION, $tag);
|
||||
Logger::debug('Stored tag subscription for user', ['uri-id' => $post['uri-id'], 'uid' => $uid, 'tag' => $tag, 'stored' => $stored]);
|
||||
Item::incrementInbound(Protocol::TUMBLR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -786,6 +795,7 @@ function tumblr_fetch_dashboard(int $uid, int $last_poll)
|
|||
Logger::debug('Importing post', ['uid' => $uid, 'created' => date(DateTimeFormat::MYSQL, $post->timestamp), 'id' => $post->id_string]);
|
||||
|
||||
tumblr_process_post($post, $uid, Item::PR_NONE, $last_poll);
|
||||
Item::incrementInbound(Protocol::TUMBLR);
|
||||
|
||||
DI::pConfig()->set($uid, 'tumblr', 'last_id', $last);
|
||||
}
|
||||
|
@ -1158,6 +1168,7 @@ function tumblr_get_contact_fields(stdClass $blog, int $uid, bool $update): arra
|
|||
Logger::notice('Error fetching blog info', ['meta' => $info->meta, 'response' => $info->response, 'errors' => $info->errors]);
|
||||
return $fields;
|
||||
}
|
||||
Item::incrementInbound(Protocol::TUMBLR);
|
||||
|
||||
$avatar = $info->response->blog->avatar;
|
||||
if (!empty($avatar)) {
|
||||
|
@ -1222,6 +1233,8 @@ function tumblr_get_blogs(int $uid): array
|
|||
return [];
|
||||
}
|
||||
|
||||
Item::incrementInbound(Protocol::TUMBLR);
|
||||
|
||||
$blogs = [];
|
||||
foreach ($userinfo->response->user->blogs as $blog) {
|
||||
$blogs[$blog->uuid] = $blog->name;
|
||||
|
@ -1278,10 +1291,11 @@ function tumblr_get_contact_by_url(string $url, int $uid): ?array
|
|||
if ($info->meta->status > 399) {
|
||||
Logger::notice('Error fetching blog info', ['meta' => $info->meta, 'response' => $info->response, 'errors' => $info->errors, 'blog' => $blog, 'uid' => $uid]);
|
||||
return null;
|
||||
} else {
|
||||
Logger::debug('Got data', ['blog' => $blog, 'meta' => $info->meta]);
|
||||
}
|
||||
|
||||
Logger::debug('Got data', ['blog' => $blog, 'meta' => $info->meta]);
|
||||
Item::incrementInbound(Protocol::TUMBLR);
|
||||
|
||||
$baseurl = 'https://tumblr.com';
|
||||
$url = $baseurl . '/' . $info->response->blog->name;
|
||||
|
||||
|
@ -1346,6 +1360,7 @@ function tumblr_get(int $uid, string $url, array $parameters = []): stdClass
|
|||
*/
|
||||
function tumblr_post(int $uid, string $url, array $parameters): stdClass
|
||||
{
|
||||
Item::incrementOutbound(Protocol::TUMBLR);
|
||||
$url = 'https://api.tumblr.com/v2/' . $url;
|
||||
|
||||
$curlResult = DI::httpClient()->post($url, $parameters, ['Authorization' => ['Bearer ' . tumblr_get_token($uid)]]);
|
||||
|
|
Loading…
Reference in a new issue