ci / ts / ts (packages + web) (push) Canceled after 1m0s
ci / api / api (push) Successful in 46s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 56s
ci / db / db (push) Successful in 1m32s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m27s
ci / docker / docker (образы собираются — их сервер собирает сам при обновлении) (push) Successful in 1m31s
Search hits omit album covers and artist images. The worker now reads the full song and artist, stores the description, and leaves Genius image URLs unchanged on mobile. Co-authored-by: Cursor <cursoragent@cursor.com>
341 lines
18 KiB
JSON
341 lines
18 KiB
JSON
{
|
||
"genius": {
|
||
"description": "Тексты, пояснения и недостающие картинки из Genius. Локальные обложки имеют приоритет.",
|
||
"loading": "Загрузка…", "disabled": "Не подключён", "paused": "Приостановлено", "cooldown": "Ожидание после ограничения Genius", "running": "Обработка", "waiting": "Ожидание новых треков",
|
||
"configure": "Добавьте GENIUS_ACCESS_TOKEN в deploy/.env и пересоздайте контейнер API.",
|
||
"total": "Всего треков", "pending": "В очереди", "matched": "Найдено в Genius", "lyrics": "Тексты", "annotations": "С пояснениями", "images": "С картинками", "unmatched": "Нет точного совпадения", "errors": "Ошибки / неполные данные",
|
||
"last_error": "Последняя ошибка", "token_error": "Genius отклонил токен. Проверьте его и перезапустите API.", "access_error": "Genius ограничил доступ. Обработка приостановлена.", "no_lyrics": "Текст пока недоступен.", "request_error": "Не удалось получить все данные. Повтор запланирован автоматически.", "resume_at": "Повтор не раньше",
|
||
"start": "Продолжить", "pause": "Приостановить", "retry": "Повторить ошибки и ненайденные", "pending_text": "Трек ожидает обработки Genius.", "about": "О песне", "explanations": "Пояснения к песне", "verified": "Подтверждено в Genius"
|
||
},
|
||
"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": {
|
||
"more": "Ещё",
|
||
"main": "Навигация",
|
||
"home": "Главная",
|
||
"admin": "Админка",
|
||
"users": "Пользователи",
|
||
"audit": "Журнал",
|
||
"library": "Библиотека",
|
||
"sources": "Хранилища",
|
||
"collection": "Коллекция",
|
||
"history": "История",
|
||
"likes": "Лайки",
|
||
"dislikes": "Дизлайки",
|
||
"uploads": "Предложения",
|
||
"suggest": "Предложить треки",
|
||
"my_uploads": "Мои предложения",
|
||
"upload_queue": "Очередь",
|
||
"admin_settings": "Настройки"
|
||
},
|
||
"profile": {
|
||
"menu": "Меню профиля",
|
||
"settings": "Настройки",
|
||
"logout": "Выйти",
|
||
"download_apps": "Скачать приложения"
|
||
},
|
||
"roles": {
|
||
"admin": "Администратор",
|
||
"moderator": "Модератор",
|
||
"user": "Пользователь"
|
||
},
|
||
"home": {
|
||
"greeting": "Привет, {{name}}!",
|
||
"wave": "Моя волна",
|
||
"wave_soon": "Бесконечная лента под ваш вкус появится, когда сервер подключит библиотеку."
|
||
},
|
||
"player": {
|
||
"share": "Поделиться треком",
|
||
"link_copied": "Ссылка на трек скопирована",
|
||
"share_error": "Не удалось поделиться ссылкой. Попробуйте ещё раз.",
|
||
"track_page": "Трек",
|
||
"empty": "Ничего не играет",
|
||
"label": "Плеер",
|
||
"play": "Слушать",
|
||
"pause": "Пауза",
|
||
"next": "Следующий",
|
||
"prev": "Предыдущий",
|
||
"like": "Нравится",
|
||
"unlike": "Убрать из лайков",
|
||
"dislike": "Не нравится",
|
||
"undislike": "Убрать дизлайк",
|
||
"volume": "Громкость",
|
||
"mute": "Выключить звук",
|
||
"unmute": "Включить звук",
|
||
"shuffle": "Перемешать",
|
||
"repeat_off": "Повтор выключен",
|
||
"repeat_all": "Повторять очередь",
|
||
"repeat_one": "Повторять трек",
|
||
"progress": "Позиция",
|
||
"unavailable": "Трек недоступен — пропускаем",
|
||
"error": "Не удалось воспроизвести трек",
|
||
"source_album": "Альбом · {{label}}",
|
||
"source_artist": "Исполнитель · {{label}}",
|
||
"source_search": "Поиск · {{label}}",
|
||
"source_history": "История",
|
||
"source_likes": "Лайки",
|
||
"source_dislikes": "Дизлайки",
|
||
"source_wave": "Моя волна",
|
||
"source_queue": "Очередь",
|
||
"queue": "Очередь",
|
||
"source_wave_seed": "Волна по исполнителю · {{label}}",
|
||
"queue_wave": "Волна бесконечна: следующие треки подбираются по ходу прослушивания"
|
||
},
|
||
"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": "Выйти на всех устройствах",
|
||
"wave_variant": "Вид волны",
|
||
"wave_orb": "Сфера",
|
||
"wave_liquid": "Жидкая",
|
||
"player_view": "Вид плеера",
|
||
"player_bar": "Полоса",
|
||
"player_island": "Остров",
|
||
"ambient": "Живой фон",
|
||
"on": "Вкл.",
|
||
"off": "Выкл.",
|
||
"search_position": "Расположение поиска",
|
||
"search_left": "Слева",
|
||
"search_center": "По центру",
|
||
"search_right": "Справа",
|
||
"search_collapse": "Сворачивать поиск",
|
||
"home_activities": "Выбор занятия на главной",
|
||
"home_moods": "Выбор настроения на главной",
|
||
"normalize": "Выравнивание громкости",
|
||
"crossfade": "Кроссфейд, {{seconds}} с"
|
||
},
|
||
"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": "Альбом",
|
||
"play": "Слушать",
|
||
"artist_wave": "Волна по исполнителю",
|
||
"top_tracks": "Популярные треки"
|
||
},
|
||
"collection": {
|
||
"title": "Коллекция",
|
||
"history": "История",
|
||
"likes": "Лайки",
|
||
"dislikes": "Дизлайки",
|
||
"clear_history": "Очистить историю",
|
||
"clear_confirm": "Очистить историю прослушиваний? Рекомендации её всё равно учтут.",
|
||
"today": "Сегодня",
|
||
"yesterday": "Вчера",
|
||
"empty_history": "Здесь появится то, что вы слушали",
|
||
"empty_likes": "Отмечайте треки сердечком — они соберутся здесь",
|
||
"empty_dislikes": "Треки с дизлайком не попадут в волну. Пока таких нет",
|
||
"play_all": "Слушать всё",
|
||
"more": "Показать ещё",
|
||
"sub_history": "Всё, что вы слушали, по дням. Нажмите на трек, чтобы включить.",
|
||
"sub_likes_one": "{{count}} трек · влияют на «Мою волну» сильнее всего",
|
||
"sub_likes_few": "{{count}} трека · влияют на «Мою волну» сильнее всего",
|
||
"sub_likes_many": "{{count}} треков · влияют на «Мою волну» сильнее всего",
|
||
"sub_likes_other": "{{count}} трека · влияют на «Мою волну» сильнее всего",
|
||
"sub_dislikes": "Эти треки не попадают в волну и рекомендации. Снимите дизлайк, если передумали.",
|
||
"shuffle": "Перемешать"
|
||
},
|
||
"wave": {
|
||
"title": "Моя волна",
|
||
"for_you": "Под ваш вкус",
|
||
"start": "Запустить «Мою волну»",
|
||
"pause": "Пауза «Моей волны»",
|
||
"activity_label": "Занятие",
|
||
"mood_label": "Настроение",
|
||
"reset": "Сбросить",
|
||
"empty": "В библиотеке пока нечего предложить",
|
||
"fallback": "Рекомендации временно упрощены",
|
||
"activities": {
|
||
"running": "Бегаю",
|
||
"workout": "Тренировка",
|
||
"waking_up": "Просыпаюсь",
|
||
"focus": "Работаю",
|
||
"commute": "В дороге",
|
||
"chill": "Отдыхаю",
|
||
"sleep": "Засыпаю"
|
||
},
|
||
"moods": {
|
||
"energetic": "Энергичное",
|
||
"happy": "Весёлое",
|
||
"calm": "Спокойное",
|
||
"sad": "Грустное"
|
||
}
|
||
},
|
||
"mobile": {
|
||
"connect": "Подключиться",
|
||
"servers": "Недавние серверы",
|
||
"change_server": "Другой сервер",
|
||
"server": "Сервер",
|
||
"open_admin": "Админка — откроется в браузере",
|
||
"version": "Версия приложения {{version}}",
|
||
"offline": "Нет связи с сервером",
|
||
"profile": "Профиль",
|
||
"search": "Поиск",
|
||
"recent_searches": "Недавние запросы",
|
||
"clear_recent": "Очистить",
|
||
"now_playing": "Сейчас играет",
|
||
"open_player": "Открыть плеер",
|
||
"close_player": "Свернуть плеер",
|
||
"queue": "Очередь",
|
||
"forget_server": "Забыть сервер",
|
||
"update_check": "Проверить обновления",
|
||
"update_checking": "Проверяем…",
|
||
"update_latest": "Установлена последняя версия",
|
||
"update_title": "Доступна версия {{version}}",
|
||
"update_required": "Эта версия больше не поддерживается сервером — обновите приложение",
|
||
"update_size": "Размер {{size}} МБ",
|
||
"update_install": "Скачать и установить",
|
||
"update_later": "Позже",
|
||
"update_downloading": "Загрузка {{percent}}%",
|
||
"update_verifying": "Проверяем файл…",
|
||
"update_bad_checksum": "Файл повреждён — попробуйте ещё раз",
|
||
"update_failed": "Не удалось скачать обновление",
|
||
"update_allow": "Разрешите установку из этого приложения в настройках Android",
|
||
"update_open_settings": "Открыть настройки",
|
||
"dl_title": "Скачанное",
|
||
"dl_download": "Скачать",
|
||
"dl_remove": "Удалить с устройства",
|
||
"dl_album": "Скачать альбом",
|
||
"dl_all_likes": "Скачать все лайки",
|
||
"dl_wifi_only": "Скачивать только по Wi-Fi",
|
||
"dl_auto_likes": "Скачивать новые лайки",
|
||
"dl_usage": "Занято {{used}} МБ · свободно в телефоне {{free}} ГБ",
|
||
"dl_pending_one": "В очереди {{count}} трек",
|
||
"dl_pending_few": "В очереди {{count}} трека",
|
||
"dl_pending_many": "В очереди {{count}} треков",
|
||
"dl_pending_other": "В очереди {{count}} трека",
|
||
"dl_waiting_wifi": "Загрузки ждут Wi-Fi ({{count}})",
|
||
"dl_waiting_network": "Загрузки ждут сеть ({{count}})",
|
||
"dl_retry": "Повторить неудачные",
|
||
"dl_empty": "Скачивайте треки, альбомы и лайки — они будут доступны без сети",
|
||
"player_view": "Вид плеера",
|
||
"player_cover": "Обложка",
|
||
"player_wave": "Волна",
|
||
"quality": "Качество звука",
|
||
"quality_wifi": "По Wi-Fi",
|
||
"quality_cellular": "По мобильной сети",
|
||
"quality_download": "Загрузки",
|
||
"quality_hint": "Новое качество применяется к следующим трекам; уже скачанные не перекачиваются.",
|
||
"q_original": "Оригинал",
|
||
"q_high": "Высокое",
|
||
"q_medium": "Среднее",
|
||
"q_low": "Низкое",
|
||
"cache": "Кэш недавних треков",
|
||
"cache_clear": "Очистить ({{size}} МБ)",
|
||
"cache_pending": "Очистится при следующем запуске"
|
||
},
|
||
"onboarding": {
|
||
"title": "Что вы любите слушать?",
|
||
"subtitle": "Отметьте несколько исполнителей и жанров — с них начнётся «Моя волна». Дальше она будет учиться на ваших прослушиваниях.",
|
||
"artists": "Исполнители",
|
||
"genres": "Жанры",
|
||
"skip": "Пропустить",
|
||
"done": "Готово — к волне",
|
||
"pick_more_one": "Выберите ещё {{count}} исполнителя",
|
||
"pick_more_few": "Выберите ещё {{count}} исполнителя",
|
||
"pick_more_many": "Выберите ещё {{count}} исполнителей",
|
||
"pick_more_other": "Выберите ещё {{count}} исполнителя"
|
||
},
|
||
"playlists": {
|
||
"name": "Название",
|
||
"delete_confirm": "Удалить плейлист «{{name}}»? Треки останутся в библиотеке.",
|
||
"manage": "Управлять треками",
|
||
"title": "Плейлисты",
|
||
"move_down": "Переместить «{{name}}» ниже",
|
||
"edit": "Изменить плейлист",
|
||
"description": "Описание",
|
||
"add": "Добавить в плейлист",
|
||
"search": "Поиск плейлистов",
|
||
"create": "Создать плейлист",
|
||
"find_tracks": "Найти музыку",
|
||
"remove_track": "Убрать «{{name}}» из плейлиста",
|
||
"save": "Сохранить",
|
||
"private": "Личный плейлист",
|
||
"empty": "Здесь будут ваши плейлисты. Создайте первый и добавьте любимую музыку.",
|
||
"empty_tracks": "В плейлисте пока нет треков. Добавляйте их кнопкой «Добавить в плейлист» в поиске, альбомах или коллекции.",
|
||
"loading": "Загрузка плейлистов…",
|
||
"move_up": "Переместить «{{name}}» выше",
|
||
"delete": "Удалить плейлист",
|
||
"no_results": "Плейлисты не найдены"
|
||
}
|
||
}
|