Skip to content

Commit f01c18e

Browse files
committed
fix(wpf): complete daemon i18n audit
1 parent 3e14ba7 commit f01c18e

13 files changed

Lines changed: 344 additions & 63 deletions

File tree

MCServerLauncher.WPF/InstanceConsole/View/Dialogs/EventRuleEditorDialog.xaml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -96,23 +96,23 @@
9696
<!-- AlwaysTrueRuleset Template -->
9797
<DataTemplate DataType="{x:Type local:AlwaysTrueRulesetWrapper}">
9898
<StackPanel>
99-
<TextBlock Text="总是为真" FontWeight="SemiBold" Margin="0,0,0,5" />
100-
<TextBlock Text="无论在什么情况下,该规则都会返回真。" Foreground="{DynamicResource TextFillColorSecondaryBrush}" TextWrapping="Wrap" />
99+
<TextBlock Text="{Binding [ConsoleCommand_EventTrigger_AlwaysTrueRuleset], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" FontWeight="SemiBold" Margin="0,0,0,5" />
100+
<TextBlock Text="{Binding [ConsoleCommand_EventTrigger_AlwaysTrueRulesetDescription], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" Foreground="{DynamicResource TextFillColorSecondaryBrush}" TextWrapping="Wrap" />
101101
</StackPanel>
102102
</DataTemplate>
103103

104104
<!-- AlwaysFalseRuleset Template -->
105105
<DataTemplate DataType="{x:Type local:AlwaysFalseRulesetWrapper}">
106106
<StackPanel>
107-
<TextBlock Text="总是为假" FontWeight="SemiBold" Margin="0,0,0,5" />
108-
<TextBlock Text="无论在什么情况下,该规则都会返回假。" Foreground="{DynamicResource TextFillColorSecondaryBrush}" TextWrapping="Wrap" />
107+
<TextBlock Text="{Binding [ConsoleCommand_EventTrigger_AlwaysFalseRuleset], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" FontWeight="SemiBold" Margin="0,0,0,5" />
108+
<TextBlock Text="{Binding [ConsoleCommand_EventTrigger_AlwaysFalseRulesetDescription], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" Foreground="{DynamicResource TextFillColorSecondaryBrush}" TextWrapping="Wrap" />
109109
</StackPanel>
110110
</DataTemplate>
111111

112112
<!-- InstanceStatusRuleset Template -->
113113
<DataTemplate DataType="{x:Type local:InstanceStatusRulesetWrapper}">
114114
<StackPanel>
115-
<TextBlock Text="实例状态" FontWeight="SemiBold" Margin="0,0,0,5" />
115+
<TextBlock Text="{Binding [ConsoleCommand_EventTrigger_InstanceStatus], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" FontWeight="SemiBold" Margin="0,0,0,5" />
116116
<ComboBox SelectedValue="{Binding TargetStatus}" SelectedValuePath="Tag" ui:ControlHelper.Header="{Binding [ConsoleCommand_EventTrigger_TargetStatus], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" Width="200">
117117
<ComboBoxItem Content="{Binding [Status_Running], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" Tag="Running" />
118118
<ComboBoxItem Content="{Binding [Status_Stopped], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" Tag="Stopped" />
@@ -204,15 +204,15 @@
204204
<Expander.Header>
205205
<Grid VerticalAlignment="Center" Margin="0,10,-10,10">
206206
<StackPanel Orientation="Horizontal">
207-
<TextBlock Text="规则集" FontWeight="SemiBold" VerticalAlignment="Center" Margin="0,0,10,0" />
208-
<TextBlock Text="满足以下条件时执行行动" VerticalAlignment="Center" Margin="0,0,10,0" Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
207+
<TextBlock Text="{Binding [ConsoleCommand_EventTrigger_Ruleset], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" FontWeight="SemiBold" VerticalAlignment="Center" Margin="0,0,10,0" />
208+
<TextBlock Text="{Binding [ConsoleCommand_EventTrigger_RulesetConditionHint], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" VerticalAlignment="Center" Margin="0,0,10,0" Foreground="{DynamicResource TextFillColorSecondaryBrush}" />
209209

