fix: proper menu translation

This commit is contained in:
2026-05-03 19:31:26 +02:00
parent dbb93a66f6
commit 4bee8cf1db
7 changed files with 347 additions and 56 deletions

View File

@@ -2,7 +2,7 @@ defmodule BDS.Desktop.MenuBar do
@moduledoc false @moduledoc false
use BDS.Desktop.MenuCompat use BDS.Desktop.MenuCompat
alias BDS.Desktop.Shutdown alias BDS.Desktop.{ShellData, Shutdown, UILocale}
alias BDS.UI.Commands alias BDS.UI.Commands
alias BDS.UI.MenuBar, as: ShellMenuBar alias BDS.UI.MenuBar, as: ShellMenuBar
alias Desktop.OS alias Desktop.OS
@@ -22,6 +22,8 @@ defmodule BDS.Desktop.MenuBar do
@impl true @impl true
def mount(menu) do def mount(menu) do
UILocale.put(ShellData.ui_language())
{:ok, {:ok,
Desktop.Menu.assign( Desktop.Menu.assign(
menu, menu,
@@ -85,6 +87,17 @@ defmodule BDS.Desktop.MenuBar do
end end
@impl true @impl true
def handle_info({:set_ui_locale, locale}, menu) do
UILocale.put(locale)
{:noreply,
Desktop.Menu.assign(
menu,
:groups,
groups(dev_mode?: Application.get_env(:bds, :dev_routes, false))
)}
end
def handle_info(_, menu) do def handle_info(_, menu) do
{:noreply, menu} {:noreply, menu}
end end
@@ -127,58 +140,60 @@ defmodule BDS.Desktop.MenuBar do
defp native_label(label, nil), do: label defp native_label(label, nil), do: label
defp native_label(label, shortcut), do: label <> "\t" <> shortcut defp native_label(label, shortcut), do: label <> "\t" <> shortcut
defp group_label(:file), do: "File" defp group_label(:file), do: translate("menuBar.file")
defp group_label(:edit), do: "Edit" defp group_label(:edit), do: translate("menuBar.edit")
defp group_label(:view), do: "View" defp group_label(:view), do: translate("menuBar.view")
defp group_label(:blog), do: "Blog" defp group_label(:blog), do: translate("menuBar.blog")
defp group_label(:help), do: "Help" defp group_label(:help), do: translate("menuBar.help")
defp item_label(:new_post), do: "New Post" defp item_label(:new_post), do: translate("menuBar.newPost")
defp item_label(:import_media), do: "Import Media" defp item_label(:import_media), do: translate("menuBar.importMedia")
defp item_label(:save), do: "Save" defp item_label(:save), do: translate("menuBar.save")
defp item_label(:open_in_browser), do: "Open in Browser" defp item_label(:open_in_browser), do: translate("menuBar.openInBrowser")
defp item_label(:open_data_folder), do: "Open Data Folder" defp item_label(:open_data_folder), do: translate("menuBar.openDataFolder")
defp item_label(:close_tab), do: "Close Tab" defp item_label(:close_tab), do: translate("menuBar.closeTab")
defp item_label(:quit), do: "Quit" defp item_label(:quit), do: translate("menuBar.quit")
defp item_label(:undo), do: "Undo" defp item_label(:undo), do: translate("menuBar.undo")
defp item_label(:redo), do: "Redo" defp item_label(:redo), do: translate("menuBar.redo")
defp item_label(:cut), do: "Cut" defp item_label(:cut), do: translate("menuBar.cut")
defp item_label(:copy), do: "Copy" defp item_label(:copy), do: translate("menuBar.copy")
defp item_label(:paste), do: "Paste" defp item_label(:paste), do: translate("menuBar.paste")
defp item_label(:delete), do: "Delete" defp item_label(:delete), do: translate("menuBar.delete")
defp item_label(:select_all), do: "Select All" defp item_label(:select_all), do: translate("menuBar.selectAll")
defp item_label(:find), do: "Find" defp item_label(:find), do: translate("menuBar.find")
defp item_label(:replace), do: "Replace" defp item_label(:replace), do: translate("menuBar.replace")
defp item_label(:edit_preferences), do: "Preferences" defp item_label(:edit_preferences), do: translate("menuBar.preferences")
defp item_label(:view_posts), do: "Posts" defp item_label(:view_posts), do: translate("menuBar.viewPosts")
defp item_label(:view_media), do: "Media" defp item_label(:view_media), do: translate("menuBar.viewMedia")
defp item_label(:toggle_sidebar), do: "Toggle Sidebar" defp item_label(:toggle_sidebar), do: translate("menuBar.toggleSidebar")
defp item_label(:toggle_panel), do: "Toggle Panel" defp item_label(:toggle_panel), do: translate("menuBar.togglePanel")
defp item_label(:toggle_assistant_sidebar), do: "Toggle Assistant Sidebar" defp item_label(:toggle_assistant_sidebar), do: translate("menuBar.toggleAssistantSidebar")
defp item_label(:toggle_dev_tools), do: "Toggle Dev Tools" defp item_label(:toggle_dev_tools), do: translate("menuBar.toggleDevTools")
defp item_label(:reload), do: "Reload" defp item_label(:reload), do: translate("menuBar.reload")
defp item_label(:force_reload), do: "Force Reload" defp item_label(:force_reload), do: translate("menuBar.forceReload")
defp item_label(:reset_zoom), do: "Reset Zoom" defp item_label(:reset_zoom), do: translate("menuBar.resetZoom")
defp item_label(:zoom_in), do: "Zoom In" defp item_label(:zoom_in), do: translate("menuBar.zoomIn")
defp item_label(:zoom_out), do: "Zoom Out" defp item_label(:zoom_out), do: translate("menuBar.zoomOut")
defp item_label(:toggle_full_screen), do: "Toggle Full Screen" defp item_label(:toggle_full_screen), do: translate("menuBar.toggleFullScreen")
defp item_label(:publish_selected), do: "Publish Selected" defp item_label(:publish_selected), do: translate("menuBar.publishSelected")
defp item_label(:preview_post), do: "Preview Post" defp item_label(:preview_post), do: translate("menuBar.previewPost")
defp item_label(:edit_menu), do: "Edit Menu" defp item_label(:edit_menu), do: translate("menuBar.editMenu")
defp item_label(:rebuild_database), do: "Rebuild Database" defp item_label(:rebuild_database), do: translate("menuBar.rebuildDatabase")
defp item_label(:reindex_text), do: "Reindex Text" defp item_label(:reindex_text), do: translate("menuBar.reindexText")
defp item_label(:rebuild_embedding_index), do: "Rebuild Embedding Index" defp item_label(:rebuild_embedding_index), do: translate("menuBar.rebuildEmbeddingIndex")
defp item_label(:metadata_diff), do: "Metadata Diff" defp item_label(:metadata_diff), do: translate("menuBar.metadataDiff")
defp item_label(:regenerate_calendar), do: "Regenerate Calendar" defp item_label(:regenerate_calendar), do: translate("menuBar.regenerateCalendar")
defp item_label(:validate_translations), do: "Validate Translations" defp item_label(:validate_translations), do: translate("menuBar.validateTranslations")
defp item_label(:fill_missing_translations), do: "Fill Missing Translations" defp item_label(:fill_missing_translations), do: translate("menuBar.fillMissingTranslations")
defp item_label(:find_duplicates), do: "Find Duplicate Posts" defp item_label(:find_duplicates), do: translate("menuBar.findDuplicates")
defp item_label(:generate_sitemap), do: "Generate Site" defp item_label(:generate_sitemap), do: translate("menuBar.generateSite")
defp item_label(:validate_site), do: "Validate Site" defp item_label(:validate_site), do: translate("menuBar.validateSite")
defp item_label(:upload_site), do: "Upload Site" defp item_label(:upload_site), do: translate("menuBar.uploadSite")
defp item_label(:about), do: "About" defp item_label(:about), do: translate("menuBar.about")
defp item_label(:documentation), do: "Documentation" defp item_label(:documentation), do: translate("menuBar.documentation")
defp item_label(:api_documentation), do: "API Documentation" defp item_label(:api_documentation), do: translate("menuBar.apiDocumentation")
defp item_label(:view_on_github), do: "View on GitHub" defp item_label(:view_on_github), do: translate("menuBar.viewOnGithub")
defp item_label(:report_issue), do: "Report Issue" defp item_label(:report_issue), do: translate("menuBar.reportIssue")
defp translate(text), do: ShellData.translate(text, %{}, UILocale.current())
end end

View File

@@ -161,8 +161,9 @@ defmodule BDS.Desktop.ShellLive do
|> assign(:sidebar_filter_panels, %{}) |> assign(:sidebar_filter_panels, %{})
|> assign(:chat_editor_request_refs, %{}) |> assign(:chat_editor_request_refs, %{})
|> assign(:shell_overlay, nil) |> assign(:shell_overlay, nil)
|> assign(:output_entries, []) |> assign(:output_entries, [])
|> reload_shell(workbench)} |> reload_shell(workbench)
|> tap(&sync_menu_bar_locale/1)}
end end
@impl true @impl true
@@ -682,6 +683,7 @@ defmodule BDS.Desktop.ShellLive do
socket socket
|> assign(:page_language, normalized) |> assign(:page_language, normalized)
|> reload_shell(socket.assigns.workbench) |> reload_shell(socket.assigns.workbench)
|> tap(&sync_menu_bar_locale/1)
end end
end end
@@ -861,4 +863,13 @@ defmodule BDS.Desktop.ShellLive do
apply_shell_command_result: &apply_shell_command_result/2 apply_shell_command_result: &apply_shell_command_result/2
} }
defp sync_menu_bar_locale(socket) do
locale = socket.assigns.page_language
case Process.whereis(BDS.Desktop.MenuBar) do
nil -> :ok
pid -> send(pid, {:set_ui_locale, locale})
end
end
end end

