77 lines
3.3 KiB
Bash
Executable File
77 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ============================================================================
|
|
# translate_gap.sh — Traduce el "gap" marzo→ahora de feadulta a EN/FR/IT/PT.
|
|
#
|
|
# Hace TODO de una vez: comprobaciones previas, traduce las 15 cartas semanales
|
|
# (marzo a junio) + sus artículos con Gemma local, remapea categorías y enseña
|
|
# el recuento final. Idempotente y REANUDABLE: re-ejecutar es seguro (salta lo
|
|
# ya traducido). NO publica nada (todo queda en borrador / draft).
|
|
#
|
|
# USO (un solo comando, en segundo plano):
|
|
# nohup bash scripts/translate_gap.sh > /tmp/feadulta-gap.out 2>&1 &
|
|
# Y para ver el progreso:
|
|
# tail -f /tmp/feadulta-gap.log
|
|
#
|
|
# Ver issue rafa/feadulta#75.
|
|
# ============================================================================
|
|
set -u
|
|
|
|
cd "$(dirname "$0")/.." || { echo "No puedo entrar en el repo"; exit 1; }
|
|
|
|
LOG=/tmp/feadulta-gap.log
|
|
LANGS="en,fr,it,pt"
|
|
# Cartas del gap (de más reciente a más antigua). Override opcional: CARTAS="45018" bash ...
|
|
CARTAS="${CARTAS:-45018 44997 44975 44230 44229 44228 44090 44089 44088 44087 44086 44085 44084 44083 42590}"
|
|
|
|
ts() { date '+%Y-%m-%d %H:%M:%S'; }
|
|
say() { echo "[$(ts)] $*" | tee -a "$LOG"; }
|
|
|
|
say "================ INICIO batch del gap (draft) ================"
|
|
|
|
# 1) LM Studio + Gemma cargado
|
|
say "Preflight 1/2: LM Studio / Gemma..."
|
|
if ! curl -s --max-time 10 http://172.19.128.1:1234/v1/models 2>/dev/null | grep -q 'gemma-4-e4b'; then
|
|
say "ERROR: LM Studio no responde o 'google/gemma-4-e4b' no está cargado."
|
|
say " -> En Windows: abre LM Studio, carga 'google/gemma-4-e4b', server en 0.0.0.0:1234."
|
|
exit 1
|
|
fi
|
|
say " OK: Gemma disponible."
|
|
|
|
# 2) Contenedores docker arriba
|
|
say "Preflight 2/2: contenedores docker..."
|
|
for cnt in wordpress-web wordpress-mysql; do
|
|
if ! docker ps --format '{{.Names}}' | grep -qx "$cnt"; then
|
|
say "ERROR: el contenedor '$cnt' no está arriba. Arranca el stack (docker compose up -d) y reintenta."
|
|
exit 1
|
|
fi
|
|
done
|
|
say " OK: wordpress-web y wordpress-mysql arriba."
|
|
|
|
# 3) Traducir cada carta + sus artículos
|
|
N=$(echo $CARTAS | wc -w)
|
|
i=0
|
|
for c in $CARTAS; do
|
|
i=$((i+1))
|
|
say "=== Carta $c ($i/$N) -> $LANGS (draft) ==="
|
|
python3 scripts/translate_post.py --carta "$c" --langs "$LANGS" --status draft 2>&1 | tee -a "$LOG"
|
|
done
|
|
|
|
# 4) Remap de categorías (idempotente, sin Gemma): mete cada traducción en la
|
|
# categoría de su idioma (arregla el archivo de carta por idioma).
|
|
say "Remapeando categorías de todas las traducciones..."
|
|
docker cp scripts/remap_translation_cats.php wordpress-web:/tmp/remap_translation_cats.php >/dev/null 2>&1
|
|
docker exec wordpress-web php /tmp/remap_translation_cats.php 2>&1 | tee -a "$LOG"
|
|
|
|
# 5) Recuento final por idioma
|
|
say "Recuento final de traducciones por idioma (meta traduccion_origen):"
|
|
docker exec wordpress-mysql mysql -uwordpress_user -pwordpress_pass wordpress_db -N -e "
|
|
SELECT t.slug, COUNT(*) FROM wp_postmeta m
|
|
JOIN wp_term_relationships tr ON m.post_id=tr.object_id
|
|
JOIN wp_term_taxonomy tt ON tr.term_taxonomy_id=tt.term_taxonomy_id AND tt.taxonomy='language'
|
|
JOIN wp_terms t ON tt.term_id=t.term_id
|
|
WHERE m.meta_key='traduccion_origen' GROUP BY t.slug;" 2>/dev/null | tee -a "$LOG"
|
|
|
|
say "================ FIN batch del gap ================"
|
|
say "Todo en DRAFT. No se ha publicado nada. Avisa a Rafa para revisar antes de publicar."
|
|
say "Log completo: $LOG"
|