Update README.md to include Russian text sources and placeholder information

This commit is contained in:
sadtweenk
2026-03-13 10:26:13 +03:00
parent b7cfef4573
commit 99801d88c3
15 changed files with 870 additions and 0 deletions

View File

@@ -1,2 +1,13 @@
# Fanslayer # Fanslayer
Набор вынесенных `ru`-текстов из соседних проектов:
- `aegis/`: backend-сообщения, ошибки, системные сообщения и валидация из `../Aegis`
- `lotus/`: контент, UI-тексты, ошибки и alert-ы из `../Lotus`
- `runtime/`: тексты экранов, статусы, ошибки и уведомления из `../Launcher-Runtime`
- `common/`: повторяющиеся кнопки, сущности, общие сообщения и базовая валидация
Плейсхолдеры в строках:
- `{name}`, `{count}`, `{error}`, `{version}`, `{stage}` и подобные значения подставляются на стороне потребителя

52
aegis/errors.json Normal file
View File

@@ -0,0 +1,52 @@
{
"auth": {
"unauthorized": "Требуется авторизация",
"accessDenied": "Доступ запрещен",
"userNotFound": "Пользователь не найден",
"profileNotFound": "Профиль не найден",
"profileDoesNotBelongToUser": "Профиль не принадлежит пользователю",
"noTokenProvided": "Токен доступа не передан",
"recoverySessionNotFound": "Сессия восстановления не найдена",
"passwordResetChallengeExpired": "Сессия сброса пароля недействительна или истекла"
},
"profiles": {
"texturesNotFound": "Текстуры не найдены",
"skinNotFound": "Скин не найден",
"cloakNotFound": "Плащ не найден",
"maxProfilesAllowed": "Можно создать не более {max} профилей",
"profileNameAlreadyExists": "Профиль с таким именем уже существует",
"cannotDeleteGeneralProfile": "Нельзя удалить основной профиль"
},
"assets": {
"profileAndFileRequired": "Необходимо передать profile_id и файл",
"profileNotFoundOrAccessDenied": "Профиль не найден или доступ запрещен",
"failedToUploadSkin": "Не удалось загрузить скин",
"failedToUploadCloak": "Не удалось загрузить плащ"
},
"discord": {
"botAuthNotConfigured": "Аутентификация бота не настроена",
"invalidBotToken": "Недействительный токен бота",
"failedToGenerateUniqueCode": "Не удалось сгенерировать уникальный код подключения",
"invalidConnectionCode": "Недействительный код подключения",
"discordAccountAlreadyConnected": "Этот Discord-аккаунт уже привязан к другому пользователю"
},
"messenger": {
"missingConversationIdOrToken": "Не переданы conversationId или token",
"directConversationMustHaveOneParticipant": "В личной беседе должен быть ровно один собеседник",
"groupConversationMustHaveName": "У групповой беседы должно быть название",
"cannotCreateConversationWithYourself": "Нельзя создать беседу с самим собой",
"directConversationAlreadyExists": "Личная беседа уже существует",
"replyMessageNotFound": "Сообщение для ответа не найдено",
"cannotAddParticipantsToDirectConversation": "В личную беседу нельзя добавлять участников",
"allUsersAlreadyParticipants": "Все пользователи уже состоят в беседе",
"conversationNotFound": "Беседа не найдена",
"onlyOwnerCanDeleteGroupConversation": "Только владелец может удалить групповую беседу",
"ownerCannotLeaveGroup": "Владелец не может покинуть группу. Сначала удалите беседу или передайте права.",
"onlyOwnerCanRemoveParticipants": "Только владелец может исключать участников",
"canOnlyRemoveParticipantsFromGroup": "Исключать участников можно только из групповых бесед",
"cannotRemoveOwnerFromConversation": "Нельзя удалить владельца из беседы",
"onlyOwnerCanUpdateConversationName": "Только владелец может менять название беседы",
"canOnlyUpdateGroupConversationName": "Менять название можно только у групповых бесед",
"unknownError": "Неизвестная ошибка"
}
}

38
aegis/system.json Normal file
View File

