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