- core: PlayQueue with shuffle and repeat, PlayAttempt counting only time actually played, EventBuffer with batching and backoff, uuidv7 - web: Player over HTMLAudioElement with Media Session, preload of the next track, expired-link refresh, local and server playback state, hotkeys; PlayerProvider is not wired into the shell yet - ru/en strings and icons for the player and Collection Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
160 lines
6.3 KiB
JSON
160 lines
6.3 KiB
JSON
{
|
|
"app": {
|
|
"name": "pipu",
|
|
"tagline": "Ваша музыка с вашего сервера"
|
|
},
|
|
"server": {
|
|
"title": "Сервер",
|
|
"checking": "Проверяем сервер…",
|
|
"online": "Сервер {{version}} на связи",
|
|
"offline": "Сервер не отвечает. Проверьте адрес и сеть.",
|
|
"address": "Адрес сервера",
|
|
"check": "Проверить",
|
|
"invalid_address": "Введите адрес сервера, например https://music.home.lan",
|
|
"unsupported_app": "Эта версия приложения слишком старая для сервера — обновите приложение"
|
|
},
|
|
"language": {
|
|
"label": "Язык",
|
|
"ru": "Русский",
|
|
"en": "English"
|
|
},
|
|
"nav": {
|
|
"main": "Навигация",
|
|
"home": "Главная",
|
|
"admin": "Админка",
|
|
"users": "Пользователи",
|
|
"audit": "Журнал",
|
|
"library": "Библиотека",
|
|
"sources": "Хранилища",
|
|
"collection": "Коллекция",
|
|
"history": "История",
|
|
"likes": "Лайки",
|
|
"dislikes": "Дизлайки"
|
|
},
|
|
"profile": {
|
|
"menu": "Меню профиля",
|
|
"settings": "Настройки",
|
|
"logout": "Выйти"
|
|
},
|
|
"roles": {
|
|
"admin": "Администратор",
|
|
"moderator": "Модератор",
|
|
"user": "Пользователь"
|
|
},
|
|
"home": {
|
|
"greeting": "Привет, {{name}}!",
|
|
"wave": "Моя волна",
|
|
"wave_soon": "Бесконечная лента под ваш вкус появится, когда сервер подключит библиотеку."
|
|
},
|
|
"player": {
|
|
"empty": "Ничего не играет",
|
|
"label": "Плеер",
|
|
"play": "Слушать",
|
|
"pause": "Пауза",
|
|
"next": "Следующий",
|
|
"prev": "Предыдущий",
|
|
"like": "Нравится",
|
|
"unlike": "Убрать из лайков",
|
|
"dislike": "Не нравится",
|
|
"undislike": "Убрать дизлайк",
|
|
"volume": "Громкость",
|
|
"mute": "Выключить звук",
|
|
"unmute": "Включить звук",
|
|
"shuffle": "Перемешать",
|
|
"repeat_off": "Повтор выключен",
|
|
"repeat_all": "Повторять очередь",
|
|
"repeat_one": "Повторять трек",
|
|
"progress": "Позиция",
|
|
"unavailable": "Трек недоступен — пропускаем",
|
|
"error": "Не удалось воспроизвести трек"
|
|
},
|
|
"settings": {
|
|
"title": "Настройки",
|
|
"account": "Аккаунт",
|
|
"display_name": "Отображаемое имя",
|
|
"save": "Сохранить",
|
|
"saved": "Сохранено",
|
|
"appearance": "Внешний вид",
|
|
"theme": "Тема",
|
|
"theme_dark": "Тёмная",
|
|
"theme_light": "Светлая",
|
|
"theme_system": "Как в системе",
|
|
"password": "Пароль",
|
|
"current_password": "Текущий пароль",
|
|
"new_password": "Новый пароль",
|
|
"repeat_password": "Повторите пароль",
|
|
"change_password": "Сменить пароль",
|
|
"password_changed": "Пароль изменён. Другие устройства вышли из аккаунта.",
|
|
"sessions": "Устройства",
|
|
"session_current": "Это устройство",
|
|
"session_last_used": "Активность: {{date}}",
|
|
"session_end": "Завершить",
|
|
"logout_all": "Выйти на всех устройствах"
|
|
},
|
|
"form": {
|
|
"show_password": "Показать пароль",
|
|
"hide_password": "Скрыть пароль",
|
|
"passwords_mismatch": "Пароли не совпадают",
|
|
"required": "Заполните поле",
|
|
"cancel": "Отмена",
|
|
"close": "Закрыть",
|
|
"copy": "Копировать",
|
|
"copied": "Скопировано"
|
|
},
|
|
"loading": "Загрузка…",
|
|
"route_error": {
|
|
"reload": "Обновить страницу"
|
|
},
|
|
"search": {
|
|
"placeholder": "Исполнители, альбомы, треки",
|
|
"label": "Поиск",
|
|
"artists": "Исполнители",
|
|
"albums": "Альбомы",
|
|
"tracks": "Треки",
|
|
"all": "Всё",
|
|
"nothing": "Ничего не нашли",
|
|
"corrected": "Показаны результаты для «{{query}}»",
|
|
"show_all": "Все результаты",
|
|
"title": "Поиск: {{query}}",
|
|
"more": "Показать ещё",
|
|
"artist_kind": "Исполнитель",
|
|
"hint": "Нажмите / для поиска"
|
|
},
|
|
"catalog": {
|
|
"albums": "Альбомы",
|
|
"appears_on": "Встречается на",
|
|
"album_count_one": "{{count}} альбом",
|
|
"album_count_few": "{{count}} альбома",
|
|
"album_count_many": "{{count}} альбомов",
|
|
"album_count_other": "{{count}} альбома",
|
|
"track_count_one": "{{count}} трек",
|
|
"track_count_few": "{{count}} трека",
|
|
"track_count_many": "{{count}} треков",
|
|
"track_count_other": "{{count}} трека",
|
|
"unavailable": "Недоступен: хранилище отключено или файл пропал",
|
|
"not_found": "Ничего не найдено — возможно, удалено при последнем скане",
|
|
"disc": "Диск {{n}}",
|
|
"col_title": "Название",
|
|
"col_album": "Альбом",
|
|
"col_duration": "Время",
|
|
"back_home": "На главную",
|
|
"artist": "Исполнитель",
|
|
"album": "Альбом"
|
|
},
|
|
"collection": {
|
|
"title": "Коллекция",
|
|
"history": "История",
|
|
"likes": "Лайки",
|
|
"dislikes": "Дизлайки",
|
|
"clear_history": "Очистить историю",
|
|
"clear_confirm": "Очистить историю прослушиваний? Рекомендации её всё равно учтут.",
|
|
"today": "Сегодня",
|
|
"yesterday": "Вчера",
|
|
"empty_history": "Здесь появится то, что вы слушали",
|
|
"empty_likes": "Отмечайте треки сердечком — они соберутся здесь",
|
|
"empty_dislikes": "Треки с дизлайком не попадут в волну. Пока таких нет",
|
|
"play_all": "Слушать всё",
|
|
"more": "Показать ещё"
|
|
}
|
|
}
|