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/cli | |
| 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/cli')
| -rw-r--r-- | internal/cli/cli.go | 4 | ||||
| -rw-r--r-- | internal/cli/liturgy.go | 20 |
2 files changed, 10 insertions, 14 deletions
diff --git a/internal/cli/cli.go b/internal/cli/cli.go index c4f063d..1fc7ac0 100644 --- a/internal/cli/cli.go +++ b/internal/cli/cli.go @@ -19,6 +19,7 @@ import ( "github.com/lukaszkasprzak/lectio/internal/export" "github.com/lukaszkasprzak/lectio/internal/i18n" "github.com/lukaszkasprzak/lectio/internal/liturgy" + "github.com/lukaszkasprzak/lectio/internal/naming" "github.com/lukaszkasprzak/lectio/internal/readings" "github.com/lukaszkasprzak/lectio/internal/render" ) @@ -203,6 +204,9 @@ func Run(args []string, stdin io.Reader, stdout, stderr io.Writer) int { if dir, err := config.CorporaDir(); err == nil { bible.SetUserCorporaDir(dir) } + if dir, err := config.NamesDir(); err == nil { + naming.SetUserDir(dir) + } if lectionary != "" { cfg.Lectionary = lectionary } diff --git a/internal/cli/liturgy.go b/internal/cli/liturgy.go index 07a87bc..9d7f3b6 100644 --- a/internal/cli/liturgy.go +++ b/internal/cli/liturgy.go @@ -11,6 +11,7 @@ import ( "github.com/lukaszkasprzak/lectio/internal/calendar" "github.com/lukaszkasprzak/lectio/internal/config" "github.com/lukaszkasprzak/lectio/internal/i18n" + "github.com/lukaszkasprzak/lectio/internal/naming" "github.com/lukaszkasprzak/lectio/internal/render" ) @@ -149,23 +150,14 @@ func printLiturgicalDay(out io.Writer, cfg config.Config, tbl *bible.BookTable, } } -// celebrationName is the celebration's name in the UI language (falling back to -// English, then a humanized slug for temporal days that carry no proper name). +// celebrationName is the celebration's name in the UI language, resolved by +// naming.CelebrationName (name.<lang> -> English -> Latin -> humanized slug). +// A bare, unnamed feria renders as "(feria)". func celebrationName(cfg config.Config, c calendar.Celebration) string { - lang := "en" - if cfg.UILanguage == "pl" { - lang = "pl" - } - if n := c.Name[lang]; n != "" { - return n - } - if n := c.Name["en"]; n != "" { + if n := naming.CelebrationName(cfg.UILanguage, c); n != "" { return n } - if c.Slug == "" { - return "(feria)" - } - return calendar.HumanizeSlug(c.Slug) + return "(feria)" } func rankLabel(r calendar.Rank) string { |
