71 lines
2.2 KiB
Python
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 |