Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
455 changes: 455 additions & 0 deletions DEPLOYMENT_CODEX_RU.md

Large diffs are not rendered by default.

Binary file modified assets/banners/default.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/banners/default22.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
50 changes: 47 additions & 3 deletions assets/translations/ru/buttons.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ btn-dashboard =
.users = 👥 Пользователи
.broadcast = 📢 Рассылка
.promocodes = 🎟 Промокоды
.giveaways = 🎁 Акции
.access = 🔓 Режим доступа
.remnawave = 🌊 RemnaWave
.remnashop = 🛍 RemnaShop
Expand Down Expand Up @@ -139,6 +140,9 @@ btn-user =
.give-subscription = 🎁 Выдать подписку
.subscription-internal-squads = ⏺️ Внутренние сквады
.subscription-external-squads = ⏹️ Внешний сквад
.delete = 🗑 Удалить пользователя
.delete-confirm = Да, удалить пользователя
.delete-cancel = Отмена

.allowed-plan-choice = { $selected ->
[1] 🔘
Expand Down Expand Up @@ -478,8 +482,48 @@ btn-promocode =
.lifetime = ⌛ Время жизни
.allowed = 👥 Разрешенные пользователи
.confirm = ✅ Подтвердить

.active = { $is_active ->
.deactivate = 🔴 Деактивировать

.plan-choice = 📦 { $name }

.audience-choice = { $audience ->
[ALL] 👥 Для всех
[WITH_ACTIVE_SUBSCRIPTION] 🔒 Только с активной подпиской
[WITHOUT_ACTIVE_SUBSCRIPTION] 🔓 Только без активной подписки
*[OTHER] { $audience }
}

.item = { $is_active ->
[1] 🟢
*[0] 🔴
} { $code } — { $discount_percent }%

.active = { $is_active ->
[1] 🟢
*[0] 🔴
} Статус
} Статус

btn-giveaway =
.list = 📃 Список акций
.create = ➕ Создать акцию
.entries = 👥 Участники
.winners = 🏆 Победители
.select-winner = 🎲 Выбрать победителя
.select-next-winner = 🎲 Выбрать следующего
.enable = 🟢 Включить
.disable = 🔴 Выключить
.keep-disabled = ⚪ Оставить выключенной
.complete = ✅ Завершить
.archive = 🗄 Очистить / архивировать
.archive-confirm = ⚠️ Да, очистить
.delete = 🗑 Удалить акцию
.delete-confirm = Да, удалить
.cancel = Отмена
.confirm = ✅ Подтвердить
.continue = Продолжить ➡️
.leave-phone = 📱 Оставить номер телефона
.skip-phone = ⏭ Пропустить
.purchase-type = { $selected ->
[1] ✅
*[0] ◻️
} { $purchase_type }
233 changes: 214 additions & 19 deletions assets/translations/ru/messages.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,13 @@ msg-main-menu =
</blockquote>
}

msg-main-menu-how-to-connect =
<blockquote>📲 <b>Как подключиться:</b>
• 1. Скачайте приложение Happ
• 2. Нажмите «Подключиться»
• 3. Пролистайте немного вниз
• 4. Нажмите «Добавить подписку»</blockquote>

msg-menu-devices =
<b>📱 Управление устройствами</b>

Expand Down Expand Up @@ -435,6 +442,43 @@ msg-user-main =
</blockquote>
}

msg-user-delete-confirm =
<b>Вы уверены, что хотите полностью удалить пользователя?</b>

<blockquote>
Telegram ID: <code>{ NUMBER($telegram_id, useGrouping: 0) }</code>
Username: { $username ->
[0] не указан
*[HAS] @{ $username }
}
Подписка: { $subscription_status ->
[0] отсутствует
*[HAS] { $subscription_status }
}
</blockquote>

Будут удалены:
— локальный пользователь;
— локальные подписки;
— участие в акциях;
— активации промокодов;
— реферальные связи и награды;
— история сообщений рассылок;
— персональный доступ к тарифам;
— данные, связанные с VPN-подпиской.

