using System.Collections.ObjectModel; using System.Linq; using TeamAAS.Localization; using Prism.Commands; namespace TeamAAS.ViewModels { /// /// 设置页 ViewModel - 语言设置部分 /// public partial class SettingViewModel { #region 语言设置 /// /// 可用语言列表 /// public ObservableCollection AvailableLanguages { get; } = new ObservableCollection(); private LanguageOption _selectedLanguage; /// /// 当前选中的语言 /// public LanguageOption SelectedLanguage { get => _selectedLanguage; set { if (SetProperty(ref _selectedLanguage, value) && value != null) { // 实时切换语言 GlobalLocalizationManager.Instance.CurrentLanguage = value.Code; // 保存到系统配置 App.SystemConfig.Language = value.Code; App.SaveSystemConfig(); } } } /// /// 刷新语言命令 /// public DelegateCommand RefreshLanguagesCommand { get; } /// /// 初始化语言设置 /// private void InitializeLanguageSettings() { LoadAvailableLanguages(); } /// /// 加载可用语言列表(动态获取) /// private void LoadAvailableLanguages() { AvailableLanguages.Clear(); // 从多语言管理器获取已加载的语言 var languages = GlobalLocalizationManager.Instance.AvailableLanguages; // 添加已加载的语言 foreach (var langCode in languages) { var displayName = GlobalLocalizationManager.Instance.GetLanguageName(langCode); AvailableLanguages.Add(new LanguageOption { Code = langCode, DisplayName = displayName }); } // 如果没有加载任何语言,至少添加中文 if (AvailableLanguages.Count == 0) { AvailableLanguages.Add(new LanguageOption { Code = "zh-CN", DisplayName = "简体中文" }); } // 设置当前选中的语言 var currentLang = GlobalLocalizationManager.Instance.CurrentLanguage; _selectedLanguage = AvailableLanguages.FirstOrDefault(l => l.Code == currentLang) ?? AvailableLanguages.FirstOrDefault(); RaisePropertyChanged(nameof(SelectedLanguage)); } /// /// 刷新语言列表(用于动态添加新语言后刷新) /// private void RefreshLanguages() { var localizationPath = PathHelper.ResolveLocalizationDir(); GlobalLocalizationManager.Instance.LoadLanguagePacks(localizationPath); LoadAvailableLanguages(); } #endregion } /// /// 语言选项 /// public class LanguageOption { /// /// 语言代码(如 "zh-CN", "en-US") /// public string Code { get; set; } /// /// 显示名称(如 "简体中文", "English") /// public string DisplayName { get; set; } public override string ToString() => DisplayName; } }