text: Title: i18n babel can not extract lazy text strings correct 
  Body: ### Checklist
  
  - [X] I am sure the error is coming from aiogram code
  - [X] I have searched in the issue tracker for similar bug reports, including closed ones
  
  ### Operating system
  
  Any
  
  ### Python version
  
  3.10
  
  ### aiogram version
  
  3.3.0
  
  ### Expected behavior
  
  
  I make en example  according this document: https://docs.aiogram.dev/en/dev-3.x/utils/i18n.html
  
  ```
  ...
  from aiogram.utils.i18n import gettext as _
  from aiogram.utils.i18n import lazy_gettext as __
  from aiogram.utils.i18n import I18n, ConstI18nMiddleware
  ...
  @dp.message(F.text == __("Start"))  # lazy text
  async def handler_1(message: Message) -> None:
      await message.answer(_("Welcome, {name}!").format(name=html.quote(message.from_user.full_name)))
      await message.answer(_("How many messages do you have? Input number, please:"))
  
  @dp.message(F.text)
  async def handler_2(message: Message) -> None:
      # this is plural and wrapped by double underscore
      await message.answer(__("You have {} message!", "You have {} messages!", 2).format(message.text)) 
  ...
  def main() -> None:
  ...
      i18n = I18n(path="locales", default_locale="en", domain="my-super-bot")
      dp.message.outer_middleware(ConstI18nMiddleware(locale='en', i18n=i18n))
  ...
  ```
  I create lines lazy text and gettext wrapped strings.
  Also I add plural forms.
  Extracting strings using Babel  should return this strings in `.pot` template file:
  ```
  "Content-Transfer-Encoding: 8bit\n"
  "Generated-By: Babel 2.13.1\n"
  
  #: lesson1.py:12
  msgid "Start"
  msgstr ""
  
  #: lesson1.py:14
  msgid "Welcome, {name}!"
  msgstr ""
  
  #: lesson1.py:15
  msgid "How many messages do you have? Input number, please:"
  msgstr ""
  
  
  #: lesson1.py:19
  msgid "You have {} message!"
  msgid_plural "You have {} messages!"
  msgstr[0] ""
  msgstr[1] ""
  ```
  
  ### Current behavior
  
  After extraction we loose some strings.
  Babel command
  ```
  pybabel extract -o locales/messages.pot --keywords="__:1,2" --input-dirs=.
  ```
  extracts  either this:
  
  ```
  "Content-Transfer-Encoding: 8bit\n"
  "Generated-By: Babel 2.13.1\n"
  
  <---- So here we loose lazy text string "Start", see expected behavior.
  
  #: lesson1.py:14 
  msgid "Welcome, {name}!"   # regular gettext
  msgstr ""
  
  #: lesson1.py:15
  msgid "How many messages do you have? Input number, please:"  # regular gettext
  msgstr ""
  
  #: lesson1.py:19
  msgid "You have {} message!"  # alias ngettext as gettext in \aiogram\utils\i18n\context.py
  msgid_plural "You have {} messages!"
  msgstr[0] ""
  msgstr[1] ""
  
  ```
  or
  ```
  pybabel extract -o locales/messages.pot --keywords="__"  --input-dirs=.
  ```
   extracts that:
  ```
  "Content-Transfer-Encoding: 8bit\n"
  "Generated-By: Babel 2.13.1\n"
  
  #: lesson1.py:12
  msgid "Start"
  msgstr ""
  
  #: lesson1.py:14
  msgid "Welcome, {name}!"
  msgstr ""
  
  #: lesson1.py:15
  msgid "How many messages do you have? Input number, please:"
  msgstr ""
  
  #: lesson1.py:19
  msgid "You have {} message!"
  msgstr ""
  <---- Here we loose plural forms, see expected behavior.
  
  ```
  Here we loose plural forms.
  
  Ether this or that but not all together.
  The use of these keys` __:1,2` оr `_:1,2` `_` `__`  and their various combinations leads to an even more disastrous result.
  
  
  ### Steps to reproduce
  
  `pybabel extract -o locales/messages.pot --input-dirs=.`
  `pybabel extract -o locales/messages.pot --keywords="__" --input-dirs=.`
  `pybabel extract -o locales/messages.pot  --keywords="__:1,2" --input-dirs=.`
  `pybabel extract -o locales/messages.pot  --keywords="__ __:1,2"--input-dirs=.`
  
  ### Code example
  
  ```python3
  from aiogram import Bot, Dispatcher, F, html
  from aiogram.types import Message
  from aiogram.utils.i18n import gettext as _
  
  from aiogram.utils.i18n import lazy_gettext as __
  from aiogram.utils.i18n import I18n, ConstI18nMiddleware
  
  TOKEN = "token"
  dp = Dispatcher()
  
  
  @dp.message(F.text == __("Start"))
  async def handler_1(message: Message) -> None:
      await message.answer(_("Welcome, {name}!").format(name=html.quote(message.from_user.full_name)))
      await message.answer(_("How many messages do you have? Input number, please:"))
  
  @dp.message(F.text)
  async def handler_2(message: Message) -> None:
      await message.answer(__("You have {} message!", "You have {} messages!", 2).format(message.text))
  
  
  def main() -> None:
      bot = Bot(TOKEN, parse_mode="HTML")
      i18n = I18n(path="locales", default_locale="en", domain="my-super-bot")
      dp.message.outer_middleware(ConstI18nMiddleware(locale='en', i18n=i18n))
      dp.run_polling(bot)
  
  
  if __name__ == "__main__":
      main()
  ```
  
  
  ### Logs
  
  _No response_
  
  ### Additional information
  
  _No response_