feat(i18n): localize Avalonia view strings via loc:Tr markup
Extract ~165 hardcoded UI strings across islands, modals, planning and
shell views into en.json; replace with {loc:Tr} bindings.
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:ClaudeDo.Ui.ViewModels.Islands"
|
||||
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
|
||||
xmlns:loc="using:ClaudeDo.Ui.Localization"
|
||||
x:Class="ClaudeDo.Ui.Views.Islands.TaskRowView"
|
||||
x:DataType="vm:TaskRowViewModel">
|
||||
<Grid>
|
||||
@@ -32,38 +33,38 @@
|
||||
Classes.done="{Binding Done}">
|
||||
<Border.ContextMenu>
|
||||
<ContextMenu>
|
||||
<MenuItem Header="Send to queue"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxSendToQueue}"
|
||||
IsVisible="{Binding CanSendToQueue}"
|
||||
Click="OnSendToQueueClick"/>
|
||||
<MenuItem Header="Remove from queue"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxRemoveFromQueue}"
|
||||
IsVisible="{Binding CanRemoveFromQueue}"
|
||||
Click="OnRemoveFromQueueClick"/>
|
||||
<MenuItem Header="Cancel execution"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxCancelExecution}"
|
||||
IsVisible="{Binding IsRunning}"
|
||||
Click="OnCancelExecutionClick"/>
|
||||
<Separator/>
|
||||
<MenuItem Header="Mark as">
|
||||
<MenuItem Header="Done" Tag="Done" Click="OnSetStatusClick"/>
|
||||
<MenuItem Header="Cancelled" Tag="Cancelled" Click="OnSetStatusClick"/>
|
||||
<MenuItem Header="{loc:Tr tasks.ctxMarkAs}">
|
||||
<MenuItem Header="{loc:Tr tasks.ctxMarkDone}" Tag="Done" Click="OnSetStatusClick"/>
|
||||
<MenuItem Header="{loc:Tr tasks.ctxMarkCancelled}" Tag="Cancelled" Click="OnSetStatusClick"/>
|
||||
</MenuItem>
|
||||
<Separator/>
|
||||
<MenuItem Header="Run interactively"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxRunInteractively}"
|
||||
Click="OnRunInteractivelyClick"/>
|
||||
<MenuItem Header="Open planning Session"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxOpenPlanningSession}"
|
||||
Click="OnOpenPlanningSessionClick"
|
||||
IsVisible="{Binding CanOpenPlanningSession}"/>
|
||||
<MenuItem Header="Resume planning Session"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxResumePlanningSession}"
|
||||
Click="OnResumePlanningSessionClick"
|
||||
IsVisible="{Binding CanResumeOrDiscardPlanning}"/>
|
||||
<MenuItem Header="Discard planning session"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxDiscardPlanningSession}"
|
||||
Click="OnDiscardPlanningSessionClick"
|
||||
IsVisible="{Binding CanResumeOrDiscardPlanning}"/>
|
||||
<MenuItem Header="Queue subtasks sequentially"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxQueueSubtasks}"
|
||||
Click="OnQueuePlanningSubtasksClick"
|
||||
IsVisible="{Binding CanQueuePlan}"/>
|
||||
<Separator/>
|
||||
<MenuItem Header="Schedule for..." Click="OnScheduleForClick"/>
|
||||
<MenuItem Header="Clear schedule"
|
||||
<MenuItem Header="{loc:Tr tasks.ctxScheduleFor}" Click="OnScheduleForClick"/>
|
||||
<MenuItem Header="{loc:Tr tasks.ctxClearSchedule}"
|
||||
IsVisible="{Binding HasSchedule}"
|
||||
Click="OnClearScheduleClick"/>
|
||||
</ContextMenu>
|
||||
@@ -111,10 +112,10 @@
|
||||
<StackPanel Grid.Column="1" Orientation="Horizontal" Spacing="4"
|
||||
VerticalAlignment="Center" Margin="4,0,0,0">
|
||||
<Border Classes="badge draft" IsVisible="{Binding IsDraft}">
|
||||
<TextBlock Text="DRAFT"/>
|
||||
<TextBlock Text="{loc:Tr tasks.badgeDraft}"/>
|
||||
</Border>
|
||||
<Border Classes="badge planned" IsVisible="{Binding IsPlanned}">
|
||||
<TextBlock Text="PLANNED"/>
|
||||
<TextBlock Text="{loc:Tr tasks.badgePlanned}"/>
|
||||
</Border>
|
||||
<Border Classes="badge"
|
||||
Classes.planning="{Binding IsPlanActive}"
|
||||
@@ -141,24 +142,24 @@
|
||||
<!-- Review actions (visible when WaitingForReview) -->
|
||||
<StackPanel Orientation="Horizontal" Spacing="4"
|
||||
IsVisible="{Binding IsWaitingForReview}">
|
||||
<Button Classes="btn" Content="Approve" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="Approve — mark Done"
|
||||
<Button Classes="btn" Content="{loc:Tr tasks.approve}" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="{loc:Tr tasks.approveTip}"
|
||||
Click="OnApproveReviewClick"/>
|
||||
<Button Classes="btn" Content="Reject" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="Reject with feedback and re-run"
|
||||
<Button Classes="btn" Content="{loc:Tr tasks.reject}" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="{loc:Tr tasks.rejectTip}"
|
||||
Click="OnRejectReviewClick"/>
|
||||
<Button Classes="btn" Content="Park" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="Send back to Idle for manual editing"
|
||||
<Button Classes="btn" Content="{loc:Tr tasks.park}" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="{loc:Tr tasks.parkTip}"
|
||||
Click="OnParkReviewClick"/>
|
||||
<Button Classes="btn" Content="Cancel" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="Cancel this task"
|
||||
<Button Classes="btn" Content="{loc:Tr tasks.cancel}" MinWidth="0" Padding="8,2"
|
||||
ToolTip.Tip="{loc:Tr tasks.cancelTip}"
|
||||
Click="OnCancelReviewClick"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Dequeue button (visible when row is Queued, or planning parent has queued subtasks) -->
|
||||
<Button Classes="icon-btn dequeue-btn"
|
||||
IsVisible="{Binding CanRemoveFromQueue}"
|
||||
ToolTip.Tip="Remove from queue"
|
||||
ToolTip.Tip="{loc:Tr tasks.removeFromQueueTip}"
|
||||
Command="{Binding $parent[ItemsControl].((vm:TasksIslandViewModel)DataContext).RemoveFromQueueCommand}"
|
||||
CommandParameter="{Binding}">
|
||||
<PathIcon Width="10" Height="10" Data="{StaticResource Icon.X}"/>
|
||||
@@ -226,10 +227,10 @@
|
||||
BorderThickness="1" CornerRadius="10"
|
||||
Padding="16" Width="300">
|
||||
<StackPanel Spacing="12">
|
||||
<TextBlock Classes="title" Text="Schedule task"/>
|
||||
<TextBlock Classes="title" Text="{loc:Tr tasks.scheduleTitle}"/>
|
||||
|
||||
<StackPanel Spacing="6">
|
||||
<TextBlock Classes="eyebrow" Text="WHEN"
|
||||
<TextBlock Classes="eyebrow" Text="{loc:Tr tasks.scheduleWhen}"
|
||||
Foreground="{DynamicResource TextDimBrush}" Opacity="0.6"/>
|
||||
<ctl:ThemedDatePicker x:Name="ScheduleDate" ShowTime="True"
|
||||
HorizontalAlignment="Stretch"/>
|
||||
@@ -237,8 +238,8 @@
|
||||
|
||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||
HorizontalAlignment="Right" Margin="0,4,0,0">
|
||||
<Button Classes="btn" Content="Cancel" Click="OnScheduleCancelClick" MinWidth="76"/>
|
||||
<Button Content="Schedule" Classes="accent" Click="OnScheduleSetClick" MinWidth="76"/>
|
||||
<Button Classes="btn" Content="{loc:Tr tasks.cancel}" Click="OnScheduleCancelClick" MinWidth="76"/>
|
||||
<Button Content="{loc:Tr tasks.scheduleConfirm}" Classes="accent" Click="OnScheduleSetClick" MinWidth="76"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
@@ -258,18 +259,18 @@
|
||||
BorderThickness="1" CornerRadius="10"
|
||||
Padding="16" Width="320">
|
||||
<StackPanel Spacing="12">
|
||||
<TextBlock Classes="title" Text="Reject & re-run"/>
|
||||
<TextBlock Classes="title" Text="{loc:Tr tasks.rejectRerunTitle}"/>
|
||||
<StackPanel Spacing="6">
|
||||
<TextBlock Classes="eyebrow" Text="FEEDBACK FOR THE AGENT"
|
||||
<TextBlock Classes="eyebrow" Text="{loc:Tr tasks.feedbackLabel}"
|
||||
Foreground="{DynamicResource TextDimBrush}" Opacity="0.6"/>
|
||||
<TextBox x:Name="RejectFeedback"
|
||||
AcceptsReturn="True" TextWrapping="Wrap"
|
||||
MinHeight="80" PlaceholderText="What should the agent fix?"/>
|
||||
MinHeight="80" PlaceholderText="{loc:Tr tasks.feedbackPlaceholder}"/>
|
||||
</StackPanel>
|
||||
<StackPanel Orientation="Horizontal" Spacing="8"
|
||||
HorizontalAlignment="Right" Margin="0,4,0,0">
|
||||
<Button Classes="btn" Content="Cancel" Click="OnRejectCancelClick" MinWidth="76"/>
|
||||
<Button Content="Re-run" Classes="accent" Click="OnRejectConfirmClick" MinWidth="76"/>
|
||||
<Button Classes="btn" Content="{loc:Tr tasks.cancel}" Click="OnRejectCancelClick" MinWidth="76"/>
|
||||
<Button Content="{loc:Tr tasks.rerun}" Classes="accent" Click="OnRejectConfirmClick" MinWidth="76"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
Reference in New Issue
Block a user