i18n(ui): English UI labels for weekly report and notes (report body stays German)

This commit is contained in:
mika kuns
2026-06-03 10:44:36 +02:00
parent 2d55f88a41
commit a935bf9664
8 changed files with 28 additions and 28 deletions

View File

@@ -72,16 +72,16 @@ public sealed partial class WeeklyReportModalViewModel : ViewModelBase
[RelayCommand(CanExecute = nameof(CanGenerate))] [RelayCommand(CanExecute = nameof(CanGenerate))]
private async Task Generate() private async Task Generate()
{ {
if (!RangeValid) { StatusMessage = "Ungültiger Zeitraum."; return; } if (!RangeValid) { StatusMessage = "Invalid date range."; return; }
IsBusy = true; IsBusy = true;
StatusMessage = "Bericht wird erstellt…"; StatusMessage = "Generating report…";
try try
{ {
ReportMarkdown = await _worker.GenerateWeekReportAsync( ReportMarkdown = await _worker.GenerateWeekReportAsync(
DateOnly.FromDateTime(StartDate!.Value), DateOnly.FromDateTime(EndDate!.Value)); DateOnly.FromDateTime(StartDate!.Value), DateOnly.FromDateTime(EndDate!.Value));
StatusMessage = ""; StatusMessage = "";
} }
catch (Exception ex) { StatusMessage = $"Fehler: {ex.Message}"; } catch (Exception ex) { StatusMessage = $"Error: {ex.Message}"; }
finally { IsBusy = false; } finally { IsBusy = false; }
} }
} }

View File

@@ -9,14 +9,14 @@
<Button Classes="btn" Content="&#x2039;" Command="{Binding PrevDayCommand}"/> <Button Classes="btn" Content="&#x2039;" Command="{Binding PrevDayCommand}"/>
<ctl:ThemedDatePicker SelectedDate="{Binding CurrentDate, Mode=TwoWay}"/> <ctl:ThemedDatePicker SelectedDate="{Binding CurrentDate, Mode=TwoWay}"/>
<Button Classes="btn" Content="&#x203A;" Command="{Binding NextDayCommand}"/> <Button Classes="btn" Content="&#x203A;" Command="{Binding NextDayCommand}"/>
<Button Classes="btn" Content="Heute" Command="{Binding TodayCommand}"/> <Button Classes="btn" Content="Today" Command="{Binding TodayCommand}"/>
<TextBlock Classes="meta" VerticalAlignment="Center" Text="{Binding CurrentDayLabel}"/> <TextBlock Classes="meta" VerticalAlignment="Center" Text="{Binding CurrentDayLabel}"/>
</StackPanel> </StackPanel>
<DockPanel DockPanel.Dock="Top" Margin="0,12,0,8"> <DockPanel DockPanel.Dock="Top" Margin="0,12,0,8">
<Button DockPanel.Dock="Right" Classes="btn" Content="Add" Margin="8,0,0,0" <Button DockPanel.Dock="Right" Classes="btn" Content="Add" Margin="8,0,0,0"
Command="{Binding AddBulletCommand}"/> Command="{Binding AddBulletCommand}"/>
<TextBox PlaceholderText="Neue Notiz&#x2026;" Text="{Binding NewBulletText}"> <TextBox PlaceholderText="New note&#x2026;" Text="{Binding NewBulletText}">
<TextBox.KeyBindings> <TextBox.KeyBindings>
<KeyBinding Gesture="Enter" Command="{Binding AddBulletCommand}"/> <KeyBinding Gesture="Enter" Command="{Binding AddBulletCommand}"/>
</TextBox.KeyBindings> </TextBox.KeyBindings>
@@ -29,8 +29,8 @@
<DataTemplate x:DataType="vm:NoteBulletViewModel"> <DataTemplate x:DataType="vm:NoteBulletViewModel">
<Grid ColumnDefinitions="*,Auto,Auto" Margin="0,2" ColumnSpacing="6"> <Grid ColumnDefinitions="*,Auto,Auto" Margin="0,2" ColumnSpacing="6">
<TextBox Grid.Column="0" Text="{Binding Text}"/> <TextBox Grid.Column="0" Text="{Binding Text}"/>
<Button Grid.Column="1" Classes="btn" Content="Speichern" Command="{Binding SaveCommand}"/> <Button Grid.Column="1" Classes="btn" Content="Save" Command="{Binding SaveCommand}"/>
<Button Grid.Column="2" Classes="btn" Content="L&#xF6;schen" Command="{Binding DeleteCommand}"/> <Button Grid.Column="2" Classes="btn" Content="Delete" Command="{Binding DeleteCommand}"/>
</Grid> </Grid>
</DataTemplate> </DataTemplate>
</ItemsControl.ItemTemplate> </ItemsControl.ItemTemplate>

