| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- using System.Collections.ObjectModel;
- using System.Linq;
- using TeamAAS.Localization;
- using Prism.Commands;
- namespace TeamAAS.ViewModels
- {
- /// <summary>
- /// 设置页 ViewModel - 语言设置部分
- /// </summary>
- public partial class SettingViewModel
- {
- #region 语言设置
- /// <summary>
- /// 可用语言列表
- /// </summary>
- public ObservableCollection<LanguageOption> AvailableLanguages { get; } = new ObservableCollection<LanguageOption>();
- private LanguageOption _selectedLanguage;
- /// <summary>
- /// 当前选中的语言
- /// </summary>
- 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();
- }
- }
- }
- /// <summary>
- /// 刷新语言命令
- /// </summary>
- public DelegateCommand RefreshLanguagesCommand { get; }
- /// <summary>
- /// 初始化语言设置
- /// </summary>
- private void InitializeLanguageSettings()
- {
- LoadAvailableLanguages();
- }
- /// <summary>
- /// 加载可用语言列表(动态获取)
- /// </summary>
- 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));
- }
- /// <summary>
- /// 刷新语言列表(用于动态添加新语言后刷新)
- /// </summary>
- private void RefreshLanguages()
- {
- var localizationPath = PathHelper.ResolveLocalizationDir();
- GlobalLocalizationManager.Instance.LoadLanguagePacks(localizationPath);
- LoadAvailableLanguages();
- }
- #endregion
- }
- /// <summary>
- /// 语言选项
- /// </summary>
- public class LanguageOption
- {
- /// <summary>
- /// 语言代码(如 "zh-CN", "en-US")
- /// </summary>
- public string Code { get; set; }
- /// <summary>
- /// 显示名称(如 "简体中文", "English")
- /// </summary>
- public string DisplayName { get; set; }
- public override string ToString() => DisplayName;
- }
- }
|