This commit is contained in:
lalka2016 2023-08-12 14:42:21 +03:00
parent f7ed085314
commit 076309eec6
14 changed files with 274 additions and 76 deletions

View file

@ -224,7 +224,7 @@ class Club extends RowModel
"shape" => "spline", "shape" => "spline",
"color" => "#597da3", "color" => "#597da3",
], ],
"name" => $unique ? "Полный охват" : "Все просмотры", "name" => $unique ? tr("full_coverage") : tr("all_views"),
], ],
"subs" => [ "subs" => [
"x" => array_reverse(range(1, 7)), "x" => array_reverse(range(1, 7)),
@ -235,7 +235,7 @@ class Club extends RowModel
"color" => "#b05c91", "color" => "#b05c91",
], ],
"fill" => "tozeroy", "fill" => "tozeroy",
"name" => $unique ? "Охват подписчиков" : "Просмотры подписчиков", "name" => $unique ? tr("subs_coverage") : tr("subs_views"),
], ],
"viral" => [ "viral" => [
"x" => array_reverse(range(1, 7)), "x" => array_reverse(range(1, 7)),
@ -246,7 +246,7 @@ class Club extends RowModel
"color" => "#4d9fab", "color" => "#4d9fab",
], ],
"fill" => "tozeroy", "fill" => "tozeroy",
"name" => $unique ? "Виральный охват" : "Виральные просмотры", "name" => $unique ? tr("viral_coverage") : tr("viral_views"),
], ],
]; ];
} }

View file

@ -283,7 +283,7 @@ final class AdminPresenter extends OpenVKPresenter
$this->notFound(); $this->notFound();
$gift->delete(); $gift->delete();
$this->flashFail("succ", "Gift moved successfully", "This gift will now be in <b>Recycle Bin</b>."); $this->flashFail("succ", tr("admin_gift_moved_successfully"), tr("admin_gift_moved_to_recycle"));
break; break;
case "copy": case "copy":
case "move": case "move":
@ -302,7 +302,7 @@ final class AdminPresenter extends OpenVKPresenter
$catTo->addGift($gift); $catTo->addGift($gift);
$name = $catTo->getName(); $name = $catTo->getName();
$this->flash("succ", "Gift moved successfully", "This gift will now be in <b>$name</b>."); $this->flash("succ", tr("admin_gift_moved_successfully"), "This gift will now be in <b>$name</b>.");
$this->redirect("/admin/gifts/" . $catTo->getSlug() . "." . $catTo->getId() . "/"); $this->redirect("/admin/gifts/" . $catTo->getSlug() . "." . $catTo->getId() . "/");
break; break;
default: default:
@ -333,10 +333,10 @@ final class AdminPresenter extends OpenVKPresenter
$gift->setUsages((int) $this->postParam("usages")); $gift->setUsages((int) $this->postParam("usages"));
if(isset($_FILES["pic"]) && $_FILES["pic"]["error"] === UPLOAD_ERR_OK) { if(isset($_FILES["pic"]) && $_FILES["pic"]["error"] === UPLOAD_ERR_OK) {
if(!$gift->setImage($_FILES["pic"]["tmp_name"])) if(!$gift->setImage($_FILES["pic"]["tmp_name"]))
$this->flashFail("err", "Не удалось сохранить подарок", "Изображение подарка кривое."); $this->flashFail("err", tr("error_when_saving_gift"), tr("error_when_saving_gift_bad_image"));
} else if($gen) { } else if($gen) {
# If there's no gift pic but it's newly created # If there's no gift pic but it's newly created
$this->flashFail("err", "Не удалось сохранить подарок", "Пожалуйста, загрузите изображение подарка."); $this->flashFail("err", tr("error_when_saving_gift"), tr("error_when_saving_gift_no_image"));
} }
$gift->save(); $gift->save();

View file

@ -55,7 +55,7 @@ final class CommentPresenter extends OpenVKPresenter
$this->flashFail("err", tr("error"), tr("forbidden")); $this->flashFail("err", tr("error"), tr("forbidden"));
if($_FILES["_vid_attachment"] && OPENVK_ROOT_CONF['openvk']['preferences']['videos']['disableUploading']) if($_FILES["_vid_attachment"] && OPENVK_ROOT_CONF['openvk']['preferences']['videos']['disableUploading'])
$this->flashFail("err", tr("error"), "Video uploads are disabled by the system administrator."); $this->flashFail("err", tr("error"), tr("video_uploads_disabled"));
$flags = 0; $flags = 0;
if($this->postParam("as_group") === "on" && !is_null($club) && $club->canBeModifiedBy($this->user->identity)) if($this->postParam("as_group") === "on" && !is_null($club) && $club->canBeModifiedBy($this->user->identity))
@ -66,7 +66,7 @@ final class CommentPresenter extends OpenVKPresenter
try { try {
$photo = Photo::fastMake($this->user->id, $this->postParam("text"), $_FILES["_pic_attachment"]); $photo = Photo::fastMake($this->user->id, $this->postParam("text"), $_FILES["_pic_attachment"]);
} catch(ISE $ex) { } catch(ISE $ex) {
$this->flashFail("err", "Не удалось опубликовать пост", "Файл изображения повреждён, слишком велик или одна сторона изображения в разы больше другой."); $this->flashFail("err", tr("error_when_publishing_comment"), tr("error_when_publishing_comment_description"));
} }
} }
@ -86,11 +86,11 @@ final class CommentPresenter extends OpenVKPresenter
$video = Video::fastMake($this->user->id, $_FILES["_vid_attachment"]["name"], $this->postParam("text"), $_FILES["_vid_attachment"]); $video = Video::fastMake($this->user->id, $_FILES["_vid_attachment"]["name"], $this->postParam("text"), $_FILES["_vid_attachment"]);
} }
} catch(ISE $ex) { } catch(ISE $ex) {
$this->flashFail("err", "Не удалось опубликовать комментарий", "Файл медиаконтента повреждён или слишком велик."); $this->flashFail("err", tr("error_when_publishing_comment"), tr("error_comment_file_too_big"));
} }
if(empty($this->postParam("text")) && !$photo && !$video) if(empty($this->postParam("text")) && !$photo && !$video)
$this->flashFail("err", "Не удалось опубликовать комментарий", "Комментарий пустой или слишком большой."); $this->flashFail("err", tr("error_when_publishing_comment"), tr("error_comment_empty"));
try { try {
$comment = new Comment; $comment = new Comment;
@ -102,7 +102,7 @@ final class CommentPresenter extends OpenVKPresenter
$comment->setFlags($flags); $comment->setFlags($flags);
$comment->save(); $comment->save();
} catch (\LengthException $ex) { } catch (\LengthException $ex) {
$this->flashFail("err", "Не удалось опубликовать комментарий", "Комментарий слишком большой."); $this->flashFail("err", tr("error_when_publishing_comment"), tr("error_comment_too_big"));
} }
if(!is_null($photo)) if(!is_null($photo))
@ -124,7 +124,7 @@ final class CommentPresenter extends OpenVKPresenter
if($mentionee instanceof User) if($mentionee instanceof User)
(new MentionNotification($mentionee, $entity, $comment->getOwner(), strip_tags($comment->getText())))->emit(); (new MentionNotification($mentionee, $entity, $comment->getOwner(), strip_tags($comment->getText())))->emit();
$this->flashFail("succ", "Комментарий добавлен", "Ваш комментарий появится на странице."); $this->flashFail("succ", tr("comment_is_added"), tr("comment_is_added_desc"));
} }
function renderDeleteComment(int $id): void function renderDeleteComment(int $id): void
@ -135,15 +135,15 @@ final class CommentPresenter extends OpenVKPresenter
$comment = (new Comments)->get($id); $comment = (new Comments)->get($id);
if(!$comment) $this->notFound(); if(!$comment) $this->notFound();
if(!$comment->canBeDeletedBy($this->user->identity)) if(!$comment->canBeDeletedBy($this->user->identity))
$this->throwError(403, "Forbidden", "У вас недостаточно прав чтобы редактировать этот ресурс."); $this->throwError(403, "Forbidden", tr("error_access_denied"));
if ($comment->getTarget() instanceof Post && $comment->getTarget()->getWallOwner()->isBanned()) if ($comment->getTarget() instanceof Post && $comment->getTarget()->getWallOwner()->isBanned())
$this->flashFail("err", tr("error"), tr("forbidden")); $this->flashFail("err", tr("error"), tr("forbidden"));
$comment->delete(); $comment->delete();
$this->flashFail( $this->flashFail(
"succ", "succ",
"Успешно", tr("success"),
"Этот комментарий больше не будет показыватся.<br/><a href='/al_comments/spam?$id'>Отметить как спам</a>?" tr("comment_will_not_appear")
); );
} }
} }

