mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 06:25:41 +00:00
refactor(i18n): split locale files into per-namespace modules (Phase K) (#688)
Each src/locales/<lang>.ts (~1800 LOC) becomes a folder src/locales/<lang>/ with one module per i18n namespace (44 each) plus an index.ts barrel that reassembles <lang>Translation in the original key order. Mechanical, script-driven split with a JSON round-trip check: every locale object is byte-identical to its pre-split form. i18n.ts is unchanged — './locales/<lang>' now resolves to the folder index. The per-namespace settings.ts files land ~440-460 LOC; a single i18n namespace is the natural, non-arbitrary split unit for a flat string table, so they are intentionally left whole.
This commit is contained in:
committed by
GitHub
parent
ec112922a2
commit
2409a1fec8
@@ -0,0 +1,459 @@
|
||||
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: 'При закрытии окна не выходить из приложения, а оставаться в трее.',
|
||||
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 скрывает.',
|
||||
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: 'Также участвует в',
|
||||
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: 'Масштаб',
|
||||
};
|
||||
Reference in New Issue
Block a user