export type LanguageCode = "EN" | "zh-CN";

export interface TranslationSchema {
  common: {
    error: string;
    warning: string;
    loading: string;
    done: string;
    cancel: string;
    confirm: string;
    back: string;
    next: string;
    tool: string;
    running: string;
    noTurns: string;
  };
  cli: {
    description: string;
    continue: string;
    setup: string;
    code: string;
    chat: string;
    run: string;
    stats: string;
    doctor: string;
    commit: string;
    sessions: string;
    pruneSessions: string;
    events: string;
    replay: string;
    diff: string;
    mcp: string;
    version: string;
    update: string;
    index: string;
  };
  stats: {
    usageHint: string;
    usageDetail: string;
  };
  run: {
    missingApiKey: string;
  };
  sessions: {
    emptyHint: string;
  };
  ui: {
    welcome: string;
    taglineChat: string;
    taglineCode: string;
    taglineSub: string;
    startSessionHint: string;
    inputPlaceholder: string;
    busy: string;
    thinking: string;
    activityWaitingForModel: string;
    activityThinking: string;
    activityProcessing: string;
    undo: string;
    undoHint: string;
    applied: string;
    rejected: string;
    noDashboard: string;
    openDashboardHint: string;
    dashboardPortHint: string;
    dashboardPortInvalid: string;
    dashboardAutoStartFailed: string;
    systemAppendHint: string;
    systemAppendFileHint: string;
    resumedSession: string;
    newSession: string;
    ephemeralSession: string;
    restoredEdits: string;
    resumedPlan: string;
    tipEditBindings: {
      topic: string;
      sections: ReadonlyArray<{
        title?: string;
        rows: ReadonlyArray<{ key: string; text: string }>;
      }>;
      footer: string;
    };
    tipMouseClipboard: {
      topic: string;
      sections: ReadonlyArray<{
        title?: string;
        rows: ReadonlyArray<{ key: string; text: string }>;
      }>;
      footer: string;
    };
    keysReference: {
      topic: string;
      sections: ReadonlyArray<{
        title: string;
        rows: ReadonlyArray<{ key: string; text: string }>;
      }>;
      footer: string;
    };
    tipShownOnce: string;
    modelOverride: string;
    noSession: string;
    resumeHint: string;
    newHint: string;
    transcriptHint: string;
    budgetHint: string;
    modelIdHint: string;
    systemPromptHint: string;
    presetHint: string;
    sessionNameHint: string;
    ephemeralHint: string;
    mcpSpecHint: string;
    mcpPrefixHint: string;
    noConfigHint: string;
    presetHintShort: string;
    budgetHintShort: string;
    transcriptHintShort: string;
    mcpSpecHintShort: string;
    mcpPrefixHintShort: string;
    dryRunHint: string;
    rebuildHint: string;
    embedModelHint: string;
    projectDirHint: string;
    ollamaUrlHint: string;
    skipPromptsHint: string;
    verboseHint: string;
    pruneDaysHint: string;
    pruneDryRunHint: string;
    eventTypeHint: string;
    eventSinceHint: string;
    eventTailHint: string;
    jsonHint: string;
    projectionHint: string;
    printHint: string;
    headHint: string;
    tailHint: string;
    mdReportHint: string;
    printHintTable: string;
    tuiHint: string;
    labelAHint: string;
    labelBHint: string;
    mcpListDescription: string;
    mcpInspectDescription: string;
    mcpSearchDescription: string;
    mcpInstallDescription: string;
    mcpBrowseDescription: string;
    mcpLocalHint: string;
    mcpRefreshHint: string;
    mcpLimitHint: string;
    mcpPagesHint: string;
    mcpAllHint: string;
    mcpMaxPagesHint: string;
    jsonHintCatalog: string;
    jsonHintReport: string;
    modelOverrideFlash: string;
    skipConfirmHint: string;
    yoloHint: string;
    ruleSummaryLabel: string;
  };
  code: {
    workspaceConflict: string;
    systemAppendEmpty: string;
    systemAppendFileReadError: string;
  };
  slash: {
    [key: string]: {
      description: string;
      argsHint?: string;
      success?: string;
      unsupported?: string;
    };
  };
  app: {
    walkCancelledRemaining: string;
    walkCancelled: string;
    turnInterrupted: string;
    editModeYolo: string;
    editModeAuto: string;
    editModeReview: string;
    rejectedEdit: string;
    autoApprovingRest: string;
    flippedAutoSession: string;
    flippedAutoWalk: string;
    dashboardStopped: string;
    notedMemory: string;
    notedScopeProject: string;
    notedScopeGlobal: string;
    notedVerbCreated: string;
    notedVerbAppended: string;
    memoryWriteFailed: string;
    commandFailed: string;
    btwUsage: string;
    btwHeader: string;
    btwFailed: string;
    restoreCodeOnly: string;
    hookUserPromptSubmit: string;
    hookStop: string;
    atMentions: string;
    atUrl: string;
    atUrlFailed: string;
    sessionTitleNoSession: string;
    sessionTitleNoContent: string;
    sessionTitleNoTitle: string;
    sessionTitleUpdated: string;
    sessionTitleRenameFailed: string;
    sessionTitleRenamed: string;
    sessionTitleAutoRenamed: string;
    workspaceSwitched: string;
    semanticRepointed: string;
    semanticDisabledForRoot: string;
    semanticRebootstrapFailed: string;
    denied: string;
    alwaysAllowed: string;
    runningCommand: string;
    startingBackground: string;
    checkpointSaved: string;
    continuingAfter: string;
    planStoppedAt: string;
    revisingAfter: string;
    historyScrollHint: string;
  };
  hooks: {
    head: string;
    headWithDetail: string;
    truncated: string;
    decisionBlock: string;
    decisionWarn: string;
    decisionTimeout: string;
    decisionError: string;
  };
  summary: {
    status: string;
    hallucinatedFallback: string;
    failedAfterReason: string;
  };
  loop: {
    budgetExhausted: string;
    budget80Pct: string;
    proArmed: string;
    abortedAtIter: string;
    toolUploadStatus: string;
    preflightTruncateStatus: string;
    preflightTruncated: string;
    preflightTruncatedStillFull: string;
    preflightNoFold: string;
    flashEscalation: string;
    harvestStatus: string;
    repeatToolCallWarning: string;
    stormStuck: string;
    stormSuppressed: string;
    compactingHistoryStatus: string;
    aggressiveTag: string;
    foldedHistory: string;
    aggressivelyFoldedHistory: string;
    forcingSummary: string;
  };
  errors: {
    contextOverflow: string;
    contextOverflowTooMany: string;
    auth401: string;
    balance402: string;
    badparam422: string;
    badrequest400: string;
    deepseek5xxHead: string;
    deepseek5xxReachable: string;
    deepseek5xxUnreachable: string;
    deepseek5xxActionNetwork: string;
    deepseek5xxActionRetry: string;
    innerNoMessage: string;
    reasonAborted: string;
    reasonContextGuard: string;
    reasonStuck: string;
    labelAborted: string;
    labelContextGuard: string;
    labelStuck: string;
  };
  handlers: {
    [group: string]: {
      [key: string]: string;
    };
  };
  wizard: {
    languageTitle: string;
    languageSubtitle: string;
    languageDetectedHint: string;
    welcomeTitle: string;
    apiKeyPrompt: string;
    apiKeyGetOne: string;
    apiKeySavedLocally: string;
    apiKeyInputLabel: string;
    apiKeyInvalid: string;
    apiKeyChecking: string;
    apiKeyRejected: string;
    apiKeyCheckFailed: string;
    apiKeyPreview: string;
    presetTitle: string;
    mcpTitle: string;
    mcpUserArgsHint: string;
    mcpFooterMulti: string;
    mcpArgsTitle: string;
    mcpArgsDirMissing: string;
    mcpArgsDirCreateHint: string;
    mcpArgsDirCreateFailed: string;
    mcpArgsRequiredParam: string;
    mcpArgsEmpty: string;
    mcpArgsNotADir: string;
    mcpArgsFilesystemPlaceholder: string;
    mcpArgsSqlitePlaceholder: string;
    mcpArgsFilesystemSummary: string;
    mcpArgsFilesystemNote: string;
    themeTitle: string;
    themeSubtitle: string;
    themeSampleHeading: string;
    themeFooter: string;
    themeCaption: Record<string, string>;
    presetDescriptions: Record<"auto" | "flash" | "pro", { headline: string; cost: string }>;
    mcpCatalog: Record<
      "filesystem" | "memory" | "github" | "puppeteer" | "everything",
      { summary: string; note?: string }
    >;
    reviewTitle: string;
    reviewLabelApiKey: string;
    reviewLabelLanguage: string;
    reviewLabelPreset: string;
    reviewLabelTheme: string;
    reviewLabelMcp: string;
    reviewMcpNone: string;
    reviewMcpServers: string;
    reviewSavesTo: string;
    reviewSaveError: string;
    reviewFooter: string;
    savedTitle: string;
    savedFooter: string;
    selectFooter: string;
    stepCounter: string;
    exitHint: string;
    apiKeyPlaceholder: string;
    themeSampleReasoning: string;
  };
  themePicker: {
    header: string;
    footer: string;
    currentPref: string;
    activeNow: string;
    autoDesc: string;
    autoLabel: string;
    defaultLabel: string;
    darkLabel: string;
    lightLabel: string;
    tokyoNightLabel: string;
    githubDarkLabel: string;
    githubLightLabel: string;
    highContrastLabel: string;
  };
  planFlow: {
    approveCardTitle: string;
    approveCardMetaRight: string;
    openQuestionsBanner: string;
    openQuestionsHeader: string;
    truncatedBodyMore: string;
    truncatedBodyMorePlural: string;
    noPlanSummary: string;
    detailCollapsedHint: string;
    detailExpandedHint: string;
    detailHeader: string;
    detailWindow: string;
    detailScrollHint: string;
    picker: {
      accept: string;
      acceptHint: string;
      refine: string;
      refineHint: string;
      revise: string;
      reviseHint: string;
      reject: string;
      rejectHint: string;
    };
    refineFooter: string;
    refineQuestionsHeading: string;
    modes: {
      approve: { title: string; hint: string; blankHint: string };
      refine: { title: string; hint: string; blankHint: string };
      reject: { title: string; hint: string; blankHint: string };
      "checkpoint-revise": { title: string; hint: string; blankHint: string };
      "choice-custom": { title: string; hint: string; blankHint: string };
    };
    checkpoint: {
      title: string;
      continue: string;
      continueHint: string;
      revise: string;
      reviseHint: string;
      stop: string;
      stopHint: string;
    };
    stepList: {
      counter: string;
      counterSingular: string;
      counterDone: string;
      counterDoneSingular: string;
    };
    reviseTitle: string;
    reviseSteps: string;
    reviseFooter: string;
    riskMed: string;
    riskHigh: string;
    completeMsg: string;
  };
  statusBar: {
    turn: string;
    cache: string;
    spent: string;
    left: string;
    slow: string;
    disconnect: string;
    reconnecting: string;
    approvingIn: string;
    escToInterrupt: string;
    recordingGlyph: string;
    mb: string;
    evt: string;
    /** Prefix for the edit-gate mode pill — disambiguates from the preset (`/preset auto` is a different "auto"). */
    editsLabel: string;
    /** Label for the MCP-handshake progress pill (rendered as `⌁ MCP n/m`). */
    mcpLoading: string;
    /** Word used in the context-usage pill (rendered as `ctx 72% · 144K/200K`). */
    ctx: string;
  };
  editMode: {
    plan: string;
    yolo: string;
    auto: string;
    review: string;
    writesGated: string;
    editsShellAuto: string;
    editsLandNow: string;
    queuedApplyDiscard: string;
    editsQueued: string;
    shiftTabFlip: string;
    queuedDots: string;
    undoApplied: string;
    undoHint: string;
    undoPausedHint: string;
  };
  composer: {
    placeholder: string;
    waitingForResponse: string;
    hintSend: string;
    hintNewline: string;
    hintClear: string;
    hintScroll: string;
    hintHistory: string;
    hintAbort: string;
    hintQuit: string;
    abortedHint: string;
    editorNoRawMode: string;
    editorFailed: string;
    editorMissing: string;
    editorExited: string;
    /** Typeahead queue indicator, e.g. "▸ 3 lines staged · esc recall" */
    typeaheadStaged: string;
  };
  pathConfirm: {
    title: string;
    subtitleRead: string;
    subtitleWrite: string;
    awaiting: string;
    denyTitle: string;
    denyFooter: string;
    optional: string;
    pickFooter: string;
    allowOnce: string;
    allowOnceDesc: string;
    allowAlways: string;
    allowAlwaysDesc: string;
    deny: string;
    denyDesc: string;
    pathLabel: string;
    sandboxLabel: string;
    allowPrefixLabel: string;
  };
  shellConfirm: {
    title: string;
    bgTitle: string;
    subtitle: string;
    bgSubtitle: string;
    denyTitle: string;
    optional: string;
    denyFooter: string;
    awaiting: string;
    pickFooter: string;
    allowOnce: string;
    allowOnceDesc: string;
    allowAlways: string;
    allowAlwaysDesc: string;
    deny: string;
    denyDesc: string;
    cwdLabel: string;
    timeoutLabel: string;
    waitLabel: string;
    previewMore: string;
    previewMorePlural: string;
  };
  editConfirm: {
    footer: string;
    newTag: string;
    editTag: string;
    linesCount: string;
    viewingRange: string;
    denyFooter: string;
    oldLabel: string;
    newLabel: string;
    sideBySide: string;
    linesAbove: string;
    linesAbovePlural: string;
    linesBelow: string;
    linesBelowPlural: string;
  };
  sessionPicker: {
    header: string;
    title: string;
    messages: string;
    messagesPlural: string;
    turns: string;
    pickerHint: string;
    empty: string;
    emptyNew: string;
    renamePrompt: string;
    renameHint: string;
    searchPrompt: string;
    searchHint: string;
    searchEmpty: string;
    emptyHint: string;
    justNow: string;
    minAgo: string;
    yesterday: string;
    hoursAgo: string;
    daysAgo: string;
  };
  workspacePicker: {
    header: string;
    title: string;
    sessions: string;
    sessionsPlural: string;
    current: string;
    pickerHint: string;
    empty: string;
    searchPrompt: string;
    searchHint: string;
    searchEmpty: string;
  };
  modelPicker: {
    header: string;
    loading: string;
    catalogEmpty: string;
    modelsAvailable: string;
    presetsHeader: string;
    modelsHeader: string;
    pickerFooter: string;
    currentLabel: string;
  };
  slashSuggestions: {
    noMatch: string;
    backspaceHint: string;
    commandCount: string;
    commandCountPlural: string;
    aboveLabel: string;
    belowLabel: string;
    advancedHint: string;
    footerHint: string;
    groupChat: string;
    groupSetup: string;
    groupInfo: string;
    groupSession: string;
    groupExtend: string;
    groupCode: string;
    groupJobs: string;
    groupAdvanced: string;
    groupDetailSetup: string;
    groupDetailInfo: string;
    groupDetailChat: string;
    groupDetailExtend: string;
    groupDetailSession: string;
    groupDetailCode: string;
    groupDetailJobs: string;
    groupDetailAdvanced: string;
  };
  atMentions: {
    loading: string;
    entrySingular: string;
    entryPlural: string;
    searching: string;
    scanned: string;
    match: string;
    matches: string;
    forFilter: string;
    noMatch: string;
    emptyDir: string;
    scanning: string;
    footerBrowse: string;
    footerBrowseSearch: string;
    footerInsert: string;
  };
  statsPanel: {
    modePlan: string;
    modeYolo: string;
    modeAuto: string;
    modeReview: string;
    pro: string;
    budget: string;
  };
  welcomeBanner: {
    workspace: string;
    relaunchHint: string;
    dashboard: string;
  };
  ctxBreakdown: {
    title: string;
    compactHint: string;
    topTools: string;
    msg: string;
    turnLabel: string;
  };
  startup: {
    codeRooted: string;
    ephemeral: string;
    semanticOn: string;
    updateAvailable: string;
  };
  doctorErrors: {
    unreadable: string;
    cannotList: string;
    parseFailed: string;
    probeFailed: string;
  };
  doctorReport: {
    labels: {
      apiKey: string;
      config: string;
      proxy: string;
      apiReach: string;
      tokenizer: string;
      sessions: string;
      hooks: string;
      semantic: string;
      project: string;
    };
    details: {
      proxyDirect: string;
      proxyRouting: string;
      apiKeyEnv: string;
      apiKeyConfig: string;
      apiKeyMissing: string;
      configMissing: string;
      apiReachSkipped: string;
      apiReachNull: string;
      apiReachUnavailable: string;
      apiReachOk: string;
      apiReachOkWithBalance: string;
      tokenizerMissing: string;
      sessionsZero: string;
      sessionsSummary: string;
      sessionsStale: string;
      hooksSummary: string;
      semanticNoIndex: string;
      semanticMismatch: string;
      semanticOpenaiOk: string;
      semanticOllamaMissing: string;
      semanticOllamaStopped: string;
      semanticOllamaModelMissing: string;
      semanticOllamaReady: string;
      projectMissing: string;
      projectOk: string;
    };
  };
  webErrors: {
    status: string;
    rateLimit429: string;
    forbidden403: string;
    serverError5xx: string;
    mojeekBlocked: string;
    mojeekNoResults: string;
    invalidEndpoint: string;
    endpointMustBeHttp: string;
    cannotReach: string;
    searxngNoResults: string;
    metasoDailyLimit: string;
    metasoUnauthorized: string;
    metasoRateLimit: string;
    metasoServerError: string;
    metasoParseError: string;
    metasoApiError: string;
    fetchStatus: string;
    fetchRateLimit429: string;
    fetchForbidden403: string;
    fetchServerError5xx: string;
    fetchTimeout: string;
    fetchTooLarge: string;
    fetchBodyTooLarge: string;
    fetchInvalidUrl: string;
  };
  choiceConfirm: {
    customLabel: string;
    customDesc: string;
    cancelLabel: string;
    cancelDesc: string;
  };
  cardTitles: {
    usage: string;
    context: string;
    search: string;
    subagent: string;
    reply: string;
    reasoning: string;
    reasoningAborted: string;
    reasoningEllipsis: string;
    error: string;
    doctor: string;
    you: string;
    task: string;
  };
  cardLabels: {
    prompt: string;
    reason: string;
    output: string;
    cache: string;
    session: string;
    balance: string;
    turn: string;
    system: string;
    tools: string;
    log: string;
    input: string;
    topTools: string;
    logMsgs: string;
    hitSingular: string;
    hitsPlural: string;
    moreHitSingular: string;
    moreHitsPlural: string;
    earlierLine: string;
    earlierLines: string;
    earlierStackLine: string;
    earlierStackLines: string;
    agent: string;
    response: string;
    writing: string;
    tok: string;
    pilcrow: string;
    aborted: string;
    truncatedByEsc: string;
    rejected: string;
    exit: string;
    bytesIn: string;
    elapsedSec: string;
    stackTrace: string;
    retries: string;
    reasoningLabel: string;
    runningLabel: string;
    workingLabel: string;
    defaultFooter: string;
    applyAction: string;
    skipAction: string;
    rejectAction: string;
    levelOk: string;
    levelWarn: string;
    levelFail: string;
    checksLabel: string;
    passed: string;
    warnTag: string;
    failTag: string;
    stepLabel: string;
    done: string;
    inProgress: string;
    upcoming: string;
    resumed: string;
    archive: string;
    more: string;
    categoryUser: string;
    categoryFeedback: string;
    categoryProject: string;
    categoryReference: string;
  };
  copyMode: {
    title: string;
    help: string;
    statusBar: string;
    statusYanked: string;
    statusEmpty: string;
    empty: string;
    labelUser: string;
    labelAssistant: string;
    labelReasoning: string;
    yankedToast: string;
    yankedToastFile: string;
  };
  mcpHealth: {
    noData: string;
    healthy: string;
    slow: string;
    verySlow: string;
    slowToast: string;
    emptyHint: string;
  };
  denyContextInput: {
    description: string;
  };
  cardStream: {
    scrollAbove: string;
    scrollAbovePlural: string;
    scrollMore: string;
    scrollPgUp: string;
  };
  slashArgPicker: {
    noMatch: string;
    keepTyping: string;
    above: string;
    below: string;
    footer: string;
  };
  mcpMarketplace: {
    title: string;
    filter: string;
    filterPlaceholder: string;
    matchSingular: string;
    matchPlural: string;
    loading: string;
    noEntries: string;
    opening: string;
    cached: string;
    exhausted: string;
    loadingMore: string;
    allLoaded: string;
    fetchingDetail: string;
    noInstallInfo: string;
    alreadyInstalled: string;
    installed: string;
    uninstalled: string;
    installFailed: string;
    notInstalled: string;
    bridged: string;
    bridgeFailed: string;
    bridgeReloadFailed: string;
    restartBridge: string;
    needsEnv: string;
    badgeOfficial: string;
    badgeSmithery: string;
    badgeLocal: string;
    footerHint: string;
    specLine: string;
    smitheryDetail: string;
    statusError: string;
  };
  mcpBrowser: {
    title: string;
    empty: string;
    serverCount: string;
    footer: string;
  };
  mcpLifecycle: {
    handshake: string;
    connected: string;
    failed: string;
    disabled: string;
    reconnect: string;
    initDetail: string;
    reconnectDetail: string;
    disabledDetail: string;
    failedSetupHint: string;
    failedSetupConfigHint: string;
  };
  checkpointPicker: {
    title: string;
    header: string;
    empty: string;
    more: string;
    footer: string;
    footerEmpty: string;
  };
  planReviseConfirm: {
    title: string;
    metaRight: string;
    updatedSummary: string;
    acceptLabel: string;
    acceptHint: string;
    rejectLabel: string;
    rejectHint: string;
  };
  diffApp: {
    title: string;
    turnLabel: string;
    turnsAligned: string;
    paneEmpty: string;
    kindMatch: string;
    kindDiverge: string;
    kindOnlyInA: string;
    kindOnlyInB: string;
  };
  recordView: {
    userPrefix: string;
    assistant: string;
    toolPrefix: string;
    argsLabel: string;
    resultArrow: string;
    error: string;
    cache: string;
    toolCallOnly: string;
    truncateExtra: string;
  };
  replayApp: {
    emptyTranscript: string;
    turnProgress: string;
    noRecords: string;
    untracked: string;
    churned: string;
  };
}
