Merge branch 'master' into disco

This commit is contained in:
lalka2018 2023-11-01 12:22:20 +03:00
commit 6f3de576a8
20 changed files with 2073 additions and 22 deletions

View file

@ -30,7 +30,7 @@ If you want, you can add your instance to the list above so that people can regi
1. Install PHP 7.4, web-server, Composer, Node.js, Yarn and [Chandler](https://github.com/openvk/chandler) 1. Install PHP 7.4, web-server, Composer, Node.js, Yarn and [Chandler](https://github.com/openvk/chandler)
* PHP 8.1 is supported too, however it was not tested carefully, so be aware. * PHP 8 is still being tested; the functionality of the engine on this version of PHP is not yet guaranteed.
2. Install MySQL-compatible database. 2. Install MySQL-compatible database.

View file

@ -30,7 +30,7 @@ _[English](README.md)_
1. Установите PHP 7.4, веб-сервер, Composer, Node.js, Yarn и [Chandler](https://github.com/openvk/chandler) 1. Установите PHP 7.4, веб-сервер, Composer, Node.js, Yarn и [Chandler](https://github.com/openvk/chandler)
* PHP 8 еще **не** тестировался, поэтому не стоит ожидать, что он будет работать (UPD: он не работает). * PHP 8 пока ещё тестируется, работоспособность движка на этой версии PHP пока не гарантируется.
2. Установите MySQL-совместимую базу данных. 2. Установите MySQL-совместимую базу данных.

View file

@ -14,6 +14,10 @@ final class Friends extends VKAPIRequestHandler
$this->requireUser(); $this->requireUser();
if (is_null($users->get($user_id))) {
$this->fail(100, "One of the parameters specified was missing or invalid");
}
foreach($users->get($user_id)->getFriends($offset, $count) as $friend) { foreach($users->get($user_id)->getFriends($offset, $count) as $friend) {
$friends[$i] = $friend->getId(); $friends[$i] = $friend->getId();
$i++; $i++;

View file

@ -48,7 +48,7 @@ class APIToken extends RowModel
$this->delete(); $this->delete();
} }
function save(): void function save(?bool $log = false): void
{ {
if(is_null($this->getRecord())) if(is_null($this->getRecord()))
$this->stateChanges("secret", bin2hex(openssl_random_pseudo_bytes(36))); $this->stateChanges("secret", bin2hex(openssl_random_pseudo_bytes(36)));

View file

@ -131,7 +131,7 @@ class Correspondence
*/ */
function getPreviewMessage(): ?Message function getPreviewMessage(): ?Message
{ {
$messages = $this->getMessages(1, NULL, 1); $messages = $this->getMessages(1, NULL, 1, 0);
return $messages[0] ?? NULL; return $messages[0] ?? NULL;
} }

View file

@ -54,11 +54,11 @@ class PasswordReset extends RowModel
} }
} }
function save(): void function save(?bool $log = false): void
{ {
$this->stateChanges("key", base64_encode(openssl_random_pseudo_bytes(46))); $this->stateChanges("key", base64_encode(openssl_random_pseudo_bytes(46)));
$this->stateChanges("timestamp", time()); $this->stateChanges("timestamp", time());
parent::save(); parent::save($log);
} }
} }

View file

