Author SHA1 Message Date
Sweetbread 1730eaeaf9 ci: add docker image creation
Docker Build and Push / build-and-push (push) Failing after 3m41s
2025-12-28 17:10:05 +03:00
Burer 17edacd3ac feat/flask: split app into modules
feat/flask: !fix strange code to previous
2025-12-27 23:07:49 +03:00
Burer 03b45c8253 feat/flask: add html, css and js minification
feat/flask: !fix to previous
2025-12-27 23:07:49 +03:00
Burer 4cb94f613e feat/flask: fix long lines, typos and trailing spaces in locales files
feat/flask: fix mistakes in ru locale
2025-12-27 23:07:49 +03:00
Burer d3bb363878 feat/flask: proper current locale in archive link 2025-12-27 23:07:49 +03:00
Burer 997e1c20bf feat/flask: refactored style.scss 2025-12-27 23:07:48 +03:00
Burer fc8aa255df feat/flask: cleaned unused imports 2025-12-27 23:07:48 +03:00
Burer 65f5c6658a feat/flask: change article video depending on current locale 2025-12-27 23:07:46 +03:00
Burer db77b57f74 feat/flask: reworked downloads page
- new table styles
- info about last version and build date
- "viruses" warning paragraph
2025-12-27 23:07:46 +03:00
Burer 71681f43b7 feat/flask: autoupdate of last build date 2025-12-27 23:07:46 +03:00
Burer 763402303e feat/flask: update requirements.txt 2025-12-27 23:07:46 +03:00
Burer 2e8383611b feat/flask: fix highlight of active screenshot gallery element 2025-12-27 23:07:46 +03:00
Burer 5a4a306255 feat/flask: change scss compiler to Python lib 2025-12-27 23:07:46 +03:00
Burer 4eb8bdd170 feat/flask: update all locale files to new _-funtion style 2025-12-27 23:07:46 +03:00
Sweetbread 5a7cf7ce1b feat: css to scss 2025-12-27 23:07:46 +03:00
Sweetbread 335574864d l10n(ru): format strings 2025-12-27 23:07:46 +03:00
Sweetbread 7439561559 feat: add _ function 2025-12-27 23:07:46 +03:00
Sweetbread 754e7ae38c util: add shell.nix 2025-12-27 23:07:46 +03:00
Burer 70dfb015c4 feat/flask remove redundant favicon route, move config parser definition into locales function 2025-12-27 22:48:32 +03:00
Burer a3ba6a78fb feat/flask: add sitemap.xml and robots.txt 2025-12-27 22:48:32 +03:00
Burer 81d25bc645 feat/flask: small tweaks and fixes 2025-12-27 22:48:32 +03:00
Burer 89a5f8a5ae feat/flask: simplified header structure/locales/routing 2025-12-27 22:48:32 +03:00
Burer 5953266fbc feat/flask: global locales and templates rework
Now list of locales is autogenerated from locales .ini files, and each locale use shared template files
2025-12-27 22:48:32 +03:00
Burer 25d68524b7 feat/flask: images cleanup
- delete obsolete images
- resort images by folders
- add proper alt= parameters and standartized closing to <img> tags
2025-12-27 22:48:32 +03:00
Burer 838380254f feat/flask: autogenerate languages for dropdown from locale files 2025-12-27 22:48:32 +03:00
Burer 8b9a0e4b75 feat/flask: total rework and finalization
- Finished all locale pages
- Updated styles, fixed some mobile problems
- Updated texts on index page
- Fixed flask locales search error, now it throws 404
- Something else, that I already forgot
2025-12-27 22:48:32 +03:00
Burer f3eeff5939 feat/flask: Reworked locales system to use separate .ini file for each language 2025-12-27 22:48:32 +03:00
Burer 9a22083ff9 feat/flask: Small fixes and maintenance
- Fixed encoding error when reading locale.ini
- Added redirect from "/" route to "/en" route
- Added ifmain to app.py to fix Flask console error
- Added .gitignore for Flask
- Added requirements.txt

[feat/flask] Small infrastructure fixes

