export const messages = {
  "zh-CN": {
    common: {
      language: "语言",
      languages: {
        "zh-CN": "简体中文",
        en: "英文",
      },
      all: "全部",
      search: "搜索",
      ai: "AI",
      article: "文章",
      tweet: "动态",
      posts: "文章",
      tags: "标签",
      categories: "分类",
      friends: "友链",
      location: "位置",
      unknown: "未知",
      other: "其他",
      current: "当前",
      readTime: "阅读时间",
      readTimeMinutes: "{count} 分钟",
      characters: "{count} 字",
      postsCount: "{count} 篇",
      tagsCount: "{count} 个标签",
      categoriesCount: "{count} 个分类",
      friendsCount: "{count} 个友链",
      reviewsCount: "{count} 条评价",
      resultsCount: "{count} 条结果",
      reviewedOnly: "仅展示已通过审核",
      noData: "暂无数据",
      noResults: "没有匹配结果",
      open: "打开",
      close: "关闭",
      submit: "提交",
      cancel: "取消",
      clear: "清除",
      reset: "重置",
      refresh: "刷新",
      reply: "回复",
      like: "点赞",
      visit: "访问",
      readMore: "阅读全文",
      viewArticle: "打开文章",
      viewAllArticles: "查看所有文章",
      viewAllLinks: "查看全部友链",
      viewCategoryArticles: "查看分类文章",
      clearFilters: "清除筛选",
      resetFilters: "重置筛选",
      home: "首页",
      browsePosts: "浏览文章",
      goBack: "返回上一页",
      backToIndex: "返回索引",
      copyPermalink: "复制固定链接",
      locateParagraph: "定位段落",
      maxChars: "最多 {count} 字",
      optional: "可选",
      pending: "待审核",
      approved: "已审核",
      completed: "已完成",
      inProgress: "进行中",
      featureOn: "功能已开启",
      featureOff: "功能未开启",
      emptyState: "当前还没有内容。",
      apiUnavailable: "API 暂时不可用",
      humanVerification: "人机验证",
      turnstileHint: "提交前请先完成 Cloudflare Turnstile 校验。",
      turnstileRequired: "请先完成人机验证。",
      turnstileLoadFailed: "加载人机验证失败，请刷新页面后重试。",
      unknownError: "未知错误",
    },
    nav: {
      articles: "文章",
      categories: "分类",
      tags: "标签",
      timeline: "时间轴",
      reviews: "评价",
      friends: "友链",
      about: "关于",
      ask: "AI 问答",
    },
    header: {
      navigation: "导航",
      themeToggle: "切换主题",
      themePanelTitle: "外观模式",
      themeLight: "浅色",
      themeDark: "深色",
      themeSystem: "跟随系统",
      themeLightHint: "始终使用亮色界面",
      themeDarkHint: "始终使用暗色界面",
      themeSystemHint: "跟随设备当前主题",
      themeResolvedAs: "当前生效：{mode}",
      toggleMenu: "切换菜单",
      searchModeKeyword: "搜索",
      searchModeAi: "AI",
      searchModeKeywordMobile: "关键词搜索",
      searchModeAiMobile: "AI 搜索",
      shellLabel: "站点终端",
      musicPanel: "播放控制",
      searchPromptKeyword: "站内搜索",
      searchPromptAi: "AI 问答",
      searchPlaceholderKeyword: "'关键词'",
      searchPlaceholderAi: "输入问题，交给站内 AI",
      searchHintKeyword: "文章 / 标签 / 分类",
      searchHintAi: "前往问答页",
      aiModeTitle: "AI 问答模式",
      aiModeHeading: "把这个问题交给站内 AI",
      aiModeDescription:
        "在问答页输入问题后，系统会优先参考站内内容并给出整理后的回答。",
      aiModeNotice: "回答会附带相关文章，方便继续阅读。",
      aiModeCta: "前往 AI 问答页确认",
      liveResults: "实时搜索结果",
      searching: "正在搜索 {query} ...",
      searchFailed: "搜索失败，请稍后再试。",
      searchEmpty: "没有找到和 {query} 相关的内容。",
      searchEmptyCta: "去 AI 问答页确认提问",
      searchAiFooter: "去 AI 问答页手动确认",
      searchAllResults: "查看全部搜索结果",
      untitled: "未命名",
      manualConfirm: "AI 必须手动确认后才会提问",
    },
    footer: {
      session: "会话",
      copyright: "© {year} {site}. 保留所有权利。",
      sitemap: "站点地图",
      rss: "RSS 订阅",
      summary: "持续整理文章、记录与站内阅读入口。",
    },
    home: {
      pinned: "置顶",
      quickJump: "快速跳转",
      about: "关于我",
      techStack: "技术栈",
      systemStatus: "系统状态",
      hotNow: "最近热门内容",
      hotNowDescription:
        "基于 24h / 7d / 30d 的页面访问与阅读完成信号生成，可切换窗口查看最有反馈的内容。",
      hotNowEmpty: "当前筛选条件下还没有热门内容信号。",
      sortByViews: "最多浏览",
      sortByCompletes: "完读最多",
      sortByDepth: "阅读最深",
      readingSignals: "阅读信号",
      readingSignalsDescription:
        "以下统计面板会跟随所选窗口切换，展示全站内容消费表现。",
      views: "浏览",
      completes: "完读",
      avgProgress: "平均进度",
      avgDuration: "平均时长",
      totalViews: "累计浏览",
      totalCompletes: "累计完读",
      statsWindow: "统计窗口：最近 7 天",
      statsWindowLabel: "统计窗口：{label}",
      promptWelcome: "pwd",
      promptDiscoverDefault: "find ./posts -type f | sort",
      promptDiscoverFiltered: 'grep -Ril "{filters}" ./posts',
      promptPinned: 'grep -Ril "^pinned: true$" ./posts',
      promptPostsDefault: "find ./posts -type f | head -n {count}",
      promptPostsFiltered: 'grep -Ril "{filters}" ./posts | head -n {count}',
      promptPopular: "awk 'NR<=6 {print}' ./analytics/popular-posts.log",
      promptPopularRange:
        "awk 'NR<=6 {print}' ./analytics/popular-posts.log --window={label}",
      promptFriends: "find ./links -maxdepth 1 -type f | sort",
      promptAbout: "sed -n '1,80p' ~/profile.md",
    },
    articlesPage: {
      title: "文章索引",
      description: "按类型、分类和标签筛选内容，快速浏览整个内容目录。",
      totalPosts: "共 {count} 篇",
      allCategories: "全部分类",
      allTags: "全部标签",
      emptyTitle: "没有匹配结果",
      emptyDescription:
        "当前筛选条件下没有找到文章。可以清空标签或关键字，重新浏览整个内容目录。",
      pageSummary: "第 {current} / {total} 页 · 共 {count} 条结果",
      previous: "上一页",
      next: "下一页",
    },
    searchPage: {
      pageTitle: "站内搜索",
      title: "搜索结果",
      intro: "独立搜索页会保留搜索词，并支持按类型、分类、标签继续缩小范围。",
      promptIdle: "printf 'search query required\\n'",
      promptQuery: 'grep -Rin "{query}" ./posts',
      queryLabel: "当前查询",
      searchTips: "搜索会优先走站内索引，并自动复用同义词与轻量拼写纠错。",
      resultSummary: "找到 {count} 条结果",
      filteredSummary: "筛选后剩余 {count} 条结果",
      pageSummary: "第 {current} / {total} 页 · 共 {count} 条结果",
      previous: "上一页",
      next: "下一页",
      filtersTitle: "二次筛选",
      allCategories: "全部分类",
      allTags: "全部标签",
      emptyQueryTitle: "先输入关键词",
      emptyQueryDescription:
        "可以直接使用顶部搜索框，或在 URL 中传入 ?q= 进入搜索结果页。",
      emptyTitle: "没有匹配结果",
      emptyDescription: "可以切换分类 / 标签，或换一个关键词重新搜索。",
      askFallback: "改去 AI 问答",
    },
    article: {
      backToArticles: "返回文章索引",
      documentSession: "文档会话",
      filePath: "文件路径",
    },
    relatedPosts: {
      kicker: "关联轨迹",
      title: "相关文章",
      description: "基于当前分类与标签关联出的相近内容，延续同一条阅读链路。",
      linked: "{count} 条关联",
      hotKicker: "热门延伸",
      hotTitle: "同类热门文章",
      hotDescription:
        "结合最近 7 天的访问与阅读数据，优先推荐同分类或共享标签的高反馈内容。",
    },
    comments: {
      title: "评论终端",
      kicker: "讨论缓冲区",
      description:
        "这里是整篇文章的讨论区，当前缓冲区共有 {count} 条已展示评论，新的留言提交后会进入审核队列。",
      writeComment: "写评论",
      nickname: "昵称",
      nicknamePlaceholder: "山客",
      email: "邮箱",
      emailPlaceholder: "name@example.com",
      message: "内容",
      messagePlaceholder: "$ echo '留下你的想法...'",
      maxChars: "最多 500 字",
      cancelReply: "取消回复",
      emptyTitle: "暂无评论",
      emptyDescription:
        "当前还没有留言。可以打开上面的输入面板，成为第一个在这个终端缓冲区里发言的人。",
      today: "今天",
      yesterday: "昨天",
      daysAgo: "{count} 天前",
      weeksAgo: "{count} 周前",
      anonymous: "匿名",
      submitting: "正在提交评论...",
      submitSuccess: "评论已提交，审核通过后会显示在这里。",
      submitFailed: "提交失败：{message}",
      loadFailed: "加载评论失败",
      noSelection: "当前没有选中的评论。",
    },
    paragraphComments: {
      title: "段落评论已启用",
      kicker: "段落批注",
      intro:
        "正文里的自然段都会挂一个轻量讨论入口，适合只针对某一段补充上下文、指出问题或继续展开讨论。",
      scanning: "正在扫描段落缓冲区...",
      noParagraphs: "当前文章没有可挂载评论的自然段。",
      summary:
        "已为 {paragraphCount} 个自然段挂载评论入口，其中 {discussedCount} 段已有讨论，当前共展示 {approvedCount} 条已审核段落评论。",
      focusCurrent: "聚焦当前段落",
      panelTitle: "段落讨论面板",
      panelKicker: "段落讨论线程",
      close: "关闭",
      nickname: "昵称",
      nicknamePlaceholder: "林泉",
      email: "邮箱",
      emailPlaceholder: "name@example.com",
      comment: "评论",
      commentPlaceholder: "$ echo '只评论这一段...'",
      maxChars: "最多 500 字",
      clearReply: "清除回复",
      replyTo: "回复给",
      approvedThread: "公开讨论",
      pendingQueue: "待审核队列",
      emptyTitle: "这段还没有公开评论",
      emptyDescription:
        "适合补充上下文、指出细节或者提出具体问题。新的留言提交后会先进入审核队列。",
      loadingThread: "正在拉取该段的已审核评论...",
      loadFailedShort: "加载失败",
      loadFailed: "加载失败：{message}",
      selectedRequired: "当前没有选中的段落。",
      contextMissing: "段落上下文丢失，请重新打开该段评论面板。",
      submitting: "正在提交段落评论...",
      submitSuccess:
        "评论已提交，已先放入本地待审核队列；审核通过后会进入公开讨论。",
      submitFailed: "提交失败：{message}",
      anonymous: "匿名",
      oneNote: "1 条评论",
      manyNotes: "{count} 条评论",
      zeroNotes: "评论",
      waitingReview: "等待审核",
      locateParagraph: "定位段落",
      showMarkers: "显示段落评论",
      hideMarkers: "隐藏段落评论",
      markersHidden: "段落评论入口已隐藏，你仍然可以随时重新打开。",
      badgeLabel: "打开这一段的评论面板",
    },
    ask: {
      pageTitle: "AI 问答",
      pageDescription: "{siteName} 的站内 AI 问答入口",
      title: "AI 站内问答",
      subtitle: "围绕本站内容回答问题，并附上可继续阅读的相关文章。",
      terminalLabel: "问答助手",
      assistantLabel: "回答输出",
      disabledStateLabel: "功能已关闭",
      disabledTitle: "后台暂未开启 AI 问答",
      disabledDescription:
        "这个入口已经接好了真实后端，但当前站点设置里没有开启公开问答。管理员开启后，这里会自动变成可用状态，导航也会同步显示。",
      textareaPlaceholder:
        "输入你想问的问题，比如：这个博客关于前端写过哪些内容？",
      submit: "开始提问",
      idleStatus: "可以直接输入问题开始提问。",
      examples: "示例问题",
      guide: "提问建议",
      guide1: "1. 直接问主题、文章、观点或站内某类内容。",
      guide2: "2. 回答会优先结合本站已有内容，并给出可继续阅读的文章。",
      guide3: "3. 如果问题太宽泛，换成更具体的关键词通常会更准确。",
      emptyAnswer: "暂无回答。",
      requestFailed: "请求失败：{message}",
      streamUnsupported: "当前浏览器无法读取流式响应。",
      enterQuestion: "先输入一个问题。",
      cacheRestored: "已从当前会话缓存中恢复回答。",
      connecting: "正在建立流式连接，请稍候...",
      connectingShort: "请稍候...",
      processing: "正在处理请求...",
      complete: "回答已生成。",
      streamFailed: "流式请求失败",
      streamInterrupted: "流式响应被提前中断。",
      retryLater: "这次请求没有成功，可以稍后重试。",
      prefixedQuestion: "已带入搜索词，确认后开始提问。",
      promptIdle: "cat > question.txt",
      promptEditing: "sed -n '1,12p' question.txt",
      promptSubmitting: "tail -f answer.stream",
      promptComplete: "printf 'sources=%s\\n' {count}",
      promptFailed: "echo 'retry'",
      sources: "来源",
      sourceScore: "相关度 {score}",
      metaSources: "{count} 篇相关文章",
      metaSourcesWithTime: "{count} 篇相关文章 · 更新于 {time}",
    },
    about: {
      pageTitle: "关于",
      title: "关于我",
      intro:
        "这里汇总站点主人、技术栈、系统状态和联系方式，并与全站语言设置保持一致。",
      techStackCount: "{count} 项技术栈",
      profile: "身份档案",
      contact: "联系方式",
      website: "网站",
    },
    categories: {
      pageTitle: "分类",
      title: "文章分类",
      intro:
        "按内容主题浏览文章，分类页现在和其他列表页保持同一套终端面板语言。",
      quickJump: "快速跳转分类文章",
      allCategoriesDescription: "查看全部分类下的文章与更新记录。",
      categoryPosts: "浏览 {name} 主题下的全部文章和更新记录。",
      selectedSummary: "{name} 分类下找到 {count} 篇文章",
      empty: "暂无分类数据",
      emptyPosts: "当前分类下没有文章",
    },
    friends: {
      pageTitle: "友情链接",
      pageDescription: "与 {siteName} 交换友情链接",
      title: "友情链接",
      intro:
        "这里聚合已经通过审核的站点，也提供统一风格的申请面板，避免列表区和表单区像两个页面。",
      collection: "友链分组",
      exchangeRules: "友链交换",
      exchangeIntro: "欢迎交换友情链接，请确保您的网站满足以下条件：",
      rule1: "原创内容为主",
      rule2: "网站稳定运行",
      rule3: "无不良内容",
      siteInfo: "本站信息：",
      name: "名称",
      description: "描述",
      link: "链接",
      promptBrowse: "find ./links -maxdepth 1 -type f | sort",
      promptApply: "cat > friend-link.txt",
      promptRules: "sed -n '1,120p' rules.md",
    },
    friendForm: {
      title: "提交友链申请",
      intro: "填写站点信息后会提交到后台审核，审核通过后前台会自动展示。",
      reviewedOnline: "后台审核后上线",
      siteName: "站点名称",
      siteUrl: "站点链接",
      avatarUrl: "头像链接",
      category: "分类",
      description: "站点描述",
      reciprocal: "已添加本站友链",
      reciprocalHint: "这是提交申请前的必要条件。",
      copy: "复制",
      copied: "已复制",
      submit: "提交申请",
      reset: "重置",
      addReciprocalFirst: "请先添加本站友链后再提交申请。",
      submitting: "正在提交友链申请...",
      submitSuccess: "友链申请已提交，我们会尽快审核。",
      submitFailed: "提交失败：{message}",
      categoryTech: "技术",
      categoryLife: "生活",
      categoryDesign: "设计",
      categoryOther: "其他",
      descriptionPlaceholder: "简要介绍一下你的网站...",
    },
    friendCard: {
      externalLink: "外部链接",
    },
    tags: {
      pageTitle: "标签",
      title: "标签云",
      intro:
        "用更轻量的关键词维度检索文章。选中标签时，下方结果区会延续同一套终端卡片风格。",
      currentTag: "当前: #{tag}",
      selectedSummary: "标签 #{tag} 找到 {count} 篇文章",
      browseTags: "浏览标签",
      emptyTags: "暂无标签数据",
      emptyPosts: "没有找到该标签的文章",
    },
    timeline: {
      pageTitle: "时间轴",
      pageDescription: "记录 {ownerName} 的技术成长与生活点滴",
      title: "时间轴",
      subtitle: "共 {count} 篇内容 · 记录 {ownerName} 的技术成长与生活点滴",
      allYears: "全部",
    },
    reviews: {
      pageTitle: "评价",
      pageDescription: "记录游戏、音乐、动画、书籍与影视的体验和评价",
      title: "评价",
      subtitle: "记录游戏、音乐、动画、书籍与影视的体验和感悟",
      total: "总评价",
      average: "平均评分",
      completed: "已完成",
      inProgress: "进行中",
      emptyData: "暂无评价数据，请检查后端 API 连接",
      emptyFiltered: "当前筛选下暂无评价",
      currentFilter: "当前筛选: {type}",
      statusCompleted: "已完成",
      statusInProgress: "进行中",
      statusDropped: "已弃置",
      typeAll: "全部",
      typeGame: "游戏",
      typeAnime: "动画",
      typeMusic: "音乐",
      typeBook: "书籍",
      typeMovie: "影视",
    },
    notFound: {
      pageTitle: "页面未找到",
      pageDescription: "您访问的页面不存在",
      title: "404 - 页面未找到",
      intro:
        "当前请求没有命中任何内容节点。下面保留了终端化错误信息、可执行操作，以及可回退到的真实文章入口。",
      terminalLog: "终端错误日志",
      requestedRouteNotFound: "错误：请求的路由不存在",
      path: "路径",
      time: "时间",
      actions: "可执行操作",
      actionsIntro: "像命令面板一样，优先给出直接可走的恢复路径。",
      searchHint: "也可以直接使用顶部的搜索输入框，重新搜索相关文章。",
      recommended: "推荐入口",
      recommendedIntro:
        "使用真实文章数据，避免 404 页面再把人带进不存在的地址。",
      cannotLoad: "暂时无法读取文章列表。",
    },
    toc: {
      title: "目录",
      intro: "会跟着你当前读到的位置走，点一下就能跳到对应小节。",
    },
    codeCopy: {
      copy: "复制",
      copied: "已复制",
      failed: "失败",
    },
  },
  en: {
    common: {
      language: "Language",
      languages: {
        "zh-CN": "简体中文",
        en: "English",
      },
      all: "All",
      search: "Search",
      ai: "AI",
      article: "Article",
      tweet: "Update",
      posts: "Posts",
      tags: "Tags",
      categories: "Categories",
      friends: "Links",
      location: "Location",
      unknown: "Unknown",
      other: "Other",
      current: "Current",
      readTime: "Read time",
      readTimeMinutes: "{count} min read",
      characters: "{count} chars",
      postsCount: "{count} posts",
      tagsCount: "{count} tags",
      categoriesCount: "{count} categories",
      friendsCount: "{count} links",
      reviewsCount: "{count} reviews",
      resultsCount: "{count} results",
      reviewedOnly: "Approved links only",
      noData: "No data yet",
      noResults: "No matching results",
      open: "Open",
      close: "Close",
      submit: "Submit",
      cancel: "Cancel",
      clear: "Clear",
      reset: "Reset",
      refresh: "Refresh",
      reply: "Reply",
      like: "Like",
      visit: "Visit",
      readMore: "Read more",
      viewArticle: "Open article",
      viewAllArticles: "View all articles",
      viewAllLinks: "View all links",
      viewCategoryArticles: "View category posts",
      clearFilters: "Clear filters",
      resetFilters: "Reset filters",
      home: "Home",
      browsePosts: "Browse posts",
      goBack: "Go back",
      backToIndex: "Back to index",
      copyPermalink: "Copy permalink",
      locateParagraph: "Locate paragraph",
      maxChars: "Max {count} chars",
      optional: "Optional",
      pending: "Pending",
      approved: "Approved",
      completed: "Completed",
      inProgress: "In progress",
      featureOn: "Feature on",
      featureOff: "Feature off",
      emptyState: "Nothing here yet.",
      apiUnavailable: "API temporarily unavailable",
      humanVerification: "Human verification",
      turnstileHint:
        "Please complete the Cloudflare Turnstile check before submitting.",
      turnstileRequired: "Please complete the human verification first.",
      turnstileLoadFailed:
        "Failed to load human verification. Refresh the page and try again.",
      unknownError: "unknown error",
    },
    nav: {
      articles: "Articles",
      categories: "Categories",
      tags: "Tags",
      timeline: "Timeline",
      reviews: "Reviews",
      friends: "Links",
      about: "About",
      ask: "Ask AI",
    },
    header: {
      navigation: "Navigation",
      themeToggle: "Toggle theme",
      themePanelTitle: "Appearance",
      themeLight: "Light",
      themeDark: "Dark",
      themeSystem: "System",
      themeLightHint: "Always use the light interface",
      themeDarkHint: "Always use the dark interface",
      themeSystemHint: "Follow the device appearance",
      themeResolvedAs: "Currently applied: {mode}",
      toggleMenu: "Toggle menu",
      searchModeKeyword: "Search",
      searchModeAi: "AI",
      searchModeKeywordMobile: "Keyword Search",
      searchModeAiMobile: "AI Search",
      shellLabel: "Site Terminal",
      musicPanel: "Playback",
      searchPromptKeyword: "Site Search",
      searchPromptAi: "Ask AI",
      searchPlaceholderKeyword: "'keyword'",
      searchPlaceholderAi: "Type a question for the site AI",
      searchHintKeyword: "posts / tags / categories",
      searchHintAi: "open AI Q&A",
      aiModeTitle: "AI Q&A mode",
      aiModeHeading: "Send this question to the site AI",
      aiModeDescription:
        "Ask on the Q&A page and the system will answer with priority given to on-site content.",
      aiModeNotice:
        "Answers include related articles so visitors can keep reading.",
      aiModeCta: "Open AI Q&A to confirm",
      liveResults: "Live results",
      searching: "Searching {query} ...",
      searchFailed: "Search failed. Please try again later.",
      searchEmpty: "No content matched {query}.",
      searchEmptyCta: "Ask AI instead",
      searchAiFooter: "Open AI Q&A manually",
      searchAllResults: "View all results",
      untitled: "Untitled",
      manualConfirm: "AI questions must be confirmed manually",
    },
    footer: {
      session: "Session",
      copyright: "© {year} {site}. All rights reserved.",
      sitemap: "Sitemap",
      rss: "RSS feed",
      summary: "A place for posts, notes, and on-site reading paths.",
    },
    home: {
      pinned: "Pinned",
      quickJump: "Quick jump",
      about: "About",
      techStack: "Tech stack",
      systemStatus: "System status",
      hotNow: "Hot now",
      hotNowDescription:
        "Generated from 24h / 7d / 30d page-view and completion signals so visitors can switch windows and spot the strongest feedback loops quickly.",
      hotNowEmpty: "No hot content matched the current filters yet.",
      sortByViews: "Most viewed",
      sortByCompletes: "Most completed",
      sortByDepth: "Deepest reads",
      readingSignals: "Reading signals",
      readingSignalsDescription:
        "These stats switch with the selected window to summarize site-wide content consumption.",
      views: "Views",
      completes: "Completes",
      avgProgress: "Avg progress",
      avgDuration: "Avg duration",
      totalViews: "Total views",
      totalCompletes: "Total completes",
      statsWindow: "Window: last 7 days",
      statsWindowLabel: "Window: {label}",
      promptWelcome: "pwd",
      promptDiscoverDefault: "find ./posts -type f | sort",
      promptDiscoverFiltered: 'grep -Ril "{filters}" ./posts',
      promptPinned: 'grep -Ril "^pinned: true$" ./posts',
      promptPostsDefault: "find ./posts -type f | head -n {count}",
      promptPostsFiltered: 'grep -Ril "{filters}" ./posts | head -n {count}',
      promptPopular: "awk 'NR<=6 {print}' ./analytics/popular-posts.log",
      promptPopularRange:
        "awk 'NR<=6 {print}' ./analytics/popular-posts.log --window={label}",
      promptFriends: "find ./links -maxdepth 1 -type f | sort",
      promptAbout: "sed -n '1,80p' ~/profile.md",
    },
    articlesPage: {
      title: "Article Index",
      description:
        "Filter content by type, category, and tag to browse the full archive quickly.",
      totalPosts: "{count} posts",
      allCategories: "All categories",
      allTags: "All tags",
      emptyTitle: "No matching results",
      emptyDescription:
        "No posts matched the current filters. Clear a tag or keyword to browse the full archive again.",
      pageSummary: "Page {current}/{total} · {count} results",
      previous: "Prev",
      next: "Next",
    },
    searchPage: {
      pageTitle: "Site search",
      title: "Search results",
      intro:
        "The dedicated search page keeps the query visible and lets visitors narrow results by type, category, and tag.",
      promptIdle: "printf 'search query required\\n'",
      promptQuery: 'grep -Rin "{query}" ./posts',
      queryLabel: "Current query",
      searchTips:
        "Search uses the site index first and also applies synonyms plus lightweight typo correction automatically.",
      resultSummary: "Found {count} results",
      filteredSummary: "{count} results after filters",
      pageSummary: "Page {current}/{total} · {count} results",
      previous: "Prev",
      next: "Next",
      filtersTitle: "Refine results",
      allCategories: "All categories",
      allTags: "All tags",
      emptyQueryTitle: "Enter a keyword first",
      emptyQueryDescription:
        "Use the header search box or open this page with a ?q= query string.",
      emptyTitle: "No matching results",
      emptyDescription:
        "Try switching categories / tags or search again with another keyword.",
      askFallback: "Ask the AI instead",
    },
    article: {
      backToArticles: "Back to article index",
      documentSession: "Document session",
      filePath: "File path",
    },
    relatedPosts: {
      kicker: "Related traces",
      title: "Related Posts",
      description:
        "More nearby reading paths based on the current category and shared tags.",
      linked: "{count} linked",
      hotKicker: "Hot follow-up",
      hotTitle: "Popular related posts",
      hotDescription:
        "Uses the last 7 days of visit and reading signals to recommend the strongest-performing posts from the same category or shared tags.",
    },
    comments: {
      title: "Comment Terminal",
      kicker: "Discussion Buffer",
      description:
        "This is the discussion thread for the whole article. {count} approved comments are shown right now, and new messages enter moderation first.",
      writeComment: "Write comment",
      nickname: "Nickname",
      nicknamePlaceholder: "trail_reader",
      email: "Email",
      emailPlaceholder: "you@example.com",
      message: "Message",
      messagePlaceholder: "$ echo 'Leave your thoughts here...'",
      maxChars: "Max 500 chars",
      cancelReply: "Cancel reply",
      emptyTitle: "No comments yet",
      emptyDescription:
        "No one has posted here yet. Open the input panel above and be the first voice in this buffer.",
      today: "Today",
      yesterday: "Yesterday",
      daysAgo: "{count} days ago",
      weeksAgo: "{count} weeks ago",
      anonymous: "Anonymous",
      submitting: "Submitting comment...",
      submitSuccess: "Comment submitted. It will appear here after moderation.",
      submitFailed: "Submit failed: {message}",
      loadFailed: "Failed to load comments",
      noSelection: "No comment is selected.",
    },
    paragraphComments: {
      title: "Paragraph comments are enabled",
      kicker: "Paragraph Notes",
      intro:
        "Each natural paragraph in the article gets a lightweight discussion entry point, perfect for focused context, corrections, or follow-up questions.",
      scanning: "Scanning paragraph buffer...",
      noParagraphs: "No commentable paragraphs were found in this article.",
      summary:
        "{paragraphCount} paragraphs have comment entries, {discussedCount} already have discussion, and {approvedCount} approved paragraph comments are currently visible.",
      focusCurrent: "Focus current paragraph",
      panelTitle: "Paragraph discussion panel",
      panelKicker: "Paragraph thread",
      close: "Close",
      nickname: "Nickname",
      nicknamePlaceholder: "inline_reader",
      email: "Email",
      emailPlaceholder: "you@example.com",
      comment: "Comment",
      commentPlaceholder: "$ echo 'Comment on this paragraph only...'",
      maxChars: "Max 500 chars",
      clearReply: "Clear reply",
      replyTo: "Reply to",
      approvedThread: "Approved thread",
      pendingQueue: "Pending queue",
      emptyTitle: "No public comments on this paragraph yet",
      emptyDescription:
        "Use this space to add context, point out details, or ask a specific question. New comments go through moderation first.",
      loadingThread: "Loading approved comments for this paragraph...",
      loadFailedShort: "Load failed",
      loadFailed: "Load failed: {message}",
      selectedRequired: "No paragraph is currently selected.",
      contextMissing:
        "Paragraph context was lost. Please reopen the paragraph panel.",
      submitting: "Submitting paragraph comment...",
      submitSuccess:
        "Comment submitted. It has been placed into the local pending queue and will join the public thread after moderation.",
      submitFailed: "Submit failed: {message}",
      anonymous: "Anonymous",
      oneNote: "1 note",
      manyNotes: "{count} notes",
      zeroNotes: "comment",
      waitingReview: "waiting review",
      locateParagraph: "Locate paragraph",
      showMarkers: "Show paragraph comments",
      hideMarkers: "Hide paragraph comments",
      markersHidden:
        "Paragraph comment markers are hidden. You can turn them back on anytime.",
      badgeLabel: "Open comments for this paragraph",
    },
    ask: {
      pageTitle: "Ask AI",
      pageDescription: "An on-site AI Q&A entry for {siteName}",
      title: "On-site AI Q&A",
      subtitle:
        "Ask about the site and get answers with related articles attached for follow-up reading.",
      terminalLabel: "Q&A Assistant",
      assistantLabel: "Assistant Output",
      disabledStateLabel: "Feature Disabled",
      disabledTitle: "AI Q&A is not enabled yet",
      disabledDescription:
        "The real backend integration is already in place, but public Q&A is still disabled in site settings. Once it is enabled, this page and the navigation entry will become available automatically.",
      textareaPlaceholder:
        "Ask anything, for example: what has this blog written about frontend topics?",
      submit: "Ask now",
      idleStatus: "Type a question to get started.",
      examples: "Example questions",
      guide: "Asking tips",
      guide1:
        "1. Ask directly about topics, posts, viewpoints, or recurring themes on the site.",
      guide2:
        "2. Answers prioritize on-site material and include related reading when available.",
      guide3:
        "3. If the answer feels broad, try a more specific keyword or article topic.",
      emptyAnswer: "No answer yet.",
      requestFailed: "Request failed: {message}",
      streamUnsupported: "This browser cannot read streaming responses.",
      enterQuestion: "Enter a question first.",
      cacheRestored: "Restored the answer from the current session cache.",
      connecting: "Opening stream connection...",
      connectingShort: "Please wait...",
      processing: "Processing request...",
      complete: "Answer generated.",
      streamFailed: "Streaming request failed",
      streamInterrupted: "The streaming response ended early.",
      retryLater:
        "This request did not complete successfully. Please try again later.",
      prefixedQuestion:
        "The search query has been prefilled. Confirm manually to ask AI.",
      promptIdle: "cat > question.txt",
      promptEditing: "sed -n '1,12p' question.txt",
      promptSubmitting: "tail -f answer.stream",
      promptComplete: "printf 'sources=%s\\n' {count}",
      promptFailed: "echo 'retry'",
      sources: "Sources",
      sourceScore: "Score {score}",
      metaSources: "{count} related articles",
      metaSourcesWithTime: "{count} related articles · updated {time}",
    },
    about: {
      pageTitle: "About",
      title: "About",
      intro:
        "This page gathers the site owner profile, tech stack, system stats, and contact details while following the same language setting as the rest of the site.",
      techStackCount: "{count} tech items",
      profile: "Profile",
      contact: "Contact",
      website: "Website",
    },
    categories: {
      pageTitle: "Categories",
      title: "Categories",
      intro:
        "Browse posts by topic. This page now follows the same terminal language as the other list views.",
      quickJump: "Jump straight into category posts",
      allCategoriesDescription: "Browse posts and updates from every category.",
      categoryPosts: "Browse all posts and updates under {name}.",
      selectedSummary: "{count} posts in {name}",
      empty: "No category data yet",
      emptyPosts: "No posts found in this category",
    },
    friends: {
      pageTitle: "Links",
      pageDescription: "Exchange links with {siteName}",
      title: "Friend Links",
      intro:
        "This page gathers approved sites and keeps the application panel in the same visual language so the list and form feel like one screen.",
      collection: "Friend collection",
      exchangeRules: "Link exchange",
      exchangeIntro:
        "You are welcome to exchange links. Please make sure your site meets these conditions:",
      rule1: "Original content as the main focus",
      rule2: "Stable uptime",
      rule3: "No harmful content",
      siteInfo: "Site info:",
      name: "Name",
      description: "Description",
      link: "Link",
      promptBrowse: "find ./links -maxdepth 1 -type f | sort",
      promptApply: "cat > friend-link.txt",
      promptRules: "sed -n '1,120p' rules.md",
    },
    friendForm: {
      title: "Submit a link request",
      intro:
        "Fill in your site info and it will be sent to the moderation queue. Once approved, it will appear on the frontend automatically.",
      reviewedOnline: "Published after review",
      siteName: "Site name",
      siteUrl: "Site URL",
      avatarUrl: "Avatar URL",
      category: "Category",
      description: "Site description",
      reciprocal: "I already added this site to my links",
      reciprocalHint: "This is required before submission.",
      copy: "Copy",
      copied: "Copied",
      submit: "Submit request",
      reset: "Reset",
      addReciprocalFirst:
        "Please add this site to your links before submitting.",
      submitting: "Submitting link request...",
      submitSuccess: "Link request submitted. We will review it soon.",
      submitFailed: "Submit failed: {message}",
      categoryTech: "Tech",
      categoryLife: "Life",
      categoryDesign: "Design",
      categoryOther: "Other",
      descriptionPlaceholder: "Briefly describe your site...",
    },
    friendCard: {
      externalLink: "External link",
    },
    tags: {
      pageTitle: "Tags",
      title: "Tag Cloud",
      intro:
        "Browse posts through lightweight keyword slices. When a tag is selected, the result area keeps the same terminal card language.",
      currentTag: "Current: #{tag}",
      selectedSummary: "Tag #{tag} matched {count} posts",
      browseTags: "Browse tags",
      emptyTags: "No tag data yet",
      emptyPosts: "No posts found for this tag",
    },
    timeline: {
      pageTitle: "Timeline",
      pageDescription:
        "A timeline of {ownerName}'s technical growth and life notes",
      title: "Timeline",
      subtitle:
        "{count} entries · tracing {ownerName}'s technical growth and life notes",
      allYears: "All",
    },
    reviews: {
      pageTitle: "Reviews",
      pageDescription:
        "Notes and ratings for games, music, anime, books, and films",
      title: "Reviews",
      subtitle: "Tracking thoughts on games, music, anime, books, and films",
      total: "Total reviews",
      average: "Average rating",
      completed: "Completed",
      inProgress: "In progress",
      emptyData: "No review data yet. Please check the backend API connection.",
      emptyFiltered: "No reviews match the current filter",
      currentFilter: "Current filter: {type}",
      statusCompleted: "Completed",
      statusInProgress: "In progress",
      statusDropped: "Dropped",
      typeAll: "All",
      typeGame: "Games",
      typeAnime: "Anime",
      typeMusic: "Music",
      typeBook: "Books",
      typeMovie: "Films",
    },
    notFound: {
      pageTitle: "Page not found",
      pageDescription: "The page you requested does not exist",
      title: "404 - Page not found",
      intro:
        "The current request did not resolve to any content node. This page keeps the terminal-style error output, direct recovery actions, and real fallback articles.",
      terminalLog: "Terminal error log",
      requestedRouteNotFound: "error: requested route not found",
      path: "path",
      time: "time",
      actions: "Actions",
      actionsIntro:
        "Like a command palette, this page surfaces the most direct recovery paths first.",
      searchHint:
        "You can also use the search box in the header to search related posts again.",
      recommended: "Recommended entries",
      recommendedIntro:
        "These use real article data so the 404 page does not send people into more dead ends.",
      cannotLoad: "Unable to load the article list right now.",
    },
    toc: {
      title: "Contents",
      intro:
        "Follows your reading position and lets you jump to the right section with one click.",
    },
    codeCopy: {
      copy: "Copy",
      copied: "Copied",
      failed: "Failed",
    },
  },
} as const;

export type MessageCatalog = typeof messages;
