🔒 Repository is read-only – file editing is disabled.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895
"""
i18n – Multi-language support (PL / EN)
"""
from flask import request
from urllib.parse import urlparse
TRANSLATIONS = {
"pl": {
# Nav
"git": "Git", "repo": "Repozytorium", "build": "Build",
"docs": "Dokumentacja", "add_pkg": "Dodaj",
"login_btn": "Zaloguj", "logout_btn": "Wyloguj",
"register": "Rejestracja", "profile": "Profil",
"admin": "Admin",
# Hero / Index
"hero_title": "Polska Niezależna Dystrybucja Linux",
"hero_subtitle": "Polska, niezależna dystrybucja Linux budowana od podstaw. Stabilna, szybka i przejrzysta — z własnym repozytorium, systemem buildów i dokumentacją.",
"download_iso": "Pobierz ISO",
"browse_repo": "Repozytorium",
"browse_docs": "Dokumentacja",
"pkg_count": "Pakietów", "build_count": "Buildów",
"pkg_size_total": "Rozmiar paczek",
"ok_count": "Udanych", "fail_count": "Nieudanych",
# Features
"why_title": "Dlaczego Pagan?",
"feat_from_scratch": "Od podstaw",
"feat_from_scratch_desc": "Zbudowany z wykorzystaniem Linux From Scratch — zero zbędnych zależności, pełna kontrola nad każdym komponentem.",
"feat_pkg_mgr": "Własny menedżer pakietów",
"feat_pkg_mgr_desc": "pag — prosty, szybki menedżer z wsparciem dla GPG, rollbacków i Flatpak.",
"feat_toolchain": "Nowoczesny toolchain",
"feat_toolchain_desc": "GCC 15, glibc 2.44, LLVM, Rust, Go — najnowsze narzędzia deweloperskie.",
"feat_security": "Bezpieczeństwo",
"feat_security_desc": "Podpisy GPG, izolowane buildy w chroot, weryfikacja SHA256 — każdy pakiet przechodzi pełną walidację.",
# Sections
"pkg_repo": "Repozytorium pakietów",
"pkg_repo_desc": "pakietów w kategoriach",
"browse_pkgs": "Przeglądaj pakiety →",
"build_system": "System buildów",
"no_build_history": "Brak historii buildów",
"build_panel_link": "Panel buildów →",
"missing_pkg": "Brakuje pakietu?",
"missing_pkg_desc": "Wypełnij formularz, wygenerujemy PAGBUILD.yaml i dodamy pakiet do repo — po zatwierdzeniu przez admina.",
"suggest_pkg": "Zaproponuj pakiet",
# Download
"download_title": "Pobierz PaganOS",
"download_subtitle": "Obrazy ISO gotowe do instalacji. Minimalna instalacja, maksymalna kontrola.",
"iso_image": "Obraz ISO",
"iso_desc": "Pełny obraz instalacyjny z podstawowym zestawem narzędzi.",
"dl_from_repo": "Pobierz z repo",
"iso_available": "Obrazy dostępne w katalogu stable",
"repo_config": "Repozytorium",
"repo_config_desc": "Dodaj repo do istniejącej instalacji:",
"gpg_key": "Klucz GPG",
"gpg_key_desc": "Wszystkie pakiety są podpisane kluczem GPG. Zaimportuj go przed pierwszą instalacją (lub zaufaj automatycznie podczas pierwszego pag sync):",
"fingerprint": "Fingerprint",
# Download – obrazy ISO (upload w panelu admina)
"iso_upload_title": "Wgraj nowy obraz",
"iso_version": "Wersja",
"iso_file": "Plik",
"iso_upload_btn": "Wgraj ISO",
"iso_list": "Wgrane obrazy",
"iso_empty": "Brak wgranych obrazów – wgraj pierwszy powyżej.",
"iso_available_images": "Dostępne obrazy",
"download_iso": "Pobierz ISO",
"iso_released": "Data wydania",
"iso_desc_label": "Opis",
"iso_changelog": "Co nowego",
"iso_checksum": "Suma kontrolna (SHA-256)",
"iso_copy_sha": "Kopiuj sumę",
"iso_copied": "Skopiowano!",
"iso_dl_sha": "Suma (.sha256)",
"iso_verify": "Zweryfikuj pobrany obraz: porównaj sumę SHA-256 albo sprawdź podpis kluczem GPG poniżej.",
# About
"about_title": "O PaganOS",
"about_subtitle": "Historia, filozofia i architektura projektu.",
"philosophy": "Filozofia",
"philosophy_desc": "PaganOS to dystrybucja dla tych, którzy chcą rozumieć swój system. Żadnych ukrytych procesów, żadnego bloatware — tylko to, czego naprawdę potrzebujesz.",
"architecture": "Architektura",
"architecture_desc": "Zbudowany na LFS 13.0 + BLFS. Własny menedżer pakietów pag, system buildów pagbuild i synchronizator pagsync.",
"components": "Komponenty systemu",
"toolchain_title": "Toolchain",
"compiler": "Kompilator",
"c_library": "Biblioteka C",
"arch_label": "Architektura",
# Footer
"footer_about": "Polska, niezależna dystrybucja Linux. Budowana od podstaw, z własnym menedżerem pakietów i systemem kompilacji.",
"footer_links": "Linki",
"footer_dl": "Pobierz",
"footer_repo": "Repozytorium",
"footer_source": "Kod źródłowy",
"footer_docs": "Dokumentacja",
"footer_community": "Społeczność",
"footer_suggest": "Zaproponuj pakiet",
"footer_about_link": "O projekcie",
"footer_copy": "PaganOS. Zbudowany z i Linux From Scratch.",
# Git index
"git_title": "Repozytoria Git",
"repo_count_label": "repozytoriów",
"public_label": "publicznych",
"private_label": "prywatnych",
"commits_label": "commitów",
"data_label": "danych",
"search_code": "Szukaj w kodzie...",
"help_btn": "Pomoc",
"new_repo_btn": "Nowe repo",
"recent_activity": "Ostatnia aktywność",
"no_activity": "Brak aktywności",
"no_repos": "Brak repozytoriów.",
"create_first": "Utwórz pierwsze →",
"browse_btn": "Przeglądaj",
"public_badge": "public",
"private_badge": "prywatne",
"branches_count": "gałęzi",
"open_issues_count": "open",
# Git repo view
"files_section": "Pliki",
"last_change": "Ostatnia zmiana",
"empty_dir": "Pusty katalog",
"filter_files": "Filtruj pliki…",
"name_col": "Nazwa",
"size_col": "Rozmiar",
"no_files_match": "Brak pasujących plików",
"show_more": "Pokaż więcej",
"commits_section": "Commity",
"no_commits": "Brak commitów",
"about_repo": "O repozytorium",
"contributors_label": "Kontrybutorzy",
"issues_label": "Issues",
"default_branch": "Domyślna gałąź",
"actions": "Akcje",
"branches_btn": "Gałęzie",
"contributors_btn": "Kontrybutorzy",
"issues_btn": "Issues",
"download_tar": "Pobierz .tar.gz",
"new_file_btn": "Nowy plik",
"new_release_btn": "Nowy release",
"rename_btn": "Zmień nazwę",
"rename_title": "Zmień nazwę",
"rename_new": "Nowa nazwa (ścieżka docelowa):",
"cancel": "Anuluj",
"releases_label": "Release",
"all_sources_btn": "Wszystkie źródła",
"settings_btn": "Ustawienia",
"readme_section": "README.md",
"private_access_denied": "Repozytorium prywatne – brak dostępu",
# Commit view
"commit_title": "Commit",
"files_changed": "plików",
"added_lines": "dodanych",
"deleted_lines": "usuniętych",
# Contributors
"contributors_title": "Kontrybutorzy",
"contributors_count": "osób",
"contrib_commits": "commitów",
"contrib_author": "Autor",
"contrib_share": "Udział",
# File view
"lines_count": "linii",
"edit_btn": "Edytuj",
"raw_btn": "Raw",
"back_btn": "Powrót",
# Auth
"login_title": "Zaloguj się",
"username_placeholder": "Nazwa użytkownika",
"password_placeholder": "Hasło",
"remember_me": "Zapamiętaj mnie",
"login_submit": "Zaloguj",
"create_account": "Utwórz konto",
"forgot_password": "Nie pamiętam hasła",
"register_title": "Utwórz konto",
"email_placeholder": "Adres e-mail",
"register_submit": "Zarejestruj",
"captcha_question": "Ile to",
"register_info": "Po rejestracji otrzymasz e-mail z linkiem aktywacyjnym.",
"register_info_admin": "Rejestracja otwarta – konto aktywuje administrator.",
"already_have": "Masz już konto? Zaloguj się",
"forgot_title": "Zapomniałeś hasła?",
"forgot_desc": "Podaj adres e-mail użyty podczas rejestracji. Wyślemy link do resetu hasła.",
"send_link": "Wyślij link",
"back_to_login": "Powrót do logowania",
"reset_title": "Nowe hasło",
"new_password_placeholder": "Nowe hasło (min. 5 znaków)",
"save_password": "Zapisz nowe hasło",
# Profile
"change_password": "Zmień hasło",
"current_password": "Obecne hasło",
"new_password": "Nowe hasło",
"save": "Zapisz",
"token": "Token Git",
"token_help": "Użyj tokena zamiast hasła w git clone.",
"generate_token": "Generuj token",
# Flash messages
"logged_in": "Zalogowano ",
"wrong_credentials": "Nieprawidłowy login lub hasło.",
"account_blocked": "Konto zablokowane. Skontaktuj się z administratorem.",
"account_inactive": "Konto nieaktywowane. Sprawdź e-mail lub poczekaj na aktywację.",
"too_many_attempts": "Zbyt wiele prób. Spróbuj za",
"remaining_attempts": "Pozostało prób:",
"password_reset_sent": "Jeśli konto istnieje, wyślemy link do resetu hasła na podany adres.",
"password_changed": "Hasło zmienione! Zaloguj się nowym hasłem.",
"reset_link_invalid": "Link do resetu hasła jest nieprawidłowy lub wygasł.",
"email_verified": "Adres e-mail potwierdzony! Możesz się zalogować.",
"verify_link_invalid": "Link weryfikacyjny jest nieprawidłowy lub wygasł.",
"account_created": "Konto utworzone! Możesz się zalogować.",
"account_created_admin": "Konto utworzone! Poczekaj na aktywację przez administratora.",
"captcha_error": "Błędna odpowiedź CAPTCHA",
"email_blocked": "Ta domena e-mail jest zablokowana (spam). Użyj innego adresu.",
"registration_disabled": "Rejestracja jest tymczasowo wyłączona.",
"repo_created": "Repo utworzone",
"repo_deleted": "Repo usunięte",
"repo_private": "prywatne",
"repo_public": "publiczne",
"saved": "Zapisano",
"deleted": "Usunięto",
"error": "Błąd",
# Admin
"admin_title": "Panel Admina",
"admin_repo": "Repozytorium",
"admin_pkgs_stable": "pakietów w stable",
"admin_last_build": "Ostatni build",
"admin_none": "brak",
"admin_builds_today": "Buildy dziś",
"admin_pagsync_running": "Działa",
"admin_pagsync_stopped": "Zatrzymany",
"admin_sys_tools": "Narzędzia systemowe",
"admin_reset_state": "Reset stanu",
"admin_clean_cache": "Clean cache",
"admin_clean_output": "Clean output",
"admin_clean_sources": "Clean sources",
"admin_fix_sha": "Fix SHA",
"admin_check_updates": "Check updates",
"admin_users_title": "Użytkownicy",
"admin_registration_open": "Rejestracja otwarta",
"admin_activation_required": "Aktywacja przez admina",
"admin_git_readonly": "Git tylko do odczytu",
"admin_git_readonly_info": "Tryb tylko do odczytu blokuje edycję plików w repo (git) zwykłym użytkownikom i maintainerom – admini zachowują dostęp.",
"admin_settings": "Ustawienia",
"admin_settings_title": "Ustawienia",
"git_readonly_notice": "🔒 Repozytorium w trybie tylko do odczytu – edycja plików jest wyłączona.",
"git_repo_readonly_title": "Tylko do odczytu",
"git_repo_readonly_on": "Repozytorium jest tylko do odczytu – użytkownicy nie mogą edytować plików.",
"git_repo_readonly_off": "Repozytorium jest edytowalne – użytkownicy z uprawnieniami mogą edytować pliki.",
"git_repo_readonly_enable": "🔒 Ustaw jako tylko do odczytu",
"git_repo_readonly_disable": "Ustaw jako edytowalne",
"admin_save": "Zapisz",
"admin_reg_info": "Wyłączenie rejestracji zamyka nowe konta.",
"admin_add_user": "Dodaj",
"admin_name": "Nazwa",
"admin_email": "Email",
"admin_password": "Hasło",
"admin_role": "Rola",
"admin_status": "Status",
"admin_actions": "Akcje",
"admin_user": "Użytkownik",
"admin_inactive": "Nieaktywne",
"admin_git_repos": "Repozytoria Git",
"admin_visibility": "Widoczność",
"admin_size": "Rozmiar",
"admin_create_repo": "Utwórz repo",
"admin_permissions": "Uprawnienia do repo",
"admin_submissions": "Zgłoszenia",
"admin_commits_page": "Commity",
"admin_confirm_start": "Uruchomić pagsync?",
"admin_confirm_stop": "Zatrzymać pagsync?",
"admin_confirm_reset": "Zresetować stan pagsync?",
"admin_confirm_clean_cache": "Wyczyścić cache builda?",
"admin_confirm_clean_output": "Wyczyścić output builda?",
"admin_confirm_clean_sources": "Wyczyścić źródła z cache?",
"admin_confirm_fix_sha": "Uruchomić auto-fix SHA256?",
"admin_confirm_check_updates": "Sprawdzić nowsze wersje pakietów?",
"admin_confirm_delete_user": "Usunąć",
# Admin – karty pobierania (/download)
"admin_dl_title": "Karty pobierania",
"admin_dl_preview": "Podgląd strony",
"admin_dl_icon": "Ikona",
"admin_dl_title_label": "Tytuł",
"admin_dl_desc": "Opis",
"admin_dl_url": "Link (URL)",
"admin_dl_btn": "Przycisk",
"admin_dl_add": "Dodaj kartę",
"admin_dl_list": "Lista kart",
"admin_dl_edit": "Edytuj",
"admin_dl_toggle": "Pokaż/ukryj",
"admin_dl_on": "Widoczna",
"admin_dl_off": "Ukryta",
"admin_dl_empty": "Brak kart pobierania – dodaj pierwszą powyżej.",
"admin_dl_delete_confirm": "Usunąć tę kartę?",
# Build
"build_total": "Total builds",
"build_success": "Success",
"build_failed": "Failed",
"build_active": "Active",
"build_last_sync": "Last sync",
"build_current_step": "Current step",
"build_live_console": "Live Console",
"build_ready": "Ready.",
"build_packages_list": "Pakiety",
"build_loading": "Ładowanie...",
"build_filter": "Filtruj...",
"build_all_status": "Wszystkie",
"build_status_ok": "OK",
"build_status_failed": "Failed",
"build_status_pending": "Pending",
"build_sync_btn": "Sync & Build",
"build_force_btn": "Force Build All",
"build_rebuild_failed": "Rebuild Failed",
"build_missing": "Build Missing",
"build_download_log": "Log TXT",
"build_clear_logs": "Clear Logs",
"build_purge_rebuild": "Purge & Rebuild",
"build_history": "Historia buildów",
"build_no_entries": "Brak wpisów",
"build_entries": "wpisów",
"build_confirm_rebuild": "Zbudować",
# Repo
"repo_all": "Wszystkie",
"repo_search": "Szukaj pakietu...",
"repo_name_header": "Nazwa",
"repo_version": "Wersja",
"repo_desc": "Opis",
"repo_no_results": "Nic nie znaleziono.",
"size": "Rozmiar",
"category": "Kategoria",
# 404
"not_found": "Strona nie istnieje.",
"back_home": "Strona główna",
# Build login
"build_login_title": "Panel Budowania",
"build_login_btn": "Wejdź",
"build_restricted_msg": "Zaloguj się jako admin lub opiekun repozytorium.",
# Build dashboard JS strings
"build_th_status": "St",
"build_th_pkg": "Pakiet",
"build_th_ver": "Ver",
"build_th_cat": "Kat",
"build_th_version": "Wersja",
"build_th_time": "Czas",
"build_no_entries": "Brak wpisów",
"build_confirm_single": "Zbudować",
"build_confirm_force": "Na pewno? Zbuduje wszystkie pakiety od nowa.",
"build_confirm_purge": "Usunąć WSZYSTKIE paczki i zbudować od nowa?",
"build_confirm_clear": "Wyczyścić wszystkie logi?",
"build_sync_only_btn": "Sync (bez budowania)",
"build_fix_sha": "Fix SHA",
"recipe_label": "PAGBUILD.yaml (edytowalne)",
"recipe_commit_msg": "Nazwa commita (opcjonalnie)...",
"recipe_save_git": "Zapisz do gita",
"recipe_close": "Zamknij",
# Admin extras
"admin_disk": "Dysk (VPS)",
"admin_ram": "RAM",
"admin_cpu": "CPU",
"admin_free": "Wolne",
"admin_load_avg": "Średnie obciążenie",
"admin_no_repos": "Brak repozytoriów. Utwórz pierwsze wyżej",
"admin_perm_user": "Użytkownik",
"admin_perm_role": "Rola",
"admin_submissions_title": "Zgłoszenia receptur (community)",
"admin_no_submissions": "Brak zgłoszeń w kolejce.",
"admin_preview": "Podgląd PAGBUILD.yaml",
"admin_approve": "Zatwierdź",
"admin_reject": "Odrzuć",
"admin_back_panel": "Panel",
"admin_confirm_approve": "Zatwierdzić",
"admin_confirm_reject": "Odrzucić zgłoszenie",
# Docs
"docs_overview": "Lista dostępnych dokumentów i przewodników.",
"getting_started": "Jak zacząć",
"new_doc": "Nowa dokumentacja",
"no_docs": "Brak dokumentów.",
"available_in": "Dostępne w języku:",
# Translate
"translate_title": "Tłumaczenia",
"translate_missing": "Brakujące tłumaczenia",
"translate_missing_pl": "Brakuje w PL",
"translate_missing_en": "Brakuje w EN",
"translate_help": "Chcesz pomóc? Wyślij pull request do repo git z tłumaczeniami lub zgłoś issue.",
"translate_nav": " Tłumaczenia",
# Status
"status_title": "Status PaganOS",
"status_builds": "Buildów",
"status_ok": "Udanych",
"status_fail": "Nieudanych",
"status_current": "Obecny build",
"status_changes": "Ostatnie zmiany w recepturach",
"status_no_changes": "Brak zmian / brak repozytorium recipes.",
"status_auto": "Odświeżanie automatyczne co 10s.",
"recent_changes": "Ostatnie zmiany w repo",
"full_status": "Pełny status →",
"hero_eyebrow": "Niezależna dystrybucja zbudowana od podstaw",
"live_builds": "Buildy na żywo",
"no_active_build": "brak aktywnego builda",
"latest_build_lbl": "Ostatni build",
"last_sync_lbl": "Ostatnia synchronizacja",
# Watch / kopiowanie
"watch_pkg": "Obserwuj (e-mail o nowych wersjach)",
"watching_pkg": "Obserwujesz (nowe wersje) – kliknij by przestać",
"copy_cmd": "Kopiuj",
},
"en": {
# Nav
"git": "Git", "repo": "Repository", "build": "Build",
"docs": "Docs", "add_pkg": "Add",
"login_btn": "Login", "logout_btn": "Logout",
"register": "Register", "profile": "Profile",
"admin": "Admin",
# Hero / Index
"hero_title": "Polish Independent Linux Distribution",
"hero_subtitle": "Polish, independent Linux distribution built from scratch. Stable, fast, and transparent — with its own repository, build system, and documentation.",
"download_iso": "Download ISO",
"browse_repo": "Repository",
"browse_docs": "Documentation",
"pkg_count": "Packages", "build_count": "Builds",
"pkg_size_total": "Packages size",
"ok_count": "Succeeded", "fail_count": "Failed",
# Features
"why_title": "Why Pagan?",
"feat_from_scratch": "From Scratch",
"feat_from_scratch_desc": "Built using Linux From Scratch — zero unnecessary dependencies, full control over every component.",
"feat_pkg_mgr": "Custom Package Manager",
"feat_pkg_mgr_desc": "pag — simple, fast manager with GPG support, rollbacks, and Flatpak.",
"feat_toolchain": "Modern Toolchain",
"feat_toolchain_desc": "GCC 15, glibc 2.44, LLVM, Rust, Go — latest development tools.",
"feat_security": "Security",
"feat_security_desc": "GPG signatures, isolated chroot builds, SHA256 verification — every package is fully validated.",
# Sections
"pkg_repo": "Package Repository",
"pkg_repo_desc": "packages in categories",
"browse_pkgs": "Browse packages →",
"build_system": "Build System",
"no_build_history": "No build history",
"build_panel_link": "Build panel →",
"missing_pkg": "Missing a package?",
"missing_pkg_desc": "Fill out the form, we'll generate a PAGBUILD.yaml and add the package to the repo — after admin approval.",
"suggest_pkg": "Suggest a package",
# Download
"download_title": "Download PaganOS",
"download_subtitle": "ISO images ready for installation. Minimal install, maximum control.",
"iso_image": "ISO Image",
"iso_desc": "Full installation image with a basic toolset.",
"dl_from_repo": "Download from repo",
"iso_available": "Images available in the stable directory",
"repo_config": "Repository",
"repo_config_desc": "Add the repo to an existing installation:",
"gpg_key": "GPG Key",
"gpg_key_desc": "All packages are signed with a GPG key. Import it before the first install (or trust it automatically on the first pag sync):",
"fingerprint": "Fingerprint",
# Download – ISO images (admin upload)
"iso_upload_title": "Upload new image",
"iso_version": "Version",
"iso_file": "File",
"iso_upload_btn": "Upload ISO",
"iso_list": "Uploaded images",
"iso_empty": "No images uploaded yet – upload the first one above.",
"iso_available_images": "Available images",
"download_iso": "Download ISO",
"iso_released": "Release date",
"iso_desc_label": "Description",
"iso_changelog": "What's new",
"iso_checksum": "Checksum (SHA-256)",
"iso_copy_sha": "Copy checksum",
"iso_copied": "Copied!",
"iso_dl_sha": "Checksum file (.sha256)",
"iso_verify": "Verify the downloaded image: compare the SHA-256 checksum or check the GPG signature with the key below.",
# About
"about_title": "About PaganOS",
"about_subtitle": "History, philosophy, and architecture of the project.",
"philosophy": "Philosophy",
"philosophy_desc": "PaganOS is a distribution for those who want to understand their system. No hidden processes, no bloatware — just what you really need.",
"architecture": "Architecture",
"architecture_desc": "Built on LFS 13.0 + BLFS. Custom package manager pag, build system pagbuild, and sync tool pagsync.",
"components": "System Components",
"toolchain_title": "Toolchain",
"compiler": "Compiler",
"c_library": "C Library",
"arch_label": "Architecture",
# Footer
"footer_about": "Polish independent Linux distribution. Built from scratch, with its own package manager and build system.",
"footer_links": "Links",
"footer_dl": "Download",
"footer_repo": "Repository",
"footer_source": "Source Code",
"footer_docs": "Documentation",
"footer_community": "Community",
"footer_suggest": "Suggest a package",
"footer_about_link": "About the project",
"footer_copy": "PaganOS. Built with and Linux From Scratch.",
# Git index
"git_title": "Git Repositories",
"repo_count_label": "repositories",
"public_label": "public",
"private_label": "private",
"commits_label": "commits",
"data_label": "of data",
"search_code": "Search code...",
"help_btn": "Help",
"new_repo_btn": "New repo",
"recent_activity": "Recent Activity",
"no_activity": "No activity",
"no_repos": "No repositories.",
"create_first": "Create the first one →",
"browse_btn": "Browse",
"public_badge": "public",
"private_badge": "private",
"branches_count": "branches",
"open_issues_count": "open",
# Git repo view
"files_section": "Files",
"last_change": "Last change",
"empty_dir": "Empty directory",
"filter_files": "Filter files…",
"name_col": "Name",
"size_col": "Size",
"no_files_match": "No matching files",
"show_more": "Show more",
"commits_section": "Commits",
"no_commits": "No commits",
"about_repo": "About",
"contributors_label": "Contributors",
"issues_label": "Issues",
"default_branch": "Default branch",
"actions": "Actions",
"branches_btn": "Branches",
"contributors_btn": "Contributors",
"issues_btn": "Issues",
"download_tar": "Download .tar.gz",
"new_file_btn": "New file",
"new_release_btn": "New release",
"rename_btn": "Rename",
"rename_title": "Rename",
"rename_new": "New name (target path):",
"cancel": "Cancel",
"releases_label": "Releases",
"all_sources_btn": "All sources",
"settings_btn": "Settings",
"readme_section": "README.md",
"private_access_denied": "Private repository – access denied",
# Commit view
"commit_title": "Commit",
"files_changed": "files",
"added_lines": "added",
"deleted_lines": "deleted",
# Contributors
"contributors_title": "Contributors",
"contributors_count": "people",
"contrib_commits": "commits",
"contrib_author": "Author",
"contrib_share": "Share",
# File view
"lines_count": "lines",
"edit_btn": "Edit",
"raw_btn": "Raw",
"back_btn": "Back",
# Auth
"login_title": "Sign in",
"username_placeholder": "Username",
"password_placeholder": "Password",
"remember_me": "Remember me",
"login_submit": "Sign in",
"create_account": "Create an account",
"forgot_password": "Forgot password?",
"register_title": "Create an account",
"email_placeholder": "Email address",
"register_submit": "Sign up",
"captcha_question": "What is",
"register_info": "After registering, you'll receive an email with an activation link.",
"register_info_admin": "Registration open – account will be activated by an admin.",
"already_have": "Already have an account? Sign in",
"forgot_title": "Forgot your password?",
"forgot_desc": "Enter the email address you used to register. We'll send you a password reset link.",
"send_link": "Send link",
"back_to_login": "Back to login",
"reset_title": "New password",
"new_password_placeholder": "New password (min. 5 characters)",
"save_password": "Save new password",
# Profile
"change_password": "Change password",
"current_password": "Current password",
"new_password": "New password",
"save": "Save",
"token": "Git Token",
"token_help": "Use token instead of password for git clone.",
"generate_token": "Generate token",
# Flash messages
"logged_in": "Logged in ",
"wrong_credentials": "Invalid username or password.",
"account_blocked": "Account blocked. Contact the administrator.",
"account_inactive": "Account not activated. Check your email or wait for admin activation.",
"too_many_attempts": "Too many attempts. Try again in",
"remaining_attempts": "Remaining attempts:",
"password_reset_sent": "If the account exists, we'll send a password reset link to the provided address.",
"password_changed": "Password changed! Log in with your new password.",
"reset_link_invalid": "The password reset link is invalid or expired.",
"email_verified": "Email verified! You can now log in.",
"verify_link_invalid": "The verification link is invalid or expired.",
"account_created": "Account created! You can now log in.",
"account_created_admin": "Account created! Wait for admin activation.",
"captcha_error": "Incorrect CAPTCHA answer",
"email_blocked": "This email domain is blocked (spam). Use a different address.",
"registration_disabled": "Registration is temporarily disabled.",
"repo_created": "Repo created",
"repo_deleted": "Repo deleted",
"repo_private": "private",
"repo_public": "public",
"saved": "Saved",
"deleted": "Deleted",
"error": "Error",
# Admin
"admin_title": "Admin Panel",
"admin_repo": "Repository",
"admin_pkgs_stable": "packages in stable",
"admin_last_build": "Last build",
"admin_none": "none",
"admin_builds_today": "Builds today",
"admin_pagsync_running": "Running",
"admin_pagsync_stopped": "Stopped",
"admin_sys_tools": "System Tools",
"admin_reset_state": "Reset state",
"admin_clean_cache": "Clean cache",
"admin_clean_output": "Clean output",
"admin_clean_sources": "Clean sources",
"admin_fix_sha": "Fix SHA",
"admin_check_updates": "Check updates",
"admin_users_title": "Users",
"admin_registration_open": "Registration open",
"admin_activation_required": "Admin activation",
"admin_git_readonly": "Git read-only",
"admin_git_readonly_info": "Read-only mode blocks file editing in git repos for regular users and maintainers – admins keep access.",
"admin_settings": "Settings",
"admin_settings_title": "Settings",
"git_readonly_notice": "🔒 Repository is read-only – file editing is disabled.",
"git_repo_readonly_title": "Read-only",
"git_repo_readonly_on": "Repository is read-only – users cannot edit files.",
"git_repo_readonly_off": "Repository is writable – permitted users can edit files.",
"git_repo_readonly_enable": "🔒 Set read-only",
"git_repo_readonly_disable": "Set writable",
"admin_save": "Save",
"admin_reg_info": "Disabling registration closes new accounts.",
"admin_add_user": "Add",
"admin_name": "Name",
"admin_email": "Email",
"admin_password": "Password",
"admin_role": "Role",
"admin_status": "Status",
"admin_actions": "Actions",
"admin_user": "User",
"admin_inactive": "Inactive",
"admin_git_repos": "Git Repositories",
"admin_visibility": "Visibility",
"admin_size": "Size",
"admin_create_repo": "Create repo",
"admin_permissions": "Repo Permissions",
"admin_submissions": "Submissions",
"admin_commits_page": "Commits",
"admin_confirm_start": "Start pagsync?",
"admin_confirm_stop": "Stop pagsync?",
"admin_confirm_reset": "Reset pagsync state?",
"admin_confirm_clean_cache": "Clean build cache?",
"admin_confirm_clean_output": "Clean build output?",
"admin_confirm_clean_sources": "Clean source cache?",
"admin_confirm_fix_sha": "Run auto-fix SHA256?",
"admin_confirm_check_updates": "Check for newer package versions?",
"admin_confirm_delete_user": "Delete",
# Admin – download cards (/download)
"admin_dl_title": "Download cards",
"admin_dl_preview": "Preview page",
"admin_dl_icon": "Icon",
"admin_dl_title_label": "Title",
"admin_dl_desc": "Description",
"admin_dl_url": "Link (URL)",
"admin_dl_btn": "Button",
"admin_dl_add": "Add card",
"admin_dl_list": "Cards",
"admin_dl_edit": "Edit",
"admin_dl_toggle": "Show/hide",
"admin_dl_on": "Visible",
"admin_dl_off": "Hidden",
"admin_dl_empty": "No download cards – add the first one above.",
"admin_dl_delete_confirm": "Delete this card?",
# Build
"build_total": "Total builds",
"build_success": "Success",
"build_failed": "Failed",
"build_active": "Active",
"build_last_sync": "Last sync",
"build_current_step": "Current step",
"build_live_console": "Live Console",
"build_ready": "Ready.",
"build_packages_list": "Packages",
"build_loading": "Loading...",
"build_filter": "Filter...",
"build_all_status": "All",
"build_status_ok": "OK",
"build_status_failed": "Failed",
"build_status_pending": "Pending",
"build_sync_btn": "Sync & Build",
"build_force_btn": "Force Build All",
"build_rebuild_failed": "Rebuild Failed",
"build_missing": "Build Missing",
"build_download_log": "Log TXT",
"build_clear_logs": "Clear Logs",
"build_purge_rebuild": "Purge & Rebuild",
"build_history": "Build History",
"build_no_entries": "No entries",
"build_entries": "entries",
"build_confirm_rebuild": "Build",
# Repo
"repo_all": "All",
"repo_search": "Search packages...",
"repo_name_header": "Name",
"repo_version": "Version",
"repo_desc": "Description",
"repo_no_results": "No results found.",
"size": "Size",
"category": "Category",
# 404
"not_found": "Page not found.",
"back_home": "Home",
# Build login
"build_login_title": "Build Panel",
"build_login_btn": "Enter",
"build_restricted_msg": "Login as admin or repo maintainer.",
# Build dashboard JS strings
"build_th_status": "St",
"build_th_pkg": "Package",
"build_th_ver": "Ver",
"build_th_cat": "Cat",
"build_th_version": "Version",
"build_th_time": "Time",
"build_no_entries": "No entries",
"build_confirm_single": "Build",
"build_confirm_force": "Are you sure? Will rebuild all packages.",
"build_confirm_purge": "Delete ALL packages and rebuild from scratch?",
"build_confirm_clear": "Clear all logs?",
"build_sync_only_btn": "Sync (no build)",
"build_fix_sha": "Fix SHA",
"recipe_label": "PAGBUILD.yaml (editable)",
"recipe_commit_msg": "Commit message (optional)...",
"recipe_save_git": "Save to git",
"recipe_close": "Close",
# Admin extras
"admin_disk": "Disk (VPS)",
"admin_ram": "RAM",
"admin_cpu": "CPU",
"admin_free": "Free",
"admin_load_avg": "Load average",
"admin_no_repos": "No repositories. Create one above",
"admin_perm_user": "User",
"admin_perm_role": "Role",
"admin_submissions_title": "Recipe Submissions (community)",
"admin_no_submissions": "No pending submissions.",
"admin_preview": "PAGBUILD.yaml preview",
"admin_approve": "Approve",
"admin_reject": "Reject",
"admin_back_panel": "Panel",
"admin_confirm_approve": "Approve",
"admin_confirm_reject": "Reject submission",
# Docs
"docs_overview": "List of available docs and guides.",
"getting_started": "Getting Started",
"new_doc": "New documentation",
"no_docs": "No docs yet.",
"available_in": "Available in:",
# Translate
"translate_title": "Translations",
"translate_missing": "Missing translations",
"translate_missing_pl": "Missing in PL",
"translate_missing_en": "Missing in EN",
"translate_help": "Want to help? Submit a pull request to the git repo with translations or open an issue.",
"translate_nav": " Translate",
# Status
"status_title": "PaganOS Status",
"status_builds": "Builds",
"status_ok": "Succeeded",
"status_fail": "Failed",
"status_current": "Current build",
"status_changes": "Recent recipe changes",
"status_no_changes": "No changes / no recipes repo.",
"status_auto": "Auto-refresh every 10s.",
"recent_changes": "Recent repo changes",
"full_status": "Full status →",
"hero_eyebrow": "Independent distribution built from scratch",
"live_builds": "Live builds",
"no_active_build": "no active build",
"latest_build_lbl": "Latest build",
"last_sync_lbl": "Last sync",
# Watch / kopiowanie
"watch_pkg": "Watch (email on new versions)",
"watching_pkg": "Watching (new versions) – click to stop",
"copy_cmd": "Copy",
},
}
def get_lang():
"""Wykrywa język: cookie → Accept-Language → en"""
lang = request.cookies.get("lang")
if lang in TRANSLATIONS:
return lang
al = request.headers.get("Accept-Language", "")
if "pl" in al:
return "pl"
return "en"
import time as _time
_content_cache = {"ts": 0, "map": {}}
def _content_overrides():
"""Nadpisania treści z panelu admina (tabela content) – cache 15s."""
now = _time.time()
if now - _content_cache["ts"] > 15:
try:
from database import get_content_map
_content_cache["map"] = get_content_map()
_content_cache["ts"] = now
except Exception:
pass
return _content_cache["map"]
def t(key, **kwargs):
"""Zwraca przetłumaczony tekst (nadpisywalny z panelu admina)."""
lang = get_lang()
text = TRANSLATIONS.get(lang, {}).get(key, TRANSLATIONS["en"].get(key, key))
try:
override = _content_overrides().get(lang, {}).get(key)
if override is not None:
text = override
except Exception:
pass
if kwargs:
try:
text = text.format(**kwargs)
except Exception:
pass
return text
def lang_switch():
"""Zwraca przeciwny język."""
return "en" if get_lang() == "pl" else "pl"
def inject_i18n():
return dict(t=t, lang=get_lang(), lang_switch=lang_switch)