- Remove board
+ {t('editor.canvas.removeBoard')}
{connectedWires > 0 && (
- ({connectedWires} wire{connectedWires > 1 ? 's' : ''})
+ ({t('editor.canvas.wireCount', { count: connectedWires })})
)}
@@ -2682,7 +2684,7 @@ export const SimulatorCanvas = ({ headerSlot }: SimulatorCanvasProps = {}) => {
{boardToRemove &&
(() => {
const board = boards.find((b) => b.id === boardToRemove);
- const label = board ? BOARD_KIND_LABELS[board.boardKind] : 'Board';
+ const label = board ? BOARD_KIND_LABELS[board.boardKind] : t('editor.canvas.removeConfirm.boardFallback');
const connectedWires = wires.filter(
(w) => w.start.componentId === boardToRemove || w.end.componentId === boardToRemove,
).length;
@@ -2709,20 +2711,12 @@ export const SimulatorCanvas = ({ headerSlot }: SimulatorCanvasProps = {}) => {
}}
>
- Remove {label}?
+ {t('editor.canvas.removeConfirm.title', { label })}
- This will remove the board from the workspace
- {connectedWires > 0 && (
- <>
- {' '}
- and{' '}
-
- {connectedWires} connected wire{connectedWires > 1 ? 's' : ''}
-
- >
- )}
- . This action cannot be undone.
+ {connectedWires > 0
+ ? t('editor.canvas.removeConfirm.bodyWithWires', { count: connectedWires })
+ : t('editor.canvas.removeConfirm.body')}
diff --git a/frontend/src/i18n/locales/de/common.json b/frontend/src/i18n/locales/de/common.json
index 5b70ecb7..87916db8 100644
--- a/frontend/src/i18n/locales/de/common.json
+++ b/frontend/src/i18n/locales/de/common.json
@@ -179,6 +179,49 @@
"copy": "Kopieren",
"privateWarning": "Dieses Projekt ist privat. Andere sehen beim Öffnen des Links einen 403-Fehler.",
"close": "Schließen"
+ },
+ "canvas": {
+ "status": {
+ "running": "Läuft",
+ "stopped": "Gestoppt"
+ },
+ "activeBoard": "Aktives Board",
+ "noBoard": "Kein Board",
+ "noBoardHint": "Kein Board auf der Leinwand — füge eines über den Hinzufügen-Button hinzu, um Code zu kompilieren und auszuführen",
+ "undo": {
+ "label": "Rückgängig",
+ "title": "Rückgängig: {{description}} (Strg+Z)",
+ "empty": "Nichts rückgängig zu machen"
+ },
+ "redo": {
+ "label": "Wiederherstellen",
+ "title": "Wiederherstellen: {{description}} (Strg+Y)",
+ "empty": "Nichts wiederherzustellen"
+ },
+ "toggleSerialMonitor": "Serial Monitor umschalten",
+ "serial": "Serial",
+ "toggleScope": "Oszilloskop / Logikanalysator umschalten",
+ "scope": "Scope",
+ "zoomIn": "Vergrößern",
+ "zoomOut": "Verkleinern",
+ "resetView": "Ansicht zurücksetzen (klicken zum Zurücksetzen)",
+ "componentCount_one": "{{count}} Bauteil",
+ "componentCount_other": "{{count}} Bauteile",
+ "addComponentTitle": "Bauteil hinzufügen",
+ "add": "Hinzufügen",
+ "dismiss": "Schließen",
+ "removeBoard": "Board entfernen",
+ "wireCount_one": "{{count}} Draht",
+ "wireCount_other": "{{count}} Drähte",
+ "removeConfirm": {
+ "boardFallback": "Board",
+ "title": "{{label}} entfernen?",
+ "body": "Das Board wird aus dem Arbeitsbereich entfernt. Dieser Vorgang kann nicht rückgängig gemacht werden.",
+ "bodyWithWires_one": "Das Board wird aus dem Arbeitsbereich entfernt zusammen mit {{count}} verbundenen Draht. Dieser Vorgang kann nicht rückgängig gemacht werden.",
+ "bodyWithWires_other": "Das Board wird aus dem Arbeitsbereich entfernt zusammen mit {{count}} verbundenen Drähten. Dieser Vorgang kann nicht rückgängig gemacht werden.",
+ "cancel": "Abbrechen",
+ "remove": "Entfernen"
+ }
}
}
}
diff --git a/frontend/src/i18n/locales/en/common.json b/frontend/src/i18n/locales/en/common.json
index a0d451af..bb36719a 100644
--- a/frontend/src/i18n/locales/en/common.json
+++ b/frontend/src/i18n/locales/en/common.json
@@ -179,6 +179,49 @@
"copy": "Copy",
"privateWarning": "This project is private. Others will see a 403 error when opening this link.",
"close": "Close"
+ },
+ "canvas": {
+ "status": {
+ "running": "Running",
+ "stopped": "Stopped"
+ },
+ "activeBoard": "Active board",
+ "noBoard": "No board",
+ "noBoardHint": "No board on canvas — add one with the Add button to compile and run code",
+ "undo": {
+ "label": "Undo",
+ "title": "Undo: {{description}} (Ctrl+Z)",
+ "empty": "Nothing to undo"
+ },
+ "redo": {
+ "label": "Redo",
+ "title": "Redo: {{description}} (Ctrl+Y)",
+ "empty": "Nothing to redo"
+ },
+ "toggleSerialMonitor": "Toggle Serial Monitor",
+ "serial": "Serial",
+ "toggleScope": "Toggle Oscilloscope / Logic Analyzer",
+ "scope": "Scope",
+ "zoomIn": "Zoom in",
+ "zoomOut": "Zoom out",
+ "resetView": "Reset view (click to reset)",
+ "componentCount_one": "{{count}} component",
+ "componentCount_other": "{{count}} components",
+ "addComponentTitle": "Add Component",
+ "add": "Add",
+ "dismiss": "Dismiss",
+ "removeBoard": "Remove board",
+ "wireCount_one": "{{count}} wire",
+ "wireCount_other": "{{count}} wires",
+ "removeConfirm": {
+ "boardFallback": "Board",
+ "title": "Remove {{label}}?",
+ "body": "This will remove the board from the workspace. This action cannot be undone.",
+ "bodyWithWires_one": "This will remove the board from the workspace and {{count}} connected wire. This action cannot be undone.",
+ "bodyWithWires_other": "This will remove the board from the workspace and {{count}} connected wires. This action cannot be undone.",
+ "cancel": "Cancel",
+ "remove": "Remove"
+ }
}
}
}
diff --git a/frontend/src/i18n/locales/es/common.json b/frontend/src/i18n/locales/es/common.json
index 39873647..10d10df5 100644
--- a/frontend/src/i18n/locales/es/common.json
+++ b/frontend/src/i18n/locales/es/common.json
@@ -179,6 +179,49 @@
"copy": "Copiar",
"privateWarning": "Este proyecto es privado. Otros verán un error 403 al abrir este enlace.",
"close": "Cerrar"
+ },
+ "canvas": {
+ "status": {
+ "running": "En ejecución",
+ "stopped": "Detenido"
+ },
+ "activeBoard": "Placa activa",
+ "noBoard": "Sin placa",
+ "noBoardHint": "No hay placa en el lienzo — añade una con el botón Añadir para compilar y ejecutar código",
+ "undo": {
+ "label": "Deshacer",
+ "title": "Deshacer: {{description}} (Ctrl+Z)",
+ "empty": "Nada que deshacer"
+ },
+ "redo": {
+ "label": "Rehacer",
+ "title": "Rehacer: {{description}} (Ctrl+Y)",
+ "empty": "Nada que rehacer"
+ },
+ "toggleSerialMonitor": "Mostrar/ocultar monitor serie",
+ "serial": "Serie",
+ "toggleScope": "Mostrar/ocultar osciloscopio / analizador lógico",
+ "scope": "Osciloscopio",
+ "zoomIn": "Acercar",
+ "zoomOut": "Alejar",
+ "resetView": "Restablecer vista (clic para restablecer)",
+ "componentCount_one": "{{count}} componente",
+ "componentCount_other": "{{count}} componentes",
+ "addComponentTitle": "Añadir componente",
+ "add": "Añadir",
+ "dismiss": "Descartar",
+ "removeBoard": "Quitar placa",
+ "wireCount_one": "{{count}} cable",
+ "wireCount_other": "{{count}} cables",
+ "removeConfirm": {
+ "boardFallback": "Placa",
+ "title": "¿Quitar {{label}}?",
+ "body": "Esto eliminará la placa del espacio de trabajo. Esta acción no se puede deshacer.",
+ "bodyWithWires_one": "Esto eliminará la placa del espacio de trabajo y {{count}} cable conectado. Esta acción no se puede deshacer.",
+ "bodyWithWires_other": "Esto eliminará la placa del espacio de trabajo y {{count}} cables conectados. Esta acción no se puede deshacer.",
+ "cancel": "Cancelar",
+ "remove": "Quitar"
+ }
}
}
}
diff --git a/frontend/src/i18n/locales/fr/common.json b/frontend/src/i18n/locales/fr/common.json
index 1691feee..756d53e3 100644
--- a/frontend/src/i18n/locales/fr/common.json
+++ b/frontend/src/i18n/locales/fr/common.json
@@ -179,6 +179,49 @@
"copy": "Copier",
"privateWarning": "Ce projet est privé. Les autres verront une erreur 403 en ouvrant ce lien.",
"close": "Fermer"
+ },
+ "canvas": {
+ "status": {
+ "running": "En cours",
+ "stopped": "Arrêté"
+ },
+ "activeBoard": "Carte active",
+ "noBoard": "Aucune carte",
+ "noBoardHint": "Aucune carte sur le canevas — ajoutez-en une avec le bouton Ajouter pour compiler et exécuter du code",
+ "undo": {
+ "label": "Annuler",
+ "title": "Annuler : {{description}} (Ctrl+Z)",
+ "empty": "Rien à annuler"
+ },
+ "redo": {
+ "label": "Rétablir",
+ "title": "Rétablir : {{description}} (Ctrl+Y)",
+ "empty": "Rien à rétablir"
+ },
+ "toggleSerialMonitor": "Afficher/masquer le moniteur série",
+ "serial": "Série",
+ "toggleScope": "Afficher/masquer l'oscilloscope / analyseur logique",
+ "scope": "Oscilloscope",
+ "zoomIn": "Zoom avant",
+ "zoomOut": "Zoom arrière",
+ "resetView": "Réinitialiser la vue (cliquez pour réinitialiser)",
+ "componentCount_one": "{{count}} composant",
+ "componentCount_other": "{{count}} composants",
+ "addComponentTitle": "Ajouter un composant",
+ "add": "Ajouter",
+ "dismiss": "Fermer",
+ "removeBoard": "Retirer la carte",
+ "wireCount_one": "{{count}} fil",
+ "wireCount_other": "{{count}} fils",
+ "removeConfirm": {
+ "boardFallback": "Carte",
+ "title": "Retirer {{label}} ?",
+ "body": "La carte sera retirée de l'espace de travail. Cette action est irréversible.",
+ "bodyWithWires_one": "La carte sera retirée de l'espace de travail ainsi que {{count}} fil connecté. Cette action est irréversible.",
+ "bodyWithWires_other": "La carte sera retirée de l'espace de travail ainsi que {{count}} fils connectés. Cette action est irréversible.",
+ "cancel": "Annuler",
+ "remove": "Retirer"
+ }
}
}
}
diff --git a/frontend/src/i18n/locales/it/common.json b/frontend/src/i18n/locales/it/common.json
index 699a8ae7..b5b05cc5 100644
--- a/frontend/src/i18n/locales/it/common.json
+++ b/frontend/src/i18n/locales/it/common.json
@@ -179,6 +179,49 @@
"copy": "Copia",
"privateWarning": "Questo progetto è privato. Gli altri vedranno un errore 403 aprendo il link.",
"close": "Chiudi"
+ },
+ "canvas": {
+ "status": {
+ "running": "In esecuzione",
+ "stopped": "Fermato"
+ },
+ "activeBoard": "Scheda attiva",
+ "noBoard": "Nessuna scheda",
+ "noBoardHint": "Nessuna scheda sul canvas — aggiungine una con il pulsante Aggiungi per compilare ed eseguire codice",
+ "undo": {
+ "label": "Annulla",
+ "title": "Annulla: {{description}} (Ctrl+Z)",
+ "empty": "Niente da annullare"
+ },
+ "redo": {
+ "label": "Ripeti",
+ "title": "Ripeti: {{description}} (Ctrl+Y)",
+ "empty": "Niente da ripetere"
+ },
+ "toggleSerialMonitor": "Mostra/nascondi monitor seriale",
+ "serial": "Seriale",
+ "toggleScope": "Mostra/nascondi oscilloscopio / analizzatore logico",
+ "scope": "Oscilloscopio",
+ "zoomIn": "Zoom avanti",
+ "zoomOut": "Zoom indietro",
+ "resetView": "Ripristina vista (clic per ripristinare)",
+ "componentCount_one": "{{count}} componente",
+ "componentCount_other": "{{count}} componenti",
+ "addComponentTitle": "Aggiungi componente",
+ "add": "Aggiungi",
+ "dismiss": "Ignora",
+ "removeBoard": "Rimuovi scheda",
+ "wireCount_one": "{{count}} filo",
+ "wireCount_other": "{{count}} fili",
+ "removeConfirm": {
+ "boardFallback": "Scheda",
+ "title": "Rimuovere {{label}}?",
+ "body": "La scheda verrà rimossa dal workspace. Questa azione non può essere annullata.",
+ "bodyWithWires_one": "La scheda verrà rimossa dal workspace insieme a {{count}} filo collegato. Questa azione non può essere annullata.",
+ "bodyWithWires_other": "La scheda verrà rimossa dal workspace insieme a {{count}} fili collegati. Questa azione non può essere annullata.",
+ "cancel": "Annulla",
+ "remove": "Rimuovi"
+ }
}
}
}
diff --git a/frontend/src/i18n/locales/ja/common.json b/frontend/src/i18n/locales/ja/common.json
index d8cb4b83..8543d946 100644
--- a/frontend/src/i18n/locales/ja/common.json
+++ b/frontend/src/i18n/locales/ja/common.json
@@ -179,6 +179,46 @@
"copy": "コピー",
"privateWarning": "このプロジェクトは非公開です。他の人がこのリンクを開くと 403 エラーが表示されます。",
"close": "閉じる"
+ },
+ "canvas": {
+ "status": {
+ "running": "実行中",
+ "stopped": "停止中"
+ },
+ "activeBoard": "アクティブなボード",
+ "noBoard": "ボードなし",
+ "noBoardHint": "キャンバスにボードがありません — 「追加」ボタンでボードを追加するとコードのコンパイルと実行ができます",
+ "undo": {
+ "label": "元に戻す",
+ "title": "元に戻す:{{description}} (Ctrl+Z)",
+ "empty": "元に戻す操作はありません"
+ },
+ "redo": {
+ "label": "やり直し",
+ "title": "やり直し:{{description}} (Ctrl+Y)",
+ "empty": "やり直す操作はありません"
+ },
+ "toggleSerialMonitor": "シリアルモニタの切り替え",
+ "serial": "シリアル",
+ "toggleScope": "オシロスコープ / ロジックアナライザの切り替え",
+ "scope": "スコープ",
+ "zoomIn": "ズームイン",
+ "zoomOut": "ズームアウト",
+ "resetView": "ビューをリセット(クリックでリセット)",
+ "componentCount_other": "{{count}} 個のコンポーネント",
+ "addComponentTitle": "コンポーネントを追加",
+ "add": "追加",
+ "dismiss": "閉じる",
+ "removeBoard": "ボードを削除",
+ "wireCount_other": "{{count}} 本の配線",
+ "removeConfirm": {
+ "boardFallback": "ボード",
+ "title": "{{label}} を削除しますか?",
+ "body": "このボードをワークスペースから削除します。この操作は取り消せません。",
+ "bodyWithWires_other": "このボードと接続された {{count}} 本の配線をワークスペースから削除します。この操作は取り消せません。",
+ "cancel": "キャンセル",
+ "remove": "削除"
+ }
}
}
}
diff --git a/frontend/src/i18n/locales/pt-br/common.json b/frontend/src/i18n/locales/pt-br/common.json
index d626536e..a78d25b2 100644
--- a/frontend/src/i18n/locales/pt-br/common.json
+++ b/frontend/src/i18n/locales/pt-br/common.json
@@ -179,6 +179,49 @@
"copy": "Copiar",
"privateWarning": "Este projeto é privado. Outros verão um erro 403 ao abrir este link.",
"close": "Fechar"
+ },
+ "canvas": {
+ "status": {
+ "running": "Em execução",
+ "stopped": "Parado"
+ },
+ "activeBoard": "Placa ativa",
+ "noBoard": "Sem placa",
+ "noBoardHint": "Sem placa na tela — adicione uma com o botão Adicionar para compilar e executar código",
+ "undo": {
+ "label": "Desfazer",
+ "title": "Desfazer: {{description}} (Ctrl+Z)",
+ "empty": "Nada para desfazer"
+ },
+ "redo": {
+ "label": "Refazer",
+ "title": "Refazer: {{description}} (Ctrl+Y)",
+ "empty": "Nada para refazer"
+ },
+ "toggleSerialMonitor": "Alternar monitor serial",
+ "serial": "Serial",
+ "toggleScope": "Alternar osciloscópio / analisador lógico",
+ "scope": "Osciloscópio",
+ "zoomIn": "Aumentar zoom",
+ "zoomOut": "Reduzir zoom",
+ "resetView": "Redefinir visualização (clique para redefinir)",
+ "componentCount_one": "{{count}} componente",
+ "componentCount_other": "{{count}} componentes",
+ "addComponentTitle": "Adicionar componente",
+ "add": "Adicionar",
+ "dismiss": "Dispensar",
+ "removeBoard": "Remover placa",
+ "wireCount_one": "{{count}} fio",
+ "wireCount_other": "{{count}} fios",
+ "removeConfirm": {
+ "boardFallback": "Placa",
+ "title": "Remover {{label}}?",
+ "body": "Isso vai remover a placa do espaço de trabalho. Esta ação não pode ser desfeita.",
+ "bodyWithWires_one": "Isso vai remover a placa do espaço de trabalho e {{count}} fio conectado. Esta ação não pode ser desfeita.",
+ "bodyWithWires_other": "Isso vai remover a placa do espaço de trabalho e {{count}} fios conectados. Esta ação não pode ser desfeita.",
+ "cancel": "Cancelar",
+ "remove": "Remover"
+ }
}
}
}
diff --git a/frontend/src/i18n/locales/ru/common.json b/frontend/src/i18n/locales/ru/common.json
index 6babd585..da86c765 100644
--- a/frontend/src/i18n/locales/ru/common.json
+++ b/frontend/src/i18n/locales/ru/common.json
@@ -179,6 +179,55 @@
"copy": "Копировать",
"privateWarning": "Этот проект приватный. Другие увидят ошибку 403 при открытии ссылки.",
"close": "Закрыть"
+ },
+ "canvas": {
+ "status": {
+ "running": "Работает",
+ "stopped": "Остановлено"
+ },
+ "activeBoard": "Активная плата",
+ "noBoard": "Нет платы",
+ "noBoardHint": "На холсте нет платы — добавьте её кнопкой «Добавить», чтобы скомпилировать и запустить код",
+ "undo": {
+ "label": "Отменить",
+ "title": "Отменить: {{description}} (Ctrl+Z)",
+ "empty": "Нечего отменять"
+ },
+ "redo": {
+ "label": "Повторить",
+ "title": "Повторить: {{description}} (Ctrl+Y)",
+ "empty": "Нечего повторять"
+ },
+ "toggleSerialMonitor": "Показать/скрыть Serial Monitor",
+ "serial": "Serial",
+ "toggleScope": "Показать/скрыть осциллограф / логический анализатор",
+ "scope": "Осциллограф",
+ "zoomIn": "Приблизить",
+ "zoomOut": "Отдалить",
+ "resetView": "Сбросить вид (нажмите для сброса)",
+ "componentCount_one": "{{count}} компонент",
+ "componentCount_few": "{{count}} компонента",
+ "componentCount_many": "{{count}} компонентов",
+ "componentCount_other": "{{count}} компонентов",
+ "addComponentTitle": "Добавить компонент",
+ "add": "Добавить",
+ "dismiss": "Закрыть",
+ "removeBoard": "Удалить плату",
+ "wireCount_one": "{{count}} провод",
+ "wireCount_few": "{{count}} провода",
+ "wireCount_many": "{{count}} проводов",
+ "wireCount_other": "{{count}} проводов",
+ "removeConfirm": {
+ "boardFallback": "Плата",
+ "title": "Удалить {{label}}?",
+ "body": "Плата будет удалена из рабочей области. Это действие нельзя отменить.",
+ "bodyWithWires_one": "Плата будет удалена из рабочей области вместе с {{count}} подключённым проводом. Это действие нельзя отменить.",
+ "bodyWithWires_few": "Плата будет удалена из рабочей области вместе с {{count}} подключёнными проводами. Это действие нельзя отменить.",
+ "bodyWithWires_many": "Плата будет удалена из рабочей области вместе с {{count}} подключёнными проводами. Это действие нельзя отменить.",
+ "bodyWithWires_other": "Плата будет удалена из рабочей области вместе с {{count}} подключёнными проводами. Это действие нельзя отменить.",
+ "cancel": "Отмена",
+ "remove": "Удалить"
+ }
}
}
}
diff --git a/frontend/src/i18n/locales/zh-cn/common.json b/frontend/src/i18n/locales/zh-cn/common.json
index 4176f37a..661df906 100644
--- a/frontend/src/i18n/locales/zh-cn/common.json
+++ b/frontend/src/i18n/locales/zh-cn/common.json
@@ -179,6 +179,46 @@
"copy": "复制",
"privateWarning": "此项目为私有。他人打开此链接将看到 403 错误。",
"close": "关闭"
+ },
+ "canvas": {
+ "status": {
+ "running": "运行中",
+ "stopped": "已停止"
+ },
+ "activeBoard": "当前开发板",
+ "noBoard": "无开发板",
+ "noBoardHint": "画布上没有开发板 —— 点击「添加」按钮以编译并运行代码",
+ "undo": {
+ "label": "撤销",
+ "title": "撤销:{{description}} (Ctrl+Z)",
+ "empty": "无可撤销"
+ },
+ "redo": {
+ "label": "重做",
+ "title": "重做:{{description}} (Ctrl+Y)",
+ "empty": "无可重做"
+ },
+ "toggleSerialMonitor": "切换串口监视器",
+ "serial": "串口",
+ "toggleScope": "切换示波器 / 逻辑分析仪",
+ "scope": "示波器",
+ "zoomIn": "放大",
+ "zoomOut": "缩小",
+ "resetView": "重置视图(点击重置)",
+ "componentCount_other": "{{count}} 个元件",
+ "addComponentTitle": "添加元件",
+ "add": "添加",
+ "dismiss": "关闭",
+ "removeBoard": "移除开发板",
+ "wireCount_other": "{{count}} 根连线",
+ "removeConfirm": {
+ "boardFallback": "开发板",
+ "title": "移除 {{label}}?",
+ "body": "这将从工作区中移除该开发板。此操作无法撤销。",
+ "bodyWithWires_other": "这将从工作区中移除该开发板以及 {{count}} 根连接的线缆。此操作无法撤销。",
+ "cancel": "取消",
+ "remove": "移除"
+ }
}
}
}