{
  "common": {
    "cancel": "Cancel",
    "ok": "OK",
    "save": "Save",
    "delete": "Delete",
    "edit": "Edit",
    "change": "Change…",
    "loading": "Loading…",
    "saving": "Saving…",
    "clear": "Clear",
    "selectAll": "Select all",
    "revealInFinder": "Reveal in Finder",
    "dash": "—",
    "apply": "Apply",
    "dismiss": "Dismiss",
    "close": "Close",
    "remove": "Remove",
    "noCover": "No cover"
  },
  "appearance": {
    "panels": "Panels",
    "panelOpacity": "Panel opacity",
    "panelOpacityHint": "Lower = more of the backdrop shows through the cards.",
    "background": "Background",
    "asciiRain": "ASCII glyph rain",
    "asciiRainDesc": "Ambient monochrome character field behind the panels.",
    "enableBackdrop": "Enable ASCII backdrop",
    "intensity": "Intensity",
    "backdropIntensity": "Backdrop intensity",
    "speed": "Speed",
    "backdropSpeed": "Backdrop speed"
  },
  "producers": {
    "title": "Producers",
    "empty": "No producers yet. Click + Add producer to pre-register names, or they'll appear here as soon as you set Producer on a track.",
    "namePlaceholder": "Producer name",
    "newNameAria": "New producer name",
    "add": "Add producer",
    "legend": "Dashed-outline chips are names you added here but no track uses yet. Solid chips are in use on at least one track — removing them clears the name from every track.",
    "starHint": "Click ★ to mark yourself as the primary producer — it sorts first when exporting {{prod}}.",
    "removeConfirm": "Remove \"{{name}}\"{{suffix}}?",
    "removeSuffixEveryTrack": " from every track",
    "exists": "\"{{name}}\" already exists.",
    "setPrimaryAriaSet": "Set {{name}} as primary",
    "setPrimaryAriaUnset": "Unset {{name}} as primary",
    "primaryTooltipSet": "Primary (click to unset)",
    "primaryTooltipUnset": "Set as primary",
    "removeFailed": "Failed to remove \"{{name}}\": {{error}}",
    "setPrimaryFailed": "Failed to set primary: {{error}}",
    "addFailed": "Add failed: {{error}}"
  },
  "licenseTiers": {
    "defaultTitle": "Default license tiers",
    "defaultDesc": "Applied to every newly-created track. Empty rows are skipped. Existing tracks are not touched when you change these.",
    "addCustom": "Add custom tier",
    "freeDefaultAria": "New tracks free by default",
    "freeDefaultLabel": "New tracks free by default (auto-adds the [FREE] prefix + ticks \"free to use\" on NetEase)",
    "tierNamePlaceholder": "Tier name (e.g. MIDI)",
    "tierNameAria": "Tier name",
    "priceAria": "{{code}} price",
    "thirdCurrencyAria": "Third currency",
    "otherCurrencyPriceAria": "Other currency price",
    "shareAria": "Share %",
    "freeLabel": "Free (FREE)",
    "freeTitle": "Enables [FREE] prefix in beat name and free-use on NetEase export",
    "freeAria": "Free non-commercial license (FREE)",
    "setFreeFailed": "Set free failed: {{error}}",
    "removeAria": "Remove default tier",
    "savedAt": "Saved {{time}}",
    "saveFailed": "Save defaults failed: {{error}}",
    "deleteTier": "Delete tier",
    "saveEnter": "Save (Enter)",
    "cancelEsc": "Cancel (Esc)",
    "saveTier": "Save tier",
    "sectionTitle": "License Tiers",
    "addTier": "Add tier",
    "saveTierFailed": "Save tier failed: {{error}}",
    "deleteTierFailed": "Delete tier failed: {{error}}",
    "addPresetTierFailed": "Add {{preset}} tier failed: {{error}}",
    "addTierFailed": "Add tier failed: {{error}}",
    "tierNameRequired": "Tier name is required.",
    "tierIsPreset": "\"{{name}}\" is a preset — fill the row above instead.",
    "tierAlreadyExists": "A \"{{name}}\" tier already exists."
  },
  "uploadTemplates": {
    "title": "Upload templates",
    "desc": "When sending to a platform's upload page, these templates generate the album name / beat name / beat description. Placeholders:",
    "albumName": "Album name template",
    "beatName": "Beat name template",
    "beatDesc": "Beat description template",
    "albumDesc": "Album description template",
    "producerJoiner": "Producer joiner",
    "freePrefix": "Free prefix (only emitted at {free} for free tracks)",
    "freePrefixAria": "Free prefix",
    "resetDefaults": "Reset to defaults"
  },
  "banner": {
    "autoApprove": {
      "message": "Agent auto-approve is ON — MCP write tools apply without asking.",
      "dismiss": "Turn off"
    }
  },
  "ai": {
    "title": "AI Integration",
    "desc": "Lets Claude Desktop and other AI clients read your BeatOS library over MCP. Read-only in v0.0.20.",
    "status": "Status",
    "available": "● Available",
    "testing": "Testing…",
    "testConnection": "Test connection",
    "connectionOk": "✓ Connection OK · {{count}} tools",
    "connectionErr": "✗ {{error}}",
    "database": "Database",
    "copyPath": "Copy path",
    "claudeConfig": "Claude Desktop configuration",
    "copyJson": "Copy JSON",
    "toolsList": "Tools ({{count}}): {{list}}"
  },
  "editor": {
    "loading": "Loading…",
    "analyzeTitleNeedsAudio": "Attach audio first",
    "analyzeTitle": "Analyze BPM and Key",
    "analyzing": "Analyzing…",
    "analyze": "Analyze audio",
    "exportTitle": "Export metadata to platform",
    "export": "Export metadata",
    "fieldTitle": "Title",
    "notes": "Notes",
    "tags": "Tags (comma-separated)",
    "genre": "Genre",
    "genres": "Genres",
    "addGenre": "Add genre...",
    "mood": "Mood",
    "moods": "Moods",
    "addMood": "Add mood...",
    "producer": "Producer",
    "producers": "Producers",
    "addProducer": "Add producer...",
    "titleRequired": "Title required to save",
    "saveFailed": "Save failed — retry",
    "saved": "Saved · {{time}}"
  },
  "dialogs": {
    "bulkEdit": {
      "modeAdd": "Add",
      "modeReplace": "Replace",
      "modeRemove": "Remove",
      "title": "Bulk edit {{count}} track",
      "title_other": "Bulk edit {{count}} tracks",
      "desc": "Empty fields are left unchanged.",
      "applyDefaultTiers": "Apply default license tiers",
      "apply": "Apply to {{count}} track",
      "apply_other": "Apply to {{count}} tracks",
      "updated": "Updated {{count}} track",
      "updated_other": "Updated {{count}} tracks",
      "failed": "Bulk edit failed",
      "licenseApplied": "Applied license to {{count}} track",
      "licenseApplied_other": "Applied license to {{count}} tracks",
      "licenseFailed": "Apply license template failed (did you configure default tiers in Settings?)"
    },
    "export": {
      "copyAria": "Copy",
      "failed": "Export failed",
      "title": "Export metadata",
      "desc": "Copy field by field into the platform upload form.",
      "platformAria": "Platform",
      "proLocked": "Pro feature · purchase to unlock",
      "publish": "Publish to platform"
    },
    "playlistExport": {
      "manifestFailed": "Could not read the playlist file manifest",
      "title": "Export playlist \"{{name}}\"",
      "desc": "Pick files to package, foldered by track. Package as a ZIP or copy straight to a folder.",
      "modeZip": "ZIP archive",
      "modeCopy": "Copy to folder",
      "bulk": "Bulk",
      "loading": "Loading…",
      "emptyList": "The playlist is empty.",
      "noFiles": "No files",
      "missing": "(missing)",
      "selected": "{{count}} file selected",
      "selected_other": "{{count}} files selected",
      "submit": "Choose location & export",
      "exportFailed": "Export failed: {{error}}",
      "exported": "Exported {{count}} file",
      "exported_other": "Exported {{count}} files",
      "skipped": " (skipped {{count}} missing)"
    },
    "analyzeResult": {
      "title": "Audio Analysis Results",
      "desc": "Select which detected values to apply to the track.",
      "replaceExisting": "Replace existing values",
      "lowConfidence": "⚠ Low "
    },
    "import": {
      "titleOne": "Import \"{{name}}\"",
      "titleMany": "Import {{count}} audio files",
      "where": "Where",
      "createNew": "Create {{count}} new track",
      "createNew_other": "Create {{count}} new tracks",
      "attachTo": "Attach to \"{{title}}\" (replaces existing role)",
      "attachMultiple": "Attach to selected — pick one file at a time",
      "attachNone": "Attach to selected — no track focused",
      "role": "Role",
      "tagged": "Tagged",
      "untagged": "Untagged",
      "import": "Import",
      "attachFailed": "Attach failed: {{errors}}",
      "attached": "Attached {{tag}} audio to \"{{title}}\"",
      "imported": "Imported {{count}} track ({{tag}})",
      "imported_other": "Imported {{count}} tracks ({{tag}})",
      "partial": "Imported {{created}}/{{total}} — {{failed}} failed"
    }
  },
  "contextMenu": {
    "edit": "Edit",
    "addToList": "Add to list",
    "removeFromList": "Remove from this list",
    "revealInFinder": "Reveal in Finder",
    "exportToPlatform": "Export to platform…",
    "delete": "Delete",
    "deleteConfirm": "Delete \"{{title}}\"?",
    "rename": "Rename"
  },
  "analysis": {
    "progress": "Analyzing {{done}}/{{total}}",
    "done": "Done {{done}}/{{total}} — filled BPM {{bpm}}, Key {{key}}"
  },
  "player": {
    "decodeFailedToast": "Playback failed (decode). Click play to retry.",
    "previous": "Previous",
    "retry": "Retry",
    "pause": "Pause",
    "play": "Play",
    "retryTitle": "Playback failed — click to retry",
    "next": "Next",
    "shuffle": "Shuffle",
    "repeat": "Repeat",
    "unmute": "Unmute",
    "mute": "Mute",
    "volume": "Volume",
    "seek": "Seek"
  },
  "topbar": {
    "goAllBeats": "Go to All Beats",
    "back": "Back"
  },
  "bulkBar": {
    "selected": "{{count}} selected",
    "clearSelection": "Clear selection",
    "clearEsc": "Clear (Esc)"
  },
  "sidebar": {
    "expand": "Expand sidebar",
    "collapse": "Collapse sidebar",
    "library": "Library",
    "allBeats": "All Beats",
    "trash": "Trash",
    "addList": "Add List",
    "newPlaylist": "New playlist",
    "listNamePlaceholder": "List name",
    "deleteListConfirm": "Delete List \"{{name}}\"?",
    "devGithubAria": "Open developer GitHub profile in browser",
    "devGithubTitle": "Developer — open GitHub profile",
    "publishCenterLocked": "Publish Center is a BeatOS Pro feature — install the Pro module to enable it.",
    "lists": "Lists",
    "listSubtitle": "Playlist · {{count}} track",
    "listSubtitle_other": "Playlist · {{count}} tracks",
    "deleteListDesc": "The list is removed but member tracks stay in your library.",
    "publishCenter": "Publish Center",
    "settings": "Settings",
    "agentActions": "Agent Actions",
    "resizeSidebar": "Resize sidebar"
  },
  "projectFolder": {
    "label": "Project folder",
    "choose": "+ Choose folder",
    "openTitle": "Open {{path}}",
    "change": "Change",
    "clearAria": "Clear project folder",
    "openFailed": "Could not open folder: {{error}}"
  },
  "trash": {
    "title": "Trash",
    "empty": "Trash is empty.",
    "restore": "Restore",
    "deleteForever": "Delete forever",
    "emptyAll": "Empty trash",
    "trashedPrefix": "Trashed",
    "count": "{{count}} trashed track",
    "count_other": "{{count}} trashed tracks",
    "restored": "Restored {{count}} track",
    "restored_other": "Restored {{count}} tracks",
    "deleted": "Permanently deleted {{count}} track",
    "deleted_other": "Permanently deleted {{count}} tracks",
    "emptied": "Emptied trash ({{count}} track)",
    "emptied_other": "Emptied trash ({{count}} tracks)",
    "deleteOneConfirm": "Delete \"{{name}}\" forever? This cannot be undone.",
    "deleteManyConfirm": "Delete {{count}} tracks forever? This cannot be undone.",
    "deleteAllConfirm": "Permanently delete ALL {{count}} trashed track? This cannot be undone.",
    "deleteAllConfirm_other": "Permanently delete ALL {{count}} trashed tracks? This cannot be undone."
  },
  "settings": {
    "title": "Settings",
    "groups": { "appearance": "Appearance", "beatsUpload": "Beats & Upload", "general": "General" },
    "language": {
      "title": "Language",
      "desc": "Application interface language. Genre/mood tag values are unaffected — set those under Tag display."
    },
    "tagDisplay": {
      "title": "Tag display",
      "desc": "Display language for genre and mood options across the editor, filters, and track list. Stored values are unaffected.",
      "bilingual": "Bilingual"
    },
    "agentPermissions": {
      "title": "Agent permissions",
      "desc": "Controls how MCP write tools are gated when an AI agent connects.",
      "confirm": "Confirm every action",
      "confirmDesc": "Each agent write requires your approval in Agent Actions.",
      "autoApprove": "Auto-approve all",
      "autoApproveDesc": "Agent writes apply immediately without asking.",
      "readOnly": "Read-only",
      "readOnlyDesc": "Agent writes are refused; reads still work.",
      "autoApproveDialogTitle": "Enable auto-approve?",
      "autoApproveDialogDesc": "The agent will be able to write to your library without asking for approval each time. You can turn this off at any time.",
      "autoApproveDialogContinue": "Continue"
    },
    "storage": {
      "title": "Storage",
      "dbPath": "Catalog database path",
      "restartHint": "A restart is required after changing this path.",
      "restartAlert": "Database path changed. Please restart BeatOS for the new location to take effect.",
      "updateFailed": "Failed to update database path: {{error}}"
    },
    "about": {
      "title": "About",
      "madeBy": "Made by averatec0773",
      "website": "My website: ",
      "websiteAria": "Open averatec.studio in browser",
      "repo": "Project repo: ",
      "repoAria": "Open project repository on GitHub in browser"
    }
  },
  "trackList": {
    "addTrack": "Add Track",
    "loading": "Loading…",
    "analyzeAll": "Analyze all unanalyzed ({{count}})",
    "exportPlaylist": "Export playlist",
    "exportPlaylistTitle": "Export playlist files",
    "editMetadata": "Edit metadata",
    "analyzeSelected": "Analyze selected",
    "moveToTrash": "Move to trash",
    "moveToTrashConfirm": "Move 1 track to trash?",
    "moveToTrashConfirmMany": "Move {{count}} tracks to trash?",
    "movedToTrash": "Moved 1 track to trash",
    "movedToTrashMany": "Moved {{count}} tracks to trash",
    "trackCount": "{{count}} track",
    "trackCount_other": "{{count}} tracks",
    "dropAudio": "Drop audio files (.wav or .mp3) to create new tracks"
  },
  "approvals": {
    "title": "Agent Actions",
    "empty": "No AI activity yet. Connect an MCP-compatible client to start (see Settings → AI Integration).",
    "pending": "⚠ Pending ({{count}})",
    "recent": "Recent ({{count}})",
    "cannotBeUndone": "This cannot be undone.",
    "iUnderstand": "I understand this is permanent",
    "approve": "✓ Approve",
    "reject": "✗ Reject",
    "hide": "Hide",
    "showAll": "Show all {{count}}"
  },
  "detail": {
    "nowFocused": "Now Focused",
    "nowPlaying": "Now Playing",
    "selectTrack": "Select a track to see details.",
    "hidePreview": "Hide preview",
    "showPreview": "Show preview",
    "noGenre": "No genre",
    "genreMood": "Genre / Mood",
    "credits": "Credits",
    "added": "Added",
    "updated": "Updated",
    "description": "Description",
    "resizePreview": "Resize preview panel"
  },
  "search": {
    "placeholder": "Search title / tags / genre:trap",
    "clearAria": "Clear search",
    "suggestions": "Search suggestions",
    "recentSearches": "Recent searches",
    "topProducers": "Top producers",
    "topGenres": "Top genres",
    "topKeys": "Top keys",
    "recentlyAdded": "Recently added"
  },
  "emptyState": {
    "noTracks": "No tracks yet",
    "noTracksDesc": "Add your first track to get started.",
    "addTrack": "Add Track",
    "emptyList": "List \"{{name}}\" is empty",
    "emptyListDesc": "Drag tracks from All Beats to add them here.",
    "noResults": "No tracks match \"{{query}}\"",
    "noResultsDesc": "Try a shorter or different search.",
    "clearSearch": "Clear search"
  },
  "errors": {
    "renderError": "Render error",
    "renderErrorDesc": "Something threw while rendering. Details below — please share with the developer.",
    "tryAgain": "Try again",
    "backendUnreachable": "Can't reach the backend",
    "backendUnreachableDesc": "The Python sidecar didn't respond. This usually means it failed to start.",
    "retry": "Retry",
    "sidecarDisconnected": "Backend disconnected",
    "sidecarExited": "The sidecar process exited (code {{code}}, signal {{signal}}). Restart the app to reconnect."
  },
  "keyPicker": {
    "add": "Add key",
    "major": "Major",
    "minor": "Minor",
    "flatKeys": "Flat keys",
    "sharpKeys": "Sharp keys"
  },
  "chipSelect": {
    "renameValue": "Rename value",
    "confirmRename": "Confirm rename",
    "deleteValueGlobally": "Delete value globally",
    "addCustomValue": "Add custom value",
    "atMax": "At max — remove a chip first",
    "typeToAdd": "Type to add…",
    "add": "Add",
    "selected": "{{count}} / {{max}} selected",
    "cancel": "Cancel",
    "apply": "Apply"
  },
  "publishDialog": {
    "files": "Files",
    "metadata": "Metadata",
    "loginNotCompleted": "Login not completed",
    "couldntStartLogin": "Couldn't start login",
    "failedToLoadMetadata": "Failed to load metadata",
    "failedToLoadAssets": "Failed to load assets",
    "selectPromoVideoFirst": "Select a promo video first",
    "selectPreviewAudioFirst": "Select a preview audio first",
    "publishFailed": "Publish failed",
    "publishToPlatform": "Publish to platform",
    "logInFirst": "Log in first",
    "browserOpen": "Browser open…",
    "logIn": "Log in",
    "awaitingMsg": "Auto-uploaded — finish the last step in the browser (read the agreement, then SMS-verify).",
    "published": "Published",
    "view": "View",
    "publishFailedDetail": "Publish failed: {{error}}",
    "publish": "Publish",
    "stageQueued": "Queued",
    "stageLaunching": "Launching browser",
    "stageNavigating": "Opening upload page",
    "stageUploadingAudio": "Uploading preview audio",
    "stageUploadingCover": "Uploading cover",
    "stageFillingMetadata": "Filling metadata",
    "stageUploadingDeliverables": "Uploading deliverables",
    "stageSubmitting": "Submitting",
    "stageAwaitingReview": "Waiting for you",
    "stageAwaitingSms": "Waiting for you",
    "stageDone": "Done",
    "stageFailed": "Failed"
  },
  "publishCenter": {
    "title": "Publish Center",
    "publishTrack": "Publish a track",
    "refresh": "Refresh",
    "accountSessions": "Account sessions",
    "noPlatforms": "No platforms",
    "activity": "Activity",
    "noPublishes": "No publishes in progress",
    "neverChecked": "Never checked",
    "checkedJustNow": "Checked just now",
    "checkedMinsAgo": "Checked {{mins}}m ago",
    "checkedHoursAgo": "Checked {{hours}}h ago",
    "browserOpenFinishLogin": "Browser open — finish login…",
    "reLogin": "Re-login",
    "logIn": "Log in",
    "loggedIn": "Logged in",
    "expired": "Expired — log in again",
    "checking": "Checking",
    "notLoggedIn": "Not logged in",
    "waitingForReview": "Waiting for you — finish in the open browser (next → sign → submit)",
    "waitingForSms": "Waiting for you — finish in the open browser (enter SMS → submit)",
    "published": "Published",
    "failedJob": "Failed — {{message}}",
    "viewListing": "View listing",
    "republish": "Republish",
    "searchTracks": "Search tracks…",
    "searching": "Searching…",
    "noTracksFound": "No tracks found",
    "loggedInToast": "Logged in",
    "loginTimedOut": "Login timed out: {{message}}",
    "loginFailed": "Login failed: {{message}}",
    "couldntStartLogin": "Couldn't start login",
    "trackFallback": "Track #{{id}}"
  },
  "filters": {
    "addFilter": "+ Add filter",
    "filterBy": "Filter by",
    "clearAll": "Clear all",
    "removeFilterAria": "Remove {{field}} filter",
    "loading": "Loading…",
    "failedToLoad": "Failed to load",
    "noValuesFound": "No values found",
    "bpmRange": "BPM Range",
    "minPlaceholder": "Min",
    "maxPlaceholder": "Max",
    "hasAudio": "Has Audio",
    "any": "Any",
    "yes": "Yes",
    "no": "No"
  },
  "fileBrowser": {
    "titleFile": "Choose a file",
    "titleFolder": "Choose a folder",
    "up": "Up",
    "selectFolder": "Select this folder",
    "select": "Select",
    "empty": "Empty folder",
    "loadFailed": "Could not list folder: {{error}}",
    "filteredHint": "Showing: {{exts}}"
  },
  "fileRows": {
    "files": "Files",
    "promoVideos": "Promo videos",
    "missing": "Missing",
    "findFile": "Find file",
    "addFile": "+ Add file",
    "revealInFinder": "Reveal in Finder",
    "replaceFile": "Replace file…",
    "detach": "Detach",
    "coverMissing": "Cover · Missing",
    "coverActions": "Cover actions",
    "replace": "Replace…",
    "attachFailed": "Attach failed: {{error}}",
    "relocateFailed": "Relocate failed: {{error}}",
    "dropWrongType": "{{label}} requires one of: {{exts}} (got {{name}})",
    "getPathFailed": "Could not read file path. Try the + Add file button.",
    "emptyPath": "Dropped file has no accessible path. Try the + Add file button."
  },
  "playlistHero": {
    "playlist": "Playlist",
    "renameAria": "Rename playlist",
    "doubleClickRename": "Double-click to rename",
    "renameFailed": "Rename failed: {{error}}",
    "trackCount": "{{count}} track",
    "trackCount_other": "{{count}} tracks"
  },
  "tableHeader": {
    "title": "Title",
    "bpm": "BPM",
    "key": "Key",
    "genre": "Genre",
    "updated": "Updated"
  },
  "addToList": {
    "noLists": "No lists yet"
  },
  "dragOverlay": {
    "tracks": "{{count}} tracks"
  }
}