Финансовые транзакции будут сохранены без привязки к Telegram ID.

Если пользователь есть в Remnawave, он будет удалён там тоже.

<b>Это действие нельзя отменить.</b>

msg-user-delete-input =
<b>Последнее подтверждение</b>

Введите Telegram ID <code>{ NUMBER($telegram_id, useGrouping: 0) }</code>,
чтобы полностью удалить пользователя.

msg-user-statistics =
<b>📊 Статистика пользователя</b>

Expand Down Expand Up @@ -1087,6 +1131,13 @@ msg-notifications-system = <b>⚙️ Системные уведомления</
# Subscription
msg-subscription-main = <b>💳 Подписка</b>
msg-subscription-plans = <b>📦 Выберите план</b>

msg-subscription-promocode =
<b>🎟 Активировать промокод</b>

Введите ваш промокод ниже.

Промокод будет проверен на соответствие выбранному тарифу. Если тариф ещё не выбран, вернитесь и выберите его после ввода кода.
msg-subscription-new-success = Чтобы начать пользоваться нашим сервисом, нажмите кнопку <code>`{ btn-subscription.connect }`</code> и следуйте инструкциям!
msg-subscription-renew-success = Ваша подписка продлена на { $added_duration }.

Expand Down Expand Up @@ -1160,6 +1211,11 @@ msg-subscription-confirm =

{ msg-subscription-details }

{ $promo_code ->
[0] { empty }
*[HAS] <blockquote>🎟 Промокод <code>{ $promo_code }</code> применён</blockquote>
}

