Skip to content

feat(localisation): specify interface localisation and language selection - #7

Merged
lessevv merged 1 commit into
mainfrom
feat/interface-localisation
Aug 1, 2026
Merged

feat(localisation): specify interface localisation and language selection#7
lessevv merged 1 commit into
mainfrom
feat/interface-localisation

Conversation

@lessevv

@lessevv lessevv commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

What

Adds G7 — Interface localisation and language selection, a new cross-cutting
UX feature, and reconciles the neighbouring pages around it.

The interface has only ever been English. G5 already rests on choosing the true
word in the user's own vocabulary; that argument does not survive the user not
reading English. Until now nothing in the catalogue owned the language the
interface runs in — only G5's Translation note, which declared interface
translation out of scope and no longer holds.

The feature (G7)

  • English (en) and Dutch (nl) to start, English as the source and fallback
    locale
    ; a further locale costs a registration and a translation, not a rewrite.
  • First-visit detection from the request's Accept-Language, best supported
    match, with English as the floor when nothing matches.
  • A per-user language preference stored beside the theme it mirrors, which
    beats detection on every later request and persists across sessions.
  • The switch lives in Settings, in the Appearance family.
  • Every user-facing string translatable; a missing key falls back to
    English
    , never to a raw key or blank; the active locale is announced for
    assistive technology; selection adds no outbound call.

Fourteen requirements, G7-R1 … G7-R14, every one marked (Open) — the
feature is specified ahead of its implementation, which is the sequence
GOV-R4
requires: the spec of a behavioural change merges before the code.

Reconciled around it

  • G5 — Translation section now points to G7 and keeps only the honesty rule
    that outlives any locale; G5-R14 reworded to that effect, not renumbered.
  • 20-architecture/data-model.md — language added to the per-user settings,
    beside theme.
  • 20-architecture/platform-matrix.md — a Language signal row beside Theme signal.
  • Feature count moved to fifty-two across the catalogue, root README, AGENTS,
    and the repo spec.

Checks

Ran locally before pushing: integrity.py clean, typos clean,
markdownlint-cli2 0 issues, lychee 0 errors.

…tion

The interface has only ever been English. G5 rests on choosing the true
word in the user's own vocabulary, and that argument does not survive the
user not reading English. Nothing in the catalogue owned the language the
interface runs in — only G5's Translation note, which declared interface
translation out of scope and now no longer holds.

G7 specifies it: English and Dutch to start with English as the source and
fallback locale, a locale added by registration and translation rather
than a rewrite, first-visit detection from the request's Accept-Language
with English as the floor, and a per-user preference stored beside the
theme it mirrors that beats detection on every later request. The switch
lives in Settings in the Appearance family; every user-facing string is
translatable; a missing key falls back to English rather than to a broken
surface; the active locale is announced for assistive technology; and
selection adds no outbound call. Fourteen requirements, every one marked
(Open) — the feature is specified ahead of its implementation, which is
the sequence GOV-R4 requires: the specification of a behavioural change
merges before the code that implements it.

Reconciled around it: G5's Translation section now points to G7 and keeps
only the honesty rule that outlives any locale, G5-R14 is reworded to that
same effect without renumbering, the data model and platform matrix gain
the language preference and the per-platform language signal beside their
theme counterparts, and the feature count moves to fifty-two.

Signed-off-by: Wessel Verheij <info@nightworks.io>
@sonarqubecloud

sonarqubecloud Bot commented Aug 1, 2026

Copy link
Copy Markdown

@lessevv
lessevv merged commit 765be2b into main Aug 1, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant