feat: complete change to gettext from homebrew i18n solution

This commit is contained in:
2026-05-03 22:28:25 +02:00
parent 4bee8cf1db
commit 4de8492c4f
96 changed files with 21579 additions and 1497 deletions

View File

@@ -3,7 +3,6 @@ defmodule BDS.Rendering.Filters do
use Liquex.Filter
alias BDS.I18n
alias BDS.Slug
def i18n(value, language, _context) do
@@ -12,7 +11,7 @@ defmodule BDS.Rendering.Filters do
if key == "" do
""
else
I18n.translate(language, key)
BDS.Gettext.lgettext(language, "render", key)
end
end
@@ -59,7 +58,7 @@ defmodule BDS.Rendering.Filters do
default_macro_title(
Map.get(params, "title"),
language,
"render.video.youtubeTitle"
"YouTube video"
)
},
context
@@ -71,7 +70,7 @@ defmodule BDS.Rendering.Filters do
%{
"id" => Map.get(params, "id", ""),
"title" =>
default_macro_title(Map.get(params, "title"), language, "render.video.vimeoTitle")
default_macro_title(Map.get(params, "title"), language, "Vimeo video")
},
context
)
@@ -82,13 +81,17 @@ defmodule BDS.Rendering.Filters do
end)
end
defp default_macro_title(nil, language, translation_key),
do: I18n.translate(language, translation_key)
defp default_macro_title(nil, language, translation),
do: translated_macro_title(language, translation)
defp default_macro_title("", language, translation_key),
do: I18n.translate(language, translation_key)
defp default_macro_title("", language, translation),
do: translated_macro_title(language, translation)
defp default_macro_title(title, _language, _translation_key), do: title
defp default_macro_title(title, _language, _translation), do: title
defp translated_macro_title(language, translation) do
BDS.Gettext.lgettext(language, "render", translation)
end
defp parse_macro_params(nil), do: %{}
defp parse_macro_params(""), do: %{}

View File

@@ -1,8 +0,0 @@
defmodule BDS.Rendering.I18n do
@moduledoc false
defdelegate supported_languages(), to: BDS.I18n
defdelegate normalize_language(language), to: BDS.I18n
defdelegate translate(language, key), to: BDS.I18n
defdelegate flag(language), to: BDS.I18n
end

View File

@@ -0,0 +1,88 @@
defmodule BDS.Rendering.Labels do
@moduledoc """
Pre-translated render labels passed into Liquid template context.
All strings use constant msgids so mix gettext.extract can discover them.
The render locale is bound explicitly via Gettext.with_locale/3.
"""
use Gettext, backend: BDS.Gettext
def for_language(language) do
Gettext.with_locale(BDS.Gettext, language, fn ->
%{
taxonomy_label: dgettext("render", "Taxonomy"),
backlinks_label: dgettext("render", "Backlinks"),
linked_from_label: dgettext("render", "Linked from"),
archive_label: dgettext("render", "Archive"),
pagination_label: dgettext("render", "Pagination"),
newer_label: dgettext("render", "newer"),
older_label: dgettext("render", "older"),
calendar_open_label: dgettext("render", "Open calendar"),
calendar_loading_label: dgettext("render", "Loading calendar…"),
calendar_error_label: dgettext("render", "Calendar data could not be loaded."),
calendar_title_label: dgettext("render", "Archive calendar"),
calendar_close_label: dgettext("render", "Close calendar"),
language_switcher_label: dgettext("render", "Language"),
site_search_label: dgettext("render", "Site search"),
search_placeholder: dgettext("render", "Search..."),
not_found_message: dgettext("render", "The requested preview page could not be found."),
not_found_back_label: dgettext("render", "Back to preview home"),
youtube_video: dgettext("render", "YouTube video"),
vimeo_video: dgettext("render", "Vimeo video")
}
end)
end
def month_name(nil, _language), do: nil
def month_name(1, language) do
Gettext.with_locale(BDS.Gettext, language, fn -> dgettext("render", "January") end)
end
def month_name(2, language) do
Gettext.with_locale(BDS.Gettext, language, fn -> dgettext("render", "February") end)
end
def month_name(3, language) do
Gettext.with_locale(BDS.Gettext, language, fn -> dgettext("render", "March") end)
end
def month_name(4, language) do
Gettext.with_locale(BDS.Gettext, language, fn -> dgettext("render", "April") end)
end
def month_name(5, language) do
Gettext.with_locale(BDS.Gettext, language, fn -> dgettext("render", "May") end)
end
def month_name(6, language) do
Gettext.with_locale(BDS.Gettext, language, fn -> dgettext("render", "June") end)
end
def month_name(7, language) do
Gettext.with_locale(BDS.Gettext, language, fn -> dgettext("render", "July") end)
end
def month_name(8, language) do
Gettext.with_locale(BDS.Gettext, language, fn -> dgettext("render", "August") end)
end
def month_name(9, language) do
Gettext.with_locale(BDS.Gettext, language, fn -> dgettext("render", "September") end)
end
def month_name(10, language) do
Gettext.with_locale(BDS.Gettext, language, fn -> dgettext("render", "October") end)
end
def month_name(11, language) do
Gettext.with_locale(BDS.Gettext, language, fn -> dgettext("render", "November") end)
end
def month_name(12, language) do
Gettext.with_locale(BDS.Gettext, language, fn -> dgettext("render", "December") end)
end
def month_name(_month, _language), do: nil
end

