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

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 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)
@ -175,3 +175,35 @@ def set_language(locale: str, response: Response, translations: Translations = D
)
response.set_cookie(key="locale", value=locale, path="/", httponly=True)
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 ""
"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 <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\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"

View file

@ -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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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}"

View file

@ -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 <EMAIL@ADDRESS>\n"
"Language: ru\n"
"Language-Team: ru <LL@li.org>\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