Every official language, in JSON: 113 listed, five shipped so far
Build / Desktop, server and tools (push) Successful in 33s

The language list comes from CLDR (official in a UN member state, plus the
six UN languages), with autonyms and text direction supplied for the 21
that ICU does not know. Strings move from resx to one JSON file per
language, looked up by code, so a language unknown to ICU or MSBuild still
loads; tools/strings.cs checks keys and placeholders in CI. Arabic, Hindi
and Chinese drafts prove right-to-left and system-font fallback.

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-15 01:18:13 +02:00
1 parent 7589121846
commit 8eaf9f36fc
17 files changed
+1072 -99

No files matched your search

+10 -4
View File
@@ -131,8 +131,11 @@ Scope: `src/`, `tools/`. Out of scope: generated files (`obj/`, `*.g.cs`), third
38. **Structured logging with `{Placeholder}` templates**, never interpolated strings (Microsoft.Extensions.Logging,
as passolo).
39. **Localization-first:** every user-facing string is a resx key in `src/MeWeb.App/Strings/Strings*.resx`; no
literals in XAML or view models (the product name `me-web?` excepted).
39. **Localization-first:** every user-facing string is a key in `src/MeWeb.App/Strings/<code>.json`, one flat
file per language, English the fallback; no literals in XAML or view models (the product name `me-web?`
excepted). JSON rather than resx on purpose: 21 of the 113 official languages are unknown to ICU and to MSBuild's
satellite-culture list, and a file looked up by code needs neither. Keys change only through
`tools/strings.cs set`, and `tools/strings.cs check` (keys and `{n}` placeholders against English) runs in CI.
40. **Central Package Management** (`Directory.Packages.props`); Avalonia packages move together through
`AvaloniaVersion`.
41. **Docs as convention:** `AGENT.md` (operational), `CLAUDE.md` (quick reference + pitfalls), `PATTERNS.md`
@@ -172,7 +175,10 @@ Scope: `src/`, `tools/`. Out of scope: generated files (`obj/`, `*.g.cs`), third
private, loopback, link-local, CGNAT, ULA and the server's own prefixes.
124. **Shared findings leave only after the person has read exactly what is sent**, and every submission can be
deleted with the id and token the app keeps.
125. **Every language ships; drafts say so.** `data/languages.json` marks each language `reviewed` or `draft`; a
draft shows its notice and the "suggest a correction" link. The root `FlowDirection` follows the language.
125. **Every language ships; drafts say so.** `data/languages.json` (written by `tools/languages.cs` from CLDR:
every language official or de facto official in a UN member state, plus the six UN languages) marks each
`reviewed` or `draft` and carries its own `rtl` flag, because ICU does not know every script's direction. The
picker lists a language once its strings file exists; a draft shows its notice and the "suggest a correction"
link; the root `FlowDirection` follows `rtl`.
126. **`?` appears only in display text.** File names, package ids and paths use `MeWeb`, `meweb` and
`software.arasaka.meweb`.