inicontent 1.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.
Files changed (205) hide show
  1. package/.github/pull_request.yml +18 -0
  2. package/CONTRIBUTING.md +67 -0
  3. package/LICENSE +21 -0
  4. package/README.md +142 -0
  5. package/app/app.vue +106 -0
  6. package/app/assets/main.css +974 -0
  7. package/app/components/Api/EndpointCard.vue +169 -0
  8. package/app/components/Api/SchemaDocsTable.vue +208 -0
  9. package/app/components/Asset/Card.vue +1363 -0
  10. package/app/components/Asset/Grid.vue +295 -0
  11. package/app/components/Asset/Icon.vue +38 -0
  12. package/app/components/Asset/Preview.vue +486 -0
  13. package/app/components/Asset/Scanner.vue +700 -0
  14. package/app/components/Asset/Thumb.vue +708 -0
  15. package/app/components/Auth/Reset.vue +99 -0
  16. package/app/components/Auth/index.vue +346 -0
  17. package/app/components/ChatInterface.vue +2326 -0
  18. package/app/components/ChatPagePreview.vue +34 -0
  19. package/app/components/Column/Array.vue +29 -0
  20. package/app/components/Column/Asset.vue +21 -0
  21. package/app/components/Column/Boolean.vue +12 -0
  22. package/app/components/Column/Color.vue +9 -0
  23. package/app/components/Column/Date.vue +57 -0
  24. package/app/components/Column/Edit.vue +215 -0
  25. package/app/components/Column/Email.vue +9 -0
  26. package/app/components/Column/Html.vue +27 -0
  27. package/app/components/Column/Id.vue +20 -0
  28. package/app/components/Column/Locale.vue +32 -0
  29. package/app/components/Column/Object.vue +18 -0
  30. package/app/components/Column/Password.vue +7 -0
  31. package/app/components/Column/Role.vue +15 -0
  32. package/app/components/Column/S.vue +14 -0
  33. package/app/components/Column/Table/Single.vue +49 -0
  34. package/app/components/Column/Table/index.vue +42 -0
  35. package/app/components/Column/Tags.vue +31 -0
  36. package/app/components/Column/Text.vue +9 -0
  37. package/app/components/Column/Url.vue +9 -0
  38. package/app/components/Column/index.vue +41 -0
  39. package/app/components/Dashboard/Editor.vue +221 -0
  40. package/app/components/Dashboard/Grid.vue +270 -0
  41. package/app/components/Dashboard/View.vue +131 -0
  42. package/app/components/Dashboard/Widget/BarChart.vue +73 -0
  43. package/app/components/Dashboard/Widget/Counter.vue +51 -0
  44. package/app/components/Dashboard/Widget/LineChart.vue +76 -0
  45. package/app/components/Dashboard/Widget/PieChart.vue +75 -0
  46. package/app/components/Dashboard/Widget/Table.vue +94 -0
  47. package/app/components/Dashboard/WidgetEditor.vue +274 -0
  48. package/app/components/Data/Array.vue +102 -0
  49. package/app/components/Data/Html.vue +9 -0
  50. package/app/components/Data/Icon.vue +9 -0
  51. package/app/components/Data/Object.vue +10 -0
  52. package/app/components/Data/S.vue +16 -0
  53. package/app/components/Data/Table.vue +53 -0
  54. package/app/components/Data/Value.vue +34 -0
  55. package/app/components/Data/index.vue +14 -0
  56. package/app/components/Field/Array.vue +324 -0
  57. package/app/components/Field/Asset/Actions.vue +97 -0
  58. package/app/components/Field/Asset/index.vue +639 -0
  59. package/app/components/Field/Boolean.vue +26 -0
  60. package/app/components/Field/Checkbox.vue +48 -0
  61. package/app/components/Field/Color.vue +27 -0
  62. package/app/components/Field/Date.vue +30 -0
  63. package/app/components/Field/Email.vue +51 -0
  64. package/app/components/Field/EmailTemplate.vue +420 -0
  65. package/app/components/Field/Html/ColorPicker.vue +127 -0
  66. package/app/components/Field/Html/Editor.vue +544 -0
  67. package/app/components/Field/Html/index.vue +25 -0
  68. package/app/components/Field/Icon.vue +114 -0
  69. package/app/components/Field/JSON.vue +113 -0
  70. package/app/components/Field/Mention.vue +36 -0
  71. package/app/components/Field/Number.vue +27 -0
  72. package/app/components/Field/Object.vue +92 -0
  73. package/app/components/Field/Password.vue +55 -0
  74. package/app/components/Field/Radio.vue +47 -0
  75. package/app/components/Field/S.vue +44 -0
  76. package/app/components/Field/Select.vue +49 -0
  77. package/app/components/Field/Table.vue +348 -0
  78. package/app/components/Field/Tags.vue +113 -0
  79. package/app/components/Field/Text.vue +31 -0
  80. package/app/components/Field/Textarea.vue +33 -0
  81. package/app/components/Field/Url.vue +40 -0
  82. package/app/components/Field/Wrapper.vue +128 -0
  83. package/app/components/Field/index.vue +68 -0
  84. package/app/components/FloatingChatbot.vue +73 -0
  85. package/app/components/Form/Card.vue +151 -0
  86. package/app/components/Form/Drawer.vue +195 -0
  87. package/app/components/Form/index.vue +621 -0
  88. package/app/components/Header.vue +328 -0
  89. package/app/components/Offline/ConflictModal.vue +200 -0
  90. package/app/components/Offline/SyncStatus.vue +249 -0
  91. package/app/components/PlatformFeatureLanding.vue +65 -0
  92. package/app/components/Table/Backups.vue +638 -0
  93. package/app/components/Table/Flows.vue +814 -0
  94. package/app/components/Table/Grid.vue +296 -0
  95. package/app/components/Table/Icon.vue +36 -0
  96. package/app/components/Table/Logs.vue +181 -0
  97. package/app/components/Table/Schedules.vue +722 -0
  98. package/app/components/Table/Search/Button.vue +256 -0
  99. package/app/components/Table/Search/Items.vue +286 -0
  100. package/app/components/Table/Search/index.vue +87 -0
  101. package/app/components/Table/Settings/Schema.vue +801 -0
  102. package/app/components/Table/Settings/index.vue +631 -0
  103. package/app/components/Table/TranslateDrawer.vue +526 -0
  104. package/app/components/Table/Views/Kanban.vue +289 -0
  105. package/app/components/Table/Views/Table.vue +1273 -0
  106. package/app/components/Table/index.vue +890 -0
  107. package/app/composables/Translation/define.ts +41 -0
  108. package/app/composables/Translation/fetch.ts +107 -0
  109. package/app/composables/Translation/languages.ts +1 -0
  110. package/app/composables/Translation/loadCoreTranslations.ts +38 -0
  111. package/app/composables/Translation/translate.ts +250 -0
  112. package/app/composables/databaseCookies.ts +79 -0
  113. package/app/composables/fieldValidator.ts +72 -0
  114. package/app/composables/fieldsList.ts +301 -0
  115. package/app/composables/formatDatabase.ts +101 -0
  116. package/app/composables/index.ts +444 -0
  117. package/app/composables/openDrawer.ts +118 -0
  118. package/app/composables/optimizeFile.ts +287 -0
  119. package/app/composables/renderLabel.ts +88 -0
  120. package/app/composables/schemaClipboard.ts +95 -0
  121. package/app/composables/search.ts +353 -0
  122. package/app/composables/setThemeConfig.ts +48 -0
  123. package/app/composables/translationValue.ts +169 -0
  124. package/app/composables/useAssetPreview.ts +84 -0
  125. package/app/composables/useAssetUploader.ts +56 -0
  126. package/app/composables/useDashboardData.ts +310 -0
  127. package/app/composables/useDocumentThumbnail.ts +351 -0
  128. package/app/composables/useEcharts.ts +33 -0
  129. package/app/composables/useLocalDatabaseConfig.ts +51 -0
  130. package/app/composables/useOcr.ts +300 -0
  131. package/app/composables/useOfflineFetch.ts +194 -0
  132. package/app/composables/useOfflineItem.ts +107 -0
  133. package/app/composables/useOfflineQueue.ts +302 -0
  134. package/app/composables/useOfflineSync.ts +235 -0
  135. package/app/composables/usePasskeyAuth.ts +156 -0
  136. package/app/composables/usePdfCompressor.ts +180 -0
  137. package/app/composables/usePlatformRedirect.ts +72 -0
  138. package/app/composables/useRealtimeSync.ts +233 -0
  139. package/app/composables/useReferencedItems.ts +180 -0
  140. package/app/composables/useScanner.ts +664 -0
  141. package/app/composables/useSubscription.ts +650 -0
  142. package/app/composables/useThumbnailCache.ts +136 -0
  143. package/app/composables/useVideoCompressor.ts +194 -0
  144. package/app/error.vue +112 -0
  145. package/app/layouts/api.vue +188 -0
  146. package/app/layouts/dashboard.vue +91 -0
  147. package/app/layouts/default.vue +228 -0
  148. package/app/layouts/table.vue +471 -0
  149. package/app/locales/ar.ts +996 -0
  150. package/app/locales/en.ts +655 -0
  151. package/app/locales/es.ts +996 -0
  152. package/app/locales/fr.ts +997 -0
  153. package/app/middleware/dashboard.ts +33 -0
  154. package/app/middleware/database.ts +83 -0
  155. package/app/middleware/global.ts +1 -0
  156. package/app/middleware/sid-ingest.global.ts +29 -0
  157. package/app/middleware/table.ts +54 -0
  158. package/app/middleware/user.ts +26 -0
  159. package/app/pages/[[database]]/admin/api/auth/index.vue +306 -0
  160. package/app/pages/[[database]]/admin/api/index.vue +18 -0
  161. package/app/pages/[[database]]/admin/api/tables/[table]/index.vue +497 -0
  162. package/app/pages/[[database]]/admin/api/tables/index.vue +87 -0
  163. package/app/pages/[[database]]/admin/billing/index.vue +16 -0
  164. package/app/pages/[[database]]/admin/dashboards/[id]/edit.vue +66 -0
  165. package/app/pages/[[database]]/admin/dashboards/[id]/index.vue +117 -0
  166. package/app/pages/[[database]]/admin/dashboards/index.vue +20 -0
  167. package/app/pages/[[database]]/admin/index.vue +28 -0
  168. package/app/pages/[[database]]/admin/settings.vue +526 -0
  169. package/app/pages/[[database]]/admin/tables/[table]/[id]/edit.vue +143 -0
  170. package/app/pages/[[database]]/admin/tables/[table]/[id]/index.vue +146 -0
  171. package/app/pages/[[database]]/admin/tables/[table]/flows.vue +10 -0
  172. package/app/pages/[[database]]/admin/tables/[table]/index.vue +10 -0
  173. package/app/pages/[[database]]/admin/tables/[table]/new.vue +12 -0
  174. package/app/pages/[[database]]/admin/tables/[table]/schedules.vue +10 -0
  175. package/app/pages/[[database]]/admin/tables/[table]/settings.vue +30 -0
  176. package/app/pages/[[database]]/admin/tables/assets/[...path].vue +24 -0
  177. package/app/pages/[[database]]/admin/tables/assets/flows.vue +10 -0
  178. package/app/pages/[[database]]/admin/tables/backups/index.vue +10 -0
  179. package/app/pages/[[database]]/admin/tables/blocks/index.vue +16 -0
  180. package/app/pages/[[database]]/admin/tables/index.vue +20 -0
  181. package/app/pages/[[database]]/admin/tables/pages/index.vue +16 -0
  182. package/app/pages/[[database]]/admin/tables/templates/index.vue +16 -0
  183. package/app/pages/[[database]]/api/index.vue +120 -0
  184. package/app/pages/[[database]]/auth/index.vue +12 -0
  185. package/app/pages/[[database]]/auth/reset.vue +10 -0
  186. package/app/pages/[[database]]/index.vue +10 -0
  187. package/app/plugins/offline-warmup.client.ts +53 -0
  188. package/app/plugins/template-globals.ts +9 -0
  189. package/app/spa-loading-template.html +93 -0
  190. package/biome.json +53 -0
  191. package/index.d.ts +380 -0
  192. package/modules/naiveui.ts +41 -0
  193. package/nuxt.config.ts +269 -0
  194. package/package.json +56 -0
  195. package/pnpm-workspace.yaml +5 -0
  196. package/public/apple-touch-icon.png +0 -0
  197. package/public/favicon-16x16.png +0 -0
  198. package/public/favicon-32x32.png +0 -0
  199. package/public/favicon.ico +0 -0
  200. package/public/pwa-192x192.png +0 -0
  201. package/public/pwa-512x512.png +0 -0
  202. package/public/pwa-maskable-192x192.png +0 -0
  203. package/public/pwa-maskable-512x512.png +0 -0
  204. package/public/vendor/opencv.js +48 -0
  205. package/tsconfig.json +9 -0
