mirror of
https://github.com/stan-smith/FossFLOW.git
synced 2025-12-24 06:58:48 -05:00
feat: Added Spanish support! added more I18n compatability -Stan
This commit is contained in:
58
packages/fossflow-app/public/i18n/app/es-ES.json
Normal file
58
packages/fossflow-app/public/i18n/app/es-ES.json
Normal 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."
|
||||
}
|
||||
}
|
||||
@@ -32,6 +32,10 @@ export const supportedLanguages = [
|
||||
label: '中文',
|
||||
value: 'zh-CN',
|
||||
},
|
||||
{
|
||||
label: 'Español',
|
||||
value: 'es-ES',
|
||||
},
|
||||
];
|
||||
|
||||
export default i18n;
|
||||
|
||||
58
packages/fossflow-app/src/i18n/es-ES.json
Normal file
58
packages/fossflow-app/src/i18n/es-ES.json
Normal 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."
|
||||
}
|
||||
}
|
||||
1
packages/fossflow-lib/dist/i18n/index.d.ts
vendored
1
packages/fossflow-lib/dist/i18n/index.d.ts
vendored
@@ -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;
|
||||
|
||||
23
packages/fossflow-lib/dist/index.js
vendored
23
packages/fossflow-lib/dist/index.js
vendored
File diff suppressed because one or more lines are too long
@@ -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 {
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
|
||||
@@ -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."
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
163
packages/fossflow-lib/src/i18n/es-ES.ts
Normal file
163
packages/fossflow-lib/src/i18n/es-ES.ts
Normal 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;
|
||||
@@ -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;
|
||||
|
||||
@@ -116,6 +116,46 @@ const locale: LocaleProps = {
|
||||
description: "配置使用鼠标滚轮时的缩放行为。",
|
||||
zoomToCursor: "光标缩放",
|
||||
zoomToCursorDesc: "启用时,以鼠标光标位置为中心进行缩放。禁用时,以画布中心进行缩放。"
|
||||
},
|
||||
hotkeys: {
|
||||
title: "快捷键设置",
|
||||
profile: "快捷键配置",
|
||||
profileQwerty: "QWERTY(Q、W、E、R、T、Y)",
|
||||
profileSmnrct: "SMNRCT(S、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: "注意:您可以随时更改此设置。所选模式将在连接器工具激活时使用。"
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user