AnPv2/Python/Managers/I18NManager.py

72 lines
2.3 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Any, Self, Sequence, Optional
from Interfaces.Application.AnPInterface import AnPInterface
from Utils.Common import Common
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] = Common.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 Common.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, Common.get_array(languages), options)
return Common.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