DUNGEONS-34: implement Webka local streaming app

Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
2026-09-06 16:23:09 +05:00
parent 5540b9a1f4
commit 7c737c1011
36 changed files with 21596 additions and 0 deletions

View File

@@ -0,0 +1,177 @@
{
"nav": {
"main": "Основная навигация",
"host": "Студия",
"watch": "Просмотр",
"accounts": "Аккаунты",
"settings": "Настройки"
},
"common": {
"close": "Закрыть",
"logout": "Выйти",
"skip": "К содержимому",
"working": "Подождите…",
"loading": "Загрузка…",
"cancel": "Отмена",
"save": "Сохранить",
"refresh": "Обновить"
},
"login": {
"local": "Ваша сеть. Ваше пространство.",
"headline": "Немного ближе.",
"headlineAccent": "Где бы вы ни были.",
"description": "Превратите устройство в окно прямого эфира. Делитесь камерой или экраном в своей локальной сети.",
"privacy": "Без облака. Только связь.",
"title": "С возвращением",
"subtitle": "Войдите на этот сервер для просмотра.",
"setupTitle": "Добро пожаловать домой",
"setupDescription": "Создайте аккаунт администратора этого сервера.",
"usernamePlaceholder": "Имя пользователя",
"passwordPlaceholder": "Пароль",
"setupToken": "Код первоначальной настройки",
"tokenHint": "Введите код из файла setup-token, созданного локальным сервером.",
"create": "Создать аккаунт",
"signin": "Войти",
"hostAccounts": "Аккаунты доступны только на этом сервере",
"localUtility": "Локальные трансляции"
},
"host": {
"eyebrow": "Ваше локальное пространство",
"title": "Студия трансляций",
"subtitle": "Окно в ваш мир. Всё под вашим контролем.",
"start": "Начать эфир",
"stop": "Остановить",
"previewTitle": "Здесь начинается ваш эфир",
"previewHint": "Выберите источник и начните эфир, когда будете готовы.",
"enableCamera": "Включить предпросмотр",
"private": "Приватный эфир",
"broadcasting": "Эфир в вашей сети",
"previewOnly": "Предпросмотр виден только вам",
"audioOff": "Только видео · Без звука",
"videoSource": "Источник видео",
"switchAnytime": "Меняйте в любой момент",
"rearHint": "Включите камеру, чтобы найти доступные объективы.",
"uptime": "Время эфира",
"viewers": "Зрители",
"quality": "Качество передачи",
"connectDevice": "Подключить устройство",
"scanHint": "Отсканируйте код на другом устройстве.",
"qrAlt": "QR-код адреса просмотра",
"localAddress": "Локальный адрес",
"copy": "Копировать адрес",
"copied": "Адрес скопирован",
"sameNetwork": "Подключитесь к той же Wi-Fi сети",
"connected": "Подключённые зрители",
"noViewers": "Пока здесь тихо",
"inviteHint": "Поделитесь ссылкой с первым зрителем.",
"kick": "Отключить",
"manageAccess": "Управление доступом",
"footer": "Локально по замыслу. Эфир остаётся в вашей сети."
},
"sources": {
"front": "Передняя камера",
"back": "Задняя камера",
"screen": "Экран"
},
"stream": {
"offline": "Не в эфире",
"connecting": "Подключение",
"reconnecting": "Переподключение",
"waiting": "Ожидание эфира",
"live": "В эфире"
},
"quality": {
"auto": "Автоматически",
"high": "Высокое · 4 Мбит/с",
"low": "Низкое · 600 Кбит/с"
},
"watch": {
"fullscreen": "Полноэкранный режим",
"disconnect": "Отключиться",
"reconnect": "Подключиться снова",
"waitingTitle": "Готовы к началу эфира",
"waitingHint": "Эфир ещё не начался. Видео появится здесь автоматически.",
"connectingTitle": "Устанавливаем связь",
"connectingHint": "Подключаемся к серверу в вашей локальной сети."
},
"accounts": {
"eyebrow": "Кому открыт доступ",
"title": "Аккаунты и безопасность",
"subtitle": "Личное пространство с доступом на ваших условиях.",
"add": "Добавить зрителя",
"protected": "Каждое подключение — с разрешения",
"protectedHint": "Вход обязателен. Пароли хешируются. Доступ можно отозвать в любой момент.",
"localAccounts": "Локальные аккаунты",
"account": "Аккаунт",
"role": "Роль",
"lastLogin": "Последний вход",
"sessions": "Сеансы",
"actions": "Действия",
"you": "Вы",
"admin": "Владелец",
"viewer": "Зритель",
"username": "Имя пользователя",
"password": "Пароль",
"usernameHint": "3–40 символов: латинские буквы, цифры, точки, подчёркивания или дефисы.",
"passwordHint": "Не менее 12 символов, включая букву и цифру.",
"never": "Ещё не входил",
"reset": "Сменить пароль",
"delete": "Удалить аккаунт",
"saved": "Настройки доступа обновлены.",
"activeSessions": "Активные сеансы",
"sessionHint": "Сеансы истекают через 30 минут бездействия или через 12 часов.",
"current": "Этот сеанс",
"lastActive": "Последняя активность",
"revoke": "Отозвать",
"resetHint": "Все сеансы пользователя {name} будут завершены.",
"deleteHint": "Удалить {name}? Аккаунт будет удалён, все его сеансы завершатся."
},
"general": {
"eyebrow": "На ваш вкус",
"title": "Настройки",
"subtitle": "Маленькие детали вашего пространства.",
"appearance": "Внешний вид",
"dark": "Тёмное стекло",
"light": "Светлое стекло",
"accent": "Цвет акцента",
"accentHint": "Добавьте индивидуальности элементам управления.",
"language": "Язык",
"displayLanguage": "Язык интерфейса",
"languageHint": "Используется во всём приложении в этом браузере.",
"privacy": "Приватность и подключение",
"loginRequired": "Обязательный вход",
"loginHint": "Просмотр доступен только аккаунтам этого сервера.",
"alwaysOn": "Всегда включено",
"localOnly": "Только локальная сеть",
"localHint": "Без облачных ретрансляторов, аналитики и внешних медиасервисов.",
"savedLocally": "Предпочтения сохраняются в этом браузере."
},
"colors": {
"lime": "Лайм",
"blue": "Голубой",
"violet": "Фиолетовый",
"peach": "Персиковый"
},
"errors": {
"server": "Не удалось выполнить запрос. Проверьте, что локальный сервер запущен.",
"unauthorized": "Неверные данные для входа или сеанс истёк. Войдите снова.",
"forbidden": "Для этого действия нужен аккаунт владельца.",
"origin": "Адрес не совпадает с настройкой сервера. Откройте настроенный локальный URL.",
"setupToken": "Неверный код первоначальной настройки.",
"alreadySetup": "Администратор уже создан. Войдите в аккаунт.",
"username": "Используйте 3–40 латинских букв, цифр, точек, подчёркиваний или дефисов.",
"password": "Используйте не менее 12 символов, включая букву и цифру.",
"rateLimited": "Слишком много попыток. Подождите минуту.",
"duplicate": "Это имя пользователя уже занято.",
"protectedAccount": "Аккаунт владельца нельзя удалить.",
"notFound": "Этот аккаунт больше не существует.",
"hostBusy": "Этот сеанс уже подключён или другой владелец ведёт эфир. Закройте другую вкладку.",
"secureContext": "Для доступа к камере и экрану нужен HTTPS или localhost на устройстве сервера. Откройте защищённый адрес.",
"NotAllowedError": "Доступ отменён или запрещён. Разрешите камеру или экран в браузере.",
"NotFoundError": "На устройстве не найдена подходящая камера.",
"NotReadableError": "Камера занята. Закройте другие использующие её приложения.",
"OverconstrainedError": "Этот источник недоступен. Попробуйте переднюю камеру.",
"clipboard": "Не удалось скопировать автоматически. Выделите и скопируйте адрес выше.",
"fullscreen": "Полноэкранный режим недоступен в этом браузере."
}
}