using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; using LocalizationTool.Models; namespace LocalizationTool.ViewModels { /// 单个语言的译文输入字段。 public class EntryField { public string LanguageCode { get; set; } public string Label { get; set; } public string Value { get; set; } } /// 新增词条窗口:中文 key + 各语言译文(可留空 = 缺译)。 public class AddEntryViewModel : ViewModelBase { private string _key; public string Key { get => _key; set { if (Set(ref _key, value)) OnPropertyChanged(nameof(CanConfirm)); } } /// 各目标语言译文输入字段。 public ObservableCollection Fields { get; } = new ObservableCollection(); public bool CanConfirm => !string.IsNullOrWhiteSpace(Key); public bool HasNoFields => Fields.Count == 0; /// 请求关闭窗口(true = 确认)。 public event Action RequestClose; public RelayCommand ConfirmCommand { get; } public RelayCommand CancelCommand { get; } /// 确认后按语言代码收集的译文(留空的语言不收录)。 public Dictionary CollectTranslations() => Fields.Where(f => !string.IsNullOrWhiteSpace(f.Value)) .ToDictionary(f => f.LanguageCode, f => f.Value.Trim()); public AddEntryViewModel(IEnumerable langs) { foreach (var lang in langs ?? Enumerable.Empty()) Fields.Add(new EntryField { LanguageCode = lang.LanguageCode, Label = $"{lang.LanguageName} ({lang.LanguageCode}) —— 可留空待翻译", }); ConfirmCommand = new RelayCommand(() => { if (!CanConfirm) { MessageBox.Show("请输入中文原文(key)。", "提示"); return; } RequestClose?.Invoke(true); }); CancelCommand = new RelayCommand(() => RequestClose?.Invoke(false)); } } }