View file

@ -49,7 +49,7 @@ final class GiftsPresenter extends OpenVKPresenter
$user = $this->users->get((int) ($this->queryParam("user") ?? 0)); $user = $this->users->get((int) ($this->queryParam("user") ?? 0));
$cat = $this->gifts->getCat((int) ($this->queryParam("pack") ?? 0)); $cat = $this->gifts->getCat((int) ($this->queryParam("pack") ?? 0));
if(!$user || !$cat) if(!$user || !$cat)
$this->flashFail("err", "Не удалось подарить", "Пользователь или набор не существуют."); $this->flashFail("err", tr("error_when_gifting"), tr("error_user_not_exists"));
$this->template->page = $page = (int) ($this->queryParam("p") ?? 1); $this->template->page = $page = (int) ($this->queryParam("p") ?? 1);
$gifts = $cat->getGifts($page, null, $this->template->count); $gifts = $cat->getGifts($page, null, $this->template->count);
@ -66,14 +66,14 @@ final class GiftsPresenter extends OpenVKPresenter
$gift = $this->gifts->get((int) ($this->queryParam("elid") ?? 0)); $gift = $this->gifts->get((int) ($this->queryParam("elid") ?? 0));
$cat = $this->gifts->getCat((int) ($this->queryParam("pack") ?? 0)); $cat = $this->gifts->getCat((int) ($this->queryParam("pack") ?? 0));
if(!$user || !$cat || !$gift || !$cat->hasGift($gift)) if(!$user || !$cat || !$gift || !$cat->hasGift($gift))
$this->flashFail("err", "Не удалось подарить", "Не удалось подтвердить права на подарок."); $this->flashFail("err", tr("error_when_gifting"), tr("error_no_rights_gifts"));
if(!$gift->canUse($this->user->identity)) if(!$gift->canUse($this->user->identity))
$this->flashFail("err", "Не удалось подарить", "У вас больше не осталось таких подарков."); $this->flashFail("err", tr("error_when_gifting"), tr("error_no_more_gifts"));
$coinsLeft = $this->user->identity->getCoins() - $gift->getPrice(); $coinsLeft = $this->user->identity->getCoins() - $gift->getPrice();
if($coinsLeft < 0) if($coinsLeft < 0)
$this->flashFail("err", "Не удалось подарить", "Ору нищ не пук."); $this->flashFail("err", tr("error_when_gifting"), tr("error_no_money"));
$this->template->_template = "Gifts/Confirm.xml"; $this->template->_template = "Gifts/Confirm.xml";
if($_SERVER["REQUEST_METHOD"] !== "POST") { if($_SERVER["REQUEST_METHOD"] !== "POST") {
@ -91,7 +91,7 @@ final class GiftsPresenter extends OpenVKPresenter
$user->gift($this->user->identity, $gift, $comment, !is_null($this->postParam("anonymous"))); $user->gift($this->user->identity, $gift, $comment, !is_null($this->postParam("anonymous")));
$gift->used(); $gift->used();
$this->flash("succ", "Подарок отправлен", "Вы отправили подарок <b>" . $user->getFirstName() . "</b> за " . $gift->getPrice() . " голосов."); $this->flash("succ", tr("gift_sent"), tr("gift_sent_desc", $user->getFirstName(), $gift->getPrice()));
$this->redirect($user->getURL()); $this->redirect($user->getURL());
} }

View file