@@ -0,0 +1,38 @@
{
"auth": {
"confirmEmailToCompleteRegistration": "Пожалуйста, подтвердите ваш email для завершения регистрации"
},
"userLogs": {
"userSignIn": {
"title": "Вход в аккаунт",
"description": "Пользователь успешно вошел в аккаунт"
},
"profileCreated": {
"title": "Создание профиля",
"description": "Вы создали профиль {name}"
},
"profileDeleted": {
"title": "Удаление профиля",
"description": "Вы удалили профиль {name}"
},
"profileSkinUploaded": {
"title": "Загрузка скина",
"description": "Вы загрузили скин для профиля {displayName}"
},
"profileCloakUploaded": {
"title": "Загрузка плаща",
"description": "Вы загрузили плащ для профиля {displayName}"
}
},
"messenger": {
"fallbackUser": "Пользователь {shortId}",
"groupCreated": "{actorName} создал(а) группу \"{groupName}\"",
"participantsInvitedOne": "{actorName} пригласил(а) {userName}",
"participantsInvitedMany": "{actorName} пригласил(а): {userNames}",
"participantLeft": "{userName} покинул(а) группу",
"participantsRemovedOne": "{actorName} исключил(а) {userName}",
"participantsRemovedMany": "{actorName} исключил(а): {userNames}",
"groupNameChanged": "{actorName} изменил(а) название группы с \"{oldName}\" на \"{newName}\"",
"groupNameSet": "{actorName} установил(а) название группы: \"{newName}\""
}
}

11
aegis/validation.json Normal file
View File

@@ -0,0 +1,11 @@
{
"assets": {
"profileIdAndFileAreRequired": "Необходимо передать profile_id и файл"
},
"messenger": {
"subscribePayload": "Для подписки нужны conversationId и token"
},
"passwordReset": {
"challengeWindow": "ChallengeId выдается на 10 минут после успешной проверки кода восстановления"
}
}

10
common/dates.json Normal file
View File

@@ -0,0 +1,10 @@
{
"formats": {
"ruLocale": "ru-RU"
},
"labels": {
"expiresAt": "Заканчивается",
"updatedAt": "Обновлено",
"createdAt": "Создано"
}
}

30
common/general.json Normal file
View File

@@ -0,0 +1,30 @@
{
"brand": {
"project": "Петрозаводск",
"runtime": "Launcher Runtime",
"minecraftState": "Суверенное государство-корпорация Minecraft"
},
"entities": {
"account": "Аккаунт",
"profile": "Профиль",
"server": "Сервер",
"launcher": "Лаунчер",
"discord": "Discord",
"email": "Электронная почта",
"password": "Пароль",
"playerName": "Имя игрока",
"playerNameOrEmail": "Имя игрока или почта",
"activityFeed": "Лента активности",
"settings": "Настройки",
"security": "Безопасность"
},
"states": {
"online": "Онлайн",
"offline": "Офлайн",
"loading": "Загрузка...",
"waiting": "Ожидание",
"done": "Готово",
"unknown": "Неизвестно",
"unlimited": "Не ограничено"
}
}

23
common/messages.json Normal file
View File

@@ -0,0 +1,23 @@
{
"progress": {
"initialization": "Инициализация...",
"checkingStatus": "Проверка статуса...",
"checkingCode": "Проверка...",
"creating": "Создание...",
"deleting": "Удаление...",
"generatingCode": "Генерация кода...",
"loadingSettings": "Загрузка настроек...",
"loadingProfiles": "Загрузка профилей...",
"waitingForData": "Ожидание данных...",
"logsUnavailable": "Логи пока отсутствуют"
},
"success": {
"emailConfirmed": "Почта подтверждена. Теперь войдите в аккаунт.",
"passwordUpdated": "Пароль обновлен. Теперь можно войти."
},
"info": {
"serverNotSelected": "Сервер не выбран",
"profileNotSelected": "Выберите профиль, чтобы продолжить",
"noOptionals": "Нет доступных опциональных модов"
}
}

35
common/ui.json Normal file
View File

@@ -0,0 +1,35 @@
{
"actions": {
"continue": "Продолжить",
"back": "Назад",
"close": "Закрыть",
"cancel": "Отмена",
"create": "Создать",
"delete": "Удалить",
"save": "Сохранить",
"copy": "Копировать",
"copied": "Скопировано!",
"refresh": "Обновить",
"download": "Скачать",
"login": "Войти",
"logout": "Выйти",
"register": "Регистрация",
"generateCode": "Сгенерировать код",
"confirmCode": "Подтвердить код",
"loadMore": "Загрузить больше",
"activate": "Активировать"
},
"navigation": {
"home": "Главная",
"howToStart": "Как начать",
"servers": "Сервера",
"profile": "Профиль",
"messages": "Сообщения"
},
"controls": {
"toggleTheme": "Переключить тему",
"minimizeWindow": "Свернуть окно",
"closeWindow": "Закрыть окно",
"changeProfile": "Сменить профиль"
}
}

