Merge remote-tracking branch 'upstream/develop' into logger-json

This commit is contained in:
Michael 2021-11-02 19:35:11 +00:00
commit 2785e4dab8
9 changed files with 1607 additions and 1193 deletions

View file

@ -289,13 +289,17 @@ class Photo extends BaseModule
$mimetext = ''; $mimetext = '';
if (!empty($url)) { if (!empty($url)) {
$mime = ParseUrl::getContentType($url); $mime = ParseUrl::getContentType($url);
if (empty($mime) || ($mime[0] != 'image')) { if (!empty($mime)) {
$url = '';
} else {
$mimetext = $mime[0] . '/' . $mime[1]; $mimetext = $mime[0] . '/' . $mime[1];
} else {
Logger::info('Invalid file', ['url' => $url]);
}
if (!empty($mimetext) && ($mime[0] != 'image') && ($mimetext != 'application/octet-stream')) {
Logger::info('Unexpected Content-Type', ['mime' => $mimetext, 'url' => $url]);
$mimetext = '';
} }
} }
if (empty($url)) { if (empty($mimetext)) {
if ($customsize <= Proxy::PIXEL_MICRO) { if ($customsize <= Proxy::PIXEL_MICRO) {
$url = Contact::getDefaultAvatar($contact, Proxy::SIZE_MICRO); $url = Contact::getDefaultAvatar($contact, Proxy::SIZE_MICRO);
} elseif ($customsize <= Proxy::PIXEL_THUMB) { } elseif ($customsize <= Proxy::PIXEL_THUMB) {

View file

@ -0,0 +1,13 @@
<?php
namespace Friendica\Security\PermissionSet\Exception;
use Exception;
class PermissionSetNotFoundException extends \RuntimeException
{
public function __construct($message = '', Exception $previous = null)
{
parent::__construct($message, 404, $previous);
}
}

View file

@ -0,0 +1,13 @@
<?php
namespace Friendica\Security\PermissionSet\Exception;
use Throwable;
class PermissionSetPersistenceException extends \RuntimeException
{
public function __construct($message = "", Throwable $previous = null)
{
parent::__construct($message, 500, $previous);
}
}

View file

@ -27,6 +27,8 @@ use Friendica\Database\Database;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\Group; use Friendica\Model\Group;
use Friendica\Network\HTTPException\NotFoundException; use Friendica\Network\HTTPException\NotFoundException;
use Friendica\Security\PermissionSet\Exception\PermissionSetNotFoundException;
use Friendica\Security\PermissionSet\Exception\PermissionSetPersistenceException;
use Friendica\Security\PermissionSet\Factory; use Friendica\Security\PermissionSet\Factory;
use Friendica\Security\PermissionSet\Collection; use Friendica\Security\PermissionSet\Collection;
use Friendica\Security\PermissionSet\Entity; use Friendica\Security\PermissionSet\Entity;
@ -53,34 +55,22 @@ class PermissionSet extends BaseRepository
$this->aclFormatter = $aclFormatter; $this->aclFormatter = $aclFormatter;
} }
/**
* replaces the PUBLIC id for the public permissionSet
* (no need to create the default permission set over and over again)
*
* @param $condition
*/
private function checkPublicSelect(&$condition)
{
if (empty($condition['allow_cid']) &&
empty($condition['allow_gid']) &&
empty($condition['deny_cid']) &&
empty($condition['deny_gid'])) {
$condition['uid'] = self::PUBLIC;
}
}
/** /**
* @param array $condition * @param array $condition
* @param array $params * @param array $params
* *
* @return Entity\PermissionSet * @return Entity\PermissionSet
* @throws NotFoundException * @throws NotFoundException
* @throws Exception
*/ */
private function selectOne(array $condition, array $params = []): Entity\PermissionSet private function selectOne(array $condition, array $params = []): Entity\PermissionSet
{ {
return parent::_selectOne($condition, $params); return parent::_selectOne($condition, $params);
} }
/**
* @throws Exception
*/
private function select(array $condition, array $params = []): Collection\PermissionSets private function select(array $condition, array $params = []): Collection\PermissionSets
{ {
return new Collection\PermissionSets(parent::_select($condition, $params)->getArrayCopy()); return new Collection\PermissionSets(parent::_select($condition, $params)->getArrayCopy());
@ -108,7 +98,9 @@ class PermissionSet extends BaseRepository
* @param int $id A PermissionSet table row id or self::PUBLIC * @param int $id A PermissionSet table row id or self::PUBLIC
* @param int $uid The owner of the PermissionSet * @param int $uid The owner of the PermissionSet
* @return Entity\PermissionSet * @return Entity\PermissionSet
* @throws NotFoundException *
* @throws PermissionSetNotFoundException
* @throws PermissionSetPersistenceException
*/ */
public function selectOneById(int $id, int $uid): Entity\PermissionSet public function selectOneById(int $id, int $uid): Entity\PermissionSet
{ {
@ -116,7 +108,13 @@ class PermissionSet extends BaseRepository
return $this->factory->createFromString($uid); return $this->factory->createFromString($uid);
} }
return $this->selectOne(['id' => $id, 'uid' => $uid]); try {
return $this->selectOne(['id' => $id, 'uid' => $uid]);
} catch (NotFoundException $exception) {
throw new PermissionSetNotFoundException(sprintf('PermissionSet with id %d for user %u doesn\'t exist.', $id, $uid), $exception);
} catch (Exception $exception) {
throw new PermissionSetPersistenceException(sprintf('Cannot select PermissionSet %d for user %d', $id, $uid), $exception);
}
} }
/** /**
@ -126,45 +124,51 @@ class PermissionSet extends BaseRepository
* @param int $uid User id whom the items belong, used for ownership check. * @param int $uid User id whom the items belong, used for ownership check.
* *
* @return Collection\PermissionSets * @return Collection\PermissionSets
*
* @throws PermissionSetPersistenceException
*/ */
public function selectByContactId(int $cid, int $uid): Collection\PermissionSets public function selectByContactId(int $cid, int $uid): Collection\PermissionSets
{ {
$cdata = Contact::getPublicAndUserContactID($cid, $uid); try {
if (!empty($cdata)) { $cdata = Contact::getPublicAndUserContactID($cid, $uid);
$public_contact_str = $this->aclFormatter->toString($cdata['public']); if (!empty($cdata)) {
$user_contact_str = $this->aclFormatter->toString($cdata['user']); $public_contact_str = $this->aclFormatter->toString($cdata['public']);
$cid = $cdata['user']; $user_contact_str = $this->aclFormatter->toString($cdata['user']);
} else { $cid = $cdata['user'];
$public_contact_str = $this->aclFormatter->toString($cid); } else {
$user_contact_str = ''; $public_contact_str = $this->aclFormatter->toString($cid);
} $user_contact_str = '';
}
$groups = []; $groups = [];
if (!empty($user_contact_str) && $this->db->exists('contact', [ if (!empty($user_contact_str) && $this->db->exists('contact', [
'id' => $cid, 'id' => $cid,
'uid' => $uid, 'uid' => $uid,
'blocked' => false 'blocked' => false
])) { ])) {
$groups = Group::getIdsByContactId($cid); $groups = Group::getIdsByContactId($cid);
} }
$group_str = '<<>>'; // should be impossible to match $group_str = '<<>>'; // should be impossible to match
foreach ($groups as $group_id) { foreach ($groups as $group_id) {
$group_str .= '|<' . preg_quote($group_id) . '>'; $group_str .= '|<' . preg_quote($group_id) . '>';
} }
if (!empty($user_contact_str)) { if (!empty($user_contact_str)) {
$condition = ["`uid` = ? AND (NOT (`deny_cid` REGEXP ? OR `deny_cid` REGEXP ? OR deny_gid REGEXP ?) $condition = ["`uid` = ? AND (NOT (LOCATE(?, `deny_cid`) OR LOCATE(?, `deny_cid`) OR deny_gid REGEXP ?)
AND (allow_cid REGEXP ? OR allow_cid REGEXP ? OR allow_gid REGEXP ? OR (allow_cid = '' AND allow_gid = '')))", AND (LOCATE(?, allow_cid) OR LOCATE(?, allow_cid) OR allow_gid REGEXP ? OR (allow_cid = '' AND allow_gid = '')))",
$uid, $user_contact_str, $public_contact_str, $group_str, $uid, $user_contact_str, $public_contact_str, $group_str,
$user_contact_str, $public_contact_str, $group_str]; $user_contact_str, $public_contact_str, $group_str];
} else { } else {
$condition = ["`uid` = ? AND (NOT (`deny_cid` REGEXP ? OR deny_gid REGEXP ?) $condition = ["`uid` = ? AND (NOT (LOCATE(?, `deny_cid`) OR deny_gid REGEXP ?)
AND (allow_cid REGEXP ? OR allow_gid REGEXP ? OR (allow_cid = '' AND allow_gid = '')))", AND (LOCATE(?, allow_cid) OR allow_gid REGEXP ? OR (allow_cid = '' AND allow_gid = '')))",
$uid, $public_contact_str, $group_str, $public_contact_str, $group_str]; $uid, $public_contact_str, $group_str, $public_contact_str, $group_str];
} }
return $this->select($condition); return $this->select($condition);
} catch (Exception $exception) {
throw new PermissionSetPersistenceException(sprintf('Cannot select PermissionSet for contact %d and user %d', $cid, $uid), $exception);
}
} }
/** /**
@ -173,11 +177,20 @@ class PermissionSet extends BaseRepository
* @param int $uid * @param int $uid
* *
* @return Entity\PermissionSet * @return Entity\PermissionSet
* @throws Exception *
* @throws PermissionSetPersistenceException
*/ */
public function selectDefaultForUser(int $uid): Entity\PermissionSet public function selectDefaultForUser(int $uid): Entity\PermissionSet
{ {
$self_contact = Contact::selectFirst(['id'], ['uid' => $uid, 'self' => true]); try {
$self_contact = Contact::selectFirst(['id'], ['uid' => $uid, 'self' => true]);
} catch (Exception $exception) {
throw new PermissionSetPersistenceException(sprintf('Cannot select Contact for user %d', $uid));
}
if (!$this->db->isResult($self_contact)) {
throw new PermissionSetPersistenceException(sprintf('No "self" contact found for user %d', $uid));
}
return $this->selectOrCreate($this->factory->createFromString( return $this->selectOrCreate($this->factory->createFromString(
$uid, $uid,
@ -203,6 +216,8 @@ class PermissionSet extends BaseRepository
* @param Entity\PermissionSet $permissionSet * @param Entity\PermissionSet $permissionSet
* *
* @return Entity\PermissionSet * @return Entity\PermissionSet
*
* @throws PermissionSetPersistenceException
*/ */
public function selectOrCreate(Entity\PermissionSet $permissionSet): Entity\PermissionSet public function selectOrCreate(Entity\PermissionSet $permissionSet): Entity\PermissionSet
{ {
@ -219,6 +234,8 @@ class PermissionSet extends BaseRepository
return $this->selectOne($this->convertToTableRow($permissionSet)); return $this->selectOne($this->convertToTableRow($permissionSet));
} catch (NotFoundException $exception) { } catch (NotFoundException $exception) {
return $this->save($permissionSet); return $this->save($permissionSet);
} catch (Exception $exception) {
throw new PermissionSetPersistenceException(sprintf('Cannot select PermissionSet %d', $permissionSet->id ?? 0), $exception);
} }
} }
@ -226,7 +243,8 @@ class PermissionSet extends BaseRepository
* @param Entity\PermissionSet $permissionSet * @param Entity\PermissionSet $permissionSet
* *
* @return Entity\PermissionSet * @return Entity\PermissionSet
* @throws NotFoundException *
* @throws PermissionSetPersistenceException
*/ */
public function save(Entity\PermissionSet $permissionSet): Entity\PermissionSet public function save(Entity\PermissionSet $permissionSet): Entity\PermissionSet
{ {
@ -237,12 +255,16 @@ class PermissionSet extends BaseRepository
$fields = $this->convertToTableRow($permissionSet); $fields = $this->convertToTableRow($permissionSet);
if ($permissionSet->id) { try {
$this->db->update(self::$table_name, $fields, ['id' => $permissionSet->id]); if ($permissionSet->id) {
} else { $this->db->update(self::$table_name, $fields, ['id' => $permissionSet->id]);
$this->db->insert(self::$table_name, $fields); } else {
$this->db->insert(self::$table_name, $fields);
$permissionSet = $this->selectOneById($this->db->lastInsertId(), $permissionSet->uid); $permissionSet = $this->selectOneById($this->db->lastInsertId(), $permissionSet->uid);
}
} catch (Exception $exception) {
throw new PermissionSetPersistenceException(sprintf('Cannot save PermissionSet %d', $permissionSet->id ?? 0), $exception);
} }
return $permissionSet; return $permissionSet;

View file

@ -2,6 +2,9 @@
namespace Friendica\Test\src\Security\PermissionSet\Repository; namespace Friendica\Test\src\Security\PermissionSet\Repository;
use Friendica\Database\Database;
use Friendica\Security\PermissionSet\Collection\PermissionSets;
use Friendica\Security\PermissionSet\Exception\PermissionSetNotFoundException;
use Friendica\Security\PermissionSet\Repository\PermissionSet as PermissionSetRepository; use Friendica\Security\PermissionSet\Repository\PermissionSet as PermissionSetRepository;
use Friendica\Security\PermissionSet\Entity\PermissionSet; use Friendica\Security\PermissionSet\Entity\PermissionSet;
use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFactory; use Friendica\Security\PermissionSet\Factory\PermissionSet as PermissionSetFactory;
@ -61,4 +64,333 @@ class PermissionSetTest extends FixtureTest
self::assertEquals($savedPermissionSet, $permissionSetSavedSelected); self::assertEquals($savedPermissionSet, $permissionSetSavedSelected);
} }
/**
* Asserts that the actual permissionset is equal to the expected permissionset
* --> It skips the "id" fields
*
* @param PermissionSets $expected
* @param PermissionSets $actual
*/
public static function assertEqualPermissionSets(PermissionSets $expected, PermissionSets $actual)
{
self::assertEquals($expected->count(), $actual->count(), 'PermissionSets not even ' . PHP_EOL . 'expected: ' . print_r($expected, true) . 'actual: ' . print_r($actual, true));
foreach ($expected as $outputPermissionSet) {
self::assertCount(1, $actual->filter(function (PermissionSet $actualPermissionSet) use ($outputPermissionSet) {
return (
$actualPermissionSet->uid == $outputPermissionSet->uid &&
$actualPermissionSet->allow_cid == $outputPermissionSet->allow_cid &&
$actualPermissionSet->allow_gid == $outputPermissionSet->allow_gid &&
$actualPermissionSet->deny_cid == $outputPermissionSet->deny_cid &&
$actualPermissionSet->deny_gid == $outputPermissionSet->deny_gid
);
}), 'PermissionSet not found: ' . print_r($outputPermissionSet, true));
}
}
public function dataSet()
{
return [
'standard' => [
'group_member' => [],
'permissionSets' => [
[
'uid' => 42,
'allow_cid' => '<43>',
'allow_gid' => '',
'deny_cid' => '<44>',
'deny_gid' => '',
],
[
'uid' => 42,
'allow_cid' => '',
'allow_gid' => '',
'deny_cid' => '',
'deny_gid' => '',
],
[
'uid' => 42,
'allow_cid' => '<44>',
'allow_gid' => '',
'deny_cid' => '',
'deny_gid' => '',
],
],
'assertions' => [
[
'input' => [
'cid' => 43,
'uid' => 42,
],
'output' => new PermissionSets([
new PermissionSet(42, [43], [], [44], []),
new PermissionSet(42, [], [], [], []),
]),
],
[
'input' => [
'cid' => 44,
'uid' => 42,
],
'output' => new PermissionSets([
new PermissionSet(42, [], [], [], []),
new PermissionSet(42, [44], [], [], []),
]),
],
[
'input' => [
'cid' => 47,
'uid' => 42,
],
'output' => new PermissionSets([
new PermissionSet(42, [], [], [], []),
]),
],
],
],
'empty' => [
'group_member' => [],
'permissionSets' => [
[
'uid' => 42,
'allow_cid' => '',
'allow_gid' => '',
'deny_cid' => '',
'deny_gid' => '',
],
],
'assertions' => [
[
'input' => [
'cid' => 43,
'uid' => 42,
],
'output' => new PermissionSets([
new PermissionSet(42, [], [], [], []),
]),
],
[
'input' => [
'cid' => 44,
'uid' => 42,
],
'output' => new PermissionSets([
new PermissionSet(42, [], [], [], []),
]),
],
[
'input' => [
'cid' => 47,
'uid' => 42,
],
'output' => new PermissionSets([
new PermissionSet(42, [], [], [], []),
]),
],
]
],
'nothing' => [
'group_member' => [],
'permissionSets' => [
],
'assertions' => [
[
'input' => [
'cid' => 43,
'uid' => 42,
],
'output' => new PermissionSets(),
],
[
'input' => [
'cid' => 44,
'uid' => 42,
],
'output' => new PermissionSets(),
],
[
'input' => [
'cid' => 47,
'uid' => 42,
],
'output' => new PermissionSets(),
],
]
],
'with_groups' => [
'group_member' => [
[
'id' => 1,
'gid' => 1,
'contact-id' => 47,
],
[
'id' => 2,
'gid' => 1,
'contact-id' => 42,
],
[
'id' => 3,
'gid' => 2,
'contact-id' => 43,
],
],
'permissionSets' => [
[
'uid' => 42,
'allow_cid' => '<43>',
'allow_gid' => '<3>',
'deny_cid' => '<44>,<46>',
'deny_gid' => '',
],
[
'uid' => 42,
'allow_cid' => '',
'allow_gid' => '',
'deny_cid' => '',
'deny_gid' => '<2>',
],
[
'uid' => 42,
'allow_cid' => '<44>',
'allow_gid' => '',
'deny_cid' => '',
'deny_gid' => '',
],
[
'uid' => 42,
'allow_cid' => '',
'allow_gid' => '',
'deny_cid' => '',
'deny_gid' => '<1>',
],
[
'uid' => 42,
'allow_cid' => '<45>',
'allow_gid' => '',
'deny_cid' => '',
'deny_gid' => '<1><2>',
],
],
'assertions' => [
[
'input' => [
'cid' => 42,
'uid' => 42,
],
'output' => new PermissionSets([
new PermissionSet(42, [], [], [], [2]),
]),
],
[
'input' => [
'cid' => 43,
'uid' => 42,
],
'output' => new PermissionSets([
new PermissionSet(42, [43], [3], [44, 46], []),
new PermissionSet(42, [], [], [], [2]),
new PermissionSet(42, [], [], [], [1]),
]),
],
[
'input' => [
'cid' => 44,
'uid' => 42,
],
'output' => new PermissionSets([
new PermissionSet(42, [], [], [], [2]),
new PermissionSet(42, [44], [], [], []),
new PermissionSet(42, [], [], [], [1]),
new PermissionSet(42, [45], [], [], [1, 2]),
]),
],
[
'input' => [
'cid' => 45,
'uid' => 42,
],
'output' => new PermissionSets([
new PermissionSet(42, [], [], [], [2]),
new PermissionSet(42, [44], [], [], []),
new PermissionSet(42, [], [], [], [1]),
new PermissionSet(42, [45], [], [], [1, 2]),
]),
],
[
'input' => [
'cid' => 46,
'uid' => 42,
],
'output' => new PermissionSets([
new PermissionSet(42, [], [], [], [2]),
new PermissionSet(42, [], [], [], [1]),
]),
],
[
'input' => [
'cid' => 47,
'uid' => 42,
],
'output' => new PermissionSets([
new PermissionSet(42, [], [], [], [2]),
new PermissionSet(42, [], [], [], [1]),
]),
],
],
],
];
}
/**
* @dataProvider dataSet
*/
public function testSelectContactId(array $group_member, array $inputPermissionSets, array $assertions)
{
/** @var Database $db */
$db = $this->dice->create(Database::class);
foreach ($group_member as $gmember) {
$db->insert('group_member', $gmember, true);
}
foreach ($inputPermissionSets as $inputPermissionSet) {
$db->insert('permissionset', $inputPermissionSet, true);
}
foreach ($assertions as $assertion) {
$permissionSets = $this->repository->selectByContactId($assertion['input']['cid'], $assertion['input']['uid']);
self::assertInstanceOf(PermissionSets::class, $permissionSets);
self::assertEqualPermissionSets($assertion['output'], $permissionSets);
}
}
public function testSelectOneByIdInvalid()
{
self::expectException(PermissionSetNotFoundException::class);
self::expectExceptionMessage('PermissionSet with id -1 for user 42 doesn\'t exist.');
$this->repository->selectOneById(-1, 42);
}
/**
* @dataProvider dataSet
*/
public function testSelectOneById(array $group_member, array $inputPermissionSets, array $assertions)
{
if (count($inputPermissionSets) === 0) {
self::markTestSkipped('Nothing to assert.');
}
/** @var Database $db */
$db = $this->dice->create(Database::class);
foreach ($inputPermissionSets as $inputPermissionSet) {
$db->insert('permissionset', $inputPermissionSet);
$id = $db->lastInsertId();
self::assertInstanceOf(PermissionSet::class, $this->repository->selectOneById($id, $inputPermissionSet['uid']));
}
}
} }

View file

@ -49,8 +49,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: friendica\n" "Project-Id-Version: friendica\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-10-23 21:51-0400\n" "POT-Creation-Date: 2021-10-27 20:01+0200\n"
"PO-Revision-Date: 2021-10-24 13:04+0000\n" "PO-Revision-Date: 2021-11-01 05:59+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n" "Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>\n"
"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" "Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -2129,11 +2129,11 @@ msgid ""
"your site allow private mail from unknown senders." "your site allow private mail from unknown senders."
msgstr "Wenn du möchtest, dass %s dir antworten kann, überprüfe deine Privatsphären-Einstellungen und erlaube private Nachrichten von unbekannten Absendern." msgstr "Wenn du möchtest, dass %s dir antworten kann, überprüfe deine Privatsphären-Einstellungen und erlaube private Nachrichten von unbekannten Absendern."
#: src/App.php:456 #: src/App.php:455
msgid "No system theme config value set." msgid "No system theme config value set."
msgstr "Es wurde kein Konfigurationswert für das systemweite Theme gesetzt." msgstr "Es wurde kein Konfigurationswert für das systemweite Theme gesetzt."
#: src/App/Module.php:240 #: src/App/Module.php:241
msgid "You must be logged in to use addons. " msgid "You must be logged in to use addons. "
msgstr "Du musst angemeldet sein, um Addons benutzen zu können." msgstr "Du musst angemeldet sein, um Addons benutzen zu können."
@ -3923,6 +3923,20 @@ msgstr "Die Template Engine kann nicht ohne einen Namen registriert werden."
msgid "template engine is not registered!" msgid "template engine is not registered!"
msgstr "Template Engine wurde nicht registriert!" msgstr "Template Engine wurde nicht registriert!"
#: src/Core/Storage/Type/FilesystemConfig.php:78
msgid "Storage base path"
msgstr "Dateipfad zum Speicher"
#: src/Core/Storage/Type/FilesystemConfig.php:80
msgid ""
"Folder where uploaded files are saved. For maximum security, This should be "
"a path outside web server folder tree"
msgstr "Verzeichnis, in das Dateien hochgeladen werden. Für maximale Sicherheit sollte dies ein Pfad außerhalb der Webserver-Verzeichnisstruktur sein"
#: src/Core/Storage/Type/FilesystemConfig.php:93
msgid "Enter a valid existing folder"
msgstr "Gib einen gültigen, existierenden Ordner ein"
#: src/Core/Update.php:67 #: src/Core/Update.php:67
#, php-format #, php-format
msgid "" msgid ""
@ -4168,10 +4182,9 @@ msgstr "Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachr
msgid "Unable to retrieve contact information." msgid "Unable to retrieve contact information."
msgstr "Konnte die Kontaktinformationen nicht empfangen." msgstr "Konnte die Kontaktinformationen nicht empfangen."
#: src/Model/Event.php:52 src/Model/Event.php:853 #: src/Model/Event.php:52
#: src/Module/Debug/Localtime.php:38 msgid "l F d, Y \\@ g:i A \\G\\M\\TP (e)"
msgid "l F d, Y \\@ g:i A" msgstr "l F d, Y \\@ g:i A \\G\\M\\TP (e)"
msgstr "l, d. F Y\\, H:i"
#: src/Model/Event.php:73 src/Model/Event.php:90 src/Model/Event.php:464 #: src/Model/Event.php:73 src/Model/Event.php:90 src/Model/Event.php:464
#: src/Model/Event.php:897 #: src/Model/Event.php:897
@ -4211,6 +4224,10 @@ msgstr "Veranstaltung kopieren"
msgid "Delete event" msgid "Delete event"
msgstr "Veranstaltung löschen" msgstr "Veranstaltung löschen"
#: src/Model/Event.php:853 src/Module/Debug/Localtime.php:38
msgid "l F d, Y \\@ g:i A"
msgstr "l, d. F Y\\, H:i"
#: src/Model/Event.php:854 #: src/Model/Event.php:854
msgid "D g:i A" msgid "D g:i A"
msgstr "D H:i" msgstr "D H:i"
@ -4455,20 +4472,6 @@ msgstr "Schule/Ausbildung"
msgid "Contact information and Social Networks" msgid "Contact information and Social Networks"
msgstr "Kontaktinformationen und Soziale Netzwerke" msgstr "Kontaktinformationen und Soziale Netzwerke"
#: src/Model/Storage/FilesystemConfig.php:77
msgid "Storage base path"
msgstr "Dateipfad zum Speicher"
#: src/Model/Storage/FilesystemConfig.php:79
msgid ""
"Folder where uploaded files are saved. For maximum security, This should be "
"a path outside web server folder tree"
msgstr "Verzeichnis, in das Dateien hochgeladen werden. Für maximale Sicherheit sollte dies ein Pfad außerhalb der Webserver-Verzeichnisstruktur sein"
#: src/Model/Storage/FilesystemConfig.php:92
msgid "Enter a valid existing folder"
msgstr "Gib einen gültigen, existierenden Ordner ein"
#: src/Model/User.php:208 src/Model/User.php:1050 #: src/Model/User.php:208 src/Model/User.php:1050
msgid "SERIOUS ERROR: Generation of security keys failed." msgid "SERIOUS ERROR: Generation of security keys failed."
msgstr "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden." msgstr "FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden."
@ -4516,13 +4519,13 @@ msgstr "Die Einladung konnte nicht überprüft werden."
msgid "Invalid OpenID url" msgid "Invalid OpenID url"
msgstr "Ungültige OpenID URL" msgstr "Ungültige OpenID URL"
#: src/Model/User.php:962 src/Security/Authentication.php:223 #: src/Model/User.php:962 src/Security/Authentication.php:224
msgid "" msgid ""
"We encountered a problem while logging in with the OpenID you provided. " "We encountered a problem while logging in with the OpenID you provided. "
"Please check the correct spelling of the ID." "Please check the correct spelling of the ID."
msgstr "Beim Versuch, dich mit der von dir angegebenen OpenID anzumelden, trat ein Problem auf. Bitte überprüfe, dass du die OpenID richtig geschrieben hast." msgstr "Beim Versuch, dich mit der von dir angegebenen OpenID anzumelden, trat ein Problem auf. Bitte überprüfe, dass du die OpenID richtig geschrieben hast."
#: src/Model/User.php:962 src/Security/Authentication.php:223 #: src/Model/User.php:962 src/Security/Authentication.php:224
msgid "The error message was:" msgid "The error message was:"
msgstr "Die Fehlermeldung lautete:" msgstr "Die Fehlermeldung lautete:"
@ -8546,21 +8549,21 @@ msgstr "Entfernte Privatsphäreneinstellungen nicht verfügbar."
msgid "Visible to:" msgid "Visible to:"
msgstr "Sichtbar für:" msgstr "Sichtbar für:"
#: src/Module/Photo.php:122 #: src/Module/Photo.php:123
msgid "The Photo is not available." msgid "The Photo is not available."
msgstr "Das Foto ist nicht verfügbar." msgstr "Das Foto ist nicht verfügbar."
#: src/Module/Photo.php:135 #: src/Module/Photo.php:136
#, php-format #, php-format
msgid "The Photo with id %s is not available." msgid "The Photo with id %s is not available."
msgstr "Das Bild mit ID %s ist nicht verfügbar." msgstr "Das Bild mit ID %s ist nicht verfügbar."
#: src/Module/Photo.php:168 #: src/Module/Photo.php:169
#, php-format #, php-format
msgid "Invalid external resource with url %s." msgid "Invalid external resource with url %s."
msgstr "Ungültige externe Ressource mit der URL %s" msgstr "Ungültige externe Ressource mit der URL %s"
#: src/Module/Photo.php:170 #: src/Module/Photo.php:171
#, php-format #, php-format
msgid "Invalid photo with id %s." msgid "Invalid photo with id %s."
msgstr "Fehlerhaftes Foto mit der ID %s." msgstr "Fehlerhaftes Foto mit der ID %s."
@ -10624,20 +10627,20 @@ msgstr "wird nicht mehr gefolgt"
msgid "The folder view/smarty3/ must be writable by webserver." msgid "The folder view/smarty3/ must be writable by webserver."
msgstr "Das Verzeichnis view/smarty3/ muss für den Web-Server beschreibbar sein." msgstr "Das Verzeichnis view/smarty3/ muss für den Web-Server beschreibbar sein."
#: src/Security/Authentication.php:209 #: src/Security/Authentication.php:210
msgid "Login failed." msgid "Login failed."
msgstr "Anmeldung fehlgeschlagen." msgstr "Anmeldung fehlgeschlagen."
#: src/Security/Authentication.php:250 #: src/Security/Authentication.php:251
msgid "Login failed. Please check your credentials." msgid "Login failed. Please check your credentials."
msgstr "Anmeldung fehlgeschlagen. Bitte überprüfe deine Angaben." msgstr "Anmeldung fehlgeschlagen. Bitte überprüfe deine Angaben."
#: src/Security/Authentication.php:348 #: src/Security/Authentication.php:349
#, php-format #, php-format
msgid "Welcome %s" msgid "Welcome %s"
msgstr "Willkommen %s" msgstr "Willkommen %s"
#: src/Security/Authentication.php:349 #: src/Security/Authentication.php:350
msgid "Please upload a profile photo." msgid "Please upload a profile photo."
msgstr "Bitte lade ein Profilbild hoch." msgstr "Bitte lade ein Profilbild hoch."

View file

@ -933,6 +933,9 @@ $a->strings['rebuffed'] = 'abfuhrerteilte';
$a->strings['Friendica can\'t display this page at the moment, please contact the administrator.'] = 'Friendica kann die Seite im Moment nicht darstellen. Bitte kontaktiere das Administratoren Team.'; $a->strings['Friendica can\'t display this page at the moment, please contact the administrator.'] = 'Friendica kann die Seite im Moment nicht darstellen. Bitte kontaktiere das Administratoren Team.';
$a->strings['template engine cannot be registered without a name.'] = 'Die Template Engine kann nicht ohne einen Namen registriert werden.'; $a->strings['template engine cannot be registered without a name.'] = 'Die Template Engine kann nicht ohne einen Namen registriert werden.';
$a->strings['template engine is not registered!'] = 'Template Engine wurde nicht registriert!'; $a->strings['template engine is not registered!'] = 'Template Engine wurde nicht registriert!';
$a->strings['Storage base path'] = 'Dateipfad zum Speicher';
$a->strings['Folder where uploaded files are saved. For maximum security, This should be a path outside web server folder tree'] = 'Verzeichnis, in das Dateien hochgeladen werden. Für maximale Sicherheit sollte dies ein Pfad außerhalb der Webserver-Verzeichnisstruktur sein';
$a->strings['Enter a valid existing folder'] = 'Gib einen gültigen, existierenden Ordner ein';
$a->strings['Updates from version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383.'] = 'Aktualisierungen von der Version %s werden nicht unterstützt. Bitte aktualisiere vorher auf die Version 2021.01 von Friendica und warte bis das Postupdate auf die Version 1383 abgeschlossen ist.'; $a->strings['Updates from version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383.'] = 'Aktualisierungen von der Version %s werden nicht unterstützt. Bitte aktualisiere vorher auf die Version 2021.01 von Friendica und warte bis das Postupdate auf die Version 1383 abgeschlossen ist.';
$a->strings['Updates from postupdate version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383.'] = 'Aktualisierungen von der Postupdate Version %s werden nicht unterstützt. Bitte aktualisiere zunächst auf die Friendica Version 2021.01 und warte bis das Postupdate 1383 abgeschlossen ist.'; $a->strings['Updates from postupdate version %s are not supported. Please update at least to version 2021.01 and wait until the postupdate finished version 1383.'] = 'Aktualisierungen von der Postupdate Version %s werden nicht unterstützt. Bitte aktualisiere zunächst auf die Friendica Version 2021.01 und warte bis das Postupdate 1383 abgeschlossen ist.';
$a->strings['%s: executing pre update %d'] = '%s: Pre-Update %d wird ausgeführt'; $a->strings['%s: executing pre update %d'] = '%s: Pre-Update %d wird ausgeführt';
@ -1000,7 +1003,7 @@ $a->strings['Use mailto: in front of address to force email check.'] = 'Verwende
$a->strings['The profile address specified belongs to a network which has been disabled on this site.'] = 'Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde.'; $a->strings['The profile address specified belongs to a network which has been disabled on this site.'] = 'Die Adresse dieses Profils gehört zu einem Netzwerk, mit dem die Kommunikation auf dieser Seite ausgeschaltet wurde.';
$a->strings['Limited profile. This person will be unable to receive direct/personal notifications from you.'] = 'Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von dir erhalten können.'; $a->strings['Limited profile. This person will be unable to receive direct/personal notifications from you.'] = 'Eingeschränktes Profil. Diese Person wird keine direkten/privaten Nachrichten von dir erhalten können.';
$a->strings['Unable to retrieve contact information.'] = 'Konnte die Kontaktinformationen nicht empfangen.'; $a->strings['Unable to retrieve contact information.'] = 'Konnte die Kontaktinformationen nicht empfangen.';
$a->strings['l F d, Y \@ g:i A'] = 'l, d. F Y\, H:i'; $a->strings['l F d, Y \@ g:i A \G\M\TP (e)'] = 'l F d, Y \@ g:i A \G\M\TP (e)';
$a->strings['Starts:'] = 'Beginnt:'; $a->strings['Starts:'] = 'Beginnt:';
$a->strings['Finishes:'] = 'Endet:'; $a->strings['Finishes:'] = 'Endet:';
$a->strings['all-day'] = 'ganztägig'; $a->strings['all-day'] = 'ganztägig';
@ -1010,6 +1013,7 @@ $a->strings['l, F j'] = 'l, F j';
$a->strings['Edit event'] = 'Veranstaltung bearbeiten'; $a->strings['Edit event'] = 'Veranstaltung bearbeiten';
$a->strings['Duplicate event'] = 'Veranstaltung kopieren'; $a->strings['Duplicate event'] = 'Veranstaltung kopieren';
$a->strings['Delete event'] = 'Veranstaltung löschen'; $a->strings['Delete event'] = 'Veranstaltung löschen';
$a->strings['l F d, Y \@ g:i A'] = 'l, d. F Y\, H:i';
$a->strings['D g:i A'] = 'D H:i'; $a->strings['D g:i A'] = 'D H:i';
$a->strings['g:i A'] = 'H:i'; $a->strings['g:i A'] = 'H:i';
$a->strings['Show map'] = 'Karte anzeigen'; $a->strings['Show map'] = 'Karte anzeigen';
@ -1068,9 +1072,6 @@ $a->strings['Love/romance'] = 'Liebe/Romantik';
$a->strings['Work/employment'] = 'Arbeit/Anstellung'; $a->strings['Work/employment'] = 'Arbeit/Anstellung';
$a->strings['School/education'] = 'Schule/Ausbildung'; $a->strings['School/education'] = 'Schule/Ausbildung';
$a->strings['Contact information and Social Networks'] = 'Kontaktinformationen und Soziale Netzwerke'; $a->strings['Contact information and Social Networks'] = 'Kontaktinformationen und Soziale Netzwerke';
$a->strings['Storage base path'] = 'Dateipfad zum Speicher';
$a->strings['Folder where uploaded files are saved. For maximum security, This should be a path outside web server folder tree'] = 'Verzeichnis, in das Dateien hochgeladen werden. Für maximale Sicherheit sollte dies ein Pfad außerhalb der Webserver-Verzeichnisstruktur sein';
$a->strings['Enter a valid existing folder'] = 'Gib einen gültigen, existierenden Ordner ein';
$a->strings['SERIOUS ERROR: Generation of security keys failed.'] = 'FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden.'; $a->strings['SERIOUS ERROR: Generation of security keys failed.'] = 'FATALER FEHLER: Sicherheitsschlüssel konnten nicht erzeugt werden.';
$a->strings['Login failed'] = 'Anmeldung fehlgeschlagen'; $a->strings['Login failed'] = 'Anmeldung fehlgeschlagen';
$a->strings['Not enough information to authenticate'] = 'Nicht genügend Informationen für die Authentifizierung'; $a->strings['Not enough information to authenticate'] = 'Nicht genügend Informationen für die Authentifizierung';

File diff suppressed because it is too large Load diff

View file

@ -18,60 +18,6 @@ $a->strings['Weekly posting limit of %d post reached. The post was rejected.'] =
3 => 'Недельный лимит в %d записей достигнут. Запись была отклонена.', 3 => 'Недельный лимит в %d записей достигнут. Запись была отклонена.',
]; ];
$a->strings['Monthly posting limit of %d post reached. The post was rejected.'] = 'Месячный лимит в %d записей достигнут. Запись была отклонена.'; $a->strings['Monthly posting limit of %d post reached. The post was rejected.'] = 'Месячный лимит в %d записей достигнут. Запись была отклонена.';
$a->strings['Profile Photos'] = 'Фотографии профиля';
$a->strings['[Friendica:Notify]'] = '[Friendica]';
$a->strings['%s New mail received at %s'] = '%s Новая почта получена в %s';
$a->strings['%1$s sent you a new private message at %2$s.'] = '%1$s отправил вам новое личное сообщение на %2$s.';
$a->strings['a private message'] = 'личное сообщение';
$a->strings['%1$s sent you %2$s.'] = '%1$s послал вам %2$s.';
$a->strings['Please visit %s to view and/or reply to your private messages.'] = 'Пожалуйста, посетите %s для просмотра и/или ответа на личные сообщения.';
$a->strings['%1$s commented on %2$s\'s %3$s %4$s'] = '%1$s прокомментировал(а) %2$s %3$s %4$s';
$a->strings['%1$s commented on your %2$s %3$s'] = '%1$s прокомментировал(а) ваш %2$s %3$s';
$a->strings['%1$s commented on their %2$s %3$s'] = '%1$s прокомментировал(а) свой %2$s %3$s';
$a->strings['%1$s Comment to conversation #%2$d by %3$s'] = '%1$s Комментариев к разговору #%2$d от %3$s';
$a->strings['%s commented on an item/conversation you have been following.'] = '%s оставил комментарий к элементу/беседе, за которой вы следите.';
$a->strings['Please visit %s to view and/or reply to the conversation.'] = 'Пожалуйста посетите %s для просмотра и/или ответа в беседу.';
$a->strings['%s %s posted to your profile wall'] = '%s %s размещены на стене вашего профиля';
$a->strings['%1$s posted to your profile wall at %2$s'] = '%1$s написал на вашей стене на %2$s';
$a->strings['%1$s posted to [url=%2$s]your wall[/url]'] = '%1$s написал на [url=%2$s]вашей стене[/url]';
$a->strings['%1$s %2$s poked you'] = '%1$s %2$s продвинул тебя';
$a->strings['%1$s poked you at %2$s'] = '%1$s потыкал вас на %2$s';
$a->strings['%1$s [url=%2$s]poked you[/url].'] = '%1$s [url=%2$s]потыкал вас[/url].';
$a->strings['%s Introduction received'] = '%s Входящих получено';
$a->strings['You\'ve received an introduction from \'%1$s\' at %2$s'] = 'Вы получили запрос от \'%1$s\' на %2$s';
$a->strings['You\'ve received [url=%1$s]an introduction[/url] from %2$s.'] = 'Вы получили [url=%1$s]запрос[/url] от %2$s.';
$a->strings['You may visit their profile at %s'] = 'Вы можете посмотреть его профиль здесь %s';
$a->strings['Please visit %s to approve or reject the introduction.'] = 'Посетите %s для подтверждения или отказа запроса.';
$a->strings['%s A new person is sharing with you'] = '%s Новый человек поделился с Вами';
$a->strings['%1$s is sharing with you at %2$s'] = '%1$s делится с вами на %2$s';
$a->strings['%s You have a new follower'] = '%s У Вас новый подписчик';
$a->strings['You have a new follower at %2$s : %1$s'] = 'У вас новый подписчик на %2$s : %1$s';
$a->strings['%s Friend suggestion received'] = '%s Получено дружеское приглашение';
$a->strings['You\'ve received a friend suggestion from \'%1$s\' at %2$s'] = 'Вы получили предложение дружбы от \'%1$s\' на %2$s';
$a->strings['You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.'] = 'У вас [url=%1$s]новое предложение дружбы[/url] для %2$s от %3$s.';
$a->strings['Name:'] = 'Имя:';
$a->strings['Photo:'] = 'Фото:';
$a->strings['Please visit %s to approve or reject the suggestion.'] = 'Пожалуйста, посетите %s для подтверждения, или отказа запроса.';
$a->strings['%s Connection accepted'] = '%s Соединение принято';
$a->strings['\'%1$s\' has accepted your connection request at %2$s'] = '\'%1$s\' принял соединение с вами на %2$s';
$a->strings['%2$s has accepted your [url=%1$s]connection request[/url].'] = '%2$s принял ваше [url=%1$s]предложение о соединении[/url].';
$a->strings['You are now mutual friends and may exchange status updates, photos, and email without restriction.'] = 'Вы теперь взаимные друзья и можете обмениваться статусами, фотографиями и письмами без ограничений.';
$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Посетите %s если вы хотите сделать изменения в этом отношении.';
$a->strings['\'%1$s\' has chosen to accept you a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.'] = '%1$s решил принять приглашение и пометил вас как фаната, что запрещает некоторые формы общения - например, личные сообщения и некоторые действия с профилем. Если эта страница знаменитости или сообщества, то эти настройки были применены автоматически.';
$a->strings['\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.'] = '%1$s может расширить взаимоотношения до более мягких в будущем.';
$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Посетите %s если вы хотите сделать изменения в этом отношении.';
$a->strings['[Friendica System Notify]'] = '[Системное уведомление Friendica]';
$a->strings['registration request'] = 'запрос регистрации';
$a->strings['You\'ve received a registration request from \'%1$s\' at %2$s'] = 'Вы получили запрос на регистрацию от \'%1$s\' на %2$s';
$a->strings['You\'ve received a [url=%1$s]registration request[/url] from %2$s.'] = 'Вы получили [url=%1$s]запрос регистрации[/url] от %2$s.';
$a->strings['Full Name: %s
Site Location: %s
Login Name: %s (%s)'] = 'Полное имя: %s
Расположение: %s
Имя для входа: %s (%s)';
$a->strings['Please visit %s to approve or reject the request.'] = 'Пожалуйста, посетите %s чтобы подтвердить или отвергнуть запрос.';
$a->strings['%s %s tagged you'] = '%s %s отметил(и) Вас';
$a->strings['%s %s shared a new post'] = '%s %s поделился(-ась) новым сообщением';
$a->strings['Permission denied.'] = 'Нет разрешения.'; $a->strings['Permission denied.'] = 'Нет разрешения.';
$a->strings['Access denied.'] = 'Доступ запрещен.'; $a->strings['Access denied.'] = 'Доступ запрещен.';
$a->strings['User not found.'] = 'Пользователь не найден.'; $a->strings['User not found.'] = 'Пользователь не найден.';
@ -362,6 +308,7 @@ $a->strings['{0} wants to be your friend'] = '{0} хочет стать Ваши
$a->strings['{0} requested registration'] = '{0} требуемая регистрация'; $a->strings['{0} requested registration'] = '{0} требуемая регистрация';
$a->strings['Bad Request.'] = 'Ошибочный запрос.'; $a->strings['Bad Request.'] = 'Ошибочный запрос.';
$a->strings['Contact not found.'] = 'Контакт не найден.'; $a->strings['Contact not found.'] = 'Контакт не найден.';
$a->strings['[Friendica System Notify]'] = '[Системное уведомление Friendica]';
$a->strings['User deleted their account'] = 'Пользователь удалил свою учётную запись'; $a->strings['User deleted their account'] = 'Пользователь удалил свою учётную запись';
$a->strings['On your Friendica node an user deleted their account. Please ensure that their data is removed from the backups.'] = 'Пользователь удалил свою учётную запись на вашем сервере Friendica. Пожалуйста, убедитесь, что их данные будут удалены из резервных копий.'; $a->strings['On your Friendica node an user deleted their account. Please ensure that their data is removed from the backups.'] = 'Пользователь удалил свою учётную запись на вашем сервере Friendica. Пожалуйста, убедитесь, что их данные будут удалены из резервных копий.';
$a->strings['The user id is %d'] = 'id пользователя: %d'; $a->strings['The user id is %d'] = 'id пользователя: %d';
@ -521,6 +468,7 @@ $a->strings['You receive a private message'] = 'Вы получаете личн
$a->strings['You receive a friend suggestion'] = 'Вы полулили предложение о добавлении в друзья'; $a->strings['You receive a friend suggestion'] = 'Вы полулили предложение о добавлении в друзья';
$a->strings['You are tagged in a post'] = 'Вы отмечены в записи'; $a->strings['You are tagged in a post'] = 'Вы отмечены в записи';
$a->strings['You are poked/prodded/etc. in a post'] = 'Вас потыкали/подтолкнули/и т.д. в записи'; $a->strings['You are poked/prodded/etc. in a post'] = 'Вас потыкали/подтолкнули/и т.д. в записи';
$a->strings['Someone liked your content'] = 'Ваш комментарий понравился';
$a->strings['Activate desktop notifications'] = 'Активировать уведомления на рабочем столе'; $a->strings['Activate desktop notifications'] = 'Активировать уведомления на рабочем столе';
$a->strings['Show desktop popup on new notifications'] = 'Показывать уведомления на рабочем столе'; $a->strings['Show desktop popup on new notifications'] = 'Показывать уведомления на рабочем столе';
$a->strings['Text-only notification emails'] = 'Только текстовые письма'; $a->strings['Text-only notification emails'] = 'Только текстовые письма';
@ -696,6 +644,7 @@ $a->strings['Display Membership Date'] = 'Показывать дату реги
$a->strings['Display membership date in profile'] = 'Дата вашей регистрации будет отображаться в вашем профиле'; $a->strings['Display membership date in profile'] = 'Дата вашей регистрации будет отображаться в вашем профиле';
$a->strings['Forums'] = 'Форумы'; $a->strings['Forums'] = 'Форумы';
$a->strings['External link to forum'] = 'Внешняя ссылка на форум'; $a->strings['External link to forum'] = 'Внешняя ссылка на форум';
$a->strings['show less'] = 'показать меньше';
$a->strings['show more'] = 'показать больше'; $a->strings['show more'] = 'показать больше';
$a->strings['%1$s poked %2$s'] = '%1$s ткнул %2$s'; $a->strings['%1$s poked %2$s'] = '%1$s ткнул %2$s';
$a->strings['event'] = 'мероприятие'; $a->strings['event'] = 'мероприятие';
@ -723,8 +672,6 @@ $a->strings['Your posts and conversations'] = 'Ваши записи и диал
$a->strings['Profile'] = 'Информация'; $a->strings['Profile'] = 'Информация';
$a->strings['Your profile page'] = 'Информация о вас'; $a->strings['Your profile page'] = 'Информация о вас';
$a->strings['Your photos'] = 'Ваши фотографии'; $a->strings['Your photos'] = 'Ваши фотографии';
$a->strings['Videos'] = 'Видео';
$a->strings['Your videos'] = 'Ваши видео';
$a->strings['Your events'] = 'Ваши события'; $a->strings['Your events'] = 'Ваши события';
$a->strings['Personal notes'] = 'Личные заметки'; $a->strings['Personal notes'] = 'Личные заметки';
$a->strings['Your personal notes'] = 'Ваши личные заметки'; $a->strings['Your personal notes'] = 'Ваши личные заметки';
@ -963,6 +910,9 @@ $a->strings['fingered'] = 'пощупали';
$a->strings['rebuff'] = 'ребаф'; $a->strings['rebuff'] = 'ребаф';
$a->strings['rebuffed'] = 'ребафнут'; $a->strings['rebuffed'] = 'ребафнут';
$a->strings['Friendica can\'t display this page at the moment, please contact the administrator.'] = 'Friendica не может отобразить эту страницу в данный момент, пожалуйста, свяжитесь с администратором.'; $a->strings['Friendica can\'t display this page at the moment, please contact the administrator.'] = 'Friendica не может отобразить эту страницу в данный момент, пожалуйста, свяжитесь с администратором.';
$a->strings['Storage base path'] = 'Корневой каталог хранилища';
$a->strings['Folder where uploaded files are saved. For maximum security, This should be a path outside web server folder tree'] = 'Каталог, куда сохраняются загруженные файлы. Для максимальной безопасности этот каталог должен быть размещён вне каталогов веб-сервера.';
$a->strings['Enter a valid existing folder'] = 'Введите путь к существующему каталогу';
$a->strings['Update %s failed. See error logs.'] = 'Обновление %s не удалось. Смотрите журнал ошибок.'; $a->strings['Update %s failed. See error logs.'] = 'Обновление %s не удалось. Смотрите журнал ошибок.';
$a->strings[' $a->strings['
The friendica developers released update %s recently, The friendica developers released update %s recently,
@ -1021,7 +971,6 @@ $a->strings['Use mailto: in front of address to force email check.'] = 'Bcgjkmpe
$a->strings['The profile address specified belongs to a network which has been disabled on this site.'] = 'Указанный адрес профиля принадлежит сети, недоступной на этом сайта.'; $a->strings['The profile address specified belongs to a network which has been disabled on this site.'] = 'Указанный адрес профиля принадлежит сети, недоступной на этом сайта.';
$a->strings['Limited profile. This person will be unable to receive direct/personal notifications from you.'] = 'Ограниченный профиль. Этот человек не сможет получить прямые / личные уведомления от вас.'; $a->strings['Limited profile. This person will be unable to receive direct/personal notifications from you.'] = 'Ограниченный профиль. Этот человек не сможет получить прямые / личные уведомления от вас.';
$a->strings['Unable to retrieve contact information.'] = 'Невозможно получить контактную информацию.'; $a->strings['Unable to retrieve contact information.'] = 'Невозможно получить контактную информацию.';
$a->strings['l F d, Y \@ g:i A'] = 'l F d, Y \@ g:i A';
$a->strings['Starts:'] = 'Начало:'; $a->strings['Starts:'] = 'Начало:';
$a->strings['Finishes:'] = 'Окончание:'; $a->strings['Finishes:'] = 'Окончание:';
$a->strings['all-day'] = 'Весь день'; $a->strings['all-day'] = 'Весь день';
@ -1031,6 +980,7 @@ $a->strings['l, F j'] = 'l, j F';
$a->strings['Edit event'] = 'Редактировать мероприятие'; $a->strings['Edit event'] = 'Редактировать мероприятие';
$a->strings['Duplicate event'] = 'Дубликат события'; $a->strings['Duplicate event'] = 'Дубликат события';
$a->strings['Delete event'] = 'Удалить событие'; $a->strings['Delete event'] = 'Удалить событие';
$a->strings['l F d, Y \@ g:i A'] = 'l F d, Y \@ g:i A';
$a->strings['D g:i A'] = 'D g:i A'; $a->strings['D g:i A'] = 'D g:i A';
$a->strings['g:i A'] = 'g:i A'; $a->strings['g:i A'] = 'g:i A';
$a->strings['Show map'] = 'Показать карту'; $a->strings['Show map'] = 'Показать карту';
@ -1068,9 +1018,26 @@ $a->strings['[No description]'] = '[без описания]';
$a->strings['Event Reminders'] = 'Напоминания о мероприятиях'; $a->strings['Event Reminders'] = 'Напоминания о мероприятиях';
$a->strings['Upcoming events the next 7 days:'] = 'События на ближайшие 7 дней:'; $a->strings['Upcoming events the next 7 days:'] = 'События на ближайшие 7 дней:';
$a->strings['OpenWebAuth: %1$s welcomes %2$s'] = 'OpenWebAuth: %1$s приветствует %2$s'; $a->strings['OpenWebAuth: %1$s welcomes %2$s'] = 'OpenWebAuth: %1$s приветствует %2$s';
$a->strings['Storage base path'] = 'Корневой каталог хранилища'; $a->strings['Hometown:'] = 'Родной город:';
$a->strings['Folder where uploaded files are saved. For maximum security, This should be a path outside web server folder tree'] = 'Каталог, куда сохраняются загруженные файлы. Для максимальной безопасности этот каталог должен быть размещён вне каталогов веб-сервера.'; $a->strings['Marital Status:'] = 'Семейное положение:';
$a->strings['Enter a valid existing folder'] = 'Введите путь к существующему каталогу'; $a->strings['With:'] = 'Вместе:';
$a->strings['Since:'] = 'С:';
$a->strings['Sexual Preference:'] = 'Сексуальные предпочтения:';
$a->strings['Political Views:'] = 'Политические взгляды:';
$a->strings['Religious Views:'] = 'Религиозные взгляды:';
$a->strings['Likes:'] = 'Нравится:';
$a->strings['Dislikes:'] = 'Не нравится:';
$a->strings['Title/Description:'] = 'Заголовок / Описание:';
$a->strings['Summary'] = 'Резюме';
$a->strings['Musical interests'] = 'Музыкальные интересы';
$a->strings['Books, literature'] = 'Книги, литература';
$a->strings['Television'] = 'Телевидение';
$a->strings['Film/dance/culture/entertainment'] = 'Кино / танцы / культура / развлечения';
$a->strings['Hobbies/Interests'] = 'Хобби / Интересы';
$a->strings['Love/romance'] = 'Любовь / романтика';
$a->strings['Work/employment'] = 'Работа / занятость';
$a->strings['School/education'] = 'Школа / образование';
$a->strings['Contact information and Social Networks'] = 'Контактная информация и социальные сети';
$a->strings['SERIOUS ERROR: Generation of security keys failed.'] = 'СЕРЬЕЗНАЯ ОШИБКА: генерация ключей безопасности не удалась.'; $a->strings['SERIOUS ERROR: Generation of security keys failed.'] = 'СЕРЬЕЗНАЯ ОШИБКА: генерация ключей безопасности не удалась.';
$a->strings['Login failed'] = 'Вход не удался'; $a->strings['Login failed'] = 'Вход не удался';
$a->strings['Not enough information to authenticate'] = 'Недостаточно информации для входа'; $a->strings['Not enough information to authenticate'] = 'Недостаточно информации для входа';
@ -1110,6 +1077,7 @@ $a->strings['An error occurred creating your default profile. Please try again.'
$a->strings['An error occurred creating your self contact. Please try again.'] = 'При создании вашего контакта возникла проблема. Пожалуйста, попробуйте ещё раз.'; $a->strings['An error occurred creating your self contact. Please try again.'] = 'При создании вашего контакта возникла проблема. Пожалуйста, попробуйте ещё раз.';
$a->strings['Friends'] = 'Друзья'; $a->strings['Friends'] = 'Друзья';
$a->strings['An error occurred creating your default contact group. Please try again.'] = 'При создании группы контактов по-умолчанию возникла ошибка. Пожалуйста, попробуйте ещё раз.'; $a->strings['An error occurred creating your default contact group. Please try again.'] = 'При создании группы контактов по-умолчанию возникла ошибка. Пожалуйста, попробуйте ещё раз.';
$a->strings['Profile Photos'] = 'Фотографии профиля';
$a->strings[' $a->strings['
Dear %1$s, Dear %1$s,
the administrator of %2$s has set up an account for you.'] = ' the administrator of %2$s has set up an account for you.'] = '
@ -1542,7 +1510,6 @@ $a->strings['Blog Account'] = 'Аккаунт блога';
$a->strings['Private Forum Account'] = 'Закрытый форум'; $a->strings['Private Forum Account'] = 'Закрытый форум';
$a->strings['Message queues'] = 'Очереди сообщений'; $a->strings['Message queues'] = 'Очереди сообщений';
$a->strings['Server Settings'] = 'Настройки сервера'; $a->strings['Server Settings'] = 'Настройки сервера';
$a->strings['Summary'] = 'Резюме';
$a->strings['Registered users'] = 'Зарегистрированные пользователи'; $a->strings['Registered users'] = 'Зарегистрированные пользователи';
$a->strings['Pending registrations'] = 'Ожидающие регистрации'; $a->strings['Pending registrations'] = 'Ожидающие регистрации';
$a->strings['Version'] = 'Версия'; $a->strings['Version'] = 'Версия';
@ -2223,6 +2190,58 @@ $a->strings['%1$s shared the post %2$s from %3$s'] = '%1$s поделился з
$a->strings['%1$s shared a post from %3$s'] = '%1$s поделился записью от %3$s'; $a->strings['%1$s shared a post from %3$s'] = '%1$s поделился записью от %3$s';
$a->strings['%1$s shared the post %2$s'] = '%1$s поделился записью %2$s'; $a->strings['%1$s shared the post %2$s'] = '%1$s поделился записью %2$s';
$a->strings['%1$s shared a post'] = '%1$s поделился записью'; $a->strings['%1$s shared a post'] = '%1$s поделился записью';
$a->strings['[Friendica:Notify]'] = '[Friendica]';
$a->strings['%s New mail received at %s'] = '%s Новая почта получена в %s';
$a->strings['%1$s sent you a new private message at %2$s.'] = '%1$s отправил вам новое личное сообщение на %2$s.';
$a->strings['a private message'] = 'личное сообщение';
$a->strings['%1$s sent you %2$s.'] = '%1$s послал вам %2$s.';
$a->strings['Please visit %s to view and/or reply to your private messages.'] = 'Пожалуйста, посетите %s для просмотра и/или ответа на личные сообщения.';
$a->strings['%1$s commented on %2$s\'s %3$s %4$s'] = '%1$s прокомментировал(а) %2$s %3$s %4$s';
$a->strings['%1$s commented on your %2$s %3$s'] = '%1$s прокомментировал(а) ваш %2$s %3$s';
$a->strings['%1$s commented on their %2$s %3$s'] = '%1$s прокомментировал(а) свой %2$s %3$s';
$a->strings['%1$s Comment to conversation #%2$d by %3$s'] = '%1$s Комментариев к разговору #%2$d от %3$s';
$a->strings['%s commented on an item/conversation you have been following.'] = '%s оставил комментарий к элементу/беседе, за которой вы следите.';
$a->strings['Please visit %s to view and/or reply to the conversation.'] = 'Пожалуйста посетите %s для просмотра и/или ответа в беседу.';
$a->strings['%s %s posted to your profile wall'] = '%s %s размещены на стене вашего профиля';
$a->strings['%1$s posted to your profile wall at %2$s'] = '%1$s написал на вашей стене на %2$s';
$a->strings['%1$s posted to [url=%2$s]your wall[/url]'] = '%1$s написал на [url=%2$s]вашей стене[/url]';
$a->strings['%1$s %2$s poked you'] = '%1$s %2$s продвинул тебя';
$a->strings['%1$s poked you at %2$s'] = '%1$s потыкал вас на %2$s';
$a->strings['%1$s [url=%2$s]poked you[/url].'] = '%1$s [url=%2$s]потыкал вас[/url].';
$a->strings['%s Introduction received'] = '%s Входящих получено';
$a->strings['You\'ve received an introduction from \'%1$s\' at %2$s'] = 'Вы получили запрос от \'%1$s\' на %2$s';
$a->strings['You\'ve received [url=%1$s]an introduction[/url] from %2$s.'] = 'Вы получили [url=%1$s]запрос[/url] от %2$s.';
$a->strings['You may visit their profile at %s'] = 'Вы можете посмотреть его профиль здесь %s';
$a->strings['Please visit %s to approve or reject the introduction.'] = 'Посетите %s для подтверждения или отказа запроса.';
$a->strings['%s A new person is sharing with you'] = '%s Новый человек поделился с Вами';
$a->strings['%1$s is sharing with you at %2$s'] = '%1$s делится с вами на %2$s';
$a->strings['%s You have a new follower'] = '%s У Вас новый подписчик';
$a->strings['You have a new follower at %2$s : %1$s'] = 'У вас новый подписчик на %2$s : %1$s';
$a->strings['%s Friend suggestion received'] = '%s Получено дружеское приглашение';
$a->strings['You\'ve received a friend suggestion from \'%1$s\' at %2$s'] = 'Вы получили предложение дружбы от \'%1$s\' на %2$s';
$a->strings['You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.'] = 'У вас [url=%1$s]новое предложение дружбы[/url] для %2$s от %3$s.';
$a->strings['Name:'] = 'Имя:';
$a->strings['Photo:'] = 'Фото:';
$a->strings['Please visit %s to approve or reject the suggestion.'] = 'Пожалуйста, посетите %s для подтверждения, или отказа запроса.';
$a->strings['%s Connection accepted'] = '%s Соединение принято';
$a->strings['\'%1$s\' has accepted your connection request at %2$s'] = '\'%1$s\' принял соединение с вами на %2$s';
$a->strings['%2$s has accepted your [url=%1$s]connection request[/url].'] = '%2$s принял ваше [url=%1$s]предложение о соединении[/url].';
$a->strings['You are now mutual friends and may exchange status updates, photos, and email without restriction.'] = 'Вы теперь взаимные друзья и можете обмениваться статусами, фотографиями и письмами без ограничений.';
$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Посетите %s если вы хотите сделать изменения в этом отношении.';
$a->strings['\'%1$s\' has chosen to accept you a fan, which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.'] = '%1$s решил принять приглашение и пометил вас как фаната, что запрещает некоторые формы общения - например, личные сообщения и некоторые действия с профилем. Если эта страница знаменитости или сообщества, то эти настройки были применены автоматически.';
$a->strings['\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future.'] = '%1$s может расширить взаимоотношения до более мягких в будущем.';
$a->strings['Please visit %s if you wish to make any changes to this relationship.'] = 'Посетите %s если вы хотите сделать изменения в этом отношении.';
$a->strings['registration request'] = 'запрос регистрации';
$a->strings['You\'ve received a registration request from \'%1$s\' at %2$s'] = 'Вы получили запрос на регистрацию от \'%1$s\' на %2$s';
$a->strings['You\'ve received a [url=%1$s]registration request[/url] from %2$s.'] = 'Вы получили [url=%1$s]запрос регистрации[/url] от %2$s.';
$a->strings['Full Name: %s
Site Location: %s
Login Name: %s (%s)'] = 'Полное имя: %s
Расположение: %s
Имя для входа: %s (%s)';
$a->strings['Please visit %s to approve or reject the request.'] = 'Пожалуйста, посетите %s чтобы подтвердить или отвергнуть запрос.';
$a->strings['%s %s tagged you'] = '%s %s отметил(и) Вас';
$a->strings['%s %s shared a new post'] = '%s %s поделился(-ась) новым сообщением';
$a->strings['This message was sent to you by %s, a member of the Friendica social network.'] = 'Это сообщение было отправлено вам %s, участником социальной сети Friendica.'; $a->strings['This message was sent to you by %s, a member of the Friendica social network.'] = 'Это сообщение было отправлено вам %s, участником социальной сети Friendica.';
$a->strings['You may visit them online at %s'] = 'Вы можете посетить их в онлайне на %s'; $a->strings['You may visit them online at %s'] = 'Вы можете посетить их в онлайне на %s';
$a->strings['Please contact the sender by replying to this post if you do not wish to receive these messages.'] = 'Пожалуйста, свяжитесь с отправителем, ответив на это сообщение, если вы не хотите получать эти сообщения.'; $a->strings['Please contact the sender by replying to this post if you do not wish to receive these messages.'] = 'Пожалуйста, свяжитесь с отправителем, ответив на это сообщение, если вы не хотите получать эти сообщения.';
@ -2281,25 +2300,6 @@ $a->strings['%s is now following %s.'] = '%s теперь подписан на
$a->strings['following'] = 'следует'; $a->strings['following'] = 'следует';
$a->strings['%s stopped following %s.'] = '%s отписался от %s.'; $a->strings['%s stopped following %s.'] = '%s отписался от %s.';
$a->strings['stopped following'] = 'отписка от'; $a->strings['stopped following'] = 'отписка от';
$a->strings['Hometown:'] = 'Родной город:';
$a->strings['Marital Status:'] = 'Семейное положение:';
$a->strings['With:'] = 'Вместе:';
$a->strings['Since:'] = 'С:';
$a->strings['Sexual Preference:'] = 'Сексуальные предпочтения:';
$a->strings['Political Views:'] = 'Политические взгляды:';
$a->strings['Religious Views:'] = 'Религиозные взгляды:';
$a->strings['Likes:'] = 'Нравится:';
$a->strings['Dislikes:'] = 'Не нравится:';
$a->strings['Title/Description:'] = 'Заголовок / Описание:';
$a->strings['Musical interests'] = 'Музыкальные интересы';
$a->strings['Books, literature'] = 'Книги, литература';
$a->strings['Television'] = 'Телевидение';
$a->strings['Film/dance/culture/entertainment'] = 'Кино / танцы / культура / развлечения';
$a->strings['Hobbies/Interests'] = 'Хобби / Интересы';
$a->strings['Love/romance'] = 'Любовь / романтика';
$a->strings['Work/employment'] = 'Работа / занятость';
$a->strings['School/education'] = 'Школа / образование';
$a->strings['Contact information and Social Networks'] = 'Контактная информация и социальные сети';
$a->strings['Login failed.'] = 'Войти не удалось.'; $a->strings['Login failed.'] = 'Войти не удалось.';
$a->strings['Login failed. Please check your credentials.'] = 'Ошибка входа. Пожалуйста, проверьте данные для входа.'; $a->strings['Login failed. Please check your credentials.'] = 'Ошибка входа. Пожалуйста, проверьте данные для входа.';
$a->strings['Welcome %s'] = 'Добро пожаловать, %s'; $a->strings['Welcome %s'] = 'Добро пожаловать, %s';