| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- <hc:Window x:Class="LocalizationTool.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:hc="https://handyorg.github.io/handycontrol"
- Title="TeamAAS 多语言包管理工具" Height="720" Width="1180"
- WindowStartupLocation="CenterScreen">
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition Height="Auto"/>
- <RowDefinition Height="*"/>
- <RowDefinition Height="Auto"/>
- </Grid.RowDefinitions>
- <!-- ===== 顶部工具栏 ===== -->
- <Border Grid.Row="0" Background="#F5F6FA" Padding="12" BorderBrush="#E4E7EC" BorderThickness="0,0,0,1">
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="*"/>
- <ColumnDefinition Width="320"/>
- </Grid.ColumnDefinitions>
- <!-- 左:目录 + 语言 + 翻译 -->
- <hc:Card Grid.Column="0" Margin="0,0,8,0" Padding="12" FontSize="14">
- <StackPanel>
- <DockPanel Margin="8">
- <Button DockPanel.Dock="Right" Content="浏览…" Width="auto" Margin="6,0,0,0"
- Style="{StaticResource ButtonDefault}" Click="BtnBrowse_Click" FontSize="14"/>
- <Button DockPanel.Dock="Right" Content="加载" Width="auto" Margin="6,0,0,0"
- FontSize="14" Style="{StaticResource ButtonPrimary}" Command="{Binding LoadCommand}"/>
- <TextBlock Text="语言包目录:" Width="auto" VerticalAlignment="Center" Foreground="#666"/>
- <TextBox Text="{Binding Dir, UpdateSourceTrigger=PropertyChanged}" Margin="6,0,0,0"
- Style="{StaticResource TextBoxExtend}" VerticalContentAlignment="Center"/>
- </DockPanel>
- <DockPanel Margin="8">
- <Button DockPanel.Dock="Right" Content="仅翻译缺译" Width="auto" Margin="6,0,0,0"
- Style="{StaticResource ButtonDefault}" Command="{Binding TranslateMissingCommand}"
- IsEnabled="{Binding TranslationEnabled}" FontSize="14"
- ToolTip="只翻译当前视图中空缺的译文,绝不覆盖已有翻译"/>
- <Button DockPanel.Dock="Right" Content="翻译全部" Width="auto" Margin="6,0,0,0"
- Style="{StaticResource ButtonDefault}" Command="{Binding TranslateAllCommand}"
- IsEnabled="{Binding TranslationEnabled}" FontSize="14"/>
- <Button DockPanel.Dock="Right" Content="翻译勾选" Width="auto" Margin="6,0,0,0"
- Style="{StaticResource ButtonPrimary}" Command="{Binding TranslateSelectedCommand}"
- IsEnabled="{Binding TranslationEnabled}" FontSize="14"/>
- <TextBlock Text="翻译目标:" Width="auto" VerticalAlignment="Center" Foreground="#666"/>
- <hc:CheckComboBox x:Name="CmbTargetLangs" DisplayMemberPath="Display"
- ItemsSource="{Binding LangOptions}" Margin="6,0,0,0"
- SelectionChanged="CmbTargetLangs_SelectionChanged"
- IsEnabled="{Binding TranslationEnabled}"
- ToolTip="勾选的语言 = 表格显示的列 + 翻译目标"/>
- </DockPanel>
- </StackPanel>
- </hc:Card>
- <!-- 右:搜索 + 管理 -->
- <hc:Card Grid.Column="1" Padding="12" FontSize="14">
- <StackPanel>
- <DockPanel Margin="8">
- <Button DockPanel.Dock="Right" Content="清除" Width="auto" Margin="6,0,0,0" FontSize="14"
- Style="{StaticResource ButtonDefault}" Command="{Binding ClearFilterCommand}"/>
- <Button DockPanel.Dock="Right" Content="仅显示缺译" Width="auto" Margin="6,0,0,0" FontSize="14"
- Style="{StaticResource ButtonDefault}" Command="{Binding ShowMissingCommand}"/>
- <TextBlock Text="🔍 搜索" Width="auto" VerticalAlignment="Center" Foreground="#666"/>
- <TextBox Text="{Binding FilterText, UpdateSourceTrigger=PropertyChanged}" Margin="6,0,0,0"
- Style="{StaticResource TextBoxExtend}" VerticalContentAlignment="Center"
- ToolTip="匹配中文原文和译文"/>
- </DockPanel>
- <WrapPanel Margin="8">
- <Button Content="➕ 新增词条" Width="auto" Margin="0,0,6,6" Style="{StaticResource ButtonDefault}"
- Command="{Binding AddEntryCommand}" FontSize="14"/>
- <Button Content="新增语言" Width="auto" Margin="0,0,6,6" Style="{StaticResource ButtonDefault}"
- Command="{Binding AddLanguageCommand}" FontSize="14"/>
- <Button Content="保存" Width="auto" Margin="0,0,6,6" Style="{StaticResource ButtonPrimary}"
- Command="{Binding SaveCommand}" FontSize="14"/>
- <Button Content="校验" Width="auto" Margin="0,0,6,6" Style="{StaticResource ButtonDefault}"
- Command="{Binding ValidateCommand}" FontSize="14"/>
- <Button Content="导入CSV" Width="auto" Margin="0,0,6,6" Style="{StaticResource ButtonDefault}"
- Command="{Binding ImportCsvCommand}" FontSize="14"
- ToolTip="从 CSV 导入:中文原文已存在 → 替换有值的译文;新中文原文 → 新增词条"/>
- <Button Content="导出CSV" Width="auto" Margin="0,0,6,6" Style="{StaticResource ButtonDefault}"
- Command="{Binding ExportCsvCommand}" FontSize="14"
- ToolTip="把当前表格导出为 CSV(逗号分隔),Excel 可直接打开编辑;列与当前勾选语言一致"/>
- <Button Content="翻译设置…" Width="auto" Margin="0,0,6,6" Style="{StaticResource ButtonDefault}"
- Command="{Binding SettingsCommand}" FontSize="14"/>
- <Button Content="🤖 AI 助手" Width="auto" Margin="0,0,0,6" Style="{StaticResource ButtonPrimary}"
- Command="{Binding AiChatCommand}" FontSize="14"/>
- </WrapPanel>
- </StackPanel>
- </hc:Card>
- </Grid>
- </Border>
- <!-- ===== 条目表:语言列由勾选动态生成 ===== -->
- <DataGrid x:Name="Grid" Grid.Row="1" AutoGenerateColumns="False" CanUserAddRows="False"
- SelectionUnit="FullRow" HeadersVisibility="All" ItemsSource="{Binding Rows}"
- EnableRowVirtualization="True" VirtualizingPanel.IsVirtualizing="True"
- Background="White" BorderThickness="0" FontSize="14"
- PreviewMouseRightButtonDown="Grid_PreviewMouseRightButtonDown">
- <DataGrid.ContextMenu>
- <ContextMenu>
- <MenuItem Header="🌐 翻译选中行的所有语言"
- Command="{Binding PlacementTarget.DataContext.TranslateRowCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
- CommandParameter="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
- <MenuItem Header="🗑 删除选中词条"
- Command="{Binding PlacementTarget.DataContext.DeleteRowCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
- CommandParameter="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
- <MenuItem Header="🗑 删除选中行(可 Ctrl/Shift 多选,一次确认)"
- Command="{Binding PlacementTarget.DataContext.DeleteRowsCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
- CommandParameter="{Binding PlacementTarget.SelectedItems, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
- <Separator/>
- <MenuItem Header="📋 复制中文原文"
- Command="{Binding PlacementTarget.DataContext.CopyKeyCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}"
- CommandParameter="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
- </ContextMenu>
- </DataGrid.ContextMenu>
- </DataGrid>
- <!-- ===== 底部状态栏 ===== -->
- <StatusBar Grid.Row="2">
- <StatusBarItem>
- <TextBlock Text="{Binding Stats}"/>
- </StatusBarItem>
- <StatusBarItem HorizontalAlignment="Right">
- <ProgressBar Width="180" Height="14"
- Value="{Binding ProgressValue, Mode=OneWay}"
- Maximum="{Binding ProgressMax, Mode=OneWay}"
- Visibility="{Binding IsTranslating, Converter={StaticResource BoolToVis}}"/>
- </StatusBarItem>
- </StatusBar>
- </Grid>
- </hc:Window>
|