diff --git a/packages/fossflow-app/src/App.tsx b/packages/fossflow-app/src/App.tsx index 58d6b008..4a328fd0 100644 --- a/packages/fossflow-app/src/App.tsx +++ b/packages/fossflow-app/src/App.tsx @@ -103,7 +103,7 @@ function EditorPage() { // Default state if no saved data return { - title: 'Untitled Diagram', + title: '', icons: coreIcons, colors: defaultColors, items: [], @@ -387,7 +387,7 @@ function EditorPage() { if (window.confirm(message)) { const emptyDiagram: DiagramData = { - title: 'Untitled Diagram', + title: '', icons: iconPackManager.loadedIcons, // Use currently loaded icons colors: defaultColors, items: [], diff --git a/packages/fossflow-app/src/i18n/de-DE.json b/packages/fossflow-app/src/i18n/de-DE.json new file mode 100644 index 00000000..da4526cc --- /dev/null +++ b/packages/fossflow-app/src/i18n/de-DE.json @@ -0,0 +1,62 @@ +{ + "nav": { + "newDiagram": "Neues Diagramm", + "saveSessionOnly": "Speichern (Nur Sitzung)", + "loadSessionOnly": "Laden (Nur Sitzung)", + "importFile": "Datei importieren", + "exportFile": "Datei exportieren", + "quickSaveSession": "Schnellspeichern (Sitzung)", + "serverStorage": "Serverspeicher" + }, + "status": { + "current": "Aktuell", + "untitled": "Unbenanntes Diagramm", + "modified": "Geändert", + "sessionStorageNote": "Nur Sitzungsspeicher – exportieren, um dauerhaft zu speichern" + }, + "dialog": { + "save": { + "title": "Diagramm speichern (Nur aktuelle Sitzung)", + "warningTitle": "Wichtig", + "warningMessage": "Diese Speicherung ist temporär und geht verloren, wenn du den Browser schließt.", + "warningExport": "Verwende Datei exportieren, um deine Arbeit dauerhaft zu speichern.", + "placeholder": "Diagrammnamen eingeben", + "btnSave": "Speichern", + "btnCancel": "Abbrechen" + }, + "load": { + "title": "Diagramm laden (Nur aktuelle Sitzung)", + "noteTitle": "Hinweis", + "noteMessage": "Diese Speicherungen sind temporär. Exportiere deine Diagramme, um sie dauerhaft zu behalten.", + "noSavedDiagrams": "Keine gespeicherten Diagramme in dieser Sitzung gefunden", + "updated": "Aktualisiert", + "btnLoad": "Laden", + "btnDelete": "Löschen", + "btnClose": "Schließen" + }, + "export": { + "title": "Diagramm exportieren", + "recommendedTitle": "Empfohlen", + "recommendedMessage": "Dies ist die beste Methode, um deine Arbeit dauerhaft zu speichern.", + "noteMessage": "Exportierte JSON-Dateien können später importiert oder mit anderen geteilt werden.", + "btnDownload": "JSON herunterladen", + "btnCancel": "Abbrechen" + }, + "readOnly": { + "mode": "Nur-Lesen-Modus", + "failed": "Diagramm konnte nicht geladen werden" + } + }, + "alert": { + "enterDiagramName": "Bitte einen Diagrammnamen eingeben", + "diagramExists": "Ein Diagramm mit dem Namen \"{{name}}\" existiert bereits in dieser Sitzung. Es wird überschrieben. Möchtest du wirklich fortfahren?", + "unsavedChanges": "Du hast ungespeicherte Änderungen. Trotzdem laden?", + "createNewDiagram": "Ein neues Diagramm erstellen?", + "unsavedChangesExport": "Du hast ungespeicherte Änderungen. Exportiere dein Diagramm zuerst, um es zu speichern. Trotzdem fortfahren?", + "confirmDelete": "Möchtest du dieses Diagramm wirklich löschen?", + "storageFull": "Speicher voll! Speicherverwaltung wird geöffnet...", + "autoSaveFailed": "Speicher voll! Bitte verwende die Speicherverwaltung, um Platz freizugeben.", + "beforeUnload": "Du hast ungespeicherte Änderungen. Möchtest du die Seite wirklich verlassen?", + "quotaExceeded": "Speicherkontingent überschritten. Bitte exportiere wichtige Diagramme und gib Speicherplatz frei." + } +} diff --git a/packages/fossflow-lib/src/components/ContextMenu/ContextMenuManager.tsx b/packages/fossflow-lib/src/components/ContextMenu/ContextMenuManager.tsx index 029fbb30..f0fb3d55 100644 --- a/packages/fossflow-lib/src/components/ContextMenu/ContextMenuManager.tsx +++ b/packages/fossflow-lib/src/components/ContextMenu/ContextMenuManager.tsx @@ -4,6 +4,7 @@ import { generateId, findNearestUnoccupiedTile } from 'src/utils'; import { useScene } from 'src/hooks/useScene'; import { useModelStore } from 'src/stores/modelStore'; import { VIEW_ITEM_DEFAULTS } from 'src/config'; +import { useTranslation } from 'src/stores/localeStore'; import { ContextMenu } from './ContextMenu'; interface Props { @@ -23,6 +24,8 @@ export const ContextMenuManager = ({ anchorEl }: Props) => { return state.actions; }); + const { t } = useTranslation('addMenu'); + const onClose = useCallback(() => { uiStateActions.setContextMenu(null); }, [uiStateActions]); @@ -33,7 +36,7 @@ export const ContextMenuManager = ({ anchorEl }: Props) => { onClose={onClose} menuItems={[ { - label: 'Add Node', + label: t('addNode'), onClick: () => { if (!contextMenu) return; if (model.icons.length > 0) { @@ -60,7 +63,7 @@ export const ContextMenuManager = ({ anchorEl }: Props) => { } }, { - label: 'Add Rectangle', + label: t('addRectangle'), onClick: () => { if (!contextMenu) return; if (model.colors.length > 0) { diff --git a/packages/fossflow-lib/src/components/LabelSettings/LabelSettings.tsx b/packages/fossflow-lib/src/components/LabelSettings/LabelSettings.tsx index 8884b661..19213d70 100644 --- a/packages/fossflow-lib/src/components/LabelSettings/LabelSettings.tsx +++ b/packages/fossflow-lib/src/components/LabelSettings/LabelSettings.tsx @@ -5,10 +5,12 @@ import { Slider } from '@mui/material'; import { useUiStateStore } from 'src/stores/uiStateStore'; +import { useTranslation } from 'src/stores/localeStore'; export const LabelSettings = () => { const labelSettings = useUiStateStore((state) => state.labelSettings); const setLabelSettings = useUiStateStore((state) => state.actions.setLabelSettings); + const { t } = useTranslation('labelSettings'); const handlePaddingChange = (_event: Event, value: number | number[]) => { setLabelSettings({ @@ -20,15 +22,15 @@ export const LabelSettings = () => { return ( - Configure label display settings + {t('description')} - Expand Button Padding + {t('expandButtonPadding')} - Bottom padding when expand button is visible (prevents text overlap) + {t('expandButtonPaddingDesc')} { sx={{ mt: 2 }} /> - Current: {labelSettings.expandButtonPadding} theme units + {t('current').replace('{{value}}', String(labelSettings.expandButtonPadding))} diff --git a/packages/fossflow-lib/src/components/SettingsDialog/SettingsDialog.tsx b/packages/fossflow-lib/src/components/SettingsDialog/SettingsDialog.tsx index 567510af..0dc7961f 100644 --- a/packages/fossflow-lib/src/components/SettingsDialog/SettingsDialog.tsx +++ b/packages/fossflow-lib/src/components/SettingsDialog/SettingsDialog.tsx @@ -61,7 +61,7 @@ export const SettingsDialog = ({ iconPackManager }: SettingsDialogProps) => { fullWidth > - Settings + {t('settingsDialog.title')} { - - + + {iconPackManager && } @@ -103,7 +103,7 @@ export const SettingsDialog = ({ iconPackManager }: SettingsDialogProps) => { - + ); diff --git a/packages/fossflow-lib/src/components/UiOverlay/UiOverlay.tsx b/packages/fossflow-lib/src/components/UiOverlay/UiOverlay.tsx index 81a221cf..350d7b14 100644 --- a/packages/fossflow-lib/src/components/UiOverlay/UiOverlay.tsx +++ b/packages/fossflow-lib/src/components/UiOverlay/UiOverlay.tsx @@ -14,7 +14,6 @@ import { DebugUtils } from 'src/components/DebugUtils/DebugUtils'; import { useResizeObserver } from 'src/hooks/useResizeObserver'; import { ContextMenuManager } from 'src/components/ContextMenu/ContextMenuManager'; import { useScene } from 'src/hooks/useScene'; -import { useModelStore } from 'src/stores/modelStore'; import { ExportImageDialog } from '../ExportImageDialog/ExportImageDialog'; import { HelpDialog } from '../HelpDialog/HelpDialog'; import { SettingsDialog } from '../SettingsDialog/SettingsDialog'; @@ -85,7 +84,7 @@ export const UiOverlay = () => { const itemControls = useUiStateStore((state) => { return state.itemControls; }); - const { currentView } = useScene(); + const { currentView, title } = useScene(); const editorMode = useUiStateStore((state) => { return state.editorMode; }); @@ -95,9 +94,6 @@ export const UiOverlay = () => { const rendererEl = useUiStateStore((state) => { return state.rendererEl; }); - const title = useModelStore((state) => { - return state.title; - }); const iconPackManager = useUiStateStore((state) => { return state.iconPackManager; }); diff --git a/packages/fossflow-lib/src/hooks/useScene.ts b/packages/fossflow-lib/src/hooks/useScene.ts index 49f28873..7688a2c2 100644 --- a/packages/fossflow-lib/src/hooks/useScene.ts +++ b/packages/fossflow-lib/src/hooks/useScene.ts @@ -16,8 +16,11 @@ import { getItemByIdOrThrow } from 'src/utils'; import { CONNECTOR_DEFAULTS, RECTANGLE_DEFAULTS, - TEXTBOX_DEFAULTS + TEXTBOX_DEFAULTS, + VIEW_DEFAULTS, + INITIAL_DATA } from 'src/config'; +import { useTranslation } from 'src/stores/localeStore'; export const useScene = () => { const { views, colors, icons, items, version, title, description } = @@ -32,7 +35,7 @@ export const useScene = () => { description: state.description }), shallow - ); + ); const { connectors: sceneConnectors, textBoxes: sceneTextBoxes } = useSceneStore( (state) => ({ @@ -42,6 +45,7 @@ export const useScene = () => { shallow ); const currentViewId = useUiStateStore((state) => state.view); + const { t } = useTranslation('diagramViewStatus'); const transactionInProgress = useRef(false); const modelStoreApi = useModelStoreApi(); @@ -422,13 +426,26 @@ export const useScene = () => { [createModelItem, createViewItem, saveToHistoryBeforeChange] ); + const translatedTitle = useMemo(() => { + if (!title || title === INITIAL_DATA.title) return t('untitledDiagram'); + return title; + }, [title, t]); + + const translatedCurrentView = useMemo(() => { + return { + ...currentView, + name: currentView.name === VIEW_DEFAULTS.name ? t('untitledView') : currentView.name + }; + }, [currentView, t]); + return { + title: translatedTitle, items: itemsList, connectors: connectorsList, colors: colorsList, rectangles: rectanglesList, textBoxes: textBoxesList, - currentView, + currentView: translatedCurrentView, createModelItem, updateModelItem, deleteModelItem, diff --git a/packages/fossflow-lib/src/i18n/bn-BD.ts b/packages/fossflow-lib/src/i18n/bn-BD.ts index 2633c329..4b723272 100644 --- a/packages/fossflow-lib/src/i18n/bn-BD.ts +++ b/packages/fossflow-lib/src/i18n/bn-BD.ts @@ -187,6 +187,26 @@ const locale: LocaleProps = { configPath2: "কনফিগারেশন অ্যাক্সেস করতে উপরের বাম দিকে।", canDisable: "আপনি চাইলে এই আচরণ নিষ্ক্রিয় করতে পারেন।", signature: "-Stan" + }, + settingsDialog: { + title: "সেটিংস", + close: "বন্ধ করুন", + tabZoom: "জুম", + tabLabels: "লেবেল" + }, + labelSettings: { + description: "লেবেল প্রদর্শন সেটিংস কনফিগার করুন", + expandButtonPadding: "প্রসারিত বোতামের প্যাডিং", + expandButtonPaddingDesc: "প্রসারিত বোতাম দৃশ্যমান হলে নিচের প্যাডিং (টেক্সট ওভারল্যাপ রোধ করে)", + current: "বর্তমান: {{value}} থিম ইউনিট" + }, + diagramViewStatus: { + untitledDiagram: "শিরোনামহীন ডায়াগ্রাম", + untitledView: "শিরোনামহীন দৃশ্য" + }, + addMenu: { + addNode: "নোড যোগ করুন", + addRectangle: "আয়তক্ষেত্র যোগ করুন" } }; diff --git a/packages/fossflow-lib/src/i18n/de-DE.ts b/packages/fossflow-lib/src/i18n/de-DE.ts new file mode 100644 index 00000000..c400c424 --- /dev/null +++ b/packages/fossflow-lib/src/i18n/de-DE.ts @@ -0,0 +1,213 @@ +import { LocaleProps } from '../types/isoflowProps'; + +const locale: LocaleProps = { + common: { + exampleText: "Dies ist ein Beispiel text" + }, + mainMenu: { + undo: "Rückgängig", + redo: "Wiederholen", + open: "Öffnen", + exportJson: "Als JSON exportieren", + exportCompactJson: "Als kompakte JSON exportieren", + exportImage: "Als Bild exportieren", + clearCanvas: "Canvas zurücksetzen", + settings: "Einstellungen", + gitHub: "GitHub" + }, + helpDialog: { + title: "Tastenkürzel & Hilfe", + close: "Schließen", + keyboardShortcuts: "Tastenkürzel", + mouseInteractions: "Mausinteraktionen", + action: "Aktion", + shortcut: "Kürzel", + method: "Methode", + description: "Beschreibung", + note: "Hinweis:", + noteContent: "Tastenkürzel sind deaktiviert, wenn in Eingabefeldern, Textbereichen oder inhaltbearbeitbaren Elementen getippt wird, um Konflikte zu vermeiden.", + // Keyboard shortcuts + undoAction: "Rückgängig", + undoDescription: "Die letzte Aktion rückgängig machen", + redoAction: "Wiederholen", + redoDescription: "Die zuletzt rückgängig gemachte Aktion wiederholen", + redoAltAction: "Wiederholen (Alternativ)", + redoAltDescription: "Alternativer Tastenkürzel zum Wiederholen", + helpAction: "Hilfe", + helpDescription: "Hilfedialog mit Tastenkürzeln öffnen", + zoomInAction: "Vergrößern", + zoomInShortcut: "Mausrad nach oben", + zoomInDescription: "Canvas vergrößern", + zoomOutAction: "Verkleinern", + zoomOutShortcut: "Mausrad nach unten", + zoomOutDescription: "Canvas verkleinern", + panCanvasAction: "Canvas verschieben", + panCanvasShortcut: "Linksklick + Ziehen", + panCanvasDescription: "Canvas im Verschiebe-Modus bewegen", + contextMenuAction: "Kontextmenü", + contextMenuShortcut: "Rechtsklick", + contextMenuDescription: "Kontextmenü für Elemente oder leere Fläche öffnen", + // Mouse interactions + selectToolAction: "Auswahlwerkzeug", + selectToolShortcut: "Auswahl-Schaltfläche klicken", + selectToolDescription: "In den Auswahlmodus wechseln", + panToolAction: "Verschiebewerkzeug", + panToolShortcut: "Verschieben-Schaltfläche klicken", + panToolDescription: "In den Verschiebe-Modus zum Bewegen des Canvas wechseln", + addItemAction: "Element hinzufügen", + addItemShortcut: "Element-hinzufügen-Schaltfläche klicken", + addItemDescription: "Icon-Auswahl zum Hinzufügen neuer Elemente öffnen", + drawRectangleAction: "Rechteck zeichnen", + drawRectangleShortcut: "Rechteck-Schaltfläche klicken", + drawRectangleDescription: "In den Rechteck-Zeichnungsmodus wechseln", + createConnectorAction: "Verbindung erstellen", + createConnectorShortcut: "Verbindungs-Schaltfläche klicken", + createConnectorDescription: "In den Verbindungsmodus wechseln", + addTextAction: "Text hinzufügen", + addTextShortcut: "Text-Schaltfläche klicken", + addTextDescription: "Ein neues Textfeld erstellen" + }, + connectorHintTooltip: { + tipCreatingConnectors: "Tipp: Verbindungen erstellen", + tipConnectorTools: "Tipp: Verbindungswerkzeuge", + clickInstructionStart: "Klicke", + clickInstructionMiddle: "auf den ersten Knoten oder Punkt, dann", + clickInstructionEnd: "auf den zweiten Knoten oder Punkt, um eine Verbindung herzustellen.", + nowClickTarget: "Klicke nun auf das Ziel, um die Verbindung zu vervollständigen.", + dragStart: "Ziehe", + dragEnd: "vom ersten Knoten zum zweiten Knoten, um eine Verbindung herzustellen.", + rerouteStart: "Um eine Verbindung umzuleiten,", + rerouteMiddle: "linksklicke", + rerouteEnd: "auf einen beliebigen Punkt entlang der Verbindungslinie und ziehe, um Ankerpunkte zu erstellen oder zu verschieben." + }, + lassoHintTooltip: { + tipLasso: "Tipp: Lasso-Auswahl", + tipFreehandLasso: "Tipp: Freihand-Lasso-Auswahl", + lassoDragStart: "Klicken und ziehen", + lassoDragEnd: "um ein rechteckiges Auswahlfeld um die gewünschten Elemente zu zeichnen.", + freehandDragStart: "Klicken und ziehen", + freehandDragMiddle: "um eine", + freehandDragEnd: "Freihandform", + freehandComplete: "um Elemente zu zeichnen. Loslassen, um alle Elemente innerhalb der Form auszuwählen.", + moveStart: "Nach der Auswahl,", + moveMiddle: "in die Auswahl klicken", + moveEnd: "und ziehen, um alle ausgewählten Elemente gemeinsam zu verschieben." + }, + importHintTooltip: { + title: "Diagramme importieren", + instructionStart: "Um Diagramme zu importieren, klicke auf die", + menuButton: "Menü-Schaltfläche", + instructionMiddle: "(☰) in der oberen linken Ecke, dann wähle", + openButton: "\"Öffnen\"", + instructionEnd: "um deine Diagrammdateien zu laden." + }, + connectorRerouteTooltip: { + title: "Tipp: Verbindungen umleiten", + instructionStart: "Sobald deine Verbindungen platziert sind, kannst du sie nach Belieben umleiten.", + instructionSelect: "Wähle die Verbindung aus", + instructionMiddle: "zuerst, dann", + instructionClick: "auf den Verbindungspfad klicken", + instructionAnd: "und", + instructionDrag: "ziehen", + instructionEnd: "um ihn zu ändern!" + }, + connectorEmptySpaceTooltip: { + message: "Um diese Verbindung mit einem Knoten zu verbinden,", + instruction: "linksklicke auf das Ende der Verbindung und ziehe es zum gewünschten Knoten." + }, + settings: { + zoom: { + description: "Zoom-Verhalten bei Verwendung des Mausrads konfigurieren.", + zoomToCursor: "Zoom zum Cursor", + zoomToCursorDesc: "Wenn aktiviert, wird beim Zoomen auf die Mauszeiger-Position zentriert. Wenn deaktiviert, wird auf den Canvas zentriert." + }, + hotkeys: { + title: "Tastenkürzel-Einstellungen", + profile: "Tastenkürzel-Profil", + profileQwerty: "QWERTY (Q, W, E, R, T, Y)", + profileSmnrct: "SMNRCT (S, M, N, R, C, T)", + profileNone: "Keine Tastenkürzel", + tool: "Werkzeug", + hotkey: "Tastenkürzel", + toolSelect: "Auswählen", + toolPan: "Verschieben", + toolAddItem: "Element hinzufügen", + toolRectangle: "Rechteck", + toolConnector: "Verbindung", + toolText: "Text", + note: "Hinweis: Tastenkürzel funktionieren, wenn nicht in Textfeldern getippt wird" + }, + pan: { + title: "Verschiebe-Einstellungen", + mousePanOptions: "Maus-Verschiebe-Optionen", + emptyAreaClickPan: "Auf leere Fläche klicken und ziehen", + middleClickPan: "Mittelklick und ziehen", + rightClickPan: "Rechtsklick und ziehen", + ctrlClickPan: "Strg + Klick und ziehen", + altClickPan: "Alt + Klick und ziehen", + keyboardPanOptions: "Tastatur-Verschiebe-Optionen", + arrowKeys: "Pfeiltasten", + wasdKeys: "WASD-Tasten", + ijklKeys: "IJKL-Tasten", + keyboardPanSpeed: "Tastatur-Verschiebegeschwindigkeit", + note: "Hinweis: Verschiebe-Optionen funktionieren zusätzlich zum dedizierten Verschiebewerkzeug" + }, + connector: { + title: "Verbindungs-Einstellungen", + connectionMode: "Verbindungserstellungsmodus", + clickMode: "Klick-Modus (Empfohlen)", + clickModeDesc: "Ersten Knoten klicken, dann zweiten Knoten klicken, um eine Verbindung herzustellen", + dragMode: "Zieh-Modus", + dragModeDesc: "Vom ersten Knoten zum zweiten Knoten klicken und ziehen", + note: "Hinweis: Diese Einstellung kann jederzeit geändert werden. Der ausgewählte Modus wird verwendet, wenn das Verbindungswerkzeug aktiv ist." + }, + iconPacks: { + title: "Icon-Paket-Verwaltung", + lazyLoading: "Lazy Loading aktivieren", + lazyLoadingDesc: "Icon-Pakete bei Bedarf laden für schnelleren Start", + availablePacks: "Verfügbare Icon-Pakete", + coreIsoflow: "Core Isoflow (immer geladen)", + alwaysEnabled: "Immer aktiviert", + awsPack: "AWS-Icons", + gcpPack: "Google Cloud Icons", + azurePack: "Azure-Icons", + kubernetesPack: "Kubernetes-Icons", + loading: "Wird geladen...", + loaded: "Geladen", + notLoaded: "Nicht geladen", + iconCount: "{count} Icons", + lazyLoadingDisabledNote: "Lazy Loading ist deaktiviert. Alle Icon-Pakete werden beim Start geladen.", + note: "Icon-Pakete können je nach Bedarf aktiviert oder deaktiviert werden. Deaktivierte Pakete reduzieren den Speicherverbrauch und verbessern die Leistung." + } + }, + lazyLoadingWelcome: { + title: "Neue Funktion: Lazy Loading!", + message: "Hey! Aufgrund der großen Nachfrage haben wir Lazy Loading für Icons implementiert. Zusätzliche Icon-Pakete lassen sich nun im Abschnitt 'Konfiguration' aktivieren.", + configPath: "Klicke auf das Hamburger Menü", + configPath2: "oben links, um auf die Konfiguration zuzugreifen.", + canDisable: "Wenn du möchtest, kannst du dieses Verhalten deaktivieren.", + signature: "-Stan" + }, + settingsDialog: { + title: "Einstellungen", + close: "Schließen", + tabZoom: "Zoom", + tabLabels: "Beschriftungen" + }, + labelSettings: { + description: "Beschriftungsanzeige-Einstellungen konfigurieren", + expandButtonPadding: "Erweiter-Schaltflächen-Abstand", + expandButtonPaddingDesc: "Untenabstand wenn Erweiter-Schaltfläche sichtbar ist (verhindert Textüberlappung)", + current: "Aktuell: {{value}} Theme-Einheiten" + }, + diagramViewStatus: { + untitledDiagram: "Unbenanntes Diagramm", + untitledView: "Unbenannte Ansicht" + }, + addMenu: { + addNode: "Knoten hinzufügen", + addRectangle: "Rechteck hinzufügen" + } +}; + +export default locale; diff --git a/packages/fossflow-lib/src/i18n/en-US.ts b/packages/fossflow-lib/src/i18n/en-US.ts index b9b76e9c..91ad11b9 100644 --- a/packages/fossflow-lib/src/i18n/en-US.ts +++ b/packages/fossflow-lib/src/i18n/en-US.ts @@ -187,6 +187,26 @@ const locale: LocaleProps = { configPath2: "in the top left to access Configuration.", canDisable: "You can disable this behaviour if you wish.", signature: "-Stan" + }, + settingsDialog: { + title: "Settings", + close: "Close", + tabZoom: "Zoom", + tabLabels: "Labels" + }, + labelSettings: { + description: "Configure label display settings", + expandButtonPadding: "Expand Button Padding", + expandButtonPaddingDesc: "Bottom padding when expand button is visible (prevents text overlap)", + current: "Current: {{value}} theme units" + }, + diagramViewStatus: { + untitledDiagram: "Untitled Diagram", + untitledView: "Untitled view" + }, + addMenu: { + addNode: "Add Node", + addRectangle: "Add Rectangle" } }; diff --git a/packages/fossflow-lib/src/i18n/es-ES.ts b/packages/fossflow-lib/src/i18n/es-ES.ts index 3e376baf..7e29d809 100644 --- a/packages/fossflow-lib/src/i18n/es-ES.ts +++ b/packages/fossflow-lib/src/i18n/es-ES.ts @@ -187,6 +187,26 @@ const locale: LocaleProps = { configPath2: "en la esquina superior izquierda para acceder a la Configuración.", canDisable: "Puedes desactivar este comportamiento si lo deseas.", signature: "-Stan" + }, + settingsDialog: { + title: "Ajustes", + close: "Cerrar", + tabZoom: "Zoom", + tabLabels: "Etiquetas" + }, + labelSettings: { + description: "Configurar ajustes de visualización de etiquetas", + expandButtonPadding: "Relleno del botón expandir", + expandButtonPaddingDesc: "Relleno inferior cuando el botón expandir es visible (evita la superposición de texto)", + current: "Actual: {{value}} unidades de tema" + }, + diagramViewStatus: { + untitledDiagram: "Diagrama sin título", + untitledView: "Vista sin título" + }, + addMenu: { + addNode: "Agregar nodo", + addRectangle: "Agregar rectángulo" } }; diff --git a/packages/fossflow-lib/src/i18n/fr-FR.ts b/packages/fossflow-lib/src/i18n/fr-FR.ts index ea96e22b..72861d8c 100644 --- a/packages/fossflow-lib/src/i18n/fr-FR.ts +++ b/packages/fossflow-lib/src/i18n/fr-FR.ts @@ -187,6 +187,26 @@ const locale: LocaleProps = { configPath2: "en haut à gauche pour accéder à la Configuration.", canDisable: "Vous pouvez désactiver ce comportement si vous le souhaitez.", signature: "-Stan" + }, + settingsDialog: { + title: "Paramètres", + close: "Fermer", + tabZoom: "Zoom", + tabLabels: "Étiquettes" + }, + labelSettings: { + description: "Configurer les paramètres d'affichage des étiquettes", + expandButtonPadding: "Rembourrage du bouton développer", + expandButtonPaddingDesc: "Rembourrage inférieur lorsque le bouton développer est visible (évite le chevauchement du texte)", + current: "Actuel : {{value}} unités de thème" + }, + diagramViewStatus: { + untitledDiagram: "Diagramme sans titre", + untitledView: "Vue sans titre" + }, + addMenu: { + addNode: "Ajouter un nœud", + addRectangle: "Ajouter un rectangle" } }; diff --git a/packages/fossflow-lib/src/i18n/hi-IN.ts b/packages/fossflow-lib/src/i18n/hi-IN.ts index 87cad003..35192cdb 100644 --- a/packages/fossflow-lib/src/i18n/hi-IN.ts +++ b/packages/fossflow-lib/src/i18n/hi-IN.ts @@ -187,6 +187,26 @@ const locale: LocaleProps = { configPath2: "कॉन्फ़िगरेशन तक पहुंचने के लिए ऊपरी बाएं में।", canDisable: "यदि आप चाहें तो आप इस व्यवहार को अक्षम कर सकते हैं।", signature: "-Stan" + }, + settingsDialog: { + title: "सेटिंग्स", + close: "बंद करें", + tabZoom: "ज़ूम", + tabLabels: "लेबल" + }, + labelSettings: { + description: "लेबल प्रदर्शन सेटिंग्स कॉन्फ़िगर करें", + expandButtonPadding: "विस्तार बटन पैडिंग", + expandButtonPaddingDesc: "विस्तार बटन दृश्यमान होने पर नीचे की पैडिंग (टेक्स्ट ओवरलैप रोकती है)", + current: "वर्तमान: {{value}} थीम इकाइयाँ" + }, + diagramViewStatus: { + untitledDiagram: "शीर्षकहीन आरेख", + untitledView: "शीर्षकहीन दृश्य" + }, + addMenu: { + addNode: "नोड जोड़ें", + addRectangle: "आयत जोड़ें" } }; diff --git a/packages/fossflow-lib/src/i18n/id-ID.ts b/packages/fossflow-lib/src/i18n/id-ID.ts index 2cef3dc5..557474cd 100644 --- a/packages/fossflow-lib/src/i18n/id-ID.ts +++ b/packages/fossflow-lib/src/i18n/id-ID.ts @@ -187,6 +187,26 @@ const locale: LocaleProps = { configPath2: "di kiri atas untuk mengakses Konfigurasi.", canDisable: "Anda dapat menonaktifkan perilaku ini jika diinginkan.", signature: "-Stan" + }, + settingsDialog: { + title: "Pengaturan", + close: "Tutup", + tabZoom: "Zoom", + tabLabels: "Label" + }, + labelSettings: { + description: "Konfigurasi pengaturan tampilan label", + expandButtonPadding: "Padding tombol perluas", + expandButtonPaddingDesc: "Padding bawah saat tombol perluas terlihat (mencegah tumpang tindih teks)", + current: "Saat ini: {{value}} unit tema" + }, + diagramViewStatus: { + untitledDiagram: "Diagram tanpa judul", + untitledView: "Tampilan tanpa judul" + }, + addMenu: { + addNode: "Tambah Node", + addRectangle: "Tambah Persegi Panjang" } }; diff --git a/packages/fossflow-lib/src/i18n/index.ts b/packages/fossflow-lib/src/i18n/index.ts index fabcad8a..ebeebf33 100644 --- a/packages/fossflow-lib/src/i18n/index.ts +++ b/packages/fossflow-lib/src/i18n/index.ts @@ -10,6 +10,7 @@ import plPL from './pl-PL'; import idID from './id-ID'; import itIT from './it-IT'; import trTR from './tr-TR'; +import deDE from './de-DE'; const locales = { 'en-US': enUS, @@ -23,7 +24,8 @@ const locales = { 'pl-PL': plPL, 'id-ID': idID, 'it-IT': itIT, - 'tr-TR': trTR + 'tr-TR': trTR, + 'de-DE': deDE }; export default locales; diff --git a/packages/fossflow-lib/src/i18n/it-IT.ts b/packages/fossflow-lib/src/i18n/it-IT.ts index 6c797d75..256835a6 100644 --- a/packages/fossflow-lib/src/i18n/it-IT.ts +++ b/packages/fossflow-lib/src/i18n/it-IT.ts @@ -187,6 +187,26 @@ const locale: LocaleProps = { configPath2: "in alto a sinistra per accedere alla Configurazione.", canDisable: "Puoi disattivare questo comportamento se lo desideri.", signature: "-Stan" + }, + settingsDialog: { + title: "Impostazioni", + close: "Chiudi", + tabZoom: "Zoom", + tabLabels: "Etichette" + }, + labelSettings: { + description: "Configura le impostazioni di visualizzazione delle etichette", + expandButtonPadding: "Spaziatura del pulsante espandi", + expandButtonPaddingDesc: "Spaziatura inferiore quando il pulsante espandi è visibile (evita la sovrapposizione del testo)", + current: "Attuale: {{value}} unità tema" + }, + diagramViewStatus: { + untitledDiagram: "Diagramma senza titolo", + untitledView: "Vista senza titolo" + }, + addMenu: { + addNode: "Aggiungi nodo", + addRectangle: "Aggiungi rettangolo" } }; diff --git a/packages/fossflow-lib/src/i18n/pl-PL.ts b/packages/fossflow-lib/src/i18n/pl-PL.ts index 528c1b26..670ecad9 100644 --- a/packages/fossflow-lib/src/i18n/pl-PL.ts +++ b/packages/fossflow-lib/src/i18n/pl-PL.ts @@ -187,6 +187,26 @@ const locale: LocaleProps = { configPath2: "w lewym górnym rogu, aby uzyskać dostęp do ustawień.", canDisable: "Jeśli chcesz, możesz wyłączyć tę funkcję..", signature: "-Stan" + }, + settingsDialog: { + title: "Ustawienia", + close: "Zamknij", + tabZoom: "Zoom", + tabLabels: "Etykiety" + }, + labelSettings: { + description: "Konfiguruj ustawienia wyświetlania etykiet", + expandButtonPadding: "Wypełnienie przycisku rozwijania", + expandButtonPaddingDesc: "Dolne wypełnienie gdy przycisk rozwijania jest widoczny (zapobiega nakładaniu tekstu)", + current: "Obecny: {{value}} jednostek motywu" + }, + diagramViewStatus: { + untitledDiagram: "Diagram bez tytułu", + untitledView: "Widok bez tytułu" + }, + addMenu: { + addNode: "Dodaj węzeł", + addRectangle: "Dodaj prostokąt" } }; diff --git a/packages/fossflow-lib/src/i18n/pt-BR.ts b/packages/fossflow-lib/src/i18n/pt-BR.ts index 568023c9..b264cc6f 100644 --- a/packages/fossflow-lib/src/i18n/pt-BR.ts +++ b/packages/fossflow-lib/src/i18n/pt-BR.ts @@ -187,6 +187,26 @@ const locale: LocaleProps = { configPath2: "no canto superior esquerdo para acessar a Configuração.", canDisable: "Você pode desativar esse comportamento se desejar.", signature: "-Stan" + }, + settingsDialog: { + title: "Configurações", + close: "Fechar", + tabZoom: "Zoom", + tabLabels: "Rótulos" + }, + labelSettings: { + description: "Configurar definições de exibição de rótulos", + expandButtonPadding: "Espaçamento do botão expandir", + expandButtonPaddingDesc: "Espaçamento inferior quando o botão expandir está visível (evita sobreposição de texto)", + current: "Atual: {{value}} unidades de tema" + }, + diagramViewStatus: { + untitledDiagram: "Diagrama sem título", + untitledView: "Vista sem título" + }, + addMenu: { + addNode: "Adicionar nó", + addRectangle: "Adicionar retângulo" } }; diff --git a/packages/fossflow-lib/src/i18n/ru-RU.ts b/packages/fossflow-lib/src/i18n/ru-RU.ts index 104477d6..7f558dc1 100644 --- a/packages/fossflow-lib/src/i18n/ru-RU.ts +++ b/packages/fossflow-lib/src/i18n/ru-RU.ts @@ -187,6 +187,26 @@ const locale: LocaleProps = { configPath2: "в верхнем левом углу, чтобы получить доступ к Конфигурации.", canDisable: "Вы можете отключить это поведение, если хотите.", signature: "-Stan" + }, + settingsDialog: { + title: "Настройки", + close: "Закрыть", + tabZoom: "Масштаб", + tabLabels: "Метки" + }, + labelSettings: { + description: "Настройка параметров отображения меток", + expandButtonPadding: "Отступ кнопки «Развернуть»", + expandButtonPaddingDesc: "Нижний отступ при видимой кнопке «Развернуть» (предотвращает перекрытие текста)", + current: "Текущее: {{value}} единиц темы" + }, + diagramViewStatus: { + untitledDiagram: "Диаграмма без названия", + untitledView: "Вид без названия" + }, + addMenu: { + addNode: "Добавить узел", + addRectangle: "Добавить прямоугольник" } }; diff --git a/packages/fossflow-lib/src/i18n/tr-TR.ts b/packages/fossflow-lib/src/i18n/tr-TR.ts index b6b42fb4..39f64def 100644 --- a/packages/fossflow-lib/src/i18n/tr-TR.ts +++ b/packages/fossflow-lib/src/i18n/tr-TR.ts @@ -187,6 +187,26 @@ const locale: LocaleProps = { configPath2: "sol üstteki Hamburger simgesine tıklayın.", canDisable: "İsterseniz bu davranışı devre dışı bırakabilirsiniz.", signature: "-Stan" + }, + settingsDialog: { + title: "Ayarlar", + close: "Kapat", + tabZoom: "Zoom", + tabLabels: "Etiketler" + }, + labelSettings: { + description: "Etiket görüntüleme ayarlarını yapılandır", + expandButtonPadding: "Genişlet düğmesi dolgusu", + expandButtonPaddingDesc: "Genişlet düğmesi görünür olduğunda alt dolgu (metin çakışmasını önler)", + current: "Mevcut: {{value}} tema birimi" + }, + diagramViewStatus: { + untitledDiagram: "Adsız Diyagram", + untitledView: "Adsız görünüm" + }, + addMenu: { + addNode: "Düğüm ekle", + addRectangle: "Dikdörtgen ekle" } }; diff --git a/packages/fossflow-lib/src/i18n/zh-CN.ts b/packages/fossflow-lib/src/i18n/zh-CN.ts index 92366943..367f4491 100644 --- a/packages/fossflow-lib/src/i18n/zh-CN.ts +++ b/packages/fossflow-lib/src/i18n/zh-CN.ts @@ -187,6 +187,26 @@ const locale: LocaleProps = { configPath2: "以访问配置。", canDisable: "如果您愿意,可以禁用此行为。", signature: "-Stan" + }, + settingsDialog: { + title: "设置", + close: "关闭", + tabZoom: "缩放", + tabLabels: "标签" + }, + labelSettings: { + description: "配置标签显示设置", + expandButtonPadding: "展开按钮内边距", + expandButtonPaddingDesc: "展开按钮可见时的底部内边距(防止文字重叠)", + current: "当前:{{value}} 主题单位" + }, + diagramViewStatus: { + untitledDiagram: "未命名图表", + untitledView: "未命名视图" + }, + addMenu: { + addNode: "添加节点", + addRectangle: "添加矩形" } }; diff --git a/packages/fossflow-lib/src/types/isoflowProps.ts b/packages/fossflow-lib/src/types/isoflowProps.ts index 9b072db8..308acd5e 100644 --- a/packages/fossflow-lib/src/types/isoflowProps.ts +++ b/packages/fossflow-lib/src/types/isoflowProps.ts @@ -195,6 +195,26 @@ export interface LocaleProps { canDisable: string; signature: string; }; + settingsDialog: { + title: string; + close: string; + tabZoom: string; + tabLabels: string; + }; + labelSettings: { + description: string; + expandButtonPadding: string; + expandButtonPaddingDesc: string; + current: string; + }; + diagramViewStatus: { + untitledDiagram: string; + untitledView: string; + }; + addMenu: { + addNode: string; + addRectangle: string; + }; // other namespaces can be added here }