feat: Added Spanish support! added more I18n compatability -Stan

This commit is contained in:
stan-smith
2025-10-17 17:25:21 +01:00
parent a3c5b7cafb
commit be14d87053
14 changed files with 520 additions and 58 deletions

View File

@@ -0,0 +1,58 @@
{
"nav": {
"newDiagram": "Nuevo diagrama",
"saveSessionOnly": "Guardar (Solo sesión)",
"loadSessionOnly": "Cargar (Solo sesión)",
"importFile": "Importar archivo",
"exportFile": "Exportar archivo",
"quickSaveSession": "Guardado rápido (Sesión)",
"serverStorage": "Almacenamiento en servidor"
},
"status": {
"current": "Actual",
"untitled": "Diagrama sin título",
"modified": "Modificado",
"sessionStorageNote": "Solo almacenamiento de sesión - exporta para guardar permanentemente"
},
"dialog": {
"save": {
"title": "Guardar diagrama (Solo sesión actual)",
"warningTitle": "Importante",
"warningMessage": "Este guardado es temporal y se perderá al cerrar el navegador.",
"warningExport": "Usa <strong>Exportar archivo</strong> para guardar tu trabajo de forma permanente.",
"placeholder": "Ingresa el nombre del diagrama",
"btnSave": "Guardar",
"btnCancel": "Cancelar"
},
"load": {
"title": "Cargar diagrama (Solo sesión actual)",
"noteTitle": "Nota",
"noteMessage": "Estos guardados son temporales. Exporta tus diagramas para conservarlos de forma permanente.",
"noSavedDiagrams": "No se encontraron diagramas guardados en esta sesión",
"updated": "Actualizado",
"btnLoad": "Cargar",
"btnDelete": "Eliminar",
"btnClose": "Cerrar"
},
"export": {
"title": "Exportar diagrama",
"recommendedTitle": "Recomendado",
"recommendedMessage": "Esta es la mejor forma de guardar tu trabajo de forma permanente.",
"noteMessage": "Los archivos JSON exportados pueden importarse posteriormente o compartirse con otros.",
"btnDownload": "Descargar JSON",
"btnCancel": "Cancelar"
}
},
"alert": {
"enterDiagramName": "Por favor ingresa un nombre para el diagrama",
"diagramExists": "Ya existe un diagrama llamado \"{{name}}\" en esta sesión. Esto lo sobrescribirá. ¿Estás seguro de que deseas continuar?",
"unsavedChanges": "Tienes cambios sin guardar. ¿Continuar cargando?",
"createNewDiagram": "¿Crear un nuevo diagrama?",
"unsavedChangesExport": "Tienes cambios sin guardar. Exporta tu diagrama primero para guardarlo. ¿Continuar?",
"confirmDelete": "¿Estás seguro de que deseas eliminar este diagrama?",
"storageFull": "¡Almacenamiento lleno! Abriendo el gestor de almacenamiento...",
"autoSaveFailed": "¡Almacenamiento lleno! Por favor usa el gestor de almacenamiento para liberar espacio.",
"beforeUnload": "Tienes cambios sin guardar. ¿Estás seguro de que deseas salir?",
"quotaExceeded": "Cuota de almacenamiento excedida. Por favor exporta los diagramas importantes y libera espacio."
}
}

View File

@@ -32,6 +32,10 @@ export const supportedLanguages = [
label: '中文',
value: 'zh-CN',
},
{
label: 'Español',
value: 'es-ES',
},
];
export default i18n;

View File

