"me-web?" 0.7.1: changing the language changes all of it
Build / Desktop, server and tools (push) Successful in 1m7s
Release / Every platform, the server, the release (push) Successful in 8m0s

- Choosing another language now changes every text on the screen at once. Before, the titles, the question about the test from outside and most labels stayed in the previous language until the app was restarted.
- On narrow phones the name at the top shrinks to fit instead of slipping under the info button.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012CzABvBkbcFqoHdmi8b9WB
This commit is contained in:
thepraandClaude Opus 5.5 committed 2026-10-16 00:21:41 +02:00
1 parent 320936c688
commit 7e3be9ed41
5 files changed
+13 -4

No files matched your search

+4
View File
@@ -167,6 +167,10 @@ The Android release key: alias `meweb`, certificate SHA-256
right-to-left languages the `Localizer` wraps the name in U+2066/U+2069 (left-to-right isolate), the English fallback
included: without it Avalonia lays out ”me-web?“ alone on a line as `me-web?”“`, and inside a sentence the `?`
jumps to the other end of the name. A left-to-right mark after the name was tried and does not fix the lone title.
- **Avalonia 12 refreshes an indexer binding only on `PropertyChanged("Item")`.** `{s:Tr Key}` binds `Localizer.Instance[Key]`;
the WPF name `"Item[]"` and `""` refresh nothing, so until 0.7.1 changing the language left every `{s:Tr}` text in
the old one while the view models' `*Formatted` strings followed. The screenshot tool draws each `start-<code>`
shot by switching from English on a live view, which is the check that would have caught it.
- **Values worth copying are read-only text boxes with a copy button inside** (`Views/CopyField`): addresses, the
router, the network, the reverse name, the route, the STUN answers and a submission's code. The box is
left-to-right in every language and copies the raw value, never the bidi marks `Texts.Isolate` adds to display
+1 -1
View File
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<Version>0.7.0</Version>
<Version>0.7.1</Version>
<Product>“me-web?”</Product>
<Company>Arasaka di Hvozdikov Yevheniy</Company>
<Copyright>© 2026 Arasaka di Hvozdikov Yevheniy</Copyright>
+1 -1
View File
@@ -53,7 +53,7 @@ public sealed class Localizer : INotifyPropertyChanged
Culture = CultureFor(Language.Code);
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.DefaultThreadCurrentUICulture = Culture;
CultureInfo.CurrentCulture = CultureInfo.CurrentUICulture = Culture;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Item[]"));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Item"));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(string.Empty));
}
+3 -1
View File
@@ -59,7 +59,9 @@
<Grid>
<DockPanel>
<Grid DockPanel.Dock="Top" ColumnDefinitions="*,Auto,Auto" Margin="20,14,20,6">
<TextBlock Grid.Column="0" Classes="title" Text="{s:Tr AppName}" VerticalAlignment="Center" />
<Viewbox Grid.Column="0" StretchDirection="DownOnly" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0,0,10,0">
<TextBlock Classes="title" Text="{s:Tr AppName}" />
</Viewbox>
<Button Grid.Column="1" Classes="round" Margin="0,0,10,0" VerticalAlignment="Center"
AutomationProperties.AutomationId="main-contacts"
AutomationProperties.Name="{s:Tr Contacts}"
+4 -1
View File
@@ -19,6 +19,7 @@ Directory.CreateDirectory(output);
var session = HeadlessUnitTestSession.StartNew(typeof(ScreenshotEntry));
await session.Dispatch(async () =>
{
var saved = AppSettings.Read();
var run = await App.Services.GetRequiredService<CheckRunner>().Run((_, _) => { }, CancellationToken.None);
Console.WriteLine($"run: {string.Join(", ", run.Findings.Select(f => $"{f.Id}={f.Outcome}"))}");
foreach (var (width, height, label) in new[] { (1100, 1500, "desktop"), (400, 8000, "phone") })
@@ -29,7 +30,8 @@ await session.Dispatch(async () =>
Shoot(width, height, $"main-{label}-{code}", model => model.Replay(run));
if (label != "desktop")
{
Shoot(width, 860, $"start-{code}", _ => { });
Localizer.Instance.SetLanguage(Languages.Fallback);
Shoot(width, 860, $"start-{code}", model => model.SelectedLanguage = Languages.Find(code) ?? Languages.Fallback);
continue;
}
Shoot(width, 900, $"contacts-{code}", model => model.ShowContacts = true);
@@ -40,6 +42,7 @@ await session.Dispatch(async () =>
});
}
}
AppSettings.Write(saved);
return 0;
}, CancellationToken.None);
Environment.Exit(0);