View File

@@ -1,13 +1,14 @@
defmodule BDS.Rendering.ListArchive do
@moduledoc false
alias BDS.I18n
alias BDS.MapUtils
alias BDS.Persistence
alias BDS.Rendering.Labels
alias BDS.Rendering.LinksAndLanguages
alias BDS.Rendering.Metadata, as: RenderMetadata
alias BDS.Rendering.PostRendering
alias BDS.Rendering.TemplateSelection
use Gettext, backend: BDS.Gettext
def list_assigns(project_id, assigns) do
metadata = RenderMetadata.project_metadata(project_id)
@@ -95,7 +96,9 @@ defmodule BDS.Rendering.ListArchive do
canonical_media_path_by_source_path: canonical_media_paths,
post_data_json_by_id:
Enum.into(posts, %{}, fn post -> {post.id, PostRendering.post_data_json_value(post)} end),
day_blocks: day_blocks
day_blocks: day_blocks,
archive_month_name: Labels.month_name(Map.get(normalized_archive_context, :month), language),
labels: Labels.for_language(language)
}
end
@@ -145,7 +148,7 @@ defmodule BDS.Rendering.ListArchive do
Map.get(
assigns,
"not_found_message",
I18n.translate(language, "render.notFound.message")
BDS.Gettext.lgettext(language, "render", "The requested preview page could not be found.")
)
),
not_found_back_label:
@@ -155,9 +158,10 @@ defmodule BDS.Rendering.ListArchive do
Map.get(
assigns,
"not_found_back_label",
I18n.translate(language, "render.notFound.back")
BDS.Gettext.lgettext(language, "render", "Back to preview home")
)
)
),
labels: Labels.for_language(language)
}
end

View File

@@ -2,6 +2,7 @@ defmodule BDS.Rendering.PostRendering do
@moduledoc false
alias BDS.Rendering.Filters
alias BDS.Rendering.Labels
alias BDS.Rendering.LinksAndLanguages
alias BDS.Rendering.Metadata, as: RenderMetadata
alias BDS.Rendering.TemplateSelection
@@ -95,7 +96,8 @@ defmodule BDS.Rendering.PostRendering do
canonical_post_path_by_slug: canonical_post_paths,
canonical_media_path_by_source_path: canonical_media_paths,
post_data_json_by_id: post_data_json(post_assigns, post_record),
post: build_post_context(post_assigns, post_record, incoming_links, outgoing_links)
post: build_post_context(post_assigns, post_record, incoming_links, outgoing_links),
labels: Labels.for_language(language)
}
end