Zum Inhalt

EPPA — Clinical Translation Review Packet (L22)

Status: Draft pending clinical reviewer sign-off Source of truth: messages/es.json (clinician-authored, Spanish – Rioplatense register) Locales under review: en, de, pt-BR (machine-drafted, no clinical review yet) Repo path: fronts/eppa/messages/


0. How to use this packet

  1. Read the Glossary first. It captures the clinical / anatomical / protocol vocabulary that recurs across the UI. Fixing a term here propagates to every screen.
  2. Then walk the By-namespace review tables. Each row is a single UI string, identified by its flat JSON key (e.g. home.howToStart.step3) so a developer can find it instantly in code.
  3. Any row that the auto-review flagged as suspicious carries a ⚠️ in the rightmost column. Replace ⚠️ with ✅ once you have validated the translation, or write the corrected wording directly into that cell.
  4. The Known concerns section calls out structural risks (button overflow, locale dialect, decimal separator) that no per-string review can catch.
  5. Finish with the Sign-off checklist at the bottom.

Sign-off process

Step Owner Action
1 Clinical reviewer Annotate this file directly (replace ⚠️ with ✅ or with corrected text).
2 Clinical reviewer Sign the checklist at the bottom (name + date).
3 Dev team Apply corrections to messages/{en,de,pt-BR}.json.
4 Dev team Update _meta.lastReviewed and _meta.reviewer in each JSON; set _meta.translationStatus to "clinically-reviewed".
5 Dev team Visual QA pass (especially German button widths).

Deadline

Target sign-off date: TBD — to be confirmed with project lead.

Feedback channel

Email: TBD — to be configured (placeholder: labis-eppa@uca.edu.ar).


1. Glossary — Clinical / Anatomical / Protocol Terms

The terms below are the clinical vocabulary that drives EPPA. If the reviewer disagrees with any of these, almost every UI table downstream will need a follow-up correction. Review this section first.

# es (source) en de pt-BR Status
G01 Evaluación Posturográfica de Pie Automatizada Automated Standing Postural Assessment Automatisierte posturale Standanalyse Avaliação Posturográfica Automatizada em Pé ⚠️
G02 marcadores anatómicos anatomical markers anatomische Marker marcadores anatômicos ⚠️
G03 puntos anatómicos anatomical points / landmarks anatomische Punkte pontos anatômicos ⚠️
G04 captura de marcadores marker capture Markererfassung captura de marcadores ⚠️
G05 vista anterior anterior view Vorderansicht vista anterior ⚠️
G06 vista posterior posterior view Rückansicht vista posterior ⚠️
G07 perfil derecho / lateral derecha right profile / right lateral Profil rechts perfil direito ⚠️
G08 perfil izquierdo / lateral izquierda left profile / left lateral Profil links perfil esquerdo ⚠️
G09 análisis en plano frontal frontal plane analysis Analyse in der Frontalebene análise no plano frontal ⚠️
G10 análisis en plano posterior posterior plane analysis Analyse in der Rückenebene análise no plano posterior ⚠️
G11 alineación sagital derecha right sagittal alignment sagittale Ausrichtung rechts alinhamento sagital direito ⚠️
G12 alineación sagital izquierda left sagittal alignment sagittale Ausrichtung links alinhamento sagital esquerdo ⚠️
G13 calibrar la imagen calibrate the image das Bild kalibrieren calibrar a imagem ⚠️
G14 calibrar la grilla calibrate the grid das Raster kalibrieren calibrar a grade ⚠️
G15 análisis postural por vista per-view postural analysis ansichtsbasierte Posturanalyse análise postural por vista ⚠️
G16 flujo clínico clinical workflow klinischer Ablauf fluxo clínico ⚠️
G17 captura clínica de puntos anatómicos clinical capture of anatomical landmarks klinische Erfassung anatomischer Punkte captura clínica de pontos anatômicos ⚠️
G18 ID Paciente / ID del paciente Patient ID Patienten-ID ID do paciente ⚠️
G19 sesión local local session lokale Sitzung sessão local ⚠️
G20 reporte CSV / informe CSV report CSV-Bericht relatório CSV ⚠️
G21 resultados reproducibles reproducible results reproduzierbare Ergebnisse resultados reproduzíveis ⚠️
G22 Solo uso de investigación. No es un dispositivo médico. Research use only. Not a medical device. Nur für Forschungszwecke. Kein Medizinprodukt. Uso apenas para pesquisa. Não é um dispositivo médico. ⚠️
G23 profesional clínico clinical practitioner Klinische Fachperson profissional clínico ⚠️
G24 estimado por IA AI-estimated KI-geschätzt estimado por IA ⚠️
G25 punto de referencia temporal temporary reference point temporärer Referenzpunkt ponto de referência temporário ⚠️
G26 auto-detectar (marcadores) auto-detect (markers) automatisch erkennen detectar automaticamente ⚠️
G27 detección automática de marcadores automatic marker detection automatische Markererkennung detecção automática de marcadores ⚠️
G28 marcadores verdes green markers grüne Marker marcadores verdes ⚠️
G29 tipo de vista view type Ansichtstyp tipo de vista ⚠️
G30 fotografía postural (implícito) postural photograph (implicit) posturale Aufnahme (implicit) fotografia postural (implícito) ⚠️

