fix tax log

This commit is contained in:
2026-02-19 16:05:59 +03:00
parent 2c820e103a
commit c2a4c8062a
38 changed files with 4414 additions and 40 deletions

View File

@@ -0,0 +1,83 @@
// [DEF:i18n:Module]
//
// @TIER: STANDARD
// @SEMANTICS: i18n, localization, svelte-store, translation
// @PURPOSE: Centralized internationalization management using Svelte stores.
// @LAYER: Infra
// @RELATION: DEPENDS_ON -> locales/ru.json
// @RELATION: DEPENDS_ON -> locales/en.json
//
// @INVARIANT: Locale must be either 'ru' or 'en'.
// @INVARIANT: Persistence is handled via LocalStorage.
// [SECTION: IMPORTS]
import { writable, derived } from 'svelte/store';
import ru from './locales/ru.json';
import en from './locales/en.json';
// [/SECTION: IMPORTS]
const translations = { ru, en };
type Locale = keyof typeof translations;
/**
* @purpose Determines the starting locale.
* @returns {Locale}
*/
const getInitialLocale = (): Locale => {
if (typeof localStorage !== 'undefined') {
const saved = localStorage.getItem('locale');
if (saved === 'ru' || saved === 'en') return saved as Locale;
}
return 'ru';
};
// [DEF:locale:Store]
/**
* @purpose Holds the current active locale string.
* @side_effect Writes to LocalStorage on change.
*/
export const locale = writable<Locale>(getInitialLocale());
if (typeof localStorage !== 'undefined') {
locale.subscribe((val) => localStorage.setItem('locale', val));
}
// [/DEF:locale:Store]
// [DEF:t:Store]
/**
* @purpose Derived store providing the translation dictionary.
* @relation BINDS_TO -> locale
*/
export const t = derived(locale, ($locale) => {
const dictionary = (translations[$locale] || translations.ru) as any;
return dictionary;
});
// [/DEF:t:Store]
// [DEF:_:Function]
/**
* @purpose Get translation by key path.
* @param key - Translation key path (e.g., 'nav.dashboard')
* @returns Translation string or key if not found
*/
export function _(key: string): string {
const currentLocale = getInitialLocale();
const dictionary = (translations[currentLocale] || translations.ru) as any;
// Navigate through nested keys
const keys = key.split('.');
let value: any = dictionary;
for (const k of keys) {
if (value && typeof value === 'object' && k in value) {
value = value[k];
} else {
return key; // Return key if translation not found
}
}
return typeof value === 'string' ? value : key;
}
// [/DEF:_:Function]
// [/DEF:i18n:Module]

View File

@@ -0,0 +1,337 @@
{
"common": {
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"edit": "Edit",
"loading": "Loading...",
"error": "Error",
"success": "Success",
"actions": "Actions",
"search": "Search...",
"logout": "Logout",
"refresh": "Refresh",
"retry": "Retry"
},
"nav": {
"dashboard": "Dashboard",
"dashboards": "Dashboards",
"datasets": "Datasets",
"overview": "Overview",
"all_datasets": "All Datasets",
"storage": "Storage",
"backups": "Backups",
"repositories": "Repositories",
"migration": "Migration",
"git": "Git",
"tasks": "Tasks",
"settings": "Settings",
"tools": "Tools",
"tools_search": "Dataset Search",
"tools_mapper": "Dataset Mapper",
"tools_backups": "Backup Manager",
"tools_debug": "System Debug",
"tools_storage": "File Storage",
"tools_llm": "LLM Tools",
"settings_general": "General Settings",
"settings_connections": "Connections",
"settings_git": "Git Integration",
"settings_environments": "Environments",
"settings_storage": "Storage",
"admin": "Admin",
"admin_users": "User Management",
"admin_roles": "Role Management",
"admin_settings": "ADFS Configuration",
"admin_llm": "LLM Providers"
},
"llm": {
"providers_title": "LLM Providers",
"add_provider": "Add Provider",
"edit_provider": "Edit Provider",
"new_provider": "New Provider",
"name": "Name",
"type": "Type",
"base_url": "Base URL",
"api_key": "API Key",
"default_model": "Default Model",
"active": "Active",
"test": "Test",
"testing": "Testing...",
"save": "Save",
"cancel": "Cancel",
"connection_success": "Connection successful!",
"connection_failed": "Connection failed: {error}",
"no_providers": "No providers configured.",
"doc_preview_title": "Documentation Preview",
"dataset_desc": "Dataset Description",
"column_doc": "Column Documentation",
"apply_doc": "Apply Documentation",
"applying": "Applying..."
},
"settings": {
"title": "Settings",
"language": "Language",
"appearance": "Appearance",
"connections": "Connections",
"environments": "Environments",
"global_title": "Global Settings",
"env_title": "Superset Environments",
"env_warning": "No Superset environments configured. You must add at least one environment to perform backups or migrations.",
"env_add": "Add Environment",
"env_edit": "Edit Environment",
"env_default": "Default Environment",
"env_test": "Test",
"env_delete": "Delete",
"storage_title": "File Storage Configuration",
"storage_root": "Storage Root Path",
"storage_backup_pattern": "Backup Directory Pattern",
"storage_repo_pattern": "Repository Directory Pattern",
"storage_filename_pattern": "Filename Pattern",
"storage_preview": "Path Preview",
"environments": "Superset Environments",
"env_description": "Configure Superset environments for dashboards and datasets.",
"env_add": "Add Environment",
"env_actions": "Actions",
"env_test": "Test",
"env_delete": "Delete",
"connections_description": "Configure database connections for data mapping.",
"llm_description": "Configure LLM providers for dataset documentation.",
"logging": "Logging Configuration",
"logging_description": "Configure logging and task log levels.",
"storage_description": "Configure file storage paths and patterns.",
"save_success": "Settings saved",
"save_failed": "Failed to save settings"
},
"git": {
"management": "Git Management",
"branch": "Branch",
"actions": "Actions",
"sync": "Sync from Superset",
"commit": "Commit Changes",
"pull": "Pull",
"push": "Push",
"deployment": "Deployment",
"deploy": "Deploy to Environment",
"history": "Commit History",
"no_commits": "No commits yet",
"refresh": "Refresh",
"new_branch": "New Branch",
"create": "Create",
"init_repo": "Initialize Repository",
"remote_url": "Remote Repository URL",
"server": "Git Server",
"not_linked": "This dashboard is not yet linked to a Git repository.",
"manage": "Manage Git",
"generate_message": "Generate"
},
"dashboard": {
"search": "Search dashboards...",
"title": "Title",
"last_modified": "Last Modified",
"status": "Status",
"git": "Git",
"showing": "Showing {start} to {end} of {total} dashboards",
"previous": "Previous",
"next": "Next",
"no_dashboards": "No dashboards found in this environment.",
"select_source": "Select a source environment to view dashboards.",
"validate": "Validate",
"validation_started": "Validation started for {title}",
"select_tool": "Select Tool",
"dashboard_validation": "Dashboard Validation",
"dataset_documentation": "Dataset Documentation",
"dashboard_id": "Dashboard ID",
"dataset_id": "Dataset ID",
"environment": "Environment",
"home": "Home",
"llm_provider": "LLM Provider (Optional)",
"use_default": "Use Default",
"screenshot_strategy": "Screenshot Strategy",
"headless_browser": "Headless Browser (Accurate)",
"api_thumbnail": "API Thumbnail (Fast)",
"include_logs": "Include Execution Logs",
"notify_on_failure": "Notify on Failure",
"update_metadata": "Update Metadata Automatically",
"run_task": "Run Task",
"running": "Running...",
"git_status": "Git Status",
"last_task": "Last Task",
"actions": "Actions",
"action_migrate": "Migrate",
"action_backup": "Backup",
"action_commit": "Commit",
"git_status": "Git Status",
"last_task": "Last Task",
"view_task": "View task",
"task_running": "Running...",
"task_done": "Done",
"task_failed": "Failed",
"task_waiting": "Waiting",
"status_synced": "Synced",
"status_diff": "Diff",
"status_synced": "Synced",
"status_diff": "Diff",
"status_error": "Error",
"task_running": "Running...",
"task_done": "Done",
"task_failed": "Failed",
"task_waiting": "Waiting",
"view_task": "View task",
"empty": "No dashboards found"
},
"datasets": {
"empty": "No datasets found",
"table_name": "Table Name",
"schema": "Schema",
"mapped_fields": "Mapped Fields",
"mapped_of_total": "Mapped of total",
"last_task": "Last Task",
"actions": "Actions",
"action_map_columns": "Map Columns",
"view_task": "View task",
"task_running": "Running...",
"task_done": "Done",
"task_failed": "Failed",
"task_waiting": "Waiting"
},
"tasks": {
"management": "Task Management",
"run_backup": "Run Backup",
"recent": "Recent Tasks",
"details_logs": "Task Details & Logs",
"select_task": "Select a task to view logs and details",
"loading": "Loading tasks...",
"no_tasks": "No tasks found.",
"started": "Started {time}",
"logs_title": "Task Logs",
"refresh": "Refresh",
"no_logs": "No logs available.",
"manual_backup": "Run Manual Backup",
"target_env": "Target Environment",
"select_env": "-- Select Environment --",
"start_backup": "Start Backup",
"backup_schedule": "Automatic Backup Schedule",
"schedule_enabled": "Enabled",
"cron_label": "Cron Expression",
"cron_hint": "e.g., 0 0 * * * for daily at midnight",
"footer_text": "Task continues running in background"
},
"connections": {
"management": "Connection Management",
"add_new": "Add New Connection",
"name": "Connection Name",
"host": "Host",
"port": "Port",
"db_name": "Database Name",
"user": "Username",
"pass": "Password",
"create": "Create Connection",
"saved": "Saved Connections",
"no_saved": "No connections saved yet.",
"delete": "Delete"
},
"storage": {
"management": "File Storage Management",
"refresh": "Refresh",
"refreshing": "Refreshing...",
"backups": "Backups",
"repositories": "Repositories",
"root": "Root",
"no_files": "No files found.",
"upload_title": "Upload File",
"target_category": "Target Category",
"upload_button": "Upload a file",
"drag_drop": "or drag and drop",
"supported_formats": "ZIP, YAML, JSON up to 50MB",
"uploading": "Uploading...",
"table": {
"name": "Name",
"category": "Category",
"size": "Size",
"created_at": "Created At",
"actions": "Actions",
"download": "Download",
"go_to_storage": "Go to storage",
"delete": "Delete"
},
"messages": {
"load_failed": "Failed to load files: {error}",
"delete_confirm": "Are you sure you want to delete {name}?",
"delete_success": "{name} deleted.",
"delete_failed": "Delete failed: {error}",
"upload_success": "File {name} uploaded successfully.",
"upload_failed": "Upload failed: {error}"
}
},
"mapper": {
"title": "Dataset Column Mapper",
"environment": "Environment",
"select_env": "-- Select Environment --",
"dataset_id": "Dataset ID",
"source": "Mapping Source",
"source_postgres": "PostgreSQL",
"source_excel": "Excel",
"connection": "Saved Connection",
"select_connection": "-- Select Connection --",
"table_name": "Table Name",
"table_schema": "Table Schema",
"excel_path": "Excel File Path",
"run": "Run Mapper",
"starting": "Starting...",
"errors": {
"fetch_failed": "Failed to fetch data",
"required_fields": "Please fill in required fields",
"postgres_required": "Connection and Table Name are required for postgres source",
"excel_required": "Excel path is required for excel source"
},
"success": {
"started": "Mapper task started"
},
"auto_document": "Auto-Document"
},
"admin": {
"users": {
"title": "User Management",
"create": "Create User",
"username": "Username",
"email": "Email",
"source": "Source",
"roles": "Roles",
"status": "Status",
"active": "Active",
"inactive": "Inactive",
"loading": "Loading users...",
"modal_title": "Create New User",
"modal_edit_title": "Edit User",
"password": "Password",
"password_hint": "Leave blank to keep current password.",
"roles_hint": "Hold Ctrl/Cmd to select multiple roles.",
"confirm_delete": "Are you sure you want to delete user {username}?"
},
"roles": {
"title": "Role Management",
"create": "Create Role",
"name": "Role Name",
"description": "Description",
"permissions": "Permissions",
"loading": "Loading roles...",
"no_roles": "No roles found.",
"modal_create_title": "Create New Role",
"modal_edit_title": "Edit Role",
"permissions_hint": "Select permissions for this role.",
"confirm_delete": "Are you sure you want to delete role {name}?"
},
"settings": {
"title": "ADFS Configuration",
"add_mapping": "Add Mapping",
"ad_group": "AD Group Name",
"local_role": "Local Role",
"no_mappings": "No AD group mappings configured.",
"modal_title": "Add AD Group Mapping",
"ad_group_dn": "AD Group Distinguished Name",
"ad_group_hint": "The full DN of the Active Directory group.",
"local_role_select": "Local System Role",
"select_role": "Select a role"
}
}
}

