Files
temetro/frontend/lib/i18n/locales/en/translation.json
T
Khalid Abdi a07966ca4d frontend: light-mode logo via CSS invert + prescriptions search
- sidebar + auth logo now invert to black in light mode (dark unchanged),
  same trick the docs site uses — no second asset needed
- prescriptions page: search by patient, file number, medication,
  prescriber or status, with no-match / empty states

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-10 20:16:22 +03:00

912 lines
33 KiB
JSON

{
"common": {
"appName": "temetro",
"email": "Email",
"password": "Password",
"signIn": "Sign in",
"signUp": "Sign up",
"backToSignIn": "Back to sign in"
},
"auth": {
"login": {
"title": "Welcome back",
"subtitle": "Sign in to your clinician account",
"tabEmail": "Email",
"tabUsername": "Username",
"emailLabel": "Email",
"emailPlaceholder": "you@clinic.org",
"usernameLabel": "Username",
"usernamePlaceholder": "jdoe",
"passwordLabel": "Password",
"forgotPassword": "Forgot your password?",
"submit": "Sign in",
"submitting": "Signing in…",
"noAccount": "Don't have an account?",
"signUpLink": "Sign up",
"error": "Could not sign in. Check your email and password and try again.",
"errorTitle": "Sign in failed",
"welcomeBack": "Welcome back"
},
"signup": {
"title": "Create your account",
"subtitle": "Start using temetro in your clinic",
"nameLabel": "Full name",
"namePlaceholder": "Dr. Jane Okafor",
"emailLabel": "Email",
"emailPlaceholder": "you@clinic.org",
"passwordLabel": "Password",
"confirmPasswordLabel": "Confirm password",
"passwordHint": "Must be at least {{count}} characters long.",
"passwordTooShort": "Password must be at least {{count}} characters.",
"passwordMismatch": "Passwords do not match.",
"submit": "Create account",
"submitting": "Creating account…",
"haveAccount": "Already have an account?",
"signInLink": "Sign in",
"error": "Could not create your account.",
"errorTitle": "Sign up failed",
"created": "Account created",
"createdHint": "Set up your clinic to get started."
},
"verifyEmail": {
"title": "Check your inbox",
"subtitle": "We sent a verification link to {{email}}. Open it to activate your account.",
"subtitleNoEmail": "Open the verification link we emailed you to activate your account.",
"continue": "I've verified — continue",
"resend": "Resend email",
"resending": "Sending…",
"resent": "Verification email sent. Check your inbox.",
"resendError": "Could not resend the verification email."
},
"forgotPassword": {
"title": "Reset your password",
"subtitle": "We'll email you a link to reset your password",
"emailLabel": "Email",
"emailPlaceholder": "you@clinic.org",
"submit": "Send reset link",
"submitting": "Sending…",
"sent": "If an account exists for {{email}}, a reset link is on its way. Check your inbox.",
"error": "Could not send the reset email.",
"failedToastTitle": "Couldn't send reset link",
"sentToastTitle": "Reset link sent",
"sentToastBody": "Check your inbox for the link."
},
"resetPassword": {
"title": "Set a new password",
"subtitle": "Choose a new password for your account",
"passwordLabel": "New password",
"confirmLabel": "Confirm new password",
"passwordHint": "At least {{count}} characters.",
"submit": "Reset password",
"submitting": "Saving…",
"done": "Your password has been reset. Redirecting you to sign in…",
"invalidToken": "This reset link is invalid or has expired.",
"tooShort": "Password must be at least {{count}} characters.",
"mismatch": "Passwords do not match.",
"error": "Could not reset your password.",
"failedToastTitle": "Couldn't reset password",
"successToastTitle": "Password updated",
"successToastBody": "Redirecting you to sign in…"
},
"acceptInvite": {
"notFoundTitle": "Invitation not found",
"notFoundBody": "This invitation link is missing or invalid.",
"invitedTitle": "You've been invited",
"invitedSubtitle": "Sign in with the email this invitation was sent to, then return to this link to accept.",
"signIn": "Sign in",
"createAccount": "Create an account",
"reopenPrefix": "After signing in, reopen",
"reopenLink": "this invitation link",
"acceptTitle": "Accept your invitation",
"acceptSubtitle": "Join the clinic you were invited to on temetro.",
"accept": "Accept invitation",
"accepting": "Joining…",
"error": "This invitation is invalid or has expired."
},
"onboarding": {
"title": "Set up your clinic",
"subtitle": "Create your clinic to start organizing patient records"
}
},
"nav": {
"newChat": "New chat",
"patients": "Patients",
"appointments": "Appointments",
"prescriptions": "Prescriptions",
"analysis": "Analysis",
"notes": "Notes",
"messages": "Messages",
"tasks": "Tasks",
"activity": "Activity",
"settings": "Settings",
"notifications": "Notifications",
"notificationsEmpty": "You're all caught up.",
"quickNav": "Quick nav",
"commandGroup": "Go to",
"commandPlaceholder": "Search pages…",
"commandEmpty": "No results.",
"commandNavigate": "Navigate",
"commandOpen": "Open",
"commandClose": "Close"
},
"userMenu": {
"defaultName": "Clinician",
"selectClinic": "Select clinic",
"settings": "Settings",
"docs": "Docs & GitHub",
"theme": "Theme",
"dark": "Dark",
"light": "Light",
"search": "Search",
"noClinic": "No clinic selected",
"clinicCount_one": "{{count}} clinic",
"clinicCount_other": "{{count}} clinics",
"switchClinic": "Switch clinic",
"createClinic": "Create clinic",
"logout": "Log out",
"createDialogTitle": "Create clinic",
"createDialogDescription": "Add a new clinic and switch to it.",
"signOutFailed": "Sign out failed",
"tryAgain": "Please try again.",
"signedOut": "Signed out"
},
"clinic": {
"create": "Create clinic",
"creating": "Creating clinic…",
"nameLabel": "Clinic name",
"namePlaceholder": "North Side Family Practice",
"slugLabel": "Clinic URL slug",
"slugPlaceholder": "north-side-family-practice",
"slugHint": "Used in links and invitations. Lowercase letters, numbers and dashes.",
"createError": "Could not create the clinic.",
"createFailedTitle": "Couldn't create clinic",
"createdTitle": "Clinic created",
"createdBody": "{{name}} is ready."
},
"patients": {
"title": "Patients",
"searchPlaceholder": "Search name or MRN",
"add": "Add patient",
"loading": "Loading patients…",
"empty": "No patients found.",
"loadError": "Failed to load patients.",
"columns": {
"name": "Name",
"mrn": "MRN",
"ageSex": "Age · Sex",
"status": "Status",
"lastSeen": "Last seen",
"allergies": "Allergies"
},
"status": {
"active": "Active",
"inpatient": "Inpatient",
"discharged": "Discharged"
},
"detail": {
"notFound": "Patient not found",
"loading": "Loading patient…",
"noPatientForFile": "No patient found for file #{{number}}."
},
"transfer": {
"action": "Transfer",
"title": "Transfer patient",
"description": "Reassign {{name}} to another clinician. They become this patient's primary provider.",
"providerLabel": "New primary provider",
"choose": "Choose a provider…",
"cancel": "Cancel",
"confirm": "Transfer patient",
"transferring": "Transferring…",
"successTitle": "Patient transferred",
"successBody": "{{name}} is now with {{provider}}.",
"errorTitle": "Couldn't transfer patient",
"error": "Please try again."
}
},
"appointments": {
"title": "Appointments & Schedule",
"subtitle": "Today's clinic schedule and what's coming up.",
"searchPlaceholder": "Search patient, type, provider",
"calendar": "Calendar",
"add": "Add",
"noMatches": "No matching appointments.",
"today": "Today",
"nothingToday": "Nothing scheduled today.",
"addFailedTitle": "Couldn't add appointment",
"addFailedBody": "Please try again.",
"kpi": {
"today": "Today",
"thisWeek": "This week",
"checkedIn": "Checked in",
"completed": "Completed"
},
"status": {
"confirmed": "Confirmed",
"checked-in": "Checked in",
"completed": "Completed",
"cancelled": "Cancelled"
},
"dialog": {
"title": "New appointment",
"description": "Search for a patient by name or file number, then set the slot.",
"patient": "Patient",
"fileNumber": "File #{{number}}",
"change": "Change",
"searchPlaceholder": "Search name or file number",
"noPatients": "No patients found.",
"date": "Date",
"time": "Time",
"type": "Type",
"provider": "Provider",
"providerPlaceholder": "e.g. Dr. Okafor",
"cancel": "Cancel",
"submit": "Add appointment",
"pickPatientTitle": "Pick a patient",
"pickPatientBody": "Search and select a patient first.",
"addedTitle": "Appointment added"
},
"calendarDialog": {
"today": "Today",
"appointmentCount_one": "{{count}} appointment",
"appointmentCount_other": "{{count}} appointments",
"none": "No appointments on this day."
}
},
"prescriptions": {
"title": "Prescriptions",
"subtitle": "Medications prescribed across the clinic.",
"new": "New prescription",
"recent": "Recent prescriptions",
"recentDescription": "Most recent first",
"searchPlaceholder": "Search patient, medication, prescriber",
"noMatches": "No prescriptions match your search.",
"emptyList": "No prescriptions yet.",
"addFailedTitle": "Couldn't add prescription",
"addFailedBody": "Please try again.",
"kpi": {
"active": "Active",
"completed": "Completed",
"expired": "Expired"
},
"status": {
"active": "Active",
"completed": "Completed",
"expired": "Expired"
},
"detail": {
"fallbackTitle": "Prescription",
"fileNumber": "File #{{number}}",
"medication": "Medication",
"dose": "Dose",
"frequency": "Frequency",
"duration": "Duration",
"prescriber": "Prescriber",
"date": "Date",
"status": "Status",
"notes": "Notes"
},
"dialog": {
"title": "New prescription",
"description": "Search for a patient by name or file number, then set the medication.",
"patient": "Patient",
"fileNumber": "File #{{number}}",
"change": "Change",
"searchPlaceholder": "Search name or file number",
"noPatients": "No patients found.",
"medication": "Medication",
"medicationPlaceholder": "e.g. Amoxicillin",
"dose": "Dose",
"dosePlaceholder": "e.g. 500 mg",
"frequency": "Frequency",
"duration": "Duration",
"durationOtherPlaceholder": "e.g. 21 days",
"notes": "Notes",
"notesPlaceholder": "Instructions, e.g. take with food in the morning",
"interactionTitle": "Possible interaction",
"cancel": "Cancel",
"submit": "Add prescription",
"pickPatientTitle": "Pick a patient",
"pickPatientBody": "Search and select a patient first.",
"needMedTitle": "Add a medication",
"needMedBody": "Enter the medication name.",
"needDurationTitle": "Add a duration",
"needDurationBody": "Enter the custom duration.",
"addedTitle": "Prescription added"
}
},
"tasks": {
"title": "Tasks",
"subtitle": "Care-team to-dos. Click a task to see its details.",
"new": "New task",
"empty": "No tasks here.",
"markDone": "Mark as done",
"markNotDone": "Mark as not done",
"filters": {
"all": "All",
"open": "Open",
"done": "Done"
},
"priority": {
"high": "High",
"medium": "Medium",
"low": "Low"
},
"dialog": {
"title": "New task",
"description": "Assign a follow-up to the care team.",
"subject": "Subject",
"subjectPlaceholder": "e.g. Review lab results",
"details": "Details — what needs to be done",
"detailsPlaceholder": "Describe what needs to happen, any context, links…",
"assignee": "Assignee",
"assigneeSelf": "Myself",
"assigneeOther": "Other",
"department": "Department",
"due": "Due",
"duePlaceholder": "e.g. Today",
"priorityLabel": "Priority",
"cancel": "Cancel",
"add": "Add task"
},
"list": {
"forDept": "For {{dept}}",
"personal": "Personal",
"byCreator": "by {{name}}"
},
"detail": {
"fallbackTitle": "Task",
"priorityBadge": "{{priority}} priority",
"status": "Status",
"completed": "Completed",
"open": "Open",
"assignedTo": "Assigned to",
"createdBy": "Created by",
"deptTeam": "{{dept}} team",
"personal": "Personal task",
"due": "Due",
"patient": "Patient",
"details": "Details",
"reopen": "Reopen task",
"complete": "Mark complete"
},
"toast": {
"needSubjectTitle": "Add a subject",
"needSubjectBody": "Describe the task first.",
"addedTitle": "Task added",
"addFailedTitle": "Couldn't add task",
"addFailedBody": "Please try again.",
"updateFailedTitle": "Couldn't update task",
"updateFailedBody": "Please try again."
}
},
"messages": {
"inbox": "Inbox",
"unread": "Unread · {{count}}",
"newMessage": "New message",
"searchPlaceholder": "Search conversations",
"noMatches": "No conversations match your search.",
"noUnread": "No unread messages.",
"noConversations": "No conversations yet.",
"you": "You: ",
"directMessage": "Direct message",
"peopleCount": "{{count}} people",
"messagePlaceholder": "Message {{name}}…",
"send": "Send",
"emptyTitle": "No conversation selected",
"emptyDescription": "Choose a conversation from the inbox, or start a new one.",
"compose": {
"title": "New message",
"description": "Start a conversation with a member of your clinic.",
"searchPlaceholder": "Search people",
"noMatches": "No people match your search.",
"noMembers": "No other clinic members yet. Invite colleagues from Settings → Care team."
},
"startFailedTitle": "Couldn't start conversation",
"startFailedBody": "Please try again."
},
"analysis": {
"title": "Analysis",
"subtitle": "Clinic performance at a glance, computed from your clinic's data.",
"patientVolume": {
"title": "Patient volume",
"description": "New, active and total patients",
"total": "Total patients",
"newThisMonth": "New this month",
"active": "Active patients"
},
"appointments": {
"title": "Appointments & schedule",
"description": "Bookings, attendance and what's coming up",
"thisWeek": "This week",
"upcoming": "Upcoming",
"completed": "Completed",
"cancelled": "Cancelled"
},
"prescriptions": {
"title": "Prescriptions",
"description": "Medications prescribed",
"total": "Total issued",
"active": "Active"
},
"tasks": {
"title": "Tasks",
"description": "Care-team workload",
"open": "Open",
"completed": "Completed"
},
"charts": {
"title": "Trends",
"subtitle": "Tap a card for the full breakdown.",
"viewDetails": "Tap for details",
"patientGrowthTitle": "New patients",
"patientGrowthDescription": "New patients per month over the last 6 months",
"weeklyAppointmentsTitle": "Appointments this week",
"weeklyAppointmentsDescription": "Bookings per day for the current week",
"empty": "No data yet"
}
},
"activity": {
"title": "Activity",
"subtitle": "An audit log of record changes across the clinic.",
"changesToday": "Changes today",
"thisWeek": "This week",
"totalRecorded": "Total recorded",
"empty": "No activity yet. Changes to patients, notes, appointments, prescriptions and tasks will appear here.",
"detail": {
"title": "Activity detail",
"person": "Performed by",
"record": "Record type",
"patient": "Patient",
"reference": "Reference",
"time": "Time",
"close": "Close",
"entityTypes": {
"patient": "Patient",
"note": "Note",
"appointment": "Appointment",
"prescription": "Prescription",
"task": "Task"
}
}
},
"notes": {
"title": "Notes",
"subtitle": "Clinical notes. Click a note to open it.",
"new": "New note",
"editNote": "Edit note",
"loading": "Loading…",
"emptyTitle": "No notes yet",
"emptyDescription": "Create a note to start writing.",
"untitled": "Untitled note",
"updated": "Updated {{date}}",
"tryAgain": "Please try again.",
"loadFailed": "Couldn't load notes",
"saved": "Note saved",
"saveFailed": "Couldn't save note",
"deleted": "Note deleted",
"deleteFailed": "Couldn't delete note",
"editor": {
"placeholder": "Write your note…",
"titlePlaceholder": "Note title",
"delete": "Delete note",
"save": "Save",
"saving": "Saving…",
"bold": "Bold",
"italic": "Italic",
"underline": "Underline",
"heading1": "Heading 1",
"heading2": "Heading 2",
"bulletList": "Bullet list",
"numberedList": "Numbered list",
"undo": "Undo",
"redo": "Redo",
"confirmTitle": "Delete this note?",
"confirmDescription": "\"{{name}}\" will be permanently deleted. This can't be undone.",
"confirmLabel": "Delete note"
}
},
"chat": {
"heading": "Which patient would you like to look up?",
"input": {
"placeholder": "Look up a patient — try /patient 10293",
"message": "Message",
"addPatient": "Add patient",
"clinical": "Clinical",
"attachFile": "Attach file",
"attachFiles": "Attach files",
"removeFile": "Remove {{name}}",
"dictate": "Dictate",
"send": "Send",
"stop": "Stop",
"accessLevel": "Access level",
"responseMode": "Response mode",
"specialty": "Specialty",
"facility": "Facility",
"timeRange": "Time range",
"access": {
"standard": "Standard access",
"breakGlass": "Break-glass (emergency)",
"readOnly": "Read-only"
},
"response": {
"concise": "Concise",
"detailed": "Detailed",
"comprehensive": "Comprehensive"
},
"specialtyOptions": {
"internalMedicine": "Internal Medicine",
"cardiology": "Cardiology",
"pediatrics": "Pediatrics",
"emergency": "Emergency",
"all": "All specialties"
},
"facilityOptions": {
"mainHospital": "Main Hospital",
"northClinic": "North Clinic",
"telehealth": "Telehealth"
},
"timeOptions": {
"30d": "Last 30 days",
"12m": "Last 12 months",
"5y": "Last 5 years",
"all": "All time"
}
}
},
"patientCard": {
"notFound": "No patient found for file #{{number}}.",
"overview": "Overview",
"edit": "Edit",
"sex": { "F": "Female", "M": "Male" },
"summary": {
"fullName": "Full name",
"mrn": "MRN",
"age": "Age",
"sex": "Sex",
"primaryCare": "Primary care",
"status": "Status",
"lastSeen": "Last seen",
"allergies": "Allergies",
"activeMeds": "Active meds",
"openProblems": "Open problems",
"none": "None",
"editRecord": "Edit record"
},
"vitals": {
"title": "Vitals",
"taken": "Taken {{at}}",
"bp": "BP",
"hr": "HR",
"temp": "Temp",
"spo2": "SpO₂"
},
"labs": {
"title": "Labs",
"asOf": "As of {{at}}",
"empty": "No labs on file."
},
"medications": {
"title": "Medications",
"active": "{{count}} active",
"empty": "No active medications."
},
"problems": {
"title": "Problems",
"active": "{{count}} active",
"empty": "No active problems.",
"since": "since {{date}}"
},
"allergies": {
"title": "Allergies & alerts",
"sectionLabel": "Allergies",
"none": "No known allergies."
},
"visits": {
"title": "Recent visits",
"recent": "{{count}} recent",
"empty": "No visits yet."
},
"trend": {
"empty": "No trend data yet.",
"last": "{{label}} · last {{count}}",
"lastReadings": "{{label}} · last {{count}} readings",
"latest": "Latest",
"min": "Min",
"max": "Max"
},
"labFlag": {
"normal": "Normal",
"low": "Low",
"high": "High",
"critical": "Critical"
},
"severity": {
"mild": "Mild",
"moderate": "Moderate",
"severe": "Severe"
}
},
"patientForm": {
"editTitle": "Edit record",
"createTitle": "Add patient",
"editDescription": "Update {{name}}'s chart and add new data.",
"createDescription": "Create a new chart. A file number has been generated for you.",
"fileNumber": "File number",
"regenerate": "Regenerate file number",
"fullName": "Full name",
"fullNamePlaceholder": "e.g. Jordan Pierce",
"age": "Age",
"sex": "Sex",
"status": "Status",
"primaryCare": "Primary care",
"primaryCarePlaceholder": "e.g. Dr. Lena Ortiz",
"primaryCareUnassigned": "Unassigned",
"currentVitals": "Current vitals",
"bp": "Blood pressure",
"hr": "Heart rate",
"temp": "Temperature",
"spo2": "Oxygen saturation",
"allergies": "Allergies",
"medications": "Medications",
"problems": "Problems",
"labs": "Labs",
"visits": "Visits",
"add": "Add",
"removeRow": "Remove {{label}} row",
"pickDate": "Pick a date",
"substance": "Substance",
"reaction": "Reaction",
"severityAria": "Severity",
"medNameAria": "Medication name",
"medName": "Name",
"dose": "Dose",
"frequency": "Frequency",
"problemAria": "Problem",
"diagnosis": "Diagnosis",
"sinceAria": "Since",
"labNameAria": "Lab name",
"test": "Test",
"valueAria": "Value",
"value": "Value",
"flagAria": "Flag",
"visitTypeAria": "Visit type",
"visitType": "Type",
"visitDateAria": "Visit date",
"visitDate": "Date",
"providerAria": "Provider",
"provider": "Provider",
"summaryAria": "Summary",
"summary": "Summary",
"cancel": "Cancel",
"saving": "Saving…",
"saveChanges": "Save changes",
"savePatient": "Save patient",
"saveError": "Could not save the patient.",
"updatedTitle": "Record updated",
"updatedBody": "{{name}}'s chart was saved.",
"addedTitle": "Patient added",
"addedBody": "{{name}} ({{fileNumber}}).",
"saveFailedTitle": "Couldn't save patient"
},
"settings": {
"tabs": {
"profile": "Profile",
"records": "Records",
"signing": "Signing",
"careTeam": "Care team",
"developers": "Developers"
},
"empty": "Nothing here yet.",
"copy": "Copy",
"copied": "Copied",
"records": {
"description": "How patient records are sourced, stored, and displayed",
"comingSoon": "Coming soon",
"connected": "Connected",
"sourcesTitle": "Data sources",
"sourcesDescription": "Where the patient records shown in temetro come from",
"clinicDb": "Clinic database",
"clinicDbDesc": "Patient records are stored in your clinic's own database and scoped to this clinic.",
"patientStorage": "Patient-owned storage",
"patientStorageDesc": "Read and write records directly on the patient's device once the companion app ships.",
"importExportTitle": "Import & export",
"importExportDescription": "Move records in and out of temetro",
"export": "Export records",
"exportDesc": "Download every patient record in this clinic as a single archive.",
"import": "Import an existing database",
"importDesc": "Connect an existing patient database and browse it in the same card UI.",
"retentionTitle": "Retention",
"retentionDescription": "How long records are kept",
"retentionBody": "Records are kept for as long as your clinic exists. Deleting a patient permanently removes their chart from the clinic database, and the activity log keeps an audit trail of every change — who made it and when."
},
"developers": {
"description": "Access tokens for the temetro API",
"comingSoon": "Coming soon",
"apiTitle": "API access",
"apiDescription": "Build on the same REST API the temetro app uses",
"baseUrlLabel": "API base URL",
"baseUrlDescription": "All endpoints live under this origin (e.g. /api/patients)",
"authLabel": "Authentication",
"authDescription": "Requests authenticate with your temetro session cookie. Scoped personal access tokens for server-to-server use are planned.",
"tokensTitle": "Personal access tokens",
"tokensDescription": "Long-lived tokens for scripts and integrations",
"noTokens": "No tokens yet.",
"generateToken": "Generate token",
"resourcesTitle": "Resources",
"resourcesDescription": "Where to learn more",
"resourcesBody": "The API reference — covering patients, appointments, prescriptions, tasks, messaging, activity and analytics — lives in the project documentation under docs/api. temetro is open source, so the route handlers in backend/src/routes are the authoritative spec."
},
"profile": {
"sectionTitle": "Clinician profile",
"clinicianIdLabel": "Clinician ID",
"clinicianIdDescription": "Your unique clinician identifier, used when signing records",
"handleLabel": "Handle",
"handleDescription": "Used in your public profile and the patient portal",
"avatar": "Avatar",
"displayName": "Display name",
"specialty": "Specialty",
"selectSpecialty": "Select specialty",
"clinic": "Clinic / practice",
"clinicPlaceholder": "e.g. Main Hospital",
"contactEmail": "Contact email",
"contactEmailPlaceholder": "clinician@example.org",
"professionalLinks": "Professional links",
"professionalLinksHint": "Registry or institutional profiles used to verify your identity. They are never shown to patients.",
"addLink": "Add link",
"patientNotifications": "Patient notifications",
"patientNotificationsDescription": "Emails sent to patients about their records, results, and pending approvals",
"accountNotifications": "Account notifications",
"accountNotificationsDescription": "Notifications sent to you about your patients and the care team",
"features": "Features",
"featuresDescription": "Manage alpha & beta features for your account",
"dangerZone": "Danger Zone",
"dangerZoneDescription": "Irreversible actions for your account",
"deleteAccount": "Delete account",
"deleteAccountDescription": "Permanently delete your temetro account and any locally stored signing keys. This action cannot be undone.",
"delete": "Delete",
"unsavedChanges": "You have unsaved changes",
"saveChanges": "Save changes",
"saving": "Saving…",
"savedTitle": "Settings saved",
"savedBody": "Your preferences are up to date.",
"saveFailedTitle": "Couldn't save settings",
"saveFailedBody": "Please try again.",
"deleteDialog": {
"title": "Delete your account?",
"description": "This permanently deletes your account, removes you from your clinics, and cannot be undone.",
"passwordLabel": "Confirm your password",
"passwordPlaceholder": "Your password",
"cancel": "Cancel",
"confirm": "Delete account",
"deleting": "Deleting…",
"failed": "Couldn't delete the account. Check your password and try again."
},
"notif": {
"newLab": "New lab result",
"newLabDesc": "Sent when a new lab result is available on a patient's chart",
"recordUpdated": "Record updated",
"recordUpdatedDesc": "Sent when a patient's record is updated by a member of the care team",
"approvalRequested": "Approval requested",
"approvalRequestedDesc": "Sent when a signed change is awaiting the patient's approval",
"changeApproved": "Change approved",
"changeApprovedDesc": "Sent when a patient approves a pending change to their record",
"newMessage": "New message",
"newMessageDesc": "Sent when a patient or another clinician sends a message",
"visitScheduled": "Visit scheduled",
"visitScheduledDesc": "Sent when an upcoming visit is added to a patient's record",
"pendingApprovals": "Pending approvals",
"pendingApprovalsDesc": "Notify me when a patient approves or rejects a pending change",
"recordsShared": "Records shared with me",
"recordsSharedDesc": "Notify me when a patient shares a record with me",
"patientStorage": "Patient-owned storage (beta)",
"patientStorageDesc": "Write records to the patient's own device instead of your database",
"requireSigned": "Require signed records",
"requireSignedDesc": "Require a signature on every change you make to a patient record"
}
},
"careTeam": {
"title": "Care team",
"description": "Staff with access to this clinic",
"loadError": "Could not load the care team.",
"loading": "Loading care team…",
"you": "(you)",
"clickHint": "Tip: click a team member to see their permissions and manage their role.",
"addMember": "Add team member",
"removeMember": "Remove member",
"employee": {
"title": "Team member",
"description": "View this member's access, change their role, or remove them.",
"permissions": "Permissions",
"noAccess": "No access",
"changeRole": "Change role",
"save": "Save",
"saving": "Saving…",
"remove": "Remove employee",
"close": "Close",
"roleUpdatedTitle": "Role updated",
"roleUpdatedBody": "{{name}} is now {{role}}.",
"roleFailedTitle": "Couldn't update role",
"roleFailedBody": "Please try again.",
"resources": {
"patient": "Patients",
"appointment": "Appointments",
"prescription": "Prescriptions",
"task": "Tasks"
},
"actions": {
"read": "View",
"write": "Edit",
"delete": "Delete"
}
},
"remove": {
"title": "Remove team member?",
"description": "{{name}} will lose access to this clinic. This can't be undone.",
"thisMember": "This member",
"cancel": "Cancel",
"confirm": "Remove",
"removing": "Removing…",
"removedTitle": "Member removed",
"removedBody": "{{name}} no longer has access.",
"failedTitle": "Couldn't remove member",
"failedBody": "Please try again."
},
"add": {
"title": "Add team member",
"step1Description": "Who are you adding, and what can they do?",
"step2Description": "Set the username and password they'll sign in with.",
"nameLabel": "Full name",
"namePlaceholder": "Jane Okafor",
"nameRequired": "Enter the person's name.",
"roleLabel": "Role",
"usernameLabel": "Username",
"usernamePlaceholder": "jokafor",
"usernameHint": "Letters, numbers, dots and underscores — no spaces.",
"usernameTooShort": "Username must be at least {{count}} characters.",
"usernameInvalid": "Username can't contain spaces. Use letters, numbers, dots or underscores.",
"passwordLabel": "Password",
"passwordHint": "Must be at least {{count}} characters long.",
"passwordTooShort": "Password must be at least {{count}} characters.",
"back": "Back",
"cancel": "Cancel",
"next": "Next",
"create": "Create account",
"creating": "Creating…",
"createdTitle": "Account created",
"createdBody": "{{name}} can now sign in with the username {{username}}.",
"error": "Could not create the account.",
"errorTitle": "Could not add member"
}
},
"signing": {
"keyTitle": "Signing key",
"active": "Active",
"keyDescription": "Every change you make to a patient record is signed with this key, so patients can verify it came from you before approving it.",
"rotateKey": "Rotate key",
"createdAt": "Created May 28, 2026",
"identityTitle": "Signing identity",
"identityDescription": "The public key patients use to verify your signatures",
"fingerprintLabel": "Public key fingerprint",
"fingerprintDescription": "Share or publish this fingerprint so patients can trust your changes",
"signedRecordsTitle": "Signed records",
"signedRecordsDescription": "Changes you've signed that are waiting on the patient's approval",
"noPending": "No pending signatures",
"comingSoon": "Coming soon",
"howItWorksTitle": "How signing works",
"howItWorksDescription": "The flow behind patient-approved records",
"steps": {
"sign": "You sign every change",
"signDesc": "Each edit you make to a patient record is signed with your private key before it's written.",
"approve": "The patient approves it",
"approveDesc": "Signed changes stay pending until the patient accepts them in the companion app.",
"verify": "Anyone can verify",
"verifyDesc": "Your public key fingerprint lets patients and other clinics verify a change really came from you."
},
"backupTitle": "Backup key",
"backupDescription": "Recover your signing identity if you lose this device",
"backupLabel": "Recovery phrase",
"backupDesc": "Export an encrypted backup of your signing key to restore it on a new device."
}
}
}