Запрос на определение языка системы

This commit is contained in:
parent 0c8533257d
commit ab78185f08
6 changed files with 106 additions and 54 deletions

View file

@ -1,5 +1,6 @@
import os import os
import logging import logging
import subprocess
from typing import Optional from typing import Optional
from fastapi import APIRouter, HTTPException, Depends, Response, Request, Body from fastapi import APIRouter, HTTPException, Depends, Response, Request, Body
from starlette.responses import FileResponse 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)}") logger.error(f"Error clearing all data: {str(e)}")
raise HTTPException(status_code=500, detail=translations.gettext("Ошибка очистки: {error}").format(error=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" WIFI_PATH = "storage/wifi/wifi.json"
@router.post("/export_devices", response_class=FileResponse) @router.post("/export_devices", response_class=FileResponse)
@ -175,3 +175,35 @@ def set_language(locale: str, response: Response, translations: Translations = D
) )
response.set_cookie(key="locale", value=locale, path="/", httponly=True) response.set_cookie(key="locale", value=locale, path="/", httponly=True)
return {"message": translations.gettext("Язык успешно установлен: {locale}").format(locale=locale)} 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)))

View file

@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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: 2025-07-16 13:39+0500\n" "PO-Revision-Date: 2025-07-17 10:30+0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n" "Language: en\n"
"Language-Team: en <LL@li.org>\n" "Language-Team: en <LL@li.org>\n"
@ -74,6 +74,7 @@ msgid "Не удалось получить сетевые данные"
msgstr "Failed to retrieve network data" msgstr "Failed to retrieve network data"
#: api/v1/network.py:182 #: api/v1/network.py:182
#, python-brace-format
msgid "" msgid ""
"Отсутствуют обязательные поля: container_id, container_x, container_y, " "Отсутствуют обязательные поля: container_id, container_x, container_y, "
"isOpen" "isOpen"
@ -96,37 +97,37 @@ msgstr "Failed to update container position: {error}"
msgid "Не удалось получить имя хоста" msgid "Не удалось получить имя хоста"
msgstr "Failed to retrieve hostname" msgstr "Failed to retrieve hostname"
#: api/v1/settings.py:38 #: api/v1/settings.py:39
#, python-brace-format #, python-brace-format
msgid "Данные узлов подсети {subnet} успешно очищены" msgid "Данные узлов подсети {subnet} успешно очищены"
msgstr "Subnet node data for {subnet} successfully cleared" msgstr "Subnet node data for {subnet} successfully cleared"
#: api/v1/settings.py:40 #: api/v1/settings.py:41
msgid "Данные всех подсетей успешно очищены" msgid "Данные всех подсетей успешно очищены"
msgstr "All subnet data successfully cleared" msgstr "All subnet data successfully cleared"
#: api/v1/settings.py:42 #: api/v1/settings.py:43
msgid "Не удалось очистить данные узлов подсети" msgid "Не удалось очистить данные узлов подсети"
msgstr "Failed to clear subnet node data" 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 #, python-brace-format
msgid "Ошибка очистки: {error}" msgid "Ошибка очистки: {error}"
msgstr "Clear error: {error}" msgstr "Clear error: {error}"
#: api/v1/settings.py:65 #: api/v1/settings.py:66
msgid "Данные точек доступа Wi-Fi успешно очищены" msgid "Данные точек доступа Wi-Fi успешно очищены"
msgstr "Wi-Fi access point data successfully cleared" msgstr "Wi-Fi access point data successfully cleared"
#: api/v1/settings.py:67 #: api/v1/settings.py:68
msgid "Не удалось очистить данные точек доступа Wi-Fi" msgid "Не удалось очистить данные точек доступа Wi-Fi"
msgstr "Failed to clear Wi-Fi access point data" msgstr "Failed to clear Wi-Fi access point data"
#: api/v1/settings.py:90 #: api/v1/settings.py:91
msgid "Все сетевые данные успешно очищены" msgid "Все сетевые данные успешно очищены"
msgstr "All network data successfully cleared" msgstr "All network data successfully cleared"
#: api/v1/settings.py:92 #: api/v1/settings.py:93
msgid "Не удалось очистить все сетевые данные" msgid "Не удалось очистить все сетевые данные"
msgstr "Failed to clear all network data" msgstr "Failed to clear all network data"
@ -154,6 +155,15 @@ msgstr "Language '{locale}' is not supported (no translation files)."
msgid "Язык успешно установлен: {locale}" msgid "Язык успешно установлен: {locale}"
msgstr "Language successfully set: {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 #: api/v1/subnet.py:44
#, python-brace-format #, python-brace-format
msgid "Ошибка сканирования подсети: {error}" msgid "Ошибка сканирования подсети: {error}"
@ -174,9 +184,9 @@ msgstr "Device with MAC {mac} not found"
msgid "Заметка для устройства с MAC {mac} уже существует" msgid "Заметка для устройства с MAC {mac} уже существует"
msgstr "Note for device with MAC {mac} already exists" 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: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 \ #: 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:319 services/wifi_service.py:337
#: services/wifi_service.py:355 #: services/wifi_service.py:355
#, python-brace-format #, python-brace-format
msgid "Внутренняя ошибка сервера: {error}" msgid "Внутренняя ошибка сервера: {error}"
@ -217,7 +227,7 @@ msgstr "Note deleted for device {mac}"
msgid "Ошибка удаления заметки: {error}" msgid "Ошибка удаления заметки: {error}"
msgstr "Error deleting note: {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 #: services/wifi_service.py:327 services/wifi_service.py:345
#, python-brace-format #, python-brace-format
msgid "Сеть с SSID {ssid} не найдена" msgid "Сеть с SSID {ssid} не найдена"
@ -233,7 +243,7 @@ msgstr "Note for network with SSID {ssid} already exists"
msgid "Заметка '{note}' добавлена для сети с SSID {ssid}" msgid "Заметка '{note}' добавлена для сети с SSID {ssid}"
msgstr "Note '{note}' added for network with 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 #: services/wifi_service.py:348
#, python-brace-format #, python-brace-format
msgid "Заметка для сети с SSID {ssid} не существует" msgid "Заметка для сети с SSID {ssid} не существует"
@ -280,7 +290,7 @@ msgstr "Wi-Fi status check error: {error}"
#: api/v1/websocket.py:145 #: api/v1/websocket.py:145
msgid "Ошибка: Ключ 'activation' отсутствует в полученных данных сети" 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 #: services/arp_service.py:102
msgid "Доступные устройства в сети:" msgid "Доступные устройства в сети:"
@ -324,9 +334,9 @@ msgstr "Successfully logged out"
#: services/auth_service.py:148 #: services/auth_service.py:148
msgid "Ошибка при выходе из системы" 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 #: services/connect_service.py:154 services/wifi_service.py:227
msgid "Wi-Fi-интерфейс не доступен" msgid "Wi-Fi-интерфейс не доступен"
msgstr "Wi-Fi interface not available" msgstr "Wi-Fi interface not available"
@ -334,7 +344,7 @@ msgstr "Wi-Fi interface not available"
#: services/connect_service.py:74 #: services/connect_service.py:74
#, python-brace-format #, python-brace-format
msgid "Сеть с SSID {ssid} не найдена в списке доступных сетей" 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 #: services/connect_service.py:81 services/connect_service.py:92
#, python-brace-format #, python-brace-format
@ -346,7 +356,7 @@ msgstr "Connection error to {ssid}: Incorrect password"
msgid "" msgid ""
"Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно " "Ошибка подключения к {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 #: services/connect_service.py:85 services/connect_service.py:95
#, python-brace-format #, python-brace-format
@ -491,7 +501,7 @@ msgstr "5 GHz"
#: services/wifi_service.py:165 #: services/wifi_service.py:165
msgid "Интерфейс не определён" msgid "Интерфейс не определён"
msgstr "Interface not specified" msgstr "Interface not defined"
#: services/wifi_service.py:215 #: services/wifi_service.py:215
msgid "Таймаут при выполнении iw scan" msgid "Таймаут при выполнении iw scan"

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -95,37 +95,37 @@ msgstr ""
msgid "Не удалось получить имя хоста" msgid "Не удалось получить имя хоста"
msgstr "" msgstr ""
#: api/v1/settings.py:38 #: api/v1/settings.py:39
#, python-brace-format #, python-brace-format
msgid "Данные узлов подсети {subnet} успешно очищены" msgid "Данные узлов подсети {subnet} успешно очищены"
msgstr "" msgstr ""
#: api/v1/settings.py:40 #: api/v1/settings.py:41
msgid "Данные всех подсетей успешно очищены" msgid "Данные всех подсетей успешно очищены"
msgstr "" msgstr ""
#: api/v1/settings.py:42 #: api/v1/settings.py:43
msgid "Не удалось очистить данные узлов подсети" msgid "Не удалось очистить данные узлов подсети"
msgstr "" 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 #, python-brace-format
msgid "Ошибка очистки: {error}" msgid "Ошибка очистки: {error}"
msgstr "" msgstr ""
#: api/v1/settings.py:65 #: api/v1/settings.py:66
msgid "Данные точек доступа Wi-Fi успешно очищены" msgid "Данные точек доступа Wi-Fi успешно очищены"
msgstr "" msgstr ""
#: api/v1/settings.py:67 #: api/v1/settings.py:68
msgid "Не удалось очистить данные точек доступа Wi-Fi" msgid "Не удалось очистить данные точек доступа Wi-Fi"
msgstr "" msgstr ""
#: api/v1/settings.py:90 #: api/v1/settings.py:91
msgid "Все сетевые данные успешно очищены" msgid "Все сетевые данные успешно очищены"
msgstr "" msgstr ""
#: api/v1/settings.py:92 #: api/v1/settings.py:93
msgid "Не удалось очистить все сетевые данные" msgid "Не удалось очистить все сетевые данные"
msgstr "" msgstr ""
@ -153,6 +153,15 @@ msgstr ""
msgid "Язык успешно установлен: {locale}" msgid "Язык успешно установлен: {locale}"
msgstr "" msgstr ""
#: api/v1/settings.py:206
msgid "Не удалось определить язык в системе"
msgstr ""
#: api/v1/settings.py:209
#, python-brace-format
msgid "Ошибка при определении языка в системе {error}"
msgstr ""
#: api/v1/subnet.py:44 #: api/v1/subnet.py:44
#, python-brace-format #, python-brace-format
msgid "Ошибка сканирования подсети: {error}" msgid "Ошибка сканирования подсети: {error}"

