ci / api / api (push) Successful in 50s
ci / db / db (push) Successful in 56s
ci / module boundaries / boundaries (push) Successful in 8s
ci / contract / contract (сгенерированный код совпадает с openapi.yaml) (push) Successful in 1m2s
ci / mobile / mobile (Metro-бандл Android) (push) Successful in 1m15s
ci / ts / ts (packages + web) (push) Failing after 4m28s
517 lines
35 KiB
JSON
517 lines
35 KiB
JSON
{
|
||
"users": {
|
||
"change_username": "Изменить логин",
|
||
"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}}",
|
||
"review_uploads": "Аудит загрузок",
|
||
"grant_review": "Дать аудит загрузок",
|
||
"revoke_review": "Забрать аудит загрузок",
|
||
"delete": "Удалить",
|
||
"delete_confirm": "Удалить {{username}}? Его история и лайки пропадут.",
|
||
"block_confirm": "Заблокировать {{username}}? Все его сессии завершатся.",
|
||
"reset_confirm": "Сбросить пароль {{username}}? Все его сессии завершатся.",
|
||
"reset_recommendations": "Сбросить рекомендации",
|
||
"recs_confirm": "Сбросить рекомендации {{username}}? Волна начнёт подбирать музыку с нуля и снова спросит любимых исполнителей. Лайки и история останутся.",
|
||
"recs_done": "Рекомендации {{username}} сброшены",
|
||
"confirm": "Подтвердить",
|
||
"you": "вы",
|
||
"manage_updates": "Обновление сервера",
|
||
"grant_updates": "Дать управление обновлениями",
|
||
"revoke_updates": "Забрать управление обновлениями"
|
||
},
|
||
"transfer": {
|
||
"export": "Экспорт пользователей",
|
||
"import": "Импорт пользователей",
|
||
"apply": "Импортировать",
|
||
"description": "Перенос учётных записей, ролей и прав доступа с сохранением паролей. Рекомендации, история, лайки и сессии не переносятся. Существующие логины будут пропущены без изменений.",
|
||
"sensitive": "JSON-файл содержит хэши паролей. Храните его в защищённом месте.",
|
||
"file": "Файл пользователей (.json)",
|
||
"preview": "Учётных записей в файле: {{count}}",
|
||
"invalid": "Некорректный файл. Выберите экспорт Pipu в формате JSON, версия 1, до 16 MiB и 10000 пользователей.",
|
||
"result": "Создано: {{count}}. Пропущено существующих: {{skipped}}."
|
||
},
|
||
"create": {
|
||
"title": "Новый пользователь",
|
||
"username": "Логин",
|
||
"username_hint": "Латинские буквы, цифры, «.», «_», «-»",
|
||
"display_name": "Имя",
|
||
"role": "Роль",
|
||
"review_uploads": "Аудит загрузок",
|
||
"review_uploads_hint": "Сможет рассматривать очередь. Это не роль: можно выдать нескольким людям, у админа её может не быть.",
|
||
"password_note": "Пароль сгенерирует сервер и покажет один раз.",
|
||
"submit": "Создать"
|
||
},
|
||
"temp_password": {
|
||
"title": "Временный пароль",
|
||
"text": "Передайте пароль пользователю {{username}}. Он виден только сейчас; при входе его попросят сменить.",
|
||
"done": "Готово"
|
||
},
|
||
"audit": {
|
||
"title": "Журнал",
|
||
"subtitle": "Действия администраторов и модераторов",
|
||
"col_when": "Когда",
|
||
"col_who": "Кто",
|
||
"col_action": "Действие",
|
||
"col_details": "Подробности",
|
||
"system": "Система",
|
||
"empty": "Записей пока нет",
|
||
"more": "Показать ещё",
|
||
"actions": {
|
||
"users.export": "Экспортированы пользователи",
|
||
"users.import": "Импортированы пользователи",
|
||
"user.username_change": "Изменён логин",
|
||
"user.bootstrap_create": "Создан стартовый администратор",
|
||
"user.bootstrap_credentials": "Заданы учётные данные администратора",
|
||
"user.create": "Создан пользователь",
|
||
"user.rename": "Изменено имя",
|
||
"user.role_change": "Изменена роль",
|
||
"user.block": "Пользователь заблокирован",
|
||
"user.unblock": "Пользователь разблокирован",
|
||
"user.password_reset": "Сброшен пароль",
|
||
"user.recommendations_reset": "Сброшены рекомендации",
|
||
"user.delete": "Пользователь удалён",
|
||
"user.manages_updates": "Изменены права обновления сервера"
|
||
}
|
||
},
|
||
"sources": {
|
||
"cover_files": "Локальные обложки: {{count}} из {{total}} файлов",
|
||
"cover_pending": "Альбомов ожидают обработки: {{count}}",
|
||
"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": "Обход папок…",
|
||
"excluded_dirs": "Не сканировать папки",
|
||
"excluded_hint": "По одной папке в строке, путь от корня хранилища. Например: Downloads_PumpEars. Все подпапки тоже исключаются. Учитывается регистр; шаблоны со звёздочкой не поддерживаются. Анализ и его ошибки отключаются сразу после сохранения. Уже добавленные записи сохраняются. Пустой список возвращает папки в сканирование и анализ.",
|
||
"excluded_running": "Дождитесь завершения сканирования, чтобы изменить исключения.",
|
||
"excluded_count": "Исключено папок из сканирования: {{count}}",
|
||
"scan_walk_progress": "Обход папок… Проверено папок: {{dirs}} · найдено аудиофайлов: {{found}}",
|
||
"scan_current_dir": "Текущая папка: {{path}}",
|
||
"scan_preparing": "Сопоставление файлов с библиотекой…",
|
||
"scan_finalizing": "Завершение сканирования…",
|
||
"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",
|
||
"wave_model": "Версия модели",
|
||
"wave_by_model": "Сравнение версий модели волны",
|
||
"analysis_retry": "Повторить",
|
||
"analysis_show_errors": "Показать файлы",
|
||
"analysis_errors_title": "Ошибки аудиоанализа",
|
||
"analysis_errors_hint": "Для каждого трека показаны хранилище, путь относительно его корня и причина сбоя. Пути берутся из текущего каталога библиотеки.",
|
||
"analysis_errors_empty": "Неудавшихся задач анализа нет.",
|
||
"analysis_errors_more": "Показать ещё",
|
||
"analysis_error_source": "Хранилище: {{name}}",
|
||
"analysis_error_no_file": "В библиотеке больше нет файла этого трека.",
|
||
"analysis_error_unknown": "Причина ошибки не указана."
|
||
},
|
||
"write_template": {
|
||
"auto_hint": "Если шаблон ещё не задан, определим его по преобладающей структуре файлов хранилища. Предложение можно изменить вручную; оно применяется только после сохранения.",
|
||
"detecting": "Определяем структуру файлов хранилища…",
|
||
"detected": "Предложенная структура совпадает с {{matched}} из {{total}} файлов выборки.",
|
||
"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": "Нужны FLAC, WAV или AIFF. MP3 — только в крайнем случае: качество хуже, и в очереди такой файл помечается «обратить внимание».",
|
||
"drop_folders": "Структура папок поможет угадать исполнителя и альбом.",
|
||
"format_attention": "Не lossless (FLAC, WAV, AIFF). MP3 присылайте, только если lossless нет.",
|
||
"pick_files": "Выбрать файлы",
|
||
"pick_folder": "Выбрать папку",
|
||
"files": "Файлы для отправки",
|
||
"skipped_one": "Пропущен {{count}} файл — не аудио",
|
||
"skipped_few": "Пропущено {{count}} файла — не аудио",
|
||
"skipped_many": "Пропущено {{count}} файлов — не аудио",
|
||
"skipped_other": "Пропущено {{count}} файла — не аудио",
|
||
"resume_hint_one": "Не докачан {{count}} файл. Выберите его снова — загрузка продолжится.",
|
||
"resume_hint_few": "Не докачано {{count}} файла. Выберите их снова — загрузка продолжится.",
|
||
"resume_hint_many": "Не докачано {{count}} файлов. Выберите их снова — загрузка продолжится.",
|
||
"resume_hint_other": "Не докачано {{count}} файла. Выберите их снова — загрузка продолжится.",
|
||
"resume_pick": "Выбрать файлы и продолжить",
|
||
"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": "Продолжить загрузку",
|
||
"retry_file": "Повторить загрузку {{name}}",
|
||
"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": "Не приняты",
|
||
"filter_withdrawn": "Отозванные",
|
||
"target_full_path": "Полный путь назначения",
|
||
"expand_batch": "Развернуть пачку",
|
||
"collapse_batch": "Свернуть пачку",
|
||
"col_file": "Трек",
|
||
"col_status": "Статус",
|
||
"col_size": "Размер",
|
||
"col_date": "Загружен",
|
||
"received": "принято {{pct}}% — откройте «Предложить треки» в той же вкладке, чтобы продолжить",
|
||
"withdraw": "Отозвать",
|
||
"select_visible": "Выбрать доступные файлы на странице",
|
||
"bulk_withdraw": "Массовый отзыв предложений",
|
||
"withdraw_selected": "Отозвать выбранные",
|
||
"withdraw_failed": "Не удалось отозвать: {{count}}. {{reason}}",
|
||
"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_quality": "лучше по качеству",
|
||
"flag_attention": "обратить внимание",
|
||
"listen": "Слушать {{name}}",
|
||
"edit_batch": "На всю пачку",
|
||
"batch_edit_title": "Правка пачки",
|
||
"batch_edit_hint": "Пустые поля не меняются. Обложка запишется в файлы при импорте.",
|
||
"batch_cover": "Обложка пачки",
|
||
"batch_cover_clear": "Убрать обложку",
|
||
"set_upgrade": "Принимать тот же трек в лучшем качестве",
|
||
"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": "Хранилище",
|
||
"cover_hint": "Обложку cover.jpg или cover.png из папки альбома загрузим вместе с треками. Если её нет, возьмём встроенную обложку из первого трека, где она есть.",
|
||
"cover_found": "Обложка альбома: {{name}}",
|
||
"cover_embedded": "Обложка альбома: из тегов трека",
|
||
"destination": "Будет записано в",
|
||
"destination_imported": "Записано в",
|
||
"target_selected": "Выбранное хранилище",
|
||
"target_not_selected": "Хранилище не выбрано",
|
||
"target_path_hint": "Путь относительно корня хранилища",
|
||
"target_path_missing": "Путь записи не рассчитан",
|
||
"choose_destination": "Выбрать хранилище",
|
||
"fix_destination": "Исправить размещение",
|
||
"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": "Ошибка",
|
||
"resume": "Ждёт файл, чтобы продолжить"
|
||
}
|
||
},
|
||
"server_settings": {
|
||
"title": "Настройки сервера",
|
||
"subtitle": "Параметры, которые действуют для всех пользователей"
|
||
},
|
||
"management": {
|
||
"server": "Управление сервером",
|
||
"updates": "Обновления",
|
||
"config": "Конфигурация",
|
||
"updates_intro": "Выберите источник и версию. Сервер выполнит сборку и покажет результат.",
|
||
"refresh": "Обновить статус",
|
||
"current": "Установленная версия",
|
||
"manual": "Обновления запускаются вручную. Последний стабильный релиз выбирается в момент запуска.",
|
||
"update_target": "Следующее обновление",
|
||
"sources": "Источники обновлений",
|
||
"source": "Источник",
|
||
"channel": "Тип обновления",
|
||
"channel_latest": "Последний релиз",
|
||
"channel_version": "Выбрать версию",
|
||
"channel_main": "main",
|
||
"hint_latest": "Будет установлен последний стабильный тег без release candidate.",
|
||
"hint_version": "Можно выбрать опубликованный тег. Переход на старую версию требует ручного отката.",
|
||
"hint_main": "Текущее состояние ветки main. Может содержать ещё не выпущенные изменения.",
|
||
"version": "Версия",
|
||
"choose_version": "Выберите версию",
|
||
"source_unavailable": "Не удалось прочитать репозиторий. Проверьте адрес, доступ сервера и SSH-ключи.",
|
||
"install": "Установить обновление",
|
||
"confirm_update": "Обновить сервер?",
|
||
"confirm_update_text": "Источник: {{source}}. Цель: {{target}}.",
|
||
"update_warning": "Во время перезапуска сервис временно недоступен. Перед обновлением сделайте резервную копию базы. Миграции назад не откатываются.",
|
||
"cancel": "Отмена",
|
||
"sources_hint": "Git-репозитории с совместимой структурой Pipu. HTTP(S) или SSH; для приватных репозиториев настройте ключи на хосте агента. Не вставляйте токены в адрес.",
|
||
"source_name": "Название",
|
||
"repository": "URL Git-репозитория",
|
||
"remove_source": "Удалить источник",
|
||
"add_source": "Добавить источник",
|
||
"save": "Сохранить",
|
||
"job": "Последняя операция",
|
||
"started": "Начало",
|
||
"finished": "Завершение",
|
||
"log": "Журнал выполнения",
|
||
"waiting": "Ожидаем вывод команды…",
|
||
"running_hint": "Задача выполняется на сервере. Страницу можно закрыть — выполнение продолжится.",
|
||
"reconnecting": "Сервисы перезапускаются. Ждём восстановления связи с сервером…",
|
||
"state": {
|
||
"running": "Выполняется",
|
||
"succeeded": "Готово",
|
||
"failed": "Ошибка"
|
||
},
|
||
"config_intro": "Настройки API, рекомендателя и развёртывания в deploy/config.local.",
|
||
"priority": "Порядок приоритета",
|
||
"defaults": "по умолчанию",
|
||
"priority_hint": "Значения из .env перекрывают config.local. Сохранение и применение — отдельные действия.",
|
||
"search": "Поиск по названию настройки",
|
||
"group": "Раздел",
|
||
"all": "Все разделы",
|
||
"groups": {
|
||
"api": "API",
|
||
"deployment": "Развёртывание",
|
||
"shared": "Общие",
|
||
"recommender": "Рекомендатель"
|
||
},
|
||
"config_files_hint": "Показаны поддерживаемые параметры. «После применения» — значение из .env, config.local или значение по умолчанию. Фиксированные пути и служебные параметры доступны для просмотра. Секреты можно заменить, их значения скрыты.",
|
||
"value_source": {
|
||
"env": "Из .env",
|
||
"local": "Из config.local",
|
||
"default": "По умолчанию"
|
||
},
|
||
"effective": "После применения",
|
||
"readonly": "Служебный параметр. Меняется на хосте с учётом конфигурации Compose.",
|
||
"secret_saved": "Секрет сохранён",
|
||
"will_reset": "Локальное значение будет удалено при сохранении.",
|
||
"overridden": "В .env есть значение: оно имеет приоритет. Локальное изменение пока не вступит в силу.",
|
||
"secret_hint": "Оставьте поле без изменений, чтобы сохранить секрет. Введите новое значение для замены.",
|
||
"default": "По умолчанию",
|
||
"reset": "Сбросить локальное",
|
||
"no_results": "Настройки не найдены",
|
||
"saved": "Изменения сохранены в config.local",
|
||
"unsaved": "Несохранённых параметров: {{count}}",
|
||
"pending_restart": "Сохранённые изменения ожидают применения",
|
||
"no_changes": "Нет изменений для применения",
|
||
"discard": "Отменить правки",
|
||
"apply": "Применить и перезапустить",
|
||
"apply_warning": "Контейнеры будут пересозданы с сохранённой конфигурацией. Сервис временно недоступен; данные в постоянных томах сохранятся. Значения из .env продолжат иметь приоритет.",
|
||
"check_updates": "Проверить обновления",
|
||
"unsaved_panel": "Несохранённые изменения",
|
||
"availability": {
|
||
"checking": "Проверяем выбранную версию…",
|
||
"running": "Обновление выполняется",
|
||
"available": "Доступно обновление",
|
||
"current": "Эта версия уже установлена — обновлений нет",
|
||
"ahead": "Установлена более новая сборка",
|
||
"unknown": "Не удалось определить установленный commit. Обновите сервер вручную.",
|
||
"unavailable": "Выбранная версия недоступна",
|
||
"select_version": "Выберите версию для проверки"
|
||
}
|
||
}
|
||
}
|