fix: A1-12 functional client-side search with real PagefindUI and fragment index

This commit is contained in:
2026-05-29 10:29:42 +02:00
parent 5b619f492a
commit babae1838d
23 changed files with 1038 additions and 485 deletions

View File

@@ -21,7 +21,7 @@ Gap categories: **SC** = spec correct, fix code | **CS** = code correct, update
| A1-9 | ~~17 preset colors + custom hex in tag picker~~ | editor_tags.allium | `ColourPicker` hook + popover with 17 preset swatches grid and custom hex input, wired to both create and edit forms | **Resolved:** replaced native `<input type="color">` with `ColourPickerPopover` component (17 presets, custom hex #RRGGBB, immediate selection), JS hook for click-away dismiss, 1 test added |
| A1-10 | ~~Template file written on create~~ | engine_side_effects.allium:151-153 | `create_template` now computes `file_path` and writes template file with YAML frontmatter on create | **Resolved:** `create_template/1` writes `templates/{slug}.liquid` on create, `next_template_file_path` always computes path, 1 test added |
| A1-11 | ~~Graceful shutdown with inflight request tracking~~ | preview.allium:47-48 | `stop_preview` now closes the listener, parks the reply, and drains monitored inflight request tasks before reporting stopped | **Resolved:** acceptor transfers socket ownership to each request task; GenServer monitors inflight tasks, `begin_graceful_stop` stops accepting and finalizes via `:DOWN`/`:drain_timeout` (5s force-kill cap), 1 test added |
| A1-12 | Real Pagefind integration for search | generation.allium:208 | Stub only: `pagefind-ui.js` is one-liner, `PagefindUI` never defined, search-runtime.js silently bails, client-side search non-functional | Fix code: bundle real Pagefind, build proper fragment index, wire PagefindUI |
| A1-12 | ~~Real Pagefind integration for search~~ | generation.allium:208 | Functional client-side search: `PagefindUI` defined in bundled `pagefind-ui.js`, fragment index records url/title/body-scoped text per page, search-runtime wires it up | **Resolved:** bundled real `PagefindUI` (fetch index, ranked full-text match, highlighted excerpts) + `pagefind-ui.css` as local assets read into `Pagefind`; index scoped to `data-pagefind-body` (unmarked pages excluded per PagefindHtmlMarking), title from `<title>`/`<h1>`; localized "No results found" label via `data-search-no-results` (de/fr/it/es); 3 unit tests added |
| A1-13 | Git sidebar shows only "Working tree" placeholder | sidebar_views.allium:651-770 | `sidebar.ex:782-798` returns single entity_list item; `BDS.Git` has full status/diff/commit/history/fetch/pull/push/prune_lfs but sidebar doesn't use it | Fix code: wire sidebar `git_view/0` to `BDS.Git` — render branch, ahead/behind, status file list, commit input, history entries, action buttons per spec |
| A1-14 | Embedding uses TF-IDF hash projection instead of real neural model | embedding.allium:44-53, invariants ModelCaching/VectorCacheInDb | `backends/in_app.ex` hashes terms into sparse vectors via `:erlang.phash2`; no ONNX model, no `"query: "` prefix, no mean pooling, vectors stored as JSON text not Float32Array BLOB, snapshot-based neighbor lookup instead of USearch HNSW index | Fix code: (1) add Bumblebee + ONNX runtime deps to run `Xenova/multilingual-e5-small`, (2) implement lazy model download + cache in app data dir, (3) `"query: "` prefix + mean pooling + L2 norm in backend, (4) store vectors as binary BLOB (1536 bytes), (5) replace JSON snapshot with USearch HNSW index (cosine, M=16, ef=128/64, 5s debounce), (6) cross-language semantic similarity must work |
| A1-15 | ~~Preview vs generation content source strategy undocumented~~ | preview.allium (no invariant), generation.allium (no invariant) | Generation uses only published .md file content (`Generation.Data` snapshots set `content: nil`); preview includes published+draft posts and prefers DB content over file (`Preview.Router` queries `:published`/`:draft`, uses `editor_body`) | **Resolved:** added `PreviewDraftOverlay` invariant to preview.allium and `GenerationPublishedOnly` invariant to generation.allium; both cross-reference each other; code already correct, 3 tests added for draft-in-preview behavior |

View File

@@ -7,10 +7,25 @@ defmodule BDS.Generation.Pagefind do
@typedoc "A (relative_path, content) generated file tuple."
@type generated_file :: {String.t(), String.t()}
@assets_dir Application.app_dir(:bds, "priv/preview_assets/assets")
@ui_js_path Path.join(@assets_dir, "pagefind-ui.js")
@ui_css_path Path.join(@assets_dir, "pagefind-ui.css")
@external_resource @ui_js_path
@external_resource @ui_css_path
@ui_js File.read!(@ui_js_path)
@ui_css File.read!(@ui_css_path)
@doc """
Build the per-language Pagefind index outputs (`pagefind/index.json`,
`pagefind/pagefind-ui.js`, `pagefind/pagefind-ui.css`) for every blog
language declared on the plan.
The fragment index records one entry per indexable page, where indexable
means the page carries a `data-pagefind-body` region. Each entry stores the
page URL, its title, and the body text scoped to that region — mirroring
Pagefind's behaviour of ignoring content outside `data-pagefind-body`.
"""
@spec build_outputs(map(), [html_output()]) :: [generated_file()]
def build_outputs(plan, html_outputs) do
@@ -31,8 +46,8 @@ defmodule BDS.Generation.Pagefind do
[
{Path.join(prefix ++ ["index.json"]),
Jason.encode!(%{"language" => language, "pages" => pages})},
{Path.join(prefix ++ ["pagefind-ui.js"]), ui_js(language)},
{Path.join(prefix ++ ["pagefind-ui.css"]), ui_css()}
{Path.join(prefix ++ ["pagefind-ui.js"]), @ui_js},
{Path.join(prefix ++ ["pagefind-ui.css"]), @ui_css}
]
end)
end
@@ -43,11 +58,14 @@ defmodule BDS.Generation.Pagefind do
String.ends_with?(relative_path, ".html") and
language_match?(relative_path, route_language, other_prefixes)
end)
|> Enum.map(fn {relative_path, content} ->
%{
"url" => "/" <> relative_path,
"text" => text(content)
}
|> Enum.flat_map(fn {relative_path, content} ->
case body_text(content) do
nil ->
[]
text ->
[%{"url" => "/" <> relative_path, "title" => title(content), "text" => text}]
end
end)
end
@@ -60,19 +78,94 @@ defmodule BDS.Generation.Pagefind do
defp language_match?(relative_path, route_language, _other_prefixes),
do: String.starts_with?(relative_path, route_language <> "/")
defp text(content) do
content
# Extract the indexable body text scoped to the data-pagefind-body element.
# Returns nil when the page is not marked, so unmarked pages are excluded
# from the index entirely (matching Pagefind semantics).
defp body_text(content) do
case Regex.run(~r/<([a-zA-Z0-9]+)[^>]*\bdata-pagefind-body\b[^>]*>/, content,
return: :index
) do
[{open_start, open_len}, {tag_start, tag_len}] ->
tag = binary_part(content, tag_start, tag_len)
region = scoped_region(content, tag, open_start + open_len)
plain_text(region)
_no_match ->
nil
end
end
# Capture the inner HTML of the marked element by balancing same-tag
# open/close pairs from the opening tag onward.
defp scoped_region(content, tag, body_start) do
rest = binary_part(content, body_start, byte_size(content) - body_start)
open_re = Regex.compile!("<#{tag}\\b", "i")
close_re = Regex.compile!("</#{tag}\\s*>", "i")
events =
(Regex.scan(open_re, rest, return: :index) ++ Regex.scan(close_re, rest, return: :index))
|> Enum.map(fn [{pos, _len}] -> pos end)
|> Enum.map(fn pos -> {pos, event_kind(rest, pos, tag)} end)
|> Enum.sort_by(&elem(&1, 0))
close_at = balanced_close(events, 0)
case close_at do
nil -> rest
pos -> binary_part(rest, 0, pos)
end
end
defp event_kind(rest, pos, tag) do
if String.starts_with?(binary_part(rest, pos, min(2 + byte_size(tag), byte_size(rest) - pos)), "</") do
:close
else
:open
end
end
defp balanced_close([], _depth), do: nil
defp balanced_close([{pos, :close} | _rest], 0), do: pos
defp balanced_close([{_pos, :close} | rest], depth),
do: balanced_close(rest, depth - 1)
defp balanced_close([{_pos, :open} | rest], depth),
do: balanced_close(rest, depth + 1)
defp title(content) do
tag_text(content, ~r/<title[^>]*>(.*?)<\/title>/si) ||
tag_text(content, ~r/<h1[^>]*>(.*?)<\/h1>/si) ||
""
end
defp tag_text(content, regex) do
case Regex.run(regex, content) do
[_full, raw] -> raw |> plain_text() |> nil_if_blank()
_no_match -> nil
end
end
defp nil_if_blank(""), do: nil
defp nil_if_blank(value), do: value
defp plain_text(html) do
html
|> String.replace(~r/<[^>]+>/, " ")
|> decode_entities()
|> String.replace(~r/\s+/u, " ")
|> String.trim()
end
defp ui_js(language) do
"window.bDSPagefind = { language: #{Jason.encode!(language)} };\n"
end
defp ui_css do
".pagefind-ui{display:block;}\n"
defp decode_entities(text) do
text
|> String.replace("&amp;", "&")
|> String.replace("&lt;", "<")
|> String.replace("&gt;", ">")
|> String.replace("&quot;", "\"")
|> String.replace("&#39;", "'")
|> String.replace("&nbsp;", " ")
end
defp route_language(main_language, language) when main_language == language, do: nil

View File

@@ -27,6 +27,7 @@ defmodule BDS.Rendering.Labels do
language_switcher_label: dgettext("render", "Language"),
site_search_label: dgettext("render", "Site search"),
search_placeholder: dgettext("render", "Search..."),
search_no_results: dgettext("render", "No results found"),
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"),

View File

@@ -15,7 +15,7 @@
</svg>
</button>
<div class="blog-search-panel" data-blog-search-panel hidden>
<div id="blog-search" data-blog-search-root data-search-placeholder="{{ labels.search_placeholder }}"></div>
<div id="blog-search" data-blog-search-root data-search-placeholder="{{ labels.search_placeholder }}" data-search-no-results="{{ labels.search_no_results }}"></div>
</div>
</div>
</nav>
@@ -35,7 +35,7 @@
</svg>
</button>
<div class="blog-search-panel" data-blog-search-panel hidden>
<div id="blog-search" data-blog-search-root data-search-placeholder="{{ labels.search_placeholder }}"></div>
<div id="blog-search" data-blog-search-root data-search-placeholder="{{ labels.search_placeholder }}" data-search-no-results="{{ labels.search_no_results }}"></div>
</div>
</div>
{% endif %}

View File

@@ -5,7 +5,7 @@
msgid "Archive"
msgstr "Archiv"
#: lib/bds/rendering/labels.ex:54
#: lib/bds/rendering/labels.ex:55
#, elixir-autogen, elixir-format
msgid "April"
msgstr "Apr."
@@ -15,7 +15,7 @@ msgstr "Apr."
msgid "Archive calendar"
msgstr "Archiv"
#: lib/bds/rendering/labels.ex:70
#: lib/bds/rendering/labels.ex:71
#, elixir-autogen, elixir-format
msgid "August"
msgstr "Aug."
@@ -35,27 +35,27 @@ msgstr "Kalenderdaten konnten nicht geladen werden."
msgid "Close calendar"
msgstr "Kalender schließen"
#: lib/bds/rendering/labels.ex:86
#: lib/bds/rendering/labels.ex:87
#, elixir-autogen, elixir-format
msgid "December"
msgstr "Dezember"
#: lib/bds/rendering/labels.ex:46
#: lib/bds/rendering/labels.ex:47
#, elixir-autogen, elixir-format
msgid "February"
msgstr "Februar"
#: lib/bds/rendering/labels.ex:42
#: lib/bds/rendering/labels.ex:43
#, elixir-autogen, elixir-format
msgid "January"
msgstr "Januar"
#: lib/bds/rendering/labels.ex:66
#: lib/bds/rendering/labels.ex:67
#, elixir-autogen, elixir-format
msgid "July"
msgstr "Juli"
#: lib/bds/rendering/labels.ex:62
#: lib/bds/rendering/labels.ex:63
#, elixir-autogen, elixir-format
msgid "June"
msgstr "Juni"
@@ -75,22 +75,22 @@ msgstr "Verlinkt von"
msgid "Loading calendar…"
msgstr "Kalender wird geladen …"
#: lib/bds/rendering/labels.ex:50
#: lib/bds/rendering/labels.ex:51
#, elixir-autogen, elixir-format
msgid "March"
msgstr "März"
#: lib/bds/rendering/labels.ex:58
#: lib/bds/rendering/labels.ex:59
#, elixir-autogen, elixir-format
msgid "May"
msgstr "Mai"
#: lib/bds/rendering/labels.ex:82
#: lib/bds/rendering/labels.ex:83
#, elixir-autogen, elixir-format
msgid "November"
msgstr "Nov."
#: lib/bds/rendering/labels.ex:78
#: lib/bds/rendering/labels.ex:79
#, elixir-autogen, elixir-format
msgid "October"
msgstr "Oktober"
@@ -110,7 +110,7 @@ msgstr "Seitennummerierung"
msgid "Search..."
msgstr "Suchen..."
#: lib/bds/rendering/labels.ex:74
#: lib/bds/rendering/labels.ex:75
#, elixir-autogen, elixir-format
msgid "September"
msgstr "Sept."
@@ -135,22 +135,27 @@ msgstr "neuer"
msgid "older"
msgstr "älter"
#: lib/bds/rendering/labels.ex:31
#: lib/bds/rendering/labels.ex:32
#, elixir-autogen, elixir-format
msgid "Back to preview home"
msgstr "Zurück zur Vorschau-Startseite"
#: lib/bds/rendering/labels.ex:30
#: lib/bds/rendering/labels.ex:31
#, elixir-autogen, elixir-format
msgid "The requested preview page could not be found."
msgstr "Die angeforderte Vorschauseite konnte nicht gefunden werden."
#: lib/bds/rendering/labels.ex:33
#: lib/bds/rendering/labels.ex:34
#, elixir-autogen, elixir-format
msgid "Vimeo video"
msgstr "Vimeo-Video"
#: lib/bds/rendering/labels.ex:32
#: lib/bds/rendering/labels.ex:33
#, elixir-autogen, elixir-format
msgid "YouTube video"
msgstr "YouTube-Video"
#: lib/bds/rendering/labels.ex:30
#, elixir-autogen, elixir-format
msgid "No results found"
msgstr "Keine Ergebnisse gefunden"

View File

@@ -79,7 +79,7 @@ msgstr "KI-Einstellungen"
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:42
#: lib/bds/desktop/shell_live/overlay_manager.ex:72
#: lib/bds/desktop/shell_live/post_editor.ex:776
#: lib/bds/desktop/shell_live/post_editor.ex:781
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43
#, elixir-autogen, elixir-format
msgid "AI Suggestions"
@@ -257,14 +257,14 @@ msgid "Auto"
msgstr "Automatisch"
#: lib/bds/desktop/shell_data.ex:98
#: lib/bds/desktop/shell_live.ex:409
#: lib/bds/desktop/shell_live.ex:414
#: lib/bds/desktop/shell_live/chat_editor.ex:231
#: lib/bds/desktop/shell_live/media_editor.ex:156
#: lib/bds/desktop/shell_live/media_editor.ex:349
#: lib/bds/desktop/shell_live/media_editor.ex:538
#: lib/bds/desktop/shell_live/overlay_manager.ex:73
#: lib/bds/desktop/shell_live/post_editor.ex:643
#: lib/bds/desktop/shell_live/post_editor.ex:692
#: lib/bds/desktop/shell_live/post_editor.ex:648
#: lib/bds/desktop/shell_live/post_editor.ex:697
#, elixir-autogen, elixir-format
msgid "Automatic AI actions stay gated by airplane mode."
msgstr "Automatische KI-Aktionen bleiben durch den Flugmodus gesperrt."
@@ -404,7 +404,7 @@ msgstr "Kategorie-Standards, Render-Flags und Template-Zuordnung"
msgid "Category name is required"
msgstr "Kategoriename ist erforderlich"
#: lib/bds/desktop/shell_live.ex:932
#: lib/bds/desktop/shell_live.ex:937
#: lib/bds/desktop/shell_live/chat_editor.ex:87
#: lib/bds/desktop/shell_live/chat_editor.ex:230
#: lib/bds/desktop/shell_live/chat_editor.ex:318
@@ -537,7 +537,7 @@ msgstr "MCP-Konfiguration %{path} konnte nicht gelesen werden: %{reason}"
msgid "Could not write MCP config %{path}: %{reason}"
msgstr "MCP-Konfiguration %{path} konnte nicht geschrieben werden: %{reason}"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:42
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:48
#, elixir-autogen, elixir-format
msgid "Create"
msgstr "Erstellen"
@@ -649,7 +649,7 @@ msgstr "Standard-Bearbeitungsmodus und Diff-Darstellung"
#: lib/bds/desktop/shell_live/sidebar_delete.ex:179
#: lib/bds/desktop/shell_live/sidebar_delete.ex:181
#: lib/bds/desktop/shell_live/sidebar_delete.ex:182
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:58
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:70
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:15
#, elixir-autogen, elixir-format
msgid "Delete"
@@ -706,9 +706,9 @@ msgstr "Erkennen"
#: lib/bds/desktop/shell_live/media_editor.ex:199
#: lib/bds/desktop/shell_live/media_editor.ex:205
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:59
#: lib/bds/desktop/shell_live/post_editor.ex:642
#: lib/bds/desktop/shell_live/post_editor.ex:671
#: lib/bds/desktop/shell_live/post_editor.ex:677
#: lib/bds/desktop/shell_live/post_editor.ex:647
#: lib/bds/desktop/shell_live/post_editor.ex:676
#: lib/bds/desktop/shell_live/post_editor.ex:682
#, elixir-autogen, elixir-format
msgid "Detect Language"
msgstr "Sprache erkennen"
@@ -749,7 +749,7 @@ msgid "Discard changes and restore the published version"
msgstr "Änderungen verwerfen und veröffentlichte Version wiederherstellen"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:21
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:84
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:96
#, elixir-autogen, elixir-format
msgid "Discover"
msgstr "Entdecken"
@@ -991,7 +991,7 @@ msgstr "Galerie"
msgid "Generate Site"
msgstr "Website generieren"
#: lib/bds/desktop/shell_live.ex:933
#: lib/bds/desktop/shell_live.ex:938
#: lib/bds/ui/sidebar.ex:784
#, elixir-autogen, elixir-format
msgid "Git"
@@ -1004,7 +1004,7 @@ msgid "Git Diff"
msgstr "Git-Diff"
#: lib/bds/desktop/shell_data.ex:244
#: lib/bds/desktop/shell_live.ex:929
#: lib/bds/desktop/shell_live.ex:934
#: lib/bds/desktop/shell_live/panel_renderer.ex:171
#, elixir-autogen, elixir-format
msgid "Git Log"
@@ -1033,7 +1033,7 @@ msgstr "Host"
#: lib/bds/desktop/shell_data.ex:116
#: lib/bds/desktop/shell_live/index.html.heex:666
#: lib/bds/desktop/shell_live/media_editor.ex:703
#: lib/bds/desktop/shell_live/post_editor.ex:894
#: lib/bds/desktop/shell_live/post_editor.ex:899
#, elixir-autogen, elixir-format
msgid "Idle"
msgstr "Leerlauf"
@@ -1127,9 +1127,9 @@ msgstr "Importdefinitionen"
msgid "Import failed: %{error}"
msgstr "Import fehlgeschlagen: %{error}"
#: lib/bds/desktop/shell_live.ex:580
#: lib/bds/desktop/shell_live.ex:970
#: lib/bds/desktop/shell_live.ex:976
#: lib/bds/desktop/shell_live.ex:585
#: lib/bds/desktop/shell_live.ex:975
#: lib/bds/desktop/shell_live.ex:981
#: lib/bds/desktop/shell_live/sidebar_create.ex:47
#, elixir-autogen, elixir-format
msgid "Import media"
@@ -1204,7 +1204,7 @@ msgid "Language"
msgstr "Sprache"
#: lib/bds/desktop/shell_live/media_editor.ex:206
#: lib/bds/desktop/shell_live/post_editor.ex:678
#: lib/bds/desktop/shell_live/post_editor.ex:683
#, elixir-autogen, elixir-format
msgid "Language detection failed."
msgstr "Spracherkennung fehlgeschlagen."
@@ -1288,7 +1288,7 @@ msgstr "Zuordnen zu..."
msgid "Mapped"
msgstr "Zugeordnet"
#: lib/bds/desktop/shell_live/post_editor.ex:897
#: lib/bds/desktop/shell_live/post_editor.ex:902
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:120
#, elixir-autogen, elixir-format
msgid "Markdown"
@@ -1328,12 +1328,12 @@ msgstr "Medium gespeichert"
msgid "Menu"
msgstr "Menü"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:75
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:87
#, elixir-autogen, elixir-format
msgid "Merge"
msgstr "Zusammenführen"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:66
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:78
#: lib/bds/ui/sidebar.ex:747
#, elixir-autogen, elixir-format
msgid "Merge Tags"
@@ -1424,7 +1424,7 @@ msgstr "Neues Untermenü"
msgid "New Template"
msgstr "Neue Vorlage"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:52
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:64
#, elixir-autogen, elixir-format
msgid "No Template"
msgstr "Kein Template"
@@ -1721,7 +1721,7 @@ msgstr "Sonstige"
msgid "Other (%{count})"
msgstr "Andere (%{count})"
#: lib/bds/desktop/shell_live.ex:928
#: lib/bds/desktop/shell_live.ex:933
#: lib/bds/desktop/shell_live/panel_renderer.ex:83
#, elixir-autogen, elixir-format
msgid "Output"
@@ -1786,16 +1786,16 @@ msgid "Persist the detected language for this media item"
msgstr "Die erkannte Sprache für dieses Medium speichern"
#: lib/bds/desktop/shell_live/misc_editor.ex:742
#: lib/bds/desktop/shell_live/post_editor.ex:474
#: lib/bds/desktop/shell_live/post_editor.ex:478
#: lib/bds/desktop/shell_live/post_editor.ex:513
#: lib/bds/desktop/shell_live/post_editor.ex:517
#: lib/bds/desktop/shell_live/post_editor.ex:552
#: lib/bds/desktop/shell_live/post_editor.ex:567
#: lib/bds/desktop/shell_live/post_editor.ex:596
#: lib/bds/desktop/shell_live/post_editor.ex:599
#: lib/bds/desktop/shell_live/post_editor.ex:629
#: lib/bds/desktop/shell_live/post_editor.ex:632
#: lib/bds/desktop/shell_live/post_editor.ex:479
#: lib/bds/desktop/shell_live/post_editor.ex:483
#: lib/bds/desktop/shell_live/post_editor.ex:518
#: lib/bds/desktop/shell_live/post_editor.ex:522
#: lib/bds/desktop/shell_live/post_editor.ex:557
#: lib/bds/desktop/shell_live/post_editor.ex:572
#: lib/bds/desktop/shell_live/post_editor.ex:601
#: lib/bds/desktop/shell_live/post_editor.ex:604
#: lib/bds/desktop/shell_live/post_editor.ex:634
#: lib/bds/desktop/shell_live/post_editor.ex:637
#: lib/bds/desktop/shell_live/sidebar_components.ex:515
#: lib/bds/desktop/shell_live/sidebar_delete.ex:174
#: lib/bds/ui/registry.ex:99
@@ -1825,12 +1825,12 @@ msgstr "Beitragsvorlage"
msgid "Post is marked as do-not-translate but has translations"
msgstr "Beitrag ist als nicht-übersetzen markiert, hat aber Übersetzungen"
#: lib/bds/desktop/shell_live/post_editor.ex:513
#: lib/bds/desktop/shell_live/post_editor.ex:518
#, elixir-autogen, elixir-format
msgid "Post published"
msgstr "Beitrag veröffentlicht"
#: lib/bds/desktop/shell_live/post_editor.ex:474
#: lib/bds/desktop/shell_live/post_editor.ex:479
#, elixir-autogen, elixir-format
msgid "Post saved"
msgstr "Beitrag gespeichert"
@@ -1854,7 +1854,7 @@ msgstr "Beiträge (%{count})"
msgid "Preferences"
msgstr "Einstellungen"
#: lib/bds/desktop/shell_live/post_editor.ex:898
#: lib/bds/desktop/shell_live/post_editor.ex:903
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:121
#, elixir-autogen, elixir-format
msgid "Preview"
@@ -1923,7 +1923,7 @@ msgid "Publish Selected"
msgstr "Ausgewähltes veröffentlichen"
#: lib/bds/desktop/shell_data.ex:181
#: lib/bds/desktop/shell_live/post_editor.ex:892
#: lib/bds/desktop/shell_live/post_editor.ex:897
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:456
#: lib/bds/ui/sidebar.ex:320
#, elixir-autogen, elixir-format
@@ -2121,7 +2121,7 @@ msgstr "Lösung"
msgid "Result"
msgstr "Ergebnis"
#: lib/bds/desktop/shell_live/post_editor.ex:893
#: lib/bds/desktop/shell_live/post_editor.ex:898
#, elixir-autogen, elixir-format
msgid "Reverted"
msgstr "Zurückgesetzt"
@@ -2161,7 +2161,7 @@ msgstr "SSH-Modus"
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:312
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:329
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:342
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:57
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:69
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:13
#, elixir-autogen, elixir-format
msgid "Save"
@@ -2173,7 +2173,7 @@ msgid "Save Translation"
msgstr "Übersetzung speichern"
#: lib/bds/desktop/shell_live/media_editor.ex:702
#: lib/bds/desktop/shell_live/post_editor.ex:891
#: lib/bds/desktop/shell_live/post_editor.ex:896
#, elixir-autogen, elixir-format
msgid "Saved"
msgstr "Gespeichert"
@@ -2431,7 +2431,7 @@ msgstr "Untermenü"
msgid "Switch project"
msgstr "Projekt wechseln"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:82
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:94
#, elixir-autogen, elixir-format
msgid "Sync"
msgstr "Synchronisieren"
@@ -2468,11 +2468,11 @@ msgstr "Schlagwortname"
#: lib/bds/desktop/shell_live/index.html.heex:325
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:161
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:158
#: lib/bds/desktop/shell_live/tags_editor.ex:94
#: lib/bds/desktop/shell_live/tags_editor.ex:136
#: lib/bds/desktop/shell_live/tags_editor.ex:189
#: lib/bds/desktop/shell_live/tags_editor.ex:203
#: lib/bds/desktop/shell_live/tags_editor.ex:234
#: lib/bds/desktop/shell_live/tags_editor.ex:104
#: lib/bds/desktop/shell_live/tags_editor.ex:166
#: lib/bds/desktop/shell_live/tags_editor.ex:219
#: lib/bds/desktop/shell_live/tags_editor.ex:233
#: lib/bds/desktop/shell_live/tags_editor.ex:264
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:11
#: lib/bds/ui/registry.ex:54
#: lib/bds/ui/registry.ex:103
@@ -2483,7 +2483,7 @@ msgstr "Schlagwortname"
msgid "Tags"
msgstr "Tags"
#: lib/bds/desktop/shell_live.ex:927
#: lib/bds/desktop/shell_live.ex:932
#: lib/bds/desktop/shell_live/panel_renderer.ex:54
#, elixir-autogen, elixir-format
msgid "Tasks"
@@ -2648,9 +2648,9 @@ msgstr "Seitenleiste umschalten"
#: lib/bds/desktop/shell_live/media_editor.ex:558
#: lib/bds/desktop/shell_live/media_editor.ex:563
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:76
#: lib/bds/desktop/shell_live/post_editor.ex:691
#: lib/bds/desktop/shell_live/post_editor.ex:720
#: lib/bds/desktop/shell_live/post_editor.ex:696
#: lib/bds/desktop/shell_live/post_editor.ex:725
#: lib/bds/desktop/shell_live/post_editor.ex:730
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:60
#, elixir-autogen, elixir-format
msgid "Translate"
@@ -2727,7 +2727,7 @@ msgstr "Verknüpfung mit Beitrag aufheben"
#: lib/bds/desktop/shell_live/media_editor.ex:701
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:10
#: lib/bds/desktop/shell_live/post_editor.ex:890
#: lib/bds/desktop/shell_live/post_editor.ex:895
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:7
#, elixir-autogen, elixir-format
msgid "Unsaved"
@@ -3179,12 +3179,12 @@ msgstr "Willkommen beim KI-Assistenten"
msgid "Comparing database and filesystem metadata"
msgstr "Vergleicht Datenbank- und Dateisystem-Metadaten"
#: lib/bds/desktop/shell_live.ex:650
#: lib/bds/desktop/shell_live.ex:655
#, elixir-autogen, elixir-format
msgid "Added %{count} images to post"
msgstr "%{count} Bilder zum Beitrag hinzugefügt"
#: lib/bds/desktop/shell_live.ex:621
#: lib/bds/desktop/shell_live.ex:626
#, elixir-autogen, elixir-format
msgid "Added %{title}"
msgstr "%{title} hinzugefügt"
@@ -3204,18 +3204,18 @@ msgstr "Endbenutzer-Anleitung für redaktionelle Arbeitsabläufe, Medien, Vorlag
msgid "Image Import Concurrency"
msgstr "Gleichzeitige Bildimporte"
#: lib/bds/desktop/shell_live.ex:408
#: lib/bds/desktop/shell_live.ex:421
#: lib/bds/desktop/shell_live.ex:621
#: lib/bds/desktop/shell_live.ex:649
#: lib/bds/desktop/shell_live.ex:658
#: lib/bds/desktop/shell_live.ex:665
#: lib/bds/desktop/shell_live.ex:413
#: lib/bds/desktop/shell_live.ex:426
#: lib/bds/desktop/shell_live.ex:626
#: lib/bds/desktop/shell_live.ex:654
#: lib/bds/desktop/shell_live.ex:663
#: lib/bds/desktop/shell_live.ex:670
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:407
#, elixir-autogen, elixir-format
msgid "Add Gallery Images"
msgstr "Galerie-Bilder hinzufügen"
#: lib/bds/desktop/shell_live.ex:666
#: lib/bds/desktop/shell_live.ex:671
#, elixir-autogen, elixir-format
msgid "Failed to process %{path}: %{reason}"
msgstr "%{path} konnte nicht verarbeitet werden: %{reason}"
@@ -3230,12 +3230,12 @@ msgstr "Archivieren"
msgid "Move this post to the archive"
msgstr "Diesen Beitrag ins Archiv verschieben"
#: lib/bds/desktop/shell_live/post_editor.ex:596
#: lib/bds/desktop/shell_live/post_editor.ex:601
#, elixir-autogen, elixir-format
msgid "Post archived"
msgstr "Beitrag archiviert"
#: lib/bds/desktop/shell_live/post_editor.ex:629
#: lib/bds/desktop/shell_live/post_editor.ex:634
#, elixir-autogen, elixir-format
msgid "Post unarchived"
msgstr "Beitrag wiederhergestellt"

View File

@@ -5,7 +5,7 @@
msgid "Archive"
msgstr ""
#: lib/bds/rendering/labels.ex:54
#: lib/bds/rendering/labels.ex:55
#, elixir-autogen, elixir-format
msgid "April"
msgstr ""
@@ -15,7 +15,7 @@ msgstr ""
msgid "Archive calendar"
msgstr ""
#: lib/bds/rendering/labels.ex:70
#: lib/bds/rendering/labels.ex:71
#, elixir-autogen, elixir-format
msgid "August"
msgstr ""
@@ -35,27 +35,27 @@ msgstr ""
msgid "Close calendar"
msgstr ""
#: lib/bds/rendering/labels.ex:86
#: lib/bds/rendering/labels.ex:87
#, elixir-autogen, elixir-format
msgid "December"
msgstr ""
#: lib/bds/rendering/labels.ex:46
#: lib/bds/rendering/labels.ex:47
#, elixir-autogen, elixir-format
msgid "February"
msgstr ""
#: lib/bds/rendering/labels.ex:42
#: lib/bds/rendering/labels.ex:43
#, elixir-autogen, elixir-format
msgid "January"
msgstr ""
#: lib/bds/rendering/labels.ex:66
#: lib/bds/rendering/labels.ex:67
#, elixir-autogen, elixir-format
msgid "July"
msgstr ""
#: lib/bds/rendering/labels.ex:62
#: lib/bds/rendering/labels.ex:63
#, elixir-autogen, elixir-format
msgid "June"
msgstr ""
@@ -75,22 +75,22 @@ msgstr ""
msgid "Loading calendar…"
msgstr ""
#: lib/bds/rendering/labels.ex:50
#: lib/bds/rendering/labels.ex:51
#, elixir-autogen, elixir-format
msgid "March"
msgstr ""
#: lib/bds/rendering/labels.ex:58
#: lib/bds/rendering/labels.ex:59
#, elixir-autogen, elixir-format
msgid "May"
msgstr ""
#: lib/bds/rendering/labels.ex:82
#: lib/bds/rendering/labels.ex:83
#, elixir-autogen, elixir-format
msgid "November"
msgstr ""
#: lib/bds/rendering/labels.ex:78
#: lib/bds/rendering/labels.ex:79
#, elixir-autogen, elixir-format
msgid "October"
msgstr ""
@@ -110,7 +110,7 @@ msgstr ""
msgid "Search..."
msgstr ""
#: lib/bds/rendering/labels.ex:74
#: lib/bds/rendering/labels.ex:75
#, elixir-autogen, elixir-format
msgid "September"
msgstr ""
@@ -135,22 +135,27 @@ msgstr ""
msgid "older"
msgstr ""
#: lib/bds/rendering/labels.ex:31
#: lib/bds/rendering/labels.ex:32
#, elixir-autogen, elixir-format
msgid "Back to preview home"
msgstr ""
#: lib/bds/rendering/labels.ex:30
#: lib/bds/rendering/labels.ex:31
#, elixir-autogen, elixir-format
msgid "The requested preview page could not be found."
msgstr ""
#: lib/bds/rendering/labels.ex:33
#: lib/bds/rendering/labels.ex:34
#, elixir-autogen, elixir-format
msgid "Vimeo video"
msgstr ""
#: lib/bds/rendering/labels.ex:32
#: lib/bds/rendering/labels.ex:33
#, elixir-autogen, elixir-format
msgid "YouTube video"
msgstr ""
#: lib/bds/rendering/labels.ex:30
#, elixir-autogen, elixir-format
msgid "No results found"
msgstr ""

View File

@@ -79,7 +79,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:42
#: lib/bds/desktop/shell_live/overlay_manager.ex:72
#: lib/bds/desktop/shell_live/post_editor.ex:776
#: lib/bds/desktop/shell_live/post_editor.ex:781
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43
#, elixir-autogen, elixir-format
msgid "AI Suggestions"
@@ -257,14 +257,14 @@ msgid "Auto"
msgstr ""
#: lib/bds/desktop/shell_data.ex:98
#: lib/bds/desktop/shell_live.ex:409
#: lib/bds/desktop/shell_live.ex:414
#: lib/bds/desktop/shell_live/chat_editor.ex:231
#: lib/bds/desktop/shell_live/media_editor.ex:156
#: lib/bds/desktop/shell_live/media_editor.ex:349
#: lib/bds/desktop/shell_live/media_editor.ex:538
#: lib/bds/desktop/shell_live/overlay_manager.ex:73
#: lib/bds/desktop/shell_live/post_editor.ex:643
#: lib/bds/desktop/shell_live/post_editor.ex:692
#: lib/bds/desktop/shell_live/post_editor.ex:648
#: lib/bds/desktop/shell_live/post_editor.ex:697
#, elixir-autogen, elixir-format
msgid "Automatic AI actions stay gated by airplane mode."
msgstr ""
@@ -404,7 +404,7 @@ msgstr ""
msgid "Category name is required"
msgstr ""
#: lib/bds/desktop/shell_live.ex:932
#: lib/bds/desktop/shell_live.ex:937
#: lib/bds/desktop/shell_live/chat_editor.ex:87
#: lib/bds/desktop/shell_live/chat_editor.ex:230
#: lib/bds/desktop/shell_live/chat_editor.ex:318
@@ -537,7 +537,7 @@ msgstr ""
msgid "Could not write MCP config %{path}: %{reason}"
msgstr ""
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:42
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:48
#, elixir-autogen, elixir-format
msgid "Create"
msgstr ""
@@ -649,7 +649,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/sidebar_delete.ex:179
#: lib/bds/desktop/shell_live/sidebar_delete.ex:181
#: lib/bds/desktop/shell_live/sidebar_delete.ex:182
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:58
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:70
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:15
#, elixir-autogen, elixir-format
msgid "Delete"
@@ -706,9 +706,9 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:199
#: lib/bds/desktop/shell_live/media_editor.ex:205
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:59
#: lib/bds/desktop/shell_live/post_editor.ex:642
#: lib/bds/desktop/shell_live/post_editor.ex:671
#: lib/bds/desktop/shell_live/post_editor.ex:677
#: lib/bds/desktop/shell_live/post_editor.ex:647
#: lib/bds/desktop/shell_live/post_editor.ex:676
#: lib/bds/desktop/shell_live/post_editor.ex:682
#, elixir-autogen, elixir-format
msgid "Detect Language"
msgstr ""
@@ -749,7 +749,7 @@ msgid "Discard changes and restore the published version"
msgstr ""
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:21
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:84
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:96
#, elixir-autogen, elixir-format
msgid "Discover"
msgstr ""
@@ -991,7 +991,7 @@ msgstr ""
msgid "Generate Site"
msgstr ""
#: lib/bds/desktop/shell_live.ex:933
#: lib/bds/desktop/shell_live.ex:938
#: lib/bds/ui/sidebar.ex:784
#, elixir-autogen, elixir-format
msgid "Git"
@@ -1004,7 +1004,7 @@ msgid "Git Diff"
msgstr ""
#: lib/bds/desktop/shell_data.ex:244
#: lib/bds/desktop/shell_live.ex:929
#: lib/bds/desktop/shell_live.ex:934
#: lib/bds/desktop/shell_live/panel_renderer.ex:171
#, elixir-autogen, elixir-format
msgid "Git Log"
@@ -1033,7 +1033,7 @@ msgstr ""
#: lib/bds/desktop/shell_data.ex:116
#: lib/bds/desktop/shell_live/index.html.heex:666
#: lib/bds/desktop/shell_live/media_editor.ex:703
#: lib/bds/desktop/shell_live/post_editor.ex:894
#: lib/bds/desktop/shell_live/post_editor.ex:899
#, elixir-autogen, elixir-format
msgid "Idle"
msgstr ""
@@ -1127,9 +1127,9 @@ msgstr ""
msgid "Import failed: %{error}"
msgstr ""
#: lib/bds/desktop/shell_live.ex:580
#: lib/bds/desktop/shell_live.ex:970
#: lib/bds/desktop/shell_live.ex:976
#: lib/bds/desktop/shell_live.ex:585
#: lib/bds/desktop/shell_live.ex:975
#: lib/bds/desktop/shell_live.ex:981
#: lib/bds/desktop/shell_live/sidebar_create.ex:47
#, elixir-autogen, elixir-format
msgid "Import media"
@@ -1204,7 +1204,7 @@ msgid "Language"
msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:206
#: lib/bds/desktop/shell_live/post_editor.ex:678
#: lib/bds/desktop/shell_live/post_editor.ex:683
#, elixir-autogen, elixir-format
msgid "Language detection failed."
msgstr ""
@@ -1288,7 +1288,7 @@ msgstr ""
msgid "Mapped"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:897
#: lib/bds/desktop/shell_live/post_editor.ex:902
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:120
#, elixir-autogen, elixir-format
msgid "Markdown"
@@ -1328,12 +1328,12 @@ msgstr ""
msgid "Menu"
msgstr ""
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:75
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:87
#, elixir-autogen, elixir-format
msgid "Merge"
msgstr ""
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:66
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:78
#: lib/bds/ui/sidebar.ex:747
#, elixir-autogen, elixir-format
msgid "Merge Tags"
@@ -1424,7 +1424,7 @@ msgstr ""
msgid "New Template"
msgstr ""
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:52
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:64
#, elixir-autogen, elixir-format
msgid "No Template"
msgstr ""
@@ -1721,7 +1721,7 @@ msgstr ""
msgid "Other (%{count})"
msgstr ""
#: lib/bds/desktop/shell_live.ex:928
#: lib/bds/desktop/shell_live.ex:933
#: lib/bds/desktop/shell_live/panel_renderer.ex:83
#, elixir-autogen, elixir-format
msgid "Output"
@@ -1786,16 +1786,16 @@ msgid "Persist the detected language for this media item"
msgstr ""
#: lib/bds/desktop/shell_live/misc_editor.ex:742
#: lib/bds/desktop/shell_live/post_editor.ex:474
#: lib/bds/desktop/shell_live/post_editor.ex:478
#: lib/bds/desktop/shell_live/post_editor.ex:513
#: lib/bds/desktop/shell_live/post_editor.ex:517
#: lib/bds/desktop/shell_live/post_editor.ex:552
#: lib/bds/desktop/shell_live/post_editor.ex:567
#: lib/bds/desktop/shell_live/post_editor.ex:596
#: lib/bds/desktop/shell_live/post_editor.ex:599
#: lib/bds/desktop/shell_live/post_editor.ex:629
#: lib/bds/desktop/shell_live/post_editor.ex:632
#: lib/bds/desktop/shell_live/post_editor.ex:479
#: lib/bds/desktop/shell_live/post_editor.ex:483
#: lib/bds/desktop/shell_live/post_editor.ex:518
#: lib/bds/desktop/shell_live/post_editor.ex:522
#: lib/bds/desktop/shell_live/post_editor.ex:557
#: lib/bds/desktop/shell_live/post_editor.ex:572
#: lib/bds/desktop/shell_live/post_editor.ex:601
#: lib/bds/desktop/shell_live/post_editor.ex:604
#: lib/bds/desktop/shell_live/post_editor.ex:634
#: lib/bds/desktop/shell_live/post_editor.ex:637
#: lib/bds/desktop/shell_live/sidebar_components.ex:515
#: lib/bds/desktop/shell_live/sidebar_delete.ex:174
#: lib/bds/ui/registry.ex:99
@@ -1825,12 +1825,12 @@ msgstr ""
msgid "Post is marked as do-not-translate but has translations"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:513
#: lib/bds/desktop/shell_live/post_editor.ex:518
#, elixir-autogen, elixir-format
msgid "Post published"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:474
#: lib/bds/desktop/shell_live/post_editor.ex:479
#, elixir-autogen, elixir-format
msgid "Post saved"
msgstr ""
@@ -1854,7 +1854,7 @@ msgstr ""
msgid "Preferences"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:898
#: lib/bds/desktop/shell_live/post_editor.ex:903
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:121
#, elixir-autogen, elixir-format
msgid "Preview"
@@ -1923,7 +1923,7 @@ msgid "Publish Selected"
msgstr ""
#: lib/bds/desktop/shell_data.ex:181
#: lib/bds/desktop/shell_live/post_editor.ex:892
#: lib/bds/desktop/shell_live/post_editor.ex:897
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:456
#: lib/bds/ui/sidebar.ex:320
#, elixir-autogen, elixir-format
@@ -2121,7 +2121,7 @@ msgstr ""
msgid "Result"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:893
#: lib/bds/desktop/shell_live/post_editor.ex:898
#, elixir-autogen, elixir-format
msgid "Reverted"
msgstr ""
@@ -2161,7 +2161,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:312
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:329
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:342
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:57
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:69
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:13
#, elixir-autogen, elixir-format
msgid "Save"
@@ -2173,7 +2173,7 @@ msgid "Save Translation"
msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:702
#: lib/bds/desktop/shell_live/post_editor.ex:891
#: lib/bds/desktop/shell_live/post_editor.ex:896
#, elixir-autogen, elixir-format
msgid "Saved"
msgstr ""
@@ -2431,7 +2431,7 @@ msgstr ""
msgid "Switch project"
msgstr ""
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:82
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:94
#, elixir-autogen, elixir-format
msgid "Sync"
msgstr ""
@@ -2468,11 +2468,11 @@ msgstr ""
#: lib/bds/desktop/shell_live/index.html.heex:325
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:161
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:158
#: lib/bds/desktop/shell_live/tags_editor.ex:94
#: lib/bds/desktop/shell_live/tags_editor.ex:136
#: lib/bds/desktop/shell_live/tags_editor.ex:189
#: lib/bds/desktop/shell_live/tags_editor.ex:203
#: lib/bds/desktop/shell_live/tags_editor.ex:234
#: lib/bds/desktop/shell_live/tags_editor.ex:104
#: lib/bds/desktop/shell_live/tags_editor.ex:166
#: lib/bds/desktop/shell_live/tags_editor.ex:219
#: lib/bds/desktop/shell_live/tags_editor.ex:233
#: lib/bds/desktop/shell_live/tags_editor.ex:264
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:11
#: lib/bds/ui/registry.ex:54
#: lib/bds/ui/registry.ex:103
@@ -2483,7 +2483,7 @@ msgstr ""
msgid "Tags"
msgstr ""
#: lib/bds/desktop/shell_live.ex:927
#: lib/bds/desktop/shell_live.ex:932
#: lib/bds/desktop/shell_live/panel_renderer.ex:54
#, elixir-autogen, elixir-format
msgid "Tasks"
@@ -2648,9 +2648,9 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:558
#: lib/bds/desktop/shell_live/media_editor.ex:563
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:76
#: lib/bds/desktop/shell_live/post_editor.ex:691
#: lib/bds/desktop/shell_live/post_editor.ex:720
#: lib/bds/desktop/shell_live/post_editor.ex:696
#: lib/bds/desktop/shell_live/post_editor.ex:725
#: lib/bds/desktop/shell_live/post_editor.ex:730
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:60
#, elixir-autogen, elixir-format
msgid "Translate"
@@ -2727,7 +2727,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:701
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:10
#: lib/bds/desktop/shell_live/post_editor.ex:890
#: lib/bds/desktop/shell_live/post_editor.ex:895
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:7
#, elixir-autogen, elixir-format
msgid "Unsaved"
@@ -3179,12 +3179,12 @@ msgstr ""
msgid "Comparing database and filesystem metadata"
msgstr "Comparing database and filesystem metadata"
#: lib/bds/desktop/shell_live.ex:650
#: lib/bds/desktop/shell_live.ex:655
#, elixir-autogen, elixir-format
msgid "Added %{count} images to post"
msgstr "Added %{count} images to post"
#: lib/bds/desktop/shell_live.ex:621
#: lib/bds/desktop/shell_live.ex:626
#, elixir-autogen, elixir-format
msgid "Added %{title}"
msgstr "Added %{title}"
@@ -3204,18 +3204,18 @@ msgstr ""
msgid "Image Import Concurrency"
msgstr "Image Import Concurrency"
#: lib/bds/desktop/shell_live.ex:408
#: lib/bds/desktop/shell_live.ex:421
#: lib/bds/desktop/shell_live.ex:621
#: lib/bds/desktop/shell_live.ex:649
#: lib/bds/desktop/shell_live.ex:658
#: lib/bds/desktop/shell_live.ex:665
#: lib/bds/desktop/shell_live.ex:413
#: lib/bds/desktop/shell_live.ex:426
#: lib/bds/desktop/shell_live.ex:626
#: lib/bds/desktop/shell_live.ex:654
#: lib/bds/desktop/shell_live.ex:663
#: lib/bds/desktop/shell_live.ex:670
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:407
#, elixir-autogen, elixir-format
msgid "Add Gallery Images"
msgstr "Add Gallery Images"
#: lib/bds/desktop/shell_live.ex:666
#: lib/bds/desktop/shell_live.ex:671
#, elixir-autogen, elixir-format
msgid "Failed to process %{path}: %{reason}"
msgstr "Failed to process %{path}: %{reason}"
@@ -3230,12 +3230,12 @@ msgstr ""
msgid "Move this post to the archive"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:596
#: lib/bds/desktop/shell_live/post_editor.ex:601
#, elixir-autogen, elixir-format, fuzzy
msgid "Post archived"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:629
#: lib/bds/desktop/shell_live/post_editor.ex:634
#, elixir-autogen, elixir-format, fuzzy
msgid "Post unarchived"
msgstr ""

View File

@@ -5,7 +5,7 @@
msgid "Archive"
msgstr "Archivo"
#: lib/bds/rendering/labels.ex:54
#: lib/bds/rendering/labels.ex:55
#, elixir-autogen, elixir-format
msgid "April"
msgstr "abril"
@@ -15,7 +15,7 @@ msgstr "abril"
msgid "Archive calendar"
msgstr "Archivo"
#: lib/bds/rendering/labels.ex:70
#: lib/bds/rendering/labels.ex:71
#, elixir-autogen, elixir-format
msgid "August"
msgstr "agosto"
@@ -35,27 +35,27 @@ msgstr "No se pudieron cargar los datos del calendario."
msgid "Close calendar"
msgstr "Cerrar calendario"
#: lib/bds/rendering/labels.ex:86
#: lib/bds/rendering/labels.ex:87
#, elixir-autogen, elixir-format
msgid "December"
msgstr "diciembre"
#: lib/bds/rendering/labels.ex:46
#: lib/bds/rendering/labels.ex:47
#, elixir-autogen, elixir-format
msgid "February"
msgstr "febrero"
#: lib/bds/rendering/labels.ex:42
#: lib/bds/rendering/labels.ex:43
#, elixir-autogen, elixir-format
msgid "January"
msgstr "enero"
#: lib/bds/rendering/labels.ex:66
#: lib/bds/rendering/labels.ex:67
#, elixir-autogen, elixir-format
msgid "July"
msgstr "julio"
#: lib/bds/rendering/labels.ex:62
#: lib/bds/rendering/labels.ex:63
#, elixir-autogen, elixir-format
msgid "June"
msgstr "junio"
@@ -75,22 +75,22 @@ msgstr "Enlazado desde"
msgid "Loading calendar…"
msgstr "Cargando calendario…"
#: lib/bds/rendering/labels.ex:50
#: lib/bds/rendering/labels.ex:51
#, elixir-autogen, elixir-format
msgid "March"
msgstr "marzo"
#: lib/bds/rendering/labels.ex:58
#: lib/bds/rendering/labels.ex:59
#, elixir-autogen, elixir-format
msgid "May"
msgstr "mayo"
#: lib/bds/rendering/labels.ex:82
#: lib/bds/rendering/labels.ex:83
#, elixir-autogen, elixir-format
msgid "November"
msgstr "noviembre"
#: lib/bds/rendering/labels.ex:78
#: lib/bds/rendering/labels.ex:79
#, elixir-autogen, elixir-format
msgid "October"
msgstr "octubre"
@@ -110,7 +110,7 @@ msgstr "Paginación"
msgid "Search..."
msgstr "Buscar..."
#: lib/bds/rendering/labels.ex:74
#: lib/bds/rendering/labels.ex:75
#, elixir-autogen, elixir-format
msgid "September"
msgstr "septiembre"
@@ -135,22 +135,27 @@ msgstr "más reciente"
msgid "older"
msgstr "más antiguo"
#: lib/bds/rendering/labels.ex:31
#: lib/bds/rendering/labels.ex:32
#, elixir-autogen, elixir-format
msgid "Back to preview home"
msgstr "Volver al inicio de vista previa"
#: lib/bds/rendering/labels.ex:30
#: lib/bds/rendering/labels.ex:31
#, elixir-autogen, elixir-format
msgid "The requested preview page could not be found."
msgstr "No se pudo encontrar la página de vista previa solicitada."
#: lib/bds/rendering/labels.ex:33
#: lib/bds/rendering/labels.ex:34
#, elixir-autogen, elixir-format
msgid "Vimeo video"
msgstr "Vídeo de Vimeo"
#: lib/bds/rendering/labels.ex:32
#: lib/bds/rendering/labels.ex:33
#, elixir-autogen, elixir-format
msgid "YouTube video"
msgstr "Vídeo de YouTube"
#: lib/bds/rendering/labels.ex:30
#, elixir-autogen, elixir-format
msgid "No results found"
msgstr "No se encontraron resultados"

View File

@@ -79,7 +79,7 @@ msgstr "Configuración de IA"
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:42
#: lib/bds/desktop/shell_live/overlay_manager.ex:72
#: lib/bds/desktop/shell_live/post_editor.ex:776
#: lib/bds/desktop/shell_live/post_editor.ex:781
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43
#, elixir-autogen, elixir-format
msgid "AI Suggestions"
@@ -257,14 +257,14 @@ msgid "Auto"
msgstr "Automático"
#: lib/bds/desktop/shell_data.ex:98
#: lib/bds/desktop/shell_live.ex:409
#: lib/bds/desktop/shell_live.ex:414
#: lib/bds/desktop/shell_live/chat_editor.ex:231
#: lib/bds/desktop/shell_live/media_editor.ex:156
#: lib/bds/desktop/shell_live/media_editor.ex:349
#: lib/bds/desktop/shell_live/media_editor.ex:538
#: lib/bds/desktop/shell_live/overlay_manager.ex:73
#: lib/bds/desktop/shell_live/post_editor.ex:643
#: lib/bds/desktop/shell_live/post_editor.ex:692
#: lib/bds/desktop/shell_live/post_editor.ex:648
#: lib/bds/desktop/shell_live/post_editor.ex:697
#, elixir-autogen, elixir-format
msgid "Automatic AI actions stay gated by airplane mode."
msgstr "Las acciones automáticas de IA siguen bloqueadas por el modo avión."
@@ -404,7 +404,7 @@ msgstr "Valores predeterminados de categoría, opciones de renderizado y conexi
msgid "Category name is required"
msgstr "El nombre de la categoría es obligatorio"
#: lib/bds/desktop/shell_live.ex:932
#: lib/bds/desktop/shell_live.ex:937
#: lib/bds/desktop/shell_live/chat_editor.ex:87
#: lib/bds/desktop/shell_live/chat_editor.ex:230
#: lib/bds/desktop/shell_live/chat_editor.ex:318
@@ -537,7 +537,7 @@ msgstr "No se pudo leer la configuración MCP %{path}: %{reason}"
msgid "Could not write MCP config %{path}: %{reason}"
msgstr "No se pudo escribir la configuración MCP %{path}: %{reason}"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:42
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:48
#, elixir-autogen, elixir-format
msgid "Create"
msgstr "Crear"
@@ -649,7 +649,7 @@ msgstr "Modo de edición predeterminado y presentación de diff"
#: lib/bds/desktop/shell_live/sidebar_delete.ex:179
#: lib/bds/desktop/shell_live/sidebar_delete.ex:181
#: lib/bds/desktop/shell_live/sidebar_delete.ex:182
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:58
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:70
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:15
#, elixir-autogen, elixir-format
msgid "Delete"
@@ -706,9 +706,9 @@ msgstr "Detectar"
#: lib/bds/desktop/shell_live/media_editor.ex:199
#: lib/bds/desktop/shell_live/media_editor.ex:205
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:59
#: lib/bds/desktop/shell_live/post_editor.ex:642
#: lib/bds/desktop/shell_live/post_editor.ex:671
#: lib/bds/desktop/shell_live/post_editor.ex:677
#: lib/bds/desktop/shell_live/post_editor.ex:647
#: lib/bds/desktop/shell_live/post_editor.ex:676
#: lib/bds/desktop/shell_live/post_editor.ex:682
#, elixir-autogen, elixir-format
msgid "Detect Language"
msgstr "Detectar idioma"
@@ -749,7 +749,7 @@ msgid "Discard changes and restore the published version"
msgstr "Descartar cambios y restaurar la versión publicada"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:21
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:84
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:96
#, elixir-autogen, elixir-format
msgid "Discover"
msgstr "Descubrir"
@@ -991,7 +991,7 @@ msgstr "Galeria"
msgid "Generate Site"
msgstr "Generar sitio"
#: lib/bds/desktop/shell_live.ex:933
#: lib/bds/desktop/shell_live.ex:938
#: lib/bds/ui/sidebar.ex:784
#, elixir-autogen, elixir-format
msgid "Git"
@@ -1004,7 +1004,7 @@ msgid "Git Diff"
msgstr "Diff de Git"
#: lib/bds/desktop/shell_data.ex:244
#: lib/bds/desktop/shell_live.ex:929
#: lib/bds/desktop/shell_live.ex:934
#: lib/bds/desktop/shell_live/panel_renderer.ex:171
#, elixir-autogen, elixir-format
msgid "Git Log"
@@ -1033,7 +1033,7 @@ msgstr "Host"
#: lib/bds/desktop/shell_data.ex:116
#: lib/bds/desktop/shell_live/index.html.heex:666
#: lib/bds/desktop/shell_live/media_editor.ex:703
#: lib/bds/desktop/shell_live/post_editor.ex:894
#: lib/bds/desktop/shell_live/post_editor.ex:899
#, elixir-autogen, elixir-format
msgid "Idle"
msgstr "Inactivo"
@@ -1127,9 +1127,9 @@ msgstr "Definiciones de importación"
msgid "Import failed: %{error}"
msgstr "La importación falló: %{error}"
#: lib/bds/desktop/shell_live.ex:580
#: lib/bds/desktop/shell_live.ex:970
#: lib/bds/desktop/shell_live.ex:976
#: lib/bds/desktop/shell_live.ex:585
#: lib/bds/desktop/shell_live.ex:975
#: lib/bds/desktop/shell_live.ex:981
#: lib/bds/desktop/shell_live/sidebar_create.ex:47
#, elixir-autogen, elixir-format
msgid "Import media"
@@ -1204,7 +1204,7 @@ msgid "Language"
msgstr "Idioma"
#: lib/bds/desktop/shell_live/media_editor.ex:206
#: lib/bds/desktop/shell_live/post_editor.ex:678
#: lib/bds/desktop/shell_live/post_editor.ex:683
#, elixir-autogen, elixir-format
msgid "Language detection failed."
msgstr "La detección de idioma falló."
@@ -1288,7 +1288,7 @@ msgstr "Mapear a..."
msgid "Mapped"
msgstr "Mapeado"
#: lib/bds/desktop/shell_live/post_editor.ex:897
#: lib/bds/desktop/shell_live/post_editor.ex:902
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:120
#, elixir-autogen, elixir-format
msgid "Markdown"
@@ -1328,12 +1328,12 @@ msgstr "Medio guardado"
msgid "Menu"
msgstr "Menú"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:75
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:87
#, elixir-autogen, elixir-format
msgid "Merge"
msgstr "Fusionar"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:66
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:78
#: lib/bds/ui/sidebar.ex:747
#, elixir-autogen, elixir-format
msgid "Merge Tags"
@@ -1424,7 +1424,7 @@ msgstr "Nuevo submenú"
msgid "New Template"
msgstr "Nueva plantilla"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:52
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:64
#, elixir-autogen, elixir-format
msgid "No Template"
msgstr "Sin plantilla"
@@ -1721,7 +1721,7 @@ msgstr "Otros"
msgid "Other (%{count})"
msgstr "Otros (%{count})"
#: lib/bds/desktop/shell_live.ex:928
#: lib/bds/desktop/shell_live.ex:933
#: lib/bds/desktop/shell_live/panel_renderer.ex:83
#, elixir-autogen, elixir-format
msgid "Output"
@@ -1786,16 +1786,16 @@ msgid "Persist the detected language for this media item"
msgstr "Guardar el idioma detectado para este medio"
#: lib/bds/desktop/shell_live/misc_editor.ex:742
#: lib/bds/desktop/shell_live/post_editor.ex:474
#: lib/bds/desktop/shell_live/post_editor.ex:478
#: lib/bds/desktop/shell_live/post_editor.ex:513
#: lib/bds/desktop/shell_live/post_editor.ex:517
#: lib/bds/desktop/shell_live/post_editor.ex:552
#: lib/bds/desktop/shell_live/post_editor.ex:567
#: lib/bds/desktop/shell_live/post_editor.ex:596
#: lib/bds/desktop/shell_live/post_editor.ex:599
#: lib/bds/desktop/shell_live/post_editor.ex:629
#: lib/bds/desktop/shell_live/post_editor.ex:632
#: lib/bds/desktop/shell_live/post_editor.ex:479
#: lib/bds/desktop/shell_live/post_editor.ex:483
#: lib/bds/desktop/shell_live/post_editor.ex:518
#: lib/bds/desktop/shell_live/post_editor.ex:522
#: lib/bds/desktop/shell_live/post_editor.ex:557
#: lib/bds/desktop/shell_live/post_editor.ex:572
#: lib/bds/desktop/shell_live/post_editor.ex:601
#: lib/bds/desktop/shell_live/post_editor.ex:604
#: lib/bds/desktop/shell_live/post_editor.ex:634
#: lib/bds/desktop/shell_live/post_editor.ex:637
#: lib/bds/desktop/shell_live/sidebar_components.ex:515
#: lib/bds/desktop/shell_live/sidebar_delete.ex:174
#: lib/bds/ui/registry.ex:99
@@ -1825,12 +1825,12 @@ msgstr "Plantilla de publicación"
msgid "Post is marked as do-not-translate but has translations"
msgstr "La entrada está marcada como no-traducir pero tiene traducciones"
#: lib/bds/desktop/shell_live/post_editor.ex:513
#: lib/bds/desktop/shell_live/post_editor.ex:518
#, elixir-autogen, elixir-format
msgid "Post published"
msgstr "Artículo publicado"
#: lib/bds/desktop/shell_live/post_editor.ex:474
#: lib/bds/desktop/shell_live/post_editor.ex:479
#, elixir-autogen, elixir-format
msgid "Post saved"
msgstr "Artículo guardado"
@@ -1854,7 +1854,7 @@ msgstr "Publicaciones (%{count})"
msgid "Preferences"
msgstr "Preferencias"
#: lib/bds/desktop/shell_live/post_editor.ex:898
#: lib/bds/desktop/shell_live/post_editor.ex:903
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:121
#, elixir-autogen, elixir-format
msgid "Preview"
@@ -1923,7 +1923,7 @@ msgid "Publish Selected"
msgstr "Publicar seleccionados"
#: lib/bds/desktop/shell_data.ex:181
#: lib/bds/desktop/shell_live/post_editor.ex:892
#: lib/bds/desktop/shell_live/post_editor.ex:897
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:456
#: lib/bds/ui/sidebar.ex:320
#, elixir-autogen, elixir-format
@@ -2121,7 +2121,7 @@ msgstr "Resolución"
msgid "Result"
msgstr "Resultado"
#: lib/bds/desktop/shell_live/post_editor.ex:893
#: lib/bds/desktop/shell_live/post_editor.ex:898
#, elixir-autogen, elixir-format
msgid "Reverted"
msgstr "Revertido"
@@ -2161,7 +2161,7 @@ msgstr "Modo SSH"
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:312
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:329
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:342
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:57
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:69
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:13
#, elixir-autogen, elixir-format
msgid "Save"
@@ -2173,7 +2173,7 @@ msgid "Save Translation"
msgstr "Guardar traducción"
#: lib/bds/desktop/shell_live/media_editor.ex:702
#: lib/bds/desktop/shell_live/post_editor.ex:891
#: lib/bds/desktop/shell_live/post_editor.ex:896
#, elixir-autogen, elixir-format
msgid "Saved"
msgstr "Guardado"
@@ -2431,7 +2431,7 @@ msgstr "Submenú"
msgid "Switch project"
msgstr "Cambiar proyecto"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:82
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:94
#, elixir-autogen, elixir-format
msgid "Sync"
msgstr "Sincronizar"
@@ -2468,11 +2468,11 @@ msgstr "Nombre de la etiqueta"
#: lib/bds/desktop/shell_live/index.html.heex:325
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:161
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:158
#: lib/bds/desktop/shell_live/tags_editor.ex:94
#: lib/bds/desktop/shell_live/tags_editor.ex:136
#: lib/bds/desktop/shell_live/tags_editor.ex:189
#: lib/bds/desktop/shell_live/tags_editor.ex:203
#: lib/bds/desktop/shell_live/tags_editor.ex:234
#: lib/bds/desktop/shell_live/tags_editor.ex:104
#: lib/bds/desktop/shell_live/tags_editor.ex:166
#: lib/bds/desktop/shell_live/tags_editor.ex:219
#: lib/bds/desktop/shell_live/tags_editor.ex:233
#: lib/bds/desktop/shell_live/tags_editor.ex:264
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:11
#: lib/bds/ui/registry.ex:54
#: lib/bds/ui/registry.ex:103
@@ -2483,7 +2483,7 @@ msgstr "Nombre de la etiqueta"
msgid "Tags"
msgstr "Etiquetas"
#: lib/bds/desktop/shell_live.ex:927
#: lib/bds/desktop/shell_live.ex:932
#: lib/bds/desktop/shell_live/panel_renderer.ex:54
#, elixir-autogen, elixir-format
msgid "Tasks"
@@ -2648,9 +2648,9 @@ msgstr "Alternar barra lateral"
#: lib/bds/desktop/shell_live/media_editor.ex:558
#: lib/bds/desktop/shell_live/media_editor.ex:563
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:76
#: lib/bds/desktop/shell_live/post_editor.ex:691
#: lib/bds/desktop/shell_live/post_editor.ex:720
#: lib/bds/desktop/shell_live/post_editor.ex:696
#: lib/bds/desktop/shell_live/post_editor.ex:725
#: lib/bds/desktop/shell_live/post_editor.ex:730
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:60
#, elixir-autogen, elixir-format
msgid "Translate"
@@ -2727,7 +2727,7 @@ msgstr "Desvincular del artículo"
#: lib/bds/desktop/shell_live/media_editor.ex:701
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:10
#: lib/bds/desktop/shell_live/post_editor.ex:890
#: lib/bds/desktop/shell_live/post_editor.ex:895
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:7
#, elixir-autogen, elixir-format
msgid "Unsaved"
@@ -3179,12 +3179,12 @@ msgstr "Bienvenido al asistente de IA"
msgid "Comparing database and filesystem metadata"
msgstr "Comparando metadatos de la base de datos y del sistema de archivos"
#: lib/bds/desktop/shell_live.ex:650
#: lib/bds/desktop/shell_live.ex:655
#, elixir-autogen, elixir-format
msgid "Added %{count} images to post"
msgstr "%{count} imágenes añadidas a la publicación"
#: lib/bds/desktop/shell_live.ex:621
#: lib/bds/desktop/shell_live.ex:626
#, elixir-autogen, elixir-format
msgid "Added %{title}"
msgstr "%{title} añadido"
@@ -3204,18 +3204,18 @@ msgstr "Guía del usuario para flujos editoriales, medios, plantillas, traducci
msgid "Image Import Concurrency"
msgstr "Importación simultánea de imágenes"
#: lib/bds/desktop/shell_live.ex:408
#: lib/bds/desktop/shell_live.ex:421
#: lib/bds/desktop/shell_live.ex:621
#: lib/bds/desktop/shell_live.ex:649
#: lib/bds/desktop/shell_live.ex:658
#: lib/bds/desktop/shell_live.ex:665
#: lib/bds/desktop/shell_live.ex:413
#: lib/bds/desktop/shell_live.ex:426
#: lib/bds/desktop/shell_live.ex:626
#: lib/bds/desktop/shell_live.ex:654
#: lib/bds/desktop/shell_live.ex:663
#: lib/bds/desktop/shell_live.ex:670
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:407
#, elixir-autogen, elixir-format
msgid "Add Gallery Images"
msgstr "Añadir imágenes a la galería"
#: lib/bds/desktop/shell_live.ex:666
#: lib/bds/desktop/shell_live.ex:671
#, elixir-autogen, elixir-format
msgid "Failed to process %{path}: %{reason}"
msgstr "No se pudo procesar %{path}: %{reason}"
@@ -3230,12 +3230,12 @@ msgstr "Archivar"
msgid "Move this post to the archive"
msgstr "Mover este artículo al archivo"
#: lib/bds/desktop/shell_live/post_editor.ex:596
#: lib/bds/desktop/shell_live/post_editor.ex:601
#, elixir-autogen, elixir-format
msgid "Post archived"
msgstr "Artículo archivado"
#: lib/bds/desktop/shell_live/post_editor.ex:629
#: lib/bds/desktop/shell_live/post_editor.ex:634
#, elixir-autogen, elixir-format
msgid "Post unarchived"
msgstr "Artículo restaurado"

View File

@@ -5,7 +5,7 @@
msgid "Archive"
msgstr "Archives"
#: lib/bds/rendering/labels.ex:54
#: lib/bds/rendering/labels.ex:55
#, elixir-autogen, elixir-format
msgid "April"
msgstr "avril"
@@ -15,7 +15,7 @@ msgstr "avril"
msgid "Archive calendar"
msgstr "Archives"
#: lib/bds/rendering/labels.ex:70
#: lib/bds/rendering/labels.ex:71
#, elixir-autogen, elixir-format
msgid "August"
msgstr "août"
@@ -35,27 +35,27 @@ msgstr "Impossible de charger les données du calendrier."
msgid "Close calendar"
msgstr "Fermer le calendrier"
#: lib/bds/rendering/labels.ex:86
#: lib/bds/rendering/labels.ex:87
#, elixir-autogen, elixir-format
msgid "December"
msgstr "décembre"
#: lib/bds/rendering/labels.ex:46
#: lib/bds/rendering/labels.ex:47
#, elixir-autogen, elixir-format
msgid "February"
msgstr "février"
#: lib/bds/rendering/labels.ex:42
#: lib/bds/rendering/labels.ex:43
#, elixir-autogen, elixir-format
msgid "January"
msgstr "janvier"
#: lib/bds/rendering/labels.ex:66
#: lib/bds/rendering/labels.ex:67
#, elixir-autogen, elixir-format
msgid "July"
msgstr "juillet"
#: lib/bds/rendering/labels.ex:62
#: lib/bds/rendering/labels.ex:63
#, elixir-autogen, elixir-format
msgid "June"
msgstr "juin"
@@ -75,22 +75,22 @@ msgstr "Lié depuis"
msgid "Loading calendar…"
msgstr "Chargement du calendrier…"
#: lib/bds/rendering/labels.ex:50
#: lib/bds/rendering/labels.ex:51
#, elixir-autogen, elixir-format
msgid "March"
msgstr "mars"
#: lib/bds/rendering/labels.ex:58
#: lib/bds/rendering/labels.ex:59
#, elixir-autogen, elixir-format
msgid "May"
msgstr "mai"
#: lib/bds/rendering/labels.ex:82
#: lib/bds/rendering/labels.ex:83
#, elixir-autogen, elixir-format
msgid "November"
msgstr "novembre"
#: lib/bds/rendering/labels.ex:78
#: lib/bds/rendering/labels.ex:79
#, elixir-autogen, elixir-format
msgid "October"
msgstr "octobre"
@@ -110,7 +110,7 @@ msgstr "Navigation paginée"
msgid "Search..."
msgstr "Rechercher..."
#: lib/bds/rendering/labels.ex:74
#: lib/bds/rendering/labels.ex:75
#, elixir-autogen, elixir-format
msgid "September"
msgstr "septembre"
@@ -135,22 +135,27 @@ msgstr "plus récent"
msgid "older"
msgstr "plus ancien"
#: lib/bds/rendering/labels.ex:31
#: lib/bds/rendering/labels.ex:32
#, elixir-autogen, elixir-format
msgid "Back to preview home"
msgstr "Retour à laccueil de laperçu"
#: lib/bds/rendering/labels.ex:30
#: lib/bds/rendering/labels.ex:31
#, elixir-autogen, elixir-format
msgid "The requested preview page could not be found."
msgstr "La page daperçu demandée est introuvable."
#: lib/bds/rendering/labels.ex:33
#: lib/bds/rendering/labels.ex:34
#, elixir-autogen, elixir-format
msgid "Vimeo video"
msgstr "Vidéo Vimeo"
#: lib/bds/rendering/labels.ex:32
#: lib/bds/rendering/labels.ex:33
#, elixir-autogen, elixir-format
msgid "YouTube video"
msgstr "Vidéo YouTube"
#: lib/bds/rendering/labels.ex:30
#, elixir-autogen, elixir-format
msgid "No results found"
msgstr "Aucun résultat trouvé"

View File

@@ -79,7 +79,7 @@ msgstr "Paramètres IA"
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:42
#: lib/bds/desktop/shell_live/overlay_manager.ex:72
#: lib/bds/desktop/shell_live/post_editor.ex:776
#: lib/bds/desktop/shell_live/post_editor.ex:781
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43
#, elixir-autogen, elixir-format
msgid "AI Suggestions"
@@ -257,14 +257,14 @@ msgid "Auto"
msgstr "Automatique"
#: lib/bds/desktop/shell_data.ex:98
#: lib/bds/desktop/shell_live.ex:409
#: lib/bds/desktop/shell_live.ex:414
#: lib/bds/desktop/shell_live/chat_editor.ex:231
#: lib/bds/desktop/shell_live/media_editor.ex:156
#: lib/bds/desktop/shell_live/media_editor.ex:349
#: lib/bds/desktop/shell_live/media_editor.ex:538
#: lib/bds/desktop/shell_live/overlay_manager.ex:73
#: lib/bds/desktop/shell_live/post_editor.ex:643
#: lib/bds/desktop/shell_live/post_editor.ex:692
#: lib/bds/desktop/shell_live/post_editor.ex:648
#: lib/bds/desktop/shell_live/post_editor.ex:697
#, elixir-autogen, elixir-format
msgid "Automatic AI actions stay gated by airplane mode."
msgstr "Les actions IA automatiques restent bloquées par le mode avion."
@@ -404,7 +404,7 @@ msgstr "Valeurs par défaut des catégories, options de rendu et liaison des mod
msgid "Category name is required"
msgstr "Le nom de la catégorie est requis"
#: lib/bds/desktop/shell_live.ex:932
#: lib/bds/desktop/shell_live.ex:937
#: lib/bds/desktop/shell_live/chat_editor.ex:87
#: lib/bds/desktop/shell_live/chat_editor.ex:230
#: lib/bds/desktop/shell_live/chat_editor.ex:318
@@ -537,7 +537,7 @@ msgstr "Impossible de lire la configuration MCP %{path} : %{reason}"
msgid "Could not write MCP config %{path}: %{reason}"
msgstr "Impossible d'écrire la configuration MCP %{path} : %{reason}"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:42
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:48
#, elixir-autogen, elixir-format
msgid "Create"
msgstr "Créer"
@@ -649,7 +649,7 @@ msgstr "Mode dédition par défaut et présentation des diffs"
#: lib/bds/desktop/shell_live/sidebar_delete.ex:179
#: lib/bds/desktop/shell_live/sidebar_delete.ex:181
#: lib/bds/desktop/shell_live/sidebar_delete.ex:182
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:58
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:70
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:15
#, elixir-autogen, elixir-format
msgid "Delete"
@@ -706,9 +706,9 @@ msgstr "Détecter"
#: lib/bds/desktop/shell_live/media_editor.ex:199
#: lib/bds/desktop/shell_live/media_editor.ex:205
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:59
#: lib/bds/desktop/shell_live/post_editor.ex:642
#: lib/bds/desktop/shell_live/post_editor.ex:671
#: lib/bds/desktop/shell_live/post_editor.ex:677
#: lib/bds/desktop/shell_live/post_editor.ex:647
#: lib/bds/desktop/shell_live/post_editor.ex:676
#: lib/bds/desktop/shell_live/post_editor.ex:682
#, elixir-autogen, elixir-format
msgid "Detect Language"
msgstr "Détecter la langue"
@@ -749,7 +749,7 @@ msgid "Discard changes and restore the published version"
msgstr "Annuler les modifications et restaurer la version publiée"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:21
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:84
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:96
#, elixir-autogen, elixir-format
msgid "Discover"
msgstr "Découvrir"
@@ -991,7 +991,7 @@ msgstr "Galerie"
msgid "Generate Site"
msgstr "Générer le site"
#: lib/bds/desktop/shell_live.ex:933
#: lib/bds/desktop/shell_live.ex:938
#: lib/bds/ui/sidebar.ex:784
#, elixir-autogen, elixir-format
msgid "Git"
@@ -1004,7 +1004,7 @@ msgid "Git Diff"
msgstr "Diff Git"
#: lib/bds/desktop/shell_data.ex:244
#: lib/bds/desktop/shell_live.ex:929
#: lib/bds/desktop/shell_live.ex:934
#: lib/bds/desktop/shell_live/panel_renderer.ex:171
#, elixir-autogen, elixir-format
msgid "Git Log"
@@ -1033,7 +1033,7 @@ msgstr "Hôte"
#: lib/bds/desktop/shell_data.ex:116
#: lib/bds/desktop/shell_live/index.html.heex:666
#: lib/bds/desktop/shell_live/media_editor.ex:703
#: lib/bds/desktop/shell_live/post_editor.ex:894
#: lib/bds/desktop/shell_live/post_editor.ex:899
#, elixir-autogen, elixir-format
msgid "Idle"
msgstr "Inactif"
@@ -1127,9 +1127,9 @@ msgstr "Définitions dimport"
msgid "Import failed: %{error}"
msgstr "Échec de limport : %{error}"
#: lib/bds/desktop/shell_live.ex:580
#: lib/bds/desktop/shell_live.ex:970
#: lib/bds/desktop/shell_live.ex:976
#: lib/bds/desktop/shell_live.ex:585
#: lib/bds/desktop/shell_live.ex:975
#: lib/bds/desktop/shell_live.ex:981
#: lib/bds/desktop/shell_live/sidebar_create.ex:47
#, elixir-autogen, elixir-format
msgid "Import media"
@@ -1204,7 +1204,7 @@ msgid "Language"
msgstr "Langue"
#: lib/bds/desktop/shell_live/media_editor.ex:206
#: lib/bds/desktop/shell_live/post_editor.ex:678
#: lib/bds/desktop/shell_live/post_editor.ex:683
#, elixir-autogen, elixir-format
msgid "Language detection failed."
msgstr "La détection de la langue a échoué."
@@ -1288,7 +1288,7 @@ msgstr "Mapper vers..."
msgid "Mapped"
msgstr "Mappé"
#: lib/bds/desktop/shell_live/post_editor.ex:897
#: lib/bds/desktop/shell_live/post_editor.ex:902
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:120
#, elixir-autogen, elixir-format
msgid "Markdown"
@@ -1328,12 +1328,12 @@ msgstr "Média enregistré"
msgid "Menu"
msgstr "Menu"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:75
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:87
#, elixir-autogen, elixir-format
msgid "Merge"
msgstr "Fusionner"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:66
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:78
#: lib/bds/ui/sidebar.ex:747
#, elixir-autogen, elixir-format
msgid "Merge Tags"
@@ -1424,7 +1424,7 @@ msgstr "Nouveau sous-menu"
msgid "New Template"
msgstr "Nouveau modèle"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:52
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:64
#, elixir-autogen, elixir-format
msgid "No Template"
msgstr "Aucun template"
@@ -1721,7 +1721,7 @@ msgstr "Autre"
msgid "Other (%{count})"
msgstr "Autres (%{count})"
#: lib/bds/desktop/shell_live.ex:928
#: lib/bds/desktop/shell_live.ex:933
#: lib/bds/desktop/shell_live/panel_renderer.ex:83
#, elixir-autogen, elixir-format
msgid "Output"
@@ -1786,16 +1786,16 @@ msgid "Persist the detected language for this media item"
msgstr "Enregistrer la langue détectée pour ce média"
#: lib/bds/desktop/shell_live/misc_editor.ex:742
#: lib/bds/desktop/shell_live/post_editor.ex:474
#: lib/bds/desktop/shell_live/post_editor.ex:478
#: lib/bds/desktop/shell_live/post_editor.ex:513
#: lib/bds/desktop/shell_live/post_editor.ex:517
#: lib/bds/desktop/shell_live/post_editor.ex:552
#: lib/bds/desktop/shell_live/post_editor.ex:567
#: lib/bds/desktop/shell_live/post_editor.ex:596
#: lib/bds/desktop/shell_live/post_editor.ex:599
#: lib/bds/desktop/shell_live/post_editor.ex:629
#: lib/bds/desktop/shell_live/post_editor.ex:632
#: lib/bds/desktop/shell_live/post_editor.ex:479
#: lib/bds/desktop/shell_live/post_editor.ex:483
#: lib/bds/desktop/shell_live/post_editor.ex:518
#: lib/bds/desktop/shell_live/post_editor.ex:522
#: lib/bds/desktop/shell_live/post_editor.ex:557
#: lib/bds/desktop/shell_live/post_editor.ex:572
#: lib/bds/desktop/shell_live/post_editor.ex:601
#: lib/bds/desktop/shell_live/post_editor.ex:604
#: lib/bds/desktop/shell_live/post_editor.ex:634
#: lib/bds/desktop/shell_live/post_editor.ex:637
#: lib/bds/desktop/shell_live/sidebar_components.ex:515
#: lib/bds/desktop/shell_live/sidebar_delete.ex:174
#: lib/bds/ui/registry.ex:99
@@ -1825,12 +1825,12 @@ msgstr "Modèle darticle"
msgid "Post is marked as do-not-translate but has translations"
msgstr "L'article est marqué ne-pas-traduire mais a des traductions"
#: lib/bds/desktop/shell_live/post_editor.ex:513
#: lib/bds/desktop/shell_live/post_editor.ex:518
#, elixir-autogen, elixir-format
msgid "Post published"
msgstr "Article publié"
#: lib/bds/desktop/shell_live/post_editor.ex:474
#: lib/bds/desktop/shell_live/post_editor.ex:479
#, elixir-autogen, elixir-format
msgid "Post saved"
msgstr "Article enregistré"
@@ -1854,7 +1854,7 @@ msgstr "Articles (%{count})"
msgid "Preferences"
msgstr "Préférences"
#: lib/bds/desktop/shell_live/post_editor.ex:898
#: lib/bds/desktop/shell_live/post_editor.ex:903
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:121
#, elixir-autogen, elixir-format
msgid "Preview"
@@ -1923,7 +1923,7 @@ msgid "Publish Selected"
msgstr "Publier la sélection"
#: lib/bds/desktop/shell_data.ex:181
#: lib/bds/desktop/shell_live/post_editor.ex:892
#: lib/bds/desktop/shell_live/post_editor.ex:897
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:456
#: lib/bds/ui/sidebar.ex:320
#, elixir-autogen, elixir-format
@@ -2121,7 +2121,7 @@ msgstr "Résolution"
msgid "Result"
msgstr "Résultat"
#: lib/bds/desktop/shell_live/post_editor.ex:893
#: lib/bds/desktop/shell_live/post_editor.ex:898
#, elixir-autogen, elixir-format
msgid "Reverted"
msgstr "Restauré"
@@ -2161,7 +2161,7 @@ msgstr "Mode SSH"
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:312
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:329
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:342
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:57
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:69
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:13
#, elixir-autogen, elixir-format
msgid "Save"
@@ -2173,7 +2173,7 @@ msgid "Save Translation"
msgstr "Enregistrer la traduction"
#: lib/bds/desktop/shell_live/media_editor.ex:702
#: lib/bds/desktop/shell_live/post_editor.ex:891
#: lib/bds/desktop/shell_live/post_editor.ex:896
#, elixir-autogen, elixir-format
msgid "Saved"
msgstr "Enregistré"
@@ -2431,7 +2431,7 @@ msgstr "Sous-menu"
msgid "Switch project"
msgstr "Changer de projet"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:82
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:94
#, elixir-autogen, elixir-format
msgid "Sync"
msgstr "Synchroniser"
@@ -2468,11 +2468,11 @@ msgstr "Nom du mot-clé"
#: lib/bds/desktop/shell_live/index.html.heex:325
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:161
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:158
#: lib/bds/desktop/shell_live/tags_editor.ex:94
#: lib/bds/desktop/shell_live/tags_editor.ex:136
#: lib/bds/desktop/shell_live/tags_editor.ex:189
#: lib/bds/desktop/shell_live/tags_editor.ex:203
#: lib/bds/desktop/shell_live/tags_editor.ex:234
#: lib/bds/desktop/shell_live/tags_editor.ex:104
#: lib/bds/desktop/shell_live/tags_editor.ex:166
#: lib/bds/desktop/shell_live/tags_editor.ex:219
#: lib/bds/desktop/shell_live/tags_editor.ex:233
#: lib/bds/desktop/shell_live/tags_editor.ex:264
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:11
#: lib/bds/ui/registry.ex:54
#: lib/bds/ui/registry.ex:103
@@ -2483,7 +2483,7 @@ msgstr "Nom du mot-clé"
msgid "Tags"
msgstr "Tags"
#: lib/bds/desktop/shell_live.ex:927
#: lib/bds/desktop/shell_live.ex:932
#: lib/bds/desktop/shell_live/panel_renderer.ex:54
#, elixir-autogen, elixir-format
msgid "Tasks"
@@ -2648,9 +2648,9 @@ msgstr "Afficher ou masquer la barre latérale"
#: lib/bds/desktop/shell_live/media_editor.ex:558
#: lib/bds/desktop/shell_live/media_editor.ex:563
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:76
#: lib/bds/desktop/shell_live/post_editor.ex:691
#: lib/bds/desktop/shell_live/post_editor.ex:720
#: lib/bds/desktop/shell_live/post_editor.ex:696
#: lib/bds/desktop/shell_live/post_editor.ex:725
#: lib/bds/desktop/shell_live/post_editor.ex:730
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:60
#, elixir-autogen, elixir-format
msgid "Translate"
@@ -2727,7 +2727,7 @@ msgstr "Dissocier de l'article"
#: lib/bds/desktop/shell_live/media_editor.ex:701
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:10
#: lib/bds/desktop/shell_live/post_editor.ex:890
#: lib/bds/desktop/shell_live/post_editor.ex:895
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:7
#, elixir-autogen, elixir-format
msgid "Unsaved"
@@ -3179,12 +3179,12 @@ msgstr "Bienvenue dans lassistant IA"
msgid "Comparing database and filesystem metadata"
msgstr "Comparaison des métadonnées entre la base et le système de fichiers"
#: lib/bds/desktop/shell_live.ex:650
#: lib/bds/desktop/shell_live.ex:655
#, elixir-autogen, elixir-format
msgid "Added %{count} images to post"
msgstr "%{count} images ajoutées à l'article"
#: lib/bds/desktop/shell_live.ex:621
#: lib/bds/desktop/shell_live.ex:626
#, elixir-autogen, elixir-format
msgid "Added %{title}"
msgstr "%{title} ajouté"
@@ -3204,18 +3204,18 @@ msgstr "Guide utilisateur pour les flux éditoriaux, médias, modèles, traducti
msgid "Image Import Concurrency"
msgstr "Importation simultanée d'images"
#: lib/bds/desktop/shell_live.ex:408
#: lib/bds/desktop/shell_live.ex:421
#: lib/bds/desktop/shell_live.ex:621
#: lib/bds/desktop/shell_live.ex:649
#: lib/bds/desktop/shell_live.ex:658
#: lib/bds/desktop/shell_live.ex:665
#: lib/bds/desktop/shell_live.ex:413
#: lib/bds/desktop/shell_live.ex:426
#: lib/bds/desktop/shell_live.ex:626
#: lib/bds/desktop/shell_live.ex:654
#: lib/bds/desktop/shell_live.ex:663
#: lib/bds/desktop/shell_live.ex:670
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:407
#, elixir-autogen, elixir-format
msgid "Add Gallery Images"
msgstr "Ajouter des images à la galerie"
#: lib/bds/desktop/shell_live.ex:666
#: lib/bds/desktop/shell_live.ex:671
#, elixir-autogen, elixir-format
msgid "Failed to process %{path}: %{reason}"
msgstr "Impossible de traiter %{path} : %{reason}"
@@ -3230,12 +3230,12 @@ msgstr "Archiver"
msgid "Move this post to the archive"
msgstr "Déplacer cet article dans les archives"
#: lib/bds/desktop/shell_live/post_editor.ex:596
#: lib/bds/desktop/shell_live/post_editor.ex:601
#, elixir-autogen, elixir-format
msgid "Post archived"
msgstr "Article archivé"
#: lib/bds/desktop/shell_live/post_editor.ex:629
#: lib/bds/desktop/shell_live/post_editor.ex:634
#, elixir-autogen, elixir-format
msgid "Post unarchived"
msgstr "Article désarchivé"

View File

@@ -5,7 +5,7 @@
msgid "Archive"
msgstr "Archivio"
#: lib/bds/rendering/labels.ex:54
#: lib/bds/rendering/labels.ex:55
#, elixir-autogen, elixir-format
msgid "April"
msgstr "aprile"
@@ -15,7 +15,7 @@ msgstr "aprile"
msgid "Archive calendar"
msgstr "Archivio"
#: lib/bds/rendering/labels.ex:70
#: lib/bds/rendering/labels.ex:71
#, elixir-autogen, elixir-format
msgid "August"
msgstr "agosto"
@@ -35,27 +35,27 @@ msgstr "Impossibile caricare i dati del calendario."
msgid "Close calendar"
msgstr "Chiudi calendario"
#: lib/bds/rendering/labels.ex:86
#: lib/bds/rendering/labels.ex:87
#, elixir-autogen, elixir-format
msgid "December"
msgstr "dicembre"
#: lib/bds/rendering/labels.ex:46
#: lib/bds/rendering/labels.ex:47
#, elixir-autogen, elixir-format
msgid "February"
msgstr "febbraio"
#: lib/bds/rendering/labels.ex:42
#: lib/bds/rendering/labels.ex:43
#, elixir-autogen, elixir-format
msgid "January"
msgstr "gennaio"
#: lib/bds/rendering/labels.ex:66
#: lib/bds/rendering/labels.ex:67
#, elixir-autogen, elixir-format
msgid "July"
msgstr "luglio"
#: lib/bds/rendering/labels.ex:62
#: lib/bds/rendering/labels.ex:63
#, elixir-autogen, elixir-format
msgid "June"
msgstr "giugno"
@@ -75,22 +75,22 @@ msgstr "Collegato da"
msgid "Loading calendar…"
msgstr "Caricamento calendario…"
#: lib/bds/rendering/labels.ex:50
#: lib/bds/rendering/labels.ex:51
#, elixir-autogen, elixir-format
msgid "March"
msgstr "marzo"
#: lib/bds/rendering/labels.ex:58
#: lib/bds/rendering/labels.ex:59
#, elixir-autogen, elixir-format
msgid "May"
msgstr "maggio"
#: lib/bds/rendering/labels.ex:82
#: lib/bds/rendering/labels.ex:83
#, elixir-autogen, elixir-format
msgid "November"
msgstr "novembre"
#: lib/bds/rendering/labels.ex:78
#: lib/bds/rendering/labels.ex:79
#, elixir-autogen, elixir-format
msgid "October"
msgstr "ottobre"
@@ -110,7 +110,7 @@ msgstr "Paginazione"
msgid "Search..."
msgstr "Cerca..."
#: lib/bds/rendering/labels.ex:74
#: lib/bds/rendering/labels.ex:75
#, elixir-autogen, elixir-format
msgid "September"
msgstr "settembre"
@@ -135,22 +135,27 @@ msgstr "più recente"
msgid "older"
msgstr "più vecchio"
#: lib/bds/rendering/labels.ex:31
#: lib/bds/rendering/labels.ex:32
#, elixir-autogen, elixir-format
msgid "Back to preview home"
msgstr "Torna alla home di anteprima"
#: lib/bds/rendering/labels.ex:30
#: lib/bds/rendering/labels.ex:31
#, elixir-autogen, elixir-format
msgid "The requested preview page could not be found."
msgstr "La pagina di anteprima richiesta non è stata trovata."
#: lib/bds/rendering/labels.ex:33
#: lib/bds/rendering/labels.ex:34
#, elixir-autogen, elixir-format
msgid "Vimeo video"
msgstr "Video Vimeo"
#: lib/bds/rendering/labels.ex:32
#: lib/bds/rendering/labels.ex:33
#, elixir-autogen, elixir-format
msgid "YouTube video"
msgstr "Video YouTube"
#: lib/bds/rendering/labels.ex:30
#, elixir-autogen, elixir-format
msgid "No results found"
msgstr "Nessun risultato trovato"

View File

@@ -79,7 +79,7 @@ msgstr "Impostazioni IA"
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:42
#: lib/bds/desktop/shell_live/overlay_manager.ex:72
#: lib/bds/desktop/shell_live/post_editor.ex:776
#: lib/bds/desktop/shell_live/post_editor.ex:781
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43
#, elixir-autogen, elixir-format
msgid "AI Suggestions"
@@ -257,14 +257,14 @@ msgid "Auto"
msgstr "Automatico"
#: lib/bds/desktop/shell_data.ex:98
#: lib/bds/desktop/shell_live.ex:409
#: lib/bds/desktop/shell_live.ex:414
#: lib/bds/desktop/shell_live/chat_editor.ex:231
#: lib/bds/desktop/shell_live/media_editor.ex:156
#: lib/bds/desktop/shell_live/media_editor.ex:349
#: lib/bds/desktop/shell_live/media_editor.ex:538
#: lib/bds/desktop/shell_live/overlay_manager.ex:73
#: lib/bds/desktop/shell_live/post_editor.ex:643
#: lib/bds/desktop/shell_live/post_editor.ex:692
#: lib/bds/desktop/shell_live/post_editor.ex:648
#: lib/bds/desktop/shell_live/post_editor.ex:697
#, elixir-autogen, elixir-format
msgid "Automatic AI actions stay gated by airplane mode."
msgstr "Le azioni IA automatiche restano bloccate dalla modalità aereo."
@@ -404,7 +404,7 @@ msgstr "Valori predefiniti delle categorie, opzioni di rendering e collegamento
msgid "Category name is required"
msgstr "Il nome della categoria è obbligatorio"
#: lib/bds/desktop/shell_live.ex:932
#: lib/bds/desktop/shell_live.ex:937
#: lib/bds/desktop/shell_live/chat_editor.ex:87
#: lib/bds/desktop/shell_live/chat_editor.ex:230
#: lib/bds/desktop/shell_live/chat_editor.ex:318
@@ -537,7 +537,7 @@ msgstr "Impossibile leggere la configurazione MCP %{path}: %{reason}"
msgid "Could not write MCP config %{path}: %{reason}"
msgstr "Impossibile scrivere la configurazione MCP %{path}: %{reason}"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:42
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:48
#, elixir-autogen, elixir-format
msgid "Create"
msgstr "Crea"
@@ -649,7 +649,7 @@ msgstr "Modalità di modifica predefinita e presentazione dei diff"
#: lib/bds/desktop/shell_live/sidebar_delete.ex:179
#: lib/bds/desktop/shell_live/sidebar_delete.ex:181
#: lib/bds/desktop/shell_live/sidebar_delete.ex:182
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:58
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:70
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:15
#, elixir-autogen, elixir-format
msgid "Delete"
@@ -706,9 +706,9 @@ msgstr "Rileva"
#: lib/bds/desktop/shell_live/media_editor.ex:199
#: lib/bds/desktop/shell_live/media_editor.ex:205
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:59
#: lib/bds/desktop/shell_live/post_editor.ex:642
#: lib/bds/desktop/shell_live/post_editor.ex:671
#: lib/bds/desktop/shell_live/post_editor.ex:677
#: lib/bds/desktop/shell_live/post_editor.ex:647
#: lib/bds/desktop/shell_live/post_editor.ex:676
#: lib/bds/desktop/shell_live/post_editor.ex:682
#, elixir-autogen, elixir-format
msgid "Detect Language"
msgstr "Rileva lingua"
@@ -749,7 +749,7 @@ msgid "Discard changes and restore the published version"
msgstr "Annulla le modifiche e ripristina la versione pubblicata"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:21
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:84
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:96
#, elixir-autogen, elixir-format
msgid "Discover"
msgstr "Scopri"
@@ -991,7 +991,7 @@ msgstr "Galleria"
msgid "Generate Site"
msgstr "Genera sito"
#: lib/bds/desktop/shell_live.ex:933
#: lib/bds/desktop/shell_live.ex:938
#: lib/bds/ui/sidebar.ex:784
#, elixir-autogen, elixir-format
msgid "Git"
@@ -1004,7 +1004,7 @@ msgid "Git Diff"
msgstr "Diff Git"
#: lib/bds/desktop/shell_data.ex:244
#: lib/bds/desktop/shell_live.ex:929
#: lib/bds/desktop/shell_live.ex:934
#: lib/bds/desktop/shell_live/panel_renderer.ex:171
#, elixir-autogen, elixir-format
msgid "Git Log"
@@ -1033,7 +1033,7 @@ msgstr "Host"
#: lib/bds/desktop/shell_data.ex:116
#: lib/bds/desktop/shell_live/index.html.heex:666
#: lib/bds/desktop/shell_live/media_editor.ex:703
#: lib/bds/desktop/shell_live/post_editor.ex:894
#: lib/bds/desktop/shell_live/post_editor.ex:899
#, elixir-autogen, elixir-format
msgid "Idle"
msgstr "Inattivo"
@@ -1127,9 +1127,9 @@ msgstr "Definizioni di importazione"
msgid "Import failed: %{error}"
msgstr "Importazione non riuscita: %{error}"
#: lib/bds/desktop/shell_live.ex:580
#: lib/bds/desktop/shell_live.ex:970
#: lib/bds/desktop/shell_live.ex:976
#: lib/bds/desktop/shell_live.ex:585
#: lib/bds/desktop/shell_live.ex:975
#: lib/bds/desktop/shell_live.ex:981
#: lib/bds/desktop/shell_live/sidebar_create.ex:47
#, elixir-autogen, elixir-format
msgid "Import media"
@@ -1204,7 +1204,7 @@ msgid "Language"
msgstr "Lingua"
#: lib/bds/desktop/shell_live/media_editor.ex:206
#: lib/bds/desktop/shell_live/post_editor.ex:678
#: lib/bds/desktop/shell_live/post_editor.ex:683
#, elixir-autogen, elixir-format
msgid "Language detection failed."
msgstr "Rilevamento della lingua non riuscito."
@@ -1288,7 +1288,7 @@ msgstr "Mappa a..."
msgid "Mapped"
msgstr "Mappato"
#: lib/bds/desktop/shell_live/post_editor.ex:897
#: lib/bds/desktop/shell_live/post_editor.ex:902
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:120
#, elixir-autogen, elixir-format
msgid "Markdown"
@@ -1328,12 +1328,12 @@ msgstr "Media salvato"
msgid "Menu"
msgstr "Menu"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:75
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:87
#, elixir-autogen, elixir-format
msgid "Merge"
msgstr "Unisci"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:66
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:78
#: lib/bds/ui/sidebar.ex:747
#, elixir-autogen, elixir-format
msgid "Merge Tags"
@@ -1424,7 +1424,7 @@ msgstr "Nuovo sottomenu"
msgid "New Template"
msgstr "Nuovo modello"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:52
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:64
#, elixir-autogen, elixir-format
msgid "No Template"
msgstr "Nessun template"
@@ -1721,7 +1721,7 @@ msgstr "Altro"
msgid "Other (%{count})"
msgstr "Altro (%{count})"
#: lib/bds/desktop/shell_live.ex:928
#: lib/bds/desktop/shell_live.ex:933
#: lib/bds/desktop/shell_live/panel_renderer.ex:83
#, elixir-autogen, elixir-format
msgid "Output"
@@ -1786,16 +1786,16 @@ msgid "Persist the detected language for this media item"
msgstr "Salva la lingua rilevata per questo media"
#: lib/bds/desktop/shell_live/misc_editor.ex:742
#: lib/bds/desktop/shell_live/post_editor.ex:474
#: lib/bds/desktop/shell_live/post_editor.ex:478
#: lib/bds/desktop/shell_live/post_editor.ex:513
#: lib/bds/desktop/shell_live/post_editor.ex:517
#: lib/bds/desktop/shell_live/post_editor.ex:552
#: lib/bds/desktop/shell_live/post_editor.ex:567
#: lib/bds/desktop/shell_live/post_editor.ex:596
#: lib/bds/desktop/shell_live/post_editor.ex:599
#: lib/bds/desktop/shell_live/post_editor.ex:629
#: lib/bds/desktop/shell_live/post_editor.ex:632
#: lib/bds/desktop/shell_live/post_editor.ex:479
#: lib/bds/desktop/shell_live/post_editor.ex:483
#: lib/bds/desktop/shell_live/post_editor.ex:518
#: lib/bds/desktop/shell_live/post_editor.ex:522
#: lib/bds/desktop/shell_live/post_editor.ex:557
#: lib/bds/desktop/shell_live/post_editor.ex:572
#: lib/bds/desktop/shell_live/post_editor.ex:601
#: lib/bds/desktop/shell_live/post_editor.ex:604
#: lib/bds/desktop/shell_live/post_editor.ex:634
#: lib/bds/desktop/shell_live/post_editor.ex:637
#: lib/bds/desktop/shell_live/sidebar_components.ex:515
#: lib/bds/desktop/shell_live/sidebar_delete.ex:174
#: lib/bds/ui/registry.ex:99
@@ -1825,12 +1825,12 @@ msgstr "Template del post"
msgid "Post is marked as do-not-translate but has translations"
msgstr "Il post è contrassegnato come non-tradurre ma ha traduzioni"
#: lib/bds/desktop/shell_live/post_editor.ex:513
#: lib/bds/desktop/shell_live/post_editor.ex:518
#, elixir-autogen, elixir-format
msgid "Post published"
msgstr "Articolo pubblicato"
#: lib/bds/desktop/shell_live/post_editor.ex:474
#: lib/bds/desktop/shell_live/post_editor.ex:479
#, elixir-autogen, elixir-format
msgid "Post saved"
msgstr "Articolo salvato"
@@ -1854,7 +1854,7 @@ msgstr "Articoli (%{count})"
msgid "Preferences"
msgstr "Preferenze"
#: lib/bds/desktop/shell_live/post_editor.ex:898
#: lib/bds/desktop/shell_live/post_editor.ex:903
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:121
#, elixir-autogen, elixir-format
msgid "Preview"
@@ -1923,7 +1923,7 @@ msgid "Publish Selected"
msgstr "Pubblica selezionati"
#: lib/bds/desktop/shell_data.ex:181
#: lib/bds/desktop/shell_live/post_editor.ex:892
#: lib/bds/desktop/shell_live/post_editor.ex:897
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:456
#: lib/bds/ui/sidebar.ex:320
#, elixir-autogen, elixir-format
@@ -2121,7 +2121,7 @@ msgstr "Risoluzione"
msgid "Result"
msgstr "Risultato"
#: lib/bds/desktop/shell_live/post_editor.ex:893
#: lib/bds/desktop/shell_live/post_editor.ex:898
#, elixir-autogen, elixir-format
msgid "Reverted"
msgstr "Ripristinato"
@@ -2161,7 +2161,7 @@ msgstr "Modalità SSH"
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:312
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:329
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:342
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:57
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:69
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:13
#, elixir-autogen, elixir-format
msgid "Save"
@@ -2173,7 +2173,7 @@ msgid "Save Translation"
msgstr "Salva traduzione"
#: lib/bds/desktop/shell_live/media_editor.ex:702
#: lib/bds/desktop/shell_live/post_editor.ex:891
#: lib/bds/desktop/shell_live/post_editor.ex:896
#, elixir-autogen, elixir-format
msgid "Saved"
msgstr "Salvato"
@@ -2431,7 +2431,7 @@ msgstr "Sottomenu"
msgid "Switch project"
msgstr "Cambia progetto"
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:82
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:94
#, elixir-autogen, elixir-format
msgid "Sync"
msgstr "Sincronizza"
@@ -2468,11 +2468,11 @@ msgstr "Nome del tag"
#: lib/bds/desktop/shell_live/index.html.heex:325
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:161
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:158
#: lib/bds/desktop/shell_live/tags_editor.ex:94
#: lib/bds/desktop/shell_live/tags_editor.ex:136
#: lib/bds/desktop/shell_live/tags_editor.ex:189
#: lib/bds/desktop/shell_live/tags_editor.ex:203
#: lib/bds/desktop/shell_live/tags_editor.ex:234
#: lib/bds/desktop/shell_live/tags_editor.ex:104
#: lib/bds/desktop/shell_live/tags_editor.ex:166
#: lib/bds/desktop/shell_live/tags_editor.ex:219
#: lib/bds/desktop/shell_live/tags_editor.ex:233
#: lib/bds/desktop/shell_live/tags_editor.ex:264
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:11
#: lib/bds/ui/registry.ex:54
#: lib/bds/ui/registry.ex:103
@@ -2483,7 +2483,7 @@ msgstr "Nome del tag"
msgid "Tags"
msgstr "Tag"
#: lib/bds/desktop/shell_live.ex:927
#: lib/bds/desktop/shell_live.ex:932
#: lib/bds/desktop/shell_live/panel_renderer.ex:54
#, elixir-autogen, elixir-format
msgid "Tasks"
@@ -2648,9 +2648,9 @@ msgstr "Attiva/disattiva barra laterale"
#: lib/bds/desktop/shell_live/media_editor.ex:558
#: lib/bds/desktop/shell_live/media_editor.ex:563
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:76
#: lib/bds/desktop/shell_live/post_editor.ex:691
#: lib/bds/desktop/shell_live/post_editor.ex:720
#: lib/bds/desktop/shell_live/post_editor.ex:696
#: lib/bds/desktop/shell_live/post_editor.ex:725
#: lib/bds/desktop/shell_live/post_editor.ex:730
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:60
#, elixir-autogen, elixir-format
msgid "Translate"
@@ -2727,7 +2727,7 @@ msgstr "Scollega dall'articolo"
#: lib/bds/desktop/shell_live/media_editor.ex:701
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:10
#: lib/bds/desktop/shell_live/post_editor.ex:890
#: lib/bds/desktop/shell_live/post_editor.ex:895
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:7
#, elixir-autogen, elixir-format
msgid "Unsaved"
@@ -3179,12 +3179,12 @@ msgstr "Benvenuto nellassistente IA"
msgid "Comparing database and filesystem metadata"
msgstr "Confronto tra i metadati del database e del filesystem"
#: lib/bds/desktop/shell_live.ex:650
#: lib/bds/desktop/shell_live.ex:655
#, elixir-autogen, elixir-format
msgid "Added %{count} images to post"
msgstr "%{count} immagini aggiunte al post"
#: lib/bds/desktop/shell_live.ex:621
#: lib/bds/desktop/shell_live.ex:626
#, elixir-autogen, elixir-format
msgid "Added %{title}"
msgstr "%{title} aggiunto"
@@ -3204,18 +3204,18 @@ msgstr "Guida per l'utente finale per flussi editoriali, media, modelli, traduzi
msgid "Image Import Concurrency"
msgstr "Importazione simultanea immagini"
#: lib/bds/desktop/shell_live.ex:408
#: lib/bds/desktop/shell_live.ex:421
#: lib/bds/desktop/shell_live.ex:621
#: lib/bds/desktop/shell_live.ex:649
#: lib/bds/desktop/shell_live.ex:658
#: lib/bds/desktop/shell_live.ex:665
#: lib/bds/desktop/shell_live.ex:413
#: lib/bds/desktop/shell_live.ex:426
#: lib/bds/desktop/shell_live.ex:626
#: lib/bds/desktop/shell_live.ex:654
#: lib/bds/desktop/shell_live.ex:663
#: lib/bds/desktop/shell_live.ex:670
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:407
#, elixir-autogen, elixir-format
msgid "Add Gallery Images"
msgstr "Aggiungi immagini alla galleria"
#: lib/bds/desktop/shell_live.ex:666
#: lib/bds/desktop/shell_live.ex:671
#, elixir-autogen, elixir-format
msgid "Failed to process %{path}: %{reason}"
msgstr "Impossibile elaborare %{path}: %{reason}"
@@ -3230,12 +3230,12 @@ msgstr "Archivia"
msgid "Move this post to the archive"
msgstr "Sposta questo articolo nell'archivio"
#: lib/bds/desktop/shell_live/post_editor.ex:596
#: lib/bds/desktop/shell_live/post_editor.ex:601
#, elixir-autogen, elixir-format
msgid "Post archived"
msgstr "Articolo archiviato"
#: lib/bds/desktop/shell_live/post_editor.ex:629
#: lib/bds/desktop/shell_live/post_editor.ex:634
#, elixir-autogen, elixir-format
msgid "Post unarchived"
msgstr "Articolo ripristinato"

View File

@@ -18,7 +18,7 @@ msgstr ""
msgid "Archive"
msgstr ""
#: lib/bds/rendering/labels.ex:54
#: lib/bds/rendering/labels.ex:55
#, elixir-autogen, elixir-format
msgid "April"
msgstr ""
@@ -28,7 +28,7 @@ msgstr ""
msgid "Archive calendar"
msgstr ""
#: lib/bds/rendering/labels.ex:70
#: lib/bds/rendering/labels.ex:71
#, elixir-autogen, elixir-format
msgid "August"
msgstr ""
@@ -48,27 +48,27 @@ msgstr ""
msgid "Close calendar"
msgstr ""
#: lib/bds/rendering/labels.ex:86
#: lib/bds/rendering/labels.ex:87
#, elixir-autogen, elixir-format
msgid "December"
msgstr ""
#: lib/bds/rendering/labels.ex:46
#: lib/bds/rendering/labels.ex:47
#, elixir-autogen, elixir-format
msgid "February"
msgstr ""
#: lib/bds/rendering/labels.ex:42
#: lib/bds/rendering/labels.ex:43
#, elixir-autogen, elixir-format
msgid "January"
msgstr ""
#: lib/bds/rendering/labels.ex:66
#: lib/bds/rendering/labels.ex:67
#, elixir-autogen, elixir-format
msgid "July"
msgstr ""
#: lib/bds/rendering/labels.ex:62
#: lib/bds/rendering/labels.ex:63
#, elixir-autogen, elixir-format
msgid "June"
msgstr ""
@@ -88,22 +88,22 @@ msgstr ""
msgid "Loading calendar…"
msgstr ""
#: lib/bds/rendering/labels.ex:50
#: lib/bds/rendering/labels.ex:51
#, elixir-autogen, elixir-format
msgid "March"
msgstr ""
#: lib/bds/rendering/labels.ex:58
#: lib/bds/rendering/labels.ex:59
#, elixir-autogen, elixir-format
msgid "May"
msgstr ""
#: lib/bds/rendering/labels.ex:82
#: lib/bds/rendering/labels.ex:83
#, elixir-autogen, elixir-format
msgid "November"
msgstr ""
#: lib/bds/rendering/labels.ex:78
#: lib/bds/rendering/labels.ex:79
#, elixir-autogen, elixir-format
msgid "October"
msgstr ""
@@ -123,7 +123,7 @@ msgstr ""
msgid "Search..."
msgstr ""
#: lib/bds/rendering/labels.ex:74
#: lib/bds/rendering/labels.ex:75
#, elixir-autogen, elixir-format
msgid "September"
msgstr ""
@@ -148,22 +148,27 @@ msgstr ""
msgid "older"
msgstr ""
#: lib/bds/rendering/labels.ex:31
#: lib/bds/rendering/labels.ex:32
#, elixir-autogen, elixir-format
msgid "Back to preview home"
msgstr ""
#: lib/bds/rendering/labels.ex:30
#: lib/bds/rendering/labels.ex:31
#, elixir-autogen, elixir-format
msgid "The requested preview page could not be found."
msgstr ""
#: lib/bds/rendering/labels.ex:33
#: lib/bds/rendering/labels.ex:34
#, elixir-autogen, elixir-format
msgid "Vimeo video"
msgstr ""
#: lib/bds/rendering/labels.ex:32
#: lib/bds/rendering/labels.ex:33
#, elixir-autogen, elixir-format
msgid "YouTube video"
msgstr ""
#: lib/bds/rendering/labels.ex:30
#, elixir-autogen, elixir-format
msgid "No results found"
msgstr ""

View File

@@ -92,7 +92,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:42
#: lib/bds/desktop/shell_live/overlay_manager.ex:72
#: lib/bds/desktop/shell_live/post_editor.ex:776
#: lib/bds/desktop/shell_live/post_editor.ex:781
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43
#, elixir-autogen, elixir-format
msgid "AI Suggestions"
@@ -270,14 +270,14 @@ msgid "Auto"
msgstr ""
#: lib/bds/desktop/shell_data.ex:98
#: lib/bds/desktop/shell_live.ex:409
#: lib/bds/desktop/shell_live.ex:414
#: lib/bds/desktop/shell_live/chat_editor.ex:231
#: lib/bds/desktop/shell_live/media_editor.ex:156
#: lib/bds/desktop/shell_live/media_editor.ex:349
#: lib/bds/desktop/shell_live/media_editor.ex:538
#: lib/bds/desktop/shell_live/overlay_manager.ex:73
#: lib/bds/desktop/shell_live/post_editor.ex:643
#: lib/bds/desktop/shell_live/post_editor.ex:692
#: lib/bds/desktop/shell_live/post_editor.ex:648
#: lib/bds/desktop/shell_live/post_editor.ex:697
#, elixir-autogen, elixir-format
msgid "Automatic AI actions stay gated by airplane mode."
msgstr ""
@@ -417,7 +417,7 @@ msgstr ""
msgid "Category name is required"
msgstr ""
#: lib/bds/desktop/shell_live.ex:932
#: lib/bds/desktop/shell_live.ex:937
#: lib/bds/desktop/shell_live/chat_editor.ex:87
#: lib/bds/desktop/shell_live/chat_editor.ex:230
#: lib/bds/desktop/shell_live/chat_editor.ex:318
@@ -550,7 +550,7 @@ msgstr ""
msgid "Could not write MCP config %{path}: %{reason}"
msgstr ""
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:42
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:48
#, elixir-autogen, elixir-format
msgid "Create"
msgstr ""
@@ -662,7 +662,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/sidebar_delete.ex:179
#: lib/bds/desktop/shell_live/sidebar_delete.ex:181
#: lib/bds/desktop/shell_live/sidebar_delete.ex:182
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:58
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:70
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:15
#, elixir-autogen, elixir-format
msgid "Delete"
@@ -719,9 +719,9 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:199
#: lib/bds/desktop/shell_live/media_editor.ex:205
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:59
#: lib/bds/desktop/shell_live/post_editor.ex:642
#: lib/bds/desktop/shell_live/post_editor.ex:671
#: lib/bds/desktop/shell_live/post_editor.ex:677
#: lib/bds/desktop/shell_live/post_editor.ex:647
#: lib/bds/desktop/shell_live/post_editor.ex:676
#: lib/bds/desktop/shell_live/post_editor.ex:682
#, elixir-autogen, elixir-format
msgid "Detect Language"
msgstr ""
@@ -762,7 +762,7 @@ msgid "Discard changes and restore the published version"
msgstr ""
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:21
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:84
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:96
#, elixir-autogen, elixir-format
msgid "Discover"
msgstr ""
@@ -1004,7 +1004,7 @@ msgstr ""
msgid "Generate Site"
msgstr ""
#: lib/bds/desktop/shell_live.ex:933
#: lib/bds/desktop/shell_live.ex:938
#: lib/bds/ui/sidebar.ex:784
#, elixir-autogen, elixir-format
msgid "Git"
@@ -1017,7 +1017,7 @@ msgid "Git Diff"
msgstr ""
#: lib/bds/desktop/shell_data.ex:244
#: lib/bds/desktop/shell_live.ex:929
#: lib/bds/desktop/shell_live.ex:934
#: lib/bds/desktop/shell_live/panel_renderer.ex:171
#, elixir-autogen, elixir-format
msgid "Git Log"
@@ -1046,7 +1046,7 @@ msgstr ""
#: lib/bds/desktop/shell_data.ex:116
#: lib/bds/desktop/shell_live/index.html.heex:666
#: lib/bds/desktop/shell_live/media_editor.ex:703
#: lib/bds/desktop/shell_live/post_editor.ex:894
#: lib/bds/desktop/shell_live/post_editor.ex:899
#, elixir-autogen, elixir-format
msgid "Idle"
msgstr ""
@@ -1140,9 +1140,9 @@ msgstr ""
msgid "Import failed: %{error}"
msgstr ""
#: lib/bds/desktop/shell_live.ex:580
#: lib/bds/desktop/shell_live.ex:970
#: lib/bds/desktop/shell_live.ex:976
#: lib/bds/desktop/shell_live.ex:585
#: lib/bds/desktop/shell_live.ex:975
#: lib/bds/desktop/shell_live.ex:981
#: lib/bds/desktop/shell_live/sidebar_create.ex:47
#, elixir-autogen, elixir-format
msgid "Import media"
@@ -1217,7 +1217,7 @@ msgid "Language"
msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:206
#: lib/bds/desktop/shell_live/post_editor.ex:678
#: lib/bds/desktop/shell_live/post_editor.ex:683
#, elixir-autogen, elixir-format
msgid "Language detection failed."
msgstr ""
@@ -1301,7 +1301,7 @@ msgstr ""
msgid "Mapped"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:897
#: lib/bds/desktop/shell_live/post_editor.ex:902
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:120
#, elixir-autogen, elixir-format
msgid "Markdown"
@@ -1341,12 +1341,12 @@ msgstr ""
msgid "Menu"
msgstr ""
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:75
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:87
#, elixir-autogen, elixir-format
msgid "Merge"
msgstr ""
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:66
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:78
#: lib/bds/ui/sidebar.ex:747
#, elixir-autogen, elixir-format
msgid "Merge Tags"
@@ -1437,7 +1437,7 @@ msgstr ""
msgid "New Template"
msgstr ""
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:52
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:64
#, elixir-autogen, elixir-format
msgid "No Template"
msgstr ""
@@ -1734,7 +1734,7 @@ msgstr ""
msgid "Other (%{count})"
msgstr ""
#: lib/bds/desktop/shell_live.ex:928
#: lib/bds/desktop/shell_live.ex:933
#: lib/bds/desktop/shell_live/panel_renderer.ex:83
#, elixir-autogen, elixir-format
msgid "Output"
@@ -1799,16 +1799,16 @@ msgid "Persist the detected language for this media item"
msgstr ""
#: lib/bds/desktop/shell_live/misc_editor.ex:742
#: lib/bds/desktop/shell_live/post_editor.ex:474
#: lib/bds/desktop/shell_live/post_editor.ex:478
#: lib/bds/desktop/shell_live/post_editor.ex:513
#: lib/bds/desktop/shell_live/post_editor.ex:517
#: lib/bds/desktop/shell_live/post_editor.ex:552
#: lib/bds/desktop/shell_live/post_editor.ex:567
#: lib/bds/desktop/shell_live/post_editor.ex:596
#: lib/bds/desktop/shell_live/post_editor.ex:599
#: lib/bds/desktop/shell_live/post_editor.ex:629
#: lib/bds/desktop/shell_live/post_editor.ex:632
#: lib/bds/desktop/shell_live/post_editor.ex:479
#: lib/bds/desktop/shell_live/post_editor.ex:483
#: lib/bds/desktop/shell_live/post_editor.ex:518
#: lib/bds/desktop/shell_live/post_editor.ex:522
#: lib/bds/desktop/shell_live/post_editor.ex:557
#: lib/bds/desktop/shell_live/post_editor.ex:572
#: lib/bds/desktop/shell_live/post_editor.ex:601
#: lib/bds/desktop/shell_live/post_editor.ex:604
#: lib/bds/desktop/shell_live/post_editor.ex:634
#: lib/bds/desktop/shell_live/post_editor.ex:637
#: lib/bds/desktop/shell_live/sidebar_components.ex:515
#: lib/bds/desktop/shell_live/sidebar_delete.ex:174
#: lib/bds/ui/registry.ex:99
@@ -1838,12 +1838,12 @@ msgstr ""
msgid "Post is marked as do-not-translate but has translations"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:513
#: lib/bds/desktop/shell_live/post_editor.ex:518
#, elixir-autogen, elixir-format
msgid "Post published"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:474
#: lib/bds/desktop/shell_live/post_editor.ex:479
#, elixir-autogen, elixir-format
msgid "Post saved"
msgstr ""
@@ -1867,7 +1867,7 @@ msgstr ""
msgid "Preferences"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:898
#: lib/bds/desktop/shell_live/post_editor.ex:903
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:121
#, elixir-autogen, elixir-format
msgid "Preview"
@@ -1936,7 +1936,7 @@ msgid "Publish Selected"
msgstr ""
#: lib/bds/desktop/shell_data.ex:181
#: lib/bds/desktop/shell_live/post_editor.ex:892
#: lib/bds/desktop/shell_live/post_editor.ex:897
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:456
#: lib/bds/ui/sidebar.ex:320
#, elixir-autogen, elixir-format
@@ -2134,7 +2134,7 @@ msgstr ""
msgid "Result"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:893
#: lib/bds/desktop/shell_live/post_editor.ex:898
#, elixir-autogen, elixir-format
msgid "Reverted"
msgstr ""
@@ -2174,7 +2174,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:312
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:329
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:342
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:57
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:69
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:13
#, elixir-autogen, elixir-format
msgid "Save"
@@ -2186,7 +2186,7 @@ msgid "Save Translation"
msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:702
#: lib/bds/desktop/shell_live/post_editor.ex:891
#: lib/bds/desktop/shell_live/post_editor.ex:896
#, elixir-autogen, elixir-format
msgid "Saved"
msgstr ""
@@ -2444,7 +2444,7 @@ msgstr ""
msgid "Switch project"
msgstr ""
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:82
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:94
#, elixir-autogen, elixir-format
msgid "Sync"
msgstr ""
@@ -2481,11 +2481,11 @@ msgstr ""
#: lib/bds/desktop/shell_live/index.html.heex:325
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:161
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:158
#: lib/bds/desktop/shell_live/tags_editor.ex:94
#: lib/bds/desktop/shell_live/tags_editor.ex:136
#: lib/bds/desktop/shell_live/tags_editor.ex:189
#: lib/bds/desktop/shell_live/tags_editor.ex:203
#: lib/bds/desktop/shell_live/tags_editor.ex:234
#: lib/bds/desktop/shell_live/tags_editor.ex:104
#: lib/bds/desktop/shell_live/tags_editor.ex:166
#: lib/bds/desktop/shell_live/tags_editor.ex:219
#: lib/bds/desktop/shell_live/tags_editor.ex:233
#: lib/bds/desktop/shell_live/tags_editor.ex:264
#: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:11
#: lib/bds/ui/registry.ex:54
#: lib/bds/ui/registry.ex:103
@@ -2496,7 +2496,7 @@ msgstr ""
msgid "Tags"
msgstr ""
#: lib/bds/desktop/shell_live.ex:927
#: lib/bds/desktop/shell_live.ex:932
#: lib/bds/desktop/shell_live/panel_renderer.ex:54
#, elixir-autogen, elixir-format
msgid "Tasks"
@@ -2661,9 +2661,9 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:558
#: lib/bds/desktop/shell_live/media_editor.ex:563
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:76
#: lib/bds/desktop/shell_live/post_editor.ex:691
#: lib/bds/desktop/shell_live/post_editor.ex:720
#: lib/bds/desktop/shell_live/post_editor.ex:696
#: lib/bds/desktop/shell_live/post_editor.ex:725
#: lib/bds/desktop/shell_live/post_editor.ex:730
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:60
#, elixir-autogen, elixir-format
msgid "Translate"
@@ -2740,7 +2740,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:701
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:10
#: lib/bds/desktop/shell_live/post_editor.ex:890
#: lib/bds/desktop/shell_live/post_editor.ex:895
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:7
#, elixir-autogen, elixir-format
msgid "Unsaved"
@@ -3192,12 +3192,12 @@ msgstr ""
msgid "Comparing database and filesystem metadata"
msgstr ""
#: lib/bds/desktop/shell_live.ex:650
#: lib/bds/desktop/shell_live.ex:655
#, elixir-autogen, elixir-format
msgid "Added %{count} images to post"
msgstr ""
#: lib/bds/desktop/shell_live.ex:621
#: lib/bds/desktop/shell_live.ex:626
#, elixir-autogen, elixir-format
msgid "Added %{title}"
msgstr ""
@@ -3217,18 +3217,18 @@ msgstr ""
msgid "Image Import Concurrency"
msgstr ""
#: lib/bds/desktop/shell_live.ex:408
#: lib/bds/desktop/shell_live.ex:421
#: lib/bds/desktop/shell_live.ex:621
#: lib/bds/desktop/shell_live.ex:649
#: lib/bds/desktop/shell_live.ex:658
#: lib/bds/desktop/shell_live.ex:665
#: lib/bds/desktop/shell_live.ex:413
#: lib/bds/desktop/shell_live.ex:426
#: lib/bds/desktop/shell_live.ex:626
#: lib/bds/desktop/shell_live.ex:654
#: lib/bds/desktop/shell_live.ex:663
#: lib/bds/desktop/shell_live.ex:670
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:407
#, elixir-autogen, elixir-format
msgid "Add Gallery Images"
msgstr ""
#: lib/bds/desktop/shell_live.ex:666
#: lib/bds/desktop/shell_live.ex:671
#, elixir-autogen, elixir-format
msgid "Failed to process %{path}: %{reason}"
msgstr ""
@@ -3243,12 +3243,12 @@ msgstr ""
msgid "Move this post to the archive"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:596
#: lib/bds/desktop/shell_live/post_editor.ex:601
#, elixir-autogen, elixir-format
msgid "Post archived"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:629
#: lib/bds/desktop/shell_live/post_editor.ex:634
#, elixir-autogen, elixir-format
msgid "Post unarchived"
msgstr ""

View File

@@ -0,0 +1,65 @@
/* Styling for the self-contained PagefindUI search widget. */
.pagefind-ui {
display: block;
font-size: 0.95rem;
}
.pagefind-ui__form {
margin: 0 0 0.75rem 0;
}
.pagefind-ui__search-input {
width: 100%;
padding: 0.5rem 0.75rem;
border: 1px solid var(--pico-form-element-border-color, #ccc);
border-radius: 0.375rem;
font: inherit;
box-sizing: border-box;
}
.pagefind-ui__results {
display: block;
}
.pagefind-ui__message {
margin: 0.5rem 0;
opacity: 0.7;
}
.pagefind-ui__result-list {
list-style: none;
margin: 0;
padding: 0;
}
.pagefind-ui__result {
padding: 0.5rem 0;
border-bottom: 1px solid var(--pico-muted-border-color, #eee);
}
.pagefind-ui__result:last-child {
border-bottom: none;
}
.pagefind-ui__result-link {
display: block;
font-weight: 600;
text-decoration: none;
}
.pagefind-ui__result-link:hover {
text-decoration: underline;
}
.pagefind-ui__result-excerpt {
margin: 0.25rem 0 0 0;
opacity: 0.8;
line-height: 1.4;
}
.pagefind-ui__result-excerpt mark {
background: var(--pico-mark-background-color, #ffe08a);
color: inherit;
padding: 0 0.1em;
border-radius: 0.15em;
}

View File

@@ -0,0 +1,272 @@
/*
* Self-contained client-side search UI for generated blog output.
*
* Exposes a global `PagefindUI` constructor that the bundled
* `search-runtime.js` instantiates. It fetches the per-language fragment
* index (`index.json`) co-located with this script, performs full-text
* matching over the indexed post fragments, and renders ranked results.
*
* No external/CDN dependencies — everything needed ships in this file.
*/
(function () {
"use strict";
// Resolve the sibling index.json relative to this script's own URL so the
// same bundle works for every language directory (e.g. /pagefind/,
// /de/pagefind/) without baking the path in at generation time.
var scriptSrc = (document.currentScript && document.currentScript.src) || "";
function resolveIndexUrl(src) {
try {
return new URL("index.json", src).href;
} catch (err) {
return "index.json";
}
}
function tokenize(value) {
return (value || "")
.toLowerCase()
.split(/[^\p{L}\p{N}]+/u)
.filter(function (token) {
return token.length > 0;
});
}
function PagefindUI(options) {
options = options || {};
this.element =
typeof options.element === "string"
? document.querySelector(options.element)
: options.element;
if (!this.element) {
return;
}
var translations = options.translations || {};
this.placeholder = translations.placeholder || "Search";
this.zeroResults = translations.zero_results || "No results found";
this.indexUrl = options.indexUrl || resolveIndexUrl(scriptSrc);
this.pages = null;
this.loadPromise = null;
this.render();
}
PagefindUI.prototype.render = function () {
var self = this;
this.element.classList.add("pagefind-ui");
this.element.innerHTML = "";
var form = document.createElement("form");
form.className = "pagefind-ui__form";
form.setAttribute("role", "search");
form.addEventListener("submit", function (event) {
event.preventDefault();
});
var input = document.createElement("input");
input.type = "search";
input.className = "pagefind-ui__search-input";
input.setAttribute("autocomplete", "off");
input.placeholder = this.placeholder;
input.setAttribute("aria-label", this.placeholder);
var results = document.createElement("div");
results.className = "pagefind-ui__results";
form.appendChild(input);
this.element.appendChild(form);
this.element.appendChild(results);
this.input = input;
this.results = results;
var debounce = null;
input.addEventListener("input", function () {
window.clearTimeout(debounce);
debounce = window.setTimeout(function () {
self.search(input.value);
}, 120);
});
};
PagefindUI.prototype.load = function () {
if (this.pages) {
return Promise.resolve(this.pages);
}
if (this.loadPromise) {
return this.loadPromise;
}
var self = this;
this.loadPromise = fetch(this.indexUrl, { credentials: "same-origin" })
.then(function (response) {
if (!response.ok) {
throw new Error("pagefind index request failed: " + response.status);
}
return response.json();
})
.then(function (data) {
self.pages = (data && data.pages) || [];
return self.pages;
})
.catch(function () {
self.pages = [];
return self.pages;
});
return this.loadPromise;
};
PagefindUI.prototype.search = function (query) {
var self = this;
var terms = tokenize(query);
if (terms.length === 0) {
this.results.innerHTML = "";
return;
}
this.load().then(function (pages) {
var matches = [];
for (var i = 0; i < pages.length; i++) {
var page = pages[i];
var title = (page.title || "").toLowerCase();
var body = (page.text || "").toLowerCase();
var score = 0;
var matchedAll = true;
for (var t = 0; t < terms.length; t++) {
var term = terms[t];
var bodyHits = body.split(term).length - 1;
var titleHits = title.split(term).length - 1;
if (bodyHits === 0 && titleHits === 0) {
matchedAll = false;
break;
}
// Title matches are weighted more heavily than body matches.
score += bodyHits + titleHits * 5;
}
if (matchedAll) {
matches.push({ page: page, score: score });
}
}
matches.sort(function (a, b) {
return b.score - a.score;
});
self.renderResults(matches.slice(0, 10), terms);
});
};
PagefindUI.prototype.renderResults = function (matches, terms) {
this.results.innerHTML = "";
if (matches.length === 0) {
var message = document.createElement("p");
message.className = "pagefind-ui__message";
message.textContent = this.zeroResults;
this.results.appendChild(message);
return;
}
var list = document.createElement("ol");
list.className = "pagefind-ui__result-list";
for (var i = 0; i < matches.length; i++) {
var page = matches[i].page;
var item = document.createElement("li");
item.className = "pagefind-ui__result";
var link = document.createElement("a");
link.className = "pagefind-ui__result-link";
link.href = page.url;
link.textContent = page.title || page.url;
var excerpt = document.createElement("p");
excerpt.className = "pagefind-ui__result-excerpt";
buildExcerpt(excerpt, page.text || "", terms);
item.appendChild(link);
item.appendChild(excerpt);
list.appendChild(item);
}
this.results.appendChild(list);
};
// Build an excerpt around the first matching term and highlight all terms
// with <mark>, using safe text nodes (never innerHTML on untrusted text).
function buildExcerpt(target, text, terms) {
var lower = text.toLowerCase();
var firstHit = -1;
for (var t = 0; t < terms.length; t++) {
var idx = lower.indexOf(terms[t]);
if (idx !== -1 && (firstHit === -1 || idx < firstHit)) {
firstHit = idx;
}
}
var start = firstHit === -1 ? 0 : Math.max(0, firstHit - 60);
var snippet = text.slice(start, start + 220);
if (start > 0) {
snippet = "…" + snippet;
}
if (start + 220 < text.length) {
snippet = snippet + "…";
}
highlightInto(target, snippet, terms);
}
function highlightInto(target, snippet, terms) {
var escaped = terms
.map(function (term) {
return term.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
})
.filter(function (term) {
return term.length > 0;
});
if (escaped.length === 0) {
target.appendChild(document.createTextNode(snippet));
return;
}
var pattern = new RegExp("(" + escaped.join("|") + ")", "giu");
var lastIndex = 0;
var match;
while ((match = pattern.exec(snippet)) !== null) {
if (match.index > lastIndex) {
target.appendChild(
document.createTextNode(snippet.slice(lastIndex, match.index))
);
}
var mark = document.createElement("mark");
mark.textContent = match[0];
target.appendChild(mark);
lastIndex = match.index + match[0].length;
// Guard against zero-length matches looping forever.
if (match.index === pattern.lastIndex) {
pattern.lastIndex++;
}
}
if (lastIndex < snippet.length) {
target.appendChild(document.createTextNode(snippet.slice(lastIndex)));
}
}
window.PagefindUI = PagefindUI;
})();

View File

@@ -15,11 +15,12 @@
}
initialized = true;
var placeholder = root.getAttribute('data-search-placeholder') || 'Search...';
var zeroResults = root.getAttribute('data-search-no-results') || 'No results found';
new PagefindUI({
element: root,
showSubResults: true,
showImages: false,
translations: { placeholder: placeholder }
translations: { placeholder: placeholder, zero_results: zeroResults }
});
var input = root.querySelector('input');
if (input) {

View File

@@ -15,7 +15,7 @@
</svg>
</button>
<div class="blog-search-panel" data-blog-search-panel hidden>
<div id="blog-search" data-blog-search-root data-search-placeholder="{{ labels.search_placeholder }}"></div>
<div id="blog-search" data-blog-search-root data-search-placeholder="{{ labels.search_placeholder }}" data-search-no-results="{{ labels.search_no_results }}"></div>
</div>
</div>
</nav>
@@ -35,7 +35,7 @@
</svg>
</button>
<div class="blog-search-panel" data-blog-search-panel hidden>
<div id="blog-search" data-blog-search-root data-search-placeholder="{{ labels.search_placeholder }}"></div>
<div id="blog-search" data-blog-search-root data-search-placeholder="{{ labels.search_placeholder }}" data-search-no-results="{{ labels.search_no_results }}"></div>
</div>
</div>
{% endif %}

View File

@@ -7,7 +7,7 @@ defmodule BDS.CSM025HardcodedLanguagesTest do
%{language: main, blog_languages: languages}
end
defp html(path), do: {path, "<p>hello</p>"}
defp html(path), do: {path, "<article data-pagefind-body><p>hello</p></article>"}
describe "build_outputs/2 derives language prefixes from plan" do
test "no hardcoded language prefixes in source" do

View File

@@ -0,0 +1,91 @@
defmodule BDS.Generation.PagefindTest do
use ExUnit.Case, async: true
alias BDS.Generation.Pagefind
defp plan(language, blog_languages), do: %{language: language, blog_languages: blog_languages}
defp index_for(outputs, relative_path) do
{_path, content} = Enum.find(outputs, fn {path, _} -> path == relative_path end)
Jason.decode!(content)
end
defp content_for(outputs, relative_path) do
{_path, content} = Enum.find(outputs, fn {path, _} -> path == relative_path end)
content
end
test "indexes only pages marked with data-pagefind-body and scopes text to that region" do
post_html = """
<html><head><title>My First Post</title></head>
<body>
<nav>Home Archive Contact ignored-nav-term</nav>
<article data-pagefind-body><h1>My First Post</h1><p>Searchable elixir content.</p></article>
<footer>footer-term</footer>
</body></html>
"""
list_html = "<html><head><title>Home</title></head><body><ul>list page</ul></body></html>"
outputs =
Pagefind.build_outputs(plan("en", ["en"]), [
{"posts/first.html", post_html},
{"index.html", list_html}
])
index = index_for(outputs, "pagefind/index.json")
assert index["language"] == "en"
# Only the marked post page is indexed; the unmarked list page is excluded.
urls = Enum.map(index["pages"], & &1["url"])
assert "/posts/first.html" in urls
refute "/index.html" in urls
page = Enum.find(index["pages"], &(&1["url"] == "/posts/first.html"))
assert page["title"] == "My First Post"
# Body text is scoped to data-pagefind-body — nav/footer text is excluded.
assert page["text"] =~ "Searchable elixir content"
refute page["text"] =~ "ignored-nav-term"
refute page["text"] =~ "footer-term"
end
test "builds a separate index per language scoped by route prefix" do
en_post =
"<html><head><title>EN</title></head><body><article data-pagefind-body>english body</article></body></html>"
de_post =
"<html><head><title>DE</title></head><body><article data-pagefind-body>deutscher text</article></body></html>"
outputs =
Pagefind.build_outputs(plan("en", ["en", "de"]), [
{"posts/first.html", en_post},
{"de/posts/first.html", de_post}
])
en_index = index_for(outputs, "pagefind/index.json")
de_index = index_for(outputs, "de/pagefind/index.json")
assert en_index["language"] == "en"
assert Enum.map(en_index["pages"], & &1["url"]) == ["/posts/first.html"]
assert de_index["language"] == "de"
assert Enum.map(de_index["pages"], & &1["url"]) == ["/de/posts/first.html"]
end
test "emits a functional PagefindUI script and stylesheet per language" do
outputs =
Pagefind.build_outputs(plan("en", ["en"]), [
{"posts/first.html",
"<html><head><title>T</title></head><body><article data-pagefind-body>b</article></body></html>"}
])
js = content_for(outputs, "pagefind/pagefind-ui.js")
css = content_for(outputs, "pagefind/pagefind-ui.css")
# Real UI defines the PagefindUI global the search runtime instantiates.
assert js =~ "PagefindUI"
refute js =~ "window.bDSPagefind"
# Stylesheet carries real UI selectors, not a one-liner stub.
assert css =~ ".pagefind-ui__results"
end
end

View File

@@ -252,7 +252,7 @@ defmodule BDS.GenerationTest do
title: "Post View",
kind: :post,
content:
"<article class=\"post-template\"><h1>{{ post.title }}</h1><div class=\"body\">{{ post.content }}</div></article>"
"<article class=\"post-template\" data-pagefind-body><h1>{{ post.title }}</h1><div class=\"body\">{{ post.content }}</div></article>"
})
assert {:ok, published_post_template} = BDS.Templates.publish_template(post_template.id)