@ -279,12 +279,12 @@ class Poll extends Attachable
return $poll; return $poll;
} }
function save(): void function save(?bool $log = false): void
{ {
if(empty($this->choicesToPersist)) if(empty($this->choicesToPersist))
throw new InvalidStateException; throw new InvalidStateException;
parent::save(); parent::save($log);
foreach($this->choicesToPersist as $option) { foreach($this->choicesToPersist as $option) {
DatabaseConnection::i()->getContext()->table("poll_options")->insert([ DatabaseConnection::i()->getContext()->table("poll_options")->insert([
"poll" => $this->getId(), "poll" => $this->getId(),

View file

@ -52,7 +52,6 @@ class Messages
$query = file_get_contents(__DIR__ . "/../sql/get-correspondencies-count.tsql"); $query = file_get_contents(__DIR__ . "/../sql/get-correspondencies-count.tsql");
DatabaseConnection::i()->getConnection()->query(file_get_contents(__DIR__ . "/../sql/mysql-msg-fix.tsql")); DatabaseConnection::i()->getConnection()->query(file_get_contents(__DIR__ . "/../sql/mysql-msg-fix.tsql"));
$count = DatabaseConnection::i()->getConnection()->query($query, $id, $class, $id, $class)->fetch()->cnt; $count = DatabaseConnection::i()->getConnection()->query($query, $id, $class, $id, $class)->fetch()->cnt;
bdump($count);
return $count; return $count;
} }
} }

View file

@ -128,7 +128,7 @@ final class MessengerPresenter extends OpenVKPresenter
$messages = []; $messages = [];
$correspondence = new Correspondence($this->user->identity, $correspondent); $correspondence = new Correspondence($this->user->identity, $correspondent);
foreach($correspondence->getMessages(1, $lastMsg === 0 ? NULL : $lastMsg) as $message) foreach($correspondence->getMessages(1, $lastMsg === 0 ? NULL : $lastMsg, NULL, 0) as $message)
$messages[] = $message->simplify(); $messages[] = $message->simplify();
header("Content-Type: application/json"); header("Content-Type: application/json");

View file

@ -67,7 +67,7 @@ final class SupportPresenter extends OpenVKPresenter
$this->template->count = $this->tickets->getTicketsCountByUserId($this->user->id); $this->template->count = $this->tickets->getTicketsCountByUserId($this->user->id);
if($this->template->mode === "list") { if($this->template->mode === "list") {
$this->template->page = (int) ($this->queryParam("p") ?? 1); $this->template->page = (int) ($this->queryParam("p") ?? 1);
$this->template->tickets = $this->tickets->getTicketsByUserId($this->user->id, $this->template->page); $this->template->tickets = iterator_to_array($this->tickets->getTicketsByUserId($this->user->id, $this->template->page));
} }
if($this->template->mode === "new") if($this->template->mode === "new")

View file

@ -57,7 +57,7 @@ final class UserPresenter extends OpenVKPresenter
$this->assertUserLoggedIn(); $this->assertUserLoggedIn();
$user = $this->users->get($id); $user = $this->users->get($id);
$page = abs($this->queryParam("p") ?? 1); $page = abs((int)($this->queryParam("p") ?? 1));
if(!$user) if(!$user)
$this->notFound(); $this->notFound();
elseif (!$user->getPrivacyPermission('friends.read', $this->user->identity ?? NULL)) elseif (!$user->getPrivacyPermission('friends.read', $this->user->identity ?? NULL))
@ -436,7 +436,7 @@ final class UserPresenter extends OpenVKPresenter
]; ];
foreach($settings as $setting) { foreach($settings as $setting) {
$input = $this->postParam(str_replace(".", "_", $setting)); $input = $this->postParam(str_replace(".", "_", $setting));
$user->setPrivacySetting($setting, min(3, abs($input ?? $user->getPrivacySetting($setting)))); $user->setPrivacySetting($setting, min(3, (int)abs((int)$input ?? $user->getPrivacySetting($setting))));
} }
} else if($_GET['act'] === "finance.top-up") { } else if($_GET['act'] === "finance.top-up") {
$token = $this->postParam("key0") . $this->postParam("key1") . $this->postParam("key2") . $this->postParam("key3"); $token = $this->postParam("key0") . $this->postParam("key1") . $this->postParam("key2") . $this->postParam("key3");

View file

@ -154,7 +154,7 @@ final class WallPresenter extends OpenVKPresenter
$this->template->paginatorConf = (object) [ $this->template->paginatorConf = (object) [
"count" => sizeof($posts), "count" => sizeof($posts),
"page" => (int) ($_GET["p"] ?? 1), "page" => (int) ($_GET["p"] ?? 1),
"amount" => sizeof($posts->page((int) ($_GET["p"] ?? 1), $perPage)), "amount" => $posts->page((int) ($_GET["p"] ?? 1), $perPage)->count(),
"perPage" => $perPage, "perPage" => $perPage,
]; ];
$this->template->posts = []; $this->template->posts = [];
@ -182,7 +182,7 @@ final class WallPresenter extends OpenVKPresenter
$this->template->paginatorConf = (object) [ $this->template->paginatorConf = (object) [
"count" => $count, "count" => $count,
"page" => (int) ($_GET["p"] ?? 1), "page" => (int) ($_GET["p"] ?? 1),
"amount" => sizeof($posts), "amount" => $posts->getRowCount(),
"perPage" => $pPage, "perPage" => $pPage,
]; ];
foreach($posts as $post) foreach($posts as $post)

View file

@ -15,7 +15,7 @@
.navigation-lang .link_new { .navigation-lang .link_new {
display: inline-block; display: inline-block;
padding: 25px 25px 20px 25px; padding: 20px 10px 5px 10px;
text-decoration: none; text-decoration: none;
border-top: 1px solid #fff; border-top: 1px solid #fff;
color: #000; color: #000;

View file

@ -64,7 +64,7 @@
<tr> <tr>
<td width="120" valign="top"><span class="nobold">{_role}: </span></td> <td width="120" valign="top"><span class="nobold">{_role}: </span></td>
<td> <td>
{$club->getOwner()->getId() == $user->getId() ? !$club->isOwnerHidden() || $club->canBeModifiedBy($thisUser) : !is_null($manager) ? tr("administrator") : tr("follower")} {($club->getOwner()->getId() == $user->getId() ? !$club->isOwnerHidden() || $club->canBeModifiedBy($thisUser) : !is_null($manager)) ? tr("administrator") : tr("follower")}
</td> </td>
</tr> </tr>
<tr n:if="$manager && !empty($manager->getComment()) || $club->getOwner()->getId() === $user->getId() && !empty($club->getOwnerComment()) && (!$club->isOwnerHidden() || $club->canBeModifiedBy($thisUser))"> <tr n:if="$manager && !empty($manager->getComment()) || $club->getOwner()->getId() === $user->getId() && !empty($club->getOwnerComment()) && (!$club->isOwnerHidden() || $club->canBeModifiedBy($thisUser))">

View file

@ -90,7 +90,7 @@
<div class="comments_count"> <div class="comments_count">
<a href="/note{$dat->getPrettyId()}"> <a href="/note{$dat->getPrettyId()}">
{if sizeof($dat->getCommentsCount()) > 0} {if $dat->getCommentsCount() > 0}
{_comments} ({$dat->getCommentsCount()}) {_comments} ({$dat->getCommentsCount()})
{else} {else}
{_no_comments} {_no_comments}

View file

@ -139,6 +139,8 @@
} }
</style> </style>
<div style="margin-top:-7px"> <div style="margin-top:-7px">
{var $data = is_array($iterator) ? $iterator : iterator_to_array($iterator)}
{include "../components/paginator.xml", conf => (object) [ {include "../components/paginator.xml", conf => (object) [
"page" => $page, "page" => $page,
"count" => $count, "count" => $count,
@ -153,7 +155,6 @@
<div> <div>
{include searchOptions} {include searchOptions}
{var $data = is_array($iterator) ? $iterator : iterator_to_array($iterator)}
<div class="container_gray borderup" style="float:left;width:73.3%;"> <div class="container_gray borderup" style="float:left;width:73.3%;">
{if sizeof($data) > 0} {if sizeof($data) > 0}
{if $type == "users" || $type == "groups" || $type == "apps"} {if $type == "users" || $type == "groups" || $type == "apps"}

View file

@ -405,6 +405,7 @@ h1 {
width: 200px; width: 200px;
text-align: left; text-align: left;
cursor: pointer; cursor: pointer;
font-family: tahoma, verdana, arial, sans-serif;
} }
.profile_link_form { .profile_link_form {

View file

@ -74,6 +74,11 @@ list:
name: "Soviet" name: "Soviet"
native_name: "Советский" native_name: "Советский"
author: "mohooks" author: "mohooks"
- code: "ru_lat"
flag: "ru"
name: "Russian (Latin)"
native_name: "Russkij (Latinica)"
author: "IsamiRi (@isamirivers)"
- code: "udm" - code: "udm"
flag: "udm" flag: "udm"
name: "Udmurtskiy" name: "Udmurtskiy"

1734
locales/ru_lat.strings Normal file

File diff suppressed because it is too large Load diff

View file

@ -134,6 +134,10 @@
"updated_at" = "Оновлено $1"; "updated_at" = "Оновлено $1";
"user_banned" = "На жаль, нам довелося заблокувати сторінку користувача <b>$1</b>."; "user_banned" = "На жаль, нам довелося заблокувати сторінку користувача <b>$1</b>.";
"user_banned_comment" = "Коментар модератора:"; "user_banned_comment" = "Коментар модератора:";
"verified_page" = "Верифікована сторінка";
"user_is_blocked" = "Користувача заблоковано";
"before" = "до";
"forever" = "назавжди";
/* Wall */ /* Wall */
@ -184,6 +188,7 @@
"nsfw_warning" = "Даний запис може містити контент 18+"; "nsfw_warning" = "Даний запис може містити контент 18+";
"report" = "Поскаржитися"; "report" = "Поскаржитися";
"attach" = "Прикріпити"; "attach" = "Прикріпити";
"detach" = "Відкріпити";
"attach_photo" = "Прикріпити фото"; "attach_photo" = "Прикріпити фото";
"attach_photo" = "Прикріпити відео"; "attach_photo" = "Прикріпити відео";
"draw_graffiti" = "Намалювати графіті"; "draw_graffiti" = "Намалювати графіті";
@ -193,6 +198,8 @@
"version_incompatibility" = "Не вдалося показати це вкладення. Можливо, база даних несумісна з поточною версією OpenVK."; "version_incompatibility" = "Не вдалося показати це вкладення. Можливо, база даних несумісна з поточною версією OpenVK.";
"graffiti" = "Графіті"; "graffiti" = "Графіті";
"reply" = "Відповісти"; "reply" = "Відповісти";
"post_is_ad" = "Цей пост було проплачено Держдепом США";
"edited_short" = "ред.";
/* Friends */ /* Friends */
@ -317,14 +324,21 @@
"search_group" = "Пошук групи"; "search_group" = "Пошук групи";
"search_by_groups" = "Пошук за групами"; "search_by_groups" = "Пошук за групами";
"search_group_desc" = "Тут Ви можете переглянути існуючи групи та обрати групу до вподоби."; "search_group_desc" = "Тут Ви можете переглянути існуючи групи та обрати групу до вподоби.";
"group_banned" = "Спільнота <b>$1</b> заблокована.";
/* Albums */ /* Albums */
"create" = "Створити"; "create" = "Створити";
"album" = "Альбом";
"albums" = "Альбоми"; "albums" = "Альбоми";
"photos" = "фотографій";
"photo" = "Фотографія";
"create_album" = "Створити альбом"; "create_album" = "Створити альбом";
"edit_album" = "Редагувати альбом"; "edit_album" = "Редагувати альбом";
"edit_photo" = "Змінити фотографію";
"creating_album" = "Створення альбому"; "creating_album" = "Створення альбому";
"delete_photo" = "Видалити фотографію";
"sure_deleting_photo" = "Ви впевнені, що бажаєте видалити цю світлину?";
"upload_photo" = "Завантажити фотографію"; "upload_photo" = "Завантажити фотографію";
"photo" = "Фотографія"; "photo" = "Фотографія";
"upload_button" = "Завантажити"; "upload_button" = "Завантажити";
@ -366,6 +380,39 @@
"upd_f" = "оновила фотографію на своїй сторінці"; "upd_f" = "оновила фотографію на своїй сторінці";
"upd_g" = "оновило фотографію групи"; "upd_g" = "оновило фотографію групи";
"add_photos" = "Додати фотографії";
"upload_picts" = "Завантажити фотографії";
"end_uploading" = "Завершити завантаження";
"photos_successfully_uploaded" = "Фотографії було завантажено";
"click_to_go_to_album" = "Натисніть, щоб перейти до альбому.";
"error_uploading_photo" = "Помилка завантаження фотографії";
"too_many_pictures" = "Не більше 10 фотографій";
"drag_files_here" = "Перетягніть файли сюди";
"only_images_accepted" = "Файл \"$1\" не є зображенням";
"max_filesize" = "Максимальний розмір файлу — $1 мегабайт";
"uploading_photos_from_computer" = "Завантаження фотографій з Вашого ПК";
"supported_formats" = "Підтримувані формати зображень: JPG, PNG й GIF.";
"max_load_photos" = "Ви можете завантажити до 10 фотографій за один раз.";
"tip" = "Порада";
"tip_ctrl" = "щоб обрати кілька фотографій одразу, утримуйте клавішу Ctrl під час вибору файлів в OS Windows або клавішу CMD у Mac OS.";
"album_poster" = "Обкладинка альбому";
"select_photo" = "Оберіть фотографію";
"upload_new_photo" = "Завантажте нову світлину";
"is_x_photos_zero" = "Усього 0 фотографій.";
"is_x_photos_one" = "Всього 1 фотографія.";
"is_x_photos_few" = "Всього $1 фотографій.";
"is_x_photos_many" = "Всього $1 фотографій.";
"is_x_photos_other" = "Всього $1 фотографій.";
"all_photos" = "Всі фотографії";
"error_uploading_photo" = "Помилка завантаження фотографії. Текст помилки: ";
"too_many_photos" = "Надто багато фотографій.";
"photo_x_from_y" = "Фотографія $1 з $2";
/* Notes */ /* Notes */
"notes" = "Нотатки"; "notes" = "Нотатки";
@ -395,6 +442,18 @@
/* Notes: Article Viewer */ /* Notes: Article Viewer */
"aw_legacy_ui" = "Класичне дієвидло"; "aw_legacy_ui" = "Класичне дієвидло";
"select_note" = "Вибір нотатки";
"no_notes" = "Ви не маєте жодної нотатки";
"error_attaching_note" = "Не вдалося закріпити нотатку";
"select_or_create_new" = "Оберіть існуючу нотатку або <a href='/notes/create'>створіть нову</a>";
"notes_closed" = "Ви не можете прикріпити нотатку до запису, оскільки ваші нотатки видно тільки вам.<br><br> Ви можете змінити це в <a href=\"/settings?act=privacy\">налаштуваннях</a>.";
"do_not_attach_note" = "Не прикріплювати нотатку";
"something" = "Щось";
"supports_xhtml" = "з (X)HTML підтримується.";
/* Menus */ /* Menus */
"edit_button" = "ред."; "edit_button" = "ред.";
@ -489,7 +548,7 @@
"privacy_value_friends" = "Друзі"; "privacy_value_friends" = "Друзі";
"privacy_value_friends_dative" = "Друзям"; "privacy_value_friends_dative" = "Друзям";
"privacy_value_only_me" = "Тільки я"; "privacy_value_only_me" = "Тільки я";
"privacy_value_only_me_dative" = "Тільки мені"; "privacy_value_only_me_dative" = "Тільки мені та Кирилу Буданову";
"privacy_value_nobody" = "Ніхто"; "privacy_value_nobody" = "Ніхто";
"your_email_address" = "Адрес Вашої електронної пошти"; "your_email_address" = "Адрес Вашої електронної пошти";
"your_page_address" = "Адрес Вашої сторінки"; "your_page_address" = "Адрес Вашої сторінки";
@ -581,6 +640,9 @@
"two_factor_authentication_backup_codes_1" = "Резервні коди дозволяють підтверджувати вхід, коли у вас немає доступу до телефону, наприклад, у подорожі."; "two_factor_authentication_backup_codes_1" = "Резервні коди дозволяють підтверджувати вхід, коли у вас немає доступу до телефону, наприклад, у подорожі.";
"two_factor_authentication_backup_codes_2" = "У вас є ще <b>10 кодів</b>, кожним кодом можна скористатися тільки один раз. Надрукуйте їх, приберіть в надійне місце і використовуйте, коли будуть потрібні коди для підтвердження входу."; "two_factor_authentication_backup_codes_2" = "У вас є ще <b>10 кодів</b>, кожним кодом можна скористатися тільки один раз. Надрукуйте їх, приберіть в надійне місце і використовуйте, коли будуть потрібні коди для підтвердження входу.";
"two_factor_authentication_backup_codes_3" = "Ви можете отримати нові коди, якщо вони закінчуються. Дійсні тільки останні створені резервні коди."; "two_factor_authentication_backup_codes_3" = "Ви можете отримати нові коди, якщо вони закінчуються. Дійсні тільки останні створені резервні коди.";
"viewing_backup_codes" = "Перегляд резервних кодів";
"disable_2fa" = "Вимкнути 2FA";
"viewing" = "Переглянути";
/* Sorting */ /* Sorting */
@ -606,6 +668,14 @@
"videos_many" = "$1 відеозаписів"; "videos_many" = "$1 відеозаписів";
"videos_other" = "$1 відеозаписів"; "videos_other" = "$1 відеозаписів";
"view_video" = "Перегляд"; "view_video" = "Перегляд";
"change_video" = "Редагувати відеозапис";
"unknown_video" = "ЦЕЙ ВІДЕОЗАПИС НЕ ПІДТРИМУЄТЬСЯ В ЦІЙ ВЕРСІЇ OPENVK.";
"selecting_video" = "Вибір відеозаписів";
"upload_new_video" = "Завантажити нове відео";
"max_attached_videos" = "Максимум 10 відеозаписів";
"max_attached_photos" = "Максимум 10 фотографій";
"no_videos" = "Ви не маєте відео.";
"no_videos_results" = "Немає результатів.";
/* Notifications */ /* Notifications */
@ -642,6 +712,7 @@
"nt_mention_in_video" = "в обговоренні відеозапису"; "nt_mention_in_video" = "в обговоренні відеозапису";
"nt_mention_in_note" = "в обговоренні під"; "nt_mention_in_note" = "в обговоренні під";
"nt_mention_in_topic" = "в обговоренні"; "nt_mention_in_topic" = "в обговоренні";
"nt_sent_gift" = "відправив вам подарунок";
/* Time */ /* Time */
@ -815,6 +886,7 @@
"support_new" = "Нове звернення"; "support_new" = "Нове звернення";
"support_new_title" = "Введіть тему вашого звернення"; "support_new_title" = "Введіть тему вашого звернення";
"support_new_content" = "Опишіть проблему чи пропозицію"; "support_new_content" = "Опишіть проблему чи пропозицію";
"reports" = "Скарги";
"support_rate_good_answer" = "Це хороша відповідь"; "support_rate_good_answer" = "Це хороша відповідь";
"support_rate_bad_answer" = "Це погана відповідь"; "support_rate_bad_answer" = "Це погана відповідь";
"support_good_answer_user" = "Ви залишили позитивний відгук."; "support_good_answer_user" = "Ви залишили позитивний відгук.";
@ -825,6 +897,26 @@
"support_rated_bad" = "Ви залишили негативний відгук про відповідь."; "support_rated_bad" = "Ви залишили негативний відгук про відповідь.";
"wrong_parameters" = "Неправильні параметри запиту."; "wrong_parameters" = "Неправильні параметри запиту.";
"fast_answers" = "Швидкі відповіді"; "fast_answers" = "Швидкі відповіді";
"ignore_report" = "Ігнорувати скаргу";
"report_number" = "Скарга №";
"list_of_reports" = "Лист скарг";
"text_of_the_post" = "Текст допису";
"today" = "сьогодні";
"will_be_watched" = "Скоро її розглянуть модератори";
"report_question" = "Поскаржитись?";
"report_question_text" = "Що саме Ви вважаєте неприпустимим у цьому матеріалі?";
"report_reason" = "Причина скарги";
"reason" = "Причина";
"going_to_report_app" = "Ви збираєтеся поскаржитися на цей додаток.";
"going_to_report_club" = "Ви збираєтеся поскаржитися на цю спільноту.";
"going_to_report_photo" = "Ви збираєтеся поскаржитися на цю фотографію.";
"going_to_report_user" = "Ви збираєтеся поскаржитися на цього користувача.";
"going_to_report_video" = "Ви збираєтеся поскаржитися на цей відеозапис.";
"going_to_report_post" = "Ви збираєтеся поскаржитися на цей запис.";
"going_to_report_comment" = "Ви збираєтеся поскаржитися на цей коментар.";
"comment" = "Коментар"; "comment" = "Коментар";
"sender" = "Відправник"; "sender" = "Відправник";
"author" = "Автор"; "author" = "Автор";
@ -834,6 +926,12 @@
"ticket_changed_comment" = "Зміни набудуть чинності через кілька секунд."; "ticket_changed_comment" = "Зміни набудуть чинності через кілька секунд.";
"banned_in_support_1" = "Вибачте, <b>$1</b>, але тепер вам не можна створювати звернення."; "banned_in_support_1" = "Вибачте, <b>$1</b>, але тепер вам не можна створювати звернення.";
"banned_in_support_2" = "Підстава: <b>$1</b>. Цього разу нам довелося забрати у вас цю можливість назавжди."; "banned_in_support_2" = "Підстава: <b>$1</b>. Цього разу нам довелося забрати у вас цю можливість назавжди.";
"you_can_close_this_ticket_1" = "Якщо ви не маєте запитань, Ви можете ";
"you_can_close_this_ticket_2" = "закрити це звернення";
"agent_profile_created_1" = "Профіль створено";
"agent_profile_created_2" = "Тепер користувачі бачать Ваш псевдонім і аватар замість стандартного поличчя та ID.";
"agent_profile_edited" = "Профіль відредагований";
"agent_profile" = "Картка агента";
/* Invite */ /* Invite */
@ -958,6 +1056,7 @@
"error_repost_fail" = "Не вдалося поділитися записом"; "error_repost_fail" = "Не вдалося поділитися записом";
"error_data_too_big" = "Атрибут '$1' не може бути довше $2 $3"; "error_data_too_big" = "Атрибут '$1' не може бути довше $2 $3";
"forbidden" = "Помилка доступу"; "forbidden" = "Помилка доступу";
"unknown_error" = "Невідома помилка";
"forbidden_comment" = "Налаштування приватності цього користувача не дозволяють дивитися на його сторінку."; "forbidden_comment" = "Налаштування приватності цього користувача не дозволяють дивитися на його сторінку.";
"changes_saved" = "Зміни збережені"; "changes_saved" = "Зміни збережені";
"changes_saved_comment" = "Нові дані з'являться на вашій сторінці"; "changes_saved_comment" = "Нові дані з'являться на вашій сторінці";
@ -993,6 +1092,96 @@
"media_file_corrupted_or_too_large" = "Файл медіаконтенту пошкоджений або файл занадто великий."; "media_file_corrupted_or_too_large" = "Файл медіаконтенту пошкоджений або файл занадто великий.";
"post_is_empty_or_too_big" = "Пост порожній чи надто великий."; "post_is_empty_or_too_big" = "Пост порожній чи надто великий.";
"post_is_too_big" = "Пост надто великий."; "post_is_too_big" = "Пост надто великий.";
"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" = "АХАХАХА ЛОШАРА ПІЗДУЙ НА ЗАРОБІТКИ У ПОЛЬЩУ";
/* трррр шкібіді доп доп доп доп єс єс єс) */
"description_too_long" = "Опис надто довгий.";
"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" = "Оберіть файл або вкажіть URL.";
"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 */
@ -1000,14 +1189,18 @@
"manage_user_action" = "Керування користувачем"; "manage_user_action" = "Керування користувачем";
"manage_group_action" = "Керування групою"; "manage_group_action" = "Керування групою";
"ban_user_action" = "Заблокувати користувача"; "ban_user_action" = "Заблокувати користувача";
"blocks" = "Блокування";
"last_actions" = "Останні дії";
"unban_user_action" = "Розблокувати користувача"; "unban_user_action" = "Розблокувати користувача";
"warn_user_action" = "Попередити користувача"; "warn_user_action" = "Попередити користувача";
"ban_in_support_user_action" = "Заблокувати у тех.підтримці"; "ban_in_support_user_action" = "Заблокувати у тех.підтримці";
"unban_in_support_user_action" = "Розблокувати у тех.підтримці"; "unban_in_support_user_action" = "Розблокувати у тех.підтримці";
"changes_history" = "Історія редагування";
/* Admin panel */ /* Admin panel */
"admin" = "Адмін панель"; "admin" = "Адмін панель";
"sandbox_for_developers" = "Sandbox для розробників";
"admin_ownerid" = "ID власника"; "admin_ownerid" = "ID власника";
"admin_author" = "Автор"; "admin_author" = "Автор";
"admin_name" = "Ім'я"; "admin_name" = "Ім'я";
@ -1082,6 +1275,40 @@
"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" = "Тепер подарунок у <b>кошику</b>.";
"logs" = "Логи";
"logs_anything" = "Будь-яке";
"logs_adding" = "Створення";
"logs_editing" = "Редагування";
"logs_removing" = "Видалення";
"logs_restoring" = "Відновлення";
"logs_added" = "додав";
"logs_edited" = "відредагував";
"logs_removed" = "видалив";
"logs_restored" = "відновив";
"logs_id_post" = "ID допису";
"logs_id_object" = "ID об'єкту";
"logs_uuid_user" = "UUID користувача";
"logs_change_type" = "Тип зміни";
"logs_change_object" = "Тип об'єкта";
"logs_user" = "Користувач";
"logs_object" = "Об'єкт";
"logs_type" = "Тип";
"logs_changes" = "Зміни";
"logs_time" = "Час";
"bans_history" = "Історія блокувань";
"bans_history_blocked" = "Заблоковано";
"bans_history_initiator" = "Ініціатор";
"bans_history_start" = "Початок";
"bans_history_end" = "Кінець";
"bans_history_time" = "Час";
"bans_history_reason" = "Причина";
"bans_history_start" = "Початок";
"bans_history_removed" = "Знята";
"bans_history_active" = "Активне блокування";
/* Paginator (deprecated) */ /* Paginator (deprecated) */
@ -1130,7 +1357,9 @@
"transfer" = "Передати"; "transfer" = "Передати";
"close" = "Закрити"; "close" = "Закрити";
"warning" = "Увага"; "warning" = "Увага";
"question_confirm" = "Цю дію не можна скасувати. Ви дійсно впевнені, що хочете зробити?"; "question_confirm" = "Цю дію не можна скасувати. Ви переконані що хочете це зробити?";
"confirm_m" = "Підтвердити";
"action_successfully" = "Операція виконана успішно";
/* User alerts */ /* User alerts */
@ -1144,6 +1373,8 @@
/* Away */ /* Away */
"transition_is_blocked" = "Перехід за посиланням заборонений";
"caution" = "Попередження";
"url_is_banned" = "Перехід неможливий"; "url_is_banned" = "Перехід неможливий";
"url_is_banned_comment" = "Адміністрація <b>$1</b> не рекомендує переходити за цим посиланням."; "url_is_banned_comment" = "Адміністрація <b>$1</b> не рекомендує переходити за цим посиланням.";
"url_is_banned_comment_r" = "Адміністрація <b>$1</b> не рекомендує переходити за цим посиланням.<br><br>Підстава: <b>$2</b>"; "url_is_banned_comment_r" = "Адміністрація <b>$1</b> не рекомендує переходити за цим посиланням.<br><br>Підстава: <b>$2</b>";
@ -1151,6 +1382,8 @@
"url_is_banned_title" = "Посилання на підозрілий сайт"; "url_is_banned_title" = "Посилання на підозрілий сайт";
"url_is_banned_proceed" = "Перейти за посиланням"; "url_is_banned_proceed" = "Перейти за посиланням";
"recently" = "Нещодавно";
/* Chandler */ /* Chandler */
"c_user_removed_from_group" = "Користувача було видалено з групи"; "c_user_removed_from_group" = "Користувача було видалено з групи";
@ -1422,6 +1655,43 @@
"closed_group_post" = "Цей допис з приватної групи"; "closed_group_post" = "Цей допис з приватної групи";
"deleted_target_comment" = "Цей коментар належить до видаленого допису"; "deleted_target_comment" = "Цей коментар належить до видаленого допису";
"no_results" = "Немає результатів";
/* BadBrowser */
"deprecated_browser" = "Застарілий браузер";
"deprecated_browser_description" = "Для перегляду цього контенту вам необхідний >Firefox ESR 52 або еквівалент по функціоналу навігатор по всесвітньою мережею інтернет. Співчуваємо про це.";
/* Statistics */
"coverage" = "Обхват";
"coverage_this_week" = "Цей графік відображає обхват за останні 7 днів.";
"views" = "Перегляди";
"views_this_week" = "Цей графік відображає перегляди дописів спільноти за остані 7 днів.";
"full_coverage" = "Повний обхват";
"all_views" = "Усі перегляди";
"subs_coverage" = "обхват підписників";
"subs_views" = "Перегляди підписників";
"viral_coverage" = "Віральний обхват";
"viral_views" = "Віральні перегляди";
/* Sudo */
"you_entered_as" = "Ви увійшли як";
"please_rights" = "наполегливо просимо, шануйте право на таємницю листування інших людей та не зловживайте підміною користувача.";
"click_on" = "Натисніть";
"there" = "тут";
"to_leave" = "щоб вийти";
/* Phone number */
"verify_phone_number" = "Підтвердити номер телефону";
"we_sended_first" = "Ми надіслали SMS з кодом на номер";
"we_sended_end" = "уведіть його сюди";
/* Mobile */ /* Mobile */
"mobile_friends" = "Друзі"; "mobile_friends" = "Друзі";
@ -1438,3 +1708,40 @@
"mobile_like" = "Подобається"; "mobile_like" = "Подобається";
"mobile_user_info_hide" = "Приховувати"; "mobile_user_info_hide" = "Приховувати";
"mobile_user_info_show_details" = "Показати докладніше"; "mobile_user_info_show_details" = "Показати докладніше";
/* Moderation */
"section" = "Розділ";
"template_ban" = "Блокування за шаблоном";
"active_templates" = "Чинні шаблони";
"users_reports" = "Скарги користувачів";
"substring" = "Підрядок";
"n_user" = "Користувач";
"time_before" = "Годину раніше, ніж";
"time_after" = "Годиною пізніше, ніж";
"where_for_search" = "WHERE для пошуку по розділу";
"block_params" = "Параметри блокувань";
"only_rollback" = "Тільки відкат";
"only_block" = "Тільки блокування";
"rollback_and_block" = "Відкат та блокування";
"subm" = "Застосувати";
"select_section_for_start" = "Для початку роботи, оберіть розділ";
"results_will_be_there" = "Тут будуть відображатися результати пошуку";
"search_results" = "Результати пошуку";
"cnt" = "шт.";
"link_to_page" = "Посилання на сторінку";
"or_subnet" = "або підмережа";
"error_when_searching" = "Помилка при виконанні запиту";
"no_found" = "Нічого не знайдено";
"operation_successfully" = "Операцію успішно виконано";
"unknown_error" = "Невідома помилка";
"templates" = "Шаблони";
"type" = "Тип";
"count" = "Кількість";
"time" = "Час";
"roll_back" = "відкотити";
"roll_backed" = "відкачано";