Umbau durch Gemini Flash, Durchsicht und Nacharbeit durch Claude. Umfang: - Desktop: LocalizationManager (JSON-Pakete, Rueckfall auf Englisch, Umschalten zur Laufzeit), Localize-Markup-Erweiterung, Sprachwahl in den Einstellungen (AppSettings.Language, Vorgabe "en"); 317 Schluessel je Sprache - WebUI: alle Ansichten auf t()/data-i18n, 656 Schluessel je Sprache - Agenten-Werkzeuge: Beschreibungen, Schemata und Meldungen auf Englisch - Tests an die englischen Meldungen angepasst, keine Pruefung abgeschwaecht Nacharbeit bei der Durchsicht: - ~25 Kommentarbloecke mit Begruendungen waren ersatzlos entfallen, darunter sicherheitsrelevante (NTFS-Datenstrom beim shared:-Praefix, Bremse gegen Agentenschleifen, doppelter POST beim Anlegen einer Instanz). Wieder eingesetzt: auf Englisch, wo die Datei umgestellt ist, sonst im Wortlaut. - Drei WebUI-Schluessel fehlten (logs.paused, instances.instanceOfflineError, instances.noInstanceActiveError). Weil t() bei fehlendem Schluessel den Schluessel selbst liefert, griff der "|| err.message"-Rueckfall nie — die Oberflaeche haette den Schluesselnamen angezeigt. Geprueft: Schluesselgleichheit en/de, Platzhalter je Schluessel, jeder im Code benutzte Schluessel vorhanden, node --check fuer alle Module, 1.220 Tests gruen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
129 lines
6.8 KiB
XML
129 lines
6.8 KiB
XML
<UserControl xmlns="https://github.com/avaloniaui"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
xmlns:vm="using:ClawdDotNet.Desktop.ViewModels"
|
|
xmlns:ctrl="using:ClawdDotNet.Desktop.Controls"
|
|
mc:Ignorable="d" d:DesignWidth="1100" d:DesignHeight="700"
|
|
x:Class="ClawdDotNet.Desktop.Views.InfoPageView"
|
|
x:DataType="vm:InfoPageViewModel">
|
|
|
|
<ScrollViewer VerticalScrollBarVisibility="Auto">
|
|
<!-- Etwas Luft nach aussen: Die Eckmarken des BlueprintFrame ragen ueber den
|
|
Rahmen hinaus und wuerden sonst am Rand des Bereichs abgeschnitten. -->
|
|
<StackPanel Spacing="26" Margin="8" MaxWidth="820" HorizontalAlignment="Left">
|
|
|
|
<!-- Die einzige Karte des Entwurfs mit Eckmarken -->
|
|
<ctrl:BlueprintFrame MaxWidth="420" HorizontalAlignment="Left">
|
|
<StackPanel Spacing="6">
|
|
<TextBlock Classes="h2" Text="ClawdDotNet" />
|
|
<TextBlock Classes="muted" FontSize="13">
|
|
<Run Text="Version" /><Run Text=" " /><Run Text="{Binding AppVersion}" /><Run Text=" · Avalonia UI · net10.0" />
|
|
</TextBlock>
|
|
</StackPanel>
|
|
</ctrl:BlueprintFrame>
|
|
|
|
<!-- Anwendung -->
|
|
<StackPanel Spacing="10">
|
|
<TextBlock Classes="kicker" Text="{Binding L[desktop.info.kickerApp]}" />
|
|
<TextBlock Classes="h2" Text="{Binding L[desktop.info.build]}" />
|
|
|
|
<Grid ColumnDefinitions="170,*" RowDefinitions="Auto,Auto" >
|
|
<TextBlock Grid.Row="0" Grid.Column="0" Classes="label" Text="{Binding L[desktop.info.version]}" />
|
|
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding AppVersion}" />
|
|
|
|
<TextBlock Grid.Row="1" Grid.Column="0" Classes="label" Text="{Binding L[desktop.info.buildSummary]}"
|
|
Margin="0,6,0,0" />
|
|
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding BuildSummary}"
|
|
TextWrapping="Wrap" Margin="0,6,0,0" />
|
|
</Grid>
|
|
</StackPanel>
|
|
|
|
<Border Classes="hr" />
|
|
|
|
<!-- Instanz -->
|
|
<StackPanel Spacing="10">
|
|
<TextBlock Classes="kicker" Text="{Binding L[desktop.info.kickerInstance]}" />
|
|
|
|
<DockPanel>
|
|
<TextBlock Classes="h2" Text="{Binding L[desktop.info.currentInstance]}" VerticalAlignment="Center" />
|
|
<Button DockPanel.Dock="Right" HorizontalAlignment="Right" Classes="toolbar"
|
|
Command="{Binding OpenInstanceFolderCommand}">
|
|
<StackPanel Orientation="Horizontal" Spacing="6">
|
|
<ctrl:StrokeIcon Data="{StaticResource IconFolder}" Width="14" Height="14" />
|
|
<TextBlock Text="{Binding L[desktop.info.openFolder]}" />
|
|
</StackPanel>
|
|
</Button>
|
|
</DockPanel>
|
|
|
|
<Grid ColumnDefinitions="170,*" RowDefinitions="Auto,Auto,Auto,Auto,Auto">
|
|
<TextBlock Grid.Row="0" Grid.Column="0" Classes="label" Text="{Binding L[desktop.info.name]}" />
|
|
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding InstanceName}" />
|
|
|
|
<TextBlock Grid.Row="1" Grid.Column="0" Classes="label" Text="{Binding L[desktop.info.id]}" Margin="0,6,0,0" />
|
|
<TextBlock Grid.Row="1" Grid.Column="1" Classes="mono" Text="{Binding InstanceId}"
|
|
Margin="0,6,0,0" />
|
|
|
|
<TextBlock Grid.Row="2" Grid.Column="0" Classes="label" Text="{Binding L[desktop.info.path]}" Margin="0,6,0,0" />
|
|
<SelectableTextBlock Grid.Row="2" Grid.Column="1" Text="{Binding InstancePath}"
|
|
TextWrapping="Wrap" Margin="0,6,0,0" />
|
|
|
|
<TextBlock Grid.Row="3" Grid.Column="0" Classes="label" Text="{Binding L[desktop.info.logDir]}" Margin="0,6,0,0" />
|
|
<SelectableTextBlock Grid.Row="3" Grid.Column="1" Text="{Binding LogDirectory}"
|
|
TextWrapping="Wrap" Margin="0,6,0,0" />
|
|
|
|
<TextBlock Grid.Row="4" Grid.Column="0" Classes="label" Text="{Binding L[desktop.info.openRouter]}" Margin="0,6,0,0" />
|
|
<TextBlock Grid.Row="4" Grid.Column="1" Text="{Binding OpenRouterStatus}" Margin="0,6,0,0" />
|
|
</Grid>
|
|
</StackPanel>
|
|
|
|
<Border Classes="hr" />
|
|
|
|
<!-- Baugruppen -->
|
|
<StackPanel Spacing="10">
|
|
<TextBlock Classes="kicker" Text="{Binding L[desktop.info.kickerModules]}" />
|
|
<TextBlock Classes="h2" Text="{Binding L[desktop.info.assemblies]}" />
|
|
|
|
<!-- Feste Breiten statt Sternanteilen fuer die drei schmalen Spalten.
|
|
Sternbreiten teilen den Platz erst auf, NACHDEM die Mindestbreite jedes
|
|
Inhalts gedeckt ist. Weil jede Zeile ein eigenes Grid ist, hat ein langer
|
|
Aenderungstext seiner Zeile - und nur ihr - den Platz der anderen drei
|
|
Spalten weggenommen: Die BUILD-Zahl rutschte unter MODUL, BUILD-DATUM und
|
|
AENDERUNGEN stiessen ohne Trennung aneinander. Feste Breiten koennen nicht
|
|
zusammengedrueckt werden, also stehen Kopf und alle Zeilen buendig, ganz
|
|
gleich, was in der letzten Spalte steht.
|
|
|
|
Die letzte Spalte bleibt "*": Sie ist die letzte, ein Ueberlauf dort
|
|
verschiebt nichts mehr, und ClipToBounds haelt ihn innerhalb der Tabelle.
|
|
Der linke Aussenabstand sorgt dafuer, dass Datum und Text auch im
|
|
Grenzfall nicht aneinanderstossen. -->
|
|
<Border Classes="thead">
|
|
<Grid ColumnDefinitions="170,60,150,*" ClipToBounds="True">
|
|
<TextBlock Grid.Column="0" Classes="th" Text="{Binding L[desktop.info.thModule]}" />
|
|
<TextBlock Grid.Column="1" Classes="th" Text="{Binding L[desktop.info.thBuild]}" />
|
|
<TextBlock Grid.Column="2" Classes="th" Text="{Binding L[desktop.info.thBuildDate]}" />
|
|
<TextBlock Grid.Column="3" Classes="th" Text="{Binding L[desktop.info.thChanges]}" Margin="10,0,0,0" />
|
|
</Grid>
|
|
</Border>
|
|
|
|
<ItemsControl ItemsSource="{Binding Assemblies}" Margin="0,-10,0,0">
|
|
<ItemsControl.ItemTemplate>
|
|
<DataTemplate DataType="vm:AssemblyInfoItem">
|
|
<Border Classes="tr" Padding="7">
|
|
<Grid ColumnDefinitions="170,60,150,*" ClipToBounds="True">
|
|
<TextBlock Grid.Column="0" Classes="td" FontWeight="SemiBold" Text="{Binding ShortName}" />
|
|
<TextBlock Grid.Column="1" Classes="td" Text="{Binding BuildNumber}" />
|
|
<TextBlock Grid.Column="2" Classes="td dim" Text="{Binding BuildDate}" />
|
|
<TextBlock Grid.Column="3" Classes="td dim" Text="{Binding Changes}" Margin="10,0,0,0" />
|
|
</Grid>
|
|
</Border>
|
|
</DataTemplate>
|
|
</ItemsControl.ItemTemplate>
|
|
</ItemsControl>
|
|
</StackPanel>
|
|
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
|
|
</UserControl>
|