View File

@@ -64,6 +64,59 @@
"translationValidation.revalidate": "Erneut validieren", "translationValidation.revalidate": "Erneut validieren",
"translationValidation.fix": "Probleme beheben", "translationValidation.fix": "Probleme beheben",
"translationValidation.toast.fixSuccess": "%{dbRows} DB-Zeilen und %{files} Dateien gelöscht, %{flushed} Übersetzungen auf Datenträger geschrieben", "translationValidation.toast.fixSuccess": "%{dbRows} DB-Zeilen und %{files} Dateien gelöscht, %{flushed} Übersetzungen auf Datenträger geschrieben",
"menuBar.about": "Über",
"menuBar.apiDocumentation": "API-Dokumentation",
"menuBar.blog": "Blog",
"menuBar.closeTab": "Tab schließen",
"menuBar.copy": "Kopieren",
"menuBar.cut": "Ausschneiden",
"menuBar.delete": "Löschen",
"menuBar.documentation": "Dokumentation",
"menuBar.edit": "Bearbeiten",
"menuBar.editMenu": "Menü bearbeiten",
"menuBar.file": "Datei",
"menuBar.fillMissingTranslations": "Fehlende Übersetzungen ergänzen",
"menuBar.find": "Suchen",
"menuBar.findDuplicates": "Doppelte Beiträge finden",
"menuBar.forceReload": "Erzwungenes Neuladen",
"menuBar.generateSite": "Website generieren",
"menuBar.help": "Hilfe",
"menuBar.importMedia": "Medien importieren",
"menuBar.metadataDiff": "Metadaten-Diff",
"menuBar.newPost": "Neuer Beitrag",
"menuBar.openDataFolder": "Datenordner öffnen",
"menuBar.openInBrowser": "Im Browser öffnen",
"menuBar.paste": "Einfügen",
"menuBar.preferences": "Einstellungen",
"menuBar.previewPost": "Beitragsvorschau",
"menuBar.publishSelected": "Ausgewähltes veröffentlichen",
"menuBar.quit": "Beenden",
"menuBar.redo": "Wiederholen",
"menuBar.regenerateCalendar": "Kalender neu erzeugen",
"menuBar.reload": "Neu laden",
"menuBar.replace": "Ersetzen",
"menuBar.reportIssue": "Problem melden",
"menuBar.rebuildDatabase": "Datenbank neu aufbauen",
"menuBar.rebuildEmbeddingIndex": "Embedding-Index neu aufbauen",
"menuBar.reindexText": "Text neu indizieren",
"menuBar.resetZoom": "Zoom zurücksetzen",
"menuBar.save": "Speichern",
"menuBar.selectAll": "Alles auswählen",
"menuBar.toggleAssistantSidebar": "Assistenten-Seitenleiste umschalten",
"menuBar.toggleDevTools": "Entwicklertools umschalten",
"menuBar.toggleFullScreen": "Vollbild umschalten",
"menuBar.togglePanel": "Panel umschalten",
"menuBar.toggleSidebar": "Seitenleiste umschalten",
"menuBar.undo": "Rückgängig",
"menuBar.uploadSite": "Website hochladen",
"menuBar.validateSite": "Website validieren",
"menuBar.validateTranslations": "Übersetzungen validieren",
"menuBar.view": "Ansicht",
"menuBar.viewMedia": "Medien",
"menuBar.viewOnGithub": "Auf GitHub ansehen",
"menuBar.viewPosts": "Beiträge",
"menuBar.zoomIn": "Heranzoomen",
"menuBar.zoomOut": "Herauszoomen",
"menuEditor.tabTitle": "Blog-Menü", "menuEditor.tabTitle": "Blog-Menü",
"menuEditor.title": "Blog-Menü-Editor", "menuEditor.title": "Blog-Menü-Editor",
"menuEditor.description": "Verwalte die zentrale Blog-Navigationsstruktur und speichere sie in meta/menu.opml.", "menuEditor.description": "Verwalte die zentrale Blog-Navigationsstruktur und speichere sie in meta/menu.opml.",