- Added Dockerfile and .env in .gitignore (just in case)
- Sorted .gitignore
- Removed Flask dependencies from requirements.txt
2025-12-27 22:48:27 +03:00
Sweetbread fb0d1c2199 wip: rewrite to flask 2025-12-25 14:55:37 +02:00
29 changed files with 1219 additions and 766 deletions
+31
View File
@@ -0,0 +1,31 @@
name: Docker Build and Push
on:
push:
branches: [main]
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Login to Docker Registry
uses: docker/login-action@v2
with:
registry: git.kolibrios.org
username: kolibrios
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: .
push: ${{ github.event_name == 'push' }}
tags: git.kolibrios.org/kolibrios/kolibrios.org:latest
cache-from: type=gha
cache-to: type=gha,mode=max
+3
View File
@@ -19,3 +19,6 @@ docs/_build/
# Our's
Dockerfile
.env
static/*.css
static/*.css.map
static/*.min.js
+62 -71
View File
@@ -1,15 +1,10 @@
from os import path, listdir
from datetime import date
from configparser import ConfigParser
import re
import datetime
from flask import (
Flask,
redirect,
render_template,
request,
url_for,
Response
)
from sass import compile as compile_sass
from flask import Flask, redirect, request, url_for, g, Response
from modules import autobuild, locales, helpers
# ---------- APP CONFIG ------------------------------------------------------
@@ -17,84 +12,80 @@ from flask import (
app = Flask(__name__)
locales.ensure_loaded()
# ---------- LOCALES FUNCTIONS -----------------------------------------------
if app.debug:
# CSS Compilation and minification
css = compile_sass(filename="static/style.scss", output_style="compressed")
with open("static/style.css", "w", encoding="utf-8") as f:
f.write(css)
# JS minification
with open("static/script.js", encoding="utf-8") as f:
js = f.read()
js = re.sub(r"/\*.*?\*/", "", js, flags=re.S)
js = re.sub(r"//.*", "", js)
js = re.sub(r"\s+", " ", js).strip()
with open("static/script.min.js", "w", encoding="utf-8") as f:
f.write(js)
def load_all_locales():
cp = ConfigParser()
locales_list = []
locales_dict = {}
locales_dir = "locales"
for filename in listdir(locales_dir):
if filename.endswith(".ini"):
lang = path.splitext(filename)[0]
with open(path.join(locales_dir, filename), encoding="utf-8") as f:
cp.read_file(f)
locales_dict[lang] = {
section: dict(cp[section]) for section in cp.sections()
}
for code, data in locales_dict.items():
full_name = data.get("title", {}).get("language", code)
locales_list.append({"code": code, "name": full_name})
priority = ["en", "ru", "es"]
locales_list.sort(
key=lambda loc: (0, priority.index(loc["code"]))
if loc["code"] in priority
else (1, loc["code"])
)
locales_code = [loc["code"] for loc in locales_list]
return locales_list, locales_dict, locales_code
@app.before_request
def _ensure_updater_started():
autobuild.ensure_started()
locales_list, locales_dict, locales_code = load_all_locales()
@app.before_request
def before_request():
if args := request.view_args:
g.locale = args.get("lang", "en")
g.translations = locales.translations.get(g.locale, helpers.get_best_lang())
g.locales_name = locales.locales_name
# ---------- HELPER FUNCTIONS ------------------------------------------------
@app.context_processor
def _inject_autobuild_vers():
return {'autobuild_vers': autobuild.autobuild_vers}
def get_best_lang():
return request.accept_languages.best_match(locales_code) or "en"
@app.context_processor
def _inject_autobuild_date():
return {'autobuild_date': autobuild.autobuild_date}
def render_localized_template(lang, template_name):
if lang not in locales_dict:
return redirect(url_for("index", lang=get_best_lang()))
@app.context_processor
def inject_translations():
def translate(text, **kwargs):
section, key = text.split(":", 1)
return render_template(
template_name,
loc_list=locales_list,
locale=locales_dict[lang],
lang=lang,
year=date.today().year,
current=request.endpoint,
)
template = g.translations \
.get(section, {}) \
.get(key, f"${section}: {key}$")
try:
return template.format(**kwargs)
except Exception:
return template
return {'_': translate}
# ---------- MAIN PAGES ------------------------------------------------------
# ---------- ROUTES -------------------------------------------------------
@app.route("/")
def home():
return redirect(url_for("index", lang=get_best_lang()))
return redirect(url_for("index", lang=helpers.get_best_lang()))
@app.route("/<lang>")
def index(lang):
return render_localized_template(lang, "index.html")
return helpers.render_localized_template(lang, "index.html")
@app.route("/<lang>/download")
def download(lang):
return render_localized_template(lang, "download.html")
# ---------- ROBOTS.TXT + SITEMAP.XML ----------------------------------------
return helpers.render_localized_template(lang, "download.html")
@app.route("/robots.txt")
@@ -111,10 +102,10 @@ def robots_txt():
@app.route("/sitemap.xml")
def sitemap_xml():
base_url = request.url_root.rstrip("/")
today = date.today().isoformat()
today = datetime.date.today().isoformat()
urls = []
for lang in locales_code:
for lang in locales.locales_code:
urls.append(f"{base_url}/{lang}")
urls.append(f"{base_url}/{lang}/download")
@@ -125,12 +116,12 @@ def sitemap_xml():
for loc in urls:
xml_lines.extend(
[
" <url>",
f" <loc>{loc}</loc>",
f" <lastmod>{today}</lastmod>",
" <changefreq>monthly</changefreq>",
" <priority>0.8</priority>",
" </url>",
f" <url>",
f" <loc>{loc}</loc>",
f" <lastmod>{today}</lastmod>",
f" <changefreq>monthly</changefreq>",
f" <priority>0.8</priority>",
f" </url>",
]
)
xml_lines.append("</urlset>")
+42 -23
View File
@@ -19,28 +19,39 @@ header = KolibriOS ist zu Git gewechselt!
text = Schau dir unsere neue entwicklerfreundliche Infrastruktur an
[article]
p1[0] = ist ein winziges, aber unglaublich leistungsfähiges und schnelles Betriebssystem für x86-kompatible PCs. Es benötigt nur wenige Megabyte Speicherplatz, einen i586-Prozessor und 12 MB RAM. Trotz seiner geringen Größe enthält es eine Vielzahl von Anwendungen wie einen Texteditor, einen Bildbetrachter, einen Grafikeditor, einen Webbrowser und über 30 spannende Spiele. Es bietet vollständige Unterstützung für die Dateisysteme FAT12/16/32, ermöglicht Lesezugriff auf NTFS, exFAT, ISO9660 und Ext2/3/4 sowie eine umfangreiche Sammlung von
p1[1] = Treibern
p1[2] = für gängige Sound-, Netzwerk- und Grafikkarten.
p1 = {kolibrios} ist ein winziges, aber unglaublich leistungsfähiges und
schnelles Betriebssystem für x86-kompatible PCs. Es benötigt nur wenige
Megabyte Speicherplatz, einen i586-Prozessor und 12 MB RAM. Trotz seiner
geringen Größe enthält es eine Vielzahl von Anwendungen wie einen
Texteditor, einen Bildbetrachter, einen Grafikeditor, einen Webbrowser und
über 30 spannende Spiele. Es bietet vollständige Unterstützung für die
Dateisysteme FAT12/16/32, ermöglicht Lesezugriff auf NTFS, exFAT, ISO9660
und Ext2/3/4 sowie eine umfangreiche Sammlung von {drivers} für gängige
Sound-, Netzwerk- und Grafikkarten.
drivers = Treibern
p2[0] = Haben Sie schon einmal von einem System geträumt, das in weniger als wenigen Sekunden vom Einschalten bis zu einer funktionierenden GUI bootet? Anwendungen, die sofort starten, direkt nach dem Klicken auf ein Symbol, ohne lästige Sanduhrzeiger? Diese Geschwindigkeit wird erreicht, da die Kernkomponenten von
p2[1] = (Kernel und Treiber) vollständig in der Assemblersprache
p2[11] = geschrieben sind
p2[2] = Probieren Sie
p2[3] = aus und vergleichen Sie es mit Schwergewichten wie Windows und Linux.
p2 = Haben Sie schon einmal von einem System geträumt, das in weniger als
wenigen Sekunden vom Einschalten bis zu einer funktionierenden GUI bootet?
Anwendungen, die sofort starten, direkt nach dem Klicken auf ein Symbol,
ohne lästige Sanduhrzeiger? Diese Geschwindigkeit wird erreicht, da die
Kernkomponenten von {kolibrios} (Kernel und Treiber) vollständig in der
Assemblersprache {fasm} geschrieben sind. Probieren Sie {kolibrios} aus und
vergleichen Sie es mit Schwergewichten wie Windows und Linux.
p3[0] = hat sich 2004 von MenuetOS abgespalten und wird seitdem unabhängig entwickelt. Ihr
p3[1] = ckmeldung
p3[2] = wird sehr geschätzt, und Ihre
p3[3] = Hilfe
p3[4] = ist noch mehr willkommen.
p3 = {kolibrios} hat sich 2004 von MenuetOS abgespalten und wird seitdem
unabhängig entwickelt. Ihr {feedback} wird sehr geschätzt, und Ihre {help}
ist noch mehr willkommen.
feedback = Rückmeldung
help = Hilfe
p_subscription[0] = Wir hoffen, es gefällt Ihnen!
p_subscription[1] = KolibriOS-Team
p_subscription = Wir hoffen, es gefällt Ihnen!
[downloads]
header = Herunterladen
version = Version:
date = Build-Datum:
img-descr = Disketten-Image
iso-descr = LiveCD-Abbild
distr-descr = Universal Flash/Multi-Boot-Abbild
@@ -54,16 +65,24 @@ 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 Sie die in KolibriOS vorgenommenen Änderungen speichern können.\n\
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 Booten des Systems auf neuen Computern und Laptops verwendet wird.
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[0] = Auf dieser Seite können Sie die nächtlichen Build-Distributionen herunterladen,
was bedeutet, dass sie stets die neuesten Änderungen am System enthalten und
daher instabil sein können. Alle Dateien sind mit
download_description[1] = komprimiert.
download_description[2] = wird unter der
download_description[3] = Git-Server
download_description = Auf dieser Seite können Sie die nächtlichen
Build-Distributionen herunterladen, was bedeutet, dass sie stets die
neuesten Änderungen am System enthalten und daher instabil sein können. Alle
Dateien sind mit {zip} komprimiert. {kolibrios} wird unter der {gpl}-Lizenz
vertrieben, und der Quellcode ist auf unserem {git} verfügbar.
git-server = Git-Server
download_warn = Gelegentlich stufen einige Antivirenprogramme das
{kolibrios}-Image fälschlicherweise als Bedrohung ein.
Das ist ein Fehlalarm. {kolibrios} ist vollständig quelloffen, und Sie
können es jederzeit selbst erstellen, um sicherzugehen, dass es
vollständig sicher ist.
[screenshots]
header = Bildschirmfotos
+39 -23
View File
@@ -19,28 +19,37 @@ header = KolibriOS moved to Git!
text = Check our new developers-friendly infrastructure
[article]
p1[0] = is a tiny yet incredibly powerful and fast operating system for x86-compatible PCs. It requires only a few megabytes of disk space, an i586 processor, and 12 MB of RAM to run. Despite its small size, it includes a rich set of applications such as a text editor, image viewer, graphic editor, web browser, and over 30 exciting games. It offers full support for FAT12/16/32 file systems, read-only access to NTFS, exFAT, ISO9660, and Ext2/3/4, and
p1[1] = drivers
p1[2] = for popular sound, network, and graphics cards.
p1 = {kolibrios} is a tiny yet incredibly powerful and fast operating system for
x86-compatible PCs. It requires only a few megabytes of disk space, an i586
processor, and 12 MB of RAM to run. Despite its small size, it includes a
rich set of applications such as a text editor, image viewer, graphic
editor, web browser, and over 30 exciting games. It offers full support for
FAT12/16/32 file systems, read-only access to NTFS, exFAT, ISO9660, and
Ext2/3/4, and an extensive set of {drivers} for popular sound, network, and
graphics cards.
drivers = drivers
p2[0] = Have you ever dreamed of a system that boots in less than few seconds from power-on to working GUI? About applications that start instantly, immediately after clicking an icon, without annoying hourglass pointers? This speed is achieved since the core parts of
p2[1] = (kernel and drivers) are written entirely in
p2[11] = assembly language
p2[2] = Try
p2[3] = and compare it with such heavyweights as Windows and Linux.
p2 = Have you ever dreamed of a system that boots in less than few seconds from
power-on to working GUI? About applications that start instantly,
immediately after clicking an icon, without annoying hourglass pointers?
This speed is achieved since the core parts of {kolibrios} (kernel and
drivers) are written entirely in {fasm} assembly language. Try {kolibrios}
and compare it with such heavyweights as Windows and Linux.
p3[0] = has forked off from MenuetOS in 2004, and is run under independent development since then. Your
p3[1] = feedback
p3[2] = is very much appreciated, and your
p3[3] = help
p3[4] = is even more welcome.
p3 = {kolibrios} has forked off from MenuetOS in 2004, and is run under
independent development since then. Your {feedback} is very much
appreciated, and your {help} is even more welcome.
feedback = feedback
help = help
p_subscription[0] = We hope you will enjoy it!
p_subscription[1] = KolibriOS Team
p_subscription = We hope you will enjoy it!
[downloads]
header = Downloads
version = Version:
date = Build date:
img-descr = Floppy disk image
iso-descr = LiveCD image
distr-descr = Universal Flash/Multi-boot image
@@ -52,16 +61,23 @@ 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 save changes made in KolibriOS.\n\
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 the system on new computers and laptops.
Hybrid image includes support for UEFI technology, which is used to boot\
the system on new computers and laptops.
download_description[0] = On this page you can download the nightly builds distribution, which means
that they always contain the most recent changes in the system and can,
therefore, be unstable. All files are compressed with
download_description[1] = is distributed under
download_description[2] = license, its source code is available on our
download_description[3] = Git server
download_description = On this page you can download the nightly builds
distribution, which means that they always contain the most recent changes
in the system and can, therefore, be unstable. All files are compressed with
{zip}. {kolibrios} is distributed under {gpl} license, its source code is
available on our {git}.
git-server = Git server
download_warn = Occasionally, some antivirus software may incorrectly flag the
{kolibrios} image as a threat. This is a false positive. {kolibrios} is
fully open source, and you can always build it yourself to be sure that
it is completely safe.
[screenshots]
header = Screenshots
+42 -23
View File
@@ -1,5 +1,5 @@
[title]
language = Spanish
language = Español
index = KolibriOS
download = KolibriOS - Descargar
@@ -19,27 +19,39 @@ header = ¡KolibriOS se ha trasladado a Git!
text = Mira nuestra nueva infraestructura amigable para desarrolladores
[article]
p1[0] = es un sistema operativo diminuto, pero increíblemente potente y rápido para PCs compatibles con x86. Solo necesita unos pocos megabytes de espacio en disco, un procesador i586 y 12 MB de memoria RAM. A pesar de su tamaño reducido, incluye un conjunto completo de aplicaciones como un editor de texto, visor de imágenes, editor gráfico, navegador web y más de 30 juegos emocionantes. Ofrece soporte completo para los sistemas de archivos FAT12/16/32, acceso de solo lectura a NTFS, exFAT, ISO9660 y Ext2/3/4, y dispone de un extenso conjunto de
p1[1] = controladores
p1[2] = para populares tarjetas de sonido, red y gráficas.
p1 = {kolibrios} es un sistema operativo diminuto, pero increíblemente potente y
rápido para PCs compatibles con x86. Solo necesita unos pocos megabytes de
espacio en disco, un procesador i586 y 12 MB de memoria RAM. A pesar de su
tamaño reducido, incluye un conjunto completo de aplicaciones como un editor
de texto, visor de imágenes, editor gráfico, navegador web y más de 30
juegos emocionantes. Ofrece soporte completo para los sistemas de archivos
FAT12/16/32, acceso de solo lectura a NTFS, exFAT, ISO9660 y Ext2/3/4, y
dispone de un extenso conjunto de {drivers} para populares tarjetas de
sonido, red y gráficas.
drivers = controladores
p2[0] = ¿Alguna vez has soñado con un sistema que arranca en menos de unos segundos, desde el encendido hasta una GUI operativa? ¿Con aplicaciones que se inician al instante, inmediatamente después de hacer clic en un icono, sin esos molestos punteros de reloj de arena? Esta velocidad se logra porque las partes fundamentales de
p2[1] = (núcleo y controladores) están escritas completamente en lenguaje ensamblador
p2[2] = Prueba
p2[3] = y compáralo con pesos pesados como Windows y Linux.
p2 = ¿Alguna vez has soñado con un sistema que arranca en menos de unos
segundos, desde el encendido hasta una GUI operativa? ¿Con aplicaciones que
se inician al instante, inmediatamente después de hacer clic en un icono,
sin esos molestos punteros de reloj de arena? Esta velocidad se logra porque
las partes fundamentales de {kolibrios} (núcleo y controladores) están
escritas completamente en lenguaje ensamblador {fasm}. Prueba {kolibrios} y
compáralo con pesos pesados como Windows y Linux.
p3[0] = separó de MenuetOS en 2004 y ha estado en desarrollo independiente desde entonces. Se agradece enormemente tu
p3[1] = retroalimentación
p3[2] = , y tu
p3[3] = ayuda
p3[4] = es aún más bienvenida.
p3 = {kolibrios} separó de MenuetOS en 2004 y ha estado en desarrollo
independiente desde entonces. Se agradece enormemente tu {feedback}, y tu
{help} es aún más bienvenida.
feedback = retroalimentación
help = ayuda
p_subscription[0] = ¡Esperamos que lo disfrutes!
p_subscription[1] = Equipo KolibriOS
p_subscription = ¡Esperamos que lo disfrutes!
[downloads]
header = Descargas
version = Versión:
date = Fecha de compilación:
img-descr = Imagen de disquete
iso-descr = Imagen LiveCD
distr-descr = Imagen Flash Universal/Multi-boot
@@ -51,16 +63,23 @@ 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 puedes guardar los cambios realizados en KolibriOS.\n\
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 arrancar el sistema en los nuevos ordenadores y portátiles.
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[0] = En esta página puedes descargar la distribución de compilaciones nocturnas,
lo que significa que siempre contienen los cambios más recientes en el sistema y,
por lo tanto, pueden ser inestables. Todos los archivos están comprimidos con
download_description[1] = se distribuye bajo la licencia
download_description[2] = y su código fuente está disponible en nuestro
download_description[3] = servidor Git
download_description = En esta página puedes descargar la distribución de
compilaciones nocturnas, lo que significa que siempre contienen los cambios
más recientes en el sistema y, por lo tanto, pueden ser inestables. Todos
los archivos están comprimidos con {zip}. {kolibrios} se distribuye bajo la
licencia {gpl} y su código fuente está disponible en nuestro {git}.
git-server = servidor Git
download_warn = Ocasionalmente, algunos programas antivirus pueden marcar
incorrectamente la imagen de {kolibrios} como una amenaza. Esto es un
falso positivo. {kolibrios} es completamente de código abierto y siempre
puedes compilarlo tú mismo para asegurarte de que es totalmente seguro.
[screenshots]
header = Pantallas
+43 -22
View File
@@ -19,27 +19,39 @@ header = KolibriOS a déménagé sur Git !
text = Découvrez notre nouvelle infrastructure conviviale pour les développeurs
[article]
p1[0] = est un système d`exploitation minuscule, mais incroyablement puissant et rapide, pour les PC compatibles x86. Il nécessite seulement quelques mégaoctets d`espace disque, un processeur i586 et 12 Mo de RAM. Malgré sa petite taille, il comprend une large gamme d`applications telles qu`un éditeur de texte, un visionneur d`images, un éditeur graphique, un navigateur web, et plus de 30 jeux captivants. Il prend en charge pleinement les systèmes de fichiers FAT12/16/32, permet la lecture seule de NTFS, exFAT, ISO9660 et Ext2/3/4, et offre un vaste ensemble de
p1[1] = pilotes
p1[2] = pour les cartes son, réseau et graphiques populaires.
p1 = {kolibrios} est un système d`exploitation minuscule, mais incroyablement
puissant et rapide, pour les PC compatibles x86. Il nécessite seulement
quelques mégaoctets d`espace disque, un processeur i586 et 12 Mo de RAM.
Malgré sa petite taille, il comprend une large gamme d`applications telles
qu`un éditeur de texte, un visionneur d`images, un éditeur graphique, un
navigateur web, et plus de 30 jeux captivants. Il prend en charge pleinement
les systèmes de fichiers FAT12/16/32, permet la lecture seule de NTFS,
exFAT, ISO9660 et Ext2/3/4, et offre un vaste ensemble de {drivers} pour les
cartes son, réseau et graphiques populaires.
drivers = pilotes
p2[0] = Avez-vous déjà rêvé d`un système qui démarre en quelques secondes, de la mise sous tension jusqu`à une interface graphique opérationnelle ? Des applications qui se lancent instantanément, immédiatement après avoir cliqué sur une icône, sans ces pointeurs sabliers agaçants ? Cette rapidité est obtenue car les parties essentielles de
p2[1] = (noyau et pilotes) sont entièrement écrites en langage assembleur
p2[2] = Essayez
p2[3] = et comparez-le à des poids lourds tels que Windows et Linux.
p2 = Avez-vous déjà rêvé d`un système qui démarre en quelques secondes, de la
mise sous tension jusqu`à une interface graphique opérationnelle ? Des
applications qui se lancent instantanément, immédiatement après avoir cliqué
sur une icône, sans ces pointeurs sabliers agaçants ? Cette rapidité est
obtenue car les parties essentielles de {kolibrios} (noyau et pilotes) sont
entièrement écrites en langage assembleur {fasm}. Essayez {kolibrios} et
comparez-le à des poids lourds tels que Windows et Linux.
p3[0] = s`est séparé de MenuetOS en 2004 et est développé de manière indépendante depuis lors. Vos
p3[1] = retours
p3[2] = sont grandement appréciés, et votre
p3[3] = aide
p3[4] = est encore plus bienvenue.
p3 = {kolibrios} s`est séparé de MenuetOS en 2004 et est développé de manière
indépendante depuis lors. Vos {feedback} sont grandement appréciés, et votre
{help} est encore plus bienvenue.
feedback = retours
help = aide
p_subscription[0] = Nous espérons que vous l`apprécierez !
p_subscription[1] = L`équipe de KolibriOS
p_subscription = Nous espérons que vous l`apprécierez !
[downloads]
header = Téléchargements
version = Version :
date = Date de compilation :
img-descr = Image de la disquette
iso-descr = Image du LiveCD
distr-descr = Image Universal Flash/Multi-boot
@@ -50,15 +62,24 @@ 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 pouvez sauvegarder les changements effectués dans KolibriOS.\n\
\n\
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.
\n\
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\
pour démarrer le système sur les nouveaux ordinateurs et portables.
download_description[0] = Sur cette page, vous pouvez télécharger la distribution des builds nocturnes, ce qui signifie qu`ils contiennent toujours les modifications les plus récentes du système et peuvent donc être instables. Tous les fichiers sont compressés avec
download_description[1] = est distribué sous licence
download_description[2] = et son code source est disponible sur notre
download_description[3] = serveur Git
download_description = Sur cette page, vous pouvez télécharger la distribution
des builds nocturnes, ce qui signifie qu`ils contiennent toujours les
modifications les plus récentes du système et peuvent donc être instables.
Tous les fichiers sont compressés avec {zip}. {kolibrios} est distribué sous
licence {gpl} et son code source est disponible sur notre {git}.
git-server = serveur Git
download_warn = Il arrive que certains antivirus signalent à tort limage
{kolibrios} comme une menace. Il sagit dun faux positif. {kolibrios} est
entièrement open source et vous pouvez toujours le compiler vous-même pour
vous assurer quil est totalement sûr.
[screenshots]
header = Captures d`écran
+43 -23
View File
@@ -16,30 +16,41 @@ git = Git
[git]
header = KolibriOS si è spostato su Git!
text = Dai un`occhiata alla nostra nuova infrastruttura pensata per gli sviluppatori
text = Dai un`occhiata alla nostra nuova infrastruttura pensata per gli
sviluppatori
[article]
p1[0] = è un sistema operativo minuscolo, ma incredibilmente potente e veloce, per PC compatibili con x86. Per funzionare richiede solo pochi megabyte di spazio su disco, un processore i586 e 12 MB di RAM. Nonostante le dimensioni ridotte, include un ricco set di applicazioni come editor di testo, visualizzatore di immagini, editor grafico, browser web e oltre 30 giochi entusiasmanti. Supporta completamente i file system FAT12/16/32, e permette la lettura di NTFS, exFAT, ISO9660 ed Ext2/3/4, oltre a offrire un ampio set di
p1[1] = driver
p1[2] = per schede audio, di rete e grafiche più diffuse.
p1 = {kolibrios} è un sistema operativo minuscolo, ma incredibilmente potente e
veloce, per PC compatibili con x86. Per funzionare richiede solo pochi
megabyte di spazio su disco, un processore i586 e 12 MB di RAM. Nonostante
le dimensioni ridotte, include un ricco set di applicazioni come editor di
testo, visualizzatore di immagini, editor grafico, browser web e oltre 30
giochi entusiasmanti. Supporta completamente i file system FAT12/16/32, e
permette la lettura di NTFS, exFAT, ISO9660 ed Ext2/3/4, oltre a offrire un
ampio set di {drivers} per schede audio, di rete e grafiche più diffuse.
drivers = driver
p2[0] = Hai mai sognato un sistema che si avvia in pochi secondi, dall`accensione fino a una GUI funzionante? Applicazioni che partono immediatamente, subito dopo aver cliccato su un`icona, senza quei fastidiosi cursori a clessidra? Questa velocità si ottiene poiché le parti fondamentali di
p2[1] = (kernel e driver) sono scritte interamente in linguaggio assembly
p2[2] = Prova
p2[3] = e confrontalo con colossi come Windows e Linux.
p2 = Hai mai sognato un sistema che si avvia in pochi secondi, dall`accensione
fino a una GUI funzionante? Applicazioni che partono immediatamente, subito
dopo aver cliccato su un`icona, senza quei fastidiosi cursori a clessidra?
Questa velocità si ottiene poiché le parti fondamentali di {kolibrios}
(kernel e driver) sono scritte interamente in linguaggio assembly {fasm}.
Prova {kolibrios} e confrontalo con colossi come Windows e Linux.
p3[0] = si è staccato da MenuetOS nel 2004 ed è in sviluppo indipendente da allora. Il tuo
p3[1] = recensioni
p3[2] = è molto apprezzato, e il tuo
p3[3] = aiuto
p3[4] = è ancora più benvenuto.
p3 = {kolibrios} si è staccato da MenuetOS nel 2004 ed è in sviluppo
indipendente da allora. Il tuo {feedback} è molto apprezzato, e il tuo
{help} è ancora più benvenuto.
feedback = recensioni
help = aiuto
p_subscription[0] = Ci auguriamo che vi piaccia!
p_subscription[1] = Squadra KolibriOS
p_subscription = Ci auguriamo che vi piaccia!
[downloads]
header = Scaricamento
version = Versione:
date = Data di compilazione:
img-descr = Immagine su dischetto
iso-descr = Immagine LiveCD
distr-descr = Immagine universale Flash/MultiBoot
@@ -50,15 +61,24 @@ 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 è possibile salvare le modifiche apportate in KolibriOS.\n\
\n\
L`immagine ibrida include il supporto per la tecnologia UEFI, utilizzata per avviare il sistema su nuovi computer e portatili.
\n\
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\
per avviare il sistema su nuovi computer e portatili.
download_description[0] = In questa pagina puoi scaricare la distribuzione delle build notturne, il che significa che contengono sempre le modifiche più recenti del sistema e, pertanto, possono essere instabili. Tutti i file sono compressi con
download_description[1] = viene distribuito sotto licenza
download_description[2] = e il suo codice sorgente è disponibile sul nostro
download_description[3] = server Git
download_description = In questa pagina puoi scaricare la distribuzione delle
build notturne, il che significa che contengono sempre le modifiche più
recenti del sistema e, pertanto, possono essere instabili. Tutti i file sono
compressi con {zip}. {kolibrios} viene distribuito sotto licenza {gpl} e il
suo codice sorgente è disponibile sul nostro {git}.
git-server = server Git
download_warn = Occasionalmente, alcuni software antivirus potrebbero segnalare
erroneamente limmagine di {kolibrios} come una minaccia. Si tratta di un
falso positivo. {kolibrios} è completamente open source e puoi sempre
compilarlo tu stesso per essere certo che è del tutto sicuro.
[screenshots]
header = Captures d`écran
+43 -23
View File
@@ -19,28 +19,39 @@ header = KolibriOS is verhuisd naar Git!
text = Bekijk onze nieuwe, ontwikkelaarsvriendelijke infrastructuur
[article]
p1[0] = is een klein maar ongelooflijk krachtig en snel besturingssysteem voor x86-compatibele PC`s. Het heeft slechts enkele megabytes aan schijfruimte, een i586-processor en 12 MB RAM. Maar beschikt over een rijk scala aan toepassingen, waaronder een tekstverwerker, afbeeldingsviewer, grafische editor, webbrowser en meer dan 30 spannende games. Het biedt volledige ondersteuning voor de bestandssystemen FAT12/16/32, en heeft ook leesondersteuning voor NTFS, exFAT, ISO9660 en Ext2/3/4, en beschikt over een uitgebreide set van
p1[1] = drivers
p1[2] = voor populaire geluids-, netwerk- en grafische kaarten.
p1 = {kolibrios} is een klein maar ongelooflijk krachtig en snel
besturingssysteem voor x86-compatibele PC`s. Het heeft slechts enkele
megabytes aan schijfruimte, een i586-processor en 12 MB RAM. Maar beschikt
over een rijk scala aan toepassingen, waaronder een tekstverwerker,
afbeeldingsviewer, grafische editor, webbrowser en meer dan 30 spannende
games. Het biedt volledige ondersteuning voor de bestandssystemen
FAT12/16/32, en heeft ook leesondersteuning voor NTFS, exFAT, ISO9660 en
Ext2/3/4, en beschikt over een uitgebreide set van {drivers} voor populaire
geluids-, netwerk- en grafische kaarten.
drivers = drivers
p2[0] = Heb je ooit gedroomd van een systeem dat opstart in minder dan een paar seconden, van het aanzetten tot een werkende GUI? Toepassingen die direct starten, meteen na het klikken op een icoon, zonder die vervelende zandlopers? Deze snelheid wordt bereikt omdat de kernonderdelen van
p2[1] = (kernel en drivers) volledig in de
p2[11] = assemblytaal geschreven zijn!
p2[2] = Probeer
p2[3] = en vergelijk het met zwaargewichten zoals Windows en Linux.
p2 = Heb je ooit gedroomd van een systeem dat opstart in minder dan een paar
seconden, van het aanzetten tot een werkende GUI? Toepassingen die direct
starten, meteen na het klikken op een icoon, zonder die vervelende
zandlopers? Deze snelheid wordt bereikt omdat de kernonderdelen van
{kolibrios} (kernel en drivers) volledig in de {fasm} assemblytaal
geschreven zijn! Probeer {kolibrios} en vergelijk het met zwaargewichten
zoals Windows en Linux.
p3[0] = is in 2004 afgesplitst van MenuetOS en wordt sindsdien onafhankelijk ontwikkeld. Jouw
p3[1] = recensies
p3[2] = wordt zeer gewaardeerd, en jouw
p3[3] = hulp
p3[4] = is nog meer welkom.
p3 = {kolibrios} is in 2004 afgesplitst van MenuetOS en wordt sindsdien
onafhankelijk ontwikkeld. Jouw {feedback} wordt zeer gewaardeerd, en jouw
{help} is nog meer welkom.
feedback = recensies
help = hulp
p_subscription[0] = We hopen dat je ervan zult genieten!
p_subscription[1] = KolibriOS-Team
p_subscription = We hopen dat je ervan zult genieten!
[downloads]
header = Downloads
version = Versie:
date = Builddatum:
img-descr = Afbeelding op diskette
iso-descr = LiveCD-afbeelding
distr-descr = Universele Flash/Multi-boot image
@@ -51,15 +62,24 @@ 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 wijzigingen die je in <b>KolibriOS</b> hebt aangebracht, kunt opslaan.\n\
\n\
Hybride image bevat ondersteuning voor UEFI-technologie, die wordt gebruikt om het systeem op te starten op nieuwe computers en laptops.
\n\
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\
om het systeem op te starten op nieuwe computers en laptops.
download_description[0] = Op deze pagina kunt u de nightly builds-distributie downloaden, wat betekent dat ze altijd de meest recente wijzigingen in het systeem bevatten en daarom onstabiel kunnen zijn. Alle bestanden zijn gecomprimeerd met
download_description[1] = wordt verspreid onder de
download_description[2] = -licentie, en de broncode is beschikbaar op onze
download_description[3] = Git-server
download_description = Op deze pagina kunt u de nightly builds-distributie
downloaden, wat betekent dat ze altijd de meest recente wijzigingen in het
systeem bevatten en daarom onstabiel kunnen zijn. Alle bestanden zijn
gecomprimeerd met {zip} wordt verspreid onder de {gpl}-licentie, en de
broncode is beschikbaar op onze {git}.
git-server = Git-server
download_warn = Af en toe kunnen sommige antivirusprogrammas het
{kolibrios}-image ten onrechte als een bedreiging aanmerken.
Dit is een vals-positief. {kolibrios} is volledig open-source en je kunt
het altijd zelf bouwen om er zeker van te zijn dat het volledig veilig is.
[screenshots]
header = Schermafbeeldingen
+41 -22
View File
@@ -19,27 +19,39 @@ header = КолибриОС перешла на Git!
text = Ознакомьтесь с нашей новой, удобной для разработчиков инфраструктурой
[article]
p1[0] = — это крошечная, но невероятно мощная и быстрая операционная система для x86-совместимых ПК. Для её работы достаточно всего нескольких мегабайт места на диске, процессора i586 и 12 МБ оперативной памяти. При этом она содержит богатый набор приложений, таких как текстовый редактор, просмотрщик изображений, графический редактор, веб-браузер и более 30 захватывающих игр.Имеется полная поддержка файловых систем FAT12/16/32, только на чтение доступны NTFS, exFAT, ISO9660 и Ext2/3/4, а также присутсвтвует обширный набор
p1[1] = драйверов
p1[2] = для популярных звуковых, сетевых и графических карт.
p1 = {kolibrios} — это крошечная, но невероятно мощная и быстрая операционная
система для x86-совместимых ПК. Для её работы достаточно всего нескольких
мегабайт места на диске, процессора i586 и 12 МБ оперативной памяти. При
этом она содержит богатый набор приложений, таких как текстовый редактор,
просмотрщик изображений, графический редактор, веб-браузер и более 30
захватывающих игр. Имеется полная поддержка файловых систем FAT12/16/32,
только на чтение доступны NTFS, exFAT, ISO9660 и Ext2/3/4, а также
присутсвтвует обширный набор {drivers} для популярных звуковых, сетевых и
графических карт.
drivers = драйверов
p2[0] = Вы когда-нибудь мечтали о системе, которая загружается менее чем за несколько секунд с момента включения до появления работающего графического интерфейса? О приложениях, которые запускаются мгновенно, сразу после нажатия на ярлык, без надоедливых индикаторов загрузки? Такая скорость достигается благодаря тому, что основные части
p2[1] = (ядро и драйверы) полностью написаны на ассемблере
p2[2] = Попробуйте
p2[3] = и сравните её с такими тяжеловесами, как Windows и Linux.
p2 = Вы когда-нибудь мечтали о системе, которая загружается менее чем за
несколько секунд с момента включения до появления работающего графического
интерфейса? О приложениях, которые запускаются мгновенно, сразу после
нажатия на ярлык, без надоедливых индикаторов загрузки? Такая скорость
достигается благодаря тому, что основные части {kolibrios} (ядро и
драйверы) полностью написаны на ассемблере {fasm}. Попробуйте
{kolibrios} и сравните её с такими тяжеловесами, как Windows и Linux.
p3[0] = отделилась от MenuetOS в 2004 году и с тех пор развивается независимым международным сообществом. Ваши
p3[1] = отзывы
p3[2] = очень ценится, а ваша
p3[3] = помощь
p3[4] = ценится ещё больше.
p3 = {kolibrios} отделилась от MenuetOS в 2004 году и с тех пор развивается
независимым международным сообществом. Ваши {feedback} очень ценятся, а ваша
{help} ценится ещё больше.
feedback = отзывы
help = помощь
p_subscription[0] = Надеемся, вам понравится!
p_subscription[1] = Команда КолибриОС
p_subscription = Надеемся, вам понравится!
[downloads]
header = Скачать
version = Версия:
date = Дата сборки:
img-descr = Образ дискеты
iso-descr = Образ LiveCD
distr-descr = Универсальный образ Flash/Multi-boot
@@ -51,16 +63,23 @@ all_rev = Все ночные сборки
download_choice = Какой выбрать?
download_help = Для новичка лучше всего подойдет LiveCD.\n \
\n\
По сравнению с LiveCD преимущество универсального образа в том, что вы можете сохранить изменения, сделанные в КолибриОС.\n\
По сравнению с LiveCD преимущество универсального образа в том, что вы\
можете сохранить изменения, сделанные в КолибриОС.\n\
\n\
Гибридный образ включает поддержку технологии UEFI, которая используется для загрузки системы на новых компьютерах и ноутбуках.
Гибридный образ включает поддержку технологии UEFI, которая используется\
для загрузки системы на новых компьютерах и ноутбуках.
download_description[0] = На этой странице вы можете скачать ночные сборки дистрибутива.
Это означает, что они всегда содержат последние изменения в системе и,
следовательно, могут быть нестабильными. Все файлы сжаты с помощью
download_description[1] = распространяется под лицензией
download_description[2] = а исходный код доступен на нашем
download_description[3] = Git-сервере
download_description = На этой странице вы можете скачать ночные сборки
дистрибутива. Это означает, что они всегда содержат последние изменения в
системе и, следовательно, могут быть нестабильными. Все файлы сжаты с
помощью {zip}. {kolibrios} распространяется под лицензией {gpl}, а
исходный код доступен на нашем {git}.
git-server = Git-сервере
download_warn = Иногда антивирусы могут по ошибке помечать образ {kolibrios}
как угрозу. Это ложное срабатывание. {kolibrios} имеет полностью открытый
исходный код, и вы всегда можете собрать её самостоятельно, чтобы
убедиться, что она абсолютно безопасна.
[screenshots]
header = Скриншоты
+1
View File
@@ -0,0 +1 @@
+89
View File
@@ -0,0 +1,89 @@
import re
import threading
import time
STATUS_URL = "https://builds.kolibrios.org/status.html"
STATUS_SEC = 300 # refetch each 5 minutes
autobuild_date = "DD.MM.YYYY"
autobuild_vers = "0.0.0.0+0000-0000000"
_started = False
_updater_lock = threading.Lock()
def _refresh_build_date_once():
global autobuild_date, autobuild_vers
try:
from urllib.request import Request, urlopen
req = Request(
STATUS_URL,
headers={
"User-Agent": "Mozilla/5.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
},
)
with urlopen(req, timeout=10) as r:
html = r.read().decode(
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_commit_ver = None
for row in rows:
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
)
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 = f"{mds.group(1)}.{mds.group(2)}.{mds.group(3)}"
else:
return
else:
y, mo, d = mts.groups()
autobuild_date = f"{d}.{mo}.{y}"
if last_commit_ver:
autobuild_vers = last_commit_ver
return
except Exception:
pass
def _updater_loop():
while True:
_refresh_build_date_once()
time.sleep(STATUS_SEC)
def ensure_started():
global _started
with _updater_lock:
if _started:
return
threading.Thread(target=_updater_loop, daemon=True).start()
_started = True
_refresh_build_date_once()
+23
View File
@@ -0,0 +1,23 @@
from datetime import date
from flask import redirect, render_template, request, url_for
from htmlmin import minify as minify_html
from modules import locales
def get_best_lang():
return request.accept_languages.best_match(locales.locales_code) or "en"
def render_localized_template(lang, template_name):
if lang not in locales.locales_code:
return redirect(url_for("index", lang=get_best_lang()))
return minify_html(
render_template(
template_name,
year=date.today().year,
),
remove_empty_space=True,
)
+51
View File
@@ -0,0 +1,51 @@
from os import path, listdir
from configparser import ConfigParser
import threading
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()
}
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
+9
View File
@@ -1 +1,10 @@
blinker==1.9.0
click==8.1.8
colorama==0.4.6
Flask==3.1.0
htmlmin==0.1.12
itsdangerous==2.2.0
Jinja2==3.1.6
libsass==0.23.0
MarkupSafe==3.0.2
Werkzeug==3.1.3
+25
View File
@@ -0,0 +1,25 @@
{ pkgs ? import <nixpkgs> {} }: let
pypkgs = pkgs.python3Packages;
in pkgs.mkShell {
name = "kolibrios.org";
buildInputs = with pypkgs; [
python
virtualenv
pkgs.nodePackages.sass
];
shellHook = ''
if [ ! -d "venv" ]; then
python -m venv .venv
fi
source .venv/bin/activate
if [ -f "requirements.txt" ]; then
pip install -r requirements.txt
fi
'';
LD_LIBRARY_PATH = "${pkgs.stdenv.cc.cc.lib}/lib";
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 B

+1 -1
View File
@@ -68,7 +68,7 @@ function updateDots() {
var dots = document.querySelectorAll("#dots .dot");
dots.forEach(function(dot, index) {
// index starts at 0 so add FIRST_IMG_ID to match your slide IDs
dot.className = "dot" + ((index + FIRST_IMG_ID) === current ? " active" : "");
dot.classList.toggle("active", (index + FIRST_IMG_ID) === current);
});
}
-465
View File
@@ -1,465 +0,0 @@
body {
margin: 0;
font-family: "Source Sans Pro", "Open Sans", sans-serif;
background: #e1e2e2 url(img/bg.png) repeat fixed 0 0;
}
#menu {
background: rgba(22, 22, 23, .8);
color: #FFFFFF;
cursor: default;
line-height: 2em;
padding: 0.5em 0;
text-align: center;
text-shadow: 2px 2px 2px #00000063;
top: 0;
left: 0;
width: 100%;
z-index: 9000;
}
#menu > * {
color: #fff;
cursor: pointer;
margin: 0 1em;
text-decoration: none;
transition: color 0.15s ease;
}
#menu a:hover,
#menu a.a-sel {
color: #ffe36a;
}
#menu img {
filter: drop-shadow(2px 2px 2px #00000020);
}
#lang-butt {
background: transparent;
border: none;
}
/* LANG-DROPDOWN */
#lang-dropdown {
position: fixed;
z-index: 9100;
display: none;
opacity: 0;
filter: alpha(opacity=0);
}
#lang-dropdown::before {
content: '';
display: block;
position: absolute;
border: 11px solid #333C;
border-left: 10px solid rgba(255, 255, 255, 0);
border-right: 10px solid rgba(255, 255, 255, 0);
border-top: 0px solid rgba(255, 255, 255, 0);
top: -10px;
left: 50%;
margin-left: -6px;
}
#lang-dropdown > div {
display: block;
margin-left: 4px;
border-radius: 4px;
border: 1px solid #333;
box-shadow: 0 0 5px #000;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.4);
overflow: hidden;
background: #333;
background: #333E;
backdrop-filter: saturate(180%) blur(6px);
}
#lang-dropdown > div a {
display: block;
padding: 0 3em 0 1em;
font-size: 90%;
line-height: 2.5;
border-top: 1px solid rgba(255, 255, 255, 0.06);
border-bottom: 1px solid rgba(0, 0, 0, 0.07);
text-decoration: none;
color: #fff !important;
}
#lang-dropdown > div a:hover {
border-bottom: 1px solid #34312eff;
border-top: 1px solid #4c4c4cff;
background: #444;
background: linear-gradient(328deg, #c20d2c7d, #3928c78a);
}
#lang-dropdown > div a.a-sel {
color: #888 !important;
}
#lang-dropdown > div a.a-sel img {
color: #888 !important;
filter: brightness(0.5);
}
#lang-dropdown > div a img {
display: inline-block;
vertical-align: middle;
margin-right: 10px;
margin-top: -3px;
width: 16px;
height: 11px;
filter: drop-shadow(1px 2px 2px #0003);
}
#lang-dropdown>div a:first-child {
border-top: none;
}
#lang-dropdown>div a:last-child {
border-bottom: none;
}
/* ARTICLE */
#article {
background: rgba(254, 255, 255, 1);
border: 1px solid #c0b9c491;
border-radius: 4px;
box-shadow: rgb(28 26 40 / 12%) 0px 4px 4px -2px;
margin: 2em auto;
max-width: 910px;
padding: 2em;
text-align: justify;
color: #333;
}
#banner {
box-sizing: border-box;
border-radius: 4px;
box-shadow: inset 0 0 0 1px #00000020;
transition: box-shadow 0.3s ease;
display: block;
margin: 0px 0px 1em;
padding: 1.25em;
text-decoration: none;
}
#banner:hover {
box-shadow: inset 0 0 0 4px #609A21AA;
}
#banner td {
text-align: center;
vertical-align: center;
}
#banner img {
height: 7em;
}
#banner h1 {
margin-top: 0em;
color: #609A21;
font-size: 2.5em;
margin: 0 0 16px;
}
#banner p {
margin: 0em;
}
#banner .p-link {
margin-top: 16px;
color: #609A21;
font-weight: bold;
}
#banner a {
color: #609A21;
}
h1 {
font-size: 125%;
padding: 0;
margin: 0 0 16px;
}
a {
color: #1F1F1F;
}
a:hover {
color: #000;
}
p {
line-height: 1.5;
}
.p-socials {
text-align: center;
margin-bottom: 0px;
}
.p-socials a {
margin: 1em 1em;
text-decoration: none;
}
.p-socials br {
margin: 0em 0em 1em;
display: none;
}
.p-socials img {
height: 1em;
margin-right: 0.5em;
margin-bottom: -0.15em;
}
.p-subscription
{
text-align: center;
}
/* DOWNLOADS */
table {
width: 100%;
border-spacing: 0;
}
table a {
padding-bottom: 1px;
border-bottom: 1px solid;
text-decoration: none;
color: #0472D8
}
table a:hover
{
color: #0053B9;
}
tr {
vertical-align: middle;
}
.tr-margin-bot>td{
padding-bottom: 1em;
}
.tr-margin-top>td{
padding-top: 1em;
}
td {
vertical-align: middle;
}
td img {
vertical-align: middle;
}
.td-image {
width: 3em;
}
.td-description {
text-align: left;
width: 40%;
}
.td-description .beta {
border: 1px solid grey;
color: grey;
font-size: 0.75em;
font-weight: bold;
border-radius: 0.25em;
padding: 0.25em;
}
.td-date {
text-align: right;
padding-right: 2em;
}
.td-languages {
text-align: right;
}
.td-languages a + a {
display: inline;
margin-left: 1em;
margin-top: 0em;
}
hr {
margin: 0;
}
.help-button {
cursor: pointer;
display: inline-block;
background: #FF9800;
border-radius: 4px;
box-shadow: inset 0 1px rgba(254,181,94,0.9), inset 0 -2px rgba(0,0,0,0.04);
color: #FFFFFF;
padding: 0.5em 1em;
text-align: center;
transition: 0.5s;
}
.help-button:hover {
background: #F6920B;
}
acronym {
border-bottom: 1px dashed #ccc;
text-decoration: none;
cursor: help;
}
/* SCREENS.CSS */
#show {
max-width: 1280px;
max-height: 800px;
width: 100%;
height: 100%;
cursor: pointer;
border: 1px solid #182028;
display: block;
position: relative;
border-radius: 4px;
overflow: hidden;
}
#show img {
display: none;
max-width: 100%;
}
#show img.visible {
display: block;
}
iframe {
width: 100%;
border: none;
border-radius: 4px;
aspect-ratio: 16 / 9;
}
#carousel {
text-align: center;
margin: 1.25em auto 1em;
}
#dots {
text-align: center;
line-height: 1;
}
.dot {
display: inline-block;
width: 0.625em;
height: 0.625em;
background: #ccc;
border-radius: 50%;
margin: 0 0.25em;
cursor: pointer;
}
.dot.active {
background: #333;
}
/* FOOTER */
#footer {
margin: 2em auto;
text-align: center;
color: #848585;
display: block;
text-align: center;
width: 100%;
color: rgb(132, 133, 133);
text-shadow: rgb(255, 255, 255) 1px 1px 0px;
font-size: 90%;
}
#footer img
{
margin-bottom: 0.5em;
height: 7em;
}
#footer p
{
margin: 0;
}
/* ADAPTIVE LAYOUT */
@media (max-width:864px) {
#article {
margin: 0 0 1em;
padding: 1em 1em 1.5em;
border-radius: 0;
}
#banner {
max-width: calc(100% - 2px);
margin: 1px 0 1em;
outline: 1px solid rgb(227 227 227);;
}
#banner table td:first-child,
#banner table td:last-child {
display: none;
}
#banner h1 {
font-size: 1.5em;
margin-bottom: 0;
}
#banner p, #banner .p-link {
margin-top: 0.5em;
}
.p-socials a {
display: block;
margin: 1em 0 0;
}
#menu>* {
margin: 0 0.5em;
}
.td-description {
width: auto;
}
.td-date {
display: none;
padding-right: 1em;
padding-left: 1em;
}
.td-languages a + a {
display: inline-block;
white-space: nowrap;
margin-top: 0.5em;
margin-left: 0em;
}
#footer {
margin: 1em auto;
}
}
+520
View File
@@ -0,0 +1,520 @@
/* VARIABLES */
$c-body-bg-img: url(img/bg.png);
$c-body-bg: #E2E2E2;
$c-text: #333333;
$c-white: #FFFFFF;
$c-gray: #888888;
$c-black: #000000;
$c-menu-bg: #161617CC;
$c-menu-hover: #FFE36A;
$c-menu-shadow: #00000040;
$c-shadow-soft: #1C1A281F;
$c-article-bd: #C0B9C491;
$c-primary: #609A21;
$c-primary-ink: #609A21AA;
$c-link: #0472D8;
$c-link-hover: #0053B9;
$c-text-link: #1F1F1F;
$c-lang-panel: #333333D8;
$c-lang-sep-top: #FFFFFF0F;
$c-lang-sep-bot: #00000012;
$c-lang-grad-start:#C20D2C7D;
$c-lang-grad-end: #3928C78A;
$c-hover-bot-bd: #34312E;
$c-hover-top-bd: #484848;
$c-dot: #CCCCCC;
$c-screen-border: #182028;
/* STYLES */
body {
margin: 0;
font-family: "Source Sans Pro", "Open Sans", sans-serif;
background: $c-body-bg $c-body-bg-img repeat fixed 0 0;
}
#menu {
background: $c-menu-bg;
color: $c-white;
cursor: default;
line-height: 2em;
padding: 0.5em 0;
text-align: center;
text-shadow: 2px 2px 2px $c-menu-shadow;
top: 0;
left: 0;
width: 100%;
z-index: 9000;
& > * {
color: $c-white;
cursor: pointer;
margin: 0 1em;
text-decoration: none;
transition: color 0.15s ease;
}
a:hover,
a.a-sel {
color: $c-menu-hover;
}
img {
filter: drop-shadow(2px 2px 2px $c-menu-shadow);
}
}
#lang-butt {
background: transparent;
border: none;
}
/* LANG-DROPDOWN */
#lang-dropdown {
position: fixed;
z-index: 9100;
display: none;
opacity: 0;
&::before {
content: '';
display: block;
position: absolute;
border: 10px solid $c-lang-panel;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-top: 0;
top: -10px;
left: 50%;
margin-left: -6px;
}
& > div {
display: block;
margin-left: 4px;
border-radius: 4px;
border: 1px solid $c-text;
box-shadow: 0 0 10px $c-menu-shadow;
overflow: hidden;
background: $c-lang-panel;
backdrop-filter: saturate(180%) blur(6px);
a {
display: block;
padding: 0 3em 0 1em;
font-size: 90%;
line-height: 2.5;
border-top: 1px solid $c-lang-sep-top;
border-bottom: 1px solid $c-lang-sep-bot;
text-decoration: none;
color: $c-white !important;
&:hover {
border-bottom: 1px solid $c-hover-bot-bd;
border-top: 1px solid $c-hover-top-bd;
background-color: $c-hover-top-bd;
background-image: linear-gradient(328deg, $c-lang-grad-start, $c-lang-grad-end);
}
&.a-sel {
color: $c-gray !important;
img {
color: $c-gray !important;
filter: brightness(0.5);
}
}
img {
display: inline-block;
vertical-align: middle;
margin-right: 10px;
margin-top: -3px;
width: 16px;
height: 11px;
filter: drop-shadow(1px 2px 2px $c-menu-shadow);
}
&:first-child {
border-top: none;
}
&:last-child {
border-bottom: none;
}
}
}
}
/* ARTICLE */
#article {
background: $c-white;
border: 1px solid $c-article-bd;
border-radius: 4px;
box-shadow: $c-shadow-soft 0 4px 4px -2px;
margin: 2em auto;
max-width: 910px;
padding: 2em;
text-align: justify;
color: $c-text;
}
#banner {
box-sizing: border-box;
border-radius: 4px;
box-shadow: inset 0 0 0 1px $c-menu-shadow;
transition: box-shadow 0.3s ease;
display: block;
margin: 0px 0px 1em;
padding: 1.25em;
text-decoration: none;
&:hover {
box-shadow: inset 0 0 0 4px $c-primary-ink;
}
td {
text-align: center;
vertical-align: middle;
}
img {
height: 7em;
}
h1 {
color: $c-primary;
font-size: 2.5em;
margin: 0 0 16px;
}
p {
margin: 0em;
}
.p-link {
margin-top: 16px;
color: $c-primary;
font-weight: bold;
}
a {
color: $c-primary;
}
}
h1 {
font-size: 125%;
padding: 0;
margin: 0 0 16px;
}
a {
color: $c-text-link;
&:hover {
color: $c-black;
}
}
p {
line-height: 1.5;
}
.p {
&-socials {
text-align: center;
margin-bottom: 0px;
a {
margin: 1em 1em;
text-decoration: none;
}
br {
margin: 0em 0em 1em;
display: none;
}
img {
height: 1em;
margin-right: 0.5em;
margin-bottom: -0.15em;
}
}
&-subscription {
text-align: center;
}
&-warn {
img {
margin-bottom: -2px;
margin-right: 0.25em;
}
}
}
/* DOWNLOADS */
table {
width: 100%;
border-spacing: 0;
a {
padding-bottom: 1px;
border-bottom: 1px solid;
text-decoration: none;
color: $c-link;
&:hover {
color: $c-link-hover;
}
}
}
tr {
vertical-align: middle;
}
.tr {
&-header {
b {
display: inline;
}
}
&-margin {
&-bot > td {
padding-bottom: 1em;
}
&-top > td {
padding-top: 1em;
}
}
}
td {
vertical-align: middle;
img {
vertical-align: middle;
}
}
.td {
&-image {
width: 3em;
}
&-description {
text-align: left;
width: 40%;
.beta {
border: 1px solid $c-gray;
color: $c-gray;
font-size: 0.75em;
font-weight: bold;
border-radius: 0.25em;
padding: 0.25em;
}
}
&-languages {
text-align: right;
padding-left: 2em;
a {
display: inline-block;
white-space: nowrap;
}
a + a {
margin-left: 1em;
}
}
&-info {
img {
margin-right: 0.25em;
}
}
}
hr {
margin: 0;
}
.help-button {
cursor: pointer;
display: inline-block;
color: $c-primary;
img {
padding-bottom: 1px;
}
}
acronym {
border-bottom: 1px dashed $c-dot;
text-decoration: none;
cursor: help;
}
/* SCREENS.CSS */
#show {
max-width: 1280px;
max-height: 800px;
width: 100%;
height: 100%;
cursor: pointer;
border: 1px solid $c-screen-border;
display: block;
position: relative;
border-radius: 4px;
overflow: hidden;
img {
display: none;
max-width: 100%;
&.visible {
display: block;
}
}
}
iframe {
width: 100%;
border: none;
border-radius: 4px;
aspect-ratio: 16 / 9;
}
#carousel {
text-align: center;
margin: 1.25em auto 1em;
}
#dots {
text-align: center;
line-height: 1;
}
.dot {
display: inline-block;
width: 0.625em;
height: 0.625em;
background: $c-dot;
border-radius: 50%;
margin: 0 0.25em;
cursor: pointer;
&.active {
background: $c-text;
}
}
/* FOOTER */
#footer {
margin: 2em auto;
text-align: center;
color: $c-gray;
display: block;
width: 100%;
text-shadow: $c-white 1px 1px 0px;
font-size: 90%;
img {
margin-bottom: 0.5em;
height: 7em;
}
p {
margin: 0;
}
}
/* ADAPTIVE LAYOUT */
@media (max-width:864px) {
#article {
margin: 0 0 1em;
padding: 1em 1em 1.5em;
border-radius: 0;
}
#banner {
max-width: calc(100% - 2px);
margin: 1px 0 1em;
outline: 1px solid $c-body-bg;
table td {
&:first-child,
&:last-child {
display: none;
}
}
h1 {
font-size: 1.5em;
margin-bottom: 0;
}
p, .p-link {
margin-top: 0.5em;
}
}
.p-socials a {
display: block;
margin: 1em 0 0;
}
#menu > * {
margin: 0 0.5em;
}
.tr {
&-header {
b {
display: block;
}
}
}
.td {
&-description {
width: auto;
}
&-languages a {
display: block;
width: max-content;
margin-left: auto;
}
&-languages a + a {
margin-top: 0.5em;
margin-left: auto;
}
}
#footer {
margin: 1em auto;
}
}
+65 -24
View File
@@ -10,8 +10,29 @@
{% include 'tmpl/_menu.htm' %}
<div id="article">
<h1>{{ locale['downloads']['header'] }}</h1>
<h1>{{ _('downloads:header') }}</h1>
<table>
<tr class="tr-margin-bot">
<td colspan="3"><hr /></td>
</tr>
<tr class="tr-margin-bot tr-header">
<td class="td-image" width="40">
<img src="{{ url_for('static', filename='img/icons/i_kolibrios.png') }}" alt="kolibrios">
</td>
<td class="td-description">
{{ _('downloads:version') }} <b>{{ autobuild_vers }}</b>
</td>
<td class="td-languages">
{{ _('downloads:date') }} <b>{{ autobuild_date }}</b>
</td>
</tr>
<tr class="tr-margin-bot">
<td colspan="3"><hr /></td>
</tr>
{% for ext, alt in (
('img', 'floppy'),
('iso', 'cd'),
@@ -23,14 +44,11 @@
<img src="{{ url_for('static', filename='img/icons/i_%s.png' % alt) }}" alt="{{ alt }}">
</td>
<td class="td-description">
{{ locale['downloads']['%s-descr' % ext] }}
{{ _('downloads:%s-descr' % ext) }}
{% if ext == 'raw' %}
<span class="beta">BETA</span>
{% endif %}
</td>
<td class="td-date">
$autobuild_date_ru
</td>
<td class="td-languages">
{% for l, lang in (
('en_US', 'English'),
@@ -38,41 +56,64 @@
('es_ES', 'Español')
) %}
<a href="//builds.kolibrios.org/{{ l }}/latest-{{ ext }}.7z"
title="ver. $autobuild_cmtid_{{ l }}, $autobuild_size_{{ l }}_{{ ext }}">{{ lang }}</a>
title="ver. $autobuild_cmtid_{{ l }}, $autobuild_size_{{ l }}_{{ ext }}"
class="button">
{{ lang }}
{% if l == 'en_US' %}
<img src="{{ url_for('static', filename='img/flags/en.png') }}" alt="{{ lang }}">
{% elif l == 'ru_RU' %}
<img src="{{ url_for('static', filename='img/flags/ru.png') }}" alt="{{ lang }}">
{% elif l == 'es_ES' %}
<img src="{{ url_for('static', filename='img/flags/es.png') }}" alt="{{ lang }}">
{% endif %}</a>
{% endfor %}
</td>
</tr>
{% endfor %}
<tr>
<td colspan="4">
<hr />
</td>
<td colspan="3"><hr /></td>
</tr>
</table>
<table>
<tr class="tr-margin-top">
<td class="td-description" colspan="2">
<td class="td-description td-info" colspan="2">
<div role="button" class="help-button"
onclick="alert('{{ locale.downloads.download_help }}');">
{{ locale['downloads']['download_choice'] }}
onclick="alert('{{ _('downloads:download_help') }}');">
<img src="{{ url_for('static', filename='img/icons/i_info.png') }}" alt="Info">
<u>{{ _('downloads:download_choice') }}</u>
</div>
<td class="td-date">
<a href="//archive.kolibrios.org/ru/">{{ locale['downloads']['prev_rev'] }}</a>
</td>
<td class="td-languages">
<a href="//builds.kolibrios.org/">{{ locale['downloads']['all_rev'] }}</a>
<a href="//archive.kolibrios.org/{{ g.locale | e }}/">
{{ _('downloads:prev_rev') }}
</a>
<a href="//builds.kolibrios.org/">
{{ _('downloads:all_rev') }}
</a>
</td>
</tr>
</table>
<p>
{{ locale['downloads']['download_description[0]'] }}
<a href='http://www.7-zip.org' target='_blank'>7zip</a>.
<b>{{ locale['title']['index'] }}</b> {{ locale['downloads']['download_description[1]'] }}
<a href='http://www.gnu.org/licenses/gpl-2.0.html' target='_blank'>GPLv2</a>,
{{ locale['downloads']['download_description[2]'] }}
<a href='https://git.kolibrios.org'>{{ locale['downloads']['download_description[3]'] }}</a>.
{{ _(
'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'))
) | safe }}
</p>
<h1>{{ locale['screenshots']['header'] }}</h1>
<p class="p-warn">
<img src="{{ url_for('static', filename='img/icons/i_warn.png') }}" alt="Warn">{{ _(
'downloads:download_warn',
kolibrios="<b>{0}</b>".format(_('title:index'))
) | safe }}
</p>
<h1>{{ _('screenshots:header') }}</h1>
<div id="screen" onclick="next()">
<div id="show">
@@ -81,7 +122,7 @@
id="slide{{ i }}"
src="{{ url_for('static', filename='img/screenshots/%d.png' % i ) }}"
{% if i == 1 %}class="visible"{% endif %}
alt="{{ locale['screenshots']['%d' % i] }}"
alt="{{ _('screenshots:%d' % i) }}"
>
{% endfor %}
</div>
@@ -93,4 +134,4 @@
{% include 'tmpl/_footer.htm' %}
</body>
</html>
</html>
+29 -28
View File
@@ -1,43 +1,44 @@
<p>
<b>{{ locale['menu']['kolibrios'] }}</b>
{{ locale['article']['p1[0]'] }}
<a href="http://wiki.kolibrios.org/wiki/Hardware_Support">
{{- locale['article']['p1[1]'] -}}
</a>
{{ locale['article']['p1[2]'] }}
{{ _(
'article:p1',
kolibrios="<b>{0}</b>"
.format(_('menu:kolibrios')),
drivers="<a href='http://wiki.kolibrios.org/wiki/Hardware_Support'>{0}</a>"
.format(_('article:drivers'))
) | safe }}
</p>
<iframe src="https://www.youtube.com/embed/IEi25wYyj20" allowfullscreen="true"></iframe>
{% if g.locale == 'ru' %}
<iframe src="https://www.youtube.com/embed/IEi25wYyj20" allowfullscreen="true"></iframe>
{% else %}
<iframe src="https://www.youtube.com/embed/SATYQyIcimM" allowfullscreen="true"></iframe>
{% endif %}
<p>
{{ locale['article']['p2[0]'] }}
<b>{{ locale['menu']['kolibrios'] }}</b>
{{ locale['article']['p2[1]'] }}
<a href="http://www.flatassembler.net" target="_blank">FASM</a>
{%- set extra = locale.article.get('p2[11]', '').strip() -%}
{%- if extra -%} {{ " " + extra }} {%- endif -%}!
{{ locale.article['p2[2]'] }}
<b>{{ locale['menu']['kolibrios'] }}</b>
{{ locale['article']['p2[3]'] }}
{{ _(
'article:p2',
kolibrios="<b>{0}</b>"
.format(_('menu:kolibrios')),
fasm="<a href='http://www.flatassembler.net' target='_blank'>FASM</a>"
) | safe }}
</p>
<p>
<b>{{ locale['menu']['kolibrios'] }}</b>
{{ locale['article']['p3[0]'] }}
<a href="http://board.kolibrios.org">
{{- locale['article']['p3[1]'] -}}
</a>
{{ locale['article']['p3[2]'] }}
<a href="https://git.kolibrios.org/KolibriOS/kolibrios">
{{- locale['article']['p3[3]'] -}}
</a>
{{ locale['article']['p3[4]'] }}
{{ _(
'article:p3',
kolibrios="<b>{0}</b>"
.format(_('menu:kolibrios')),
feedback="<a href='http://board.kolibrios.org'>{0}</a>"
.format(_('article:feedback')),
help="<a href='https://git.kolibrios.org/KolibriOS/kolibrios'>{0}</a>"
.format(_('article:help'))
) | safe }}
</p>
<p class="p-subscription">
<b>
{{ locale['article']['p_subscription[0]'] }}
{{ _('article:p_subscription') }}
<br/>
{{ locale['article']['p_subscription[1]'] }}
{{ _('footer:team') }}
</b>
</p>
+1 -1
View File
@@ -2,6 +2,6 @@
<img src="{{ url_for('static', filename='img/logo.png') }}" alt="KolibriOS">
<p>
&copy; 2004  {{ year }} <br />
{{ locale['footer']['team'] }}
{{ _('footer:team') }}
</p>
</div>
+2 -2
View File
@@ -5,8 +5,8 @@
<img src="{{ url_for('static', filename='img/logo.png') }}" alt="KolibriOS">
</td>
<td valign="top">
<h1>{{ locale['git']['header'] }}</h1>
<p>{{ locale['git']['text'] }}</p>
<h1>{{ _('git:header') }}</h1>
<p>{{ _('git:text') }}</p>
<p class="p-link">
<a href="https://git.kolibrios.org">https://git.kolibrios.org</a>
</p>
+3 -3
View File
@@ -1,11 +1,11 @@
<head>
<meta charset="utf-8">
<title>{{ locale['title'][request.url_rule.endpoint] }}</title>
<title>{{ _('title:%s' % request.url_rule.endpoint) }}</title>
<link rel="icon" type="image/x-icon" href="{{ url_for('static', filename='favicon.ico') }}">
<meta name="description" content="{{ locale['header'][request.url_rule.endpoint] }}">
<meta name="description" content="{{ _('header:%s' % request.url_rule.endpoint) }}">
<meta name="keywords"
content="kolibri, kolibrios, колибри, колибриос, colibri, 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.js') }}"></script>
<script src="{{ url_for('static', filename='script.min.js') }}"></script>
</head>
+2 -3
View File
@@ -1,8 +1,7 @@
<div id="lang-dropdown">
<div>
{%- for lang_item in loc_list %}
{% set lang_code = lang_item.code %}
{% set lang_name = lang_item.name %}
{%- for lang_code in g.locales_name.keys() %}
{% set lang_name = g.locales_name[lang_code] %}
{%- if request.view_args["lang"] == lang_code %}
<font bg=#FF9800>
<a class="a-sel" href="{{ url_for(request.url_rule.endpoint, lang=lang_code) }}">
+9 -9
View File
@@ -1,25 +1,25 @@
<nav id="menu">
<a href="{{ url_for('index', lang=lang) }}" class="{% if current == 'index' %}a-sel{% endif %}">
<a href="{{ url_for('index', lang=g.locale) }}" class="{% if request.endpoint == 'index' %}a-sel{% endif %}">
{% if current == 'index' %}
<font bg="lightblue">{{ locale['menu']['kolibrios'] }}</font>
<font bg="lightblue">{{ _('menu:kolibrios') }}</font>
{% else %}
{{ locale['menu']['kolibrios'] }}
{{ _('menu:kolibrios') }}
{% endif %}
</a>
<a href="{{ url_for('download', lang=lang) }}" class="{% if current == 'download' %}a-sel{% endif %}">
<a href="{{ url_for('download', lang=g.locale) }}" class="{% if request.endpoint == 'download' %}a-sel{% endif %}">
{% if current == 'download' %}
<font bg="lightblue">{{ locale['menu']['download'] }}</font>
<font bg="lightblue">{{ _('menu:download') }}</font>
{% else %}
{{ locale['menu']['download'] }}
{{ _('menu:download') }}
{% endif %}
</a>
<a href="https://board.kolibrios.org">{{ locale['menu']['forum'] }}</a>
<a href="https://wiki.kolibrios.org/wiki/Main_Page/{{ lang }}">{{ locale['menu']['wiki'] }}</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>
<button onclick="dropdown_show(this)" id="lang-butt">
<img src="{{ url_for('static', filename='img/flags/%s.png' % lang) }}" alt="{{ lang }}">
<img src="{{ url_for('static', filename='img/flags/%s.png' % g.locale) }}" alt="{{ g.locale }}">
</button>
</nav>