Skip to content

Traducir todo el texto traducible: datos, scripts, informe de cobertura y mod de apoyo - #1

Open
Consterna wants to merge 14 commits into
mainfrom
claude/modpack-farming-crossing-messages-214123
Open

Consterna wants to merge 14 commits into
mainfrom
claude/modpack-farming-crossing-messages-214123

Conversation

@Consterna

@Consterna Consterna commented Nov 6, 2026 •

Copy link
Copy Markdown
Owner

Qué cambia

Tras traducir Farming Crossing 4, parte del chat seguía en inglés: diálogos de NPC, avisos de colección, mensajes de antojos, logros y tips. La app solo buscaba texto en sitios fijos. Este PR hace que traduzca todo lo traducible en cualquier modpack, y que avise de lo que no puede.

  • Datos de texto por estructura: funciones .mcfunction, logros, tips y el mercado de Farming for Blockheads, en kubejs/data, global_packs, datapacks, mundos y zips. Componentes en JSON y SNBT (1.21.5+).
  • KubeJS: texto de tellraw/title/say en runCommand, mensajes armados por partes, métodos de texto según la versión (comprobados en el código de KubeJS 1.12 a 26.x) y funciones propias del script que solo muestran texto (solo en la posición de ese parámetro; si el parámetro se compara, se guarda, va en un id o comando, no se toca nada).
  • Modo exhaustivo opcional para scripts (--exhaustivo y casilla).
  • Informe «Qué queda en inglés» (menú Más y modpackes cobertura): frases de scripts, formatos desconocidos y texto escrito en el código de los mods. Solo lee.
  • Mod de apoyo ModpackES Runtime (Forge 1.20.1, solo cliente, mod-runtime/): muestra en español el texto del código Java de los mods (chat, barra de acción, tooltips) si es idéntico a uno de la tabla que genera la app. Opcional, apagado por defecto; se instala y quita desde la ventana o con modpackes instalar-runtime. El CI lo compila con Java 17 y el .exe lo incluye.
  • Endurecimiento tras revisar toda la app por secciones, con 6 errores corregidos: memoria dañada, gzip truncado en NBT, lectura fuera de carpeta en recursos, espacios de nombres imposibles que cancelaban la traducción, y bytes no UTF-8 en options.txt.

Cómo se probó

  • scripts/verificar.py completo: ruff, pyright estricto, compilación y 642 pruebas pasadas (6 saltadas por falta de datos o de jars descargables).
  • Corpus: 16 modpacks públicos de Modrinth (1.16.5 a 26.x; Forge, NeoForge, Fabric y Quilt) más Farming Crossing 4, siempre sobre copias: JSON, zips y JS (node --check) siguen siendo válidos, repetir no cambia nada y restaurar devuelve los bytes originales.
  • Mod de apoyo: 13 pruebas JUnit; el .exe se construye y su prueba de arranque pasa.
  • No probado: el mod de apoyo dentro del juego (no hay cliente gráfico disponible). Con el mod instalado y el juego en español, /tellraw @s "TPA request expired!" debe salir en español. Las pruebas usan el simulador de traducción, no la API real.

Para quien revise

  • El mod de apoyo existe solo para Forge 1.20.1; NeoForge y Fabric serían proyectos aparte.
  • Queda fuera: pantallas con etiquetas en el código de los mods, funciones de script cuyo texto acaba en comandos de otro mod, y funciones usadas entre archivos. Salen en el informe.
  • scripts/descargar_corpus.py suma modpacks al corpus (se baja a .descargas/, ignorado por Git).

Lista

  • uv run python scripts/verificar.py pasa completo.
  • Agregué o actualicé las pruebas.
  • Anoté el cambio en CHANGELOG.md si el usuario lo nota.

- runCommand/runCommandSilent: traduce el texto de tellraw, title, say, msg, tell y w.
- Mensajes armados por partes (variable que acaba en tell), sus miembros name y
  sus tablas de nombres, incluso si la tabla está en otro archivo.
- Logros y funciones .mcfunction de kubejs/data, con copia de seguridad y en el
  kit para servidores.
… informar de lo que queda

- Funciones, logros y tips se buscan por su estructura (data/<espacio>/function(s)...)
  en cualquier carpeta, sueltos o dentro de .zip, con copia de seguridad.
- Componentes de texto en JSON y en SNBT (1.21.5+).
- notify, kick y los títulos de menús de KubeJS, tomados de su código.
- Más ▸ Qué queda en inglés y `modpackes cobertura`: frases de scripts sin elegir y texto
  escrito en el código de los mods (tabla de constantes de cada clase). Solo lee.
- Pruebas con modpacks públicos de Modrinth y con la instancia propia: validez, idempotencia
  y restauración byte a byte.
…secciones

- Memoria: cierra la conexión si el archivo está dañado y el proceso dice cuál es.
- NBT: un gzip dañado o truncado se convierte siempre en ValueError.
- Carpeta de recursos: rechaza rutas que salen de su raíz.
- Resource pack: un espacio de nombres imposible o reservado de Windows se salta
  y se avisa, en vez de cancelar toda la traducción (mods y libros).
- options.txt: conserva los bytes que no son UTF-8.
- Pruebas de casos límite por sección, línea de comandos real y ventana.
… mods

- Módulo TextoDeJava: traduce las frases del código Java a una tabla del resource pack.
- Mod de cliente ModpackES Runtime (Forge 1.20.1) que cambia chat, barra de acción y
  tooltips cuyo texto es idéntico al de la tabla; con pruebas JUnit.
