diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-28 18:15:29 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-07-28 18:15:29 +0200 |
| commit | 539a7c71b60115144959f712ef5966f48c63f9f0 (patch) | |
| tree | 0f07fe348a3a6c99d5a8713e39dd99640aa6efd9 /internal/config/config_test.go | |
| parent | 5e1664b8008675177a551aff1de371f54d4e20e4 (diff) | |
| download | lectio-539a7c71b60115144959f712ef5966f48c63f9f0.tar.gz lectio-539a7c71b60115144959f712ef5966f48c63f9f0.zip | |
naming: localise liturgical day names in any language
Add internal/naming, which renders temporal day names and celebration
display names from the calendar engine's slugs in any language. English is
the built-in baseline; a language is data -- an embedded lang/<code>.ini
(pl shipped) and/or a user file at <config dir>/names/<code>.ini that
overrides it key by key. Names compose from a small vocabulary plus
per-language format templates, so word order and grammatical case can
differ (e.g. Polish genitive "3. Niedziela Okresu Zwykłego"); any string a
language omits falls back to English.
- Move day-name generation out of calendar (calendar.HumanizeSlug removed,
calendar stays a pure engine) into naming.DayName; the English golden
cases carry over verbatim.
- naming.CelebrationName unifies the three duplicated resolvers
(cli/readings/calfeed): name.<lang> -> English -> Latin -> humanized slug.
Saint names stay in the calendar data (name.<lang>), overridable via
calendar layers.
- config: ui_language now accepts any code (lower-cased, not clamped to
en/pl) so names/<code>.ini applies; UI chrome still resolves en/pl and
falls back to English. Add NamesDir(); wire naming.SetUserDir (and the
previously unwired bible.SetUserCorporaDir) in the TUI and web mains too,
so external corpora and name files work across all three binaries.
Diffstat (limited to 'internal/config/config_test.go')
| -rw-r--r-- | internal/config/config_test.go | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/internal/config/config_test.go b/internal/config/config_test.go index 1035426..dd75808 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -169,18 +169,21 @@ func TestUILanguageLoadsPL(t *testing.T) { } } -func TestUILanguageNormalizesUnknown(t *testing.T) { +func TestUILanguagePreservesAnyCode(t *testing.T) { + // Any ui_language code is kept (lower-cased): it drives day/saint-name + // localisation via names/<code>.ini. The UI chrome, resolved through + // i18n.Get, still falls back to English for a code it has no table for. dir := t.TempDir() t.Setenv("XDG_CONFIG_HOME", dir) os.MkdirAll(filepath.Join(dir, "lectio"), 0o755) os.WriteFile(filepath.Join(dir, "lectio", "config.toml"), - []byte("ui_language = \"bogus\"\n"), 0o644) + []byte("ui_language = \"FR\"\n"), 0o644) cfg, err := Load() if err != nil { t.Fatal(err) } - if cfg.UILanguage != "en" { - t.Errorf("UILanguage = %q, want %q (normalized from bogus)", cfg.UILanguage, "en") + if cfg.UILanguage != "fr" { + t.Errorf("UILanguage = %q, want %q (lower-cased, not clamped)", cfg.UILanguage, "fr") } } |
