MainWindow.xaml 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <hc:Window x:Class="LocalizationTool.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:hc="https://handyorg.github.io/handycontrol"
  5. Title="TeamAAS 多语言包管理工具" Height="720" Width="1180"
  6. WindowStartupLocation="CenterScreen">
  7. <Grid>
  8. <Grid.RowDefinitions>
  9. <RowDefinition Height="Auto"/>
  10. <RowDefinition Height="*"/>
  11. <RowDefinition Height="Auto"/>
  12. </Grid.RowDefinitions>
  13. <!-- ===== 顶部工具栏 ===== -->
  14. <Border Grid.Row="0" Background="#F5F6FA" Padding="12" BorderBrush="#E4E7EC" BorderThickness="0,0,0,1">
  15. <Grid>
  16. <Grid.ColumnDefinitions>
  17. <ColumnDefinition Width="*"/>
  18. <ColumnDefinition Width="320"/>
  19. </Grid.ColumnDefinitions>
  20. <!-- 左:目录 + 语言 + 翻译 -->
  21. <hc:Card Grid.Column="0" Margin="0,0,8,0" Padding="12" FontSize="14">
  22. <StackPanel>
  23. <DockPanel Margin="8">
  24. <Button DockPanel.Dock="Right" Content="浏览…" Width="auto" Margin="6,0,0,0"
  25. Style="{StaticResource ButtonDefault}" Click="BtnBrowse_Click" FontSize="14"/>
  26. <Button DockPanel.Dock="Right" Content="加载" Width="auto" Margin="6,0,0,0"
  27. FontSize="14" Style="{StaticResource ButtonPrimary}" Command="{Binding LoadCommand}"/>
  28. <TextBlock Text="语言包目录:" Width="auto" VerticalAlignment="Center" Foreground="#666"/>
  29. <TextBox Text="{Binding Dir, UpdateSourceTrigger=PropertyChanged}" Margin="6,0,0,0"
  30. Style="{StaticResource TextBoxExtend}" VerticalContentAlignment="Center"/>
  31. </DockPanel>
  32. <DockPanel Margin="8">
  33. <Button DockPanel.Dock="Right" Content="仅翻译缺译" Width="auto" Margin="6,0,0,0"
  34. Style="{StaticResource ButtonDefault}" Command="{Binding TranslateMissingCommand}"
  35. IsEnabled="{Binding TranslationEnabled}" FontSize="14"
  36. ToolTip="只翻译当前视图中空缺的译文,绝不覆盖已有翻译"/>
  37. <Button DockPanel.Dock="Right" Content="翻译全部" Width="auto" Margin="6,0,0,0"
  38. Style="{StaticResource ButtonDefault}" Command="{Binding TranslateAllCommand}"
  39. IsEnabled="{Binding TranslationEnabled}" FontSize="14"/>
  40. <Button DockPanel.Dock="Right" Content="翻译勾选" Width="auto" Margin="6,0,0,0"
  41. Style="{StaticResource ButtonPrimary}" Command="{Binding TranslateSelectedCommand}"
  42. IsEnabled="{Binding TranslationEnabled}" FontSize="14"/>
  43. <TextBlock Text="翻译目标:" Width="auto" VerticalAlignment="Center" Foreground="#666"/>
  44. <hc:CheckComboBox x:Name="CmbTargetLangs" DisplayMemberPath="Display"
  45. ItemsSource="{Binding LangOptions}" Margin="6,0,0,0"
  46. SelectionChanged="CmbTargetLangs_SelectionChanged"
  47. IsEnabled="{Binding TranslationEnabled}"
  48. ToolTip="勾选的语言 = 表格显示的列 + 翻译目标"/>
  49. </DockPanel>
  50. </StackPanel>
  51. </hc:Card>
  52. <!-- 右:搜索 + 管理 -->
  53. <hc:Card Grid.Column="1" Padding="12" FontSize="14">
  54. <StackPanel>
  55. <DockPanel Margin="8">
  56. <Button DockPanel.Dock="Right" Content="清除" Width="auto" Margin="6,0,0,0" FontSize="14"
  57. Style="{StaticResource ButtonDefault}" Command="{Binding ClearFilterCommand}"/>
  58. <Button DockPanel.Dock="Right" Content="仅显示缺译" Width="auto" Margin="6,0,0,0" FontSize="14"
  59. Style="{StaticResource ButtonDefault}" Command="{Binding ShowMissingCommand}"/>
  60. <TextBlock Text="🔍 搜索" Width="auto" VerticalAlignment="Center" Foreground="#666"/>
  61. <TextBox Text="{Binding FilterText, UpdateSourceTrigger=PropertyChanged}" Margin="6,0,0,0"
  62. Style="{StaticResource TextBoxExtend}" VerticalContentAlignment="Center"
  63. ToolTip="匹配中文原文和译文"/>
  64. </DockPanel>
  65. <WrapPanel Margin="8">
  66. <Button Content="➕ 新增词条" Width="auto" Margin="0,0,6,6" Style="{StaticResource ButtonDefault}"
  67. Command="{Binding AddEntryCommand}" FontSize="14"/>
  68. <Button Content="新增语言" Width="auto" Margin="0,0,6,6" Style="{StaticResource ButtonDefault}"
  69. Command="{Binding AddLanguageCommand}" FontSize="14"/>
  70. <Button Content="保存" Width="auto" Margin="0,0,6,6" Style="{StaticResource ButtonPrimary}"
  71. Command="{Binding SaveCommand}" FontSize="14"/>
  72. <Button Content="校验" Width="auto" Margin="0,0,6,6" Style="{StaticResource ButtonDefault}"
  73. Command="{Binding ValidateCommand}" FontSize="14"/>
  74. <Button Content="导入CSV" Width="auto" Margin="0,0,6,6" Style="{StaticResource ButtonDefault}"
  75. Command="{Binding ImportCsvCommand}" FontSize="14"
  76. ToolTip="从 CSV 导入:中文原文已存在 → 替换有值的译文;新中文原文 → 新增词条"/>
  77. <Button Content="导出CSV" Width="auto" Margin="0,0,6,6" Style="{StaticResource ButtonDefault}"
  78. Command="{Binding ExportCsvCommand}" FontSize="14"
  79. ToolTip="把当前表格导出为 CSV(逗号分隔),Excel 可直接打开编辑;列与当前勾选语言一致"/>
  80. <Button Content="翻译设置…" Width="auto" Margin="0,0,6,6" Style="{StaticResource ButtonDefault}"
  81. Command="{Binding SettingsCommand}" FontSize="14"/>
  82. <Button Content="🤖 AI 助手" Width="auto" Margin="0,0,0,6" Style="{StaticResource ButtonPrimary}"
  83. Command="{Binding AiChatCommand}" FontSize="14"/>
  84. </WrapPanel>
  85. </StackPanel>
  86. </hc:Card>
  87. </Grid>
  88. </Border>
  89. <!-- ===== 条目表:语言列由勾选动态生成 ===== -->
  90. <DataGrid x:Name="Grid" Grid.Row="1" AutoGenerateColumns="False" CanUserAddRows="False"
  91. SelectionUnit="FullRow" HeadersVisibility="All" ItemsSource="{Binding Rows}"
  92. EnableRowVirtualization="True" VirtualizingPanel.IsVirtualizing="True"
  93. Background="White" BorderThickness="0" FontSize="14"
  94. PreviewMouseRightButtonDown="Grid_PreviewMouseRightButtonDown">
  95. <DataGrid.ContextMenu>
  96. <ContextMenu>
  97. <MenuItem Header="🌐 翻译选中行的所有语言"
  98. Command="{Binding PlacementTarget.DataContext.TranslateRowCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
  99. CommandParameter="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
  100. <MenuItem Header="🗑 删除选中词条"
  101. Command="{Binding PlacementTarget.DataContext.DeleteRowCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
  102. CommandParameter="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
  103. <MenuItem Header="🗑 删除选中行(可 Ctrl/Shift 多选,一次确认)"
  104. Command="{Binding PlacementTarget.DataContext.DeleteRowsCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
  105. CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
  106. <Separator/>
  107. <MenuItem Header="📋 复制中文原文"
  108. Command="{Binding PlacementTarget.DataContext.CopyKeyCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
  109. CommandParameter="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
  110. </ContextMenu>
  111. </DataGrid.ContextMenu>
  112. </DataGrid>
  113. <!-- ===== 底部状态栏 ===== -->
  114. <StatusBar Grid.Row="2">
  115. <StatusBarItem>
  116. <TextBlock Text="{Binding Stats}"/>
  117. </StatusBarItem>
  118. <StatusBarItem HorizontalAlignment="Right">
  119. <ProgressBar Width="180" Height="14"
  120. Value="{Binding ProgressValue, Mode=OneWay}"
  121. Maximum="{Binding ProgressMax, Mode=OneWay}"
  122. Visibility="{Binding IsTranslating, Converter={StaticResource BoolToVis}}"/>
  123. </StatusBarItem>
  124. </StatusBar>
  125. </Grid>
  126. </hc:Window>