View file

@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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: 2025-07-16 13:39+0500\n" "PO-Revision-Date: 2025-07-17 10:30+0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: ru\n" "Language: ru\n"
"Language-Team: ru <LL@li.org>\n" "Language-Team: ru <LL@li.org>\n"
@ -75,12 +75,8 @@ msgid "Не удалось получить сетевые данные"
msgstr "Не удалось получить сетевые данные" msgstr "Не удалось получить сетевые данные"
#: api/v1/network.py:182 #: api/v1/network.py:182
msgid "" msgid "Отсутствуют обязательные поля: container_id, container_x, container_y, isOpen"
"Отсутствуют обязательные поля: container_id, container_x, container_y, " msgstr "Отсутствуют обязательные поля: container_id, container_x, container_y, isOpen"
"isOpen"
msgstr ""
"Отсутствуют обязательные поля: container_id, container_x, container_y, "
"isOpen"
#: api/v1/network.py:194 #: api/v1/network.py:194
msgid "Неверный тип данных в запросе" msgid "Неверный тип данных в запросе"
@ -99,37 +95,37 @@ msgstr "Не удалось обновить положение контейне
msgid "Не удалось получить имя хоста" msgid "Не удалось получить имя хоста"
msgstr "Не удалось получить имя хоста" msgstr "Не удалось получить имя хоста"
#: api/v1/settings.py:38 #: api/v1/settings.py:39
#, python-brace-format #, python-brace-format
msgid "Данные узлов подсети {subnet} успешно очищены" msgid "Данные узлов подсети {subnet} успешно очищены"
msgstr "Данные узлов подсети {subnet} успешно очищены" msgstr "Данные узлов подсети {subnet} успешно очищены"
#: api/v1/settings.py:40 #: api/v1/settings.py:41
msgid "Данные всех подсетей успешно очищены" msgid "Данные всех подсетей успешно очищены"
msgstr "Данные всех подсетей успешно очищены" msgstr "Данные всех подсетей успешно очищены"
#: api/v1/settings.py:42 #: api/v1/settings.py:43
msgid "Не удалось очистить данные узлов подсети" msgid "Не удалось очистить данные узлов подсети"
msgstr "Не удалось очистить данные узлов подсети" 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 #, python-brace-format
msgid "Ошибка очистки: {error}" msgid "Ошибка очистки: {error}"
msgstr "Ошибка очистки: {error}" msgstr "Ошибка очистки: {error}"
#: api/v1/settings.py:65 #: api/v1/settings.py:66
msgid "Данные точек доступа Wi-Fi успешно очищены" msgid "Данные точек доступа Wi-Fi успешно очищены"
msgstr "Данные точек доступа Wi-Fi успешно очищены" msgstr "Данные точек доступа Wi-Fi успешно очищены"
#: api/v1/settings.py:67 #: api/v1/settings.py:68
msgid "Не удалось очистить данные точек доступа Wi-Fi" msgid "Не удалось очистить данные точек доступа Wi-Fi"
msgstr "Не удалось очистить данные точек доступа Wi-Fi" msgstr "Не удалось очистить данные точек доступа Wi-Fi"
#: api/v1/settings.py:90 #: api/v1/settings.py:91
msgid "Все сетевые данные успешно очищены" msgid "Все сетевые данные успешно очищены"
msgstr "Все сетевые данные успешно очищены" msgstr "Все сетевые данные успешно очищены"
#: api/v1/settings.py:92 #: api/v1/settings.py:93
msgid "Не удалось очистить все сетевые данные" msgid "Не удалось очистить все сетевые данные"
msgstr "Не удалось очистить все сетевые данные" msgstr "Не удалось очистить все сетевые данные"
@ -157,6 +153,15 @@ msgstr "Язык '{locale}' не поддерживается (нет файло
msgid "Язык успешно установлен: {locale}" msgid "Язык успешно установлен: {locale}"
msgstr "Язык успешно установлен: {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 #: api/v1/subnet.py:44
#, python-brace-format #, python-brace-format
msgid "Ошибка сканирования подсети: {error}" msgid "Ошибка сканирования подсети: {error}"
@ -346,12 +351,8 @@ msgstr "Ошибка подключения к {ssid}: Неверный паро
#: services/connect_service.py:83 services/connect_service.py:94 #: services/connect_service.py:83 services/connect_service.py:94
#, python-brace-format #, python-brace-format
msgid "" msgid "Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно указана"
"Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно " msgstr "Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно указана"
"указана"
msgstr ""
"Ошибка подключения к {ssid}: Сеть с SSID {ssid} недоступна или неверно "
"указана"
#: services/connect_service.py:85 services/connect_service.py:95 #: services/connect_service.py:85 services/connect_service.py:95
#, python-brace-format #, python-brace-format