@ -54,7 +54,7 @@ final class GroupPresenter extends OpenVKPresenter
$club->save(); $club->save();
} catch(\PDOException $ex) { } catch(\PDOException $ex) {
if($ex->getCode() == 23000) if($ex->getCode() == 23000)
$this->flashFail("err", "Ошибка", "Произошла ошибка на стороне сервера. Обратитесь к системному администратору."); $this->flashFail("err", tr("error"), tr("error_on_server_side"));
else else
throw $ex; throw $ex;
} }
@ -62,7 +62,7 @@ final class GroupPresenter extends OpenVKPresenter
$club->toggleSubscription($this->user->identity); $club->toggleSubscription($this->user->identity);
$this->redirect("/club" . $club->getId()); $this->redirect("/club" . $club->getId());
}else{ }else{
$this->flashFail("err", "Ошибка", "Вы не ввели название группы."); $this->flashFail("err", tr("error"), tr("error_no_group_name"));
} }
} }
} }
@ -132,7 +132,7 @@ final class GroupPresenter extends OpenVKPresenter
$this->notFound(); $this->notFound();
if(!$club->canBeModifiedBy($this->user->identity ?? NULL)) if(!$club->canBeModifiedBy($this->user->identity ?? NULL))
$this->flashFail("err", "Ошибка доступа", "У вас недостаточно прав, чтобы изменять этот ресурс."); $this->flashFail("err", tr("error_access_denied_short"), tr("error_access_denied"));
if(!is_null($hidden)) { if(!is_null($hidden)) {
if($club->getOwner()->getId() == $user->getId()) { if($club->getOwner()->getId() == $user->getId()) {
@ -150,9 +150,9 @@ final class GroupPresenter extends OpenVKPresenter
} }
if($hidden) { if($hidden) {
$this->flashFail("succ", "Операция успешна", "Теперь " . $user->getCanonicalName() . " будет показываться как обычный подписчик всем кроме других администраторов"); $this->flashFail("succ", tr("success_action"), tr("x_is_now_hidden", $user->getCanonicalName()));
} else { } else {
$this->flashFail("succ", "Операция успешна", "Теперь все будут знать про то что " . $user->getCanonicalName() . " - администратор"); $this->flashFail("succ", tr("success_action"), tr("x_is_now_showed", $user->getCanonicalName()));
} }
} elseif($removeComment) { } elseif($removeComment) {
if($club->getOwner()->getId() == $user->getId()) { if($club->getOwner()->getId() == $user->getId()) {
@ -164,11 +164,11 @@ final class GroupPresenter extends OpenVKPresenter
$manager->save(); $manager->save();
} }
$this->flashFail("succ", "Операция успешна", "Комментарий к администратору удален"); $this->flashFail("succ", tr("success_action"), tr("comment_is_deleted"));
} elseif($comment) { } elseif($comment) {
if(mb_strlen($comment) > 36) { if(mb_strlen($comment) > 36) {
$commentLength = (string) mb_strlen($comment); $commentLength = (string) mb_strlen($comment);
$this->flashFail("err", "Ошибка", "Комментарий слишком длинный ($commentLength символов вместо 36 символов)"); $this->flashFail("err", tr("error"), tr("comment_is_too_long", $commentLength));
} }
if($club->getOwner()->getId() == $user->getId()) { if($club->getOwner()->getId() == $user->getId()) {
@ -180,16 +180,16 @@ final class GroupPresenter extends OpenVKPresenter
$manager->save(); $manager->save();
} }
$this->flashFail("succ", "Операция успешна", "Комментарий к администратору изменён"); $this->flashFail("succ", tr("success_action"), tr("comment_is_changed"));
}else{ }else{
if($club->canBeModifiedBy($user)) { if($club->canBeModifiedBy($user)) {
$club->removeManager($user); $club->removeManager($user);
$this->flashFail("succ", "Операция успешна", $user->getCanonicalName() . " более не администратор."); $this->flashFail("succ", tr("success_action"), tr("x_no_more_admin", $user->getCanonicalName()));
} else { } else {
$club->addManager($user); $club->addManager($user);
(new ClubModeratorNotification($user, $club, $this->user->identity))->emit(); (new ClubModeratorNotification($user, $club, $this->user->identity))->emit();
$this->flashFail("succ", "Операция успешна", $user->getCanonicalName() . " назначен(а) администратором."); $this->flashFail("succ", tr("success_action"), tr("x_is_admin", $user->getCanonicalName()));
} }
} }
@ -245,7 +245,7 @@ final class GroupPresenter extends OpenVKPresenter
(new Albums)->getClubAvatarAlbum($club)->addPhoto($photo); (new Albums)->getClubAvatarAlbum($club)->addPhoto($photo);
} catch(ISE $ex) { } catch(ISE $ex) {
$name = $album->getName(); $name = $album->getName();
$this->flashFail("err", "Неизвестная ошибка", "Не удалось сохранить фотографию."); $this->flashFail("err", tr("error"), tr("error_when_uploading_photo"));
} }
} }
@ -253,12 +253,12 @@ final class GroupPresenter extends OpenVKPresenter
$club->save(); $club->save();
} catch(\PDOException $ex) { } catch(\PDOException $ex) {
if($ex->getCode() == 23000) if($ex->getCode() == 23000)
$this->flashFail("err", "Ошибка", "Произошла ошибка на стороне сервера. Обратитесь к системному администратору."); $this->flashFail("err", tr("error"), tr("error_on_server_side"));
else else
throw $ex; throw $ex;
} }
$this->flash("succ", "Изменения сохранены", "Новые данные появятся в вашей группе."); $this->flash("succ", tr("changes_saved"), tr("new_changes_desc"));
} }
} }
@ -298,7 +298,7 @@ final class GroupPresenter extends OpenVKPresenter
} catch(ISE $ex) { } catch(ISE $ex) {
$name = $album->getName(); $name = $album->getName();
$this->flashFail("err", "Неизвестная ошибка", "Не удалось сохранить фотографию."); $this->flashFail("err", tr("error"), tr("error_when_uploading_photo"));
} }
} }
$this->returnJson([ $this->returnJson([
@ -350,7 +350,7 @@ final class GroupPresenter extends OpenVKPresenter
$this->assertUserLoggedIn(); $this->assertUserLoggedIn();
if(!eventdb()) if(!eventdb())
$this->flashFail("err", "Ошибка подключения", "Не удалось подключится к службе телеметрии."); $this->flashFail("err", tr("connection_error"), tr("connection_error_desc"));
$club = $this->clubs->get($id); $club = $this->clubs->get($id);
if(!$club->canBeModifiedBy($this->user->identity)) if(!$club->canBeModifiedBy($this->user->identity))

View file

@ -107,7 +107,7 @@ final class NotesPresenter extends OpenVKPresenter
if(!$note || $note->getOwner()->getId() !== $owner || $note->isDeleted()) if(!$note || $note->getOwner()->getId() !== $owner || $note->isDeleted())
$this->notFound(); $this->notFound();
if(is_null($this->user) || !$note->canBeModifiedBy($this->user->identity)) if(is_null($this->user) || !$note->canBeModifiedBy($this->user->identity))
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); $this->flashFail("err", tr("error_access_denied_short"), tr("error_access_denied"));
$this->template->note = $note; $this->template->note = $note;
if($_SERVER["REQUEST_METHOD"] === "POST") { if($_SERVER["REQUEST_METHOD"] === "POST") {
@ -135,11 +135,11 @@ final class NotesPresenter extends OpenVKPresenter
if(!$note) $this->notFound(); if(!$note) $this->notFound();
if($note->getOwner()->getId() . "_" . $note->getId() !== $owner . "_" . $id || $note->isDeleted()) $this->notFound(); if($note->getOwner()->getId() . "_" . $note->getId() !== $owner . "_" . $id || $note->isDeleted()) $this->notFound();
if(is_null($this->user) || !$note->canBeModifiedBy($this->user->identity)) if(is_null($this->user) || !$note->canBeModifiedBy($this->user->identity))
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); $this->flashFail("err", tr("error_access_denied_short"), tr("error_access_denied"));
$name = $note->getName(); $name = $note->getName();
$note->delete(); $note->delete();
$this->flash("succ", "Заметка удалена", "Заметка \"$name\" была успешно удалена."); $this->flash("succ", tr("note_is_deleted"), tr("note_x_is_now_deleted", $name));
$this->redirect("/notes" . $this->user->id); $this->redirect("/notes" . $this->user->id);
} }
} }

