Запрос на определение языка системы
This commit is contained in:
parent
0c8533257d
commit
ab78185f08
6 changed files with 106 additions and 54 deletions
|
|
@ -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)}
|
||||
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)))
|
||||
Loading…
Add table
Add a link
Reference in a new issue