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