View File

@@ -64,6 +64,59 @@
"translationValidation.revalidate": "Revalidate", "translationValidation.revalidate": "Revalidate",
"translationValidation.fix": "Fix Issues", "translationValidation.fix": "Fix Issues",
"translationValidation.toast.fixSuccess": "Deleted %{dbRows} DB rows and %{files} files, flushed %{flushed} translations to disk", "translationValidation.toast.fixSuccess": "Deleted %{dbRows} DB rows and %{files} files, flushed %{flushed} translations to disk",
"menuBar.about": "About",
"menuBar.apiDocumentation": "API Documentation",
"menuBar.blog": "Blog",
"menuBar.closeTab": "Close Tab",
"menuBar.copy": "Copy",
"menuBar.cut": "Cut",
"menuBar.delete": "Delete",
"menuBar.documentation": "Documentation",
"menuBar.edit": "Edit",
"menuBar.editMenu": "Edit Menu",
"menuBar.file": "File",
"menuBar.fillMissingTranslations": "Fill Missing Translations",
"menuBar.find": "Find",
"menuBar.findDuplicates": "Find Duplicate Posts",
"menuBar.forceReload": "Force Reload",
"menuBar.generateSite": "Generate Site",
"menuBar.help": "Help",
"menuBar.importMedia": "Import Media",
"menuBar.metadataDiff": "Metadata Diff",
"menuBar.newPost": "New Post",
"menuBar.openDataFolder": "Open Data Folder",
"menuBar.openInBrowser": "Open in Browser",
"menuBar.paste": "Paste",
"menuBar.preferences": "Preferences",
"menuBar.previewPost": "Preview Post",
"menuBar.publishSelected": "Publish Selected",
"menuBar.quit": "Quit",
"menuBar.redo": "Redo",
"menuBar.regenerateCalendar": "Regenerate Calendar",
"menuBar.reload": "Reload",
"menuBar.replace": "Replace",
"menuBar.reportIssue": "Report Issue",
"menuBar.rebuildDatabase": "Rebuild Database",
"menuBar.rebuildEmbeddingIndex": "Rebuild Embedding Index",
"menuBar.reindexText": "Reindex Text",
"menuBar.resetZoom": "Reset Zoom",
"menuBar.save": "Save",
"menuBar.selectAll": "Select All",
"menuBar.toggleAssistantSidebar": "Toggle Assistant Sidebar",
"menuBar.toggleDevTools": "Toggle Dev Tools",
"menuBar.toggleFullScreen": "Toggle Full Screen",
"menuBar.togglePanel": "Toggle Panel",
"menuBar.toggleSidebar": "Toggle Sidebar",
"menuBar.undo": "Undo",
"menuBar.uploadSite": "Upload Site",
"menuBar.validateSite": "Validate Site",
"menuBar.validateTranslations": "Validate Translations",
"menuBar.view": "View",
"menuBar.viewMedia": "Media",
"menuBar.viewOnGithub": "View on GitHub",
"menuBar.viewPosts": "Posts",
"menuBar.zoomIn": "Zoom In",
"menuBar.zoomOut": "Zoom Out",
"menuEditor.tabTitle": "Blog Menu", "menuEditor.tabTitle": "Blog Menu",
"menuEditor.title": "Blog Menu Editor", "menuEditor.title": "Blog Menu Editor",
"menuEditor.description": "Manage the central blog navigation outline and save it to meta/menu.opml.", "menuEditor.description": "Manage the central blog navigation outline and save it to meta/menu.opml.",

