Files
dyolink/frontend/messages/en.json
Admin 3f2b332bd3 Add Today action lists and clickable KPI links (Phase 3).
Show upcoming appointments for the rest of today and link each KPI card to its relevant dashboard tab.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-11 00:48:35 +03:30

775 lines
35 KiB
JSON

{
"common": {
"appName": "DyoLink",
"loading": "Loading...",
"loadingApp": "Loading app...",
"loadingWorkspace": "Loading workspace...",
"continue": "Continue",
"back": "Back",
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"edit": "Edit",
"next": "Next",
"dismiss": "Dismiss",
"or": "Or",
"and": "and",
"close": "Close",
"redirecting": "Redirecting…",
"readOnlyAccess": "Read-only access for this organization.",
"errorGeneric": "Something went wrong",
"loadingEllipsis": "Loading...",
"search": "Search",
"action": "Action",
"status": "Status",
"name": "Name",
"email": "Email",
"date": "Date",
"organization": "Organization",
"backToApp": "← Back to app",
"copied": "Copied",
"copyLink": "Copy link",
"none": "None",
"preview": "Preview"
},
"language": {
"label": "Language",
"selectLanguage": "Select language",
"en": "English",
"fa": "Persian",
"nl": "Dutch"
},
"theme": {
"switchToLight": "Switch to light mode",
"switchToDark": "Switch to dark mode",
"lightMode": "Light mode",
"darkMode": "Dark mode"
},
"nav": {
"dashboard": "Dashboard",
"staff": "Staff",
"patients": "Patients",
"appointment": "Appointment",
"treatment": "Treatment",
"cases": "Cases",
"tasks": "Tasks",
"billing": "Billing",
"reports": "Reports",
"clinics": "Clinics",
"labs": "Labs"
},
"auth": {
"login": "Login",
"signIn": "Sign in",
"signOut": "Log out",
"register": "Register",
"startTrial": "Start Trial",
"startFreeTrial": "Start Free Trial",
"dashboard": "Dashboard",
"signInTitle": "Sign in to your account",
"signInPrompt": "Or {link}",
"startTrialLink": "start your free trial",
"registerTitle": "Start your 30-day free trial",
"registerPrompt": "Already have an account?",
"signInLink": "Sign in",
"email": "Email address",
"password": "Password",
"confirmPassword": "Confirm password",
"fullName": "Full name",
"rememberMe": "Remember me",
"showPassword": "Show password",
"hidePassword": "Hide password",
"forgotPassword": "Forgot your password?",
"invalidCredentials": "Invalid email or password",
"loginFailed": "Login failed",
"registrationFailed": "Registration failed. Please try again.",
"startMyFreeTrial": "Start my free trial",
"trialIncludes": "Your trial includes:",
"trialTeamMembers": "Up to 5 team members",
"trialFullAccess": "Full access to all features",
"trialNoCard": "30 days free, no credit card required",
"termsAgreement": "By signing up, you agree to our {terms} and {privacy}",
"termsOfService": "Terms of Service",
"privacyPolicy": "Privacy Policy",
"signedIn": "Signed in",
"switchOrganization": "Switch organization",
"subscriptions": "Subscriptions",
"account": "Account",
"emailPlaceholder": "you@example.com",
"passwordPlaceholder": "••••••••",
"namePlaceholder": "John Doe",
"termsIntro": "By signing up, you agree to our",
"errorRegistrationFailed": "Registration failed",
"errorLoginFailed": "Login failed",
"errorCreateOrganization": "Failed to create organization",
"acceptInviteTitle": "Accept invitation",
"loadingInvitation": "Loading invitation...",
"invalidInvitationLink": "Invalid invitation link",
"invitationAlreadyAccepted": "This invitation is already accepted. You can log in now.",
"errorLoadInvitation": "Could not load invitation",
"organizationLabel": "Organization:",
"emailLabel": "Email:",
"nameRequired": "Name is required",
"passwordMinLength8": "Password must be at least 8 characters",
"passwordsDoNotMatch": "Passwords do not match",
"labelName": "Name",
"labelCreatePassword": "Create password",
"labelConfirmPassword": "Confirm password",
"activateAccount": "Activate account",
"invitationAcceptedRedirect": "Invitation Accepted. Redirecting to login...",
"errorAcceptInvitation": "Could not accept invitation",
"alreadyHaveAccess": "Already have access?",
"goToLogin": "Go to login",
"acceptOrganizationTitle": "Accept organization invitation",
"alreadyHaveAccount": "Already have an account?",
"invitedBy": "Invited by:",
"ownerEmail": "Owner email",
"activateOrganization": "Activate organization",
"organizationAcceptedRedirect": "Invitation accepted. Redirecting to login...",
"stepAccount": "Account",
"stepOrganization": "Organization",
"organizationName": "Organization name",
"organizationNamePlaceholder": "Sunshine Dental Clinic",
"organizationEmail": "Organization email",
"organizationEmailPlaceholder": "contact@sunshineclinic.com",
"organizationType": "Organization type",
"dentalClinic": "Dental Clinic",
"dentalLab": "Dental Lab",
"mobile": "Mobile number",
"mobilePlaceholder": "0912 345 6789",
"forgotPasswordTitle": "Reset your password",
"forgotPasswordSubtitle": "Enter the mobile number on your account. We will send a verification code.",
"codeSentHint": "Enter the verification code we sent to your mobile.",
"sendCode": "Send verification code",
"verificationCode": "Verification code",
"verificationCodePlaceholder": "12345",
"verifyAndContinue": "Verify and continue",
"backToSignIn": "Back to sign in",
"codeSendFailed": "Could not send verification code. Please try again.",
"verifyFailed": "Invalid or expired verification code."
},
"landing": {
"heroTitle": "Connect Dental Clinics & Labs",
"heroHighlight": "Seamlessly",
"heroSubtitle": "Streamline communication between dental professionals. Start with a 30-day free trial, no credit card required.",
"featureClinicsTitle": "For Clinics",
"featureClinicsDescription": "Manage patients, appointments, and send cases to labs instantly.",
"featureLabsTitle": "For Labs",
"featureLabsDescription": "Receive cases, track progress, and communicate with clinics.",
"featureTeamTitle": "Team Management",
"featureTeamDescription": "Add up to 5 team members during trial. Scale as you grow.",
"featureTrialTitle": "30-Day Trial",
"featureTrialDescription": "Full access to all features. No credit card required.",
"featureRealtimeTitle": "Real-time Updates",
"featureRealtimeDescription": "Get instant notifications on case status changes.",
"featureSecurityTitle": "Secure & Compliant",
"featureSecurityDescription": "HIPAA-compliant with enterprise-grade security.",
"footerCopyright": "© 2026 DyoLink. All rights reserved.",
"termsAndConditions": "Terms & Conditions"
},
"accountMenu": {
"noActiveSubscription": "No active subscription — review Subscriptions",
"trialEnded": "Trial ended — review Subscriptions",
"trialEndingSoon": "Trial ending soon — review Subscriptions",
"seatsLow": "Seats running low — review Subscriptions",
"reviewSubscriptions": "Review Subscriptions"
},
"validation": {
"emailInvalid": "Please enter a valid email address",
"passwordRequired": "Password is required",
"nameMinLength": "Name must be at least 2 characters",
"passwordMinLength": "Password must be at least 8 characters",
"passwordUppercase": "Password must contain at least one uppercase letter",
"passwordNumber": "Password must contain at least one number",
"organizationNameMinLength": "Organization name must be at least 2 characters",
"organizationEmailInvalid": "Please enter a valid organization email",
"organizationTypeRequired": "Please select organization type",
"passwordsDoNotMatch": "Passwords don't match",
"mobileRequired": "Mobile number is required",
"mobileInvalid": "Please enter a valid Iranian mobile number",
"codeRequired": "Verification code is required"
},
"today": {
"welcomeBack": "Welcome back!!",
"noSubscriptionNotice": "This organization does not have an active subscription yet.",
"choosePlanLink": "Choose a plan",
"noSubscriptionCta": "to start the purchase process.",
"noWidgets": "No dashboard metrics are available for your current permissions.",
"loadError": "Could not load dashboard metrics.",
"seatsUnlimited": "Unlimited plan",
"widgetAppointmentsToday": "Today's Appointments",
"widgetPatientsToday": "Patients Today",
"widgetTreatmentsToday": "Treatments Today",
"widgetDraftTreatments": "Draft Treatments",
"widgetLabCasesPendingSend": "Lab Cases Pending Send",
"widgetCasesReceivedToday": "Cases Received Today",
"widgetTasksInProgress": "Tasks In Progress",
"widgetImportantTasks": "Important Tasks",
"widgetPendingConnections": "Pending Connections",
"widgetSeats": "Seat Usage",
"widgetPendingStaffInvites": "Pending Staff Invites",
"chartTreatmentMixTitle": "Treatment Mix",
"chartTreatmentMixSubtitle": "Last 7 days",
"chartTasksByStepTitle": "Tasks by Workflow Step",
"chartTasksByStepSubtitle": "In progress now",
"chartEmpty": "No data for this period yet.",
"upcomingAppointmentsTitle": "Upcoming Today",
"upcomingAppointmentsSubtitle": "Appointments not yet finished",
"viewAllAppointments": "View schedule",
"noUpcomingAppointments": "No upcoming appointments for the rest of today."
},
"staff": {
"redirecting": "Redirecting…",
"title": "Staff Management",
"subtitle": "Invite teammates, set tab access, and stay within your plan seat limit.",
"inviteMember": "Invite member",
"seatsLabel": "Seats:",
"unlimitedPlan": "(unlimited plan)",
"seatLimitReached": "Plan seat limit reached for this organization.",
"noActivePlan": "No active plan selected for this organization. Choose a subscription plan to invite members.",
"invitedPending": "Invitation is pending until they open the link, set a password, and log in.",
"invitedAccepted": "Invitation was accepted immediately.",
"inviteLinkHeading": "Invite link",
"shareLinkHint": "Share this link manually via SMS or email. A new link is generated if the previous one expired or was lost.",
"loadingTeam": "Loading team…",
"tableName": "Name",
"tableEmail": "Email",
"tableRole": "Role",
"tableStatus": "Status",
"tableAccess": "Access",
"tableAction": "Action",
"roleOwner": "Owner",
"roleStaff": "Staff",
"statusActive": "Active",
"statusPending": "Pending",
"statusDisabled": "Disabled",
"statusExpired": "Expired",
"allFeatures": "All features",
"inviteModalTitle": "Invite team member",
"stepOf": "Step {step} of 2",
"permissionView": "View",
"permissionEdit": "Edit",
"labelEmail": "Email",
"labelDisplayName": "Display name",
"tabAccess": "Tab access",
"sendInvite": "Send invite",
"skipForNow": "Skip for now",
"enableModalTitle": "Enable team member",
"enableConfirm": "Enable {name} ({email})?",
"enableBullet1": "They can sign in to this organization again with their existing account.",
"enableBullet2": "No new invitation is sent and no data was removed while they were disabled.",
"enableBullet3": "Enabling uses one seat on your plan.",
"noSeatsAvailable": "No seats are available. Disable another member or upgrade your plan before enabling this person.",
"enableMemberButton": "Enable member",
"disableModalTitle": "Disable team member",
"disableConfirm": "Disable {name} ({email})?",
"disableBullet1": "They will not be able to sign in to this organization.",
"disableBullet2": "No data will be removed.",
"disableBullet3": "Disabling frees one seat on your plan so you can invite someone else.",
"disableMemberButton": "Disable member",
"editModalTitle": "Edit member",
"loadingWorkingHours": "Loading working hours…",
"errorLoadStaff": "Failed to load staff.",
"errorCopyInvite": "Could not copy invitation link.",
"errorSendInvite": "Failed to send invitation.",
"errorLoadWorkingHours": "Failed to load working hours.",
"successMemberUpdated": "Member updated.",
"errorUpdateMember": "Failed to update member.",
"errorDeleteNotImplemented": "Delete is not implemented yet.",
"successMemberDisabled": "{name} was disabled. A seat is now available.",
"errorDisableMember": "Failed to disable member.",
"successMemberEnabled": "{name} was enabled and can sign in again.",
"errorEnableMember": "Failed to enable member.",
"successInvited": "{name} ({email}) was invited.",
"copyInviteLink": "Copy invitation link",
"copyInviteLinkTitle": "Copy invitation link (generates a new link if needed)",
"enableMemberAria": "Enable member",
"enableMemberTitle": "Enable member (uses a seat)",
"disableMemberAria": "Disable member",
"disableMemberTitle": "Disable member (frees a seat)",
"editMemberAria": "Edit member",
"deleteMemberAria": "Delete member",
"deleteMemberTitle": "Delete member (not implemented)",
"features": {
"featureToday": "Today",
"featureStaff": "Staff",
"featureOrganizations": "Organizations",
"featureClinics": "Clinics",
"featureLabs": "Labs",
"featurePatients": "Patients",
"featureAppointment": "Appointment",
"featureTreatment": "Treatment",
"featureCases": "Cases",
"featureTasks": "Tasks",
"featureBilling": "Billing",
"featureReports": "Reports",
"noTabAccess": "No tab access",
"readOnlySuffix": "(Read only)"
},
"workingHours": {
"recommendedTitle": "Working hours recommended",
"recommendedBody": "Staff with treatment edit access appear as provider columns in Appointments. Set their weekly hours so the schedule grid shows the right bookable times.",
"intro": "Set weekly working hours for this provider. The appointments grid uses these hours to show bookable time slots.",
"workingDay": "Working day",
"start": "Start",
"end": "End",
"removeShift": "Remove shift",
"addShift": "Add shift",
"autoRepeatWeekly": "Repeat these hours at the start of each week (copy forward on Monday)",
"weekdayMon": "Mon",
"weekdayTue": "Tue",
"weekdayWed": "Wed",
"weekdayThu": "Thu",
"weekdayFri": "Fri",
"weekdaySat": "Sat",
"weekdaySun": "Sun",
"validationNeedsShift": "{day} needs at least one shift or should be marked off.",
"validationEndAfterStart": "{day} shift end time must be after start time.",
"validationOverlap": "{day} shifts cannot overlap."
}
},
"patients": {
"title": "Patients",
"newPatient": "New Patient",
"errorLoadPatients": "Failed to load patients.",
"successPatientSaved": "Patient {firstName} {lastName} was saved successfully.",
"errorSavePatient": "Failed to save patient.",
"firstName": "First name",
"lastName": "Last name",
"mobile": "Mobile",
"mobilePlaceholder": "09121234567",
"mobileLabel": "Mobile:",
"patientAlreadyExists": "A patient with this mobile already exists: {firstName} {lastName}. They were selected for you.",
"savePatient": "Save Patient",
"dialogTitle": "New patient",
"searchPlaceholder": "Search patients by name, mobile, email",
"loadingPatients": "Loading patients...",
"noResults": "No patients found for this search.",
"noContact": "No contact",
"selectPatient": "Select a patient to view details.",
"emailLabel": "Email:",
"statusLabel": "Status:",
"statusActive": "Active",
"statusInactive": "Inactive",
"emptyValue": "-"
},
"cases": {
"title": "Cases",
"subtitle": "Lab cases sent from linked clinics. Track progress and flag important tasks.",
"searchPlaceholder": "Search by patient name or mobile…",
"emptyList": "No cases received yet.",
"selectCaseHint": "Select a case from the list to view tasks.",
"fromClinic": "From {name}",
"sentAt": "Sent {date}",
"taskProgressLabel": "Tasks: {completed} of {total} completed",
"taskProgressShort": "{progress} tasks",
"treatmentDetails": "Treatment details",
"teethLabel": "Teeth",
"tasksByTooth": "Tasks",
"toothGroupTitle": "Teeth {teeth} · {prosthesis}",
"noTasks": "No tasks were generated for this case.",
"statusInProgress": "In progress",
"statusCompleted": "Completed",
"importantLabel": "Important",
"markCaseImportant": "Mark case as important",
"markImportant": "Mark as important",
"lastUpdatedBy": "Updated by {name}",
"lastUpdatedUnknown": "Not started yet",
"timelineTitle": "History",
"timelineEntry": "{status} · {name} · {date}",
"errorLoadList": "Failed to load cases.",
"errorLoadDetail": "Failed to load case details.",
"errorUpdateTask": "Failed to update task.",
"filterClinic": "Clinic",
"filterClinicAll": "All clinics",
"filterTreatmentType": "Treatment type",
"filterTreatmentTypeAll": "All types",
"filterSentFrom": "Sent from",
"filterSentTo": "Sent to",
"clearFilters": "Clear filters",
"patientMobile": "Mobile",
"showComments": "Comments",
"commentsCount": "Comments ({count})",
"viewAttachments": "View all attachments",
"attachmentsDialogTitle": "Case attachments",
"attachmentsDialogSubtitle": "Preview and download files shared with this case.",
"noAttachments": "No attachments were shared with this case.",
"downloadAttachment": "Download",
"downloadAllAttachments": "Download all",
"attachmentPreviewUnavailable": "Preview unavailable",
"prevPage": "Previous",
"nextPage": "Next",
"pageSummary": "Page {page} of {totalPages} ({total} cases)",
"statusLabel": "Status"
},
"tasks": {
"title": "Tasks",
"subtitle": "All lab tasks from connected clinics. Filter, sort, and update the status of each step.",
"subtitleOwner": "All lab tasks from connected clinics. Filter, sort, and update the status of each step.",
"loading": "Loading tasks…",
"emptyList": "No tasks match the current filters.",
"emptyListOwner": "No tasks match the current filters.",
"noPermissionTitle": "Tasks",
"noPermissionBody": "You do not have permission to view tasks for this organization.",
"fromClinic": "From {name}",
"patientLabel": "Patient",
"taskDate": "{date}",
"teethLabel": "Teeth {teeth}",
"importantBadge": "Important",
"lastUpdatedBy": "Updated by {name}",
"statusInProgress": "In progress",
"statusCompleted": "Completed",
"searchPlaceholder": "Search patient or clinic…",
"filterClinic": "Clinic",
"filterClinicAll": "All clinics",
"filterStatus": "Status",
"filterStatusAll": "All statuses",
"showCompleted": "Show completed",
"importantOnly": "Important only",
"filterSentFrom": "From",
"filterSentTo": "To",
"sortBy": "Sort by",
"sortDate": "Date",
"sortStatus": "Status",
"sortClinic": "Clinic",
"sortPatient": "Patient",
"sortImportant": "Important",
"sortProsthesis": "Prosthesis type",
"sortTaskType": "Task type",
"sortDirection": "Sort direction",
"clearFilters": "Clear filters",
"commentsButton": "Comments",
"errorLoadList": "Failed to load tasks.",
"errorUpdateTask": "Failed to update task.",
"pageSummary": "Page {page} of {totalPages} ({total} tasks)"
},
"caseComments": {
"title": "Comments",
"placeholder": "Write a comment…",
"reply": "Reply…",
"post": "Post",
"empty": "No comments yet.",
"visibleToClinicToggle": "Visible to clinic",
"clinicCanSee": "Clinic can see this",
"hiddenFromClinic": "Hidden from clinic",
"makeVisible": "Make visible to clinic",
"makeHidden": "Hide from clinic",
"labAuthor": "Lab",
"clinicAuthor": "Clinic",
"errorLoad": "Failed to load comments.",
"errorPost": "Failed to post comment.",
"errorToggle": "Failed to update comment visibility.",
"send": "Send comment",
"composerVisible": "Visible to clinic",
"composerHidden": "Hidden from clinic"
},
"appointments": {
"title": "Appointments",
"subtitle": "Search a patient, pick a date, then click a time slot under a provider to book.",
"loadingSchedule": "Loading schedule…",
"infoPastViewOnly": "Past appointments are view-only.",
"infoSelectPatient": "Select a patient before booking.",
"errorOutsideHours": "This appointment falls outside the provider's current working hours and cannot be edited.",
"successUpdated": "Appointment updated.",
"successSaved": "Appointment saved.",
"errorUpdate": "Could not update appointment.",
"errorSave": "Could not save appointment.",
"confirmRemove": "Remove this appointment?",
"successRemoved": "Appointment removed.",
"errorDelete": "Could not delete appointment.",
"errorLoadSchedule": "Failed to load schedule.",
"successPatientSaved": "Patient {firstName} {lastName} was saved.",
"searchPlaceholder": "Search existing patients",
"searching": "Searching…",
"searchHint": "Type to search patients by name, phone, or email.",
"noPermissionAdd": "You do not have permission to add patients.",
"editTitle": "Edit appointment",
"newTitle": "New appointment",
"providerLabel": "Provider:",
"patientLabel": "Patient",
"startLabel": "Start",
"endLabel": "End",
"purposeLabel": "Purpose",
"errorSelectPatient": "Select a patient first.",
"errorEndAfterStart": "End time must be after start time.",
"errorPastSchedule": "Cannot schedule in the past.",
"errorPastViewOnly": "Past appointments are view-only.",
"errorMissingDetails": "Missing appointment details.",
"noProviders": "No providers available. Add staff with treatment edit access to see columns here.",
"noWorkingHours": "No working hours are configured for this day. Set provider working hours in Staff management.",
"noHoursSet": "No hours set",
"offToday": "Off today",
"slotOffToday": "Provider is off today",
"slotHoursNotConfigured": "Working hours not configured",
"slotOutsideHours": "Outside working hours",
"slotCannotCreate": "You cannot create appointments",
"slotBookAt": "Book {time}",
"outsideHoursBlocked": "Outside working hours — editing blocked",
"overlappingChoose": "{count} overlapping — click to choose",
"overlapping": "{count} overlapping",
"legend": "Legend",
"overlappingTitle": "Overlapping appointments ({count})",
"purposeConsultation": "Consultation",
"purposeFilling": "Filling",
"purposeEndo": "Endo",
"purposeVisit": "Visit",
"purposeHygiene": "Hygiene"
},
"treatment": {
"loading": "Loading…",
"noPermissionTitle": "Treatment workspace",
"noPermissionBody": "You do not have permission to view the Treatment tab for this organization.",
"title": "Treatment",
"subtitleEdit": "Document cases for your appointments, save drafts, and send work to linked organizations.",
"subtitleEditPhase4": "Plan treatment details first, then group lab-dependent work into shipments in the lab dispatch panel.",
"subtitleReadOnly": "View-only access — you can review appointments and treatment history but cannot edit.",
"pastDayNotice": "Past days are view-only. You can review appointments and history, but treatment cases cannot be added or changed.",
"selectedPatient": "Selected patient",
"purposeLabel": "Purpose:",
"loadingAppointments": "Loading appointments…",
"selectDayWithAppointment": "Select a day with at least one appointment.",
"confirmDiscard": "You have unsaved changes. Discard them and continue?",
"errorChooseOrg": "Choose at least one active organization to send this case.",
"successCaseSent": "Case sent to selected organizations.",
"successFilesUploaded": "{count} file(s) uploaded successfully.",
"errorLoadAppointments": "Failed to load appointments.",
"errorLoadOrgs": "Failed to load linked organizations.",
"errorLoadHistory": "Failed to load treatment history.",
"errorLoadDraft": "Failed to load treatment draft.",
"errorUpload": "Failed to upload attachments.",
"errorSaveDraft": "Failed to save treatment draft.",
"errorSendCase": "Failed to send case.",
"errorCaseMustSave": "Case must be saved before sending.",
"treatmentPlanTitle": "Treatment · {patientName}",
"hiddenMessage": "Appointments are hidden.",
"showAppointments": "Show appointments",
"appointmentsTitle": "My appointments",
"hideAppointments": "Hide appointments",
"emptyDay": "No appointments assigned to you on this day.",
"casesTitle": "Treatment cases",
"casesSubtitle": "Each case has its own teeth, notes, attachments, and destinations for send.",
"detailsTitle": "Treatment details",
"detailsSubtitle": "Plan teeth, type, notes, and attachments for each detail line.",
"addDetail": "Add detail",
"detailLabel": "Detail {n}",
"detailSentBadge": "sent",
"detailLockedInShipment": "This detail was sent to a lab and can no longer be edited.",
"detailsSaveHint": "Lab dispatch is configured separately below.",
"addCase": "Add case",
"caseLabel": "Case {n}",
"comments": "Comments",
"commentsPlaceholder": "Write clinical notes for this case…",
"treatmentType": "Treatment type",
"typeConsultation": "consultation",
"typeFilling": "filling",
"typeEndo": "endo",
"typeVisit": "visit",
"typeHygiene": "hygiene",
"attachments": "Attachments",
"attachFiles": "Attach files for this treatment case",
"chooseFiles": "Choose files",
"sendToOrgs": "Send this case to linked organizations",
"searchOrgsPlaceholder": "Search active organizations...",
"recent": "Recent:",
"noOrgMatch": "No active organization matches your search.",
"sendThisCase": "Send this case",
"labDispatchTitle": "Lab dispatch",
"labDispatchSubtitle": "Group lab-dependent details into shipments and send them to linked labs.",
"labDispatchSendHint": "Shipment grouping is saved when you send to the lab.",
"addLabShipment": "Add lab shipment",
"labShipmentLabel": "Shipment {n}",
"includeDetails": "Include treatment details",
"labShipmentIncludedDetails": "Included in this shipment",
"labShipmentNoIncludedDetails": "No details were included in this shipment.",
"labShipmentNoDetailsAvailable": "All lab details are already in other shipments or have been sent.",
"labDetailLine": "Detail {n} · {type} · {teeth}",
"noLabDetails": "No prosthesis treatment details yet. Add prosthesis in treatment details above.",
"labDispatchEmpty": "Add a lab shipment to group details and send them to a lab.",
"prosthesisTypesTitle": "Prosthesis types",
"prosthesisApplyAll": "Apply to all teeth",
"prosthesisSelectPlaceholder": "Select prosthesis type…",
"prosthesisColTooth": "Tooth",
"prosthesisColDetail": "Detail",
"prosthesisColType": "Prosthesis type",
"selectLab": "Destination lab",
"selectLabPlaceholder": "Choose a linked lab…",
"sendToLab": "Send to lab",
"saveLabShipments": "Save lab shipments",
"labDispatchSaveHint": "Saves shipment grouping without sending.",
"successLabShipmentsSaved": "Lab shipments saved.",
"errorSaveLabShipments": "Failed to save lab shipments.",
"errorLabCaseNeedsDetails": "Select at least one treatment detail for this shipment.",
"unsavedChanges": "Unsaved changes",
"saveStatusSaving": "Saving…",
"saveStatusSaved": "All changes saved",
"saveStatusError": "Could not save — check your connection",
"sendSavesFirst": "Sending is per case and saves first automatically.",
"historyTitle": "Previous treatments",
"historySubtitle": "Click a treatment to preview it. Use Open in the preview card to load it in the workspace.",
"loadingHistory": "Loading history…",
"historyEmpty": "No other treatments recorded for this patient yet.",
"historyDetailLabel": "Detail {n} · {type}",
"previewTitle": "Treatment preview",
"openTreatment": "Open",
"selectAppointment": "Select an appointment to preview its treatment.",
"detailCount": "{n} detail(s)",
"detailSummary": "Detail {n}: {type}",
"detailAttachmentCount": "{n, plural, one {# file} other {# files}}",
"detailNotSentToLab": "Not sent to lab",
"detailPendingLabSend": "This lab detail has not been sent yet.",
"teethLabel": "Teeth:",
"teethNone": "None selected",
"historicalReadonlyNotice": "You are viewing a past treatment (read-only).",
"errorNoAppointmentForTreatment": "This treatment has no linked appointment and cannot be opened.",
"noCases": "No cases in this treatment.",
"noDetails": "No treatment details yet.",
"typeLabel": "Type:",
"commentsLabel": "Comments:",
"commentsEmpty": "Comments: —",
"attachFilesShort": "Attach files",
"sendCase": "Send this case",
"sendToLinkedOrgs": "Send to linked organizations",
"noActiveOrgs": "No active linked organizations.",
"confirmSend": "Confirm send",
"toothChartTitle": "FDI tooth chart",
"toothChartTitleCompact": "Tooth chart",
"toothChartHint": "Tap teeth to multi-select. Applies to the active detail.",
"toothChartWholePlan": "Show whole treatment plan",
"labShipmentAttachments": "Files for the lab",
"labShipmentAttachmentsHint": "Select which attachments from this detail are included in this shipment. None are sent by default.",
"selectedLabel": "Selected:",
"selectedEmpty": "—",
"upperArch": "Upper arch",
"lowerArch": "Lower arch",
"toothAria": "FDI tooth {fdi}",
"toothSelectedSuffix": ", selected",
"sentToAt": "Sent to {orgName} at {datetime}",
"fallbackOrgName": "organization"
},
"organizations": {
"loadingOrganization": "Loading organization...",
"subtitle": "Search organizations, send connection requests to existing accounts, or invitation links when they are not on DyoLink yet.",
"invitationHistory": "Invitation History",
"searchPlaceholder": "Search {counterpart} by name, email, or phone...",
"backToList": "Back to list",
"tableOrganization": "Organization",
"tableOwnerEmail": "Owner email",
"tableDate": "Date",
"tableStatus": "Status",
"tableAction": "Action",
"emptyConnections": "No connections yet. Search to send a connection request or an invitation link.",
"statusInvitationPending": "Invitation pending",
"statusConnectionPending": "Connection request pending",
"statusConnected": "Connected",
"statusDeclined": "Connection request declined",
"statusFound": "Found",
"statusToday": "Today",
"acceptRequest": "Accept connection request",
"declineRequest": "Decline connection request",
"removeConnection": "Remove connection",
"sendRequest": "Send connection request",
"noDirectoryResults": "No organization found in directory search.",
"hideInvitationFields": "Hide invitation fields",
"sendInvitationLink": "Send invitation link",
"counterpartNameLabel": "{counterpart} name",
"ownerEmailLabel": "Owner email",
"sendInvitation": "Send invitation",
"successConnectionSent": "{counterpart} connection request sent.",
"successInviteCreated": "Invitation link created for {email}",
"successLinkCopied": "Invitation link copied to clipboard.",
"successAccepted": "Connection request accepted.",
"successDeclined": "Connection request declined.",
"successRemoved": "Connection removed.",
"historyTitle": "Invitation History",
"loadingHistory": "Loading invitation history...",
"historyEmpty": "No invitations yet.",
"tableInvitationLink": "Invitation link",
"statusPending": "Invitation pending",
"statusAccepted": "Invitation accepted",
"statusRejected": "Invitation rejected",
"statusExpired": "Invitation expired",
"copyInvitationLink": "Copy invitation link",
"copyInvitationLinkTitle": "Copy invitation link (generates a new link if needed)",
"selectorTitle": "Organizations",
"selectorSubtitleWithCreate": "Select an organization to continue, or create a new one.",
"selectorSubtitleSelectOnly": "Select an organization to continue.",
"createOrganization": "Create Organization",
"createAndContinue": "Create and Continue",
"emptyCanCreate": "No organizations found. Create your first one to continue.",
"emptyAskOwner": "No organizations found. Ask an organization owner to invite you.",
"continueArrow": "Continue →",
"planLabel": "Plan: {name} • {maxUsers} users",
"counterpartClinic": "Clinic",
"counterpartLab": "Lab",
"viewCaseHistory": "View case history",
"caseHistoryBackToConnections": "← Back to connections",
"caseHistoryTitle": "Case history with {name}",
"caseHistorySubtitleClinic": "Cases you sent to this lab, including lab workflow status for each step.",
"caseHistorySubtitleLab": "Cases received from this clinic, including task status for each step.",
"caseHistoryEmpty": "No cases exchanged with this organization yet.",
"caseHistorySentToLab": "Sent to {name}",
"caseHistoryErrorLoadList": "Failed to load case history.",
"caseHistoryErrorLoadDetail": "Failed to load case details."
},
"settings": {
"accountTitle": "Account",
"accountSubtitle": "Profile and security settings for your login.",
"accountPlaceholder": "Password change and profile editing will be wired here next (e.g. invite flow, reset password).",
"changePasswordTitle": "Change password",
"resetPasswordTitle": "Set a new password",
"resetPasswordSubtitle": "Your mobile was verified. Choose a new password for your account.",
"currentPassword": "Current password",
"newPassword": "New password",
"confirmNewPassword": "Confirm new password",
"updatePassword": "Update password",
"setNewPassword": "Save new password",
"passwordChanged": "Password updated. Please sign in again.",
"passwordChangeFailed": "Could not update password. Please try again.",
"subscriptionsTitle": "Subscriptions",
"subscriptionsSubtitle": "Your DyoLink workspace plan and seats for {orgName}. Clinic and lab income tracking stays under the sidebar Billing tab.",
"noSubscriptionNotice": "This organization has no active subscription. Select a plan below to start the purchase process.",
"currentPlan": "Current plan",
"planPrice": "Plan price",
"seatsUsed": "Seats used",
"seatsRemaining": "Seats remaining",
"daysRemaining": "Days remaining",
"unlimited": "Unlimited",
"unlimitedSeats": "Unlimited seats",
"seatsCount": "{n} seats",
"pricePerMonth": "${price} / month",
"noActiveSubscription": "No active subscription for this organization.",
"trialEnded": "Trial period has ended. Choose a plan when checkout is available.",
"trialEndsIn": "Trial ends in {days} day(s).",
"seatsLow": "Seat usage is high for this organization.",
"choosePlanIntro": "Choose a plan to continue. Purchase integration is not active yet, so this currently prepares the selection step only.",
"planSolo": "Solo",
"planSmall": "Small",
"planMedium": "Medium",
"planLarge": "Large",
"planEnterprise": "Enterprise",
"startPurchase": "Start purchase process",
"purchaseNotice": "Purchase flow will be enabled soon. {plan} is selected and ready for checkout setup."
},
"schedule": {
"defaultLabel": "Schedule date",
"previousDay": "Previous day",
"nextDay": "Next day",
"chooseDate": "Choose schedule date",
"year": "Year",
"month": "Month",
"day": "Day",
"monthJanuary": "January",
"monthFebruary": "February",
"monthMarch": "March",
"monthApril": "April",
"monthMay": "May",
"monthJune": "June",
"monthJuly": "July",
"monthAugust": "August",
"monthSeptember": "September",
"monthOctober": "October",
"monthNovember": "November",
"monthDecember": "December"
}
}