feat: 初始化项目结构与核心功能

引入项目基础目录结构,包含多语言支持、主要页面与组件、核心游戏逻辑、UI 组件库、加密与本地持久化、自动化 Docker 构建流程、GitHub issue 模板(中英文)、README(中英文)、LICENSE 及开发配置文件。实现 OGame 单机版主要功能模块,为后续开发和扩展奠定基础。
This commit is contained in:
谦君
2025-12-11 14:49:25 +08:00
commit 705ee8c3db
178 changed files with 17258 additions and 0 deletions

536
src/locales/ru.ts Normal file
View File

@@ -0,0 +1,536 @@
export default {
common: {
confirm: 'Подтвердить',
cancel: 'Отмена',
delete: 'Удалить',
edit: 'Редактировать',
save: 'Сохранить',
close: 'Закрыть',
back: 'Назад',
next: 'Далее',
previous: 'Предыдущий',
submit: 'Отправить',
reset: 'Сбросить',
search: 'Поиск',
filter: 'Фильтр',
loading: 'Загрузка...',
noData: 'Нет данных',
error: 'Ошибка',
success: 'Успешно',
warning: 'Предупреждение',
info: 'Информация',
resourceType: 'Тип ресурса',
playerName: 'Командир',
timeHour: 'ч',
timeMinute: 'мин',
timeSecond: 'сек',
featureLocked: 'Функция заблокирована',
unlockRequired: 'Требуется здание',
requiredBuilding: 'Необходимое здание',
currentLevel: 'Текущий уровень',
goToBuildings: 'К зданиям',
locked: 'Заблокировано',
viewRequirements: 'Просмотр требований',
requirementsNotMet: 'Требования не выполнены',
current: 'Текущий'
},
errors: {
requirementsNotMet: 'Требования не выполнены',
insufficientResources: 'Недостаточно ресурсов',
shieldDomeLimit: 'Достигнут лимит щитовых куполов',
fleetMissionsFull: 'Слоты миссий флота заполнены',
insufficientFleet: 'Недостаточно флота',
insufficientFuel: 'Недостаточно топлива',
planetOnly: 'Это здание можно построить только на планетах',
moonOnly: 'Это здание можно построить только на лунах',
buildQueueFull: 'Очередь строительства заполнена',
insufficientSpace: 'Недостаточно места',
buildingLevelZero: 'Уровень здания 0, нельзя снести',
researchQueueFull: 'Очередь исследований заполнена',
moonExists: 'Луна уже существует',
insufficientDebris: 'Недостаточно обломков'
},
nav: {
overview: 'Обзор',
buildings: 'Здания',
research: 'Исследования',
shipyard: 'Верфь',
defense: 'Оборона',
fleet: 'Флот',
officers: 'Офицеры',
simulator: 'Симулятор',
galaxy: 'Галактика',
messages: 'Сообщения',
settings: 'Настройки'
},
sidebar: {
language: 'Язык',
lightMode: 'Светлая тема',
darkMode: 'Тёмная тема',
collapse: 'Свернуть',
expand: 'Развернуть'
},
resources: {
metal: 'Металл',
crystal: 'Кристалл',
deuterium: 'Дейтерий',
darkMatter: 'Тёмная материя',
energy: 'Энергия',
production: 'Производство',
capacity: 'Вместимость',
current: 'Текущий',
max: 'Макс. вместимость',
perHour: 'час'
},
planet: {
planet: 'Планета',
moon: 'Луна',
colony: 'Колония',
position: 'Позиция',
coordinates: 'Координаты',
switchToMoon: 'На луну',
backToPlanet: 'Вернуться на планету',
fields: 'Поля',
temperature: 'Температура',
homePlanet: 'Родная планета',
planetPrefix: 'Планета',
moonSuffix: 'я луна',
colonyPrefix: 'Колония'
},
player: {
points: 'Всего очков'
},
buildings: {
metalMine: 'Рудник металла',
crystalMine: 'Рудник кристалла',
deuteriumSynthesizer: 'Синтезатор дейтерия',
solarPlant: 'Солнечная электростанция',
roboticsFactory: 'Фабрика роботов',
naniteFactory: 'Нанитная фабрика',
shipyard: 'Верфь',
researchLab: 'Исследовательская лаборатория',
metalStorage: 'Хранилище металла',
crystalStorage: 'Хранилище кристалла',
deuteriumTank: 'Цистерна дейтерия',
darkMatterCollector: 'Коллектор тёмной материи',
lunarBase: 'Лунная база',
sensorPhalanx: 'Сенсорная фаланга',
jumpGate: 'Прыжковые ворота',
buildTime: 'Время строительства',
production: 'Производство',
consumption: 'Потребление',
totalCost: 'Общая стоимость',
totalPoints: 'Общие очки',
levelRange: 'Диапазон уровней'
},
buildingDescriptions: {
metalMine: 'Добывает металлические ресурсы',
crystalMine: 'Добывает кристаллические ресурсы',
deuteriumSynthesizer: 'Синтезирует дейтериевые ресурсы',
solarPlant: 'Обеспечивает энергией',
roboticsFactory: 'Ускоряет скорость строительства',
naniteFactory: 'Увеличивает вместимость очереди строительства, +1 за уровень (макс 10)',
shipyard: 'Строит корабли',
researchLab: 'Исследует технологии',
metalStorage: 'Увеличивает ёмкость хранилища металла',
crystalStorage: 'Увеличивает ёмкость хранилища кристалла',
deuteriumTank: 'Увеличивает ёмкость хранилища дейтерия',
darkMatterCollector: 'Собирает редкие ресурсы тёмной материи',
lunarBase: 'Увеличивает доступное пространство на луне',
sensorPhalanx: 'Обнаруживает активность флота в окружающих системах',
jumpGate: 'Мгновенно переносит флоты на другие луны'
},
ships: {
lightFighter: 'Лёгкий истребитель',
heavyFighter: 'Тяжёлый истребитель',
cruiser: 'Крейсер',
battleship: 'Линкор',
smallCargo: 'Малый транспорт',
largeCargo: 'Большой транспорт',
colonyShip: 'Колонизатор',
recycler: 'Переработчик',
espionageProbe: 'Шпионский зонд',
darkMatterHarvester: 'Сборщик тёмной материи'
},
shipDescriptions: {
lightFighter: 'Базовая боевая единица',
heavyFighter: 'Тяжелобронированный истребитель',
cruiser: 'Средний боевой корабль, сбалансированная атака и защита',
battleship: 'Мощный боевой корабль',
smallCargo: 'Транспортирует небольшое количество ресурсов',
largeCargo: 'Транспортирует большое количество ресурсов',
colonyShip: 'Используется для колонизации новых планет',
recycler: 'Собирает ресурсы с поля обломков',
espionageProbe: 'Разведывает вражеские планеты',
darkMatterHarvester: 'Специальный корабль для сбора тёмной материи'
},
defenses: {
rocketLauncher: 'Ракетная установка',
lightLaser: 'Лёгкий лазер',
heavyLaser: 'Тяжёлый лазер',
gaussCannon: 'Гауссова пушка',
ionCannon: 'Ионное орудие',
plasmaTurret: 'Плазменная турель',
smallShieldDome: 'Малый щитовой купол',
largeShieldDome: 'Большой щитовой купол'
},
defenseDescriptions: {
rocketLauncher: 'Базовое оборонительное сооружение',
lightLaser: 'Лёгкое энергетическое оружие',
heavyLaser: 'Тяжёлое энергетическое оружие',
gaussCannon: 'Высокоскоростное кинетическое оружие',
ionCannon: 'Эффективно против щитов',
plasmaTurret: 'Мощное оборонительное сооружение',
smallShieldDome: 'Малый щит, защищающий всю планету',
largeShieldDome: 'Большой щит, защищающий всю планету'
},
research: {
researchTime: 'Время исследования',
totalCost: 'Общая стоимость',
totalPoints: 'Общие очки',
levelRange: 'Диапазон уровней'
},
technologies: {
energyTechnology: 'Энергетическая технология',
laserTechnology: 'Лазерная технология',
ionTechnology: 'Ионная технология',
hyperspaceTechnology: 'Гиперпространственная технология',
plasmaTechnology: 'Плазменная технология',
computerTechnology: 'Компьютерная технология',
combustionDrive: 'Реактивный двигатель',
impulseDrive: 'Импульсный двигатель',
hyperspaceDrive: 'Гиперпространственный двигатель',
darkMatterTechnology: 'Технология тёмной материи'
},
technologyDescriptions: {
energyTechnology: 'Улучшает энергоэффективность',
laserTechnology: 'Основа лазерного оружия и обороны',
ionTechnology: 'Технология ионного оружия',
hyperspaceTechnology: 'Технология гиперпространственных прыжков',
plasmaTechnology: 'Технология плазменного оружия',
computerTechnology: 'Увеличивает вместимость очереди исследований, +1 за уровень (макс 10)',
combustionDrive: 'Базовая технология двигателей',
impulseDrive: 'Средняя технология двигателей',
hyperspaceDrive: 'Продвинутая технология двигателей',
darkMatterTechnology: 'Исследование свойств и применения тёмной материи'
},
officers: {
commander: 'Командир',
admiral: 'Адмирал',
engineer: 'Инженер',
geologist: 'Геолог',
technocrat: 'Технократ',
darkMatterSpecialist: 'Специалист по тёмной материи'
},
officerDescriptions: {
commander: 'Улучшает скорость строительства и управление',
admiral: 'Улучшает боевую мощь и скорость флота',
engineer: 'Улучшает энергию и оборону',
geologist: 'Улучшает производство ресурсов',
technocrat: 'Улучшает скорость исследований и шпионаж',
darkMatterSpecialist: 'Улучшает эффективность сбора тёмной материи'
},
queue: {
buildQueue: 'Очередь строительства',
researchQueue: 'Очередь исследований',
building: 'Строится',
researching: 'Исследуется',
remaining: 'Осталось',
cancel: 'Отменить',
cancelBuild: 'Отменить строительство',
cancelResearch: 'Отменить исследование',
confirmCancel: 'Вы уверены, что хотите отменить? 50% ресурсов будет возвращено.',
level: 'Уровень',
upgradeToLevel: 'Улучшить до уровня'
},
overview: {
title: 'Обзор планеты',
resourceOverview: 'Ресурсы',
fleetInfo: 'Флот',
currentShips: 'Корабли на этой планете'
},
buildingsView: {
title: 'Здания',
usedSpace: 'Использовано полей',
spaceUsage: 'Использование полей',
level: 'Уровень',
upgradeCost: 'Стоимость улучшения',
buildTime: 'Время строительства',
upgrade: 'Улучшить',
upgradeFailed: 'Улучшение не удалось',
upgradeFailedMessage: 'Пожалуйста, проверьте, достаточно ли у вас ресурсов, места или нет других задач строительства.',
demolish: 'Снести',
demolishRefund: 'Возврат от сноса',
demolishFailed: 'Снос не удался',
demolishFailedMessage: 'Невозможно снести это здание. Проверьте, не заполнена ли очередь строительства или уровень здания не равен 0.'
},
researchView: {
title: 'Исследования',
researchCost: 'Стоимость исследования',
research: 'Исследовать',
researchFailed: 'Исследование не удалось',
researchFailedMessage:
'Пожалуйста, проверьте, достаточно ли у вас ресурсов, выполнены ли предварительные условия или нет других исследовательских задач.'
},
shipyard: {
attack: 'Атака',
shield: 'Щит',
armor: 'Броня',
speed: 'Скорость',
cargoCapacity: 'Грузоподъёмность',
fuelConsumption: 'Расход топлива',
buildCost: 'Стоимость постройки',
buildTime: 'Время строительства',
perUnit: 'За единицу',
batchCalculator: 'Калькулятор партий',
quantity: 'Количество',
totalCost: 'Общая стоимость',
totalTime: 'Общее время'
},
shipyardView: {
title: 'Верфь',
attack: 'Атака',
shield: 'Щит',
speed: 'Скорость',
cargoCapacity: 'Грузоподъёмность',
unitCost: 'Стоимость единицы',
buildQuantity: 'Количество для постройки',
totalCost: 'Общая стоимость',
build: 'Построить',
inputError: 'Ошибка ввода',
inputErrorMessage: 'Пожалуйста, введите количество для постройки!',
buildFailed: 'Постройка не удалась',
buildFailedMessage: 'Пожалуйста, проверьте, достаточно ли у вас ресурсов или выполнены ли предварительные условия.'
},
defense: {
attack: 'Атака',
shield: 'Щит',
armor: 'Броня',
buildCost: 'Стоимость постройки',
buildTime: 'Время строительства',
perUnit: 'За единицу',
batchCalculator: 'Калькулятор партий',
quantity: 'Количество',
totalCost: 'Общая стоимость',
totalTime: 'Общее время'
},
defenseView: {
title: 'Оборона',
attack: 'Атака',
shield: 'Щит',
armor: 'Броня',
buildTime: 'Время постройки',
seconds: 'с',
unitCost: 'Стоимость единицы',
buildQuantity: 'Количество для постройки',
totalCost: 'Общая стоимость',
build: 'Построить',
shieldDomeBuilt: 'Щитовой купол уже построен',
inputError: 'Ошибка ввода',
inputErrorMessage: 'Пожалуйста, введите количество для постройки!',
buildFailed: 'Постройка не удалась',
buildFailedMessage:
'Пожалуйста, проверьте, достаточно ли у вас ресурсов или выполнены ли предварительные условия. Щитовые купола можно построить только один раз.'
},
fleetView: {
title: 'Управление флотом',
fleetOverview: 'Обзор флота',
sendFleet: 'Отправить флот',
flightMissions: 'Полетные миссии',
currentPlanetFleet: 'Флот на этой планете',
attack: 'Атака',
shield: 'Щит',
armor: 'Броня',
speed: 'Скорость',
cargo: 'Груз',
selectFleet: 'Выбрать флот',
selectFleetDescription: 'Выберите количество кораблей для отправки',
available: 'Доступно',
all: 'Все',
targetCoordinates: 'Целевые координаты',
galaxy: 'Галактика',
system: 'Система',
position: 'Позиция',
missionType: 'Тип миссии',
missionInfo: 'Информация о миссии',
fuelConsumption: 'Расход топлива',
flightTime: 'Время полета',
attackMission: 'Атака',
transport: 'Транспорт',
colonize: 'Колонизация',
spy: 'Разведка',
deploy: 'Размещение',
transportResources: 'Транспортировка ресурсов',
totalCargoCapacity: 'Общая грузоподъёмность',
used: 'Использовано',
noFlightMissions: 'Нет полетных миссий',
outbound: 'Туда',
returning: 'Возвращение',
fleetComposition: 'Состав флота',
carryingResources: 'Перевозимые ресурсы',
arrivalTime: 'Время прибытия',
returnTime: 'Время возврата',
recallFleet: 'Отозвать флот',
sendFailed: 'Отправка не удалась',
sendFailedMessage: 'Пожалуйста, проверьте количество флота, наличие топлива или ограничения грузоподъёмности.',
recallFailed: 'Отзыв не удался',
recallFailedMessage: 'Эта миссия не может быть отозвана.',
unknownPlanet: 'Неизвестная планета',
fleetMissionSlots: 'Слоты миссий флота'
},
officersView: {
title: 'Офицеры',
activated: 'Активирован',
inactive: 'Неактивен',
activeStatus: 'Статус активации',
expirationTime: 'Время истечения',
remainingTime: 'Оставшееся время',
recruitCost: 'Стоимость найма',
days: 'дн.',
benefitsBonus: 'Бонусы',
resourceProduction: 'Производство ресурсов',
darkMatterProduction: 'Производство тёмной материи',
energyProduction: 'Производство энергии',
buildingSpeed: 'Скорость строительства',
researchSpeed: 'Скорость исследований',
fleetSpeed: 'Скорость флота',
fuelConsumption: 'Расход топлива',
defense: 'Защита',
storageCapacity: 'Вместимость хранилища',
buildQueue: 'Очередь строительства',
fleetSlots: 'Слоты флота',
hire: 'Нанять',
renew: 'Продлить',
dismiss: 'Уволить',
hireTitle: 'Нанять офицера',
hireMessage: 'Вы уверены, что хотите нанять {name}? Действует 7 дней.',
renewTitle: 'Продлить офицера',
renewMessage: 'Вы уверены, что хотите продлить {name} на 7 дней?',
dismissTitle: 'Уволить офицера',
dismissMessage: 'Вы уверены, что хотите уволить {name}? Средства не возвращаются.',
hireFailed: 'Найм не удался',
renewFailed: 'Продление не удалось',
insufficientResources: 'Недостаточно ресурсов!'
},
galaxyView: {
title: 'Галактика',
selectCoordinates: 'Выбрать координаты',
galaxy: 'Галактика',
selectGalaxy: 'Выбрать галактику',
system: 'Система',
selectSystem: 'Выбрать систему',
view: 'Показать',
myPlanet: 'Моя планета',
totalPositions: 'Всего 10 позиций планет',
mine: 'Моя',
hostile: 'Враждебная',
emptySlot: 'Пусто - можно колонизировать',
scout: 'Разведка',
attack: 'Атака',
colonize: 'Колонизация',
switch: 'Переключить',
scoutPlanetTitle: 'Разведать планету',
attackPlanetTitle: 'Атаковать планету',
colonizePlanetTitle: 'Колонизировать планету',
scoutPlanetMessage:
'Вы уверены, что хотите отправить шпионские зонды для разведки планеты [{coordinates}]?\n\nПерейдите на страницу флота, чтобы выбрать корабли и отправить.',
attackPlanetMessage:
'Вы уверены, что хотите атаковать планету [{coordinates}]?\n\nПерейдите на страницу флота, чтобы выбрать корабли и отправить.',
colonizePlanetMessage:
'Вы уверены, что хотите колонизировать позицию [{coordinates}]?\n\nПерейдите на страницу флота, чтобы отправить колонизационный корабль.'
},
messagesView: {
title: 'Сообщения',
battleReports: 'Отчёты о боях',
spyReports: 'Отчёты разведки',
noBattleReports: 'Нет отчётов о боях',
noSpyReports: 'Нет отчётов разведки',
battleReport: 'Отчёт о бое',
spyReport: 'Отчёт разведки',
victory: 'Победа',
defeat: 'Поражение',
draw: 'Ничья',
attackerFleet: 'Флот нападающего',
defenderFleet: 'Флот защитника',
defenderDefense: 'Оборона защитника',
attackerLosses: 'Потери нападающего',
defenderLosses: 'Потери защитника',
noLosses: 'Без потерь',
plunder: 'Добыча',
debrisField: 'Поле обломков',
resources: 'Ресурсы',
fleet: 'Флот',
defense: 'Оборона',
buildings: 'Здания'
},
simulatorView: {
title: 'Симулятор боя',
attacker: 'Нападающий',
defender: 'Защитник',
attackerConfig: 'Настройки нападающего',
attackerConfigDesc: 'Настроить флот и уровни технологий нападающего',
defenderConfig: 'Настройки защитника',
defenderConfigDesc: 'Настроить флот, оборону и уровни технологий защитника',
fleet: 'Флот',
defenseStructures: 'Оборонительные сооружения',
techLevels: 'Уровни технологий',
weapon: 'Оружие',
shield: 'Щит',
armor: 'Броня',
defenderResources: 'Ресурсы защитника (для расчёта добычи)',
startSimulation: 'Начать симуляцию',
reset: 'Сбросить',
battleResult: 'Результат боя',
attackerVictory: 'Победа нападающего',
defenderVictory: 'Победа защитника',
draw: 'Ничья',
afterRounds: 'После {rounds} раундов',
attackerLosses: 'Потери нападающего',
defenderLosses: 'Потери защитника',
noLosses: 'Без потерь',
attackerRemaining: 'Осталось у нападающего',
defenderRemaining: 'Осталось у защитника',
allDestroyed: 'Всё уничтожено',
plunderableResources: 'Доступная добыча',
debrisField: 'Поле обломков',
moonChance: 'Шанс появления луны',
showRoundDetails: 'Показать детали раундов',
hideRoundDetails: 'Скрыть детали раундов',
round: 'Раунд {round}',
attackerRemainingPower: 'Оставшаяся мощь нападающего',
defenderRemainingPower: 'Оставшаяся мощь защитника'
},
settings: {
dataManagement: 'Управление данными',
dataManagementDesc: 'Экспорт, импорт или очистка игровых данных',
exportData: 'Экспорт данных',
exportDataDesc: 'Экспортировать прогресс игры в JSON файл',
export: 'Экспорт',
exporting: 'Экспорт...',
exportSuccess: 'Экспорт успешен',
exportFailed: 'Экспорт не удался, попробуйте еще раз',
importData: 'Импорт данных',
importDataDesc: 'Восстановить прогресс игры из JSON файла',
selectFile: 'Выбрать файл',
importSuccess: 'Импорт успешен',
importConfirmTitle: 'Подтвердить импорт',
importConfirmMessage: 'Импорт перезапишет текущий прогресс игры. Это действие невозможно отменить. Продолжить?',
importFailed: 'Импорт не удался, проверьте формат файла',
clearData: 'Очистить данные',
clearDataDesc: 'Удалить все игровые данные и сбросить',
clear: 'Очистить',
clearConfirmTitle: 'Подтвердить очистку данных',
clearConfirmMessage: 'Все игровые данные будут удалены и игра начнется заново. Это действие невозможно отменить. Продолжить?',
gameSettings: 'Настройки игры',
gameSettingsDesc: 'Настроить параметры и предпочтения игры',
playerName: 'Имя игрока',
gameSpeed: 'Скорость игры',
gameSpeedDesc: 'Текущий множитель скорости игры',
about: 'О программе',
version: 'Версия',
buildDate: 'Дата сборки',
community: 'Сообщество',
github: 'Репозиторий GitHub',
qqGroup: 'Группа QQ'
}
}