Skip to content

Commit 25c11dd

Browse files
authored
Localize remaining English strings in tray UI
Localize remaining tray UI strings using the existing x:Uid and LocalizationHelper patterns, with resource coverage across supported locale files.\n\nValidated in an isolated worktree with full build, Shared tests, and Tray tests.
1 parent 9a3a7a6 commit 25c11dd

19 files changed

Lines changed: 1405 additions & 85 deletions

src/OpenClaw.Tray.WinUI/App.xaml.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,12 @@ public App()
226226
Logger.Warn($"[App] Ignoring invalid OPENCLAW_LANGUAGE value: {langOverride}");
227227
}
228228

229+
// Wire the GatewayHostAccess localization indirection to LocalizationHelper.
230+
// The classifier defaults to identity (returns the resource key as-is) for unit-test
231+
// contexts that lack a WinUI runtime; in-app we point it at the real resource lookup.
232+
GatewayHostAccessLocalization.GetString = LocalizationHelper.GetString;
233+
GatewayHostAccessLocalization.Format = (key, args) => LocalizationHelper.Format(key, args);
234+
229235
InitializeComponent();
230236

231237
s_runMarker.Check();

src/OpenClaw.Tray.WinUI/Pages/AgentEventsPage.xaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ private void UpdateLiveBadge()
9696
{
9797
LiveDot.Fill = new Microsoft.UI.Xaml.Media.SolidColorBrush(
9898
Microsoft.UI.ColorHelper.FromArgb(255, 255, 68, 68));
99-
LiveText.Text = "Live";
99+
LiveText.Text = LocalizationHelper.GetString("AgentEventsPage_Status_Live");
100100
LiveText.Foreground = new Microsoft.UI.Xaml.Media.SolidColorBrush(
101101
Microsoft.UI.ColorHelper.FromArgb(255, 255, 68, 68));
102102
LiveBadge.Background = new Microsoft.UI.Xaml.Media.SolidColorBrush(
@@ -106,7 +106,7 @@ private void UpdateLiveBadge()
106106
{
107107
LiveDot.Fill = new Microsoft.UI.Xaml.Media.SolidColorBrush(
108108
Microsoft.UI.ColorHelper.FromArgb(255, 128, 128, 128));
109-
LiveText.Text = "Offline";
109+
LiveText.Text = LocalizationHelper.GetString("AgentEventsPage_Status_Offline");
110110
LiveText.Foreground = new Microsoft.UI.Xaml.Media.SolidColorBrush(
111111
Microsoft.UI.ColorHelper.FromArgb(255, 128, 128, 128));
112112
LiveBadge.Background = new Microsoft.UI.Xaml.Media.SolidColorBrush(

src/OpenClaw.Tray.WinUI/Pages/BindingsPage.xaml.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Microsoft.UI.Xaml;
22
using Microsoft.UI.Xaml.Controls;
3+
using OpenClawTray.Helpers;
34
using OpenClawTray.Services;
45
using System;
56
using System.Collections.Generic;
@@ -153,15 +154,15 @@ private void UpdateLoadingVisuals()
153154

154155
private void ShowDisconnected()
155156
{
156-
ConnectionInfoBar.Title = "Gateway disconnected";
157-
ConnectionInfoBar.Message = "Connect to a gateway to load bindings.";
157+
ConnectionInfoBar.Title = LocalizationHelper.GetString("BindingsPage_GatewayDisconnected.Title");
158+
ConnectionInfoBar.Message = LocalizationHelper.GetString("BindingsPage_GatewayDisconnected.Message");
158159
ConnectionInfoBar.Severity = InfoBarSeverity.Warning;
159160
ConnectionInfoBar.IsOpen = true;
160161
}
161162

162163
private void ShowLoadFailure(Exception ex)
163164
{
164-
ConnectionInfoBar.Title = "Could not load bindings";
165+
ConnectionInfoBar.Title = LocalizationHelper.GetString("BindingsPage_CouldNotLoadBindings");
165166
ConnectionInfoBar.Message = ex.Message;
166167
ConnectionInfoBar.Severity = InfoBarSeverity.Error;
167168
ConnectionInfoBar.IsOpen = true;

src/OpenClaw.Tray.WinUI/Pages/ConfigPage.xaml.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,20 +1133,20 @@ private void UpdatePermissionBanner()
11331133
switch (GetConfigPermissionState())
11341134
{
11351135
case ConfigPermissionState.Checking:
1136-
PermissionInfoBar.Title = "Checking config permissions";
1136+
PermissionInfoBar.Title = LocalizationHelper.GetString("ConfigPage_CheckingConfigPermissions");
11371137
PermissionInfoBar.Message = "Waiting for the gateway to report this operator's permissions.";
11381138
PermissionInfoBar.Severity = InfoBarSeverity.Informational;
11391139
SetInfoBarOpen(PermissionInfoBar, true);
11401140
break;
11411141
case ConfigPermissionState.NoRead:
11421142
ClearConfigViewForNoRead();
1143-
PermissionInfoBar.Title = "Config unavailable";
1143+
PermissionInfoBar.Title = LocalizationHelper.GetString("ConfigPage_ConfigUnavailable");
11441144
PermissionInfoBar.Message = "This operator token lacks operator.read permission, so the gateway config cannot be loaded here.";
11451145
PermissionInfoBar.Severity = InfoBarSeverity.Error;
11461146
SetInfoBarOpen(PermissionInfoBar, true);
11471147
break;
11481148
case ConfigPermissionState.ReadOnly:
1149-
PermissionInfoBar.Title = "Config is read-only";
1149+
PermissionInfoBar.Title = LocalizationHelper.GetString("ConfigPage_ConfigIsReadOnly");
11501150
PermissionInfoBar.Message = "This operator token can read config but lacks operator.write permission. You can inspect and validate drafts, but Save is disabled.";
11511151
PermissionInfoBar.Severity = InfoBarSeverity.Warning;
11521152
SetInfoBarOpen(PermissionInfoBar, true);

src/OpenClaw.Tray.WinUI/Pages/ConnectionPage.xaml.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -465,9 +465,9 @@ private void ApplyGatewayHostAccess(ConnectionPagePlan plan)
465465
return;
466466
}
467467

468-
GatewayHostControlsTitleText.Text = "WSL gateway";
469-
GatewayHostControlsDescriptionText.Text =
470-
$"Open a shell or manage the local gateway service in {_activeHostAccessPlan.DistroName}.";
468+
GatewayHostControlsDescriptionText.Text = LocalizationHelper.Format(
469+
"ConnectionPage_GatewayHostControlsDescription_Format",
470+
_activeHostAccessPlan.DistroName);
471471
GatewayHostOpenTerminalButton.IsEnabled = !_gatewayHostActionInProgress && _activeHostAccessPlan.CanOpenTerminal;
472472
GatewayHostStartButton.IsEnabled = !_gatewayHostActionInProgress;
473473
GatewayHostStopButton.IsEnabled = !_gatewayHostActionInProgress;
@@ -478,6 +478,9 @@ private void ApplyGatewayHostAccess(ConnectionPagePlan plan)
478478
? Visibility.Visible
479479
: Visibility.Collapsed;
480480
ToolTipService.SetToolTip(GatewayHostOpenTerminalButton, _activeHostAccessPlan.TerminalTooltip);
481+
Microsoft.UI.Xaml.Automation.AutomationProperties.SetName(
482+
GatewayHostOpenTerminalButton,
483+
_activeHostAccessPlan.TerminalLabel);
481484
}
482485

483486
private void SetGatewayHostActionStatus(string message, bool isError = false)

src/OpenClaw.Tray.WinUI/Pages/CronPage.xaml.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -517,8 +517,8 @@ private void ShowJobCompletedNotification(string jobName)
517517
_infoDismissCts = new CancellationTokenSource();
518518
var cts = _infoDismissCts;
519519

520-
JobCompletedInfoBar.Title = "Job completed";
521-
JobCompletedInfoBar.Message = $"\"{jobName}\" ran successfully and was removed.";
520+
JobCompletedInfoBar.Title = LocalizationHelper.GetString("CronPage_JobCompleted");
521+
JobCompletedInfoBar.Message = LocalizationHelper.Format("CronPage_JobCompletedRanSuccessfully", jobName);
522522
JobCompletedInfoBar.IsOpen = true;
523523
DispatcherQueue?.TryEnqueue(async () =>
524524
{
@@ -863,8 +863,8 @@ private void UpdateCronLoadingVisuals()
863863

864864
private void ShowDisconnected()
865865
{
866-
ConnectionInfoBar.Title = "Gateway disconnected";
867-
ConnectionInfoBar.Message = "Connect to a gateway to load cron jobs.";
866+
ConnectionInfoBar.Title = LocalizationHelper.GetString("CronPage_GatewayDisconnected.Title");
867+
ConnectionInfoBar.Message = LocalizationHelper.GetString("CronPage_GatewayDisconnected.Message");
868868
ConnectionInfoBar.Severity = InfoBarSeverity.Warning;
869869
ConnectionInfoBar.IsOpen = true;
870870
}

src/OpenClaw.Tray.WinUI/Pages/DebugPage.xaml.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -150,27 +150,27 @@ private void UpdateStatusInfoBar()
150150
{
151151
case ConnectionStatus.Connected:
152152
StatusInfoBar.Severity = InfoBarSeverity.Success;
153-
StatusInfoBar.Title = "Connected";
153+
StatusInfoBar.Title = LocalizationHelper.GetConnectionStatusText(status);
154154
StatusInfoBar.Message = $"OpenClaw is connected to {gatewayDisplay}.";
155155
break;
156156
case ConnectionStatus.Connecting:
157157
StatusInfoBar.Severity = InfoBarSeverity.Informational;
158-
StatusInfoBar.Title = "Connecting";
158+
StatusInfoBar.Title = LocalizationHelper.GetConnectionStatusText(status);
159159
StatusInfoBar.Message = $"Connecting to {gatewayDisplay}…";
160160
break;
161161
case ConnectionStatus.Disconnected:
162162
StatusInfoBar.Severity = InfoBarSeverity.Warning;
163-
StatusInfoBar.Title = "Disconnected";
163+
StatusInfoBar.Title = LocalizationHelper.GetConnectionStatusText(status);
164164
StatusInfoBar.Message = $"Not connected. Gateway: {gatewayDisplay}.";
165165
break;
166166
case ConnectionStatus.Error:
167167
StatusInfoBar.Severity = InfoBarSeverity.Error;
168-
StatusInfoBar.Title = "Connection error";
168+
StatusInfoBar.Title = LocalizationHelper.GetConnectionStatusText(status);
169169
StatusInfoBar.Message = $"Last gateway: {gatewayDisplay}. See the event timeline.";
170170
break;
171171
default:
172172
StatusInfoBar.Severity = InfoBarSeverity.Informational;
173-
StatusInfoBar.Title = "Status unknown";
173+
StatusInfoBar.Title = LocalizationHelper.GetConnectionStatusText(status);
174174
StatusInfoBar.Message = $"Gateway: {gatewayDisplay}.";
175175
break;
176176
}

src/OpenClaw.Tray.WinUI/Pages/SessionsPage.xaml.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Microsoft.UI.Xaml.Controls;
44
using Microsoft.UI.Xaml.Media;
55
using OpenClaw.Shared;
6+
using OpenClawTray.Helpers;
67
using OpenClawTray.Services;
78
using OpenClawTray.Windows;
89
using System;
@@ -359,8 +360,8 @@ private static string FormatTokenCount(long n)
359360

360361
private void ShowDisconnected()
361362
{
362-
ConnectionInfoBar.Title = "Gateway disconnected";
363-
ConnectionInfoBar.Message = "Connect to a gateway to load sessions.";
363+
ConnectionInfoBar.Title = LocalizationHelper.GetString("SessionsPage_GatewayDisconnected.Title");
364+
ConnectionInfoBar.Message = LocalizationHelper.GetString("SessionsPage_GatewayDisconnected.Message");
364365
ConnectionInfoBar.Severity = InfoBarSeverity.Warning;
365366
ConnectionInfoBar.IsOpen = true;
366367
RefreshButton.IsEnabled = false;

src/OpenClaw.Tray.WinUI/Pages/SkillsPage.xaml.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Microsoft.UI.Xaml.Controls;
33
using Microsoft.UI.Xaml.Media;
44
using OpenClaw.Shared;
5+
using OpenClawTray.Helpers;
56
using OpenClawTray.Services;
67
using System.Collections.Generic;
78
using System.ComponentModel;
@@ -204,12 +205,12 @@ private void RebuildCards()
204205
foreach (var s in disabled)
205206
DisabledPanel.Children.Add(BuildCard(s));
206207

207-
EnabledHeaderText.Text = $"Enabled ({enabled.Count})";
208-
DisabledHeaderText.Text = $"Disabled ({disabled.Count})";
208+
EnabledHeaderText.Text = LocalizationHelper.Format("SkillsPage_EnabledHeaderFormat", enabled.Count);
209+
DisabledHeaderText.Text = LocalizationHelper.Format("SkillsPage_DisabledHeaderFormat", disabled.Count);
209210
DisabledExpander.Visibility = disabled.Count > 0 ? Visibility.Visible : Visibility.Collapsed;
210211

211212
var total = _allSkills.Count;
212-
CountText.Text = total > 0 ? $"({enabled.Count}/{total} enabled)" : "";
213+
CountText.Text = total > 0 ? LocalizationHelper.Format("SkillsPage_CountFormat", enabled.Count, total) : "";
213214

214215
if (total > 0)
215216
{
@@ -256,7 +257,7 @@ private Grid BuildCard(SkillData s)
256257
};
257258
badge.Child = new TextBlock
258259
{
259-
Text = s.IsEnabled ? "Enabled" : "Disabled",
260+
Text = LocalizationHelper.GetString(s.IsEnabled ? "SkillsPage_BadgeEnabled" : "SkillsPage_BadgeDisabled"),
260261
FontSize = 11,
261262
FontWeight = Microsoft.UI.Text.FontWeights.SemiBold,
262263
Foreground = (Brush)Application.Current.Resources[badgeFgKey],

src/OpenClaw.Tray.WinUI/Pages/UsagePage.xaml.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Microsoft.UI.Xaml.Controls;
33
using OpenClaw.Connection;
44
using OpenClaw.Shared;
5+
using OpenClawTray.Helpers;
56
using OpenClawTray.Services;
67
using System;
78
using System.Collections.Generic;
@@ -330,8 +331,8 @@ private void UpdateProviderLoadingVisuals()
330331

331332
private void ShowDisconnected()
332333
{
333-
ConnectionInfoBar.Title = "Gateway disconnected";
334-
ConnectionInfoBar.Message = "Connect to a gateway to load usage data.";
334+
ConnectionInfoBar.Title = LocalizationHelper.GetString("UsagePage_GatewayDisconnected.Title");
335+
ConnectionInfoBar.Message = LocalizationHelper.GetString("UsagePage_GatewayDisconnected.Message");
335336
ConnectionInfoBar.Severity = InfoBarSeverity.Warning;
336337
ConnectionInfoBar.IsOpen = true;
337338
}

0 commit comments

Comments
 (0)