Files
ogame-vue-ts/src/composables/useGameConfig.ts
谦君 724a70bebb docs: 新增西班牙语和日语README并优化多语言文档
新增README-ES.md(西班牙语)和README-JA.md(日语)文档,完善多语言README互链。优化各语言README徽章、技术栈、外链格式及语言切换区,提升文档一致性与可读性。
2025-12-25 18:25:08 +08:00

199 lines
7.7 KiB
TypeScript

import { computed } from 'vue'
import { useI18n } from './useI18n'
import {
BUILDINGS as ORIGINAL_BUILDINGS,
SHIPS as ORIGINAL_SHIPS,
DEFENSES as ORIGINAL_DEFENSES,
TECHNOLOGIES as ORIGINAL_TECHNOLOGIES,
OFFICERS as ORIGINAL_OFFICERS
} from '@/config/gameConfig'
import { BuildingType, ShipType, DefenseType, TechnologyType, OfficerType } from '@/types/game'
import type { BuildingConfig, ShipConfig, DefenseConfig, TechnologyConfig, OfficerConfig } from '@/types/game'
/**
* 提供翻译后的游戏配置对象的 Composable
* 将 i18n 系统的翻译覆盖到原始 gameConfig 上
*/
export const useGameConfig = () => {
const { t } = useI18n()
// 建筑类型枚举值到翻译键的映射
const buildingKeyMap: Record<BuildingType, string> = {
[BuildingType.MetalMine]: 'metalMine',
[BuildingType.CrystalMine]: 'crystalMine',
[BuildingType.DeuteriumSynthesizer]: 'deuteriumSynthesizer',
[BuildingType.SolarPlant]: 'solarPlant',
[BuildingType.FusionReactor]: 'fusionReactor',
[BuildingType.RoboticsFactory]: 'roboticsFactory',
[BuildingType.NaniteFactory]: 'naniteFactory',
[BuildingType.Shipyard]: 'shipyard',
[BuildingType.Hangar]: 'hangar',
[BuildingType.ResearchLab]: 'researchLab',
[BuildingType.MetalStorage]: 'metalStorage',
[BuildingType.CrystalStorage]: 'crystalStorage',
[BuildingType.DeuteriumTank]: 'deuteriumTank',
[BuildingType.DarkMatterCollector]: 'darkMatterCollector',
[BuildingType.DarkMatterTank]: 'darkMatterTank',
[BuildingType.MissileSilo]: 'missileSilo',
[BuildingType.Terraformer]: 'terraformer',
[BuildingType.LunarBase]: 'lunarBase',
[BuildingType.SensorPhalanx]: 'sensorPhalanx',
[BuildingType.JumpGate]: 'jumpGate',
[BuildingType.PlanetDestroyerFactory]: 'planetDestroyerFactory',
[BuildingType.GeoResearchStation]: 'geoResearchStation',
[BuildingType.DeepDrillingFacility]: 'deepDrillingFacility'
}
// 舰船类型枚举值到翻译键的映射
const shipKeyMap: Record<ShipType, string> = {
[ShipType.LightFighter]: 'lightFighter',
[ShipType.HeavyFighter]: 'heavyFighter',
[ShipType.Cruiser]: 'cruiser',
[ShipType.Battleship]: 'battleship',
[ShipType.Battlecruiser]: 'battlecruiser',
[ShipType.Bomber]: 'bomber',
[ShipType.Destroyer]: 'destroyer',
[ShipType.SmallCargo]: 'smallCargo',
[ShipType.LargeCargo]: 'largeCargo',
[ShipType.ColonyShip]: 'colonyShip',
[ShipType.Recycler]: 'recycler',
[ShipType.EspionageProbe]: 'espionageProbe',
[ShipType.SolarSatellite]: 'solarSatellite',
[ShipType.DarkMatterHarvester]: 'darkMatterHarvester',
[ShipType.Deathstar]: 'deathstar'
}
// 防御设施类型枚举值到翻译键的映射
const defenseKeyMap: Record<DefenseType, string> = {
[DefenseType.RocketLauncher]: 'rocketLauncher',
[DefenseType.LightLaser]: 'lightLaser',
[DefenseType.HeavyLaser]: 'heavyLaser',
[DefenseType.GaussCannon]: 'gaussCannon',
[DefenseType.IonCannon]: 'ionCannon',
[DefenseType.PlasmaTurret]: 'plasmaTurret',
[DefenseType.SmallShieldDome]: 'smallShieldDome',
[DefenseType.LargeShieldDome]: 'largeShieldDome',
[DefenseType.AntiBallisticMissile]: 'antiBallisticMissile',
[DefenseType.InterplanetaryMissile]: 'interplanetaryMissile',
[DefenseType.PlanetaryShield]: 'planetaryShield'
}
// 科技类型枚举值到翻译键的映射
const technologyKeyMap: Record<TechnologyType, string> = {
[TechnologyType.EnergyTechnology]: 'energyTechnology',
[TechnologyType.LaserTechnology]: 'laserTechnology',
[TechnologyType.IonTechnology]: 'ionTechnology',
[TechnologyType.HyperspaceTechnology]: 'hyperspaceTechnology',
[TechnologyType.PlasmaTechnology]: 'plasmaTechnology',
[TechnologyType.ComputerTechnology]: 'computerTechnology',
[TechnologyType.EspionageTechnology]: 'espionageTechnology',
[TechnologyType.WeaponsTechnology]: 'weaponsTechnology',
[TechnologyType.ShieldingTechnology]: 'shieldingTechnology',
[TechnologyType.ArmourTechnology]: 'armourTechnology',
[TechnologyType.Astrophysics]: 'astrophysics',
[TechnologyType.GravitonTechnology]: 'gravitonTechnology',
[TechnologyType.CombustionDrive]: 'combustionDrive',
[TechnologyType.ImpulseDrive]: 'impulseDrive',
[TechnologyType.HyperspaceDrive]: 'hyperspaceDrive',
[TechnologyType.DarkMatterTechnology]: 'darkMatterTechnology',
[TechnologyType.TerraformingTechnology]: 'terraformingTechnology',
[TechnologyType.PlanetDestructionTech]: 'planetDestructionTech',
[TechnologyType.MiningTechnology]: 'miningTechnology'
}
// 军官类型枚举值到翻译键的映射
const officerKeyMap: Record<OfficerType, string> = {
[OfficerType.Commander]: 'commander',
[OfficerType.Admiral]: 'admiral',
[OfficerType.Engineer]: 'engineer',
[OfficerType.Geologist]: 'geologist',
[OfficerType.Technocrat]: 'technocrat',
[OfficerType.DarkMatterSpecialist]: 'darkMatterSpecialist'
}
// 翻译后的建筑配置
const BUILDINGS = computed(() => {
const translated: Record<BuildingType, BuildingConfig> = {} as Record<BuildingType, BuildingConfig>
for (const [key, config] of Object.entries(ORIGINAL_BUILDINGS)) {
const buildingType = key as BuildingType
const translationKey = buildingKeyMap[buildingType]
translated[buildingType] = {
...config,
name: t(`buildings.${translationKey}`),
description: t(`buildingDescriptions.${translationKey}`)
}
}
return translated
})
// 翻译后的舰船配置
const SHIPS = computed(() => {
const translated: Record<ShipType, ShipConfig> = {} as Record<ShipType, ShipConfig>
for (const [key, config] of Object.entries(ORIGINAL_SHIPS)) {
const shipType = key as ShipType
const translationKey = shipKeyMap[shipType]
translated[shipType] = {
...config,
name: t(`ships.${translationKey}`),
description: t(`shipDescriptions.${translationKey}`)
}
}
return translated
})
// 翻译后的防御设施配置
const DEFENSES = computed(() => {
const translated: Record<DefenseType, DefenseConfig> = {} as Record<DefenseType, DefenseConfig>
for (const [key, config] of Object.entries(ORIGINAL_DEFENSES)) {
const defenseType = key as DefenseType
const translationKey = defenseKeyMap[defenseType]
translated[defenseType] = {
...config,
name: t(`defenses.${translationKey}`),
description: t(`defenseDescriptions.${translationKey}`)
}
}
return translated
})
// 翻译后的科技配置
const TECHNOLOGIES = computed(() => {
const translated: Record<TechnologyType, TechnologyConfig> = {} as Record<TechnologyType, TechnologyConfig>
for (const [key, config] of Object.entries(ORIGINAL_TECHNOLOGIES)) {
const technologyType = key as TechnologyType
const translationKey = technologyKeyMap[technologyType]
translated[technologyType] = {
...config,
name: t(`technologies.${translationKey}`),
description: t(`technologyDescriptions.${translationKey}`)
}
}
return translated
})
// 翻译后的军官配置
const OFFICERS = computed(() => {
const translated: Record<OfficerType, OfficerConfig> = {} as Record<OfficerType, OfficerConfig>
for (const [key, config] of Object.entries(ORIGINAL_OFFICERS)) {
const officerType = key as OfficerType
const translationKey = officerKeyMap[officerType]
translated[officerType] = {
...config,
name: t(`officers.${translationKey}`),
description: t(`officerDescriptions.${translationKey}`)
}
}
return translated
})
return {
BUILDINGS,
SHIPS,
DEFENSES,
TECHNOLOGIES,
OFFICERS
}
}