Repository navigation
Conversation
- 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.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 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".
…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.
Minecraft 26.x ya no está ofuscado: el proyecto usa Loom 1.19 sin remapeo, Java 25 y `Screens.getWidgets` (antes `getButtons`). El mismo código compila y pasa las pruebas contra 26.1, 26.1.1, 26.1.2, 26.2 y 26.3, y ese rango queda declarado en el jar y en `SOPORTADOS`. 26.4 no se incluye: aún solo tiene snapshots. El CI instala también Java 25 para compilarlo. Las pruebas del reescritor para 1.21.5 en adelante ya no usan `ChatFormatting.getColor()`, que desaparece en 26.2. El código compilado sigue sin probarse dentro del juego.
Dos proyectos más: Fabric 1.20.4 (válido para 1.20.3 y 1.20.4, con el reescritor de contenidos planos y el tooltip de tres parámetros) y Fabric 1.20.6 (válido para 1.20.5 y 1.20.6, con el tooltip de cuatro parámetros). Con esto Fabric queda cubierto sin huecos de 1.20 a 1.21.11. Cada rango se comprobó compilando el mismo código y pasando sus pruebas contra la versión vecina. El código compilado sigue sin probarse dentro del juego.
Quilt carga los mods de Fabric con Quilted Fabric API, que porta los cuatro módulos que usa el mod (mensajes, pantallas, objetos y recarga de recursos). La app instala el jar de Fabric en instancias de Quilt de 1.19.4, 1.20 a 1.20.2, 1.20.4, 1.20.6, 1.21 y 1.21.1, y el estado avisa de que no se ha probado en Quilt. Para que Quilt pueda cargarlo, los mods de Fabric piden ahora esos cuatro módulos en lugar de «fabric-api» y ya no exigen un fabricloader alto, porque el mod no usa su API.
…ge 1.20.1 Tres proyectos nuevos de NeoForge: 1.21.4 (que cambió el evento para registrar la recarga de recursos), 1.21.5 (válido también para 1.21.8 y 1.21.10) y 1.21.11 (que renombra ResourceLocation a Identifier). El de 1.21.1 ahora vale también para 1.21 y 1.21.3, comprobado compilando y pasando las pruebas contra esas versiones. NeoForge solo publicó esas versiones en la serie 1.21. NeoForge 1.20.1 es un fork de Forge 1.20.1 y usa el jar de Forge; el estado de la app avisa de que no se ha probado. El mínimo de NeoForge de cada jar sale ahora de `neo_version_minimo` para poder declarar rangos.
Forge 1.18.2 tiene su propio proyecto: el texto aún es TextComponent y TranslatableComponent (variante `reescritor-texto` del reescritor, con sus pruebas), la recarga de recursos usa la API antigua y el evento de pantalla se llama `ScreenEvent.InitScreenEvent`. Fabric 1.18.2 no puede tener mod: Fabric API no trae un evento de chat del cliente en esa versión, igual que en 1.19.2. La app lo dice con ese motivo.
Forge 1.16.5 corre con Java 8 y tiene su propio proyecto: usa los nombres antiguos de las clases (ITextComponent, StringTextComponent, IResourceManager…), no tiene evento para registrar recargas del cliente (se hace con el gestor de recursos en FMLClientSetupEvent), no tiene tooltips por elementos y separa el código de cliente con DistExecutor para no molestar a un servidor. Para poder compartir `Tabla`, se reescribió sin nada posterior a Java 8 (Map.of, String.strip, copyOf, patrones de instanceof, JsonParser.parseReader) con el mismo comportamiento y las mismas pruebas. `construir_mod.py` compila este proyecto con un JDK 8 que le pasa a Gradle como toolchain, y el CI instala Java 8. Fabric 1.16.5 no puede tener mod: su Fabric API no trae evento de chat del cliente.
…talación del mod En Forge 1.16.5 FMLClientSetupEvent se dispara durante la primera recarga de recursos, así que un listener registrado ahí quedaba fuera de ella y la tabla no se cargaba hasta recargar los recursos. Ahora se registra al construir el mod. Instalar el mod de apoyo copia el nuevo antes de borrar los viejos, para no dejar al jugador sin mod si la copia falla, y el estado avisa cuando el jar instalado es de otra versión de Minecraft en vez de decir que todo está listo. En el CI Java 17 vuelve a ser el predeterminado tras instalar Java 8 y 25. Una prueba nueva comprueba que cada versión de la tabla cae dentro del rango que declara su proyecto, que ningún proyecto queda sin usar y que construir_mod.py los conoce todos.
El wrapper de cada proyecto de mod-runtime descarga su propia distribución de Gradle con un tiempo máximo de lectura de 10 segundos, y en el CI `services.gradle.org` tardó más dos veces seguidas («Read timed out») al empezar el primer proyecto. Se sube a 120 segundos en los 17 proyectos.
El CI falló tres veces seguidas al bajar la distribución de Gradle (dos «Read timed out» y un HTTP 504 de GitHub), sin que el código tuviera nada que ver. Subir el tiempo de espera del wrapper arregló el primer caso; esto cubre el resto: `construir_mod.py` repite Gradle hasta 3 veces, pero solo si lo que falló es la red. Un error de compilación o de una prueba se devuelve a la primera, sin reintento. Se anotan en el CHANGELOG el kit de servidor con datapacks comprimidos y los cambios de instalación del mod, y en CONTRIBUTING los reintentos y la prueba de coherencia de versiones.
Al revisar las 6 pruebas del corpus que se saltaban, 3 tenían datos de texto reales que la descarga no guardaba: logros de datapacks en la carpeta `resources/` de Legacies, los datapacks de cada mundo en `saves/` y los de `config/paxi` de dos modpacks que se bajaron antes de que esa carpeta entrara en la descarga. `descargar_corpus.py` ahora baja la parte `data/` de `resources/` y los datapacks de `saves/`, y la prueba del corpus copia esas dos carpetas. Con los cuatro modpacks vueltos a bajar, las pruebas pasan sobre ellos (JSON y zips válidos, repetir no cambia nada, restaurar devuelve los bytes originales) y quedan 3 saltadas, todas justificadas: modpacks sin texto para el jugador.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.
.mcfunction, logros, tips y el mercado de Farming for Blockheads, enkubejs/data,global_packs,datapacks, mundos y zips. Componentes en JSON y SNBT (1.21.5+).tellraw/title/sayenrunCommand, 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).--exhaustivoy casilla).modpackes cobertura): frases de scripts, comandos de otros mods con texto en inglés (p. ej.emberstextapi queue), formatos desconocidos y texto escrito en el código de los mods. Solo lee.mod-runtime/): muestra en español el texto del código Java de los mods (chat, barra de acción, tooltips de objetos y texto de los botones de una pantalla al abrirla) si es idéntico a uno de la tabla que genera la app; reconoce plantillas con%sy%d. Opcional, apagado por defecto; se instala y quita desde la ventana o conmodpackes instalar-runtime. Hay 17 proyectos que cubren:Fabric 1.16.5, 1.18.2 y 1.19.2 no pueden tener mod (su Fabric API no trae evento de chat del cliente) y la app lo dice. La lógica común está en
mod-runtime/comun/. Un mismo jar sirve para versiones vecinas cuando el mismo código compila y pasa las pruebas contra cada una (scripts/construir_mod.py --propiedad). El CI compila los jars con Java 8, 17, 21 y 25 y el.exelos incluye.options.txt. Además, el kit de servidor incluye los datapacks comprimidos con logros o funciones.Cómo se probó
scripts/verificar.pycompleto: ruff, pyright estricto, compilación y 717 pruebas pasadas (3 saltadas: modpacks del corpus sin texto para el jugador).resources/, deconfig/paxiy de los mundos (saves/), siempre sobre copias: JSON, zips y JS (node --check) siguen siendo válidos, repetir no cambia nada y restaurar devuelve los bytes originales.construir_mod.pyreintenta solo los fallos de red. El.exese construye y su prueba de arranque pasa./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
scripts/descargar_corpus.pysuma modpacks al corpus (se baja a.descargas/, ignorado por Git).construir_mod.pylos busca enJAVA_HOME_<versión>_X64o en.herramientas/.construir_mod.pyreintenta hasta 3 veces, pero solo si el fallo es de red.Lista
uv run python scripts/verificar.pypasa completo.CHANGELOG.mdsi el usuario lo nota.