Notes for the reviewer:

  • G01 — The Spanish full name carries "de Pie" (standing). The German rendering folds this into "Stand". Confirm "Standanalyse" reads as "standing analysis" and not "stance analysis" / "Standanalyse als Branding".
  • G06 / G10 — German Rückenebene is unusual; standard anatomy is Frontalebene (anterior) vs Dorsalebene / Sagittalebene. The current draft says "Rückenebene" — please confirm or replace with Dorsalebene / Hinteransicht-Ebene.
  • G07–G12 — The Spanish source uses two registers: Perfil Derecho (in route labels) and Lateral Der. (in short tags). The other locales preserve this. Confirm both registers are clinically acceptable.
  • G14 — pt-BR grade for grid. In Brazilian physiotherapy literature, both grade and grelha appear; please confirm grade is the standard.
  • G22 — Disclaimer wording. This is regulatory-adjacent. Please confirm wording in each locale satisfies the local regulator's expectations for "research use only / not a medical device" claims.

2. By-namespace review tables

Convention: rightmost column is per-row sign-off. ⚠️ = auto-review flagged. ✅ = reviewer signed off. Replace ⚠️ with ✅ (or with corrected text) as you walk down the table.

2.1 common (4 strings)

key es en de pt-BR Status
common.appName EPPA EPPA EPPA EPPA
common.appTagline Evaluación Posturográfica de Pie Automatizada Automated Standing Postural Assessment Automatisierte posturale Standanalyse Avaliação Posturográfica Automatizada em Pé ⚠️
common.labisCredit LABIS UCA LABIS UCA LABIS UCA LABIS UCA
common.researchUseOnly Solo uso de investigación — No es un dispositivo médico Research use only — Not a medical device Nur für Forschungszwecke — Kein Medizinprodukt Uso apenas para pesquisa — Não é um dispositivo médico ⚠️

(<5 strings would merge into Misc, but this is a high-impact namespace — kept as its own table.)

2.2 layout (4 strings)

key es en de pt-BR Status
layout.skipToContent Ir al contenido Skip to content Zum Inhalt springen Pular para o conteúdo
layout.tutorial Tutorial Tutorial Tutorial Tutorial
layout.themeToggle Cambiar tema Toggle theme Design umschalten Alternar tema ⚠️
layout.languageSwitcher Idioma Language Sprache Idioma

layout.themeToggle — German Design umschalten reads as "toggle design". Confirm vs Thema umschalten / Erscheinungsbild umschalten.

2.3 header (4 strings)

key es en de pt-BR Status
header.brand EPPA EPPA EPPA EPPA
header.home Inicio Home Start Início
header.markerCapture Captura de Marcadores Marker Capture Markererfassung Captura de Marcadores ⚠️
header.patientBadge Paciente: {id} Patient: {id} Patient: {id} Paciente: {id}

Markererfassung is a compound noun — may overflow on narrow header. See Known Concerns §4.1.

2.4 routes (6 strings)

key es en de pt-BR Status
routes.home Inicio Home Start Início
routes.markerCapture Captura de Marcadores Marker Capture Markererfassung Captura de Marcadores ⚠️
routes.anterior Vista Anterior Anterior View Vorderansicht Vista Anterior
routes.posterior Vista Posterior Posterior View Rückansicht Vista Posterior ⚠️
routes.lateralDerecha Perfil Derecho Right Profile Profil rechts Perfil Direito
routes.lateralIzquierda Perfil Izquierdo Left Profile Profil links Perfil Esquerdo

Note: route keys lateralDerecha / lateralIzquierda keep Spanish casing in the JSON keys (internal only, not user-visible). Confirm Rückansicht (G06).

2.5 home (17 strings, including nested howToStart)

key es en de pt-BR Status
home.heroHeading Flujo clínico Clinical workflow Klinischer Ablauf Fluxo clínico
home.heroDescription Capture marcadores anatómicos, calibre la imagen y ejecute el análisis postural por vista con resultados reproducibles. Capture anatomical markers, calibrate the image, and run per-view postural analysis with reproducible results. Erfassen Sie anatomische Marker, kalibrieren Sie das Bild und führen Sie eine ansichtsbasierte Posturanalyse mit reproduzierbaren Ergebnissen durch. Capture marcadores anatômicos, calibre a imagem e execute a análise postural por vista com resultados reproduzíveis. ⚠️
home.sessionBadge Sesión local Local session Lokale Sitzung Sessão local
home.newSession Nueva sesión New session Neue Sitzung Nova sessão
home.patientIdLabel ID Paciente Patient ID Patienten-ID ID do paciente
home.patientIdPlaceholder Ej: PAC-001 e.g. PAT-001 z. B. PAT-001 Ex.: PAC-001 ⚠️
home.markerCaptureTitle Captura de Marcadores Marker Capture Markererfassung Captura de Marcadores
home.markerCaptureDescription Cargar imagen, seleccionar vista y ubicar puntos anatómicos. Upload an image, choose a view, and place anatomical points. Bild hochladen, Ansicht auswählen und anatomische Punkte setzen. Carregar imagem, selecionar vista e marcar pontos anatômicos.
home.sessionProgressHeading Progreso de la sesión Session progress Sitzungsfortschritt Progresso da sessão
home.generateReportCsv Generar Reporte CSV Generate CSV Report CSV-Bericht erstellen Gerar Relatório CSV
home.sessionSummaryWithPatient Paciente: {patientId} Patient: {patientId} Patient: {patientId} Paciente: {patientId}
home.sessionSummaryNoPatient Sin ID de paciente No patient ID Keine Patienten-ID Sem ID de paciente
home.sessionSummaryCompleted {ICU plural — see es.json} {ICU plural — see en.json} {ICU plural — see de.json} {ICU plural — see pt-BR.json} ⚠️
home.howToStart.title Cómo empezar How to start Erste Schritte Como começar
home.howToStart.step1 Abra Captura de Marcadores y cargue la imagen del paciente. Open Marker Capture and upload the patient image. Öffnen Sie Markererfassung und laden Sie das Patientenbild hoch. Abra Captura de Marcadores e carregue a imagem do paciente.
home.howToStart.step2 Seleccione la vista correspondiente y ubique los puntos anatómicos requeridos. Select the corresponding view and place the required anatomical points. Wählen Sie die entsprechende Ansicht aus und setzen Sie die erforderlichen anatomischen Punkte. Selecione a vista correspondente e marque os pontos anatômicos necessários.
home.howToStart.step3 Ingrese a la vista de análisis, calibre la grilla y ejecute los cálculos. Enter the analysis view, calibrate the grid and run the calculations. Wechseln Sie zur Analyseansicht, kalibrieren Sie das Raster und führen Sie die Berechnungen aus. Entre na vista de análise, calibre a grade e execute os cálculos. ⚠️
home.howToStart.step4 Exporte los resultados como CSV o capture la pantalla para el informe. Export the results as CSV or take a screenshot for the report. Exportieren Sie die Ergebnisse als CSV oder erstellen Sie einen Screenshot für den Bericht. Exporte os resultados em CSV ou capture a tela para o relatório.
home.tutorialMarkerCapture Tutorial: Captura de Marcadores Tutorial: Marker Capture Tutorial: Markererfassung Tutorial: Captura de Marcadores
home.tutorialAnteriorAnalysis Tutorial: Análisis Anterior Tutorial: Anterior Analysis Tutorial: Vorderansicht-Analyse Tutorial: Análise Anterior ⚠️