210210
<ui:DropDownButton Content="{Binding [Add], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" Margin="20,0,0,0">
211211
<ui:DropDownButton.Flyout>
212212
<ui:MenuFlyout Placement="Bottom">
213-
<MenuItem Header="总是为真" Click="AddAlwaysTrueRuleset_Click" />
214-
<MenuItem Header="总是为假" Click="AddAlwaysFalseRuleset_Click" />
215-
<MenuItem Header="实例状态" Click="AddInstanceStatusRuleset_Click" />
213+
<MenuItem Header="{Binding [ConsoleCommand_EventTrigger_AlwaysTrueRuleset], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" Click="AddAlwaysTrueRuleset_Click" />
214+
<MenuItem Header="{Binding [ConsoleCommand_EventTrigger_AlwaysFalseRuleset], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" Click="AddAlwaysFalseRuleset_Click" />
215+
<MenuItem Header="{Binding [ConsoleCommand_EventTrigger_InstanceStatus], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" Click="AddInstanceStatusRuleset_Click" />
216216
</ui:MenuFlyout>
217217
</ui:DropDownButton.Flyout>
218218
</ui:DropDownButton>
@@ -247,10 +247,10 @@
247247
<Grid VerticalAlignment="Center" Margin="0,10,-10,10">
248248
<StackPanel Orientation="Horizontal">
249249
<TextBlock Text="{Binding [ConsoleCommand_EventTrigger_Event], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" FontWeight="SemiBold" VerticalAlignment="Center" Margin="0,0,10,0" />
250-
<TextBlock Text="执行方式" VerticalAlignment="Center" Margin="0,0,10,0" />
250+
<TextBlock Text="{Binding [ConsoleCommand_EventTrigger_ActionExecutionMode], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" VerticalAlignment="Center" Margin="0,0,10,0" />
251251
<ComboBox SelectedValue="{Binding Rule.ActionExecutionMode}" SelectedValuePath="Tag" Width="120">
252-
<ComboBoxItem Content="顺序" Tag="Sequential" />
253-
<ComboBoxItem Content="并行" Tag="Parallel" />
252+
<ComboBoxItem Content="{Binding [ConsoleCommand_EventTrigger_Sequential], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" Tag="Sequential" />
253+
<ComboBoxItem Content="{Binding [ConsoleCommand_EventTrigger_Parallel], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" Tag="Parallel" />
254254
</ComboBox>
255255

256256
<ui:DropDownButton Content="{Binding [Add], Source={x:Static i18n:Lang.Tr}, Mode=OneWay}" Margin="20,0,0,0">

MCServerLauncher.WPF/InstanceConsole/View/Dialogs/EventRuleEditorDialog.xaml.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Globalization;
77
using System;
88
using MCServerLauncher.Common.ProtoType.EventTrigger;
9+
using MCServerLauncher.WPF.Modules;
910

1011
namespace MCServerLauncher.WPF.InstanceConsole.View.Dialogs
1112
{
@@ -284,9 +285,11 @@ public object Convert(object value, Type targetType, object parameter, CultureIn
284285
{
285286
if (value is string mode)
286287
{
287-
return mode.Equals("Parallel", StringComparison.OrdinalIgnoreCase) ? "同时" : "然后";
288+
return mode.Equals("Parallel", StringComparison.OrdinalIgnoreCase)
289+
? Lang.Tr["ConsoleCommand_EventTrigger_ParallelSeparator"]
290+
: Lang.Tr["ConsoleCommand_EventTrigger_SequentialSeparator"];
288291
}
289-
return "然后";
292+
return Lang.Tr["ConsoleCommand_EventTrigger_SequentialSeparator"];
290293
}
291294

292295
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

MCServerLauncher.WPF/View/Components/DaemonManager/NewDaemonConnectionInput.xaml.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
using System;
2-
using System.Windows;
31
using System.Windows.Controls;
42

53
namespace MCServerLauncher.WPF.View.Components.DaemonManager
@@ -12,7 +10,6 @@ public partial class NewDaemonConnectionInput : UserControl
1210
public NewDaemonConnectionInput()
1311
{
1412
InitializeComponent();
15-
Console.WriteLine(wsEdit.Padding);
1613
}
1714
}
1815
}

