Compare commits

..

6 Commits

Author SHA1 Message Date
SantaSpeen 8792aaeeb9 [+] dedent fix 2025-05-13 18:43:21 +03:00
SantaSpeen 774a1b0ce3 [+] dedent 2025-05-13 18:35:31 +03:00
SantaSpeen 633c92608f [^] url 2025-03-24 00:55:49 +03:00
SantaSpeen 3f0fe22317 [КОСТЫЛЬ] if no {} in phrase - str JUST NOW 2025-03-23 05:34:26 +03:00
SantaSpeen 2a3eca2c31 [-] print 2025-03-23 04:19:19 +03:00
SantaSpeen f26cc65c7f .idea 2025-03-23 04:11:03 +03:00
2 changed files with 27 additions and 4 deletions
+1 -1
View File
@@ -21,5 +21,5 @@ fmt = "<green>{elapsed} -- {time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{leve
Добавление в проект: Добавление в проект:
```bash ```bash
git submodule add ssh://git@git.anidev.ru:222/andiev-soft/I18N-Module src/modules/i18n git submodule add ssh://git@git.anidev.ru:222/AnidevSoft/I18N-Module.git src/modules/i18n
``` ```
+26 -3
View File
@@ -1,4 +1,5 @@
import builtins import builtins
import textwrap
from collections import defaultdict from collections import defaultdict
import json5 import json5
@@ -12,17 +13,39 @@ except ImportError:
log = logger.bind(module="i18n", prefix="init") log = logger.bind(module="i18n", prefix="init")
log_load = logger.bind(module="i18n", prefix="load") 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: class NestedAccessor:
def __init__(self, parent, key_chain): def __init__(self, parent, key_chain):
self.parent: "I18N" = parent self.parent: "I18N" = parent
self.key_chain = key_chain self.key_chain = key_chain
self.__name__ = f'\r<{".".join(key_chain)}>'.upper()
# self.__func__ = self.key_chain
def __getattr__(self, item): def __getattr__(self, item):
if item.startswith("__"): # Проверяем системные атрибуты # Если нет метода, то возвращаем str
raise AttributeError(f"'{item}' is not accessible") 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 in str_funcs:
return getattr(self(), item)
return NestedAccessor(self.parent, self.key_chain + [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): def __call__(self, **kwargs):
key = ".".join(self.key_chain) key = ".".join(self.key_chain)
return self.parent.get_phrase(key, **kwargs) return self.parent.get_phrase(key, **kwargs)
@@ -96,7 +119,7 @@ class I18N:
phrase = self._locale.get(key) phrase = self._locale.get(key)
if not phrase: if not phrase:
return f"<{key.upper()}>" return f"<{key.upper()}>"
return phrase.format_map(defaultdict(lambda: '<unknown>', kwargs)) return textwrap.dedent(phrase.format_map(defaultdict(lambda: '<unknown>', kwargs)))
def __getattr__(self, item): def __getattr__(self, item):
key = item.replace("_", ".") # заменяем _ на . для удобства key = item.replace("_", ".") # заменяем _ на . для удобства