Files
kolibrios.org/modules/locales.py
T

61 lines
1.7 KiB
Python
Raw Normal View History

2025-12-25 10:32:22 +02:00
from os import path, listdir
from configparser import ConfigParser
import threading
2026-03-02 11:09:15 +00:00
from modules import configs
2025-12-25 10:32:22 +02:00
translations = {}
locales_name = {}
locales_code = ()
_loaded = False
_load_lock = threading.Lock()
def load_all_locales():
new_translations = {}
locales_dir = "locales"
locales_code_default = ("en", "ru", "es")
locales_code_extra = []
new_locales_code = ()
for filename in listdir(locales_dir):
if filename.endswith(".ini"):
cp = ConfigParser()
lang = path.splitext(filename)[0]
with open(path.join(locales_dir, filename), encoding="utf-8") as f:
cp.read_file(f)
if lang not in locales_code_default:
locales_code_extra.append(lang)
new_translations[lang] = {
section: dict(cp[section]) for section in cp.sections()
}
2026-03-02 11:09:15 +00:00
shared_sections = configs.get_all_sections()
if shared_sections:
for locale_translation in new_translations.values():
for section_name, section_values in shared_sections.items():
locale_section = locale_translation.setdefault(section_name, {})
locale_section.update(section_values)
2025-12-25 10:32:22 +02:00
new_locales_code = locales_code_default + tuple(sorted(locales_code_extra))
new_locales_name = {
locale_code: new_translations[locale_code]["title"]["language"]
for locale_code in new_locales_code
}
return new_translations, new_locales_name, new_locales_code
def ensure_loaded():
global translations, locales_name, locales_code, _loaded
with _load_lock:
if _loaded:
return
translations, locales_name, locales_code = load_all_locales()
_loaded = True