Files
WGDashboard-PRW/src/modules/routes/locale.py
T
2026-04-02 14:36:04 +02:00

65 lines
2.1 KiB
Python

#!/bin/env python3
import os
import json
import flask
from .response import make_resp_obj
from ..config.config import config
class localeman:
def __init__(self):
_, self.wgd_config = config.read()
self.locale_path = flask.current_app.locale_path
try:
path = os.path.join(self.locale_path, "supported_locales.json")
with open(path, "r", encoding="utf-8") as locale_path:
self.active_languages = sorted(
json.load(locale_path),
key=lambda x: x.get("lang_name", "")
)
except Exception:
self.active_languages = []
def get_language(self):
ok, server_config = config.filter(self.wgd_config, "SERVER")
if not ok:
log.error("failed to filter the config in-memory")
return None
lang = server_config.get("wgdashboard_language", "en")
if lang.lower() == "en":
return None
path = os.path.join(self.locale_path, f"{lang}.json")
if os.path.isfile(path):
with open(path, "r", encoding="utf-8") as lang_file:
return json.load(lang_file)
return None
def get_available_languages():
available_languages_path = "./static/locales/supported_locales.json"
with open(os.path.join(available_languages_path), "r") as f:
language_data = json.load(f)
available_languages = sorted(language_data, key=lambda x: x['lang_name'])
return available_languages
def update_language(self, lang_id) -> bool:
path = os.path.join(self.locale_path, f"{lang_id}.json")
if not os.path.isfile(path):
lang_id = "en"
config.update("SERVER", "wgdashboard_language", lang_id)
# Very important to also refresh the config in-memory
ok, flask.current_app.wgd_config = config.read()
if not ok:
log.error("failed to refresh the in-memory configuration")
return make_resp_obj(False, 'Internal error', {}, 500)
return self.get_language()