Files
notify-bridge/frontend/src/lib/i18n/ru.json
T
alexei.dolgolyov ba199f24bd feat: deferred dispatch, release-check provider, settings polish
- Defer quiet-hours dispatches into new deferred_dispatch table; drain
  job + periodic catch-up scan re-fire at window end with coalescing on
  (link, event_type, collection_id).
- Add ON DELETE SET NULL migration on event_log_id and partial unique
  index on (link_id, collection_id, event_type) WHERE status='pending'.
- Add release-check provider abstraction (Gitea/GitHub) with SSRF-safe
  URL validation, settings UI cassette, and scheduled polling.
- Replace importlib-only version lookup with version.py helper that
  prefers the higher of installed metadata vs source pyproject so stale
  editable dev installs stop misreporting.
- Aurora frontend polish: MetaStrip component, ReleaseCassette,
  EventDetailModal expansion, and i18n additions.
2026-05-12 02:58:07 +03:00

1529 lines
92 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"app": {
"name": "Notify Bridge",
"tagline": "Уведомления о сервисах"
},
"crumbs": {
"routingNotification": "Маршрутизация · Уведомления",
"routingCommands": "Маршрутизация · Команды",
"routingTargets": "Маршрутизация · Цели",
"routingAutomation": "Маршрутизация · Автоматизация",
"operatorsBots": "Операторы · Боты",
"systemAccess": "Система · Доступ",
"systemConfiguration": "Система · Настройки",
"systemMaintenance": "Система · Обслуживание",
"serviceConnections": "Сервис · Подключения"
},
"nav": {
"sectionOverview": "Обзор",
"sectionRouting": "Маршрутизация",
"sectionOperators": "Операторы",
"sectionSystem": "Система",
"dashboard": "Главная",
"providers": "Провайдеры",
"notificationTrackers": "Трекеры увед.",
"trackingConfigs": "Отслеживание",
"templateConfigs": "Шаблоны",
"telegramBots": "Боты",
"targets": "Получатели",
"commandConfigs": "Конф. команд",
"commandTrackers": "Трекеры команд",
"cmdTemplateConfigs": "Шаблоны команд",
"users": "Пользователи",
"settings": "Настройки",
"backup": "Бэкап",
"logout": "Выход",
"notification": "Уведомления",
"commands": "Команды",
"bots": "Боты",
"trackers": "Трекеры",
"configs": "Настройки",
"templates": "Шаблоны",
"telegram": "Telegram",
"email": "Email",
"matrix": "Matrix",
"common": "Общие",
"targetTelegram": "Telegram",
"targetWebhook": "Webhook",
"targetEmail": "Email",
"targetDiscord": "Discord",
"targetSlack": "Slack",
"targetNtfy": "ntfy",
"targetMatrix": "Matrix",
"targetBroadcast": "Рассылка",
"automation": "Автоматизация",
"actions": "Действия",
"more": "Ещё"
},
"auth": {
"signIn": "Войти",
"signInTitle": "Вход в аккаунт",
"signingIn": "Вход...",
"username": "Имя пользователя",
"password": "Пароль",
"confirmPassword": "Подтвердите пароль",
"setupTitle": "Добро пожаловать",
"setupDescription": "Создайте учётную запись администратора",
"createAccount": "Создать аккаунт",
"creatingAccount": "Создание...",
"passwordMismatch": "Пароли не совпадают",
"passwordTooShort": "Пароль должен быть не менее 8 символов",
"or": "или",
"loginFailed": "Ошибка входа",
"setupFailed": "Ошибка настройки",
"backendUnreachable": "Не удалось подключиться к серверу. Убедитесь, что он запущен, и повторите попытку."
},
"dashboard": {
"title": "Главная",
"description": "Обзор настроек Notify Bridge",
"providers": "Провайдеры",
"activeTrackers": "Активные трекеры",
"targets": "Получатели",
"recentEvents": "События",
"clearEvents": "Очистить",
"confirmClearEvents": "Удалить все записи журнала событий? Это действие нельзя отменить.",
"chart": "График событий",
"noEvents": "Событий пока нет. Создайте трекер для отслеживания.",
"loading": "Загрузка...",
"justNow": "только что",
"minutesAgo": "{n} мин назад",
"hoursAgo": "{n} ч назад",
"daysAgo": "{n} д назад",
"assetsAdded": "добавлены файлы",
"assetsRemoved": "удалены файлы",
"collectionRenamed": "альбом переименован",
"collectionDeleted": "альбом удалён",
"sharingChanged": "изменение доступа",
"scheduledMessage": "запланированное сообщение",
"actionSuccess": "действие выполнено",
"actionPartial": "действие частично",
"actionFailed": "действие провалено",
"commandHandled": "команда обработана",
"commandRateLimited": "ограничение частоты",
"commandFailed": "команда упала",
"autoRefreshTitle": "Интервал авто-обновления списка событий",
"refreshOff": "Выкл",
"refresh10s": "10с",
"refresh30s": "30с",
"refresh60s": "1м",
"refresh5m": "5м",
"searchEvents": "Поиск событий...",
"allEvents": "Все события",
"filterAssetsAdded": "Добавление файлов",
"filterAssetsRemoved": "Удаление файлов",
"filterRenamed": "Переименование",
"filterDeleted": "Удаление",
"filterSharingChanged": "Изменение доступа",
"filterActionSuccess": "Действие выполнено",
"filterActionPartial": "Действие частично",
"filterActionFailed": "Действие провалено",
"filterCommandHandled": "Команда обработана",
"filterCommandRateLimited": "Ограничение частоты",
"filterCommandFailed": "Команда упала",
"allProviders": "Все провайдеры",
"newestFirst": "Сначала новые",
"oldestFirst": "Сначала старые",
"loadingEvents": "Загрузка событий...",
"heldUntil": "ожидает до",
"deferredTitle": "Тихий режим задержал уведомление; оно будет отправлено после окончания окна.",
"deliveredLate": "доставлено позже",
"deliveredLateTitle": "Уведомление отправлено после окончания тихих часов.",
"deferredThenDropped": "отброшено после задержки",
"deferredThenDroppedTitle": "Задержано тихими часами, затем отброшено — цель или связь были удалены до окончания окна.",
"deferredThenFailed": "ошибка после задержки",
"suppressedQuietHours": "подавлено (тихие часы)",
"suppressedNondeferrableTitle": "Событие по расписанию подавлено тихими часами. Запланированные/периодические/воспоминания отбрасываются, а не откладываются.",
"asset": "файл",
"assets": "файлов",
"eventActivity": "Активность событий",
"last14days": "Последние 14 дней",
"event": "событие",
"events": "событий",
"noChartData": "Нет данных о событиях",
"live": "В эфире",
"attention": "Внимание",
"heroPrefix": "Сегодня",
"heroEmphasis": "всё",
"heroSuffix": "идёт по плану.",
"heroSummary": "{providers} провайдеров на связи, {armed} из {total} трекеров активны, {throughput} событий доставлено в {targets} каналов за сутки.",
"throughput24h": "пропускная способность · 24ч",
"eventsShort": "событий",
"armedShort": "активны",
"providersShort": "провайдеров",
"targetsShort": "каналов",
"trackersShort": "трекеров",
"streamTitle": "Поток",
"streamEmphasis": "сигналов",
"eventsLabel": "событий",
"onWatchTitle": "На",
"onWatchEmphasis": "слежении",
"noProviders": "Пока нет провайдеров.",
"addProvider": "Добавить",
"addProviderHint": "Подключите сервис, чтобы начать слежение",
"pulseTitle": "Пульс",
"pulseEmphasis": "· 14 дней",
"pulseSub": "События по дням",
"wiresTitle": "Активные",
"wiresEmphasis": "линии",
"wiresSub": "маршрутов",
"composeTitle": "Выберите источник, выберите канал.",
"composeEmphasis": "Свяжите.",
"composeSub": "Проведите путь от провайдера → трекер → шаблон → цель. Или вставьте webhook URL — остальное мы определим сами.",
"viewTrackers": "К трекерам",
"newTracker": "Новый трекер",
"eventsTotal": "Событий"
},
"events": {
"detailTitle": "Детали события",
"bot": "Бот",
"chat": "Чат",
"issuer": "Отправитель",
"commandTracker": "Командный трекер",
"tracker": "Трекер",
"action": "Действие",
"provider": "Провайдер",
"assetsCount": "Файлов",
"openProvider": "Открыть провайдера",
"openBot": "Открыть бота",
"openCommandTracker": "Открыть командный трекер",
"openAction": "Открыть действие",
"openTracker": "Открыть трекер",
"rawDetails": "Сырые данные",
"lifecycle": {
"heldTitle": "Задержано тихими часами",
"heldUntil": "Будет отправлено в",
"heldFor": "Задержано на",
"heldHint": "Уведомления в тихие часы ждут окончания окна. Пары добавление/удаление отменяются автоматически.",
"inPrefix": "через",
"deliveredLateTitle": "Доставлено после тихих часов",
"originalEvent": "Исходное событие",
"droppedTitle": "Отброшено после задержки",
"failedTitle": "Ошибка после задержки",
"reason": "Причина",
"suppressedTitle": "Подавлено тихими часами",
"suppressedHint": "Запланированные, периодические и воспоминания привязаны ко времени — они отбрасываются, а не откладываются, чтобы «доброе утро» не пришло днём."
}
},
"providers": {
"title": "Сервисные",
"titleEmphasis": "провайдеры",
"description": "Подключения к внешним сервисам и вебхукам. Каждый провайдер кормит трекеры событиями, которые рассылаются по вашим каналам.",
"typeSingular": "тип",
"typePlural": "типов",
"addProvider": "Добавить провайдер",
"cancel": "Отмена",
"type": "Тип провайдера",
"name": "Название",
"url": "URL провайдера",
"urlPlaceholder": "http://provider:2283",
"apiKey": "API ключ",
"apiKeyKeep": "API ключ (оставьте пустым, чтобы сохранить текущий)",
"connecting": "Подключение...",
"noProviders": "Провайдеры не настроены.",
"delete": "Удалить",
"confirmDelete": "Удалить этот провайдер?",
"online": "В сети",
"offline": "Не в сети",
"checking": "Проверка...",
"typeImmich": "Immich",
"typeGitea": "Gitea",
"typePlanka": "Planka",
"typeScheduler": "Планировщик",
"typeNut": "NUT (ИБП)",
"typeGooglePhotos": "Google Фото",
"typeWebhook": "Универсальный вебхук",
"loadError": "Не удалось загрузить провайдеры.",
"externalDomain": "Внешний домен",
"optional": "необязательно",
"urlApiKeyRequired": "URL и API ключ обязательны",
"externalDomainHint": "Публичный URL для ссылок в уведомлениях. По умолчанию используется URL сервера.",
"webhookSecret": "Секрет вебхука",
"webhookSecretKeep": "Секрет вебхука (оставьте пустым для сохранения текущего)",
"webhookSecretHint": "Общий секрет для проверки HMAC-SHA256 подписи. Укажите тот же секрет в настройках вебхука Gitea.",
"plankaWebhookSecretHint": "Bearer-токен для аутентификации вебхуков. Укажите тот же токен как WEBHOOK_ACCESS_TOKEN в Planka.",
"plankaApiKeyHint": "Необязательно. Нужен для проверки подключения и получения списка досок.",
"plankaWebhookUrlHint": "Укажите этот URL в конфигурации Planka (относительно хоста bridge).",
"authMode": "Режим аутентификации",
"authModeHint": "Выберите hmac_sha256, bearer_token или none",
"authNone": "Без аутентификации",
"authBearer": "Bearer Token",
"authHmac": "HMAC-SHA256",
"genericWebhookSecretHint": "Секрет для HMAC-SHA256 или Bearer token аутентификации. Оставьте пустым для режима без аутентификации.",
"maxStoredPayloads": "Макс. сохранённых запросов",
"maxStoredPayloadsHint": "Количество сохраняемых запросов для отладки (0 = отключено, макс. 100)",
"webhookSecretRequired": "Секрет вебхука обязателен",
"apiToken": "API токен",
"apiTokenHint": "Необязательно. Нужен для проверки подключения и получения списка репозиториев.",
"webhookUrl": "URL вебхука",
"webhookUrlHint": "Укажите этот URL в настройках вебхука Gitea. Полный URL показывается, если в настройках задан внешний адрес; иначе путь указан относительно хоста bridge.",
"webhookUrlCopyTitle": "Нажмите, чтобы скопировать",
"nutHost": "Хост NUT-сервера",
"nutHostPlaceholder": "192.168.1.100 или ups.local",
"nutPort": "Порт NUT-сервера",
"nutUsername": "Имя пользователя",
"nutPassword": "Пароль",
"nutUsernameHint": "Необязательно — только если upsd требует аутентификации",
"nutPasswordHint": "Необязательно — пароль пользователя upsd",
"gpClientId": "OAuth Client ID",
"gpClientSecret": "OAuth Client Secret",
"gpClientSecretKeep": "OAuth Client Secret (оставьте пустым для сохранения текущего)",
"gpRefreshToken": "Refresh Token",
"gpRefreshTokenKeep": "Refresh Token (оставьте пустым для сохранения текущего)",
"gpRefreshTokenHint": "Получите через Google OAuth Playground (developers.google.com/oauthplayground) с областью Photos Library API.",
"gpAllFieldsRequired": "Client ID, Client Secret и Refresh Token обязательны",
"storePayloads": "Сохранять входящие данные",
"storePayloadsHint": "Сохранять тела недавних вебхук-запросов для отладки",
"maxStoredPayloads": "Макс. сохранённых запросов",
"maxStoredPayloadsHint": "Количество сохраняемых запросов (1-100)",
"testAndSave": "Проверить и сохранить",
"saveWithoutTest": "Сохранить без проверки",
"selectType": "Выберите тип провайдера",
"testFailed": "Ошибка проверки подключения"
},
"webhookLogs": {
"title": "Последние запросы",
"empty": "Записей пока нет",
"clear": "Очистить историю",
"confirmClear": "Очистить все сохранённые запросы для этого провайдера?",
"statusMatched": "Совпадение",
"statusUnmatched": "Не совпало",
"statusError": "Ошибка",
"headers": "Заголовки",
"body": "Тело запроса",
"extractedFields": "Извлечённые поля",
"errorMessage": "Ошибка",
"cleared": "История запросов очищена"
},
"notificationTracker": {
"titleEmphasis": "трекеры",
"armed": "активны",
"paused": "на паузе",
"title": "Трекеры уведомлений",
"description": "Отслеживание изменений в альбомах",
"newTracker": "Новый трекер",
"cancel": "Отмена",
"name": "Название",
"namePlaceholder": "Трекер семейных фото",
"server": "Провайдер",
"selectServer": "Выберите провайдер...",
"albums": "Альбомы",
"selectAlbums": "Выберите альбомы...",
"repositories": "Репозитории",
"selectRepositories": "Выберите репозитории...",
"userAllowlist": "Только от пользователей",
"userBlocklist": "Исключить пользователей",
"selectUsers": "Выберите пользователей...",
"boards": "Доски",
"selectBoards": "Выберите доски...",
"upsDevices": "ИБП устройства",
"selectUpsDevices": "Выберите ИБП...",
"eventTypes": "Типы событий",
"notificationTargets": "Получатели уведомлений",
"scanInterval": "Интервал проверки (секунды)",
"scheduleType": "Расписание",
"intervalMode": "Интервал",
"cronMode": "Cron выражение",
"cronExpression": "Cron выражение",
"cronHint": "Стандартный 5-полевой cron: минута час день месяц день_недели. Пример: 0 9 * * 1-5 (будни в 9:00)",
"customVariables": "Пользовательские переменные",
"customVariablesHint": "Определите пары ключ-значение, доступные в шаблонах как {{ ключ }}.",
"addVariable": "Добавить переменную",
"createTracker": "Создать трекер",
"noTrackers": "Трекеров пока нет. Сначала добавьте провайдер, затем создайте трекер.",
"active": "Активен",
"paused": "Приостановлен",
"pause": "Пауза",
"resume": "Возобновить",
"delete": "Удалить",
"confirmDelete": "Удалить этот трекер?",
"albums_count": "альбом(ов)",
"repos_count": "репозиторий(ев)",
"boards_count": "доска(ок)",
"devices_count": "устройство(в)",
"collections_count": "коллекция(й)",
"every": "каждые",
"trackImages": "Отслеживать фото",
"trackVideos": "Отслеживать видео",
"favoritesOnly": "Только избранные",
"includePeople": "Включать людей в уведомления",
"includeAssetDetails": "Включать детали файлов",
"maxAssetsToShow": "Макс. файлов в уведомлении",
"sortBy": "Сортировка",
"sortOrder": "Порядок",
"sortNone": "Исходный порядок",
"sortDate": "Дата",
"sortRating": "Рейтинг",
"sortName": "Имя",
"sortRandom": "Случайный",
"ascending": "По возрастанию",
"descending": "По убыванию",
"quietHoursStart": "Тихие часы начало",
"quietHoursEnd": "Тихие часы конец",
"adaptiveMaxSkip": "Предел адаптивного опроса",
"adaptiveMaxSkipPlaceholder": "Выкл. (пусто или 0)",
"defaultTrackingConfig": "Конфигурация отслеживания по умолчанию",
"defaultTemplateConfig": "Шаблон уведомлений по умолчанию",
"linkedTargets": "получатели",
"noLinkedTargets": "Нет привязанных получателей. Добавьте получателя ниже.",
"addTarget": "Добавить получателя",
"selectTarget": "Выберите получателя...",
"alreadyLinked": "Уже привязан",
"testBasic": "Отправить тестовое сообщение",
"testPeriodic": "Тест периодической сводки",
"testScheduled": "Тест запланированных фото",
"testMemory": "Тест воспоминаний",
"testDisabledHint": "Сначала включите эту функцию в привязанной конфигурации отслеживания.",
"checkingLinks": "Проверка ссылок...",
"featureDiscovery": "Периодические сводки, запланированные подборки, воспоминания и тихие часы настраиваются в привязанной конфигурации отслеживания.",
"openTrackingConfig": "Открыть конфигурацию отслеживания",
"openTemplateConfig": "Открыть конфигурацию шаблона",
"linkReplace": "Пересоздать",
"linkReplacing": "Пересоздание...",
"linkReplaceFailed": "Не удалось пересоздать ссылку для «{name}»",
"linkPasswordProtectedNote": "Получатели в Telegram не смогут открыть защищённую паролем ссылку без пароля. Снимите пароль в Immich или пересоздайте ссылку.",
"missingLinksTitle": "Альбомы без публичных ссылок",
"missingLinksDesc": "У следующих альбомов нет публичных ссылок. Без ссылок получатели уведомлений не смогут просматривать фото.",
"expired": "Истёк",
"passwordProtected": "Защищён паролем",
"noLink": "Нет ссылки",
"saveWithoutLinks": "Сохранить без ссылок",
"createLinks": "Создать {count} ссылку(и)",
"linksNote": "Вы также можете создать ссылки вручную в Immich.",
"createdLinks": "Создано публичных ссылок: {count}"
},
"templates": {
"title": "Шаблоны",
"description": "Шаблоны сообщений Jinja2 для уведомлений",
"newTemplate": "Новый шаблон",
"cancel": "Отмена",
"name": "Название",
"body": "Текст шаблона (Jinja2)",
"variables": "Переменные",
"preview": "Предпросмотр",
"edit": "Редактировать",
"delete": "Удалить",
"confirmDelete": "Удалить этот шаблон?",
"create": "Создать шаблон",
"update": "Обновить шаблон",
"noTemplates": "Шаблонов пока нет. Без шаблона будет использован шаблон по умолчанию.",
"eventType": "Тип события",
"allEvents": "Все события",
"assetsAdded": "Добавлены файлы",
"assetsRemoved": "Удалены файлы",
"albumRenamed": "Альбом переименован",
"albumDeleted": "Альбом удалён"
},
"targets": {
"titleEmphasis": "канал",
"titleEmphasisAll": "каналы",
"receiver": "получатель",
"receivers": "получателей",
"channelsCount": "каналов",
"title": "Получатели",
"description": "Адреса доставки уведомлений",
"descTelegram": "Чаты Telegram для доставки уведомлений",
"descWebhook": "HTTP вебхуки для доставки уведомлений",
"descEmail": "Email-адреса для доставки уведомлений",
"descDiscord": "Вебхуки каналов Discord для уведомлений",
"descSlack": "Вебхуки каналов Slack для уведомлений",
"descNtfy": "Топики ntfy для push-уведомлений",
"descMatrix": "Комнаты Matrix для доставки уведомлений",
"descBroadcast": "Отправка сразу в несколько целей",
"childTargets": "цель(ей)",
"selectChildTargets": "Выберите дочерние цели",
"noChildTargets": "Дочерние цели не настроены.",
"noChildTargetsAvailable": "Сначала создайте другие цели, затем добавьте их сюда.",
"addTarget": "Добавить получателя",
"cancel": "Отмена",
"type": "Тип",
"name": "Название",
"namePlaceholder": "Мои уведомления",
"botToken": "Токен бота",
"chatId": "ID чата",
"webhookUrl": "URL вебхука",
"create": "Добавить",
"test": "Тест",
"delete": "Удалить",
"confirmDelete": "Удалить этого получателя?",
"noTargets": "Получатели уведомлений не настроены.",
"testSent": "Тестовое уведомление отправлено!",
"aiCaptions": "Включить AI подписи",
"telegramSettings": "Настройки Telegram",
"maxMedia": "Макс. медиафайлов",
"maxGroupSize": "Макс. размер группы",
"chunkDelay": "Задержка между группами (мс)",
"maxAssetSize": "Макс. размер файла (МБ)",
"videoWarning": "Предупреждение о размере видео",
"disableUrlPreview": "Отключить превью ссылок",
"sendLargeAsDocuments": "Отправлять большие фото как документы",
"chatAction": "Действие в чате",
"chatActionNone": "Нет (без действия)",
"chatActionTyping": "Печатает",
"chatActionUploadPhoto": "Загрузка фото",
"chatActionUploadVideo": "Загрузка видео",
"chatActionUploadDoc": "Загрузка документа",
"chatActionRecordVideo": "Запись видео",
"chatActionRecordVoice": "Запись голоса",
"typeTelegram": "Telegram",
"typeWebhook": "Вебхук",
"overrideUsername": "Переопределить имя бота",
"ntfyServer": "URL сервера ntfy",
"ntfyTopic": "Тема",
"ntfyToken": "Токен авторизации",
"ntfyTokenPlaceholder": "Необязательно (для защищённых тем)",
"selectEmailBot": "Выберите Email бот",
"selectMatrixBot": "Выберите Matrix бот",
"recipientEmail": "Email получателя",
"matrixRoomId": "ID комнаты",
"receivers": "Получатели",
"noReceivers": "Нет получателей",
"alreadyAdded": "уже добавлен",
"addReceiver": "Добавить получателя",
"receiverAdded": "Получатель добавлен",
"receiverDeleted": "Получатель удалён",
"receiverUpdated": "Получатель обновлён",
"confirmDeleteReceiver": "Удалить этого получателя?",
"receiverEnabled": "Получатель включён",
"receiverDisabled": "Получатель отключён",
"groupNoBot": "Без привязки к боту",
"groupDirect": "Прямая доставка",
"groupBotMissing": "Неизвестный бот",
"target": "получатель",
"targetsLower": "получателей",
"openBot": "Открыть бота"
},
"users": {
"titleEmphasis": "и доступ",
"countLabel": "пользователей",
"title": "Пользователи",
"description": "Управление аккаунтами (только админ)",
"you": "вы",
"addUser": "Добавить пользователя",
"cancel": "Отмена",
"username": "Имя пользователя",
"password": "Пароль",
"role": "Роль",
"roleUser": "Пользователь",
"roleAdmin": "Администратор",
"create": "Создать",
"delete": "Удалить",
"edit": "Редактировать пользователя",
"confirmDelete": "Удалить этого пользователя?",
"joined": "зарегистрирован",
"noUsers": "Пользователи не найдены"
},
"telegramBot": {
"titleEmphasis": "telegram",
"countLabel": "ботов",
"title": "Telegram боты",
"description": "Регистрация и управление Telegram ботами",
"addBot": "Добавить бота",
"name": "Отображаемое имя",
"namePlaceholder": "Бот семейных уведомлений",
"token": "Токен бота",
"tokenPlaceholder": "123456:ABC-DEF...",
"noBots": "Ботов пока нет.",
"chats": "Чаты",
"noChats": "Чатов не найдено. Сначала отправьте сообщение боту.",
"refreshChats": "Обновить",
"selectBot": "Выберите бота",
"selectChat": "Выберите чат",
"private": "Личный",
"group": "Группа",
"supergroup": "Супергруппа",
"channel": "Канал",
"confirmDelete": "Удалить этого бота?",
"commands": "Команды",
"enabledCommands": "Включённые команды",
"defaultCount": "Кол-во по умолчанию",
"responseMode": "Режим ответа",
"modeMedia": "Медиа (файлы)",
"modeText": "Только текст",
"botLocale": "Язык бота",
"rateLimits": "Ограничения частоты",
"rateSearch": "Кулдаун поиска",
"rateFind": "Кулдаун поиска файлов",
"rateDefault": "Кулдаун по умолчанию",
"noCommandsForProvider": "Этот тип провайдера не поддерживает команды бота.",
"syncCommands": "Синхр. команды",
"discoverChats": "Обнаружить чаты из Telegram",
"discoveringChats": "Поиск чатов…",
"clickToCopy": "Нажмите, чтобы скопировать ID чата",
"chatsDiscovered": "Чаты обнаружены",
"chatDeleted": "Чат удалён",
"chatName": "Имя",
"chatType": "Тип",
"chatLang": "Язык",
"langOverride": "Переопр.",
"cmds": "Команды",
"commandsToggle": "Включить/выключить команды для этого чата",
"chatId": "ID чата",
"languageUpdated": "Язык чата обновлён",
"cmdLocale": "Язык бота",
"searchCooldown": "Кулдаун поиска (с)",
"saveConfig": "Сохранить настройки",
"commandsSynced": "Команды синхронизированы с Telegram",
"registerWebhook": "Зарегистрировать вебхук",
"unregisterWebhook": "Удалить вебхук",
"webhookRegistered": "Вебхук зарегистрирован",
"webhookUnregistered": "Вебхук удалён",
"updateMode": "Режим обновлений",
"none": "Откл.",
"noneActive": "Приём обновлений отключён",
"polling": "Опрос",
"webhook": "Вебхук",
"webhookStatus": "Статус вебхука",
"webhookActive": "Вебхук активен",
"webhookNotSet": "Вебхук не установлен",
"webhookVerified": "Вебхук проверен",
"webhookError": "Последняя ошибка",
"pendingUpdates": "ожидающих обновлений",
"pollingActive": "Опрос активен",
"telegramSettings": "Настройки Telegram",
"externalUrl": "Внешний URL",
"externalUrlHint": "Публичный URL этого экземпляра Notify Bridge. Необходим для режима вебхука.",
"webhookSecret": "Секрет вебхука",
"webhookSecretHint": "Секретный токен для проверки запросов вебхука от Telegram (необязательно)",
"cacheTtl": "TTL кэша медиа (часы)",
"cacheTtlHint": "Сколько хранить кэш Telegram file_id перед повторной загрузкой (по умолчанию: 48ч)",
"settingsSaved": "Настройки сохранены",
"noExternalDomain": "Внешний URL домена не настроен",
"saveFailed": "Не удалось сохранить бота",
"webhookFailed": "Не удалось зарегистрировать webhook"
},
"trackingConfig": {
"titleEmphasis": "конфигурации",
"countLabel": "конфигураций",
"title": "Конфигурации отслеживания",
"description": "Определите, на какие события и файлы реагировать",
"newConfig": "Новая конфигурация",
"name": "Название",
"namePlaceholder": "Основное отслеживание",
"noConfigs": "Конфигураций отслеживания пока нет.",
"unknownProviderType": "Неизвестный тип провайдера",
"eventTracking": "Отслеживание событий",
"assetsAdded": "Добавлены файлы",
"assetsRemoved": "Удалены файлы",
"albumRenamed": "Альбом переименован",
"albumDeleted": "Альбом удалён",
"sharingChanged": "Изменение доступа",
"push": "Push",
"issueOpened": "Задача создана",
"issueClosed": "Задача закрыта",
"issueCommented": "Комментарий к задаче",
"prOpened": "PR создан",
"prClosed": "PR закрыт",
"prMerged": "PR влит",
"prCommented": "Комментарий к PR",
"releasePublished": "Релиз опубликован",
"cardCreated": "Карточка создана",
"cardUpdated": "Карточка обновлена",
"cardMoved": "Карточка перемещена",
"cardDeleted": "Карточка удалена",
"cardCommented": "Комментарий к карточке",
"commentUpdated": "Комментарий обновлён",
"boardCreated": "Доска создана",
"boardUpdated": "Доска обновлена",
"boardDeleted": "Доска удалена",
"listCreated": "Список создан",
"listUpdated": "Список обновлён",
"listDeleted": "Список удалён",
"attachmentCreated": "Вложение добавлено",
"cardLabelAdded": "Метка добавлена",
"taskCompleted": "Задача завершена",
"upsOnline": "ИБП на сети (питание восстановлено)",
"upsOnBattery": "ИБП на батарее",
"upsLowBattery": "Низкий заряд батареи",
"upsBatteryRestored": "Заряд восстановлен",
"upsCommsLost": "Связь потеряна",
"upsCommsRestored": "Связь восстановлена",
"upsReplaceBattery": "Замена батареи",
"upsOverload": "Перегрузка ИБП",
"scheduledMessage": "Запланированное сообщение",
"webhookReceived": "Вебхук получен",
"trackImages": "Фото",
"trackVideos": "Видео",
"favoritesOnly": "Только избранные",
"assetDisplay": "Отображение файлов",
"includePeople": "Включать людей",
"includeDetails": "Включать детали",
"maxAssets": "Макс. файлов",
"sortBy": "Сортировка",
"sortOrder": "Порядок",
"periodicSummary": "Периодическая сводка",
"enabled": "Включено",
"intervalDays": "Интервал (дни)",
"startDate": "Дата начала",
"times": "Время (ЧЧ:ММ)",
"scheduledAssets": "Запланированные фото",
"albumMode": "Режим альбомов",
"limit": "Лимит",
"assetType": "Тип файлов",
"minRating": "Мин. рейтинг",
"memoryMode": "Воспоминания (В этот день)",
"memorySource": "Источник воспоминаний",
"memorySourceAlbums": "Сканировать альбомы",
"memorySourceNative": "Встроенные воспоминания Immich",
"quietHours": "Тихие часы",
"quietHoursStart": "Начало",
"quietHoursEnd": "Конец",
"test": "Тест",
"confirmDelete": "Удалить эту конфигурацию отслеживания?",
"sortNone": "Нет",
"sortDate": "Дата",
"sortRating": "Рейтинг",
"sortName": "Имя",
"orderDesc": "По убыванию",
"orderAsc": "По возрастанию",
"albumModePerAlbum": "По альбомам",
"albumModeCombined": "Объединённый",
"albumModeRandom": "Случайный",
"assetTypeAll": "Все",
"assetTypePhoto": "Фото",
"assetTypeVideo": "Видео",
"periodic": "периодический",
"scheduled": "запланированный",
"memory": "воспоминания",
"added": "добавление",
"removed": "удаление",
"renamed": "переименование",
"deleted": "удалён",
"providerType": "Тип провайдера",
"sortRandom": "Случайный",
"timesInlineHelp": "ЧЧ:ММ, через запятую",
"invalidTimeList": "Используйте формат ЧЧ:ММ, например 09:00 или 09:00, 18:30",
"previewTemplate": "Предпросмотр шаблона",
"previewSampleNote": "Отрисовано на демо-данных, не на ваших реальных фото. Показан шаблон по умолчанию.",
"editTemplate": "Редактировать шаблон",
"quietHoursZero": "Тихий период 0 минут — скорректируйте время",
"nextDay": "след. день"
},
"templateConfig": {
"titleEmphasis": "шаблоны",
"countLabel": "шаблонов",
"title": "Конфигурации шаблонов",
"description": "Определите формат уведомлений",
"language": "Язык",
"providerType": "Тип сервис-провайдера",
"newConfig": "Новая конфигурация",
"name": "Название",
"namePlaceholder": "По умолчанию RU",
"descriptionPlaceholder": "напр. Русские шаблоны для семейных уведомлений",
"noConfigs": "Конфигураций шаблонов пока нет.",
"eventMessages": "Сообщения о событиях",
"assetsAdded": "Добавлены файлы",
"assetsRemoved": "Удалены файлы",
"albumRenamed": "Альбом переименован",
"albumDeleted": "Альбом удалён",
"sharingChanged": "Изменение доступа",
"assetFormatting": "Форматирование файлов",
"imageTemplate": "Шаблон фото",
"videoTemplate": "Шаблон видео",
"assetsWrapper": "Обёртка списка",
"moreMessage": "Сообщение \"ещё\"",
"peopleFormat": "Формат людей",
"dateLocation": "Дата и место",
"dateFormat": "Формат даты и времени",
"dateOnlyFormat": "Формат даты",
"commonDate": "Общая дата",
"uniqueDate": "Дата файла",
"locationFormat": "Формат места",
"commonLocation": "Общее место",
"uniqueLocation": "Место файла",
"favoriteIndicator": "Индикатор избранного",
"scheduledMessages": "Запланированные сообщения",
"periodicSummary": "Периодическая сводка",
"periodicAlbum": "Элемент альбома",
"scheduledAssets": "Запланированные фото",
"memoryMode": "Воспоминания",
"settings": "Настройки",
"previewAs": "Предпросмотр как",
"preview": "Предпросмотр",
"variables": "Переменные",
"assetFields": "Поля файла (в {% for asset in added_assets %})",
"albumFields": "Поля альбома (в {% for album in albums %})",
"confirmDelete": "Удалить эту конфигурацию шаблона?",
"invalidFormat": "Некорректная строка формата",
"filterSlots": "Фильтр слотов...",
"slots": "слотов",
"resetToDefault": "Сбросить к умолчанию",
"resetAllToDefaults": "Сбросить все к умолчаниям",
"resetSlotConfirm": "Заменить шаблон этого слота ({locale}) на исходный по умолчанию? Ваши правки будут потеряны.",
"resetAllConfirm": "Заменить шаблоны всех слотов ({locale}) на исходные по умолчанию? Все ваши правки для {locale} будут потеряны.",
"resetNoDefault": "Для этого слота нет шаблона по умолчанию.",
"resetApplied": "Сброшено к умолчанию (ещё не сохранено — нажмите «Сохранить»)",
"deepLinkNoConfig": "Не найдено конфигурации шаблонов для этого провайдера. Сначала создайте её."
},
"templateVars": {
"message_assets_added": {
"description": "Уведомление о добавлении файлов в альбом"
},
"message_assets_removed": {
"description": "Уведомление об удалении файлов из альбома"
},
"message_album_renamed": {
"description": "Уведомление о переименовании альбома"
},
"message_album_deleted": {
"description": "Уведомление об удалении альбома"
},
"periodic_summary_message": {
"description": "Периодическая сводка альбомов (планировщик не реализован)"
},
"scheduled_assets_message": {
"description": "Запланированная подборка фото (планировщик не реализован)"
},
"memory_mode_message": {
"description": "«В этот день» — воспоминания (планировщик не реализован)"
},
"album_id": "ID альбома (UUID)",
"album_name": "Название альбома",
"album_url": "Публичная ссылка (пусто, если не расшарен)",
"added_count": "Количество добавленных файлов",
"removed_count": "Количество удалённых файлов",
"change_type": "Тип изменения (assets_added, assets_removed, album_renamed, album_deleted)",
"people": "Обнаруженные люди (список, {{ people | join(', ') }})",
"added_assets": "Список файлов ({% for asset in added_assets %})",
"removed_assets": "Список ID удалённых файлов (строки)",
"shared": "Общий альбом (boolean)",
"target_type": "Тип получателя: telegram, webhook, email, discord, slack, ntfy или matrix",
"has_videos": "Содержат ли добавленные файлы видео (boolean)",
"has_photos": "Содержат ли добавленные файлы фото (boolean)",
"old_name": "Прежнее название альбома (при переименовании)",
"new_name": "Новое название альбома (при переименовании)",
"old_shared": "Был ли общим до переименования (boolean)",
"new_shared": "Является ли общим после переименования (boolean)",
"albums": "Список альбомов ({% for album in albums %})",
"assets": "Список файлов ({% for asset in assets %})",
"date": "Текущая дата",
"asset_id": "ID файла (UUID)",
"asset_filename": "Имя файла",
"asset_type": "IMAGE или VIDEO",
"asset_created_at": "Дата создания (ISO 8601)",
"asset_owner": "Имя владельца",
"asset_owner_id": "ID владельца",
"asset_description": "Описание (EXIF или пользовательское)",
"asset_people": "Люди на этом файле (список)",
"asset_is_favorite": "В избранном (boolean)",
"asset_rating": "Рейтинг (1-5 или null)",
"asset_latitude": "GPS широта (float или null)",
"asset_longitude": "GPS долгота (float или null)",
"asset_city": "Город",
"asset_state": "Регион",
"asset_country": "Страна",
"asset_url": "Ссылка для просмотра (если расшарен)",
"asset_download_url": "Ссылка для скачивания (если расшарен)",
"asset_photo_url": "URL превью (только фото, если расшарен)",
"asset_playback_url": "URL видео (только видео, если расшарен)",
"album_name_field": "Название альбома (в списке альбомов)",
"album_asset_count": "Всего файлов в альбоме",
"album_url_field": "Ссылка на альбом",
"album_shared": "Общий альбом"
},
"settings": {
"titleEmphasis": "параметры",
"title": "Настройки",
"description": "Глобальные настройки приложения",
"general": "Общие",
"externalUrl": "Внешний URL",
"externalUrlHint": "Публичный URL этого экземпляра Notify Bridge (напр. https://notify.example.com)",
"telegram": "Telegram",
"webhookSecret": "Секрет вебхука",
"webhookSecretHint": "Секретный токен для проверки запросов вебхука от Telegram",
"cacheTtl": "TTL URL-кэша (часы)",
"cacheTtlHint": "Сколько хранить Telegram file_id, привязанные к URL (напр. публичные ссылки). 0 — отключить TTL. Кэш ассетов использует хэширование содержимого (thumbhash) и не зависит от этой настройки.",
"cacheMaxEntries": "Макс. записей в кэше",
"cacheMaxEntriesHint": "Верхний предел записей в каждом кэше (URL и ассеты). При превышении удаляются самые старые (LRU). По умолчанию 5000.",
"cacheStats": "Содержимое кэша",
"cacheStatsHint": "Показываемый размер — это суммарный объём медиа, который был изначально загружен в Telegram для закэшированных записей, т.е. приблизительный объём повторных загрузок, который экономит кэш. Сам файл кэша занимает лишь несколько КБ; медиа хранится на серверах Telegram.",
"cacheStatsUrl": "Кэш URL",
"cacheStatsAsset": "Кэш ассетов",
"cacheStatsEntries": "записей",
"cacheStatsEmpty": "пусто",
"cacheStatsOldest": "самая старая",
"cacheStatsNewest": "самая свежая",
"clearCache": "Очистить кэш медиа",
"clearCacheHint": "Удалить кэшированные Telegram file_id. При следующей отправке медиа будут загружены заново.",
"clearCacheConfirmTitle": "Очистить кэш Telegram?",
"clearCacheConfirm": "Это удалит все кэшированные Telegram file_id. Следующие уведомления будут повторно загружать медиа, что может занять больше времени и трафика.",
"clearCacheConfirmBtn": "Очистить кэш",
"clearCacheDone": "Кэш Telegram очищен",
"timezone": "Часовой пояс",
"timezoneHint": "Часовой пояс IANA (например UTC, Europe/Warsaw, America/New_York). Используется для интерпретации полей HH:MM, таких как тихие часы.",
"locales": "Языки шаблонов",
"supportedLocales": "Поддерживаемые локали",
"supportedLocalesHint": "Языки, доступные для редактирования шаблонов уведомлений и команд. Встроенные шаблоны поставляются для английского и русского; другие языки начинают с пустых.",
"logging": "Логирование",
"logLevel": "Уровень логов",
"logLevelHint": "Уровень логирования сервера. Поднимайте до DEBUG при отладке; оставляйте INFO в продакшене. WARNING/ERROR скрывают пошаговые строки по командам.",
"logFormat": "Формат логов",
"logFormatHint": "Формат вывода. 'text' — читаемый человеком; 'json' — по одному объекту в строке для агрегаторов (Loki, ELK). Смена требует перезапуска сервера.",
"logLevels": "Переопределения по модулям",
"logLevelsHint": "Пары 'модуль=УРОВЕНЬ' через запятую, чтобы приглушить шумные модули или углубиться в один. Пример: sqlalchemy.engine=WARNING,notify_bridge_core.notifications.telegram.client=DEBUG",
"saved": "Настройки сохранены",
"identity": "Идентификация",
"identityHeadline": "Как этот сервер представляется ботам, вебхукам и получателям",
"telegramHeadline": "Аутентификация вебхуков и настройка медиакэша",
"loggingHeadline": "Подробность, формат вывода и переопределения по модулям",
"heroNoUrl": "Внешний URL не задан",
"heroNoLocales": "нет локалей",
"copy": "Копировать",
"urlCopied": "URL скопирован",
"openExternal": "Открыть",
"show": "Показать",
"hide": "Скрыть",
"secretSet": "Задан",
"secretUnset": "Не настроен",
"cacheConfig": "Кэш",
"cacheTtlShort": "TTL",
"cacheMaxShort": "Макс. записей",
"cacheMaxFootnote": "на корзину (LRU)",
"hoursShort": "ч",
"entriesShort": "макс",
"ttlNoExpiry": "без срока",
"cacheCapacity": "Заполненность кэша",
"cacheCapacityCap": "из {n}",
"logModulePlaceholder": "путь.модуля",
"addOverride": "Добавить",
"removeOverride": "Удалить",
"editAsText": "Редактировать как текст",
"editAsChips": "Редактировать как чипы",
"logPreviewLabel": "АКТИВНО",
"unsavedChanges": "Несохранённые изменения",
"unsaved": "НЕ СОХРАНЕНО",
"changedOne": "Изменена 1 настройка",
"changedMany": "Изменено настроек: {n}",
"discard": "Отменить",
"saveChanges": "Сохранить",
"release": {
"eyebrow": "Релизы",
"headline": "Следите за обновлениями",
"provider": "Источник",
"providerHint": "Где искать новые версии. Сейчас доступен только Gitea; GitHub появится позже.",
"comingSoon": "Скоро",
"disabled": "Отключено",
"repository": "Репозиторий",
"repositoryHint": "URL публичного репозитория и owner/name (например, alexei.dolgolyov/notify-bridge).",
"options": "Опции",
"includePrereleases": "Учитывать пре-релизы",
"prereleasesHint": "Если выключено, кандидаты в релизы и бета-версии игнорируются, даже если они новее установленной.",
"interval": "Интервал проверки",
"intervalHint": "Как часто фоновая задача опрашивает источник. Ручная проверка всегда доступна.",
"intervalRange": "1168 ч",
"hoursUnit": "ч",
"testConnection": "Проверить связь",
"checkNow": "Проверить сейчас",
"checkDone": "Проверка релизов завершена",
"checkFailed": "Не удалось проверить релизы",
"testOk": "Источник доступен",
"testFailed": "Источник недоступен",
"testFound": "Найдена версия",
"viewRelease": "Открыть релиз v{v}",
"statusUpToDate": "Актуальная версия",
"statusUpdate": "Доступно обновление",
"statusDisabled": "Проверка релизов отключена",
"statusError": "Ошибка последней проверки",
"statusUnknown": "Ещё не проверялось",
"heroAvailable": "доступна",
"updateAvailableTooltip": "Доступна версия v{v} — открыть Настройки",
"lastChecked": "Последняя проверка",
"never": "никогда",
"justNow": "только что",
"minutesAgo": "{n} мин назад",
"hoursAgo": "{n} ч назад",
"daysAgo": "{n} д назад",
"error": {
"disabled": "Проверка релизов отключена",
"misconfigured": "Источник настроен не полностью",
"provider_changed": "Источник изменён — ожидание следующей проверки",
"no_release_found": "Подходящий релиз на источнике не найден",
"network_error": "Источник недоступен",
"http_error": "Источник вернул ошибку",
"parse_error": "Не удалось разобрать ответ источника",
"unsafe_url": "URL отклонён проверкой безопасности",
"not_implemented": "Источник пока не реализован",
"unknown_error": "Неизвестная ошибка",
"error": "Ошибка последней проверки"
}
}
},
"hints": {
"periodicSummary": "Отправляет плановую сводку по всем отслеживаемым альбомам в указанное время. Подходит для ежедневных/еженедельных дайджестов.",
"scheduledAssets": "Отправляет случайные или выбранные фото из альбомов по расписанию. Как ежедневная подборка фото.",
"memoryMode": "\"В этот день\" — отправляет фото, сделанные в этот день в прошлые годы. Ностальгические воспоминания.",
"memorySource": "Альбомы: сканирует отслеживаемые альбомы по дате. Встроенные: использует воспоминания Immich (вся библиотека, с фильтрацией по альбомам).",
"quietHours": "Подавляет все уведомления в указанном HH:MM окне (по часовому поясу приложения). Поддерживаются окна через полночь, например 22:0007:00.",
"favoritesOnly": "Включать только ассеты, отмеченные как избранные.",
"maxAssets": "Максимальное количество ассетов в одном уведомлении.",
"periodicStartDate": "Опорная дата в часовом поясе приложения. Первая сводка отправится в ближайшее заданное время ЧЧ:ММ, начиная с этой даты, затем каждые N дней.",
"intervalDays": "Период между сводками в днях. 1 = ежедневно, 7 = еженедельно.",
"times": "Время отправки уведомлений в формате ЧЧ:ММ. Для нескольких значений через запятую: 09:00,18:00",
"albumMode": "По альбому: отдельное уведомление для каждого. Объединённый: одно уведомление со всеми. Случайный: выбирается один альбом.",
"scheduledAlbumMode": "Как альбомы группируются в запланированных отправках. По умолчанию: По альбому (одно уведомление на каждый отслеживаемый альбом).",
"memoryAlbumMode": "Как альбомы группируются в воспоминаниях. По умолчанию: Объединённый (одно уведомление со всеми совпадениями из всех альбомов).",
"minRating": "Включать только ассеты с рейтингом не ниже указанного (0 = без фильтра).",
"eventMessages": "Шаблоны уведомлений о событиях в реальном времени. Используйте {переменные} для динамического контента.",
"assetFormatting": "Форматирование отдельных ассетов в сообщениях уведомлений.",
"dateLocation": "Форматирование даты и местоположения. Использует синтаксис strftime для дат.",
"scheduledMessages": "Шаблоны для периодических сводок, подборок фото и воспоминаний «В этот день».",
"aiCaptions": "Использовать Claude AI для генерации описания уведомления вместо шаблона.",
"maxMedia": "Максимальное количество фото/видео в одном уведомлении (0 = только текст).",
"groupSize": "Медиагруппы Telegram содержат 2-10 элементов. Большие пакеты разбиваются на части.",
"chunkDelay": "Задержка в миллисекундах между отправкой порций медиа. Предотвращает ограничение Telegram.",
"maxAssetSize": "Пропускать файлы больше указанного размера в МБ. Лимит Telegram — 50 МБ.",
"trackingConfig": "Управляет тем, какие события вызывают уведомления и как фильтруются ассеты.",
"templateConfig": "Управляет форматом сообщений. Используются шаблоны по умолчанию, если не задано.",
"scanInterval": "Как часто опрашивать провайдер на предмет изменений (в секундах). Меньше = быстрее обнаружение, но больше запросов к API.",
"adaptiveMaxSkip": "Снижает частоту опроса, когда отслеживание простаивает — уменьшает нагрузку на сервер-источник. Оставьте пустым или 0, чтобы уведомления приходили без задержки: каждый тик выполняется с заданным интервалом. Значение 2 позволит замедлять опрос до 2× после ~5 мин простоя, а 4 — до 4× после ~15 мин. Любая активность сразу возвращает базовую частоту.",
"defaultTrackingConfig": "Применяется ко всем привязанным получателям, если не переопределено.",
"defaultTemplateConfig": "Применяется ко всем привязанным получателям, если не переопределено.",
"defaultCount": "Сколько результатов возвращать, если пользователь не указал количество (1-20).",
"responseMode": "Медиа: отправка фото. Текст: только имена файлов/ссылки. Медиа-режим использует больше трафика.",
"botLocale": "Язык описаний команд в меню Telegram и ответов бота.",
"rateLimits": "Кулдаун в секундах между использованиями команд в каждом чате. 0 = без ограничений.",
"commandResponses": "Шаблоны ответов на каждую /команду. Используйте {переменные} для динамических данных.",
"commandErrors": "Резервные сообщения, когда команда не может выполниться (превышен лимит) или ничего не возвращает.",
"commandDescriptions": "Короткие подписи в меню команд Telegram, которые показываются рядом с каждой /командой.",
"commandUsage": "Примеры вызовов, отображаемые в /help, чтобы показать пользователям как вызывать каждую команду."
},
"matrixBot": {
"titleEmphasis": "matrix",
"countLabel": "ботов",
"title": "Matrix боты",
"description": "Подключения к Matrix серверам для уведомлений в комнаты",
"addBot": "Добавить Matrix бот",
"name": "Название",
"namePlaceholder": "Бот для дома",
"homeserverUrl": "URL сервера",
"accessToken": "Токен доступа",
"tokenPlaceholder": "syt_...",
"tokenUnchanged": "(без изменений)",
"displayName": "Отображаемое имя",
"testConnection": "Проверить подключение",
"noBots": "Matrix ботов пока нет.",
"confirmDelete": "Удалить этот Matrix бот?",
"operationFailed": "Операция не удалась"
},
"emailBot": {
"titleEmphasis": "email",
"countLabel": "учётных записей",
"title": "Email боты",
"description": "SMTP отправители для уведомлений по email",
"addBot": "Добавить Email бот",
"name": "Название",
"namePlaceholder": "Семейные уведомления",
"email": "Email отправителя",
"smtpHost": "SMTP сервер",
"smtpPort": "Порт",
"smtpUsername": "Имя пользователя",
"smtpUsernamePlaceholder": "Как email или пароль приложения",
"smtpPassword": "Пароль",
"passwordUnchanged": "(без изменений)",
"useTls": "Использовать TLS/SSL",
"testConnection": "Отправить тестовое письмо",
"noBots": "Email ботов пока нет.",
"confirmDelete": "Удалить этот email бот?",
"operationFailed": "Операция не удалась"
},
"cmdTemplateConfig": {
"titleEmphasis": "шаблоны",
"countLabel": "шаблонов",
"title": "Шаблоны команд",
"description": "Настройте ответы команд с помощью Jinja2 шаблонов",
"newConfig": "Новый шаблон",
"name": "Название",
"namePlaceholder": "Команды Immich по умолчанию",
"descriptionPlaceholder": "Например, пользовательские форматы ответов",
"noConfigs": "Шаблонов команд пока нет.",
"confirmDelete": "Удалить этот шаблон команд?",
"commandResponses": "Ответы команд",
"commandErrors": "Сообщения об ошибках",
"commandDescriptions": "Описания команд",
"commandUsage": "Примеры использования"
},
"commandConfig": {
"titleEmphasis": "конфигурации",
"countLabel": "конфигураций",
"title": "Конфигурации команд",
"noCommandsForProvider": "Для этого типа провайдера нет доступных команд.",
"description": "Настройки команд для взаимодействия с Telegram-ботами",
"newConfig": "Новая конфигурация",
"name": "Название",
"namePlaceholder": "Команды по умолчанию",
"providerType": "Тип провайдера",
"enabledCommands": "Включённые команды",
"locale": "Язык",
"responseMode": "Режим ответа",
"modeMedia": "Медиа (файлы)",
"modeText": "Только текст",
"defaultCount": "Кол-во по умолчанию",
"rateLimits": "Ограничения частоты",
"searchCooldown": "Кулдаун поиска (с)",
"defaultCooldown": "Кулдаун по умолчанию (с)",
"noConfigs": "Конфигураций команд пока нет.",
"confirmDelete": "Удалить эту конфигурацию команд?",
"commands": "команд",
"responseTemplate": "Шаблон ответов",
"noTemplate": "По умолчанию (встроенный)"
},
"commandTracker": {
"titleEmphasis": "трекеры",
"title": "Трекеры команд",
"description": "Управление трекерами команд и их слушателями",
"newTracker": "Новый трекер",
"name": "Название",
"namePlaceholder": "Семейные команды",
"provider": "Провайдер",
"selectProvider": "Выберите провайдер...",
"commandConfig": "Конфигурация команд",
"selectCommandConfig": "Выберите конфигурацию...",
"listeners": "Слушатели",
"addListener": "Добавить слушателя",
"removeListener": "Удалить",
"noTrackers": "Трекеров команд пока нет.",
"confirmDelete": "Удалить этот трекер команд?",
"enabled": "Включён",
"disabled": "Отключён",
"noListeners": "Нет подключённых слушателей.",
"selectBot": "Выберите бота...",
"listenerType": "telegram_bot",
"editScope": "Изменить область альбомов",
"scopeAll": "из маршрутизации уведомлений",
"albumsShort": "альбомов",
"scopeTitle": "Переопределение области альбомов для этого бота",
"scopeDescription": "По умолчанию команды этого бота видят только альбомы, уведомления которых приходят в его чаты (вычисляется из ваших трекеров уведомлений). Задайте явный список здесь, чтобы расширить или сузить этот набор для всех чатов данного бота.",
"scopeInherit": "Наследовать: вычислить из маршрутизации уведомлений",
"noCollections": "Нет доступных альбомов."
},
"snackbar": {
"showDetails": "Показать детали",
"hideDetails": "Скрыть детали"
},
"timezone": {
"searchPlaceholder": "Поиск по городам или IANA-кодам…",
"detect": "Определить",
"utc": "UTC",
"noMatches": "Нет совпадений"
},
"locales": {
"label": "язык",
"labelPlural": "языков",
"empty": "Языки не выбраны. Добавьте язык ниже, чтобы начать редактирование шаблонов.",
"add": "Добавить язык",
"searchPlaceholder": "Найти или ввести код (например de-CH)…",
"customPlaceholder": "или de-CH",
"addCustom": "Добавить свой код",
"noSuggestions": "Ничего не найдено. Введите код локали (2–3 буквы).",
"primary": "Основной",
"shipped": "Встроенный",
"shippedHint": "Для этого языка есть встроенные шаблоны уведомлений и команд.",
"makePrimary": "Сделать основным",
"moveUp": "Выше",
"moveDown": "Ниже",
"remove": "Удалить",
"removeLast": "Должен быть хотя бы один язык",
"reorder": "Перетащите для изменения порядка",
"orderHint": "Первый язык используется как основной при отсутствии перевода. Перетаскивайте, чтобы изменить порядок."
},
"snack": {
"eventsCleared": "Очищено событий: {count}",
"providerSaved": "Провайдер сохранён",
"providerDeleted": "Провайдер удалён",
"trackerCreated": "Трекер создан",
"trackerUpdated": "Трекер обновлён",
"trackerDeleted": "Трекер удалён",
"trackerPaused": "Трекер приостановлен",
"trackerResumed": "Трекер возобновлён",
"targetSaved": "Цель сохранена",
"targetDeleted": "Цель удалена",
"targetTestSent": "Тестовое уведомление отправлено",
"templateSaved": "Шаблон сохранён",
"templateDeleted": "Шаблон удалён",
"trackingConfigSaved": "Конфигурация сохранена",
"trackingConfigDeleted": "Конфигурация удалена",
"botRegistered": "Бот зарегистрирован",
"botDeleted": "Бот удалён",
"userCreated": "Пользователь создан",
"userDeleted": "Пользователь удалён",
"userUpdated": "Пользователь обновлён",
"passwordChanged": "Пароль изменён",
"copied": "Скопировано",
"genericError": "Что-то пошло не так",
"commandsSaved": "Конфигурация команд сохранена",
"commandsSynced": "Команды синхронизированы с Telegram",
"targetLinked": "Получатель привязан",
"targetUnlinked": "Получатель отвязан",
"botUpdated": "Бот обновлён",
"commandConfigSaved": "Конфигурация команд сохранена",
"commandConfigDeleted": "Конфигурация команд удалена",
"commandTrackerCreated": "Трекер команд создан",
"commandTrackerUpdated": "Трекер команд обновлён",
"commandTrackerDeleted": "Трекер команд удалён",
"commandTrackerEnabled": "Трекер команд включён",
"commandTrackerDisabled": "Трекер команд отключён",
"listenerAdded": "Слушатель добавлен",
"listenerRemoved": "Слушатель удалён",
"listenerScopeSaved": "Область обновлена",
"cmdTemplateSaved": "Шаблон команд сохранён",
"cmdTemplateDeleted": "Шаблон команд удалён",
"emailBotCreated": "Email бот создан",
"emailBotUpdated": "Email бот обновлён",
"emailBotDeleted": "Email бот удалён",
"emailBotTestSent": "Тестовое письмо отправлено",
"matrixBotCreated": "Matrix бот создан",
"matrixBotUpdated": "Matrix бот обновлён",
"matrixBotDeleted": "Matrix бот удалён",
"matrixBotTestOk": "Подключение к Matrix проверено"
},
"common": {
"loading": "Загрузка...",
"save": "Сохранить",
"cancel": "Отмена",
"delete": "Удалить",
"clone": "Копировать",
"edit": "Редактировать",
"description": "Описание",
"close": "Закрыть",
"hide": "Скрыть",
"show": "Показать",
"confirm": "Подтвердить",
"cannotDelete": "Невозможно удалить",
"blockedByIntro": "На объект ссылаются:",
"error": "Ошибка",
"success": "Успешно",
"none": "Нет",
"noneDefault": "Нет (по умолчанию)",
"loadError": "Не удалось загрузить данные",
"headersInvalid": "Невалидный JSON",
"language": "Язык",
"theme": "Тема",
"apiDocs": "API Docs",
"light": "Светлая",
"dark": "Тёмная",
"system": "Системная",
"test": "Тест",
"create": "Создать",
"changePassword": "Сменить пароль",
"currentPassword": "Текущий пароль",
"newPassword": "Новый пароль",
"passwordChanged": "Пароль успешно изменён",
"expand": "Развернуть",
"collapse": "Свернуть",
"syntaxError": "Ошибка синтаксиса",
"undefinedVar": "Неизвестная переменная",
"line": "строка",
"enable": "Включить",
"disable": "Выключить",
"add": "Добавить",
"filterByName": "Фильтр по имени...",
"allTypes": "Все типы",
"allProviders": "Все провайдеры",
"noFilterResults": "Нет элементов, соответствующих фильтру.",
"redirecting": "Перенаправление...",
"noMatches": "Ничего не найдено",
"saveFailed": "Не удалось сохранить",
"loadFailed": "Не удалось загрузить данные",
"dismiss": "Закрыть",
"systemSuffix": " (Системный)",
"search": "Поиск...",
"nSelected": "{0} выбрано",
"unknown": "Неизвестно"
},
"templateSlot": {
"message_assets_added": "Новые файлы добавлены в альбом",
"message_assets_removed": "Файлы удалены из альбома",
"message_collection_renamed": "Альбом переименован",
"message_collection_deleted": "Альбом удалён",
"message_sharing_changed": "Статус общего доступа изменён",
"periodic_summary_message": "Периодическая сводка альбома",
"scheduled_assets_message": "Запланированная отправка файлов",
"memory_mode_message": "Воспоминания «В этот день»",
"message_push": "Код отправлен в репозиторий",
"message_issue_opened": "Issue открыт",
"message_issue_closed": "Issue закрыт",
"message_issue_commented": "Комментарий к issue",
"message_pr_opened": "Pull request открыт",
"message_pr_closed": "Pull request закрыт",
"message_pr_merged": "Pull request слит",
"message_pr_commented": "Комментарий к pull request",
"message_release_published": "Релиз опубликован",
"message_scheduled_message": "Запланированное сообщение",
"message_card_created": "Карточка создана",
"message_card_updated": "Карточка обновлена",
"message_card_moved": "Карточка перемещена",
"message_card_deleted": "Карточка удалена",
"message_card_commented": "Комментарий к карточке",
"message_comment_updated": "Комментарий обновлён",
"message_board_created": "Доска создана",
"message_board_updated": "Доска обновлена",
"message_board_deleted": "Доска удалена",
"message_list_created": "Список создан",
"message_list_updated": "Список обновлён",
"message_list_deleted": "Список удалён",
"message_attachment_created": "Вложение добавлено",
"message_card_label_added": "Метка добавлена к карточке",
"message_task_completed": "Задача выполнена",
"message_ups_online": "ИБП на сетевом питании",
"message_ups_on_battery": "ИБП перешёл на батарею",
"message_ups_low_battery": "Батарея критически разряжена",
"message_ups_battery_restored": "Заряд батареи восстановлен",
"message_ups_comms_lost": "Связь с ИБП потеряна",
"message_ups_comms_restored": "Связь с ИБП восстановлена",
"message_ups_replace_battery": "Батарея требует замены",
"message_ups_overload": "ИБП перегружен"
},
"gridDesc": {
"authNone": "Аутентификация не требуется",
"authBearer": "Проверка запросов по Bearer-токену",
"authHmac": "Проверка подписи через HMAC-SHA256",
"sortNone": "Без сортировки",
"sortDate": "По дате создания",
"sortRating": "По рейтингу",
"sortName": "По имени файла",
"sortRandom": "Случайный порядок",
"orderDesc": "Сначала новые или высокие",
"orderAsc": "Сначала старые или низкие",
"albumModePerAlbum": "Отдельное сообщение для каждого альбома",
"albumModeCombined": "Все альбомы в одном сообщении",
"albumModeRandom": "Случайный альбом",
"assetTypeAll": "Фото и видео",
"assetTypePhoto": "Только фото",
"assetTypeVideo": "Только видео",
"memorySourceAlbums": "Поиск совпадений в отслеживаемых альбомах",
"memorySourceNative": "Использовать API воспоминаний Immich",
"localeEn": "Английский интерфейс",
"localeRu": "Русский интерфейс",
"logLevelDebug": "Подробный — каждый шаг",
"logLevelInfo": "По умолчанию — ключевые события",
"logLevelWarning": "Только предупреждения и ошибки",
"logLevelError": "Только ошибки — самый тихий",
"logFormatText": "Читаемый человеком текст",
"logFormatJson": "Один JSON-объект на строку",
"modeMedia": "Отправка файлов фото/видео",
"modeText": "Только имена файлов и ссылки",
"allEvents": "Показать все типы событий",
"assetsAdded": "Новые файлы добавлены в альбом",
"assetsRemoved": "Файлы удалены из альбома",
"renamed": "Альбом переименован",
"deleted": "Альбом удалён",
"sharingChanged": "Изменён доступ к альбому",
"actionSuccess": "Запланированное действие выполнено",
"actionPartial": "Запланированное действие выполнено частично",
"actionFailed": "Запланированное действие провалено",
"commandHandled": "Команда бота обработана",
"commandRateLimited": "Команда бота ограничена по частоте",
"commandFailed": "Команда бота вызвала ошибку",
"refreshOff": "Автообновление выключено",
"refresh10s": "Обновлять каждые 10 секунд",
"refresh30s": "Обновлять каждые 30 секунд",
"refresh60s": "Обновлять каждую минуту",
"refresh5m": "Обновлять каждые 5 минут",
"newestFirst": "Сначала новые события",
"oldestFirst": "Сначала старые события",
"chatActionNone": "Индикатор не показывается",
"chatActionTyping": "Показать «печатает...»",
"chatActionUploadPhoto": "Показать «отправляет фото...»",
"chatActionUploadVideo": "Показать «отправляет видео...»",
"chatActionUploadDoc": "Показать «отправляет документ...»",
"chatActionRecordVideo": "Показать «записывает видео...»",
"chatActionRecordVoice": "Показать «записывает голос...»",
"previewTelegram": "Предпросмотр в формате Telegram HTML",
"previewWebhook": "Предпросмотр как текст",
"previewEmail": "Предпросмотр в формате Email HTML",
"previewDiscord": "Предпросмотр в формате Discord",
"previewSlack": "Предпросмотр в формате Slack",
"previewNtfy": "Предпросмотр уведомления ntfy",
"previewMatrix": "Предпросмотр в формате Matrix HTML",
"providerImmich": "Фотосервер для самостоятельного размещения",
"providerGitea": "Git-сервер для самостоятельного размещения",
"providerPlanka": "Канбан-доска для самостоятельного размещения",
"providerScheduler": "Запланированные сообщения по расписанию",
"providerNut": "Мониторинг ИБП через NUT",
"providerGooglePhotos": "Альбомы и общие библиотеки Google Фото",
"providerWebhook": "Приём событий через HTTP POST"
},
"webhookLogs": {
"title": "Последние запросы",
"empty": "Записей пока нет",
"clear": "Очистить историю",
"confirmClear": "Очистить все сохранённые запросы для этого провайдера?",
"statusMatched": "Совпадение",
"statusUnmatched": "Не совпало",
"statusError": "Ошибка",
"headers": "Заголовки",
"body": "Тело запроса",
"extractedFields": "Извлечённые поля",
"errorMessage": "Ошибка",
"cleared": "История запросов очищена"
},
"error": {
"notFound": "Страница не найдена",
"goHome": "На главную"
},
"searchPalette": {
"placeholder": "Поиск объектов...",
"noResults": "Ничего не найдено",
"typeToSearch": "Начните вводить для поиска",
"navigate": "навигация",
"open": "открыть",
"close": "закрыть"
},
"actions": {
"titleEmphasis": "автоматизации",
"countLabel": "действий",
"title": "Действия",
"description": "Запланированные операции над внешними сервисами",
"addAction": "Добавить действие",
"noActions": "Действия ещё не настроены.",
"provider": "Провайдер",
"selectProvider": "Выберите провайдер...",
"actionType": "Тип действия",
"name": "Название",
"schedule": "Расписание",
"interval": "Интервал",
"cronMode": "Cron выражение",
"seconds": "секунд",
"cronHint": "Стандартное cron-выражение (напр. 0 3 * * * — ежедневно в 3:00)",
"enabled": "Включено",
"rules": "правил",
"addRule": "Добавить правило",
"ruleName": "Название правила",
"ruleNamePlaceholder": "напр. Алиса → Семейный альбом",
"unnamedRule": "Без названия",
"noRules": "Правил пока нет. Добавьте правило, чтобы определить, что делает это действие.",
"on": "ВКЛ",
"off": "ВЫКЛ",
"criteria": "Критерии",
"persons": "Люди",
"addPerson": "Добавить человека...",
"excludePersons": "Исключить людей",
"addExcludePerson": "Добавить человека для исключения...",
"searchQuery": "Умный поиск",
"searchQueryPlaceholder": "напр. закат, пляж, день рождения...",
"assetType": "Тип файла",
"dateFrom": "С даты",
"dateTo": "По дату",
"favoritesOnly": "Только избранное",
"targetAlbum": "Целевой альбом",
"selectAlbum": "Альбом",
"selectAlbumPlaceholder": "Выберите альбом",
"albumId": "ID альбома",
"createAlbumIfMissing": "Создать альбом, если не существует",
"newAlbumName": "Название нового альбома",
"execute": "Выполнить",
"dryRun": "Пробный запуск",
"history": "История",
"affected": "затронуто",
"executeResult": "Действие выполнено: затронуто {affected} объектов",
"dryRunResult": "Пробный запуск: было бы затронуто {affected} объектов",
"saved": "Действие сохранено",
"deleted": "Действие удалено",
"ruleSaved": "Правило сохранено",
"ruleDeleted": "Правило удалено",
"confirmDelete": "Вы уверены, что хотите удалить это действие? Все правила и история выполнений будут потеряны.",
"loadError": "Не удалось загрузить действия",
"noExecutions": "Выполнений пока нет.",
"triggerManual": "вручную",
"triggerDryRun": "пробный",
"triggerScheduled": "по расписанию"
},
"backup": {
"titleEmphasis": "и восстановление",
"title": "Резервное копирование",
"description": "Экспорт и импорт конфигурации, настройка автоматических бэкапов",
"export": "Экспорт конфигурации",
"exportDescription": "Скачать конфигурацию в формате JSON. Выберите категории для включения.",
"import": "Импорт конфигурации",
"importDescription": "Загрузить ранее экспортированный файл бэкапа для восстановления.",
"categories": "Категории",
"selectAll": "Выбрать все",
"deselectAll": "Снять все",
"catProviders": "Провайдеры",
"catTelegramBots": "Telegram боты",
"catMatrixBots": "Matrix боты",
"catEmailBots": "Email боты",
"catTargets": "Цели",
"catTrackingConfigs": "Конфиги отслеживания",
"catTemplateConfigs": "Конфиги шаблонов",
"catCommandConfigs": "Конфиги команд",
"catCommandTemplateConfigs": "Шаблоны команд",
"catNotificationTrackers": "Трекеры уведомлений",
"catCommandTrackers": "Трекеры команд",
"catActions": "Действия",
"catAppSettings": "Настройки приложения",
"secretsMode": "Секреты",
"secretsExclude": "Исключить секреты (безопасно)",
"secretsMasked": "Маскировать секреты (для проверки)",
"secretsInclude": "Включить секреты (открытый текст)",
"secretsWarningExport": "Внимание: файл экспорта будет содержать конфиденциальные данные (API-ключи, токены, пароли) в открытом виде.",
"exportBtn": "Экспорт",
"exportSuccess": "Конфигурация экспортирована",
"validateBtn": "Проверить",
"validating": "Проверка...",
"validationPassed": "Проверка пройдена",
"validationFailed": "Проверка не пройдена",
"entities": "Сущности",
"conflictMode": "Разрешение конфликтов",
"conflictSkip": "Пропустить существующие (оставить текущие)",
"conflictRename": "Переименовать дубликаты (добавить суффикс)",
"conflictOverwrite": "Перезаписать существующие (заменить)",
"importBtn": "Импорт",
"importing": "Импорт...",
"importSuccess": "Конфигурация импортирована",
"importResults": "Результаты импорта",
"resultCreated": "Создано",
"resultSkipped": "Пропущено",
"resultOverwritten": "Перезаписано",
"resultErrors": "Ошибки",
"confirmExportTitle": "Экспорт с секретами?",
"confirmExportMessage": "Экспортированный файл будет содержать все секреты (API-ключи, токены ботов, пароли) в открытом виде. Используйте только для безопасной передачи.",
"confirmImportTitle": "Импортировать конфигурацию?",
"confirmImportMessage": "Это создаст новые сущности в базе данных. Убедитесь, что файл бэкапа прошёл проверку.",
"scheduled": "Автоматические бэкапы",
"enableScheduled": "Включить автоматическое резервное копирование",
"interval": "Интервал",
"hours": "часов",
"retention": "Хранить последних",
"scheduleSaved": "Расписание бэкапов сохранено",
"savedFiles": "Сохранённые бэкапы",
"noFiles": "Файлов бэкапа пока нет.",
"download": "Скачать",
"fileDeleted": "Файл бэкапа удалён",
"createManual": "Создать бэкап",
"manualCreated": "Бэкап создан",
"pendingTitle": "Восстановление ожидает — перезапустите для применения",
"pendingBy": "Загружено пользователем {by}",
"pendingAt": "в {at}",
"pendingCancelled": "Ожидающее восстановление отменено",
"restorePrepared": "Восстановление подготовлено",
"restoreApplyPrompt": "Применить восстановление сейчас (бэкенд перезапустится) или позже при следующем штатном перезапуске?",
"applyLater": "Применить позже",
"restartNow": "Перезапустить сейчас",
"restartingTitle": "Перезапуск бэкенда…",
"restartingDescription": "Страница перезагрузится, как только сервер снова будет доступен.",
"countLabel": "бэкапов",
"scheduleOn": "Авто · каждые {h}ч",
"scheduleOff": "Авто-бэкап выключен",
"lastBackup": "Последний {ago}",
"never": "ещё нет бэкапов",
"totalSize": "всего {size}",
"dropZone": "Перетащите JSON-бэкап сюда или нажмите для выбора",
"dropZoneActive": "Отпустите для загрузки",
"changeFile": "Сменить файл",
"catGroupIdentity": "Идентичность и маршрутизация",
"catGroupNotif": "Уведомления",
"catGroupCmd": "Команды",
"catGroupSystem": "Система",
"stepCategories": "Что включить",
"stepSecrets": "Обработка секретов",
"stepDownload": "Скачать",
"stepFile": "Выберите файл",
"stepValidate": "Проверить содержимое",
"stepConflict": "При конфликте",
"stepApply": "Применить",
"tagScheduled": "по расписанию",
"tagManual": "вручную",
"tagSecrets": "с секретами",
"validateFirst": "Сначала проверьте файл, чтобы включить импорт"
}
}