feat: add complete German localization

Add Deutsch across all card surfaces and backend flows, backed by the language registry introduced in #62. German loads as a fingerprint-checked page-shared locale chunk so EN/RU remain synchronous and the initial View budget stays intact. Root render gates prevent mixed-language flashes, retry once, and fail open to English. Extend parity, runtime, bundle, browser and visual coverage, plus contributor and user documentation.

Issue: #348
User-Visible: yes
This commit is contained in:
Matysh
2026-08-28 11:58:46 +03:00
parent 7a0702adea
commit 12cd8a1af3
50 changed files with 2265 additions and 524 deletions
+2 -1
View File
@@ -5,6 +5,7 @@ import test from 'node:test';
const cardSource = readFileSync(new URL('../src/houseplan-card.ts', import.meta.url), 'utf8');
const en = JSON.parse(readFileSync(new URL('../src/i18n/en.json', import.meta.url), 'utf8'));
const ru = JSON.parse(readFileSync(new URL('../src/i18n/ru.json', import.meta.url), 'utf8'));
const de = JSON.parse(readFileSync(new URL('../src/i18n/de.json', import.meta.url), 'utf8'));
test('runtime exposes only the unified Walls tool state', () => {
const toolType = cardSource.match(/type MarkupTool = ([^;]+);/)?.[1] || '';
@@ -18,7 +19,7 @@ test('runtime exposes only the unified Walls tool state', () => {
});
test('only old tool copy is removed while persisted partition copy remains', () => {
for (const locale of [en, ru]) {
for (const locale of [en, ru, de]) {
for (const key of [
'title.markup_partition',
'markup.hint_partition',