View file

@ -94,7 +94,7 @@ final class PhotosPresenter extends OpenVKPresenter
if(!$album) $this->notFound(); if(!$album) $this->notFound();
if($album->getPrettyId() !== $owner . "_" . $id || $album->isDeleted()) $this->notFound(); if($album->getPrettyId() !== $owner . "_" . $id || $album->isDeleted()) $this->notFound();
if(is_null($this->user) || !$album->canBeModifiedBy($this->user->identity) || $album->isDeleted()) if(is_null($this->user) || !$album->canBeModifiedBy($this->user->identity) || $album->isDeleted())
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); $this->flashFail("err", tr("error_access_denied_short"), tr("error_access_denied"));
$this->template->album = $album; $this->template->album = $album;
if($_SERVER["REQUEST_METHOD"] === "POST") { if($_SERVER["REQUEST_METHOD"] === "POST") {
@ -106,7 +106,7 @@ final class PhotosPresenter extends OpenVKPresenter
$album->setEdited(time()); $album->setEdited(time());
$album->save(); $album->save();
$this->flash("succ", "Изменения сохранены", "Новые данные приняты."); $this->flash("succ", tr("changes_saved"), tr("new_data_accepted"));
} }
} }
@ -120,13 +120,13 @@ final class PhotosPresenter extends OpenVKPresenter
if(!$album) $this->notFound(); if(!$album) $this->notFound();
if($album->getPrettyId() !== $owner . "_" . $id || $album->isDeleted()) $this->notFound(); if($album->getPrettyId() !== $owner . "_" . $id || $album->isDeleted()) $this->notFound();
if(is_null($this->user) || !$album->canBeModifiedBy($this->user->identity)) if(is_null($this->user) || !$album->canBeModifiedBy($this->user->identity))
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); $this->flashFail("err", tr("error_access_denied_short"), tr("error_access_denied"));
$name = $album->getName(); $name = $album->getName();
$owner = $album->getOwner(); $owner = $album->getOwner();
$album->delete(); $album->delete();
$this->flash("succ", "Альбом удалён", "Альбом $name был успешно удалён."); $this->flash("succ", tr("album_is_deleted"), tr("album_x_is_deleted", $name));
$this->redirect("/albums" . ($owner instanceof Club ? "-" : "") . $owner->getId()); $this->redirect("/albums" . ($owner instanceof Club ? "-" : "") . $owner->getId());
} }
@ -205,13 +205,13 @@ final class PhotosPresenter extends OpenVKPresenter
$photo = $this->photos->getByOwnerAndVID($ownerId, $photoId); $photo = $this->photos->getByOwnerAndVID($ownerId, $photoId);
if(!$photo) $this->notFound(); if(!$photo) $this->notFound();
if(is_null($this->user) || $this->user->id != $ownerId) if(is_null($this->user) || $this->user->id != $ownerId)
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); $this->flashFail("err", tr("error_access_denied_short"), tr("error_access_denied"));
if($_SERVER["REQUEST_METHOD"] === "POST") { if($_SERVER["REQUEST_METHOD"] === "POST") {
$photo->setDescription(empty($this->postParam("desc")) ? NULL : $this->postParam("desc")); $photo->setDescription(empty($this->postParam("desc")) ? NULL : $this->postParam("desc"));
$photo->save(); $photo->save();
$this->flash("succ", "Изменения сохранены", "Обновлённое описание появится на странице с фоткой."); $this->flash("succ", tr("changes_saved"), tr("new_description_will_appear"));
$this->redirect("/photo" . $photo->getPrettyId()); $this->redirect("/photo" . $photo->getPrettyId());
} }
@ -224,18 +224,18 @@ final class PhotosPresenter extends OpenVKPresenter
$this->willExecuteWriteAction(); $this->willExecuteWriteAction();
if(is_null($this->queryParam("album"))) if(is_null($this->queryParam("album")))
$this->flashFail("err", "Неизвестная ошибка", "Не удалось сохранить фотографию в <b>DELETED</b>."); $this->flashFail("err", tr("error"), tr("error_adding_to_deleted"));
[$owner, $id] = explode("_", $this->queryParam("album")); [$owner, $id] = explode("_", $this->queryParam("album"));
$album = $this->albums->get((int) $id); $album = $this->albums->get((int) $id);
if(!$album) if(!$album)
$this->flashFail("err", "Неизвестная ошибка", "Не удалось сохранить фотографию в <b>DELETED</b>."); $this->flashFail("err", tr("error"), tr("error_adding_to_deleted"));
if(is_null($this->user) || !$album->canBeModifiedBy($this->user->identity)) if(is_null($this->user) || !$album->canBeModifiedBy($this->user->identity))
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); $this->flashFail("err", tr("error_access_denied_short"), tr("error_access_denied"));
if($_SERVER["REQUEST_METHOD"] === "POST") { if($_SERVER["REQUEST_METHOD"] === "POST") {
if(!isset($_FILES["blob"])) if(!isset($_FILES["blob"]))
$this->flashFail("err", "Нету фотографии", "Выберите файл."); $this->flashFail("err", tr("no_photo"), tr("select_file"));
try { try {
$photo = new Photo; $photo = new Photo;
@ -246,7 +246,7 @@ final class PhotosPresenter extends OpenVKPresenter
$photo->save(); $photo->save();
} catch(ISE $ex) { } catch(ISE $ex) {
$name = $album->getName(); $name = $album->getName();
$this->flashFail("err", "Неизвестная ошибка", "Не удалось сохранить фотографию в <b>$name</b>."); $this->flashFail("err", tr("no_photo"), tr("error_adding_to_x", $name));
} }
$album->addPhoto($photo); $album->addPhoto($photo);
@ -269,7 +269,7 @@ final class PhotosPresenter extends OpenVKPresenter
if(!$album || !$photo) $this->notFound(); if(!$album || !$photo) $this->notFound();
if(!$album->hasPhoto($photo)) $this->notFound(); if(!$album->hasPhoto($photo)) $this->notFound();
if(is_null($this->user) || !$album->canBeModifiedBy($this->user->identity)) if(is_null($this->user) || !$album->canBeModifiedBy($this->user->identity))
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); $this->flashFail("err", tr("error_access_denied_short"), tr("error_access_denied"));
if($_SERVER["REQUEST_METHOD"] === "POST") { if($_SERVER["REQUEST_METHOD"] === "POST") {
$this->assertNoCSRF(); $this->assertNoCSRF();
@ -277,7 +277,7 @@ final class PhotosPresenter extends OpenVKPresenter
$album->setEdited(time()); $album->setEdited(time());
$album->save(); $album->save();
$this->flash("succ", "Фотография удалена", "Эта фотография была успешно удалена."); $this->flash("succ", tr("photo_is_deleted"), tr("photo_is_deleted_desc"));
$this->redirect("/album" . $album->getPrettyId()); $this->redirect("/album" . $album->getPrettyId());
} }
} }
@ -291,12 +291,12 @@ final class PhotosPresenter extends OpenVKPresenter
$photo = $this->photos->getByOwnerAndVID($ownerId, $photoId); $photo = $this->photos->getByOwnerAndVID($ownerId, $photoId);
if(!$photo) $this->notFound(); if(!$photo) $this->notFound();
if(is_null($this->user) || $this->user->id != $ownerId) if(is_null($this->user) || $this->user->id != $ownerId)
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); $this->flashFail("err", tr("error_access_denied_short"), tr("error_access_denied"));
$photo->isolate(); $photo->isolate();
$photo->delete(); $photo->delete();
$this->flash("succ", "Фотография удалена", "Эта фотография была успешно удалена."); $this->flash("succ", tr("photo_is_deleted"), tr("photo_is_deleted_desc"));
$this->redirect("/id0"); $this->redirect("/id0");
} }
} }