View File

@@ -71,7 +71,7 @@
Margin="16,0,16,8" Margin="16,0,16,8"
IsVisible="{Binding ShowNotesRow}" IsVisible="{Binding ShowNotesRow}"
Command="{Binding OpenNotesCommand}" Command="{Binding OpenNotesCommand}"
Content="Notizen (Tagesnotizen)"/> Content="Notes (daily notes)"/>
<!-- Task list --> <!-- Task list -->
<ScrollViewer> <ScrollViewer>

View File

@@ -65,7 +65,7 @@
Command="{Binding RestartWorkerCommand}"/> Command="{Binding RestartWorkerCommand}"/>
<MenuItem Header="Worktrees…" <MenuItem Header="Worktrees…"
Command="{Binding OpenWorktreesOverviewGlobalCommand}"/> Command="{Binding OpenWorktreesOverviewGlobalCommand}"/>
<MenuItem Header="Wochenbericht…" Command="{Binding OpenWeeklyReportCommand}"/> <MenuItem Header="Weekly Report…" Command="{Binding OpenWeeklyReportCommand}"/>
<MenuItem Header="About…" Command="{Binding OpenAboutCommand}"/> <MenuItem Header="About…" Command="{Binding OpenAboutCommand}"/>
<MenuItem Header="Add repos as lists…" Command="{Binding OpenRepoImportCommand}"/> <MenuItem Header="Add repos as lists…" Command="{Binding OpenRepoImportCommand}"/>
</MenuItem> </MenuItem>

View File

@@ -79,19 +79,19 @@
Opacity="0.6" FontSize="12"/> Opacity="0.6" FontSize="12"/>
</StackPanel> </StackPanel>
<StackPanel Spacing="4"> <StackPanel Spacing="4">
<TextBlock Classes="field-label" Text="Bericht: ausgeschlossene Pfade (einer pro Zeile)"/> <TextBlock Classes="field-label" Text="Report: excluded paths (one per line)"/>
<TextBox AcceptsReturn="True" MinHeight="60" Text="{Binding General.ReportExcludedPaths, Mode=TwoWay}"/> <TextBox AcceptsReturn="True" MinHeight="60" Text="{Binding General.ReportExcludedPaths, Mode=TwoWay}"/>
</StackPanel> </StackPanel>
<StackPanel Spacing="4"> <StackPanel Spacing="4">
<TextBlock Classes="field-label" Text="Standup-Wochentag"/> <TextBlock Classes="field-label" Text="Standup weekday"/>
<ComboBox SelectedIndex="{Binding General.StandupWeekday, Mode=TwoWay}" HorizontalAlignment="Left"> <ComboBox SelectedIndex="{Binding General.StandupWeekday, Mode=TwoWay}" HorizontalAlignment="Left">
<ComboBoxItem>Sonntag</ComboBoxItem> <ComboBoxItem>Sunday</ComboBoxItem>
<ComboBoxItem>Montag</ComboBoxItem> <ComboBoxItem>Monday</ComboBoxItem>
<ComboBoxItem>Dienstag</ComboBoxItem> <ComboBoxItem>Tuesday</ComboBoxItem>
<ComboBoxItem>Mittwoch</ComboBoxItem> <ComboBoxItem>Wednesday</ComboBoxItem>
<ComboBoxItem>Donnerstag</ComboBoxItem> <ComboBoxItem>Thursday</ComboBoxItem>
<ComboBoxItem>Freitag</ComboBoxItem> <ComboBoxItem>Friday</ComboBoxItem>
<ComboBoxItem>Samstag</ComboBoxItem> <ComboBoxItem>Saturday</ComboBoxItem>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>

View File