@@ -0,0 +1,58 @@
{
"nav": {
"newDiagram": "Nuevo diagrama",
"saveSessionOnly": "Guardar (Solo sesión)",
"loadSessionOnly": "Cargar (Solo sesión)",
"importFile": "Importar archivo",
"exportFile": "Exportar archivo",
"quickSaveSession": "Guardado rápido (Sesión)",
"serverStorage": "Almacenamiento en servidor"
},
"status": {
"current": "Actual",
"untitled": "Diagrama sin título",
"modified": "Modificado",
"sessionStorageNote": "Solo almacenamiento de sesión - exporta para guardar permanentemente"
},
"dialog": {
"save": {
"title": "Guardar diagrama (Solo sesión actual)",
"warningTitle": "Importante",
"warningMessage": "Este guardado es temporal y se perderá al cerrar el navegador.",
"warningExport": "Usa <strong>Exportar archivo</strong> para guardar tu trabajo de forma permanente.",
"placeholder": "Ingresa el nombre del diagrama",
"btnSave": "Guardar",
"btnCancel": "Cancelar"
},
"load": {
"title": "Cargar diagrama (Solo sesión actual)",
"noteTitle": "Nota",
"noteMessage": "Estos guardados son temporales. Exporta tus diagramas para conservarlos de forma permanente.",
"noSavedDiagrams": "No se encontraron diagramas guardados en esta sesión",
"updated": "Actualizado",
"btnLoad": "Cargar",
"btnDelete": "Eliminar",
"btnClose": "Cerrar"
},
"export": {
"title": "Exportar diagrama",
"recommendedTitle": "Recomendado",
"recommendedMessage": "Esta es la mejor forma de guardar tu trabajo de forma permanente.",
"noteMessage": "Los archivos JSON exportados pueden importarse posteriormente o compartirse con otros.",
"btnDownload": "Descargar JSON",
"btnCancel": "Cancelar"
}
},
"alert": {
"enterDiagramName": "Por favor ingresa un nombre para el diagrama",
"diagramExists": "Ya existe un diagrama llamado \"{{name}}\" en esta sesión. Esto lo sobrescribirá. ¿Estás seguro de que deseas continuar?",
"unsavedChanges": "Tienes cambios sin guardar. ¿Continuar cargando?",
"createNewDiagram": "¿Crear un nuevo diagrama?",
"unsavedChangesExport": "Tienes cambios sin guardar. Exporta tu diagrama primero para guardarlo. ¿Continuar?",
"confirmDelete": "¿Estás seguro de que deseas eliminar este diagrama?",
"storageFull": "¡Almacenamiento lleno! Abriendo el gestor de almacenamiento...",
"autoSaveFailed": "¡Almacenamiento lleno! Por favor usa el gestor de almacenamiento para liberar espacio.",
"beforeUnload": "Tienes cambios sin guardar. ¿Estás seguro de que deseas salir?",
"quotaExceeded": "Cuota de almacenamiento excedida. Por favor exporta los diagramas importantes y libera espacio."
}
}

View File

@@ -1,5 +1,6 @@
declare const locales: {
'en-US': import("../types").LocaleProps;
'zh-CN': import("../types").LocaleProps;
'es-ES': import("../types").LocaleProps;
};
export default locales;

View File

File diff suppressed because one or more lines are too long

View File