{ $purchase_type ->
[RENEW] <i>⚠️ Текущая подписка будет <u>продлена</u> на выбранный срок.</i>
[CHANGE] <i>⚠️ Текущая подписка будет <u>заменена</u> выбранной без пересчета оставшегося срока.</i>
Expand Down Expand Up @@ -1252,31 +1308,170 @@ msg-importer-sync-completed =

# Promocodes
msg-promocodes-main = <b>🎟 Промокоды</b>

msg-promocodes-list = <b>📃 Список промокодов</b>

msg-promocode-code =
<b>🏷️ Введите код промокода</b>

Только латиница, цифры и спецсимволы. Максимум 64 символа.
<i>Пример: VAY20</i>

msg-promocode-reward =
<b>🎁 Введите процент скидки</b>

Целое число от 1 до 99.
<i>Пример: 20</i>

msg-promocode-allowed =
<b>📦 Выберите тариф</b>

Промокод будет привязан к выбранному тарифу.

msg-promocode-availability =
<b>✴️ Выберите аудиторию</b>

Определяет, кто может использовать промокод.

msg-promocode-type =
<b>🔢 Введите лимит использований</b>

Целое число больше 0.
<i>Пример: 100</i>

msg-promocode-lifetime =
<b>⌛ Введите срок действия</b>

Формат: <code>ДД.ММ.ГГГГ</code> или <code>ДД.ММ.ГГГГ ЧЧ:ММ</code>
<i>Пример: 31.12.2026</i>

msg-promocode-configurator =
<b>🎟 Конфигуратор промокода</b>
<b>🎟 Новый промокод — подтверждение</b>

<blockquote>
• <b>Код</b>: { $code }
• <b>Тип</b>: { promocode-type }
• <b>Доступ</b>: { availability-type }
• <b>Статус</b>: { $is_active ->
[1] 🟢 Включен
*[0] 🔴 Выключен
}
• <b>Код</b>: <code>{ $code }</code>
• <b>Скидка</b>: { $discount_percent }%
• <b>Тариф</b>: { $plan_name }
• <b>Аудитория</b>: { promo-audience }
• <b>Лимит активаций</b>: { $max_activations }
• <b>Срок действия</b>: { $expires_at_str }
</blockquote>

Проверьте параметры и нажмите «Подтвердить».

msg-promocode-view =
<b>🎟 Промокод</b>

<blockquote>
{ $promocode_type ->
[DURATION] • <b>Длительность</b>: { $reward }
[TRAFFIC] • <b>Трафик</b>: { $reward }
[DEVICES] • <b>Устройства</b>: { $reward }
[SUBSCRIPTION] • <b>Подписка</b>: { frg-plan-snapshot }
[PERSONAL_DISCOUNT] • <b>Персональная скидка</b>: { $reward }%
[PURCHASE_DISCOUNT] • <b>Скидка на покупку</b>: { $reward }%
*[OTHER] { $promocode_type }
}
• <b>Срок действия</b>: { $lifetime }
• <b>Код</b>: <code>{ $code }</code>
• <b>Скидка</b>: { $discount_percent }%
• <b>Тариф</b>: { $plan_name }
• <b>Аудитория</b>: { promo-audience }
• <b>Лимит активаций</b>: { $max_activations }
• <b>Использовано</b>: { $activations_count }
• <b>Срок действия</b>: { $expires_at_str }
• <b>Статус</b>: { $is_active ->
[1] 🟢 Активен
*[0] 🔴 Неактивен
}
</blockquote>

# Giveaways
msg-giveaways-main =
<b>🎁 Акции</b>

Создавайте акции для покупателей выбранных тарифов и сроков подписки.

msg-giveaways-list = <b>📃 Список акций</b>

msg-giveaway-name =
<b>Введите название акции</b>

Пример: <i>Розыгрыш 15 000 ₽</i>

msg-giveaway-start =
<b>Введите дату начала</b>

Формат: <code>ДД.ММ.ГГГГ</code> или <code>ДД.ММ.ГГГГ ЧЧ:ММ</code>

msg-giveaway-end =
<b>Введите дату окончания</b>

Формат: <code>ДД.ММ.ГГГГ</code> или <code>ДД.ММ.ГГГГ ЧЧ:ММ</code>

msg-giveaway-winner-count =
<b>Введите количество победителей</b>

Пример: <code>5</code>

msg-giveaway-prize =
<b>Введите сумму приза одному победителю</b>

Пример: <code>3000</code>

msg-giveaway-plan = <b>Выберите участвующий тариф</b>

msg-giveaway-duration = <b>Выберите участвующий срок подписки</b>

msg-giveaway-purchase-types =
<b>Выберите типы покупки</b>

Отметьте один или несколько вариантов.

msg-giveaway-activity =
<b>Включить акцию сразу после создания?</b>

msg-giveaway-configurator =
<b>🎁 Новая акция — подтверждение</b>

<blockquote>
Название: { $name }
Период: { $starts_at } — { $ends_at }
Победителей: { $winner_count }
Приз одному: { $prize_amount } ₽
Тариф: { $plan_name }
Срок: { $duration_days } дней
Типы покупки: { $purchase_types }
Активна: { $is_active ->
[1] да
*[0] нет
}
</blockquote>

Выберите пункт для изменения.
msg-giveaway-view =
<b>🎁 { $name }</b>

<blockquote>
Статус: { $status }
Период: { $starts_at } — { $ends_at }
Тариф: { $plan_name }
Срок: { $duration_days } дней
Типы покупки: { $purchase_types }
Участников: { $entries_count }
Победителей: { $winners_count } из { $winner_count }
Приз одному: { $prize_amount } ₽
</blockquote>

msg-giveaway-entries = <b>👥 Участники акции</b>

msg-giveaway-winners = <b>🏆 Победители акции</b>

msg-giveaway-participants-shortage =
⚠️ Уникальных участников меньше, чем запланированных победителей.

msg-giveaway-archive-confirm =
<b>Вы уверены, что хотите очистить участников и победителей этой акции?</b>

Записи будут архивированы. Это действие нельзя отменить через интерфейс.

msg-giveaway-delete-confirm =
<b>Вы уверены, что хотите полностью удалить эту акцию?</b>

Будут удалены:
— сама акция;
— участники этой акции;
— выбранные победители этой акции.

Платежи, пользователи и подписки удалены не будут.

Это действие нельзя отменить.
Loading