mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-21 23:05:46 +00:00
204 lines
20 KiB
TypeScript
204 lines
20 KiB
TypeScript
export const orbit = {
|
||
triggerLabel: 'Orbit',
|
||
triggerTooltip: 'Начать или присоединиться к совместной сессии прослушивания',
|
||
launchCreate: 'Создать сессию',
|
||
launchJoin: 'Присоединиться к сессии',
|
||
launchHelp: 'Как это работает?',
|
||
launchHelpSoon: 'Скоро будет',
|
||
joinModalTitle: 'Присоединиться к сессии Orbit',
|
||
joinModalSub: 'Вставь ссылку-приглашение от хоста.',
|
||
joinModalLinkLabel: 'Ссылка-приглашение',
|
||
joinModalLinkPlaceholder: 'psysonic2-…',
|
||
joinModalLinkHelper: 'Работает с любой действительной ссылкой Orbit. Должна указывать на сервер, на котором ты сейчас авторизован.',
|
||
joinModalPasteTooltip: 'Вставить из буфера обмена',
|
||
joinModalSubmit: 'Присоединиться',
|
||
joinModalBusy: 'Подключение…',
|
||
joinErrEmpty: 'Вставь ссылку-приглашение.',
|
||
joinErrInvalid: 'Это не похоже на ссылку-приглашение Orbit.',
|
||
closeAria: 'Закрыть',
|
||
heroTitlePrefix: 'Слушай вместе с',
|
||
heroTitleBrand: 'Orbit',
|
||
heroSub: 'Начни сессию — другие пользователи на {{server}} будут слушать вместе и смогут предлагать треки.',
|
||
fallbackServer: 'этот сервер',
|
||
tipLan: 'Ты сейчас подключён через адрес домашней сети. Гости вне твоей сети не смогут присоединиться — переключись на публичный адрес сервера в настройках перед стартом.',
|
||
tipRemote: 'Чтобы гости вне домашней сети могли присоединиться, адрес сервера должен быть публично доступен. Если сервер только внутренний, переключись перед стартом.',
|
||
labelName: 'Название сессии',
|
||
namePlaceholder: 'Velvet Orbit',
|
||
reshuffleTooltip: 'Новое предложение',
|
||
reshuffleAria: 'Предложить новое название',
|
||
helperName: 'Как сессия будет отображаться у гостей — оставь или введи своё.',
|
||
labelMax: 'Макс. гостей',
|
||
helperMax: 'Ты не считаешься — это только ограничивает входящих гостей.',
|
||
labelLink: 'Ссылка-приглашение',
|
||
tooltipCopied: 'Скопировано',
|
||
tooltipCopy: 'Копировать',
|
||
ariaCopyLink: 'Копировать ссылку-приглашение',
|
||
helperLink: 'Отправь эту ссылку гостям. Они могут вставить её в Psysonic в любом месте с помощью Ctrl+V.',
|
||
labelClearQueue: 'Сначала очистить мою очередь',
|
||
helperClearQueue: 'Начать сессию с пустой очередью. Выкл.: уже поставленные треки остаются и делятся с гостями.',
|
||
btnCancel: 'Отмена',
|
||
btnStarting: 'Запуск…',
|
||
btnStart: 'Запустить Orbit',
|
||
btnCopyAndStart: 'Копировать ссылку и запустить',
|
||
errNameRequired: 'Пожалуйста, дай название сессии.',
|
||
errStartFailed: 'Не удалось запустить.',
|
||
hostLabel: 'Хост: {{name}}',
|
||
participantsTooltip: 'Участники',
|
||
settingsTooltip: 'Настройки сессии',
|
||
shareTooltip: 'Поделиться ссылкой-приглашением',
|
||
shuffleLabel: 'Следующее перемешивание через',
|
||
catchUpLabel: 'догнать',
|
||
catchUpTooltip: 'Перейти к текущей позиции хоста',
|
||
hostAway: 'Хост оффлайн',
|
||
hostOnline: 'Хост онлайн',
|
||
endTooltip: 'Завершить сессию',
|
||
leaveTooltip: 'Покинуть сессию',
|
||
helpTooltip: 'Как работает Orbit',
|
||
diag: {
|
||
openTooltip: 'Диагностика — копируемый журнал событий',
|
||
title: 'Диагностика Orbit',
|
||
role: 'Роль',
|
||
hostTrack: 'ID трека хоста',
|
||
hostPos: 'Позиция хоста',
|
||
guestTrack: 'Мой ID трека',
|
||
guestPos: 'Моя позиция',
|
||
drift: 'Расхождение',
|
||
stateAge: 'Возраст состояния',
|
||
eventLog: 'Журнал событий ({{count}})',
|
||
copyLabel: 'Копировать',
|
||
copyTooltip: 'Скопировать журнал в буфер обмена',
|
||
clearLabel: 'Очистить',
|
||
clearTooltip: 'Очистить буфер',
|
||
empty: 'Пока нет событий — они появятся когда Orbit начнёт синхронизацию.',
|
||
hint: 'Открой это перед воспроизведением проблемы, затем нажми Копировать и вставь в баг-репорт.',
|
||
copied: 'Скопировано строк: {{count}}',
|
||
copyFailed: 'Не удалось скопировать в буфер обмена',
|
||
cleared: 'Буфер очищен',
|
||
},
|
||
helpTitle: 'Как работает Orbit',
|
||
helpIntro: 'Orbit превращает Psysonic в общую комнату прослушивания. Хост выбирает музыку; гости слушают синхронно и могут предлагать треки.',
|
||
helpHostOnly: '(хост)',
|
||
helpSec1Title: 'Что такое Orbit?',
|
||
helpSec1Body: 'Режим «слушать вместе» — хост управляет воспроизведением, гости подключаются. Всё идёт через плейлисты на твоём собственном сервере Navidrome; никакой внешней инфраструктуры.',
|
||
helpSec2Title: 'Хост и гости',
|
||
helpSec2Body: 'Хост управляет воспроизведением (play / pause / skip / seek) и решает, когда завершить сессию. Гости следуют за воспроизведением хоста, могут предлагать треки и выходить или присоединяться в любое время. Только хост может исключать или навсегда банить участников.',
|
||
helpSec2WarnHead: 'Важно: отдельные аккаунты.',
|
||
helpSec2WarnBody: 'У каждого участника должен быть свой аккаунт Navidrome. Если хост и гость входят под одним и тем же пользователем, их отправки конфликтуют, и хост никогда не увидит предложения гостя.',
|
||
helpSec3Title: 'Запуск и приглашение',
|
||
helpSec3Body: 'Нажми кнопку «Orbit» → Создать сессию → стартовое окно покажет готовую ссылку для копирования и опционально позволит очистить текущую очередь. Делись ссылкой как угодно. Пока сессия активна, кнопка «Поделиться» в верхней панели сессии копирует ссылку в любой момент.',
|
||
helpSec4Title: 'Присоединение',
|
||
helpSec4Body: 'Вставь ссылку-приглашение в любом месте Psysonic с помощью Ctrl+V / Cmd+V — запрос на присоединение появится автоматически. Альтернатива: «Orbit» → Присоединиться к сессии → вставь в поле. Если ссылка указывает на сервер, где у тебя есть аккаунт, Psysonic переключит тебя автоматически. Если у тебя несколько аккаунтов на этом сервере, небольшой выбор спросит, какой использовать.',
|
||
helpSec5Title: 'Предложение треков',
|
||
helpSec5Body: 'В любом списке треков: двойной клик по строке или правый клик → «Добавить в сессию Orbit». Одиночный клик показывает подсказку вместо того, чтобы забрасывать весь альбом в общую очередь — это намеренно. Явные массовые действия вроде «Воспроизвести всё» или «Воспроизвести альбом» сначала запрашивают подтверждение, потом добавляют (никогда не заменяют).',
|
||
helpSec6Title: 'Общая очередь',
|
||
helpSec6Body: 'Очередь показывает предстоящие треки хоста — видно всем. Входящие массовые добавления всегда идут в конец, чтобы не потерять предложения гостей. Автоперемешивание периодически переупорядочивает очередь (настраивается: 1 / 5 / 10 / 15 / 30 мин). Если твоё воспроизведение отклоняется от хоста, кнопка «Догнать» в панели сессии возвращает тебя к live-позиции хоста.',
|
||
helpSec7Title: 'Подтверждения',
|
||
helpSec7Body: 'По умолчанию предложения гостей требуют ручного подтверждения — они появляются в полосе «Подтверждения» вверху панели очереди с кнопками принять / отклонить. В настройках сессии можно включить автоматическое подтверждение, и всё будет попадать сразу.',
|
||
helpSec8Title: 'Участники и настройки',
|
||
helpSec8Body: 'Открой иконку настроек в панели сессии для частоты перемешивания, автоподтверждения и быстрого «Перемешать сейчас». Нажми на количество участников, чтобы увидеть, кто подключён — исключить (может присоединиться снова по ссылке) или забанить (заблокирован для этой сессии). Гости тоже видят список участников, но только для чтения.',
|
||
helpSec9Title: 'Завершение сессии',
|
||
helpSec9Body: 'X хоста → диалог подтверждения → сессия закрывается для всех, серверные плейлисты очищаются автоматически. X гостя → гость выходит, сессия продолжается. Если хост молчит 5 минут, гость автоматически выходит с уведомлением; короткие переподключения в этом окне невидимы.',
|
||
participantsInviteLabel: 'Ссылка-приглашение',
|
||
participantsCountLabel: '{{count}} в сессии',
|
||
participantsHost: 'хост',
|
||
participantsEmpty: 'Пока нет гостей',
|
||
participantsKickTooltip: 'Удалить из сессии',
|
||
participantsKickAria: 'Удалить {{user}}',
|
||
participantsRemoveTooltip: 'Удалить из сессии',
|
||
participantsRemoveAria: 'Удалить {{user}} из этой сессии',
|
||
participantsBanTooltip: 'Забанить навсегда',
|
||
participantsBanAria: 'Забанить {{user}} навсегда',
|
||
participantsMuteTooltip: 'Запретить предлагать треки',
|
||
participantsUnmuteTooltip: 'Разрешить предлагать треки',
|
||
participantsMuteAria: 'Запретить {{user}} предлагать треки',
|
||
participantsUnmuteAria: 'Снова разрешить {{user}} предлагать треки',
|
||
confirmRemoveTitle: 'Удалить из сессии?',
|
||
confirmRemoveBody: '{{user}} будет удалён из сессии, но может присоединиться снова по твоей ссылке-приглашению.',
|
||
confirmRemoveConfirm: 'Удалить',
|
||
confirmBanTitle: 'Забанить навсегда?',
|
||
confirmBanBody: '{{user}} будет удалён и заблокирован от повторного присоединения к этой сессии. Отменить нельзя на время сессии.',
|
||
confirmBanConfirm: 'Забанить',
|
||
confirmCancel: 'Отмена',
|
||
confirmJoinTitle: 'Присоединиться к сессии Orbit?',
|
||
confirmJoinBody: '{{host}} пригласил тебя в «{{name}}». Присоединиться к сессии?',
|
||
confirmJoinConfirm: 'Присоединиться',
|
||
confirmLeaveTitle: 'Покинуть сессию?',
|
||
confirmLeaveBody: 'Покинуть «{{name}}»? Ты можешь присоединиться снова в любое время по ссылке-приглашению от {{host}}.',
|
||
confirmLeaveConfirm: 'Покинуть',
|
||
confirmEndTitle: 'Завершить сессию для всех?',
|
||
confirmEndBody: '«{{name}}» закроется для всех участников. Плейлисты сессии очищаются автоматически.',
|
||
confirmEndConfirm: 'Завершить сессию',
|
||
invalidLinkTitle: 'Ссылка-приглашение больше недействительна',
|
||
invalidLinkBody: 'Эта сессия Orbit больше не существует или уже завершена. Попроси хоста прислать новую ссылку.',
|
||
settingsTitle: 'Настройки сессии',
|
||
settingAutoApprove: 'Автоматически принимать предложения',
|
||
settingAutoApproveHint: 'Предложения гостей сразу попадают в твою очередь. Выкл.: они остаются в списке сессии для последующего просмотра.',
|
||
settingAutoShuffle: 'Автоперемешивание',
|
||
settingAutoShuffleHint: 'Периодически перемешивает предстоящую очередь. Выкл.: порядок меняется только при ручной перестановке.',
|
||
settingShuffleInterval: 'Перемешивать каждые',
|
||
settingShuffleIntervalHint: 'Как часто предстоящая очередь перемешивается во время сессии.',
|
||
suggestBlockedMuted: 'Хост отключил тебе предложение треков на этой сессии.',
|
||
settingShuffleIntervalValue_one: '{{count}} мин',
|
||
settingShuffleIntervalValue_few: '{{count}} мин',
|
||
settingShuffleIntervalValue_many: '{{count}} мин',
|
||
settingShuffleIntervalValue_other: '{{count}} мин',
|
||
settingShuffleNow: 'Перемешать сейчас',
|
||
toastSuggested: '{{user}} предложил «{{title}}»',
|
||
toastSuggestedMany: '{{count}} новых предложений в очереди',
|
||
toastSuggestLost: 'Возможно, ваше предложение не дошло до хоста',
|
||
toastShuffled: 'Очередь перемешана',
|
||
toastJoined: 'Присоединился к сессии',
|
||
toastLoginFirst: 'Войди, прежде чем присоединяться к сессии',
|
||
toastSwitchServer: 'Сначала переключись на {{url}}, потом вставь снова',
|
||
toastNoAccountForServer: 'У тебя нет доступа к {{url}}. Попроси хоста прислать приглашение.',
|
||
toastSwitchFailed: 'Не удалось переключиться на {{url}}',
|
||
accountPickerTitle: 'Какой аккаунт?',
|
||
accountPickerSub: 'У тебя несколько аккаунтов для {{url}}. Выбери тот, под которым хочешь присоединиться.',
|
||
toastJoinFail: 'Не удалось присоединиться к сессии',
|
||
joinErrNotFound: 'Сессия не найдена',
|
||
joinErrEnded: 'Сессия завершена',
|
||
joinErrFull: 'Сессия заполнена',
|
||
joinErrKicked: 'Ты не можешь присоединиться к этой сессии',
|
||
joinErrNoUser: 'Нет активного сервера',
|
||
joinErrServerError: 'Не удалось присоединиться',
|
||
ctxAddToSession: 'Добавить в сессию Orbit',
|
||
ctxSuggestedToast: 'Предложено в сессию',
|
||
ctxSuggestFailed: 'Не удалось предложить — не присоединён',
|
||
ctxAddToSessionHost: 'Добавить в сессию Orbit',
|
||
ctxAddedHostToast: 'Добавлено в сессию',
|
||
ctxAddHostFailed: 'Не удалось добавить в сессию',
|
||
bulkConfirmTitle: 'Добавить всё в очередь Orbit?',
|
||
bulkConfirmBody: 'Это сбросит {{count}} треков в общую очередь за раз. Это много для твоих гостей. Продолжить?',
|
||
bulkConfirmYes: 'Добавить всё',
|
||
bulkConfirmNo: 'Отмена',
|
||
guestLive: 'Live',
|
||
guestPlaying: 'Сейчас играет',
|
||
guestPaused: 'Пауза',
|
||
guestLoading: 'Загрузка…',
|
||
guestSuggestions: 'Предложения',
|
||
guestUpNext: 'Далее',
|
||
guestUpNextEmpty: 'В очереди пусто. Открой контекстное меню трека и выбери «Добавить в сессию Orbit», чтобы предложить что-то.',
|
||
guestPendingTitle: 'Ожидание хоста',
|
||
guestPendingHint: 'Предложено — появится в очереди, когда хост примет.',
|
||
approvalTitle: 'Ожидают подтверждения',
|
||
approvalFrom: 'Предложено {{user}}',
|
||
approvalAccept: 'Принять',
|
||
approvalDecline: 'Отклонить',
|
||
guestUpNextMore: '+ ещё {{count}} в очереди хоста',
|
||
guestSubmitter: 'от {{user}}',
|
||
queueAddedByHost: 'Добавил хост',
|
||
queueAddedByYou: 'Добавил(а) ты',
|
||
queueAddedByUser: 'Добавил {{user}}',
|
||
guestEmpty: 'Предложений пока нет. Открой контекстное меню трека и выбери «Добавить в сессию Orbit».',
|
||
guestFooter: 'Хост управляет воспроизведением — ты не можешь изменять список.',
|
||
exitKickedTitle: 'Тебя забанили в сессии',
|
||
exitRemovedTitle: 'Тебя удалили из сессии',
|
||
exitEndedTitle: 'Хост завершил сессию',
|
||
exitHostTimeoutTitle: 'Хост недоступен',
|
||
exitHostTimeoutBody: '{{host}} давно не присылал обновления, поэтому «{{name}}» закрыта на твоей стороне. Ты можешь присоединиться снова в любое время по ссылке.',
|
||
exitKickedBody: '{{host}} забанил тебя в «{{name}}». Ты не можешь присоединиться снова.',
|
||
exitRemovedBody: '{{host}} удалил тебя из «{{name}}». Ты можешь присоединиться снова в любое время по ссылке.',
|
||
exitEndedBody: '«{{name}}» завершена. Надеюсь, тебе понравилось.',
|
||
exitOk: 'ОК',
|
||
};
|