diff --git a/handlers/keys/key_view.py b/handlers/keys/key_view.py index 33751f28..8b3fe11b 100644 --- a/handlers/keys/key_view.py +++ b/handlers/keys/key_view.py @@ -52,6 +52,7 @@ from handlers.utils import ( format_days, format_hours, format_minutes, + get_russian_month, handle_error, is_full_remnawave_cluster, ) @@ -231,7 +232,7 @@ async def process_callback_view_key(callback_query: CallbackQuery, session: Any) f"Осталось: {format_days(days)}, {format_hours(hours)}, {format_minutes(minutes)}" ) - formatted_expiry_date = expiry_date.strftime("%d %B %Y года") + formatted_expiry_date = f"{expiry_date.strftime('%d')} {get_russian_month(expiry_date)} {expiry_date.strftime('%Y')} года" response_message = key_message( final_link, formatted_expiry_date, diff --git a/handlers/utils.py b/handlers/utils.py index 189bae49..7aeec6e9 100644 --- a/handlers/utils.py +++ b/handlers/utils.py @@ -10,6 +10,7 @@ import asyncpg from aiogram.types import BufferedInputFile, InlineKeyboardMarkup, InputMediaPhoto, Message +from datetime import datetime from bot import bot from config import ADMIN_ID, DATABASE_URL from database import get_all_keys, get_servers @@ -256,3 +257,33 @@ def sanitize_key_name(key_name: str) -> str: str: Очищенное название ключа в нижнем регистре. """ return re.sub(r"[^a-z0-9@._-]", "", key_name.lower()) + + +RUSSIAN_MONTHS = { + 'January': 'Января', + 'February': 'Февраля', + 'March': 'Марта', + 'April': 'Апреля', + 'May': 'Мая', + 'June': 'Июня', + 'July': 'Июля', + 'August': 'Августа', + 'September': 'Сентября', + 'October': 'Октября', + 'November': 'Ноября', + 'December': 'Декабря' +} + + +def get_russian_month(date: datetime) -> str: + """ + Преобразует английское название месяца в русское. + + Args: + date: Объект datetime, из которого извлекается месяц. + + Returns: + Название месяца на русском языке. + """ + english_month = date.strftime("%B") + return RUSSIAN_MONTHS.get(english_month, english_month)