patientIdPlaceholder — Spanish uses PAC-001, English/German use PAT-001, pt-BR keeps PAC-001. Confirm whether the placeholder format should be unified (e.g. PAC- everywhere) or localized.

2.6 analysisViews (12 strings, 4 nested groups)

key es en de pt-BR Status
analysisViews.anterior.title Vista Anterior Anterior View Vorderansicht Vista Anterior
analysisViews.anterior.detail Análisis en plano frontal Frontal plane analysis Analyse in der Frontalebene Análise no plano frontal
analysisViews.anterior.short Anterior Anterior Frontal Anterior ⚠️
analysisViews.posterior.title Vista Posterior Posterior View Rückansicht Vista Posterior ⚠️
analysisViews.posterior.detail Análisis en plano posterior Posterior plane analysis Analyse in der Rückenebene Análise no plano posterior ⚠️
analysisViews.posterior.short Posterior Posterior Dorsal Posterior ⚠️
analysisViews.lateralDerecha.title Perfil Derecho Right Profile Profil rechts Perfil Direito
analysisViews.lateralDerecha.detail Alineación sagital derecha Right sagittal alignment Sagittale Ausrichtung rechts Alinhamento sagital direito
analysisViews.lateralDerecha.short Lateral Der. Right lat. Lateral R. Lateral Dir. ⚠️
analysisViews.lateralIzquierda.title Perfil Izquierdo Left Profile Profil links Perfil Esquerdo
analysisViews.lateralIzquierda.detail Alineación sagital izquierda Left sagittal alignment Sagittale Ausrichtung links Alinhamento sagital esquerdo
analysisViews.lateralIzquierda.short Lateral Izq. Left lat. Lateral L. Lateral Esq. ⚠️

Concern: the German short values (Frontal, Dorsal) drift from the longer title values (Vorderansicht, Rückansicht). Decide whether the short tag should mirror the title's root (Vorder. / Rück.) or use the anatomical plane terms.

2.7 dashboard (13 strings)

key es en de pt-BR Status
dashboard.welcome Bienvenido/a, {email} Welcome, {email} Willkommen, {email} Bem-vindo/a, {email}
dashboard.welcomeRole {ICU select — Administrador/a / Profesional clínico / Modo lectura / Profesional} {ICU select — Administrator / Clinical practitioner / Read-only / Practitioner} {ICU select — Administrator/in / Klinische Fachperson / Nur-Lese-Modus / Fachperson} {ICU select — Administrador/a / Profissional clínico / Somente leitura / Profissional} ⚠️
dashboard.quickActionsHeading Acciones rápidas Quick actions Schnellaktionen Ações rápidas
dashboard.newCaptureTitle Iniciar captura de marcadores Start marker capture Markererfassung starten Iniciar captura de marcadores
dashboard.newCaptureDescription Cargar imagen, seleccionar vista y ubicar puntos anatómicos. Upload an image, choose a view, and place anatomical points. Bild hochladen, Ansicht auswählen und anatomische Punkte setzen. Carregar imagem, selecionar vista e marcar pontos anatômicos.
dashboard.openAnalysisTitle Abrir vista de análisis Open analysis view Analyseansicht öffnen Abrir vista de análise
dashboard.openAnalysisDescription Anterior · Posterior · Lateral derecho · Lateral izquierdo Anterior · Posterior · Right profile · Left profile Vorderansicht · Rückansicht · Rechtes Profil · Linkes Profil Anterior · Posterior · Perfil direito · Perfil esquerdo ⚠️
dashboard.recentActivityHeading Actividad reciente Recent activity Letzte Aktivität Atividade recente
dashboard.recentActivityEmpty Sin actividad reciente. Iniciá una captura para empezar. No recent activity. Start a capture to begin. Keine kürzliche Aktivität. Starten Sie eine Erfassung, um zu beginnen. Sem atividade recente. Inicie uma captura para começar. ⚠️
dashboard.recentSessionLabel Paciente: {patientId} Patient: {patientId} Patient: {patientId} Paciente: {patientId}
dashboard.recentSessionViewCount {ICU plural} {ICU plural} {ICU plural} {ICU plural}
dashboard.patientListHeading Lista de pacientes Patient list Patientenliste Lista de pacientes
dashboard.patientListComingSoon Próximamente. Por ahora, los datos viven en tu sesión del navegador hasta que se vincule un paciente a este dispositivo. Coming soon. For now, data lives in your browser session until a patient is bound to this device. Demnächst verfügbar. Vorerst bleiben die Daten in Ihrer Browser-Sitzung, bis ein Patient mit diesem Gerät verknüpft wird. Em breve. Por enquanto, os dados ficam na sessão do navegador até que um paciente seja vinculado a este dispositivo. ⚠️
dashboard.complianceFooter Solo uso de investigación. No es un dispositivo médico. Research use only. Not a medical device. Nur für Forschungszwecke. Kein Medizinprodukt. Uso apenas para pesquisa. Não é um dispositivo médico. ⚠️