@@ -0,0 +1,996 @@
1
+ export default {
2
+ es: {
3
+ // Actions
4
+ edit: "Editar",
5
+ create: "Crear",
6
+ cancel: "Cancelar",
7
+ save: "Guardar",
8
+ submit: "Enviar",
9
+ update: "Actualizar",
10
+ search: "Buscar",
11
+ filter: "Filtrar",
12
+ billing: "Facturación",
13
+ reset: "Restablecer",
14
+ close: "Cerrar",
15
+ confirm: "Confirmar",
16
+ add: "Añadir",
17
+ remove: "Eliminar",
18
+ upload: "Subir",
19
+ download: "Descargar",
20
+ export: "Exportar",
21
+ import: "Importar",
22
+ refresh: "Actualizar",
23
+ set: "Establecer",
24
+ unset: "Vaciar",
25
+ replace: "Reemplazar",
26
+ rename: "Renombrar",
27
+ new: "Nuevo",
28
+ flows: "Flujos",
29
+ actions: "Acciones",
30
+ createFromClipboard: "Crear desde el portapapeles",
31
+ view: "Ver",
32
+ rightClickToEdit: "Clic derecho para editar",
33
+ pressAndHoldToEdit: "Mantén pulsado para editar",
34
+ copyItem: "Copiar elemento",
35
+ pasteItem: "Pegar elemento",
36
+ copyFields: "Copiar campos",
37
+ pasteFields: "Pegar campos del portapapeles",
38
+ noFieldsInClipboard: "No hay campos en el portapapeles",
39
+ noFieldsToCopy: "No hay campos para copiar",
40
+ cutSuccessfully: "Cortado con éxito",
41
+ clipboardItemIsNotCorrect: "El elemento del portapapeles no es correcto",
42
+ publish: "Publicar",
43
+ selectAll: "Seleccionar todo",
44
+ clearAll: "Deseleccionar todo",
45
+
46
+ // Status messages
47
+ success: "Éxito",
48
+ error: "Error",
49
+ warning: "Advertencia",
50
+ info: "Info",
51
+ loading: "Cargando",
52
+
53
+ // Common nouns
54
+ name: "Nombre",
55
+ slug: "Identificador de texto",
56
+ description: "Descripción",
57
+ title: "Título",
58
+ content: "Contenido",
59
+ type: "Tipo",
60
+ status: "Estado",
61
+ date: "Fecha",
62
+ time: "Hora",
63
+ size: "Tamaño",
64
+ link: "Enlace",
65
+ label: "Etiqueta",
66
+ icon: "Icono",
67
+ username: "Nombre de usuario",
68
+ email: "Correo electrónico",
69
+ password: "Contraseña",
70
+ role: "Rol",
71
+ item: "Elemento",
72
+ anItem: "Un elemento",
73
+
74
+ // Navigation
75
+ home: "Inicio",
76
+ back: "Atrás",
77
+ next: "Siguiente",
78
+ previous: "Anterior",
79
+
80
+ // Validation messages
81
+ isRequired: "Requerido",
82
+ required: "Obligatorio",
83
+ optional: "Opcional",
84
+ isInvalidFormat: "Formato inválido",
85
+ isNotValid: "No válido",
86
+ inputsAreInvalid: "Las entradas son inválidas",
87
+
88
+ // Confirmation messages
89
+ theFollowingActionIsIrreversible: "Esta acción es irreversible",
90
+ areYouSure: "¿Estás seguro?",
91
+ deleteSelectedAssetsConfirm:
92
+ "¿Eliminar {count} elemento(s) seleccionado(s)? Esta acción es irreversible.",
93
+ deleteAssetConfirm: "¿Eliminar este archivo? Esta acción es irreversible.",
94
+ deleteFolderConfirm:
95
+ "¿Eliminar la carpeta «{name}» y todo su contenido? Esta acción es irreversible.",
96
+ savedSuccessfully: "Guardado exitosamente",
97
+ updatedSuccessfully: "Actualizado exitosamente",
98
+ createdSuccessfully: "Creado exitosamente",
99
+ uploadFailed: "Carga fallida",
100
+ folderCreatedSuccessfully: "Carpeta creada exitosamente",
101
+ folderNameRequired: "El nombre de la carpeta es requerido",
102
+ filterSavedSuccessfully: "Filtro guardado exitosamente",
103
+ filterDeletedSuccessfully: "Filtro eliminado exitosamente",
104
+ filterLoaded: "Filtro cargado",
105
+ reorderFlows: "Reordenar flujos",
106
+ reorderFields: "Reordenar campos",
107
+
108
+ // Methods
109
+ get: "Mostrar",
110
+ post: "Crear",
111
+ put: "Actualizar",
112
+ delete: "Eliminar",
113
+ deleteSelectedItems: "Eliminar elementos seleccionados",
114
+
115
+ // API
116
+ apiDocumentation: "Documentación de API",
117
+ apiDocs: {
118
+ availableMethods: "Métodos disponibles",
119
+ sessionNoticeTitle: "Autenticación de sesión",
120
+ sessionNoticeDescription:
121
+ "Envía el ID de sesión con el parámetro {param} como query o cookie.",
122
+ sessionAsQuery: "Como parámetro de consulta:",
123
+ sessionAsCookie: "O envíalo como cookie en cada petición.",
124
+ sessionAuthLinkPrefix: "¿Necesitas un ID de sesión? Lee",
125
+ viewAuthDocs: "la documentación de auth",
126
+ schemaTitle: "Campos del esquema",
127
+ assetsUploadTitle: "Carga de archivos",
128
+ assetsUploadIntro:
129
+ "Haz un POST a /assets o /assets/<carpeta> con uno o varios objetos que describen los archivos.",
130
+ assetsUploadStep1:
131
+ "Cada objeto debe incluir name, size, type y extension. Puedes mandar un arreglo para múltiples archivos.",
132
+ assetsUploadStep2:
133
+ "La respuesta agrega id, createdAt, publicURL y uploadURL.",
134
+ assetsUploadStep3:
135
+ "Envía el binario al uploadURL devuelto mediante POST.",
136
+ assetsUploadCustomEndpoint:
137
+ "Si usas un endpoint propio, incluye publicURL en la petición inicial y el API no devolverá uploadURL.",
138
+ noSchemaFields: "No hay campos definidos para esta tabla.",
139
+ tableNotFoundTitle: "Tabla no encontrada",
140
+ tableNotFoundDescription: "Verifica el slug o selecciona otra tabla.",
141
+ backToTables: "Volver a las tablas API",
142
+ auth: {
143
+ title: "Endpoints de autenticación",
144
+ description:
145
+ "Usa estos endpoints para crear sesiones y alimentar el parámetro {param}.",
146
+ signinDescription:
147
+ "Autentica a un usuario. POST crea la sesión, PUT la actualiza.",
148
+ usernameField: "username — identificador único",
149
+ passwordField:
150
+ "password — contraseña en texto plano (se cifra en el servidor)",
151
+ signupDescription:
152
+ "Crea un nuevo usuario siguiendo el esquema de la tabla users.",
153
+ currentDescription: "Devuelve el usuario asociado al token {param}.",
154
+ signoutDescription: "Cierra la sesión activa y limpia la cookie.",
155
+ signupSchemaTitle: "Esquema de usuarios",
156
+ cookieHint:
157
+ "Un inicio de sesión exitoso guarda el ID en la cookie {param}. También puedes enviarlo manualmente.",
158
+ },
159
+ },
160
+
161
+ // Units
162
+ units: {
163
+ kB: "kB",
164
+ MB: "MB",
165
+ GB: "GB",
166
+ TB: "TB",
167
+ },
168
+
169
+ // Plural examples
170
+ items: {
171
+ one: "{{count}} elemento",
172
+ other: "{{count}} elementos",
173
+ },
174
+
175
+ compression: {
176
+ label: "Compresión de datos",
177
+ videoLarge:
178
+ "Video grande detectado ({size}). Lo optimizaremos localmente antes de subirlo.",
179
+ videoHuge:
180
+ "Video enorme detectado ({size}). La compresión ocurre localmente y puede tardar un poco.",
181
+ pdfLarge:
182
+ "PDF grande detectado ({size}). Lo reconstruiremos en tu navegador antes de subirlo.",
183
+ pdfHuge:
184
+ "PDF enorme detectado ({size}). Renderizar las páginas localmente puede tomar algo de tiempo.",
185
+ },
186
+
187
+ // Dashboard
188
+ settings: "Configuración",
189
+ toggleTheme: "Cambiar tema",
190
+ adminPanel: "Panel de administración",
191
+ allRightsReserved: "Todos los derechos reservados",
192
+ logout: "Cerrar sesión",
193
+ profile: "Perfil",
194
+ sessions: "Sesiones",
195
+ blocks: "Bloques",
196
+ pages: "Páginas",
197
+ users: "Usuarios",
198
+ admin: "Administrador",
199
+ user: "Usuario",
200
+ guest: "Invitado",
201
+ translations: "Traducciones",
202
+ assets: "Archivos",
203
+ databases: "Bases de datos",
204
+ createDatabase: "Crear base de datos",
205
+ basicInformation: "Información básica",
206
+ basicInformationDescription:
207
+ "Define los detalles de la base de datos y el idioma predeterminado.",
208
+ buildTables: "Construir tablas",
209
+ buildTablesDescription:
210
+ "Describe tus tablas y generaremos un esquema inicial.",
211
+ tables: "Tablas",
212
+ table: "Tabla",
213
+ totalDatabaseSize: "Tamaño total de la base de datos",
214
+ showAll: "Mostrar todo",
215
+ roles: "Roles",
216
+ quickSettings: "Ajustes rápidos",
217
+ makeItPrivate: "Hacerla privada",
218
+ read: "Leer",
219
+ primaryLanguage: "Idioma principal",
220
+ secondaryLanguages: "Idiomas secundarios",
221
+ languages: {
222
+ ar: "Árabe",
223
+ en: "Inglés",
224
+ fr: "Francés",
225
+ es: "Español",
226
+ },
227
+ tableSettings: "Configuración de tabla",
228
+ primaryColor: "Color principal",
229
+ primaryDarkColor: "Color principal oscuro",
230
+ auth: "Autenticación",
231
+ createdAt: "Fecha de creación",
232
+ updatedAt: "Fecha de actualización",
233
+ createdBy: "Creado por",
234
+ id: "ID",
235
+ copiedSuccessfully: "Copiado exitosamente",
236
+ skipCompression: "Omitir compresión",
237
+ print: "Imprimir",
238
+
239
+ // Auth
240
+ signin: "Iniciar sesión",
241
+ signup: "Registrarse",
242
+ authentication: "Página de inicio de sesión",
243
+ forgotPassword: "¿Olvidaste tu contraseña?",
244
+ sendResetLink: "Enviar enlace de restablecimiento",
245
+ resetPassword: "Restablecer contraseña",
246
+ newPassword: "Nueva contraseña",
247
+ confirmPassword: "Confirmar contraseña",
248
+ passwordMinimumLength: "La contraseña debe tener al menos 8 caracteres.",
249
+ passwordsDoNotMatch: "Las contraseñas no coinciden.",
250
+ invalidResetLink:
251
+ "Este enlace de restablecimiento no es válido o ha caducado.",
252
+ backToSignIn: "Volver al inicio de sesión",
253
+
254
+ // Table actions
255
+ tools: "Herramientas",
256
+ clearTable: "Vaciar tabla",
257
+ exportCurrentData: "Exportar datos actuales",
258
+ exportAllData: "Exportar todos los datos",
259
+ databaseExport: "Exportación de la base de datos",
260
+ databaseExportDescription:
261
+ "Crea un archivo privado con todos los esquemas y registros. Los archivos de recursos no están incluidos.",
262
+ startDatabaseExport: "Crear exportación",
263
+ databaseExportFailed: "La exportación de la base de datos falló",
264
+ databaseExportExpires: "Disponible hasta {date}",
265
+ databaseExportState: {
266
+ queued: "Exportación en espera",
267
+ running: "Exportando la base de datos",
268
+ completed: "Exportación lista",
269
+ failed: "La exportación falló",
270
+ expired: "La exportación caducó",
271
+ },
272
+ columns: "Columnas",
273
+ an_export_job_is_running_in_background: "Una exportación está en curso",
274
+ an_export_job_is_done: "La exportación ha terminado",
275
+ uploadingImportFile: "Subiendo archivo de importación",
276
+ an_import_job_is_running_in_background: "Una importación está en curso",
277
+ an_import_job_is_done: "La importación ha terminado",
278
+ an_import_job_failed: "La importación ha fallado",
279
+ importedRows: "{count} filas importadas",
280
+ kanban: "Kanban",
281
+ small: "Pequeño",
282
+ medium: "Mediano",
283
+ large: "Grande",
284
+ newTable: "Nueva tabla",
285
+ newItem: "Nuevo elemento",
286
+ schedules: "Programaciones",
287
+ tableSchedules: "Programaciones de tabla",
288
+ runNow: "Ejecutar ahora",
289
+ runAllActiveSchedules: "Ejecutar todas las programaciones activas",
290
+ noActiveSchedules: "No hay programaciones activas para ejecutar",
291
+ allActiveSchedulesRan:
292
+ "Todas las programaciones activas se ejecutaron correctamente",
293
+ someSchedulesFailed: "{count} programación(es) fallaron",
294
+ tableSlug: "Identificador de tabla",
295
+ clickToToggleDate: "Haz clic para cambiar la fecha",
296
+
297
+ // Table settings
298
+ generalSettings: "Configuración general",
299
+ schemaSettings: "Configuración de columnas",
300
+ changeOrder: "Cambiar orden",
301
+ deleteTable: "Eliminar tabla",
302
+ defaultSearchableColumns: "Columnas de búsqueda predeterminadas",
303
+ disableIdEncryption: "Desactivar cifrado de ID",
304
+ decodeID: "Decodificar ID",
305
+ prepend: "Prefijo",
306
+ recentItemsAppearAtTheTop: "Los elementos recientes aparecen arriba",
307
+ cache: "Caché",
308
+ clearCache: "Limpiar caché",
309
+ log: "Registro",
310
+ enableActivityLog: "Activar registro de actividad",
311
+ realtime: "Sincronización en tiempo real",
312
+ enableRealtimeSync: "Habilitar sincronización en tiempo real de datos",
313
+ realtimeEnabled: "Sincronización en tiempo real habilitada",
314
+ connectingToRealtime: "Conectando a sincronización en tiempo real...",
315
+ defaultTableColumns: "Columnas de tabla predeterminadas",
316
+ displayAs: "Mostrar como",
317
+ tableItemLabel: "Etiqueta de elemento de tabla",
318
+ cards: "Tarjetas",
319
+ list: "Lista",
320
+ urlSuffix: "Sufijo de URL",
321
+ config: "Configuración",
322
+
323
+ // Schema fields
324
+ fieldName: "Nombre del campo",
325
+ fieldDescription: "Descripción del campo",
326
+ allowedFiles: "Archivos permitidos",
327
+ options: "Opciones",
328
+ valuesType: "Tipo de valores",
329
+ tableName: "Nombre de la tabla",
330
+ expandByDefault: "Expandir por defecto",
331
+ dragToMove: "Arrastrar para mover",
332
+ fileType: {
333
+ image: "Imagen",
334
+ video: "Video",
335
+ audio: "Audio",
336
+ document: "Documento",
337
+ archive: "Archivo",
338
+ },
339
+ allowCustomValues: "Permitir valores personalizados",
340
+ unique: "Único",
341
+ uniqueGroup: "Grupo único",
342
+ regex: "Expresión regular",
343
+ uploadParams: "Parámetros de carga",
344
+ minimumItems: "Número mínimo de elementos",
345
+ maximumItems: "Número máximo de elementos",
346
+ ie: "por ejemplo",
347
+ useInison: "Usar Inison",
348
+ extendWhere: "Extender búsqueda",
349
+ labelsColoring: "Coloración de etiquetas",
350
+ optionLabel: "Nombre de la opción",
351
+ optionColor: "Color de la opción",
352
+ optimizeAssets: "Optimizar archivos",
353
+ optimizeAssetsDescription:
354
+ "Comprimir y optimizar automáticamente los archivos cargados para mejor rendimiento",
355
+ fieldTypeNotExisting: "El tipo de campo no existe",
356
+
357
+ // Activity log
358
+ latestActivities: "Actividades recientes",
359
+ updated: "Ha actualizado",
360
+ deleted: "Ha eliminado",
361
+ removed: "Eliminado",
362
+ created: "Ha creado",
363
+ asFollow: "como sigue",
364
+ in: "en",
365
+ to: "a",
366
+ from: "de",
367
+ as: "como",
368
+
369
+ // Assets
370
+ uploadFiles: "Subir archivos",
371
+ uploadFolder: "Subir carpeta",
372
+ createFolder: "Crear carpeta",
373
+ dropFilesHere: "Suelta los archivos aquí",
374
+ folderName: "Nombre de la carpeta",
375
+ image: "Imagen",
376
+ video: "Video",
377
+ gallery: "Galería",
378
+ assetLink: "Enlace del archivo",
379
+
380
+ // Search / Filters
381
+ convert_to_and_group: "Convertir a grupo Y",
382
+ convert_to_or_group: "Convertir a grupo O",
383
+ andGroup: "Grupo Y",
384
+ orGroup: "Grupo O",
385
+ favoriteFilters: "Filtros favoritos",
386
+ filterName: "Nombre del filtro",
387
+ filterNameCannotBeEmpty: "El nombre del filtro no puede estar vacío",
388
+ filterNameAlreadyExists: "El nombre del filtro ya existe",
389
+ noFavoriteFilters: "No hay filtros favoritos guardados",
390
+ relativeGroup: "Relativo",
391
+ relativePlaceholder: "por ej. hace 3 días",
392
+
393
+ // Comparison operators
394
+ ComparisonOperator: {
395
+ equalTo: "Igual a",
396
+ notEqualTo: "Diferente de",
397
+ greaterThan: "Mayor que",
398
+ greaterOrEqualTo: "Mayor o igual a",
399
+ lessThan: "Menor que",
400
+ lessOrEqualTo: "Menor o igual a",
401
+ contains: "Contiene",
402
+ doesNotContain: "No contiene",
403
+ isOneOf: "Es uno de",
404
+ isNotOneOf: "No es uno de",
405
+ },
406
+
407
+ // Field types
408
+ fields: {
409
+ string: "Texto",
410
+ shortText: "Texto corto",
411
+ longText: "Texto largo",
412
+ html: "Editor HTML",
413
+ number: "Número",
414
+ password: "Contraseña",
415
+ link: "Enlace",
416
+ email: "Correo electrónico",
417
+ color: "Color",
418
+ asset: "Archivo",
419
+ assets: "Archivos",
420
+ tags: "Etiquetas",
421
+ date: "Fecha",
422
+ dateTime: "Fecha y hora",
423
+ dateRange: "Rango de fechas",
424
+ dateTimeRange: "Rango de fecha y hora",
425
+ month: "Mes",
426
+ monthRange: "Rango de meses",
427
+ year: "Año",
428
+ yearRange: "Rango de años",
429
+ quarter: "Trimestre",
430
+ quarterRange: "Rango de trimestres",
431
+ week: "Semana",
432
+ toggle: "Alternar",
433
+ select: "Seleccionar",
434
+ checkbox: "Casilla de verificación",
435
+ radio: "Botón de radio",
436
+ array: "Matriz",
437
+ object: "Objeto",
438
+ objects: "Objetos",
439
+ table: "Tabla",
440
+ tableItems: "Elementos de tabla",
441
+ role: "Rol",
442
+ mention: "Mención",
443
+ id: "Identificador",
444
+ multiple: "Múltiple",
445
+ range: "Rango",
446
+ slider: "Deslizador",
447
+ ip: "Dirección IP",
448
+ json: "JSON",
449
+ custom: "Personalizado",
450
+ },
451
+
452
+ // Email settings
453
+ emailSettings: "Configuración de correo",
454
+ emailConfig: {
455
+ use_custom_smtp: "Usar SMTP personalizado",
456
+ from_email: "Correo del remitente",
457
+ from_name: "Nombre del remitente",
458
+ smtp_host: "Host SMTP",
459
+ smtp_port: "Puerto SMTP",
460
+ smtp_user: "Usuario SMTP",
461
+ smtp_pass: "Contraseña SMTP",
462
+ smtp_secure: "Conexión segura (TLS)",
463
+ },
464
+ smtpPasswordUnchanged: "Déjalo vacío para conservar la contraseña actual",
465
+ testEmailRecipient: "Correo del destinatario de prueba",
466
+ sendTestEmail: "Enviar correo de prueba",
467
+ emailSendFailed: "No se pudo enviar el correo. Comprueba la configuración.",
468
+
469
+ // Email template editor
470
+ emailTemplates: {
471
+ variables: "Variables",
472
+ variableName: "Nombre de la variable (p. ej. booking_date)",
473
+ add: "Añadir",
474
+ contentPlaceholder:
475
+ "Etiquetas <mjml>…</mjml> (o texto plano) — las variables como {{@user.email}} y {{@data.field}} se sustituyen al enviar.",
476
+ preview: "Vista previa con datos de ejemplo",
477
+ previewLoading: "Generando vista previa…",
478
+ previewSubject: "Asunto",
479
+ previewEmpty: "Empieza a escribir para ver la vista previa.",
480
+ recordFieldsHint:
481
+ "Todos los campos del registro que dispara el correo están disponibles como {{field}} o {{@data.field}}; el usuario actual como {{@user.field}}.",
482
+ sendTest: "Enviar prueba",
483
+ sendTestHint:
484
+ "Envía la plantilla actual (aunque no esté guardada) a la dirección indicada.",
485
+ testRecipient: "Correo del destinatario",
486
+ },
487
+
488
+ // Database settings
489
+ translationSettings: "Configuración de Traducción",
490
+ deleteDatabase: "Eliminar Base de Datos",
491
+
492
+ // Tables
493
+ templates: "Plantillas de correo",
494
+
495
+ // Flows
496
+ accessDenied: "Acceso denegado",
497
+ throwError: "Error",
498
+ if: "Si",
499
+ or: "O",
500
+ newCard: "Nueva tarjeta",
501
+ onRequest: "En solicitud",
502
+ onResponse: "En respuesta",
503
+ condition: "Condición",
504
+ addSchedule: "Añadir programación",
505
+ editSchedule: "Editar programación",
506
+ cronExpression: "Expresión cron",
507
+ payloadTemplate: "Plantilla de carga útil",
508
+ nextRunAt: "Próxima ejecución",
509
+ lastRunAt: "Última ejecución",
510
+ lastError: "Último error",
511
+ active: "Activo",
512
+ inactive: "Inactivo",
513
+ preset: "Preajuste",
514
+ excludeDays: "Excluir días",
515
+ excludeDaysHelp:
516
+ "Los días marcados se omitirán aunque la expresión cron coincida.",
517
+ excludedDays: "Días excluidos",
518
+ noExcludedDays: "Ninguno",
519
+ payloadHelp:
520
+ "Usa un objeto JSON o un objeto serializado con Inison para la fila que quieres crear.",
521
+ payloadTemplateVariablesHelp:
522
+ "Plantillas: {{ now }}, {{ now + 2h }}, {{ now|iso }}, {{ today|date }}, {{ schedule.id }}, {{ database.slug }}, {{ table.slug }}, {{ run.iso }}.",
523
+ previewResolvedPayload: "Previsualizar carga resuelta",
524
+ resolvedPayloadPreview: "Vista previa de la carga resuelta",
525
+ formatJSON: "Convertir y formatear JSON",
526
+ fillExample: "Rellenar ejemplo",
527
+ customCronHint: "Usa una expresión cron estándar de 5 partes en UTC.",
528
+ presetDescriptionHourly: "Se ejecuta una vez por hora.",
529
+ presetDescriptionDaily: "Se ejecuta cada día a medianoche UTC.",
530
+ presetDescriptionWeekly: "Se ejecuta cada lunes a medianoche UTC.",
531
+ presetDescriptionMonthly:
532
+ "Se ejecuta el primer día de cada mes a medianoche UTC.",
533
+ presetDescriptionCustom:
534
+ "Usa tu propia expresión cron para programaciones avanzadas.",
535
+ scheduleSummaryNoExcluded:
536
+ "Esta programación se ejecutará en todos los días que coincidan.",
537
+ scheduleSummaryWithExcluded: "Esta programación omitirá: {days}.",
538
+ sunday: "Domingo",
539
+ monday: "Lunes",
540
+ tuesday: "Martes",
541
+ wednesday: "Miércoles",
542
+ thursday: "Jueves",
543
+ friday: "Viernes",
544
+ saturday: "Sábado",
545
+ hourly: "Cada hora",
546
+ daily: "Diario",
547
+ weekly: "Semanal",
548
+ monthly: "Mensual",
549
+ custom: "Personalizado",
550
+
551
+ // Chatbot IA
552
+ chatbot: "Asistente IA",
553
+ chatWelcomeDefault:
554
+ "¡Hola! Puedo ayudarte a crear nuevas tablas de base de datos o modificar las existentes. Describe lo que necesitas y generaré los esquemas por ti.",
555
+ chatWelcomeScopedDatabase:
556
+ "¡Hola! Puedo ayudarte a crear y actualizar tablas en esta base de datos. Para crear una nueva base de datos, usa el espacio de trabajo de Inicontent.",
557
+ chatWelcomeTables:
558
+ "Estoy listo para ayudarte a diseñar y gestionar tus tablas de base de datos. Puedes pedirme que cree nuevas tablas o edite las existentes.",
559
+ chatWelcomePages:
560
+ "Puedo ayudarte a crear páginas web. Describe la página que deseas y generaré la estructura.",
561
+ chatPlaceholder: "Describe la base de datos que te gustaría crear...",
562
+ chatPlaceholderScopedDatabase:
563
+ "Describe las tablas que quieres crear o actualizar en esta base de datos...",
564
+ chatPlaceholderShort: "Escribe un mensaje...",
565
+ applied: "Aplicado",
566
+ chatPaidPlanRequired:
567
+ "Este asistente de IA está disponible solo con un plan de pago activo.",
568
+ continue: "Continuar",
569
+ continued: "Continuado",
570
+ dataPreview: "Vista previa de datos",
571
+ generatingMoreTables: "Generando las tablas restantes...",
572
+ homePage: "Página de inicio",
573
+ namesUpdated: "Nombres actualizados",
574
+ newChat: "Nuevo chat",
575
+ pagePreviewUnavailable:
576
+ "La vista previa en vivo de la página está disponible en el creador de sitios web de Inicontent.",
577
+ published: "Publicado",
578
+ applyChanges: "Aplicar cambios",
579
+ skipAiHelp: "Omitir ayuda IA",
580
+ publishData: "Publicar datos",
581
+ tableDemo: "Vista previa de la tabla",
582
+
583
+ billingUi: {
584
+ title: "Facturación y suscripción",
585
+ subtitle: "Administra tu plan, facturas y ajustes de pago.",
586
+ tabs: {
587
+ subscription: "Suscripción",
588
+ invoices: "Facturas",
589
+ settings: "Ajustes",
590
+ },
591
+ noSubscriptionTitle: "No hay una suscripción activa",
592
+ noSubscriptionBody:
593
+ "Elige un plan para habilitar la facturación y desbloquear funciones de almacenamiento.",
594
+ choosePlanTitle: "Elige tu plan",
595
+ currentPlanTitle: "Plan actual",
596
+ planType: "Tipo de plan",
597
+ planTypes: {
598
+ base: "Base",
599
+ enterprise: "Empresarial",
600
+ },
601
+ status: "Estado",
602
+ statusLabels: {
603
+ active: "Activo",
604
+ canceled: "Cancelado",
605
+ past_due: "Atrasado",
606
+ paid: "Pagado",
607
+ open: "Abierto",
608
+ void: "Anulado",
609
+ uncollectible: "Incobrable",
610
+ unknown: "Desconocido",
611
+ },
612
+ databaseStorage: "Almacenamiento de base de datos",
613
+ assetStorage: "Almacenamiento de archivos",
614
+ changePlan: "Cambiar plan",
615
+ hidePlanPicker: "Ocultar selector de plan",
616
+ cancelSubscription: "Cancelar suscripción",
617
+ upgradePlanTitle: "Actualizar o cambiar plan",
618
+ storageUsageTitle: "Uso de almacenamiento",
619
+ storageLimitExceededTitle: "Límite de almacenamiento excedido",
620
+ storageLimitExceededBody:
621
+ "Estás excediendo tu cuota de almacenamiento. Considera actualizar tu plan o eliminar datos no usados.",
622
+ invoicesEmpty: "Aún no hay facturas.",
623
+ paymentSettingsTitle: "Ajustes de pago",
624
+ paymentMethodTitle: "Método de pago",
625
+ paymentMethodSubtitle: "Administra tu método de pago en PayPal",
626
+ managePayment: "Administrar pago",
627
+ billingEmailTitle: "Correo de facturación",
628
+ updateEmail: "Actualizar correo",
629
+ autoRenewalTitle: "Renovación automática",
630
+ autoRenewalMessage:
631
+ "{{status}} - Tu suscripción se {{action}} al final del periodo de facturación.",
632
+ autoRenew: {
633
+ enabled: "Activada",
634
+ disabled: "Desactivada",
635
+ renew: "renovará automáticamente",
636
+ notRenew: "no renovará",
637
+ enable: "Activar renovación automática",
638
+ disable: "Desactivar renovación automática",
639
+ },
640
+ cancelModalTitle: "Cancelar suscripción",
641
+ cancelModalBody:
642
+ "¿Seguro que quieres cancelar tu suscripción? Perderás el acceso a las funciones de pago al final del periodo actual.",
643
+ cancelModalKeep: "Mantener suscripción",
644
+ cancelModalConfirm: "Sí, cancelar",
645
+ invoiceId: "ID de transacción",
646
+ period: "Periodo",
647
+ description: "Descripción",
648
+ date: "Fecha",
649
+ amount: "Importe",
650
+ invoice: "Factura",
651
+ downloadPdf: "Descargar PDF",
652
+ checkoutSuccess: {
653
+ processingPayment: "Procesando tu pago...",
654
+ paymentFailed: "Pago fallido",
655
+ returnToBilling: "Volver a facturación",
656
+ subscriptionActivated: "¡Suscripción activada!",
657
+ thankYou: "Gracias por elegir Inicontent.",
658
+ goToDashboard: "Ir al panel",
659
+ viewBillingDetails: "Ver detalles de facturación",
660
+ subscriptionStatus: "Estado de la suscripción",
661
+ active: "Activa",
662
+ orderId: "ID de pedido",
663
+ databaseStorage: "Almacenamiento de base de datos",
664
+ assetStorage: "Almacenamiento de archivos",
665
+ validUntil: "Válido hasta",
666
+ nextSteps: "Siguientes pasos",
667
+ firstProject: "Ahora puedes crear tu primer proyecto.",
668
+ confirmationEmail:
669
+ "Se ha enviado un correo de confirmación a tu dirección de PayPal. Para comenzar, ve a tu panel y crea tu primera base de datos CMS.",
670
+ errors: {
671
+ noPaymentToken:
672
+ "No se encontró un token de pago. Inténtalo de nuevo.",
673
+ failedToProcess: "No se pudo procesar el pago. Contacta con soporte.",
674
+ paymentProcessingFailed: "Falló el procesamiento del pago",
675
+ },
676
+ },
677
+ checkoutCanceled: {
678
+ title: "Pago cancelado",
679
+ description: "Tu suscripción no se completó. No se realizaron cargos.",
680
+ returnToBilling: "Volver a facturación",
681
+ backToHome: "Volver al inicio",
682
+ supportMessage:
683
+ "Si tuviste algún problema durante el pago, contacta a nuestro equipo de soporte:",
684
+ },
685
+ credit: {
686
+ balance: "Saldo de crédito",
687
+ balanceSubtitle: "Tu crédito usado para los cargos mensuales.",
688
+ addCredit: "Añadir crédito",
689
+ requestBankTransfer: "Solicitar transferencia bancaria",
690
+ topupTitle: "Recargar cuenta",
691
+ topupDescription:
692
+ "Añade crédito mediante PayPal. Tu crédito se usará para pagar los cargos mensuales automáticamente.",
693
+ amount: "Importe (USD)",
694
+ amountPlaceholder: "Introduce el importe",
695
+ youWillAdd: "Añadirás",
696
+ payWithPayPal: "Pagar con PayPal",
697
+ amountTooLow: "El importe mínimo es $1",
698
+ amountTooHigh: "El importe máximo es $1.000",
699
+ topupFailed: "Error al iniciar la recarga. Inténtalo de nuevo.",
700
+ topupSuccess: "Crédito añadido con éxito",
701
+ topupSuccessDescription: "Tu saldo ha sido actualizado.",
702
+ topupCanceled: "Recarga cancelada",
703
+ topupCanceledDescription:
704
+ "Tu pago de PayPal fue cancelado. No se realizaron cargos.",
705
+ processingTopup: "Procesando tu pago…",
706
+ orderId: "ID de pedido",
707
+ amountAdded: "Importe añadido",
708
+ newBalance: "Nuevo saldo",
709
+ requestTitle: "Solicitar crédito por transferencia",
710
+ requestDescription:
711
+ "Envía una solicitud de transferencia. Un administrador lo verificará y aplicará el crédito.",
712
+ note: "Referencia de transferencia / Nota",
713
+ notePlaceholder:
714
+ "Referencia de transferencia bancaria o notas adicionales",
715
+ noteRequired:
716
+ "Por favor, proporciona una referencia de transferencia o nota",
717
+ submitRequest: "Enviar solicitud",
718
+ requestSubmitted:
719
+ "Tu solicitud de crédito ha sido enviada. Un administrador la revisará pronto.",
720
+ requestFailed: "Error al enviar la solicitud. Inténtalo de nuevo.",
721
+ pendingRequests: "Solicitudes de crédito pendientes",
722
+ noPendingRequests: "No hay solicitudes pendientes",
723
+ refreshRequests: "Actualizar",
724
+ approve: "Aprobar",
725
+ reject: "Rechazar",
726
+ requestUser: "Usuario",
727
+ requestAmount: "Importe",
728
+ requestNote: "Nota",
729
+ requestStatus: "Estado",
730
+ graceWarning:
731
+ "Tu suscripción está en período de gracia. Añade crédito antes de que expire para evitar la suspensión.",
732
+ },
733
+ autoCharge: {
734
+ title: "Cargo automático PayPal",
735
+ subtitle:
736
+ "Cargar automáticamente tu cuenta PayPal cuando el crédito sea insuficiente.",
737
+ statusEnabled: "Activado",
738
+ enable: "Activar cargo automático",
739
+ disable: "Desactivar cargo automático",
740
+ activating: "Activando cargo automático…",
741
+ activatedTitle: "Cargo automático activado",
742
+ activatedDescription:
743
+ "Tu cuenta PayPal ha sido guardada. Los cargos mensuales se cobrarán automáticamente.",
744
+ activationFailed: "Error al activar el cargo automático",
745
+ missingApprovalSession:
746
+ "Sesión de aprobación no encontrada. Inténtalo de nuevo.",
747
+ setupCanceled: "Configuración cancelada",
748
+ setupCanceledDescription:
749
+ "Cancelaste la autorización de PayPal. El cargo automático no fue activado.",
750
+ },
751
+ },
752
+
753
+ pricingUi: {
754
+ title: "Elige tu plan",
755
+ subtitle: "Precios simples y transparentes sin cargos ocultos.",
756
+ databaseStorageLabel: "Almacenamiento de base de datos (GB)",
757
+ assetStorageLabel: "Almacenamiento de archivos (GB)",
758
+ basePlan: "Plan base",
759
+ additionalStorage: "Almacenamiento adicional",
760
+ totalMonthly: "Total mensual",
761
+ subscribeNow: "Suscribirse ahora",
762
+ upgradePlan: "Actualizar plan",
763
+ requestQuote: "Solicitar cotización",
764
+ currentUsage: "Uso de almacenamiento actual",
765
+ usageWarning:
766
+ "Estás excediendo tu cuota de almacenamiento. Considera actualizar tu plan.",
767
+ faqTitle: "Preguntas frecuentes",
768
+ faq: {
769
+ changePlanTitle:
770
+ "¿Puedo cambiar mi plan de almacenamiento en cualquier momento?",
771
+ changePlanBody:
772
+ "Sí. Puedes actualizar o bajar tu plan de almacenamiento en cualquier momento. Los cambios se aplican en el siguiente ciclo de facturación.",
773
+ exceedQuotaTitle: "¿Qué pasa si excedo mi cuota de almacenamiento?",
774
+ exceedQuotaBody:
775
+ "Te avisaremos cuando te acerques al límite. Si lo excedes, te cobraremos el almacenamiento adicional según nuestras tarifas.",
776
+ contractTitle: "¿Hay un contrato a largo plazo?",
777
+ contractBody:
778
+ "No. Todos los planes son mensuales sin compromiso a largo plazo. Puedes cancelar en cualquier momento.",
779
+ annualDiscountTitle: "¿Ofrecen descuentos anuales?",
780
+ annualDiscountBody:
781
+ "Contacta a nuestro equipo de ventas para precios empresariales personalizados y descuentos por volumen.",
782
+ },
783
+ },
784
+
785
+ pricingPageUi: {
786
+ headerTitle: "Planes de precios",
787
+ headerSubtitle:
788
+ "Precios simples y transparentes, sin cargos ocultos. Paga solo por lo que usas.",
789
+ ctaTitle: "¿Listo para comenzar?",
790
+ ctaSubtitle:
791
+ "Únete a miles de desarrolladores que usan Inicontent para gestionar su contenido.",
792
+ viewSubscription: "Ver tu suscripción",
793
+ },
794
+
795
+ // JSON Field
796
+ format: "Formatear",
797
+ invalidJSON: "JSON inválido",
798
+
799
+ // Dashboards
800
+ dashboards: "Paneles",
801
+ dashboard: "Panel",
802
+ dashboardName: "Nombre del panel",
803
+ dashboardSettings: "Configuración del panel",
804
+ editDashboard: "Editar panel",
805
+ createDashboard: "Crear panel",
806
+ widgets: "Widgets",
807
+ widget: "Widget",
808
+ addWidget: "Añadir widget",
809
+ editWidget: "Editar widget",
810
+ widgetTitle: "Título del widget",
811
+ untitledWidget: "Widget sin título",
812
+ noWidgets: "Sin widgets aún. Añade uno para empezar.",
813
+ widgetCount: {
814
+ one: "{count} widget",
815
+ other: "{count} widgets",
816
+ },
817
+ counter: "Contador",
818
+ line: "Gráfico de líneas",
819
+ bar: "Gráfico de barras",
820
+ pie: "Gráfico circular",
821
+ lineChart: "Gráfico de líneas",
822
+ barChart: "Gráfico de barras",
823
+ pieChart: "Gráfico circular",
824
+ sourceTable: "Tabla fuente",
825
+ selectTable: "Seleccionar tabla",
826
+ selectField: "Seleccionar campo",
827
+ selectType: "Seleccionar tipo",
828
+ operation: "Operación",
829
+ count: "Conteo",
830
+ sum: "Suma",
831
+ max: "Máx",
832
+ min: "Mín",
833
+ groupBy: "Agrupar por",
834
+ dateField: "Campo de fecha",
835
+ dateRange: "Rango de fechas",
836
+ last7Days: "Últimos 7 días",
837
+ last30Days: "Últimos 30 días",
838
+ last90Days: "Últimos 90 días",
839
+ lastYear: "Último año",
840
+ allTime: "Todo el tiempo",
841
+ limit: "Límite",
842
+ noData: "Sin datos",
843
+ columnsToDisplay: "Columnas a mostrar",
844
+ sortField: "Ordenar por",
845
+ sortOrder: "Orden de clasificación",
846
+ asc: "Ascendente",
847
+ desc: "Descendente",
848
+
849
+ // Translation drawer
850
+ translateItem: "Traducir elemento",
851
+ translateData: "Traducir",
852
+ original: "Original",
853
+ noSecondaryLanguages:
854
+ "No hay idiomas secundarios configurados para esta base de datos.",
855
+ noTranslatableFields:
856
+ "No se encontraron campos de texto traducibles en esta tabla.",
857
+ translationPlaceholder: "Ingrese la traducción…",
858
+ translationsSaved: "Traducciones guardadas",
859
+ translationCount: "{count} traducciones",
860
+ translated: "Traducido",
861
+
862
+ passkey: {
863
+ securityTitle: "Seguridad con llave de acceso",
864
+ description:
865
+ "Registra una llave de acceso para iniciar sesión mediante la verificación de tu dispositivo.",
866
+ register: "Registrar llave de acceso",
867
+ enrollmentTitle: "Configurar una llave de acceso",
868
+ enrollmentPrompt:
869
+ "¿Quieres configurar una llave de acceso para iniciar sesión de forma más rápida y segura en este dispositivo?",
870
+ notNow: "Ahora no",
871
+ notSupported: "Este navegador no admite llaves de acceso.",
872
+ hint: "Puedes usar Face ID, Touch ID o una llave de seguridad después del registro.",
873
+ registeredSuccessfully: "Llave de acceso registrada correctamente.",
874
+ registrationFailed: "Error al registrar la llave de acceso.",
875
+ signin: "Iniciar sesión con llave de acceso",
876
+ signinHintUsername:
877
+ "Introduce tu nombre de usuario o correo y continúa con la llave de acceso.",
878
+ signinHintDevice:
879
+ "Usa la verificación de tu dispositivo (Face ID, Touch ID o llave de seguridad).",
880
+ signinFailed: "Error al iniciar sesión con llave de acceso.",
881
+ },
882
+
883
+ // Offline / sync
884
+ online: "En línea",
885
+ offline: "Sin conexión",
886
+ onlineTooltip: "Conectado al servidor",
887
+ offlineTooltip:
888
+ "Estás sin conexión. Puedes seguir viendo y editando — los cambios se guardan localmente y se sincronizan cuando vuelvas a conectarte.",
889
+ syncingPending: "Sincronizando…",
890
+ pendingChanges: "{count} cambio(s) pendiente(s)",
891
+ syncNow: "Sincronizar ahora",
892
+ conflictsPending: "{count} conflicto(s) por resolver",
893
+ updateAvailable: "Actualización disponible",
894
+ installApp: "Instalar aplicación",
895
+ resolveConflicts: "Resolver conflictos",
896
+ conflictModalIntro:
897
+ "Tu cambio sin conexión entra en conflicto con una versión más reciente en el servidor. Elige qué versión conservar.",
898
+ noConflicts: "No hay conflictos que resolver",
899
+ discardAll: "Descartar todo",
900
+ localVersion: "Tu versión",
901
+ serverVersion: "Versión del servidor",
902
+ keepLocal: "Conservar la mía",
903
+ keepServer: "Conservar la del servidor",
904
+ changeQueuedForSync: "Cambio añadido a la cola de sincronización",
905
+ localChangeDiscarded: "Cambio local descartado",
906
+ allLocalChangesDiscarded: "Se descartaron todos los cambios locales",
907
+ queuedOfflineToast:
908
+ "Estás sin conexión — tu cambio se guardó localmente y se sincronizará cuando vuelvas a estar en línea.",
909
+ createFailed: "No se pudo crear el elemento.",
910
+ updateFailed: "No se pudo actualizar el elemento.",
911
+ deleteFailed: "No se pudo eliminar el elemento.",
912
+ errorFetchingSchema: "No se pudo obtener el esquema de la tabla.",
913
+
914
+ // Document scanner
915
+ documentScanner: "Escáner de documentos",
916
+ camera: "Cámara",
917
+ uploadImage: "Subir imagen",
918
+ openCamera: "Abrir cámara",
919
+ capture: "Capturar",
920
+ retake: "Repetir",
921
+ cameraUnavailable: "Cámara no disponible",
922
+ loadingScanner: "Cargando el escáner de documentos",
923
+ retry: "Reintentar",
924
+ dropImageOrClick: "Suelta una imagen aquí o haz clic para explorar",
925
+ preview: "Vista previa",
926
+ extractingDocument: "Extrayendo documento",
927
+ ocr: "OCR",
928
+ language: "Idioma",
929
+ extractedText: "Texto extraído",
930
+ copy: "Copiar",
931
+ insertAsText: "Insertar como texto",
932
+ insertAsImage: "Insertar como imagen",
933
+ useThisScan: "Usar este escaneo",
934
+ documentNotDetected: "Documento no detectado",
935
+ adjustCorners: "Ajustar esquinas",
936
+ dragHandlesToAdjust:
937
+ "Arrastra los controles verdes para delimitar la tarjeta y aplica.",
938
+ applyCrop: "Aplicar recorte",
939
+ scanDocument: "Escanear documento",
940
+
941
+ // Espacios de trabajo de la plataforma (páginas, bloques, plantillas, facturación)
942
+ openInPlatform: "Abrir en Inicontent",
943
+ platformFeatureIntro:
944
+ "El espacio de trabajo de {{feature}} forma parte de la plataforma Inicontent.",
945
+ platformFeatureAt: "Abrir en:",
946
+ platformFeatureHint:
947
+ "Se te identificará automáticamente con tu sesión actual.",
948
+
949
+ // Copias de seguridad
950
+ backups: "Copias de seguridad",
951
+ backupsAdminOnly:
952
+ "Solo el propietario (admin) de la base puede gestionar las copias de seguridad.",
953
+ createBackup: "Crear copia de seguridad",
954
+ backupName: "Nombre de la copia",
955
+ backupNamePlaceholder: "p. ej. Antes del lanzamiento",
956
+ backupNameHelp:
957
+ "Déjalo vacío para generar un nombre con la fecha y la hora.",
958
+ backupType: "Tipo de copia",
959
+ fullBackup: "Base completa",
960
+ tableBackup: "Tabla",
961
+ fullBackupHelp:
962
+ "Instantánea de toda la carpeta de la base (tablas y metadatos) como archivo sin procesar.",
963
+ tableBackupHelp:
964
+ "Instantánea de una sola carpeta de tabla como archivo sin procesar.",
965
+ backupCreatedSuccessfully: "Copia iniciada. Aparecerá aquí cuando termine.",
966
+ backupDeletedSuccessfully: "Copia eliminada",
967
+ backupOrigin: "Origen",
968
+ automaticBackup: "Automática",
969
+ manualBackup: "Manual",
970
+ backupSize: "Tamaño",
971
+ backupState: "Estado",
972
+ queued: "En cola",
973
+ running: "En curso",
974
+ completed: "Completada",
975
+ failed: "Fallida",
976
+ restoring: "Restaurando",
977
+ restoreBackup: "Restaurar copia",
978
+ restoreScope: "Alcance de restauración",
979
+ restoreWarning:
980
+ "Restaurar sobrescribe los datos existentes con el contenido de esta copia. Esta acción no se puede deshacer.",
981
+ restoreConfirmation: "Confirmación",
982
+ restoreConfirmationHelp:
983
+ "Entiendo que esto sobrescribirá los datos existentes.",
984
+ restoreStarted: "Restauración iniciada. Se te notificará cuando termine.",
985
+ restore: "Restaurar",
986
+ backupScopeTable: "Tabla (carpeta completa)",
987
+ backupScopeTableSchema: "Solo esquema de tabla",
988
+ backupScopeTableData: "Solo datos de tabla",
989
+ backupScopeDatabaseSchema: "Todos los esquemas de tablas",
990
+ backupScopeDatabaseData: "Todos los datos de tablas",
991
+ backupScopeDatabaseFull: "Base completa (esquemas + datos)",
992
+ folder: "Carpeta",
993
+ deleteBackupConfirm:
994
+ '¿Eliminar la copia de seguridad "{name}"? Esta acción es irreversible.',
995
+ },
996
+ } as const;