diff options
Diffstat (limited to 'internal/render/render.go')
| -rw-r--r-- | internal/render/render.go | 66 |
1 files changed, 48 insertions, 18 deletions
diff --git a/internal/render/render.go b/internal/render/render.go index b8d778c..c5a2ab0 100644 --- a/internal/render/render.go +++ b/internal/render/render.go @@ -9,17 +9,43 @@ import ( "strings" "github.com/lukaszkasprzak/lectio/internal/bible" + "github.com/lukaszkasprzak/lectio/internal/i18n" "github.com/lukaszkasprzak/lectio/internal/liturgy" ) -// versionLabels names each version for column headers / prose. Ported -// verbatim from ewangelia.py VERSION_LABELS. -var versionLabels = map[string]string{ - "pl": "Polski (niedziela.pl)", - "wuj": "Wujek (pol.)", - "vul": "Wulgata (lac.)", - "grb": "Grecki", - "drb": "Douay-Rheims (ang.)", +// versionLabel returns version's column-header/prose label in lang (see +// internal/i18n.Get), falling back to the bare version code if lang has no +// entry for it. lang="pl" reproduces ewangelia.py's original VERSION_LABELS +// exactly. +func versionLabel(version, lang string) string { + if l, ok := i18n.Get(lang).Version[version]; ok { + return l + } + return version +} + +// LocalizeHeading swaps a modern (niedziela.pl) section heading's leading +// label word for its lang translation, keeping the rest of the heading (the +// parenthetical citation, exactly as scraped) untouched: e.g. +// "Ewangelia (J 20, 1. 11-18)" with partID "ewangelia" and lang "en" becomes +// "Gospel (J 20, 1. 11-18)". It only ever localises the label word, never +// the citation or the verse text. +// +// It is a safe no-op (returns heading unchanged) unless all of: lang is +// "en", partID names a known modern-lectionary part (see +// internal/i18n.UI.PartLabel), and heading actually starts with that part's +// Polish label -- which excludes traditional (missalemeum) headings, already +// in the requested language, and anything unrecognised. +func LocalizeHeading(heading, partID, lang string) string { + if lang != "en" { + return heading + } + plLabel, ok := i18n.Get("pl").PartLabel[partID] + if !ok || !strings.HasPrefix(heading, plLabel) { + return heading + } + enLabel := i18n.Get(lang).PartLabel[partID] + return enLabel + heading[len(plLabel):] } // versionSystem maps a bible version to the Psalter system bible.ToEnglishRef @@ -49,8 +75,10 @@ const incipit = "Słowa Ewangelii" // lectionary selects how sec.Citation is read: "new" (modern/niedziela.pl) // citations are Polish and go through bible.ToEnglishRef; "traditional" // (missalemeum) citations are already English kjv-style and are used as-is. -func GatherVersion(version string, sec liturgy.Section, lectionary string) (label string, blocks []string) { - label = versionLabels[version] +// lang selects the UI chrome language the label comes from (see +// internal/i18n); it never affects the verse text/citation itself. +func GatherVersion(version string, sec liturgy.Section, lectionary, lang string) (label string, blocks []string) { + label = versionLabel(version, lang) if version == "pl" { return label, gatherPL(sec) } @@ -105,9 +133,10 @@ func resolveRef(version string, sec liturgy.Section, lectionary string) (string, // GatherVerses returns one version's verses for a section as raw bible.Verse // structs (for column/interlinear alignment). versified is false for "pl" // (paragraph text, no verse numbers) and on any resolution/lookup failure -- -// callers fall back to GatherVersion's string blocks for those. -func GatherVerses(version string, sec liturgy.Section, lectionary string) (label string, verses []bible.Verse, versified bool) { - label = versionLabels[version] +// callers fall back to GatherVersion's string blocks for those. lang selects +// the UI chrome language the label comes from, same as GatherVersion. +func GatherVerses(version string, sec liturgy.Section, lectionary, lang string) (label string, verses []bible.Verse, versified bool) { + label = versionLabel(version, lang) if version == "pl" { return label, nil, false } @@ -177,16 +206,17 @@ func OfflineVersions(versions []string) []string { } // Compare lays the versions of one reading section out as parallel columns, -// side by side, wrapped to fit width. Ports render_compare. -func Compare(secs []liturgy.Section, versions []string, width int, lectionary string) string { +// side by side, wrapped to fit width. Ports render_compare. lang selects the +// column-header label language (see GatherVersion). +func Compare(secs []liturgy.Section, versions []string, width int, lectionary, lang string) string { var out []string for _, sec := range secs { - out = append(out, compareSection(sec, versions, width, lectionary)) + out = append(out, compareSection(sec, versions, width, lectionary, lang)) } return strings.Join(out, "\n\n") } -func compareSection(sec liturgy.Section, versions []string, width int, lectionary string) string { +func compareSection(sec liturgy.Section, versions []string, width int, lectionary, lang string) string { type column struct { label string lines []string @@ -205,7 +235,7 @@ func compareSection(sec liturgy.Section, versions []string, width int, lectionar cols := make([]column, 0, n) height := 0 for _, v := range versions { - label, blocks := GatherVersion(v, sec, lectionary) + label, blocks := GatherVersion(v, sec, lectionary, lang) var lines []string for _, b := range blocks { lines = append(lines, strings.Split(wrap(b, w), "\n")...) |