MCServerLauncher.WPF/View/Components/Utils.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,10 @@ internal class Utils
2222
newDaemonConnectionInput.tokenEdit.Password = token;
2323
newDaemonConnectionInput.friendlyNameEdit.Text = name;
2424

25-
string title = isEditing ? "EditDaemon" : (isRetrying ? "ConnectDaemonFailedTip" : "ConnectDaemon");
26-
string primaryButtonText = isEditing ? "Save" : "Connect";
27-
2825
ContentDialog dialog = new()
2926
{
30-
Title = Lang.Tr[title],
31-
PrimaryButtonText = Lang.Tr[primaryButtonText],
27+
Title = isEditing ? Lang.Tr["EditDaemon"] : (isRetrying ? Lang.Tr["ConnectDaemonFailedTip"] : Lang.Tr["ConnectDaemon"]),
28+
PrimaryButtonText = isEditing ? Lang.Tr["Save"] : Lang.Tr["Connect"],
3229
SecondaryButtonText = Lang.Tr["Cancel"],
3330
DefaultButton = ContentDialogButton.Primary,
3431
FullSizeDesired = false,

MCServerLauncher.WPF/View/Pages/DaemonManagerPage.xaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,15 +124,15 @@
124124
<ui:DropDownButton.Flyout>
125125
<ui:MenuFlyout Placement="Bottom">
126126
<MenuItem Header="{Binding [Edit], Source={x:Static i18n:Lang.Tr}}"
127-
Command="{Binding DataContext.EditDaemonCommand, RelativeSource={RelativeSource AncestorType=ui:Page}}"
128-
CommandParameter="{Binding}">
127+
Tag="{Binding}"
128+
Click="EditDaemonMenuItem_Click">
129129
<MenuItem.Icon>
130130
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Edit}" FontSize="16" />
131131
</MenuItem.Icon>
132132
</MenuItem>
133133
<MenuItem Header="{Binding [Delete], Source={x:Static i18n:Lang.Tr}}"
134-
Command="{Binding DataContext.DeleteDaemonCommand, RelativeSource={RelativeSource AncestorType=ui:Page}}"
135-
CommandParameter="{Binding}">
134+
Tag="{Binding}"
135+
Click="DeleteDaemonMenuItem_Click">
136136
<MenuItem.Icon>
137137
<ui:FontIcon Icon="{x:Static ui:SegoeFluentIcons.Delete}" FontSize="16" />
138138
</MenuItem.Icon>

MCServerLauncher.WPF/View/Pages/DaemonManagerPage.xaml.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
using MCServerLauncher.WPF.ViewModels;
2+
using MCServerLauncher.WPF.ViewModels.Models;
23
using System;
4+
using System.Windows;
5+
using System.Windows.Controls;
36

47
namespace MCServerLauncher.WPF.View.Pages
58
{
@@ -61,5 +64,21 @@ private void StopAutoRefresh()
6164
{
6265
_refreshTimer?.Stop();
6366
}
67+
68+
private async void EditDaemonMenuItem_Click(object sender, RoutedEventArgs e)
69+
{
70+
if (sender is MenuItem { Tag: DaemonCardModel daemon })
71+
{
72+
await _viewModel.EditDaemonCommand.ExecuteAsync(daemon);
73+
}
74+
}
75+
76+
private async void DeleteDaemonMenuItem_Click(object sender, RoutedEventArgs e)
77+
{
78+
if (sender is MenuItem { Tag: DaemonCardModel daemon })
79+
{
80+
await _viewModel.DeleteDaemonCommand.ExecuteAsync(daemon);
81+
}
82+
}
6483
}
6584
}

