[КОСТЫЛЬ] if no {} in phrase - str JUST NOW

This commit is contained in:
Maxim Khomutov 2025-03-23 05:34:26 +03:00
parent 2a3eca2c31
commit 3f0fe22317

View File

@ -12,21 +12,39 @@ except ImportError:
log = logger.bind(module="i18n", prefix="init")
log_load = logger.bind(module="i18n", prefix="load")
str_funcs = {attr for attr in dir(str)}
str_funcs.add('__func__')
str_funcs.remove('__init__')
str_funcs.remove('__len__')
str_funcs.remove('__hash__')
str_funcs.remove('__add__')
str_funcs.remove('__str__')
str_funcs.remove('__repr__')
class NestedAccessor:
def __init__(self, parent, key_chain):
self.parent: "I18N" = parent
self.key_chain = key_chain
self.__name__ = f'<{".".join(key_chain)}>'.upper()
self.__name__ = f'\r<{".".join(key_chain)}>'.upper()
# self.__func__ = self.key_chain
def __getattr__(self, item):
# Если нет метода, то возвращаем str
key = ".".join((*self.key_chain, item))
if key in self.parent.locale:
if "{" not in self.parent.locale[key]:
return self.parent.get_phrase(key)
if item.startswith("__"): # Проверяем системные атрибуты
raise AttributeError(f"'{item}' is not accessible")
if item in str_funcs:
return getattr(self(), item)
return NestedAccessor(self.parent, self.key_chain + [item])
def __len__(self):
return len(self())
def __hash__(self):
return hash(self())
def __call__(self, **kwargs):
key = ".".join(self.key_chain)
return self.parent.get_phrase(key, **kwargs)