mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 06:25:41 +00:00
feat(i18n): Russian locale and translations in src/locales
- Add Russian UI strings with idiomatic phrasing and plural forms - Split en/de/fr/nl/zh/nb strings into src/locales/*.ts for maintainability - Register ru in i18n and Settings language picker - Add languageRu to all locales; extend English help (supported languages) Made-with: Cursor
This commit is contained in:
@@ -0,0 +1,844 @@
|
||||
/** Russian UI strings — natural phrasing for a music desktop app */
|
||||
export const ruTranslation = {
|
||||
sidebar: {
|
||||
library: 'Медиатека',
|
||||
mainstage: 'Mainstage',
|
||||
newReleases: 'Новинки',
|
||||
allAlbums: 'Все альбомы',
|
||||
randomAlbums: 'Случайные альбомы',
|
||||
artists: 'Исполнители',
|
||||
randomMix: 'Случайный микс',
|
||||
favorites: 'Избранное',
|
||||
nowPlaying: 'Сейчас слушают',
|
||||
system: 'Система',
|
||||
statistics: 'Статистика',
|
||||
settings: 'Настройки',
|
||||
help: 'Справка',
|
||||
expand: 'Развернуть боковую панель',
|
||||
collapse: 'Свернуть боковую панель',
|
||||
updateAvailable: 'Доступно обновление',
|
||||
updateReady: '{{version}} готов к установке',
|
||||
updateLink: 'К релизу →',
|
||||
downloadingTracks: 'Кэширование {{n}} треков…',
|
||||
offlineLibrary: 'Офлайн-библиотека',
|
||||
genres: 'Жанры',
|
||||
playlists: 'Плейлисты',
|
||||
radio: 'Онлайн-радио',
|
||||
},
|
||||
home: {
|
||||
hero: 'Подборка',
|
||||
starred: 'Личное избранное',
|
||||
recent: 'Недавно добавлено',
|
||||
mostPlayed: 'Чаще всего',
|
||||
recentlyPlayed: 'Недавно проиграно',
|
||||
discover: 'Обзор',
|
||||
loadMore: 'Ещё',
|
||||
discoverMore: 'Смотреть ещё',
|
||||
discoverArtists: 'Исполнители',
|
||||
discoverArtistsMore: 'Все исполнители',
|
||||
},
|
||||
hero: {
|
||||
eyebrow: 'Альбом дня',
|
||||
playAlbum: 'Играть альбом',
|
||||
enqueue: 'В очередь',
|
||||
enqueueTooltip: 'Добавить весь альбом в очередь',
|
||||
},
|
||||
search: {
|
||||
placeholder: 'Исполнитель, альбом или трек…',
|
||||
noResults: 'Ничего не найдено по запросу «{{query}}»',
|
||||
artists: 'Исполнители',
|
||||
albums: 'Альбомы',
|
||||
songs: 'Треки',
|
||||
clearLabel: 'Очистить поиск',
|
||||
title: 'Поиск',
|
||||
resultsFor: 'Результаты по «{{query}}»',
|
||||
album: 'Альбом',
|
||||
advanced: 'Расширенный поиск',
|
||||
advancedSearchTerm: 'Запрос',
|
||||
advancedSearchPlaceholder: 'Название, альбом, исполнитель…',
|
||||
advancedGenre: 'Жанр',
|
||||
advancedAllGenres: 'Все жанры',
|
||||
advancedYear: 'Год',
|
||||
advancedYearFrom: 'с',
|
||||
advancedYearTo: 'по',
|
||||
advancedAll: 'Все',
|
||||
advancedSearch: 'Найти',
|
||||
advancedEmpty: 'Введите запрос или выберите фильтр.',
|
||||
advancedNoResults: 'Ничего не найдено.',
|
||||
advancedGenreNote: 'Треки выбираются случайно в рамках жанра.',
|
||||
},
|
||||
nowPlaying: {
|
||||
tooltip: 'Кто сейчас слушает?',
|
||||
title: 'Кто сейчас слушает?',
|
||||
loading: 'Загрузка…',
|
||||
nobody: 'Сейчас никто не слушает.',
|
||||
minutesAgo: '{{n}} мин назад',
|
||||
nothingPlaying: 'Пока тишина — включите трек.',
|
||||
aboutArtist: 'Об исполнителе',
|
||||
fromAlbum: 'С альбома',
|
||||
viewAlbum: 'Открыть альбом',
|
||||
goToArtist: 'К исполнителю',
|
||||
readMore: 'Подробнее',
|
||||
showLess: 'Свернуть',
|
||||
genreInfo: 'Жанр',
|
||||
trackInfo: 'О треке',
|
||||
},
|
||||
contextMenu: {
|
||||
playNow: 'Играть сейчас',
|
||||
playNext: 'Играть следующим',
|
||||
addToQueue: 'В конец очереди',
|
||||
enqueueAlbum: 'Альбом в очередь',
|
||||
startRadio: 'Радио по похожим',
|
||||
lfmLove: 'Любимое на Last.fm',
|
||||
lfmUnlove: 'Убрать с Last.fm',
|
||||
favorite: 'В избранное',
|
||||
favoriteArtist: 'Исполнитель в избранное',
|
||||
favoriteAlbum: 'Альбом в избранное',
|
||||
unfavorite: 'Убрать из избранного',
|
||||
unfavoriteArtist: 'Убрать исполнителя из избранного',
|
||||
unfavoriteAlbum: 'Убрать альбом из избранного',
|
||||
removeFromQueue: 'Убрать из очереди',
|
||||
openAlbum: 'Открыть альбом',
|
||||
goToArtist: 'К исполнителю',
|
||||
download: 'Скачать (ZIP)',
|
||||
addToPlaylist: 'В плейлист',
|
||||
songInfo: 'Сведения о треке',
|
||||
},
|
||||
albumDetail: {
|
||||
back: 'Назад',
|
||||
playAll: 'Играть всё',
|
||||
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: 'Название',
|
||||
trackArtist: 'Исполнитель',
|
||||
trackGenre: 'Жанр',
|
||||
trackFormat: 'Формат',
|
||||
trackFavorite: 'Избранное',
|
||||
trackRating: 'Оценка',
|
||||
trackDuration: 'Длительность',
|
||||
trackTotal: 'Итого',
|
||||
columns: 'Колонки',
|
||||
notFound: 'Альбом не найден.',
|
||||
bioModal: 'Биография исполнителя',
|
||||
bioClose: 'Закрыть',
|
||||
ratingLabel: 'Оценка',
|
||||
enlargeCover: 'Увеличить обложку',
|
||||
},
|
||||
artistDetail: {
|
||||
back: 'Назад',
|
||||
albums: 'Альбомы',
|
||||
album: 'Альбом',
|
||||
playAll: 'Играть всё',
|
||||
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: 'Не удалось загрузить изображение',
|
||||
},
|
||||
favorites: {
|
||||
title: 'Избранное',
|
||||
empty: 'Пока ничего не отмечено звёздочкой.',
|
||||
artists: 'Исполнители',
|
||||
albums: 'Альбомы',
|
||||
songs: 'Треки',
|
||||
enqueueAll: 'Всё в очередь',
|
||||
playAll: 'Играть всё',
|
||||
removeSong: 'Убрать из избранного',
|
||||
stations: 'Радиостанции',
|
||||
},
|
||||
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: 'Подобрать другие случайные треки',
|
||||
playAll: 'Играть всё',
|
||||
trackTitle: 'Название',
|
||||
trackArtist: 'Исполнитель',
|
||||
trackAlbum: 'Альбом',
|
||||
trackFavorite: 'Избранное',
|
||||
trackDuration: 'Длительность',
|
||||
favoriteAdd: 'В избранное',
|
||||
favoriteRemove: 'Убрать из избранного',
|
||||
play: 'Играть',
|
||||
trackGenre: 'Жанр',
|
||||
excludeAudiobooks: 'Исключать аудиокниги и радиоспектакли',
|
||||
excludeAudiobooksDesc:
|
||||
'По ключевым словам в жанре, названии, альбоме и исполнителе — например Hörbuch, Audiobook, Spoken Word и т. п.',
|
||||
genreBlocked: 'Слово отфильтровано',
|
||||
genreAddedToBlacklist: 'Добавлено в список фильтра',
|
||||
genreAlreadyBlocked: 'Уже в списке',
|
||||
artistBlocked: 'Исполнитель отфильтрован',
|
||||
artistAddedToBlacklist: 'Исполнитель добавлен в фильтр',
|
||||
artistClickHint: 'Нажмите, чтобы скрыть этого исполнителя',
|
||||
blacklistToggle: 'Фильтр по словам',
|
||||
genreMixTitle: 'Микс по жанру',
|
||||
genreMixDesc: 'Топ-20 жанров по числу треков — нажмите, чтобы собрать микс',
|
||||
genreMixLoadMore: 'Ещё 10 жанров',
|
||||
genreMixNoGenres: 'На сервере нет данных о жанрах.',
|
||||
shuffleGenres: 'Другие жанры',
|
||||
filterPanelTitle: 'Фильтры',
|
||||
filterPanelDesc:
|
||||
'Нажмите на тег жанра или имя исполнителя в списке ниже, чтобы исключить их из будущих миксов.',
|
||||
genreClickHint:
|
||||
'Нажмите на тег жанра — слово попадёт в фильтр.\nУчитываются жанр, название, альбом и исполнитель.',
|
||||
},
|
||||
albums: {
|
||||
title: 'Все альбомы',
|
||||
sortByName: 'А–Я (альбом)',
|
||||
sortByArtist: 'А–Я (исполнитель)',
|
||||
sortNewest: 'Сначала новые',
|
||||
sortRandom: 'Случайно',
|
||||
yearFrom: 'С',
|
||||
yearTo: 'По',
|
||||
yearFilterClear: 'Сбросить год',
|
||||
yearFilterLabel: 'Год',
|
||||
},
|
||||
artists: {
|
||||
title: 'Исполнители',
|
||||
search: 'Поиск…',
|
||||
all: 'Все',
|
||||
gridView: 'Сетка',
|
||||
listView: 'Список',
|
||||
imagesOn: 'Фото исполнителей — больше трафика и нагрузка на систему',
|
||||
imagesOff: 'Только инициалы — экономнее по трафику',
|
||||
loadMore: 'Ещё',
|
||||
notFound: 'Исполнители не найдены.',
|
||||
albumCount_one: '{{count}} альбом',
|
||||
albumCount_few: '{{count}} альбома',
|
||||
albumCount_many: '{{count}} альбомов',
|
||||
albumCount_other: '{{count}} альбомов',
|
||||
},
|
||||
login: {
|
||||
subtitle: 'Десктопный клиент для Navidrome',
|
||||
serverName: 'Название сервера (необязательно)',
|
||||
serverNamePlaceholder: 'Мой Navidrome',
|
||||
serverUrl: 'Адрес сервера',
|
||||
serverUrlPlaceholder: '192.168.1.100:4533 или music.example.com',
|
||||
username: 'Логин',
|
||||
usernamePlaceholder: 'admin',
|
||||
password: 'Пароль',
|
||||
showPassword: 'Показать пароль',
|
||||
hidePassword: 'Скрыть пароль',
|
||||
connect: 'Подключиться',
|
||||
connecting: 'Подключение…',
|
||||
connected: 'Готово!',
|
||||
error: 'Не удалось подключиться — проверьте данные.',
|
||||
urlRequired: 'Укажите адрес сервера.',
|
||||
savedServers: 'Сохранённые серверы',
|
||||
addNew: 'Или добавить новый сервер',
|
||||
},
|
||||
connection: {
|
||||
connected: 'Подключено',
|
||||
connectedTo: 'Сервер: {{server}}',
|
||||
disconnected: 'Нет связи',
|
||||
disconnectedFrom: 'Сервер {{server}} недоступен — нажмите для настроек',
|
||||
checking: 'Подключение…',
|
||||
extern: 'Внешний',
|
||||
offlineTitle: 'Нет связи с сервером',
|
||||
offlineSubtitle: 'Сервер {{server}} недоступен. Проверьте сеть и адрес.',
|
||||
offlineModeBanner: 'Офлайн — воспроизведение из локального кэша',
|
||||
offlineLibraryTitle: 'Офлайн-библиотека',
|
||||
offlineLibraryEmpty:
|
||||
'Пока ничего не сохранено. Подключитесь к сети, откройте альбом и нажмите «Сохранить офлайн».',
|
||||
offlineAlbumCount_one: '{{n}} альбом',
|
||||
offlineAlbumCount_few: '{{n}} альбома',
|
||||
offlineAlbumCount_many: '{{n}} альбомов',
|
||||
offlineAlbumCount_other: '{{n}} альбомов',
|
||||
offlineFilterAll: 'Всё',
|
||||
offlineFilterAlbums: 'Альбомы',
|
||||
offlineFilterPlaylists: 'Плейлисты',
|
||||
offlineFilterArtists: 'Дискографии',
|
||||
retry: 'Повторить',
|
||||
lastfmConnected: 'Last.fm: @{{user}}',
|
||||
lastfmSessionInvalid: 'Сессия недействительна — подключите снова',
|
||||
},
|
||||
common: {
|
||||
albums: 'Альбомы',
|
||||
album: 'Альбом',
|
||||
loading: 'Загрузка…',
|
||||
loadingMore: 'Загрузка…',
|
||||
loadingPlaylists: 'Загрузка плейлистов…',
|
||||
noAlbums: 'Альбомов нет.',
|
||||
downloading: 'Скачивание…',
|
||||
downloadZip: 'Скачать (ZIP)',
|
||||
back: 'Назад',
|
||||
cancel: 'Отмена',
|
||||
save: 'Сохранить',
|
||||
delete: 'Удалить',
|
||||
use: 'Использовать',
|
||||
add: 'Добавить',
|
||||
active: 'Активен',
|
||||
download: 'Скачать',
|
||||
chooseDownloadFolder: 'Выбрать папку',
|
||||
noFolderSelected: 'Папка не выбрана',
|
||||
rememberDownloadFolder: 'Запомнить папку',
|
||||
filterGenre: 'Фильтр по жанру',
|
||||
filterSearchGenres: 'Поиск жанров…',
|
||||
filterNoGenres: 'Нет совпадений',
|
||||
filterClear: 'Сбросить',
|
||||
bulkSelected: 'Выбрано: {{count}}',
|
||||
bulkAddToPlaylist: 'В плейлист',
|
||||
bulkRemoveFromPlaylist: 'Убрать из плейлиста',
|
||||
bulkClear: 'Снять выделение',
|
||||
updaterAvailable: 'Доступно обновление',
|
||||
updaterVersion: 'Версия {{version}} готова',
|
||||
updaterInstall: 'Установить и перезапустить',
|
||||
updaterDownloading: 'Скачивание…',
|
||||
updaterInstalling: 'Установка…',
|
||||
updaterDownload: 'Скачать с GitHub',
|
||||
updaterExperimentalHint: 'Автообновление в разработке',
|
||||
},
|
||||
settings: {
|
||||
title: 'Настройки',
|
||||
language: 'Язык',
|
||||
languageEn: 'Английский',
|
||||
languageDe: 'Немецкий',
|
||||
languageFr: 'Французский',
|
||||
languageNl: 'Нидерландский',
|
||||
languageZh: 'Китайский',
|
||||
languageNb: 'Норвежский',
|
||||
languageRu: 'Русский',
|
||||
font: 'Шрифт',
|
||||
theme: 'Тема',
|
||||
appearance: 'Оформление',
|
||||
servers: 'Серверы',
|
||||
serverName: 'Название',
|
||||
serverUrl: 'Адрес',
|
||||
serverUsername: 'Логин',
|
||||
serverPassword: 'Пароль',
|
||||
addServer: 'Добавить сервер',
|
||||
addServerTitle: 'Новый сервер',
|
||||
useServer: 'Выбрать',
|
||||
deleteServer: 'Удалить',
|
||||
noServers: 'Нет сохранённых серверов.',
|
||||
serverActive: 'Активен',
|
||||
confirmDeleteServer: 'Удалить сервер «{{name}}»?',
|
||||
serverConnecting: 'Подключение…',
|
||||
serverConnected: 'Подключено!',
|
||||
serverFailed: 'Ошибка подключения.',
|
||||
testBtn: 'Проверить',
|
||||
testingBtn: 'Проверка…',
|
||||
serverCompatible: 'Совместимость: Navidrome · Gonic · Airsonic · Subsonic',
|
||||
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: 'Офлайн-треки:',
|
||||
cacheMaxLabel: 'Лимит',
|
||||
cacheClearBtn: 'Очистить кэш',
|
||||
cacheClearWarning: 'Будут удалены и все офлайн-альбомы.',
|
||||
cacheClearConfirm: 'Очистить всё',
|
||||
cacheClearCancel: 'Отмена',
|
||||
offlineDirTitle: 'Офлайн-библиотека (в приложении)',
|
||||
offlineDirDesc: 'Папка для треков, сохранённых для офлайн-прослушивания.',
|
||||
offlineDirDefault: 'По умолчанию (данные приложения)',
|
||||
offlineDirChange: 'Сменить папку',
|
||||
offlineDirClear: 'Сбросить по умолчанию',
|
||||
offlineDirHint: 'Новые загрузки пойдут в выбранную папку. Старые останутся на прежнем месте.',
|
||||
showArtistImages: 'Фото исполнителей',
|
||||
showArtistImagesDesc:
|
||||
'Показывать обложки в разделе «Исполнители». По умолчанию выключено — меньше нагрузки на диск и сеть.',
|
||||
showTrayIcon: 'Иконка в трее',
|
||||
showTrayIconDesc: 'Показывать Psysonic в области уведомлений / строке меню.',
|
||||
minimizeToTray: 'Сворачивать в трей',
|
||||
minimizeToTrayDesc: 'При закрытии окна не выходить из приложения, а оставаться в трее.',
|
||||
discordRichPresence: 'Discord Rich Presence',
|
||||
discordRichPresenceDesc: 'Показывать текущий трек в профиле Discord. Нужен запущенный Discord.',
|
||||
nowPlayingEnabled: 'Показывать в «Сейчас слушают»',
|
||||
nowPlayingEnabledDesc:
|
||||
'Отправлять на сервер, что вы сейчас слушаете. Отключите, чтобы не делиться этим.',
|
||||
downloadsTitle: 'Экспорт ZIP и архивы',
|
||||
downloadsFolderDesc: 'Куда сохранять альбомы в виде ZIP на диск.',
|
||||
downloadsDefault: 'Папка «Загрузки» по умолчанию',
|
||||
pickFolder: 'Выбрать',
|
||||
pickFolderTitle: 'Папка для загрузок',
|
||||
clearFolder: 'Сбросить папку',
|
||||
logout: 'Выйти',
|
||||
aboutTitle: 'О Psysonic',
|
||||
aboutDesc:
|
||||
'Современный десктопный плеер для серверов с протоколом Subsonic (Navidrome, Gonic и др.). На Tauri v2 и нативном аудиодвижке на Rust — лёгкий и быстрый: волновая шкала, синхронные тексты, Last.fm, 10-полосный EQ, кроссфейд, gapless, Replay Gain, жанры и много тем оформления.',
|
||||
aboutFeatures:
|
||||
'Несколько серверов · Last.fm · полноэкранный режим · волна · тексты · 10 полос EQ · кроссфейд и gapless · Replay Gain · жанры · десятки тем · несколько языков',
|
||||
aboutLicense: 'Лицензия',
|
||||
aboutLicenseText: 'GNU GPL v3 — свободное использование и изменение на тех же условиях.',
|
||||
aboutRepo: 'Исходный код на GitHub',
|
||||
aboutVersion: 'Версия',
|
||||
aboutBuiltWith: 'Tauri · React · TypeScript · Rust/rodio',
|
||||
aboutAiCredit: 'При поддержке Claude Code (Anthropic)',
|
||||
aboutContributorsLabel: 'Участники',
|
||||
aboutSpecialThanksLabel: 'Особая благодарность',
|
||||
changelog: 'Список изменений',
|
||||
showChangelogOnUpdate: 'Показывать «Что нового» после обновления',
|
||||
showChangelogOnUpdateDesc: 'Автоматически при первом запуске новой версии.',
|
||||
randomMixTitle: 'Случайный микс',
|
||||
randomMixBlacklistTitle: 'Свои слова-фильтры',
|
||||
randomMixBlacklistDesc:
|
||||
'Треки скрываются, если слово встречается в жанре, названии, альбоме или исполнителе (когда включён фильтр выше).',
|
||||
randomMixBlacklistPlaceholder: 'Добавить слово…',
|
||||
randomMixBlacklistAdd: 'Добавить',
|
||||
randomMixBlacklistEmpty: 'Пока пусто.',
|
||||
randomMixHardcodedTitle: 'Встроенные слова (при включённом фильтре)',
|
||||
tabAudio: 'Звук',
|
||||
tabStorage: 'Хранилище и загрузки',
|
||||
tabAppearance: 'Внешний вид',
|
||||
homeCustomizerTitle: 'Главная',
|
||||
sidebarTitle: 'Боковая панель',
|
||||
sidebarReset: 'Сбросить порядок',
|
||||
sidebarDrag: 'Перетащите для порядка',
|
||||
sidebarFixed: 'Всегда показывать',
|
||||
tabInput: 'Ввод',
|
||||
tabServer: 'Сервер',
|
||||
tabSystem: 'Система',
|
||||
tabGeneral: 'Общие',
|
||||
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: 'Показать / скрыть очередь',
|
||||
shortcutFullscreenPlayer: 'Полноэкранный плеер',
|
||||
shortcutNativeFullscreen: 'Системный полный экран',
|
||||
playbackTitle: 'Воспроизведение',
|
||||
replayGain: 'Replay Gain',
|
||||
replayGainDesc: 'Выравнивание громкости по метаданным ReplayGain',
|
||||
replayGainMode: 'Режим',
|
||||
replayGainTrack: 'По треку',
|
||||
replayGainAlbum: 'По альбому',
|
||||
crossfade: 'Кроссфейд',
|
||||
crossfadeDesc: 'Плавный переход между треками',
|
||||
crossfadeSecs: '{{n}} с',
|
||||
notWithGapless: 'Недоступно при включённом gapless',
|
||||
notWithCrossfade: 'Недоступно при включённом кроссфейде',
|
||||
gapless: 'Без пауз между треками',
|
||||
gaplessDesc: 'Заранее подгружать следующий трек, чтобы не было тишины',
|
||||
preloadMode: 'Предзагрузка следующего трека',
|
||||
preloadModeDesc: 'Когда начинать буферизацию следующего в очереди',
|
||||
preloadBalanced: 'Умеренно (за 30 с до конца)',
|
||||
preloadEarly: 'Рано (через 5 с после старта)',
|
||||
preloadCustom: 'Свой интервал',
|
||||
preloadCustomSeconds: 'Секунд до конца: {{n}}',
|
||||
infiniteQueue: 'Бесконечная очередь',
|
||||
infiniteQueueDesc: 'Подмешивать случайные треки, когда очередь закончится',
|
||||
experimental: 'Экспериментально',
|
||||
},
|
||||
changelog: {
|
||||
modalTitle: 'Что нового',
|
||||
dontShowAgain: 'Больше не показывать',
|
||||
close: 'Понятно',
|
||||
},
|
||||
help: {
|
||||
title: 'Справка',
|
||||
s1: 'С чего начать',
|
||||
q1: 'Какие серверы подходят?',
|
||||
a1:
|
||||
'Любой с API Subsonic: Navidrome, Gonic, Subsonic, Airsonic и др. Для новых проектов чаще всего рекомендуют Navidrome.',
|
||||
q2: 'Как подключиться?',
|
||||
a2:
|
||||
'Настройки → «Добавить сервер»: адрес (например 192.168.1.100:4533), логин и пароль. Соединение проверяется до сохранения — при ошибке профиль не записывается.',
|
||||
q3: 'Можно несколько серверов?',
|
||||
a3: 'Да. Добавляйте сколько нужно и переключайтесь. Активен всегда один.',
|
||||
s2: 'Воспроизведение',
|
||||
q4: 'Как включить музыку?',
|
||||
a4:
|
||||
'Двойной щелчок по треку. На странице альбома или исполнителя — «Играть всё». Треки можно перетащить в панель очереди.',
|
||||
q5: 'Какие есть горячие клавиши?',
|
||||
a5:
|
||||
'Пробел — пауза/воспроизведение, Esc — закрыть полноэкранный плеер. Медиаклавиши работают на всех платформах; на Linux иногда удобнее кнопки в панели плеера. Свои сочетания — в Настройках.',
|
||||
q6: 'Что такое очередь?',
|
||||
a6:
|
||||
'Список следующих треков. Открывается иконкой справа вверху. Можно перетаскивать порядок, перемешивать и сохранять как плейлист.',
|
||||
q7: 'Как открыть полноэкранный плеер?',
|
||||
a7: 'Миниатюра обложки внизу или кнопка разворота рядом. Esc — выход.',
|
||||
q8: 'Как работает повтор?',
|
||||
a8: 'Кнопка повтора в панели: выкл. → все → один трек.',
|
||||
s3: 'Медиатека',
|
||||
q9: 'Как скачать альбом?',
|
||||
a9:
|
||||
'Страница альбома → «Скачать (ZIP)». Сервер сначала собирает архив — для больших альбомов или FLAC это может занять время; прогресс появится, когда начнётся передача файла.',
|
||||
q10: 'Как добавить в избранное?',
|
||||
a10: 'Звёздочка у трека или в шапке альбома. Всё избранное — в разделе слева.',
|
||||
q11: 'Что за карусель на главной?',
|
||||
a11:
|
||||
'Случайные альбомы из библиотеки, смена примерно каждые 10 с. Точки — перейти к слайду, клик по баннеру — открыть альбом.',
|
||||
s4: 'Настройки',
|
||||
q12: 'Как сменить тему?',
|
||||
a12: 'Настройки → Тема. Много готовых наборов в нескольких категориях.',
|
||||
q13: 'Как сменить язык?',
|
||||
a13: 'Настройки → Язык: английский, немецкий, французский, нидерландский, китайский, норвежский, русский.',
|
||||
q15: 'Куда сохраняются ZIP?',
|
||||
a15:
|
||||
'Настройки → Поведение → папка загрузок. Без выбора используется стандартная папка загрузок браузера/системы.',
|
||||
s5: 'Скробблинг',
|
||||
q16: 'Как устроен скробблинг?',
|
||||
a16:
|
||||
'Psysonic шлёт прослушивания напрямую на Last.fm — в Navidrome ничего настраивать не нужно. Подключите аккаунт в настройках.',
|
||||
q17: 'Когда уходит скроббл?',
|
||||
a17: 'После прослушивания примерно половины трека.',
|
||||
q22: 'Что за волна внизу?',
|
||||
a22:
|
||||
'Волновая шкала вместо ползунка: клик — переход, перетаскивание — перемотка. Пройденный фрагмент подсвечен, дальше — буфер и остаток.',
|
||||
q24: 'Можно перемешать очередь?',
|
||||
a24: 'Да. В панели очереди — кнопка перемешивания. Текущий трек остаётся первым.',
|
||||
q25: 'Ссылки Last.fm и Wikipedia открываются в браузере?',
|
||||
a25: 'Да, в системном браузере по умолчанию. Кратко показывается подтверждение.',
|
||||
s7: 'Случайный микс',
|
||||
q26: 'Что такое случайный микс?',
|
||||
a26:
|
||||
'Случайный набор треков из всей библиотеки. Раздел в боковой панели → «Новый микс». Число треков можно задать заранее.',
|
||||
q27: 'Что за фильтр по словам?',
|
||||
a27:
|
||||
'Исключает треки, где в жанре, названии или альбоме есть заданные слова. Аудиокниги отсекаются автоматически. Свои слова — в настройках микса или кликом по тегу жанра в списке.',
|
||||
q28: 'Что за «супер-микс» по жанру?',
|
||||
a28:
|
||||
'Грубая группировка стилей (рок, метал, электроника и т. д.) и микс внутри выбранной группы. Результаты подгружаются по мере запросов.',
|
||||
s6: 'Если что-то не так',
|
||||
q18: 'Медленно грузятся обложки.',
|
||||
a18:
|
||||
'Первый раз картинки тянутся с сервера и кэшируются на ~30 дней. Медленный диск на сервере даёт задержку только при первом заходе.',
|
||||
q19: 'Тест соединения не проходит.',
|
||||
a19:
|
||||
'Проверьте адрес с портом (http://192.168.1.100:4533), файрвол, для локалки иногда нужен http вместо https. Логин и пароль должны совпадать с сервером.',
|
||||
q20: 'Нет звука в Linux.',
|
||||
a20:
|
||||
'Есть пакеты .deb, .rpm и AUR. Убедитесь, что запущены PipeWire или PulseAudio.',
|
||||
q21: 'Чёрный экран в Linux.',
|
||||
a21:
|
||||
'Часто драйвер GPU / WebKitGTK. Запуск с GDK_BACKEND=x11 WEBKIT_DISABLE_COMPOSITING_MODE=1 WEBKIT_DISABLE_DMABUF_RENDERER=1. В официальных пакетах это часто уже задано.',
|
||||
q29: 'Кроссфейд и gapless?',
|
||||
a29:
|
||||
'Экспериментальные опции в Настройках → Звук. Gapless заранее подгружает следующий трек. Кроссфейд плавно накладывает треки, длина 1–10 с.',
|
||||
q30: 'Есть тексты песен?',
|
||||
a30:
|
||||
'Да. Иконка микрофона в панели плеера — вкладка текстов в очереди. Источник LRCLIB; синхронные строки подсвечиваются по ходу трека.',
|
||||
q31: 'Можно переназначить клавиши?',
|
||||
a31: 'Да: Настройки → сочетания в приложении и глобальные (работают в фоне).',
|
||||
q32: 'Можно сменить шрифт?',
|
||||
a32: 'Да, в настройках шрифта — набор гарнитур на весь интерфейс.',
|
||||
s8: 'Офлайн',
|
||||
q34: 'Что такое офлайн-режим?',
|
||||
a34:
|
||||
'Кэш альбомов на устройстве для прослушивания без сервера. Воспроизведение идёт с диска.',
|
||||
q35: 'Как сохранить альбом офлайн?',
|
||||
a35:
|
||||
'Страница альбома → иконка загрузки в шапке. Прогресс на кнопке, после загрузки — индикатор готовности. Список — в офлайн-библиотеке.',
|
||||
q36: 'Сколько места занимает офлайн?',
|
||||
a36:
|
||||
'Лимит задаётся в настройках. При переполнении на странице альбома появится предупреждение; удалить можно из офлайн-библиотеки.',
|
||||
},
|
||||
queue: {
|
||||
title: 'Очередь',
|
||||
savePlaylist: 'Сохранить как плейлист',
|
||||
updatePlaylist: 'Обновить плейлист',
|
||||
filterPlaylists: 'Фильтр плейлистов…',
|
||||
playlistName: 'Название плейлиста',
|
||||
cancel: 'Отмена',
|
||||
save: 'Сохранить',
|
||||
loadPlaylist: 'Загрузить плейлист',
|
||||
loading: 'Загрузка…',
|
||||
noPlaylists: 'Плейлистов нет.',
|
||||
load: 'Заменить очередь и играть',
|
||||
appendToQueue: 'Добавить в очередь',
|
||||
delete: 'Удалить',
|
||||
deleteConfirm: 'Удалить плейлист «{{name}}»?',
|
||||
clear: 'Очистить',
|
||||
shuffle: 'Перемешать',
|
||||
gapless: 'Gapless',
|
||||
crossfade: 'Кроссфейд',
|
||||
infiniteQueue: 'Бесконечная очередь',
|
||||
autoAdded: '— Добавлено автоматически —',
|
||||
radioAdded: '— Радио —',
|
||||
hide: 'Скрыть',
|
||||
close: 'Закрыть',
|
||||
nextTracks: 'Дальше',
|
||||
emptyQueue: 'Очередь пуста.',
|
||||
trackSingular: 'трек',
|
||||
trackPlural: 'треков',
|
||||
showRemaining: 'Осталось',
|
||||
showTotal: 'Всего',
|
||||
},
|
||||
statistics: {
|
||||
title: 'Статистика',
|
||||
recentlyPlayed: 'Недавно проиграно',
|
||||
mostPlayed: 'Самые проигранные альбомы',
|
||||
highestRated: 'С высоким рейтингом',
|
||||
genreDistribution: 'Жанры (топ-20)',
|
||||
loadMore: 'Ещё',
|
||||
statArtists: 'Исполнители',
|
||||
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}} дн. назад',
|
||||
},
|
||||
player: {
|
||||
regionLabel: 'Плеер',
|
||||
openFullscreen: 'Полноэкранный плеер',
|
||||
fullscreen: 'Полноэкранный режим',
|
||||
closeFullscreen: 'Выйти из полноэкранного',
|
||||
closeTooltip: 'Закрыть (Esc)',
|
||||
noTitle: 'Без названия',
|
||||
stop: 'Стоп',
|
||||
prev: 'Предыдущий трек',
|
||||
play: 'Играть',
|
||||
pause: 'Пауза',
|
||||
next: 'Следующий трек',
|
||||
repeat: 'Повтор',
|
||||
repeatOff: 'Выкл.',
|
||||
repeatAll: 'Все',
|
||||
repeatOne: 'Один',
|
||||
progress: 'Прогресс',
|
||||
volume: 'Громкость',
|
||||
toggleQueue: 'Очередь',
|
||||
lyrics: 'Текст',
|
||||
lyricsLoading: 'Загрузка текста…',
|
||||
lyricsNotFound: 'Текст не найден',
|
||||
},
|
||||
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: 'В плейлист',
|
||||
cacheOffline: 'Сохранить плейлист офлайн',
|
||||
offlineCached: 'Плейлист сохранён',
|
||||
offlineDownloading: 'Кэширование… ({{done}} из {{total}} альбомов)',
|
||||
publicLabel: 'Публичный',
|
||||
privateLabel: 'Личный',
|
||||
editMeta: 'Изменить плейлист',
|
||||
editNamePlaceholder: 'Название…',
|
||||
editCommentPlaceholder: 'Описание…',
|
||||
editPublic: 'Публичный плейлист',
|
||||
editSave: 'Сохранить',
|
||||
editCancel: 'Отмена',
|
||||
changeCover: 'Сменить обложку',
|
||||
changeCoverLabel: 'Сменить фото',
|
||||
removeCover: 'Убрать фото',
|
||||
coverUpdated: 'Обложка обновлена',
|
||||
metaSaved: 'Плейлист сохранён',
|
||||
},
|
||||
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: 'Избранных станций нет.',
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user