1039 lines
56 KiB
TypeScript
1039 lines
56 KiB
TypeScript
export const en = {
|
||
'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',
|
||
'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.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.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.directionHelp':
|
||
'The selected relationship points from this ticket to the linked 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',
|
||
'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.',
|
||
} as const;
|