Skip to content

feat(i18n): ofrecer en en el backend (tarea 12) - #74

Merged
keilynrp merged 2 commits into
masterfrom
feat/i18n-offer-en-backend
Oct 8, 2026
Merged

keilynrp merged 2 commits into
masterfrom
feat/i18n-offer-en-backend

Conversation

@keilynrp

@keilynrp keilynrp commented Oct 8, 2026

Copy link
Copy Markdown
Collaborator

Resumen

Último paso de la tarea 12 en el servidor: en pasa de UNRELEASED_LOCALES a SUPPORTED_LOCALES (("es", "en"), con es primero porque es el idioma de reserva). Desde #73 el frontend ya ofrecía en solo; con esto las dos capas coinciden.

Qué acepta ahora el servidor:

  • El PATCH del locale propio (en, en_us → en-US).
  • La sesión de portal (locale al compartir una cotización).
  • Accept-Language en el registro: un navegador en inglés crea un workspace en-US.
  • El locale por defecto del workspace.

Con ello el PDF de factura y los correos salen en inglés para quien lo eligió. UNRELEASED_LOCALES queda vacío pero no se elimina: es el sitio donde entra el siguiente idioma mientras se traduce.

Tests

Diez tests de la suite asumían que en no se ofrecía; se corrigen y se añaden cuatro:

  • test_locale_resolution.py: el catálogo de hoy fija ("es", "en") y que el idioma por defecto sea el primero; el caso «idioma sin catálogo» usa fr-FR en vez de en-US.
  • test_i18n_catalogue.py: «un idioma no ofrecido no se alcanza solo» ejercita el mecanismo con una lista explícita (supported=("es",)), porque ya no hay ninguno sin ofrecer. Nuevo: en se ofrece y se alcanza por usuario y por Accept-Language.
  • test_locale.py: el detalle del rechazo lista ["es", "en"]. Nuevos: PATCH con en_us se guarda como en-US y es el locale efectivo; una sesión de portal acepta en; registrarse con un navegador en inglés crea un workspace en-US.
  • test_english_artifacts.py: solo el docstring.

Recuentos documentados: 928 → 932 tests, 48 archivos (sin cambio), como exige scripts/ci/check_test_count.py, que pasa en local.

Verificación

  • Suite completa del backend antes de corregir: 10 fallos, todos de este tipo y ahora corregidos.
  • Después de las correcciones: los 142 tests de locale, catálogo y artefactos en inglés pasan. No he vuelto a correr la suite completa; la cubre el CI.
  • El plan separa el punto «Ofrecer en»: el backend queda marcado y el selector del diálogo de compartir sigue abierto.

Lo que sigue sin seguir al idioma

Con en ofrecido pasan de limitación latente a visibles para quien lo elija:

  • Fechas e importes de los PDF y los correos (tarea 10).
  • El PDF de cotización (sales/pdf.py).
  • La prosa en español de algunas respuestas del portal y de los send_email por defecto de los workflows.

Siguiente

Selector de idioma en el diálogo de compartir cotización y recorrido de la app en inglés (decisión babel o tabla propia).

🤖 Generated with Claude Code

keilynrp and others added 2 commits October 7, 2026 15:47
Ultimo paso de la tarea 12 en el servidor: `en` pasa de `UNRELEASED_LOCALES` a
`SUPPORTED_LOCALES` (`("es", "en")`, con `es` primero porque es el idioma de reserva).
Desde #73 la interfaz ya lo ofrece sola; con esto las dos capas coinciden: el PATCH del
locale propio, el de la sesion de portal, `Accept-Language` en el registro y el locale
por defecto del workspace aceptan `en` y `en-US`, y el PDF y los correos salen en ingles
para quien lo eligio.

`UNRELEASED_LOCALES` queda vacio, no se elimina: es el sitio donde entra el siguiente
idioma mientras se traduce.

Tests:
- `test_locale_resolution.py`: «el catalogo de hoy es solo espanol» pasa a fijar
  `("es", "en")` y que el idioma por defecto sea el primero; el caso «idioma sin
  catalogo» usa `fr-FR` y no `en-US`.
- `test_i18n_catalogue.py`: el test de «un idioma no ofrecido no se alcanza solo» ejercita
  el mecanismo con una lista explicita (`supported=("es",)`), porque ya no hay ninguno
  sin ofrecer; uno nuevo comprueba que `en` se ofrece y se alcanza por usuario y por
  `Accept-Language`.
- `test_locale.py`: el detalle del rechazo lista `["es", "en"]`; nuevos: PATCH con `en_us`
  se guarda como `en-US` y es el locale efectivo, una sesion de portal acepta `en`, y
  registrarse con un navegador en ingles crea un workspace `en-US`.
- `test_english_artifacts.py`: solo el docstring, que decia que el idioma no se ofrecia.

Los recuentos documentados pasan de 928 a 932 tests (48 archivos, sin cambio), como
exige `scripts/ci/check_test_count.py`.

Lo que sigue sin seguir al idioma: fechas e importes de los PDF y los correos (tarea 10),
el PDF de cotizacion `sales/pdf.py` y la prosa en espanol de algunas respuestas del
portal. Con `en` ofrecido pasan de limitacion latente a visibles para quien lo elija.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
El checklist de la tarea 12 tenia un solo punto para «ofrecer en» que mezclaba el
backend (hecho en el commit anterior) con el selector del dialogo de compartir
cotizacion (pendiente). Se separa en dos: el backend queda marcado y el selector sigue
abierto. Tambien se quita «el backend sigue sin ofrecerlo», que ya no es cierto.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 8, 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-10-08T05:22:55.887766Z 511f173 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.

@keilynrp
keilynrp merged commit 1a91929 into master Oct 8, 2026
5 checks passed
@keilynrp
keilynrp deleted the feat/i18n-offer-en-backend branch October 8, 2026 05:57
keilynrp added a commit that referenced this pull request Oct 8, 2026
…selector

La politica de gobernanza exige tocar este documento cuando cambia una pagina o un
servicio, y este PR toca `QuoteDetail` y `services/portal.ts`. Ademas la fila de
internacionalizacion habia quedado desactualizada en #74: seguia diciendo que `en`
estaba retenido en `UNRELEASED_LOCALES` y que ningun segundo idioma se ofrecia.

Ahora dice que `en` se ofrece (`SUPPORTED_LOCALES`), que el selector del dialogo de
compartir cotizacion fija el idioma del correo al cliente (`portal_sessions.locale`) y
que la pagina del portal sigue el idioma del navegador del cliente. Lo que sigue sin
construir se mantiene: el PDF de cotizacion, la prosa en espanol de algunas respuestas
del portal y del `send_email` de los workflows, y el formato de fechas e importes en lo
que renderiza el servidor.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
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