@@ -4,7 +4,7 @@
xmlns:ctl="using:ClaudeDo.Ui.Views.Controls" xmlns:ctl="using:ClaudeDo.Ui.Views.Controls"
x:Class="ClaudeDo.Ui.Views.Modals.WeeklyReportModalView" x:Class="ClaudeDo.Ui.Views.Modals.WeeklyReportModalView"
x:DataType="vm:WeeklyReportModalViewModel" x:DataType="vm:WeeklyReportModalViewModel"
Title="Wochenbericht" Title="Weekly Report"
Width="820" Height="640" Width="820" Height="640"
WindowDecorations="None" WindowDecorations="None"
ExtendClientAreaToDecorationsHint="True" ExtendClientAreaToDecorationsHint="True"
@@ -14,16 +14,16 @@
<KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/> <KeyBinding Gesture="Escape" Command="{Binding CloseCommand}"/>
</Window.KeyBindings> </Window.KeyBindings>
<ctl:ModalShell Title="WOCHENBERICHT" CloseCommand="{Binding CloseCommand}"> <ctl:ModalShell Title="WEEKLY REPORT" CloseCommand="{Binding CloseCommand}">
<DockPanel Margin="20,16"> <DockPanel Margin="20,16">
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Spacing="8"> <StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Spacing="8">
<TextBlock Classes="meta" Text="Von" VerticalAlignment="Center"/> <TextBlock Classes="meta" Text="From" VerticalAlignment="Center"/>
<ctl:ThemedDatePicker SelectedDate="{Binding StartDate}"/> <ctl:ThemedDatePicker SelectedDate="{Binding StartDate}"/>
<TextBlock Classes="meta" Text="Bis" VerticalAlignment="Center"/> <TextBlock Classes="meta" Text="To" VerticalAlignment="Center"/>
<ctl:ThemedDatePicker SelectedDate="{Binding EndDate}"/> <ctl:ThemedDatePicker SelectedDate="{Binding EndDate}"/>
<Button Classes="btn" Content="Erstellen" Command="{Binding GenerateCommand}" <Button Classes="btn" Content="Generate" Command="{Binding GenerateCommand}"
IsVisible="{Binding EmptyStateVisible}"/> IsVisible="{Binding EmptyStateVisible}"/>
<Button Classes="btn" Content="Neu erstellen" Command="{Binding GenerateCommand}" <Button Classes="btn" Content="Regenerate" Command="{Binding GenerateCommand}"
IsVisible="{Binding HasReport}"/> IsVisible="{Binding HasReport}"/>
</StackPanel> </StackPanel>
@@ -31,7 +31,7 @@
Text="{Binding StatusMessage}"/> Text="{Binding StatusMessage}"/>
<TextBlock DockPanel.Dock="Top" Classes="meta" Margin="0,16" <TextBlock DockPanel.Dock="Top" Classes="meta" Margin="0,16"
Text='Noch kein Bericht f&#xFC;r diesen Zeitraum. Klicke &#x201E;Erstellen&#x201C;.' Text='No report for this range yet. Click &#x201C;Generate&#x201D;.'
IsVisible="{Binding EmptyStateVisible}"/> IsVisible="{Binding EmptyStateVisible}"/>
<ScrollViewer IsVisible="{Binding HasReport}"> <ScrollViewer IsVisible="{Binding HasReport}">

View File

@@ -11,7 +11,7 @@ namespace ClaudeDo.Worker.Report;
public sealed class WeekReportService : IWeekReportService public sealed class WeekReportService : IWeekReportService
{ {
private static readonly string[] DefaultExcludes = { @"C:\Private" }; private static readonly string[] DefaultExcludes = { @"C:\Private" };
private const string NoActivity = "_Keine Aktivität in diesem Zeitraum._"; private const string NoActivity = "_No activity in this period._";
private readonly IClaudeHistoryReader _reader; private readonly IClaudeHistoryReader _reader;
private readonly IDbContextFactory<ClaudeDoDbContext> _dbFactory; private readonly IDbContextFactory<ClaudeDoDbContext> _dbFactory;
@@ -72,7 +72,7 @@ public sealed class WeekReportService : IWeekReportService
var args = $"-p --output-format stream-json --verbose --permission-mode auto --model {safeModel}"; var args = $"-p --output-format stream-json --verbose --permission-mode auto --model {safeModel}";
var result = await _claude.RunAsync(args, prompt, Path.GetTempPath(), _ => Task.CompletedTask, ct); var result = await _claude.RunAsync(args, prompt, Path.GetTempPath(), _ => Task.CompletedTask, ct);
if (!result.IsSuccess) if (!result.IsSuccess)
throw new InvalidOperationException(result.ErrorMarkdown ?? "Claude konnte den Bericht nicht erzeugen."); throw new InvalidOperationException(result.ErrorMarkdown ?? "Claude could not generate the report.");
markdown = result.ResultMarkdown!; markdown = result.ResultMarkdown!;
} }

View File

@@ -43,7 +43,7 @@ public class WeekReportServiceTests : IDisposable
var md = await svc.GenerateAsync(Start, End); var md = await svc.GenerateAsync(Start, End);
Assert.Equal(0, claude.Calls); Assert.Equal(0, claude.Calls);
Assert.Contains("Keine Aktivität", md); Assert.Contains("No activity", md);
using var ctx = _db.CreateContext(); using var ctx = _db.CreateContext();
Assert.NotNull(await new WeekReportRepository(ctx).GetByRangeAsync(Start, End)); Assert.NotNull(await new WeekReportRepository(ctx).GetByRangeAsync(Start, End));
} }