aboutsummaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-07-24 21:56:44 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-07-24 21:56:44 +0200
commit1ab07867b425cfa8da207b904a297df29b1b177a (patch)
tree10342a28cded44e8895ac9dd0a507357bb20f43e /internal
parent8a7839cad92a264d68635e4c853347d763b8e457 (diff)
downloadlectio-1ab07867b425cfa8da207b904a297df29b1b177a.tar.gz
lectio-1ab07867b425cfa8da207b904a297df29b1b177a.zip
i18n: localize remaining web UI chrome (nav, bookmarks, settings)
The web nav links (settings, bookmarks, home), the /reader bookmark-add form placeholders and button, the /bookmarks filter/empty/delete labels, and every /settings field label were hardcoded English and stayed English under ui_language=pl. Route them all through i18n (en/pl) so the Polish UI is fully localized. No server.go change: every page's data already carries L: i18n.Get(cfg.UILanguage).
Diffstat (limited to 'internal')
-rw-r--r--internal/config/config.go2
-rw-r--r--internal/i18n/i18n.go60
-rw-r--r--internal/web/templates/bookmarks.html10
-rw-r--r--internal/web/templates/index.html4
-rw-r--r--internal/web/templates/reader.html12
-rw-r--r--internal/web/templates/settings.html24
6 files changed, 86 insertions, 26 deletions
diff --git a/internal/config/config.go b/internal/config/config.go
index f4c9fc8..e2ea0d3 100644
--- a/internal/config/config.go
+++ b/internal/config/config.go
@@ -25,7 +25,7 @@ var seedTOML []byte
// Version is lectio's release version, shared by every binary's
// -v/--version output (lectio, lectio-ui, lectio-web).
-const Version = "0.24.0"
+const Version = "0.24.1"
// validVersions are the five scripture versions lectio understands.
var validVersions = map[string]bool{
diff --git a/internal/i18n/i18n.go b/internal/i18n/i18n.go
index 2e730ee..16d489a 100644
--- a/internal/i18n/i18n.go
+++ b/internal/i18n/i18n.go
@@ -57,6 +57,24 @@ type UI struct {
// Web reader (lectio-web /reader) control labels.
NavReader, WebBook, WebChapter string
+ // Web nav-link labels shared across the index/reader/bookmarks pages.
+ NavHome, NavSettings, NavBookmarks string
+
+ // Web /reader bookmark-add form: the verse and tags placeholders and the
+ // submit button word (rendered after a ★). The note placeholder reuses
+ // ReaderMarkNote.
+ WebVerseOptional, WebTagsPlaceholder, WebAddBookmark string
+
+ // Web /bookmarks page chrome: the "all tags" filter link, the empty-list
+ // note, and the per-item delete button.
+ WebAllTags, WebNoBookmarks, WebDelete string
+
+ // Web /settings page labels (the ones without an existing shared field):
+ // the saved confirmation, the config-field labels, and the save button.
+ WebSaved, WebTradLang, WebUILang, WebSiglaStyle, WebDefaultVersion string
+ WebVersions, WebWebVersions, WebOffline, WebWidth, WebPort, WebPager string
+ WebSave string
+
// Export is the web daily-page download label (txt/md/pdf links).
Export, Calendar string
@@ -139,6 +157,27 @@ var enUI = UI{
NavReader: "reader",
WebBook: "book",
WebChapter: "chapter",
+ NavHome: "home",
+ NavSettings: "settings",
+ NavBookmarks: "bookmarks",
+ WebVerseOptional: "verse (optional)",
+ WebTagsPlaceholder: "tags, comma-separated",
+ WebAddBookmark: "bookmark",
+ WebAllTags: "all",
+ WebNoBookmarks: "No bookmarks yet.",
+ WebDelete: "delete",
+ WebSaved: "Saved.",
+ WebTradLang: "traditional language",
+ WebUILang: "UI language",
+ WebSiglaStyle: "sigla style",
+ WebDefaultVersion: "default version",
+ WebVersions: "versions",
+ WebWebVersions: "web versions",
+ WebOffline: "offline",
+ WebWidth: "width",
+ WebPort: "web port",
+ WebPager: "pager",
+ WebSave: "Save",
Export: "download",
Calendar: "month calendar",
NoReadingsDay: "no readings for this day",
@@ -204,6 +243,27 @@ var plUI = UI{
NavReader: "czytnik",
WebBook: "księga",
WebChapter: "rozdział",
+ NavHome: "strona główna",
+ NavSettings: "ustawienia",
+ NavBookmarks: "zakładki",
+ WebVerseOptional: "werset (opcjonalnie)",
+ WebTagsPlaceholder: "tagi, oddzielone przecinkami",
+ WebAddBookmark: "zakładka",
+ WebAllTags: "wszystkie",
+ WebNoBookmarks: "Brak zakładek.",
+ WebDelete: "usuń",
+ WebSaved: "Zapisano.",
+ WebTradLang: "język tradycyjny",
+ WebUILang: "język interfejsu",
+ WebSiglaStyle: "styl sigli",
+ WebDefaultVersion: "wersja domyślna",
+ WebVersions: "wersje",
+ WebWebVersions: "wersje web",
+ WebOffline: "offline",
+ WebWidth: "szerokość",
+ WebPort: "port web",
+ WebPager: "pager",
+ WebSave: "Zapisz",
Export: "pobierz",
Calendar: "kalendarz miesiąca",
NoReadingsDay: "brak czytań na ten dzień",
diff --git a/internal/web/templates/bookmarks.html b/internal/web/templates/bookmarks.html
index 3597b74..efc988a 100644
--- a/internal/web/templates/bookmarks.html
+++ b/internal/web/templates/bookmarks.html
@@ -16,19 +16,19 @@
<div class="page">
<p>
- <a class="nav-link" href="/reader">&larr; reader</a>
- <a class="nav-link" href="/">home</a>
+ <a class="nav-link" href="/reader">&larr; {{.L.NavReader}}</a>
+ <a class="nav-link" href="/">{{.L.NavHome}}</a>
</p>
<nav class="tag-filter">
- <a class="nav-link{{if eq .Tag ""}} active{{end}}" href="/bookmarks">all</a>
+ <a class="nav-link{{if eq .Tag ""}} active{{end}}" href="/bookmarks">{{.L.WebAllTags}}</a>
{{range .AllTags}}
<a class="nav-link{{if eq $.Tag .}} active{{end}}" href="/bookmarks?tag={{.}}">{{.}}</a>
{{end}}
</nav>
{{if not .Items}}
- <p>No bookmarks yet.</p>
+ <p>{{.L.WebNoBookmarks}}</p>
{{else}}
<div class="bookmarks">
{{range .Items}}
@@ -38,7 +38,7 @@
{{if .Tags}}<span class="tags">{{range .Tags}}#{{.}} {{end}}</span>{{end}}
<form method="post" action="/bookmarks/delete">
<input type="hidden" name="id" value="{{.ID}}">
- <button type="submit">delete</button>
+ <button type="submit">{{$.L.WebDelete}}</button>
</form>
</div>
{{end}}
diff --git a/internal/web/templates/index.html b/internal/web/templates/index.html
index 1e43df4..c8a48ed 100644
--- a/internal/web/templates/index.html
+++ b/internal/web/templates/index.html
@@ -62,8 +62,8 @@
</label>
<a class="nav-link" href="/reader">{{.L.NavReader}} &rarr;</a>
- <a class="nav-link" href="/settings">settings</a>
- <a class="nav-link" href="/bookmarks">bookmarks</a>
+ <a class="nav-link" href="/settings">{{.L.NavSettings}}</a>
+ <a class="nav-link" href="/bookmarks">{{.L.NavBookmarks}}</a>
</form>
<label class="theme-picker">{{.L.Theme}}
diff --git a/internal/web/templates/reader.html b/internal/web/templates/reader.html
index 02ecf38..ef144cc 100644
--- a/internal/web/templates/reader.html
+++ b/internal/web/templates/reader.html
@@ -20,8 +20,8 @@
<form class="controls" action="/reader" method="get"
hx-get="/reader" hx-target="#reader-root" hx-select="#reader-root" hx-swap="outerHTML" hx-trigger="change">
<a class="nav-link" href="/">&larr; {{.L.BannerReadings}}</a>
- <a class="nav-link" href="/settings">settings</a>
- <a class="nav-link" href="/bookmarks">bookmarks</a>
+ <a class="nav-link" href="/settings">{{.L.NavSettings}}</a>
+ <a class="nav-link" href="/bookmarks">{{.L.NavBookmarks}}</a>
<label>{{.L.WebBook}}
<select name="book">
@@ -58,10 +58,10 @@
<form class="bookmark-add" method="post" action="/reader/bookmark">
<input type="hidden" name="book" value="{{.Book}}">
<input type="hidden" name="chap" value="{{.Chap}}">
- <input type="number" name="verse" min="1" placeholder="verse (optional)">
- <input type="text" name="note" placeholder="note">
- <input type="text" name="tags" placeholder="tags, comma-separated">
- <button type="submit">★ bookmark</button>
+ <input type="number" name="verse" min="1" placeholder="{{.L.WebVerseOptional}}">
+ <input type="text" name="note" placeholder="{{.L.ReaderMarkNote}}">
+ <input type="text" name="tags" placeholder="{{.L.WebTagsPlaceholder}}">
+ <button type="submit">★ {{.L.WebAddBookmark}}</button>
</form>
{{/* #pane is OUTSIDE the form so its reading text inherits body's
diff --git a/internal/web/templates/settings.html b/internal/web/templates/settings.html
index bea6fb9..be08e6d 100644
--- a/internal/web/templates/settings.html
+++ b/internal/web/templates/settings.html
@@ -18,7 +18,7 @@
<p><a class="nav-link" href="/">&larr; {{.L.BannerReadings}}</a></p>
- {{if .Saved}}<p class="saved">Saved.</p>{{end}}
+ {{if .Saved}}<p class="saved">{{.L.WebSaved}}</p>{{end}}
{{if .Error}}<p class="error">{{.Error}}</p>{{end}}
<form class="settings" method="post" action="/settings">
@@ -30,21 +30,21 @@
</select>
</label>
- <label>traditional language
+ <label>{{.L.WebTradLang}}
<select name="traditional_lang">
<option value="pl" {{if eq .Cfg.TraditionalLang "pl"}}selected{{end}}>pl</option>
<option value="en" {{if eq .Cfg.TraditionalLang "en"}}selected{{end}}>en</option>
</select>
</label>
- <label>UI language
+ <label>{{.L.WebUILang}}
<select name="ui_language">
<option value="en" {{if eq .Cfg.UILanguage "en"}}selected{{end}}>en</option>
<option value="pl" {{if eq .Cfg.UILanguage "pl"}}selected{{end}}>pl</option>
</select>
</label>
- <label>sigla style
+ <label>{{.L.WebSiglaStyle}}
<select name="sigla_style">
<option value="auto" {{if eq .Cfg.SiglaStyle "auto"}}selected{{end}}>auto</option>
<option value="polish" {{if eq .Cfg.SiglaStyle "polish"}}selected{{end}}>polish</option>
@@ -66,37 +66,37 @@
</select>
</label>
- <label>default version
+ <label>{{.L.WebDefaultVersion}}
<select name="default_version">
{{range .VersionOpts}}<option value="{{.Code}}" {{if eq .Code $.Cfg.DefaultVersion}}selected{{end}}>{{.Code}}</option>{{end}}
</select>
</label>
<div class="row">
- versions
+ {{.L.WebVersions}}
{{range .VersionOpts}}<label><input type="checkbox" name="versions" value="{{.Code}}" {{if .Checked}}checked{{end}}> {{.Code}}</label>{{end}}
</div>
<div class="row">
- web versions
+ {{.L.WebWebVersions}}
{{range .WebVersionOpts}}<label><input type="checkbox" name="web_versions" value="{{.Code}}" {{if .Checked}}checked{{end}}> {{.Code}}</label>{{end}}
</div>
<div class="row">
<label><input type="checkbox" name="all" {{if .Cfg.All}}checked{{end}}> {{.L.OptAll}}</label>
- <label><input type="checkbox" name="offline" {{if .Cfg.Offline}}checked{{end}}> offline</label>
+ <label><input type="checkbox" name="offline" {{if .Cfg.Offline}}checked{{end}}> {{.L.WebOffline}}</label>
<label><input type="checkbox" name="web_mono" {{if .Cfg.WebMono}}checked{{end}}> {{.L.Mono}}</label>
</div>
- <label>width
+ <label>{{.L.WebWidth}}
<input type="number" name="width" value="{{.Cfg.Width}}">
</label>
- <label>web port
+ <label>{{.L.WebPort}}
<input type="number" name="web_port" value="{{.Cfg.WebPort}}">
</label>
- <label>pager
+ <label>{{.L.WebPager}}
<input type="text" name="pager" value="{{.Cfg.Pager}}">
</label>
@@ -105,7 +105,7 @@
</label>
<div class="row">
- <button type="submit">Save</button>
+ <button type="submit">{{.L.WebSave}}</button>
</div>
</form>