20
common/validation.json Normal file
View File

@@ -0,0 +1,20 @@
{
"required": {
"fillAllFields": "Пожалуйста, заполните все поля",
"email": "Введите email",
"selectImage": "Пожалуйста, выберите изображение",
"profileIdAndFile": "Необходимо передать profile_id и файл"
},
"password": {
"minimumLength": "Пароль должен быть не менее 8 символов",
"mismatch": "Пароли не совпадают"
},
"code": {
"enterSixDigits": "Введите 6 цифр кода",
"invalid": "Код недействителен"
},
"session": {
"expired": "Сессия истекла",
"requestAgain": "{message}. Запросите код заново."
}
}

20
lotus/alerts.json Normal file
View File

@@ -0,0 +1,20 @@
{
"profile": {
"me": {
"selectImage": "Пожалуйста, выберите изображение",
"skinUploadFailed": "Ошибка при загрузке скина",
"skinUploadFailedWithReason": "Ошибка загрузки скина: {error}",
"cloakUploadFailed": "Ошибка при загрузке плаща",
"cloakUploadFailedWithReason": "Ошибка загрузки плаща: {error}",
"createProfileFailed": "Ошибка при создании профиля",
"deleteGeneralProfileForbidden": "Нельзя удалить основной профиль",
"deleteProfileFailed": "Ошибка при удалении профиля",
"genericError": "Ошибка: {error}"
}
},
"auth": {
"forgotPassword": {
"requestCodeAgain": "{message}. Запросите код заново."
}
}
}

405
lotus/content.json Normal file
View File

