SettingViewModel.Language.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. using System.Collections.ObjectModel;
  2. using System.Linq;
  3. using TeamAAS.Localization;
  4. using Prism.Commands;
  5. namespace TeamAAS.ViewModels
  6. {
  7. /// <summary>
  8. /// 设置页 ViewModel - 语言设置部分
  9. /// </summary>
  10. public partial class SettingViewModel
  11. {
  12. #region 语言设置
  13. /// <summary>
  14. /// 可用语言列表
  15. /// </summary>
  16. public ObservableCollection<LanguageOption> AvailableLanguages { get; } = new ObservableCollection<LanguageOption>();
  17. private LanguageOption _selectedLanguage;
  18. /// <summary>
  19. /// 当前选中的语言
  20. /// </summary>
  21. public LanguageOption SelectedLanguage
  22. {
  23. get => _selectedLanguage;
  24. set
  25. {
  26. if (SetProperty(ref _selectedLanguage, value) && value != null)
  27. {
  28. // 实时切换语言
  29. GlobalLocalizationManager.Instance.CurrentLanguage = value.Code;
  30. // 保存到系统配置
  31. App.SystemConfig.Language = value.Code;
  32. App.SaveSystemConfig();
  33. }
  34. }
  35. }
  36. /// <summary>
  37. /// 刷新语言命令
  38. /// </summary>
  39. public DelegateCommand RefreshLanguagesCommand { get; }
  40. /// <summary>
  41. /// 初始化语言设置
  42. /// </summary>
  43. private void InitializeLanguageSettings()
  44. {
  45. LoadAvailableLanguages();
  46. }
  47. /// <summary>
  48. /// 加载可用语言列表(动态获取)
  49. /// </summary>
  50. private void LoadAvailableLanguages()
  51. {
  52. AvailableLanguages.Clear();
  53. // 从多语言管理器获取已加载的语言
  54. var languages = GlobalLocalizationManager.Instance.AvailableLanguages;
  55. // 添加已加载的语言
  56. foreach (var langCode in languages)
  57. {
  58. var displayName = GlobalLocalizationManager.Instance.GetLanguageName(langCode);
  59. AvailableLanguages.Add(new LanguageOption
  60. {
  61. Code = langCode,
  62. DisplayName = displayName
  63. });
  64. }
  65. // 如果没有加载任何语言,至少添加中文
  66. if (AvailableLanguages.Count == 0)
  67. {
  68. AvailableLanguages.Add(new LanguageOption
  69. {
  70. Code = "zh-CN",
  71. DisplayName = "简体中文"
  72. });
  73. }
  74. // 设置当前选中的语言
  75. var currentLang = GlobalLocalizationManager.Instance.CurrentLanguage;
  76. _selectedLanguage = AvailableLanguages.FirstOrDefault(l => l.Code == currentLang)
  77. ?? AvailableLanguages.FirstOrDefault();
  78. RaisePropertyChanged(nameof(SelectedLanguage));
  79. }
  80. /// <summary>
  81. /// 刷新语言列表(用于动态添加新语言后刷新)
  82. /// </summary>
  83. private void RefreshLanguages()
  84. {
  85. var localizationPath = PathHelper.ResolveLocalizationDir();
  86. GlobalLocalizationManager.Instance.LoadLanguagePacks(localizationPath);
  87. LoadAvailableLanguages();
  88. }
  89. #endregion
  90. }
  91. /// <summary>
  92. /// 语言选项
  93. /// </summary>
  94. public class LanguageOption
  95. {
  96. /// <summary>
  97. /// 语言代码(如 "zh-CN", "en-US")
  98. /// </summary>
  99. public string Code { get; set; }
  100. /// <summary>
  101. /// 显示名称(如 "简体中文", "English")
  102. /// </summary>
  103. public string DisplayName { get; set; }
  104. public override string ToString() => DisplayName;
  105. }
  106. }