diff --git a/SRV/api/v1/settings.py b/SRV/api/v1/settings.py index a6d9f23..63f6b36 100644 --- a/SRV/api/v1/settings.py +++ b/SRV/api/v1/settings.py @@ -1,5 +1,6 @@ import os import logging +import subprocess from typing import Optional from fastapi import APIRouter, HTTPException, Depends, Response, Request, Body from starlette.responses import FileResponse @@ -94,7 +95,6 @@ def clear_all_data(translations: Translations = Depends(get_translations())): logger.error(f"Error clearing all data: {str(e)}") raise HTTPException(status_code=500, detail=translations.gettext("Ошибка очистки: {error}").format(error=str(e))) -DEVICE_PATH = "storage/devices/devices.json" WIFI_PATH = "storage/wifi/wifi.json" @router.post("/export_devices", response_class=FileResponse) @@ -174,4 +174,36 @@ def set_language(locale: str, response: Response, translations: Translations = D detail=translations.gettext("Язык '{locale}' не поддерживается (нет файлов переводов).").format(locale=locale) ) response.set_cookie(key="locale", value=locale, path="/", httponly=True) - return {"message": translations.gettext("Язык успешно установлен: {locale}").format(locale=locale)} \ No newline at end of file + return {"message": translations.gettext("Язык успешно установлен: {locale}").format(locale=locale)} + +@router.get("/get_system_language") +async def get_system_language(request: Request, translations: Translations = Depends(get_translations())): + """Выводит текущий язык, установленный в системе на основе locale. + + Выполняет команду 'locale' в системе и извлекает параметры LANG + + Args: + request (Request): Объект запроса для доступа к параметрам. + translations: Объект переводов текущего языка. + + Returns: + dict: Словарь с текущим языком системы. + + Raises: + HTTPException: Если не удалось извлечь системный язык (status_code=500). + """ + try: + result = subprocess.run(['locale'], capture_output=True, text=True, check=True) + output = result.stdout + lang = next((line.split('=')[1].strip() for line in output.splitlines() if line.startswith('LANG=')), None) + if lang: + return {"language": lang} + else: + logger.warning(f"No locale found: {output}") + return {"language": 'unknown'} + except subprocess.CalledProcessError as e: + logger.error(f"Error executing locale command: {e}") + raise HTTPException(status_code=500, detail=translations.gettext("Не удалось определить язык в системе")) + except Exception as e: + logger.error(f"Unexpected error getting system language: {str(e)}") + raise HTTPException(status_code=500, detail=translations.gettext("Ошибка при определении языка в системе {error}").format(error=str(e))) \ No newline at end of file diff --git a/SRV/locales/en/LC_MESSAGES/messages.mo b/SRV/locales/en/LC_MESSAGES/messages.mo index 1bdfb80..01b985a 100644 Binary files a/SRV/locales/en/LC_MESSAGES/messages.mo and b/SRV/locales/en/LC_MESSAGES/messages.mo differ diff --git a/SRV/locales/en/LC_MESSAGES/messages.po b/SRV/locales/en/LC_MESSAGES/messages.po index 68e1205..395e5ee 100644 --- a/SRV/locales/en/LC_MESSAGES/messages.po +++ b/SRV/locales/en/LC_MESSAGES/messages.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-07-16 13:39+0500\n" -"PO-Revision-Date: 2025-07-16 13:39+0500\n" +"POT-Creation-Date: 2025-07-17 10:30+0500\n" +"PO-Revision-Date: 2025-07-17 10:30+0500\n" "Last-Translator: FULL NAME \n" "Language: en\n" "Language-Team: en \n" @@ -74,6 +74,7 @@ msgid "Не удалось получить сетевые данные" msgstr "Failed to retrieve network data" #: api/v1/network.py:182 +#, python-brace-format msgid "" "Отсутствуют обязательные поля: container_id, container_x, container_y, " "isOpen" @@ -96,37 +97,37 @@ msgstr "Failed to update container position: {error}" msgid "Не удалось получить имя хоста" msgstr "Failed to retrieve hostname" -#: api/v1/settings.py:38 +#: api/v1/settings.py:39 #, python-brace-format msgid "Данные узлов подсети {subnet} успешно очищены" msgstr "Subnet node data for {subnet} successfully cleared" -#: api/v1/settings.py:40 +#: api/v1/settings.py:41 msgid "Данные всех подсетей успешно очищены" msgstr "All subnet data successfully cleared" -#: api/v1/settings.py:42 +#: api/v1/settings.py:43 msgid "Не удалось очистить данные узлов подсети" msgstr "Failed to clear subnet node data" -#: api/v1/settings.py:45 api/v1/settings.py:70 api/v1/settings.py:95 +#: api/v1/settings.py:46 api/v1/settings.py:71 api/v1/settings.py:96 #, python-brace-format msgid "Ошибка очистки: {error}" msgstr "Clear error: {error}" -#: api/v1/settings.py:65 +#: api/v1/settings.py:66 msgid "Данные точек доступа Wi-Fi успешно очищены" msgstr "Wi-Fi access point data successfully cleared" -#: api/v1/settings.py:67 +#: api/v1/settings.py:68 msgid "Не удалось очистить данные точек доступа Wi-Fi" msgstr "Failed to clear Wi-Fi access point data" -#: api/v1/settings.py:90 +#: api/v1/settings.py:91 msgid "Все сетевые данные успешно очищены" msgstr "All network data successfully cleared" -#: api/v1/settings.py:92 +#: api/v1/settings.py:93 msgid "Не удалось очистить все сетевые данные" msgstr "Failed to clear all network data" @@ -154,6 +155,15 @@ msgstr "Language '{locale}' is not supported (no translation files)." msgid "Язык успешно установлен: {locale}" msgstr "Language successfully set: {locale}" +#: api/v1/settings.py:206 +msgid "Не удалось определить язык в системе" +msgstr "Failed to determine system language" + +#: api/v1/settings.py:209 +#, python-brace-format +msgid "Ошибка при определении языка в системе {error}" +msgstr "Error determining system language: {error}" + #: api/v1/subnet.py:44 #, python-brace-format msgid "Ошибка сканирования подсети: {error}" @@ -174,9 +184,9 @@ msgstr "Device with MAC {mac} not found" msgid "Заметка для устройства с MAC {mac} уже существует" msgstr "Note for device with MAC {mac} already exists" -#: api/v1/subnet.py:96 api/v1/subnet.py:130 api/v1/subnet.py:163 \ -#: api/v1/subnet.py:197 api/v1/subnet.py:231 api/v1/subnet.py:264 \ -#: services/wifi_service.py:319 services/wifi_service.py:337 \ +#: api/v1/subnet.py:96 api/v1/subnet.py:130 api/v1/subnet.py:163 +#: api/v1/subnet.py:197 api/v1/subnet.py:231 api/v1/subnet.py:264 +#: services/wifi_service.py:319 services/wifi_service.py:337 #: services/wifi_service.py:355 #, python-brace-format msgid "Внутренняя ошибка сервера: {error}" @@ -217,7 +227,7 @@ msgstr "Note deleted for device {mac}" msgid "Ошибка удаления заметки: {error}" msgstr "Error deleting note: {error}" -#: api/v1/subnet.py:193 api/v1/subnet.py:227 api/v1/subnet.py:260 \ +#: api/v1/subnet.py:193 api/v1/subnet.py:227 api/v1/subnet.py:260 #: services/wifi_service.py:327 services/wifi_service.py:345 #, python-brace-format msgid "Сеть с SSID {ssid} не найдена" @@ -233,7 +243,7 @@ msgstr "Note for network with SSID {ssid} already exists" msgid "Заметка '{note}' добавлена для сети с SSID {ssid}" msgstr "Note '{note}' added for network with SSID {ssid}" -#: api/v1/subnet.py:229 api/v1/subnet.py:262 services/wifi_service.py:330 \ +#: api/v1/subnet.py:229 api/v1/subnet.py:262 services/wifi_service.py:330 #: services/wifi_service.py:348 #, python-brace-format msgid "Заметка для сети с SSID {ssid} не существует" @@ -280,7 +290,7 @@ msgstr "Wi-Fi status check error: {error}" #: api/v1/websocket.py:145 msgid "Ошибка: Ключ 'activation' отсутствует в полученных данных сети" -msgstr "Error: 'activation' key is missing in received network data" +msgstr "Error: 'activation' key missing in received network data" #: services/arp_service.py:102 msgid "Доступные устройства в сети:" @@ -324,9 +334,9 @@ msgstr "Successfully logged out" #: services/auth_service.py:148 msgid "Ошибка при выходе из системы" -msgstr "Error during logout" +msgstr "Logout error" -#: services/connect_service.py:70 services/connect_service.py:117 \ +#: services/connect_service.py:70 services/connect_service.py:117 #: services/connect_service.py:154 services/wifi_service.py:227 msgid "Wi-Fi-интерфейс не доступен" msgstr "Wi-Fi interface not available" @@ -334,7 +344,7 @@ msgstr "Wi-Fi interface not available" #: services/connect_service.py:74 #, python-brace-format msgid "Сеть с SSID {ssid} не найдена в списке доступных сетей" -msgstr "Network with SSID {ssid} not found in the list of available networks" +msgstr "Network with SSID {ssid} not found in available networks" #: services/connect_service.py:81 services/connect_service.py:92 #, python-brace-format @@ -346,7 +356,7 @@ msgstr "Connection error to {ssid}: Incorrect password" msgid "" "Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно " "указана" -msgstr "Connection error to {ssid}: Network with SSID {ssid} is unavailable or incorrectly specified" +msgstr "Connection error to {ssid}: Network with SSID {ssid} unavailable or incorrectly specified" #: services/connect_service.py:85 services/connect_service.py:95 #, python-brace-format @@ -491,7 +501,7 @@ msgstr "5 GHz" #: services/wifi_service.py:165 msgid "Интерфейс не определён" -msgstr "Interface not specified" +msgstr "Interface not defined" #: services/wifi_service.py:215 msgid "Таймаут при выполнении iw scan" diff --git a/SRV/locales/messages.pot b/SRV/locales/messages.pot index d30c15c..be111b9 100644 --- a/SRV/locales/messages.pot +++ b/SRV/locales/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-07-16 13:39+0500\n" +"POT-Creation-Date: 2025-07-17 10:30+0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -95,37 +95,37 @@ msgstr "" msgid "Не удалось получить имя хоста" msgstr "" -#: api/v1/settings.py:38 +#: api/v1/settings.py:39 #, python-brace-format msgid "Данные узлов подсети {subnet} успешно очищены" msgstr "" -#: api/v1/settings.py:40 +#: api/v1/settings.py:41 msgid "Данные всех подсетей успешно очищены" msgstr "" -#: api/v1/settings.py:42 +#: api/v1/settings.py:43 msgid "Не удалось очистить данные узлов подсети" msgstr "" -#: api/v1/settings.py:45 api/v1/settings.py:70 api/v1/settings.py:95 +#: api/v1/settings.py:46 api/v1/settings.py:71 api/v1/settings.py:96 #, python-brace-format msgid "Ошибка очистки: {error}" msgstr "" -#: api/v1/settings.py:65 +#: api/v1/settings.py:66 msgid "Данные точек доступа Wi-Fi успешно очищены" msgstr "" -#: api/v1/settings.py:67 +#: api/v1/settings.py:68 msgid "Не удалось очистить данные точек доступа Wi-Fi" msgstr "" -#: api/v1/settings.py:90 +#: api/v1/settings.py:91 msgid "Все сетевые данные успешно очищены" msgstr "" -#: api/v1/settings.py:92 +#: api/v1/settings.py:93 msgid "Не удалось очистить все сетевые данные" msgstr "" @@ -153,6 +153,15 @@ msgstr "" msgid "Язык успешно установлен: {locale}" msgstr "" +#: api/v1/settings.py:206 +msgid "Не удалось определить язык в системе" +msgstr "" + +#: api/v1/settings.py:209 +#, python-brace-format +msgid "Ошибка при определении языка в системе {error}" +msgstr "" + #: api/v1/subnet.py:44 #, python-brace-format msgid "Ошибка сканирования подсети: {error}" diff --git a/SRV/locales/ru/LC_MESSAGES/messages.mo b/SRV/locales/ru/LC_MESSAGES/messages.mo index 05cd8e7..b11e538 100644 Binary files a/SRV/locales/ru/LC_MESSAGES/messages.mo and b/SRV/locales/ru/LC_MESSAGES/messages.mo differ diff --git a/SRV/locales/ru/LC_MESSAGES/messages.po b/SRV/locales/ru/LC_MESSAGES/messages.po index ad43a1a..45434ba 100644 --- a/SRV/locales/ru/LC_MESSAGES/messages.po +++ b/SRV/locales/ru/LC_MESSAGES/messages.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-07-16 13:39+0500\n" -"PO-Revision-Date: 2025-07-16 13:39+0500\n" +"POT-Creation-Date: 2025-07-17 10:30+0500\n" +"PO-Revision-Date: 2025-07-17 10:30+0500\n" "Last-Translator: FULL NAME \n" "Language: ru\n" "Language-Team: ru \n" @@ -75,12 +75,8 @@ msgid "Не удалось получить сетевые данные" msgstr "Не удалось получить сетевые данные" #: api/v1/network.py:182 -msgid "" -"Отсутствуют обязательные поля: container_id, container_x, container_y, " -"isOpen" -msgstr "" -"Отсутствуют обязательные поля: container_id, container_x, container_y, " -"isOpen" +msgid "Отсутствуют обязательные поля: container_id, container_x, container_y, isOpen" +msgstr "Отсутствуют обязательные поля: container_id, container_x, container_y, isOpen" #: api/v1/network.py:194 msgid "Неверный тип данных в запросе" @@ -99,37 +95,37 @@ msgstr "Не удалось обновить положение контейне msgid "Не удалось получить имя хоста" msgstr "Не удалось получить имя хоста" -#: api/v1/settings.py:38 +#: api/v1/settings.py:39 #, python-brace-format msgid "Данные узлов подсети {subnet} успешно очищены" msgstr "Данные узлов подсети {subnet} успешно очищены" -#: api/v1/settings.py:40 +#: api/v1/settings.py:41 msgid "Данные всех подсетей успешно очищены" msgstr "Данные всех подсетей успешно очищены" -#: api/v1/settings.py:42 +#: api/v1/settings.py:43 msgid "Не удалось очистить данные узлов подсети" msgstr "Не удалось очистить данные узлов подсети" -#: api/v1/settings.py:45 api/v1/settings.py:70 api/v1/settings.py:95 +#: api/v1/settings.py:46 api/v1/settings.py:71 api/v1/settings.py:96 #, python-brace-format msgid "Ошибка очистки: {error}" msgstr "Ошибка очистки: {error}" -#: api/v1/settings.py:65 +#: api/v1/settings.py:66 msgid "Данные точек доступа Wi-Fi успешно очищены" msgstr "Данные точек доступа Wi-Fi успешно очищены" -#: api/v1/settings.py:67 +#: api/v1/settings.py:68 msgid "Не удалось очистить данные точек доступа Wi-Fi" msgstr "Не удалось очистить данные точек доступа Wi-Fi" -#: api/v1/settings.py:90 +#: api/v1/settings.py:91 msgid "Все сетевые данные успешно очищены" msgstr "Все сетевые данные успешно очищены" -#: api/v1/settings.py:92 +#: api/v1/settings.py:93 msgid "Не удалось очистить все сетевые данные" msgstr "Не удалось очистить все сетевые данные" @@ -157,6 +153,15 @@ msgstr "Язык '{locale}' не поддерживается (нет файло msgid "Язык успешно установлен: {locale}" msgstr "Язык успешно установлен: {locale}" +#: api/v1/settings.py:206 +msgid "Не удалось определить язык в системе" +msgstr "Не удалось определить язык в системе" + +#: api/v1/settings.py:209 +#, python-brace-format +msgid "Ошибка при определении языка в системе {error}" +msgstr "Ошибка при определении языка в системе {error}" + #: api/v1/subnet.py:44 #, python-brace-format msgid "Ошибка сканирования подсети: {error}" @@ -346,12 +351,8 @@ msgstr "Ошибка подключения к {ssid}: Неверный паро #: services/connect_service.py:83 services/connect_service.py:94 #, python-brace-format -msgid "" -"Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно " -"указана" -msgstr "" -"Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно " -"указана" +msgid "Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно указана" +msgstr "Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно указана" #: services/connect_service.py:85 services/connect_service.py:95 #, python-brace-format