@@ -0,0 +1,405 @@
{
"layout": {
"header": {
"navItems": [
{ "label": "Главная", "href": "/#hero" },
{ "label": "Как начать", "href": "/#onboarding" },
{ "label": "Сервера", "href": "/#servers" }
],
"accountFallback": "Аккаунт",
"profile": "Профиль",
"messages": "Сообщения",
"logout": "Выйти",
"register": "Регистрация",
"login": "Авторизация",
"themeToggleAria": "Переключить тему"
},
"messengerMobileHeader": {
"accountFallback": "Аккаунт",
"profile": "Профиль",
"messages": "Сообщения",
"logout": "Выйти",
"register": "Регистрация",
"login": "Вход",
"themeToggleAria": "Переключить тему"
},
"footer": {
"brand": "Петрозаводск",
"creator": "Нефильтрованные Приложения",
"navLinks": [
{ "label": "Лаунчер", "href": "/download" },
{ "label": "Публичная оферта", "href": "/offer" },
{ "label": "Правила", "href": "/rules" },
{ "label": "Конфиденциальность", "href": "/rules" },
{ "label": "Условия использования", "href": "/offer" }
],
"legalLinks": [
{ "label": "Публичная оферта", "href": "/offer" },
{ "label": "Правила", "href": "/rules" }
]
}
},
"sections": {
"hero": {
"statusChecking": "Проверка статуса...",
"statusOffline": "Государство офлайн",
"statusOnline": "Государство онлайн",
"badge": "kpp совет discord",
"title": "Петрозаводск",
"subtitleAccent": "Суверенное",
"subtitleTail": "государство-корпорация Minecraft",
"description": "На руинах старого мира КПП держит Кодекс и инфраструктуру, а частные сектора двигают экономику, политику и социальную жизнь через Совет Корпораций.",
"primaryCta": "Подать заявку гражданина",
"secondaryCta": "Скачать лаунчер"
},
"news": {
"eyebrow": "Информационный бюллетень",
"title": "Лента новостей Петрозаводска",
"description": "Официальные обновления КПП, решения Совета Корпораций и ключевые изменения экономической системы государства.",
"archive": "Онлайн-архив процедур",
"feedTitle": "Оперативная лента",
"entriesLabel": "{count} записей",
"tags": [
"Протокол Совета",
"Архив Discord"
],
"items": [
{
"id": 1,
"title": "Открыт реестр частных секторов",
"content": "КПП запустила официальный реестр корпораций. Теперь заявки на регистрацию, вид деятельности и закрепление территорий проходят через единый Discord-канал с прозрачным протоколом.",
"category": "Государство",
"date": "11.02.2026",
"accent": "Регистрация бизнеса",
"note": "Оформление секторов и прав на территорию переведено в единый регламент."
},
{
"id": 2,
"title": "Совет Корпораций утвердил первый налоговый цикл",
"content": "Еженедельный взнос теперь зависит от размера территории и активности сектора. Средства казны направят на дороги, порталы и публичные логистические узлы.",
"category": "Экономика",
"date": "10.02.2026",
"accent": "Казна и инфраструктура",
"note": "Налоговая модель привязана к масштабу сектора и его фактической активности."
},
{
"id": 3,
"title": "Запущен канал инициатив граждан",
"content": "Игроки могут выдвигать предложения по законам и регламентам. Идеи с поддержкой переходят в повестку Совета и выносятся на голосование.",
"category": "Политика",
"date": "09.02.2026",
"accent": "Демократия снизу",
"note": "Поддержанные инициативы автоматически попадают в повестку Совета."
},
{
"id": 4,
"title": "Арбитраж КПП переведен в тикетный формат",
"content": "Разбирательства между секторами и гражданами фиксируются в тикетах: стороны, доказательства и итоговое решение теперь доступны в архиве процедур.",
"category": "Право",
"date": "08.02.2026",
"accent": "Прозрачный арбитраж",
"note": "Каждый спор теперь сохраняется в архиве процедур с единым шаблоном решения."
}
]
},
"howToRegistration": {
"eyebrow": "Быстрый старт",
"title": "Как начать играть?",
"description": "Три простых шага, чтобы стать частью виртуального государства Петрозаводск",
"steps": [
{
"title": "Зарегистрироваться",
"description": "Создай аккаунт за минуту, чтобы синхронизировать прогресс и видеть статус вайпов.",
"action": "Перейти к регистрации",
"href": "/auth/register"
},
{
"title": "Скачать лаунчер",
"description": "Готовые пресеты модов, автообновления и системные пресеты под слабые ПК.",
"action": "Скачать",
"href": "/download"
},
{
"title": "Залететь на сервер",
"description": "Выбери любой сервак из лаунчера и появись в стартовом хабе. Дальше - дело твоей фантазии.",
"action": "Смотреть сервера",
"href": "#servers"
}
]
},
"ourServers": {
"desktopTitle": "Главный сервер Петрозаводска",
"desktopSubtitle": "Один центр силы.",
"mobileTitle": "Главный сервер",
"cards": [
{
"title": "Петрозаводск: Государственный контур",
"description": "Единый главный сервер Fabric 1.21.8, где КПП регулирует Кодекс и инфраструктуру, а частные сектора развивают экономику и политику.",
"online": "112/300 граждан",
"tags": [
"kpp",
"corporations",
"discord-governance"
],
"content": "Здесь строится государство-корпорация: регистрируйте сектор, получайте территорию, участвуйте в Совете Корпораций, платите налоги в казну и влияйте на развитие дорог, порталов и ивентов через официальные Discord-процедуры."
}
]
},
"aboutServers": {
"eyebrow": "Лор сервера",
"title": "Петрозаводск - суверенное государство-корпорация на руинах старого мира",
"description": "Его держит Коммунистическая Пивная Партия: не диктат, а менеджмент-бюро, которое ведет Кодекс, выделяет землю и следит, чтобы прогресс не убил дух товарищества. Малый онлайн управляется через частные сектора и Совет Корпораций, а экономика живет на налогах, общей казне и честной торговле.",
"timelineTitle": "Хроника государства",
"timelineStepsLabel": "4 этапа",
"timeline": [
{
"title": "После катастрофы",
"text": "На руинах старого мира появляется автономный город-государство."
},
{
"title": "Рождение КПП",
"text": "Партия берет на себя регуляцию, кодекс и инфраструктуру."
},
{
"title": "Власть корпораций",
"text": "Частные сектора становятся опорой экономики и социальных связей."
},
{
"title": "Цифровая столица",
"text": "Discord превращается в портал законов, торговли и политики."
}
],
"pillars": [
{
"title": "КПП и порядок",
"text": "Партия фиксирует базовые правила, защищает от гриферства и выступает арбитром между корпорациями."
},
{
"title": "Частные сектора",
"text": "Гильдии получают землю, строят бизнес, ведут свою экономику и влияют на решения государства."
},
{
"title": "Совет корпораций",
"text": "Главы секторов собираются для законов, налогов и споров при партийном надзоре."
}
],
"discordJoinTitle": "Стань частью виртуального государства Петрозаводск",
"discordJoinButton": "Присоединиться к Discord серверу",
"discordLinkNoteTitle": "Для доступа ко всем функциям свяжи игровой аккаунт с Discord ботом",
"discordLinkNoteText": "После присоединения используй команду /connect в канале с ботом для синхронизации аккаунтов.",
"discordLinkButton": "Связать аккаунт",
"discordBlockEyebrow": "Центральная нервная система",
"discordBlockTitle": "Роль и функции Discord в проекте \"Петрозаводск\"",
"discordBlockDescription": "Discord здесь - это центральная нервная система и правительственный портал всего государства, где осуществляется 90% управленческой, экономической и социальной активности. Это не просто чат, а инструмент для легитимного управления малым, но сложно организованным сообществом.",
"discordFeatures": [
{
"title": "Единый источник правды",
"text": "Все официальные правила, протоколы заседаний и объявления публикуются в специальных каналах."
},
{
"title": "Связь с государством",
"text": "Через систему тикетов решаются все вопросы: регистрация бизнеса, согласование построек, жалобы."
},
{
"title": "Политическая система",
"text": "Проведение выборов, голосований и законодательных инициатив через ботов и опросы."
},
{
"title": "Экономическая инфраструктура",
"text": "Регистрация корпораций, торговая площадка, учет налогов и госзаказов."
},
{
"title": "Социальная организация",
"text": "Система ролей, частные пространства для корпораций, общественные каналы для общения."
},
{
"title": "Масштабируемость",
"text": "Легко добавляются новые боты для голосований, экономического учета и управления ролями."
}
]
}
},
"auth": {
"login": {
"eyebrow": "Вернуться в игру",
"title": "Авторизуйтесь, чтобы продолжить строительство в Петрозаводске",
"description": "Логин и пароль - все, что нужно для входа. Быстро и без лишнего.",
"separator": "или",
"createAccount": "Создать новый аккаунт",
"formTitle": "Вход",
"usernameLabel": "Имя игрока или почта",
"passwordLabel": "Пароль",
"rememberMe": "Запомнить меня",
"forgotPassword": "Забыли пароль?",
"submit": "Войти",
"submitLoading": "Вход...",
"footnote": "Авторизуясь, вы подтверждаете согласие с правилами проекта, которые валяются где-то в закромах головы руководства проекта и не только."
},
"register": {
"eyebrow": "Новый аккаунт",
"title": "Регистрация с подтверждением по коду из email",
"description": "Сначала создайте аккаунт, затем подтвердите почту одноразовым кодом.",
"existingAccount": "уже есть аккаунт?",
"loginLink": "Войти",
"formTitle": "Регистрация",
"usernameLabel": "Имя игрока",
"emailLabel": "Электронная почта",
"passwordLabel": "Пароль",
"repeatPasswordLabel": "Повтор пароля",
"submit": "Создать аккаунт",
"submitLoading": "Создание...",
"enterCodeFromEmail": "Ввести код из письма"
},
"forgotPassword": {
"title": "Восстановление пароля",
"emailLabel": "Электронная почта",
"emailPlaceholder": "player@mail.com",
"requestCodeButton": "Получить код восстановления",
"requestCodeButtonLoading": "Отправка...",
"otpTitle": "Подтверждение кода",
"otpDescription": "Введите одноразовый код из письма, чтобы перейти к смене пароля.",
"newPasswordTitle": "Новый пароль",
"newPasswordLabel": "Новый пароль",
"repeatPasswordLabel": "Повторите пароль",
"passwordPlaceholder": "********",
"savePasswordButton": "Сохранить новый пароль",
"savePasswordButtonLoading": "Сохранение..."
},
"otpModal": {
"submit": "Подтвердить код",
"submitLoading": "Проверка...",
"helper": "Введите {length}-значный код одним блоком или по символам."
}
},
"profile": {
"discord": {
"loading": "Загрузка...",
"eyebrow": "discord integration",
"title": "Подключение Discord",
"description": "Свяжите свой аккаунт с Discord для получения уведомлений и доступа к дополнительным функциям.",
"connectedTitle": "Discord подключен",
"connectedDescription": "Ваш аккаунт успешно связан с Discord",
"connectedIdLabel": "ID: {discordId}",
"benefitsTitle": "Преимущества подключенного Discord аккаунта:",
"benefits": [
"Уведомления о важных событиях",
"Доступ к специальным каналам",
"Синхронизация статуса и ролей"
],
"howToTitle": "Как подключить Discord",
"steps": [
"Нажмите кнопку \"Сгенерировать код\" ниже",
"Скопируйте полученный код подключения",
"Откройте Discord и отправьте команду /подключить [код] боту П.И.О.Н.Е.Р",
"Подождите несколько секунд - подключение произойдет автоматически"
],
"connectionCodeLabel": "Ваш код подключения:",
"copyButton": "Копировать",
"copiedButton": "Скопировано!",
"codeHint": "Код действителен до успешного подключения. После подключения код будет автоматически удален.",
"generateButton": "Сгенерировать код подключения",
"generateButtonLoading": "Генерация кода..."
},
"me": {
"quickStats": [
{ "label": "Игровое время", "value": "6ч 12м", "hint": "за последнюю неделю" },
{ "label": "Активные сервера", "value": "3", "hint": "кол-во серверов, на которые вы заходили" },
{ "label": "Уровень доступа", "value": "Explorer", "hint": "расширяется подпиской" }
],
"settingsBlueprint": [
{
"key": "notifications",
"title": "Системные уведомления",
"description": "Присылать события аккаунта и новости."
},
{
"key": "loginAlerts",
"title": "Уведомления о входе",
"description": "Сигнализировать при подозрительных попытках."
},
{
"key": "devPreviews",
"title": "Dev-превью",
"description": "Получать ранний доступ к экспериментам."
}
],
"roadmap": [
{
"label": "Supabase профили",
"detail": "Синк никнейма, ролей и статусов в реальном времени."
},
{
"label": "Подписки",
"detail": "Встроенная покупка и управление тарифами."
},
{
"label": "Аналитика сервера",
"detail": "Метрики времени онлайн, активность друзей."
}
],
"eyebrow": "inside profile",
"title": "Личный кабинет",
"description": "Пространство для управления аккаунтом.",
"personalization": "Персонализация",
"discordConnection": "Подключение Discord",
"viewerLoading": "Загрузка...",
"disableAnimation": "Выключить анимацию",
"enableAnimation": "Включить анимацию",
"disableAutoRotate": "Выключить автовращение",
"enableAutoRotate": "Включить автовращение",
"profilesRemaining": "Осталось {count} из 5",
"generalProfile": "Основной профиль",
"profile": "Профиль",
"deleteProfile": "Удалить профиль",
"newProfile": "Новый профиль",
"newShort": "Новый",
"profileShort": "Профиль",
"accountTitle": "Ваш аккаунт",
"accountLoading": "Загрузка...",
"profileInfo": "Информация о профиле",
"defaultRole": "Гражданин",
"defaultCorporate": "Петрозаводск",
"balance": "Баланс",
"balanceValue": "1000 пт.",
"expiresAt": "Заканчивается",
"unlimited": "Не ограничено",
"editProfile": "Редактировать профиль",
"uploadLoading": "Загрузка...",
"updateSkin": "Обновить скин",
"updateCloak": "Обновить плащ",
"statsTitle": "Ваши показатели",
"activityTitle": "Лента активности",
"activityDescription": "Последние события аккаунта",
"loadMore": "Загрузить больше",
"subscriptionEyebrow": "подписка",
"subscriptionTitle": "Premium",
"subscriptionDescription": "Платная подписка, чтобы быть крутым",
"subscriptionFeatures": [
"+ Не придумал",
"+ Особые теги в профиле",
"+ Приоритет на серверах"
],
"subscriptionActivate": "Активировать",
"settingsTitle": "Настройки и безопасность",
"settingsDescription": "Тумблеры пока локальные, дальше уйдут в Supabase.",
"deleteModal": {
"title": "Подтверждение удаления",
"description": "Вы уверены, что хотите удалить профиль \"{name}\"? Это действие нельзя отменить.",
"submit": "Удалить",
"submitLoading": "Удаление...",
"cancel": "Отмена"
},
"createModal": {
"title": "Создать новый профиль",
"nameLabel": "Имя профиля",
"namePlaceholder": "Введите имя профиля",
"submit": "Создать",
"submitLoading": "Создание...",
"cancel": "Отмена"
},
"logsModal": {
"title": "Лента активности"
}
}
}
}

