Compare commits
6 Commits
feat/chat-links
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| e161237894 | |||
| 91b6443f64 | |||
| 961692241a | |||
| f9a07bcadd | |||
| d0b267f0ea | |||
| 5d4d587d1d |
@@ -45,15 +45,22 @@ def before_request():
|
||||
|
||||
@app.context_processor
|
||||
def _inject_autobuild_vers():
|
||||
return {"autobuild_vers": autobuild.autobuild_vers}
|
||||
return {
|
||||
"autobuild_vers": autobuild.autobuild_vers,
|
||||
"autobuild_sizes": autobuild.autobuild_sizes,
|
||||
}
|
||||
|
||||
|
||||
@app.context_processor
|
||||
def _inject_autobuild_date():
|
||||
return {
|
||||
"autobuild_date": g.translations.get("downloads", {})
|
||||
.get("date-format", "{DD}.{MM}.{YYYY}")
|
||||
.format(**autobuild.autobuild_date)
|
||||
"autobuild_date": autobuild.autobuild_date.strftime(
|
||||
g.translations.get("downloads", {})
|
||||
.get("date-format", "{DD}.{MM}.{YYYY}")
|
||||
.replace("{YYYY}", "%Y")
|
||||
.replace("{MM}", "%m")
|
||||
.replace("{DD}", "%d")
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -65,8 +72,6 @@ def inject_translations():
|
||||
template = (
|
||||
g.translations.get(section, {})
|
||||
.get(key, f"${section}: {key}$")
|
||||
.replace("\\n", " \\n")
|
||||
.replace("\n", "")
|
||||
)
|
||||
|
||||
try:
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
[banner]
|
||||
url = https://summerofcode.withgoogle.com/programs/2026/organizations/kolibrios-project-team
|
||||
img = gsoc.png
|
||||
+6
-5
@@ -14,9 +14,10 @@ forum = Forum
|
||||
wiki = Wiki
|
||||
git = Git
|
||||
|
||||
[git]
|
||||
header = KolibriOS ist zu Git gewechselt!
|
||||
text = Schau dir unsere neue entwicklerfreundliche Infrastruktur an
|
||||
[banner]
|
||||
header = KolibriOS wurde zu GSoC 2026 angenommen!
|
||||
text = Informieren Sie sich über Programmdetails und unsere Projektideen
|
||||
alt = GSoC
|
||||
|
||||
[article]
|
||||
p1 = {kolibrios} ist ein winziges, aber unglaublich leistungsfähiges und
|
||||
@@ -66,10 +67,10 @@ screenshots = Bildschirmfotos
|
||||
download_choice = Was soll ich wählen?
|
||||
download_help = Für einen Einsteiger ist die LiveCD am besten geeignet.\n\
|
||||
\n\
|
||||
Im Vergleich zu einer LiveCD hat ein universelles Image den Vorteil, dass\
|
||||
Im Vergleich zu einer LiveCD hat ein universelles Image den Vorteil, dass \
|
||||
Sie die in KolibriOS vorgenommenen Änderungen speichern können.\n\
|
||||
\n\
|
||||
Das Hybrid-Image enthält Unterstützung für die UEFI-Technologie, die zum\
|
||||
Das Hybrid-Image enthält Unterstützung für die UEFI-Technologie, die zum \
|
||||
Booten des Systems auf neuen Computern und Laptops verwendet wird.
|
||||
|
||||
download_description = Auf dieser Seite können Sie die nächtlichen
|
||||
|
||||
+6
-5
@@ -14,9 +14,10 @@ forum = Forum
|
||||
wiki = Wiki
|
||||
git = Git
|
||||
|
||||
[git]
|
||||
header = KolibriOS moved to Git!
|
||||
text = Check our new developers-friendly infrastructure
|
||||
[banner]
|
||||
header = KolibriOS accepted to GSoC 2026!
|
||||
text = Check program details and our project ideas
|
||||
alt = GSoC
|
||||
|
||||
[article]
|
||||
p1 = {kolibrios} is a tiny yet incredibly powerful and fast operating system for
|
||||
@@ -62,10 +63,10 @@ all_rev = All nightly builds
|
||||
download_choice = Which to choose?
|
||||
download_help = For a beginner, the LiveCD is best.\n\
|
||||
\n\
|
||||
Compared to a LiveCD, the advantage of a universal image is that you can\
|
||||
Compared to a LiveCD, the advantage of a universal image is that you can \
|
||||
save changes made in KolibriOS.\n\
|
||||
\n\
|
||||
Hybrid image includes support for UEFI technology, which is used to boot\
|
||||
Hybrid image includes support for UEFI technology, which is used to boot \
|
||||
the system on new computers and laptops.
|
||||
|
||||
download_description = On this page you can download the nightly builds
|
||||
|
||||
+6
-5
@@ -14,9 +14,10 @@ forum = Foro
|
||||
wiki = Wiki
|
||||
git = Git
|
||||
|
||||
[git]
|
||||
header = ¡KolibriOS se ha trasladado a Git!
|
||||
text = Mira nuestra nueva infraestructura amigable para desarrolladores
|
||||
[banner]
|
||||
header = ¡KolibriOS fue aceptado en GSoC 2026!
|
||||
text = Consulta los detalles del programa y nuestras ideas de proyecto
|
||||
alt = GSoC
|
||||
|
||||
[article]
|
||||
p1 = {kolibrios} es un sistema operativo diminuto, pero increíblemente potente y
|
||||
@@ -64,10 +65,10 @@ all_rev = Todos los montajes nocturnos
|
||||
download_choice = ¿Cuál elegir?
|
||||
download_help = Para un principiante, el LiveCD es lo mejor.\n\
|
||||
\n\
|
||||
En comparación con un LiveCD, la ventaja de una imagen universal es que\
|
||||
En comparación con un LiveCD, la ventaja de una imagen universal es que \
|
||||
puedes guardar los cambios realizados en KolibriOS.\n\
|
||||
\n\
|
||||
Imagen híbrida incluye soporte para la tecnología UEFI, que se utiliza para\
|
||||
Imagen híbrida incluye soporte para la tecnología UEFI, que se utiliza para \
|
||||
arrancar el sistema en los nuevos ordenadores y portátiles.
|
||||
|
||||
download_description = En esta página puedes descargar la distribución de
|
||||
|
||||
+6
-5
@@ -14,9 +14,10 @@ forum = Forum
|
||||
wiki = Wiki
|
||||
git = Git
|
||||
|
||||
[git]
|
||||
header = KolibriOS a déménagé sur Git !
|
||||
text = Découvrez notre nouvelle infrastructure conviviale pour les développeurs
|
||||
[banner]
|
||||
header = KolibriOS a été accepté au GSoC 2026 !
|
||||
text = Consultez les détails du programme et nos idées de projets
|
||||
alt = GSoC
|
||||
|
||||
[article]
|
||||
p1 = {kolibrios} est un système d`exploitation minuscule, mais incroyablement
|
||||
@@ -64,10 +65,10 @@ all_rev = Toutes les constructions nocturnes
|
||||
download_choice = Que choisir ?
|
||||
download_help = Pour un débutant, le LiveCD est le meilleur.\n\
|
||||
\n\
|
||||
Par rapport à un LiveCD, l`avantage d`une image universelle est que vous\
|
||||
Par rapport à un LiveCD, l`avantage d`une image universelle est que vous \
|
||||
pouvez sauvegarder les changements effectués dans KolibriOS.\n\
|
||||
\n\
|
||||
L`image hybride inclut le support de la technologie UEFI, qui est utilisée\
|
||||
L`image hybride inclut le support de la technologie UEFI, qui est utilisée \
|
||||
pour démarrer le système sur les nouveaux ordinateurs et portables.
|
||||
|
||||
download_description = Sur cette page, vous pouvez télécharger la distribution
|
||||
|
||||
+6
-6
@@ -14,10 +14,10 @@ forum = Forum
|
||||
wiki = Wiki
|
||||
git = Git
|
||||
|
||||
[git]
|
||||
header = KolibriOS si è spostato su Git!
|
||||
text = Dai un`occhiata alla nostra nuova infrastruttura pensata per gli
|
||||
sviluppatori
|
||||
[banner]
|
||||
header = KolibriOS è stato accettato al GSoC 2026!
|
||||
text = Consulta i dettagli del programma e le nostre idee di progetto
|
||||
alt = GSoC
|
||||
|
||||
[article]
|
||||
p1 = {kolibrios} è un sistema operativo minuscolo, ma incredibilmente potente e
|
||||
@@ -63,10 +63,10 @@ all_rev = Tutte le build notturne
|
||||
download_choice = Quale scegliere?
|
||||
download_help = Per un principiante, il LiveCD è la soluzione migliore.\n\
|
||||
\n\
|
||||
Rispetto a un LiveCD, il vantaggio di un`immagine universale è che è\
|
||||
Rispetto a un LiveCD, il vantaggio di un`immagine universale è che è \
|
||||
possibile salvare le modifiche apportate in KolibriOS.\n\
|
||||
\n\
|
||||
L`immagine ibrida include il supporto per la tecnologia UEFI, utilizzata\
|
||||
L`immagine ibrida include il supporto per la tecnologia UEFI, utilizzata \
|
||||
per avviare il sistema su nuovi computer e portatili.
|
||||
|
||||
download_description = In questa pagina puoi scaricare la distribuzione delle
|
||||
|
||||
+6
-5
@@ -14,9 +14,10 @@ forum = Forum
|
||||
wiki = Wiki
|
||||
git = Git
|
||||
|
||||
[git]
|
||||
header = KolibriOS is verhuisd naar Git!
|
||||
text = Bekijk onze nieuwe, ontwikkelaarsvriendelijke infrastructuur
|
||||
[banner]
|
||||
header = KolibriOS is geaccepteerd voor GSoC 2026!
|
||||
text = Bekijk de programmadetails en onze projectideeën
|
||||
alt = GSoC
|
||||
|
||||
[article]
|
||||
p1 = {kolibrios} is een klein maar ongelooflijk krachtig en snel
|
||||
@@ -64,10 +65,10 @@ all_rev = Alle nachtelijke builds
|
||||
download_choice = Welke moet ik kiezen?
|
||||
download_help = Voor een beginner is de LiveCD het beste.\n\
|
||||
\n\
|
||||
Vergeleken met een LiveCD heeft een universeel image het voordeel dat je\
|
||||
Vergeleken met een LiveCD heeft een universeel image het voordeel dat je \
|
||||
wijzigingen die je in KolibriOS hebt aangebracht, kunt opslaan.\n\
|
||||
\n\
|
||||
Hybride image bevat ondersteuning voor UEFI-technologie, die wordt gebruikt\
|
||||
Hybride image bevat ondersteuning voor UEFI-technologie, die wordt gebruikt \
|
||||
om het systeem op te starten op nieuwe computers en laptops.
|
||||
|
||||
download_description = Op deze pagina kunt u de nightly builds-distributie
|
||||
|
||||
+6
-5
@@ -14,9 +14,10 @@ forum = Форум
|
||||
wiki = Вики
|
||||
git = Git
|
||||
|
||||
[git]
|
||||
header = КолибриОС перешла на Git!
|
||||
text = Ознакомьтесь с нашей новой, удобной для разработчиков инфраструктурой
|
||||
[banner]
|
||||
header = KolibriOS принята в GSoC 2026!
|
||||
text = Ознакомьтесь с деталями программы и нашими идеями проектов
|
||||
alt = GSoC
|
||||
|
||||
[article]
|
||||
p1 = {kolibrios} — это крошечная, но невероятно мощная и быстрая операционная
|
||||
@@ -64,10 +65,10 @@ all_rev = Все ночные сборки
|
||||
download_choice = Какой выбрать?
|
||||
download_help = Для новичка лучше всего подойдет LiveCD.\n \
|
||||
\n\
|
||||
По сравнению с LiveCD преимущество универсального образа в том, что вы\
|
||||
По сравнению с LiveCD преимущество универсального образа в том, что вы \
|
||||
можете сохранить изменения, сделанные в КолибриОС.\n\
|
||||
\n\
|
||||
Гибридный образ включает поддержку технологии UEFI, которая используется\
|
||||
Гибридный образ включает поддержку технологии UEFI, которая используется \
|
||||
для загрузки системы на новых компьютерах и ноутбуках.
|
||||
|
||||
download_description = На этой странице вы можете скачать ночные сборки
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
[title]
|
||||
language = Українська
|
||||
index = KolibriOS
|
||||
download = KolibriOS - Завантажити
|
||||
|
||||
[header]
|
||||
index = Офіційний сайт KolibriOS
|
||||
download = Завантажити KolibriOS
|
||||
|
||||
[menu]
|
||||
kolibrios = KolibriOS
|
||||
download = Завантажити
|
||||
forum = Форум
|
||||
wiki = Вікі
|
||||
git = Git
|
||||
|
||||
[banner]
|
||||
header = KolibriOS прийнято до GSoC 2026!
|
||||
text = Ознайомтеся з деталями програми та нашими ідеями проєктів
|
||||
alt = GSoC
|
||||
|
||||
[article]
|
||||
p1 = {kolibrios} - це крихітна, але неймовірно потужна та швидка
|
||||
операційна система для x86-сумісних ПК. Для її роботи достатньо
|
||||
лише кількох мегабайтів місця на диску, процесора i586 та 12 МБ
|
||||
оперативної пам'яті. При цьому вона містить багатий набір додатків,
|
||||
таких як текстовий редактор, переглядач зображень, графічний редактор,
|
||||
веб-браузер та понад 30 захопливих ігор. Є повна підтримка файлових систем
|
||||
FAT12/16/32, тільки на читання доступні NTFS, exFAT, ISO9660 та Ext2/3/4,
|
||||
а також присутній великий набір {drivers} для популярних звукових, мережевих
|
||||
та графічних карт.
|
||||
drivers = драйверів
|
||||
|
||||
p2 = Ви коли-небудь мріяли про систему, яка завантажується менш ніж за кілька
|
||||
секунд з моменту ввімкнення до появи робочого графічного інтерфейсу? Про додатки,
|
||||
які запускаються миттєво, одразу після натискання на ярлик, без набридливих
|
||||
індикаторів завантаження? Така швидкість досягається завдяки тому, що основні
|
||||
частини {kolibrios} (ядро та драйвери) повністю написані на асемблері {fasm}.
|
||||
Спробуйте {kolibrios} і порівняйте її з такими важковаговиками, як Windows та Linux.
|
||||
|
||||
p3 = {kolibrios} відокремилася від MenuetOS у 2004 році й
|
||||
відтоді розвивається незалежною міжнародною спільнотою.
|
||||
Ваші {feedback} дуже цінуються, а ваша {help} цінується ще більше.
|
||||
feedback = відгуки
|
||||
help = допомога
|
||||
|
||||
p_subscription = Сподіваємося, вам сподобається!
|
||||
|
||||
[downloads]
|
||||
header = Завантажити
|
||||
|
||||
version = Версія:
|
||||
date = Дата збірки:
|
||||
date-format = {DD}.{MM}.{YYYY}
|
||||
|
||||
img-descr = Образ дискети
|
||||
iso-descr = Образ LiveCD
|
||||
distr-descr = Універсальний образ Flash/Multi-boot
|
||||
raw-descr = Гібридний UEFI/BIOS образ
|
||||
|
||||
prev_rev = Попередні випуски
|
||||
all_rev = Усі нічні збірки
|
||||
|
||||
download_choice = Який обрати?
|
||||
download_help = Для новачка найкраще підійде LiveCD.\n \
|
||||
\n\
|
||||
У порівнянні з LiveCD перевага універсального образу полягає в тому, що ви
|
||||
можете зберегти зміни, зроблені в KolibriOS.\n
|
||||
\n\
|
||||
Гібридний образ містить підтримку технології UEFI, яка використовується
|
||||
для завантаження системи на нових комп'ютерах та ноутбуках.
|
||||
|
||||
download_description = На цій сторінці ви можете завантажити нічні збірки
|
||||
дистрибутива. Це означає, що вони завжди містять останні зміни в
|
||||
системі, а отже можуть бути нестабільними. Усі файли стиснуті за
|
||||
допомогою {zip}. {kolibrios} розповсюджується під ліцензією {gpl}, а
|
||||
вихідний код доступний на нашому {git}.
|
||||
git-server = Git-сервері
|
||||
|
||||
download_warn = Іноді антивіруси можуть помилково помічати образ {kolibrios}
|
||||
як загрозу. Це помилкове спрацьовування. {kolibrios} має повністю відкритий
|
||||
вихідний код, і ви завжди можете зібрати її самостійно, щоб
|
||||
переконатися, що вона абсолютно безпечна.
|
||||
|
||||
[screenshots]
|
||||
header = Скриншоти
|
||||
|
||||
1 = Робочий стіл KolibriOS
|
||||
2 = Демки
|
||||
3 = Файлові менеджери
|
||||
4 = Мережеві додатки
|
||||
5 = Ігри
|
||||
6 = Інструменти розробника
|
||||
|
||||
[footer]
|
||||
team = Команда KolibriOS
|
||||
+4
-3
@@ -14,9 +14,10 @@ forum = 论坛
|
||||
wiki = 百科
|
||||
git = Git
|
||||
|
||||
[git]
|
||||
header = KolibriOS 现已拥抱 Git!
|
||||
text = 来看看我们全新又对开发者友好的代码仓库吧:
|
||||
[banner]
|
||||
header = KolibriOS 已被 GSoC 2026 录取!
|
||||
text = 查看项目详情和我们的项目创意
|
||||
alt = GSoC
|
||||
|
||||
[article]
|
||||
p1 = {kolibrios} 是一个体积微小、功能强大、响应迅速的,面向 x86 兼容机的操作系统。
|
||||
|
||||
+4
-3
@@ -14,9 +14,10 @@ forum = 論壇
|
||||
wiki = 百科
|
||||
git = Git
|
||||
|
||||
[git]
|
||||
header = KolibriOS 現已移入 Git!
|
||||
text = 來看看我們又新又友好的代碼倉庫吧:
|
||||
[banner]
|
||||
header = KolibriOS 已入選 GSoC 2026!
|
||||
text = 查看計畫詳情和我們的專案構想
|
||||
alt = GSoC
|
||||
|
||||
[article]
|
||||
p1 = {kolibrios} 是一個空間小、功能強、回應快的,面向 x86 兼容機的作業系統。
|
||||
|
||||
+49
-43
@@ -1,23 +1,50 @@
|
||||
from datetime import date
|
||||
import re
|
||||
import threading
|
||||
import time
|
||||
|
||||
from urllib.request import Request, urlopen
|
||||
|
||||
STATUS_URL = "https://builds.kolibrios.org/status.html"
|
||||
|
||||
STATUS_URL = "http://builds.kolibrios.org/status.html"
|
||||
STATUS_SEC = 300 # refetch each 5 minutes
|
||||
DOWNLOAD_LANGS = ("en_US", "ru_RU", "es_ES")
|
||||
DOWNLOAD_EXTS = ("img", "iso", "distr", "raw")
|
||||
|
||||
autobuild_date = {"YYYY": "YYYY", "MM": "MM", "DD": "DD"}
|
||||
VER_RE = re.compile(r"\b(\d+\.\d+\.\d+\.\d+\+\d{3,8}-[0-9a-fA-F]{7,40})\b")
|
||||
DATE_RE = re.compile(r"\b(\d{4})\.(\d{2})\.(\d{2})\s+\d{2}:\d{2}:\d{2}\b")
|
||||
ROW_RE = re.compile(r"(<tr\b[^>]*>.*?</tr>)", flags=re.I | re.S)
|
||||
|
||||
autobuild_date = date.today()
|
||||
autobuild_vers = "0.0.0.0+0000-0000000"
|
||||
autobuild_sizes = {
|
||||
lang: {ext: "?" for ext in DOWNLOAD_EXTS}
|
||||
for lang in DOWNLOAD_LANGS
|
||||
}
|
||||
|
||||
_started = False
|
||||
_updater_lock = threading.Lock()
|
||||
|
||||
|
||||
def _refresh_build_date_once():
|
||||
def _refresh_build_sizes():
|
||||
for lang in DOWNLOAD_LANGS:
|
||||
for ext in DOWNLOAD_EXTS:
|
||||
url = f"http://builds.kolibrios.org/{lang}/latest-{ext}.7z"
|
||||
req = Request(
|
||||
url,
|
||||
method="HEAD",
|
||||
headers={"User-Agent": "Mozilla/5.0"},
|
||||
)
|
||||
with urlopen(req, timeout=10) as r:
|
||||
content_length = r.headers.get("Content-Length")
|
||||
if not content_length:
|
||||
continue
|
||||
autobuild_sizes[lang][ext] = f"{int(content_length) / 1048576:.1f} MB"
|
||||
|
||||
|
||||
def _refresh_autobuild_once():
|
||||
global autobuild_date, autobuild_vers
|
||||
try:
|
||||
from urllib.request import Request, urlopen
|
||||
|
||||
req = Request(
|
||||
STATUS_URL,
|
||||
headers={
|
||||
@@ -30,47 +57,26 @@ def _refresh_build_date_once():
|
||||
r.headers.get_content_charset() or "utf-8", "replace"
|
||||
)
|
||||
|
||||
rows = re.findall(r"(<tr\b[^>]*>.*?</tr>)", html, flags=re.I | re.S)
|
||||
if not rows:
|
||||
return
|
||||
last_ver = None
|
||||
|
||||
last_commit_ver = None
|
||||
|
||||
for row in rows:
|
||||
for row in ROW_RE.findall(html):
|
||||
cls = re.search(r'class\s*=\s*"([^"]*)"', row, flags=re.I)
|
||||
classes = cls.group(1).lower() if cls else ""
|
||||
|
||||
text = re.sub(r"<[^>]+>", " ", row)
|
||||
|
||||
if "commit" in classes:
|
||||
mver = re.search(
|
||||
r"\b(\d+\.\d+\.\d+\.\d+\+\d{3,8}-[0-9a-fA-F]{7,40})\b", row
|
||||
)
|
||||
mver = VER_RE.search(row)
|
||||
if mver:
|
||||
last_commit_ver = mver.group(1)
|
||||
|
||||
elif "success" in classes:
|
||||
mts = re.search(
|
||||
r"\b(\d{4})\.(\d{2})\.(\d{2})\s+\d{2}:\d{2}:\d{2}\b", text
|
||||
)
|
||||
if not mts:
|
||||
mds = re.search(r"\b(\d{2})\.(\d{2})\.(\d{4})\b", text)
|
||||
if mds:
|
||||
autobuild_date["YYYY"] = mds.group(1)
|
||||
autobuild_date["MM"] = mds.group(2)
|
||||
autobuild_date["DD"] = mds.group(3)
|
||||
else:
|
||||
return
|
||||
else:
|
||||
(
|
||||
autobuild_date["YYYY"],
|
||||
autobuild_date["MM"],
|
||||
autobuild_date["DD"],
|
||||
) = mts.groups()
|
||||
|
||||
if last_commit_ver:
|
||||
autobuild_vers = last_commit_ver
|
||||
return
|
||||
last_ver = mver.group(1)
|
||||
continue
|
||||
if "success" not in classes:
|
||||
continue
|
||||
text = re.sub(r"<[^>]+>", " ", row)
|
||||
mts = DATE_RE.search(text)
|
||||
if mts:
|
||||
autobuild_date = date(*map(int, mts.groups()))
|
||||
if last_ver:
|
||||
autobuild_vers = last_ver
|
||||
_refresh_build_sizes()
|
||||
return
|
||||
|
||||
except Exception:
|
||||
pass
|
||||
@@ -78,7 +84,7 @@ def _refresh_build_date_once():
|
||||
|
||||
def _updater_loop():
|
||||
while True:
|
||||
_refresh_build_date_once()
|
||||
_refresh_autobuild_once()
|
||||
time.sleep(STATUS_SEC)
|
||||
|
||||
|
||||
@@ -91,4 +97,4 @@ def ensure_started():
|
||||
_started = True
|
||||
|
||||
|
||||
_refresh_build_date_once()
|
||||
_refresh_autobuild_once()
|
||||
|
||||
@@ -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()}
|
||||
+1
-1
@@ -19,5 +19,5 @@ def render_localized_template(lang, template_name):
|
||||
template_name,
|
||||
year=date.today().year,
|
||||
),
|
||||
remove_empty_space=True,
|
||||
remove_empty_space=False,
|
||||
)
|
||||
|
||||
@@ -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"]
|
||||
|
||||
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 6.7 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 446 B |
Binary file not shown.
|
After Width: | Height: | Size: 510 B |
Binary file not shown.
|
After Width: | Height: | Size: 239 B |
+22
-11
@@ -16,7 +16,9 @@ $c-shadow-soft: #1C1A281F;
|
||||
$c-article-bd: #C0B9C491;
|
||||
|
||||
$c-primary: #609A21;
|
||||
$c-primary-ink: #609A21AA;
|
||||
|
||||
$c-banner: #F9AB00;
|
||||
$c-banner-ink: #F9AB00AA;
|
||||
|
||||
$c-link: #0472D8;
|
||||
$c-link-hover: #0053B9;
|
||||
@@ -180,12 +182,21 @@ body {
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
box-shadow: inset 0 0 0 4px $c-primary-ink;
|
||||
box-shadow: inset 0 0 0 4px $c-banner-ink;
|
||||
}
|
||||
|
||||
table {
|
||||
table-layout: fixed;
|
||||
}
|
||||
|
||||
td {
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
|
||||
&:first-child,
|
||||
&:last-child {
|
||||
width: 128px;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
@@ -193,7 +204,7 @@ body {
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: $c-primary;
|
||||
color: $c-banner;
|
||||
font-size: 2.5em;
|
||||
margin: 0 0 16px;
|
||||
}
|
||||
@@ -202,14 +213,14 @@ body {
|
||||
margin: 0em;
|
||||
}
|
||||
|
||||
.p-link {
|
||||
margin-top: 16px;
|
||||
color: $c-primary;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
a {
|
||||
color: $c-primary;
|
||||
display: block;
|
||||
margin-top: 16px;
|
||||
overflow-wrap: anywhere;
|
||||
word-break: break-word;
|
||||
font-weight: bold;
|
||||
color: $c-banner;
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -475,7 +486,7 @@ iframe {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
p, .p-link {
|
||||
p {
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
('es_ES', 'Español')
|
||||
) %}
|
||||
<a href="//builds.kolibrios.org/{{ l }}/latest-{{ ext }}.7z"
|
||||
title="ver. $autobuild_cmtid_{{ l }}, $autobuild_size_{{ l }}_{{ ext }}"
|
||||
title="{{ autobuild_vers }}, {{ autobuild_sizes[l][ext] }}"
|
||||
class="button">
|
||||
{{ lang }}
|
||||
{% if l == 'en_US' %}
|
||||
@@ -100,9 +100,9 @@
|
||||
{{ _(
|
||||
'downloads:download_description',
|
||||
kolibrios="<b>{0}</b>".format(_('title:index')),
|
||||
zip="<a href='http://www.7-zip.org' target='_blank'>7zip</a>",
|
||||
gpl="<a href='http://www.gnu.org/licenses/gpl-2.0.html' target='_blank'>GPLv2</a>",
|
||||
git="<a href='https://git.kolibrios.org'>{0}</a>".format(_('downloads:git-server'))
|
||||
zip="<a href='https://7-zip.org' target='_blank'>7zip</a>",
|
||||
gpl="<a href='//www.gnu.org/licenses/gpl-2.0.html' target='_blank'>GPLv2</a>",
|
||||
git="<a href='//git.kolibrios.org'>{0}</a>".format(_('downloads:git-server'))
|
||||
) | safe }}
|
||||
</p>
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
{% include 'tmpl/_menu.htm' %}
|
||||
|
||||
<div id="article">
|
||||
{% include 'tmpl/_git.htm' %}
|
||||
{% include 'tmpl/_banner.htm' %}
|
||||
|
||||
{% include 'tmpl/_article.htm' %}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
'article:p1',
|
||||
kolibrios="<b>{0}</b>"
|
||||
.format(_('menu:kolibrios')),
|
||||
drivers="<a href='http://wiki.kolibrios.org/wiki/Hardware_Support'>{0}</a>"
|
||||
drivers="<a href='//wiki.kolibrios.org/wiki/Hardware_Support'>{0}</a>"
|
||||
.format(_('article:drivers'))
|
||||
) | safe }}
|
||||
</p>
|
||||
@@ -19,7 +19,7 @@
|
||||
'article:p2',
|
||||
kolibrios="<b>{0}</b>"
|
||||
.format(_('menu:kolibrios')),
|
||||
fasm="<a href='http://www.flatassembler.net' target='_blank'>FASM</a>"
|
||||
fasm="<a href='//flatassembler.net' target='_blank'>FASM</a>"
|
||||
) | safe }}
|
||||
</p>
|
||||
|
||||
@@ -28,9 +28,9 @@
|
||||
'article:p3',
|
||||
kolibrios="<b>{0}</b>"
|
||||
.format(_('menu:kolibrios')),
|
||||
feedback="<a href='http://board.kolibrios.org'>{0}</a>"
|
||||
feedback="<a href='//board.kolibrios.org'>{0}</a>"
|
||||
.format(_('article:feedback')),
|
||||
help="<a href='https://git.kolibrios.org/KolibriOS/kolibrios'>{0}</a>"
|
||||
help="<a href='//git.kolibrios.org/KolibriOS/kolibrios'>{0}</a>"
|
||||
.format(_('article:help'))
|
||||
) | safe }}
|
||||
</p>
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
<a id="banner" href="{{ _('banner:url') }}" target="_blank">
|
||||
<table>
|
||||
<tr>
|
||||
<td valign="top" width="128">
|
||||
<img src="{{ url_for('static', filename='img/logo.png') }}" alt="{{ _('title:index')}}">
|
||||
</td>
|
||||
<td valign="top">
|
||||
<h1>{{ _('banner:header') }}</h1>
|
||||
<p>{{ _('banner:text') }}</p>
|
||||
<a href="{{ _('banner:url') }}">{{ _('banner:url') }}</a>
|
||||
</td>
|
||||
<td valign="top" width="128">
|
||||
<img src="{{ url_for('static', filename='img/banners/' + _('banner:img')) }}" alt="{{ _('banner:alt') }}">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</a>
|
||||
@@ -1,7 +1,7 @@
|
||||
<div id="footer">
|
||||
<img src="{{ url_for('static', filename='img/logo.png') }}" alt="KolibriOS">
|
||||
<p>
|
||||
© 2004 – {{ year }} <br />
|
||||
© 2004 - {{ year }} <br />
|
||||
{{ _('footer:team') }}
|
||||
</p>
|
||||
</div>
|
||||
@@ -1,19 +0,0 @@
|
||||
<a id="banner" href="https://git.kolibrios.org" target="_blank">
|
||||
<table>
|
||||
<tr>
|
||||
<td valign="top" width="128">
|
||||
<img src="{{ url_for('static', filename='img/logo.png') }}" alt="KolibriOS">
|
||||
</td>
|
||||
<td valign="top">
|
||||
<h1>{{ _('git:header') }}</h1>
|
||||
<p>{{ _('git:text') }}</p>
|
||||
<p class="p-link">
|
||||
<a href="https://git.kolibrios.org">https://git.kolibrios.org</a>
|
||||
</p>
|
||||
</td>
|
||||
<td valign="top" width="128">
|
||||
<img src="{{ url_for('static', filename='img/gitea.png') }}" alt="Gitea">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</a>
|
||||
@@ -4,7 +4,7 @@
|
||||
<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='favicon.ico') }}">
|
||||
<meta name="description" content="{{ _('header:%s' % request.url_rule.endpoint) }}">
|
||||
<meta name="keywords"
|
||||
content="kolibri, kolibrios, колибри, колибриос, colibri, operating system, assembler, калибри, fasm, alternate, open source">
|
||||
content="kolibri, kolibrios, colibri, colibrios, колибри, колибриос, калибри, калибриос, operating system, assembler, fasm, alternate, open source">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">
|
||||
<script src="{{ url_for('static', filename='script.min.js') }}"></script>
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<nav id="menu">
|
||||
<a href="{{ url_for('index', lang=g.locale) }}" class="{% if request.endpoint == 'index' %}a-sel{% endif %}">
|
||||
<a href="{{ url_for('index', lang=g.locale) }}"{% if request.endpoint == 'index' %} class="a-sel"{% endif %}>
|
||||
{% if current == 'index' %}
|
||||
<font bg="lightblue">{{ _('menu:kolibrios') }}</font>
|
||||
{% else %}
|
||||
{{ _('menu:kolibrios') }}
|
||||
{% endif %}
|
||||
</a>
|
||||
|
||||
<a href="{{ url_for('download', lang=g.locale) }}" class="{% if request.endpoint == 'download' %}a-sel{% endif %}">
|
||||
|
||||
<a href="{{ url_for('download', lang=g.locale) }}"{% if request.endpoint == 'download' %} class="a-sel"{% endif %}>
|
||||
{% if current == 'download' %}
|
||||
<font bg="lightblue">{{ _('menu:download') }}</font>
|
||||
{% else %}
|
||||
@@ -15,10 +15,12 @@
|
||||
{% endif %}
|
||||
</a>
|
||||
|
||||
<a href="https://board.kolibrios.org">{{ _('menu:forum') }}</a>
|
||||
<a href="https://wiki.kolibrios.org/wiki/Main_Page/{{ g.locale }}">{{ _('menu:wiki') }}</a>
|
||||
<a href="https://git.kolibrios.org">Git</a>
|
||||
|
||||
<a href="//board.kolibrios.org">{{ _('menu:forum') }}</a>
|
||||
|
||||
<a href="//wiki.kolibrios.org/wiki/Main_Page/{{ g.locale }}">{{ _('menu:wiki') }}</a>
|
||||
|
||||
<a href="//git.kolibrios.org">Git</a>
|
||||
|
||||
<button onclick="dropdown_show(this)" id="lang-butt">
|
||||
<img src="{{ url_for('static', filename='img/flags/%s.png' % g.locale) }}" alt="{{ g.locale }}">
|
||||
</button>
|
||||
|
||||
@@ -7,11 +7,21 @@
|
||||
<img src="{{ url_for('static', filename='img/icons/i_discord.png') }}" alt="Discord">Discord
|
||||
</a>
|
||||
<br />
|
||||
<a href="https://www.facebook.com/groups/kolibrios/" target="_blank">
|
||||
<a href="https://facebook.com/groups/kolibrios/" target="_blank">
|
||||
<img src="{{ url_for('static', filename='img/icons/i_facebook.png') }}" alt="Facebook">Facebook
|
||||
</a>
|
||||
<br />
|
||||
<a href="https://www.reddit.com/r/KolibriOS/" target="_blank">
|
||||
<a href="https://reddit.com/r/KolibriOS/" target="_blank">
|
||||
<img src="{{ url_for('static', filename='img/icons/i_reddit.png') }}" alt="Reddit">Reddit
|
||||
</a>
|
||||
</p>
|
||||
</p>
|
||||
|
||||
<p class="p-socials">
|
||||
<a href="https://matrix.to/#/#kolibrios:lair.moe" target="_blank">
|
||||
<img src="{{ url_for('static', filename='img/icons/i_matrix.png') }}" alt="Matrix">Matrix
|
||||
</a>
|
||||
<br />
|
||||
<a href="irc://kolibrios.org" target="_blank">
|
||||
<img src="{{ url_for('static', filename='img/icons/i_irc.png') }}" alt="IRC">IRC
|
||||
</a>
|
||||
</p>
|
||||
|
||||
Reference in New Issue
Block a user