1067 lines
53 KiB
JSON
1067 lines
53 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",
|
||
"openMenu": "Open menu",
|
||
"closeMenu": "Close menu"
|
||
},
|
||
"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",
|
||
"startTrialShort": "Try free",
|
||
"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",
|
||
"widgetCasesInProgress": "Cases In Progress",
|
||
"widgetTasksInProgress": "Tasks In Progress",
|
||
"widgetImportantTasks": "Important Tasks",
|
||
"widgetOverdueCases": "Overdue Cases",
|
||
"widgetUnassignedTasks": "Unassigned Tasks",
|
||
"widgetPendingConnections": "Pending Connections",
|
||
"widgetProvidersWithoutWorkingHours": "Providers Without Working Hours",
|
||
"widgetPendingStaffInvites": "Pending Staff Invites",
|
||
"widgetSubscription": "Subscription",
|
||
"subscriptionSeatsLabel": "Seats used",
|
||
"subscriptionSeatsRemainingLabel": "Seats left",
|
||
"subscriptionSeatsPercent": "{percent}%",
|
||
"subscriptionSeatsUnlimitedShort": "Unlimited",
|
||
"subscriptionPeriodLabel": "Plan period",
|
||
"subscriptionPeriodRemainingLabel": "Days left",
|
||
"subscriptionPeriodPercent": "{percent}%",
|
||
"subscriptionPeriodDays": "{elapsed}/{total} days",
|
||
"subscriptionNoPlan": "No active plan",
|
||
"chartAppointmentsWeekAllTitle": "Appointments This Week",
|
||
"chartAppointmentsWeekAllSubtitle": "All providers — last 7 days",
|
||
"chartAppointmentsWeekMineTitle": "My Appointments This Week",
|
||
"chartAppointmentsWeekMineSubtitle": "Your schedule — last 7 days",
|
||
"chartLabTaskActivityTitle": "Lab Task Activity",
|
||
"chartLabTaskActivitySubtitle": "Last 7 days",
|
||
"chartLabTaskCompletedLegend": "Completed",
|
||
"chartLabTaskReceivedLegend": "Received",
|
||
"chartAppointmentsByProviderTitle": "Appointments by Provider",
|
||
"chartAppointmentsByProviderSubtitle": "Today",
|
||
"chartTreatmentMixTitle": "Treatment Mix",
|
||
"chartTreatmentMixSubtitle": "Last 7 days",
|
||
"chartCaseCompletionTitle": "Case Completion",
|
||
"chartCaseCompletionSubtitle": "All active cases",
|
||
"chartCaseCompletionPercent": "{percent}%",
|
||
"chartCaseCompletionTasks": "Tasks completed",
|
||
"chartTreatmentPlanCompletionTitle": "Treatment Plan Completion",
|
||
"chartTreatmentPlanCompletionSubtitle": "All appointments",
|
||
"chartTreatmentPlanCompletionRatio": "With treatment plan",
|
||
"chartTasksByProsthesisTitle": "In-Progress Tasks by Prosthesis",
|
||
"chartTasksByProsthesisSubtitle": "Current workload mix",
|
||
"chartCasesDueWeekTitle": "Cases Due This Week",
|
||
"chartCasesDueWeekSubtitle": "Active cases with a due date in the next 7 days",
|
||
"chartCasePartnersClinicTitle": "Cases by Lab",
|
||
"chartCasePartnersLabTitle": "Cases by Clinic",
|
||
"chartCasePartnersSubtitle": "Last 30 days",
|
||
"chartCasePartnersSentLegend": "Sent",
|
||
"chartCasePartnersOpenLegend": "In progress",
|
||
"chartEfficiencyReportTitle": "Efficiency Report",
|
||
"chartEfficiencyReportSubtitleClinic": "Treatments created by staff — last 30 days",
|
||
"chartEfficiencyReportSubtitleLab": "Tasks completed by staff — last 30 days",
|
||
"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.",
|
||
"retryLoad": "Try again",
|
||
"sectionLoadError": "This section could not be displayed.",
|
||
"lastUpdated": "Updated at {time}"
|
||
},
|
||
"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": "-",
|
||
"requiredMark": "*",
|
||
"requiredFieldsHint": "Fields marked with * are required. Email is optional.",
|
||
"firstNameRequired": "First name is required.",
|
||
"lastNameRequired": "Last name is required.",
|
||
"emailOptional": "Email (optional)",
|
||
"emailOptionalSummary": "Email (optional):",
|
||
"appointmentHistoryTitle": "Appointment history",
|
||
"appointmentHistorySubtitle": "Past and upcoming appointments for this patient at your clinic.",
|
||
"appointmentHistoryLoading": "Loading appointment history…",
|
||
"appointmentHistoryEmpty": "No appointments recorded for this patient yet.",
|
||
"appointmentHistoryError": "Could not load appointment history.",
|
||
"appointmentHistoryProvider": "Provider: {name}",
|
||
"appointmentHistoryUnknownProvider": "Unknown provider"
|
||
},
|
||
"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}",
|
||
"dueDateLabel": "Due {date}",
|
||
"overdueBadge": "Overdue",
|
||
"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",
|
||
"unreadCase": "Unread updates",
|
||
"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.",
|
||
"errorAssignTask": "Failed to assign task.",
|
||
"assigneeLabel": "Assigned to",
|
||
"assigneeUnassigned": "Unassigned",
|
||
"assignedTo": "Assigned to {name}",
|
||
"filterClinic": "Clinic",
|
||
"filterClinicAll": "All clinics",
|
||
"filterProsthesisType": "Prosthesis type",
|
||
"filterProsthesisTypeAll": "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",
|
||
"viewShareQr": "View case QR code and share link",
|
||
"shareQrDialogTitle": "Case share link",
|
||
"shareQrDialogSubtitle": "Scan the QR code or copy the link to open this case’s tasks.",
|
||
"copyShareLink": "Copy link",
|
||
"shareLinkCopied": "Link copied to clipboard",
|
||
"shareQrUnavailable": "QR preview unavailable"
|
||
},
|
||
"labCaseAccess": {
|
||
"pageTitle": "Case tasks",
|
||
"loading": "Loading case…",
|
||
"accessDeniedTitle": "Access denied",
|
||
"accessDenied": "You do not have permission to view this case. Sign in with a lab or clinic account that has access, and make sure you are the treatment provider for clinic access.",
|
||
"emptyTasks": "No tasks found for this case.",
|
||
"caseSummary": "{clinic} · {patient}",
|
||
"labName": "Lab: {name}"
|
||
},
|
||
"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",
|
||
"filterStepCompleted": "Step completed",
|
||
"filterStepCompletedAll": "Any step",
|
||
"showCompleted": "Show completed",
|
||
"importantOnly": "Important first",
|
||
"assignedToMe": "Assigned to me",
|
||
"overdueOnly": "Overdue cases only",
|
||
"unassignedOnly": "Unassigned only",
|
||
"assignedToStaff": "Assigned to {name}",
|
||
"resetView": "Reset filters & sort",
|
||
"showInCase": "Show in case",
|
||
"showInCaseNotFound": "This task is not in the default in-progress list.",
|
||
"showInCaseError": "Could not locate this task in the list.",
|
||
"locatingCase": "Finding case in list…",
|
||
"taskCompletedToast": "Step completed — nice work!",
|
||
"taskCompletedFlash": "Done",
|
||
"filterSentFrom": "From",
|
||
"filterSentTo": "To",
|
||
"sortBy": "Sort by",
|
||
"sortDate": "Date",
|
||
"sortDueDate": "Case due date",
|
||
"sortStatus": "Status",
|
||
"sortClinic": "Clinic",
|
||
"sortPatient": "Patient",
|
||
"sortImportant": "Important",
|
||
"sortProsthesis": "Prosthesis type",
|
||
"sortTaskType": "Task type",
|
||
"sortDirection": "Sort direction",
|
||
"groupingOffClinic": "Sorted by clinic — case grouping is off.",
|
||
"groupingOffPatient": "Sorted by patient — case grouping is off.",
|
||
"groupingOffProsthesis": "Sorted by prosthesis type — case grouping is off.",
|
||
"groupingOffTaskType": "Sorted by task type — case grouping is off.",
|
||
"groupingOffStatus": "Sorted by status — case grouping is off.",
|
||
"groupingOffDueDate": "Sorted by due date — case grouping is off.",
|
||
"caseReceivedAt": "Received {date}",
|
||
"caseDueDate": "Due {date}",
|
||
"overdueBadge": "Overdue",
|
||
"caseTaskProgress": "{completed}/{total} tasks on this page",
|
||
"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.",
|
||
"infoEditBlockedHasTreatment": "This appointment cannot be edited because a treatment is linked to it.",
|
||
"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.",
|
||
"deleteBlockedHint": "This appointment cannot be deleted because a treatment is linked to it.",
|
||
"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.",
|
||
"patientSearchPlaceholder": "Search patients by name, phone, or email",
|
||
"patientSearchEmpty": "No patients match this search.",
|
||
"patientLockedHint": "Patient cannot be changed because a treatment is linked to this appointment.",
|
||
"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",
|
||
"confirmRemoveDetail": "Remove this treatment detail?",
|
||
"removeDetailAria": "Remove detail {n}",
|
||
"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": "Notes",
|
||
"commentsPlaceholder": "Write clinical notes for this detail…",
|
||
"treatmentType": "Treatment type",
|
||
"treatmentTypePlaceholder": "Select treatment type…",
|
||
"treatmentTypeNotSelected": "Type not selected",
|
||
"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.",
|
||
"inviteLab": "Invite a lab",
|
||
"noOrgInvitePermission": "You do not have permission to invite labs. Contact your organization owner.",
|
||
"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",
|
||
"prosthesisUnassigned": "Unassigned",
|
||
"selectLab": "Destination lab",
|
||
"selectLabPlaceholder": "Choose a linked lab…",
|
||
"sendToLab": "Send to lab",
|
||
"dueDateLabel": "Due date",
|
||
"dueDateOptional": "optional",
|
||
"dueDateLockedCompleted": "Due date cannot be changed after all tasks are completed.",
|
||
"dueDateUpdateError": "Failed to update due date.",
|
||
"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",
|
||
"historyPatientScope": "Previous treatments for {patientName}",
|
||
"historyCurrentAppointment": "This appointment",
|
||
"historySubtitle": "Click a past plan to preview it, then load it into the workspace if needed.",
|
||
"historyFilterNotShipped": "Not shipped to lab",
|
||
"historyFilterDate": "Date",
|
||
"historyClearFilters": "Remove filters",
|
||
"historyFilterEmpty": "No treatments match these filters.",
|
||
"labShipmentBlockedTitle": "Lab shipment not available yet",
|
||
"labShipmentBlockedBody": "Select at least one tooth on this prosthesis detail before you can create a lab shipment.",
|
||
"labCaseCommentsTitle": "Lab case comments",
|
||
"labCaseCommentsHint": "Message the lab while this case is still in progress. Comments close when all lab tasks are completed.",
|
||
"labShipmentsTitle": "Lab shipments",
|
||
"labShipmentsSubtitle": "Sent cases for this patient — open one to follow progress and messages.",
|
||
"labShipmentsPatientScope": "Sent cases for {patientName} — open one to follow progress and messages.",
|
||
"labShipmentsUpdatesScope": "Cases with new lab activity — open one to review and clear the update.",
|
||
"labShipmentsScopePatient": "This patient",
|
||
"labShipmentsScopeUpdates": "All updates ({count})",
|
||
"labShipmentsOtherPatientsUnread": "{count, plural, one {# update on another patient} other {# updates on other patients}}",
|
||
"labShipmentsUpdatesEmpty": "No cases with new lab activity.",
|
||
"labShipmentsEmpty": "No lab shipments for this patient yet.",
|
||
"labShipmentTeethCount": "{count, plural, one {# tooth} other {# teeth}}",
|
||
"historyShowFilters": "Show filters",
|
||
"historyHideFilters": "Hide filters",
|
||
"labTrackerExpand": "View activity",
|
||
"labTrackerCollapse": "Hide activity",
|
||
"activityFeedTitle": "Activity",
|
||
"activityFeedEmpty": "No activity recorded yet.",
|
||
"unreadLabCase": "Unread lab updates",
|
||
"overdueBadge": "Overdue",
|
||
"activityUnknownActor": "Someone",
|
||
"activityUnknownStep": "Task",
|
||
"activityCaseSent": "Case sent to lab · {date}",
|
||
"activityClinicComment": "{actor}: “{preview}” · {date}",
|
||
"activityLabComment": "{actor}: “{preview}” · {date}",
|
||
"activityTaskCompleted": "{step} completed by {actor} · {date}",
|
||
"activityCaseImportant": "Marked important by {actor} · {date}",
|
||
"activityCaseAmended": "Case updated by {actor} · {date}",
|
||
"activityGeneric": "Update · {date}",
|
||
"loadingHistory": "Loading history…",
|
||
"historyEmpty": "No other treatments recorded for this patient yet.",
|
||
"historyDetailLabel": "Detail {n} · {type}",
|
||
"previewCurrentDraft": "Current draft",
|
||
"previewBrowsingTitle": "Previewing saved plan",
|
||
"browseBanner": "Viewing {date} — this plan is not loaded in the editor yet.",
|
||
"loadIntoWorkspace": "Load into workspace",
|
||
"backToCurrentDraft": "Back to current draft",
|
||
"labAttentionTitle": "Lab dispatch needed",
|
||
"labAttentionSubtitle": "These lab-dependent details have not been sent to a lab yet.",
|
||
"labAttentionCurrentDraft": "Current appointment",
|
||
"labAttentionGoDispatch": "Go to dispatch",
|
||
"labAttentionLoadDispatch": "Load & dispatch",
|
||
"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.",
|
||
"errorNoTreatmentForPatient": "This patient has no treatment records yet.",
|
||
"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",
|
||
"entryWizardLabel": "Treatment entry steps",
|
||
"entryStepTeeth": "Teeth",
|
||
"entryStepContent": "Content",
|
||
"entryStepLab": "Lab",
|
||
"entryStepBack": "Back",
|
||
"entryStepNext": "Next",
|
||
"entryStepLabUnavailable": "Lab dispatch is available after you save a lab-dependent detail with teeth selected.",
|
||
"toothChartTitleCompact": "Tooth chart",
|
||
"toothChartHint": "Tap teeth to select or deselect. Shift-click another tooth in the same arch for a connected bridge. Click a bridge tooth to cut it out (still selected as a single); ends keep one bridge, middle splits into two.",
|
||
"toothConnectedHint": "Connected selection",
|
||
"toothConnectedSuffix": " (connected)",
|
||
"connectedBadge": "Connected",
|
||
"prosthesisConnectedLabel": "Connected teeth prosthesis type",
|
||
"toothChartWholePlan": "Full View",
|
||
"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}",
|
||
"caseHistorySlimClinicBody": "Follow lab cases in Treatment for each patient.",
|
||
"caseHistorySlimClinicHint": "Open Treatment, select the patient, and use Lab shipments in the left panel to track cases sent to {name}.",
|
||
"caseHistorySlimClinicCta": "Open Treatment",
|
||
"caseHistorySlimLabBody": "Production cases for this clinic live on the Cases tab.",
|
||
"caseHistorySlimLabHint": "Use Cases to work cases received from {name}. Filter by this clinic if needed.",
|
||
"caseHistorySlimLabCta": "Open Cases"
|
||
},
|
||
"settings": {
|
||
"accountTitle": "Account",
|
||
"accountSubtitle": "Profile and security settings for your login.",
|
||
"participationSectionTitle": "Clinical participation",
|
||
"participationSectionSubtitle": "Choose whether you personally take part in clinical or lab work for this organization.",
|
||
"participateInTreatments": "I want to participate in treatments",
|
||
"participateInTasks": "I want to participate in tasks",
|
||
"participateWorkingHoursTitle": "Working hours",
|
||
"participateWorkingHoursSubtitle": "Set your schedule so appointments can be booked for you.",
|
||
"participateSaveHours": "Save and participate",
|
||
"participateEnabledTreatments": "You are now participating in treatments.",
|
||
"participateEnabledTasks": "You are now participating in tasks.",
|
||
"participateDisabledTreatments": "You are no longer participating in treatments.",
|
||
"participateDisabledTasks": "You are no longer participating in tasks.",
|
||
"participateUpdateFailed": "Could not update participation settings. Please try again.",
|
||
"participateConfirmRevokeTitle": "Stop participating?",
|
||
"participateConfirmRevokeBodyTreatments": "You will lose treatment access and be removed from the appointments schedule. Your saved working hours will be kept.",
|
||
"participateConfirmRevokeBodyTasks": "You will lose task edit access and be removed from the efficiency report.",
|
||
"participateConfirmRevokeConfirm": "Stop participating",
|
||
"changePasswordOption": "Change 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",
|
||
"today": "Today",
|
||
"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"
|
||
},
|
||
"notifications": {
|
||
"bellAria": "Notifications",
|
||
"unreadCount": "{count} unread notifications",
|
||
"dropdownTitle": "Notifications",
|
||
"viewAll": "View all",
|
||
"pageTitle": "Notifications",
|
||
"pageSubtitle": "Updates from cases, tasks, organizations, and staff.",
|
||
"loading": "Loading notifications…",
|
||
"empty": "No notifications yet.",
|
||
"loadMore": "Load more",
|
||
"markAllRead": "Mark all as read",
|
||
"errorLoad": "Could not load notifications.",
|
||
"errorMarkRead": "Could not update notification.",
|
||
"typeCaseSent": "New lab case received",
|
||
"typeClinicComment": "New clinic comment on a case",
|
||
"typeLabComment": "New lab comment on a case",
|
||
"typeLabCommentClinic": "New lab comment on your case",
|
||
"typeCaseImportant": "Case marked as important",
|
||
"typeTaskCompleted": "Lab task completed",
|
||
"typeTaskAssigned": "A task was assigned to you",
|
||
"typeConnectionRequest": "New organization connection request",
|
||
"typeStaffInvite": "Staff invitation created",
|
||
"typeUnknown": "Notification",
|
||
"destCases": "Open Cases",
|
||
"destTasks": "Open Tasks",
|
||
"destTreatment": "Open Treatment",
|
||
"destOrganizations": "Open Organizations",
|
||
"destStaff": "Open Staff",
|
||
"destOpen": "Open"
|
||
},
|
||
"errors": {
|
||
"GENERIC": "Something went wrong. Please try again.",
|
||
"NETWORK_ERROR": "Could not reach the server. Check your connection and try again.",
|
||
"TIMEOUT": "The request took too long. Please try again.",
|
||
"AUTH_INVALID_CREDENTIALS": "Incorrect email or password.",
|
||
"AUTH_UNAUTHORIZED": "Your session has expired. Please sign in again.",
|
||
"AUTH_REFRESH_TOKEN_NOT_FOUND": "Your session has expired. Please sign in again.",
|
||
"AUTH_REFRESH_TOKEN_INVALID": "Your session has expired. Please sign in again.",
|
||
"AUTH_SESSION_EXPIRED": "Your session has expired. Please sign in again.",
|
||
"AUTH_USER_NOT_FOUND": "We could not find your account.",
|
||
"AUTH_ORG_NOT_SELECTED": "Please select an organization to continue.",
|
||
"AUTH_ORG_ACCESS_DENIED": "You do not have access to this organization.",
|
||
"AUTH_INVITATION_PENDING": "Your invitation is still pending. Ask an administrator to activate your account.",
|
||
"AUTH_REGISTRATION_EMAIL_EXISTS": "An account with this email already exists. Sign in to add a new organization from your account.",
|
||
"AUTH_REGISTRATION_MOBILE_EXISTS": "This mobile number is already registered.",
|
||
"AUTH_REGISTRATION_MOBILE_INVALID": "Please enter a valid mobile number.",
|
||
"AUTH_REGISTRATION_FAILED": "Registration could not be completed. Please try again.",
|
||
"AUTH_PASSWORD_INCORRECT": "Current password is incorrect.",
|
||
"AUTH_PASSWORD_RESET_EXPIRED": "Password reset verification expired. Please verify your mobile number again.",
|
||
"AUTH_VERIFICATION_CODE_INVALID": "Invalid or expired verification code.",
|
||
"AUTH_VERIFICATION_RATE_LIMIT": "Please wait a moment before requesting another code.",
|
||
"AUTH_SELECT_ORG_FIRST": "Select an organization before creating a new one.",
|
||
"AUTH_CREATE_ORG_OWNER_ONLY": "Only owners of the current organization can create new organizations.",
|
||
"AUTH_PASSWORD_CURRENT_REQUIRED": "Current password is required.",
|
||
"PERMISSION_DENIED": "You do not have permission to perform this action.",
|
||
"PERMISSION_ORG_MANAGE": "You do not have permission to manage organizations.",
|
||
"PERMISSION_CLINIC_ONLY": "This action is only available for clinic organizations.",
|
||
"PERMISSION_LAB_ONLY": "This action is only available for lab organizations.",
|
||
"PERMISSION_NOT_MEMBER": "You are not a member of this organization.",
|
||
"PERMISSION_OWNER_ONLY": "Only organization owners can perform this action.",
|
||
"PERMISSION_PARTICIPATION_SUBSCRIPTION": "An active subscription is required to participate in treatments or tasks.",
|
||
"PERMISSION_ENABLE_PARTICIPATION_FIRST": "Enable treatment participation before setting working hours.",
|
||
"PERMISSION_CLINIC_WORKING_HOURS": "Working hours are only available for clinic organizations.",
|
||
"PERMISSION_ACCESS_APPOINTMENTS": "You do not have access to appointments.",
|
||
"PERMISSION_EDIT_APPOINTMENTS": "You cannot create or modify appointments.",
|
||
"PERMISSION_ACCESS_TREATMENTS": "You do not have access to treatments.",
|
||
"PERMISSION_EDIT_TREATMENTS": "You cannot edit treatments.",
|
||
"PERMISSION_ACCESS_TASKS": "You do not have access to tasks.",
|
||
"PERMISSION_EDIT_TASKS": "You cannot edit tasks.",
|
||
"PERMISSION_ACCESS_CASES": "You do not have access to cases.",
|
||
"LAB_CASE_ACCESS_DENIED": "You do not have permission to view this shared case.",
|
||
"PERMISSION_ACCESS_STAFF": "You do not have access to staff management.",
|
||
"PERMISSION_EDIT_STAFF": "You cannot manage staff working hours.",
|
||
"PERMISSION_ORG_NOT_FOUND": "Organization not found.",
|
||
"VALIDATION_FAILED": "Please check the form and try again.",
|
||
"VALIDATION_EMAIL_INVALID": "Please enter a valid email address.",
|
||
"VALIDATION_PASSWORD_TOO_SHORT": "Password is too short.",
|
||
"VALIDATION_PASSWORD_REQUIRED": "Password is required.",
|
||
"VALIDATION_MOBILE_INVALID": "Please enter a valid mobile number.",
|
||
"VALIDATION_NAME_TOO_SHORT": "Name is too short.",
|
||
"VALIDATION_ORGANIZATION_NAME_REQUIRED": "Organization name is required.",
|
||
"VALIDATION_ORGANIZATION_TYPE_INVALID": "Please select a valid organization type.",
|
||
"VALIDATION_TOKEN_REQUIRED": "This link is invalid or incomplete.",
|
||
"VALIDATION_FIELD_REQUIRED": "Please fill in all required fields.",
|
||
"VALIDATION_LANGUAGE_INVALID": "Please select a supported language.",
|
||
"VALIDATION_INVALID_REQUEST": "The request contains invalid data.",
|
||
"NOT_FOUND": "The requested item was not found.",
|
||
"CONFLICT": "This action conflicts with existing data.",
|
||
"CONFLICT_FUTURE_APPOINTMENTS": "You cannot stop participating in treatments while you have future appointments. Reassign or cancel them first.",
|
||
"APPOINTMENT_PATIENT_LOCKED": "Cannot change the patient while a treatment is linked to this appointment.",
|
||
"APPOINTMENT_HAS_TREATMENT": "This appointment cannot be deleted because a treatment is linked to it.",
|
||
"TREATMENT_DETAIL_SENT": "This detail was sent to a lab and can no longer be changed.",
|
||
"BAD_REQUEST": "The request could not be processed.",
|
||
"INTERNAL_ERROR": "Something went wrong on our end. Please try again later."
|
||
}
|
||
}
|