diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-23 22:08:56 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-23 22:08:56 +0200 |
| commit | 390f8cb146c69d8d3a0e6e0d76ea3546f30a7611 (patch) | |
| tree | 99510b1fe2d80bfc1ab26473a53def3318bed256 /internal/tui | |
| parent | 4c776396115c8120c3e1cb8fda993449fcdcd326 (diff) | |
| download | lectio-390f8cb146c69d8d3a0e6e0d76ea3546f30a7611.tar.gz lectio-390f8cb146c69d8d3a0e6e0d76ea3546f30a7611.zip | |
i18n: fix consistency-review gaps in ui_language (en/pl chrome)
Closes six findings from review of the ui_language feature so English
mode carries no leftover Polish UI text:
- Web: interlinear "no verses" note and the empty-day error fragment now
route through i18n instead of being unconditionally Polish.
- render.GatherVersion/GatherVerses/resolveRef's four lookup/citation-
failure blocks are now lang-aware (resolveRef gained a lang param).
- i18n.ErrorPrefix/NoReadingsFor lost a stray extra trailing space,
restoring the pre-i18n single-space TUI concatenation.
- render.LocalizeHeading now matches a heading's actual leading label
text against all known modern pl labels, rather than trusting the
label keyed by sec.PartID -- fixes split-feast days where PartID is
"drugie_czytanie" but the heading still reads "1. czytanie ...".
- cli bannerFor is lang-specific again (pl "na", en "for"), restoring
pl's exact pre-i18n wording instead of "--" for both languages.
- index.html's <html lang> now follows cfg.UILanguage instead of being
hardcoded "pl".
gofmt/vet clean, go test ./... green, all three binaries build, no new
go.mod deps. Consistency grep across cli/tui/web/render's live source
turns up only two non-displayed identifiers (a PartID slug list and a
pre-existing incipit-stripping constant on the pl scripture text itself).
Diffstat (limited to 'internal/tui')
| -rw-r--r-- | internal/tui/tui_test.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/internal/tui/tui_test.go b/internal/tui/tui_test.go index baa5c05..60b473b 100644 --- a/internal/tui/tui_test.go +++ b/internal/tui/tui_test.go @@ -1,6 +1,7 @@ package tui import ( + "errors" "strings" "testing" @@ -51,6 +52,48 @@ func TestBodyLinesLocalisesMessages(t *testing.T) { } } +// TestBodyLinesSingleSpaceConcatenation is a regression test for the +// i18n-migration whitespace bug: i18n.UI.NoReadingsFor/ErrorPrefix must +// carry exactly one trailing space, since bodyLines concatenates the date/ +// error string directly onto them with no separator of its own -- the +// pre-i18n TUI code produced "błąd: " + err / "brak czytań na " + date (one +// space), and the i18n fields regressed to two. +func TestBodyLinesSingleSpaceConcatenation(t *testing.T) { + enEmpty := Model{cfg: config.Config{UILanguage: "en"}, date: "2026-07-22"} + lines := enEmpty.bodyLines(80) + if len(lines) == 0 || !strings.Contains(lines[0], "no readings for 2026-07-22") { + t.Errorf("en no-readings bodyLines[0] = %q, want it to contain %q (single space)", lines[0], "no readings for 2026-07-22") + } + if strings.Contains(lines[0], "for 2026") { + t.Errorf("en no-readings bodyLines[0] = %q, has 2+ spaces before the date", lines[0]) + } + + plEmpty := Model{cfg: config.Config{UILanguage: "pl"}, date: "2026-07-22"} + lines = plEmpty.bodyLines(80) + if len(lines) == 0 || !strings.Contains(lines[0], "brak czytań na 2026-07-22") { + t.Errorf("pl no-readings bodyLines[0] = %q, want it to contain %q (single space)", lines[0], "brak czytań na 2026-07-22") + } + + errText := "boom" + enErr := Model{cfg: config.Config{UILanguage: "en"}, err: errors.New(errText)} + lines = enErr.bodyLines(80) + if len(lines) == 0 || !strings.Contains(lines[0], "error: "+errText) { + t.Errorf("en error bodyLines[0] = %q, want it to contain %q (single space)", lines[0], "error: "+errText) + } + if strings.Contains(lines[0], "error: ") { + t.Errorf("en error bodyLines[0] = %q, has 2+ spaces after \"error:\"", lines[0]) + } + + plErr := Model{cfg: config.Config{UILanguage: "pl"}, err: errors.New(errText)} + lines = plErr.bodyLines(80) + if len(lines) == 0 || !strings.Contains(lines[0], "błąd: "+errText) { + t.Errorf("pl error bodyLines[0] = %q, want it to contain %q (single space)", lines[0], "błąd: "+errText) + } + if strings.Contains(lines[0], "błąd: ") { + t.Errorf("pl error bodyLines[0] = %q, has 2+ spaces after \"błąd:\"", lines[0]) + } +} + // TestBodyLinesLocalisesHeading checks that a modern-lectionary section // heading's label word follows cfg.UILanguage while the citation stays // exactly as scraped (render.LocalizeHeading, brief §3b). |
