diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json new file mode 100644 index 0000000..a58a7fe --- /dev/null +++ b/public/locales/en/translation.json @@ -0,0 +1,1408 @@ +{ + "landing": { + "hero": { + "badgeText": "Command as Service · Human + Agent Engineering", + "heading": "Where Humans & Agents Engineer Together.", + "subtitle": "Every action is a command. Every command is versioned, auditable, and composable. Git repositories, rooms, and AI agents — all driven by a command stream you own.", + "startBuilding": "Start Building", + "viewDocumentation": "View Documentation", + "terminalTitle": "gitdata — every action is a command" + }, + "features": { + "sectionTitle": "Build. Review. Automate. All via Commands.", + "sectionSubtitle": "Every capability is exposed as a command. Agents listen. Humans approve. Everything is logged and replayable.", + "commandAsService": { + "title": "Command as Service", + "description": "Every action — a repo create, a PR review, an agent deploy — is a versioned command. Audit, replay, and compose them. Your CLI is your API." + }, + "collaborativeRooms": { + "title": "Collaborative Rooms", + "description": "Command-first rooms where humans and AI agents work together via shared command streams. Issue commands, review results, and build consensus — all in one thread." + }, + "aiAgents": { + "title": "AI Agents", + "description": "Deploy agents that listen to room commands, execute tasks, and report back. Agents run skills, query repos, and call your own services." + }, + "gitRepositories": { + "title": "Git Repositories", + "description": "Full Git operations — branches, commits, merges, and diffs. HTTP and SSH access. Built-in branch protection and access control." + }, + "issuesPullRequests": { + "title": "Issues & Pull Requests", + "description": "Track issues, review code, and manage pull requests. Agents can listen to PR events and automatically run review commands." + }, + "skillRegistry": { + "title": "Skill Registry", + "description": "Package agent behaviors as reusable Skills. Publish to a registry, pull into any room, and invoke via command. Your workflows become shared services." + }, + "commandAuditTrail": { + "title": "Command Audit Trail", + "description": "Every command is logged with its intent, result, and caller. Trace every AI decision back to the human who issued it." + }, + "agentMemory": { + "title": "Agent Memory", + "description": "Agents have persistent, git-native memory. Branch, commit, and roll back context just like source code. No more stateless agents." + } + }, + "highlight": { + "heading": "Your CLI is also your API.", + "subtitle": "Every GitDataAI action is a command with a name, parameters, and a result. Agents subscribe to command streams. Rooms execute commands. Your entire development workflow becomes a versioned, replayable, diffable stream — without a separate event bus.", + "commandsAllTheWayDown": { + "title": "Commands All the Way Down", + "description": "Every operation — repo create, agent deploy, skill run — is a command. Your workflow is a composable, queryable stream." + }, + "agentsListenToCommands": { + "title": "Agents Listen to Commands", + "description": "Deploy an agent to a room and it subscribes to command events. Agents don't guess — they execute what you command." + }, + "gitNativeAudit": { + "title": "Git-Native Audit", + "description": "Command history is stored in Git. Branch your command log, diff a workflow, replay it anywhere. Full traceability without a separate log store." + }, + "approve": "Approve", + "viewDiff": "View Diff" + }, + "nav": { + "platform": "Platform", + "skills": "Skills", + "network": "Network", + "pricing": "Pricing", + "signIn": "Sign in", + "joinBeta": "Join Beta", + "commandAsServiceNav": "Command as Service", + "collaborativeRoomsNav": "Collaborative Rooms", + "aiAgentsNav": "AI Agents", + "gitRepositoriesNav": "Git Repositories", + "exploreSkillsNav": "Explore Skills", + "publishSkillNav": "Publish a Skill", + "skillDocumentationNav": "Skill Documentation", + "exploreNetworkNav": "Explore Network", + "publicRoomsNav": "Public Rooms", + "developerApiNav": "Developer API", + "plansPricingNav": "Plans & Pricing", + "enterpriseNav": "Enterprise", + "billingFaqNav": "Billing FAQ" + }, + "footer": { + "readyHeading": "Ready for the Agentic Era?", + "getStartedFree": "Get Started Free", + "contactSales": "Contact Sales", + "platform": "Platform", + "skills": "Skills", + "developers": "Developers", + "company": "Company", + "gitRepositories": "Git Repositories", + "issuesPullRequests": "Issues & PRs", + "collaborativeRooms": "Collaborative Rooms", + "aiAgents": "AI Agents", + "commandStream": "Command Stream", + "skillRegistry": "Skill Registry", + "publishSkill": "Publish a Skill", + "skillDocs": "Skill Documentation", + "community": "Community", + "documentation": "Documentation", + "cliReference": "CLI Reference", + "apiReference": "API Reference", + "status": "Status", + "about": "About", + "careers": "Careers", + "contact": "Contact", + "privacy": "Privacy", + "brandTagline": "The platform where humans and AI agents engineer together via commands. Every action versioned. Every agent accountable. Built for teams that ship." + } + }, + "auth": { + "login": { + "heading": "Sign in", + "subtitleWelcome": "Welcome back to GitDataAI", + "subtitleContinue": "Continue to {path}", + "usernameLabel": "Username", + "usernamePlaceholder": "Enter your username", + "passwordLabel": "Password", + "passwordForgot": "Forgot?", + "verificationLabel": "Verification", + "verificationPlaceholder": "Enter code", + "submitButton": "Sign in", + "noAccount": "Don't have an account?", + "createOne": "Create one", + "errorFillRequired": "Please fill in all required fields.", + "errorInvalidCredentials": "Invalid credentials. Please try again." + }, + "register": { + "heading": "Create an account", + "subtitle": "Join the next generation of human-agent collaboration", + "emailLabel": "Email", + "emailPlaceholder": "name@company.com", + "usernameLabel": "Username", + "usernamePlaceholder": "architect_01", + "passwordLabel": "Password", + "passwordPlaceholder": "••••••••", + "confirmLabel": "Confirm", + "confirmPlaceholder": "••••••••", + "verificationLabel": "Verification", + "verificationPlaceholder": "Captcha", + "submitButton": "Create Account", + "alreadyHaveAccount": "Already have an account?", + "signIn": "Sign in", + "encrypted": "Encrypted", + "errorEmailRequired": "Email is required", + "errorInvalidEmail": "Invalid email address", + "errorUsernameRequired": "Username is required", + "errorUsernameLength": "Username must be at least 3 characters", + "errorPasswordRequired": "Password is required", + "errorPasswordLength": "Password must be at least 8 characters", + "errorPasswordComplexity": "Password must include uppercase, lowercase, and a digit", + "errorPasswordMismatch": "Passwords do not match", + "errorCaptchaRequired": "Verification code is required", + "errorRegistrationFailed": "Registration failed", + "successAccountCreated": "Account created successfully!" + }, + "passwordReset": { + "heading": "Reset password", + "subtitle": "Enter your email and we'll send you a link to get back into your account.", + "emailLabel": "Email address", + "emailPlaceholder": "name@example.com", + "submitButton": "Send Reset Link", + "backToSignIn": "Back to sign in", + "successHeading": "Check your email", + "successMessage": "We've sent a secure link to {email}. Click the link to reset your passphrase.", + "returnToSignIn": "Return to Sign In", + "didNotReceive": "Didn't receive the email? Check your spam folder or", + "tryAgain": "try again", + "secureLink": "Secure Link", + "expiry24h": "24h Expiry", + "errorEmailRequired": "Email address is required.", + "errorInvalidEmail": "Please enter a valid email address.", + "errorSendFailed": "Failed to send reset email.", + "successLinkSent": "Reset link sent!" + }, + "confirmPasswordReset": { + "heading": "Set new password", + "subtitle": "Create a strong password for your account.", + "newPasswordLabel": "New password", + "newPasswordPlaceholder": "At least 8 characters", + "confirmPasswordLabel": "Confirm password", + "confirmPasswordPlaceholder": "Repeat your password", + "submitButton": "Reset Password", + "backToSignIn": "Back to sign in", + "successHeading": "Password reset complete", + "successMessage": "Your password has been updated. You can now sign in with your new password.", + "signIn": "Sign in", + "passwordUpdated": "Password Updated", + "secureConnection": "Secure Connection", + "errorMissingToken": "Missing reset token. Please use the link from your email.", + "errorPasswordRequired": "New password is required.", + "errorPasswordLength": "Password must be at least 8 characters.", + "errorPasswordUppercase": "Password must contain at least one uppercase letter.", + "errorPasswordLowercase": "Password must contain at least one lowercase letter.", + "errorPasswordDigit": "Password must contain at least one digit.", + "errorPasswordMismatch": "Passwords do not match.", + "errorResetFailed": "Failed to reset password. The link may have expired.", + "successResetComplete": "Password reset successful!" + }, + "verifyEmail": { + "heading": "Email Verification", + "loadingText": "Verifying secure token...", + "successHeading": "Identity Confirmed", + "successMessage": "Your email has been successfully verified. You now have full access to the GitDataAI platform.", + "goToDashboard": "Go to Dashboard", + "errorHeading": "Verification Failed", + "backToSettings": "Back to Settings", + "needHelp": "Need help?", + "contactSupport": "Contact engineering support", + "encryptedLink": "Encrypted Link", + "soc2Compliant": "SOC2 Compliant", + "errorTokenMissing": "Verification token is missing or malformed.", + "errorLinkExpired": "The verification link has expired or is invalid.", + "successVerified": "Identity verified successfully." + }, + "acceptWorkspaceInvite": { + "heading": "Workspace Invitation", + "loadingHeading": "Validating invite", + "loadingText": "Checking permissions and workspace status...", + "successHeading": "Welcome Aboard!", + "successMessage": "Invitation accepted. You've been added to the team. We're redirecting you to the dashboard now.", + "proceedManually": "Proceed Manually", + "errorHeading": "Invalid Invite", + "returnHome": "Return Home", + "needNewLink": "Need a new link?", + "contactAdmin": "Contact workspace admin", + "secureJoin": "SECURE JOIN", + "dataOwnership": "DATA OWNERSHIP", + "errorMissingToken": "The invitation link is missing a valid security token.", + "errorExpired": "The invitation link has expired or already been used.", + "successJoined": "Successfully joined the workspace" + } + }, + "project": { + "overview": { + "settings": "Settings", + "members": "members", + "likes": "likes", + "watches": "watches", + "public": "Public", + "private": "Private", + "activity": "Activity", + "viewAll": "View all", + "recentEvents": "Recent events in this project", + "noActivity": "No activity yet.", + "projectInfo": "Project Info", + "projectName": "Project name", + "yourRole": "Your role", + "created": "Created", + "visibility": "Visibility", + "guest": "Guest", + "quickActions": "Quick Actions", + "newIssue": "New Issue", + "viewActivity": "View Activity", + "membersAction": "Members", + "createRepository": "Create Repository", + "projectNotFound": "Project not found.", + "noDescription": "No description provided", + "expand": "Expand", + "collapse": "Collapse" + }, + "eventTypes": { + "commit": "Commit", + "branch": "Branch", + "tag": "Tag", + "issue": "Issue", + "comment": "Comment", + "pullRequest": "Pull Request", + "merged": "Merged", + "message": "Message", + "room": "Room", + "starred": "Starred", + "unstarred": "Unstarred", + "watched": "Watched", + "unwatched": "Unwatched", + "member": "Member", + "label": "Label", + "repo": "Repo" + }, + "dateLabels": { + "today": "Today", + "yesterday": "Yesterday" + }, + "issues": { + "breadcrumb": { + "projects": "Projects", + "issues": "Issues" + }, + "searchPlaceholder": "Search issues…", + "boardView": "Board view", + "listView": "List view", + "board": "Board", + "list": "List", + "new": "New", + "open": "Open", + "closed": "Closed", + "of": "of", + "shown": "shown", + "errorLoading": "Error:", + "errorLoadFailed": "Failed to load issues", + "noIssues": "No issues found", + "clearSearch": "Clear search", + "title": "Title", + "author": "Author", + "date": "Date", + "newIssue": "New issue", + "noIssuesInColumn": "No issues" + }, + "issueDetail": { + "backToIssues": "Back to Issues", + "closeIssue": "Close Issue", + "reopenIssue": "Reopen Issue", + "edit": "Edit", + "openStatus": "Open", + "closedStatus": "Closed", + "openedBy": "Opened by", + "aiTriage": "AI Triage", + "highPriority": "high priority", + "mediumPriority": "medium priority", + "lowPriority": "low priority", + "accept": "Accept", + "applying": "Applying…", + "ignore": "Ignore", + "noActivity": "No activity yet.", + "openedThisIssue": "opened this issue", + "commented": "commented", + "editComment": "Edit comment", + "deleteComment": "Delete comment", + "cancel": "Cancel", + "save": "Save", + "saving": "Saving…", + "leaveComment": "Leave a comment…", + "comment": "Comment", + "posting": "Posting…", + "commentCannotEmpty": "Comment cannot be empty", + "isTyping": "{user} is typing…", + "areTyping": "{user1} and {user2} are typing…", + "peopleTyping": "{count} people are typing…", + "linkedRepositories": "Linked Repositories", + "details": "Details", + "status": "Status", + "author": "Author", + "created": "Created", + "updated": "Updated", + "closed": "Closed", + "labelsApplied": "Labels applied", + "failedApplyLabels": "Failed to apply labels", + "commentAdded": "Comment added", + "failedAddComment": "Failed to add comment", + "commentDeleted": "Comment deleted", + "failedDeleteComment": "Failed to delete comment", + "commentUpdated": "Comment updated", + "failedUpdateComment": "Failed to update comment", + "issueClosed": "Issue closed", + "issueReopened": "Issue reopened", + "failedUpdateIssue": "Failed to update issue", + "errorLoadingIssue": "Failed to load issue" + }, + "room": { + "selectChannel": "Select a channel", + "chooseChannelHint": "Choose a channel from the sidebar to start chatting.", + "channels": "Channels", + "noChannelsYet": "No channels yet", + "createChannel": "Create Channel", + "addCategory": "+ Add Category", + "categoryNamePlaceholder": "Category name", + "addChannel": "Add Channel", + "channelSettings": "Channel settings", + "expand": "Expand", + "collapse": "Collapse", + "mute": "Mute", + "unmute": "Unmute", + "archive": "Archive", + "unarchive": "Unarchive", + "members": "Members", + "online": "Online", + "ai": "AI" + }, + "roomDialog": { + "newRoom": "New Room", + "createRoomDescription": "Create a new chat room. Choose a name and visibility.", + "roomName": "Room name", + "roomNamePlaceholder": "e.g. general", + "publicLabel": "Public (visible to all project members)", + "cancel": "Cancel", + "create": "Create", + "creating": "Creating...", + "deleteRoom": "Delete room", + "deleteRoomConfirm": "Are you sure you want to delete \"{name}\"? All messages will be permanently removed. This cannot be undone.", + "deleting": "Deleting..." + }, + "roomChat": { + "connecting": "Connecting...", + "disconnected": "Disconnected", + "mentions": "@ Mentions", + "searchMessages": "Search messages", + "memberList": "Member list", + "pinnedMessages": "Pinned messages", + "roomSettings": "Room Settings", + "deleteChannel": "Delete channel", + "showChannels": "Show channels", + "hideChannels": "Hide channels", + "back": "Back", + "isThinking": "{name} is thinking...", + "typingSingular": "{user} is typing...", + "typingDual": "{user1} and {user2} are typing...", + "typingOthers": "{user} and {count} others are typing...", + "messageUpdated": "Message updated", + "messageDeleted": "Message deleted", + "failedCreateThread": "Failed to create thread", + "navigateToMessage": "Navigate to message in {room}", + "roomUpdated": "Room updated", + "failedUpdateRoom": "Failed to update room" + }, + "commandPalette": { + "placeholder": "Search projects, repos, rooms, commands…", + "noResults": "No results found.", + "navigation": "Navigation", + "create": "Create", + "projects": "Projects", + "repositories": "Repositories", + "rooms": "Rooms", + "gotoNotifications": "Go to Notifications", + "createProject": "Create Project", + "createRepoIn": "Create Repo in {project}" + }, + "issueNew": { + "backToIssues": "Back to Issues", + "creatingIn": "Creating in {project}", + "titleRequired": "Title *", + "titlePlaceholder": "Brief summary of the issue", + "description": "Description", + "markdown": "Markdown", + "bold": "Bold", + "italic": "Italic", + "code": "Code", + "link": "Link", + "list": "List", + "quote": "Quote", + "bodyPlaceholder": "Describe the issue in detail. Markdown is supported.", + "bodyHint": "Supports Markdown — use **bold**, `code`, lists, and more", + "linkedRepositories": "Linked Repositories", + "linkedReposHint": "Track commits and pull requests related to this issue", + "assignees": "Assignees", + "labels": "Labels", + "cancel": "Cancel", + "createIssue": "Create Issue", + "creating": "Creating…", + "discardChanges": "Discard changes?", + "discardChangesDesc": "You have unsaved changes. Are you sure you want to leave?", + "keepEditing": "Keep editing", + "discard": "Discard", + "titleRequiredError": "Title is required", + "issueCreated": "Issue created", + "failedCreateIssue": "Failed to create issue", + "selectAssignees": "Select Assignees", + "selectAssigneesDesc": "Choose team members to assign to this issue", + "noMembers": "No members found in this project", + "done": "Done", + "selectLabels": "Select Labels", + "selectLabelsDesc": "Choose labels to categorize this issue", + "noLabels": "No labels in this project yet" + }, + "issueEdit": { + "backToIssue": "Back to Issue #{number}", + "editingIssue": "Editing issue #{number}", + "title": "Edit Issue", + "titleSection": "Title", + "titleCantChange": "Title cannot be changed after creation", + "status": "Status", + "changeStatusHint": "Change status from the issue detail page", + "description": "Description", + "descriptionPlaceholder": "Add a description to provide more context (supports Markdown)", + "markdownHint": "Supports Markdown formatting", + "linkedRepositories": "Linked Repositories", + "noRepositories": "No repositories in this project", + "cancel": "Cancel", + "saveChanges": "Save Changes", + "saving": "Saving…", + "discardChanges": "Discard changes?", + "discardChangesDesc": "You have unsaved changes. Are you sure you want to leave?", + "keepEditing": "Keep editing", + "discard": "Discard", + "issueNotFound": "Issue not found.", + "issueUpdated": "Issue updated successfully", + "failedUpdateIssue": "Failed to update issue", + "returnToIssue": "Return to issue" + }, + "activity": { + "title": "Activity", + "subtitle": "Recent events in {project}", + "filterEvents": "Filter events", + "perPage": "{count} / page", + "noActivity": "No activity found.", + "tryDifferentType": "Try selecting a different event type.", + "failedLoad": "Failed to load activity feed.", + "page": "Page {page} of {totalPages}", + "events": "{count} events", + "allEvents": "All Events", + "commits": "Commits", + "branchCreated": "Branch Created", + "branchDeleted": "Branch Deleted", + "tagCreated": "Tag Created", + "tagDeleted": "Tag Deleted", + "repoCreated": "Repo Created", + "issueOpened": "Issue Opened", + "issueClosed": "Issue Closed", + "issueReopened": "Issue Reopened", + "issueComment": "Issue Comment", + "prOpened": "PR Opened", + "prMerged": "PR Merged", + "prClosed": "PR Closed", + "roomMessage": "Room Message", + "roomCreated": "Room Created", + "projectStarred": "Project Starred", + "projectUnstarred": "Project Unstarred", + "memberAdded": "Member Added", + "memberRemoved": "Member Removed", + "roleChanged": "Role Changed", + "labelCreated": "Label Created", + "labelUpdated": "Label Updated", + "labelDeleted": "Label Deleted" + }, + "resources": { + "title": "Resources", + "subtitle": "Manage and publish project resources to the marketplace.", + "comingSoon": "Coming soon", + "description": "Publish skills, packages, and other resources to the marketplace." + }, + "articles": { + "title": "Articles", + "subtitle": "Write and manage project documentation and articles.", + "comingSoon": "Coming soon", + "description": "Write and publish articles for your project." + }, + "skillsInit": { + "backToSkills": "Back to Skills", + "title": "New Skill", + "subtitle": "Add a skill to this project", + "slug": "Slug", + "slugPlaceholder": "coding/code-review", + "slugHint": "Unique identifier, use / to group skills", + "displayName": "Display Name", + "namePlaceholder": "Code Review Agent", + "description": "Description", + "descPlaceholder": "Reviews pull requests with AI", + "content": "Content (SKILL.md)", + "contentPlaceholder": "# Code Review\n\nYou are an expert code reviewer...", + "contentHint": "Markdown describing when and how to use this skill.", + "cancel": "Cancel", + "createSkill": "Create Skill", + "created": "Skill \"{name}\" created", + "failedCreate": "Failed to create skill" + } + }, + "notification": { + "title": "Notifications", + "live": "Live", + "unreadTotal": "{unread} unread · {total} total", + "totalNotifications": "{count} notification{plural}", + "noGrouping": "No grouping", + "groupByProject": "Group by project", + "groupByType": "Group by type", + "cancel": "Cancel", + "markRead": "Mark read", + "archive": "Archive", + "markAllRead": "Mark all read", + "selectMultiple": "Select multiple", + "selectModeActive": "✓ Select mode active", + "markAllReadInGroup": "Mark all read in group", + "filterAll": "All", + "filterUnread": "Unread", + "filterArchived": "Archived", + "notificationSettings": "Notification settings", + "noUnread": "No unread notifications", + "noArchived": "No archived notifications", + "noNotifications": "No notifications yet", + "allCaughtUp": "You're all caught up!", + "archivedAppearHere": "Archived notifications will appear here.", + "notificationsAppearHere": "You'll see notifications here when something happens.", + "justNow": "just now", + "minutesAgo": "{count}m ago", + "hoursAgo": "{count}h ago", + "daysAgo": "{count}d ago", + "markAsRead": "Mark as read", + "notificationArchived": "Notification archived", + "failedMarkRead": "Failed to mark as read", + "failedArchive": "Failed to archive", + "failedMarkAllRead": "Failed to mark all as read", + "notificationsArchived": "{count} notifications archived", + "typeMention": "Mention", + "typeInvitation": "Invitation", + "typeProjectInvite": "Project Invite", + "typeWorkspaceInvite": "Workspace Invite", + "typeRoleChange": "Role Change", + "typeRoomCreated": "Room Created", + "typeRoomDeleted": "Room Deleted", + "typeAnnouncement": "Announcement", + "typeIssueOpened": "Issue Opened", + "typeIssueCommented": "Issue Comment", + "typeIssueClosed": "Issue Closed", + "typeReviewRequested": "Review Requested", + "typePrApproved": "PR Approved", + "typePrMerged": "PR Merged" + }, + "search": { + "placeholder": "Search projects, repositories, issues, users...", + "searchButton": "Search", + "projects": "Projects", + "repositories": "Repositories", + "issues": "Issues", + "users": "Users", + "messages": "Messages", + "resultsFor": "{count} results for \"{query}\"", + "noResultsFor": "No results for \"{query}\"", + "messagesFor": "{count} message{plural} for \"{query}\"{inRoom}", + "noMessagesFor": "No messages found matching \"{query}\"", + "noMessagesInRoom": "No messages found in room \"{room}\" matching \"{query}\"", + "searchFailed": "Search failed", + "enterKeyword": "Enter a keyword to search across all content.", + "noResultsFound": "No results found", + "tryDifferentKeywords": "Try different keywords or check your spelling.", + "showing": "Showing {count} of {total} {type}", + "roomIdPlaceholder": "Room ID to search messages in (e.g. workspace:general)...", + "acrossAllRooms": "across all accessible rooms", + "inRoom": " in room {room}" + }, + "settings": { + "account": { + "title": "Account", + "subtitle": "Manage your account information and preferences.", + "changePassword": "Change Password", + "changePasswordDesc": "Update your password to keep your account secure.", + "currentPassword": "Current Password", + "currentPasswordPlaceholder": "Enter your current password", + "newPassword": "New Password", + "newPasswordPlaceholder": "Enter your new password", + "confirmNewPassword": "Confirm New Password", + "confirmNewPasswordPlaceholder": "Confirm your new password", + "passwordMinLength": "Must be at least 8 characters long", + "changePasswordButton": "Change Password", + "changing": "Changing...", + "emailAddress": "Email Address", + "emailAddressDesc": "Update your email address. A verification email will be sent to confirm.", + "currentEmail": "Current Email", + "noEmailOnRecord": "No email on record", + "newEmailAddress": "New Email Address", + "newEmailPlaceholder": "Enter your new email address", + "confirmWithPassword": "Confirm with Password", + "passwordPlaceholder": "Enter your current password", + "sendVerificationEmail": "Send Verification Email", + "sending": "Sending...", + "preferences": "Preferences", + "preferencesDesc": "Customize your account preferences and notification settings.", + "language": "Language", + "theme": "Theme", + "timezone": "Timezone", + "light": "Light", + "dark": "Dark", + "system": "System", + "notifications": "Notifications", + "emailNotifications": "Email Notifications", + "emailNotificationsDesc": "Receive email notifications for important updates", + "inAppNotifications": "In-App Notifications", + "inAppNotificationsDesc": "Show notifications within the application", + "reset": "Reset", + "saveChanges": "Save Changes", + "saving": "Saving...", + "passwordChangedSuccess": "Password changed successfully", + "preferencesUpdatedSuccess": "Preferences updated successfully", + "failedChangePassword": "Failed to change password", + "failedUpdatePreferences": "Failed to update preferences", + "failedLoadPreferences": "Failed to load preferences.", + "verificationEmailSent": "Verification email sent! Please check your new email to confirm.", + "failedRequestEmailChange": "Failed to request email change", + "enterCurrentPassword": "Please enter your current password", + "enterNewPassword": "Please enter a new password", + "newPasswordMinLength": "New password must be at least 8 characters", + "passwordsDoNotMatch": "Passwords do not match", + "enterNewEmail": "Please enter a new email address", + "enterValidEmail": "Please enter a valid email address", + "enterPasswordConfirm": "Please enter your password to confirm" + }, + "preferences": { + "title": "Preferences", + "subtitle": "Manage your personal preferences and notification settings.", + "notificationChannels": "Notification Channels", + "notificationChannelsDesc": "Choose how you want to receive notifications.", + "emailNotificationsLabel": "Email Notifications", + "emailNotificationsDesc": "Receive notifications via email", + "inAppNotificationsLabel": "In-App Notifications", + "inAppNotificationsDesc": "Show notifications within the application", + "browserPush": "Browser Push Notifications", + "pushUnsupported": "Your browser does not support push notifications", + "pushBlocked": "Blocked by browser. Enable in site settings.", + "pushSubscribed": "Subscribed — you will receive browser notifications", + "pushNotSubscribed": "Receive notifications even when the tab is closed", + "pushEnable": "Enable", + "pushDisable": "Disable", + "doNotDisturb": "Do Not Disturb", + "doNotDisturbDesc": "Set quiet hours when you don't want to be disturbed.", + "enableDnd": "Enable Do Not Disturb", + "dndDesc": "Mute notifications during specific hours", + "startTime": "Start Time", + "endTime": "End Time", + "notificationCategories": "Notification Categories", + "notificationCategoriesDesc": "Choose which types of notifications you want to receive.", + "securityAlerts": "Security Alerts", + "securityAlertsDesc": "Important security updates and alerts", + "productUpdates": "Product Updates", + "productUpdatesDesc": "New features and product announcements", + "marketingPromotions": "Marketing & Promotions", + "marketingDesc": "Tips, offers, and promotional content", + "developmentActivity": "Development Activity", + "developmentActivityDesc": "Control notifications for code review and collaboration activity.", + "issuesActivity": "Issues", + "issuesActivityDesc": "Opened, closed, assigned, or commented on", + "pullRequestsActivity": "Pull Requests", + "prActivityDesc": "Review requested, approved, merged, or commented on", + "mentionsActivity": "@Mentions", + "mentionsActivityDesc": "When someone @mentions you in a message, issue, or PR", + "roomMessagesActivity": "Room Messages", + "roomMessagesDesc": "New messages in channels you follow" + }, + "security": { + "title": "Security", + "subtitle": "Manage your security settings and authentication methods.", + "securitySettings": "Security Settings", + "securityDesc": "Configure two-factor authentication, password policies, and session management.", + "twoFactorAuth": "Two-Factor Authentication", + "twoFactorDesc": "Add an extra layer of security to your account requiring more than just a password to log in.", + "enable": "Enable", + "disable": "Disable", + "passwordPolicy": "Password Policy", + "passwordPolicyDesc": "Set requirements for password strength", + "standard": "Standard", + "sessionManagement": "Session Management", + "sessionManagementDesc": "View and manage active sessions", + "active": "active", + "manage": "Manage" + }, + "profile": { + "title": "Profile", + "subtitle": "Manage your personal information and profile settings.", + "profileInfo": "Profile Information", + "profileInfoDesc": "View your basic account information.", + "username": "Username", + "displayName": "Display Name", + "notSet": "Not set", + "email": "Email", + "memberSince": "Member Since", + "publicProfile": "Public Profile", + "publicProfileDesc": "Update your public profile information.", + "publicAvatar": "Public Avatar", + "uploadAvatar": "Upload new avatar", + "avatarFormat": "JPG, GIF or PNG. Max size 2MB.", + "bio": "Bio", + "bioPlaceholder": "Tell us about yourself", + "bioDesc": "Your bio or description", + "organization": "Organization", + "orgPlaceholder": "Your company or organization", + "orgDesc": "The organization you belong to", + "reset": "Reset", + "saveChanges": "Save Changes", + "saving": "Saving...", + "avatarUploaded": "Avatar uploaded successfully", + "failedUploadAvatar": "Failed to upload avatar", + "fileSizeLimit": "File size must be less than 2MB", + "profileUpdated": "Profile updated successfully", + "failedUpdateProfile": "Failed to update profile" + }, + "tokens": { + "title": "Tokens", + "subtitle": "Manage your personal access tokens for API access.", + "createToken": "Create Token", + "personalAccessTokens": "Personal Access Tokens", + "noTokensDesc": "No tokens found. Create a new token to get started.", + "tokensCount": "You have {count} access token configured.", + "tokensCountPlural": "You have {count} access tokens configured.", + "loadingTokens": "Loading access tokens...", + "noAccessTokens": "No Access Tokens", + "noAccessTokensDesc": "Create a personal access token to authenticate API requests and access Git repositories over HTTPS.", + "createFirstToken": "Create Your First Token", + "untitled": "Untitled", + "revoked": "Revoked", + "scopes": "Scopes:", + "created": "Created {date}", + "expires": "Expires {date}", + "neverExpires": "Never expires", + "revoke": "Revoke", + "createAccessToken": "Create Access Token", + "createTokenDesc": "Create a new personal access token for API authentication.", + "tokenName": "Token Name", + "tokenNamePlaceholder": "e.g., CI/CD Pipeline, Development Environment", + "tokenNameDesc": "Choose a descriptive name for this token", + "scopesLabel": "Scopes", + "scopesDesc": "Select the permissions this token will have", + "expirationDate": "Expiration Date (Optional)", + "expirationDesc": "Leave empty for no expiration", + "cancel": "Cancel", + "creating": "Creating...", + "tokenCreated": "Token Created Successfully", + "tokenCreatedDesc": "Make sure to copy your access token now. You won't be able to see it again!", + "yourAccessToken": "Your Access Token", + "tokenImportant": "Important: This token will only be shown once. Store it securely.", + "iHaveSavedToken": "I've Saved My Token", + "tokenCopied": "Token copied to clipboard", + "deleteTokenTitle": "Delete Access Token", + "deleteTokenDesc": "Are you sure you want to delete this access token? This action cannot be undone and any applications using this token will lose access immediately.", + "deleting": "Deleting...", + "delete": "Delete", + "revokeTokenTitle": "Revoke Access Token", + "revokeTokenDesc": "Are you sure you want to revoke this access token? The token will be disabled immediately and can no longer be used for authentication.", + "tokenCreatedSuccess": "Access token created successfully", + "failedCreateToken": "Failed to create access token", + "tokenDeleted": "Access token deleted successfully", + "failedDeleteToken": "Failed to delete access token", + "nameRequired": "Please enter a name for the access token", + "scopeRequired": "Please select at least one scope" + }, + "activity": { + "title": "Activity", + "subtitle": "View your recent activity and notifications.", + "markAllRead": "Mark All as Read", + "recentNotifications": "Recent Notifications", + "unread": "{count} unread", + "noNotifications": "No notifications yet. You will see your activity here.", + "newLabel": "New", + "noContent": "No content", + "unknownDate": "Unknown date", + "allMarkedRead": "All notifications marked as read", + "failedMarkAllRead": "Failed to mark all notifications as read", + "markedRead": "Notification marked as read", + "failedMarkRead": "Failed to mark notification as read" + } + }, + "init": { + "project": { + "title": "Create New Project", + "subtitle": "Create a new project to organize your repositories", + "projectName": "Project Name", + "namePlaceholder": "my-awesome-project", + "description": "Description", + "descPlaceholder": "A brief description of your project...", + "workspace": "Workspace", + "noWorkspace": "No workspace (independent project)", + "workspaceHint": "Optionally associate this project with a workspace.", + "publicProject": "Public Project", + "publicProjectHint": "Make this project visible to everyone", + "creating": "Creating...", + "createProject": "Create Project", + "cancel": "Cancel", + "nameRequired": "Project name is required", + "nameAvailable": "Project name is available", + "nameExists": "Project name already exists", + "failedCheckAvailability": "Failed to check availability", + "failedCreate": "Failed to create project", + "createdSuccess": "Project created successfully!" + }, + "repository": { + "title": "Create New Repository", + "subtitle": "Create a new Git repository in your project", + "project": "Project", + "noProjects": "You have no projects yet.", + "createProject": "Create a Project", + "selectProject": "Select a project", + "loadingProjects": "Loading projects...", + "repoName": "Repository Name", + "namePlaceholder": "my-awesome-repo", + "description": "Description", + "descPlaceholder": "A brief description of your repository...", + "defaultBranch": "Default Branch", + "defaultBranchPlaceholder": "main", + "initRepo": "Initialize Repository", + "initRepoOn": "Create a bare git repository now. Set the default branch below.", + "initRepoOff": "Skip initialization. The default branch will be set automatically when you push.", + "privateRepo": "Private Repository", + "privateAuto": "This repository must be private because the project is private", + "privateManual": "Make this repository private and restrict access", + "creating": "Creating...", + "createRepo": "Create Repository", + "cancel": "Cancel", + "selectProjectFirst": "Please select a project", + "nameRequired": "Repository name is required", + "nameAvailable": "Repository name is available", + "nameExists": "Repository name already exists", + "failedCheckAvailability": "Failed to check availability", + "failedCreate": "Failed to create repository", + "createdSuccess": "Repository created successfully", + "failedLoadProjects": "Failed to load projects", + "failedLoadDetails": "Repository created but failed to load details" + } + }, + "pricing": { + "title": "Simple, transparent pricing.", + "subtitle": "Start free. Scale as your agent fleet grows.", + "free": "Free", + "freePrice": "$0", + "freePeriod": "forever", + "freeDesc": "Command as Service for individuals — versioned commands, agent memory, and skill registry included.", + "freeCta": "Start Free", + "freeFeatures": [ + "3 active agents", + "5 GB agent memory", + "Community skill registry", + "Public rooms", + "7-day history" + ], + "pro": "Pro", + "proPrice": "$29", + "proPeriod": "per month", + "proDesc": "Command as Service for teams — unlimited agents, full command stream audit, and priority compute.", + "proCta": "Get Pro", + "proFeatures": [ + "Unlimited agents", + "50 GB agent memory", + "Private skill registry", + "Collaborative rooms", + "90-day history", + "Priority compute", + "Email support" + ], + "enterprise": "Enterprise", + "enterprisePrice": "Custom", + "enterpriseDesc": "Command as Service at scale — custom deployment, granular command-stream governance, and dedicated SLA for your agent fleet.", + "enterpriseCta": "Contact Sales", + "enterpriseFeatures": [ + "Everything in Pro", + "Unlimited memory", + "SSO / SAML", + "Custom model routing", + "Dedicated compute", + "SLA guarantee", + "Dedicated support" + ], + "faqHeading": "Frequently Asked", + "faqSubtitle": "Billing questions answered.", + "faq1Q": "Can I switch plans at any time?", + "faq1A": "Yes. Upgrade or downgrade at any time. Changes take effect at the next billing cycle.", + "faq2Q": "What counts as agent memory?", + "faq2A": "Agent memory is the total persistent context stored across all your agents, including conversation history and long-term memory.", + "faq3Q": "Is there a free trial for Pro?", + "faq3A": "Yes — the Free tier lets you explore all Pro features for 14 days when you upgrade." + }, + "repository": { + "list": { + "repositories": "Repositories", + "searchPlaceholder": "Search repositories…", + "filter": "Filter", + "new": "New", + "filters": "Filters", + "clearAll": "Clear all", + "visibility": "Visibility", + "all": "All", + "public": "Public", + "private": "Private", + "sortBy": "Sort by", + "lastUpdated": "Last updated", + "name": "Name", + "linkedIssues": "Linked issues", + "stars": "Stars", + "repository": "repository", + "repositoriesPlural": "repositories", + "errorLoading": "Error:", + "errorLoadFailed": "Failed to load repositories", + "noRepositories": "No repositories found", + "clearFilters": "Clear filters", + "watches": "Watches", + "branches": "Branches", + "defaultBranch": "Default branch", + "lastUpdatedColumn": "Last updated", + "never": "Never", + "showing": "Showing {start}–{end} of {total}", + "previous": "Previous", + "next": "Next", + "page": "Page {page}" + }, + "overview": { + "repositoryStats": "Repository Stats", + "defaultBranch": "Default branch", + "commits": "Commits", + "branches": "Branches", + "tags": "Tags", + "stars": "Stars", + "watchers": "Watchers", + "readme": "README", + "starred": "Starred", + "unstarred": "Unstarred", + "watching": "Watching repository", + "stoppedWatching": "Stopped watching", + "failedToStar": "Failed to star", + "failedToUnstar": "Failed to unstar", + "failedToWatch": "Failed to watch", + "failedToUnwatch": "Failed to unwatch" + }, + "subpages": { + "commits": { + "title": "Commits", + "description": "Browse the commit history of this repository.", + "comingSoon": "Coming soon", + "notAvailable": "Commit history is not yet available." + }, + "branches": { + "title": "Branches", + "description": "Manage and browse repository branches.", + "comingSoon": "Coming soon", + "notAvailable": "Branch list and management is not yet available." + }, + "tags": { + "title": "Tags", + "description": "Browse repository tags and releases.", + "comingSoon": "Coming soon", + "notAvailable": "Tag and release management is not yet available." + }, + "files": { + "title": "Files", + "description": "Browse and manage repository files.", + "comingSoon": "Coming soon", + "notAvailable": "File browser is not yet available." + }, + "contributors": { + "title": "Contributors", + "description": "View contributor statistics and activity.", + "comingSoon": "Coming soon", + "notAvailable": "Contributor statistics are not yet available." + }, + "pullRequests": { + "title": "Pull Requests", + "description": "Create and manage pull requests for {repo}.", + "comingSoon": "Coming soon", + "notAvailable": "Pull request management is not yet available." + } + } + }, + "workspace": { + "projects": { + "title": "Projects", + "newProject": "New Project", + "noProjects": "No projects in this workspace yet.", + "createFirstProject": "Create your first project", + "noDescription": "No description", + "private": "Private" + }, + "members": { + "title": "Members", + "inviteMember": "Invite Member", + "inviteTo": "Invite to {name}", + "inviteDescription": "They'll receive an email with a link to join this workspace. Invitations expire in 7 days.", + "emailAddress": "Email address", + "emailPlaceholder": "colleague@example.com", + "role": "Role", + "memberRoleDesc": "Member — can view and contribute to projects", + "adminRoleDesc": "Admin — can manage members and settings", + "adminInfo": "Admins can manage workspace settings, members, and billing.", + "memberInfo": "Members can create and manage projects assigned to this workspace.", + "cancel": "Cancel", + "sendInvitation": "Send Invitation", + "sending": "Sending...", + "pendingInvitations": "Pending Invitations", + "expires": "expires {date}", + "by": "by @{username}", + "searchMembers": "Search members...", + "allRoles": "All roles", + "owner": "Owner", + "admin": "Admin", + "member": "Member", + "memberColumn": "Member", + "roleColumn": "Role", + "invitedBy": "Invited by", + "joined": "Joined", + "noMatch": "No members match your filters", + "noMembers": "No members yet", + "remove": "Remove", + "page": "Page {page} of {totalPages}", + "totalMembers": "{count} total members", + "invitationSent": "Invitation sent to {email}", + "failedSendInvitation": "Failed to send invitation", + "memberRemoved": "Member removed", + "failedRemoveMember": "Failed to remove member", + "invitationCancelled": "Invitation cancelled", + "failedCancelInvitation": "Failed to cancel invitation", + "roleUpdated": "Role updated", + "failedUpdateRole": "Failed to update role", + "pending": "Pending" + }, + "settings": { + "title": "Workspace Settings", + "general": "General", + "avatarUrl": "Avatar URL", + "avatarUrlPlaceholder": "https://example.com/avatar.png", + "avatarHint": "Enter a URL to an image for the workspace avatar.", + "workspaceName": "Workspace Name", + "namePlaceholder": "My Workspace", + "description": "Description", + "descPlaceholder": "Describe this workspace...", + "billingEmail": "Billing Email", + "billingEmailPlaceholder": "billing@example.com", + "billingHint": "Invoices will be sent to this email.", + "saveChanges": "Save Changes", + "saving": "Saving...", + "plan": "Plan", + "currentPlan": "Current Plan", + "manageBilling": "Manage Billing", + "dangerZone": "Danger Zone", + "deleteWorkspace": "Delete Workspace", + "deleteWarning": "Permanently delete this workspace and all its data. This action cannot be undone.", + "deletingWorkspace": "Deleting...", + "deleteConfirm": "Are you sure you want to delete this workspace? This action cannot be undone.", + "updated": "Workspace updated", + "failedUpdate": "Failed to update workspace", + "deleted": "Workspace deleted", + "failedDelete": "Failed to delete workspace" + } + }, + "projectSettings": { + "general": { + "title": "General", + "description": "Description", + "projectAvatar": "Project Avatar", + "uploadAvatar": "Upload avatar", + "avatarFormat": "PNG, JPG, GIF or WebP. Max 2MB.", + "displayName": "Display Name", + "publicVisibility": "Public Visibility", + "publicVisibilityDesc": "Allow anyone to view this project.", + "saveChanges": "Save Changes", + "confirmTitle": "Confirm project changes", + "confirmDescription": "You are about to update the following settings:", + "displayNameField": "Display name", + "descriptionField": "Description", + "visibilityField": "Visibility: {visibility}", + "publicWarning": "Making this project public will allow anyone to view its content.", + "confirmSave": "Confirm & Save", + "projectAvatarUpdated": "Project avatar updated", + "failedUploadAvatar": "Failed to upload avatar", + "fileSizeLimit": "File size must be less than 2MB", + "projectSettingsUpdated": "Project settings updated", + "failedUpdateProject": "Failed to update project settings" + }, + "members": { + "title": "Members", + "invite": "Invite", + "searchMembers": "Search members…", + "member": "member", + "members": "members", + "noMatchSearch": "No members match your search", + "noMembers": "No members found", + "clearSearch": "Clear search", + "user": "User", + "role": "Role", + "joined": "Joined", + "actions": "Actions", + "inviteMemberTitle": "Invite Member", + "email": "Email", + "emailPlaceholder": "teammate@example.com", + "cancel": "Cancel", + "sendInvite": "Send Invite", + "sending": "Sending…", + "removeMemberTitle": "Remove Member", + "removeConfirm": "Are you sure you want to remove {username} from this project?", + "removing": "Removing…", + "remove": "Remove", + "invitationSent": "Invitation sent", + "failedSendInvitation": "Failed to send invitation", + "memberRemoved": "Member removed", + "failedRemoveMember": "Failed to remove member", + "roleUpdated": "Role updated", + "failedUpdateRole": "Failed to update role", + "emailRequired": "Email is required", + "errorLoading": "Error:", + "failedLoadMembers": "Failed to load members" + }, + "labels": { + "title": "Labels", + "description": "Description", + "editLabel": "Edit Label", + "createLabel": "Create Label", + "nameRequired": "Name *", + "namePlaceholder": "Label name", + "color": "Color", + "descPlaceholder": "Describe this label", + "cancel": "Cancel", + "updateLabel": "Update Label", + "createLabelButton": "Create Label", + "addLabel": "Add Label", + "failedToLoad": "Failed to load labels", + "noLabels": "No labels found. Create your first label.", + "deleteLabelTitle": "Delete label", + "deleteLabelConfirm": "Are you sure you want to delete this label? This action cannot be undone.", + "delete": "Delete", + "labelCreated": "Label created", + "labelUpdated": "Label updated", + "labelDeleted": "Label deleted", + "failedCreateLabel": "Failed to create label", + "failedUpdateLabel": "Failed to update label", + "failedDeleteLabel": "Failed to delete label", + "nameRequiredError": "Label name is required" + }, + "boards": { + "title": "Boards", + "newBoard": "New Board", + "noBoards": "No boards yet", + "noBoardsHint": "Create a board to organize your project work.", + "newBoardDialog": "New Board", + "name": "Name", + "namePlaceholder": "e.g. Sprint Planning", + "description": "Description", + "descriptionPlaceholder": "Optional", + "cancel": "Cancel", + "createBoard": "Create Board", + "updated": "Updated {date}", + "failedCreate": "Failed to create board" + }, + "billing": { + "currentBilling": "Current Billing", + "description": "Current cycle quota, usage and account balance.", + "monthlyQuota": "Monthly Quota", + "currentBalance": "Current Balance", + "currentUsage": "Current Usage", + "billingHistory": "Billing History", + "billingHistoryDesc": "Project billing flow records.", + "noRecords": "No billing records yet.", + "time": "Time", + "reason": "Reason", + "amount": "Amount", + "currency": "Currency", + "type": "Type", + "charge": "Charge", + "credit": "Credit", + "showing": "Showing {start} to {end} of {total} records", + "page": "Page {page} of {totalPages}", + "failedToLoad": "Failed to load billing information." + }, + "skills": { + "title": "Skills", + "subtitle": "Agent instructions for this project", + "searchPlaceholder": "Search skills...", + "all": "All", + "manual": "Manual", + "repo": "Repo", + "scanRepos": "Scan Repos", + "addSkill": "Add Skill", + "noSkills": "No skills found", + "noSkillsHint": "Add skills manually or scan repositories to discover SKILL.md files.", + "noMatch": "No skills match your search or filter.", + "deleteSkill": "Delete skill", + "deleteConfirm": "Are you sure you want to delete \"{name}\"? This cannot be undone.", + "cancel": "Cancel", + "delete": "Delete", + "content": "Content", + "moreLines": "+{count} more lines", + "copied": "Copied", + "copyContent": "Copy content", + "scannedFromRepo": "Scanned from repository", + "addedManually": "Added manually", + "failedLoad": "Failed to load skills", + "scanSuccess": "Repositories scanned successfully", + "scanFailed": "Failed to scan repositories", + "deleted": "\"{name}\" deleted", + "failedDelete": "Failed to delete skill" + }, + "webhook": { + "title": "Webhooks", + "description": "Configure webhooks to receive notifications about events in your project.", + "comingSoon": "Coming soon", + "notAvailable": "Webhook configuration is not yet available." + }, + "oauth": { + "title": "OAuth App", + "description": "Create and manage OAuth applications for third-party integrations.", + "comingSoon": "Coming soon", + "notAvailable": "OAuth application management is not yet available." + } + }, + "shared": { + "projects": "Projects", + "loading": "Loading...", + "error": "Error", + "success": "Success", + "cancel": "Cancel", + "confirm": "Confirm", + "delete": "Delete", + "edit": "Edit", + "save": "Save", + "close": "Close", + "back": "Back", + "next": "Next", + "previous": "Previous", + "submit": "Submit", + "search": "Search", + "filter": "Filter", + "clear": "Clear", + "reset": "Reset", + "apply": "Apply", + "yes": "Yes", + "no": "No", + "ok": "OK", + "retry": "Retry", + "refresh": "Refresh", + "noData": "No data", + "noResults": "No results", + "loadingFailed": "Loading failed", + "operationFailed": "Operation failed", + "operationSuccess": "Operation successful" + }, + "about": { + "title": "About GitDataAI", + "subtitle": "We believe every engineering action should be a versioned command — auditable, replayable, and human-approved. We are building the Command as Service platform for the agentic era.", + "quote": "\"Every action is a command. Every command is versioned and auditable.\"", + "mission": "GitDataAI was founded to bring Command as Service to the agentic era — every agent decision versioned, every command stream auditable, every human-in-the-loop action approved.", + "ourValues": "Our Values", + "values": { + "transparency": { + "title": "Transparency", + "desc": "Every agent decision is logged, versioned, and auditable. No black boxes." + }, + "collaboration": { + "title": "Collaboration", + "desc": "Humans and agents are peers. Neither replaces the other — together they achieve more." + }, + "reliability": { + "title": "Reliability", + "desc": "Production-grade infrastructure. Your agents run when you need them to." + }, + "extensibility": { + "title": "Extensibility", + "desc": "Open registry, open API. The network grows through community contributions." + } + }, + "theTeam": "The Team", + "hiring": "We are hiring. Come build with us.", + "join": "Join GitDataAI", + "github": "GitHub" + }, + "invitations": { + "title": "My Invitations", + "pendingCount": "{count} pending invitation", + "pendingCountPlural": "{count} pending invitations", + "noPending": "No pending invitations", + "noPendingHint": "Project and workspace invitations will appear here.", + "projectInvitation": "Project Invitation", + "workspaceInvitation": "Workspace Invitation", + "invitedToJoin": "You have been invited to join {name}", + "invitedToWorkspace": "You have been invited to join workspace {name}", + "by": "by {username}", + "accept": "Accept", + "decline": "Decline", + "acceptedProject": "You have joined project: {name}", + "declinedInvitation": "Invitation to {name} declined", + "acceptedWorkspace": "You have joined the workspace", + "failedAccept": "Failed to accept invitation", + "failedDecline": "Failed to decline invitation" + }, + "network": { + "title": "The GitDataAI Network", + "subtitle": "A growing ecosystem of agents, workspaces, and skills collaborating through a unified command stream. Every agent action is a command. Every command is replayable.", + "activeAgents": "Active Agents", + "workspaces": "Workspaces", + "skillRuns": "Skill Runs", + "uptimeSla": "Uptime SLA", + "publicRooms": "Public Rooms", + "live": "LIVE", + "active": "Active", + "agents": "{count} agents", + "participants": "{count}", + "privacyByDefault": "Privacy by Default", + "privacyDesc": "All workspaces are private by default. You control who sees your agents, skills, and conversation history. Public rooms require explicit opt-in.", + "network": "Network", + "roomsLive": "{count} rooms live now", + "ended": "ENDED", + "startYourOwnRoom": "Start Your Own Room" + }, + "skills": { + "title": "The Skill Registry", + "subtitle": "Reusable, versioned agent behaviors packaged as skills — invoked by command, deployed across your entire agent fleet.", + "searchPlaceholder": "Search skills...", + "categories": [ + "All", + "Frontend", + "Backend", + "DevOps", + "Security", + "Data", + "Testing" + ], + "publishCTA": "Publish your own skill and join the registry.", + "publishButton": "Publish a Skill", + "runs": "{count} runs" + }, + "solutions": { + "title": "Command as Service", + "subtitle": "In GitDataAI, every action is a first-class command. Commands are versioned, auditable, and composable — your development workflow is your API.", + "learnMore": "Learn more", + "coreConcept": "Core Concept" + }, + "notificationDrawer": { + "title": "Notifications", + "live": "Live", + "markAllRead": "Mark all read", + "noNotifications": "No notifications yet", + "noNotificationsHint": "You will see updates here when something happens.", + "viewAll": "View all notifications", + "unread": "{count} unread", + "notifications": "Notifications" + } +} diff --git a/public/locales/zh/translation.json b/public/locales/zh/translation.json new file mode 100644 index 0000000..96c5df9 --- /dev/null +++ b/public/locales/zh/translation.json @@ -0,0 +1,1408 @@ +{ + "landing": { + "hero": { + "badgeText": "命令即服务 · 人类 + AI 协作工程", + "heading": "人类与 AI 共同协作开发", + "subtitle": "每个操作都是一条命令,每条命令都是可版本化、可审计、可组合的。Git 仓库、协作房间和 AI 代理——都由你掌控的命令流驱动。", + "startBuilding": "开始构建", + "viewDocumentation": "查看文档", + "terminalTitle": "gitdata — 每个操作都是一条命令" + }, + "features": { + "sectionTitle": "构建 · 审查 · 自动化 · 一切皆命令", + "sectionSubtitle": "每项能力都作为命令暴露。AI 监听,人类审批,所有操作都有记录可追溯。", + "commandAsService": { + "title": "命令即服务", + "description": "每个操作——创建仓库、审查 PR、部署代理——都是一条可版本化的命令。审计、回放、组合它们。你的 CLI 就是你的 API。" + }, + "collaborativeRooms": { + "title": "协作房间", + "description": "以命令为核心的房间,人类和 AI 代理通过共享命令流协同工作。在同一线程中发起命令、审查结果、达成共识。" + }, + "aiAgents": { + "title": "AI 代理", + "description": "部署监听房间命令、执行任务并汇报结果的代理。代理运行技能、查询仓库、调用你的服务。" + }, + "gitRepositories": { + "title": "Git 仓库", + "description": "完整的 Git 操作——分支、提交、合并和差异。HTTP 和 SSH 访问,内置分支保护和访问控制。" + }, + "issuesPullRequests": { + "title": "议题与合并请求", + "description": "追踪议题、审查代码、管理 PR。代理可以监听 PR 事件并自动运行审查命令。" + }, + "skillRegistry": { + "title": "技能注册表", + "description": "将代理行为打包为可复用的技能。发布到注册表,拉取到任意房间,通过命令调用。你的工作流成为共享服务。" + }, + "commandAuditTrail": { + "title": "命令审计轨迹", + "description": "每条命令都记录其意图、结果和调用者。将每个 AI 决策追溯到发出它的人类。" + }, + "agentMemory": { + "title": "代理记忆", + "description": "代理拥有持久化的 Git 原生记忆。像源代码一样分支、提交和回滚上下文。再也没有无状态的代理了。" + } + }, + "highlight": { + "heading": "你的 CLI 也是你的 API。", + "subtitle": "GitDataAI 的每个操作都是一条有名称、参数和结果的命令。代理订阅命令流,房间执行命令。你的整个开发工作流成为一条可版本化、可回放、可对比的流——无需单独的事件总线。", + "commandsAllTheWayDown": { + "title": "彻头彻尾的命令", + "description": "每个操作——创建仓库、部署代理、运行技能——都是一条命令。你的工作流是一条可组合、可查询的流。" + }, + "agentsListenToCommands": { + "title": "代理监听命令", + "description": "将代理部署到房间,它就会订阅命令事件。代理不靠猜测——它们执行你的命令。" + }, + "gitNativeAudit": { + "title": "Git 原生审计", + "description": "命令历史存储在 Git 中。分支你的命令日志,对比工作流,在任意地方回放。完整可追溯,无需单独的日志存储。" + }, + "approve": "批准", + "viewDiff": "查看差异" + }, + "nav": { + "platform": "平台", + "skills": "技能", + "network": "网络", + "pricing": "定价", + "signIn": "登录", + "joinBeta": "加入公测", + "commandAsServiceNav": "命令即服务", + "collaborativeRoomsNav": "协作房间", + "aiAgentsNav": "AI 代理", + "gitRepositoriesNav": "Git 仓库", + "exploreSkillsNav": "探索技能", + "publishSkillNav": "发布技能", + "skillDocumentationNav": "技能文档", + "exploreNetworkNav": "探索网络", + "publicRoomsNav": "公共房间", + "developerApiNav": "开发者 API", + "plansPricingNav": "计划与定价", + "enterpriseNav": "企业版", + "billingFaqNav": "计费 FAQ" + }, + "footer": { + "readyHeading": "准备好迎接 AI 代理时代了吗?", + "getStartedFree": "免费开始", + "contactSales": "联系销售", + "platform": "平台", + "skills": "技能", + "developers": "开发者", + "company": "公司", + "gitRepositories": "Git 仓库", + "issuesPullRequests": "议题与 PR", + "collaborativeRooms": "协作房间", + "aiAgents": "AI 代理", + "commandStream": "命令流", + "skillRegistry": "技能注册表", + "publishSkill": "发布技能", + "skillDocs": "技能文档", + "community": "社区", + "documentation": "文档", + "cliReference": "CLI 参考", + "apiReference": "API 参考", + "status": "状态", + "about": "关于我们", + "careers": "招聘", + "contact": "联系我们", + "privacy": "隐私政策", + "brandTagline": "人类与 AI 代理通过命令协同开发的平台。每个操作都有版本记录。每个代理都有责任归属。为交付而生的团队而构建。" + } + }, + "auth": { + "login": { + "heading": "登录", + "subtitleWelcome": "欢迎回到 GitDataAI", + "subtitleContinue": "继续前往 {path}", + "usernameLabel": "用户名", + "usernamePlaceholder": "输入你的用户名", + "passwordLabel": "密码", + "passwordForgot": "忘记密码?", + "verificationLabel": "验证码", + "verificationPlaceholder": "输入验证码", + "submitButton": "登录", + "noAccount": "没有账号?", + "createOne": "注册一个", + "errorFillRequired": "请填写所有必填项。", + "errorInvalidCredentials": "登录凭证无效,请重试。" + }, + "register": { + "heading": "创建账号", + "subtitle": "加入下一代人机协作", + "emailLabel": "邮箱", + "emailPlaceholder": "name@company.com", + "usernameLabel": "用户名", + "usernamePlaceholder": "architect_01", + "passwordLabel": "密码", + "passwordPlaceholder": "••••••••", + "confirmLabel": "确认密码", + "confirmPlaceholder": "••••••••", + "verificationLabel": "验证码", + "verificationPlaceholder": "验证码", + "submitButton": "创建账号", + "alreadyHaveAccount": "已有账号?", + "signIn": "登录", + "encrypted": "已加密", + "errorEmailRequired": "邮箱不能为空", + "errorInvalidEmail": "邮箱格式无效", + "errorUsernameRequired": "用户名不能为空", + "errorUsernameLength": "用户名至少需要 3 个字符", + "errorPasswordRequired": "密码不能为空", + "errorPasswordLength": "密码至少需要 8 个字符", + "errorPasswordComplexity": "密码必须包含大写字母、小写字母和数字", + "errorPasswordMismatch": "两次密码不一致", + "errorCaptchaRequired": "验证码不能为空", + "errorRegistrationFailed": "注册失败", + "successAccountCreated": "账号创建成功!" + }, + "passwordReset": { + "heading": "重置密码", + "subtitle": "输入你的邮箱,我们会发送一个链接帮你重新登录。", + "emailLabel": "邮箱地址", + "emailPlaceholder": "name@example.com", + "submitButton": "发送重置链接", + "backToSignIn": "返回登录", + "successHeading": "检查你的邮箱", + "successMessage": "我们已发送安全链接至 {email}。点击链接重置密码。", + "returnToSignIn": "返回登录", + "didNotReceive": "没收到邮件?请检查垃圾箱或", + "tryAgain": "重试", + "secureLink": "安全链接", + "expiry24h": "24小时有效", + "errorEmailRequired": "邮箱地址不能为空。", + "errorInvalidEmail": "请输入有效的邮箱地址。", + "errorSendFailed": "发送重置邮件失败。", + "successLinkSent": "重置链接已发送!" + }, + "confirmPasswordReset": { + "heading": "设置新密码", + "subtitle": "为你的账号创建一个强密码。", + "newPasswordLabel": "新密码", + "newPasswordPlaceholder": "至少 8 个字符", + "confirmPasswordLabel": "确认密码", + "confirmPasswordPlaceholder": "再次输入密码", + "submitButton": "重置密码", + "backToSignIn": "返回登录", + "successHeading": "密码重置完成", + "successMessage": "你的密码已更新。现在可以使用新密码登录了。", + "signIn": "登录", + "passwordUpdated": "密码已更新", + "secureConnection": "安全连接", + "errorMissingToken": "缺少重置令牌。请使用邮件中的链接。", + "errorPasswordRequired": "新密码不能为空。", + "errorPasswordLength": "密码至少需要 8 个字符。", + "errorPasswordUppercase": "密码必须包含至少一个大写字母。", + "errorPasswordLowercase": "密码必须包含至少一个小写字母。", + "errorPasswordDigit": "密码必须包含至少一个数字。", + "errorPasswordMismatch": "两次密码不一致。", + "errorResetFailed": "密码重置失败。链接可能已过期。", + "successResetComplete": "密码重置成功!" + }, + "verifyEmail": { + "heading": "邮箱验证", + "loadingText": "正在验证安全令牌...", + "successHeading": "身份已确认", + "successMessage": "你的邮箱已成功验证。你现在可以完全访问 GitDataAI 平台。", + "goToDashboard": "前往控制台", + "errorHeading": "验证失败", + "backToSettings": "返回设置", + "needHelp": "需要帮助?", + "contactSupport": "联系技术支持", + "encryptedLink": "加密链接", + "soc2Compliant": "SOC2 合规", + "errorTokenMissing": "验证令牌缺失或格式错误。", + "errorLinkExpired": "验证链接已过期或无效。", + "successVerified": "身份验证成功。" + }, + "acceptWorkspaceInvite": { + "heading": "工作空间邀请", + "loadingHeading": "正在验证邀请", + "loadingText": "正在检查权限和工作空间状态...", + "successHeading": "欢迎加入!", + "successMessage": "邀请已接受。你已加入团队。正在跳转到控制台。", + "proceedManually": "手动继续", + "errorHeading": "无效邀请", + "returnHome": "返回首页", + "needNewLink": "需要新链接?", + "contactAdmin": "联系工作空间管理员", + "secureJoin": "安全加入", + "dataOwnership": "数据归属", + "errorMissingToken": "邀请链接缺少有效的安全令牌。", + "errorExpired": "邀请链接已过期或已被使用。", + "successJoined": "成功加入工作空间" + } + }, + "project": { + "overview": { + "settings": "设置", + "members": "成员", + "likes": "点赞", + "watches": "关注", + "public": "公开", + "private": "私有", + "activity": "动态", + "viewAll": "查看全部", + "recentEvents": "该项目最近的事件", + "noActivity": "暂无动态。", + "projectInfo": "项目信息", + "projectName": "项目名称", + "yourRole": "你的角色", + "created": "创建于", + "visibility": "可见性", + "guest": "访客", + "quickActions": "快捷操作", + "newIssue": "新建议题", + "viewActivity": "查看动态", + "membersAction": "成员", + "createRepository": "创建仓库", + "projectNotFound": "未找到该项目。", + "noDescription": "暂无描述", + "expand": "展开", + "collapse": "收起" + }, + "eventTypes": { + "commit": "提交", + "branch": "分支", + "tag": "标签", + "issue": "议题", + "comment": "评论", + "pullRequest": "合并请求", + "merged": "已合并", + "message": "消息", + "room": "房间", + "starred": "已收藏", + "unstarred": "已取消收藏", + "watched": "已关注", + "unwatched": "已取消关注", + "member": "成员", + "label": "标签", + "repo": "仓库" + }, + "dateLabels": { + "today": "今天", + "yesterday": "昨天" + }, + "issues": { + "breadcrumb": { + "projects": "项目", + "issues": "议题" + }, + "searchPlaceholder": "搜索议题…", + "boardView": "看板视图", + "listView": "列表视图", + "board": "看板", + "list": "列表", + "new": "新建", + "open": "开启", + "closed": "已关闭", + "of": "/", + "shown": "条显示", + "errorLoading": "错误:", + "errorLoadFailed": "加载议题失败", + "noIssues": "未找到议题", + "clearSearch": "清除搜索", + "title": "标题", + "author": "作者", + "date": "日期", + "newIssue": "新建议题", + "noIssuesInColumn": "暂无议题" + }, + "issueDetail": { + "backToIssues": "返回议题列表", + "closeIssue": "关闭议题", + "reopenIssue": "重新开启", + "edit": "编辑", + "openStatus": "开启", + "closedStatus": "已关闭", + "openedBy": "由 {user} 开启", + "aiTriage": "AI 分类", + "highPriority": "高优先级", + "mediumPriority": "中优先级", + "lowPriority": "低优先级", + "accept": "接受", + "applying": "应用中…", + "ignore": "忽略", + "noActivity": "暂无活动。", + "openedThisIssue": "创建了这个议题", + "commented": "评论于", + "editComment": "编辑评论", + "deleteComment": "删除评论", + "cancel": "取消", + "save": "保存", + "saving": "保存中…", + "leaveComment": "添加评论…", + "comment": "评论", + "posting": "发布中…", + "commentCannotEmpty": "评论不能为空", + "isTyping": "{user} 正在输入…", + "areTyping": "{user1} 和 {user2} 正在输入…", + "peopleTyping": "{count} 人正在输入…", + "linkedRepositories": "关联仓库", + "details": "详情", + "status": "状态", + "author": "作者", + "created": "创建于", + "updated": "更新于", + "closed": "关闭于", + "labelsApplied": "标签已应用", + "failedApplyLabels": "应用标签失败", + "commentAdded": "评论已添加", + "failedAddComment": "添加评论失败", + "commentDeleted": "评论已删除", + "failedDeleteComment": "删除评论失败", + "commentUpdated": "评论已更新", + "failedUpdateComment": "更新评论失败", + "issueClosed": "议题已关闭", + "issueReopened": "议题已重新开启", + "failedUpdateIssue": "更新议题失败", + "errorLoadingIssue": "加载议题失败" + }, + "room": { + "selectChannel": "选择频道", + "chooseChannelHint": "从侧边栏选择一个频道开始聊天。", + "channels": "频道", + "noChannelsYet": "暂无频道", + "createChannel": "创建频道", + "addCategory": "+ 添加分类", + "categoryNamePlaceholder": "分类名称", + "addChannel": "添加频道", + "channelSettings": "频道设置", + "expand": "展开", + "collapse": "收起", + "mute": "静音", + "unmute": "取消静音", + "archive": "归档", + "unarchive": "取消归档", + "members": "成员", + "online": "在线", + "ai": "AI" + }, + "roomDialog": { + "newRoom": "新建房间", + "createRoomDescription": "创建新的聊天室。选择名称和可见性。", + "roomName": "房间名称", + "roomNamePlaceholder": "例如:general", + "publicLabel": "公开(所有项目成员可见)", + "cancel": "取消", + "create": "创建", + "creating": "创建中...", + "deleteRoom": "删除房间", + "deleteRoomConfirm": "确定要删除「{name}」吗?所有消息将被永久删除,此操作无法撤销。", + "deleting": "删除中..." + }, + "roomChat": { + "connecting": "连接中...", + "disconnected": "已断开", + "mentions": "@ 提及", + "searchMessages": "搜索消息", + "memberList": "成员列表", + "pinnedMessages": "固定消息", + "roomSettings": "房间设置", + "deleteChannel": "删除频道", + "showChannels": "显示频道", + "hideChannels": "隐藏频道", + "back": "返回", + "isThinking": "{name} 正在思考...", + "typingSingular": "{user} 正在输入...", + "typingDual": "{user1} 和 {user2} 正在输入...", + "typingOthers": "{user} 和 {count} 人正在输入...", + "messageUpdated": "消息已更新", + "messageDeleted": "消息已删除", + "failedCreateThread": "创建主题失败", + "navigateToMessage": "跳转到 {room} 中的消息", + "roomUpdated": "房间已更新", + "failedUpdateRoom": "更新房间失败" + }, + "commandPalette": { + "placeholder": "搜索项目、仓库、房间、命令…", + "noResults": "未找到结果。", + "navigation": "导航", + "create": "创建", + "projects": "项目", + "repositories": "仓库", + "rooms": "房间", + "gotoNotifications": "前往通知", + "createProject": "创建项目", + "createRepoIn": "在 {project} 中创建仓库" + }, + "issueNew": { + "backToIssues": "返回议题列表", + "creatingIn": "在 {project} 中创建", + "titleRequired": "标题 *", + "titlePlaceholder": "议题的简要摘要", + "description": "描述", + "markdown": "Markdown", + "bold": "加粗", + "italic": "斜体", + "code": "代码", + "link": "链接", + "list": "列表", + "quote": "引用", + "bodyPlaceholder": "详细描述此议题。支持 Markdown。", + "bodyHint": "支持 Markdown —— 使用 **粗体**、`代码`、列表等", + "linkedRepositories": "关联仓库", + "linkedReposHint": "跟踪与此议题相关的提交和合并请求", + "assignees": "指派人员", + "labels": "标签", + "cancel": "取消", + "createIssue": "创建议题", + "creating": "创建中…", + "discardChanges": "放弃更改?", + "discardChangesDesc": "你有未保存的更改。确定要离开吗?", + "keepEditing": "继续编辑", + "discard": "放弃", + "titleRequiredError": "标题不能为空", + "issueCreated": "议题已创建", + "failedCreateIssue": "创建议题失败", + "selectAssignees": "选择指派人员", + "selectAssigneesDesc": "选择要指派给此议题的团队成员", + "noMembers": "此项目中没有成员", + "done": "完成", + "selectLabels": "选择标签", + "selectLabelsDesc": "选择标签以归类此议题", + "noLabels": "此项目中暂无标签" + }, + "issueEdit": { + "backToIssue": "返回议题 #{number}", + "editingIssue": "编辑议题 #{number}", + "title": "编辑议题", + "titleSection": "标题", + "titleCantChange": "创建后标题不可更改", + "status": "状态", + "changeStatusHint": "从议题详情页面更改状态", + "description": "描述", + "descriptionPlaceholder": "添加描述以提供更多上下文(支持 Markdown)", + "markdownHint": "支持 Markdown 格式", + "linkedRepositories": "关联仓库", + "noRepositories": "此项目中暂无仓库", + "cancel": "取消", + "saveChanges": "保存更改", + "saving": "保存中…", + "discardChanges": "放弃更改?", + "discardChangesDesc": "你有未保存的更改。确定要离开吗?", + "keepEditing": "继续编辑", + "discard": "放弃", + "issueNotFound": "未找到议题。", + "issueUpdated": "议题更新成功", + "failedUpdateIssue": "更新议题失败", + "returnToIssue": "返回议题" + }, + "activity": { + "title": "动态", + "subtitle": "{project} 最近的事件", + "filterEvents": "筛选事件", + "perPage": "{count} 条/页", + "noActivity": "暂无动态。", + "tryDifferentType": "尝试选择其他事件类型。", + "failedLoad": "加载动态失败。", + "page": "第 {page} 页,共 {totalPages} 页", + "events": "{count} 条事件", + "allEvents": "所有事件", + "commits": "提交", + "branchCreated": "分支已创建", + "branchDeleted": "分支已删除", + "tagCreated": "标签已创建", + "tagDeleted": "标签已删除", + "repoCreated": "仓库已创建", + "issueOpened": "议题已开启", + "issueClosed": "议题已关闭", + "issueReopened": "议题已重新开启", + "issueComment": "议题评论", + "prOpened": "PR 已开启", + "prMerged": "PR 已合并", + "prClosed": "PR 已关闭", + "roomMessage": "房间消息", + "roomCreated": "房间已创建", + "projectStarred": "项目已收藏", + "projectUnstarred": "项目已取消收藏", + "memberAdded": "成员已添加", + "memberRemoved": "成员已移除", + "roleChanged": "角色已变更", + "labelCreated": "标签已创建", + "labelUpdated": "标签已更新", + "labelDeleted": "标签已删除" + }, + "resources": { + "title": "资源", + "subtitle": "管理项目资源并发布到市场。", + "comingSoon": "即将推出", + "description": "发布技能、包和其他资源到市场。" + }, + "articles": { + "title": "文章", + "subtitle": "编写和管理项目文档与文章。", + "comingSoon": "即将推出", + "description": "为你的项目编写和发布文章。" + }, + "skillsInit": { + "backToSkills": "返回技能列表", + "title": "新建技能", + "subtitle": "为此项目添加一个技能", + "slug": "标识符", + "slugPlaceholder": "coding/code-review", + "slugHint": "唯一标识符,使用 / 来分组技能", + "displayName": "显示名称", + "namePlaceholder": "代码审查代理", + "description": "描述", + "descPlaceholder": "用 AI 审查合并请求", + "content": "内容(SKILL.md)", + "contentPlaceholder": "# 代码审查\n\n你是一位代码审查专家...", + "contentHint": "描述何时以及如何使用此技能的 Markdown。", + "cancel": "取消", + "createSkill": "创建技能", + "created": "技能「{name}」已创建", + "failedCreate": "创建技能失败" + } + }, + "notification": { + "title": "通知", + "live": "实时", + "unreadTotal": "{unread} 条未读 · 共 {total} 条", + "totalNotifications": "{count} 条通知", + "noGrouping": "不分组", + "groupByProject": "按项目分组", + "groupByType": "按类型分组", + "cancel": "取消", + "markRead": "标记已读", + "archive": "归档", + "markAllRead": "全部标为已读", + "selectMultiple": "批量选择", + "selectModeActive": "✓ 已进入选择模式", + "markAllReadInGroup": "将组内全部标为已读", + "filterAll": "全部", + "filterUnread": "未读", + "filterArchived": "已归档", + "notificationSettings": "通知设置", + "noUnread": "没有未读通知", + "noArchived": "没有已归档通知", + "noNotifications": "暂无通知", + "allCaughtUp": "你已处理完所有通知!", + "archivedAppearHere": "已归档的通知将显示在这里。", + "notificationsAppearHere": "有动态时会在这里显示通知。", + "justNow": "刚刚", + "minutesAgo": "{count} 分钟前", + "hoursAgo": "{count} 小时前", + "daysAgo": "{count} 天前", + "markAsRead": "标为已读", + "notificationArchived": "通知已归档", + "failedMarkRead": "标记已读失败", + "failedArchive": "归档失败", + "failedMarkAllRead": "全部标为已读失败", + "notificationsArchived": "{count} 条通知已归档", + "typeMention": "提及", + "typeInvitation": "邀请", + "typeProjectInvite": "项目邀请", + "typeWorkspaceInvite": "工作空间邀请", + "typeRoleChange": "角色变更", + "typeRoomCreated": "房间已创建", + "typeRoomDeleted": "房间已删除", + "typeAnnouncement": "公告", + "typeIssueOpened": "新议题", + "typeIssueCommented": "议题评论", + "typeIssueClosed": "议题已关闭", + "typeReviewRequested": "请求审查", + "typePrApproved": "PR 已批准", + "typePrMerged": "PR 已合并" + }, + "search": { + "placeholder": "搜索项目、仓库、议题、用户...", + "searchButton": "搜索", + "projects": "项目", + "repositories": "仓库", + "issues": "议题", + "users": "用户", + "messages": "消息", + "resultsFor": "「{query}」的 {count} 个结果", + "noResultsFor": "「{query}」无结果", + "messagesFor": "「{query}」的 {count} 条消息{inRoom}", + "noMessagesFor": "未找到匹配「{query}」的消息", + "noMessagesInRoom": "在「{room}」中未找到匹配「{query}」的消息", + "searchFailed": "搜索失败", + "enterKeyword": "输入关键词以搜索所有内容。", + "noResultsFound": "未找到结果", + "tryDifferentKeywords": "尝试其他关键词或检查拼写。", + "showing": "显示 {count} / {total} 条{type}", + "roomIdPlaceholder": "房间 ID(用于搜索该房间消息,如 workspace:general)...", + "acrossAllRooms": "搜索所有可访问的房间", + "inRoom": "(在 {room} 中)" + }, + "settings": { + "account": { + "title": "账号", + "subtitle": "管理你的账号信息和偏好设置。", + "changePassword": "修改密码", + "changePasswordDesc": "更新密码以保护你的账号安全。", + "currentPassword": "当前密码", + "currentPasswordPlaceholder": "输入当前密码", + "newPassword": "新密码", + "newPasswordPlaceholder": "输入新密码", + "confirmNewPassword": "确认新密码", + "confirmNewPasswordPlaceholder": "再次输入新密码", + "passwordMinLength": "至少 8 个字符", + "changePasswordButton": "修改密码", + "changing": "修改中...", + "emailAddress": "邮箱地址", + "emailAddressDesc": "更新你的邮箱地址。需要发送验证邮件确认。", + "currentEmail": "当前邮箱", + "noEmailOnRecord": "未设置邮箱", + "newEmailAddress": "新邮箱地址", + "newEmailPlaceholder": "输入新邮箱地址", + "confirmWithPassword": "密码确认", + "passwordPlaceholder": "输入当前密码", + "sendVerificationEmail": "发送验证邮件", + "sending": "发送中...", + "preferences": "偏好设置", + "preferencesDesc": "自定义账号偏好和通知设置。", + "language": "语言", + "theme": "主题", + "timezone": "时区", + "light": "浅色", + "dark": "深色", + "system": "跟随系统", + "notifications": "通知", + "emailNotifications": "邮件通知", + "emailNotificationsDesc": "接收重要更新的邮件通知", + "inAppNotifications": "应用内通知", + "inAppNotificationsDesc": "在应用内显示通知", + "reset": "重置", + "saveChanges": "保存更改", + "saving": "保存中...", + "passwordChangedSuccess": "密码修改成功", + "preferencesUpdatedSuccess": "偏好设置已更新", + "failedChangePassword": "修改密码失败", + "failedUpdatePreferences": "更新偏好设置失败", + "failedLoadPreferences": "加载偏好设置失败。", + "verificationEmailSent": "验证邮件已发送!请检查新邮箱确认。", + "failedRequestEmailChange": "请求更改邮箱失败", + "enterCurrentPassword": "请输入当前密码", + "enterNewPassword": "请输入新密码", + "newPasswordMinLength": "新密码至少需要 8 个字符", + "passwordsDoNotMatch": "两次密码不一致", + "enterNewEmail": "请输入新邮箱地址", + "enterValidEmail": "请输入有效的邮箱地址", + "enterPasswordConfirm": "请输入密码确认" + }, + "preferences": { + "title": "偏好设置", + "subtitle": "管理你的个人偏好和通知设置。", + "notificationChannels": "通知渠道", + "notificationChannelsDesc": "选择接收通知的方式。", + "emailNotificationsLabel": "邮件通知", + "emailNotificationsDesc": "通过邮件接收通知", + "inAppNotificationsLabel": "应用内通知", + "inAppNotificationsDesc": "在应用内显示通知", + "browserPush": "浏览器推送通知", + "pushUnsupported": "你的浏览器不支持推送通知", + "pushBlocked": "已被浏览器阻止,请在网站设置中启用。", + "pushSubscribed": "已订阅——你将收到浏览器通知", + "pushNotSubscribed": "即使标签页关闭也会收到通知", + "pushEnable": "启用", + "pushDisable": "禁用", + "doNotDisturb": "勿扰模式", + "doNotDisturbDesc": "设置静默时段,在此期间不会收到打扰。", + "enableDnd": "启用勿扰模式", + "dndDesc": "在特定时段静音通知", + "startTime": "开始时间", + "endTime": "结束时间", + "notificationCategories": "通知类别", + "notificationCategoriesDesc": "选择想要接收的通知类型。", + "securityAlerts": "安全提醒", + "securityAlertsDesc": "重要的安全更新和警报", + "productUpdates": "产品更新", + "productUpdatesDesc": "新功能和产品公告", + "marketingPromotions": "营销与推广", + "marketingDesc": "技巧、优惠和促销内容", + "developmentActivity": "开发活动", + "developmentActivityDesc": "控制代码审查和协作活动的通知。", + "issuesActivity": "议题", + "issuesActivityDesc": "开启、关闭、指派或评论时", + "pullRequestsActivity": "合并请求", + "prActivityDesc": "请求审查、批准、合并或评论时", + "mentionsActivity": "@提及", + "mentionsActivityDesc": "当有人在消息、议题或 PR 中 @提及你时", + "roomMessagesActivity": "房间消息", + "roomMessagesDesc": "你关注的频道中的新消息" + }, + "security": { + "title": "安全", + "subtitle": "管理你的安全设置和认证方式。", + "securitySettings": "安全设置", + "securityDesc": "配置双因素认证、密码策略和会话管理。", + "twoFactorAuth": "双因素认证", + "twoFactorDesc": "为账号增加额外的安全保护,登录时需要更多验证。", + "enable": "启用", + "disable": "禁用", + "passwordPolicy": "密码策略", + "passwordPolicyDesc": "设置密码强度要求", + "standard": "标准", + "sessionManagement": "会话管理", + "sessionManagementDesc": "查看和管理活跃会话", + "active": "个活跃", + "manage": "管理" + }, + "profile": { + "title": "个人资料", + "subtitle": "管理你的个人信息和个人资料设置。", + "profileInfo": "个人信息", + "profileInfoDesc": "查看基本账号信息。", + "username": "用户名", + "displayName": "显示名称", + "notSet": "未设置", + "email": "邮箱", + "memberSince": "注册时间", + "publicProfile": "公开资料", + "publicProfileDesc": "更新公开的个人资料信息。", + "publicAvatar": "公开头像", + "uploadAvatar": "上传新头像", + "avatarFormat": "JPG、GIF 或 PNG 格式,最大 2MB。", + "bio": "简介", + "bioPlaceholder": "介绍一下你自己", + "bioDesc": "你的个人简介或描述", + "organization": "组织", + "orgPlaceholder": "你的公司或组织", + "orgDesc": "你所属的组织", + "reset": "重置", + "saveChanges": "保存更改", + "saving": "保存中...", + "avatarUploaded": "头像上传成功", + "failedUploadAvatar": "上传头像失败", + "fileSizeLimit": "文件大小不能超过 2MB", + "profileUpdated": "个人资料更新成功", + "failedUpdateProfile": "更新个人资料失败" + }, + "tokens": { + "title": "令牌", + "subtitle": "管理用于 API 访问的个人访问令牌。", + "createToken": "创建令牌", + "personalAccessTokens": "个人访问令牌", + "noTokensDesc": "暂无令牌。创建一个新令牌开始使用。", + "tokensCount": "你已配置 {count} 个访问令牌。", + "tokensCountPlural": "你已配置 {count} 个访问令牌。", + "loadingTokens": "加载访问令牌中...", + "noAccessTokens": "暂无访问令牌", + "noAccessTokensDesc": "创建个人访问令牌以认证 API 请求并通过 HTTPS 访问 Git 仓库。", + "createFirstToken": "创建你的第一个令牌", + "untitled": "未命名", + "revoked": "已撤销", + "scopes": "作用域:", + "created": "创建于 {date}", + "expires": "过期于 {date}", + "neverExpires": "永不过期", + "revoke": "撤销", + "createAccessToken": "创建访问令牌", + "createTokenDesc": "创建一个新的个人访问令牌用于 API 认证。", + "tokenName": "令牌名称", + "tokenNamePlaceholder": "例如:CI/CD 流水线、开发环境", + "tokenNameDesc": "为此令牌选择一个描述性名称", + "scopesLabel": "作用域", + "scopesDesc": "选择此令牌拥有的权限", + "expirationDate": "过期日期(可选)", + "expirationDesc": "留空表示永不过期", + "cancel": "取消", + "creating": "创建中...", + "tokenCreated": "令牌创建成功", + "tokenCreatedDesc": "务必立即复制你的访问令牌,你将无法再次看到它!", + "yourAccessToken": "你的访问令牌", + "tokenImportant": "重要提示:此令牌仅显示一次,请安全保管。", + "iHaveSavedToken": "我已保存令牌", + "tokenCopied": "令牌已复制到剪贴板", + "deleteTokenTitle": "删除访问令牌", + "deleteTokenDesc": "确定要删除此访问令牌吗?此操作无法撤销,使用此令牌的任何应用将立即失去访问权限。", + "deleting": "删除中...", + "delete": "删除", + "revokeTokenTitle": "撤销访问令牌", + "revokeTokenDesc": "确定要撤销此访问令牌吗?令牌将立即被禁用,无法再用于认证。", + "tokenCreatedSuccess": "访问令牌创建成功", + "failedCreateToken": "创建访问令牌失败", + "tokenDeleted": "访问令牌删除成功", + "failedDeleteToken": "删除访问令牌失败", + "nameRequired": "请输入访问令牌的名称", + "scopeRequired": "请至少选择一个作用域" + }, + "activity": { + "title": "动态", + "subtitle": "查看最近的动态和通知。", + "markAllRead": "全部标为已读", + "recentNotifications": "最近通知", + "unread": "{count} 条未读", + "noNotifications": "暂无通知。你的动态将显示在这里。", + "newLabel": "新", + "noContent": "无内容", + "unknownDate": "未知日期", + "allMarkedRead": "所有通知已标为已读", + "failedMarkAllRead": "全部标为已读失败", + "markedRead": "通知已标为已读", + "failedMarkRead": "标为已读失败" + } + }, + "repository": { + "list": { + "repositories": "仓库", + "searchPlaceholder": "搜索仓库…", + "filter": "筛选", + "new": "新建", + "filters": "筛选条件", + "clearAll": "清除全部", + "visibility": "可见性", + "all": "全部", + "public": "公开", + "private": "私有", + "sortBy": "排序方式", + "lastUpdated": "最近更新", + "name": "名称", + "linkedIssues": "关联议题", + "stars": "星标", + "repository": "个仓库", + "repositoriesPlural": "个仓库", + "errorLoading": "错误:", + "errorLoadFailed": "加载仓库失败", + "noRepositories": "未找到仓库", + "clearFilters": "清除筛选", + "watches": "关注", + "branches": "分支", + "defaultBranch": "默认分支", + "lastUpdatedColumn": "最近更新", + "never": "从未", + "showing": "显示 {start}–{end},共 {total} 条", + "previous": "上一页", + "next": "下一页", + "page": "第 {page} 页" + }, + "overview": { + "repositoryStats": "仓库统计", + "defaultBranch": "默认分支", + "commits": "提交", + "branches": "分支", + "tags": "标签", + "stars": "星标", + "watchers": "关注者", + "readme": "自述文件", + "starred": "已收藏", + "unstarred": "已取消收藏", + "watching": "正在关注仓库", + "stoppedWatching": "已取消关注", + "failedToStar": "收藏失败", + "failedToUnstar": "取消收藏失败", + "failedToWatch": "关注失败", + "failedToUnwatch": "取消关注失败" + }, + "subpages": { + "commits": { + "title": "提交", + "description": "浏览此仓库的提交历史。", + "comingSoon": "即将推出", + "notAvailable": "提交历史尚不可用。" + }, + "branches": { + "title": "分支", + "description": "管理和浏览仓库分支。", + "comingSoon": "即将推出", + "notAvailable": "分支列表和管理尚不可用。" + }, + "tags": { + "title": "标签", + "description": "浏览仓库标签和版本发布。", + "comingSoon": "即将推出", + "notAvailable": "标签和版本管理尚不可用。" + }, + "files": { + "title": "文件", + "description": "浏览和管理仓库文件。", + "comingSoon": "即将推出", + "notAvailable": "文件浏览器尚不可用。" + }, + "contributors": { + "title": "贡献者", + "description": "查看贡献者统计和活动。", + "comingSoon": "即将推出", + "notAvailable": "贡献者统计尚不可用。" + }, + "pullRequests": { + "title": "合并请求", + "description": "为 {repo} 创建和管理合并请求。", + "comingSoon": "即将推出", + "notAvailable": "合并请求管理尚不可用。" + } + } + }, + "workspace": { + "projects": { + "title": "项目", + "newProject": "新建项目", + "noProjects": "该工作空间暂无项目。", + "createFirstProject": "创建第一个项目", + "noDescription": "暂无描述", + "private": "私有" + }, + "members": { + "title": "成员", + "inviteMember": "邀请成员", + "inviteTo": "邀请加入 {name}", + "inviteDescription": "他们将收到一封包含加入此工作空间链接的邮件。邀请 7 天后过期。", + "emailAddress": "邮箱地址", + "emailPlaceholder": "colleague@example.com", + "role": "角色", + "memberRoleDesc": "成员 — 可查看和参与项目", + "adminRoleDesc": "管理员 — 可管理成员和设置", + "adminInfo": "管理员可以管理工作空间设置、成员和账单。", + "memberInfo": "成员可以创建和管理此工作空间下的项目。", + "cancel": "取消", + "sendInvitation": "发送邀请", + "sending": "发送中...", + "pendingInvitations": "待处理的邀请", + "expires": "过期于 {date}", + "by": "由 @{username}", + "searchMembers": "搜索成员...", + "allRoles": "全部角色", + "owner": "拥有者", + "admin": "管理员", + "member": "成员", + "memberColumn": "成员", + "roleColumn": "角色", + "invitedBy": "邀请者", + "joined": "加入时间", + "noMatch": "没有符合筛选条件的成员", + "noMembers": "暂无成员", + "remove": "移除", + "page": "第 {page} 页,共 {totalPages} 页", + "totalMembers": "共 {count} 位成员", + "invitationSent": "邀请已发送至 {email}", + "failedSendInvitation": "发送邀请失败", + "memberRemoved": "成员已移除", + "failedRemoveMember": "移除成员失败", + "invitationCancelled": "邀请已取消", + "failedCancelInvitation": "取消邀请失败", + "roleUpdated": "角色已更新", + "failedUpdateRole": "更新角色失败", + "pending": "待处理" + }, + "settings": { + "title": "工作空间设置", + "general": "通用", + "avatarUrl": "头像 URL", + "avatarUrlPlaceholder": "https://example.com/avatar.png", + "avatarHint": "输入工作空间头像的图片 URL。", + "workspaceName": "工作空间名称", + "namePlaceholder": "我的工作空间", + "description": "描述", + "descPlaceholder": "描述此工作空间...", + "billingEmail": "账单邮箱", + "billingEmailPlaceholder": "billing@example.com", + "billingHint": "发票将发送到此邮箱。", + "saveChanges": "保存更改", + "saving": "保存中...", + "plan": "方案", + "currentPlan": "当前方案", + "manageBilling": "管理账单", + "dangerZone": "危险区域", + "deleteWorkspace": "删除工作空间", + "deleteWarning": "永久删除此工作空间及其所有数据。此操作无法撤销。", + "deletingWorkspace": "删除中...", + "deleteConfirm": "确定要删除此工作空间吗?此操作无法撤销。", + "updated": "工作空间已更新", + "failedUpdate": "更新工作空间失败", + "deleted": "工作空间已删除", + "failedDelete": "删除工作空间失败" + } + }, + "projectSettings": { + "general": { + "title": "通用", + "description": "描述", + "projectAvatar": "项目头像", + "uploadAvatar": "上传头像", + "avatarFormat": "支持 PNG、JPG、GIF 或 WebP 格式,最大 2MB。", + "displayName": "显示名称", + "publicVisibility": "公开可见性", + "publicVisibilityDesc": "允许任何人查看此项目。", + "saveChanges": "保存更改", + "confirmTitle": "确认项目更改", + "confirmDescription": "你将更新以下设置:", + "displayNameField": "显示名称", + "descriptionField": "描述", + "visibilityField": "可见性:{visibility}", + "publicWarning": "设为公开将允许任何人查看项目内容。", + "confirmSave": "确认并保存", + "projectAvatarUpdated": "项目头像已更新", + "failedUploadAvatar": "上传头像失败", + "fileSizeLimit": "文件大小不能超过 2MB", + "projectSettingsUpdated": "项目设置已更新", + "failedUpdateProject": "更新项目设置失败" + }, + "members": { + "title": "成员", + "invite": "邀请", + "searchMembers": "搜索成员…", + "member": "位成员", + "members": "位成员", + "noMatchSearch": "没有符合条件的成员", + "noMembers": "未找到成员", + "clearSearch": "清除搜索", + "user": "用户", + "role": "角色", + "joined": "加入时间", + "actions": "操作", + "inviteMemberTitle": "邀请成员", + "email": "邮箱", + "emailPlaceholder": "teammate@example.com", + "cancel": "取消", + "sendInvite": "发送邀请", + "sending": "发送中…", + "removeMemberTitle": "移除成员", + "removeConfirm": "确定要将 {username} 从此项目中移除吗?", + "removing": "移除中…", + "remove": "移除", + "invitationSent": "邀请已发送", + "failedSendInvitation": "发送邀请失败", + "memberRemoved": "成员已移除", + "failedRemoveMember": "移除成员失败", + "roleUpdated": "角色已更新", + "failedUpdateRole": "更新角色失败", + "emailRequired": "邮箱不能为空", + "errorLoading": "错误:", + "failedLoadMembers": "加载成员失败" + }, + "labels": { + "title": "标签", + "description": "描述", + "editLabel": "编辑标签", + "createLabel": "创建标签", + "nameRequired": "名称 *", + "namePlaceholder": "标签名称", + "color": "颜色", + "descPlaceholder": "描述此标签", + "cancel": "取消", + "updateLabel": "更新标签", + "createLabelButton": "创建标签", + "addLabel": "添加标签", + "failedToLoad": "加载标签失败", + "noLabels": "暂无标签。创建第一个标签。", + "deleteLabelTitle": "删除标签", + "deleteLabelConfirm": "确定要删除此标签吗?此操作无法撤销。", + "delete": "删除", + "labelCreated": "标签已创建", + "labelUpdated": "标签已更新", + "labelDeleted": "标签已删除", + "failedCreateLabel": "创建标签失败", + "failedUpdateLabel": "更新标签失败", + "failedDeleteLabel": "删除标签失败", + "nameRequiredError": "标签名称不能为空" + }, + "boards": { + "title": "看板", + "newBoard": "新建看板", + "noBoards": "暂无看板", + "noBoardsHint": "创建看板来组织项目工作。", + "newBoardDialog": "新建看板", + "name": "名称", + "namePlaceholder": "例如:Sprint 规划", + "description": "描述", + "descriptionPlaceholder": "可选", + "cancel": "取消", + "createBoard": "创建看板", + "updated": "更新于 {date}", + "failedCreate": "创建看板失败" + }, + "billing": { + "currentBilling": "当前计费", + "description": "当前周期配额、使用量和账户余额。", + "monthlyQuota": "月配额", + "currentBalance": "当前余额", + "currentUsage": "当前用量", + "billingHistory": "计费历史", + "billingHistoryDesc": "项目计费流水记录。", + "noRecords": "暂无计费记录。", + "time": "时间", + "reason": "原因", + "amount": "金额", + "currency": "币种", + "type": "类型", + "charge": "支出", + "credit": "收入", + "showing": "显示第 {start} 至 {end} 条,共 {total} 条记录", + "page": "第 {page} 页,共 {totalPages} 页", + "failedToLoad": "加载账单信息失败。" + }, + "skills": { + "title": "技能", + "subtitle": "此项目的代理指令", + "searchPlaceholder": "搜索技能...", + "all": "全部", + "manual": "手动", + "repo": "仓库", + "scanRepos": "扫描仓库", + "addSkill": "添加技能", + "noSkills": "未找到技能", + "noSkillsHint": "手动添加技能或扫描仓库以发现 SKILL.md 文件。", + "noMatch": "没有符合搜索或筛选条件的技能。", + "deleteSkill": "删除技能", + "deleteConfirm": "确定要删除「{name}」吗?此操作无法撤销。", + "cancel": "取消", + "delete": "删除", + "content": "内容", + "moreLines": "还有 {count} 行", + "copied": "已复制", + "copyContent": "复制内容", + "scannedFromRepo": "从仓库扫描", + "addedManually": "手动添加", + "failedLoad": "加载技能失败", + "scanSuccess": "仓库扫描成功", + "scanFailed": "扫描仓库失败", + "deleted": "「{name}」已删除", + "failedDelete": "删除技能失败" + }, + "webhook": { + "title": "Webhooks", + "description": "配置 webhook 以接收项目事件通知。", + "comingSoon": "即将推出", + "notAvailable": "Webhook 配置尚不可用。" + }, + "oauth": { + "title": "OAuth 应用", + "description": "创建和管理第三方集成的 OAuth 应用。", + "comingSoon": "即将推出", + "notAvailable": "OAuth 应用管理尚不可用。" + } + }, + "shared": { + "projects": "项目", + "loading": "加载中...", + "error": "错误", + "success": "成功", + "cancel": "取消", + "confirm": "确认", + "delete": "删除", + "edit": "编辑", + "save": "保存", + "close": "关闭", + "back": "返回", + "next": "下一步", + "previous": "上一步", + "submit": "提交", + "search": "搜索", + "filter": "筛选", + "clear": "清除", + "reset": "重置", + "apply": "应用", + "yes": "是", + "no": "否", + "ok": "确定", + "retry": "重试", + "refresh": "刷新", + "noData": "暂无数据", + "noResults": "无结果", + "loadingFailed": "加载失败", + "operationFailed": "操作失败", + "operationSuccess": "操作成功" + }, + "init": { + "project": { + "title": "创建新项目", + "subtitle": "创建一个新项目来组织你的仓库", + "projectName": "项目名称", + "namePlaceholder": "my-awesome-project", + "description": "描述", + "descPlaceholder": "对你的项目做简短描述...", + "workspace": "工作空间", + "noWorkspace": "无工作空间(独立项目)", + "workspaceHint": "可选:将项目关联到一个工作空间。", + "publicProject": "公开项目", + "publicProjectHint": "让此项目对所有人可见", + "creating": "创建中...", + "createProject": "创建项目", + "cancel": "取消", + "nameRequired": "项目名称不能为空", + "nameAvailable": "项目名称可用", + "nameExists": "项目名称已存在", + "failedCheckAvailability": "检查可用性失败", + "failedCreate": "创建项目失败", + "createdSuccess": "项目创建成功!" + }, + "repository": { + "title": "创建新仓库", + "subtitle": "在你的项目中创建一个新的 Git 仓库", + "project": "项目", + "noProjects": "你还没有项目。", + "createProject": "创建项目", + "selectProject": "选择一个项目", + "loadingProjects": "加载项目...", + "repoName": "仓库名称", + "namePlaceholder": "my-awesome-repo", + "description": "描述", + "descPlaceholder": "对你的仓库做简短描述...", + "defaultBranch": "默认分支", + "defaultBranchPlaceholder": "main", + "initRepo": "初始化仓库", + "initRepoOn": "立即创建裸 Git 仓库。在下面设置默认分支。", + "initRepoOff": "跳过初始化。当你推送时默认分支将自动设置。", + "privateRepo": "私有仓库", + "privateAuto": "此仓库必须为私有,因为项目是私有的", + "privateManual": "将此仓库设为私有并限制访问", + "creating": "创建中...", + "createRepo": "创建仓库", + "cancel": "取消", + "selectProjectFirst": "请先选择项目", + "nameRequired": "仓库名称不能为空", + "nameAvailable": "仓库名称可用", + "nameExists": "仓库名称已存在", + "failedCheckAvailability": "检查可用性失败", + "failedCreate": "创建仓库失败", + "createdSuccess": "仓库创建成功", + "failedLoadProjects": "加载项目失败", + "failedLoadDetails": "仓库已创建但未能加载详情" + } + }, + "pricing": { + "title": "简洁透明的定价。", + "subtitle": "免费开始。随着你的代理舰队成长而扩展。", + "free": "免费版", + "freePrice": "$0", + "freePeriod": "永久免费", + "freeDesc": "面向个人的命令即服务——包含版本化命令、代理记忆和技能注册表。", + "freeCta": "免费开始", + "freeFeatures": [ + "3 个活跃代理", + "5 GB 代理记忆", + "社区技能注册表", + "公共房间", + "7 天历史" + ], + "pro": "专业版", + "proPrice": "$29", + "proPeriod": "每月", + "proDesc": "面向团队的命令即服务——无限代理、完整命令流审计和优先算力。", + "proCta": "升级专业版", + "proFeatures": [ + "无限代理", + "50 GB 代理记忆", + "私有技能注册表", + "协作房间", + "90 天历史", + "优先算力", + "邮件支持" + ], + "enterprise": "企业版", + "enterprisePrice": "自定义", + "enterpriseDesc": "规模化命令即服务——自定义部署、精细化命令流治理和专属 SLA。", + "enterpriseCta": "联系销售", + "enterpriseFeatures": [ + "包含专业版全部功能", + "无限记忆", + "SSO / SAML", + "自定义模型路由", + "专属算力", + "SLA 保障", + "专属支持" + ], + "faqHeading": "常见问题", + "faqSubtitle": "计费问题解答。", + "faq1Q": "我可以随时切换方案吗?", + "faq1A": "是的。你可以随时升级或降级。变更将在下一个计费周期生效。", + "faq2Q": "代理记忆包括什么?", + "faq2A": "代理记忆是所有代理存储的总持久上下文,包括对话历史和长期记忆。", + "faq3Q": "专业版有免费试用吗?", + "faq3A": "有——免费版升级后可体验所有专业版功能 14 天。" + }, + "about": { + "title": "关于 GitDataAI", + "subtitle": "我们相信每个工程操作都应该是一条可版本化的命令——可审计、可回放、且经人类批准。我们正在为 AI 代理时代构建命令即服务平台。", + "quote": "「每个操作都是一条命令。每条命令都是可版本化和可审计的。」", + "mission": "GitDataAI 的创立是为了将命令即服务带入 AI 代理时代——每个代理决策都有版本记录,每条命令流都可审计,每个需要人工参与的环操作都经批准。", + "ourValues": "我们的价值观", + "values": { + "transparency": { + "title": "透明", + "desc": "每个代理决策都记录、版本化、可审计。没有黑箱。" + }, + "collaboration": { + "title": "协作", + "desc": "人类和代理是平等的。任何一方都不取代另一方——携手创造更多。" + }, + "reliability": { + "title": "可靠", + "desc": "生产级基础设施。你的代理在你需要时可靠运行。" + }, + "extensibility": { + "title": "可扩展", + "desc": "开放注册表,开放 API。网络通过社区贡献不断增长。" + } + }, + "theTeam": "团队", + "hiring": "我们正在招聘。加入我们一起建设。", + "join": "加入 GitDataAI", + "github": "GitHub" + }, + "invitations": { + "title": "我的邀请", + "pendingCount": "{count} 条待处理邀请", + "pendingCountPlural": "{count} 条待处理邀请", + "noPending": "暂无待处理邀请", + "noPendingHint": "项目和工作空间的邀请将显示在这里。", + "projectInvitation": "项目邀请", + "workspaceInvitation": "工作空间邀请", + "invitedToJoin": "你被邀请加入 {name}", + "invitedToWorkspace": "你被邀请加入工作空间 {name}", + "by": "来自 {username}", + "accept": "接受", + "decline": "拒绝", + "acceptedProject": "你已加入项目:{name}", + "declinedInvitation": "已拒绝加入 {name}", + "acceptedWorkspace": "你已加入工作空间", + "failedAccept": "接受邀请失败", + "failedDecline": "拒绝邀请失败" + }, + "network": { + "title": "GitDataAI 网络", + "subtitle": "一个不断增长的代理、工作空间和技能生态系统,通过统一命令流协作。每个代理操作都是一条命令。每条命令都可回放。", + "activeAgents": "活跃代理", + "workspaces": "工作空间", + "skillRuns": "技能运行次数", + "uptimeSla": "运行时间 SLA", + "publicRooms": "公共房间", + "live": "在线", + "active": "活跃", + "agents": "{count} 个代理", + "participants": "{count}", + "privacyByDefault": "默认隐私", + "privacyDesc": "所有工作空间默认私有。你可以控制谁能看到你的代理、技能和对话历史。公共房间需要明确选择加入。", + "network": "网络", + "roomsLive": "{count} 个房间在线", + "ended": "已结束", + "startYourOwnRoom": "创建自己的房间" + }, + "skills": { + "title": "技能注册表", + "subtitle": "可复用的、版本化的代理行为,被打包为技能——通过命令调用,部署到整个代理集群。", + "searchPlaceholder": "搜索技能...", + "categories": [ + "全部", + "前端", + "后端", + "DevOps", + "安全", + "数据", + "测试" + ], + "publishCTA": "发布你自己的技能并加入注册表。", + "publishButton": "发布技能", + "runs": "{count} 次运行" + }, + "solutions": { + "title": "命令即服务", + "subtitle": "在 GitDataAI 中,每个操作都是一流的命令。命令是可版本化、可审计和可组合的——你的开发工作流就是你的 API。", + "learnMore": "了解更多", + "coreConcept": "核心概念" + }, + "notificationDrawer": { + "title": "通知", + "live": "实时", + "markAllRead": "全部标为已读", + "noNotifications": "暂无通知", + "noNotificationsHint": "有更新时会在这里显示通知。", + "viewAll": "查看所有通知", + "unread": "{count} 条未读", + "notifications": "通知" + } +}