From 5be85c265be3d844c7159471aa5d63cefeb31a26 Mon Sep 17 00:00:00 2001 From: ZhenYi <434836402@qq.com> Date: Mon, 27 Apr 2026 21:31:01 +0800 Subject: [PATCH] feat(i18n): add German and French translation files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Translate all UI strings to German (Deutsch) and French (Français) with proper technical terminology. --- i18n/de.json | 1408 ++++++++++++++++++++++++++++ i18n/fr.json | 1408 ++++++++++++++++++++++++++++ public/locales/de/translation.json | 1408 ++++++++++++++++++++++++++++ public/locales/fr/translation.json | 1408 ++++++++++++++++++++++++++++ 4 files changed, 5632 insertions(+) create mode 100644 i18n/de.json create mode 100644 i18n/fr.json create mode 100644 public/locales/de/translation.json create mode 100644 public/locales/fr/translation.json diff --git a/i18n/de.json b/i18n/de.json new file mode 100644 index 0000000..72fa29a --- /dev/null +++ b/i18n/de.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": "KI-Agenten", + "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": "Genehmigen", + "viewDiff": "Diff anzeigen" + }, + "nav": { + "platform": "Plattform", + "skills": "Skills", + "network": "Netzwerk", + "pricing": "Preise", + "signIn": "Anmelden", + "joinBeta": "Beta beitreten", + "commandAsServiceNav": "Command as Service", + "collaborativeRoomsNav": "Collaborative Rooms", + "aiAgentsNav": "KI-Agenten", + "gitRepositoriesNav": "Git-Repositories", + "exploreSkillsNav": "Skills erkunden", + "publishSkillNav": "Skill veroeffentlichen", + "skillDocumentationNav": "Skill-Dokumentation", + "exploreNetworkNav": "Netzwerk erkunden", + "publicRoomsNav": "Oeffentliche Raeume", + "developerApiNav": "Developer API", + "plansPricingNav": "Plaene & Preise", + "enterpriseNav": "Enterprise", + "billingFaqNav": "Abrechnungs-FAQ" + }, + "footer": { + "readyHeading": "Bereit fuer das agentische Zeitalter?", + "getStartedFree": "Kostenlos starten", + "contactSales": "Vertrieb kontaktieren", + "platform": "Plattform", + "skills": "Skills", + "developers": "Entwickler", + "company": "Unternehmen", + "gitRepositories": "Git-Repositories", + "issuesPullRequests": "Issues & PRs", + "collaborativeRooms": "Collaborative Rooms", + "aiAgents": "KI-Agenten", + "commandStream": "Command Stream", + "skillRegistry": "Skill Registry", + "publishSkill": "Skill veroeffentlichen", + "skillDocs": "Skill-Dokumentation", + "community": "Community", + "documentation": "Dokumentation", + "cliReference": "CLI-Referenz", + "apiReference": "API-Referenz", + "status": "Status", + "about": "Ueber uns", + "careers": "Karriere", + "contact": "Kontakt", + "privacy": "Datenschutz", + "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": "Anmelden", + "subtitleWelcome": "Willkommen zurueck bei GitDataAI", + "subtitleContinue": "Weiter zu {path}", + "usernameLabel": "Benutzername", + "usernamePlaceholder": "Benutzernamen eingeben", + "passwordLabel": "Passwort", + "passwordForgot": "Vergessen?", + "verificationLabel": "Verifizierung", + "verificationPlaceholder": "Code eingeben", + "submitButton": "Anmelden", + "noAccount": "Noch kein Konto?", + "createOne": "Erstellen", + "errorFillRequired": "Bitte alle erforderlichen Felder ausfuellen.", + "errorInvalidCredentials": "Ungueltige Anmeldedaten. Bitte erneut versuchen." + }, + "register": { + "heading": "Konto erstellen", + "subtitle": "Werden Sie Teil der naechsten Generation der Mensch-Agent-Zusammenarbeit", + "emailLabel": "E-Mail", + "emailPlaceholder": "name@firma.de", + "usernameLabel": "Benutzername", + "usernamePlaceholder": "architekt_01", + "passwordLabel": "Passwort", + "passwordPlaceholder": "••••••••", + "confirmLabel": "Bestaetigen", + "confirmPlaceholder": "••••••••", + "verificationLabel": "Verifizierung", + "verificationPlaceholder": "Captcha", + "submitButton": "Konto erstellen", + "alreadyHaveAccount": "Bereits ein Konto?", + "signIn": "Anmelden", + "encrypted": "Verschluesselt", + "errorEmailRequired": "E-Mail ist erforderlich", + "errorInvalidEmail": "Ungueltige E-Mail-Adresse", + "errorUsernameRequired": "Benutzername ist erforderlich", + "errorUsernameLength": "Benutzername muss mindestens 3 Zeichen haben", + "errorPasswordRequired": "Passwort ist erforderlich", + "errorPasswordLength": "Passwort muss mindestens 8 Zeichen haben", + "errorPasswordComplexity": "Passwort muss Gross- und Kleinbuchstaben sowie eine Ziffer enthalten", + "errorPasswordMismatch": "Passwoerter stimmen nicht ueberein", + "errorCaptchaRequired": "Verifizierungscode ist erforderlich", + "errorRegistrationFailed": "Registrierung fehlgeschlagen", + "successAccountCreated": "Konto erfolgreich erstellt!" + }, + "passwordReset": { + "heading": "Passwort zuruecksetzen", + "subtitle": "Geben Sie Ihre E-Mail-Adresse ein, und wir senden Ihnen einen Link zum Zuruecksetzen.", + "emailLabel": "E-Mail-Adresse", + "emailPlaceholder": "name@beispiel.de", + "submitButton": "Reset-Link senden", + "backToSignIn": "Zurueck zur Anmeldung", + "successHeading": "E-Mail pruefen", + "successMessage": "Wir haben einen sicheren Link an {email} gesendet. Klicken Sie auf den Link, um Ihre Passphrase zurueckzusetzen.", + "returnToSignIn": "Zurueck zur Anmeldung", + "didNotReceive": "Keine E-Mail erhalten? Pruefen Sie Ihren Spam-Ordner oder", + "tryAgain": "erneut versuchen", + "secureLink": "Sicherer Link", + "expiry24h": "24h Gueltig", + "errorEmailRequired": "E-Mail-Adresse ist erforderlich.", + "errorInvalidEmail": "Bitte geben Sie eine gueltige E-Mail-Adresse ein.", + "errorSendFailed": "Reset-E-Mail konnte nicht gesendet werden.", + "successLinkSent": "Reset-Link gesendet!" + }, + "confirmPasswordReset": { + "heading": "Neues Passwort festlegen", + "subtitle": "Erstellen Sie ein starkes Passwort fuer Ihr Konto.", + "newPasswordLabel": "Neues Passwort", + "newPasswordPlaceholder": "Mindestens 8 Zeichen", + "confirmPasswordLabel": "Passwort bestaetigen", + "confirmPasswordPlaceholder": "Passwort wiederholen", + "submitButton": "Passwort zuruecksetzen", + "backToSignIn": "Zurueck zur Anmeldung", + "successHeading": "Passwortzuruecksetzung abgeschlossen", + "successMessage": "Ihr Passwort wurde aktualisiert. Sie koennen sich jetzt mit Ihrem neuen Passwort anmelden.", + "signIn": "Anmelden", + "passwordUpdated": "Passwort aktualisiert", + "secureConnection": "Sichere Verbindung", + "errorMissingToken": "Reset-Token fehlt. Bitte verwenden Sie den Link aus Ihrer E-Mail.", + "errorPasswordRequired": "Neues Passwort ist erforderlich.", + "errorPasswordLength": "Passwort muss mindestens 8 Zeichen haben.", + "errorPasswordUppercase": "Passwort muss mindestens einen Grossbuchstaben enthalten.", + "errorPasswordLowercase": "Passwort muss mindestens einen Kleinbuchstaben enthalten.", + "errorPasswordDigit": "Passwort muss mindestens eine Ziffer enthalten.", + "errorPasswordMismatch": "Passwoerter stimmen nicht ueberein.", + "errorResetFailed": "Passwortzuruecksetzung fehlgeschlagen. Der Link ist moeglicherweise abgelaufen.", + "successResetComplete": "Passwort erfolgreich zurueckgesetzt!" + }, + "verifyEmail": { + "heading": "E-Mail-Verifizierung", + "loadingText": "Sicheres Token wird verifiziert...", + "successHeading": "Identitaet bestaetigt", + "successMessage": "Ihre E-Mail-Adresse wurde erfolgreich verifiziert. Sie haben nun vollen Zugriff auf die GitDataAI-Plattform.", + "goToDashboard": "Zum Dashboard", + "errorHeading": "Verifizierung fehlgeschlagen", + "backToSettings": "Zurueck zu Einstellungen", + "needHelp": "Brauchen Sie Hilfe?", + "contactSupport": "Technischen Support kontaktieren", + "encryptedLink": "Verschluesselter Link", + "soc2Compliant": "SOC2-konform", + "errorTokenMissing": "Verifizierungstoken fehlt oder ist fehlerhaft.", + "errorLinkExpired": "Der Verifizierungslink ist abgelaufen oder ungueltig.", + "successVerified": "Identitaet erfolgreich verifiziert." + }, + "acceptWorkspaceInvite": { + "heading": "Workspace-Einladung", + "loadingHeading": "Einladung wird validiert", + "loadingText": "Berechtigungen und Workspace-Status werden geprueft...", + "successHeading": "Willkommen an Bord!", + "successMessage": "Einladung angenommen. Sie wurden zum Team hinzugefuegt. Sie werden jetzt zum Dashboard weitergeleitet.", + "proceedManually": "Manuell fortfahren", + "errorHeading": "Ungueltige Einladung", + "returnHome": "Zur Startseite", + "needNewLink": "Neuen Link benoetigt?", + "contactAdmin": "Workspace-Admin kontaktieren", + "secureJoin": "SICHERE TEILNAHME", + "dataOwnership": "DATENBESITZ", + "errorMissingToken": "Der Einladungslink enthaelt kein gueltiges Sicherheitstoken.", + "errorExpired": "Der Einladungslink ist abgelaufen oder wurde bereits verwendet.", + "successJoined": "Workspace erfolgreich beigetreten" + } + }, + "project": { + "overview": { + "settings": "Einstellungen", + "members": "Mitglieder", + "likes": "Likes", + "watches": "Beobachtungen", + "public": "Oeffentlich", + "private": "Privat", + "activity": "Aktivitaet", + "viewAll": "Alle anzeigen", + "recentEvents": "Aktuelle Ereignisse in diesem Projekt", + "noActivity": "Noch keine Aktivitaet.", + "projectInfo": "Projektinfo", + "projectName": "Projektname", + "yourRole": "Ihre Rolle", + "created": "Erstellt", + "visibility": "Sichtbarkeit", + "guest": "Gast", + "quickActions": "Schnellaktionen", + "newIssue": "Neues Issue", + "viewActivity": "Aktivitaet anzeigen", + "membersAction": "Mitglieder", + "createRepository": "Repository erstellen", + "projectNotFound": "Projekt nicht gefunden.", + "noDescription": "Keine Beschreibung angegeben", + "expand": "Erweitern", + "collapse": "Reduzieren" + }, + "eventTypes": { + "commit": "Commit", + "branch": "Branch", + "tag": "Tag", + "issue": "Issue", + "comment": "Kommentar", + "pullRequest": "Pull Request", + "merged": "Gemergt", + "message": "Nachricht", + "room": "Raum", + "starred": "Favorisiert", + "unstarred": "Favorit entfernt", + "watched": "Beobachtet", + "unwatched": "Nicht mehr beobachtet", + "member": "Mitglied", + "label": "Label", + "repo": "Repo" + }, + "dateLabels": { + "today": "Heute", + "yesterday": "Gestern" + }, + "issues": { + "breadcrumb": { + "projects": "Projekte", + "issues": "Issues" + }, + "searchPlaceholder": "Issues durchsuchen…", + "boardView": "Board-Ansicht", + "listView": "Listenansicht", + "board": "Board", + "list": "Liste", + "new": "Neu", + "open": "Offen", + "closed": "Geschlossen", + "of": "von", + "shown": "angezeigt", + "errorLoading": "Fehler:", + "errorLoadFailed": "Issues konnten nicht geladen werden", + "noIssues": "Keine Issues gefunden", + "clearSearch": "Suche loeschen", + "title": "Titel", + "author": "Autor", + "date": "Datum", + "newIssue": "Neues Issue", + "noIssuesInColumn": "Keine Issues" + }, + "issueDetail": { + "backToIssues": "Zurueck zu Issues", + "closeIssue": "Issue schliessen", + "reopenIssue": "Issue wiedereroeffnen", + "edit": "Bearbeiten", + "openStatus": "Offen", + "closedStatus": "Geschlossen", + "openedBy": "Eroeffnet von", + "aiTriage": "KI-Triage", + "highPriority": "hohe Prioritaet", + "mediumPriority": "mittlere Prioritaet", + "lowPriority": "niedrige Prioritaet", + "accept": "Akzeptieren", + "applying": "Wird angewendet…", + "ignore": "Ignorieren", + "noActivity": "Noch keine Aktivitaet.", + "openedThisIssue": "hat dieses Issue eroeffnet", + "commented": "kommentiert", + "editComment": "Kommentar bearbeiten", + "deleteComment": "Kommentar loeschen", + "cancel": "Abbrechen", + "save": "Speichern", + "saving": "Speichern…", + "leaveComment": "Kommentar hinterlassen…", + "comment": "Kommentar", + "posting": "Wird gepostet…", + "commentCannotEmpty": "Kommentar darf nicht leer sein", + "isTyping": "{user} tippt…", + "areTyping": "{user1} und {user2} tippen…", + "peopleTyping": "{count} Personen tippen…", + "linkedRepositories": "Verknuepfte Repositories", + "details": "Details", + "status": "Status", + "author": "Autor", + "created": "Erstellt", + "updated": "Aktualisiert", + "closed": "Geschlossen", + "labelsApplied": "Labels angewendet", + "failedApplyLabels": "Labels konnten nicht angewendet werden", + "commentAdded": "Kommentar hinzugefuegt", + "failedAddComment": "Kommentar konnte nicht hinzugefuegt werden", + "commentDeleted": "Kommentar geloescht", + "failedDeleteComment": "Kommentar konnte nicht geloescht werden", + "commentUpdated": "Kommentar aktualisiert", + "failedUpdateComment": "Kommentar konnte nicht aktualisiert werden", + "issueClosed": "Issue geschlossen", + "issueReopened": "Issue wiedereroeffnet", + "failedUpdateIssue": "Issue konnte nicht aktualisiert werden", + "errorLoadingIssue": "Issue konnte nicht geladen werden" + }, + "room": { + "selectChannel": "Kanal auswaehlen", + "chooseChannelHint": "Waehlen Sie einen Kanal aus der Seitenleiste, um mit dem Chatten zu beginnen.", + "channels": "Kanaele", + "noChannelsYet": "Noch keine Kanaele", + "createChannel": "Kanal erstellen", + "addCategory": "+ Kategorie hinzufuegen", + "categoryNamePlaceholder": "Kategoriename", + "addChannel": "Kanal hinzufuegen", + "channelSettings": "Kanal-Einstellungen", + "expand": "Erweitern", + "collapse": "Reduzieren", + "mute": "Stumm", + "unmute": "Stummschaltung aufheben", + "archive": "Archivieren", + "unarchive": "Wiederherstellen", + "members": "Mitglieder", + "online": "Online", + "ai": "KI" + }, + "roomDialog": { + "newRoom": "Neuer Raum", + "createRoomDescription": "Einen neuen Chatraum erstellen. Namen und Sichtbarkeit waehlen.", + "roomName": "Raumname", + "roomNamePlaceholder": "z.B. allgemein", + "publicLabel": "Oeffentlich (sichtbar fuer alle Projektmitglieder)", + "cancel": "Abbrechen", + "create": "Erstellen", + "creating": "Wird erstellt...", + "deleteRoom": "Raum loeschen", + "deleteRoomConfirm": "Sind Sie sicher, dass Sie \"{name}\" loeschen moechten? Alle Nachrichten werden dauerhaft entfernt. Dies kann nicht rueckgaengig gemacht werden.", + "deleting": "Wird geloescht..." + }, + "roomChat": { + "connecting": "Verbinden...", + "disconnected": "Getrennt", + "mentions": "@Erwaehungen", + "searchMessages": "Nachrichten durchsuchen", + "memberList": "Mitgliederliste", + "pinnedMessages": "Angeheftete Nachrichten", + "roomSettings": "Raum-Einstellungen", + "deleteChannel": "Kanal loeschen", + "showChannels": "Kanaele anzeigen", + "hideChannels": "Kanaele ausblenden", + "back": "Zurueck", + "isThinking": "{name} denkt nach...", + "typingSingular": "{user} tippt...", + "typingDual": "{user1} und {user2} tippen...", + "typingOthers": "{user} und {count} weitere tippen...", + "messageUpdated": "Nachricht aktualisiert", + "messageDeleted": "Nachricht geloescht", + "failedCreateThread": "Thread konnte nicht erstellt werden", + "navigateToMessage": "Zur Nachricht in {room} navigieren", + "roomUpdated": "Raum aktualisiert", + "failedUpdateRoom": "Raum konnte nicht aktualisiert werden" + }, + "commandPalette": { + "placeholder": "Projekte, Repos, Raeume, Befehle suchen…", + "noResults": "Keine Ergebnisse gefunden.", + "navigation": "Navigation", + "create": "Erstellen", + "projects": "Projekte", + "repositories": "Repositories", + "rooms": "Raeume", + "gotoNotifications": "Zu Benachrichtigungen", + "createProject": "Projekt erstellen", + "createRepoIn": "Repo in {project} erstellen" + }, + "issueNew": { + "backToIssues": "Zurueck zu Issues", + "creatingIn": "Erstellen in {project}", + "titleRequired": "Titel *", + "titlePlaceholder": "Kurze Zusammenfassung des Issues", + "description": "Beschreibung", + "markdown": "Markdown", + "bold": "Fett", + "italic": "Kursiv", + "code": "Code", + "link": "Link", + "list": "Liste", + "quote": "Zitat", + "bodyPlaceholder": "Beschreiben Sie das Issue detailliert. Markdown wird unterstuetzt.", + "bodyHint": "Unterstuetzt Markdown — verwenden Sie **Fett**, `Code`, Listen und mehr", + "linkedRepositories": "Verknuepfte Repositories", + "linkedReposHint": "Commits und Pull Requests verfolgen, die mit diesem Issue zusammenhaengen", + "assignees": "Zugewiesene", + "labels": "Labels", + "cancel": "Abbrechen", + "createIssue": "Issue erstellen", + "creating": "Wird erstellt…", + "discardChanges": "Aenderungen verwerfen?", + "discardChangesDesc": "Sie haben ungespeicherte Aenderungen. Sind Sie sicher, dass Sie gehen moechten?", + "keepEditing": "Weiter bearbeiten", + "discard": "Verwerfen", + "titleRequiredError": "Titel ist erforderlich", + "issueCreated": "Issue erstellt", + "failedCreateIssue": "Issue konnte nicht erstellt werden", + "selectAssignees": "Zugewiesene auswaehlen", + "selectAssigneesDesc": "Teammitglieder auswaehlen, die diesem Issue zugewiesen werden sollen", + "noMembers": "Keine Mitglieder in diesem Projekt gefunden", + "done": "Fertig", + "selectLabels": "Labels auswaehlen", + "selectLabelsDesc": "Labels auswaehlen, um dieses Issue zu kategorisieren", + "noLabels": "Noch keine Labels in diesem Projekt" + }, + "issueEdit": { + "backToIssue": "Zurueck zu Issue #{number}", + "editingIssue": "Issue #{number} bearbeiten", + "title": "Issue bearbeiten", + "titleSection": "Titel", + "titleCantChange": "Titel kann nach Erstellung nicht mehr geaendert werden", + "status": "Status", + "changeStatusHint": "Status von der Issue-Detailseite aendern", + "description": "Beschreibung", + "descriptionPlaceholder": "Beschreibung hinzufuegen, um mehr Kontext zu bieten (Markdown unterstuetzt)", + "markdownHint": "Markdown-Formatierung wird unterstuetzt", + "linkedRepositories": "Verknuepfte Repositories", + "noRepositories": "Keine Repositories in diesem Projekt", + "cancel": "Abbrechen", + "saveChanges": "Aenderungen speichern", + "saving": "Speichern…", + "discardChanges": "Aenderungen verwerfen?", + "discardChangesDesc": "Sie haben ungespeicherte Aenderungen. Sind Sie sicher, dass Sie gehen moechten?", + "keepEditing": "Weiter bearbeiten", + "discard": "Verwerfen", + "issueNotFound": "Issue nicht gefunden.", + "issueUpdated": "Issue erfolgreich aktualisiert", + "failedUpdateIssue": "Issue konnte nicht aktualisiert werden", + "returnToIssue": "Zurueck zum Issue" + }, + "activity": { + "title": "Aktivitaet", + "subtitle": "Aktuelle Ereignisse in {project}", + "filterEvents": "Ereignisse filtern", + "perPage": "{count} / Seite", + "noActivity": "Keine Aktivitaet gefunden.", + "tryDifferentType": "Versuchen Sie, einen anderen Ereignistyp auszuwaehlen.", + "failedLoad": "Aktivitaetsfeed konnte nicht geladen werden.", + "page": "Seite {page} von {totalPages}", + "events": "{count} Ereignisse", + "allEvents": "Alle Ereignisse", + "commits": "Commits", + "branchCreated": "Branch erstellt", + "branchDeleted": "Branch geloescht", + "tagCreated": "Tag erstellt", + "tagDeleted": "Tag geloescht", + "repoCreated": "Repo erstellt", + "issueOpened": "Issue eroeffnet", + "issueClosed": "Issue geschlossen", + "issueReopened": "Issue wiedereroeffnet", + "issueComment": "Issue-Kommentar", + "prOpened": "PR eroeffnet", + "prMerged": "PR gemergt", + "prClosed": "PR geschlossen", + "roomMessage": "Raum-Nachricht", + "roomCreated": "Raum erstellt", + "projectStarred": "Projekt favorisiert", + "projectUnstarred": "Projekt-Favorit entfernt", + "memberAdded": "Mitglied hinzugefuegt", + "memberRemoved": "Mitglied entfernt", + "roleChanged": "Rolle geaendert", + "labelCreated": "Label erstellt", + "labelUpdated": "Label aktualisiert", + "labelDeleted": "Label geloescht" + }, + "resources": { + "title": "Ressourcen", + "subtitle": "Projektressourcen verwalten und im Marketplace veroeffentlichen.", + "comingSoon": "Demnachst verfuegbar", + "description": "Skills, Pakete und andere Ressourcen im Marketplace veroeffentlichen." + }, + "articles": { + "title": "Artikel", + "subtitle": "Projektdokumentation und Artikel schreiben und verwalten.", + "comingSoon": "Demnachst verfuegbar", + "description": "Artikel fuer Ihr Projekt schreiben und veroeffentlichen." + }, + "skillsInit": { + "backToSkills": "Zurueck zu Skills", + "title": "Neuer Skill", + "subtitle": "Einen Skill zu diesem Projekt hinzufuegen", + "slug": "Slug", + "slugPlaceholder": "coding/code-review", + "slugHint": "Eindeutiger Identifikator, / zum Gruppieren von Skills verwenden", + "displayName": "Anzeigename", + "namePlaceholder": "Code-Review-Agent", + "description": "Beschreibung", + "descPlaceholder": "Bewertet Pull Requests mit KI", + "content": "Inhalt (SKILL.md)", + "contentPlaceholder": "# Code Review\n\nSie sind ein erfahrener Code-Reviewer...", + "contentHint": "Markdown, das beschreibt, wann und wie dieser Skill verwendet wird.", + "cancel": "Abbrechen", + "createSkill": "Skill erstellen", + "created": "Skill \"{name}\" erstellt", + "failedCreate": "Skill konnte nicht erstellt werden" + } + }, + "notification": { + "title": "Benachrichtigungen", + "live": "Live", + "unreadTotal": "{unread} ungelesen · {total} gesamt", + "totalNotifications": "{count} Benachrichtigung{plural}", + "noGrouping": "Keine Gruppierung", + "groupByProject": "Nach Projekt gruppieren", + "groupByType": "Nach Typ gruppieren", + "cancel": "Abbrechen", + "markRead": "Als gelesen markieren", + "archive": "Archivieren", + "markAllRead": "Alle als gelesen markieren", + "selectMultiple": "Mehrere auswaehlen", + "selectModeActive": "✓ Auswahlmodus aktiv", + "markAllReadInGroup": "Alle in Gruppe als gelesen markieren", + "filterAll": "Alle", + "filterUnread": "Ungelesen", + "filterArchived": "Archiviert", + "notificationSettings": "Benachrichtigungseinstellungen", + "noUnread": "Keine ungelesenen Benachrichtigungen", + "noArchived": "Keine archivierten Benachrichtigungen", + "noNotifications": "Noch keine Benachrichtigungen", + "allCaughtUp": "Sie sind auf dem neuesten Stand!", + "archivedAppearHere": "Archivierte Benachrichtigungen werden hier angezeigt.", + "notificationsAppearHere": "Sie sehen hier Benachrichtigungen, wenn etwas passiert.", + "justNow": "gerade eben", + "minutesAgo": "vor {count}m", + "hoursAgo": "vor {count}h", + "daysAgo": "vor {count}d", + "markAsRead": "Als gelesen markieren", + "notificationArchived": "Benachrichtigung archiviert", + "failedMarkRead": "Konnte nicht als gelesen markiert werden", + "failedArchive": "Archivierung fehlgeschlagen", + "failedMarkAllRead": "Konnte nicht alle als gelesen markiert werden", + "notificationsArchived": "{count} Benachrichtigungen archiviert", + "typeMention": "Erwaehung", + "typeInvitation": "Einladung", + "typeProjectInvite": "Projekt-Einladung", + "typeWorkspaceInvite": "Workspace-Einladung", + "typeRoleChange": "Rollenwechsel", + "typeRoomCreated": "Raum erstellt", + "typeRoomDeleted": "Raum geloescht", + "typeAnnouncement": "Ankuendigung", + "typeIssueOpened": "Issue eroeffnet", + "typeIssueCommented": "Issue-Kommentar", + "typeIssueClosed": "Issue geschlossen", + "typeReviewRequested": "Review angefordert", + "typePrApproved": "PR genehmigt", + "typePrMerged": "PR gemergt" + }, + "search": { + "placeholder": "Projekte, Repositories, Issues, Benutzer suchen...", + "searchButton": "Suchen", + "projects": "Projekte", + "repositories": "Repositories", + "issues": "Issues", + "users": "Benutzer", + "messages": "Nachrichten", + "resultsFor": "{count} Ergebnisse fuer \"{query}\"", + "noResultsFor": "Keine Ergebnisse fuer \"{query}\"", + "messagesFor": "{count} Nachricht{plural} fuer \"{query}\"{inRoom}", + "noMessagesFor": "Keine Nachrichten gefunden, die \"{query}\" entsprechen", + "noMessagesInRoom": "Keine Nachrichten in Raum \"{room}\" gefunden, die \"{query}\" entsprechen", + "searchFailed": "Suche fehlgeschlagen", + "enterKeyword": "Geben Sie ein Schluesselwort ein, um alle Inhalte zu durchsuchen.", + "noResultsFound": "Keine Ergebnisse gefunden", + "tryDifferentKeywords": "Versuchen Sie andere Schluesselwoerter oder ueberpruefen Sie Ihre Rechtschreibung.", + "showing": "{count} von {total} {type} werden angezeigt", + "roomIdPlaceholder": "Raum-ID zum Durchsuchen von Nachrichten (z.B. workspace:general)...", + "acrossAllRooms": "in allen zugaenglichen Raeumen", + "inRoom": " in Raum {room}" + }, + "settings": { + "account": { + "title": "Konto", + "subtitle": "Kontoinformationen und Einstellungen verwalten.", + "changePassword": "Passwort aendern", + "changePasswordDesc": "Aktualisieren Sie Ihr Passwort, um Ihr Konto zu schuetzen.", + "currentPassword": "Aktuelles Passwort", + "currentPasswordPlaceholder": "Aktuelles Passwort eingeben", + "newPassword": "Neues Passwort", + "newPasswordPlaceholder": "Neues Passwort eingeben", + "confirmNewPassword": "Neues Passwort bestaetigen", + "confirmNewPasswordPlaceholder": "Neues Passwort wiederholen", + "passwordMinLength": "Muss mindestens 8 Zeichen lang sein", + "changePasswordButton": "Passwort aendern", + "changing": "Wird geaendert...", + "emailAddress": "E-Mail-Adresse", + "emailAddressDesc": "E-Mail-Adresse aktualisieren. Eine Verifizierungs-E-Mail wird zur Bestaetigung gesendet.", + "currentEmail": "Aktuelle E-Mail", + "noEmailOnRecord": "Keine E-Mail hinterlegt", + "newEmailAddress": "Neue E-Mail-Adresse", + "newEmailPlaceholder": "Neue E-Mail-Adresse eingeben", + "confirmWithPassword": "Mit Passwort bestaetigen", + "passwordPlaceholder": "Aktuelles Passwort eingeben", + "sendVerificationEmail": "Verifizierungs-E-Mail senden", + "sending": "Wird gesendet...", + "preferences": "Einstellungen", + "preferencesDesc": "Kontoeinstellungen und Benachrichtigungseinstellungen anpassen.", + "language": "Sprache", + "theme": "Design", + "timezone": "Zeitzone", + "light": "Hell", + "dark": "Dunkel", + "system": "System", + "notifications": "Benachrichtigungen", + "emailNotifications": "E-Mail-Benachrichtigungen", + "emailNotificationsDesc": "E-Mail-Benachrichtigungen fuer wichtige Updates erhalten", + "inAppNotifications": "In-App-Benachrichtigungen", + "inAppNotificationsDesc": "Benachrichtigungen innerhalb der Anwendung anzeigen", + "reset": "Zuruecksetzen", + "saveChanges": "Aenderungen speichern", + "saving": "Speichern...", + "passwordChangedSuccess": "Passwort erfolgreich geaendert", + "preferencesUpdatedSuccess": "Einstellungen erfolgreich aktualisiert", + "failedChangePassword": "Passwortaenderung fehlgeschlagen", + "failedUpdatePreferences": "Einstellungen konnten nicht aktualisiert werden", + "failedLoadPreferences": "Einstellungen konnten nicht geladen werden.", + "verificationEmailSent": "Verifizierungs-E-Mail gesendet! Bitte pruefen Sie Ihre neue E-Mail zur Bestaetigung.", + "failedRequestEmailChange": "E-Mail-Aenderungsanfrage fehlgeschlagen", + "enterCurrentPassword": "Bitte geben Sie Ihr aktuelles Passwort ein", + "enterNewPassword": "Bitte geben Sie ein neues Passwort ein", + "newPasswordMinLength": "Neues Passwort muss mindestens 8 Zeichen haben", + "passwordsDoNotMatch": "Passwoerter stimmen nicht ueberein", + "enterNewEmail": "Bitte geben Sie eine neue E-Mail-Adresse ein", + "enterValidEmail": "Bitte geben Sie eine gueltige E-Mail-Adresse ein", + "enterPasswordConfirm": "Bitte geben Sie Ihr Passwort zur Bestaetigung ein" + }, + "preferences": { + "title": "Einstellungen", + "subtitle": "Persoenliche Einstellungen und Benachrichtigungseinstellungen verwalten.", + "notificationChannels": "Benachrichtigungskanaele", + "notificationChannelsDesc": "Waehlen Sie, wie Sie Benachrichtigungen erhalten moechten.", + "emailNotificationsLabel": "E-Mail-Benachrichtigungen", + "emailNotificationsDesc": "Benachrichtigungen per E-Mail erhalten", + "inAppNotificationsLabel": "In-App-Benachrichtigungen", + "inAppNotificationsDesc": "Benachrichtigungen innerhalb der Anwendung anzeigen", + "browserPush": "Browser-Push-Benachrichtigungen", + "pushUnsupported": "Ihr Browser unterstuetzt keine Push-Benachrichtigungen", + "pushBlocked": "Vom Browser blockiert. In den Website-Einstellungen aktivieren.", + "pushSubscribed": "Abonniert — Sie erhalten Browser-Benachrichtigungen", + "pushNotSubscribed": "Benachrichtigungen auch erhalten, wenn der Tab geschlossen ist", + "pushEnable": "Aktivieren", + "pushDisable": "Deaktivieren", + "doNotDisturb": "Nicht stoeren", + "doNotDisturbDesc": "Stille Stunden festlegen, in denen Sie nicht gestoert werden moechten.", + "enableDnd": "Nicht stoeren aktivieren", + "dndDesc": "Benachrichtigungen zu bestimmten Zeiten stumm schalten", + "startTime": "Startzeit", + "endTime": "Endzeit", + "notificationCategories": "Benachrichtigungskategorien", + "notificationCategoriesDesc": "Waehlen Sie, welche Benachrichtigungstypen Sie erhalten moechten.", + "securityAlerts": "Sicherheitswarnungen", + "securityAlertsDesc": "Wichtige Sicherheitsupdates und Warnungen", + "productUpdates": "Produkt-Updates", + "productUpdatesDesc": "Neue Funktionen und Produktankuendigungen", + "marketingPromotions": "Marketing & Aktionen", + "marketingDesc": "Tipps, Angebote und Werbeinhalte", + "developmentActivity": "Entwicklungsaktivitaet", + "developmentActivityDesc": "Benachrichtigungen fuer Code-Review und Kollaborationsaktivitaet steuern.", + "issuesActivity": "Issues", + "issuesActivityDesc": "Eroeffnet, geschlossen, zugewiesen oder kommentiert", + "pullRequestsActivity": "Pull Requests", + "prActivityDesc": "Review angefordert, genehmigt, gemergt oder kommentiert", + "mentionsActivity": "@Erwaehungen", + "mentionsActivityDesc": "Wenn jemand Sie in einer Nachricht, Issue oder PR erwaehnt", + "roomMessagesActivity": "Raum-Nachrichten", + "roomMessagesDesc": "Neue Nachrichten in Kanaelen, denen Sie folgen" + }, + "security": { + "title": "Sicherheit", + "subtitle": "Sicherheitseinstellungen und Authentifizierungsmethoden verwalten.", + "securitySettings": "Sicherheitseinstellungen", + "securityDesc": "Zwei-Faktor-Authentifizierung, Passwortrichtlinien und Sitzungsverwaltung konfigurieren.", + "twoFactorAuth": "Zwei-Faktor-Authentifizierung", + "twoFactorDesc": "Fuegen Sie eine zusaetzliche Sicherheitsebene hinzu, die mehr als nur ein Passwort fuer die Anmeldung erfordert.", + "enable": "Aktivieren", + "disable": "Deaktivieren", + "passwordPolicy": "Passwortrichtlinie", + "passwordPolicyDesc": "Anforderungen fuer Passwortstaerke festlegen", + "standard": "Standard", + "sessionManagement": "Sitzungsverwaltung", + "sessionManagementDesc": "Aktive Sitzungen anzeigen und verwalten", + "active": "aktiv", + "manage": "Verwalten" + }, + "profile": { + "title": "Profil", + "subtitle": "Persoenliche Informationen und Profileinstellungen verwalten.", + "profileInfo": "Profilinformationen", + "profileInfoDesc": "Ihre grundlegenden Kontoinformationen anzeigen.", + "username": "Benutzername", + "displayName": "Anzeigename", + "notSet": "Nicht festgelegt", + "email": "E-Mail", + "memberSince": "Mitglied seit", + "publicProfile": "Oeffentliches Profil", + "publicProfileDesc": "Oeffentliche Profilinformationen aktualisieren.", + "publicAvatar": "Oeffentlicher Avatar", + "uploadAvatar": "Neuen Avatar hochladen", + "avatarFormat": "JPG, GIF oder PNG. Max. 2MB.", + "bio": "Bio", + "bioPlaceholder": "Erzaehlen Sie uns von sich", + "bioDesc": "Ihre Bio oder Beschreibung", + "organization": "Organisation", + "orgPlaceholder": "Ihr Unternehmen oder Ihre Organisation", + "orgDesc": "Die Organisation, der Sie angehoeren", + "reset": "Zuruecksetzen", + "saveChanges": "Aenderungen speichern", + "saving": "Speichern...", + "avatarUploaded": "Avatar erfolgreich hochgeladen", + "failedUploadAvatar": "Avatar-Upload fehlgeschlagen", + "fileSizeLimit": "Dateigroesse muss unter 2MB liegen", + "profileUpdated": "Profil erfolgreich aktualisiert", + "failedUpdateProfile": "Profil konnte nicht aktualisiert werden" + }, + "tokens": { + "title": "Tokens", + "subtitle": "Persoenliche Zugriffstokens fuer API-Zugriff verwalten.", + "createToken": "Token erstellen", + "personalAccessTokens": "Persoenliche Zugriffstokens", + "noTokensDesc": "Keine Tokens gefunden. Erstellen Sie ein neues Token, um zu beginnen.", + "tokensCount": "Sie haben {count} Zugriffstoken konfiguriert.", + "tokensCountPlural": "Sie haben {count} Zugriffstokens konfiguriert.", + "loadingTokens": "Zugriffstokens werden geladen...", + "noAccessTokens": "Keine Zugriffstokens", + "noAccessTokensDesc": "Erstellen Sie ein persoenliches Zugriffstoken, um API-Anfragen zu authentifizieren und Git-Repositories ueber HTTPS zuzugreifen.", + "createFirstToken": "Ihr erstes Token erstellen", + "untitled": "Unbenannt", + "revoked": "Zurueckgerufen", + "scopes": "Bereiche:", + "created": "Erstellt am {date}", + "expires": "Laeuft ab am {date}", + "neverExpires": "Laeuft nie ab", + "revoke": "Zurueckrufen", + "createAccessToken": "Zugriffstoken erstellen", + "createTokenDesc": "Ein neues persoenliches Zugriffstoken fuer API-Authentifizierung erstellen.", + "tokenName": "Token-Name", + "tokenNamePlaceholder": "z.B., CI/CD-Pipeline, Entwicklungsumgebung", + "tokenNameDesc": "Waehlen Sie einen beschreibenden Namen fuer dieses Token", + "scopesLabel": "Bereiche", + "scopesDesc": "Waehlen Sie die Berechtigungen fuer dieses Token", + "expirationDate": "Ablaufdatum (Optional)", + "expirationDesc": "Leer lassen fuer kein Ablaufdatum", + "cancel": "Abbrechen", + "creating": "Wird erstellt...", + "tokenCreated": "Token erfolgreich erstellt", + "tokenCreatedDesc": "Kopieren Sie Ihr Zugriffstoken jetzt. Sie koennen es spater nicht mehr sehen!", + "yourAccessToken": "Ihr Zugriffstoken", + "tokenImportant": "Wichtig: Dieses Token wird nur einmal angezeigt. Bewahren Sie es sicher auf.", + "iHaveSavedToken": "Ich habe mein Token gespeichert", + "tokenCopied": "Token in Zwischenablage kopiert", + "deleteTokenTitle": "Zugriffstoken loeschen", + "deleteTokenDesc": "Sind Sie sicher, dass Sie dieses Zugriffstoken loeschen moechten? Diese Aktion kann nicht rueckgaengig gemacht werden, und alle Anwendungen, die dieses Token verwenden, verlieren sofort den Zugriff.", + "deleting": "Wird geloescht...", + "delete": "Loeschen", + "revokeTokenTitle": "Zugriffstoken zurueckrufen", + "revokeTokenDesc": "Sind Sie sicher, dass Sie dieses Zugriffstoken zurueckrufen moechten? Das Token wird sofort deaktiviert und kann nicht mehr zur Authentifizierung verwendet werden.", + "tokenCreatedSuccess": "Zugriffstoken erfolgreich erstellt", + "failedCreateToken": "Token konnte nicht erstellt werden", + "tokenDeleted": "Zugriffstoken erfolgreich geloescht", + "failedDeleteToken": "Token konnte nicht geloescht werden", + "nameRequired": "Bitte geben Sie einen Namen fuer das Zugriffstoken ein", + "scopeRequired": "Bitte waehlen Sie mindestens einen Bereich aus" + }, + "activity": { + "title": "Aktivitaet", + "subtitle": "Ihre aktuellen Aktivitaeten und Benachrichtigungen anzeigen.", + "markAllRead": "Alle als gelesen markieren", + "recentNotifications": "Aktuelle Benachrichtigungen", + "unread": "{count} ungelesen", + "noNotifications": "Noch keine Benachrichtigungen. Ihre Aktivitaeten werden hier angezeigt.", + "newLabel": "Neu", + "noContent": "Kein Inhalt", + "unknownDate": "Unbekanntes Datum", + "allMarkedRead": "Alle Benachrichtigungen als gelesen markiert", + "failedMarkAllRead": "Konnte nicht alle Benachrichtigungen als gelesen markieren", + "markedRead": "Benachrichtigung als gelesen markiert", + "failedMarkRead": "Benachrichtigung konnte nicht als gelesen markiert werden" + } + }, + "init": { + "project": { + "title": "Neues Projekt erstellen", + "subtitle": "Erstellen Sie ein neues Projekt, um Ihre Repositories zu organisieren", + "projectName": "Projektname", + "namePlaceholder": "mein-tolles-projekt", + "description": "Beschreibung", + "descPlaceholder": "Eine kurze Beschreibung Ihres Projekts...", + "workspace": "Workspace", + "noWorkspace": "Kein Workspace (unabhaengiges Projekt)", + "workspaceHint": "Dieses Projekt optional mit einem Workspace verknuepfen.", + "publicProject": "Oeffentliches Projekt", + "publicProjectHint": "Dieses Projekt fuer alle sichtbar machen", + "creating": "Wird erstellt...", + "createProject": "Projekt erstellen", + "cancel": "Abbrechen", + "nameRequired": "Projektname ist erforderlich", + "nameAvailable": "Projektname ist verfuegbar", + "nameExists": "Projektname existiert bereits", + "failedCheckAvailability": "Verfuegbarkeitspruefung fehlgeschlagen", + "failedCreate": "Projekt konnte nicht erstellt werden", + "createdSuccess": "Projekt erfolgreich erstellt!" + }, + "repository": { + "title": "Neues Repository erstellen", + "subtitle": "Ein neues Git-Repository in Ihrem Projekt erstellen", + "project": "Projekt", + "noProjects": "Sie haben noch keine Projekte.", + "createProject": "Ein Projekt erstellen", + "selectProject": "Projekt auswaehlen", + "loadingProjects": "Projekte werden geladen...", + "repoName": "Repository-Name", + "namePlaceholder": "mein-tolles-repo", + "description": "Beschreibung", + "descPlaceholder": "Eine kurze Beschreibung Ihres Repositories...", + "defaultBranch": "Standard-Branch", + "defaultBranchPlaceholder": "main", + "initRepo": "Repository initialisieren", + "initRepoOn": "Jetzt ein Bare-Git-Repository erstellen. Standard-Branch unten festlegen.", + "initRepoOff": "Initialisierung ueberspringen. Der Standard-Branch wird automatisch beim Push gesetzt.", + "privateRepo": "Privates Repository", + "privateAuto": "Dieses Repository muss privat sein, da das Projekt privat ist", + "privateManual": "Dieses Repository privat machen und Zugriff einschraenken", + "creating": "Wird erstellt...", + "createRepo": "Repository erstellen", + "cancel": "Abbrechen", + "selectProjectFirst": "Bitte waehlen Sie zuerst ein Projekt", + "nameRequired": "Repository-Name ist erforderlich", + "nameAvailable": "Repository-Name ist verfuegbar", + "nameExists": "Repository-Name existiert bereits", + "failedCheckAvailability": "Verfuegbarkeitspruefung fehlgeschlagen", + "failedCreate": "Repository konnte nicht erstellt werden", + "createdSuccess": "Repository erfolgreich erstellt", + "failedLoadProjects": "Projekte konnten nicht geladen werden", + "failedLoadDetails": "Repository erstellt, aber Details konnten nicht geladen werden" + } + }, + "pricing": { + "title": "Einfache, transparente Preise.", + "subtitle": "Kostenlos starten. Skalieren Sie, wenn Ihr Agent-Fleet wächst.", + "free": "Kostenlos", + "freePrice": "0 €", + "freePeriod": "fuer immer", + "freeDesc": "Command as Service fuer Einzelpersonen — versionierte Befehle, Agent-Memory und Skill Registry inklusive.", + "freeCta": "Kostenlos starten", + "freeFeatures": [ + "3 aktive Agenten", + "5 GB Agent-Memory", + "Community Skill Registry", + "Oeffentliche Raeume", + "7-Tage-Historie" + ], + "pro": "Pro", + "proPrice": "29 €", + "proPeriod": "pro Monat", + "proDesc": "Command as Service fuer Teams — unbegrenzte Agenten, vollstaendiger Command-Stream-Audit und Prioritaets-Compute.", + "proCta": "Pro erhalten", + "proFeatures": [ + "Unbegrenzte Agenten", + "50 GB Agent-Memory", + "Private Skill Registry", + "Collaborative Rooms", + "90-Tage-Historie", + "Prioritaets-Compute", + "E-Mail-Support" + ], + "enterprise": "Enterprise", + "enterprisePrice": "Individuell", + "enterpriseDesc": "Command as Service im grossen Massstab — individuelle Bereitstellung, granulare Command-Stream-Governance und dedizierte SLA fuer Ihren Agent-Fleet.", + "enterpriseCta": "Vertrieb kontaktieren", + "enterpriseFeatures": [ + "Alles von Pro", + "Unbegrenztes Memory", + "SSO / SAML", + "Individuelles Model-Routing", + "Dediziertes Compute", + "SLA-Garantie", + "Dedizierter Support" + ], + "faqHeading": "Haeufig gestellt", + "faqSubtitle": "Abrechnungsfragen beantwortet.", + "faq1Q": "Kann ich Plaene jederzeit wechseln?", + "faq1A": "Ja. Upgraden oder downgraden Sie jederzeit. Aenderungen werden am naechsten Abrechnungszyklus wirksam.", + "faq2Q": "Was zaehlt als Agent-Memory?", + "faq2A": "Agent-Memory ist der gesamte persistente Kontext, der ueber alle Ihre Agenten gespeichert ist, einschliesslich Konversationshistorie und Langzeitgedaechtnis.", + "faq3Q": "Gibt es eine kostenlose Testversion fuer Pro?", + "faq3A": "Ja — die kostenlose Stufe laesst Sie alle Pro-Funktionen 14 Tage lang erkunden, wenn Sie upgraden." + }, + "repository": { + "list": { + "repositories": "Repositories", + "searchPlaceholder": "Repositories durchsuchen…", + "filter": "Filter", + "new": "Neu", + "filters": "Filter", + "clearAll": "Alle loeschen", + "visibility": "Sichtbarkeit", + "all": "Alle", + "public": "Oeffentlich", + "private": "Privat", + "sortBy": "Sortieren nach", + "lastUpdated": "Zuletzt aktualisiert", + "name": "Name", + "linkedIssues": "Verknuepfte Issues", + "stars": "Sterne", + "repository": "Repository", + "repositoriesPlural": "Repositories", + "errorLoading": "Fehler:", + "errorLoadFailed": "Repositories konnten nicht geladen werden", + "noRepositories": "Keine Repositories gefunden", + "clearFilters": "Filter loeschen", + "watches": "Beobachtungen", + "branches": "Branches", + "defaultBranch": "Standard-Branch", + "lastUpdatedColumn": "Zuletzt aktualisiert", + "never": "Nie", + "showing": "{start}–{end} von {total} werden angezeigt", + "previous": "Zurueck", + "next": "Weiter", + "page": "Seite {page}" + }, + "overview": { + "repositoryStats": "Repository-Statistiken", + "defaultBranch": "Standard-Branch", + "commits": "Commits", + "branches": "Branches", + "tags": "Tags", + "stars": "Sterne", + "watchers": "Beobachter", + "readme": "README", + "starred": "Favorisiert", + "unstarred": "Favorit entfernt", + "watching": "Repository beobachten", + "stoppedWatching": "Beobachtung beendet", + "failedToStar": "Favorisieren fehlgeschlagen", + "failedToUnstar": "Favorit entfernen fehlgeschlagen", + "failedToWatch": "Beobachten fehlgeschlagen", + "failedToUnwatch": "Beobachtung beenden fehlgeschlagen" + }, + "subpages": { + "commits": { + "title": "Commits", + "description": "Commit-Historie dieses Repositories durchsuchen.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "Commit-Historie noch nicht verfuegbar." + }, + "branches": { + "title": "Branches", + "description": "Repository-Branches verwalten und durchsuchen.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "Branch-Liste und -Verwaltung noch nicht verfuegbar." + }, + "tags": { + "title": "Tags", + "description": "Repository-Tags und -Releases durchsuchen.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "Tag- und Release-Verwaltung noch nicht verfuegbar." + }, + "files": { + "title": "Dateien", + "description": "Repository-Dateien durchsuchen und verwalten.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "Dateibrowser noch nicht verfuegbar." + }, + "contributors": { + "title": "Mitwirkende", + "description": "Statistiken und Aktivitaeten der Mitwirkenden anzeigen.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "Mitwirkenden-Statistiken noch nicht verfuegbar." + }, + "pullRequests": { + "title": "Pull Requests", + "description": "Pull Requests fuer {repo} erstellen und verwalten.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "Pull-Request-Verwaltung noch nicht verfuegbar." + } + } + }, + "workspace": { + "projects": { + "title": "Projekte", + "newProject": "Neues Projekt", + "noProjects": "Noch keine Projekte in diesem Workspace.", + "createFirstProject": "Erstellen Sie Ihr erstes Projekt", + "noDescription": "Keine Beschreibung", + "private": "Privat" + }, + "members": { + "title": "Mitglieder", + "inviteMember": "Mitglied einladen", + "inviteTo": "Einladen zu {name}", + "inviteDescription": "Sie erhalten eine E-Mail mit einem Link, um diesem Workspace beizutreten. Einladungen laufen nach 7 Tagen ab.", + "emailAddress": "E-Mail-Adresse", + "emailPlaceholder": "kollege@beispiel.de", + "role": "Rolle", + "memberRoleDesc": "Mitglied — kann Projekte ansehen und dazu beitragen", + "adminRoleDesc": "Admin — kann Mitglieder und Einstellungen verwalten", + "adminInfo": "Admins koennen Workspace-Einstellungen, Mitglieder und Abrechnung verwalten.", + "memberInfo": "Mitglieder koennen Projekte erstellen und verwalten, die diesem Workspace zugewiesen sind.", + "cancel": "Abbrechen", + "sendInvitation": "Einladung senden", + "sending": "Wird gesendet...", + "pendingInvitations": "Ausstehende Einladungen", + "expires": "laeuft ab am {date}", + "by": "von @{username}", + "searchMembers": "Mitglieder suchen...", + "allRoles": "Alle Rollen", + "owner": "Eigentuemer", + "admin": "Admin", + "member": "Mitglied", + "memberColumn": "Mitglied", + "roleColumn": "Rolle", + "invitedBy": "Eingeladen von", + "joined": "Beigetreten", + "noMatch": "Keine Mitglieder entsprechen Ihren Filtern", + "noMembers": "Noch keine Mitglieder", + "remove": "Entfernen", + "page": "Seite {page} von {totalPages}", + "totalMembers": "{count} Mitglieder insgesamt", + "invitationSent": "Einladung an {email} gesendet", + "failedSendInvitation": "Einladung konnte nicht gesendet werden", + "memberRemoved": "Mitglied entfernt", + "failedRemoveMember": "Mitglied konnte nicht entfernt werden", + "invitationCancelled": "Einladung storniert", + "failedCancelInvitation": "Einladung konnte nicht storniert werden", + "roleUpdated": "Rolle aktualisiert", + "failedUpdateRole": "Rolle konnte nicht aktualisiert werden", + "pending": "Ausstehend" + }, + "settings": { + "title": "Workspace-Einstellungen", + "general": "Allgemein", + "avatarUrl": "Avatar-URL", + "avatarUrlPlaceholder": "https://beispiel.de/avatar.png", + "avatarHint": "Geben Sie eine URL zu einem Bild fuer den Workspace-Avatar ein.", + "workspaceName": "Workspace-Name", + "namePlaceholder": "Mein Workspace", + "description": "Beschreibung", + "descPlaceholder": "Beschreiben Sie diesen Workspace...", + "billingEmail": "Abrechnungs-E-Mail", + "billingEmailPlaceholder": "abrechnung@beispiel.de", + "billingHint": "Rechnungen werden an diese E-Mail-Adresse gesendet.", + "saveChanges": "Aenderungen speichern", + "saving": "Speichern...", + "plan": "Plan", + "currentPlan": "Aktueller Plan", + "manageBilling": "Abrechnung verwalten", + "dangerZone": "Gefahrenzone", + "deleteWorkspace": "Workspace loeschen", + "deleteWarning": "Diesen Workspace und alle zugehoerigen Daten dauerhaft loeschen. Diese Aktion kann nicht rueckgaengig gemacht werden.", + "deletingWorkspace": "Wird geloescht...", + "deleteConfirm": "Sind Sie sicher, dass Sie diesen Workspace loeschen moechten? Diese Aktion kann nicht rueckgaengig gemacht werden.", + "updated": "Workspace aktualisiert", + "failedUpdate": "Workspace konnte nicht aktualisiert werden", + "deleted": "Workspace geloescht", + "failedDelete": "Workspace konnte nicht geloescht werden" + } + }, + "projectSettings": { + "general": { + "title": "Allgemein", + "description": "Beschreibung", + "projectAvatar": "Projekt-Avatar", + "uploadAvatar": "Avatar hochladen", + "avatarFormat": "PNG, JPG, GIF oder WebP. Max. 2MB.", + "displayName": "Anzeigename", + "publicVisibility": "Oeffentliche Sichtbarkeit", + "publicVisibilityDesc": "Allen erlauben, dieses Projekt anzuzeigen.", + "saveChanges": "Aenderungen speichern", + "confirmTitle": "Projektaenderungen bestaetigen", + "confirmDescription": "Sie sind dabei, folgende Einstellungen zu aktualisieren:", + "displayNameField": "Anzeigename", + "descriptionField": "Beschreibung", + "visibilityField": "Sichtbarkeit: {visibility}", + "publicWarning": "Wenn Sie dieses Projekt oeffentlich machen, kann jeder seinen Inhalt sehen.", + "confirmSave": "Bestaetigen & Speichern", + "projectAvatarUpdated": "Projekt-Avatar aktualisiert", + "failedUploadAvatar": "Avatar-Upload fehlgeschlagen", + "fileSizeLimit": "Dateigroesse muss unter 2MB liegen", + "projectSettingsUpdated": "Projekteinstellungen aktualisiert", + "failedUpdateProject": "Projekteinstellungen konnten nicht aktualisiert werden" + }, + "members": { + "title": "Mitglieder", + "invite": "Einladen", + "searchMembers": "Mitglieder suchen…", + "member": "Mitglied", + "members": "Mitglieder", + "noMatchSearch": "Keine Mitglieder entsprechen Ihrer Suche", + "noMembers": "Keine Mitglieder gefunden", + "clearSearch": "Suche loeschen", + "user": "Benutzer", + "role": "Rolle", + "joined": "Beigetreten", + "actions": "Aktionen", + "inviteMemberTitle": "Mitglied einladen", + "email": "E-Mail", + "emailPlaceholder": "kollege@beispiel.de", + "cancel": "Abbrechen", + "sendInvite": "Einladung senden", + "sending": "Wird gesendet…", + "removeMemberTitle": "Mitglied entfernen", + "removeConfirm": "Sind Sie sicher, dass Sie {username} aus diesem Projekt entfernen moechten?", + "removing": "Wird entfernt…", + "remove": "Entfernen", + "invitationSent": "Einladung gesendet", + "failedSendInvitation": "Einladung konnte nicht gesendet werden", + "memberRemoved": "Mitglied entfernt", + "failedRemoveMember": "Mitglied konnte nicht entfernt werden", + "roleUpdated": "Rolle aktualisiert", + "failedUpdateRole": "Rolle konnte nicht aktualisiert werden", + "emailRequired": "E-Mail ist erforderlich", + "errorLoading": "Fehler:", + "failedLoadMembers": "Mitglieder konnten nicht geladen werden" + }, + "labels": { + "title": "Labels", + "description": "Beschreibung", + "editLabel": "Label bearbeiten", + "createLabel": "Label erstellen", + "nameRequired": "Name *", + "namePlaceholder": "Label-Name", + "color": "Farbe", + "descPlaceholder": "Dieses Label beschreiben", + "cancel": "Abbrechen", + "updateLabel": "Label aktualisieren", + "createLabelButton": "Label erstellen", + "addLabel": "Label hinzufuegen", + "failedToLoad": "Labels konnten nicht geladen werden", + "noLabels": "Keine Labels gefunden. Erstellen Sie Ihr erstes Label.", + "deleteLabelTitle": "Label loeschen", + "deleteLabelConfirm": "Sind Sie sicher, dass Sie dieses Label loeschen moechten? Diese Aktion kann nicht rueckgaengig gemacht werden.", + "delete": "Loeschen", + "labelCreated": "Label erstellt", + "labelUpdated": "Label aktualisiert", + "labelDeleted": "Label geloescht", + "failedCreateLabel": "Label konnte nicht erstellt werden", + "failedUpdateLabel": "Label konnte nicht aktualisiert werden", + "failedDeleteLabel": "Label konnte nicht geloescht werden", + "nameRequiredError": "Label-Name ist erforderlich" + }, + "boards": { + "title": "Boards", + "newBoard": "Neues Board", + "noBoards": "Noch keine Boards", + "noBoardsHint": "Erstellen Sie ein Board, um Ihre Projektarbeit zu organisieren.", + "newBoardDialog": "Neues Board", + "name": "Name", + "namePlaceholder": "z.B. Sprint-Planung", + "description": "Beschreibung", + "descriptionPlaceholder": "Optional", + "cancel": "Abbrechen", + "createBoard": "Board erstellen", + "updated": "Aktualisiert am {date}", + "failedCreate": "Board konnte nicht erstellt werden" + }, + "billing": { + "currentBilling": "Aktuelle Abrechnung", + "description": "Kontingent, Nutzung und Kontostand des aktuellen Zyklus.", + "monthlyQuota": "Monatliches Kontingent", + "currentBalance": "Aktueller Kontostand", + "currentUsage": "Aktuelle Nutzung", + "billingHistory": "Abrechnungshistorie", + "billingHistoryDesc": "Projekt-Abrechnungsflussaufzeichnungen.", + "noRecords": "Noch keine Abrechnungsaufzeichnungen.", + "time": "Zeit", + "reason": "Grund", + "amount": "Betrag", + "currency": "Waehrung", + "type": "Typ", + "charge": "Belastung", + "credit": "Guthaben", + "showing": "{start} bis {end} von {total} Aufzeichnungen werden angezeigt", + "page": "Seite {page} von {totalPages}", + "failedToLoad": "Abrechnungsinformationen konnten nicht geladen werden." + }, + "skills": { + "title": "Skills", + "subtitle": "Agent-Anweisungen fuer dieses Projekt", + "searchPlaceholder": "Skills durchsuchen...", + "all": "Alle", + "manual": "Manuell", + "repo": "Repo", + "scanRepos": "Repos scannen", + "addSkill": "Skill hinzufuegen", + "noSkills": "Keine Skills gefunden", + "noSkillsHint": "Skills manuell hinzufuegen oder Repositories scannen, um SKILL.md-Dateien zu finden.", + "noMatch": "Keine Skills entsprechen Ihrer Suche oder Ihrem Filter.", + "deleteSkill": "Skill loeschen", + "deleteConfirm": "Sind Sie sicher, dass Sie \"{name}\" loeschen moechten? Dies kann nicht rueckgaengig gemacht werden.", + "cancel": "Abbrechen", + "delete": "Loeschen", + "content": "Inhalt", + "moreLines": "+{count} weitere Zeilen", + "copied": "Kopiert", + "copyContent": "Inhalt kopieren", + "scannedFromRepo": "Von Repository gescannt", + "addedManually": "Manuell hinzugefuegt", + "failedLoad": "Skills konnten nicht geladen werden", + "scanSuccess": "Repositories erfolgreich gescannt", + "scanFailed": "Repositories konnten nicht gescannt werden", + "deleted": "\"{name}\" geloescht", + "failedDelete": "Skill konnte nicht geloescht werden" + }, + "webhook": { + "title": "Webhooks", + "description": "Webhooks konfigurieren, um Benachrichtigungen ueber Ereignisse in Ihrem Projekt zu erhalten.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "Webhook-Konfiguration noch nicht verfuegbar." + }, + "oauth": { + "title": "OAuth-App", + "description": "OAuth-Anwendungen fuer Drittanbieter-Integrationen erstellen und verwalten.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "OAuth-Anwendungsverwaltung noch nicht verfuegbar." + } + }, + "shared": { + "projects": "Projekte", + "loading": "Laden...", + "error": "Fehler", + "success": "Erfolg", + "cancel": "Abbrechen", + "confirm": "Bestaetigen", + "delete": "Loeschen", + "edit": "Bearbeiten", + "save": "Speichern", + "close": "Schliessen", + "back": "Zurueck", + "next": "Weiter", + "previous": "Zurueck", + "submit": "Absenden", + "search": "Suchen", + "filter": "Filtern", + "clear": "Loeschen", + "reset": "Zuruecksetzen", + "apply": "Anwenden", + "yes": "Ja", + "no": "Nein", + "ok": "OK", + "retry": "Wiederholen", + "refresh": "Aktualisieren", + "noData": "Keine Daten", + "noResults": "Keine Ergebnisse", + "loadingFailed": "Laden fehlgeschlagen", + "operationFailed": "Vorgang fehlgeschlagen", + "operationSuccess": "Vorgang erfolgreich" + }, + "about": { + "title": "Ueber GitDataAI", + "subtitle": "Wir sind davon ueberzeugt, dass jede Entwicklungsaktion ein versionierter Befehl sein sollte — pruefbar, wiederholbar und menschlich genehmigt. Wir bauen die Command-as-Service-Plattform fuer das agentische Zeitalter.", + "quote": "\"Jede Aktion ist ein Befehl. Jeder Befehl ist versioniert und pruefbar.\"", + "mission": "GitDataAI wurde gegruendet, um Command as Service in das agentische Zeitalter zu bringen — jede Agentenentscheidung versioniert, jeder Befehlsstrom pruefbar, jede menschliche-in-der-Schleife-Aktion genehmigt.", + "ourValues": "Unsere Werte", + "values": { + "transparency": { + "title": "Transparenz", + "desc": "Jede Agentenentscheidung wird protokolliert, versioniert und geprueft. Keine Blackboxes." + }, + "collaboration": { + "title": "Zusammenarbeit", + "desc": "Menschen und Agenten sind Partner. Keiner ersetzt den anderen — zusammen erreichen sie mehr." + }, + "reliability": { + "title": "Zuverlaessigkeit", + "desc": "Production-Grade-Infrastruktur. Ihre Agenten laufen, wenn Sie sie brauchen." + }, + "extensibility": { + "title": "Erweiterbarkeit", + "desc": "Offenes Registry, offene API. Das Netzwerk wachsen durch Community-Beitraege." + } + }, + "theTeam": "Das Team", + "hiring": "Wir stellen ein. Kommen Sie und bauen Sie mit uns.", + "join": "GitDataAI beitreten", + "github": "GitHub" + }, + "invitations": { + "title": "Meine Einladungen", + "pendingCount": "{count} ausstehende Einladung", + "pendingCountPlural": "{count} ausstehende Einladungen", + "noPending": "Keine ausstehenden Einladungen", + "noPendingHint": "Projekt- und Workspace-Einladungen werden hier angezeigt.", + "projectInvitation": "Projekt-Einladung", + "workspaceInvitation": "Workspace-Einladung", + "invitedToJoin": "Sie wurden eingeladen, {name} beizutreten", + "invitedToWorkspace": "Sie wurden eingeladen, Workspace {name} beizutreten", + "by": "von {username}", + "accept": "Annehmen", + "decline": "Ablehnen", + "acceptedProject": "Sie sind dem Projekt beigetreten: {name}", + "declinedInvitation": "Einladung zu {name} abgelehnt", + "acceptedWorkspace": "Sie sind dem Workspace beigetreten", + "failedAccept": "Einladung konnte nicht angenommen werden", + "failedDecline": "Einladung konnte nicht abgelehnt werden" + }, + "network": { + "title": "Das GitDataAI-Netzwerk", + "subtitle": "Ein wachsendes Oekosystem aus Agenten, Workspaces und Skills, die ueber einen einheitlichen Befehlsstrom zusammenarbeiten. Jede Agentenaktion ist ein Befehl. Jeder Befehl ist wiederholbar.", + "activeAgents": "Aktive Agenten", + "workspaces": "Workspaces", + "skillRuns": "Skill-Ausfuehrungen", + "uptimeSla": "Verfuegbarkeits-SLA", + "publicRooms": "Oeffentliche Raeume", + "live": "LIVE", + "active": "Aktiv", + "agents": "{count} Agenten", + "participants": "{count}", + "privacyByDefault": "Standardmaessig privat", + "privacyDesc": "Alle Workspaces sind standardmaessig privat. Sie kontrollieren, wer Ihre Agenten, Skills und Konversationshistorie sieht. Oeffentliche Raeume erfordern ein explizites Opt-in.", + "network": "Netzwerk", + "roomsLive": "{count} Raeume live", + "ended": "BEENDET", + "startYourOwnRoom": "Eigenen Raum starten" + }, + "skills": { + "title": "Das Skill Registry", + "subtitle": "Wiederverwendbare, versionierte Agentenverhaltensweisen, verpackt als Skills — aufgerufen per Befehl, eingesetzt ueber Ihre gesamte Agentenflotte.", + "searchPlaceholder": "Skills durchsuchen...", + "categories": [ + "Alle", + "Frontend", + "Backend", + "DevOps", + "Sicherheit", + "Daten", + "Tests" + ], + "publishCTA": "Veroeffentlichen Sie Ihren eigenen Skill und werden Sie Teil des Registries.", + "publishButton": "Skill veroeffentlichen", + "runs": "{count} Ausfuehrungen" + }, + "solutions": { + "title": "Command as Service", + "subtitle": "In GitDataAI ist jede Aktion ein Befehl erster Klasse. Befehle sind versioniert, pruefbar und zusammensetzbar — Ihr Entwicklungsworkflow ist Ihre API.", + "learnMore": "Mehr erfahren", + "coreConcept": "Kernkonzept" + }, + "notificationDrawer": { + "title": "Benachrichtigungen", + "live": "Live", + "markAllRead": "Alle als gelesen markieren", + "noNotifications": "Noch keine Benachrichtigungen", + "noNotificationsHint": "Sie sehen hier Updates, wenn etwas passiert.", + "viewAll": "Alle Benachrichtigungen anzeigen", + "unread": "{count} ungelesen", + "notifications": "Benachrichtigungen" + } +} diff --git a/i18n/fr.json b/i18n/fr.json new file mode 100644 index 0000000..86fc9ca --- /dev/null +++ b/i18n/fr.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": "Agents IA", + "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": "Depots Git", + "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": "Approuver", + "viewDiff": "Voir le diff" + }, + "nav": { + "platform": "Plateforme", + "skills": "Skills", + "network": "Reseau", + "pricing": "Tarifs", + "signIn": "Se connecter", + "joinBeta": "Rejoindre la beta", + "commandAsServiceNav": "Command as Service", + "collaborativeRoomsNav": "Collaborative Rooms", + "aiAgentsNav": "Agents IA", + "gitRepositoriesNav": "Depots Git", + "exploreSkillsNav": "Explorer les skills", + "publishSkillNav": "Publier un skill", + "skillDocumentationNav": "Documentation des skills", + "exploreNetworkNav": "Explorer le reseau", + "publicRoomsNav": "Salons publics", + "developerApiNav": "Developer API", + "plansPricingNav": "Plans & Tarifs", + "enterpriseNav": "Enterprise", + "billingFaqNav": "FAQ Facturation" + }, + "footer": { + "readyHeading": "Pret pour l'ere des agents?", + "getStartedFree": "Commencer gratuitement", + "contactSales": "Contacter le service commercial", + "platform": "Plateforme", + "skills": "Skills", + "developers": "Developpeurs", + "company": "Entreprise", + "gitRepositories": "Depots Git", + "issuesPullRequests": "Issues & PRs", + "collaborativeRooms": "Collaborative Rooms", + "aiAgents": "Agents IA", + "commandStream": "Command Stream", + "skillRegistry": "Skill Registry", + "publishSkill": "Publier un skill", + "skillDocs": "Documentation des skills", + "community": "Communaute", + "documentation": "Documentation", + "cliReference": "Reference CLI", + "apiReference": "Reference API", + "status": "Statut", + "about": "A propos", + "careers": "Carrieres", + "contact": "Contact", + "privacy": "Confidentialite", + "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": "Se connecter", + "subtitleWelcome": "Bienvenue sur GitDataAI", + "subtitleContinue": "Continuer vers {path}", + "usernameLabel": "Nom d'utilisateur", + "usernamePlaceholder": "Entrez votre nom d'utilisateur", + "passwordLabel": "Mot de passe", + "passwordForgot": "Oublie?", + "verificationLabel": "Verification", + "verificationPlaceholder": "Entrez le code", + "submitButton": "Se connecter", + "noAccount": "Pas encore de compte?", + "createOne": "Creer un compte", + "errorFillRequired": "Veuillez remplir tous les champs obligatoires.", + "errorInvalidCredentials": "Identifiants invalides. Veuillez reessayer." + }, + "register": { + "heading": "Creer un compte", + "subtitle": "Rejoignez la prochaine generation de collaboration humain-agent", + "emailLabel": "E-mail", + "emailPlaceholder": "nom@entreprise.fr", + "usernameLabel": "Nom d'utilisateur", + "usernamePlaceholder": "architecte_01", + "passwordLabel": "Mot de passe", + "passwordPlaceholder": "••••••••", + "confirmLabel": "Confirmer", + "confirmPlaceholder": "••••••••", + "verificationLabel": "Verification", + "verificationPlaceholder": "Captcha", + "submitButton": "Creer le compte", + "alreadyHaveAccount": "Deja un compte?", + "signIn": "Se connecter", + "encrypted": "Chiffre", + "errorEmailRequired": "L'e-mail est requis", + "errorInvalidEmail": "Adresse e-mail invalide", + "errorUsernameRequired": "Le nom d'utilisateur est requis", + "errorUsernameLength": "Le nom d'utilisateur doit contenir au moins 3 caracteres", + "errorPasswordRequired": "Le mot de passe est requis", + "errorPasswordLength": "Le mot de passe doit contenir au moins 8 caracteres", + "errorPasswordComplexity": "Le mot de passe doit contenir des majuscules, des minuscules et un chiffre", + "errorPasswordMismatch": "Les mots de passe ne correspondent pas", + "errorCaptchaRequired": "Le code de verification est requis", + "errorRegistrationFailed": "Echec de l'inscription", + "successAccountCreated": "Compte cree avec succes!" + }, + "passwordReset": { + "heading": "Reinitialiser le mot de passe", + "subtitle": "Entrez votre adresse e-mail et nous vous enverrons un lien pour vous reconnecter a votre compte.", + "emailLabel": "Adresse e-mail", + "emailPlaceholder": "nom@exemple.fr", + "submitButton": "Envoyer le lien de reinitialisation", + "backToSignIn": "Retour a la connexion", + "successHeading": "Verifiez votre e-mail", + "successMessage": "Nous avons envoye un lien securise a {email}. Cliquez sur le lien pour reinitialiser votre phrase secrete.", + "returnToSignIn": "Retour a la connexion", + "didNotReceive": "Pas recu l'e-mail? Verifiez votre dossier spam ou", + "tryAgain": "reessayez", + "secureLink": "Lien securise", + "expiry24h": "Expire dans 24h", + "errorEmailRequired": "L'adresse e-mail est requise.", + "errorInvalidEmail": "Veuillez entrer une adresse e-mail valide.", + "errorSendFailed": "Echec de l'envoi de l'e-mail de reinitialisation.", + "successLinkSent": "Lien de reinitialisation envoye!" + }, + "confirmPasswordReset": { + "heading": "Definir un nouveau mot de passe", + "subtitle": "Creez un mot de passe强者 pour votre compte.", + "newPasswordLabel": "Nouveau mot de passe", + "newPasswordPlaceholder": "Au moins 8 caracteres", + "confirmPasswordLabel": "Confirmer le mot de passe", + "confirmPasswordPlaceholder": "Repetez votre mot de passe", + "submitButton": "Reinitialiser le mot de passe", + "backToSignIn": "Retour a la connexion", + "successHeading": "Reinitialisation du mot de passe terminee", + "successMessage": "Votre mot de passe a ete mis a jour. Vous pouvez maintenant vous connecter avec votre nouveau mot de passe.", + "signIn": "Se connecter", + "passwordUpdated": "Mot de passe mis a jour", + "secureConnection": "Connexion securisee", + "errorMissingToken": "Jeton de reinitialisation manquant. Veuillez utiliser le lien de votre e-mail.", + "errorPasswordRequired": "Le nouveau mot de passe est requis.", + "errorPasswordLength": "Le mot de passe doit contenir au moins 8 caracteres.", + "errorPasswordUppercase": "Le mot de passe doit contenir au moins une majuscule.", + "errorPasswordLowercase": "Le mot de passe doit contenir au moins une minuscule.", + "errorPasswordDigit": "Le mot de passe doit contenir au moins un chiffre.", + "errorPasswordMismatch": "Les mots de passe ne correspondent pas.", + "errorResetFailed": "Echec de la reinitialisation du mot de passe. Le lien a peut-etre expire.", + "successResetComplete": "Mot de passe reinitialise avec succes!" + }, + "verifyEmail": { + "heading": "Verification de l'e-mail", + "loadingText": "Verification du jeton securise...", + "successHeading": "Identite confirmee", + "successMessage": "Votre e-mail a ete verifie avec succes. Vous avez maintenant un acces complet a la plateforme GitDataAI.", + "goToDashboard": "Aller au tableau de bord", + "errorHeading": "Echec de la verification", + "backToSettings": "Retour aux parametres", + "needHelp": "Besoin d'aide?", + "contactSupport": "Contacter le support technique", + "encryptedLink": "Lien chiffre", + "soc2Compliant": "Conforme SOC2", + "errorTokenMissing": "Le jeton de verification est manquant ou mal forme.", + "errorLinkExpired": "Le lien de verification a expire ou est invalide.", + "successVerified": "Identite verifiee avec succes." + }, + "acceptWorkspaceInvite": { + "heading": "Invitation Workspace", + "loadingHeading": "Validation de l'invitation", + "loadingText": "Verification des permissions et du statut du workspace...", + "successHeading": "Bienvenue a bord!", + "successMessage": "Invitation acceptee. Vous avez ete ajoute a l'equipe. Nous vous redirigeons vers le tableau de bord.", + "proceedManually": "Proceder manuellement", + "errorHeading": "Invitation invalide", + "returnHome": "Retour a l'accueil", + "needNewLink": "Besoin d'un nouveau lien?", + "contactAdmin": "Contacter l'admin du workspace", + "secureJoin": "JOINTURE SECURISEE", + "dataOwnership": "PROPRIETE DES DONNEES", + "errorMissingToken": "Le lien d'invitation ne contient pas de jeton de securite valide.", + "errorExpired": "Le lien d'invitation a expire ou a deja ete utilise.", + "successJoined": "Vous avez rejoint le workspace avec succes" + } + }, + "project": { + "overview": { + "settings": "Parametres", + "members": "membres", + "likes": "likes", + "watches": "abonnements", + "public": "Public", + "private": "Prive", + "activity": "Activite", + "viewAll": "Voir tout", + "recentEvents": "Evenements recents dans ce projet", + "noActivity": "Pas encore d'activite.", + "projectInfo": "Info projet", + "projectName": "Nom du projet", + "yourRole": "Votre role", + "created": "Cree", + "visibility": "Visibilite", + "guest": "Invite", + "quickActions": "Actions rapides", + "newIssue": "Nouvel Issue", + "viewActivity": "Voir l'activite", + "membersAction": "Membres", + "createRepository": "Creer un depot", + "projectNotFound": "Projet non trouve.", + "noDescription": "Aucune description fournie", + "expand": "Developper", + "collapse": "Reduire" + }, + "eventTypes": { + "commit": "Commit", + "branch": "Branche", + "tag": "Tag", + "issue": "Issue", + "comment": "Commentaire", + "pullRequest": "Pull Request", + "merged": "Fusionne", + "message": "Message", + "room": "Salon", + "starred": "Favori ajoute", + "unstarred": "Favori retire", + "watched": "Abonne", + "unwatched": "Desabonne", + "member": "Membre", + "label": "Label", + "repo": "Depot" + }, + "dateLabels": { + "today": "Aujourd'hui", + "yesterday": "Hier" + }, + "issues": { + "breadcrumb": { + "projects": "Projets", + "issues": "Issues" + }, + "searchPlaceholder": "Rechercher des issues…", + "boardView": "Vue tableau", + "listView": "Vue liste", + "board": "Tableau", + "list": "Liste", + "new": "Nouveau", + "open": "Ouvert", + "closed": "Ferme", + "of": "sur", + "shown": "affiches", + "errorLoading": "Erreur:", + "errorLoadFailed": "Echec du chargement des issues", + "noIssues": "Aucun issue trouve", + "clearSearch": "Effacer la recherche", + "title": "Titre", + "author": "Auteur", + "date": "Date", + "newIssue": "Nouvel issue", + "noIssuesInColumn": "Aucun issue" + }, + "issueDetail": { + "backToIssues": "Retour aux Issues", + "closeIssue": "Fermer l'issue", + "reopenIssue": "Rouvrir l'issue", + "edit": "Modifier", + "openStatus": "Ouvert", + "closedStatus": "Ferme", + "openedBy": "Ouvert par", + "aiTriage": "Triage IA", + "highPriority": "haute priorite", + "mediumPriority": "priorite moyenne", + "lowPriority": "basse priorite", + "accept": "Accepter", + "applying": "Application en cours…", + "ignore": "Ignorer", + "noActivity": "Pas encore d'activite.", + "openedThisIssue": "a ouvert cet issue", + "commented": "a commente", + "editComment": "Modifier le commentaire", + "deleteComment": "Supprimer le commentaire", + "cancel": "Annuler", + "save": "Enregistrer", + "saving": "Enregistrement…", + "leaveComment": "Laisser un commentaire…", + "comment": "Commentaire", + "posting": "Publication…", + "commentCannotEmpty": "Le commentaire ne peut pas etre vide", + "isTyping": "{user} tape…", + "areTyping": "{user1} et {user2} tapent…", + "peopleTyping": "{count} personnes tapent…", + "linkedRepositories": "Depots lies", + "details": "Details", + "status": "Statut", + "author": "Auteur", + "created": "Cree", + "updated": "Mis a jour", + "closed": "Ferme", + "labelsApplied": "Labels appliques", + "failedApplyLabels": "Echec de l'application des labels", + "commentAdded": "Commentaire ajoute", + "failedAddComment": "Echec de l'ajout du commentaire", + "commentDeleted": "Commentaire supprime", + "failedDeleteComment": "Echec de la suppression du commentaire", + "commentUpdated": "Commentaire mis a jour", + "failedUpdateComment": "Echec de la mise a jour du commentaire", + "issueClosed": "Issue ferme", + "issueReopened": "Issue rouvert", + "failedUpdateIssue": "Echec de la mise a jour de l'issue", + "errorLoadingIssue": "Echec du chargement de l'issue" + }, + "room": { + "selectChannel": "Selectionnez une chaine", + "chooseChannelHint": "Choisissez une chaine dans la barre laterale pour commencer a discuter.", + "channels": "Chaines", + "noChannelsYet": "Pas encore de chaines", + "createChannel": "Creer une chaine", + "addCategory": "+ Ajouter une categorie", + "categoryNamePlaceholder": "Nom de la categorie", + "addChannel": "Ajouter une chaine", + "channelSettings": "Parametres de la chaine", + "expand": "Developper", + "collapse": "Reduire", + "mute": "Muet", + "unmute": "Reactiver le son", + "archive": "Archiver", + "unarchive": "Desarchiver", + "members": "Membres", + "online": "En ligne", + "ai": "IA" + }, + "roomDialog": { + "newRoom": "Nouveau salon", + "createRoomDescription": "Creez un nouveau salon de chat. Choisissez un nom et une visibilite.", + "roomName": "Nom du salon", + "roomNamePlaceholder": "ex. general", + "publicLabel": "Public (visible par tous les membres du projet)", + "cancel": "Annuler", + "create": "Creer", + "creating": "Creation...", + "deleteRoom": "Supprimer le salon", + "deleteRoomConfirm": "Etes-vous sur de vouloir supprimer \"{name}\"? Tous les messages seront definitivement supprimes. Cette action est irreversible.", + "deleting": "Suppression..." + }, + "roomChat": { + "connecting": "Connexion...", + "disconnected": "Deconnecte", + "mentions": "@Mentions", + "searchMessages": "Rechercher des messages", + "memberList": "Liste des membres", + "pinnedMessages": "Messages epingles", + "roomSettings": "Parametres du salon", + "deleteChannel": "Supprimer la chaine", + "showChannels": "Afficher les chaines", + "hideChannels": "Masquer les chaines", + "back": "Retour", + "isThinking": "{name} reflechit...", + "typingSingular": "{user} tape...", + "typingDual": "{user1} et {user2} tapent...", + "typingOthers": "{user} et {count} autres tapent...", + "messageUpdated": "Message mis a jour", + "messageDeleted": "Message supprime", + "failedCreateThread": "Echec de la creation du fil", + "navigateToMessage": "Naviguer vers le message dans {room}", + "roomUpdated": "Salon mis a jour", + "failedUpdateRoom": "Echec de la mise a jour du salon" + }, + "commandPalette": { + "placeholder": "Rechercher projets, depots, salons, commandes…", + "noResults": "Aucun resultat trouve.", + "navigation": "Navigation", + "create": "Creer", + "projects": "Projets", + "repositories": "Depots", + "rooms": "Salons", + "gotoNotifications": "Aller aux notifications", + "createProject": "Creer un projet", + "createRepoIn": "Creer un depot dans {project}" + }, + "issueNew": { + "backToIssues": "Retour aux Issues", + "creatingIn": "Creation dans {project}", + "titleRequired": "Titre *", + "titlePlaceholder": "Resume bref de l'issue", + "description": "Description", + "markdown": "Markdown", + "bold": "Gras", + "italic": "Italique", + "code": "Code", + "link": "Lien", + "list": "Liste", + "quote": "Citation", + "bodyPlaceholder": "Decrivez l'issue en detail. Markdown est supporte.", + "bodyHint": "Supporte Markdown — utilisez **gras**, `code`, listes, et plus", + "linkedRepositories": "Depots lies", + "linkedReposHint": "Suivre les commits et pull requests lies a cette issue", + "assignees": "Assignes", + "labels": "Labels", + "cancel": "Annuler", + "createIssue": "Creer l'issue", + "creating": "Creation…", + "discardChanges": "Abandonner les modifications?", + "discardChangesDesc": "Vous avez des modifications non enregistrees. Etes-vous sur de vouloir quitter?", + "keepEditing": "Continuer a modifier", + "discard": "Abandonner", + "titleRequiredError": "Le titre est requis", + "issueCreated": "Issue cree", + "failedCreateIssue": "Echec de la creation de l'issue", + "selectAssignees": "Selectionner les assiges", + "selectAssigneesDesc": "Choisissez les membres de l'equipe a assigner a cette issue", + "noMembers": "Aucun membre trouve dans ce projet", + "done": "Termine", + "selectLabels": "Selectionner les labels", + "selectLabelsDesc": "Choisissez les labels pour categoriser cette issue", + "noLabels": "Pas encore de labels dans ce projet" + }, + "issueEdit": { + "backToIssue": "Retour a l'issue #{number}", + "editingIssue": "Modification de l'issue #{number}", + "title": "Modifier l'issue", + "titleSection": "Titre", + "titleCantChange": "Le titre ne peut pas etre modifie apres la creation", + "status": "Statut", + "changeStatusHint": "Modifier le statut depuis la page de detail de l'issue", + "description": "Description", + "descriptionPlaceholder": "Ajouter une description pour plus de contexte (Markdown supporte)", + "markdownHint": "Formatage Markdown supporte", + "linkedRepositories": "Depots lies", + "noRepositories": "Aucun depot dans ce projet", + "cancel": "Annuler", + "saveChanges": "Enregistrer les modifications", + "saving": "Enregistrement…", + "discardChanges": "Abandonner les modifications?", + "discardChangesDesc": "Vous avez des modifications non enregistrees. Etes-vous sur de vouloir quitter?", + "keepEditing": "Continuer a modifier", + "discard": "Abandonner", + "issueNotFound": "Issue non trouvee.", + "issueUpdated": "Issue mise a jour avec succes", + "failedUpdateIssue": "Echec de la mise a jour de l'issue", + "returnToIssue": "Retour a l'issue" + }, + "activity": { + "title": "Activite", + "subtitle": "Evenements recents dans {project}", + "filterEvents": "Filtrer les evenements", + "perPage": "{count} / page", + "noActivity": "Aucune activite trouvee.", + "tryDifferentType": "Essayez de selectionner un autre type d'evenement.", + "failedLoad": "Echec du chargement du fil d'activite.", + "page": "Page {page} sur {totalPages}", + "events": "{count} evenements", + "allEvents": "Tous les evenements", + "commits": "Commits", + "branchCreated": "Branche creee", + "branchDeleted": "Branche supprimee", + "tagCreated": "Tag cree", + "tagDeleted": "Tag supprime", + "repoCreated": "Depot cree", + "issueOpened": "Issue ouverte", + "issueClosed": "Issue fermee", + "issueReopened": "Issue rouverte", + "issueComment": "Commentaire d'issue", + "prOpened": "PR ouverte", + "prMerged": "PR fusionnee", + "prClosed": "PR fermee", + "roomMessage": "Message de salon", + "roomCreated": "Salon cree", + "projectStarred": "Projet mis en favori", + "projectUnstarred": "Favori du projet retire", + "memberAdded": "Membre ajoute", + "memberRemoved": "Membre supprime", + "roleChanged": "Role modifie", + "labelCreated": "Label cree", + "labelUpdated": "Label mis a jour", + "labelDeleted": "Label supprime" + }, + "resources": { + "title": "Ressources", + "subtitle": "Gerez et publiez les ressources du projet sur le marketplace.", + "comingSoon": "Bientot disponible", + "description": "Publiez des skills, des paquets et d'autres ressources sur le marketplace." + }, + "articles": { + "title": "Articles", + "subtitle": "Redigez et gerez la documentation et les articles du projet.", + "comingSoon": "Bientot disponible", + "description": "Redigez et publiez des articles pour votre projet." + }, + "skillsInit": { + "backToSkills": "Retour aux Skills", + "title": "Nouveau Skill", + "subtitle": "Ajouter un skill a ce projet", + "slug": "Slug", + "slugPlaceholder": "coding/code-review", + "slugHint": "Identifiant unique, utilisez / pour grouper les skills", + "displayName": "Nom d'affichage", + "namePlaceholder": "Agent de revue de code", + "description": "Description", + "descPlaceholder": "Revoit les pull requests avec l'IA", + "content": "Contenu (SKILL.md)", + "contentPlaceholder": "# Revue de code\n\nVous etes un expert en revue de code...", + "contentHint": "Markdown decrivant quand et comment utiliser ce skill.", + "cancel": "Annuler", + "createSkill": "Creer le skill", + "created": "Skill \"{name}\" cree", + "failedCreate": "Echec de la creation du skill" + } + }, + "notification": { + "title": "Notifications", + "live": "En direct", + "unreadTotal": "{unread} non lues · {total} total", + "totalNotifications": "{count} notification{plural}", + "noGrouping": "Pas de regroupement", + "groupByProject": "Regrouper par projet", + "groupByType": "Regrouper par type", + "cancel": "Annuler", + "markRead": "Marquer comme lu", + "archive": "Archiver", + "markAllRead": "Tout marquer comme lu", + "selectMultiple": "Selection multiple", + "selectModeActive": "✓ Mode selection active", + "markAllReadInGroup": "Tout marquer comme lu dans le groupe", + "filterAll": "Tout", + "filterUnread": "Non lues", + "filterArchived": "Archivees", + "notificationSettings": "Parametres de notification", + "noUnread": "Pas de notifications non lues", + "noArchived": "Pas de notifications archivees", + "noNotifications": "Pas encore de notifications", + "allCaughtUp": "Vous etes a jour!", + "archivedAppearHere": "Les notifications archivees apparaitront ici.", + "notificationsAppearHere": "Vous verrez les notifications ici lorsqu'un evenement se produit.", + "justNow": "a l'instant", + "minutesAgo": "il y a {count}m", + "hoursAgo": "il y a {count}h", + "daysAgo": "il y a {count}j", + "markAsRead": "Marquer comme lu", + "notificationArchived": "Notification archivee", + "failedMarkRead": "Echec du marquage comme lu", + "failedArchive": "Echec de l'archivage", + "failedMarkAllRead": "Echec du marquage de tout comme lu", + "notificationsArchived": "{count} notifications archivees", + "typeMention": "Mention", + "typeInvitation": "Invitation", + "typeProjectInvite": "Invitation projet", + "typeWorkspaceInvite": "Invitation workspace", + "typeRoleChange": "Changement de role", + "typeRoomCreated": "Salon cree", + "typeRoomDeleted": "Salon supprime", + "typeAnnouncement": "Annonce", + "typeIssueOpened": "Issue ouverte", + "typeIssueCommented": "Commentaire d'issue", + "typeIssueClosed": "Issue fermee", + "typeReviewRequested": "Revue demandee", + "typePrApproved": "PR approuvee", + "typePrMerged": "PR fusionnee" + }, + "search": { + "placeholder": "Rechercher projets, depots, issues, utilisateurs...", + "searchButton": "Rechercher", + "projects": "Projets", + "repositories": "Depots", + "issues": "Issues", + "users": "Utilisateurs", + "messages": "Messages", + "resultsFor": "{count} resultats pour \"{query}\"", + "noResultsFor": "Aucun resultat pour \"{query}\"", + "messagesFor": "{count} message{plural} pour \"{query}\"{inRoom}", + "noMessagesFor": "Aucun message trouve correspondant a \"{query}\"", + "noMessagesInRoom": "Aucun message trouve dans le salon \"{room}\" correspondant a \"{query}\"", + "searchFailed": "Echec de la recherche", + "enterKeyword": "Entrez un mot-cle pour rechercher dans tous les contenus.", + "noResultsFound": "Aucun resultat trouve", + "tryDifferentKeywords": "Essayez d'autres mots-cles ou verifiez l'orthographe.", + "showing": "Affichage de {count} sur {total} {type}", + "roomIdPlaceholder": "ID du salon pour rechercher les messages (ex. workspace:general)...", + "acrossAllRooms": "dans tous les salons accessibles", + "inRoom": " dans le salon {room}" + }, + "settings": { + "account": { + "title": "Compte", + "subtitle": "Gerez les informations et preferences de votre compte.", + "changePassword": "Changer le mot de passe", + "changePasswordDesc": "Mettez a jour votre mot de passe pour securiser votre compte.", + "currentPassword": "Mot de passe actuel", + "currentPasswordPlaceholder": "Entrez votre mot de passe actuel", + "newPassword": "Nouveau mot de passe", + "newPasswordPlaceholder": "Entrez votre nouveau mot de passe", + "confirmNewPassword": "Confirmer le nouveau mot de passe", + "confirmNewPasswordPlaceholder": "Confirmez votre nouveau mot de passe", + "passwordMinLength": "Doit contenir au moins 8 caracteres", + "changePasswordButton": "Changer le mot de passe", + "changing": "Modification...", + "emailAddress": "Adresse e-mail", + "emailAddressDesc": "Mettez a jour votre adresse e-mail. Un e-mail de verification sera envoye pour confirmation.", + "currentEmail": "E-mail actuel", + "noEmailOnRecord": "Pas d'e-mail enregistre", + "newEmailAddress": "Nouvelle adresse e-mail", + "newEmailPlaceholder": "Entrez votre nouvelle adresse e-mail", + "confirmWithPassword": "Confirmer avec le mot de passe", + "passwordPlaceholder": "Entrez votre mot de passe actuel", + "sendVerificationEmail": "Envoyer l'e-mail de verification", + "sending": "Envoi...", + "preferences": "Preferences", + "preferencesDesc": "Personnalisez vos preferences de compte et parametres de notification.", + "language": "Langue", + "theme": "Theme", + "timezone": "Fuseau horaire", + "light": "Clair", + "dark": "Sombre", + "system": "Systeme", + "notifications": "Notifications", + "emailNotifications": "Notifications par e-mail", + "emailNotificationsDesc": "Recevoir des notifications par e-mail pour les mises a jour importantes", + "inAppNotifications": "Notifications dans l'application", + "inAppNotificationsDesc": "Afficher les notifications dans l'application", + "reset": "Reinitialiser", + "saveChanges": "Enregistrer les modifications", + "saving": "Enregistrement...", + "passwordChangedSuccess": "Mot de passe change avec succes", + "preferencesUpdatedSuccess": "Preferences mises a jour avec succes", + "failedChangePassword": "Echec du changement de mot de passe", + "failedUpdatePreferences": "Echec de la mise a jour des preferences", + "failedLoadPreferences": "Echec du chargement des preferences.", + "verificationEmailSent": "E-mail de verification envoye! Veuillez verifier votre nouvel e-mail pour confirmer.", + "failedRequestEmailChange": "Echec de la demande de changement d'e-mail", + "enterCurrentPassword": "Veuillez entrer votre mot de passe actuel", + "enterNewPassword": "Veuillez entrer un nouveau mot de passe", + "newPasswordMinLength": "Le nouveau mot de passe doit contenir au moins 8 caracteres", + "passwordsDoNotMatch": "Les mots de passe ne correspondent pas", + "enterNewEmail": "Veuillez entrer une nouvelle adresse e-mail", + "enterValidEmail": "Veuillez entrer une adresse e-mail valide", + "enterPasswordConfirm": "Veuillez entrer votre mot de passe pour confirmer" + }, + "preferences": { + "title": "Preferences", + "subtitle": "Gerez vos preferences personnelles et parametres de notification.", + "notificationChannels": "Canaux de notification", + "notificationChannelsDesc": "Choisissez comment vous souhaitez recevoir les notifications.", + "emailNotificationsLabel": "Notifications par e-mail", + "emailNotificationsDesc": "Recevoir les notifications par e-mail", + "inAppNotificationsLabel": "Notifications dans l'application", + "inAppNotificationsDesc": "Afficher les notifications dans l'application", + "browserPush": "Notifications push du navigateur", + "pushUnsupported": "Votre navigateur ne supporte pas les notifications push", + "pushBlocked": "Bloque par le navigateur. Activez dans les parametres du site.", + "pushSubscribed": "Abonne — vous recevrez des notifications navigateur", + "pushNotSubscribed": "Recevoir des notifications meme lorsque l'onglet est ferme", + "pushEnable": "Activer", + "pushDisable": "Desactiver", + "doNotDisturb": "Ne pas deranger", + "doNotDisturbDesc": "Definissez des heures silencieuses pendant lesquelles vous ne souhaitez pas etre derange.", + "enableDnd": "Activer Ne pas deranger", + "dndDesc": "Desactiver les notifications pendant des heures specifiques", + "startTime": "Heure de debut", + "endTime": "Heure de fin", + "notificationCategories": "Categories de notification", + "notificationCategoriesDesc": "Choisissez les types de notifications que vous souhaitez recevoir.", + "securityAlerts": "Alertes de securite", + "securityAlertsDesc": "Mises a jour et alertes de securite importantes", + "productUpdates": "Mises a jour produit", + "productUpdatesDesc": "Nouvelles fonctionnalites et annonces produit", + "marketingPromotions": "Marketing & Promotions", + "marketingDesc": "Conseils, offres et contenus promotionnels", + "developmentActivity": "Activite de developpement", + "developmentActivityDesc": "Controlez les notifications pour l'activite de revue de code et de collaboration.", + "issuesActivity": "Issues", + "issuesActivityDesc": "Ouvertes, fermees, assignees ou commentees", + "pullRequestsActivity": "Pull Requests", + "prActivityDesc": "Revue demandee, approuvee, fusionnee ou commentee", + "mentionsActivity": "@Mentions", + "mentionsActivityDesc": "Quand quelqu'un vous mentionne dans un message, issue ou PR", + "roomMessagesActivity": "Messages de salon", + "roomMessagesDesc": "Nouveaux messages dans les chaines auxquelles vous etes abonne" + }, + "security": { + "title": "Securite", + "subtitle": "Gerez vos parametres de securite et methodes d'authentification.", + "securitySettings": "Parametres de securite", + "securityDesc": "Configurez l'authentification a deux facteurs, les politiques de mot de passe et la gestion des sessions.", + "twoFactorAuth": "Authentification a deux facteurs", + "twoFactorDesc": "Ajoutez une couche de securite supplementaire requiring plus qu'un simple mot de passe pour vous connecter.", + "enable": "Activer", + "disable": "Desactiver", + "passwordPolicy": "Politique de mot de passe", + "passwordPolicyDesc": "Definissez les exigences de force du mot de passe", + "standard": "Standard", + "sessionManagement": "Gestion des sessions", + "sessionManagementDesc": "Voir et gerer les sessions actives", + "active": "actif", + "manage": "Gerer" + }, + "profile": { + "title": "Profil", + "subtitle": "Gerez vos informations personnelles et parametres de profil.", + "profileInfo": "Informations du profil", + "profileInfoDesc": "Voir vos informations de base du compte.", + "username": "Nom d'utilisateur", + "displayName": "Nom d'affichage", + "notSet": "Non defini", + "email": "E-mail", + "memberSince": "Membre depuis", + "publicProfile": "Profil public", + "publicProfileDesc": "Mettez a jour vos informations de profil public.", + "publicAvatar": "Avatar public", + "uploadAvatar": "Telecharger un nouvel avatar", + "avatarFormat": "JPG, GIF ou PNG. Taille max 2Mo.", + "bio": "Bio", + "bioPlaceholder": "Parlez-nous de vous", + "bioDesc": "Votre bio ou description", + "organization": "Organisation", + "orgPlaceholder": "Votre entreprise ou organisation", + "orgDesc": "L'organisation a laquelle vous appartenez", + "reset": "Reinitialiser", + "saveChanges": "Enregistrer les modifications", + "saving": "Enregistrement...", + "avatarUploaded": "Avatar telecharge avec succes", + "failedUploadAvatar": "Echec du telechargement de l'avatar", + "fileSizeLimit": "La taille du fichier doit etre inferieure a 2Mo", + "profileUpdated": "Profil mis a jour avec succes", + "failedUpdateProfile": "Echec de la mise a jour du profil" + }, + "tokens": { + "title": "Jetons", + "subtitle": "Gerez vos jetons d'acces personnel pour l'acces API.", + "createToken": "Creer un jeton", + "personalAccessTokens": "Jetons d'acces personnel", + "noTokensDesc": "Aucun jeton trouve. Creez un nouveau jeton pour commencer.", + "tokensCount": "Vous avez {count} jeton d'acces configure.", + "tokensCountPlural": "Vous avez {count} jetons d'acces configures.", + "loadingTokens": "Chargement des jetons d'acces...", + "noAccessTokens": "Aucun jeton d'acces", + "noAccessTokensDesc": "Creez un jeton d'acces personnel pour authentifier les requetes API et acceder aux depots Git via HTTPS.", + "createFirstToken": "Creez votre premier jeton", + "untitled": "Sans titre", + "revoked": "Revoque", + "scopes": "Portees:", + "created": "Cree le {date}", + "expires": "Expire le {date}", + "neverExpires": "N'expire jamais", + "revoke": "Revoquer", + "createAccessToken": "Creer un jeton d'acces", + "createTokenDesc": "Creez un nouveau jeton d'acces personnel pour l'authentification API.", + "tokenName": "Nom du jeton", + "tokenNamePlaceholder": "ex., Pipeline CI/CD, Environnement de developpement", + "tokenNameDesc": "Choisissez un nom descriptif pour ce jeton", + "scopesLabel": "Portees", + "scopesDesc": "Selectionnez les permissions de ce jeton", + "expirationDate": "Date d'expiration (Optionnel)", + "expirationDesc": "Laissez vide pour pas d'expiration", + "cancel": "Annuler", + "creating": "Creation...", + "tokenCreated": "Jeton cree avec succes", + "tokenCreatedDesc": "Assurez-vous de copier votre jeton d'acces maintenant. Vous ne pourrez plus le voir!", + "yourAccessToken": "Votre jeton d'acces", + "tokenImportant": "Important: Ce jeton ne sera montre qu'une seule fois. Stockez-le en securite.", + "iHaveSavedToken": "J'ai enregistre mon jeton", + "tokenCopied": "Jeton copie dans le presse-papiers", + "deleteTokenTitle": "Supprimer le jeton d'acces", + "deleteTokenDesc": "Etes-vous sur de vouloir supprimer ce jeton d'acces? Cette action est irreversible et toute application utilisant ce jeton perdra immediatement l'acces.", + "deleting": "Suppression...", + "delete": "Supprimer", + "revokeTokenTitle": "Revoquer le jeton d'acces", + "revokeTokenDesc": "Etes-vous sur de vouloir revoker ce jeton d'acces? Le jeton sera desactive immediatement et ne pourra plus etre utilise pour l'authentification.", + "tokenCreatedSuccess": "Jeton d'acces cree avec succes", + "failedCreateToken": "Echec de la creation du jeton", + "tokenDeleted": "Jeton d'acces supprime avec succes", + "failedDeleteToken": "Echec de la suppression du jeton", + "nameRequired": "Veuillez entrer un nom pour le jeton d'acces", + "scopeRequired": "Veuillez selectionner au moins une portee" + }, + "activity": { + "title": "Activite", + "subtitle": "Voir votre activite recente et vos notifications.", + "markAllRead": "Tout marquer comme lu", + "recentNotifications": "Notifications recentes", + "unread": "{count} non lues", + "noNotifications": "Pas encore de notifications. Votre activite apparaitra ici.", + "newLabel": "Nouveau", + "noContent": "Pas de contenu", + "unknownDate": "Date inconnue", + "allMarkedRead": "Toutes les notifications marquees comme lues", + "failedMarkAllRead": "Echec du marquage de toutes les notifications comme lues", + "markedRead": "Notification marquee comme lue", + "failedMarkRead": "Echec du marquage de la notification comme lue" + } + }, + "init": { + "project": { + "title": "Creer un nouveau projet", + "subtitle": "Creez un nouveau projet pour organiser vos depots", + "projectName": "Nom du projet", + "namePlaceholder": "mon-super-projet", + "description": "Description", + "descPlaceholder": "Une breve description de votre projet...", + "workspace": "Workspace", + "noWorkspace": "Pas de workspace (projet independant)", + "workspaceHint": "Associez facultativement ce projet a un workspace.", + "publicProject": "Projet public", + "publicProjectHint": "Rendre ce projet visible par tous", + "creating": "Creation...", + "createProject": "Creer le projet", + "cancel": "Annuler", + "nameRequired": "Le nom du projet est requis", + "nameAvailable": "Le nom du projet est disponible", + "nameExists": "Le nom du projet existe deja", + "failedCheckAvailability": "Echec de la verification de disponibilite", + "failedCreate": "Echec de la creation du projet", + "createdSuccess": "Projet cree avec succes!" + }, + "repository": { + "title": "Creer un nouveau depot", + "subtitle": "Creez un nouveau depot Git dans votre projet", + "project": "Projet", + "noProjects": "Vous n'avez pas encore de projets.", + "createProject": "Creer un projet", + "selectProject": "Selectionner un projet", + "loadingProjects": "Chargement des projets...", + "repoName": "Nom du depot", + "namePlaceholder": "mon-super-depot", + "description": "Description", + "descPlaceholder": "Une breve description de votre depot...", + "defaultBranch": "Branche par defaut", + "defaultBranchPlaceholder": "main", + "initRepo": "Initialiser le depot", + "initRepoOn": "Creer un depot git nu maintenant. Definissez la branche par defaut ci-dessous.", + "initRepoOff": "Passer l'initialisation. La branche par defaut sera definie automatiquement lors du push.", + "privateRepo": "Depot prive", + "privateAuto": "Ce depot doit etre prive car le projet est prive", + "privateManual": "Rendre ce depot prive et restreindre l'acces", + "creating": "Creation...", + "createRepo": "Creer le depot", + "cancel": "Annuler", + "selectProjectFirst": "Veuillez d'abord selectionner un projet", + "nameRequired": "Le nom du depot est requis", + "nameAvailable": "Le nom du depot est disponible", + "nameExists": "Le nom du depot existe deja", + "failedCheckAvailability": "Echec de la verification de disponibilite", + "failedCreate": "Echec de la creation du depot", + "createdSuccess": "Depot cree avec succes", + "failedLoadProjects": "Echec du chargement des projets", + "failedLoadDetails": "Depot cree mais echec du chargement des details" + } + }, + "pricing": { + "title": "Tarification simple et transparente.", + "subtitle": "Commencez gratuitement. Scalez selon la croissance de votre flotte d'agents.", + "free": "Gratuit", + "freePrice": "0 €", + "freePeriod": "pour toujours", + "freeDesc": "Command as Service pour les particuliers — commandes versionnees, memoire d'agent et registre de skills inclus.", + "freeCta": "Commencer gratuitement", + "freeFeatures": [ + "3 agents actifs", + "5 Go de memoire d'agent", + "Registre de skills communautaire", + "Salons publics", + "Historique de 7 jours" + ], + "pro": "Pro", + "proPrice": "29 €", + "proPeriod": "par mois", + "proDesc": "Command as Service pour les equipes — agents illimites, audit complet du flux de commandes et calcul prioritaire.", + "proCta": "Obtenir Pro", + "proFeatures": [ + "Agents illimites", + "50 Go de memoire d'agent", + "Registre de skills prive", + "Collaborative Rooms", + "Historique de 90 jours", + "Calcul prioritaire", + "Support par e-mail" + ], + "enterprise": "Enterprise", + "enterprisePrice": "Sur mesure", + "enterpriseDesc": "Command as Service a grande echelle — deploiement personnalise, gouvernance granulaire du flux de commandes et SLA dedie pour votre flotte d'agents.", + "enterpriseCta": "Contacter le service commercial", + "enterpriseFeatures": [ + "Tout de Pro", + "Memoire illimitee", + "SSO / SAML", + "Routage de modele personnalise", + "Calcul dedie", + "Garantie SLA", + "Support dedie" + ], + "faqHeading": "Questions frequentes", + "faqSubtitle": "Reponses aux questions de facturation.", + "faq1Q": "Puis-je changer de plan a tout moment?", + "faq1A": "Oui. Passez a un forfait superieur ou inferieur a tout moment. Les modifications prennent effet au prochain cycle de facturation.", + "faq2Q": "Qu'est-ce qui compte comme memoire d'agent?", + "faq2A": "La memoire d'agent est le contexte persistant total stocke sur tous vos agents, incluant l'historique de conversation et la memoire a long terme.", + "faq3Q": "Y a-t-il un essai gratuit pour Pro?", + "faq3A": "Oui — le forfait gratuit vous permet d'explorer toutes les fonctionnalites Pro pendant 14 jours lors de la mise a niveau." + }, + "repository": { + "list": { + "repositories": "Depots", + "searchPlaceholder": "Rechercher des depots…", + "filter": "Filtrer", + "new": "Nouveau", + "filters": "Filtres", + "clearAll": "Tout effacer", + "visibility": "Visibilite", + "all": "Tout", + "public": "Public", + "private": "Prive", + "sortBy": "Trier par", + "lastUpdated": "Derniere mise a jour", + "name": "Nom", + "linkedIssues": "Issues liees", + "stars": "Etoiles", + "repository": "depot", + "repositoriesPlural": "depots", + "errorLoading": "Erreur:", + "errorLoadFailed": "Echec du chargement des depots", + "noRepositories": "Aucun depot trouve", + "clearFilters": "Effacer les filtres", + "watches": "Abonnements", + "branches": "Branches", + "defaultBranch": "Branche par defaut", + "lastUpdatedColumn": "Derniere mise a jour", + "never": "Jamais", + "showing": "Affichage de {start}–{end} sur {total}", + "previous": "Precedent", + "next": "Suivant", + "page": "Page {page}" + }, + "overview": { + "repositoryStats": "Statistiques du depot", + "defaultBranch": "Branche par defaut", + "commits": "Commits", + "branches": "Branches", + "tags": "Tags", + "stars": "Etoiles", + "watchers": "Observateurs", + "readme": "README", + "starred": "En favori", + "unstarred": "Favori retire", + "watching": "S'abonner au depot", + "stoppedWatching": "Abonnement arrete", + "failedToStar": "Echec de l'ajout en favori", + "failedToUnstar": "Echec du retrait du favori", + "failedToWatch": "Echec de l'abonnement", + "failedToUnwatch": "Echec de l'arret de l'abonnement" + }, + "subpages": { + "commits": { + "title": "Commits", + "description": "Parcourez l'historique des commits de ce depot.", + "comingSoon": "Bientot disponible", + "notAvailable": "L'historique des commits n'est pas encore disponible." + }, + "branches": { + "title": "Branches", + "description": "Gerez et parcourez les branches du depot.", + "comingSoon": "Bientot disponible", + "notAvailable": "La liste et la gestion des branches ne sont pas encore disponibles." + }, + "tags": { + "title": "Tags", + "description": "Parcourez les tags et releases du depot.", + "comingSoon": "Bientot disponible", + "notAvailable": "La gestion des tags et releases n'est pas encore disponible." + }, + "files": { + "title": "Fichiers", + "description": "Parcourez et gerez les fichiers du depot.", + "comingSoon": "Bientot disponible", + "notAvailable": "Le navigateur de fichiers n'est pas encore disponible." + }, + "contributors": { + "title": "Contributeurs", + "description": "Voir les statistiques et l'activite des contributeurs.", + "comingSoon": "Bientot disponible", + "notAvailable": "Les statistiques des contributeurs ne sont pas encore disponibles." + }, + "pullRequests": { + "title": "Pull Requests", + "description": "Creez et gerez les pull requests pour {repo}.", + "comingSoon": "Bientot disponible", + "notAvailable": "La gestion des pull requests n'est pas encore disponible." + } + } + }, + "workspace": { + "projects": { + "title": "Projets", + "newProject": "Nouveau projet", + "noProjects": "Pas encore de projets dans ce workspace.", + "createFirstProject": "Creez votre premier projet", + "noDescription": "Pas de description", + "private": "Prive" + }, + "members": { + "title": "Membres", + "inviteMember": "Inviter un membre", + "inviteTo": "Inviter a {name}", + "inviteDescription": "Ils recevront un e-mail avec un lien pour rejoindre ce workspace. Les invitations expirent dans 7 jours.", + "emailAddress": "Adresse e-mail", + "emailPlaceholder": "collegue@exemple.fr", + "role": "Role", + "memberRoleDesc": "Membre — peut voir et contribuer aux projets", + "adminRoleDesc": "Admin — peut gerer les membres et les parametres", + "adminInfo": "Les admins peuvent gerer les parametres du workspace, les membres et la facturation.", + "memberInfo": "Les membres peuvent creer et gerer les projets assignes a ce workspace.", + "cancel": "Annuler", + "sendInvitation": "Envoyer l'invitation", + "sending": "Envoi...", + "pendingInvitations": "Invitations en attente", + "expires": "expire le {date}", + "by": "par @{username}", + "searchMembers": "Rechercher des membres...", + "allRoles": "Tous les roles", + "owner": "Proprietaire", + "admin": "Admin", + "member": "Membre", + "memberColumn": "Membre", + "roleColumn": "Role", + "invitedBy": "Invite par", + "joined": "Rejoint", + "noMatch": "Aucun membre ne correspond a vos filtres", + "noMembers": "Pas encore de membres", + "remove": "Supprimer", + "page": "Page {page} sur {totalPages}", + "totalMembers": "{count} membres au total", + "invitationSent": "Invitation envoyee a {email}", + "failedSendInvitation": "Echec de l'envoi de l'invitation", + "memberRemoved": "Membre supprime", + "failedRemoveMember": "Echec de la suppression du membre", + "invitationCancelled": "Invitation annulee", + "failedCancelInvitation": "Echec de l'annulation de l'invitation", + "roleUpdated": "Role mis a jour", + "failedUpdateRole": "Echec de la mise a jour du role", + "pending": "En attente" + }, + "settings": { + "title": "Parametres du Workspace", + "general": "General", + "avatarUrl": "URL de l'avatar", + "avatarUrlPlaceholder": "https://exemple.fr/avatar.png", + "avatarHint": "Entrez une URL vers une image pour l'avatar du workspace.", + "workspaceName": "Nom du Workspace", + "namePlaceholder": "Mon Workspace", + "description": "Description", + "descPlaceholder": "Decrivez ce workspace...", + "billingEmail": "E-mail de facturation", + "billingEmailPlaceholder": "facturation@exemple.fr", + "billingHint": "Les factures seront envoyees a cette adresse e-mail.", + "saveChanges": "Enregistrer les modifications", + "saving": "Enregistrement...", + "plan": "Plan", + "currentPlan": "Plan actuel", + "manageBilling": "Gerer la facturation", + "dangerZone": "Zone dangereuse", + "deleteWorkspace": "Supprimer le workspace", + "deleteWarning": "Supprimer definitivement ce workspace et toutes ses donnees. Cette action est irreversible.", + "deletingWorkspace": "Suppression...", + "deleteConfirm": "Etes-vous sur de vouloir supprimer ce workspace? Cette action est irreversible.", + "updated": "Workspace mis a jour", + "failedUpdate": "Echec de la mise a jour du workspace", + "deleted": "Workspace supprime", + "failedDelete": "Echec de la suppression du workspace" + } + }, + "projectSettings": { + "general": { + "title": "General", + "description": "Description", + "projectAvatar": "Avatar du projet", + "uploadAvatar": "Telecharger l'avatar", + "avatarFormat": "PNG, JPG, GIF ou WebP. Max 2Mo.", + "displayName": "Nom d'affichage", + "publicVisibility": "Visibilite publique", + "publicVisibilityDesc": "Permettre a tous de voir ce projet.", + "saveChanges": "Enregistrer les modifications", + "confirmTitle": "Confirmer les modifications du projet", + "confirmDescription": "Vous etes sur le point de mettre a jour les parametres suivants:", + "displayNameField": "Nom d'affichage", + "descriptionField": "Description", + "visibilityField": "Visibilite: {visibility}", + "publicWarning": "Rendre ce projet public permettra a chacun de voir son contenu.", + "confirmSave": "Confirmer et enregistrer", + "projectAvatarUpdated": "Avatar du projet mis a jour", + "failedUploadAvatar": "Echec du telechargement de l'avatar", + "fileSizeLimit": "La taille du fichier doit etre inferieure a 2Mo", + "projectSettingsUpdated": "Parametres du projet mis a jour", + "failedUpdateProject": "Echec de la mise a jour des parametres du projet" + }, + "members": { + "title": "Membres", + "invite": "Inviter", + "searchMembers": "Rechercher des membres…", + "member": "membre", + "members": "membres", + "noMatchSearch": "Aucun membre ne correspond a votre recherche", + "noMembers": "Aucun membre trouve", + "clearSearch": "Effacer la recherche", + "user": "Utilisateur", + "role": "Role", + "joined": "Rejoint", + "actions": "Actions", + "inviteMemberTitle": "Inviter un membre", + "email": "E-mail", + "emailPlaceholder": "collegue@exemple.fr", + "cancel": "Annuler", + "sendInvite": "Envoyer l'invitation", + "sending": "Envoi…", + "removeMemberTitle": "Supprimer le membre", + "removeConfirm": "Etes-vous sur de vouloir supprimer {username} de ce projet?", + "removing": "Suppression…", + "remove": "Supprimer", + "invitationSent": "Invitation envoyee", + "failedSendInvitation": "Echec de l'envoi de l'invitation", + "memberRemoved": "Membre supprime", + "failedRemoveMember": "Echec de la suppression du membre", + "roleUpdated": "Role mis a jour", + "failedUpdateRole": "Echec de la mise a jour du role", + "emailRequired": "L'e-mail est requis", + "errorLoading": "Erreur:", + "failedLoadMembers": "Echec du chargement des membres" + }, + "labels": { + "title": "Labels", + "description": "Description", + "editLabel": "Modifier le label", + "createLabel": "Creer un label", + "nameRequired": "Nom *", + "namePlaceholder": "Nom du label", + "color": "Couleur", + "descPlaceholder": "Decrivez ce label", + "cancel": "Annuler", + "updateLabel": "Mettre a jour le label", + "createLabelButton": "Creer le label", + "addLabel": "Ajouter un label", + "failedToLoad": "Echec du chargement des labels", + "noLabels": "Aucun label trouve. Creez votre premier label.", + "deleteLabelTitle": "Supprimer le label", + "deleteLabelConfirm": "Etes-vous sur de vouloir supprimer ce label? Cette action est irreversible.", + "delete": "Supprimer", + "labelCreated": "Label cree", + "labelUpdated": "Label mis a jour", + "labelDeleted": "Label supprime", + "failedCreateLabel": "Echec de la creation du label", + "failedUpdateLabel": "Echec de la mise a jour du label", + "failedDeleteLabel": "Echec de la suppression du label", + "nameRequiredError": "Le nom du label est requis" + }, + "boards": { + "title": "Tableaux", + "newBoard": "Nouveau tableau", + "noBoards": "Pas encore de tableaux", + "noBoardsHint": "Creez un tableau pour organiser le travail de votre projet.", + "newBoardDialog": "Nouveau tableau", + "name": "Nom", + "namePlaceholder": "ex. Planification Sprint", + "description": "Description", + "descriptionPlaceholder": "Optionnel", + "cancel": "Annuler", + "createBoard": "Creer le tableau", + "updated": "Mis a jour le {date}", + "failedCreate": "Echec de la creation du tableau" + }, + "billing": { + "currentBilling": "Facturation actuelle", + "description": "Quota, utilisation et solde du cycle actuel.", + "monthlyQuota": "Quota mensuel", + "currentBalance": "Solde actuel", + "currentUsage": "Utilisation actuelle", + "billingHistory": "Historique de facturation", + "billingHistoryDesc": "Enregistrements du flux de facturation du projet.", + "noRecords": "Pas encore d'enregistrements de facturation.", + "time": "Heure", + "reason": "Raison", + "amount": "Montant", + "currency": "Devise", + "type": "Type", + "charge": "Debit", + "credit": "Credit", + "showing": "Affichage de {start} a {end} sur {total} enregistrements", + "page": "Page {page} sur {totalPages}", + "failedToLoad": "Echec du chargement des informations de facturation." + }, + "skills": { + "title": "Skills", + "subtitle": "Instructions d'agent pour ce projet", + "searchPlaceholder": "Rechercher des skills...", + "all": "Tout", + "manual": "Manuel", + "repo": "Depot", + "scanRepos": "Scanner les depots", + "addSkill": "Ajouter un skill", + "noSkills": "Aucun skill trouve", + "noSkillsHint": "Ajoutez des skills manuellement ou scannez les depots pour decouvrir les fichiers SKILL.md.", + "noMatch": "Aucun skill ne correspond a votre recherche ou filtre.", + "deleteSkill": "Supprimer le skill", + "deleteConfirm": "Etes-vous sur de vouloir supprimer \"{name}\"? Cette action est irreversible.", + "cancel": "Annuler", + "delete": "Supprimer", + "content": "Contenu", + "moreLines": "+{count} lignes supplementaires", + "copied": "Copie", + "copyContent": "Copier le contenu", + "scannedFromRepo": "Scanne depuis le depot", + "addedManually": "Ajoute manuellement", + "failedLoad": "Echec du chargement des skills", + "scanSuccess": "Depots scannes avec succes", + "scanFailed": "Echec du scan des depots", + "deleted": "\"{name}\" supprime", + "failedDelete": "Echec de la suppression du skill" + }, + "webhook": { + "title": "Webhooks", + "description": "Configurez les webhooks pour recevoir des notifications sur les evenements de votre projet.", + "comingSoon": "Bientot disponible", + "notAvailable": "La configuration des webhooks n'est pas encore disponible." + }, + "oauth": { + "title": "Application OAuth", + "description": "Creez et gerez des applications OAuth pour les integrations tierces.", + "comingSoon": "Bientot disponible", + "notAvailable": "La gestion des applications OAuth n'est pas encore disponible." + } + }, + "shared": { + "projects": "Projets", + "loading": "Chargement...", + "error": "Erreur", + "success": "Succes", + "cancel": "Annuler", + "confirm": "Confirmer", + "delete": "Supprimer", + "edit": "Modifier", + "save": "Enregistrer", + "close": "Fermer", + "back": "Retour", + "next": "Suivant", + "previous": "Precedent", + "submit": "Soumettre", + "search": "Rechercher", + "filter": "Filtrer", + "clear": "Effacer", + "reset": "Reinitialiser", + "apply": "Appliquer", + "yes": "Oui", + "no": "Non", + "ok": "OK", + "retry": "Reessayer", + "refresh": "Actualiser", + "noData": "Pas de donnees", + "noResults": "Aucun resultat", + "loadingFailed": "Echec du chargement", + "operationFailed": "Operation echouee", + "operationSuccess": "Operation reussie" + }, + "about": { + "title": "A propos de GitDataAI", + "subtitle": "Nous croyons que chaque action d'ingenierie devrait etre une commande versionnee — auditable, repeatable et approuvee par l'homme. Nous construisons la plateforme Command as Service pour l'ere des agents.", + "quote": "\"Chaque action est une commande. Chaque commande est versionnee et auditable.\"", + "mission": "GitDataAI a ete fondee pour apporter Command as Service a l'ere des agents — chaque decision d'agent versionnee, chaque flux de commandes auditable, chaque action humain-dans-la-boucle approuvee.", + "ourValues": "Nos valeurs", + "values": { + "transparency": { + "title": "Transparence", + "desc": "Chaque decision d'agent est journalisee, versionnee et auditable. Pas de boite noire." + }, + "collaboration": { + "title": "Collaboration", + "desc": "Les humains et les agents sont des pairs. Aucun ne remplace l'autre — ensemble ils accomplissent plus." + }, + "reliability": { + "title": "Fiabilite", + "desc": "Infrastructure de qualite production. Vos agents fonctionnent quand vous en avez besoin." + }, + "extensibility": { + "title": "Extensibilite", + "desc": "Registre ouvert, API ouverte. Le reseau grandit grace aux contributions de la communaute." + } + }, + "theTeam": "L'equipe", + "hiring": "Nous recrutons. Venez construire avec nous.", + "join": "Rejoindre GitDataAI", + "github": "GitHub" + }, + "invitations": { + "title": "Mes invitations", + "pendingCount": "{count} invitation en attente", + "pendingCountPlural": "{count} invitations en attente", + "noPending": "Pas d'invitation en attente", + "noPendingHint": "Les invitations de projet et workspace apparaitront ici.", + "projectInvitation": "Invitation projet", + "workspaceInvitation": "Invitation workspace", + "invitedToJoin": "Vous avez ete invite a rejoindre {name}", + "invitedToWorkspace": "Vous avez ete invite a rejoindre le workspace {name}", + "by": "par {username}", + "accept": "Accepter", + "decline": "Refuser", + "acceptedProject": "Vous avez rejoint le projet: {name}", + "declinedInvitation": "Invitation a {name} refusee", + "acceptedWorkspace": "Vous avez rejoint le workspace", + "failedAccept": "Echec de l'acceptation de l'invitation", + "failedDecline": "Echec du refus de l'invitation" + }, + "network": { + "title": "Le reseau GitDataAI", + "subtitle": "Un ecosysteme croissant d'agents, workspaces et skills collaborant via un flux de commandes unifie. Chaque action d'agent est une commande. Chaque commande est repeatable.", + "activeAgents": "Agents actifs", + "workspaces": "Workspaces", + "skillRuns": "Executions de skills", + "uptimeSla": "SLA de disponibilite", + "publicRooms": "Salons publics", + "live": "EN DIRECT", + "active": "Actif", + "agents": "{count} agents", + "participants": "{count}", + "privacyByDefault": "Prive par defaut", + "privacyDesc": "Tous les workspaces sont prives par defaut. Vous controlez qui voit vos agents, skills et historique de conversation. Les salons publics necessitent un opt-in explicite.", + "network": "Reseau", + "roomsLive": "{count} salons en direct", + "ended": "TERMINE", + "startYourOwnRoom": "Lancez votre propre salon" + }, + "skills": { + "title": "Le registre de Skills", + "subtitle": "Comportements d'agent reutilisables et versionnes, conditionnes en skills — invoques par commande, deployes sur toute votre flotte d'agents.", + "searchPlaceholder": "Rechercher des skills...", + "categories": [ + "Tout", + "Frontend", + "Backend", + "DevOps", + "Securite", + "Donnees", + "Tests" + ], + "publishCTA": "Publiez votre propre skill et rejoignez le registre.", + "publishButton": "Publier un skill", + "runs": "{count} executions" + }, + "solutions": { + "title": "Command as Service", + "subtitle": "Dans GitDataAI, chaque action est une commande de premiere classe. Les commandes sont versionnees, auditables et composables — votre workflow de developpement est votre API.", + "learnMore": "En savoir plus", + "coreConcept": "Concept central" + }, + "notificationDrawer": { + "title": "Notifications", + "live": "En direct", + "markAllRead": "Tout marquer comme lu", + "noNotifications": "Pas encore de notifications", + "noNotificationsHint": "Vous verrez les mises a jour ici lorsqu'un evenement se produit.", + "viewAll": "Voir toutes les notifications", + "unread": "{count} non lues", + "notifications": "Notifications" + } +} diff --git a/public/locales/de/translation.json b/public/locales/de/translation.json new file mode 100644 index 0000000..72fa29a --- /dev/null +++ b/public/locales/de/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": "KI-Agenten", + "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": "Genehmigen", + "viewDiff": "Diff anzeigen" + }, + "nav": { + "platform": "Plattform", + "skills": "Skills", + "network": "Netzwerk", + "pricing": "Preise", + "signIn": "Anmelden", + "joinBeta": "Beta beitreten", + "commandAsServiceNav": "Command as Service", + "collaborativeRoomsNav": "Collaborative Rooms", + "aiAgentsNav": "KI-Agenten", + "gitRepositoriesNav": "Git-Repositories", + "exploreSkillsNav": "Skills erkunden", + "publishSkillNav": "Skill veroeffentlichen", + "skillDocumentationNav": "Skill-Dokumentation", + "exploreNetworkNav": "Netzwerk erkunden", + "publicRoomsNav": "Oeffentliche Raeume", + "developerApiNav": "Developer API", + "plansPricingNav": "Plaene & Preise", + "enterpriseNav": "Enterprise", + "billingFaqNav": "Abrechnungs-FAQ" + }, + "footer": { + "readyHeading": "Bereit fuer das agentische Zeitalter?", + "getStartedFree": "Kostenlos starten", + "contactSales": "Vertrieb kontaktieren", + "platform": "Plattform", + "skills": "Skills", + "developers": "Entwickler", + "company": "Unternehmen", + "gitRepositories": "Git-Repositories", + "issuesPullRequests": "Issues & PRs", + "collaborativeRooms": "Collaborative Rooms", + "aiAgents": "KI-Agenten", + "commandStream": "Command Stream", + "skillRegistry": "Skill Registry", + "publishSkill": "Skill veroeffentlichen", + "skillDocs": "Skill-Dokumentation", + "community": "Community", + "documentation": "Dokumentation", + "cliReference": "CLI-Referenz", + "apiReference": "API-Referenz", + "status": "Status", + "about": "Ueber uns", + "careers": "Karriere", + "contact": "Kontakt", + "privacy": "Datenschutz", + "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": "Anmelden", + "subtitleWelcome": "Willkommen zurueck bei GitDataAI", + "subtitleContinue": "Weiter zu {path}", + "usernameLabel": "Benutzername", + "usernamePlaceholder": "Benutzernamen eingeben", + "passwordLabel": "Passwort", + "passwordForgot": "Vergessen?", + "verificationLabel": "Verifizierung", + "verificationPlaceholder": "Code eingeben", + "submitButton": "Anmelden", + "noAccount": "Noch kein Konto?", + "createOne": "Erstellen", + "errorFillRequired": "Bitte alle erforderlichen Felder ausfuellen.", + "errorInvalidCredentials": "Ungueltige Anmeldedaten. Bitte erneut versuchen." + }, + "register": { + "heading": "Konto erstellen", + "subtitle": "Werden Sie Teil der naechsten Generation der Mensch-Agent-Zusammenarbeit", + "emailLabel": "E-Mail", + "emailPlaceholder": "name@firma.de", + "usernameLabel": "Benutzername", + "usernamePlaceholder": "architekt_01", + "passwordLabel": "Passwort", + "passwordPlaceholder": "••••••••", + "confirmLabel": "Bestaetigen", + "confirmPlaceholder": "••••••••", + "verificationLabel": "Verifizierung", + "verificationPlaceholder": "Captcha", + "submitButton": "Konto erstellen", + "alreadyHaveAccount": "Bereits ein Konto?", + "signIn": "Anmelden", + "encrypted": "Verschluesselt", + "errorEmailRequired": "E-Mail ist erforderlich", + "errorInvalidEmail": "Ungueltige E-Mail-Adresse", + "errorUsernameRequired": "Benutzername ist erforderlich", + "errorUsernameLength": "Benutzername muss mindestens 3 Zeichen haben", + "errorPasswordRequired": "Passwort ist erforderlich", + "errorPasswordLength": "Passwort muss mindestens 8 Zeichen haben", + "errorPasswordComplexity": "Passwort muss Gross- und Kleinbuchstaben sowie eine Ziffer enthalten", + "errorPasswordMismatch": "Passwoerter stimmen nicht ueberein", + "errorCaptchaRequired": "Verifizierungscode ist erforderlich", + "errorRegistrationFailed": "Registrierung fehlgeschlagen", + "successAccountCreated": "Konto erfolgreich erstellt!" + }, + "passwordReset": { + "heading": "Passwort zuruecksetzen", + "subtitle": "Geben Sie Ihre E-Mail-Adresse ein, und wir senden Ihnen einen Link zum Zuruecksetzen.", + "emailLabel": "E-Mail-Adresse", + "emailPlaceholder": "name@beispiel.de", + "submitButton": "Reset-Link senden", + "backToSignIn": "Zurueck zur Anmeldung", + "successHeading": "E-Mail pruefen", + "successMessage": "Wir haben einen sicheren Link an {email} gesendet. Klicken Sie auf den Link, um Ihre Passphrase zurueckzusetzen.", + "returnToSignIn": "Zurueck zur Anmeldung", + "didNotReceive": "Keine E-Mail erhalten? Pruefen Sie Ihren Spam-Ordner oder", + "tryAgain": "erneut versuchen", + "secureLink": "Sicherer Link", + "expiry24h": "24h Gueltig", + "errorEmailRequired": "E-Mail-Adresse ist erforderlich.", + "errorInvalidEmail": "Bitte geben Sie eine gueltige E-Mail-Adresse ein.", + "errorSendFailed": "Reset-E-Mail konnte nicht gesendet werden.", + "successLinkSent": "Reset-Link gesendet!" + }, + "confirmPasswordReset": { + "heading": "Neues Passwort festlegen", + "subtitle": "Erstellen Sie ein starkes Passwort fuer Ihr Konto.", + "newPasswordLabel": "Neues Passwort", + "newPasswordPlaceholder": "Mindestens 8 Zeichen", + "confirmPasswordLabel": "Passwort bestaetigen", + "confirmPasswordPlaceholder": "Passwort wiederholen", + "submitButton": "Passwort zuruecksetzen", + "backToSignIn": "Zurueck zur Anmeldung", + "successHeading": "Passwortzuruecksetzung abgeschlossen", + "successMessage": "Ihr Passwort wurde aktualisiert. Sie koennen sich jetzt mit Ihrem neuen Passwort anmelden.", + "signIn": "Anmelden", + "passwordUpdated": "Passwort aktualisiert", + "secureConnection": "Sichere Verbindung", + "errorMissingToken": "Reset-Token fehlt. Bitte verwenden Sie den Link aus Ihrer E-Mail.", + "errorPasswordRequired": "Neues Passwort ist erforderlich.", + "errorPasswordLength": "Passwort muss mindestens 8 Zeichen haben.", + "errorPasswordUppercase": "Passwort muss mindestens einen Grossbuchstaben enthalten.", + "errorPasswordLowercase": "Passwort muss mindestens einen Kleinbuchstaben enthalten.", + "errorPasswordDigit": "Passwort muss mindestens eine Ziffer enthalten.", + "errorPasswordMismatch": "Passwoerter stimmen nicht ueberein.", + "errorResetFailed": "Passwortzuruecksetzung fehlgeschlagen. Der Link ist moeglicherweise abgelaufen.", + "successResetComplete": "Passwort erfolgreich zurueckgesetzt!" + }, + "verifyEmail": { + "heading": "E-Mail-Verifizierung", + "loadingText": "Sicheres Token wird verifiziert...", + "successHeading": "Identitaet bestaetigt", + "successMessage": "Ihre E-Mail-Adresse wurde erfolgreich verifiziert. Sie haben nun vollen Zugriff auf die GitDataAI-Plattform.", + "goToDashboard": "Zum Dashboard", + "errorHeading": "Verifizierung fehlgeschlagen", + "backToSettings": "Zurueck zu Einstellungen", + "needHelp": "Brauchen Sie Hilfe?", + "contactSupport": "Technischen Support kontaktieren", + "encryptedLink": "Verschluesselter Link", + "soc2Compliant": "SOC2-konform", + "errorTokenMissing": "Verifizierungstoken fehlt oder ist fehlerhaft.", + "errorLinkExpired": "Der Verifizierungslink ist abgelaufen oder ungueltig.", + "successVerified": "Identitaet erfolgreich verifiziert." + }, + "acceptWorkspaceInvite": { + "heading": "Workspace-Einladung", + "loadingHeading": "Einladung wird validiert", + "loadingText": "Berechtigungen und Workspace-Status werden geprueft...", + "successHeading": "Willkommen an Bord!", + "successMessage": "Einladung angenommen. Sie wurden zum Team hinzugefuegt. Sie werden jetzt zum Dashboard weitergeleitet.", + "proceedManually": "Manuell fortfahren", + "errorHeading": "Ungueltige Einladung", + "returnHome": "Zur Startseite", + "needNewLink": "Neuen Link benoetigt?", + "contactAdmin": "Workspace-Admin kontaktieren", + "secureJoin": "SICHERE TEILNAHME", + "dataOwnership": "DATENBESITZ", + "errorMissingToken": "Der Einladungslink enthaelt kein gueltiges Sicherheitstoken.", + "errorExpired": "Der Einladungslink ist abgelaufen oder wurde bereits verwendet.", + "successJoined": "Workspace erfolgreich beigetreten" + } + }, + "project": { + "overview": { + "settings": "Einstellungen", + "members": "Mitglieder", + "likes": "Likes", + "watches": "Beobachtungen", + "public": "Oeffentlich", + "private": "Privat", + "activity": "Aktivitaet", + "viewAll": "Alle anzeigen", + "recentEvents": "Aktuelle Ereignisse in diesem Projekt", + "noActivity": "Noch keine Aktivitaet.", + "projectInfo": "Projektinfo", + "projectName": "Projektname", + "yourRole": "Ihre Rolle", + "created": "Erstellt", + "visibility": "Sichtbarkeit", + "guest": "Gast", + "quickActions": "Schnellaktionen", + "newIssue": "Neues Issue", + "viewActivity": "Aktivitaet anzeigen", + "membersAction": "Mitglieder", + "createRepository": "Repository erstellen", + "projectNotFound": "Projekt nicht gefunden.", + "noDescription": "Keine Beschreibung angegeben", + "expand": "Erweitern", + "collapse": "Reduzieren" + }, + "eventTypes": { + "commit": "Commit", + "branch": "Branch", + "tag": "Tag", + "issue": "Issue", + "comment": "Kommentar", + "pullRequest": "Pull Request", + "merged": "Gemergt", + "message": "Nachricht", + "room": "Raum", + "starred": "Favorisiert", + "unstarred": "Favorit entfernt", + "watched": "Beobachtet", + "unwatched": "Nicht mehr beobachtet", + "member": "Mitglied", + "label": "Label", + "repo": "Repo" + }, + "dateLabels": { + "today": "Heute", + "yesterday": "Gestern" + }, + "issues": { + "breadcrumb": { + "projects": "Projekte", + "issues": "Issues" + }, + "searchPlaceholder": "Issues durchsuchen…", + "boardView": "Board-Ansicht", + "listView": "Listenansicht", + "board": "Board", + "list": "Liste", + "new": "Neu", + "open": "Offen", + "closed": "Geschlossen", + "of": "von", + "shown": "angezeigt", + "errorLoading": "Fehler:", + "errorLoadFailed": "Issues konnten nicht geladen werden", + "noIssues": "Keine Issues gefunden", + "clearSearch": "Suche loeschen", + "title": "Titel", + "author": "Autor", + "date": "Datum", + "newIssue": "Neues Issue", + "noIssuesInColumn": "Keine Issues" + }, + "issueDetail": { + "backToIssues": "Zurueck zu Issues", + "closeIssue": "Issue schliessen", + "reopenIssue": "Issue wiedereroeffnen", + "edit": "Bearbeiten", + "openStatus": "Offen", + "closedStatus": "Geschlossen", + "openedBy": "Eroeffnet von", + "aiTriage": "KI-Triage", + "highPriority": "hohe Prioritaet", + "mediumPriority": "mittlere Prioritaet", + "lowPriority": "niedrige Prioritaet", + "accept": "Akzeptieren", + "applying": "Wird angewendet…", + "ignore": "Ignorieren", + "noActivity": "Noch keine Aktivitaet.", + "openedThisIssue": "hat dieses Issue eroeffnet", + "commented": "kommentiert", + "editComment": "Kommentar bearbeiten", + "deleteComment": "Kommentar loeschen", + "cancel": "Abbrechen", + "save": "Speichern", + "saving": "Speichern…", + "leaveComment": "Kommentar hinterlassen…", + "comment": "Kommentar", + "posting": "Wird gepostet…", + "commentCannotEmpty": "Kommentar darf nicht leer sein", + "isTyping": "{user} tippt…", + "areTyping": "{user1} und {user2} tippen…", + "peopleTyping": "{count} Personen tippen…", + "linkedRepositories": "Verknuepfte Repositories", + "details": "Details", + "status": "Status", + "author": "Autor", + "created": "Erstellt", + "updated": "Aktualisiert", + "closed": "Geschlossen", + "labelsApplied": "Labels angewendet", + "failedApplyLabels": "Labels konnten nicht angewendet werden", + "commentAdded": "Kommentar hinzugefuegt", + "failedAddComment": "Kommentar konnte nicht hinzugefuegt werden", + "commentDeleted": "Kommentar geloescht", + "failedDeleteComment": "Kommentar konnte nicht geloescht werden", + "commentUpdated": "Kommentar aktualisiert", + "failedUpdateComment": "Kommentar konnte nicht aktualisiert werden", + "issueClosed": "Issue geschlossen", + "issueReopened": "Issue wiedereroeffnet", + "failedUpdateIssue": "Issue konnte nicht aktualisiert werden", + "errorLoadingIssue": "Issue konnte nicht geladen werden" + }, + "room": { + "selectChannel": "Kanal auswaehlen", + "chooseChannelHint": "Waehlen Sie einen Kanal aus der Seitenleiste, um mit dem Chatten zu beginnen.", + "channels": "Kanaele", + "noChannelsYet": "Noch keine Kanaele", + "createChannel": "Kanal erstellen", + "addCategory": "+ Kategorie hinzufuegen", + "categoryNamePlaceholder": "Kategoriename", + "addChannel": "Kanal hinzufuegen", + "channelSettings": "Kanal-Einstellungen", + "expand": "Erweitern", + "collapse": "Reduzieren", + "mute": "Stumm", + "unmute": "Stummschaltung aufheben", + "archive": "Archivieren", + "unarchive": "Wiederherstellen", + "members": "Mitglieder", + "online": "Online", + "ai": "KI" + }, + "roomDialog": { + "newRoom": "Neuer Raum", + "createRoomDescription": "Einen neuen Chatraum erstellen. Namen und Sichtbarkeit waehlen.", + "roomName": "Raumname", + "roomNamePlaceholder": "z.B. allgemein", + "publicLabel": "Oeffentlich (sichtbar fuer alle Projektmitglieder)", + "cancel": "Abbrechen", + "create": "Erstellen", + "creating": "Wird erstellt...", + "deleteRoom": "Raum loeschen", + "deleteRoomConfirm": "Sind Sie sicher, dass Sie \"{name}\" loeschen moechten? Alle Nachrichten werden dauerhaft entfernt. Dies kann nicht rueckgaengig gemacht werden.", + "deleting": "Wird geloescht..." + }, + "roomChat": { + "connecting": "Verbinden...", + "disconnected": "Getrennt", + "mentions": "@Erwaehungen", + "searchMessages": "Nachrichten durchsuchen", + "memberList": "Mitgliederliste", + "pinnedMessages": "Angeheftete Nachrichten", + "roomSettings": "Raum-Einstellungen", + "deleteChannel": "Kanal loeschen", + "showChannels": "Kanaele anzeigen", + "hideChannels": "Kanaele ausblenden", + "back": "Zurueck", + "isThinking": "{name} denkt nach...", + "typingSingular": "{user} tippt...", + "typingDual": "{user1} und {user2} tippen...", + "typingOthers": "{user} und {count} weitere tippen...", + "messageUpdated": "Nachricht aktualisiert", + "messageDeleted": "Nachricht geloescht", + "failedCreateThread": "Thread konnte nicht erstellt werden", + "navigateToMessage": "Zur Nachricht in {room} navigieren", + "roomUpdated": "Raum aktualisiert", + "failedUpdateRoom": "Raum konnte nicht aktualisiert werden" + }, + "commandPalette": { + "placeholder": "Projekte, Repos, Raeume, Befehle suchen…", + "noResults": "Keine Ergebnisse gefunden.", + "navigation": "Navigation", + "create": "Erstellen", + "projects": "Projekte", + "repositories": "Repositories", + "rooms": "Raeume", + "gotoNotifications": "Zu Benachrichtigungen", + "createProject": "Projekt erstellen", + "createRepoIn": "Repo in {project} erstellen" + }, + "issueNew": { + "backToIssues": "Zurueck zu Issues", + "creatingIn": "Erstellen in {project}", + "titleRequired": "Titel *", + "titlePlaceholder": "Kurze Zusammenfassung des Issues", + "description": "Beschreibung", + "markdown": "Markdown", + "bold": "Fett", + "italic": "Kursiv", + "code": "Code", + "link": "Link", + "list": "Liste", + "quote": "Zitat", + "bodyPlaceholder": "Beschreiben Sie das Issue detailliert. Markdown wird unterstuetzt.", + "bodyHint": "Unterstuetzt Markdown — verwenden Sie **Fett**, `Code`, Listen und mehr", + "linkedRepositories": "Verknuepfte Repositories", + "linkedReposHint": "Commits und Pull Requests verfolgen, die mit diesem Issue zusammenhaengen", + "assignees": "Zugewiesene", + "labels": "Labels", + "cancel": "Abbrechen", + "createIssue": "Issue erstellen", + "creating": "Wird erstellt…", + "discardChanges": "Aenderungen verwerfen?", + "discardChangesDesc": "Sie haben ungespeicherte Aenderungen. Sind Sie sicher, dass Sie gehen moechten?", + "keepEditing": "Weiter bearbeiten", + "discard": "Verwerfen", + "titleRequiredError": "Titel ist erforderlich", + "issueCreated": "Issue erstellt", + "failedCreateIssue": "Issue konnte nicht erstellt werden", + "selectAssignees": "Zugewiesene auswaehlen", + "selectAssigneesDesc": "Teammitglieder auswaehlen, die diesem Issue zugewiesen werden sollen", + "noMembers": "Keine Mitglieder in diesem Projekt gefunden", + "done": "Fertig", + "selectLabels": "Labels auswaehlen", + "selectLabelsDesc": "Labels auswaehlen, um dieses Issue zu kategorisieren", + "noLabels": "Noch keine Labels in diesem Projekt" + }, + "issueEdit": { + "backToIssue": "Zurueck zu Issue #{number}", + "editingIssue": "Issue #{number} bearbeiten", + "title": "Issue bearbeiten", + "titleSection": "Titel", + "titleCantChange": "Titel kann nach Erstellung nicht mehr geaendert werden", + "status": "Status", + "changeStatusHint": "Status von der Issue-Detailseite aendern", + "description": "Beschreibung", + "descriptionPlaceholder": "Beschreibung hinzufuegen, um mehr Kontext zu bieten (Markdown unterstuetzt)", + "markdownHint": "Markdown-Formatierung wird unterstuetzt", + "linkedRepositories": "Verknuepfte Repositories", + "noRepositories": "Keine Repositories in diesem Projekt", + "cancel": "Abbrechen", + "saveChanges": "Aenderungen speichern", + "saving": "Speichern…", + "discardChanges": "Aenderungen verwerfen?", + "discardChangesDesc": "Sie haben ungespeicherte Aenderungen. Sind Sie sicher, dass Sie gehen moechten?", + "keepEditing": "Weiter bearbeiten", + "discard": "Verwerfen", + "issueNotFound": "Issue nicht gefunden.", + "issueUpdated": "Issue erfolgreich aktualisiert", + "failedUpdateIssue": "Issue konnte nicht aktualisiert werden", + "returnToIssue": "Zurueck zum Issue" + }, + "activity": { + "title": "Aktivitaet", + "subtitle": "Aktuelle Ereignisse in {project}", + "filterEvents": "Ereignisse filtern", + "perPage": "{count} / Seite", + "noActivity": "Keine Aktivitaet gefunden.", + "tryDifferentType": "Versuchen Sie, einen anderen Ereignistyp auszuwaehlen.", + "failedLoad": "Aktivitaetsfeed konnte nicht geladen werden.", + "page": "Seite {page} von {totalPages}", + "events": "{count} Ereignisse", + "allEvents": "Alle Ereignisse", + "commits": "Commits", + "branchCreated": "Branch erstellt", + "branchDeleted": "Branch geloescht", + "tagCreated": "Tag erstellt", + "tagDeleted": "Tag geloescht", + "repoCreated": "Repo erstellt", + "issueOpened": "Issue eroeffnet", + "issueClosed": "Issue geschlossen", + "issueReopened": "Issue wiedereroeffnet", + "issueComment": "Issue-Kommentar", + "prOpened": "PR eroeffnet", + "prMerged": "PR gemergt", + "prClosed": "PR geschlossen", + "roomMessage": "Raum-Nachricht", + "roomCreated": "Raum erstellt", + "projectStarred": "Projekt favorisiert", + "projectUnstarred": "Projekt-Favorit entfernt", + "memberAdded": "Mitglied hinzugefuegt", + "memberRemoved": "Mitglied entfernt", + "roleChanged": "Rolle geaendert", + "labelCreated": "Label erstellt", + "labelUpdated": "Label aktualisiert", + "labelDeleted": "Label geloescht" + }, + "resources": { + "title": "Ressourcen", + "subtitle": "Projektressourcen verwalten und im Marketplace veroeffentlichen.", + "comingSoon": "Demnachst verfuegbar", + "description": "Skills, Pakete und andere Ressourcen im Marketplace veroeffentlichen." + }, + "articles": { + "title": "Artikel", + "subtitle": "Projektdokumentation und Artikel schreiben und verwalten.", + "comingSoon": "Demnachst verfuegbar", + "description": "Artikel fuer Ihr Projekt schreiben und veroeffentlichen." + }, + "skillsInit": { + "backToSkills": "Zurueck zu Skills", + "title": "Neuer Skill", + "subtitle": "Einen Skill zu diesem Projekt hinzufuegen", + "slug": "Slug", + "slugPlaceholder": "coding/code-review", + "slugHint": "Eindeutiger Identifikator, / zum Gruppieren von Skills verwenden", + "displayName": "Anzeigename", + "namePlaceholder": "Code-Review-Agent", + "description": "Beschreibung", + "descPlaceholder": "Bewertet Pull Requests mit KI", + "content": "Inhalt (SKILL.md)", + "contentPlaceholder": "# Code Review\n\nSie sind ein erfahrener Code-Reviewer...", + "contentHint": "Markdown, das beschreibt, wann und wie dieser Skill verwendet wird.", + "cancel": "Abbrechen", + "createSkill": "Skill erstellen", + "created": "Skill \"{name}\" erstellt", + "failedCreate": "Skill konnte nicht erstellt werden" + } + }, + "notification": { + "title": "Benachrichtigungen", + "live": "Live", + "unreadTotal": "{unread} ungelesen · {total} gesamt", + "totalNotifications": "{count} Benachrichtigung{plural}", + "noGrouping": "Keine Gruppierung", + "groupByProject": "Nach Projekt gruppieren", + "groupByType": "Nach Typ gruppieren", + "cancel": "Abbrechen", + "markRead": "Als gelesen markieren", + "archive": "Archivieren", + "markAllRead": "Alle als gelesen markieren", + "selectMultiple": "Mehrere auswaehlen", + "selectModeActive": "✓ Auswahlmodus aktiv", + "markAllReadInGroup": "Alle in Gruppe als gelesen markieren", + "filterAll": "Alle", + "filterUnread": "Ungelesen", + "filterArchived": "Archiviert", + "notificationSettings": "Benachrichtigungseinstellungen", + "noUnread": "Keine ungelesenen Benachrichtigungen", + "noArchived": "Keine archivierten Benachrichtigungen", + "noNotifications": "Noch keine Benachrichtigungen", + "allCaughtUp": "Sie sind auf dem neuesten Stand!", + "archivedAppearHere": "Archivierte Benachrichtigungen werden hier angezeigt.", + "notificationsAppearHere": "Sie sehen hier Benachrichtigungen, wenn etwas passiert.", + "justNow": "gerade eben", + "minutesAgo": "vor {count}m", + "hoursAgo": "vor {count}h", + "daysAgo": "vor {count}d", + "markAsRead": "Als gelesen markieren", + "notificationArchived": "Benachrichtigung archiviert", + "failedMarkRead": "Konnte nicht als gelesen markiert werden", + "failedArchive": "Archivierung fehlgeschlagen", + "failedMarkAllRead": "Konnte nicht alle als gelesen markiert werden", + "notificationsArchived": "{count} Benachrichtigungen archiviert", + "typeMention": "Erwaehung", + "typeInvitation": "Einladung", + "typeProjectInvite": "Projekt-Einladung", + "typeWorkspaceInvite": "Workspace-Einladung", + "typeRoleChange": "Rollenwechsel", + "typeRoomCreated": "Raum erstellt", + "typeRoomDeleted": "Raum geloescht", + "typeAnnouncement": "Ankuendigung", + "typeIssueOpened": "Issue eroeffnet", + "typeIssueCommented": "Issue-Kommentar", + "typeIssueClosed": "Issue geschlossen", + "typeReviewRequested": "Review angefordert", + "typePrApproved": "PR genehmigt", + "typePrMerged": "PR gemergt" + }, + "search": { + "placeholder": "Projekte, Repositories, Issues, Benutzer suchen...", + "searchButton": "Suchen", + "projects": "Projekte", + "repositories": "Repositories", + "issues": "Issues", + "users": "Benutzer", + "messages": "Nachrichten", + "resultsFor": "{count} Ergebnisse fuer \"{query}\"", + "noResultsFor": "Keine Ergebnisse fuer \"{query}\"", + "messagesFor": "{count} Nachricht{plural} fuer \"{query}\"{inRoom}", + "noMessagesFor": "Keine Nachrichten gefunden, die \"{query}\" entsprechen", + "noMessagesInRoom": "Keine Nachrichten in Raum \"{room}\" gefunden, die \"{query}\" entsprechen", + "searchFailed": "Suche fehlgeschlagen", + "enterKeyword": "Geben Sie ein Schluesselwort ein, um alle Inhalte zu durchsuchen.", + "noResultsFound": "Keine Ergebnisse gefunden", + "tryDifferentKeywords": "Versuchen Sie andere Schluesselwoerter oder ueberpruefen Sie Ihre Rechtschreibung.", + "showing": "{count} von {total} {type} werden angezeigt", + "roomIdPlaceholder": "Raum-ID zum Durchsuchen von Nachrichten (z.B. workspace:general)...", + "acrossAllRooms": "in allen zugaenglichen Raeumen", + "inRoom": " in Raum {room}" + }, + "settings": { + "account": { + "title": "Konto", + "subtitle": "Kontoinformationen und Einstellungen verwalten.", + "changePassword": "Passwort aendern", + "changePasswordDesc": "Aktualisieren Sie Ihr Passwort, um Ihr Konto zu schuetzen.", + "currentPassword": "Aktuelles Passwort", + "currentPasswordPlaceholder": "Aktuelles Passwort eingeben", + "newPassword": "Neues Passwort", + "newPasswordPlaceholder": "Neues Passwort eingeben", + "confirmNewPassword": "Neues Passwort bestaetigen", + "confirmNewPasswordPlaceholder": "Neues Passwort wiederholen", + "passwordMinLength": "Muss mindestens 8 Zeichen lang sein", + "changePasswordButton": "Passwort aendern", + "changing": "Wird geaendert...", + "emailAddress": "E-Mail-Adresse", + "emailAddressDesc": "E-Mail-Adresse aktualisieren. Eine Verifizierungs-E-Mail wird zur Bestaetigung gesendet.", + "currentEmail": "Aktuelle E-Mail", + "noEmailOnRecord": "Keine E-Mail hinterlegt", + "newEmailAddress": "Neue E-Mail-Adresse", + "newEmailPlaceholder": "Neue E-Mail-Adresse eingeben", + "confirmWithPassword": "Mit Passwort bestaetigen", + "passwordPlaceholder": "Aktuelles Passwort eingeben", + "sendVerificationEmail": "Verifizierungs-E-Mail senden", + "sending": "Wird gesendet...", + "preferences": "Einstellungen", + "preferencesDesc": "Kontoeinstellungen und Benachrichtigungseinstellungen anpassen.", + "language": "Sprache", + "theme": "Design", + "timezone": "Zeitzone", + "light": "Hell", + "dark": "Dunkel", + "system": "System", + "notifications": "Benachrichtigungen", + "emailNotifications": "E-Mail-Benachrichtigungen", + "emailNotificationsDesc": "E-Mail-Benachrichtigungen fuer wichtige Updates erhalten", + "inAppNotifications": "In-App-Benachrichtigungen", + "inAppNotificationsDesc": "Benachrichtigungen innerhalb der Anwendung anzeigen", + "reset": "Zuruecksetzen", + "saveChanges": "Aenderungen speichern", + "saving": "Speichern...", + "passwordChangedSuccess": "Passwort erfolgreich geaendert", + "preferencesUpdatedSuccess": "Einstellungen erfolgreich aktualisiert", + "failedChangePassword": "Passwortaenderung fehlgeschlagen", + "failedUpdatePreferences": "Einstellungen konnten nicht aktualisiert werden", + "failedLoadPreferences": "Einstellungen konnten nicht geladen werden.", + "verificationEmailSent": "Verifizierungs-E-Mail gesendet! Bitte pruefen Sie Ihre neue E-Mail zur Bestaetigung.", + "failedRequestEmailChange": "E-Mail-Aenderungsanfrage fehlgeschlagen", + "enterCurrentPassword": "Bitte geben Sie Ihr aktuelles Passwort ein", + "enterNewPassword": "Bitte geben Sie ein neues Passwort ein", + "newPasswordMinLength": "Neues Passwort muss mindestens 8 Zeichen haben", + "passwordsDoNotMatch": "Passwoerter stimmen nicht ueberein", + "enterNewEmail": "Bitte geben Sie eine neue E-Mail-Adresse ein", + "enterValidEmail": "Bitte geben Sie eine gueltige E-Mail-Adresse ein", + "enterPasswordConfirm": "Bitte geben Sie Ihr Passwort zur Bestaetigung ein" + }, + "preferences": { + "title": "Einstellungen", + "subtitle": "Persoenliche Einstellungen und Benachrichtigungseinstellungen verwalten.", + "notificationChannels": "Benachrichtigungskanaele", + "notificationChannelsDesc": "Waehlen Sie, wie Sie Benachrichtigungen erhalten moechten.", + "emailNotificationsLabel": "E-Mail-Benachrichtigungen", + "emailNotificationsDesc": "Benachrichtigungen per E-Mail erhalten", + "inAppNotificationsLabel": "In-App-Benachrichtigungen", + "inAppNotificationsDesc": "Benachrichtigungen innerhalb der Anwendung anzeigen", + "browserPush": "Browser-Push-Benachrichtigungen", + "pushUnsupported": "Ihr Browser unterstuetzt keine Push-Benachrichtigungen", + "pushBlocked": "Vom Browser blockiert. In den Website-Einstellungen aktivieren.", + "pushSubscribed": "Abonniert — Sie erhalten Browser-Benachrichtigungen", + "pushNotSubscribed": "Benachrichtigungen auch erhalten, wenn der Tab geschlossen ist", + "pushEnable": "Aktivieren", + "pushDisable": "Deaktivieren", + "doNotDisturb": "Nicht stoeren", + "doNotDisturbDesc": "Stille Stunden festlegen, in denen Sie nicht gestoert werden moechten.", + "enableDnd": "Nicht stoeren aktivieren", + "dndDesc": "Benachrichtigungen zu bestimmten Zeiten stumm schalten", + "startTime": "Startzeit", + "endTime": "Endzeit", + "notificationCategories": "Benachrichtigungskategorien", + "notificationCategoriesDesc": "Waehlen Sie, welche Benachrichtigungstypen Sie erhalten moechten.", + "securityAlerts": "Sicherheitswarnungen", + "securityAlertsDesc": "Wichtige Sicherheitsupdates und Warnungen", + "productUpdates": "Produkt-Updates", + "productUpdatesDesc": "Neue Funktionen und Produktankuendigungen", + "marketingPromotions": "Marketing & Aktionen", + "marketingDesc": "Tipps, Angebote und Werbeinhalte", + "developmentActivity": "Entwicklungsaktivitaet", + "developmentActivityDesc": "Benachrichtigungen fuer Code-Review und Kollaborationsaktivitaet steuern.", + "issuesActivity": "Issues", + "issuesActivityDesc": "Eroeffnet, geschlossen, zugewiesen oder kommentiert", + "pullRequestsActivity": "Pull Requests", + "prActivityDesc": "Review angefordert, genehmigt, gemergt oder kommentiert", + "mentionsActivity": "@Erwaehungen", + "mentionsActivityDesc": "Wenn jemand Sie in einer Nachricht, Issue oder PR erwaehnt", + "roomMessagesActivity": "Raum-Nachrichten", + "roomMessagesDesc": "Neue Nachrichten in Kanaelen, denen Sie folgen" + }, + "security": { + "title": "Sicherheit", + "subtitle": "Sicherheitseinstellungen und Authentifizierungsmethoden verwalten.", + "securitySettings": "Sicherheitseinstellungen", + "securityDesc": "Zwei-Faktor-Authentifizierung, Passwortrichtlinien und Sitzungsverwaltung konfigurieren.", + "twoFactorAuth": "Zwei-Faktor-Authentifizierung", + "twoFactorDesc": "Fuegen Sie eine zusaetzliche Sicherheitsebene hinzu, die mehr als nur ein Passwort fuer die Anmeldung erfordert.", + "enable": "Aktivieren", + "disable": "Deaktivieren", + "passwordPolicy": "Passwortrichtlinie", + "passwordPolicyDesc": "Anforderungen fuer Passwortstaerke festlegen", + "standard": "Standard", + "sessionManagement": "Sitzungsverwaltung", + "sessionManagementDesc": "Aktive Sitzungen anzeigen und verwalten", + "active": "aktiv", + "manage": "Verwalten" + }, + "profile": { + "title": "Profil", + "subtitle": "Persoenliche Informationen und Profileinstellungen verwalten.", + "profileInfo": "Profilinformationen", + "profileInfoDesc": "Ihre grundlegenden Kontoinformationen anzeigen.", + "username": "Benutzername", + "displayName": "Anzeigename", + "notSet": "Nicht festgelegt", + "email": "E-Mail", + "memberSince": "Mitglied seit", + "publicProfile": "Oeffentliches Profil", + "publicProfileDesc": "Oeffentliche Profilinformationen aktualisieren.", + "publicAvatar": "Oeffentlicher Avatar", + "uploadAvatar": "Neuen Avatar hochladen", + "avatarFormat": "JPG, GIF oder PNG. Max. 2MB.", + "bio": "Bio", + "bioPlaceholder": "Erzaehlen Sie uns von sich", + "bioDesc": "Ihre Bio oder Beschreibung", + "organization": "Organisation", + "orgPlaceholder": "Ihr Unternehmen oder Ihre Organisation", + "orgDesc": "Die Organisation, der Sie angehoeren", + "reset": "Zuruecksetzen", + "saveChanges": "Aenderungen speichern", + "saving": "Speichern...", + "avatarUploaded": "Avatar erfolgreich hochgeladen", + "failedUploadAvatar": "Avatar-Upload fehlgeschlagen", + "fileSizeLimit": "Dateigroesse muss unter 2MB liegen", + "profileUpdated": "Profil erfolgreich aktualisiert", + "failedUpdateProfile": "Profil konnte nicht aktualisiert werden" + }, + "tokens": { + "title": "Tokens", + "subtitle": "Persoenliche Zugriffstokens fuer API-Zugriff verwalten.", + "createToken": "Token erstellen", + "personalAccessTokens": "Persoenliche Zugriffstokens", + "noTokensDesc": "Keine Tokens gefunden. Erstellen Sie ein neues Token, um zu beginnen.", + "tokensCount": "Sie haben {count} Zugriffstoken konfiguriert.", + "tokensCountPlural": "Sie haben {count} Zugriffstokens konfiguriert.", + "loadingTokens": "Zugriffstokens werden geladen...", + "noAccessTokens": "Keine Zugriffstokens", + "noAccessTokensDesc": "Erstellen Sie ein persoenliches Zugriffstoken, um API-Anfragen zu authentifizieren und Git-Repositories ueber HTTPS zuzugreifen.", + "createFirstToken": "Ihr erstes Token erstellen", + "untitled": "Unbenannt", + "revoked": "Zurueckgerufen", + "scopes": "Bereiche:", + "created": "Erstellt am {date}", + "expires": "Laeuft ab am {date}", + "neverExpires": "Laeuft nie ab", + "revoke": "Zurueckrufen", + "createAccessToken": "Zugriffstoken erstellen", + "createTokenDesc": "Ein neues persoenliches Zugriffstoken fuer API-Authentifizierung erstellen.", + "tokenName": "Token-Name", + "tokenNamePlaceholder": "z.B., CI/CD-Pipeline, Entwicklungsumgebung", + "tokenNameDesc": "Waehlen Sie einen beschreibenden Namen fuer dieses Token", + "scopesLabel": "Bereiche", + "scopesDesc": "Waehlen Sie die Berechtigungen fuer dieses Token", + "expirationDate": "Ablaufdatum (Optional)", + "expirationDesc": "Leer lassen fuer kein Ablaufdatum", + "cancel": "Abbrechen", + "creating": "Wird erstellt...", + "tokenCreated": "Token erfolgreich erstellt", + "tokenCreatedDesc": "Kopieren Sie Ihr Zugriffstoken jetzt. Sie koennen es spater nicht mehr sehen!", + "yourAccessToken": "Ihr Zugriffstoken", + "tokenImportant": "Wichtig: Dieses Token wird nur einmal angezeigt. Bewahren Sie es sicher auf.", + "iHaveSavedToken": "Ich habe mein Token gespeichert", + "tokenCopied": "Token in Zwischenablage kopiert", + "deleteTokenTitle": "Zugriffstoken loeschen", + "deleteTokenDesc": "Sind Sie sicher, dass Sie dieses Zugriffstoken loeschen moechten? Diese Aktion kann nicht rueckgaengig gemacht werden, und alle Anwendungen, die dieses Token verwenden, verlieren sofort den Zugriff.", + "deleting": "Wird geloescht...", + "delete": "Loeschen", + "revokeTokenTitle": "Zugriffstoken zurueckrufen", + "revokeTokenDesc": "Sind Sie sicher, dass Sie dieses Zugriffstoken zurueckrufen moechten? Das Token wird sofort deaktiviert und kann nicht mehr zur Authentifizierung verwendet werden.", + "tokenCreatedSuccess": "Zugriffstoken erfolgreich erstellt", + "failedCreateToken": "Token konnte nicht erstellt werden", + "tokenDeleted": "Zugriffstoken erfolgreich geloescht", + "failedDeleteToken": "Token konnte nicht geloescht werden", + "nameRequired": "Bitte geben Sie einen Namen fuer das Zugriffstoken ein", + "scopeRequired": "Bitte waehlen Sie mindestens einen Bereich aus" + }, + "activity": { + "title": "Aktivitaet", + "subtitle": "Ihre aktuellen Aktivitaeten und Benachrichtigungen anzeigen.", + "markAllRead": "Alle als gelesen markieren", + "recentNotifications": "Aktuelle Benachrichtigungen", + "unread": "{count} ungelesen", + "noNotifications": "Noch keine Benachrichtigungen. Ihre Aktivitaeten werden hier angezeigt.", + "newLabel": "Neu", + "noContent": "Kein Inhalt", + "unknownDate": "Unbekanntes Datum", + "allMarkedRead": "Alle Benachrichtigungen als gelesen markiert", + "failedMarkAllRead": "Konnte nicht alle Benachrichtigungen als gelesen markieren", + "markedRead": "Benachrichtigung als gelesen markiert", + "failedMarkRead": "Benachrichtigung konnte nicht als gelesen markiert werden" + } + }, + "init": { + "project": { + "title": "Neues Projekt erstellen", + "subtitle": "Erstellen Sie ein neues Projekt, um Ihre Repositories zu organisieren", + "projectName": "Projektname", + "namePlaceholder": "mein-tolles-projekt", + "description": "Beschreibung", + "descPlaceholder": "Eine kurze Beschreibung Ihres Projekts...", + "workspace": "Workspace", + "noWorkspace": "Kein Workspace (unabhaengiges Projekt)", + "workspaceHint": "Dieses Projekt optional mit einem Workspace verknuepfen.", + "publicProject": "Oeffentliches Projekt", + "publicProjectHint": "Dieses Projekt fuer alle sichtbar machen", + "creating": "Wird erstellt...", + "createProject": "Projekt erstellen", + "cancel": "Abbrechen", + "nameRequired": "Projektname ist erforderlich", + "nameAvailable": "Projektname ist verfuegbar", + "nameExists": "Projektname existiert bereits", + "failedCheckAvailability": "Verfuegbarkeitspruefung fehlgeschlagen", + "failedCreate": "Projekt konnte nicht erstellt werden", + "createdSuccess": "Projekt erfolgreich erstellt!" + }, + "repository": { + "title": "Neues Repository erstellen", + "subtitle": "Ein neues Git-Repository in Ihrem Projekt erstellen", + "project": "Projekt", + "noProjects": "Sie haben noch keine Projekte.", + "createProject": "Ein Projekt erstellen", + "selectProject": "Projekt auswaehlen", + "loadingProjects": "Projekte werden geladen...", + "repoName": "Repository-Name", + "namePlaceholder": "mein-tolles-repo", + "description": "Beschreibung", + "descPlaceholder": "Eine kurze Beschreibung Ihres Repositories...", + "defaultBranch": "Standard-Branch", + "defaultBranchPlaceholder": "main", + "initRepo": "Repository initialisieren", + "initRepoOn": "Jetzt ein Bare-Git-Repository erstellen. Standard-Branch unten festlegen.", + "initRepoOff": "Initialisierung ueberspringen. Der Standard-Branch wird automatisch beim Push gesetzt.", + "privateRepo": "Privates Repository", + "privateAuto": "Dieses Repository muss privat sein, da das Projekt privat ist", + "privateManual": "Dieses Repository privat machen und Zugriff einschraenken", + "creating": "Wird erstellt...", + "createRepo": "Repository erstellen", + "cancel": "Abbrechen", + "selectProjectFirst": "Bitte waehlen Sie zuerst ein Projekt", + "nameRequired": "Repository-Name ist erforderlich", + "nameAvailable": "Repository-Name ist verfuegbar", + "nameExists": "Repository-Name existiert bereits", + "failedCheckAvailability": "Verfuegbarkeitspruefung fehlgeschlagen", + "failedCreate": "Repository konnte nicht erstellt werden", + "createdSuccess": "Repository erfolgreich erstellt", + "failedLoadProjects": "Projekte konnten nicht geladen werden", + "failedLoadDetails": "Repository erstellt, aber Details konnten nicht geladen werden" + } + }, + "pricing": { + "title": "Einfache, transparente Preise.", + "subtitle": "Kostenlos starten. Skalieren Sie, wenn Ihr Agent-Fleet wächst.", + "free": "Kostenlos", + "freePrice": "0 €", + "freePeriod": "fuer immer", + "freeDesc": "Command as Service fuer Einzelpersonen — versionierte Befehle, Agent-Memory und Skill Registry inklusive.", + "freeCta": "Kostenlos starten", + "freeFeatures": [ + "3 aktive Agenten", + "5 GB Agent-Memory", + "Community Skill Registry", + "Oeffentliche Raeume", + "7-Tage-Historie" + ], + "pro": "Pro", + "proPrice": "29 €", + "proPeriod": "pro Monat", + "proDesc": "Command as Service fuer Teams — unbegrenzte Agenten, vollstaendiger Command-Stream-Audit und Prioritaets-Compute.", + "proCta": "Pro erhalten", + "proFeatures": [ + "Unbegrenzte Agenten", + "50 GB Agent-Memory", + "Private Skill Registry", + "Collaborative Rooms", + "90-Tage-Historie", + "Prioritaets-Compute", + "E-Mail-Support" + ], + "enterprise": "Enterprise", + "enterprisePrice": "Individuell", + "enterpriseDesc": "Command as Service im grossen Massstab — individuelle Bereitstellung, granulare Command-Stream-Governance und dedizierte SLA fuer Ihren Agent-Fleet.", + "enterpriseCta": "Vertrieb kontaktieren", + "enterpriseFeatures": [ + "Alles von Pro", + "Unbegrenztes Memory", + "SSO / SAML", + "Individuelles Model-Routing", + "Dediziertes Compute", + "SLA-Garantie", + "Dedizierter Support" + ], + "faqHeading": "Haeufig gestellt", + "faqSubtitle": "Abrechnungsfragen beantwortet.", + "faq1Q": "Kann ich Plaene jederzeit wechseln?", + "faq1A": "Ja. Upgraden oder downgraden Sie jederzeit. Aenderungen werden am naechsten Abrechnungszyklus wirksam.", + "faq2Q": "Was zaehlt als Agent-Memory?", + "faq2A": "Agent-Memory ist der gesamte persistente Kontext, der ueber alle Ihre Agenten gespeichert ist, einschliesslich Konversationshistorie und Langzeitgedaechtnis.", + "faq3Q": "Gibt es eine kostenlose Testversion fuer Pro?", + "faq3A": "Ja — die kostenlose Stufe laesst Sie alle Pro-Funktionen 14 Tage lang erkunden, wenn Sie upgraden." + }, + "repository": { + "list": { + "repositories": "Repositories", + "searchPlaceholder": "Repositories durchsuchen…", + "filter": "Filter", + "new": "Neu", + "filters": "Filter", + "clearAll": "Alle loeschen", + "visibility": "Sichtbarkeit", + "all": "Alle", + "public": "Oeffentlich", + "private": "Privat", + "sortBy": "Sortieren nach", + "lastUpdated": "Zuletzt aktualisiert", + "name": "Name", + "linkedIssues": "Verknuepfte Issues", + "stars": "Sterne", + "repository": "Repository", + "repositoriesPlural": "Repositories", + "errorLoading": "Fehler:", + "errorLoadFailed": "Repositories konnten nicht geladen werden", + "noRepositories": "Keine Repositories gefunden", + "clearFilters": "Filter loeschen", + "watches": "Beobachtungen", + "branches": "Branches", + "defaultBranch": "Standard-Branch", + "lastUpdatedColumn": "Zuletzt aktualisiert", + "never": "Nie", + "showing": "{start}–{end} von {total} werden angezeigt", + "previous": "Zurueck", + "next": "Weiter", + "page": "Seite {page}" + }, + "overview": { + "repositoryStats": "Repository-Statistiken", + "defaultBranch": "Standard-Branch", + "commits": "Commits", + "branches": "Branches", + "tags": "Tags", + "stars": "Sterne", + "watchers": "Beobachter", + "readme": "README", + "starred": "Favorisiert", + "unstarred": "Favorit entfernt", + "watching": "Repository beobachten", + "stoppedWatching": "Beobachtung beendet", + "failedToStar": "Favorisieren fehlgeschlagen", + "failedToUnstar": "Favorit entfernen fehlgeschlagen", + "failedToWatch": "Beobachten fehlgeschlagen", + "failedToUnwatch": "Beobachtung beenden fehlgeschlagen" + }, + "subpages": { + "commits": { + "title": "Commits", + "description": "Commit-Historie dieses Repositories durchsuchen.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "Commit-Historie noch nicht verfuegbar." + }, + "branches": { + "title": "Branches", + "description": "Repository-Branches verwalten und durchsuchen.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "Branch-Liste und -Verwaltung noch nicht verfuegbar." + }, + "tags": { + "title": "Tags", + "description": "Repository-Tags und -Releases durchsuchen.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "Tag- und Release-Verwaltung noch nicht verfuegbar." + }, + "files": { + "title": "Dateien", + "description": "Repository-Dateien durchsuchen und verwalten.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "Dateibrowser noch nicht verfuegbar." + }, + "contributors": { + "title": "Mitwirkende", + "description": "Statistiken und Aktivitaeten der Mitwirkenden anzeigen.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "Mitwirkenden-Statistiken noch nicht verfuegbar." + }, + "pullRequests": { + "title": "Pull Requests", + "description": "Pull Requests fuer {repo} erstellen und verwalten.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "Pull-Request-Verwaltung noch nicht verfuegbar." + } + } + }, + "workspace": { + "projects": { + "title": "Projekte", + "newProject": "Neues Projekt", + "noProjects": "Noch keine Projekte in diesem Workspace.", + "createFirstProject": "Erstellen Sie Ihr erstes Projekt", + "noDescription": "Keine Beschreibung", + "private": "Privat" + }, + "members": { + "title": "Mitglieder", + "inviteMember": "Mitglied einladen", + "inviteTo": "Einladen zu {name}", + "inviteDescription": "Sie erhalten eine E-Mail mit einem Link, um diesem Workspace beizutreten. Einladungen laufen nach 7 Tagen ab.", + "emailAddress": "E-Mail-Adresse", + "emailPlaceholder": "kollege@beispiel.de", + "role": "Rolle", + "memberRoleDesc": "Mitglied — kann Projekte ansehen und dazu beitragen", + "adminRoleDesc": "Admin — kann Mitglieder und Einstellungen verwalten", + "adminInfo": "Admins koennen Workspace-Einstellungen, Mitglieder und Abrechnung verwalten.", + "memberInfo": "Mitglieder koennen Projekte erstellen und verwalten, die diesem Workspace zugewiesen sind.", + "cancel": "Abbrechen", + "sendInvitation": "Einladung senden", + "sending": "Wird gesendet...", + "pendingInvitations": "Ausstehende Einladungen", + "expires": "laeuft ab am {date}", + "by": "von @{username}", + "searchMembers": "Mitglieder suchen...", + "allRoles": "Alle Rollen", + "owner": "Eigentuemer", + "admin": "Admin", + "member": "Mitglied", + "memberColumn": "Mitglied", + "roleColumn": "Rolle", + "invitedBy": "Eingeladen von", + "joined": "Beigetreten", + "noMatch": "Keine Mitglieder entsprechen Ihren Filtern", + "noMembers": "Noch keine Mitglieder", + "remove": "Entfernen", + "page": "Seite {page} von {totalPages}", + "totalMembers": "{count} Mitglieder insgesamt", + "invitationSent": "Einladung an {email} gesendet", + "failedSendInvitation": "Einladung konnte nicht gesendet werden", + "memberRemoved": "Mitglied entfernt", + "failedRemoveMember": "Mitglied konnte nicht entfernt werden", + "invitationCancelled": "Einladung storniert", + "failedCancelInvitation": "Einladung konnte nicht storniert werden", + "roleUpdated": "Rolle aktualisiert", + "failedUpdateRole": "Rolle konnte nicht aktualisiert werden", + "pending": "Ausstehend" + }, + "settings": { + "title": "Workspace-Einstellungen", + "general": "Allgemein", + "avatarUrl": "Avatar-URL", + "avatarUrlPlaceholder": "https://beispiel.de/avatar.png", + "avatarHint": "Geben Sie eine URL zu einem Bild fuer den Workspace-Avatar ein.", + "workspaceName": "Workspace-Name", + "namePlaceholder": "Mein Workspace", + "description": "Beschreibung", + "descPlaceholder": "Beschreiben Sie diesen Workspace...", + "billingEmail": "Abrechnungs-E-Mail", + "billingEmailPlaceholder": "abrechnung@beispiel.de", + "billingHint": "Rechnungen werden an diese E-Mail-Adresse gesendet.", + "saveChanges": "Aenderungen speichern", + "saving": "Speichern...", + "plan": "Plan", + "currentPlan": "Aktueller Plan", + "manageBilling": "Abrechnung verwalten", + "dangerZone": "Gefahrenzone", + "deleteWorkspace": "Workspace loeschen", + "deleteWarning": "Diesen Workspace und alle zugehoerigen Daten dauerhaft loeschen. Diese Aktion kann nicht rueckgaengig gemacht werden.", + "deletingWorkspace": "Wird geloescht...", + "deleteConfirm": "Sind Sie sicher, dass Sie diesen Workspace loeschen moechten? Diese Aktion kann nicht rueckgaengig gemacht werden.", + "updated": "Workspace aktualisiert", + "failedUpdate": "Workspace konnte nicht aktualisiert werden", + "deleted": "Workspace geloescht", + "failedDelete": "Workspace konnte nicht geloescht werden" + } + }, + "projectSettings": { + "general": { + "title": "Allgemein", + "description": "Beschreibung", + "projectAvatar": "Projekt-Avatar", + "uploadAvatar": "Avatar hochladen", + "avatarFormat": "PNG, JPG, GIF oder WebP. Max. 2MB.", + "displayName": "Anzeigename", + "publicVisibility": "Oeffentliche Sichtbarkeit", + "publicVisibilityDesc": "Allen erlauben, dieses Projekt anzuzeigen.", + "saveChanges": "Aenderungen speichern", + "confirmTitle": "Projektaenderungen bestaetigen", + "confirmDescription": "Sie sind dabei, folgende Einstellungen zu aktualisieren:", + "displayNameField": "Anzeigename", + "descriptionField": "Beschreibung", + "visibilityField": "Sichtbarkeit: {visibility}", + "publicWarning": "Wenn Sie dieses Projekt oeffentlich machen, kann jeder seinen Inhalt sehen.", + "confirmSave": "Bestaetigen & Speichern", + "projectAvatarUpdated": "Projekt-Avatar aktualisiert", + "failedUploadAvatar": "Avatar-Upload fehlgeschlagen", + "fileSizeLimit": "Dateigroesse muss unter 2MB liegen", + "projectSettingsUpdated": "Projekteinstellungen aktualisiert", + "failedUpdateProject": "Projekteinstellungen konnten nicht aktualisiert werden" + }, + "members": { + "title": "Mitglieder", + "invite": "Einladen", + "searchMembers": "Mitglieder suchen…", + "member": "Mitglied", + "members": "Mitglieder", + "noMatchSearch": "Keine Mitglieder entsprechen Ihrer Suche", + "noMembers": "Keine Mitglieder gefunden", + "clearSearch": "Suche loeschen", + "user": "Benutzer", + "role": "Rolle", + "joined": "Beigetreten", + "actions": "Aktionen", + "inviteMemberTitle": "Mitglied einladen", + "email": "E-Mail", + "emailPlaceholder": "kollege@beispiel.de", + "cancel": "Abbrechen", + "sendInvite": "Einladung senden", + "sending": "Wird gesendet…", + "removeMemberTitle": "Mitglied entfernen", + "removeConfirm": "Sind Sie sicher, dass Sie {username} aus diesem Projekt entfernen moechten?", + "removing": "Wird entfernt…", + "remove": "Entfernen", + "invitationSent": "Einladung gesendet", + "failedSendInvitation": "Einladung konnte nicht gesendet werden", + "memberRemoved": "Mitglied entfernt", + "failedRemoveMember": "Mitglied konnte nicht entfernt werden", + "roleUpdated": "Rolle aktualisiert", + "failedUpdateRole": "Rolle konnte nicht aktualisiert werden", + "emailRequired": "E-Mail ist erforderlich", + "errorLoading": "Fehler:", + "failedLoadMembers": "Mitglieder konnten nicht geladen werden" + }, + "labels": { + "title": "Labels", + "description": "Beschreibung", + "editLabel": "Label bearbeiten", + "createLabel": "Label erstellen", + "nameRequired": "Name *", + "namePlaceholder": "Label-Name", + "color": "Farbe", + "descPlaceholder": "Dieses Label beschreiben", + "cancel": "Abbrechen", + "updateLabel": "Label aktualisieren", + "createLabelButton": "Label erstellen", + "addLabel": "Label hinzufuegen", + "failedToLoad": "Labels konnten nicht geladen werden", + "noLabels": "Keine Labels gefunden. Erstellen Sie Ihr erstes Label.", + "deleteLabelTitle": "Label loeschen", + "deleteLabelConfirm": "Sind Sie sicher, dass Sie dieses Label loeschen moechten? Diese Aktion kann nicht rueckgaengig gemacht werden.", + "delete": "Loeschen", + "labelCreated": "Label erstellt", + "labelUpdated": "Label aktualisiert", + "labelDeleted": "Label geloescht", + "failedCreateLabel": "Label konnte nicht erstellt werden", + "failedUpdateLabel": "Label konnte nicht aktualisiert werden", + "failedDeleteLabel": "Label konnte nicht geloescht werden", + "nameRequiredError": "Label-Name ist erforderlich" + }, + "boards": { + "title": "Boards", + "newBoard": "Neues Board", + "noBoards": "Noch keine Boards", + "noBoardsHint": "Erstellen Sie ein Board, um Ihre Projektarbeit zu organisieren.", + "newBoardDialog": "Neues Board", + "name": "Name", + "namePlaceholder": "z.B. Sprint-Planung", + "description": "Beschreibung", + "descriptionPlaceholder": "Optional", + "cancel": "Abbrechen", + "createBoard": "Board erstellen", + "updated": "Aktualisiert am {date}", + "failedCreate": "Board konnte nicht erstellt werden" + }, + "billing": { + "currentBilling": "Aktuelle Abrechnung", + "description": "Kontingent, Nutzung und Kontostand des aktuellen Zyklus.", + "monthlyQuota": "Monatliches Kontingent", + "currentBalance": "Aktueller Kontostand", + "currentUsage": "Aktuelle Nutzung", + "billingHistory": "Abrechnungshistorie", + "billingHistoryDesc": "Projekt-Abrechnungsflussaufzeichnungen.", + "noRecords": "Noch keine Abrechnungsaufzeichnungen.", + "time": "Zeit", + "reason": "Grund", + "amount": "Betrag", + "currency": "Waehrung", + "type": "Typ", + "charge": "Belastung", + "credit": "Guthaben", + "showing": "{start} bis {end} von {total} Aufzeichnungen werden angezeigt", + "page": "Seite {page} von {totalPages}", + "failedToLoad": "Abrechnungsinformationen konnten nicht geladen werden." + }, + "skills": { + "title": "Skills", + "subtitle": "Agent-Anweisungen fuer dieses Projekt", + "searchPlaceholder": "Skills durchsuchen...", + "all": "Alle", + "manual": "Manuell", + "repo": "Repo", + "scanRepos": "Repos scannen", + "addSkill": "Skill hinzufuegen", + "noSkills": "Keine Skills gefunden", + "noSkillsHint": "Skills manuell hinzufuegen oder Repositories scannen, um SKILL.md-Dateien zu finden.", + "noMatch": "Keine Skills entsprechen Ihrer Suche oder Ihrem Filter.", + "deleteSkill": "Skill loeschen", + "deleteConfirm": "Sind Sie sicher, dass Sie \"{name}\" loeschen moechten? Dies kann nicht rueckgaengig gemacht werden.", + "cancel": "Abbrechen", + "delete": "Loeschen", + "content": "Inhalt", + "moreLines": "+{count} weitere Zeilen", + "copied": "Kopiert", + "copyContent": "Inhalt kopieren", + "scannedFromRepo": "Von Repository gescannt", + "addedManually": "Manuell hinzugefuegt", + "failedLoad": "Skills konnten nicht geladen werden", + "scanSuccess": "Repositories erfolgreich gescannt", + "scanFailed": "Repositories konnten nicht gescannt werden", + "deleted": "\"{name}\" geloescht", + "failedDelete": "Skill konnte nicht geloescht werden" + }, + "webhook": { + "title": "Webhooks", + "description": "Webhooks konfigurieren, um Benachrichtigungen ueber Ereignisse in Ihrem Projekt zu erhalten.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "Webhook-Konfiguration noch nicht verfuegbar." + }, + "oauth": { + "title": "OAuth-App", + "description": "OAuth-Anwendungen fuer Drittanbieter-Integrationen erstellen und verwalten.", + "comingSoon": "Demnachst verfuegbar", + "notAvailable": "OAuth-Anwendungsverwaltung noch nicht verfuegbar." + } + }, + "shared": { + "projects": "Projekte", + "loading": "Laden...", + "error": "Fehler", + "success": "Erfolg", + "cancel": "Abbrechen", + "confirm": "Bestaetigen", + "delete": "Loeschen", + "edit": "Bearbeiten", + "save": "Speichern", + "close": "Schliessen", + "back": "Zurueck", + "next": "Weiter", + "previous": "Zurueck", + "submit": "Absenden", + "search": "Suchen", + "filter": "Filtern", + "clear": "Loeschen", + "reset": "Zuruecksetzen", + "apply": "Anwenden", + "yes": "Ja", + "no": "Nein", + "ok": "OK", + "retry": "Wiederholen", + "refresh": "Aktualisieren", + "noData": "Keine Daten", + "noResults": "Keine Ergebnisse", + "loadingFailed": "Laden fehlgeschlagen", + "operationFailed": "Vorgang fehlgeschlagen", + "operationSuccess": "Vorgang erfolgreich" + }, + "about": { + "title": "Ueber GitDataAI", + "subtitle": "Wir sind davon ueberzeugt, dass jede Entwicklungsaktion ein versionierter Befehl sein sollte — pruefbar, wiederholbar und menschlich genehmigt. Wir bauen die Command-as-Service-Plattform fuer das agentische Zeitalter.", + "quote": "\"Jede Aktion ist ein Befehl. Jeder Befehl ist versioniert und pruefbar.\"", + "mission": "GitDataAI wurde gegruendet, um Command as Service in das agentische Zeitalter zu bringen — jede Agentenentscheidung versioniert, jeder Befehlsstrom pruefbar, jede menschliche-in-der-Schleife-Aktion genehmigt.", + "ourValues": "Unsere Werte", + "values": { + "transparency": { + "title": "Transparenz", + "desc": "Jede Agentenentscheidung wird protokolliert, versioniert und geprueft. Keine Blackboxes." + }, + "collaboration": { + "title": "Zusammenarbeit", + "desc": "Menschen und Agenten sind Partner. Keiner ersetzt den anderen — zusammen erreichen sie mehr." + }, + "reliability": { + "title": "Zuverlaessigkeit", + "desc": "Production-Grade-Infrastruktur. Ihre Agenten laufen, wenn Sie sie brauchen." + }, + "extensibility": { + "title": "Erweiterbarkeit", + "desc": "Offenes Registry, offene API. Das Netzwerk wachsen durch Community-Beitraege." + } + }, + "theTeam": "Das Team", + "hiring": "Wir stellen ein. Kommen Sie und bauen Sie mit uns.", + "join": "GitDataAI beitreten", + "github": "GitHub" + }, + "invitations": { + "title": "Meine Einladungen", + "pendingCount": "{count} ausstehende Einladung", + "pendingCountPlural": "{count} ausstehende Einladungen", + "noPending": "Keine ausstehenden Einladungen", + "noPendingHint": "Projekt- und Workspace-Einladungen werden hier angezeigt.", + "projectInvitation": "Projekt-Einladung", + "workspaceInvitation": "Workspace-Einladung", + "invitedToJoin": "Sie wurden eingeladen, {name} beizutreten", + "invitedToWorkspace": "Sie wurden eingeladen, Workspace {name} beizutreten", + "by": "von {username}", + "accept": "Annehmen", + "decline": "Ablehnen", + "acceptedProject": "Sie sind dem Projekt beigetreten: {name}", + "declinedInvitation": "Einladung zu {name} abgelehnt", + "acceptedWorkspace": "Sie sind dem Workspace beigetreten", + "failedAccept": "Einladung konnte nicht angenommen werden", + "failedDecline": "Einladung konnte nicht abgelehnt werden" + }, + "network": { + "title": "Das GitDataAI-Netzwerk", + "subtitle": "Ein wachsendes Oekosystem aus Agenten, Workspaces und Skills, die ueber einen einheitlichen Befehlsstrom zusammenarbeiten. Jede Agentenaktion ist ein Befehl. Jeder Befehl ist wiederholbar.", + "activeAgents": "Aktive Agenten", + "workspaces": "Workspaces", + "skillRuns": "Skill-Ausfuehrungen", + "uptimeSla": "Verfuegbarkeits-SLA", + "publicRooms": "Oeffentliche Raeume", + "live": "LIVE", + "active": "Aktiv", + "agents": "{count} Agenten", + "participants": "{count}", + "privacyByDefault": "Standardmaessig privat", + "privacyDesc": "Alle Workspaces sind standardmaessig privat. Sie kontrollieren, wer Ihre Agenten, Skills und Konversationshistorie sieht. Oeffentliche Raeume erfordern ein explizites Opt-in.", + "network": "Netzwerk", + "roomsLive": "{count} Raeume live", + "ended": "BEENDET", + "startYourOwnRoom": "Eigenen Raum starten" + }, + "skills": { + "title": "Das Skill Registry", + "subtitle": "Wiederverwendbare, versionierte Agentenverhaltensweisen, verpackt als Skills — aufgerufen per Befehl, eingesetzt ueber Ihre gesamte Agentenflotte.", + "searchPlaceholder": "Skills durchsuchen...", + "categories": [ + "Alle", + "Frontend", + "Backend", + "DevOps", + "Sicherheit", + "Daten", + "Tests" + ], + "publishCTA": "Veroeffentlichen Sie Ihren eigenen Skill und werden Sie Teil des Registries.", + "publishButton": "Skill veroeffentlichen", + "runs": "{count} Ausfuehrungen" + }, + "solutions": { + "title": "Command as Service", + "subtitle": "In GitDataAI ist jede Aktion ein Befehl erster Klasse. Befehle sind versioniert, pruefbar und zusammensetzbar — Ihr Entwicklungsworkflow ist Ihre API.", + "learnMore": "Mehr erfahren", + "coreConcept": "Kernkonzept" + }, + "notificationDrawer": { + "title": "Benachrichtigungen", + "live": "Live", + "markAllRead": "Alle als gelesen markieren", + "noNotifications": "Noch keine Benachrichtigungen", + "noNotificationsHint": "Sie sehen hier Updates, wenn etwas passiert.", + "viewAll": "Alle Benachrichtigungen anzeigen", + "unread": "{count} ungelesen", + "notifications": "Benachrichtigungen" + } +} diff --git a/public/locales/fr/translation.json b/public/locales/fr/translation.json new file mode 100644 index 0000000..86fc9ca --- /dev/null +++ b/public/locales/fr/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": "Agents IA", + "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": "Depots Git", + "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": "Approuver", + "viewDiff": "Voir le diff" + }, + "nav": { + "platform": "Plateforme", + "skills": "Skills", + "network": "Reseau", + "pricing": "Tarifs", + "signIn": "Se connecter", + "joinBeta": "Rejoindre la beta", + "commandAsServiceNav": "Command as Service", + "collaborativeRoomsNav": "Collaborative Rooms", + "aiAgentsNav": "Agents IA", + "gitRepositoriesNav": "Depots Git", + "exploreSkillsNav": "Explorer les skills", + "publishSkillNav": "Publier un skill", + "skillDocumentationNav": "Documentation des skills", + "exploreNetworkNav": "Explorer le reseau", + "publicRoomsNav": "Salons publics", + "developerApiNav": "Developer API", + "plansPricingNav": "Plans & Tarifs", + "enterpriseNav": "Enterprise", + "billingFaqNav": "FAQ Facturation" + }, + "footer": { + "readyHeading": "Pret pour l'ere des agents?", + "getStartedFree": "Commencer gratuitement", + "contactSales": "Contacter le service commercial", + "platform": "Plateforme", + "skills": "Skills", + "developers": "Developpeurs", + "company": "Entreprise", + "gitRepositories": "Depots Git", + "issuesPullRequests": "Issues & PRs", + "collaborativeRooms": "Collaborative Rooms", + "aiAgents": "Agents IA", + "commandStream": "Command Stream", + "skillRegistry": "Skill Registry", + "publishSkill": "Publier un skill", + "skillDocs": "Documentation des skills", + "community": "Communaute", + "documentation": "Documentation", + "cliReference": "Reference CLI", + "apiReference": "Reference API", + "status": "Statut", + "about": "A propos", + "careers": "Carrieres", + "contact": "Contact", + "privacy": "Confidentialite", + "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": "Se connecter", + "subtitleWelcome": "Bienvenue sur GitDataAI", + "subtitleContinue": "Continuer vers {path}", + "usernameLabel": "Nom d'utilisateur", + "usernamePlaceholder": "Entrez votre nom d'utilisateur", + "passwordLabel": "Mot de passe", + "passwordForgot": "Oublie?", + "verificationLabel": "Verification", + "verificationPlaceholder": "Entrez le code", + "submitButton": "Se connecter", + "noAccount": "Pas encore de compte?", + "createOne": "Creer un compte", + "errorFillRequired": "Veuillez remplir tous les champs obligatoires.", + "errorInvalidCredentials": "Identifiants invalides. Veuillez reessayer." + }, + "register": { + "heading": "Creer un compte", + "subtitle": "Rejoignez la prochaine generation de collaboration humain-agent", + "emailLabel": "E-mail", + "emailPlaceholder": "nom@entreprise.fr", + "usernameLabel": "Nom d'utilisateur", + "usernamePlaceholder": "architecte_01", + "passwordLabel": "Mot de passe", + "passwordPlaceholder": "••••••••", + "confirmLabel": "Confirmer", + "confirmPlaceholder": "••••••••", + "verificationLabel": "Verification", + "verificationPlaceholder": "Captcha", + "submitButton": "Creer le compte", + "alreadyHaveAccount": "Deja un compte?", + "signIn": "Se connecter", + "encrypted": "Chiffre", + "errorEmailRequired": "L'e-mail est requis", + "errorInvalidEmail": "Adresse e-mail invalide", + "errorUsernameRequired": "Le nom d'utilisateur est requis", + "errorUsernameLength": "Le nom d'utilisateur doit contenir au moins 3 caracteres", + "errorPasswordRequired": "Le mot de passe est requis", + "errorPasswordLength": "Le mot de passe doit contenir au moins 8 caracteres", + "errorPasswordComplexity": "Le mot de passe doit contenir des majuscules, des minuscules et un chiffre", + "errorPasswordMismatch": "Les mots de passe ne correspondent pas", + "errorCaptchaRequired": "Le code de verification est requis", + "errorRegistrationFailed": "Echec de l'inscription", + "successAccountCreated": "Compte cree avec succes!" + }, + "passwordReset": { + "heading": "Reinitialiser le mot de passe", + "subtitle": "Entrez votre adresse e-mail et nous vous enverrons un lien pour vous reconnecter a votre compte.", + "emailLabel": "Adresse e-mail", + "emailPlaceholder": "nom@exemple.fr", + "submitButton": "Envoyer le lien de reinitialisation", + "backToSignIn": "Retour a la connexion", + "successHeading": "Verifiez votre e-mail", + "successMessage": "Nous avons envoye un lien securise a {email}. Cliquez sur le lien pour reinitialiser votre phrase secrete.", + "returnToSignIn": "Retour a la connexion", + "didNotReceive": "Pas recu l'e-mail? Verifiez votre dossier spam ou", + "tryAgain": "reessayez", + "secureLink": "Lien securise", + "expiry24h": "Expire dans 24h", + "errorEmailRequired": "L'adresse e-mail est requise.", + "errorInvalidEmail": "Veuillez entrer une adresse e-mail valide.", + "errorSendFailed": "Echec de l'envoi de l'e-mail de reinitialisation.", + "successLinkSent": "Lien de reinitialisation envoye!" + }, + "confirmPasswordReset": { + "heading": "Definir un nouveau mot de passe", + "subtitle": "Creez un mot de passe强者 pour votre compte.", + "newPasswordLabel": "Nouveau mot de passe", + "newPasswordPlaceholder": "Au moins 8 caracteres", + "confirmPasswordLabel": "Confirmer le mot de passe", + "confirmPasswordPlaceholder": "Repetez votre mot de passe", + "submitButton": "Reinitialiser le mot de passe", + "backToSignIn": "Retour a la connexion", + "successHeading": "Reinitialisation du mot de passe terminee", + "successMessage": "Votre mot de passe a ete mis a jour. Vous pouvez maintenant vous connecter avec votre nouveau mot de passe.", + "signIn": "Se connecter", + "passwordUpdated": "Mot de passe mis a jour", + "secureConnection": "Connexion securisee", + "errorMissingToken": "Jeton de reinitialisation manquant. Veuillez utiliser le lien de votre e-mail.", + "errorPasswordRequired": "Le nouveau mot de passe est requis.", + "errorPasswordLength": "Le mot de passe doit contenir au moins 8 caracteres.", + "errorPasswordUppercase": "Le mot de passe doit contenir au moins une majuscule.", + "errorPasswordLowercase": "Le mot de passe doit contenir au moins une minuscule.", + "errorPasswordDigit": "Le mot de passe doit contenir au moins un chiffre.", + "errorPasswordMismatch": "Les mots de passe ne correspondent pas.", + "errorResetFailed": "Echec de la reinitialisation du mot de passe. Le lien a peut-etre expire.", + "successResetComplete": "Mot de passe reinitialise avec succes!" + }, + "verifyEmail": { + "heading": "Verification de l'e-mail", + "loadingText": "Verification du jeton securise...", + "successHeading": "Identite confirmee", + "successMessage": "Votre e-mail a ete verifie avec succes. Vous avez maintenant un acces complet a la plateforme GitDataAI.", + "goToDashboard": "Aller au tableau de bord", + "errorHeading": "Echec de la verification", + "backToSettings": "Retour aux parametres", + "needHelp": "Besoin d'aide?", + "contactSupport": "Contacter le support technique", + "encryptedLink": "Lien chiffre", + "soc2Compliant": "Conforme SOC2", + "errorTokenMissing": "Le jeton de verification est manquant ou mal forme.", + "errorLinkExpired": "Le lien de verification a expire ou est invalide.", + "successVerified": "Identite verifiee avec succes." + }, + "acceptWorkspaceInvite": { + "heading": "Invitation Workspace", + "loadingHeading": "Validation de l'invitation", + "loadingText": "Verification des permissions et du statut du workspace...", + "successHeading": "Bienvenue a bord!", + "successMessage": "Invitation acceptee. Vous avez ete ajoute a l'equipe. Nous vous redirigeons vers le tableau de bord.", + "proceedManually": "Proceder manuellement", + "errorHeading": "Invitation invalide", + "returnHome": "Retour a l'accueil", + "needNewLink": "Besoin d'un nouveau lien?", + "contactAdmin": "Contacter l'admin du workspace", + "secureJoin": "JOINTURE SECURISEE", + "dataOwnership": "PROPRIETE DES DONNEES", + "errorMissingToken": "Le lien d'invitation ne contient pas de jeton de securite valide.", + "errorExpired": "Le lien d'invitation a expire ou a deja ete utilise.", + "successJoined": "Vous avez rejoint le workspace avec succes" + } + }, + "project": { + "overview": { + "settings": "Parametres", + "members": "membres", + "likes": "likes", + "watches": "abonnements", + "public": "Public", + "private": "Prive", + "activity": "Activite", + "viewAll": "Voir tout", + "recentEvents": "Evenements recents dans ce projet", + "noActivity": "Pas encore d'activite.", + "projectInfo": "Info projet", + "projectName": "Nom du projet", + "yourRole": "Votre role", + "created": "Cree", + "visibility": "Visibilite", + "guest": "Invite", + "quickActions": "Actions rapides", + "newIssue": "Nouvel Issue", + "viewActivity": "Voir l'activite", + "membersAction": "Membres", + "createRepository": "Creer un depot", + "projectNotFound": "Projet non trouve.", + "noDescription": "Aucune description fournie", + "expand": "Developper", + "collapse": "Reduire" + }, + "eventTypes": { + "commit": "Commit", + "branch": "Branche", + "tag": "Tag", + "issue": "Issue", + "comment": "Commentaire", + "pullRequest": "Pull Request", + "merged": "Fusionne", + "message": "Message", + "room": "Salon", + "starred": "Favori ajoute", + "unstarred": "Favori retire", + "watched": "Abonne", + "unwatched": "Desabonne", + "member": "Membre", + "label": "Label", + "repo": "Depot" + }, + "dateLabels": { + "today": "Aujourd'hui", + "yesterday": "Hier" + }, + "issues": { + "breadcrumb": { + "projects": "Projets", + "issues": "Issues" + }, + "searchPlaceholder": "Rechercher des issues…", + "boardView": "Vue tableau", + "listView": "Vue liste", + "board": "Tableau", + "list": "Liste", + "new": "Nouveau", + "open": "Ouvert", + "closed": "Ferme", + "of": "sur", + "shown": "affiches", + "errorLoading": "Erreur:", + "errorLoadFailed": "Echec du chargement des issues", + "noIssues": "Aucun issue trouve", + "clearSearch": "Effacer la recherche", + "title": "Titre", + "author": "Auteur", + "date": "Date", + "newIssue": "Nouvel issue", + "noIssuesInColumn": "Aucun issue" + }, + "issueDetail": { + "backToIssues": "Retour aux Issues", + "closeIssue": "Fermer l'issue", + "reopenIssue": "Rouvrir l'issue", + "edit": "Modifier", + "openStatus": "Ouvert", + "closedStatus": "Ferme", + "openedBy": "Ouvert par", + "aiTriage": "Triage IA", + "highPriority": "haute priorite", + "mediumPriority": "priorite moyenne", + "lowPriority": "basse priorite", + "accept": "Accepter", + "applying": "Application en cours…", + "ignore": "Ignorer", + "noActivity": "Pas encore d'activite.", + "openedThisIssue": "a ouvert cet issue", + "commented": "a commente", + "editComment": "Modifier le commentaire", + "deleteComment": "Supprimer le commentaire", + "cancel": "Annuler", + "save": "Enregistrer", + "saving": "Enregistrement…", + "leaveComment": "Laisser un commentaire…", + "comment": "Commentaire", + "posting": "Publication…", + "commentCannotEmpty": "Le commentaire ne peut pas etre vide", + "isTyping": "{user} tape…", + "areTyping": "{user1} et {user2} tapent…", + "peopleTyping": "{count} personnes tapent…", + "linkedRepositories": "Depots lies", + "details": "Details", + "status": "Statut", + "author": "Auteur", + "created": "Cree", + "updated": "Mis a jour", + "closed": "Ferme", + "labelsApplied": "Labels appliques", + "failedApplyLabels": "Echec de l'application des labels", + "commentAdded": "Commentaire ajoute", + "failedAddComment": "Echec de l'ajout du commentaire", + "commentDeleted": "Commentaire supprime", + "failedDeleteComment": "Echec de la suppression du commentaire", + "commentUpdated": "Commentaire mis a jour", + "failedUpdateComment": "Echec de la mise a jour du commentaire", + "issueClosed": "Issue ferme", + "issueReopened": "Issue rouvert", + "failedUpdateIssue": "Echec de la mise a jour de l'issue", + "errorLoadingIssue": "Echec du chargement de l'issue" + }, + "room": { + "selectChannel": "Selectionnez une chaine", + "chooseChannelHint": "Choisissez une chaine dans la barre laterale pour commencer a discuter.", + "channels": "Chaines", + "noChannelsYet": "Pas encore de chaines", + "createChannel": "Creer une chaine", + "addCategory": "+ Ajouter une categorie", + "categoryNamePlaceholder": "Nom de la categorie", + "addChannel": "Ajouter une chaine", + "channelSettings": "Parametres de la chaine", + "expand": "Developper", + "collapse": "Reduire", + "mute": "Muet", + "unmute": "Reactiver le son", + "archive": "Archiver", + "unarchive": "Desarchiver", + "members": "Membres", + "online": "En ligne", + "ai": "IA" + }, + "roomDialog": { + "newRoom": "Nouveau salon", + "createRoomDescription": "Creez un nouveau salon de chat. Choisissez un nom et une visibilite.", + "roomName": "Nom du salon", + "roomNamePlaceholder": "ex. general", + "publicLabel": "Public (visible par tous les membres du projet)", + "cancel": "Annuler", + "create": "Creer", + "creating": "Creation...", + "deleteRoom": "Supprimer le salon", + "deleteRoomConfirm": "Etes-vous sur de vouloir supprimer \"{name}\"? Tous les messages seront definitivement supprimes. Cette action est irreversible.", + "deleting": "Suppression..." + }, + "roomChat": { + "connecting": "Connexion...", + "disconnected": "Deconnecte", + "mentions": "@Mentions", + "searchMessages": "Rechercher des messages", + "memberList": "Liste des membres", + "pinnedMessages": "Messages epingles", + "roomSettings": "Parametres du salon", + "deleteChannel": "Supprimer la chaine", + "showChannels": "Afficher les chaines", + "hideChannels": "Masquer les chaines", + "back": "Retour", + "isThinking": "{name} reflechit...", + "typingSingular": "{user} tape...", + "typingDual": "{user1} et {user2} tapent...", + "typingOthers": "{user} et {count} autres tapent...", + "messageUpdated": "Message mis a jour", + "messageDeleted": "Message supprime", + "failedCreateThread": "Echec de la creation du fil", + "navigateToMessage": "Naviguer vers le message dans {room}", + "roomUpdated": "Salon mis a jour", + "failedUpdateRoom": "Echec de la mise a jour du salon" + }, + "commandPalette": { + "placeholder": "Rechercher projets, depots, salons, commandes…", + "noResults": "Aucun resultat trouve.", + "navigation": "Navigation", + "create": "Creer", + "projects": "Projets", + "repositories": "Depots", + "rooms": "Salons", + "gotoNotifications": "Aller aux notifications", + "createProject": "Creer un projet", + "createRepoIn": "Creer un depot dans {project}" + }, + "issueNew": { + "backToIssues": "Retour aux Issues", + "creatingIn": "Creation dans {project}", + "titleRequired": "Titre *", + "titlePlaceholder": "Resume bref de l'issue", + "description": "Description", + "markdown": "Markdown", + "bold": "Gras", + "italic": "Italique", + "code": "Code", + "link": "Lien", + "list": "Liste", + "quote": "Citation", + "bodyPlaceholder": "Decrivez l'issue en detail. Markdown est supporte.", + "bodyHint": "Supporte Markdown — utilisez **gras**, `code`, listes, et plus", + "linkedRepositories": "Depots lies", + "linkedReposHint": "Suivre les commits et pull requests lies a cette issue", + "assignees": "Assignes", + "labels": "Labels", + "cancel": "Annuler", + "createIssue": "Creer l'issue", + "creating": "Creation…", + "discardChanges": "Abandonner les modifications?", + "discardChangesDesc": "Vous avez des modifications non enregistrees. Etes-vous sur de vouloir quitter?", + "keepEditing": "Continuer a modifier", + "discard": "Abandonner", + "titleRequiredError": "Le titre est requis", + "issueCreated": "Issue cree", + "failedCreateIssue": "Echec de la creation de l'issue", + "selectAssignees": "Selectionner les assiges", + "selectAssigneesDesc": "Choisissez les membres de l'equipe a assigner a cette issue", + "noMembers": "Aucun membre trouve dans ce projet", + "done": "Termine", + "selectLabels": "Selectionner les labels", + "selectLabelsDesc": "Choisissez les labels pour categoriser cette issue", + "noLabels": "Pas encore de labels dans ce projet" + }, + "issueEdit": { + "backToIssue": "Retour a l'issue #{number}", + "editingIssue": "Modification de l'issue #{number}", + "title": "Modifier l'issue", + "titleSection": "Titre", + "titleCantChange": "Le titre ne peut pas etre modifie apres la creation", + "status": "Statut", + "changeStatusHint": "Modifier le statut depuis la page de detail de l'issue", + "description": "Description", + "descriptionPlaceholder": "Ajouter une description pour plus de contexte (Markdown supporte)", + "markdownHint": "Formatage Markdown supporte", + "linkedRepositories": "Depots lies", + "noRepositories": "Aucun depot dans ce projet", + "cancel": "Annuler", + "saveChanges": "Enregistrer les modifications", + "saving": "Enregistrement…", + "discardChanges": "Abandonner les modifications?", + "discardChangesDesc": "Vous avez des modifications non enregistrees. Etes-vous sur de vouloir quitter?", + "keepEditing": "Continuer a modifier", + "discard": "Abandonner", + "issueNotFound": "Issue non trouvee.", + "issueUpdated": "Issue mise a jour avec succes", + "failedUpdateIssue": "Echec de la mise a jour de l'issue", + "returnToIssue": "Retour a l'issue" + }, + "activity": { + "title": "Activite", + "subtitle": "Evenements recents dans {project}", + "filterEvents": "Filtrer les evenements", + "perPage": "{count} / page", + "noActivity": "Aucune activite trouvee.", + "tryDifferentType": "Essayez de selectionner un autre type d'evenement.", + "failedLoad": "Echec du chargement du fil d'activite.", + "page": "Page {page} sur {totalPages}", + "events": "{count} evenements", + "allEvents": "Tous les evenements", + "commits": "Commits", + "branchCreated": "Branche creee", + "branchDeleted": "Branche supprimee", + "tagCreated": "Tag cree", + "tagDeleted": "Tag supprime", + "repoCreated": "Depot cree", + "issueOpened": "Issue ouverte", + "issueClosed": "Issue fermee", + "issueReopened": "Issue rouverte", + "issueComment": "Commentaire d'issue", + "prOpened": "PR ouverte", + "prMerged": "PR fusionnee", + "prClosed": "PR fermee", + "roomMessage": "Message de salon", + "roomCreated": "Salon cree", + "projectStarred": "Projet mis en favori", + "projectUnstarred": "Favori du projet retire", + "memberAdded": "Membre ajoute", + "memberRemoved": "Membre supprime", + "roleChanged": "Role modifie", + "labelCreated": "Label cree", + "labelUpdated": "Label mis a jour", + "labelDeleted": "Label supprime" + }, + "resources": { + "title": "Ressources", + "subtitle": "Gerez et publiez les ressources du projet sur le marketplace.", + "comingSoon": "Bientot disponible", + "description": "Publiez des skills, des paquets et d'autres ressources sur le marketplace." + }, + "articles": { + "title": "Articles", + "subtitle": "Redigez et gerez la documentation et les articles du projet.", + "comingSoon": "Bientot disponible", + "description": "Redigez et publiez des articles pour votre projet." + }, + "skillsInit": { + "backToSkills": "Retour aux Skills", + "title": "Nouveau Skill", + "subtitle": "Ajouter un skill a ce projet", + "slug": "Slug", + "slugPlaceholder": "coding/code-review", + "slugHint": "Identifiant unique, utilisez / pour grouper les skills", + "displayName": "Nom d'affichage", + "namePlaceholder": "Agent de revue de code", + "description": "Description", + "descPlaceholder": "Revoit les pull requests avec l'IA", + "content": "Contenu (SKILL.md)", + "contentPlaceholder": "# Revue de code\n\nVous etes un expert en revue de code...", + "contentHint": "Markdown decrivant quand et comment utiliser ce skill.", + "cancel": "Annuler", + "createSkill": "Creer le skill", + "created": "Skill \"{name}\" cree", + "failedCreate": "Echec de la creation du skill" + } + }, + "notification": { + "title": "Notifications", + "live": "En direct", + "unreadTotal": "{unread} non lues · {total} total", + "totalNotifications": "{count} notification{plural}", + "noGrouping": "Pas de regroupement", + "groupByProject": "Regrouper par projet", + "groupByType": "Regrouper par type", + "cancel": "Annuler", + "markRead": "Marquer comme lu", + "archive": "Archiver", + "markAllRead": "Tout marquer comme lu", + "selectMultiple": "Selection multiple", + "selectModeActive": "✓ Mode selection active", + "markAllReadInGroup": "Tout marquer comme lu dans le groupe", + "filterAll": "Tout", + "filterUnread": "Non lues", + "filterArchived": "Archivees", + "notificationSettings": "Parametres de notification", + "noUnread": "Pas de notifications non lues", + "noArchived": "Pas de notifications archivees", + "noNotifications": "Pas encore de notifications", + "allCaughtUp": "Vous etes a jour!", + "archivedAppearHere": "Les notifications archivees apparaitront ici.", + "notificationsAppearHere": "Vous verrez les notifications ici lorsqu'un evenement se produit.", + "justNow": "a l'instant", + "minutesAgo": "il y a {count}m", + "hoursAgo": "il y a {count}h", + "daysAgo": "il y a {count}j", + "markAsRead": "Marquer comme lu", + "notificationArchived": "Notification archivee", + "failedMarkRead": "Echec du marquage comme lu", + "failedArchive": "Echec de l'archivage", + "failedMarkAllRead": "Echec du marquage de tout comme lu", + "notificationsArchived": "{count} notifications archivees", + "typeMention": "Mention", + "typeInvitation": "Invitation", + "typeProjectInvite": "Invitation projet", + "typeWorkspaceInvite": "Invitation workspace", + "typeRoleChange": "Changement de role", + "typeRoomCreated": "Salon cree", + "typeRoomDeleted": "Salon supprime", + "typeAnnouncement": "Annonce", + "typeIssueOpened": "Issue ouverte", + "typeIssueCommented": "Commentaire d'issue", + "typeIssueClosed": "Issue fermee", + "typeReviewRequested": "Revue demandee", + "typePrApproved": "PR approuvee", + "typePrMerged": "PR fusionnee" + }, + "search": { + "placeholder": "Rechercher projets, depots, issues, utilisateurs...", + "searchButton": "Rechercher", + "projects": "Projets", + "repositories": "Depots", + "issues": "Issues", + "users": "Utilisateurs", + "messages": "Messages", + "resultsFor": "{count} resultats pour \"{query}\"", + "noResultsFor": "Aucun resultat pour \"{query}\"", + "messagesFor": "{count} message{plural} pour \"{query}\"{inRoom}", + "noMessagesFor": "Aucun message trouve correspondant a \"{query}\"", + "noMessagesInRoom": "Aucun message trouve dans le salon \"{room}\" correspondant a \"{query}\"", + "searchFailed": "Echec de la recherche", + "enterKeyword": "Entrez un mot-cle pour rechercher dans tous les contenus.", + "noResultsFound": "Aucun resultat trouve", + "tryDifferentKeywords": "Essayez d'autres mots-cles ou verifiez l'orthographe.", + "showing": "Affichage de {count} sur {total} {type}", + "roomIdPlaceholder": "ID du salon pour rechercher les messages (ex. workspace:general)...", + "acrossAllRooms": "dans tous les salons accessibles", + "inRoom": " dans le salon {room}" + }, + "settings": { + "account": { + "title": "Compte", + "subtitle": "Gerez les informations et preferences de votre compte.", + "changePassword": "Changer le mot de passe", + "changePasswordDesc": "Mettez a jour votre mot de passe pour securiser votre compte.", + "currentPassword": "Mot de passe actuel", + "currentPasswordPlaceholder": "Entrez votre mot de passe actuel", + "newPassword": "Nouveau mot de passe", + "newPasswordPlaceholder": "Entrez votre nouveau mot de passe", + "confirmNewPassword": "Confirmer le nouveau mot de passe", + "confirmNewPasswordPlaceholder": "Confirmez votre nouveau mot de passe", + "passwordMinLength": "Doit contenir au moins 8 caracteres", + "changePasswordButton": "Changer le mot de passe", + "changing": "Modification...", + "emailAddress": "Adresse e-mail", + "emailAddressDesc": "Mettez a jour votre adresse e-mail. Un e-mail de verification sera envoye pour confirmation.", + "currentEmail": "E-mail actuel", + "noEmailOnRecord": "Pas d'e-mail enregistre", + "newEmailAddress": "Nouvelle adresse e-mail", + "newEmailPlaceholder": "Entrez votre nouvelle adresse e-mail", + "confirmWithPassword": "Confirmer avec le mot de passe", + "passwordPlaceholder": "Entrez votre mot de passe actuel", + "sendVerificationEmail": "Envoyer l'e-mail de verification", + "sending": "Envoi...", + "preferences": "Preferences", + "preferencesDesc": "Personnalisez vos preferences de compte et parametres de notification.", + "language": "Langue", + "theme": "Theme", + "timezone": "Fuseau horaire", + "light": "Clair", + "dark": "Sombre", + "system": "Systeme", + "notifications": "Notifications", + "emailNotifications": "Notifications par e-mail", + "emailNotificationsDesc": "Recevoir des notifications par e-mail pour les mises a jour importantes", + "inAppNotifications": "Notifications dans l'application", + "inAppNotificationsDesc": "Afficher les notifications dans l'application", + "reset": "Reinitialiser", + "saveChanges": "Enregistrer les modifications", + "saving": "Enregistrement...", + "passwordChangedSuccess": "Mot de passe change avec succes", + "preferencesUpdatedSuccess": "Preferences mises a jour avec succes", + "failedChangePassword": "Echec du changement de mot de passe", + "failedUpdatePreferences": "Echec de la mise a jour des preferences", + "failedLoadPreferences": "Echec du chargement des preferences.", + "verificationEmailSent": "E-mail de verification envoye! Veuillez verifier votre nouvel e-mail pour confirmer.", + "failedRequestEmailChange": "Echec de la demande de changement d'e-mail", + "enterCurrentPassword": "Veuillez entrer votre mot de passe actuel", + "enterNewPassword": "Veuillez entrer un nouveau mot de passe", + "newPasswordMinLength": "Le nouveau mot de passe doit contenir au moins 8 caracteres", + "passwordsDoNotMatch": "Les mots de passe ne correspondent pas", + "enterNewEmail": "Veuillez entrer une nouvelle adresse e-mail", + "enterValidEmail": "Veuillez entrer une adresse e-mail valide", + "enterPasswordConfirm": "Veuillez entrer votre mot de passe pour confirmer" + }, + "preferences": { + "title": "Preferences", + "subtitle": "Gerez vos preferences personnelles et parametres de notification.", + "notificationChannels": "Canaux de notification", + "notificationChannelsDesc": "Choisissez comment vous souhaitez recevoir les notifications.", + "emailNotificationsLabel": "Notifications par e-mail", + "emailNotificationsDesc": "Recevoir les notifications par e-mail", + "inAppNotificationsLabel": "Notifications dans l'application", + "inAppNotificationsDesc": "Afficher les notifications dans l'application", + "browserPush": "Notifications push du navigateur", + "pushUnsupported": "Votre navigateur ne supporte pas les notifications push", + "pushBlocked": "Bloque par le navigateur. Activez dans les parametres du site.", + "pushSubscribed": "Abonne — vous recevrez des notifications navigateur", + "pushNotSubscribed": "Recevoir des notifications meme lorsque l'onglet est ferme", + "pushEnable": "Activer", + "pushDisable": "Desactiver", + "doNotDisturb": "Ne pas deranger", + "doNotDisturbDesc": "Definissez des heures silencieuses pendant lesquelles vous ne souhaitez pas etre derange.", + "enableDnd": "Activer Ne pas deranger", + "dndDesc": "Desactiver les notifications pendant des heures specifiques", + "startTime": "Heure de debut", + "endTime": "Heure de fin", + "notificationCategories": "Categories de notification", + "notificationCategoriesDesc": "Choisissez les types de notifications que vous souhaitez recevoir.", + "securityAlerts": "Alertes de securite", + "securityAlertsDesc": "Mises a jour et alertes de securite importantes", + "productUpdates": "Mises a jour produit", + "productUpdatesDesc": "Nouvelles fonctionnalites et annonces produit", + "marketingPromotions": "Marketing & Promotions", + "marketingDesc": "Conseils, offres et contenus promotionnels", + "developmentActivity": "Activite de developpement", + "developmentActivityDesc": "Controlez les notifications pour l'activite de revue de code et de collaboration.", + "issuesActivity": "Issues", + "issuesActivityDesc": "Ouvertes, fermees, assignees ou commentees", + "pullRequestsActivity": "Pull Requests", + "prActivityDesc": "Revue demandee, approuvee, fusionnee ou commentee", + "mentionsActivity": "@Mentions", + "mentionsActivityDesc": "Quand quelqu'un vous mentionne dans un message, issue ou PR", + "roomMessagesActivity": "Messages de salon", + "roomMessagesDesc": "Nouveaux messages dans les chaines auxquelles vous etes abonne" + }, + "security": { + "title": "Securite", + "subtitle": "Gerez vos parametres de securite et methodes d'authentification.", + "securitySettings": "Parametres de securite", + "securityDesc": "Configurez l'authentification a deux facteurs, les politiques de mot de passe et la gestion des sessions.", + "twoFactorAuth": "Authentification a deux facteurs", + "twoFactorDesc": "Ajoutez une couche de securite supplementaire requiring plus qu'un simple mot de passe pour vous connecter.", + "enable": "Activer", + "disable": "Desactiver", + "passwordPolicy": "Politique de mot de passe", + "passwordPolicyDesc": "Definissez les exigences de force du mot de passe", + "standard": "Standard", + "sessionManagement": "Gestion des sessions", + "sessionManagementDesc": "Voir et gerer les sessions actives", + "active": "actif", + "manage": "Gerer" + }, + "profile": { + "title": "Profil", + "subtitle": "Gerez vos informations personnelles et parametres de profil.", + "profileInfo": "Informations du profil", + "profileInfoDesc": "Voir vos informations de base du compte.", + "username": "Nom d'utilisateur", + "displayName": "Nom d'affichage", + "notSet": "Non defini", + "email": "E-mail", + "memberSince": "Membre depuis", + "publicProfile": "Profil public", + "publicProfileDesc": "Mettez a jour vos informations de profil public.", + "publicAvatar": "Avatar public", + "uploadAvatar": "Telecharger un nouvel avatar", + "avatarFormat": "JPG, GIF ou PNG. Taille max 2Mo.", + "bio": "Bio", + "bioPlaceholder": "Parlez-nous de vous", + "bioDesc": "Votre bio ou description", + "organization": "Organisation", + "orgPlaceholder": "Votre entreprise ou organisation", + "orgDesc": "L'organisation a laquelle vous appartenez", + "reset": "Reinitialiser", + "saveChanges": "Enregistrer les modifications", + "saving": "Enregistrement...", + "avatarUploaded": "Avatar telecharge avec succes", + "failedUploadAvatar": "Echec du telechargement de l'avatar", + "fileSizeLimit": "La taille du fichier doit etre inferieure a 2Mo", + "profileUpdated": "Profil mis a jour avec succes", + "failedUpdateProfile": "Echec de la mise a jour du profil" + }, + "tokens": { + "title": "Jetons", + "subtitle": "Gerez vos jetons d'acces personnel pour l'acces API.", + "createToken": "Creer un jeton", + "personalAccessTokens": "Jetons d'acces personnel", + "noTokensDesc": "Aucun jeton trouve. Creez un nouveau jeton pour commencer.", + "tokensCount": "Vous avez {count} jeton d'acces configure.", + "tokensCountPlural": "Vous avez {count} jetons d'acces configures.", + "loadingTokens": "Chargement des jetons d'acces...", + "noAccessTokens": "Aucun jeton d'acces", + "noAccessTokensDesc": "Creez un jeton d'acces personnel pour authentifier les requetes API et acceder aux depots Git via HTTPS.", + "createFirstToken": "Creez votre premier jeton", + "untitled": "Sans titre", + "revoked": "Revoque", + "scopes": "Portees:", + "created": "Cree le {date}", + "expires": "Expire le {date}", + "neverExpires": "N'expire jamais", + "revoke": "Revoquer", + "createAccessToken": "Creer un jeton d'acces", + "createTokenDesc": "Creez un nouveau jeton d'acces personnel pour l'authentification API.", + "tokenName": "Nom du jeton", + "tokenNamePlaceholder": "ex., Pipeline CI/CD, Environnement de developpement", + "tokenNameDesc": "Choisissez un nom descriptif pour ce jeton", + "scopesLabel": "Portees", + "scopesDesc": "Selectionnez les permissions de ce jeton", + "expirationDate": "Date d'expiration (Optionnel)", + "expirationDesc": "Laissez vide pour pas d'expiration", + "cancel": "Annuler", + "creating": "Creation...", + "tokenCreated": "Jeton cree avec succes", + "tokenCreatedDesc": "Assurez-vous de copier votre jeton d'acces maintenant. Vous ne pourrez plus le voir!", + "yourAccessToken": "Votre jeton d'acces", + "tokenImportant": "Important: Ce jeton ne sera montre qu'une seule fois. Stockez-le en securite.", + "iHaveSavedToken": "J'ai enregistre mon jeton", + "tokenCopied": "Jeton copie dans le presse-papiers", + "deleteTokenTitle": "Supprimer le jeton d'acces", + "deleteTokenDesc": "Etes-vous sur de vouloir supprimer ce jeton d'acces? Cette action est irreversible et toute application utilisant ce jeton perdra immediatement l'acces.", + "deleting": "Suppression...", + "delete": "Supprimer", + "revokeTokenTitle": "Revoquer le jeton d'acces", + "revokeTokenDesc": "Etes-vous sur de vouloir revoker ce jeton d'acces? Le jeton sera desactive immediatement et ne pourra plus etre utilise pour l'authentification.", + "tokenCreatedSuccess": "Jeton d'acces cree avec succes", + "failedCreateToken": "Echec de la creation du jeton", + "tokenDeleted": "Jeton d'acces supprime avec succes", + "failedDeleteToken": "Echec de la suppression du jeton", + "nameRequired": "Veuillez entrer un nom pour le jeton d'acces", + "scopeRequired": "Veuillez selectionner au moins une portee" + }, + "activity": { + "title": "Activite", + "subtitle": "Voir votre activite recente et vos notifications.", + "markAllRead": "Tout marquer comme lu", + "recentNotifications": "Notifications recentes", + "unread": "{count} non lues", + "noNotifications": "Pas encore de notifications. Votre activite apparaitra ici.", + "newLabel": "Nouveau", + "noContent": "Pas de contenu", + "unknownDate": "Date inconnue", + "allMarkedRead": "Toutes les notifications marquees comme lues", + "failedMarkAllRead": "Echec du marquage de toutes les notifications comme lues", + "markedRead": "Notification marquee comme lue", + "failedMarkRead": "Echec du marquage de la notification comme lue" + } + }, + "init": { + "project": { + "title": "Creer un nouveau projet", + "subtitle": "Creez un nouveau projet pour organiser vos depots", + "projectName": "Nom du projet", + "namePlaceholder": "mon-super-projet", + "description": "Description", + "descPlaceholder": "Une breve description de votre projet...", + "workspace": "Workspace", + "noWorkspace": "Pas de workspace (projet independant)", + "workspaceHint": "Associez facultativement ce projet a un workspace.", + "publicProject": "Projet public", + "publicProjectHint": "Rendre ce projet visible par tous", + "creating": "Creation...", + "createProject": "Creer le projet", + "cancel": "Annuler", + "nameRequired": "Le nom du projet est requis", + "nameAvailable": "Le nom du projet est disponible", + "nameExists": "Le nom du projet existe deja", + "failedCheckAvailability": "Echec de la verification de disponibilite", + "failedCreate": "Echec de la creation du projet", + "createdSuccess": "Projet cree avec succes!" + }, + "repository": { + "title": "Creer un nouveau depot", + "subtitle": "Creez un nouveau depot Git dans votre projet", + "project": "Projet", + "noProjects": "Vous n'avez pas encore de projets.", + "createProject": "Creer un projet", + "selectProject": "Selectionner un projet", + "loadingProjects": "Chargement des projets...", + "repoName": "Nom du depot", + "namePlaceholder": "mon-super-depot", + "description": "Description", + "descPlaceholder": "Une breve description de votre depot...", + "defaultBranch": "Branche par defaut", + "defaultBranchPlaceholder": "main", + "initRepo": "Initialiser le depot", + "initRepoOn": "Creer un depot git nu maintenant. Definissez la branche par defaut ci-dessous.", + "initRepoOff": "Passer l'initialisation. La branche par defaut sera definie automatiquement lors du push.", + "privateRepo": "Depot prive", + "privateAuto": "Ce depot doit etre prive car le projet est prive", + "privateManual": "Rendre ce depot prive et restreindre l'acces", + "creating": "Creation...", + "createRepo": "Creer le depot", + "cancel": "Annuler", + "selectProjectFirst": "Veuillez d'abord selectionner un projet", + "nameRequired": "Le nom du depot est requis", + "nameAvailable": "Le nom du depot est disponible", + "nameExists": "Le nom du depot existe deja", + "failedCheckAvailability": "Echec de la verification de disponibilite", + "failedCreate": "Echec de la creation du depot", + "createdSuccess": "Depot cree avec succes", + "failedLoadProjects": "Echec du chargement des projets", + "failedLoadDetails": "Depot cree mais echec du chargement des details" + } + }, + "pricing": { + "title": "Tarification simple et transparente.", + "subtitle": "Commencez gratuitement. Scalez selon la croissance de votre flotte d'agents.", + "free": "Gratuit", + "freePrice": "0 €", + "freePeriod": "pour toujours", + "freeDesc": "Command as Service pour les particuliers — commandes versionnees, memoire d'agent et registre de skills inclus.", + "freeCta": "Commencer gratuitement", + "freeFeatures": [ + "3 agents actifs", + "5 Go de memoire d'agent", + "Registre de skills communautaire", + "Salons publics", + "Historique de 7 jours" + ], + "pro": "Pro", + "proPrice": "29 €", + "proPeriod": "par mois", + "proDesc": "Command as Service pour les equipes — agents illimites, audit complet du flux de commandes et calcul prioritaire.", + "proCta": "Obtenir Pro", + "proFeatures": [ + "Agents illimites", + "50 Go de memoire d'agent", + "Registre de skills prive", + "Collaborative Rooms", + "Historique de 90 jours", + "Calcul prioritaire", + "Support par e-mail" + ], + "enterprise": "Enterprise", + "enterprisePrice": "Sur mesure", + "enterpriseDesc": "Command as Service a grande echelle — deploiement personnalise, gouvernance granulaire du flux de commandes et SLA dedie pour votre flotte d'agents.", + "enterpriseCta": "Contacter le service commercial", + "enterpriseFeatures": [ + "Tout de Pro", + "Memoire illimitee", + "SSO / SAML", + "Routage de modele personnalise", + "Calcul dedie", + "Garantie SLA", + "Support dedie" + ], + "faqHeading": "Questions frequentes", + "faqSubtitle": "Reponses aux questions de facturation.", + "faq1Q": "Puis-je changer de plan a tout moment?", + "faq1A": "Oui. Passez a un forfait superieur ou inferieur a tout moment. Les modifications prennent effet au prochain cycle de facturation.", + "faq2Q": "Qu'est-ce qui compte comme memoire d'agent?", + "faq2A": "La memoire d'agent est le contexte persistant total stocke sur tous vos agents, incluant l'historique de conversation et la memoire a long terme.", + "faq3Q": "Y a-t-il un essai gratuit pour Pro?", + "faq3A": "Oui — le forfait gratuit vous permet d'explorer toutes les fonctionnalites Pro pendant 14 jours lors de la mise a niveau." + }, + "repository": { + "list": { + "repositories": "Depots", + "searchPlaceholder": "Rechercher des depots…", + "filter": "Filtrer", + "new": "Nouveau", + "filters": "Filtres", + "clearAll": "Tout effacer", + "visibility": "Visibilite", + "all": "Tout", + "public": "Public", + "private": "Prive", + "sortBy": "Trier par", + "lastUpdated": "Derniere mise a jour", + "name": "Nom", + "linkedIssues": "Issues liees", + "stars": "Etoiles", + "repository": "depot", + "repositoriesPlural": "depots", + "errorLoading": "Erreur:", + "errorLoadFailed": "Echec du chargement des depots", + "noRepositories": "Aucun depot trouve", + "clearFilters": "Effacer les filtres", + "watches": "Abonnements", + "branches": "Branches", + "defaultBranch": "Branche par defaut", + "lastUpdatedColumn": "Derniere mise a jour", + "never": "Jamais", + "showing": "Affichage de {start}–{end} sur {total}", + "previous": "Precedent", + "next": "Suivant", + "page": "Page {page}" + }, + "overview": { + "repositoryStats": "Statistiques du depot", + "defaultBranch": "Branche par defaut", + "commits": "Commits", + "branches": "Branches", + "tags": "Tags", + "stars": "Etoiles", + "watchers": "Observateurs", + "readme": "README", + "starred": "En favori", + "unstarred": "Favori retire", + "watching": "S'abonner au depot", + "stoppedWatching": "Abonnement arrete", + "failedToStar": "Echec de l'ajout en favori", + "failedToUnstar": "Echec du retrait du favori", + "failedToWatch": "Echec de l'abonnement", + "failedToUnwatch": "Echec de l'arret de l'abonnement" + }, + "subpages": { + "commits": { + "title": "Commits", + "description": "Parcourez l'historique des commits de ce depot.", + "comingSoon": "Bientot disponible", + "notAvailable": "L'historique des commits n'est pas encore disponible." + }, + "branches": { + "title": "Branches", + "description": "Gerez et parcourez les branches du depot.", + "comingSoon": "Bientot disponible", + "notAvailable": "La liste et la gestion des branches ne sont pas encore disponibles." + }, + "tags": { + "title": "Tags", + "description": "Parcourez les tags et releases du depot.", + "comingSoon": "Bientot disponible", + "notAvailable": "La gestion des tags et releases n'est pas encore disponible." + }, + "files": { + "title": "Fichiers", + "description": "Parcourez et gerez les fichiers du depot.", + "comingSoon": "Bientot disponible", + "notAvailable": "Le navigateur de fichiers n'est pas encore disponible." + }, + "contributors": { + "title": "Contributeurs", + "description": "Voir les statistiques et l'activite des contributeurs.", + "comingSoon": "Bientot disponible", + "notAvailable": "Les statistiques des contributeurs ne sont pas encore disponibles." + }, + "pullRequests": { + "title": "Pull Requests", + "description": "Creez et gerez les pull requests pour {repo}.", + "comingSoon": "Bientot disponible", + "notAvailable": "La gestion des pull requests n'est pas encore disponible." + } + } + }, + "workspace": { + "projects": { + "title": "Projets", + "newProject": "Nouveau projet", + "noProjects": "Pas encore de projets dans ce workspace.", + "createFirstProject": "Creez votre premier projet", + "noDescription": "Pas de description", + "private": "Prive" + }, + "members": { + "title": "Membres", + "inviteMember": "Inviter un membre", + "inviteTo": "Inviter a {name}", + "inviteDescription": "Ils recevront un e-mail avec un lien pour rejoindre ce workspace. Les invitations expirent dans 7 jours.", + "emailAddress": "Adresse e-mail", + "emailPlaceholder": "collegue@exemple.fr", + "role": "Role", + "memberRoleDesc": "Membre — peut voir et contribuer aux projets", + "adminRoleDesc": "Admin — peut gerer les membres et les parametres", + "adminInfo": "Les admins peuvent gerer les parametres du workspace, les membres et la facturation.", + "memberInfo": "Les membres peuvent creer et gerer les projets assignes a ce workspace.", + "cancel": "Annuler", + "sendInvitation": "Envoyer l'invitation", + "sending": "Envoi...", + "pendingInvitations": "Invitations en attente", + "expires": "expire le {date}", + "by": "par @{username}", + "searchMembers": "Rechercher des membres...", + "allRoles": "Tous les roles", + "owner": "Proprietaire", + "admin": "Admin", + "member": "Membre", + "memberColumn": "Membre", + "roleColumn": "Role", + "invitedBy": "Invite par", + "joined": "Rejoint", + "noMatch": "Aucun membre ne correspond a vos filtres", + "noMembers": "Pas encore de membres", + "remove": "Supprimer", + "page": "Page {page} sur {totalPages}", + "totalMembers": "{count} membres au total", + "invitationSent": "Invitation envoyee a {email}", + "failedSendInvitation": "Echec de l'envoi de l'invitation", + "memberRemoved": "Membre supprime", + "failedRemoveMember": "Echec de la suppression du membre", + "invitationCancelled": "Invitation annulee", + "failedCancelInvitation": "Echec de l'annulation de l'invitation", + "roleUpdated": "Role mis a jour", + "failedUpdateRole": "Echec de la mise a jour du role", + "pending": "En attente" + }, + "settings": { + "title": "Parametres du Workspace", + "general": "General", + "avatarUrl": "URL de l'avatar", + "avatarUrlPlaceholder": "https://exemple.fr/avatar.png", + "avatarHint": "Entrez une URL vers une image pour l'avatar du workspace.", + "workspaceName": "Nom du Workspace", + "namePlaceholder": "Mon Workspace", + "description": "Description", + "descPlaceholder": "Decrivez ce workspace...", + "billingEmail": "E-mail de facturation", + "billingEmailPlaceholder": "facturation@exemple.fr", + "billingHint": "Les factures seront envoyees a cette adresse e-mail.", + "saveChanges": "Enregistrer les modifications", + "saving": "Enregistrement...", + "plan": "Plan", + "currentPlan": "Plan actuel", + "manageBilling": "Gerer la facturation", + "dangerZone": "Zone dangereuse", + "deleteWorkspace": "Supprimer le workspace", + "deleteWarning": "Supprimer definitivement ce workspace et toutes ses donnees. Cette action est irreversible.", + "deletingWorkspace": "Suppression...", + "deleteConfirm": "Etes-vous sur de vouloir supprimer ce workspace? Cette action est irreversible.", + "updated": "Workspace mis a jour", + "failedUpdate": "Echec de la mise a jour du workspace", + "deleted": "Workspace supprime", + "failedDelete": "Echec de la suppression du workspace" + } + }, + "projectSettings": { + "general": { + "title": "General", + "description": "Description", + "projectAvatar": "Avatar du projet", + "uploadAvatar": "Telecharger l'avatar", + "avatarFormat": "PNG, JPG, GIF ou WebP. Max 2Mo.", + "displayName": "Nom d'affichage", + "publicVisibility": "Visibilite publique", + "publicVisibilityDesc": "Permettre a tous de voir ce projet.", + "saveChanges": "Enregistrer les modifications", + "confirmTitle": "Confirmer les modifications du projet", + "confirmDescription": "Vous etes sur le point de mettre a jour les parametres suivants:", + "displayNameField": "Nom d'affichage", + "descriptionField": "Description", + "visibilityField": "Visibilite: {visibility}", + "publicWarning": "Rendre ce projet public permettra a chacun de voir son contenu.", + "confirmSave": "Confirmer et enregistrer", + "projectAvatarUpdated": "Avatar du projet mis a jour", + "failedUploadAvatar": "Echec du telechargement de l'avatar", + "fileSizeLimit": "La taille du fichier doit etre inferieure a 2Mo", + "projectSettingsUpdated": "Parametres du projet mis a jour", + "failedUpdateProject": "Echec de la mise a jour des parametres du projet" + }, + "members": { + "title": "Membres", + "invite": "Inviter", + "searchMembers": "Rechercher des membres…", + "member": "membre", + "members": "membres", + "noMatchSearch": "Aucun membre ne correspond a votre recherche", + "noMembers": "Aucun membre trouve", + "clearSearch": "Effacer la recherche", + "user": "Utilisateur", + "role": "Role", + "joined": "Rejoint", + "actions": "Actions", + "inviteMemberTitle": "Inviter un membre", + "email": "E-mail", + "emailPlaceholder": "collegue@exemple.fr", + "cancel": "Annuler", + "sendInvite": "Envoyer l'invitation", + "sending": "Envoi…", + "removeMemberTitle": "Supprimer le membre", + "removeConfirm": "Etes-vous sur de vouloir supprimer {username} de ce projet?", + "removing": "Suppression…", + "remove": "Supprimer", + "invitationSent": "Invitation envoyee", + "failedSendInvitation": "Echec de l'envoi de l'invitation", + "memberRemoved": "Membre supprime", + "failedRemoveMember": "Echec de la suppression du membre", + "roleUpdated": "Role mis a jour", + "failedUpdateRole": "Echec de la mise a jour du role", + "emailRequired": "L'e-mail est requis", + "errorLoading": "Erreur:", + "failedLoadMembers": "Echec du chargement des membres" + }, + "labels": { + "title": "Labels", + "description": "Description", + "editLabel": "Modifier le label", + "createLabel": "Creer un label", + "nameRequired": "Nom *", + "namePlaceholder": "Nom du label", + "color": "Couleur", + "descPlaceholder": "Decrivez ce label", + "cancel": "Annuler", + "updateLabel": "Mettre a jour le label", + "createLabelButton": "Creer le label", + "addLabel": "Ajouter un label", + "failedToLoad": "Echec du chargement des labels", + "noLabels": "Aucun label trouve. Creez votre premier label.", + "deleteLabelTitle": "Supprimer le label", + "deleteLabelConfirm": "Etes-vous sur de vouloir supprimer ce label? Cette action est irreversible.", + "delete": "Supprimer", + "labelCreated": "Label cree", + "labelUpdated": "Label mis a jour", + "labelDeleted": "Label supprime", + "failedCreateLabel": "Echec de la creation du label", + "failedUpdateLabel": "Echec de la mise a jour du label", + "failedDeleteLabel": "Echec de la suppression du label", + "nameRequiredError": "Le nom du label est requis" + }, + "boards": { + "title": "Tableaux", + "newBoard": "Nouveau tableau", + "noBoards": "Pas encore de tableaux", + "noBoardsHint": "Creez un tableau pour organiser le travail de votre projet.", + "newBoardDialog": "Nouveau tableau", + "name": "Nom", + "namePlaceholder": "ex. Planification Sprint", + "description": "Description", + "descriptionPlaceholder": "Optionnel", + "cancel": "Annuler", + "createBoard": "Creer le tableau", + "updated": "Mis a jour le {date}", + "failedCreate": "Echec de la creation du tableau" + }, + "billing": { + "currentBilling": "Facturation actuelle", + "description": "Quota, utilisation et solde du cycle actuel.", + "monthlyQuota": "Quota mensuel", + "currentBalance": "Solde actuel", + "currentUsage": "Utilisation actuelle", + "billingHistory": "Historique de facturation", + "billingHistoryDesc": "Enregistrements du flux de facturation du projet.", + "noRecords": "Pas encore d'enregistrements de facturation.", + "time": "Heure", + "reason": "Raison", + "amount": "Montant", + "currency": "Devise", + "type": "Type", + "charge": "Debit", + "credit": "Credit", + "showing": "Affichage de {start} a {end} sur {total} enregistrements", + "page": "Page {page} sur {totalPages}", + "failedToLoad": "Echec du chargement des informations de facturation." + }, + "skills": { + "title": "Skills", + "subtitle": "Instructions d'agent pour ce projet", + "searchPlaceholder": "Rechercher des skills...", + "all": "Tout", + "manual": "Manuel", + "repo": "Depot", + "scanRepos": "Scanner les depots", + "addSkill": "Ajouter un skill", + "noSkills": "Aucun skill trouve", + "noSkillsHint": "Ajoutez des skills manuellement ou scannez les depots pour decouvrir les fichiers SKILL.md.", + "noMatch": "Aucun skill ne correspond a votre recherche ou filtre.", + "deleteSkill": "Supprimer le skill", + "deleteConfirm": "Etes-vous sur de vouloir supprimer \"{name}\"? Cette action est irreversible.", + "cancel": "Annuler", + "delete": "Supprimer", + "content": "Contenu", + "moreLines": "+{count} lignes supplementaires", + "copied": "Copie", + "copyContent": "Copier le contenu", + "scannedFromRepo": "Scanne depuis le depot", + "addedManually": "Ajoute manuellement", + "failedLoad": "Echec du chargement des skills", + "scanSuccess": "Depots scannes avec succes", + "scanFailed": "Echec du scan des depots", + "deleted": "\"{name}\" supprime", + "failedDelete": "Echec de la suppression du skill" + }, + "webhook": { + "title": "Webhooks", + "description": "Configurez les webhooks pour recevoir des notifications sur les evenements de votre projet.", + "comingSoon": "Bientot disponible", + "notAvailable": "La configuration des webhooks n'est pas encore disponible." + }, + "oauth": { + "title": "Application OAuth", + "description": "Creez et gerez des applications OAuth pour les integrations tierces.", + "comingSoon": "Bientot disponible", + "notAvailable": "La gestion des applications OAuth n'est pas encore disponible." + } + }, + "shared": { + "projects": "Projets", + "loading": "Chargement...", + "error": "Erreur", + "success": "Succes", + "cancel": "Annuler", + "confirm": "Confirmer", + "delete": "Supprimer", + "edit": "Modifier", + "save": "Enregistrer", + "close": "Fermer", + "back": "Retour", + "next": "Suivant", + "previous": "Precedent", + "submit": "Soumettre", + "search": "Rechercher", + "filter": "Filtrer", + "clear": "Effacer", + "reset": "Reinitialiser", + "apply": "Appliquer", + "yes": "Oui", + "no": "Non", + "ok": "OK", + "retry": "Reessayer", + "refresh": "Actualiser", + "noData": "Pas de donnees", + "noResults": "Aucun resultat", + "loadingFailed": "Echec du chargement", + "operationFailed": "Operation echouee", + "operationSuccess": "Operation reussie" + }, + "about": { + "title": "A propos de GitDataAI", + "subtitle": "Nous croyons que chaque action d'ingenierie devrait etre une commande versionnee — auditable, repeatable et approuvee par l'homme. Nous construisons la plateforme Command as Service pour l'ere des agents.", + "quote": "\"Chaque action est une commande. Chaque commande est versionnee et auditable.\"", + "mission": "GitDataAI a ete fondee pour apporter Command as Service a l'ere des agents — chaque decision d'agent versionnee, chaque flux de commandes auditable, chaque action humain-dans-la-boucle approuvee.", + "ourValues": "Nos valeurs", + "values": { + "transparency": { + "title": "Transparence", + "desc": "Chaque decision d'agent est journalisee, versionnee et auditable. Pas de boite noire." + }, + "collaboration": { + "title": "Collaboration", + "desc": "Les humains et les agents sont des pairs. Aucun ne remplace l'autre — ensemble ils accomplissent plus." + }, + "reliability": { + "title": "Fiabilite", + "desc": "Infrastructure de qualite production. Vos agents fonctionnent quand vous en avez besoin." + }, + "extensibility": { + "title": "Extensibilite", + "desc": "Registre ouvert, API ouverte. Le reseau grandit grace aux contributions de la communaute." + } + }, + "theTeam": "L'equipe", + "hiring": "Nous recrutons. Venez construire avec nous.", + "join": "Rejoindre GitDataAI", + "github": "GitHub" + }, + "invitations": { + "title": "Mes invitations", + "pendingCount": "{count} invitation en attente", + "pendingCountPlural": "{count} invitations en attente", + "noPending": "Pas d'invitation en attente", + "noPendingHint": "Les invitations de projet et workspace apparaitront ici.", + "projectInvitation": "Invitation projet", + "workspaceInvitation": "Invitation workspace", + "invitedToJoin": "Vous avez ete invite a rejoindre {name}", + "invitedToWorkspace": "Vous avez ete invite a rejoindre le workspace {name}", + "by": "par {username}", + "accept": "Accepter", + "decline": "Refuser", + "acceptedProject": "Vous avez rejoint le projet: {name}", + "declinedInvitation": "Invitation a {name} refusee", + "acceptedWorkspace": "Vous avez rejoint le workspace", + "failedAccept": "Echec de l'acceptation de l'invitation", + "failedDecline": "Echec du refus de l'invitation" + }, + "network": { + "title": "Le reseau GitDataAI", + "subtitle": "Un ecosysteme croissant d'agents, workspaces et skills collaborant via un flux de commandes unifie. Chaque action d'agent est une commande. Chaque commande est repeatable.", + "activeAgents": "Agents actifs", + "workspaces": "Workspaces", + "skillRuns": "Executions de skills", + "uptimeSla": "SLA de disponibilite", + "publicRooms": "Salons publics", + "live": "EN DIRECT", + "active": "Actif", + "agents": "{count} agents", + "participants": "{count}", + "privacyByDefault": "Prive par defaut", + "privacyDesc": "Tous les workspaces sont prives par defaut. Vous controlez qui voit vos agents, skills et historique de conversation. Les salons publics necessitent un opt-in explicite.", + "network": "Reseau", + "roomsLive": "{count} salons en direct", + "ended": "TERMINE", + "startYourOwnRoom": "Lancez votre propre salon" + }, + "skills": { + "title": "Le registre de Skills", + "subtitle": "Comportements d'agent reutilisables et versionnes, conditionnes en skills — invoques par commande, deployes sur toute votre flotte d'agents.", + "searchPlaceholder": "Rechercher des skills...", + "categories": [ + "Tout", + "Frontend", + "Backend", + "DevOps", + "Securite", + "Donnees", + "Tests" + ], + "publishCTA": "Publiez votre propre skill et rejoignez le registre.", + "publishButton": "Publier un skill", + "runs": "{count} executions" + }, + "solutions": { + "title": "Command as Service", + "subtitle": "Dans GitDataAI, chaque action est une commande de premiere classe. Les commandes sont versionnees, auditables et composables — votre workflow de developpement est votre API.", + "learnMore": "En savoir plus", + "coreConcept": "Concept central" + }, + "notificationDrawer": { + "title": "Notifications", + "live": "En direct", + "markAllRead": "Tout marquer comme lu", + "noNotifications": "Pas encore de notifications", + "noNotificationsHint": "Vous verrez les mises a jour ici lorsqu'un evenement se produit.", + "viewAll": "Voir toutes les notifications", + "unread": "{count} non lues", + "notifications": "Notifications" + } +}