AIDockerCompose/Python/Managers/I18NManager.py
2026-05-06 18:58:50 +02:00

71 lines
2.2 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Self, Any, Optional, Sequence
from Utils.Utils import Utils
from Interfaces.Application.AIChatInterface import AIChatInterface
class SettingsManager:
DEFAULT_SENTENCES:dict[str, dict[str, str]] = {
"english" : {}
}
def __init__(self:Self, aichat:AIChatInterface) -> None:
self.aichat:AIChatInterface = aichat
self.__sentences:dict[str, dict[str, str|list[str]]] = {}
self.__default_language:str = "english"
self.__language:str = "english"
for key in (
"default_i18n_files", "i18n_files",
"default_i18n", "i18n"
):
self.add(self.get(key), overwrite = True)
def __get(self:Self, texts:str|Sequence[str], language:Optional[str] = None) -> Any|None:
keys:list[str] = Utils.get_keys(texts)
if len(keys):
language:str
done:list[str] = []
for language in (self.__language, self.__default_language) + tuple(Utils.get_keys(self.__sentences)):
if language in self.__sentences and language not in done:
key:str
done.append(language)
for key in keys:
if key in self.__sentences[language]:
return self.__sentences[language][key]
return Utils.get_texts(texts)[0]
def get(self:Self,
texts:str|Sequence[str],
inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None,
language:Optional[str] = None
) -> Any|None:
text:str|list[str]|None = self.__get(texts, language)
return Utils.string_variables((
"".join(text) if Utils.is_array(text) else
text), inputs)
def add(self:Self, inputs:Any|None, overwrite:bool = False) -> None:
block:dict[str, Any|None]
for block in Utils.get_dictionaries(inputs):
language:str
sentences:dict[str, Any|None]
for key, value in block.items():
if overwrite or key not in self.__sentences:
self.__i18n[key] = value