dashboard.welcomeRole — German Klinische Fachperson is gender-neutral and matches the inclusive register of the Spanish "Profesional clínico". Confirm acceptable in DACH clinical settings.

dashboard.recentActivityEmpty — Spanish uses voseo ("Iniciá") which is es-AR. See Known Concerns §4.3.

2.8 auth (32 strings)

key es en de pt-BR Status
auth.loginTitle Iniciar sesión Sign in Anmelden Entrar
auth.loginSubtitle Accedé a tu cuenta clínica Access your clinical account Zugang zu Ihrem klinischen Konto Acesse sua conta clínica ⚠️
auth.emailLabel Correo electrónico Email E-Mail E-mail
auth.emailPlaceholder tu.email@clinica.com you@clinic.com sie@klinik.de voce@clinica.com ⚠️
auth.passwordLabel Contraseña Password Passwort Senha
auth.passwordPlaceholder •••••••••• •••••••••• •••••••••• ••••••••••
auth.loginButton Iniciar sesión Sign in Anmelden Entrar
auth.loggingIn Iniciando sesión… Signing in… Anmeldung… Entrando… ⚠️
auth.forgotPassword ¿Olvidaste tu contraseña? Forgot your password? Passwort vergessen? Esqueceu sua senha?
auth.logoutButton Cerrar sesión Sign out Abmelden Sair
auth.errorInvalid Correo o contraseña incorrectos Incorrect email or password E-Mail oder Passwort falsch E-mail ou senha incorretos
auth.errorRateLimit Demasiados intentos. Esperá unos minutos. Too many attempts. Wait a few minutes. Zu viele Versuche. Bitte einige Minuten warten. Muitas tentativas. Aguarde alguns minutos. ⚠️
auth.errorNetwork Error de red. Reintentá. Network error. Retry. Netzwerkfehler. Erneut versuchen. Erro de rede. Tente novamente. ⚠️
auth.errorGeneric No se pudo iniciar sesión. Reintentá. Could not sign in. Retry. Anmeldung fehlgeschlagen. Erneut versuchen. Não foi possível entrar. Tente novamente.
auth.researchOnlyDisclaimer Uso de investigación. No es un dispositivo médico. Research use only. Not a medical device. Nur für Forschungszwecke. Kein Medizinprodukt. Uso apenas para pesquisa. Não é um dispositivo médico. ⚠️
auth.forgotPasswordTitle Recuperar contraseña Reset password Passwort zurücksetzen Recuperar senha ⚠️
auth.forgotPasswordSubtitle Te enviaremos un enlace para restablecer tu contraseña. We'll email you a link to reset your password. Wir senden Ihnen einen Link zum Zurücksetzen Ihres Passworts. Vamos enviar um link para você redefinir sua senha.
auth.forgotPasswordSubmit Enviar enlace Send reset link Link senden Enviar link ⚠️
auth.forgotPasswordSubmitting Enviando… Sending… Wird gesendet… Enviando…
auth.forgotPasswordSuccess Si existe una cuenta con ese correo, recibirás un enlace para restablecer la contraseña. If an account with that email exists, you'll receive a password reset link. Wenn ein Konto mit dieser E-Mail existiert, erhalten Sie einen Link zum Zurücksetzen des Passworts. Se existir uma conta com esse e-mail, você receberá um link para redefinir a senha.
auth.forgotPasswordBackToLogin Volver a iniciar sesión Back to sign in Zurück zur Anmeldung Voltar para entrar ⚠️
auth.resetPasswordTitle Nueva contraseña New password Neues Passwort Nova senha
auth.resetPasswordSubtitle Elegí una contraseña nueva para tu cuenta. Choose a new password for your account. Wählen Sie ein neues Passwort für Ihr Konto. Escolha uma nova senha para sua conta. ⚠️
auth.resetPasswordNewLabel Contraseña nueva New password Neues Passwort Nova senha
auth.resetPasswordConfirmLabel Confirmar contraseña Confirm password Passwort bestätigen Confirmar senha
auth.resetPasswordSubmit Guardar contraseña Save password Passwort speichern Salvar senha
auth.resetPasswordSubmitting Guardando… Saving… Wird gespeichert… Salvando…
auth.resetPasswordSuccess Tu contraseña fue actualizada. Ya podés iniciar sesión. Your password has been updated. You can now sign in. Ihr Passwort wurde aktualisiert. Sie können sich jetzt anmelden. Sua senha foi atualizada. Agora você pode entrar. ⚠️
auth.resetPasswordInvalidLink Este enlace no es válido o ya expiró. This link is invalid or has expired. Dieser Link ist ungültig oder abgelaufen. Este link é inválido ou já expirou.
auth.resetPasswordInvalidLinkAction Solicitar un nuevo enlace Request a new link Neuen Link anfordern Solicitar um novo link
auth.resetPasswordErrorMismatch Las contraseñas no coinciden. Passwords do not match. Passwörter stimmen nicht überein. As senhas não coincidem.
auth.resetPasswordErrorTooShort La contraseña debe tener al menos 10 caracteres. Password must be at least 10 characters. Das Passwort muss mindestens 10 Zeichen lang sein. A senha deve ter pelo menos 10 caracteres.
auth.resetPasswordErrorTokenInvalid El enlace de recuperación no es válido o ya expiró. The recovery link is invalid or has expired. Der Wiederherstellungslink ist ungültig oder abgelaufen. O link de recuperação é inválido ou expirou.
auth.resetPasswordBackToLogin Ir a iniciar sesión Go to sign in Zur Anmeldung Ir para entrar ⚠️

