#!/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