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/de.ts Normal file
View File

@@ -0,0 +1,536 @@
export default {
common: {
confirm: 'Bestätigen',
cancel: 'Abbrechen',
delete: 'Löschen',
edit: 'Bearbeiten',
save: 'Speichern',
close: 'Schließen',
back: 'Zurück',
next: 'Weiter',
previous: 'Vorherige',
submit: 'Absenden',
reset: 'Zurücksetzen',
search: 'Suchen',
filter: 'Filtern',
loading: 'Laden...',
noData: 'Keine Daten',
error: 'Fehler',
success: 'Erfolg',
warning: 'Warnung',
info: 'Info',
resourceType: 'Ressourcentyp',
playerName: 'Kommandant',
timeHour: 'Std',
timeMinute: 'Min',
timeSecond: 'Sek',
featureLocked: 'Funktion gesperrt',
unlockRequired: 'Gebäude erforderlich',
requiredBuilding: 'Erforderliches Gebäude',
currentLevel: 'Aktuelles Level',
goToBuildings: 'Zu Gebäuden',
locked: 'Gesperrt',
viewRequirements: 'Anforderungen anzeigen',
requirementsNotMet: 'Anforderungen nicht erfüllt',
current: 'Aktuell'
},
errors: {
requirementsNotMet: 'Anforderungen nicht erfüllt',
insufficientResources: 'Unzureichende Ressourcen',
shieldDomeLimit: 'Schildkuppel-Limit erreicht',
fleetMissionsFull: 'Flottenmissionsplätze voll',
insufficientFleet: 'Unzureichende Flotte',
insufficientFuel: 'Unzureichender Treibstoff',
planetOnly: 'Dieses Gebäude kann nur auf Planeten gebaut werden',
moonOnly: 'Dieses Gebäude kann nur auf Monden gebaut werden',
buildQueueFull: 'Bauauftrag voll',
insufficientSpace: 'Unzureichender Platz',
buildingLevelZero: 'Gebäudelevel ist 0, kann nicht abgerissen werden',
researchQueueFull: 'Forschungsauftrag voll',
moonExists: 'Mond existiert bereits',
insufficientDebris: 'Unzureichendes Trümmerfeld'
},
nav: {
overview: 'Übersicht',
buildings: 'Gebäude',
research: 'Forschung',
shipyard: 'Raumschiffwerft',
defense: 'Verteidigung',
fleet: 'Flotte',
officers: 'Offiziere',
simulator: 'Simulator',
galaxy: 'Galaxie',
messages: 'Nachrichten',
settings: 'Einstellungen'
},
sidebar: {
language: 'Sprache',
lightMode: 'Heller Modus',
darkMode: 'Dunkler Modus',
collapse: 'Einklappen',
expand: 'Ausklappen'
},
resources: {
metal: 'Metall',
crystal: 'Kristall',
deuterium: 'Deuterium',
darkMatter: 'Dunkle Materie',
energy: 'Energie',
production: 'Produktion',
capacity: 'Kapazität',
current: 'Aktuell',
max: 'Max. Kapazität',
perHour: 'Stunde'
},
planet: {
planet: 'Planet',
moon: 'Mond',
colony: 'Kolonie',
position: 'Position',
coordinates: 'Koordinaten',
switchToMoon: 'Zum Mond',
backToPlanet: 'Zurück zum Planeten',
fields: 'Felder',
temperature: 'Temperatur',
homePlanet: 'Heimatplanet',
planetPrefix: 'Planet',
moonSuffix: 's Mond',
colonyPrefix: 'Kolonie'
},
player: {
points: 'Gesamtpunkte'
},
buildings: {
metalMine: 'Metallmine',
crystalMine: 'Kristallmine',
deuteriumSynthesizer: 'Deuterium-Synthesizer',
solarPlant: 'Solarkraftwerk',
roboticsFactory: 'Roboterfabrik',
naniteFactory: 'Nanitenfabrik',
shipyard: 'Raumschiffwerft',
researchLab: 'Forschungslabor',
metalStorage: 'Metallspeicher',
crystalStorage: 'Kristallspeicher',
deuteriumTank: 'Deuteriumtank',
darkMatterCollector: 'Dunkle-Materie-Kollektor',
lunarBase: 'Mondbasis',
sensorPhalanx: 'Sensorphalanx',
jumpGate: 'Sprungtor',
buildTime: 'Bauzeit',
production: 'Produktion',
consumption: 'Verbrauch',
totalCost: 'Gesamtkosten',
totalPoints: 'Gesamtpunkte',
levelRange: 'Stufenbereich'
},
buildingDescriptions: {
metalMine: 'Fördert Metallressourcen',
crystalMine: 'Fördert Kristallressourcen',
deuteriumSynthesizer: 'Synthesiert Deuteriumressourcen',
solarPlant: 'Liefert Energie',
roboticsFactory: 'Beschleunigt Baugeschwindigkeit',
naniteFactory: 'Erhöht Bauauftragskapazität, +1 pro Stufe (max 10)',
shipyard: 'Baut Schiffe',
researchLab: 'Erforscht Technologien',
metalStorage: 'Erhöht Metallspeicherkapazität',
crystalStorage: 'Erhöht Kristallspeicherkapazität',
deuteriumTank: 'Erhöht Deuteriumspeicherkapazität',
darkMatterCollector: 'Sammelt seltene Dunkle-Materie-Ressourcen',
lunarBase: 'Erhöht verfügbaren Platz auf dem Mond',
sensorPhalanx: 'Erkennt Flottenaktivitäten in umliegenden Systemen',
jumpGate: 'Überträgt Flotten sofort zu anderen Monden'
},
ships: {
lightFighter: 'Leichter Jäger',
heavyFighter: 'Schwerer Jäger',
cruiser: 'Kreuzer',
battleship: 'Schlachtschiff',
smallCargo: 'Kleiner Transporter',
largeCargo: 'Großer Transporter',
colonyShip: 'Kolonieschiff',
recycler: 'Recycler',
espionageProbe: 'Spionagesonde',
darkMatterHarvester: 'Dunkle-Materie-Ernter'
},
shipDescriptions: {
lightFighter: 'Grundlegende Kampfeinheit',
heavyFighter: 'Schwer gepanzerter Jäger',
cruiser: 'Mittleres Kriegsschiff, ausgewogene Offensive und Defensive',
battleship: 'Mächtiges Kriegsschiff',
smallCargo: 'Transportiert kleine Mengen Ressourcen',
largeCargo: 'Transportiert große Mengen Ressourcen',
colonyShip: 'Zur Kolonisierung neuer Planeten',
recycler: 'Sammelt Trümmerfeld-Ressourcen',
espionageProbe: 'Späht feindliche Planeten aus',
darkMatterHarvester: 'Spezielles Schiff zum Ernten von Dunkler Materie'
},
defenses: {
rocketLauncher: 'Raketenwerfer',
lightLaser: 'Leichtes Lasergeschütz',
heavyLaser: 'Schweres Lasergeschütz',
gaussCannon: 'Gaußkanone',
ionCannon: 'Ionengeschütz',
plasmaTurret: 'Plasmawerfer',
smallShieldDome: 'Kleine Schildkuppel',
largeShieldDome: 'Große Schildkuppel'
},
defenseDescriptions: {
rocketLauncher: 'Grundlegende Verteidigungsanlage',
lightLaser: 'Leichte Energiewaffe',
heavyLaser: 'Schwere Energiewaffe',
gaussCannon: 'Hochgeschwindigkeits-Kinetikwaffe',
ionCannon: 'Effektiv gegen Schilde',
plasmaTurret: 'Mächtige Verteidigungsanlage',
smallShieldDome: 'Kleiner Schild zum Schutz des gesamten Planeten',
largeShieldDome: 'Großer Schild zum Schutz des gesamten Planeten'
},
research: {
researchTime: 'Forschungszeit',
totalCost: 'Gesamtkosten',
totalPoints: 'Gesamtpunkte',
levelRange: 'Stufenbereich'
},
technologies: {
energyTechnology: 'Energietechnik',
laserTechnology: 'Lasertechnik',
ionTechnology: 'Ionentechnik',
hyperspaceTechnology: 'Hyperraumtechnik',
plasmaTechnology: 'Plasmatechnik',
computerTechnology: 'Computertechnologie',
combustionDrive: 'Verbrennungsantrieb',
impulseDrive: 'Impulsantrieb',
hyperspaceDrive: 'Hyperraumantrieb',
darkMatterTechnology: 'Dunkle-Materie-Technologie'
},
technologyDescriptions: {
energyTechnology: 'Verbessert Energieeffizienz',
laserTechnology: 'Grundlage für Laserwaffen und -verteidigung',
ionTechnology: 'Ionenwaffentechnologie',
hyperspaceTechnology: 'Hyperraumsprung-Technologie',
plasmaTechnology: 'Plasmawaffentechnologie',
computerTechnology: 'Erhöht Forschungsauftragskapazität, +1 pro Stufe (max 10)',
combustionDrive: 'Grundlegende Antriebstechnologie',
impulseDrive: 'Mittlere Antriebstechnologie',
hyperspaceDrive: 'Fortgeschrittene Antriebstechnologie',
darkMatterTechnology: 'Forschung zu Eigenschaften und Anwendungen von Dunkler Materie'
},
officers: {
commander: 'Kommandant',
admiral: 'Admiral',
engineer: 'Ingenieur',
geologist: 'Geologe',
technocrat: 'Technokrat',
darkMatterSpecialist: 'Dunkle-Materie-Spezialist'
},
officerDescriptions: {
commander: 'Verbessert Baugeschwindigkeit und Management',
admiral: 'Verbessert Flottenkampf und Geschwindigkeit',
engineer: 'Verbessert Energie und Verteidigung',
geologist: 'Verbessert Ressourcenproduktion',
technocrat: 'Verbessert Forschungsgeschwindigkeit und Spionage',
darkMatterSpecialist: 'Verbessert Dunkle-Materie-Sammlungseffizienz'
},
queue: {
buildQueue: 'Bauauftrag',
researchQueue: 'Forschungsauftrag',
building: 'Im Bau',
researching: 'In Forschung',
remaining: 'Verbleibend',
cancel: 'Abbrechen',
cancelBuild: 'Bau abbrechen',
cancelResearch: 'Forschung abbrechen',
confirmCancel: 'Möchten Sie wirklich abbrechen? 50% der Ressourcen werden zurückerstattet.',
level: 'Stufe',
upgradeToLevel: 'Auf Stufe aufrüsten'
},
overview: {
title: 'Planetenübersicht',
resourceOverview: 'Ressourcen',
fleetInfo: 'Flotte',
currentShips: 'Schiffe auf diesem Planeten'
},
buildingsView: {
title: 'Gebäude',
usedSpace: 'Verwendeter Platz',
spaceUsage: 'Platzbedarf',
level: 'Stufe',
upgradeCost: 'Ausbaukosten',
buildTime: 'Bauzeit',
upgrade: 'Ausbauen',
upgradeFailed: 'Ausbau fehlgeschlagen',
upgradeFailedMessage: 'Bitte überprüfen Sie, ob Sie genügend Ressourcen, Platz oder keine anderen Bauaufträge haben.',
demolish: 'Abreißen',
demolishRefund: 'Abriss-Rückerstattung',
demolishFailed: 'Abriss fehlgeschlagen',
demolishFailedMessage: 'Abriss nicht möglich. Bitte überprüfen Sie, ob die Bauqueue voll ist oder die Gebäudestufe 0 ist.'
},
researchView: {
title: 'Forschung',
researchCost: 'Forschungskosten',
research: 'Forschen',
researchFailed: 'Forschung fehlgeschlagen',
researchFailedMessage:
'Bitte überprüfen Sie, ob Sie genügend Ressourcen haben, die Voraussetzungen erfüllt sind oder keine anderen Forschungsaufträge vorhanden sind.'
},
shipyard: {
attack: 'Angriff',
shield: 'Schild',
armor: 'Panzerung',
speed: 'Geschwindigkeit',
cargoCapacity: 'Ladekapazität',
fuelConsumption: 'Treibstoffverbrauch',
buildCost: 'Baukosten',
buildTime: 'Bauzeit',
perUnit: 'Pro Einheit',
batchCalculator: 'Batch-Rechner',
quantity: 'Menge',
totalCost: 'Gesamtkosten',
totalTime: 'Gesamtzeit'
},
shipyardView: {
title: 'Raumschiffwerft',
attack: 'Angriff',
shield: 'Schild',
speed: 'Geschwindigkeit',
cargoCapacity: 'Ladekapazität',
unitCost: 'Stückkosten',
buildQuantity: 'Baumenge',
totalCost: 'Gesamtkosten',
build: 'Bauen',
inputError: 'Eingabefehler',
inputErrorMessage: 'Bitte Baumenge eingeben!',
buildFailed: 'Bau fehlgeschlagen',
buildFailedMessage: 'Bitte überprüfen Sie, ob Sie genügend Ressourcen haben oder die Voraussetzungen erfüllt sind.'
},
defense: {
attack: 'Angriff',
shield: 'Schild',
armor: 'Panzerung',
buildCost: 'Baukosten',
buildTime: 'Bauzeit',
perUnit: 'Pro Einheit',
batchCalculator: 'Batch-Rechner',
quantity: 'Menge',
totalCost: 'Gesamtkosten',
totalTime: 'Gesamtzeit'
},
defenseView: {
title: 'Verteidigung',
attack: 'Angriff',
shield: 'Schild',
armor: 'Panzerung',
buildTime: 'Bauzeit',
seconds: 's',
unitCost: 'Stückkosten',
buildQuantity: 'Baumenge',
totalCost: 'Gesamtkosten',
build: 'Bauen',
shieldDomeBuilt: 'Schildkuppel bereits gebaut',
inputError: 'Eingabefehler',
inputErrorMessage: 'Bitte Baumenge eingeben!',
buildFailed: 'Bau fehlgeschlagen',
buildFailedMessage:
'Bitte überprüfen Sie, ob Sie genügend Ressourcen haben oder die Voraussetzungen erfüllt sind. Schildkuppeln können nur einmal gebaut werden.'
},
fleetView: {
title: 'Flottenverwaltung',
fleetOverview: 'Flottenübersicht',
sendFleet: 'Flotte senden',
flightMissions: 'Flugmissionen',
currentPlanetFleet: 'Flotte auf diesem Planeten',
attack: 'Angriff',
shield: 'Schild',
armor: 'Panzerung',
speed: 'Geschwindigkeit',
cargo: 'Fracht',
selectFleet: 'Flotte auswählen',
selectFleetDescription: 'Wählen Sie die Anzahl der zu sendenden Schiffe',
available: 'Verfügbar',
all: 'Alle',
targetCoordinates: 'Zielkoordinaten',
galaxy: 'Galaxie',
system: 'System',
position: 'Position',
missionType: 'Missionstyp',
missionInfo: 'Missionsinfo',
fuelConsumption: 'Treibstoffverbrauch',
flightTime: 'Flugzeit',
attackMission: 'Angriff',
transport: 'Transport',
colonize: 'Kolonisieren',
spy: 'Spionage',
deploy: 'Stationieren',
transportResources: 'Ressourcen transportieren',
totalCargoCapacity: 'Gesamtladekapazität',
used: 'Verwendet',
noFlightMissions: 'Keine Flugmissionen',
outbound: 'Hinflug',
returning: 'Rückflug',
fleetComposition: 'Flottenzusammensetzung',
carryingResources: 'Transportierte Ressourcen',
arrivalTime: 'Ankunftszeit',
returnTime: 'Rückkehrzeit',
recallFleet: 'Flotte zurückrufen',
sendFailed: 'Senden fehlgeschlagen',
sendFailedMessage: 'Bitte überprüfen Sie Flottenanzahl, Treibstoffverfügbarkeit oder Ladekapazitätsgrenzen.',
recallFailed: 'Zurückrufen fehlgeschlagen',
recallFailedMessage: 'Diese Mission kann nicht zurückgerufen werden.',
unknownPlanet: 'Unbekannter Planet',
fleetMissionSlots: 'Flottenmissionsplätze'
},
officersView: {
title: 'Offiziere',
activated: 'Aktiviert',
inactive: 'Inaktiv',
activeStatus: 'Aktivierungsstatus',
expirationTime: 'Ablaufzeit',
remainingTime: 'Verbleibende Zeit',
recruitCost: 'Rekrutierungskosten',
days: 'Tage',
benefitsBonus: 'Vorteile',
resourceProduction: 'Ressourcenproduktion',
darkMatterProduction: 'Dunkle-Materie-Produktion',
energyProduction: 'Energieproduktion',
buildingSpeed: 'Baugeschwindigkeit',
researchSpeed: 'Forschungsgeschwindigkeit',
fleetSpeed: 'Flottengeschwindigkeit',
fuelConsumption: 'Treibstoffverbrauch',
defense: 'Verteidigung',
storageCapacity: 'Lagerkapazität',
buildQueue: 'Bauauftrag',
fleetSlots: 'Flottenslots',
hire: 'Rekrutieren',
renew: 'Verlängern',
dismiss: 'Entlassen',
hireTitle: 'Offizier rekrutieren',
hireMessage: 'Möchten Sie wirklich {name} rekrutieren? Gültig für 7 Tage.',
renewTitle: 'Offizier verlängern',
renewMessage: 'Möchten Sie wirklich {name} für 7 Tage verlängern?',
dismissTitle: 'Offizier entlassen',
dismissMessage: 'Möchten Sie wirklich {name} entlassen? Es werden keine Kosten zurückerstattet.',
hireFailed: 'Rekrutierung fehlgeschlagen',
renewFailed: 'Verlängerung fehlgeschlagen',
insufficientResources: 'Nicht genug Ressourcen!'
},
galaxyView: {
title: 'Galaxie',
selectCoordinates: 'Koordinaten auswählen',
galaxy: 'Galaxie',
selectGalaxy: 'Galaxie auswählen',
system: 'System',
selectSystem: 'System auswählen',
view: 'Anzeigen',
myPlanet: 'Mein Planet',
totalPositions: 'Insgesamt 10 Planetenpositionen',
mine: 'Mein',
hostile: 'Feindlich',
emptySlot: 'Leer - Kolonisierbar',
scout: 'Spähen',
attack: 'Angriff',
colonize: 'Kolonisieren',
switch: 'Wechseln',
scoutPlanetTitle: 'Planet ausspionieren',
attackPlanetTitle: 'Planet angreifen',
colonizePlanetTitle: 'Planet kolonisieren',
scoutPlanetMessage:
'Möchten Sie wirklich Spionagesonden senden, um Planet [{coordinates}] auszuspionieren?\n\nBitte gehen Sie zur Flottenseite, um Schiffe auszuwählen und zu senden.',
attackPlanetMessage:
'Möchten Sie wirklich Planet [{coordinates}] angreifen?\n\nBitte gehen Sie zur Flottenseite, um Schiffe auszuwählen und zu senden.',
colonizePlanetMessage:
'Möchten Sie wirklich Position [{coordinates}] kolonisieren?\n\nBitte gehen Sie zur Flottenseite, um ein Kolonieschiff zu senden.'
},
messagesView: {
title: 'Nachrichten',
battleReports: 'Kampfberichte',
spyReports: 'Spionageberichte',
noBattleReports: 'Keine Kampfberichte',
noSpyReports: 'Keine Spionageberichte',
battleReport: 'Kampfbericht',
spyReport: 'Spionagebericht',
victory: 'Sieg',
defeat: 'Niederlage',
draw: 'Unentschieden',
attackerFleet: 'Angreiferflotte',
defenderFleet: 'Verteidigerflotte',
defenderDefense: 'Verteidigerverteidigung',
attackerLosses: 'Angreiferverluste',
defenderLosses: 'Verteidigerverluste',
noLosses: 'Keine Verluste',
plunder: 'Beute',
debrisField: 'Trümmerfeld',
resources: 'Ressourcen',
fleet: 'Flotte',
defense: 'Verteidigung',
buildings: 'Gebäude'
},
simulatorView: {
title: 'Kampfsimulator',
attacker: 'Angreifer',
defender: 'Verteidiger',
attackerConfig: 'Angreiferkonfiguration',
attackerConfigDesc: 'Angreiferflotte und Technologiestufen konfigurieren',
defenderConfig: 'Verteidigerkonfiguration',
defenderConfigDesc: 'Verteidigerflotte, Verteidigung und Technologiestufen konfigurieren',
fleet: 'Flotte',
defenseStructures: 'Verteidigungsanlagen',
techLevels: 'Technologiestufen',
weapon: 'Waffe',
shield: 'Schild',
armor: 'Panzerung',
defenderResources: 'Verteidigerressourcen (für Beuteberechnung)',
startSimulation: 'Simulation starten',
reset: 'Zurücksetzen',
battleResult: 'Kampfergebnis',
attackerVictory: 'Angreifer Sieg',
defenderVictory: 'Verteidiger Sieg',
draw: 'Unentschieden',
afterRounds: 'Nach {rounds} Runden',
attackerLosses: 'Angreiferverluste',
defenderLosses: 'Verteidigerverluste',
noLosses: 'Keine Verluste',
attackerRemaining: 'Angreifer verblieben',
defenderRemaining: 'Verteidiger verblieben',
allDestroyed: 'Alle zerstört',
plunderableResources: 'Erbeutbare Ressourcen',
debrisField: 'Trümmerfeld',
moonChance: 'Mondchance',
showRoundDetails: 'Rundendetails anzeigen',
hideRoundDetails: 'Rundendetails ausblenden',
round: 'Runde {round}',
attackerRemainingPower: 'Verbleibende Angreiferkraft',
defenderRemainingPower: 'Verbleibende Verteidigerkraft'
},
settings: {
dataManagement: 'Datenverwaltung',
dataManagementDesc: 'Spieldaten exportieren, importieren oder löschen',
exportData: 'Daten exportieren',
exportDataDesc: 'Spielfortschritt als JSON-Datei exportieren',
export: 'Exportieren',
exporting: 'Exportieren...',
exportSuccess: 'Export erfolgreich',
exportFailed: 'Export fehlgeschlagen, bitte erneut versuchen',
importData: 'Daten importieren',
importDataDesc: 'Spielfortschritt aus JSON-Datei wiederherstellen',
selectFile: 'Datei auswählen',
importSuccess: 'Import erfolgreich',
importConfirmTitle: 'Import bestätigen',
importConfirmMessage: 'Beim Importieren wird der aktuelle Spielfortschritt überschrieben. Diese Aktion kann nicht rückgängig gemacht werden. Fortfahren?',
importFailed: 'Import fehlgeschlagen, bitte Dateiformat überprüfen',
clearData: 'Daten löschen',
clearDataDesc: 'Alle Spieldaten löschen und zurücksetzen',
clear: 'Löschen',
clearConfirmTitle: 'Löschen bestätigen',
clearConfirmMessage: 'Alle Spieldaten werden gelöscht und von vorne begonnen. Diese Aktion kann nicht rückgängig gemacht werden. Fortfahren?',
gameSettings: 'Spieleinstellungen',
gameSettingsDesc: 'Spielparameter und Einstellungen anpassen',
playerName: 'Spielername',
gameSpeed: 'Spielgeschwindigkeit',
gameSpeedDesc: 'Aktueller Spielgeschwindigkeitsmultiplikator',
about: 'Über',
version: 'Version',
buildDate: 'Build-Datum',
community: 'Community',
github: 'GitHub-Repository',
qqGroup: 'QQ-Gruppe'
}
}