auth.loggingIn — German Anmeldung… is a noun ("login…") not a gerund. Confirm whether Anmelden… (verb) would read better. Same shape as the source's gerund.

auth.emailPlaceholdervoce@clinica.com is missing diacritic (você). Confirm whether placeholders should keep ASCII for usability or use proper pt-BR diacritics.

2.9 imageDisplay (9 strings)

key es en de pt-BR Status
imageDisplay.loupe Lupa Loupe Lupe Lupa
imageDisplay.loupeTitle Lupa (mantener Shift o alternar) Loupe (hold Shift or toggle) Lupe (Shift halten oder umschalten) Lupa (segurar Shift ou alternar)
imageDisplay.zoomIn Acercar Zoom in Vergrößern Aproximar
imageDisplay.zoomOut Alejar Zoom out Verkleinern Afastar
imageDisplay.actualSize Tamaño real (1:1) Actual size (1:1) Originalgröße (1:1) Tamanho real (1:1)
imageDisplay.fit Encuadrar Fit to viewport An Ansicht anpassen Enquadrar ⚠️
imageDisplay.minimap Mini mapa de la imagen Image mini-map Bild-Übersicht Minimapa da imagem ⚠️
imageDisplay.estimatedByAi estimado por IA AI-estimated KI-geschätzt estimado por IA
imageDisplay.tempReferencePoint Punto de referencia temporal Temporary reference point Temporärer Referenzpunkt Ponto de referência temporário

imageDisplay.fit — English "Fit to viewport" is more descriptive than the Spanish "Encuadrar" / German "An Ansicht anpassen". Confirm consistency target (terse vs descriptive).

2.10 toast (top-level, 8 strings)

key es en de pt-BR Status
toast.newSessionTitle Nueva sesión iniciada New session started Neue Sitzung gestartet Nova sessão iniciada
toast.newSessionDescription Se borraron los datos del paciente y los resultados anteriores. Patient data and previous results have been cleared. Patientendaten und vorherige Ergebnisse wurden gelöscht. Os dados do paciente e os resultados anteriores foram apagados.
toast.csvGeneratedTitle Reporte CSV generado CSV report generated CSV-Bericht erstellt Relatório CSV gerado
toast.csvGeneratedDescription El archivo se descargó correctamente. The file was downloaded successfully. Die Datei wurde erfolgreich heruntergeladen. O arquivo foi baixado com sucesso.
toast.noResultsTitle Sin resultados No results Keine Ergebnisse Sem resultados
toast.noResultsDescription Complete al menos una vista de análisis antes de generar el reporte. Complete at least one analysis view before generating the report. Bitte schließen Sie mindestens eine Analyseansicht ab, bevor Sie den Bericht erstellen. Conclua pelo menos uma vista de análise antes de gerar o relatório.
toast.selectMarkerTitle Seleccione marcador Select marker Marker auswählen Selecione um marcador
toast.selectMarkerDescription Por favor, elija un marcador de una de las listas. Please choose a marker from one of the lists. Bitte wählen Sie einen Marker aus einer der Listen. Por favor, escolha um marcador em uma das listas.

2.11 markers (top-level — 20 strings, plus nested dialogs and 32-string markers.toast)