View file

@ -118,22 +118,22 @@ final class ReportPresenter extends OpenVKPresenter
$report->deleteContent(); $report->deleteContent();
$report->banUser($this->user->identity->getId()); $report->banUser($this->user->identity->getId());
$this->flash("suc", "Смэрть...", "Пользователь успешно забанен."); $this->flash("suc", tr("death"), tr("user_successfully_banned"));
} else if ($this->postParam("delete")) { } else if ($this->postParam("delete")) {
$report->deleteContent(); $report->deleteContent();
$this->flash("suc", "Нехай живе!", "Контент удалён, а пользователю прилетело предупреждение."); $this->flash("suc", tr("nehay"), tr("content_is_deleted"));
} else if ($this->postParam("ignore")) { } else if ($this->postParam("ignore")) {
$report->delete(); $report->delete();
$this->flash("suc", "Нехай живе!", "Жалоба проигнорирована."); $this->flash("suc", tr("nehay"), tr("report_is_ignored"));
} else if ($this->postParam("banClubOwner") || $this->postParam("banClub")) { } else if ($this->postParam("banClubOwner") || $this->postParam("banClub")) {
if ($report->getContentType() !== "group") if ($report->getContentType() !== "group")
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); $this->flashFail("err", tr("error_access_denied_short"), tr("error_access_denied"));
$club = $report->getContentObject(); $club = $report->getContentObject();
if (!$club || $club->isBanned()) if (!$club || $club->isBanned())
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); $this->flashFail("err", tr("error_access_denied_short"), tr("error_access_denied"));
if ($this->postParam("banClubOwner")) { if ($this->postParam("banClubOwner")) {
$club->getOwner()->ban("**content-" . $report->getContentType() . "-" . $report->getContentId() . "**", false, $club->getOwner()->getNewBanTime(), $this->user->identity->getId()); $club->getOwner()->ban("**content-" . $report->getContentType() . "-" . $report->getContentId() . "**", false, $club->getOwner()->getNewBanTime(), $this->user->identity->getId());
@ -143,7 +143,7 @@ final class ReportPresenter extends OpenVKPresenter
$report->delete(); $report->delete();
$this->flash("suc", "Смэрть...", ($this->postParam("banClubOwner") ? "Создатель сообщества успешно забанен." : "Сообщество успешно забанено")); $this->flash("suc", tr("death"), ($this->postParam("banClubOwner") ? tr("group_owner_is_banned") : tr("group_is_banned")));
} }
$this->redirect("/scumfeed"); $this->redirect("/scumfeed");

View file

@ -111,7 +111,7 @@ final class TopicsPresenter extends OpenVKPresenter
$video = Video::fastMake($this->user->id, $_FILES["_vid_attachment"]["name"], $this->postParam("text"), $_FILES["_vid_attachment"]); $video = Video::fastMake($this->user->id, $_FILES["_vid_attachment"]["name"], $this->postParam("text"), $_FILES["_vid_attachment"]);
} }
} catch(ISE $ex) { } catch(ISE $ex) {
$this->flash("err", "Не удалось опубликовать комментарий", "Файл медиаконтента повреждён или слишком велик."); $this->flash("err", tr("error_when_publishing_comment"), tr("error_comment_file_too_big"));
$this->redirect("/topic" . $topic->getPrettyId()); $this->redirect("/topic" . $topic->getPrettyId());
} }
@ -126,7 +126,7 @@ final class TopicsPresenter extends OpenVKPresenter
$comment->setFlags($flags); $comment->setFlags($flags);
$comment->save(); $comment->save();
} catch (\LengthException $ex) { } catch (\LengthException $ex) {
$this->flash("err", "Не удалось опубликовать комментарий", "Комментарий слишком большой."); $this->flash("err", tr("error_when_publishing_comment"), tr("error_comment_too_big"));
$this->redirect("/topic" . $topic->getPrettyId()); $this->redirect("/topic" . $topic->getPrettyId());
} }

View file

