using System; using System.Collections.Generic; using System.Linq; using Newtonsoft.Json; namespace TeamAAS.Localization { /// /// 语言资源包 - 支持使用原文(中文/英文等)作为查找 key /// public class LanguageResourcePack { /// /// 语言代码(如 "zh-CN", "en-US", "ja-JP") /// [JsonProperty("languageCode")] public string LanguageCode { get; set; } /// /// 语言显示名称(如 "简体中文", "English", "日本語") /// [JsonProperty("languageName")] public string LanguageName { get; set; } /// /// 版本号 /// [JsonProperty("version")] public string Version { get; set; } = "1.0.0"; /// /// 作者/维护者 /// [JsonProperty("author")] public string Author { get; set; } /// /// 翻译字典 - 使用原文作为 key /// 格式: { "原文": "译文" } /// 例如: { "相机设备": "Camera Device", "曝光时间(us)": "Exposure Time (us)" } /// [JsonProperty("translations")] public Dictionary Translations { get; set; } = new Dictionary(); /// /// 根据原文获取翻译 /// /// 原文(如"相机设备") /// 可选的上下文信息(用于调试和日志) /// 翻译后的文本,找不到则返回 null public string GetTranslationByOriginalText(string originalText, string context = null) { if (string.IsNullOrWhiteSpace(originalText)) return null; // 直接查找原文对应的翻译 if (Translations.TryGetValue(originalText, out var translation)) { return translation; } // 尝试去除空格后查找(处理可能的格式差异) var trimmedText = originalText.Trim(); if (trimmedText != originalText && Translations.TryGetValue(trimmedText, out translation)) { return translation; } // 找不到翻译 return null; } /// /// 批量添加翻译 /// public void AddTranslations(Dictionary translations) { if (translations == null) return; foreach (var kvp in translations) { Translations[kvp.Key] = kvp.Value; } } /// /// 添加单个翻译 /// public void AddTranslation(string originalText, string translatedText) { if (!string.IsNullOrWhiteSpace(originalText) && !string.IsNullOrWhiteSpace(translatedText)) { Translations[originalText] = translatedText; } } /// /// 获取所有原文列表 /// public List GetAllOriginalTexts() { return Translations.Keys.ToList(); } /// /// 获取翻译统计信息 /// public (int Total, int Translated) GetStatistics() { var total = Translations.Count; var translated = Translations.Count(kvp => !string.IsNullOrWhiteSpace(kvp.Value)); return (total, translated); } } }