37
lotus/errors.json Normal file
View File

@@ -0,0 +1,37 @@
{
"auth": {
"login": {
"fillAllFields": "Пожалуйста, заполните все поля",
"loginFailed": "Не удалось выполнить вход",
"serverDidNotReturnAccessToken": "Сервер не вернул токен доступа"
},
"register": {
"requiredFields": "Имя игрока, почта и пароль обязательны",
"passwordMismatch": "Пароли не совпадают",
"passwordTooShort": "Пароль должен быть не менее 8 символов",
"createAccountFailed": "Не удалось создать аккаунт",
"completeRegistrationFirst": "Сначала завершите регистрацию",
"verifyCodeFailed": "Не удалось подтвердить код"
},
"forgotPassword": {
"emailNotFound": "Email не найден",
"emailRequired": "Введите email",
"sendMailFailed": "Не удалось отправить письмо",
"enterSixDigits": "Введите 6 цифр кода",
"invalidCode": "Код недействителен",
"verifyCodeFailed": "Ошибка проверки кода",
"recoverySessionExpired": "Сессия восстановления истекла",
"fillAllFields": "Заполните все поля",
"passwordTooShort": "Пароль должен быть не менее 8 символов",
"passwordMismatch": "Пароли не совпадают",
"updatePasswordFailed": "Не удалось обновить пароль",
"passwordUpdateError": "Ошибка обновления пароля"
}
},
"profile": {
"discord": {
"loadingConnectionFailed": "Ошибка при загрузке информации о подключении",
"generateCodeFailed": "Ошибка при генерации кода подключения"
}
}
}

