diff --git a/configs/banner.ini b/configs/banner.ini new file mode 100644 index 0000000..4c1d396 --- /dev/null +++ b/configs/banner.ini @@ -0,0 +1,3 @@ +[banner] +url = https://summerofcode.withgoogle.com/programs/2026/organizations/kolibrios-project-team +img = gsoc.png diff --git a/locales/de.ini b/locales/de.ini index ff9f1cd..fb0528b 100644 --- a/locales/de.ini +++ b/locales/de.ini @@ -17,8 +17,6 @@ git = Git [banner] header = KolibriOS wurde zu GSoC 2026 angenommen! text = Informieren Sie sich über Programmdetails und unsere Projektideen -url = https://summerofcode.withgoogle.com/programs/2026/organizations/kolibrios-project-team -img = gsoc.png alt = GSoC [article] diff --git a/locales/en.ini b/locales/en.ini index fe2671c..ad72b91 100644 --- a/locales/en.ini +++ b/locales/en.ini @@ -17,8 +17,6 @@ git = Git [banner] header = KolibriOS accepted to GSoC 2026! text = Check program details and our project ideas -url = https://summerofcode.withgoogle.com/programs/2026/organizations/kolibrios-project-team -img = gsoc.png alt = GSoC [article] diff --git a/locales/es.ini b/locales/es.ini index 1582bf0..b6b53e1 100644 --- a/locales/es.ini +++ b/locales/es.ini @@ -17,8 +17,6 @@ git = Git [banner] header = ¡KolibriOS fue aceptado en GSoC 2026! text = Consulta los detalles del programa y nuestras ideas de proyecto -url = https://summerofcode.withgoogle.com/programs/2026/organizations/kolibrios-project-team -img = gsoc.png alt = GSoC [article] diff --git a/locales/fr.ini b/locales/fr.ini index 518c5e1..609b96b 100644 --- a/locales/fr.ini +++ b/locales/fr.ini @@ -17,8 +17,6 @@ git = Git [banner] header = KolibriOS a été accepté au GSoC 2026 ! text = Consultez les détails du programme et nos idées de projets -url = https://summerofcode.withgoogle.com/programs/2026/organizations/kolibrios-project-team -img = gsoc.png alt = GSoC [article] diff --git a/locales/it.ini b/locales/it.ini index 836a96c..5f691b2 100644 --- a/locales/it.ini +++ b/locales/it.ini @@ -17,8 +17,6 @@ git = Git [banner] header = KolibriOS è stato accettato al GSoC 2026! text = Consulta i dettagli del programma e le nostre idee di progetto -url = https://summerofcode.withgoogle.com/programs/2026/organizations/kolibrios-project-team -img = gsoc.png alt = GSoC [article] diff --git a/locales/nl.ini b/locales/nl.ini index aedf188..da82371 100644 --- a/locales/nl.ini +++ b/locales/nl.ini @@ -17,8 +17,6 @@ git = Git [banner] header = KolibriOS is geaccepteerd voor GSoC 2026! text = Bekijk de programmadetails en onze projectideeën -url = https://summerofcode.withgoogle.com/programs/2026/organizations/kolibrios-project-team -img = gsoc.png alt = GSoC [article] diff --git a/locales/ru.ini b/locales/ru.ini index 6a061c9..90f6df7 100644 --- a/locales/ru.ini +++ b/locales/ru.ini @@ -17,8 +17,6 @@ git = Git [banner] header = KolibriOS принята в GSoC 2026! text = Ознакомьтесь с деталями программы и нашими идеями проектов -url = https://summerofcode.withgoogle.com/programs/2026/organizations/kolibrios-project-team -img = gsoc.png alt = GSoC [article] diff --git a/locales/zh-Hans.ini b/locales/zh-Hans.ini index a9c541f..1b7084b 100644 --- a/locales/zh-Hans.ini +++ b/locales/zh-Hans.ini @@ -17,8 +17,6 @@ git = Git [banner] header = KolibriOS 已被 GSoC 2026 录取! text = 查看项目详情和我们的项目创意 -url = https://summerofcode.withgoogle.com/programs/2026/organizations/kolibrios-project-team -img = gsoc.png alt = GSoC [article] diff --git a/locales/zh-Hant.ini b/locales/zh-Hant.ini index f583f89..2fb2796 100644 --- a/locales/zh-Hant.ini +++ b/locales/zh-Hant.ini @@ -17,8 +17,6 @@ git = Git [banner] header = KolibriOS 已入選 GSoC 2026! text = 查看計畫詳情和我們的專案構想 -url = https://summerofcode.withgoogle.com/programs/2026/organizations/kolibrios-project-team -img = gsoc.png alt = GSoC [article] diff --git a/modules/configs.py b/modules/configs.py new file mode 100644 index 0000000..0ed6e8b --- /dev/null +++ b/modules/configs.py @@ -0,0 +1,50 @@ +from os import path, listdir +from configparser import ConfigParser +import threading + + +_configs = {} +_loaded = False +_load_lock = threading.Lock() + + +def load_all_configs(): + new_configs = {} + + configs_dir = "configs" + if not path.isdir(configs_dir): + return new_configs + + for filename in sorted(listdir(configs_dir)): + if not filename.endswith(".ini"): + continue + + file_path = path.join(configs_dir, filename) + cp = ConfigParser() + with open(file_path, encoding="utf-8") as f: + cp.read_file(f) + + for section in cp.sections(): + section_data = new_configs.setdefault(section, {}) + section_data.update(dict(cp[section])) + + return new_configs + + +def ensure_loaded(): + global _configs, _loaded + with _load_lock: + if _loaded: + return + _configs = load_all_configs() + _loaded = True + + +def get_section(name): + ensure_loaded() + return dict(_configs.get(name, {})) + + +def get_all_sections(): + ensure_loaded() + return {section: dict(values) for section, values in _configs.items()} diff --git a/modules/locales.py b/modules/locales.py index c9f698f..6ef9ba9 100644 --- a/modules/locales.py +++ b/modules/locales.py @@ -2,6 +2,8 @@ from os import path, listdir from configparser import ConfigParser import threading +from modules import configs + translations = {} locales_name = {} @@ -33,6 +35,13 @@ def load_all_locales(): section: dict(cp[section]) for section in cp.sections() } + 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) + new_locales_code = locales_code_default + tuple(sorted(locales_code_extra)) new_locales_name = { locale_code: new_translations[locale_code]["title"]["language"]