@@ -120,6 +120,46 @@ export interface LocaleProps {
zoomToCursor: string;
zoomToCursorDesc: string;
};
hotkeys: {
title: string;
profile: string;
profileQwerty: string;
profileSmnrct: string;
profileNone: string;
tool: string;
hotkey: string;
toolSelect: string;
toolPan: string;
toolAddItem: string;
toolRectangle: string;
toolConnector: string;
toolText: string;
note: string;
};
pan: {
title: string;
mousePanOptions: string;
emptyAreaClickPan: string;
middleClickPan: string;
rightClickPan: string;
ctrlClickPan: string;
altClickPan: string;
keyboardPanOptions: string;
arrowKeys: string;
wasdKeys: string;
ijklKeys: string;
keyboardPanSpeed: string;
note: string;
};
connector: {
title: string;
connectionMode: string;
clickMode: string;
clickModeDesc: string;
dragMode: string;
dragModeDesc: string;
note: string;
};
};
}
export interface IsoflowProps {

View File

@@ -10,10 +10,12 @@ import {
Paper
} from '@mui/material';
import { useUiStateStore } from 'src/stores/uiStateStore';
import { useTranslation } from 'src/stores/localeStore';
export const ConnectorSettings = () => {
const connectorInteractionMode = useUiStateStore((state) => state.connectorInteractionMode);
const setConnectorInteractionMode = useUiStateStore((state) => state.actions.setConnectorInteractionMode);
const { t } = useTranslation();
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
setConnectorInteractionMode(event.target.value as 'click' | 'drag');
@@ -22,12 +24,12 @@ export const ConnectorSettings = () => {
return (
<Box>
<Typography variant="h6" gutterBottom>
Connector Settings
{t('settings.connector.title')}
</Typography>
<Paper variant="outlined" sx={{ p: 2, mt: 2 }}>
<FormControl component="fieldset">
<FormLabel component="legend">Connection Creation Mode</FormLabel>
<FormLabel component="legend">{t('settings.connector.connectionMode')}</FormLabel>
<RadioGroup
value={connectorInteractionMode}
onChange={handleChange}
@@ -38,9 +40,9 @@ export const ConnectorSettings = () => {
control={<Radio />}
label={
<Box>
<Typography variant="body1">Click Mode (Recommended)</Typography>
<Typography variant="body1">{t('settings.connector.clickMode')}</Typography>
<Typography variant="body2" color="text.secondary">
Click the first node, then click the second node to create a connection
{t('settings.connector.clickModeDesc')}
</Typography>
</Box>
}
@@ -50,9 +52,9 @@ export const ConnectorSettings = () => {
control={<Radio />}
label={
<Box>
<Typography variant="body1">Drag Mode</Typography>
<Typography variant="body1">{t('settings.connector.dragMode')}</Typography>
<Typography variant="body2" color="text.secondary">
Click and drag from the first node to the second node
{t('settings.connector.dragModeDesc')}
</Typography>
</Box>
}
@@ -61,10 +63,9 @@ export const ConnectorSettings = () => {
</RadioGroup>
</FormControl>
</Paper>
<Typography variant="body2" color="text.secondary" sx={{ mt: 2 }}>
Note: You can change this setting at any time. The selected mode will be used
when the Connector tool is active.
{t('settings.connector.note')}
</Typography>
</Box>
);

View File

@@ -16,38 +16,40 @@ import {
} from '@mui/material';
import { useUiStateStore } from 'src/stores/uiStateStore';
import { HOTKEY_PROFILES, HotkeyProfile } from 'src/config/hotkeys';
import { useTranslation } from 'src/stores/localeStore';
export const HotkeySettings = () => {
const hotkeyProfile = useUiStateStore((state) => state.hotkeyProfile);
const setHotkeyProfile = useUiStateStore((state) => state.actions.setHotkeyProfile);
const { t } = useTranslation();
const currentMapping = HOTKEY_PROFILES[hotkeyProfile];
const tools = [
{ name: 'Select', key: currentMapping.select },
{ name: 'Pan', key: currentMapping.pan },
{ name: 'Add Item', key: currentMapping.addItem },
{ name: 'Rectangle', key: currentMapping.rectangle },
{ name: 'Connector', key: currentMapping.connector },
{ name: 'Text', key: currentMapping.text }
{ name: t('settings.hotkeys.toolSelect'), key: currentMapping.select },
{ name: t('settings.hotkeys.toolPan'), key: currentMapping.pan },
{ name: t('settings.hotkeys.toolAddItem'), key: currentMapping.addItem },
{ name: t('settings.hotkeys.toolRectangle'), key: currentMapping.rectangle },
{ name: t('settings.hotkeys.toolConnector'), key: currentMapping.connector },
{ name: t('settings.hotkeys.toolText'), key: currentMapping.text }
];
return (
<Box sx={{ p: 2 }}>
<Typography variant="h6" gutterBottom>
Hotkey Settings
{t('settings.hotkeys.title')}
</Typography>
<FormControl fullWidth sx={{ mb: 3 }}>
<InputLabel>Hotkey Profile</InputLabel>
<InputLabel>{t('settings.hotkeys.profile')}</InputLabel>
<Select
value={hotkeyProfile}
label="Hotkey Profile"
label={t('settings.hotkeys.profile')}
onChange={(e) => setHotkeyProfile(e.target.value as HotkeyProfile)}
>
<MenuItem value="qwerty">QWERTY (Q, W, E, R, T, Y)</MenuItem>
<MenuItem value="smnrct">SMNRCT (S, M, N, R, C, T)</MenuItem>
<MenuItem value="none">No Hotkeys</MenuItem>
<MenuItem value="qwerty">{t('settings.hotkeys.profileQwerty')}</MenuItem>
<MenuItem value="smnrct">{t('settings.hotkeys.profileSmnrct')}</MenuItem>
<MenuItem value="none">{t('settings.hotkeys.profileNone')}</MenuItem>
</Select>
</FormControl>
@@ -56,8 +58,8 @@ export const HotkeySettings = () => {
<Table size="small">
<TableHead>
<TableRow>
<TableCell>Tool</TableCell>
<TableCell>Hotkey</TableCell>
<TableCell>{t('settings.hotkeys.tool')}</TableCell>
<TableCell>{t('settings.hotkeys.hotkey')}</TableCell>
</TableRow>
</TableHead>
<TableBody>
@@ -77,7 +79,7 @@ export const HotkeySettings = () => {
)}
<Typography variant="caption" color="text.secondary" sx={{ mt: 2, display: 'block' }}>
Note: Hotkeys work when not typing in text fields
{t('settings.hotkeys.note')}
</Typography>
</Box>
);

View File

@@ -9,10 +9,12 @@ import {
Divider
} from '@mui/material';
import { useUiStateStore } from 'src/stores/uiStateStore';
import { useTranslation } from 'src/stores/localeStore';
export const PanSettings = () => {
const panSettings = useUiStateStore((state) => state.panSettings);
const setPanSettings = useUiStateStore((state) => state.actions.setPanSettings);
const { t } = useTranslation();
const handleToggle = (setting: keyof typeof panSettings) => {
if (typeof panSettings[setting] === 'boolean') {
@@ -33,14 +35,14 @@ export const PanSettings = () => {
return (
<Box sx={{ p: 2 }}>
<Typography variant="h6" gutterBottom>
Pan Settings
{t('settings.pan.title')}
</Typography>
<Paper sx={{ p: 2, mb: 2 }}>
<Typography variant="subtitle2" gutterBottom>
Mouse Pan Options
{t('settings.pan.mousePanOptions')}
</Typography>
<FormControlLabel
control={
<Switch
@@ -48,9 +50,9 @@ export const PanSettings = () => {
onChange={() => handleToggle('emptyAreaClickPan')}
/>
}
label="Click and drag on empty area"
label={t('settings.pan.emptyAreaClickPan')}
/>
<FormControlLabel
control={
<Switch
@@ -58,9 +60,9 @@ export const PanSettings = () => {
onChange={() => handleToggle('middleClickPan')}
/>
}
label="Middle click and drag"
label={t('settings.pan.middleClickPan')}
/>
<FormControlLabel
control={
<Switch
@@ -68,9 +70,9 @@ export const PanSettings = () => {
onChange={() => handleToggle('rightClickPan')}
/>
}
label="Right click and drag"
label={t('settings.pan.rightClickPan')}
/>
<FormControlLabel
control={
<Switch
@@ -78,9 +80,9 @@ export const PanSettings = () => {
onChange={() => handleToggle('ctrlClickPan')}
/>
}
label="Ctrl + click and drag"
label={t('settings.pan.ctrlClickPan')}
/>
<FormControlLabel
control={
<Switch
@@ -88,15 +90,15 @@ export const PanSettings = () => {
onChange={() => handleToggle('altClickPan')}
/>
}
label="Alt + click and drag"
label={t('settings.pan.altClickPan')}
/>
</Paper>
<Paper sx={{ p: 2 }}>
<Typography variant="subtitle2" gutterBottom>
Keyboard Pan Options
{t('settings.pan.keyboardPanOptions')}
</Typography>
<FormControlLabel
control={
<Switch
@@ -104,9 +106,9 @@ export const PanSettings = () => {
onChange={() => handleToggle('arrowKeysPan')}
/>
}
label="Arrow keys"
label={t('settings.pan.arrowKeys')}
/>
<FormControlLabel
control={
<Switch
@@ -114,9 +116,9 @@ export const PanSettings = () => {
onChange={() => handleToggle('wasdPan')}
/>
}
label="WASD keys"
label={t('settings.pan.wasdKeys')}
/>
<FormControlLabel
control={
<Switch
@@ -124,15 +126,15 @@ export const PanSettings = () => {
onChange={() => handleToggle('ijklPan')}
/>
}
label="IJKL keys"
label={t('settings.pan.ijklKeys')}
/>
<Divider sx={{ my: 2 }} />
<Typography variant="subtitle2" gutterBottom>
Keyboard Pan Speed
{t('settings.pan.keyboardPanSpeed')}
</Typography>
<Box sx={{ px: 2 }}>
<Slider
value={panSettings.keyboardPanSpeed}
@@ -147,7 +149,7 @@ export const PanSettings = () => {
</Paper>
<Typography variant="caption" color="text.secondary" sx={{ mt: 2, display: 'block' }}>
Note: Pan options work in addition to the dedicated Pan tool
{t('settings.pan.note')}
</Typography>
</Box>
);

View File

@@ -116,6 +116,46 @@ const locale: LocaleProps = {
description: "Configure zoom behavior when using the mouse wheel.",
zoomToCursor: "Zoom to Cursor",
zoomToCursorDesc: "When enabled, zoom in/out centered on the mouse cursor position. When disabled, zoom is centered on the canvas."
},
hotkeys: {
title: "Hotkey Settings",
profile: "Hotkey Profile",
profileQwerty: "QWERTY (Q, W, E, R, T, Y)",
profileSmnrct: "SMNRCT (S, M, N, R, C, T)",
profileNone: "No Hotkeys",
tool: "Tool",
hotkey: "Hotkey",
toolSelect: "Select",
toolPan: "Pan",
toolAddItem: "Add Item",
toolRectangle: "Rectangle",
toolConnector: "Connector",
toolText: "Text",
note: "Note: Hotkeys work when not typing in text fields"
},
pan: {
title: "Pan Settings",
mousePanOptions: "Mouse Pan Options",
emptyAreaClickPan: "Click and drag on empty area",
middleClickPan: "Middle click and drag",
rightClickPan: "Right click and drag",
ctrlClickPan: "Ctrl + click and drag",
altClickPan: "Alt + click and drag",
keyboardPanOptions: "Keyboard Pan Options",
arrowKeys: "Arrow keys",
wasdKeys: "WASD keys",
ijklKeys: "IJKL keys",
keyboardPanSpeed: "Keyboard Pan Speed",
note: "Note: Pan options work in addition to the dedicated Pan tool"
},
connector: {
title: "Connector Settings",
connectionMode: "Connection Creation Mode",
clickMode: "Click Mode (Recommended)",
clickModeDesc: "Click the first node, then click the second node to create a connection",
dragMode: "Drag Mode",
dragModeDesc: "Click and drag from the first node to the second node",
note: "Note: You can change this setting at any time. The selected mode will be used when the Connector tool is active."
}
}
};

View File

@@ -0,0 +1,163 @@
import { LocaleProps } from '../types/isoflowProps';
const locale: LocaleProps = {
common: {
exampleText: "Este es un texto de ejemplo"
},
mainMenu: {
undo: "Deshacer",
redo: "Rehacer",
open: "Abrir",
exportJson: "Exportar como JSON",
exportCompactJson: "Exportar como JSON compacto",
exportImage: "Exportar como imagen",
clearCanvas: "Limpiar el lienzo",
settings: "Configuración",
gitHub: "GitHub"
},
helpDialog: {
title: "Atajos de teclado y ayuda",
close: "Cerrar",
keyboardShortcuts: "Atajos de teclado",
mouseInteractions: "Interacciones del ratón",
action: "Acción",
shortcut: "Atajo",
method: "Método",
description: "Descripción",
note: "Nota:",
noteContent: "Los atajos de teclado se desactivan al escribir en campos de entrada, áreas de texto o elementos editables para evitar conflictos.",
// Keyboard shortcuts
undoAction: "Deshacer",
undoDescription: "Deshacer la última acción",
redoAction: "Rehacer",
redoDescription: "Rehacer la última acción deshecha",
redoAltAction: "Rehacer (Alternativo)",
redoAltDescription: "Atajo alternativo para rehacer",
helpAction: "Ayuda",
helpDescription: "Abrir diálogo de ayuda con atajos de teclado",
zoomInAction: "Acercar",
zoomInShortcut: "Rueda del ratón hacia arriba",
zoomInDescription: "Acercar en el lienzo",
zoomOutAction: "Alejar",
zoomOutShortcut: "Rueda del ratón hacia abajo",
zoomOutDescription: "Alejar del lienzo",
panCanvasAction: "Desplazar lienzo",
panCanvasShortcut: "Clic izquierdo + Arrastrar",
panCanvasDescription: "Desplazar el lienzo en modo desplazamiento",
contextMenuAction: "Menú contextual",
contextMenuShortcut: "Clic derecho",
contextMenuDescription: "Abrir menú contextual para elementos o espacio vacío",
// Mouse interactions
selectToolAction: "Herramienta de selección",
selectToolShortcut: "Clic en botón Seleccionar",
selectToolDescription: "Cambiar al modo de selección",
panToolAction: "Herramienta de desplazamiento",
panToolShortcut: "Clic en botón Desplazar",
panToolDescription: "Cambiar al modo de desplazamiento para mover el lienzo",
addItemAction: "Añadir elemento",
addItemShortcut: "Clic en botón Añadir elemento",
addItemDescription: "Abrir selector de iconos para añadir nuevos elementos",
drawRectangleAction: "Dibujar rectángulo",
drawRectangleShortcut: "Clic en botón Rectángulo",
drawRectangleDescription: "Cambiar al modo de dibujo de rectángulos",
createConnectorAction: "Crear conector",
createConnectorShortcut: "Clic en botón Conector",
createConnectorDescription: "Cambiar al modo de conector",
addTextAction: "Añadir texto",
addTextShortcut: "Clic en botón Texto",
addTextDescription: "Crear un nuevo cuadro de texto"
},
connectorHintTooltip: {
tipCreatingConnectors: "Consejo: Crear conectores",
tipConnectorTools: "Consejo: Herramientas de conectores",
clickInstructionStart: "Haz clic",
clickInstructionMiddle: "en el primer nodo o punto, luego",
clickInstructionEnd: "en el segundo nodo o punto para crear una conexión.",
nowClickTarget: "Ahora haz clic en el objetivo para completar la conexión.",
dragStart: "Arrastra",
dragEnd: "desde el primer nodo al segundo nodo para crear una conexión.",
rerouteStart: "Para cambiar la ruta de un conector,",
rerouteMiddle: "haz clic izquierdo",
rerouteEnd: "en cualquier punto a lo largo de la línea del conector y arrastra para crear o mover puntos de anclaje."
},
lassoHintTooltip: {
tipLasso: "Consejo: Selección de lazo",
tipFreehandLasso: "Consejo: Selección de lazo libre",
lassoDragStart: "Haz clic y arrastra",
lassoDragEnd: "para dibujar un cuadro de selección rectangular alrededor de los elementos que deseas seleccionar.",
freehandDragStart: "Haz clic y arrastra",
freehandDragMiddle: "para dibujar una",
freehandDragEnd: "forma libre",
freehandComplete: "alrededor de los elementos. Suelta para seleccionar todos los elementos dentro de la forma.",
moveStart: "Una vez seleccionados,",
moveMiddle: "haz clic dentro de la selección",
moveEnd: "y arrastra para mover todos los elementos seleccionados juntos."
},
importHintTooltip: {
title: "Importar diagramas",
instructionStart: "Para importar diagramas, haz clic en el",
menuButton: "botón de menú",
instructionMiddle: "(☰) en la esquina superior izquierda, luego selecciona",
openButton: "\"Abrir\"",
instructionEnd: "para cargar tus archivos de diagrama."
},
connectorRerouteTooltip: {
title: "Consejo: Cambiar ruta de conectores",
instructionStart: "Una vez que tus conectores estén colocados, puedes cambiar su ruta como desees.",
instructionSelect: "Selecciona el conector",
instructionMiddle: "primero, luego",
instructionClick: "haz clic en la ruta del conector",
instructionAnd: "y",
instructionDrag: "arrastra",
instructionEnd: "para cambiarlo!"
},
settings: {
zoom: {
description: "Configura el comportamiento del zoom al usar la rueda del ratón.",
zoomToCursor: "Zoom al cursor",
zoomToCursorDesc: "Cuando está habilitado, el zoom se centra en la posición del cursor del ratón. Cuando está deshabilitado, el zoom se centra en el lienzo."
},
hotkeys: {
title: "Configuración de atajos",
profile: "Perfil de atajos",
profileQwerty: "QWERTY (Q, W, E, R, T, Y)",
profileSmnrct: "SMNRCT (S, M, N, R, C, T)",
profileNone: "Sin atajos",
tool: "Herramienta",
hotkey: "Atajo",
toolSelect: "Seleccionar",
toolPan: "Desplazar",
toolAddItem: "Añadir elemento",
toolRectangle: "Rectángulo",
toolConnector: "Conector",
toolText: "Texto",
note: "Nota: Los atajos funcionan cuando no estás escribiendo en campos de texto"
},
pan: {
title: "Configuración de desplazamiento",
mousePanOptions: "Opciones de desplazamiento con ratón",
emptyAreaClickPan: "Clic y arrastrar en área vacía",
middleClickPan: "Clic central y arrastrar",
rightClickPan: "Clic derecho y arrastrar",
ctrlClickPan: "Ctrl + clic y arrastrar",
altClickPan: "Alt + clic y arrastrar",
keyboardPanOptions: "Opciones de desplazamiento con teclado",
arrowKeys: "Teclas de flechas",
wasdKeys: "Teclas WASD",
ijklKeys: "Teclas IJKL",
keyboardPanSpeed: "Velocidad de desplazamiento con teclado",
note: "Nota: Las opciones de desplazamiento funcionan además de la herramienta de desplazamiento dedicada"
},
connector: {
title: "Configuración de conectores",
connectionMode: "Modo de creación de conexiones",
clickMode: "Modo clic (Recomendado)",
clickModeDesc: "Haz clic en el primer nodo, luego haz clic en el segundo nodo para crear una conexión",
dragMode: "Modo arrastrar",
dragModeDesc: "Haz clic y arrastra desde el primer nodo hasta el segundo nodo",
note: "Nota: Puedes cambiar esta configuración en cualquier momento. El modo seleccionado se usará cuando la herramienta de conector esté activa."
}
}
};
export default locale;

View File

@@ -1,9 +1,11 @@
import enUS from './en-US';
import zhCN from './zh-CN';
import esES from './es-ES';
const locales = {
'en-US': enUS,
'zh-CN': zhCN
'zh-CN': zhCN,
'es-ES': esES
};
export default locales;

View File

@@ -116,6 +116,46 @@ const locale: LocaleProps = {
description: "配置使用鼠标滚轮时的缩放行为。",
zoomToCursor: "光标缩放",
zoomToCursorDesc: "启用时,以鼠标光标位置为中心进行缩放。禁用时,以画布中心进行缩放。"
},
hotkeys: {
title: "快捷键设置",
profile: "快捷键配置",
profileQwerty: "QWERTYQ、W、E、R、T、Y",
profileSmnrct: "SMNRCTS、M、N、R、C、T",
profileNone: "无快捷键",
tool: "工具",
hotkey: "快捷键",
toolSelect: "选择",
toolPan: "平移",
toolAddItem: "添加项目",
toolRectangle: "矩形",
toolConnector: "连接器",
toolText: "文本",
note: "注意:在文本输入框中输入时快捷键不生效"
},
pan: {
title: "平移设置",
mousePanOptions: "鼠标平移选项",
emptyAreaClickPan: "点击并拖拽空白区域",
middleClickPan: "中键点击并拖拽",
rightClickPan: "右键点击并拖拽",
ctrlClickPan: "Ctrl + 点击并拖拽",
altClickPan: "Alt + 点击并拖拽",
keyboardPanOptions: "键盘平移选项",
arrowKeys: "方向键",
wasdKeys: "WASD 键",
ijklKeys: "IJKL 键",
keyboardPanSpeed: "键盘平移速度",
note: "注意:平移选项可与专用的平移工具一起使用"
},
connector: {
title: "连接器设置",
connectionMode: "连接创建模式",
clickMode: "点击模式(推荐)",
clickModeDesc: "先点击第一个节点,然后点击第二个节点来创建连接",
dragMode: "拖拽模式",
dragModeDesc: "从第一个节点点击并拖拽到第二个节点",
note: "注意:您可以随时更改此设置。所选模式将在连接器工具激活时使用。"
}
}
};

View File

@@ -124,6 +124,46 @@ export interface LocaleProps {
zoomToCursor: string;
zoomToCursorDesc: string;
};
hotkeys: {
title: string;
profile: string;
profileQwerty: string;
profileSmnrct: string;
profileNone: string;
tool: string;
hotkey: string;
toolSelect: string;
toolPan: string;
toolAddItem: string;
toolRectangle: string;
toolConnector: string;
toolText: string;
note: string;
};
pan: {
title: string;
mousePanOptions: string;
emptyAreaClickPan: string;
middleClickPan: string;
rightClickPan: string;
ctrlClickPan: string;
altClickPan: string;
keyboardPanOptions: string;
arrowKeys: string;
wasdKeys: string;
ijklKeys: string;
keyboardPanSpeed: string;
note: string;
};
connector: {
title: string;
connectionMode: string;
clickMode: string;
clickModeDesc: string;
dragMode: string;
dragModeDesc: string;
note: string;
};
};
// other namespaces can be added here
}