|
|
@@ -9,11 +9,6 @@ container-log-header = 📜 Logs de contenedor más recientes:
|
|
|
cluster-stopping = 🛑 Deteniendo cluster '{ $name }'...
|
|
|
cluster-all-stopped = ✅ Todos los contenedores detenidos.
|
|
|
cluster-section = === Cluster: { $name } ===
|
|
|
-container-count = Contenedores totales: { $count }
|
|
|
-no-sm121-containers = (sin contenedores sm121)
|
|
|
-docker-unavailable = ✗ Docker no disponible
|
|
|
-ssh-error = { $node } ({ $ip }): ✗ Error SSH: { $error }
|
|
|
-task-join-error = ✗ Error de unión de tarea: { $error }
|
|
|
doctor-header = 🩺 Doctor: { $name } ({ $engine }) [backend: { $backend }]
|
|
|
|
|
|
doctor-node-section = --- { $name } ---
|
|
|
@@ -24,10 +19,6 @@ doctor-repaired = ✅ Imagen reparada: { $tag }
|
|
|
doctor-dry-build = (dry-run) Se construiría { $tag } en { $node }
|
|
|
logs-follow-head = 📜 Siguiendo logs de '{ $name }' (nodo principal)...
|
|
|
logs-section = --- { $name } ---
|
|
|
-stop-failed = Detención falló en { $name }: { $error }
|
|
|
-remove-failed = Eliminación falló en { $name }: { $error }
|
|
|
-failed-to = Falló { $action } en { $name }: { $error }
|
|
|
-health-section = === Cluster: { $name } ===
|
|
|
health-cluster-header = === { $name } === { $nodes } { $nodes ->
|
|
|
[one] nodo
|
|
|
*[other] nodos
|
|
|
@@ -46,9 +37,6 @@ health-soft-off = ⚙ { $list } apagado (no bloqueante)
|
|
|
health-net-status = [red: { $details }]
|
|
|
health-no-containers = (sin contenedores)
|
|
|
health-no-containers-inline = , sin contenedores
|
|
|
-health-total = Contenedores totales: { $count }
|
|
|
-health-docker-unavailable = ✗ Docker no disponible
|
|
|
-docker-error-line = { $err }
|
|
|
exec-header = ⚡ exec: { $cmd } ({ $nodes } { $nodes ->
|
|
|
[one] nodo
|
|
|
*[other] nodos
|
|
|
@@ -82,7 +70,6 @@ ha-invalid-entity = { $name }: entity inválido '{ $entity }': { $error }
|
|
|
ha-call-failed = HA { $service } { $entity }: { $error }
|
|
|
|
|
|
ha-skip-no-entity = ⚠ { $name }: sin `entity` configurado, omitiendo HA
|
|
|
-ha-extra-invalid = { $label } ({ $extra }): entity inválido '{ $extra }'
|
|
|
ha-extra-failed = HA { $service } { $extra } ({ $label }): { $error }
|
|
|
|
|
|
power-switch-would-off = sería: HA turn_off { $entity }
|
|
|
@@ -91,7 +78,6 @@ power-switch-would-on = sería: HA turn_on { $entity }
|
|
|
power-switch-would-on-extra = sería: HA turn_on { $extra } (a extras)
|
|
|
power-switch-shutdown-failed = ✗ { $name } apagado: { $error }
|
|
|
power-switch-waiting = ⏳ esperando { $secs}s para apagado
|
|
|
-ha-entity-error = { $name }: entidad '{ $entity }': { $error }
|
|
|
power-switch-no-ha = sin config [home_assistant]; el apagado de SO se realizó
|
|
|
power-off-entity-would = sería: HA turn_off { $entity }
|
|
|
pre-serve-skip = ⏭ Omitiendo hooks pre-serve (--skip-before-serve)
|
|
|
@@ -108,7 +94,6 @@ cluster-switch-powered-on = ✅ Switch del cluster encendido
|
|
|
cluster-waiting-for-nodes = ⏳ Esperando que los nodos estén disponibles...
|
|
|
cluster-nodes-available = ✅ Todos los nodos ya están disponibles
|
|
|
cluster-nodes-not-available-timeout = ❌ Tiempo de espera agotado para nodos disponibles
|
|
|
-ha-config-required-for-power-on = ❌ Config HA requerida para encender
|
|
|
logs-header = 📜 Logs del cluster '{ $name }' ({ $count } nodos)
|
|
|
engine-started = ✅ { $engine } iniciado en { $name } (rango { $rank })
|
|
|
engine-start-failed = Falló iniciar { $engine } en { $name } (rango { $rank }): { $error }
|
|
|
@@ -125,7 +110,6 @@ exec-unknown-alias-list = Alias desconocido @{ $name }; alias conocidos: { $alia
|
|
|
mods-uploading = 📤 Subiendo mods a { $node }...
|
|
|
mods-uploaded = ✅ Mods subidos a { $node }
|
|
|
mods-entrypoint-required = La receta '{ $name }' tiene mods pero no tiene entrypoint; se requiere entrypoint cuando hay mods
|
|
|
-power-off-container-stop-failed = ⚠️ No se pudieron detener contenedores en el nodo { $name }: { $error}
|
|
|
|
|
|
after-stop-failed = after_stop: nodo { $name } falló: { $error }
|
|
|
after-stop-run = { $node } ({ $tag }) :: { $cmd }
|
|
|
@@ -202,7 +186,6 @@ tmux-composed-model-unsupported = Recipe '{ $name }' usa [composed_model], que e
|
|
|
tmux-health-section = Tmux:
|
|
|
tmux-health-entry-running = { $recipe } — { $node }: en ejecución (API: { $api })
|
|
|
tmux-health-entry-degraded = { $recipe } — { $node }: degradado (la sesión existe, proceso muerto)
|
|
|
-tmux-health-entry-stopped = { $recipe } — { $node }: detenido
|
|
|
tmux-health-all-stopped = { $count ->
|
|
|
[one] { $count } receta de tmux configurada, todas detenidas
|
|
|
*[other] { $count } recetas de tmux configuradas, todas detenidas
|
|
|
@@ -213,7 +196,6 @@ venv-preparing = 🔧 Preparando venv: { $venv }
|
|
|
venv-exists = ✓ venv ya existe en { $name }
|
|
|
venv-creating = venv no encontrado en { $name } — creando...
|
|
|
venv-created = ✓ venv creado correctamente en { $name }
|
|
|
-venv-prepare-failed = preparación venv: nodo { $name } falló: { $error }
|
|
|
venv-not-created = venv no se creó correctamente en { $name } — los comandos de configuración se ejecutaron pero falta el script activate
|
|
|
|
|
|
# health render module (plain/md/html)
|
|
|
@@ -275,3 +257,70 @@ report-col-tps1 = Tok/s c1
|
|
|
report-col-tps2 = Tok/s c2
|
|
|
report-serving = Informe interactivo de recetas: { $url } (actualizaciones en vivo; Ctrl-C para parar)
|
|
|
report-title = Recetas probadas ({ $count })
|
|
|
+
|
|
|
+# --- recipe repos (src/recipe_repos.rs) ---
|
|
|
+git-failed = git { $cmd } falló: { $err }
|
|
|
+recipe-repo-archived-skip = repositorio de recetas archivado — omitiendo: { $url }
|
|
|
+recipe-repo-synced = repositorio de recetas sincronizado: { $url } → { $dir }
|
|
|
+recipe-repo-unreachable = repositorio de recetas '{ $url }' inaccesible — omitiendo ({ $err }); continuando con los repositorios accesibles
|
|
|
+repos-registry-corrupt = el registro de repositorios '{ $path }' está corrupto ({ $err }) — moviéndolo a '{ $bak }' y empezando de nuevo
|
|
|
+repos-registry-backup-failed = no se pudo respaldar el registro corrupto { $path }
|
|
|
+repos-none-configured = no hay [[recipe_repos]] configurados
|
|
|
+repos-col-repo = repositorio
|
|
|
+repos-col-state = estado
|
|
|
+repos-col-last = última sincronización
|
|
|
+repos-col-count = recetas
|
|
|
+repos-state-archived = archivado
|
|
|
+repos-state-synced = sincronizado
|
|
|
+repos-state-not-cloned = sin clonar
|
|
|
+repos-sync-dry-reclone = [dry-run] volvería a clonar el repositorio de recetas { $url } → { $dir }
|
|
|
+repos-sync-dry-sync = [dry-run] clonaría/actualizaría el repositorio de recetas { $url } → { $dir }
|
|
|
+repos-none-synced = ningún repositorio de recetas sincronizado (todos inaccesibles o archivados)
|
|
|
+archive-config-dir-fail = no se pudo determinar el directorio de configuración global (dirs::config_dir)
|
|
|
+archive-dry-archive = [dry-run] archivaría '{ $url }' en { $path }
|
|
|
+archive-dry-unarchive = [dry-run] desarchivaría '{ $url }' en { $path }
|
|
|
+archive-done = archivado '{ $url }' en { $path }
|
|
|
+unarchive-done = desarchivado '{ $url }' en { $path }
|
|
|
+
|
|
|
+# --- promote (src/promote.rs) ---
|
|
|
+promote-repo-not-configured = el repositorio '{ $url }' no es una entrada [[recipe_repos]] configurada — añádelo a la configuración (el promote necesita su token para el push)
|
|
|
+promote-checkout-missing = el repositorio '{ $url }' no está sincronizado — ejecuta `sm121 repos sync` (dry-run: sin I/O de git)
|
|
|
+promote-checkout-sync-fail = el repositorio '{ $url }' no está sincronizado — sincronízalo primero (sm121 repos sync)
|
|
|
+promote-detached-head = el checkout { $path } está en detached HEAD — cambia a una rama primero
|
|
|
+promote-same-repo = --from y --to deben ser repositorios distintos
|
|
|
+promote-recipe-not-in-source = la receta '{ $recipe }' no se encontró en el checkout del repositorio de origen ({ $path }) — ¿está actualizado el checkout? (sm121 repos sync)
|
|
|
+promote-recipe-in-target = la receta '{ $recipe }' ya existe en el repositorio de destino — no se sobrescribe (elimínala allí primero)
|
|
|
+promote-cp-failed = cp falló: { $err }
|
|
|
+promote-cp-context = ejecutando cp
|
|
|
+promote-target-dir-context = directorio recipes/ del destino
|
|
|
+promote-run-start = promoviendo '{ $recipe }' de { $from } a { $to } ({ $count } { $count ->
|
|
|
+ [one] paso
|
|
|
+ *[other] pasos
|
|
|
+ })
|
|
|
+promote-source-checkout = checkout de origen: { $path }
|
|
|
+promote-target-checkout = checkout de destino: { $path }
|
|
|
+promote-step-line = [{ $side }] { $description }
|
|
|
+promote-done = promovida '{ $recipe }' — el destino ya la tiene; la próxima sincronización de ambos repositorios consolida el movimiento
|
|
|
+promote-dry-head = [dry-run] promovería '{ $recipe }' de { $from } a { $to }:
|
|
|
+promote-dry-suppressed = (suprimido: -d dry-run tiene prioridad sobre --apply)
|
|
|
+promote-run-apply-hint = vuelve a ejecutar con --apply para aplicarlo
|
|
|
+
|
|
|
+# --- registry image source (src/docker/registry_pull.rs) ---
|
|
|
+registry-needs-registry = --image-source registry requiere una sección [registry] en la configuración
|
|
|
+registry-ref-map-fail = no se pudo mapear la imagen '{ $image }' a un ref del registro bajo base '{ $base }' (el nombre de la imagen debe ser un <name>[:tag] simple)
|
|
|
+registry-pull-context = pull del registro en '{ $node }'
|
|
|
+registry-present = la imagen '{ $image }' del registro ya está en '{ $node }' (la etiqueta checksum coincide)
|
|
|
+registry-pulled = descargada '{ $ref }' → '{ $image }' en '{ $node }' (etiqueta checksum verificada)
|
|
|
+registry-dry-run = [dry-run] --image-source registry: descargaría { $ref } → etiqueta '{ $image }' en { $count } { $count ->
|
|
|
+ [one] nodo
|
|
|
+ *[other] nodos
|
|
|
+ } (checksum { $checksum }…)
|
|
|
+registry-tag-not-found = { $node }: el tag '{ $ref }' no está en el registro — compílalo y haz push primero (sm121 build --recipe { $recipe } --build-node <node>), o vuelve a --image-source repo
|
|
|
+registry-tag-failed = { $node }: docker tag falló tras la descarga
|
|
|
+registry-label-mismatch = { $node }: la etiqueta sm121.checksum de la imagen descargada es '{ $got }', se esperaba '{ $checksum }' — el tag del registro no lleva esta build
|
|
|
+registry-output-unparseable = { $node }: salida de la descarga ilegible: { $out }
|
|
|
+registry-pull-failed = --image-source registry falló en: { $failed }
|
|
|
+
|
|
|
+# --- drop_caches hook (src/docker/mod.rs) ---
|
|
|
+drop-caches-start = Vaciando la caché de páginas en todos los nodos...
|
|
|
+drop-caches-failed = drop_caches en { $node } falló: { $err }
|