View File

@@ -64,6 +64,59 @@
"translationValidation.revalidate": "Revalidar", "translationValidation.revalidate": "Revalidar",
"translationValidation.fix": "Corregir problemas", "translationValidation.fix": "Corregir problemas",
"translationValidation.toast.fixSuccess": "%{dbRows} filas de BD y %{files} archivos eliminados, %{flushed} traducciones escritas a disco", "translationValidation.toast.fixSuccess": "%{dbRows} filas de BD y %{files} archivos eliminados, %{flushed} traducciones escritas a disco",
"menuBar.about": "Acerca de",
"menuBar.apiDocumentation": "Documentación de API",
"menuBar.blog": "Blog",
"menuBar.closeTab": "Cerrar pestaña",
"menuBar.copy": "Copiar",
"menuBar.cut": "Cortar",
"menuBar.delete": "Eliminar",
"menuBar.documentation": "Documentación",
"menuBar.edit": "Editar",
"menuBar.editMenu": "Editar menú",
"menuBar.file": "Archivo",
"menuBar.fillMissingTranslations": "Completar traducciones faltantes",
"menuBar.find": "Buscar",
"menuBar.findDuplicates": "Buscar entradas duplicadas",
"menuBar.forceReload": "Recarga forzada",
"menuBar.generateSite": "Generar sitio",
"menuBar.help": "Ayuda",
"menuBar.importMedia": "Importar medios",
"menuBar.metadataDiff": "Diff de metadatos",
"menuBar.newPost": "Nueva entrada",
"menuBar.openDataFolder": "Abrir carpeta de datos",
"menuBar.openInBrowser": "Abrir en navegador",
"menuBar.paste": "Pegar",
"menuBar.preferences": "Preferencias",
"menuBar.previewPost": "Vista previa de entrada",
"menuBar.publishSelected": "Publicar seleccionados",
"menuBar.quit": "Salir",
"menuBar.redo": "Rehacer",
"menuBar.regenerateCalendar": "Regenerar calendario",
"menuBar.reload": "Recargar",
"menuBar.replace": "Reemplazar",
"menuBar.reportIssue": "Informar de problema",
"menuBar.rebuildDatabase": "Reconstruir base de datos",
"menuBar.rebuildEmbeddingIndex": "Reconstruir índice de embeddings",
"menuBar.reindexText": "Reindexar texto",
"menuBar.resetZoom": "Restablecer zoom",
"menuBar.save": "Guardar",
"menuBar.selectAll": "Seleccionar todo",
"menuBar.toggleAssistantSidebar": "Alternar asistente",
"menuBar.toggleDevTools": "Alternar herramientas de desarrollo",
"menuBar.toggleFullScreen": "Pantalla completa",
"menuBar.togglePanel": "Alternar panel",
"menuBar.toggleSidebar": "Alternar barra lateral",
"menuBar.undo": "Deshacer",
"menuBar.uploadSite": "Subir sitio",
"menuBar.validateSite": "Validar sitio",
"menuBar.validateTranslations": "Validar traducciones",
"menuBar.view": "Ver",
"menuBar.viewMedia": "Medios",
"menuBar.viewOnGithub": "Ver en GitHub",
"menuBar.viewPosts": "Entradas",
"menuBar.zoomIn": "Acercar",
"menuBar.zoomOut": "Alejar",
"menuEditor.tabTitle": "Menú del blog", "menuEditor.tabTitle": "Menú del blog",
"menuEditor.title": "Editor del menú del blog", "menuEditor.title": "Editor del menú del blog",
"menuEditor.description": "Gestiona la estructura central de navegación del blog y guárdala en meta/menu.opml.", "menuEditor.description": "Gestiona la estructura central de navegación del blog y guárdala en meta/menu.opml.",

View File

@@ -64,6 +64,59 @@
"translationValidation.revalidate": "Revalider", "translationValidation.revalidate": "Revalider",
"translationValidation.fix": "Corriger les problèmes", "translationValidation.fix": "Corriger les problèmes",
"translationValidation.toast.fixSuccess": "%{dbRows} lignes DB et %{files} fichiers supprimés, %{flushed} traductions écrites sur disque", "translationValidation.toast.fixSuccess": "%{dbRows} lignes DB et %{files} fichiers supprimés, %{flushed} traductions écrites sur disque",
"menuBar.about": "À propos",
"menuBar.apiDocumentation": "Documentation API",
"menuBar.blog": "Blog",
"menuBar.closeTab": "Fermer longlet",
"menuBar.copy": "Copier",
"menuBar.cut": "Couper",
"menuBar.delete": "Supprimer",
"menuBar.documentation": "Documentation",
"menuBar.edit": "Édition",
"menuBar.editMenu": "Modifier le menu",
"menuBar.file": "Fichier",
"menuBar.fillMissingTranslations": "Compléter les traductions manquantes",
"menuBar.find": "Rechercher",
"menuBar.findDuplicates": "Trouver les doublons",
"menuBar.forceReload": "Recharger de force",
"menuBar.generateSite": "Générer le site",
"menuBar.help": "Aide",
"menuBar.importMedia": "Importer des médias",
"menuBar.metadataDiff": "Diff des métadonnées",
"menuBar.newPost": "Nouvel article",
"menuBar.openDataFolder": "Ouvrir le dossier de données",
"menuBar.openInBrowser": "Ouvrir dans le navigateur",
"menuBar.paste": "Coller",
"menuBar.preferences": "Préférences",
"menuBar.previewPost": "Aperçu de larticle",
"menuBar.publishSelected": "Publier la sélection",
"menuBar.quit": "Quitter",
"menuBar.redo": "Rétablir",
"menuBar.regenerateCalendar": "Régénérer le calendrier",
"menuBar.reload": "Recharger",
"menuBar.replace": "Remplacer",
"menuBar.reportIssue": "Signaler un problème",
"menuBar.rebuildDatabase": "Reconstruire la base de données",
"menuBar.rebuildEmbeddingIndex": "Reconstruire lindex dembeddings",
"menuBar.reindexText": "Réindexer le texte",
"menuBar.resetZoom": "Réinitialiser le zoom",
"menuBar.save": "Enregistrer",
"menuBar.selectAll": "Tout sélectionner",
"menuBar.toggleAssistantSidebar": "Afficher/masquer lassistant",
"menuBar.toggleDevTools": "Afficher/masquer les outils de développement",
"menuBar.toggleFullScreen": "Plein écran",
"menuBar.togglePanel": "Afficher/masquer le panneau",
"menuBar.toggleSidebar": "Afficher/masquer la barre latérale",
"menuBar.undo": "Annuler",
"menuBar.uploadSite": "Téléverser le site",
"menuBar.validateSite": "Valider le site",
"menuBar.validateTranslations": "Valider les traductions",
"menuBar.view": "Affichage",
"menuBar.viewMedia": "Médias",
"menuBar.viewOnGithub": "Voir sur GitHub",
"menuBar.viewPosts": "Articles",
"menuBar.zoomIn": "Zoom avant",
"menuBar.zoomOut": "Zoom arrière",
"menuEditor.tabTitle": "Menu du blog", "menuEditor.tabTitle": "Menu du blog",
"menuEditor.title": "Éditeur du menu du blog", "menuEditor.title": "Éditeur du menu du blog",
"menuEditor.description": "Gérez la structure centrale de navigation du blog et enregistrez-la dans meta/menu.opml.", "menuEditor.description": "Gérez la structure centrale de navigation du blog et enregistrez-la dans meta/menu.opml.",

View File

@@ -64,6 +64,59 @@
"translationValidation.revalidate": "Rivalidare", "translationValidation.revalidate": "Rivalidare",
"translationValidation.fix": "Correggi problemi", "translationValidation.fix": "Correggi problemi",
"translationValidation.toast.fixSuccess": "%{dbRows} righe DB e %{files} file eliminati, %{flushed} traduzioni scritte su disco", "translationValidation.toast.fixSuccess": "%{dbRows} righe DB e %{files} file eliminati, %{flushed} traduzioni scritte su disco",
"menuBar.about": "Informazioni",
"menuBar.apiDocumentation": "Documentazione API",
"menuBar.blog": "Blog",
"menuBar.closeTab": "Chiudi scheda",
"menuBar.copy": "Copia",
"menuBar.cut": "Taglia",
"menuBar.delete": "Elimina",
"menuBar.documentation": "Documentazione",
"menuBar.edit": "Modifica",
"menuBar.editMenu": "Modifica menu",
"menuBar.file": "File",
"menuBar.fillMissingTranslations": "Completa traduzioni mancanti",
"menuBar.find": "Trova",
"menuBar.findDuplicates": "Trova post duplicati",
"menuBar.forceReload": "Ricarica forzata",
"menuBar.generateSite": "Genera sito",
"menuBar.help": "Aiuto",
"menuBar.importMedia": "Importa media",
"menuBar.metadataDiff": "Diff metadati",
"menuBar.newPost": "Nuovo post",
"menuBar.openDataFolder": "Apri cartella dati",
"menuBar.openInBrowser": "Apri nel browser",
"menuBar.paste": "Incolla",
"menuBar.preferences": "Preferenze",
"menuBar.previewPost": "Anteprima post",
"menuBar.publishSelected": "Pubblica selezionati",
"menuBar.quit": "Esci",
"menuBar.redo": "Ripeti",
"menuBar.regenerateCalendar": "Rigenera calendario",
"menuBar.reload": "Ricarica",
"menuBar.replace": "Sostituisci",
"menuBar.reportIssue": "Segnala problema",
"menuBar.rebuildDatabase": "Ricostruisci database",
"menuBar.rebuildEmbeddingIndex": "Ricostruisci indice embeddings",
"menuBar.reindexText": "Reindicizza testo",
"menuBar.resetZoom": "Reimposta zoom",
"menuBar.save": "Salva",
"menuBar.selectAll": "Seleziona tutto",
"menuBar.toggleAssistantSidebar": "Attiva/disattiva assistente",
"menuBar.toggleDevTools": "Attiva/disattiva strumenti sviluppo",
"menuBar.toggleFullScreen": "Schermo intero",
"menuBar.togglePanel": "Attiva/disattiva pannello",
"menuBar.toggleSidebar": "Attiva/disattiva barra laterale",
"menuBar.undo": "Annulla",
"menuBar.uploadSite": "Carica sito",
"menuBar.validateSite": "Valida sito",
"menuBar.validateTranslations": "Valida traduzioni",
"menuBar.view": "Vista",
"menuBar.viewMedia": "Media",
"menuBar.viewOnGithub": "Visualizza su GitHub",
"menuBar.viewPosts": "Post",
"menuBar.zoomIn": "Aumenta zoom",
"menuBar.zoomOut": "Riduci zoom",
"menuEditor.tabTitle": "Menu del blog", "menuEditor.tabTitle": "Menu del blog",
"menuEditor.title": "Editor del menu del blog", "menuEditor.title": "Editor del menu del blog",
"menuEditor.description": "Gestisci la struttura centrale di navigazione del blog e salvala in meta/menu.opml.", "menuEditor.description": "Gestisci la struttura centrale di navigazione del blog e salvala in meta/menu.opml.",