key es en de pt-BR Status
markers.srHeading Captura clínica de puntos anatómicos Clinical capture of anatomical landmarks Klinische Erfassung anatomischer Punkte Captura clínica de pontos anatômicos ⚠️
markers.homeButton PANTALLA PRINCIPAL HOME SCREEN STARTBILDSCHIRM TELA PRINCIPAL ⚠️
markers.openButton Abrir Open Öffnen Abrir
markers.fileInputAria Seleccionar imagen del paciente Select patient image Patientenbild auswählen Selecionar imagem do paciente
markers.useCameraButton Usar Cámara Use Camera Kamera verwenden Usar Câmera
markers.detectingButton Detectando... Detecting… Erkenne… Detectando… ⚠️
markers.idLabel ID ID ID ID
markers.heading Marcadores Markers Marker Marcadores
markers.selectMarkerPlaceholder Elegir Marcador Choose marker Marker auswählen Escolher Marcador
markers.selectButton Seleccionar Select Auswählen Selecionar
markers.autoDetectButton Auto-detectar Auto-detect Automatisch erkennen Detectar automaticamente ⚠️
markers.capturedHeading Capturados ({count}) Captured ({count}) Erfasst ({count}) Capturados ({count})
markers.emptyMessage No hay marcadores aún. No markers yet. Noch keine Marker. Ainda não há marcadores.
markers.estimatedByAiSuffix (IA) (AI) (KI) (IA)
markers.deleteRowButton Borrar Fila Delete Row Zeile löschen Apagar Linha
markers.saveButton Guardar Save Speichern Salvar
markers.openImagePrompt Abra una imagen para comenzar Open an image to begin Öffnen Sie ein Bild, um zu beginnen Abra uma imagem para começar
markers.imageFormatsHint JPG o PNG JPG or PNG JPG oder PNG JPG ou PNG
markers.cameraDialog.title Seleccionar Vista para Cámara Select View for Camera Ansicht für Kamera auswählen Selecionar Vista para Câmera
markers.cameraDialog.description Elija el tipo de vista antes de abrir la cámara. Esto permite la detección automática de marcadores. Choose the view type before opening the camera. This enables automatic marker detection. Wählen Sie den Ansichtstyp, bevor Sie die Kamera öffnen. Dies ermöglicht die automatische Markererkennung. Escolha o tipo de vista antes de abrir a câmera. Isso permite a detecção automática de marcadores.
markers.cameraDialog.cancel Cancelar Cancel Abbrechen Cancelar
markers.cameraDialog.confirm Abrir Cámara Open Camera Kamera öffnen Abrir Câmera
markers.viewDialog.title Seleccionar Tipo de Vista Select View Type Ansichtstyp auswählen Selecionar Tipo de Vista
markers.viewDialog.description Por favor, elija el tipo de vista para la imagen cargada. Esta selección es final para esta imagen. Please choose the view type for the loaded image. This selection is final for this image. Bitte wählen Sie den Ansichtstyp für das geladene Bild. Diese Auswahl ist für dieses Bild endgültig. Por favor, escolha o tipo de vista para a imagem carregada. Esta seleção é final para esta imagem.
markers.viewDialog.cancel Cancelar Cancel Abbrechen Cancelar
markers.viewDialog.confirm OK OK OK OK

markers.detectingButton — Spanish uses three dots ... (ASCII) while en/de/pt-BR use the ellipsis character . Trivial, but worth flagging for consistency.

markers.homeButton — German STARTBILDSCHIRM (15 chars) is significantly longer than the others. Visual QA needed if displayed in a fixed-width button.

2.12 markers.toast (32 strings — nested under markers)

