Repository navigation
feat(i18n): selector de idioma del cliente al compartir una cotizacion (tarea 12) - #75
Conversation
Ultimo punto de la tarea 12 que quedaba abierto desde la tarea 2: el dialogo de compartir cotizacion deja elegir el idioma del cliente. El backend ya guardaba `locale` en la sesion de portal y lo usa para redactar el correo que le manda al cliente; faltaba que la interfaz lo enviara. - `QuoteDetail`: un desplegable «Idioma del cliente» con los idiomas ofrecidos, cada uno escrito en si mismo. Propone el idioma de la interfaz (el vendedor suele escribirle al cliente en el suyo) y siempre manda un idioma concreto, tanto al copiar el enlace como al enviar el correo. Se restablece al cerrar el dialogo. Como el selector de la interfaz, no se dibuja si solo hay un idioma ofrecido. - Un texto de ayuda dice solo lo que es cierto: «El correo al cliente sale en este idioma». La pagina del portal sigue el idioma del navegador del cliente, no el de la sesion, y el texto no promete lo contrario. - `services/portal.ts`: `locale` en `PortalSession` y en `CreateSessionDto`. - `i18n/languageName.ts`: el nombre de un idioma en si mismo sale de `LanguageSelector` a un modulo propio para compartirlo con el dialogo. - Dos claves nuevas en `sales` (es y en): `shareDialog.clientLanguage` y `shareDialog.clientLanguageHint`. Tests: en espanol, que se propone el idioma de la interfaz y se envia con la sesion, que se puede escribir al cliente en otro idioma y que se restablece al reabrir; en ingles real, que se propone `en` y se puede cambiar a `es`. Comprobado con mutaciones: no enviar `locale` hace fallar tres tests, y una copia del texto en espanol falla el check de catalogos y el test. El plan marca el punto como hecho. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
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: 398b25d53a
ℹ️ 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".
|
|
||
| {/* Share dialog */} | ||
| <Dialog open={shareOpen} onOpenChange={(o) => { setShareOpen(o); if (!o) { setShareEmail(""); setShareName(""); setShareDays(14); } }}> | ||
| <Dialog open={shareOpen} onOpenChange={(o) => { setShareOpen(o); if (!o) { setShareEmail(""); setShareName(""); setShareDays(14); setShareLocale(null); } }}> |
There was a problem hiding this comment.
Reset the locale after successful email sends
Resetting shareLocale only in onOpenChange misses the successful-send path: sendPortalEmailMutation.onSuccess closes this controlled dialog directly with setShareOpen(false), which does not invoke onOpenChange. After sending to one customer in a non-default language, reopening the dialog retains that language and can send the next customer's email in it instead of proposing the interface language as intended. Route successful closure through the reset logic or reset shareLocale in the success handler.
Useful? React with 👍 / 👎.
…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>
Resumen
Último punto de la tarea 12 que seguía abierto desde la tarea 2: el diálogo de compartir cotización deja elegir el idioma del cliente. El backend ya guardaba
localeen la sesión de portal y lo usa para redactar el correo que se le manda al cliente (desde #74 aceptaen); faltaba que la interfaz lo enviara.QuoteDetail: desplegable «Idioma del cliente» con los idiomas ofrecidos, cada uno escrito en sí mismo. Propone el idioma de la interfaz (quien vende suele escribirle al cliente en el suyo) y siempre manda un idioma concreto, tanto al copiar el enlace como al enviar el correo. Se restablece al cerrar el diálogo. Como el selector de la interfaz, no se dibuja si solo hay un idioma ofrecido.services/portal.ts:localeenPortalSessiony enCreateSessionDto.i18n/languageName.ts: el nombre de un idioma en sí mismo sale deLanguageSelectora un módulo propio para compartirlo.sales(es y en):shareDialog.clientLanguageyshareDialog.clientLanguageHint.Tests
english-sales.test.tsx): se proponeeny se puede cambiar aes.Verificación
localehace fallar 3 tests; una copia del texto en español falla el check de catálogos y el test.Siguiente
Recorrer la app en inglés: textos concatenados, plurales y formato de fechas e importes (decisión
babelo tabla propia, pendiente desde la tarea 10), y lo que ahora se nota más porqueenya se ofrece: el PDF de cotización (sales/pdf.py) y la prosa en español de las respuestas del portal.🤖 Generated with Claude Code