Codenotch en español
Contribución open source a Codenotch (vinzdg/codenotch), una app para macOS, con versión para Windows y soporte en Linux, que muestra en el borde de la pantalla los límites de uso de Claude Code, Cursor, Codex, Antigravity y otros proveedores. Sumé el español completo en Mac y en Windows, con tests y un fix de Antigravity, en una PR de 14 commits y 20 archivos que el maintainer mergeó en main y que salió en Codenotch 1.24.0.
Antes
Codenotch es una app open source para macOS, con versión para Windows y soporte en Linux, que muestra en el borde de la pantalla los límites de uso de Claude Code, Cursor, Codex, Antigravity y otros proveedores. No tenía español en ninguna plataforma. Tomé como modelo la PR #305, la del coreano.
Qué había que resolver
Además de sumar el español, en main había 100 literales L10n.t sin entrada en el catálogo, 64 de la app y 36 de las release notes de la 1.21 a la 1.23. Ese texto salía en inglés en todos los idiomas.
Qué hice.
Lo que aportó mi PR.
Catálogo de Mac completo
1.249 de 1.249 claves de Sources/Localizable.xcstrings con valor en español, incluidas las 100 que faltaban en el catálogo.
Selector de idioma
Agregué es a CFBundleLocalizations y Español en AppLanguage.
Windows completo
La bandeja (16 claves en i18n.rs), la tarjeta (notch.html), la ventana de ajustes (settings.html, con las 111 claves de las otras tablas completas) y la tarjeta de renovación (reset_alert.rs). Todos los locales es-* (es-ES, es-419, es-AR, es_AR.UTF-8) se mapean a es.
Tests
Casos de español en AppLanguageTests, CatalogCoverageTests, CatalogFormatTests y LocalizationTests, y el script windows/scripts/test-es-i18n.cjs, que sumé al CI de windows.yml.
Fix de Antigravity
Probando encontré que los nombres de grupos y ventanas de Antigravity nunca se traducían, en ningún idioma. Pasé ese mapeo al AntigravityQuotaParser con L10n.t, borré las funciones que nadie llamaba y agregué un test.
Mac y Windows dicen lo mismo
Las 87 cadenas que Windows comparte con Mac usan exactamente el mismo valor que el catálogo, y los nombres de ventana coinciden entre la tarjeta y la bandeja: lo verifica el test the_card_and_the_menu_agree_on_window_names.
Cómo lo probé.
Qué corrí y qué revisé en cada plataforma.
Tests de la app
Macmake test-ciTEST SUCCEEDED: 2.460 tests, 0 fallos y 12 salteados (los tests en vivo opcionales).
Recorrido a mano
MacRecorrí todos los paneles de Ajustes, la tarjeta de cada proveedor, el menú de la barra y What's New.
Generación, firma y dependencias
Macmake gen · Scripts/test-signing.sh · make verify-depsmake gen sin cambios, Scripts/test-signing.sh con 4 de 4 chequeos y make verify-deps sin drift.
CI de Windows
Windowswindows.ymlLos 10 pasos node de windows.yml pasan.
Tests y lint en Rust
Windowscargo test --locked · cargo clippycargo test --locked da 211 pasados y 4 ignorados. cargo clippy no da warnings en los archivos tocados.
Renderizado
WindowsRendericé las pantallas en Chromium, en modo claro y oscuro, sin errores.
Cómo se integró
- 01PR #481 · mi contribución14 commits · 20 archivos
- 02Mergeada en main24/10/2026
- 03Publicada en Codenotch 1.24.024/10/2026
Decisiones técnicas.
Qué se eligió y qué implica.
- 01
El vocabulario de macOS en español
Mi PRUsé los términos del sistema en español: Ajustes, Salir de Codenotch, Según el sistema.
→ La app se siente nativa.
- 02
"Se renueva", nunca "reiniciar"
Mi PRPara una cuota uso "se renueva" y nunca "reiniciar".
→ Evité el malentendido por el que rechazaron la #295 en portugués.
- 03
"Endpoints propios"
Mi PRElegí "Endpoints propios" en vez de "Endpoints personalizados", porque el segundo se cortaba en la barra lateral de Ajustes.
→ El texto entra sin tocar el layout.
- 04
No cambiar nada de los otros idiomas
Mi PRVerifiqué a nivel JSON contra main que ningún valor ni orden de claves de los otros idiomas se modificara.
→ Quien usa otro idioma no ve cambios. Un truncado del horario en la tarjeta que afecta a todos los idiomas quedó documentado y sin tocar.
Sumar el español completo en dos plataformas que tenían que decir lo mismo, en una PR grande que tenía que ser fácil de revisar.
- 01Un catálogo de 1.249 claves con 174 claves con formato, en el que los especificadores (%lld y %@) tenían que coincidir en tipo y orden.
- 02Dos plataformas, Swift y Rust/HTML, que tenían que decir lo mismo.
- 03Textos que tenían que entrar en el ancho de cada control sin tocar CSS.
- 04Una PR muy grande que tenía que ser fácil de revisar.
Mi decisión clave
Que el español quedara completo y verificable en las dos plataformas, no sólo traducido. Chequeé mecánicamente cada valor contra el inglés con el mismo tokenizador de CatalogFormatTests: las 174 claves con formato coinciden y no hay ningún % suelto.
Resultado
La PR #481 está mergeada en main y salió en Codenotch 1.24.0. Fue un merge commit, no un squash, así que mis 14 commits quedaron en main con mi autoría.
- vinzdg, maintainer del proyecto, la mergeó en main el 24/10/2026, sin pedir cambios.
- Salió en la release 1.24.0, citada en las notas de Mac y de Windows.
- Quien elige Español en Codenotch ve la app completa en ese idioma en Mac y Windows.
- La tarjeta de Antigravity ahora se traduce en todos los idiomas que tienen esas claves, no sólo en español.