supervisor-simulator/scripts/Core/LocalizationService.cs
wjsjwr b8fecd080f 已把模型层改成组合式结构并补齐 MVC/内容配置骨架:Unit/任务/运行时状态现在通过组件组合,GameManager 作为桥接层改为驱动 GameSession/Controller;同时新增学科/羁绊/装备/任务/肉鸽等定义结构,预留 i18n 与 Mod 内容加载接口。
- 组合式单位与数值基础重构:scripts/Models/UnitModel.cs, scripts/Models/UnitComponents.cs, scripts/Models/StudentModel.cs, scripts/Models/MentorModel.cs, scripts/Models/StaffModel.cs, scripts/Models/PropertyValue.cs, scripts/Models/StatusValue.cs
  - 任务与运行时状态骨架:scripts/Models/Task.cs, scripts/Models/TaskDefinitions.cs, scripts/Models/GameState.cs
  - 配置与规则定义骨架:scripts/Models/DefinitionSupport.cs, scripts/Models/DomainEnums.cs, scripts/Models/Modifiers.cs, scripts/Models/DisciplineDefinitions.cs, scripts/Models/SynergyDefinitions.cs, scripts/Models/ItemDefinitions.cs, scripts/Models/PaperDefinitions.cs, scripts/Models/RogueliteDefinitions.cs, scripts/Models/GameContentDatabase.cs, scripts/Models/CoreIds.cs
  - MVC/会话/系统/i18n/Mod 支撑:scripts/Core/GameSession.cs, scripts/Core/GameSystems.cs, scripts/Core/GameController.cs, scripts/Core/Mvc.cs, scripts/Core/LocalizationService.cs, scripts/Core/ContentRegistry.cs, scripts/Core/ModManifest.cs, scripts/Core/EventBus.cs
  - 主控流程衔接:scripts/GameManager.cs
2025-12-31 23:54:31 +08:00

47 lines
1.1 KiB
C#

using Godot;
using Models;
namespace Core;
/// <summary>
/// i18n 服务抽象
/// 设计说明:
/// 1) Model 只持有 LocalizedText(Key/Fallback),具体翻译交给服务层。
/// 2) 便于后续替换为自定义多语言系统或 Mod 词库。
/// 注意事项:
/// - TranslationServer 的翻译表应通过 Godot Editor 管理。
/// 未来扩展:
/// - 可加入“参数化翻译”和“运行时语言切换事件”。
/// </summary>
public interface ILocalizationService
{
string Translate(LocalizedText text);
string Translate(string key, string fallback = null);
}
public sealed class GodotLocalizationService : ILocalizationService
{
public string Translate(LocalizedText text)
{
if (text == null) return string.Empty;
return Translate(text.Key, text.Fallback);
}
public string Translate(string key, string fallback = null)
{
if (string.IsNullOrWhiteSpace(key))
{
return fallback ?? string.Empty;
}
var translated = TranslationServer.Translate(key);
if (translated == key && !string.IsNullOrWhiteSpace(fallback))
{
return fallback;
}
return translated;
}
}