- Required for Graphiti memory backend (embeddings)
+ {t('integrations.openaiKeyDescription')}
void;
+}
+
+/**
+ * Language settings section for interface language selection
+ * Changes apply immediately for live preview, saved on "Save Settings"
+ */
+export function LanguageSettings({ settings, onSettingsChange }: LanguageSettingsProps) {
+ const { t, i18n } = useTranslation('settings');
+ const updateStoreSettings = useSettingsStore((state) => state.updateSettings);
+
+ const currentLanguage = settings.language ?? 'en';
+
+ const handleLanguageChange = (newLanguage: SupportedLanguage) => {
+ // Update local draft state
+ onSettingsChange({ ...settings, language: newLanguage });
+
+ // Apply immediately to store for live preview
+ updateStoreSettings({ language: newLanguage });
+
+ // Change i18n language immediately for live preview
+ i18n.changeLanguage(newLanguage);
+ };
+
+ return (
+
+
+
+
+
+ {t('language.description')}
+
+
+ {AVAILABLE_LANGUAGES.map((lang) => {
+ const isSelected = currentLanguage === lang.value;
+ return (
+
+ );
+ })}
+
+
+
+
+ );
+}
diff --git a/apps/frontend/src/renderer/components/settings/ThemeSettings.tsx b/apps/frontend/src/renderer/components/settings/ThemeSettings.tsx
index f7f3b8ba..35c82d0c 100644
--- a/apps/frontend/src/renderer/components/settings/ThemeSettings.tsx
+++ b/apps/frontend/src/renderer/components/settings/ThemeSettings.tsx
@@ -1,3 +1,4 @@
+import { useTranslation } from 'react-i18next';
import { SettingsSection } from './SettingsSection';
import { ThemeSelector } from './ThemeSelector';
import type { AppSettings } from '../../../shared/types';
@@ -12,10 +13,12 @@ interface ThemeSettingsProps {
* Wraps the ThemeSelector component with a consistent settings section layout
*/
export function ThemeSettings({ settings, onSettingsChange }: ThemeSettingsProps) {
+ const { t } = useTranslation('settings');
+
return (
diff --git a/apps/frontend/src/renderer/main.tsx b/apps/frontend/src/renderer/main.tsx
index 98ccaec1..cad7aca3 100644
--- a/apps/frontend/src/renderer/main.tsx
+++ b/apps/frontend/src/renderer/main.tsx
@@ -1,6 +1,9 @@
// Initialize browser mock before anything else (no-op in Electron)
import './lib/browser-mock';
+// Initialize i18n before React
+import '../shared/i18n';
+
import React from 'react';
import ReactDOM from 'react-dom/client';
import { App } from './App';
diff --git a/apps/frontend/src/shared/constants/config.ts b/apps/frontend/src/shared/constants/config.ts
index 3d407300..9692a98d 100644
--- a/apps/frontend/src/shared/constants/config.ts
+++ b/apps/frontend/src/shared/constants/config.ts
@@ -44,7 +44,9 @@ export const DEFAULT_APP_SETTINGS = {
// UI Scale (default 100% - standard size)
uiScale: UI_SCALE_DEFAULT,
// Beta updates opt-in (receive pre-release versions)
- betaUpdates: false
+ betaUpdates: false,
+ // Language preference (default to English)
+ language: 'en' as const
};
// ============================================
diff --git a/apps/frontend/src/shared/constants/i18n.ts b/apps/frontend/src/shared/constants/i18n.ts
new file mode 100644
index 00000000..5f4ebbde
--- /dev/null
+++ b/apps/frontend/src/shared/constants/i18n.ts
@@ -0,0 +1,13 @@
+/**
+ * Internationalization constants
+ * Available languages and display labels
+ */
+
+export type SupportedLanguage = 'en' | 'fr';
+
+export const AVAILABLE_LANGUAGES = [
+ { value: 'en' as const, label: 'English', nativeLabel: 'English' },
+ { value: 'fr' as const, label: 'French', nativeLabel: 'Français' }
+] as const;
+
+export const DEFAULT_LANGUAGE: SupportedLanguage = 'en';
diff --git a/apps/frontend/src/shared/i18n/index.ts b/apps/frontend/src/shared/i18n/index.ts
new file mode 100644
index 00000000..bd54dd15
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/index.ts
@@ -0,0 +1,61 @@
+import i18n from 'i18next';
+import { initReactI18next } from 'react-i18next';
+
+// Import English translation resources
+import enCommon from './locales/en/common.json';
+import enNavigation from './locales/en/navigation.json';
+import enSettings from './locales/en/settings.json';
+import enTasks from './locales/en/tasks.json';
+import enWelcome from './locales/en/welcome.json';
+import enOnboarding from './locales/en/onboarding.json';
+import enDialogs from './locales/en/dialogs.json';
+
+// Import French translation resources
+import frCommon from './locales/fr/common.json';
+import frNavigation from './locales/fr/navigation.json';
+import frSettings from './locales/fr/settings.json';
+import frTasks from './locales/fr/tasks.json';
+import frWelcome from './locales/fr/welcome.json';
+import frOnboarding from './locales/fr/onboarding.json';
+import frDialogs from './locales/fr/dialogs.json';
+
+export const defaultNS = 'common';
+
+export const resources = {
+ en: {
+ common: enCommon,
+ navigation: enNavigation,
+ settings: enSettings,
+ tasks: enTasks,
+ welcome: enWelcome,
+ onboarding: enOnboarding,
+ dialogs: enDialogs
+ },
+ fr: {
+ common: frCommon,
+ navigation: frNavigation,
+ settings: frSettings,
+ tasks: frTasks,
+ welcome: frWelcome,
+ onboarding: frOnboarding,
+ dialogs: frDialogs
+ }
+} as const;
+
+i18n
+ .use(initReactI18next)
+ .init({
+ resources,
+ lng: 'en', // Default language (will be overridden by settings)
+ fallbackLng: 'en',
+ defaultNS,
+ ns: ['common', 'navigation', 'settings', 'tasks', 'welcome', 'onboarding', 'dialogs'],
+ interpolation: {
+ escapeValue: false // React already escapes values
+ },
+ react: {
+ useSuspense: false // Disable suspense for Electron compatibility
+ }
+ });
+
+export default i18n;
diff --git a/apps/frontend/src/shared/i18n/locales/en/common.json b/apps/frontend/src/shared/i18n/locales/en/common.json
new file mode 100644
index 00000000..70065741
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/locales/en/common.json
@@ -0,0 +1,92 @@
+{
+ "buttons": {
+ "save": "Save",
+ "cancel": "Cancel",
+ "skip": "Skip",
+ "next": "Next",
+ "back": "Back",
+ "close": "Close",
+ "initialize": "Initialize",
+ "delete": "Delete",
+ "confirm": "Confirm",
+ "retry": "Retry",
+ "create": "Create",
+ "open": "Open",
+ "start": "Start",
+ "stop": "Stop",
+ "refresh": "Refresh",
+ "merge": "Merge",
+ "discard": "Discard",
+ "switch": "Switch",
+ "add": "Add",
+ "gotIt": "Got it",
+ "continue": "Continue",
+ "saving": "Saving..."
+ },
+ "labels": {
+ "loading": "Loading...",
+ "error": "Error",
+ "success": "Success",
+ "initializing": "Initializing...",
+ "saving": "Saving...",
+ "noData": "No data",
+ "optional": "Optional",
+ "required": "Required",
+ "dismiss": "Dismiss"
+ },
+ "time": {
+ "justNow": "Just now",
+ "minutesAgo": "{{count}}m ago",
+ "hoursAgo": "{{count}}h ago",
+ "daysAgo": "{{count}}d ago"
+ },
+ "errors": {
+ "generic": "An error occurred",
+ "networkError": "Network error",
+ "notFound": "Not found",
+ "unauthorized": "Unauthorized"
+ },
+ "notification": {
+ "accountSwitched": "Account Switched",
+ "swapFrom": "Switched from",
+ "swapTo": "to",
+ "swapReason": "({{reason}} swap)"
+ },
+ "rateLimit": {
+ "title": "Rate Limited",
+ "resetsAt": "Resets {{time}}",
+ "hitLimit": "{{source}} hit usage limit",
+ "clickToManage": "Click to manage →",
+ "modalTitle": "Claude Code Usage Limit Reached",
+ "modalDescription": "You've reached your Claude Code usage limit for this period.",
+ "profile": "Profile: {{name}}",
+ "autoSwitching": "Auto-switching to {{name}}",
+ "autoSwitchingDescription": "Claude will restart with your other account automatically",
+ "resetsTime": "Resets {{time}}",
+ "usageRestored": "Your usage will be restored at this time",
+ "switchAccount": "Switch Claude Account",
+ "useAnotherAccount": "Use Another Account",
+ "recommended": "Recommended: {{name}} has more capacity available.",
+ "otherSubscriptions": "You have other Claude subscriptions configured. Switch to continue working:",
+ "selectAccount": "Select account...",
+ "switching": "Switching...",
+ "addNewAccount": "Add new account...",
+ "addAnotherSubscription": "Add another Claude subscription to automatically switch when you hit rate limits.",
+ "addAnotherAccount": "Add another account:",
+ "connectAccount": "Connect a Claude account:",
+ "accountNamePlaceholder": "Account name (e.g., Work, Personal)",
+ "willOpenLogin": "This will open Claude login to authenticate the new account.",
+ "autoSwitchOnRateLimit": "Auto-switch on rate limit",
+ "upgradeTitle": "Upgrade for more usage",
+ "upgradeDescription": "Upgrade your Claude subscription for higher usage limits.",
+ "upgradeSubscription": "Upgrade Subscription",
+ "sources": {
+ "changelog": "Changelog",
+ "task": "Task",
+ "roadmap": "Roadmap",
+ "ideation": "Ideation",
+ "titleGenerator": "Title Generator",
+ "claude": "Claude"
+ }
+ }
+}
diff --git a/apps/frontend/src/shared/i18n/locales/en/dialogs.json b/apps/frontend/src/shared/i18n/locales/en/dialogs.json
new file mode 100644
index 00000000..cd6e1247
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/locales/en/dialogs.json
@@ -0,0 +1,122 @@
+{
+ "initialize": {
+ "title": "Initialize Auto Claude",
+ "description": "This project doesn't have Auto Claude initialized. Would you like to set it up now?",
+ "willDo": "This will:",
+ "createFolder": "Create a .auto-claude folder in your project",
+ "copyFramework": "Copy the Auto Claude framework files",
+ "setupSpecs": "Set up the specs directory for your tasks",
+ "sourcePathNotConfigured": "Source path not configured",
+ "sourcePathNotConfiguredDescription": "Please set the Auto Claude source path in App Settings before initializing.",
+ "initFailed": "Initialization Failed",
+ "initFailedDescription": "Failed to initialize Auto Claude. Please try again."
+ },
+ "gitSetup": {
+ "title": "Git Repository Required",
+ "description": "Auto Claude uses git to safely build features in isolated workspaces",
+ "notGitRepo": "This folder is not a git repository",
+ "noCommits": "Git repository has no commits",
+ "needsInit": "Git needs to be initialized before Auto Claude can manage your code.",
+ "needsCommit": "At least one commit is required for Auto Claude to create worktrees.",
+ "willSetup": "We'll set up git for you:",
+ "initRepo": "Initialize a new git repository",
+ "createCommit": "Create an initial commit with your current files",
+ "manual": "Prefer to do it manually?",
+ "settingUp": "Setting up Git",
+ "initializingRepo": "Initializing git repository and creating initial commit...",
+ "success": "Git Initialized",
+ "readyToUse": "Your project is now ready to use with Auto Claude!"
+ },
+ "githubSetup": {
+ "connectTitle": "Connect to GitHub",
+ "connectDescription": "Auto Claude requires GitHub to manage your code branches and keep tasks up to date.",
+ "claudeTitle": "Connect to Claude AI",
+ "claudeDescription": "Auto Claude uses Claude AI for intelligent features like Roadmap generation, Task automation, and Ideation.",
+ "selectRepo": "Select Repository",
+ "repoDescription": "Auto Claude will use this repository for managing task branches and keeping your code up to date.",
+ "selectBranch": "Select Base Branch",
+ "branchDescription": "Choose which branch Auto Claude should use as the base for creating task branches.",
+ "whyBranch": "Why select a branch?",
+ "branchExplanation": "Auto Claude creates isolated workspaces for each task. Selecting the right base branch ensures your tasks start with the latest code from your main development line.",
+ "ready": "Auto Claude is ready to use! You can now create tasks that will be automatically based on the {{branchName}} branch."
+ },
+ "worktrees": {
+ "title": "Worktrees",
+ "description": "Manage isolated workspaces for your Auto Claude tasks",
+ "empty": "No Worktrees",
+ "emptyDescription": "Worktrees are created automatically when Auto Claude builds features. They provide isolated workspaces for each task.",
+ "merge": "Merge Worktree",
+ "mergeDescription": "Merge changes from this worktree into the base branch.",
+ "delete": "Delete Worktree?",
+ "deleteDescription": "This will permanently delete the worktree and all uncommitted changes. This action cannot be undone."
+ },
+ "update": {
+ "title": "Auto Claude",
+ "projectInitialized": "Project is initialized."
+ },
+ "addFeature": {
+ "title": "Add Feature",
+ "description": "Add a new feature to your roadmap. Provide details about what you want to build and how it fits into your product strategy.",
+ "featureTitle": "Feature Title",
+ "featureTitlePlaceholder": "e.g., User Authentication, Dark Mode Support",
+ "featureDescription": "Description",
+ "featureDescriptionPlaceholder": "Describe what this feature does and why it's valuable to users.",
+ "rationale": "Rationale",
+ "optional": "optional",
+ "rationalePlaceholder": "Explain why this feature should be built and how it fits the product vision.",
+ "phase": "Phase",
+ "selectPhase": "Select phase",
+ "priority": "Priority",
+ "selectPriority": "Select priority",
+ "complexity": "Complexity",
+ "selectComplexity": "Select complexity",
+ "impact": "Impact",
+ "selectImpact": "Select impact",
+ "lowComplexity": "Low",
+ "mediumComplexity": "Medium",
+ "highComplexity": "High",
+ "lowImpact": "Low Impact",
+ "mediumImpact": "Medium Impact",
+ "highImpact": "High Impact",
+ "titleRequired": "Title is required",
+ "descriptionRequired": "Description is required",
+ "phaseRequired": "Please select a phase",
+ "cancel": "Cancel",
+ "adding": "Adding...",
+ "addFeature": "Add Feature",
+ "failedToAdd": "Failed to add feature. Please try again."
+ },
+ "addProject": {
+ "title": "Add Project",
+ "description": "Choose how you'd like to add a project",
+ "openExisting": "Open Existing Folder",
+ "openExistingDescription": "Browse to an existing project on your computer",
+ "createNew": "Create New Project",
+ "createNewDescription": "Start fresh with a new project folder",
+ "createNewTitle": "Create New Project",
+ "createNewSubtitle": "Set up a new project folder",
+ "projectName": "Project Name",
+ "projectNamePlaceholder": "my-awesome-project",
+ "projectNameHelp": "This will be the folder name. Use lowercase with hyphens.",
+ "location": "Location",
+ "locationPlaceholder": "Select a folder...",
+ "willCreate": "Will create:",
+ "browse": "Browse",
+ "initGit": "Initialize git repository",
+ "back": "Back",
+ "creating": "Creating...",
+ "createProject": "Create Project",
+ "nameRequired": "Please enter a project name",
+ "locationRequired": "Please select a location",
+ "failedToOpen": "Failed to open project",
+ "failedToCreate": "Failed to create project"
+ },
+ "customModel": {
+ "title": "Custom Model Configuration",
+ "description": "Configure the model and thinking level for this chat session.",
+ "model": "Model",
+ "thinkingLevel": "Thinking Level",
+ "cancel": "Cancel",
+ "apply": "Apply"
+ }
+}
diff --git a/apps/frontend/src/shared/i18n/locales/en/navigation.json b/apps/frontend/src/shared/i18n/locales/en/navigation.json
new file mode 100644
index 00000000..1f1054e0
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/locales/en/navigation.json
@@ -0,0 +1,30 @@
+{
+ "sections": {
+ "project": "Project",
+ "tools": "Tools"
+ },
+ "items": {
+ "kanban": "Kanban Board",
+ "terminals": "Agent Terminals",
+ "insights": "Insights",
+ "roadmap": "Roadmap",
+ "ideation": "Ideation",
+ "changelog": "Changelog",
+ "context": "Context",
+ "githubIssues": "GitHub Issues",
+ "gitlabIssues": "GitLab Issues",
+ "worktrees": "Worktrees"
+ },
+ "actions": {
+ "settings": "Settings",
+ "help": "Help & Feedback",
+ "newTask": "New Task"
+ },
+ "tooltips": {
+ "settings": "Application Settings",
+ "help": "Help & Feedback"
+ },
+ "messages": {
+ "initializeToCreateTasks": "Initialize Auto Claude to create tasks"
+ }
+}
diff --git a/apps/frontend/src/shared/i18n/locales/en/onboarding.json b/apps/frontend/src/shared/i18n/locales/en/onboarding.json
new file mode 100644
index 00000000..6c8aa0c7
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/locales/en/onboarding.json
@@ -0,0 +1,68 @@
+{
+ "wizard": {
+ "title": "Setup Wizard",
+ "description": "Configure your Auto Claude environment in a few simple steps",
+ "helpText": "This wizard will help you set up your environment in just a few steps. You can configure your Claude OAuth token, set up memory features, and create your first task."
+ },
+ "welcome": {
+ "title": "Welcome to Auto Claude",
+ "subtitle": "Build software autonomously with AI-powered agents",
+ "getStarted": "Get Started",
+ "skip": "Skip Setup",
+ "features": {
+ "aiPowered": {
+ "title": "AI-Powered Development",
+ "description": "Generate code and build features using Claude Code agents"
+ },
+ "specDriven": {
+ "title": "Spec-Driven Workflow",
+ "description": "Define tasks with clear specifications and let Auto Claude handle the implementation"
+ },
+ "memory": {
+ "title": "Memory & Context",
+ "description": "Persistent memory across sessions with Graphiti"
+ },
+ "parallel": {
+ "title": "Parallel Execution",
+ "description": "Run multiple agents in parallel for faster development cycles"
+ }
+ }
+ },
+ "oauth": {
+ "title": "Claude Authentication",
+ "description": "Connect your Claude account to enable AI features"
+ },
+ "memory": {
+ "title": "Memory",
+ "description": "Auto Claude Memory helps remember context across your coding sessions"
+ },
+ "completion": {
+ "title": "You're All Set!",
+ "subtitle": "Auto Claude is ready to help you build amazing software",
+ "setupComplete": "Setup Complete",
+ "setupCompleteDescription": "Your environment is configured and ready. You can start creating tasks immediately or explore the application at your own pace.",
+ "whatsNext": "What's Next?",
+ "createTask": {
+ "title": "Create a Task",
+ "description": "Start by creating your first task to see Auto Claude in action.",
+ "action": "Open Task Creator"
+ },
+ "customizeSettings": {
+ "title": "Customize Settings",
+ "description": "Fine-tune your preferences, configure integrations, or re-run this wizard.",
+ "action": "Open Settings"
+ },
+ "exploreDocs": {
+ "title": "Explore Documentation",
+ "description": "Learn more about advanced features, best practices, and troubleshooting."
+ },
+ "finish": "Finish & Start Building",
+ "rerunHint": "You can always re-run this wizard from Settings → Application"
+ },
+ "steps": {
+ "welcome": "Welcome",
+ "auth": "Auth",
+ "memory": "Memory",
+ "done": "Done"
+ }
+}
diff --git a/apps/frontend/src/shared/i18n/locales/en/settings.json b/apps/frontend/src/shared/i18n/locales/en/settings.json
new file mode 100644
index 00000000..99d51bec
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/locales/en/settings.json
@@ -0,0 +1,240 @@
+{
+ "title": "Settings",
+ "tabs": {
+ "app": "App Settings",
+ "project": "Project Settings"
+ },
+ "sections": {
+ "appearance": {
+ "title": "Appearance",
+ "description": "Customize how Auto Claude looks"
+ },
+ "display": {
+ "title": "Display",
+ "description": "Adjust the size of UI elements"
+ },
+ "language": {
+ "title": "Language",
+ "description": "Choose your preferred language"
+ },
+ "agent": {
+ "title": "Agent Settings",
+ "description": "Default model and framework"
+ },
+ "paths": {
+ "title": "Paths",
+ "description": "Python and framework paths"
+ },
+ "integrations": {
+ "title": "Integrations",
+ "description": "API keys & Claude accounts"
+ },
+ "updates": {
+ "title": "Updates",
+ "description": "Auto Claude updates"
+ },
+ "notifications": {
+ "title": "Notifications",
+ "description": "Alert preferences"
+ }
+ },
+ "language": {
+ "label": "Interface Language",
+ "description": "Select the language for the application interface"
+ },
+ "scale": {
+ "presets": "Scale Presets",
+ "presetsDescription": "Quick scale options for common preferences",
+ "fineTune": "Fine-tune Scale",
+ "fineTuneDescription": "Adjust from 75% to 200% in 5% increments",
+ "default": "Default",
+ "comfortable": "Comfortable",
+ "large": "Large",
+ "preview": "Changes preview immediately. Click Save Settings to persist."
+ },
+ "general": {
+ "otherAgentSettings": "Other Agent Settings",
+ "otherAgentSettingsDescription": "Additional agent configuration options",
+ "agentFramework": "Agent Framework",
+ "agentFrameworkDescription": "The coding framework used for autonomous tasks",
+ "agentFrameworkAutoClaude": "Auto Claude",
+ "aiTerminalNaming": "AI Terminal Naming",
+ "aiTerminalNamingDescription": "Automatically name terminals based on commands (uses Haiku)",
+ "featureModelSettings": "Feature Model Settings",
+ "featureModelSettingsDescription": "Model and thinking level for Insights, Ideation, and Roadmap",
+ "model": "Model",
+ "thinkingLevel": "Thinking Level",
+ "paths": "Paths",
+ "pathsDescription": "Configure executable and framework paths",
+ "pythonPath": "Python Path",
+ "pythonPathDescription": "Path to Python executable (leave empty for default)",
+ "pythonPathPlaceholder": "python3 (default)",
+ "autoClaudePath": "Auto Claude Path",
+ "autoClaudePathDescription": "Relative path to auto-claude directory in projects",
+ "autoClaudePathPlaceholder": "auto-claude (default)",
+ "autoNameTerminals": "Automatically name terminals",
+ "autoNameTerminalsDescription": "Use AI to generate descriptive names for terminal tabs based on their activity"
+ },
+ "theme": {
+ "title": "Appearance",
+ "description": "Customize how Auto Claude looks",
+ "mode": "Mode",
+ "modeDescription": "Choose between light and dark themes",
+ "light": "Light",
+ "dark": "Dark",
+ "system": "System",
+ "colorTheme": "Color Theme",
+ "colorThemeDescription": "Choose your preferred color palette"
+ },
+ "updates": {
+ "title": "Updates",
+ "description": "Manage Auto Claude updates",
+ "appUpdateReady": "App Update Ready",
+ "newVersion": "New Version",
+ "released": "Released",
+ "downloading": "Downloading...",
+ "updateDownloaded": "Update downloaded! Click Install to restart and apply the update.",
+ "installAndRestart": "Install and Restart",
+ "downloadUpdate": "Download Update",
+ "version": "Version",
+ "loading": "Loading...",
+ "checkingForUpdates": "Checking for updates...",
+ "newVersionAvailable": "New version available:",
+ "latestVersion": "You're running the latest version.",
+ "viewRelease": "View full release on GitHub",
+ "unableToCheck": "Unable to check for updates",
+ "checkForUpdates": "Check for Updates",
+ "autoUpdateProjects": "Auto-Update Projects",
+ "autoUpdateProjectsDescription": "Automatically update Auto Claude in projects when a new version is available",
+ "betaUpdates": "Beta Updates",
+ "betaUpdatesDescription": "Receive pre-release beta versions with new features (may be less stable)"
+ },
+ "notifications": {
+ "title": "Notifications",
+ "description": "Configure default notification preferences",
+ "onTaskComplete": "On Task Complete",
+ "onTaskCompleteDescription": "Notify when a task finishes successfully",
+ "onTaskFailed": "On Task Failed",
+ "onTaskFailedDescription": "Notify when a task encounters an error",
+ "onReviewNeeded": "On Review Needed",
+ "onReviewNeededDescription": "Notify when QA requires your review",
+ "sound": "Sound",
+ "soundDescription": "Play sound with notifications"
+ },
+ "actions": {
+ "save": "Save Settings",
+ "rerunWizard": "Re-run Wizard",
+ "rerunWizardDescription": "Start the setup wizard again"
+ },
+ "projectSections": {
+ "general": {
+ "title": "General",
+ "description": "Auto-Build and agent config"
+ },
+ "claude": {
+ "title": "Claude Auth",
+ "description": "Claude authentication"
+ },
+ "linear": {
+ "title": "Linear",
+ "description": "Linear integration"
+ },
+ "github": {
+ "title": "GitHub",
+ "description": "GitHub issues sync"
+ },
+ "memory": {
+ "title": "Memory",
+ "description": "Graphiti memory backend"
+ }
+ },
+ "agentProfile": {
+ "label": "Agent Profile",
+ "title": "Default Agent Profile",
+ "sectionDescription": "Select a preset configuration for model and thinking level",
+ "profilesInfo": "Agent profiles provide preset configurations for Claude model and thinking level. When you create a new task, these settings will be used as defaults. You can always override them in the task creation wizard.",
+ "custom": "Custom",
+ "customConfiguration": "Custom Configuration",
+ "customDescription": "Choose model & thinking level",
+ "phaseConfiguration": "Phase Configuration",
+ "phaseConfigurationDescription": "Customize model and thinking level for each phase",
+ "clickToCustomize": "Click to customize",
+ "model": "Model",
+ "thinking": "Thinking",
+ "thinkingLevel": "Thinking Level",
+ "selectModel": "Select model",
+ "selectThinkingLevel": "Select thinking level",
+ "perPhaseOptimization": "(per-phase optimization)",
+ "resetToDefaults": "Reset to defaults",
+ "phaseConfigNote": "These settings will be used as defaults when creating new tasks with the Auto profile. You can override them per-task in the task creation wizard.",
+ "phases": {
+ "spec": {
+ "label": "Spec Creation",
+ "description": "Discovery, requirements, context gathering"
+ },
+ "planning": {
+ "label": "Planning",
+ "description": "Implementation planning and architecture"
+ },
+ "coding": {
+ "label": "Coding",
+ "description": "Actual code implementation"
+ },
+ "qa": {
+ "label": "QA Review",
+ "description": "Quality assurance and validation"
+ }
+ }
+ },
+ "workspace": {
+ "roles": {
+ "backend": "Backend",
+ "frontend": "Frontend",
+ "mobile": "Mobile",
+ "shared": "Shared",
+ "apiGateway": "API Gateway",
+ "worker": "Worker",
+ "other": "Other"
+ }
+ },
+ "integrations": {
+ "title": "Integrations",
+ "description": "Manage Claude accounts and API keys",
+ "claudeAccounts": "Claude Accounts",
+ "claudeAccountsDescription": "Add multiple Claude subscriptions to automatically switch between them when you hit rate limits.",
+ "noAccountsYet": "No accounts configured yet",
+ "default": "Default",
+ "active": "Active",
+ "authenticated": "Authenticated",
+ "needsAuth": "Needs Auth",
+ "authenticate": "Authenticate",
+ "setActive": "Set Active",
+ "manualTokenEntry": "Manual Token Entry",
+ "runSetupToken": "Run claude setup-token to get your token",
+ "tokenPlaceholder": "sk-ant-oat01-...",
+ "emailPlaceholder": "Email (optional, for display)",
+ "saveToken": "Save Token",
+ "accountNamePlaceholder": "Account name (e.g., Work, Personal)",
+ "autoSwitching": "Automatic Account Switching",
+ "autoSwitchingDescription": "Automatically switch between Claude accounts to avoid interruptions. Configure proactive monitoring to switch before hitting limits.",
+ "enableAutoSwitching": "Enable automatic switching",
+ "masterSwitch": "Master switch for all auto-swap features",
+ "proactiveMonitoring": "Proactive Monitoring",
+ "proactiveDescription": "Check usage regularly and swap before hitting limits",
+ "checkUsageEvery": "Check usage every",
+ "seconds15": "15 seconds",
+ "seconds30": "30 seconds (recommended)",
+ "minute1": "1 minute",
+ "disabled": "Disabled",
+ "sessionThreshold": "Session usage threshold",
+ "sessionThresholdDescription": "Switch when session usage reaches this level (recommended: 95%)",
+ "weeklyThreshold": "Weekly usage threshold",
+ "weeklyThresholdDescription": "Switch when weekly usage reaches this level (recommended: 99%)",
+ "reactiveRecovery": "Reactive Recovery",
+ "reactiveDescription": "Auto-swap when unexpected rate limit is hit",
+ "apiKeys": "API Keys",
+ "apiKeysInfo": "Keys set here are used as defaults. Individual projects can override these in their settings.",
+ "openaiKey": "OpenAI API Key",
+ "openaiKeyDescription": "Required for Graphiti memory backend (embeddings)"
+ }
+}
diff --git a/apps/frontend/src/shared/i18n/locales/en/tasks.json b/apps/frontend/src/shared/i18n/locales/en/tasks.json
new file mode 100644
index 00000000..c5b7c887
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/locales/en/tasks.json
@@ -0,0 +1,86 @@
+{
+ "status": {
+ "backlog": "Backlog",
+ "todo": "To Do",
+ "in_progress": "In Progress",
+ "review": "Review",
+ "complete": "Complete",
+ "archived": "Archived"
+ },
+ "actions": {
+ "start": "Start",
+ "stop": "Stop",
+ "recover": "Recover",
+ "resume": "Resume",
+ "archive": "Archive",
+ "delete": "Delete",
+ "view": "View Details"
+ },
+ "labels": {
+ "running": "Running",
+ "aiReview": "AI Review",
+ "needsReview": "Needs Review",
+ "pending": "Pending",
+ "stuck": "Stuck",
+ "incomplete": "Incomplete",
+ "recovering": "Recovering...",
+ "needsRecovery": "Needs Recovery",
+ "needsResume": "Needs Resume"
+ },
+ "reviewReason": {
+ "completed": "Completed",
+ "hasErrors": "Has Errors",
+ "qaIssues": "QA Issues",
+ "approvePlan": "Approve Plan"
+ },
+ "tooltips": {
+ "archiveTask": "Archive task",
+ "archiveAllDone": "Archive all done tasks"
+ },
+ "creation": {
+ "title": "Create New Task",
+ "description": "Describe what you want to build",
+ "placeholder": "Describe your task..."
+ },
+ "empty": {
+ "title": "No tasks yet",
+ "description": "Create your first task to get started"
+ },
+ "kanban": {
+ "emptyBacklog": "No tasks planned",
+ "emptyBacklogHint": "Add a task to get started",
+ "emptyInProgress": "Nothing running",
+ "emptyInProgressHint": "Start a task from Backlog",
+ "emptyAiReview": "No tasks in review",
+ "emptyAiReviewHint": "AI will review completed tasks",
+ "emptyHumanReview": "Nothing to review",
+ "emptyHumanReviewHint": "Tasks await your approval here",
+ "emptyDone": "No completed tasks",
+ "emptyDoneHint": "Approved tasks appear here",
+ "emptyDefault": "No tasks",
+ "dropHere": "Drop here",
+ "showArchived": "Show archived"
+ },
+ "execution": {
+ "phases": {
+ "idle": "Idle",
+ "planning": "Planning",
+ "coding": "Coding",
+ "reviewing": "Reviewing",
+ "fixing": "Fixing",
+ "complete": "Complete",
+ "failed": "Failed"
+ },
+ "labels": {
+ "interrupted": "Interrupted",
+ "progress": "Progress",
+ "entry": "entry",
+ "entries": "entries"
+ },
+ "shortPhases": {
+ "plan": "Plan",
+ "code": "Code",
+ "qa": "QA"
+ }
+ }
+}
diff --git a/apps/frontend/src/shared/i18n/locales/en/welcome.json b/apps/frontend/src/shared/i18n/locales/en/welcome.json
new file mode 100644
index 00000000..9bc04eff
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/locales/en/welcome.json
@@ -0,0 +1,16 @@
+{
+ "hero": {
+ "title": "Welcome to Auto Claude",
+ "subtitle": "Build software autonomously with AI-powered agents"
+ },
+ "actions": {
+ "newProject": "New Project",
+ "openProject": "Open Project"
+ },
+ "recentProjects": {
+ "title": "Recent Projects",
+ "empty": "No projects yet",
+ "emptyDescription": "Create a new project or open an existing one to get started",
+ "openFolder": "Open Folder"
+ }
+}
diff --git a/apps/frontend/src/shared/i18n/locales/fr/common.json b/apps/frontend/src/shared/i18n/locales/fr/common.json
new file mode 100644
index 00000000..4dcf1b58
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/locales/fr/common.json
@@ -0,0 +1,92 @@
+{
+ "buttons": {
+ "save": "Enregistrer",
+ "cancel": "Annuler",
+ "skip": "Passer",
+ "next": "Suivant",
+ "back": "Retour",
+ "close": "Fermer",
+ "initialize": "Initialiser",
+ "delete": "Supprimer",
+ "confirm": "Confirmer",
+ "retry": "Réessayer",
+ "create": "Créer",
+ "open": "Ouvrir",
+ "start": "Démarrer",
+ "stop": "Arrêter",
+ "refresh": "Actualiser",
+ "merge": "Fusionner",
+ "discard": "Abandonner",
+ "switch": "Changer",
+ "add": "Ajouter",
+ "gotIt": "Compris",
+ "continue": "Continuer",
+ "saving": "Enregistrement..."
+ },
+ "labels": {
+ "loading": "Chargement...",
+ "error": "Erreur",
+ "success": "Succès",
+ "initializing": "Initialisation...",
+ "saving": "Enregistrement...",
+ "noData": "Aucune donnée",
+ "optional": "Optionnel",
+ "required": "Requis",
+ "dismiss": "Ignorer"
+ },
+ "time": {
+ "justNow": "À l'instant",
+ "minutesAgo": "Il y a {{count}} min",
+ "hoursAgo": "Il y a {{count}}h",
+ "daysAgo": "Il y a {{count}}j"
+ },
+ "errors": {
+ "generic": "Une erreur s'est produite",
+ "networkError": "Erreur réseau",
+ "notFound": "Non trouvé",
+ "unauthorized": "Non autorisé"
+ },
+ "notification": {
+ "accountSwitched": "Compte changé",
+ "swapFrom": "Passage de",
+ "swapTo": "à",
+ "swapReason": "(changement {{reason}})"
+ },
+ "rateLimit": {
+ "title": "Limite atteinte",
+ "resetsAt": "Réinitialisation {{time}}",
+ "hitLimit": "{{source}} a atteint la limite d'utilisation",
+ "clickToManage": "Cliquez pour gérer →",
+ "modalTitle": "Limite d'utilisation Claude Code atteinte",
+ "modalDescription": "Vous avez atteint votre limite d'utilisation Claude Code pour cette période.",
+ "profile": "Profil : {{name}}",
+ "autoSwitching": "Changement automatique vers {{name}}",
+ "autoSwitchingDescription": "Claude va redémarrer avec votre autre compte automatiquement",
+ "resetsTime": "Réinitialisation {{time}}",
+ "usageRestored": "Votre utilisation sera restaurée à ce moment",
+ "switchAccount": "Changer de compte Claude",
+ "useAnotherAccount": "Utiliser un autre compte",
+ "recommended": "Recommandé : {{name}} a plus de capacité disponible.",
+ "otherSubscriptions": "Vous avez d'autres abonnements Claude configurés. Changez pour continuer à travailler :",
+ "selectAccount": "Sélectionner un compte...",
+ "switching": "Changement...",
+ "addNewAccount": "Ajouter un nouveau compte...",
+ "addAnotherSubscription": "Ajoutez un autre abonnement Claude pour basculer automatiquement quand vous atteignez les limites.",
+ "addAnotherAccount": "Ajouter un autre compte :",
+ "connectAccount": "Connecter un compte Claude :",
+ "accountNamePlaceholder": "Nom du compte (ex. Travail, Personnel)",
+ "willOpenLogin": "Cela ouvrira la connexion Claude pour authentifier le nouveau compte.",
+ "autoSwitchOnRateLimit": "Changement auto en cas de limite",
+ "upgradeTitle": "Passez à la version supérieure pour plus d'utilisation",
+ "upgradeDescription": "Mettez à niveau votre abonnement Claude pour des limites d'utilisation plus élevées.",
+ "upgradeSubscription": "Mettre à niveau l'abonnement",
+ "sources": {
+ "changelog": "Changelog",
+ "task": "Tâche",
+ "roadmap": "Feuille de route",
+ "ideation": "Idéation",
+ "titleGenerator": "Générateur de titre",
+ "claude": "Claude"
+ }
+ }
+}
diff --git a/apps/frontend/src/shared/i18n/locales/fr/dialogs.json b/apps/frontend/src/shared/i18n/locales/fr/dialogs.json
new file mode 100644
index 00000000..191ded86
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/locales/fr/dialogs.json
@@ -0,0 +1,122 @@
+{
+ "initialize": {
+ "title": "Initialiser Auto Claude",
+ "description": "Ce projet n'a pas Auto Claude initialisé. Voulez-vous le configurer maintenant ?",
+ "willDo": "Ceci va :",
+ "createFolder": "Créer un dossier .auto-claude dans votre projet",
+ "copyFramework": "Copier les fichiers du framework Auto Claude",
+ "setupSpecs": "Configurer le répertoire des spécifications pour vos tâches",
+ "sourcePathNotConfigured": "Chemin source non configuré",
+ "sourcePathNotConfiguredDescription": "Veuillez définir le chemin source Auto Claude dans les paramètres de l'application avant d'initialiser.",
+ "initFailed": "Échec de l'initialisation",
+ "initFailedDescription": "Échec de l'initialisation de Auto Claude. Veuillez réessayer."
+ },
+ "gitSetup": {
+ "title": "Dépôt Git requis",
+ "description": "Auto Claude utilise git pour construire des fonctionnalités en toute sécurité dans des espaces de travail isolés",
+ "notGitRepo": "Ce dossier n'est pas un dépôt git",
+ "noCommits": "Le dépôt git n'a pas de commits",
+ "needsInit": "Git doit être initialisé avant que Auto Claude puisse gérer votre code.",
+ "needsCommit": "Au moins un commit est requis pour que Auto Claude puisse créer des worktrees.",
+ "willSetup": "Nous allons configurer git pour vous :",
+ "initRepo": "Initialiser un nouveau dépôt git",
+ "createCommit": "Créer un commit initial avec vos fichiers actuels",
+ "manual": "Préférez-vous le faire manuellement ?",
+ "settingUp": "Configuration de Git",
+ "initializingRepo": "Initialisation du dépôt git et création du commit initial...",
+ "success": "Git initialisé",
+ "readyToUse": "Votre projet est maintenant prêt à être utilisé avec Auto Claude !"
+ },
+ "githubSetup": {
+ "connectTitle": "Connecter à GitHub",
+ "connectDescription": "Auto Claude nécessite GitHub pour gérer vos branches de code et maintenir les tâches à jour.",
+ "claudeTitle": "Connecter à Claude AI",
+ "claudeDescription": "Auto Claude utilise Claude AI pour des fonctionnalités intelligentes comme la génération de feuille de route, l'automatisation des tâches et l'idéation.",
+ "selectRepo": "Sélectionner le dépôt",
+ "repoDescription": "Auto Claude utilisera ce dépôt pour gérer les branches de tâches et maintenir votre code à jour.",
+ "selectBranch": "Sélectionner la branche de base",
+ "branchDescription": "Choisissez quelle branche Auto Claude doit utiliser comme base pour créer les branches de tâches.",
+ "whyBranch": "Pourquoi sélectionner une branche ?",
+ "branchExplanation": "Auto Claude crée des espaces de travail isolés pour chaque tâche. Sélectionner la bonne branche de base garantit que vos tâches démarrent avec le code le plus récent de votre ligne de développement principale.",
+ "ready": "Auto Claude est prêt à l'emploi ! Vous pouvez maintenant créer des tâches qui seront automatiquement basées sur la branche {{branchName}}."
+ },
+ "worktrees": {
+ "title": "Worktrees",
+ "description": "Gérez les espaces de travail isolés pour vos tâches Auto Claude",
+ "empty": "Aucun worktree",
+ "emptyDescription": "Les worktrees sont créés automatiquement quand Auto Claude construit des fonctionnalités. Ils fournissent des espaces de travail isolés pour chaque tâche.",
+ "merge": "Fusionner le worktree",
+ "mergeDescription": "Fusionner les modifications de ce worktree dans la branche de base.",
+ "delete": "Supprimer le worktree ?",
+ "deleteDescription": "Ceci supprimera définitivement le worktree et toutes les modifications non committées. Cette action est irréversible."
+ },
+ "update": {
+ "title": "Auto Claude",
+ "projectInitialized": "Le projet est initialisé."
+ },
+ "addFeature": {
+ "title": "Ajouter une fonctionnalité",
+ "description": "Ajoutez une nouvelle fonctionnalité à votre feuille de route. Fournissez des détails sur ce que vous voulez construire et comment cela s'intègre dans votre stratégie produit.",
+ "featureTitle": "Titre de la fonctionnalité",
+ "featureTitlePlaceholder": "ex. Authentification utilisateur, Mode sombre",
+ "featureDescription": "Description",
+ "featureDescriptionPlaceholder": "Décrivez ce que fait cette fonctionnalité et pourquoi elle est utile aux utilisateurs.",
+ "rationale": "Justification",
+ "optional": "optionnel",
+ "rationalePlaceholder": "Expliquez pourquoi cette fonctionnalité devrait être construite et comment elle s'intègre dans la vision produit.",
+ "phase": "Phase",
+ "selectPhase": "Sélectionner une phase",
+ "priority": "Priorité",
+ "selectPriority": "Sélectionner une priorité",
+ "complexity": "Complexité",
+ "selectComplexity": "Sélectionner la complexité",
+ "impact": "Impact",
+ "selectImpact": "Sélectionner l'impact",
+ "lowComplexity": "Faible",
+ "mediumComplexity": "Moyen",
+ "highComplexity": "Élevé",
+ "lowImpact": "Impact faible",
+ "mediumImpact": "Impact moyen",
+ "highImpact": "Impact élevé",
+ "titleRequired": "Le titre est requis",
+ "descriptionRequired": "La description est requise",
+ "phaseRequired": "Veuillez sélectionner une phase",
+ "cancel": "Annuler",
+ "adding": "Ajout en cours...",
+ "addFeature": "Ajouter la fonctionnalité",
+ "failedToAdd": "Échec de l'ajout de la fonctionnalité. Veuillez réessayer."
+ },
+ "addProject": {
+ "title": "Ajouter un projet",
+ "description": "Choisissez comment vous souhaitez ajouter un projet",
+ "openExisting": "Ouvrir un dossier existant",
+ "openExistingDescription": "Parcourir vers un projet existant sur votre ordinateur",
+ "createNew": "Créer un nouveau projet",
+ "createNewDescription": "Commencer avec un nouveau dossier de projet",
+ "createNewTitle": "Créer un nouveau projet",
+ "createNewSubtitle": "Configurer un nouveau dossier de projet",
+ "projectName": "Nom du projet",
+ "projectNamePlaceholder": "mon-super-projet",
+ "projectNameHelp": "Ce sera le nom du dossier. Utilisez des minuscules avec des tirets.",
+ "location": "Emplacement",
+ "locationPlaceholder": "Sélectionner un dossier...",
+ "willCreate": "Va créer :",
+ "browse": "Parcourir",
+ "initGit": "Initialiser un dépôt git",
+ "back": "Retour",
+ "creating": "Création en cours...",
+ "createProject": "Créer le projet",
+ "nameRequired": "Veuillez entrer un nom de projet",
+ "locationRequired": "Veuillez sélectionner un emplacement",
+ "failedToOpen": "Échec de l'ouverture du projet",
+ "failedToCreate": "Échec de la création du projet"
+ },
+ "customModel": {
+ "title": "Configuration du modèle personnalisé",
+ "description": "Configurez le modèle et le niveau de réflexion pour cette session de chat.",
+ "model": "Modèle",
+ "thinkingLevel": "Niveau de réflexion",
+ "cancel": "Annuler",
+ "apply": "Appliquer"
+ }
+}
diff --git a/apps/frontend/src/shared/i18n/locales/fr/navigation.json b/apps/frontend/src/shared/i18n/locales/fr/navigation.json
new file mode 100644
index 00000000..cbbf0a64
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/locales/fr/navigation.json
@@ -0,0 +1,30 @@
+{
+ "sections": {
+ "project": "Projet",
+ "tools": "Outils"
+ },
+ "items": {
+ "kanban": "Tableau Kanban",
+ "terminals": "Terminaux Agent",
+ "insights": "Insights",
+ "roadmap": "Feuille de route",
+ "ideation": "Idéation",
+ "changelog": "Journal des modifications",
+ "context": "Contexte",
+ "githubIssues": "Issues GitHub",
+ "gitlabIssues": "Issues GitLab",
+ "worktrees": "Worktrees"
+ },
+ "actions": {
+ "settings": "Paramètres",
+ "help": "Aide & Feedback",
+ "newTask": "Nouvelle tâche"
+ },
+ "tooltips": {
+ "settings": "Paramètres de l'application",
+ "help": "Aide & Feedback"
+ },
+ "messages": {
+ "initializeToCreateTasks": "Initialisez Auto Claude pour créer des tâches"
+ }
+}
diff --git a/apps/frontend/src/shared/i18n/locales/fr/onboarding.json b/apps/frontend/src/shared/i18n/locales/fr/onboarding.json
new file mode 100644
index 00000000..2763781e
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/locales/fr/onboarding.json
@@ -0,0 +1,68 @@
+{
+ "wizard": {
+ "title": "Assistant de configuration",
+ "description": "Configurez votre environnement Auto Claude en quelques étapes simples",
+ "helpText": "Cet assistant vous aidera à configurer votre environnement en quelques étapes. Vous pouvez configurer votre token OAuth Claude, activer les fonctionnalités de mémoire et créer votre première tâche."
+ },
+ "welcome": {
+ "title": "Bienvenue sur Auto Claude",
+ "subtitle": "Construisez des logiciels de manière autonome avec des agents IA",
+ "getStarted": "Commencer",
+ "skip": "Passer la configuration",
+ "features": {
+ "aiPowered": {
+ "title": "Développement assisté par IA",
+ "description": "Générez du code et construisez des fonctionnalités avec les agents Claude Code"
+ },
+ "specDriven": {
+ "title": "Workflow basé sur les specs",
+ "description": "Définissez des tâches avec des spécifications claires et laissez Auto Claude gérer l'implémentation"
+ },
+ "memory": {
+ "title": "Mémoire & Contexte",
+ "description": "Mémoire persistante entre les sessions avec Graphiti"
+ },
+ "parallel": {
+ "title": "Exécution parallèle",
+ "description": "Exécutez plusieurs agents en parallèle pour des cycles de développement plus rapides"
+ }
+ }
+ },
+ "oauth": {
+ "title": "Authentification Claude",
+ "description": "Connectez votre compte Claude pour activer les fonctionnalités IA"
+ },
+ "memory": {
+ "title": "Mémoire",
+ "description": "La mémoire Auto Claude aide à retenir le contexte entre vos sessions de code"
+ },
+ "completion": {
+ "title": "Vous êtes prêt !",
+ "subtitle": "Auto Claude est prêt à vous aider à construire des logiciels incroyables",
+ "setupComplete": "Configuration terminée",
+ "setupCompleteDescription": "Votre environnement est configuré et prêt. Vous pouvez commencer à créer des tâches immédiatement ou explorer l'application à votre rythme.",
+ "whatsNext": "Et maintenant ?",
+ "createTask": {
+ "title": "Créer une tâche",
+ "description": "Commencez par créer votre première tâche pour voir Auto Claude en action.",
+ "action": "Ouvrir le créateur de tâches"
+ },
+ "customizeSettings": {
+ "title": "Personnaliser les paramètres",
+ "description": "Affinez vos préférences, configurez les intégrations ou relancez cet assistant.",
+ "action": "Ouvrir les paramètres"
+ },
+ "exploreDocs": {
+ "title": "Explorer la documentation",
+ "description": "En savoir plus sur les fonctionnalités avancées, les bonnes pratiques et le dépannage."
+ },
+ "finish": "Terminer et commencer à construire",
+ "rerunHint": "Vous pouvez toujours relancer cet assistant depuis Paramètres → Application"
+ },
+ "steps": {
+ "welcome": "Bienvenue",
+ "auth": "Auth",
+ "memory": "Mémoire",
+ "done": "Terminé"
+ }
+}
diff --git a/apps/frontend/src/shared/i18n/locales/fr/settings.json b/apps/frontend/src/shared/i18n/locales/fr/settings.json
new file mode 100644
index 00000000..eef0f006
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/locales/fr/settings.json
@@ -0,0 +1,240 @@
+{
+ "title": "Paramètres",
+ "tabs": {
+ "app": "Paramètres de l'app",
+ "project": "Paramètres du projet"
+ },
+ "sections": {
+ "appearance": {
+ "title": "Apparence",
+ "description": "Personnalisez l'apparence de Auto Claude"
+ },
+ "display": {
+ "title": "Affichage",
+ "description": "Ajustez la taille des éléments de l'interface"
+ },
+ "language": {
+ "title": "Langue",
+ "description": "Choisissez votre langue préférée"
+ },
+ "agent": {
+ "title": "Paramètres de l'agent",
+ "description": "Modèle par défaut et framework"
+ },
+ "paths": {
+ "title": "Chemins",
+ "description": "Chemins Python et framework"
+ },
+ "integrations": {
+ "title": "Intégrations",
+ "description": "Clés API & comptes Claude"
+ },
+ "updates": {
+ "title": "Mises à jour",
+ "description": "Mises à jour Auto Claude"
+ },
+ "notifications": {
+ "title": "Notifications",
+ "description": "Préférences d'alertes"
+ }
+ },
+ "language": {
+ "label": "Langue de l'interface",
+ "description": "Sélectionnez la langue de l'interface de l'application"
+ },
+ "scale": {
+ "presets": "Préréglages d'échelle",
+ "presetsDescription": "Options d'échelle rapides pour les préférences courantes",
+ "fineTune": "Ajustement fin",
+ "fineTuneDescription": "Ajustez de 75% à 200% par incréments de 5%",
+ "default": "Par défaut",
+ "comfortable": "Confortable",
+ "large": "Grand",
+ "preview": "Les changements sont prévisualisés immédiatement. Cliquez sur Enregistrer pour les conserver."
+ },
+ "general": {
+ "otherAgentSettings": "Autres paramètres de l'agent",
+ "otherAgentSettingsDescription": "Options de configuration supplémentaires de l'agent",
+ "agentFramework": "Framework de l'agent",
+ "agentFrameworkDescription": "Le framework de codage utilisé pour les tâches autonomes",
+ "agentFrameworkAutoClaude": "Auto Claude",
+ "aiTerminalNaming": "Nommage IA des terminaux",
+ "aiTerminalNamingDescription": "Nommer automatiquement les terminaux en fonction des commandes (utilise Haiku)",
+ "featureModelSettings": "Paramètres du modèle de fonctionnalité",
+ "featureModelSettingsDescription": "Modèle et niveau de réflexion pour Insights, Idéation et Roadmap",
+ "model": "Modèle",
+ "thinkingLevel": "Niveau de réflexion",
+ "paths": "Chemins",
+ "pathsDescription": "Configurer les chemins des exécutables et du framework",
+ "pythonPath": "Chemin Python",
+ "pythonPathDescription": "Chemin vers l'exécutable Python (laisser vide pour la valeur par défaut)",
+ "pythonPathPlaceholder": "python3 (par défaut)",
+ "autoClaudePath": "Chemin Auto Claude",
+ "autoClaudePathDescription": "Chemin relatif vers le répertoire auto-claude dans les projets",
+ "autoClaudePathPlaceholder": "auto-claude (par défaut)",
+ "autoNameTerminals": "Nommer automatiquement les terminaux",
+ "autoNameTerminalsDescription": "Utiliser l'IA pour générer des noms descriptifs pour les onglets de terminal en fonction de leur activité"
+ },
+ "theme": {
+ "title": "Apparence",
+ "description": "Personnalisez l'apparence de Auto Claude",
+ "mode": "Mode",
+ "modeDescription": "Choisir entre les thèmes clair et sombre",
+ "light": "Clair",
+ "dark": "Sombre",
+ "system": "Système",
+ "colorTheme": "Thème de couleur",
+ "colorThemeDescription": "Choisissez votre palette de couleurs préférée"
+ },
+ "updates": {
+ "title": "Mises à jour",
+ "description": "Gérer les mises à jour de Auto Claude",
+ "appUpdateReady": "Mise à jour de l'app prête",
+ "newVersion": "Nouvelle version",
+ "released": "Publiée le",
+ "downloading": "Téléchargement...",
+ "updateDownloaded": "Mise à jour téléchargée ! Cliquez sur Installer pour redémarrer et appliquer la mise à jour.",
+ "installAndRestart": "Installer et redémarrer",
+ "downloadUpdate": "Télécharger la mise à jour",
+ "version": "Version",
+ "loading": "Chargement...",
+ "checkingForUpdates": "Vérification des mises à jour...",
+ "newVersionAvailable": "Nouvelle version disponible :",
+ "latestVersion": "Vous utilisez la dernière version.",
+ "viewRelease": "Voir la version complète sur GitHub",
+ "unableToCheck": "Impossible de vérifier les mises à jour",
+ "checkForUpdates": "Vérifier les mises à jour",
+ "autoUpdateProjects": "Mise à jour automatique des projets",
+ "autoUpdateProjectsDescription": "Mettre à jour automatiquement Auto Claude dans les projets quand une nouvelle version est disponible",
+ "betaUpdates": "Mises à jour bêta",
+ "betaUpdatesDescription": "Recevoir les versions bêta pré-release avec de nouvelles fonctionnalités (peut être moins stable)"
+ },
+ "notifications": {
+ "title": "Notifications",
+ "description": "Configurer les préférences de notification par défaut",
+ "onTaskComplete": "À la fin d'une tâche",
+ "onTaskCompleteDescription": "Notifier quand une tâche se termine avec succès",
+ "onTaskFailed": "En cas d'échec",
+ "onTaskFailedDescription": "Notifier quand une tâche rencontre une erreur",
+ "onReviewNeeded": "Révision requise",
+ "onReviewNeededDescription": "Notifier quand le QA nécessite votre révision",
+ "sound": "Son",
+ "soundDescription": "Jouer un son avec les notifications"
+ },
+ "actions": {
+ "save": "Enregistrer les paramètres",
+ "rerunWizard": "Relancer l'assistant",
+ "rerunWizardDescription": "Redémarrer l'assistant de configuration"
+ },
+ "projectSections": {
+ "general": {
+ "title": "Général",
+ "description": "Auto-Build et configuration de l'agent"
+ },
+ "claude": {
+ "title": "Auth Claude",
+ "description": "Authentification Claude"
+ },
+ "linear": {
+ "title": "Linear",
+ "description": "Intégration Linear"
+ },
+ "github": {
+ "title": "GitHub",
+ "description": "Synchronisation issues GitHub"
+ },
+ "memory": {
+ "title": "Mémoire",
+ "description": "Backend mémoire Graphiti"
+ }
+ },
+ "agentProfile": {
+ "label": "Profil d'agent",
+ "title": "Profil d'agent par défaut",
+ "sectionDescription": "Sélectionnez une configuration prédéfinie pour le modèle et le niveau de réflexion",
+ "profilesInfo": "Les profils d'agent fournissent des configurations prédéfinies pour le modèle Claude et le niveau de réflexion. Quand vous créez une nouvelle tâche, ces paramètres seront utilisés par défaut. Vous pouvez toujours les modifier dans l'assistant de création de tâche.",
+ "custom": "Personnalisé",
+ "customConfiguration": "Configuration personnalisée",
+ "customDescription": "Choisir le modèle et le niveau de réflexion",
+ "phaseConfiguration": "Configuration par phase",
+ "phaseConfigurationDescription": "Personnaliser le modèle et le niveau de réflexion pour chaque phase",
+ "clickToCustomize": "Cliquer pour personnaliser",
+ "model": "Modèle",
+ "thinking": "Réflexion",
+ "thinkingLevel": "Niveau de réflexion",
+ "selectModel": "Sélectionner un modèle",
+ "selectThinkingLevel": "Sélectionner un niveau de réflexion",
+ "perPhaseOptimization": "(optimisation par phase)",
+ "resetToDefaults": "Réinitialiser par défaut",
+ "phaseConfigNote": "Ces paramètres seront utilisés par défaut lors de la création de nouvelles tâches avec le profil Auto. Vous pouvez les modifier par tâche dans l'assistant de création.",
+ "phases": {
+ "spec": {
+ "label": "Création de spec",
+ "description": "Découverte, exigences, collecte de contexte"
+ },
+ "planning": {
+ "label": "Planification",
+ "description": "Planification de l'implémentation et architecture"
+ },
+ "coding": {
+ "label": "Codage",
+ "description": "Implémentation du code"
+ },
+ "qa": {
+ "label": "Révision QA",
+ "description": "Assurance qualité et validation"
+ }
+ }
+ },
+ "workspace": {
+ "roles": {
+ "backend": "Backend",
+ "frontend": "Frontend",
+ "mobile": "Mobile",
+ "shared": "Partagé",
+ "apiGateway": "Passerelle API",
+ "worker": "Worker",
+ "other": "Autre"
+ }
+ },
+ "integrations": {
+ "title": "Intégrations",
+ "description": "Gérer les comptes Claude et les clés API",
+ "claudeAccounts": "Comptes Claude",
+ "claudeAccountsDescription": "Ajoutez plusieurs abonnements Claude pour basculer automatiquement entre eux quand vous atteignez les limites.",
+ "noAccountsYet": "Aucun compte configuré",
+ "default": "Par défaut",
+ "active": "Actif",
+ "authenticated": "Authentifié",
+ "needsAuth": "Auth requise",
+ "authenticate": "Authentifier",
+ "setActive": "Définir actif",
+ "manualTokenEntry": "Saisie manuelle du token",
+ "runSetupToken": "Exécutez claude setup-token pour obtenir votre token",
+ "tokenPlaceholder": "sk-ant-oat01-...",
+ "emailPlaceholder": "Email (optionnel, pour l'affichage)",
+ "saveToken": "Enregistrer le token",
+ "accountNamePlaceholder": "Nom du compte (ex: Travail, Personnel)",
+ "autoSwitching": "Basculement automatique de compte",
+ "autoSwitchingDescription": "Basculer automatiquement entre les comptes Claude pour éviter les interruptions. Configurez la surveillance proactive pour changer avant d'atteindre les limites.",
+ "enableAutoSwitching": "Activer le basculement automatique",
+ "masterSwitch": "Interrupteur principal pour toutes les fonctionnalités auto-swap",
+ "proactiveMonitoring": "Surveillance proactive",
+ "proactiveDescription": "Vérifier l'utilisation régulièrement et changer avant d'atteindre les limites",
+ "checkUsageEvery": "Vérifier l'utilisation toutes les",
+ "seconds15": "15 secondes",
+ "seconds30": "30 secondes (recommandé)",
+ "minute1": "1 minute",
+ "disabled": "Désactivé",
+ "sessionThreshold": "Seuil d'utilisation de session",
+ "sessionThresholdDescription": "Changer quand l'utilisation de session atteint ce niveau (recommandé: 95%)",
+ "weeklyThreshold": "Seuil d'utilisation hebdomadaire",
+ "weeklyThresholdDescription": "Changer quand l'utilisation hebdomadaire atteint ce niveau (recommandé: 99%)",
+ "reactiveRecovery": "Récupération réactive",
+ "reactiveDescription": "Basculer automatiquement quand une limite inattendue est atteinte",
+ "apiKeys": "Clés API",
+ "apiKeysInfo": "Les clés définies ici sont utilisées par défaut. Les projets individuels peuvent les remplacer dans leurs paramètres.",
+ "openaiKey": "Clé API OpenAI",
+ "openaiKeyDescription": "Requise pour le backend mémoire Graphiti (embeddings)"
+ }
+}
diff --git a/apps/frontend/src/shared/i18n/locales/fr/tasks.json b/apps/frontend/src/shared/i18n/locales/fr/tasks.json
new file mode 100644
index 00000000..4a819a32
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/locales/fr/tasks.json
@@ -0,0 +1,86 @@
+{
+ "status": {
+ "backlog": "Backlog",
+ "todo": "À faire",
+ "in_progress": "En cours",
+ "review": "Révision",
+ "complete": "Terminé",
+ "archived": "Archivé"
+ },
+ "actions": {
+ "start": "Démarrer",
+ "stop": "Arrêter",
+ "recover": "Récupérer",
+ "resume": "Reprendre",
+ "archive": "Archiver",
+ "delete": "Supprimer",
+ "view": "Voir les détails"
+ },
+ "labels": {
+ "running": "En cours",
+ "aiReview": "Révision IA",
+ "needsReview": "À réviser",
+ "pending": "En attente",
+ "stuck": "Bloqué",
+ "incomplete": "Incomplet",
+ "recovering": "Récupération...",
+ "needsRecovery": "Récupération requise",
+ "needsResume": "Reprise requise"
+ },
+ "reviewReason": {
+ "completed": "Terminé",
+ "hasErrors": "Contient des erreurs",
+ "qaIssues": "Problèmes QA",
+ "approvePlan": "Approuver le plan"
+ },
+ "tooltips": {
+ "archiveTask": "Archiver la tâche",
+ "archiveAllDone": "Archiver toutes les tâches terminées"
+ },
+ "creation": {
+ "title": "Créer une nouvelle tâche",
+ "description": "Décrivez ce que vous voulez construire",
+ "placeholder": "Décrivez votre tâche..."
+ },
+ "empty": {
+ "title": "Aucune tâche",
+ "description": "Créez votre première tâche pour commencer"
+ },
+ "kanban": {
+ "emptyBacklog": "Aucune tâche planifiée",
+ "emptyBacklogHint": "Ajoutez une tâche pour commencer",
+ "emptyInProgress": "Rien en cours",
+ "emptyInProgressHint": "Démarrez une tâche depuis le Backlog",
+ "emptyAiReview": "Aucune tâche en révision",
+ "emptyAiReviewHint": "L'IA révisera les tâches terminées",
+ "emptyHumanReview": "Rien à réviser",
+ "emptyHumanReviewHint": "Les tâches attendent votre approbation ici",
+ "emptyDone": "Aucune tâche terminée",
+ "emptyDoneHint": "Les tâches approuvées apparaissent ici",
+ "emptyDefault": "Aucune tâche",
+ "dropHere": "Déposer ici",
+ "showArchived": "Afficher les archivées"
+ },
+ "execution": {
+ "phases": {
+ "idle": "Inactif",
+ "planning": "Planification",
+ "coding": "Codage",
+ "reviewing": "Révision",
+ "fixing": "Correction",
+ "complete": "Terminé",
+ "failed": "Échoué"
+ },
+ "labels": {
+ "interrupted": "Interrompu",
+ "progress": "Progression",
+ "entry": "entrée",
+ "entries": "entrées"
+ },
+ "shortPhases": {
+ "plan": "Plan",
+ "code": "Code",
+ "qa": "QA"
+ }
+ }
+}
diff --git a/apps/frontend/src/shared/i18n/locales/fr/welcome.json b/apps/frontend/src/shared/i18n/locales/fr/welcome.json
new file mode 100644
index 00000000..2341f21f
--- /dev/null
+++ b/apps/frontend/src/shared/i18n/locales/fr/welcome.json
@@ -0,0 +1,16 @@
+{
+ "hero": {
+ "title": "Bienvenue sur Auto Claude",
+ "subtitle": "Construisez des logiciels de manière autonome avec des agents IA"
+ },
+ "actions": {
+ "newProject": "Nouveau projet",
+ "openProject": "Ouvrir un projet"
+ },
+ "recentProjects": {
+ "title": "Projets récents",
+ "empty": "Aucun projet",
+ "emptyDescription": "Créez un nouveau projet ou ouvrez-en un existant pour commencer",
+ "openFolder": "Ouvrir le dossier"
+ }
+}
diff --git a/apps/frontend/src/shared/types/settings.ts b/apps/frontend/src/shared/types/settings.ts
index c81d53d6..8597bbb8 100644
--- a/apps/frontend/src/shared/types/settings.ts
+++ b/apps/frontend/src/shared/types/settings.ts
@@ -4,6 +4,7 @@
import type { NotificationSettings } from './project';
import type { ChangelogFormat, ChangelogAudience, ChangelogEmojiLevel } from './changelog';
+import type { SupportedLanguage } from '../constants/i18n';
// Color theme types for multi-theme support
export type ColorTheme = 'default' | 'dusk' | 'lime' | 'ocean' | 'retro' | 'neo' | 'forest';
@@ -113,6 +114,8 @@ export interface AppSettings {
betaUpdates?: boolean;
// Migration flags (internal use)
_migratedAgentProfileToAuto?: boolean;
+ // Language preference for UI (i18n)
+ language?: SupportedLanguage;
}
// Auto-Claude Source Environment Configuration (for auto-claude repo .env)