Files
KanbanGit/resources/js/locales/en.ts
T
Twyco d8e1659f4b
CI/CD / preconditions (pull_request) Successful in 1s
macOS checks / Native Rust tests and unsigned build (pull_request) Canceled after 0s
Native JavaScript checks / Native launcher and release tests (pull_request) Successful in 1m11s
CI/CD / test_and_check_app (pull_request) Successful in 5m58s
CI/CD / Publish immutable image (pull_request) Skipped
feat(KAN-68): add visual Markdown ticket description editor
2026-10-01 19:21:22 +00:00

1557 lines
85 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export const en = {
'descriptionEditor.bold': 'Bold',
'descriptionEditor.italic': 'Italic',
'descriptionEditor.strike': 'Strikethrough',
'descriptionEditor.heading1': 'Heading 1',
'descriptionEditor.heading2': 'Heading 2',
'descriptionEditor.heading3': 'Heading 3',
'descriptionEditor.bulletList': 'Bullet list',
'descriptionEditor.orderedList': 'Numbered list',
'descriptionEditor.quote': 'Quote',
'descriptionEditor.code': 'Inline code',
'descriptionEditor.codeBlock': 'Code block',
'descriptionEditor.undo': 'Undo',
'descriptionEditor.redo': 'Redo',
'descriptionEditor.link': 'Add or edit link',
'descriptionEditor.unlink': 'Remove link',
'descriptionEditor.linkUrl': 'Link address',
'descriptionEditor.applyLink': 'Apply link',
'descriptionEditor.invalidLink':
'Enter a valid https://, http://, mailto:, /path or #anchor address without spaces.',
'descriptionEditor.formatting': 'Description formatting',
'descriptionEditor.source': 'Markdown',
'descriptionEditor.visual': 'Visual editor',
'descriptionEditor.hint':
'Format your description using the toolbar or edit its Markdown source.',
'descriptionEditor.unsupported':
'This description contains formatting that requires Markdown editing. Its original content is preserved.',
'nativeApp.title': 'App',
'nativeApp.description': 'Manage the KanbanGit app on this device.',
'nativeApp.workspace': 'Workspace',
'nativeApp.server': 'Server address',
'nativeApp.serverHelp':
'Use an HTTPS installation address without login details, a query or a fragment. This choice is saved on this device.',
'nativeApp.switch': 'Change workspace',
'nativeApp.confirmSwitch': 'Switch workspace',
'nativeApp.switchWarning':
'Switching closes your current workspace and discards unsaved inputs. You will sign in separately on the new server.',
'nativeApp.cancel': 'Cancel',
'nativeApp.unavailable':
'App settings are available in a compatible KanbanGit app.',
'nativeApp.updates': 'Software updates',
'nativeApp.version': 'Installed version {version} (build {build})',
'nativeApp.mobileVersion': 'App version {version}',
'nativeApp.availableVersion': 'Available version: {version}',
'nativeApp.automatic': 'Automatically check for updates',
'nativeApp.interval': 'Check interval',
'nativeApp.hours': 'Every {hours} hours',
'nativeApp.updateHelp':
'Checks run at startup and at the selected interval. Installation and restart require your confirmation.',
'nativeApp.check': 'Check for updates now',
'nativeApp.install': 'Install update',
'nativeApp.installRestart': 'Install and restart',
'nativeApp.installWarning':
'Save your work before continuing. KanbanGit will download and verify the update, then install it and restart. Unsaved inputs will be lost. Your workspace settings and stored sessions are kept.',
'nativeApp.progress': 'Update progress',
'nativeApp.recovery': 'Open native server settings',
'nativeApp.bridgeError':
'The app connection is unavailable or incompatible. Open the native server settings to reconnect, or restart the app.',
'nativeApp.invalidServer':
'Enter a valid HTTPS installation address without login details, a query or a fragment.',
'nativeApp.storageError':
'The workspace could not be saved. Check local storage permissions and try again.',
'nativeApp.networkError':
'The update service or download is unreachable. Check your connection and try again.',
'nativeApp.metadataError':
'The update information is invalid or does not match this Mac. Try again later.',
'nativeApp.signatureError':
'The update signature could not be verified. Nothing was installed. Try again or contact support.',
'nativeApp.verificationError':
'The downloaded app does not match its announced version or publisher. Nothing was installed.',
'nativeApp.installationError':
'The update could not be installed. Move KanbanGit to Applications and check disk space and permissions.',
'nativeApp.preferencesError':
'Update preferences could not be saved. Check local storage permissions and try again.',
'nativeApp.updateBusy':
'An update operation is already running. Please wait.',
'nativeApp.phase.idle': 'Check for the latest stable version of KanbanGit.',
'nativeApp.phase.checking': 'Checking for updates…',
'nativeApp.phase.available': 'A new version of KanbanGit is available.',
'nativeApp.phase.current': 'KanbanGit is up to date.',
'nativeApp.phase.downloading': 'Downloading update…',
'nativeApp.phase.verifying': 'Verifying update…',
'nativeApp.phase.installing': 'Installing update…',
'nativeApp.phase.restarting': 'Restarting KanbanGit…',
'nativeApp.phase.error': 'The update could not be completed.',
'projectAccess.pageTitle': '{project} · Project access',
'projectAccess.title': 'Project access',
'projectAccess.description':
'Manage who can access {project} and see where their permissions come from.',
'projectAccess.back': 'Back to project',
'projectAccess.saved': 'Project permissions saved.',
'projectAccess.howItWorks': 'How project access works',
'projectAccess.additiveHelp':
'Direct user permissions and permissions from every team are combined. Write includes read; administrator includes write and read.',
'projectAccess.limitsHelp':
'Project administrators can change project assignments here. Global permissions and team membership are managed separately.',
'projectAccess.search': 'Search people or teams',
'projectAccess.people': 'People and effective access',
'projectAccess.effective': 'Effective permissions',
'projectAccess.noAccess': 'No project access',
'projectAccess.globalSource':
'Global administrator · all project permissions',
'projectAccess.direct': 'Direct:',
'projectAccess.none': 'None',
'projectAccess.viaTeam': 'Via {name}:',
'projectAccess.editFor': 'Edit access for {name}',
'projectAccess.editDirect': 'Edit direct access',
'projectAccess.editTeam': 'Edit team access',
'projectAccess.teamPermissions': 'Team permissions',
'projectAccess.directPermissions': 'Direct permissions',
'projectAccess.teamHelp':
'These project permissions apply to every current and future member of the team.',
'projectAccess.directHelp':
'Change only this person’s direct project permissions. Team and global permissions continue to apply.',
'projectAccess.noPeopleResults': 'No matching people',
'projectAccess.noPeople': 'No people available',
'projectAccess.noTeamResults': 'No matching teams',
'projectAccess.noTeams': 'No teams yet',
'projectAccess.noTeamsHelp':
'Create a team and add members before assigning shared project access.',
'projectAccess.noTeamAccess': 'No project permissions assigned',
'projectAccess.read': 'Read',
'projectAccess.write': 'Write',
'projectAccess.admin': 'Administrator',
'projectAccess.readHelp': 'View the project and its tickets.',
'projectAccess.writeHelp': 'Create and edit tickets. Includes read access.',
'projectAccess.adminHelp':
'Manage project access and project administration. Includes write and read access.',
'projectAccess.clearHelp':
'Clear all selections to remove this assignment. Access granted by other teams, direct assignments or global administration is preserved.',
'projectAccess.globalHelp':
'This person is a global administrator. Changing these project assignments cannot remove their global access.',
'projectAccess.selfHelp':
'If you remove your own administrator access, you will return to Projects.',
'projectAccess.save': 'Save permissions',
'projectAccess.forbidden': 'Project access can no longer be changed',
'projectAccess.forbiddenHelp':
'Your administrator permission may have changed. Close this dialog and reopen the project to check your current access.',
'notifications.title': 'Notifications',
'notifications.pageTitle': '{project} · Notifications',
'notifications.description':
'Send ticket updates to your team with webhook and Discord actions.',
'notifications.saved': 'Notification settings saved.',
'notifications.actions': 'Notification actions',
'notifications.create': 'Add notification',
'notifications.edit': 'Edit notification',
'notifications.delete': 'Delete notification?',
'notifications.editNamed': 'Edit {name}',
'notifications.deleteNamed': 'Delete {name}',
'notifications.empty': 'No notifications yet',
'notifications.emptyHelp':
'Add an action to send updates when a ticket event matches your rules.',
'notifications.enabled': 'Enabled',
'notifications.disabled': 'Disabled',
'notifications.delivery': 'Delivery',
'notifications.urlSaved': 'Secret URL saved',
'notifications.urlMissing': 'No delivery URL saved',
'notifications.filterCount': {
one: '{count} filter · all must match',
other: '{count} filters · all must match',
},
'notifications.noFiltersShort': 'All matching events',
'notifications.noChanges': 'No saved changes yet',
'notifications.createdAt': 'Created {date}',
'notifications.updatedAt': 'Updated {date}',
'notifications.deleteHelp':
'Delete “{name}”? This action will stop sending notifications. This cannot be undone.',
'notifications.editorHelp':
'Choose a ticket event, a delivery channel and optional filters.',
'notifications.name': 'Name',
'notifications.event': 'Trigger',
'notifications.channel': 'Channel',
'notifications.keepUrl':
'A secret URL is saved. Leave the field blank to keep it.',
'notifications.replaceUrl': 'Replace delivery URL (optional)',
'notifications.url': 'Delivery URL',
'notifications.secretHelp':
'URLs are stored encrypted and never shown again after saving. Enter the complete webhook URL.',
'notifications.message': 'Discord message template',
'notifications.messageHelp':
'Use the variables below to include ticket details. Maximum 2,000 characters.',
'notifications.variables': 'Available template variables',
'notifications.mentions': 'Allowed mentions',
'notifications.mentionsHelp':
'Leave all unchecked to disable mentions. Only the selected mention types may notify people.',
'notifications.filters': 'Filters',
'notifications.filtersHelp':
'All filters must match before this action sends a notification.',
'notifications.noFilters':
'No filters. This action runs for every matching event.',
'notifications.filterNumber': 'Filter {number}',
'notifications.attribute': 'Attribute',
'notifications.operator': 'Operator',
'notifications.value': 'Value',
'notifications.values': 'Values (comma or newline separated)',
'notifications.removeFilter': 'Remove filter',
'notifications.removeFilterNumber': 'Remove filter {number}',
'notifications.addFilter': 'Add filter',
'notifications.enabledHelp':
'Turn off this action to pause delivery while keeping its configuration.',
'notifications.confirmDelete': 'Delete notification',
'notifications.channel.discord': 'Discord',
'notifications.channel.webhook': 'Webhook',
'notifications.event.ticket_status_changed': 'Ticket status changed',
'notifications.event.ticket_create': 'Ticket create',
'notifications.event.ticket_assignee_changed': 'Assignee changed',
'notifications.attribute.project.id': 'Project ID',
'notifications.attribute.project.key': 'Project key',
'notifications.attribute.project.name': 'Project name',
'notifications.attribute.ticket.id': 'Ticket ID',
'notifications.attribute.ticket.key': 'Ticket key',
'notifications.attribute.ticket.title': 'Ticket title',
'notifications.attribute.ticket.url': 'Ticket URL',
'notifications.attribute.actor.id': 'Actor ID',
'notifications.attribute.actor.name': 'Actor name',
'notifications.attribute.assignee.from.id': 'From assignee ID',
'notifications.attribute.assignee.from.name': 'From assignee name',
'notifications.attribute.assignee.to.id': 'To assignee ID',
'notifications.attribute.assignee.to.name': 'To assignee name',
'notifications.attribute.status.from.id': 'From status ID',
'notifications.attribute.status.from.label': 'From status label',
'notifications.attribute.status.to.id': 'To status ID',
'notifications.attribute.status.to.label': 'To status label',
'notifications.operator.equals': 'Equals',
'notifications.operator.not_equals': 'Not equals',
'notifications.operator.exists': 'Exists',
'notifications.operator.not_exists': 'Not exists',
'notifications.operator.in': 'In list',
'notifications.mention.everyone': '@everyone and @here',
'notifications.mention.roles': 'Role mentions (@role)',
'notifications.mention.users': 'User mentions (@username)',
'notifications.variable.url':
'Absolute ticket URL for the notification event.',
'notifications.variable.ticket_key': 'Project ticket key such as CORE-42.',
'notifications.variable.ticket_title':
'Ticket title for the notification event.',
'notifications.variable.project_name': 'Project name that owns the ticket.',
'notifications.variable.status_from':
'Origin status label for status moves; blank for ticket create and assignee changes.',
'notifications.variable.status_to':
'Destination or initial status label for the ticket event.',
'notifications.variable.actor_name':
'Actor name when the event has a known user.',
'notifications.variable.assignee_from':
'Previous assignee name when the event updates assignment; blank otherwise.',
'notifications.variable.assignee_to':
'New assignee name when the event updates assignment; blank when unassigned.',
'templates.description':
'Reuse a proven project setup. Manage published templates and see which projects inherit their configuration.',
'templates.updated': 'Project templates updated.',
'templates.fromProject': 'Start with an existing project',
'templates.fromProjectHelp':
'Open a project and choose “Save as new template” to capture its configuration.',
'templates.browseProjects': 'Browse projects',
'templates.empty': 'No published templates yet',
'templates.emptyHelp':
'Save a project as a template to reuse its settings. Internal project baselines are kept out of this list.',
'templates.published': 'Published project templates',
'templates.linkedCount': {
one: '{count} linked project',
other: '{count} linked projects',
},
'templates.savedFrom': 'Saved from {project} ({key}).',
'templates.sourceUnavailable': 'Source project unavailable',
'templates.edit': 'Edit',
'templates.use': 'Use template',
'templates.createTitle': 'Save {project} as a template',
'templates.createDescription':
'Choose the configuration to reuse in future projects.',
'templates.editTitle': 'Edit {name}',
'templates.editDescription':
'Refresh the template from its source project and review the impact on linked projects.',
'templates.defaultName': '{project} template',
'templates.details': 'Template details',
'templates.name': 'Template name',
'templates.namePlaceholder': 'Foundation template',
'templates.slug': 'Template slug',
'templates.slugPlaceholder': 'foundation-template',
'templates.slugHelp':
'Slugs are normalized automatically. After creation, the slug cannot be changed.',
'templates.slugLocked':
'The slug is locked so existing template references remain stable.',
'templates.groups': 'Configuration groups',
'templates.createGroupsHelp':
'Only selected groups are saved. Related groups required by the workflow are included automatically.',
'templates.editGroupsHelp':
'Saving rebuilds selected groups from the current source project. Required workflow groups are included automatically.',
'templates.impact': 'Template impact',
'templates.inheritance': 'Inheritance',
'templates.cleanStart':
'Tickets and other operational ticket data are never copied. The source project stays unchanged.',
'templates.refreshHelp':
'Inherited groups follow the refreshed template. Local overrides stay unchanged. Removed groups stay local to each project.',
'templates.linkedWarning': 'Linked projects will be affected',
'templates.linkedImpact':
'Saving updates the baseline for {count} linked projects. Inherited groups follow the new configuration; existing local overrides stay unchanged.',
'templates.acknowledge':
'I understand that projects inheriting from this template will be affected.',
'templates.saveNew': 'Save new template',
'templates.saveChanges': 'Save template changes',
'templates.missingSource': 'This template cannot be refreshed',
'templates.missingSourceHelp':
'The source project is no longer available. You can still use the saved template configuration to create a project.',
'templates.deleteTitle': 'Delete {name}',
'templates.delete': 'Delete template',
'templates.deleting': 'Deleting template…',
'templates.deleteHelp':
'This permanently removes the reusable template. It will no longer be available for new projects.',
'templates.deleteImpact':
'{count} linked projects will stop inheriting from this template. Their current configuration and tickets are kept.',
'teams.eyebrow': 'People & access',
'teams.description':
'Bring people together in reusable teams. Manage membership and the permissions to administer each team.',
'teams.create': 'Create team',
'teams.createDescription':
'Group people into a team to share project access.',
'teams.name': 'Team name',
'teams.namePlaceholder': 'Platform team',
'teams.yourTeams': 'Teams you manage',
'teams.search': 'Search teams',
'teams.clearSearch': 'Clear search',
'teams.empty': 'No teams to manage',
'teams.emptyCreate': 'Create a team to start organizing your people.',
'teams.emptyDescription':
'No teams are available for your current permissions.',
'teams.noResults': 'No matching teams',
'teams.noResultsDescription': 'Try another team name or clear your search.',
'teams.manageMembers': 'Manage members',
'teams.manageMembersFor': 'Manage members of {name}',
'teams.permissionsFor': 'Manage permissions for {name}',
'teams.members': 'Members',
'teams.noMembers': 'No members yet.',
'teams.membersHelp':
'Select the people who belong to this team. Changes apply when you save.',
'teams.selected': '{count} selected',
'teams.searchPeople': 'Find people',
'teams.searchPeoplePlaceholder': 'Search by name or email',
'teams.noPeople': 'No matching people.',
'teams.saveMembers': 'Save members',
'teams.permissions': 'Team permissions',
'teams.permissionsHelp':
'Direct team permissions are separate from membership. Choose any user to review or change their assignments.',
'teams.person': 'User',
'teams.choosePerson': 'Choose a user',
'teams.directPermissions': 'Direct permissions',
'teams.permissionInvite': 'Team invite',
'teams.permissionManage': 'Team manage',
'teams.permissionAdmin': 'Team admin',
'teams.permissionsClearHelp':
'Clear every checkbox to remove direct permissions. Other existing access remains in effect.',
'teams.savePermissions': 'Save permissions',
'teams.updated': 'Team changes saved.',
'teams.forbidden': 'You no longer have permission',
'teams.forbiddenDescription':
'Your changes have not been saved. Close this dialog and reload the page to check your current access.',
'teams.memberCount': { one: '{count} member', other: '{count} members' },
'workflow.title': 'Board workflow',
'workflow.pageTitle': '{project} · Board workflow',
'workflow.description':
'Organize your board into columns and give each stage the statuses your team needs.',
'workflow.updated': 'Workflow updated.',
'workflow.backlog': 'Backlog',
'workflow.offBoard': 'Off the board',
'workflow.backlogDescription':
'Your intake queue. Tickets with these statuses stay outside the board columns.',
'workflow.columns': 'Board columns',
'workflow.columnsDescription':
'Columns appear from left to right in this order. Edit a column to change its name or position.',
'workflow.emptyColumns': 'No board columns yet',
'workflow.emptyColumnsDescription':
'Add your first column to start organizing tickets on the board.',
'workflow.addColumn': 'Add column',
'workflow.editColumn': 'Edit column',
'workflow.deleteColumn': 'Delete column?',
'workflow.addColumnDescription':
'The column is added at the end of the board with a first status of the same name.',
'workflow.editColumnDescription':
'Rename this column or move it to a different position. Its statuses keep their names.',
'workflow.deleteColumnDescription':
'Delete “{name}”? Its statuses move to the backlog and their tickets keep their status. Remaining columns are reordered automatically.',
'workflow.addStatus': 'Add status',
'workflow.editStatus': 'Rename status',
'workflow.deleteStatus': 'Delete status?',
'workflow.statusContext': 'This status belongs to {context}.',
'workflow.deleteStatusDescription':
'Delete “{name}”? Tickets using it are assigned to “{replacement}”, the first remaining status in {context}. Its move rules are removed.',
'workflow.columnName': 'Column name',
'workflow.statusName': 'Status name',
'workflow.position': 'Position',
'workflow.positionValue': 'Position {position}',
'workflow.positionHelp':
'Choose a position from 1 to {count}. Other columns shift automatically.',
'workflow.statusesIn': 'Statuses in {context}',
'workflow.renameStatus': 'Rename status {name}',
'workflow.removeStatus': 'Delete status {name}',
'workflow.changeColumn': 'Edit column {name}',
'workflow.removeColumn': 'Delete column {name}',
'workflow.addStatusTo': 'Add status to {context}',
'workflow.lastStatus':
'Keep at least one status in this group. The last status cannot be deleted.',
'workflow.transitions': 'Status moves',
'workflow.transitionsDescription':
'Choose exactly where each status is allowed to move next.',
'workflow.sourceStatus': 'From status',
'workflow.directionHelp':
'Rules apply in one direction. Select another source to configure the return move.',
'workflow.targetsFrom': 'Allowed destinations from {name}',
'workflow.targetHelp':
'Checked destinations are allowed. Unchecked destinations are forbidden. Save to apply these rules to ticket moves and board drop targets.',
'workflow.allowed': 'Allowed',
'workflow.notAllowed': 'Not allowed',
'workflow.noMovesHelp':
'With no destinations selected, tickets cannot leave this status after you save.',
'workflow.noStatuses':
'Add a status to configure its allowed destinations.',
'workflow.unsavedMoves': 'Unsaved changes',
'workflow.savedMoves': 'Saved destinations: {count}',
'workflow.resetMoves': 'Reset changes',
'workflow.saveMoves': 'Save moves',
'workflow.noTargets': 'No other statuses exist yet.',
'workflow.confirmDelete': 'Delete',
'security.title': 'Security settings',
'security.passwordTitle': 'Update password',
'security.passwordDescription':
'Use a long, unique password to keep your account secure.',
'security.currentPassword': 'Current password',
'security.newPassword': 'New password',
'security.confirmPassword': 'Confirm password',
'security.savePassword': 'Save password',
'security.savingPassword': 'Saving password…',
'security.passwordSaved': 'Password saved.',
'security.twoFactorTitle': 'Two-factor authentication',
'security.twoFactorDescription':
'Add a second layer of protection with a code from your authenticator app.',
'security.enabledDescription':
'Your authenticator app provides a six-digit code when you sign in. Keep your recovery codes somewhere safe.',
'security.enabled': 'Enabled',
'security.disabled': 'Disabled',
'security.pending': 'Awaiting confirmation',
'security.enable': 'Enable 2FA',
'security.disable': 'Disable 2FA',
'security.continueSetup': 'Continue setup',
'security.disableTitle': 'Disable two-factor authentication?',
'security.disableDescription':
'You will no longer need an authenticator code to sign in. Your existing recovery codes will be removed.',
'security.setupTitle': 'Set up your authenticator',
'security.setupDescription':
'Scan this QR code with a TOTP authenticator app, or enter the setup key manually.',
'security.setupEnabled': 'Two-factor authentication enabled',
'security.setupEnabledDescription':
'Finish adding this account to your authenticator app and save your recovery codes.',
'security.verifyTitle': 'Verify authentication code',
'security.verifyDescription':
'Enter the six-digit code from your authenticator app to finish enabling two-factor authentication.',
'security.authenticationCode': 'Authentication code',
'security.manualKey': 'Manual setup key',
'security.copyKey': 'Copy key',
'security.copied': 'Copied',
'security.copyError':
'Copying failed. Select the key and copy it manually.',
'security.confirm': 'Confirm',
'security.continue': 'Continue',
'security.loadingSetup': 'Loading authenticator setup…',
'security.setupPendingDescription':
'Protection starts after you confirm a code. Closing this dialog keeps setup unfinished; you can continue from this page.',
'security.confirmAgain':
'Your session or password confirmation has expired. Reload this page and confirm your password to continue.',
'security.setupError':
'Authenticator setup could not be loaded. Please try again.',
'security.recoveryError':
'Recovery codes could not be loaded. Please try again.',
'security.recoveryTitle': '2FA recovery codes',
'security.recoveryDescription':
'Recovery codes let you regain access if you lose your authenticator. Store them in a secure password manager.',
'security.hideRecovery': 'Hide recovery codes',
'security.viewRecovery': 'View recovery codes',
'security.loadingRecovery': 'Loading recovery codes…',
'security.regenerate': 'Regenerate codes',
'security.recoveryOnce':
'Each recovery code can be used once. Hiding this section removes the codes from this page.',
'security.regenerateTitle': 'Regenerate recovery codes?',
'security.regenerateDescription':
'All previous recovery codes will stop working. Save the new codes in a secure place.',
'applications.title': 'Applications',
'applications.description':
'Create API keys for tools that use KanbanGit with your account permissions. Delete an application to revoke its access.',
'applications.saveKey': 'Save this API key now.',
'applications.keyOnce':
'This key is shown only after creation. It will not be shown again after you leave this page.',
'applications.apiKey': 'API key',
'applications.create': 'Create application',
'applications.nameDescription':
'Name the tool that will receive an API key.',
'applications.name': 'Application name',
'applications.namePlaceholder': 'For example, Claude Desktop',
'applications.creating': 'Creating application…',
'applications.saved': 'Saved applications',
'applications.hiddenKeys':
'Existing keys stay hidden. Create a new application when another key is needed.',
'applications.empty': 'No applications have been created yet.',
'applications.created': 'Created:',
'applications.lastUsed': 'Last used:',
'applications.never': 'Never',
'applications.delete': 'Delete',
'applications.deleteNamed': 'Delete {name}',
'applications.deleteTitle': 'Delete application?',
'applications.deleteDescription':
'{name} will lose access immediately. This cannot be undone.',
'common.back': 'Back',
'common.done': 'Done',
'adminUsers.eyebrow': 'Workspace administration',
'adminUsers.title': 'User management',
'adminUsers.description':
'Manage workspace accounts, password requirements, and the global permissions that apply across KanbanGit.',
'adminUsers.managedAccount': 'Managed account',
'adminUsers.createAction': 'Create user',
'adminUsers.updated': 'User management updated',
'adminUsers.summary.label': 'User management summary',
'adminUsers.summary.total': 'Workspace users',
'adminUsers.summary.admins': 'Global administrators',
'adminUsers.summary.passwordChanges': 'Password changes pending',
'adminUsers.listTitle': 'Users ({count})',
'adminUsers.listDescription':
'Review account status, edit profile details, or confirm global access changes.',
'adminUsers.empty.title': 'No users yet',
'adminUsers.empty.description':
'Create the first managed account for this workspace.',
'adminUsers.passwordChangePending': 'Password change required',
'adminUsers.permissions.none': 'No direct global permissions',
'adminUsers.permissions.action': 'Manage access',
'adminUsers.permissions.available': 'Available global permissions',
'adminUsers.permissions.globalAdmin': 'Global administrator',
'adminUsers.permissions.globalAdminHelp':
'Allows access to workspace-wide administration, including this user management area.',
'adminUsers.permissions.projectCreate': 'Create projects',
'adminUsers.permissions.projectCreateHelp':
'Allows the user to create new projects without granting global administration.',
'adminUsers.permissions.title': 'Global access for {name}',
'adminUsers.permissions.description':
'Select the direct permissions this account should receive.',
'adminUsers.permissions.warning':
'These changes take effect across the workspace after confirmation.',
'adminUsers.permissions.confirm': 'Confirm access changes',
'adminUsers.create.title': 'Create user',
'adminUsers.create.description':
'Add a workspace account with an initial password and a clear first-login requirement.',
'adminUsers.edit.breadcrumb': 'Edit {name}',
'adminUsers.edit.pageTitle': 'Edit {name}',
'adminUsers.edit.title': 'Edit {name}',
'adminUsers.edit.action': 'Edit account details for {name}',
'adminUsers.edit.shortAction': 'Edit details',
'adminUsers.form.detailsTitle': 'Account details',
'adminUsers.form.createDescription':
'Set the identity and initial security state for the new account.',
'adminUsers.form.editDescription':
'Update account details and review security-sensitive changes before saving.',
'adminUsers.form.name': 'Name',
'adminUsers.form.namePlaceholder': 'Jane Admin',
'adminUsers.form.email': 'Email address',
'adminUsers.form.emailPlaceholder': 'jane@example.com',
'adminUsers.form.passwordTitle': 'Password and first sign-in',
'adminUsers.form.passwordCreateHelp':
'Set a temporary password that the user can replace after signing in.',
'adminUsers.form.passwordEditHelp':
'Leave both password fields empty to keep the current password.',
'adminUsers.form.password': 'Temporary password',
'adminUsers.form.newPassword': 'New password',
'adminUsers.form.passwordPlaceholder': 'Enter a temporary password',
'adminUsers.form.passwordEditPlaceholder':
'Leave blank to keep the current password',
'adminUsers.form.confirmPassword': 'Confirm password',
'adminUsers.form.confirmPasswordPlaceholder': 'Repeat the new password',
'adminUsers.form.forcePasswordChange':
'Require a password change on next sign-in',
'adminUsers.form.forcePasswordChangeHelp':
'The user stays in security settings until a new password has been saved.',
'adminUsers.form.createAction': 'Create user',
'adminUsers.form.reviewChanges': 'Review changes',
'adminUsers.form.confirmTitle': 'Update {name}?',
'adminUsers.form.confirmDescription':
'Confirm the account and security changes before they are applied.',
'adminUsers.form.confirmWarning':
'A new password takes effect immediately. Requiring a password change restricts the user to security settings on their next sign-in.',
'adminUsers.form.confirmAction': 'Confirm and save',
'criteria.title': 'Acceptance criteria',
'criteria.progress': '{completed} of {total} complete',
'criteria.empty': 'No acceptance criteria yet.',
'criteria.required': 'Enter a criterion or remove this row.',
'criteria.edit': 'Edit checklist',
'criteria.preview': 'Preview checklist',
'criteria.item': 'Criterion {number}',
'criteria.complete': 'Complete criterion {number}: {text}',
'criteria.indent': 'Indent criterion {number}',
'criteria.outdent': 'Outdent criterion {number}',
'criteria.remove': 'Remove criterion {number}',
'criteria.add': 'Add criterion',
'criteria.hint':
'Use the indent buttons or Alt + Left/Right in a text field to nest criteria. Checking a parent also checks its children. Removing a parent keeps its children.',
'criteria.unsaved': 'Checklist changes will be saved with the ticket.',
'criteria.saving': 'Saving checklist…',
'criteria.saveError':
'Checklist status could not be saved. Please try again.',
'board.title': '{name} board',
'board.description':
'Work in your configured workflow. Tickets without a board column stay in the backlog.',
'board.columns': 'Workflow columns',
'board.selectColumn': 'Choose a column',
'board.columnOption': '{name} ({count})',
'board.scrollHint': 'Scroll horizontally to explore all columns.',
'board.openBacklog': 'Open backlog',
'board.backToProject': 'Project overview',
'board.empty.title': 'No workflow columns yet',
'board.empty.description':
'Set up columns to start tracking work on this board.',
'board.emptyColumn': 'No tickets in this column.',
'board.emptyStatus': 'No tickets in this status.',
'board.noStatuses': 'No statuses configured for this column.',
'board.moveTicket': 'Move {key}',
'board.updateStatus': 'Update status',
'board.updatingStatus': 'Updating…',
'board.noMoves': 'No allowed moves',
'board.drag': 'Drag to move',
'board.dragTicket': 'Drag {key} to change status',
'board.dragHint':
'Drag a handle to a highlighted column, or use the status controls. Press Escape to cancel.',
'board.dropHint': 'Drop on a column. Hold near an edge to scroll.',
'board.dragging':
'Dragging {key}. Drop on an allowed column or press Escape to cancel.',
'board.chooseStatus': 'Choose a destination status',
'board.chooseStatusDescription':
'More than one status is available for {key} in this column.',
'board.targetStatus': 'Destination status',
'board.noMovesDescription':
'This status does not allow moving anywhere else.',
'backlog.title': '{name} backlog',
'backlog.description':
'Shape incoming work without losing sight of parent and child tickets.',
'backlog.openBoard': 'Open board',
'backlog.backToProject': 'Project overview',
'backlog.moveTicket': 'Move {key}',
'backlog.filters.title': 'Find backlog tickets',
'backlog.filters.description':
'Filter this view locally. Matching child tickets keep their parent context visible.',
'backlog.filters.search': 'Search',
'backlog.filters.searchPlaceholder': 'Key, title, description, or metadata',
'backlog.filters.type': 'Type',
'backlog.filters.allTypes': 'All types',
'backlog.filters.priority': 'Priority',
'backlog.filters.allPriorities': 'All priorities',
'backlog.filters.status': 'Status',
'backlog.filters.allStatuses': 'All backlog statuses',
'backlog.filters.assignee': 'Assignee',
'backlog.filters.allAssignees': 'All assignees',
'backlog.filters.clear': 'Clear filters',
'backlog.filters.parentContext': 'Parent context',
'backlog.filters.empty.title': 'No tickets match these filters',
'backlog.filters.empty.description':
'Try a broader search or clear the filters to see the complete backlog.',
'backlog.results.title': 'Backlog tickets',
'backlog.results.count': 'Showing {count} of {total} tickets',
'backlog.empty.title': 'Your backlog is clear',
'backlog.empty.description':
'New tickets without a workflow column will appear here.',
'backlog.empty.action': 'Create the first ticket',
'backlog.tree.expand': 'Expand children of {key}',
'backlog.tree.collapse': 'Collapse children of {key}',
'backlog.tree.expandAll': 'Expand all',
'backlog.tree.collapseAll': 'Collapse all',
'projectCreation.title': 'Create a project',
'projectCreation.description':
'Give your work a home. Start fresh or reuse a setup that already works for your team.',
'projectCreation.start': 'How would you like to start?',
'projectCreation.scratch': 'Start from scratch',
'projectCreation.scratchDescription':
'Create an empty project with the default setup.',
'projectCreation.duplicate': 'Duplicate a project',
'projectCreation.duplicateDescription':
'Choose an existing project and copy selected settings.',
'projectCreation.template': 'Use a template',
'projectCreation.templateDescription':
'Start with a saved, reusable project configuration.',
'projectCreation.noProjects':
'No accessible projects are available to copy yet.',
'projectCreation.noTemplates': 'No published templates are available yet.',
'projectCreation.details': 'Project details',
'projectCreation.name': 'Project name',
'projectCreation.namePlaceholder': 'Platform engineering',
'projectCreation.key': 'Project key',
'projectCreation.keyPlaceholder': 'CORE',
'projectCreation.keyHelp':
'Use up to 5 letters or numbers. Keys are unique and converted to uppercase.',
'projectCreation.copyTitle': 'Choose what to copy',
'projectCreation.copyHelp':
'Copy configuration into an independent project. Select only what you need.',
'projectCreation.sourceProject': 'Source project',
'projectCreation.selectProject': 'Select a source project',
'projectCreation.copyOptions': 'Configuration areas',
'projectCreation.copyDefaults':
'Unselected areas keep the default setup. You can also continue without copying any settings.',
'projectCreation.chooseTemplate': 'Choose a template',
'projectCreation.templateLabel': 'Template',
'projectCreation.selectTemplate': 'Select a template',
'projectCreation.templateHelp':
'The project stays linked to this template. Inherited areas follow its configuration; you can override them in project settings.',
'projectCreation.includedAreas': 'Included configuration',
'projectCreation.templateDefaults':
'This template uses the default project setup.',
'projectCreation.summary': 'Your new project',
'projectCreation.untitled': 'Add a project name',
'projectCreation.ticketPreview': 'First ticket key',
'projectCreation.setup': 'Starting point',
'projectCreation.cleanStart':
'Every project starts with an empty backlog and its own ticket numbering. Tickets and their history are never copied.',
'projectCreation.submit': 'Create project',
'projectCreation.creating': 'Creating project…',
'projectCreation.areas.projectSettings.label': 'Project settings',
'projectCreation.areas.projectSettings.description':
'Story points and author visibility.',
'projectCreation.areas.boardColumns.label': 'Board columns',
'projectCreation.areas.boardColumns.description':
'Columns and their order on the board.',
'projectCreation.areas.ticketStatuses.label': 'Ticket statuses',
'projectCreation.areas.ticketStatuses.description':
'Statuses and their board columns.',
'projectCreation.areas.statusTransitions.label': 'Status transitions',
'projectCreation.areas.statusTransitions.description':
'Allowed moves between statuses.',
'projectCreation.areas.ticketTypes.label': 'Ticket types',
'projectCreation.areas.ticketTypes.description':
'Available types, including parent types.',
'projectCreation.areas.ticketPriorities.label': 'Ticket priorities',
'projectCreation.areas.ticketPriorities.description':
'Available priority levels.',
'projectCreation.areas.ticketFields.label': 'Custom ticket fields',
'projectCreation.areas.ticketFields.description':
'Field definitions without ticket values.',
'projectCreation.areas.ticketLinkTypes.label': 'Ticket link types',
'projectCreation.areas.ticketLinkTypes.description':
'Relationship labels between tickets.',
'projectCreation.areas.repositories.label': 'Repository connections',
'projectCreation.areas.repositories.description':
'Repositories linked to the project.',
'projectCreation.areas.notifications.label': 'Notification actions',
'projectCreation.areas.notifications.description':
'Notification rules and delivery settings.',
'projectCreation.selectedCount': {
one: '{count} area selected',
other: '{count} areas selected',
},
'projects.workspace': 'Workspace',
'projects.description':
'Your project spaces, ready to work in. Open a project or jump straight to its board and backlog.',
'projects.create': 'New project',
'projects.updated': 'Project update',
'projects.available': {
one: '{count} project available',
other: '{count} projects available',
},
'projects.open': 'Open {name} overview',
'projects.openBoard': 'Open {name} board',
'projects.openBacklog': 'Open {name} backlog',
'projects.overview': 'Project overview',
'projects.empty.title': 'No projects to show',
'projects.empty.createDescription':
'Create a project to give your team a place to plan and track work.',
'projects.empty.accessDescription':
'Projects appear here when you have access. Ask a workspace or project administrator to add you.',
'projects.empty.create': 'Create your first project',
'projects.back': 'All projects',
'projects.hubDescription':
'Follow work on the board or explore tickets in the backlog.',
'projects.workAreas': 'Project work areas',
'projects.boardDescription':
'See work across the project’s workflow and open tickets in their current status.',
'projects.backlogDescription':
'Explore incoming work, review ticket details, and plan what comes next.',
'projects.boardAction': 'Open board',
'projects.backlogAction': 'Open backlog',
'projects.settingsDescription':
'Manage this project’s configuration, integrations, and access.',
'projects.saveTemplate': 'Save as new template',
'projects.templateTitle': 'Based on {name}',
'projects.templateDescription':
'Inherited areas follow the linked template. Overridden areas use this project’s own configuration.',
'projects.inheritedArea': '{name} · inherited',
'projects.overriddenArea': '{name} · overridden',
'welcome.metaTitle': 'Project work with Git context',
'welcome.homeLabel': 'KanbanGit home',
'welcome.navigation': 'Account navigation',
'welcome.eyebrow': 'Self-hosted project management',
'welcome.title': 'Plan the work. Keep Git context close.',
'welcome.description':
'Plan projects on configurable boards, keep ticket decisions visible, and connect delivery work to the repositories your team already uses.',
'welcome.action.signIn': 'Sign in to KanbanGit',
'welcome.action.signInShort': 'Sign in',
'welcome.action.dashboard': 'Open dashboard',
'welcome.action.dashboardShort': 'Dashboard',
'welcome.actionHint': 'One workspace for boards, tickets, and Git context.',
'welcome.downloadAppHint': 'For Macs with Apple Silicon.',
'welcome.preview.label': 'KanbanGit board preview',
'welcome.preview.project': 'Product delivery board',
'welcome.preview.connected': 'Git connected',
'welcome.preview.backlog': 'Backlog',
'welcome.preview.inProgress': 'In progress',
'welcome.preview.review': 'Review',
'welcome.preview.ticketOnboarding': 'Refine onboarding flow',
'welcome.preview.ticketRelease': 'Plan release workflow',
'welcome.preview.ticketRepository': 'Connect project repository',
'welcome.preview.ticketPullRequest': 'Review pull request context',
'welcome.features.eyebrow': 'A focused workflow',
'welcome.features.title': 'The project context your team needs',
'welcome.features.workflows.title': 'Configurable workflows',
'welcome.features.workflows.description':
'Shape project boards, backlog, statuses, and transitions around the way your team works.',
'welcome.features.tickets.title': 'Structured ticket context',
'welcome.features.tickets.description':
'Keep metadata, acceptance criteria, relationships, blockers, and history with the work.',
'welcome.features.git.title': 'Repository-aware delivery',
'welcome.features.git.description':
'Link project repositories and see matching branches and pull requests on the ticket.',
'welcome.footer': 'Self-hosted project and workflow management.',
'dashboard.eyebrow': 'Personal workspace',
'dashboard.greeting': 'Welcome back, {name}',
'dashboard.description':
'A current view of tickets assigned to you in projects you can access.',
'dashboard.summary': 'Work summary',
'dashboard.summary.assignedTickets': 'Assigned tickets',
'dashboard.summary.projects': 'Projects with assigned work',
'dashboard.summary.blockedTickets': 'Blocked tickets',
'dashboard.assignedWork': 'My assigned tickets',
'dashboard.assignedWorkDescription':
'Your work is grouped by project and ordered with the newest tickets first.',
'dashboard.projectTickets': 'Tickets assigned to you in {name}',
'dashboard.openProject': 'Open {name}',
'dashboard.openProjectAction': 'Open project',
'dashboard.empty.title': 'No tickets assigned to you',
'dashboard.empty.description':
'Tickets assigned to you in projects you can access will appear here.',
'dashboard.empty.action': 'Browse projects',
'auth.home': 'KanbanGit home',
'auth.accountAccess': 'Account access',
'auth.backToLogin': 'Return to sign in',
'auth.signOut': 'Sign out',
'auth.signingOut': 'Signing out…',
'auth.password.show': 'Show password',
'auth.password.hide': 'Hide password',
'auth.login.title': 'Welcome back',
'auth.login.description': 'Sign in to continue to your workspace.',
'auth.login.email': 'Email address',
'auth.login.emailPlaceholder': 'you@example.com',
'auth.login.password': 'Password',
'auth.login.remember': 'Remember me',
'auth.login.forgot': 'Forgot password?',
'auth.login.submit': 'Sign in',
'auth.login.pending': 'Signing in…',
'auth.login.help': 'Need an account? Contact your workspace administrator.',
'auth.login.statusTitle': 'Account update',
'auth.forgot.title': 'Reset your password',
'auth.forgot.description':
'Enter your account email and we will send you a secure reset link.',
'auth.forgot.email': 'Email address',
'auth.forgot.emailPlaceholder': 'you@example.com',
'auth.forgot.emailHint':
'Use the email address associated with your KanbanGit account.',
'auth.forgot.submit': 'Send reset link',
'auth.forgot.pending': 'Sending reset link…',
'auth.forgot.sentTitle': 'Reset link sent',
'auth.reset.title': 'Choose a new password',
'auth.reset.description':
'Create a new password for the account linked below.',
'auth.reset.email': 'Account email',
'auth.reset.password': 'New password',
'auth.reset.passwordHint':
'Use a password you do not use for another account.',
'auth.reset.passwordConfirmation': 'Confirm new password',
'auth.reset.submit': 'Save new password',
'auth.reset.pending': 'Updating your password…',
'auth.reset.invalidTitle': 'This reset link is no longer valid',
'auth.reset.requestNew': 'Request a new reset link',
'auth.reset.footer':
'For your security, reset links expire and can only be used once.',
'auth.confirm.title': 'Confirm it is you',
'auth.confirm.description':
'This action affects sensitive account information. Enter your password to continue.',
'auth.confirm.password': 'Current password',
'auth.confirm.passwordHint':
'Your password is checked securely and is never saved in a draft.',
'auth.confirm.submit': 'Confirm and continue',
'auth.confirm.pending': 'Confirming your password…',
'auth.confirm.footer':
'Password confirmation expires automatically after a short time.',
'auth.forceChange.title': 'Secure your account',
'auth.forceChange.description':
'You need to replace your temporary password before continuing to KanbanGit.',
'auth.forceChange.currentPassword': 'Temporary password',
'auth.forceChange.password': 'New password',
'auth.forceChange.passwordHint':
'Choose a password that differs from your temporary password.',
'auth.forceChange.passwordConfirmation': 'Confirm new password',
'auth.forceChange.submit': 'Save password and continue',
'auth.forceChange.pending': 'Securing your account…',
'auth.forceChange.statusTitle': 'Password update',
'auth.forceChange.wrongAccount': 'Not the account you expected?',
'auth.forceChange.footer':
'Your password entries are kept in memory only and are cleared when you leave.',
'auth.verify.title': 'Check your inbox',
'auth.verify.description':
'Open the verification link in your email to finish confirming your account.',
'auth.verify.emailLabel': 'Verification email address',
'auth.verify.resend': 'Resend verification email',
'auth.verify.pending': 'Sending verification email…',
'auth.verify.sentTitle': 'Verification link sent',
'auth.verify.sentDescription':
'Check your inbox for a new link. If it does not arrive, check your spam folder.',
'auth.verify.help': 'Already verified in another tab?',
'auth.verify.continue': 'Continue to workspace',
'auth.verify.wrongAccount':
'Wrong account? Sign out and use a different email address.',
'auth.twoFactor.title': 'Two-step verification',
'auth.twoFactor.description':
'Enter the six-digit code from your authenticator app to finish signing in.',
'auth.twoFactor.code': 'Authentication code',
'auth.twoFactor.codeHint':
'Enter all six digits, including any leading zero.',
'auth.twoFactor.recoveryTitle': 'Use a recovery code',
'auth.twoFactor.recoveryDescription':
'Enter one of the recovery codes you saved when you set up two-factor authentication.',
'auth.twoFactor.recoveryCode': 'Recovery code',
'auth.twoFactor.recoveryHint': 'Each recovery code can only be used once.',
'auth.twoFactor.useRecovery': 'Use a recovery code instead',
'auth.twoFactor.useCode': 'Use an authenticator code instead',
'auth.twoFactor.submit': 'Verify and sign in',
'auth.twoFactor.pending': 'Verifying your code…',
'auth.feedback.pending': 'Please wait…',
'auth.feedback.completed': 'Request completed',
'auth.feedback.validationTitle': 'Check your details',
'auth.feedback.validationDescription':
'Review the message below and try again. Your entries have been kept.',
'auth.feedback.expiredTitle': 'Your session has expired',
'auth.feedback.expiredDescription':
'Return to sign in to start a new session. You will need to enter your details again.',
'auth.feedback.limitedTitle': 'Too many attempts',
'auth.feedback.limitedDescription':
'Please wait a moment before trying again.',
'auth.feedback.networkDescription':
'We could not confirm the result. Your entries are still here. Check your connection before trying again.',
'auth.feedback.serverDescription':
'The server returned an unexpected response. Your entries are still here. Please try again in a moment.',
'auth.feedback.cancelledDescription':
'The request was interrupted. Your entries are still here if you want to try again.',
'navigation.main': 'Main navigation',
'navigation.workspace': 'Workspace',
'navigation.project': 'Project navigation',
'navigation.projectSettings': 'Project settings',
'navigation.account': 'Account',
'navigation.dashboard': 'Dashboard',
'navigation.projects': 'Projects',
'navigation.templates': 'Project templates',
'navigation.users': 'Users',
'navigation.teams': 'Teams',
'navigation.overview': 'Overview',
'navigation.board': 'Board',
'navigation.backlog': 'Backlog',
'navigation.general': 'General',
'navigation.boardSettings': 'Board settings',
'navigation.ticketSettings': 'Ticket settings',
'navigation.repositories': 'Repositories',
'navigation.notifications': 'Notifications',
'navigation.access': 'Access',
'navigation.settings': 'Settings',
'navigation.profile': 'Profile',
'navigation.security': 'Security',
'navigation.gitConnections': 'Git connections',
'navigation.applications': 'Applications',
'navigation.appearance': 'Appearance',
'navigation.settingsDescription':
'Manage your profile, security, and Git integration settings.',
'settings.eyebrow': 'Account settings',
'navigation.createTicket': 'New ticket',
'navigation.createProject': 'New project',
'navigation.downloadApp': 'Download App',
'navigation.downloadAppAppleSilicon':
'Download App for Macs with Apple Silicon',
'navigation.open': 'Open navigation',
'navigation.close': 'Close navigation',
'navigation.expand': 'Expand sidebar',
'navigation.collapse': 'Collapse sidebar',
'navigation.mobileDescription':
'Navigate your workspace and current project.',
'navigation.skipToContent': 'Skip to content',
'navigation.userMenu': 'Account menu for {name}',
'navigation.logout': 'Log out',
'navigation.breadcrumbs': 'Breadcrumbs',
'appearance.label': 'Color theme',
'appearance.light': 'Light',
'appearance.lightDescription':
'Use a bright workspace with dark text and clear borders.',
'appearance.dark': 'Dark',
'appearance.darkDescription':
'Reduce glare with a darker workspace and balanced contrast.',
'appearance.system': 'System',
'appearance.systemDescription':
'Follow the light or dark preference set on this device.',
'appearance.title': 'Appearance',
'appearance.description': 'Choose how KanbanGit looks on this device.',
'appearance.persistenceHint':
'Your choice is saved on this device and restored when you open KanbanGit again.',
'profile.title': 'Profile',
'profile.description':
'Keep your personal details and profile picture up to date.',
'profile.information': 'Profile information',
'profile.picture': 'Profile picture',
'profile.pictureDescription':
'Help teammates recognize you throughout the workspace.',
'profile.picturePreview': 'Profile picture preview',
'profile.choosePicture': 'Choose picture',
'profile.changePicture': 'Choose another',
'profile.discardPicture': 'Discard selection',
'profile.removePicture': 'Remove picture',
'profile.removingPicture': 'Removing picture…',
'profile.selectedPicture': 'Selected: {name}',
'profile.pictureHelp':
'Choose a PNG, JPG, or WebP image up to 2 MB. On mobile, you can select from your photo library or camera.',
'profile.name': 'Name',
'profile.namePlaceholder': 'Full name',
'profile.email': 'Email address',
'profile.emailPlaceholder': 'Email address',
'profile.emailUnverified': 'Your email address is unverified.',
'profile.resendVerification': 'Resend the verification email',
'profile.verificationSent':
'A new verification link has been sent to your email address.',
'profile.save': 'Save profile',
'profile.saving': 'Saving profile…',
'profile.unsaved': 'You have unsaved profile changes.',
'profile.delete.title': 'Delete account',
'profile.delete.description':
'Permanently delete your account and all of its resources.',
'profile.delete.warning': 'This action cannot be undone',
'profile.delete.warningDescription':
'Your account and associated data will be permanently removed.',
'profile.delete.action': 'Delete account',
'profile.delete.confirmTitle':
'Are you sure you want to delete your account?',
'profile.delete.confirmDescription':
'Enter your password to confirm that you want to permanently delete your account and its data.',
'profile.delete.password': 'Password',
'profile.delete.confirmAction': 'Permanently delete account',
'common.cancel': 'Cancel',
'common.close': 'Close',
'common.edit': 'Edit',
'common.remove': 'Remove',
'common.retry': 'Try again',
'feedback.empty': 'Nothing here yet',
'feedback.saved': 'Changes saved',
'forms.saving': 'Saving changes…',
'forms.leaveConfirm': 'You have unsaved changes. Leave without saving?',
'forms.validationTitle': 'Check your entries',
'forms.validationDescription':
'The server rejected some fields. Your entries are still here. Correct the highlighted errors and save again.',
'forms.networkTitle': 'Connection interrupted',
'forms.networkDescription':
'Your entries are still here, but we could not confirm whether the server saved them. Check your connection and verify the result before trying again.',
'forms.serverTitle': 'The request could not be completed',
'forms.serverDescription':
'Your entries are still here. The server returned an unexpected response; your session may have expired. Verify the result before trying again.',
'forms.cancelledTitle': 'Saving was interrupted',
'forms.cancelledDescription':
'Your entries are still here. Check whether the changes were saved before trying again.',
'tickets.noBranches': 'No matching branches',
'tickets.noBranchesDescription':
'No matching branches were found across the linked repositories.',
'tickets.noPullRequests': 'No matching pull requests',
'tickets.noPullRequestsDescription':
'No matching pull requests were found across the linked repositories.',
'tickets.open': 'Open {key}: {title}',
'tickets.blocked': 'Blocked',
'tickets.blockerComment': 'Blocker: {comment}',
'tickets.typeLabel': 'Type: {name}',
'tickets.priorityLabel': 'Priority: {name}',
'tickets.statusLabel': 'Status: {name}',
'tickets.noStatus': 'No status',
'tickets.assignedTo': 'Assigned to {name}',
'tickets.unassigned': 'Unassigned',
'tickets.tree.expand': 'Expand children of {key}',
'tickets.tree.collapse': 'Collapse children of {key}',
'common.save': 'Save',
'common.loading': 'Loading…',
'common.error': 'Something went wrong.',
'pagination.page': 'Page {page} of {total}',
'tickets.count': {
one: '{count} ticket',
other: '{count} tickets',
},
'ticketDetail.description': 'Description',
'ticketDetail.noDescription': 'No description has been added yet.',
'ticketDetail.checklist': 'Acceptance criteria',
'ticketDetail.noChecklist': 'No acceptance criteria have been added yet.',
'ticketDetail.saveChecklistFirst':
'Save checklist text changes before toggling completion directly.',
'ticketDetail.edit': 'Edit ticket',
'ticketDetail.editDescription':
'Tracked ticket changes create worklog entries automatically.',
'ticketDetail.git': 'Git',
'ticketDetail.relationships': 'Relationships',
'ticketDetail.history': 'Worklog',
'ticketDetail.metadata': 'Ticket information',
'ticketDetail.sections': 'Ticket sections',
'ticketDetail.status': 'Status',
'ticketDetail.type': 'Type',
'ticketDetail.priority': 'Priority',
'ticketDetail.assignee': 'Assignee',
'ticketDetail.author': 'Author',
'ticketDetail.noAuthor': 'No author',
'ticketDetail.storyPoints': 'Estimated story points',
'ticketDetail.notSet': 'Not set',
'ticketDetail.created': 'Created',
'ticketDetail.updated': 'Last updated',
'ticketDetail.backToProject': 'Back to project',
'ticketDetail.openBacklog': 'Open backlog',
'ticketDetail.openBoard': 'Open board',
'ticketDetail.readOnly': 'Read only',
'ticketDetail.title': 'Title',
'ticketDetail.parent': 'Parent ticket',
'ticketDetail.noParent': 'No parent ticket',
'ticketDetail.checklistEditor': 'Acceptance criteria checklist',
'ticketDetail.checklistHelp':
'Use [ ] / [x] for checklist items. Indent with two spaces for nested steps. Text changes are saved with the main ticket update.',
'ticketDetail.checklistPlaceholder':
'[ ] User can sign in\n [x] Validation is shown for invalid credentials',
'ticketDetail.blocked': 'Mark ticket as blocked',
'ticketDetail.blocker': 'Blocker',
'ticketDetail.blockerDescription':
'Record whether progress is blocked and why. Changes are added to the ticket worklog.',
'ticketDetail.blockerActive': 'Blocked',
'ticketDetail.blockerInactive': 'Not blocked',
'ticketDetail.blockerActiveDescription':
'A blocker reason is required while this ticket is blocked.',
'ticketDetail.blockerInactiveDescription':
'This ticket currently has no active blocker.',
'ticketDetail.blockerComment': 'Blocker comment',
'ticketDetail.blockerCommentHelp':
'Explain the concrete dependency or decision preventing progress.',
'ticketDetail.blockerPlaceholder':
'Describe what currently blocks progress on this ticket.',
'ticketDetail.saveBlocker': 'Save blocker',
'ticketDetail.unblockTicket': 'Unblock ticket',
'ticketDetail.resetBlocker': 'Discard blocker changes',
'ticketDetail.savingBlocker': 'Saving blocker…',
'ticketDetail.customFields': 'Custom fields',
'ticketDetail.customFieldsDescription':
'Project-configured fields can be tracked directly on the ticket.',
'ticketDetail.noCustomFields':
'No custom fields are configured for this project yet.',
'ticketDetail.saveChanges': 'Save changes',
'ticketDetail.branches': 'Branches',
'ticketDetail.branchesDescription':
'Matching branches are discovered from linked repositories when the branch name starts with this ticket key.',
'ticketDetail.createBranch': 'Create branch',
'ticketDetail.createBranchTitle': 'Create branch from ticket',
'ticketDetail.createBranchDescription':
'Pick a linked repository, confirm the suggested branch name, and create it directly in Gitea.',
'ticketDetail.repository': 'Repository',
'ticketDetail.branchName': 'Branch name',
'ticketDetail.branchAccess':
'You can only create branches in repositories that match one of your personal Git connections.',
'ticketDetail.gitAccessRequired': 'Personal Git access required',
'ticketDetail.personalAccessRequired': 'personal Git access required',
'ticketDetail.openGitConnections': 'Open Git connections',
'ticketDetail.createNow': 'Create now',
'ticketDetail.creatingBranch': 'Creating branch…',
'ticketDetail.noLinkedRepositories': 'No linked repositories',
'ticketDetail.noLinkedRepositoriesDescription':
'A project administrator needs to link a repository before Git activity can appear here.',
'ticketDetail.branchesUnavailable': 'Branches unavailable',
'ticketDetail.pullRequestsUnavailable': 'Pull requests unavailable',
'ticketDetail.openRepositoryExternal':
'Open {repository} on {provider} (opens in a new tab)',
'ticketDetail.openPullRequestExternal':
'Open pull request #{number} on {provider} (opens in a new tab)',
'ticketDetail.inspectBranches':
'Connect a matching Git account in your user settings to inspect branches for this repository.',
'ticketDetail.pullRequests': 'Pull requests',
'ticketDetail.pullRequestsDescription':
'Matching pull requests are detected from linked repositories by checking whether the source branch starts with this ticket key.',
'ticketDetail.inspectPullRequests':
'Connect a matching Git account in your user settings to inspect pull requests for this repository.',
'ticketDetail.checkingBranch':
'Checking whether this branch name is valid and still available...',
'ticketDetail.selectRepository':
'Select a linked repository to validate the branch name.',
'ticketDetail.connectGitFirst':
'Connect a matching Git connection in your user settings first.',
'ticketDetail.branchRequired': 'Branch name is required.',
'ticketDetail.branchValidationFailed':
'{app} could not validate this branch name right now.',
'ticketDetail.checklistSaveFailed':
'Checklist status could not be saved right now.',
'ticketDetail.children': 'Child tickets',
'ticketDetail.childrenDescription':
'Parent tickets expose their full child tree here, including nested parent chains.',
'ticketDetail.noChildren':
'No child tickets are assigned to this ticket yet.',
'ticketDetail.parentDescription':
'This ticket belongs to the parent shown here.',
'ticketDetail.linkedTickets': 'Linked tickets',
'ticketDetail.linkedTicketsDescription':
'Track cross-ticket relationships with project-defined link labels.',
'ticketDetail.linkType': 'Link type',
'ticketDetail.linkedTicket': 'Linked ticket',
'ticketDetail.saveLink': 'Save link',
'ticketDetail.noLinks':
'No ticket links are configured for this ticket yet.',
'ticketDetail.removeLink': 'Remove',
'ticketRelationships.hierarchy': 'Hierarchy',
'ticketRelationships.editParent': 'Change parent',
'ticketRelationships.parentHelp':
'Change parent to assign this ticket or choose “No parent ticket” to detach it.',
'ticketRelationships.childrenHelp':
'Open a child ticket to change its parent. Expand a group to see its descendants.',
'ticketRelationships.addLink': 'Add or update a link',
'ticketRelationships.selectTicket': 'Select a ticket',
'ticketRelationships.direction': 'This ticket',
'ticketRelationships.directionHelp':
'Choose how this ticket relates to the linked ticket. The reverse label appears on the other ticket. Saving an existing pair updates its type and direction.',
'ticketRelationships.outgoing': 'Outgoing',
'ticketRelationships.incoming': 'Incoming',
'ticketRelationships.removeLink': 'Remove link to {key}',
'ticketRelationships.noTypes':
'No link types are configured for this project.',
'ticketRelationships.noTargets':
'No other tickets are available to link in this project.',
'ticketDetail.historyDescription':
'Every tracked ticket change is recorded with actor and timestamp.',
'ticketDetail.noHistory': 'No worklog entries exist for this ticket yet.',
'ticketDetail.system': 'System',
'ticketDetail.historyType.created': 'Ticket created',
'ticketDetail.historyType.updated': 'Ticket updated',
'ticketDetail.historyType.statusChanged': 'Status changed',
'ticketDetail.historyType.linkUpdated': 'Link added',
'ticketDetail.historyType.linkRemoved': 'Link removed',
'ticketDetail.sourceBranch': 'Source branch: {name}',
'ticketForm.create': 'Create ticket',
'ticketForm.pageTitle': 'Create {project} ticket',
'ticketForm.createDescription': 'Add a ticket to {project}.',
'ticketForm.backToBoard': 'Back to board',
'ticketForm.backToBacklog': 'Back to backlog',
'ticketForm.details': 'Ticket details',
'ticketForm.keyAssigned': 'The ticket key is assigned after creation.',
'ticketForm.titlePlaceholder': 'Implement repository sync',
'ticketForm.descriptionPlaceholder':
'Describe the expected behavior and relevant context.',
'ticketForm.checklistHelp':
'Use [ ] / [x] for checklist items. Indent with two spaces for nested steps.',
'ticketForm.checklistPreview': 'Checklist preview',
'ticketForm.metadataRequired':
'Ticket creation needs at least one type, one priority, and one status.',
'ticketForm.openSettings': 'Open ticket settings',
'ticketForm.creating': 'Creating ticket…',
'ticketForm.saving': 'Saving changes…',
'ticketForm.reset': 'Discard changes',
'ticketForm.unsaved': 'Unsaved changes',
'ticketForm.ready': 'Ready for a new ticket',
'ticketForm.saved': 'All changes saved',
'ticketForm.authorRestricted': 'Only project admins can change the author.',
'ticketForm.blocker': 'Blocker',
'projectSettings.pageTitle': '{project} general settings',
'projectSettings.description':
'Manage settings and template inheritance for {project}.',
'projectSettings.generalDescription':
'Review project identity, setting sources, and administrative actions.',
'projectSettings.identity': 'Project identity',
'projectSettings.identityDescription':
'The name and key belong to this project and are never inherited from a template.',
'projectSettings.name': 'Project name',
'projectSettings.key': 'Project key',
'projectSettings.local': 'Local',
'projectSettings.inherited': 'Inherited',
'projectSettings.override': 'Local override',
'projectSettings.display': 'Ticket display',
'projectSettings.showAuthor': 'Show author',
'projectSettings.showStoryPoints': 'Show story points',
'projectSettings.enabled': 'Enabled',
'projectSettings.disabled': 'Disabled',
'projectSettings.displayDescription':
'Manage these display options in Ticket settings.',
'projectSettings.template': 'Template baseline',
'projectSettings.templateDescription':
'Manage the linked template or reset individual areas using the inheritance panel.',
'projectSettings.currentTemplate': 'Current linked template',
'projectSettings.noTemplate': 'No linked template',
'projectSettings.linked': 'Template inheritance active',
'projectSettings.standalone': 'Standalone',
'projectSettings.standaloneDescription':
'This project manages its settings locally. Published template updates are not applied.',
'projectSettings.noAlternatives': 'No other published templates',
'projectSettings.noAlternativesDescription':
'A different published template is required to switch this project.',
'projectSettings.switch': 'Switch template',
'projectSettings.switching': 'Switching template…',
'projectSettings.switchWarning':
'Switching templates can replace or remove project configuration in copied areas, including workflows, ticket metadata, repositories, and notifications.',
'projectSettings.publishedTemplate': 'Published template',
'projectSettings.selectTemplate': 'Select a template',
'projectSettings.confirmation': 'Confirmation key',
'projectSettings.confirmPlaceholder': 'Type {key} exactly',
'projectSettings.confirmHelp':
'Enter the exact project key {key} to confirm this action. The key is case sensitive.',
'projectSettings.danger': 'Danger zone',
'projectSettings.deleteDescription':
'Permanently delete this project and all of its tickets, board columns, ticket metadata, repository connections, and project permissions.',
'projectSettings.irreversible': 'This action cannot be undone.',
'projectSettings.delete': 'Delete project',
'projectSettings.deleting': 'Deleting project…',
'projectSettings.updated': 'Project settings updated.',
'inheritance.title': 'Template inheritance',
'inheritance.description': 'Settings linked to {template}.',
'inheritance.help':
'Each area inherits independently. Settings outside the template are managed locally.',
'inheritance.areas': 'Setting sources',
'inheritance.overrideHelp':
'Local changes stay in place when the template is updated.',
'inheritance.reset': 'Reset to template',
'inheritance.resetArea': 'Reset {area} to template',
'inheritance.resetting': 'Resetting…',
'inheritance.confirmTitle': 'Reset this setting area?',
'inheritance.confirmDescription':
'Replace local changes in {area} with the current baseline from {template}. Other setting areas keep their current values.',
'inheritance.resetWarning':
'Local configuration in this area may be replaced or removed.',
'inheritance.statusHelp':
'Choose where tickets in local statuses should move before those statuses are removed.',
'inheritance.statusLabel': '{status} ({count} tickets)',
'inheritance.selectStatus': 'Select replacement status',
'inheritance.area.projectSettings': 'Project settings',
'inheritance.area.boardColumns': 'Board columns',
'inheritance.area.ticketStatuses': 'Ticket statuses',
'inheritance.area.statusTransitions': 'Status transitions',
'inheritance.area.ticketTypes': 'Ticket types',
'inheritance.area.ticketPriorities': 'Ticket priorities',
'inheritance.area.ticketFields': 'Custom ticket fields',
'inheritance.area.ticketLinkTypes': 'Ticket link types',
'inheritance.area.repositoryConnections': 'Repository connections',
'inheritance.area.notificationActions': 'Notification actions',
'repositorySettings.pageTitle': '{project} repository settings',
'repositorySettings.title': 'Project repositories',
'repositorySettings.description':
'Choose the repositories this project uses for ticket branches and pull requests.',
'repositorySettings.projectScope':
'Repository links belong to the project. Every team member keeps using the same linked repositories, while access is granted through their own personal Git connections.',
'repositorySettings.linkedRepositories': 'Linked repositories',
'repositorySettings.linkAction': 'Link repository',
'repositorySettings.empty': 'No project repositories yet',
'repositorySettings.emptyDescription':
'Link a repository from one of your personal Git connections to make it available to project tickets.',
'repositorySettings.personalAccessReady': 'Personal access ready',
'repositorySettings.personalAccessMissing': 'Personal access needed',
'repositorySettings.ticketUsage':
'Tickets use this project link to discover matching branches and pull requests.',
'repositorySettings.openRepository':
'Open {repository} in the Git provider (opens in a new tab)',
'repositorySettings.open': 'Open repository',
'repositorySettings.connectAccess': 'Connect Git access',
'repositorySettings.editRepository':
'Change project repository {repository}',
'repositorySettings.removeRepository':
'Remove project repository {repository}',
'repositorySettings.personalSources': 'Personal Git access',
'repositorySettings.personalSourcesDescription':
'These account connections are private to you and are only used to discover repositories you can link to this project.',
'repositorySettings.manageConnections': 'Manage Git connections',
'repositorySettings.refresh': 'Refresh repositories',
'repositorySettings.refreshing': 'Loading repositories…',
'repositorySettings.refreshingDescription':
'The latest repositories are being requested from your Git providers.',
'repositorySettings.noConnections': 'No personal Git connection',
'repositorySettings.noConnectionsDescription':
'Add a personal Git connection before linking or changing a project repository.',
'repositorySettings.detectedSources': 'Detected personal sources',
'repositorySettings.unavailable': 'Provider unavailable',
'repositorySettings.repositoryCount': '{count} repositories',
'repositorySettings.linkTitle': 'Link a project repository',
'repositorySettings.linkDescription':
'Choose a personal connection, find a repository, and add it to this project.',
'repositorySettings.editTitle': 'Change project repository',
'repositorySettings.editDescription':
'Replace this project link with another repository. Tickets will use the updated link after saving.',
'repositorySettings.removeTitle': 'Remove repository',
'repositorySettings.removeDescription':
'Remove this repository from the project? Tickets will no longer discover its branches or pull requests.',
'repositorySettings.linked': 'Repository linked to the project.',
'repositorySettings.updated': 'Project repository updated.',
'repositorySettings.removed': 'Repository removed from the project.',
'repositorySettings.matchingConnectionMissing':
'Matching personal access is missing',
'repositorySettings.matchingConnectionMissingDescription':
'The project link remains available to the team, but this account cannot query it until you add a matching provider connection. You can still choose a different accessible repository below.',
'repositorySettings.personalConnection': 'Personal Git connection',
'repositorySettings.personalConnectionHelp':
'Used for discovery only; it is not shared with the project.',
'repositorySettings.providerError':
'Repositories could not be loaded from this provider',
'repositorySettings.searchLabel': 'Find a repository',
'repositorySettings.searchPlaceholder':
'Search by repository, owner, or namespace',
'repositorySettings.noRepositories': 'No repositories available',
'repositorySettings.noRepositoriesDescription':
'This connection is working, but the provider returned no repositories you can access.',
'repositorySettings.noSearchResults': 'No matching repositories',
'repositorySettings.noSearchResultsDescription':
'No repository matches “{search}”. Try a different name or clear the search.',
'repositorySettings.repositoryLabel': 'Available repositories',
'repositorySettings.forbidden': 'Project access denied',
'repositorySettings.forbiddenDescription':
'You no longer have permission to manage repositories for this project. Close this dialog and refresh the page.',
'repositorySettings.linking': 'Linking repository…',
'repositorySettings.saving': 'Saving repository…',
'repositorySettings.save': 'Save repository',
'repositorySettings.removing': 'Removing repository…',
'gitConnections.description':
'Connect your personal Git account to browse repositories, branches, and pull requests you can access.',
'gitConnections.privacy':
'Connections belong to your account. Saved tokens stay hidden. Without a matching connection, only repository names are available.',
'gitConnections.add': 'Add connection',
'gitConnections.editAction': 'Edit',
'gitConnections.edit': 'Edit connection',
'gitConnections.remove': 'Remove',
'gitConnections.removeTitle': 'Remove connection',
'gitConnections.saved': 'Saved connections',
'gitConnections.empty': 'No Git connections yet',
'gitConnections.emptyDescription':
'Add a Gitea connection to access your repositories and their Git activity.',
'gitConnections.unnamedAccount': 'Unnamed remote account',
'gitConnections.remoteId': 'Remote user ID: {id}',
'gitConnections.editAccount': 'Edit {account} at {server}',
'gitConnections.removeAccount': 'Remove {account} at {server}',
'gitConnections.addDescription':
'Connect a Gitea account using its server URL and a personal application token.',
'gitConnections.editDescription':
'Update the server URL and enter a fresh token to verify this connection.',
'gitConnections.removeDescription':
'Remove this personal connection? Repository links remain, but Git activity will require another matching connection.',
'gitConnections.gitea': 'Gitea',
'gitConnections.baseUrl': 'Gitea base URL',
'gitConnections.token': 'Application token',
'gitConnections.newToken': 'New application token',
'gitConnections.tokenPlaceholder': 'Paste your Gitea application token',
'gitConnections.tokenHelp':
'Your token is verified with Gitea before saving. It is never shown in the saved connection.',
'gitConnections.verifying': 'Verifying connection…',
'gitConnections.save': 'Save changes',
'gitConnections.removing': 'Removing connection…',
'gitConnections.forbidden': 'Connection access denied',
'gitConnections.forbiddenDescription':
'You can only manage connections belonging to your account. Close this dialog and refresh the page.',
'gitConnections.added': 'Git connection added.',
'gitConnections.updated': 'Git connection updated.',
'gitConnections.removed': 'Git connection removed.',
'metadata.title': 'Ticket settings',
'metadata.pageTitle': '{project} ticket settings',
'metadata.description':
'Manage ticket types, priorities, and the information shown on your tickets.',
'metadata.updated': 'Ticket settings updated.',
'metadata.types': 'Ticket types',
'metadata.priorities': 'Priorities',
'metadata.addType': 'Add type',
'metadata.addPriority': 'Add priority',
'metadata.typesDescription':
'Define your project’s ticket types and their order. Parent types can contain child tickets.',
'metadata.prioritiesDescription':
'Define and order project-specific priorities. The last priority must be kept.',
'metadata.parentType': 'Parent type',
'metadata.standardType': 'Standard type',
'metadata.assignedTickets': 'Assigned tickets: {count}',
'metadata.editEntry': 'Edit {name}',
'metadata.deleteEntry': 'Delete {name}',
'metadata.lastType':
'The last ticket type cannot be deleted. Add another type first.',
'metadata.lastPriority':
'The last priority cannot be deleted. Add another priority first.',
'metadata.display': 'Display options',
'metadata.displayDescription':
'Choose which optional information is available on this project’s tickets.',
'metadata.author': 'Show ticket author',
'metadata.authorHelp': 'Display the author on ticket details.',
'metadata.storyPoints': 'Enable story points',
'metadata.storyPointsHelp': 'Allow estimates in story points on tickets.',
'metadata.name': 'Name',
'metadata.positionHelp':
'Choose a position from 1 to {count}. Other entries shift automatically.',
'metadata.allowChildren': 'Allow child tickets',
'metadata.parentFixed':
'Whether a type allows child tickets is fixed after creation. Its name and position remain editable.',
'metadata.editHelp':
'Choose a project-specific name. Changes apply to tickets using this entry.',
'metadata.deleteTypeHelp':
'Delete this type? Assigned tickets must be moved to a replacement type first. This action cannot be undone.',
'metadata.deletePriorityHelp':
'Delete this priority? All tickets assigned to this priority will also be permanently deleted. There is no replacement mapping for priorities. This action cannot be undone.',
'metadata.replacementHelp':
'Move {count} assigned tickets to another type before deleting this one.',
'metadata.replacement': 'Replacement ticket type',
'metadata.chooseType': 'Choose a type',
'metadata.parentReplacement':
'If any affected ticket has child tickets, choose a parent type. The server checks this before deleting.',
'metadata.customFields': 'Custom fields',
'metadata.customFieldsDescription':
'Define the project-specific user and number fields shown on tickets.',
'metadata.addField': 'Add field',
'metadata.noCustomFields': 'No custom fields',
'metadata.noCustomFieldsDescription':
'Add a field when this project needs structured information beyond the standard ticket details.',
'metadata.storedValues': 'Stored values: {count}',
'metadata.editField': 'Edit {name}',
'metadata.deleteField': 'Delete {name}',
'metadata.fieldEditorHelp':
'Choose a label and one of the supported field types. Existing ticket values remain attached when this definition is edited.',
'metadata.deleteFieldHelp':
'Delete this custom field? This action cannot be undone.',
'metadata.fieldDeletionImpact':
'Deleting this field also permanently removes {count} stored ticket values.',
'metadata.fieldLabel': 'Field label',
'metadata.fieldType': 'Field type',
'metadata.fieldTypeHelp':
'Only the field types already supported by this project are available.',
'metadata.linkTypes': 'Link types',
'metadata.linkTypesDescription':
'Define the labels shown from each side of a ticket relationship.',
'metadata.addLinkType': 'Add link type',
'metadata.noLinkTypes': 'No link types',
'metadata.noLinkTypesDescription':
'Add a link type before tickets can be connected with a project-specific relationship.',
'metadata.ticketRelationships': 'Ticket relationships: {count}',
'metadata.linkDirection': '{source} points to {counterpart}',
'metadata.editLinkType': 'Edit {name}',
'metadata.deleteLinkType': 'Delete {name}',
'metadata.linkTypeEditorHelp':
'The source label is shown on the originating ticket; the counterpart label is shown on the linked ticket.',
'metadata.deleteLinkTypeHelp':
'Delete this link type? This action cannot be undone.',
'metadata.linkTypeDeletionImpact':
'Deleting this link type also permanently removes {count} ticket relationships.',
'metadata.sourceLabel': 'Source label',
'metadata.sourceLabelHelp':
'Shown when viewing the ticket where the relationship starts.',
'metadata.counterpartLabel': 'Counterpart label',
'metadata.counterpartLabelHelp':
'Shown when viewing the ticket at the other end of the relationship.',
} as const;