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

532
src/locales/ko.ts Normal file
View File

@@ -0,0 +1,532 @@
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 그룹'
}
}