mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-21 14:55:43 +00:00
606a150e01
* feat(settings): clock format setting (Auto / 24h / 12h) Reported on the Psysonic Discord — the Queue side panel's ETA label and the sleep-timer preview both render via `formatClockTime`, which just calls `toLocaleTimeString` and so follows the user's system locale. On en-US that means AM/PM, with no in-app way out. Add a tri-state **Clock Format** setting under **Settings → System → App Behavior**: * `auto` (default) — keep the existing locale-driven behaviour, so bestehende installs are unaffected on first launch. * `24h` — force 24-hour wall-clock output everywhere `formatClockTime` is used. * `12h` — force AM/PM output. Wired through `authStore` (`clockFormat`, `setClockFormat`), exposed via `CustomSelect` in `SystemTab`, and threaded into the two consumers (`QueueHeader`, `PlaybackDelayModal`) so they re-render on change. `formatClockTime` itself stays a pure helper — it accepts the setting as an optional second argument and maps it to `hour12`. Locale coverage: all nine bundled locales (en, de, es, fr, nl, nb, ru, zh, ro) get the four new settings strings. Pin tests added for the `setClockFormat` setter and the `hour12` mapping in `formatClockTime`. * docs(changelog): clock format setting + contributors (PR #742)
482 lines
40 KiB
TypeScript
482 lines
40 KiB
TypeScript
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',
|
||
serverUsername: 'Логин',
|
||
serverPassword: 'Пароль',
|
||
addServer: 'Добавить сервер',
|
||
addServerTitle: 'Новый сервер',
|
||
useServer: 'Выбрать',
|
||
deleteServer: 'Удалить',
|
||
noServers: 'Нет сохранённых серверов.',
|
||
serverActive: 'Активен',
|
||
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)',
|
||
audiomuseDesc:
|
||
'Включите, если на этом сервере настроен <pluginLink>плагин AudioMuse-AI для Navidrome</pluginLink>. Появится 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:
|
||
'Обложки и фото исполнителей. При переполнении старые записи удаляются. Офлайн-альбомы не трогаются автоматически, но сотрутся при полной очистке кэша.',
|
||
cacheUsedImages: 'Изображения:',
|
||
cacheUsedOffline: 'Офлайн-треки:',
|
||
cacheUsedHot: 'На диске:',
|
||
hotCacheTrackCount: 'Треков в кэше:',
|
||
cacheMaxLabel: 'Лимит',
|
||
cacheClearBtn: 'Очистить кэш',
|
||
waveformCacheClearBtn: 'Очистить кэш waveform',
|
||
cacheClearWarning: 'Будут удалены и все офлайн-альбомы.',
|
||
cacheClearConfirm: 'Очистить всё',
|
||
cacheClearCancel: 'Отмена',
|
||
waveformCacheCleared: 'Кэш waveform очищен ({{count}} строк).',
|
||
waveformCacheClearFailed: 'Не удалось очистить кэш waveform.',
|
||
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.',
|
||
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)',
|
||
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',
|
||
lyricsModeStandard: 'Стандарт',
|
||
lyricsModeStandardDesc: 'Три источника в свободно настраиваемом порядке: серверные теги, LRCLIB, Netease.',
|
||
lyricsModeLyricsplus: 'YouLyPlus (Караоке)',
|
||
lyricsModeLyricsplusDesc: 'Синхронизация слово-в-слово из Apple Music, Spotify, Musixmatch и QQ (общественный бэкенд). При отсутствии результата незаметно возвращается к стандартным источникам.',
|
||
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.',
|
||
randomMixTitle: 'Чёрный список случайного микса',
|
||
luckyMixMenuTitle: 'Показывать «Мне повезёт» в меню',
|
||
luckyMixMenuDesc:
|
||
'Включает «Мне повезёт» в «Собрать микс», а при раздельной навигации — отдельным пунктом меню. Видно только при включённом AudioMuse на активном сервере.',
|
||
randomMixBlacklistTitle: 'Свои слова-фильтры',
|
||
randomMixBlacklistDesc:
|
||
'Треки скрываются, если слово встречается в жанре, названии, альбоме или исполнителе (когда включён фильтр выше).',
|
||
randomMixBlacklistPlaceholder: 'Добавить слово…',
|
||
randomMixBlacklistAdd: 'Добавить',
|
||
randomMixBlacklistEmpty: 'Пока пусто.',
|
||
randomMixHardcodedTitle: 'Встроенные слова (при включённом фильтре)',
|
||
tabAudio: 'Звук',
|
||
tabStorage: 'Офлайн и кэш',
|
||
tabAppearance: 'Внешний вид',
|
||
tabLibrary: 'Библиотека',
|
||
tabServers: 'Серверы',
|
||
tabLyrics: 'Тексты песен',
|
||
tabPersonalisation: 'Персонализация',
|
||
tabIntegrations: 'Интеграции',
|
||
inputKeybindingsTitle: 'Горячие клавиши',
|
||
aboutContributorsCount_one: '{{count}} вклад',
|
||
aboutContributorsCount_few: '{{count}} вклада',
|
||
aboutContributorsCount_many: '{{count}} вкладов',
|
||
aboutContributorsCount_other: '{{count}} вклада',
|
||
searchPlaceholder: 'Поиск в настройках…',
|
||
searchNoResults: 'Ничего не найдено по вашему запросу.',
|
||
aboutMaintainersLabel: 'Сопровождающие',
|
||
integrationsPrivacyTitle: 'Уведомление о конфиденциальности',
|
||
integrationsPrivacyBody: 'Все интеграции на этой вкладке включаются <strong>по желанию</strong> и при активации отправляют данные во внешние сервисы или на ваш сервер Navidrome. Last.fm получает вашу историю прослушивания, Discord показывает текущую композицию в вашем профиле, Bandsintown опрашивается по артисту для получения дат гастролей, а «Сейчас играет» делится текущей композицией с другими пользователями вашего сервера Navidrome. Если вы не хотите ничего из этого, просто оставьте соответствующий раздел отключённым.',
|
||
homeCustomizerTitle: 'Главная',
|
||
queueToolbarTitle: 'Панель инструментов очереди',
|
||
queueToolbarReset: 'Сбросить',
|
||
queueToolbarSeparator: 'Разделитель',
|
||
sidebarTitle: 'Боковая панель',
|
||
sidebarReset: 'Сбросить порядок',
|
||
artistLayoutTitle: 'Разделы страницы исполнителя',
|
||
artistLayoutDesc: 'Перетаскивайте, чтобы изменить порядок, переключайте, чтобы скрыть отдельные разделы страницы исполнителя. Разделы без данных пропускаются автоматически.',
|
||
artistLayoutReset: 'Сбросить',
|
||
artistLayoutBio: 'Биография исполнителя',
|
||
artistLayoutTopTracks: 'Топ-треки',
|
||
artistLayoutSimilar: 'Похожие исполнители',
|
||
artistLayoutAlbums: 'Альбомы',
|
||
artistLayoutFeatured: 'Также участвует в',
|
||
playlistLayoutTitle: 'Макет страницы плейлиста',
|
||
playlistLayoutDesc: 'Показать или скрыть отдельные элементы на странице плейлиста.',
|
||
playlistLayoutReset: 'Сбросить',
|
||
playerBarTitle: 'Панель плеера',
|
||
playerBarReset: 'Сбросить',
|
||
playerBarStarRating: 'Оценка звёздами',
|
||
playerBarFavorite: 'Избранное (сердечко)',
|
||
playerBarLastfmLove: 'Last.fm love',
|
||
playerBarEqualizer: 'Эквалайзер',
|
||
playerBarMiniPlayer: 'Мини-плеер',
|
||
advancedMode: 'Дополнительно',
|
||
advancedModeTooltip: 'Показывать расширенные параметры во всех вкладках настроек. Вклады сообщества, которые не обязательно соответствуют дизайн-философии мейнтейнеров Psysonic.',
|
||
advancedBadge: 'Дополнительно',
|
||
sidebarDrag: 'Перетащите для порядка',
|
||
sidebarFixed: 'Всегда показывать',
|
||
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: 'Текущие настройки будут заменены. Продолжить?',
|
||
backupSuccess: 'Копия сохранена',
|
||
backupImportSuccess: 'Настройки восстановлены — перезапуск…',
|
||
backupImportError: 'Файл повреждён или не подходит.',
|
||
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',
|
||
preloadMode: 'Предзагрузка следующего трека',
|
||
preloadModeDesc: 'Когда начинать буферизацию следующего в очереди',
|
||
nextTrackBufferingTitle: 'Буферизация',
|
||
preloadHotCacheMutualExclusive: 'Предзагрузка и Hot Cache выполняют одну функцию — одновременно может быть активна только одна. Включение одной автоматически отключает другую.',
|
||
preloadOff: 'Выкл.',
|
||
preloadBalanced: 'Умеренно (за 30 с до конца)',
|
||
preloadEarly: 'Рано (через 5 с после старта)',
|
||
preloadCustom: 'Свой интервал',
|
||
preloadCustomSeconds: 'Секунд до конца: {{n}}',
|
||
infiniteQueue: 'Бесконечная очередь',
|
||
infiniteQueueDesc: 'Подмешивать случайные треки, когда очередь закончится',
|
||
experimental: 'Экспериментально',
|
||
fsPlayerSection: 'Полноэкранный плеер',
|
||
fsShowArtistPortrait: 'Отображать фото артиста',
|
||
fsShowArtistPortraitDesc: 'Показывать фото артиста (или обложку альбома) в правой части полноэкранного плеера.',
|
||
fsPortraitDim: 'Затемнение фото',
|
||
fsLyricsStyle: 'Стиль отображения текста',
|
||
fsLyricsStyleRail: 'Рельс',
|
||
fsLyricsStyleRailDesc: 'Классическая рамка из 5 строк.',
|
||
fsLyricsStyleApple: 'Прокрутка',
|
||
fsLyricsStyleAppleDesc: 'Полноэкранный список с прокруткой.',
|
||
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: 'Масштаб',
|
||
};
|