{ "save": "Save", "cancel": "Cancel", "edit": "Edit", "delete": "Delete", "create": "Create", "apply": "Apply", "preview": "Preview", "label": "Label", "confirm": "Confirm", "close": "Close", "accept": "Accept", "loading": "Loading...", "error": "Error", "success": "Success", "changesSaved": "Changes saved successfully", "errorOccurred": "An error occurred", "name": "Name", "email": "Email", "password": "Password", "description": "Description", "title": "Title", "image": "Image", "file": "File", "required": "This field is required", "invalidEmail": "Invalid email address", "invalidPassword": "Invalid password", "facebook": "Facebook", "instagram": "Instagram", "linkedin": "LinkedIn", "reddit": "Reddit", "tiktok": "TikTok", "x": "X (Twitter)", "youtube": "YouTube", "website": "Website", "common": { "cancel": "Cancel", "creating": "Creating...", "saving": "Saving..." }, "workspaceSelector": { "createAction": "Add workspace", "organizationLabel": "Organization", "organizationSettings": "Organization settings", "noOrganization": "No organization" }, "workspaceCreate": { "eyebrow": "Workspace", "title": "Create a new workspace", "description": "Set up a new workspace with its own slug, timezone, members, workflow, and connectors.", "previewTitle": "Workspace URL", "previewDescription": "The slug becomes the stable identifier used for the workspace.", "formTitle": "Workspace details", "formDescription": "Start with the core fields now. Members, workflow, and connectors can be configured right after creation.", "createAction": "Create workspace", "slugHint": "Workspace slug preview: {slug}", "fields": { "name": "Workspace name", "namePlaceholder": "Northwind Studio", "organization": "Organization", "slug": "Workspace slug", "slugPlaceholder": "northwind-studio", "timeZone": "Time zone" }, "errors": { "required": "All workspace fields are required.", "createFailed": "The workspace could not be created." } }, "organizationSettings": { "eyebrow": "Organization", "title": "Organization settings", "description": "Manage the SaaS account boundary for members, billing access, connections, and owned workspaces.", "loading": "Loading organization settings...", "fields": { "name": "Name", "createdAt": "Created" }, "sections": { "profile": { "title": "Profile", "description": "The account identity used across organization-owned workspaces." }, "members": { "title": "Members", "description": "Organization-level users and their inherited account permissions.", "empty": "No organization members found." }, "billing": { "title": "Billing", "description": "Subscription and billing access for this organization.", "placeholderTitle": "Billing provider is not connected yet", "placeholderText": "Plan, payment, and invoice management will live here after billing integration is added." }, "connections": { "title": "Connections", "description": "Organization-level connectors and data mappings.", "placeholderTitle": "No organization connections configured", "placeholderText": "Connector authorization flows are intentionally out of scope for this UI shell." }, "workspaces": { "title": "Workspaces", "description": "Brand and client workspaces owned by this organization.", "empty": "No workspaces belong to this organization yet." } }, "roles": { "Owner": "Owner", "Admin": "Admin", "BillingManager": "Billing manager", "ConnectorManager": "Connector manager", "Member": "Member" }, "permissions": { "title": "Your permissions", "description": "Current organization permissions returned by the API.", "items": { "ManageOrganizationSettings": "Manage settings", "ManageOrganizationMembers": "Manage members", "CreateWorkspaces": "Create workspaces", "ManageWorkspaces": "Manage workspaces", "ManageBilling": "Manage billing", "ManageConnectors": "Manage connectors", "AccessOwnedWorkspaces": "Access owned workspaces" } } }, "nav": { "brandCaption": "Approval workflow", "workspace": "Workspace", "notifications": "Notifications", "dashboard": "Dashboard", "overview": "Overview", "workspacePlan": "Content", "mediaLibrary": "Media Library", "myFeedback": "My Feedback", "feedbackReview": "Feedback Review", "channels": "Channels", "campaigns": "Campaigns", "reviewQueue": "Review Queue", "content": "Content", "profile": "Profile", "signIn": "Sign in", "settings": "Settings", "language": "Language", "signOut": "Sign out", "noWorkspace": "No workspace" }, "notifications": { "title": "Notifications", "unread": "unread", "loading": "Loading notifications...", "empty": "No workflow notifications yet.", "events": { "approvalRequested": "Approval requested", "approvalDecisionRecorded": "Approval decision recorded", "commentCreated": "Comment added", "commentResolved": "Comment resolved", "contentCreated": "Content item created", "revisionCreated": "Revision created", "statusUpdated": "Status updated", "assetLinked": "Asset linked", "assetRevisionCreated": "Asset revision created", "feedbackReportCreated": "New feedback report", "feedbackDeveloperCommented": "Developer commented", "feedbackStatusChanged": "Feedback status changed", "feedbackReporterCommented": "Reporter replied" } }, "feedback": { "button": "Feedback", "open": "Send product feedback", "eyebrow": "Product feedback", "title": "Send feedback", "capture": "Capture screen", "removeCapture": "Remove capture", "noCapture": "Capture the current app viewport if a screenshot would help.", "captureFailed": "The screenshot could not be captured. You can still submit feedback without it.", "submit": "Submit feedback", "submitted": "Feedback submitted.", "submitFailed": "Feedback could not be submitted.", "discardConfirm": "Discard this unsent feedback?", "textPrompt": "Text label", "types": { "bug": "Bug", "suggestion": "Suggestion", "request": "Request" }, "fields": { "type": "Type", "description": "Description", "descriptionPlaceholder": "Describe what happened, what you expected, or what would improve the workflow." }, "tools": { "crop": "Crop", "arrow": "Arrow", "ellipse": "Circle", "line": "Line", "freehand": "Freehand", "text": "Text label", "undo": "Undo", "clear": "Clear and reset" }, "review": { "eyebrow": "Developer review", "title": "Product feedback", "description": "Review submitted bugs, suggestions, and requests across all workspaces.", "refresh": "Refresh feedback", "loading": "Loading feedback...", "empty": "No feedback matches the current filters.", "emptyValue": "Not captured", "noContext": "No workspace context", "lastActivity": "Last activity", "metrics": { "total": "Total reports", "visible": "Visible", "new": "New", "planned": "Planned" }, "filters": { "search": "Search feedback", "type": "Type", "status": "Status", "tag": "Tag", "reporter": "Reporter", "workspace": "Workspace", "fromDate": "From date", "toDate": "To date", "sort": "Sort", "clear": "Clear filters" }, "sort": { "lastActivity": "Last activity", "newest": "Newest", "oldest": "Oldest" }, "errors": { "loadFailed": "Feedback could not be loaded.", "detailFailed": "The feedback report could not be loaded." }, "detail": { "back": "Back to feedback", "eyebrow": "Feedback detail", "report": "Report", "screenshot": "Screenshot", "download": "Download original", "openOriginal": "Open original", "screenshotAlt": "Feedback screenshot", "noScreenshot": "No screenshot was attached.", "timeline": "Comments and activity", "noTimeline": "No comments or activity yet.", "commentLabel": "Developer comment", "addComment": "Add comment", "commenting": "Adding comment...", "commentAdded": "Comment added.", "commentFailed": "Comment could not be added.", "reviewControls": "Review controls", "saved": "Feedback updated.", "saveFailed": "Feedback could not be updated.", "reporter": "Reporter", "activityLabel": "Activity", "metadata": { "title": "Captured metadata", "path": "Submitted path", "userAgent": "Browser", "viewport": "Viewport", "appVersion": "App version", "created": "Created", "lastActivity": "Last activity" }, "context": { "title": "Context", "workspace": "Workspace", "client": "Client", "campaign": "Campaign", "contentItem": "Content item" }, "activity": { "updated": "Updated feedback.", "statusChanged": "Changed status from {from} to {to}.", "typeChanged": "Changed type from {from} to {to}.", "tagsChanged": "Changed tags from {from} to {to}." } } }, "mine": { "eyebrow": "My feedback", "title": "My Feedback", "description": "Track the product feedback you have submitted across workspaces.", "refresh": "Refresh my feedback", "empty": "No feedback matches the current filters.", "unread": "Unread feedback activity", "metrics": { "active": "Active reports", "unread": "Unread", "visible": "Visible" }, "errors": { "loadFailed": "Your feedback could not be loaded.", "detailFailed": "This feedback report could not be loaded." }, "detail": { "back": "Back to my feedback", "eyebrow": "My feedback detail", "commentLabel": "Follow-up comment", "commentAdded": "Comment added.", "commentFailed": "Comment could not be added.", "cancel": "Cancel report", "cancelPrompt": "Optional cancellation reason", "cancelled": "Feedback cancelled.", "cancelFailed": "Feedback could not be cancelled." } } }, "sidebar": { "allClients": "All clients", "allChannels": "All channels", "allCampaigns": "All campaigns", "allReviewItems": "Full review queue", "noClients": "No clients yet.", "noChannels": "No channels yet.", "noCampaigns": "No campaigns yet.", "noReviewItems": "No review items right now." }, "settings": { "eyebrow": "Settings", "title": "Account settings", "userInformation": "User information", "workspaces": "Workspaces", "integrations": "Integrations" }, "dashboard": { "eyebrow": "Workspace schedule", "title": "Schedule", "description": "See what is scheduled for a given day and review the posting agenda in order.", "workspaceLabel": "Active workspace", "loading": "Loading workspace data...", "calendarKicker": "Daily agenda", "executionKicker": "Next up", "riskKicker": "Delivery risk", "reviewKicker": "Review pulse", "upcomingContent": "Upcoming content", "deliveryRisks": "What can slip", "overdueItems": "Overdue items", "approvalBlockers": "Awaiting approval or revisions", "unscheduledCampaigns": "Campaigns without scheduled content", "reviewQueueSnapshot": "Review queue snapshot", "emptyUpcoming": "No upcoming scheduled content.", "emptyOverdue": "Nothing overdue right now.", "emptyApproval": "No approval blockers at the moment.", "emptyCampaigns": "Every campaign has at least one scheduled content item.", "emptyReviewQueue": "No active review queue items.", "previousDay": "Previous day", "nextDay": "Next day", "today": "Today", "month": "Month", "week": "Week", "campaignDeadline": "Campaign deadline", "emptyPeriod": "No scheduled items.", "daySummary": "{content} content items · {campaigns} campaign deadlines", "moreItems": "+{count} more", "emptyDayAgenda": "No content is scheduled for this day.", "campaignProgress": "{scheduled} scheduled · {approved} approved", "missingSchedule": "Needs content scheduled", "noDueDate": "No due date", "labels": { "unassignedCampaign": "Unassigned campaign" }, "readiness": { "building": "In production", "approval": "Awaiting approval", "rework": "Needs revision", "ready": "Approved", "published": "Published", "blocked": "Blocked", "archived": "Archived", "scheduled": "Scheduled", "missing": "No content scheduled" }, "stats": { "scheduledThisDay": "Scheduled this day", "overdue": "Overdue", "awaitingApproval": "Awaiting approval", "readyToShip": "Ready to ship" } }, "overview": { "eyebrow": "Portfolio overview", "title": "Cross-workspace timeline", "description": "See upcoming deliveries, risks, and activity across every workspace you can access.", "loading": "Loading overview data...", "workspacesKicker": "Access scope", "workspaceRollup": "Workspace rollup", "timelineKicker": "Upcoming", "upcomingTitle": "Scheduled across workspaces", "riskKicker": "Watch list", "risksTitle": "Items already at risk", "activityKicker": "Recent activity", "activityTitle": "Latest workflow events", "emptyUpcoming": "No upcoming scheduled items across your workspaces.", "emptyRisks": "No cross-workspace delivery risks right now.", "emptyActivity": "No recent workflow activity yet.", "labels": { "campaigns": "campaigns", "upcoming": "upcoming", "blocked": "blocked" }, "stats": { "workspaces": "Workspaces", "campaigns": "Campaigns", "upcoming": "Upcoming items", "blockers": "At-risk items" } }, "clients": { "eyebrow": "Client management", "title": "Clients", "description": "Client accounts, brand identity, and primary approval contacts.", "newClient": "New client", "createTitle": "Create client", "loading": "Loading clients...", "empty": "No clients are available for the active workspace.", "noPrimaryContact": "No primary contact set", "noPrimaryContactEmail": "No primary contact email set", "errors": { "nameRequired": "Client name is required.", "createFailed": "The client could not be created." }, "fields": { "name": "Client name", "portraitUrl": "Client logo or portrait URL", "primaryContactName": "Primary contact name", "primaryContactEmail": "Primary contact email", "primaryContactPortraitUrl": "Primary contact portrait URL" } }, "campaigns": { "eyebrow": "Campaign planning", "title": "Campaigns", "description": "Campaigns grouped inside the active workspace by status, date range, and planning notes.", "newCampaign": "New campaign", "createTitle": "Create campaign", "loading": "Loading campaigns...", "empty": "No campaigns are available for the active workspace.", "unknownClient": "Unknown client", "noDateRange": "No date range", "errors": { "required": "Campaign name and date range are required.", "invalidDateRange": "The end date must be on or after the start date.", "workspaceAccountRequired": "This workspace needs an operational account before campaigns can be created.", "createFailed": "The campaign could not be created." }, "fields": { "client": "Client", "selectClient": "Select a client", "startDate": "Start date", "endDate": "End date", "name": "Campaign name", "description": "Description", "notes": "Notes" } }, "channels": { "title": "Channels", "description": "Add channels to the workspace.", "createTitle": "Create channel", "empty": "No channels are available for the active workspace yet.", "emptyAction": "Add a channel for {network}", "nextDue": "Next due", "noScheduled": "Nothing scheduled", "fields": { "name": "Channel name", "network": "Network" }, "metrics": { "scheduled": "Scheduled", "ready": "Ready", "blocked": "Blocked" }, "errors": { "createFailed": "The channel could not be created." } }, "reviewQueue": { "eyebrow": "Review workflow", "title": "Review queue", "description": "Pending approvals, revisions, and change requests for the active workspace.", "empty": "No review items are available for the active workspace." }, "contentItems": { "eyebrow": "Content workflow", "title": "Content items", "description": "Reviewable units with assets, copy, and approval status inside the active workspace.", "newItem": "New content item", "createTitle": "Create content item", "loading": "Loading content items...", "empty": "No content items are available for the active workspace.", "noDueDate": "No due date", "assetsHelper": "Google Drive assets are now linked from the content item detail page after creation.", "errors": { "required": "Title, campaign, message, and targets are required.", "workspaceAccountRequired": "This workspace needs an operational account before content can be created.", "createFailed": "The content item could not be created." }, "fields": { "title": "Title", "client": "Client", "selectClient": "Select a client", "campaign": "Campaign", "selectCampaign": "Select a campaign", "dueDate": "Due date", "publicationTargets": "Publication targets", "publicationTargetsPlaceholder": "Instagram Reel, TikTok", "publicationMessage": "Publication message", "hashtags": "Hashtags", "hashtagsPlaceholder": "#launch #brand #campaign", "assets": "Assets" } }, "userSettings": { "eyebrow": "User information", "title": "Profile and identity", "description": "Manage the portrait and account details shown inside the workspace.", "updatePortrait": "Update portrait", "accountDetails": "Account details", "accountDetailsDescription": "Edit the profile details other workspace members see.", "saveDetails": "Save details", "saved": "Profile details saved", "portraitSaved": "Portrait saved", "alias": "Alias", "firstname": "First name", "lastname": "Last name", "fullName": "Full name", "email": "Email", "noEmail": "No email set", "cropperTitle": "Update user portrait", "savePortrait": "Save portrait", "choosePortrait": "Choose portrait", "errors": { "emailRequired": "Email is required.", "saveFailed": "Profile details could not be saved.", "portraitFailed": "Portrait could not be saved." } }, "workspaceSettings": { "eyebrow": "Settings", "title": "Workspace settings", "description": "Configure the current workspace across general details, members, workflow, and connectors.", "currentWorkspace": "Current workspace", "noWorkspaceSelected": "No workspace selected", "activeWorkspace": "Active workspace", "contextNote": "These settings apply to the current workspace only.", "inviteTitle": "Invite workspace members", "inviteDescription": "Invite clients, subcontractors, or teammates into the active workspace.", "inviteEmpty": "No pending invites for this workspace yet.", "sendInvite": "Send invite", "reset": "Reset", "errors": { "required": "All workspace fields are required.", "createFailed": "The workspace could not be created.", "updateFailed": "The workspace settings could not be saved.", "logoUploadFailed": "The workspace logo could not be saved.", "inviteRequired": "Email and role are required to invite a member.", "inviteFailed": "The workspace invite could not be created." }, "fields": { "name": "Workspace name", "timeZone": "Time zone", "memberEmail": "Member email", "memberRole": "Role" }, "roles": { "administrator": "Administrator", "manager": "Manager", "client": "Client reviewer", "provider": "Subcontractor", "workspace-member": "Workspace member" }, "summary": { "name": "Name", "timeZone": "Time zone" }, "tabs": { "general": "General", "members": "Members", "workflow": "Workflow", "connectors": "Connectors" }, "members": { "inviteTitle": "Invite", "activeTitle": "Members", "activeDescription": "See everyone who currently belongs to the active workspace.", "activeEmpty": "No members found for this workspace.", "pendingTitle": "Pending invitations", "pendingDescription": "Track who has been invited into the active workspace." }, "connectors": { "title": "Connectors", "description": "Manage workspace-level connectors that feed operational features like the media library.", "openMediaLibrary": "Open media library", "googleDrive": { "title": "Google Drive", "description": "This connector should power the workspace media sync for images, videos, and other shared files.", "status": "Pending setup" } }, "general": { "detailsTitle": "Workspace details", "detailsDescription": "Update the workspace name and default time zone used across schedules and workspace views.", "saveAction": "Save workspace", "saved": "Workspace settings saved." }, "logo": { "title": "Workspace logo", "description": "Use a local file or remote image, then crop it for the workspace.", "changeAction": "Change image", "cropperTitle": "Update workspace logo", "saveAction": "Save logo", "chooseAction": "Choose logo", "saved": "Workspace logo saved." }, "approvals": { "flowTitle": "Approval flow", "flowDescription": "Configure how content approval works across this workspace.", "previewTitle": "Flow preview", "previewDescription": "This is the sequence the workspace will use based on the current configuration.", "saved": "Approval flow saved.", "saveAction": "Save approval flow", "fields": { "approvalMode": "Approval mode", "schedulePostsAutomaticallyOnApproval": "Schedule posts automatically on approval", "lockContentAfterApproval": "Lock content after approval", "sendAutomaticApprovalReminders": "Send automatic approval reminders" }, "fieldHelp": { "schedulePostsAutomaticallyOnApproval": "Final approval moves content to Scheduled when it already has a planned publish date.", "lockContentAfterApproval": "Approval-controlled content becomes locked after final approval. Scheduling fields remain editable.", "sendAutomaticApprovalReminders": "Current approvers receive daily reminders while an approval step is pending." }, "modes": { "none": "None", "optional": "Optional", "required": "Required", "multiLevel": "Multi-level" }, "modeHelp": { "none": "Content skips approval workflow and can become Approved without approval actions.", "optional": "A one-step approval workflow is available but does not block publication workflow.", "required": "At least one approval is required before content can become Approved or Scheduled.", "multiLevel": "Approval uses ordered steps with targeted approvers for each step." }, "editor": { "title": "Multi-level steps", "description": "Define who approves each ordered step before content reaches final approval.", "addStep": "Add step", "empty": "Add at least one approval step before saving multi-level approval.", "unnamedStep": "Unnamed step", "moveUp": "Move step up", "moveDown": "Move step down", "removeStep": "Remove step", "selectMember": "Select a member", "selectMembers": "Select one or more members. Hold Ctrl or Command to select multiple.", "defaultStepName": "Approval step {number}", "stepNumber": "Step {number}", "fields": { "name": "Display name", "targetType": "Target type", "targetValue": "Target", "requiredApproverCount": "Required approvers" }, "targetTypes": { "role": "Role", "membership": "Membership", "member": "Member" }, "memberships": { "team": "Team", "client": "Client" }, "errors": { "atLeastOneStep": "Multi-level approval requires at least one step.", "fixInvalidSteps": "Fix the highlighted approval steps before saving.", "nameRequired": "Enter a step name.", "targetRequired": "Choose who can approve this step.", "notEnoughMembers": "Select at least as many members as required approvers.", "requiredApproverCount": "Enter at least 1 required approver." } }, "steps": { "none": "Approval skipped", "approval": "Approval", "publish": "Publishing handoff" }, "stepDetail": { "none": "No approval workflow is created for content in this workspace.", "optional": "Approval can be collected, but it is not required before publication workflow.", "approverCount": "{count} approver(s) required", "multiLevelTarget": "{count} approver(s) from {target}", "autoSchedule": "Approved content with a planned publish date moves to Scheduled.", "manualSchedule": "Approved content remains Approved until scheduling is handled." } } }, "integrations": { "eyebrow": "Integrations", "title": "Google Drive and API keys", "description": "This is where workspace-level integrations and credential configuration should live.", "statusLabel": "Status", "pendingTitle": "Configuration UI pending", "googleDrive": { "title": "Google Drive", "description": "Configure the workspace connection used for asset linking and revision intake.", "nextStep": "Next step: add stored workspace integration settings and connect them to the asset-link flow." }, "apiKeys": { "title": "API keys", "description": "Workspace-scoped secrets and external service credentials should be managed here.", "nextStep": "Next step: add secure backend persistence and masked key management." } }, "mediaLibrary": { "eyebrow": "Media library", "title": "Workspace media", "description": "Manage the shared image and video library that should sync with Google Drive for this workspace.", "syncCard": { "title": "Google Drive sync", "description": "Use this area to connect the workspace drive, pull approved media in, and keep the library aligned with external folders." }, "mediaTypesTitle": "Supported media", "mediaTypesDescription": "The library should become the single place to browse visual assets before they are linked into content work.", "mediaTypes": { "images": "Images, graphics, and brand visuals", "videos": "Videos, reels, and motion exports" }, "workflowTitle": "Planned workflow", "workflowDescription": "This page is the intended home for the Google Drive sync flow we discussed.", "workflow": { "connectDrive": "Connect the workspace Google Drive source.", "syncAssets": "Sync image and video assets into the internal library.", "organizeLibrary": "Review, tag, and reuse media from one workspace-level place." }, "statusLabel": "Status", "pendingTitle": "Management UI pending", "pendingDescription": "The navigation and page entry point are in place. Next step is wiring actual Drive sync, listing, filters, and asset actions." }, "errors": { "unexpected": "An unexpected error occurred", "imageLoad": "Error loading image", "imageUpload": "Error uploading image" } }