/** Russian UI strings — natural phrasing for a music desktop app */
export const ruTranslation = {
sidebar: {
library: 'Медиатека',
mainstage: 'Для вас',
newReleases: 'Новинки',
allAlbums: 'Все альбомы',
randomAlbums: 'Случайные альбомы',
randomPicker: 'Собрать микс',
artists: 'Исполнители',
composers: 'Композиторы',
randomMix: 'Случайный микс',
favorites: 'Избранное',
nowPlaying: 'Сейчас играет',
system: 'Система',
statistics: 'Статистика',
settings: 'Настройки',
help: 'Справка',
expand: 'Развернуть боковую панель',
collapse: 'Свернуть боковую панель',
downloadingTracks: 'Кэширование {{n}} треков…',
syncingTracks: 'Синхронизация {{done}}/{{total}}…',
cancelDownload: 'Отменить загрузку',
offlineLibrary: 'Офлайн-библиотека',
genres: 'Жанры',
tracks: 'Треки',
playlists: 'Плейлисты',
smartPlaylists: 'Смарт-плейлисты',
mostPlayed: 'Популярное',
losslessAlbums: 'Lossless',
radio: 'Онлайн-радио',
folderBrowser: 'Браузер папок',
deviceSync: 'Синхронизация устройства',
libraryScope: 'Область медиатеки',
allLibraries: 'Все библиотеки',
expandPlaylists: 'Развернуть плейлисты',
collapsePlaylists: 'Свернуть плейлисты',
more: 'Ещё',
feelingLucky: 'Мне повезёт',
},
home: {
hero: 'Подборка',
starred: 'Личное избранное',
recent: 'Недавно добавлено',
mostPlayed: 'Популярное',
recentlyPlayed: 'Недавно проиграно',
losslessAlbums: 'Lossless-альбомы',
discover: 'Обзор',
discoverSongs: 'Открыть треки',
loadMore: 'Ещё',
discoverMore: 'Смотреть ещё',
discoverArtists: 'Исполнители',
discoverArtistsMore: 'Все исполнители',
becauseYouLike: 'Потому что вы слушали…',
becauseYouLikeFor: 'Потому что вы слушали {{artist}}',
similarTo: 'Похоже на {{artist}}',
becauseYouLikeTracks_one: '{{count}} трек',
becauseYouLikeTracks_few: '{{count}} трека',
becauseYouLikeTracks_many: '{{count}} треков',
becauseYouLikeTracks_other: '{{count}} треков',
},
hero: {
eyebrow: 'Альбом дня',
playAlbum: 'Воспроизвести альбом',
enqueue: 'В очередь',
enqueueTooltip: 'Добавить весь альбом в очередь',
},
search: {
placeholder: 'Исполнитель, альбом или трек…',
noResults: 'Ничего не найдено по запросу «{{query}}»',
artists: 'Исполнители',
albums: 'Альбомы',
songs: 'Треки',
clearLabel: 'Очистить поиск',
addedToQueueToast: '«{{title}}» добавлен в очередь',
title: 'Поиск',
resultsFor: 'Результаты по «{{query}}»',
album: 'Альбом',
advanced: 'Расширенный поиск',
advancedSearchTerm: 'Поисковый запрос',
advancedSearchPlaceholder: 'Название, альбом, исполнитель…',
advancedGenre: 'Жанр',
advancedAllGenres: 'Все жанры',
advancedYear: 'Год',
advancedYearFrom: 'от',
advancedYearTo: 'до',
advancedAll: 'Все',
advancedSearch: 'Найти',
advancedEmpty: 'Введите запрос или выберите фильтр.',
advancedNoResults: 'Ничего не найдено.',
advancedGenreNote: 'Треки выбираются случайно в рамках жанра.',
recentSearches: 'Недавние запросы',
browse: 'Обзор',
emptyHint: 'Что хочешь послушать?',
genres: 'Жанры',
},
nowPlaying: {
tooltip: 'Кто сейчас слушает?',
title: 'Кто сейчас слушает?',
loading: 'Загрузка…',
nobody: 'Сейчас никто не слушает.',
minutesAgo: '{{n}} мин назад',
nothingPlaying: 'Пока ничего не играет — включите трек.',
aboutArtist: 'Об исполнителе',
fromAlbum: 'Из этого альбома',
viewAlbum: 'Просмотр альбома',
goToArtist: 'Перейти к исполнителю',
readMore: 'Читать далее',
showLess: 'Свернуть',
genreInfo: 'Жанр',
trackInfo: 'О треке',
topSongs: 'Самое популярное у этого исполнителя',
topSongsCredit: 'Топ-треки исполнителя {{name}}',
trackPosition: 'Трек {{pos}}',
playsCount_one: '{{count}} прослушивание',
playsCount_few: '{{count}} прослушивания',
playsCount_many: '{{count}} прослушиваний',
playsCount_other: '{{count}} прослушиваний',
releasedYearsAgo_one: '{{count}} год назад',
releasedYearsAgo_few: '{{count}} года назад',
releasedYearsAgo_many: '{{count}} лет назад',
releasedYearsAgo_other: '{{count}} лет назад',
discography: 'Дискография',
lastfmStats: 'Статистика Last.fm',
thisTrack: 'Этот трек',
thisArtist: 'Этот исполнитель',
listeners: 'слушателей',
scrobbles: 'прослушиваний',
yourScrobbles: 'вами',
listenersN: '{{n}} слушателей',
scrobblesN: '{{n}} прослушиваний',
playsByYouN: 'прослушано вами {{n}}×',
openTrackOnLastfm: 'Трек на Last.fm',
openArtistOnLastfm: 'Исполнитель на Last.fm',
rgTrackTooltip: 'ReplayGain (трек)',
rgAlbumTooltip: 'ReplayGain (альбом)',
rgAutoTooltip: 'ReplayGain (авто)',
showMoreTracks: 'Показать ещё {{count}}',
showLessTracks: 'Свернуть',
hideCard: 'Скрыть карточку',
layoutMenu: 'Макет',
visibleCards: 'Видимые карточки',
hiddenCards: 'Скрытые карточки',
noHiddenCards: 'Нет скрытых карточек',
resetLayout: 'Сбросить макет',
emptyColumn: 'Перетащите карточки сюда',
},
contextMenu: {
playNow: 'Играть сейчас',
playNext: 'Играть следующим',
addToQueue: 'В конец очереди',
enqueueAlbum: 'Альбом в очередь',
enqueueAlbums_one: '{{count}} альбом в очередь',
enqueueAlbums_few: '{{count}} альбома в очередь',
enqueueAlbums_many: '{{count}} альбомов в очередь',
enqueueAlbums_other: '{{count}} альбомов в очередь',
startRadio: 'Радио по похожим',
instantMix: 'Instant Mix',
instantMixFailed: 'Не удалось собрать Instant Mix — ошибка сервера или плагина.',
cliMixNeedsTrack: 'Ничего не играет — сначала начните воспроизведение, затем снова выполните команду микса.',
lfmLove: 'Любимое на Last.fm',
lfmUnlove: 'Убрать с Last.fm',
favorite: 'В избранное',
favoriteArtist: 'Исполнитель в избранное',
favoriteAlbum: 'Альбом в избранное',
unfavorite: 'Убрать из избранного',
unfavoriteArtist: 'Убрать исполнителя из избранного',
unfavoriteAlbum: 'Убрать альбом из избранного',
removeFromQueue: 'Убрать из очереди',
removeFromPlaylist: 'Убрать из плейлиста',
openAlbum: 'Открыть альбом',
goToArtist: 'К исполнителю',
download: 'Скачать (ZIP)',
addToPlaylist: 'В плейлист',
selectedPlaylists: '{{count}} плейлистов выбрано',
selectedAlbums: '{{count}} альбомов выбрано',
selectedArtists: '{{count}} исполнителей выбрано',
songInfo: 'Сведения о треке',
shareLink: 'Копировать ссылку для обмена',
shareCopied: 'Ссылка для обмена скопирована в буфер.',
shareCopyFailed: 'Не удалось скопировать в буфер.',
},
sharePaste: {
notLoggedIn: 'Войдите и добавьте сервер, затем вставьте ссылку.',
noMatchingServer: 'Ни один сохранённый сервер не совпадает с адресом из ссылки. Добавьте сервер: {{url}}',
trackUnavailable: 'Трек на сервере не найден.',
albumUnavailable: 'Альбом на сервере не найден.',
artistUnavailable: 'Исполнитель на сервере не найден.',
composerUnavailable: 'Композитор на сервере не найден.',
openedTrack: 'Воспроизводится присланный трек.',
openedAlbum: 'Открывается присланный альбом.',
openedArtist: 'Открывается присланный исполнитель.',
openedComposer: 'Открывается присланный композитор.',
openedQueue_one: 'Воспроизводится присланная очередь: {{count}} трек.',
openedQueue_few: 'Воспроизводится присланная очередь: {{count}} трека.',
openedQueue_many: 'Воспроизводится присланная очередь: {{count}} треков.',
openedQueue_other: 'Воспроизводится присланная очередь: {{count}} треков.',
openedQueuePartial:
'Воспроизводится {{played}} из {{total}} треков по ссылке ({{skipped}} на этом сервере не найдены).',
queueAllUnavailable: 'Ни один из треков по ссылке не найден на сервере.',
genericError: 'Не удалось открыть ссылку для обмена.',
},
albumDetail: {
back: 'Назад',
orbitDoubleClickHint: 'Двойной клик, чтобы добавить этот трек в очередь Orbit',
playAll: 'Воспроизвести всё',
shareAlbum: 'Поделиться альбомом',
enqueue: 'В очередь',
enqueueTooltip: 'Добавить весь альбом в очередь',
artistBio: 'Биография',
download: 'Скачать (ZIP)',
downloading: 'Загрузка…',
cacheOffline: 'Сохранить офлайн',
offlineCached: 'Доступно офлайн',
offlineDownloading: 'Кэширование… ({{n}} из {{total}})',
removeOffline: 'Удалить офлайн-копию',
offlineStorageFull:
'Место для офлайн закончилось (лимит {{mb}} МБ). Освободите место в офлайн-библиотеке или увеличьте лимит в настройках.',
offlineStorageGoToLibrary: 'Офлайн-библиотека',
offlineStorageGoToSettings: 'Настройки',
favoriteAdd: 'В избранное',
favoriteRemove: 'Убрать из избранного',
favorite: 'Избранное',
noBio: 'Биография недоступна.',
moreByArtist: 'Ещё от {{artist}}',
tracksCount: 'Композиций: {{n}}',
goToArtist: 'Перейти к {{artist}}',
moreLabelAlbums: 'Другие альбомы на {{label}}',
trackTitle: 'Название',
trackAlbum: 'Альбом',
trackArtist: 'Исполнитель',
trackGenre: 'Жанр',
trackFormat: 'Формат',
trackFavorite: 'Избранное',
trackRating: 'Оценка',
trackDuration: 'Длительность',
trackTotal: 'Итого',
columns: 'Колонки',
resetColumns: 'Сбросить',
notFound: 'Альбом не найден.',
bioModal: 'Биография исполнителя',
bioClose: 'Закрыть',
ratingLabel: 'Оценка',
enlargeCover: 'Увеличить обложку',
filterSongs: 'Фильтр треков…',
sortNatural: 'По умолчанию',
sortByTitle: 'А–Я (название)',
sortByArtist: 'А–Я (исполнитель)',
sortByAlbum: 'А–Я (альбом)',
},
entityRating: {
albumShort: 'Оценка альбома',
artistShort: 'Оценка исполнителя',
albumAriaLabel: 'Оценка альбома',
artistAriaLabel: 'Оценка исполнителя',
selectedArtistsRatingAriaLabel: 'Звёздная оценка для выбранных исполнителей ({{count}})',
selectedAlbumsRatingAriaLabel: 'Звёздная оценка для выбранных альбомов ({{count}})',
saveFailed: 'Не удалось сохранить оценку.',
},
artistDetail: {
back: 'Назад',
albums: 'Альбомы',
album: 'Альбом',
playAll: 'Воспроизвести всё',
shareArtist: 'Поделиться исполнителем',
shuffle: 'Перемешать',
radio: 'Радио',
loading: 'Загрузка…',
noRadio: 'Похожие треки для этого исполнителя не найдены.',
notFound: 'Исполнитель не найден.',
albumsBy: 'Альбомы — {{name}}',
topTracks: 'Популярные треки',
noAlbums: 'Альбомов нет.',
trackTitle: 'Название',
trackAlbum: 'Альбом',
trackDuration: 'Длительность',
favoriteAdd: 'В избранное',
favoriteRemove: 'Убрать из избранного',
favorite: 'Избранное',
albumCount_one: '{{count}} альбом',
albumCount_few: '{{count}} альбома',
albumCount_many: '{{count}} альбомов',
albumCount_other: '{{count}} альбомов',
openedInBrowser: 'Открыто в браузере',
featuredOn: 'Также участвует в',
similarArtists: 'Похожие исполнители',
cacheOffline: 'Сохранить дискографию офлайн',
offlineCached: 'Дискография сохранена',
offlineDownloading: 'Кэширование… ({{done}} из {{total}} альбомов)',
uploadImage: 'Загрузить фото исполнителя',
uploadImageError: 'Не удалось загрузить изображение',
releaseTypes: {
album: 'Альбом',
ep: 'EP',
single: 'Сингл',
compilation: 'Сборник',
live: 'Концерт',
soundtrack: 'Саундтрек',
remix: 'Ремикс',
other: 'Другое',
},
},
favorites: {
title: 'Избранное',
empty: 'Пока ничего не отмечено звёздочкой.',
artists: 'Исполнители',
albums: 'Альбомы',
songs: 'Треки',
enqueueAll: 'Всё в очередь',
playAll: 'Воспроизвести всё',
removeSong: 'Убрать из избранного',
stations: 'Радиостанции',
showingFiltered: 'Показано {{filtered}} из {{total}} ({{artist}})',
showingCount: 'Показано {{filtered}} из {{total}}',
clearArtistFilter: 'Сбросить фильтр исполнителя',
noFilterResults: 'Нет результатов с выбранными фильтрами.',
allArtists: 'Все исполнители',
topArtists: 'Топ исполнителей по избранному',
topArtistsSongCount_one: '{{count}} трек',
topArtistsSongCount_few: '{{count}} трека',
topArtistsSongCount_many: '{{count}} треков',
topArtistsSongCount_other: '{{count}} трека',
},
randomLanding: {
title: 'Собрать микс',
mixByTracks: 'Микс по трекам',
mixByTracksDesc: 'Случайная подборка треков со всей медиатеки',
mixByAlbums: 'Микс по альбомам',
mixByAlbumsDesc: 'Случайная подборка альбомов для открытий',
mixByLucky: 'Мне повезёт',
mixByLuckyDesc: 'Умный Instant Mix из топ-артистов, альбомов и высоких оценок',
},
randomAlbums: {
title: 'Случайные альбомы',
refresh: 'Обновить',
},
genres: {
title: 'Жанры',
genreCount: 'Жанры',
albumCount_one: '{{count}} альбом',
albumCount_few: '{{count}} альбома',
albumCount_many: '{{count}} альбомов',
albumCount_other: '{{count}} альбомов',
loading: 'Загрузка жанров…',
empty: 'Жанры не найдены.',
albumsLoading: 'Загрузка альбомов…',
albumsEmpty: 'В этом жанре альбомов нет.',
loadMore: 'Ещё',
back: 'Назад',
},
randomMix: {
title: 'Случайный микс',
remix: 'Новый микс',
remixTooltip: 'Подобрать другие случайные треки',
remixGenre: 'Новый микс: {{genre}}',
remixTooltipGenre: 'Подобрать другие треки жанра {{genre}}',
playAll: 'Воспроизвести всё',
trackTitle: 'Название',
trackArtist: 'Исполнитель',
trackAlbum: 'Альбом',
trackFavorite: 'Избранное',
trackDuration: 'Длительность',
favoriteAdd: 'В избранное',
favoriteRemove: 'Убрать из избранного',
play: 'Играть',
trackGenre: 'Жанр',
mixSettingsHeader: 'Настройки микса',
exclusionsHeader: 'Исключения',
filterPanelInexactSizeNote: 'Размер микса — это цель. При больших запросах сервер может вернуть меньше уникальных треков, если его случайный пул иссякает.',
mixSize: 'Размер списка',
excludeAudiobooks: 'Исключать аудиокниги и радиоспектакли',
excludeAudiobooksDesc:
'По ключевым словам в жанре, названии, альбоме и исполнителе — например Hörbuch, Audiobook, Spoken Word и т. п.',
genreBlocked: 'Слово отфильтровано',
genreAddedToBlacklist: 'Добавлено в список фильтра',
genreAlreadyBlocked: 'Уже в списке',
artistBlocked: 'Исполнитель отфильтрован',
artistAddedToBlacklist: 'Исполнитель добавлен в фильтр',
artistClickHint: 'Нажмите, чтобы скрыть этого исполнителя',
blacklistToggle: 'Фильтр по словам',
genreMixTitle: 'Микс по жанру',
genreMixDesc: 'Топ-20 жанров по числу треков — нажмите, чтобы собрать микс',
genreMixAll: 'Все треки',
genreMixLoadMore: 'Ещё 10 жанров',
genreMixNoGenres: 'На сервере нет данных о жанрах.',
shuffleGenres: 'Другие жанры',
filterPanelTitle: 'Фильтры',
filterPanelDesc:
'Нажмите на тег жанра или имя исполнителя в списке ниже, чтобы исключить их из будущих миксов.',
genreClickHint:
'Нажмите на тег жанра — слово попадёт в фильтр.\nУчитываются жанр, название, альбом и исполнитель.',
},
luckyMix: {
done: '«Мне повезёт» готово: {{count}} треков',
failed: 'Не удалось собрать микс «Мне повезёт». Попробуйте ещё раз.',
unavailable: '«Мне повезёт» недоступен на этом сервере.',
cancelTooltip: 'Отменить сборку микса «Мне повезёт»',
},
albums: {
title: 'Все альбомы',
sortByName: 'А–Я (альбом)',
sortByArtist: 'А–Я (исполнитель)',
sortNewest: 'Сначала новые',
sortRandom: 'Случайно',
yearFrom: 'С',
yearTo: 'По',
yearFilterClear: 'Сбросить год',
yearFilterLabel: 'Год',
compilationLabel: 'Сборники',
compilationOnly: 'Только сборники',
compilationHide: 'Скрыть сборники',
compilationTooltipAll: 'Все альбомы · клик: только сборники',
compilationTooltipOnly: 'Только сборники · клик: скрыть сборники',
compilationTooltipHide: 'Сборники скрыты · клик: показать всё',
select: 'Множественный выбор',
startSelect: 'Включить множественный выбор',
cancelSelect: 'Отмена',
selectionCount: '{{count}} выбрано',
downloadZips: 'Скачать ZIP-архивы',
addOffline: 'Добавить офлайн',
enqueueSelected_one: 'В очередь ({{count}})',
enqueueSelected_few: 'В очередь ({{count}})',
enqueueSelected_many: 'В очередь ({{count}})',
enqueueSelected_other: 'В очередь ({{count}})',
enqueueQueued_one: '{{count}} альбом добавлен в очередь',
enqueueQueued_few: '{{count}} альбома добавлены в очередь',
enqueueQueued_many: '{{count}} альбомов добавлены в очередь',
enqueueQueued_other: '{{count}} альбомов добавлены в очередь',
downloadingZip: 'Загрузка {{current}}/{{total}}: {{name}}',
downloadZipDone: '{{count}} ZIP-архив(ов) загружено',
downloadZipFailed: 'Не удалось скачать {{name}}',
offlineQueuing: 'Добавление {{count}} альбом(ов) в офлайн…',
offlineFailed: 'Не удалось добавить {{name}} офлайн',
},
tracks: {
title: 'Треки',
subtitle: 'Листать. Искать. Открывать.',
heroEyebrow: 'Трек момента',
heroReroll: 'Выбрать другой',
playSong: 'Воспроизвести',
enqueueSong: 'В очередь',
railRandom: 'Случайная подборка',
railHighlyRated: 'Высоко оценённые',
browseTitle: 'Просмотреть все треки',
browseUnsupported: 'Этот сервер не возвращает всю библиотеку сразу. Воспользуйтесь поиском выше, чтобы найти конкретные треки.',
searchPlaceholder: 'Найти трек по названию, исполнителю или альбому…',
count_one: '{{count}} трек',
count_few: '{{count}} трека',
count_many: '{{count}} треков',
count_other: '{{count}} треков',
},
artists: {
title: 'Исполнители',
search: 'Поиск…',
all: 'Все',
gridView: 'Сетка',
listView: 'Список',
imagesOn: 'Фото исполнителей — больше трафика и нагрузка на систему',
imagesOff: 'Только инициалы — экономнее по трафику',
loadMore: 'Ещё',
notFound: 'Исполнители не найдены.',
albumCount_one: '{{count}} альбом',
albumCount_few: '{{count}} альбома',
albumCount_many: '{{count}} альбомов',
albumCount_other: '{{count}} альбомов',
selectionCount: '{{count}} выбрано',
select: 'Множественный выбор',
startSelect: 'Включить множественный выбор',
cancelSelect: 'Отмена',
addToPlaylist: 'В плейлист',
},
composers: {
title: 'Композиторы',
search: 'Поиск…',
notFound: 'Композиторы не найдены.',
unsupported: 'Просмотр по композиторам требует Navidrome 0.55 или новее.',
loadFailed: 'Не удалось загрузить композиторов.',
retry: 'Повторить',
involvedIn_one: 'Участие в {{count}} альбоме',
involvedIn_other: 'Участие в {{count}} альбомах',
},
composerDetail: {
back: 'Назад',
notFound: 'Композитор не найден.',
about: 'Об этом композиторе',
works: 'Произведения',
noWorks: 'Произведения не найдены.',
workCount_one: '{{count}} произведение',
workCount_other: '{{count}} произведений',
shareComposer: 'Поделиться композитором',
unknownComposer: 'Композитор',
},
login: {
subtitle: 'Десктопный клиент для Navidrome',
serverName: 'Название сервера (необязательно)',
serverNamePlaceholder: 'Мой Navidrome',
serverUrl: 'Адрес сервера',
serverUrlPlaceholder: '192.168.1.100:4533 или https://music.example.com',
username: 'Логин',
usernamePlaceholder: 'admin',
password: 'Пароль',
showPassword: 'Показать пароль',
hidePassword: 'Скрыть пароль',
connect: 'Подключиться',
connecting: 'Подключение…',
connected: 'Готово!',
error: 'Не удалось подключиться — проверьте данные.',
urlRequired: 'Укажите адрес сервера.',
savedServers: 'Сохранённые серверы',
addNew: 'Или добавить новый сервер',
orMagicString: 'Или magic string',
magicStringPlaceholder: 'Вставьте строку приглашения (psysonic1-…)',
magicStringInvalid: 'Неверная или нечитаемая magic string.',
},
connection: {
connected: 'Подключено',
connectedTo: 'Сервер: {{server}}',
disconnected: 'Нет связи',
disconnectedFrom: 'Сервер {{server}} недоступен — нажмите для настроек',
checking: 'Подключение…',
extern: 'Внешний',
offlineTitle: 'Нет связи с сервером',
offlineSubtitle: 'Сервер {{server}} недоступен. Проверьте сеть и адрес.',
offlineModeBanner: 'Офлайн — воспроизведение из локального кэша',
offlineNoCacheBanner: 'Нет соединения с сервером — {{server}} недоступен',
offlineLibraryTitle: 'Офлайн-библиотека',
offlineLibraryEmpty:
'Пока ничего не сохранено. Подключитесь к сети, откройте альбом и нажмите «Сохранить офлайн».',
offlineAlbumCount_one: '{{n}} альбом',
offlineAlbumCount_few: '{{n}} альбома',
offlineAlbumCount_many: '{{n}} альбомов',
offlineAlbumCount_other: '{{n}} альбомов',
offlineFilterAll: 'Всё',
offlineFilterAlbums: 'Альбомы',
offlineFilterPlaylists: 'Плейлисты',
offlineFilterArtists: 'Дискографии',
retry: 'Повторить',
serverSettings: 'Настройки сервера',
switchServerTitle: 'Сменить сервер',
switchServerHint: 'Нажмите, чтобы выбрать другой сохранённый сервер.',
manageServers: 'Управление серверами…',
switchFailed: 'Не удалось переключиться — сервер недоступен.',
lastfmConnected: 'Last.fm: @{{user}}',
lastfmSessionInvalid: 'Сессия недействительна — подключите снова',
},
common: {
albums: 'Альбомы',
album: 'Альбом',
loading: 'Загрузка…',
loadingMore: 'Загрузка…',
loadingPlaylists: 'Загрузка плейлистов…',
noAlbums: 'Альбомов нет.',
downloading: 'Скачивание…',
downloadZip: 'Скачать (ZIP)',
back: 'Назад',
cancel: 'Отмена',
save: 'Сохранить',
delete: 'Удалить',
use: 'Использовать',
add: 'Добавить',
new: 'Новое',
active: 'Активен',
download: 'Скачать',
chooseDownloadFolder: 'Выбрать папку',
noFolderSelected: 'Папка не выбрана',
rememberDownloadFolder: 'Запомнить папку',
filterGenre: 'Фильтр по жанру',
filterSearchGenres: 'Поиск жанров…',
filterNoGenres: 'Нет совпадений',
filterClear: 'Сбросить',
favorites: 'Избранное',
favoritesTooltipOff: 'Показывать только избранное',
favoritesTooltipOn: 'Показать всё',
play: 'Воспроизвести',
bulkSelected: 'Выбрано: {{count}}',
clearSelection: 'Сбросить выбор',
bulkAddToPlaylist: 'В плейлист',
bulkRemoveFromPlaylist: 'Убрать из плейлиста',
bulkClear: 'Снять выделение',
updaterAvailable: 'Доступно обновление',
updaterVersion: 'Версия {{version}} доступна',
updaterWebsite: 'Сайт',
updaterModalTitle: 'Доступна новая версия',
updaterChangelog: 'Что нового',
updaterDownloadBtn: 'Скачать сейчас',
updaterSkipBtn: 'Пропустить эту версию',
updaterRemindBtn: 'Напомнить позже',
updaterDone: 'Загрузка завершена',
updaterShowFolder: 'Показать в папке',
updaterInstallHint: 'Закройте Psysonic и запустите установщик вручную.',
updaterAurHint: 'Установить обновление через AUR:',
updaterErrorMsg: 'Ошибка загрузки',
updaterRetryBtn: 'Повторить',
durationHoursMinutes: '{{hours}}ч {{minutes}}мин',
durationMinutesOnly: '{{minutes}}мин',
updaterOpenGitHub: 'Открыть на GitHub',
filters: 'Фильтры',
more: 'еще',
yearRange: 'Диапазон лет',
clearAll: 'Очистить всё',
},
settings: {
title: 'Настройки',
language: 'Язык',
languageEn: 'English',
languageDe: 'Deutsch',
languageEs: 'Español',
languageFr: 'Français',
languageNl: 'Nederlands',
languageNb: 'Norsk',
languageRu: 'Русский',
languageZh: '中文',
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:
'Включите, если на этом сервере настроен плагин 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:
'Обложки и фото исполнителей. При переполнении старые записи удаляются. Офлайн-альбомы не трогаются автоматически, но сотрутся при полной очистке кэша.',
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: 'Все интеграции на этой вкладке включаются по желанию и при активации отправляют данные во внешние сервисы или на ваш сервер Navidrome. Last.fm получает вашу историю прослушивания, Discord показывает текущую композицию в вашем профиле, Bandsintown опрашивается по артисту для получения дат гастролей, а «Сейчас играет» делится текущей композицией с другими пользователями вашего сервера Navidrome. Если вы не хотите ничего из этого, просто оставьте соответствующий раздел отключённым.',
homeCustomizerTitle: 'Главная',
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: 'Масштаб',
},
changelog: {
modalTitle: 'Что нового',
dontShowAgain: 'Больше не показывать',
close: 'Понятно',
},
whatsNew: {
title: 'Что нового',
empty: 'Для этой версии пока нет записи в журнале изменений.',
bannerTitle: 'Журнал изменений',
bannerCollapsed: 'Что нового в v{{version}}',
dismiss: 'Скрыть',
close: 'Закрыть',
},
help: {
title: 'Справка',
searchPlaceholder: 'Поиск по справке…',
noResults: 'Ничего не найдено. Попробуйте другой запрос.',
s1: 'С чего начать',
q1: 'Какие серверы поддерживаются?',
a1: 'Psysonic в первую очередь сделан для Navidrome и полностью совместим с Subsonic — Gonic, Airsonic, LMS и другие серверы Subsonic-API тоже работают. Некоторые расширенные функции (рейтинги, умные плейлисты, обмен Magic String, управление пользователями) требуют Navidrome.',
q2: 'Как добавить сервер?',
a2: 'Настройки → Серверы → Добавить сервер. Введите URL (например, http://192.168.1.100:4533), имя пользователя и пароль. Psysonic проверяет соединение перед сохранением — при ошибке ничего не сохраняется. Можно добавить сколько угодно серверов и переключаться между ними в шапке; одновременно активен только один.',
q3: 'Краткий обзор интерфейса?',
a3: 'Боковая панель (слева) для навигации, Mainstage / страницы по центру, плеер внизу, панель Очереди справа (открывается через иконку справа вверху рядом с индикатором Now Playing). Поиск вверху работает по всей библиотеке; «Now Playing» показывает, что слушают другие пользователи на том же сервере Navidrome.',
s2: 'Воспроизведение и Очередь',
q4: 'Как пользоваться очередью?',
a4: 'Откройте панель Очереди справа вверху. Перетаскивайте строки, чтобы менять порядок, выносите их за пределы для удаления, или используйте панель инструментов для перемешивания, сохранения очереди как плейлиста или перехода к треку. Перетаскивайте строки из панели в другие места как способ переноса.',
q5: 'Gapless и Crossfade — в чём разница?',
a5: 'Gapless преднабуферизирует следующий трек, чтобы между песнями не было тишины (идеально для концертных альбомов и DJ-миксов). Crossfade плавно затухает текущий трек, пока следующий нарастает (1–10 с — для перемешанных миксов). Они взаимоисключающи — включение одного отключает другое. Настройте оба в Настройки → Аудио.',
q6: 'Что такое Бесконечная очередь?',
a6: 'Когда очередь заканчивается и Повтор выключен, Psysonic тихо добавляет похожие/случайные треки из вашей библиотеки, чтобы воспроизведение не останавливалось. Авто-добавленные треки появляются под разделителем «— Добавлено автоматически —». Включается иконкой бесконечности в шапке очереди; ограничьте автодобавление жанром в Настройки → Очередь.',
q7: 'Множественный выбор и Shift+клик диапазона?',
a7: 'Включите «Выбор» на Альбомах / Новинках / Random Albums / Плейлистах. Клик переключает элемент, затем удерживайте Shift и кликните другой элемент — всё между ними в видимом порядке выделится. Shift+клики расширяют от последнего кликнутого якоря. Панель инструментов сверху предлагает массовые действия (очередь, скачивание, удаление и т. д.).',
q8: 'Сочетания клавиш и глобальные хоткеи?',
a8: 'По умолчанию: Пробел = Воспроизведение / Пауза, Esc = выйти из полного экрана / закрыть модалки, F1 = памятка по сочетаниям. Настройки → Ввод позволяет переназначить любое внутри-приложенческое действие (включая аккорды вроде Ctrl+Shift+P) и задать системные глобальные сочетания, работающие даже когда Psysonic в фоне или свёрнут. Медиа-клавиши (Воспр./Пауза, Далее, Назад) работают на всех платформах.',
s3: 'Аудио-инструменты',
q9: 'Режимы Replay Gain?',
a9: 'Настройки → Аудио → Replay Gain. Режим Трек нормализует каждую песню к целевому уровню. Режим Альбом сохраняет кривую громкости внутри альбома. Режим Авто выбирает Трек или Альбом в зависимости от того, происходит ли очередь из одного альбома. Треки без тегов Replay Gain используют настраиваемый предусилитель.',
q10: 'Что такое Smart Loudness Normalization (LUFS)?',
a10: 'Современная альтернатива Replay Gain в Настройки → Аудио. Psysonic анализирует каждый трек по LUFS / EBU R128 и сохраняет результат, чтобы громкость была единой по всей библиотеке — включая треки без Replay Gain тегов. Холодный анализ работает в фоне и использует 35–40 % CPU около 1 минуты, потом 0. Установите целевую громкость (по умолчанию −10 LUFS) один раз.',
q11: 'EQ и AutoEQ?',
a11: '10-полосный параметрический EQ в Настройки → Аудио → Эквалайзер с ручными полосами и пресетами. AutoEQ рядом подгружает измеренный профиль коррекции для модели ваших наушников из базы AutoEQ и применяет его к полосам автоматически — выберите наушники, EQ настроится на правильную кривую.',
q12: 'Как переключить устройство вывода аудио?',
a12: 'Настройки → Аудио → Устройство вывода. Psysonic перечисляет все доступные выходы и переключается мгновенно при выборе. Кнопка обновления находит устройства, подключённые после запуска. На Linux ALSA-имена вроде «sysdefault» автоматически очищаются для удобства чтения.',
q13: 'Что такое Hot Cache?',
a13: 'Hot Cache предзагружает текущий трек и следующие в RAM и на диск, чтобы воспроизведение начиналось без задержек буферизации — особенно полезно на медленных / удалённых серверах. Вытеснение срабатывает при достижении лимита размера. Настройте размер и задержку дебаунса (чтобы быстрые скипы не приводили к лишним загрузкам) в Настройки → Аудио.',
s4: 'Библиотека и Открытие',
q14: 'Как работают рейтинги и Skip-to-1★?',
a14: 'Psysonic поддерживает рейтинг 1–5 звёзд через OpenSubsonic (Navidrome ≥ 0.53). Оценивайте треки в списках, в контекстном меню или в плеере под именем исполнителя; альбомы — на странице альбома; исполнителей — на странице исполнителя. Skip-to-1★ (Настройки → Библиотека → Рейтинги) автоматически ставит 1 звезду после настраиваемого числа последовательных скипов. Та же панель позволяет задать минимальный рейтинг как фильтр для генерируемых миксов.',
q15: 'Как просматривать — Папки, Жанры, Треки?',
a15: 'Просмотр папок (боковая панель) ходит по дереву музыкальной директории сервера в Miller-column раскладке — клик по папке для входа, клик по треку или иконке воспроизведения папки для проигрывания / добавления. Жанры используют tag-cloud вид с размером по числу треков; клик по жанру открывает его. Треки — это плоский хаб библиотеки с виртуальным списком, сортируемым по столбцам, и живым поиском.',
q16: 'Поиск и расширенный поиск?',
a16: 'Поиск в шапке выполняет живой поиск по исполнителям, альбомам и трекам по мере набора. Откройте Расширенный поиск (боковая панель) для более богатого вида: фильтры по году, жанру, рейтингу, формату, каналам, частоте дискретизации, BPM, настроению — комбинируемые. Правый клик по любому результату открывает то же контекстное меню, что и в других местах.',
q17: 'Что такое Миксы (Random / Genre / Super Genre / Lucky)?',
a17: 'Random Mix строит плейлист случайных треков из библиотеки; фильтр ключевых слов исключает аудиокниги, комедию и т. д. по подстрокам жанра / названия / альбома. Super Genre Mix группирует библиотеку в широкие стили (Рок, Метал, Электронная, Джаз, Классика…) и строит сфокусированный микс. Lucky Mix использует историю прослушивания, рейтинги и похожие треки AudioMuse-AI для составления мгновенного плейлиста по одному клику.',
q18: 'Страница статистики?',
a18: 'Статистика (боковая панель) показывает топ исполнителей, топ альбомов, топ треков, разбивку по жанрам, время прослушивания со временем и охват по библиотеке, если настроено несколько музыкальных папок. Несколько видов экспортируются как изображение-карточка для шаринга.',
q19: 'Как скачать альбом как ZIP?',
a19: 'Страница альбома → «Скачать (ZIP)». Сервер сначала упаковывает альбом — для больших или lossless альбомов (FLAC / WAV) индикатор прогресса появляется только после завершения упаковки и начала передачи. Это нормально.',
s5: 'Тексты',
q20: 'Откуда берутся тексты?',
a20: 'Три источника, настраиваемые в Настройки → Тексты: ваш сервер Navidrome (встроенные / OpenSubsonic тексты), LRCLIB (синхронизированные тексты от сообщества) и NetEase Cloud Music (большой азиатский + международный каталог). Каждый источник можно включить / выключить и переставить перетаскиванием.',
q21: 'Как смотреть тексты во время воспроизведения?',
a21: 'Кликните на иконку микрофона в плеере, чтобы открыть вкладку Тексты в панели очереди. Синхронизированные тексты автоматически прокручиваются и поддерживают клик-для-перехода; обычный текст прокручивается как статический блок. Включите Полноэкранный плеер через обложку плеера для иммерсивного вида текстов с mesh-blob фоном.',
s6: 'Шаринг и Социальные функции',
q22: 'Что такое Magic Strings?',
a22: 'Magic Strings — это короткие копи-паст токены для шаринга вещей между пользователями Psysonic без сторонних серверов. Server-Invite строки позволяют другу присоединиться к вашему Navidrome одной вставкой; Magic Strings альбомов / исполнителей / очередей открывают тот же альбом / исполнителя / очередь у получателя. Создавайте через меню «Поделиться», вставляйте в строку поиска для использования.',
q23: 'Что такое Orbit?',
a23: 'Orbit — это синхронное совместное прослушивание: хост проигрывает трек, каждый гость слышит его синхронно, и гости могут предлагать песни, которые хост может принять в очередь. Запустите сессию через кнопку Orbit в шапке, поделитесь ссылкой-приглашением, и другие могут присоединиться с любой установки Psysonic. Хост контролирует воспроизведение (скип, перемотка, очередь) — гости получают вид в реальном времени и поле для предложений. Сессии эфемерные и завершаются, когда хост их закрывает.',
q24: 'Что такое выпадающее меню Now Playing?',
a24: 'Иконка трансляции справа вверху показывает, что слушают другие пользователи на вашем сервере Navidrome прямо сейчас, обновляется каждые 10 секунд. Ваша запись исчезает в момент паузы. По серверам — пользователи на другом активном сервере не показываются.',
s7: 'Персонализация',
q25: 'Темы и планировщик тем?',
a25: 'Настройки → Внешний вид → Тема выбирает из 60+ тем в 8 группах (Psysonic, Mediaplayer, Операционные системы, Игры, Фильмы, Сериалы, Соцсети, Open Source Classics — Catppuccin / Nord / Gruvbox / Nightfox / Dracula). Auto-Switch Theme позволяет задать дневную и ночную тему со временем переключения, чтобы Psysonic переключался автоматически.',
q26: 'Можно настроить боковую панель, Главную и страницу исполнителя?',
a26: 'Да — Настройки → Персонализация. Кастомизатор боковой панели позволяет перетаскивать nav-элементы в нужном порядке и скрывать те, что не используются. Кастомизатор Главной включает/выключает каждый ряд Mainstage (Hero, Recent, Discover, Recently Played, Starred…). Кастомизатор страницы исполнителя меняет порядок секций (Top Songs, Альбомы, Синглы, Сборники, Похожие исполнители и т. д.) и позволяет скрывать те, на которые вы не смотрите.',
q27: 'Что такое Mini Player?',
a27: 'Маленькое плавающее окно с обложкой, элементами управления воспроизведением и компактной очередью. Открывается из иконки mini-player в плеере или сочетанием клавиш. Окно запоминает позицию и размер между сессиями. На Windows mini-webview предсоздаётся при запуске для мгновенного открытия; Linux / macOS включают это опционально через Настройки → Внешний вид → Предзагружать mini player.',
q28: 'Что такое Floating Player Bar?',
a28: 'Опциональный стиль плеера (Настройки → Внешний вид), который отделяется от нижней границы с тематическим фоном, акцентной рамкой, скруглённой обложкой и центрированной секцией громкости. Полезно на высоких мониторах или с компактными темами.',
q29: 'Превью трека по наведению?',
a29: 'Наведите мышь на строку трека, кликните маленькую кнопку превью на обложке или вызовите превью из контекстного меню — Psysonic стримит первые ~15 с через тот же Rust-аудио-движок, чтобы применилась нормализация громкости. Полезно для быстрого знакомства с альбомом, который вы ещё не слушали.',
q30: 'Таймер сна?',
a30: 'Кликните иконку луны в плеере, чтобы открыть таймер сна. Выберите длительность (или «конец текущего трека») и Psysonic плавно затухнет и поставит на паузу в конце. На кнопке отображается круговое кольцо и обратный отсчёт во время работы таймера.',
q31: 'Масштаб UI, шрифт, стиль seekbar?',
a31: 'Настройки → Внешний вид — Масштаб интерфейса (80–125 % без влияния на системный размер шрифта), Шрифт (10 UI шрифтов, включая IBM Plex Mono, Fira Code, Geist, Golos Text…), Стиль Seekbar (Волна анализированная / pseudowave детерминированная / Линия и Точка / Полоса / Толстая полоса / Сегментированный / Неон / Импульсная волна / Шлейф частиц / Жидкое заполнение / Ретро-плёнка).',
s8: 'Опытный пользователь',
q32: 'Управление плеером из командной строки?',
a32: 'Бинарь Psysonic также служит пультом дистанционного управления. Примеры: psysonic --player play / pause / next / prev, --player volume 75, --player seek 15, --player shuffle, --player repeat off|all|one, --player rating 1-5. Переключайте серверы, аудиоустройства, библиотеки; запускайте Instant Mix; ищите исполнителей / альбомы / треки. Полный список через psysonic --player --help. Shell-автодополнение для bash и zsh через psysonic completions.',
q33: 'Умные плейлисты (Navidrome)?',
a33: 'Умные плейлисты — это динамические плейлисты на стороне Navidrome, определяемые правилами (жанр = Рок И год > 2020 и т. д.). Страница Плейлисты в Psysonic позволяет создавать, редактировать и удалять их с визуальным редактором правил — Psysonic общается с Navidrome native API для этого. Они ведут себя как обычные плейлисты в остальной части приложения и обновляются автоматически при изменении библиотеки.',
q34: 'Резервная копия и восстановление настроек?',
a34: 'Настройки → Хранилище → Резервное копирование экспортирует профили серверов, темы, сочетания клавиш и другие настройки в один JSON файл. Импортируйте файл на другой машине или после переустановки, чтобы восстановить всё сразу. Пароли серверов включены — храните файл в надёжном месте.',
q35: 'Где смотреть все open-source лицензии?',
a35: 'Настройки → Система → Open Source Licenses. Полный список зависимостей (cargo crates и npm пакеты) поставляется со встроенными текстами лицензий. Кликните на запись для полного текста; выделенный блок сверху подсвечивает узнаваемые библиотеки (Tauri, React, rodio, symphonia и т. д.).',
s9: 'Офлайн и Sync',
q36: 'Офлайн-режим — кэширование альбомов и плейлистов?',
a36: 'Откройте любой альбом или плейлист и кликните иконку загрузки в шапке — Psysonic кэширует каждый трек локально, чтобы он играл с диска без сетевого вызова. Страница Офлайн-библиотека (боковая панель) показывает всё кэшированное, прогресс текущих загрузок и позволяет удалять записи иконкой корзины (появляется после завершения загрузки).',
q37: 'Лимит офлайн-хранилища?',
a37: 'Настройки → Библиотека → Офлайн позволяет задать максимальный размер кэша. При достижении лимита кнопка загрузки на странице альбома показывает предупреждающий баннер. Освободите место, удалив альбомы или плейлисты со страницы Офлайн-библиотека.',
q38: 'Device Sync — копирование музыки на USB / SD?',
a38: 'Device Sync (боковая панель) копирует альбомы, плейлисты или целых исполнителей на внешний диск для офлайн-прослушивания на других устройствах. Выберите целевую папку, выберите источники из вкладок браузера, нажмите «Перенести на устройство». Psysonic пишет манифест (psysonic-sync.json), чтобы знать, какие файлы уже там, даже если переоткрыть Device Sync на другой ОС с другим шаблоном имени файла. Шаблоны поддерживают токены {artist} / {album} / {title} / {track_number} / {disc_number} / {year} с / как разделителем папок.',
s10: 'Интеграции и Устранение неполадок',
q39: 'Скробблинг Last.fm?',
a39: 'Настройки → Интеграции → Last.fm. Подключите аккаунт один раз, и Psysonic скробблит напрямую в Last.fm — настройка Navidrome не нужна. Скроббл отправляется после прослушивания 50 % трека. Now-playing пинги отправляются в начале.',
q40: 'Discord Rich Presence?',
a40: 'Настройки → Интеграции → Discord показывает текущий трек в вашем профиле Discord. Выберите между иконкой приложения, обложками с вашего сервера (через getAlbumInfo2 — нужен публично доступный сервер) или обложками Apple Music. Кастомизируйте отображаемые строки (детали, состояние, тултип) с помощью токен-шаблонов.',
q41: 'Даты туров Bandsintown?',
a41: 'Включается в Настройки → Интеграции → Now-Playing Info. Вкладка Now Playing на странице Now Playing затем показывает предстоящие даты туров для играющего исполнителя через Bandsintown widget API. По умолчанию выключено — никаких запросов до включения.',
q42: 'Internet Radio — воспроизведение живых стримов?',
a42: 'Internet Radio (боковая панель) проигрывает любой live-стрим, сохранённый на вашем сервере Navidrome (добавляйте станции через Navidrome admin UI). Воспроизведение работает через HTML5 audio движок браузера — большинство настроек EQ / Replay Gain / Loudness не применяются к радио, но ICY-метаданные (текущее имя песни) отображаются. Поддерживает MP3, AAC, OGG Vorbis и большинство HLS стримов; поддержка кодеков зависит от платформы.',
q43: 'Тест соединения не проходит — что делать?',
a43: 'Дважды проверьте URL включая порт (например, http://192.168.1.100:4533). В локальной сети http:// часто работает там, где https:// не работает (нет сертификата). Убедитесь, что firewall не блокирует порт и что имя пользователя и пароль правильные. Если сервер за reverse proxy, попробуйте сначала прямой URL для изоляции причины.',
q44: 'Обложки и изображения исполнителей загружаются медленно.',
a44: 'Изображения подгружаются с сервера при первом просмотре, затем кэшируются локально на 30 дней. Если хранилище сервера медленное, первый визит на страницу может занять момент; последующие визиты мгновенные. Hot Cache также помогает с треками, но кэш изображений независим.',
q45: 'Проблемы Linux — чёрный экран или нет звука?',
a45: 'Чёрный экран обычно проблема GPU / EGL драйвера в WebKitGTK — запускайте с GDK_BACKEND=x11 WEBKIT_DISABLE_COMPOSITING_MODE=1 WEBKIT_DISABLE_DMABUF_RENDERER=1 (AUR / .deb / .rpm установщики устанавливают это автоматически). Для аудио убедитесь, что PipeWire или PulseAudio запущены. Пропадание звука после спящего режима / пробуждения теперь обрабатывается автоматически post-sleep recovery hook.',
},
queue: {
title: 'Очередь',
savePlaylist: 'Сохранить как плейлист',
updatePlaylist: 'Обновить плейлист',
filterPlaylists: 'Фильтр плейлистов…',
playlistName: 'Название плейлиста',
cancel: 'Отмена',
save: 'Сохранить',
loadPlaylist: 'Загрузить плейлист',
loading: 'Загрузка…',
noPlaylists: 'Плейлистов нет.',
load: 'Заменить очередь и играть',
appendToQueue: 'Добавить в очередь',
delete: 'Удалить',
deleteConfirm: 'Удалить плейлист «{{name}}»?',
clear: 'Очистить',
shuffle: 'Перемешать',
gapless: 'Без пауз',
crossfade: 'Кроссфейд',
infiniteQueue: 'Бесконечная очередь',
autoAdded: '— Добавлено автоматически —',
radioAdded: '— Радио —',
hide: 'Скрыть',
hideNowPlaying: 'Скрыть информацию о воспроизведении',
showNowPlaying: 'Показать информацию о воспроизведении',
close: 'Закрыть',
nextTracks: 'Дальше',
shareQueue: 'Копировать ссылку на очередь',
shareQueueEmpty: 'Очередь пуста — нечем поделиться.',
emptyQueue: 'Очередь пуста.',
trackSingular: 'трек',
trackPlural: 'треков',
showRemaining: 'Осталось',
showTotal: 'Всего',
showEta: 'Показать ориентировочное окончание',
replayGain: 'ReplayGain',
rgTrack: 'Т {{db}} дБ',
rgAlbum: 'А {{db}} дБ',
rgPeak: 'Пик {{pk}}',
sourceOffline: 'Играет из офлайн-библиотеки',
sourceHot: 'Играет из кэша',
sourceStream: 'Играет из сетевого потока',
},
miniPlayer: {
showQueue: 'Показать очередь',
hideQueue: 'Скрыть очередь',
pinOnTop: 'Поверх окон',
pinOff: 'Открепить',
openMainWindow: 'Открыть главное окно',
close: 'Закрыть',
emptyQueue: 'Очередь пуста',
},
statistics: {
title: 'Статистика',
recentlyPlayed: 'Недавно проиграно',
mostPlayed: 'Самые проигранные альбомы',
highestRated: 'С высоким рейтингом',
genreDistribution: 'Жанры (топ-20)',
loadMore: 'Ещё',
statArtists: 'Исполнители',
statArtistsTooltip: 'Только исполнители альбомов — артисты, присутствующие лишь в треках (фичеринг, гость и т. д.) без собственного альбома, не учитываются.',
statAlbums: 'Альбомы',
statSongs: 'Треки',
statGenres: 'Жанры',
statPlaytime: 'Время звучания',
genreInsights: 'По жанрам',
formatDistribution: 'Форматы',
formatSample: 'Выборка {{n}} треков',
computing: 'Считаем…',
genreSongs_one: '{{count}} композиция',
genreSongs_few: '{{count}} композиции',
genreSongs_many: '{{count}} композиций',
genreSongs_other: '{{count}} композиций',
genreAlbums_one: '{{count}} альбом',
genreAlbums_few: '{{count}} альбома',
genreAlbums_many: '{{count}} альбомов',
genreAlbums_other: '{{count}} альбомов',
recentlyAdded: 'Недавно добавлено',
decadeDistribution: 'Альбомы по десятилетиям',
decadeAlbums_one: '{{count}} альбом',
decadeAlbums_few: '{{count}} альбома',
decadeAlbums_many: '{{count}} альбомов',
decadeAlbums_other: '{{count}} альбомов',
decadeUnknown: 'Неизвестно',
lfmTitle: 'Статистика Last.fm',
lfmTopArtists: 'Топ исполнителей',
lfmTopAlbums: 'Топ альбомов',
lfmTopTracks: 'Топ треков',
lfmPlays_one: '{{count}} прослушивание',
lfmPlays_few: '{{count}} прослушивания',
lfmPlays_many: '{{count}} прослушиваний',
lfmPlays_other: '{{count}} прослушиваний',
lfmPeriodOverall: 'За всё время',
lfmPeriod7day: '7 дней',
lfmPeriod1month: 'Месяц',
lfmPeriod3month: '3 месяца',
lfmPeriod6month: '6 месяцев',
lfmPeriod12month: 'Год',
lfmNotConnected: 'Подключите Last.fm в настройках.',
lfmRecentTracks: 'Последние скробблы',
lfmNowPlaying: 'Сейчас играет',
lfmJustNow: 'только что',
lfmMinutesAgo: '{{n}} мин назад',
lfmHoursAgo: '{{n}} ч назад',
lfmDaysAgo: '{{n}} дн. назад',
topRatedSongs: 'Лучшие по рейтингу треки',
topRatedArtists: 'Лучшие по рейтингу исполнители',
noRatedSongs: 'Нет оценённых треков. Ставьте оценки в альбомах или плейлистах.',
noRatedArtists: 'Нет оценённых исполнителей.',
},
player: {
regionLabel: 'Плеер',
openFullscreen: 'Полноэкранный плеер',
fullscreen: 'Полноэкранный режим',
closeFullscreen: 'Выйти из полноэкранного',
closeTooltip: 'Закрыть (Esc)',
noTitle: 'Без названия',
stop: 'Стоп',
prev: 'Предыдущий трек',
play: 'Играть',
pause: 'Пауза',
previewActive: 'Превью воспроизводится',
previewLabel: 'Превью',
delayModalTitle: 'Таймер',
delayPauseSection: 'Пауза через',
delayStartSection: 'Старт через',
delayPreviewPause: 'Пауза в',
delayPreviewStart: 'Старт в',
delaySchedulePause: 'Запланировать паузу',
delayScheduleStart: 'Запланировать старт',
delayCancelPause: 'Отменить таймер паузы',
delayCancelStart: 'Отменить таймер старта',
delayInactivePause: 'Доступно только во время воспроизведения.',
delayInactiveStart: 'Доступно на паузе при загруженном треке или радио.',
delayCustomMinutes: 'Своя задержка (минуты)',
delayCustomPlaceholder: 'напр. 2.5',
closeDelayModal: 'Закрыть',
delayIn: 'через',
delayFmtSec: '{{n}} с',
delayFmtMin: '{{n}} мин',
delayFmtHr: '{{n}} ч',
delayCancel: 'Отмена',
delayApply: 'Применить',
next: 'Следующий трек',
repeat: 'Повтор',
repeatOff: 'Выкл.',
repeatAll: 'Все',
repeatOne: 'Один',
progress: 'Прогресс',
volume: 'Громкость',
toggleQueue: 'Очередь',
collapseQueueResize: 'Свернуть очередь, изменить ширину',
moreOptions: 'Дополнительно',
equalizer: 'Эквалайзер',
miniPlayer: 'Мини-плеер',
lyrics: 'Текст',
lyricsLoading: 'Загрузка текста…',
lyricsNotFound: 'Текст не найден',
lyricsSourceNetease: 'Источник: Netease',
lyricsSourceLyricsplus: 'Источник: YouLyPlus',
showDuration: 'Показать длительность',
showRemainingTime: 'Показать оставшееся время',
},
nowPlayingInfo: {
tab: 'Инфо',
empty: 'Включите воспроизведение, чтобы увидеть информацию',
artist: 'Исполнитель',
songInfo: 'О треке',
onTour: 'В туре',
noTourEvents: 'Нет предстоящих концертов',
tourLoading: 'Загрузка…',
poweredByBandsintown: 'Данные о туре через Bandsintown',
bioReadMore: 'Читать дальше',
bioReadLess: 'Свернуть',
showMoreTours_one: 'Показать ещё {{count}}',
showMoreTours_few: 'Показать ещё {{count}}',
showMoreTours_many: 'Показать ещё {{count}}',
showMoreTours_other: 'Показать ещё {{count}}',
showLessTours: 'Свернуть',
enableBandsintownPrompt: 'Показать предстоящие концерты?',
enableBandsintownPromptDesc: 'Опционально. Загружает концерты текущего исполнителя через публичный API Bandsintown.',
enableBandsintownPrivacy: 'При включении имя текущего исполнителя отправляется в API Bandsintown для получения дат концертов. Аккаунт и личные данные не передаются.',
enableBandsintownAction: 'Включить',
role: {
artist: 'Исполнитель',
albumArtist: 'Исполнитель альбома',
composer: 'Композитор',
},
},
songInfo: {
title: 'О треке',
songTitle: 'Название',
artist: 'Исполнитель',
album: 'Альбом',
albumArtist: 'Альбомный исполнитель',
year: 'Год',
genre: 'Жанр',
duration: 'Длительность',
track: 'Номер',
format: 'Формат',
bitrate: 'Битрейт',
sampleRate: 'Частота',
bitDepth: 'Разрядность',
channels: 'Каналы',
fileSize: 'Размер файла',
path: 'Путь',
replayGainTrack: 'RG по треку',
replayGainAlbum: 'RG по альбому',
replayGainPeak: 'Пик RG',
mono: 'Моно',
stereo: 'Стерео',
},
playlists: {
title: 'Плейлисты',
newPlaylist: 'Новый плейлист',
unnamed: 'Без названия',
createName: 'Название…',
create: 'Создать',
cancel: 'Отмена',
empty: 'Плейлистов пока нет.',
emptyPlaylist: 'Плейлист пуст.',
addFirstSong: 'Добавьте первый трек',
notFound: 'Плейлист не найден.',
songs: 'Треков: {{n}}',
playAll: 'Воспроизвести всё',
shuffle: 'Перемешать',
addToQueue: 'В очередь',
back: 'К списку плейлистов',
deletePlaylist: 'Удалить',
confirmDelete: 'Нажмите ещё раз для подтверждения',
removeSong: 'Убрать из плейлиста',
addSongs: 'Добавить треки',
searchPlaceholder: 'Поиск по библиотеке…',
noResults: 'Ничего не найдено.',
suggestions: 'Рекомендации',
noSuggestions: 'Пока нет рекомендаций.',
titleBadge: 'Плейлист',
refreshSuggestions: 'Обновить подборку',
addSong: 'В плейлист',
preview: 'Превью (30 с)',
previewStop: 'Остановить превью',
playNextSuggestion: 'Играть следующим',
suggestionsHint: 'Двойной клик по строке — добавить в плейлист',
addSelected: 'Добавить выбранные',
cacheOffline: 'Сохранить плейлист офлайн',
offlineCached: 'Плейлист сохранён',
removeOffline: 'Удалить из офлайн-кэша',
offlineDownloading: 'Кэширование… ({{done}} из {{total}} альбомов)',
publicLabel: 'Публичный',
privateLabel: 'Личный',
editMeta: 'Изменить плейлист',
editNamePlaceholder: 'Название…',
editCommentPlaceholder: 'Описание…',
editPublic: 'Публичный плейлист',
editSave: 'Сохранить',
editCancel: 'Отмена',
changeCover: 'Сменить обложку',
changeCoverLabel: 'Сменить фото',
removeCover: 'Убрать фото',
coverUpdated: 'Обложка обновлена',
metaSaved: 'Плейлист сохранён',
downloadZip: 'Скачать (ZIP)',
// Toast notifications for multi-select
addSuccess: '{{count}} треков добавлено в {{playlist}}',
addPartial: '{{added}} добавлено, {{skipped}} пропущено (дубликаты)',
addAllSkipped: 'Все пропущены ({{count}} дубликатов)',
addedAsDuplicates: '{{count}} треков добавлено в {{playlist}} (как дубликаты)',
duplicateConfirmTitle: 'Уже в плейлисте',
duplicateConfirmMessage: 'Все {{count}} треков уже есть в «{{playlist}}». Всё равно добавить их как дубликаты?',
duplicateConfirmAction: 'Всё равно добавить',
addError: 'Ошибка при добавлении треков',
createAndAddSuccess: 'Плейлист "{{playlist}}" создан с {{count}} треками',
createError: 'Ошибка при создании плейлиста',
deleteSuccess: '{{count}} плейлистов удалено',
deleteFailed: 'Ошибка при удалении {{name}}',
deleteSelected: 'Удалить выбранные',
deleteSelectedPartial: 'Можно удалить только {{n}} из {{total}} выбранных плейлистов (остальные принадлежат другим пользователям).',
mergeSuccess: '{{count}} треков объединено в {{playlist}}',
mergeNoNewSongs: 'Нет новых треков для добавления',
mergeError: 'Ошибка при объединении плейлистов',
mergeInto: 'Объединить в',
selectionCount: '{{count}} выбрано',
select: 'Выбрать',
startSelect: 'Включить выбор',
cancelSelect: 'Отмена',
loadingAlbums: 'Загрузка {{count}} альбомов…',
loadingArtists: 'Загрузка {{count}} исполнителей…',
myPlaylists: 'Мои плейлисты',
noOtherPlaylists: 'Нет других доступных плейлистов',
addToPlaylistSuccess: '{{count}} треков добавлено в {{playlist}}',
addToPlaylistNoNew: 'Нет новых треков для {{playlist}}',
addToPlaylistError: 'Ошибка при добавлении в плейлист',
removeSuccess: 'Трек убран из плейлиста',
removeError: 'Ошибка при удалении из плейлиста',
importCSV: 'Импорт CSV',
importCSVTooltip: 'Импорт из CSV Spotify',
csvImportReport: 'Отчёт об импорте CSV',
csvImportTotal: 'Всего',
csvImportAdded: 'Добавлено',
csvImportDuplicates: 'Дубликаты',
csvImportNotFound: 'Не найдено',
csvImportNetworkErrors: 'Ошибки сети',
csvImportDuplicatesTitle: 'Дубликаты (уже в плейлисте):',
csvImportNotFoundTitle: 'Не найденные треки:',
csvImportNetworkErrorsTitle: 'Ошибки сети (можно повторить импорт):',
csvImportDownloadReport: 'Скачать отчёт',
csvImportClose: 'Закрыть',
csvImportNoValidTracks: 'В CSV-файле не найдено действительных треков',
csvImportFailed: 'Не удалось импортировать CSV-файл',
csvImportToast: '{{added}} добавлено, {{notFound}} не найдено, {{duplicates}} дубликатов',
csvImportDownloadSuccess: 'Отчёт успешно скачан',
csvImportDownloadError: 'Не удалось скачать отчёт',
},
smartPlaylists: {
sectionBasic: '1. База',
sectionGenres: '2. Жанры',
sectionYearsAndFilters: '3. Годы и фильтры',
genreMode: 'Режим жанров',
genreModeInclude: 'Включить жанры',
genreModeExclude: 'Исключить жанры',
genreSearchPlaceholder: 'Фильтр жанров...',
availableGenres: 'Доступные',
selectedGenres: 'Выбранные',
yearMode: 'Режим годов',
yearModeInclude: 'Включить диапазон',
yearModeExclude: 'Исключить диапазон',
name: 'Название (без префикса)',
limit: 'Лимит',
limitHint: 'Сколько треков включать в плейлист (1-{{max}}, обычно 50).',
artistContains: 'Исполнитель содержит…',
albumContains: 'Альбом содержит…',
titleContains: 'Название содержит…',
minRating: 'Мин. рейтинг',
minRatingAria: 'Минимальный рейтинг для смарт-плейлиста',
minRatingHint: '0 — без минимального порога; 1-5 — оставить треки с рейтингом выше выбранного.',
fromYear: 'Год от',
toYear: 'Год до',
excludeUnrated: 'Исключить треки без рейтинга',
compilationOnly: 'Только сборники',
create: 'Создать смарт-плейлист',
save: 'Сохранить смарт-плейлист',
created: 'Создан {{name}}',
updated: 'Обновлён {{name}}',
createFailed: 'Не удалось создать смарт-плейлист.',
updateFailed: 'Не удалось обновить смарт-плейлист.',
navidromeOnly: 'Смарт-плейлисты можно создавать только на серверах Navidrome.',
loadFailed: 'Не удалось загрузить смарт-плейлисты из Navidrome.',
sortRandom: 'Сортировка: случайно',
sortTitleAsc: 'Сортировка: название А-Я',
sortTitleDesc: 'Сортировка: название Я-А',
sortYearDesc: 'Сортировка: год по убыванию',
sortYearAsc: 'Сортировка: год по возрастанию',
sortPlayCountDesc: 'Сортировка: прослушивания по убыванию',
},
mostPlayed: {
title: 'Популярное',
topArtists: 'Топ исполнителей',
topAlbums: 'Топ альбомов',
plays: '{{n}} прослушиваний',
sortMost: 'Сначала популярные',
sortLeast: 'Сначала малоизвестные',
loadMore: 'Загрузить больше альбомов',
noData: 'Пока нет данных о прослушивании. Начните слушать!',
noArtists: 'Все исполнители отфильтрованы.',
filterCompilations: 'Скрыть исполнителей сборников (Various Artists, Soundtracks и др.)',
filterCompilationsShort: 'Скрыть сборники',
},
losslessAlbums: {
empty: 'В этой библиотеке пока нет lossless-альбомов.',
unsupported: 'Этот сервер не предоставляет метаданные, необходимые для поиска lossless-альбомов.',
slowFetchHint: 'Загружается медленнее других страниц альбомов — Psysonic проходит весь каталог песен по качеству.',
},
radio: {
title: 'Онлайн-радио',
empty: 'Радиостанции не настроены.',
addStation: 'Добавить станцию',
editStation: 'Изменить',
deleteStation: 'Удалить станцию',
confirmDelete: 'Нажмите ещё раз для подтверждения',
stationName: 'Название станции…',
streamUrl: 'URL потока…',
homepageUrl: 'Сайт станции (необязательно)',
save: 'Сохранить',
cancel: 'Отмена',
live: 'ЭФИР',
liveStream: 'Онлайн-радио',
openHomepage: 'Открыть сайт',
changeCoverLabel: 'Сменить обложку',
removeCover: 'Убрать обложку',
browseDirectory: 'Каталог станций',
directoryPlaceholder: 'Поиск станций…',
noResults: 'Станции не найдены.',
stationAdded: 'Станция добавлена',
filterAll: 'Все',
filterFavorites: 'Избранное',
sortManual: 'Вручную',
sortAZ: 'А → Я',
sortZA: 'Я → А',
sortNewest: 'Сначала новые',
favorite: 'В избранное',
unfavorite: 'Убрать из избранного',
noFavorites: 'Избранных станций нет.',
listenerCount_one: '{{count}} слушатель',
listenerCount_other: '{{count}} слушателей',
recentlyPlayed: 'Недавно сыгранное',
upNext: 'Следующий',
},
folderBrowser: {
empty: 'Папка пуста',
error: 'Ошибка загрузки',
},
deviceSync: {
title: 'Синхронизация устройства',
targetFolder: 'Папка назначения',
noFolderChosen: 'Папка не выбрана',
selectDrive: 'Выберите диск…',
refreshDrives: 'Обновить диски',
noDrivesDetected: 'Съёмные диски не обнаружены',
browseManual: 'Обзор вручную…',
free: 'свободно',
notMountedVolume: 'Цель не находится на смонтированном томе. Диск мог быть отключён.',
chooseFolder: 'Выбрать…',
filenameTemplate: 'Шаблон имени файла',
targetDevice: 'Целевое устройство',
templateHint: 'Переменные: {artist}, {album}, {title}, {track_number}, {disc_number}, {year}',
cleanupButton: 'Удалить файлы вне выборки',
cleanupNothingToDelete: 'Нечего удалять — устройство уже синхронизировано.',
confirmCleanup: 'Удалить {{count}} файл(ов) с устройства, не входящих в текущую выборку. Продолжить?',
cleanupComplete: '{{count}} файл(ов) удалено с устройства.',
selectedSources: 'Выбранные источники',
noSourcesSelected: 'Источники не выбраны. Нажмите на элементы в браузере, чтобы добавить их.',
clearAll: 'Очистить всё',
tabPlaylists: 'Плейлисты',
tabAlbums: 'Альбомы',
tabArtists: 'Исполнители',
searchPlaceholder: 'Поиск…',
syncButton: 'Синхронизировать на устройство',
actionTransfer: 'Перенести на устройство',
actionDelete: 'Удалить с устройства',
actionApplyAll: 'Применить все изменения',
templatePreview: 'Предпросмотр',
templatePresetStandard: 'Стандарт',
templatePresetMultiDisc: 'Мульти-диск',
templatePresetAltFolder: 'Альт. папка',
tokenSlashHint: '/ = разделитель папок',
cancel: 'Отмена',
noTargetDir: 'Сначала выберите папку назначения.',
noSources: 'Выберите хотя бы один источник.',
noTracks: 'В выбранных источниках не найдено треков.',
fetchError: 'Ошибка загрузки треков с сервера.',
syncComplete: 'Синхронизация завершена.',
dismiss: 'Закрыть',
cancelSync: 'Отмена',
syncCancelled: 'Синхронизация отменена ({{done}} / {{total}} перенесено).',
colName: 'Название',
colType: 'Тип',
colStatus: 'Статус',
onDevice: 'Управление устройством',
addSources: 'Добавить…',
syncResult: '{{done}} перенесено, {{skipped}} уже актуально ({{total}} всего)',
deleteFromDevice: 'Пометить для удаления ({{count}})',
confirmDelete: 'Удалить {{count}} запись(ей) с устройства: {{names}}?',
deleteComplete: '{{count}} запись(ей) удалено с устройства.',
manifestImported: 'Импортировано {{count}} источник(ов) из манифеста устройства.',
statusSynced: 'Синхронизировано',
statusPending: 'Ожидает',
statusDeletion: 'Удаление',
markForDeletion: 'Пометить для удаления',
removeSource: 'Удалить',
undoDeletion: 'Отменить удаление',
syncInBackground: 'Синхронизация запущена в фоне — можно перейти в другой раздел.',
syncInProgress: '{{done}} / {{total}} треков…',
syncSummary: 'Сводка синхронизации',
calculating: 'Вычисление необходимых данных…',
filesToAdd: 'Файлы для добавления:',
filesToDelete: 'Файлы для удаления:',
netChange: 'Чистое изменение:',
availableSpace: 'Доступное место на диске:',
spaceWarning: 'Предупреждение: на целевом устройстве недостаточно сообщаемого места.',
proceed: 'Продолжить синхронизацию',
notEnoughSpace: 'Обнаружено недостаточно физического места на диске!',
liveSearch: 'Live',
randomAlbumsLabel: 'Случайные альбомы',
},
orbit: {
triggerLabel: 'Orbit',
triggerTooltip: 'Начать или присоединиться к совместной сессии прослушивания',
launchCreate: 'Создать сессию',
launchJoin: 'Присоединиться к сессии',
launchHelp: 'Как это работает?',
launchHelpSoon: 'Скоро будет',
joinModalTitle: 'Присоединиться к сессии Orbit',
joinModalSub: 'Вставь ссылку-приглашение от хоста.',
joinModalLinkLabel: 'Ссылка-приглашение',
joinModalLinkPlaceholder: 'psysonic2-…',
joinModalLinkHelper: 'Работает с любой действительной ссылкой Orbit. Должна указывать на сервер, на котором ты сейчас авторизован.',
joinModalPasteTooltip: 'Вставить из буфера обмена',
joinModalSubmit: 'Присоединиться',
joinModalBusy: 'Подключение…',
joinErrEmpty: 'Вставь ссылку-приглашение.',
joinErrInvalid: 'Это не похоже на ссылку-приглашение Orbit.',
closeAria: 'Закрыть',
heroTitlePrefix: 'Слушай вместе с',
heroTitleBrand: 'Orbit',
heroSub: 'Начни сессию — другие пользователи на {{server}} будут слушать вместе и смогут предлагать треки.',
fallbackServer: 'этот сервер',
tipLan: 'Ты сейчас подключён через адрес домашней сети. Гости вне твоей сети не смогут присоединиться — переключись на публичный адрес сервера в настройках перед стартом.',
tipRemote: 'Чтобы гости вне домашней сети могли присоединиться, адрес сервера должен быть публично доступен. Если сервер только внутренний, переключись перед стартом.',
labelName: 'Название сессии',
namePlaceholder: 'Velvet Orbit',
reshuffleTooltip: 'Новое предложение',
reshuffleAria: 'Предложить новое название',
helperName: 'Как сессия будет отображаться у гостей — оставь или введи своё.',
labelMax: 'Макс. гостей',
helperMax: 'Ты не считаешься — это только ограничивает входящих гостей.',
labelLink: 'Ссылка-приглашение',
tooltipCopied: 'Скопировано',
tooltipCopy: 'Копировать',
ariaCopyLink: 'Копировать ссылку-приглашение',
helperLink: 'Отправь эту ссылку гостям. Они могут вставить её в Psysonic в любом месте с помощью Ctrl+V.',
labelClearQueue: 'Сначала очистить мою очередь',
helperClearQueue: 'Начать сессию с пустой очередью. Выкл.: уже поставленные треки остаются и делятся с гостями.',
btnCancel: 'Отмена',
btnStarting: 'Запуск…',
btnStart: 'Запустить Orbit',
btnCopyAndStart: 'Копировать ссылку и запустить',
errNameRequired: 'Пожалуйста, дай сессии название.',
errStartFailed: 'Не удалось запустить.',
hostLabel: 'Хост: {{name}}',
participantsTooltip: 'Участники',
settingsTooltip: 'Настройки сессии',
shareTooltip: 'Поделиться ссылкой-приглашением',
shuffleLabel: 'Следующее перемешивание через',
catchUpLabel: 'догнать',
catchUpTooltip: 'Перейти к текущей позиции хоста',
hostAway: 'Хост оффлайн',
hostOnline: 'Хост онлайн',
endTooltip: 'Завершить сессию',
leaveTooltip: 'Покинуть сессию',
helpTooltip: 'Как работает Orbit',
helpTitle: 'Как работает Orbit',
helpIntro: 'Orbit превращает Psysonic в общую комнату прослушивания. Хост выбирает музыку; гости слушают синхронно и могут предлагать треки.',
helpHostOnly: '(хост)',
helpSec1Title: 'Что такое Orbit?',
helpSec1Body: 'Режим «слушать вместе» — хост управляет воспроизведением, гости подключаются. Всё идёт через плейлисты на твоём собственном сервере Navidrome; никакой внешней инфраструктуры.',
helpSec2Title: 'Хост и гости',
helpSec2Body: 'Хост управляет воспроизведением (play / pause / skip / seek) и решает, когда завершить сессию. Гости следуют за воспроизведением хоста, могут предлагать треки и выходить или присоединяться в любое время. Только хост может исключать или навсегда банить участников.',
helpSec2WarnHead: 'Важно: отдельные аккаунты.',
helpSec2WarnBody: 'У каждого участника должен быть свой аккаунт Navidrome. Если хост и гость входят под одним и тем же пользователем, их отправки конфликтуют, и хост никогда не увидит предложения гостя.',
helpSec3Title: 'Запуск и приглашение',
helpSec3Body: 'Нажми кнопку «Orbit» → Создать сессию → стартовое окно покажет готовую ссылку для копирования и опционально позволит очистить текущую очередь. Делись ссылкой как угодно. Пока сессия активна, кнопка «Поделиться» в верхней панели сессии копирует ссылку в любой момент.',
helpSec4Title: 'Присоединение',
helpSec4Body: 'Вставь ссылку-приглашение в любом месте Psysonic с помощью Ctrl+V / Cmd+V — запрос на присоединение появится автоматически. Альтернатива: «Orbit» → Присоединиться к сессии → вставь в поле. Если ссылка указывает на сервер, где у тебя есть аккаунт, Psysonic переключит тебя автоматически. Если у тебя несколько аккаунтов на этом сервере, небольшой выбор спросит, какой использовать.',
helpSec5Title: 'Предложение треков',
helpSec5Body: 'В любом списке треков: двойной клик по строке или правый клик → «Добавить в сессию Orbit». Одиночный клик показывает подсказку вместо того, чтобы забрасывать весь альбом в общую очередь — это намеренно. Явные массовые действия вроде «Воспроизвести всё» или «Воспроизвести альбом» сначала запрашивают подтверждение, потом добавляют (никогда не заменяют).',
helpSec6Title: 'Общая очередь',
helpSec6Body: 'Очередь показывает предстоящие треки хоста — видно всем. Входящие массовые добавления всегда идут в конец, чтобы не потерять предложения гостей. Автоперемешивание периодически переупорядочивает очередь (настраивается: 1 / 5 / 10 / 15 / 30 мин). Если твоё воспроизведение отклоняется от хоста, кнопка «Догнать» в панели сессии возвращает тебя к live-позиции хоста.',
helpSec7Title: 'Подтверждения',
helpSec7Body: 'По умолчанию предложения гостей требуют ручного подтверждения — они появляются в полосе «Подтверждения» вверху панели очереди с кнопками принять / отклонить. В настройках сессии можно включить автоматическое подтверждение, и всё будет попадать сразу.',
helpSec8Title: 'Участники и настройки',
helpSec8Body: 'Открой иконку настроек в панели сессии для частоты перемешивания, автоподтверждения и быстрого «Перемешать сейчас». Нажми на количество участников, чтобы увидеть, кто подключён — исключить (может присоединиться снова по ссылке) или забанить (заблокирован для этой сессии). Гости тоже видят список участников, но только для чтения.',
helpSec9Title: 'Завершение сессии',
helpSec9Body: 'X хоста → диалог подтверждения → сессия закрывается для всех, серверные плейлисты очищаются автоматически. X гостя → гость выходит, сессия продолжается. Если хост молчит 5 минут, гость автоматически выходит с уведомлением; короткие переподключения в этом окне невидимы.',
participantsInviteLabel: 'Ссылка-приглашение',
participantsCountLabel: '{{count}} в сессии',
participantsHost: 'хост',
participantsEmpty: 'Пока нет гостей',
participantsKickTooltip: 'Удалить из сессии',
participantsKickAria: 'Удалить {{user}}',
participantsRemoveTooltip: 'Удалить из сессии',
participantsRemoveAria: 'Удалить {{user}} из этой сессии',
participantsBanTooltip: 'Забанить навсегда',
participantsBanAria: 'Забанить {{user}} навсегда',
participantsMuteTooltip: 'Запретить предлагать треки',
participantsUnmuteTooltip: 'Разрешить предлагать треки',
participantsMuteAria: 'Запретить {{user}} предлагать треки',
participantsUnmuteAria: 'Снова разрешить {{user}} предлагать треки',
confirmRemoveTitle: 'Удалить из сессии?',
confirmRemoveBody: '{{user}} будет удалён из сессии, но может присоединиться снова по твоей ссылке-приглашению.',
confirmRemoveConfirm: 'Удалить',
confirmBanTitle: 'Забанить навсегда?',
confirmBanBody: '{{user}} будет удалён и заблокирован от повторного присоединения к этой сессии. Отменить нельзя на время сессии.',
confirmBanConfirm: 'Забанить',
confirmCancel: 'Отмена',
confirmJoinTitle: 'Присоединиться к сессии Orbit?',
confirmJoinBody: '{{host}} пригласил тебя в «{{name}}». Присоединиться к сессии?',
confirmJoinConfirm: 'Присоединиться',
confirmLeaveTitle: 'Покинуть сессию?',
confirmLeaveBody: 'Покинуть «{{name}}»? Ты можешь присоединиться снова в любое время по ссылке-приглашению от {{host}}.',
confirmLeaveConfirm: 'Покинуть',
confirmEndTitle: 'Завершить сессию для всех?',
confirmEndBody: '«{{name}}» закроется для всех участников. Плейлисты сессии очищаются автоматически.',
confirmEndConfirm: 'Завершить сессию',
invalidLinkTitle: 'Ссылка-приглашение больше недействительна',
invalidLinkBody: 'Эта сессия Orbit больше не существует или уже завершена. Попроси хоста прислать новую ссылку.',
settingsTitle: 'Настройки сессии',
settingAutoApprove: 'Автоматически принимать предложения',
settingAutoApproveHint: 'Предложения гостей сразу попадают в твою очередь. Выкл.: они остаются в списке сессии для последующего просмотра.',
settingAutoShuffle: 'Автоперемешивание',
settingAutoShuffleHint: 'Периодическое Fisher-Yates перемешивание предстоящей очереди. Выкл.: порядок меняется только при ручной перестановке.',
settingShuffleInterval: 'Перемешивать каждые',
settingShuffleIntervalHint: 'Как часто предстоящая очередь перемешивается во время сессии.',
suggestBlockedMuted: 'Хост отключил тебе предложение треков на этой сессии.',
settingShuffleIntervalValue_one: '{{count}} мин',
settingShuffleIntervalValue_few: '{{count}} мин',
settingShuffleIntervalValue_many: '{{count}} мин',
settingShuffleIntervalValue_other: '{{count}} мин',
settingShuffleNow: 'Перемешать сейчас',
toastSuggested: '{{user}} предложил «{{title}}»',
toastSuggestedMany: '{{count}} новых предложений в очереди',
toastShuffled: 'Очередь перемешана',
toastJoined: 'Присоединился к сессии',
toastLoginFirst: 'Войди, прежде чем присоединяться к сессии',
toastSwitchServer: 'Сначала переключись на {{url}}, потом вставь снова',
toastNoAccountForServer: 'У тебя нет доступа к {{url}}. Попроси хоста прислать приглашение.',
toastSwitchFailed: 'Не удалось переключиться на {{url}}',
accountPickerTitle: 'Какой аккаунт?',
accountPickerSub: 'У тебя несколько аккаунтов для {{url}}. Выбери тот, под которым хочешь присоединиться.',
toastJoinFail: 'Не удалось присоединиться к сессии',
joinErrNotFound: 'Сессия не найдена',
joinErrEnded: 'Сессия завершена',
joinErrFull: 'Сессия заполнена',
joinErrKicked: 'Ты не можешь присоединиться к этой сессии',
joinErrNoUser: 'Нет активного сервера',
joinErrServerError: 'Не удалось присоединиться',
ctxAddToSession: 'Добавить в сессию Orbit',
ctxSuggestedToast: 'Предложено в сессию',
ctxSuggestFailed: 'Не удалось предложить — не присоединён',
ctxAddToSessionHost: 'Добавить в сессию Orbit',
ctxAddedHostToast: 'Добавлено в сессию',
ctxAddHostFailed: 'Не удалось добавить в сессию',
bulkConfirmTitle: 'Добавить всё в очередь Orbit?',
bulkConfirmBody: 'Это сбросит {{count}} треков в общую очередь за раз. Это много для твоих гостей. Продолжить?',
bulkConfirmYes: 'Добавить всё',
bulkConfirmNo: 'Отмена',
guestLive: 'Live',
guestPlaying: 'Сейчас играет',
guestPaused: 'Пауза',
guestLoading: 'Загрузка…',
guestSuggestions: 'Предложения',
guestUpNext: 'Далее',
guestUpNextEmpty: 'В очереди пусто. Открой контекстное меню трека и выбери «Добавить в сессию Orbit», чтобы предложить что-то.',
guestPendingTitle: 'Ожидание хоста',
guestPendingHint: 'Предложено — появится в очереди, когда хост примет.',
approvalTitle: 'Ожидают подтверждения',
approvalFrom: 'Предложено {{user}}',
approvalAccept: 'Принять',
approvalDecline: 'Отклонить',
guestUpNextMore: '+ ещё {{count}} в очереди хоста',
guestSubmitter: 'от {{user}}',
queueAddedByHost: 'Добавил хост',
queueAddedByYou: 'Добавил(а) ты',
queueAddedByUser: 'Добавил {{user}}',
guestEmpty: 'Предложений пока нет. Открой контекстное меню трека и выбери «Добавить в сессию Orbit».',
guestFooter: 'Хост управляет воспроизведением — ты не можешь изменять список.',
exitKickedTitle: 'Тебя забанили в сессии',
exitRemovedTitle: 'Тебя удалили из сессии',
exitEndedTitle: 'Хост завершил сессию',
exitHostTimeoutTitle: 'Хост недоступен',
exitHostTimeoutBody: '{{host}} давно не присылал обновления, поэтому «{{name}}» закрыта на твоей стороне. Ты можешь присоединиться снова в любое время по ссылке.',
exitKickedBody: '{{host}} забанил тебя в «{{name}}». Ты не можешь присоединиться снова.',
exitRemovedBody: '{{host}} удалил тебя из «{{name}}». Ты можешь присоединиться снова в любое время по ссылке.',
exitEndedBody: '«{{name}}» завершена. Надеюсь, тебе понравилось.',
exitOk: 'ОК',
},
tray: {
playPause: 'Воспроизвести / Пауза',
nextTrack: 'Следующий трек',
previousTrack: 'Предыдущий трек',
showHide: 'Показать / Скрыть',
exitPsysonic: 'Закрыть Psysonic',
nothingPlaying: 'Ничего не воспроизводится',
},
licenses: {
title: 'Лицензии открытого кода',
intro: 'Psysonic построен на программном обеспечении с открытым исходным кодом. Список ниже показывает каждую зависимость, поставляемую с приложением, с версией, лицензией и полным текстом лицензии.',
highlights: 'Ключевые зависимости',
searchPlaceholder: 'Поиск по имени, версии или лицензии…',
noResults: 'Нет совпадений.',
loading: 'Загрузка лицензий…',
loadError: 'Не удалось загрузить данные о лицензиях.',
noLicenseText: 'Текст лицензии для этой зависимости не включён.',
viewSource: 'Открыть исходник',
totalLine: '{{total}} зависимостей — {{cargo}} cargo, {{npm}} npm',
generatedAt: 'Последняя генерация {{date}}',
},
};