feat(localization): update Pro access terminology and enhance subscription messages

- Replaced instances of "подписка" with "доступ" to clarify Pro access terminology.
- Updated subscription-related messages for improved user understanding and consistency.
- Enhanced command list and bot responses to reflect changes in Pro access messaging.
This commit is contained in:
vchikalkin 2025-09-17 12:44:21 +03:00
parent 7862713a06
commit e6c823570c
7 changed files with 38 additions and 24 deletions

View File

@ -28,17 +28,18 @@ addcontact =
.description = Добавить контакт клиента
sharebot =
.description = Поделиться ботом
subscribe =
.description = Приобрести Pro доступ
pro =
.description = Информация о вашем Pro доступе
help =
.description = Список команд и поддержка
subscribe =
.description = Оформить подписку
pro =
.description = Информация о Pro подписке
commands-list =
📋 Доступные команды:
• /addcontact — добавить контакт клиента
• /sharebot — поделиться ботом
• /subscribe — оформить подписку
• /subscribe — приобрести Pro доступ
• /pro — информация о вашем Pro доступе
• /help — список команд
Откройте приложение кнопкой "Открыть", чтобы отредактировать свой профиль или создать запись
@ -92,16 +93,18 @@ err-with-details = ❌ Произошла ошибка
err-limit-exceeded = 🚫 Слишком много запросов! Подождите немного
# Сообщения о подписке
# Сообщения о доступе
msg-subscribe =
👑 Подписка Pro:
👑 Pro доступ:
• Разблокирует неограниченное количество заказов
msg-subscribe-success = ✅ Платеж успешно обработан!
msg-subscribe-error = ❌ Произошла ошибка при обработке платежа
msg-subscription-active-until = 📅 Ваша подписка активна до { $date }
msg-subscription-active-days = 📅 Осталось еще { $days } дней вашей подписки
msg-subscribe-disabled = 🚫 Подписка отключена. Все ограничения сняты! Наслаждайтесь полным доступом! 🎉
msg-subscription-active-until = 👑 Ваш Pro доступ активен до { $date }
msg-subscription-active-days = 👑 Осталось дней вашего Pro доступа: { $days }
msg-subscription-expired =
Ваш Pro доступ истек.
Воспользуйтесь командой /subscribe, чтобы получить неограниченное количество заказов
msg-subscribe-disabled = 🚫 Pro доступ отключен для всех. Ограничения сняты! Наслаждайтесь полным доступом! 🎉
# Информация о лимитах
msg-remaining-orders-this-month = 🧾 Доступно заказов в этом месяце: { $count }
msg-subscription-active-days = 📅 Осталось дней вашей подписки: { $days }
msg-remaining-orders-this-month = 🧾 Доступно заказов в этом месяце: { $count }

View File

