From df2bdc2041619bfb7a083495b97f9c62c2e2e4a4 Mon Sep 17 00:00:00 2001 From: Chili Palmer Date: Wed, 15 Jul 2026 18:39:04 +0200 Subject: [PATCH] feat: desktop connect-to-server over SSH tunnel (issue #26, phase 5) --- README.md | 7 +- config/config.exs | 3 + lib/bds/application.ex | 3 +- lib/bds/desktop/dialogs.ex | 52 ++++++ lib/bds/desktop/endpoint.ex | 3 +- lib/bds/desktop/menu_bar.ex | 31 ++++ lib/bds/desktop/remote_connection.ex | 180 +++++++++++++++++++ lib/bds/desktop/shell_live.ex | 32 +++- lib/bds/server.ex | 11 ++ lib/bds/ui/menu_bar.ex | 3 + priv/gettext/de/LC_MESSAGES/ui.po | 190 ++++++++++++-------- priv/gettext/en/LC_MESSAGES/ui.po | 190 ++++++++++++-------- priv/gettext/es/LC_MESSAGES/ui.po | 190 ++++++++++++-------- priv/gettext/fr/LC_MESSAGES/ui.po | 190 ++++++++++++-------- priv/gettext/it/LC_MESSAGES/ui.po | 190 ++++++++++++-------- priv/gettext/ui.pot | 190 ++++++++++++-------- specs/server.allium | 10 ++ test/bds/desktop/remote_connection_test.exs | 98 ++++++++++ 18 files changed, 1094 insertions(+), 479 deletions(-) create mode 100644 lib/bds/desktop/dialogs.ex create mode 100644 lib/bds/desktop/remote_connection.ex create mode 100644 test/bds/desktop/remote_connection_test.exs diff --git a/README.md b/README.md index 74988f6..b9e791e 100644 --- a/README.md +++ b/README.md @@ -210,8 +210,11 @@ ssh -p 2222 -L 4010:127.0.0.1:4010 -N & open http://127.0.0.1:4010 ``` -A built-in "Connect to Server…" mode in the desktop app is in progress -(issue #26, phase 5). +Or use the desktop app directly: **File → Connect to Server…** takes +`user@host[:port]`, connects with the client key from the same local +`ssh/` directory (public-key auth, trust-on-first-use `known_hosts`), +tunnels to the server, and points the window at it. **File → Disconnect +from Server** returns to the local workspace. ## Monaco Editor diff --git a/config/config.exs b/config/config.exs index b3fff8c..9a73e9e 100644 --- a/config/config.exs +++ b/config/config.exs @@ -29,6 +29,9 @@ config :bds, :server, ssh_port: 2222 config :bds, BDS.Desktop.Endpoint, url: [host: "127.0.0.1"], + # Any-port loopback origins: the remote-GUI SSH tunnel terminates on an + # ephemeral local port, so the websocket origin port varies per connect. + check_origin: ["//127.0.0.1", "//localhost"], adapter: Bandit.PhoenixAdapter, render_errors: [formats: [html: BDS.Desktop.ErrorHTML], layout: false], pubsub_server: BDS.PubSub, diff --git a/lib/bds/application.ex b/lib/bds/application.ex index 6818302..16634bc 100644 --- a/lib/bds/application.ex +++ b/lib/bds/application.ex @@ -90,7 +90,8 @@ defmodule BDS.Application do [ {Desktop.Window, window_opts}, Supervisor.child_spec({BDS.Desktop.MainWindow, []}, id: BDS.Desktop.MainWindow.Watcher), - {BDS.Desktop.DeepLink, []} + {BDS.Desktop.DeepLink, []}, + {BDS.Desktop.RemoteConnection, []} ] end end diff --git a/lib/bds/desktop/dialogs.ex b/lib/bds/desktop/dialogs.ex new file mode 100644 index 0000000..fc8a524 --- /dev/null +++ b/lib/bds/desktop/dialogs.ex @@ -0,0 +1,52 @@ +defmodule BDS.Desktop.Dialogs do + @moduledoc false + + # Native single-line text prompt, same osascript approach as + # BDS.Desktop.FilePicker. Returns {:ok, text} | :cancel | {:error, map}. + def prompt_text(message, default \\ "") when is_binary(message) do + if System.get_env("BDS_DESKTOP_AUTOMATION") == "1" do + :cancel + else + case :os.type() do + {:unix, :darwin} -> prompt_text_macos(message, default) + _other -> {:error, %{message: "Dialogs are only supported on macOS desktop"}} + end + end + end + + def alert(title, message) when is_binary(title) and is_binary(message) do + if System.get_env("BDS_DESKTOP_AUTOMATION") == "1" or :os.type() != {:unix, :darwin} do + :ok + else + script = "display alert \"#{escape(title)}\" message \"#{escape(message)}\"" + _ = System.cmd("osascript", ["-e", script], stderr_to_stdout: true) + :ok + end + end + + defp prompt_text_macos(message, default) do + script = + "text returned of (display dialog \"#{escape(message)}\" default answer \"#{escape(default)}\")" + + case System.cmd("osascript", ["-e", script], stderr_to_stdout: true) do + {output, 0} -> {:ok, String.trim(output)} + {output, _status} -> normalize_failure(output) + end + end + + defp normalize_failure(output) do + message = String.trim(output) + + if message == "" or String.contains?(String.downcase(message), "canceled") do + :cancel + else + {:error, %{message: message}} + end + end + + defp escape(value) do + value + |> String.replace("\\", "\\\\") + |> String.replace("\"", "\\\"") + end +end diff --git a/lib/bds/desktop/endpoint.ex b/lib/bds/desktop/endpoint.ex index e425782..6d35d1c 100644 --- a/lib/bds/desktop/endpoint.ex +++ b/lib/bds/desktop/endpoint.ex @@ -23,7 +23,8 @@ defmodule BDS.Desktop.Endpoint do plug(BDS.Desktop.Router) defp maybe_require_desktop_auth(conn, _opts) do - if System.get_env("BDS_DESKTOP_AUTOMATION") in ["1", "true", "TRUE"] do + if System.get_env("BDS_DESKTOP_AUTOMATION") in ["1", "true", "TRUE"] or + not BDS.Server.desktop_auth_required?() do conn else Desktop.Auth.call(conn, []) diff --git a/lib/bds/desktop/menu_bar.ex b/lib/bds/desktop/menu_bar.ex index 96f860e..81548ae 100644 --- a/lib/bds/desktop/menu_bar.ex +++ b/lib/bds/desktop/menu_bar.ex @@ -67,6 +67,35 @@ defmodule BDS.Desktop.MenuBar do {:noreply, menu} end + def handle_event("connect_server", menu) do + prompt = + dgettext("ui", "Server address (user@host or user@host:port), public-key auth:") + + with {:ok, target} <- BDS.Desktop.Dialogs.prompt_text(prompt, "user@host"), + {:ok, url} <- BDS.Desktop.RemoteConnection.connect(target) do + Window.show(BDS.Desktop.MainWindow.window_id(), url) + else + :cancel -> + :ok + + {:error, reason} -> + BDS.Desktop.Dialogs.alert( + dgettext("ui", "Connect to Server"), + dgettext("ui", "Connection failed: %{reason}", + reason: BDS.Desktop.RemoteConnection.format_reason(reason) + ) + ) + end + + {:noreply, menu} + end + + def handle_event("disconnect_server", menu) do + :ok = BDS.Desktop.RemoteConnection.disconnect() + Window.show(BDS.Desktop.MainWindow.window_id(), BDS.Desktop.url()) + {:noreply, menu} + end + def handle_event("open_data_folder", menu) do _ = BDS.Desktop.ShellCommands.execute("open_data_folder") {:noreply, menu} @@ -186,6 +215,8 @@ defmodule BDS.Desktop.MenuBar do defp item_label(:import_media), do: dgettext("ui", "Import Media") defp item_label(:save), do: dgettext("ui", "Save") defp item_label(:open_in_browser), do: dgettext("ui", "Open in Browser") + defp item_label(:connect_server), do: dgettext("ui", "Connect to Server…") + defp item_label(:disconnect_server), do: dgettext("ui", "Disconnect from Server") defp item_label(:open_data_folder), do: dgettext("ui", "Open Data Folder") defp item_label(:close_tab), do: dgettext("ui", "Close Tab") defp item_label(:quit), do: dgettext("ui", "Quit") diff --git a/lib/bds/desktop/remote_connection.ex b/lib/bds/desktop/remote_connection.ex new file mode 100644 index 0000000..53506e5 --- /dev/null +++ b/lib/bds/desktop/remote_connection.ex @@ -0,0 +1,180 @@ +defmodule BDS.Desktop.RemoteConnection do + @moduledoc """ + GUI remote mode (issue #26, phase 5). + + Connects the desktop app to a headless bDS2 server over the same SSH + channel (and the same public keys) the TUI uses: `:ssh.connect` with + public-key auth, then an OTP TCP/IP tunnel to the server's loopback HTTP + endpoint. The webview then loads the local tunnel end — the server never + exposes HTTP. + + Client key material lives in the same private `ssh/` directory next to + the database (`BDS.Server.ssh_dir/0`): an `id_ed25519`/`id_rsa` identity + and a `known_hosts` written on first connect. + """ + + use GenServer + use Gettext, backend: BDS.Gettext + + require Logger + + @default_ssh_port 2222 + @tunnel_timeout_ms 10_000 + + def start_link(opts \\ []) do + case Keyword.pop(opts, :name, __MODULE__) do + {nil, init_opts} -> GenServer.start_link(__MODULE__, init_opts) + {name, init_opts} -> GenServer.start_link(__MODULE__, init_opts, name: name) + end + end + + @doc """ + Parses `user@host[:port]` into connection parameters. The port is the + server's SSH port (default #{@default_ssh_port}). + """ + @spec parse_target(String.t()) :: + {:ok, %{user: String.t(), host: String.t(), port: pos_integer()}} + | {:error, :invalid_target} + def parse_target(target) when is_binary(target) do + with [user, rest] when user != "" <- String.split(String.trim(target), "@", parts: 2), + {:ok, host, port} <- parse_host_port(rest) do + {:ok, %{user: user, host: host, port: port}} + else + _other -> {:error, :invalid_target} + end + end + + defp parse_host_port(rest) do + case String.split(rest, ":", parts: 2) do + [host] when host != "" -> + {:ok, host, @default_ssh_port} + + [host, port] when host != "" -> + case Integer.parse(port) do + {number, ""} when number > 0 -> {:ok, host, number} + _other -> :error + end + + _other -> + :error + end + end + + @doc "Connects and tunnels; returns the local URL the webview should load." + @spec connect(GenServer.server(), String.t()) :: {:ok, String.t()} | {:error, term()} + def connect(server \\ __MODULE__, target) do + GenServer.call(server, {:connect, target}, @tunnel_timeout_ms + 5_000) + end + + @spec disconnect(GenServer.server()) :: :ok + def disconnect(server \\ __MODULE__) do + GenServer.call(server, :disconnect) + end + + @spec status(GenServer.server()) :: :disconnected | {:connected, String.t(), String.t()} + def status(server \\ __MODULE__) do + GenServer.call(server, :status) + end + + @doc "Human-readable connection error for menu/shell error reporting." + @spec format_reason(term()) :: String.t() + def format_reason(:invalid_target) do + dgettext("ui", "Use the form user@host or user@host:port.") + end + + def format_reason(%{message: message}) when is_binary(message), do: message + def format_reason(reason), do: inspect(reason) + + ## GenServer callbacks + + @impl true + def init(opts) do + overrides = Keyword.get(opts, :test_overrides, []) + + {:ok, + %{ + conn: nil, + monitor: nil, + target: nil, + url: nil, + connect_fun: Keyword.get(overrides, :connect_fun, &:ssh.connect/3), + tunnel_fun: Keyword.get(overrides, :tunnel_fun, &:ssh.tcpip_tunnel_to_server/6), + close_fun: Keyword.get(overrides, :close_fun, &:ssh.close/1), + ssh_dir_fun: Keyword.get(overrides, :ssh_dir_fun, &BDS.Server.ssh_dir/0) + }} + end + + @impl true + def handle_call({:connect, target}, _from, state) do + state = close_current(state) + + with {:ok, parsed} <- parse_target(target), + {:ok, conn} <- do_connect(state, parsed), + {:ok, local_port} <- do_tunnel(state, conn) do + url = "http://127.0.0.1:#{local_port}/" + + {:reply, {:ok, url}, + %{ + state + | conn: conn, + monitor: Process.monitor(conn), + target: String.trim(target), + url: url + }} + else + {:error, reason} = error -> + Logger.warning("Remote connection to #{inspect(target)} failed: #{inspect(reason)}") + {:reply, error, state} + end + end + + def handle_call(:disconnect, _from, state) do + {:reply, :ok, close_current(state)} + end + + def handle_call(:status, _from, %{conn: nil} = state) do + {:reply, :disconnected, state} + end + + def handle_call(:status, _from, state) do + {:reply, {:connected, state.target, state.url}, state} + end + + @impl true + def handle_info({:DOWN, monitor, :process, _pid, reason}, %{monitor: monitor} = state) do + Logger.warning("Remote SSH connection lost: #{inspect(reason)}") + {:noreply, %{state | conn: nil, monitor: nil, target: nil, url: nil}} + end + + def handle_info(_message, state), do: {:noreply, state} + + ## Internal helpers + + defp do_connect(state, %{user: user, host: host, port: port}) do + ssh_dir = BDS.Server.ensure_ssh_dir!(state.ssh_dir_fun.()) + + state.connect_fun.(String.to_charlist(host), port, + user: String.to_charlist(user), + user_dir: String.to_charlist(ssh_dir), + auth_methods: ~c"publickey", + # First connect records the host key in /known_hosts; + # later connects verify against it (trust-on-first-use). + silently_accept_hosts: true, + connect_timeout: @tunnel_timeout_ms + ) + end + + defp do_tunnel(state, conn) do + remote_port = Application.get_env(:bds, :desktop)[:port] || 4010 + + state.tunnel_fun.(conn, ~c"127.0.0.1", 0, ~c"127.0.0.1", remote_port, @tunnel_timeout_ms) + end + + defp close_current(%{conn: nil} = state), do: state + + defp close_current(state) do + if state.monitor, do: Process.demonitor(state.monitor, [:flush]) + _ = state.close_fun.(state.conn) + %{state | conn: nil, monitor: nil, target: nil, url: nil} + end +end diff --git a/lib/bds/desktop/shell_live.ex b/lib/bds/desktop/shell_live.ex index 6831e37..88fdf63 100644 --- a/lib/bds/desktop/shell_live.ex +++ b/lib/bds/desktop/shell_live.ex @@ -108,7 +108,9 @@ defmodule BDS.Desktop.ShellLive do :quit, :view_on_github, :report_issue, - :about + :about, + :connect_server, + :disconnect_server ]) @runtime_menu_actions MapSet.new([ :undo, @@ -1091,6 +1093,34 @@ defmodule BDS.Desktop.ShellLive do socket end + defp handle_socket_menu_action(socket, :connect_server) do + prompt = dgettext("ui", "Server address (user@host or user@host:port), public-key auth:") + + with {:ok, target} <- BDS.Desktop.Dialogs.prompt_text(prompt, "user@host"), + {:ok, url} <- BDS.Desktop.RemoteConnection.connect(target) do + Desktop.Window.show(BDS.Desktop.MainWindow.window_id(), url) + socket + else + :cancel -> + socket + + {:error, reason} -> + append_output_entry( + socket, + dgettext("ui", "Connect to Server"), + BDS.Desktop.RemoteConnection.format_reason(reason), + nil, + "error" + ) + end + end + + defp handle_socket_menu_action(socket, :disconnect_server) do + :ok = BDS.Desktop.RemoteConnection.disconnect() + Desktop.Window.show(BDS.Desktop.MainWindow.window_id(), BDS.Desktop.url()) + socket + end + defp handle_socket_menu_action(socket, :about) do append_output_entry( socket, diff --git a/lib/bds/server.ex b/lib/bds/server.ex index 5df8cc6..c4ba44d 100644 --- a/lib/bds/server.ex +++ b/lib/bds/server.ex @@ -28,6 +28,17 @@ defmodule BDS.Server do def mode(nil), do: :desktop + @doc """ + Whether the HTTP endpoint requires the desktop webview auth token. Only + desktop mode does: in server/tui mode the endpoint stays loopback-only + and clients arrive through the key-authenticated SSH tunnel, which the + per-boot webview token would otherwise lock out. + """ + @spec desktop_auth_required?(:desktop | :server | :tui) :: boolean() + def desktop_auth_required?(mode \\ mode()) + def desktop_auth_required?(:desktop), do: true + def desktop_auth_required?(_mode), do: false + @doc "SSH key-material directory: `/ssh` next to the database." @spec ssh_dir() :: Path.t() def ssh_dir do diff --git a/lib/bds/ui/menu_bar.ex b/lib/bds/ui/menu_bar.ex index 4007db6..223dd93 100644 --- a/lib/bds/ui/menu_bar.ex +++ b/lib/bds/ui/menu_bar.ex @@ -20,6 +20,9 @@ defmodule BDS.UI.MenuBar do %{separator: true}, %{id: :open_in_browser}, %{separator: true}, + %{id: :connect_server}, + %{id: :disconnect_server}, + %{separator: true}, %{id: :open_data_folder}, %{separator: true}, %{id: :close_tab}, diff --git a/priv/gettext/de/LC_MESSAGES/ui.po b/priv/gettext/de/LC_MESSAGES/ui.po index 2cf5212..395be08 100644 --- a/priv/gettext/de/LC_MESSAGES/ui.po +++ b/priv/gettext/de/LC_MESSAGES/ui.po @@ -110,12 +110,12 @@ msgstr "KI schlägt Zuordnungen von neuen zu vorhandenen Einträgen vor, um Dupl msgid "API" msgstr "API" -#: lib/bds/desktop/menu_bar.ex:234 +#: lib/bds/desktop/menu_bar.ex:265 #, elixir-autogen, elixir-format msgid "API Documentation" msgstr "API-Dokumentation" -#: lib/bds/desktop/menu_bar.ex:232 +#: lib/bds/desktop/menu_bar.ex:263 #, elixir-autogen, elixir-format msgid "About" msgstr "Über" @@ -341,7 +341,7 @@ msgstr "Autor" msgid "Auto" msgstr "Automatisch" -#: lib/bds/desktop/shell_live.ex:443 +#: lib/bds/desktop/shell_live.ex:445 #: lib/bds/desktop/shell_live/chat_editor.ex:234 #: lib/bds/desktop/shell_live/media_editor.ex:171 #: lib/bds/desktop/shell_live/media_editor.ex:364 @@ -372,7 +372,7 @@ msgstr "Verfuegbare Sprachen" msgid "Backlinks" msgstr "Rückverweise" -#: lib/bds/desktop/menu_bar.ex:181 +#: lib/bds/desktop/menu_bar.ex:210 #, elixir-autogen, elixir-format msgid "Blog" msgstr "Blog" @@ -491,7 +491,7 @@ msgstr "Kategorie-Standards, Render-Flags und Template-Zuordnung" msgid "Category name is required" msgstr "Kategoriename ist erforderlich" -#: lib/bds/desktop/shell_live.ex:789 +#: lib/bds/desktop/shell_live.ex:791 #: lib/bds/desktop/shell_live/chat_editor.ex:87 #: lib/bds/desktop/shell_live/chat_editor.ex:233 #: lib/bds/desktop/shell_live/chat_editor.ex:323 @@ -549,7 +549,7 @@ msgstr "Tags löschen" msgid "Click to %{action} mapping" msgstr "Klicken, um Zuordnung zu %{action}" -#: lib/bds/desktop/menu_bar.ex:190 +#: lib/bds/desktop/menu_bar.ex:221 #, elixir-autogen, elixir-format msgid "Close Tab" msgstr "Tab schließen" @@ -600,7 +600,7 @@ msgstr "Inhalte" msgid "Content Categories" msgstr "Inhaltskategorien" -#: lib/bds/desktop/menu_bar.ex:195 +#: lib/bds/desktop/menu_bar.ex:226 #, elixir-autogen, elixir-format msgid "Copy" msgstr "Kopieren" @@ -653,7 +653,7 @@ msgstr "Schlagwort erstellen" msgid "Created" msgstr "Erstellt" -#: lib/bds/desktop/menu_bar.ex:194 +#: lib/bds/desktop/menu_bar.ex:225 #, elixir-autogen, elixir-format msgid "Cut" msgstr "Ausschneiden" @@ -719,7 +719,7 @@ msgstr "Standard-Bearbeitungsmodus" msgid "Default editing mode and diff presentation" msgstr "Standard-Bearbeitungsmodus und Diff-Darstellung" -#: lib/bds/desktop/menu_bar.ex:197 +#: lib/bds/desktop/menu_bar.ex:228 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:98 #: lib/bds/desktop/shell_live/overlay_html/shell_overlay.html.heex:166 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:116 @@ -862,7 +862,7 @@ msgstr "Anzeigetext" msgid "Do Not Translate" msgstr "Nicht übersetzen" -#: lib/bds/desktop/menu_bar.ex:233 +#: lib/bds/desktop/menu_bar.ex:264 #: lib/bds/help_docs.ex:14 #: lib/bds/ui/registry.ex:118 #, elixir-autogen, elixir-format @@ -895,12 +895,12 @@ msgstr "Menüeintrag ziehen" msgid "ETA: %{value}" msgstr "Verbleibend: %{value}" -#: lib/bds/desktop/menu_bar.ex:179 +#: lib/bds/desktop/menu_bar.ex:208 #, elixir-autogen, elixir-format msgid "Edit" msgstr "Bearbeiten" -#: lib/bds/desktop/menu_bar.ex:216 +#: lib/bds/desktop/menu_bar.ex:247 #, elixir-autogen, elixir-format msgid "Edit Menu" msgstr "Menü bearbeiten" @@ -1006,7 +1006,7 @@ msgstr "Extern" msgid "Extra URLs" msgstr "Zusätzliche URLs" -#: lib/bds/desktop/menu_bar.ex:178 +#: lib/bds/desktop/menu_bar.ex:207 #: lib/bds/desktop/shell_live/import_editor.ex:882 #: lib/bds/desktop/shell_live/misc_editor_html/misc_editor.html.heex:157 #, elixir-autogen, elixir-format @@ -1028,17 +1028,17 @@ msgstr "Datei nach DB" msgid "Filename" msgstr "Dateiname" -#: lib/bds/desktop/menu_bar.ex:223 +#: lib/bds/desktop/menu_bar.ex:254 #, elixir-autogen, elixir-format msgid "Fill Missing Translations" msgstr "Fehlende Übersetzungen ergänzen" -#: lib/bds/desktop/menu_bar.ex:199 +#: lib/bds/desktop/menu_bar.ex:230 #, elixir-autogen, elixir-format msgid "Find" msgstr "Suchen" -#: lib/bds/desktop/menu_bar.ex:224 +#: lib/bds/desktop/menu_bar.ex:255 #, elixir-autogen, elixir-format msgid "Find Duplicate Posts" msgstr "Doppelte Beiträge finden" @@ -1053,7 +1053,7 @@ msgstr "Doppelte Beiträge finden" msgid "Find Duplicates" msgstr "Duplikate finden" -#: lib/bds/desktop/menu_bar.ex:209 +#: lib/bds/desktop/menu_bar.ex:240 #, elixir-autogen, elixir-format msgid "Force Reload" msgstr "Erzwungenes Neuladen" @@ -1064,12 +1064,12 @@ msgstr "Erzwungenes Neuladen" msgid "Gallery" msgstr "Galerie" -#: lib/bds/desktop/menu_bar.ex:225 +#: lib/bds/desktop/menu_bar.ex:256 #, elixir-autogen, elixir-format msgid "Generate Site" msgstr "Website generieren" -#: lib/bds/desktop/shell_live.ex:790 +#: lib/bds/desktop/shell_live.ex:792 #: lib/bds/desktop/shell_live/socket_state.ex:109 #: lib/bds/ui/sidebar.ex:789 #, elixir-autogen, elixir-format @@ -1083,13 +1083,13 @@ msgid "Git Diff" msgstr "Git-Diff" #: lib/bds/desktop/shell_data.ex:228 -#: lib/bds/desktop/shell_live.ex:786 +#: lib/bds/desktop/shell_live.ex:788 #: lib/bds/desktop/shell_live/panel_renderer.ex:171 #, elixir-autogen, elixir-format msgid "Git Log" msgstr "Git-Protokoll" -#: lib/bds/desktop/menu_bar.ex:183 +#: lib/bds/desktop/menu_bar.ex:212 #, elixir-autogen, elixir-format msgid "Help" msgstr "Hilfe" @@ -1176,7 +1176,7 @@ msgstr "%{count} Elemente importieren" msgid "Import (new slug)" msgstr "Importieren (neuer Slug)" -#: lib/bds/desktop/menu_bar.ex:186 +#: lib/bds/desktop/menu_bar.ex:215 #, elixir-autogen, elixir-format msgid "Import Media" msgstr "Medien importieren" @@ -1206,9 +1206,9 @@ msgstr "Importdefinitionen" msgid "Import failed: %{error}" msgstr "Import fehlgeschlagen: %{error}" -#: lib/bds/desktop/shell_live.ex:606 -#: lib/bds/desktop/shell_live.ex:902 -#: lib/bds/desktop/shell_live.ex:908 +#: lib/bds/desktop/shell_live.ex:608 +#: lib/bds/desktop/shell_live.ex:904 +#: lib/bds/desktop/shell_live.ex:910 #: lib/bds/desktop/shell_live/sidebar_create.ex:47 #, elixir-autogen, elixir-format msgid "Import media" @@ -1378,7 +1378,7 @@ msgstr "Markdown" msgid "Max Posts Per Page" msgstr "Maximale Beiträge pro Seite" -#: lib/bds/desktop/menu_bar.ex:203 +#: lib/bds/desktop/menu_bar.ex:234 #: lib/bds/desktop/shell_live/media_editor.ex:509 #: lib/bds/desktop/shell_live/media_editor.ex:513 #: lib/bds/desktop/shell_live/misc_editor.ex:735 @@ -1426,7 +1426,7 @@ msgstr "Tags zusammenführen" msgid "Metadata" msgstr "Metadaten" -#: lib/bds/desktop/menu_bar.ex:220 +#: lib/bds/desktop/menu_bar.ex:251 #: 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 @@ -1473,7 +1473,7 @@ msgstr "Neue Importdefinition" msgid "New Page" msgstr "Neue Seite" -#: lib/bds/desktop/menu_bar.ex:185 +#: lib/bds/desktop/menu_bar.ex:214 #: lib/bds/desktop/shell_live/sidebar_create.ex:41 #: lib/bds/tui.ex:103 #, elixir-autogen, elixir-format @@ -1746,7 +1746,7 @@ msgstr "Online-Titelmodell" msgid "Open" msgstr "Öffnen" -#: lib/bds/desktop/menu_bar.ex:189 +#: lib/bds/desktop/menu_bar.ex:220 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:382 #, elixir-autogen, elixir-format msgid "Open Data Folder" @@ -1763,7 +1763,7 @@ msgstr "Bestehenden Blog öffnen" msgid "Open Settings" msgstr "Einstellungen öffnen" -#: lib/bds/desktop/menu_bar.ex:188 +#: lib/bds/desktop/menu_bar.ex:217 #, elixir-autogen, elixir-format msgid "Open in Browser" msgstr "Im Browser öffnen" @@ -1794,7 +1794,7 @@ msgstr "Sonstige" msgid "Other (%{count})" msgstr "Andere (%{count})" -#: lib/bds/desktop/shell_live.ex:785 +#: lib/bds/desktop/shell_live.ex:787 #: lib/bds/desktop/shell_live/panel_renderer.ex:83 #, elixir-autogen, elixir-format msgid "Output" @@ -1842,7 +1842,7 @@ msgstr "Paar verworfen" msgid "Parsing WXR file..." msgstr "WXR-Datei wird gelesen..." -#: lib/bds/desktop/menu_bar.ex:196 +#: lib/bds/desktop/menu_bar.ex:227 #, elixir-autogen, elixir-format msgid "Paste" msgstr "Einfügen" @@ -1908,7 +1908,7 @@ msgstr "Beitrag veröffentlicht" msgid "Post saved" msgstr "Beitrag gespeichert" -#: lib/bds/desktop/menu_bar.ex:202 +#: 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:451 @@ -1924,7 +1924,7 @@ msgstr "Beiträge" msgid "Posts (%{count})" msgstr "Beiträge (%{count})" -#: lib/bds/desktop/menu_bar.ex:201 +#: lib/bds/desktop/menu_bar.ex:232 #, elixir-autogen, elixir-format msgid "Preferences" msgstr "Einstellungen" @@ -1940,7 +1940,7 @@ msgstr "Vorschau" msgid "Preview Mode" msgstr "Vorschaumodus" -#: lib/bds/desktop/menu_bar.ex:215 +#: lib/bds/desktop/menu_bar.ex:246 #, elixir-autogen, elixir-format msgid "Preview Post" msgstr "Beitragsvorschau" @@ -1992,7 +1992,7 @@ msgstr "Öffentliche URL" msgid "Publish" msgstr "Veröffentlichen" -#: lib/bds/desktop/menu_bar.ex:214 +#: lib/bds/desktop/menu_bar.ex:245 #, elixir-autogen, elixir-format msgid "Publish Selected" msgstr "Ausgewähltes veröffentlichen" @@ -2025,7 +2025,7 @@ msgstr "Veröffentlichung" msgid "Quick Actions" msgstr "Schnellaktionen" -#: lib/bds/desktop/menu_bar.ex:191 +#: lib/bds/desktop/menu_bar.ex:222 #, elixir-autogen, elixir-format msgid "Quit" msgstr "Beenden" @@ -2035,12 +2035,12 @@ msgstr "Beenden" msgid "Ready to import:" msgstr "Bereit zum Import:" -#: lib/bds/desktop/menu_bar.ex:217 +#: lib/bds/desktop/menu_bar.ex:248 #, elixir-autogen, elixir-format msgid "Rebuild Database" msgstr "Datenbank neu aufbauen" -#: lib/bds/desktop/menu_bar.ex:219 +#: lib/bds/desktop/menu_bar.ex:250 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:381 #, elixir-autogen, elixir-format msgid "Rebuild Embedding Index" @@ -2071,7 +2071,7 @@ msgstr "Vorlagen aus Dateien neu aufbauen" msgid "Rebuild filesystem-backed records and thumbnails" msgstr "Dateisystemgestützte Datensätze und Vorschaubilder neu aufbauen" -#: lib/bds/desktop/menu_bar.ex:193 +#: lib/bds/desktop/menu_bar.ex:224 #, elixir-autogen, elixir-format msgid "Redo" msgstr "Wiederholen" @@ -2098,7 +2098,7 @@ msgstr "Online-Modelle aktualisieren" msgid "Refresh Translation" msgstr "Übersetzung aktualisieren" -#: lib/bds/desktop/menu_bar.ex:221 +#: lib/bds/desktop/menu_bar.ex:252 #, elixir-autogen, elixir-format msgid "Regenerate Calendar" msgstr "Kalender neu erzeugen" @@ -2108,12 +2108,12 @@ msgstr "Kalender neu erzeugen" msgid "Regenerate Missing Thumbnails" msgstr "Fehlende Vorschaubilder neu erzeugen" -#: lib/bds/desktop/menu_bar.ex:218 +#: lib/bds/desktop/menu_bar.ex:249 #, elixir-autogen, elixir-format msgid "Reindex Text" msgstr "Text neu indizieren" -#: lib/bds/desktop/menu_bar.ex:208 +#: lib/bds/desktop/menu_bar.ex:239 #, elixir-autogen, elixir-format msgid "Reload" msgstr "Neu laden" @@ -2144,7 +2144,7 @@ msgstr "Schlagwort entfernen" msgid "Render in Lists" msgstr "In Listen rendern" -#: lib/bds/desktop/menu_bar.ex:200 +#: lib/bds/desktop/menu_bar.ex:231 #, elixir-autogen, elixir-format msgid "Replace" msgstr "Ersetzen" @@ -2161,12 +2161,12 @@ msgstr "Datei ersetzen" msgid "Replace Media File" msgstr "Mediendatei ersetzen" -#: lib/bds/desktop/menu_bar.ex:236 +#: lib/bds/desktop/menu_bar.ex:267 #, elixir-autogen, elixir-format msgid "Report Issue" msgstr "Problem melden" -#: lib/bds/desktop/menu_bar.ex:210 +#: lib/bds/desktop/menu_bar.ex:241 #, elixir-autogen, elixir-format msgid "Reset Zoom" msgstr "Zoom zurücksetzen" @@ -2221,7 +2221,7 @@ msgstr "Ausführen" msgid "SSH Mode" msgstr "SSH-Modus" -#: lib/bds/desktop/menu_bar.ex:187 +#: lib/bds/desktop/menu_bar.ex:216 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:89 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:299 #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:13 @@ -2340,7 +2340,7 @@ msgstr "Einstellungen durchsuchen" msgid "Select & Analyze" msgstr "Auswählen & analysieren" -#: lib/bds/desktop/menu_bar.ex:198 +#: lib/bds/desktop/menu_bar.ex:229 #, elixir-autogen, elixir-format msgid "Select All" msgstr "Alles auswählen" @@ -2552,7 +2552,7 @@ msgstr "Schlagwortname" msgid "Tags" msgstr "Tags" -#: lib/bds/desktop/shell_live.ex:784 +#: lib/bds/desktop/shell_live.ex:786 #: lib/bds/desktop/shell_live/panel_renderer.ex:54 #, elixir-autogen, elixir-format msgid "Tasks" @@ -2648,12 +2648,12 @@ msgstr "Dieses Element wird referenziert von:" msgid "Title" msgstr "Titel" -#: lib/bds/desktop/menu_bar.ex:206 +#: lib/bds/desktop/menu_bar.ex:237 #, elixir-autogen, elixir-format msgid "Toggle Assistant Sidebar" msgstr "Assistenten-Seitenleiste umschalten" -#: lib/bds/desktop/menu_bar.ex:207 +#: lib/bds/desktop/menu_bar.ex:238 #, elixir-autogen, elixir-format msgid "Toggle Dev Tools" msgstr "Entwicklertools umschalten" @@ -2664,17 +2664,17 @@ msgstr "Entwicklertools umschalten" msgid "Toggle Filters" msgstr "Filter umschalten" -#: lib/bds/desktop/menu_bar.ex:213 +#: lib/bds/desktop/menu_bar.ex:244 #, elixir-autogen, elixir-format msgid "Toggle Full Screen" msgstr "Vollbild umschalten" -#: lib/bds/desktop/menu_bar.ex:205 +#: lib/bds/desktop/menu_bar.ex:236 #, elixir-autogen, elixir-format msgid "Toggle Panel" msgstr "Panel umschalten" -#: lib/bds/desktop/menu_bar.ex:204 +#: lib/bds/desktop/menu_bar.ex:235 #, elixir-autogen, elixir-format msgid "Toggle Sidebar" msgstr "Seitenleiste umschalten" @@ -2770,7 +2770,7 @@ msgstr "UI" msgid "URL" msgstr "URL" -#: lib/bds/desktop/menu_bar.ex:192 +#: lib/bds/desktop/menu_bar.ex:223 #, elixir-autogen, elixir-format msgid "Undo" msgstr "Rückgängig" @@ -2820,7 +2820,7 @@ msgstr "Aktualisiert" msgid "Updated URLs" msgstr "Aktualisierte URLs" -#: lib/bds/desktop/menu_bar.ex:228 +#: lib/bds/desktop/menu_bar.ex:259 #, elixir-autogen, elixir-format msgid "Upload Site" msgstr "Website hochladen" @@ -2847,22 +2847,22 @@ msgstr "Benutzername" msgid "Validate" msgstr "Validieren" -#: lib/bds/desktop/menu_bar.ex:227 +#: lib/bds/desktop/menu_bar.ex:258 #, elixir-autogen, elixir-format msgid "Validate Site" msgstr "Website validieren" -#: lib/bds/desktop/menu_bar.ex:222 +#: lib/bds/desktop/menu_bar.ex:253 #, elixir-autogen, elixir-format msgid "Validate Translations" msgstr "Übersetzungen validieren" -#: lib/bds/desktop/menu_bar.ex:180 +#: lib/bds/desktop/menu_bar.ex:209 #, elixir-autogen, elixir-format msgid "View" msgstr "Ansicht" -#: lib/bds/desktop/menu_bar.ex:235 +#: lib/bds/desktop/menu_bar.ex:266 #, elixir-autogen, elixir-format msgid "View on GitHub" msgstr "Auf GitHub ansehen" @@ -2906,12 +2906,12 @@ msgstr "Lange Zeilen umbrechen" msgid "You" msgstr "Du" -#: lib/bds/desktop/menu_bar.ex:211 +#: lib/bds/desktop/menu_bar.ex:242 #, elixir-autogen, elixir-format msgid "Zoom In" msgstr "Heranzoomen" -#: lib/bds/desktop/menu_bar.ex:212 +#: lib/bds/desktop/menu_bar.ex:243 #, elixir-autogen, elixir-format msgid "Zoom Out" msgstr "Herauszoomen" @@ -3233,12 +3233,12 @@ msgstr "Willkommen beim KI-Assistenten" msgid "Comparing database and filesystem metadata" msgstr "Vergleicht Datenbank- und Dateisystem-Metadaten" -#: lib/bds/desktop/shell_live.ex:682 +#: lib/bds/desktop/shell_live.ex:684 #, elixir-autogen, elixir-format msgid "Added %{count} images to post" msgstr "%{count} Bilder zum Beitrag hinzugefügt" -#: lib/bds/desktop/shell_live.ex:650 +#: lib/bds/desktop/shell_live.ex:652 #, elixir-autogen, elixir-format msgid "Added %{title}" msgstr "%{title} hinzugefügt" @@ -3258,18 +3258,18 @@ msgstr "Endbenutzer-Anleitung für redaktionelle Arbeitsabläufe, Medien, Vorlag msgid "Image Import Concurrency" msgstr "Gleichzeitige Bildimporte" -#: lib/bds/desktop/shell_live.ex:442 -#: lib/bds/desktop/shell_live.ex:455 -#: lib/bds/desktop/shell_live.ex:649 -#: lib/bds/desktop/shell_live.ex:681 -#: lib/bds/desktop/shell_live.ex:692 -#: lib/bds/desktop/shell_live.ex:703 +#: lib/bds/desktop/shell_live.ex:444 +#: lib/bds/desktop/shell_live.ex:457 +#: lib/bds/desktop/shell_live.ex:651 +#: lib/bds/desktop/shell_live.ex:683 +#: lib/bds/desktop/shell_live.ex:694 +#: lib/bds/desktop/shell_live.ex:705 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:420 #, elixir-autogen, elixir-format msgid "Add Gallery Images" msgstr "Galerie-Bilder hinzufügen" -#: lib/bds/desktop/shell_live.ex:704 +#: lib/bds/desktop/shell_live.ex:706 #, elixir-autogen, elixir-format msgid "Failed to process %{path}: %{reason}" msgstr "%{path} konnte nicht verarbeitet werden: %{reason}" @@ -3460,12 +3460,12 @@ msgstr "umbenannt" msgid "untracked" msgstr "nicht verfolgt" -#: lib/bds/desktop/shell_live.ex:810 +#: lib/bds/desktop/shell_live.ex:812 #, elixir-autogen, elixir-format msgid "Blogmark" msgstr "Blogmark" -#: lib/bds/desktop/shell_live.ex:853 +#: lib/bds/desktop/shell_live.ex:855 #, elixir-autogen, elixir-format msgid "Open a project before importing a blogmark." msgstr "Öffnen Sie ein Projekt, bevor Sie ein Blogmark importieren." @@ -3506,7 +3506,7 @@ msgstr "Tag löschen" msgid "Failed to copy bookmarklet to clipboard" msgstr "Bookmarklet konnte nicht in die Zwischenablage kopiert werden" -#: lib/bds/desktop/shell_live.ex:822 +#: lib/bds/desktop/shell_live.ex:824 #, elixir-autogen, elixir-format msgid "The project this blogmark targets does not exist here." msgstr "Das Projekt, auf das dieses Blogmark verweist, existiert hier nicht." @@ -3516,7 +3516,7 @@ msgstr "Das Projekt, auf das dieses Blogmark verweist, existiert hier nicht." msgid "Suggested tags" msgstr "Vorgeschlagene Tags" -#: lib/bds/desktop/menu_bar.ex:226 +#: lib/bds/desktop/menu_bar.ex:257 #, elixir-autogen, elixir-format msgid "Force Render Site" msgstr "Website vollständig neu generieren" @@ -3531,22 +3531,22 @@ msgstr "Medien-Links neu aufbauen" msgid "Rebuild Post Links" msgstr "Beitrags-Links neu aufbauen" -#: lib/bds/desktop/menu_bar.ex:231 +#: lib/bds/desktop/menu_bar.ex:262 #, elixir-autogen, elixir-format msgid "Bring All to Front" msgstr "Alle nach vorne bringen" -#: lib/bds/desktop/menu_bar.ex:229 +#: lib/bds/desktop/menu_bar.ex:260 #, elixir-autogen, elixir-format msgid "Minimize" msgstr "Minimieren" -#: lib/bds/desktop/menu_bar.ex:182 +#: lib/bds/desktop/menu_bar.ex:211 #, elixir-autogen, elixir-format msgid "Window" msgstr "Fenster" -#: lib/bds/desktop/menu_bar.ex:230 +#: lib/bds/desktop/menu_bar.ex:261 #, elixir-autogen, elixir-format msgid "Zoom" msgstr "Zoomen" @@ -3702,3 +3702,35 @@ msgstr "Enter Öffnen · N Neuer Beitrag · 1-5 Ansichten · R Aktualisieren · #, elixir-autogen, elixir-format msgid "esc to close" msgstr "Esc zum Schließen" + +#: lib/bds/desktop/menu_bar.ex:83 +#: lib/bds/desktop/shell_live.ex:1110 +#, elixir-autogen, elixir-format +msgid "Connect to Server" +msgstr "Mit Server verbinden" + +#: lib/bds/desktop/menu_bar.ex:218 +#, elixir-autogen, elixir-format +msgid "Connect to Server…" +msgstr "Mit Server verbinden…" + +#: lib/bds/desktop/menu_bar.ex:84 +#, elixir-autogen, elixir-format +msgid "Connection failed: %{reason}" +msgstr "Verbindung fehlgeschlagen: %{reason}" + +#: lib/bds/desktop/menu_bar.ex:219 +#, elixir-autogen, elixir-format +msgid "Disconnect from Server" +msgstr "Verbindung zum Server trennen" + +#: lib/bds/desktop/menu_bar.ex:72 +#: lib/bds/desktop/shell_live.ex:1097 +#, elixir-autogen, elixir-format +msgid "Server address (user@host or user@host:port), public-key auth:" +msgstr "Serveradresse (user@host oder user@host:port), Public-Key-Authentifizierung:" + +#: lib/bds/desktop/remote_connection.ex:82 +#, elixir-autogen, elixir-format +msgid "Use the form user@host or user@host:port." +msgstr "Verwenden Sie das Format user@host oder user@host:port." diff --git a/priv/gettext/en/LC_MESSAGES/ui.po b/priv/gettext/en/LC_MESSAGES/ui.po index 0324374..12149a6 100644 --- a/priv/gettext/en/LC_MESSAGES/ui.po +++ b/priv/gettext/en/LC_MESSAGES/ui.po @@ -110,12 +110,12 @@ msgstr "" msgid "API" msgstr "" -#: lib/bds/desktop/menu_bar.ex:234 +#: lib/bds/desktop/menu_bar.ex:265 #, elixir-autogen, elixir-format msgid "API Documentation" msgstr "" -#: lib/bds/desktop/menu_bar.ex:232 +#: lib/bds/desktop/menu_bar.ex:263 #, elixir-autogen, elixir-format msgid "About" msgstr "" @@ -341,7 +341,7 @@ msgstr "" msgid "Auto" msgstr "" -#: lib/bds/desktop/shell_live.ex:443 +#: lib/bds/desktop/shell_live.ex:445 #: lib/bds/desktop/shell_live/chat_editor.ex:234 #: lib/bds/desktop/shell_live/media_editor.ex:171 #: lib/bds/desktop/shell_live/media_editor.ex:364 @@ -372,7 +372,7 @@ msgstr "" msgid "Backlinks" msgstr "" -#: lib/bds/desktop/menu_bar.ex:181 +#: lib/bds/desktop/menu_bar.ex:210 #, elixir-autogen, elixir-format msgid "Blog" msgstr "" @@ -491,7 +491,7 @@ msgstr "" msgid "Category name is required" msgstr "" -#: lib/bds/desktop/shell_live.ex:789 +#: lib/bds/desktop/shell_live.ex:791 #: lib/bds/desktop/shell_live/chat_editor.ex:87 #: lib/bds/desktop/shell_live/chat_editor.ex:233 #: lib/bds/desktop/shell_live/chat_editor.ex:323 @@ -549,7 +549,7 @@ msgstr "" msgid "Click to %{action} mapping" msgstr "" -#: lib/bds/desktop/menu_bar.ex:190 +#: lib/bds/desktop/menu_bar.ex:221 #, elixir-autogen, elixir-format msgid "Close Tab" msgstr "" @@ -600,7 +600,7 @@ msgstr "" msgid "Content Categories" msgstr "" -#: lib/bds/desktop/menu_bar.ex:195 +#: lib/bds/desktop/menu_bar.ex:226 #, elixir-autogen, elixir-format msgid "Copy" msgstr "" @@ -653,7 +653,7 @@ msgstr "" msgid "Created" msgstr "" -#: lib/bds/desktop/menu_bar.ex:194 +#: lib/bds/desktop/menu_bar.ex:225 #, elixir-autogen, elixir-format msgid "Cut" msgstr "" @@ -719,7 +719,7 @@ msgstr "" msgid "Default editing mode and diff presentation" msgstr "" -#: lib/bds/desktop/menu_bar.ex:197 +#: lib/bds/desktop/menu_bar.ex:228 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:98 #: lib/bds/desktop/shell_live/overlay_html/shell_overlay.html.heex:166 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:116 @@ -862,7 +862,7 @@ msgstr "" msgid "Do Not Translate" msgstr "" -#: lib/bds/desktop/menu_bar.ex:233 +#: lib/bds/desktop/menu_bar.ex:264 #: lib/bds/help_docs.ex:14 #: lib/bds/ui/registry.ex:118 #, elixir-autogen, elixir-format @@ -895,12 +895,12 @@ msgstr "" msgid "ETA: %{value}" msgstr "" -#: lib/bds/desktop/menu_bar.ex:179 +#: lib/bds/desktop/menu_bar.ex:208 #, elixir-autogen, elixir-format msgid "Edit" msgstr "" -#: lib/bds/desktop/menu_bar.ex:216 +#: lib/bds/desktop/menu_bar.ex:247 #, elixir-autogen, elixir-format msgid "Edit Menu" msgstr "" @@ -1006,7 +1006,7 @@ msgstr "" msgid "Extra URLs" msgstr "" -#: lib/bds/desktop/menu_bar.ex:178 +#: lib/bds/desktop/menu_bar.ex:207 #: lib/bds/desktop/shell_live/import_editor.ex:882 #: lib/bds/desktop/shell_live/misc_editor_html/misc_editor.html.heex:157 #, elixir-autogen, elixir-format @@ -1028,17 +1028,17 @@ msgstr "" msgid "Filename" msgstr "" -#: lib/bds/desktop/menu_bar.ex:223 +#: lib/bds/desktop/menu_bar.ex:254 #, elixir-autogen, elixir-format msgid "Fill Missing Translations" msgstr "" -#: lib/bds/desktop/menu_bar.ex:199 +#: lib/bds/desktop/menu_bar.ex:230 #, elixir-autogen, elixir-format msgid "Find" msgstr "" -#: lib/bds/desktop/menu_bar.ex:224 +#: lib/bds/desktop/menu_bar.ex:255 #, elixir-autogen, elixir-format msgid "Find Duplicate Posts" msgstr "" @@ -1053,7 +1053,7 @@ msgstr "" msgid "Find Duplicates" msgstr "" -#: lib/bds/desktop/menu_bar.ex:209 +#: lib/bds/desktop/menu_bar.ex:240 #, elixir-autogen, elixir-format msgid "Force Reload" msgstr "" @@ -1064,12 +1064,12 @@ msgstr "" msgid "Gallery" msgstr "" -#: lib/bds/desktop/menu_bar.ex:225 +#: lib/bds/desktop/menu_bar.ex:256 #, elixir-autogen, elixir-format msgid "Generate Site" msgstr "" -#: lib/bds/desktop/shell_live.ex:790 +#: lib/bds/desktop/shell_live.ex:792 #: lib/bds/desktop/shell_live/socket_state.ex:109 #: lib/bds/ui/sidebar.ex:789 #, elixir-autogen, elixir-format @@ -1083,13 +1083,13 @@ msgid "Git Diff" msgstr "" #: lib/bds/desktop/shell_data.ex:228 -#: lib/bds/desktop/shell_live.ex:786 +#: lib/bds/desktop/shell_live.ex:788 #: lib/bds/desktop/shell_live/panel_renderer.ex:171 #, elixir-autogen, elixir-format msgid "Git Log" msgstr "" -#: lib/bds/desktop/menu_bar.ex:183 +#: lib/bds/desktop/menu_bar.ex:212 #, elixir-autogen, elixir-format msgid "Help" msgstr "" @@ -1176,7 +1176,7 @@ msgstr "" msgid "Import (new slug)" msgstr "" -#: lib/bds/desktop/menu_bar.ex:186 +#: lib/bds/desktop/menu_bar.ex:215 #, elixir-autogen, elixir-format msgid "Import Media" msgstr "" @@ -1206,9 +1206,9 @@ msgstr "" msgid "Import failed: %{error}" msgstr "" -#: lib/bds/desktop/shell_live.ex:606 -#: lib/bds/desktop/shell_live.ex:902 -#: lib/bds/desktop/shell_live.ex:908 +#: lib/bds/desktop/shell_live.ex:608 +#: lib/bds/desktop/shell_live.ex:904 +#: lib/bds/desktop/shell_live.ex:910 #: lib/bds/desktop/shell_live/sidebar_create.ex:47 #, elixir-autogen, elixir-format msgid "Import media" @@ -1378,7 +1378,7 @@ msgstr "" msgid "Max Posts Per Page" msgstr "" -#: lib/bds/desktop/menu_bar.ex:203 +#: lib/bds/desktop/menu_bar.ex:234 #: lib/bds/desktop/shell_live/media_editor.ex:509 #: lib/bds/desktop/shell_live/media_editor.ex:513 #: lib/bds/desktop/shell_live/misc_editor.ex:735 @@ -1426,7 +1426,7 @@ msgstr "" msgid "Metadata" msgstr "" -#: lib/bds/desktop/menu_bar.ex:220 +#: lib/bds/desktop/menu_bar.ex:251 #: 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 @@ -1473,7 +1473,7 @@ msgstr "" msgid "New Page" msgstr "" -#: lib/bds/desktop/menu_bar.ex:185 +#: lib/bds/desktop/menu_bar.ex:214 #: lib/bds/desktop/shell_live/sidebar_create.ex:41 #: lib/bds/tui.ex:103 #, elixir-autogen, elixir-format @@ -1746,7 +1746,7 @@ msgstr "" msgid "Open" msgstr "" -#: lib/bds/desktop/menu_bar.ex:189 +#: lib/bds/desktop/menu_bar.ex:220 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:382 #, elixir-autogen, elixir-format msgid "Open Data Folder" @@ -1763,7 +1763,7 @@ msgstr "" msgid "Open Settings" msgstr "" -#: lib/bds/desktop/menu_bar.ex:188 +#: lib/bds/desktop/menu_bar.ex:217 #, elixir-autogen, elixir-format msgid "Open in Browser" msgstr "" @@ -1794,7 +1794,7 @@ msgstr "" msgid "Other (%{count})" msgstr "" -#: lib/bds/desktop/shell_live.ex:785 +#: lib/bds/desktop/shell_live.ex:787 #: lib/bds/desktop/shell_live/panel_renderer.ex:83 #, elixir-autogen, elixir-format msgid "Output" @@ -1842,7 +1842,7 @@ msgstr "" msgid "Parsing WXR file..." msgstr "" -#: lib/bds/desktop/menu_bar.ex:196 +#: lib/bds/desktop/menu_bar.ex:227 #, elixir-autogen, elixir-format msgid "Paste" msgstr "" @@ -1908,7 +1908,7 @@ msgstr "" msgid "Post saved" msgstr "" -#: lib/bds/desktop/menu_bar.ex:202 +#: 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:451 @@ -1924,7 +1924,7 @@ msgstr "" msgid "Posts (%{count})" msgstr "" -#: lib/bds/desktop/menu_bar.ex:201 +#: lib/bds/desktop/menu_bar.ex:232 #, elixir-autogen, elixir-format msgid "Preferences" msgstr "" @@ -1940,7 +1940,7 @@ msgstr "" msgid "Preview Mode" msgstr "" -#: lib/bds/desktop/menu_bar.ex:215 +#: lib/bds/desktop/menu_bar.ex:246 #, elixir-autogen, elixir-format msgid "Preview Post" msgstr "" @@ -1992,7 +1992,7 @@ msgstr "" msgid "Publish" msgstr "" -#: lib/bds/desktop/menu_bar.ex:214 +#: lib/bds/desktop/menu_bar.ex:245 #, elixir-autogen, elixir-format msgid "Publish Selected" msgstr "" @@ -2025,7 +2025,7 @@ msgstr "" msgid "Quick Actions" msgstr "" -#: lib/bds/desktop/menu_bar.ex:191 +#: lib/bds/desktop/menu_bar.ex:222 #, elixir-autogen, elixir-format msgid "Quit" msgstr "" @@ -2035,12 +2035,12 @@ msgstr "" msgid "Ready to import:" msgstr "" -#: lib/bds/desktop/menu_bar.ex:217 +#: lib/bds/desktop/menu_bar.ex:248 #, elixir-autogen, elixir-format msgid "Rebuild Database" msgstr "" -#: lib/bds/desktop/menu_bar.ex:219 +#: lib/bds/desktop/menu_bar.ex:250 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:381 #, elixir-autogen, elixir-format msgid "Rebuild Embedding Index" @@ -2071,7 +2071,7 @@ msgstr "" msgid "Rebuild filesystem-backed records and thumbnails" msgstr "" -#: lib/bds/desktop/menu_bar.ex:193 +#: lib/bds/desktop/menu_bar.ex:224 #, elixir-autogen, elixir-format msgid "Redo" msgstr "" @@ -2098,7 +2098,7 @@ msgstr "" msgid "Refresh Translation" msgstr "" -#: lib/bds/desktop/menu_bar.ex:221 +#: lib/bds/desktop/menu_bar.ex:252 #, elixir-autogen, elixir-format msgid "Regenerate Calendar" msgstr "" @@ -2108,12 +2108,12 @@ msgstr "" msgid "Regenerate Missing Thumbnails" msgstr "" -#: lib/bds/desktop/menu_bar.ex:218 +#: lib/bds/desktop/menu_bar.ex:249 #, elixir-autogen, elixir-format msgid "Reindex Text" msgstr "" -#: lib/bds/desktop/menu_bar.ex:208 +#: lib/bds/desktop/menu_bar.ex:239 #, elixir-autogen, elixir-format msgid "Reload" msgstr "" @@ -2144,7 +2144,7 @@ msgstr "" msgid "Render in Lists" msgstr "" -#: lib/bds/desktop/menu_bar.ex:200 +#: lib/bds/desktop/menu_bar.ex:231 #, elixir-autogen, elixir-format msgid "Replace" msgstr "" @@ -2161,12 +2161,12 @@ msgstr "" msgid "Replace Media File" msgstr "" -#: lib/bds/desktop/menu_bar.ex:236 +#: lib/bds/desktop/menu_bar.ex:267 #, elixir-autogen, elixir-format msgid "Report Issue" msgstr "" -#: lib/bds/desktop/menu_bar.ex:210 +#: lib/bds/desktop/menu_bar.ex:241 #, elixir-autogen, elixir-format msgid "Reset Zoom" msgstr "" @@ -2221,7 +2221,7 @@ msgstr "" msgid "SSH Mode" msgstr "" -#: lib/bds/desktop/menu_bar.ex:187 +#: lib/bds/desktop/menu_bar.ex:216 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:89 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:299 #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:13 @@ -2340,7 +2340,7 @@ msgstr "" msgid "Select & Analyze" msgstr "" -#: lib/bds/desktop/menu_bar.ex:198 +#: lib/bds/desktop/menu_bar.ex:229 #, elixir-autogen, elixir-format msgid "Select All" msgstr "" @@ -2552,7 +2552,7 @@ msgstr "" msgid "Tags" msgstr "" -#: lib/bds/desktop/shell_live.ex:784 +#: lib/bds/desktop/shell_live.ex:786 #: lib/bds/desktop/shell_live/panel_renderer.ex:54 #, elixir-autogen, elixir-format msgid "Tasks" @@ -2648,12 +2648,12 @@ msgstr "" msgid "Title" msgstr "" -#: lib/bds/desktop/menu_bar.ex:206 +#: lib/bds/desktop/menu_bar.ex:237 #, elixir-autogen, elixir-format msgid "Toggle Assistant Sidebar" msgstr "" -#: lib/bds/desktop/menu_bar.ex:207 +#: lib/bds/desktop/menu_bar.ex:238 #, elixir-autogen, elixir-format msgid "Toggle Dev Tools" msgstr "" @@ -2664,17 +2664,17 @@ msgstr "" msgid "Toggle Filters" msgstr "" -#: lib/bds/desktop/menu_bar.ex:213 +#: lib/bds/desktop/menu_bar.ex:244 #, elixir-autogen, elixir-format msgid "Toggle Full Screen" msgstr "" -#: lib/bds/desktop/menu_bar.ex:205 +#: lib/bds/desktop/menu_bar.ex:236 #, elixir-autogen, elixir-format msgid "Toggle Panel" msgstr "" -#: lib/bds/desktop/menu_bar.ex:204 +#: lib/bds/desktop/menu_bar.ex:235 #, elixir-autogen, elixir-format msgid "Toggle Sidebar" msgstr "" @@ -2770,7 +2770,7 @@ msgstr "" msgid "URL" msgstr "" -#: lib/bds/desktop/menu_bar.ex:192 +#: lib/bds/desktop/menu_bar.ex:223 #, elixir-autogen, elixir-format msgid "Undo" msgstr "" @@ -2820,7 +2820,7 @@ msgstr "" msgid "Updated URLs" msgstr "" -#: lib/bds/desktop/menu_bar.ex:228 +#: lib/bds/desktop/menu_bar.ex:259 #, elixir-autogen, elixir-format msgid "Upload Site" msgstr "" @@ -2847,22 +2847,22 @@ msgstr "" msgid "Validate" msgstr "" -#: lib/bds/desktop/menu_bar.ex:227 +#: lib/bds/desktop/menu_bar.ex:258 #, elixir-autogen, elixir-format msgid "Validate Site" msgstr "" -#: lib/bds/desktop/menu_bar.ex:222 +#: lib/bds/desktop/menu_bar.ex:253 #, elixir-autogen, elixir-format msgid "Validate Translations" msgstr "" -#: lib/bds/desktop/menu_bar.ex:180 +#: lib/bds/desktop/menu_bar.ex:209 #, elixir-autogen, elixir-format msgid "View" msgstr "" -#: lib/bds/desktop/menu_bar.ex:235 +#: lib/bds/desktop/menu_bar.ex:266 #, elixir-autogen, elixir-format msgid "View on GitHub" msgstr "" @@ -2906,12 +2906,12 @@ msgstr "" msgid "You" msgstr "" -#: lib/bds/desktop/menu_bar.ex:211 +#: lib/bds/desktop/menu_bar.ex:242 #, elixir-autogen, elixir-format msgid "Zoom In" msgstr "" -#: lib/bds/desktop/menu_bar.ex:212 +#: lib/bds/desktop/menu_bar.ex:243 #, elixir-autogen, elixir-format msgid "Zoom Out" msgstr "" @@ -3233,12 +3233,12 @@ msgstr "" msgid "Comparing database and filesystem metadata" msgstr "Comparing database and filesystem metadata" -#: lib/bds/desktop/shell_live.ex:682 +#: lib/bds/desktop/shell_live.ex:684 #, elixir-autogen, elixir-format msgid "Added %{count} images to post" msgstr "Added %{count} images to post" -#: lib/bds/desktop/shell_live.ex:650 +#: lib/bds/desktop/shell_live.ex:652 #, elixir-autogen, elixir-format msgid "Added %{title}" msgstr "Added %{title}" @@ -3258,18 +3258,18 @@ msgstr "" msgid "Image Import Concurrency" msgstr "Image Import Concurrency" -#: lib/bds/desktop/shell_live.ex:442 -#: lib/bds/desktop/shell_live.ex:455 -#: lib/bds/desktop/shell_live.ex:649 -#: lib/bds/desktop/shell_live.ex:681 -#: lib/bds/desktop/shell_live.ex:692 -#: lib/bds/desktop/shell_live.ex:703 +#: lib/bds/desktop/shell_live.ex:444 +#: lib/bds/desktop/shell_live.ex:457 +#: lib/bds/desktop/shell_live.ex:651 +#: lib/bds/desktop/shell_live.ex:683 +#: lib/bds/desktop/shell_live.ex:694 +#: lib/bds/desktop/shell_live.ex:705 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:420 #, elixir-autogen, elixir-format msgid "Add Gallery Images" msgstr "Add Gallery Images" -#: lib/bds/desktop/shell_live.ex:704 +#: lib/bds/desktop/shell_live.ex:706 #, elixir-autogen, elixir-format msgid "Failed to process %{path}: %{reason}" msgstr "Failed to process %{path}: %{reason}" @@ -3460,12 +3460,12 @@ msgstr "" msgid "untracked" msgstr "" -#: lib/bds/desktop/shell_live.ex:810 +#: lib/bds/desktop/shell_live.ex:812 #, elixir-autogen, elixir-format, fuzzy msgid "Blogmark" msgstr "Blogmark" -#: lib/bds/desktop/shell_live.ex:853 +#: lib/bds/desktop/shell_live.ex:855 #, elixir-autogen, elixir-format msgid "Open a project before importing a blogmark." msgstr "" @@ -3506,7 +3506,7 @@ msgstr "" msgid "Failed to copy bookmarklet to clipboard" msgstr "" -#: lib/bds/desktop/shell_live.ex:822 +#: lib/bds/desktop/shell_live.ex:824 #, elixir-autogen, elixir-format msgid "The project this blogmark targets does not exist here." msgstr "" @@ -3516,7 +3516,7 @@ msgstr "" msgid "Suggested tags" msgstr "" -#: lib/bds/desktop/menu_bar.ex:226 +#: lib/bds/desktop/menu_bar.ex:257 #, elixir-autogen, elixir-format msgid "Force Render Site" msgstr "" @@ -3531,22 +3531,22 @@ msgstr "" msgid "Rebuild Post Links" msgstr "" -#: lib/bds/desktop/menu_bar.ex:231 +#: lib/bds/desktop/menu_bar.ex:262 #, elixir-autogen, elixir-format msgid "Bring All to Front" msgstr "" -#: lib/bds/desktop/menu_bar.ex:229 +#: lib/bds/desktop/menu_bar.ex:260 #, elixir-autogen, elixir-format msgid "Minimize" msgstr "" -#: lib/bds/desktop/menu_bar.ex:182 +#: lib/bds/desktop/menu_bar.ex:211 #, elixir-autogen, elixir-format msgid "Window" msgstr "" -#: lib/bds/desktop/menu_bar.ex:230 +#: lib/bds/desktop/menu_bar.ex:261 #, elixir-autogen, elixir-format, fuzzy msgid "Zoom" msgstr "" @@ -3702,3 +3702,35 @@ msgstr "" #, elixir-autogen, elixir-format msgid "esc to close" msgstr "" + +#: lib/bds/desktop/menu_bar.ex:83 +#: lib/bds/desktop/shell_live.ex:1110 +#, elixir-autogen, elixir-format +msgid "Connect to Server" +msgstr "" + +#: lib/bds/desktop/menu_bar.ex:218 +#, elixir-autogen, elixir-format +msgid "Connect to Server…" +msgstr "" + +#: lib/bds/desktop/menu_bar.ex:84 +#, elixir-autogen, elixir-format +msgid "Connection failed: %{reason}" +msgstr "" + +#: lib/bds/desktop/menu_bar.ex:219 +#, elixir-autogen, elixir-format +msgid "Disconnect from Server" +msgstr "" + +#: lib/bds/desktop/menu_bar.ex:72 +#: lib/bds/desktop/shell_live.ex:1097 +#, elixir-autogen, elixir-format +msgid "Server address (user@host or user@host:port), public-key auth:" +msgstr "" + +#: lib/bds/desktop/remote_connection.ex:82 +#, elixir-autogen, elixir-format +msgid "Use the form user@host or user@host:port." +msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/ui.po b/priv/gettext/es/LC_MESSAGES/ui.po index c09e3f0..8f94bcc 100644 --- a/priv/gettext/es/LC_MESSAGES/ui.po +++ b/priv/gettext/es/LC_MESSAGES/ui.po @@ -110,12 +110,12 @@ msgstr "La IA sugerirá mapeos de elementos nuevos a existentes para evitar dupl msgid "API" msgstr "API" -#: lib/bds/desktop/menu_bar.ex:234 +#: lib/bds/desktop/menu_bar.ex:265 #, elixir-autogen, elixir-format msgid "API Documentation" msgstr "Documentación de API" -#: lib/bds/desktop/menu_bar.ex:232 +#: lib/bds/desktop/menu_bar.ex:263 #, elixir-autogen, elixir-format msgid "About" msgstr "Acerca de" @@ -341,7 +341,7 @@ msgstr "Autor" msgid "Auto" msgstr "Automático" -#: lib/bds/desktop/shell_live.ex:443 +#: lib/bds/desktop/shell_live.ex:445 #: lib/bds/desktop/shell_live/chat_editor.ex:234 #: lib/bds/desktop/shell_live/media_editor.ex:171 #: lib/bds/desktop/shell_live/media_editor.ex:364 @@ -372,7 +372,7 @@ msgstr "Idiomas disponibles" msgid "Backlinks" msgstr "Referencias entrantes" -#: lib/bds/desktop/menu_bar.ex:181 +#: lib/bds/desktop/menu_bar.ex:210 #, elixir-autogen, elixir-format msgid "Blog" msgstr "Blog" @@ -491,7 +491,7 @@ msgstr "Valores predeterminados de categoría, opciones de renderizado y conexi msgid "Category name is required" msgstr "El nombre de la categoría es obligatorio" -#: lib/bds/desktop/shell_live.ex:789 +#: lib/bds/desktop/shell_live.ex:791 #: lib/bds/desktop/shell_live/chat_editor.ex:87 #: lib/bds/desktop/shell_live/chat_editor.ex:233 #: lib/bds/desktop/shell_live/chat_editor.ex:323 @@ -549,7 +549,7 @@ msgstr "Limpiar etiquetas" msgid "Click to %{action} mapping" msgstr "Haz clic para %{action} el mapeo" -#: lib/bds/desktop/menu_bar.ex:190 +#: lib/bds/desktop/menu_bar.ex:221 #, elixir-autogen, elixir-format msgid "Close Tab" msgstr "Cerrar pestaña" @@ -600,7 +600,7 @@ msgstr "Contenido" msgid "Content Categories" msgstr "Categorías de contenido" -#: lib/bds/desktop/menu_bar.ex:195 +#: lib/bds/desktop/menu_bar.ex:226 #, elixir-autogen, elixir-format msgid "Copy" msgstr "Copiar" @@ -653,7 +653,7 @@ msgstr "Crear etiqueta" msgid "Created" msgstr "Creado" -#: lib/bds/desktop/menu_bar.ex:194 +#: lib/bds/desktop/menu_bar.ex:225 #, elixir-autogen, elixir-format msgid "Cut" msgstr "Cortar" @@ -719,7 +719,7 @@ msgstr "Modo de editor predeterminado" msgid "Default editing mode and diff presentation" msgstr "Modo de edición predeterminado y presentación de diff" -#: lib/bds/desktop/menu_bar.ex:197 +#: lib/bds/desktop/menu_bar.ex:228 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:98 #: lib/bds/desktop/shell_live/overlay_html/shell_overlay.html.heex:166 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:116 @@ -862,7 +862,7 @@ msgstr "Texto mostrado" msgid "Do Not Translate" msgstr "No traducir" -#: lib/bds/desktop/menu_bar.ex:233 +#: lib/bds/desktop/menu_bar.ex:264 #: lib/bds/help_docs.ex:14 #: lib/bds/ui/registry.ex:118 #, elixir-autogen, elixir-format @@ -895,12 +895,12 @@ msgstr "Arrastrar elemento del menú" msgid "ETA: %{value}" msgstr "Tiempo restante: %{value}" -#: lib/bds/desktop/menu_bar.ex:179 +#: lib/bds/desktop/menu_bar.ex:208 #, elixir-autogen, elixir-format msgid "Edit" msgstr "Editar" -#: lib/bds/desktop/menu_bar.ex:216 +#: lib/bds/desktop/menu_bar.ex:247 #, elixir-autogen, elixir-format msgid "Edit Menu" msgstr "Editar menú" @@ -1006,7 +1006,7 @@ msgstr "Externo" msgid "Extra URLs" msgstr "URLs adicionales" -#: lib/bds/desktop/menu_bar.ex:178 +#: lib/bds/desktop/menu_bar.ex:207 #: lib/bds/desktop/shell_live/import_editor.ex:882 #: lib/bds/desktop/shell_live/misc_editor_html/misc_editor.html.heex:157 #, elixir-autogen, elixir-format @@ -1028,17 +1028,17 @@ msgstr "Archivo a BD" msgid "Filename" msgstr "Nombre de archivo" -#: lib/bds/desktop/menu_bar.ex:223 +#: lib/bds/desktop/menu_bar.ex:254 #, elixir-autogen, elixir-format msgid "Fill Missing Translations" msgstr "Completar traducciones faltantes" -#: lib/bds/desktop/menu_bar.ex:199 +#: lib/bds/desktop/menu_bar.ex:230 #, elixir-autogen, elixir-format msgid "Find" msgstr "Buscar" -#: lib/bds/desktop/menu_bar.ex:224 +#: lib/bds/desktop/menu_bar.ex:255 #, elixir-autogen, elixir-format msgid "Find Duplicate Posts" msgstr "Buscar entradas duplicadas" @@ -1053,7 +1053,7 @@ msgstr "Buscar entradas duplicadas" msgid "Find Duplicates" msgstr "Buscar duplicados" -#: lib/bds/desktop/menu_bar.ex:209 +#: lib/bds/desktop/menu_bar.ex:240 #, elixir-autogen, elixir-format msgid "Force Reload" msgstr "Recarga forzada" @@ -1064,12 +1064,12 @@ msgstr "Recarga forzada" msgid "Gallery" msgstr "Galeria" -#: lib/bds/desktop/menu_bar.ex:225 +#: lib/bds/desktop/menu_bar.ex:256 #, elixir-autogen, elixir-format msgid "Generate Site" msgstr "Generar sitio" -#: lib/bds/desktop/shell_live.ex:790 +#: lib/bds/desktop/shell_live.ex:792 #: lib/bds/desktop/shell_live/socket_state.ex:109 #: lib/bds/ui/sidebar.ex:789 #, elixir-autogen, elixir-format @@ -1083,13 +1083,13 @@ msgid "Git Diff" msgstr "Diff de Git" #: lib/bds/desktop/shell_data.ex:228 -#: lib/bds/desktop/shell_live.ex:786 +#: lib/bds/desktop/shell_live.ex:788 #: lib/bds/desktop/shell_live/panel_renderer.ex:171 #, elixir-autogen, elixir-format msgid "Git Log" msgstr "Registro Git" -#: lib/bds/desktop/menu_bar.ex:183 +#: lib/bds/desktop/menu_bar.ex:212 #, elixir-autogen, elixir-format msgid "Help" msgstr "Ayuda" @@ -1176,7 +1176,7 @@ msgstr "Importar %{count} elementos" msgid "Import (new slug)" msgstr "Importar (nuevo slug)" -#: lib/bds/desktop/menu_bar.ex:186 +#: lib/bds/desktop/menu_bar.ex:215 #, elixir-autogen, elixir-format msgid "Import Media" msgstr "Importar medios" @@ -1206,9 +1206,9 @@ msgstr "Definiciones de importación" msgid "Import failed: %{error}" msgstr "La importación falló: %{error}" -#: lib/bds/desktop/shell_live.ex:606 -#: lib/bds/desktop/shell_live.ex:902 -#: lib/bds/desktop/shell_live.ex:908 +#: lib/bds/desktop/shell_live.ex:608 +#: lib/bds/desktop/shell_live.ex:904 +#: lib/bds/desktop/shell_live.ex:910 #: lib/bds/desktop/shell_live/sidebar_create.ex:47 #, elixir-autogen, elixir-format msgid "Import media" @@ -1378,7 +1378,7 @@ msgstr "Markdown" msgid "Max Posts Per Page" msgstr "Máximo de publicaciones por página" -#: lib/bds/desktop/menu_bar.ex:203 +#: lib/bds/desktop/menu_bar.ex:234 #: lib/bds/desktop/shell_live/media_editor.ex:509 #: lib/bds/desktop/shell_live/media_editor.ex:513 #: lib/bds/desktop/shell_live/misc_editor.ex:735 @@ -1426,7 +1426,7 @@ msgstr "Combinar etiquetas" msgid "Metadata" msgstr "Metadatos" -#: lib/bds/desktop/menu_bar.ex:220 +#: lib/bds/desktop/menu_bar.ex:251 #: 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 @@ -1473,7 +1473,7 @@ msgstr "Nueva definición" msgid "New Page" msgstr "Nueva página" -#: lib/bds/desktop/menu_bar.ex:185 +#: lib/bds/desktop/menu_bar.ex:214 #: lib/bds/desktop/shell_live/sidebar_create.ex:41 #: lib/bds/tui.ex:103 #, elixir-autogen, elixir-format @@ -1746,7 +1746,7 @@ msgstr "Modelo de títulos en línea" msgid "Open" msgstr "Abrir" -#: lib/bds/desktop/menu_bar.ex:189 +#: lib/bds/desktop/menu_bar.ex:220 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:382 #, elixir-autogen, elixir-format msgid "Open Data Folder" @@ -1763,7 +1763,7 @@ msgstr "Abrir blog existente" msgid "Open Settings" msgstr "Abrir Ajustes" -#: lib/bds/desktop/menu_bar.ex:188 +#: lib/bds/desktop/menu_bar.ex:217 #, elixir-autogen, elixir-format msgid "Open in Browser" msgstr "Abrir en el navegador" @@ -1794,7 +1794,7 @@ msgstr "Otros" msgid "Other (%{count})" msgstr "Otros (%{count})" -#: lib/bds/desktop/shell_live.ex:785 +#: lib/bds/desktop/shell_live.ex:787 #: lib/bds/desktop/shell_live/panel_renderer.ex:83 #, elixir-autogen, elixir-format msgid "Output" @@ -1842,7 +1842,7 @@ msgstr "Par descartado" msgid "Parsing WXR file..." msgstr "Analizando archivo WXR..." -#: lib/bds/desktop/menu_bar.ex:196 +#: lib/bds/desktop/menu_bar.ex:227 #, elixir-autogen, elixir-format msgid "Paste" msgstr "Pegar" @@ -1908,7 +1908,7 @@ msgstr "Artículo publicado" msgid "Post saved" msgstr "Artículo guardado" -#: lib/bds/desktop/menu_bar.ex:202 +#: 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:451 @@ -1924,7 +1924,7 @@ msgstr "Publicaciones" msgid "Posts (%{count})" msgstr "Publicaciones (%{count})" -#: lib/bds/desktop/menu_bar.ex:201 +#: lib/bds/desktop/menu_bar.ex:232 #, elixir-autogen, elixir-format msgid "Preferences" msgstr "Preferencias" @@ -1940,7 +1940,7 @@ msgstr "Vista previa" msgid "Preview Mode" msgstr "Modo de vista previa" -#: lib/bds/desktop/menu_bar.ex:215 +#: lib/bds/desktop/menu_bar.ex:246 #, elixir-autogen, elixir-format msgid "Preview Post" msgstr "Vista previa de entrada" @@ -1992,7 +1992,7 @@ msgstr "URL pública" msgid "Publish" msgstr "Publicar" -#: lib/bds/desktop/menu_bar.ex:214 +#: lib/bds/desktop/menu_bar.ex:245 #, elixir-autogen, elixir-format msgid "Publish Selected" msgstr "Publicar seleccionados" @@ -2025,7 +2025,7 @@ msgstr "Publicación" msgid "Quick Actions" msgstr "Acciones rápidas" -#: lib/bds/desktop/menu_bar.ex:191 +#: lib/bds/desktop/menu_bar.ex:222 #, elixir-autogen, elixir-format msgid "Quit" msgstr "Salir" @@ -2035,12 +2035,12 @@ msgstr "Salir" msgid "Ready to import:" msgstr "Listo para importar:" -#: lib/bds/desktop/menu_bar.ex:217 +#: lib/bds/desktop/menu_bar.ex:248 #, elixir-autogen, elixir-format msgid "Rebuild Database" msgstr "Reconstruir base de datos" -#: lib/bds/desktop/menu_bar.ex:219 +#: lib/bds/desktop/menu_bar.ex:250 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:381 #, elixir-autogen, elixir-format msgid "Rebuild Embedding Index" @@ -2071,7 +2071,7 @@ msgstr "Reconstruir plantillas desde archivos" msgid "Rebuild filesystem-backed records and thumbnails" msgstr "Reconstruir registros respaldados por el sistema de archivos y miniaturas" -#: lib/bds/desktop/menu_bar.ex:193 +#: lib/bds/desktop/menu_bar.ex:224 #, elixir-autogen, elixir-format msgid "Redo" msgstr "Rehacer" @@ -2098,7 +2098,7 @@ msgstr "Actualizar modelos en línea" msgid "Refresh Translation" msgstr "Actualizar traducción" -#: lib/bds/desktop/menu_bar.ex:221 +#: lib/bds/desktop/menu_bar.ex:252 #, elixir-autogen, elixir-format msgid "Regenerate Calendar" msgstr "Regenerar calendario" @@ -2108,12 +2108,12 @@ msgstr "Regenerar calendario" msgid "Regenerate Missing Thumbnails" msgstr "Regenerar miniaturas faltantes" -#: lib/bds/desktop/menu_bar.ex:218 +#: lib/bds/desktop/menu_bar.ex:249 #, elixir-autogen, elixir-format msgid "Reindex Text" msgstr "Reindexar texto" -#: lib/bds/desktop/menu_bar.ex:208 +#: lib/bds/desktop/menu_bar.ex:239 #, elixir-autogen, elixir-format msgid "Reload" msgstr "Recargar" @@ -2144,7 +2144,7 @@ msgstr "Eliminar etiqueta" msgid "Render in Lists" msgstr "Mostrar en listas" -#: lib/bds/desktop/menu_bar.ex:200 +#: lib/bds/desktop/menu_bar.ex:231 #, elixir-autogen, elixir-format msgid "Replace" msgstr "Reemplazar" @@ -2161,12 +2161,12 @@ msgstr "Reemplazar archivo" msgid "Replace Media File" msgstr "Reemplazar archivo de medios" -#: lib/bds/desktop/menu_bar.ex:236 +#: lib/bds/desktop/menu_bar.ex:267 #, elixir-autogen, elixir-format msgid "Report Issue" msgstr "Informar de problema" -#: lib/bds/desktop/menu_bar.ex:210 +#: lib/bds/desktop/menu_bar.ex:241 #, elixir-autogen, elixir-format msgid "Reset Zoom" msgstr "Restablecer zoom" @@ -2221,7 +2221,7 @@ msgstr "Ejecutar" msgid "SSH Mode" msgstr "Modo SSH" -#: lib/bds/desktop/menu_bar.ex:187 +#: lib/bds/desktop/menu_bar.ex:216 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:89 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:299 #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:13 @@ -2340,7 +2340,7 @@ msgstr "Buscar en la configuración" msgid "Select & Analyze" msgstr "Seleccionar y analizar" -#: lib/bds/desktop/menu_bar.ex:198 +#: lib/bds/desktop/menu_bar.ex:229 #, elixir-autogen, elixir-format msgid "Select All" msgstr "Seleccionar todo" @@ -2552,7 +2552,7 @@ msgstr "Nombre de la etiqueta" msgid "Tags" msgstr "Etiquetas" -#: lib/bds/desktop/shell_live.ex:784 +#: lib/bds/desktop/shell_live.ex:786 #: lib/bds/desktop/shell_live/panel_renderer.ex:54 #, elixir-autogen, elixir-format msgid "Tasks" @@ -2648,12 +2648,12 @@ msgstr "Este elemento esta referenciado por:" msgid "Title" msgstr "Titulo" -#: lib/bds/desktop/menu_bar.ex:206 +#: lib/bds/desktop/menu_bar.ex:237 #, elixir-autogen, elixir-format msgid "Toggle Assistant Sidebar" msgstr "Alternar asistente" -#: lib/bds/desktop/menu_bar.ex:207 +#: lib/bds/desktop/menu_bar.ex:238 #, elixir-autogen, elixir-format msgid "Toggle Dev Tools" msgstr "Alternar herramientas de desarrollo" @@ -2664,17 +2664,17 @@ msgstr "Alternar herramientas de desarrollo" msgid "Toggle Filters" msgstr "Alternar filtros" -#: lib/bds/desktop/menu_bar.ex:213 +#: lib/bds/desktop/menu_bar.ex:244 #, elixir-autogen, elixir-format msgid "Toggle Full Screen" msgstr "Pantalla completa" -#: lib/bds/desktop/menu_bar.ex:205 +#: lib/bds/desktop/menu_bar.ex:236 #, elixir-autogen, elixir-format msgid "Toggle Panel" msgstr "Alternar panel" -#: lib/bds/desktop/menu_bar.ex:204 +#: lib/bds/desktop/menu_bar.ex:235 #, elixir-autogen, elixir-format msgid "Toggle Sidebar" msgstr "Alternar barra lateral" @@ -2770,7 +2770,7 @@ msgstr "UI" msgid "URL" msgstr "URL" -#: lib/bds/desktop/menu_bar.ex:192 +#: lib/bds/desktop/menu_bar.ex:223 #, elixir-autogen, elixir-format msgid "Undo" msgstr "Deshacer" @@ -2820,7 +2820,7 @@ msgstr "Actualizado" msgid "Updated URLs" msgstr "URLs actualizadas" -#: lib/bds/desktop/menu_bar.ex:228 +#: lib/bds/desktop/menu_bar.ex:259 #, elixir-autogen, elixir-format msgid "Upload Site" msgstr "Subir sitio" @@ -2847,22 +2847,22 @@ msgstr "Nombre de usuario" msgid "Validate" msgstr "Validar" -#: lib/bds/desktop/menu_bar.ex:227 +#: lib/bds/desktop/menu_bar.ex:258 #, elixir-autogen, elixir-format msgid "Validate Site" msgstr "Validar sitio" -#: lib/bds/desktop/menu_bar.ex:222 +#: lib/bds/desktop/menu_bar.ex:253 #, elixir-autogen, elixir-format msgid "Validate Translations" msgstr "Validar traducciones" -#: lib/bds/desktop/menu_bar.ex:180 +#: lib/bds/desktop/menu_bar.ex:209 #, elixir-autogen, elixir-format msgid "View" msgstr "Ver" -#: lib/bds/desktop/menu_bar.ex:235 +#: lib/bds/desktop/menu_bar.ex:266 #, elixir-autogen, elixir-format msgid "View on GitHub" msgstr "Ver en GitHub" @@ -2906,12 +2906,12 @@ msgstr "Ajustar líneas largas" msgid "You" msgstr "Tú" -#: lib/bds/desktop/menu_bar.ex:211 +#: lib/bds/desktop/menu_bar.ex:242 #, elixir-autogen, elixir-format msgid "Zoom In" msgstr "Acercar" -#: lib/bds/desktop/menu_bar.ex:212 +#: lib/bds/desktop/menu_bar.ex:243 #, elixir-autogen, elixir-format msgid "Zoom Out" msgstr "Alejar" @@ -3233,12 +3233,12 @@ msgstr "Bienvenido al asistente de IA" msgid "Comparing database and filesystem metadata" msgstr "Comparando metadatos de la base de datos y del sistema de archivos" -#: lib/bds/desktop/shell_live.ex:682 +#: lib/bds/desktop/shell_live.ex:684 #, elixir-autogen, elixir-format msgid "Added %{count} images to post" msgstr "%{count} imágenes añadidas a la publicación" -#: lib/bds/desktop/shell_live.ex:650 +#: lib/bds/desktop/shell_live.ex:652 #, elixir-autogen, elixir-format msgid "Added %{title}" msgstr "%{title} añadido" @@ -3258,18 +3258,18 @@ msgstr "Guía del usuario para flujos editoriales, medios, plantillas, traducci msgid "Image Import Concurrency" msgstr "Importación simultánea de imágenes" -#: lib/bds/desktop/shell_live.ex:442 -#: lib/bds/desktop/shell_live.ex:455 -#: lib/bds/desktop/shell_live.ex:649 -#: lib/bds/desktop/shell_live.ex:681 -#: lib/bds/desktop/shell_live.ex:692 -#: lib/bds/desktop/shell_live.ex:703 +#: lib/bds/desktop/shell_live.ex:444 +#: lib/bds/desktop/shell_live.ex:457 +#: lib/bds/desktop/shell_live.ex:651 +#: lib/bds/desktop/shell_live.ex:683 +#: lib/bds/desktop/shell_live.ex:694 +#: lib/bds/desktop/shell_live.ex:705 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:420 #, elixir-autogen, elixir-format msgid "Add Gallery Images" msgstr "Añadir imágenes a la galería" -#: lib/bds/desktop/shell_live.ex:704 +#: lib/bds/desktop/shell_live.ex:706 #, elixir-autogen, elixir-format msgid "Failed to process %{path}: %{reason}" msgstr "No se pudo procesar %{path}: %{reason}" @@ -3460,12 +3460,12 @@ msgstr "renombrado" msgid "untracked" msgstr "sin seguimiento" -#: lib/bds/desktop/shell_live.ex:810 +#: lib/bds/desktop/shell_live.ex:812 #, elixir-autogen, elixir-format msgid "Blogmark" msgstr "Blogmark" -#: lib/bds/desktop/shell_live.ex:853 +#: lib/bds/desktop/shell_live.ex:855 #, elixir-autogen, elixir-format msgid "Open a project before importing a blogmark." msgstr "Abre un proyecto antes de importar un blogmark." @@ -3506,7 +3506,7 @@ msgstr "Eliminar etiqueta" msgid "Failed to copy bookmarklet to clipboard" msgstr "Error al copiar el bookmarklet al portapapeles" -#: lib/bds/desktop/shell_live.ex:822 +#: lib/bds/desktop/shell_live.ex:824 #, elixir-autogen, elixir-format msgid "The project this blogmark targets does not exist here." msgstr "El proyecto al que apunta este blogmark no existe aquí." @@ -3516,7 +3516,7 @@ msgstr "El proyecto al que apunta este blogmark no existe aquí." msgid "Suggested tags" msgstr "Etiquetas sugeridas" -#: lib/bds/desktop/menu_bar.ex:226 +#: lib/bds/desktop/menu_bar.ex:257 #, elixir-autogen, elixir-format msgid "Force Render Site" msgstr "Forzar la regeneración del sitio" @@ -3531,22 +3531,22 @@ msgstr "Reconstruir enlaces de medios" msgid "Rebuild Post Links" msgstr "Reconstruir enlaces de entradas" -#: lib/bds/desktop/menu_bar.ex:231 +#: lib/bds/desktop/menu_bar.ex:262 #, elixir-autogen, elixir-format msgid "Bring All to Front" msgstr "Traer todo al frente" -#: lib/bds/desktop/menu_bar.ex:229 +#: lib/bds/desktop/menu_bar.ex:260 #, elixir-autogen, elixir-format msgid "Minimize" msgstr "Minimizar" -#: lib/bds/desktop/menu_bar.ex:182 +#: lib/bds/desktop/menu_bar.ex:211 #, elixir-autogen, elixir-format msgid "Window" msgstr "Ventana" -#: lib/bds/desktop/menu_bar.ex:230 +#: lib/bds/desktop/menu_bar.ex:261 #, elixir-autogen, elixir-format msgid "Zoom" msgstr "Ampliar/reducir" @@ -3702,3 +3702,35 @@ msgstr "intro abrir · n nueva entrada · 1-5 vistas · r actualizar · ctrl+q s #, elixir-autogen, elixir-format msgid "esc to close" msgstr "esc para cerrar" + +#: lib/bds/desktop/menu_bar.ex:83 +#: lib/bds/desktop/shell_live.ex:1110 +#, elixir-autogen, elixir-format +msgid "Connect to Server" +msgstr "Conectar al servidor" + +#: lib/bds/desktop/menu_bar.ex:218 +#, elixir-autogen, elixir-format +msgid "Connect to Server…" +msgstr "Conectar al servidor…" + +#: lib/bds/desktop/menu_bar.ex:84 +#, elixir-autogen, elixir-format +msgid "Connection failed: %{reason}" +msgstr "Error de conexión: %{reason}" + +#: lib/bds/desktop/menu_bar.ex:219 +#, elixir-autogen, elixir-format +msgid "Disconnect from Server" +msgstr "Desconectar del servidor" + +#: lib/bds/desktop/menu_bar.ex:72 +#: lib/bds/desktop/shell_live.ex:1097 +#, elixir-autogen, elixir-format +msgid "Server address (user@host or user@host:port), public-key auth:" +msgstr "Dirección del servidor (user@host o user@host:port), autenticación de clave pública:" + +#: lib/bds/desktop/remote_connection.ex:82 +#, elixir-autogen, elixir-format +msgid "Use the form user@host or user@host:port." +msgstr "Usa el formato user@host o user@host:port." diff --git a/priv/gettext/fr/LC_MESSAGES/ui.po b/priv/gettext/fr/LC_MESSAGES/ui.po index a14a69e..aa04b47 100644 --- a/priv/gettext/fr/LC_MESSAGES/ui.po +++ b/priv/gettext/fr/LC_MESSAGES/ui.po @@ -110,12 +110,12 @@ msgstr "L’IA suggère des correspondances entre nouveaux éléments et éléme msgid "API" msgstr "API" -#: lib/bds/desktop/menu_bar.ex:234 +#: lib/bds/desktop/menu_bar.ex:265 #, elixir-autogen, elixir-format msgid "API Documentation" msgstr "Documentation API" -#: lib/bds/desktop/menu_bar.ex:232 +#: lib/bds/desktop/menu_bar.ex:263 #, elixir-autogen, elixir-format msgid "About" msgstr "À propos" @@ -341,7 +341,7 @@ msgstr "Auteur" msgid "Auto" msgstr "Automatique" -#: lib/bds/desktop/shell_live.ex:443 +#: lib/bds/desktop/shell_live.ex:445 #: lib/bds/desktop/shell_live/chat_editor.ex:234 #: lib/bds/desktop/shell_live/media_editor.ex:171 #: lib/bds/desktop/shell_live/media_editor.ex:364 @@ -372,7 +372,7 @@ msgstr "Langues disponibles" msgid "Backlinks" msgstr "Rétroliens" -#: lib/bds/desktop/menu_bar.ex:181 +#: lib/bds/desktop/menu_bar.ex:210 #, elixir-autogen, elixir-format msgid "Blog" msgstr "Blog" @@ -491,7 +491,7 @@ msgstr "Valeurs par défaut des catégories, options de rendu et liaison des mod msgid "Category name is required" msgstr "Le nom de la catégorie est requis" -#: lib/bds/desktop/shell_live.ex:789 +#: lib/bds/desktop/shell_live.ex:791 #: lib/bds/desktop/shell_live/chat_editor.ex:87 #: lib/bds/desktop/shell_live/chat_editor.ex:233 #: lib/bds/desktop/shell_live/chat_editor.ex:323 @@ -549,7 +549,7 @@ msgstr "Effacer les étiquettes" msgid "Click to %{action} mapping" msgstr "Cliquer pour %{action} le mapping" -#: lib/bds/desktop/menu_bar.ex:190 +#: lib/bds/desktop/menu_bar.ex:221 #, elixir-autogen, elixir-format msgid "Close Tab" msgstr "Fermer l’onglet" @@ -600,7 +600,7 @@ msgstr "Contenu" msgid "Content Categories" msgstr "Catégories de contenu" -#: lib/bds/desktop/menu_bar.ex:195 +#: lib/bds/desktop/menu_bar.ex:226 #, elixir-autogen, elixir-format msgid "Copy" msgstr "Copier" @@ -653,7 +653,7 @@ msgstr "Créer un mot-clé" msgid "Created" msgstr "Créé" -#: lib/bds/desktop/menu_bar.ex:194 +#: lib/bds/desktop/menu_bar.ex:225 #, elixir-autogen, elixir-format msgid "Cut" msgstr "Couper" @@ -719,7 +719,7 @@ msgstr "Mode d’édition par défaut" msgid "Default editing mode and diff presentation" msgstr "Mode d’édition par défaut et présentation des diffs" -#: lib/bds/desktop/menu_bar.ex:197 +#: lib/bds/desktop/menu_bar.ex:228 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:98 #: lib/bds/desktop/shell_live/overlay_html/shell_overlay.html.heex:166 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:116 @@ -862,7 +862,7 @@ msgstr "Texte affiche" msgid "Do Not Translate" msgstr "Ne pas traduire" -#: lib/bds/desktop/menu_bar.ex:233 +#: lib/bds/desktop/menu_bar.ex:264 #: lib/bds/help_docs.ex:14 #: lib/bds/ui/registry.ex:118 #, elixir-autogen, elixir-format @@ -895,12 +895,12 @@ msgstr "Faire glisser l’entrée du menu" msgid "ETA: %{value}" msgstr "Temps restant : %{value}" -#: lib/bds/desktop/menu_bar.ex:179 +#: lib/bds/desktop/menu_bar.ex:208 #, elixir-autogen, elixir-format msgid "Edit" msgstr "Édition" -#: lib/bds/desktop/menu_bar.ex:216 +#: lib/bds/desktop/menu_bar.ex:247 #, elixir-autogen, elixir-format msgid "Edit Menu" msgstr "Modifier le menu" @@ -1006,7 +1006,7 @@ msgstr "Externe" msgid "Extra URLs" msgstr "URLs supplémentaires" -#: lib/bds/desktop/menu_bar.ex:178 +#: lib/bds/desktop/menu_bar.ex:207 #: lib/bds/desktop/shell_live/import_editor.ex:882 #: lib/bds/desktop/shell_live/misc_editor_html/misc_editor.html.heex:157 #, elixir-autogen, elixir-format @@ -1028,17 +1028,17 @@ msgstr "Fichier vers BD" msgid "Filename" msgstr "Nom de fichier" -#: lib/bds/desktop/menu_bar.ex:223 +#: lib/bds/desktop/menu_bar.ex:254 #, elixir-autogen, elixir-format msgid "Fill Missing Translations" msgstr "Compléter les traductions manquantes" -#: lib/bds/desktop/menu_bar.ex:199 +#: lib/bds/desktop/menu_bar.ex:230 #, elixir-autogen, elixir-format msgid "Find" msgstr "Rechercher" -#: lib/bds/desktop/menu_bar.ex:224 +#: lib/bds/desktop/menu_bar.ex:255 #, elixir-autogen, elixir-format msgid "Find Duplicate Posts" msgstr "Trouver les doublons" @@ -1053,7 +1053,7 @@ msgstr "Trouver les doublons" msgid "Find Duplicates" msgstr "Trouver les doublons" -#: lib/bds/desktop/menu_bar.ex:209 +#: lib/bds/desktop/menu_bar.ex:240 #, elixir-autogen, elixir-format msgid "Force Reload" msgstr "Recharger de force" @@ -1064,12 +1064,12 @@ msgstr "Recharger de force" msgid "Gallery" msgstr "Galerie" -#: lib/bds/desktop/menu_bar.ex:225 +#: lib/bds/desktop/menu_bar.ex:256 #, elixir-autogen, elixir-format msgid "Generate Site" msgstr "Générer le site" -#: lib/bds/desktop/shell_live.ex:790 +#: lib/bds/desktop/shell_live.ex:792 #: lib/bds/desktop/shell_live/socket_state.ex:109 #: lib/bds/ui/sidebar.ex:789 #, elixir-autogen, elixir-format @@ -1083,13 +1083,13 @@ msgid "Git Diff" msgstr "Diff Git" #: lib/bds/desktop/shell_data.ex:228 -#: lib/bds/desktop/shell_live.ex:786 +#: lib/bds/desktop/shell_live.ex:788 #: lib/bds/desktop/shell_live/panel_renderer.ex:171 #, elixir-autogen, elixir-format msgid "Git Log" msgstr "Journal Git" -#: lib/bds/desktop/menu_bar.ex:183 +#: lib/bds/desktop/menu_bar.ex:212 #, elixir-autogen, elixir-format msgid "Help" msgstr "Aide" @@ -1176,7 +1176,7 @@ msgstr "Importer %{count} éléments" msgid "Import (new slug)" msgstr "Importer (nouveau slug)" -#: lib/bds/desktop/menu_bar.ex:186 +#: lib/bds/desktop/menu_bar.ex:215 #, elixir-autogen, elixir-format msgid "Import Media" msgstr "Importer des médias" @@ -1206,9 +1206,9 @@ msgstr "Définitions d’import" msgid "Import failed: %{error}" msgstr "Échec de l’import : %{error}" -#: lib/bds/desktop/shell_live.ex:606 -#: lib/bds/desktop/shell_live.ex:902 -#: lib/bds/desktop/shell_live.ex:908 +#: lib/bds/desktop/shell_live.ex:608 +#: lib/bds/desktop/shell_live.ex:904 +#: lib/bds/desktop/shell_live.ex:910 #: lib/bds/desktop/shell_live/sidebar_create.ex:47 #, elixir-autogen, elixir-format msgid "Import media" @@ -1378,7 +1378,7 @@ msgstr "Markdown" msgid "Max Posts Per Page" msgstr "Nombre maximal d’articles par page" -#: lib/bds/desktop/menu_bar.ex:203 +#: lib/bds/desktop/menu_bar.ex:234 #: lib/bds/desktop/shell_live/media_editor.ex:509 #: lib/bds/desktop/shell_live/media_editor.ex:513 #: lib/bds/desktop/shell_live/misc_editor.ex:735 @@ -1426,7 +1426,7 @@ msgstr "Fusionner les tags" msgid "Metadata" msgstr "Métadonnées" -#: lib/bds/desktop/menu_bar.ex:220 +#: lib/bds/desktop/menu_bar.ex:251 #: 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 @@ -1473,7 +1473,7 @@ msgstr "Nouvelle définition" msgid "New Page" msgstr "Nouvelle page" -#: lib/bds/desktop/menu_bar.ex:185 +#: lib/bds/desktop/menu_bar.ex:214 #: lib/bds/desktop/shell_live/sidebar_create.ex:41 #: lib/bds/tui.ex:103 #, elixir-autogen, elixir-format @@ -1746,7 +1746,7 @@ msgstr "Modèle de titres en ligne" msgid "Open" msgstr "Ouvrir" -#: lib/bds/desktop/menu_bar.ex:189 +#: lib/bds/desktop/menu_bar.ex:220 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:382 #, elixir-autogen, elixir-format msgid "Open Data Folder" @@ -1763,7 +1763,7 @@ msgstr "Ouvrir un blog existant" msgid "Open Settings" msgstr "Ouvrir les Réglages" -#: lib/bds/desktop/menu_bar.ex:188 +#: lib/bds/desktop/menu_bar.ex:217 #, elixir-autogen, elixir-format msgid "Open in Browser" msgstr "Ouvrir dans le navigateur" @@ -1794,7 +1794,7 @@ msgstr "Autre" msgid "Other (%{count})" msgstr "Autres (%{count})" -#: lib/bds/desktop/shell_live.ex:785 +#: lib/bds/desktop/shell_live.ex:787 #: lib/bds/desktop/shell_live/panel_renderer.ex:83 #, elixir-autogen, elixir-format msgid "Output" @@ -1842,7 +1842,7 @@ msgstr "Paire ignorée" msgid "Parsing WXR file..." msgstr "Analyse du fichier WXR..." -#: lib/bds/desktop/menu_bar.ex:196 +#: lib/bds/desktop/menu_bar.ex:227 #, elixir-autogen, elixir-format msgid "Paste" msgstr "Coller" @@ -1908,7 +1908,7 @@ msgstr "Article publié" msgid "Post saved" msgstr "Article enregistré" -#: lib/bds/desktop/menu_bar.ex:202 +#: 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:451 @@ -1924,7 +1924,7 @@ msgstr "Articles" msgid "Posts (%{count})" msgstr "Articles (%{count})" -#: lib/bds/desktop/menu_bar.ex:201 +#: lib/bds/desktop/menu_bar.ex:232 #, elixir-autogen, elixir-format msgid "Preferences" msgstr "Préférences" @@ -1940,7 +1940,7 @@ msgstr "Aperçu" msgid "Preview Mode" msgstr "Mode aperçu" -#: lib/bds/desktop/menu_bar.ex:215 +#: lib/bds/desktop/menu_bar.ex:246 #, elixir-autogen, elixir-format msgid "Preview Post" msgstr "Aperçu de l’article" @@ -1992,7 +1992,7 @@ msgstr "URL publique" msgid "Publish" msgstr "Publier" -#: lib/bds/desktop/menu_bar.ex:214 +#: lib/bds/desktop/menu_bar.ex:245 #, elixir-autogen, elixir-format msgid "Publish Selected" msgstr "Publier la sélection" @@ -2025,7 +2025,7 @@ msgstr "Publication" msgid "Quick Actions" msgstr "Actions rapides" -#: lib/bds/desktop/menu_bar.ex:191 +#: lib/bds/desktop/menu_bar.ex:222 #, elixir-autogen, elixir-format msgid "Quit" msgstr "Quitter" @@ -2035,12 +2035,12 @@ msgstr "Quitter" msgid "Ready to import:" msgstr "Prêt à importer :" -#: lib/bds/desktop/menu_bar.ex:217 +#: lib/bds/desktop/menu_bar.ex:248 #, elixir-autogen, elixir-format msgid "Rebuild Database" msgstr "Reconstruire la base de données" -#: lib/bds/desktop/menu_bar.ex:219 +#: lib/bds/desktop/menu_bar.ex:250 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:381 #, elixir-autogen, elixir-format msgid "Rebuild Embedding Index" @@ -2071,7 +2071,7 @@ msgstr "Reconstruire les modèles depuis les fichiers" msgid "Rebuild filesystem-backed records and thumbnails" msgstr "Reconstruire les enregistrements basés sur le système de fichiers et les vignettes" -#: lib/bds/desktop/menu_bar.ex:193 +#: lib/bds/desktop/menu_bar.ex:224 #, elixir-autogen, elixir-format msgid "Redo" msgstr "Rétablir" @@ -2098,7 +2098,7 @@ msgstr "Actualiser les modèles en ligne" msgid "Refresh Translation" msgstr "Actualiser la traduction" -#: lib/bds/desktop/menu_bar.ex:221 +#: lib/bds/desktop/menu_bar.ex:252 #, elixir-autogen, elixir-format msgid "Regenerate Calendar" msgstr "Régénérer le calendrier" @@ -2108,12 +2108,12 @@ msgstr "Régénérer le calendrier" msgid "Regenerate Missing Thumbnails" msgstr "Régénérer les vignettes manquantes" -#: lib/bds/desktop/menu_bar.ex:218 +#: lib/bds/desktop/menu_bar.ex:249 #, elixir-autogen, elixir-format msgid "Reindex Text" msgstr "Réindexer le texte" -#: lib/bds/desktop/menu_bar.ex:208 +#: lib/bds/desktop/menu_bar.ex:239 #, elixir-autogen, elixir-format msgid "Reload" msgstr "Recharger" @@ -2144,7 +2144,7 @@ msgstr "Supprimer le mot-clé" msgid "Render in Lists" msgstr "Afficher dans les listes" -#: lib/bds/desktop/menu_bar.ex:200 +#: lib/bds/desktop/menu_bar.ex:231 #, elixir-autogen, elixir-format msgid "Replace" msgstr "Remplacer" @@ -2161,12 +2161,12 @@ msgstr "Remplacer le fichier" msgid "Replace Media File" msgstr "Remplacer le fichier média" -#: lib/bds/desktop/menu_bar.ex:236 +#: lib/bds/desktop/menu_bar.ex:267 #, elixir-autogen, elixir-format msgid "Report Issue" msgstr "Signaler un problème" -#: lib/bds/desktop/menu_bar.ex:210 +#: lib/bds/desktop/menu_bar.ex:241 #, elixir-autogen, elixir-format msgid "Reset Zoom" msgstr "Réinitialiser le zoom" @@ -2221,7 +2221,7 @@ msgstr "Exécuter" msgid "SSH Mode" msgstr "Mode SSH" -#: lib/bds/desktop/menu_bar.ex:187 +#: lib/bds/desktop/menu_bar.ex:216 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:89 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:299 #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:13 @@ -2340,7 +2340,7 @@ msgstr "Rechercher dans les paramètres" msgid "Select & Analyze" msgstr "Sélectionner et analyser" -#: lib/bds/desktop/menu_bar.ex:198 +#: lib/bds/desktop/menu_bar.ex:229 #, elixir-autogen, elixir-format msgid "Select All" msgstr "Tout sélectionner" @@ -2552,7 +2552,7 @@ msgstr "Nom du mot-clé" msgid "Tags" msgstr "Tags" -#: lib/bds/desktop/shell_live.ex:784 +#: lib/bds/desktop/shell_live.ex:786 #: lib/bds/desktop/shell_live/panel_renderer.ex:54 #, elixir-autogen, elixir-format msgid "Tasks" @@ -2648,12 +2648,12 @@ msgstr "Cet element est reference par :" msgid "Title" msgstr "Titre" -#: lib/bds/desktop/menu_bar.ex:206 +#: lib/bds/desktop/menu_bar.ex:237 #, elixir-autogen, elixir-format msgid "Toggle Assistant Sidebar" msgstr "Afficher/masquer l’assistant" -#: lib/bds/desktop/menu_bar.ex:207 +#: lib/bds/desktop/menu_bar.ex:238 #, elixir-autogen, elixir-format msgid "Toggle Dev Tools" msgstr "Afficher/masquer les outils de développement" @@ -2664,17 +2664,17 @@ msgstr "Afficher/masquer les outils de développement" msgid "Toggle Filters" msgstr "Afficher/masquer les filtres" -#: lib/bds/desktop/menu_bar.ex:213 +#: lib/bds/desktop/menu_bar.ex:244 #, elixir-autogen, elixir-format msgid "Toggle Full Screen" msgstr "Plein écran" -#: lib/bds/desktop/menu_bar.ex:205 +#: lib/bds/desktop/menu_bar.ex:236 #, elixir-autogen, elixir-format msgid "Toggle Panel" msgstr "Afficher/masquer le panneau" -#: lib/bds/desktop/menu_bar.ex:204 +#: lib/bds/desktop/menu_bar.ex:235 #, elixir-autogen, elixir-format msgid "Toggle Sidebar" msgstr "Afficher/masquer la barre latérale" @@ -2770,7 +2770,7 @@ msgstr "UI" msgid "URL" msgstr "URL" -#: lib/bds/desktop/menu_bar.ex:192 +#: lib/bds/desktop/menu_bar.ex:223 #, elixir-autogen, elixir-format msgid "Undo" msgstr "Annuler" @@ -2820,7 +2820,7 @@ msgstr "Mis à jour" msgid "Updated URLs" msgstr "URLs mises à jour" -#: lib/bds/desktop/menu_bar.ex:228 +#: lib/bds/desktop/menu_bar.ex:259 #, elixir-autogen, elixir-format msgid "Upload Site" msgstr "Téléverser le site" @@ -2847,22 +2847,22 @@ msgstr "Nom d’utilisateur" msgid "Validate" msgstr "Valider" -#: lib/bds/desktop/menu_bar.ex:227 +#: lib/bds/desktop/menu_bar.ex:258 #, elixir-autogen, elixir-format msgid "Validate Site" msgstr "Valider le site" -#: lib/bds/desktop/menu_bar.ex:222 +#: lib/bds/desktop/menu_bar.ex:253 #, elixir-autogen, elixir-format msgid "Validate Translations" msgstr "Valider les traductions" -#: lib/bds/desktop/menu_bar.ex:180 +#: lib/bds/desktop/menu_bar.ex:209 #, elixir-autogen, elixir-format msgid "View" msgstr "Affichage" -#: lib/bds/desktop/menu_bar.ex:235 +#: lib/bds/desktop/menu_bar.ex:266 #, elixir-autogen, elixir-format msgid "View on GitHub" msgstr "Voir sur GitHub" @@ -2906,12 +2906,12 @@ msgstr "Renvoyer les longues lignes" msgid "You" msgstr "Vous" -#: lib/bds/desktop/menu_bar.ex:211 +#: lib/bds/desktop/menu_bar.ex:242 #, elixir-autogen, elixir-format msgid "Zoom In" msgstr "Zoom avant" -#: lib/bds/desktop/menu_bar.ex:212 +#: lib/bds/desktop/menu_bar.ex:243 #, elixir-autogen, elixir-format msgid "Zoom Out" msgstr "Zoom arrière" @@ -3233,12 +3233,12 @@ msgstr "Bienvenue dans l’assistant IA" msgid "Comparing database and filesystem metadata" msgstr "Comparaison des métadonnées entre la base et le système de fichiers" -#: lib/bds/desktop/shell_live.ex:682 +#: lib/bds/desktop/shell_live.ex:684 #, elixir-autogen, elixir-format msgid "Added %{count} images to post" msgstr "%{count} images ajoutées à l'article" -#: lib/bds/desktop/shell_live.ex:650 +#: lib/bds/desktop/shell_live.ex:652 #, elixir-autogen, elixir-format msgid "Added %{title}" msgstr "%{title} ajouté" @@ -3258,18 +3258,18 @@ msgstr "Guide utilisateur pour les flux éditoriaux, médias, modèles, traducti msgid "Image Import Concurrency" msgstr "Importation simultanée d'images" -#: lib/bds/desktop/shell_live.ex:442 -#: lib/bds/desktop/shell_live.ex:455 -#: lib/bds/desktop/shell_live.ex:649 -#: lib/bds/desktop/shell_live.ex:681 -#: lib/bds/desktop/shell_live.ex:692 -#: lib/bds/desktop/shell_live.ex:703 +#: lib/bds/desktop/shell_live.ex:444 +#: lib/bds/desktop/shell_live.ex:457 +#: lib/bds/desktop/shell_live.ex:651 +#: lib/bds/desktop/shell_live.ex:683 +#: lib/bds/desktop/shell_live.ex:694 +#: lib/bds/desktop/shell_live.ex:705 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:420 #, elixir-autogen, elixir-format msgid "Add Gallery Images" msgstr "Ajouter des images à la galerie" -#: lib/bds/desktop/shell_live.ex:704 +#: lib/bds/desktop/shell_live.ex:706 #, elixir-autogen, elixir-format msgid "Failed to process %{path}: %{reason}" msgstr "Impossible de traiter %{path} : %{reason}" @@ -3460,12 +3460,12 @@ msgstr "renommé" msgid "untracked" msgstr "non suivi" -#: lib/bds/desktop/shell_live.ex:810 +#: lib/bds/desktop/shell_live.ex:812 #, elixir-autogen, elixir-format msgid "Blogmark" msgstr "Blogmark" -#: lib/bds/desktop/shell_live.ex:853 +#: lib/bds/desktop/shell_live.ex:855 #, elixir-autogen, elixir-format msgid "Open a project before importing a blogmark." msgstr "Ouvrez un projet avant d’importer un blogmark." @@ -3506,7 +3506,7 @@ msgstr "Supprimer le tag" msgid "Failed to copy bookmarklet to clipboard" msgstr "Échec de la copie du bookmarklet dans le presse-papiers" -#: lib/bds/desktop/shell_live.ex:822 +#: lib/bds/desktop/shell_live.ex:824 #, elixir-autogen, elixir-format msgid "The project this blogmark targets does not exist here." msgstr "Le projet ciblé par ce blogmark n'existe pas ici." @@ -3516,7 +3516,7 @@ msgstr "Le projet ciblé par ce blogmark n'existe pas ici." msgid "Suggested tags" msgstr "Tags suggérés" -#: lib/bds/desktop/menu_bar.ex:226 +#: lib/bds/desktop/menu_bar.ex:257 #, elixir-autogen, elixir-format msgid "Force Render Site" msgstr "Forcer la régénération du site" @@ -3531,22 +3531,22 @@ msgstr "Reconstruire les liens des médias" msgid "Rebuild Post Links" msgstr "Reconstruire les liens des articles" -#: lib/bds/desktop/menu_bar.ex:231 +#: lib/bds/desktop/menu_bar.ex:262 #, elixir-autogen, elixir-format msgid "Bring All to Front" msgstr "Tout ramener au premier plan" -#: lib/bds/desktop/menu_bar.ex:229 +#: lib/bds/desktop/menu_bar.ex:260 #, elixir-autogen, elixir-format msgid "Minimize" msgstr "Réduire" -#: lib/bds/desktop/menu_bar.ex:182 +#: lib/bds/desktop/menu_bar.ex:211 #, elixir-autogen, elixir-format msgid "Window" msgstr "Fenêtre" -#: lib/bds/desktop/menu_bar.ex:230 +#: lib/bds/desktop/menu_bar.ex:261 #, elixir-autogen, elixir-format msgid "Zoom" msgstr "Réduire/agrandir" @@ -3702,3 +3702,35 @@ msgstr "entrée ouvrir · n nouvel article · 1-5 vues · r actualiser · ctrl+q #, elixir-autogen, elixir-format msgid "esc to close" msgstr "échap pour fermer" + +#: lib/bds/desktop/menu_bar.ex:83 +#: lib/bds/desktop/shell_live.ex:1110 +#, elixir-autogen, elixir-format +msgid "Connect to Server" +msgstr "Se connecter au serveur" + +#: lib/bds/desktop/menu_bar.ex:218 +#, elixir-autogen, elixir-format +msgid "Connect to Server…" +msgstr "Se connecter au serveur…" + +#: lib/bds/desktop/menu_bar.ex:84 +#, elixir-autogen, elixir-format +msgid "Connection failed: %{reason}" +msgstr "Échec de la connexion : %{reason}" + +#: lib/bds/desktop/menu_bar.ex:219 +#, elixir-autogen, elixir-format +msgid "Disconnect from Server" +msgstr "Se déconnecter du serveur" + +#: lib/bds/desktop/menu_bar.ex:72 +#: lib/bds/desktop/shell_live.ex:1097 +#, elixir-autogen, elixir-format +msgid "Server address (user@host or user@host:port), public-key auth:" +msgstr "Adresse du serveur (user@host ou user@host:port), authentification par clé publique :" + +#: lib/bds/desktop/remote_connection.ex:82 +#, elixir-autogen, elixir-format +msgid "Use the form user@host or user@host:port." +msgstr "Utilisez le format user@host ou user@host:port." diff --git a/priv/gettext/it/LC_MESSAGES/ui.po b/priv/gettext/it/LC_MESSAGES/ui.po index fd5379a..6507e72 100644 --- a/priv/gettext/it/LC_MESSAGES/ui.po +++ b/priv/gettext/it/LC_MESSAGES/ui.po @@ -110,12 +110,12 @@ msgstr "L’IA suggerirà mappature da elementi nuovi a quelli esistenti per evi msgid "API" msgstr "API" -#: lib/bds/desktop/menu_bar.ex:234 +#: lib/bds/desktop/menu_bar.ex:265 #, elixir-autogen, elixir-format msgid "API Documentation" msgstr "Documentazione API" -#: lib/bds/desktop/menu_bar.ex:232 +#: lib/bds/desktop/menu_bar.ex:263 #, elixir-autogen, elixir-format msgid "About" msgstr "Informazioni" @@ -341,7 +341,7 @@ msgstr "Autore" msgid "Auto" msgstr "Automatico" -#: lib/bds/desktop/shell_live.ex:443 +#: lib/bds/desktop/shell_live.ex:445 #: lib/bds/desktop/shell_live/chat_editor.ex:234 #: lib/bds/desktop/shell_live/media_editor.ex:171 #: lib/bds/desktop/shell_live/media_editor.ex:364 @@ -372,7 +372,7 @@ msgstr "Lingue disponibili" msgid "Backlinks" msgstr "Riferimenti in entrata" -#: lib/bds/desktop/menu_bar.ex:181 +#: lib/bds/desktop/menu_bar.ex:210 #, elixir-autogen, elixir-format msgid "Blog" msgstr "Blog" @@ -491,7 +491,7 @@ msgstr "Valori predefiniti delle categorie, opzioni di rendering e collegamento msgid "Category name is required" msgstr "Il nome della categoria è obbligatorio" -#: lib/bds/desktop/shell_live.ex:789 +#: lib/bds/desktop/shell_live.ex:791 #: lib/bds/desktop/shell_live/chat_editor.ex:87 #: lib/bds/desktop/shell_live/chat_editor.ex:233 #: lib/bds/desktop/shell_live/chat_editor.ex:323 @@ -549,7 +549,7 @@ msgstr "Cancella tag" msgid "Click to %{action} mapping" msgstr "Clicca per %{action} la mappatura" -#: lib/bds/desktop/menu_bar.ex:190 +#: lib/bds/desktop/menu_bar.ex:221 #, elixir-autogen, elixir-format msgid "Close Tab" msgstr "Chiudi scheda" @@ -600,7 +600,7 @@ msgstr "Contenuti" msgid "Content Categories" msgstr "Categorie di contenuto" -#: lib/bds/desktop/menu_bar.ex:195 +#: lib/bds/desktop/menu_bar.ex:226 #, elixir-autogen, elixir-format msgid "Copy" msgstr "Copia" @@ -653,7 +653,7 @@ msgstr "Crea tag" msgid "Created" msgstr "Creato" -#: lib/bds/desktop/menu_bar.ex:194 +#: lib/bds/desktop/menu_bar.ex:225 #, elixir-autogen, elixir-format msgid "Cut" msgstr "Taglia" @@ -719,7 +719,7 @@ msgstr "Modalità editor predefinita" msgid "Default editing mode and diff presentation" msgstr "Modalità di modifica predefinita e presentazione dei diff" -#: lib/bds/desktop/menu_bar.ex:197 +#: lib/bds/desktop/menu_bar.ex:228 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:98 #: lib/bds/desktop/shell_live/overlay_html/shell_overlay.html.heex:166 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:116 @@ -862,7 +862,7 @@ msgstr "Testo visualizzato" msgid "Do Not Translate" msgstr "Non tradurre" -#: lib/bds/desktop/menu_bar.ex:233 +#: lib/bds/desktop/menu_bar.ex:264 #: lib/bds/help_docs.ex:14 #: lib/bds/ui/registry.ex:118 #, elixir-autogen, elixir-format @@ -895,12 +895,12 @@ msgstr "Trascina voce di menu" msgid "ETA: %{value}" msgstr "Tempo rimanente: %{value}" -#: lib/bds/desktop/menu_bar.ex:179 +#: lib/bds/desktop/menu_bar.ex:208 #, elixir-autogen, elixir-format msgid "Edit" msgstr "Modifica" -#: lib/bds/desktop/menu_bar.ex:216 +#: lib/bds/desktop/menu_bar.ex:247 #, elixir-autogen, elixir-format msgid "Edit Menu" msgstr "Modifica menu" @@ -1006,7 +1006,7 @@ msgstr "Esterno" msgid "Extra URLs" msgstr "URL aggiuntivi" -#: lib/bds/desktop/menu_bar.ex:178 +#: lib/bds/desktop/menu_bar.ex:207 #: lib/bds/desktop/shell_live/import_editor.ex:882 #: lib/bds/desktop/shell_live/misc_editor_html/misc_editor.html.heex:157 #, elixir-autogen, elixir-format @@ -1028,17 +1028,17 @@ msgstr "File su DB" msgid "Filename" msgstr "Nome file" -#: lib/bds/desktop/menu_bar.ex:223 +#: lib/bds/desktop/menu_bar.ex:254 #, elixir-autogen, elixir-format msgid "Fill Missing Translations" msgstr "Completa traduzioni mancanti" -#: lib/bds/desktop/menu_bar.ex:199 +#: lib/bds/desktop/menu_bar.ex:230 #, elixir-autogen, elixir-format msgid "Find" msgstr "Trova" -#: lib/bds/desktop/menu_bar.ex:224 +#: lib/bds/desktop/menu_bar.ex:255 #, elixir-autogen, elixir-format msgid "Find Duplicate Posts" msgstr "Trova post duplicati" @@ -1053,7 +1053,7 @@ msgstr "Trova post duplicati" msgid "Find Duplicates" msgstr "Trova duplicati" -#: lib/bds/desktop/menu_bar.ex:209 +#: lib/bds/desktop/menu_bar.ex:240 #, elixir-autogen, elixir-format msgid "Force Reload" msgstr "Ricarica forzata" @@ -1064,12 +1064,12 @@ msgstr "Ricarica forzata" msgid "Gallery" msgstr "Galleria" -#: lib/bds/desktop/menu_bar.ex:225 +#: lib/bds/desktop/menu_bar.ex:256 #, elixir-autogen, elixir-format msgid "Generate Site" msgstr "Genera sito" -#: lib/bds/desktop/shell_live.ex:790 +#: lib/bds/desktop/shell_live.ex:792 #: lib/bds/desktop/shell_live/socket_state.ex:109 #: lib/bds/ui/sidebar.ex:789 #, elixir-autogen, elixir-format @@ -1083,13 +1083,13 @@ msgid "Git Diff" msgstr "Diff Git" #: lib/bds/desktop/shell_data.ex:228 -#: lib/bds/desktop/shell_live.ex:786 +#: lib/bds/desktop/shell_live.ex:788 #: lib/bds/desktop/shell_live/panel_renderer.ex:171 #, elixir-autogen, elixir-format msgid "Git Log" msgstr "Log Git" -#: lib/bds/desktop/menu_bar.ex:183 +#: lib/bds/desktop/menu_bar.ex:212 #, elixir-autogen, elixir-format msgid "Help" msgstr "Aiuto" @@ -1176,7 +1176,7 @@ msgstr "Importa %{count} elementi" msgid "Import (new slug)" msgstr "Importa (nuovo slug)" -#: lib/bds/desktop/menu_bar.ex:186 +#: lib/bds/desktop/menu_bar.ex:215 #, elixir-autogen, elixir-format msgid "Import Media" msgstr "Importa media" @@ -1206,9 +1206,9 @@ msgstr "Definizioni di importazione" msgid "Import failed: %{error}" msgstr "Importazione non riuscita: %{error}" -#: lib/bds/desktop/shell_live.ex:606 -#: lib/bds/desktop/shell_live.ex:902 -#: lib/bds/desktop/shell_live.ex:908 +#: lib/bds/desktop/shell_live.ex:608 +#: lib/bds/desktop/shell_live.ex:904 +#: lib/bds/desktop/shell_live.ex:910 #: lib/bds/desktop/shell_live/sidebar_create.ex:47 #, elixir-autogen, elixir-format msgid "Import media" @@ -1378,7 +1378,7 @@ msgstr "Markdown" msgid "Max Posts Per Page" msgstr "Numero massimo di post per pagina" -#: lib/bds/desktop/menu_bar.ex:203 +#: lib/bds/desktop/menu_bar.ex:234 #: lib/bds/desktop/shell_live/media_editor.ex:509 #: lib/bds/desktop/shell_live/media_editor.ex:513 #: lib/bds/desktop/shell_live/misc_editor.ex:735 @@ -1426,7 +1426,7 @@ msgstr "Unisci tag" msgid "Metadata" msgstr "Metadati" -#: lib/bds/desktop/menu_bar.ex:220 +#: lib/bds/desktop/menu_bar.ex:251 #: 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 @@ -1473,7 +1473,7 @@ msgstr "Nuova definizione" msgid "New Page" msgstr "Nuova pagina" -#: lib/bds/desktop/menu_bar.ex:185 +#: lib/bds/desktop/menu_bar.ex:214 #: lib/bds/desktop/shell_live/sidebar_create.ex:41 #: lib/bds/tui.ex:103 #, elixir-autogen, elixir-format @@ -1746,7 +1746,7 @@ msgstr "Modello titoli online" msgid "Open" msgstr "Apri" -#: lib/bds/desktop/menu_bar.ex:189 +#: lib/bds/desktop/menu_bar.ex:220 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:382 #, elixir-autogen, elixir-format msgid "Open Data Folder" @@ -1763,7 +1763,7 @@ msgstr "Apri blog esistente" msgid "Open Settings" msgstr "Apri Impostazioni" -#: lib/bds/desktop/menu_bar.ex:188 +#: lib/bds/desktop/menu_bar.ex:217 #, elixir-autogen, elixir-format msgid "Open in Browser" msgstr "Apri nel browser" @@ -1794,7 +1794,7 @@ msgstr "Altro" msgid "Other (%{count})" msgstr "Altro (%{count})" -#: lib/bds/desktop/shell_live.ex:785 +#: lib/bds/desktop/shell_live.ex:787 #: lib/bds/desktop/shell_live/panel_renderer.ex:83 #, elixir-autogen, elixir-format msgid "Output" @@ -1842,7 +1842,7 @@ msgstr "Coppia ignorata" msgid "Parsing WXR file..." msgstr "Analisi del file WXR..." -#: lib/bds/desktop/menu_bar.ex:196 +#: lib/bds/desktop/menu_bar.ex:227 #, elixir-autogen, elixir-format msgid "Paste" msgstr "Incolla" @@ -1908,7 +1908,7 @@ msgstr "Articolo pubblicato" msgid "Post saved" msgstr "Articolo salvato" -#: lib/bds/desktop/menu_bar.ex:202 +#: 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:451 @@ -1924,7 +1924,7 @@ msgstr "Post" msgid "Posts (%{count})" msgstr "Articoli (%{count})" -#: lib/bds/desktop/menu_bar.ex:201 +#: lib/bds/desktop/menu_bar.ex:232 #, elixir-autogen, elixir-format msgid "Preferences" msgstr "Preferenze" @@ -1940,7 +1940,7 @@ msgstr "Anteprima" msgid "Preview Mode" msgstr "Modalità anteprima" -#: lib/bds/desktop/menu_bar.ex:215 +#: lib/bds/desktop/menu_bar.ex:246 #, elixir-autogen, elixir-format msgid "Preview Post" msgstr "Anteprima post" @@ -1992,7 +1992,7 @@ msgstr "URL pubblica" msgid "Publish" msgstr "Pubblica" -#: lib/bds/desktop/menu_bar.ex:214 +#: lib/bds/desktop/menu_bar.ex:245 #, elixir-autogen, elixir-format msgid "Publish Selected" msgstr "Pubblica selezionati" @@ -2025,7 +2025,7 @@ msgstr "Pubblicazione" msgid "Quick Actions" msgstr "Azioni rapide" -#: lib/bds/desktop/menu_bar.ex:191 +#: lib/bds/desktop/menu_bar.ex:222 #, elixir-autogen, elixir-format msgid "Quit" msgstr "Esci" @@ -2035,12 +2035,12 @@ msgstr "Esci" msgid "Ready to import:" msgstr "Pronto per importare:" -#: lib/bds/desktop/menu_bar.ex:217 +#: lib/bds/desktop/menu_bar.ex:248 #, elixir-autogen, elixir-format msgid "Rebuild Database" msgstr "Ricostruisci database" -#: lib/bds/desktop/menu_bar.ex:219 +#: lib/bds/desktop/menu_bar.ex:250 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:381 #, elixir-autogen, elixir-format msgid "Rebuild Embedding Index" @@ -2071,7 +2071,7 @@ msgstr "Ricostruisci i template dai file" msgid "Rebuild filesystem-backed records and thumbnails" msgstr "Ricostruisci record basati su filesystem e miniature" -#: lib/bds/desktop/menu_bar.ex:193 +#: lib/bds/desktop/menu_bar.ex:224 #, elixir-autogen, elixir-format msgid "Redo" msgstr "Ripeti" @@ -2098,7 +2098,7 @@ msgstr "Aggiorna modelli online" msgid "Refresh Translation" msgstr "Aggiorna traduzione" -#: lib/bds/desktop/menu_bar.ex:221 +#: lib/bds/desktop/menu_bar.ex:252 #, elixir-autogen, elixir-format msgid "Regenerate Calendar" msgstr "Rigenera calendario" @@ -2108,12 +2108,12 @@ msgstr "Rigenera calendario" msgid "Regenerate Missing Thumbnails" msgstr "Rigenera miniature mancanti" -#: lib/bds/desktop/menu_bar.ex:218 +#: lib/bds/desktop/menu_bar.ex:249 #, elixir-autogen, elixir-format msgid "Reindex Text" msgstr "Reindicizza testo" -#: lib/bds/desktop/menu_bar.ex:208 +#: lib/bds/desktop/menu_bar.ex:239 #, elixir-autogen, elixir-format msgid "Reload" msgstr "Ricarica" @@ -2144,7 +2144,7 @@ msgstr "Rimuovi tag" msgid "Render in Lists" msgstr "Mostra nelle liste" -#: lib/bds/desktop/menu_bar.ex:200 +#: lib/bds/desktop/menu_bar.ex:231 #, elixir-autogen, elixir-format msgid "Replace" msgstr "Sostituisci" @@ -2161,12 +2161,12 @@ msgstr "Sostituisci file" msgid "Replace Media File" msgstr "Sostituisci file media" -#: lib/bds/desktop/menu_bar.ex:236 +#: lib/bds/desktop/menu_bar.ex:267 #, elixir-autogen, elixir-format msgid "Report Issue" msgstr "Segnala problema" -#: lib/bds/desktop/menu_bar.ex:210 +#: lib/bds/desktop/menu_bar.ex:241 #, elixir-autogen, elixir-format msgid "Reset Zoom" msgstr "Reimposta zoom" @@ -2221,7 +2221,7 @@ msgstr "Esegui" msgid "SSH Mode" msgstr "Modalità SSH" -#: lib/bds/desktop/menu_bar.ex:187 +#: lib/bds/desktop/menu_bar.ex:216 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:89 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:299 #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:13 @@ -2340,7 +2340,7 @@ msgstr "Cerca nelle impostazioni" msgid "Select & Analyze" msgstr "Seleziona e analizza" -#: lib/bds/desktop/menu_bar.ex:198 +#: lib/bds/desktop/menu_bar.ex:229 #, elixir-autogen, elixir-format msgid "Select All" msgstr "Seleziona tutto" @@ -2552,7 +2552,7 @@ msgstr "Nome del tag" msgid "Tags" msgstr "Tag" -#: lib/bds/desktop/shell_live.ex:784 +#: lib/bds/desktop/shell_live.ex:786 #: lib/bds/desktop/shell_live/panel_renderer.ex:54 #, elixir-autogen, elixir-format msgid "Tasks" @@ -2648,12 +2648,12 @@ msgstr "Questo elemento e referenziato da:" msgid "Title" msgstr "Titolo" -#: lib/bds/desktop/menu_bar.ex:206 +#: lib/bds/desktop/menu_bar.ex:237 #, elixir-autogen, elixir-format msgid "Toggle Assistant Sidebar" msgstr "Attiva/disattiva assistente" -#: lib/bds/desktop/menu_bar.ex:207 +#: lib/bds/desktop/menu_bar.ex:238 #, elixir-autogen, elixir-format msgid "Toggle Dev Tools" msgstr "Attiva/disattiva strumenti sviluppo" @@ -2664,17 +2664,17 @@ msgstr "Attiva/disattiva strumenti sviluppo" msgid "Toggle Filters" msgstr "Mostra/nascondi filtri" -#: lib/bds/desktop/menu_bar.ex:213 +#: lib/bds/desktop/menu_bar.ex:244 #, elixir-autogen, elixir-format msgid "Toggle Full Screen" msgstr "Schermo intero" -#: lib/bds/desktop/menu_bar.ex:205 +#: lib/bds/desktop/menu_bar.ex:236 #, elixir-autogen, elixir-format msgid "Toggle Panel" msgstr "Attiva/disattiva pannello" -#: lib/bds/desktop/menu_bar.ex:204 +#: lib/bds/desktop/menu_bar.ex:235 #, elixir-autogen, elixir-format msgid "Toggle Sidebar" msgstr "Attiva/disattiva barra laterale" @@ -2770,7 +2770,7 @@ msgstr "UI" msgid "URL" msgstr "URL" -#: lib/bds/desktop/menu_bar.ex:192 +#: lib/bds/desktop/menu_bar.ex:223 #, elixir-autogen, elixir-format msgid "Undo" msgstr "Annulla" @@ -2820,7 +2820,7 @@ msgstr "Aggiornato" msgid "Updated URLs" msgstr "URL aggiornati" -#: lib/bds/desktop/menu_bar.ex:228 +#: lib/bds/desktop/menu_bar.ex:259 #, elixir-autogen, elixir-format msgid "Upload Site" msgstr "Carica sito" @@ -2847,22 +2847,22 @@ msgstr "Nome utente" msgid "Validate" msgstr "Valida" -#: lib/bds/desktop/menu_bar.ex:227 +#: lib/bds/desktop/menu_bar.ex:258 #, elixir-autogen, elixir-format msgid "Validate Site" msgstr "Valida sito" -#: lib/bds/desktop/menu_bar.ex:222 +#: lib/bds/desktop/menu_bar.ex:253 #, elixir-autogen, elixir-format msgid "Validate Translations" msgstr "Valida traduzioni" -#: lib/bds/desktop/menu_bar.ex:180 +#: lib/bds/desktop/menu_bar.ex:209 #, elixir-autogen, elixir-format msgid "View" msgstr "Vista" -#: lib/bds/desktop/menu_bar.ex:235 +#: lib/bds/desktop/menu_bar.ex:266 #, elixir-autogen, elixir-format msgid "View on GitHub" msgstr "Visualizza su GitHub" @@ -2906,12 +2906,12 @@ msgstr "A capo per linee lunghe" msgid "You" msgstr "Tu" -#: lib/bds/desktop/menu_bar.ex:211 +#: lib/bds/desktop/menu_bar.ex:242 #, elixir-autogen, elixir-format msgid "Zoom In" msgstr "Aumenta zoom" -#: lib/bds/desktop/menu_bar.ex:212 +#: lib/bds/desktop/menu_bar.ex:243 #, elixir-autogen, elixir-format msgid "Zoom Out" msgstr "Riduci zoom" @@ -3233,12 +3233,12 @@ msgstr "Benvenuto nell’assistente IA" msgid "Comparing database and filesystem metadata" msgstr "Confronto tra i metadati del database e del filesystem" -#: lib/bds/desktop/shell_live.ex:682 +#: lib/bds/desktop/shell_live.ex:684 #, elixir-autogen, elixir-format msgid "Added %{count} images to post" msgstr "%{count} immagini aggiunte al post" -#: lib/bds/desktop/shell_live.ex:650 +#: lib/bds/desktop/shell_live.ex:652 #, elixir-autogen, elixir-format msgid "Added %{title}" msgstr "%{title} aggiunto" @@ -3258,18 +3258,18 @@ msgstr "Guida per l'utente finale per flussi editoriali, media, modelli, traduzi msgid "Image Import Concurrency" msgstr "Importazione simultanea immagini" -#: lib/bds/desktop/shell_live.ex:442 -#: lib/bds/desktop/shell_live.ex:455 -#: lib/bds/desktop/shell_live.ex:649 -#: lib/bds/desktop/shell_live.ex:681 -#: lib/bds/desktop/shell_live.ex:692 -#: lib/bds/desktop/shell_live.ex:703 +#: lib/bds/desktop/shell_live.ex:444 +#: lib/bds/desktop/shell_live.ex:457 +#: lib/bds/desktop/shell_live.ex:651 +#: lib/bds/desktop/shell_live.ex:683 +#: lib/bds/desktop/shell_live.ex:694 +#: lib/bds/desktop/shell_live.ex:705 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:420 #, elixir-autogen, elixir-format msgid "Add Gallery Images" msgstr "Aggiungi immagini alla galleria" -#: lib/bds/desktop/shell_live.ex:704 +#: lib/bds/desktop/shell_live.ex:706 #, elixir-autogen, elixir-format msgid "Failed to process %{path}: %{reason}" msgstr "Impossibile elaborare %{path}: %{reason}" @@ -3460,12 +3460,12 @@ msgstr "rinominato" msgid "untracked" msgstr "non tracciato" -#: lib/bds/desktop/shell_live.ex:810 +#: lib/bds/desktop/shell_live.ex:812 #, elixir-autogen, elixir-format msgid "Blogmark" msgstr "Blogmark" -#: lib/bds/desktop/shell_live.ex:853 +#: lib/bds/desktop/shell_live.ex:855 #, elixir-autogen, elixir-format msgid "Open a project before importing a blogmark." msgstr "Apri un progetto prima di importare un blogmark." @@ -3506,7 +3506,7 @@ msgstr "Elimina tag" msgid "Failed to copy bookmarklet to clipboard" msgstr "Impossibile copiare il bookmarklet negli appunti" -#: lib/bds/desktop/shell_live.ex:822 +#: lib/bds/desktop/shell_live.ex:824 #, elixir-autogen, elixir-format msgid "The project this blogmark targets does not exist here." msgstr "Il progetto a cui punta questo blogmark non esiste qui." @@ -3516,7 +3516,7 @@ msgstr "Il progetto a cui punta questo blogmark non esiste qui." msgid "Suggested tags" msgstr "Tag suggeriti" -#: lib/bds/desktop/menu_bar.ex:226 +#: lib/bds/desktop/menu_bar.ex:257 #, elixir-autogen, elixir-format msgid "Force Render Site" msgstr "Forza la rigenerazione del sito" @@ -3531,22 +3531,22 @@ msgstr "Ricostruisci i link dei media" msgid "Rebuild Post Links" msgstr "Ricostruisci i link degli articoli" -#: lib/bds/desktop/menu_bar.ex:231 +#: lib/bds/desktop/menu_bar.ex:262 #, elixir-autogen, elixir-format msgid "Bring All to Front" msgstr "Porta tutto in primo piano" -#: lib/bds/desktop/menu_bar.ex:229 +#: lib/bds/desktop/menu_bar.ex:260 #, elixir-autogen, elixir-format msgid "Minimize" msgstr "Riduci" -#: lib/bds/desktop/menu_bar.ex:182 +#: lib/bds/desktop/menu_bar.ex:211 #, elixir-autogen, elixir-format msgid "Window" msgstr "Finestra" -#: lib/bds/desktop/menu_bar.ex:230 +#: lib/bds/desktop/menu_bar.ex:261 #, elixir-autogen, elixir-format msgid "Zoom" msgstr "Riduci/ingrandisci" @@ -3702,3 +3702,35 @@ msgstr "invio apri · n nuovo post · 1-5 viste · r aggiorna · ctrl+q esci" #, elixir-autogen, elixir-format msgid "esc to close" msgstr "esc per chiudere" + +#: lib/bds/desktop/menu_bar.ex:83 +#: lib/bds/desktop/shell_live.ex:1110 +#, elixir-autogen, elixir-format +msgid "Connect to Server" +msgstr "Connetti al server" + +#: lib/bds/desktop/menu_bar.ex:218 +#, elixir-autogen, elixir-format +msgid "Connect to Server…" +msgstr "Connetti al server…" + +#: lib/bds/desktop/menu_bar.ex:84 +#, elixir-autogen, elixir-format +msgid "Connection failed: %{reason}" +msgstr "Connessione non riuscita: %{reason}" + +#: lib/bds/desktop/menu_bar.ex:219 +#, elixir-autogen, elixir-format +msgid "Disconnect from Server" +msgstr "Disconnetti dal server" + +#: lib/bds/desktop/menu_bar.ex:72 +#: lib/bds/desktop/shell_live.ex:1097 +#, elixir-autogen, elixir-format +msgid "Server address (user@host or user@host:port), public-key auth:" +msgstr "Indirizzo del server (user@host o user@host:port), autenticazione a chiave pubblica:" + +#: lib/bds/desktop/remote_connection.ex:82 +#, elixir-autogen, elixir-format +msgid "Use the form user@host or user@host:port." +msgstr "Usa il formato user@host o user@host:port." diff --git a/priv/gettext/ui.pot b/priv/gettext/ui.pot index c60b666..9bf9251 100644 --- a/priv/gettext/ui.pot +++ b/priv/gettext/ui.pot @@ -123,12 +123,12 @@ msgstr "" msgid "API" msgstr "" -#: lib/bds/desktop/menu_bar.ex:234 +#: lib/bds/desktop/menu_bar.ex:265 #, elixir-autogen, elixir-format msgid "API Documentation" msgstr "" -#: lib/bds/desktop/menu_bar.ex:232 +#: lib/bds/desktop/menu_bar.ex:263 #, elixir-autogen, elixir-format msgid "About" msgstr "" @@ -354,7 +354,7 @@ msgstr "" msgid "Auto" msgstr "" -#: lib/bds/desktop/shell_live.ex:443 +#: lib/bds/desktop/shell_live.ex:445 #: lib/bds/desktop/shell_live/chat_editor.ex:234 #: lib/bds/desktop/shell_live/media_editor.ex:171 #: lib/bds/desktop/shell_live/media_editor.ex:364 @@ -385,7 +385,7 @@ msgstr "" msgid "Backlinks" msgstr "" -#: lib/bds/desktop/menu_bar.ex:181 +#: lib/bds/desktop/menu_bar.ex:210 #, elixir-autogen, elixir-format msgid "Blog" msgstr "" @@ -504,7 +504,7 @@ msgstr "" msgid "Category name is required" msgstr "" -#: lib/bds/desktop/shell_live.ex:789 +#: lib/bds/desktop/shell_live.ex:791 #: lib/bds/desktop/shell_live/chat_editor.ex:87 #: lib/bds/desktop/shell_live/chat_editor.ex:233 #: lib/bds/desktop/shell_live/chat_editor.ex:323 @@ -562,7 +562,7 @@ msgstr "" msgid "Click to %{action} mapping" msgstr "" -#: lib/bds/desktop/menu_bar.ex:190 +#: lib/bds/desktop/menu_bar.ex:221 #, elixir-autogen, elixir-format msgid "Close Tab" msgstr "" @@ -613,7 +613,7 @@ msgstr "" msgid "Content Categories" msgstr "" -#: lib/bds/desktop/menu_bar.ex:195 +#: lib/bds/desktop/menu_bar.ex:226 #, elixir-autogen, elixir-format msgid "Copy" msgstr "" @@ -666,7 +666,7 @@ msgstr "" msgid "Created" msgstr "" -#: lib/bds/desktop/menu_bar.ex:194 +#: lib/bds/desktop/menu_bar.ex:225 #, elixir-autogen, elixir-format msgid "Cut" msgstr "" @@ -732,7 +732,7 @@ msgstr "" msgid "Default editing mode and diff presentation" msgstr "" -#: lib/bds/desktop/menu_bar.ex:197 +#: lib/bds/desktop/menu_bar.ex:228 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:98 #: lib/bds/desktop/shell_live/overlay_html/shell_overlay.html.heex:166 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:116 @@ -875,7 +875,7 @@ msgstr "" msgid "Do Not Translate" msgstr "" -#: lib/bds/desktop/menu_bar.ex:233 +#: lib/bds/desktop/menu_bar.ex:264 #: lib/bds/help_docs.ex:14 #: lib/bds/ui/registry.ex:118 #, elixir-autogen, elixir-format @@ -908,12 +908,12 @@ msgstr "" msgid "ETA: %{value}" msgstr "" -#: lib/bds/desktop/menu_bar.ex:179 +#: lib/bds/desktop/menu_bar.ex:208 #, elixir-autogen, elixir-format msgid "Edit" msgstr "" -#: lib/bds/desktop/menu_bar.ex:216 +#: lib/bds/desktop/menu_bar.ex:247 #, elixir-autogen, elixir-format msgid "Edit Menu" msgstr "" @@ -1019,7 +1019,7 @@ msgstr "" msgid "Extra URLs" msgstr "" -#: lib/bds/desktop/menu_bar.ex:178 +#: lib/bds/desktop/menu_bar.ex:207 #: lib/bds/desktop/shell_live/import_editor.ex:882 #: lib/bds/desktop/shell_live/misc_editor_html/misc_editor.html.heex:157 #, elixir-autogen, elixir-format @@ -1041,17 +1041,17 @@ msgstr "" msgid "Filename" msgstr "" -#: lib/bds/desktop/menu_bar.ex:223 +#: lib/bds/desktop/menu_bar.ex:254 #, elixir-autogen, elixir-format msgid "Fill Missing Translations" msgstr "" -#: lib/bds/desktop/menu_bar.ex:199 +#: lib/bds/desktop/menu_bar.ex:230 #, elixir-autogen, elixir-format msgid "Find" msgstr "" -#: lib/bds/desktop/menu_bar.ex:224 +#: lib/bds/desktop/menu_bar.ex:255 #, elixir-autogen, elixir-format msgid "Find Duplicate Posts" msgstr "" @@ -1066,7 +1066,7 @@ msgstr "" msgid "Find Duplicates" msgstr "" -#: lib/bds/desktop/menu_bar.ex:209 +#: lib/bds/desktop/menu_bar.ex:240 #, elixir-autogen, elixir-format msgid "Force Reload" msgstr "" @@ -1077,12 +1077,12 @@ msgstr "" msgid "Gallery" msgstr "" -#: lib/bds/desktop/menu_bar.ex:225 +#: lib/bds/desktop/menu_bar.ex:256 #, elixir-autogen, elixir-format msgid "Generate Site" msgstr "" -#: lib/bds/desktop/shell_live.ex:790 +#: lib/bds/desktop/shell_live.ex:792 #: lib/bds/desktop/shell_live/socket_state.ex:109 #: lib/bds/ui/sidebar.ex:789 #, elixir-autogen, elixir-format @@ -1096,13 +1096,13 @@ msgid "Git Diff" msgstr "" #: lib/bds/desktop/shell_data.ex:228 -#: lib/bds/desktop/shell_live.ex:786 +#: lib/bds/desktop/shell_live.ex:788 #: lib/bds/desktop/shell_live/panel_renderer.ex:171 #, elixir-autogen, elixir-format msgid "Git Log" msgstr "" -#: lib/bds/desktop/menu_bar.ex:183 +#: lib/bds/desktop/menu_bar.ex:212 #, elixir-autogen, elixir-format msgid "Help" msgstr "" @@ -1189,7 +1189,7 @@ msgstr "" msgid "Import (new slug)" msgstr "" -#: lib/bds/desktop/menu_bar.ex:186 +#: lib/bds/desktop/menu_bar.ex:215 #, elixir-autogen, elixir-format msgid "Import Media" msgstr "" @@ -1219,9 +1219,9 @@ msgstr "" msgid "Import failed: %{error}" msgstr "" -#: lib/bds/desktop/shell_live.ex:606 -#: lib/bds/desktop/shell_live.ex:902 -#: lib/bds/desktop/shell_live.ex:908 +#: lib/bds/desktop/shell_live.ex:608 +#: lib/bds/desktop/shell_live.ex:904 +#: lib/bds/desktop/shell_live.ex:910 #: lib/bds/desktop/shell_live/sidebar_create.ex:47 #, elixir-autogen, elixir-format msgid "Import media" @@ -1391,7 +1391,7 @@ msgstr "" msgid "Max Posts Per Page" msgstr "" -#: lib/bds/desktop/menu_bar.ex:203 +#: lib/bds/desktop/menu_bar.ex:234 #: lib/bds/desktop/shell_live/media_editor.ex:509 #: lib/bds/desktop/shell_live/media_editor.ex:513 #: lib/bds/desktop/shell_live/misc_editor.ex:735 @@ -1439,7 +1439,7 @@ msgstr "" msgid "Metadata" msgstr "" -#: lib/bds/desktop/menu_bar.ex:220 +#: lib/bds/desktop/menu_bar.ex:251 #: 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 @@ -1486,7 +1486,7 @@ msgstr "" msgid "New Page" msgstr "" -#: lib/bds/desktop/menu_bar.ex:185 +#: lib/bds/desktop/menu_bar.ex:214 #: lib/bds/desktop/shell_live/sidebar_create.ex:41 #: lib/bds/tui.ex:103 #, elixir-autogen, elixir-format @@ -1759,7 +1759,7 @@ msgstr "" msgid "Open" msgstr "" -#: lib/bds/desktop/menu_bar.ex:189 +#: lib/bds/desktop/menu_bar.ex:220 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:382 #, elixir-autogen, elixir-format msgid "Open Data Folder" @@ -1776,7 +1776,7 @@ msgstr "" msgid "Open Settings" msgstr "" -#: lib/bds/desktop/menu_bar.ex:188 +#: lib/bds/desktop/menu_bar.ex:217 #, elixir-autogen, elixir-format msgid "Open in Browser" msgstr "" @@ -1807,7 +1807,7 @@ msgstr "" msgid "Other (%{count})" msgstr "" -#: lib/bds/desktop/shell_live.ex:785 +#: lib/bds/desktop/shell_live.ex:787 #: lib/bds/desktop/shell_live/panel_renderer.ex:83 #, elixir-autogen, elixir-format msgid "Output" @@ -1855,7 +1855,7 @@ msgstr "" msgid "Parsing WXR file..." msgstr "" -#: lib/bds/desktop/menu_bar.ex:196 +#: lib/bds/desktop/menu_bar.ex:227 #, elixir-autogen, elixir-format msgid "Paste" msgstr "" @@ -1921,7 +1921,7 @@ msgstr "" msgid "Post saved" msgstr "" -#: lib/bds/desktop/menu_bar.ex:202 +#: 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:451 @@ -1937,7 +1937,7 @@ msgstr "" msgid "Posts (%{count})" msgstr "" -#: lib/bds/desktop/menu_bar.ex:201 +#: lib/bds/desktop/menu_bar.ex:232 #, elixir-autogen, elixir-format msgid "Preferences" msgstr "" @@ -1953,7 +1953,7 @@ msgstr "" msgid "Preview Mode" msgstr "" -#: lib/bds/desktop/menu_bar.ex:215 +#: lib/bds/desktop/menu_bar.ex:246 #, elixir-autogen, elixir-format msgid "Preview Post" msgstr "" @@ -2005,7 +2005,7 @@ msgstr "" msgid "Publish" msgstr "" -#: lib/bds/desktop/menu_bar.ex:214 +#: lib/bds/desktop/menu_bar.ex:245 #, elixir-autogen, elixir-format msgid "Publish Selected" msgstr "" @@ -2038,7 +2038,7 @@ msgstr "" msgid "Quick Actions" msgstr "" -#: lib/bds/desktop/menu_bar.ex:191 +#: lib/bds/desktop/menu_bar.ex:222 #, elixir-autogen, elixir-format msgid "Quit" msgstr "" @@ -2048,12 +2048,12 @@ msgstr "" msgid "Ready to import:" msgstr "" -#: lib/bds/desktop/menu_bar.ex:217 +#: lib/bds/desktop/menu_bar.ex:248 #, elixir-autogen, elixir-format msgid "Rebuild Database" msgstr "" -#: lib/bds/desktop/menu_bar.ex:219 +#: lib/bds/desktop/menu_bar.ex:250 #: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:381 #, elixir-autogen, elixir-format msgid "Rebuild Embedding Index" @@ -2084,7 +2084,7 @@ msgstr "" msgid "Rebuild filesystem-backed records and thumbnails" msgstr "" -#: lib/bds/desktop/menu_bar.ex:193 +#: lib/bds/desktop/menu_bar.ex:224 #, elixir-autogen, elixir-format msgid "Redo" msgstr "" @@ -2111,7 +2111,7 @@ msgstr "" msgid "Refresh Translation" msgstr "" -#: lib/bds/desktop/menu_bar.ex:221 +#: lib/bds/desktop/menu_bar.ex:252 #, elixir-autogen, elixir-format msgid "Regenerate Calendar" msgstr "" @@ -2121,12 +2121,12 @@ msgstr "" msgid "Regenerate Missing Thumbnails" msgstr "" -#: lib/bds/desktop/menu_bar.ex:218 +#: lib/bds/desktop/menu_bar.ex:249 #, elixir-autogen, elixir-format msgid "Reindex Text" msgstr "" -#: lib/bds/desktop/menu_bar.ex:208 +#: lib/bds/desktop/menu_bar.ex:239 #, elixir-autogen, elixir-format msgid "Reload" msgstr "" @@ -2157,7 +2157,7 @@ msgstr "" msgid "Render in Lists" msgstr "" -#: lib/bds/desktop/menu_bar.ex:200 +#: lib/bds/desktop/menu_bar.ex:231 #, elixir-autogen, elixir-format msgid "Replace" msgstr "" @@ -2174,12 +2174,12 @@ msgstr "" msgid "Replace Media File" msgstr "" -#: lib/bds/desktop/menu_bar.ex:236 +#: lib/bds/desktop/menu_bar.ex:267 #, elixir-autogen, elixir-format msgid "Report Issue" msgstr "" -#: lib/bds/desktop/menu_bar.ex:210 +#: lib/bds/desktop/menu_bar.ex:241 #, elixir-autogen, elixir-format msgid "Reset Zoom" msgstr "" @@ -2234,7 +2234,7 @@ msgstr "" msgid "SSH Mode" msgstr "" -#: lib/bds/desktop/menu_bar.ex:187 +#: lib/bds/desktop/menu_bar.ex:216 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:89 #: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:299 #: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:13 @@ -2353,7 +2353,7 @@ msgstr "" msgid "Select & Analyze" msgstr "" -#: lib/bds/desktop/menu_bar.ex:198 +#: lib/bds/desktop/menu_bar.ex:229 #, elixir-autogen, elixir-format msgid "Select All" msgstr "" @@ -2565,7 +2565,7 @@ msgstr "" msgid "Tags" msgstr "" -#: lib/bds/desktop/shell_live.ex:784 +#: lib/bds/desktop/shell_live.ex:786 #: lib/bds/desktop/shell_live/panel_renderer.ex:54 #, elixir-autogen, elixir-format msgid "Tasks" @@ -2661,12 +2661,12 @@ msgstr "" msgid "Title" msgstr "" -#: lib/bds/desktop/menu_bar.ex:206 +#: lib/bds/desktop/menu_bar.ex:237 #, elixir-autogen, elixir-format msgid "Toggle Assistant Sidebar" msgstr "" -#: lib/bds/desktop/menu_bar.ex:207 +#: lib/bds/desktop/menu_bar.ex:238 #, elixir-autogen, elixir-format msgid "Toggle Dev Tools" msgstr "" @@ -2677,17 +2677,17 @@ msgstr "" msgid "Toggle Filters" msgstr "" -#: lib/bds/desktop/menu_bar.ex:213 +#: lib/bds/desktop/menu_bar.ex:244 #, elixir-autogen, elixir-format msgid "Toggle Full Screen" msgstr "" -#: lib/bds/desktop/menu_bar.ex:205 +#: lib/bds/desktop/menu_bar.ex:236 #, elixir-autogen, elixir-format msgid "Toggle Panel" msgstr "" -#: lib/bds/desktop/menu_bar.ex:204 +#: lib/bds/desktop/menu_bar.ex:235 #, elixir-autogen, elixir-format msgid "Toggle Sidebar" msgstr "" @@ -2783,7 +2783,7 @@ msgstr "" msgid "URL" msgstr "" -#: lib/bds/desktop/menu_bar.ex:192 +#: lib/bds/desktop/menu_bar.ex:223 #, elixir-autogen, elixir-format msgid "Undo" msgstr "" @@ -2833,7 +2833,7 @@ msgstr "" msgid "Updated URLs" msgstr "" -#: lib/bds/desktop/menu_bar.ex:228 +#: lib/bds/desktop/menu_bar.ex:259 #, elixir-autogen, elixir-format msgid "Upload Site" msgstr "" @@ -2860,22 +2860,22 @@ msgstr "" msgid "Validate" msgstr "" -#: lib/bds/desktop/menu_bar.ex:227 +#: lib/bds/desktop/menu_bar.ex:258 #, elixir-autogen, elixir-format msgid "Validate Site" msgstr "" -#: lib/bds/desktop/menu_bar.ex:222 +#: lib/bds/desktop/menu_bar.ex:253 #, elixir-autogen, elixir-format msgid "Validate Translations" msgstr "" -#: lib/bds/desktop/menu_bar.ex:180 +#: lib/bds/desktop/menu_bar.ex:209 #, elixir-autogen, elixir-format msgid "View" msgstr "" -#: lib/bds/desktop/menu_bar.ex:235 +#: lib/bds/desktop/menu_bar.ex:266 #, elixir-autogen, elixir-format msgid "View on GitHub" msgstr "" @@ -2919,12 +2919,12 @@ msgstr "" msgid "You" msgstr "" -#: lib/bds/desktop/menu_bar.ex:211 +#: lib/bds/desktop/menu_bar.ex:242 #, elixir-autogen, elixir-format msgid "Zoom In" msgstr "" -#: lib/bds/desktop/menu_bar.ex:212 +#: lib/bds/desktop/menu_bar.ex:243 #, elixir-autogen, elixir-format msgid "Zoom Out" msgstr "" @@ -3246,12 +3246,12 @@ msgstr "" msgid "Comparing database and filesystem metadata" msgstr "" -#: lib/bds/desktop/shell_live.ex:682 +#: lib/bds/desktop/shell_live.ex:684 #, elixir-autogen, elixir-format msgid "Added %{count} images to post" msgstr "" -#: lib/bds/desktop/shell_live.ex:650 +#: lib/bds/desktop/shell_live.ex:652 #, elixir-autogen, elixir-format msgid "Added %{title}" msgstr "" @@ -3271,18 +3271,18 @@ msgstr "" msgid "Image Import Concurrency" msgstr "" -#: lib/bds/desktop/shell_live.ex:442 -#: lib/bds/desktop/shell_live.ex:455 -#: lib/bds/desktop/shell_live.ex:649 -#: lib/bds/desktop/shell_live.ex:681 -#: lib/bds/desktop/shell_live.ex:692 -#: lib/bds/desktop/shell_live.ex:703 +#: lib/bds/desktop/shell_live.ex:444 +#: lib/bds/desktop/shell_live.ex:457 +#: lib/bds/desktop/shell_live.ex:651 +#: lib/bds/desktop/shell_live.ex:683 +#: lib/bds/desktop/shell_live.ex:694 +#: lib/bds/desktop/shell_live.ex:705 #: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:420 #, elixir-autogen, elixir-format msgid "Add Gallery Images" msgstr "" -#: lib/bds/desktop/shell_live.ex:704 +#: lib/bds/desktop/shell_live.ex:706 #, elixir-autogen, elixir-format msgid "Failed to process %{path}: %{reason}" msgstr "" @@ -3473,12 +3473,12 @@ msgstr "" msgid "untracked" msgstr "" -#: lib/bds/desktop/shell_live.ex:810 +#: lib/bds/desktop/shell_live.ex:812 #, elixir-autogen, elixir-format msgid "Blogmark" msgstr "" -#: lib/bds/desktop/shell_live.ex:853 +#: lib/bds/desktop/shell_live.ex:855 #, elixir-autogen, elixir-format msgid "Open a project before importing a blogmark." msgstr "" @@ -3519,7 +3519,7 @@ msgstr "" msgid "Failed to copy bookmarklet to clipboard" msgstr "" -#: lib/bds/desktop/shell_live.ex:822 +#: lib/bds/desktop/shell_live.ex:824 #, elixir-autogen, elixir-format msgid "The project this blogmark targets does not exist here." msgstr "" @@ -3529,7 +3529,7 @@ msgstr "" msgid "Suggested tags" msgstr "" -#: lib/bds/desktop/menu_bar.ex:226 +#: lib/bds/desktop/menu_bar.ex:257 #, elixir-autogen, elixir-format msgid "Force Render Site" msgstr "" @@ -3544,22 +3544,22 @@ msgstr "" msgid "Rebuild Post Links" msgstr "" -#: lib/bds/desktop/menu_bar.ex:231 +#: lib/bds/desktop/menu_bar.ex:262 #, elixir-autogen, elixir-format msgid "Bring All to Front" msgstr "" -#: lib/bds/desktop/menu_bar.ex:229 +#: lib/bds/desktop/menu_bar.ex:260 #, elixir-autogen, elixir-format msgid "Minimize" msgstr "" -#: lib/bds/desktop/menu_bar.ex:182 +#: lib/bds/desktop/menu_bar.ex:211 #, elixir-autogen, elixir-format msgid "Window" msgstr "" -#: lib/bds/desktop/menu_bar.ex:230 +#: lib/bds/desktop/menu_bar.ex:261 #, elixir-autogen, elixir-format msgid "Zoom" msgstr "" @@ -3715,3 +3715,35 @@ msgstr "" #, elixir-autogen, elixir-format msgid "esc to close" msgstr "" + +#: lib/bds/desktop/menu_bar.ex:83 +#: lib/bds/desktop/shell_live.ex:1110 +#, elixir-autogen, elixir-format +msgid "Connect to Server" +msgstr "" + +#: lib/bds/desktop/menu_bar.ex:218 +#, elixir-autogen, elixir-format +msgid "Connect to Server…" +msgstr "" + +#: lib/bds/desktop/menu_bar.ex:84 +#, elixir-autogen, elixir-format +msgid "Connection failed: %{reason}" +msgstr "" + +#: lib/bds/desktop/menu_bar.ex:219 +#, elixir-autogen, elixir-format +msgid "Disconnect from Server" +msgstr "" + +#: lib/bds/desktop/menu_bar.ex:72 +#: lib/bds/desktop/shell_live.ex:1097 +#, elixir-autogen, elixir-format +msgid "Server address (user@host or user@host:port), public-key auth:" +msgstr "" + +#: lib/bds/desktop/remote_connection.ex:82 +#, elixir-autogen, elixir-format +msgid "Use the form user@host or user@host:port." +msgstr "" diff --git a/specs/server.allium b/specs/server.allium index 6966a62..2fba667 100644 --- a/specs/server.allium +++ b/specs/server.allium @@ -25,6 +25,7 @@ surface ServerRuntimeSurface { provides: ApplicationStarted(mode) SshClientConnected() + GuiConnectRequested() } rule ModeResolution { @@ -53,6 +54,15 @@ rule ServerBoot { -- host key generated and authorized_keys touched on first boot only } +rule GuiRemoteConnection { + when: GuiConnectRequested() + -- Desktop "Connect to Server…": ssh connect with the same public keys + -- (client identity + known_hosts in the private ssh dir), then an OTP + -- TCP/IP tunnel to the server's loopback endpoint; the webview loads + -- the local tunnel end. Disconnect returns to the local shell URL. + ensures: WebviewTunneledToServer() +} + rule TuiSession { when: SshClientConnected() -- Each SSH client gets its own TUI app instance on the server; diff --git a/test/bds/desktop/remote_connection_test.exs b/test/bds/desktop/remote_connection_test.exs new file mode 100644 index 0000000..9c83734 --- /dev/null +++ b/test/bds/desktop/remote_connection_test.exs @@ -0,0 +1,98 @@ +defmodule BDS.Desktop.RemoteConnectionTest do + use ExUnit.Case, async: false + + alias BDS.Desktop.RemoteConnection + + describe "parse_target/1" do + test "parses user@host with default SSH port" do + assert {:ok, %{user: "gb", host: "blog.example.com", port: 2222}} = + RemoteConnection.parse_target("gb@blog.example.com") + end + + test "parses an explicit SSH port" do + assert {:ok, %{user: "gb", host: "10.0.0.5", port: 2022}} = + RemoteConnection.parse_target("gb@10.0.0.5:2022") + end + + test "trims whitespace" do + assert {:ok, %{host: "h", user: "u"}} = RemoteConnection.parse_target(" u@h \n") + end + + test "rejects targets without a user or host" do + assert {:error, :invalid_target} = RemoteConnection.parse_target("justahost") + assert {:error, :invalid_target} = RemoteConnection.parse_target("@host") + assert {:error, :invalid_target} = RemoteConnection.parse_target("user@") + assert {:error, :invalid_target} = RemoteConnection.parse_target("user@host:notaport") + end + end + + describe "connect/2 and disconnect/1 (fake ssh)" do + setup do + parent = self() + + ssh_dir = + Path.join(System.tmp_dir!(), "bds-remote-ssh-#{System.unique_integer([:positive])}") + + on_exit(fn -> File.rm_rf!(ssh_dir) end) + + fake = [ + ssh_dir_fun: fn -> ssh_dir end, + connect_fun: fn host, port, opts -> + send(parent, {:ssh_connect, host, port, opts}) + {:ok, spawn(fn -> Process.sleep(:infinity) end)} + end, + tunnel_fun: fn conn, _lhost, _lport, _rhost, rport, _timeout -> + send(parent, {:tunnel, conn, rport}) + {:ok, 54_321} + end, + close_fun: fn conn -> send(parent, {:ssh_close, conn}) end + ] + + start_supervised!({RemoteConnection, name: nil, test_overrides: fake}) + |> then(&{:ok, server: &1}) + end + + test "connects with public-key auth and returns the tunneled URL", %{server: server} do + assert {:ok, url} = RemoteConnection.connect(server, "gb@blog.example.com") + assert url == "http://127.0.0.1:54321/" + + assert_receive {:ssh_connect, ~c"blog.example.com", 2222, opts} + assert opts[:user] == ~c"gb" + assert opts[:auth_methods] == ~c"publickey" + refute Keyword.has_key?(opts, :password) + + assert_receive {:tunnel, _conn, 4010} + assert {:connected, "gb@blog.example.com", "http://127.0.0.1:54321/"} = + RemoteConnection.status(server) + end + + test "disconnect closes the SSH connection", %{server: server} do + {:ok, _url} = RemoteConnection.connect(server, "gb@blog.example.com") + assert :ok = RemoteConnection.disconnect(server) + assert_receive {:ssh_close, _conn} + assert :disconnected = RemoteConnection.status(server) + end + + test "connect errors surface as {:error, reason}", %{server: server} do + assert {:error, :invalid_target} = RemoteConnection.connect(server, "nonsense") + end + end + + describe "menu integration" do + test "the File menu offers connect and disconnect" do + file_group = Enum.find(BDS.UI.MenuBar.default_groups(), &(&1.id == :file)) + ids = Enum.map(file_group.items, &Map.get(&1, :id)) + + assert :connect_server in ids + assert :disconnect_server in ids + end + end + + describe "desktop auth" do + test "required in desktop mode, skipped in server and tui modes" do + assert BDS.Server.desktop_auth_required?(:desktop) == true + assert BDS.Server.desktop_auth_required?(:server) == false + assert BDS.Server.desktop_auth_required?(:tui) == false + end + end +end