@@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-07-08 16:09+0300\n" +"POT-Creation-Date: 2025-11-05 13:41+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -20,50 +20,6 @@ msgstr "" "n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || " "(n%100>=11 && n%100<=14)? 2 : 3);\n" -#: achievements/admin.py:11 achievements/models.py:19 ml_model/models.py:45 -#: stories/models.py:18 -msgid "Icon" -msgstr "Миниатюра" - -#: achievements/admin.py:22 achievements/models.py:29 achievements/models.py:37 -msgid "Achievement" -msgstr "Достижение" - -#: achievements/apps.py:8 achievements/models.py:30 -msgid "Achievements" -msgstr "Достижения" - -#: achievements/models.py:14 ml_model/models.py:18 ml_model/models.py:38 -#: ml_model/models.py:70 ml_model/models.py:182 -msgid "Slug" -msgstr "Ярлык" - -#: achievements/models.py:16 ml_model/models.py:68 ml_model/models.py:181 -#: ml_model/models.py:270 payments/models/payment.py:52 -msgid "Description" -msgstr "Описание" - -#: achievements/models.py:43 authentication/models/business_host.py:22 -#: authentication/models/email_token.py:12 authentication/models/user.py:246 -#: authentication/models/user.py:247 authentication/models/user_telegram.py:22 -#: authentication/models/user_vk.py:12 payments/models/invoice.py:15 -#: payments/models/payment.py:26 payments/models/payment_plan.py:61 -msgid "User" -msgstr "Пользователь" - -#: achievements/models.py:46 -msgid "Issued at" -msgstr "Когда выдано" - -#: achievements/models.py:49 -#, python-format -msgid "Achievement %(achievement_title)s пользователя %(username)s" -msgstr "Достижение %(achievement_title)s пользователя %(username)s" - -#: achievements/models.py:55 achievements/models.py:56 -msgid "Issued achievement" -msgstr "Выданное достижение" - #: authentication/exceptions/business_account.py:6 msgid "Business account not found" msgstr "Сотрудник не найден" @@ -74,6 +30,16 @@ msgstr "Сотрудник не найден" msgid "You do not have sufficient rights to perform this action" msgstr "У вас недостаточно прав для выполнения этого действия" +#: authentication/exceptions/business_host_exceptions/already_has_plan.py:11 +msgid "" +"You already have an active tariff plan. You must request a cancellation of " +"your current tariff plan, after which you will be able to create a Corporate " +"Account." +msgstr "" +"У вас уже активен тарифный план. Необходимо запросить аннулирование текущего " +"тарифного плана, после чего у вас появится возможность создать Корпоративный " +"Аккаунт" + #: authentication/exceptions/business_host_exceptions/not_allowed_ip.py:6 msgid "Current IP not allowed in this context" msgstr "Текущий IP не разрешен в данном контексте" @@ -86,6 +52,10 @@ msgstr "Шаблон письма не найден" msgid "There was an unknown error while sending an email" msgstr "При отправке письма произошла неизвестная ошибка" +#: authentication/exceptions/email_exceptions/token_not_found.py:6 +msgid "Email token not found. Please contact support" +msgstr "E-mail токен не найден. Пожалуйста, свяжитесь со службой поддержки" + #: authentication/exceptions/email_token.py:6 #, fuzzy #| msgid "No email token provided" @@ -96,7 +66,7 @@ msgstr "Токен не получен" msgid "Wrong email" msgstr "Неверный email" -#: authentication/exceptions/user.py:11 backend/urls.py:41 +#: authentication/exceptions/user.py:11 backend/urls.py:46 msgid "Wrong password" msgstr "Неверный пароль" @@ -166,8 +136,7 @@ msgstr "Дочерние Бизнес Аккаунты" #: authentication/models/business_group.py:8 ml_model/models.py:17 #: ml_model/models.py:37 ml_model/models.py:61 ml_model/models.py:269 -#: payments/models/payment_plan.py:27 stories/models.py:12 stories/models.py:35 -#: tools/chats/models.py:9 +#: payments/models/payment_plan.py:27 tools/chats/models.py:9 msgid "Title" msgstr "Название" @@ -179,11 +148,20 @@ msgstr "Бизнес Группа" msgid "Business Groups" msgstr "Бизнес Группы" +#: authentication/models/business_host.py:22 +#: authentication/models/email_token.py:13 authentication/models/user.py:225 +#: authentication/models/user.py:226 authentication/models/user_telegram.py:22 +#: authentication/models/user_vk.py:12 payments/admin.py:35 +#: payments/admin.py:89 payments/models/invoice.py:15 +#: payments/models/payment.py:26 payments/models/payment_plan.py:61 +msgid "User" +msgstr "Пользователь" + #: authentication/models/business_host.py:31 msgid "Affiliated by" msgstr "Кем привлечена" -#: authentication/models/business_host.py:36 authentication/models/user.py:152 +#: authentication/models/business_host.py:36 authentication/models/user.py:138 #: authentication/models/whitelist.py:16 ml_model/models.py:167 #: payments/models/promocode.py:85 msgid "Is active" @@ -326,55 +304,60 @@ msgstr "Админ" msgid "Security" msgstr "Безопасность" -#: authentication/models/email_token.py:15 ml_model/models.py:271 +#: authentication/models/email_token.py:16 ml_model/models.py:271 msgid "Key" msgstr "Ключ" -#: authentication/models/email_token.py:18 +#: authentication/models/email_token.py:22 msgid "Email Token" msgstr "Email Токен" -#: authentication/models/email_token.py:19 +#: authentication/models/email_token.py:23 msgid "Email Tokens" msgstr "Email Токены" -#: authentication/models/user.py:125 authentication/models/user_telegram.py:9 +#: authentication/models/user.py:126 authentication/models/user_telegram.py:9 msgid "First name" msgstr "Имя" -#: authentication/models/user.py:132 authentication/models/user_telegram.py:10 +#: authentication/models/user.py:133 authentication/models/user_telegram.py:10 msgid "Last name" msgstr "Фамилия" -#: authentication/models/user.py:139 authentication/models/user_telegram.py:11 +#: authentication/models/user.py:135 authentication/models/user_telegram.py:11 msgid "Username" msgstr "Имя пользователя" -#: authentication/models/user.py:146 +#: authentication/models/user.py:136 msgid "Email" msgstr "Email" -#: authentication/models/user.py:154 +#: authentication/models/user.py:140 msgid "Is staff" msgstr "Административный" -#: authentication/models/user.py:155 +#: authentication/models/user.py:141 msgid "Is superuser" msgstr "Суперюзер" -#: authentication/models/user.py:156 +#: authentication/models/user.py:142 msgid "Is email confirmed" msgstr "Email подтвержден" -#: authentication/models/user.py:157 +#: authentication/models/user.py:143 msgid "Is subscribed" msgstr "Подписан на уведомления" -#: authentication/models/user.py:163 +#: authentication/models/user.py:145 msgid "Picture name" msgstr "Имя аватара" -#: authentication/models/user.py:172 authentication/models/utm.py:21 +#: authentication/models/user.py:147 tools/chats/models.py:13 +#: tools/public_api/models.py:45 +msgid "Is deleted" +msgstr "Удален" + +#: authentication/models/user.py:152 authentication/models/utm.py:21 msgid "UTM" msgstr "UTM" @@ -404,7 +387,7 @@ msgstr "Номер телефона" #: authentication/models/user_telegram.py:27 #: authentication/models/user_vk.py:14 payments/models/invoice.py:11 -#: stories/models.py:15 tools/chats/models.py:10 +#: tools/chats/models.py:10 msgid "Created at" msgstr "Когда создан" @@ -461,6 +444,24 @@ msgstr "Вайтлист для отмены политик" msgid "Whitelists to cancel policies" msgstr "Вайтлисты для отмены политик" +#: authentication/security.py:35 +#, fuzzy +#| msgid "Hidden" +msgid "Forbidden" +msgstr "Скрытый" + +#: authentication/security.py:48 +msgid "Access token is expired" +msgstr "Срок действия токена доступа истек" + +#: authentication/security.py:61 +msgid "User not found" +msgstr "Пользователь не найден" + +#: authentication/security.py:99 authentication/security.py:130 +msgid "Access token expired or does not exist" +msgstr "Токен доступа просрочен или не существует" + #: authentication/selectors/business_host_selector.py:42 #: authentication/selectors/business_host_selector.py:85 msgid "User haven't rights to access host account information" @@ -483,10 +484,6 @@ msgstr "Бизнес-аккаунт для данного юзера не най msgid "Invited account can either accept or reject an invitation" msgstr "Приглашенный аккаунт может принять или отклонить приглашение" -#: authentication/services/business_account_service.py:83 -msgid "Account is already confirmed" -msgstr "Аккаунт уже подтвержден" - #: authentication/services/business_account_service.py:102 #, fuzzy #| msgid "Passwords do not match" @@ -497,11 +494,11 @@ msgstr "Пароли не совпадают" msgid "You cannot change the password of an unconfirmed e-mail user." msgstr "Вы не можете изменить пароль неподтвержденного по e-mail пользователя." -#: authentication/services/business_host_service.py:149 +#: authentication/services/business_host_service.py:159 msgid "No user_email is provided" msgstr "" -#: authentication/services/email_service.py:48 +#: authentication/services/email_service.py:47 msgid "Error occured when proceed email sending" msgstr "Случилась ошибка во время отправки email" @@ -509,68 +506,68 @@ msgstr "Случилась ошибка во время отправки email" msgid "Regular users cannot send introductory letters" msgstr "Обычные пользователи не могут отсылать письма" -#: authentication/services/email_service.py:162 +#: authentication/services/email_service.py:160 msgid "Regular users cannot send invitation letters" msgstr "Обычные пользователи не могут отправлять письма для приглашений" -#: authentication/services/user_services.py:166 +#: authentication/services/user_services.py:164 msgid "No user like this in a database" msgstr "Такой пользователь отсутствует" -#: authentication/services/user_services.py:183 +#: authentication/services/user_services.py:181 msgid "token is not provided" msgstr "" -#: authentication/services/user_services.py:207 +#: authentication/services/user_services.py:205 msgid "No email token provided" msgstr "Токен не получен" -#: authentication/services/user_services.py:211 +#: authentication/services/user_services.py:209 msgid "No token like this in a database" msgstr "Не найдено такого токена" -#: authentication/services/user_services.py:217 +#: authentication/services/user_services.py:215 msgid "Passwords do not match" msgstr "Пароли не совпадают" -#: authentication/services/user_services.py:255 +#: authentication/services/user_services.py:253 msgid "Current password is wrong" msgstr "Текущий пароль неверен" -#: authentication/views.py:120 authentication/views.py:229 -#: authentication/views.py:325 authentication/views.py:356 +#: authentication/views.py:121 authentication/views.py:230 +#: authentication/views.py:326 authentication/views.py:357 msgid "Server error occured" msgstr "Случилась серверная ошибка" -#: authentication/views.py:225 +#: authentication/views.py:226 msgid "Email not found" msgstr "Email не найден" -#: authentication/views.py:321 +#: authentication/views.py:322 msgid "Business account has been deleted" msgstr "Сотрудник успешно удален" -#: authentication/views.py:345 +#: authentication/views.py:346 msgid "Business account has been reinvited" msgstr "Повторное приглашение сотруднику успешно отправлено" -#: authentication/views.py:467 +#: authentication/views.py:469 msgid "Could not confirm email, please try again." msgstr "Невозможно подтвердить email, попробуйте позже" -#: backend/urls.py:31 +#: backend/urls.py:36 msgid "Requested object does not exists" msgstr "" -#: backend/urls.py:36 +#: backend/urls.py:41 msgid "Token is invalid" msgstr "" -#: backend/urls.py:46 +#: backend/urls.py:51 msgid "Wrong username" msgstr "Неверное имя пользователя" -#: messages/serializers.py:42 +#: messages/serializers.py:50 #, python-format msgid "The file size cannot exceed %(max_mb_size)d MB" msgstr "Файл не может быть размером больше %(max_mb_size)d мегабайт" @@ -585,10 +582,28 @@ msgstr "" "Модель в настоящее время неактивна. Пожалуйста, повторите попытку позже." #: ml_model/exceptions.py:22 +msgid "Your request was blocked by our moderation system" +msgstr "Ваш запрос был заблокирован нашей системой модерации" + +#: ml_model/exceptions.py:33 +msgid "" +"Image size %(cw)dx%(ch)d is not supported. Please rotate image to " +"%(rw)dx%(rh)d" +msgstr "" +"Размер изображения %(cw)dx%(ch)d не поддерживается. Пожалуйста, переверните " +"до %(rw)dx%(rh)d" + +#: ml_model/exceptions.py:37 +msgid "Image size %(cw)sx%(ch)s is not supported. Required size: %(rw)sx%(rh)s" +msgstr "" +"Размер изображения %(cw)sx%(ch)s не поддерживается. Требуемый размер: " +"%(rw)sx%(rh)s" + +#: ml_model/exceptions.py:42 msgid "The model is not responding" msgstr "Модель не отвечает" -#: ml_model/exceptions.py:31 +#: ml_model/exceptions.py:51 #, python-format msgid "" "The attached file format is not supported. Available formats: " @@ -597,18 +612,27 @@ msgstr "" "Формат вложенного файла не поддерживается. Доступные форматы: " "%(available_extensions)s." -#: ml_model/exceptions.py:37 +#: ml_model/exceptions.py:57 msgid "The length of the context has been exceeded." msgstr "Длина контекста превышена." -#: ml_model/exceptions.py:42 +#: ml_model/exceptions.py:62 msgid "Jinja template not found" msgstr "Jinja-шаблон не найден" -#: ml_model/exceptions.py:47 +#: ml_model/exceptions.py:67 msgid "There was an unknown error while rendering a template" msgstr "При рендеринге шаблона произошла неизвестная ошибка" +#: ml_model/exceptions.py:72 +msgid "The neuron model does not exist" +msgstr "Нейронная модель не существует" + +#: ml_model/models.py:18 ml_model/models.py:38 ml_model/models.py:70 +#: ml_model/models.py:182 +msgid "Slug" +msgstr "Ярлык" + #: ml_model/models.py:28 ml_model/models.py:80 msgid "Category" msgstr "Категория" @@ -621,6 +645,10 @@ msgstr "Категории" msgid "Not SVG-pictures not allowed" msgstr "Нельзя использовать не SVG-картинки" +#: ml_model/models.py:45 +msgid "Icon" +msgstr "Миниатюра" + #: ml_model/models.py:52 msgid "Model Tag" msgstr "Тег модели" @@ -633,6 +661,11 @@ msgstr "Теги модели" msgid "Alternative Titles" msgstr "Альтернативные названия" +#: ml_model/models.py:68 ml_model/models.py:181 ml_model/models.py:270 +#: payments/models/payment.py:52 +msgid "Description" +msgstr "Описание" + #: ml_model/models.py:72 msgid "Fill automatically, don't touch" msgstr "Заполняется автоматически, не трогать" @@ -649,7 +682,7 @@ msgstr "Теги" msgid "Neuron Model" msgstr "Нейронная Модель" -#: ml_model/models.py:156 ml_model/models.py:403 +#: ml_model/models.py:156 ml_model/models.py:403 payments/admin.py:95 msgid "Model" msgstr "Модель" @@ -687,7 +720,7 @@ msgstr "Привязка к версиям" msgid "Text" msgstr "Текст" -#: ml_model/models.py:222 stories/models.py:36 +#: ml_model/models.py:222 msgid "Image" msgstr "Картинка" @@ -874,16 +907,16 @@ msgstr "Инструкция Модели" msgid "Model Instructions" msgstr "Инструкции Моделей" -#: ml_model/selectors/ml_models_selector.py:81 +#: ml_model/selectors/ml_models_selector.py:106 msgid "no model by this id" msgstr "Не найдено моделей по этому ID" -#: ml_model/services/chatgpt.py:138 +#: ml_model/services/chatgpt.py:187 msgid "Unable to recognize the image. (Supported formats are PNG, JPG, JPEG)" msgstr "" "Невозможно распознать изображение. (Поддерживаемые форматы: PNG, JPG, JPEG)" -#: ml_model/services/chatgpt.py:163 +#: ml_model/services/chatgpt.py:212 msgid "No matching version found" msgstr "Соответствующая версия не найдена" @@ -896,6 +929,18 @@ msgstr "Неизвестный бакет для загрузки" msgid "No image given for improving" msgstr "Нет изображения для улучшения" +#: ml_model/views.py:65 +msgid "Model data cannot be retrieved" +msgstr "Невозможно получить данные модели" + +#: payments/admin.py:33 payments/admin.py:67 payments/admin.py:87 +msgid "You can search by user email, exacted company name" +msgstr "Вы можете осуществлять поиск по e-mail пользователя, точному названию компании" + +#: payments/admin.py:38 payments/admin.py:92 +msgid "Missing" +msgstr "Отсутствующий" + #: payments/apps.py:9 payments/models/payment.py:60 msgid "Payments" msgstr "Платежи" @@ -909,6 +954,10 @@ msgstr "" "Баланс: %(balance).2f токенов; Нужно: %(required)s токенов; Нужно еще: " "%(needed)s токенов" +#: payments/exceptions/payer_not_found.py:6 +msgid "The payer does not exist" +msgstr "Плательщик не существует" + #: payments/models/invoice.py:23 msgid "Generative Model" msgstr "Генеративная модель" @@ -1093,42 +1142,6 @@ msgstr "Пользовательский репорт" msgid "User Reports" msgstr "Пользовательские репорты" -#: stories/apps.py:8 stories/models.py:26 -msgid "Stories" -msgstr "Истории" - -#: stories/models.py:13 -msgid "Is published" -msgstr "Опубликовано" - -#: stories/models.py:25 stories/models.py:40 -msgid "Story" -msgstr "История" - -#: stories/models.py:49 stories/models.py:59 -msgid "Page" -msgstr "Страница" - -#: stories/models.py:50 -msgid "Pages" -msgstr "Страницы" - -#: stories/models.py:54 -msgid "Label" -msgstr "Метка" - -#: stories/models.py:55 -msgid "Redirect URL" -msgstr "URL перехода" - -#: stories/models.py:64 -msgid "Widget" -msgstr "Виджет" - -#: stories/models.py:65 -msgid "Widgets" -msgstr "Виджеты" - #: tools/apps.py:9 msgid "Tools" msgstr "Инструменты" @@ -1149,11 +1162,8 @@ msgstr "Публичный API" msgid "Media" msgstr "Медиа" -#: tools/apps.py:44 -msgid "Feed" -msgstr "Шейр пользователей" - -#: tools/chats/apis.py:180 tools/public_api/views/base.py:90 +#: tools/chats/apis.py:178 tools/media/apis.py:161 +#: tools/public_api/views/base.py:103 msgid "" "Error occured when create generation. It may cause NSFW-content not allowed, " "retry again" @@ -1161,10 +1171,6 @@ msgstr "" "Случилась ошибка во время генерации. Она может возникать из-за того, что " "NSFW-контент запрещен. Попробуйте снова" -#: tools/chats/models.py:13 tools/public_api/models.py:45 -msgid "Is deleted" -msgstr "Удален" - #: tools/chats/models.py:17 #, python-format msgid "Chat %(id)s" @@ -1194,76 +1200,95 @@ msgstr "API Ключ" msgid "API Keys" msgstr "API Ключи" -#: tools/public_api/views/base.py:58 +#: tools/public_api/views/base.py:66 msgid "Key limit exceeded" msgstr "Превышен лимит по ключу" -#: tools/public_api/views/base.py:63 +#: tools/public_api/views/base.py:71 msgid "Model is blocked by outdating or temporary block, please retry later" msgstr "" "Модель заблокирована, т.к закончила обновляться или временно заблокирована, " "попробуйте позже" -#~ msgid "Points" -#~ msgstr "Поинты" +#: tools/public_api/views/base.py:78 +msgid "The request must not be empty" +msgstr "Запрос не должен быть пустым" -msgid "Access token is expired" -msgstr "Срок действия токена доступа истек" +#: tools/public_api/views/ml_service.py:65 +msgid "You must provide a model parameter" +msgstr "Необходимо указать параметр 'model'" + +#: tools/public_api/views/ml_service.py:80 +msgid "Missing required parameter: 'messages'" +msgstr "Отсутствует обязательный параметр: 'messages'" -msgid "Token prefix is missing" -msgstr "Отсутствует префикс токена" +#: tools/public_api/views/ml_service.py:130 +msgid "Model not found" +msgstr "Модель не найдена" -msgid "Access token expired or does not exist" -msgstr "Токен доступа просрочен или не существует" +#~ msgid "Achievement" +#~ msgstr "Достижение" -msgid "Model data cannot be retrieved" -msgstr "Невозможно получить данные модели" +#~ msgid "Achievements" +#~ msgstr "Достижения" -msgid "Message" -msgstr "Сообщение" +#~ msgid "Issued at" +#~ msgstr "Когда выдано" -msgid "Detail" -msgstr "Подробности" +#, python-format +#~ msgid "Achievement %(achievement_title)s пользователя %(username)s" +#~ msgstr "Достижение %(achievement_title)s пользователя %(username)s" -msgid "Message error" -msgstr "Ошибка сообщения" +#~ msgid "Issued achievement" +#~ msgstr "Выданное достижение" -msgid "Message errors" -msgstr "Ошибки сообщения" +#~ msgid "Account is already confirmed" +#~ msgstr "Аккаунт уже подтвержден" -msgid "The payer does not exist" -msgstr "Плательщик не существует" +#~ msgid "Stories" +#~ msgstr "Истории" -msgid "The request must not be empty" -msgstr "Запрос не должен быть пустым" +#~ msgid "Is published" +#~ msgstr "Опубликовано" -msgid "Your request was blocked by our moderation system" -msgstr "Ваш запрос был заблокирован нашей системой модерации" +#~ msgid "Story" +#~ msgstr "История" -msgid "Image size %dx%d is not supported. Please rotate image to %dx%d" -msgstr "Размер изображения %dx%d не поддерживается. Пожалуйста, переверните до %dx%d" +#~ msgid "Page" +#~ msgstr "Страница" -msgid "Image size %dx%d is not supported. Required size: %dx%d" -msgstr "Размер изображения %dx%d не поддерживается. Требуемый размер: %dx%d" +#~ msgid "Pages" +#~ msgstr "Страницы" -msgid "You must provide a model parameter" -msgstr "Необходимо указать параметр 'model'" +#~ msgid "Label" +#~ msgstr "Метка" -msgid "Missing required parameter: 'messages'" -msgstr "Отсутствует обязательный параметр: 'messages'" +#~ msgid "Redirect URL" +#~ msgstr "URL перехода" -msgid "The neuron model does not exist" -msgstr "Нейронная модель не существует" +#~ msgid "Widget" +#~ msgstr "Виджет" -msgid "Email token not found. Please contact support" -msgstr "E-mail токен не найден. Пожалуйста, свяжитесь со службой поддержки" +#~ msgid "Widgets" +#~ msgstr "Виджеты" -msgid "Model not found" -msgstr "Модель не найдена" +#~ msgid "Feed" +#~ msgstr "Шейр пользователей" -msgid "" -"You already have an active tariff plan. You must request a cancellation of your current tariff plan, " -"after which you will be able to create a Corporate Account." -msgstr "" -"У вас уже активен тарифный план. Необходимо запросить аннулирование текущего тарифного плана, " -"после чего у вас появится возможность создать Корпоративный Аккаунт" +#~ msgid "Points" +#~ msgstr "Поинты" + +#~ msgid "Token prefix is missing" +#~ msgstr "Отсутствует префикс токена" + +#~ msgid "Message" +#~ msgstr "Сообщение" + +#~ msgid "Detail" +#~ msgstr "Подробности" + +#~ msgid "Message error" +#~ msgstr "Ошибка сообщения" + +#~ msgid "Message errors" +#~ msgstr "Ошибки сообщения" @@ -24,19 +24,18 @@ class RequestBlocked(Exception): class UnsupportedSize(Exception): def __init__(self, current_size: tuple[int, int], required_size: tuple[int, int]): - self.current_size = current_size - self.required_size = required_size + self.current_size = dict(zip(('cw', 'ch'), current_size)) + self.required_size = dict(zip(('rw', 'rh'), required_size)) def __str__(self): - if self.current_size == self.required_size[::-1]: - return _('Image size %dx%d is not supported. Please rotate image to %dx%d') % ( - *self.current_size, *self.required_size - ) - else: - return _('Image size %dx%d is not supported. Required size: %dx%d') % ( - *self.current_size, *self.required_size - ) - + if tuple(self.current_size.values()) == tuple(reversed(self.required_size.values())): + return _( + 'Image size %(cw)dx%(ch)d is not supported. ' + 'Please rotate image to %(rw)dx%(rh)d' + ) % (self.current_size | self.required_size) + return _( + 'Image size %(cw)sx%(ch)s is not supported. Required size: %(rw)sx%(rh)s' + ) % (self.current_size | self.required_size) class ModelTimeoutError(Exception): def __str__(self):