MCServerLauncher.WPF/View/PreCreateInstanceProvider/PreCreateInstance.xaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,19 @@
3838
<ikw:SimpleStackPanel Spacing="10">
3939
<Button IsEnabled="False" x:Name="FastReverseProxyClient" Padding="20,13,0,13"
4040
Click="GoCreateNewInstance" HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"
41-
Content="{Binding [CreateUniversalFastReverseProxyClientInstance], Source={x:Static i18n:Lang.Tr}}" ToolTip="没做完呢,别急" />
41+
Content="{Binding [CreateUniversalFastReverseProxyClientInstance], Source={x:Static i18n:Lang.Tr}}" ToolTip="{Binding [FeatureNotReadyTip], Source={x:Static i18n:Lang.Tr}}" />
4242
<Button IsEnabled="False" x:Name="MEFrp" Padding="20,13,0,13"
4343
Click="GoCreateNewInstance" HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"
44-
Content="ME Frp" ToolTip="没做完呢,别急" />
44+
Content="ME Frp" ToolTip="{Binding [FeatureNotReadyTip], Source={x:Static i18n:Lang.Tr}}" />
4545
<Button IsEnabled="False" x:Name="LoCyanFrp" Padding="20,13,0,13"
4646
Click="GoCreateNewInstance" HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"
47-
Content="LoCyanFrp" ToolTip="没做完呢,别急" />
47+
Content="LoCyanFrp" ToolTip="{Binding [FeatureNotReadyTip], Source={x:Static i18n:Lang.Tr}}" />
4848
<Button IsEnabled="False" x:Name="OpenFrp" Padding="20,13,0,13"
4949
Click="GoCreateNewInstance" HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"
50-
Content="OpenFrp" ToolTip="没做完呢,别急" />
50+
Content="OpenFrp" ToolTip="{Binding [FeatureNotReadyTip], Source={x:Static i18n:Lang.Tr}}" />
5151
<Button IsEnabled="False" x:Name="MossFrp" Padding="20,13,0,13"
5252
Click="GoCreateNewInstance" HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"
53-
Content="MossFrp" ToolTip="没做完呢,别急" />
53+
Content="MossFrp" ToolTip="{Binding [FeatureNotReadyTip], Source={x:Static i18n:Lang.Tr}}" />
5454
</ikw:SimpleStackPanel>
5555
</Expander>
5656
<Button x:Name="TerrariaGameServer" Padding="20,13,0,13" Click="GoCreateNewInstance"
@@ -59,9 +59,9 @@
5959
HorizontalAlignment="Stretch" HorizontalContentAlignment="Left" Content="{Binding [CreateOtherExecutableInstance], Source={x:Static i18n:Lang.Tr}}" />
6060
<Button IsEnabled="False" x:Name="ImportInstance" Padding="20,13,0,13" Click="GoCreateNewInstance"
6161
HorizontalAlignment="Stretch" HorizontalContentAlignment="Left" Content="{Binding [ImportExistsInstance], Source={x:Static i18n:Lang.Tr}}"
62-
ToolTip="没做完呢,别急" />
62+
ToolTip="{Binding [FeatureNotReadyTip], Source={x:Static i18n:Lang.Tr}}" />
6363

6464
</ikw:SimpleStackPanel>
6565
</ui:ScrollViewerEx>
6666
</Grid>
67-
</UserControl>
67+
</UserControl>

