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
}