View File

@@ -0,0 +1,336 @@
{
"common": {
"save": "Сохранить",
"cancel": "Отмена",
"delete": "Удалить",
"edit": "Редактировать",
"loading": "Загрузка...",
"error": "Ошибка",
"success": "Успешно",
"actions": "Действия",
"search": "Поиск...",
"logout": "Выйти",
"refresh": "Обновить",
"retry": "Повторить"
},
"nav": {
"dashboard": "Панель управления",
"dashboards": "Дашборды",
"datasets": "Датасеты",
"overview": "Обзор",
"all_datasets": "Все датасеты",
"storage": "Хранилище",
"backups": "Бэкапы",
"repositories": "Репозитории",
"migration": "Миграция",
"git": "Git",
"tasks": "Задачи",
"settings": "Настройки",
"tools": "Инструменты",
"tools_search": "Поиск датасетов",
"tools_mapper": "Маппер колонок",
"tools_backups": "Управление бэкапами",
"tools_debug": "Диагностика системы",
"tools_storage": "Хранилище файлов",
"tools_llm": "Инструменты LLM",
"settings_general": "Общие настройки",
"settings_connections": "Подключения",
"settings_git": "Интеграция Git",
"settings_environments": "Окружения",
"settings_storage": "Хранилище",
"admin": "Админ",
"admin_users": "Управление пользователями",
"admin_roles": "Управление ролями",
"admin_settings": "Настройка ADFS",
"admin_llm": "Провайдеры LLM"
},
"llm": {
"providers_title": "Провайдеры LLM",
"add_provider": "Добавить провайдера",
"edit_provider": "Редактировать провайдера",
"new_provider": "Новый провайдер",
"name": "Имя",
"type": "Тип",
"base_url": "Base URL",
"api_key": "API Key",
"default_model": "Модель по умолчанию",
"active": "Активен",
"test": "Тест",
"testing": "Тестирование...",
"save": "Сохранить",
"cancel": "Отмена",
"connection_success": "Подключение успешно!",
"connection_failed": "Ошибка подключения: {error}",
"no_providers": "Провайдеры не настроены.",
"doc_preview_title": "Предпросмотр документации",
"dataset_desc": "Описание датасета",
"column_doc": "Документация колонок",
"apply_doc": "Применить документацию",
"applying": "Применение..."
},
"settings": {
"title": "Настройки",
"language": "Язык",
"appearance": "Внешний вид",
"connections": "Подключения",
"environments": "Окружения",
"global_title": "Общие настройки",
"env_title": "Окружения Superset",
"env_warning": "Окружения Superset не настроены. Необходимо добавить хотя бы одно окружение для выполнения бэкапов или миграций.",
"env_add": "Добавить окружение",
"env_edit": "Редактировать окружение",
"env_default": "Окружение по умолчанию",
"env_test": "Тест",
"env_delete": "Удалить",
"storage_title": "Настройка хранилища файлов",
"storage_root": "Корневой путь хранилища",
"storage_backup_pattern": "Шаблон директории бэкапов",
"storage_repo_pattern": "Шаблон директории репозиториев",
"storage_filename_pattern": "Шаблон имени файла",
"storage_preview": "Предпросмотр пути",
"environments": "Окружения Superset",
"env_description": "Настройка окружений Superset для дашбордов и датасетов.",
"env_add": "Добавить окружение",
"env_actions": "Действия",
"env_test": "Тест",
"env_delete": "Удалить",
"connections_description": "Настройка подключений к базам данных для маппинга.",
"llm_description": "Настройка LLM провайдеров для документирования датасетов.",
"logging": "Настройка логирования",
"logging_description": "Настройка уровней логирования задач.",
"storage_description": "Настройка путей и шаблонов файлового хранилища.",
"save_success": "Настройки сохранены",
"save_failed": "Ошибка сохранения настроек"
},
"git": {
"management": "Управление Git",
"branch": "Ветка",
"actions": "Действия",
"sync": "Синхронизировать из Superset",
"commit": "Зафиксировать изменения",
"pull": "Pull (Получить)",
"push": "Push (Отправить)",
"deployment": "Развертывание",
"deploy": "Развернуть в окружение",
"history": "История коммитов",
"no_commits": "Коммитов пока нет",
"refresh": "Обновить",
"new_branch": "Новая ветка",
"create": "Создать",
"init_repo": "Инициализировать репозиторий",
"remote_url": "URL удаленного репозитория",
"server": "Git-сервер",
"not_linked": "Этот дашборд еще не привязан к Git-репозиторию.",
"manage": "Управление Git",
"generate_message": "Сгенерировать"
},
"dashboard": {
"search": "Поиск дашбордов...",
"title": "Заголовок",
"last_modified": "Последнее изменение",
"status": "Статус",
"git": "Git",
"showing": "Показано с {start} по {end} из {total} дашбордов",
"previous": "Назад",
"next": "Вперед",
"no_dashboards": "Дашборды не найдены в этом окружении.",
"select_source": "Выберите исходное окружение для просмотра дашбордов.",
"validate": "Проверить",
"validation_started": "Проверка запущена для {title}",
"select_tool": "Выберите инструмент",
"dashboard_validation": "Проверка дашбордов",
"dataset_documentation": "Документирование датасетов",
"dashboard_id": "ID дашборда",
"dataset_id": "ID датасета",
"environment": "Окружение",
"llm_provider": "LLM провайдер (опционально)",
"use_default": "По умолчанию",
"screenshot_strategy": "Стратегия скриншотов",
"headless_browser": "Headless браузер (точно)",
"api_thumbnail": "API Thumbnail (быстро)",
"include_logs": "Включить логи выполнения",
"notify_on_failure": "Уведомить при ошибке",
"update_metadata": "Обновлять метаданные автоматически",
"run_task": "Запустить задачу",
"running": "Запуск...",
"git_status": "Статус Git",
"last_task": "Последняя задача",
"actions": "Действия",
"action_migrate": "Мигрировать",
"action_backup": "Создать бэкап",
"action_commit": "Зафиксировать",
"git_status": "Статус Git",
"last_task": "Последняя задача",
"view_task": "Просмотреть задачу",
"task_running": "Выполняется...",
"task_done": "Готово",
"task_failed": "Ошибка",
"task_waiting": "Ожидание",
"status_synced": "Синхронизировано",
"status_diff": "Различия",
"status_synced": "Синхронизировано",
"status_diff": "Различия",
"status_error": "Ошибка",
"task_running": "Выполняется...",
"task_done": "Готово",
"task_failed": "Ошибка",
"task_waiting": "Ожидание",
"view_task": "Просмотреть задачу",
"empty": "Дашборды не найдены"
},
"datasets": {
"empty": "Датасеты не найдены",
"table_name": "Имя таблицы",
"schema": "Схема",
"mapped_fields": "Отображенные колонки",
"mapped_of_total": "Отображено из всего",
"last_task": "Последняя задача",
"actions": "Действия",
"action_map_columns": "Отобразить колонки",
"view_task": "Просмотреть задачу",
"task_running": "Выполняется...",
"task_done": "Готово",
"task_failed": "Ошибка",
"task_waiting": "Ожидание"
},
"tasks": {
"management": "Управление задачами",
"run_backup": "Запустить бэкап",
"recent": "Последние задачи",
"details_logs": "Детали и логи задачи",
"select_task": "Выберите задачу для просмотра логов и деталей",
"loading": "Загрузка задач...",
"no_tasks": "Задачи не найдены.",
"started": "Запущено {time}",
"logs_title": "Логи задачи",
"refresh": "Обновить",
"no_logs": "Логи отсутствуют.",
"manual_backup": "Ручной бэкап",
"target_env": "Целевое окружение",
"select_env": "-- Выберите окружение --",
"start_backup": "Начать бэкап",
"backup_schedule": "Расписание автоматических бэкапов",
"schedule_enabled": "Включено",
"cron_label": "Cron-выражение",
"cron_hint": "например, 0 0 * * * для ежедневного запуска в полночь",
"footer_text": "Задача продолжает работать в фоновом режиме"
},
"connections": {
"management": "Управление подключениями",
"add_new": "Добавить новое подключение",
"name": "Название подключения",
"host": "Хост",
"port": "Порт",
"db_name": "Название БД",
"user": "Имя пользователя",
"pass": "Пароль",
"create": "Создать подключение",
"saved": "Сохраненные подключения",
"no_saved": "Нет сохраненных подключений.",
"delete": "Удалить"
},
"storage": {
"management": "Управление хранилищем файлов",
"refresh": "Обновить",
"refreshing": "Обновление...",
"backups": "Бэкапы",
"repositories": "Репозитории",
"root": "Корень",
"no_files": "Файлы не найдены.",
"upload_title": "Загрузить файл",
"target_category": "Целевая категория",
"upload_button": "Загрузить файл",
"drag_drop": "или перетащите сюда",
"supported_formats": "ZIP, YAML, JSON до 50МБ",
"uploading": "Загрузка...",
"table": {
"name": "Имя",
"category": "Категория",
"size": "Размер",
"created_at": "Дата создания",
"actions": "Действия",
"download": "Скачать",
"go_to_storage": "Перейти к хранилищу",
"delete": "Удалить"
},
"messages": {
"load_failed": "Ошибка загрузки файлов: {error}",
"delete_confirm": "Вы уверены, что хотите удалить {name}?",
"delete_success": "{name} удален.",
"delete_failed": "Ошибка удаления: {error}",
"upload_success": "Файл {name} успешно загружен.",
"upload_failed": "Ошибка загрузки: {error}"
}
},
"mapper": {
"title": "Маппер колонок датасета",
"environment": "Окружение",
"select_env": "-- Выберите окружение --",
"dataset_id": "ID датасета",
"source": "Источник маппинга",
"source_postgres": "PostgreSQL",
"source_excel": "Excel",
"connection": "Сохраненное подключение",
"select_connection": "-- Выберите подключение --",
"table_name": "Имя таблицы",
"table_schema": "Схема таблицы",
"excel_path": "Путь к файлу Excel",
"run": "Запустить маппер",
"starting": "Запуск...",
"errors": {
"fetch_failed": "Не удалось загрузить данные",
"required_fields": "Пожалуйста, заполните обязательные поля",
"postgres_required": "Подключение и имя таблицы обязательны для источника PostgreSQL",
"excel_required": "Путь к Excel обязателен для источника Excel"
},
"success": {
"started": "Задача маппинга запущена"
},
"auto_document": "Авто-документирование"
},
"admin": {
"users": {
"title": "Управление пользователями",
"create": "Создать пользователя",
"username": "Имя пользователя",
"email": "Email",
"source": "Источник",
"roles": "Роли",
"status": "Статус",
"active": "Активен",
"inactive": "Неактивен",
"loading": "Загрузка пользователей...",
"modal_title": "Создать нового пользователя",
"modal_edit_title": "Редактировать пользователя",
"password": "Пароль",
"password_hint": "Оставьте пустым, чтобы не менять пароль.",
"roles_hint": "Удерживайте Ctrl/Cmd для выбора нескольких ролей.",
"confirm_delete": "Вы уверены, что хотите удалить пользователя {username}?"
},
"roles": {
"title": "Управление ролями",
"create": "Создать роль",
"name": "Имя роли",
"description": "Описание",
"permissions": "Права доступа",
"loading": "Загрузка ролей...",
"no_roles": "Роли не найдены.",
"modal_create_title": "Создать новую роль",
"modal_edit_title": "Редактировать роль",
"permissions_hint": "Выберите права для этой роли.",
"confirm_delete": "Вы уверены, что хотите удалить роль {name}?"
},
"settings": {
"title": "Настройка ADFS",
"add_mapping": "Добавить маппинг",
"ad_group": "Имя группы AD",
"local_role": "Локальная роль",
"no_mappings": "Маппинги групп AD не настроены.",
"modal_title": "Добавить маппинг группы AD",
"ad_group_dn": "Distinguished Name группы AD",
"ad_group_hint": "Полный DN группы Active Directory.",
"local_role_select": "Локальная системная роль",
"select_role": "Выберите роль"
}
}
}