- Instalar y quitar el mod desde la ventana y con `instalar-runtime`; opción --java.
- scripts/construir_mod.py y paso de CI para compilarlo; el .exe lo incluye.
…ustivo y más corpus

- Métodos de texto de KubeJS según la versión de Minecraft (formatos/kubejs_api.py).
- El informe de cobertura avisa de carpetas con frases cuyo formato no se conoce.
- Formato del mercado de Farming for Blockheads.
- Modo exhaustivo opcional para los scripts (--exhaustivo y casilla).
- Siete modpacks más en el corpus, de 1.16.5 a 26.x con Quilt incluido.
…uestran texto

- Analiza las funciones del script cuyo parámetro solo se muestra (directo, partido en
  líneas o dentro de una plantilla que se muestra) y traduce lo que se les pasa en esa posición.
- Conservador: si el parámetro se compara, busca, guarda, devuelve o va en un id o comando,
  o la función se usa como valor o está repetida, no se toca nada.
- Las cadenas del escáner de JavaScript guardan la posición de su argumento.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 6, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-06T07:56:13.149854Z b93c013 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b93c013adb

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/traductor_es/salida/exportar.py Resolved
…omprobar el mod

- El mod reconoce frases con datos (%s, %d) como plantillas; se descartan las traducciones
  que cambian el orden de los datos o pierden alguno.
- El informe de lo que queda en inglés se ve por categorías, se guarda en un archivo y
  se escribe como JSON con `cobertura --json`.
- Más ▸ Comprobar el mod de apoyo informa de su estado sin abrir el juego.
- Nuevo proyecto mod-runtime/neoforge-1.21.1 (ModDevGradle, Java 21) con la misma tabla y
  plantillas que el de Forge; comprobado en el código de NeoForge el evento de chat
  (ClientChatReceivedEvent, System y overlay) y el de tooltips.
- La app lo reconoce como compatible con NeoForge 1.21.1 y lo instala o quita de mods/.
- scripts/construir_mod.py compila cada proyecto con su Java y su Gradle, y puede usar un
  archivo de hosts solo para Java si el DNS del equipo falla con algunos servidores.
- El CI instala Java 17 y 21 y compila los dos mods con sus pruebas.
Tercer loader del mod de apoyo (client-only): mensajes del juego con
ClientReceiveMessageEvents.MODIFY_GAME, tooltips con ItemTooltipCallback y
la tabla se recarga con un SimpleSynchronousResourceReloadListener. Misma
lógica de tabla y plantillas que Forge y NeoForge, con sus 21 pruebas JUnit.

Se compila con Loom 1.17 y Java 21 (la 1.19 pide Java 25), a bytecode de
Java 17. La app lo instala en instancias Fabric 1.20.1; el script de
construcción, el CI y la documentación lo incluyen.
… tooltips sin objeto

Al abrir una pantalla cambia el texto de sus botones, casillas y etiquetas
(ScreenEvent.Init.Post en Forge y NeoForge, ScreenEvents.AFTER_INIT en Fabric).
En Forge y NeoForge también cambia los tooltips que no son de objetos con
RenderTooltipEvent.GatherComponents. Fabric API no tiene evento para eso.

El texto que una pantalla dibuja directamente no pasa por ningún evento y no
se toca sin Mixin; la documentación lo dice. Las funciones nuevas de Reescritor
llevan pruebas JUnit en los tres mods (23 en cada uno).
…glés

Un script que le pasa a runCommand un comando de otro mod (p. ej.
`emberstextapi queue` o `/eta queue`) con una frase en inglés ya no pasa en
silencio: el informe «Qué queda en inglés» lo lista en una categoría nueva,
«comando». La app no conoce el formato de esos comandos y no los toca, porque
su texto va mezclado con etiquetas propias del mod.

Se detecta por comandos que no son de chat con cinco o más palabras y dos o
más palabras de enlace del inglés. Con los 20 modpacks del corpus y FC4 solo
salta en stormforge, que usa ese mod; no hay falsos positivos.
…on datos del servidor

El filtro miraba la ruta del .zip y no lo que lleva dentro, así que un datapack
comprimido en global_packs con logros o funciones traducidos no entraba en el
kit. Ahora un .zip cuenta por sus entradas (los que solo traen tips siguen
fuera, porque son de cliente).
…1 y 1.21.4

Cuatro combinaciones más de las más jugadas (por modpacks y descargas en
Modrinth): Forge 1.19.2, Fabric 1.19.4, Fabric 1.21.1 y Fabric 1.21.4. Cada
una con su gancho de chat, tooltips y botones leído del código real de su
versión, y 23 pruebas JUnit.

La lógica común sale de las copias: `mod-runtime/comun/` guarda la tabla y
tres variantes del reescritor según cómo guarda el texto cada versión
(literal, plano desde 1.20.3 y sin texto de reserva en 1.19.2).

Fabric 1.19.2 no puede tener mod: Fabric API no trae un evento de chat del
cliente en esa versión. La app lo dice con ese motivo en vez de «todavía no».
… de versiones vecinas

Fabric 1.21.5 (válido de 1.21.5 a 1.21.10) y Fabric 1.21.11, que renombra
ResourceLocation a Identifier. Con esto Fabric queda cubierto sin huecos de
1.21 a 1.21.11, más 1.19.4 y de 1.20 a 1.20.2.

Un mismo jar sirve para varias versiones cuando el mismo código compila y pasa
sus pruebas contra cada una: `construir_mod.py --propiedad` lo comprueba sin
generar jar, y el rango comprobado queda en `minecraft_range` de cada proyecto
y en `SOPORTADOS`. El código compilado sigue sin probarse dentro del juego.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant