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