@ -70,7 +70,7 @@ export async function subscription(conversation: Conversation<Context, Context>,
// создаём invoice
return ctx.replyWithInvoice(
'Оплата подписки',
'Оплата Pro доступа',
selectedPrice.description || '',
JSON.stringify({ period: selectedPrice.period }),
'RUB',

View File

@ -1,5 +1,6 @@
import { type Context } from '@/bot/context';
import { logHandle } from '@/bot/helpers/logging';
import { combine } from '@/utils/messages';
import { SubscriptionsService } from '@repo/graphql/api/subscriptions';
import { Composer } from 'grammy';
@ -19,10 +20,20 @@ feature.command('pro', logHandle('command-pro'), async (ctx) => {
await subscriptionsService.getSubscription({ telegramId });
if (hasActiveSubscription && remainingDays > 0) {
return ctx.reply(ctx.t('msg-subscription-active-days', { days: remainingDays }));
return ctx.reply(
combine(
ctx.t('msg-subscription-active-days', { days: remainingDays }),
remainingDays === 0 ? ctx.t('msg-subscription-expired') : '',
),
);
}
return ctx.reply(ctx.t('msg-remaining-orders-this-month', { count: remainingOrdersCount }));
return ctx.reply(
combine(
ctx.t('msg-remaining-orders-this-month', { count: remainingOrdersCount }),
remainingOrdersCount === 0 ? ctx.t('msg-subscription-expired') : '',
),
);
});
export { composer as pro };

View File

@ -31,7 +31,7 @@ export default async function ProPage() {
</div>
<h1 className="mb-6 text-4xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-6xl">
Подписка{' '}
Доступ{' '}
<span className="bg-gradient-to-r from-purple-600 to-blue-600 bg-clip-text text-transparent dark:from-purple-700 dark:to-blue-700">
Pro
</span>
@ -39,7 +39,7 @@ export default async function ProPage() {
<p className="mx-auto mb-8 max-w-2xl text-xl text-gray-600 dark:text-gray-300">
{hasActiveSubscription
? 'Ваша подписка Pro активна!'
? 'Ваш Pro доступ активен!'
: 'Разблокируйте больше возможностей'}
</p>
@ -58,7 +58,7 @@ export default async function ProPage() {
variant={canUseTrial ? 'outline' : 'default'}
>
<Link href={env.BOT_URL} rel="noopener noreferrer" target="_blank">
Оформить подписку через бота
Приобрести Pro доступ через бота
<ArrowRight className="ml-2 size-5" />
</Link>
</Button>

View File

@ -22,7 +22,7 @@ export function SubscriptionInfoBar() {
if (error) return null;
const title = isActive ? 'Подписка Pro активна' : 'Подписка неактивна';
const title = isActive ? 'Pro доступ активен' : 'Pro доступ неактивен';
let description = 'Попробуйте бесплатно';

View File

@ -39,7 +39,7 @@ export const ERRORS = {
ORDER_LIMIT_EXCEEDED_CLIENT:
'Достигнут лимит заказов у этого мастера на месяц. Попробуйте записаться позже или к другому мастеру.',
ORDER_LIMIT_EXCEEDED_MASTER:
'Достигнут лимит заказов на месяц. Оформите Pro подписку для продолжения работы.',
'Достигнут лимит заказов на месяц. Оформите Pro доступ для продолжения работы.',
OVERLAPPING_TIME: 'Время пересекается с другими заказами',
SLOT_CLOSED: 'Слот закрыт',
};

View File

@ -11,9 +11,9 @@ if (!dayjs.prototype.minMax) {
}
export const ERRORS = {
FAILED_TO_CREATE_TRIAL_SUBSCRIPTION: 'Не удалось создать пробную подписку',
SUBSCRIPTION_PRICES_NOT_FOUND: 'Цены подписки не найдены',
SUBSCRIPTION_SETTING_NOT_FOUND: 'Настройки подписки не найдены',
FAILED_TO_CREATE_TRIAL_SUBSCRIPTION: 'Не удалось оформить доступ к пробному периоду',
SUBSCRIPTION_PRICES_NOT_FOUND: 'Цены Pro доступа не найдены',
SUBSCRIPTION_SETTING_NOT_FOUND: 'Настройки Pro доступа не найдены',
TRIAL_PERIOD_ALREADY_USED: 'Пробный период уже был использован',
TRIAL_PERIOD_NOT_ACTIVE: 'Пробный период неактивен',
TRIAL_PERIOD_NOT_FOUND: 'Пробный период не найден',
@ -60,7 +60,7 @@ export class SubscriptionsService extends BaseService {
data: {
amount: subscriptionPrice.amount,
currency: 'RUB',
description: existingSubscription ? 'Продление подписки' : 'Новая подписка',
description: existingSubscription ? 'Продление Pro доступа' : 'Новая подписка',
period: subscriptionPrice.period,
source: GQL.Enum_Subscriptionhistory_Source.Payment,
state: GQL.Enum_Subscriptionhistory_State.Success,