key es en de pt-BR Status
markers.toast.sessionRestoredTitle Datos Cargados Data Loaded Daten geladen Dados Carregados
markers.toast.sessionRestoredDescription Se han cargado los datos de la sesión anterior. Previous session data has been restored. Daten aus der vorherigen Sitzung wurden geladen. Os dados da sessão anterior foram carregados.
markers.toast.imageErrorTitle Error de Imagen Image Error Bildfehler Erro de Imagem
markers.toast.imageErrorDescription No se pudo cargar la imagen. Intente con otra. Could not load the image. Try another one. Bild konnte nicht geladen werden. Versuchen Sie es mit einem anderen. Não foi possível carregar a imagem. Tente outra.
markers.toast.fileErrorTitle Error de Archivo File Error Dateifehler Erro de Arquivo
markers.toast.fileErrorDescription No se pudo leer el archivo. Could not read the file. Datei konnte nicht gelesen werden. Não foi possível ler o arquivo.
markers.toast.errorTitle Error Error Fehler Erro
markers.toast.selectMarkerListDescription Por favor, elija un marcador de una de las listas. Please choose a marker from one of the lists. Bitte wählen Sie einen Marker aus einer der Listen. Por favor, escolha um marcador em uma das listas.
markers.toast.noImageDescription Cargue una imagen primero. Upload an image first. Bitte zuerst ein Bild hochladen. Carregue uma imagem primeiro.
markers.toast.selectMarkerActiveTitle Seleccione Marcador Select Marker Marker auswählen Selecione um Marcador
markers.toast.selectMarkerActiveDescription Por favor, use el botón 'Seleccionar' para activar un marcador antes de hacer clic en la imagen. Please use the 'Select' button to activate a marker before clicking on the image. Bitte verwenden Sie die Schaltfläche „Auswählen“, um einen Marker zu aktivieren, bevor Sie auf das Bild klicken. Por favor, use o botão 'Selecionar' para ativar um marcador antes de clicar na imagem.
markers.toast.selectViewTitle Seleccione Vista Select View Ansicht auswählen Selecione a Vista
markers.toast.selectViewDescription Por favor, seleccione un tipo de vista para la imagen. Please select a view type for the image. Bitte wählen Sie einen Ansichtstyp für das Bild. Por favor, selecione um tipo de vista para a imagem.
markers.toast.selectViewFirstDescription Seleccione un tipo de vista primero. Select a view type first. Bitte zuerst einen Ansichtstyp auswählen. Selecione um tipo de vista primeiro.
markers.toast.noDataTitle Sin Datos No Data Keine Daten Sem Dados
markers.toast.noMarkersToDeleteDescription No hay marcadores para eliminar. There are no markers to delete. Es gibt keine Marker zum Löschen. Não há marcadores para apagar.
markers.toast.rowDeletedTitle Fila Eliminada Row Deleted Zeile gelöscht Linha Apagada
markers.toast.rowDeletedDescription La fila seleccionada ha sido eliminada. The selected row has been deleted. Die ausgewählte Zeile wurde gelöscht. A linha selecionada foi apagada.
markers.toast.lastRowDeletedTitle Última Fila Eliminada Last Row Deleted Letzte Zeile gelöscht Última Linha Apagada
markers.toast.lastRowDeletedDescription La última fila ha sido eliminada. The last row has been deleted. Die letzte Zeile wurde gelöscht. A última linha foi apagada.
markers.toast.nothingToSaveDescription No hay marcadores ni ID de paciente para guardar. There are no markers or patient ID to save. Es gibt keine Marker oder Patienten-ID zum Speichern. Não há marcadores nem ID de paciente para salvar.
markers.toast.validationErrorsTitle Errores de Validación Validation Errors Validierungsfehler Erros de Validação
markers.toast.validationErrorsDescription {ICU plural — corríjalo / corríjalos} {ICU plural — fix it / fix them} {ICU plural — beheben Sie ihn / sie} {ICU plural — corrija-o / corrija-os} ⚠️
markers.toast.exportedTitle Datos Exportados y Guardados Data Exported and Saved Daten exportiert und gespeichert Dados Exportados e Salvos
markers.toast.exportedDescription {ICU plural — archivo TXT / archivos TXT} {ICU plural — TXT file / TXT files} {ICU plural — TXT-Datei / TXT-Dateien} {ICU plural — arquivo TXT / arquivos TXT}
markers.toast.idSavedTitle ID Guardado en Sesión ID Saved to Session ID in Sitzung gespeichert ID Salvo na Sessão
markers.toast.idSavedDescription El ID del paciente {patientId} se ha guardado en la sesión. No hay marcadores para exportar. Patient ID {patientId} has been saved to the session. No markers to export. Patienten-ID {patientId} wurde in der Sitzung gespeichert. Keine Marker zum Exportieren. O ID do paciente {patientId} foi salvo na sessão. Não há marcadores para exportar.
markers.toast.sessionSavedTitle Guardado en Sesión Saved to Session In Sitzung gespeichert Salvo na Sessão
markers.toast.sessionSavedWithIdDescription Los datos para el paciente {patientId} se han guardado en esta sesión. No hay marcadores para exportar. Data for patient {patientId} has been saved to this session. No markers to export. Daten für Patient {patientId} wurden in dieser Sitzung gespeichert. Keine Marker zum Exportieren. Os dados do paciente {patientId} foram salvos nesta sessão. Não há marcadores para exportar.
markers.toast.sessionSavedDescription Los datos se han guardado en esta sesión. No hay marcadores ni ID para exportar. Data has been saved to this session. No markers or ID to export. Daten wurden in dieser Sitzung gespeichert. Keine Marker oder ID zum Exportieren. Os dados foram salvos nesta sessão. Não há marcadores nem ID para exportar.
markers.toast.photoCapturedAutoTitle Foto capturada automáticamente Photo captured automatically Foto automatisch aufgenommen Foto capturada automaticamente
markers.toast.photoCapturedTitle Foto capturada Photo captured Foto aufgenommen Foto capturada
markers.toast.noGreenMarkersDescription No se detectaron marcadores verdes en la imagen. No green markers were detected in the image. Im Bild wurden keine grünen Marker erkannt. Não foram detectados marcadores verdes na imagem. ⚠️
markers.toast.autoDetectStatsDescription {total} marcadores detectados de {expected} esperados. {total} markers detected out of {expected} expected. {total} von {expected} erwarteten Markern erkannt. {total} marcadores detectados de {expected} esperados.
markers.toast.markersDetectedTitle Marcadores Detectados Markers Detected Marker erkannt Marcadores Detectados
markers.toast.markersDetectedColorDescription {byMarker} marcadores detectados de {expected} esperados: {names} {byMarker} markers detected out of {expected} expected: {names} {byMarker} von {expected} erwarteten Markern erkannt: {names} {byMarker} marcadores detectados de {expected} esperados: {names}
markers.toast.markersDetectedMixedDescription {byMarker} por color + {byPose} estimados por IA = {total}/{expected} total. {names} {byMarker} by color + {byPose} estimated by AI = {total}/{expected} total. {names} {byMarker} per Farbe + {byPose} per KI geschätzt = {total}/{expected} insgesamt. {names} {byMarker} por cor + {byPose} estimados por IA = {total}/{expected} total. {names} ⚠️
markers.toast.markersDetectedColorShortDescription {byMarker} marcadores detectados de {expected} esperados. {byMarker} markers detected out of {expected} expected. {byMarker} von {expected} erwarteten Markern erkannt. {byMarker} marcadores detectados de {expected} esperados.
markers.toast.markersDetectedMixedShortDescription {byMarker} por color + {byPose} estimados por IA = {total}/{expected} total. {byMarker} by color + {byPose} estimated by AI = {total}/{expected} total. {byMarker} per Farbe + {byPose} per KI geschätzt = {total}/{expected} insgesamt. {byMarker} por cor + {byPose} estimados por IA = {total}/{expected} total.
markers.toast.detectionErrorTitle Error de Detección Detection Error Erkennungsfehler Erro de Detecção
markers.toast.detectionErrorDescription No se pudieron detectar los marcadores. Could not detect markers. Marker konnten nicht erkannt werden. Não foi possível detectar os marcadores.
markers.toast.noMarkersFoundTitle Sin Marcadores No Markers Keine Marker Sem Marcadores

2.13 Misc — localeSwitcher + errors (8 strings combined, each <5)

key es en de pt-BR Status
localeSwitcher.label Idioma Language Sprache Idioma
localeSwitcher.es Español Español Español Español
localeSwitcher.en English English English English
localeSwitcher.de Deutsch Deutsch Deutsch Deutsch
localeSwitcher.pt-BR Português (BR) Português (BR) Português (BR) Português (BR)
errors.loadImage No se pudo cargar la imagen Could not load the image Bild konnte nicht geladen werden Não foi possível carregar a imagem
errors.loadMarkers No se pudieron cargar los marcadores Could not load the markers Marker konnten nicht geladen werden Não foi possível carregar os marcadores
errors.analysisFailed Falló el análisis Analysis failed Analyse fehlgeschlagen A análise falhou

