@object-ui/i18n 6.2.3 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,1297 +1,2024 @@
1
- /**
2
- * Español (es) - Spanish language pack for Object UI
3
- */
4
1
  const es = {
5
- common: {
6
- addToFavorites: 'Añadir a favoritos',
7
- removeFromFavorites: 'Quitar de favoritos',
8
- loading: 'Cargando...',
9
- save: 'Guardar',
10
- cancel: 'Cancelar',
11
- delete: 'Eliminar',
12
- edit: 'Editar',
13
- create: 'Crear',
14
- search: 'Buscar',
15
- filter: 'Filtrar',
16
- reset: 'Restablecer',
17
- confirm: 'Confirmar',
18
- close: 'Cerrar',
19
- back: 'Atrás',
20
- next: 'Siguiente',
21
- previous: 'Anterior',
22
- submit: 'Enviar',
23
- refresh: 'Actualizar',
24
- export: 'Exportar',
25
- import: 'Importar',
2
+ lookup: {
3
+ recentlyUsed: 'Usados recientemente',
4
+ allResults: 'Todos los resultados',
5
+ createNew: 'Crear nuevo',
6
+ createNamed: 'Crear «{{name}}»',
7
+ showingResults: 'Mostrando {{shown}} de {{total}} resultados',
8
+ showAllResults: 'Ver todos los resultados ({{count}})',
9
+ selectedBadge: 'Seleccionado',
10
+ browseAll: 'Examinar todos los registros',
11
+ remove: 'Quitar {{label}}',
12
+ selectFirst: 'Seleccione primero {{fields}}',
13
+ selectRecord: 'Seleccionar registro',
14
+ recordCount: '{{count}} registros',
15
+ recordCountOne: '1 registro',
16
+ pageOf: 'Página {{current}} de {{total}}',
17
+ filters: 'Filtros',
18
+ clear: 'Limpiar',
26
19
  yes: 'Sí',
27
- no: 'No',
28
- ok: 'Aceptar',
29
- actions: 'Acciones',
30
- more: 'Más',
31
- selectAll: 'Seleccionar todo',
32
- clearAll: 'Borrar todo',
33
- noData: 'Sin datos',
34
- noResults: 'No se encontraron resultados',
35
- required: 'Obligatorio',
36
- optional: 'Opcional',
37
- selectOption: 'Seleccionar una opción',
38
- select: 'Seleccionar...',
39
- openChat: 'Abrir chat',
40
- closeChat: 'Cerrar chat',
41
- toggleSidebar: 'Alternar barra lateral',
20
+ filterPlaceholder: 'Filtrar {{label}}',
21
+ prevPage: 'Página anterior',
22
+ nextPage: 'Página siguiente',
23
+ jumpToPage: 'Ir a la página',
24
+ retry: 'Reintentar',
25
+ loading: 'Cargando…',
26
+ noOptions: 'No se encontraron opciones',
27
+ noRecords: 'No se encontraron registros',
28
+ },
29
+ common: {
30
+ addToFavorites: "Añadir a favoritos",
31
+ removeFromFavorites: "Quitar de favoritos",
32
+ loading: "Cargando...",
33
+ save: "Guardar",
34
+ cancel: "Cancelar",
35
+ delete: "Eliminar",
36
+ edit: "Editar",
37
+ create: "Crear",
38
+ search: "Buscar",
39
+ filter: "Filtrar",
40
+ reset: "Restablecer",
41
+ confirm: "Confirmar",
42
+ close: "Cerrar",
43
+ back: "Atrás",
44
+ next: "Siguiente",
45
+ previous: "Anterior",
46
+ submit: "Enviar",
47
+ refresh: "Actualizar",
48
+ export: "Exportar",
49
+ import: "Importar",
50
+ yes: "Sí",
51
+ no: "No",
52
+ ok: "Aceptar",
53
+ actions: "Acciones",
54
+ more: "Más",
55
+ selectAll: "Seleccionar todo",
56
+ clearAll: "Borrar todo",
57
+ noData: "Sin datos",
58
+ noResults: "No se encontraron resultados",
59
+ required: "Obligatorio",
60
+ optional: "Opcional",
61
+ selectOption: "Seleccionar una opción",
62
+ select: "Seleccionar...",
63
+ openChat: "Abrir chat",
64
+ closeChat: "Cerrar chat",
65
+ toggleSidebar: "Alternar barra lateral",
66
+ package: "Paquete",
67
+ },
68
+ actions: {
69
+ resultDialog: {
70
+ defaultTitle: 'Save this value now',
71
+ acknowledge: 'I have saved this',
72
+ },
42
73
  },
43
74
  validation: {
44
- required: '{{field}} es obligatorio',
45
- minLength: '{{field}} debe tener al menos {{min}} caracteres',
46
- maxLength: '{{field}} debe tener como máximo {{max}} caracteres',
47
- min: '{{field}} debe ser al menos {{min}}',
48
- max: '{{field}} debe ser como máximo {{max}}',
49
- email: 'Por favor, introduzca un correo electrónico válido',
50
- url: 'Por favor, introduzca una URL válida',
51
- pattern: 'El formato de {{field}} no es válido',
52
- unique: '{{field}} debe ser único',
53
- type: '{{field}} debe ser un {{type}} válido',
75
+ required: "{{field}} es obligatorio",
76
+ minLength: "{{field}} debe tener al menos {{min}} caracteres",
77
+ maxLength: "{{field}} debe tener como máximo {{max}} caracteres",
78
+ min: "{{field}} debe ser al menos {{min}}",
79
+ max: "{{field}} debe ser como máximo {{max}}",
80
+ email: "Por favor, introduzca un correo electrónico válido",
81
+ url: "Por favor, introduzca una URL válida",
82
+ pattern: "El formato de {{field}} no es válido",
83
+ unique: "{{field}} debe ser único",
84
+ type: "{{field}} debe ser un {{type}} válido",
54
85
  },
55
86
  form: {
56
- addItem: 'Añadir elemento',
57
- removeItem: 'Eliminar elemento',
58
- fieldRequired: 'Este campo es obligatorio',
59
- invalidFormat: 'Formato no válido',
60
- saveSuccess: 'Guardado correctamente',
61
- saveError: 'Error al guardar',
62
- unsavedChanges: 'Tiene cambios sin guardar. ¿Está seguro de que desea salir?',
63
- stepOf: 'Paso {{current}} de {{total}}',
64
- createTitle: 'Crear {{object}}',
65
- editTitle: 'Editar {{object}}',
66
- createDescription: 'Agregar un nuevo {{object}} a su base de datos.',
67
- editDescription: 'Actualizar detalles de {{object}}',
68
- saveRecord: 'Guardar registro',
87
+ addItem: "Añadir elemento",
88
+ removeItem: "Eliminar elemento",
89
+ fieldRequired: "Este campo es obligatorio",
90
+ invalidFormat: "Formato no válido",
91
+ saveSuccess: "Guardado correctamente",
92
+ saveError: "Error al guardar",
93
+ unsavedChanges: "Tiene cambios sin guardar. ¿Está seguro de que desea salir?",
94
+ stepOf: "Paso {{current}} de {{total}}",
95
+ createTitle: "Crear {{object}}",
96
+ editTitle: "Editar {{object}}",
97
+ createDescription: "Agregar un nuevo {{object}} a su base de datos.",
98
+ editDescription: "Actualizar detalles de {{object}}",
99
+ saveRecord: "Guardar registro",
100
+ create: "Crear",
101
+ update: "Actualizar",
102
+ createSuccess: "{{object}} creado",
103
+ updateSuccess: "{{object}} actualizado",
104
+ deleteSuccess: "{{object}} eliminado",
69
105
  },
70
106
  fields: {
71
107
  richText: {
72
- format: 'Format: {{format}}',
73
- basicEditorHint: 'Rich text editor (basic)',
74
- placeholder: 'Enter text...',
108
+ format: "Formato: {{format}}",
109
+ basicEditorHint: "Editor de texto enriquecido (básico)",
110
+ placeholder: "Escribe algo...",
75
111
  },
76
112
  },
77
113
  table: {
78
- rowsPerPage: 'Filas por página',
79
- showing: 'Mostrando {{from}} a {{to}} de {{total}}',
80
- noRows: 'No hay filas para mostrar',
81
- sortAsc: 'Ordenar ascendente',
82
- sortDesc: 'Ordenar descendente',
83
- filterColumn: 'Filtrar {{column}}',
84
- columns: 'Columnas',
85
- exportCSV: 'Exportar CSV',
86
- exportExcel: 'Exportar Excel',
87
- selectRow: 'Seleccionar fila',
88
- selectAllRows: 'Seleccionar todas las filas',
89
- expandRow: 'Expandir fila',
90
- collapseRow: 'Contraer fila',
91
- hideColumn: 'Ocultar columna',
92
- freezeColumn: 'Fijar columna',
93
- unfreezeColumn: 'Desfijar columna',
94
- pageInfo: 'Página {{current}} de {{total}}',
95
- totalRecords: '{{count}} en total',
114
+ rowsPerPage: "Filas por página",
115
+ showing: "Mostrando {{from}} a {{to}} de {{total}}",
116
+ noRows: "No hay filas para mostrar",
117
+ sortAsc: "Ordenar ascendente",
118
+ sortDesc: "Ordenar descendente",
119
+ filterColumn: "Filtrar {{column}}",
120
+ columns: "Columnas",
121
+ exportCSV: "Exportar CSV",
122
+ exportExcel: "Exportar Excel",
123
+ selectRow: "Seleccionar fila",
124
+ selectAllRows: "Seleccionar todas las filas",
125
+ expandRow: "Expandir fila",
126
+ collapseRow: "Contraer fila",
127
+ hideColumn: "Ocultar columna",
128
+ freezeColumn: "Fijar columna",
129
+ unfreezeColumn: "Desfijar columna",
130
+ pageInfo: "Página {{current}} de {{total}}",
131
+ totalRecords: "{{count}} en total",
132
+ noResults: "Sin resultados",
133
+ noResultsHint: "Intente ajustar sus filtros o términos de búsqueda.",
134
+ cancelAll: "Cancelar todo",
135
+ saveAll: "Guardar todo ({{count}})",
136
+ addRecord: "Agregar registro",
137
+ open: "Abrir",
138
+ search: "Buscar...",
139
+ modified: "{{count}} filas modificadas",
140
+ selected: "{{count}} seleccionados",
141
+ edit: "Editar",
142
+ delete: "Eliminar",
96
143
  },
97
144
  grid: {
98
- actions: 'Acciones',
99
- edit: 'Editar',
100
- delete: 'Eliminar',
101
- export: 'Exportar',
102
- exportAs: 'Exportar como {{format}}',
103
- loading: 'Cargando cuadrícula...',
104
- errorLoading: 'Error al cargar la cuadrícula',
105
- pullToRefresh: 'Desliza para actualizar',
106
- refreshing: 'Actualizando…',
107
- openRecord: 'Abrir registro',
108
- rowHeight: 'Altura de fila: {{mode}}',
145
+ actions: "Acciones",
146
+ edit: "Editar",
147
+ delete: "Eliminar",
148
+ export: "Exportar",
149
+ exportAs: "Exportar como {{format}}",
150
+ loading: "Cargando cuadrícula...",
151
+ errorLoading: "Error al cargar la cuadrícula",
152
+ pullToRefresh: "Desliza para actualizar",
153
+ refreshing: "Actualizando…",
154
+ openRecord: "Abrir registro",
155
+ rowHeight: "Altura de fila: {{mode}}",
156
+ openMenu: "Abrir menú",
157
+ empty: "Vacío",
158
+ yes: "Sí",
159
+ no: "No",
160
+ systemFields: "Sistema",
161
+ toolbar: {
162
+ densityMode: "Densidad",
163
+ densityCompact: "Compacto",
164
+ densityComfortable: "Normal",
165
+ densitySpacious: "Espacioso",
166
+ densityCycleHint: "{{label}} (clic para cambiar)",
167
+ densityCycleShortHint: "Clic para cambiar",
168
+ },
169
+ import: {
170
+ title: "Importar {{object}}",
171
+ stepUpload: "Cargar",
172
+ stepMapping: "Asignación",
173
+ stepPreview: "Vista previa",
174
+ uploadDescription: "Cargue un archivo CSV para comenzar.",
175
+ mappingDescription: "Asigne columnas CSV a los campos del objeto.",
176
+ previewDescription: "Revise los datos antes de importar.",
177
+ dragDrop: "Arrastre el archivo CSV aquí o haga clic para buscar",
178
+ browseFiles: "Buscar archivos",
179
+ onlyCsv: "Solo se admiten archivos CSV.",
180
+ fileNeedsHeader: "El archivo debe tener una fila de encabezado y al menos una fila de datos.",
181
+ mappingTemplate: "Plantilla de asignación:",
182
+ chooseTemplate: "Elegir plantilla…",
183
+ noSavedTemplates: "Sin plantillas guardadas",
184
+ noneOption: "— Ninguno —",
185
+ saveCurrent: "Guardar actual",
186
+ templateName: "Nombre de la plantilla",
187
+ save: "Guardar",
188
+ deleteTemplate: "Eliminar plantilla",
189
+ csvColumn: "Columna CSV",
190
+ mapsTo: "Se asigna a",
191
+ status: "Estado",
192
+ skipColumn: "Omitir columna",
193
+ skip: "— Omitir —",
194
+ mapped: "Asignado",
195
+ skipped: "Omitido",
196
+ rowsWithErrors: "{{count}} fila(s) con errores",
197
+ rowsCorrected: "{{count}} fila(s) corregida(s)",
198
+ clickToFix: "— haga clic en una celda resaltada para editar en línea.",
199
+ showingRows: "Mostrando {{shown}} de {{total}} filas",
200
+ importing: "Importando… {{progress}}%",
201
+ importComplete: "Importación completada",
202
+ imported: "{{count}} importado(s)",
203
+ skippedCount: "{{count}} omitido(s)",
204
+ moreErrors: "…y {{count}} error(es) más",
205
+ cancel: "Cancelar",
206
+ back: "Atrás",
207
+ next: "Siguiente",
208
+ close: "Cerrar",
209
+ importNRows: "Importar {{count}} filas",
210
+ importingProgress: "Importando…",
211
+ requiredMark: "*",
212
+ required: "Obligatorio",
213
+ invalidType: "{{type}} inválido",
214
+ },
109
215
  },
110
216
  calendar: {
111
- today: 'Hoy',
112
- month: 'Mes',
113
- week: 'Semana',
114
- day: 'Día',
115
- agenda: 'Agenda',
116
- allDay: 'Todo el día',
117
- noEvents: 'Sin eventos',
118
- newEvent: 'Nuevo evento',
119
- moreEvents: '+{{count}} más',
217
+ today: "Hoy",
218
+ month: "Mes",
219
+ week: "Semana",
220
+ day: "Día",
221
+ agenda: "Agenda",
222
+ allDay: "Todo el día",
223
+ noEvents: "Sin eventos",
224
+ newEvent: "Nuevo evento",
225
+ moreEvents: "+{{count}} más",
120
226
  },
121
227
  list: {
122
- recordCount: '{{count}} registros',
123
- recordCountOne: '{{count}} registro',
124
- addRecord: 'Agregar registro',
125
- tabs: 'Pestañas',
126
- allRecords: 'Todos los registros',
127
- search: 'Buscar',
128
- filter: 'Filtrar',
129
- filterRecords: 'Filtrar registros',
130
- sort: 'Ordenar',
131
- sortRecords: 'Ordenar registros',
132
- group: 'Agrupar',
133
- groupBy: 'Agrupar por',
134
- export: 'Exportar',
135
- exportAs: 'Exportar como {{format}}',
136
- color: 'Color',
137
- rowColor: 'Color de fila',
138
- colorByField: 'Colorear por campo',
139
- clear: 'Borrar',
140
- none: 'Ninguno',
141
- hideFields: 'Ocultar campos',
142
- noItems: 'No se encontraron elementos',
143
- noItemsMessage: 'No hay registros para mostrar. Intente ajustar los filtros o agregar nuevos datos.',
228
+ loading: 'Loading records...',
229
+ recordCount: "{{count}} registros",
230
+ recordCountOne: "{{count}} registro",
231
+ addRecord: "Agregar registro",
232
+ tabs: "Pestañas",
233
+ allRecords: "Todos los registros",
234
+ search: "Buscar",
235
+ filter: "Filtrar",
236
+ filterRecords: "Filtrar registros",
237
+ sort: "Ordenar",
238
+ sortRecords: "Ordenar registros",
239
+ group: "Agrupar",
240
+ groupBy: "Agrupar por",
241
+ export: "Exportar",
242
+ exportAs: "Exportar como {{format}}",
243
+ color: "Color",
244
+ rowColor: "Color de fila",
245
+ colorByField: "Colorear por campo",
246
+ clear: "Borrar",
247
+ none: "Ninguno",
248
+ hideFields: "Ocultar campos",
249
+ noItems: "No se encontraron elementos",
250
+ noItemsMessage: "No hay registros para mostrar. Intente ajustar los filtros o agregar nuevos datos.",
251
+ showAll: "Mostrar todo",
252
+ pullToRefresh: "Tirar para actualizar",
253
+ refreshing: "Actualizando…",
254
+ share: "Compartir",
255
+ print: "Imprimir",
256
+ hideFieldsTitle: "Ocultar campos",
257
+ dataLimitReached: "Se muestran los primeros {{limit}} registros. Puede haber más datos disponibles.",
258
+ viewSettings: "Configuración de vista",
259
+ viewSettingsHint: "Agrupación, color, densidad y campos visibles.",
260
+ addGroup: "Agregar campo de grupo",
261
+ collapsedByDefault: "Contraído por defecto",
262
+ removeGroup: "Eliminar",
144
263
  },
145
264
  kanban: {
146
- addCard: 'Añadir tarjeta',
147
- addColumn: 'Añadir columna',
148
- moveCard: 'Mover tarjeta',
149
- deleteCard: 'Eliminar tarjeta',
150
- deleteColumn: 'Eliminar columna',
265
+ addCard: "Añadir tarjeta",
266
+ addColumn: "Añadir columna",
267
+ moveCard: "Mover tarjeta",
268
+ deleteCard: "Eliminar tarjeta",
269
+ deleteColumn: "Eliminar columna",
270
+ noCards: "Sin tarjetas",
271
+ cardTitlePlaceholder: "Escriba el título de la tarjeta...",
151
272
  },
152
273
  timeline: {
153
274
  bucket: {
154
- overdue: 'Atrasado',
155
- today: 'Hoy',
156
- tomorrow: 'Mañana',
157
- thisWeek: 'Esta semana',
158
- nextWeek: 'Próxima semana',
159
- later: 'Más tarde',
160
- noDate: 'Sin fecha',
161
- unassigned: 'Sin asignar',
275
+ overdue: "Atrasado",
276
+ today: "Hoy",
277
+ tomorrow: "Mañana",
278
+ thisWeek: "Esta semana",
279
+ nextWeek: "Próxima semana",
280
+ later: "Más tarde",
281
+ noDate: "Sin fecha",
282
+ unassigned: "Sin asignar",
162
283
  },
163
284
  },
164
285
  gantt: {
165
286
  column: {
166
- taskName: 'Task Name',
167
- start: 'Start',
168
- end: 'End',
287
+ taskName: "Nombre de tarea",
288
+ start: "Inicio",
289
+ end: "Fin",
169
290
  },
170
291
  toolbar: {
171
- prevPeriod: 'Previous period',
172
- nextPeriod: 'Next period',
173
- zoomIn: 'Zoom in',
174
- zoomOut: 'Zoom out',
175
- jumpToToday: 'Jump to today',
176
- today: 'Today',
177
- showTaskList: 'Show task list',
178
- hideTaskList: 'Hide task list',
292
+ prevPeriod: "Período anterior",
293
+ nextPeriod: "Período siguiente",
294
+ zoomIn: "Acercar",
295
+ zoomOut: "Alejar",
296
+ jumpToToday: "Ir a hoy",
297
+ today: "Hoy",
298
+ showTaskList: "Mostrar lista de tareas",
299
+ hideTaskList: "Ocultar lista de tareas",
179
300
  },
180
301
  },
181
302
  view: {
182
- rename: 'Renombrar',
183
- duplicateView: 'Duplicar vista',
184
- shareView: 'Compartir vista',
185
- setAsDefault: 'Establecer como predeterminada',
186
- pinView: 'Fijar vista',
187
- unpinView: 'Desfijar vista',
188
- changeViewType: 'Cambiar tipo de vista',
189
- deleteView: 'Eliminar vista',
190
- addView: 'Añadir vista',
191
- unsavedChanges: 'Cambios sin guardar',
192
- saveAsView: 'Guardar como vista',
193
- moreViews: '{{count}} más',
194
- activeFilters: 'Filtros activos',
195
- activeSort: 'Orden activo',
303
+ editViewConfig: "Editar configuración de vista",
304
+ rename: "Renombrar",
305
+ duplicateView: "Duplicar vista",
306
+ shareView: "Compartir vista",
307
+ setAsDefault: "Establecer como predeterminada",
308
+ pinView: "Fijar vista",
309
+ unpinView: "Desfijar vista",
310
+ changeViewType: "Cambiar tipo de vista",
311
+ deleteView: "Eliminar vista",
312
+ addView: "Añadir vista",
313
+ unsavedChanges: "Cambios sin guardar",
314
+ saveAsView: "Guardar como vista",
315
+ moreViews: "{{count}} más",
316
+ activeFilters: "Filtros activos",
317
+ activeSort: "Orden activo",
318
+ manageViews: "Administrar vistas",
319
+ manageAllViews: "Administrar todas las vistas…",
320
+ manageViewsDescription: "Reordenar, renombrar, fijar o eliminar todas las vistas de este objeto.",
321
+ searchViews: "Buscar vistas",
322
+ addNewView: "Agregar nueva vista",
323
+ done: "Listo",
324
+ noViewsFound: "Ninguna vista coincide con su búsqueda.",
325
+ dragToReorder: "Arrastrar para reordenar",
326
+ defaultView: "Vista predeterminada",
327
+ defaultBadge: "predeterminada",
328
+ tabActionsFor: "Acciones de vista para {{name}}",
329
+ readonlyAriaLabel: "Vista de solo lectura",
330
+ readonlyTooltip: "Vista del sistema — duplique para personalizar.",
331
+ },
332
+ designer: {
333
+ undo: 'Undo',
334
+ redo: 'Redo',
196
335
  },
197
336
  detail: {
198
- back: 'Volver',
199
- edit: 'Editar',
200
- editInline: 'Editar',
201
- save: 'Guardar',
202
- saveChanges: 'Guardar cambios',
203
- editFieldsInline: 'Editar campos',
204
- share: 'Compartir',
205
- duplicate: 'Duplicar',
206
- export: 'Exportar',
207
- viewHistory: 'Ver historial',
208
- delete: 'Eliminar',
209
- moreActions: 'Más acciones',
210
- addToFavorites: 'Añadir a favoritos',
211
- removeFromFavorites: 'Quitar de favoritos',
212
- previousRecord: 'Registro anterior',
213
- nextRecord: 'Siguiente registro',
214
- recordOf: '{{current}} de {{total}}',
215
- recordNotFound: 'Registro no encontrado',
216
- recordNotFoundDescription: 'El registro que busca no existe o puede haber sido eliminado.',
217
- goBack: 'Volver',
218
- details: 'Detalles',
219
- related: 'Relacionados',
220
- relatedRecords: '{{count}} registros',
221
- relatedRecordOne: '{{count}} registro',
222
- noRelatedRecords: 'No se encontraron registros relacionados',
223
- loading: 'Cargando...',
224
- copyToClipboard: 'Copiar al portapapeles',
225
- copied: '¡Copiado!',
226
- deleteConfirmation: '¿Está seguro de que desea eliminar este registro?',
227
- editRecord: 'Editar registro',
228
- viewAll: 'Ver todo',
229
- new: 'Nuevo',
230
- emptyValue: '—',
231
- comments: 'Comentarios',
232
- searchComments: 'Buscar comentarios…',
233
- addCommentPlaceholder: 'Añadir comentario… (Ctrl+Enter para enviar)',
234
- noMatchingComments: 'No hay comentarios coincidentes',
235
- noCommentsYet: 'Aún no hay comentarios',
236
- pinned: 'Fijado',
237
- pin: 'Fijar',
238
- unpin: 'Desfijar',
239
- justNow: 'justo ahora',
240
- minutesAgo: 'hace {{count}} min',
241
- hoursAgo: 'hace {{count}} h',
242
- daysAgo: 'hace {{count}} d',
243
- dropFilesToUpload: 'Arrastra archivos aquí o haz clic para subir',
244
- attachmentCount: '{{count}} archivo adjunto',
245
- attachmentCountPlural: '{{count}} archivos adjuntos',
246
- removeAttachment: 'Eliminar adjunto',
247
- unifiedDiff: 'Vista unificada',
248
- sideBySideDiff: 'Vista lado a lado',
249
- noChanges: 'Sin cambios',
250
- previousVersion: 'Anterior',
251
- currentVersion: 'Actual',
252
- discussion: 'Discusión',
253
- showDiscussion: 'Mostrar discusión ({{count}})',
254
- hideDiscussion: 'Ocultar discusión',
255
- bold: 'Negrita (Ctrl+B)',
256
- italic: 'Cursiva (Ctrl+I)',
257
- listFormat: 'Lista',
258
- inlineCode: 'Código en línea',
259
- mentionSomeone: 'Mencionar a alguien',
260
- preview: 'Vista previa',
261
- submitComment: 'Enviar (Ctrl+Enter)',
262
- sendComment: 'Enviar',
263
- writeComment: 'Escribe un comentario…',
264
- subscribedTooltip: 'Suscrito — clic para cancelar suscripción',
265
- unsubscribedTooltip: 'Suscribirse a notificaciones',
266
- firstRecord: 'Primer registro (Inicio)',
267
- previousRecordKey: 'Registro anterior (←)',
268
- nextRecordKey: 'Siguiente registro (→)',
269
- lastRecord: 'Último registro (Fin)',
270
- noRecords: 'Sin registros',
271
- searchWhileNavigating: 'Buscar mientras navegas',
272
- searchRecords: 'Buscar registros…',
273
- allActivity: 'Toda la actividad',
274
- commentsOnly: 'Solo comentarios',
275
- fieldChangesFilter: 'Cambios de campo',
276
- tasksOnly: 'Solo tareas',
277
- leaveCommentPlaceholder: 'Deja un comentario… (Ctrl+Enter para enviar)',
278
- noActivity: 'Sin actividad registrada',
279
- loadMore: 'Cargar más',
280
- edited: '(editado)',
281
- via: 'vía {{source}}',
282
- replyCount: '{{count}} respuesta',
283
- replyCountPlural: '{{count}} respuestas',
284
- replyPlaceholder: 'Responder…',
285
- filterActivity: 'Filtrar actividad',
286
- openDiscussion: 'Abrir panel de discusión',
287
- closeDiscussion: 'Cerrar panel de discusión',
288
- subscribeAriaLabel: 'Suscribirse a notificaciones',
289
- unsubscribeAriaLabel: 'Cancelar suscripción a notificaciones',
290
- clearSearch: 'Borrar búsqueda',
337
+ back: "Volver",
338
+ edit: "Editar",
339
+ editInline: "Editar",
340
+ save: "Guardar",
341
+ saveChanges: "Guardar cambios",
342
+ editFieldsInline: "Editar campos",
343
+ share: "Compartir",
344
+ duplicate: "Duplicar",
345
+ export: "Exportar",
346
+ viewHistory: "Ver historial",
347
+ delete: "Eliminar",
348
+ moreActions: "Más acciones",
349
+ addToFavorites: "Añadir a favoritos",
350
+ removeFromFavorites: "Quitar de favoritos",
351
+ previousRecord: "Registro anterior",
352
+ nextRecord: "Siguiente registro",
353
+ recordOf: "{{current}} de {{total}}",
354
+ recordNotFound: "Registro no encontrado",
355
+ recordNotFoundDescription: "El registro que busca no existe o puede haber sido eliminado.",
356
+ goBack: "Volver",
357
+ details: "Detalles",
358
+ related: "Relacionados",
359
+ relatedRecords: "{{count}} registros",
360
+ relatedRecordOne: "{{count}} registro",
361
+ noRelatedRecords: "No se encontraron registros relacionados",
362
+ loading: "Cargando...",
363
+ copyToClipboard: "Copiar al portapapeles",
364
+ copied: "¡Copiado!",
365
+ deleteConfirmation: "¿Está seguro de que desea eliminar este registro?",
366
+ editRecord: "Editar registro",
367
+ viewAll: "Ver todo",
368
+ new: "Nuevo",
369
+ emptyValue: "—",
370
+ comments: "Comentarios",
371
+ searchComments: "Buscar comentarios…",
372
+ addCommentPlaceholder: "Añadir comentario… (Ctrl+Enter para enviar)",
373
+ noMatchingComments: "No hay comentarios coincidentes",
374
+ noCommentsYet: "Aún no hay comentarios",
375
+ pinned: "Fijado",
376
+ pin: "Fijar",
377
+ unpin: "Desfijar",
378
+ justNow: "justo ahora",
379
+ minutesAgo: "hace {{count}} min",
380
+ hoursAgo: "hace {{count}} h",
381
+ daysAgo: "hace {{count}} d",
382
+ dropFilesToUpload: "Arrastra archivos aquí o haz clic para subir",
383
+ attachmentCount: "{{count}} archivo adjunto",
384
+ attachmentCountPlural: "{{count}} archivos adjuntos",
385
+ removeAttachment: "Eliminar adjunto",
386
+ unifiedDiff: "Vista unificada",
387
+ sideBySideDiff: "Vista lado a lado",
388
+ noChanges: "Sin cambios",
389
+ previousVersion: "Anterior",
390
+ currentVersion: "Actual",
391
+ discussion: "Discusión",
392
+ showDiscussion: "Mostrar discusión ({{count}})",
393
+ hideDiscussion: "Ocultar discusión",
394
+ bold: "Negrita (Ctrl+B)",
395
+ italic: "Cursiva (Ctrl+I)",
396
+ listFormat: "Lista",
397
+ inlineCode: "Código en línea",
398
+ mentionSomeone: "Mencionar a alguien",
399
+ preview: "Vista previa",
400
+ submitComment: "Enviar (Ctrl+Enter)",
401
+ sendComment: "Enviar",
402
+ writeComment: "Escribe un comentario…",
403
+ subscribedTooltip: "Suscrito — clic para cancelar suscripción",
404
+ unsubscribedTooltip: "Suscribirse a notificaciones",
405
+ firstRecord: "Primer registro (Inicio)",
406
+ previousRecordKey: "Registro anterior (←)",
407
+ nextRecordKey: "Siguiente registro (→)",
408
+ lastRecord: "Último registro (Fin)",
409
+ noRecords: "Sin registros",
410
+ searchWhileNavigating: "Buscar mientras navegas",
411
+ searchRecords: "Buscar registros…",
412
+ allActivity: "Toda la actividad",
413
+ commentsOnly: "Solo comentarios",
414
+ fieldChangesFilter: "Cambios de campo",
415
+ tasksOnly: "Solo tareas",
416
+ leaveCommentPlaceholder: "Deja un comentario… (Ctrl+Enter para enviar)",
417
+ noActivity: "Sin actividad registrada",
418
+ loadMore: "Cargar más",
419
+ edited: "(editado)",
420
+ via: "vía {{source}}",
421
+ replyCount: "{{count}} respuesta",
422
+ replyCountPlural: "{{count}} respuestas",
423
+ replyPlaceholder: "Responder…",
424
+ filterActivity: "Filtrar actividad",
425
+ openDiscussion: "Abrir panel de discusión",
426
+ closeDiscussion: "Cerrar panel de discusión",
427
+ subscribeAriaLabel: "Suscribirse a notificaciones",
428
+ unsubscribeAriaLabel: "Cancelar suscripción a notificaciones",
429
+ clearSearch: "Borrar búsqueda",
430
+ saving: "Guardando…",
431
+ lockedByApproval: "Bloqueado para aprobación",
432
+ lockedTooltip: "Este registro tiene una solicitud de aprobación pendiente; la edición está bloqueada",
433
+ cancelApproval: "Cancelar aprobación",
434
+ cancelApprovalInFlight: "Cancelando…",
435
+ cancelApprovalTooltip: "Cancelar la solicitud de aprobación pendiente para desbloquear el registro",
436
+ cancelApprovalFailed: "No se pudo cancelar la aprobación",
437
+ cancelApprovalUnavailable: "La cancelación de aprobaciones no es compatible con esta fuente de datos",
438
+ linkCopied: "Enlace copiado al portapapeles",
439
+ linkCopyFailed: "No se pudo copiar el enlace",
440
+ cancel: "Cancelar",
441
+ cancelEdit: "Descartar cambios",
442
+ sectionMoreDetails: "Más detalles",
443
+ concurrentUpdateTitle: "Este registro fue modificado por otra persona",
444
+ concurrentUpdateDescription: "Otro usuario guardó una versión más reciente de {{field}} mientras editaba. Elija cómo resolver el conflicto.",
445
+ concurrentUpdateYourEdit: "Su edición",
446
+ concurrentUpdateCurrentValue: "Valor actual",
447
+ concurrentUpdateUpdatedBy: "Actualizado por {{name}}",
448
+ concurrentUpdateUpdatedAt: "Actualizado el {{when}}",
449
+ concurrentUpdateReload: "Cargar versión actual",
450
+ concurrentUpdateOverwrite: "Sobrescribir de todos modos",
451
+ concurrentUpdateCancel: "Cancelar",
452
+ openInNewTab: "Abrir en nueva pestaña",
453
+ activity: "Actividad",
454
+ history: "Historial",
455
+ editRow: "Editar",
456
+ deleteRow: "Eliminar",
457
+ deleteRowConfirmation: "¿Eliminar este registro?",
458
+ deleteRowTitle: "Eliminar registro",
459
+ actions: "Acciones",
460
+ previousPage: "Anterior",
461
+ nextPage: "Siguiente",
462
+ pageOf: "Página {{current}} de {{total}}",
463
+ sortBy: "Ordenar por",
464
+ filterPlaceholder: "Filtrar...",
465
+ highlightFields: "Campos clave",
466
+ createdBy: "Creado por",
467
+ updatedBy: "Actualizado por",
468
+ showEmptyRelated_one: "+ {{count}} vacío",
469
+ showEmptyRelated_other: "+ {{count}} vacíos",
470
+ copyEmail: "Copiar correo",
471
+ copyPhone: "Copiar teléfono",
472
+ copyRecordId: "Copiar ID de registro",
473
+ showEmptyFields: "Mostrar {{count}} campos vacíos",
474
+ hideEmptyFields: "Ocultar campos vacíos",
475
+ noValue: "Sin valor",
291
476
  },
292
477
  chart: {
293
- noData: 'No hay datos de gráfico disponibles',
294
- loading: 'Cargando gráfico...',
478
+ noData: "No hay datos de gráfico disponibles",
479
+ loading: "Cargando gráfico...",
295
480
  },
296
481
  map: {
297
- searchLocations: 'Buscar ubicaciones…',
298
- locationDetails: 'Detalles de ubicación',
299
- markersCount: '{{count}} marcadores',
300
- invalidCoordinates: '{{count}} registro con coordenadas faltantes o inválidas excluido del mapa.',
301
- invalidCoordinatesPlural: '{{count}} registros con coordenadas faltantes o inválidas excluidos del mapa.',
482
+ searchLocations: "Buscar ubicaciones…",
483
+ locationDetails: "Detalles de ubicación",
484
+ markersCount: "{{count}} marcadores",
485
+ invalidCoordinates: "{{count}} registro con coordenadas faltantes o inválidas excluido del mapa.",
486
+ invalidCoordinatesPlural: "{{count}} registros con coordenadas faltantes o inválidas excluidos del mapa.",
302
487
  },
303
488
  workflow: {
304
- draft: 'Borrador',
305
- active: 'Activo',
306
- paused: 'En pausa',
307
- completed: 'Completado',
308
- cancelled: 'Cancelado',
309
- save: 'Guardar',
310
- publish: 'Publicar',
311
- addNode: 'Añadir nodo',
312
- workflowFlow: 'Flujo de trabajo',
313
- properties: 'Propiedades',
314
- connections: 'Conexiones',
315
- quickConnect: 'Conexión rápida',
316
- fromPlaceholder: 'Desde...',
317
- toPlaceholder: 'Hasta...',
318
- connect: 'Conectar',
319
- label: 'Etiqueta',
320
- type: 'Tipo',
321
- description: 'Descripción',
322
- assignee: 'Responsable',
323
- assigneeType: 'Tipo de responsable',
324
- user: 'Usuario',
325
- role: 'Rol',
326
- group: 'Grupo',
327
- expression: 'Expresión',
328
- timeoutMinutes: 'Tiempo límite (minutos)',
329
- selectNodeToEdit: 'Selecciona un nodo para editar sus propiedades',
330
- workflowTitle: 'Título del flujo de trabajo',
331
- newWorkflow: 'Nuevo flujo de trabajo',
332
- outConnections: '{{count}} salida(s)',
333
- start: 'Inicio',
334
- end: 'Fin',
335
- task: 'Tarea',
336
- userTask: 'Tarea de usuario',
337
- serviceTask: 'Tarea de servicio',
338
- scriptTask: 'Tarea de script',
339
- approval: 'Aprobación',
340
- condition: 'Condición',
341
- parallelGateway: 'Compuerta paralela',
342
- joinGateway: 'Compuerta de unión',
343
- boundaryEvent: 'Evento límite',
344
- delay: 'Retraso',
345
- notification: 'Notificación',
346
- webhook: 'Webhook',
347
- allowConcurrency: 'Permitir (ejecución simultánea)',
348
- forbidConcurrency: 'Prohibir (omitir nuevos)',
349
- replaceConcurrency: 'Reemplazar (cancelar existentes)',
350
- queueConcurrency: 'Cola (ejecutar después)',
351
- conditionEvent: 'Condición',
352
- manualEvent: 'Manual',
353
- webhookEvent: 'Webhook',
354
- timerEvent: 'Temporizador',
355
- signalEvent: 'Señal',
356
- versionHistory: 'Historial de versiones',
357
- importBpmn: 'Importar BPMN',
358
- exportBpmn: 'Exportar BPMN',
359
- undo: 'Deshacer',
360
- redo: 'Rehacer',
361
- resetZoom: 'Restablecer zoom',
489
+ draft: "Borrador",
490
+ active: "Activo",
491
+ paused: "En pausa",
492
+ completed: "Completado",
493
+ cancelled: "Cancelado",
494
+ save: "Guardar",
495
+ publish: "Publicar",
496
+ addNode: "Añadir nodo",
497
+ workflowFlow: "Flujo de trabajo",
498
+ properties: "Propiedades",
499
+ connections: "Conexiones",
500
+ quickConnect: "Conexión rápida",
501
+ fromPlaceholder: "Desde...",
502
+ toPlaceholder: "Hasta...",
503
+ connect: "Conectar",
504
+ label: "Etiqueta",
505
+ type: "Tipo",
506
+ description: "Descripción",
507
+ assignee: "Responsable",
508
+ assigneeType: "Tipo de responsable",
509
+ user: "Usuario",
510
+ role: "Rol",
511
+ group: "Grupo",
512
+ expression: "Expresión",
513
+ timeoutMinutes: "Tiempo límite (minutos)",
514
+ selectNodeToEdit: "Selecciona un nodo para editar sus propiedades",
515
+ workflowTitle: "Título del flujo de trabajo",
516
+ newWorkflow: "Nuevo flujo de trabajo",
517
+ outConnections: "{{count}} salida(s)",
518
+ start: "Inicio",
519
+ end: "Fin",
520
+ task: "Tarea",
521
+ userTask: "Tarea de usuario",
522
+ serviceTask: "Tarea de servicio",
523
+ scriptTask: "Tarea de script",
524
+ approval: "Aprobación",
525
+ condition: "Condición",
526
+ parallelGateway: "Compuerta paralela",
527
+ joinGateway: "Compuerta de unión",
528
+ boundaryEvent: "Evento límite",
529
+ delay: "Retraso",
530
+ notification: "Notificación",
531
+ webhook: "Webhook",
532
+ allowConcurrency: "Permitir (ejecución simultánea)",
533
+ forbidConcurrency: "Prohibir (omitir nuevos)",
534
+ replaceConcurrency: "Reemplazar (cancelar existentes)",
535
+ queueConcurrency: "Cola (ejecutar después)",
536
+ conditionEvent: "Condición",
537
+ manualEvent: "Manual",
538
+ webhookEvent: "Webhook",
539
+ timerEvent: "Temporizador",
540
+ signalEvent: "Señal",
541
+ versionHistory: "Historial de versiones",
542
+ importBpmn: "Importar BPMN",
543
+ exportBpmn: "Exportar BPMN",
544
+ undo: "Deshacer",
545
+ redo: "Rehacer",
546
+ resetZoom: "Restablecer zoom",
362
547
  },
363
548
  dashboard: {
364
- addWidget: 'Añadir widget',
365
- removeWidget: 'Eliminar widget',
366
- editLayout: 'Editar diseño',
367
- saveLayout: 'Guardar diseño',
368
- resetLayout: 'Restablecer diseño',
549
+ addWidget: "Añadir widget",
550
+ removeWidget: "Eliminar widget",
551
+ editLayout: "Editar diseño",
552
+ saveLayout: "Guardar diseño",
553
+ resetLayout: "Restablecer diseño",
554
+ total: "Total",
555
+ noDataAvailable: "Sin datos disponibles",
556
+ noDataSourceFor: "Sin fuente de datos para",
557
+ trend: {
558
+ vsLastQuarter: "vs. trimestre anterior",
559
+ vsLastMonth: "vs. mes anterior",
560
+ vsLastWeek: "vs. semana anterior",
561
+ vsLastYear: "vs. año anterior",
562
+ vsYesterday: "vs. ayer",
563
+ vsPreviousPeriod: "vs. período anterior",
564
+ },
369
565
  },
370
566
  configPanel: {
371
- save: 'Guardar',
372
- discard: 'Descartar',
373
- close: 'Cerrar',
374
- layout: 'Diseño',
375
- columns: 'Columnas',
376
- gap: 'Espaciado',
377
- rowHeight: 'Altura de fila',
378
- data: 'Datos',
379
- refreshInterval: 'Intervalo de actualización',
380
- appearance: 'Apariencia',
381
- title: 'Título',
382
- showDescription: 'Mostrar descripción',
383
- theme: 'Tema',
384
- configuration: 'Configuración',
385
- general: 'General',
386
- advanced: 'Avanzado',
567
+ save: "Guardar",
568
+ discard: "Descartar",
569
+ close: "Cerrar",
570
+ layout: "Diseño",
571
+ columns: "Columnas",
572
+ gap: "Espaciado",
573
+ rowHeight: "Altura de fila",
574
+ data: "Datos",
575
+ refreshInterval: "Intervalo de actualización",
576
+ appearance: "Apariencia",
577
+ title: "Título",
578
+ showDescription: "Mostrar descripción",
579
+ theme: "Tema",
580
+ configuration: "Configuración",
581
+ general: "General",
582
+ advanced: "Avanzado",
387
583
  },
388
584
  appDesigner: {
389
- createApp: 'Crear aplicación',
390
- editApp: 'Editar aplicación',
391
- basicInfo: 'Información básica',
392
- objects: 'Objetos',
393
- navigation: 'Navegación',
394
- branding: 'Marca',
395
- appName: 'Nombre de la app',
396
- appTitle: 'Título',
397
- appDescription: 'Descripción',
398
- appIcon: 'Ícono',
399
- template: 'Plantilla',
400
- layout: 'Diseño',
401
- layoutSidebar: 'Barra lateral',
402
- layoutHeader: 'Encabezado',
403
- layoutEmpty: 'Vacío',
404
- selectObjects: 'Seleccionar objetos',
405
- searchObjects: 'Buscar objetos…',
406
- selectAll: 'Seleccionar todo',
407
- deselectAll: 'Deseleccionar todo',
408
- navBuilder: 'Constructor de navegación',
409
- addGroup: 'Agregar grupo',
410
- addUrl: 'Agregar URL',
411
- addSeparator: 'Agregar separador',
412
- noNavItems: 'Sin elementos de navegación.',
413
- logoUrl: 'URL del logo',
414
- primaryColor: 'Color principal',
415
- faviconUrl: 'URL del favicon',
416
- preview: 'Vista previa',
417
- complete: 'Completar',
418
- snakeCaseHint: 'Debe ser snake_case (ej. my_app)',
419
- modeEdit: 'Editar',
420
- modePreview: 'Vista previa',
421
- modeCode: 'Código',
422
- addWidget: 'Agregar widget',
423
- widgetProperties: 'Propiedades del widget',
424
- dataSource: 'Fuente de datos',
425
- valueField: 'Campo de valor',
426
- aggregate: 'Agregado',
427
- colorVariant: 'Variante de color',
428
- addComponent: 'Agregar componente',
429
- componentProperties: 'Propiedades del componente',
430
- viewType: 'Tipo de vista',
431
- fields: 'Campos',
432
- toolbar: 'Barra de herramientas',
433
- showSearch: 'Mostrar búsqueda',
434
- showFilters: 'Mostrar filtros',
435
- showSort: 'Mostrar orden',
436
- appearance: 'Apariencia',
437
- rowHeight: 'Altura de fila',
438
- stripedRows: 'Filas rayadas',
439
- bordered: 'Con borde',
440
- livePreview: 'Vista previa en vivo',
441
- stepBasicDesc: 'Nombre, título y diseño',
442
- stepObjectsDesc: 'Seleccionar objetos de negocio',
443
- stepNavigationDesc: 'Construir árbol de navegación',
444
- stepBrandingDesc: 'Logo, colores y favicon',
445
- noObjectsFound: 'No se encontraron objetos.',
446
- noNavItemsHint: 'Aún no hay elementos de navegación. Seleccione objetos en el paso anterior o agregue elementos manualmente.',
447
- separator: 'Separador',
448
- separatorLabel: '— Separador —',
449
- newGroup: 'Nuevo grupo',
450
- newLink: 'Nuevo enlace',
451
- saveDraft: 'Guardar borrador',
452
- cancelConfirmTitle: '¿Descartar cambios?',
453
- cancelConfirmMessage: 'Tiene cambios sin guardar. ¿Está seguro de que desea cancelar?',
454
- confirmDiscard: 'Descartar',
455
- keepEditing: 'Seguir editando',
456
- navNoItems: 'Sin elementos de navegación. Haga clic en los botones de arriba para agregar elementos.',
457
- navNoPreviewItems: 'Sin elementos',
458
- navLivePreview: 'Vista previa en vivo',
459
- navCollapseGroup: 'Contraer grupo',
460
- navExpandGroup: 'Expandir grupo',
461
- navAddChild: 'Agregar hijo',
462
- navMoveUp: 'Mover arriba',
463
- navMoveDown: 'Mover abajo',
464
- navRemove: 'Eliminar',
465
- navObjectPage: 'Página de objeto',
466
- navDashboard: 'Panel de control',
467
- navPage: 'Página',
468
- navReport: 'Informe',
469
- navGroup: 'Grupo',
470
- navUrl: 'URL',
471
- navSeparator: 'Separador',
472
- navTypeObject: 'Objeto',
473
- navTypeDashboard: 'Panel de control',
474
- navTypePage: 'Página',
475
- navTypeReport: 'Informe',
476
- navTypeUrl: 'URL',
477
- navTypeGroup: 'Grupo',
478
- navTypeSeparator: 'Separador',
479
- navTypeAction: 'Acción',
480
- navEditIcon: 'Editar icono',
481
- navToggleVisible: 'Alternar visibilidad',
482
- navHidden: 'Oculto',
483
- navExportSchema: 'Exportar JSON',
484
- navImportSchema: 'Importar JSON',
485
- navExportSuccess: 'Estructura de navegación exportada',
486
- navImportSuccess: 'Estructura de navegación importada',
487
- navImportError: 'JSON de navegación inválido',
488
- navIconPlaceholder: 'Nombre del icono (ej: Users)',
489
- dashboardEditor: 'Editor de panel',
490
- noWidgets: 'Sin widgets. Haz clic en un botón arriba para agregar uno.',
491
- widgetLayoutSize: 'Tamaño de diseño',
492
- widgetWidth: 'Ancho',
493
- widgetHeight: 'Alto',
494
- dashboardPreview: 'Vista previa del panel',
495
- noWidgetsPreview: 'Sin widgets para previsualizar',
496
- pageCanvasEditor: 'Editor de lienzo de página',
497
- emptyPage: 'Página vacía. Haz clic en un botón arriba para agregar un componente.',
498
- pagePreview: 'Vista previa de página',
499
- noComponentsPreview: 'Sin componentes para previsualizar',
500
- modePage: 'Página',
501
- modeDashboard: 'Panel',
502
- undo: 'Deshacer',
503
- redo: 'Rehacer',
504
- brandingEditor: 'Editor de marca',
505
- brandingExport: 'Exportar JSON',
506
- brandingImport: 'Importar JSON',
507
- brandingPreview: 'Vista previa',
508
- brandingSampleButton: 'Botón de ejemplo',
509
- brandingSampleText: 'Así se verá el tema de su marca.',
510
- colorPalette: 'Paleta de colores',
511
- fontFamily: 'Fuente',
512
- fontDefault: 'Predeterminada (Sistema)',
513
- modeLight: 'Claro',
514
- modeDark: 'Oscuro',
515
- mobilePreview: 'Vista previa móvil',
585
+ createApp: "Crear aplicación",
586
+ editApp: "Editar aplicación",
587
+ basicInfo: "Información básica",
588
+ objects: "Objetos",
589
+ navigation: "Navegación",
590
+ branding: "Marca",
591
+ appName: "Nombre de la app",
592
+ appTitle: "Título",
593
+ appDescription: "Descripción",
594
+ appIcon: "Icono",
595
+ template: "Plantilla",
596
+ layout: "Diseño",
597
+ layoutSidebar: "Barra lateral",
598
+ layoutHeader: "Encabezado",
599
+ layoutEmpty: "Vacío",
600
+ selectObjects: "Seleccionar objetos",
601
+ searchObjects: "Buscar objetos…",
602
+ selectAll: "Seleccionar todo",
603
+ deselectAll: "Deseleccionar todo",
604
+ navBuilder: "Constructor de navegación",
605
+ addGroup: "Agregar grupo",
606
+ addUrl: "Agregar URL",
607
+ addSeparator: "Agregar separador",
608
+ noNavItems: "Aún no hay elementos de navegación.",
609
+ logoUrl: "URL del logo",
610
+ primaryColor: "Color primario",
611
+ faviconUrl: "URL del favicon",
612
+ preview: "Vista previa",
613
+ complete: "Completar",
614
+ snakeCaseHint: "Debe ser snake_case (ej. my_app)",
615
+ modeEdit: "Editar",
616
+ modePreview: "Vista previa",
617
+ modeCode: "Código",
618
+ addWidget: "Agregar widget",
619
+ widgetProperties: "Propiedades del widget",
620
+ dataSource: "Fuente de datos",
621
+ valueField: "Campo de valor",
622
+ aggregate: "Agregar",
623
+ colorVariant: "Variante de color",
624
+ addComponent: "Agregar componente",
625
+ componentProperties: "Propiedades del componente",
626
+ viewType: "Tipo de vista",
627
+ fields: "Campos",
628
+ toolbar: "Barra de herramientas",
629
+ showSearch: "Mostrar búsqueda",
630
+ showFilters: "Mostrar filtros",
631
+ showSort: "Mostrar orden",
632
+ appearance: "Apariencia",
633
+ rowHeight: "Altura de fila",
634
+ stripedRows: "Filas alternadas",
635
+ bordered: "Con borde",
636
+ livePreview: "Vista previa en vivo",
637
+ stepBasicDesc: "Nombre, título y diseño",
638
+ stepObjectsDesc: "Seleccionar objetos de negocio",
639
+ stepNavigationDesc: "Construir árbol de navegación",
640
+ stepBrandingDesc: "Logo, colores y favicon",
641
+ noObjectsFound: "No se encontraron objetos.",
642
+ noNavItemsHint: "Aún no hay elementos de navegación. Seleccione objetos en el paso anterior o agregue elementos manualmente.",
643
+ separator: "Separador",
644
+ separatorLabel: "— Separador —",
645
+ newGroup: "Nuevo grupo",
646
+ newLink: "Nuevo enlace",
647
+ saveDraft: "Guardar borrador",
648
+ cancelConfirmTitle: "¿Descartar cambios?",
649
+ cancelConfirmMessage: "Tiene cambios sin guardar. ¿Está seguro de que desea cancelar?",
650
+ confirmDiscard: "Descartar",
651
+ keepEditing: "Seguir editando",
652
+ navNoItems: "Sin elementos de navegación. Haga clic en los botones de arriba para agregar elementos.",
653
+ navNoPreviewItems: "Sin elementos",
654
+ navLivePreview: "Vista previa en vivo",
655
+ navCollapseGroup: "Contraer grupo",
656
+ navExpandGroup: "Expandir grupo",
657
+ navAddChild: "Agregar hijo",
658
+ navMoveUp: "Mover arriba",
659
+ navMoveDown: "Mover abajo",
660
+ navRemove: "Eliminar",
661
+ navObjectPage: "Página de objeto",
662
+ navDashboard: "Panel de control",
663
+ navPage: "Página",
664
+ navReport: "Informe",
665
+ navGroup: "Grupo",
666
+ navUrl: "URL",
667
+ navSeparator: "Separador",
668
+ navTypeObject: "Objeto",
669
+ navTypeDashboard: "Panel",
670
+ navTypePage: "Página",
671
+ navTypeReport: "Informe",
672
+ navTypeUrl: "URL",
673
+ navTypeGroup: "Grupo",
674
+ navTypeSeparator: "Separador",
675
+ navTypeAction: "Acción",
676
+ navEditIcon: "Editar icono",
677
+ navToggleVisible: "Alternar visibilidad",
678
+ navHidden: "Oculto",
679
+ navExportSchema: "Exportar JSON",
680
+ navImportSchema: "Importar JSON",
681
+ navExportSuccess: "Esquema de navegación exportado",
682
+ navImportSuccess: "Esquema de navegación importado",
683
+ navImportError: "JSON de navegación inválido",
684
+ navIconPlaceholder: "Nombre del icono (ej. Users)",
685
+ dashboardEditor: "Editor de panel",
686
+ noWidgets: "Sin widgets. Haga clic en un botón arriba para agregar uno.",
687
+ widgetLayoutSize: "Tamaño de diseño",
688
+ widgetWidth: "Ancho",
689
+ widgetHeight: "Alto",
690
+ dashboardPreview: "Vista previa del panel",
691
+ noWidgetsPreview: "Sin widgets para previsualizar",
692
+ pageCanvasEditor: "Editor de lienzo de página",
693
+ emptyPage: "Página vacía. Haga clic en un botón arriba para agregar un componente.",
694
+ pagePreview: "Vista previa de página",
695
+ noComponentsPreview: "Sin componentes para previsualizar",
696
+ modePage: "Página",
697
+ modeDashboard: "Panel",
698
+ undo: "Deshacer",
699
+ redo: "Rehacer",
700
+ brandingEditor: "Editor de marca",
701
+ brandingExport: "Exportar JSON",
702
+ brandingImport: "Importar JSON",
703
+ brandingPreview: "Vista previa",
704
+ brandingSampleButton: "Botón de muestra",
705
+ brandingSampleText: "Así lucirá su tema de marca.",
706
+ colorPalette: "Paleta de colores",
707
+ fontFamily: "Familia tipográfica",
708
+ fontDefault: "Predeterminada (sistema)",
709
+ modeLight: "Claro",
710
+ modeDark: "Oscuro",
711
+ mobilePreview: "Vista previa móvil",
516
712
  objectManager: {
517
- title: 'Gestor de objetos',
518
- addObject: 'Nuevo objeto',
519
- searchPlaceholder: 'Buscar objetos…',
520
- noObjects: 'No se encontraron objetos.',
521
- objectName: 'Nombre API',
522
- objectLabel: 'Etiqueta',
523
- pluralLabel: 'Etiqueta plural',
524
- icon: 'Icono',
525
- selectIcon: 'Seleccionar icono…',
526
- group: 'Grupo',
527
- noGroup: 'Sin grupo',
528
- sortOrder: 'Orden',
529
- enabled: 'Habilitado',
530
- relationships: 'Relaciones',
531
- systemBadge: 'Sistema',
532
- fieldCount: '{{count}} campos',
533
- ungrouped: 'Sin agrupar',
534
- deleteConfirmTitle: '¿Eliminar objeto?',
535
- deleteConfirmMessage: 'El objeto y todos sus campos se eliminarán permanentemente. Esta acción no se puede deshacer.',
713
+ title: "Administrador de objetos",
714
+ addObject: "Nuevo objeto",
715
+ searchPlaceholder: "Buscar objetos…",
716
+ noObjects: "No se encontraron objetos.",
717
+ objectName: "Nombre API",
718
+ objectLabel: "Etiqueta",
719
+ pluralLabel: "Etiqueta plural",
720
+ icon: "Icono",
721
+ selectIcon: "Seleccionar icono…",
722
+ group: "Grupo",
723
+ noGroup: "Sin grupo",
724
+ sortOrder: "Orden de clasificación",
725
+ enabled: "Habilitado",
726
+ relationships: "Relaciones",
727
+ systemBadge: "Sistema",
728
+ fieldCount: "{{count}} campos",
729
+ ungrouped: "Sin grupo",
730
+ deleteConfirmTitle: "¿Eliminar objeto?",
731
+ deleteConfirmMessage: "Esto eliminará permanentemente el objeto y todos sus campos. Esta acción no se puede deshacer.",
536
732
  },
537
733
  fieldDesigner: {
538
- title: 'Diseñador de campos',
539
- addField: 'Nuevo campo',
540
- searchPlaceholder: 'Buscar campos…',
541
- allTypes: 'Todos los tipos',
542
- noFields: 'No se encontraron campos.',
543
- fieldName: 'Nombre API',
544
- fieldLabel: 'Etiqueta',
545
- fieldType: 'Tipo',
546
- fieldGroup: 'Grupo',
547
- description: 'Descripción',
548
- required: 'Obligatorio',
549
- unique: 'Único',
550
- readOnly: 'Solo lectura',
551
- hidden: 'Oculto',
552
- indexed: 'Indexado',
553
- externalId: 'ID externo',
554
- trackHistory: 'Rastrear historial',
555
- defaultValue: 'Valor predeterminado',
556
- placeholder: 'Texto de ejemplo',
557
- referenceTo: 'Referencia a',
558
- formula: 'Fórmula',
559
- options: 'Opciones',
560
- addOption: 'Agregar opción',
561
- validationRules: 'Reglas de validación',
562
- addRule: 'Agregar regla',
563
- systemBadge: 'Sistema',
564
- ungrouped: 'General',
565
- deleteConfirmTitle: '¿Eliminar campo?',
566
- deleteConfirmMessage: 'El campo se eliminará permanentemente. Los datos existentes en este campo se perderán.',
734
+ title: "Diseñador de campos",
735
+ addField: "Nuevo campo",
736
+ searchPlaceholder: "Buscar campos…",
737
+ allTypes: "Todos los tipos",
738
+ noFields: "No se encontraron campos.",
739
+ fieldName: "Nombre API",
740
+ fieldLabel: "Etiqueta",
741
+ fieldType: "Tipo",
742
+ fieldGroup: "Grupo",
743
+ description: "Descripción",
744
+ required: "Obligatorio",
745
+ unique: "Único",
746
+ readOnly: "Solo lectura",
747
+ hidden: "Oculto",
748
+ indexed: "Indexado",
749
+ externalId: "ID externo",
750
+ trackHistory: "Rastrear historial",
751
+ defaultValue: "Valor predeterminado",
752
+ placeholder: "Marcador de posición",
753
+ referenceTo: "Referencia a",
754
+ formula: "Fórmula",
755
+ options: "Opciones",
756
+ addOption: "Agregar opción",
757
+ validationRules: "Reglas de validación",
758
+ addRule: "Agregar regla",
759
+ systemBadge: "Sistema",
760
+ ungrouped: "General",
761
+ deleteConfirmTitle: "¿Eliminar campo?",
762
+ deleteConfirmMessage: "Esto eliminará permanentemente el campo. Los datos existentes en este campo se perderán.",
763
+ basicSection: "Básico",
764
+ typeSpecificSection: "Configuración de tipo",
765
+ advancedSection: "Avanzado",
766
+ typeCategory: {
767
+ text: "Texto",
768
+ number: "Número",
769
+ date: "Fecha y hora",
770
+ choice: "Elección",
771
+ relation: "Relación",
772
+ advanced: "Avanzado",
773
+ },
567
774
  },
568
775
  },
569
776
  console: {
570
- title: 'Consola ObjectStack',
571
- initializing: 'Inicializando aplicación...',
777
+ title: "Consola ObjectStack",
778
+ initializing: "Inicializando aplicación...",
572
779
  breadcrumb: {
573
- dashboards: 'Paneles',
574
- pages: 'Páginas',
575
- reports: 'Informes',
576
- system: 'Sistema',
780
+ dashboards: "Paneles",
781
+ pages: "Páginas",
782
+ reports: "Informes",
783
+ system: "Sistema",
577
784
  },
578
785
  loadingSteps: {
579
- connecting: 'Conectando a la fuente de datos',
580
- loadingConfig: 'Cargando configuración',
581
- preparingWorkspace: 'Preparando espacio de trabajo',
786
+ connecting: "Conectando a la fuente de datos",
787
+ loadingConfig: "Cargando configuración",
788
+ preparingWorkspace: "Preparando espacio de trabajo",
582
789
  },
583
790
  error: {
584
- connectionFailed: 'No se puede conectar al servidor',
585
- serverUnreachable: 'El servidor {{url}} no está accesible.',
586
- checkServer: 'Compruebe su conexión de red o que el backend esté en ejecución.',
587
- timeout: 'Tiempo de conexión agotado tras 10 segundos.',
791
+ connectionFailed: "No se puede conectar al servidor",
792
+ serverUnreachable: "El servidor {{url}} no está accesible.",
793
+ checkServer: "Compruebe su conexión de red o que el backend esté en ejecución.",
794
+ timeout: "Tiempo de conexión agotado tras 10 segundos.",
588
795
  },
589
796
  actions: {
590
- retry: 'Reintentar',
591
- retrying: 'Reintentando…',
797
+ retry: "Reintentar",
798
+ retrying: "Reintentando…",
592
799
  },
593
800
  shortcuts: {
594
- title: 'Atajos de teclado',
595
- description: 'Referencia rápida de todos los atajos de teclado disponibles.',
596
- groups: { general: 'General', navigation: 'Navegación', dataViews: 'Vistas de datos', preferences: 'Preferencias' },
597
- openCommandPalette: 'Abrir paleta de comandos',
598
- showShortcuts: 'Mostrar atajos de teclado',
599
- closeDialog: 'Cerrar diálogo / panel',
600
- toggleSidebar: 'Alternar barra lateral',
601
- focusSearch: 'Enfocar búsqueda',
602
- createRecord: 'Crear nuevo registro',
603
- refreshData: 'Actualizar datos',
604
- editRecord: 'Editar registro seleccionado',
605
- toggleDarkMode: 'Alternar modo oscuro',
801
+ title: "Atajos de teclado",
802
+ description: "Referencia rápida de todos los atajos de teclado disponibles.",
803
+ groups: {
804
+ general: "General",
805
+ navigation: "Navegación",
806
+ dataViews: "Vistas de datos",
807
+ preferences: "Preferencias",
808
+ },
809
+ openCommandPalette: "Abrir paleta de comandos",
810
+ showShortcuts: "Mostrar atajos de teclado",
811
+ closeDialog: "Cerrar diálogo / panel",
812
+ toggleSidebar: "Alternar barra lateral",
813
+ focusSearch: "Enfocar búsqueda",
814
+ createRecord: "Crear nuevo registro",
815
+ refreshData: "Actualizar datos",
816
+ editRecord: "Editar registro seleccionado",
817
+ toggleDarkMode: "Alternar modo oscuro",
606
818
  },
607
819
  commandPalette: {
608
- placeholder: 'Escriba un comando o busque...',
609
- noResults: 'No se encontraron resultados.',
610
- objects: 'Objetos',
611
- dashboards: 'Paneles',
612
- pages: 'Páginas',
613
- reports: 'Informes',
614
- switchApp: 'Cambiar aplicación',
615
- current: 'Actual',
616
- preferences: 'Preferencias',
617
- lightTheme: 'Tema claro',
618
- darkTheme: 'Tema oscuro',
619
- systemTheme: 'Tema del sistema',
620
- actions: 'Acciones',
621
- openFullSearch: 'Abrir página de búsqueda completa',
622
- createApp: 'Crear nueva aplicación',
820
+ placeholder: "Escriba un comando o busque...",
821
+ noResults: "No se encontraron resultados.",
822
+ objects: "Objetos",
823
+ dashboards: "Paneles",
824
+ pages: "Páginas",
825
+ reports: "Informes",
826
+ switchApp: "Cambiar aplicación",
827
+ current: "Actual",
828
+ preferences: "Preferencias",
829
+ lightTheme: "Tema claro",
830
+ darkTheme: "Tema oscuro",
831
+ systemTheme: "Tema del sistema",
832
+ actions: "Acciones",
833
+ openFullSearch: "Abrir página de búsqueda completa",
834
+ createApp: "Crear nueva aplicación",
835
+ searching: "Buscando…",
836
+ records: "Registros",
837
+ recentRecords: "Visto recientemente",
623
838
  },
624
839
  errors: {
625
- somethingWentWrong: 'Algo salió mal',
626
- unexpectedError: 'Ocurrió un error inesperado al renderizar esta vista.',
627
- tryAgain: 'Intentar de nuevo',
628
- goHome: 'Ir al inicio',
629
- errorDetails: 'Detalles del error (solo desarrollo)',
840
+ somethingWentWrong: "Algo salió mal",
841
+ unexpectedError: "Ocurrió un error inesperado al renderizar esta vista.",
842
+ tryAgain: "Intentar de nuevo",
843
+ goHome: "Ir al inicio",
844
+ errorDetails: "Detalles del error (solo desarrollo)",
630
845
  },
631
846
  theme: {
632
- toggle: 'Cambiar tema',
633
- light: 'Claro',
634
- dark: 'Oscuro',
635
- system: 'Sistema',
847
+ toggle: "Cambiar tema",
848
+ light: "Claro",
849
+ dark: "Oscuro",
850
+ system: "Sistema",
636
851
  },
637
852
  objectView: {
638
- objectNotFound: 'Objeto no encontrado',
639
- objectNotFoundDescription: 'El objeto "{{objectName}}" no existe en la configuración actual.',
640
- objectNotFoundHint: 'Verifique la configuración de navegación de su aplicación o seleccione un objeto diferente en la barra lateral.',
641
- allRecords: 'Todos los registros',
642
- exitDesignMode: 'Salir del modo de diseño',
643
- enterDesignMode: 'Entrar en modo de diseño',
644
- metadataInspector: 'Inspector de metadatos',
645
- editView: 'Editar vista',
646
- addView: 'Agregar vista',
647
- designTools: 'Herramientas de diseño',
648
- new: 'Nuevo',
649
- configureView: 'Configurar vista',
650
- closePanel: 'Cerrar panel',
651
- page: 'Página',
652
- pageConfigHint: 'Barra de herramientas, navegación y configuración del shell de vista',
653
- listConfigHint: 'Renderizado de datos, columnas y apariencia para este tipo de lista',
654
- general: 'General',
655
- generalHint: 'Título, descripción y tipo de la vista',
656
- toolbar: 'Barra de herramientas',
657
- toolbarHint: 'Búsqueda, filtro, orden, agrupación y alternancia de densidad',
658
- toolbarEnabledCount: '{{count}} de {{total}} habilitados',
659
- navigationSection: 'Navegación',
660
- navigationHint: 'Comportamiento al hacer clic en la fila y configuración de la vista detallada',
661
- records: 'Registros',
662
- recordsHint: 'Modo de selección, agregar registro y edición en línea',
663
- exportPrint: 'Exportar e imprimir',
664
- exportPrintHint: 'Formatos de exportación, impresión y visualización del recuento de registros',
665
- showAllFields: 'Mostrar todo',
666
- hideAllFields: 'Ocultar todo',
667
- searchFields: 'Buscar campos...',
668
- title: 'Título',
669
- description: 'Descripción',
670
- data: 'Datos',
671
- source: 'Fuente',
672
- columns: 'Columnas',
673
- filterBy: 'Filtrar por',
674
- sortBy: 'Ordenar por',
675
- appearance: 'Apariencia',
676
- showDescription: 'Mostrar descripción',
677
- viewType: 'Tipo de vista',
678
- userFilters: 'Filtros de usuario',
679
- enableSearch: 'Habilitar búsqueda',
680
- enableFilter: 'Habilitar filtro',
681
- enableSort: 'Habilitar ordenamiento',
682
- enableHideFields: 'Habilitar ocultar campos',
683
- enableGroup: 'Habilitar agrupación',
684
- enableColor: 'Habilitar color',
685
- enableDensity: 'Habilitar densidad',
686
- userActions: 'Acciones de usuario',
687
- addRecordViaForm: 'Agregar registros mediante formulario',
688
- advanced: 'Avanzado',
689
- allowExport: 'Permitir exportación',
690
- recordCount: '{{count}} registros',
691
- noDescription: 'Sin descripción',
692
- none: 'Ninguno',
693
- columnsConfigured: '{{count}} columnas',
694
- save: 'Guardar',
695
- discard: 'Descartar',
696
- createView: 'Crear vista',
697
- newView: 'Nueva vista',
698
- typeOptions: 'Opciones de tipo',
699
- groupByField: 'Campo de agrupación',
700
- startDateField: 'Campo de fecha de inicio',
701
- titleField: 'Campo de título',
702
- latitudeField: 'Campo de latitud',
703
- longitudeField: 'Campo de longitud',
704
- imageField: 'Campo de imagen',
705
- dateField: 'Campo de fecha',
706
- selectField: 'Seleccionar campo...',
707
- gridOptionsHint: 'La vista de cuadrícula usa las columnas configuradas arriba.',
708
- groupBy: 'Agrupar por',
709
- prefixField: 'Campo de prefijo',
710
- fields: 'Campos',
711
- fieldsVisible: '{{count}} visibles',
712
- sortsCount: '{{count}} ordenamientos',
713
- filtersCount: '{{count}} filtros',
714
- endDateField: 'Campo de fecha de fin',
715
- color: 'Color',
716
- fieldTextColor: 'Color del texto del campo',
717
- rowHeight: 'Altura de fila',
718
- wrapHeaders: 'Ajustar encabezados',
719
- showFieldDescriptions: 'Mostrar descripciones de campos',
720
- collapseAllByDefault: 'Contraer todo por defecto',
721
- striped: 'Filas alternadas',
722
- bordered: 'Celdas con borde',
723
- inlineEdit: 'Editar registros en línea',
724
- addDeleteRecordsInline: 'Agregar/eliminar registros en línea',
725
- clickIntoRecordDetails: 'Clic para detalles del registro',
726
- navigationMode: 'Modo de navegación',
727
- navigationWidth: 'Ancho de navegación',
728
- navigationWidthHint: 'Disponible para los modos de navegación cajón, modal y dividido',
729
- openNewTab: 'Abrir en nueva pestaña',
730
- openNewTabHint: 'Disponible para los modos de navegación página y nueva ventana',
853
+ systemViewReadonly: 'System view defined in code - duplicate to customize.',
854
+ expandToPage: 'Open as full page',
855
+ objectNotFound: "Objeto no encontrado",
856
+ objectNotFoundDescription: "El objeto \"{{objectName}}\" no existe en la configuración actual.",
857
+ objectNotFoundHint: "Verifique la configuración de navegación de su aplicación o seleccione un objeto diferente en la barra lateral.",
858
+ allRecords: "Todos los registros",
859
+ exitDesignMode: "Salir del modo de diseño",
860
+ enterDesignMode: "Entrar en modo de diseño",
861
+ metadataInspector: "Inspector de metadatos",
862
+ editView: "Editar vista",
863
+ addView: "Agregar vista",
864
+ designTools: "Herramientas de diseño",
865
+ new: "Nuevo",
866
+ configureView: "Configurar vista",
867
+ closePanel: "Cerrar panel",
868
+ page: "Página",
869
+ pageConfigHint: "Barra de herramientas, navegación y configuración del shell de vista",
870
+ listConfigHint: "Renderizado de datos, columnas y apariencia para este tipo de lista",
871
+ general: "General",
872
+ generalHint: "Título, descripción y tipo de la vista",
873
+ toolbar: "Barra de herramientas",
874
+ toolbarHint: "Búsqueda, filtro, orden, agrupación y alternancia de densidad",
875
+ toolbarEnabledCount: "{{count}} de {{total}} habilitados",
876
+ navigationSection: "Navegación",
877
+ navigationHint: "Comportamiento al hacer clic en la fila y configuración de la vista detallada",
878
+ records: "Registros",
879
+ recordsHint: "Modo de selección, agregar registro y edición en línea",
880
+ exportPrint: "Exportar e imprimir",
881
+ exportPrintHint: "Formatos de exportación, impresión y visualización del recuento de registros",
882
+ showAllFields: "Mostrar todo",
883
+ hideAllFields: "Ocultar todo",
884
+ searchFields: "Buscar campos...",
885
+ title: "Título",
886
+ description: "Descripción",
887
+ data: "Datos",
888
+ source: "Fuente",
889
+ columns: "Columnas",
890
+ filterBy: "Filtrar por",
891
+ sortBy: "Ordenar por",
892
+ appearance: "Apariencia",
893
+ showDescription: "Mostrar descripción",
894
+ viewType: "Tipo de vista",
895
+ userFilters: "Filtros de usuario",
896
+ enableSearch: "Habilitar búsqueda",
897
+ enableFilter: "Habilitar filtro",
898
+ enableSort: "Habilitar ordenamiento",
899
+ enableHideFields: "Habilitar ocultar campos",
900
+ enableGroup: "Habilitar agrupación",
901
+ enableColor: "Habilitar color",
902
+ enableDensity: "Habilitar densidad",
903
+ userActions: "Acciones de usuario",
904
+ addRecordViaForm: "Agregar registros mediante formulario",
905
+ advanced: "Avanzado",
906
+ allowExport: "Permitir exportación",
907
+ recordCount: "{{count}} registros",
908
+ noDescription: "Sin descripción",
909
+ none: "Ninguno",
910
+ columnsConfigured: "{{count}} columnas",
911
+ save: "Guardar",
912
+ discard: "Descartar",
913
+ createView: "Crear vista",
914
+ newView: "Nueva vista",
915
+ typeOptions: "Opciones de tipo",
916
+ groupByField: "Campo de agrupación",
917
+ startDateField: "Campo de fecha de inicio",
918
+ titleField: "Campo de título",
919
+ latitudeField: "Campo de latitud",
920
+ longitudeField: "Campo de longitud",
921
+ imageField: "Campo de imagen",
922
+ dateField: "Campo de fecha",
923
+ selectField: "Seleccionar campo...",
924
+ gridOptionsHint: "La vista de cuadrícula usa las columnas configuradas arriba.",
925
+ groupBy: "Agrupar por",
926
+ prefixField: "Campo de prefijo",
927
+ fields: "Campos",
928
+ fieldsVisible: "{{count}} visibles",
929
+ sortsCount: "{{count}} ordenamientos",
930
+ filtersCount: "{{count}} filtros",
931
+ endDateField: "Campo de fecha de fin",
932
+ color: "Color",
933
+ fieldTextColor: "Color del texto del campo",
934
+ rowHeight: "Altura de fila",
935
+ wrapHeaders: "Ajustar encabezados",
936
+ showFieldDescriptions: "Mostrar descripciones de campos",
937
+ collapseAllByDefault: "Contraer todo por defecto",
938
+ striped: "Filas alternadas",
939
+ bordered: "Celdas con borde",
940
+ inlineEdit: "Editar registros en línea",
941
+ addDeleteRecordsInline: "Agregar/eliminar registros en línea",
942
+ clickIntoRecordDetails: "Clic para detalles del registro",
943
+ navigationMode: "Modo de navegación",
944
+ navigationWidth: "Ancho de navegación",
945
+ navigationWidthHint: "Disponible para los modos de navegación cajón, modal y dividido",
946
+ openNewTab: "Abrir en nueva pestaña",
947
+ openNewTabHint: "Disponible para los modos de navegación página y nueva ventana",
948
+ import: "Importar",
949
+ importTitle: "Importar desde CSV",
950
+ importedToast: "{{count}} fila(s) importada(s).",
951
+ importedWithSkipped: "{{ok}} fila(s) importada(s); {{skipped}} omitida(s).",
952
+ showAdvancedSettings: "Mostrar configuración avanzada",
953
+ showFewerSettings: "Mostrar menos configuraciones",
954
+ createViewDesc: "Elija un tipo de vista y asígnele un nombre. Todas las configuraciones se pueden cambiar después.",
955
+ cancel: "Cancelar",
956
+ create: "Crear",
957
+ delete: "Eliminar",
958
+ deleteViewTitle: "Eliminar vista",
959
+ deleteViewConfirm: "¿Eliminar la vista \"{{name}}\"? Esto no se puede deshacer.",
960
+ bulkDeleteConfirm: "¿Eliminar {{count}} registros seleccionados? Esto no se puede deshacer.",
961
+ duplicateViewName: "Ya existe una vista con ese nombre.",
962
+ viewTypeGrid: "Cuadrícula",
963
+ viewTypeGridDesc: "Tabla tipo hoja de cálculo de registros.",
964
+ viewTypeKanban: "Kanban",
965
+ viewTypeKanbanDesc: "Tarjetas agrupadas en columnas por un campo de selección única.",
966
+ viewTypeCalendar: "Calendario",
967
+ viewTypeCalendarDesc: "Registros colocados por fecha en un calendario mensual.",
968
+ viewTypeGallery: "Galería",
969
+ viewTypeGalleryDesc: "Tarjetas de imagen grandes de un campo de adjunto.",
970
+ viewTypeTimeline: "Línea de tiempo",
971
+ viewTypeTimelineDesc: "Registros a lo largo de un eje de tiempo horizontal.",
972
+ viewTypeGantt: "Gantt",
973
+ viewTypeGanttDesc: "Barras de proyecto con inicio/fin y dependencias.",
974
+ viewTypeMap: "Mapa",
975
+ viewTypeMapDesc: "Marcadores geográficos de campos de latitud/longitud.",
976
+ viewTypeChart: "Gráfico",
977
+ viewTypeChartDesc: "Gráficos de barras/líneas/sectores agregados.",
978
+ groupByFieldHelp: "El tablero Kanban agrupa los registros en columnas según los valores del campo.",
979
+ startDateFieldHelp: "El calendario coloca los registros en la celda que corresponde a esta fecha.",
980
+ ganttStartDateFieldHelp: "El borde izquierdo de cada barra de Gantt usa esta fecha.",
981
+ ganttEndDateFieldHelp: "El borde derecho de cada barra de Gantt usa esta fecha.",
982
+ timelineDateFieldHelp: "Los registros se posicionan en la línea de tiempo según esta fecha.",
983
+ latitudeFieldHelp: "Campo que contiene la latitud (solo campos geográficos).",
984
+ longitudeFieldHelp: "Campo que contiene la longitud (solo campos geográficos).",
985
+ imageFieldHelp: "La portada de la galería proviene de este campo de imagen o adjunto.",
986
+ selectOption: "Seleccionar...",
987
+ noEligibleFieldForType: "Ningún campo elegible de ese tipo. Agregue uno al objeto primero.",
988
+ viewTypeUnavailable: "Este objeto no tiene un campo que sirva como \"{{field}}\".",
989
+ viewTypeUnavailableShort: "No compatible con este objeto.",
990
+ chartType: "Tipo de gráfico",
991
+ chartTypeHelp: "Determina cómo se renderizan los datos.",
992
+ chartTypeBar: "Gráfico de barras",
993
+ chartTypeLine: "Gráfico de líneas",
994
+ chartTypePie: "Gráfico circular",
995
+ chartTypeArea: "Gráfico de área",
996
+ chartTypeScatter: "Gráfico de dispersión",
997
+ xAxisField: "Campo eje X",
998
+ xAxisFieldHelp: "La dimensión categórica o temporal.",
999
+ yAxisField: "Campo eje Y",
1000
+ yAxisFieldHelp: "El campo numérico para agregar.",
1001
+ selectionMode: "Modo de selección",
1002
+ selectionNone: "Ninguno",
1003
+ selectionSingle: "Individual",
1004
+ selectionMultiple: "Múltiple",
1005
+ pageSize: "Tamaño de página",
1006
+ pageSizeOptions: "Opciones de tamaño de página",
1007
+ exportFormats: "Formatos de exportación",
1008
+ exportMaxRecords: "Máximo de registros",
1009
+ exportIncludeHeaders: "Incluir encabezados",
1010
+ exportFileNamePrefix: "Prefijo de nombre de archivo",
1011
+ searchableFields: "Campos buscables",
1012
+ filterableFields: "Campos filtrables",
1013
+ resizableColumns: "Columnas redimensionables",
1014
+ densityCompact: "Compacto",
1015
+ densityComfortable: "Normal",
1016
+ densitySpacious: "Espacioso",
1017
+ densityMode: "Modo de densidad",
1018
+ hiddenFields: "Campos ocultos",
1019
+ rowActions: "Acciones de fila",
1020
+ bulkActions: "Acciones masivas",
1021
+ sharing: "Compartir",
1022
+ sharingEnabled: "Compartir habilitado",
1023
+ sharingVisibility: "Visibilidad",
1024
+ addRecordEnabled: "Agregar registro habilitado",
1025
+ addRecordPosition: "Posición",
1026
+ addRecordMode: "Modo",
1027
+ addRecordFormView: "Vista de formulario",
1028
+ conditionalFormatting: "Formato condicional",
1029
+ addRule: "Agregar regla",
1030
+ quickFilters: "Filtros rápidos",
1031
+ addQuickFilter: "Agregar filtro rápido",
1032
+ ufElements: "Elementos",
1033
+ ufDropdown: "Desplegable",
1034
+ ufTabs: "Pestañas",
1035
+ ufToggle: "Alternar",
1036
+ ufAddField: "+ Agregar campo de filtro...",
1037
+ ufNoFields: "Sin campos disponibles",
1038
+ ufAddTab: "+ Agregar pestaña",
1039
+ ufTabLabel: "Etiqueta",
1040
+ ufShowAllRecords: "Mostrar pestaña \"Todos los registros\"",
1041
+ ufAllowAddTab: "Permitir agregar pestañas",
1042
+ showRecordCount: "Mostrar recuento de registros",
1043
+ allowPrinting: "Permitir impresión",
1044
+ virtualScroll: "Desplazamiento virtual",
1045
+ emptyStateTitle: "Título de estado vacío",
1046
+ emptyStateMessage: "Mensaje de estado vacío",
1047
+ emptyStateIcon: "Ícono de estado vacío",
1048
+ ariaLabel: "Etiqueta ARIA",
1049
+ ariaDescribedBy: "Descrito por ARIA",
1050
+ ariaLive: "ARIA en vivo",
1051
+ accessibility: "Accesibilidad",
1052
+ viewTabs: "Pestañas de vista",
731
1053
  },
732
1054
  localeSwitcher: {
733
- label: 'Idioma',
1055
+ label: "Idioma",
1056
+ },
1057
+ search: "Buscar…",
1058
+ nav: {
1059
+ pinItem: "Fijar {{name}}",
1060
+ unpinItem: "Desfijar {{name}}",
1061
+ dragToReorder: "Arrastrar para reordenar",
1062
+ favorites: "Favoritos",
734
1063
  },
735
1064
  },
736
1065
  auth: {
737
1066
  login: {
738
- title: 'Inicia sesión en tu cuenta',
739
- description: 'Ingresa tu correo electrónico y contraseña para continuar',
740
- emailLabel: 'Correo electrónico',
741
- emailPlaceholder: 'name@example.com',
742
- passwordLabel: 'Contraseña',
743
- passwordPlaceholder: 'Ingresa tu contraseña',
744
- forgotPasswordText: '¿Olvidaste tu contraseña?',
745
- submitButton: 'Iniciar sesión',
746
- submittingButton: 'Iniciando sesión...',
747
- noAccountText: '¿No tienes una cuenta?',
748
- signUpText: 'Regístrate',
1067
+ title: "Inicia sesión en tu cuenta",
1068
+ description: "Ingresa tu correo electrónico y contraseña para continuar",
1069
+ emailLabel: "Correo electrónico",
1070
+ emailPlaceholder: "name@example.com",
1071
+ passwordLabel: "Contraseña",
1072
+ passwordPlaceholder: "Ingresa tu contraseña",
1073
+ forgotPasswordText: "¿Olvidaste tu contraseña?",
1074
+ submitButton: "Iniciar sesión",
1075
+ submittingButton: "Iniciando sesión...",
1076
+ noAccountText: "¿No tienes una cuenta?",
1077
+ signUpText: "Regístrate",
1078
+ errors: {
1079
+ invalidCredentials: "Correo o contraseña inválidos. Inténtelo de nuevo.",
1080
+ emailNotVerified: "Verifique su correo electrónico antes de iniciar sesión.",
1081
+ },
749
1082
  },
750
1083
  register: {
751
- title: 'Crear una cuenta',
752
- description: 'Ingresa tu información para comenzar',
753
- nameLabel: 'Nombre',
754
- namePlaceholder: 'Juan Pérez',
755
- emailLabel: 'Correo electrónico',
756
- emailPlaceholder: 'name@example.com',
757
- passwordLabel: 'Contraseña',
758
- passwordPlaceholder: 'Crear una contraseña (mín. 8 caracteres)',
759
- confirmPasswordLabel: 'Confirmar contraseña',
760
- confirmPasswordPlaceholder: 'Confirma tu contraseña',
761
- passwordMismatchError: 'Las contraseñas no coinciden',
762
- passwordTooShortError: 'La contraseña debe tener al menos 8 caracteres',
763
- submitButton: 'Crear cuenta',
764
- submittingButton: 'Creando cuenta...',
765
- hasAccountText: '¿Ya tienes una cuenta?',
766
- signInText: 'Iniciar sesión',
1084
+ title: "Crear una cuenta",
1085
+ description: "Ingresa tu información para comenzar",
1086
+ nameLabel: "Nombre",
1087
+ namePlaceholder: "Juan Pérez",
1088
+ emailLabel: "Correo electrónico",
1089
+ emailPlaceholder: "name@example.com",
1090
+ passwordLabel: "Contraseña",
1091
+ passwordPlaceholder: "Crear una contraseña (mín. 8 caracteres)",
1092
+ confirmPasswordLabel: "Confirmar contraseña",
1093
+ confirmPasswordPlaceholder: "Confirma tu contraseña",
1094
+ passwordMismatchError: "Las contraseñas no coinciden",
1095
+ passwordTooShortError: "La contraseña debe tener al menos 8 caracteres",
1096
+ submitButton: "Crear cuenta",
1097
+ submittingButton: "Creando cuenta...",
1098
+ hasAccountText: "¿Ya tienes una cuenta?",
1099
+ signInText: "Iniciar sesión",
1100
+ errors: {
1101
+ userExists: "Ya existe una cuenta con ese correo. Intente iniciar sesión.",
1102
+ },
1103
+ verifyInbox: {
1104
+ title: "Revise su bandeja de entrada",
1105
+ description: "Enviamos un enlace de verificación a {{email}}. Haga clic en el enlace para activar su cuenta.",
1106
+ resend: "Reenviar correo de verificación",
1107
+ resending: "Enviando…",
1108
+ resent: "Correo de verificación enviado.",
1109
+ backToSignIn: "Volver al inicio de sesión",
1110
+ },
767
1111
  },
768
1112
  forgotPassword: {
769
- title: 'Restablecer tu contraseña',
770
- description: 'Ingresa tu dirección de correo electrónico y te enviaremos un enlace para restablecer tu contraseña',
771
- emailLabel: 'Correo electrónico',
772
- emailPlaceholder: 'name@example.com',
773
- submitButton: 'Enviar enlace de restablecimiento',
774
- submittingButton: 'Enviando...',
775
- successTitle: 'Revisa tu correo electrónico',
776
- successDescription: 'Hemos enviado un enlace para restablecer la contraseña a {{email}}. Por favor revisa tu bandeja de entrada.',
777
- backToSignInText: 'Volver a iniciar sesión',
778
- rememberPasswordText: '¿Recuerdas tu contraseña?',
779
- signInText: 'Iniciar sesión',
1113
+ title: "Restablecer tu contraseña",
1114
+ description: "Ingresa tu dirección de correo electrónico y te enviaremos un enlace para restablecer tu contraseña",
1115
+ emailLabel: "Correo electrónico",
1116
+ emailPlaceholder: "name@example.com",
1117
+ submitButton: "Enviar enlace de restablecimiento",
1118
+ submittingButton: "Enviando...",
1119
+ successTitle: "Revisa tu correo electrónico",
1120
+ successDescription: "Hemos enviado un enlace para restablecer la contraseña a {{email}}. Por favor revisa tu bandeja de entrada.",
1121
+ backToSignInText: "Volver a iniciar sesión",
1122
+ rememberPasswordText: "¿Recuerdas tu contraseña?",
1123
+ signInText: "Iniciar sesión",
1124
+ },
1125
+ resetPassword: {
1126
+ title: "Establecer nueva contraseña",
1127
+ description: "Elija una contraseña que no haya usado antes.",
1128
+ newPassword: "Nueva contraseña",
1129
+ confirmPassword: "Confirmar contraseña",
1130
+ submit: "Actualizar contraseña",
1131
+ submitting: "Actualizando…",
1132
+ success: "Contraseña actualizada",
1133
+ failed: "Error al restablecer",
1134
+ invalidToken: "Este enlace de restablecimiento es inválido o ha expirado.",
1135
+ missingToken: "El enlace de restablecimiento falta o ha expirado",
1136
+ passwordsMismatch: "Las contraseñas no coinciden",
1137
+ requestNewLink: "Solicitar nuevo enlace",
1138
+ },
1139
+ verifyEmail: {
1140
+ title: "Verificar dirección de correo",
1141
+ description: "Enviamos un enlace de verificación a su correo. Haga clic en el enlace para verificar su cuenta.",
1142
+ sentTo: "Enviado a:",
1143
+ verifyingTitle: "Verificando…",
1144
+ verifyingDescription: "Estamos verificando su correo. Por favor espere.",
1145
+ successTitle: "Correo verificado",
1146
+ successDescription: "Su correo fue verificado. Ahora puede iniciar sesión.",
1147
+ errorTitle: "Verificación fallida",
1148
+ errorDescription: "La verificación falló. Solicite un nuevo enlace.",
1149
+ missingToken: "Falta un token en el enlace de verificación.",
1150
+ emailMissing: "Falta la dirección de correo",
1151
+ resendButton: "Reenviar correo de verificación",
1152
+ resending: "Enviando…",
1153
+ resent: "¡Correo enviado! Revise su bandeja de entrada",
1154
+ resentSuccess: "¡Correo de verificación enviado!",
1155
+ resentDescription: "Revise su bandeja de entrada y haga clic en el enlace de verificación.",
1156
+ resendFailed: "No se puede reenviar el correo de verificación",
1157
+ signInLink: "Ir al inicio de sesión",
1158
+ backToSignIn: "Volver al inicio de sesión",
1159
+ backToLogin: "Volver al inicio de sesión",
1160
+ checkSpam: "¿No recibió el correo? Revise su carpeta de spam o contacte soporte.",
1161
+ or: "O",
1162
+ },
1163
+ setup: {
1164
+ welcomeTitle: "Bienvenido a ObjectStack",
1165
+ description: "Cree la primera cuenta de propietario para completar la configuración.",
1166
+ yourName: "Su nombre",
1167
+ orgName: "Nombre de la organización",
1168
+ orgNamePlaceholder: "Empresa Ejemplo S.A.",
1169
+ emailLabel: "Correo electrónico",
1170
+ emailPlaceholder: "nombre@ejemplo.com",
1171
+ passwordLabel: "Contraseña",
1172
+ passwordHint: "Al menos 8 caracteres",
1173
+ submit: "Crear cuenta de propietario",
1174
+ submitting: "Configurando…",
1175
+ failed: "Error en la configuración",
1176
+ },
1177
+ device: {
1178
+ title: "Autorizar nuevo dispositivo",
1179
+ subtitle: "Apruebe este dispositivo para iniciar sesión como {{email}}.",
1180
+ userCodeLabel: "Código del dispositivo",
1181
+ requesterLabel: "Solicitud de conexión de",
1182
+ approveWarning: "Aprueba solo si tú mismo iniciaste esta conexión hace un momento. Una vez aprobada, este runtime podrá acceder a los paquetes privados de tu organización.",
1183
+ loggedInAs: "Conectado como {{email}}",
1184
+ approve: "Aprobar dispositivo",
1185
+ approving: "Aprobando…",
1186
+ approvedTitle: "Dispositivo autorizado",
1187
+ approvedDescription: "Puede regresar al dispositivo — debería iniciar sesión pronto.",
1188
+ approveSuccess: "Dispositivo autorizado",
1189
+ approveSuccessDescription: "Puede cerrar esta ventana.",
1190
+ approveFailed: "Error al aprobar",
1191
+ deny: "Denegar solicitud",
1192
+ denying: "Denegando…",
1193
+ deniedTitle: "Acceso denegado",
1194
+ deniedDescription: "No se otorgará acceso al dispositivo.",
1195
+ denyFailed: "No se pudo denegar la solicitud",
1196
+ invalidTitle: "Enlace de dispositivo inválido",
1197
+ invalidDescription: "No se proporcionó código de dispositivo en la URL.",
1198
+ loading: "Cargando…",
1199
+ cancel: "Cancelar",
1200
+ },
1201
+ shell: {
1202
+ tenantHostHint: "Está iniciando sesión en este espacio de trabajo",
780
1203
  },
781
1204
  },
782
1205
  errors: {
783
- networkError: 'Error de red. Por favor, compruebe su conexión.',
784
- serverError: 'Error del servidor. Por favor, inténtelo de nuevo más tarde.',
785
- notFound: 'Recurso no encontrado.',
786
- unauthorized: 'No está autorizado para realizar esta acción.',
787
- forbidden: 'Acceso denegado.',
788
- timeout: 'Tiempo de espera agotado. Por favor, inténtelo de nuevo.',
789
- unknown: 'Ha ocurrido un error inesperado.',
1206
+ networkError: "Error de red. Por favor, compruebe su conexión.",
1207
+ serverError: "Error del servidor. Por favor, inténtelo de nuevo más tarde.",
1208
+ notFound: "Recurso no encontrado.",
1209
+ unauthorized: "No está autorizado para realizar esta acción.",
1210
+ forbidden: "Acceso denegado.",
1211
+ timeout: "Tiempo de espera agotado. Por favor, inténtelo de nuevo.",
1212
+ unknown: "Ha ocurrido un error inesperado.",
790
1213
  },
791
1214
  workspace: {
792
- label: 'Espacios de trabajo',
793
- default: 'Mi espacio de trabajo',
794
- switch: 'Cambiar espacio de trabajo',
795
- create: 'Crear espacio de trabajo',
796
- createTitle: 'Crear un espacio de trabajo',
797
- createDescription: 'Un espacio de trabajo es un lugar compartido para que tu equipo colabore.',
798
- createButton: 'Crear espacio de trabajo',
799
- nameLabel: 'Nombre del espacio de trabajo',
800
- namePlaceholder: 'p.ej., Acme Inc',
801
- slugLabel: 'Slug de URL',
802
- slugHint: 'Se utiliza en URLs. Solo minúsculas, números y guiones.',
803
- invite: 'Invitar miembro',
804
- members: 'Miembros',
805
- settings: 'Configuración del espacio de trabajo',
1215
+ label: "Espacios de trabajo",
1216
+ default: "Mi espacio de trabajo",
1217
+ switch: "Cambiar espacio de trabajo",
1218
+ create: "Crear espacio de trabajo",
1219
+ createTitle: "Crear un espacio de trabajo",
1220
+ createDescription: "Un espacio de trabajo es un lugar compartido para que tu equipo colabore.",
1221
+ createButton: "Crear espacio de trabajo",
1222
+ nameLabel: "Nombre del espacio de trabajo",
1223
+ namePlaceholder: "p.ej., Acme Inc",
1224
+ slugLabel: "Slug de URL",
1225
+ slugHint: "Se utiliza en URLs. Solo minúsculas, números y guiones.",
1226
+ invite: "Invitar miembro",
1227
+ members: "Miembros",
1228
+ settings: "Configuración del espacio de trabajo",
1229
+ },
1230
+ help: {
1231
+ appDocs: 'Documentación de esta app',
1232
+ allDocs: 'Toda la documentación',
1233
+ onlineDocs: 'Documentación en línea',
806
1234
  },
807
1235
  sidebar: {
808
- settings: 'Configuración',
809
- help: 'Ayuda',
810
- helpTooltip: 'Ayuda y documentación',
811
- activityFeed: 'Feed de actividad',
1236
+ settings: "Configuración",
1237
+ help: "Ayuda",
1238
+ helpTooltip: "Ayuda y documentación",
1239
+ activityFeed: "Feed de actividad",
1240
+ notifications: "Notificaciones",
1241
+ approvals: "Aprobaciones",
1242
+ inbox: "Bandeja de entrada",
1243
+ inboxAriaLabel: "Abrir bandeja de entrada",
1244
+ area: "Área",
1245
+ scope: "Ámbito",
1246
+ recent: "Reciente",
1247
+ favorites: "Favoritos",
1248
+ starred: "Destacados",
1249
+ removeFromFavorites: "Quitar {{name}} de favoritos",
1250
+ },
1251
+ topbar: {
1252
+ aiAssistant: "Asistente de IA",
812
1253
  },
813
1254
  home: {
814
- title: 'Inicio',
815
- subtitle: 'Panel de tu espacio de trabajo',
816
- nav: 'Inicio',
817
- allApps: 'Todas las aplicaciones',
818
- loading: 'Cargando espacio de trabajo...',
819
- recent: 'Recientes',
820
- starred: 'Destacados',
821
- welcome: 'Bienvenido a ObjectUI',
822
- welcomeDescription: 'Comienza creando tu primera aplicación o configura los ajustes del sistema.',
823
- createFirstApp: 'Crea tu primera aplicación',
824
- systemSettings: 'Configuración del sistema',
825
- browseMarketplace: 'Explorar marketplace de apps',
1255
+ title: "Inicio",
1256
+ subtitle: "Panel de tu espacio de trabajo",
1257
+ nav: "Inicio",
1258
+ allApps: "Todas las aplicaciones",
1259
+ loading: "Cargando espacio de trabajo...",
1260
+ recent: "Recientes",
1261
+ starred: "Destacados",
1262
+ welcome: "Bienvenido a ObjectUI",
1263
+ welcomeDescription: "Comienza creando tu primera aplicación o configura los ajustes del sistema.",
1264
+ createFirstApp: "Crea tu primera aplicación",
1265
+ systemSettings: "Configuración del sistema",
1266
+ browseMarketplace: "Explorar marketplace de apps",
826
1267
  quickActions: {
827
- title: 'Acciones rápidas',
828
- createApp: 'Crear app',
829
- createAppDesc: 'Comienza con una nueva aplicación',
830
- manageObjects: 'Gestionar objetos',
831
- manageObjectsDesc: 'Configura modelos de datos',
832
- systemSettings: 'Configuración del sistema',
833
- systemSettingsDesc: 'Configura tu espacio de trabajo',
1268
+ title: "Acciones rápidas",
1269
+ createApp: "Crear app",
1270
+ createAppDesc: "Comienza con una nueva aplicación",
1271
+ manageObjects: "Gestionar objetos",
1272
+ manageObjectsDesc: "Configura modelos de datos",
1273
+ systemSettings: "Configuración del sistema",
1274
+ systemSettingsDesc: "Configura tu espacio de trabajo",
834
1275
  },
835
1276
  appCard: {
836
- noDescription: 'Sin descripción',
837
- default: 'Predeterminado',
1277
+ noDescription: "Sin descripción",
1278
+ default: "Predeterminado",
1279
+ },
1280
+ greetingMorning: "Buenos días",
1281
+ greetingAfternoon: "Buenas tardes",
1282
+ greetingEvening: "Buenas noches",
1283
+ greetingNight: "Turno de noche",
1284
+ heroTagline: "Continúe donde lo dejó o descubra algo nuevo.",
1285
+ open: "Abrir",
1286
+ stats: {
1287
+ apps: "Aplicaciones",
1288
+ starred: "Destacados",
1289
+ recent: "Recientes",
1290
+ },
1291
+ recentApps: {
1292
+ title: "Abiertos recientemente",
1293
+ itemType: {
1294
+ object: "Objeto",
1295
+ dashboard: "Panel",
1296
+ page: "Página",
1297
+ record: "Registro",
1298
+ },
1299
+ },
1300
+ starredApps: {
1301
+ title: "Destacados",
1302
+ },
1303
+ gettingStarted: {
1304
+ title: "Personalizar inicio",
1305
+ description: "Marque una aplicación como favorita para anclarla aquí y acceder con un clic. Todo lo que abra aparecerá automáticamente en \"Abiertos recientemente\".",
1306
+ cta: "Explorar todas las aplicaciones",
838
1307
  },
839
1308
  },
840
1309
  layout: {
841
1310
  appSwitcher: {
842
- home: 'Home',
843
- addApp: 'Add App',
844
- editApp: 'Edit App',
845
- manageAllApps: 'Manage All Apps',
846
- systemConsole: 'System Console',
847
- noAppsConfigured: 'No apps configured',
1311
+ home: "Inicio",
1312
+ addApp: "Agregar aplicación",
1313
+ editApp: "Editar aplicación",
1314
+ manageAllApps: "Administrar todas las aplicaciones",
1315
+ systemConsole: "Consola del sistema",
1316
+ noAppsConfigured: "Sin aplicaciones configuradas",
848
1317
  },
849
1318
  activityFeed: {
850
- title: 'Recent Activity',
851
- filter: 'Filter',
852
- empty: 'No recent activity',
853
- ariaLabel: 'Activity feed',
854
- typeCreate: 'Create',
855
- typeUpdate: 'Update',
856
- typeDelete: 'Delete',
857
- typeComment: 'Comment',
858
- relativeJustNow: 'just now',
859
- relativeSecondsAgo: '{{count}}s ago',
860
- relativeMinutesAgo: '{{count}}m ago',
861
- relativeHoursAgo: '{{count}}h ago',
862
- relativeDaysAgo: '{{count}}d ago',
1319
+ title: "Actividad reciente",
1320
+ filter: "Filtrar",
1321
+ empty: "Sin actividad reciente",
1322
+ ariaLabel: "Feed de actividad",
1323
+ typeCreate: "Crear",
1324
+ typeUpdate: "Actualizar",
1325
+ typeDelete: "Eliminar",
1326
+ typeComment: "Comentario",
1327
+ relativeJustNow: "ahora mismo",
1328
+ relativeSecondsAgo: "hace {{count}}s",
1329
+ relativeMinutesAgo: "hace {{count}}m",
1330
+ relativeHoursAgo: "hace {{count}}h",
1331
+ relativeDaysAgo: "hace {{count}}d",
1332
+ viewAll: "Ver toda la actividad",
863
1333
  },
864
1334
  metadata: {
865
- label: 'Metadata',
866
- toggleTitle: 'Toggle Metadata Inspector',
867
- panelTitle: 'Metadata Inspector',
868
- jsonBadge: 'JSON',
869
- copyJson: 'Copy JSON',
1335
+ label: "Metadatos",
1336
+ toggleTitle: "Alternar inspector de metadatos",
1337
+ panelTitle: "Inspector de metadatos",
1338
+ jsonBadge: "JSON",
1339
+ copyJson: "Copiar JSON",
870
1340
  },
871
1341
  },
872
1342
  search: {
873
- title: 'Search',
874
- back: 'Back',
875
- placeholder: 'Search objects, dashboards, pages, reports...',
876
- inputAriaLabel: 'Search objects, dashboards, pages, reports',
877
- resultsCount: '{{count}} result for "{{query}}"',
878
- resultsCountPlural: '{{count}} results for "{{query}}"',
879
- itemsAvailable: '{{count}} items available',
880
- noResults: 'No results found',
881
- noResultsHint: 'Try adjusting your search terms',
882
- typeObjects: 'Objects',
883
- typeDashboards: 'Dashboards',
884
- typePages: 'Pages',
885
- typeReports: 'Reports',
886
- badgeObject: 'object',
887
- badgeDashboard: 'dashboard',
888
- badgePage: 'page',
889
- badgeReport: 'report',
1343
+ title: "Buscar",
1344
+ back: "Atrás",
1345
+ placeholder: "Buscar objetos, paneles, páginas, informes...",
1346
+ inputAriaLabel: "Buscar objetos, paneles, páginas, informes",
1347
+ resultsCount: "{{count}} resultado para \"{{query}}\"",
1348
+ resultsCountPlural: "{{count}} resultados para \"{{query}}\"",
1349
+ itemsAvailable: "{{count}} elementos disponibles",
1350
+ noResults: "Sin resultados encontrados",
1351
+ noResultsHint: "Intente ajustar sus términos de búsqueda",
1352
+ typeObjects: "Objetos",
1353
+ typeDashboards: "Paneles",
1354
+ typePages: "Páginas",
1355
+ typeReports: "Informes",
1356
+ badgeObject: "Objeto",
1357
+ badgeDashboard: "Panel",
1358
+ badgePage: "Página",
1359
+ badgeReport: "Informe",
890
1360
  },
891
1361
  empty: {
892
- objectNotFound: 'Object Not Found',
893
- objectNotFoundDescription: 'Object "{{name}}" definition missing. Check your configuration or navigate back to select a valid object.',
894
- pageNotFound: 'Page Not Found',
895
- pageNotFoundDescription: 'The page "{{name}}" could not be found. It may have been removed or renamed.',
896
- dashboardNotFound: 'Dashboard Not Found',
897
- dashboardNotFoundDescription: 'The dashboard "{{name}}" could not be found. It may have been removed or renamed.',
898
- reportNotFound: 'Report Not Found',
899
- reportNotFoundDescription: 'The report "{{name}}" could not be found. It may have been removed or renamed.',
900
- noAppsConfigured: 'No Apps Configured',
901
- noAppsConfiguredDescription: 'No applications have been registered. Create your first app or visit System Settings to configure your environment.',
902
- createFirstApp: 'Create Your First App',
903
- systemSettings: 'System Settings',
904
- back: 'Back',
1362
+ objectNotFound: "Objeto no encontrado",
1363
+ objectNotFoundDescription: "Falta la definición del objeto \"{{name}}\". Verifique su configuración o navegue hacia atrás.",
1364
+ pageNotFound: "Página no encontrada",
1365
+ pageNotFoundDescription: "La página \"{{name}}\" no fue encontrada. Puede haber sido eliminada o renombrada.",
1366
+ dashboardNotFound: "Panel no encontrado",
1367
+ dashboardNotFoundDescription: "El panel \"{{name}}\" no fue encontrado. Puede haber sido eliminado o renombrado.",
1368
+ reportNotFound: "Informe no encontrado",
1369
+ reportNotFoundDescription: "El informe \"{{name}}\" no fue encontrado. Puede haber sido eliminado o renombrado.",
1370
+ noAppsConfigured: "Sin aplicaciones configuradas",
1371
+ noAppsConfiguredDescription: "No hay aplicaciones registradas. Cree su primera aplicación o visite la configuración del sistema.",
1372
+ createFirstApp: "Crear primera aplicación",
1373
+ systemSettings: "Configuración del sistema",
1374
+ back: "Atrás",
1375
+ recordNotFound: "Registro no encontrado",
1376
+ recordNotFoundDescription: "El registro que busca no existe o puede haber sido eliminado.",
905
1377
  },
906
1378
  renderer: {
907
- noPageSchema: 'No page schema provided',
908
- noFormSchema: 'No form schema provided',
909
- noDashboardSchema: 'No dashboard schema provided',
910
- pageRendering: 'Page rendering: {{name}}',
911
- dashboardRendering: 'Dashboard rendering: {{name}}',
912
- formRenderingMode: 'Form rendering in {{mode}} mode',
913
- formRenderingFor: 'for record {{id}}',
914
- createRecord: 'Create Record',
915
- editRecord: 'Edit Record',
916
- page: 'Page',
917
- dashboard: 'Dashboard',
918
- save: 'Save',
919
- cancel: 'Cancel',
1379
+ noPageSchema: "No se proporcionó esquema de página",
1380
+ noFormSchema: "No se proporcionó esquema de formulario",
1381
+ noDashboardSchema: "No se proporcionó esquema de panel",
1382
+ pageRendering: "Renderizando página: {{name}}",
1383
+ dashboardRendering: "Renderizando panel: {{name}}",
1384
+ formRenderingMode: "Formulario renderizado en modo {{mode}}",
1385
+ formRenderingFor: "para registro {{id}}",
1386
+ createRecord: "Crear registro",
1387
+ editRecord: "Editar registro",
1388
+ page: "Página",
1389
+ dashboard: "Panel",
1390
+ save: "Guardar",
1391
+ cancel: "Cancelar",
920
1392
  },
921
1393
  actionDialog: {
922
- title: 'Action Parameters',
923
- description: 'Please provide the required information to continue.',
924
- selectPlaceholder: 'Select {{label}}',
925
- requiredError: '{{label}} is required',
926
- cancel: 'Cancel',
927
- confirm: 'Confirm',
928
- defaultActionTitle: 'Action',
929
- ok: 'OK',
1394
+ title: "Parámetros de acción",
1395
+ description: "Ingrese la información requerida para continuar.",
1396
+ selectPlaceholder: "Seleccionar {{label}}",
1397
+ requiredError: "{{label}} es obligatorio",
1398
+ cancel: "Cancelar",
1399
+ confirm: "Confirmar",
1400
+ defaultActionTitle: "Acción",
1401
+ ok: "Aceptar",
1402
+ lookupPlaceholder: "Pegar ID de registro (UUID) para {{label}}",
1403
+ lookupHelpText: "Ingrese el ID del registro del objeto referenciado. Pronto se añadirá un selector.",
1404
+ },
1405
+ actionConfirm: {
1406
+ title: "Confirmar acción",
1407
+ confirm: "Continuar",
1408
+ cancel: "Cancelar",
930
1409
  },
931
1410
  rowAction: {
932
- openMenu: 'Open menu',
933
- edit: 'Edit',
934
- delete: 'Delete',
1411
+ openMenu: "Abrir menú",
1412
+ edit: "Editar",
1413
+ delete: "Eliminar",
935
1414
  },
936
1415
  navigationSync: {
937
- addedPage: 'Navigation updated: added page "{{name}}"',
938
- addedDashboard: 'Navigation updated: added dashboard "{{name}}"',
939
- removedPage: 'Navigation updated: removed page "{{name}}"',
940
- removedDashboard: 'Navigation updated: removed dashboard "{{name}}"',
941
- renamedPage: 'Navigation updated: renamed page "{{oldName}}" → "{{newName}}"',
942
- renamedDashboard: 'Navigation updated: renamed dashboard "{{oldName}}" → "{{newName}}"',
943
- undoLabel: 'Undo',
944
- undone: 'Navigation change undone',
945
- undoFailed: 'Failed to undo navigation change',
946
- updateFailed: 'Failed to update navigation',
1416
+ addedPage: "Navegación actualizada: página \"{{name}}\" agregada",
1417
+ addedDashboard: "Navegación actualizada: panel \"{{name}}\" agregado",
1418
+ removedPage: "Navegación actualizada: página \"{{name}}\" eliminada",
1419
+ removedDashboard: "Navegación actualizada: panel \"{{name}}\" eliminado",
1420
+ renamedPage: "Navegación actualizada: página \"{{oldName}}\" renombrada a \"{{newName}}\"",
1421
+ renamedDashboard: "Navegación actualizada: panel \"{{oldName}}\" renombrado a \"{{newName}}\"",
1422
+ undoLabel: "Deshacer",
1423
+ undone: "Cambio de navegación deshecho",
1424
+ undoFailed: "No se pudo deshacer el cambio de navegación",
1425
+ updateFailed: "No se pudo actualizar la navegación",
947
1426
  },
948
1427
  objectActions: {
949
- deleteSuccess: '{{label}} deleted successfully',
950
- deleteFailed: 'Failed to delete {{label}}',
951
- noRecordId: 'No record ID provided',
952
- deleteConfirm: 'Are you sure you want to delete this record?',
1428
+ deleteSuccess: "{{label}} eliminado correctamente",
1429
+ deleteFailed: "No se pudo eliminar {{label}}",
1430
+ noRecordId: "No se proporcionó ID de registro",
1431
+ deleteConfirm: "¿Eliminar este registro?",
1432
+ bulkDeleteSuccess: "{{count}} registros de {{label}} eliminados",
1433
+ bulkDeletePartial: "{{succeeded}} eliminados, {{failed}} fallidos",
953
1434
  },
954
1435
  objectViewActions: {
955
- renameFailed: 'Failed to rename view',
956
- deleteFailed: 'Failed to delete view',
1436
+ renameFailed: "No se pudo renombrar la vista",
1437
+ deleteFailed: "No se pudo eliminar la vista",
957
1438
  },
958
1439
  dashboardActions: {
959
- pdfPreparing: 'Preparing PDF export…',
960
- exportFailed: 'Export failed: {{message}}',
961
- forecastSoon: 'Forecast view coming soon',
1440
+ pdfPreparing: "Preparando exportación PDF…",
1441
+ exportFailed: "Error al exportar: {{message}}",
1442
+ forecastSoon: "La vista de pronóstico llegará pronto",
962
1443
  },
963
1444
  recordDetail: {
964
- viewersTooltip: 'Users viewing this record',
1445
+ viewersTooltip: "Usuarios viendo este registro ahora",
965
1446
  },
966
1447
  cellRender: {
967
- empty: 'Empty',
968
- yes: 'Yes',
969
- no: 'No',
970
- systemFields: 'System',
1448
+ empty: "Vacío",
1449
+ yes: "Sí",
1450
+ no: "No",
1451
+ systemFields: "Sistema",
971
1452
  },
972
1453
  user: {
973
- profile: 'Profile',
974
- settings: 'Settings',
975
- logout: 'Log out',
1454
+ profile: "Perfil",
1455
+ settings: "Configuración",
1456
+ logout: "Cerrar sesión",
1457
+ preferences: "Preferencias",
1458
+ theme: "Tema",
1459
+ language: "Idioma",
976
1460
  },
977
1461
  report: {
978
- rowTotal: 'Row Total',
979
- columnTotal: 'Column Total',
980
- grandTotal: 'Grand Total',
981
- totals: 'Totals',
982
- rowsLabel: 'Row',
983
- columnsLabel: 'Column',
984
- allLabel: '(All)',
985
- emptyLabel: '(Empty)',
986
- loading: 'Loading…',
987
- failedToLoad: 'Failed to load matrix: {{message}}',
988
- needsAcross: 'Matrix report requires at least one `groupingsAcross` field.',
1462
+ total: "Total",
1463
+ rowTotal: "Total fila",
1464
+ columnTotal: "Total columna",
1465
+ grandTotal: "Gran total",
1466
+ totals: "Totales",
1467
+ rowsLabel: "Fila",
1468
+ columnsLabel: "Columna",
1469
+ allLabel: "(Todo)",
1470
+ emptyLabel: "(Vacío)",
1471
+ loading: "Cargando…",
1472
+ failedToLoad: "Error al cargar la matriz: {{message}}",
1473
+ needsAcross: "El informe de matriz requiere al menos un campo `groupingsAcross`.",
989
1474
  aggregate: {
990
- count: 'Count',
991
- countDistinct: 'Distinct Count',
992
- sum: 'Sum',
993
- avg: 'Average',
994
- min: 'Min',
995
- max: 'Max',
996
- first: 'First',
1475
+ count: "Contar",
1476
+ countDistinct: "Contar únicos",
1477
+ sum: "Suma",
1478
+ avg: "Promedio",
1479
+ min: "Mínimo",
1480
+ max: "Máximo",
1481
+ first: "Primero",
997
1482
  },
998
1483
  editor: {
999
- breadcrumb: 'Configuración',
1000
- basic: 'General',
1001
- title: 'Título',
1002
- titlePlaceholder: 'p. ej. Pipeline por trimestre',
1003
- description: 'Descripción',
1004
- descriptionPlaceholder: '¿Qué muestra este informe?',
1005
- type: 'Tipo de informe',
1006
- typeTabular: 'Tabla — lista plana',
1007
- typeSummary: 'Resumen — agrupado con totales',
1008
- typeMatrix: 'Matriz — pivote filas × columnas',
1009
- typeJoined: 'Combinado — varios bloques',
1010
- typeHelp: 'Elige el diseño que mejor refleje lo que quieres ver.',
1011
- data: 'Datos',
1012
- objectName: 'Fuente de datos',
1013
- objectNamePlaceholder: 'p. ej. opportunity',
1014
- objectNameHelp: '¿Qué objeto debe consultar este informe?',
1015
- limit: 'Límite de filas',
1016
- limitPlaceholder: 'p. ej. 100',
1017
- columns: 'Columnas',
1018
- columnsHint: 'Elige los campos que aparecerán como columnas. Añade una agregación (Suma, Recuento…) en los informes Resumen o Matriz.',
1019
- filters: 'Filtros',
1020
- filtersHint: 'Limita las filas incluidas en este informe.',
1021
- filtersComplex: 'Este informe usa un filtro avanzado que no se puede editar aquí. Al guardar se mantendrá intacto.',
1022
- groupBy: 'Agrupar por',
1023
- groupByHint: 'Agrupa los datos y calcula subtotales.',
1024
- rows: 'Filas',
1025
- rowsHint: 'Agrupa las filas por estos campos.',
1026
- columnsAxis: 'Columnas',
1027
- columnsAxisHint: 'Pivota estos campos en la parte superior.',
1028
- values: 'Valores',
1029
- valuesHint: 'Números mostrados en cada celda. Elige uno o varios campos y añade una agregación (Suma, Recuento…).',
1030
- grouping: 'Agrupación',
1031
- addGrouping: 'Añadir agrupación',
1032
- dateGranularity: 'Granularidad de fecha',
1033
- dateGranularityNone: '(valor original)',
1034
- day: 'Día',
1035
- week: 'Semana',
1036
- month: 'Mes',
1037
- quarter: 'Trimestre',
1038
- year: 'Año',
1039
- sortAsc: 'Ascendente',
1040
- sortDesc: 'Descendente',
1041
- chart: 'Gráfico',
1042
- chartHint: 'Visualización opcional junto a la tabla.',
1043
- chartType: 'Tipo de gráfico',
1044
- chartTitle: 'Título del gráfico',
1045
- chartTitlePlaceholder: 'Por defecto, el título del informe',
1046
- chartXAxis: 'Eje X (categoría)',
1047
- chartYAxis: 'Eje Y (valor)',
1048
- chartShowLegend: 'Mostrar leyenda',
1049
- chartShowDataLabels: 'Mostrar etiquetas de datos',
1050
- chartNone: '(sin gráfico)',
1051
- chartBar: 'Barras',
1052
- chartLine: 'Líneas',
1053
- chartArea: 'Áreas',
1054
- chartPie: 'Circular',
1055
- chartDonut: 'Anillo',
1056
- chartFunnel: 'Embudo',
1057
- validationNeedsObject: 'Selecciona una fuente de datos antes de añadir columnas.',
1058
- validationMatrixNeedsRowsCols: 'Los informes de matriz necesitan al menos una fila y una columna.',
1059
- validationSummaryNeedsRows: 'Los informes de resumen necesitan al menos un campo de agrupación.',
1060
- blocks: 'Bloques',
1061
- blocksHint: 'Cada bloque es su propia tabla o gráfico. Los filtros del bloque se combinan (Y) con el filtro del informe.',
1062
- addBlock: 'Añadir bloque',
1063
- removeBlock: 'Eliminar bloque',
1064
- blockName: 'Nombre del bloque',
1065
- blockNamePlaceholder: 'nombre_unico_del_bloque',
1066
- blockLabel: 'Etiqueta a mostrar',
1067
- blockLabelPlaceholder: 'Se muestra encima del bloque',
1068
- blockDescription: 'Descripción',
1069
- blockDescriptionPlaceholder: 'Contexto opcional para este bloque',
1070
- validationJoinedNeedsBlocks: 'Los informes combinados necesitan al menos un bloque.',
1071
- validationBlockNameRequired: 'Cada bloque debe tener un nombre no vacío.',
1072
- validationBlockNameDuplicate: 'Los nombres de bloque deben ser únicos dentro del informe.',
1073
- validationBlockNeedsColumns: 'Cada bloque debe tener al menos una columna.',
1074
- noneOption: '(ninguno)',
1075
- addCondition: 'Añadir condición',
1076
- combineLogic: 'Combinar con',
1077
- opContains: 'contiene',
1078
- opIsEmpty: 'está vacío',
1079
- opIsNotEmpty: 'no está vacío',
1080
- formatAuto: 'Auto',
1081
- formatCurrency: 'Moneda',
1082
- formatPercent: 'Porcentaje',
1083
- formatInteger: 'Entero',
1084
- formatDate: 'Fecha',
1085
- formatDatetime: 'Fecha y hora',
1086
- columnLabelPlaceholder: 'Sobrescribir etiqueta',
1087
- aggregateColumn: 'Agregación',
1088
- formatColumn: 'Formato',
1089
- addColumns: 'Añadir columnas',
1090
- searchFields: 'Buscar campos…',
1091
- noMatchingFields: 'Ningún campo coincide con tu búsqueda.',
1092
- noFieldsAvailable: 'No hay campos disponibles.',
1484
+ breadcrumb: "Configuración",
1485
+ basic: "General",
1486
+ title: "Título",
1487
+ titlePlaceholder: "p. ej. Pipeline por trimestre",
1488
+ description: "Descripción",
1489
+ descriptionPlaceholder: "¿Qué muestra este informe?",
1490
+ type: "Tipo de informe",
1491
+ typeTabular: "Tabla — lista plana",
1492
+ typeSummary: "Resumen — agrupado con totales",
1493
+ typeMatrix: "Matriz — pivote filas × columnas",
1494
+ typeJoined: "Combinado — varios bloques",
1495
+ typeHelp: "Elige el diseño que mejor refleje lo que quieres ver.",
1496
+ data: "Datos",
1497
+ objectName: "Fuente de datos",
1498
+ objectNamePlaceholder: "p. ej. opportunity",
1499
+ objectNameHelp: "¿Qué objeto debe consultar este informe?",
1500
+ limit: "Límite de filas",
1501
+ limitPlaceholder: "p. ej. 100",
1502
+ columns: "Columnas",
1503
+ columnsHint: "Elige los campos que aparecerán como columnas. Añade una agregación (Suma, Recuento…) en los informes Resumen o Matriz.",
1504
+ filters: "Filtros",
1505
+ filtersHint: "Limita las filas incluidas en este informe.",
1506
+ filtersComplex: "Este informe usa un filtro avanzado que no se puede editar aquí. Al guardar se mantendrá intacto.",
1507
+ groupBy: "Agrupar por",
1508
+ groupByHint: "Agrupa los datos y calcula subtotales.",
1509
+ rows: "Filas",
1510
+ rowsHint: "Agrupa las filas por estos campos.",
1511
+ columnsAxis: "Columnas",
1512
+ columnsAxisHint: "Pivota estos campos en la parte superior.",
1513
+ values: "Valores",
1514
+ valuesHint: "Números mostrados en cada celda. Elige uno o varios campos y añade una agregación (Suma, Recuento…).",
1515
+ grouping: "Agrupación",
1516
+ addGrouping: "Añadir agrupación",
1517
+ dateGranularity: "Granularidad de fecha",
1518
+ dateGranularityNone: "(valor original)",
1519
+ day: "Día",
1520
+ week: "Semana",
1521
+ month: "Mes",
1522
+ quarter: "Trimestre",
1523
+ year: "Año",
1524
+ sortAsc: "Ascendente",
1525
+ sortDesc: "Descendente",
1526
+ chart: "Gráfico",
1527
+ chartHint: "Visualización opcional junto a la tabla.",
1528
+ chartType: "Tipo de gráfico",
1529
+ chartTitle: "Título del gráfico",
1530
+ chartTitlePlaceholder: "Por defecto, el título del informe",
1531
+ chartXAxis: "Eje X (categoría)",
1532
+ chartYAxis: "Eje Y (valor)",
1533
+ chartShowLegend: "Mostrar leyenda",
1534
+ chartShowDataLabels: "Mostrar etiquetas de datos",
1535
+ chartNone: "(sin gráfico)",
1536
+ chartBar: "Barras",
1537
+ chartLine: "Líneas",
1538
+ chartArea: "Áreas",
1539
+ chartPie: "Circular",
1540
+ chartDonut: "Anillo",
1541
+ chartFunnel: "Embudo",
1542
+ validationNeedsObject: "Selecciona una fuente de datos antes de añadir columnas.",
1543
+ validationMatrixNeedsRowsCols: "Los informes de matriz necesitan al menos una fila y una columna.",
1544
+ validationSummaryNeedsRows: "Los informes de resumen necesitan al menos un campo de agrupación.",
1545
+ blocks: "Bloques",
1546
+ blocksHint: "Cada bloque es su propia tabla o gráfico. Los filtros del bloque se combinan (Y) con el filtro del informe.",
1547
+ addBlock: "Añadir bloque",
1548
+ removeBlock: "Eliminar bloque",
1549
+ blockName: "Nombre del bloque",
1550
+ blockNamePlaceholder: "nombre_unico_del_bloque",
1551
+ blockLabel: "Etiqueta a mostrar",
1552
+ blockLabelPlaceholder: "Se muestra encima del bloque",
1553
+ blockDescription: "Descripción",
1554
+ blockDescriptionPlaceholder: "Contexto opcional para este bloque",
1555
+ validationJoinedNeedsBlocks: "Los informes combinados necesitan al menos un bloque.",
1556
+ validationBlockNameRequired: "Cada bloque debe tener un nombre no vacío.",
1557
+ validationBlockNameDuplicate: "Los nombres de bloque deben ser únicos dentro del informe.",
1558
+ validationBlockNeedsColumns: "Cada bloque debe tener al menos una columna.",
1559
+ noneOption: "(ninguno)",
1560
+ addCondition: "Añadir condición",
1561
+ combineLogic: "Combinar con",
1562
+ opContains: "contiene",
1563
+ opIsEmpty: "está vacío",
1564
+ opIsNotEmpty: "no está vacío",
1565
+ formatAuto: "Auto",
1566
+ formatCurrency: "Moneda",
1567
+ formatPercent: "Porcentaje",
1568
+ formatInteger: "Entero",
1569
+ formatDate: "Fecha",
1570
+ formatDatetime: "Fecha y hora",
1571
+ columnLabelPlaceholder: "Sobrescribir etiqueta",
1572
+ aggregateColumn: "Agregación",
1573
+ formatColumn: "Formato",
1574
+ addColumns: "Añadir columnas",
1575
+ searchFields: "Buscar campos…",
1576
+ noMatchingFields: "Ningún campo coincide con tu búsqueda.",
1577
+ noFieldsAvailable: "No hay campos disponibles.",
1578
+ columnsCount: "{n} columna(s) seleccionada(s)",
1579
+ columnsEmpty: "Aún no hay columnas seleccionadas.",
1580
+ fieldPickerTitle: "Seleccionar campos",
1581
+ fieldPickerDescription: "Elija uno o más campos para agregar. Use el campo de búsqueda para filtrar la lista.",
1582
+ fieldPickerChangeTitle: "Cambiar campo",
1583
+ fieldPickerAddGroupingTitle: "Agregar agrupación",
1584
+ fieldPickerEmpty: "(Seleccionar campo)",
1585
+ fieldPickerSelected: "{n} seleccionado(s)",
1586
+ fieldPickerClear: "Limpiar selección",
1587
+ fieldPickerAdd: "Agregar",
1588
+ fieldPickerAddN: "Agregar {n}",
1093
1589
  },
1094
1590
  },
1095
1591
  organizations: {
1096
- mine: 'Mis organizaciones',
1097
- title: 'Organizaciones',
1098
- heading: 'Tus organizaciones',
1099
- subtitle: 'Selecciona una organización para continuar o crea una nueva.',
1100
- searchPlaceholder: 'Buscar una organización',
1101
- new: 'Nueva organización',
1102
- current: 'Organización actual',
1103
- manage: 'Administrar',
1104
- emptyTitle: 'Aún no hay organizaciones',
1105
- emptyDescription: 'Crea tu primera organización para empezar.',
1106
- noMatches: 'Ninguna organización coincide con tu búsqueda.',
1592
+ mine: "Mis organizaciones",
1593
+ title: "Organizaciones",
1594
+ heading: "Tus organizaciones",
1595
+ subtitle: "Selecciona una organización para continuar o crea una nueva.",
1596
+ searchPlaceholder: "Buscar una organización",
1597
+ new: "Nueva organización",
1598
+ current: "Organización actual",
1599
+ manage: "Administrar",
1600
+ emptyTitle: "Aún no hay organizaciones",
1601
+ emptyDescription: "Crea tu primera organización para empezar.",
1602
+ noMatches: "Ninguna organización coincide con tu búsqueda.",
1107
1603
  },
1108
1604
  notifications: {
1109
- empty: 'Sin notificaciones',
1110
- markAllRead: 'Marcar todo como leído',
1111
- viewAll: 'Ver todas las notificaciones',
1112
- approvalsPending: '{{count}} aprobaciones pendientes',
1113
- viewApprovals: 'Ver aprobaciones',
1114
- noPendingApprovals: 'Sin aprobaciones pendientes',
1115
- openApprovalsInbox: 'Abrir bandeja de aprobaciones',
1605
+ empty: "Sin notificaciones",
1606
+ markAllRead: "Marcar todo como leído",
1607
+ viewAll: "Ver todas las notificaciones",
1608
+ approvalsPending: "{{count}} aprobaciones pendientes",
1609
+ viewApprovals: "Ver aprobaciones",
1610
+ noPendingApprovals: "Sin aprobaciones pendientes",
1611
+ openApprovalsInbox: "Abrir bandeja de aprobaciones",
1612
+ emptyUnread: "Todo al día",
1613
+ filterUnread: "No leídos",
1614
+ filterAll: "Todos",
1116
1615
  },
1117
1616
  publicForm: {
1118
- submit: 'Submit',
1119
- submitting: 'Submitting…',
1120
- submitAnother: 'Submit another response',
1121
- poweredBy: 'Powered by ObjectStack',
1122
- secureNotice: 'Your information is transmitted securely and only used to respond to your request.',
1123
- thankYouTitle: 'Thank you!',
1124
- thankYouMessage: 'Your submission has been received successfully.',
1125
- redirecting: 'Redirecting in {{seconds}} seconds…',
1126
- unavailableTitle: 'Form unavailable',
1127
- unavailableDescription: 'No public form is available at this URL. Make sure the underlying view has anonymous sharing enabled and matches this slug.',
1128
- tryDemo: 'Try the demo',
1129
- retry: 'Retry',
1130
- loading: 'Loading form…',
1131
- requiredHint: '* Required field',
1132
- consentLabelDefault: 'I agree to the privacy policy and consent to my data being processed for this request.',
1133
- consentLink: 'Privacy policy',
1134
- consentRequired: 'Please accept the privacy policy to continue.',
1135
- rateLimited: 'Please take a moment to review your answers before submitting.',
1136
- redirectBlocked: 'Submission accepted, but the redirect URL was blocked for security.',
1617
+ submit: "Enviar",
1618
+ submitting: "Enviando…",
1619
+ submitAnother: "Enviar otra respuesta",
1620
+ poweredBy: "Desarrollado por ObjectStack",
1621
+ secureNotice: "Su información se transmite de forma segura y solo se usa para atender su solicitud.",
1622
+ thankYouTitle: "¡Gracias!",
1623
+ thankYouMessage: "Su envío fue recibido correctamente.",
1624
+ redirecting: "Redirigiendo en {{seconds}} segundos…",
1625
+ unavailableTitle: "Formulario no disponible",
1626
+ unavailableDescription: "No hay formulario público disponible en esta URL. Asegúrese de que la vista subyacente tenga habilitado el uso compartido anónimo.",
1627
+ tryDemo: "Probar demo",
1628
+ retry: "Reintentar",
1629
+ loading: "Cargando formulario…",
1630
+ requiredHint: "* Campo obligatorio",
1631
+ consentLabelDefault: "Acepto la política de privacidad y doy mi consentimiento para procesar mis datos para esta solicitud.",
1632
+ consentLink: "Política de privacidad",
1633
+ consentRequired: "Acepte la política de privacidad para continuar.",
1634
+ rateLimited: "Tómese un momento para revisar sus respuestas antes de enviar.",
1635
+ redirectBlocked: "Envío aceptado, pero la URL de redirección fue bloqueada por seguridad.",
1137
1636
  demo: {
1138
- contactTitle: 'Contact us',
1139
- contactDescription: 'Tell us about your project and a sales representative will get back to you within one business day.',
1140
- supportTitle: 'Submit a support request',
1141
- supportDescription: 'Tell us what is going wrong — our team responds within one business day.',
1142
- thankYouSalesTitle: 'Thanks — we received your message!',
1143
- thankYouSalesMessage: 'A sales representative will be in touch within one business day.',
1144
- thankYouSupportTitle: 'Got it — your request is in the queue.',
1145
- thankYouSupportMessage: 'A support engineer will follow up shortly. Save this page if you have more screenshots to add.',
1637
+ contactTitle: "Ponerse en contacto",
1638
+ contactDescription: "Cuéntenos sobre su proyecto y un representante de ventas le contactará en un día hábil.",
1639
+ supportTitle: "Enviar solicitud de soporte",
1640
+ supportDescription: "Descríbanos el problema — nuestro equipo responderá en un día hábil.",
1641
+ thankYouSalesTitle: "¡Gracias — recibimos su mensaje!",
1642
+ thankYouSalesMessage: "Un representante de ventas le contactará en un día hábil.",
1643
+ thankYouSupportTitle: "Listo — su solicitud está en cola.",
1644
+ thankYouSupportMessage: "Un ingeniero de soporte le dará seguimiento pronto. Guarde esta página si tiene capturas de pantalla adicionales.",
1146
1645
  field: {
1147
- firstName: 'First name',
1148
- lastName: 'Last name',
1149
- email: 'Work email',
1150
- phone: 'Phone',
1151
- jobTitle: 'Job title',
1152
- company: 'Company',
1153
- website: 'Website',
1154
- industry: 'Industry',
1155
- companySize: 'Company size',
1156
- howCanWeHelp: 'How can we help?',
1157
- subject: 'Subject',
1158
- description: 'Description',
1159
- issueType: 'Issue type',
1160
- priority: 'Priority',
1646
+ firstName: "Nombre",
1647
+ lastName: "Apellido",
1648
+ email: "Correo empresarial",
1649
+ phone: "Teléfono",
1650
+ jobTitle: "Cargo",
1651
+ company: "Empresa",
1652
+ website: "Sitio web",
1653
+ industry: "Industria",
1654
+ companySize: "Tamaño de empresa",
1655
+ howCanWeHelp: "¿Cómo podemos ayudarle?",
1656
+ subject: "Asunto",
1657
+ description: "Descripción",
1658
+ issueType: "Tipo de problema",
1659
+ priority: "Prioridad",
1161
1660
  },
1162
1661
  industry: {
1163
- technology: 'Technology',
1164
- software: 'Software / SaaS',
1165
- finance: 'Finance',
1166
- healthcare: 'Healthcare',
1167
- retail: 'Retail',
1168
- other: 'Other',
1662
+ technology: "Tecnología",
1663
+ software: "Software / SaaS",
1664
+ finance: "Finanzas",
1665
+ healthcare: "Salud",
1666
+ retail: "Retail",
1667
+ other: "Otro",
1169
1668
  },
1170
1669
  issueType: {
1171
- question: 'Question',
1172
- problem: 'Problem',
1173
- bug: 'Bug',
1174
- feature_request: 'Feature request',
1670
+ question: "Pregunta",
1671
+ problem: "Problema",
1672
+ bug: "Error",
1673
+ feature_request: "Solicitud de función",
1175
1674
  },
1176
1675
  priority: {
1177
- low: 'Low',
1178
- medium: 'Medium',
1179
- high: 'High',
1180
- critical: 'Critical',
1676
+ low: "Baja",
1677
+ medium: "Media",
1678
+ high: "Alta",
1679
+ critical: "Crítica",
1181
1680
  },
1182
1681
  },
1183
1682
  },
1184
1683
  marketplace: {
1185
- title: 'App Marketplace',
1186
- subtitle: 'Browse approved apps published to the ObjectStack catalog. Click an app to view details and install it into one of your environments.',
1187
- searchPlaceholder: 'Search apps by name or manifest ID…',
1188
- searchAria: 'Search marketplace apps',
1189
- installed: 'Installed',
1190
- installedCount: 'Installed ({{count}})',
1191
- refresh: 'Refresh',
1192
- all: 'All',
1193
- noApprovedYet: 'No apps have been approved for the marketplace yet.',
1194
- noMatchFilters: 'No apps match your filters.',
1195
- noDescription: 'No description provided.',
1196
- back: 'Back to marketplace',
1197
- installedTitle: 'Installed Apps',
1198
- installedSubtitle: 'Marketplace packages currently installed into this runtime\'s kernel. Cached manifests live in <code>.objectstack/installed-packages/</code> and survive restarts.',
1199
- installedEmpty: 'No marketplace apps installed in this runtime yet.',
1200
- browseLink: 'Browse the marketplace →',
1201
- installedAdditiveNote: '<strong>Note:</strong> The kernel API is additive only — uninstall removes the on-disk manifest so the package won\'t load on next boot, but the running kernel keeps the app registered until you restart the runtime.',
1202
- installedAt: 'Installed {{when}}',
1203
- installedBy: 'by {{user}}',
1204
- installedPackageId: 'package',
1205
- cachedAs: 'Cached as <code>{{path}}</code>',
1206
- versionBadge: 'v{{version}}',
1207
- installedBadge: 'Installed v{{version}}',
1684
+ title: "Marketplace de aplicaciones",
1685
+ subtitle: "Explore aplicaciones aprobadas publicadas en el catálogo de ObjectStack. Haga clic en una aplicación para ver detalles e instalarla en uno de sus entornos.",
1686
+ searchPlaceholder: "Buscar aplicaciones por nombre o ID de manifiesto…",
1687
+ searchAria: "Buscar aplicaciones del marketplace",
1688
+ installed: "Instalado",
1689
+ installedCount: "Instaladas ({{count}})",
1690
+ refresh: "Actualizar",
1691
+ all: "Todas",
1692
+ noApprovedYet: "Aún no hay aplicaciones aprobadas para el marketplace.",
1693
+ noMatchFilters: "Ninguna aplicación coincide con sus filtros.",
1694
+ noDescription: "Sin descripción disponible.",
1695
+ back: "Volver al marketplace",
1696
+ installedTitle: "Aplicaciones instaladas",
1697
+ installedSubtitle: "Paquetes del marketplace instalados en el kernel de este runtime.",
1698
+ installedEmpty: "Aún no hay aplicaciones del marketplace instaladas en este runtime.",
1699
+ browseLink: "Explorar marketplace →",
1700
+ installedAdditiveNote: "<strong>Nota:</strong> La API del kernel es solo aditiva — desinstalar elimina el manifiesto del disco para que el paquete no se cargue al próximo inicio, pero el kernel en ejecución mantiene la aplicación registrada hasta reiniciar.",
1701
+ installedAt: "Instalado {{when}}",
1702
+ installedBy: "por {{user}}",
1703
+ installedPackageId: "Paquete",
1704
+ cachedAs: "Almacenado en caché como <code>{{path}}</code>",
1705
+ versionBadge: "v{{version}}",
1706
+ installedBadge: "Instalado v{{version}}",
1208
1707
  load: {
1209
- failed: 'Failed to load marketplace',
1210
- failedHint: 'By default this runtime points at the public ObjectStack cloud. Check the runtime is online, or override <code>OS_CLOUD_URL</code> to point at a self-hosted control plane.',
1211
- packageFailed: 'Failed to load package',
1212
- notFound: 'Not found.',
1708
+ failed: "No se pudo cargar el marketplace",
1709
+ failedHint: "Por defecto, este runtime apunta a la nube pública de ObjectStack. Asegúrese de que el runtime esté en línea.",
1710
+ packageFailed: "No se pudo cargar el paquete",
1711
+ notFound: "No encontrado.",
1213
1712
  },
1214
1713
  detail: {
1215
- homepage: 'Homepage',
1216
- installedV: 'Installed · v{{version}}',
1217
- about: 'About',
1218
- noReadme: 'No readme provided.',
1219
- versions: 'Versions',
1220
- noApprovedVersions: 'No approved versions.',
1221
- prerelease: 'pre',
1222
- moreOptions: 'More install options',
1223
- uninstallFromRuntime: 'Uninstall from this runtime',
1714
+ homepage: "Página de inicio",
1715
+ installedV: "Instalado · v{{version}}",
1716
+ about: "Acerca de",
1717
+ noReadme: "Sin readme disponible.",
1718
+ versions: "Versiones",
1719
+ noApprovedVersions: "Sin versiones aprobadas.",
1720
+ prerelease: "Prelanzamiento",
1721
+ moreOptions: "Más opciones de instalación",
1722
+ uninstallFromRuntime: "Desinstalar de este runtime",
1723
+ addSampleData: 'Agregar datos de ejemplo',
1724
+ reseedAgain: 'Volver a cargar datos de ejemplo',
1725
+ purgeSampleData: 'Eliminar datos de ejemplo',
1726
+ purgeConfirm: '¿Eliminar todos los registros de ejemplo creados por este paquete? Los registros añadidos por el usuario NO se verán afectados.',
1727
+ purgeSuccess: 'Se eliminaron {{count}} registro(s) de ejemplo.',
1728
+ purgeNoData: 'No se encontraron registros de ejemplo para eliminar.',
1729
+ reseedQueued: 'Los datos de ejemplo se volverán a cargar en el próximo acceso al entorno.',
1730
+ reseedLocalSuccess: 'Datos de ejemplo recargados: {{inserted}} insertados, {{updated}} actualizados.',
1731
+ reseedPartialErrors: '({{count}} registro(s) no se pudieron escribir)',
1732
+ updateAvailable: 'Actualización disponible',
1224
1733
  },
1225
1734
  action: {
1226
- install: 'Install',
1227
- reinstall: 'Reinstall',
1228
- working: 'Working…',
1229
- installToCloud: 'Install to cloud…',
1230
- installing: 'Installing…',
1231
- uninstall: 'Uninstall',
1232
- uninstalling: 'Uninstalling…',
1233
- details: 'Details',
1234
- close: 'Close',
1235
- dismiss: 'Dismiss',
1236
- openOnCloud: 'Open on cloud',
1237
- backHome: 'Back to home',
1735
+ install: "Instalar",
1736
+ reinstall: "Reinstalar",
1737
+ working: "Procesando…",
1738
+ installToCloud: "Instalar en la nube…",
1739
+ installing: "Instalando…",
1740
+ uninstall: "Desinstalar",
1741
+ uninstalling: "Desinstalando…",
1742
+ details: "Detalles",
1743
+ close: "Cerrar",
1744
+ dismiss: "Descartar",
1745
+ openOnCloud: "Abrir en la nube",
1746
+ backHome: "Volver al inicio",
1238
1747
  },
1239
1748
  install: {
1240
- dialogTitle: 'Install {{name}}',
1241
- dialogDescCurrent: 'Install into this environment ({{host}}).',
1242
- dialogDescPicker: 'Choose an environment to install this app into. You need to be signed into ObjectStack Cloud.',
1243
- environment: 'Environment',
1244
- environmentPlaceholder: 'Pick an environment',
1245
- includeSampleData: 'Include sample data',
1246
- noEnvs: 'No environments found in your active organization.',
1247
- noPermission: 'You do not have permission to install apps in any environment. Only organization owners and admins can install — ask your workspace admin.',
1248
- signInFirst: 'You need to sign into ObjectStack Cloud first. Click "Open on cloud" below.',
1249
- success: 'Installed successfully. Open the environment to see the new app.',
1250
- localSuccess: 'Installed v{{version}} to this runtime. "{{name}}" should now appear in the app switcher.',
1251
- localManifestConflict: '{{message}}\nTip: a local app already owns this manifest_id. Remove it from objectstack.config.ts first.',
1252
- localUnauthorized: 'Sign in to this runtime first, then try again.',
1253
- localMarketplaceUnavailable: 'This runtime has no OS_CLOUD_URL configured, so the marketplace catalog is unreachable.',
1749
+ dialogTitle: "Instalar {{name}}",
1750
+ dialogDescCurrent: "Instalar en este entorno ({{host}}).",
1751
+ dialogDescPicker: "Elija un entorno donde instalar esta aplicación. Debe haber iniciado sesión en ObjectStack Cloud.",
1752
+ environment: "Entorno",
1753
+ environmentPlaceholder: "Seleccionar entorno",
1754
+ includeSampleData: "Incluir datos de muestra",
1755
+ noEnvs: "No se encontraron entornos en su organización activa.",
1756
+ noPermission: "No tiene permiso para instalar aplicaciones en un entorno. Solo los propietarios y administradores de la organización pueden instalar.",
1757
+ signInFirst: "Primero debe iniciar sesión en ObjectStack Cloud.",
1758
+ success: "Instalado correctamente. Abra el entorno para ver la nueva aplicación.",
1759
+ localSuccess: "v{{version}} instalado en este runtime. \"{{name}}\" debería aparecer en el selector de aplicaciones ahora.",
1760
+ localManifestConflict: "{{message}}\nNota: Una aplicación local ya tiene este manifest_id. Primero elimínela de objectstack.config.ts.",
1761
+ localUnauthorized: "Primero inicie sesión en este runtime.",
1762
+ localMarketplaceUnavailable: "Este runtime no tiene configurado OS_CLOUD_URL.",
1254
1763
  },
1255
1764
  uninstall: {
1256
- confirm: 'Uninstall {{manifestId}} v{{version}} from this runtime?\n\nThe cached manifest will be removed. The app will remain loaded in the running kernel until the next restart.',
1257
- successInList: 'Removed {{manifestId}}. Restart the runtime to fully unload it from the running kernel.',
1258
- successInDetail: 'Removed cached manifest for {{manifestId}}. Restart the runtime to fully unload the app from the running kernel.',
1765
+ confirm: "¿Desinstalar {{manifestId}} v{{version}} de este runtime?\n\nEl manifiesto en caché será eliminado.",
1766
+ successInList: "{{manifestId}} eliminado. Reinicie el runtime para descargarlo completamente.",
1767
+ successInDetail: "Manifiesto en caché para {{manifestId}} eliminado.",
1259
1768
  },
1260
1769
  accessDenied: {
1261
- title: 'App Marketplace is admin-only',
1262
- description: 'You don\'t have permission to install apps in this environment. Ask an owner or admin of this organization for access.',
1770
+ title: "Marketplace solo para administradores",
1771
+ description: "No tiene permiso para instalar aplicaciones en este entorno.",
1263
1772
  },
1264
1773
  category: {
1265
- crm: 'CRM',
1266
- erp: 'ERP',
1267
- hr: 'Human Resources',
1268
- finance: 'Finance',
1269
- project: 'Project Management',
1270
- collaboration: 'Collaboration',
1271
- analytics: 'Analytics',
1272
- integration: 'Integration',
1273
- automation: 'Automation',
1274
- ai: 'AI',
1275
- security: 'Security',
1276
- 'developer-tools': 'Developer Tools',
1277
- 'ui-theme': 'UI Theme',
1278
- storage: 'Storage',
1279
- other: 'Other',
1774
+ crm: "CRM",
1775
+ erp: "ERP",
1776
+ hr: "RRHH",
1777
+ finance: "Finanzas",
1778
+ project: "Gestión de proyectos",
1779
+ collaboration: "Colaboración",
1780
+ analytics: "Analítica",
1781
+ integration: "Integración",
1782
+ automation: "Automatización",
1783
+ ai: "IA",
1784
+ security: "Seguridad",
1785
+ "developer-tools": "Herramientas de desarrollador",
1786
+ "ui-theme": "Tema de UI",
1787
+ storage: "Almacenamiento",
1788
+ other: "Otro",
1280
1789
  },
1281
1790
  pricing: {
1282
- free: 'Free',
1283
- freemium: 'Freemium',
1284
- paid: 'Paid',
1285
- subscription: 'Subscription',
1286
- 'usage-based': 'Usage-based',
1287
- 'contact-sales': 'Contact Sales',
1791
+ free: "Gratis",
1792
+ freemium: "Freemium",
1793
+ paid: "De pago",
1794
+ subscription: "Suscripción",
1795
+ "usage-based": "Por uso",
1796
+ "contact-sales": "Contactar ventas",
1288
1797
  },
1289
1798
  relativeTime: {
1290
- today: 'today',
1291
- daysAgo: '{{count}}d ago',
1292
- monthsAgo: '{{count}}mo ago',
1293
- yearsAgo: '{{count}}y ago',
1799
+ today: "hoy",
1800
+ daysAgo: "hace {{count}}d",
1801
+ monthsAgo: "hace {{count}} meses",
1802
+ yearsAgo: "hace {{count}} años",
1294
1803
  },
1295
1804
  },
1805
+ approvalsInbox: {
1806
+ loadMore: 'Cargar más',
1807
+ loadingMore: 'Cargando…',
1808
+ loadedOf: '{{loaded}} de {{total}} cargadas',
1809
+ actEscalate: 'SLA escalado',
1810
+ systemSlaActor: 'Sistema (SLA)',
1811
+ reassignBtn: 'Reasignar',
1812
+ reassignTitle: '¿Pasar esta aprobación a otra persona?',
1813
+ reassignBody: 'Tu puesto de aprobador pasa a la persona elegida; se le notifica y puede actuar de inmediato.',
1814
+ reassignTo: 'Nuevo aprobador',
1815
+ reassignToPlaceholder: 'Elige un usuario o escribe un email / role:<nombre>',
1816
+ reassignSuccess: 'Reasignada a {{to}}',
1817
+ requestInfoBtn: 'Pedir información',
1818
+ requestInfoTitle: '¿Pedir más información al solicitante?',
1819
+ requestInfoBody: 'La solicitud sigue pendiente; el solicitante recibe un aviso y puede responder en el hilo.',
1820
+ requestInfoPlaceholder: '¿Qué necesitas del solicitante?',
1821
+ requestInfoSent: 'Devuelta al solicitante para más información',
1822
+ remindBtn: 'Recordatorio',
1823
+ remindSuccess: 'Recordatorio enviado a {{count}} aprobador(es)',
1824
+ remindThrottled: 'Ya se envió un recordatorio hace poco; inténtalo más tarde.',
1825
+ replyPlaceholder: 'Responder en esta solicitud…',
1826
+ slaRemaining: 'SLA: quedan {{dur}}',
1827
+ slaOverdue: 'SLA vencido {{dur}}',
1828
+ actReassign: 'Reasignada',
1829
+ actRemind: 'Recordatorio',
1830
+ actRequestInfo: 'Pidió más información',
1831
+ actComment: 'Comentó',
1832
+ stepProgress: 'Pasos de aprobación',
1833
+ prevRequest: 'Anterior',
1834
+ nextRequest: 'Siguiente',
1835
+ positionOf: '{{index}} de {{total}}',
1836
+ quickPhrase1: 'Aprobada: cumple los requisitos.',
1837
+ quickPhrase2: 'Aprobada con condiciones: supervisar la ejecución.',
1838
+ quickPhrase3: 'Añade documentación de apoyo y vuelve a enviarla.',
1839
+ title: 'Centro de aprobaciones',
1840
+ subtitle: 'Revisa y gestiona las solicitudes de aprobación.',
1841
+ refresh: 'Actualizar',
1842
+ tabMyPending: 'Pendientes de mí',
1843
+ tabSubmitted: 'Enviadas por mí',
1844
+ tabAll: 'Todas',
1845
+ searchPlaceholder: 'Buscar registro, proceso, solicitante…',
1846
+ clearSearch: 'Borrar búsqueda',
1847
+ statusFilter: 'Estado',
1848
+ allStatuses: 'Todos los estados',
1849
+ processFilter: 'Proceso',
1850
+ allProcesses: 'Todos los procesos',
1851
+ objectFilter: 'Objeto',
1852
+ allObjects: 'Todos los objetos',
1853
+ filterCount: '{{shown}} de {{total}}',
1854
+ selected: 'seleccionadas',
1855
+ actionableCount: '({{count}} accionables)',
1856
+ selectAll: 'Seleccionar todo',
1857
+ selectRow: 'Seleccionar solicitud',
1858
+ colRequest: 'Solicitud',
1859
+ colRecord: 'Registro',
1860
+ colRequester: 'Solicitante',
1861
+ colStatus: 'Estado',
1862
+ colWaiting: 'Enviada',
1863
+ colActions: 'Acciones',
1864
+ statusPending: 'Pendiente',
1865
+ statusApproved: 'Aprobada',
1866
+ statusRejected: 'Rechazada',
1867
+ statusRecalled: 'Retirada',
1868
+ statusReturned: 'Devuelto para revisión',
1869
+ sendBackBtn: 'Devolver',
1870
+ sendBackTitle: '¿Devolver esta solicitud para revisión?',
1871
+ sendBackBody: 'Esta ronda termina y el registro se desbloquea para que el solicitante corrija los datos. Al volver a enviarla, se abre una nueva ronda de aprobación para todos los aprobadores.',
1872
+ sendBackPlaceholder: '¿Qué hay que corregir antes de poder aprobarla?',
1873
+ sendBackSuccess: 'Devuelta para revisión: el solicitante ya puede editar y volver a enviar',
1874
+ sendBackAutoRejected: 'Límite de revisiones alcanzado: la solicitud se rechazó automáticamente',
1875
+ actRevise: 'Devuelto para revisión',
1876
+ actResubmit: 'Reenviado',
1877
+ roundChip: 'Ronda {{n}}',
1878
+ returnedHint: 'Un aprobador te devolvió esta solicitud. El registro está desbloqueado: corrige los datos y vuelve a enviarla para iniciar una nueva ronda de aprobación.',
1879
+ resubmitBtn: 'Volver a enviar',
1880
+ resubmitting: 'Reenviando…',
1881
+ resubmitSuccess: 'Reenviada: se abrió una nueva ronda de aprobación',
1882
+ resubmitPlaceholder: '¿Qué cambiaste?',
1883
+ editRecordBtn: 'Editar registro',
1884
+ abandonTitle: '¿Abandonar esta revisión?',
1885
+ abandonBody: 'La solicitud se retira en lugar de reenviarse. La aprobación termina aquí.',
1886
+ emptyTitle: 'Sin solicitudes',
1887
+ emptyPending: 'Todo al día: nada espera tu aprobación.',
1888
+ emptyOther: 'Aún no hay nada aquí.',
1889
+ emptyViewAll: 'Ver todas las solicitudes',
1890
+ noMatches: 'Sin coincidencias con los filtros actuales.',
1891
+ keyboardHint: 'Teclado: j/k mover · Enter abrir · x seleccionar · a aprobar · r rechazar',
1892
+ drawerTitle: 'Solicitud de aprobación',
1893
+ submittedAgo: 'Enviada {{when}}',
1894
+ completedAt: 'Completada {{when}}',
1895
+ waitingOn: 'A la espera de',
1896
+ history: 'Actividad',
1897
+ noActions: 'Aún no hay acciones.',
1898
+ actSubmit: 'Enviada',
1899
+ actApprove: 'Aprobada',
1900
+ actReject: 'Rechazada',
1901
+ actRecall: 'Retirada',
1902
+ rawData: 'Datos sin procesar (JSON)',
1903
+ copy: 'Copiar',
1904
+ copied: 'Copiado',
1905
+ copyFailed: 'Error al copiar',
1906
+ overrideActor: 'Actuar como otra identidad (admin)',
1907
+ actor: 'Actor',
1908
+ auto: 'Auto',
1909
+ overrideHint: 'p. ej. role:sales_manager. Déjalo vacío para usar la identidad detectada.',
1910
+ comment: 'Comentario (opcional)',
1911
+ approve: 'Aprobar',
1912
+ approving: 'Aprobando…',
1913
+ reject: 'Rechazar',
1914
+ rejecting: 'Rechazando…',
1915
+ recall: 'Retirar',
1916
+ recalling: 'Retirando…',
1917
+ cancel: 'Cancelar',
1918
+ clear: 'Limpiar',
1919
+ approveN: 'Aprobar {{count}}',
1920
+ rejectN: 'Rechazar {{count}}',
1921
+ bulkApproveTitle: '¿Aprobar {{count}} solicitudes?',
1922
+ bulkApproveBody: 'Cada solicitud se aprueba con tu identidad y su flujo continúa por la rama de aprobación.',
1923
+ bulkRejectTitle: '¿Rechazar {{count}} solicitudes?',
1924
+ bulkRejectBody: 'Se rechazarán las solicitudes seleccionadas y se notificará a los solicitantes.',
1925
+ bulkApproved: '{{count}} solicitudes aprobadas',
1926
+ bulkRejected: '{{count}} solicitudes rechazadas',
1927
+ bulkPartial: '{{ok}} con éxito, {{fail}} fallidas: {{which}}',
1928
+ rejectOneTitle: '¿Rechazar "{{title}}"?',
1929
+ rejectOneBody: 'Se rechaza la solicitud y se notifica al solicitante.',
1930
+ rejectTitle: '¿Rechazar esta solicitud?',
1931
+ rejectBody: 'La solicitud se marcará como rechazada y se notificará al solicitante.',
1932
+ recallTitle: '¿Retirar esta solicitud?',
1933
+ recallBody: 'Al retirarla, los aprobadores ya no podrán actuar y el registro se desbloqueará.',
1934
+ inlineApproved: '"{{title}}" aprobada',
1935
+ inlineRejected: '"{{title}}" rechazada',
1936
+ approvedFinal: 'Aprobada',
1937
+ approvedWaiting: 'Aprobada — a la espera del resto de aprobadores',
1938
+ rejectedToast: 'Rechazada',
1939
+ recalledToast: 'Solicitud retirada',
1940
+ whyDisabled: 'Solo los aprobadores asignados pueden actuar. A la espera de: {{who}}.',
1941
+ whyDisabledSubmitter: 'Enviaste esta solicitud, así que puedes retirarla; pero solo los aprobadores asignados pueden aprobarla o rechazarla.',
1942
+ noActor: 'No se puede determinar la identidad',
1943
+ actionFailed: 'La acción falló',
1944
+ loadFailed: 'No se pudo cargar la solicitud',
1945
+ recallUnavailable: 'Retirar no está disponible en esta implementación.',
1946
+ requestGone: 'Esta solicitud ya no existe. Actualiza la lista.',
1947
+ notAllowed: 'No tienes permiso para realizar esta acción.',
1948
+ alreadyDecided: 'Esta solicitud ya fue decidida. Actualiza la lista.',
1949
+ justNow: 'justo ahora',
1950
+ minutesAgo: 'hace {{count}} min',
1951
+ hoursAgo: 'hace {{count}} h',
1952
+ daysAgo: 'hace {{count}} días',
1953
+ },
1954
+ preview: {
1955
+ empty: {
1956
+ loadFailedTitle: 'No se pudo cargar la vista previa del borrador',
1957
+ loadFailedDescription: 'No se pudo leer la capa de borrador. Reintenta o comprueba tu conexión.',
1958
+ notReadyTitle: '«{{app}}» aún no está en el borrador',
1959
+ notReadyDescription: 'La compilación puede seguir en curso, o falló antes de preparar esta aplicación. Revisa la conversación para ver el estado — este panel se actualiza cuando llegan borradores.',
1960
+ nothingTitle: 'Nada que previsualizar todavía',
1961
+ retry: 'Reintentar',
1962
+ },
1963
+ draftBar: {
1964
+ message: 'Vista previa de borrador — estás viendo cambios sin publicar. Nada está en producción hasta que publiques.',
1965
+ publish: 'Publicar',
1966
+ publishing: 'Publicando…',
1967
+ exit: 'Salir de la vista previa',
1968
+ changes: 'Cambios',
1969
+ },
1970
+ changes: {
1971
+ title: 'Cambios pendientes',
1972
+ description: 'Lo que cambiará al publicar. Los elementos nuevos se añaden; las actualizaciones sobrescriben la versión publicada.',
1973
+ loading: 'Cargando cambios pendientes…',
1974
+ loadFailed: 'No se pudieron cargar los cambios pendientes:',
1975
+ empty: 'Nada pendiente — todos los borradores se han publicado.',
1976
+ kindNew: 'Nuevo',
1977
+ kindUpdate: 'Actualización',
1978
+ },
1979
+ },
1980
+ filterBuilder: {
1981
+ where: "Donde",
1982
+ and: "Y",
1983
+ or: "O",
1984
+ clearAll: "Borrar todo",
1985
+ selectField: "Seleccionar campo",
1986
+ operator: "Operador",
1987
+ selectValue: "Seleccionar valor",
1988
+ value: "Valor",
1989
+ addFilter: "Agregar filtro",
1990
+ removeCondition: "Quitar condición",
1991
+ trueLabel: "Verdadero",
1992
+ falseLabel: "Falso",
1993
+ noResults: "Sin resultados",
1994
+ searchField: "Buscar {{label}}…",
1995
+ enterId: "Ingresar ID de {{label}}",
1996
+ operators: {
1997
+ equals: "Igual a",
1998
+ notEquals: "Distinto de",
1999
+ contains: "Contiene",
2000
+ notContains: "No contiene",
2001
+ isEmpty: "Está vacío",
2002
+ isNotEmpty: "No está vacío",
2003
+ greaterThan: "Mayor que",
2004
+ lessThan: "Menor que",
2005
+ greaterOrEqual: "Mayor o igual",
2006
+ lessOrEqual: "Menor o igual",
2007
+ before: "Antes de",
2008
+ after: "Después de",
2009
+ between: "Entre",
2010
+ in: "En",
2011
+ notIn: "No en",
2012
+ },
2013
+ },
2014
+ sortBuilder: {
2015
+ sortBy: "Ordenar por",
2016
+ thenBy: "Luego por",
2017
+ selectField: "Seleccionar campo",
2018
+ ascending: "A → Z",
2019
+ descending: "Z → A",
2020
+ addSort: "Agregar orden",
2021
+ removeSort: "Quitar orden",
2022
+ },
1296
2023
  };
1297
2024
  export default es;