LanguageResourcePack.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Newtonsoft.Json;
  5. namespace TeamAAS.Localization
  6. {
  7. /// <summary>
  8. /// 语言资源包 - 支持使用原文(中文/英文等)作为查找 key
  9. /// </summary>
  10. public class LanguageResourcePack
  11. {
  12. /// <summary>
  13. /// 语言代码(如 "zh-CN", "en-US", "ja-JP")
  14. /// </summary>
  15. [JsonProperty("languageCode")]
  16. public string LanguageCode { get; set; }
  17. /// <summary>
  18. /// 语言显示名称(如 "简体中文", "English", "日本語")
  19. /// </summary>
  20. [JsonProperty("languageName")]
  21. public string LanguageName { get; set; }
  22. /// <summary>
  23. /// 版本号
  24. /// </summary>
  25. [JsonProperty("version")]
  26. public string Version { get; set; } = "1.0.0";
  27. /// <summary>
  28. /// 作者/维护者
  29. /// </summary>
  30. [JsonProperty("author")]
  31. public string Author { get; set; }
  32. /// <summary>
  33. /// 翻译字典 - 使用原文作为 key
  34. /// 格式: { "原文": "译文" }
  35. /// 例如: { "相机设备": "Camera Device", "曝光时间(us)": "Exposure Time (us)" }
  36. /// </summary>
  37. [JsonProperty("translations")]
  38. public Dictionary<string, string> Translations { get; set; } = new Dictionary<string, string>();
  39. /// <summary>
  40. /// 根据原文获取翻译
  41. /// </summary>
  42. /// <param name="originalText">原文(如"相机设备")</param>
  43. /// <param name="context">可选的上下文信息(用于调试和日志)</param>
  44. /// <returns>翻译后的文本,找不到则返回 null</returns>
  45. public string GetTranslationByOriginalText(string originalText, string context = null)
  46. {
  47. if (string.IsNullOrWhiteSpace(originalText))
  48. return null;
  49. // 直接查找原文对应的翻译
  50. if (Translations.TryGetValue(originalText, out var translation))
  51. {
  52. return translation;
  53. }
  54. // 尝试去除空格后查找(处理可能的格式差异)
  55. var trimmedText = originalText.Trim();
  56. if (trimmedText != originalText && Translations.TryGetValue(trimmedText, out translation))
  57. {
  58. return translation;
  59. }
  60. // 找不到翻译
  61. return null;
  62. }
  63. /// <summary>
  64. /// 批量添加翻译
  65. /// </summary>
  66. public void AddTranslations(Dictionary<string, string> translations)
  67. {
  68. if (translations == null)
  69. return;
  70. foreach (var kvp in translations)
  71. {
  72. Translations[kvp.Key] = kvp.Value;
  73. }
  74. }
  75. /// <summary>
  76. /// 添加单个翻译
  77. /// </summary>
  78. public void AddTranslation(string originalText, string translatedText)
  79. {
  80. if (!string.IsNullOrWhiteSpace(originalText) && !string.IsNullOrWhiteSpace(translatedText))
  81. {
  82. Translations[originalText] = translatedText;
  83. }
  84. }
  85. /// <summary>
  86. /// 获取所有原文列表
  87. /// </summary>
  88. public List<string> GetAllOriginalTexts()
  89. {
  90. return Translations.Keys.ToList();
  91. }
  92. /// <summary>
  93. /// 获取翻译统计信息
  94. /// </summary>
  95. public (int Total, int Translated) GetStatistics()
  96. {
  97. var total = Translations.Count;
  98. var translated = Translations.Count(kvp => !string.IsNullOrWhiteSpace(kvp.Value));
  99. return (total, translated);
  100. }
  101. }
  102. }