solid_stack_web 1.5.0 → 1.6.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.
- checksums.yaml +4 -4
- data/README.md +157 -3
- data/app/assets/stylesheets/solid_stack_web/_02_layout.css +12 -0
- data/app/assets/stylesheets/solid_stack_web/_07_dashboard.css +4 -3
- data/app/controllers/solid_stack_web/application_controller.rb +10 -0
- data/app/controllers/solid_stack_web/audit_controller.rb +1 -1
- data/app/controllers/solid_stack_web/cable/channel_purges_controller.rb +1 -1
- data/app/controllers/solid_stack_web/cable/purges_controller.rb +1 -1
- data/app/controllers/solid_stack_web/cache/flushes_controller.rb +1 -1
- data/app/controllers/solid_stack_web/cache_entries_controller.rb +1 -1
- data/app/controllers/solid_stack_web/failed_jobs/arguments_controller.rb +3 -3
- data/app/controllers/solid_stack_web/failed_jobs/selections_controller.rb +4 -4
- data/app/controllers/solid_stack_web/failed_jobs_controller.rb +2 -2
- data/app/controllers/solid_stack_web/jobs/selections_controller.rb +2 -2
- data/app/controllers/solid_stack_web/jobs_controller.rb +2 -2
- data/app/controllers/solid_stack_web/recurring_tasks/runs_controller.rb +4 -4
- data/app/controllers/solid_stack_web/scheduled_jobs_controller.rb +5 -5
- data/app/helpers/solid_stack_web/application_helper.rb +30 -17
- data/app/views/layouts/solid_stack_web/application.html.erb +28 -24
- data/app/views/solid_stack_web/audit/index.html.erb +18 -18
- data/app/views/solid_stack_web/cable/index.html.erb +22 -19
- data/app/views/solid_stack_web/cable_messages/index.html.erb +15 -14
- data/app/views/solid_stack_web/cache/index.html.erb +19 -19
- data/app/views/solid_stack_web/cache_entries/index.html.erb +16 -15
- data/app/views/solid_stack_web/cache_entries/show.html.erb +11 -11
- data/app/views/solid_stack_web/dashboard/index.html.erb +54 -33
- data/app/views/solid_stack_web/errors/internal_server_error.html.erb +4 -4
- data/app/views/solid_stack_web/errors/not_found.html.erb +4 -4
- data/app/views/solid_stack_web/failed_jobs/destroy.turbo_stream.erb +2 -2
- data/app/views/solid_stack_web/failed_jobs/errors/index.html.erb +10 -10
- data/app/views/solid_stack_web/failed_jobs/index.html.erb +22 -22
- data/app/views/solid_stack_web/failed_jobs/show.html.erb +16 -16
- data/app/views/solid_stack_web/history/index.html.erb +19 -18
- data/app/views/solid_stack_web/jobs/_empty.html.erb +8 -8
- data/app/views/solid_stack_web/jobs/index.html.erb +35 -34
- data/app/views/solid_stack_web/jobs/show.html.erb +16 -16
- data/app/views/solid_stack_web/processes/index.html.erb +8 -8
- data/app/views/solid_stack_web/queues/index.html.erb +13 -13
- data/app/views/solid_stack_web/queues/show.html.erb +16 -16
- data/app/views/solid_stack_web/recurring_tasks/index.html.erb +16 -16
- data/app/views/solid_stack_web/shared/_locale_switcher.html.erb +14 -0
- data/app/views/solid_stack_web/stats/index.html.erb +13 -13
- data/config/locales/en.yml +395 -0
- data/config/locales/es.yml +395 -0
- data/lib/solid_stack_web/engine.rb +1 -0
- data/lib/solid_stack_web/version.rb +1 -1
- data/lib/solid_stack_web.rb +14 -1
- metadata +4 -1
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
es:
|
|
2
|
+
solid_stack_web:
|
|
3
|
+
layout:
|
|
4
|
+
title: "Panel de Solid Stack"
|
|
5
|
+
skip_to_content: "Saltar al contenido principal"
|
|
6
|
+
logo: "Solid Stack"
|
|
7
|
+
theme_toggle: "Cambiar a modo oscuro"
|
|
8
|
+
nav:
|
|
9
|
+
main_navigation: "Navegación principal"
|
|
10
|
+
queue: "Cola"
|
|
11
|
+
cache: "Caché"
|
|
12
|
+
cable: "Cable"
|
|
13
|
+
subnav:
|
|
14
|
+
cache_section: "Sección de caché"
|
|
15
|
+
cable_section: "Sección de cable"
|
|
16
|
+
queue_section: "Sección de cola"
|
|
17
|
+
overview: "Resumen"
|
|
18
|
+
entries: "Entradas"
|
|
19
|
+
jobs: "Trabajos"
|
|
20
|
+
failed: "Fallidos"
|
|
21
|
+
queues: "Colas"
|
|
22
|
+
recurring: "Recurrentes"
|
|
23
|
+
stats: "Estadísticas"
|
|
24
|
+
history: "Historial"
|
|
25
|
+
processes: "Procesos"
|
|
26
|
+
audit: "Auditoría"
|
|
27
|
+
shared:
|
|
28
|
+
actions: "Acciones"
|
|
29
|
+
pagination: "Paginación"
|
|
30
|
+
clear: "Limpiar"
|
|
31
|
+
back_to_dashboard: "Volver al panel"
|
|
32
|
+
select_all: "Seleccionar todos"
|
|
33
|
+
export_csv: "Exportar CSV"
|
|
34
|
+
period_filter:
|
|
35
|
+
label: "Período de tiempo"
|
|
36
|
+
all: "Todo"
|
|
37
|
+
locale_switcher:
|
|
38
|
+
label: "Idioma"
|
|
39
|
+
dashboard:
|
|
40
|
+
title: "Resumen"
|
|
41
|
+
solid_queue: "Solid Queue"
|
|
42
|
+
solid_cache: "Solid Cache"
|
|
43
|
+
solid_cable: "Solid Cable"
|
|
44
|
+
view_jobs: "Ver trabajos →"
|
|
45
|
+
view_cache: "Ver caché →"
|
|
46
|
+
view_cable: "Ver cable →"
|
|
47
|
+
ready: "Listo"
|
|
48
|
+
scheduled: "Programado"
|
|
49
|
+
running: "Ejecutando"
|
|
50
|
+
blocked: "Bloqueado"
|
|
51
|
+
failed: "Fallido"
|
|
52
|
+
done_1h: "Hecho (1h)"
|
|
53
|
+
done_24h: "Hecho (24h)"
|
|
54
|
+
slow_24h: "Lento (24h)"
|
|
55
|
+
healthy: "Saludable"
|
|
56
|
+
stale: "Obsoleto"
|
|
57
|
+
messages: "Mensajes"
|
|
58
|
+
channels: "Canales"
|
|
59
|
+
msg_per_hr: "Msg/hr"
|
|
60
|
+
oldest: "Más antiguo"
|
|
61
|
+
entries: "Entradas"
|
|
62
|
+
size: "Tamaño"
|
|
63
|
+
throughput_label: "Rendimiento — últimas 12 horas"
|
|
64
|
+
failures_label: "Fallos — últimas 12 horas"
|
|
65
|
+
top_channels: "Principales canales"
|
|
66
|
+
axis:
|
|
67
|
+
twelve_h_ago: "hace 12h"
|
|
68
|
+
six_h_ago: "hace 6h"
|
|
69
|
+
now: "ahora"
|
|
70
|
+
jobs:
|
|
71
|
+
title: "Trabajos"
|
|
72
|
+
detail: "Detalle"
|
|
73
|
+
export_csv: "Exportar CSV"
|
|
74
|
+
run_all_now: "Ejecutar todos ahora (%{count})"
|
|
75
|
+
discard_all: "Descartar todos (%{count})"
|
|
76
|
+
all_queues: "Todas las colas"
|
|
77
|
+
all_priorities: "Todas las prioridades"
|
|
78
|
+
priority_option: "Prioridad %{n}"
|
|
79
|
+
selected_count: "%{count} seleccionados"
|
|
80
|
+
selected_label: "seleccionados"
|
|
81
|
+
placeholder_job_class: "Filtrar por clase de trabajo…"
|
|
82
|
+
aria_filter_job_class: "Filtrar por clase de trabajo"
|
|
83
|
+
aria_filter_queue: "Filtrar por cola"
|
|
84
|
+
aria_filter_priority: "Filtrar por prioridad"
|
|
85
|
+
col_job_class: "Clase de trabajo"
|
|
86
|
+
col_queue: "Cola"
|
|
87
|
+
col_priority: "Prioridad"
|
|
88
|
+
col_enqueued_at: "Encolado a las"
|
|
89
|
+
col_scheduled_at: "Programado a las"
|
|
90
|
+
col_wait_time: "Tiempo de espera"
|
|
91
|
+
run_now: "Ejecutar ahora"
|
|
92
|
+
discard: "Descartar"
|
|
93
|
+
discard_selected: "Descartar seleccionados"
|
|
94
|
+
confirm_run_all_now: "¿Ejecutar todos los %{count} trabajos programados inmediatamente?"
|
|
95
|
+
confirm_run_now: "¿Ejecutar este trabajo inmediatamente?"
|
|
96
|
+
confirm_discard: "¿Descartar este trabajo?"
|
|
97
|
+
confirm_discard_all: "¿Descartar todos los %{count} trabajos? Esta acción no se puede deshacer."
|
|
98
|
+
confirm_discard_selected: "¿Descartar los trabajos seleccionados? Esta acción no se puede deshacer."
|
|
99
|
+
no_jobs_matching: "No hay trabajos %{status} que coincidan con \"%{search}\""
|
|
100
|
+
no_jobs: "No hay trabajos %{status}"
|
|
101
|
+
hint_ready: "Los trabajos aparecerán aquí una vez encolados y listos para ser procesados."
|
|
102
|
+
hint_scheduled: "No hay trabajos programados para ejecutarse en el futuro."
|
|
103
|
+
hint_claimed: "Ningún trabajador está procesando trabajos actualmente."
|
|
104
|
+
hint_blocked: "No hay trabajos bloqueados por controles de concurrencia."
|
|
105
|
+
clear_search: "Limpiar búsqueda"
|
|
106
|
+
section_details: "Detalles"
|
|
107
|
+
section_arguments: "Argumentos"
|
|
108
|
+
discard_job: "Descartar trabajo"
|
|
109
|
+
field_status: "Estado"
|
|
110
|
+
field_queue: "Cola"
|
|
111
|
+
field_priority: "Prioridad"
|
|
112
|
+
field_active_job_id: "ID de Active Job"
|
|
113
|
+
field_concurrency_key: "Clave de concurrencia"
|
|
114
|
+
field_blocked_until: "Bloqueado hasta"
|
|
115
|
+
field_enqueued_at: "Encolado a las"
|
|
116
|
+
field_scheduled_at: "Programado a las"
|
|
117
|
+
field_finished_at: "Finalizado a las"
|
|
118
|
+
tab_ready: "Listo"
|
|
119
|
+
tab_scheduled: "Programado"
|
|
120
|
+
tab_claimed: "Ejecutando"
|
|
121
|
+
tab_blocked: "Bloqueado"
|
|
122
|
+
failed_jobs:
|
|
123
|
+
title: "Trabajos fallidos"
|
|
124
|
+
error_summary: "Resumen de errores"
|
|
125
|
+
export_csv: "Exportar CSV"
|
|
126
|
+
filtered_by: "Filtrado por"
|
|
127
|
+
clear_filter: "Limpiar filtro"
|
|
128
|
+
detail: "Detalle"
|
|
129
|
+
col_job_class: "Clase de trabajo"
|
|
130
|
+
col_queue: "Cola"
|
|
131
|
+
col_error: "Error"
|
|
132
|
+
col_failed_at: "Falló a las"
|
|
133
|
+
retry: "Reintentar"
|
|
134
|
+
discard: "Descartar"
|
|
135
|
+
retry_selected: "Reintentar seleccionados"
|
|
136
|
+
discard_selected: "Descartar seleccionados"
|
|
137
|
+
confirm_discard: "¿Descartar este trabajo?"
|
|
138
|
+
confirm_discard_selected: "¿Descartar los trabajos fallidos seleccionados? Esta acción no se puede deshacer."
|
|
139
|
+
empty_title: "No hay trabajos fallidos"
|
|
140
|
+
empty_hint: "Todo en orden — sus trabajos se están ejecutando sin errores."
|
|
141
|
+
section_details: "Detalles"
|
|
142
|
+
section_backtrace: "Rastreo"
|
|
143
|
+
section_arguments: "Argumentos"
|
|
144
|
+
update_retry: "Actualizar y reintentar"
|
|
145
|
+
field_queue: "Cola"
|
|
146
|
+
field_priority: "Prioridad"
|
|
147
|
+
field_active_job_id: "ID de Active Job"
|
|
148
|
+
field_failed_at: "Falló a las"
|
|
149
|
+
field_error: "Error"
|
|
150
|
+
field_message: "Mensaje"
|
|
151
|
+
arguments_aria_label: "JSON de argumentos del trabajo"
|
|
152
|
+
errors_title: "Resumen de errores"
|
|
153
|
+
back_to_failed_jobs: "← Trabajos fallidos"
|
|
154
|
+
errors_col_class: "Clase de error"
|
|
155
|
+
errors_col_message: "Mensaje"
|
|
156
|
+
errors_col_count: "Cantidad"
|
|
157
|
+
view_jobs: "Ver trabajos"
|
|
158
|
+
queues:
|
|
159
|
+
title: "Colas"
|
|
160
|
+
col_name: "Nombre"
|
|
161
|
+
col_size: "Tamaño"
|
|
162
|
+
col_depth: "Profundidad (12h)"
|
|
163
|
+
col_status: "Estado"
|
|
164
|
+
status_paused: "Pausado"
|
|
165
|
+
status_running: "Ejecutando"
|
|
166
|
+
pause: "Pausar"
|
|
167
|
+
resume: "Reanudar"
|
|
168
|
+
discard_all_ready: "Descartar todos los listos (%{count})"
|
|
169
|
+
confirm_discard_all_ready: "¿Descartar todos los %{count} trabajos listos en %{queue}? Esta acción no se puede deshacer."
|
|
170
|
+
empty_title: "No hay colas con trabajos listos"
|
|
171
|
+
empty_hint: "Los trabajadores están inactivos o todos los trabajos están en otro estado."
|
|
172
|
+
check_jobs: "Ver estados de trabajos →"
|
|
173
|
+
show_col_job_class: "Clase de trabajo"
|
|
174
|
+
show_col_priority: "Prioridad"
|
|
175
|
+
show_col_enqueued_at: "Encolado a las"
|
|
176
|
+
discard: "Descartar"
|
|
177
|
+
confirm_discard: "¿Descartar este trabajo?"
|
|
178
|
+
no_ready_jobs: "No hay trabajos listos en %{queue}."
|
|
179
|
+
processes:
|
|
180
|
+
title: "Procesos"
|
|
181
|
+
col_kind: "Tipo"
|
|
182
|
+
col_name: "Nombre"
|
|
183
|
+
col_pid: "PID"
|
|
184
|
+
col_host: "Host"
|
|
185
|
+
col_last_heartbeat: "Último latido"
|
|
186
|
+
empty_title: "No hay procesos activos"
|
|
187
|
+
empty_hint: "Inicie un trabajador de Solid Queue para comenzar a procesar trabajos."
|
|
188
|
+
recurring_tasks:
|
|
189
|
+
title: "Tareas recurrentes"
|
|
190
|
+
col_key: "Clave"
|
|
191
|
+
col_schedule: "Programación"
|
|
192
|
+
col_job_command: "Trabajo / Comando"
|
|
193
|
+
col_queue: "Cola"
|
|
194
|
+
col_next_run: "Próxima ejecución"
|
|
195
|
+
col_last_run: "Última ejecución"
|
|
196
|
+
col_type: "Tipo"
|
|
197
|
+
type_static: "Estático"
|
|
198
|
+
type_dynamic: "Dinámico"
|
|
199
|
+
run_now: "Ejecutar ahora"
|
|
200
|
+
confirm_run_now: "¿Ejecutar \"%{key}\" inmediatamente?"
|
|
201
|
+
empty_title: "No hay tareas recurrentes configuradas"
|
|
202
|
+
empty_hint: "Defina tareas recurrentes en su configuración de Solid Queue para verlas aquí."
|
|
203
|
+
stats:
|
|
204
|
+
title: "Estadísticas de rendimiento"
|
|
205
|
+
col_job_class: "Clase de trabajo"
|
|
206
|
+
col_executions: "Ejecuciones"
|
|
207
|
+
col_avg: "Promedio"
|
|
208
|
+
col_p50: "p50"
|
|
209
|
+
col_p95: "p95"
|
|
210
|
+
col_p99: "p99"
|
|
211
|
+
col_std_dev: "Desv. estándar"
|
|
212
|
+
col_min: "Mínimo"
|
|
213
|
+
col_max: "Máximo"
|
|
214
|
+
empty_title: "Aún no hay trabajos finalizados"
|
|
215
|
+
empty_hint: "Las estadísticas de rendimiento aparecen aquí cuando se completan los trabajos."
|
|
216
|
+
view_active_jobs: "Ver trabajos activos →"
|
|
217
|
+
history:
|
|
218
|
+
title: "Historial de trabajos"
|
|
219
|
+
export_csv: "Exportar CSV"
|
|
220
|
+
placeholder_filter: "Filtrar por clase de trabajo…"
|
|
221
|
+
aria_filter: "Filtrar por clase de trabajo"
|
|
222
|
+
filtering_by_queue: "Filtrando por cola:"
|
|
223
|
+
clear_filter: "Limpiar filtro"
|
|
224
|
+
col_job_class: "Clase de trabajo"
|
|
225
|
+
col_queue: "Cola"
|
|
226
|
+
col_duration: "Duración"
|
|
227
|
+
col_finished_at: "Finalizado a las"
|
|
228
|
+
no_match_title: "Ningún trabajo finalizado coincide con sus filtros"
|
|
229
|
+
no_match_hint: "Limpiar filtros"
|
|
230
|
+
empty_title: "Aún no hay trabajos finalizados"
|
|
231
|
+
empty_hint: "Los trabajos completados aparecerán aquí cuando los trabajadores los procesen."
|
|
232
|
+
audit:
|
|
233
|
+
title: "Registro de auditoría"
|
|
234
|
+
export_csv: "Exportar CSV"
|
|
235
|
+
all_actions: "Todas las acciones"
|
|
236
|
+
aria_filter_action: "Filtrar por acción"
|
|
237
|
+
actor_label: "Actor:"
|
|
238
|
+
queue_label: "Cola:"
|
|
239
|
+
aria_clear_actor: "Limpiar filtro de actor"
|
|
240
|
+
aria_clear_queue: "Limpiar filtro de cola"
|
|
241
|
+
clear_all: "Limpiar todo"
|
|
242
|
+
col_time: "Hora"
|
|
243
|
+
col_action: "Acción"
|
|
244
|
+
col_actor: "Actor"
|
|
245
|
+
col_job_class: "Clase de trabajo"
|
|
246
|
+
col_queue: "Cola"
|
|
247
|
+
col_count: "Cantidad"
|
|
248
|
+
empty: "Aún no se han registrado eventos de auditoría."
|
|
249
|
+
cache:
|
|
250
|
+
title: "Solid Cache"
|
|
251
|
+
total_entries: "Total de entradas"
|
|
252
|
+
total_size: "Tamaño total"
|
|
253
|
+
size_distribution: "Distribución de tamaños"
|
|
254
|
+
largest_entries: "Entradas más grandes"
|
|
255
|
+
col_range: "Rango"
|
|
256
|
+
col_entries: "Entradas"
|
|
257
|
+
col_distribution: "Distribución"
|
|
258
|
+
col_key: "Clave"
|
|
259
|
+
col_size: "Tamaño"
|
|
260
|
+
entries_written: "Entradas escritas — últimas 24 horas"
|
|
261
|
+
bytes_written: "Bytes escritos — últimas 24 horas"
|
|
262
|
+
axis_24h_ago: "hace 24h"
|
|
263
|
+
axis_12h_ago: "hace 12h"
|
|
264
|
+
axis_now: "ahora"
|
|
265
|
+
cache_entries:
|
|
266
|
+
title: "Entradas de caché"
|
|
267
|
+
flush_all: "Vaciar todo"
|
|
268
|
+
back_to_entries: "← Entradas"
|
|
269
|
+
placeholder_key: "Filtrar por clave…"
|
|
270
|
+
aria_filter_key: "Filtrar por clave"
|
|
271
|
+
col_key: "Clave"
|
|
272
|
+
col_size: "Tamaño"
|
|
273
|
+
col_created: "Creado"
|
|
274
|
+
delete: "Eliminar"
|
|
275
|
+
confirm_flush_all: "¿Eliminar todas las entradas de caché? Esta acción no se puede deshacer."
|
|
276
|
+
confirm_delete: "¿Eliminar esta entrada de caché?"
|
|
277
|
+
no_entries_matching: "No hay entradas que coincidan con \"%{search}\""
|
|
278
|
+
clear_search: "Limpiar búsqueda"
|
|
279
|
+
empty_title: "No hay entradas de caché"
|
|
280
|
+
empty_hint: "Las entradas aparecerán aquí cuando su aplicación escriba en el caché."
|
|
281
|
+
show_section_details: "Detalles"
|
|
282
|
+
show_section_value: "Valor"
|
|
283
|
+
show_key: "Clave"
|
|
284
|
+
show_size: "Tamaño"
|
|
285
|
+
show_created: "Creado"
|
|
286
|
+
show_truncated: "Mostrando los primeros 4 KB de %{size} en total."
|
|
287
|
+
show_preview_disabled: "La vista previa de valores está deshabilitada. Configure config.allow_value_preview = true en su inicializador para habilitarla."
|
|
288
|
+
cable:
|
|
289
|
+
title: "Solid Cable"
|
|
290
|
+
total_messages: "Total de mensajes"
|
|
291
|
+
channels: "Canales"
|
|
292
|
+
messages_timeline: "Mensajes — últimas 24 horas"
|
|
293
|
+
placeholder_channel: "Filtrar por canal…"
|
|
294
|
+
aria_filter_channel: "Filtrar por canal"
|
|
295
|
+
older_than_1_day: "Más de 1 día"
|
|
296
|
+
older_than_7_days: "Más de 7 días"
|
|
297
|
+
older_than_30_days: "Más de 30 días"
|
|
298
|
+
purge_old: "Purgar antiguos"
|
|
299
|
+
confirm_purge: "¿Purgar estos mensajes? Esta acción no se puede deshacer."
|
|
300
|
+
col_channel: "Canal"
|
|
301
|
+
col_messages: "Mensajes"
|
|
302
|
+
col_last_message: "Último mensaje"
|
|
303
|
+
no_channels_matching: "No hay canales que coincidan con \"%{search}\""
|
|
304
|
+
clear_search: "Limpiar búsqueda"
|
|
305
|
+
empty_title: "No hay mensajes de cable"
|
|
306
|
+
empty_hint: "Los mensajes aparecerán aquí cuando los clientes se conecten y transmitan por Action Cable."
|
|
307
|
+
axis_24h_ago: "hace 24h"
|
|
308
|
+
axis_12h_ago: "hace 12h"
|
|
309
|
+
axis_now: "ahora"
|
|
310
|
+
cable_messages:
|
|
311
|
+
purge_channel: "Purgar canal"
|
|
312
|
+
back_to_channels: "← Canales"
|
|
313
|
+
back_to_channels_link: "Volver a canales →"
|
|
314
|
+
confirm_purge_channel: "¿Eliminar todos los mensajes de este canal? Esta acción no se puede deshacer."
|
|
315
|
+
placeholder_payload: "Filtrar por carga…"
|
|
316
|
+
aria_filter_payload: "Filtrar por carga"
|
|
317
|
+
clear_search: "Limpiar búsqueda"
|
|
318
|
+
col_id: "ID"
|
|
319
|
+
col_payload: "Carga"
|
|
320
|
+
col_sent: "Enviado"
|
|
321
|
+
no_messages_matching: "No hay mensajes que coincidan con \"%{search}\""
|
|
322
|
+
empty_title: "No hay mensajes para este canal"
|
|
323
|
+
empty_hint: "Los mensajes pueden haber sido purgados o el canal se ha silenciado."
|
|
324
|
+
errors:
|
|
325
|
+
not_found_title: "No encontrado"
|
|
326
|
+
not_found_message: "404 — El registro que busca no existe o ha sido eliminado."
|
|
327
|
+
server_error_title: "Algo salió mal"
|
|
328
|
+
server_error_message: "500 — Se produjo un error inesperado."
|
|
329
|
+
flash:
|
|
330
|
+
job_discarded: "Trabajo descartado."
|
|
331
|
+
jobs_discarded:
|
|
332
|
+
one: "1 trabajo descartado."
|
|
333
|
+
other: "%{count} trabajos descartados."
|
|
334
|
+
job_retried: "Trabajo reintentado."
|
|
335
|
+
jobs_retried:
|
|
336
|
+
one: "1 trabajo reintentado."
|
|
337
|
+
other: "%{count} trabajos reintentados."
|
|
338
|
+
cache_entry_deleted: "Entrada de caché eliminada."
|
|
339
|
+
arguments_updated: "Argumentos actualizados y trabajo encolado para reintento."
|
|
340
|
+
cache_flushed: "Todas las entradas de caché vaciadas."
|
|
341
|
+
channel_purged: "Todos los mensajes de este canal han sido purgados."
|
|
342
|
+
messages_purged:
|
|
343
|
+
one: "Mensajes de más de 1 día purgados."
|
|
344
|
+
other: "Mensajes de más de %{count} días purgados."
|
|
345
|
+
task_queued: '"%{key}" encolado para ejecución inmediata.'
|
|
346
|
+
jobs_run_immediately:
|
|
347
|
+
one: "1 trabajo programado para ejecutarse inmediatamente."
|
|
348
|
+
other: "%{count} trabajos programados para ejecutarse inmediatamente."
|
|
349
|
+
job_run_immediately: "Trabajo programado para ejecutarse inmediatamente."
|
|
350
|
+
job_rescheduled: "Trabajo reprogramado en +%{offset}."
|
|
351
|
+
audit_migration_required: "El registro de auditoría requiere ejecutar `rails solid_stack_web:install:migrations && rails db:migrate`."
|
|
352
|
+
cannot_retry_jobs: "No se pudieron reintentar los trabajos: %{error}"
|
|
353
|
+
cannot_discard_jobs: "No se pudieron descartar los trabajos: %{error}"
|
|
354
|
+
cannot_run_jobs: "No se pudieron ejecutar los trabajos: %{error}"
|
|
355
|
+
cannot_reschedule_job: "No se pudo reprogramar el trabajo: %{error}"
|
|
356
|
+
cannot_update_job: "No se pudo actualizar el trabajo: %{error}"
|
|
357
|
+
invalid_json: "JSON inválido — los argumentos no fueron guardados."
|
|
358
|
+
task_not_found: "Tarea recurrente no encontrada."
|
|
359
|
+
cannot_run_task: "No se pudo ejecutar la tarea: %{error}"
|
|
360
|
+
cannot_enqueue_task: 'No se pudo encolar "%{key}" — puede que se acabe de ejecutar.'
|
|
361
|
+
cannot_discard: "No se pueden descartar trabajos %{status}."
|
|
362
|
+
invalid_offset: "Desplazamiento inválido."
|
|
363
|
+
helpers:
|
|
364
|
+
cache_entry_this_hour:
|
|
365
|
+
one: "1 entrada esta hora"
|
|
366
|
+
other: "%{count} entradas esta hora"
|
|
367
|
+
cache_entry_hours_ago:
|
|
368
|
+
one: "1 entrada hace %{hours}h"
|
|
369
|
+
other: "%{count} entradas hace %{hours}h"
|
|
370
|
+
cache_size_this_hour: "%{size} escritos esta hora"
|
|
371
|
+
cache_size_hours_ago: "%{size} escritos hace %{hours}h"
|
|
372
|
+
cable_message_this_hour:
|
|
373
|
+
one: "1 mensaje esta hora"
|
|
374
|
+
other: "%{count} mensajes esta hora"
|
|
375
|
+
cable_message_hours_ago:
|
|
376
|
+
one: "1 mensaje hace %{hours}h"
|
|
377
|
+
other: "%{count} mensajes hace %{hours}h"
|
|
378
|
+
throughput_last_hour:
|
|
379
|
+
one: "1 trabajo en la última hora"
|
|
380
|
+
other: "%{count} trabajos en la última hora"
|
|
381
|
+
throughput_hours_ago:
|
|
382
|
+
one: "1 trabajo (hace %{from}h–%{to}h)"
|
|
383
|
+
other: "%{count} trabajos (hace %{from}h–%{to}h)"
|
|
384
|
+
queue_depth_now:
|
|
385
|
+
one: "1 trabajo listo ahora"
|
|
386
|
+
other: "%{count} trabajos listos ahora"
|
|
387
|
+
queue_depth_hours_ago:
|
|
388
|
+
one: "1 trabajo listo hace %{hours}h"
|
|
389
|
+
other: "%{count} trabajos listos hace %{hours}h"
|
|
390
|
+
failure_last_hour:
|
|
391
|
+
one: "1 fallo en la última hora"
|
|
392
|
+
other: "%{count} fallos en la última hora"
|
|
393
|
+
failure_hours_ago:
|
|
394
|
+
one: "1 fallo (hace %{from}h–%{to}h)"
|
|
395
|
+
other: "%{count} fallos (hace %{from}h–%{to}h)"
|
|
@@ -11,6 +11,7 @@ module SolidStackWeb
|
|
|
11
11
|
isolate_namespace SolidStackWeb
|
|
12
12
|
|
|
13
13
|
config.i18n.load_path += Gem.find_files("pagy/locales/en.yml")
|
|
14
|
+
config.i18n.load_path += Dir[root.join("config/locales/*.yml").to_s]
|
|
14
15
|
|
|
15
16
|
initializer "solid_stack_web.assets" do |app|
|
|
16
17
|
if app.config.respond_to?(:assets)
|
data/lib/solid_stack_web.rb
CHANGED
|
@@ -8,7 +8,8 @@ module SolidStackWeb
|
|
|
8
8
|
:alert_failure_threshold, :alert_queue_thresholds,
|
|
9
9
|
:alert_slow_job_count_threshold, :alert_stale_process_threshold,
|
|
10
10
|
:dashboard_refresh_interval, :default_refresh_interval,
|
|
11
|
-
:search_results_limit, :allow_value_preview
|
|
11
|
+
:search_results_limit, :allow_value_preview,
|
|
12
|
+
:available_locales, :nav_links, :dashboard_cards
|
|
12
13
|
|
|
13
14
|
def page_size
|
|
14
15
|
@page_size || 25
|
|
@@ -62,6 +63,18 @@ module SolidStackWeb
|
|
|
62
63
|
@allow_value_preview || false
|
|
63
64
|
end
|
|
64
65
|
|
|
66
|
+
def available_locales
|
|
67
|
+
@available_locales || %i[en es]
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def nav_links
|
|
71
|
+
@nav_links || []
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def dashboard_cards
|
|
75
|
+
@dashboard_cards || []
|
|
76
|
+
end
|
|
77
|
+
|
|
65
78
|
# Returns the path at which the engine is mounted in the host application,
|
|
66
79
|
# derived automatically from the host's routes. Host apps can use this to
|
|
67
80
|
# build links to the dashboard without hardcoding the mount path.
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: solid_stack_web
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chuck Smith
|
|
@@ -222,8 +222,11 @@ files:
|
|
|
222
222
|
- app/views/solid_stack_web/recurring_tasks/index.html.erb
|
|
223
223
|
- app/views/solid_stack_web/scheduled_jobs/update.turbo_stream.erb
|
|
224
224
|
- app/views/solid_stack_web/shared/_flash.html.erb
|
|
225
|
+
- app/views/solid_stack_web/shared/_locale_switcher.html.erb
|
|
225
226
|
- app/views/solid_stack_web/stats/index.html.erb
|
|
226
227
|
- config/importmap.rb
|
|
228
|
+
- config/locales/en.yml
|
|
229
|
+
- config/locales/es.yml
|
|
227
230
|
- config/routes.rb
|
|
228
231
|
- docs/screenshots/demo.gif
|
|
229
232
|
- lib/generators/solid_stack_web/install/install_generator.rb
|