20
runtime/alerts.json Normal file
View File

@@ -0,0 +1,20 @@
{
"login": {
"errorToast": "Ошибка авторизации, проверьте правильность введенных данных"
},
"download": {
"logsUnavailable": "Логи запуска пока отсутствуют"
},
"debug": {
"waitingForData": "Ожидание данных...",
"logsUnavailable": "Логи пока отсутствуют"
},
"status": {
"initialization": "Инициализация...",
"loadingRuntimeData": "Загрузка данных runtime...",
"loadingProfiles": "Загрузка профилей...",
"connectingToRuntimeApi": "Подключение к runtime API...",
"loadingAuthMethods": "Загрузка способов авторизации...",
"checkingSavedSession": "Проверка сохраненной сессии..."
}
}

143
runtime/content.json Normal file
View File

@@ -0,0 +1,143 @@
{
"app": {
"bootMessages": {
"loadingRuntimeData": "Загрузка данных runtime...",
"loadingProfiles": "Загрузка профилей...",
"connectingToRuntimeApi": "Подключение к runtime API...",
"loadingAuthMethods": "Загрузка способов авторизации...",
"checkingSavedSession": "Проверка сохраненной сессии..."
},
"sceneTitles": {
"login": "Авторизация",
"profiles": "Выбор профиля",
"serverSelect": "Выбор сервера",
"serverDetails": "Сервер",
"serverSettings": "Настройки",
"serverOptionals": "Опциональные",
"download": "Загрузка",
"debug": "Отладка"
}
},
"windowFrame": {
"defaultTitle": "Не установлено",
"runtimeLabel": "Launcher Runtime",
"back": "Назад",
"profile": "Профиль",
"changeProfile": "Сменить профиль",
"logout": "Выйти",
"toggleTheme": "Переключить тему",
"minimizeWindow": "Свернуть окно",
"closeWindow": "Закрыть окно"
},
"login": {
"errorToast": "Ошибка авторизации, проверьте правильность введенных данных",
"title": "Петрозаводск",
"subtitleAccent": "Суверенное",
"subtitleTail": "государство-корпорация Minecraft",
"description": "На руинах старого мира КПП держит Кодекс и инфраструктуру, а частные сектора двигают экономику, политику и социальную жизнь через Совет Корпораций.",
"register": "Регистрация",
"discord": "Discord",
"backToSite": "Вернуться на сайт",
"usernameLabel": "Имя игрока или почта",
"passwordLabel": "Пароль",
"rememberMe": "Запомнить меня",
"forgotPassword": "Забыли пароль?",
"submit": "Войти",
"submitLoading": "Вход...",
"footnote": "Авторизуясь, вы подтверждаете согласие с правилами проекта, которые валяются где-то в закромах головы руководства проекта и не только."
},
"profiles": {
"eyebrow": "Actor profile",
"title": "Выберите профиль игрока",
"selected": "Выбран профиль: {title}",
"selectToContinue": "Выберите профиль, чтобы продолжить",
"empty": "Профили не получены от backend API.",
"userLabel": "Пользователь: {username}"
},
"serverSelect": {
"eyebrow": "Server lineup",
"title": "Выберите сервер для запуска",
"versionLabel": "Версия: {version}",
"unknownVersion": "unknown",
"preparingCards": "Подготовка карточек серверов...",
"serverNotSelected": "Сервер не выбран",
"selectAndContinue": "Выберите сервер и нажмите продолжить."
},
"serverPage": {
"serverNotSelected": "Сервер не выбран",
"eyebrow": "Лор сервера",
"title": "Петрозаводск - суверенное государство-корпорация на руинах старого мира",
"description": "Его держит Коммунистическая Пивная Партия: не диктат, а менеджмент-бюро, которое ведет Кодекс, выделяет землю и следит, чтобы прогресс не убил дух товарищества. Малый онлайн управляется через частные сектора и Совет Корпораций, а экономика живет на налогах, общей казне и честной торговле.",
"stats": {
"type": "Тип сервера",
"worldSize": "Размер мира",
"netherSize": "Размер ада",
"endSize": "Размер энда"
},
"timelineTitle": "Хроника государства",
"timeline": [
{
"title": "После катастрофы",
"text": "На руинах старого мира появляется автономный город-государство."
},
{
"title": "Рождение КПП",
"text": "Партия берет на себя регуляцию, кодекс и инфраструктуру."
},
{
"title": "Власть корпораций",
"text": "Частные сектора становятся опорой экономики и социальных связей."
},
{
"title": "Цифровая столица",
"text": "Discord превращается в портал законов, торговли и политики."
}
]
},
"serverSettings": {
"title": "Настройки сервера",
"loading": "Загрузка настроек...",
"memory": "Оперативная память",
"auto": "Авто",
"gb": "ГБ",
"java": "Java",
"recommended": "[RECOMMENDED]",
"flags": "Флаги"
},
"serverOptionals": {
"empty": "Нет доступных опциональных модов"
},
"download": {
"fallbackBootMessage": "Инициализация...",
"speedLabel": "Скорость: {value} Mbit/s",
"logsUnavailable": "Логи запуска пока отсутствуют"
},
"debug": {
"title": "Debug Output",
"waitingForData": "Ожидание данных...",
"copy": "Копировать",
"kill": "Kill",
"logsUnavailable": "Логи пока отсутствуют"
},
"launchConsole": {
"stages": {
"assetVerify": "Проверка ассетов",
"hashing": "Хеширование",
"diff": "Сравнение файлов",
"download": "Скачивание",
"deleteExtra": "Удаление лишних файлов",
"done.part": "Подготовка",
"done": "Готово"
},
"stagePrefix": "[INFO] Этап: {stage}",
"totalDownloadFallback": "[INFO] Получен общий размер загрузки",
"totalDownload": "[INFO] Общий размер: {size}",
"launchRequested": "[INFO] Launch requested",
"downloadComplete": "[INFO] Download complete",
"minecraftStarted": "[INFO] Minecraft process started",
"minecraftFinished": "[INFO] Minecraft process finished",
"terminateRequested": "[WARN] Terminate requested",
"launchFailed": "[ERROR] {reason}",
"waiting": "Ожидание"
}
}

15
runtime/errors.json Normal file
View File

@@ -0,0 +1,15 @@
{
"general": {
"generic": "Ошибка",
"initializationFailed": "Ошибка инициализации: {error}"
},
"auth": {
"authorizationToast": "Ошибка авторизации, проверьте правильность введенных данных"
},
"profiles": {
"empty": "Профили не получены от backend API."
},
"servers": {
"serverNotSelected": "Сервер не выбран"
}
}