#!/usr/bin/env python3 # -*- coding: utf-8 -*- from typing import Any, Self, Sequence, Optional from Interfaces.Application.AnPInterface import AnPInterface from Utils.Utils import Utils from Utils.Options import Options class I18NManager: DEFAULT_SENTENCES:dict[str, Any|None] = { "english" : {} } GET_OPTIONS:Options = Options(Options.ALLOW_NULLS) ADD_OPTIONS:Options = Options(Options.NO_OVERWRITE) def __init__(self:Self, anp:AnPInterface) -> None: self.anp:AnPInterface = anp self.__sentences:dict[str, Any|None] = self.DEFAULT_SENTENCES self.__language:str = "english" self.__default_language:str = "english" def __get_sentence(self:Self, strings:str|Sequence[str], languages:list[str], options:Options ) -> str|list[str]|None: keys:list[str] = Utils.get_keys(strings) if len(keys): languages_used:list[str] = [] language:str for language in languages + [ self.__language, self.__default_language ] + list(self.__sentences.keys()): if language in languages_used: continue key:str languages_used.append(language) for key in keys: if key in self.__sentences[language] and ( options.allow_null or self.__sentences[language][key] is not None ): return self.__sentences[language][key] return Utils.get_strings(strings)[0] def get(self:Self, strings:str|Sequence[str], inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None, languages:Optional[str|Sequence[str]] = None, custom_options:int = 0 ) -> Any|None: options:Options = Options(custom_options, self.GET_OPTIONS) text:str|list[str]|None = self.__get_sentence(strings, Utils.get_array(languages), options) return Utils.string_variables(( text if isinstance(text, str) else "".join(text) if isinstance(text, (list, tuple)) else str(text)), inputs) def add(self:Self, inputs:Any|None, custom_options:int = 0) -> None: pass