diff --git a/lib/bds/desktop/shell_live/settings_editor/ai_settings.ex b/lib/bds/desktop/shell_live/settings_editor/ai_settings.ex index 4693a2c..00956fc 100644 --- a/lib/bds/desktop/shell_live/settings_editor/ai_settings.ex +++ b/lib/bds/desktop/shell_live/settings_editor/ai_settings.ex @@ -107,6 +107,24 @@ defmodule BDS.Desktop.ShellLive.SettingsEditor.AISettings do defp do_save_ai(socket, reload, append_output) do attrs = ai_attrs(socket.assigns) + case save_attrs(attrs) do + :ok -> + LiveToast.send_toast(:info, dgettext("ui", "AI settings saved.")) + + socket + |> assign(:settings_editor_ai_draft, %{}) + |> assign(:offline_mode, attrs.offline_mode) + |> reload.(socket.assigns.workbench) + + {:error, reason} -> + surface_ai_error(socket, reload, append_output, reason) + end + end + + # The full save pipeline as a pure function so the TUI settings form + # (BDS.UI.SettingsForm) drives the exact same writes as the GUI editor. + @spec save_attrs(map()) :: :ok | {:error, term()} + def save_attrs(attrs) do with :ok <- put_endpoint_preferences( :online, @@ -156,15 +174,7 @@ defmodule BDS.Desktop.ShellLive.SettingsEditor.AISettings do attrs.offline_chat_images ), :ok <- EditorSettings.put_global_setting("ai.system_prompt", attrs.system_prompt) do - LiveToast.send_toast(:info, dgettext("ui", "AI settings saved.")) - - socket - |> assign(:settings_editor_ai_draft, %{}) - |> assign(:offline_mode, attrs.offline_mode) - |> reload.(socket.assigns.workbench) - else - {:error, reason} -> - surface_ai_error(socket, reload, append_output, reason) + :ok end end diff --git a/lib/bds/metadata.ex b/lib/bds/metadata.ex index 4b3244e..1735f0e 100644 --- a/lib/bds/metadata.ex +++ b/lib/bds/metadata.ex @@ -49,6 +49,11 @@ defmodule BDS.Metadata do @typedoc "Attribute map for `update_project_metadata/2`." @type attrs :: %{optional(atom()) => term(), optional(String.t()) => term()} + @spec supported_pico_themes() :: [String.t()] + def supported_pico_themes do + ["default" | @supported_pico_themes |> MapSet.delete("default") |> Enum.sort()] + end + @spec get_project_metadata(String.t()) :: {:ok, metadata_state()} def get_project_metadata(project_id) do project = Projects.get_project!(project_id) diff --git a/lib/bds/tui.ex b/lib/bds/tui.ex index 601f9ad..bb0ae4e 100644 --- a/lib/bds/tui.ex +++ b/lib/bds/tui.ex @@ -10,7 +10,11 @@ defmodule BDS.TUI do ## Keys Sidebar focus: `↑/↓`/`j/k` navigate, `enter` open, `n` new post, - `1..5` switch view (posts/media/templates/scripts/tags), `7` git panel + `1..5` switch view (posts/media/templates/scripts/tags), `6` settings + (the GUI preferences sections as sidebar entries; enter opens a + section's form — enter edits a text field in a status-line prompt, + toggles a boolean or cycles an enum, `ctrl+s` saves through the same + backends as the GUI, esc closes), `7` git panel (changed files plus commit history in the sidebar, scrollable whole-folder diff in the main area; `c` commit all, `u` pull, `s` push, enter jumps the diff to the selected file), `r` refresh, @@ -39,13 +43,14 @@ defmodule BDS.TUI do alias BDS.Posts alias BDS.Projects alias BDS.UI.PostEditor.{Draft, Metadata, Persistence} + alias BDS.UI.SettingsForm alias BDS.UI.Sidebar alias ExRatatui.Layout alias ExRatatui.Layout.Rect alias ExRatatui.Style alias ExRatatui.Widgets.{Block, Clear, List, Markdown, Paragraph, Tabs, Textarea} - @views ~w(posts media templates scripts tags git) + @views ~w(posts media templates scripts tags settings git) @git_diff_scroll_step 10 @git_max_diff_lines 5000 @@ -72,6 +77,7 @@ defmodule BDS.TUI do filters_by_view: %{}, git: nil, git_commit: nil, + settings_form: nil, report: nil, handled_task_ids: nil, task_polling: false, @@ -139,6 +145,10 @@ defmodule BDS.TUI do when search != nil, do: search_key(key, state) + def handle_event(%ExRatatui.Event.Key{kind: "press"} = key, %{settings_form: form} = state) + when form != nil, + do: settings_form_key(key, state) + def handle_event(%ExRatatui.Event.Key{code: "esc"}, %{image: image} = state) when image != nil, do: {:noreply, %{state | image: nil}} @@ -159,15 +169,13 @@ defmodule BDS.TUI do defp sidebar_key(%{code: code}, state) when code in ["up", "k"], do: {:noreply, move_selection(state, -1)} - defp sidebar_key(%{code: code}, state) when code in ~w(1 2 3 4 5) do + # Settings is panel "6" (issue #29) and git panel "7" (issue #30), + # matching the GUI panel numbering. + defp sidebar_key(%{code: code}, state) when code in ~w(1 2 3 4 5 6 7) do view = Enum.at(@views, String.to_integer(code) - 1) {:noreply, load_sidebar(%{state | view: view, selected: 0, image: nil})} end - # Git is panel "7", matching the GUI panel numbering (issue #30). - defp sidebar_key(%{code: "7"}, state), - do: {:noreply, load_sidebar(%{state | view: "git", selected: 0, image: nil})} - defp sidebar_key(%{code: "c"}, %{view: "git"} = state) do if state.git do {:noreply, %{state | git_commit: %{input: ""}}} @@ -230,6 +238,8 @@ defmodule BDS.TUI do %{route: "post", id: post_id} -> {:noreply, open_post(state, post_id)} %{route: "media", id: media_id} -> {:noreply, open_media(state, media_id)} %{route: "git_file", id: path} -> {:noreply, jump_to_file_diff(state, path)} + %{route: "settings", id: "settings-" <> section} -> {:noreply, open_settings_form(state, section)} + %{route: "style"} -> {:noreply, open_settings_form(state, "style")} %{id: _id} -> {:noreply, toast(state, view_label(state.view), dgettext("ui", "Editing this item is not available in the terminal UI yet."))} _other -> {:noreply, state} end @@ -397,6 +407,153 @@ defmodule BDS.TUI do defp format_git_error({:git_failed, output}), do: output defp format_git_error(reason), do: inspect(reason) + # ── Events: settings form (issue #29) ───────────────────────────────────── + + # A settings sidebar entry opens its section as a generic typed-field + # form in the main area, backed by BDS.UI.SettingsForm — the same + # preferences the GUI settings editor operates on. + defp open_settings_form(state, section) do + form = SettingsForm.load(section, state.project_id) + + %{ + state + | settings_form: %{ + section: form.section, + title: form.title, + fields: form.fields, + selected: seek_field(form.fields, 0, 1), + input: nil, + dirty: false + }, + image: nil + } + end + + # Text fields edit in a status-line prompt (like the commit message): + # enter commits the value into the field, esc cancels just the prompt. + defp settings_form_key(%{code: "esc"}, %{settings_form: %{input: input}} = state) + when input != nil, + do: {:noreply, put_in(state.settings_form.input, nil)} + + defp settings_form_key(%{code: "enter"}, %{settings_form: %{input: input} = form} = state) + when input != nil do + fields = + Enum.map(form.fields, fn field -> + if field.key == input.key, do: %{field | value: input.value}, else: field + end) + + {:noreply, %{state | settings_form: %{form | fields: fields, input: nil, dirty: true}}} + end + + defp settings_form_key(%{code: "backspace"}, %{settings_form: %{input: input}} = state) + when input != nil do + {:noreply, put_in(state.settings_form.input.value, String.slice(input.value, 0..-2//1))} + end + + defp settings_form_key(%{code: code, modifiers: []}, %{settings_form: %{input: input}} = state) + when input != nil and byte_size(code) >= 1 do + if String.length(code) == 1 do + {:noreply, put_in(state.settings_form.input.value, input.value <> code)} + else + {:noreply, state} + end + end + + defp settings_form_key(_key, %{settings_form: %{input: input}} = state) when input != nil, + do: {:noreply, state} + + defp settings_form_key(%{code: "esc"}, state), + do: {:noreply, %{state | settings_form: nil}} + + defp settings_form_key(%{code: "s", modifiers: ["ctrl"]}, state), + do: save_settings_form(state) + + defp settings_form_key(%{code: code}, state) when code in ["down", "j"], + do: {:noreply, move_field_selection(state, 1)} + + defp settings_form_key(%{code: code}, state) when code in ["up", "k"], + do: {:noreply, move_field_selection(state, -1)} + + defp settings_form_key(%{code: "enter"}, %{settings_form: form} = state) do + case Enum.at(form.fields, form.selected) do + %{type: :text} = field -> + {:noreply, + put_in(state.settings_form.input, %{key: field.key, label: field.label, value: field.value})} + + %{type: :bool} = field -> + {:noreply, update_field(state, field.key, not field.value)} + + %{type: :enum, options: options} = field when options != [] -> + index = Enum.find_index(options, &(&1 == field.value)) || 0 + {:noreply, update_field(state, field.key, Enum.at(options, rem(index + 1, length(options))))} + + _other -> + {:noreply, state} + end + end + + defp settings_form_key(_key, state), do: {:noreply, state} + + defp update_field(%{settings_form: form} = state, key, value) do + fields = + Enum.map(form.fields, fn field -> + if field.key == key, do: %{field | value: value}, else: field + end) + + %{state | settings_form: %{form | fields: fields, dirty: true}} + end + + defp save_settings_form(%{settings_form: form} = state) do + values = Map.new(form.fields, fn field -> {field.key, field.value} end) + + case SettingsForm.save(form.section, state.project_id, values) do + :ok -> + reloaded = SettingsForm.load(form.section, state.project_id) + + state = %{ + state + | settings_form: %{ + form + | fields: reloaded.fields, + selected: min(form.selected, max(length(reloaded.fields) - 1, 0)), + input: nil, + dirty: false + } + } + + {:noreply, toast(state, form.title, dgettext("ui", "Saved."))} + + {:error, reason} -> + {:noreply, toast(state, form.title, settings_error(reason))} + end + end + + defp settings_error(reason) when is_binary(reason), do: reason + defp settings_error(reason), do: inspect(reason) + + # Selection skips read-only :info rows in the given direction. + defp move_field_selection(%{settings_form: form} = state, delta) do + count = length(form.fields) + + if count == 0 do + state + else + next = seek_field(form.fields, clamp(form.selected + delta, count), delta) + put_in(state.settings_form.selected, next) + end + end + + defp seek_field(fields, index, delta) do + case Enum.at(fields, index) do + %{type: :info} -> + next = clamp(index + sign(delta), length(fields)) + if next == index, do: index, else: seek_field(fields, next, delta) + + _other -> + index + end + end + # ── Events: sidebar search (vi-style "/") ───────────────────────────────── # The prompt lives in the status line and filters the current view live @@ -970,6 +1127,25 @@ defmodule BDS.TUI do defp list_selected([], _selected), do: nil defp list_selected(items, selected), do: min(selected, length(items) - 1) + defp main_widgets(%{settings_form: form}, rect) when form != nil do + items = Enum.map(form.fields, &field_line/1) + + title = + form.title <> + if(form.dirty, do: " •", else: "") <> + " — " <> dgettext("ui", "enter edit · ctrl+s save · esc close") + + [ + {%List{ + items: items, + selected: list_selected(items, form.selected), + scroll_padding: 2, + highlight_style: %Style{fg: :black, bg: :cyan}, + block: %Block{title: title, borders: [:all]} + }, rect} + ] + end + defp main_widgets(%{view: "git", editor: nil, git: nil}, rect) do [ {%Paragraph{ @@ -1055,8 +1231,11 @@ defmodule BDS.TUI do end defp status_widgets(state, rect) do + settings_input = state.settings_form && state.settings_form.input + text = cond do + settings_input -> settings_input.label <> ": " <> settings_input.value state.git_commit -> dgettext("ui", "Commit message") <> ": " <> state.git_commit.input state.search -> "/" <> state.search.input state.busy -> dgettext("ui", "Working…") @@ -1315,18 +1494,25 @@ defmodule BDS.TUI do defp truncate(text) when byte_size(text) > 40, do: String.slice(text, 0, 40) <> "…" defp truncate(text), do: text + defp default_status(%{settings_form: form}) when form != nil, + do: + dgettext( + "ui", + "enter edit/toggle/cycle · ctrl+s save · esc close · ctrl+q quit" + ) + defp default_status(%{focus: :sidebar, view: "git"}), do: dgettext( "ui", - "c commit · u pull · s push · enter jump to file · pgup/pgdn scroll diff · 1-5 views · ctrl+q quit" + "c commit · u pull · s push · enter jump to file · pgup/pgdn scroll diff · 1-7 views · ctrl+q quit" ) defp default_status(%{focus: :sidebar}), do: dgettext( "ui", - "enter open · n new post · 1-5 views · p projects · / search · : commands (:? help) · r refresh · ctrl+q quit" + "enter open · n new post · 1-7 views · p projects · / search · : commands (:? help) · r refresh · ctrl+q quit" ) defp default_status(%{focus: :editor}), @@ -1453,6 +1639,12 @@ defmodule BDS.TUI do end end + defp field_line(%{type: :bool} = field), + do: if(field.value, do: "[x] ", else: "[ ] ") <> field.label + + defp field_line(%{type: :info, value: ""} = field), do: field.label + defp field_line(field), do: "#{field.label}: #{field.value}" + defp item_label(item) do title = item[:title] || item[:name] || item[:original_name] || item[:label] || item[:id] || "?" @@ -1466,6 +1658,7 @@ defmodule BDS.TUI do defp view_label("templates"), do: dgettext("ui", "Templates") defp view_label("scripts"), do: dgettext("ui", "Scripts") defp view_label("tags"), do: dgettext("ui", "Tags") + defp view_label("settings"), do: dgettext("ui", "Settings") defp view_label("git"), do: dgettext("ui", "Git") # ── Post editor ────────────────────────────────────────────────────────── diff --git a/lib/bds/ui/settings_form.ex b/lib/bds/ui/settings_form.ex new file mode 100644 index 0000000..44ae8d1 --- /dev/null +++ b/lib/bds/ui/settings_form.ex @@ -0,0 +1,494 @@ +defmodule BDS.UI.SettingsForm do + @moduledoc """ + Renderer-agnostic preferences forms (issue #29). + + Exposes each settings section of the GUI settings editor as a flat list + of typed fields (`:text`, `:bool`, `:enum`, `:info`) that the TUI can + render and edit generically. `save/3` writes through the same backends + as the GUI editor — `BDS.Metadata`, `BDS.Settings`, `BDS.AI` and + `BDS.MCP.AgentConfig` — so both frontends operate on the same + preferences. + """ + + use Gettext, backend: BDS.Gettext + + import Ecto.Query + + alias BDS.Desktop.ShellLive.SettingsEditor.AISettings + alias BDS.Desktop.ShellLive.SettingsEditor.ManagedCategories + alias BDS.Desktop.ShellLive.SettingsEditor.MCPConfig + alias BDS.I18n + alias BDS.MCP.AgentConfig + alias BDS.Metadata + alias BDS.Projects + alias BDS.Repo + alias BDS.Settings + alias BDS.Templates.Template + + @type field :: %{ + key: String.t(), + label: String.t(), + type: :text | :bool | :enum | :info, + value: term(), + options: [String.t()] + } + + @type form :: %{section: String.t(), title: String.t(), fields: [field()]} + + # ── Load ───────────────────────────────────────────────────────────────── + + @spec load(String.t(), String.t()) :: form() + def load("project", project_id) do + {:ok, metadata} = Metadata.get_project_metadata(project_id) + + form("project", dgettext("ui", "Project"), [ + text("name", dgettext("ui", "Name"), metadata.name), + text("description", dgettext("ui", "Description"), metadata.description), + text("public_url", dgettext("ui", "Public URL"), metadata.public_url), + enum( + "main_language", + dgettext("ui", "Main Language"), + metadata.main_language || "en", + supported_language_codes() + ), + text("default_author", dgettext("ui", "Default Author"), metadata.default_author), + text( + "max_posts_per_page", + dgettext("ui", "Posts per Page"), + Integer.to_string(metadata.max_posts_per_page) + ), + text( + "image_import_concurrency", + dgettext("ui", "Image Import Concurrency"), + Integer.to_string(metadata.image_import_concurrency) + ), + enum( + "blogmark_category", + dgettext("ui", "Blogmark Category"), + metadata.blogmark_category || List.first(metadata.categories) || "article", + metadata.categories + ), + text( + "blog_languages", + dgettext("ui", "Blog Languages (comma-separated)"), + Enum.join(metadata.blog_languages, ", ") + ), + bool( + "semantic_similarity_enabled", + dgettext("ui", "Semantic Similarity"), + metadata.semantic_similarity_enabled + ) + ]) + end + + def load("editor", _project_id) do + stored = editor_settings() + + form("editor", dgettext("ui", "Editor"), [ + enum("default_mode", dgettext("ui", "Default Editor Mode"), stored["default_mode"], [ + "wysiwyg", + "markdown", + "preview" + ]), + enum("diff_view_style", dgettext("ui", "Diff View Style"), stored["diff_view_style"], [ + "inline", + "side-by-side" + ]), + bool("wrap_long_lines", dgettext("ui", "Wrap Long Lines"), stored["wrap_long_lines"]), + bool( + "hide_unchanged_regions", + dgettext("ui", "Hide Unchanged Regions"), + stored["hide_unchanged_regions"] + ) + ]) + end + + def load("content", project_id) do + {:ok, metadata} = Metadata.get_project_metadata(project_id) + post_templates = [""] ++ template_slugs(project_id, :post) + list_templates = [""] ++ template_slugs(project_id, :list) + + category_fields = + metadata + |> ManagedCategories.category_rows() + |> Enum.flat_map(fn row -> + [ + info("cat:#{row.name}", "── " <> row.name, ""), + text("cat:#{row.name}:title", dgettext("ui", "Title"), row.title), + bool("cat:#{row.name}:render_in_lists", dgettext("ui", "Render in Lists"), row.render_in_lists), + bool("cat:#{row.name}:show_title", dgettext("ui", "Show Title"), row.show_title), + enum( + "cat:#{row.name}:post_template_slug", + dgettext("ui", "Post Template"), + row.post_template_slug || "", + post_templates + ), + enum( + "cat:#{row.name}:list_template_slug", + dgettext("ui", "List Template"), + row.list_template_slug || "", + list_templates + ) + ] + end) + + form( + "content", + dgettext("ui", "Content"), + [text("new_category", dgettext("ui", "New Category"), "")] ++ category_fields + ) + end + + def load("ai", _project_id) do + stored = AISettings.ai_form(%{}) + + form("ai", dgettext("ui", "AI"), [ + bool("offline_mode", dgettext("ui", "Airplane Mode"), stored["offline_mode"]), + text("system_prompt", dgettext("ui", "System Prompt"), stored["system_prompt"]), + text("online_url", dgettext("ui", "Online Endpoint URL"), stored["online_url"]), + text("online_api_key", dgettext("ui", "Online API Key"), stored["online_api_key"]), + text("online_chat_model", dgettext("ui", "Online Chat Model"), stored["online_chat_model"]), + bool("online_chat_tools", dgettext("ui", "Online Chat Tool Calls"), stored["online_chat_tools"]), + bool( + "online_chat_disable_reasoning", + dgettext("ui", "Online Chat Disable Reasoning"), + stored["online_chat_disable_reasoning"] + ), + text("online_title_model", dgettext("ui", "Online Title Model"), stored["online_title_model"]), + text( + "online_image_analysis_model", + dgettext("ui", "Online Image Model"), + stored["online_image_analysis_model"] + ), + bool("online_chat_images", dgettext("ui", "Online Image Support"), stored["online_chat_images"]), + text("offline_url", dgettext("ui", "Offline Endpoint URL"), stored["offline_url"]), + text("offline_api_key", dgettext("ui", "Offline API Key"), stored["offline_api_key"]), + text("offline_chat_model", dgettext("ui", "Offline Chat Model"), stored["offline_chat_model"]), + bool("offline_chat_tools", dgettext("ui", "Offline Chat Tool Calls"), stored["offline_chat_tools"]), + bool( + "offline_chat_disable_reasoning", + dgettext("ui", "Offline Chat Disable Reasoning"), + stored["offline_chat_disable_reasoning"] + ), + text("offline_title_model", dgettext("ui", "Offline Title Model"), stored["offline_title_model"]), + text( + "offline_image_analysis_model", + dgettext("ui", "Offline Image Model"), + stored["offline_image_analysis_model"] + ), + bool("offline_chat_images", dgettext("ui", "Offline Image Support"), stored["offline_chat_images"]) + ]) + end + + def load("technology", project_id) do + {:ok, metadata} = Metadata.get_project_metadata(project_id) + + form("technology", dgettext("ui", "Technology"), [ + bool( + "semantic_similarity_enabled", + dgettext("ui", "Semantic Similarity"), + metadata.semantic_similarity_enabled + ) + ]) + end + + def load("publishing", project_id) do + {:ok, metadata} = Metadata.get_project_metadata(project_id) + prefs = metadata.publishing_preferences + + form("publishing", dgettext("ui", "Publishing"), [ + text("ssh_host", dgettext("ui", "SSH Host"), Map.get(prefs, "ssh_host", "")), + text("ssh_user", dgettext("ui", "SSH User"), Map.get(prefs, "ssh_user", "")), + text("ssh_remote_path", dgettext("ui", "SSH Remote Path"), Map.get(prefs, "ssh_remote_path", "")), + enum("ssh_mode", dgettext("ui", "SSH Mode"), Map.get(prefs, "ssh_mode", "scp") || "scp", [ + "scp", + "rsync" + ]) + ]) + end + + def load("data", project_id) do + project = Projects.get_project(project_id) + data_path = if project, do: Projects.project_data_dir(project), else: "" + + form("data", dgettext("ui", "Data"), [ + info("data_path", dgettext("ui", "Data Folder"), data_path), + info( + "data_hint", + dgettext("ui", "Maintenance"), + dgettext("ui", "Rebuild and maintenance commands are available under the : prompt.") + ) + ]) + end + + def load("mcp", _project_id) do + fields = + Enum.map(MCPConfig.mcp_rows(), fn row -> + if row.supported? do + bool("mcp:#{row.id}", row.label, row.configured?) + else + info("mcp:#{row.id}", row.label, dgettext("ui", "not supported yet")) + end + end) + + form("mcp", dgettext("ui", "MCP"), fields) + end + + def load("style", project_id) do + {:ok, metadata} = Metadata.get_project_metadata(project_id) + current = if metadata.pico_theme in [nil, ""], do: "default", else: metadata.pico_theme + + form("style", dgettext("ui", "Style"), [ + enum("pico_theme", dgettext("ui", "Theme"), current, Metadata.supported_pico_themes()) + ]) + end + + def load(section, _project_id) do + form(section, section, []) + end + + # ── Save ───────────────────────────────────────────────────────────────── + + @spec save(String.t(), String.t(), %{String.t() => term()}) :: :ok | {:error, term()} + def save("project", project_id, values) do + save_project_metadata(project_id, %{ + name: blank_to_nil(values["name"]), + description: blank_to_nil(values["description"]), + public_url: blank_to_nil(values["public_url"]), + main_language: blank_to_nil(values["main_language"]), + default_author: blank_to_nil(values["default_author"]), + max_posts_per_page: parse_integer(values["max_posts_per_page"], 50), + image_import_concurrency: parse_integer(values["image_import_concurrency"], 4), + blogmark_category: blank_to_nil(values["blogmark_category"]), + blog_languages: split_languages(values["blog_languages"]), + semantic_similarity_enabled: values["semantic_similarity_enabled"] == true + }) + end + + def save("editor", _project_id, values) do + with :ok <- Settings.put_global_setting("ui.preferred_editor_mode", values["default_mode"]), + :ok <- Settings.put_global_setting("ui.git_diff_view_style", values["diff_view_style"]), + :ok <- + Settings.put_global_setting( + "ui.git_diff_word_wrap", + boolean_string(values["wrap_long_lines"]) + ) do + Settings.put_global_setting( + "ui.git_diff_hide_unchanged_regions", + boolean_string(values["hide_unchanged_regions"]) + ) + end + end + + def save("content", project_id, values) do + with :ok <- maybe_add_category(project_id, values["new_category"]) do + values + |> category_settings_by_name() + |> Enum.reduce_while(:ok, fn {category, settings}, _acc -> + case Metadata.update_category_settings(project_id, category, settings) do + {:ok, _metadata} -> {:cont, :ok} + {:error, reason} -> {:halt, {:error, reason}} + end + end) + end + end + + def save("ai", _project_id, values) do + AISettings.save_attrs(%{ + online_url: blank_to_nil(values["online_url"]), + online_api_key: blank_to_nil(values["online_api_key"]), + online_chat_model: blank_to_nil(values["online_chat_model"]), + online_chat_tools: values["online_chat_tools"] == true, + online_chat_disable_reasoning: values["online_chat_disable_reasoning"] == true, + online_title_model: blank_to_nil(values["online_title_model"]), + online_image_analysis_model: blank_to_nil(values["online_image_analysis_model"]), + online_chat_images: values["online_chat_images"] == true, + offline_url: blank_to_nil(values["offline_url"]), + offline_api_key: blank_to_nil(values["offline_api_key"]), + offline_mode: values["offline_mode"] == true, + offline_chat_model: blank_to_nil(values["offline_chat_model"]), + offline_chat_tools: values["offline_chat_tools"] == true, + offline_chat_disable_reasoning: values["offline_chat_disable_reasoning"] == true, + offline_title_model: blank_to_nil(values["offline_title_model"]), + offline_image_analysis_model: blank_to_nil(values["offline_image_analysis_model"]), + offline_chat_images: values["offline_chat_images"] == true, + system_prompt: to_string(values["system_prompt"] || "") + }) + end + + def save("technology", project_id, values) do + save_project_metadata(project_id, %{ + semantic_similarity_enabled: values["semantic_similarity_enabled"] == true + }) + end + + def save("publishing", project_id, values) do + case Metadata.set_publishing_preferences(project_id, %{ + ssh_host: blank_to_nil(values["ssh_host"]), + ssh_user: blank_to_nil(values["ssh_user"]), + ssh_remote_path: blank_to_nil(values["ssh_remote_path"]), + ssh_mode: values["ssh_mode"] || "scp" + }) do + {:ok, _metadata} -> :ok + {:error, reason} -> {:error, reason} + end + end + + def save("mcp", _project_id, values) do + MCPConfig.mcp_rows() + |> Enum.filter(& &1.supported?) + |> Enum.reduce_while(:ok, fn row, _acc -> + case toggle_mcp_agent(row, Map.get(values, "mcp:#{row.id}", row.configured?)) do + :ok -> {:cont, :ok} + {:error, reason} -> {:halt, {:error, reason}} + end + end) + end + + def save("style", project_id, values) do + save_project_metadata(project_id, %{pico_theme: values["pico_theme"]}) + end + + def save(_section, _project_id, _values), do: :ok + + # ── Helpers ────────────────────────────────────────────────────────────── + + defp form(section, title, fields), do: %{section: section, title: title, fields: fields} + + defp text(key, label, value), + do: %{key: key, label: label, type: :text, value: to_string(value || ""), options: []} + + defp bool(key, label, value), + do: %{key: key, label: label, type: :bool, value: value == true, options: []} + + defp enum(key, label, value, options), + do: %{key: key, label: label, type: :enum, value: to_string(value || ""), options: options} + + defp info(key, label, value), + do: %{key: key, label: label, type: :info, value: value, options: []} + + defp editor_settings do + %{ + "default_mode" => Settings.get_global_setting("ui.preferred_editor_mode") || "markdown", + "diff_view_style" => Settings.get_global_setting("ui.git_diff_view_style") || "inline", + "wrap_long_lines" => Settings.get_global_setting("ui.git_diff_word_wrap") == "true", + "hide_unchanged_regions" => + Settings.get_global_setting("ui.git_diff_hide_unchanged_regions") == "true" + } + end + + defp supported_language_codes, do: Enum.map(I18n.supported_languages(), & &1.code) + + defp template_slugs(project_id, kind) do + Repo.all( + from template in Template, + where: template.project_id == ^project_id and template.kind == ^kind, + order_by: [asc: template.slug], + select: template.slug + ) + end + + # Project, technology and style all live in the same metadata record; + # `Metadata.update_project_metadata/2` treats missing keys as nil, so the + # current values are always passed along and only the edits override them. + defp save_project_metadata(project_id, overrides) do + {:ok, metadata} = Metadata.get_project_metadata(project_id) + + attrs = + metadata + |> Map.take([ + :name, + :description, + :public_url, + :main_language, + :default_author, + :max_posts_per_page, + :image_import_concurrency, + :blogmark_category, + :pico_theme, + :semantic_similarity_enabled, + :blog_languages + ]) + |> Map.merge(overrides) + + case Metadata.update_project_metadata(project_id, attrs) do + {:ok, _metadata} -> :ok + {:error, reason} -> {:error, reason} + end + end + + defp maybe_add_category(project_id, name) do + case String.trim(to_string(name || "")) do + "" -> + :ok + + category -> + case Metadata.add_category(project_id, category) do + {:ok, _metadata} -> :ok + {:error, reason} -> {:error, reason} + end + end + end + + defp category_settings_by_name(values) do + values + |> Enum.flat_map(fn {key, value} -> + case String.split(key, ":", parts: 3) do + ["cat", name, property] -> [{name, property, value}] + _other -> [] + end + end) + |> Enum.group_by(fn {name, _property, _value} -> name end) + |> Enum.map(fn {name, entries} -> + {name, Map.new(entries, fn {_name, property, value} -> category_setting(property, value) end)} + end) + end + + defp category_setting("title", value), do: {:title, blank_to_nil(value)} + defp category_setting("render_in_lists", value), do: {:render_in_lists, value == true} + defp category_setting("show_title", value), do: {:show_title, value == true} + defp category_setting("post_template_slug", value), do: {:post_template_slug, blank_to_nil(value)} + defp category_setting("list_template_slug", value), do: {:list_template_slug, blank_to_nil(value)} + + defp toggle_mcp_agent(%{configured?: configured?}, wanted) when wanted == configured?, do: :ok + + defp toggle_mcp_agent(%{id: agent_id}, true) do + case AgentConfig.add_to_config(agent_id, install_root: Application.app_dir(:bds)) do + {:ok, _payload} -> :ok + {:error, reason} -> {:error, reason} + end + end + + defp toggle_mcp_agent(%{id: agent_id}, _wanted) do + case AgentConfig.remove_from_config(agent_id) do + {:ok, _payload} -> :ok + {:error, reason} -> {:error, reason} + end + end + + defp split_languages(value) do + value + |> to_string() + |> String.split(~r/[,\s]+/, trim: true) + |> Enum.uniq() + end + + defp parse_integer(value, fallback) do + case Integer.parse(to_string(value || "")) do + {parsed, _rest} -> parsed + :error -> fallback + end + end + + defp boolean_string(true), do: "true" + defp boolean_string(_value), do: "false" + + defp blank_to_nil(nil), do: nil + + defp blank_to_nil(value) do + case String.trim(to_string(value)) do + "" -> nil + trimmed -> trimmed + end + end +end diff --git a/priv/gettext/de/LC_MESSAGES/ui.po b/priv/gettext/de/LC_MESSAGES/ui.po index ccbe4b7..c335ce9 100644 --- a/priv/gettext/de/LC_MESSAGES/ui.po +++ b/priv/gettext/de/LC_MESSAGES/ui.po @@ -59,6 +59,7 @@ msgid "--" msgstr "--" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:220 +#: lib/bds/ui/settings_form.ex:145 #: lib/bds/ui/sidebar.ex:802 #, elixir-autogen, elixir-format msgid "AI" @@ -71,8 +72,8 @@ msgid "AI Assistant" msgstr "KI-Assistent" #: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:93 -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:193 -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:211 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:203 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:221 #, elixir-autogen, elixir-format msgid "AI Settings" msgstr "KI-Einstellungen" @@ -81,11 +82,11 @@ msgstr "KI-Einstellungen" #: lib/bds/desktop/shell_live/overlay_manager.ex:72 #: lib/bds/desktop/shell_live/post_editor.ex:920 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43 -#: lib/bds/tui.ex:780 -#: lib/bds/tui.ex:783 -#: lib/bds/tui.ex:786 -#: lib/bds/tui.ex:794 -#: lib/bds/tui.ex:1523 +#: lib/bds/tui.ex:937 +#: lib/bds/tui.ex:940 +#: lib/bds/tui.ex:943 +#: lib/bds/tui.ex:951 +#: lib/bds/tui.ex:1753 #, elixir-autogen, elixir-format msgid "AI Suggestions" msgstr "KI-Vorschlaege" @@ -163,6 +164,7 @@ msgid "Agent configuration files for the built-in bDS MCP server" msgstr "Agent-Konfigurationsdateien für den integrierten bDS-MCP-Server" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:273 +#: lib/bds/ui/settings_form.ex:146 #, elixir-autogen, elixir-format msgid "Airplane Mode" msgstr "Flugmodus" @@ -414,6 +416,7 @@ msgid "Blogmark Bookmarklet" msgstr "Blogmark-Bookmarklet" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:90 +#: lib/bds/ui/settings_form.ex:67 #, elixir-autogen, elixir-format msgid "Blogmark Category" msgstr "Blogmark-Kategorie" @@ -572,7 +575,7 @@ msgid "Collapse unchanged diff hunks" msgstr "Unveränderte Diff-Blöcke einklappen" #: lib/bds/desktop/shell_live/overlay_manager.ex:422 -#: lib/bds/tui.ex:1619 +#: lib/bds/tui.ex:1849 #, elixir-autogen, elixir-format msgid "Command completed" msgstr "Befehl abgeschlossen" @@ -590,7 +593,8 @@ msgstr "Bestaetigen" #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:375 #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:34 #: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:32 -#: lib/bds/tui.ex:1014 +#: lib/bds/tui.ex:1219 +#: lib/bds/ui/settings_form.ex:137 #: lib/bds/ui/sidebar.ex:801 #, elixir-autogen, elixir-format msgid "Content" @@ -678,6 +682,7 @@ msgstr "Dunkel" msgid "Dashboard" msgstr "Instrumententafel" +#: lib/bds/ui/settings_form.ex:214 #: lib/bds/ui/sidebar.ex:815 #, elixir-autogen, elixir-format msgid "Data" @@ -706,11 +711,13 @@ msgid "Default" msgstr "Standard" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:78 +#: lib/bds/ui/settings_form.ex:54 #, elixir-autogen, elixir-format msgid "Default Author" msgstr "Standardautor" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:119 +#: lib/bds/ui/settings_form.ex:88 #, elixir-autogen, elixir-format msgid "Default Editor Mode" msgstr "Standard-Bearbeitungsmodus" @@ -776,6 +783,7 @@ msgid "Deployment credentials for upload tasks" msgstr "Bereitstellungszugangsdaten für Upload-Aufgaben" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:38 +#: lib/bds/ui/settings_form.ex:46 #, elixir-autogen, elixir-format msgid "Description" msgstr "Beschreibung" @@ -798,6 +806,7 @@ msgid "Detect Language" msgstr "Sprache erkennen" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:129 +#: lib/bds/ui/settings_form.ex:93 #, elixir-autogen, elixir-format msgid "Diff View Style" msgstr "Diff-Ansicht" @@ -913,6 +922,7 @@ msgstr "Übersetzung bearbeiten" #: lib/bds/desktop/shell_live/index.html.heex:513 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:114 +#: lib/bds/ui/settings_form.ex:87 #: lib/bds/ui/sidebar.ex:800 #, elixir-autogen, elixir-format msgid "Editor" @@ -1030,7 +1040,7 @@ msgid "Filename" msgstr "Dateiname" #: lib/bds/desktop/menu_bar.ex:254 -#: lib/bds/tui.ex:1583 +#: lib/bds/tui.ex:1813 #, elixir-autogen, elixir-format msgid "Fill Missing Translations" msgstr "Fehlende Übersetzungen ergänzen" @@ -1041,7 +1051,7 @@ msgid "Find" msgstr "Suchen" #: lib/bds/desktop/menu_bar.ex:255 -#: lib/bds/tui.ex:1586 +#: lib/bds/tui.ex:1816 #, elixir-autogen, elixir-format msgid "Find Duplicate Posts" msgstr "Doppelte Beiträge finden" @@ -1068,14 +1078,14 @@ msgid "Gallery" msgstr "Galerie" #: lib/bds/desktop/menu_bar.ex:256 -#: lib/bds/tui.ex:1567 +#: lib/bds/tui.ex:1797 #, elixir-autogen, elixir-format msgid "Generate Site" msgstr "Website generieren" #: lib/bds/desktop/shell_live.ex:792 #: lib/bds/desktop/shell_live/socket_state.ex:109 -#: lib/bds/tui.ex:1440 +#: lib/bds/tui.ex:1662 #: lib/bds/ui/sidebar.ex:826 #, elixir-autogen, elixir-format msgid "Git" @@ -1100,6 +1110,7 @@ msgid "Help" msgstr "Hilfe" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:142 +#: lib/bds/ui/settings_form.ex:100 #, elixir-autogen, elixir-format msgid "Hide Unchanged Regions" msgstr "Unveränderte Bereiche ausblenden" @@ -1321,6 +1332,7 @@ msgid "Links To" msgstr "Verweist auf" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:162 +#: lib/bds/ui/settings_form.ex:128 #, elixir-autogen, elixir-format msgid "List Template" msgstr "Listen-Vorlage" @@ -1333,6 +1345,7 @@ msgstr "Mehr laden" #: lib/bds/desktop/shell_live/settings_editor/mcp_config.ex:50 #: lib/bds/desktop/shell_live/settings_editor/mcp_config.ex:57 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:351 +#: lib/bds/ui/settings_form.ex:234 #: lib/bds/ui/sidebar.ex:816 #, elixir-autogen, elixir-format msgid "MCP" @@ -1350,6 +1363,7 @@ msgstr "Makros (%{count})" #: lib/bds/desktop/shell_data.ex:103 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:55 +#: lib/bds/ui/settings_form.ex:50 #, elixir-autogen, elixir-format msgid "Main Language" msgstr "Hauptsprache" @@ -1390,9 +1404,9 @@ msgstr "Maximale Beiträge pro Seite" #: lib/bds/desktop/shell_live/misc_editor.ex:762 #: lib/bds/desktop/shell_live/sidebar_components.ex:654 #: lib/bds/desktop/shell_live/sidebar_delete.ex:175 -#: lib/bds/tui.ex:1436 -#: lib/bds/tui.ex:1648 -#: lib/bds/tui.ex:1651 +#: lib/bds/tui.ex:1657 +#: lib/bds/tui.ex:1878 +#: lib/bds/tui.ex:1881 #: lib/bds/ui/registry.ex:30 #: lib/bds/ui/registry.ex:100 #: lib/bds/ui/sidebar.ex:578 @@ -1435,11 +1449,11 @@ msgstr "Metadaten" #: lib/bds/desktop/shell_live/misc_editor.ex:214 #: lib/bds/desktop/shell_live/misc_editor.ex:226 #: lib/bds/desktop/shell_live/misc_editor.ex:448 -#: lib/bds/tui.ex:265 -#: lib/bds/tui.ex:271 -#: lib/bds/tui.ex:282 -#: lib/bds/tui.ex:1204 -#: lib/bds/tui.ex:1564 +#: lib/bds/tui.ex:278 +#: lib/bds/tui.ex:284 +#: lib/bds/tui.ex:295 +#: lib/bds/tui.ex:1412 +#: lib/bds/tui.ex:1794 #: lib/bds/ui/registry.ex:111 #, elixir-autogen, elixir-format msgid "Metadata Diff" @@ -1485,7 +1499,7 @@ msgstr "Neue Seite" #: lib/bds/desktop/menu_bar.ex:214 #: lib/bds/desktop/shell_live/sidebar_create.ex:41 -#: lib/bds/tui.ex:221 +#: lib/bds/tui.ex:232 #, elixir-autogen, elixir-format msgid "New Post" msgstr "Neuer Beitrag" @@ -1671,11 +1685,13 @@ msgid "Offline" msgstr "Offline" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:269 +#: lib/bds/ui/settings_form.ex:165 #, elixir-autogen, elixir-format msgid "Offline API Key" msgstr "Offline-API-Schlüssel" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:277 +#: lib/bds/ui/settings_form.ex:166 #, elixir-autogen, elixir-format msgid "Offline Chat Model" msgstr "Offline-Chatmodell" @@ -1691,6 +1707,7 @@ msgid "Offline Chat Tools" msgstr "Offline-Chat-Werkzeuge" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:260 +#: lib/bds/ui/settings_form.ex:164 #, elixir-autogen, elixir-format msgid "Offline Endpoint URL" msgstr "Offline-Endpunkt-URL" @@ -1701,21 +1718,25 @@ msgid "Offline Image Analysis Model" msgstr "Offline-Bildanalysemodell" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:297 +#: lib/bds/ui/settings_form.ex:179 #, elixir-autogen, elixir-format msgid "Offline Image Support" msgstr "Offline-Bildunterstützung" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:289 +#: lib/bds/ui/settings_form.ex:173 #, elixir-autogen, elixir-format msgid "Offline Title Model" msgstr "Offline-Titelmodell" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:232 +#: lib/bds/ui/settings_form.ex:149 #, elixir-autogen, elixir-format msgid "Online API Key" msgstr "Online-API-Schlüssel" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:236 +#: lib/bds/ui/settings_form.ex:150 #, elixir-autogen, elixir-format msgid "Online Chat Model" msgstr "Online-Chat-Modell" @@ -1731,6 +1752,7 @@ msgid "Online Chat Tools" msgstr "Online-Chat-Werkzeuge" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:223 +#: lib/bds/ui/settings_form.ex:148 #, elixir-autogen, elixir-format msgid "Online Endpoint URL" msgstr "Online-Endpunkt-URL" @@ -1741,11 +1763,13 @@ msgid "Online Image Analysis Model" msgstr "Online-Bildanalysemodell" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:256 +#: lib/bds/ui/settings_form.ex:163 #, elixir-autogen, elixir-format msgid "Online Image Support" msgstr "Online-Bildunterstützung" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:248 +#: lib/bds/ui/settings_form.ex:157 #, elixir-autogen, elixir-format msgid "Online Title Model" msgstr "Online-Titelmodell" @@ -1763,8 +1787,8 @@ msgid "Open Data Folder" msgstr "Datenordner öffnen" #: lib/bds/desktop/shell_live/index.html.heex:644 -#: lib/bds/tui.ex:632 -#: lib/bds/tui.ex:637 +#: lib/bds/tui.ex:792 +#: lib/bds/tui.ex:797 #, elixir-autogen, elixir-format msgid "Open Existing Blog" msgstr "Bestehenden Blog öffnen" @@ -1776,7 +1800,7 @@ msgid "Open Settings" msgstr "Einstellungen öffnen" #: lib/bds/desktop/menu_bar.ex:217 -#: lib/bds/tui.ex:1588 +#: lib/bds/tui.ex:1818 #, elixir-autogen, elixir-format msgid "Open in Browser" msgstr "Im Browser öffnen" @@ -1902,6 +1926,7 @@ msgid "Post Slug Conflicts" msgstr "Beitrags-Slug-Konflikte" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:161 +#: lib/bds/ui/settings_form.ex:122 #, elixir-autogen, elixir-format msgid "Post Template" msgstr "Beitragsvorlage" @@ -1924,8 +1949,8 @@ msgstr "Beitrag gespeichert" #: lib/bds/desktop/menu_bar.ex:233 #: lib/bds/desktop/shell_live/misc_editor.ex:664 #: lib/bds/desktop/shell_live/misc_editor.ex:761 -#: lib/bds/tui.ex:1435 -#: lib/bds/tui.ex:1447 +#: lib/bds/tui.ex:1656 +#: lib/bds/tui.ex:1671 #: lib/bds/ui/registry.ex:14 #: lib/bds/ui/sidebar.ex:271 #, elixir-autogen, elixir-format @@ -1967,6 +1992,7 @@ msgstr "Vorschau nicht verfügbar" #: lib/bds/desktop/shell_live/misc_editor.ex:739 #: lib/bds/desktop/shell_live/misc_editor.ex:765 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:27 +#: lib/bds/ui/settings_form.ex:44 #: lib/bds/ui/sidebar.ex:799 #, elixir-autogen, elixir-format msgid "Project" @@ -1984,8 +2010,8 @@ msgstr "Projekt und Veröffentlichung" #: lib/bds/desktop/shell_live/chat_surface.ex:15 #: lib/bds/desktop/shell_live/index.html.heex:623 -#: lib/bds/tui.ex:545 -#: lib/bds/tui.ex:550 +#: lib/bds/tui.ex:705 +#: lib/bds/tui.ex:710 #, elixir-autogen, elixir-format msgid "Projects" msgstr "Projekte" @@ -1996,6 +2022,7 @@ msgid "Protected categories cannot be removed" msgstr "Geschützte Kategorien können nicht entfernt werden" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:51 +#: lib/bds/ui/settings_form.ex:47 #, elixir-autogen, elixir-format msgid "Public URL" msgstr "Öffentliche URL" @@ -2029,6 +2056,7 @@ msgstr "Veröffentlichte Übersetzung hat Inhalt in der DB statt im Dateisystem" #: lib/bds/desktop/shell_live/settings_editor/publishing_settings.ex:40 #: lib/bds/desktop/shell_live/settings_editor/publishing_settings.ex:57 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:338 +#: lib/bds/ui/settings_form.ex:199 #: lib/bds/ui/sidebar.ex:811 #, elixir-autogen, elixir-format msgid "Publishing" @@ -2051,15 +2079,15 @@ msgid "Ready to import:" msgstr "Bereit zum Import:" #: lib/bds/desktop/menu_bar.ex:248 -#: lib/bds/tui.ex:629 -#: lib/bds/tui.ex:1568 +#: lib/bds/tui.ex:789 +#: lib/bds/tui.ex:1798 #, elixir-autogen, elixir-format msgid "Rebuild Database" msgstr "Datenbank neu aufbauen" #: lib/bds/desktop/menu_bar.ex:250 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:381 -#: lib/bds/tui.ex:1572 +#: lib/bds/tui.ex:1802 #, elixir-autogen, elixir-format msgid "Rebuild Embedding Index" msgstr "Embedding-Index neu aufbauen" @@ -2117,7 +2145,7 @@ msgid "Refresh Translation" msgstr "Übersetzung aktualisieren" #: lib/bds/desktop/menu_bar.ex:252 -#: lib/bds/tui.ex:1575 +#: lib/bds/tui.ex:1805 #, elixir-autogen, elixir-format msgid "Regenerate Calendar" msgstr "Kalender neu erzeugen" @@ -2128,7 +2156,7 @@ msgid "Regenerate Missing Thumbnails" msgstr "Fehlende Vorschaubilder neu erzeugen" #: lib/bds/desktop/menu_bar.ex:249 -#: lib/bds/tui.ex:1569 +#: lib/bds/tui.ex:1799 #, elixir-autogen, elixir-format msgid "Reindex Text" msgstr "Text neu indizieren" @@ -2160,6 +2188,7 @@ msgid "Remove tag" msgstr "Schlagwort entfernen" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:159 +#: lib/bds/ui/settings_form.ex:118 #, elixir-autogen, elixir-format msgid "Render in Lists" msgstr "In Listen rendern" @@ -2237,6 +2266,7 @@ msgid "Run" msgstr "Ausführen" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:340 +#: lib/bds/ui/settings_form.ex:203 #, elixir-autogen, elixir-format msgid "SSH Mode" msgstr "SSH-Modus" @@ -2314,7 +2344,7 @@ msgstr "Scripting-Funktionen werden in der Neufassung auf Anwendungsebene konfig #: lib/bds/desktop/shell_live/script_editor.ex:216 #: lib/bds/desktop/shell_live/script_editor.ex:219 #: lib/bds/desktop/shell_live/script_editor.ex:234 -#: lib/bds/tui.ex:1438 +#: lib/bds/tui.ex:1659 #: lib/bds/ui/registry.ex:38 #: lib/bds/ui/sidebar.ex:63 #: lib/bds/ui/sidebar.ex:115 @@ -2413,12 +2443,15 @@ msgid "Selected pairs dismissed" msgstr "Ausgewählte Paare verworfen" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:324 +#: lib/bds/ui/settings_form.ex:78 +#: lib/bds/ui/settings_form.ex:189 #, elixir-autogen, elixir-format msgid "Semantic Similarity" msgstr "Semantische Ähnlichkeit" #: lib/bds/desktop/shell_live/settings_editor/project_settings.ex:60 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:11 +#: lib/bds/tui.ex:1661 #: lib/bds/ui/registry.ex:86 #: lib/bds/ui/registry.ex:101 #: lib/bds/ui/sidebar.ex:795 @@ -2442,9 +2475,9 @@ msgid "Site" msgstr "Website" #: lib/bds/desktop/shell_live/misc_editor.ex:412 -#: lib/bds/tui.ex:298 -#: lib/bds/tui.ex:300 -#: lib/bds/tui.ex:1209 +#: lib/bds/tui.ex:311 +#: lib/bds/tui.ex:313 +#: lib/bds/tui.ex:1417 #: lib/bds/ui/registry.ex:125 #, elixir-autogen, elixir-format msgid "Site Validation" @@ -2508,6 +2541,7 @@ msgstr "Stopp" #: lib/bds/desktop/shell_live/settings_editor/style_editor.ex:76 #: lib/bds/desktop/shell_live/settings_editor_html/style_editor.html.heex:3 #: lib/bds/ui/registry.ex:102 +#: lib/bds/ui/settings_form.ex:241 #: lib/bds/ui/sidebar.ex:817 #, elixir-autogen, elixir-format msgid "Style" @@ -2534,6 +2568,7 @@ msgid "Syntax is valid" msgstr "Syntax ist gültig" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:301 +#: lib/bds/ui/settings_form.ex:147 #, elixir-autogen, elixir-format msgid "System Prompt" msgstr "System-Prompt" @@ -2565,7 +2600,7 @@ msgstr "Schlagwortname" #: lib/bds/desktop/shell_live/tags_editor.ex:222 #: lib/bds/desktop/shell_live/tags_editor.ex:253 #: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:11 -#: lib/bds/tui.ex:1439 +#: lib/bds/tui.ex:1660 #: lib/bds/ui/registry.ex:54 #: lib/bds/ui/registry.ex:103 #: lib/bds/ui/sidebar.ex:289 @@ -2577,12 +2612,13 @@ msgstr "Tags" #: lib/bds/desktop/shell_live.ex:786 #: lib/bds/desktop/shell_live/panel_renderer.ex:54 -#: lib/bds/tui.ex:828 +#: lib/bds/tui.ex:985 #, elixir-autogen, elixir-format msgid "Tasks" msgstr "Aufgaben" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:321 +#: lib/bds/ui/settings_form.ex:186 #: lib/bds/ui/sidebar.ex:805 #, elixir-autogen, elixir-format msgid "Technology" @@ -2622,7 +2658,7 @@ msgstr "Template-Syntax ist gültig" #: lib/bds/desktop/shell_live/template_editor.ex:171 #: lib/bds/desktop/shell_live/template_editor.ex:176 #: lib/bds/desktop/shell_live/template_editor.ex:191 -#: lib/bds/tui.ex:1437 +#: lib/bds/tui.ex:1658 #: lib/bds/ui/registry.ex:46 #: lib/bds/ui/sidebar.ex:71 #: lib/bds/ui/sidebar.ex:122 @@ -2668,6 +2704,7 @@ msgstr "Dieses Element wird referenziert von:" #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:23 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:158 #: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:22 +#: lib/bds/ui/settings_form.ex:117 #, elixir-autogen, elixir-format msgid "Title" msgstr "Titel" @@ -2845,7 +2882,7 @@ msgid "Updated URLs" msgstr "Aktualisierte URLs" #: lib/bds/desktop/menu_bar.ex:259 -#: lib/bds/tui.ex:1587 +#: lib/bds/tui.ex:1817 #, elixir-autogen, elixir-format msgid "Upload Site" msgstr "Website hochladen" @@ -2873,13 +2910,13 @@ msgid "Validate" msgstr "Validieren" #: lib/bds/desktop/menu_bar.ex:258 -#: lib/bds/tui.ex:1565 +#: lib/bds/tui.ex:1795 #, elixir-autogen, elixir-format msgid "Validate Site" msgstr "Website validieren" #: lib/bds/desktop/menu_bar.ex:253 -#: lib/bds/tui.ex:1578 +#: lib/bds/tui.ex:1808 #, elixir-autogen, elixir-format msgid "Validate Translations" msgstr "Übersetzungen validieren" @@ -2923,6 +2960,7 @@ msgid "Working tree and history" msgstr "Arbeitsverzeichnis und Verlauf" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:138 +#: lib/bds/ui/settings_form.ex:97 #, elixir-autogen, elixir-format msgid "Wrap Long Lines" msgstr "Lange Zeilen umbrechen" @@ -3281,6 +3319,7 @@ msgid "End-user guidance for editorial workflows, media, templates, translation, msgstr "Endbenutzer-Anleitung für redaktionelle Arbeitsabläufe, Medien, Vorlagen, Übersetzungen und Veröffentlichungen in bDS2." #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:86 +#: lib/bds/ui/settings_form.ex:62 #, elixir-autogen, elixir-format msgid "Image Import Concurrency" msgstr "Gleichzeitige Bildimporte" @@ -3350,15 +3389,15 @@ msgstr "Änderungen" #: lib/bds/desktop/shell_live/git_handler.ex:46 #: lib/bds/desktop/shell_live/git_handler.ex:52 #: lib/bds/desktop/shell_live/sidebar_components.ex:556 -#: lib/bds/tui.ex:321 -#: lib/bds/tui.ex:327 -#: lib/bds/tui.ex:330 +#: lib/bds/tui.ex:334 +#: lib/bds/tui.ex:340 +#: lib/bds/tui.ex:343 #, elixir-autogen, elixir-format msgid "Commit" msgstr "Commit" #: lib/bds/desktop/shell_live/sidebar_components.ex:555 -#: lib/bds/tui.ex:1031 +#: lib/bds/tui.ex:1239 #, elixir-autogen, elixir-format msgid "Commit message" msgstr "Commit-Nachricht" @@ -3382,6 +3421,7 @@ msgid "Fetch" msgstr "Abrufen" #: lib/bds/desktop/shell_live/sidebar_components.ex:586 +#: lib/bds/tui.ex:1074 #, elixir-autogen, elixir-format msgid "History" msgstr "Verlauf" @@ -3429,7 +3469,7 @@ msgstr "LFS bereinigen" #: lib/bds/desktop/shell_live/git_handler.ex:17 #: lib/bds/desktop/shell_live/sidebar_components.ex:543 #: lib/bds/desktop/shell_live/sidebar_components.ex:543 -#: lib/bds/tui.ex:800 +#: lib/bds/tui.ex:957 #, elixir-autogen, elixir-format msgid "Pull" msgstr "Pull" @@ -3437,7 +3477,7 @@ msgstr "Pull" #: lib/bds/desktop/shell_live/git_handler.ex:18 #: lib/bds/desktop/shell_live/sidebar_components.ex:544 #: lib/bds/desktop/shell_live/sidebar_components.ex:544 -#: lib/bds/tui.ex:801 +#: lib/bds/tui.ex:958 #, elixir-autogen, elixir-format msgid "Push" msgstr "Push" @@ -3550,7 +3590,7 @@ msgid "Suggested tags" msgstr "Vorgeschlagene Tags" #: lib/bds/desktop/menu_bar.ex:257 -#: lib/bds/tui.ex:1566 +#: lib/bds/tui.ex:1796 #, elixir-autogen, elixir-format msgid "Force Render Site" msgstr "Website vollständig neu generieren" @@ -3617,7 +3657,7 @@ msgstr "git pull" msgid "git push" msgstr "git push" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:159 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:112 #, elixir-autogen, elixir-format msgid "AI settings saved." msgstr "KI-Einstellungen gespeichert." @@ -3627,12 +3667,12 @@ msgstr "KI-Einstellungen gespeichert." msgid "Could not load models" msgstr "Modelle konnten nicht geladen werden" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:190 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:200 #, elixir-autogen, elixir-format msgid "Could not save AI settings" msgstr "KI-Einstellungen konnten nicht gespeichert werden" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:184 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:194 #, elixir-autogen, elixir-format msgid "Loaded %{count} models." msgstr "%{count} Modelle geladen." @@ -3642,87 +3682,88 @@ msgstr "%{count} Modelle geladen." msgid "OK" msgstr "OK" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:174 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:184 #, elixir-autogen, elixir-format msgid "The endpoint returned no models. You can still type a model name manually." msgstr "Der Endpunkt hat keine Modelle zurückgegeben. Sie können einen Modellnamen weiterhin manuell eingeben." -#: lib/bds/tui.ex:1524 +#: lib/bds/tui.ex:1754 #, elixir-autogen, elixir-format msgid "AI is unavailable in airplane mode without a local endpoint." msgstr "KI ist im Flugmodus ohne lokalen Endpunkt nicht verfügbar." -#: lib/bds/tui.ex:1651 +#: lib/bds/tui.ex:1881 #, elixir-autogen, elixir-format msgid "Could not load this file." msgstr "Diese Datei konnte nicht geladen werden." -#: lib/bds/tui.ex:230 +#: lib/bds/tui.ex:243 #, elixir-autogen, elixir-format msgid "Editing this item is not available in the terminal UI yet." msgstr "Die Bearbeitung dieses Eintrags ist in der Terminal-Oberfläche noch nicht verfügbar." -#: lib/bds/tui.ex:783 +#: lib/bds/tui.ex:940 #, elixir-autogen, elixir-format msgid "No suggestions returned." msgstr "Keine Vorschläge erhalten." -#: lib/bds/tui.ex:1648 +#: lib/bds/tui.ex:1878 #, elixir-autogen, elixir-format msgid "Only images can be previewed." msgstr "Nur Bilder können in der Vorschau angezeigt werden." -#: lib/bds/tui.ex:1447 +#: lib/bds/tui.ex:1671 #, elixir-autogen, elixir-format msgid "Post not found." msgstr "Beitrag nicht gefunden." -#: lib/bds/tui.ex:969 +#: lib/bds/tui.ex:1174 #, elixir-autogen, elixir-format msgid "Press enter to preview %{name}." msgstr "Drücken Sie Enter, um %{name} in der Vorschau anzuzeigen." -#: lib/bds/tui.ex:1494 +#: lib/bds/tui.ex:1724 #, elixir-autogen, elixir-format msgid "Published." msgstr "Veröffentlicht." -#: lib/bds/tui.ex:1510 +#: lib/bds/tui.ex:1740 #, elixir-autogen, elixir-format msgid "Save before switching languages." msgstr "Speichern Sie vor dem Sprachwechsel." -#: lib/bds/tui.ex:1495 +#: lib/bds/tui.ex:524 +#: lib/bds/tui.ex:1725 #, elixir-autogen, elixir-format msgid "Saved." msgstr "Gespeichert." -#: lib/bds/tui.ex:972 +#: lib/bds/tui.ex:1177 #, elixir-autogen, elixir-format msgid "Select an entry and press enter to open it." msgstr "Wählen Sie einen Eintrag aus und öffnen Sie ihn mit Enter." -#: lib/bds/tui.ex:780 +#: lib/bds/tui.ex:937 #, elixir-autogen, elixir-format msgid "Suggestions applied." msgstr "Vorschläge übernommen." -#: lib/bds/tui.ex:984 +#: lib/bds/tui.ex:1189 #, elixir-autogen, elixir-format msgid "Title (ctrl+t to edit)" msgstr "Titel (Strg+T zum Bearbeiten)" -#: lib/bds/tui.ex:983 +#: lib/bds/tui.ex:1188 #, elixir-autogen, elixir-format msgid "Title (editing — enter to confirm)" msgstr "Titel (Bearbeitung — Enter zum Bestätigen)" -#: lib/bds/tui.ex:1033 +#: lib/bds/tui.ex:1241 #, elixir-autogen, elixir-format msgid "Working…" msgstr "Wird bearbeitet…" -#: lib/bds/tui.ex:1055 +#: lib/bds/tui.ex:1263 #, elixir-autogen, elixir-format msgid "esc to close" msgstr "Esc zum Schließen" @@ -3759,158 +3800,263 @@ msgstr "Serveradresse (user@host oder user@host:port), Public-Key-Authentifizier msgid "Use the form user@host or user@host:port." msgstr "Verwenden Sie das Format user@host oder user@host:port." -#: lib/bds/tui.ex:1003 +#: lib/bds/tui.ex:1208 #, elixir-autogen, elixir-format msgid "Preview (ctrl+e to edit)" msgstr "Vorschau (ctrl+e zum Bearbeiten)" -#: lib/bds/tui.ex:1305 +#: lib/bds/tui.ex:1520 #, elixir-autogen, elixir-format msgid "ctrl+s save · ctrl+p publish · ctrl+e preview · ctrl+t title · ctrl+l language · ctrl+g AI · esc back" msgstr "Strg+S Speichern · Strg+P Veröffentlichen · Strg+E Vorschau · Strg+T Titel · Strg+L Sprache · Strg+G KI · Esc Zurück" -#: lib/bds/tui.ex:828 +#: lib/bds/tui.ex:985 #, elixir-autogen, elixir-format msgid "All tasks finished." msgstr "Alle Aufgaben abgeschlossen." -#: lib/bds/tui.ex:1081 +#: lib/bds/tui.ex:1289 #, elixir-autogen, elixir-format msgid "Commands — esc to close" msgstr "Befehle — Esc zum Schließen" -#: lib/bds/tui.ex:654 +#: lib/bds/tui.ex:814 #, elixir-autogen, elixir-format msgid "Unknown command." msgstr "Unbekannter Befehl." -#: lib/bds/tui.ex:1071 +#: lib/bds/tui.ex:1279 #, elixir-autogen, elixir-format msgid "[report/apply in GUI]" msgstr "[Bericht/Anwenden in der GUI]" -#: lib/bds/tui.ex:1220 +#: lib/bds/tui.ex:1428 #, elixir-autogen, elixir-format msgid "%{diffs} differences · %{orphans} orphan files" msgstr "%{diffs} Unterschiede · %{orphans} verwaiste Dateien" -#: lib/bds/tui.ex:1252 +#: lib/bds/tui.ex:1460 #, elixir-autogen, elixir-format msgid "Expected %{expected} · Existing %{existing}" msgstr "Erwartet %{expected} · Vorhanden %{existing}" -#: lib/bds/tui.ex:1269 +#: lib/bds/tui.ex:1477 #, elixir-autogen, elixir-format msgid "Extra files (will be removed):" msgstr "Überzählige Dateien (werden entfernt):" -#: lib/bds/tui.ex:1265 +#: lib/bds/tui.ex:1473 #, elixir-autogen, elixir-format msgid "Missing pages (will be rendered):" msgstr "Fehlende Seiten (werden gerendert):" -#: lib/bds/tui.ex:298 +#: lib/bds/tui.ex:311 #, elixir-autogen, elixir-format msgid "Nothing to apply." msgstr "Nichts anzuwenden." -#: lib/bds/tui.ex:265 +#: lib/bds/tui.ex:278 #, elixir-autogen, elixir-format msgid "Nothing to repair." msgstr "Nichts zu reparieren." -#: lib/bds/tui.ex:1243 +#: lib/bds/tui.ex:1451 #, elixir-autogen, elixir-format msgid "Orphan files (not in database):" msgstr "Verwaiste Dateien (nicht in der Datenbank):" -#: lib/bds/tui.ex:1259 +#: lib/bds/tui.ex:1467 #, elixir-autogen, elixir-format msgid "Sitemap changed." msgstr "Sitemap geändert." -#: lib/bds/tui.ex:1273 +#: lib/bds/tui.ex:1481 #, elixir-autogen, elixir-format msgid "Updated posts (will be re-rendered):" msgstr "Aktualisierte Beiträge (werden neu gerendert):" -#: lib/bds/tui.ex:1210 +#: lib/bds/tui.ex:1418 #, elixir-autogen, elixir-format msgid "enter apply changes · esc close" msgstr "Enter Änderungen anwenden · Esc Schließen" -#: lib/bds/tui.ex:1205 +#: lib/bds/tui.ex:1413 #, elixir-autogen, elixir-format msgid "enter repair all from files · esc close" msgstr "Enter alles aus Dateien reparieren · Esc Schließen" -#: lib/bds/tui.ex:619 +#: lib/bds/tui.ex:779 #, elixir-autogen, elixir-format msgid "Imported Blog" msgstr "Importierter Blog" -#: lib/bds/tui.ex:638 +#: lib/bds/tui.ex:798 #, elixir-autogen, elixir-format msgid "Not a folder: %{path}" msgstr "Kein Ordner: %{path}" -#: lib/bds/tui.ex:1147 +#: lib/bds/tui.ex:1355 #, elixir-autogen, elixir-format msgid "Projects — enter switch · o open existing · esc close" msgstr "Projekte — Enter Wechseln · O Bestehenden öffnen · Esc Schließen" -#: lib/bds/tui.ex:546 +#: lib/bds/tui.ex:706 #, elixir-autogen, elixir-format msgid "Switched to %{name}." msgstr "Zu %{name} gewechselt." -#: lib/bds/tui.ex:1175 +#: lib/bds/tui.ex:1383 #, elixir-autogen, elixir-format msgid "Matching folders" msgstr "Passende Ordner" -#: lib/bds/tui.ex:1113 +#: lib/bds/tui.ex:1321 #, elixir-autogen, elixir-format msgid "Open Existing Blog — type a folder path · tab complete · enter open · esc back" msgstr "Bestehenden Blog öffnen — Ordnerpfad eingeben · Tab Vervollständigen · Enter Öffnen · Esc Zurück" -#: lib/bds/tui.ex:1298 -#, elixir-autogen, elixir-format -msgid "enter open · n new post · 1-5 views · p projects · / search · : commands (:? help) · r refresh · ctrl+q quit" -msgstr "Enter Öffnen · N Neuer Beitrag · 1-5 Ansichten · P Projekte · / Suche · : Befehle (:? Hilfe) · R Aktualisieren · Strg+Q Beenden" - -#: lib/bds/tui.ex:321 +#: lib/bds/tui.ex:334 #, elixir-autogen, elixir-format msgid "Commit message required." msgstr "Commit-Nachricht erforderlich." -#: lib/bds/tui.ex:327 +#: lib/bds/tui.ex:340 #, elixir-autogen, elixir-format msgid "Committed." msgstr "Commit erstellt." -#: lib/bds/tui.ex:960 +#: lib/bds/tui.ex:1165 #, elixir-autogen, elixir-format msgid "Diff (pgup/pgdn scroll)" msgstr "Diff (Bild↑/Bild↓ blättern)" -#: lib/bds/tui.ex:1333 +#: lib/bds/tui.ex:1548 #, elixir-autogen, elixir-format msgid "No changes." msgstr "Keine Änderungen." -#: lib/bds/tui.ex:387 +#: lib/bds/tui.ex:400 #, elixir-autogen, elixir-format msgid "No diff for this file." msgstr "Kein Diff für diese Datei." -#: lib/bds/tui.ex:375 -#: lib/bds/tui.ex:947 +#: lib/bds/tui.ex:388 +#: lib/bds/tui.ex:1152 #, elixir-autogen, elixir-format msgid "Not a git repository." msgstr "Kein Git-Repository." -#: lib/bds/tui.ex:1291 +#: lib/bds/ui/settings_form.ex:73 #, elixir-autogen, elixir-format -msgid "c commit · u pull · s push · enter jump to file · pgup/pgdn scroll diff · 1-5 views · ctrl+q quit" -msgstr "C Commit · U Pull · S Push · Enter Zur Datei springen · Bild↑/Bild↓ Diff blättern · 1-5 Ansichten · Strg+Q Beenden" +msgid "Blog Languages (comma-separated)" +msgstr "Blog-Sprachen (durch Komma getrennt)" + +#: lib/bds/ui/settings_form.ex:215 +#, elixir-autogen, elixir-format +msgid "Data Folder" +msgstr "Datenordner" + +#: lib/bds/ui/settings_form.ex:218 +#, elixir-autogen, elixir-format +msgid "Maintenance" +msgstr "Wartung" + +#: lib/bds/ui/settings_form.ex:45 +#, elixir-autogen, elixir-format +msgid "Name" +msgstr "Name" + +#: lib/bds/ui/settings_form.ex:138 +#, elixir-autogen, elixir-format +msgid "New Category" +msgstr "Neue Kategorie" + +#: lib/bds/ui/settings_form.ex:170 +#, elixir-autogen, elixir-format +msgid "Offline Chat Disable Reasoning" +msgstr "Offline-Chat: Denkprozess deaktivieren" + +#: lib/bds/ui/settings_form.ex:167 +#, elixir-autogen, elixir-format +msgid "Offline Chat Tool Calls" +msgstr "Offline-Chat: Werkzeugaufrufe" + +#: lib/bds/ui/settings_form.ex:176 +#, elixir-autogen, elixir-format +msgid "Offline Image Model" +msgstr "Offline-Bildmodell" + +#: lib/bds/ui/settings_form.ex:154 +#, elixir-autogen, elixir-format +msgid "Online Chat Disable Reasoning" +msgstr "Online-Chat: Denkprozess deaktivieren" + +#: lib/bds/ui/settings_form.ex:151 +#, elixir-autogen, elixir-format +msgid "Online Chat Tool Calls" +msgstr "Online-Chat: Werkzeugaufrufe" + +#: lib/bds/ui/settings_form.ex:160 +#, elixir-autogen, elixir-format +msgid "Online Image Model" +msgstr "Online-Bildmodell" + +#: lib/bds/ui/settings_form.ex:57 +#, elixir-autogen, elixir-format +msgid "Posts per Page" +msgstr "Beiträge pro Seite" + +#: lib/bds/ui/settings_form.ex:219 +#, elixir-autogen, elixir-format +msgid "Rebuild and maintenance commands are available under the : prompt." +msgstr "Befehle für Neuaufbau und Wartung sind über die :-Eingabe verfügbar." + +#: lib/bds/ui/settings_form.ex:200 +#, elixir-autogen, elixir-format +msgid "SSH Host" +msgstr "SSH-Host" + +#: lib/bds/ui/settings_form.ex:202 +#, elixir-autogen, elixir-format +msgid "SSH Remote Path" +msgstr "SSH-Remote-Pfad" + +#: lib/bds/ui/settings_form.ex:201 +#, elixir-autogen, elixir-format +msgid "SSH User" +msgstr "SSH-Benutzer" + +#: lib/bds/ui/settings_form.ex:119 +#, elixir-autogen, elixir-format +msgid "Show Title" +msgstr "Titel anzeigen" + +#: lib/bds/ui/settings_form.ex:242 +#, elixir-autogen, elixir-format +msgid "Theme" +msgstr "Theme" + +#: lib/bds/tui.ex:1136 +#, elixir-autogen, elixir-format +msgid "enter edit · ctrl+s save · esc close" +msgstr "Enter Bearbeiten · Strg+S Speichern · Esc Schließen" + +#: lib/bds/tui.ex:1499 +#, elixir-autogen, elixir-format +msgid "enter edit/toggle/cycle · ctrl+s save · esc close · ctrl+q quit" +msgstr "Enter Bearbeiten/Umschalten/Wechseln · Strg+S Speichern · Esc Schließen · Strg+Q Beenden" + +#: lib/bds/ui/settings_form.ex:230 +#, elixir-autogen, elixir-format +msgid "not supported yet" +msgstr "noch nicht unterstützt" + +#: lib/bds/tui.ex:1506 +#, elixir-autogen, elixir-format +msgid "c commit · u pull · s push · enter jump to file · pgup/pgdn scroll diff · 1-7 views · ctrl+q quit" +msgstr "C Commit · U Pull · S Push · Enter Zur Datei springen · Bild↑/Bild↓ Diff blättern · 1-7 Ansichten · Strg+Q Beenden" + +#: lib/bds/tui.ex:1513 +#, elixir-autogen, elixir-format +msgid "enter open · n new post · 1-7 views · p projects · / search · : commands (:? help) · r refresh · ctrl+q quit" +msgstr "Enter Öffnen · N Neuer Beitrag · 1-7 Ansichten · P Projekte · / Suche · : Befehle (:? Hilfe) · R Aktualisieren · Strg+Q Beenden" diff --git a/priv/gettext/en/LC_MESSAGES/ui.po b/priv/gettext/en/LC_MESSAGES/ui.po index 1ced0ab..f831bfd 100644 --- a/priv/gettext/en/LC_MESSAGES/ui.po +++ b/priv/gettext/en/LC_MESSAGES/ui.po @@ -59,6 +59,7 @@ msgid "--" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:220 +#: lib/bds/ui/settings_form.ex:145 #: lib/bds/ui/sidebar.ex:802 #, elixir-autogen, elixir-format msgid "AI" @@ -71,8 +72,8 @@ msgid "AI Assistant" msgstr "" #: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:93 -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:193 -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:211 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:203 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:221 #, elixir-autogen, elixir-format msgid "AI Settings" msgstr "" @@ -81,11 +82,11 @@ msgstr "" #: lib/bds/desktop/shell_live/overlay_manager.ex:72 #: lib/bds/desktop/shell_live/post_editor.ex:920 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43 -#: lib/bds/tui.ex:780 -#: lib/bds/tui.ex:783 -#: lib/bds/tui.ex:786 -#: lib/bds/tui.ex:794 -#: lib/bds/tui.ex:1523 +#: lib/bds/tui.ex:937 +#: lib/bds/tui.ex:940 +#: lib/bds/tui.ex:943 +#: lib/bds/tui.ex:951 +#: lib/bds/tui.ex:1753 #, elixir-autogen, elixir-format msgid "AI Suggestions" msgstr "" @@ -163,6 +164,7 @@ msgid "Agent configuration files for the built-in bDS MCP server" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:273 +#: lib/bds/ui/settings_form.ex:146 #, elixir-autogen, elixir-format msgid "Airplane Mode" msgstr "" @@ -414,6 +416,7 @@ msgid "Blogmark Bookmarklet" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:90 +#: lib/bds/ui/settings_form.ex:67 #, elixir-autogen, elixir-format msgid "Blogmark Category" msgstr "" @@ -572,7 +575,7 @@ msgid "Collapse unchanged diff hunks" msgstr "" #: lib/bds/desktop/shell_live/overlay_manager.ex:422 -#: lib/bds/tui.ex:1619 +#: lib/bds/tui.ex:1849 #, elixir-autogen, elixir-format msgid "Command completed" msgstr "" @@ -590,7 +593,8 @@ msgstr "" #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:375 #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:34 #: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:32 -#: lib/bds/tui.ex:1014 +#: lib/bds/tui.ex:1219 +#: lib/bds/ui/settings_form.ex:137 #: lib/bds/ui/sidebar.ex:801 #, elixir-autogen, elixir-format msgid "Content" @@ -678,6 +682,7 @@ msgstr "" msgid "Dashboard" msgstr "" +#: lib/bds/ui/settings_form.ex:214 #: lib/bds/ui/sidebar.ex:815 #, elixir-autogen, elixir-format msgid "Data" @@ -706,11 +711,13 @@ msgid "Default" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:78 +#: lib/bds/ui/settings_form.ex:54 #, elixir-autogen, elixir-format msgid "Default Author" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:119 +#: lib/bds/ui/settings_form.ex:88 #, elixir-autogen, elixir-format msgid "Default Editor Mode" msgstr "" @@ -776,6 +783,7 @@ msgid "Deployment credentials for upload tasks" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:38 +#: lib/bds/ui/settings_form.ex:46 #, elixir-autogen, elixir-format msgid "Description" msgstr "" @@ -798,6 +806,7 @@ msgid "Detect Language" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:129 +#: lib/bds/ui/settings_form.ex:93 #, elixir-autogen, elixir-format msgid "Diff View Style" msgstr "" @@ -913,6 +922,7 @@ msgstr "" #: lib/bds/desktop/shell_live/index.html.heex:513 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:114 +#: lib/bds/ui/settings_form.ex:87 #: lib/bds/ui/sidebar.ex:800 #, elixir-autogen, elixir-format msgid "Editor" @@ -1030,7 +1040,7 @@ msgid "Filename" msgstr "" #: lib/bds/desktop/menu_bar.ex:254 -#: lib/bds/tui.ex:1583 +#: lib/bds/tui.ex:1813 #, elixir-autogen, elixir-format msgid "Fill Missing Translations" msgstr "" @@ -1041,7 +1051,7 @@ msgid "Find" msgstr "" #: lib/bds/desktop/menu_bar.ex:255 -#: lib/bds/tui.ex:1586 +#: lib/bds/tui.ex:1816 #, elixir-autogen, elixir-format msgid "Find Duplicate Posts" msgstr "" @@ -1068,14 +1078,14 @@ msgid "Gallery" msgstr "" #: lib/bds/desktop/menu_bar.ex:256 -#: lib/bds/tui.ex:1567 +#: lib/bds/tui.ex:1797 #, elixir-autogen, elixir-format msgid "Generate Site" msgstr "" #: lib/bds/desktop/shell_live.ex:792 #: lib/bds/desktop/shell_live/socket_state.ex:109 -#: lib/bds/tui.ex:1440 +#: lib/bds/tui.ex:1662 #: lib/bds/ui/sidebar.ex:826 #, elixir-autogen, elixir-format msgid "Git" @@ -1100,6 +1110,7 @@ msgid "Help" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:142 +#: lib/bds/ui/settings_form.ex:100 #, elixir-autogen, elixir-format msgid "Hide Unchanged Regions" msgstr "" @@ -1321,6 +1332,7 @@ msgid "Links To" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:162 +#: lib/bds/ui/settings_form.ex:128 #, elixir-autogen, elixir-format msgid "List Template" msgstr "" @@ -1333,6 +1345,7 @@ msgstr "" #: lib/bds/desktop/shell_live/settings_editor/mcp_config.ex:50 #: lib/bds/desktop/shell_live/settings_editor/mcp_config.ex:57 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:351 +#: lib/bds/ui/settings_form.ex:234 #: lib/bds/ui/sidebar.ex:816 #, elixir-autogen, elixir-format msgid "MCP" @@ -1350,6 +1363,7 @@ msgstr "" #: lib/bds/desktop/shell_data.ex:103 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:55 +#: lib/bds/ui/settings_form.ex:50 #, elixir-autogen, elixir-format msgid "Main Language" msgstr "" @@ -1390,9 +1404,9 @@ msgstr "" #: lib/bds/desktop/shell_live/misc_editor.ex:762 #: lib/bds/desktop/shell_live/sidebar_components.ex:654 #: lib/bds/desktop/shell_live/sidebar_delete.ex:175 -#: lib/bds/tui.ex:1436 -#: lib/bds/tui.ex:1648 -#: lib/bds/tui.ex:1651 +#: lib/bds/tui.ex:1657 +#: lib/bds/tui.ex:1878 +#: lib/bds/tui.ex:1881 #: lib/bds/ui/registry.ex:30 #: lib/bds/ui/registry.ex:100 #: lib/bds/ui/sidebar.ex:578 @@ -1435,11 +1449,11 @@ msgstr "" #: lib/bds/desktop/shell_live/misc_editor.ex:214 #: lib/bds/desktop/shell_live/misc_editor.ex:226 #: lib/bds/desktop/shell_live/misc_editor.ex:448 -#: lib/bds/tui.ex:265 -#: lib/bds/tui.ex:271 -#: lib/bds/tui.ex:282 -#: lib/bds/tui.ex:1204 -#: lib/bds/tui.ex:1564 +#: lib/bds/tui.ex:278 +#: lib/bds/tui.ex:284 +#: lib/bds/tui.ex:295 +#: lib/bds/tui.ex:1412 +#: lib/bds/tui.ex:1794 #: lib/bds/ui/registry.ex:111 #, elixir-autogen, elixir-format msgid "Metadata Diff" @@ -1485,7 +1499,7 @@ msgstr "" #: lib/bds/desktop/menu_bar.ex:214 #: lib/bds/desktop/shell_live/sidebar_create.ex:41 -#: lib/bds/tui.ex:221 +#: lib/bds/tui.ex:232 #, elixir-autogen, elixir-format msgid "New Post" msgstr "" @@ -1671,11 +1685,13 @@ msgid "Offline" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:269 +#: lib/bds/ui/settings_form.ex:165 #, elixir-autogen, elixir-format msgid "Offline API Key" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:277 +#: lib/bds/ui/settings_form.ex:166 #, elixir-autogen, elixir-format msgid "Offline Chat Model" msgstr "" @@ -1691,6 +1707,7 @@ msgid "Offline Chat Tools" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:260 +#: lib/bds/ui/settings_form.ex:164 #, elixir-autogen, elixir-format msgid "Offline Endpoint URL" msgstr "" @@ -1701,21 +1718,25 @@ msgid "Offline Image Analysis Model" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:297 +#: lib/bds/ui/settings_form.ex:179 #, elixir-autogen, elixir-format msgid "Offline Image Support" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:289 +#: lib/bds/ui/settings_form.ex:173 #, elixir-autogen, elixir-format msgid "Offline Title Model" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:232 +#: lib/bds/ui/settings_form.ex:149 #, elixir-autogen, elixir-format msgid "Online API Key" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:236 +#: lib/bds/ui/settings_form.ex:150 #, elixir-autogen, elixir-format msgid "Online Chat Model" msgstr "" @@ -1731,6 +1752,7 @@ msgid "Online Chat Tools" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:223 +#: lib/bds/ui/settings_form.ex:148 #, elixir-autogen, elixir-format msgid "Online Endpoint URL" msgstr "" @@ -1741,11 +1763,13 @@ msgid "Online Image Analysis Model" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:256 +#: lib/bds/ui/settings_form.ex:163 #, elixir-autogen, elixir-format msgid "Online Image Support" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:248 +#: lib/bds/ui/settings_form.ex:157 #, elixir-autogen, elixir-format msgid "Online Title Model" msgstr "" @@ -1763,8 +1787,8 @@ msgid "Open Data Folder" msgstr "" #: lib/bds/desktop/shell_live/index.html.heex:644 -#: lib/bds/tui.ex:632 -#: lib/bds/tui.ex:637 +#: lib/bds/tui.ex:792 +#: lib/bds/tui.ex:797 #, elixir-autogen, elixir-format msgid "Open Existing Blog" msgstr "" @@ -1776,7 +1800,7 @@ msgid "Open Settings" msgstr "" #: lib/bds/desktop/menu_bar.ex:217 -#: lib/bds/tui.ex:1588 +#: lib/bds/tui.ex:1818 #, elixir-autogen, elixir-format msgid "Open in Browser" msgstr "" @@ -1902,6 +1926,7 @@ msgid "Post Slug Conflicts" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:161 +#: lib/bds/ui/settings_form.ex:122 #, elixir-autogen, elixir-format msgid "Post Template" msgstr "" @@ -1924,8 +1949,8 @@ msgstr "" #: lib/bds/desktop/menu_bar.ex:233 #: lib/bds/desktop/shell_live/misc_editor.ex:664 #: lib/bds/desktop/shell_live/misc_editor.ex:761 -#: lib/bds/tui.ex:1435 -#: lib/bds/tui.ex:1447 +#: lib/bds/tui.ex:1656 +#: lib/bds/tui.ex:1671 #: lib/bds/ui/registry.ex:14 #: lib/bds/ui/sidebar.ex:271 #, elixir-autogen, elixir-format @@ -1967,6 +1992,7 @@ msgstr "" #: lib/bds/desktop/shell_live/misc_editor.ex:739 #: lib/bds/desktop/shell_live/misc_editor.ex:765 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:27 +#: lib/bds/ui/settings_form.ex:44 #: lib/bds/ui/sidebar.ex:799 #, elixir-autogen, elixir-format msgid "Project" @@ -1984,8 +2010,8 @@ msgstr "" #: lib/bds/desktop/shell_live/chat_surface.ex:15 #: lib/bds/desktop/shell_live/index.html.heex:623 -#: lib/bds/tui.ex:545 -#: lib/bds/tui.ex:550 +#: lib/bds/tui.ex:705 +#: lib/bds/tui.ex:710 #, elixir-autogen, elixir-format msgid "Projects" msgstr "" @@ -1996,6 +2022,7 @@ msgid "Protected categories cannot be removed" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:51 +#: lib/bds/ui/settings_form.ex:47 #, elixir-autogen, elixir-format msgid "Public URL" msgstr "" @@ -2029,6 +2056,7 @@ msgstr "" #: lib/bds/desktop/shell_live/settings_editor/publishing_settings.ex:40 #: lib/bds/desktop/shell_live/settings_editor/publishing_settings.ex:57 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:338 +#: lib/bds/ui/settings_form.ex:199 #: lib/bds/ui/sidebar.ex:811 #, elixir-autogen, elixir-format msgid "Publishing" @@ -2051,15 +2079,15 @@ msgid "Ready to import:" msgstr "" #: lib/bds/desktop/menu_bar.ex:248 -#: lib/bds/tui.ex:629 -#: lib/bds/tui.ex:1568 +#: lib/bds/tui.ex:789 +#: lib/bds/tui.ex:1798 #, elixir-autogen, elixir-format msgid "Rebuild Database" msgstr "" #: lib/bds/desktop/menu_bar.ex:250 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:381 -#: lib/bds/tui.ex:1572 +#: lib/bds/tui.ex:1802 #, elixir-autogen, elixir-format msgid "Rebuild Embedding Index" msgstr "" @@ -2117,7 +2145,7 @@ msgid "Refresh Translation" msgstr "" #: lib/bds/desktop/menu_bar.ex:252 -#: lib/bds/tui.ex:1575 +#: lib/bds/tui.ex:1805 #, elixir-autogen, elixir-format msgid "Regenerate Calendar" msgstr "" @@ -2128,7 +2156,7 @@ msgid "Regenerate Missing Thumbnails" msgstr "" #: lib/bds/desktop/menu_bar.ex:249 -#: lib/bds/tui.ex:1569 +#: lib/bds/tui.ex:1799 #, elixir-autogen, elixir-format msgid "Reindex Text" msgstr "" @@ -2160,6 +2188,7 @@ msgid "Remove tag" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:159 +#: lib/bds/ui/settings_form.ex:118 #, elixir-autogen, elixir-format msgid "Render in Lists" msgstr "" @@ -2237,6 +2266,7 @@ msgid "Run" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:340 +#: lib/bds/ui/settings_form.ex:203 #, elixir-autogen, elixir-format msgid "SSH Mode" msgstr "" @@ -2314,7 +2344,7 @@ msgstr "" #: lib/bds/desktop/shell_live/script_editor.ex:216 #: lib/bds/desktop/shell_live/script_editor.ex:219 #: lib/bds/desktop/shell_live/script_editor.ex:234 -#: lib/bds/tui.ex:1438 +#: lib/bds/tui.ex:1659 #: lib/bds/ui/registry.ex:38 #: lib/bds/ui/sidebar.ex:63 #: lib/bds/ui/sidebar.ex:115 @@ -2413,12 +2443,15 @@ msgid "Selected pairs dismissed" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:324 +#: lib/bds/ui/settings_form.ex:78 +#: lib/bds/ui/settings_form.ex:189 #, elixir-autogen, elixir-format msgid "Semantic Similarity" msgstr "" #: lib/bds/desktop/shell_live/settings_editor/project_settings.ex:60 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:11 +#: lib/bds/tui.ex:1661 #: lib/bds/ui/registry.ex:86 #: lib/bds/ui/registry.ex:101 #: lib/bds/ui/sidebar.ex:795 @@ -2442,9 +2475,9 @@ msgid "Site" msgstr "" #: lib/bds/desktop/shell_live/misc_editor.ex:412 -#: lib/bds/tui.ex:298 -#: lib/bds/tui.ex:300 -#: lib/bds/tui.ex:1209 +#: lib/bds/tui.ex:311 +#: lib/bds/tui.ex:313 +#: lib/bds/tui.ex:1417 #: lib/bds/ui/registry.ex:125 #, elixir-autogen, elixir-format msgid "Site Validation" @@ -2508,6 +2541,7 @@ msgstr "" #: lib/bds/desktop/shell_live/settings_editor/style_editor.ex:76 #: lib/bds/desktop/shell_live/settings_editor_html/style_editor.html.heex:3 #: lib/bds/ui/registry.ex:102 +#: lib/bds/ui/settings_form.ex:241 #: lib/bds/ui/sidebar.ex:817 #, elixir-autogen, elixir-format msgid "Style" @@ -2534,6 +2568,7 @@ msgid "Syntax is valid" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:301 +#: lib/bds/ui/settings_form.ex:147 #, elixir-autogen, elixir-format msgid "System Prompt" msgstr "" @@ -2565,7 +2600,7 @@ msgstr "" #: lib/bds/desktop/shell_live/tags_editor.ex:222 #: lib/bds/desktop/shell_live/tags_editor.ex:253 #: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:11 -#: lib/bds/tui.ex:1439 +#: lib/bds/tui.ex:1660 #: lib/bds/ui/registry.ex:54 #: lib/bds/ui/registry.ex:103 #: lib/bds/ui/sidebar.ex:289 @@ -2577,12 +2612,13 @@ msgstr "" #: lib/bds/desktop/shell_live.ex:786 #: lib/bds/desktop/shell_live/panel_renderer.ex:54 -#: lib/bds/tui.ex:828 +#: lib/bds/tui.ex:985 #, elixir-autogen, elixir-format msgid "Tasks" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:321 +#: lib/bds/ui/settings_form.ex:186 #: lib/bds/ui/sidebar.ex:805 #, elixir-autogen, elixir-format msgid "Technology" @@ -2622,7 +2658,7 @@ msgstr "" #: lib/bds/desktop/shell_live/template_editor.ex:171 #: lib/bds/desktop/shell_live/template_editor.ex:176 #: lib/bds/desktop/shell_live/template_editor.ex:191 -#: lib/bds/tui.ex:1437 +#: lib/bds/tui.ex:1658 #: lib/bds/ui/registry.ex:46 #: lib/bds/ui/sidebar.ex:71 #: lib/bds/ui/sidebar.ex:122 @@ -2668,6 +2704,7 @@ msgstr "" #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:23 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:158 #: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:22 +#: lib/bds/ui/settings_form.ex:117 #, elixir-autogen, elixir-format msgid "Title" msgstr "" @@ -2845,7 +2882,7 @@ msgid "Updated URLs" msgstr "" #: lib/bds/desktop/menu_bar.ex:259 -#: lib/bds/tui.ex:1587 +#: lib/bds/tui.ex:1817 #, elixir-autogen, elixir-format msgid "Upload Site" msgstr "" @@ -2873,13 +2910,13 @@ msgid "Validate" msgstr "" #: lib/bds/desktop/menu_bar.ex:258 -#: lib/bds/tui.ex:1565 +#: lib/bds/tui.ex:1795 #, elixir-autogen, elixir-format msgid "Validate Site" msgstr "" #: lib/bds/desktop/menu_bar.ex:253 -#: lib/bds/tui.ex:1578 +#: lib/bds/tui.ex:1808 #, elixir-autogen, elixir-format msgid "Validate Translations" msgstr "" @@ -2923,6 +2960,7 @@ msgid "Working tree and history" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:138 +#: lib/bds/ui/settings_form.ex:97 #, elixir-autogen, elixir-format msgid "Wrap Long Lines" msgstr "" @@ -3281,6 +3319,7 @@ msgid "End-user guidance for editorial workflows, media, templates, translation, msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:86 +#: lib/bds/ui/settings_form.ex:62 #, elixir-autogen, elixir-format msgid "Image Import Concurrency" msgstr "Image Import Concurrency" @@ -3350,15 +3389,15 @@ msgstr "" #: lib/bds/desktop/shell_live/git_handler.ex:46 #: lib/bds/desktop/shell_live/git_handler.ex:52 #: lib/bds/desktop/shell_live/sidebar_components.ex:556 -#: lib/bds/tui.ex:321 -#: lib/bds/tui.ex:327 -#: lib/bds/tui.ex:330 +#: lib/bds/tui.ex:334 +#: lib/bds/tui.ex:340 +#: lib/bds/tui.ex:343 #, elixir-autogen, elixir-format msgid "Commit" msgstr "" #: lib/bds/desktop/shell_live/sidebar_components.ex:555 -#: lib/bds/tui.ex:1031 +#: lib/bds/tui.ex:1239 #, elixir-autogen, elixir-format msgid "Commit message" msgstr "" @@ -3382,6 +3421,7 @@ msgid "Fetch" msgstr "" #: lib/bds/desktop/shell_live/sidebar_components.ex:586 +#: lib/bds/tui.ex:1074 #, elixir-autogen, elixir-format msgid "History" msgstr "" @@ -3429,7 +3469,7 @@ msgstr "" #: lib/bds/desktop/shell_live/git_handler.ex:17 #: lib/bds/desktop/shell_live/sidebar_components.ex:543 #: lib/bds/desktop/shell_live/sidebar_components.ex:543 -#: lib/bds/tui.ex:800 +#: lib/bds/tui.ex:957 #, elixir-autogen, elixir-format msgid "Pull" msgstr "" @@ -3437,7 +3477,7 @@ msgstr "" #: lib/bds/desktop/shell_live/git_handler.ex:18 #: lib/bds/desktop/shell_live/sidebar_components.ex:544 #: lib/bds/desktop/shell_live/sidebar_components.ex:544 -#: lib/bds/tui.ex:801 +#: lib/bds/tui.ex:958 #, elixir-autogen, elixir-format, fuzzy msgid "Push" msgstr "" @@ -3550,7 +3590,7 @@ msgid "Suggested tags" msgstr "" #: lib/bds/desktop/menu_bar.ex:257 -#: lib/bds/tui.ex:1566 +#: lib/bds/tui.ex:1796 #, elixir-autogen, elixir-format msgid "Force Render Site" msgstr "" @@ -3617,7 +3657,7 @@ msgstr "" msgid "git push" msgstr "" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:159 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:112 #, elixir-autogen, elixir-format msgid "AI settings saved." msgstr "" @@ -3627,12 +3667,12 @@ msgstr "" msgid "Could not load models" msgstr "" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:190 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:200 #, elixir-autogen, elixir-format msgid "Could not save AI settings" msgstr "" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:184 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:194 #, elixir-autogen, elixir-format msgid "Loaded %{count} models." msgstr "" @@ -3642,87 +3682,88 @@ msgstr "" msgid "OK" msgstr "" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:174 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:184 #, elixir-autogen, elixir-format msgid "The endpoint returned no models. You can still type a model name manually." msgstr "" -#: lib/bds/tui.ex:1524 +#: lib/bds/tui.ex:1754 #, elixir-autogen, elixir-format msgid "AI is unavailable in airplane mode without a local endpoint." msgstr "" -#: lib/bds/tui.ex:1651 +#: lib/bds/tui.ex:1881 #, elixir-autogen, elixir-format, fuzzy msgid "Could not load this file." msgstr "" -#: lib/bds/tui.ex:230 +#: lib/bds/tui.ex:243 #, elixir-autogen, elixir-format msgid "Editing this item is not available in the terminal UI yet." msgstr "" -#: lib/bds/tui.ex:783 +#: lib/bds/tui.ex:940 #, elixir-autogen, elixir-format msgid "No suggestions returned." msgstr "" -#: lib/bds/tui.ex:1648 +#: lib/bds/tui.ex:1878 #, elixir-autogen, elixir-format msgid "Only images can be previewed." msgstr "" -#: lib/bds/tui.ex:1447 +#: lib/bds/tui.ex:1671 #, elixir-autogen, elixir-format msgid "Post not found." msgstr "" -#: lib/bds/tui.ex:969 +#: lib/bds/tui.ex:1174 #, elixir-autogen, elixir-format msgid "Press enter to preview %{name}." msgstr "" -#: lib/bds/tui.ex:1494 +#: lib/bds/tui.ex:1724 #, elixir-autogen, elixir-format, fuzzy msgid "Published." msgstr "" -#: lib/bds/tui.ex:1510 +#: lib/bds/tui.ex:1740 #, elixir-autogen, elixir-format msgid "Save before switching languages." msgstr "" -#: lib/bds/tui.ex:1495 +#: lib/bds/tui.ex:524 +#: lib/bds/tui.ex:1725 #, elixir-autogen, elixir-format, fuzzy msgid "Saved." msgstr "" -#: lib/bds/tui.ex:972 +#: lib/bds/tui.ex:1177 #, elixir-autogen, elixir-format msgid "Select an entry and press enter to open it." msgstr "" -#: lib/bds/tui.ex:780 +#: lib/bds/tui.ex:937 #, elixir-autogen, elixir-format msgid "Suggestions applied." msgstr "" -#: lib/bds/tui.ex:984 +#: lib/bds/tui.ex:1189 #, elixir-autogen, elixir-format msgid "Title (ctrl+t to edit)" msgstr "" -#: lib/bds/tui.ex:983 +#: lib/bds/tui.ex:1188 #, elixir-autogen, elixir-format msgid "Title (editing — enter to confirm)" msgstr "" -#: lib/bds/tui.ex:1033 +#: lib/bds/tui.ex:1241 #, elixir-autogen, elixir-format, fuzzy msgid "Working…" msgstr "" -#: lib/bds/tui.ex:1055 +#: lib/bds/tui.ex:1263 #, elixir-autogen, elixir-format msgid "esc to close" msgstr "" @@ -3759,158 +3800,263 @@ msgstr "" msgid "Use the form user@host or user@host:port." msgstr "" -#: lib/bds/tui.ex:1003 +#: lib/bds/tui.ex:1208 #, elixir-autogen, elixir-format msgid "Preview (ctrl+e to edit)" msgstr "" -#: lib/bds/tui.ex:1305 +#: lib/bds/tui.ex:1520 #, elixir-autogen, elixir-format, fuzzy msgid "ctrl+s save · ctrl+p publish · ctrl+e preview · ctrl+t title · ctrl+l language · ctrl+g AI · esc back" msgstr "" -#: lib/bds/tui.ex:828 +#: lib/bds/tui.ex:985 #, elixir-autogen, elixir-format msgid "All tasks finished." msgstr "" -#: lib/bds/tui.ex:1081 +#: lib/bds/tui.ex:1289 #, elixir-autogen, elixir-format msgid "Commands — esc to close" msgstr "" -#: lib/bds/tui.ex:654 +#: lib/bds/tui.ex:814 #, elixir-autogen, elixir-format, fuzzy msgid "Unknown command." msgstr "" -#: lib/bds/tui.ex:1071 +#: lib/bds/tui.ex:1279 #, elixir-autogen, elixir-format msgid "[report/apply in GUI]" msgstr "" -#: lib/bds/tui.ex:1220 +#: lib/bds/tui.ex:1428 #, elixir-autogen, elixir-format msgid "%{diffs} differences · %{orphans} orphan files" msgstr "" -#: lib/bds/tui.ex:1252 +#: lib/bds/tui.ex:1460 #, elixir-autogen, elixir-format msgid "Expected %{expected} · Existing %{existing}" msgstr "" -#: lib/bds/tui.ex:1269 +#: lib/bds/tui.ex:1477 #, elixir-autogen, elixir-format msgid "Extra files (will be removed):" msgstr "" -#: lib/bds/tui.ex:1265 +#: lib/bds/tui.ex:1473 #, elixir-autogen, elixir-format msgid "Missing pages (will be rendered):" msgstr "" -#: lib/bds/tui.ex:298 +#: lib/bds/tui.ex:311 #, elixir-autogen, elixir-format, fuzzy msgid "Nothing to apply." msgstr "" -#: lib/bds/tui.ex:265 +#: lib/bds/tui.ex:278 #, elixir-autogen, elixir-format, fuzzy msgid "Nothing to repair." msgstr "" -#: lib/bds/tui.ex:1243 +#: lib/bds/tui.ex:1451 #, elixir-autogen, elixir-format msgid "Orphan files (not in database):" msgstr "" -#: lib/bds/tui.ex:1259 +#: lib/bds/tui.ex:1467 #, elixir-autogen, elixir-format msgid "Sitemap changed." msgstr "" -#: lib/bds/tui.ex:1273 +#: lib/bds/tui.ex:1481 #, elixir-autogen, elixir-format msgid "Updated posts (will be re-rendered):" msgstr "" -#: lib/bds/tui.ex:1210 +#: lib/bds/tui.ex:1418 #, elixir-autogen, elixir-format msgid "enter apply changes · esc close" msgstr "" -#: lib/bds/tui.ex:1205 +#: lib/bds/tui.ex:1413 #, elixir-autogen, elixir-format msgid "enter repair all from files · esc close" msgstr "" -#: lib/bds/tui.ex:619 +#: lib/bds/tui.ex:779 #, elixir-autogen, elixir-format, fuzzy msgid "Imported Blog" msgstr "" -#: lib/bds/tui.ex:638 +#: lib/bds/tui.ex:798 #, elixir-autogen, elixir-format msgid "Not a folder: %{path}" msgstr "" -#: lib/bds/tui.ex:1147 +#: lib/bds/tui.ex:1355 #, elixir-autogen, elixir-format msgid "Projects — enter switch · o open existing · esc close" msgstr "" -#: lib/bds/tui.ex:546 +#: lib/bds/tui.ex:706 #, elixir-autogen, elixir-format msgid "Switched to %{name}." msgstr "" -#: lib/bds/tui.ex:1175 +#: lib/bds/tui.ex:1383 #, elixir-autogen, elixir-format msgid "Matching folders" msgstr "" -#: lib/bds/tui.ex:1113 +#: lib/bds/tui.ex:1321 #, elixir-autogen, elixir-format, fuzzy msgid "Open Existing Blog — type a folder path · tab complete · enter open · esc back" msgstr "" -#: lib/bds/tui.ex:1298 -#, elixir-autogen, elixir-format, fuzzy -msgid "enter open · n new post · 1-5 views · p projects · / search · : commands (:? help) · r refresh · ctrl+q quit" -msgstr "" - -#: lib/bds/tui.ex:321 +#: lib/bds/tui.ex:334 #, elixir-autogen, elixir-format, fuzzy msgid "Commit message required." msgstr "" -#: lib/bds/tui.ex:327 +#: lib/bds/tui.ex:340 #, elixir-autogen, elixir-format, fuzzy msgid "Committed." msgstr "" -#: lib/bds/tui.ex:960 +#: lib/bds/tui.ex:1165 #, elixir-autogen, elixir-format msgid "Diff (pgup/pgdn scroll)" msgstr "" -#: lib/bds/tui.ex:1333 +#: lib/bds/tui.ex:1548 #, elixir-autogen, elixir-format, fuzzy msgid "No changes." msgstr "" -#: lib/bds/tui.ex:387 +#: lib/bds/tui.ex:400 #, elixir-autogen, elixir-format msgid "No diff for this file." msgstr "" -#: lib/bds/tui.ex:375 -#: lib/bds/tui.ex:947 +#: lib/bds/tui.ex:388 +#: lib/bds/tui.ex:1152 #, elixir-autogen, elixir-format msgid "Not a git repository." msgstr "" -#: lib/bds/tui.ex:1291 -#, elixir-autogen, elixir-format -msgid "c commit · u pull · s push · enter jump to file · pgup/pgdn scroll diff · 1-5 views · ctrl+q quit" +#: lib/bds/ui/settings_form.ex:73 +#, elixir-autogen, elixir-format, fuzzy +msgid "Blog Languages (comma-separated)" +msgstr "" + +#: lib/bds/ui/settings_form.ex:215 +#, elixir-autogen, elixir-format +msgid "Data Folder" +msgstr "" + +#: lib/bds/ui/settings_form.ex:218 +#, elixir-autogen, elixir-format +msgid "Maintenance" +msgstr "" + +#: lib/bds/ui/settings_form.ex:45 +#, elixir-autogen, elixir-format +msgid "Name" +msgstr "" + +#: lib/bds/ui/settings_form.ex:138 +#, elixir-autogen, elixir-format, fuzzy +msgid "New Category" +msgstr "" + +#: lib/bds/ui/settings_form.ex:170 +#, elixir-autogen, elixir-format, fuzzy +msgid "Offline Chat Disable Reasoning" +msgstr "" + +#: lib/bds/ui/settings_form.ex:167 +#, elixir-autogen, elixir-format, fuzzy +msgid "Offline Chat Tool Calls" +msgstr "" + +#: lib/bds/ui/settings_form.ex:176 +#, elixir-autogen, elixir-format, fuzzy +msgid "Offline Image Model" +msgstr "" + +#: lib/bds/ui/settings_form.ex:154 +#, elixir-autogen, elixir-format, fuzzy +msgid "Online Chat Disable Reasoning" +msgstr "" + +#: lib/bds/ui/settings_form.ex:151 +#, elixir-autogen, elixir-format, fuzzy +msgid "Online Chat Tool Calls" +msgstr "" + +#: lib/bds/ui/settings_form.ex:160 +#, elixir-autogen, elixir-format, fuzzy +msgid "Online Image Model" +msgstr "" + +#: lib/bds/ui/settings_form.ex:57 +#, elixir-autogen, elixir-format +msgid "Posts per Page" +msgstr "" + +#: lib/bds/ui/settings_form.ex:219 +#, elixir-autogen, elixir-format +msgid "Rebuild and maintenance commands are available under the : prompt." +msgstr "" + +#: lib/bds/ui/settings_form.ex:200 +#, elixir-autogen, elixir-format +msgid "SSH Host" +msgstr "" + +#: lib/bds/ui/settings_form.ex:202 +#, elixir-autogen, elixir-format, fuzzy +msgid "SSH Remote Path" +msgstr "" + +#: lib/bds/ui/settings_form.ex:201 +#, elixir-autogen, elixir-format +msgid "SSH User" +msgstr "" + +#: lib/bds/ui/settings_form.ex:119 +#, elixir-autogen, elixir-format, fuzzy +msgid "Show Title" +msgstr "" + +#: lib/bds/ui/settings_form.ex:242 +#, elixir-autogen, elixir-format, fuzzy +msgid "Theme" +msgstr "" + +#: lib/bds/tui.ex:1136 +#, elixir-autogen, elixir-format +msgid "enter edit · ctrl+s save · esc close" +msgstr "" + +#: lib/bds/tui.ex:1499 +#, elixir-autogen, elixir-format +msgid "enter edit/toggle/cycle · ctrl+s save · esc close · ctrl+q quit" +msgstr "" + +#: lib/bds/ui/settings_form.ex:230 +#, elixir-autogen, elixir-format +msgid "not supported yet" +msgstr "" + +#: lib/bds/tui.ex:1506 +#, elixir-autogen, elixir-format, fuzzy +msgid "c commit · u pull · s push · enter jump to file · pgup/pgdn scroll diff · 1-7 views · ctrl+q quit" +msgstr "" + +#: lib/bds/tui.ex:1513 +#, elixir-autogen, elixir-format, fuzzy +msgid "enter open · n new post · 1-7 views · p projects · / search · : commands (:? help) · r refresh · ctrl+q quit" msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/ui.po b/priv/gettext/es/LC_MESSAGES/ui.po index 7b9ffe6..53e6bff 100644 --- a/priv/gettext/es/LC_MESSAGES/ui.po +++ b/priv/gettext/es/LC_MESSAGES/ui.po @@ -59,6 +59,7 @@ msgid "--" msgstr "--" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:220 +#: lib/bds/ui/settings_form.ex:145 #: lib/bds/ui/sidebar.ex:802 #, elixir-autogen, elixir-format msgid "AI" @@ -71,8 +72,8 @@ msgid "AI Assistant" msgstr "Asistente de IA" #: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:93 -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:193 -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:211 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:203 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:221 #, elixir-autogen, elixir-format msgid "AI Settings" msgstr "Configuración de IA" @@ -81,11 +82,11 @@ msgstr "Configuración de IA" #: lib/bds/desktop/shell_live/overlay_manager.ex:72 #: lib/bds/desktop/shell_live/post_editor.ex:920 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43 -#: lib/bds/tui.ex:780 -#: lib/bds/tui.ex:783 -#: lib/bds/tui.ex:786 -#: lib/bds/tui.ex:794 -#: lib/bds/tui.ex:1523 +#: lib/bds/tui.ex:937 +#: lib/bds/tui.ex:940 +#: lib/bds/tui.ex:943 +#: lib/bds/tui.ex:951 +#: lib/bds/tui.ex:1753 #, elixir-autogen, elixir-format msgid "AI Suggestions" msgstr "Sugerencias de IA" @@ -163,6 +164,7 @@ msgid "Agent configuration files for the built-in bDS MCP server" msgstr "Archivos de configuración de agentes para el servidor MCP integrado de bDS" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:273 +#: lib/bds/ui/settings_form.ex:146 #, elixir-autogen, elixir-format msgid "Airplane Mode" msgstr "Modo avión" @@ -414,6 +416,7 @@ msgid "Blogmark Bookmarklet" msgstr "Bookmarklet de blogmark" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:90 +#: lib/bds/ui/settings_form.ex:67 #, elixir-autogen, elixir-format msgid "Blogmark Category" msgstr "Categoría de blogmark" @@ -572,7 +575,7 @@ msgid "Collapse unchanged diff hunks" msgstr "Contraer bloques de diff sin cambios" #: lib/bds/desktop/shell_live/overlay_manager.ex:422 -#: lib/bds/tui.ex:1619 +#: lib/bds/tui.ex:1849 #, elixir-autogen, elixir-format msgid "Command completed" msgstr "Comando completado" @@ -590,7 +593,8 @@ msgstr "Confirmar" #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:375 #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:34 #: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:32 -#: lib/bds/tui.ex:1014 +#: lib/bds/tui.ex:1219 +#: lib/bds/ui/settings_form.ex:137 #: lib/bds/ui/sidebar.ex:801 #, elixir-autogen, elixir-format msgid "Content" @@ -678,6 +682,7 @@ msgstr "Oscuro" msgid "Dashboard" msgstr "Panel" +#: lib/bds/ui/settings_form.ex:214 #: lib/bds/ui/sidebar.ex:815 #, elixir-autogen, elixir-format msgid "Data" @@ -706,11 +711,13 @@ msgid "Default" msgstr "Predeterminado" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:78 +#: lib/bds/ui/settings_form.ex:54 #, elixir-autogen, elixir-format msgid "Default Author" msgstr "Autor predeterminado" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:119 +#: lib/bds/ui/settings_form.ex:88 #, elixir-autogen, elixir-format msgid "Default Editor Mode" msgstr "Modo de editor predeterminado" @@ -776,6 +783,7 @@ msgid "Deployment credentials for upload tasks" msgstr "Credenciales de despliegue para tareas de subida" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:38 +#: lib/bds/ui/settings_form.ex:46 #, elixir-autogen, elixir-format msgid "Description" msgstr "Descripción" @@ -798,6 +806,7 @@ msgid "Detect Language" msgstr "Detectar idioma" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:129 +#: lib/bds/ui/settings_form.ex:93 #, elixir-autogen, elixir-format msgid "Diff View Style" msgstr "Estilo de vista diff" @@ -913,6 +922,7 @@ msgstr "Editar traducción" #: lib/bds/desktop/shell_live/index.html.heex:513 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:114 +#: lib/bds/ui/settings_form.ex:87 #: lib/bds/ui/sidebar.ex:800 #, elixir-autogen, elixir-format msgid "Editor" @@ -1030,7 +1040,7 @@ msgid "Filename" msgstr "Nombre de archivo" #: lib/bds/desktop/menu_bar.ex:254 -#: lib/bds/tui.ex:1583 +#: lib/bds/tui.ex:1813 #, elixir-autogen, elixir-format msgid "Fill Missing Translations" msgstr "Completar traducciones faltantes" @@ -1041,7 +1051,7 @@ msgid "Find" msgstr "Buscar" #: lib/bds/desktop/menu_bar.ex:255 -#: lib/bds/tui.ex:1586 +#: lib/bds/tui.ex:1816 #, elixir-autogen, elixir-format msgid "Find Duplicate Posts" msgstr "Buscar entradas duplicadas" @@ -1068,14 +1078,14 @@ msgid "Gallery" msgstr "Galeria" #: lib/bds/desktop/menu_bar.ex:256 -#: lib/bds/tui.ex:1567 +#: lib/bds/tui.ex:1797 #, elixir-autogen, elixir-format msgid "Generate Site" msgstr "Generar sitio" #: lib/bds/desktop/shell_live.ex:792 #: lib/bds/desktop/shell_live/socket_state.ex:109 -#: lib/bds/tui.ex:1440 +#: lib/bds/tui.ex:1662 #: lib/bds/ui/sidebar.ex:826 #, elixir-autogen, elixir-format msgid "Git" @@ -1100,6 +1110,7 @@ msgid "Help" msgstr "Ayuda" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:142 +#: lib/bds/ui/settings_form.ex:100 #, elixir-autogen, elixir-format msgid "Hide Unchanged Regions" msgstr "Ocultar regiones sin cambios" @@ -1321,6 +1332,7 @@ msgid "Links To" msgstr "Enlaza a" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:162 +#: lib/bds/ui/settings_form.ex:128 #, elixir-autogen, elixir-format msgid "List Template" msgstr "Plantilla de lista" @@ -1333,6 +1345,7 @@ msgstr "Cargar más" #: lib/bds/desktop/shell_live/settings_editor/mcp_config.ex:50 #: lib/bds/desktop/shell_live/settings_editor/mcp_config.ex:57 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:351 +#: lib/bds/ui/settings_form.ex:234 #: lib/bds/ui/sidebar.ex:816 #, elixir-autogen, elixir-format msgid "MCP" @@ -1350,6 +1363,7 @@ msgstr "Macros (%{count})" #: lib/bds/desktop/shell_data.ex:103 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:55 +#: lib/bds/ui/settings_form.ex:50 #, elixir-autogen, elixir-format msgid "Main Language" msgstr "Idioma principal" @@ -1390,9 +1404,9 @@ msgstr "Máximo de publicaciones por página" #: lib/bds/desktop/shell_live/misc_editor.ex:762 #: lib/bds/desktop/shell_live/sidebar_components.ex:654 #: lib/bds/desktop/shell_live/sidebar_delete.ex:175 -#: lib/bds/tui.ex:1436 -#: lib/bds/tui.ex:1648 -#: lib/bds/tui.ex:1651 +#: lib/bds/tui.ex:1657 +#: lib/bds/tui.ex:1878 +#: lib/bds/tui.ex:1881 #: lib/bds/ui/registry.ex:30 #: lib/bds/ui/registry.ex:100 #: lib/bds/ui/sidebar.ex:578 @@ -1435,11 +1449,11 @@ msgstr "Metadatos" #: lib/bds/desktop/shell_live/misc_editor.ex:214 #: lib/bds/desktop/shell_live/misc_editor.ex:226 #: lib/bds/desktop/shell_live/misc_editor.ex:448 -#: lib/bds/tui.ex:265 -#: lib/bds/tui.ex:271 -#: lib/bds/tui.ex:282 -#: lib/bds/tui.ex:1204 -#: lib/bds/tui.ex:1564 +#: lib/bds/tui.ex:278 +#: lib/bds/tui.ex:284 +#: lib/bds/tui.ex:295 +#: lib/bds/tui.ex:1412 +#: lib/bds/tui.ex:1794 #: lib/bds/ui/registry.ex:111 #, elixir-autogen, elixir-format msgid "Metadata Diff" @@ -1485,7 +1499,7 @@ msgstr "Nueva página" #: lib/bds/desktop/menu_bar.ex:214 #: lib/bds/desktop/shell_live/sidebar_create.ex:41 -#: lib/bds/tui.ex:221 +#: lib/bds/tui.ex:232 #, elixir-autogen, elixir-format msgid "New Post" msgstr "Nueva entrada" @@ -1671,11 +1685,13 @@ msgid "Offline" msgstr "Sin conexión" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:269 +#: lib/bds/ui/settings_form.ex:165 #, elixir-autogen, elixir-format msgid "Offline API Key" msgstr "Clave API sin conexión" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:277 +#: lib/bds/ui/settings_form.ex:166 #, elixir-autogen, elixir-format msgid "Offline Chat Model" msgstr "Modelo de chat sin conexión" @@ -1691,6 +1707,7 @@ msgid "Offline Chat Tools" msgstr "Herramientas del chat sin conexión" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:260 +#: lib/bds/ui/settings_form.ex:164 #, elixir-autogen, elixir-format msgid "Offline Endpoint URL" msgstr "URL del endpoint sin conexión" @@ -1701,21 +1718,25 @@ msgid "Offline Image Analysis Model" msgstr "Modelo de análisis de imágenes sin conexión" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:297 +#: lib/bds/ui/settings_form.ex:179 #, elixir-autogen, elixir-format msgid "Offline Image Support" msgstr "Soporte de imágenes sin conexión" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:289 +#: lib/bds/ui/settings_form.ex:173 #, elixir-autogen, elixir-format msgid "Offline Title Model" msgstr "Modelo de título sin conexión" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:232 +#: lib/bds/ui/settings_form.ex:149 #, elixir-autogen, elixir-format msgid "Online API Key" msgstr "Clave API en línea" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:236 +#: lib/bds/ui/settings_form.ex:150 #, elixir-autogen, elixir-format msgid "Online Chat Model" msgstr "Modelo de chat en línea" @@ -1731,6 +1752,7 @@ msgid "Online Chat Tools" msgstr "Herramientas del chat en línea" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:223 +#: lib/bds/ui/settings_form.ex:148 #, elixir-autogen, elixir-format msgid "Online Endpoint URL" msgstr "URL del endpoint en línea" @@ -1741,11 +1763,13 @@ msgid "Online Image Analysis Model" msgstr "Modelo de análisis de imágenes en línea" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:256 +#: lib/bds/ui/settings_form.ex:163 #, elixir-autogen, elixir-format msgid "Online Image Support" msgstr "Soporte de imágenes en línea" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:248 +#: lib/bds/ui/settings_form.ex:157 #, elixir-autogen, elixir-format msgid "Online Title Model" msgstr "Modelo de títulos en línea" @@ -1763,8 +1787,8 @@ msgid "Open Data Folder" msgstr "Abrir carpeta de datos" #: lib/bds/desktop/shell_live/index.html.heex:644 -#: lib/bds/tui.ex:632 -#: lib/bds/tui.ex:637 +#: lib/bds/tui.ex:792 +#: lib/bds/tui.ex:797 #, elixir-autogen, elixir-format msgid "Open Existing Blog" msgstr "Abrir blog existente" @@ -1776,7 +1800,7 @@ msgid "Open Settings" msgstr "Abrir Ajustes" #: lib/bds/desktop/menu_bar.ex:217 -#: lib/bds/tui.ex:1588 +#: lib/bds/tui.ex:1818 #, elixir-autogen, elixir-format msgid "Open in Browser" msgstr "Abrir en el navegador" @@ -1902,6 +1926,7 @@ msgid "Post Slug Conflicts" msgstr "Conflictos de slug de publicaciones" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:161 +#: lib/bds/ui/settings_form.ex:122 #, elixir-autogen, elixir-format msgid "Post Template" msgstr "Plantilla de publicación" @@ -1924,8 +1949,8 @@ msgstr "Artículo guardado" #: lib/bds/desktop/menu_bar.ex:233 #: lib/bds/desktop/shell_live/misc_editor.ex:664 #: lib/bds/desktop/shell_live/misc_editor.ex:761 -#: lib/bds/tui.ex:1435 -#: lib/bds/tui.ex:1447 +#: lib/bds/tui.ex:1656 +#: lib/bds/tui.ex:1671 #: lib/bds/ui/registry.ex:14 #: lib/bds/ui/sidebar.ex:271 #, elixir-autogen, elixir-format @@ -1967,6 +1992,7 @@ msgstr "Vista previa no disponible" #: lib/bds/desktop/shell_live/misc_editor.ex:739 #: lib/bds/desktop/shell_live/misc_editor.ex:765 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:27 +#: lib/bds/ui/settings_form.ex:44 #: lib/bds/ui/sidebar.ex:799 #, elixir-autogen, elixir-format msgid "Project" @@ -1984,8 +2010,8 @@ msgstr "Proyecto y publicación" #: lib/bds/desktop/shell_live/chat_surface.ex:15 #: lib/bds/desktop/shell_live/index.html.heex:623 -#: lib/bds/tui.ex:545 -#: lib/bds/tui.ex:550 +#: lib/bds/tui.ex:705 +#: lib/bds/tui.ex:710 #, elixir-autogen, elixir-format msgid "Projects" msgstr "Proyectos" @@ -1996,6 +2022,7 @@ msgid "Protected categories cannot be removed" msgstr "Las categorías protegidas no se pueden eliminar" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:51 +#: lib/bds/ui/settings_form.ex:47 #, elixir-autogen, elixir-format msgid "Public URL" msgstr "URL pública" @@ -2029,6 +2056,7 @@ msgstr "Traducción publicada con contenido en la BD en lugar del sistema de arc #: lib/bds/desktop/shell_live/settings_editor/publishing_settings.ex:40 #: lib/bds/desktop/shell_live/settings_editor/publishing_settings.ex:57 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:338 +#: lib/bds/ui/settings_form.ex:199 #: lib/bds/ui/sidebar.ex:811 #, elixir-autogen, elixir-format msgid "Publishing" @@ -2051,15 +2079,15 @@ msgid "Ready to import:" msgstr "Listo para importar:" #: lib/bds/desktop/menu_bar.ex:248 -#: lib/bds/tui.ex:629 -#: lib/bds/tui.ex:1568 +#: lib/bds/tui.ex:789 +#: lib/bds/tui.ex:1798 #, elixir-autogen, elixir-format msgid "Rebuild Database" msgstr "Reconstruir base de datos" #: lib/bds/desktop/menu_bar.ex:250 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:381 -#: lib/bds/tui.ex:1572 +#: lib/bds/tui.ex:1802 #, elixir-autogen, elixir-format msgid "Rebuild Embedding Index" msgstr "Reconstruir índice de embeddings" @@ -2117,7 +2145,7 @@ msgid "Refresh Translation" msgstr "Actualizar traducción" #: lib/bds/desktop/menu_bar.ex:252 -#: lib/bds/tui.ex:1575 +#: lib/bds/tui.ex:1805 #, elixir-autogen, elixir-format msgid "Regenerate Calendar" msgstr "Regenerar calendario" @@ -2128,7 +2156,7 @@ msgid "Regenerate Missing Thumbnails" msgstr "Regenerar miniaturas faltantes" #: lib/bds/desktop/menu_bar.ex:249 -#: lib/bds/tui.ex:1569 +#: lib/bds/tui.ex:1799 #, elixir-autogen, elixir-format msgid "Reindex Text" msgstr "Reindexar texto" @@ -2160,6 +2188,7 @@ msgid "Remove tag" msgstr "Eliminar etiqueta" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:159 +#: lib/bds/ui/settings_form.ex:118 #, elixir-autogen, elixir-format msgid "Render in Lists" msgstr "Mostrar en listas" @@ -2237,6 +2266,7 @@ msgid "Run" msgstr "Ejecutar" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:340 +#: lib/bds/ui/settings_form.ex:203 #, elixir-autogen, elixir-format msgid "SSH Mode" msgstr "Modo SSH" @@ -2314,7 +2344,7 @@ msgstr "Las capacidades de scripts se configuran en la capa de aplicación en la #: lib/bds/desktop/shell_live/script_editor.ex:216 #: lib/bds/desktop/shell_live/script_editor.ex:219 #: lib/bds/desktop/shell_live/script_editor.ex:234 -#: lib/bds/tui.ex:1438 +#: lib/bds/tui.ex:1659 #: lib/bds/ui/registry.ex:38 #: lib/bds/ui/sidebar.ex:63 #: lib/bds/ui/sidebar.ex:115 @@ -2413,12 +2443,15 @@ msgid "Selected pairs dismissed" msgstr "Pares seleccionados descartados" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:324 +#: lib/bds/ui/settings_form.ex:78 +#: lib/bds/ui/settings_form.ex:189 #, elixir-autogen, elixir-format msgid "Semantic Similarity" msgstr "Similitud semántica" #: lib/bds/desktop/shell_live/settings_editor/project_settings.ex:60 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:11 +#: lib/bds/tui.ex:1661 #: lib/bds/ui/registry.ex:86 #: lib/bds/ui/registry.ex:101 #: lib/bds/ui/sidebar.ex:795 @@ -2442,9 +2475,9 @@ msgid "Site" msgstr "Sitio" #: lib/bds/desktop/shell_live/misc_editor.ex:412 -#: lib/bds/tui.ex:298 -#: lib/bds/tui.ex:300 -#: lib/bds/tui.ex:1209 +#: lib/bds/tui.ex:311 +#: lib/bds/tui.ex:313 +#: lib/bds/tui.ex:1417 #: lib/bds/ui/registry.ex:125 #, elixir-autogen, elixir-format msgid "Site Validation" @@ -2508,6 +2541,7 @@ msgstr "Detener" #: lib/bds/desktop/shell_live/settings_editor/style_editor.ex:76 #: lib/bds/desktop/shell_live/settings_editor_html/style_editor.html.heex:3 #: lib/bds/ui/registry.ex:102 +#: lib/bds/ui/settings_form.ex:241 #: lib/bds/ui/sidebar.ex:817 #, elixir-autogen, elixir-format msgid "Style" @@ -2534,6 +2568,7 @@ msgid "Syntax is valid" msgstr "La sintaxis es válida" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:301 +#: lib/bds/ui/settings_form.ex:147 #, elixir-autogen, elixir-format msgid "System Prompt" msgstr "Prompt del sistema" @@ -2565,7 +2600,7 @@ msgstr "Nombre de la etiqueta" #: lib/bds/desktop/shell_live/tags_editor.ex:222 #: lib/bds/desktop/shell_live/tags_editor.ex:253 #: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:11 -#: lib/bds/tui.ex:1439 +#: lib/bds/tui.ex:1660 #: lib/bds/ui/registry.ex:54 #: lib/bds/ui/registry.ex:103 #: lib/bds/ui/sidebar.ex:289 @@ -2577,12 +2612,13 @@ msgstr "Etiquetas" #: lib/bds/desktop/shell_live.ex:786 #: lib/bds/desktop/shell_live/panel_renderer.ex:54 -#: lib/bds/tui.ex:828 +#: lib/bds/tui.ex:985 #, elixir-autogen, elixir-format msgid "Tasks" msgstr "Tareas" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:321 +#: lib/bds/ui/settings_form.ex:186 #: lib/bds/ui/sidebar.ex:805 #, elixir-autogen, elixir-format msgid "Technology" @@ -2622,7 +2658,7 @@ msgstr "La sintaxis de la plantilla es válida" #: lib/bds/desktop/shell_live/template_editor.ex:171 #: lib/bds/desktop/shell_live/template_editor.ex:176 #: lib/bds/desktop/shell_live/template_editor.ex:191 -#: lib/bds/tui.ex:1437 +#: lib/bds/tui.ex:1658 #: lib/bds/ui/registry.ex:46 #: lib/bds/ui/sidebar.ex:71 #: lib/bds/ui/sidebar.ex:122 @@ -2668,6 +2704,7 @@ msgstr "Este elemento esta referenciado por:" #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:23 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:158 #: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:22 +#: lib/bds/ui/settings_form.ex:117 #, elixir-autogen, elixir-format msgid "Title" msgstr "Titulo" @@ -2845,7 +2882,7 @@ msgid "Updated URLs" msgstr "URLs actualizadas" #: lib/bds/desktop/menu_bar.ex:259 -#: lib/bds/tui.ex:1587 +#: lib/bds/tui.ex:1817 #, elixir-autogen, elixir-format msgid "Upload Site" msgstr "Subir sitio" @@ -2873,13 +2910,13 @@ msgid "Validate" msgstr "Validar" #: lib/bds/desktop/menu_bar.ex:258 -#: lib/bds/tui.ex:1565 +#: lib/bds/tui.ex:1795 #, elixir-autogen, elixir-format msgid "Validate Site" msgstr "Validar sitio" #: lib/bds/desktop/menu_bar.ex:253 -#: lib/bds/tui.ex:1578 +#: lib/bds/tui.ex:1808 #, elixir-autogen, elixir-format msgid "Validate Translations" msgstr "Validar traducciones" @@ -2923,6 +2960,7 @@ msgid "Working tree and history" msgstr "Árbol de trabajo e historial" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:138 +#: lib/bds/ui/settings_form.ex:97 #, elixir-autogen, elixir-format msgid "Wrap Long Lines" msgstr "Ajustar líneas largas" @@ -3281,6 +3319,7 @@ msgid "End-user guidance for editorial workflows, media, templates, translation, msgstr "Guía del usuario para flujos editoriales, medios, plantillas, traducción y publicación en bDS2." #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:86 +#: lib/bds/ui/settings_form.ex:62 #, elixir-autogen, elixir-format msgid "Image Import Concurrency" msgstr "Importación simultánea de imágenes" @@ -3350,15 +3389,15 @@ msgstr "Cambios" #: lib/bds/desktop/shell_live/git_handler.ex:46 #: lib/bds/desktop/shell_live/git_handler.ex:52 #: lib/bds/desktop/shell_live/sidebar_components.ex:556 -#: lib/bds/tui.ex:321 -#: lib/bds/tui.ex:327 -#: lib/bds/tui.ex:330 +#: lib/bds/tui.ex:334 +#: lib/bds/tui.ex:340 +#: lib/bds/tui.ex:343 #, elixir-autogen, elixir-format msgid "Commit" msgstr "Commit" #: lib/bds/desktop/shell_live/sidebar_components.ex:555 -#: lib/bds/tui.ex:1031 +#: lib/bds/tui.ex:1239 #, elixir-autogen, elixir-format msgid "Commit message" msgstr "Mensaje de commit" @@ -3382,6 +3421,7 @@ msgid "Fetch" msgstr "Obtener" #: lib/bds/desktop/shell_live/sidebar_components.ex:586 +#: lib/bds/tui.ex:1074 #, elixir-autogen, elixir-format msgid "History" msgstr "Historial" @@ -3429,7 +3469,7 @@ msgstr "Limpiar LFS" #: lib/bds/desktop/shell_live/git_handler.ex:17 #: lib/bds/desktop/shell_live/sidebar_components.ex:543 #: lib/bds/desktop/shell_live/sidebar_components.ex:543 -#: lib/bds/tui.ex:800 +#: lib/bds/tui.ex:957 #, elixir-autogen, elixir-format msgid "Pull" msgstr "Pull" @@ -3437,7 +3477,7 @@ msgstr "Pull" #: lib/bds/desktop/shell_live/git_handler.ex:18 #: lib/bds/desktop/shell_live/sidebar_components.ex:544 #: lib/bds/desktop/shell_live/sidebar_components.ex:544 -#: lib/bds/tui.ex:801 +#: lib/bds/tui.ex:958 #, elixir-autogen, elixir-format msgid "Push" msgstr "Push" @@ -3550,7 +3590,7 @@ msgid "Suggested tags" msgstr "Etiquetas sugeridas" #: lib/bds/desktop/menu_bar.ex:257 -#: lib/bds/tui.ex:1566 +#: lib/bds/tui.ex:1796 #, elixir-autogen, elixir-format msgid "Force Render Site" msgstr "Forzar la regeneración del sitio" @@ -3617,7 +3657,7 @@ msgstr "git pull" msgid "git push" msgstr "git push" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:159 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:112 #, elixir-autogen, elixir-format msgid "AI settings saved." msgstr "Configuración de IA guardada." @@ -3627,12 +3667,12 @@ msgstr "Configuración de IA guardada." msgid "Could not load models" msgstr "No se pudieron cargar los modelos" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:190 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:200 #, elixir-autogen, elixir-format msgid "Could not save AI settings" msgstr "No se pudo guardar la configuración de IA" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:184 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:194 #, elixir-autogen, elixir-format msgid "Loaded %{count} models." msgstr "%{count} modelos cargados." @@ -3642,87 +3682,88 @@ msgstr "%{count} modelos cargados." msgid "OK" msgstr "OK" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:174 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:184 #, elixir-autogen, elixir-format msgid "The endpoint returned no models. You can still type a model name manually." msgstr "El endpoint no devolvió ningún modelo. Aún puedes escribir el nombre de un modelo manualmente." -#: lib/bds/tui.ex:1524 +#: lib/bds/tui.ex:1754 #, elixir-autogen, elixir-format msgid "AI is unavailable in airplane mode without a local endpoint." msgstr "La IA no está disponible en modo avión sin un punto de conexión local." -#: lib/bds/tui.ex:1651 +#: lib/bds/tui.ex:1881 #, elixir-autogen, elixir-format msgid "Could not load this file." msgstr "No se pudo cargar este archivo." -#: lib/bds/tui.ex:230 +#: lib/bds/tui.ex:243 #, elixir-autogen, elixir-format msgid "Editing this item is not available in the terminal UI yet." msgstr "La edición de este elemento aún no está disponible en la interfaz de terminal." -#: lib/bds/tui.ex:783 +#: lib/bds/tui.ex:940 #, elixir-autogen, elixir-format msgid "No suggestions returned." msgstr "No se recibieron sugerencias." -#: lib/bds/tui.ex:1648 +#: lib/bds/tui.ex:1878 #, elixir-autogen, elixir-format msgid "Only images can be previewed." msgstr "Solo se pueden previsualizar imágenes." -#: lib/bds/tui.ex:1447 +#: lib/bds/tui.ex:1671 #, elixir-autogen, elixir-format msgid "Post not found." msgstr "Entrada no encontrada." -#: lib/bds/tui.ex:969 +#: lib/bds/tui.ex:1174 #, elixir-autogen, elixir-format msgid "Press enter to preview %{name}." msgstr "Pulsa Intro para previsualizar %{name}." -#: lib/bds/tui.ex:1494 +#: lib/bds/tui.ex:1724 #, elixir-autogen, elixir-format msgid "Published." msgstr "Publicado." -#: lib/bds/tui.ex:1510 +#: lib/bds/tui.ex:1740 #, elixir-autogen, elixir-format msgid "Save before switching languages." msgstr "Guarda antes de cambiar de idioma." -#: lib/bds/tui.ex:1495 +#: lib/bds/tui.ex:524 +#: lib/bds/tui.ex:1725 #, elixir-autogen, elixir-format msgid "Saved." msgstr "Guardado." -#: lib/bds/tui.ex:972 +#: lib/bds/tui.ex:1177 #, elixir-autogen, elixir-format msgid "Select an entry and press enter to open it." msgstr "Selecciona una entrada y pulsa Intro para abrirla." -#: lib/bds/tui.ex:780 +#: lib/bds/tui.ex:937 #, elixir-autogen, elixir-format msgid "Suggestions applied." msgstr "Sugerencias aplicadas." -#: lib/bds/tui.ex:984 +#: lib/bds/tui.ex:1189 #, elixir-autogen, elixir-format msgid "Title (ctrl+t to edit)" msgstr "Título (ctrl+t para editar)" -#: lib/bds/tui.ex:983 +#: lib/bds/tui.ex:1188 #, elixir-autogen, elixir-format msgid "Title (editing — enter to confirm)" msgstr "Título (edición — Intro para confirmar)" -#: lib/bds/tui.ex:1033 +#: lib/bds/tui.ex:1241 #, elixir-autogen, elixir-format msgid "Working…" msgstr "Procesando…" -#: lib/bds/tui.ex:1055 +#: lib/bds/tui.ex:1263 #, elixir-autogen, elixir-format msgid "esc to close" msgstr "esc para cerrar" @@ -3759,158 +3800,263 @@ msgstr "Dirección del servidor (user@host o user@host:port), autenticación de msgid "Use the form user@host or user@host:port." msgstr "Usa el formato user@host o user@host:port." -#: lib/bds/tui.ex:1003 +#: lib/bds/tui.ex:1208 #, elixir-autogen, elixir-format msgid "Preview (ctrl+e to edit)" msgstr "Vista previa (ctrl+e para editar)" -#: lib/bds/tui.ex:1305 +#: lib/bds/tui.ex:1520 #, elixir-autogen, elixir-format msgid "ctrl+s save · ctrl+p publish · ctrl+e preview · ctrl+t title · ctrl+l language · ctrl+g AI · esc back" msgstr "ctrl+s guardar · ctrl+p publicar · ctrl+e vista previa · ctrl+t título · ctrl+l idioma · ctrl+g IA · esc volver" -#: lib/bds/tui.ex:828 +#: lib/bds/tui.ex:985 #, elixir-autogen, elixir-format msgid "All tasks finished." msgstr "Todas las tareas han terminado." -#: lib/bds/tui.ex:1081 +#: lib/bds/tui.ex:1289 #, elixir-autogen, elixir-format msgid "Commands — esc to close" msgstr "Comandos — esc para cerrar" -#: lib/bds/tui.ex:654 +#: lib/bds/tui.ex:814 #, elixir-autogen, elixir-format msgid "Unknown command." msgstr "Comando desconocido." -#: lib/bds/tui.ex:1071 +#: lib/bds/tui.ex:1279 #, elixir-autogen, elixir-format msgid "[report/apply in GUI]" msgstr "[informe/aplicación en la GUI]" -#: lib/bds/tui.ex:1220 +#: lib/bds/tui.ex:1428 #, elixir-autogen, elixir-format msgid "%{diffs} differences · %{orphans} orphan files" msgstr "%{diffs} diferencias · %{orphans} archivos huérfanos" -#: lib/bds/tui.ex:1252 +#: lib/bds/tui.ex:1460 #, elixir-autogen, elixir-format msgid "Expected %{expected} · Existing %{existing}" msgstr "Esperados %{expected} · Existentes %{existing}" -#: lib/bds/tui.ex:1269 +#: lib/bds/tui.ex:1477 #, elixir-autogen, elixir-format msgid "Extra files (will be removed):" msgstr "Archivos sobrantes (se eliminarán):" -#: lib/bds/tui.ex:1265 +#: lib/bds/tui.ex:1473 #, elixir-autogen, elixir-format msgid "Missing pages (will be rendered):" msgstr "Páginas faltantes (se generarán):" -#: lib/bds/tui.ex:298 +#: lib/bds/tui.ex:311 #, elixir-autogen, elixir-format msgid "Nothing to apply." msgstr "Nada que aplicar." -#: lib/bds/tui.ex:265 +#: lib/bds/tui.ex:278 #, elixir-autogen, elixir-format msgid "Nothing to repair." msgstr "Nada que reparar." -#: lib/bds/tui.ex:1243 +#: lib/bds/tui.ex:1451 #, elixir-autogen, elixir-format msgid "Orphan files (not in database):" msgstr "Archivos huérfanos (no están en la base de datos):" -#: lib/bds/tui.ex:1259 +#: lib/bds/tui.ex:1467 #, elixir-autogen, elixir-format msgid "Sitemap changed." msgstr "Sitemap modificado." -#: lib/bds/tui.ex:1273 +#: lib/bds/tui.ex:1481 #, elixir-autogen, elixir-format msgid "Updated posts (will be re-rendered):" msgstr "Entradas actualizadas (se volverán a generar):" -#: lib/bds/tui.ex:1210 +#: lib/bds/tui.ex:1418 #, elixir-autogen, elixir-format msgid "enter apply changes · esc close" msgstr "intro aplicar cambios · esc cerrar" -#: lib/bds/tui.ex:1205 +#: lib/bds/tui.ex:1413 #, elixir-autogen, elixir-format msgid "enter repair all from files · esc close" msgstr "intro reparar todo desde archivos · esc cerrar" -#: lib/bds/tui.ex:619 +#: lib/bds/tui.ex:779 #, elixir-autogen, elixir-format msgid "Imported Blog" msgstr "Blog importado" -#: lib/bds/tui.ex:638 +#: lib/bds/tui.ex:798 #, elixir-autogen, elixir-format msgid "Not a folder: %{path}" msgstr "No es una carpeta: %{path}" -#: lib/bds/tui.ex:1147 +#: lib/bds/tui.ex:1355 #, elixir-autogen, elixir-format msgid "Projects — enter switch · o open existing · esc close" msgstr "Proyectos — intro cambiar · o abrir existente · esc cerrar" -#: lib/bds/tui.ex:546 +#: lib/bds/tui.ex:706 #, elixir-autogen, elixir-format msgid "Switched to %{name}." msgstr "Cambiado a %{name}." -#: lib/bds/tui.ex:1175 +#: lib/bds/tui.ex:1383 #, elixir-autogen, elixir-format msgid "Matching folders" msgstr "Carpetas coincidentes" -#: lib/bds/tui.ex:1113 +#: lib/bds/tui.ex:1321 #, elixir-autogen, elixir-format msgid "Open Existing Blog — type a folder path · tab complete · enter open · esc back" msgstr "Abrir blog existente — escribe la ruta de una carpeta · tab completar · intro abrir · esc volver" -#: lib/bds/tui.ex:1298 -#, elixir-autogen, elixir-format -msgid "enter open · n new post · 1-5 views · p projects · / search · : commands (:? help) · r refresh · ctrl+q quit" -msgstr "intro abrir · n nueva entrada · 1-5 vistas · p proyectos · / buscar · : comandos (:? ayuda) · r actualizar · ctrl+q salir" - -#: lib/bds/tui.ex:321 +#: lib/bds/tui.ex:334 #, elixir-autogen, elixir-format msgid "Commit message required." msgstr "Se requiere un mensaje de commit." -#: lib/bds/tui.ex:327 +#: lib/bds/tui.ex:340 #, elixir-autogen, elixir-format msgid "Committed." msgstr "Commit realizado." -#: lib/bds/tui.ex:960 +#: lib/bds/tui.ex:1165 #, elixir-autogen, elixir-format msgid "Diff (pgup/pgdn scroll)" msgstr "Diff (pgup/pgdn para desplazar)" -#: lib/bds/tui.ex:1333 +#: lib/bds/tui.ex:1548 #, elixir-autogen, elixir-format msgid "No changes." msgstr "Sin cambios." -#: lib/bds/tui.ex:387 +#: lib/bds/tui.ex:400 #, elixir-autogen, elixir-format msgid "No diff for this file." msgstr "No hay diff para este archivo." -#: lib/bds/tui.ex:375 -#: lib/bds/tui.ex:947 +#: lib/bds/tui.ex:388 +#: lib/bds/tui.ex:1152 #, elixir-autogen, elixir-format msgid "Not a git repository." msgstr "No es un repositorio git." -#: lib/bds/tui.ex:1291 +#: lib/bds/ui/settings_form.ex:73 #, elixir-autogen, elixir-format -msgid "c commit · u pull · s push · enter jump to file · pgup/pgdn scroll diff · 1-5 views · ctrl+q quit" -msgstr "c commit · u pull · s push · intro ir al archivo · pgup/pgdn desplazar el diff · 1-5 vistas · ctrl+q salir" +msgid "Blog Languages (comma-separated)" +msgstr "Idiomas del blog (separados por comas)" + +#: lib/bds/ui/settings_form.ex:215 +#, elixir-autogen, elixir-format +msgid "Data Folder" +msgstr "Carpeta de datos" + +#: lib/bds/ui/settings_form.ex:218 +#, elixir-autogen, elixir-format +msgid "Maintenance" +msgstr "Mantenimiento" + +#: lib/bds/ui/settings_form.ex:45 +#, elixir-autogen, elixir-format +msgid "Name" +msgstr "Nombre" + +#: lib/bds/ui/settings_form.ex:138 +#, elixir-autogen, elixir-format +msgid "New Category" +msgstr "Nueva categoría" + +#: lib/bds/ui/settings_form.ex:170 +#, elixir-autogen, elixir-format +msgid "Offline Chat Disable Reasoning" +msgstr "Chat sin conexión: desactivar el razonamiento" + +#: lib/bds/ui/settings_form.ex:167 +#, elixir-autogen, elixir-format +msgid "Offline Chat Tool Calls" +msgstr "Chat sin conexión: llamadas a herramientas" + +#: lib/bds/ui/settings_form.ex:176 +#, elixir-autogen, elixir-format +msgid "Offline Image Model" +msgstr "Modelo de imágenes sin conexión" + +#: lib/bds/ui/settings_form.ex:154 +#, elixir-autogen, elixir-format +msgid "Online Chat Disable Reasoning" +msgstr "Chat en línea: desactivar el razonamiento" + +#: lib/bds/ui/settings_form.ex:151 +#, elixir-autogen, elixir-format +msgid "Online Chat Tool Calls" +msgstr "Chat en línea: llamadas a herramientas" + +#: lib/bds/ui/settings_form.ex:160 +#, elixir-autogen, elixir-format +msgid "Online Image Model" +msgstr "Modelo de imágenes en línea" + +#: lib/bds/ui/settings_form.ex:57 +#, elixir-autogen, elixir-format +msgid "Posts per Page" +msgstr "Publicaciones por página" + +#: lib/bds/ui/settings_form.ex:219 +#, elixir-autogen, elixir-format +msgid "Rebuild and maintenance commands are available under the : prompt." +msgstr "Los comandos de reconstrucción y mantenimiento están disponibles mediante el prompt :." + +#: lib/bds/ui/settings_form.ex:200 +#, elixir-autogen, elixir-format +msgid "SSH Host" +msgstr "Host SSH" + +#: lib/bds/ui/settings_form.ex:202 +#, elixir-autogen, elixir-format +msgid "SSH Remote Path" +msgstr "Ruta remota SSH" + +#: lib/bds/ui/settings_form.ex:201 +#, elixir-autogen, elixir-format +msgid "SSH User" +msgstr "Usuario SSH" + +#: lib/bds/ui/settings_form.ex:119 +#, elixir-autogen, elixir-format +msgid "Show Title" +msgstr "Mostrar título" + +#: lib/bds/ui/settings_form.ex:242 +#, elixir-autogen, elixir-format +msgid "Theme" +msgstr "Tema" + +#: lib/bds/tui.ex:1136 +#, elixir-autogen, elixir-format +msgid "enter edit · ctrl+s save · esc close" +msgstr "intro editar · ctrl+s guardar · esc cerrar" + +#: lib/bds/tui.ex:1499 +#, elixir-autogen, elixir-format +msgid "enter edit/toggle/cycle · ctrl+s save · esc close · ctrl+q quit" +msgstr "intro editar/alternar/ciclar · ctrl+s guardar · esc cerrar · ctrl+q salir" + +#: lib/bds/ui/settings_form.ex:230 +#, elixir-autogen, elixir-format +msgid "not supported yet" +msgstr "aún no compatible" + +#: lib/bds/tui.ex:1506 +#, elixir-autogen, elixir-format +msgid "c commit · u pull · s push · enter jump to file · pgup/pgdn scroll diff · 1-7 views · ctrl+q quit" +msgstr "c commit · u pull · s push · intro ir al archivo · pgup/pgdn desplazar el diff · 1-7 vistas · ctrl+q salir" + +#: lib/bds/tui.ex:1513 +#, elixir-autogen, elixir-format +msgid "enter open · n new post · 1-7 views · p projects · / search · : commands (:? help) · r refresh · ctrl+q quit" +msgstr "intro abrir · n nueva entrada · 1-7 vistas · p proyectos · / buscar · : comandos (:? ayuda) · r actualizar · ctrl+q salir" diff --git a/priv/gettext/fr/LC_MESSAGES/ui.po b/priv/gettext/fr/LC_MESSAGES/ui.po index 36d3734..664944e 100644 --- a/priv/gettext/fr/LC_MESSAGES/ui.po +++ b/priv/gettext/fr/LC_MESSAGES/ui.po @@ -59,6 +59,7 @@ msgid "--" msgstr "--" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:220 +#: lib/bds/ui/settings_form.ex:145 #: lib/bds/ui/sidebar.ex:802 #, elixir-autogen, elixir-format msgid "AI" @@ -71,8 +72,8 @@ msgid "AI Assistant" msgstr "Assistant IA" #: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:93 -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:193 -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:211 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:203 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:221 #, elixir-autogen, elixir-format msgid "AI Settings" msgstr "Paramètres IA" @@ -81,11 +82,11 @@ msgstr "Paramètres IA" #: lib/bds/desktop/shell_live/overlay_manager.ex:72 #: lib/bds/desktop/shell_live/post_editor.ex:920 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43 -#: lib/bds/tui.ex:780 -#: lib/bds/tui.ex:783 -#: lib/bds/tui.ex:786 -#: lib/bds/tui.ex:794 -#: lib/bds/tui.ex:1523 +#: lib/bds/tui.ex:937 +#: lib/bds/tui.ex:940 +#: lib/bds/tui.ex:943 +#: lib/bds/tui.ex:951 +#: lib/bds/tui.ex:1753 #, elixir-autogen, elixir-format msgid "AI Suggestions" msgstr "Suggestions IA" @@ -163,6 +164,7 @@ msgid "Agent configuration files for the built-in bDS MCP server" msgstr "Fichiers de configuration d’agent pour le serveur MCP bDS intégré" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:273 +#: lib/bds/ui/settings_form.ex:146 #, elixir-autogen, elixir-format msgid "Airplane Mode" msgstr "Mode avion" @@ -414,6 +416,7 @@ msgid "Blogmark Bookmarklet" msgstr "Bookmarklet blogmark" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:90 +#: lib/bds/ui/settings_form.ex:67 #, elixir-autogen, elixir-format msgid "Blogmark Category" msgstr "Catégorie de blogmark" @@ -572,7 +575,7 @@ msgid "Collapse unchanged diff hunks" msgstr "Réduire les blocs de diff inchangés" #: lib/bds/desktop/shell_live/overlay_manager.ex:422 -#: lib/bds/tui.ex:1619 +#: lib/bds/tui.ex:1849 #, elixir-autogen, elixir-format msgid "Command completed" msgstr "Commande terminée" @@ -590,7 +593,8 @@ msgstr "Confirmer" #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:375 #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:34 #: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:32 -#: lib/bds/tui.ex:1014 +#: lib/bds/tui.ex:1219 +#: lib/bds/ui/settings_form.ex:137 #: lib/bds/ui/sidebar.ex:801 #, elixir-autogen, elixir-format msgid "Content" @@ -678,6 +682,7 @@ msgstr "Sombre" msgid "Dashboard" msgstr "Tableau de bord" +#: lib/bds/ui/settings_form.ex:214 #: lib/bds/ui/sidebar.ex:815 #, elixir-autogen, elixir-format msgid "Data" @@ -706,11 +711,13 @@ msgid "Default" msgstr "Par défaut" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:78 +#: lib/bds/ui/settings_form.ex:54 #, elixir-autogen, elixir-format msgid "Default Author" msgstr "Auteur par défaut" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:119 +#: lib/bds/ui/settings_form.ex:88 #, elixir-autogen, elixir-format msgid "Default Editor Mode" msgstr "Mode d’édition par défaut" @@ -776,6 +783,7 @@ msgid "Deployment credentials for upload tasks" msgstr "Identifiants de déploiement pour les tâches d’envoi" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:38 +#: lib/bds/ui/settings_form.ex:46 #, elixir-autogen, elixir-format msgid "Description" msgstr "Description" @@ -798,6 +806,7 @@ msgid "Detect Language" msgstr "Détecter la langue" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:129 +#: lib/bds/ui/settings_form.ex:93 #, elixir-autogen, elixir-format msgid "Diff View Style" msgstr "Style de vue diff" @@ -913,6 +922,7 @@ msgstr "Modifier la traduction" #: lib/bds/desktop/shell_live/index.html.heex:513 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:114 +#: lib/bds/ui/settings_form.ex:87 #: lib/bds/ui/sidebar.ex:800 #, elixir-autogen, elixir-format msgid "Editor" @@ -1030,7 +1040,7 @@ msgid "Filename" msgstr "Nom de fichier" #: lib/bds/desktop/menu_bar.ex:254 -#: lib/bds/tui.ex:1583 +#: lib/bds/tui.ex:1813 #, elixir-autogen, elixir-format msgid "Fill Missing Translations" msgstr "Compléter les traductions manquantes" @@ -1041,7 +1051,7 @@ msgid "Find" msgstr "Rechercher" #: lib/bds/desktop/menu_bar.ex:255 -#: lib/bds/tui.ex:1586 +#: lib/bds/tui.ex:1816 #, elixir-autogen, elixir-format msgid "Find Duplicate Posts" msgstr "Trouver les doublons" @@ -1068,14 +1078,14 @@ msgid "Gallery" msgstr "Galerie" #: lib/bds/desktop/menu_bar.ex:256 -#: lib/bds/tui.ex:1567 +#: lib/bds/tui.ex:1797 #, elixir-autogen, elixir-format msgid "Generate Site" msgstr "Générer le site" #: lib/bds/desktop/shell_live.ex:792 #: lib/bds/desktop/shell_live/socket_state.ex:109 -#: lib/bds/tui.ex:1440 +#: lib/bds/tui.ex:1662 #: lib/bds/ui/sidebar.ex:826 #, elixir-autogen, elixir-format msgid "Git" @@ -1100,6 +1110,7 @@ msgid "Help" msgstr "Aide" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:142 +#: lib/bds/ui/settings_form.ex:100 #, elixir-autogen, elixir-format msgid "Hide Unchanged Regions" msgstr "Masquer les zones inchangées" @@ -1321,6 +1332,7 @@ msgid "Links To" msgstr "Liens vers" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:162 +#: lib/bds/ui/settings_form.ex:128 #, elixir-autogen, elixir-format msgid "List Template" msgstr "Modèle de liste" @@ -1333,6 +1345,7 @@ msgstr "Charger plus" #: lib/bds/desktop/shell_live/settings_editor/mcp_config.ex:50 #: lib/bds/desktop/shell_live/settings_editor/mcp_config.ex:57 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:351 +#: lib/bds/ui/settings_form.ex:234 #: lib/bds/ui/sidebar.ex:816 #, elixir-autogen, elixir-format msgid "MCP" @@ -1350,6 +1363,7 @@ msgstr "Macros (%{count})" #: lib/bds/desktop/shell_data.ex:103 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:55 +#: lib/bds/ui/settings_form.ex:50 #, elixir-autogen, elixir-format msgid "Main Language" msgstr "Langue principale" @@ -1390,9 +1404,9 @@ msgstr "Nombre maximal d’articles par page" #: lib/bds/desktop/shell_live/misc_editor.ex:762 #: lib/bds/desktop/shell_live/sidebar_components.ex:654 #: lib/bds/desktop/shell_live/sidebar_delete.ex:175 -#: lib/bds/tui.ex:1436 -#: lib/bds/tui.ex:1648 -#: lib/bds/tui.ex:1651 +#: lib/bds/tui.ex:1657 +#: lib/bds/tui.ex:1878 +#: lib/bds/tui.ex:1881 #: lib/bds/ui/registry.ex:30 #: lib/bds/ui/registry.ex:100 #: lib/bds/ui/sidebar.ex:578 @@ -1435,11 +1449,11 @@ msgstr "Métadonnées" #: lib/bds/desktop/shell_live/misc_editor.ex:214 #: lib/bds/desktop/shell_live/misc_editor.ex:226 #: lib/bds/desktop/shell_live/misc_editor.ex:448 -#: lib/bds/tui.ex:265 -#: lib/bds/tui.ex:271 -#: lib/bds/tui.ex:282 -#: lib/bds/tui.ex:1204 -#: lib/bds/tui.ex:1564 +#: lib/bds/tui.ex:278 +#: lib/bds/tui.ex:284 +#: lib/bds/tui.ex:295 +#: lib/bds/tui.ex:1412 +#: lib/bds/tui.ex:1794 #: lib/bds/ui/registry.ex:111 #, elixir-autogen, elixir-format msgid "Metadata Diff" @@ -1485,7 +1499,7 @@ msgstr "Nouvelle page" #: lib/bds/desktop/menu_bar.ex:214 #: lib/bds/desktop/shell_live/sidebar_create.ex:41 -#: lib/bds/tui.ex:221 +#: lib/bds/tui.ex:232 #, elixir-autogen, elixir-format msgid "New Post" msgstr "Nouvel article" @@ -1671,11 +1685,13 @@ msgid "Offline" msgstr "Hors ligne" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:269 +#: lib/bds/ui/settings_form.ex:165 #, elixir-autogen, elixir-format msgid "Offline API Key" msgstr "Clé API hors ligne" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:277 +#: lib/bds/ui/settings_form.ex:166 #, elixir-autogen, elixir-format msgid "Offline Chat Model" msgstr "Modèle de chat hors ligne" @@ -1691,6 +1707,7 @@ msgid "Offline Chat Tools" msgstr "Outils du chat hors ligne" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:260 +#: lib/bds/ui/settings_form.ex:164 #, elixir-autogen, elixir-format msgid "Offline Endpoint URL" msgstr "URL du point d'accès hors ligne" @@ -1701,21 +1718,25 @@ msgid "Offline Image Analysis Model" msgstr "Modèle d’analyse d’image hors ligne" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:297 +#: lib/bds/ui/settings_form.ex:179 #, elixir-autogen, elixir-format msgid "Offline Image Support" msgstr "Support d'images hors ligne" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:289 +#: lib/bds/ui/settings_form.ex:173 #, elixir-autogen, elixir-format msgid "Offline Title Model" msgstr "Modèle de titre hors ligne" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:232 +#: lib/bds/ui/settings_form.ex:149 #, elixir-autogen, elixir-format msgid "Online API Key" msgstr "Clé API en ligne" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:236 +#: lib/bds/ui/settings_form.ex:150 #, elixir-autogen, elixir-format msgid "Online Chat Model" msgstr "Modèle de chat en ligne" @@ -1731,6 +1752,7 @@ msgid "Online Chat Tools" msgstr "Outils du chat en ligne" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:223 +#: lib/bds/ui/settings_form.ex:148 #, elixir-autogen, elixir-format msgid "Online Endpoint URL" msgstr "URL du point d'accès en ligne" @@ -1741,11 +1763,13 @@ msgid "Online Image Analysis Model" msgstr "Modèle d'analyse d'images en ligne" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:256 +#: lib/bds/ui/settings_form.ex:163 #, elixir-autogen, elixir-format msgid "Online Image Support" msgstr "Support d'images en ligne" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:248 +#: lib/bds/ui/settings_form.ex:157 #, elixir-autogen, elixir-format msgid "Online Title Model" msgstr "Modèle de titres en ligne" @@ -1763,8 +1787,8 @@ msgid "Open Data Folder" msgstr "Ouvrir le dossier de données" #: lib/bds/desktop/shell_live/index.html.heex:644 -#: lib/bds/tui.ex:632 -#: lib/bds/tui.ex:637 +#: lib/bds/tui.ex:792 +#: lib/bds/tui.ex:797 #, elixir-autogen, elixir-format msgid "Open Existing Blog" msgstr "Ouvrir un blog existant" @@ -1776,7 +1800,7 @@ msgid "Open Settings" msgstr "Ouvrir les Réglages" #: lib/bds/desktop/menu_bar.ex:217 -#: lib/bds/tui.ex:1588 +#: lib/bds/tui.ex:1818 #, elixir-autogen, elixir-format msgid "Open in Browser" msgstr "Ouvrir dans le navigateur" @@ -1902,6 +1926,7 @@ msgid "Post Slug Conflicts" msgstr "Conflits de slug d’article" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:161 +#: lib/bds/ui/settings_form.ex:122 #, elixir-autogen, elixir-format msgid "Post Template" msgstr "Modèle d’article" @@ -1924,8 +1949,8 @@ msgstr "Article enregistré" #: lib/bds/desktop/menu_bar.ex:233 #: lib/bds/desktop/shell_live/misc_editor.ex:664 #: lib/bds/desktop/shell_live/misc_editor.ex:761 -#: lib/bds/tui.ex:1435 -#: lib/bds/tui.ex:1447 +#: lib/bds/tui.ex:1656 +#: lib/bds/tui.ex:1671 #: lib/bds/ui/registry.ex:14 #: lib/bds/ui/sidebar.ex:271 #, elixir-autogen, elixir-format @@ -1967,6 +1992,7 @@ msgstr "Aperçu non disponible" #: lib/bds/desktop/shell_live/misc_editor.ex:739 #: lib/bds/desktop/shell_live/misc_editor.ex:765 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:27 +#: lib/bds/ui/settings_form.ex:44 #: lib/bds/ui/sidebar.ex:799 #, elixir-autogen, elixir-format msgid "Project" @@ -1984,8 +2010,8 @@ msgstr "Projet et publication" #: lib/bds/desktop/shell_live/chat_surface.ex:15 #: lib/bds/desktop/shell_live/index.html.heex:623 -#: lib/bds/tui.ex:545 -#: lib/bds/tui.ex:550 +#: lib/bds/tui.ex:705 +#: lib/bds/tui.ex:710 #, elixir-autogen, elixir-format msgid "Projects" msgstr "Projets" @@ -1996,6 +2022,7 @@ msgid "Protected categories cannot be removed" msgstr "Les catégories protégées ne peuvent pas être supprimées" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:51 +#: lib/bds/ui/settings_form.ex:47 #, elixir-autogen, elixir-format msgid "Public URL" msgstr "URL publique" @@ -2029,6 +2056,7 @@ msgstr "Traduction publiée avec contenu encore en base au lieu du système de f #: lib/bds/desktop/shell_live/settings_editor/publishing_settings.ex:40 #: lib/bds/desktop/shell_live/settings_editor/publishing_settings.ex:57 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:338 +#: lib/bds/ui/settings_form.ex:199 #: lib/bds/ui/sidebar.ex:811 #, elixir-autogen, elixir-format msgid "Publishing" @@ -2051,15 +2079,15 @@ msgid "Ready to import:" msgstr "Prêt à importer :" #: lib/bds/desktop/menu_bar.ex:248 -#: lib/bds/tui.ex:629 -#: lib/bds/tui.ex:1568 +#: lib/bds/tui.ex:789 +#: lib/bds/tui.ex:1798 #, elixir-autogen, elixir-format msgid "Rebuild Database" msgstr "Reconstruire la base de données" #: lib/bds/desktop/menu_bar.ex:250 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:381 -#: lib/bds/tui.ex:1572 +#: lib/bds/tui.ex:1802 #, elixir-autogen, elixir-format msgid "Rebuild Embedding Index" msgstr "Reconstruire l’index d’embeddings" @@ -2117,7 +2145,7 @@ msgid "Refresh Translation" msgstr "Actualiser la traduction" #: lib/bds/desktop/menu_bar.ex:252 -#: lib/bds/tui.ex:1575 +#: lib/bds/tui.ex:1805 #, elixir-autogen, elixir-format msgid "Regenerate Calendar" msgstr "Régénérer le calendrier" @@ -2128,7 +2156,7 @@ msgid "Regenerate Missing Thumbnails" msgstr "Régénérer les vignettes manquantes" #: lib/bds/desktop/menu_bar.ex:249 -#: lib/bds/tui.ex:1569 +#: lib/bds/tui.ex:1799 #, elixir-autogen, elixir-format msgid "Reindex Text" msgstr "Réindexer le texte" @@ -2160,6 +2188,7 @@ msgid "Remove tag" msgstr "Supprimer le mot-clé" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:159 +#: lib/bds/ui/settings_form.ex:118 #, elixir-autogen, elixir-format msgid "Render in Lists" msgstr "Afficher dans les listes" @@ -2237,6 +2266,7 @@ msgid "Run" msgstr "Exécuter" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:340 +#: lib/bds/ui/settings_form.ex:203 #, elixir-autogen, elixir-format msgid "SSH Mode" msgstr "Mode SSH" @@ -2314,7 +2344,7 @@ msgstr "Les capacités de script sont configurées au niveau de l’application #: lib/bds/desktop/shell_live/script_editor.ex:216 #: lib/bds/desktop/shell_live/script_editor.ex:219 #: lib/bds/desktop/shell_live/script_editor.ex:234 -#: lib/bds/tui.ex:1438 +#: lib/bds/tui.ex:1659 #: lib/bds/ui/registry.ex:38 #: lib/bds/ui/sidebar.ex:63 #: lib/bds/ui/sidebar.ex:115 @@ -2413,12 +2443,15 @@ msgid "Selected pairs dismissed" msgstr "Paires sélectionnées ignorées" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:324 +#: lib/bds/ui/settings_form.ex:78 +#: lib/bds/ui/settings_form.ex:189 #, elixir-autogen, elixir-format msgid "Semantic Similarity" msgstr "Similarité sémantique" #: lib/bds/desktop/shell_live/settings_editor/project_settings.ex:60 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:11 +#: lib/bds/tui.ex:1661 #: lib/bds/ui/registry.ex:86 #: lib/bds/ui/registry.ex:101 #: lib/bds/ui/sidebar.ex:795 @@ -2442,9 +2475,9 @@ msgid "Site" msgstr "Site" #: lib/bds/desktop/shell_live/misc_editor.ex:412 -#: lib/bds/tui.ex:298 -#: lib/bds/tui.ex:300 -#: lib/bds/tui.ex:1209 +#: lib/bds/tui.ex:311 +#: lib/bds/tui.ex:313 +#: lib/bds/tui.ex:1417 #: lib/bds/ui/registry.ex:125 #, elixir-autogen, elixir-format msgid "Site Validation" @@ -2508,6 +2541,7 @@ msgstr "Arrêter" #: lib/bds/desktop/shell_live/settings_editor/style_editor.ex:76 #: lib/bds/desktop/shell_live/settings_editor_html/style_editor.html.heex:3 #: lib/bds/ui/registry.ex:102 +#: lib/bds/ui/settings_form.ex:241 #: lib/bds/ui/sidebar.ex:817 #, elixir-autogen, elixir-format msgid "Style" @@ -2534,6 +2568,7 @@ msgid "Syntax is valid" msgstr "La syntaxe est valide" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:301 +#: lib/bds/ui/settings_form.ex:147 #, elixir-autogen, elixir-format msgid "System Prompt" msgstr "Prompt système" @@ -2565,7 +2600,7 @@ msgstr "Nom du mot-clé" #: lib/bds/desktop/shell_live/tags_editor.ex:222 #: lib/bds/desktop/shell_live/tags_editor.ex:253 #: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:11 -#: lib/bds/tui.ex:1439 +#: lib/bds/tui.ex:1660 #: lib/bds/ui/registry.ex:54 #: lib/bds/ui/registry.ex:103 #: lib/bds/ui/sidebar.ex:289 @@ -2577,12 +2612,13 @@ msgstr "Tags" #: lib/bds/desktop/shell_live.ex:786 #: lib/bds/desktop/shell_live/panel_renderer.ex:54 -#: lib/bds/tui.ex:828 +#: lib/bds/tui.ex:985 #, elixir-autogen, elixir-format msgid "Tasks" msgstr "Tâches" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:321 +#: lib/bds/ui/settings_form.ex:186 #: lib/bds/ui/sidebar.ex:805 #, elixir-autogen, elixir-format msgid "Technology" @@ -2622,7 +2658,7 @@ msgstr "La syntaxe du template est valide" #: lib/bds/desktop/shell_live/template_editor.ex:171 #: lib/bds/desktop/shell_live/template_editor.ex:176 #: lib/bds/desktop/shell_live/template_editor.ex:191 -#: lib/bds/tui.ex:1437 +#: lib/bds/tui.ex:1658 #: lib/bds/ui/registry.ex:46 #: lib/bds/ui/sidebar.ex:71 #: lib/bds/ui/sidebar.ex:122 @@ -2668,6 +2704,7 @@ msgstr "Cet element est reference par :" #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:23 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:158 #: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:22 +#: lib/bds/ui/settings_form.ex:117 #, elixir-autogen, elixir-format msgid "Title" msgstr "Titre" @@ -2845,7 +2882,7 @@ msgid "Updated URLs" msgstr "URLs mises à jour" #: lib/bds/desktop/menu_bar.ex:259 -#: lib/bds/tui.ex:1587 +#: lib/bds/tui.ex:1817 #, elixir-autogen, elixir-format msgid "Upload Site" msgstr "Téléverser le site" @@ -2873,13 +2910,13 @@ msgid "Validate" msgstr "Valider" #: lib/bds/desktop/menu_bar.ex:258 -#: lib/bds/tui.ex:1565 +#: lib/bds/tui.ex:1795 #, elixir-autogen, elixir-format msgid "Validate Site" msgstr "Valider le site" #: lib/bds/desktop/menu_bar.ex:253 -#: lib/bds/tui.ex:1578 +#: lib/bds/tui.ex:1808 #, elixir-autogen, elixir-format msgid "Validate Translations" msgstr "Valider les traductions" @@ -2923,6 +2960,7 @@ msgid "Working tree and history" msgstr "Arbre de travail et historique" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:138 +#: lib/bds/ui/settings_form.ex:97 #, elixir-autogen, elixir-format msgid "Wrap Long Lines" msgstr "Renvoyer les longues lignes" @@ -3281,6 +3319,7 @@ msgid "End-user guidance for editorial workflows, media, templates, translation, msgstr "Guide utilisateur pour les flux éditoriaux, médias, modèles, traduction et publication dans bDS2." #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:86 +#: lib/bds/ui/settings_form.ex:62 #, elixir-autogen, elixir-format msgid "Image Import Concurrency" msgstr "Importation simultanée d'images" @@ -3350,15 +3389,15 @@ msgstr "Modifications" #: lib/bds/desktop/shell_live/git_handler.ex:46 #: lib/bds/desktop/shell_live/git_handler.ex:52 #: lib/bds/desktop/shell_live/sidebar_components.ex:556 -#: lib/bds/tui.ex:321 -#: lib/bds/tui.ex:327 -#: lib/bds/tui.ex:330 +#: lib/bds/tui.ex:334 +#: lib/bds/tui.ex:340 +#: lib/bds/tui.ex:343 #, elixir-autogen, elixir-format msgid "Commit" msgstr "Commit" #: lib/bds/desktop/shell_live/sidebar_components.ex:555 -#: lib/bds/tui.ex:1031 +#: lib/bds/tui.ex:1239 #, elixir-autogen, elixir-format msgid "Commit message" msgstr "Message de commit" @@ -3382,6 +3421,7 @@ msgid "Fetch" msgstr "Récupérer" #: lib/bds/desktop/shell_live/sidebar_components.ex:586 +#: lib/bds/tui.ex:1074 #, elixir-autogen, elixir-format msgid "History" msgstr "Historique" @@ -3429,7 +3469,7 @@ msgstr "Nettoyer LFS" #: lib/bds/desktop/shell_live/git_handler.ex:17 #: lib/bds/desktop/shell_live/sidebar_components.ex:543 #: lib/bds/desktop/shell_live/sidebar_components.ex:543 -#: lib/bds/tui.ex:800 +#: lib/bds/tui.ex:957 #, elixir-autogen, elixir-format msgid "Pull" msgstr "Pull" @@ -3437,7 +3477,7 @@ msgstr "Pull" #: lib/bds/desktop/shell_live/git_handler.ex:18 #: lib/bds/desktop/shell_live/sidebar_components.ex:544 #: lib/bds/desktop/shell_live/sidebar_components.ex:544 -#: lib/bds/tui.ex:801 +#: lib/bds/tui.ex:958 #, elixir-autogen, elixir-format msgid "Push" msgstr "Push" @@ -3550,7 +3590,7 @@ msgid "Suggested tags" msgstr "Tags suggérés" #: lib/bds/desktop/menu_bar.ex:257 -#: lib/bds/tui.ex:1566 +#: lib/bds/tui.ex:1796 #, elixir-autogen, elixir-format msgid "Force Render Site" msgstr "Forcer la régénération du site" @@ -3617,7 +3657,7 @@ msgstr "git pull" msgid "git push" msgstr "git push" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:159 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:112 #, elixir-autogen, elixir-format msgid "AI settings saved." msgstr "Paramètres IA enregistrés." @@ -3627,12 +3667,12 @@ msgstr "Paramètres IA enregistrés." msgid "Could not load models" msgstr "Impossible de charger les modèles" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:190 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:200 #, elixir-autogen, elixir-format msgid "Could not save AI settings" msgstr "Impossible d'enregistrer les paramètres IA" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:184 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:194 #, elixir-autogen, elixir-format msgid "Loaded %{count} models." msgstr "%{count} modèles chargés." @@ -3642,87 +3682,88 @@ msgstr "%{count} modèles chargés." msgid "OK" msgstr "OK" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:174 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:184 #, elixir-autogen, elixir-format msgid "The endpoint returned no models. You can still type a model name manually." msgstr "Le point de terminaison n'a renvoyé aucun modèle. Vous pouvez toujours saisir un nom de modèle manuellement." -#: lib/bds/tui.ex:1524 +#: lib/bds/tui.ex:1754 #, elixir-autogen, elixir-format msgid "AI is unavailable in airplane mode without a local endpoint." msgstr "L'IA n'est pas disponible en mode avion sans point de terminaison local." -#: lib/bds/tui.ex:1651 +#: lib/bds/tui.ex:1881 #, elixir-autogen, elixir-format msgid "Could not load this file." msgstr "Impossible de charger ce fichier." -#: lib/bds/tui.ex:230 +#: lib/bds/tui.ex:243 #, elixir-autogen, elixir-format msgid "Editing this item is not available in the terminal UI yet." msgstr "La modification de cet élément n'est pas encore disponible dans l'interface du terminal." -#: lib/bds/tui.ex:783 +#: lib/bds/tui.ex:940 #, elixir-autogen, elixir-format msgid "No suggestions returned." msgstr "Aucune suggestion reçue." -#: lib/bds/tui.ex:1648 +#: lib/bds/tui.ex:1878 #, elixir-autogen, elixir-format msgid "Only images can be previewed." msgstr "Seules les images peuvent être prévisualisées." -#: lib/bds/tui.ex:1447 +#: lib/bds/tui.ex:1671 #, elixir-autogen, elixir-format msgid "Post not found." msgstr "Article introuvable." -#: lib/bds/tui.ex:969 +#: lib/bds/tui.ex:1174 #, elixir-autogen, elixir-format msgid "Press enter to preview %{name}." msgstr "Appuyez sur Entrée pour prévisualiser %{name}." -#: lib/bds/tui.ex:1494 +#: lib/bds/tui.ex:1724 #, elixir-autogen, elixir-format msgid "Published." msgstr "Publié." -#: lib/bds/tui.ex:1510 +#: lib/bds/tui.ex:1740 #, elixir-autogen, elixir-format msgid "Save before switching languages." msgstr "Enregistrez avant de changer de langue." -#: lib/bds/tui.ex:1495 +#: lib/bds/tui.ex:524 +#: lib/bds/tui.ex:1725 #, elixir-autogen, elixir-format msgid "Saved." msgstr "Enregistré." -#: lib/bds/tui.ex:972 +#: lib/bds/tui.ex:1177 #, elixir-autogen, elixir-format msgid "Select an entry and press enter to open it." msgstr "Sélectionnez une entrée et appuyez sur Entrée pour l'ouvrir." -#: lib/bds/tui.ex:780 +#: lib/bds/tui.ex:937 #, elixir-autogen, elixir-format msgid "Suggestions applied." msgstr "Suggestions appliquées." -#: lib/bds/tui.ex:984 +#: lib/bds/tui.ex:1189 #, elixir-autogen, elixir-format msgid "Title (ctrl+t to edit)" msgstr "Titre (ctrl+t pour modifier)" -#: lib/bds/tui.ex:983 +#: lib/bds/tui.ex:1188 #, elixir-autogen, elixir-format msgid "Title (editing — enter to confirm)" msgstr "Titre (édition — Entrée pour confirmer)" -#: lib/bds/tui.ex:1033 +#: lib/bds/tui.ex:1241 #, elixir-autogen, elixir-format msgid "Working…" msgstr "Traitement en cours…" -#: lib/bds/tui.ex:1055 +#: lib/bds/tui.ex:1263 #, elixir-autogen, elixir-format msgid "esc to close" msgstr "échap pour fermer" @@ -3759,158 +3800,263 @@ msgstr "Adresse du serveur (user@host ou user@host:port), authentification par c msgid "Use the form user@host or user@host:port." msgstr "Utilisez le format user@host ou user@host:port." -#: lib/bds/tui.ex:1003 +#: lib/bds/tui.ex:1208 #, elixir-autogen, elixir-format msgid "Preview (ctrl+e to edit)" msgstr "Aperçu (ctrl+e pour modifier)" -#: lib/bds/tui.ex:1305 +#: lib/bds/tui.ex:1520 #, elixir-autogen, elixir-format msgid "ctrl+s save · ctrl+p publish · ctrl+e preview · ctrl+t title · ctrl+l language · ctrl+g AI · esc back" msgstr "ctrl+s enregistrer · ctrl+p publier · ctrl+e aperçu · ctrl+t titre · ctrl+l langue · ctrl+g IA · échap retour" -#: lib/bds/tui.ex:828 +#: lib/bds/tui.ex:985 #, elixir-autogen, elixir-format msgid "All tasks finished." msgstr "Toutes les tâches sont terminées." -#: lib/bds/tui.ex:1081 +#: lib/bds/tui.ex:1289 #, elixir-autogen, elixir-format msgid "Commands — esc to close" msgstr "Commandes — échap pour fermer" -#: lib/bds/tui.ex:654 +#: lib/bds/tui.ex:814 #, elixir-autogen, elixir-format msgid "Unknown command." msgstr "Commande inconnue." -#: lib/bds/tui.ex:1071 +#: lib/bds/tui.ex:1279 #, elixir-autogen, elixir-format msgid "[report/apply in GUI]" msgstr "[rapport/application dans la GUI]" -#: lib/bds/tui.ex:1220 +#: lib/bds/tui.ex:1428 #, elixir-autogen, elixir-format msgid "%{diffs} differences · %{orphans} orphan files" msgstr "%{diffs} différences · %{orphans} fichiers orphelins" -#: lib/bds/tui.ex:1252 +#: lib/bds/tui.ex:1460 #, elixir-autogen, elixir-format msgid "Expected %{expected} · Existing %{existing}" msgstr "Attendu %{expected} · Existant %{existing}" -#: lib/bds/tui.ex:1269 +#: lib/bds/tui.ex:1477 #, elixir-autogen, elixir-format msgid "Extra files (will be removed):" msgstr "Fichiers en trop (seront supprimés) :" -#: lib/bds/tui.ex:1265 +#: lib/bds/tui.ex:1473 #, elixir-autogen, elixir-format msgid "Missing pages (will be rendered):" msgstr "Pages manquantes (seront rendues) :" -#: lib/bds/tui.ex:298 +#: lib/bds/tui.ex:311 #, elixir-autogen, elixir-format msgid "Nothing to apply." msgstr "Rien à appliquer." -#: lib/bds/tui.ex:265 +#: lib/bds/tui.ex:278 #, elixir-autogen, elixir-format msgid "Nothing to repair." msgstr "Rien à réparer." -#: lib/bds/tui.ex:1243 +#: lib/bds/tui.ex:1451 #, elixir-autogen, elixir-format msgid "Orphan files (not in database):" msgstr "Fichiers orphelins (absents de la base de données) :" -#: lib/bds/tui.ex:1259 +#: lib/bds/tui.ex:1467 #, elixir-autogen, elixir-format msgid "Sitemap changed." msgstr "Sitemap modifié." -#: lib/bds/tui.ex:1273 +#: lib/bds/tui.ex:1481 #, elixir-autogen, elixir-format msgid "Updated posts (will be re-rendered):" msgstr "Articles mis à jour (seront rendus à nouveau) :" -#: lib/bds/tui.ex:1210 +#: lib/bds/tui.ex:1418 #, elixir-autogen, elixir-format msgid "enter apply changes · esc close" msgstr "entrée appliquer les modifications · échap fermer" -#: lib/bds/tui.ex:1205 +#: lib/bds/tui.ex:1413 #, elixir-autogen, elixir-format msgid "enter repair all from files · esc close" msgstr "entrée tout réparer depuis les fichiers · échap fermer" -#: lib/bds/tui.ex:619 +#: lib/bds/tui.ex:779 #, elixir-autogen, elixir-format msgid "Imported Blog" msgstr "Blog importé" -#: lib/bds/tui.ex:638 +#: lib/bds/tui.ex:798 #, elixir-autogen, elixir-format msgid "Not a folder: %{path}" msgstr "Pas un dossier : %{path}" -#: lib/bds/tui.ex:1147 +#: lib/bds/tui.ex:1355 #, elixir-autogen, elixir-format msgid "Projects — enter switch · o open existing · esc close" msgstr "Projets — entrée changer · o ouvrir existant · échap fermer" -#: lib/bds/tui.ex:546 +#: lib/bds/tui.ex:706 #, elixir-autogen, elixir-format msgid "Switched to %{name}." msgstr "Passage à %{name}." -#: lib/bds/tui.ex:1175 +#: lib/bds/tui.ex:1383 #, elixir-autogen, elixir-format msgid "Matching folders" msgstr "Dossiers correspondants" -#: lib/bds/tui.ex:1113 +#: lib/bds/tui.ex:1321 #, elixir-autogen, elixir-format msgid "Open Existing Blog — type a folder path · tab complete · enter open · esc back" msgstr "Ouvrir un blog existant — saisir le chemin d'un dossier · tab compléter · entrée ouvrir · échap retour" -#: lib/bds/tui.ex:1298 -#, elixir-autogen, elixir-format -msgid "enter open · n new post · 1-5 views · p projects · / search · : commands (:? help) · r refresh · ctrl+q quit" -msgstr "entrée ouvrir · n nouvel article · 1-5 vues · p projets · / rechercher · : commandes (:? aide) · r actualiser · ctrl+q quitter" - -#: lib/bds/tui.ex:321 +#: lib/bds/tui.ex:334 #, elixir-autogen, elixir-format msgid "Commit message required." msgstr "Message de commit requis." -#: lib/bds/tui.ex:327 +#: lib/bds/tui.ex:340 #, elixir-autogen, elixir-format msgid "Committed." msgstr "Commit effectué." -#: lib/bds/tui.ex:960 +#: lib/bds/tui.ex:1165 #, elixir-autogen, elixir-format msgid "Diff (pgup/pgdn scroll)" msgstr "Diff (pgup/pgdn pour défiler)" -#: lib/bds/tui.ex:1333 +#: lib/bds/tui.ex:1548 #, elixir-autogen, elixir-format msgid "No changes." msgstr "Aucune modification." -#: lib/bds/tui.ex:387 +#: lib/bds/tui.ex:400 #, elixir-autogen, elixir-format msgid "No diff for this file." msgstr "Pas de diff pour ce fichier." -#: lib/bds/tui.ex:375 -#: lib/bds/tui.ex:947 +#: lib/bds/tui.ex:388 +#: lib/bds/tui.ex:1152 #, elixir-autogen, elixir-format msgid "Not a git repository." msgstr "Pas un dépôt git." -#: lib/bds/tui.ex:1291 +#: lib/bds/ui/settings_form.ex:73 #, elixir-autogen, elixir-format -msgid "c commit · u pull · s push · enter jump to file · pgup/pgdn scroll diff · 1-5 views · ctrl+q quit" -msgstr "c commit · u pull · s push · entrée aller au fichier · pgup/pgdn défiler le diff · 1-5 vues · ctrl+q quitter" +msgid "Blog Languages (comma-separated)" +msgstr "Langues du blog (séparées par des virgules)" + +#: lib/bds/ui/settings_form.ex:215 +#, elixir-autogen, elixir-format +msgid "Data Folder" +msgstr "Dossier de données" + +#: lib/bds/ui/settings_form.ex:218 +#, elixir-autogen, elixir-format +msgid "Maintenance" +msgstr "Maintenance" + +#: lib/bds/ui/settings_form.ex:45 +#, elixir-autogen, elixir-format +msgid "Name" +msgstr "Nom" + +#: lib/bds/ui/settings_form.ex:138 +#, elixir-autogen, elixir-format +msgid "New Category" +msgstr "Nouvelle catégorie" + +#: lib/bds/ui/settings_form.ex:170 +#, elixir-autogen, elixir-format +msgid "Offline Chat Disable Reasoning" +msgstr "Chat hors ligne : désactiver le raisonnement" + +#: lib/bds/ui/settings_form.ex:167 +#, elixir-autogen, elixir-format +msgid "Offline Chat Tool Calls" +msgstr "Chat hors ligne : appels d'outils" + +#: lib/bds/ui/settings_form.ex:176 +#, elixir-autogen, elixir-format +msgid "Offline Image Model" +msgstr "Modèle d'image hors ligne" + +#: lib/bds/ui/settings_form.ex:154 +#, elixir-autogen, elixir-format +msgid "Online Chat Disable Reasoning" +msgstr "Chat en ligne : désactiver le raisonnement" + +#: lib/bds/ui/settings_form.ex:151 +#, elixir-autogen, elixir-format +msgid "Online Chat Tool Calls" +msgstr "Chat en ligne : appels d'outils" + +#: lib/bds/ui/settings_form.ex:160 +#, elixir-autogen, elixir-format +msgid "Online Image Model" +msgstr "Modèle d'image en ligne" + +#: lib/bds/ui/settings_form.ex:57 +#, elixir-autogen, elixir-format +msgid "Posts per Page" +msgstr "Articles par page" + +#: lib/bds/ui/settings_form.ex:219 +#, elixir-autogen, elixir-format +msgid "Rebuild and maintenance commands are available under the : prompt." +msgstr "Les commandes de reconstruction et de maintenance sont disponibles via l'invite :." + +#: lib/bds/ui/settings_form.ex:200 +#, elixir-autogen, elixir-format +msgid "SSH Host" +msgstr "Hôte SSH" + +#: lib/bds/ui/settings_form.ex:202 +#, elixir-autogen, elixir-format +msgid "SSH Remote Path" +msgstr "Chemin distant SSH" + +#: lib/bds/ui/settings_form.ex:201 +#, elixir-autogen, elixir-format +msgid "SSH User" +msgstr "Utilisateur SSH" + +#: lib/bds/ui/settings_form.ex:119 +#, elixir-autogen, elixir-format +msgid "Show Title" +msgstr "Afficher le titre" + +#: lib/bds/ui/settings_form.ex:242 +#, elixir-autogen, elixir-format +msgid "Theme" +msgstr "Thème" + +#: lib/bds/tui.ex:1136 +#, elixir-autogen, elixir-format +msgid "enter edit · ctrl+s save · esc close" +msgstr "entrée modifier · ctrl+s enregistrer · échap fermer" + +#: lib/bds/tui.ex:1499 +#, elixir-autogen, elixir-format +msgid "enter edit/toggle/cycle · ctrl+s save · esc close · ctrl+q quit" +msgstr "entrée modifier/basculer/parcourir · ctrl+s enregistrer · échap fermer · ctrl+q quitter" + +#: lib/bds/ui/settings_form.ex:230 +#, elixir-autogen, elixir-format +msgid "not supported yet" +msgstr "pas encore pris en charge" + +#: lib/bds/tui.ex:1506 +#, elixir-autogen, elixir-format +msgid "c commit · u pull · s push · enter jump to file · pgup/pgdn scroll diff · 1-7 views · ctrl+q quit" +msgstr "c commit · u pull · s push · entrée aller au fichier · pgup/pgdn défiler le diff · 1-7 vues · ctrl+q quitter" + +#: lib/bds/tui.ex:1513 +#, elixir-autogen, elixir-format +msgid "enter open · n new post · 1-7 views · p projects · / search · : commands (:? help) · r refresh · ctrl+q quit" +msgstr "entrée ouvrir · n nouvel article · 1-7 vues · p projets · / rechercher · : commandes (:? aide) · r actualiser · ctrl+q quitter" diff --git a/priv/gettext/it/LC_MESSAGES/ui.po b/priv/gettext/it/LC_MESSAGES/ui.po index 94bbb73..77bd480 100644 --- a/priv/gettext/it/LC_MESSAGES/ui.po +++ b/priv/gettext/it/LC_MESSAGES/ui.po @@ -59,6 +59,7 @@ msgid "--" msgstr "--" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:220 +#: lib/bds/ui/settings_form.ex:145 #: lib/bds/ui/sidebar.ex:802 #, elixir-autogen, elixir-format msgid "AI" @@ -71,8 +72,8 @@ msgid "AI Assistant" msgstr "Assistente IA" #: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:93 -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:193 -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:211 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:203 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:221 #, elixir-autogen, elixir-format msgid "AI Settings" msgstr "Impostazioni IA" @@ -81,11 +82,11 @@ msgstr "Impostazioni IA" #: lib/bds/desktop/shell_live/overlay_manager.ex:72 #: lib/bds/desktop/shell_live/post_editor.ex:920 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43 -#: lib/bds/tui.ex:780 -#: lib/bds/tui.ex:783 -#: lib/bds/tui.ex:786 -#: lib/bds/tui.ex:794 -#: lib/bds/tui.ex:1523 +#: lib/bds/tui.ex:937 +#: lib/bds/tui.ex:940 +#: lib/bds/tui.ex:943 +#: lib/bds/tui.ex:951 +#: lib/bds/tui.ex:1753 #, elixir-autogen, elixir-format msgid "AI Suggestions" msgstr "Suggerimenti IA" @@ -163,6 +164,7 @@ msgid "Agent configuration files for the built-in bDS MCP server" msgstr "File di configurazione degli agenti per il server MCP bDS integrato" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:273 +#: lib/bds/ui/settings_form.ex:146 #, elixir-autogen, elixir-format msgid "Airplane Mode" msgstr "Modalità aereo" @@ -414,6 +416,7 @@ msgid "Blogmark Bookmarklet" msgstr "Bookmarklet blogmark" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:90 +#: lib/bds/ui/settings_form.ex:67 #, elixir-autogen, elixir-format msgid "Blogmark Category" msgstr "Categoria blogmark" @@ -572,7 +575,7 @@ msgid "Collapse unchanged diff hunks" msgstr "Comprimi i blocchi diff invariati" #: lib/bds/desktop/shell_live/overlay_manager.ex:422 -#: lib/bds/tui.ex:1619 +#: lib/bds/tui.ex:1849 #, elixir-autogen, elixir-format msgid "Command completed" msgstr "Comando completato" @@ -590,7 +593,8 @@ msgstr "Conferma" #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:375 #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:34 #: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:32 -#: lib/bds/tui.ex:1014 +#: lib/bds/tui.ex:1219 +#: lib/bds/ui/settings_form.ex:137 #: lib/bds/ui/sidebar.ex:801 #, elixir-autogen, elixir-format msgid "Content" @@ -678,6 +682,7 @@ msgstr "Scuro" msgid "Dashboard" msgstr "Dashboard" +#: lib/bds/ui/settings_form.ex:214 #: lib/bds/ui/sidebar.ex:815 #, elixir-autogen, elixir-format msgid "Data" @@ -706,11 +711,13 @@ msgid "Default" msgstr "Predefinito" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:78 +#: lib/bds/ui/settings_form.ex:54 #, elixir-autogen, elixir-format msgid "Default Author" msgstr "Autore predefinito" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:119 +#: lib/bds/ui/settings_form.ex:88 #, elixir-autogen, elixir-format msgid "Default Editor Mode" msgstr "Modalità editor predefinita" @@ -776,6 +783,7 @@ msgid "Deployment credentials for upload tasks" msgstr "Credenziali di distribuzione per i task di upload" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:38 +#: lib/bds/ui/settings_form.ex:46 #, elixir-autogen, elixir-format msgid "Description" msgstr "Descrizione" @@ -798,6 +806,7 @@ msgid "Detect Language" msgstr "Rileva lingua" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:129 +#: lib/bds/ui/settings_form.ex:93 #, elixir-autogen, elixir-format msgid "Diff View Style" msgstr "Stile vista diff" @@ -913,6 +922,7 @@ msgstr "Modifica traduzione" #: lib/bds/desktop/shell_live/index.html.heex:513 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:114 +#: lib/bds/ui/settings_form.ex:87 #: lib/bds/ui/sidebar.ex:800 #, elixir-autogen, elixir-format msgid "Editor" @@ -1030,7 +1040,7 @@ msgid "Filename" msgstr "Nome file" #: lib/bds/desktop/menu_bar.ex:254 -#: lib/bds/tui.ex:1583 +#: lib/bds/tui.ex:1813 #, elixir-autogen, elixir-format msgid "Fill Missing Translations" msgstr "Completa traduzioni mancanti" @@ -1041,7 +1051,7 @@ msgid "Find" msgstr "Trova" #: lib/bds/desktop/menu_bar.ex:255 -#: lib/bds/tui.ex:1586 +#: lib/bds/tui.ex:1816 #, elixir-autogen, elixir-format msgid "Find Duplicate Posts" msgstr "Trova post duplicati" @@ -1068,14 +1078,14 @@ msgid "Gallery" msgstr "Galleria" #: lib/bds/desktop/menu_bar.ex:256 -#: lib/bds/tui.ex:1567 +#: lib/bds/tui.ex:1797 #, elixir-autogen, elixir-format msgid "Generate Site" msgstr "Genera sito" #: lib/bds/desktop/shell_live.ex:792 #: lib/bds/desktop/shell_live/socket_state.ex:109 -#: lib/bds/tui.ex:1440 +#: lib/bds/tui.ex:1662 #: lib/bds/ui/sidebar.ex:826 #, elixir-autogen, elixir-format msgid "Git" @@ -1100,6 +1110,7 @@ msgid "Help" msgstr "Aiuto" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:142 +#: lib/bds/ui/settings_form.ex:100 #, elixir-autogen, elixir-format msgid "Hide Unchanged Regions" msgstr "Nascondi regioni invariate" @@ -1321,6 +1332,7 @@ msgid "Links To" msgstr "Collegato a" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:162 +#: lib/bds/ui/settings_form.ex:128 #, elixir-autogen, elixir-format msgid "List Template" msgstr "Template della lista" @@ -1333,6 +1345,7 @@ msgstr "Carica altri" #: lib/bds/desktop/shell_live/settings_editor/mcp_config.ex:50 #: lib/bds/desktop/shell_live/settings_editor/mcp_config.ex:57 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:351 +#: lib/bds/ui/settings_form.ex:234 #: lib/bds/ui/sidebar.ex:816 #, elixir-autogen, elixir-format msgid "MCP" @@ -1350,6 +1363,7 @@ msgstr "Macro (%{count})" #: lib/bds/desktop/shell_data.ex:103 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:55 +#: lib/bds/ui/settings_form.ex:50 #, elixir-autogen, elixir-format msgid "Main Language" msgstr "Lingua principale" @@ -1390,9 +1404,9 @@ msgstr "Numero massimo di post per pagina" #: lib/bds/desktop/shell_live/misc_editor.ex:762 #: lib/bds/desktop/shell_live/sidebar_components.ex:654 #: lib/bds/desktop/shell_live/sidebar_delete.ex:175 -#: lib/bds/tui.ex:1436 -#: lib/bds/tui.ex:1648 -#: lib/bds/tui.ex:1651 +#: lib/bds/tui.ex:1657 +#: lib/bds/tui.ex:1878 +#: lib/bds/tui.ex:1881 #: lib/bds/ui/registry.ex:30 #: lib/bds/ui/registry.ex:100 #: lib/bds/ui/sidebar.ex:578 @@ -1435,11 +1449,11 @@ msgstr "Metadati" #: lib/bds/desktop/shell_live/misc_editor.ex:214 #: lib/bds/desktop/shell_live/misc_editor.ex:226 #: lib/bds/desktop/shell_live/misc_editor.ex:448 -#: lib/bds/tui.ex:265 -#: lib/bds/tui.ex:271 -#: lib/bds/tui.ex:282 -#: lib/bds/tui.ex:1204 -#: lib/bds/tui.ex:1564 +#: lib/bds/tui.ex:278 +#: lib/bds/tui.ex:284 +#: lib/bds/tui.ex:295 +#: lib/bds/tui.ex:1412 +#: lib/bds/tui.ex:1794 #: lib/bds/ui/registry.ex:111 #, elixir-autogen, elixir-format msgid "Metadata Diff" @@ -1485,7 +1499,7 @@ msgstr "Nuova pagina" #: lib/bds/desktop/menu_bar.ex:214 #: lib/bds/desktop/shell_live/sidebar_create.ex:41 -#: lib/bds/tui.ex:221 +#: lib/bds/tui.ex:232 #, elixir-autogen, elixir-format msgid "New Post" msgstr "Nuovo post" @@ -1671,11 +1685,13 @@ msgid "Offline" msgstr "Offline" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:269 +#: lib/bds/ui/settings_form.ex:165 #, elixir-autogen, elixir-format msgid "Offline API Key" msgstr "Chiave API offline" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:277 +#: lib/bds/ui/settings_form.ex:166 #, elixir-autogen, elixir-format msgid "Offline Chat Model" msgstr "Modello chat offline" @@ -1691,6 +1707,7 @@ msgid "Offline Chat Tools" msgstr "Strumenti chat offline" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:260 +#: lib/bds/ui/settings_form.ex:164 #, elixir-autogen, elixir-format msgid "Offline Endpoint URL" msgstr "URL endpoint offline" @@ -1701,21 +1718,25 @@ msgid "Offline Image Analysis Model" msgstr "Modello analisi immagini offline" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:297 +#: lib/bds/ui/settings_form.ex:179 #, elixir-autogen, elixir-format msgid "Offline Image Support" msgstr "Supporto immagini offline" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:289 +#: lib/bds/ui/settings_form.ex:173 #, elixir-autogen, elixir-format msgid "Offline Title Model" msgstr "Modello titolo offline" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:232 +#: lib/bds/ui/settings_form.ex:149 #, elixir-autogen, elixir-format msgid "Online API Key" msgstr "Chiave API online" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:236 +#: lib/bds/ui/settings_form.ex:150 #, elixir-autogen, elixir-format msgid "Online Chat Model" msgstr "Modello di chat online" @@ -1731,6 +1752,7 @@ msgid "Online Chat Tools" msgstr "Strumenti chat online" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:223 +#: lib/bds/ui/settings_form.ex:148 #, elixir-autogen, elixir-format msgid "Online Endpoint URL" msgstr "URL endpoint online" @@ -1741,11 +1763,13 @@ msgid "Online Image Analysis Model" msgstr "Modello di analisi immagini online" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:256 +#: lib/bds/ui/settings_form.ex:163 #, elixir-autogen, elixir-format msgid "Online Image Support" msgstr "Supporto immagini online" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:248 +#: lib/bds/ui/settings_form.ex:157 #, elixir-autogen, elixir-format msgid "Online Title Model" msgstr "Modello titoli online" @@ -1763,8 +1787,8 @@ msgid "Open Data Folder" msgstr "Apri cartella dati" #: lib/bds/desktop/shell_live/index.html.heex:644 -#: lib/bds/tui.ex:632 -#: lib/bds/tui.ex:637 +#: lib/bds/tui.ex:792 +#: lib/bds/tui.ex:797 #, elixir-autogen, elixir-format msgid "Open Existing Blog" msgstr "Apri blog esistente" @@ -1776,7 +1800,7 @@ msgid "Open Settings" msgstr "Apri Impostazioni" #: lib/bds/desktop/menu_bar.ex:217 -#: lib/bds/tui.ex:1588 +#: lib/bds/tui.ex:1818 #, elixir-autogen, elixir-format msgid "Open in Browser" msgstr "Apri nel browser" @@ -1902,6 +1926,7 @@ msgid "Post Slug Conflicts" msgstr "Conflitti slug articoli" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:161 +#: lib/bds/ui/settings_form.ex:122 #, elixir-autogen, elixir-format msgid "Post Template" msgstr "Template del post" @@ -1924,8 +1949,8 @@ msgstr "Articolo salvato" #: lib/bds/desktop/menu_bar.ex:233 #: lib/bds/desktop/shell_live/misc_editor.ex:664 #: lib/bds/desktop/shell_live/misc_editor.ex:761 -#: lib/bds/tui.ex:1435 -#: lib/bds/tui.ex:1447 +#: lib/bds/tui.ex:1656 +#: lib/bds/tui.ex:1671 #: lib/bds/ui/registry.ex:14 #: lib/bds/ui/sidebar.ex:271 #, elixir-autogen, elixir-format @@ -1967,6 +1992,7 @@ msgstr "Anteprima non disponibile" #: lib/bds/desktop/shell_live/misc_editor.ex:739 #: lib/bds/desktop/shell_live/misc_editor.ex:765 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:27 +#: lib/bds/ui/settings_form.ex:44 #: lib/bds/ui/sidebar.ex:799 #, elixir-autogen, elixir-format msgid "Project" @@ -1984,8 +2010,8 @@ msgstr "Progetto e pubblicazione" #: lib/bds/desktop/shell_live/chat_surface.ex:15 #: lib/bds/desktop/shell_live/index.html.heex:623 -#: lib/bds/tui.ex:545 -#: lib/bds/tui.ex:550 +#: lib/bds/tui.ex:705 +#: lib/bds/tui.ex:710 #, elixir-autogen, elixir-format msgid "Projects" msgstr "Progetti" @@ -1996,6 +2022,7 @@ msgid "Protected categories cannot be removed" msgstr "Le categorie protette non possono essere rimosse" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:51 +#: lib/bds/ui/settings_form.ex:47 #, elixir-autogen, elixir-format msgid "Public URL" msgstr "URL pubblica" @@ -2029,6 +2056,7 @@ msgstr "Traduzione pubblicata con contenuto nel DB invece del filesystem" #: lib/bds/desktop/shell_live/settings_editor/publishing_settings.ex:40 #: lib/bds/desktop/shell_live/settings_editor/publishing_settings.ex:57 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:338 +#: lib/bds/ui/settings_form.ex:199 #: lib/bds/ui/sidebar.ex:811 #, elixir-autogen, elixir-format msgid "Publishing" @@ -2051,15 +2079,15 @@ msgid "Ready to import:" msgstr "Pronto per importare:" #: lib/bds/desktop/menu_bar.ex:248 -#: lib/bds/tui.ex:629 -#: lib/bds/tui.ex:1568 +#: lib/bds/tui.ex:789 +#: lib/bds/tui.ex:1798 #, elixir-autogen, elixir-format msgid "Rebuild Database" msgstr "Ricostruisci database" #: lib/bds/desktop/menu_bar.ex:250 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:381 -#: lib/bds/tui.ex:1572 +#: lib/bds/tui.ex:1802 #, elixir-autogen, elixir-format msgid "Rebuild Embedding Index" msgstr "Ricostruisci indice embeddings" @@ -2117,7 +2145,7 @@ msgid "Refresh Translation" msgstr "Aggiorna traduzione" #: lib/bds/desktop/menu_bar.ex:252 -#: lib/bds/tui.ex:1575 +#: lib/bds/tui.ex:1805 #, elixir-autogen, elixir-format msgid "Regenerate Calendar" msgstr "Rigenera calendario" @@ -2128,7 +2156,7 @@ msgid "Regenerate Missing Thumbnails" msgstr "Rigenera miniature mancanti" #: lib/bds/desktop/menu_bar.ex:249 -#: lib/bds/tui.ex:1569 +#: lib/bds/tui.ex:1799 #, elixir-autogen, elixir-format msgid "Reindex Text" msgstr "Reindicizza testo" @@ -2160,6 +2188,7 @@ msgid "Remove tag" msgstr "Rimuovi tag" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:159 +#: lib/bds/ui/settings_form.ex:118 #, elixir-autogen, elixir-format msgid "Render in Lists" msgstr "Mostra nelle liste" @@ -2237,6 +2266,7 @@ msgid "Run" msgstr "Esegui" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:340 +#: lib/bds/ui/settings_form.ex:203 #, elixir-autogen, elixir-format msgid "SSH Mode" msgstr "Modalità SSH" @@ -2314,7 +2344,7 @@ msgstr "Le capacità di scripting sono configurate a livello applicativo nella r #: lib/bds/desktop/shell_live/script_editor.ex:216 #: lib/bds/desktop/shell_live/script_editor.ex:219 #: lib/bds/desktop/shell_live/script_editor.ex:234 -#: lib/bds/tui.ex:1438 +#: lib/bds/tui.ex:1659 #: lib/bds/ui/registry.ex:38 #: lib/bds/ui/sidebar.ex:63 #: lib/bds/ui/sidebar.ex:115 @@ -2413,12 +2443,15 @@ msgid "Selected pairs dismissed" msgstr "Coppie selezionate ignorate" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:324 +#: lib/bds/ui/settings_form.ex:78 +#: lib/bds/ui/settings_form.ex:189 #, elixir-autogen, elixir-format msgid "Semantic Similarity" msgstr "Somiglianza semantica" #: lib/bds/desktop/shell_live/settings_editor/project_settings.ex:60 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:11 +#: lib/bds/tui.ex:1661 #: lib/bds/ui/registry.ex:86 #: lib/bds/ui/registry.ex:101 #: lib/bds/ui/sidebar.ex:795 @@ -2442,9 +2475,9 @@ msgid "Site" msgstr "Sito" #: lib/bds/desktop/shell_live/misc_editor.ex:412 -#: lib/bds/tui.ex:298 -#: lib/bds/tui.ex:300 -#: lib/bds/tui.ex:1209 +#: lib/bds/tui.ex:311 +#: lib/bds/tui.ex:313 +#: lib/bds/tui.ex:1417 #: lib/bds/ui/registry.ex:125 #, elixir-autogen, elixir-format msgid "Site Validation" @@ -2508,6 +2541,7 @@ msgstr "Ferma" #: lib/bds/desktop/shell_live/settings_editor/style_editor.ex:76 #: lib/bds/desktop/shell_live/settings_editor_html/style_editor.html.heex:3 #: lib/bds/ui/registry.ex:102 +#: lib/bds/ui/settings_form.ex:241 #: lib/bds/ui/sidebar.ex:817 #, elixir-autogen, elixir-format msgid "Style" @@ -2534,6 +2568,7 @@ msgid "Syntax is valid" msgstr "La sintassi è valida" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:301 +#: lib/bds/ui/settings_form.ex:147 #, elixir-autogen, elixir-format msgid "System Prompt" msgstr "Prompt di sistema" @@ -2565,7 +2600,7 @@ msgstr "Nome del tag" #: lib/bds/desktop/shell_live/tags_editor.ex:222 #: lib/bds/desktop/shell_live/tags_editor.ex:253 #: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:11 -#: lib/bds/tui.ex:1439 +#: lib/bds/tui.ex:1660 #: lib/bds/ui/registry.ex:54 #: lib/bds/ui/registry.ex:103 #: lib/bds/ui/sidebar.ex:289 @@ -2577,12 +2612,13 @@ msgstr "Tag" #: lib/bds/desktop/shell_live.ex:786 #: lib/bds/desktop/shell_live/panel_renderer.ex:54 -#: lib/bds/tui.ex:828 +#: lib/bds/tui.ex:985 #, elixir-autogen, elixir-format msgid "Tasks" msgstr "Attività" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:321 +#: lib/bds/ui/settings_form.ex:186 #: lib/bds/ui/sidebar.ex:805 #, elixir-autogen, elixir-format msgid "Technology" @@ -2622,7 +2658,7 @@ msgstr "La sintassi del template è valida" #: lib/bds/desktop/shell_live/template_editor.ex:171 #: lib/bds/desktop/shell_live/template_editor.ex:176 #: lib/bds/desktop/shell_live/template_editor.ex:191 -#: lib/bds/tui.ex:1437 +#: lib/bds/tui.ex:1658 #: lib/bds/ui/registry.ex:46 #: lib/bds/ui/sidebar.ex:71 #: lib/bds/ui/sidebar.ex:122 @@ -2668,6 +2704,7 @@ msgstr "Questo elemento e referenziato da:" #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:23 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:158 #: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:22 +#: lib/bds/ui/settings_form.ex:117 #, elixir-autogen, elixir-format msgid "Title" msgstr "Titolo" @@ -2845,7 +2882,7 @@ msgid "Updated URLs" msgstr "URL aggiornati" #: lib/bds/desktop/menu_bar.ex:259 -#: lib/bds/tui.ex:1587 +#: lib/bds/tui.ex:1817 #, elixir-autogen, elixir-format msgid "Upload Site" msgstr "Carica sito" @@ -2873,13 +2910,13 @@ msgid "Validate" msgstr "Valida" #: lib/bds/desktop/menu_bar.ex:258 -#: lib/bds/tui.ex:1565 +#: lib/bds/tui.ex:1795 #, elixir-autogen, elixir-format msgid "Validate Site" msgstr "Valida sito" #: lib/bds/desktop/menu_bar.ex:253 -#: lib/bds/tui.ex:1578 +#: lib/bds/tui.ex:1808 #, elixir-autogen, elixir-format msgid "Validate Translations" msgstr "Valida traduzioni" @@ -2923,6 +2960,7 @@ msgid "Working tree and history" msgstr "Working tree e cronologia" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:138 +#: lib/bds/ui/settings_form.ex:97 #, elixir-autogen, elixir-format msgid "Wrap Long Lines" msgstr "A capo per linee lunghe" @@ -3281,6 +3319,7 @@ msgid "End-user guidance for editorial workflows, media, templates, translation, msgstr "Guida per l'utente finale per flussi editoriali, media, modelli, traduzioni e pubblicazione in bDS2." #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:86 +#: lib/bds/ui/settings_form.ex:62 #, elixir-autogen, elixir-format msgid "Image Import Concurrency" msgstr "Importazione simultanea immagini" @@ -3350,15 +3389,15 @@ msgstr "Modifiche" #: lib/bds/desktop/shell_live/git_handler.ex:46 #: lib/bds/desktop/shell_live/git_handler.ex:52 #: lib/bds/desktop/shell_live/sidebar_components.ex:556 -#: lib/bds/tui.ex:321 -#: lib/bds/tui.ex:327 -#: lib/bds/tui.ex:330 +#: lib/bds/tui.ex:334 +#: lib/bds/tui.ex:340 +#: lib/bds/tui.ex:343 #, elixir-autogen, elixir-format msgid "Commit" msgstr "Commit" #: lib/bds/desktop/shell_live/sidebar_components.ex:555 -#: lib/bds/tui.ex:1031 +#: lib/bds/tui.ex:1239 #, elixir-autogen, elixir-format msgid "Commit message" msgstr "Messaggio di commit" @@ -3382,6 +3421,7 @@ msgid "Fetch" msgstr "Recupera" #: lib/bds/desktop/shell_live/sidebar_components.ex:586 +#: lib/bds/tui.ex:1074 #, elixir-autogen, elixir-format msgid "History" msgstr "Cronologia" @@ -3429,7 +3469,7 @@ msgstr "Pulisci LFS" #: lib/bds/desktop/shell_live/git_handler.ex:17 #: lib/bds/desktop/shell_live/sidebar_components.ex:543 #: lib/bds/desktop/shell_live/sidebar_components.ex:543 -#: lib/bds/tui.ex:800 +#: lib/bds/tui.ex:957 #, elixir-autogen, elixir-format msgid "Pull" msgstr "Pull" @@ -3437,7 +3477,7 @@ msgstr "Pull" #: lib/bds/desktop/shell_live/git_handler.ex:18 #: lib/bds/desktop/shell_live/sidebar_components.ex:544 #: lib/bds/desktop/shell_live/sidebar_components.ex:544 -#: lib/bds/tui.ex:801 +#: lib/bds/tui.ex:958 #, elixir-autogen, elixir-format msgid "Push" msgstr "Push" @@ -3550,7 +3590,7 @@ msgid "Suggested tags" msgstr "Tag suggeriti" #: lib/bds/desktop/menu_bar.ex:257 -#: lib/bds/tui.ex:1566 +#: lib/bds/tui.ex:1796 #, elixir-autogen, elixir-format msgid "Force Render Site" msgstr "Forza la rigenerazione del sito" @@ -3617,7 +3657,7 @@ msgstr "git pull" msgid "git push" msgstr "git push" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:159 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:112 #, elixir-autogen, elixir-format msgid "AI settings saved." msgstr "Impostazioni IA salvate." @@ -3627,12 +3667,12 @@ msgstr "Impostazioni IA salvate." msgid "Could not load models" msgstr "Impossibile caricare i modelli" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:190 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:200 #, elixir-autogen, elixir-format msgid "Could not save AI settings" msgstr "Impossibile salvare le impostazioni IA" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:184 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:194 #, elixir-autogen, elixir-format msgid "Loaded %{count} models." msgstr "Caricati %{count} modelli." @@ -3642,87 +3682,88 @@ msgstr "Caricati %{count} modelli." msgid "OK" msgstr "OK" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:174 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:184 #, elixir-autogen, elixir-format msgid "The endpoint returned no models. You can still type a model name manually." msgstr "L'endpoint non ha restituito alcun modello. Puoi comunque digitare manualmente il nome di un modello." -#: lib/bds/tui.ex:1524 +#: lib/bds/tui.ex:1754 #, elixir-autogen, elixir-format msgid "AI is unavailable in airplane mode without a local endpoint." msgstr "L'IA non è disponibile in modalità aereo senza un endpoint locale." -#: lib/bds/tui.ex:1651 +#: lib/bds/tui.ex:1881 #, elixir-autogen, elixir-format msgid "Could not load this file." msgstr "Impossibile caricare questo file." -#: lib/bds/tui.ex:230 +#: lib/bds/tui.ex:243 #, elixir-autogen, elixir-format msgid "Editing this item is not available in the terminal UI yet." msgstr "La modifica di questo elemento non è ancora disponibile nell'interfaccia del terminale." -#: lib/bds/tui.ex:783 +#: lib/bds/tui.ex:940 #, elixir-autogen, elixir-format msgid "No suggestions returned." msgstr "Nessun suggerimento ricevuto." -#: lib/bds/tui.ex:1648 +#: lib/bds/tui.ex:1878 #, elixir-autogen, elixir-format msgid "Only images can be previewed." msgstr "Solo le immagini possono essere visualizzate in anteprima." -#: lib/bds/tui.ex:1447 +#: lib/bds/tui.ex:1671 #, elixir-autogen, elixir-format msgid "Post not found." msgstr "Post non trovato." -#: lib/bds/tui.ex:969 +#: lib/bds/tui.ex:1174 #, elixir-autogen, elixir-format msgid "Press enter to preview %{name}." msgstr "Premi Invio per l'anteprima di %{name}." -#: lib/bds/tui.ex:1494 +#: lib/bds/tui.ex:1724 #, elixir-autogen, elixir-format msgid "Published." msgstr "Pubblicato." -#: lib/bds/tui.ex:1510 +#: lib/bds/tui.ex:1740 #, elixir-autogen, elixir-format msgid "Save before switching languages." msgstr "Salva prima di cambiare lingua." -#: lib/bds/tui.ex:1495 +#: lib/bds/tui.ex:524 +#: lib/bds/tui.ex:1725 #, elixir-autogen, elixir-format msgid "Saved." msgstr "Salvato." -#: lib/bds/tui.ex:972 +#: lib/bds/tui.ex:1177 #, elixir-autogen, elixir-format msgid "Select an entry and press enter to open it." msgstr "Seleziona una voce e premi Invio per aprirla." -#: lib/bds/tui.ex:780 +#: lib/bds/tui.ex:937 #, elixir-autogen, elixir-format msgid "Suggestions applied." msgstr "Suggerimenti applicati." -#: lib/bds/tui.ex:984 +#: lib/bds/tui.ex:1189 #, elixir-autogen, elixir-format msgid "Title (ctrl+t to edit)" msgstr "Titolo (ctrl+t per modificare)" -#: lib/bds/tui.ex:983 +#: lib/bds/tui.ex:1188 #, elixir-autogen, elixir-format msgid "Title (editing — enter to confirm)" msgstr "Titolo (modifica — Invio per confermare)" -#: lib/bds/tui.ex:1033 +#: lib/bds/tui.ex:1241 #, elixir-autogen, elixir-format msgid "Working…" msgstr "Elaborazione…" -#: lib/bds/tui.ex:1055 +#: lib/bds/tui.ex:1263 #, elixir-autogen, elixir-format msgid "esc to close" msgstr "esc per chiudere" @@ -3759,158 +3800,263 @@ msgstr "Indirizzo del server (user@host o user@host:port), autenticazione a chia msgid "Use the form user@host or user@host:port." msgstr "Usa il formato user@host o user@host:port." -#: lib/bds/tui.ex:1003 +#: lib/bds/tui.ex:1208 #, elixir-autogen, elixir-format msgid "Preview (ctrl+e to edit)" msgstr "Anteprima (ctrl+e per modificare)" -#: lib/bds/tui.ex:1305 +#: lib/bds/tui.ex:1520 #, elixir-autogen, elixir-format msgid "ctrl+s save · ctrl+p publish · ctrl+e preview · ctrl+t title · ctrl+l language · ctrl+g AI · esc back" msgstr "ctrl+s salva · ctrl+p pubblica · ctrl+e anteprima · ctrl+t titolo · ctrl+l lingua · ctrl+g IA · esc indietro" -#: lib/bds/tui.ex:828 +#: lib/bds/tui.ex:985 #, elixir-autogen, elixir-format msgid "All tasks finished." msgstr "Tutte le attività sono terminate." -#: lib/bds/tui.ex:1081 +#: lib/bds/tui.ex:1289 #, elixir-autogen, elixir-format msgid "Commands — esc to close" msgstr "Comandi — esc per chiudere" -#: lib/bds/tui.ex:654 +#: lib/bds/tui.ex:814 #, elixir-autogen, elixir-format msgid "Unknown command." msgstr "Comando sconosciuto." -#: lib/bds/tui.ex:1071 +#: lib/bds/tui.ex:1279 #, elixir-autogen, elixir-format msgid "[report/apply in GUI]" msgstr "[report/applicazione nella GUI]" -#: lib/bds/tui.ex:1220 +#: lib/bds/tui.ex:1428 #, elixir-autogen, elixir-format msgid "%{diffs} differences · %{orphans} orphan files" msgstr "%{diffs} differenze · %{orphans} file orfani" -#: lib/bds/tui.ex:1252 +#: lib/bds/tui.ex:1460 #, elixir-autogen, elixir-format msgid "Expected %{expected} · Existing %{existing}" msgstr "Attesi %{expected} · Esistenti %{existing}" -#: lib/bds/tui.ex:1269 +#: lib/bds/tui.ex:1477 #, elixir-autogen, elixir-format msgid "Extra files (will be removed):" msgstr "File in eccesso (verranno rimossi):" -#: lib/bds/tui.ex:1265 +#: lib/bds/tui.ex:1473 #, elixir-autogen, elixir-format msgid "Missing pages (will be rendered):" msgstr "Pagine mancanti (verranno generate):" -#: lib/bds/tui.ex:298 +#: lib/bds/tui.ex:311 #, elixir-autogen, elixir-format msgid "Nothing to apply." msgstr "Niente da applicare." -#: lib/bds/tui.ex:265 +#: lib/bds/tui.ex:278 #, elixir-autogen, elixir-format msgid "Nothing to repair." msgstr "Niente da riparare." -#: lib/bds/tui.ex:1243 +#: lib/bds/tui.ex:1451 #, elixir-autogen, elixir-format msgid "Orphan files (not in database):" msgstr "File orfani (non presenti nel database):" -#: lib/bds/tui.ex:1259 +#: lib/bds/tui.ex:1467 #, elixir-autogen, elixir-format msgid "Sitemap changed." msgstr "Sitemap modificata." -#: lib/bds/tui.ex:1273 +#: lib/bds/tui.ex:1481 #, elixir-autogen, elixir-format msgid "Updated posts (will be re-rendered):" msgstr "Post aggiornati (verranno rigenerati):" -#: lib/bds/tui.ex:1210 +#: lib/bds/tui.ex:1418 #, elixir-autogen, elixir-format msgid "enter apply changes · esc close" msgstr "invio applica le modifiche · esc chiudi" -#: lib/bds/tui.ex:1205 +#: lib/bds/tui.ex:1413 #, elixir-autogen, elixir-format msgid "enter repair all from files · esc close" msgstr "invio ripara tutto dai file · esc chiudi" -#: lib/bds/tui.ex:619 +#: lib/bds/tui.ex:779 #, elixir-autogen, elixir-format msgid "Imported Blog" msgstr "Blog importato" -#: lib/bds/tui.ex:638 +#: lib/bds/tui.ex:798 #, elixir-autogen, elixir-format msgid "Not a folder: %{path}" msgstr "Non è una cartella: %{path}" -#: lib/bds/tui.ex:1147 +#: lib/bds/tui.ex:1355 #, elixir-autogen, elixir-format msgid "Projects — enter switch · o open existing · esc close" msgstr "Progetti — invio cambia · o apri esistente · esc chiudi" -#: lib/bds/tui.ex:546 +#: lib/bds/tui.ex:706 #, elixir-autogen, elixir-format msgid "Switched to %{name}." msgstr "Passato a %{name}." -#: lib/bds/tui.ex:1175 +#: lib/bds/tui.ex:1383 #, elixir-autogen, elixir-format msgid "Matching folders" msgstr "Cartelle corrispondenti" -#: lib/bds/tui.ex:1113 +#: lib/bds/tui.ex:1321 #, elixir-autogen, elixir-format msgid "Open Existing Blog — type a folder path · tab complete · enter open · esc back" msgstr "Apri blog esistente — digita il percorso di una cartella · tab completa · invio apri · esc indietro" -#: lib/bds/tui.ex:1298 -#, elixir-autogen, elixir-format -msgid "enter open · n new post · 1-5 views · p projects · / search · : commands (:? help) · r refresh · ctrl+q quit" -msgstr "invio apri · n nuovo post · 1-5 viste · p progetti · / cerca · : comandi (:? aiuto) · r aggiorna · ctrl+q esci" - -#: lib/bds/tui.ex:321 +#: lib/bds/tui.ex:334 #, elixir-autogen, elixir-format msgid "Commit message required." msgstr "Messaggio di commit obbligatorio." -#: lib/bds/tui.ex:327 +#: lib/bds/tui.ex:340 #, elixir-autogen, elixir-format msgid "Committed." msgstr "Commit eseguito." -#: lib/bds/tui.ex:960 +#: lib/bds/tui.ex:1165 #, elixir-autogen, elixir-format msgid "Diff (pgup/pgdn scroll)" msgstr "Diff (pgup/pgdn per scorrere)" -#: lib/bds/tui.ex:1333 +#: lib/bds/tui.ex:1548 #, elixir-autogen, elixir-format msgid "No changes." msgstr "Nessuna modifica." -#: lib/bds/tui.ex:387 +#: lib/bds/tui.ex:400 #, elixir-autogen, elixir-format msgid "No diff for this file." msgstr "Nessun diff per questo file." -#: lib/bds/tui.ex:375 -#: lib/bds/tui.ex:947 +#: lib/bds/tui.ex:388 +#: lib/bds/tui.ex:1152 #, elixir-autogen, elixir-format msgid "Not a git repository." msgstr "Non è un repository git." -#: lib/bds/tui.ex:1291 +#: lib/bds/ui/settings_form.ex:73 #, elixir-autogen, elixir-format -msgid "c commit · u pull · s push · enter jump to file · pgup/pgdn scroll diff · 1-5 views · ctrl+q quit" -msgstr "c commit · u pull · s push · invio vai al file · pgup/pgdn scorri il diff · 1-5 viste · ctrl+q esci" +msgid "Blog Languages (comma-separated)" +msgstr "Lingue del blog (separate da virgola)" + +#: lib/bds/ui/settings_form.ex:215 +#, elixir-autogen, elixir-format +msgid "Data Folder" +msgstr "Cartella dati" + +#: lib/bds/ui/settings_form.ex:218 +#, elixir-autogen, elixir-format +msgid "Maintenance" +msgstr "Manutenzione" + +#: lib/bds/ui/settings_form.ex:45 +#, elixir-autogen, elixir-format +msgid "Name" +msgstr "Nome" + +#: lib/bds/ui/settings_form.ex:138 +#, elixir-autogen, elixir-format +msgid "New Category" +msgstr "Nuova categoria" + +#: lib/bds/ui/settings_form.ex:170 +#, elixir-autogen, elixir-format +msgid "Offline Chat Disable Reasoning" +msgstr "Chat offline: disattiva il ragionamento" + +#: lib/bds/ui/settings_form.ex:167 +#, elixir-autogen, elixir-format +msgid "Offline Chat Tool Calls" +msgstr "Chat offline: chiamate agli strumenti" + +#: lib/bds/ui/settings_form.ex:176 +#, elixir-autogen, elixir-format +msgid "Offline Image Model" +msgstr "Modello immagini offline" + +#: lib/bds/ui/settings_form.ex:154 +#, elixir-autogen, elixir-format +msgid "Online Chat Disable Reasoning" +msgstr "Chat online: disattiva il ragionamento" + +#: lib/bds/ui/settings_form.ex:151 +#, elixir-autogen, elixir-format +msgid "Online Chat Tool Calls" +msgstr "Chat online: chiamate agli strumenti" + +#: lib/bds/ui/settings_form.ex:160 +#, elixir-autogen, elixir-format +msgid "Online Image Model" +msgstr "Modello immagini online" + +#: lib/bds/ui/settings_form.ex:57 +#, elixir-autogen, elixir-format +msgid "Posts per Page" +msgstr "Post per pagina" + +#: lib/bds/ui/settings_form.ex:219 +#, elixir-autogen, elixir-format +msgid "Rebuild and maintenance commands are available under the : prompt." +msgstr "I comandi di ricostruzione e manutenzione sono disponibili tramite il prompt :." + +#: lib/bds/ui/settings_form.ex:200 +#, elixir-autogen, elixir-format +msgid "SSH Host" +msgstr "Host SSH" + +#: lib/bds/ui/settings_form.ex:202 +#, elixir-autogen, elixir-format +msgid "SSH Remote Path" +msgstr "Percorso remoto SSH" + +#: lib/bds/ui/settings_form.ex:201 +#, elixir-autogen, elixir-format +msgid "SSH User" +msgstr "Utente SSH" + +#: lib/bds/ui/settings_form.ex:119 +#, elixir-autogen, elixir-format +msgid "Show Title" +msgstr "Mostra titolo" + +#: lib/bds/ui/settings_form.ex:242 +#, elixir-autogen, elixir-format +msgid "Theme" +msgstr "Tema" + +#: lib/bds/tui.ex:1136 +#, elixir-autogen, elixir-format +msgid "enter edit · ctrl+s save · esc close" +msgstr "invio modifica · ctrl+s salva · esc chiudi" + +#: lib/bds/tui.ex:1499 +#, elixir-autogen, elixir-format +msgid "enter edit/toggle/cycle · ctrl+s save · esc close · ctrl+q quit" +msgstr "invio modifica/attiva/cicla · ctrl+s salva · esc chiudi · ctrl+q esci" + +#: lib/bds/ui/settings_form.ex:230 +#, elixir-autogen, elixir-format +msgid "not supported yet" +msgstr "non ancora supportato" + +#: lib/bds/tui.ex:1506 +#, elixir-autogen, elixir-format +msgid "c commit · u pull · s push · enter jump to file · pgup/pgdn scroll diff · 1-7 views · ctrl+q quit" +msgstr "c commit · u pull · s push · invio vai al file · pgup/pgdn scorri il diff · 1-7 viste · ctrl+q esci" + +#: lib/bds/tui.ex:1513 +#, elixir-autogen, elixir-format +msgid "enter open · n new post · 1-7 views · p projects · / search · : commands (:? help) · r refresh · ctrl+q quit" +msgstr "invio apri · n nuovo post · 1-7 viste · p progetti · / cerca · : comandi (:? aiuto) · r aggiorna · ctrl+q esci" diff --git a/priv/gettext/ui.pot b/priv/gettext/ui.pot index 5764463..2fc87c1 100644 --- a/priv/gettext/ui.pot +++ b/priv/gettext/ui.pot @@ -72,6 +72,7 @@ msgid "--" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:220 +#: lib/bds/ui/settings_form.ex:145 #: lib/bds/ui/sidebar.ex:802 #, elixir-autogen, elixir-format msgid "AI" @@ -84,8 +85,8 @@ msgid "AI Assistant" msgstr "" #: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:93 -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:193 -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:211 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:203 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:221 #, elixir-autogen, elixir-format msgid "AI Settings" msgstr "" @@ -94,11 +95,11 @@ msgstr "" #: lib/bds/desktop/shell_live/overlay_manager.ex:72 #: lib/bds/desktop/shell_live/post_editor.ex:920 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43 -#: lib/bds/tui.ex:780 -#: lib/bds/tui.ex:783 -#: lib/bds/tui.ex:786 -#: lib/bds/tui.ex:794 -#: lib/bds/tui.ex:1523 +#: lib/bds/tui.ex:937 +#: lib/bds/tui.ex:940 +#: lib/bds/tui.ex:943 +#: lib/bds/tui.ex:951 +#: lib/bds/tui.ex:1753 #, elixir-autogen, elixir-format msgid "AI Suggestions" msgstr "" @@ -176,6 +177,7 @@ msgid "Agent configuration files for the built-in bDS MCP server" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:273 +#: lib/bds/ui/settings_form.ex:146 #, elixir-autogen, elixir-format msgid "Airplane Mode" msgstr "" @@ -427,6 +429,7 @@ msgid "Blogmark Bookmarklet" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:90 +#: lib/bds/ui/settings_form.ex:67 #, elixir-autogen, elixir-format msgid "Blogmark Category" msgstr "" @@ -585,7 +588,7 @@ msgid "Collapse unchanged diff hunks" msgstr "" #: lib/bds/desktop/shell_live/overlay_manager.ex:422 -#: lib/bds/tui.ex:1619 +#: lib/bds/tui.ex:1849 #, elixir-autogen, elixir-format msgid "Command completed" msgstr "" @@ -603,7 +606,8 @@ msgstr "" #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:375 #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:34 #: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:32 -#: lib/bds/tui.ex:1014 +#: lib/bds/tui.ex:1219 +#: lib/bds/ui/settings_form.ex:137 #: lib/bds/ui/sidebar.ex:801 #, elixir-autogen, elixir-format msgid "Content" @@ -691,6 +695,7 @@ msgstr "" msgid "Dashboard" msgstr "" +#: lib/bds/ui/settings_form.ex:214 #: lib/bds/ui/sidebar.ex:815 #, elixir-autogen, elixir-format msgid "Data" @@ -719,11 +724,13 @@ msgid "Default" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:78 +#: lib/bds/ui/settings_form.ex:54 #, elixir-autogen, elixir-format msgid "Default Author" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:119 +#: lib/bds/ui/settings_form.ex:88 #, elixir-autogen, elixir-format msgid "Default Editor Mode" msgstr "" @@ -789,6 +796,7 @@ msgid "Deployment credentials for upload tasks" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:38 +#: lib/bds/ui/settings_form.ex:46 #, elixir-autogen, elixir-format msgid "Description" msgstr "" @@ -811,6 +819,7 @@ msgid "Detect Language" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:129 +#: lib/bds/ui/settings_form.ex:93 #, elixir-autogen, elixir-format msgid "Diff View Style" msgstr "" @@ -926,6 +935,7 @@ msgstr "" #: lib/bds/desktop/shell_live/index.html.heex:513 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:114 +#: lib/bds/ui/settings_form.ex:87 #: lib/bds/ui/sidebar.ex:800 #, elixir-autogen, elixir-format msgid "Editor" @@ -1043,7 +1053,7 @@ msgid "Filename" msgstr "" #: lib/bds/desktop/menu_bar.ex:254 -#: lib/bds/tui.ex:1583 +#: lib/bds/tui.ex:1813 #, elixir-autogen, elixir-format msgid "Fill Missing Translations" msgstr "" @@ -1054,7 +1064,7 @@ msgid "Find" msgstr "" #: lib/bds/desktop/menu_bar.ex:255 -#: lib/bds/tui.ex:1586 +#: lib/bds/tui.ex:1816 #, elixir-autogen, elixir-format msgid "Find Duplicate Posts" msgstr "" @@ -1081,14 +1091,14 @@ msgid "Gallery" msgstr "" #: lib/bds/desktop/menu_bar.ex:256 -#: lib/bds/tui.ex:1567 +#: lib/bds/tui.ex:1797 #, elixir-autogen, elixir-format msgid "Generate Site" msgstr "" #: lib/bds/desktop/shell_live.ex:792 #: lib/bds/desktop/shell_live/socket_state.ex:109 -#: lib/bds/tui.ex:1440 +#: lib/bds/tui.ex:1662 #: lib/bds/ui/sidebar.ex:826 #, elixir-autogen, elixir-format msgid "Git" @@ -1113,6 +1123,7 @@ msgid "Help" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:142 +#: lib/bds/ui/settings_form.ex:100 #, elixir-autogen, elixir-format msgid "Hide Unchanged Regions" msgstr "" @@ -1334,6 +1345,7 @@ msgid "Links To" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:162 +#: lib/bds/ui/settings_form.ex:128 #, elixir-autogen, elixir-format msgid "List Template" msgstr "" @@ -1346,6 +1358,7 @@ msgstr "" #: lib/bds/desktop/shell_live/settings_editor/mcp_config.ex:50 #: lib/bds/desktop/shell_live/settings_editor/mcp_config.ex:57 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:351 +#: lib/bds/ui/settings_form.ex:234 #: lib/bds/ui/sidebar.ex:816 #, elixir-autogen, elixir-format msgid "MCP" @@ -1363,6 +1376,7 @@ msgstr "" #: lib/bds/desktop/shell_data.ex:103 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:55 +#: lib/bds/ui/settings_form.ex:50 #, elixir-autogen, elixir-format msgid "Main Language" msgstr "" @@ -1403,9 +1417,9 @@ msgstr "" #: lib/bds/desktop/shell_live/misc_editor.ex:762 #: lib/bds/desktop/shell_live/sidebar_components.ex:654 #: lib/bds/desktop/shell_live/sidebar_delete.ex:175 -#: lib/bds/tui.ex:1436 -#: lib/bds/tui.ex:1648 -#: lib/bds/tui.ex:1651 +#: lib/bds/tui.ex:1657 +#: lib/bds/tui.ex:1878 +#: lib/bds/tui.ex:1881 #: lib/bds/ui/registry.ex:30 #: lib/bds/ui/registry.ex:100 #: lib/bds/ui/sidebar.ex:578 @@ -1448,11 +1462,11 @@ msgstr "" #: lib/bds/desktop/shell_live/misc_editor.ex:214 #: lib/bds/desktop/shell_live/misc_editor.ex:226 #: lib/bds/desktop/shell_live/misc_editor.ex:448 -#: lib/bds/tui.ex:265 -#: lib/bds/tui.ex:271 -#: lib/bds/tui.ex:282 -#: lib/bds/tui.ex:1204 -#: lib/bds/tui.ex:1564 +#: lib/bds/tui.ex:278 +#: lib/bds/tui.ex:284 +#: lib/bds/tui.ex:295 +#: lib/bds/tui.ex:1412 +#: lib/bds/tui.ex:1794 #: lib/bds/ui/registry.ex:111 #, elixir-autogen, elixir-format msgid "Metadata Diff" @@ -1498,7 +1512,7 @@ msgstr "" #: lib/bds/desktop/menu_bar.ex:214 #: lib/bds/desktop/shell_live/sidebar_create.ex:41 -#: lib/bds/tui.ex:221 +#: lib/bds/tui.ex:232 #, elixir-autogen, elixir-format msgid "New Post" msgstr "" @@ -1684,11 +1698,13 @@ msgid "Offline" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:269 +#: lib/bds/ui/settings_form.ex:165 #, elixir-autogen, elixir-format msgid "Offline API Key" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:277 +#: lib/bds/ui/settings_form.ex:166 #, elixir-autogen, elixir-format msgid "Offline Chat Model" msgstr "" @@ -1704,6 +1720,7 @@ msgid "Offline Chat Tools" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:260 +#: lib/bds/ui/settings_form.ex:164 #, elixir-autogen, elixir-format msgid "Offline Endpoint URL" msgstr "" @@ -1714,21 +1731,25 @@ msgid "Offline Image Analysis Model" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:297 +#: lib/bds/ui/settings_form.ex:179 #, elixir-autogen, elixir-format msgid "Offline Image Support" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:289 +#: lib/bds/ui/settings_form.ex:173 #, elixir-autogen, elixir-format msgid "Offline Title Model" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:232 +#: lib/bds/ui/settings_form.ex:149 #, elixir-autogen, elixir-format msgid "Online API Key" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:236 +#: lib/bds/ui/settings_form.ex:150 #, elixir-autogen, elixir-format msgid "Online Chat Model" msgstr "" @@ -1744,6 +1765,7 @@ msgid "Online Chat Tools" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:223 +#: lib/bds/ui/settings_form.ex:148 #, elixir-autogen, elixir-format msgid "Online Endpoint URL" msgstr "" @@ -1754,11 +1776,13 @@ msgid "Online Image Analysis Model" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:256 +#: lib/bds/ui/settings_form.ex:163 #, elixir-autogen, elixir-format msgid "Online Image Support" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:248 +#: lib/bds/ui/settings_form.ex:157 #, elixir-autogen, elixir-format msgid "Online Title Model" msgstr "" @@ -1776,8 +1800,8 @@ msgid "Open Data Folder" msgstr "" #: lib/bds/desktop/shell_live/index.html.heex:644 -#: lib/bds/tui.ex:632 -#: lib/bds/tui.ex:637 +#: lib/bds/tui.ex:792 +#: lib/bds/tui.ex:797 #, elixir-autogen, elixir-format msgid "Open Existing Blog" msgstr "" @@ -1789,7 +1813,7 @@ msgid "Open Settings" msgstr "" #: lib/bds/desktop/menu_bar.ex:217 -#: lib/bds/tui.ex:1588 +#: lib/bds/tui.ex:1818 #, elixir-autogen, elixir-format msgid "Open in Browser" msgstr "" @@ -1915,6 +1939,7 @@ msgid "Post Slug Conflicts" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:161 +#: lib/bds/ui/settings_form.ex:122 #, elixir-autogen, elixir-format msgid "Post Template" msgstr "" @@ -1937,8 +1962,8 @@ msgstr "" #: lib/bds/desktop/menu_bar.ex:233 #: lib/bds/desktop/shell_live/misc_editor.ex:664 #: lib/bds/desktop/shell_live/misc_editor.ex:761 -#: lib/bds/tui.ex:1435 -#: lib/bds/tui.ex:1447 +#: lib/bds/tui.ex:1656 +#: lib/bds/tui.ex:1671 #: lib/bds/ui/registry.ex:14 #: lib/bds/ui/sidebar.ex:271 #, elixir-autogen, elixir-format @@ -1980,6 +2005,7 @@ msgstr "" #: lib/bds/desktop/shell_live/misc_editor.ex:739 #: lib/bds/desktop/shell_live/misc_editor.ex:765 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:27 +#: lib/bds/ui/settings_form.ex:44 #: lib/bds/ui/sidebar.ex:799 #, elixir-autogen, elixir-format msgid "Project" @@ -1997,8 +2023,8 @@ msgstr "" #: lib/bds/desktop/shell_live/chat_surface.ex:15 #: lib/bds/desktop/shell_live/index.html.heex:623 -#: lib/bds/tui.ex:545 -#: lib/bds/tui.ex:550 +#: lib/bds/tui.ex:705 +#: lib/bds/tui.ex:710 #, elixir-autogen, elixir-format msgid "Projects" msgstr "" @@ -2009,6 +2035,7 @@ msgid "Protected categories cannot be removed" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:51 +#: lib/bds/ui/settings_form.ex:47 #, elixir-autogen, elixir-format msgid "Public URL" msgstr "" @@ -2042,6 +2069,7 @@ msgstr "" #: lib/bds/desktop/shell_live/settings_editor/publishing_settings.ex:40 #: lib/bds/desktop/shell_live/settings_editor/publishing_settings.ex:57 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:338 +#: lib/bds/ui/settings_form.ex:199 #: lib/bds/ui/sidebar.ex:811 #, elixir-autogen, elixir-format msgid "Publishing" @@ -2064,15 +2092,15 @@ msgid "Ready to import:" msgstr "" #: lib/bds/desktop/menu_bar.ex:248 -#: lib/bds/tui.ex:629 -#: lib/bds/tui.ex:1568 +#: lib/bds/tui.ex:789 +#: lib/bds/tui.ex:1798 #, elixir-autogen, elixir-format msgid "Rebuild Database" msgstr "" #: lib/bds/desktop/menu_bar.ex:250 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:381 -#: lib/bds/tui.ex:1572 +#: lib/bds/tui.ex:1802 #, elixir-autogen, elixir-format msgid "Rebuild Embedding Index" msgstr "" @@ -2130,7 +2158,7 @@ msgid "Refresh Translation" msgstr "" #: lib/bds/desktop/menu_bar.ex:252 -#: lib/bds/tui.ex:1575 +#: lib/bds/tui.ex:1805 #, elixir-autogen, elixir-format msgid "Regenerate Calendar" msgstr "" @@ -2141,7 +2169,7 @@ msgid "Regenerate Missing Thumbnails" msgstr "" #: lib/bds/desktop/menu_bar.ex:249 -#: lib/bds/tui.ex:1569 +#: lib/bds/tui.ex:1799 #, elixir-autogen, elixir-format msgid "Reindex Text" msgstr "" @@ -2173,6 +2201,7 @@ msgid "Remove tag" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:159 +#: lib/bds/ui/settings_form.ex:118 #, elixir-autogen, elixir-format msgid "Render in Lists" msgstr "" @@ -2250,6 +2279,7 @@ msgid "Run" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:340 +#: lib/bds/ui/settings_form.ex:203 #, elixir-autogen, elixir-format msgid "SSH Mode" msgstr "" @@ -2327,7 +2357,7 @@ msgstr "" #: lib/bds/desktop/shell_live/script_editor.ex:216 #: lib/bds/desktop/shell_live/script_editor.ex:219 #: lib/bds/desktop/shell_live/script_editor.ex:234 -#: lib/bds/tui.ex:1438 +#: lib/bds/tui.ex:1659 #: lib/bds/ui/registry.ex:38 #: lib/bds/ui/sidebar.ex:63 #: lib/bds/ui/sidebar.ex:115 @@ -2426,12 +2456,15 @@ msgid "Selected pairs dismissed" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:324 +#: lib/bds/ui/settings_form.ex:78 +#: lib/bds/ui/settings_form.ex:189 #, elixir-autogen, elixir-format msgid "Semantic Similarity" msgstr "" #: lib/bds/desktop/shell_live/settings_editor/project_settings.ex:60 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:11 +#: lib/bds/tui.ex:1661 #: lib/bds/ui/registry.ex:86 #: lib/bds/ui/registry.ex:101 #: lib/bds/ui/sidebar.ex:795 @@ -2455,9 +2488,9 @@ msgid "Site" msgstr "" #: lib/bds/desktop/shell_live/misc_editor.ex:412 -#: lib/bds/tui.ex:298 -#: lib/bds/tui.ex:300 -#: lib/bds/tui.ex:1209 +#: lib/bds/tui.ex:311 +#: lib/bds/tui.ex:313 +#: lib/bds/tui.ex:1417 #: lib/bds/ui/registry.ex:125 #, elixir-autogen, elixir-format msgid "Site Validation" @@ -2521,6 +2554,7 @@ msgstr "" #: lib/bds/desktop/shell_live/settings_editor/style_editor.ex:76 #: lib/bds/desktop/shell_live/settings_editor_html/style_editor.html.heex:3 #: lib/bds/ui/registry.ex:102 +#: lib/bds/ui/settings_form.ex:241 #: lib/bds/ui/sidebar.ex:817 #, elixir-autogen, elixir-format msgid "Style" @@ -2547,6 +2581,7 @@ msgid "Syntax is valid" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:301 +#: lib/bds/ui/settings_form.ex:147 #, elixir-autogen, elixir-format msgid "System Prompt" msgstr "" @@ -2578,7 +2613,7 @@ msgstr "" #: lib/bds/desktop/shell_live/tags_editor.ex:222 #: lib/bds/desktop/shell_live/tags_editor.ex:253 #: lib/bds/desktop/shell_live/tags_editor_html/tags_editor.html.heex:11 -#: lib/bds/tui.ex:1439 +#: lib/bds/tui.ex:1660 #: lib/bds/ui/registry.ex:54 #: lib/bds/ui/registry.ex:103 #: lib/bds/ui/sidebar.ex:289 @@ -2590,12 +2625,13 @@ msgstr "" #: lib/bds/desktop/shell_live.ex:786 #: lib/bds/desktop/shell_live/panel_renderer.ex:54 -#: lib/bds/tui.ex:828 +#: lib/bds/tui.ex:985 #, elixir-autogen, elixir-format msgid "Tasks" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:321 +#: lib/bds/ui/settings_form.ex:186 #: lib/bds/ui/sidebar.ex:805 #, elixir-autogen, elixir-format msgid "Technology" @@ -2635,7 +2671,7 @@ msgstr "" #: lib/bds/desktop/shell_live/template_editor.ex:171 #: lib/bds/desktop/shell_live/template_editor.ex:176 #: lib/bds/desktop/shell_live/template_editor.ex:191 -#: lib/bds/tui.ex:1437 +#: lib/bds/tui.ex:1658 #: lib/bds/ui/registry.ex:46 #: lib/bds/ui/sidebar.ex:71 #: lib/bds/ui/sidebar.ex:122 @@ -2681,6 +2717,7 @@ msgstr "" #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:23 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:158 #: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:22 +#: lib/bds/ui/settings_form.ex:117 #, elixir-autogen, elixir-format msgid "Title" msgstr "" @@ -2858,7 +2895,7 @@ msgid "Updated URLs" msgstr "" #: lib/bds/desktop/menu_bar.ex:259 -#: lib/bds/tui.ex:1587 +#: lib/bds/tui.ex:1817 #, elixir-autogen, elixir-format msgid "Upload Site" msgstr "" @@ -2886,13 +2923,13 @@ msgid "Validate" msgstr "" #: lib/bds/desktop/menu_bar.ex:258 -#: lib/bds/tui.ex:1565 +#: lib/bds/tui.ex:1795 #, elixir-autogen, elixir-format msgid "Validate Site" msgstr "" #: lib/bds/desktop/menu_bar.ex:253 -#: lib/bds/tui.ex:1578 +#: lib/bds/tui.ex:1808 #, elixir-autogen, elixir-format msgid "Validate Translations" msgstr "" @@ -2936,6 +2973,7 @@ msgid "Working tree and history" msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:138 +#: lib/bds/ui/settings_form.ex:97 #, elixir-autogen, elixir-format msgid "Wrap Long Lines" msgstr "" @@ -3294,6 +3332,7 @@ msgid "End-user guidance for editorial workflows, media, templates, translation, msgstr "" #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:86 +#: lib/bds/ui/settings_form.ex:62 #, elixir-autogen, elixir-format msgid "Image Import Concurrency" msgstr "" @@ -3363,15 +3402,15 @@ msgstr "" #: lib/bds/desktop/shell_live/git_handler.ex:46 #: lib/bds/desktop/shell_live/git_handler.ex:52 #: lib/bds/desktop/shell_live/sidebar_components.ex:556 -#: lib/bds/tui.ex:321 -#: lib/bds/tui.ex:327 -#: lib/bds/tui.ex:330 +#: lib/bds/tui.ex:334 +#: lib/bds/tui.ex:340 +#: lib/bds/tui.ex:343 #, elixir-autogen, elixir-format msgid "Commit" msgstr "" #: lib/bds/desktop/shell_live/sidebar_components.ex:555 -#: lib/bds/tui.ex:1031 +#: lib/bds/tui.ex:1239 #, elixir-autogen, elixir-format msgid "Commit message" msgstr "" @@ -3395,6 +3434,7 @@ msgid "Fetch" msgstr "" #: lib/bds/desktop/shell_live/sidebar_components.ex:586 +#: lib/bds/tui.ex:1074 #, elixir-autogen, elixir-format msgid "History" msgstr "" @@ -3442,7 +3482,7 @@ msgstr "" #: lib/bds/desktop/shell_live/git_handler.ex:17 #: lib/bds/desktop/shell_live/sidebar_components.ex:543 #: lib/bds/desktop/shell_live/sidebar_components.ex:543 -#: lib/bds/tui.ex:800 +#: lib/bds/tui.ex:957 #, elixir-autogen, elixir-format msgid "Pull" msgstr "" @@ -3450,7 +3490,7 @@ msgstr "" #: lib/bds/desktop/shell_live/git_handler.ex:18 #: lib/bds/desktop/shell_live/sidebar_components.ex:544 #: lib/bds/desktop/shell_live/sidebar_components.ex:544 -#: lib/bds/tui.ex:801 +#: lib/bds/tui.ex:958 #, elixir-autogen, elixir-format msgid "Push" msgstr "" @@ -3563,7 +3603,7 @@ msgid "Suggested tags" msgstr "" #: lib/bds/desktop/menu_bar.ex:257 -#: lib/bds/tui.ex:1566 +#: lib/bds/tui.ex:1796 #, elixir-autogen, elixir-format msgid "Force Render Site" msgstr "" @@ -3630,7 +3670,7 @@ msgstr "" msgid "git push" msgstr "" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:159 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:112 #, elixir-autogen, elixir-format msgid "AI settings saved." msgstr "" @@ -3640,12 +3680,12 @@ msgstr "" msgid "Could not load models" msgstr "" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:190 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:200 #, elixir-autogen, elixir-format msgid "Could not save AI settings" msgstr "" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:184 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:194 #, elixir-autogen, elixir-format msgid "Loaded %{count} models." msgstr "" @@ -3655,87 +3695,88 @@ msgstr "" msgid "OK" msgstr "" -#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:174 +#: lib/bds/desktop/shell_live/settings_editor/ai_settings.ex:184 #, elixir-autogen, elixir-format msgid "The endpoint returned no models. You can still type a model name manually." msgstr "" -#: lib/bds/tui.ex:1524 +#: lib/bds/tui.ex:1754 #, elixir-autogen, elixir-format msgid "AI is unavailable in airplane mode without a local endpoint." msgstr "" -#: lib/bds/tui.ex:1651 +#: lib/bds/tui.ex:1881 #, elixir-autogen, elixir-format msgid "Could not load this file." msgstr "" -#: lib/bds/tui.ex:230 +#: lib/bds/tui.ex:243 #, elixir-autogen, elixir-format msgid "Editing this item is not available in the terminal UI yet." msgstr "" -#: lib/bds/tui.ex:783 +#: lib/bds/tui.ex:940 #, elixir-autogen, elixir-format msgid "No suggestions returned." msgstr "" -#: lib/bds/tui.ex:1648 +#: lib/bds/tui.ex:1878 #, elixir-autogen, elixir-format msgid "Only images can be previewed." msgstr "" -#: lib/bds/tui.ex:1447 +#: lib/bds/tui.ex:1671 #, elixir-autogen, elixir-format msgid "Post not found." msgstr "" -#: lib/bds/tui.ex:969 +#: lib/bds/tui.ex:1174 #, elixir-autogen, elixir-format msgid "Press enter to preview %{name}." msgstr "" -#: lib/bds/tui.ex:1494 +#: lib/bds/tui.ex:1724 #, elixir-autogen, elixir-format msgid "Published." msgstr "" -#: lib/bds/tui.ex:1510 +#: lib/bds/tui.ex:1740 #, elixir-autogen, elixir-format msgid "Save before switching languages." msgstr "" -#: lib/bds/tui.ex:1495 +#: lib/bds/tui.ex:524 +#: lib/bds/tui.ex:1725 #, elixir-autogen, elixir-format msgid "Saved." msgstr "" -#: lib/bds/tui.ex:972 +#: lib/bds/tui.ex:1177 #, elixir-autogen, elixir-format msgid "Select an entry and press enter to open it." msgstr "" -#: lib/bds/tui.ex:780 +#: lib/bds/tui.ex:937 #, elixir-autogen, elixir-format msgid "Suggestions applied." msgstr "" -#: lib/bds/tui.ex:984 +#: lib/bds/tui.ex:1189 #, elixir-autogen, elixir-format msgid "Title (ctrl+t to edit)" msgstr "" -#: lib/bds/tui.ex:983 +#: lib/bds/tui.ex:1188 #, elixir-autogen, elixir-format msgid "Title (editing — enter to confirm)" msgstr "" -#: lib/bds/tui.ex:1033 +#: lib/bds/tui.ex:1241 #, elixir-autogen, elixir-format msgid "Working…" msgstr "" -#: lib/bds/tui.ex:1055 +#: lib/bds/tui.ex:1263 #, elixir-autogen, elixir-format msgid "esc to close" msgstr "" @@ -3772,158 +3813,263 @@ msgstr "" msgid "Use the form user@host or user@host:port." msgstr "" -#: lib/bds/tui.ex:1003 +#: lib/bds/tui.ex:1208 #, elixir-autogen, elixir-format msgid "Preview (ctrl+e to edit)" msgstr "" -#: lib/bds/tui.ex:1305 +#: lib/bds/tui.ex:1520 #, elixir-autogen, elixir-format msgid "ctrl+s save · ctrl+p publish · ctrl+e preview · ctrl+t title · ctrl+l language · ctrl+g AI · esc back" msgstr "" -#: lib/bds/tui.ex:828 +#: lib/bds/tui.ex:985 #, elixir-autogen, elixir-format msgid "All tasks finished." msgstr "" -#: lib/bds/tui.ex:1081 +#: lib/bds/tui.ex:1289 #, elixir-autogen, elixir-format msgid "Commands — esc to close" msgstr "" -#: lib/bds/tui.ex:654 +#: lib/bds/tui.ex:814 #, elixir-autogen, elixir-format msgid "Unknown command." msgstr "" -#: lib/bds/tui.ex:1071 +#: lib/bds/tui.ex:1279 #, elixir-autogen, elixir-format msgid "[report/apply in GUI]" msgstr "" -#: lib/bds/tui.ex:1220 +#: lib/bds/tui.ex:1428 #, elixir-autogen, elixir-format msgid "%{diffs} differences · %{orphans} orphan files" msgstr "" -#: lib/bds/tui.ex:1252 +#: lib/bds/tui.ex:1460 #, elixir-autogen, elixir-format msgid "Expected %{expected} · Existing %{existing}" msgstr "" -#: lib/bds/tui.ex:1269 +#: lib/bds/tui.ex:1477 #, elixir-autogen, elixir-format msgid "Extra files (will be removed):" msgstr "" -#: lib/bds/tui.ex:1265 +#: lib/bds/tui.ex:1473 #, elixir-autogen, elixir-format msgid "Missing pages (will be rendered):" msgstr "" -#: lib/bds/tui.ex:298 +#: lib/bds/tui.ex:311 #, elixir-autogen, elixir-format msgid "Nothing to apply." msgstr "" -#: lib/bds/tui.ex:265 +#: lib/bds/tui.ex:278 #, elixir-autogen, elixir-format msgid "Nothing to repair." msgstr "" -#: lib/bds/tui.ex:1243 +#: lib/bds/tui.ex:1451 #, elixir-autogen, elixir-format msgid "Orphan files (not in database):" msgstr "" -#: lib/bds/tui.ex:1259 +#: lib/bds/tui.ex:1467 #, elixir-autogen, elixir-format msgid "Sitemap changed." msgstr "" -#: lib/bds/tui.ex:1273 +#: lib/bds/tui.ex:1481 #, elixir-autogen, elixir-format msgid "Updated posts (will be re-rendered):" msgstr "" -#: lib/bds/tui.ex:1210 +#: lib/bds/tui.ex:1418 #, elixir-autogen, elixir-format msgid "enter apply changes · esc close" msgstr "" -#: lib/bds/tui.ex:1205 +#: lib/bds/tui.ex:1413 #, elixir-autogen, elixir-format msgid "enter repair all from files · esc close" msgstr "" -#: lib/bds/tui.ex:619 +#: lib/bds/tui.ex:779 #, elixir-autogen, elixir-format msgid "Imported Blog" msgstr "" -#: lib/bds/tui.ex:638 +#: lib/bds/tui.ex:798 #, elixir-autogen, elixir-format msgid "Not a folder: %{path}" msgstr "" -#: lib/bds/tui.ex:1147 +#: lib/bds/tui.ex:1355 #, elixir-autogen, elixir-format msgid "Projects — enter switch · o open existing · esc close" msgstr "" -#: lib/bds/tui.ex:546 +#: lib/bds/tui.ex:706 #, elixir-autogen, elixir-format msgid "Switched to %{name}." msgstr "" -#: lib/bds/tui.ex:1175 +#: lib/bds/tui.ex:1383 #, elixir-autogen, elixir-format msgid "Matching folders" msgstr "" -#: lib/bds/tui.ex:1113 +#: lib/bds/tui.ex:1321 #, elixir-autogen, elixir-format msgid "Open Existing Blog — type a folder path · tab complete · enter open · esc back" msgstr "" -#: lib/bds/tui.ex:1298 -#, elixir-autogen, elixir-format -msgid "enter open · n new post · 1-5 views · p projects · / search · : commands (:? help) · r refresh · ctrl+q quit" -msgstr "" - -#: lib/bds/tui.ex:321 +#: lib/bds/tui.ex:334 #, elixir-autogen, elixir-format msgid "Commit message required." msgstr "" -#: lib/bds/tui.ex:327 +#: lib/bds/tui.ex:340 #, elixir-autogen, elixir-format msgid "Committed." msgstr "" -#: lib/bds/tui.ex:960 +#: lib/bds/tui.ex:1165 #, elixir-autogen, elixir-format msgid "Diff (pgup/pgdn scroll)" msgstr "" -#: lib/bds/tui.ex:1333 +#: lib/bds/tui.ex:1548 #, elixir-autogen, elixir-format msgid "No changes." msgstr "" -#: lib/bds/tui.ex:387 +#: lib/bds/tui.ex:400 #, elixir-autogen, elixir-format msgid "No diff for this file." msgstr "" -#: lib/bds/tui.ex:375 -#: lib/bds/tui.ex:947 +#: lib/bds/tui.ex:388 +#: lib/bds/tui.ex:1152 #, elixir-autogen, elixir-format msgid "Not a git repository." msgstr "" -#: lib/bds/tui.ex:1291 +#: lib/bds/ui/settings_form.ex:73 #, elixir-autogen, elixir-format -msgid "c commit · u pull · s push · enter jump to file · pgup/pgdn scroll diff · 1-5 views · ctrl+q quit" +msgid "Blog Languages (comma-separated)" +msgstr "" + +#: lib/bds/ui/settings_form.ex:215 +#, elixir-autogen, elixir-format +msgid "Data Folder" +msgstr "" + +#: lib/bds/ui/settings_form.ex:218 +#, elixir-autogen, elixir-format +msgid "Maintenance" +msgstr "" + +#: lib/bds/ui/settings_form.ex:45 +#, elixir-autogen, elixir-format +msgid "Name" +msgstr "" + +#: lib/bds/ui/settings_form.ex:138 +#, elixir-autogen, elixir-format +msgid "New Category" +msgstr "" + +#: lib/bds/ui/settings_form.ex:170 +#, elixir-autogen, elixir-format +msgid "Offline Chat Disable Reasoning" +msgstr "" + +#: lib/bds/ui/settings_form.ex:167 +#, elixir-autogen, elixir-format +msgid "Offline Chat Tool Calls" +msgstr "" + +#: lib/bds/ui/settings_form.ex:176 +#, elixir-autogen, elixir-format +msgid "Offline Image Model" +msgstr "" + +#: lib/bds/ui/settings_form.ex:154 +#, elixir-autogen, elixir-format +msgid "Online Chat Disable Reasoning" +msgstr "" + +#: lib/bds/ui/settings_form.ex:151 +#, elixir-autogen, elixir-format +msgid "Online Chat Tool Calls" +msgstr "" + +#: lib/bds/ui/settings_form.ex:160 +#, elixir-autogen, elixir-format +msgid "Online Image Model" +msgstr "" + +#: lib/bds/ui/settings_form.ex:57 +#, elixir-autogen, elixir-format +msgid "Posts per Page" +msgstr "" + +#: lib/bds/ui/settings_form.ex:219 +#, elixir-autogen, elixir-format +msgid "Rebuild and maintenance commands are available under the : prompt." +msgstr "" + +#: lib/bds/ui/settings_form.ex:200 +#, elixir-autogen, elixir-format +msgid "SSH Host" +msgstr "" + +#: lib/bds/ui/settings_form.ex:202 +#, elixir-autogen, elixir-format +msgid "SSH Remote Path" +msgstr "" + +#: lib/bds/ui/settings_form.ex:201 +#, elixir-autogen, elixir-format +msgid "SSH User" +msgstr "" + +#: lib/bds/ui/settings_form.ex:119 +#, elixir-autogen, elixir-format +msgid "Show Title" +msgstr "" + +#: lib/bds/ui/settings_form.ex:242 +#, elixir-autogen, elixir-format +msgid "Theme" +msgstr "" + +#: lib/bds/tui.ex:1136 +#, elixir-autogen, elixir-format +msgid "enter edit · ctrl+s save · esc close" +msgstr "" + +#: lib/bds/tui.ex:1499 +#, elixir-autogen, elixir-format +msgid "enter edit/toggle/cycle · ctrl+s save · esc close · ctrl+q quit" +msgstr "" + +#: lib/bds/ui/settings_form.ex:230 +#, elixir-autogen, elixir-format +msgid "not supported yet" +msgstr "" + +#: lib/bds/tui.ex:1506 +#, elixir-autogen, elixir-format +msgid "c commit · u pull · s push · enter jump to file · pgup/pgdn scroll diff · 1-7 views · ctrl+q quit" +msgstr "" + +#: lib/bds/tui.ex:1513 +#, elixir-autogen, elixir-format +msgid "enter open · n new post · 1-7 views · p projects · / search · : commands (:? help) · r refresh · ctrl+q quit" msgstr "" diff --git a/specs/tui.allium b/specs/tui.allium index 88c3364..71dc8f2 100644 --- a/specs/tui.allium +++ b/specs/tui.allium @@ -4,7 +4,7 @@ -- Distilled from: lib/bds/tui.ex, lib/bds/ui/sidebar.ex, lib/bds/ui/post_editor/*.ex entity TuiState { - view: posts | media | templates | scripts | tags + view: posts | media | templates | scripts | tags | settings | git focus: sidebar | editor selected_index: Integer editing_post: Boolean @@ -116,6 +116,24 @@ rule CommandPrompt { ensures: CommandListShownOrExecuted() } +rule SettingsPanel { + when: TuiKeyPressed(code: "6") + -- "6" opens the settings panel (issue #29), matching the GUI panel + -- numbering: the sidebar lists the same preference sections as the + -- GUI settings editor (Project, Editor, Content, AI, Technology, + -- Publishing, Data, MCP, Style — from BDS.UI.Sidebar's settings + -- view). Enter on a section opens a section-specific editor in the + -- main area: a generic typed-field form from BDS.UI.SettingsForm. + -- Enter edits a text field in a status-line prompt, toggles a + -- boolean, or cycles an enum through its options; read-only info + -- rows are skipped by the selection. ctrl+s saves the section + -- through the same backends as the GUI editor (BDS.Metadata, + -- BDS.Settings, BDS.AI, BDS.MCP.AgentConfig) and reloads the form; + -- esc cancels the prompt, then closes the form. Category removal + -- and AI model discovery remain GUI-only. + ensures: SettingsFormShownEditedOrSaved() +} + rule GitPanel { when: TuiKeyPressed(code: "7") -- "7" opens the git panel (issue #30) for content sync: the sidebar diff --git a/test/bds/tui_test.exs b/test/bds/tui_test.exs index 3da6d99..fcbdfff 100644 --- a/test/bds/tui_test.exs +++ b/test/bds/tui_test.exs @@ -862,6 +862,110 @@ defmodule BDS.TUITest do end end + describe "settings panel (issue #29)" do + defp open_section(state, title) do + index = + Enum.find_index(state.items, fn + {:item, item} -> item.title == title + _other -> false + end) + + moves = index - state.selected + direction = if moves < 0, do: "up", else: "down" + + 1..abs(moves)//1 + |> Enum.reduce(state, fn _step, acc -> press(acc, direction) end) + |> press("enter") + end + + defp select_field(state, key) do + index = Enum.find_index(state.settings_form.fields, &(&1.key == key)) + moves = index - state.settings_form.selected + direction = if moves < 0, do: "up", else: "down" + Enum.reduce(1..abs(moves)//1, state, fn _step, acc -> press(acc, direction) end) + end + + test "6 opens the settings view and lists the sections" do + state = mount!() |> press("6") + + assert state.view == "settings" + text = screen_text(state) + assert text =~ "Project" + assert text =~ "Publishing" + assert text =~ "Style" + end + + test "enter opens a section form; editing a text field persists on ctrl+s", %{ + project: project + } do + state = mount!() |> press("6") |> open_section("Project") + + assert state.settings_form != nil + assert state.settings_form.section == "project" + assert screen_text(state, 140, 40) =~ "Posts per Page" + + state = select_field(state, "name") |> press("enter") + assert state.settings_form.input != nil + + # The prompt is seeded with the current value; replace it. + state = + Enum.reduce(1..3, state, fn _n, acc -> press(acc, "backspace") end) + |> type("TUI Prefs") + |> press("enter") + + assert state.settings_form.input == nil + assert state.settings_form.dirty + + state = press(state, "s", ["ctrl"]) + refute state.settings_form.dirty + + {:ok, metadata} = BDS.Metadata.get_project_metadata(project.id) + assert metadata.name == "TUI Prefs" + end + + test "enter toggles booleans and cycles enums", %{project: project} do + state = mount!() |> press("6") |> open_section("Publishing") + + state = select_field(state, "ssh_mode") + assert current_field(state).value == "scp" + + state = press(state, "enter") + assert current_field(state).value == "rsync" + + state = state |> select_field("ssh_host") |> press("enter") |> type("example.org") |> press("enter") + state = press(state, "s", ["ctrl"]) + + {:ok, metadata} = BDS.Metadata.get_project_metadata(project.id) + assert metadata.publishing_preferences["ssh_mode"] == "rsync" + assert metadata.publishing_preferences["ssh_host"] == "example.org" + + # Booleans toggle in place. + state = state |> press("esc") |> open_section("Technology") + state = select_field(state, "semantic_similarity_enabled") + refute current_field(state).value + state = press(state, "enter") + assert current_field(state).value + end + + test "esc in a prompt cancels only the prompt; esc again closes the form" do + state = mount!() |> press("6") |> open_section("Publishing") + + state = select_field(state, "ssh_host") |> press("enter") + assert state.settings_form.input != nil + + state = press(state, "esc") + assert state.settings_form != nil + assert state.settings_form.input == nil + + state = press(state, "esc") + assert state.settings_form == nil + assert state.view == "settings" + end + + defp current_field(state), + do: Enum.at(state.settings_form.fields, state.settings_form.selected) + end + test "local tui mode stops the VM when the app exits" do parent = self() state = mount!(stop_vm_on_exit: true, stop_fun: fn -> send(parent, :vm_stopped) end) diff --git a/test/bds/ui/settings_form_test.exs b/test/bds/ui/settings_form_test.exs new file mode 100644 index 0000000..411ebf8 --- /dev/null +++ b/test/bds/ui/settings_form_test.exs @@ -0,0 +1,200 @@ +defmodule BDS.UI.SettingsFormTest do + use ExUnit.Case, async: false + + alias BDS.UI.SettingsForm + + setup do + :ok = Ecto.Adapters.SQL.Sandbox.checkout(BDS.Repo) + Ecto.Adapters.SQL.Sandbox.mode(BDS.Repo, {:shared, self()}) + on_exit(fn -> Ecto.Adapters.SQL.Sandbox.mode(BDS.Repo, :manual) end) + + temp_dir = Path.join(System.tmp_dir!(), "bds-settings-form-#{System.unique_integer([:positive])}") + File.mkdir_p!(temp_dir) + on_exit(fn -> File.rm_rf(temp_dir) end) + + {:ok, project} = BDS.Projects.create_project(%{name: "Prefs", data_path: temp_dir}) + {:ok, _} = BDS.Projects.set_active_project(project.id) + + %{project: project} + end + + defp field(form, key), do: Enum.find(form.fields, &(&1.key == key)) + + defp values(form, overrides) do + form.fields + |> Map.new(fn f -> {f.key, f.value} end) + |> Map.merge(overrides) + end + + describe "project" do + test "load exposes the project metadata as typed fields", %{project: project} do + form = SettingsForm.load("project", project.id) + + assert field(form, "name").value == "Prefs" + assert field(form, "name").type == :text + assert field(form, "main_language").type == :enum + assert "de" in field(form, "main_language").options + assert field(form, "semantic_similarity_enabled").type == :bool + end + + test "save writes through Metadata and keeps untouched values", %{project: project} do + {:ok, _} = BDS.Metadata.update_project_metadata(project.id, %{pico_theme: "jade"}) + + form = SettingsForm.load("project", project.id) + + :ok = + SettingsForm.save( + "project", + project.id, + values(form, %{ + "name" => "Renamed", + "max_posts_per_page" => "25", + "blog_languages" => "en, de", + "semantic_similarity_enabled" => true + }) + ) + + {:ok, metadata} = BDS.Metadata.get_project_metadata(project.id) + assert metadata.name == "Renamed" + assert metadata.max_posts_per_page == 25 + assert metadata.blog_languages == ["en", "de"] + assert metadata.semantic_similarity_enabled + assert metadata.pico_theme == "jade" + end + end + + describe "editor" do + test "round-trips the global editor settings", %{project: project} do + form = SettingsForm.load("editor", project.id) + assert field(form, "default_mode").type == :enum + + :ok = + SettingsForm.save( + "editor", + project.id, + values(form, %{"default_mode" => "preview", "wrap_long_lines" => true}) + ) + + assert BDS.Settings.get_global_setting("ui.preferred_editor_mode") == "preview" + assert BDS.Settings.get_global_setting("ui.git_diff_word_wrap") == "true" + + reloaded = SettingsForm.load("editor", project.id) + assert field(reloaded, "default_mode").value == "preview" + assert field(reloaded, "wrap_long_lines").value == true + end + end + + describe "content" do + test "edits category settings and adds new categories", %{project: project} do + form = SettingsForm.load("content", project.id) + assert field(form, "cat:aside:show_title").type == :bool + + :ok = + SettingsForm.save( + "content", + project.id, + values(form, %{ + "new_category" => "linkroll", + "cat:article:render_in_lists" => false, + "cat:article:title" => "Articles" + }) + ) + + {:ok, metadata} = BDS.Metadata.get_project_metadata(project.id) + assert "linkroll" in metadata.categories + assert metadata.category_settings["article"]["render_in_lists"] == false + assert metadata.category_settings["article"]["title"] == "Articles" + end + end + + describe "technology" do + test "toggles semantic similarity without wiping the project", %{project: project} do + form = SettingsForm.load("technology", project.id) + refute field(form, "semantic_similarity_enabled").value + + :ok = + SettingsForm.save( + "technology", + project.id, + values(form, %{"semantic_similarity_enabled" => true}) + ) + + {:ok, metadata} = BDS.Metadata.get_project_metadata(project.id) + assert metadata.semantic_similarity_enabled + assert metadata.name == "Prefs" + end + end + + describe "publishing" do + test "saves the SSH preferences", %{project: project} do + form = SettingsForm.load("publishing", project.id) + assert field(form, "ssh_mode").options == ["scp", "rsync"] + + :ok = + SettingsForm.save( + "publishing", + project.id, + values(form, %{"ssh_host" => "example.org", "ssh_mode" => "rsync"}) + ) + + {:ok, metadata} = BDS.Metadata.get_project_metadata(project.id) + assert metadata.publishing_preferences["ssh_host"] == "example.org" + assert metadata.publishing_preferences["ssh_mode"] == "rsync" + end + end + + describe "ai" do + test "loads the AI form and saves prompt plus airplane mode", %{project: project} do + form = SettingsForm.load("ai", project.id) + assert field(form, "offline_mode").type == :bool + assert field(form, "system_prompt").type == :text + + :ok = + SettingsForm.save( + "ai", + project.id, + values(form, %{"system_prompt" => "be terse", "offline_mode" => true}) + ) + + assert BDS.Settings.get_global_setting("ai.system_prompt") == "be terse" + assert BDS.AI.airplane_mode?() + end + end + + describe "style" do + test "applies a theme without wiping other metadata", %{project: project} do + form = SettingsForm.load("style", project.id) + assert "jade" in field(form, "pico_theme").options + + :ok = SettingsForm.save("style", project.id, values(form, %{"pico_theme" => "jade"})) + + {:ok, metadata} = BDS.Metadata.get_project_metadata(project.id) + assert metadata.pico_theme == "jade" + assert metadata.name == "Prefs" + end + end + + describe "data" do + test "shows the data folder read-only and save is a no-op", %{project: project} do + form = SettingsForm.load("data", project.id) + data_field = field(form, "data_path") + assert data_field.type == :info + assert data_field.value =~ "bds-settings-form" + + assert SettingsForm.save("data", project.id, %{}) == :ok + end + end + + describe "mcp" do + test "lists the agents with supported ones as toggles", %{project: project} do + form = SettingsForm.load("mcp", project.id) + + claude = field(form, "mcp:claude_code") + assert claude.type == :bool + assert is_boolean(claude.value) + + gemini = field(form, "mcp:gemini_cli") + assert gemini.type == :info + end + end +end