@ -72,7 +72,7 @@ final class UserPresenter extends OpenVKPresenter
if(!is_null($this->user)) { if(!is_null($this->user)) {
if($this->template->mode !== "friends" && $this->user->id !== $id) { if($this->template->mode !== "friends" && $this->user->id !== $id) {
$name = $user->getFullName(); $name = $user->getFullName();
$this->flash("err", "Ошибка доступа", "Вы не можете просматривать полный список подписок $name."); $this->flash("err", tr("error_access_denied_short"), tr("error_viewing_subs", $name));
$this->redirect($user->getURL()); $this->redirect($user->getURL());
} }
@ -107,11 +107,11 @@ final class UserPresenter extends OpenVKPresenter
$this->notFound(); $this->notFound();
if(!$club->canBeModifiedBy($this->user->identity ?? NULL)) if(!$club->canBeModifiedBy($this->user->identity ?? NULL))
$this->flashFail("err", "Ошибка доступа", "У вас недостаточно прав, чтобы изменять этот ресурс.", NULL, true); $this->flashFail("err", tr("error_access_denied_short"), tr("error_access_denied"), NULL, true);
$isClubPinned = $this->user->identity->isClubPinned($club); $isClubPinned = $this->user->identity->isClubPinned($club);
if(!$isClubPinned && $this->user->identity->getPinnedClubCount() > 10) if(!$isClubPinned && $this->user->identity->getPinnedClubCount() > 10)
$this->flashFail("err", "Ошибка", "Находится в левом меню могут максимум 10 групп", NULL, true); $this->flashFail("err", tr("error"), tr("error_max_pinned_clubs"), NULL, true);
if($club->getOwner()->getId() === $this->user->identity->getId()) { if($club->getOwner()->getId() === $this->user->identity->getId()) {
$club->setOwner_Club_Pinned(!$isClubPinned); $club->setOwner_Club_Pinned(!$isClubPinned);
@ -237,7 +237,7 @@ final class UserPresenter extends OpenVKPresenter
} elseif($_GET['act'] === "status") { } elseif($_GET['act'] === "status") {
if(mb_strlen($this->postParam("status")) > 255) { if(mb_strlen($this->postParam("status")) > 255) {
$statusLength = (string) mb_strlen($this->postParam("status")); $statusLength = (string) mb_strlen($this->postParam("status"));
$this->flashFail("err", "Ошибка", "Статус слишком длинный ($statusLength символов вместо 255 символов)", NULL, true); $this->flashFail("err", tr("error"), tr("error_status_too_long", $statusLength), NULL, true);
} }
$user->setStatus(empty($this->postParam("status")) ? NULL : $this->postParam("status")); $user->setStatus(empty($this->postParam("status")) ? NULL : $this->postParam("status"));
@ -281,7 +281,7 @@ final class UserPresenter extends OpenVKPresenter
if($_SERVER["REQUEST_METHOD"] === "POST") { if($_SERVER["REQUEST_METHOD"] === "POST") {
if(!$user->verifyNumber($this->postParam("code") ?? 0)) if(!$user->verifyNumber($this->postParam("code") ?? 0))
$this->flashFail("err", "Ошибка", "Не удалось подтвердить номер телефона: неверный код."); $this->flashFail("err", tr("error"), tr("invalid_code"));
$this->flash("succ", tr("changes_saved"), tr("changes_saved_comment")); $this->flash("succ", tr("changes_saved"), tr("changes_saved_comment"));
} }

View file

@ -58,7 +58,7 @@ final class VideosPresenter extends OpenVKPresenter
$this->willExecuteWriteAction(); $this->willExecuteWriteAction();
if(OPENVK_ROOT_CONF['openvk']['preferences']['videos']['disableUploading']) if(OPENVK_ROOT_CONF['openvk']['preferences']['videos']['disableUploading'])
$this->flashFail("err", tr("error"), "Video uploads are disabled by the system administrator."); $this->flashFail("err", tr("error"), tr("video_uploads_disabled"));
if($_SERVER["REQUEST_METHOD"] === "POST") { if($_SERVER["REQUEST_METHOD"] === "POST") {
if(!empty($this->postParam("name"))) { if(!empty($this->postParam("name"))) {
@ -74,18 +74,18 @@ final class VideosPresenter extends OpenVKPresenter
else if(!empty($this->postParam("link"))) else if(!empty($this->postParam("link")))
$video->setLink($this->postParam("link")); $video->setLink($this->postParam("link"));
else else
$this->flashFail("err", "Нету видеозаписи", "Выберите файл или укажите ссылку."); $this->flashFail("err", tr("no_video"), tr("no_video_desc"));
} catch(\DomainException $ex) { } catch(\DomainException $ex) {
$this->flashFail("err", "Произошла ошибка", "Файл повреждён или не содержит видео." ); $this->flashFail("err", tr("error_occured"), tr("error_video_damaged_file"));
} catch(ISE $ex) { } catch(ISE $ex) {
$this->flashFail("err", "Произошла ошибка", "Возможно, ссылка некорректна."); $this->flashFail("err", tr("error_occured"), tr("error_video_incorrect_link"));
} }
$video->save(); $video->save();
$this->redirect("/video" . $video->getPrettyId()); $this->redirect("/video" . $video->getPrettyId());
} else { } else {
$this->flashFail("err", "Произошла ошибка", "Видео не может быть опубликовано без названия."); $this->flashFail("err", tr("error_occured"), tr("error_video_no_title"));
} }
} }
} }
@ -99,14 +99,14 @@ final class VideosPresenter extends OpenVKPresenter
if(!$video) if(!$video)
$this->notFound(); $this->notFound();
if(is_null($this->user) || $this->user->id !== $owner) if(is_null($this->user) || $this->user->id !== $owner)
$this->flashFail("err", "Ошибка доступа", "Вы не имеете права редактировать этот ресурс."); $this->flashFail("err", tr("error_access_denied_short"), tr("error_access_denied"));
if($_SERVER["REQUEST_METHOD"] === "POST") { if($_SERVER["REQUEST_METHOD"] === "POST") {
$video->setName(empty($this->postParam("name")) ? NULL : $this->postParam("name")); $video->setName(empty($this->postParam("name")) ? NULL : $this->postParam("name"));
$video->setDescription(empty($this->postParam("desc")) ? NULL : $this->postParam("desc")); $video->setDescription(empty($this->postParam("desc")) ? NULL : $this->postParam("desc"));
$video->save(); $video->save();
$this->flash("succ", "Изменения сохранены", "Обновлённое описание появится на странице с видосиком."); $this->flash("succ", tr("changes_saved"), tr("new_data_video"));
$this->redirect("/video" . $video->getPrettyId()); $this->redirect("/video" . $video->getPrettyId());
} }
@ -128,7 +128,7 @@ final class VideosPresenter extends OpenVKPresenter
$video->deleteVideo($owner, $vid); $video->deleteVideo($owner, $vid);
} }
} else { } else {
$this->flashFail("err", "Не удалось удалить пост", "Вы не вошли в аккаунт."); $this->flashFail("err", tr("error_deleting_video"), tr("login_please"));
} }
$this->redirect("/videos" . $owner); $this->redirect("/videos" . $owner);

View file

