From b5ef05c01a07052dc557c1bed69bbc80c581d6c6 Mon Sep 17 00:00:00 2001 From: Kostiantyn Kriuchkov <36363097+Latand@users.noreply.github.com> Date: Sun, 1 Oct 2023 15:29:18 +0300 Subject: [PATCH] Corrected grammatical errors, improved sentence structures, translation for migration 2.x-3.x (#1302) * Corrected grammatical errors, improved sentence structures for clarity, added translation to migration_2_to_3.rst * add changelog * Update method name in docs for error handling * Update migration_2_to_3.rst Co-authored-by: Oleg A. * Update migration_2_to_3.rst Co-authored-by: Oleg A. * Update migration_2_to_3.rst Co-authored-by: Oleg A. * Update docs/locale/uk_UA/LC_MESSAGES/api/methods/set_sticker_set_thumb.po Co-authored-by: Oleg A. * rollback unnecessary change for error attribute --------- Co-authored-by: Oleg A. --- CHANGES/1302.doc | 1 + .../api/methods/set_sticker_set_thumb.po | 54 +- .../LC_MESSAGES/dispatcher/dispatcher.po | 13 +- .../LC_MESSAGES/dispatcher/filters/index.po | 145 +++--- .../uk_UA/LC_MESSAGES/migration_2_to_3.po | 467 +++++++++++------- .../uk_UA/LC_MESSAGES/utils/media_group.po | 291 +++++++++++ docs/migration_2_to_3.rst | 123 ++--- 7 files changed, 776 insertions(+), 318 deletions(-) create mode 100644 CHANGES/1302.doc create mode 100644 docs/locale/uk_UA/LC_MESSAGES/utils/media_group.po diff --git a/CHANGES/1302.doc b/CHANGES/1302.doc new file mode 100644 index 00000000..80cc5492 --- /dev/null +++ b/CHANGES/1302.doc @@ -0,0 +1 @@ +Corrected grammatical errors, improved sentence structures, translation for migration 2.x-3.x \ No newline at end of file diff --git a/docs/locale/uk_UA/LC_MESSAGES/api/methods/set_sticker_set_thumb.po b/docs/locale/uk_UA/LC_MESSAGES/api/methods/set_sticker_set_thumb.po index 8e279db0..786b6309 100644 --- a/docs/locale/uk_UA/LC_MESSAGES/api/methods/set_sticker_set_thumb.po +++ b/docs/locale/uk_UA/LC_MESSAGES/api/methods/set_sticker_set_thumb.po @@ -3,19 +3,20 @@ # This file is distributed under the same license as the aiogram package. # FIRST AUTHOR , 2022. # -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: aiogram \n" +"Project-Id-Version: aiogram\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-11 01:52+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2023-06-01 20:49+0300\n" +"PO-Revision-Date: 2023-09-14 17:37+0300\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.11.0\n" +"Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.3.2\n" #: ../../api/methods/set_sticker_set_thumb.rst:3 msgid "setStickerSetThumb" @@ -23,15 +24,38 @@ msgstr "" #: ../../api/methods/set_sticker_set_thumb.rst:5 msgid "Returns: :obj:`bool`" -msgstr "" +msgstr "Повертає: :obj:`bool`" + +#: aiogram.methods.set_sticker_set_thumb.SetStickerSetThumbnail:1 of +msgid "Use this method to set the thumbnail of a regular or mask sticker set. The format of the thumbnail file must match the format of the stickers in the set. Returns :code:`True` on success." +msgstr "Використовуйте цей метод, щоб встановити мініатюру звичайного або маскового набору стікерів. Формат файлу мініатюри повинен відповідати формату стікерів у наборі. Повертає :code:`True` при успіху." + +#: aiogram.methods.set_sticker_set_thumb.SetStickerSetThumbnail:3 of +msgid "Source: https://core.telegram.org/bots/api#setstickersetthumbnail" +msgstr "Джерело: https://core.telegram.org/bots/api#setstickersetthumbnail" + +#: ../../docstring +#: aiogram.methods.set_sticker_set_thumb.SetStickerSetThumbnail.name:1 of +msgid "Sticker set name" +msgstr "Назва набору стікерів" + +#: ../../docstring +#: aiogram.methods.set_sticker_set_thumb.SetStickerSetThumbnail.user_id:1 of +msgid "User identifier of the sticker set owner" +msgstr "Ідентифікатор користувача власника набору стікерів " + +#: ../../docstring +#: aiogram.methods.set_sticker_set_thumb.SetStickerSetThumbnail.thumbnail:1 of +msgid "A **.WEBP** or **.PNG** image with the thumbnail, must be up to 128 kilobytes in size and have a width and height of exactly 100px, or a **.TGS** animation with a thumbnail up to 32 kilobytes in size (see `https://core.telegram.org/stickers#animated-sticker-requirements `_`https://core.telegram.org/stickers#animated-sticker-requirements `_ for animated sticker technical requirements), or a **WEBM** video with the thumbnail up to 32 kilobytes in size; see `https://core.telegram.org/stickers#video-sticker-requirements `_`https://core.telegram.org/stickers#video-sticker-requirements `_ for video sticker technical requirements. Pass a *file_id* as a String to send a file that already exists on the Telegram servers, pass an HTTP URL as a String for Telegram to get a file from the Internet, or upload a new one using multipart/form-data. :ref:`More information on Sending Files » `. Animated and video sticker set thumbnails can't be uploaded via HTTP URL. If omitted, then the thumbnail is dropped and the first sticker is used as the thumbnail." +msgstr "Зображення у форматі **.WEBP** або **.PNG** з мініатюрою має бути розміром до 128 кілобайт і мати ширину та висоту рівно 100 пікселів, або анімацією у форматі **.TGS** з мініатюрою розміром до 32 кілобайт (див. `https://core.telegram.org/stickers#animated-sticker-requirements `_`https://core.telegram.org/stickers#animated-sticker-requirements `_ технічні вимоги до анімованих наліпок), або **WEBM** відео з мініатюрою розміром до 32 кілобайт; дивіться `https://core.telegram.org/stickers#video-sticker-requirements `_`https://core.telegram.org/stickers#video-sticker-requirements `_ технічні вимоги до відео наліпок. Передайте *file_id* як рядок, щоб надіслати файл, який вже існує на серверах Telegram, передайте HTTP URL як рядок, щоб Telegram отримав файл з Інтернету, або завантажте новий файл за допомогою мультичастини/форма-даних. :ref:`Додаткова інформація про надсилання файлів \" `. Ескізи анімованих і відео-наборів наклейок не можуть бути завантажені через HTTP URL. Якщо цей параметр не вказано, то мініатюру буде вилучено, а замість неї буде використано першу наліпку." #: ../../api/methods/set_sticker_set_thumb.rst:14 msgid "Usage" -msgstr "" +msgstr "Використання" #: ../../api/methods/set_sticker_set_thumb.rst:17 msgid "As bot method" -msgstr "" +msgstr "Як метод в bot" #: ../../api/methods/set_sticker_set_thumb.rst:25 msgid "Method as object" @@ -39,12 +63,10 @@ msgstr "" #: ../../api/methods/set_sticker_set_thumb.rst:27 msgid "Imports:" -msgstr "" +msgstr "Імпорти:" #: ../../api/methods/set_sticker_set_thumb.rst:29 -msgid "" -":code:`from aiogram.methods.set_sticker_set_thumb import " -"SetStickerSetThumb`" +msgid ":code:`from aiogram.methods.set_sticker_set_thumb import SetStickerSetThumb`" msgstr "" #: ../../api/methods/set_sticker_set_thumb.rst:30 @@ -53,11 +75,11 @@ msgstr "" #: ../../api/methods/set_sticker_set_thumb.rst:33 msgid "With specific bot" -msgstr "" +msgstr "З конкретним bot" #: ../../api/methods/set_sticker_set_thumb.rst:40 msgid "As reply into Webhook in handler" -msgstr "" +msgstr "Як відповідь у Webhook в обробнику" #~ msgid "" #~ "Use this method to set the " diff --git a/docs/locale/uk_UA/LC_MESSAGES/dispatcher/dispatcher.po b/docs/locale/uk_UA/LC_MESSAGES/dispatcher/dispatcher.po index 099f6e08..6ec3c401 100644 --- a/docs/locale/uk_UA/LC_MESSAGES/dispatcher/dispatcher.po +++ b/docs/locale/uk_UA/LC_MESSAGES/dispatcher/dispatcher.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: aiogram\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-26 23:17+0300\n" +"POT-Creation-Date: 2023-09-14 17:21+0300\n" "PO-Revision-Date: 2022-12-10 19:44+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -30,9 +30,10 @@ msgstr "" "інших маршрутизаторів до диспетчера." #: ../../dispatcher/dispatcher.rst:7 +#, fuzzy msgid "" "Here is only listed base information about Dispatcher. All about writing " -"handlers, filters and etc. you can found in next pages:" +"handlers, filters and etc. you can find in next pages:" msgstr "" "Тут наведена лише базова інформація про диспетчер. Усе про написання " "обробників, фільтрів і т.п. ви можете знайти на наступних сторінках:" @@ -142,7 +143,8 @@ msgid "contextual data" msgstr "контекстні дані" #: aiogram.dispatcher.dispatcher.Dispatcher.run_polling -#: aiogram.dispatcher.dispatcher.Dispatcher.start_polling of +#: aiogram.dispatcher.dispatcher.Dispatcher.start_polling +#: aiogram.dispatcher.dispatcher.Dispatcher.stop_polling of msgid "Returns" msgstr "Повертає" @@ -161,6 +163,10 @@ msgid "" "used update types are enabled (resolved from handlers)" msgstr "" +#: aiogram.dispatcher.dispatcher.Dispatcher.stop_polling:1 of +msgid "Execute this method if you want to stop polling programmatically" +msgstr "" + #: ../../dispatcher/dispatcher.rst:18 msgid "Simple usage" msgstr "Просте застосування" @@ -190,3 +196,4 @@ msgstr "" #~ msgid "`Observer `__" #~ msgstr "`Observer `__" + diff --git a/docs/locale/uk_UA/LC_MESSAGES/dispatcher/filters/index.po b/docs/locale/uk_UA/LC_MESSAGES/dispatcher/filters/index.po index efde70b7..a19bb7a1 100644 --- a/docs/locale/uk_UA/LC_MESSAGES/dispatcher/filters/index.po +++ b/docs/locale/uk_UA/LC_MESSAGES/dispatcher/filters/index.po @@ -5,100 +5,103 @@ # msgid "" msgstr "" -"Project-Id-Version: aiogram\n" +"Project-Id-Version: aiogram\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-10-18 01:50+0300\n" +"POT-Creation-Date: 2023-09-14 17:21+0300\n" "PO-Revision-Date: 2022-10-25 15:53+0300\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.10.3\n" -"X-Generator: Poedit 3.1.1\n" +"Generated-By: Babel 2.12.1\n" -#: ../../dispatcher/filters/index.rst:3 +#: ../../dispatcher/filters/index.rst:5 msgid "Filtering events" msgstr "Фільтрування подій" -#: ../../dispatcher/filters/index.rst:5 +#: ../../dispatcher/filters/index.rst:7 +#, fuzzy msgid "" -"Filters is needed for routing updates to the specific handler. Searching of " -"handler is always stops on first match set of filters are pass." +"Filters is needed for routing updates to the specific handler. Searching " +"of handler is always stops on first match set of filters are pass. By " +"default, all handlers has empty set of filters, so all updates will be " +"passed to first handler that has empty set of filters." msgstr "" "Фільтри потрібні для маршрутизації оновлень до конкретного обробника " -"(handler) . Пошук обробника (handler) завжди зупиняється після першого збігу " -"набору фільтрів." - -#: ../../dispatcher/filters/index.rst:8 -msgid "*aiogram* has some builtin useful filters." -msgstr "*aiogram* має декілька вбудованих корисних фільтрів." +"(handler) . Пошук обробника (handler) завжди зупиняється після першого " +"збігу набору фільтрів." #: ../../dispatcher/filters/index.rst:11 +#, fuzzy +msgid "*aiogram* has some builtin useful filters or you can write own filters." +msgstr "*aiogram* має декілька вбудованих корисних фільтрів." + +#: ../../dispatcher/filters/index.rst:14 msgid "Builtin filters" msgstr "Вбудовані фільтри" -#: ../../dispatcher/filters/index.rst:13 +#: ../../dispatcher/filters/index.rst:16 msgid "Here is list of builtin filters:" msgstr "Ось список вбудованих фільтрів:" -#: ../../dispatcher/filters/index.rst:27 +#: ../../dispatcher/filters/index.rst:29 msgid "Writing own filters" msgstr "Написання власних фільтрів" -#: ../../dispatcher/filters/index.rst:29 +#: ../../dispatcher/filters/index.rst:31 msgid "Filters can be:" msgstr "Фільтри бувають:" -#: ../../dispatcher/filters/index.rst:31 +#: ../../dispatcher/filters/index.rst:33 msgid "Asynchronous function (:code:`async def my_filter(*args, **kwargs): pass`)" msgstr "Асинхронною функцією (:code:`async def my_filter(*args, **kwargs): pass`)" -#: ../../dispatcher/filters/index.rst:32 +#: ../../dispatcher/filters/index.rst:34 msgid "Synchronous function (:code:`def my_filter(*args, **kwargs): pass`)" msgstr "Синхронною функцією (:code:`def my_filter(*args, **kwargs): pass`)" -#: ../../dispatcher/filters/index.rst:33 +#: ../../dispatcher/filters/index.rst:35 msgid "Anonymous function (:code:`lambda event: True`)" msgstr "Анонімною функцією (:code:`lambda event: True`)" -#: ../../dispatcher/filters/index.rst:34 +#: ../../dispatcher/filters/index.rst:36 msgid "Any awaitable object" msgstr "" "Будь-яким очікуваним об'єктом (awaitable object, об'єкт, який може бути " "використаний в :code:`await` виразі)" -#: ../../dispatcher/filters/index.rst:35 +#: ../../dispatcher/filters/index.rst:37 msgid "Subclass of :class:`aiogram.filters.base.Filter`" msgstr "Підкласом :class:`aiogram.filters.base.Filter`" -#: ../../dispatcher/filters/index.rst:36 +#: ../../dispatcher/filters/index.rst:38 msgid "Instances of :ref:`MagicFilter `" msgstr "Екземпляром :ref:`MagicFilter `" -#: ../../dispatcher/filters/index.rst:38 +#: ../../dispatcher/filters/index.rst:40 msgid "" -"and should return bool or dict. If the dictionary is passed as result of filter " -"- resulted data will be propagated to the next filters and handler as keywords " -"arguments." +"and should return bool or dict. If the dictionary is passed as result of " +"filter - resulted data will be propagated to the next filters and handler" +" as keywords arguments." msgstr "" -"і має повертати bool або dict. Якщо словник передається як результат фільтра, " -"отримані дані будуть передані до наступних фільтрів і обробника як аргументи " -"ключових слів." +"і має повертати bool або dict. Якщо словник передається як результат " +"фільтра, отримані дані будуть передані до наступних фільтрів і обробника " +"як аргументи ключових слів." -#: ../../dispatcher/filters/index.rst:43 +#: ../../dispatcher/filters/index.rst:45 msgid "Base class for own filters" msgstr "Базовий клас для власних фільтрів" #: aiogram.filters.base.Filter:1 of msgid "" -"If you want to register own filters like builtin filters you will need to write " -"subclass of this class with overriding the :code:`__call__` method and adding " -"filter attributes." +"If you want to register own filters like builtin filters you will need to" +" write subclass of this class with overriding the :code:`__call__` method" +" and adding filter attributes." msgstr "" -"Якщо Ви хочете зареєструвати власні фільтри, як вбудовані фільтри, Вам потрібно " -"буде написати підклас цього класу з заміною методу :code:`__call__` і " -"додаванням атрибутів фільтра." +"Якщо Ви хочете зареєструвати власні фільтри, як вбудовані фільтри, Вам " +"потрібно буде написати підклас цього класу з заміною методу " +":code:`__call__` і додаванням атрибутів фільтра." #: aiogram.filters.base.Filter.__call__:1 of msgid "This method should be overridden." @@ -118,72 +121,78 @@ msgstr ":class:`bool` or :class:`Dict[str, Any]`" #: aiogram.filters.base.Filter.update_handler_flags:1 of msgid "" -"Also if you want to extend handler flags with using this filter you should " -"implement this method" +"Also if you want to extend handler flags with using this filter you " +"should implement this method" msgstr "" -"Крім того, якщо ви хочете розширити маркери обробника (handler) за допомогою " -"цього фільтра, вам слід реалізувати цей метод" +"Крім того, якщо ви хочете розширити маркери обробника (handler) за " +"допомогою цього фільтра, вам слід реалізувати цей метод" #: aiogram.filters.base.Filter.update_handler_flags of msgid "Parameters" msgstr "Параметри" -#: aiogram.filters.base.Filter.update_handler_flags:3 of +#: aiogram.filters.base.Filter.update_handler_flags:4 of msgid "existing flags, can be updated directly" msgstr "існуючі маркери, можна оновити безпосередньо" -#: ../../dispatcher/filters/index.rst:51 +#: ../../dispatcher/filters/index.rst:53 msgid "Own filter example" msgstr "Приклад власного фільтра" -#: ../../dispatcher/filters/index.rst:53 +#: ../../dispatcher/filters/index.rst:55 msgid "For example if you need to make simple text filter:" msgstr "Наприклад, якщо Вам потрібно створити простий текстовий фільтр:" -#: ../../dispatcher/filters/index.rst:60 +#: ../../dispatcher/filters/index.rst:62 msgid "Combining Filters" msgstr "Комбінування фільтрів" -#: ../../dispatcher/filters/index.rst:62 +#: ../../dispatcher/filters/index.rst:64 msgid "In general, all filters can be combined in two ways" msgstr "Взагалом, усі фільтри можна комбінувати двома способами" -#: ../../dispatcher/filters/index.rst:66 +#: ../../dispatcher/filters/index.rst:68 msgid "Recommended way" msgstr "Рекомендований спосіб" -#: ../../dispatcher/filters/index.rst:68 +#: ../../dispatcher/filters/index.rst:70 msgid "" -"If you specify multiple filters in a row, it will be checked with an \"and\" " -"condition:" +"If you specify multiple filters in a row, it will be checked with an " +"\"and\" condition:" msgstr "" -"Якщо Ви вкажете кілька фільтрів поспіль, це буде перевірено умовою \"and\" :" +"Якщо Ви вкажете кілька фільтрів поспіль, це буде перевірено умовою " +"\"and\" :" -#: ../../dispatcher/filters/index.rst:75 +#: ../../dispatcher/filters/index.rst:77 msgid "" -"Also, if you want to use two alternative ways to run the same handler (\"or\" " -"condition) you can register the handler twice or more times as you like" +"Also, if you want to use two alternative ways to run the same handler " +"(\"or\" condition) you can register the handler twice or more times as " +"you like" msgstr "" -"Крім того, якщо ви хочете використовувати два альтернативні способи запуску " -"одного обробника (умова \"or\"), ви можете зареєструвати обробник двічі або " -"більше разів, як вам подобається" +"Крім того, якщо ви хочете використовувати два альтернативні способи " +"запуску одного обробника (умова \"or\"), ви можете зареєструвати обробник" +" двічі або більше разів, як вам подобається" -#: ../../dispatcher/filters/index.rst:84 +#: ../../dispatcher/filters/index.rst:86 msgid "" -"Also sometimes you will need to invert the filter result, for example you have " -"an *IsAdmin* filter and you want to check if the user is not an admin" +"Also sometimes you will need to invert the filter result, for example you" +" have an *IsAdmin* filter and you want to check if the user is not an " +"admin" msgstr "" -"Також іноді Вам потрібно буде інвертувати результат фільтра, наприклад, у вас є " -"фільтр *IsAdmin* і ви хочете перевірити, чи користувач не є адміністратором" +"Також іноді Вам потрібно буде інвертувати результат фільтра, наприклад, у" +" вас є фільтр *IsAdmin* і ви хочете перевірити, чи користувач не є " +"адміністратором" -#: ../../dispatcher/filters/index.rst:93 +#: ../../dispatcher/filters/index.rst:95 msgid "Another possible way" msgstr "Інший можливий спосіб" -#: ../../dispatcher/filters/index.rst:95 +#: ../../dispatcher/filters/index.rst:97 msgid "" -"An alternative way is to combine using special functions (:func:`and_f`, :func:" -"`or_f`, :func:`invert_f` from :code:`aiogram.filters` module):" +"An alternative way is to combine using special functions (:func:`and_f`, " +":func:`or_f`, :func:`invert_f` from :code:`aiogram.filters` module):" msgstr "" -"Альтернативним способом є об’єднання за допомогою спеціальних функцій (:func:" -"`and_f`, :func:`or_f`, :func:`invert_f` з модуля :code:`aiogram.filters`):" +"Альтернативним способом є об’єднання за допомогою спеціальних функцій " +"(:func:`and_f`, :func:`or_f`, :func:`invert_f` з модуля " +":code:`aiogram.filters`):" + diff --git a/docs/locale/uk_UA/LC_MESSAGES/migration_2_to_3.po b/docs/locale/uk_UA/LC_MESSAGES/migration_2_to_3.po index 3541ffff..6a8ef6be 100644 --- a/docs/locale/uk_UA/LC_MESSAGES/migration_2_to_3.po +++ b/docs/locale/uk_UA/LC_MESSAGES/migration_2_to_3.po @@ -3,303 +3,422 @@ # This file is distributed under the same license as the aiogram package. # FIRST AUTHOR , 2023. # -#, fuzzy msgid "" msgstr "" -"Project-Id-Version: aiogram \n" +"Project-Id-Version: aiogram\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-08-26 23:17+0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"POT-Creation-Date: 2023-09-14 18:12+0300\n" +"PO-Revision-Date: 2023-09-14 18:34+0300\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: uk_UA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 " +"&& (n%100<10 || n%100>=20) ? 1 : 2);\n" "Generated-By: Babel 2.12.1\n" +"X-Generator: Poedit 3.3.2\n" #: ../../migration_2_to_3.rst:3 msgid "Migration FAQ (2.x -> 3.0)" -msgstr "" +msgstr "FAQ по переходу з версії 2.x на 3.0" #: ../../migration_2_to_3.rst:7 msgid "This guide is still in progress." -msgstr "" +msgstr "Цей посібник все ще в розробці." #: ../../migration_2_to_3.rst:9 msgid "" -"This version introduces much many breaking changes and architectural " -"improvements, helping to reduce global variables count in your code, " -"provides useful mechanisms to separate your code to modules or just make " -"sharable modules via packages on the PyPi, makes middlewares and filters " -"more controllable and others." +"This version introduces numerous breaking changes and architectural " +"improvements. It helps reduce the count of global variables in your code, " +"provides useful mechanisms to modularize your code, and enables the creation of " +"shareable modules via packages on PyPI. It also makes middlewares and filters " +"more controllable, among other improvements." msgstr "" +"Ця версія містить численні суттєві зміни та архітектурні покращення. Вона " +"допомагає зменшити кількість глобальних змінних у вашому коді, надає корисні " +"механізми для модуляризації вашого коду та дозволяє створювати спільні модулі " +"за допомогою пакетів на PyPI. Крім того, серед інших покращень, він робить " +"проміжне програмне забезпечення (мідлварі) та фільтри більш контрольованими." -#: ../../migration_2_to_3.rst:14 +#: ../../migration_2_to_3.rst:15 msgid "" -"On this page you can read about points that changed corresponding to last" -" stable 2.x version." +"On this page, you can read about the changes made in relation to the last " +"stable 2.x version." msgstr "" +"На цій сторінці ви можете прочитати про зміни, внесені в останню стабільну " +"версію 2.x." -#: ../../migration_2_to_3.rst:18 +#: ../../migration_2_to_3.rst:19 msgid "" -"This page is most like a detailed changelog than a migration guide, but " -"it will be updated in the future." +"This page more closely resembles a detailed changelog than a migration guide, " +"but it will be updated in the future." msgstr "" +"Ця сторінка більше нагадує детальний список змін, ніж посібник з міграції, але " +"вона буде оновлюватися в майбутньому." -#: ../../migration_2_to_3.rst:21 +#: ../../migration_2_to_3.rst:22 msgid "" "Feel free to contribute to this page, if you find something that is not " "mentioned here." msgstr "" +"Не соромтеся зробити свій внесок у цю сторінку, якщо ви знайшли щось, про що " +"тут не згадано." -#: ../../migration_2_to_3.rst:25 +#: ../../migration_2_to_3.rst:26 msgid "Dispatcher" msgstr "" -#: ../../migration_2_to_3.rst:27 +#: ../../migration_2_to_3.rst:28 msgid "" -":class:`Dispatcher` class no longer accepts the `Bot` instance into the " -"initializer, it should be passed to dispatcher only for starting polling " -"or handling event from webhook. Also this way adds possibility to use " -"multiple bot instances at the same time (\"multibot\")" +"The :class:`Dispatcher` class no longer accepts a `Bot` instance in its " +"initializer. Instead, the `Bot` instance should be passed to the dispatcher " +"only for starting polling or handling events from webhooks. This approach also " +"allows for the use of multiple bot instances simultaneously (\"multibot\")." msgstr "" +"Клас :class:`Dispatcher` більше не приймає екземпляр `Bot` у своєму " +"ініціалізаторі. Замість цього екземпляр `Bot` слід передавати диспетчеру тільки " +"для запуску полінгу або обробки подій з вебхуків. Такий підхід також дозволяє " +"використовувати декілька екземплярів бота одночасно (\"мультибот\")." -#: ../../migration_2_to_3.rst:30 +#: ../../migration_2_to_3.rst:32 msgid "" -":class:`Dispatcher` now can be extended with another Dispatcher-like " -"thing named :class:`Router` (:ref:`Read more » `). With " -"routes you can easily separate your code to multiple modules and may be " -"share this modules between projects." +":class:`Dispatcher` now can be extended with another Dispatcher-like thing " +"named :class:`Router` (:ref:`Read more » `)." msgstr "" +"Клас :class:`Dispatcher` тепер можна розширити ще одним об'єктом на кшталт " +"диспетчера з назвою :class:`Router` (:ref:`Детальніше » `)." #: ../../migration_2_to_3.rst:34 msgid "" +"With routes, you can easily modularize your code and potentially share these " +"modules between projects." +msgstr "" +"За допомогою роутерів ви можете легко модулювати свій код і потенційно " +"перевикористовувати ці модулі між проектами." + +#: ../../migration_2_to_3.rst:35 +msgid "" "Removed the **_handler** suffix from all event handler decorators and " "registering methods. (:ref:`Read more » `)" msgstr "" - -#: ../../migration_2_to_3.rst:36 -msgid "" -"Executor entirely removed, now you can use Dispatcher directly to start " -"polling or webhook." -msgstr "" +"Видалено суфікс **_handler** з усіх декораторів обробників подій та методів " +"реєстрації. (:ref:`Детальніше » `)" #: ../../migration_2_to_3.rst:37 msgid "" -"Throttling method is completely removed, now you can use middlewares to " -"control the execution context and use any throttling mechanism you want." +"The Executor has been entirely removed; you can now use the Dispatcher directly " +"to start polling or handle webhooks." msgstr "" +"Executor було повністю вилучено; тепер ви можете використовувати Dispatcher " +"безпосередньо для запуску полінгу або обробки вебхуків." -#: ../../migration_2_to_3.rst:39 +#: ../../migration_2_to_3.rst:38 msgid "" -"Removed global context variables from the API types, Bot and Dispatcher " -"object, from now if you want to get current bot instance inside handlers " -"or filters you should accept the argument :code:`bot: Bot` and use it " -"instead of :code:`Bot.get_current()` Inside middlewares it can be " -"accessed via :code:`data[\"bot\"]`." +"The throttling method has been completely removed; you can now use middlewares " +"to control the execution context and implement any throttling mechanism you " +"desire." msgstr "" +"Метод дроселювання (Throttling) повністю вилучено; тепер ви можете " +"використовувати проміжне програмне забезпечення (middleware) для керування " +"контекстом виконання та реалізовувати будь-який механізм дроселювання за вашим " +"бажанням." -#: ../../migration_2_to_3.rst:43 +#: ../../migration_2_to_3.rst:40 msgid "" -"Now to skip pending updates, you should call the " -":class:`aiogram.methods.delete_webhook.DeleteWebhook` method directly " -"instead of passing :code:`skip_updates=True` to start polling method." +"Removed global context variables from the API types, Bot and Dispatcher object, " +"From now on, if you want to access the current bot instance within handlers or " +"filters, you should accept the argument :code:`bot: Bot` and use it instead of :" +"code:`Bot.get_current()`. In middlewares, it can be accessed via :code:" +"`data[\"bot\"]`." msgstr "" +"Вилучено глобальні контекстні змінні з типів API, об'єктів Bot та Dispatcher, " +"Відтепер, якщо ви хочете отримати доступ до поточного екземпляру бота в " +"обробниках або фільтрах, ви повинні приймати аргумент :code:`bot: Bot` і " +"використовувати його замість :code:`Bot.get_current()`. У проміжному " +"програмному забезпеченні (middleware) доступ до нього можна отримати через :" +"code:`data[\"bot\"]`." -#: ../../migration_2_to_3.rst:47 -msgid "Filtering events" +#: ../../migration_2_to_3.rst:44 +msgid "" +"To skip pending updates, you should now call the :class:`aiogram.methods." +"delete_webhook.DeleteWebhook` method directly, rather than passing :code:" +"`skip_updates=True` to the start polling method." msgstr "" +"Щоб пропустити очікувані оновлення, тепер вам слід викликати метод :class:" +"`aiogram.methods.delete_webhook.DeleteWebhook` безпосередньо, а не передавати :" +"code:`skip_updates=True` до методу запуску полінгу." #: ../../migration_2_to_3.rst:49 -msgid "" -"Keyword filters can no more be used, use filters explicitly. (`Read more " -"» `_)" -msgstr "" +msgid "Filtering events" +msgstr "Фільтрація подій" -#: ../../migration_2_to_3.rst:50 +#: ../../migration_2_to_3.rst:51 msgid "" -"In due to keyword filters was removed all enabled by default filters " -"(state and content_type now is not enabled), so you should specify them " -"explicitly if you want to use. For example instead of using " -":code:`@dp.message_handler(content_types=ContentType.PHOTO)` you should " -"use :code:`@router.message(F.photo)`" +"Keyword filters can no longer be used; use filters explicitly. (`Read more » " +"`_)" msgstr "" +"Фільтри за ключовими словами більше не можна використовувати; використовуйте " +"фільтри явно. (`Детальніше » `_)" -#: ../../migration_2_to_3.rst:54 +#: ../../migration_2_to_3.rst:52 msgid "" -"Most of common filters is replaced by \"magic filter\". (:ref:`Read more " -"» `)" -msgstr "" - -#: ../../migration_2_to_3.rst:55 -msgid "" -"Now by default message handler receives any content type, if you want " -"specific one just add the filters (Magic or any other)" +"Due to the removal of keyword filters, all previously enabled-by-default " +"filters (such as state and content_type) are now disabled. You must specify " +"them explicitly if you wish to use them. For example instead of using :code:" +"`@dp.message_handler(content_types=ContentType.PHOTO)` you should use :code:" +"`@router.message(F.photo)`" msgstr "" +"У зв'язку з вилученням keyword фільтрів, всі раніше ввімкнені за замовчуванням " +"фільтри (такі як state і content_type) тепер вимкнено. Якщо ви бажаєте їх " +"використовувати, ви повинні вказати їх явно. Наприклад, замість :code:`@dp." +"message_handler(content_types=ContentType.PHOTO)` слід використовувати :code:" +"`@router.message(F.photo)`." #: ../../migration_2_to_3.rst:57 msgid "" -"State filter now is not enabled by default, that's mean if you using " -":code:`state=\"*\"` in v2 then you should not pass any state filter in " -"v3, and vice versa, if the state in v2 is not specified now you should " -"specify the state." +"Most common filters have been replaced by the \"magic filter.\" (:ref:`Read " +"more » `)" msgstr "" +"Більшість звичайних фільтрів було замінено на \"магічний фільтр\". (:ref:`Детальніше " +"далі » `)" + +#: ../../migration_2_to_3.rst:58 +msgid "" +"By default, the message handler now receives any content type. If you want a " +"specific one, simply add the appropriate filters (Magic or any other)." +msgstr "" +"За замовчуванням обробник повідомлень тепер отримує будь-який тип вмісту. Якщо " +"вам потрібен певний тип, просто додайте відповідні фільтри (Magic або будь-який " +"інший)." #: ../../migration_2_to_3.rst:60 msgid "" -"Added possibility to register per-router global filters, that helps to " -"reduces the number of repetitions in the code and makes easily way to " -"control for what each router will be used." +"The state filter is no longer enabled by default. This means that if you used :" +"code:`state=\"*\"` in v2, you should not pass any state filter in v3. " +"Conversely, if the state was not specified in v2, you will now need to specify " +"it in v3." msgstr "" +"Фільтр стану більше не вмикається за замовчуванням. Це означає, що якщо ви " +"використовували :code:`state=\"*\"` у v2, вам не слід передавати фільтр стану у " +"v3. І навпаки, якщо стан не було вказано у v2, вам потрібно буде вказати його у " +"v3." -#: ../../migration_2_to_3.rst:66 +#: ../../migration_2_to_3.rst:63 +msgid "" +"Added the possibility to register global filters for each router, which helps " +"to reduce code repetition and provides an easier way to control the purpose of " +"each router." +msgstr "" +"Додано можливість реєстрації глобальних фільтрів для кожного роутера, що " +"допомагає зменшити повторення коду і полегшує контроль призначення кожного " +"роутера." + +#: ../../migration_2_to_3.rst:69 msgid "Bot API" msgstr "" -#: ../../migration_2_to_3.rst:68 +#: ../../migration_2_to_3.rst:71 msgid "" -"Now all API methods is classes with validation (via `pydantic " -"`_) (all API calls is also available as " -"methods in the Bot class)." +"All API methods are now classes with validation, implemented via `pydantic " +"`. These API calls are also available as methods in " +"the Bot class." msgstr "" +"Всі методи API тепер є класами з валідацією, реалізованими через `pydantic " +"`. Ці виклики API також доступні як методи в класі " +"Bot." -#: ../../migration_2_to_3.rst:70 +#: ../../migration_2_to_3.rst:74 msgid "" -"Added more pre-defined Enums and moved into `aiogram.enums` sub-package. " -"For example chat type enum now is :class:`aiogram.enums.ChatType` instead" -" of :class:`aiogram.types.chat.ChatType`. (:ref:`Read more » `)" +"More pre-defined Enums have been added and moved to the `aiogram.enums` sub-" +"package. For example, the chat type enum is now :class:`aiogram.enums.ChatType` " +"instead of :class:`aiogram.types.chat.ChatType`." msgstr "" +"Додано більше попередньо визначених enums та переміщено їх до підпакету " +"`aiogram.enums`. Наприклад, enum типу чату тепер має вигляд :class:`aiogram." +"enums.ChatType` замість :class:`aiogram.types.chat.ChatType`." -#: ../../migration_2_to_3.rst:73 +#: ../../migration_2_to_3.rst:76 msgid "" -"Separated HTTP client session into container that can be reused between " -"different Bot instances in the application." +"The HTTP client session has been separated into a container that can be reused " +"across different Bot instances within the application." msgstr "" +"Клієнтська сесія HTTP була відокремлена в контейнер, який можна повторно " +"використовувати для різних екземплярів бота в додатку." -#: ../../migration_2_to_3.rst:75 +#: ../../migration_2_to_3.rst:78 msgid "" -"API Exceptions is no more classified by specific message in due to " -"Telegram has no documented error codes. But all errors is classified by " -"HTTP status code and for each method only one case can be caused with the" -" same code, so in most cases you should check that only error type (by " -"status-code) without checking error message. (:ref:`Read more » `)" -msgstr "" - -#: ../../migration_2_to_3.rst:82 -msgid "Middlewares" -msgstr "" - -#: ../../migration_2_to_3.rst:84 -msgid "" -"Middlewares can now control a execution context, e.g. using context " -"managers (:ref:`Read more » `)" -msgstr "" - -#: ../../migration_2_to_3.rst:85 -msgid "" -"All contextual data now is shared between middlewares, filters and " -"handlers to end-to-end use. For example now you can easily pass some data" -" into context inside middleware and get it in the filters layer as the " -"same way as in the handlers via keyword arguments." +"API Exceptions are no longer classified by specific messages, as Telegram has " +"no documented error codes. However, all errors are classified by HTTP status " +"codes, and for each method, only one type of error can be associated with a " +"given code. Therefore, in most cases, you should check only the error type (by " +"status code) without inspecting the error message." msgstr "" +"Виключення API більше не класифікуються за конкретними повідомленнями, оскільки " +"Telegram не має задокументованих кодів помилок. Проте всі помилки " +"класифікуються за кодами статусу HTTP, і для кожного методу з певним кодом може " +"бути пов'язаний лише один тип помилки. Тому в більшості випадків слід " +"перевіряти лише тип помилки (за кодом статусу), не перевіряючи повідомлення про " +"помилку." #: ../../migration_2_to_3.rst:88 -msgid "" -"Added mechanism named **flags**, that helps to customize handler behavior" -" in conjunction with middlewares. (:ref:`Read more » `)" -msgstr "" +msgid "Middlewares" +msgstr "Проміжне ПО (Middlewares)" -#: ../../migration_2_to_3.rst:93 -msgid "Keyboard Markup" +#: ../../migration_2_to_3.rst:90 +msgid "" +"Middlewares can now control an execution context, e.g., using context managers. " +"(:ref:`Read more » `)" msgstr "" +"Проміжне програмне забезпечення тепер може керувати контекстом виконання, " +"наприклад, за допомогою менеджерів контексту. (:ref:`Детальніше » " +"`)" + +#: ../../migration_2_to_3.rst:92 +msgid "" +"All contextual data is now shared end-to-end between middlewares, filters, and " +"handlers. For example now you can easily pass some data into context inside " +"middleware and get it in the filters layer as the same way as in the handlers " +"via keyword arguments." +msgstr "" +"Всі контекстні дані тепер наскрізно використовуються між проміжним програмним " +"забезпеченням, фільтрами та обробниками. Наприклад, тепер ви можете легко " +"передати деякі дані в контекст у проміжному програмному забезпеченні і отримати " +"їх у шарі фільтрів так само, як і в обробниках через аргументи ключових слів." #: ../../migration_2_to_3.rst:95 msgid "" -"Now :class:`aiogram.types.inline_keyboard_markup.InlineKeyboardMarkup` " -"and :class:`aiogram.types.reply_keyboard_markup.ReplyKeyboardMarkup` has " -"no methods to extend it, instead you have to use markup builders " -":class:`aiogram.utils.keyboard.ReplyKeyboardBuilder` and " -":class:`aiogram.utils.keyboard.KeyboardBuilder` respectively (:ref:`Read " -"more » `)" +"Added a mechanism named **flags** that helps customize handler behavior in " +"conjunction with middlewares. (:ref:`Read more » `)" msgstr "" +"Додано механізм з назвою **flags**, який допомагає налаштовувати поведінку " +"обробника у поєднанні з проміжним програмним забезпеченням. (:ref:`Детальніше " +"про » `)" -#: ../../migration_2_to_3.rst:103 -msgid "Callbacks data" -msgstr "" +#: ../../migration_2_to_3.rst:100 +msgid "Keyboard Markup" +msgstr "Розмітка клавіатури" -#: ../../migration_2_to_3.rst:105 +#: ../../migration_2_to_3.rst:102 msgid "" -"Callback data factory now is strictly typed via `pydantic " -"`_ models (:ref:`Read more » `)" +"Now :class:`aiogram.types.inline_keyboard_markup.InlineKeyboardMarkup` and :" +"class:`aiogram.types.reply_keyboard_markup.ReplyKeyboardMarkup` no longer have " +"methods for extension, instead you have to use markup builders :class:`aiogram." +"utils.keyboard.ReplyKeyboardBuilder` and :class:`aiogram.utils.keyboard." +"KeyboardBuilder` respectively (:ref:`Read more » `)" msgstr "" +"Тепер :class:`aiogram.types.inline_keyboard_markup.InlineKeyboardMarkup` та :" +"class:`aiogram.types.reply_keyboard_markup.ReplyKeyboardMarkup` більше не мають " +"методів для розширення, натомість вам слід використовувати будівники розмітки :" +"class:`aiogram.utils.keyboard.ReplyKeyboardBuilder` та :class:`aiogram.utils.keyboard.InlineKeyboardBuilder` " +"відповідно (:ref:`Детальніше » `)" #: ../../migration_2_to_3.rst:110 -msgid "Finite State machine" +msgid "Callbacks data" msgstr "" #: ../../migration_2_to_3.rst:112 msgid "" -"State filter will no more added to all handlers, you will need to specify" -" state if you want" +"The callback data factory is now strictly typed using `pydantic `_ models. (:ref:`Read more » `)" msgstr "" +"Фабрику даних зворотного виклику тепер строго типізовано за допомогою моделей " +"`pydantic `_. (:ref:`Детальніше » `)" -#: ../../migration_2_to_3.rst:113 +#: ../../migration_2_to_3.rst:117 +msgid "Finite State machine" +msgstr "Скінченний автомат" + +#: ../../migration_2_to_3.rst:119 msgid "" -"Added possibility to change FSM strategy, for example if you want to " -"control state for each user in chat topics instead of user in chat you " -"can specify it in the Dispatcher." +"State filters will no longer be automatically added to all handlers; you will " +"need to specify the state if you want to use it." msgstr "" +"Фільтри станів більше не будуть автоматично додаватися до всіх обробників; вам " +"потрібно буде вказати стан, якщо ви хочете його використати." -#: ../../migration_2_to_3.rst:115 +#: ../../migration_2_to_3.rst:121 msgid "" -"Now :class:`aiogram.fsm.state.State` and " -":class:`aiogram.fsm.state.StateGroup` don't have helper methods like " -":code:`.set()`, :code:`.next()`, etc." +"Added the possibility to change the FSM strategy. For example, if you want to " +"control the state for each user based on chat topics rather than the user in a " +"chat, you can specify this in the Dispatcher." msgstr "" +"Додано можливість змінювати стратегію FSM. Наприклад, якщо ви хочете " +"контролювати стан для кожного користувача на основі топіків чату, а не " +"користувача в чаті, ви можете вказати це в Диспетчері." -#: ../../migration_2_to_3.rst:118 +#: ../../migration_2_to_3.rst:124 msgid "" -"Instead of this you should set states by passing them directly to " -":class:`aiogram.fsm.context.FSMContext` (:ref:`Read more » `)" -msgstr "" - -#: ../../migration_2_to_3.rst:120 -msgid "" -"State proxy is deprecated, you should update the state data by calling " -":code:`state.set_data(...)` and :code:`state.get_data()` respectively." -msgstr "" - -#: ../../migration_2_to_3.rst:125 -msgid "Sending Files" +"Now :class:`aiogram.fsm.state.State` and :class:`aiogram.fsm.state.StateGroup` " +"don't have helper methods like :code:`.set()`, :code:`.next()`, etc." msgstr "" +"Тепер :class:`aiogram.fsm.state.State` та :class:`aiogram.fsm.state.StateGroup` " +"не мають допоміжних методів, таких як :code:`.set()`, :code:`.next()` тощо." #: ../../migration_2_to_3.rst:127 msgid "" -"From now you should wrap sending files into InputFile object before send " -"instead of passing IO object directly to the API method. (:ref:`Read more" -" » `)" +"Instead, you should set states by passing them directly to :class:`aiogram.fsm." +"context.FSMContext` (:ref:`Read more » `)" msgstr "" +"Замість цього вам слід встановлювати стани, передаючи їх безпосередньо до :" +"class:`aiogram.fsm.context.FSMContext` (:ref:`Детальніше » `)" -#: ../../migration_2_to_3.rst:132 +#: ../../migration_2_to_3.rst:129 +msgid "" +"The state proxy is deprecated; you should update the state data by calling :" +"code:`state.set_data(...)` and :code:`state.get_data()` respectively." +msgstr "" +"Проксі стану є застарілим; вам слід оновити дані стану, викликавши :code:`state." +"set_data(...)` та :code:`state.get_data()` відповідно." + +#: ../../migration_2_to_3.rst:134 +msgid "Sending Files" +msgstr "Надсилання файлів" + +#: ../../migration_2_to_3.rst:136 +msgid "" +"From now on, you should wrap files in an InputFile object before sending them, " +"instead of passing the IO object directly to the API method. (:ref:`Read more » " +"`)" +msgstr "" +"Відтепер перед відправкою файлів слід обертати їх в об'єкт InputFile замість " +"того, щоб передавати об'єкт вводу-виводу безпосередньо до методу API. (:ref:" +"`Детальніше » `)" + +#: ../../migration_2_to_3.rst:141 msgid "Webhook" msgstr "" -#: ../../migration_2_to_3.rst:134 -msgid "Simplified aiohttp web app configuration" -msgstr "" +#: ../../migration_2_to_3.rst:143 +msgid "The aiohttp web app configuration has been simplified." +msgstr "Спрощено налаштування веб-застосунку aiohttp." -#: ../../migration_2_to_3.rst:135 +#: ../../migration_2_to_3.rst:144 msgid "" -"By default added possibility to upload files when you use reply into " -"webhook" +"By default, the ability to upload files has been added when you use the reply " +"function in a webhook." msgstr "" +"За замовчуванням додана можливість завантажувати файли, коли ви використовуєте " +"функцію відповіді у вебхук." -#~ msgid "" -#~ "Callback data factory now is strictly" -#~ " typed via `pydantic " -#~ "`_ models (:ref:`Read " -#~ "more » `)" -#~ msgstr "" +#: ../../migration_2_to_3.rst:148 +msgid "Telegram API Server" +msgstr "Сервер Telegram API" + +#: ../../migration_2_to_3.rst:150 +msgid "" +"The `server` parameter has been moved from the `Bot` instance to `api` in " +"`BaseSession`." +msgstr "" +"Параметр `server` було перенесено з екземпляра `Bot` до `api` в `BaseSession`." + +#: ../../migration_2_to_3.rst:151 +msgid "" +"The constant `aiogram.bot.api.TELEGRAM_PRODUCTION` has been moved to `aiogram." +"client.telegram.PRODUCTION`." +msgstr "" +"Константа `aiogram.bot.api.TELEGRAM_PRODUCTION` була переміщена на `aiogram." +"client.telegram.PRODUCTION`." diff --git a/docs/locale/uk_UA/LC_MESSAGES/utils/media_group.po b/docs/locale/uk_UA/LC_MESSAGES/utils/media_group.po new file mode 100644 index 00000000..adf8c7d2 --- /dev/null +++ b/docs/locale/uk_UA/LC_MESSAGES/utils/media_group.po @@ -0,0 +1,291 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2023, aiogram Team +# This file is distributed under the same license as the aiogram package. +# FIRST AUTHOR , 2023. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: aiogram \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-14 17:21+0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.12.1\n" + +#: ../../utils/media_group.rst:3 +msgid "Media group builder" +msgstr "" + +#: ../../utils/media_group.rst:5 +msgid "" +"This module provides a builder for media groups, it can be used to build " +"media groups for " +":class:`aiogram.types.input_media_photo.InputMediaPhoto`, " +":class:`aiogram.types.input_media_video.InputMediaVideo`, " +":class:`aiogram.types.input_media_document.InputMediaDocument` and " +":class:`aiogram.types.input_media_audio.InputMediaAudio`." +msgstr "" + +#: ../../utils/media_group.rst:11 +msgid "" +":class:`aiogram.types.input_media_animation.InputMediaAnimation` is not " +"supported yet in the Bot API to send as media group." +msgstr "" + +#: ../../utils/media_group.rst:16 +msgid "Usage" +msgstr "" + +#: ../../utils/media_group.rst:30 +msgid "" +"To send media group use " +":meth:`aiogram.methods.send_media_group.SendMediaGroup` method, but when " +"you use :class:`aiogram.utils.media_group.MediaGroupBuilder` you should " +"pass ``media`` argument as ``media_group.build()``." +msgstr "" + +#: ../../utils/media_group.rst:34 +msgid "" +"If you specify ``caption`` in " +":class:`aiogram.utils.media_group.MediaGroupBuilder` it will be used as " +"``caption`` for first media in group." +msgstr "" + +#: ../../utils/media_group.rst:43 +msgid "References" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add:1 of +msgid "Add a media object to the media group." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add +#: aiogram.utils.media_group.MediaGroupBuilder.add_audio +#: aiogram.utils.media_group.MediaGroupBuilder.add_document +#: aiogram.utils.media_group.MediaGroupBuilder.add_photo +#: aiogram.utils.media_group.MediaGroupBuilder.add_video of +msgid "Parameters" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add:3 of +msgid "" +"Keyword arguments for the media object. The available keyword arguments " +"depend on the media type." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add +#: aiogram.utils.media_group.MediaGroupBuilder.add_audio +#: aiogram.utils.media_group.MediaGroupBuilder.add_document +#: aiogram.utils.media_group.MediaGroupBuilder.add_photo +#: aiogram.utils.media_group.MediaGroupBuilder.add_video +#: aiogram.utils.media_group.MediaGroupBuilder.build of +msgid "Returns" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add:5 +#: aiogram.utils.media_group.MediaGroupBuilder.add_audio:22 +#: aiogram.utils.media_group.MediaGroupBuilder.add_document:27 +#: aiogram.utils.media_group.MediaGroupBuilder.add_photo:17 +#: aiogram.utils.media_group.MediaGroupBuilder.add_video:30 of +msgid "None" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_audio:1 of +msgid "Add an audio file to the media group." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_audio:3 +#: aiogram.utils.media_group.MediaGroupBuilder.add_photo:3 of +msgid "" +"File to send. Pass a file_id to send a file that exists on the Telegram " +"servers (recommended), pass an HTTP URL for Telegram to get a file from " +"the Internet, or pass 'attach://' to upload a new one " +"using multipart/form-data under name. :ref:`More " +"information on Sending Files » `" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_audio:3 +#: aiogram.utils.media_group.MediaGroupBuilder.add_photo:3 of +msgid "" +"File to send. Pass a file_id to send a file that exists on the Telegram " +"servers (recommended), pass an HTTP URL for Telegram to get a file from " +"the Internet, or pass 'attach://' to upload a new one " +"using multipart/form-data under name." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_audio:7 +#: aiogram.utils.media_group.MediaGroupBuilder.add_photo:7 of +msgid ":ref:`More information on Sending Files » `" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_audio:8 of +msgid "" +"*Optional*. Thumbnail of the file sent; can be ignored if thumbnail " +"generation for the file is supported server-side. The thumbnail should be" +" in JPEG format and less than 200 kB in size. A thumbnail's width and " +"height should not exceed 320." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_audio:12 of +msgid "" +"*Optional*. Caption of the audio to be sent, 0-1024 characters after " +"entities parsing" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_audio:14 of +msgid "" +"*Optional*. Mode for parsing entities in the audio caption. See " +"`formatting options `_ for more details." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_audio:17 +#: aiogram.utils.media_group.MediaGroupBuilder.add_document:22 +#: aiogram.utils.media_group.MediaGroupBuilder.add_photo:13 +#: aiogram.utils.media_group.MediaGroupBuilder.add_video:21 of +msgid "" +"*Optional*. List of special entities that appear in the caption, which " +"can be specified instead of *parse_mode*" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_audio:19 of +msgid "*Optional*. Duration of the audio in seconds" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_audio:20 of +msgid "*Optional*. Performer of the audio" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_audio:21 of +msgid "*Optional*. Title of the audio" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_document:1 of +msgid "Add a document to the media group." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_document:3 +#: aiogram.utils.media_group.MediaGroupBuilder.add_video:3 of +msgid "" +"File to send. Pass a file_id to send a file that exists on the Telegram " +"servers (recommended), pass an HTTP URL for Telegram to get a file from " +"the Internet, or pass 'attach://' to upload a new one " +"using multipart/form-data under name. :ref:`More " +"information on Sending Files » `" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_document:8 +#: aiogram.utils.media_group.MediaGroupBuilder.add_video:8 of +msgid "" +"*Optional*. Thumbnail of the file sent; can be ignored if thumbnail " +"generation for the file is supported server-side. The thumbnail should be" +" in JPEG format and less than 200 kB in size. A thumbnail's width and " +"height should not exceed 320. Ignored if the file is not uploaded using " +"multipart/form-data. Thumbnails can't be reused and can be only uploaded " +"as a new file, so you can pass 'attach://' if the " +"thumbnail was uploaded using multipart/form-data under " +". :ref:`More information on Sending Files » `" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_document:17 of +msgid "" +"*Optional*. Caption of the document to be sent, 0-1024 characters after " +"entities parsing" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_document:19 of +msgid "" +"*Optional*. Mode for parsing entities in the document caption. See " +"`formatting options `_ for more details." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_document:24 of +msgid "" +"*Optional*. Disables automatic server-side content type detection for " +"files uploaded using multipart/form-data. Always :code:`True`, if the " +"document is sent as part of an album." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_photo:1 of +msgid "Add a photo to the media group." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_photo:8 of +msgid "" +"*Optional*. Caption of the photo to be sent, 0-1024 characters after " +"entities parsing" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_photo:10 of +msgid "" +"*Optional*. Mode for parsing entities in the photo caption. See " +"`formatting options `_ for more details." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_photo:15 of +msgid "" +"*Optional*. Pass :code:`True` if the photo needs to be covered with a " +"spoiler animation" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_video:1 of +msgid "Add a video to the media group." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_video:16 of +msgid "" +"*Optional*. Caption of the video to be sent, 0-1024 characters after " +"entities parsing" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_video:18 of +msgid "" +"*Optional*. Mode for parsing entities in the video caption. See " +"`formatting options `_ for more details." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_video:23 of +msgid "*Optional*. Video width" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_video:24 of +msgid "*Optional*. Video height" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_video:25 of +msgid "*Optional*. Video duration in seconds" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_video:26 of +msgid "" +"*Optional*. Pass :code:`True` if the uploaded video is suitable for " +"streaming" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.add_video:28 of +msgid "" +"*Optional*. Pass :code:`True` if the video needs to be covered with a " +"spoiler animation" +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.build:1 of +msgid "Builds a list of media objects for a media group." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.build:3 of +msgid "Adds the caption to the first media object if it is present." +msgstr "" + +#: aiogram.utils.media_group.MediaGroupBuilder.build:5 of +msgid "List of media objects." +msgstr "" + diff --git a/docs/migration_2_to_3.rst b/docs/migration_2_to_3.rst index 93228c4d..0eeef2bf 100644 --- a/docs/migration_2_to_3.rst +++ b/docs/migration_2_to_3.rst @@ -6,16 +6,17 @@ Migration FAQ (2.x -> 3.0) This guide is still in progress. -This version introduces much many breaking changes and architectural improvements, -helping to reduce global variables count in your code, provides useful mechanisms -to separate your code to modules or just make sharable modules via packages on the PyPi, -makes middlewares and filters more controllable and others. +This version introduces numerous breaking changes and architectural improvements. +It helps reduce the count of global variables in your code, provides useful mechanisms +to modularize your code, and enables the creation of shareable modules via packages on PyPI. +It also makes middlewares and filters more controllable, among other improvements. -On this page you can read about points that changed corresponding to last stable 2.x version. + +On this page, you can read about the changes made in relation to the last stable 2.x version. .. note:: - This page is most like a detailed changelog than a migration guide, + This page more closely resembles a detailed changelog than a migration guide, but it will be updated in the future. Feel free to contribute to this page, if you find something that is not mentioned here. @@ -24,68 +25,74 @@ On this page you can read about points that changed corresponding to last stable Dispatcher ========== -- :class:`Dispatcher` class no longer accepts the `Bot` instance into the initializer, - it should be passed to dispatcher only for starting polling or handling event from webhook. - Also this way adds possibility to use multiple bot instances at the same time ("multibot") +- The :class:`Dispatcher` class no longer accepts a `Bot` instance in its initializer. + Instead, the `Bot` instance should be passed to the dispatcher only for starting polling + or handling events from webhooks. This approach also allows for the use of multiple bot + instances simultaneously ("multibot"). - :class:`Dispatcher` now can be extended with another Dispatcher-like thing named :class:`Router` (:ref:`Read more » `). - With routes you can easily separate your code to multiple modules - and may be share this modules between projects. +- With routes, you can easily modularize your code and potentially share these modules between projects. - Removed the **_handler** suffix from all event handler decorators and registering methods. (:ref:`Read more » `) -- Executor entirely removed, now you can use Dispatcher directly to start polling or webhook. -- Throttling method is completely removed, now you can use middlewares to control - the execution context and use any throttling mechanism you want. +- The Executor has been entirely removed; you can now use the Dispatcher directly to start poll the API or handle webhooks from it. +- The throttling method has been completely removed; you can now use middlewares to control + the execution context and implement any throttling mechanism you desire. - Removed global context variables from the API types, Bot and Dispatcher object, - from now if you want to get current bot instance inside handlers or filters you should - accept the argument :code:`bot: Bot` and use it instead of :code:`Bot.get_current()` - Inside middlewares it can be accessed via :code:`data["bot"]`. -- Now to skip pending updates, you should call the :class:`aiogram.methods.delete_webhook.DeleteWebhook` method directly instead of passing :code:`skip_updates=True` to start polling method. + From now on, if you want to access the current bot instance within handlers or filters, + you should accept the argument :code:`bot: Bot` and use it instead of :code:`Bot.get_current()`. + In middlewares, it can be accessed via :code:`data["bot"]`. +- To skip pending updates, you should now call the :class:`aiogram.methods.delete_webhook.DeleteWebhook` method directly, rather than passing :code:`skip_updates=True` to the start polling method. + Filtering events ================ -- Keyword filters can no more be used, use filters explicitly. (`Read more » `_) -- In due to keyword filters was removed all enabled by default filters (state and content_type now is not enabled), - so you should specify them explicitly if you want to use. +- Keyword filters can no longer be used; use filters explicitly. (`Read more » `_) +- Due to the removal of keyword filters, all previously enabled-by-default filters + (such as state and content_type) are now disabled. + You must specify them explicitly if you wish to use them. For example instead of using :code:`@dp.message_handler(content_types=ContentType.PHOTO)` you should use :code:`@router.message(F.photo)` -- Most of common filters is replaced by "magic filter". (:ref:`Read more » `) -- Now by default message handler receives any content type, - if you want specific one just add the filters (Magic or any other) -- State filter now is not enabled by default, that's mean if you using :code:`state="*"` in v2 - then you should not pass any state filter in v3, and vice versa, - if the state in v2 is not specified now you should specify the state. -- Added possibility to register per-router global filters, that helps to reduces - the number of repetitions in the code and makes easily way to control - for what each router will be used. +- Most common filters have been replaced with the "magic filter." (:ref:`Read more » `) +- By default, the message handler now receives any content type. + If you want a specific one, simply add the appropriate filters (Magic or any other). +- The state filter is no longer enabled by default. This means that if you used :code:`state="*"` + in v2, you should not pass any state filter in v3. + Conversely, if the state was not specified in v2, you will now need to specify it in v3. +- Added the possibility to register global filters for each router, which helps to reduce code + repetition and provides an easier way to control the purpose of each router. + Bot API ======= -- Now all API methods is classes with validation (via `pydantic `_) - (all API calls is also available as methods in the Bot class). -- Added more pre-defined Enums and moved into `aiogram.enums` sub-package. For example chat type enum now is - :class:`aiogram.enums.ChatType` instead of :class:`aiogram.types.chat.ChatType`. - (:ref:`Read more » `) -- Separated HTTP client session into container that can be reused between different - Bot instances in the application. -- API Exceptions is no more classified by specific message in due to Telegram has no documented error codes. - But all errors is classified by HTTP status code and for each method only one case can be caused with the same code, - so in most cases you should check that only error type (by status-code) without checking error message. - (:ref:`Read more » `) +- All API methods are now classes with validation, implemented via + `pydantic `. + These API calls are also available as methods in the Bot class. +- More pre-defined Enums have been added and moved to the `aiogram.enums` sub-package. + For example, the chat type enum is now :class:`aiogram.enums.ChatType` instead of :class:`aiogram.types.chat.ChatType`. +- The HTTP client session has been separated into a container that can be reused + across different Bot instances within the application. +- API Exceptions are no longer classified by specific messages, + as Telegram has no documented error codes. + However, all errors are classified by HTTP status codes, and for each method, + only one type of error can be associated with a given code. + Therefore, in most cases, you should check only the error type (by status code) + without inspecting the error message. + Middlewares =========== -- Middlewares can now control a execution context, e.g. using context managers (:ref:`Read more » `) -- All contextual data now is shared between middlewares, filters and handlers to end-to-end use. +- Middlewares can now control an execution context, e.g., using context managers. + (:ref:`Read more » `) +- All contextual data is now shared end-to-end between middlewares, filters, and handlers. For example now you can easily pass some data into context inside middleware and get it in the filters layer as the same way as in the handlers via keyword arguments. -- Added mechanism named **flags**, that helps to customize handler behavior +- Added a mechanism named **flags** that helps customize handler behavior in conjunction with middlewares. (:ref:`Read more » `) @@ -93,7 +100,7 @@ Keyboard Markup =============== - Now :class:`aiogram.types.inline_keyboard_markup.InlineKeyboardMarkup` - and :class:`aiogram.types.reply_keyboard_markup.ReplyKeyboardMarkup` has no methods to extend it, + and :class:`aiogram.types.reply_keyboard_markup.ReplyKeyboardMarkup` no longer have methods for extension, instead you have to use markup builders :class:`aiogram.utils.keyboard.ReplyKeyboardBuilder` and :class:`aiogram.utils.keyboard.KeyboardBuilder` respectively (:ref:`Read more » `) @@ -102,41 +109,43 @@ Keyboard Markup Callbacks data ============== -- Callback data factory now is strictly typed via `pydantic `_ models +- The callback data factory is now strictly typed using `pydantic `_ models. (:ref:`Read more » `) Finite State machine ==================== -- State filter will no more added to all handlers, you will need to specify state if you want -- Added possibility to change FSM strategy, for example if you want to control state - for each user in chat topics instead of user in chat you can specify it in the Dispatcher. +- State filters will no longer be automatically added to all handlers; + you will need to specify the state if you want to use it. +- Added the possibility to change the FSM strategy. For example, + if you want to control the state for each user based on chat topics rather than + the user in a chat, you can specify this in the Dispatcher. - Now :class:`aiogram.fsm.state.State` and :class:`aiogram.fsm.state.StateGroup` don't have helper methods like :code:`.set()`, :code:`.next()`, etc. - Instead of this you should set states by passing them directly to +- Instead, you should set states by passing them directly to :class:`aiogram.fsm.context.FSMContext` (:ref:`Read more » `) -- State proxy is deprecated, you should update the state data by calling +- The state proxy is deprecated; you should update the state data by calling :code:`state.set_data(...)` and :code:`state.get_data()` respectively. Sending Files ============= -- From now you should wrap sending files into InputFile object before send instead of passing - IO object directly to the API method. (:ref:`Read more » `) +- From now on, you should wrap files in an InputFile object before sending them, + instead of passing the IO object directly to the API method. (:ref:`Read more » `) Webhook ======= -- Simplified aiohttp web app configuration -- By default added possibility to upload files when you use reply into webhook +- The aiohttp web app configuration has been simplified. +- By default, the ability to upload files has been added when you `make requests in response to updates `_ (available for webhook only). Telegram API Server =================== -- `server` param was moved from `Bot` instance to `api` in `BaseSession`. -- `aiogram.bot.api.TELEGRAM_PRODUCTION` was moved to `aiogram.client.telegram.PRODUCTION`. +- The `server` parameter has been moved from the `Bot` instance to `api` in `BaseSession`. +- The constant `aiogram.bot.api.TELEGRAM_PRODUCTION` has been moved to `aiogram.client.telegram.PRODUCTION`.