Единая интернационализация сервера без доменов

This commit is contained in:
parent f0d5481dfe
commit ec054bbaad
29 changed files with 1313 additions and 1412 deletions

View file

@ -8,7 +8,7 @@ from sdbus_async.networkmanager import (
import sdbus
from sdbus_async.networkmanager.settings import ConnectionProfile
from services.arp_service import NetworkScanner
from utils.i18n import get_translations, _
from utils.i18n import get_translations
from babel.support import Translations
from fastapi import Depends
@ -19,7 +19,7 @@ class IPService:
ARP-сканирования и применения настроек через NetworkManager.
"""
def __init__(self, translations: Translations = Depends(get_translations("services"))):
def __init__(self):
"""Инициализирует сервис IP.
Создаёт объект ARP-сканера и устанавливает системную шину D-Bus как
@ -28,7 +28,6 @@ class IPService:
self.arp_scanner = NetworkScanner()
self.bus = sdbus.sd_bus_open_system()
sdbus.set_default_bus(self.bus)
self.translations = translations
def _reset_bus(self):
"""Перезапускает соединение с системной шиной D-Bus.
@ -42,7 +41,7 @@ class IPService:
self.bus = None
self.bus = new_bus
async def check_ip_config(self, args: Dict[str, Any]) -> Dict[str, Any]:
async def check_ip_config(self, args: Dict[str, Any], translations: Translations = Depends(get_translations())) -> Dict[str, Any]:
"""Проверяет доступность IP-адреса перед его применением.
Выполняет ARP-сканирование сети для проверки, занят ли указанный IP-адрес.
@ -51,6 +50,7 @@ class IPService:
Args:
args (Dict[str, Any]): Словарь с данными, включая "ipv4_updates"
с полем "ipv4.address-data" для нового IP-адреса.
translations (Translations): Объект переводов.
Returns:
Dict[str, Any]: Словарь с ключами:
@ -66,14 +66,14 @@ class IPService:
if any(client["ip"] == new_ip for client in clients):
return {
"available": False,
"message": self.translations.gettext("IP-адрес {ip} уже занят.").format(ip=new_ip)
"message": translations.gettext("IP-адрес {ip} уже занят.").format(ip=new_ip)
}
return {
"available": True,
"message": self.translations.gettext("Настройки сетевого профиля доступны для использования.")
"message": translations.gettext("Настройки сетевого профиля доступны для использования.")
}
async def apply_ip_config(self, args: Dict[str, Any]) -> None:
async def apply_ip_config(self, args: Dict[str, Any], translations: Translations = Depends(get_translations())) -> None:
"""Применяет проверенные настройки IP к указанному соединению.
Перезапускает шину D-Bus, обновляет настройки соединения через NetworkManager,
@ -83,6 +83,7 @@ class IPService:
args (Dict[str, Any]): Словарь с данными, включая:
- "connection_id" (str): Идентификатор соединения.
- "ipv4_updates" (Dict): Обновления настроек IPv4.
translations (Translations): Объект переводов.
Raises:
ValueError: Если соединение с указанным ID не найдено.
@ -98,7 +99,7 @@ class IPService:
args["connection_id"])
if not connection_paths:
raise ValueError(self.translations.gettext("Подключение {connection_id} не найдено").format(connection_id=args["connection_id"]))
raise ValueError(translations.gettext("Подключение {connection_id} не найдено").format(connection_id=args["connection_id"]))
connection = NetworkConnectionSettings(connection_paths[0])
profile = await connection.get_profile()
@ -126,4 +127,4 @@ class IPService:
print(f"Reconnected to {args['connection_id']}")
return
raise RuntimeError(self.translations.gettext("Устройство для интерфейса {interface} не найдено").format(interface=interface_name))
raise RuntimeError(translations.gettext("Устройство для интерфейса {interface} не найдено").format(interface=interface_name))