nora-registry 0.2.35

Cloud-Native Artifact Registry - Fast, lightweight, multi-protocol
// Copyright (c) 2026 Volkov Pavel | DevITWay
// SPDX-License-Identifier: MIT

/// Internationalization support for the UI
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Lang {
    #[default]
    En,
    Ru,
}

impl Lang {
    pub fn from_str(s: &str) -> Self {
        match s.to_lowercase().as_str() {
            "ru" | "rus" | "russian" => Lang::Ru,
            _ => Lang::En,
        }
    }

    pub fn code(&self) -> &'static str {
        match self {
            Lang::En => "en",
            Lang::Ru => "ru",
        }
    }
}

/// All translatable strings
#[allow(dead_code)]
pub struct Translations {
    // Navigation
    pub nav_dashboard: &'static str,
    pub nav_registries: &'static str,

    // Dashboard
    pub dashboard_title: &'static str,
    pub dashboard_subtitle: &'static str,
    pub uptime: &'static str,

    // Stats
    pub stat_downloads: &'static str,
    pub stat_uploads: &'static str,
    pub stat_artifacts: &'static str,
    pub stat_cache_hit: &'static str,
    pub stat_storage: &'static str,

    // Registry cards
    pub active: &'static str,
    pub artifacts: &'static str,
    pub size: &'static str,
    pub downloads: &'static str,
    pub uploads: &'static str,

    // Mount points
    pub mount_points: &'static str,
    pub registry: &'static str,
    pub mount_path: &'static str,
    pub proxy_upstream: &'static str,

    // Activity
    pub recent_activity: &'static str,
    pub last_n_events: &'static str,
    pub time: &'static str,
    pub action: &'static str,
    pub artifact: &'static str,
    pub source: &'static str,
    pub no_activity: &'static str,

    // Relative time
    pub just_now: &'static str,
    pub min_ago: &'static str,
    pub mins_ago: &'static str,
    pub hour_ago: &'static str,
    pub hours_ago: &'static str,
    pub day_ago: &'static str,
    pub days_ago: &'static str,

    // Registry pages
    pub repositories: &'static str,
    pub search_placeholder: &'static str,
    pub no_repos_found: &'static str,
    pub push_first_artifact: &'static str,
    pub name: &'static str,
    pub tags: &'static str,
    pub versions: &'static str,
    pub updated: &'static str,

    // Detail pages
    pub pull_command: &'static str,
    pub install_command: &'static str,
    pub maven_dependency: &'static str,
    pub total: &'static str,
    pub created: &'static str,
    pub published: &'static str,
    pub filename: &'static str,
    pub files: &'static str,

    // Bragging footer
    pub built_for_speed: &'static str,
    pub docker_image: &'static str,
    pub cold_start: &'static str,
    pub memory: &'static str,
    pub registries_count: &'static str,
    pub multi_arch: &'static str,
    pub zero_config: &'static str,
    pub tagline: &'static str,
}

pub fn get_translations(lang: Lang) -> &'static Translations {
    match lang {
        Lang::En => &TRANSLATIONS_EN,
        Lang::Ru => &TRANSLATIONS_RU,
    }
}

pub static TRANSLATIONS_EN: Translations = Translations {
    // Navigation
    nav_dashboard: "Dashboard",
    nav_registries: "Registries",

    // Dashboard
    dashboard_title: "Dashboard",
    dashboard_subtitle: "Overview of all registries",
    uptime: "Uptime",

    // Stats
    stat_downloads: "Downloads",
    stat_uploads: "Uploads",
    stat_artifacts: "Artifacts",
    stat_cache_hit: "Cache Hit",
    stat_storage: "Storage",

    // Registry cards
    active: "ACTIVE",
    artifacts: "Artifacts",
    size: "Size",
    downloads: "Downloads",
    uploads: "Uploads",

    // Mount points
    mount_points: "Mount Points",
    registry: "Registry",
    mount_path: "Mount Path",
    proxy_upstream: "Proxy Upstream",

    // Activity
    recent_activity: "Recent Activity",
    last_n_events: "Last 20 events",
    time: "Time",
    action: "Action",
    artifact: "Artifact",
    source: "Source",
    no_activity: "No recent activity",

    // Relative time
    just_now: "just now",
    min_ago: "min ago",
    mins_ago: "mins ago",
    hour_ago: "hour ago",
    hours_ago: "hours ago",
    day_ago: "day ago",
    days_ago: "days ago",

    // Registry pages
    repositories: "repositories",
    search_placeholder: "Search repositories...",
    no_repos_found: "No repositories found",
    push_first_artifact: "Push your first artifact to see it here",
    name: "Name",
    tags: "Tags",
    versions: "Versions",
    updated: "Updated",

    // Detail pages
    pull_command: "Pull Command",
    install_command: "Install Command",
    maven_dependency: "Maven Dependency",
    total: "total",
    created: "Created",
    published: "Published",
    filename: "Filename",
    files: "files",

    // Bragging footer
    built_for_speed: "Built for speed",
    docker_image: "Docker Image",
    cold_start: "Cold Start",
    memory: "Memory",
    registries_count: "Registries",
    multi_arch: "Multi-arch",
    zero_config: "Zero",
    tagline: "Pure Rust. Single binary. OCI compatible.",
};

pub static TRANSLATIONS_RU: Translations = Translations {
    // Navigation
    nav_dashboard: "Панель",
    nav_registries: "Реестры",

    // Dashboard
    dashboard_title: "Панель управления",
    dashboard_subtitle: "Обзор всех реестров",
    uptime: "Аптайм",

    // Stats
    stat_downloads: "Загрузки",
    stat_uploads: "Публикации",
    stat_artifacts: "Артефакты",
    stat_cache_hit: "Кэш",
    stat_storage: "Хранилище",

    // Registry cards
    active: "АКТИВЕН",
    artifacts: "Артефакты",
    size: "Размер",
    downloads: "Загрузки",
    uploads: "Публикации",

    // Mount points
    mount_points: "Точки монтирования",
    registry: "Реестр",
    mount_path: "Путь",
    proxy_upstream: "Прокси",

    // Activity
    recent_activity: "Последняя активность",
    last_n_events: "Последние 20 событий",
    time: "Время",
    action: "Действие",
    artifact: "Артефакт",
    source: "Источник",
    no_activity: "Нет активности",

    // Relative time
    just_now: "только что",
    min_ago: "мин назад",
    mins_ago: "мин назад",
    hour_ago: "час назад",
    hours_ago: "ч назад",
    day_ago: "день назад",
    days_ago: "дн назад",

    // Registry pages
    repositories: "репозиториев",
    search_placeholder: "Поиск репозиториев...",
    no_repos_found: "Репозитории не найдены",
    push_first_artifact: "Загрузите первый артефакт, чтобы увидеть его здесь",
    name: "Название",
    tags: "Теги",
    versions: "Версии",
    updated: "Обновлено",

    // Detail pages
    pull_command: "Команда загрузки",
    install_command: "Команда установки",
    maven_dependency: "Maven зависимость",
    total: "всего",
    created: "Создан",
    published: "Опубликован",
    filename: "Файл",
    files: "файлов",

    // Bragging footer
    built_for_speed: "Создан для скорости",
    docker_image: "Docker образ",
    cold_start: "Холодный старт",
    memory: "Память",
    registries_count: "Реестров",
    multi_arch: "Мульти-арх",
    zero_config: "Без",
    tagline: "Чистый Rust. Один бинарник. OCI совместимый.",
};