MCServerLauncher.WPF/View/PreCreateInstanceProvider/PreCreateMinecraftInstance.xaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,20 @@
4545
HorizontalAlignment="Stretch" HorizontalContentAlignment="Left" Content="{Binding [CreateMinecraftBedrockInstance], Source={x:Static i18n:Lang.Tr}}" />
4646
<Button IsEnabled="False" x:Name="MinecraftGeyserStandalone" Padding="20,13,0,13"
4747
Click="GoCreateNewInstance" HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"
48-
Content="{Binding [CreateMinecraftGeyserStandaloneInstance], Source={x:Static i18n:Lang.Tr}}" ToolTip="没做完呢,别急" />
48+
Content="{Binding [CreateMinecraftGeyserStandaloneInstance], Source={x:Static i18n:Lang.Tr}}" ToolTip="{Binding [FeatureNotReadyTip], Source={x:Static i18n:Lang.Tr}}" />
4949
<Button IsEnabled="False" x:Name="MinecraftBungeeCord" Padding="20,13,0,13" Click="GoCreateNewInstance"
5050
HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"
51-
Content="{Binding [CreateMinecraftBungeeCordInstance], Source={x:Static i18n:Lang.Tr}}" ToolTip="没做完呢,别急" />
51+
Content="{Binding [CreateMinecraftBungeeCordInstance], Source={x:Static i18n:Lang.Tr}}" ToolTip="{Binding [FeatureNotReadyTip], Source={x:Static i18n:Lang.Tr}}" />
5252
<Button IsEnabled="False" x:Name="MinecraftWaterfall" Padding="20,13,0,13" Click="GoCreateNewInstance"
5353
HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"
54-
Content="{Binding [CreateMinecraftWaterfallInstance], Source={x:Static i18n:Lang.Tr}}" ToolTip="没做完呢,别急" />
54+
Content="{Binding [CreateMinecraftWaterfallInstance], Source={x:Static i18n:Lang.Tr}}" ToolTip="{Binding [FeatureNotReadyTip], Source={x:Static i18n:Lang.Tr}}" />
5555
<Button IsEnabled="False" x:Name="MinecraftVelocity" Padding="20,13,0,13" Click="GoCreateNewInstance"
5656
HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"
57-
Content="{Binding [CreateMinecraftVelocityInstance], Source={x:Static i18n:Lang.Tr}}" ToolTip="没做完呢,别急" />
57+
Content="{Binding [CreateMinecraftVelocityInstance], Source={x:Static i18n:Lang.Tr}}" ToolTip="{Binding [FeatureNotReadyTip], Source={x:Static i18n:Lang.Tr}}" />
5858
<Button IsEnabled="False" x:Name="MinecraftTravertine" Padding="20,13,0,13" Click="GoCreateNewInstance"
5959
HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"
60-
Content="{Binding [CreateMinecraftTravertineInstance], Source={x:Static i18n:Lang.Tr}}" ToolTip="没做完呢,别急" />
60+
Content="{Binding [CreateMinecraftTravertineInstance], Source={x:Static i18n:Lang.Tr}}" ToolTip="{Binding [FeatureNotReadyTip], Source={x:Static i18n:Lang.Tr}}" />
6161
</ikw:SimpleStackPanel>
6262
</ui:ScrollViewerEx>
6363
</Grid>
64-
</UserControl>
64+
</UserControl>

RULES.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ Start by declaring touched areas: `docs`, `agent-docs`, `frontend`, `backend`, `
66

77
## Global Rules
88

9-
- Use concise Conventional Commits: `type(scope): subject`.
9+
- Every AI programming task must have a plan under `docs/superpowers/plans`.
10+
- Agents must use `superpowers:writing-plans` before implementation.
11+
- Agents must execute implementation plans with `superpowers:subagent-driven-development` unless the user explicitly chooses a different mode.
12+
- Agents must write a changelog section in the plan before finishing.
13+
- Git commit messages must use concise Conventional Commits: `type(scope): subject`.
14+
- Commit message titles must not contain long explanations.
1015
- Do not revert user or teammate changes without explicit instruction.
1116
- Keep nullable reference types warning-clean in changed C# projects.
1217
- Prefer existing patterns, helpers, project boundaries, and naming.

0 commit comments

Comments
 (0)