Locale labels are intentionally left in their native language (endonym convention) — confirm OK.


3. Known concerns

3.1 German compound nouns may overflow button widths

German agglutinates nouns: Markererfassung (15 chars), STARTBILDSCHIRM (15), CSV-Bericht erstellen (21), Patientenbild auswählen (24). The Spanish source averages 30–50% shorter. Specific risk areas:

  • markers.homeButton — Spanish 17 chars, German 15 chars (similar, but uppercase consumes more pixel width).
  • markers.detectingButton — German Erkenne… (8) — short, ok.
  • markers.autoDetectButton — German Automatisch erkennen (20) vs Spanish Auto-detectar (13).
  • home.generateReportCsv — German CSV-Bericht erstellen (21) vs Spanish Generar Reporte CSV (19) — fine.
  • dashboard.openAnalysisDescription — German Vorderansicht · Rückansicht · Rechtes Profil · Linkes Profil (60 chars) — likely fine since it's a description, but may wrap awkwardly in narrow cards.

Recommendation: visual QA in German with a 320px-wide viewport to catch wrap/overflow before launch.

3.2 Decimal separator handling — already addressed

The app uses Intl.NumberFormat from the standard react-intl / next-intl toolchain (per project convention). This means numeric values (counts, measurements, ratios) are automatically formatted with the locale-correct decimal separator:

  • es and pt-BR: comma (0,5)
  • de: comma (0,5)
  • en: period (0.5)

No manual review needed for number formatting. Reviewers can ignore decimal-separator concerns in this packet.

3.3 Spanish dialect — es-AR (Rioplatense / voseo) vs es-ES (peninsular)

The Spanish source uses voseo verb forms (es-AR, Rioplatense):

  • dashboard.recentActivityEmpty: "Iniciá una captura" (vs es-ES "Inicia una captura")
  • auth.loginSubtitle: "Accedé a tu cuenta" (vs es-ES "Accede a tu cuenta")
  • auth.errorRateLimit: "Esperá unos minutos" (vs es-ES "Espera unos minutos")
  • auth.errorNetwork: "Reintentá" (vs es-ES "Reinténtalo")
  • auth.forgotPassword: "¿Olvidaste tu contraseña?" (compatible with both)
  • auth.resetPasswordSubtitle: "Elegí una contraseña" (vs es-ES "Elige una contraseña")
  • auth.resetPasswordSuccess: "Ya podés iniciar sesión" (vs es-ES "Ya puedes iniciar sesión")

Decision needed: is the deployment target only Argentina / Rioplatense Spanish, or pan-Hispanic? If the latter, plan to add an es-419 (Latin American neutral) locale or normalize to tuteo. Not blocking for sign-off but should be acknowledged.

3.4 ICU plural / select syntax preserved across locales

All locales preserve the {count, plural, ...} and {role, select, ...} ICU MessageFormat syntax. This is automatic and the reviewer does not need to verify the syntax — only the wording inside each branch (one, other, admin, clinician, etc.).

3.5 Ellipsis character consistency

The source mixes ASCII ... (e.g. markers.detectingButton: "Detectando...") with the Unicode ellipsis (e.g. auth.loggingIn: "Iniciando sesión…"). The non-Spanish locales use consistently. Recommend normalizing the Spanish source to everywhere; trivial cosmetic fix, not blocking clinical sign-off.

3.6 Audience — clinician-facing, not patient-facing

EPPA is a clinician-facing tool, not patient-facing. No strings in the catalog are shown to patients. Disclaimers (researchOnlyDisclaimer, complianceFooter, common.researchUseOnly) are aimed at the clinician operator and at regulators/auditors. Patient-facing translation review is not required for this release.

3.7 Disclaimer wording — regulatory-adjacent

The "Research use only — Not a medical device" disclaimer appears in 3 places: - common.researchUseOnly - dashboard.complianceFooter - auth.researchOnlyDisclaimer

These three strings have slight wording drift (en-dash vs period; one variant lacks the leading "Solo"). Recommend the clinical reviewer dictate a single canonical phrasing per locale and the dev team applies it to all three keys.


4. Sign-off checklist

Reviewer: check each item once verified. Add corrections inline above the checklist.

  • [ ] Anatomical accuracy — all anatomical terms in the Glossary (G02–G17, G25) are clinically correct in each locale.
  • [ ] Clinical protocol vocabulary — terms specific to the EPPA protocol (marker capture, view types, calibration, sagittal alignment) are consistent with how the clinical team would describe them aloud.
  • [ ] UI imperative tone — instructional strings (button labels, step-by-step prompts) use the appropriate imperative register for each locale.
  • [ ] Button-label length — verified that translated button labels fit their containers (especially German). Run visual QA in 320px and 768px viewports.
  • [ ] Disclaimer wording — the "research use only / not a medical device" phrasing is acceptable in each locale and consistent across all 3 places it appears.
  • [ ] Patient-facing stringsNot applicable: app is clinician-facing only.
  • [ ] Glossary section — all 30 glossary rows reviewed (⚠️ replaced with ✅ or with corrected wording).
  • [ ] By-namespace tables — all flagged ⚠️ rows reviewed and resolved.
  • [ ] Spanish dialect decision (§3.3) — confirmed whether es is es-AR only or needs es-419 normalization.

Reviewer attestation

Field Value
Reviewer name _______
Role / affiliation _______
Locale(s) reviewed ☐ en ☐ de ☐ pt-BR
Date _______
Signature _______

End of packet. Once signed, return to the EPPA dev team (email TBD) for application of corrections and release tagging.