__main__.py我决定将此中间件添加到应用程序文件夹中的文件中:
...
from aiogram_i18n import I18nMiddleware
from aiogram_i18n.cores import FluentRuntimeCore
...
async def main() -> None:
await setup_logging()
bot = Bot(
token=settings.BOT_TOKEN,
default=DefaultBotProperties(parse_mode=ParseMode.HTML),
)
dp = Dispatcher(storage=RedisStorage(redis=redis_storage()))
dp.include_routers(user.router, admin.router, group.router, errors.router)
...
dp.update.middleware(UoWMiddleWare(session_factory=session_factory()))
mw = I18nMiddleware(
core=FluentRuntimeCore(
path="locales/{locale}",
),
)
mw.setup(dispatcher=dp)
await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types())
if __name__ == "__main__":
asyncio.run(main())
在私人聊天的处理程序(我在下面连接的路由器)中,我有这个:
from typing import Any
from aiogram import Router, F
from aiogram.types import Message
from aiogram.filters import Command, CommandStart
from aiogram.methods import TelegramMethod
from aiogram_i18n import I18nContext
from app.repositories import UserRepository
from app.models import Users
from app.filters import AdminFilter, ChatTypeFilter
router = Router()
router.message.filter(ChatTypeFilter(chat_type=["private"]))
@router.message(CommandStart())
async def cmd_start(
message: Message, user: Users, user_service: UserRepository, i18n: I18nContext,
) -> TelegramMethod[Any]:
await message.answer(text=i18n.messages.start(name=user.mention))
在流畅的文件中,它是这样写的:messages-start = "Hello { $name }!"
这就是它的位置:
├── app
│ └── __main__.py
| ...
│
└── locales
│
├── ru
│ └── messages.ftl
│
└── en
└── messages.ftl
毕竟,我通过命令启动机器人python -m app并出现错误:
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/home/.../job/telegram_bot/app/__main__.py", line 13, in <module>
from aiogram_i18n.cores import FluentRuntimeCore
File "<frozen importlib._bootstrap>", line 1229, in _handle_fromlist
File "/home/.../.cache/pypoetry/virtualenvs/telegram-bot-a3iI3O79-py3.11/lib/python3.11/site-packages/aiogram_i18n/cores/__init__.py", line 29, in __getattr__
return cast(BaseCore[Any], getattr(import_module(__cores__[name], "aiogram_i18n.cores"), name))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/.../.cache/pypoetry/virtualenvs/telegram-bot-a3iI3O79-py3.11/lib/python3.11/site-packages/aiogram_i18n/cores/fluent_runtime_core.py", line 5, in <module>
from aiogram_i18n.utils.text_decorator import td
File "/home/.../.cache/pypoetry/virtualenvs/telegram-bot-a3iI3O79-py3.11/lib/python3.11/site-packages/aiogram_i18n/utils/text_decorator.py", line 124, in <module>
td = TextDecoration()
^^^^^^^^^^^^^^^^
File "/home/.../.cache/pypoetry/virtualenvs/telegram-bot-a3iI3O79-py3.11/lib/python3.11/site-packages/aiogram_i18n/utils/text_decorator.py", line 55, in __init__
None: Null(),
^^^^^^
TypeError: Can't instantiate abstract class Null with abstract method expandable_blockquote
我什至尝试只设置默认区域设置和其他东西(我用 get_locale、set_locale 方法编写了另一个中间件,在那里我只是使用数据库,我保存了用户的语言代码),但没有任何改变
有时我觉得版本有问题,我有所有最新版本的依赖项,aiogram,aiogram_i18n,flutter - 它们也都是最新版本:
1. aiogram-i18n = {extras = ["compiler"], version = "^1.3.4"}
2. aiogram = "^3.7.0"
3. fluent-compiler 1.1
4. fluent-syntax 0.19.0
5. babel 2.15.0
抱歉,我通过重新安装修复了它
aiogram_i18n,现在的依赖项poetry包括:一切正常