{ "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" }, "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" } }