i18n/en-US.json
Rama main · réplica de lectura del repositorio original.
{
"common": {
"appName": "Kaneo",
"actions": {
"cancel": "Cancel",
"close": "Close",
"clearAll": "Clear all",
"delete": "Delete",
"deleting": "Deleting...",
"markAllRead": "Mark all read",
"remove": "Remove",
"reset": "Reset",
"filter": "Filter"
},
"a11y": {
"toggleSidebar": "Toggle sidebar"
},
"sidebar": {
"title": "Sidebar",
"mobileDescription": "Displays the mobile sidebar."
},
"empty": {
"loading": "Loading..."
},
"pagination": {
"label": "Pagination",
"previous": "Previous",
"next": "Next",
"previousPage": "Go to previous page",
"nextPage": "Go to next page",
"morePages": "More pages"
},
"breadcrumb": {
"label": "Breadcrumb",
"more": "More"
},
"language": {
"english": "English",
"german": "German",
"greek": "Greek",
"macedonian": "Macedonian",
"french": "French",
"spanish": "Spanish",
"dutch": "Dutch",
"korean": "Korean",
"chinese": "Chinese",
"italian": "Italian"
},
"people": {
"someone": "Someone",
"unknown": "Unknown"
},
"error": {
"title": "Something went wrong",
"description": "The page crashed unexpectedly. Refreshing usually fixes it.",
"troubleshooting": "Troubleshooting steps:",
"tryAgain": "Try again",
"viewDeploymentGuide": "View Deployment Guide",
"refreshPage": "Refresh Page",
"messages": {
"cors": "Unable to connect to the server. This might be due to CORS configuration issues.",
"network": "Network error. Please check your internet connection and try again.",
"auth": "Authentication failed. Please sign in again.",
"server": "Server error. Please try again later.",
"unknown": "An unexpected error occurred."
},
"troubleshootingSteps": {
"cors": {
"checkApiRunning": "Make sure your API server is running",
"checkApiUrl": "Check that VITE_API_URL in your frontend .env matches your API server URL",
"verifyCorsOrigins": "Verify CORS_ORIGINS in your API .env includes your frontend URL",
"checkProtocol": "Ensure both frontend and API are using the same protocol (http/https)",
"checkAccessibility": "Check that your API server is accessible from your browser"
},
"network": {
"checkConnection": "Check your internet connection",
"verifyApiRunning": "Verify the API server is running and accessible",
"tryRefresh": "Try refreshing the page",
"checkFirewall": "Check if there are any firewall or proxy issues"
}
}
},
"modals": {
"createProject": {
"title": "Create a new project",
"breadcrumbNew": "Create a new project",
"workspaceFallback": "WORKSPACE",
"description": "Create a new project in your workspace by providing a name, key, and selecting an icon.",
"pickIcon": "Pick icon",
"searchIcons": "Search icons...",
"projectName": "Project name",
"keyLabel": "Key:",
"keyHint": "Used for ticket IDs (e.g., {{example}}-123)",
"createButton": "Create Project",
"successToast": "Project created successfully",
"errorToast": "Failed to create project"
},
"createWorkspace": {
"breadcrumbKaneo": "KANEO",
"title": "Create a new workspace",
"description": "Create a new workspace by providing a name for your workspace.",
"namePlaceholder": "Workspace name",
"descriptionPlaceholder": "Add description...",
"createButton": "Create Workspace",
"successToast": "Workspace created successfully",
"errorToast": "Failed to create workspace"
},
"createTask": {
"breadcrumbTask": "TASK",
"selectProject": "Select project",
"title": "New Task",
"description": "Create a new task by providing a title, description, and other details.",
"statusLoadError": "Project statuses couldn’t be loaded.",
"taskTitlePlaceholder": "Task title",
"descriptionPlaceholder": "Add a description for your task...",
"chooseProjectForImages": "Choose a project before uploading images.",
"prepareTaskError": "Failed to prepare task",
"successCreated": "Task created successfully",
"successUpdated": "Task updated successfully",
"createError": "Failed to create task",
"priority": "Priority",
"statusFallback": "In Progress",
"startDate": "Start date",
"dueDate": "Due date",
"clearStartDate": "Clear start date",
"assign": "Assign",
"assignUnassigned": "Unassigned",
"assignUnassignedTitle": "Unassigned",
"labels": "Labels",
"searchLabels": "Search labels...",
"noLabelsFound": "No labels found",
"createLabel": "Create \"{{name}}\"",
"chooseColor": "Choose color",
"labelCreated": "Label created",
"labelCreateError": "Failed to create label",
"createMore": "Create more",
"createButton": "Create Task",
"discardTitle": "Discard task?",
"discardDescription": "Your unsaved task details will be lost.",
"discardButton": "Discard task",
"untitledTask": "Untitled task",
"labelColors": {
"stone": "Stone",
"slate": "Slate",
"lavender": "Lavender",
"sage": "Sage",
"forest": "Forest",
"amber": "Amber",
"terracotta": "Terracotta",
"rose": "Rose",
"crimson": "Crimson",
"ocean": "Ocean",
"sky": "Sky",
"lagoon": "Lagoon",
"orchid": "Orchid"
}
}
},
"editor": {
"link": {
"label": "Link URL",
"placeholder": "Paste or type a link…",
"apply": "Apply link",
"remove": "Remove link"
}
}
},
"auth": {
"signIn": {
"pageTitle": "Sign In",
"subtitle": {
"emailOrProvider": "Use your email or a connected account.",
"email": "Enter your email and we'll send you a sign-in code.",
"password": "Use your email and password.",
"passwordOrProvider": "Use your password or a connected account.",
"providers": "Choose how you want to sign in.",
"sso": "Your organization manages sign-in here."
},
"lastUsed": "Last used",
"guestError": "Failed to sign in as guest",
"errors": {
"account_not_linked": "This identity could not be linked to the existing account. Sign in by email to verify the account, then try SSO again. If email sign-in is unavailable, contact your administrator.",
"oauth_code_verification_failed": "OAuth verification failed. Please try again.",
"registration_is_currently_disabled_you_need_a_valid_invitation_to_create_an_account_": "Registration is currently disabled. You need a valid invitation to create an account.",
"use_a_permanent_email_address_disposable_addresses_cannot_create_accounts_": "Use a permanent email address. Disposable addresses cannot create accounts."
},
"instanceStatusError": "Couldn't reach the server. Please retry in a moment.",
"heading": "Sign in to Kaneo",
"submitPassword": "Sign in",
"invitation": {
"title": "{{inviterName}} invited you to {{workspaceName}}",
"fallbackTitle": "You've been invited",
"description": "Sign in with the email that received the invitation. You'll join the workspace right after."
},
"footer": {
"newHere": "New to Kaneo?",
"createAccount": "Create an account",
"inviteOnly": "Accounts here are invite-only. Ask an admin for an invitation.",
"providerSignUp": "New here? Sign in with a provider above to create an account.",
"anyProvider": "New here? Any option above creates your account.",
"contactAdmin": "Trouble signing in? Contact your administrator.",
"justLooking": "Just looking?"
},
"autoLogin": {
"title": "Signing you in",
"subtitle": "Taking you to your organization's sign-in page.",
"opening": "Opening {{provider}}…",
"stuck": "Not moving?",
"continue": "Continue to {{provider}}"
}
},
"providers": {
"google": "Google",
"discord": "Discord",
"github": "GitHub",
"sso": "SSO",
"continueWith": "Continue with {{provider}}",
"error": "Couldn't sign in with {{provider}}. Try again."
},
"forms": {
"or": "or",
"email": "Email",
"password": "Password",
"emailPlaceholder": "me@example.com",
"passwordPlaceholder": "••••••••",
"showPassword": "Show password",
"hidePassword": "Hide password",
"name": "Name",
"namePlaceholder": "Jane Doe",
"invalidEmail": "Enter a full email address, like name@company.com.",
"nameRequired": "Enter your name.",
"passwordRequired": "Enter your password.",
"passwordTooShort": "Use at least 8 characters.",
"disposableEmail": "Use a permanent email address. Disposable addresses cannot create accounts.",
"continueWithEmail": "Continue with email",
"captchaChecking": "Running a quick security check before you can continue.",
"captchaFailed": "The security check didn't load, so signing in is paused. Check your connection or content blocker.",
"captchaRetry": "Try again"
},
"checkEmail": {
"pageTitle": "Check Your Email",
"title": "Check your email",
"inboxMessage": "We've sent you a temporary login link. Please check your inbox at <email>{{email}}</email>.",
"emailFallback": "your email address",
"backToLogin": "Back to login"
},
"signUp": {
"pageTitle": "Create Account",
"registrationDisabledAlert": "Registration is currently disabled. If you were invited, enter the email address that received the invitation to create your account.",
"continueAsGuest": "Continue as guest",
"toggleMessage": "Already have an account?",
"toggleLink": "Sign in",
"instanceStatusError": "Couldn't reach the server. Please retry in a moment.",
"instanceAdminTitle": "Set up your Kaneo instance",
"instanceAdminSubtitle": "This account becomes the instance administrator with full access.",
"heading": "Create your account",
"submitPassword": "Create account",
"failed": "Couldn't create your account. Try again.",
"subtitle": {
"email": "Start with your email. We'll send a code, no password needed.",
"password": "Add your name, email, and a password to get started.",
"providers": "Use a connected account to create yours."
},
"invitation": {
"description": "Use the email that received the invitation. You'll join the workspace right after."
},
"verifyEmail": "Check your email to confirm your address, then sign in."
},
"verifyOtp": {
"pageTitle": "Verify Code",
"validation": {
"codeLength": "Code must be 6 digits"
},
"toast": {
"invalidCode": "Invalid verification code",
"verifyFailed": "Failed to verify code",
"resendFailed": "Failed to resend code",
"resendSuccess": "New verification code sent!"
},
"heading": "Check your email",
"description": "We sent a 6-digit code to {{email}}. It expires in {{minutes}} minutes.",
"label": "Verification code",
"submit": "Verify and continue",
"didntGetIt": "Didn't get it?",
"resendCode": "Resend code",
"useDifferentEmail": "Use a different email",
"expired": "This code expired. Send a new one.",
"tooManyAttempts": "Too many attempts. Send a new code."
},
"otpSignIn": {
"sendFailed": "Failed to send verification code"
},
"signInForm": {
"failedSignIn": "Failed to sign in",
"emailNotVerified": "Confirm your email address first. We sent you a new link."
},
"invitation": {
"pageTitleAccept": "Accept Invitation",
"pageTitleError": "Invitation Error",
"pageTitleInvalid": "Invalid Invitation",
"joinWorkspace": "Join {{workspaceName}}",
"createAccount": "Create account",
"signIn": "Sign in",
"toast": {
"acceptFailed": "Failed to accept invitation",
"acceptSuccess": "Invitation accepted! Welcome to the team."
},
"description": "{{inviterName}} invited you to this workspace on Kaneo.",
"invitedBy": "Invited by",
"sentTo": "Sent to",
"signedInAs": "Signed in as",
"expires": "Expires",
"notNow": "Not now",
"join": "Join workspace",
"switchAccount": "Switch account",
"goToKaneo": "Go to Kaneo",
"mismatch": {
"title": "Signed in with a different email",
"description": "This invitation was sent to {{invitedEmail}}. You're signed in as {{email}}."
},
"expired": {
"title": "This invitation has expired",
"description": "Ask {{inviterName}} to send you a new one for {{workspaceName}}."
},
"invalid": {
"title": "This invitation is no longer valid",
"description": "It may have been accepted or canceled. Ask a workspace admin for a new one."
},
"loadFailed": {
"title": "Couldn't load this invitation",
"description": "Check your connection and reload the page."
}
},
"onboarding": {
"pageTitle": "Welcome to Kaneo",
"workspaceName": "Workspace name",
"workspaceNamePlaceholder": "e.g. Acme Inc, My Team",
"restrictedTitle": "You need an invitation",
"restrictedSubtitle": "Only an instance administrator can create workspaces here. Ask one to invite you, then reload this page.",
"restrictedCheckInvitations": "Check invitations",
"toast": {
"createFailed": "Failed to create workspace"
},
"validation": {
"workspaceNameRequired": "Workspace name is required",
"projectNameRequired": "Give your first project a name"
},
"cloud": {
"usageLabel": "Who will use this workspace?",
"usageSolo": "Just me",
"usageSoloDescription": "Keep track of your own work",
"usageTeam": "My team",
"usageTeamDescription": "Plan and ship work together",
"invite": {
"emailLabel": "Teammate email {{index}}",
"emailPlaceholder": "teammate@company.com",
"addAnother": "Add another",
"remove": "Remove email {{index}}",
"skip": "Skip for now",
"invalidEmail": "Enter a valid email address",
"sent_one": "Invitation sent",
"sent_other": "{{count}} invitations sent",
"failed": "Couldn't invite {{email}}: {{message}}"
},
"plan": {
"trialUsed": "You've already used your free trial. Pick a plan to start creating projects and tasks.",
"recommended": "Recommended",
"continueTrial": "Start free trial"
}
},
"projectNameDefault": "My first project",
"starterTasks": {
"drag": {
"title": "Drag this card to the next column",
"description": "Cards move from column to column as work moves forward. Drag this one to the next column, or open it and change its status."
},
"details": {
"title": "Open this task and add a subtask",
"description": "A task can hold a description, subtasks, labels, an assignee and a due date. Add a subtask to this one to try it."
},
"invite": {
"title": "Invite your team",
"description": "Kaneo works best with everyone in it. Open **Members** in the sidebar to invite people by email."
},
"integrations": {
"title": "Connect GitHub, GitLab or Gitea",
"description": "Sync issues and move tasks automatically when pull requests are opened and merged. Set it up under **Project settings**."
},
"create": {
"title": "Create your own task",
"description": "Use the **+** next to a column name, or press **T** then **C**. Delete these starter tasks whenever you're ready."
}
},
"progress": "Step {{current}} of {{total}}",
"continue": "Continue",
"signedInAs": "Signed in as {{email}}",
"signOut": "Sign out",
"workspace": {
"title": "Name your workspace",
"description": "This is where your projects live. Use your team or company name. You can change it later."
},
"usage": {
"title": "Who's it for?",
"description": "We'll set {{name}} up to match. You can always invite people later."
},
"project": {
"title": "Start your first project",
"description": "We'll add a few starter tasks to show you around. Rename or delete them anytime.",
"label": "Project name",
"ticketStart": "Task IDs will start at {{ticket}}."
},
"invite": {
"title": "Bring your team",
"description": "They'll get an email to join {{name}}. Skip this if you'd rather look around first.",
"label": "Teammate emails",
"send_one": "Send {{count}} invite",
"send_other": "Send {{count}} invites",
"sendNone": "Send invites"
},
"plan": {
"title": "How do you want to start?",
"descriptionTrial_one": "Every plan includes unlimited projects and tasks. Try {{name}} free for {{count}} day, or subscribe now.",
"descriptionTrial_other": "Every plan includes unlimited projects and tasks. Try {{name}} free for {{count}} days, or subscribe now.",
"choose": "Choose a plan",
"description": {
"team": "Unlimited members, roles and permissions",
"personal": "For one person"
},
"perUserMonth": "per user / month",
"perMonth": "per month",
"subscribe": "Subscribe to {{plan}}",
"checkout": "Continue to checkout",
"trialNote": "No card needed for the trial. Payments are processed by Creem.",
"paymentNote": "Payments are processed by Creem."
},
"ready": {
"title": "{{name}} is ready",
"description": "Here's what we set up. You can change any of it later.",
"workspace": "Workspace",
"project": "First project",
"projectValue_one": "{{name}}, with {{count}} starter task",
"projectValue_other": "{{name}}, with {{count}} starter tasks",
"invitations": "Invitations",
"invitationsValue_one": "Sent to {{count}} person",
"invitationsValue_other": "Sent to {{count}} people",
"open": "Open {{name}}"
},
"preview": {
"untitled": "Your workspace"
}
},
"profileSetup": {
"pageTitle": "Complete Profile",
"completeTitle": "Complete your profile",
"subtitle": "Please enter your name to get started",
"yourName": "Your name",
"namePlaceholder": "e.g. John Doe",
"saving": "Saving...",
"continue": "Continue",
"welcome": "Welcome, {{name}}!",
"redirecting": "Taking you to your dashboard...",
"toast": {
"updateSuccess": "Profile updated successfully",
"updateFailed": "Failed to update profile"
},
"validation": {
"nameRequired": "Name is required",
"nameShort": "Name must be at least 2 characters"
}
},
"passwordReset": {
"forgotPassword": "Forgot password?",
"requestTitle": "Reset your password",
"requestSubtitle": "Enter your email and we’ll send you a password reset link.",
"sendLink": "Send reset link",
"requestError": "Could not request a reset link. Please try again.",
"unavailable": "Password reset is unavailable. Contact your instance administrator.",
"configError": "Could not reach the server. Please reload the page to try again.",
"resetTitle": "Choose a new password",
"newPassword": "New password",
"confirmPassword": "Confirm new password",
"passwordMismatch": "The passwords do not match.",
"passwordLength": "Use between 8 and 128 characters.",
"invalidLink": "This reset link is invalid or has expired. Request a new link to continue.",
"requestNewLink": "Request a new link",
"resetError": "Could not reset your password. Please try again.",
"success": "Your password has been reset. Sign in with your new password.",
"backToSignIn": "Back to sign in",
"sentTitle": "Check your inbox",
"sentDescription": "If an account exists for {{email}}, a link to reset your password is on its way. It expires in 1 hour.",
"sentHelpTitle": "Didn't get it?",
"sentHelpDescription": "Check your spam folder, or request another link in a minute.",
"rememberedIt": "Remembered it?",
"resetDescription": "Use 8 to 128 characters. Other devices will be signed out.",
"updatePassword": "Update password",
"changedMind": "Changed your mind?",
"invalidLinkTitle": "This link has expired",
"successTitle": "Password updated"
},
"page": {
"terms": "Terms",
"privacy": "Privacy"
},
"device": {
"connect": {
"title": "Connect a device",
"description": "Enter the code shown in your terminal or app to link it to your Kaneo account.",
"label": "Device code",
"submit": "Continue",
"noCode": "No code yet? Start signing in from your app first.",
"codeRequired": "Enter the code shown on your device.",
"invalidCode": "That code is invalid or has expired."
},
"approve": {
"pageTitle": "Approve device",
"title": "Connect this device?",
"description": "A device wants to sign in as {{email}}. Approve it only if you started this.",
"matchCode": "Check that this matches your device",
"deny": "Deny",
"approve": "Approve",
"failed": "Couldn't update the request. Try again."
},
"approved": {
"title": "Device connected",
"description": "Go back to your terminal or app. You can close this tab."
},
"denied": {
"title": "Request denied",
"description": "Nothing was connected. You can close this tab."
},
"openApp": "Open Kaneo",
"missing": {
"title": "No device code",
"description": "Open this page from your device, or enter the code yourself.",
"enterCode": "Enter a code"
},
"signIn": {
"title": "Sign in to connect your device",
"description": "You'll come right back here to approve it.",
"submit": "Sign in"
}
},
"mcp": {
"authorize": {
"title": "Authorize an MCP client",
"description": "It can act as you in every workspace you can access. Only continue if you started this connection.",
"client": "Client",
"unknownClient": "MCP client",
"selfReported": "Self-reported",
"redirect": "Sends you back to",
"signedInAs": "Signed in as",
"deny": "Deny",
"allow": "Allow access"
},
"expired": {
"title": "This request has expired",
"description": "Go back to your MCP client and connect again."
},
"signIn": {
"title": "Sign in to authorize this client",
"description": "You'll come right back here to review it.",
"submit": "Sign in"
}
}
},
"settings": {
"advancedSettings": "Advanced settings",
"advancedSettingsDescription": "Shows extra controls, like integration sync rules. Only on this browser.",
"syncRules": {
"title": "What syncs",
"sharedHint": "These rules apply to everyone using this project. Hiding advanced settings does not disable them.",
"outgoing": "Kaneo → repository",
"incoming": "Repository → Kaneo",
"outgoingHint": "Choose which Kaneo tasks can sync. Losing a matching label pauses both directions for an existing task.",
"incomingHint": "Choose which issues can be imported or create tasks. Use exact repository label names. Existing links follow the Kaneo task rule.",
"all": "All tasks and issues",
"filtered": "Only matching labels",
"any": "Any selected label",
"every": "All selected labels",
"matchLabels": "Label matching",
"repositoryLabel": "Repository label name",
"addLabel": "Add label",
"removeLabel": "Remove {{name}}",
"noLabels": "Create workspace labels before configuring a task filter.",
"selectLabel": "Select at least one label to preview this rule.",
"unavailableLabel": "Unavailable label",
"impactTitle": "What will change",
"impact": "Matching tasks: {{matching}} / {{total}} · New exports: {{create}} · Links to pause: {{pause}} · Links to review: {{review}}",
"preserveHint": "Pausing keeps both records and their link. Resuming requires a comparison; historical comments are never replayed.",
"previewing": "Checking sync impact…",
"saveError": "Could not apply these rules. The integration or task scope may have changed. Refresh the preview and try again.",
"refreshPreview": "Refresh preview",
"rulesChanged": "The saved rules changed while you were editing. Your draft is preserved. Review the current rules above before applying it, or load the saved rules.",
"loadSavedRules": "Load saved rules",
"missingLabels": "A selected workspace label is unavailable. Sync stays paused until the rule is repaired.",
"removeMissingLabels": "Remove unavailable labels",
"apply": "Apply sync rules",
"saved": "Sync rules saved",
"loading": "Loading sync rules…",
"loadError": "Sync rules could not be loaded.",
"advancedHint": "Enable Advanced settings in Preferences to edit these rules.",
"paused": "Sync paused",
"pausedHint": "Records and links are preserved. Tasks that match again need review before syncing resumes.",
"reviewRequired": "Matches the rule · review required",
"excluded": "Outside the current rule",
"review": "Review and resume",
"previous": "Previous",
"next": "Next",
"reviewTitle": "Review before resuming sync",
"reviewHint": "Compare the current title, description and open/closed state. Choose which side to keep for these fields. Labels and historical comments remain unchanged.",
"resumeError": "Could not resume. The task, issue or rule may have changed, or the provider is unavailable. Sync remains paused; refresh the comparison.",
"refreshComparison": "Refresh comparison",
"repository": "Repository",
"open": "Open",
"closed": "Closed",
"noDescription": "No description",
"useRepository": "Keep repository values",
"useKaneo": "Keep Kaneo values",
"exportPending": "Export matching tasks",
"inactiveHint": "This integration is paused. No tasks will be exported until it is reactivated.",
"allIssues": "All issues",
"allTasks": "All tasks",
"edit": "Edit",
"hidePaused": "Hide",
"issuesLabelled": "Issues labelled",
"joinAnd": "and",
"joinOr": "or",
"kaneoToProvider": "Kaneo to {{provider}}",
"pausedSummary_one": "{{count}} task stopped syncing because it no longer matched the sync rules.",
"pausedSummary_other": "{{count}} tasks stopped syncing because they no longer matched the sync rules.",
"providerToKaneo": "{{provider}} to Kaneo",
"reviewPaused": "Review",
"tasksLabelled": "Tasks labelled"
},
"account": "Account",
"administration": "Administration",
"developer": "Developer",
"information": "Profile",
"notifications": "Notifications",
"preferences": "Preferences",
"apiKeys": "API keys",
"adminUsers": {
"title": "Users",
"subtitle": "Everyone with an account on this Kaneo instance.",
"directoryTitle": "All users",
"searchCount_one": "{{count}} matching user",
"searchCount_other": "{{count}} matching users",
"refreshing": "Refreshing users",
"searchPlaceholder": "Search by name or email",
"searchLabel": "Search users",
"loadError": "Users could not be loaded.",
"retry": "Retry",
"emptyTitle": "No users found",
"emptyDescription": "Try another name or email address.",
"clearSearch": "Clear search",
"you": "You",
"previous": "Previous",
"next": "Next",
"pagination": "Page {{current}} of {{total}}",
"columns": {
"user": "User",
"role": "Role",
"status": "Status",
"joined": "Joined",
"actions": "Actions",
"lastActive": "Last active"
},
"roles": {
"admin": "Admin",
"user": "User"
},
"status": {
"active": "Active",
"deactivated": "Deactivated"
},
"actions": {
"open": "Actions for {{name}}",
"edit": "Edit",
"deactivate": "Deactivate",
"reactivate": "Reactivate",
"sendPasswordReset": "Send password reset link",
"sendVerification": "Resend verification email",
"markEmailVerified": "Mark email as verified",
"security": "Sessions & API keys"
},
"edit": {
"title": "Edit user",
"description": "Update this account's identity and instance-wide access.",
"name": "Full name",
"email": "Email address",
"role": "Global role",
"selfRoleHint": "You cannot change your own global role.",
"save": "Save changes",
"saving": "Saving…"
},
"confirm": {
"working": "Working…",
"deactivate": {
"title": "Deactivate this account?",
"description": "{{name}} will be signed out and unable to sign in until an administrator reactivates the account.",
"action": "Deactivate account"
},
"reactivate": {
"title": "Reactivate this account?",
"description": "{{name}} will be able to sign in and access their workspaces again.",
"action": "Reactivate account"
},
"delete": {
"title": "Permanently delete this account?",
"description": "This permanently deletes {{name}}, their sessions, memberships, and associated data. This cannot be undone.",
"action": "Delete permanently"
},
"sendPasswordReset": {
"title": "Send a password reset link?",
"action": "Send link"
},
"sendVerification": {
"title": "Resend the verification email?",
"action": "Send email"
},
"markEmailVerified": {
"title": "Mark this email as verified?",
"action": "Mark as verified"
}
},
"toast": {
"updated": "User updated",
"updateError": "Failed to update user",
"deactivated": "User deactivated",
"reactivated": "User reactivated",
"deleted": "User deleted",
"actionError": "Failed to update user status",
"createdLinkSent": "User created. Password link sent to {{email}}.",
"createdForSso": "User created for single sign-on.",
"createdNoSmtp": "User created. Set SMTP_HOST to send a password link.",
"createdLinkFailed": "User created. Password email failed; retry “Send password reset link”.",
"createError": "Failed to create user",
"passwordResetSent": "Password reset link sent to {{email}}",
"verificationSent": "Verification email sent to {{email}}",
"emailVerified": "Email marked as verified",
"emailError": "The email could not be sent",
"avatarChanged": "Profile picture updated",
"avatarRemoved": "Profile picture removed",
"avatarError": "Failed to update the profile picture"
},
"never": "Never",
"unverified": "Unverified",
"filters": {
"label": "Filter users",
"status": "Status",
"role": "Role",
"email": "Email verification",
"anyStatus": "Any status",
"anyRole": "Any role",
"anyEmail": "Any email",
"verified": "Verified email",
"unverified": "Unverified email",
"clear": "Clear filters"
},
"create": {
"open": "Create user",
"title": "Create user",
"nameRequired": "Enter a name",
"submit": "Create user",
"creating": "Creating…",
"hintNoEmail": "Set SMTP_HOST to send password links."
},
"details": {
"emailStatus": "Email",
"verified": "Verified",
"notVerified": "Not verified",
"signInMethods": "Sign-in methods",
"noSignInMethods": "No password or linked account yet",
"methods": {
"password": "Password"
},
"uploadAvatar": "Upload",
"removeAvatar": "Remove"
},
"security": {
"title": "Sessions & API keys: {{name}}",
"sessionsTitle": "Sessions",
"sessionsEmpty": "Not signed in anywhere.",
"revokeAll": "Sign out everywhere",
"revokeAllConfirmTitle": "Sign {{name}} out everywhere?",
"revokeAllConfirmDescription": "They'll be signed out everywhere right away.",
"revokeAllSelfDescription": "Your other sessions will be signed out right away.",
"toastRevokedAll": "Sessions signed out.",
"apiKeysTitle": "API keys",
"apiKeysEmpty": "No API keys.",
"apiKeysLoadError": "Couldn't load API keys.",
"lastUsed": "Last used {{time}}",
"neverUsed": "Never used",
"disabled": "Disabled",
"revokeKey": "Revoke",
"revokingKey": "Revoking...",
"revokeKeyLabel": "Revoke {{name}}",
"revokeKeyConfirmTitle": "Revoke {{name}}?",
"revokeKeyConfirmDescription": "Requests using this key will fail right away.",
"toastKeyRevoked": "API key revoked.",
"toastKeyRevokeError": "Couldn't revoke the API key."
}
},
"adminWorkspaces": {
"title": "Workspaces",
"subtitle": "Every workspace on this Kaneo instance, including ones you don't belong to.",
"directoryTitle": "All workspaces",
"searchCount_one": "{{count}} matching workspace",
"searchCount_other": "{{count}} matching workspaces",
"refreshing": "Refreshing workspaces",
"searchPlaceholder": "Search by name or slug",
"searchLabel": "Search workspaces",
"loadError": "Workspaces could not be loaded.",
"retry": "Retry",
"emptyTitle": "No workspaces found",
"emptyDescription": "Try another name or slug.",
"clearSearch": "Clear search",
"previous": "Previous",
"next": "Next",
"pagination": "Page {{current}} of {{total}}",
"noOwner": "No owner",
"manage": "Manage",
"manageLabel": "Manage {{name}}",
"columns": {
"workspace": "Workspace",
"owners": "Owners",
"members": "Members",
"projects": "Projects",
"created": "Created",
"actions": "Actions"
},
"members": {
"title": "Members of {{name}}",
"description": "Change roles, project access, and ownership, even if you aren't a member of this workspace.",
"count_one": "{{count}} member",
"count_other": "{{count}} members",
"add": "Add member",
"loadError": "Members could not be loaded.",
"empty": "This workspace has no members.",
"roleLabel": "Role for {{name}}",
"editAccess": "Change project access for {{name}} ({{access}})",
"actions": "Actions for {{name}}",
"makeOwner": "Make owner",
"remove": "Remove from workspace"
},
"addMember": {
"title": "Add member",
"description": "Add an existing user to {{name}}. They can access every project until you limit them.",
"user": "User",
"userPlaceholder": "Search name or email…",
"searching": "Searching users…",
"usersError": "Users could not be loaded.",
"noUsers": "No users found",
"alreadyMember": "Already a member",
"role": "Role",
"submit": "Add member",
"adding": "Adding…"
},
"confirm": {
"working": "Working…",
"transfer": {
"title": "Make {{name}} the owner?",
"description": "{{name}} becomes the only owner of {{workspace}}. Anyone who owns it now becomes an admin.",
"action": "Make owner"
},
"remove": {
"title": "Remove {{name}}?",
"description": "{{name}} loses access to {{workspace}} and its projects. Their account stays on this instance.",
"action": "Remove member"
},
"archive": {
"title": "Archive {{name}}?",
"description": "Members will lose access until it's restored.",
"action": "Archive workspace"
},
"restore": {
"title": "Restore {{name}}?",
"action": "Restore workspace"
},
"delete": {
"title": "Delete {{name}}?",
"description": "Its projects, tasks, and files will be permanently deleted.",
"typeName": "Type {{name}} to confirm",
"action": "Delete workspace"
}
},
"toast": {
"added": "Member added",
"addError": "Failed to add member",
"roleUpdated": "Role updated",
"roleError": "Failed to update role",
"removed": "Member removed",
"removeError": "Failed to remove member",
"ownershipTransferred": "Ownership transferred",
"transferError": "Failed to transfer ownership",
"archived": "Workspace archived",
"restored": "Workspace restored",
"deleted": "Workspace deleted",
"archiveError": "Could not archive workspace",
"restoreError": "Could not restore workspace",
"deleteError": "Could not delete workspace"
},
"archived": "Archived",
"actions": {
"open": "Actions for {{name}}",
"archive": "Archive workspace",
"restore": "Restore workspace"
}
},
"adminAuditLog": {
"title": "Audit log",
"directoryTitle": "Recorded actions",
"refreshing": "Refreshing audit log",
"categoryLabel": "Filter by category",
"categories": {
"all": "All actions",
"email": "Email",
"user": "Users",
"session": "Sessions",
"workspace": "Workspaces",
"apiKey": "API keys",
"role": "Roles",
"instance": "Instance settings",
"webhook": "Webhooks"
},
"loadError": "The audit log could not be loaded.",
"retry": "Retry",
"emptyTitle": "No actions recorded",
"clearFilter": "Show all actions",
"previous": "Previous",
"next": "Next",
"pagination": "Page {{current}} of {{total}}",
"unknownActor": "Unknown",
"deletedActor": "Account deleted",
"mobileSummary": "{{actor}} · {{target}} · {{time}}",
"columns": {
"action": "Action",
"actor": "Administrator",
"target": "Target",
"time": "Time and IP"
},
"targetTypes": {
"user": "User",
"workspace": "Workspace",
"role": "Role",
"instance": "Instance",
"webhook": "Webhook"
},
"actions": {
"emailTestSent": "Sent test email",
"userCreated": "Created user",
"userUpdated": "Updated user details",
"userRoleChanged": "Changed instance role",
"userDeactivated": "Deactivated user",
"userReactivated": "Reactivated user",
"userDeleted": "Deleted user",
"userPasswordSet": "Set user password",
"userImpersonated": "Signed in as user",
"sessionRevoked": "Revoked a session",
"sessionRevokedAll": "Revoked all sessions",
"workspaceMemberAdded": "Added workspace member",
"workspaceMemberRemoved": "Removed workspace member",
"workspaceMemberRoleChanged": "Changed workspace member role",
"workspaceOwnerTransferred": "Transferred workspace ownership",
"userPasswordResetSent": "Sent password reset link",
"userVerificationSent": "Sent verification email",
"userEmailVerified": "Marked email as verified",
"userAvatarChanged": "Changed profile picture",
"userAvatarRemoved": "Removed profile picture",
"apiKeyRevoked": "Revoked an API key",
"workspaceArchived": "Archived workspace",
"workspaceRestored": "Restored workspace",
"workspaceDeleted": "Deleted workspace",
"roleCreated": "Role created",
"roleUpdated": "Role updated",
"roleDeleted": "Role deleted",
"instanceSettingsUpdated": "Updated instance settings",
"webhookCreated": "Created webhook",
"webhookUpdated": "Updated webhook",
"webhookDeleted": "Deleted webhook",
"webhookSecretRotated": "Rotated webhook secret"
},
"fields": {
"name": "name",
"email": "email",
"emailVerified": "email verification",
"image": "avatar"
},
"details": {
"change": "{{from}} → {{to}}",
"fields": "Changed {{fields}}",
"reason": "Reason: {{reason}}",
"noRole": "No role",
"memberWithRole": "{{member}} as {{role}}",
"memberChange": "{{member}}: {{from}} → {{to}}",
"createdWithRole": "Role: {{role}}",
"sessionCount_one": "{{count}} session",
"sessionCount_other": "{{count}} sessions",
"workspaceContents": "{{members}} members, {{projects}} projects",
"permissionsChanged": "{{added}} permissions added, {{removed}} removed"
}
},
"informationPage": {
"pageTitle": "Profile",
"title": "Profile",
"subtitle": "How you show up to your teammates.",
"sectionTitle": "Details",
"profilePicture": "Profile picture",
"fullName": "Name",
"fullNamePlaceholder": "Enter your name",
"email": "Email",
"updateError": "Failed to update profile",
"validation": {
"nameRequired": "Name is required",
"nameShort": "Name must be at least 2 characters"
},
"avatar": {
"hint": "Square images look best.",
"remove": "Remove",
"updateSuccess": "Profile picture updated",
"updateError": "Failed to update profile picture",
"removeSuccess": "Profile picture removed",
"removeError": "Failed to remove profile picture",
"upload": "Upload"
},
"deleteAccount": {
"sectionTitle": "Danger zone",
"title": "Delete account",
"description": "Workspaces only you belong to are deleted with your account. Elsewhere, your tasks stay and become unassigned, and your comments are removed.",
"modalTitle": "Delete your account?",
"modalDescription": "This permanently deletes your account and cannot be undone.",
"confirmLabel": "Type {{email}} to confirm",
"confirm": "Delete account",
"success": "Your account has been deleted",
"error": "Failed to delete account",
"sessionTooOld": "For security, sign out and sign back in before deleting your account."
},
"emailHint": "You sign in with this address."
},
"notificationsPage": {
"pageTitle": "Notifications",
"title": "Notifications",
"subtitle": "What Kaneo tells you about, and where it reaches you.",
"statusConnected": "Connected",
"statusPaused": "Paused",
"emailTitle": "Email",
"accountEmailNoAddress": "No account email available",
"saveChanges": "Save changes",
"disconnect": "Disconnect",
"ntfyTitle": "ntfy",
"ntfyDescription": "Publish to an ntfy topic on your phone or desktop.",
"serverUrl": "Server URL",
"topic": "Topic",
"token": "Token",
"ntfyServerPlaceholder": "https://ntfy.example.com",
"ntfyTopicPlaceholder": "team-alerts",
"ntfyTokenPlaceholder": "Only if your server needs one",
"ntfyTokenHintConfigured": "A token is already configured ({{masked}}). Enter a new token to replace it.",
"ntfyTokenHintOptional": "Use one if your ntfy server requires authentication.",
"connectNtfy": "Connect ntfy",
"gotifyTitle": "Gotify",
"gotifyDescription": "Send notifications to your Gotify server.",
"gotifyTokenLabel": "App token",
"gotifyServerPlaceholder": "https://gotify.example.com",
"gotifyTokenPlaceholder": "Gotify app token",
"gotifyTokenHintConfigured": "An app token is already configured ({{masked}}). Enter a new token to replace it.",
"gotifyTokenHintRequired": "Required. Use an application token from your Gotify server.",
"connectGotify": "Connect Gotify",
"webhookTitle": "Custom webhook",
"webhookDescription": "Send each notification to your own endpoint as JSON.",
"endpointUrl": "Endpoint URL",
"signingSecret": "Signing secret",
"webhookUrlPlaceholder": "https://example.com/webhooks/kaneo",
"webhookSecretPlaceholder": "Optional shared secret",
"webhookSecretHintConfigured": "A signing secret is already configured ({{masked}}). Enter a new one to replace it.",
"webhookSecretHintOptional": "Kaneo signs the request body when a secret is set.",
"connectWebhook": "Connect webhook",
"eventPreferencesTitle": "Notify me about",
"eventPreferencesDescription": "Your own comments, mentions, and status changes never notify you.",
"eventTaskAssignments": "Assignments",
"eventComments": "Comments and mentions",
"eventCommentsHint": "New comments on your tasks, and anyone who @mentions you.",
"eventStatusChanges": "Status changes",
"eventDueDateReminders": "Due date reminders",
"reminderLeadTimeLabel": "Remind me before the due date",
"reminderLeadTimeInvalid": "Enter a whole number between 1 and {{max}}.",
"saveEventPreferences": "Save notification types",
"allProjects": "All projects",
"noProjectsInWorkspace": "No projects available for this workspace yet.",
"toastEmailSaved": "Email notification settings saved",
"toastEmailSaveFailed": "Failed to save email settings",
"toastNtfySaved": "ntfy settings saved",
"toastNtfySaveFailed": "Failed to save ntfy settings",
"toastNtfyDisconnected": "ntfy disconnected",
"toastNtfyDisconnectFailed": "Failed to disconnect ntfy",
"toastGotifySaved": "Gotify settings saved",
"toastGotifySaveFailed": "Failed to save Gotify settings",
"toastGotifyDisconnected": "Gotify disconnected",
"toastGotifyDisconnectFailed": "Failed to disconnect Gotify",
"toastWebhookSaved": "Webhook settings saved",
"toastWebhookSaveFailed": "Failed to save webhook settings",
"toastWebhookDisconnected": "Webhook disconnected",
"toastWebhookDisconnectFailed": "Failed to disconnect webhook",
"toastRuleSaved": "Saved notification rule for {{workspaceName}}",
"toastRuleSaveFailed": "Failed to save workspace notification rule",
"toastRuleRemoved": "Removed notification rule for {{workspaceName}}",
"toastRuleRemoveFailed": "Failed to remove workspace notification rule",
"toastPreferencesSaved": "Notification preferences saved",
"toastPreferencesSaveFailed": "Failed to save notification preferences",
"toastRuleSavedGeneric": "Workspace notification rule saved",
"toastRuleRemovedGeneric": "Workspace notification rule removed",
"loadFailed": "Notification settings could not be loaded.",
"eventTaskAssignmentsHint": "When someone assigns a task to you.",
"eventStatusChangesHint": "When one of your tasks moves to another column.",
"eventDueDateRemindersHint": "Before one of your tasks is due. Overdue tasks notify you separately.",
"reminderLeadTimeUnitLabel": "Reminder unit",
"reminderLeadTimeUnitHoursBefore_one": "hour before",
"reminderLeadTimeUnitHoursBefore_other": "hours before",
"reminderLeadTimeUnitDaysBefore_one": "day before",
"reminderLeadTimeUnitDaysBefore_other": "days before",
"channelsTitle": "Channels",
"channelsDescription": "Notifications always show in Kaneo. Connect a channel to get them somewhere else too.",
"statusOn": "On",
"emailToggleLabel": "Send notifications by email",
"connect": "Connect",
"configure": "Configure",
"done": "Done",
"connectChannel": "Connect {{channel}}",
"configureChannel": "Configure {{channel}}",
"optional": "Optional",
"sendingLabel": "Sending",
"sendingDescription": "Turn off to pause this channel and keep its settings.",
"disconnectTitle": "Disconnect {{channel}}?",
"disconnectDescription": "Notifications stop going to {{channel}}, and its saved settings are removed.",
"disconnecting": "Disconnecting...",
"workspacesTitle": "Workspaces",
"workspacesDescription": "Choose which workspaces and projects can use your channels.",
"statusSending": "Sending",
"onlyInKaneo": "Only in Kaneo",
"projectCount_one": "{{count}} project",
"projectCount_other": "{{count}} projects",
"ruleSummary": "{{channels}} · {{projects}}",
"setUp": "Set up",
"configureWorkspace": "Configure notifications for {{workspaceName}}",
"setUpWorkspace": "Set up notifications for {{workspaceName}}",
"ruleDialogTitle": "{{workspaceName}} notifications",
"ruleDialogDescription": "Where notifications from this workspace can go.",
"ruleActiveLabel": "Sending",
"ruleActiveDescription": "Turn off to pause this workspace and keep its setup.",
"ruleChannels": "Channels",
"channelNotConnected": "Not connected",
"channelOff": "Off",
"ruleProjects": "Projects",
"someProjects": "Only some",
"save": "Save",
"stopSending": "Stop sending",
"stopSendingTitle": "Stop sending from {{workspaceName}}?",
"stopSendingDescription": "Notifications from this workspace will only show in Kaneo.",
"stopping": "Stopping..."
},
"preferencesPage": {
"title": "Preferences",
"subtitle": "How Kaneo looks and works for you.",
"appearanceTitle": "General",
"theme": "Theme",
"selectTheme": "Select a theme",
"themeLight": "Light",
"themeDark": "Dark",
"themeSystem": "Match system",
"language": "Language",
"selectLanguage": "Select a language",
"firstDayOfWeek": "First day of the week",
"firstDayOfWeekDescription": "Used by calendars and date pickers.",
"selectFirstDayOfWeek": "Select first day",
"weekStartsOnSunday": "Sunday",
"weekStartsOnMonday": "Monday",
"weekStartsOnSaturday": "Saturday",
"defaultView": "Default view",
"defaultViewDescription": "The view projects open in.",
"selectViewMode": "Select a view mode",
"board": "Board",
"list": "List",
"gantt": "Gantt",
"priorityIcons": "Priority icons",
"priorityIconsDescription": "How task priority looks on cards, rows, and menus.",
"priorityIconsMarks": "Marks",
"priorityIconsClassic": "Classic",
"sidebarDefault": "Keep the sidebar open",
"sidebarDefaultDescription": "Start with the sidebar expanded.",
"displayOptions": "Task details",
"displayOptionsDescription": "What shows on cards and rows in your boards and lists.",
"taskNumbers": "Task numbers",
"assignees": "Assignees",
"dueDates": "Due dates",
"labels": "Labels",
"priority": "Priority",
"projectBackgrounds": "Project backgrounds",
"projectBackgroundsDescription": "Show the image a project sets behind its board.",
"advancedTitle": "Advanced"
},
"managedProfile": {
"note": "Managed by your organization.",
"edit": "Edit in {{provider}}"
},
"developerPage": {
"pageTitle": "API keys",
"title": "API keys",
"subtitle": "Let scripts, the CLI, and MCP clients use Kaneo as you.",
"unnamedKey": "Unnamed",
"newKey": "New key",
"keysTitle": "Keys",
"keysNote": "A key can do anything you can. Delete keys you no longer use.",
"emptyTitle": "No API keys yet",
"emptyDescription": "Create a key to use the CLI, an MCP client, or your own scripts.",
"loadError": "Could not load API keys. Please try again."
},
"apiKey": {
"createdModal": {
"title": "Copy your key",
"description": "You won't see it again after you close this.",
"copy": "Copy",
"copied": "Copied",
"done": "Done",
"copyError": "Could not copy the key. Select it and copy it manually."
},
"table": {
"deleteConfirmTitle": "Delete “{{name}}”?",
"deleteConfirmDescription": "Anything using this key stops working. This can't be undone.",
"delete": "Delete key",
"deleting": "Deleting…",
"toastDeleted": "API key deleted",
"toastDeleteError": "Could not delete the API key"
},
"createDialog": {
"title": "New API key",
"description": "The key can do anything you can.",
"nameLabel": "Name",
"namePlaceholder": "My API key",
"nameDescription": "So you remember where it's used.",
"expirationLabel": "Expires",
"expiration1d": "1 day",
"expiration7d": "7 days",
"expiration30d": "30 days",
"expiration90d": "90 days",
"expirationNever": "Never",
"create": "Create key",
"creating": "Creating…",
"failedCreate": "Could not create the API key",
"validation": {
"nameRequired": "Enter a name",
"nameShort": "Use at least 3 characters"
}
},
"row": {
"created": "Created {{date}}",
"expires": "Expires {{date}}",
"expired": "Expired {{date}}",
"neverExpires": "Never expires",
"expiredBadge": "Expired",
"actions": "Actions for {{name}}"
}
},
"workspaceGeneral": {
"pageTitle": "General Settings",
"title": "General",
"subtitle": "The name of {{name}} and who owns it.",
"workspaceInfoTitle": "Workspace",
"nameLabel": "Name",
"namePlaceholder": "Enter workspace name",
"descriptionLabel": "Description",
"descriptionPlaceholder": "What does your team work on?",
"dangerZone": "Danger zone",
"deleteWorkspace": "Delete workspace",
"deleteWorkspaceDescription": "Permanently deletes {{name}}, its projects, and tasks.",
"deleteModalTitle": "Delete workspace?",
"deleteModalDescription": "This permanently deletes {{name}} and all of its projects and tasks. You can't undo this.",
"deleteModalConfirm": "Delete workspace",
"toastUpdateError": "Failed to update workspace",
"toastDeleted": "Workspace deleted successfully",
"toastDeleteError": "Failed to delete workspace",
"validation": {
"nameRequired": "Workspace name is required",
"nameShort": "Workspace name must be at least 2 characters"
},
"transferOwnership": {
"toastSuccess": "Ownership transferred",
"toastError": "Failed to transfer ownership",
"title": "Transfer ownership",
"pickerLabel": "New owner",
"noEligibleMembers": "Invite at least one other member before you can transfer ownership.",
"pickerHint": "The new owner takes over. You stay on as an admin.",
"pickerPlaceholder": "Choose a member",
"button": "Transfer",
"dialogTitle": "Transfer ownership?",
"dialogDescription": "{{name}} will become the sole owner of {{workspace}}. You'll keep admin access but lose owner-only abilities like deleting the workspace or transferring it again.",
"transferring": "Transferring…",
"confirm": "Transfer ownership"
},
"ownershipTitle": "Ownership",
"ownershipSubtitle": "Only the owner sees this."
},
"workspaceRoles": {
"pageTitle": "Roles",
"title": "Roles",
"subtitle": "Define which actions members can perform in {{workspaceName}}.",
"thisWorkspace": "this workspace",
"noAccess": "You need admin or owner permissions to manage workspace roles.",
"sectionTitle": "Workspace roles",
"sectionSubtitle": "Edit the default roles or add a tailored one. Members keep their assigned role name across edits.",
"newRole": "New role",
"loading": "Loading…",
"loadError": "Failed to load roles.",
"emptyTitle": "No roles yet",
"emptyDescription": "Default roles will appear here once they're seeded for this workspace.",
"defaultBadge": "Default",
"permissionCount_one": "{{count}} permission",
"permissionCount_other": "{{count}} permissions",
"nameLabel": "Name",
"nameHint": "Lowercase. Cannot be changed later.",
"namePlaceholder": "e.g. reviewer",
"discard": "Discard",
"createRole": "Create role",
"deleteRole": "Delete role",
"defaultRoleHelp": "Default role: name is reserved and the row can't be deleted.",
"unsavedChanges": "You have unsaved changes",
"allChangesSaved": "All changes saved",
"saveChanges": "Save changes",
"defaultRoleDescriptions": {
"viewer": "Can view and comment on tasks.",
"member": "Can create and manage tasks and projects.",
"admin": "Has full access to the workspace."
},
"resources": {
"project": "Projects",
"task": "Tasks",
"label": "Labels",
"workspace": "Workspace",
"organization": "Workspace administration",
"member": "Members",
"invitation": "Invitations",
"team": "Teams",
"ac": "Roles and permissions"
},
"permissions": {
"project": {
"create": {
"label": "Create",
"description": "Can create new projects"
},
"read": {
"label": "Read",
"description": "Can view projects"
},
"update": {
"label": "Update",
"description": "Can edit project settings"
},
"delete": {
"label": "Delete",
"description": "Can delete projects"
},
"share": {
"label": "Share",
"description": "Can share projects"
}
},
"task": {
"create": {
"label": "Create",
"description": "Can create tasks"
},
"read": {
"label": "Read",
"description": "Can view tasks"
},
"update": {
"label": "Update",
"description": "Can edit tasks"
},
"delete": {
"label": "Delete",
"description": "Can delete tasks"
},
"assign": {
"label": "Assign",
"description": "Can assign tasks to members"
}
},
"label": {
"create": {
"label": "Create",
"description": "Can create labels"
},
"read": {
"label": "Read",
"description": "Can view labels"
},
"update": {
"label": "Update",
"description": "Can edit labels"
},
"delete": {
"label": "Delete",
"description": "Can delete labels"
}
},
"workspace": {
"read": {
"label": "Read",
"description": "Can view workspace settings"
},
"update": {
"label": "Update",
"description": "Can update workspace settings"
},
"delete": {
"label": "Delete",
"description": "Can delete workspace"
},
"manage_settings": {
"label": "Manage Settings",
"description": "Can manage workspace settings"
}
},
"organization": {
"update": {
"label": "Edit workspace administration",
"description": "Change workspace settings through the account service."
},
"delete": {
"label": "Delete workspace",
"description": "Permanently delete the workspace through the account service."
}
},
"member": {
"create": {
"label": "Add members",
"description": "Add users to this workspace."
},
"update": {
"label": "Change member roles",
"description": "Change the roles assigned to workspace members."
},
"delete": {
"label": "Remove members",
"description": "Remove users from this workspace."
}
},
"invitation": {
"create": {
"label": "Invite members",
"description": "Send workspace invitations."
},
"cancel": {
"label": "Cancel invitations",
"description": "Revoke pending workspace invitations."
}
},
"team": {
"create": {
"label": "Create teams",
"description": "Create teams in this workspace."
},
"update": {
"label": "Edit teams",
"description": "Change teams and team membership."
},
"delete": {
"label": "Delete teams",
"description": "Delete teams in this workspace."
}
},
"ac": {
"create": {
"label": "Create roles",
"description": "Create workspace roles and assign their permissions."
},
"read": {
"label": "View roles",
"description": "Read the workspace roles and their permissions."
},
"update": {
"label": "Change role permissions",
"description": "Change role permissions, including administrative access."
},
"delete": {
"label": "Delete roles",
"description": "Delete custom workspace roles."
}
}
},
"validation": {
"nameRequired": "Role name is required",
"nameExists": "A role with this name already exists",
"permissionRequired": "At least one permission must be selected"
},
"toast": {
"created": "Role created",
"createError": "Failed to create role",
"updated": "Role updated",
"updateError": "Failed to update role",
"deleted": "Role deleted",
"deleteError": "Failed to delete role"
},
"deleteDialog": {
"title": "Delete role",
"description": "This will permanently delete the role \"{{role}}\". Members assigned to this role will lose its permissions."
}
},
"workspaceLabels": {
"pageTitle": "Labels",
"title": "Labels",
"subtitle": "Labels are shared by every project in this workspace.",
"createLabel": "Create label",
"editLabel": "Edit label",
"deleteLabel": "Delete label",
"saveLabel": "Save",
"nameLabel": "Name",
"namePlaceholder": "Label name",
"colorLabel": "Color",
"createDescription": "Projects in this workspace can add it to their tasks.",
"editDescription": "Changes show up on every task with this label.",
"deleteConfirmTitle": "Delete “{{name}}”?",
"deleteConfirmDescription": "The label is removed from every task that uses it. This can't be undone.",
"createSuccess": "Label created",
"updateSuccess": "Label updated",
"deleteSuccess": "Label deleted",
"createError": "Failed to create label",
"updateError": "Failed to update label",
"deleteError": "Failed to delete label",
"nameRequired": "Label name is required",
"deletionPending": "Removing from tasks…",
"resumeDeletion": "Resume deletion",
"subtitleWithWorkspace": "Labels are shared by every project in {{workspaceName}}.",
"newLabel": "New label",
"sectionTitle": "Workspace labels",
"sectionDescription": "Renaming a label or changing its color updates every task that uses it.",
"editNamed": "Edit {{name}}",
"rowActions": "Actions for {{name}}",
"preview": "On a task",
"previewPlaceholder": "Label",
"resume": "Resume",
"emptyTitle": "No labels yet",
"emptyDescription": "Add labels to sort and filter tasks across projects.",
"loadError": "Could not load labels. Please try again."
},
"workspaceImport": {
"pageTitle": "Import",
"title": "Import",
"subtitle": "Bring your projects from another tool into {{workspace}}. Kaneo only reads from the source.",
"opensInNewTab": "(opens in a new tab)",
"retry": "Try again",
"notAllowed": {
"title": "Only workspace admins can import",
"description": "Importing creates projects, so it needs permission to manage workspace settings and create projects. Ask a workspace admin to run it."
},
"sources": {
"title": "Choose a source",
"description": "Pick the tool you are moving from. Each project you choose becomes a new project here.",
"connect": "Connect",
"connectTo": "Connect {{source}}",
"linear": {
"description": "Teams, issues, labels, sub-issues and comments. Paste a personal API key.",
"intro": "Each Linear team becomes a project, with its workflow as columns."
},
"jira": {
"description": "Projects, issues, sub-tasks, links and comments. Cloud or Data Center.",
"intro": "Each Jira project becomes a project here, with its workflow as columns."
},
"trello": {
"description": "Boards, lists, cards, checklists and comments. Authorize with one click.",
"intro": "Each Trello board becomes a project, with its lists as columns."
},
"plane": {
"description": "Projects, work items, sub-issues and comments. Cloud or self-hosted.",
"intro": "Each Plane project becomes a project here, with its states as columns."
},
"planka": {
"description": "Boards, lists, cards, checklists and comments from your PLANKA instance.",
"intro": "Each PLANKA board becomes a project, with its lists as columns."
},
"kaneo": {
"pickerName": "Another Kaneo",
"description": "Move projects between Kaneo Cloud and a self-hosted instance.",
"intro": "Projects from every workspace the key can see. Each one you pick is copied here."
}
},
"history": {
"title": "Recent imports",
"description": "Imports keep running on the server if you leave this page.",
"started": "Started {{time}}",
"empty": "No imports yet. Imports you start show up here.",
"loadError": "Recent imports could not be loaded."
},
"status": {
"importing": "Importing {{current}} of {{total}}",
"warnings_one": "Done with {{count}} warning",
"warnings_other": "Done with {{count}} warnings",
"partial": "{{done}} of {{total}} imported",
"failed": "Failed",
"imported": "Imported"
},
"steps": {
"label": "Import steps",
"connect": "Connect",
"import": "Import",
"done": "(completed)"
},
"back": {
"allSources": "All sources",
"changeKey": "Change key",
"overview": "Import overview"
},
"connect": {
"title": "Import from {{source}}",
"sectionTitle": "Connect",
"sectionDescription": "Kaneo only reads from {{source}}. The key is used for this import and never stored.",
"cancel": "Cancel",
"continue": "Continue",
"whereToFind": "Where to find it",
"showSecret": "Show {{field}}",
"hideSecret": "Hide {{field}}"
},
"linear": {
"apiKeyLabel": "Personal API key",
"apiKeyDescription": "Read access is enough. You can revoke it after the import.",
"openSettings": "Open Linear settings",
"stepOpen": "In Linear, open Settings, then Security and access.",
"stepCreate": "Under Personal API keys, create a key with Read access.",
"stepPaste": "Copy it and paste it above."
},
"jira": {
"urlLabel": "Jira site URL",
"urlDescription": "Copy it from your browser. Data Center works too.",
"urlPlaceholder": "https://your-site.atlassian.net",
"emailLabel": "Email",
"emailDescription": "The email of your Atlassian account. Leave it empty for Jira Data Center.",
"tokenLabel": "API token",
"tokenDescription": "Cloud: create one at id.atlassian.com. Data Center: use a personal access token.",
"tokenPlaceholder": "Paste token",
"openSettings": "Open Atlassian API tokens",
"stepOpen": "Open id.atlassian.com, then Security, then API tokens.",
"stepCreate": "Create an API token and copy it.",
"stepPaste": "Paste it with the email you sign in to Jira with.",
"nameMatchTip": "Jira often hides email addresses, so assignees may be matched to people here by full name."
},
"trello": {
"apiKeyLabel": "API key",
"apiKeyDescription": "In a Power-Up you own, open the Trello Auth tab and generate an API key (not the OAuth 2.0 tab) at",
"apiKeyPlaceholder": "Paste API key",
"authorizeLabel": "Authorize Kaneo",
"authorizeDescription": "Opens Trello in a new tab. Read only, expires after a day.",
"authorizeNeedsKey": "Enter the API key first. Read only, expires after a day.",
"authorizeButton": "Authorize on Trello",
"tokenLabel": "Token",
"tokenDescription": "Click Allow on Trello, then paste the token it shows you.",
"tokenPlaceholder": "Paste token"
},
"plane": {
"urlLabel": "Workspace URL",
"urlDescription": "Copy it from your browser while in Plane. Self-hosted works too.",
"urlPlaceholder": "https://app.plane.so/your-workspace",
"tokenLabel": "Personal access token",
"tokenDescription": "Profile settings, Developer, then Personal Access Tokens."
},
"planka": {
"urlLabel": "PLANKA URL",
"urlDescription": "The address you open PLANKA at.",
"signInLabel": "Sign in with",
"signInDescription": "Use an API key if your account signs in through SSO.",
"signInApiKey": "API key",
"signInPassword": "Email and password",
"apiKeyLabel": "API key",
"apiKeyDescription": "Created in PLANKA under your account settings.",
"apiKeyPlaceholder": "Paste API key",
"usernameLabel": "Email or username",
"usernameDescription": "The account you sign in to PLANKA with.",
"passwordLabel": "Password",
"passwordDescription": "Used only to sign in for this import.",
"adminTip": "Use a PLANKA admin account. PLANKA only shows email addresses to admins, and card members are matched to people here by email."
},
"kaneo": {
"urlLabel": "Kaneo URL",
"urlDescription": "The instance you are moving from.",
"apiKeyLabel": "API key",
"apiKeyDescription": "In that Kaneo, open Settings, then API Keys.",
"apiKeyPlaceholder": "Paste API key"
},
"select": {
"selectAll": "Select all",
"clear": "Clear",
"back": "Back",
"commentsLabel": "Import comments",
"commentsDescription": "Keeps each comment's original author and date.",
"membersNote": "Assignees are matched to members of {{workspace}} by email. Invite your team first so their tasks stay assigned.",
"membersNoteTrello": "Assignees are matched to members of {{workspace}} by email, or by full name for Trello. Invite your team first so their tasks stay assigned.",
"membersNoteJira": "Assignees are matched to members of {{workspace}} by email, or by full name when Jira hides the email. Invite your team first so their tasks stay assigned.",
"inviteMembers": "Invite members"
},
"units": {
"team": {
"step": "Choose teams",
"section": "Teams",
"pick": "Pick the teams to bring over.",
"found_one": "{{count}} team found. If you pick it, it becomes a new project in {{workspace}}.",
"found_other": "{{count}} teams found. Each one you pick becomes a new project in {{workspace}}.",
"empty": "No teams found. Check that this key can see the teams you want to import.",
"limit": "Pick up to {{max}} teams per import.",
"importButton_one": "Import {{count}} team",
"importButton_other": "Import {{count}} teams",
"progress_one": "{{done}} of {{count}} team imported",
"progress_other": "{{done}} of {{count}} teams imported",
"runTitle_one": "{{source}}, {{count}} team",
"runTitle_other": "{{source}}, {{count}} teams",
"allImported_one": "{{count}} team imported.",
"allImported_other": "All {{count}} teams imported.",
"someImported_one": "{{done}} of {{count}} team imported.",
"someImported_other": "{{done}} of {{count}} teams imported."
},
"board": {
"step": "Choose boards",
"section": "Boards",
"pick": "Pick the boards to bring over.",
"found_one": "{{count}} board found. If you pick it, it becomes a new project in {{workspace}}.",
"found_other": "{{count}} boards found. Each one you pick becomes a new project in {{workspace}}.",
"empty": "No boards found. Check that this key can see the boards you want to import.",
"limit": "Pick up to {{max}} boards per import.",
"importButton_one": "Import {{count}} board",
"importButton_other": "Import {{count}} boards",
"progress_one": "{{done}} of {{count}} board imported",
"progress_other": "{{done}} of {{count}} boards imported",
"runTitle_one": "{{source}}, {{count}} board",
"runTitle_other": "{{source}}, {{count}} boards",
"allImported_one": "{{count}} board imported.",
"allImported_other": "All {{count}} boards imported.",
"someImported_one": "{{done}} of {{count}} board imported.",
"someImported_other": "{{done}} of {{count}} boards imported."
},
"project": {
"step": "Choose projects",
"section": "Projects",
"pick": "Pick the projects to bring over.",
"found_one": "{{count}} project found. If you pick it, it becomes a new project in {{workspace}}.",
"found_other": "{{count}} projects found. Each one you pick becomes a new project in {{workspace}}.",
"empty": "No projects found. Check that this key can see the projects you want to import.",
"limit": "Pick up to {{max}} projects per import.",
"importButton_one": "Import {{count}} project",
"importButton_other": "Import {{count}} projects",
"progress_one": "{{done}} of {{count}} project imported",
"progress_other": "{{done}} of {{count}} projects imported",
"runTitle_one": "{{source}}, {{count}} project",
"runTitle_other": "{{source}}, {{count}} projects",
"allImported_one": "{{count}} project imported.",
"allImported_other": "All {{count}} projects imported.",
"someImported_one": "{{done}} of {{count}} project imported.",
"someImported_other": "{{done}} of {{count}} projects imported."
}
},
"counts": {
"tasks_one": "{{count, number}} task",
"tasks_other": "{{count, number}} tasks",
"columns_one": "{{count, number}} column",
"columns_other": "{{count, number}} columns",
"labels_one": "{{count, number}} label",
"labels_other": "{{count, number}} labels",
"comments_one": "{{count, number}} comment",
"comments_other": "{{count, number}} comments"
},
"run": {
"importingTitle": "Importing from {{source}}",
"finishedTitle": "Import finished",
"failedTitle": "Import failed",
"leavePage": "You can leave this page. The import keeps running on the server.",
"started": "Started {{time}}",
"took_one": "Took {{count}} minute",
"took_other": "Took {{count}} minutes",
"tookUnderMinute": "Took less than a minute",
"totals": "{{parts, list}} imported",
"nothingImported": "Nothing was imported",
"keyInMemory": "Your {{source}} key is only kept in memory until this import finishes.",
"finishedNote": "Imported tasks did not send notifications. Comments keep their original author and date.",
"finishedNoteNoComments": "Imported tasks did not send notifications.",
"importMore": "Import more",
"goToProjects": "Go to projects",
"open": "Open",
"openProject": "Open {{name}}",
"waiting": "Waiting",
"queued": "Queued",
"starting": "Starting",
"importingBadge": "Importing",
"failedBadge": "Failed",
"warnings_one": "{{count}} warning",
"warnings_other": "{{count}} warnings",
"noTasks": "No tasks",
"notImported": "Not imported",
"failedNames_one": "{{names, list}} failed, so nothing was created for it.",
"failedNames_other": "{{names, list}} failed, so nothing was created for them.",
"loadError": "This import could not be loaded"
},
"toast": {
"finished": "Import from {{source}} finished",
"partial": "Import from {{source}} finished with errors",
"failed": "Import from {{source}} failed"
},
"entry": {
"projectsEmpty": "Import from another tool",
"createProjectPrompt": "Moving from Jira, Linear, Trello or Plane?",
"createProjectLink": "Import your projects"
}
},
"projectGeneral": {
"pageTitle": "Project Settings",
"title": "General",
"subtitle": "The name, key, and look of {{name}}.",
"projectInfoTitle": "Project",
"iconLabel": "Icon",
"iconHint": "Shown in the sidebar and project lists.",
"pickIconTitle": "Pick icon",
"searchIconsPlaceholder": "Search icons...",
"projectNameLabel": "Name",
"projectNamePlaceholder": "Project name",
"keyLabel": "Key",
"keyHint": "Starts every task ID, like {{slug}}-123.",
"keyPlaceholder": "PRO",
"descriptionLabel": "Description",
"descriptionPlaceholder": "What is this project for?",
"backgroundLabel": "Board background",
"backgroundHint": "An image behind the board. Each person can turn these off.",
"backgroundUnavailable": "Image uploads aren't set up on this instance.",
"backgroundUpload": "Upload",
"backgroundReplace": "Replace",
"backgroundRemove": "Remove image",
"backgroundUploadSuccess": "Project background updated",
"backgroundUploadError": "Failed to update project background",
"backgroundRemoveSuccess": "Project background removed",
"backgroundRemoveError": "Failed to remove project background",
"dangerZone": "Danger zone",
"deleteProject": "Delete project",
"deleteProjectDescription": "Permanently deletes {{name}} and all of its tasks.",
"deleteModalTitle": "Delete project?",
"deleteModalDescription": "This permanently deletes {{name}} and all of its tasks. You can't undo this.",
"deleteModalConfirm": "Delete project",
"toastUpdateError": "Failed to update project",
"toastDeleted": "Project deleted successfully",
"toastDeleteError": "Failed to delete project",
"validation": {
"nameRequired": "Project name is required",
"keyRequired": "Key is required",
"keyMax": "Key must be at most 8 characters",
"iconRequired": "Icon is required"
},
"moveProject": "Move to another workspace",
"moveProjectDescription": "Tasks, columns, and labels move with it.",
"moveProjectPlaceholder": "Choose a workspace",
"moveTargetsError": "Couldn't check which workspaces you can move this project to. Reload to try again.",
"moveProjectAction": "Move",
"moveModalConfirm": "Move project",
"toastMoved": "Project moved successfully",
"toastMovedWithUnassigned": "Project moved successfully. {{taskCount}} task(s) were unassigned.",
"toastMoveError": "Failed to move project",
"tasksTitle": "Tasks",
"moveTargetLabel": "Workspace",
"moveDialogTitle": "Move to another workspace?",
"moveDialogDescription": "Tasks assigned to people outside the new workspace become unassigned, and notification subscriptions for this project are cleared.",
"moving": "Moving..."
},
"projectIntegrations": {
"turnedOffByAdmin": "Turned off by an administrator",
"pageTitle": "Integrations",
"title": "Integrations",
"subtitle": "Connect this project to your code host and your team's chat.",
"githubSectionTitle": "GitHub Integration",
"githubSectionSubtitle": "Synchronize tasks with GitHub issues and enable two-way sync.",
"giteaSectionTitle": "Gitea Integration",
"giteaSectionSubtitle": "Synchronize tasks with a self-hosted Gitea instance (issues, PRs, webhooks).",
"gitlabSectionTitle": "GitLab Integration",
"gitlabSectionSubtitle": "Synchronize tasks with GitLab.com or a self-managed instance.",
"discordSectionTitle": "Discord Integration",
"discordSectionSubtitle": "Send project task updates into a Discord channel with a webhook.",
"genericWebhookSectionTitle": "Webhooks",
"genericWebhookSectionSubtitle": "Send project task events to any HTTP endpoint as JSON.",
"slackSectionTitle": "Slack Integration",
"slackSectionSubtitle": "Send project task updates into a Slack channel with an incoming webhook.",
"mattermostSectionTitle": "Mattermost Integration",
"mattermostSectionSubtitle": "Send project task updates into a Mattermost channel with an incoming webhook.",
"telegramSectionTitle": "Telegram Integration",
"telegramSectionSubtitle": "Send project task updates into a Telegram chat or topic with a bot.",
"codeHostingTitle": "Code hosting",
"chatTitle": "Chat and webhooks",
"statusConnected": "Connected",
"statusPaused": "Paused",
"connect": "Connect",
"configure": "Configure",
"done": "Done"
},
"projectVisibility": {
"pageTitle": "Project Visibility",
"title": "Visibility",
"subtitle": "Choose who can see {{project}} outside {{workspace}}.",
"sectionTitle": "Access",
"publicAccess": "Public link",
"publicAccessHint": "Anyone with the link can view the board and its tasks. They can't change anything.",
"publicUrl": "Public URL",
"copy": "Copy link",
"toastUpdated": "Visibility updated",
"toastUpdateError": "Failed to update visibility",
"thisWorkspace": "this workspace",
"membersTitle": "{{workspace}} members",
"membersDescription": "Everyone in the workspace, with what their role allows.",
"always": "Always",
"on": "On",
"copied": "Copied",
"copyError": "Couldn't copy the link",
"openPublicPage": "Open public page",
"offNote": "Turning the public link off stops it working right away."
},
"projectWorkflow": {
"pageTitle": "Workflow settings",
"title": "Workflow",
"subtitle": "The columns on your board, and what moves tasks between them.",
"columnsTitle": "Columns",
"columnsDescription": "Drag to reorder. Tasks in a done column count as completed.",
"automationTitle": "Automations",
"automationDescription": "Move a linked task when something happens in a connected repository."
},
"projectSwitcher": {
"selectProject": "Select project",
"noProjects": "No projects"
},
"columnEditor": {
"toastCreateError": "Failed to create column",
"toastRenameError": "Failed to update column",
"toastUpdateError": "Failed to update column",
"toastDeleteError": "Failed to delete column",
"pickIconTitle": "Pick column icon",
"searchIconsPlaceholder": "Search icons...",
"markDoneAria": "Mark {{name}} as done column",
"newColumnPlaceholder": "Column name",
"deleteAria": "Delete {{name}} column",
"renameAria": "Rename {{name}} column",
"columnHeader": "Column",
"doneHeader": "Done",
"addColumn": "Add column",
"dragAria": "Reorder {{name}}",
"deleteTitle": "Delete “{{name}}”?",
"deleteDescription": "Columns that still have tasks can't be deleted. Move those tasks first.",
"deleteConfirm": "Delete column",
"reorderError": "Failed to reorder columns"
},
"customFields": {
"namePlaceholder": "Field name",
"selectPlaceholder": "Select option(s)",
"required": "Required",
"creating": "Creating...",
"defaultLabel": "Default",
"createSuccess": "Custom field created.",
"createError": "Failed to create custom field.",
"deleting": "Deleting...",
"deleteSuccess": "Custom field deleted.",
"deleteError": "Failed to delete custom field.",
"reorderError": "Failed to reorder fields",
"moreOptions": "+{{hiddenCount}} more",
"clearDefault": "Clear default",
"types": {
"text": "Text",
"number": "Number",
"date": "Date",
"dropdown": "Dropdown",
"boolean": "Checkbox",
"multiselect": "Dropdown, pick several"
},
"startsAs": "Starts as “{{value}}”",
"startsAt": "Starts at {{value}}",
"startsOn": "Starts on {{date}}",
"startsChecked": "Starts checked",
"startsUnchecked": "Starts unchecked",
"dragAria": "Reorder {{name}}",
"actionsAria": "Actions for {{name}}",
"edit": "Edit",
"emptyTitle": "No custom fields yet",
"emptyDescription": "Track things like size, customer, or launch date on every task.",
"deleteTitle": "Delete “{{name}}”?",
"deleteDescription": "The field and its value on every task are removed. This can't be undone.",
"deleteConfirm": "Delete field",
"newTitle": "New field",
"editTitle": "Edit field",
"dialogDescription": "Every task in {{project}} gets this field.",
"dialogDescriptionFallback": "Every task in this project gets this field.",
"typeLabel": "Type",
"typeLocked": "The type can't change after a field is created.",
"nameLabel": "Name",
"optionsLabel": "Options",
"addOption": "Add an option",
"dragOptionAria": "Reorder {{option}}",
"renameOptionAria": "Rename {{option}}",
"removeOptionAria": "Remove {{option}}",
"hideOptionAria": "Hide {{option}} from new selections",
"showOptionAria": "Offer {{option}} for new selections again",
"allowSeveral": "Allow several",
"allowSeveralDescription": "A task can pick more than one option.",
"requiredDescription": "Every task always has a value.",
"defaultDescription": "New tasks start with this.",
"noDefault": "No default",
"checked": "Checked",
"unchecked": "Unchecked",
"issues": {
"optionsRequired": "Add at least one option.",
"moreOptionsRequired": "Add at least two options to allow several.",
"defaultRequired": "Required fields need a default."
},
"createField": "Create field",
"save": "Save",
"saving": "Saving...",
"updateSuccess": "Custom field saved.",
"updateError": "Failed to save custom field."
},
"githubIntegration": {
"toast": {
"verifyError": "Failed to verify GitHub installation",
"installAppFirst": "Please install the GitHub App on this repository first",
"missingPermsDetail": "GitHub App is missing required permissions: {{list}}. Please update the app permissions.",
"updated": "GitHub integration updated successfully",
"updateError": "Failed to update GitHub integration",
"removed": "GitHub integration removed successfully",
"removeError": "Failed to remove GitHub integration",
"issuesImported": "Issues imported successfully",
"importError": "Failed to import issues",
"commentOnEnabled": "Kaneo will comment with a task link on new issues",
"commentOnDisabled": "Task link comments on new issues are turned off",
"settingsUpdateError": "Failed to update GitHub integration"
},
"commentTaskLinkTitle": "Comment a Kaneo link on new issues",
"commentTaskLinkHint": "So people on GitHub can jump to the task.",
"updatePermissions": "Update permissions",
"installGithubApp": "Install GitHub App",
"importSectionHint": "Import the repository's open issues as tasks.",
"importDisabledHint": "Reconnect the repository to enable importing.",
"accountVerificationHint": "Connect your GitHub account to verify that you administer this repository.",
"enableGithubSignInHint": "Ask your instance administrator to enable GitHub sign-in.",
"reverifyHint": "Reconnect this repository to verify access and resume synchronization.",
"resumeImport": "Resume import",
"importPaused": "This import has saved progress. You can resume it.",
"importSummary": "Created: {{imported}} · Updated: {{updated}} · Skipped: {{skipped}}",
"chooseRepositoryDescription": "Issues and pull requests from it will link to tasks here.",
"linkAccountDescription": "Proves you can administer the repository.",
"linkAccountTitle": "Link your GitHub account",
"linkGithub": "Link GitHub",
"linked": "Linked",
"verifyMissingPermissions": "The Kaneo GitHub App is missing permissions: {{list}}.",
"verifyNotInstalled": "The Kaneo GitHub App isn't installed on this repository.",
"verifyReady": "The Kaneo GitHub App is installed with the permissions it needs.",
"workflowHint": "Move tasks when pull requests open or merge in",
"workflowLink": "Workflow"
},
"giteaIntegration": {
"validation": {
"baseUrlRequired": "Gitea base URL is required",
"baseUrlInvalid": "Enter a valid URL (e.g. https://gitea.example.com)"
},
"toast": {
"verifyError": "Failed to verify Gitea access",
"verifyFirst": "Verify access failed. Check URL, token, and repository",
"updated": "Gitea integration saved",
"updateError": "Failed to save Gitea integration",
"removed": "Gitea integration removed",
"removeError": "Failed to remove Gitea integration",
"issuesImported": "Issues imported successfully",
"importError": "Failed to import issues",
"commentOnEnabled": "Kaneo will comment with a task link on new issues",
"commentOnDisabled": "Task link comments on new issues are turned off",
"settingsUpdateError": "Failed to update Gitea integration"
},
"commentTaskLinkTitle": "Comment a Kaneo link on new issues",
"commentTaskLinkHint": "So people on Gitea can jump to the task.",
"webhookHint": "Add this webhook in the repository settings so changes come back to Kaneo.",
"baseUrlLabel": "Gitea URL",
"tokenLabel": "Personal access token",
"tokenPlaceholder": "Paste token",
"tokenPlaceholderUpdate": "Paste new token to rotate",
"importSectionHint": "Import open issues and pull requests as tasks.",
"importDisabledHint": "Importing needs verified access. Check the token status above.",
"browseModalHint": "Repositories your token can access.",
"browseNeedsCredentials": "Enter the Gitea URL and a token to browse.",
"browseEmpty": "This token can't see any repositories.",
"chooseRepositoryDescription": "Type owner/name or pick one from the list.",
"webhookEvents": "Turn on push, pull request, issue, issue comment, and create events."
},
"gitlabIntegration": {
"validation": {
"baseUrlRequired": "GitLab base URL is required",
"baseUrlInvalid": "Enter a valid URL (e.g. https://gitlab.com)",
"pathInvalid": "Enter the full path, e.g. group/project"
},
"toast": {
"verifyError": "Failed to verify GitLab access",
"verifyFirst": "Verify access failed. Check URL, token, and project path",
"updated": "GitLab integration saved",
"updateError": "Failed to save GitLab integration",
"removed": "GitLab integration removed",
"removeError": "Failed to remove GitLab integration",
"issuesImported": "Issues imported successfully",
"importError": "Failed to import issues",
"commentOnEnabled": "Kaneo will comment with a task link on issues opened in GitLab",
"commentOnDisabled": "Task link comments on issues opened in GitLab are turned off",
"settingsUpdateError": "Failed to update GitLab integration"
},
"commentTaskLinkTitle": "Comment a Kaneo link on issues opened in GitLab",
"commentTaskLinkHint": "So people on GitLab can jump to the task.",
"webhookHint": "Add this webhook in the project settings so changes come back to Kaneo.",
"baseUrlLabel": "GitLab URL",
"tokenTypeLabel": "Token type",
"tokenTypePrivate": "Personal, project or group access token",
"tokenTypeBearer": "OAuth2 token",
"tokenLabel": "Access token",
"tokenPlaceholder": "Paste token",
"tokenPlaceholderUpdate": "Paste new token to rotate",
"projectPathLabel": "Project path",
"importSectionHint": "Import open issues and merge requests as tasks.",
"browseModalHint": "Projects your token is a member of.",
"searchProjects": "Search projects",
"browseNeedsCredentials": "Enter the GitLab URL and a token to browse.",
"loadProjectsError": "Couldn't load projects.",
"openInGitlab": "Open {{project}} in GitLab",
"importPermissionHint": "Importing requires permission to create and update tasks.",
"browseEmpty": "This token isn't a member of any projects.",
"chooseProjectDescription": "Type its path or pick one from the list.",
"noSearchMatchTitle": "No matching projects",
"useProject": "Use project",
"webhookEvents": "Turn on push, issue, comment, and merge request events."
},
"slackIntegration": {
"validation": {
"webhookInvalid": "Enter a valid Slack webhook URL"
},
"toast": {
"saved": "Slack integration saved successfully",
"saveError": "Failed to save Slack integration",
"enabled": "Slack notifications enabled",
"disabled": "Slack notifications paused",
"updateError": "Failed to update Slack integration",
"removed": "Slack integration removed successfully",
"removeError": "Failed to remove Slack integration"
},
"webhookPlaceholder": "https://hooks.slack.com/services/...",
"webhookHint": "Create an incoming webhook in Slack and paste it here.",
"connect": "Connect Slack",
"update": "Update Slack"
},
"discordIntegration": {
"validation": {
"webhookInvalid": "Enter a valid Discord webhook URL"
},
"toast": {
"saved": "Discord integration saved successfully",
"saveError": "Failed to save Discord integration",
"enabled": "Discord notifications enabled",
"disabled": "Discord notifications paused",
"updateError": "Failed to update Discord integration",
"removed": "Discord integration removed successfully",
"removeError": "Failed to remove Discord integration"
},
"webhookPlaceholder": "https://discord.com/api/webhooks/...",
"webhookHint": "Create a channel webhook in Discord and paste it here.",
"connect": "Connect Discord",
"update": "Update Discord"
},
"mattermostIntegration": {
"validation": {
"webhookInvalid": "Enter a valid Mattermost webhook URL"
},
"toast": {
"saved": "Mattermost integration saved successfully",
"saveError": "Failed to save Mattermost integration",
"enabled": "Mattermost notifications enabled",
"disabled": "Mattermost notifications paused",
"updateError": "Failed to update Mattermost integration",
"removed": "Mattermost integration removed successfully",
"removeError": "Failed to remove Mattermost integration"
},
"webhookPlaceholder": "https://your-mattermost-server.com/hooks/...",
"webhookHint": "Create an incoming webhook in Mattermost and paste it here.",
"connect": "Connect Mattermost",
"update": "Update Mattermost"
},
"genericWebhookIntegration": {
"validation": {
"webhookInvalid": "Enter a valid webhook URL",
"leadTimeRange": "Choose a time between 5 minutes and 720 hours."
},
"toast": {
"saved": "Generic webhook integration saved successfully",
"saveError": "Failed to save generic webhook integration",
"enabled": "Generic webhook notifications enabled",
"disabled": "Generic webhook notifications paused",
"updateError": "Failed to update generic webhook integration",
"removed": "Generic webhook integration removed successfully",
"removeError": "Failed to remove generic webhook integration"
},
"webhookLabel": "Endpoint URL",
"webhookPlaceholder": "https://example.com/webhooks/kaneo",
"webhookHint": "Kaneo sends POST requests with a JSON payload for each enabled event.",
"secretLabel": "Signing secret",
"secretPlaceholder": "Shared secret",
"secretHint": "Kaneo signs each request with it and sends the digest in the X-Kaneo-Signature header.",
"secretHintConfigured": "Current secret: {{secret}}. Paste a new one to replace it.",
"eventsTitle": "Send when",
"events": {
"taskCreated": "Task created",
"taskStatusChanged": "Status changed",
"taskPriorityChanged": "Priority changed",
"taskTitleChanged": "Title changed",
"taskDescriptionChanged": "Description changed",
"taskCommentCreated": "New comment",
"taskDeleted": "Task deleted",
"taskMoved": "Task moved",
"taskDueDateChanged": "Due date changed",
"taskAssigneeChanged": "Assignee changed",
"taskUnassigned": "Task unassigned",
"dueDateReminder": "Due date reminder"
},
"reminderLeadTimeLabel": "Hours before a task is due",
"connect": "Connect webhook",
"activeTitle": "Sending events",
"reminderLeadTimeBefore": "Send reminders",
"reminderLeadTimeAfter": "hours before a task is due",
"disconnectTitle": "Disconnect webhook?",
"disconnectDescription": "Kaneo stops sending events and removes the saved endpoint and secret."
},
"telegramIntegration": {
"validation": {
"botTokenInvalid": "Enter a valid Telegram bot token",
"chatIdRequired": "Chat ID is required",
"threadIdInvalid": "Enter a valid topic ID"
},
"toast": {
"saved": "Telegram integration saved successfully",
"saveError": "Failed to save Telegram integration",
"enabled": "Telegram notifications enabled",
"disabled": "Telegram notifications paused",
"updateError": "Failed to update Telegram integration",
"removed": "Telegram integration removed successfully",
"removeError": "Failed to remove Telegram integration"
},
"botTokenLabel": "Bot token",
"botTokenPlaceholder": "123456789:AAExampleBotToken",
"botTokenHint": "Create a bot with BotFather and paste its token here.",
"botTokenHintConfigured": "Current token: {{token}}",
"chatIdLabel": "Chat ID",
"chatIdPlaceholder": "-1001234567890 or @team_updates",
"threadIdLabel": "Topic ID",
"threadIdPlaceholder": "For forum topics",
"chatLabelLabel": "Chat name",
"chatLabelPlaceholder": "Engineering Updates",
"connect": "Connect Telegram",
"loadError": "Couldn't load the Telegram settings.",
"botTokenSavedPlaceholder": "Saved. Paste a new token to replace it."
},
"repositoryBrowser": {
"title": "Choose a repository",
"description": "Repositories the Kaneo GitHub App can see.",
"searchPlaceholder": "Search repositories",
"loadError": "Couldn't load repositories.",
"tryAgain": "Retry",
"emptyTitle": "No repositories yet",
"emptyHint": "Install the GitHub App on your repositories to see them here.",
"installGithubApp": "Install GitHub App",
"noSearchMatchTitle": "No matching repositories",
"noSearchMatchHint": "Try a different name or clear the search.",
"emptyPageHint": "None on this page. Load more to keep looking.",
"loadMore": "Load more",
"manageAccess": "Manage app access",
"missingOne": "Missing one?",
"searching": "Searching…",
"updated": "Updated {{time}}",
"useRepository": "Use repository"
},
"tasksImportExport": {
"exportTasks": "Export tasks",
"importTasks": "Import tasks",
"dialogTitle": "Import tasks",
"dialogDescription": "Upload a JSON file containing tasks to import into this project.",
"expectedFormat": "Expected format:",
"dropHint": "Drag and drop your JSON file here",
"selectFile": "Select file",
"exporting": "Exporting tasks...",
"exportSuccess": "Tasks exported successfully",
"exportError": "Failed to export tasks",
"importing": "Importing tasks...",
"importSuccess": "Imported {{count}} tasks successfully",
"importPartialError": "Failed to import {{count}} tasks",
"importError": "Failed to import tasks",
"invalidFormat": "Invalid import file format",
"noFileDropped": "No file was dropped",
"notJsonFile": "Please upload a JSON file",
"exportDescription": "Download every task in this project as a file.",
"export": "Export",
"importDescription": "Add tasks from a file you exported earlier.",
"import": "Import"
},
"workflowEditor": {
"toastError": "Failed to update rule",
"events": {
"branch_push": "Branch pushed",
"pr_opened": "Pull request opened",
"pr_merged": "Pull request merged",
"issue_opened": "Issue opened",
"issue_closed": "Issue closed"
},
"dontMove": "Don't move",
"emptyTitle": "No connected repositories",
"emptyDescription": "Automations need a connected GitHub, Gitea, or GitLab repository.",
"openIntegrations": "Open integrations",
"connectMore": "Connect {{providers}} in <link>Integrations</link> to automate them too."
},
"externalLinks": {
"resources": "Resources",
"issue": "Issue",
"branch": "Branch",
"merged": "Merged",
"draft": "Draft",
"open": "Open",
"addResource": "Add resource",
"url": "URL",
"titleOptional": "Title (optional)",
"cancel": "Cancel",
"adding": "Adding...",
"empty": "No resources linked to this task.",
"remove": "Remove {{title}}",
"removeError": "Failed to remove the resource link."
},
"security": "Security",
"securityPage": {
"pageTitle": "Security",
"title": "Security",
"subtitle": "How you sign in to Kaneo.",
"sectionTitle": "Sign-in",
"currentPassword": "Current password",
"newPassword": "New password",
"confirmPassword": "Confirm new password",
"currentPasswordPlaceholder": "Enter your current password",
"newPasswordPlaceholder": "Enter a new password",
"confirmPasswordPlaceholder": "Re-enter your new password",
"submit": "Change password",
"submitting": "Changing...",
"updateSuccess": "Password updated.",
"updateError": "Failed to update password.",
"noPassword": {
"title": "Password change isn't available",
"description": "Your account signs in with a different method, so there is no password to change."
},
"validation": {
"currentRequired": "Enter your current password.",
"tooShort": "New password must be at least 8 characters.",
"confirmRequired": "Confirm your new password.",
"mismatch": "Passwords do not match.",
"sameAsCurrent": "New password must be different from your current password."
},
"passwordTitle": "Password",
"passwordHint": "Use at least 8 characters you don't use anywhere else.",
"changePassword": "Change password",
"dialogTitle": "Change password",
"dialogDescription": "At least 8 characters, different from the current one.",
"sessions": {
"title": "Active sessions",
"revokeOthers": "Sign out other sessions",
"revokeOthersConfirmTitle": "Sign out all other sessions?",
"revokeOthersConfirmDescription": "Your other sessions will be signed out right away.",
"toastRevokedOthers": "Other sessions signed out."
}
},
"calendarFeeds": {
"title": "Calendar feeds",
"subtitle": "Subscribe to scheduled project tasks in your calendar app.",
"labels": "Only include labels",
"selectLabels": "Add label",
"noLabels": "No labels found.",
"timeZoneHint": "All-day dates use {{timeZone}}.",
"accessHint": "Anyone with a feed link can read the matching task titles, descriptions, and dates. Revoke a link to stop future access.",
"create": "Create feed",
"creating": "Creating…",
"created": "Calendar feed created.",
"createError": "Could not create the calendar feed.",
"activeFeeds": "Feeds",
"allScheduledTasks": "All scheduled tasks",
"subscribeHint": "Add a link to your calendar app as a subscription. Updates appear when the app refreshes the feed.",
"copy": "Copy link",
"copyError": "Could not copy the link. Select the URL and copy it manually.",
"revoke": "Revoke",
"revoked": "Calendar feed revoked.",
"revokeError": "Could not revoke the calendar feed.",
"loadError": "Could not load calendar feeds or labels. Please try again.",
"deletedLabel": "Deleted label",
"permissionRequired": "You need project-sharing permission to manage calendar feeds.",
"newFeed": "New feed",
"dialogTitle": "New calendar feed",
"dialogDescription": "Tasks with a start or due date show up in the feed.",
"labelsHint": "Leave empty to include every scheduled task.",
"copiedLabel": "Copied",
"feedActions": "Feed actions",
"revokeConfirmTitle": "Revoke this feed?",
"revokeConfirmDescription": "Calendar apps using this link stop getting updates. This can't be undone.",
"revokeConfirm": "Revoke feed",
"revoking": "Revoking…",
"emptyTitle": "No calendar feeds yet",
"emptyDescription": "Create a feed to see scheduled tasks in your calendar app."
},
"invitationEmailFailed": "Invitation saved, but email delivery failed. Check SMTP settings and resend the invitation.",
"billing": {
"pageTitle": "Billing",
"subtitle": "Your plan for {{workspace}}.",
"disabled": "Billing isn't enabled on this instance. Self-hosted Kaneo includes every feature, free forever.",
"currentPlan": {
"title": "Current plan"
},
"foundingFree": {
"title": "Founding Free",
"badge": "Free",
"description": "This workspace has free access to Kaneo Cloud as an early supporter. Thank you for being here from the start."
},
"seats_one": "{{count}} seat",
"seats_other": "{{count}} seats",
"accessEnds": "Access ends",
"renews": "Renews",
"portalHint": "Invoices, payment method, and cancelling are handled in Creem.",
"manage": "Manage billing",
"opening": "Opening...",
"trial": {
"activeTitle": "Free trial",
"expiredTitle": "Your trial has ended",
"expiredDescription": "Subscribe to a plan below to keep creating and editing. Your data stays safe and exportable in the meantime.",
"noDate": "Choose a plan below to continue after your trial.",
"badgeDaysLeft_one": "{{count}} day left",
"badgeDaysLeft_other": "{{count}} days left"
},
"choosePlan": {
"title": "Choose a plan",
"subtitle": "Switch anytime. Cancel whenever you like."
},
"interval": {
"monthly": "Monthly",
"annual": "Annual",
"annualBadge": "2 months free"
},
"mostPopular": "Most popular",
"choose": "Choose {{plan}}",
"starting": "Starting...",
"processedBy": "Payments are securely processed by Creem. Prices exclude tax where applicable.",
"adminsOnly": "Only workspace owners and admins can manage billing.",
"price": {
"perMonth": "/ month",
"perYear": "/ year",
"perUserMonth": "/ user / month",
"perUserYear": "/ user / year",
"billedMonthly": "Billed monthly",
"billedYearly": "{{price}} / month, billed yearly",
"billedYearlyPerUser": "{{price}} / user / month, billed yearly"
},
"plans": {
"personal": {
"name": "Personal",
"tagline": "For individuals"
},
"team": {
"name": "Team",
"tagline": "For teams working together"
}
},
"features": {
"singleUser": "Single user",
"unlimitedMembers": "Unlimited team members",
"unlimitedProjects": "Unlimited projects and tasks",
"roles": "Workspace roles and permissions",
"backups": "Automatic backups and updates",
"emailSupport": "Email support",
"prioritySupport": "Priority email support"
},
"status": {
"active": "Active",
"trialing": "Trial",
"past_due": "Payment past due",
"scheduled_cancel": "Cancels soon",
"canceled": "Canceled",
"expired": "Expired",
"paused": "Paused"
},
"trialCard": {
"daysLeft_one": "{{count}} day left in trial",
"daysLeft_other": "{{count}} days left in trial",
"ended": "Trial ended",
"activeDescription": "Upgrade anytime to keep your workspace after the trial.",
"endingDescription": "Pick a plan now so your team isn't interrupted.",
"expiredDescription": "Subscribe to keep creating and editing.",
"viewPlans": "View plans",
"choosePlan": "Choose a plan",
"dismiss": "Dismiss"
},
"expiredCallout": {
"title": "Your free trial has ended",
"adminDescription": "You can still view everything, but creating and editing are paused until you choose a plan. Nothing has been deleted.",
"memberDescription": "You can still view everything, but creating and editing are paused until a workspace owner or admin chooses a plan.",
"action": "Choose a plan"
},
"openFailed": "Couldn't open billing for this workspace",
"checkoutSuccess": {
"title": "Thanks for subscribing",
"description": "Payment received. The plan below updates once it's confirmed."
}
},
"chatIntegrations": {
"optional": "Optional",
"webhookUrlLabel": "Webhook URL",
"savedUrlPlaceholder": "Saved. Paste a new URL to replace it.",
"channelLabel": "Channel",
"channelPlaceholder": "#team-updates",
"channelHint": "Just a label for this list.",
"postWhen": "Post when",
"events": {
"taskCreated": "A task is created",
"taskStatusChanged": "Status changes",
"taskPriorityChanged": "Priority changes",
"taskTitleChanged": "Title changes",
"taskDescriptionChanged": "Description changes",
"taskCommentCreated": "Someone comments"
},
"activeTitle": "Posting to {{provider}}",
"activeDescription": "Turn off to pause without losing the setup.",
"saveChanges": "Save changes",
"disconnect": "Disconnect",
"disconnecting": "Disconnecting…",
"disconnectTitle": "Disconnect {{provider}}?",
"disconnectDescription": "Kaneo stops posting to {{provider}} and removes the saved settings.",
"retry": "Retry"
},
"codeHosting": {
"browse": "Browse",
"changeToken": "Change token",
"checking": "Checking access…",
"chooseProjectTitle": "Choose a project",
"chooseRepositoryTitle": "Choose a repository",
"connectProject": "Connect project",
"connectRepository": "Connect repository",
"copied": "Copied",
"copyFailed": "Couldn't copy to the clipboard.",
"copySecret": "Copy secret",
"copyUrl": "Copy webhook URL",
"disconnect": "Disconnect",
"disconnectDescription": "Tasks stop syncing with {{target}}. You can connect it again later.",
"disconnectTitle": "Disconnect {{provider}}?",
"disconnecting": "Disconnecting…",
"hideSecret": "Hide secret",
"importIssues": "Import issues",
"importNeedsReconnect": "Reconnect to enable importing.",
"importTitle": "Import open issues",
"importing": "Importing…",
"issuesSection": "Issues",
"lastImport": "Last import: {{imported}} created, {{updated}} updated, {{skipped}} skipped.",
"loadError": "Couldn't load this integration.",
"pausedHint": "Syncing is paused. Reconnect to resume.",
"projectSection": "Project",
"reconnect": "Reconnect",
"repositoryPathInvalid": "Enter the repository as owner/name.",
"repositoryPathLabel": "Repository",
"repositorySection": "Repository",
"retry": "Retry",
"saveToken": "Save token",
"showSecret": "Show secret",
"signInDescription": "Use a token that can read the project and its issues.",
"signInTitle": "Sign in to your instance",
"tokenStored": "Stored token",
"tokenTitle": "Access token",
"webhookSecret": "Secret",
"webhookSection": "Webhook",
"webhookUrl": "URL"
},
"shared": {
"autosave": "Changes save automatically"
},
"projectCustomFields": {
"pageTitle": "Custom fields",
"title": "Custom fields",
"subtitle": "Extra details every task in {{project}} can track, like size or customer.",
"subtitleFallback": "Extra details every task in this project can track, like size or customer.",
"newField": "New field",
"fieldsTitle": "Fields",
"fieldsDescription": "Drag to change the order they appear in on a task."
},
"sessions": {
"device": "{{browser}} on {{os}}",
"unknownDevice": "Unknown device",
"thisDevice": "This device",
"lastActive": "Active {{time}}",
"signedIn": "Signed in {{date}}",
"revoke": "Sign out",
"revoking": "Signing out...",
"revokeLabel": "Sign out {{device}}",
"revokeConfirmTitle": "Sign out {{device}}?",
"revokeConfirmDescription": "They'll be signed out right away.",
"loadError": "Couldn't load sessions.",
"toastRevoked": "Session signed out.",
"toastRevokeError": "Couldn't sign out the session."
},
"adminSystem": {
"title": "System",
"refresh": "Refresh",
"refreshing": "Checking…",
"checkedAt": "Checked {{time}}",
"loadError": "System status could not be loaded.",
"retry": "Retry",
"status": {
"ok": "Operational",
"warning": "Warning",
"not_configured": "Not configured",
"down": "Down"
},
"setupStatus": {
"ok": "Configured",
"warning": "Incomplete",
"not_configured": "Not configured",
"down": "Down"
},
"instance": {
"title": "Instance",
"version": "Kaneo version",
"versionUnknown": "Unknown",
"api": "API",
"apiDescription": "Up {{uptime}} · Node {{node}}",
"database": "Database",
"databaseVersion": "PostgreSQL {{version}}",
"migrations_one": "{{count}} migration applied",
"migrations_other": "{{count}} migrations applied",
"latency": "{{ms}} ms",
"databaseDown": "Can't reach PostgreSQL ({{code}})",
"realtime": "Live updates",
"realtimeConnections_one": "{{count}} open connection on this instance",
"realtimeConnections_other": "{{count}} open connections on this instance",
"realtimeInMemory": "delivered in memory",
"realtimeRedis": "shared with other instances through Redis",
"realtimeRedisDown": "Redis is down, so only people on this instance get live updates",
"realtimeNotStarted": "WebSockets haven't started",
"redis": "Redis",
"redisNotConfigured": "Set REDIS_URL to share live updates across API instances.",
"redisOk": "{{mode}}, reachable",
"redisDown": "Can't reach Redis ({{code}})",
"redisModes": {
"standalone": "Standalone",
"sentinel": "Sentinel",
"cluster": "Cluster"
},
"storage": "File storage",
"storageNotConfigured": "Set S3_ENDPOINT and S3_BUCKET to turn on uploads.",
"storageOk": "Bucket reachable",
"storageIncomplete": "Some S3 settings are missing, so uploads are off.",
"storageWarning": "Can't check the bucket with these credentials ({{code}}).",
"storageDown": "Can't reach the bucket ({{code}})"
},
"email": {
"title": "Email",
"smtp": "SMTP",
"notConfigured": "Set SMTP_HOST and SMTP_FROM to turn on email.",
"ok": "Connected to the mail server",
"down": "Can't connect to the mail server ({{code}})",
"sendTest": "Test email",
"send": "Send test email",
"sending": "Sending…"
},
"signIn": {
"title": "Sign-in",
"on": "On",
"off": "Off",
"passwordSignIn": "Email and password sign-in",
"emailOtpSignIn": "Email sign-in codes",
"registration": "Registration",
"passwordRegistration": "Sign-up with a password",
"guestAccess": "Guest access",
"workspaceCreation": "Workspace creation",
"customProvider": "OAuth or OpenID Connect"
},
"integrations": {
"title": "Integrations",
"available": "Available",
"connectedProjects_one": "Connected in {{count}} project",
"connectedProjects_other": "Connected in {{count}} projects",
"connectedUnknown": "Project count unavailable",
"instanceSetup": {
"ok": "GitHub App set up",
"warning": "Some GitHub App settings are missing",
"not_configured": "GitHub App not set up",
"down": "GitHub App unavailable"
}
},
"toast": {
"testEmailSent": "Test email sent to {{to}}",
"testEmailError": "The test email could not be sent."
}
},
"adminOverview": {
"title": "Overview",
"totalUsers": "Total users",
"activeUsers": "Active (30 days)",
"disabledUsers": "Disabled users",
"workspaces": "Workspaces",
"archivedWorkspaces": "Archived",
"recentUsers": "Recent users",
"recentActions": "Recent administrative actions",
"services": "Services",
"configurationWarnings": "Configuration warnings",
"viewUsers": "View users",
"viewAuditLog": "View audit log",
"viewSystem": "View system",
"noUsers": "No users",
"noActions": "No administrative actions",
"loadError": "Could not load the overview.",
"warnings": {
"smtpNotConfigured": "Email is not configured. Set SMTP_HOST and SMTP_FROM.",
"smtpUnreachable": "Email is unavailable. Check SMTP settings.",
"redisUnreachable": "Redis is unavailable. Check the connection.",
"storageIncomplete": "Storage setup is incomplete. Check S3 settings.",
"storageUnreachable": "Storage needs attention. Check S3 access.",
"registrationWithoutEmail": "Registration is open without email. Configure SMTP or set DISABLE_REGISTRATION=true.",
"noSecondAdmin": "Only one administrator has access. Assign a second admin in User management."
}
},
"adminRoles": {
"title": "Roles",
"create": "New role",
"listTitle": "All roles",
"loadError": "Roles could not be loaded.",
"builtIn": "Built-in",
"viewUsers": "View users",
"userCount_one": "{{count}} user",
"userCount_other": "{{count}} users",
"allPermissions": "All permissions",
"noPermissions": "No permissions",
"permissionCount_one": "{{count}} permission",
"permissionCount_other": "{{count}} permissions",
"actions": "Actions for {{name}}",
"edit": "Edit",
"deleteTitle": "Delete {{name}}?",
"dialog": {
"createTitle": "New role",
"editTitle": "Edit role",
"name": "Name",
"nameHint": "Use 2–32 lowercase letters, digits, or hyphens, starting with a letter.",
"create": "Create role",
"save": "Save"
},
"toast": {
"created": "Role created",
"updated": "Role updated",
"deleted": "Role deleted",
"error": "The role could not be saved."
},
"groups": {
"users": "Users",
"workspaces": "Workspaces",
"instance": "Instance"
},
"permissions": {
"usersRead": "View users",
"usersCreate": "Create users",
"usersUpdate": "Edit users and their roles",
"usersDisable": "Deactivate and reactivate users",
"usersDelete": "Delete users",
"usersCredentials": "Send password reset and verification emails",
"usersSessions": "View and end sessions",
"usersApiKeys": "View and revoke API keys",
"workspacesRead": "View workspaces and members",
"workspacesManage": "Manage workspace members",
"workspacesArchive": "Archive and restore workspaces",
"workspacesDelete": "Delete workspaces",
"auditRead": "View the audit log",
"systemRead": "View system status",
"instanceSettings": "Change instance settings"
}
},
"adminSettings": {
"title": "Settings",
"loadError": "Couldn't load instance settings.",
"general": "General",
"instanceName": "Instance name",
"save": "Save",
"instanceUrl": "Instance URL",
"instanceUrlMissing": "Set KANEO_CLIENT_URL",
"registration": "Registration",
"signInProviders": "Sign-in providers",
"registrationEnabled": "Open registration",
"passwordRegistrationEnabled": "Email and password sign-up",
"requireEmailVerification": "Require email verification",
"requiresSmtp": "Requires SMTP",
"defaultRole": "Default role for new users",
"workspaces": "Workspaces",
"workspaceCreationRestricted": "Only administrators can create workspaces",
"integrations": "Integrations",
"lockedByEnv": "Set by {{name}}",
"toast": {
"saved": "Settings saved",
"error": "Couldn't save settings"
}
},
"adminWebhooks": {
"title": "Webhooks",
"add": "Add webhook",
"edit": "Edit webhook",
"url": "URL",
"categories": "Events",
"enabled": "Enabled",
"disabled": "Disabled",
"actions": "Actions for {{url}}",
"deliveries": "Recent deliveries",
"sendTest": "Send test",
"rotate": "Rotate secret",
"rotateTitle": "Rotate signing secret?",
"deleteTitle": "Delete webhook?",
"secretTitle": "Signing secret — save it now",
"signingSecret": "Signing secret",
"setup": "Set NOTIFICATION_SECRET_ENCRYPTION_KEY to create webhooks.",
"loadError": "Webhooks could not be loaded.",
"saveError": "The webhook could not be saved.",
"empty": "No webhooks",
"noDeliveries": "No deliveries",
"testQueued": "Test event queued.",
"testEvent": "Test event",
"pending": "Pending",
"succeeded": "Delivered",
"failed": "Failed",
"attempts_one": "{{count}} attempt",
"attempts_other": "{{count}} attempts",
"httpStatus": "HTTP {{status}}",
"errors": {
"network": "Connection failed",
"timeout": "Timed out",
"http": "HTTP error",
"destination": "Destination blocked",
"signing": "Signing failed",
"disabled": "Webhook disabled",
"interrupted": "Delivery interrupted",
"response": "Invalid response"
},
"save": "Save"
}
},
"navigation": {
"commandPalette": {
"suggestions": "Suggestions",
"commands": "Commands",
"projects": "Projects",
"search": "Search",
"members": "Members",
"createTask": "Create task",
"createProject": "Create project",
"createWorkspace": "Create workspace",
"lightTheme": "Light theme",
"darkTheme": "Dark theme",
"systemTheme": "System theme",
"keyboardShortcuts": "Keyboard shortcuts",
"inputPlaceholder": "Search for apps and commands...",
"empty": "No results found.",
"footer": {
"navigate": "Navigate",
"open": "Open",
"close": "Close"
}
},
"sidebar": {
"projects": "Projects",
"members": "Members",
"invitations": "Invitations",
"more": "More",
"backToBoard": "Back to board",
"home": "Home",
"inbox": "Inbox",
"myTasks": "My tasks",
"invitePeople": "Invite people"
},
"projectList": {
"viewProject": "View Project",
"shareProject": "Share Project",
"projectSettings": "Project settings",
"linkCopied": "Project link copied to clipboard",
"addProject": "Add project",
"deleteConfirmTitle": "Delete Project?",
"deleteConfirmDescription": "This will permanently remove the project and all its data. You can't undo this action.",
"deletedToast": "Project deleted",
"deleteProject": "Delete Project",
"switcherLabel": "Switch project or view"
},
"search": {
"inputPlaceholder": "Search tasks, projects, comments...",
"minCharsHint": "Type at least 3 characters to search",
"groups": {
"task": "Tasks",
"project": "Projects",
"workspace": "Workspaces",
"comment": "Comments",
"activity": "Activities",
"fallback": "Results"
}
},
"settingsLayout": {
"toggleSidebar": "Toggle sidebar",
"back": "Back"
},
"userMenu": {
"signedOutSuccess": "Signed out successfully",
"signOutFailed": "Failed to sign out",
"unnamedUser": "User",
"settings": "Settings",
"signingOut": "Signing out...",
"logOut": "Log out"
},
"workspaceSwitcher": {
"workspaces": "Workspaces",
"switching": "Switching...",
"addWorkspace": "Add workspace",
"selectWorkspace": "Select workspace"
},
"page": {
"settingsTitle": "Settings",
"backToWorkspace": "Back to Workspace",
"settingsWorkspaceTab": "Workspace"
},
"projectSettings": {
"projectLabel": "Project"
},
"shortcuts": {
"categories": {
"general": "General",
"navigation": "Navigation",
"create": "Create",
"views": "Views",
"tasks": "Tasks",
"list": "Board and list",
"inbox": "Inbox",
"filters": "Filters",
"editor": "Editor"
},
"items": {
"openCommandMenu": "Open command menu",
"openSearch": "Search",
"openShortcuts": "Keyboard shortcuts",
"submit": "Save or submit",
"back": "Close or go back",
"switchWorkspace": "Switch workspace",
"logOut": "Log out",
"showDisplayOptions": "Display options",
"dismissToasts": "Dismiss all toasts",
"toggleSidebar": "Toggle sidebar",
"goToHome": "Go to home",
"goToInbox": "Go to inbox",
"goToMyTasks": "Go to my tasks",
"goToProjects": "Go to projects",
"goToSettings": "Go to settings",
"goToTasks": "Go to tasks",
"goToBacklog": "Go to backlog",
"goToProject": "Go to project 1–9",
"openTask": "Open task",
"openProject": "Open project",
"createTask": "Create task",
"createProject": "Create project",
"toggleLayout": "Switch between board and list",
"deleteTask": "Delete task",
"copyTaskUrl": "Copy task URL",
"copyBranchName": "Copy branch name",
"nextTask": "Next item",
"previousTask": "Previous item",
"openFocusedTask": "Open focused item",
"selectAll": "Select all",
"clearSelection": "Clear selection",
"changeStatus": "Change status",
"changePriority": "Change priority",
"assignTask": "Assign",
"assignToMe": "Assign to me",
"changeLabels": "Change labels",
"setDueDate": "Set due date",
"removeDueDate": "Remove due date",
"renameTask": "Rename",
"editDescription": "Edit description",
"commentOnTask": "Comment",
"moveToProject": "Move to another project",
"createSubtask": "Create subtask",
"setParent": "Set parent task",
"openParent": "Open parent task",
"openSubtask": "Open subtask",
"markBlockedBy": "Mark as blocked by",
"markBlocking": "Mark as blocking",
"markRelated": "Mark as related",
"addLink": "Add a link",
"toggleResources": "Show or hide resources",
"copyTaskId": "Copy task ID",
"copyTaskTitle": "Copy task title",
"copyAsMarkdown": "Copy as Markdown",
"peekTask": "Preview focused task",
"selectTask": "Select task",
"selectGroup": "Select all in group",
"copyPageUrl": "Copy page URL",
"focusRight": "Next column",
"focusLeft": "Previous column",
"moveTaskTop": "Move to top of group",
"moveTaskUp": "Move up one position",
"moveTaskDown": "Move down one position",
"moveTaskBottom": "Move to bottom of group",
"moveTaskLeft": "Move to previous column",
"moveTaskRight": "Move to next column",
"toggleGroup": "Collapse or expand group",
"toggleAllGroups": "Collapse or expand all groups",
"deleteNotification": "Delete notification",
"deleteReadNotifications": "Delete all read notifications",
"toggleNotificationRead": "Mark as read or unread",
"markAllNotificationsRead": "Mark all as read",
"addFilter": "Add filter",
"clearAllFilters": "Clear all filters",
"clearLastFilter": "Clear last filter",
"editorBold": "Bold",
"editorItalic": "Italic",
"editorUnderline": "Underline",
"editorStrike": "Strikethrough",
"editorAttach": "Attach image or file",
"editorInlineCode": "Inline code",
"editorLink": "Turn text into link",
"editorQuote": "Blockquote",
"editorParagraph": "Regular text",
"editorHeading1": "Heading 1",
"editorHeading2": "Heading 2",
"editorHeading3": "Heading 3",
"editorChecklist": "Checklist",
"editorToggleChecklist": "Toggle checklist item",
"editorBulletList": "Bulleted list",
"editorNumberedList": "Numbered list",
"editorCodeBlock": "Code block",
"editorUndo": "Undo",
"editorRedo": "Redo"
},
"title": "Keyboard shortcuts",
"searchPlaceholder": "Search by action or key",
"results_one": "{{count}} result",
"results_other": "{{count}} results",
"noResults": "No shortcuts match",
"then": "then",
"or": "or",
"thenEllipsis": "then…"
}
},
"notifications": {
"newCount_one": "{{count}} new",
"newCount_other": "{{count}} new",
"emptyTitle": "No notifications yet",
"emptySubtitle": "You'll see updates and activity here.",
"clearAll": "Clear all notifications",
"clearDialogTitle": "Clear all notifications?",
"clearDialogDescription": "This will permanently remove all notifications. You can't undo this action.",
"reminderLeadTime": {
"minutes_one": "{{count}} minute",
"minutes_other": "{{count}} minutes",
"hours_one": "{{count}} hour",
"hours_other": "{{count}} hours",
"days_one": "{{count}} day",
"days_other": "{{count}} days"
},
"events": {
"task_created": {
"title": "New task created",
"content": "Task \"{{taskTitle}}\" was created"
},
"workspace_created": {
"title": "Workspace created",
"content": "Your workspace \"{{workspaceName}}\" has been created successfully"
},
"task_status_changed": {
"title": "Task status changed",
"content": "Task \"{{taskTitle}}\" status changed from \"{{oldStatus}}\" to \"{{newStatus}}\""
},
"task_assignee_changed": {
"title": "Task assigned to you",
"content": "You have been assigned to task: {{taskTitle}}"
},
"task_mention": {
"title": "{{mentionerName}} mentioned you",
"content": "{{mentionerName}} mentioned you in: {{taskTitle}}"
},
"task_comment": {
"title": "{{commenterName}} commented on your task",
"content": "New comment on {{taskTitle}}: {{commentPreview}}"
},
"due_date_reminder": {
"title": "Task due soon",
"content": "{{taskTitle}} is due in {{leadTime}}"
},
"task_overdue": {
"title": "Task overdue",
"content": "{{taskTitle}} is past its due date"
},
"time_entry_created": {
"title": "Time tracking started",
"contentWithTask": "Time tracking started on task: {{taskTitle}}",
"contentWithoutTask": "Time tracking started on a task"
}
},
"inbox": {
"pageTitle": "Inbox",
"unread": "Unread",
"today": "Today",
"earlier": "Earlier",
"filters": {
"label": "Filter notifications",
"all": "All",
"unread": "Unread",
"mentions": "Mentions"
},
"emptyFilter": "Nothing here",
"loadError": "Notifications couldn't be loaded.",
"selectPrompt": "Select a notification to read it",
"back": "Inbox",
"openTask": "Open task",
"recentActivity": "Recent activity",
"taskUnavailable": "This task is no longer available.",
"taskLoadError": "This task couldn’t be loaded.",
"actionError": "Couldn't update your inbox. Try again.",
"readCleared": "Deleted read notifications"
}
},
"activity": {
"assignedToSelf": "assigned the task to themselves",
"unassigned": "unassigned the task",
"assignedTo": "assigned the task to {{name}}",
"changedStatus": "changed status from {{from}} to {{to}}",
"changedPriority": "changed priority from {{from}} to {{to}}",
"clearedDueDate": "cleared the due date",
"setDueDate": "set due date to {{date}}",
"changedDueDate": "changed due date from {{from}} to {{to}}",
"changedTitle": "changed title from \"{{from}}\" to \"{{to}}\"",
"moved": "moved task from \"{{from}}\" to \"{{to}}\"",
"movedFromOtherProject": "moved task from another project to \"{{to}}\"",
"created": "created this task",
"githubUser": "GitHub User",
"comment": {
"viewGithubProfile": "View GitHub Profile",
"commentedOnForge": "commented on {{forge}}",
"cannotBeEmpty": "Comment cannot be empty",
"mustBeLoggedInToEdit": "You must be logged in to edit comments",
"updated": "Comment updated",
"failedToUpdate": "Failed to update comment",
"edit": "Edit comment",
"editPlaceholder": "Edit comment...",
"save": "Save",
"added": "Comment added",
"failedToAdd": "Failed to add comment",
"leavePlaceholder": "Leave a comment...",
"attachFile": "Attach file",
"submitShortcut": "Submit comment",
"editor": {
"uploadsOnlyOnSavedTasks": "File uploads are only available on saved tasks.",
"uploadingFile": "Uploading file...",
"imageUploaded": "Image uploaded",
"fileAttached": "File attached",
"failedToUploadFile": "Failed to upload file",
"plaintext": "Plaintext",
"autoDetect": "Auto detect",
"slashGroupText": "Text",
"slashGroupLists": "Lists",
"slashGroupInsert": "Insert",
"slashParagraph": "Text",
"slashHeading": "Heading",
"slashBulletList": "Bulleted list",
"slashTaskList": "To-do list",
"slashOrderedList": "Numbered list",
"slashQuote": "Quote",
"slashCodeBlock": "Code block",
"slashTable": "Table",
"slashFile": "File",
"searchParagraph": "text paragraph normal",
"searchHeading": "heading title h2",
"searchBulletList": "list bullet unordered",
"searchTaskList": "todo to-do checklist checkbox task list",
"searchOrderedList": "list ordered numbered",
"searchQuote": "quote blockquote",
"searchCodeBlock": "code snippet",
"searchTable": "table grid",
"searchFile": "file attachment image photo picture upload",
"embedErrorInvalidUrl": "Enter a valid URL",
"embedErrorYoutubeOnly": "Only YouTube links can be embedded.",
"embedVideo": "Embed video",
"keepAsLink": "Keep as link",
"hintTab": "Tab",
"hintEsc": "Esc",
"pasteUrl": "Paste URL",
"asLink": "As link",
"embed": "Embed",
"noCommands": "No commands",
"ariaCommentContent": "Comment content",
"ariaCommentEditor": "Comment editor",
"ariaCopyCode": "Copy code",
"ariaCopied": "Copied",
"copy": "Copy",
"copied": "Copied",
"dropImageToUpload": "Drop image to upload",
"previewImageAlt": "Preview image",
"codeLang": {
"bash": "Bash",
"csharp": "C#",
"cpp": "C++",
"css": "CSS",
"go": "Golang",
"graphql": "GraphQL",
"html": "HTML",
"json": "JSON",
"java": "Java",
"javascript": "JavaScript",
"markdown": "Markdown",
"mermaid": "Mermaid",
"plaintext": "Plaintext",
"python": "Python",
"rust": "Rust",
"sql": "SQL",
"swift": "Swift",
"typescript": "TypeScript",
"yaml": "YAML"
},
"table": {
"addColumnBefore": "Insert column left",
"addColumnAfter": "Insert column right",
"deleteColumn": "Delete column",
"addRowBefore": "Insert row above",
"addRowAfter": "Insert row below",
"deleteRow": "Delete row",
"deleteTable": "Delete table"
},
"mermaid": {
"renderFailed": "Mermaid diagram couldn't be rendered"
}
},
"importedFrom": "Imported from {{source}}",
"importedBy": "Imported by {{name}}"
}
},
"tasks": {
"checklistProgress": "{{completed}} of {{total}} checklist items completed",
"title": "Tasks",
"status": {
"label": "Status",
"to-do": "To Do",
"in-progress": "In Progress",
"in-review": "In Review",
"done": "Done",
"archived": "Archived",
"planned": "Planned"
},
"priority": {
"label": "Priority",
"no-priority": "No priority",
"low": "Low",
"medium": "Medium",
"high": "High",
"urgent": "Urgent"
},
"view": {
"board": "Board",
"list": "List",
"backlog": "Backlog",
"gantt": "Gantt",
"heading": "View"
},
"common": {
"selectTask": "Select task",
"loadingTask": "Loading task...",
"taskNotFound": "Task not found",
"taskNotFoundDescription": "The task you are looking for does not exist or has been deleted.",
"ticketAmbiguous": "Task ID matches more than one task",
"ticketAmbiguousDescription": "{{ticketId}} matches tasks in more than one project in this workspace. Give one of those projects a different key to fix the link.",
"ticketNotFoundDescription": "No task with the ID {{ticketId}} exists in this workspace, or you don't have access to it.",
"customFields": "Custom Fields"
},
"detail": {
"subtaskOf": "Subtask of",
"activity": "Activity",
"noActivity": "No activity found",
"openInFullPage": "Open in full page",
"titlePlaceholder": "Click to add a title",
"addDescription": "Add a description...",
"editor": {
"ariaLabel": "Task description editor",
"placeholder": "Write a description...",
"previewImage": "Preview image",
"autoDetect": "Auto detect",
"copyCode": "Copy code",
"copy": "Copy",
"copied": "Copied",
"attachFile": "Attach file",
"dropToUpload": "Drop image to upload",
"checkbox": {
"markIncomplete": "Mark task as incomplete",
"markComplete": "Mark task as complete"
},
"upload": {
"loading": "Uploading file...",
"failed": "Failed to upload file",
"imageSuccess": "Image uploaded",
"fileSuccess": "File attached"
},
"slash": {
"groups": {
"text": "Text",
"lists": "Lists",
"insert": "Insert"
},
"empty": "No commands",
"commands": {
"paragraph": "Text",
"heading-2": "Heading",
"bullet-list": "Bulleted list",
"task-list": "To-do list",
"ordered-list": "Numbered list",
"blockquote": "Quote",
"code-block": "Code block",
"table": "Table",
"file": "File"
}
},
"languages": {
"bash": "Bash",
"csharp": "C#",
"cpp": "C++",
"css": "CSS",
"clojure": "Clojure",
"cypher": "Cypher",
"dart": "Dart",
"diff": "Diff",
"elixir": "Elixir",
"excel": "Excel",
"go": "Golang",
"graphql": "GraphQL",
"html": "HTML",
"haskell": "Haskell",
"json": "JSON",
"java": "Java",
"javascript": "JavaScript",
"kotlin": "Kotlin",
"makefile": "Makefile",
"markdown": "Markdown",
"mermaid": "Mermaid",
"ocaml": "OCaml",
"php": "PHP",
"perl": "Perl",
"plaintext": "Plaintext",
"python": "Python",
"r": "R",
"reasonml": "ReasonML",
"ruby": "Ruby",
"rust": "Rust",
"sql": "SQL",
"swift": "Swift",
"toml": "TOML",
"terraform": "Terraform",
"typescript": "TypeScript",
"xml": "XML",
"yaml": "YAML"
},
"embed": {
"choice": {
"embedVideo": "Embed video",
"keepAsLink": "Keep as link"
},
"inputPlaceholder": "Paste URL",
"embeddedContent": "Embedded content",
"asLink": "As link",
"submit": "Embed",
"errors": {
"invalidUrl": "Enter a valid URL",
"onlyYoutube": "Only YouTube links can be embedded."
},
"onlyYoutubeInline": "Only YouTube URLs can be embedded. Use link mode instead."
},
"mermaid": {
"renderFailed": "Mermaid diagram couldn't be rendered"
},
"image": {
"large": "Large",
"medium": "Medium",
"reset": "Reset size",
"resizeHandle": "Resize image",
"small": "Small"
},
"saved": "Saved",
"saving": "Saving…",
"saveFailed": "Changes could not be saved",
"retrySave": "Retry"
}
},
"entity": {
"task": "Task"
},
"relations": {
"title": "Relations",
"tasksInProject": "Tasks in project",
"linkError": "Failed to link task",
"empty": "No related tasks",
"searchPlaceholder": "Search tasks to link...",
"noTasksFound": "No tasks found",
"openTask": "Open task",
"removeRelation": "Remove relation",
"related": "Related",
"blocks": "Blocks",
"selectTask": "Select a task to link",
"types": {
"blocks": "blocks",
"blocked_by": "blocked by",
"related": "relates to"
},
"blockedBy": "Blocked by",
"parentPlaceholder": "Set parent task…"
},
"subtasks": {
"progress": "{{completed}} of {{total}} subtasks completed",
"noCompletionColumn": "This project has no matching column for completing or reopening this subtask.",
"title": "Sub-tasks",
"inputPlaceholder": "Subtask title...",
"addAction": "Add",
"empty": "No subtasks yet",
"createError": "Failed to create subtask",
"deleteSuccess": "Task deleted successfully",
"deleteError": "Failed to delete task",
"deleteDialogTitle": "Delete Task?",
"deleteDialogDescription": "This will permanently remove the task and all its data. You can't undo this action.",
"deleteAction": "Delete Task",
"completeAria": "Mark subtask complete"
},
"properties": {
"title": "Properties",
"labels": "Labels",
"addLabels": "Add labels",
"copyTaskLink": "Copy task link",
"copyTaskBranch": "Copy task branch",
"taskLinkCopied": "Copied task link",
"taskBranchCopied": "Copied branch name",
"start": "Start",
"startDate": "Start date",
"noDate": "No date",
"dates": "Dates",
"project": "Project"
},
"move": {
"title": "Move task",
"projectLabel": "Destination project",
"projectPlaceholder": "Select a project",
"statusLabel": "Destination status",
"statusHintKeep": "This project's workflow already supports the current status.",
"statusHintAdjust": "Choose the status to use in the destination project.",
"action": "Move task",
"success": "Task moved successfully",
"error": "Failed to move task"
},
"popover": {
"assignee": {
"unassigned": "Unassigned",
"updateError": "Failed to update task assignee"
},
"status": {
"updateError": "Failed to update task status"
},
"priority": {
"updateError": "Failed to update task priority"
},
"dueDate": {
"updateError": "Failed to update task due date",
"clear": "Clear date"
},
"recurrence": {
"toggle": "Repeat",
"repeats": "Repeats",
"pattern": {
"daily": "Daily",
"weekly": "Weekly",
"monthly": "Monthly",
"yearly": "Yearly",
"periodically": "Periodically"
},
"every": "Every",
"interval": "Interval",
"unit": {
"label": "Unit",
"days_one": "day",
"days_other": "days",
"weeks_one": "week",
"weeks_other": "weeks",
"months_one": "month",
"months_other": "months",
"years_one": "year",
"years_other": "years"
},
"onDays": "On these days",
"hint": "When this task is done, the next one is created.",
"updateError": "Failed to update task repeat"
},
"startDate": {
"updateError": "Failed to update task start date",
"clear": "Clear start date"
},
"labels": {
"searchPlaceholder": "Search labels...",
"empty": "No labels found",
"create": "Create \"{{name}}\"",
"chooseColor": "Choose color",
"updateError": "Failed to update label",
"createSuccess": "Label created and added",
"createError": "Failed to create label",
"colors": {
"stone": "Stone",
"slate": "Slate",
"lavender": "Lavender",
"sage": "Sage",
"forest": "Forest",
"amber": "Amber",
"terracotta": "Terracotta",
"rose": "Rose",
"crimson": "Crimson",
"ocean": "Ocean",
"sky": "Sky",
"lagoon": "Lagoon",
"orchid": "Orchid"
},
"editLabels": "Edit labels"
}
},
"backlog": {
"pageTitle": "{{name}}'s backlog",
"noTasksToMove": "No planned tasks to move",
"moveAllConfirm": "Move all {{count}} planned tasks to To Do?",
"moveAllSuccess": "Moved {{count}} tasks to To Do",
"plan": "Plan",
"moveAllTooltip": "Move all planned tasks to To Do",
"moveAll": "Move all",
"addTask": "Add task",
"sections": {
"planned": "Planned",
"archived": "Archived"
},
"noTasksInSection": "No {{section}} tasks",
"filters": {
"dueThisWeek": "Due this week",
"dueNextWeek": "Due next week",
"noDueDate": "No due date"
}
},
"sort": {
"direction": "Direction",
"ascending": "Ascending",
"descending": "Descending",
"fields": {
"position": "Manual (position)",
"createdAt": "Created date",
"priority": "Priority",
"dueDate": "Due date",
"title": "Title",
"number": "Task number"
}
},
"boardFilters": {
"noValuesUsedYet": "No values used yet",
"noCustomFieldValues": "No custom field values",
"allCustomFieldValues": "All values",
"selectedCount": "{{count}} selected",
"subjects": {
"status": "Status",
"priority": "Priority",
"assignee": "Assignee",
"dueDate": "Due date",
"labels": "Labels"
},
"operators": {
"isAnyOf": "is any of",
"includeAnyOf": "include any of",
"is": "is",
"isNot": "is not",
"isNoneOf": "is none of",
"include": "include",
"exclude": "exclude"
}
},
"calendar": {
"pageTitle": "{{name}} / Calendar",
"title": "Calendar",
"previousMonth": "Previous month",
"nextMonth": "Next month",
"today": "Today",
"noTasks": "No scheduled tasks",
"noTasksSubtitle": "Add a start date, due date, or both to tasks to place them on the calendar.",
"moreTasks": "+{{count}} more",
"loadError": "Failed to load tasks.",
"dayTasksAriaLabel": "Show all tasks for {{date}}",
"taskAriaLabel": "{{title}}, {{range}}: open task",
"noTasksThisMonth": "Nothing scheduled this month"
},
"gantt": {
"searchPlaceholder": "Search scheduled tickets...",
"pageTitle": "{{name}} / Gantt",
"title": "Gantt Timeline",
"jumpToToday": "Jump to today",
"hideTasks": "Hide tasks",
"showTasks": "Show tasks",
"noTasks": "No scheduled tasks",
"noTasksSubtitle": "Add a start date, due date, or both to tasks to place them on the project timeline.",
"noTasksFound": "No tasks found",
"taskHeader": "Task",
"updateDatesError": "Failed to update task dates",
"resizeStart": "Resize start date",
"resizeDue": "Resize due date",
"taskAriaLabel": "{{title}}: open or drag to move",
"previousPeriod": "Previous period",
"nextPeriod": "Next period",
"periodStart": "Timeline start date",
"showTaskDates": "Show task dates"
},
"delete": {
"title": "Delete Task?",
"description": "This will permanently remove the task and all its data. You can't undo this action.",
"action": "Delete Task",
"success": "Task deleted successfully",
"error": "Failed to delete task"
},
"duplicate": {
"titleSuffix": "{{title}} (copy)",
"success": "Task duplicated successfully",
"error": "Failed to duplicate task"
},
"archive": {
"success": "Archived {{count}} tasks",
"confirmTitle_one": "Archive {{count}} completed task?",
"confirmTitle_other": "Archive {{count}} completed tasks?",
"confirmDescription": "They leave the board and move to the Archived section of the backlog."
},
"listView": {
"addTask": "Add task",
"archiveAllTooltip": "Archive all completed tasks",
"noTasks": "No tasks",
"expandSubtasks": "Show subtasks of {{title}}",
"collapseSubtasks": "Hide subtasks of {{title}}",
"subtaskLevel": "Subtask, level {{level}}",
"subtasksLoadError": "Subtasks couldn't be loaded, so tasks are shown without their hierarchy."
},
"kanban": {
"addTask": "Add task",
"automaticallySortedHint": "Automatically sorted by {{sort}}"
},
"pr": {
"merged": "Merged",
"draft": "Draft",
"open": "Open",
"label": "Pull Request",
"count_one": "{{count}} PR",
"count_other": "{{count}} PRs",
"closed": "Closed"
},
"assignee": {
"label": "Assignee",
"unassigned": "Unassigned"
},
"dueDate": {
"label": "Due date",
"clear": "Clear date",
"updateError": "Failed to update task due date",
"clearError": "Failed to clear due date"
},
"recurrence": {
"daily_one": "Every day",
"daily_other": "Every {{count}} days",
"weekly_one": "Every week",
"weekly_other": "Every {{count}} weeks",
"monthly_one": "Every month",
"monthly_other": "Every {{count}} months",
"yearly_one": "Every year",
"yearly_other": "Every {{count}} years",
"onDays": "{{rule}} on {{days}}"
},
"labels": {
"empty": "No labels available"
},
"update": {
"error": "Failed to update task"
},
"contextMenu": {
"copyLink": "Copy link",
"copyLinkSuccess": "Task link copied!"
},
"actions": {
"duplicate": "Duplicate",
"archive": "Archive",
"markAsPlanned": "Mark as planned",
"delete": "Delete..."
},
"bulk": {
"selectedCount": "{{count}} selected",
"moveToBacklog": "Move to backlog",
"moveToBacklogSuccess": "{{count}} tasks moved to backlog",
"moveToBacklogError": "Failed to move tasks to backlog",
"moveToBoard": "Move to board",
"moveToBoardSuccess": "{{count}} tasks moved to board",
"moveToBoardError": "Failed to move tasks to board",
"delete": "Delete tasks",
"deleteConfirmTitle_one": "Delete {{count}} task?",
"deleteConfirmTitle_other": "Delete {{count}} tasks?",
"deleteConfirmDescription": "This will permanently remove the selected tasks and all their data. You can't undo this action.",
"deleteSuccess": "{{count}} tasks deleted",
"deleteError": "Failed to delete tasks",
"archive": "Archive tasks",
"archiveSuccess": "{{count}} tasks archived",
"archiveError": "Failed to archive tasks",
"updateSuccess": "{{count}} tasks updated",
"updateError": "Failed to update tasks",
"assignTo": "Assign to",
"assignSuccess": "{{count}} tasks assigned",
"assignError": "Failed to assign tasks",
"setPriority": "Set Priority",
"updatePriorityError": "Failed to update priority",
"addLabel": "Add Label",
"addLabelSuccess": "Label added to {{count}} tasks",
"addLabelError": "Failed to add label",
"updateDueDateError": "Failed to update due date",
"actions": "Actions",
"searchActions": "Search actions...",
"noActionsFound": "No actions found.",
"changeStatus": "Change Status",
"clearSelection": "Clear selection",
"selectAll": "Select all",
"moreActions": "More actions",
"statusPlaceholder": "Change status…",
"priorityPlaceholder": "Set priority…",
"assigneePlaceholder": "Assign to…",
"labelPlaceholder": "Add label…",
"columnPlaceholder": "Move to column…"
},
"editor": {
"table": {
"addColumnBefore": "Insert column left",
"addColumnAfter": "Insert column right",
"deleteColumn": "Delete column",
"addRowBefore": "Insert row above",
"addRowAfter": "Insert row below",
"deleteRow": "Delete row",
"deleteTable": "Delete table"
}
},
"customFields": {
"fields": "Fields",
"empty": "Empty",
"required": "Required",
"enterKey": "Enter",
"toSave": "to save",
"clear": "Clear",
"setValue": "Set {{field}}…",
"noMatches": "No matching options",
"missingRequired_one": "{{count}} required field is empty",
"missingRequired_other": "{{count}} required fields are empty",
"saveError": "Couldn't save {{field}}",
"moreFields_one": "{{count}} more field",
"moreFields_other": "{{count}} more fields",
"manage": "Manage fields"
},
"descriptionSearchLoading": "Searching full descriptions…",
"descriptionSearchError": "Description search failed. Results may be incomplete.",
"descriptionRetry": "Retry",
"descriptionLoading": "Loading description…",
"descriptionLoadError": "The description could not be loaded. Retry to load the current version.",
"board": {
"reorderFailed": "Could not move task. Please try again.",
"keyboardInstructions": "Press Space to preview and Enter to open this task. Use Alt or Option with the arrow keys to move it.",
"loadErrorTitle": "This board didn't load",
"loadErrorDescription": "Something went wrong while fetching its tasks. Check your connection and try again.",
"refreshError": "Couldn't refresh this board, so it may be out of date.",
"tryAgain": "Try again"
},
"toolbar": {
"search": "Search tasks",
"clearSearch": "Clear search",
"taskCount_one": "{{count}} task",
"taskCount_other": "{{count}} tasks",
"shownCount_one": "{{shown}} of {{count}} task",
"shownCount_other": "{{shown}} of {{count}} tasks"
},
"display": {
"title": "Display",
"sortBy": "Sort by",
"showOnCards": "Show on cards",
"showOnRows": "Show on rows",
"checklistProgress": "Checklist progress",
"projectBackground": "Project background",
"layout": "Layout",
"includeSubtasks": "Include Sub Tasks",
"useProjectDefault": "Use project default"
},
"filterBar": {
"label": "Active filters",
"customFieldsLoading": "Loading custom-field values. Results are shown without custom-field filters.",
"customFieldsUnavailable": "Custom-field values could not be loaded. Results are shown without custom-field filters.",
"customFieldsRefreshError": "Custom-field values could not be refreshed. Results may be out of date.",
"removeFilter": "Remove {{name}} filter",
"noMatches": "No tasks match your search or filters."
},
"filterMenu": {
"addFilter": "Add filter…",
"searchSubject": "{{name}}…",
"noResults": "No results"
},
"shortcuts": {
"assignedToMe": "Assigned to you",
"idCopied": "Copied task ID",
"titleCopied": "Copied task title",
"markdownCopied": "Copied as Markdown",
"copyFailed": "Couldn't copy to the clipboard.",
"pageUrlCopied": "Copied page URL"
},
"due": {
"overdueDays_one": "{{count}}d overdue",
"overdueDays_other": "{{count}}d overdue",
"overdueWeeks_one": "{{count}}w overdue",
"overdueWeeks_other": "{{count}}w overdue",
"today": "Today",
"tomorrow": "Tomorrow",
"inDays_one": "In {{count}} day",
"inDays_other": "In {{count}} days",
"fullDate": "Due {{date}}"
},
"datePicker": {
"dueDatePlaceholder": "Set due date…",
"startDatePlaceholder": "Set start date…",
"datePlaceholder": "Set date…",
"thisWeekend": "This weekend",
"nextWeek": "Next week",
"pickDate": "Pick a date",
"startsOn": "Starts {{date}}",
"beforeStart": "{{date}} is before the start date",
"afterDue": "{{date}} is after the due date"
},
"dateFilter": {
"startDate": "Start date",
"noDate": "No date",
"condition": "Date condition",
"exact": "On",
"range": "Between",
"before": "Before",
"after": "After",
"apply": "Apply date filter",
"exactValue": "On {{date}}",
"beforeValue": "Before {{date}}",
"afterValue": "After {{date}}",
"rangeValue": "{{date}} – {{end}}"
}
},
"invitations": {
"email": {
"subject": "{{inviterName}} invited you to join {{workspaceName}} on {{instanceName}}",
"preview": "You're invited to {{workspaceName}} on Kaneo",
"title": "Join {{workspaceName}}",
"subtitle": "{{inviterName}} ({{inviterEmail}}) invited you to collaborate in Kaneo.",
"cta": "Accept invitation",
"sameEmail": "You can accept with the same email that received this message.",
"ignore": "If this wasn't expected, you can safely ignore this email.",
"footer": "Kaneo workspace invitation",
"details": {
"title": "Invitation details",
"sentTo": "Sent to",
"instance": "Instance",
"role": "Role",
"expires": "Expires"
}
},
"pageTitle": "Invitations",
"pendingInvitations": "Pending Invitations",
"acceptSubtitle": "Accept invitations to join workspaces",
"noPendingTitle": "No pending invitations",
"noPendingDescription": "You don't have any pending workspace invitations at the moment.",
"continueToSetup": "Continue to Setup",
"skipForNow": "Skip for now",
"table": {
"workspace": "Workspace",
"invitedBy": "Invited By",
"expires": "Expires"
},
"toast": {
"acceptError": "Failed to accept invitation",
"acceptSuccess": "Invitation accepted! Welcome to the team.",
"rejectError": "Failed to reject invitation",
"rejectSuccess": "Invitation rejected"
}
},
"workspace": {
"projects": {
"pageTitle": "Projects",
"createProject": "Create project",
"title": "Title",
"progress": "Progress",
"targetDate": "Target date",
"dueDate": "Due date",
"status": "Status",
"emptyTitle": "No projects yet",
"emptyDescription": "Get started by creating your first project.",
"emptyDescriptionReadOnly": "There are no projects in this workspace yet. Ask an admin to create one.",
"projectStatus": {
"notStarted": "Not started",
"complete": "Complete",
"inProgress": "In progress"
},
"noDueDate": "No due date",
"reorderHandle": "Reorder project",
"reorderError": "Failed to reorder projects",
"unavailable": {
"noAccessTitle": "You don't have access to this project",
"noAccessDescription": "Ask a workspace admin to give you access.",
"notFoundTitle": "Project not found",
"notFoundDescription": "This project doesn't exist or has been deleted.",
"backToWorkspace": "Back to workspace"
}
},
"search": {
"pageTitle": "Search",
"backToDashboard": "Back to Dashboard",
"placeholder": "Search tasks by title or short ID (e.g. DEP-23)...",
"hint": "Search across all projects in this workspace. Use short IDs like DEP-23 to find specific tasks.",
"searching": "Searching...",
"resultsFound_one": "{{count}} result found",
"resultsFound_other": "{{count}} results found",
"noResultsTitle": "No results found",
"noResultsDescription": "Try adjusting your search terms or search for something else",
"startTitle": "Start Searching",
"startDescription": "Enter a search term to find tasks across all projects",
"quickSearchesLabel": "Quick searches:",
"suggestionHighPriority": "High priority",
"suggestionBug": "Bug",
"suggestionFeature": "Feature",
"suggestionInProgress": "In progress",
"suggestionCompleted": "Completed"
},
"create": {
"pageTitle": "Create Workspace",
"heading": "Create a new workspace",
"subtitle": "Workspaces are shared environments where teams can work on projects, cycles and issues.",
"nameLabel": "Workspace Name",
"namePlaceholder": "Enter workspace name",
"descriptionLabel": "Description (optional)",
"descriptionPlaceholder": "Add a description for your workspace",
"required": "Required",
"creating": "Creating...",
"submit": "Create workspace",
"success": "Workspace created successfully",
"error": "Failed to create workspace"
},
"home": {
"pageTitle": "Home",
"greeting": {
"morning": "Good morning",
"afternoon": "Good afternoon",
"evening": "Good evening"
},
"newTask": "New task",
"week": {
"truncated": "The week preview includes only the first {{shown}} of {{total}} assigned tasks.",
"more_one": "+{{count}} more",
"more_other": "+{{count}} more"
},
"upNext": {
"title": "Up next",
"assigned_one": "{{count}} assigned to you",
"assigned_other": "{{count}} assigned to you",
"viewAll": "View all"
},
"projects": {
"title": "Your projects",
"all": "All projects",
"loadError": "Projects couldn't be loaded.",
"tasks_one": "{{count}} task",
"tasks_other": "{{count}} tasks"
},
"activity": {
"title": "Activity",
"commented": "commented",
"updated": "updated the task",
"empty": "Nothing has happened in the last 30 days.",
"loadError": "Activity couldn't be loaded."
}
},
"myWork": {
"empty": "Nothing assigned to you",
"loadError": "Your tasks couldn't be loaded.",
"due": {
"overdue": "Overdue",
"today": "Today",
"tomorrow": "Tomorrow",
"thisWeek": "This week",
"later": "Later",
"noDueDate": "No due date"
}
},
"myTasks": {
"pageTitle": "My tasks",
"emptyDescription": "Tasks assigned to you across this workspace show up here.",
"groupBy": {
"label": "Group by",
"dueDate": "Due date",
"project": "Project"
},
"truncated": "Showing the first {{shown}} of {{total}} tasks."
},
"archived": {
"title": "Workspace archived",
"description": "Contact an administrator to restore access.",
"otherWorkspaces": "Go to workspaces",
"manage": "Manage workspaces"
}
},
"team": {
"roles": {
"owner": "Owner",
"admin": "Admin",
"member": "Member",
"viewer": "Viewer"
},
"members": {
"pageTitle": "Members",
"inviteMember": "Invite member",
"you": "You"
},
"invitations": {
"pendingBadge": "pending",
"expires": "Expires {{date}}",
"linkLabel": "Invitation link",
"copyLink": "Copy link",
"linkCopied": "Invitation link copied",
"copyFailed": "Couldn't copy automatically. Select the link and press Ctrl+C."
},
"inviteModal": {
"title": "Invite Team Member",
"emailLabel": "Email",
"emailPlaceholder": "colleague@company.com",
"sendInvitation": "Send Invitation",
"success": "Invitation sent successfully",
"error": "Failed to invite team member",
"createdTitle": "Invitation created",
"shareLinkDescription": "Share this link with {{email}} so they can join the workspace.",
"done": "Done"
},
"membersTable": {
"emptyTitle": "No team members yet",
"emptyDescription": "Invite your first team member to get started.",
"columns": {
"name": "Name",
"role": "Role",
"joined": "Joined",
"actions": "Actions",
"projects": "Projects"
},
"memberRolePending": "{{role}} (Pending)",
"ariaCancelInvitation": "Cancel invitation",
"ariaInvitationActions": "Invitation actions",
"ariaRemoveMember": "Remove member",
"removeDialogTitle": "Remove Team Member?",
"removeDialogDescription": "Are you sure you want to remove {{name}} from the workspace? This action cannot be undone.",
"cancelDialogTitle": "Cancel Invitation?",
"cancelDialogDescription": "Are you sure you want to cancel the invitation for {{email}}? This action cannot be undone.",
"removeMember": "Remove Member",
"cancelInvitation": "Cancel Invitation",
"removeSuccess": "Team member removed successfully",
"removeError": "Failed to remove team member",
"cancelInviteSuccess": "Invitation cancelled successfully",
"cancelInviteError": "Failed to cancel invitation",
"roleUpdateSuccess": "Role updated",
"roleUpdateError": "Failed to update role"
},
"projectAccess": {
"label": "Project access",
"description": "Choose which projects this person can see.",
"allProjects": "All projects",
"allProjectsDescription": "Access every project in this workspace, including new ones.",
"allProjectsUnavailable": "Your own access is limited, so you can only give access to selected projects.",
"selectedProjects": "Selected projects",
"selectedProjectsDescription": "Only access the projects you choose.",
"projectsLabel": "Projects",
"noProjects": "No projects in this workspace yet.",
"archived": "Archived",
"selectAtLeastOne": "Choose at least one project.",
"projectCount_one": "{{count}} project",
"projectCount_other": "{{count}} projects",
"editAria": "Change project access for {{name}} ({{access}})",
"dialogTitle": "Project access",
"dialogDescription": "Choose which projects {{name}} can access.",
"save": "Save",
"updateSuccess": "Project access updated",
"updateError": "Failed to update project access"
}
},
"publicProject": {
"pageTitle": "Public View",
"badge": "Public",
"readOnly": "Read-only",
"error": {
"title": "Project Not Found",
"description": "This project doesn't exist or is not publicly accessible."
},
"taskCard": {
"viewDetailsAria": "View details for task {{title}}"
},
"taskDetail": {
"labels": "Labels",
"externalLinks": "External Links",
"pullRequestFallback": "Pull Request",
"issueFallback": "Issue",
"prStatusMerged": "Merged",
"prStatusDraft": "Draft",
"prStatusOpen": "Open",
"dueWithDate": "Due {{date}}",
"created": "Created",
"dueDateLabel": "Due Date"
},
"theme": {
"switchToLight": "Switch to light mode",
"switchToDark": "Switch to dark mode"
},
"copyUrl": {
"successToast": "URL copied",
"errorToast": "Failed to copy URL",
"copied": "Copied",
"share": "Share"
},
"branding": {
"poweredBy": "Powered by"
}
},
"press": {
"title": "Press kit",
"headline": "Kaneo press kit",
"intro": "Kaneo logos and product screenshots for articles, videos, and other media.",
"description": "Kaneo press resources: product information, logos, screenshots, and contact details for journalists and creators.",
"downloadKit": "Download all assets",
"boilerplateTitle": "About Kaneo",
"boilerplate": "Kaneo is an open-source project management platform created by Andrej Acevski. Teams can organize tasks in board and list views, assign work, set priorities and due dates, and connect GitHub. Kaneo is available under the MIT license for self-hosting, or as a managed service through Kaneo Cloud.",
"logosTitle": "Logos",
"darkLogo": "Dark wordmark",
"darkLogoAlt": "Dark Kaneo logo on a light background",
"darkLogoDetail": "SVG",
"lightLogo": "Light wordmark",
"lightLogoAlt": "Light Kaneo logo on a dark background",
"lightLogoDetail": "SVG",
"icon": "App icon",
"iconAlt": "Kaneo app icon",
"iconDetail": "PNG, 512 × 512",
"download": "Download",
"screenshotsTitle": "Screenshots",
"lightScreenshot": "Board (light)",
"lightScreenshotAlt": "Kaneo board in light theme, with task cards arranged by status",
"darkScreenshot": "Board (dark)",
"darkScreenshotAlt": "Kaneo board in dark theme, with task cards arranged by status",
"lightListScreenshot": "List (light)",
"lightListScreenshotAlt": "Kaneo task list in light theme, grouped by status with assignees, priorities, labels, and due dates",
"darkListScreenshot": "List (dark)",
"darkListScreenshotAlt": "Kaneo task list in dark theme, grouped by status with assignees, priorities, labels, and due dates",
"lightTimelineScreenshot": "Timeline (light)",
"lightTimelineScreenshotAlt": "Kaneo Gantt timeline in light theme, showing scheduled tasks and their durations",
"darkTimelineScreenshot": "Timeline (dark)",
"darkTimelineScreenshotAlt": "Kaneo Gantt timeline in dark theme, showing scheduled tasks and their durations",
"lightTaskScreenshot": "Task details (light)",
"lightTaskScreenshotAlt": "Kaneo task details in light theme, with a description, checklist, team comment, and task properties",
"darkTaskScreenshot": "Task details (dark)",
"darkTaskScreenshotAlt": "Kaneo task details in dark theme, with a description, checklist, team comment, and task properties",
"contactTitle": "Press enquiries",
"contactBody": "Contact the Kaneo team for product questions, interviews, or additional materials.",
"usageContrast": "Choose the light wordmark for dark backgrounds and the dark wordmark for light backgrounds.",
"usageProportions": "Keep the original proportions and colours, without stretching or adding effects.",
"usageSpace": "Leave enough space around the logo to keep it clear and readable."
},
"landing": {
"sponsors": {
"ciSponsor": "Partners"
},
"founder": {
"title": "Why Kaneo exists",
"intro": "I'm Andrej, and I created Kaneo because I was tired of project management tools that got in the way more than they helped. After years of using bloated, overcomplicated platforms that distracted from actual work, I knew there had to be a better way.",
"problem": "The problem wasn't that these tools lacked features. It was that they had too many. Every notification, every unnecessary button, every complex workflow was pulling my team away from what mattered: building great products.",
"principle": "I believe the best tools are invisible. They should amplify your team's natural workflow, not force you to adapt to theirs. Kaneo is built on the principle that less is more: every feature exists because it solves a real problem, not because it looks impressive in a demo."
},
"hero": {
"cloudCta": "Try Kaneo Cloud",
"pricingCta": "See pricing",
"trialNote": "14-day cloud trial. No credit card required.",
"github": "GitHub",
"appStore": "App Store",
"productHunt": "Product Hunt",
"title": "Project management",
"titleAccent": "that doesn't become the project.",
"description": "Boards, Gantt charts, and GitHub integration for teams that would rather ship than manage a tracker. Kaneo Cloud handles hosting, backups, and updates, so you can start in minutes."
},
"navigation": {
"product": "Product",
"pricing": "Pricing",
"resources": "Resources",
"docs": "Documentation",
"blog": "Blog",
"guides": "Guides",
"comparisons": "Compare tools",
"roadmap": "Roadmap",
"community": "Community",
"menu": "Menu",
"closeMenu": "Close menu",
"home": "Kaneo home",
"signIn": "Sign In",
"getStarted": "Get Started"
},
"showcase": {
"label": "Kaneo product views",
"controls": "Choose a product view",
"play": "Play product views",
"pause": "Pause product views",
"board": "Board",
"list": "Backlog",
"gantt": "Gantt"
},
"features": {
"tasks": {
"label": "Subtasks & context",
"title": "Big tasks. Clear next steps.",
"description": "Break work into subtasks, assign each one, and track progress without losing the original brief. Every detail stays with the work."
},
"github": {
"label": "GitHub integration",
"title": "From pull request to done.",
"description": "Issues and labels sync both ways. Linked pull requests move tasks through review to done as your code is opened and merged.",
"link": "Set up GitHub"
},
"hosting": {
"title": "We run it for you.",
"description": "Kaneo Cloud handles hosting, backups, and updates, so nobody on your team is on call for the tracker.",
"link": "See pricing"
},
"source": {
"title": "The code is open, too.",
"description": "Read the source, report an issue, or contribute a change. Development happens on GitHub.",
"link": "View the source"
},
"preview": {
"taskAlt": "Interactive Kaneo task and subtask preview.",
"githubAlt": "Interactive preview of a GitHub merge updating a Kaneo task.",
"taskTitle": "Publish the new homepage",
"taskDescription": "Update the copy and check the layout before the next release.",
"checklistDone": "Review the copy",
"checklistOpen": "Check the mobile layout",
"inProgress": "In Progress",
"high": "High",
"date": "Oct 12",
"design": "design",
"done": "Done",
"relationsAlt": "Interactive Kaneo task dependencies preview.",
"inReview": "In Review",
"trySubtasks": "Try checking off a subtask.",
"tryGithub": "Preview a merge to see the task update.",
"tryRelations": "Open a linked task to follow the connection.",
"mergeAction": "Preview merge",
"resetAction": "Reset preview",
"mergedHint": "Pull request merged. Task moved to Done.",
"progress": "{{completed}} of {{total}} subtasks complete",
"backToTask": "Back to the homepage task",
"releaseNotes": "Write the release notes",
"dependencyDescription": "The homepage is waiting on the mobile review. Keep the launch notes linked for context.",
"mobileDescription": "Check the new homepage on narrow screens before it goes live.",
"notesDescription": "Capture what changed for the launch announcement."
},
"relations": {
"label": "Linked tasks & dependencies",
"title": "See what’s holding things up.",
"description": "Connect blockers, follow dependencies, and keep related work close. Open a linked task to see the context behind the next step."
}
},
"seo": {
"title": "Kaneo: Project management that doesn't become the project",
"description": "Boards, Gantt charts, and GitHub integration, hosted for you on Kaneo Cloud. Start a 14-day free trial, no credit card required."
},
"resources": {
"eyebrow": "Make it your own",
"title": "A clear path from trying it to using it.",
"description": "See how teams use Kaneo, connect your tools, or compare it with your current tracker.",
"startups": {
"title": "Project management for startups",
"description": "What a startup needs from a tracker, and what Kaneo Cloud costs as you hire."
},
"sso": {
"title": "Bring your own identity provider",
"description": "Connect Google, GitHub, or any OIDC provider for single sign-on."
},
"mcp": {
"title": "Connect your AI tools",
"description": "Use MCP to work with tasks and projects through an AI client."
},
"linear": {
"title": "Compare Kaneo and Linear",
"description": "See the differences in hosting, licensing, and workflow."
}
},
"product": {
"title": "Before you get started",
"description": "The practical details about hosting, planning, and connecting your team.",
"overview": "Kaneo is a project management platform with boards, backlog, Gantt and calendar views, custom fields, time tracking, and GitHub integration. Kaneo Cloud runs it for you, and the open-source build can also be self-hosted.",
"hosting": {
"question": "How much does Kaneo Cloud cost?",
"answer": "Kaneo Cloud is $5 per user a month, or $4 a month for a single user, with every feature included and two months free on yearly billing. Hosting, backups, and updates are handled for you. Every plan starts with a 14-day free trial, no credit card required.",
"link": "See pricing"
},
"planning": {
"question": "Does Kaneo have Gantt charts?",
"answer": "Yes. Kaneo includes Gantt and calendar views alongside boards, lists, and backlog planning. Use task start dates and due dates to plan work on a timeline. Budgeting, baseline comparisons, and sprint burndown reports are outside its current scope.",
"link": "Compare planning features"
},
"sso": {
"question": "Is single sign-on included?",
"answer": "Yes, with no separate edition to buy. Kaneo supports Google, GitHub, Discord, and custom OAuth/OIDC providers. To connect your own identity provider without running servers, choose a managed instance, which includes your own domain and single sign-on.",
"link": "See managed instances"
},
"agents": {
"question": "Can AI clients work with Kaneo?",
"answer": "Yes. Kaneo provides an MCP server through the @kaneo/mcp package and an HTTP endpoint. Compatible AI clients can read and update tasks using an API key tied to a user, subject to workspace permissions.",
"link": "Read the MCP guide"
},
"mobile": {
"question": "Is there a mobile app?",
"answer": "Yes. Kaneo is on the App Store for iPhone and iPad, and Android is coming soon. The app is free for Kaneo Cloud accounts. Connecting it to a self-hosted server is a one-time $9.99 unlock per person, and like the rest of Kaneo, the app is open source.",
"link": "Download on the App Store"
}
},
"comparison": {
"feature": "Feature",
"yes": "Yes",
"no": "No"
},
"selfHostingGuide": {
"summary": "What self-hosting involves, with links to the maintained Docker Compose configuration and installation steps.",
"answer": "To self-host Kaneo, run the application and PostgreSQL with Docker Compose, configure your public URL and secrets, and put a TLS reverse proxy in front. The installation guide specifies at least 2 GB of RAM and 10 GB of disk space. Plan for ongoing updates, database backups, and storage for uploaded files.",
"requirements": "The documented minimum is 2 GB of RAM and 10 GB of disk space, with Docker 20.10 or newer and Docker Compose V2. Allow more capacity for your workload, database growth, and uploaded files.",
"compose": "Use the maintained compose.yml in the Docker Compose guide. It defines PostgreSQL, a persistent database volume, the Kaneo application, and health checks. Configure the environment file before starting the services; for production, pin an image version so updates are deliberate.",
"backups": "Back up both PostgreSQL and any object storage used for uploads. Choose a schedule based on how much work your team can afford to lose, store copies off the application server, and test restoring them before you need them.",
"worth": "Self-hosting makes sense when you need control over infrastructure and data, and someone can own maintenance. Include server capacity, storage, backups, and that maintenance time when comparing costs with a managed service.",
"minimum": "The installation guide specifies Docker 20.10 or newer, Docker Compose V2, at least 2 GB of RAM, and 10 GB of disk space. The Compose setup includes PostgreSQL. Redis is optional for a single API instance.",
"composeLink": "Docker Compose configuration",
"composeLinkDescription": "The maintained compose.yml with persistent storage and health checks.",
"startLink": "Start and verify the services",
"startLinkDescription": "Start the stack, inspect its status, and check that the application is available."
}
},
"mobile": {
"common": {
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"retry": "Try again",
"somethingWrong": "Something went wrong",
"close": "Close"
},
"errors": {
"notSignedIn": "Not signed in",
"unreachable": "Can't reach the server. Check your connection and the server address.",
"sessionExpired": "Your session has expired. Please sign in again.",
"forbidden": "You don't have permission to do that.",
"notFound": "Not found.",
"tooManyRequests": "Too many requests. Please wait a moment.",
"serverProblem": "The server had a problem ({{status}}).",
"requestFailed": "Request failed ({{status}}).",
"notKaneo": "{{url}} doesn't look like a Kaneo server.",
"noInstance": "No Kaneo instance found at {{url}} (HTTP {{status}}).",
"noSession": "The server didn't return a session. Try signing in through the browser.",
"deviceFailed": "Device sign-in failed (HTTP {{status}}).",
"apiKeyRejected": "That API key was rejected.",
"signInRejected": "Sign-in was not accepted by the server.",
"uploadFailed": "Upload failed ({{status}})"
},
"signIn": {
"tagline": "Project management that doesn't become the project. Connect to Kaneo Cloud or your own instance.",
"cloud": "Kaneo Cloud",
"selfHosted": "Self-hosted",
"captcha": "This server requires a browser check for this step. Use “Continue in browser” instead.",
"invalidClient": "This server doesn’t allow device sign-in. Ask its admin to add “kaneo-cli” to DEVICE_AUTH_CLIENT_IDS, or sign in with a password or API key.",
"serverAddress": "Server address",
"serverAddressHint": "The address you open Kaneo at. Use http:// for servers without TLS. If the API runs on another host, enter the API address.",
"connect": "Connect",
"recent": "Recent",
"change": "Change",
"email": "Email",
"password": "Password",
"togglePassword": "Toggle password visibility",
"signIn": "Sign in",
"or": "or",
"continueInBrowser": "Continue in browser",
"browserHint": "GitHub, Google, Discord or SSO",
"emailCode": "Email me a sign-in code",
"sendTo": "Send to {{email}}",
"noPassword": "No password needed",
"useApiKey": "Use an API key",
"newToKaneo": "New to Kaneo?",
"createAccount": "Create account",
"code": {
"title": "Sign in with a code",
"message": "We'll email you a 6-digit code. No password needed.",
"send": "Send code",
"checkEmail": "Check your email",
"sent": "We sent a 6-digit code to {{email}}",
"verify": "Verify",
"didntGet": "Didn’t get it?",
"resend": "Resend code"
},
"device": {
"denied": "Sign-in was denied in the browser.",
"expired": "The sign-in code expired. Start again to get a new one.",
"openFailed": "Couldn’t open a browser. Copy the link instead.",
"message": "Approve this device from the Kaneo website. GitHub, Google, Discord and SSO all work there.",
"yourCode": "Your code",
"copyCode": "Copy code",
"codeCopied": "Code copied",
"copyLink": "Copy link",
"linkCopied": "Link copied",
"openBrowser": "Open browser",
"tryAgain": "Try again",
"waiting": "Waiting for approval…",
"gettingCode": "Getting a code…"
},
"apiKey": {
"message": "Create one on the web under Settings, then API keys. It works even when other sign-in methods are turned off.",
"label": "API key"
},
"signUp": {
"name": "Name",
"passwordHint": "At least 8 characters"
},
"unlock": {
"title": "Connect your own server",
"message": "Signing in to Kaneo Cloud is always included. Connecting the app to a self-hosted server is a one-time purchase that supports Kaneo's development.",
"buy": "Unlock for {{price}}",
"buyNoPrice": "Unlock",
"restore": "Restore purchase",
"nothingToRestore": "No earlier purchase was found for this store account.",
"unavailable": "Purchases aren't available right now. Try again later."
}
},
"invitations": {
"accepted": "Invitation accepted",
"declined": "Invitation declined",
"title": "Invitations",
"description": "Workspaces you've been invited to join.",
"emptyTitle": "No pending invitations",
"emptyMessage": "Invitations appear here once your email address is verified. You can always join with the link from the email.",
"invitedYou": "{{name}} invited you",
"decline": "Decline",
"accept": "Accept",
"joinWithLink": "Join with an invitation link",
"linkPlaceholder": "Paste the link from your email",
"join": "Join"
},
"taskDetail": {
"someone": "Someone",
"status": {
"planned": "Planned",
"archived": "Archived"
},
"section": {
"addTo": "Add to {{title}}"
},
"fields": {
"title": "Fields",
"empty": "Empty",
"none": "None"
},
"subtasks": {
"title": "Subtasks",
"add": "Add subtask",
"parent": "Parent task",
"empty": "No subtasks"
},
"relations": {
"title": "Relations",
"link": "Link a task",
"blocks": "Blocks",
"blockedBy": "Blocked by",
"related": "Related",
"relatedTo": "Related to",
"remove": "Remove relation",
"empty": "No related tasks",
"removeTitle": "Remove relation?",
"removeMessage": "The tasks stay; only the link between them is removed.",
"removeConfirm": "Remove",
"searchPlaceholder": "Search tasks by title or number"
},
"links": {
"title": "Links",
"add": "Add link",
"remove": "Remove link",
"synced": "Synced",
"empty": "No links",
"url": "URL",
"titleLabel": "Title",
"optional": "Optional"
},
"time": {
"title": "Time",
"total": "{{duration}} total",
"log": "Log time",
"editEntry": "Edit time entry",
"logged": "Time logged",
"stop": "Stop",
"start": "Start timer",
"running": "{{time}} (running)",
"hoursUnit": "h",
"minutesUnit": "m",
"chipMinutes": "{{count}}m",
"chipHours": "{{count}}h",
"logDuration": "Log {{duration}}",
"durationHoursMinutes": "{{hours}}h {{minutes}}m",
"durationMinutes": "{{minutes}}m",
"date": "Date",
"notePlaceholder": "What did you work on?"
},
"activity": {
"title": "Activity",
"comment": "Comment",
"edit": "Edit",
"editComment": "Edit comment",
"edited": "{{time}}, edited",
"deleteTitle": "Delete comment?",
"deleteMessage": "This can't be undone.",
"entry": "{{name}} {{action}}"
},
"menu": {
"share": "Share",
"duplicate": "Duplicate",
"move": "Move to project…",
"refresh": "Refresh",
"delete": "Delete task",
"moveTitle": "Move to project",
"duplicated": "Task duplicated",
"moved": "Task moved",
"deleted": "Task deleted",
"deleteTitle": "Delete task?",
"deleteMessage": "“{{title}}” and its comments will be permanently deleted."
},
"screen": {
"copyLink": "Copy link",
"linkCopied": "Link copied",
"more": "More",
"editTitle": "Edit title",
"addDescription": "Add a description…"
}
},
"workspaceNew": {
"title": "New workspace",
"description": "A home for your team’s projects. You can invite people next.",
"name": "Name",
"namePlaceholder": "Design studio",
"descriptionLabel": "Description",
"optional": "Optional",
"descriptionPlaceholder": "What's this workspace for?",
"create": "Create workspace"
},
"taskFields": {
"status": "Status",
"planned": "Planned",
"priority": "Priority",
"assignee": "Assignee",
"unassigned": "Unassigned",
"startDate": "Start date",
"dueDate": "Due date",
"labels": "Labels",
"none": "None",
"searchPeople": "Search people",
"you": "{{name}} (you)",
"addNumber": "Add a number",
"empty": "Empty",
"archived": "Archived",
"doneColumn": "Done column",
"starts": "Starts {{date}}",
"overdue_one": "{{date}}, {{count}} day overdue",
"overdue_other": "{{date}}, {{count}} days overdue",
"done": "Done",
"searchOrCreate": "Search or create",
"createLabel": "Create label “{{name}}”",
"labelColor": "Color for the new label",
"noLabels": "No labels yet. Type a name to create one."
},
"taskNew": {
"newSubtask": "New subtask",
"project": "Project",
"create": "Create",
"taskTitle": "Task title",
"noLabels": "No labels in this workspace yet.",
"labelsFailed": "Task created, but some labels couldn't be added.",
"parentFailed": "Task created, but it couldn't be linked to the parent.",
"labelsAndParentFailed": "Task created, but some labels and the parent link couldn't be saved."
},
"editor": {
"placeholder": "Add a description… Markdown works.",
"bold": "Bold",
"italic": "Italic",
"heading": "Heading",
"list": "List",
"code": "Code",
"link": "Link",
"insertImage": "Insert image",
"attachment": "Attachment",
"checklist": "Checklist",
"numberedList": "Numbered list",
"quote": "Quote",
"linkUrl": "URL",
"applyLink": "Apply",
"removeLink": "Remove link",
"hideKeyboard": "Hide keyboard"
},
"composer": {
"reply": "Reply to {{name}}…",
"placeholder": "Add a comment…",
"mentionSomeone": "Mention someone",
"attachImage": "Attach image",
"sendComment": "Send comment",
"mention": "Mention",
"searchPeople": "Search people"
},
"board": {
"filterTasksActive": "Filter tasks… ({{count}} active)",
"movedTask": "Moved {{ticket}} to {{status}}",
"showTasks_one": "Show {{count}} task",
"showTasks_other": "Show {{count}} tasks",
"memberYou": "{{name}} (you)",
"dueDateOverdue_one": "{{date}}, {{count}}d overdue",
"dueDateOverdue_other": "{{date}}, {{count}}d overdue",
"projects": "Projects",
"back": "Back",
"boardView": "Board view",
"listView": "List view",
"more": "More",
"switchProject": "Switch project",
"noTasksMatchTheFilters": "No tasks match the filters",
"nothingPlannedYet": "Nothing planned yet",
"noTasksHere": "No tasks here",
"addTask": "Add task",
"noTasksMatch": "No tasks match",
"noTasksYet": "No tasks yet",
"filters": "Filters",
"filterTasks": "Filter tasks…",
"me": "Me",
"newTask": "New task",
"board": "Board",
"projectSettings": "Project settings",
"hidePlanned": "Hide planned",
"showPlanned": "Show planned",
"hideArchived": "Hide archived",
"showArchived": "Show archived",
"refresh": "Refresh",
"planned": "Planned",
"archived": "Archived",
"reset": "Reset",
"assignee": "Assignee",
"unassigned": "Unassigned",
"priority": "Priority",
"labels": "Labels",
"overdueOnly": "Overdue only",
"tasksNotOnTheBoardYet": "Tasks not on the board yet",
"moveTo": "Move to",
"assignToMe": "Assign to me",
"sendToTopOfColumn": "Send to top of column",
"sendToBottomOfColumn": "Send to bottom of column",
"openTask": "Open task",
"searchPeople": "Search people"
},
"projectSettings": {
"deleteNamedTitle": "Delete “{{name}}”?",
"text": "Text",
"number": "Number",
"date": "Date",
"checkbox": "Checkbox",
"dropdown": "Dropdown",
"multiSelect": "Multi-select",
"projectUpdated": "Project updated",
"project": "Project",
"projectSettings": "Project settings",
"general": "General",
"publicBoard": "Public board",
"anyoneWithTheLinkCanViewTheBoard": "Anyone with the link can view the board",
"columns": "Columns",
"addColumn": "Add column",
"doneColumn": "Done column",
"moveUp": "Move up",
"moveDown": "Move down",
"customFields": "Custom fields",
"addField": "Add field",
"noCustomFields": "No custom fields",
"projectRestored": "Project restored",
"archiveProjectTitle": "Archive project?",
"itDisappearsFromTheProjectListYouCanRestoreItLater": "It disappears from the project list. You can restore it later.",
"archive": "Archive",
"projectArchived": "Project archived",
"restoreProject": "Restore project",
"archiveProject": "Archive project",
"moveToAnotherWorkspace": "Move to another workspace",
"deleteProjectTitle": "Delete project?",
"allTasksCommentsAndTimeEntriesInThisProjectWillBePermanentlyDeleted": "All tasks, comments and time entries in this project will be permanently deleted.",
"projectDeleted": "Project deleted",
"deleteProject": "Delete project",
"column": "Column",
"rename": "Rename",
"unmarkAsDoneColumn": "Unmark as done column",
"markAsDoneColumn": "Mark as done column",
"deleteColumn": "Delete column",
"tasksInThisColumnMayNeedToBeMovedFirst": "Tasks in this column may need to be moved first.",
"columnDeleted": "Column deleted",
"renameColumn": "Rename column",
"field": "Field",
"deleteField": "Delete field",
"valuesStoredInThisFieldAreDeletedFromEveryTask": "Values stored in this field are deleted from every task.",
"fieldDeleted": "Field deleted",
"moveToWorkspace": "Move to workspace",
"projectMoved": "Project moved",
"ok": "OK",
"name": "Name",
"key": "Key",
"changesFutureAndExistingTaskIDs": "Changes future and existing task IDs",
"saveChanges": "Save changes",
"newColumn": "New column",
"blocked": "Blocked",
"tasksHereCountAsFinished": "Tasks here count as finished",
"newCustomField": "New custom field",
"platform": "Platform",
"type": "Type",
"options": "Options",
"separateWithCommas": "Separate with commas",
"androidIOSWeb": "Android, iOS, Web",
"required": "Required",
"defaultValue": "Default value",
"chooseDefault": "Choose a default",
"checked": "Checked",
"unchecked": "Unchecked",
"validDefaultRequired": "Enter a valid default value for this required field.",
"multiselectOptionsRequired": "Add at least two different options."
},
"projectNew": {
"newProject": "New project",
"name": "Name",
"customerPortal": "Customer Portal",
"key": "Key",
"usedInTaskIDs": "Used in task IDs",
"createProject": "Create project"
},
"home": {
"noWorkspace": {
"title": "No workspace yet",
"body": "Workspaces hold your projects and team. Create one, or accept an invitation.",
"create": "Create workspace",
"viewInvitations_one": "View {{count}} invitation",
"viewInvitations_other": "View {{count}} invitations",
"joinWithLink": "Join with an invitation link",
"signedInAs": "Signed in as {{email}}"
},
"switchWorkspace": "Switch workspace",
"search": "Search",
"account": "Account",
"archived": "Archived",
"due": "Due {{date}}",
"progress": "{{done}} of {{total}}",
"noTasks": "No tasks",
"upNext": "Up next",
"viewAll": "View all",
"projects": "Projects",
"newProject": "New project",
"empty": {
"title": "No projects yet",
"message": "Projects hold your boards and tasks."
},
"hideArchived": "Hide archived projects",
"showArchived": "Show archived projects"
},
"inbox": {
"title": "Inbox",
"markAllRead": "Mark all read",
"allCaughtUpToast": "All caught up",
"more": "More",
"empty": {
"title": "You're all caught up",
"message": "Assignments, comments and mentions appear here."
},
"today": "Today",
"earlier": "Earlier",
"recent": "Recent",
"clearAll": "Clear all notifications",
"confirmClear": {
"title": "Clear all notifications?",
"message": "This removes every notification in this workspace.",
"confirm": "Clear all"
}
},
"activity": {
"title": "Activity",
"subtitle": "Everything happening in {{workspace}}",
"empty": "No recent activity",
"someone": "Someone",
"commentedOn": "commented on {{target}}"
},
"myTasks": {
"title": "My tasks",
"by": {
"due": "Due date",
"project": "Project",
"status": "Status"
},
"due": {
"overdue": "Overdue",
"today": "Today",
"thisWeek": "This week",
"later": "Later",
"none": "No due date"
},
"empty": {
"title": "Nothing assigned to you",
"message": "Tasks assigned to you in this workspace show up here."
},
"showing": "Showing {{shown}} of {{total}} tasks",
"assigned_one": "{{count}} assigned",
"assigned_other": "{{count}} assigned"
},
"nav": {
"home": "Home",
"tasks": "My tasks",
"inbox": "Inbox",
"activity": "Activity",
"inboxUnread": "Inbox, {{count}} unread"
},
"workspaceSwitcher": {
"title": "Workspaces",
"settings": "Workspace settings",
"members": "Members",
"labels": "Labels",
"invitations": "Invitations",
"create": "Create workspace"
},
"search": {
"placeholder": "Search tasks, projects, comments",
"clear": "Clear",
"kinds": {
"all": "All",
"tasks": "Tasks",
"projects": "Projects",
"comments": "Comments",
"activity": "Activity"
},
"empty": {
"title": "Search this workspace",
"message": "Find tasks by title or number, projects, and comments."
},
"failed": "Search failed",
"noResults": "No results for “{{query}}”",
"commentMeta": "{{name}}, {{when}}"
},
"notificationText": {
"activity": {
"created": "created the task",
"commented": "commented: {{text}}",
"statusChanged": "moved this from {{from}} to {{to}}",
"priorityChanged": "changed priority from {{from}} to {{to}}",
"assigneeChanged": "changed the assignee",
"selfAssigned": "self-assigned this",
"assignedTo": "assigned this to {{assignee}}",
"unassigned": "removed the assignee",
"dueDateSet": "set the due date to {{date}}",
"dueDateRemoved": "removed the due date",
"renamed": "renamed this to “{{title}}”",
"titleChanged": "changed the title",
"descriptionChanged": "updated the description",
"taskUpdated": "updated the task"
},
"taskCreated": "New task assigned to you",
"assignedByActor": "{{actor}} assigned you a task",
"assignedToTask": "You were assigned to “{{title}}”",
"assignedToUntitled": "You were assigned to a task",
"statusChangedOnTask": "Status changed on “{{title}}”",
"statusChangedOnUntitled": "Status changed on a task",
"statusTransition": "{{from}} to {{to}}",
"commentedByActor": "{{actor}} commented",
"newComment": "New comment",
"mentionedByActor": "{{actor}} mentioned you",
"mentioned": "You were mentioned",
"timeLoggedOnTask": "Time logged on “{{title}}”",
"timeLoggedOnUntitled": "Time logged on a task",
"workspaceCreated": "Workspace “{{name}}” created"
},
"background": {
"summary_one": "{{count}} more new notification",
"summary_other": "{{count}} more new notifications",
"channelName": "Kaneo activity",
"channelDescription": "Assignments, comments and mentions from your workspaces"
},
"ui": {
"back": "Back",
"loadFailed": "Couldn't load this",
"search": "Search",
"nothingMatches": "Nothing matches “{{query}}”"
},
"picker": {
"clear": "Clear",
"nextWeek": "Next week",
"previousMonth": "Previous month",
"nextMonth": "Next month"
},
"time": {
"now": "now",
"justNow": "just now",
"minutesShort_one": "{{count}}m",
"minutesShort_other": "{{count}}m",
"hoursShort_one": "{{count}}h",
"hoursShort_other": "{{count}}h",
"secondsShort_one": "{{count}}s",
"secondsShort_other": "{{count}}s",
"minutesAgo_one": "{{count}} min ago",
"minutesAgo_other": "{{count}} min ago",
"hoursAgo_one": "{{count}} hr ago",
"hoursAgo_other": "{{count}} hr ago",
"durationHoursMinutes": "{{hours}}h {{minutes}}m",
"goodEvening": "Good evening",
"goodMorning": "Good morning",
"goodAfternoon": "Good afternoon",
"today": "Today",
"tomorrow": "Tomorrow",
"yesterday": "Yesterday",
"minutes_one": "{{count}} min",
"minutes_other": "{{count}} min",
"hours_one": "{{count}} hr",
"hours_other": "{{count}} hr"
},
"meta": {
"priority": {
"noPriority": "No priority",
"low": "Low",
"medium": "Medium",
"high": "High",
"urgent": "Urgent"
},
"labelColor": {
"stone": "Stone",
"slate": "Slate",
"lavender": "Lavender",
"sage": "Sage",
"forest": "Forest",
"amber": "Amber",
"terracotta": "Terracotta",
"rose": "Rose",
"crimson": "Crimson",
"ocean": "Ocean",
"sky": "Sky",
"lagoon": "Lagoon",
"orchid": "Orchid"
},
"role": {
"owner": "Owner",
"admin": "Admin",
"member": "Member",
"viewer": "Viewer"
},
"roleHint": {
"owner": "Full control, including deleting the workspace",
"admin": "Can also manage members and settings",
"member": "Can create and edit tasks",
"viewer": "Can view projects and tasks"
}
},
"account": {
"title": "Account",
"description": "How you appear to teammates across every workspace.",
"profile": {
"title": "Profile",
"photo": "Profile photo",
"photoFormats": "PNG, JPG or WebP",
"change": "Change",
"name": "Name",
"changePassword": "Change password"
},
"notifications": {
"title": "Notifications",
"phone": "Phone notifications",
"phoneHint": "Checked about every 15 minutes",
"delivery": "Delivery and events",
"deliveryHint": "Email, ntfy, Gotify, webhooks",
"invitations": "Invitations",
"permissionDenied": "Allow notifications for Kaneo in system settings first."
},
"connection": {
"title": "Connection",
"server": "Server",
"signedInWith": "Signed in with",
"apiKey": "API key",
"sessionToken": "Session token",
"appVersion": "App version"
},
"signOut": {
"button": "Sign out",
"title": "Sign out?",
"message": "You can sign in again at any time."
},
"deleteAccount": {
"sectionTitle": "Danger zone",
"title": "Delete account",
"description": "Permanently delete your account and its data.",
"modalTitle": "Delete your account?",
"modalDescription": "This permanently deletes your account and cannot be undone. Workspaces only you belong to are deleted with it. Elsewhere, your tasks stay and become unassigned, and your comments are removed.",
"confirmLabel": "Type {{email}} to confirm",
"password": "Password",
"passwordHint": "Leave empty if you sign in without a password.",
"confirm": "Delete account",
"success": "Your account was deleted",
"sessionTooOld": "For your security, enter your password, or sign out and sign in again before deleting your account.",
"wrongPassword": "That password is not correct.",
"noPassword": "This account has no password. Leave the field empty."
},
"photoMenu": {
"choose": "Choose photo",
"remove": "Remove photo"
},
"toast": {
"photoUpdated": "Photo updated",
"photoRemoved": "Photo removed",
"nameUpdated": "Name updated",
"passwordChanged": "Password changed"
},
"password": {
"title": "Change password",
"current": "Current password",
"new": "New password",
"confirm": "Confirm new password",
"confirmPlaceholder": "Type it again",
"mismatch": "Passwords don't match",
"signOutOthers": "Sign out other devices"
}
},
"notificationSettings": {
"title": "Notifications",
"description": "Where Kaneo reaches you, and about what.",
"on": "On",
"off": "Off",
"notSet": "Not set",
"delivery": {
"title": "Delivery",
"email": "Email",
"emailHint": "Sent to your account email",
"ntfyHint": "Send notifications to an ntfy topic",
"gotifyHint": "Send notifications to a Gotify server",
"webhook": "Webhook",
"webhookHint": "POST notifications to a URL"
},
"events": {
"title": "Notify me about",
"assignments": "Assignments",
"assignmentsHint": "When a task is assigned to you",
"comments": "Comments",
"commentsHint": "New comments on your tasks",
"statusChanges": "Status changes",
"statusChangesHint": "When your tasks move between columns",
"dueDate": "Due date reminders",
"dueDateHint": "Before a task you’re assigned to is due",
"remindMe": "Remind me",
"remindBefore": "{{time}} before",
"remindPickerTitle": "Remind me before"
},
"leadTime": {
"minutes15": "15 minutes",
"hour1": "1 hour",
"hours3": "3 hours",
"day1": "1 day",
"days2": "2 days",
"week1": "1 week",
"minutes_one": "{{count}} minute",
"minutes_other": "{{count}} minutes"
},
"channel": {
"enabled": "Send notifications here",
"webhookUrl": "Webhook URL",
"serverUrl": "Server URL",
"topic": "Topic",
"accessToken": "Access token",
"appToken": "App token",
"signingSecret": "Signing secret",
"secretSaved": "Saved. Enter a new one to replace it",
"secretOptional": "Optional"
}
},
"workspaceSettings": {
"title": "Workspace",
"description": "Settings for everyone in {{name}}.",
"thisWorkspace": "this workspace",
"general": {
"title": "General",
"name": "Name",
"description": "Description",
"slug": "Slug: <mono>{{slug}}</mono>",
"save": "Save changes"
},
"manage": {
"title": "Manage",
"members": "Members",
"labels": "Labels"
},
"danger": {
"title": "Danger zone",
"leave": "Leave workspace",
"leaveHint": "You can rejoin with a new invitation",
"leaveButton": "Leave",
"delete": "Delete workspace",
"deleteHint": "Deletes all projects and tasks in it"
},
"confirm": {
"deleteTitle": "Delete workspace?",
"leaveTitle": "Leave workspace?",
"deleteMessage": "Every project, task and comment in {{name}} will be permanently deleted.",
"leaveMessage": "You will lose access until someone invites you again."
},
"toast": {
"updated": "Workspace updated",
"deleted": "Workspace deleted",
"left": "You left the workspace"
}
},
"members": {
"title": "Members",
"description_one": "{{count}} person in {{name}}",
"description_other": "{{count}} people in {{name}}",
"thisWorkspace": "this workspace",
"invite": "Invite",
"pending": {
"title": "Pending invitations",
"expires": "{{role}}, expires {{date}}",
"manage": "Manage"
},
"people": {
"title": "People",
"unknown": "Unknown",
"you": "(you)"
},
"memberMenu": {
"fallbackTitle": "Member",
"changeRole": "Change role",
"remove": "Remove from workspace"
},
"rolePicker": {
"title": "Role"
},
"remove": {
"title": "Remove member?",
"message": "{{name}} will lose access to {{workspace}}.",
"they": "They",
"confirm": "Remove"
},
"inviteMenu": {
"fallbackTitle": "Invitation",
"resend": "Resend invitation",
"cancel": "Cancel invitation"
},
"inviteForm": {
"title": "Invite member",
"intro": "They’ll get an email with a link to join {{workspace}}.",
"email": "Email",
"role": "Role",
"send": "Send invite"
},
"toast": {
"roleUpdated": "Role updated",
"removed": "Member removed",
"resent": "Invitation resent",
"canceled": "Invitation canceled",
"sent": "Invitation sent to {{email}}"
}
},
"labels": {
"title": "Labels",
"description": "Labels help you group and filter tasks.",
"new": "New label",
"edit": "Edit label",
"delete": "Delete label",
"fallbackTitle": "Label",
"empty": {
"title": "No labels",
"message": "Create labels to group and filter tasks across projects."
},
"actions": "Actions for {{name}}",
"deleteTitle": "Delete “{{name}}”?",
"deleteMessage": "The label is removed from every task in this workspace.",
"form": {
"name": "Name",
"color": "Color"
},
"toast": {
"deleted": "Label deleted"
}
},
"permissions": {
"photos": "Kaneo uses your photos to attach images to tasks and comments, and for your profile photo."
}
}
}