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);
}
}
}