72 lines
2.3 KiB
Python
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.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 |