@ -233,7 +233,7 @@ final class WallPresenter extends OpenVKPresenter
$this->flashFail("err", tr("not_enough_permissions"), tr("not_enough_permissions_comment")); $this->flashFail("err", tr("not_enough_permissions"), tr("not_enough_permissions_comment"));
if($_FILES["_vid_attachment"] && OPENVK_ROOT_CONF['openvk']['preferences']['videos']['disableUploading']) if($_FILES["_vid_attachment"] && OPENVK_ROOT_CONF['openvk']['preferences']['videos']['disableUploading'])
$this->flashFail("err", tr("error"), "Video uploads are disabled by the system administrator."); $this->flashFail("err", tr("error"), tr("video_uploads_disabled"));
$anon = OPENVK_ROOT_CONF["openvk"]["preferences"]["wall"]["anonymousPosting"]["enable"]; $anon = OPENVK_ROOT_CONF["openvk"]["preferences"]["wall"]["anonymousPosting"]["enable"];
if($wallOwner instanceof Club && $this->postParam("as_group") === "on" && $this->postParam("force_sign") !== "on" && $anon) { if($wallOwner instanceof Club && $this->postParam("as_group") === "on" && $this->postParam("force_sign") !== "on" && $anon) {

View file

@ -1142,6 +1142,93 @@
"post_is_too_big" = "The post is too big."; "post_is_too_big" = "The post is too big.";
"error_sending_report" = "Failed to make a report..."; "error_sending_report" = "Failed to make a report...";
"error_when_saving_gift" = "Error when saving gift";
"error_when_saving_gift_bad_image" = "Gift image is crooked.";
"error_when_saving_gift_no_image" = "Please, upload gift's image.";
"video_uploads_disabled" = "Video uploads are disabled by the system administrator.";
"error_when_publishing_comment" = "Error when publishing comment";
"error_when_publishing_comment_description" = "Image is corrupted, too big or one side is many times larger than the other.";
"error_comment_empty" = "Comment is empty or too big.";
"error_comment_too_big" = "Comment is too big.";
"error_comment_file_too_big" = "Media file is corrupted or too big.";
"comment_is_added" = "Comment has been added";
"comment_is_added_desc" = "Your comment will appear on page.";
"error_access_denied_short" = "Access denied";
"error_access_denied" = "You don't have rights to edit this resource";
"success" = "Success";
"comment_will_not_appear" = "This comment will no longer appear.";
"error_when_gifting" = "Failed to gift";
"error_user_not_exists" = "User or pack does not exist.";
"error_no_rights_gifts" = "Failed to check rights on gift.";
"error_no_more_gifts" = "You no longer have such gifts.";
"error_no_money" = "Shout out to a beggar.";
"gift_sent" = "Gift sent";
"gift_sent_desc" = "You sent a gift to $1 for $2 votes";
"error_on_server_side" = "An error occurred on the server side. Contact your system administrator.";
"error_no_group_name" = "You did not enter a group name.";
"success_action" = "Action successful";
"connection_error" = "Connection error";
"connection_error_desc" = "Failed to connect to telemetry service.";
"error_when_uploading_photo" = "Failed to save photo";
"new_changes_desc" = "New data will appear in your group.";
"comment_is_changed" = "Admin comment changed";
"comment_is_deleted" = "Admin comment deleted";
"comment_is_too_long" = "Comment is too long ($1 symbols instead 36)";
"x_no_more_admin" = "$1 no longer an administrator.";
"x_is_admin" = "$1 appointed as an administrator.";
"x_is_now_hidden" = "Now $1 will be shown as a normal subscriber to everyone except other admins";
"x_is_now_showed" = "Now everyone will know that $1 is an administrator.";
"note_is_deleted" = "Note was deleted";
"note_x_is_now_deleted" = "Note \"$1\" was successfully deleted.";
"new_data_accepted" = "New data accepted.";
"album_is_deleted" = "Album was deleted";
"album_x_is_deleted" = "Album $1 was successfully deleted.";
"error_adding_to_deleted" = "Failed to save photo to <b>DELETED</b>.";
"error_adding_to_x" = "Failed to save photo to <b>$1</b>.";
"no_photo" = "No photo";
"select_file" = "Select file";
"new_description_will_appear" = "The updated description will appear on the photo page..";
"photo_is_deleted" = "Photo was deleted";
"photo_is_deleted_desc" = "This photo has been successfully deleted.";
"no_video" = "No video";
"no_video_desc" = "Select a file or provide a link.";
"error_occured" = "Error occured";
"error_video_damaged_file" = "The file is corrupted or does not contain video.";
"error_video_incorrect_link" = "Perhaps the link is incorrect.";
"error_video_no_title" = "Video can't be published without title.";
"new_data_video" = "The updated description will appear on the video page.";
"error_deleting_video" = "Failed to delete video";
"login_please" = "You are not signed in.";
"invalid_code" = "Failed to verify phone number: Invalid code.";
"error_max_pinned_clubs" = "Maximum count of the pinned groups is 10.";
"error_viewing_subs" = "You cannot view the full list of subscriptions $1.";
"error_status_too_long" = "Status is too long ($1 instead 255)";
"death" = "Death...";
"nehay" = "Live long!";
"user_successfully_banned" = "User was successfully banned.";
"content_is_deleted" = "The content has been removed and the user has received a warning.";
"report_is_ignored" = "Report was ignored.";
"group_owner_is_banned" = "Group's owner was successfully banned";
"group_is_banned" = "Group was successfully banned";
/* Admin actions */ /* Admin actions */
"login_as" = "Login as $1"; "login_as" = "Login as $1";
@ -1245,6 +1332,9 @@
"admin_banned_link_not_specified" = "The link is not specified"; "admin_banned_link_not_specified" = "The link is not specified";
"admin_banned_link_not_found" = "Link not found"; "admin_banned_link_not_found" = "Link not found";
"admin_gift_moved_successfully" = "Gift moved successfully";
"admin_gift_moved_to_recycle" = "This gift will now be in <b>Recycle Bin</b>.";
"logs" = "Logs"; "logs" = "Logs";
"logs_anything" = "Anything"; "logs_anything" = "Anything";
"logs_adding" = "Creation"; "logs_adding" = "Creation";
@ -1617,6 +1707,15 @@
"views" = "Views"; "views" = "Views";
"views_this_week" = "This graph shows the views of community posts over the last 7 days."; "views_this_week" = "This graph shows the views of community posts over the last 7 days.";
"full_coverage" = "Full coverage";
"all_views" = "All views";
"subs_coverage" = "Subscribers coverage";
"subs_views" = "Subscribers views";
"viral_coverage" = "Viral coverage";
"viral_views" = "Viral views";
/* Sudo */ /* Sudo */
"you_entered_as" = "You logged as"; "you_entered_as" = "You logged as";

View file

@ -1041,6 +1041,92 @@
"post_is_empty_or_too_big" = "Пост пустой или слишком большой."; "post_is_empty_or_too_big" = "Пост пустой или слишком большой.";
"post_is_too_big" = "Пост слишком большой."; "post_is_too_big" = "Пост слишком большой.";
"error_sending_report" = "Не удалось подать жалобу..."; "error_sending_report" = "Не удалось подать жалобу...";
"error_when_saving_gift" = "Не удалось сохранить подарок";
"error_when_saving_gift_bad_image" = "Изображение подарка кривое.";
"error_when_saving_gift_no_image" = "Пожалуйста, загрузите изображение подарка.";
"video_uploads_disabled" = "Загрузки видео отключены администратором.";
"error_when_publishing_comment" = "Не удалось опубликовать комментарий";
"error_when_publishing_comment_description" = "Файл изображения повреждён, слишком велик или одна сторона изображения в разы больше другой.";
"error_comment_empty" = "Комментарий пустой или слишком большой.";
"error_comment_too_big" = "Комментарий слишком большой.";
"error_comment_file_too_big" = "Файл медиаконтента повреждён или слишком велик.";
"comment_is_added" = "Комментарий добавлен";
"comment_is_added_desc" = "Ваш комментарий появится на странице.";
"error_access_denied_short" = "Ошибка доступа";
"error_access_denied" = "У вас недостаточно прав, чтобы редактировать этот ресурс";
"success" = "Успешно";
"comment_will_not_appear" = "Этот комментарий больше не будет показыватся.";
"error_when_gifting" = "Не удалось подарить";
"error_user_not_exists" = "Пользователь или набор не существуют.";
"error_no_rights_gifts" = "Не удалось подтвердить права на подарок.";
"error_no_more_gifts" = "У вас больше не осталось таких подарков.";
"error_no_money" = "Ору нищ не пук.";
"gift_sent" = "Подарок отправлен";
"gift_sent_desc" = "Вы отправили подарок <b>$1</b> за $2 голосов";
"error_on_server_side" = "Произошла ошибка на стороне сервера. Обратитесь к системному администратору.";
"error_no_group_name" = "Вы не ввели название группы.";
"success_action" = "Операция успешна";
"connection_error" = "Ошибка подключения";
"connection_error_desc" = "Не удалось подключится к службе телеметрии.";
"error_when_uploading_photo" = "Не удалось сохранить фотографию.";
"new_changes_desc" = "Новые данные появятся в вашей группе.";
"comment_is_changed" = "Комментарий к администратору изменён";
"comment_is_deleted" = "Комментарий к администратору удален";
"comment_is_too_long" = "Комментарий слишком длинный ($1 символов вместо 36 символов)";
"x_no_more_admin" = "$1 больше не администратор.";
"x_is_admin" = "$1 назначен(а) администратором.";
"x_is_now_hidden" = "Теперь $1 будет показываться как обычный подписчик всем, кроме других администраторов";
"x_is_now_showed" = "Теперь все будут знать, что $1 — администратор.";
"note_is_deleted" = "Заметка удалена";
"note_x_is_now_deleted" = "Заметка \"$1\" была успешно удалена.";
"new_data_accepted" = "Новые данные приняты.";
"album_is_deleted" = "Альбом удалён";
"album_x_is_deleted" = "Альбом $1 был успешно удалён.";
"error_adding_to_deleted" = "Не удалось сохранить фотографию в <b>DELETED</b>.";
"error_adding_to_x" = "Не удалось сохранить фотографию в <b>$1</b>.";
"no_photo" = "Нету фотографии";
"select_file" = "Выберите файл";
"new_description_will_appear" = "Обновлённое описание появится на странице с фоткой.";
"photo_is_deleted" = "Фотография удалена";
"photo_is_deleted_desc" = "Эта фотография была успешно удалена.";
"no_video" = "Нет видеозаписи";
"no_video_desc" = "Выберите файл или укажите ссылку.";
"error_occured" = "Произошла ошибка";
"error_video_damaged_file" = "Файл повреждён или не содержит видео.";
"error_video_incorrect_link" = "Возможно, ссылка некорректна.";
"error_video_no_title" = "Видео не может быть опубликовано без названия.";
"new_data_video" = "Обновлённое описание появится на странице с видео.";
"error_deleting_video" = "Не удалось удалить видео";
"login_please" = "Вы не вошли в аккаунт.";
"invalid_code" = "Не удалось подтвердить номер телефона: неверный код.";
"error_max_pinned_clubs" = "Находится в левом меню могут максимум 10 групп";
"error_viewing_subs" = "Вы не можете просматривать полный список подписок $1.";
"error_status_too_long" = "Статус слишком длинный ($1 символов вместо 255 символов)";
"death" = "Смэрть...";
"nehay" = "Нехай живе!";
"user_successfully_banned" = "Пользователь успешно забанен.";
"content_is_deleted" = "Контент удалён, а пользователю прилетело предупреждение.";
"report_is_ignored" = "Жалоба проигнорирована.";
"group_owner_is_banned" = "Создатель сообщества успешно забанен.";
"group_is_banned" = "Сообщество успешно забанено";
/* Admin actions */ /* Admin actions */
@ -1133,6 +1219,10 @@
"admin_banned_link_initiator" = "Инициатор"; "admin_banned_link_initiator" = "Инициатор";
"admin_banned_link_not_specified" = "Ссылка не указана"; "admin_banned_link_not_specified" = "Ссылка не указана";
"admin_banned_link_not_found" = "Ссылка не найдена"; "admin_banned_link_not_found" = "Ссылка не найдена";
"admin_gift_moved_successfully" = "Подарок успешно перемещён";
"admin_gift_moved_to_recycle" = "This gift will now be in <b>Recycle Bin</b>.";
"logs" = "Логи"; "logs" = "Логи";
"logs_anything" = "Любое"; "logs_anything" = "Любое";
"logs_adding" = "Создание"; "logs_adding" = "Создание";
@ -1509,6 +1599,15 @@
"views" = "Просмотры"; "views" = "Просмотры";
"views_this_week" = "Этот график отображает просмотры постов сообщества за последние 7 дней."; "views_this_week" = "Этот график отображает просмотры постов сообщества за последние 7 дней.";
"full_coverage" = "Полный охват";
"all_views" = "Все просмотры";
"subs_coverage" = "Охват подписчиков";
"subs_views" = "Просмотры подписчиков";
"viral_coverage" = "Виральный охват";
"viral_views" = "Виральные просмотры";
/* Sudo */ /* Sudo */
"you_entered_as" = "Вы вошли как"; "you_entered_as" = "Вы вошли как";