新增 设置主要文化功能

This commit is contained in:
Hakoyu 2023-11-21 21:21:45 +08:00
parent 928d16b572
commit d10643b94f
4 changed files with 68 additions and 5 deletions

View File

@ -58,6 +58,11 @@ public class ModEditWindowVM
/// </summary>
public ObservableCommand<string> RemoveCultureCommand { get; } = new();
/// <summary>
/// 设置主要文化命令
/// </summary>
public ObservableCommand<string> SetMainCultureCommand { get; } = new();
/// <summary>
/// 保存命令
/// </summary>
@ -181,6 +186,43 @@ public class ModEditWindowVM
return;
I18nHelper.Current.CultureNames.Remove(oldCulture);
}
public void SetMainCulture(string culture)
{
if (
MessageBox.Show(
"!!!注意!!!\n此操作会将所有Id设为当前文化的翻译内容,仅适用于初次设置多文化的模组\n确定要继续吗?".Translate(),
"",
MessageBoxButton.YesNo
)
is not MessageBoxResult.Yes
)
return;
ModInfo.Value.I18nDatas[culture].Name.Value = ModInfo.Value.Id.Value;
ModInfo.Value.I18nDatas[culture].Description.Value = ModInfo.Value.DescriptionId.Value;
foreach (var food in ModInfo.Value.Foods)
{
food.I18nDatas[culture].Name.Value = food.Id.Value;
food.I18nDatas[culture].Description.Value = food.DescriptionId.Value;
}
foreach (var text in ModInfo.Value.LowTexts)
text.I18nDatas[culture].Text.Value = text.Id.Value;
foreach (var text in ModInfo.Value.ClickTexts)
text.I18nDatas[culture].Text.Value = text.Id.Value;
foreach (var text in ModInfo.Value.SelectTexts)
{
text.I18nDatas[culture].Text.Value = text.Id.Value;
text.I18nDatas[culture].Choose.Value = text.ChooseId.Value;
}
foreach (var pet in ModInfo.Value.Pets)
{
pet.I18nDatas[culture].Name.Value = pet.Id.Value;
pet.I18nDatas[culture].PetName.Value = pet.PetNameId.Value;
pet.I18nDatas[culture].Description.Value = pet.DescriptionId.Value;
foreach (var work in pet.Works)
work.I18nDatas[culture].Name.Value = work.Id.Value;
}
}
#endregion
#region Save

View File

@ -235,6 +235,7 @@ public class ModMakerWindowVM
public void LoadMod(string path)
{
ModLoader? loader = null;
var pendingHandler = PendingBox.Show("载入中".Translate());
try
{
loader = new ModLoader(new DirectoryInfo(path));
@ -242,13 +243,14 @@ public class ModMakerWindowVM
catch (Exception ex)
{
MessageBox.Show("模组载入失败:\n{0}".Translate(ex));
pendingHandler.Close();
}
if (loader is not null)
{
var pendingHandler = PendingBox.Show("载入中".Translate());
var modInfo = new ModInfoModel(loader);
EditMod(modInfo);
pendingHandler.Close();
ModEditWindow.InitializeData();
}
}
#endregion

View File

@ -289,6 +289,10 @@
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem
Command="{Binding PlacementTarget.Tag.SetMainCultureCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"
CommandParameter="{Binding}"
Header="{ll:Str 设为主要语言}" />
<MenuItem
Command="{Binding PlacementTarget.Tag.EditCultureCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"
CommandParameter="{Binding}"

View File

@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
@ -53,18 +54,32 @@ public partial class ModEditWindow : Window
DataContext = new ModEditWindowVM(this);
Closing += ModEditWindow_Closing;
Closed += ModEditWindow_Closed;
Loaded += ModEditWindow_Loaded;
}
private void ModEditWindow_Loaded(object sender, RoutedEventArgs e)
/// <summary>
/// 初始化数据
/// </summary>
public void InitializeData()
{
if (I18nHelper.Current.CultureNames.Count == 0)
{
if (
MessageBox.Show("未添加任何文化,确定要添加文化吗?".Translate(), "", MessageBoxButton.YesNo)
is MessageBoxResult.Yes
is not MessageBoxResult.Yes
)
ViewModel.AddCulture();
return;
ViewModel.AddCulture();
if (
I18nHelper.Current.CultureNames.Count == 0
|| MessageBox.Show(
"需要将文化 {0} 设为主要文化吗?".Translate(I18nHelper.Current.CultureNames.First()),
"",
MessageBoxButton.YesNo
)
is not MessageBoxResult.Yes
)
return;
ViewModel.SetMainCulture(I18nHelper.Current.CultureNames.First());
}
}