Files
open-safetylog-ehs/src/i18n/es.ts
T
jayjennings 61c876edec
CI / Lint, typecheck, test, build (push) Canceled after 0s
CI / End-to-end tests (push) Canceled after 0s
Add OSHA Form 301 and Osha page components
- Implemented Form301 component for displaying OSHA Form 301 equivalent, including employee and case information.
- Created Osha component to manage OSHA recordkeeping, including tabs for 300 Log, 300A Summary, Hours & rates, and Submit to OSHA.
- Added functionality for printing and downloading CSV files for OSHA submissions.
- Integrated loading and error handling states for data fetching.
2026-10-06 13:09:57 -07:00

169 lines
7.4 KiB
TypeScript

import type { Messages } from './en'
const plural = (n: number, one: string, many: string) => `${n} ${n === 1 ? one : many}`
export const es: Messages = {
language: { name: 'Español', switchTo: 'English' },
common: {
cancel: 'Cancelar',
optional: 'Opcional',
loading: 'Cargando…',
back: 'Volver',
},
nav: {
overview: 'Resumen',
incidents: 'Incidentes',
myActions: 'Mis acciones',
locations: 'Ubicaciones',
analytics: 'Análisis',
osha: 'Registro OSHA',
manage: 'Gestionar',
reportIncident: 'Reportar un incidente',
about: 'Acerca de',
settings: 'Configuración',
signOut: 'Cerrar sesión',
openMenu: 'Abrir menú',
closeMenu: 'Cerrar menú',
workspace: 'Espacio de trabajo',
searchIncidents: 'Buscar incidentes',
},
auth: {
signIn: 'Iniciar sesión',
email: 'Correo electrónico',
password: 'Contraseña',
resetTitle: 'Restablecer la contraseña',
linkCopy: 'Le enviaremos un enlace por correo para iniciar sesión.',
resetCopy: 'Le enviaremos un enlace por correo para elegir una nueva contraseña.',
sendLink: 'Enviarme un enlace de acceso',
sendReset: 'Enviarme un enlace para restablecer',
usePassword: 'Iniciar sesión con contraseña',
useLink: 'Prefiero recibir un enlace por correo',
forgot: '¿Olvidó su contraseña?',
sent: 'Si ese correo pertenece a una cuenta, el enlace ya está en camino. Caduca pronto, así que úselo enseguida.',
continueWithLink: 'Continúe para iniciar sesión con el enlace de su correo.',
backToSignIn: 'Volver a iniciar sesión',
choosePassword: 'Elija una contraseña',
choosePasswordCopy: 'Establezca una contraseña para su cuenta. Después iniciará sesión automáticamente.',
newPassword: 'Nueva contraseña',
confirmPassword: 'Confirme la contraseña',
atLeast10: 'Al menos 10 caracteres.',
mismatch: 'Las contraseñas no coinciden.',
savePassword: 'Guardar contraseña e iniciar sesión',
},
report: {
eyebrow: 'Nuevo reporte',
title: 'Reportar un incidente',
intro: 'Registre los hechos mientras están frescos. Los detalles de la investigación se pueden añadir después.',
whatHappened: '¿Qué pasó?',
whatHappenedCopy: 'Empiece con una descripción clara y objetiva.',
incidentTitle: 'Título del incidente',
titlePlaceholder: 'p. ej. Resbalón cerca del muelle de carga',
type: 'Tipo de incidente',
severity: 'Gravedad',
when: 'Cuándo',
description: '¿Qué pasó?',
descriptionPlaceholder: 'Describa lo que observó, sin suposiciones...',
where: '¿Dónde ocurrió?',
whereCopy: 'Indique el lugar exacto para que se puedan ver patrones.',
site: 'Planta',
area: 'Edificio o área',
notSpecified: 'Sin especificar',
exactLocation: 'Lugar exacto',
exactLocationPlaceholder: 'p. ej. Vestíbulo planta baja, Línea 3',
fromQr: 'Ubicación tomada del código QR.',
responseAndPhotos: 'Respuesta y fotos',
responseAndPhotosCopy: 'Lo que se hizo de inmediato y fotos del lugar.',
immediateResponse: 'Respuesta inmediata',
immediateResponsePlaceholder: 'p. ej. Área aislada, supervisor avisado...',
photos: 'Fotos',
addPhotos: 'Añadir fotos',
removePhoto: (name: string) => `Quitar ${name}`,
anonymous: 'Reportar de forma anónima.',
anonymousHelp: 'Su nombre no se guardará con este reporte y después no podrá encontrarlo en su lista.',
submit: 'Enviar reporte',
submitting: 'Enviando…',
noSites: 'Todavía no hay plantas configuradas. Un gerente de seguridad debe añadir una planta antes de poder reportar incidentes.',
addSite: 'Añadir una planta',
queuedTitle: 'Guardado en este dispositivo',
queuedCopy: 'No hay conexión, así que el reporte aún no se ha enviado. Se enviará automáticamente en cuanto haya conexión. Puede cerrar esta página.',
reportAnother: 'Reportar otra cosa',
photosFailed: (reference: string, details: string) => `El reporte ${reference} se guardó, pero algunas fotos no se subieron. ${details}`,
},
kiosk: {
heading: 'Reporte un problema de seguridad',
intro: 'Peligros, casi accidentes, lesiones: cualquier cosa que pueda lastimar a alguien. No necesita una cuenta.',
whatKind: '¿Qué tipo de problema?',
howSerious: '¿Qué tan grave podría ser?',
summary: 'En pocas palabras, ¿qué vio?',
summaryPlaceholder: 'p. ej. Aceite en el piso junto a la prensa 4',
details: '¿Algo más que debamos saber?',
yourName: 'Su nombre',
yourNameHelp: 'Déjelo en blanco para reportar de forma anónima.',
send: 'Enviar reporte',
sending: 'Enviando…',
thanksTitle: 'Gracias',
thanks: (reference: string) => `Su reporte ${reference} se envió al equipo de seguridad.`,
thanksQueued: 'Su reporte está guardado en este dispositivo y se enviará en cuanto haya conexión.',
resetIn: (seconds: number) => `Esta pantalla se reinicia en ${seconds} s.`,
invalidLink: 'Este enlace de reporte no funciona. Pida uno nuevo a su equipo de seguridad.',
},
actions: {
eyebrow: 'Acciones correctivas',
mine: 'Mis acciones',
all: 'Todas las acciones',
mineCopy: 'Acciones correctivas asignadas a usted. Márquelas como hechas cuando la solución esté en marcha.',
allCopy: 'Todas las acciones correctivas de la organización.',
filterOpen: 'Abiertas',
filterOverdue: 'Vencidas',
filterDone: 'Hechas',
filterAll: 'Todas',
assignedToMe: 'Asignadas a mí',
everyone: 'Todos',
nothingOpen: 'Nada pendiente. ¡Buen trabajo!',
none: 'No hay acciones aquí.',
due: (date: string) => `Vence ${date}`,
noDueDate: 'Sin fecha límite',
overdue: 'Vencida',
unassigned: 'Sin asignar',
statusOf: (title: string) => `Estado de ${title}`,
},
outbox: {
offline: 'Sin conexión. Los nuevos reportes se guardarán en este dispositivo y se enviarán al reconectarse.',
waiting: (n: number) => `${plural(n, 'reporte pendiente', 'reportes pendientes')} de enviar`,
sending: 'Enviando…',
retry: 'Enviar ahora',
otherUser: 'Guardado por otro usuario en este dispositivo',
failed: (error: string) => `No se pudo enviar: ${error}`,
discard: 'Descartar',
discardConfirm: '¿Descartar este reporte sin enviar? No se puede deshacer.',
signOutWarning: (n: number) => `${plural(n, 'reporte aún no se ha', 'reportes aún no se han')} enviado. Se enviarán la próxima vez que inicie sesión en este dispositivo. ¿Cerrar sesión de todos modos?`,
},
qr: {
caption: 'Escanee para reportar un peligro o casi accidente',
},
types: {
near_miss: 'Casi accidente',
hazard: 'Peligro',
injury: 'Lesión',
illness: 'Enfermedad',
property_damage: 'Daño a la propiedad',
environmental: 'Ambiental',
},
typeHints: {
near_miss: 'Algo casi salió mal',
hazard: 'Algo que podría lastimar a alguien',
injury: 'Alguien se lastimó',
illness: 'Alguien se enfermó por el trabajo',
property_damage: 'Equipo o edificio dañado',
environmental: 'Derrame, fuga o emisión',
},
severities: { low: 'Baja', medium: 'Media', high: 'Alta', critical: 'Crítica' },
severityHints: {
low: 'Menor, sin probabilidad de lesión',
medium: 'Podría causar una lesión menor',
high: 'Podría causar una lesión grave',
critical: 'Podría poner en riesgo la vida',
},
actionStatuses: { open: 'Abierta', in_progress: 'En curso', done: 'Hecha', verified: 'Verificada', cancelled: 'Cancelada' },
}