export const settings = { title: 'Настройки', language: 'Язык', languageEn: 'English', languageDe: 'Deutsch', languageEs: 'Español', languageFr: 'Français', languageNl: 'Nederlands', languageNb: 'Norsk', languageRu: 'Русский', languageZh: '中文', languageRo: 'Română', font: 'Шрифт', fontHintOpenDyslexic: 'Подходит для дислексии · без поддержки китайского', theme: 'Тема', appearance: 'Оформление', servers: 'Серверы', serverName: 'Название', serverUrl: 'Адрес', serverUrlPlaceholder: '192.168.1.100:4533 или https://music.example.com', serverAlternateUrl: 'Второй адрес (необязательно)', serverAlternateUrlPlaceholderPublic: 'https://music.example.com', serverAlternateUrlPlaceholderLocal: '192.168.1.100:4533', serverAlternateUrlHintAddPublic: 'Добавьте публичный адрес, чтобы подключаться вне домашней сети.', serverAlternateUrlHintAddLocal: 'Добавьте локальный адрес для более быстрой связи дома.', serverBothLanError: 'Оба адреса локальные — оставьте один или добавьте публичный.', dualAddressVerifying: 'Проверяем, что оба адреса указывают на один и тот же сервер…', dualAddressMismatch: 'Адреса ведут к разным серверам. Проверьте написание и попробуйте снова.', dualAddressInsufficient: 'Не удалось убедиться, что это один сервер. Удалите один адрес, чтобы продолжить.', dualAddressUnreachable: 'Не удалось достучаться до {{host}}. Проверьте адрес и сеть, затем попробуйте снова.', urlRemigrationTitle: 'Переместить данные библиотеки?', urlRemigrationMessage: 'Смена адреса перенесёт все данные библиотеки, анализа и кэша обложек с {{oldKey}} на {{newKey}}. Это нельзя отменить.', urlRemigrationConfirm: 'Переместить данные', urlRemigrationProgress: 'Перемещаем данные библиотеки…', urlRemigrationFailureInspect: 'Не удалось проверить, что нужно перенести. Попробуйте снова или откройте журнал отладки.', urlRemigrationFailureRun: 'Не удалось перенести данные библиотеки. Сохранённые данные не изменены — попробуйте снова.', urlRemigrationFailureCoverRename: 'Данные библиотеки перенесены, но файлы обложек не удалось переименовать. Обложки восстановятся при следующем обращении.', shareUsesLocalUrl: 'Использовать локальный адрес в ссылках общего доступа', shareUsesLocalUrlDesc: 'Применяется к приглашениям Orbit и ссылкам на библиотеку. По умолчанию — публичный адрес.', serverUsername: 'Логин', serverPassword: 'Пароль', addServer: 'Добавить сервер', addServerTitle: 'Новый сервер', editServer: 'Изменить', editServerTitle: 'Изменить сервер', useServer: 'Выбрать', deleteServer: 'Удалить', noServers: 'Нет сохранённых серверов.', serverActive: 'Активен', serverVersionUnknown: 'Версия сервера неизвестна', confirmDeleteServer: 'Удалить сервер «{{name}}»?', serverConnecting: 'Подключение…', serverConnected: 'Подключено!', serverFailed: 'Ошибка подключения.', testBtn: 'Проверить', testingBtn: 'Проверка…', serverCompatible: 'Разработано для Navidrome. Другие Subsonic-совместимые серверы (Gonic, Airsonic, …) могут работать с ограничениями, так как Psysonic использует много специфичных для Navidrome API-эндпоинтов.', userMgmtTitle: 'Управление пользователями', userMgmtDesc: 'Управляйте пользователями этого сервера. Требуются права администратора.', userMgmtNoAdmin: 'Для управления пользователями на этом сервере нужны права администратора.', userMgmtLoadError: 'Не удалось загрузить пользователей.', userMgmtLoadFriendly: 'Сервер не ответил — обычно разовая ошибка.', userMgmtRetry: 'Повторить', userMgmtEmpty: 'Пользователи не найдены.', userMgmtYouBadge: 'Вы', userMgmtAdminBadge: 'Админ', userMgmtAddUser: 'Добавить пользователя', userMgmtAddUserTitle: 'Новый пользователь', userMgmtEditUserTitle: 'Изменить пользователя', userMgmtUsername: 'Имя пользователя', userMgmtName: 'Отображаемое имя', userMgmtEmail: 'E-mail', userMgmtPassword: 'Пароль', userMgmtPasswordEditHint: 'Введите новый пароль, чтобы изменить его.', userMgmtRoleAdmin: 'Админ', userMgmtLibraries: 'Библиотеки', userMgmtLibrariesAdminHint: 'Администраторы автоматически имеют доступ ко всем библиотекам.', userMgmtLibrariesEmpty: 'На этом сервере нет доступных библиотек.', userMgmtLibrariesValidation: 'Выберите хотя бы одну библиотеку.', userMgmtLibrariesUpdateError: 'Пользователь сохранён, но не удалось назначить библиотеки', userMgmtNoLibraries: 'Библиотеки не назначены', userMgmtNeverSeen: 'Никогда', userMgmtSave: 'Сохранить', userMgmtCancel: 'Отмена', userMgmtDelete: 'Удалить', userMgmtEdit: 'Изменить', userMgmtConfirmDelete: 'Удалить пользователя «{{username}}»? Действие нельзя отменить.', userMgmtCreateError: 'Не удалось создать пользователя.', userMgmtUpdateError: 'Не удалось обновить пользователя.', userMgmtDeleteError: 'Не удалось удалить пользователя.', userMgmtCreated: 'Пользователь создан.', userMgmtUpdated: 'Пользователь обновлён.', userMgmtDeleted: 'Пользователь удалён.', userMgmtValidationMissing: 'Требуются имя пользователя, отображаемое имя и пароль.', userMgmtValidationMissingIdentity: 'Укажите имя пользователя и отображаемое имя.', userMgmtMagicStringGenerate: 'Сгенерировать magic string', userMgmtSaveAndMagicString: 'Сохранить и получить magic string', userMgmtMagicStringPasswordNavHint: 'Navidrome сохранит этот пароль для пользователя. Если он не совпадает с текущим, на сервере будет установлен новый пароль входа.', userMgmtMagicStringPlaintextWarning: 'Передавайте magic string осторожно: в ней пароль в открытом виде (кодирование — не шифрование). У кого есть полная строка, тот может войти под этим пользователем.', userMgmtMagicStringCopied: 'Magic string скопирован в буфер обмена.', userMgmtMagicStringCopyFailed: 'Не удалось скопировать в буфер обмена.', userMgmtMagicStringLoginFailed: 'Пароль не подошёл — не удалось проверить учётные данные.', userMgmtMagicStringModalTitle: 'Сгенерировать magic string', userMgmtMagicStringModalDesc: 'Введите пароль Subsonic для «{{username}}» — он попадёт в копируемую magic string.', userMgmtMagicStringModalConfirm: 'Скопировать строку', audiomuseTitle: 'AudioMuse-AI (Navidrome)', audiomuseBadge: 'AudioMuse-AI', audiomuseStatusActive: 'Активно', audiomuseStatusChecking: 'Проверка…', audiomuseStatusNotDetected: 'Не обнаружено', audiomuseStatusProbeFailed: 'Ошибка проверки', audiomuseDesc: 'Включите, если на этом сервере настроен плагин AudioMuse-AI для Navidrome. Появится Instant Mix для треков, а на странице исполнителя похожие будут браться с сервера вместо Last.fm.', audiomuseIssueHint: 'Недавно не удалось собрать Instant Mix — проверьте плагин Navidrome и API AudioMuse. Похожие исполнители подтянутся с Last.fm, если сервер ничего не вернёт.', connected: 'Подключено', failed: 'Ошибка', eqTitle: 'Эквалайзер', eqEnabled: 'Включить эквалайзер', eqPreset: 'Пресет', eqPresetCustom: 'Свой', eqPresetBuiltin: 'Встроенные', eqPresetCustomGroup: 'Мои пресеты', eqSavePreset: 'Сохранить как пресет', eqPresetName: 'Название пресета…', eqDeletePreset: 'Удалить пресет', eqResetBands: 'Сбросить полосы', eqPreGain: 'Предусиление', eqResetPreGain: 'Сбросить предусиление', eqAutoEqTitle: 'AutoEQ — поиск профиля наушников', eqAutoEqPlaceholder: 'Модель наушников или IEM…', eqAutoEqSearching: 'Поиск…', eqAutoEqNoResults: 'Ничего не найдено', eqAutoEqError: 'Ошибка поиска', eqAutoEqRateLimit: 'Лимит GitHub — попробуйте через минуту', eqAutoEqFetchError: 'Не удалось загрузить профиль EQ', lfmTitle: 'Last.fm', lfmConnect: 'Подключить Last.fm', lfmConnecting: 'Ожидание авторизации…', lfmConfirm: 'Я разрешил доступ', lfmConnected: 'Аккаунт', lfmDisconnect: 'Отключить', lfmConnectDesc: 'Привяжите Last.fm для скробблинга и статуса «Сейчас слушаю» прямо из Psysonic — настраивать Navidrome не нужно.', lfmOpenBrowser: 'Откроется браузер. Разрешите доступ на Last.fm, затем нажмите кнопку ниже.', lfmScrobbles: 'Скробблов: {{n}}', lfmMemberSince: 'С {{year}} года', scrobbleEnabled: 'Скробблинг включён', scrobbleDesc: 'Отправлять прослушивания на Last.fm после 50% трека', behavior: 'Поведение', cacheTitle: 'Макс. размер кэша', cacheDesc: 'Кэш обложек и фото исполнителей в хранилище приложения (IndexedDB). При нехватке места старые записи удаляются автоматически.', cacheUsedImages: 'Изображения:', cacheUsedOffline: 'Офлайн-треки:', cacheUsedHot: 'На диске:', hotCacheTrackCount: 'Треков в кэше:', cacheMaxLabel: 'Лимит', imageCacheScopeLabel: 'Область', imageCacheSubTitle: 'Превью в приложении', coverDiskCacheSubTitle: 'Обложки на диске', coverCacheStrategyTitle: 'Кэш обложек', coverCacheStrategyDesc: 'Для каждого сервера можно выбрать стратегию: Ленивый — загружать обложки по мере необходимости; Агрессивный — то же самое плюс дополнительный фоновый прогрев.', coverCacheStrategyLabel: 'Стратегия', coverCacheStrategyServerLabel: 'Сервер', coverCacheStrategyProgressLabel: 'Кэш', coverCacheStrategyActionsLabel: 'Действия', coverCacheStrategyLazy: 'Ленивый', coverCacheStrategyLazyDesc: 'Загружает обложки только когда они нужны.', coverCacheStrategyAggressive: 'Агрессивный', coverCacheStrategyAggressiveDesc: 'Как ленивый, но с дополнительным фоновым прогревом.', coverCacheStrategyDiskUsage: 'На диске: {{size}}', coverCacheStrategyProgressValue: '{{percent}}% ({{done}}/{{total}}) · {{size}}', coverCacheStrategyClearAction: 'Очистить кэш обложек', coverCacheStrategyClearTitle: 'Очистить кэш обложек?', coverCacheStrategyClearDesc: 'Удалить все кэшированные обложки для {{server}}. При необходимости скачаются снова.', coverCacheStrategyClearConfirm: 'Очистить', coverCacheStrategyClearCancel: 'Отмена', coverCacheStrategyClearSuccess: 'Кэш обложек для этого сервера очищен.', coverCacheStrategyClearError: 'Не удалось очистить кэш обложек.', coverCacheStrategyServerRemoved: 'удалённый сервер', cacheClearBtn: 'Очистить кэш', cacheClearWarning: 'Очистит кэш обложек и фото исполнителей в хранилище приложения. При необходимости скачаются снова.', cacheClearConfirm: 'Очистить кэш изображений', cacheClearCancel: 'Отмена', waveformCacheCleared: 'Кэш waveform очищен ({{count}} строк).', waveformCacheClearFailed: 'Не удалось очистить кэш waveform.', storageTabTitle: 'Офлайн и кэш', mediaDirTitle: 'Папка медиа', mediaDirDesc: 'Корневая папка локального воспроизведения: офлайн-библиотека — library/, буфер очереди — cache/.', mediaDirDefault: 'По умолчанию (данные приложения)', mediaDirChange: 'Сменить папку', mediaDirClear: 'Сбросить по умолчанию', mediaDirHint: 'Новые загрузки пойдут в выбранную папку. Старые файлы останутся на прежних путях, пока вы их не удалите.', offlineStorageTitle: 'Офлайн-хранилище', offlineDirTitle: 'Офлайн-библиотека (в приложении)', offlineDirDesc: 'Папка для треков, сохранённых для офлайн-прослушивания.', offlineDirDefault: 'По умолчанию (данные приложения)', offlineDirChange: 'Сменить папку', offlineDirClear: 'Сбросить по умолчанию', offlineDirHint: 'Новые загрузки пойдут в выбранную папку. Старые останутся на прежнем месте.', hotCacheTitle: 'Горячий кэш воспроизведения', hotCacheDisclaimer: 'Заранее подгружает следующие треки из очереди и сохраняет предыдущие. При включении использует место на диске и сеть.', hotCacheDirDefault: 'По умолчанию (данные приложения)', hotCacheDirChange: 'Сменить папку', hotCacheDirClear: 'Сбросить по умолчанию', hotCacheDirHint: 'При смене папки сбрасывается список в приложении; уже скачанные файлы остаются на старом пути, пока вы их не удалите.', hotCacheEnabled: 'Включить горячий кэш воспроизведения', hotCacheMaxMb: 'Максимальный размер кэша', hotCacheDebounce: 'Задержка после изменения очереди', hotCacheDebounceImmediate: 'Сразу', hotCacheDebounceSeconds: '{{n}} с', hotCacheClearBtn: 'Очистить горячий кэш', audioOutputDevice: 'Устройство вывода звука', audioOutputDeviceDesc: 'Выберите аудиоустройство для воспроизведения. Изменения применяются немедленно и перезапускают текущий трек.', audioOutputDeviceDefault: 'Системное по умолчанию', audioOutputDeviceRefresh: 'Обновить список устройств', audioOutputDeviceOsDefaultNow: 'текущий системный вывод', audioOutputDeviceListError: 'Не удалось загрузить список аудиоустройств.', audioOutputDeviceNotInCurrentList: 'нет в текущем списке', audioOutputDeviceMacNotice: 'В macOS воспроизведение в настоящее время всегда следует за системным устройством вывода по техническим причинам. Измените цель через Системные настройки → Звук или значок динамика в строке меню. Причина: CoreAudio запрашивает разрешение на использование микрофона при открытии не-стандартного потока — мы избегаем этого, всегда используя системный вывод по умолчанию.', hiResTitle: 'Нативное воспроизведение Hi-Res', hiResEnabled: 'Включить нативное Hi-Res воспроизведение', hiResDesc: "По умолчанию вывод ограничен до 44,1 кГц для максимальной стабильности. Включайте только если оборудование и сеть надёжно поддерживают высокие частоты (88,2 кГц+).", showArtistImages: 'Фото исполнителей', showArtistImagesDesc: 'Показывать обложки в разделе «Исполнители». По умолчанию выключено — меньше нагрузки на диск и сеть.', showOrbitTrigger: 'Показывать «Orbit» в шапке', showOrbitTriggerDesc: 'Кнопка в шапке для запуска или присоединения к совместной сессии. Скрой, если не используешь Orbit — здесь же можно включить обратно.', showTrayIcon: 'Иконка в трее', showTrayIconDesc: 'Показывать Psysonic в области уведомлений / строке меню.', minimizeToTray: 'Сворачивать в трей', minimizeToTrayDesc: 'При закрытии окна не выходить из приложения, а оставаться в трее.', clockFormat: 'Формат времени', clockFormatDesc: 'Формат времени для ETA очереди и предпросмотра таймера сна.', clockFormatAuto: 'Авто (системный)', clockFormatTwentyFour: '24-часовой', clockFormatTwelve: '12-часовой (AM/PM)', preloadMiniPlayer: 'Предзагрузка мини-плеера', preloadMiniPlayerDesc: 'Создаёт окно мини-плеера в фоне при запуске приложения, чтобы при первом открытии содержимое отображалось мгновенно. Использует немного больше памяти.', useCustomTitlebar: 'Своя строка заголовка', useCustomTitlebarDesc: 'Заменить системную строку заголовка встроенной, в стиле темы приложения. Отключите, чтобы использовать родную строку GNOME/GTK и т.д.', linuxWebkitSmoothScroll: 'Плавное колесо (Linux)', linuxWebkitSmoothScrollDesc: 'Вкл — инерция. Выкл — по шагам, как в GTK.', linuxWebkitInputForceRepaint: 'Перерисовывать поля ввода при фокусе (Linux)', linuxWebkitInputForceRepaintDesc: 'Обход проблемы WebKitGTK 2.50.x, когда текстовые поля зависают при клике. Иконки поиска кратко мигают при фокусе.', linuxWaylandTextRender: 'Рендеринг текста Wayland (Linux)', linuxWaylandTextRenderDesc: 'Сглаживание в интерфейсе меняется сразу. Политику ускорения WebKit (чёткий / GPU) сохраняем и применяем при следующем запуске — переключение на лету на части сборок зависает в WebKitGTK.', linuxWaylandTextRenderBalanced: 'Сбалансированный', linuxWaylandTextRenderSharp: 'Чёткий (меньше GPU)', linuxWaylandTextRenderGpu: 'С приоритетом GPU', linuxWaylandTextRenderMinimal: 'Минимальный (сглаживание по умолчанию)', discordRichPresence: 'Статус в Discord', discordRichPresenceDesc: 'Показывать текущий трек в профиле и статусе Discord. Нужен запущенный клиент Discord.', discordCoverSource: 'Источник обложки', discordCoverSourceDesc: 'Откуда загружать обложку альбома для профиля Discord.', discordCoverNone: 'Нет (только иконка приложения)', discordCoverServer: 'Сервер (через информацию об альбоме)', discordCoverApple: 'Apple Music', discordOptions: 'Расширенные параметры Discord', discordTemplates: 'Пользовательские шаблоны текста', discordTemplatesDesc: 'Настройте, какая информация отображается в профиле Discord. Переменные: {title}, {artist}, {album}', discordTemplateDetails: 'Основная строка (details)', discordTemplateState: 'Вторичная строка (state)', discordTemplateLargeText: 'Подсказка альбома (largeText)', discordTemplateName: 'Строка в списке пользователей (name)', nowPlayingEnabled: 'Показывать в «Сейчас играет»', nowPlayingEnabledDesc: 'Отправлять на сервер, что вы сейчас слушаете. Отключите, чтобы не делиться этим.', enableBandsintown: 'Даты туров Bandsintown', enableBandsintownDesc: 'Показывает предстоящие концерты текущего исполнителя на вкладке «Инфо». Данные берутся из публичного API Bandsintown.', lyricsServerFirst: 'Предпочитать тексты с сервера', lyricsServerFirstDesc: 'Проверять тексты песен, предоставленные сервером (встроенные теги, sidecar-файлы) перед запросом LRCLIB. Отключите, чтобы сначала использовать LRCLIB.', enableNeteaselyrics: 'Тексты из Netease Cloud Music', enableNeteaselyricsDesc: 'Использовать Netease Cloud Music как последний источник текстов, когда остальные способы не находят ничего. Лучшее покрытие для азиатской и международной музыки.', lyricsSourcesTitle: 'Источники текстов', lyricsSourcesDesc: 'Выберите источники для поиска текстов и их порядок. Перетаскивайте для сортировки. Отключённые источники пропускаются.', lyricsSourceServer: 'Сервер', lyricsSourceLrclib: 'LRCLIB', lyricsSourceNetease: 'Netease Cloud Music', lyricsYouLyPlus: 'YouLyPlus (Караоке)', lyricsYouLyPlusDesc: 'Синхронизация слово-в-слово из общественного бэкенда (Apple Music, Spotify, Musixmatch, QQ). Пробуется первым; включённые источники ниже служат запасным вариантом.', lyricsSourcesFallbackHint: 'Используются как запасной вариант, когда YouLyPlus ничего не находит. Перетащите для изменения порядка.', lyricsSourcesPrimaryHint: 'Пробуются по порядку. Перетащите для изменения порядка. Всё выключено = текст отключён.', lyricsStaticOnly: 'Показывать текст статично', lyricsStaticOnlyDesc: 'Синхронизированный текст отображается без авто-прокрутки и подсветки слов.', downloadsTitle: 'Экспорт ZIP и архивов', downloadsFolderDesc: 'Куда сохранять альбомы в ZIP архиве на диск.', downloadsDefault: 'Папка «Загрузки» по умолчанию', pickFolder: 'Выбрать', pickFolderTitle: 'Папка для загрузок', clearFolder: 'Сбросить папку', logout: 'Выйти', aboutTitle: 'О Psysonic', aboutDesc: 'Современный десктопный плеер, созданный для Navidrome. Использует API Subsonic плюс специфичные для Navidrome расширения. На Tauri v2 и нативном аудиодвижке на Rust — лёгкий и быстрый: волновая шкала, синхронные тексты, Last.fm, 10-полосный EQ, кроссфейд, воспроизведение без пауз, Replay Gain, жанры и много тем оформления.', aboutLicense: 'Лицензия', aboutLicenseText: 'GNU GPL v3 — свободное использование и изменение на тех же условиях.', aboutRepo: 'Исходный код на GitHub', aboutVersion: 'Версия', aboutBuiltWith: 'Tauri · React · TypeScript · Rust/rodio', aboutReleaseNotesLabel: 'Примечания к выпуску', aboutReleaseNotesLink: 'Открыть «Что нового» этой версии', aboutContributorsLabel: 'Участники', showChangelogOnUpdate: 'Показывать «Что нового» после обновления', showChangelogOnUpdateDesc: 'После обновления над «Сейчас играет» появится ненавязчивый баннер журнала изменений. Клик открывает заметки о выпуске, X скрывает.', libraryGridMaxColumnsTitle: 'Сетки карточек в библиотеке', libraryGridMaxColumnsPerfHint: 'Больше колонок — больше плиток в ряд и больше работы по вёрстке и отрисовке; на очень больших библиотеках или слабом железе это заметнее.', libraryGridMaxColumnsRangeLabel: 'Максимум колонок ({{min}}–{{max}})', libraryGridMaxColumnsDesc: 'Действует для альбомов, исполнителей, плейлистов, радио, офлайн-библиотеки и других экранов с карточками. Меньше колонок — крупнее плитки и обычно меньше нагрузка на CPU.', libraryIndexTitle: 'Локальный индекс библиотеки (preview)', libraryIndexDesc: 'Локальная копия каталога каждого сервера для быстрого поиска и офлайн-доступа. Первичная индексация для всех серверов; офлайн-серверы синхронизируются позже автоматически.', libraryIndexDeltaHint: 'Фоновая дельта-синхронизация проверяет привязанные серверы каждые 30 с и запускается по расписанию — обычно раз в 5–45 минут в зависимости от размера библиотеки и нагрузки.', libraryIndexEnable: 'Включить локальный индекс', libraryIndexEnableAllDesc: 'Индексировать и синхронизировать все настроенные серверы в фоне.', libraryIndexNoServer: 'Сначала добавьте сервер.', libraryIndexServerListTitle: 'Индексируемые серверы', libraryIndexAllExcluded: 'Все серверы исключены из синхронизации.', libraryIndexServerOffline: 'Сервер офлайн — синхронизация отложена', libraryIndexServerDeferred: 'Отложено', libraryIndexServerSyncing: 'Синхронизация…', libraryIndexFullResync: 'Полная пересинхронизация', libraryIndexDeltaSync: 'Быстрая дельта', libraryIndexExcludeServer: 'Исключить из синхронизации', libraryIndexExcludingServer: 'Отключается…', libraryIndexExcludedTitle: 'Исключены из синхронизации', libraryIndexIncludeServer: 'Включить снова', libraryIndexIncludingServer: 'Подключается…', libraryIndexStatus: 'Статус', libraryIndexStatusIdle: 'Ожидание', libraryIndexStatusProbing: 'Проверка сервера…', libraryIndexStatusInitial: 'Первичная синхронизация…', libraryIndexStatusReady: 'Готово ({{count}} треков)', libraryIndexStatusError: 'Ошибка — см. логи', libraryIndexProgressIngest: 'Проиндексировано {{count}} треков…', libraryIndexProgressVerify: 'Проверено {{checked}} (удалено {{deleted}})', libraryIndexSyncNow: 'Синхронизировать', libraryIndexVerify: 'Проверить целостность', libraryIndexCancel: 'Отмена', libraryIndexAutoReconcile: 'Авто-сверка при падении счётчика', libraryIndexAutoReconcileDesc: 'Автоматически искать удалённые треки, когда на сервере их меньше ожидаемого.', libraryIndexSyncError: 'Ошибка синхронизации: {{error}}', libraryIndexBindError: 'Не удалось включить индекс: {{error}}', analyticsStrategyTitle: 'Стратегии анализа', analyticsStrategyDesc: 'Для каждого сервера можно выбрать стратегию: Ленивый — анализ по мере прослушивания; Агрессивный — фоновый анализ всей библиотеки.', analyticsStrategyLabel: 'Стратегия', analyticsStrategyLazy: 'Ленивая', analyticsStrategyLazyDesc: 'Анализирует только треки, которые вы слушаете или которые уже попали в кэш.', analyticsStrategyAdvanced: 'Агрессивный', analyticsStrategyAdvancedDesc: 'Запускает фоновый анализ всей библиотеки и скачивает треки для анализа.', analyticsStrategyPriorityTitle: 'Приоритет анализа (всегда)', analyticsStrategyPriorityHigh: '1 — Сейчас играет: скачивание и анализ в первую очередь (байты воспроизведения, loudness backfill или HTTP при необходимости).', analyticsStrategyPriorityMiddle: '2 — Следующие: ~5 треков в очереди и соседи hot cache — анализ из уже скачанных байтов, HTTP backfill только при промахе.', analyticsStrategyPriorityLow: '3 — Библиотечный batch (только Агрессивный): автоматическая фоновая очередь в хвосте; пополняется по watermark (~3× потоков), не дожидаясь полного опустошения.', analyticsStrategyServerLabel: 'Сервер', analyticsStrategyProgressLabel: 'Прогресс анализа:', analyticsStrategyProgressValue: '{{percent}}% ({{done}}/{{total}})', analyticsStrategyActionsLabel: 'Действия', analyticsStrategyParallelismLabel: 'Параллельные потоки', analyticsStrategyParallelismValue: '{{n}} потоков', analyticsStrategyParallelismDesc: 'Сколько треков одновременно скачивать и анализировать (HTTP + CPU). Больше значение — быстрее догоняет библиотеку, но выше нагрузка на сеть и CPU.', analyticsStrategyAdvancedWarning: 'Агрессивный режим скачивает всю библиотеку для анализа и создаёт заметную нагрузку на сеть и процессор. Рекомендуется в локальной сети или для не очень больших библиотек.', analyticsStrategyServerRemoved: 'Удалённый сервер', analyticsStrategyClearAction: 'Очистить анализ', analyticsStrategyClearTitle: 'Очистить анализ?', analyticsStrategyClearDesc: 'Очистка анализа для {{server}} удалит кэш волн и loudness. При повторном добавлении сервера индексация может занять много времени.', analyticsStrategyClearCancel: 'Отмена', analyticsStrategyClearConfirm: 'Очистить анализ', analyticsStrategyClearSuccess: 'Анализ удалён для удалённого сервера.', analyticsStrategyClearError: 'Не удалось очистить анализ для удалённого сервера.', analyticsStrategyProgressEmptyAfterFailed: '100% (0/0, треки помечены как проблемные)', analyticsFailedTracksOpenTitle: 'Проблемных треков: {{count}}', analyticsFailedTracksTitle: 'Проблемные треки анализа — {{server}}', analyticsFailedTracksDesc: 'Эти треки многократно падали на decode/enrichment и исключены из фонового автоанализа.', analyticsFailedTracksLoading: 'Загрузка списка проблемных треков…', analyticsFailedTracksEmpty: 'Для этого сервера проблемных треков нет.', analyticsFailedTracksClose: 'Закрыть', analyticsFailedTracksExport: 'Экспорт списка', analyticsFailedTracksExportSuccess: 'Список проблемных треков экспортирован ({{count}}).', analyticsFailedTracksExportError: 'Не удалось экспортировать список проблемных треков.', analyticsFailedTracksRescan: 'Рескан проблемных треков', analyticsFailedTracksRescanSuccess: 'Рескан запланирован для {{count}} проблемных треков.', analyticsFailedTracksRescanError: 'Не удалось запустить рескан проблемных треков.', analyticsFailedTracksLoadError: 'Не удалось загрузить список проблемных треков.', randomMixTitle: 'Чёрный список случайного микса', luckyMixMenuTitle: 'Показывать «Мне повезёт» в меню', luckyMixMenuDesc: 'Включает «Мне повезёт» в «Собрать микс», а при раздельной навигации — отдельным пунктом меню. Видно только при включённом AudioMuse на активном сервере.', randomMixBlacklistTitle: 'Свои слова-фильтры', randomMixBlacklistDesc: 'Треки скрываются, если слово встречается в жанре, названии, альбоме или исполнителе (когда включён фильтр выше).', randomMixBlacklistPlaceholder: 'Добавить слово…', randomMixBlacklistAdd: 'Добавить', randomMixBlacklistEmpty: 'Пока пусто.', randomMixHardcodedTitle: 'Встроенные слова (при включённом фильтре)', tabAudio: 'Звук', tabStorage: 'Офлайн и кэш', tabAppearance: 'Внешний вид', tabThemes: 'Темы', themesYourThemesTitle: 'Ваши темы', themesCvdTooltip: 'Безопасно при дальтонизме — дейтеранопия, протанопия, тританопия', themeAnimationWarning: 'Эта тема использует анимации, которые могут повысить нагрузку на процессор в вашей конфигурации (Nvidia/Linux или композитинг выключен).', themeStoreTitle: 'Магазин тем', themeStoreSubmitText: 'Создали свою тему? Поделитесь с сообществом — подробности в репозитории тем.', themeStoreSubmitLink: 'Открыть репозиторий тем', themeStoreNetworkNotice: 'Магазин тем загружает каталог и превью с GitHub. Личные данные не отправляются.', themeStoreStatsNotice: 'Даты последнего изменения обновляются раз в день (около 04:17 UTC).', themeStoreSearchPlaceholder: 'Поиск тем…', themeStoreFilterMode: 'Фильтр по режиму', themeStoreModeAll: 'Все', themeStoreModeDark: 'Тёмные', themeStoreModeLight: 'Светлые', themeStoreRefresh: 'Обновить', themeStoreLoading: 'Загрузка тем…', themeStoreError: 'Не удалось загрузить магазин тем. Проверьте подключение.', themeStoreRetry: 'Повторить', themeStoreOfflineTitle: 'Магазин тем недоступен', themeStoreEmpty: 'Нет тем, соответствующих фильтрам.', themeStoreActive: 'Активна', themeStoreEnlarge: 'Увеличить превью', themeStoreSortNewest: 'Новые', themeStoreSortName: 'По алфавиту', themeStoreByAuthor: 'от {{author}}', themeStoreLastChanged: 'Изменён', themeMigrationNoticeTitle: 'Тема перенесена в магазин', themeMigrationNoticeBody: '{{themes}} больше не входит в приложение. Вы можете переустановить её из магазина тем (Настройки → Темы) или выбрать другую тему.', themeMigrationNoticeOpen: 'Открыть магазин тем', themeStoreOffline: 'Показан последний кэшированный каталог — похоже, вы офлайн.', themeStoreInstall: 'Установить', themeStoreInstalling: 'Установка…', themeStoreApply: 'Применить', themeStoreUpdate: 'Обновить', themeStoreUpdating: 'Обновление…', themeStoreUninstall: 'Удалить', themeStoreInstallFailed: 'Ошибка установки', themeStorePagePrev: 'Предыдущая страница', themeStorePageNext: 'Следующая страница', themeStorePageStatus: 'Страница {{page}} из {{total}}', themeImportTitle: 'Импорт темы', themeImportButton: 'Импортировать тему…', themeImporting: 'Импорт…', themeImportHint: 'Загружает тему, упакованную в .zip (manifest.json + theme.css).', themeImportSuccess: '«{{name}}» импортирована.', themeImportErrorTitle: 'Не удалось импортировать эту тему', themeImportErrorBody: 'Он не соответствует формату тем Psysonic. Возможно, он создан для другой версии или файл неполный — проверьте, что выбрали правильный .zip, или обратитесь к автору темы.', themeImportErrorDetails: 'Технические подробности', themeImportConfirmTitle: 'Установить тему?', themeImportConfirmBody: 'Установить «{{name}}» от {{author}}?', themeImportConfirmRisk: 'Импортированные темы не проверяются — устанавливайте только темы, которым доверяете.', tabLibrary: 'Библиотека', tabServers: 'Серверы', tabLyrics: 'Тексты песен', tabPersonalisation: 'Персонализация', tabIntegrations: 'Интеграции', inputKeybindingsTitle: 'Горячие клавиши', aboutContributorsCount_one: '{{count}} вклад', aboutContributorsCount_few: '{{count}} вклада', aboutContributorsCount_many: '{{count}} вкладов', aboutContributorsCount_other: '{{count}} вклада', searchPlaceholder: 'Поиск в настройках…', searchNoResults: 'Ничего не найдено по вашему запросу.', aboutMaintainersLabel: 'Сопровождающие', integrationsPrivacyTitle: 'Уведомление о конфиденциальности', integrationsPrivacyBody: 'Все интеграции на этой вкладке включаются по желанию и при активации отправляют данные во внешние сервисы или на ваш сервер Navidrome. Last.fm получает вашу историю прослушивания, Discord показывает текущую композицию в вашем профиле, Bandsintown опрашивается по артисту для получения дат гастролей, а «Сейчас играет» делится текущей композицией с другими пользователями вашего сервера Navidrome. Если вы не хотите ничего из этого, просто оставьте соответствующий раздел отключённым.', homeCustomizerTitle: 'Для вас', queueModeTitle: 'Режим отображения очереди', queueModeQueueSub: 'Показывает только предстоящие треки. Текущий трек остаётся в заголовке и исчезает из списка после воспроизведения.', queueModePlaylistSub: 'Сохраняет всю очередь в списке, текущий трек выделен вверху; воспроизведённые треки остаются.', queueModeTimelineSub: 'Центрировать текущий трек: история воспроизведения сверху, предстоящие треки (в порядке перемешивания) снизу.', queueToolbarTitle: 'Панель инструментов очереди', queueToolbarReset: 'Сбросить', queueToolbarSeparator: 'Разделитель', sidebarTitle: 'Боковая панель', sidebarReset: 'Сбросить порядок', artistLayoutTitle: 'Разделы страницы исполнителя', artistLayoutDesc: 'Перетаскивайте, чтобы изменить порядок, переключайте, чтобы скрыть отдельные разделы страницы исполнителя. Разделы без данных пропускаются автоматически.', artistLayoutReset: 'Сбросить', artistLayoutBio: 'Биография исполнителя', artistLayoutTopTracks: 'Топ-треки', artistLayoutSimilar: 'Похожие исполнители', artistLayoutAlbums: 'Альбомы', artistLayoutFeatured: 'Также участвует в', playlistLayoutTitle: 'Макет страницы плейлиста', playlistLayoutDesc: 'Показать или скрыть отдельные элементы на странице плейлиста.', playlistLayoutReset: 'Сбросить', playerBarTitle: 'Панель плеера', playerBarReset: 'Сбросить', playerBarStarRating: 'Оценка звёздами', playerBarFavorite: 'Избранное (сердечко)', playerBarLastfmLove: 'Last.fm love', playerBarPlaybackRate: 'Скорость', playerBarEqualizer: 'Эквалайзер', playerBarMiniPlayer: 'Мини-плеер', playbackRateTitle: 'Скорость воспроизведения', playbackRateEnabled: 'Включить изменение скорости', playbackRateEnabledDesc: 'Глобальная скорость для всех треков. Не применяется к радио и превью.', playbackRateStrategy: 'Стратегия', playbackRateStrategySpeed: 'Скорость', playbackRateStrategyVarispeed: 'С тоном', playbackRateStrategyPreserve: 'Сдвиг тона', playbackRateSpeed: 'Скорость', playbackRatePitch: 'Тон', playbackRateDerivedPitch: 'Сдвиг тона от скорости: {{value}}', playbackRateAutoPitch: 'Тон корректируется автоматически.', playbackRateHint: '«Скорость» сохраняет высоту тона при изменении темпа. «С тоном» меняет тон вместе со скоростью. «Сдвиг тона» — ручное смещение. Выше нагрузка на процессор, чем у режима «С тоном». Не для радио, превью и Orbit.', playbackRateNeutral: 'При 1.0× и нулевом сдвиге тона воспроизведение обычное.', playbackRateOrbitPaused: 'Во время сессии Orbit не применяется — воспроизведение остаётся 1.0× для синхронизации.', playbackRateOrbitPausedShort: 'Orbit: 1.0× для синхронизации.', advancedMode: 'Дополнительно', advancedModeTooltip: 'Показывать расширенные параметры во всех вкладках настроек. Вклады сообщества, которые не обязательно соответствуют дизайн-философии мейнтейнеров Psysonic.', advancedBadge: 'Дополнительно', sidebarDrag: 'Перетащите для порядка', sidebarFixed: 'Всегда показывать', nowPlayingTopTitle: '«Сейчас играет» вверху', nowPlayingTopDesc: 'Закрепить пункт «Сейчас играет» вверху боковой панели вместо нижней части.', randomNavSplitTitle: 'Разделить навигацию микса', randomNavSplitDesc: 'Показывать «Случайный микс», «Случайные альбомы» и «Мне повезёт» как отдельные пункты боковой панели вместо хаба «Собрать микс».', tabInput: 'Ввод', tabUsers: 'Пользователи', tabSystem: 'Система', loggingTitle: 'Логирование', loggingModeDesc: 'Управляет подробностью логов backend в терминале.', loggingModeOff: 'Выключено', loggingModeNormal: 'Обычное', loggingModeDebug: 'Дебаг', loggingExport: 'Экспорт логов', loggingExportSuccess: 'Логи экспортированы ({{count}} строк).', loggingExportError: 'Не удалось экспортировать логи.', ratingsSectionTitle: 'Рейтинги', ratingsSkipStarTitle: 'Скипнуть для 1 звезды', ratingsSkipStarDesc: 'При N скипов подряд ставить 1★ треку. Только для не оцененных ранее.', ratingsSkipStarThresholdLabel: 'Скипов', ratingsMixFilterTitle: 'Фильтрация по рейтингу', ratingsMixFilterDesc: 'Фильтровать с низким рейтингом в «{{mix}}» и «{{albums}}». Повторный клик по выбранной звезде отключает порог.', ratingsMixMinSong: 'Песни', ratingsMixMinAlbum: 'Альбомы', ratingsMixMinArtist: 'Исполнители', ratingsMixMinThresholdAria: 'Минимум звёзд: {{label}}', backupTitle: 'Резервная копия', backupExport: 'Экспорт настроек', backupExportDesc: 'Сохраняет настройки, серверы, Last.fm, тему, EQ и горячие клавиши в файл .psybkp. Пароли в открытом виде — храните файл в безопасности.', backupImport: 'Импорт настроек', backupImportDesc: 'Восстановить из .psybkp. Приложение перезапустится.', backupImportConfirm: 'Текущие настройки будут заменены. Продолжить?', backupImportAny: 'Импорт резервной копии', backupImportAnyConfirm: 'Импортировать выбранный файл резервной копии и применить его содержимое (настройки, базы библиотеки или полный архив). Продолжить?', backupSuccess: 'Копия сохранена', backupImportSuccess: 'Настройки восстановлены — перезапуск…', backupImportError: 'Файл повреждён или не подходит.', backupModeFull: 'Полный', backupModeLibrary: 'Базы библиотеки', backupModeConfig: 'Настройки', backupFullDesc: 'Архивирует настройки и базы библиотеки в один файл резервной копии.', backupFullExport: 'Экспорт полного архива', backupFullImport: 'Импорт полного архива', backupFullImportConfirm: 'Настройки будут перезаписаны, текущие базы библиотеки будут заменены и сохранены в .bak. Продолжить?', backupFullExportSuccess: 'Полный архив экспортирован.', backupFullImportSuccess: 'Полный архив импортирован — перезапуск…', backupFullImportError: 'Не удалось импортировать полный архив.', backupLibraryExport: 'Экспорт баз', backupLibraryExportDesc: 'Создаёт сжатый архив с чистыми SQLite-снимками баз библиотеки.', backupLibraryImport: 'Импорт баз', backupLibraryImportDesc: 'Восстанавливает базы библиотеки из архива. Текущие базы перед заменой переносятся в .bak.', backupLibraryImportConfirm: 'Текущие базы библиотеки будут заменены и сохранены в .bak. Продолжить?', backupLibraryExportSuccess: 'Копия баз экспортирована.', backupLibraryImportSuccess: 'Копия баз импортирована.', backupLibraryImportError: 'Не удалось импортировать копию баз.', backupOverlayExportTitle: 'Создаём резервную копию…', backupOverlayImportTitle: 'Восстанавливаем резервную копию…', backupOverlayHint: 'Окно можно не закрывать, идёт обработка файлов. Ввод временно заблокирован.', shortcutsReset: 'Сбросить', shortcutListening: 'Нажмите клавишу…', shortcutUnbound: '—', globalShortcutsTitle: 'Глобальные сочетания', globalShortcutsNote: 'Работают, когда окно не в фокусе. Нужен модификатор: Ctrl, Alt или Super.', shortcutClear: 'Сбросить', shortcutPlayPause: 'Пауза / воспроизведение', shortcutNext: 'Следующий трек', shortcutPrev: 'Предыдущий трек', shortcutVolumeUp: 'Громче', shortcutVolumeDown: 'Тише', shortcutSeekForward: 'Вперёд на 10 с', shortcutSeekBackward: 'Назад на 10 с', shortcutToggleQueue: 'Показать / скрыть очередь', shortcutOpenFolderBrowser: 'Открыть {{folderBrowser}}', shortcutFullscreenPlayer: 'Полноэкранный плеер', shortcutNativeFullscreen: 'Системный полный экран', shortcutOpenMiniPlayer: 'Открыть мини-плеер', shortcutStartSearch: 'Начать поиск', shortcutStartAdvancedSearch: 'Начать расширенный поиск', shortcutToggleSidebar: 'Переключить боковую панель', shortcutMuteSound: 'Без звука', shortcutToggleEqualizer: 'Открыть / переключить эквалайзер', shortcutToggleRepeat: 'Переключить повтор', shortcutOpenNowPlaying: 'Открыть «Сейчас играет»', shortcutShowLyrics: 'Показать текст песни', shortcutFavoriteCurrentTrack: 'Добавить текущий трек в избранное', shortcutOpenHelp: 'Справка', playbackTitle: 'Воспроизведение', replayGain: 'Replay Gain', replayGainDesc: 'Выравнивание громкости по метаданным ReplayGain', replayGainMode: 'Режим', replayGainAuto: 'Авто', replayGainAutoDesc: 'Использует громкость альбома, когда соседние треки в очереди из того же альбома, иначе громкость трека.', replayGainTrack: 'По треку', replayGainAlbum: 'По альбому', replayGainPreGain: 'Предусиление (файлы с тегами)', replayGainPreGainDesc: 'Общая прибавка, добавляемая к каждому расчёту ReplayGain. Удобно, если библиотека в целом кажется тихой.', replayGainFallback: 'Резерв (без тегов / радио)', replayGainFallbackDesc: 'Применяется к трекам (и радиопотокам) без тегов ReplayGain, чтобы непомеченный контент не звучал громче остального.', normalization: 'Нормализация', normalizationDesc: 'Выровнять воспринимаемую громкость между треками, альбомами и радио.', normalizationOff: 'Выкл.', normalizationReplayGain: 'ReplayGain', normalizationLufs: 'LUFS', loudnessTargetLufs: 'Целевой LUFS', loudnessTargetLufsDesc: 'Опорная громкость, к которой подгоняются все треки. Меньше число = громче на выходе. Стриминг-сервисы обычно держат около -14 LUFS.', loudnessPreAnalysisAttenuation: 'Ослабление до измерения', loudnessPreAnalysisAttenuationDesc: 'Насколько приглушить звук, пока для трека нет сохранённого измерения громкости. При стриме дальше идут лишь грубые оценки, не полный LUFS. 0 dB — без дополнительного приглушения; ниже — тише. Справа показывается фактическая поправка для текущей цели.', loudnessPreAnalysisAttenuationRef: 'Фактически {{eff}} dB при цели {{tgt}} LUFS.', loudnessPreAnalysisAttenuationReset: 'По умолчанию', loudnessFirstPlayNote: 'При первом прослушивании нового трека громкость может ненадолго колебаться, пока идёт измерение. Со второго раза применяется уже сохранённое значение и всё стабильно. Следующие треки в очереди обычно анализируются во время предыдущей композиции, поэтому на практике это случается редко.', crossfade: 'Кроссфейд', crossfadeDesc: 'Плавный переход между треками', crossfadeSecs: '{{n}} с', notWithGapless: 'Недоступно при включённом режиме без пауз', notWithCrossfade: 'Недоступно при включённом кроссфейде', gapless: 'Без пауз между треками', gaplessDesc: 'Заранее подгружать следующий трек, чтобы не было тишины', preservePlayNextOrder: 'Сохранять порядок «Играть следующим»', preservePlayNextOrderDesc: 'Новые элементы «Играть следующим» становятся в конец очереди, а не лезут вперёд.', trackPreviewsTitle: 'Превью треков', trackPreviewsToggle: 'Включить превью треков', trackPreviewsDesc: 'Показывать встроенные кнопки воспроизведения и превью в списках треков для быстрого прослушивания фрагмента.', trackPreviewStart: 'Начальная позиция', trackPreviewStartDesc: 'С какого момента трека начинается превью (% от длительности).', trackPreviewDuration: 'Длительность', trackPreviewDurationDesc: 'Сколько играет каждое превью до автоматической остановки.', trackPreviewDurationSecs: '{{n}} с', trackPreviewLocationsTitle: 'Где показывать превью', trackPreviewLocationsDesc: 'Выберите, в каких списках показывать кнопки превью.', trackPreviewLocation_suggestions: 'В предложениях плейлиста', trackPreviewLocation_albums: 'В списках треков альбома', trackPreviewLocation_playlists: 'В плейлистах', trackPreviewLocation_favorites: 'В избранном', trackPreviewLocation_artist: 'В топ-треках исполнителя', trackPreviewLocation_randomMix: 'В Random Mix', nextTrackBufferingTitle: 'Буферизация', infiniteQueue: 'Бесконечная очередь', infiniteQueueDesc: 'Подмешивать случайные треки, когда очередь закончится', experimental: 'Экспериментально', sidebarLyricsStyle: 'Стиль прокрутки текста', sidebarLyricsStyleClassic: 'Классический', sidebarLyricsStyleClassicDesc: 'Активная строка центрируется.', sidebarLyricsStyleApple: 'Apple Music-like', sidebarLyricsStyleAppleDesc: 'Активная строка фиксируется сверху с плавной анимацией.', seekbarStyle: 'Стиль прогресс-бара', seekbarStyleDesc: 'Выбор внешнего вида полосы воспроизведения', seekbarTruewave: 'Реальная форма волны', seekbarPseudowave: 'Псевдо форма волны', seekbarLinedot: 'Линия и точка', seekbarBar: 'Полоса', seekbarThick: 'Толстая полоса', seekbarSegmented: 'Сегменты', seekbarNeon: 'Неон', seekbarPulsewave: 'Пульс-волна', seekbarParticletrail: 'Частицы', seekbarLiquidfill: 'Жидкость', seekbarRetrotape: 'Ретро-лента', themeSchedulerTitle: 'Расписание тем', themeSchedulerEnable: 'Включить расписание тем', themeSchedulerEnableSub: 'Автоматически переключается между двумя темами в зависимости от времени суток', themeSchedulerDayTheme: 'Дневная тема', themeSchedulerDayStart: 'День начинается в', themeSchedulerNightTheme: 'Ночная тема', themeSchedulerNightStart: 'Ночь начинается в', themeSchedulerActiveHint: 'Расписание тем активно - темы переключаются автоматически.', visualOptionsTitle: 'Визуальные Настройки', coverArtBackground: 'Фон Обложки', coverArtBackgroundSub: 'Показывать размытую обложку как фон в заголовках альбомов и плейлистов', playlistCoverPhoto: 'Обложка Плейлиста', playlistCoverPhotoSub: 'Показывать сетку обложек в детальном виде плейлиста', showBitrate: 'Показывать Битрейт', showBitrateSub: 'Отображать битрейт аудио в списках треков', floatingPlayerBar: 'Плавающая панель плеера', floatingPlayerBarSub: 'Держать панель плеера плавающей над содержимым', uiScaleTitle: 'Масштаб интерфейса', uiScaleLabel: 'Масштаб', confirmDeleteServerLibrary: 'Также удалить локальный индекс библиотеки этого сервера? Нажмите «Отмена», чтобы сохранить кэш-копию для офлайн-использования.', };