Files
pipu-music/packages/i18n/locales/ru/admin.json
T
mrleo1nidandClaude Opus 5.5 a3f212d253
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 3m4s
ci / ts / ts (packages + web) (push) Successful in 1m23s
ci / docker / docker (образы собираются — их сервер собирает сам при обновлении) (push) Successful in 52s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 1m51s
feat(web): suggest tracks, my uploads and admin upload queue screens (M5.5)
- Suggest tracks: drag-and-drop of files and folders with relative
  paths, streaming SHA-256 in a Web Worker (hash-wasm), duplicate
  precheck, batch reservation and tus-js-client upload (8 MB chunks,
  4 in parallel, token refresh on 401, resume of failed files).
- My uploads: statuses, rejection reasons, withdraw, quota meter.
- Upload queue (admin): status tabs, possible-duplicate filter, batches,
  metadata and storage editing, bulk approve / reject with a reason,
  import retry, and the queue settings form.
- Sidebar section for moderators and admins; ru / en strings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 17:46:18 +03:00

332 lines
20 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"users": {
"title": "Пользователи",
"subtitle": "Создание пользователей и модераторов, роли, сброс пароля, блокировка",
"create": "Создать пользователя",
"search": "Имя или логин",
"all": "Все",
"col_user": "Пользователь",
"col_role": "Роль",
"col_status": "Статус",
"col_last_login": "Был в сети",
"status_active": "Активен",
"status_blocked": "Заблокирован",
"status_must_change": "Ждёт смены пароля",
"never": "Ещё не входил",
"empty": "Никого не нашли",
"more": "Показать ещё",
"actions": "Действия с {{username}}",
"reset_password": "Сбросить пароль",
"block": "Заблокировать",
"unblock": "Разблокировать",
"make_role": "Сделать: {{role}}",
"delete": "Удалить",
"delete_confirm": "Удалить {{username}}? Его история и лайки пропадут.",
"block_confirm": "Заблокировать {{username}}? Все его сессии завершатся.",
"reset_confirm": "Сбросить пароль {{username}}? Все его сессии завершатся.",
"confirm": "Подтвердить",
"you": "вы"
},
"create": {
"title": "Новый пользователь",
"username": "Логин",
"username_hint": "Латинские буквы, цифры, «.», «_», «-»",
"display_name": "Имя",
"role": "Роль",
"password_note": "Пароль сгенерирует сервер и покажет один раз.",
"submit": "Создать"
},
"temp_password": {
"title": "Временный пароль",
"text": "Передайте пароль пользователю {{username}}. Он виден только сейчас; при входе его попросят сменить.",
"done": "Готово"
},
"audit": {
"title": "Журнал",
"subtitle": "Действия администраторов и модераторов",
"col_when": "Когда",
"col_who": "Кто",
"col_action": "Действие",
"col_details": "Подробности",
"system": "Система",
"empty": "Записей пока нет",
"more": "Показать ещё",
"actions": {
"user.bootstrap_create": "Создан стартовый администратор",
"user.bootstrap_credentials": "Заданы учётные данные администратора",
"user.create": "Создан пользователь",
"user.rename": "Изменено имя",
"user.role_change": "Изменена роль",
"user.block": "Пользователь заблокирован",
"user.unblock": "Пользователь разблокирован",
"user.password_reset": "Сброшен пароль",
"user.delete": "Пользователь удалён"
}
},
"sources": {
"title": "Хранилища",
"subtitle": "Откуда сервер берёт музыку: папка на диске сервера или NFS",
"add": "Подключить хранилище",
"empty": "Хранилищ пока нет. Подключите папку с музыкой, чтобы начать.",
"type_local": "Папка на сервере",
"type_nfs": "NFS",
"status_pending": "Подключается",
"status_mounted": "Подключено",
"status_error": "Ошибка",
"status_disabled": "Отключено",
"last_scan": "Последний скан: {{date}}",
"never_scanned": "Ещё не сканировалось",
"scan": "Сканировать",
"full_scan": "Полный скан",
"test": "Проверить",
"patterns": "Шаблоны путей",
"edit": "Изменить",
"delete": "Удалить",
"disable": "Отключить",
"enable": "Подключить",
"delete_confirm": "Удалить «{{name}}»? Треки, которые есть только в этом хранилище, пропадут из библиотеки вместе с лайками.",
"scanning": "Сканирование: {{processed}} из {{total}}",
"scan_walking": "Обход папок…",
"scan_done": "Найдено {{found}} · новых {{added}} · обновлено {{updated}} · перемещено {{moved}} · пропало {{missing}} · ошибок {{errors}}",
"scan_failed": "Скан прервался: {{error}}",
"test_ok": "Доступно, найдено аудиофайлов: {{count}}",
"test_fail": "Нет доступа: {{message}}",
"form_title_new": "Новое хранилище",
"form_title_edit": "Хранилище",
"name": "Название",
"type": "Тип",
"folder": "Папка",
"folder_root": "Весь каталог",
"folder_hint": "Подпапка каталога LIBRARY_HOST на сервере",
"up": "Вверх",
"nfs_server": "Сервер",
"nfs_server_hint": "Имя или IP, например nas.lan",
"nfs_export": "Экспорт",
"nfs_export_hint": "Путь на сервере, например /export/music",
"nfs_options": "Опции монтирования",
"nfs_options_hint": "Только чтение добавляется автоматически",
"tag_priority": "Что важнее",
"tags_first": "Теги файлов",
"path_first": "Шаблоны путей",
"interval": "Автоскан",
"interval_off": "Вручную",
"interval_hours": "Каждые {{count}} ч",
"save": "Сохранить"
},
"patterns": {
"title": "Шаблоны путей: {{name}}",
"intro": "Регулярные выражения RE2 с именованными группами применяются к пути файла относительно корня хранилища. Побеждает первое совпавшее.",
"groups": "Группы: artist, albumartist, album, year, disc, track, title, genre; skip — игнорировать файл.",
"add": "Добавить шаблон",
"regex": "Шаблон {{n}}",
"enabled": "Включён",
"up": "Выше",
"down": "Ниже",
"remove": "Удалить",
"preview": "Предпросмотр",
"save": "Сохранить",
"saved": "Сохранено. Запустите полный скан, чтобы применить к уже найденным файлам.",
"col_path": "Путь",
"col_pattern": "Шаблон",
"col_result": "Результат",
"no_match": "не совпал",
"skipped": "пропускается",
"unmatched": "Не совпал ни один шаблон: {{count}} из {{total}}",
"from_tags": "из тегов",
"error_at": "Ошибка в шаблоне {{n}}: {{reason}}",
"examples": "Примеры"
},
"library": {
"title": "Библиотека",
"subtitle": "Состояние каталога и сканирования",
"artists": "Исполнителей",
"albums": "Альбомов",
"tracks": "Треков",
"files": "Файлов",
"missing": "Пропавших файлов",
"errors": "Не прочитано",
"sources": "Хранилища",
"error_files": "Файлы с ошибками",
"reindex": "Переиндексировать поиск",
"reindex_started": "Переиндексация запущена",
"analysis": "Аудиоанализ",
"analysis_progress": "Проанализировано {{done}} из {{total}}",
"analysis_failed": "Не удалось проанализировать: {{count}}",
"analyzer": "Версия анализатора: {{ver}}",
"wave": "Моя волна за 7 дней",
"wave_served": "Выдано треков",
"wave_sessions": "Сессий",
"wave_listen": "Дослушано ≥ 50%",
"wave_early_skip": "Ранние скипы",
"wave_likes": "Лайков на 100"
},
"write_template": {
"title": "Приём загрузок и шаблон пути",
"intro": "Сюда раскладываются одобренные треки из очереди на добавление — по шаблону, который повторяет структуру папок этого хранилища.",
"accepts": "Принимать загрузки в это хранилище",
"nfs_rw_hint": "Хранилище будет переподключено: агент смонтирует его ещё и на запись (видно только ему). На NFS-сервере нужны права записи для PIPU_FILE_UID.",
"template": "Шаблон пути",
"hint": "Например {albumartist}/{year} - {album}/{disc:1-}{track:02} - {title}.{ext}; [ … ] — необязательная часть",
"suggest": "Подобрать по структуре",
"check": "Проверить",
"save": "Сохранить",
"saved": "Сохранено",
"required": "Чтобы принимать загрузки, задайте шаблон пути.",
"no_tracks": "В хранилище пока нет треков — проверить шаблон не на чем.",
"check_ok": "Шаблон обратим: {{round_trip}} из {{total}} путей разобраны без изменений, {{same_path}} совпали с реальными.",
"check_warn": "Есть расхождения: разобрано без изменений {{round_trip}} из {{total}}, совпало с реальными {{same_path}} (нужно ≥ 90%). Новые файлы могут лечь не так, как старые.",
"col_real": "Реальный путь",
"col_rendered": "По шаблону",
"col_problem": "Расхождение",
"no_pattern": "не разобрал ни один регэксп",
"other_path": "другой путь",
"badge": "принимает загрузки",
"write_ok": "Запись: ок",
"write_fail": "Запись не удалась: {{message}}"
},
"uploads": {
"suggest_title": "Предложить треки",
"suggest_subtitle": "Файлы попадут в очередь на добавление; администратор проверит и разложит их в хранилище",
"drop_title": "Перетащите сюда файлы или папки с музыкой",
"drop_hint": "Форматы: {{formats}}. Структура папок поможет угадать исполнителя и альбом.",
"pick_files": "Выбрать файлы",
"pick_folder": "Выбрать папку",
"files": "Файлы для отправки",
"skipped_one": "Пропущен {{count}} файл — не аудио",
"skipped_few": "Пропущено {{count}} файла — не аудио",
"skipped_many": "Пропущено {{count}} файлов — не аудио",
"skipped_other": "Пропущено {{count}} файла — не аудио",
"comment": "Комментарий для администратора",
"comment_hint": "Например: «ремастер 2011», «замена битых файлов»",
"not_enough_space": "В очереди не хватает места: нужно {{need}}, свободно {{free}} — часть файлов не примут.",
"clear": "Очистить список",
"hashing_wait": "Проверяю файлы…",
"send_one": "Отправить {{count}} файл · {{size}}",
"send_few": "Отправить {{count}} файла · {{size}}",
"send_many": "Отправить {{count}} файлов · {{size}}",
"send_other": "Отправить {{count}} файла · {{size}}",
"sent_one": "Готово: {{count}} файл загружен и обрабатывается. Статусы — в «Моих предложениях».",
"sent_few": "Готово: {{count}} файла загружены и обрабатываются. Статусы — в «Моих предложениях».",
"sent_many": "Готово: {{count}} файлов загружены и обрабатываются. Статусы — в «Моих предложениях».",
"sent_other": "Готово: {{count}} файла загружены и обрабатываются. Статусы — в «Моих предложениях».",
"failed_some_one": "Не загрузился {{count}} файл — место за ним зарезервировано, можно продолжить.",
"failed_some_few": "Не загрузились {{count}} файла — место за ними зарезервировано, можно продолжить.",
"failed_some_many": "Не загрузились {{count}} файлов — место за ними зарезервировано, можно продолжить.",
"failed_some_other": "Не загрузились {{count}} файла — место за ними зарезервировано, можно продолжить.",
"retry_failed": "Продолжить загрузку",
"uploading_now": "Загружаю…",
"go_mine": "Мои предложения →",
"more": "Загрузить ещё",
"dup_found": "Такой трек уже есть в библиотеке или в очереди — загружать не нужно",
"possible_dup": "Похожий трек уже есть (совпали исполнитель, название и длительность) — решит администратор",
"file_error": "Ошибка: {{message}}",
"remove": "Убрать {{name}}",
"quota": "Очередь: {{used}} из {{limit}}",
"quota_mine": "ваши: {{used}} из {{limit}}",
"mine_title": "Мои предложения",
"mine_subtitle": "Что вы загрузили и что решил администратор",
"mine_empty": "Вы ещё ничего не предлагали",
"filter": "Фильтр",
"filter_all": "Все",
"filter_pending": "В работе",
"filter_imported": "Добавлены",
"filter_declined": "Не приняты",
"col_file": "Трек",
"col_status": "Статус",
"col_size": "Размер",
"col_date": "Загружен",
"received": "принято {{pct}}% — откройте «Предложить треки» в той же вкладке, чтобы продолжить",
"withdraw": "Отозвать",
"load_more": "Показать ещё",
"queue_title": "Очередь на добавление",
"queue_subtitle": "Проверьте метаданные и путь в хранилище, затем одобрите или отклоните",
"queue_empty": "Здесь пусто",
"tab_review": "На рассмотрении",
"tab_failed": "Ошибки импорта",
"tab_progress": "В работе",
"tab_imported": "Добавлены",
"tab_declined": "Не приняты",
"only_possible": "Только возможные дубли",
"review_failed_one": "Не удалось применить решение к {{count}} файлу: {{reason}}",
"review_failed_few": "Не удалось применить решение к {{count}} файлам: {{reason}}",
"review_failed_many": "Не удалось применить решение к {{count}} файлам: {{reason}}",
"review_failed_other": "Не удалось применить решение к {{count}} файлам: {{reason}}",
"bulk": "Действия с выбранными",
"selected_one": "Выбран {{count}} файл",
"selected_few": "Выбрано {{count}} файла",
"selected_many": "Выбрано {{count}} файлов",
"selected_other": "Выбрано {{count}} файла",
"approve": "Одобрить",
"reject": "Отклонить",
"batch_of": "Пачка от {{author}}",
"batch_size_one": "{{count}} файл · {{size}}",
"batch_size_few": "{{count}} файла · {{size}}",
"batch_size_many": "{{count}} файлов · {{size}}",
"batch_size_other": "{{count}} файла · {{size}}",
"select_batch": "Выбрать всю пачку",
"select_file": "Выбрать {{name}}",
"disc": "диск {{n}}",
"edited": "правлено",
"flag_possible": "возможный дубль",
"flag_existing_album": "в существующий альбом",
"flag_new_album": "новый альбом",
"dup_level_sha256": "точная копия файла",
"dup_level_fingerprint": "тот же трек по акустическому отпечатку",
"dup_level_metadata": "совпали метаданные",
"edit": "Править {{name}}",
"retry": "Повторить",
"edit_title": "Метаданные трека",
"meta_artist": "Исполнитель",
"meta_albumartist": "Исполнитель альбома",
"meta_album": "Альбом",
"meta_title": "Название",
"meta_genre": "Жанр",
"meta_year": "Год",
"meta_track": "Номер трека",
"meta_disc": "Диск",
"target_source": "Хранилище",
"target_default": "По умолчанию",
"tags_note": "Правленые поля запишутся в теги файла при импорте — путь и теги не разойдутся.",
"save": "Сохранить",
"saved": "Сохранено",
"reject_title_one": "Отклонить {{count}} файл",
"reject_title_few": "Отклонить {{count}} файла",
"reject_title_many": "Отклонить {{count}} файлов",
"reject_title_other": "Отклонить {{count}} файла",
"reject_reason": "Причина (её увидит автор)",
"settings_title": "Настройки очереди",
"set_queue": "Лимит очереди, ГБ",
"set_per_user": "Лимит на одного модератора, ГБ",
"set_per_user_hint": "Пусто — без лимита",
"set_max_file": "Максимальный размер файла, ГБ",
"set_source": "Хранилище по умолчанию",
"set_source_auto": "Единственное, принимающее загрузки",
"set_note": "Уменьшение лимита ниже занятого ничего не удаляет: новые загрузки подождут, пока очередь освободится.",
"status": {
"uploading": "Загружается",
"processing": "Обработка",
"pending_review": "На рассмотрении",
"approved": "Одобрен",
"importing": "Импорт",
"imported": "Добавлен",
"import_failed": "Ошибка импорта",
"duplicate": "Дубль",
"invalid": "Не аудио",
"rejected": "Отклонён",
"withdrawn": "Отозван",
"expired": "Не докачан"
},
"stage": {
"hashing": "Считаю контрольную сумму",
"checking": "Проверяю на дубли",
"ready": "Готов к отправке",
"duplicate": "Уже есть",
"too_large": "Слишком большой",
"uploading": "Загружается",
"done": "Загружен, обрабатывается",
"rejected": "Не принят",
"error": "Ошибка"
}
}
}