From adb9766502d9c884a54a11c8f705ff3ef5078bcd Mon Sep 17 00:00:00 2001
From: btea <2356281422@qq.com>
Date: Sat, 9 May 2026 09:09:36 +0800
Subject: [PATCH 1/7] feat: update downloads title desc and translate
 zh-CN/zh-TW

---
 app/pages/package/[[org]]/[name]/versions.vue | 46 ++++++++---
 i18n/locales/en.json                          | 35 ++++----
 i18n/locales/zh-CN.json                       | 15 ++--
 i18n/locales/zh-TW.json                       | 82 +++++++++++++++++--
 i18n/schema.json                              |  3 +
 5 files changed, 140 insertions(+), 41 deletions(-)

diff --git a/app/pages/package/[[org]]/[name]/versions.vue b/app/pages/package/[[org]]/[name]/versions.vue
index 2f91330670..07f10f74fc 100644
--- a/app/pages/package/[[org]]/[name]/versions.vue
+++ b/app/pages/package/[[org]]/[name]/versions.vue
@@ -119,8 +119,8 @@ const groupDownloadsMap = computed(() => {
   return map
 })
 
-function getDownloadsAriaLabel(downloads: number): string {
-  return `${numberFormatter.value.format(downloads)} ${t('package.downloads.title')}`
+function getDownloadsAriaLabel(downloads: number, version: string): string {
+  return `${numberFormatter.value.format(downloads)} ${t('package.downloads.version_distribution_title', { version })}`
 }
 
 // ─── Phase 2: full metadata (fired automatically after phase 1 completes) ────
@@ -377,9 +377,19 @@ const flatItems = computed<FlatItem[]>(() => {
             <span
               v-if="getVersionDownloads(latestTagRow!.version)"
               class="w-28 grid grid-flow-col auto-cols-max items-center gap-1 text-xs text-fg-muted tabular-nums justify-end"
-              :aria-label="getDownloadsAriaLabel(getVersionDownloads(latestTagRow!.version)!)"
+              :aria-label="
+                getDownloadsAriaLabel(
+                  getVersionDownloads(latestTagRow!.version)!,
+                  latestTagRow!.version,
+                )
+              "
               dir="ltr"
-              :title="getDownloadsAriaLabel(getVersionDownloads(latestTagRow!.version)!)"
+              :title="
+                getDownloadsAriaLabel(
+                  getVersionDownloads(latestTagRow!.version)!,
+                  latestTagRow!.version,
+                )
+              "
             >
               <span>{{ numberFormatter.format(getVersionDownloads(latestTagRow!.version)!) }}</span>
               <span class="i-lucide:chart-line" aria-hidden="true"></span>
@@ -446,9 +456,9 @@ const flatItems = computed<FlatItem[]>(() => {
             <span
               v-if="getVersionDownloads(row.version)"
               class="w-28 grid grid-flow-col auto-cols-max items-center justify-end gap-1 text-xs text-fg-muted tabular-nums shrink-0 relative z-10"
-              :aria-label="getDownloadsAriaLabel(getVersionDownloads(row.version)!)"
+              :aria-label="getDownloadsAriaLabel(getVersionDownloads(row.version)!, row.version)"
               dir="ltr"
-              :title="getDownloadsAriaLabel(getVersionDownloads(row.version)!)"
+              :title="getDownloadsAriaLabel(getVersionDownloads(row.version)!, row.version)"
             >
               <span>{{ numberFormatter.format(getVersionDownloads(row.version)!) }}</span>
               <span class="i-lucide:chart-line" aria-hidden="true"></span>
@@ -536,9 +546,13 @@ const flatItems = computed<FlatItem[]>(() => {
                     <span
                       v-if="groupDownloadsMap.has(item.groupKey)"
                       class="ms-auto w-28 grid grid-flow-col auto-cols-max items-center justify-end gap-1 text-xs text-fg-muted tabular-nums shrink-0"
-                      :aria-label="getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!)"
+                      :aria-label="
+                        getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!, item.groupKey)
+                      "
                       dir="ltr"
-                      :title="getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!)"
+                      :title="
+                        getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!, item.groupKey)
+                      "
                     >
                       <span>{{
                         numberFormatter.format(groupDownloadsMap.get(item.groupKey)!)
@@ -627,8 +641,12 @@ const flatItems = computed<FlatItem[]>(() => {
                       <span
                         v-if="getVersionDownloads(item.version)"
                         class="w-28 grid grid-flow-col auto-cols-max items-center justify-end gap-1 text-xs text-fg-muted tabular-nums shrink-0 relative z-10"
-                        :aria-label="getDownloadsAriaLabel(getVersionDownloads(item.version)!)"
-                        :title="getDownloadsAriaLabel(getVersionDownloads(item.version)!)"
+                        :aria-label="
+                          getDownloadsAriaLabel(getVersionDownloads(item.version)!, item.version)
+                        "
+                        :title="
+                          getDownloadsAriaLabel(getVersionDownloads(item.version)!, item.version)
+                        "
                         dir="ltr"
                       >
                         <span>{{
@@ -676,9 +694,13 @@ const flatItems = computed<FlatItem[]>(() => {
                   <span
                     v-if="groupDownloadsMap.has(item.groupKey)"
                     class="ms-auto w-28 grid grid-flow-col auto-cols-max items-center justify-end gap-1 text-xs text-fg-muted tabular-nums shrink-0"
-                    :aria-label="getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!)"
+                    :aria-label="
+                      getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!, item.groupKey)
+                    "
                     dir="ltr"
-                    :title="getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!)"
+                    :title="
+                      getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!, item.groupKey)
+                    "
                   >
                     <span>{{ numberFormatter.format(groupDownloadsMap.get(item.groupKey)!) }}</span>
                     <span class="i-lucide:chart-line" aria-hidden="true"></span>
diff --git a/i18n/locales/en.json b/i18n/locales/en.json
index ed50c69116..229e21302b 100644
--- a/i18n/locales/en.json
+++ b/i18n/locales/en.json
@@ -8,8 +8,8 @@
   },
   "built_at": "built {0}",
   "alt_logo": "npmx logo",
-  "tagline": "a fast, modern browser for the npm registry",
-  "non_affiliation_disclaimer": "not affiliated with npm, Inc.",
+  "tagline": "A fast, modern browser for the npm registry",
+  "non_affiliation_disclaimer": "Not affiliated with npm, Inc.",
   "trademark_disclaimer": "npm is a registered trademark of npm, Inc. This site is not affiliated with npm, Inc.",
   "footer": {
     "about": "about",
@@ -50,7 +50,7 @@
   },
   "search": {
     "label": "Search npm packages",
-    "placeholder": "search packages...",
+    "placeholder": "Search packages...",
     "button": "search",
     "searching": "Searching...",
     "found_packages": "No packages found | Found 1 package | Found {count} packages",
@@ -58,7 +58,7 @@
     "updating": "(updating...)",
     "no_results": "No packages found for \"{query}\"",
     "rate_limited": "Hit npm rate limit, try again in a moment",
-    "title": "search",
+    "title": "Search",
     "title_search": "search: {search}",
     "title_packages": "search packages",
     "meta_description": "Search results for '{search}'",
@@ -84,14 +84,14 @@
     "instant_search_advisory": "{label} {state} — {action}"
   },
   "command_palette": {
-    "title": "command palette",
+    "title": "Command palette",
     "quick_actions": "jump to...",
     "subtitle": "navigate across npmx and switch settings quickly",
     "subtitle_languages": "choose a language or help improve translations",
     "instructions": "Type to filter commands. Use the arrow keys to move through results and Enter to run a command.",
     "input_label": "Command palette search",
     "results_label": "Command results",
-    "placeholder": "type a command...",
+    "placeholder": "Type a command...",
     "back": "Back",
     "empty": "No matching commands",
     "empty_search_hint": "Press Enter to search for \"{query}\".",
@@ -205,7 +205,7 @@
   },
   "blog": {
     "title": "Blog",
-    "heading": "blog",
+    "heading": "Blog",
     "meta_description": "Insights and updates from the npmx community",
     "author": {
       "view_profile": "View {name}'s profile on Bluesky"
@@ -230,8 +230,8 @@
     }
   },
   "settings": {
-    "title": "settings",
-    "tagline": "customize your npmx experience",
+    "title": "Settings",
+    "tagline": "Customize your npmx experience",
     "meta_description": "Customize your npmx.dev experience with theme, language, and display preferences.",
     "sections": {
       "appearance": "Appearance",
@@ -715,6 +715,7 @@
     },
     "downloads": {
       "title": "Weekly Downloads",
+      "version_distribution_title": "weekly downloads for version {version}",
       "community_distribution": "View community adoption distribution",
       "subtitle": "Across all versions",
       "sparkline_nav_hint": "Use ← →"
@@ -835,7 +836,7 @@
       "copied": "Copied",
       "paste_token": "Then paste the token below to connect:",
       "token_label": "Token",
-      "token_placeholder": "paste token here...",
+      "token_placeholder": "Paste token here...",
       "advanced": "Advanced options",
       "port_label": "Port",
       "warning": "WARNING",
@@ -851,7 +852,7 @@
       "clear_all": "clear all",
       "refresh": "Refresh operations",
       "empty": "No operations queued",
-      "empty_hint": "Add operations from package or org pages",
+      "empty_hint": "Add operations from package or organization pages",
       "active_label": "Active operations",
       "otp_required": "OTP required",
       "otp_prompt": "Enter OTP to continue",
@@ -952,7 +953,7 @@
     "page": {
       "packages_title": "Packages",
       "no_packages": "No public packages found for",
-      "no_packages_hint": "This user may not exist or has no public packages.",
+      "no_packages_hint": "This user may not exist, or has no public packages.",
       "failed_to_load": "Failed to load user packages",
       "no_match": "No packages match \"{query}\"",
       "filter_placeholder": "Filter {count} package... | Filter {count} packages..."
@@ -1150,7 +1151,7 @@
   },
   "about": {
     "title": "About",
-    "heading": "about",
+    "heading": "About",
     "meta_description": "npmx is a fast, modern browser for the npm registry. A great UX/DX for exploring npm packages.",
     "what_we_are": {
       "title": "What we are",
@@ -1501,7 +1502,7 @@
     }
   },
   "privacy_policy": {
-    "title": "privacy policy",
+    "title": "Privacy policy",
     "last_updated": "Last updated: {date}",
     "welcome": "Welcome to {app}. We are committed to protecting your privacy. This policy explains what data we collect, how we use it, and your rights regarding your information.",
     "cookies": {
@@ -1581,7 +1582,7 @@
     }
   },
   "a11y": {
-    "title": "accessibility",
+    "title": "Accessibility",
     "footer_title": "a11y",
     "welcome": "We want {app} to be usable by as many people as possible.",
     "approach": {
@@ -1611,7 +1612,7 @@
     }
   },
   "translation_status": {
-    "title": "translation status",
+    "title": "Translation status",
     "generated_at": "Generation date: {date}",
     "welcome": "If you're interested in helping us to translate {npmx} into one of the languages listed below, you've come to the right place! This auto-updating page always lists all the content that could use your help right now.",
     "p1": "We use {lang} as the default language, with a total of {count}. If you'd like to help add translations, locate the language in {bylang} and expand the details.",
@@ -1679,7 +1680,7 @@
     "browse_brand": "Browse brand kit"
   },
   "brand": {
-    "title": "Brand",
+    "heading": "Brand",
     "heading": "brand",
     "meta_description": "npmx brand guidelines, logos, colors, and typography for use in press and media.",
     "intro": "Resources and guidelines for using the npmx brand in your projects, articles, and media.",
diff --git a/i18n/locales/zh-CN.json b/i18n/locales/zh-CN.json
index eb423981ba..99895669ef 100644
--- a/i18n/locales/zh-CN.json
+++ b/i18n/locales/zh-CN.json
@@ -23,7 +23,7 @@
     "brand": "品牌",
     "resources": "资源",
     "features": "功能",
-    "other": "其它"
+    "other": "其他"
   },
   "shortcuts": {
     "section": {
@@ -46,7 +46,7 @@
     "disable_shortcuts": "你可以在{settings}中禁用快捷键。",
     "open_main": "查看主要信息",
     "open_diff": "查看版本差异",
-    "open_timeline": "时间线"
+    "open_timeline": "查看时间线"
   },
   "search": {
     "label": "搜索 npm 包",
@@ -386,11 +386,11 @@
       "deps": "{count} 个依赖项"
     },
     "size_decrease": {
-      "title_size": "自 v{version} 起，包体积已减小！",
-      "title_deps": "自 v{version} 起，依赖数量已减少！",
-      "title_both": "自 v{version} 起，包体积和依赖数量均已减少！",
-      "size": "安装体积减少了 {percent}（缩小了 {size}）",
-      "deps": "减少了 {count} 个依赖"
+      "title_size": "自 v{version} 以来体积显著减少",
+      "title_deps": "自 v{version} 以来依赖项数量显著减少",
+      "title_both": "自 v{version} 以来体积和依赖项显著减少",
+      "size": "安装大小减少了 {percent} (减少了 {size})",
+      "deps": "{count} 个依赖项减少"
     },
     "replacement": {
       "title": "你可能不需要这个依赖。",
@@ -711,6 +711,7 @@
     },
     "downloads": {
       "title": "每周下载量",
+      "version_distribution_title": "{version} 版本的每周下载量",
       "community_distribution": "查看社区采用分布",
       "subtitle": "涵盖所有版本",
       "sparkline_nav_hint": "使用 ← →"
diff --git a/i18n/locales/zh-TW.json b/i18n/locales/zh-TW.json
index 623e3955fe..e085f9e267 100644
--- a/i18n/locales/zh-TW.json
+++ b/i18n/locales/zh-TW.json
@@ -20,7 +20,10 @@
     "chat": "聊天",
     "builders_chat": "開發者聊天",
     "keyboard_shortcuts": "鍵盤快捷鍵",
-    "brand": "品牌"
+    "brand": "品牌",
+    "resources": "資源",
+    "features": "功能特色",
+    "other": "其他"
   },
   "shortcuts": {
     "section": {
@@ -42,7 +45,8 @@
     "open_docs": "開啟文件",
     "disable_shortcuts": "你可以在 {settings} 中停用鍵盤快速鍵。",
     "open_main": "開啟主要資訊",
-    "open_diff": "開啟版本差異"
+    "open_diff": "開啟版本差異",
+    "open_timeline": "開啟時間軸"
   },
   "search": {
     "label": "搜尋 npm 套件",
@@ -280,7 +284,8 @@
       "black": "黑色"
     },
     "keyboard_shortcuts_enabled": "啟用鍵盤快速鍵",
-    "keyboard_shortcuts_enabled_description": "若與其他瀏覽器或系統快捷鍵衝突，可停用鍵盤快速鍵"
+    "keyboard_shortcuts_enabled_description": "若與其他瀏覽器或系統快捷鍵衝突，可停用鍵盤快速鍵",
+    "enable_code_ligatures": "啟用程式碼連字"
   },
   "i18n": {
     "missing_keys": "{count} 項缺少翻譯",
@@ -312,6 +317,7 @@
     "warnings": "警告：",
     "go_back_home": "回到首頁",
     "per_week": "/ 週",
+    "per_week_short": "/週",
     "vanity_downloads_hint": "顯示下載量：未顯示套件 | 顯示下載量：顯示的套件 | 顯示下載量：顯示的 {count} 個套件總和",
     "sort": {
       "name": "名稱",
@@ -334,6 +340,7 @@
       "gitea": "在 Gitea 上檢視",
       "gitee": "在 Gitee 上檢視",
       "radicle": "在 Radicle 上檢視",
+      "socket_dev": "在 socket.dev 上檢視",
       "sourcehut": "在 SourceHut 上檢視",
       "tangled": "在 Tangled 上檢視"
     },
@@ -378,9 +385,18 @@
       "size": "安裝大小增加了 {percent}（多出 {size}）",
       "deps": "增加了 {count} 個相依套件"
     },
+    "size_decrease": {
+      "title_size": "自 v{version} 起，套件大小顯著減少！",
+      "title_deps": "自 v{version} 起，相依套件數量顯著減少！",
+      "title_both": "自 v{version} 起，套件大小與相依套件數量皆顯著減少！",
+      "size": "安裝大小減少了 {percent}（減少了 {size}）",
+      "deps": "減少了 {count} 個相依套件"
+    },
     "replacement": {
       "title": "你可能不需要這個相依套件。",
+      "example": "範例：",
       "native": "此功能自 Node.js {nodeVersion} 起已內建，可直接使用 {replacement} 取代。",
+      "native_no_version": "此套件可以用 {replacement} 取代。",
       "simple": "社群標記此套件為冗餘，建議改用：{replacement}。",
       "documented": "社群標記此套件有更高效能的替代方案",
       "none": "此套件已被標記為不再需要，其功能很可能已由所有引擎原生提供。",
@@ -431,11 +447,15 @@
       "docs": "文件",
       "fund": "贊助",
       "compare": "比較",
+      "timeline": "時間軸",
       "compare_this_package": "比較這個套件"
     },
     "likes": {
       "like": "喜歡這個套件",
-      "unlike": "取消喜歡這個套件"
+      "unlike": "取消喜歡這個套件",
+      "top_rank_tooltip": "這是 npmx 上喜歡數最多的前 10 名套件之一！（第 #{rank} 名）",
+      "top_rank_label": "#{rank}",
+      "top_rank_link_label": "查看喜歡排行榜。此套件排名第 #{rank}。"
     },
     "docs": {
       "contents": "目錄",
@@ -476,7 +496,8 @@
         "warning": "警告",
         "caution": "小心"
       },
-      "copy_as_markdown": "複製 README 為 Markdown 格式"
+      "copy_as_markdown": "複製 README 為 Markdown 格式",
+      "error_loading": "載入 README 詳情失敗"
     },
     "provenance_section": {
       "title": "來源",
@@ -555,6 +576,34 @@
       "current_tags": "當前標籤",
       "no_match_filter": "沒有版本符合 {filter}"
     },
+    "timeline": {
+      "load_more": "載入更多",
+      "load_error": "載入時間軸失敗。請稍後再試。",
+      "size_increase": "安裝大小增加了 {percent}%（{size}）",
+      "size_decrease": "安裝大小減少了 {percent}%（{size}）",
+      "dep_increase": "新增了 {count} 個相依套件",
+      "dep_decrease": "移除了 {count} 個相依套件",
+      "license_change": "授權從 {from} 變更為 {to}",
+      "esm_added": "模組類型已變更為 ESM",
+      "esm_removed": "模組類型已從 ESM 變更為 CJS",
+      "types_added": "已新增 TypeScript 型別",
+      "types_removed": "已移除 TypeScript 型別",
+      "trusted_publisher_added": "已啟用信任發佈",
+      "trusted_publisher_removed": "已移除信任發佈",
+      "provenance_added": "已啟用來源證明",
+      "provenance_removed": "已移除來源證明",
+      "chart": {
+        "tab_aria_label": "指標選取",
+        "base_scale": "Y 軸從零開始",
+        "zoom": "縮放",
+        "reset_minimap": "重置縮略圖",
+        "copy_alt": {
+          "key_changes": "主要變更：{version_events}。",
+          "version_events": "版本 {version}：{events}",
+          "general_description": "折線圖呈現 {package} 套件的 {metric}，從版本 {first} 到 {last}。版本 {first} 的 {metric} 為 {first_value}，版本 {last} 的 {metric} 為 {last_value}（整體變化 {overall_progress_percentage}%）。{key_changes} {watermark}。"
+        }
+      }
+    },
     "dependencies": {
       "title": "相依（{count} 個）",
       "list_label": "套件相依",
@@ -659,6 +708,7 @@
     },
     "downloads": {
       "title": "每週下載量",
+      "version_distribution_title": "{version} 每週下載量",
       "community_distribution": "檢視社群採用分布",
       "subtitle": "所有版本",
       "sparkline_nav_hint": "使用 ← →"
@@ -757,6 +807,16 @@
       "tarball": "下載 Tarball（.tar.gz）"
     }
   },
+  "leaderboard": {
+    "likes": {
+      "title": "喜歡排行榜",
+      "description": "目前 npmx 上喜歡數最多的 10 個套件。",
+      "rank": "排名",
+      "likes": "喜歡數",
+      "unavailable_title": "目前尚無喜歡排行榜",
+      "unavailable_description": "目前沒有可顯示的喜歡排行榜。"
+    }
+  },
   "connector": {
     "modal": {
       "title": "本機連線器",
@@ -1323,6 +1383,18 @@
         "vulnerabilities": {
           "label": "漏洞",
           "description": "已知安全漏洞"
+        },
+        "githubStars": {
+          "label": "GitHub 星星數",
+          "description": "GitHub 儲存庫的星星數量"
+        },
+        "githubIssues": {
+          "label": "GitHub Issues",
+          "description": "GitHub 儲存庫的 Issue 數量"
+        },
+        "createdAt": {
+          "label": "建立時間",
+          "description": "套件建立時間"
         }
       },
       "values": {
diff --git a/i18n/schema.json b/i18n/schema.json
index 55368f3295..ae01f290ba 100644
--- a/i18n/schema.json
+++ b/i18n/schema.json
@@ -2149,6 +2149,9 @@
             "title": {
               "type": "string"
             },
+            "version_distribution_title": {
+              "type": "string"
+            },
             "community_distribution": {
               "type": "string"
             },

From 4d327ae3ba63721371cacd35f9066e131fe19c8e Mon Sep 17 00:00:00 2001
From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com>
Date: Sat, 9 May 2026 01:14:00 +0000
Subject: [PATCH 2/7] [autofix.ci] apply automated fixes

---
 i18n/locales/cs-CZ.json      | 18 ++++++++++++++++--
 i18n/locales/de.json         | 15 +++++++++++++--
 i18n/locales/es.json         | 35 +++++++++++++++++++++++++++++++++--
 i18n/locales/id-ID.json      | 35 +++++++++++++++++++++++++++++++++--
 i18n/locales/nl.json         | 10 +++++++++-
 i18n/locales/pt-BR.json      |  9 +++++++--
 i18n/locales/pt-PT.json      |  6 ++++--
 i18n/locales/ru-RU.json      | 10 ++++++++--
 i18n/locales/sr-Latn-RS.json | 35 +++++++++++++++++++++++++++++++++--
 i18n/locales/vi-VN.json      | 35 +++++++++++++++++++++++++++++++++--
 i18n/locales/zh-CN.json      |  1 -
 i18n/locales/zh-TW.json      |  1 -
 12 files changed, 189 insertions(+), 21 deletions(-)

diff --git a/i18n/locales/cs-CZ.json b/i18n/locales/cs-CZ.json
index b5ffca3a02..72e6c0df32 100644
--- a/i18n/locales/cs-CZ.json
+++ b/i18n/locales/cs-CZ.json
@@ -380,6 +380,7 @@
       "size": "Velikost instalace se zvýšila o {percent} (větší o {size})",
       "deps": "{count} další závislostí"
     },
+    "size_decrease": {},
     "replacement": {
       "title": "Možná tuto závislost nepotřebujete.",
       "native": "Tento balíček lze nahradit {replacement}, dostupné od Node {nodeVersion}.",
@@ -557,6 +558,11 @@
       "current_tags": "Aktuální značky",
       "no_match_filter": "Žádné verze neodpovídají {filter}"
     },
+    "timeline": {
+      "chart": {
+        "copy_alt": {}
+      }
+    },
     "dependencies": {
       "title": "Závislosti ({count})",
       "list_label": "Závislosti balíčku",
@@ -759,6 +765,9 @@
       "tarball": "Stáhnout Tarball jako .tar.gz"
     }
   },
+  "leaderboard": {
+    "likes": {}
+  },
   "connector": {
     "modal": {
       "title": "Lokální konektor",
@@ -1236,6 +1245,9 @@
       "packages_selected": "Vybrané balíčky: {count}/{max}.",
       "add_hint": "Přidejte alespoň 2 balíčky ke srovnání."
     },
+    "scatter_chart": {
+      "copy_alt": {}
+    },
     "no_dependency": {
       "label": "(Žádná závislost)",
       "typeahead_title": "Co by udělal James?",
@@ -1314,7 +1326,10 @@
         "vulnerabilities": {
           "label": "Zranitelnosti",
           "description": "Známé bezpečnostní zranitelnosti"
-        }
+        },
+        "githubStars": {},
+        "githubIssues": {},
+        "createdAt": {}
       },
       "values": {
         "any": "Jakékoliv",
@@ -1592,7 +1607,6 @@
     "browse_brand": "Procházet sadu značky"
   },
   "brand": {
-    "title": "Značka",
     "heading": "značka",
     "meta_description": "Pokyny k značce npmx, loga, barvy a typografie pro použití v tisku a médiích.",
     "intro": "Zdroje a pokyny pro používání značky npmx ve vašich projektech, článcích a médiích.",
diff --git a/i18n/locales/de.json b/i18n/locales/de.json
index e805f32888..9c40129511 100644
--- a/i18n/locales/de.json
+++ b/i18n/locales/de.json
@@ -379,6 +379,7 @@
       "size": "Installationsgröße um {percent} gestiegen ({size} größer)",
       "deps": "{count} zusätzliche Abhängigkeiten"
     },
+    "size_decrease": {},
     "replacement": {
       "title": "Du brauchst diese Abhängigkeit vielleicht nicht.",
       "native": "Dies kann durch {replacement} ersetzt werden, verfügbar seit Node {nodeVersion}.",
@@ -556,6 +557,11 @@
       "current_tags": "Aktuelle Tags",
       "no_match_filter": "Keine Versionen entsprechen {filter}"
     },
+    "timeline": {
+      "chart": {
+        "copy_alt": {}
+      }
+    },
     "dependencies": {
       "title": "Abhängigkeit ({count}) | Abhängigkeiten ({count})",
       "list_label": "Paketabhängigkeiten",
@@ -758,6 +764,9 @@
       "tarball": "Tarball als .tar.gz herunterladen"
     }
   },
+  "leaderboard": {
+    "likes": {}
+  },
   "connector": {
     "modal": {
       "title": "Lokaler Connector",
@@ -1316,7 +1325,10 @@
         "vulnerabilities": {
           "label": "Sicherheitslücken",
           "description": "Bekannte Sicherheitsrisiken"
-        }
+        },
+        "githubStars": {},
+        "githubIssues": {},
+        "createdAt": {}
       },
       "values": {
         "any": "Beliebig",
@@ -1594,7 +1606,6 @@
     "browse_brand": "Marken-Kit durchsuchen"
   },
   "brand": {
-    "title": "marke",
     "heading": "marke",
     "meta_description": "npmx-Markenrichtlinien, Logos, Farben und Typografie zur Verwendung in Presse und Medien.",
     "intro": "Ressourcen und Richtlinien für die Verwendung der npmx-Marke in deinen Projekten, Artikeln und Medien.",
diff --git a/i18n/locales/es.json b/i18n/locales/es.json
index 9bcb7263fc..a008330c7d 100644
--- a/i18n/locales/es.json
+++ b/i18n/locales/es.json
@@ -76,6 +76,23 @@
     "instant_search_turn_off": "desactivar",
     "instant_search_advisory": "{label} {state} — {action}"
   },
+  "command_palette": {
+    "state": {},
+    "groups": {},
+    "actions": {},
+    "connections": {},
+    "navigation": {},
+    "links": {},
+    "package_links": {},
+    "theme": {},
+    "package": {},
+    "package_actions": {},
+    "code": {},
+    "diff": {},
+    "version": {},
+    "status": {},
+    "announcements": {}
+  },
   "nav": {
     "main_navigation": "Principal",
     "popular_packages": "Paquetes populares",
@@ -265,6 +282,7 @@
       "size": "El tamaño de instalación aumentó un {percent} ({size} más grande)",
       "deps": "{count} dependencias más"
     },
+    "size_decrease": {},
     "replacement": {
       "title": "Es posible que no necesite esta dependencia.",
       "native": "Esto se puede reemplazar con {replacement}, disponible desde Node {nodeVersion}.",
@@ -442,6 +460,11 @@
       "current_tags": "Etiquetas actuales",
       "no_match_filter": "Ninguna versión coincide con {filter}"
     },
+    "timeline": {
+      "chart": {
+        "copy_alt": {}
+      }
+    },
     "dependencies": {
       "title": "Dependencias ({count})",
       "list_label": "Dependencias del paquete",
@@ -644,6 +667,9 @@
       "tarball": "Descargar Tarball como .tar.gz"
     }
   },
+  "leaderboard": {
+    "likes": {}
+  },
   "connector": {
     "modal": {
       "title": "Conector Local",
@@ -1117,6 +1143,9 @@
       "packages_selected": "{count}/{max} paquetes seleccionados.",
       "add_hint": "Añade al menos 2 paquetes para comparar."
     },
+    "scatter_chart": {
+      "copy_alt": {}
+    },
     "no_dependency": {
       "label": "(Sin dependencia)",
       "typeahead_title": "¿Qué haría James?",
@@ -1195,7 +1224,10 @@
         "vulnerabilities": {
           "label": "Vulnerabilidades",
           "description": "Vulnerabilidades de seguridad conocidas"
-        }
+        },
+        "githubStars": {},
+        "githubIssues": {},
+        "createdAt": {}
       },
       "values": {
         "any": "Cualquiera",
@@ -1473,7 +1505,6 @@
     "browse_brand": "Explorar kit de marca"
   },
   "brand": {
-    "title": "Marca",
     "heading": "marca",
     "meta_description": "Directrices de la marca npmx, logotipos, colores y tipografía para uso en prensa y medios.",
     "intro": "Recursos y directrices para usar la marca npmx en tus proyectos, artículos y medios.",
diff --git a/i18n/locales/id-ID.json b/i18n/locales/id-ID.json
index 9646ca17b1..aca880ef5d 100644
--- a/i18n/locales/id-ID.json
+++ b/i18n/locales/id-ID.json
@@ -76,6 +76,23 @@
     "instant_search_turn_off": "nonaktifkan",
     "instant_search_advisory": "{label} {state} — {action}"
   },
+  "command_palette": {
+    "state": {},
+    "groups": {},
+    "actions": {},
+    "connections": {},
+    "navigation": {},
+    "links": {},
+    "package_links": {},
+    "theme": {},
+    "package": {},
+    "package_actions": {},
+    "code": {},
+    "diff": {},
+    "version": {},
+    "status": {},
+    "announcements": {}
+  },
   "nav": {
     "main_navigation": "Utama",
     "popular_packages": "Paket populer",
@@ -265,6 +282,7 @@
       "size": "Ukuran instalasi meningkat sebesar {percent} ({size} lebih besar)",
       "deps": "{count} lebih banyak dependensi"
     },
+    "size_decrease": {},
     "replacement": {
       "title": "Mungkin Anda tidak butuh dependensi ini.",
       "native": "Paket ini dapat diganti dengan {replacement}, tersedia sejak Node {nodeVersion}.",
@@ -442,6 +460,11 @@
       "current_tags": "Tag Saat Ini",
       "no_match_filter": "Tidak ada versi yang cocok dengan {filter}"
     },
+    "timeline": {
+      "chart": {
+        "copy_alt": {}
+      }
+    },
     "dependencies": {
       "title": "Dependensi ({count})",
       "list_label": "Dependensi paket",
@@ -644,6 +667,9 @@
       "tarball": "Unduh Tarball sebagai .tar.gz"
     }
   },
+  "leaderboard": {
+    "likes": {}
+  },
   "connector": {
     "modal": {
       "title": "Konektor Lokal",
@@ -1117,6 +1143,9 @@
       "packages_selected": "{count}/{max} paket dipilih.",
       "add_hint": "Tambah setidaknya 2 paket untuk dibandingkan."
     },
+    "scatter_chart": {
+      "copy_alt": {}
+    },
     "no_dependency": {
       "label": "(Tanpa Ketergantungan)",
       "typeahead_title": "Apa yang Akan Anda Lakukan?",
@@ -1195,7 +1224,10 @@
         "vulnerabilities": {
           "label": "Kerentanan",
           "description": "Kerentanan keamanan yang diketahui"
-        }
+        },
+        "githubStars": {},
+        "githubIssues": {},
+        "createdAt": {}
       },
       "values": {
         "any": "Apa saja",
@@ -1473,7 +1505,6 @@
     "browse_brand": "Jelajahi kit merek"
   },
   "brand": {
-    "title": "Merek",
     "heading": "merek",
     "meta_description": "Panduan merek npmx, termasuk logo, warna, dan tipografi untuk digunakan dalam pers dan media.",
     "intro": "Sumber daya dan panduan untuk menggunakan merek npmx dalam proyek, artikel, dan media Anda.",
diff --git a/i18n/locales/nl.json b/i18n/locales/nl.json
index e6b67e109d..7d9fb70faa 100644
--- a/i18n/locales/nl.json
+++ b/i18n/locales/nl.json
@@ -383,6 +383,7 @@
       "size": "De installatiegrootte is toegenomen met {percent} ({size} groter)",
       "deps": "{count} meer dependencies"
     },
+    "size_decrease": {},
     "replacement": {
       "title": "U heeft waarschijnlijk dit niet nodig",
       "native": "Dit kan vervangen worden door {replacement}, Beschikbaar sinds node {nodeVersion}.",
@@ -563,6 +564,11 @@
       "current_tags": "Huidige tags",
       "no_match_filter": "Geen versies die voldoen aan {filter}"
     },
+    "timeline": {
+      "chart": {
+        "copy_alt": {}
+      }
+    },
     "dependencies": {
       "title": "Dependency ({count}) | Dependencies ({count})",
       "list_label": "Pakket dependencies",
@@ -765,6 +771,9 @@
       "tarball": "Download Tarball als .tar.gz"
     }
   },
+  "leaderboard": {
+    "likes": {}
+  },
   "connector": {
     "modal": {
       "title": "Lokale Connector",
@@ -1522,7 +1531,6 @@
     "browse_brand": "Bekijk brand kit"
   },
   "brand": {
-    "title": "Merk",
     "heading": "merk",
     "meta_description": "npmx merkrichtlijnen, logo’s, kleuren en typografie voor gebruik in de pers en de media.",
     "intro": "Hulpbronnen en richtlijnen voor het gebruik van het merk npmx in uw projecten, artikelen en media.",
diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json
index a09e5e5ae8..624010b203 100644
--- a/i18n/locales/pt-BR.json
+++ b/i18n/locales/pt-BR.json
@@ -587,7 +587,10 @@
       "trusted_publisher_added": "Publicação de confiança ativada",
       "trusted_publisher_removed": "Publicação de confiança removida",
       "provenance_added": "Proveniência ativada",
-      "provenance_removed": "Proveniência removida"
+      "provenance_removed": "Proveniência removida",
+      "chart": {
+        "copy_alt": {}
+      }
     },
     "dependencies": {
       "title": "Dependências ({count})",
@@ -791,6 +794,9 @@
       "tarball": "Baixar Tarball como .tar.gz"
     }
   },
+  "leaderboard": {
+    "likes": {}
+  },
   "connector": {
     "modal": {
       "title": "Conector Local",
@@ -1647,7 +1653,6 @@
     "browse_brand": "Navegar kit da marca"
   },
   "brand": {
-    "title": "Marca",
     "heading": "marca",
     "meta_description": "Diretrizes da marca npmx, logotipos, cores e tipografia para uso em imprensa e mídia.",
     "intro": "Recursos e diretrizes para usar a marca npmx em seus projetos, artigos e mídias.",
diff --git a/i18n/locales/pt-PT.json b/i18n/locales/pt-PT.json
index 8540dec556..b9c1bb5dca 100644
--- a/i18n/locales/pt-PT.json
+++ b/i18n/locales/pt-PT.json
@@ -591,7 +591,10 @@
       "trusted_publisher_added": "Publicação de confiança ativada",
       "trusted_publisher_removed": "Publicação de confiança removida",
       "provenance_added": "Proveniência ativada",
-      "provenance_removed": "Proveniência removida"
+      "provenance_removed": "Proveniência removida",
+      "chart": {
+        "copy_alt": {}
+      }
     },
     "dependencies": {
       "title": "Dependência ({count}) | Dependências ({count})",
@@ -1661,7 +1664,6 @@
     "browse_brand": "Explorar kit de marca"
   },
   "brand": {
-    "title": "Marca",
     "heading": "marca",
     "meta_description": "Diretrizes da marca npmx, logótipos, cores e tipografia para uso em imprensa e media.",
     "intro": "Recursos e diretrizes para usar a marca npmx nos teus projetos, artigos e media.",
diff --git a/i18n/locales/ru-RU.json b/i18n/locales/ru-RU.json
index 66dc858a5a..6cd53b3d30 100644
--- a/i18n/locales/ru-RU.json
+++ b/i18n/locales/ru-RU.json
@@ -381,6 +381,7 @@
       "size": "Размер при установке увеличился на {percent} (на {size} больше)",
       "deps": "На {count} зависимостей больше"
     },
+    "size_decrease": {},
     "replacement": {
       "title": "Возможно, вам не нужна эта зависимость.",
       "native": "Это можно заменить на {replacement}, доступный начиная с Node {nodeVersion}.",
@@ -575,7 +576,10 @@
       "trusted_publisher_added": "Доверенная публикация включена",
       "trusted_publisher_removed": "Доверенная публикация удалена",
       "provenance_added": "Происхождение включено",
-      "provenance_removed": "Происхождение удалено"
+      "provenance_removed": "Происхождение удалено",
+      "chart": {
+        "copy_alt": {}
+      }
     },
     "dependencies": {
       "title": "Зависимости ({count})",
@@ -779,6 +783,9 @@
       "tarball": "Скачать tarball (.tar.gz)"
     }
   },
+  "leaderboard": {
+    "likes": {}
+  },
   "connector": {
     "modal": {
       "title": "Локальный коннектор",
@@ -1635,7 +1642,6 @@
     "browse_brand": "Набор бренда"
   },
   "brand": {
-    "title": "Бренд",
     "heading": "бренд",
     "meta_description": "Бренд npmx: логотипы, цвета и типографика для прессы и медиа.",
     "intro": "Ресурсы и правила использования бренда npmx в проектах, статьях и медиа.",
diff --git a/i18n/locales/sr-Latn-RS.json b/i18n/locales/sr-Latn-RS.json
index c015089b8c..9f2dda7159 100644
--- a/i18n/locales/sr-Latn-RS.json
+++ b/i18n/locales/sr-Latn-RS.json
@@ -76,6 +76,23 @@
     "instant_search_turn_off": "isključite",
     "instant_search_advisory": "{label} {state} — {action}"
   },
+  "command_palette": {
+    "state": {},
+    "groups": {},
+    "actions": {},
+    "connections": {},
+    "navigation": {},
+    "links": {},
+    "package_links": {},
+    "theme": {},
+    "package": {},
+    "package_actions": {},
+    "code": {},
+    "diff": {},
+    "version": {},
+    "status": {},
+    "announcements": {}
+  },
   "nav": {
     "main_navigation": "Glavno",
     "popular_packages": "Popularni paketi",
@@ -265,6 +282,7 @@
       "size": "Veličina instalacije povećana za {percent} ({size} veća)",
       "deps": "{count} više zavisnosti"
     },
+    "size_decrease": {},
     "replacement": {
       "title": "Možda vam ova zavisnost ne treba.",
       "native": "Ovo se može zameniti sa {replacement}, dostupno od Node verzije {nodeVersion}.",
@@ -442,6 +460,11 @@
       "current_tags": "Trenutne oznake",
       "no_match_filter": "Nijedna verzija ne odgovara filteru {filter}"
     },
+    "timeline": {
+      "chart": {
+        "copy_alt": {}
+      }
+    },
     "dependencies": {
       "title": "Zavisnost ({count}) | Zavisnosti ({count})",
       "list_label": "Zavisnosti paketa",
@@ -641,6 +664,9 @@
       "tarball": "Preuzmite Tarball kao .tar.gz"
     }
   },
+  "leaderboard": {
+    "likes": {}
+  },
   "connector": {
     "modal": {
       "title": "Lokalni konektor",
@@ -1113,6 +1139,9 @@
       "packages_selected": "{count}/{max} paketa izabrano.",
       "add_hint": "Dodajte najmanje 2 paketa za poređenje."
     },
+    "scatter_chart": {
+      "copy_alt": {}
+    },
     "no_dependency": {
       "label": "(Bez zavisnosti)",
       "typeahead_title": "Šta bi James uradio?",
@@ -1191,7 +1220,10 @@
         "vulnerabilities": {
           "label": "Ranjivosti",
           "description": "Poznate bezbednosne ranjivosti"
-        }
+        },
+        "githubStars": {},
+        "githubIssues": {},
+        "createdAt": {}
       },
       "values": {
         "any": "Bilo koje",
@@ -1469,7 +1501,6 @@
     "browse_brand": "Pregledajte brand kit"
   },
   "brand": {
-    "title": "Brend",
     "heading": "brend",
     "meta_description": "Smernice za npmx brend, logotipi, boje i tipografija za upotrebu u štampi i medijima.",
     "intro": "Resursi i smernice za korišćenje npmx brenda u vašim projektima, člancima i medijima.",
diff --git a/i18n/locales/vi-VN.json b/i18n/locales/vi-VN.json
index d9a5698fa2..3097577913 100644
--- a/i18n/locales/vi-VN.json
+++ b/i18n/locales/vi-VN.json
@@ -76,6 +76,23 @@
     "instant_search_turn_off": "tắt",
     "instant_search_advisory": "{label} {state} — {action}"
   },
+  "command_palette": {
+    "state": {},
+    "groups": {},
+    "actions": {},
+    "connections": {},
+    "navigation": {},
+    "links": {},
+    "package_links": {},
+    "theme": {},
+    "package": {},
+    "package_actions": {},
+    "code": {},
+    "diff": {},
+    "version": {},
+    "status": {},
+    "announcements": {}
+  },
   "nav": {
     "main_navigation": "Trang chính",
     "popular_packages": "Package phổ biến",
@@ -265,6 +282,7 @@
       "size": "Kích thước cài đặt tăng {percent} (lớn hơn {size})",
       "deps": "Thêm {count} dependency"
     },
+    "size_decrease": {},
     "replacement": {
       "title": "Bạn có thể không cần dependency này.",
       "native": "Có thể thay thế bằng {replacement}, có sẵn từ Node {nodeVersion}.",
@@ -442,6 +460,11 @@
       "current_tags": "Thẻ hiện tại",
       "no_match_filter": "Không có phiên bản khớp {filter}"
     },
+    "timeline": {
+      "chart": {
+        "copy_alt": {}
+      }
+    },
     "dependencies": {
       "title": "Dependency ({count}) | Dependency ({count})",
       "list_label": "Dependency của gói",
@@ -641,6 +664,9 @@
       "tarball": "Tải tarball dạng .tar.gz"
     }
   },
+  "leaderboard": {
+    "likes": {}
+  },
   "connector": {
     "modal": {
       "title": "Local Connector",
@@ -1113,6 +1139,9 @@
       "packages_selected": "Đã chọn {count}/{max} package.",
       "add_hint": "Thêm ít nhất 2 package để so sánh."
     },
+    "scatter_chart": {
+      "copy_alt": {}
+    },
     "no_dependency": {
       "label": "(Không dependency)",
       "typeahead_title": "Văn sẽ làm gì?",
@@ -1191,7 +1220,10 @@
         "vulnerabilities": {
           "label": "Lỗ hổng",
           "description": "Các lỗ hổng bảo mật phổ biến"
-        }
+        },
+        "githubStars": {},
+        "githubIssues": {},
+        "createdAt": {}
       },
       "values": {
         "any": "Bất kỳ",
@@ -1469,7 +1501,6 @@
     "browse_brand": "Xem bộ công cụ thương hiệu (brand kit)"
   },
   "brand": {
-    "title": "Thương hiệu",
     "heading": "thương hiệu",
     "meta_description": "Hướng dẫn về thương hiệu npmx, logo, màu sắc và kiểu chữ để sử dụng trong báo chí và truyền thông.",
     "intro": "Các tài nguyên và nguyên tắc sử dụng thương hiệu npmx trong các dự án, bài viết và truyền thông của bạn.",
diff --git a/i18n/locales/zh-CN.json b/i18n/locales/zh-CN.json
index 99895669ef..2c5ddb0b85 100644
--- a/i18n/locales/zh-CN.json
+++ b/i18n/locales/zh-CN.json
@@ -1676,7 +1676,6 @@
     "browse_brand": "浏览品牌素材包"
   },
   "brand": {
-    "title": "品牌",
     "heading": "品牌",
     "meta_description": "npmx 的品牌指南、Logo、配色和字体，供媒体使用。",
     "intro": "在你的项目、文章或报道中使用 npmx 品牌的相关资源和注意事项。",
diff --git a/i18n/locales/zh-TW.json b/i18n/locales/zh-TW.json
index e085f9e267..904a7a7b8d 100644
--- a/i18n/locales/zh-TW.json
+++ b/i18n/locales/zh-TW.json
@@ -1673,7 +1673,6 @@
     "browse_brand": "瀏覽品牌素材包"
   },
   "brand": {
-    "title": "品牌",
     "heading": "品牌",
     "meta_description": "npmx 品牌指南、標誌、顏色與字型，供新聞與媒體使用。",
     "intro": "在你的專案、文章或媒體中使用 npmx 品牌的相關資源與指南。",

From 0cc883ab2e117abb4e192e791efdbdd173576e4c Mon Sep 17 00:00:00 2001
From: btea <2356281422@qq.com>
Date: Sat, 9 May 2026 09:15:41 +0800
Subject: [PATCH 3/7] chore: revert

---
 i18n/locales/en.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/i18n/locales/en.json b/i18n/locales/en.json
index 229e21302b..4a8bac21b5 100644
--- a/i18n/locales/en.json
+++ b/i18n/locales/en.json
@@ -1680,7 +1680,7 @@
     "browse_brand": "Browse brand kit"
   },
   "brand": {
-    "heading": "Brand",
+    "title": "Brand",
     "heading": "brand",
     "meta_description": "npmx brand guidelines, logos, colors, and typography for use in press and media.",
     "intro": "Resources and guidelines for using the npmx brand in your projects, articles, and media.",

From a2288aa771366300593b78a4503f47e10a075408 Mon Sep 17 00:00:00 2001
From: btea <2356281422@qq.com>
Date: Sat, 9 May 2026 16:43:22 +0800
Subject: [PATCH 4/7] test: update CommandPalette tests to match capitalized
 i18n strings

---
 test/nuxt/components/CommandPalette.spec.ts | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/test/nuxt/components/CommandPalette.spec.ts b/test/nuxt/components/CommandPalette.spec.ts
index 3570d63ab4..24a412323d 100644
--- a/test/nuxt/components/CommandPalette.spec.ts
+++ b/test/nuxt/components/CommandPalette.spec.ts
@@ -115,7 +115,7 @@ describe('CommandPalette', () => {
     await mountPalette()
 
     const status = document.getElementById('command-palette-modal-status')
-    expect(status?.textContent).toContain('command palette')
+    expect(status?.textContent).toContain('Command palette')
 
     commandPalette!.setView('languages')
     await flushPalette()
@@ -130,7 +130,7 @@ describe('CommandPalette', () => {
     await mountPalette()
 
     const input = document.getElementById('command-palette-modal-input')
-    expect(input?.getAttribute('placeholder')).toBe('type a command...')
+    expect(input?.getAttribute('placeholder')).toBe('Type a command...')
 
     commandPalette!.setView('languages')
     await nextTick()
@@ -265,7 +265,7 @@ describe('CommandPalette', () => {
 
     document.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, key: 'ArrowLeft' }))
     await flushPalette()
-    expect(input?.getAttribute('placeholder')).toBe('type a command...')
+    expect(input?.getAttribute('placeholder')).toBe('Type a command...')
 
     commandPalette!.setView('languages')
     commandPalette!.query.value = 'fr'

From f3c5a4f66bad3d96ef439de2e44905341050bade Mon Sep 17 00:00:00 2001
From: btea <2356281422@qq.com>
Date: Sat, 9 May 2026 16:47:14 +0800
Subject: [PATCH 5/7] fix: use item.label instead of item.groupKey for group
 header download aria-label

---
 app/pages/package/[[org]]/[name]/versions.vue | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/app/pages/package/[[org]]/[name]/versions.vue b/app/pages/package/[[org]]/[name]/versions.vue
index 07f10f74fc..c23549f05f 100644
--- a/app/pages/package/[[org]]/[name]/versions.vue
+++ b/app/pages/package/[[org]]/[name]/versions.vue
@@ -547,11 +547,11 @@ const flatItems = computed<FlatItem[]>(() => {
                       v-if="groupDownloadsMap.has(item.groupKey)"
                       class="ms-auto w-28 grid grid-flow-col auto-cols-max items-center justify-end gap-1 text-xs text-fg-muted tabular-nums shrink-0"
                       :aria-label="
-                        getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!, item.groupKey)
+                        getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!, item.label)
                       "
                       dir="ltr"
                       :title="
-                        getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!, item.groupKey)
+                        getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!, item.label)
                       "
                     >
                       <span>{{
@@ -695,11 +695,11 @@ const flatItems = computed<FlatItem[]>(() => {
                     v-if="groupDownloadsMap.has(item.groupKey)"
                     class="ms-auto w-28 grid grid-flow-col auto-cols-max items-center justify-end gap-1 text-xs text-fg-muted tabular-nums shrink-0"
                     :aria-label="
-                      getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!, item.groupKey)
+                      getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!, item.label)
                     "
                     dir="ltr"
                     :title="
-                      getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!, item.groupKey)
+                      getDownloadsAriaLabel(groupDownloadsMap.get(item.groupKey)!, item.label)
                     "
                   >
                     <span>{{ numberFormatter.format(groupDownloadsMap.get(item.groupKey)!) }}</span>

From 5b680fc8a32e7673d627de053e66a7ecf4f78004 Mon Sep 17 00:00:00 2001
From: btea <2356281422@qq.com>
Date: Sat, 9 May 2026 17:05:30 +0800
Subject: [PATCH 6/7] fix: update translation

---
 i18n/locales/cs-CZ.json      | 1 +
 i18n/locales/de.json         | 1 +
 i18n/locales/es.json         | 1 +
 i18n/locales/id-ID.json      | 1 +
 i18n/locales/nl.json         | 1 +
 i18n/locales/pt-BR.json      | 1 +
 i18n/locales/pt-PT.json      | 1 +
 i18n/locales/ru-RU.json      | 1 +
 i18n/locales/sr-Latn-RS.json | 1 +
 i18n/locales/vi-VN.json      | 1 +
 i18n/locales/zh-CN.json      | 1 +
 i18n/locales/zh-TW.json      | 1 +
 12 files changed, 12 insertions(+)

diff --git a/i18n/locales/cs-CZ.json b/i18n/locales/cs-CZ.json
index 72e6c0df32..70c7e0a987 100644
--- a/i18n/locales/cs-CZ.json
+++ b/i18n/locales/cs-CZ.json
@@ -1607,6 +1607,7 @@
     "browse_brand": "Procházet sadu značky"
   },
   "brand": {
+    "title": "Značka",
     "heading": "značka",
     "meta_description": "Pokyny k značce npmx, loga, barvy a typografie pro použití v tisku a médiích.",
     "intro": "Zdroje a pokyny pro používání značky npmx ve vašich projektech, článcích a médiích.",
diff --git a/i18n/locales/de.json b/i18n/locales/de.json
index 9c40129511..5dd6168290 100644
--- a/i18n/locales/de.json
+++ b/i18n/locales/de.json
@@ -1606,6 +1606,7 @@
     "browse_brand": "Marken-Kit durchsuchen"
   },
   "brand": {
+    "title": "marke",
     "heading": "marke",
     "meta_description": "npmx-Markenrichtlinien, Logos, Farben und Typografie zur Verwendung in Presse und Medien.",
     "intro": "Ressourcen und Richtlinien für die Verwendung der npmx-Marke in deinen Projekten, Artikeln und Medien.",
diff --git a/i18n/locales/es.json b/i18n/locales/es.json
index a008330c7d..d7e947444c 100644
--- a/i18n/locales/es.json
+++ b/i18n/locales/es.json
@@ -1505,6 +1505,7 @@
     "browse_brand": "Explorar kit de marca"
   },
   "brand": {
+    "title": "Marca",
     "heading": "marca",
     "meta_description": "Directrices de la marca npmx, logotipos, colores y tipografía para uso en prensa y medios.",
     "intro": "Recursos y directrices para usar la marca npmx en tus proyectos, artículos y medios.",
diff --git a/i18n/locales/id-ID.json b/i18n/locales/id-ID.json
index aca880ef5d..0eba49fbd3 100644
--- a/i18n/locales/id-ID.json
+++ b/i18n/locales/id-ID.json
@@ -1505,6 +1505,7 @@
     "browse_brand": "Jelajahi kit merek"
   },
   "brand": {
+    "title": "Merek",
     "heading": "merek",
     "meta_description": "Panduan merek npmx, termasuk logo, warna, dan tipografi untuk digunakan dalam pers dan media.",
     "intro": "Sumber daya dan panduan untuk menggunakan merek npmx dalam proyek, artikel, dan media Anda.",
diff --git a/i18n/locales/nl.json b/i18n/locales/nl.json
index 7d9fb70faa..ba71e41953 100644
--- a/i18n/locales/nl.json
+++ b/i18n/locales/nl.json
@@ -1531,6 +1531,7 @@
     "browse_brand": "Bekijk brand kit"
   },
   "brand": {
+    "title": "Merk",
     "heading": "merk",
     "meta_description": "npmx merkrichtlijnen, logo’s, kleuren en typografie voor gebruik in de pers en de media.",
     "intro": "Hulpbronnen en richtlijnen voor het gebruik van het merk npmx in uw projecten, artikelen en media.",
diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json
index 624010b203..193aa260fa 100644
--- a/i18n/locales/pt-BR.json
+++ b/i18n/locales/pt-BR.json
@@ -1653,6 +1653,7 @@
     "browse_brand": "Navegar kit da marca"
   },
   "brand": {
+    "title": "Marca",
     "heading": "marca",
     "meta_description": "Diretrizes da marca npmx, logotipos, cores e tipografia para uso em imprensa e mídia.",
     "intro": "Recursos e diretrizes para usar a marca npmx em seus projetos, artigos e mídias.",
diff --git a/i18n/locales/pt-PT.json b/i18n/locales/pt-PT.json
index b9c1bb5dca..2366310a53 100644
--- a/i18n/locales/pt-PT.json
+++ b/i18n/locales/pt-PT.json
@@ -1664,6 +1664,7 @@
     "browse_brand": "Explorar kit de marca"
   },
   "brand": {
+    "title": "Marca",
     "heading": "marca",
     "meta_description": "Diretrizes da marca npmx, logótipos, cores e tipografia para uso em imprensa e media.",
     "intro": "Recursos e diretrizes para usar a marca npmx nos teus projetos, artigos e media.",
diff --git a/i18n/locales/ru-RU.json b/i18n/locales/ru-RU.json
index 6cd53b3d30..f687aab40f 100644
--- a/i18n/locales/ru-RU.json
+++ b/i18n/locales/ru-RU.json
@@ -1642,6 +1642,7 @@
     "browse_brand": "Набор бренда"
   },
   "brand": {
+    "title": "Бренд",
     "heading": "бренд",
     "meta_description": "Бренд npmx: логотипы, цвета и типографика для прессы и медиа.",
     "intro": "Ресурсы и правила использования бренда npmx в проектах, статьях и медиа.",
diff --git a/i18n/locales/sr-Latn-RS.json b/i18n/locales/sr-Latn-RS.json
index 9f2dda7159..f3d7dced53 100644
--- a/i18n/locales/sr-Latn-RS.json
+++ b/i18n/locales/sr-Latn-RS.json
@@ -1501,6 +1501,7 @@
     "browse_brand": "Pregledajte brand kit"
   },
   "brand": {
+    "title": "Brend",
     "heading": "brend",
     "meta_description": "Smernice za npmx brend, logotipi, boje i tipografija za upotrebu u štampi i medijima.",
     "intro": "Resursi i smernice za korišćenje npmx brenda u vašim projektima, člancima i medijima.",
diff --git a/i18n/locales/vi-VN.json b/i18n/locales/vi-VN.json
index 3097577913..2f8d3f0b35 100644
--- a/i18n/locales/vi-VN.json
+++ b/i18n/locales/vi-VN.json
@@ -1501,6 +1501,7 @@
     "browse_brand": "Xem bộ công cụ thương hiệu (brand kit)"
   },
   "brand": {
+    "title": "Thương hiệu",
     "heading": "thương hiệu",
     "meta_description": "Hướng dẫn về thương hiệu npmx, logo, màu sắc và kiểu chữ để sử dụng trong báo chí và truyền thông.",
     "intro": "Các tài nguyên và nguyên tắc sử dụng thương hiệu npmx trong các dự án, bài viết và truyền thông của bạn.",
diff --git a/i18n/locales/zh-CN.json b/i18n/locales/zh-CN.json
index 2c5ddb0b85..99895669ef 100644
--- a/i18n/locales/zh-CN.json
+++ b/i18n/locales/zh-CN.json
@@ -1676,6 +1676,7 @@
     "browse_brand": "浏览品牌素材包"
   },
   "brand": {
+    "title": "品牌",
     "heading": "品牌",
     "meta_description": "npmx 的品牌指南、Logo、配色和字体，供媒体使用。",
     "intro": "在你的项目、文章或报道中使用 npmx 品牌的相关资源和注意事项。",
diff --git a/i18n/locales/zh-TW.json b/i18n/locales/zh-TW.json
index 904a7a7b8d..6658a00a4e 100644
--- a/i18n/locales/zh-TW.json
+++ b/i18n/locales/zh-TW.json
@@ -1673,6 +1673,7 @@
     "browse_brand": "瀏覽品牌素材包"
   },
   "brand": {
+    "title": "品牌指南",
     "heading": "品牌",
     "meta_description": "npmx 品牌指南、標誌、顏色與字型，供新聞與媒體使用。",
     "intro": "在你的專案、文章或媒體中使用 npmx 品牌的相關資源與指南。",

From 3f247b64e336a618272b518dd117ec8d9a814f49 Mon Sep 17 00:00:00 2001
From: "Willow (GHOST)" <git@willow.sh>
Date: Fri, 29 May 2026 01:20:26 +0100
Subject: [PATCH 7/7] chore: remove additional translation changes

---
 i18n/locales/cs-CZ.json                     | 17 +----
 i18n/locales/de.json                        | 14 +---
 i18n/locales/en.json                        | 32 ++++----
 i18n/locales/id-ID.json                     | 34 +--------
 i18n/locales/pt-BR.json                     |  8 +-
 i18n/locales/pt-PT.json                     |  5 +-
 i18n/locales/sr-Latn-RS.json                | 34 +--------
 i18n/locales/vi-VN.json                     | 34 +--------
 i18n/locales/zh-CN.json                     | 14 ++--
 i18n/locales/zh-TW.json                     | 83 ++-------------------
 test/nuxt/components/CommandPalette.spec.ts |  6 +-
 11 files changed, 39 insertions(+), 242 deletions(-)

diff --git a/i18n/locales/cs-CZ.json b/i18n/locales/cs-CZ.json
index 70c7e0a987..b5ffca3a02 100644
--- a/i18n/locales/cs-CZ.json
+++ b/i18n/locales/cs-CZ.json
@@ -380,7 +380,6 @@
       "size": "Velikost instalace se zvýšila o {percent} (větší o {size})",
       "deps": "{count} další závislostí"
     },
-    "size_decrease": {},
     "replacement": {
       "title": "Možná tuto závislost nepotřebujete.",
       "native": "Tento balíček lze nahradit {replacement}, dostupné od Node {nodeVersion}.",
@@ -558,11 +557,6 @@
       "current_tags": "Aktuální značky",
       "no_match_filter": "Žádné verze neodpovídají {filter}"
     },
-    "timeline": {
-      "chart": {
-        "copy_alt": {}
-      }
-    },
     "dependencies": {
       "title": "Závislosti ({count})",
       "list_label": "Závislosti balíčku",
@@ -765,9 +759,6 @@
       "tarball": "Stáhnout Tarball jako .tar.gz"
     }
   },
-  "leaderboard": {
-    "likes": {}
-  },
   "connector": {
     "modal": {
       "title": "Lokální konektor",
@@ -1245,9 +1236,6 @@
       "packages_selected": "Vybrané balíčky: {count}/{max}.",
       "add_hint": "Přidejte alespoň 2 balíčky ke srovnání."
     },
-    "scatter_chart": {
-      "copy_alt": {}
-    },
     "no_dependency": {
       "label": "(Žádná závislost)",
       "typeahead_title": "Co by udělal James?",
@@ -1326,10 +1314,7 @@
         "vulnerabilities": {
           "label": "Zranitelnosti",
           "description": "Známé bezpečnostní zranitelnosti"
-        },
-        "githubStars": {},
-        "githubIssues": {},
-        "createdAt": {}
+        }
       },
       "values": {
         "any": "Jakékoliv",
diff --git a/i18n/locales/de.json b/i18n/locales/de.json
index 5dd6168290..e805f32888 100644
--- a/i18n/locales/de.json
+++ b/i18n/locales/de.json
@@ -379,7 +379,6 @@
       "size": "Installationsgröße um {percent} gestiegen ({size} größer)",
       "deps": "{count} zusätzliche Abhängigkeiten"
     },
-    "size_decrease": {},
     "replacement": {
       "title": "Du brauchst diese Abhängigkeit vielleicht nicht.",
       "native": "Dies kann durch {replacement} ersetzt werden, verfügbar seit Node {nodeVersion}.",
@@ -557,11 +556,6 @@
       "current_tags": "Aktuelle Tags",
       "no_match_filter": "Keine Versionen entsprechen {filter}"
     },
-    "timeline": {
-      "chart": {
-        "copy_alt": {}
-      }
-    },
     "dependencies": {
       "title": "Abhängigkeit ({count}) | Abhängigkeiten ({count})",
       "list_label": "Paketabhängigkeiten",
@@ -764,9 +758,6 @@
       "tarball": "Tarball als .tar.gz herunterladen"
     }
   },
-  "leaderboard": {
-    "likes": {}
-  },
   "connector": {
     "modal": {
       "title": "Lokaler Connector",
@@ -1325,10 +1316,7 @@
         "vulnerabilities": {
           "label": "Sicherheitslücken",
           "description": "Bekannte Sicherheitsrisiken"
-        },
-        "githubStars": {},
-        "githubIssues": {},
-        "createdAt": {}
+        }
       },
       "values": {
         "any": "Beliebig",
diff --git a/i18n/locales/en.json b/i18n/locales/en.json
index 4d5e47e4db..8118b181fb 100644
--- a/i18n/locales/en.json
+++ b/i18n/locales/en.json
@@ -8,8 +8,8 @@
   },
   "built_at": "built {0}",
   "alt_logo": "npmx logo",
-  "tagline": "A fast, modern browser for the npm registry",
-  "non_affiliation_disclaimer": "Not affiliated with npm, Inc.",
+  "tagline": "a fast, modern browser for the npm registry",
+  "non_affiliation_disclaimer": "not affiliated with npm, Inc.",
   "trademark_disclaimer": "npm is a registered trademark of npm, Inc. This site is not affiliated with npm, Inc.",
   "footer": {
     "about": "about",
@@ -50,7 +50,7 @@
   },
   "search": {
     "label": "Search npm packages",
-    "placeholder": "Search packages...",
+    "placeholder": "search packages...",
     "button": "search",
     "searching": "Searching...",
     "found_packages": "No packages found | Found 1 package | Found {count} packages",
@@ -58,7 +58,7 @@
     "updating": "(updating...)",
     "no_results": "No packages found for \"{query}\"",
     "rate_limited": "Hit npm rate limit, try again in a moment",
-    "title": "Search",
+    "title": "search",
     "title_search": "search: {search}",
     "title_packages": "search packages",
     "meta_description": "Search results for '{search}'",
@@ -84,14 +84,14 @@
     "instant_search_advisory": "{label} {state} — {action}"
   },
   "command_palette": {
-    "title": "Command palette",
+    "title": "command palette",
     "quick_actions": "jump to...",
     "subtitle": "navigate across npmx and switch settings quickly",
     "subtitle_languages": "choose a language or help improve translations",
     "instructions": "Type to filter commands. Use the arrow keys to move through results and Enter to run a command.",
     "input_label": "Command palette search",
     "results_label": "Command results",
-    "placeholder": "Type a command...",
+    "placeholder": "type a command...",
     "back": "Back",
     "empty": "No matching commands",
     "empty_search_hint": "Press Enter to search for \"{query}\".",
@@ -205,7 +205,7 @@
   },
   "blog": {
     "title": "Blog",
-    "heading": "Blog",
+    "heading": "blog",
     "meta_description": "Insights and updates from the npmx community",
     "author": {
       "view_profile": "View {name}'s profile on Bluesky"
@@ -230,8 +230,8 @@
     }
   },
   "settings": {
-    "title": "Settings",
-    "tagline": "Customize your npmx experience",
+    "title": "settings",
+    "tagline": "customize your npmx experience",
     "meta_description": "Customize your npmx.dev experience with theme, language, and display preferences.",
     "sections": {
       "appearance": "Appearance",
@@ -837,7 +837,7 @@
       "copied": "Copied",
       "paste_token": "Then paste the token below to connect:",
       "token_label": "Token",
-      "token_placeholder": "Paste token here...",
+      "token_placeholder": "paste token here...",
       "advanced": "Advanced options",
       "port_label": "Port",
       "warning": "WARNING",
@@ -853,7 +853,7 @@
       "clear_all": "clear all",
       "refresh": "Refresh operations",
       "empty": "No operations queued",
-      "empty_hint": "Add operations from package or organization pages",
+      "empty_hint": "Add operations from package or org pages",
       "active_label": "Active operations",
       "otp_required": "OTP required",
       "otp_prompt": "Enter OTP to continue",
@@ -954,7 +954,7 @@
     "page": {
       "packages_title": "Packages",
       "no_packages": "No public packages found for",
-      "no_packages_hint": "This user may not exist, or has no public packages.",
+      "no_packages_hint": "This user may not exist or has no public packages.",
       "failed_to_load": "Failed to load user packages",
       "no_match": "No packages match \"{query}\"",
       "filter_placeholder": "Filter {count} package... | Filter {count} packages..."
@@ -1152,7 +1152,7 @@
   },
   "about": {
     "title": "About",
-    "heading": "About",
+    "heading": "about",
     "meta_description": "npmx is a fast, modern browser for the npm registry. A great UX/DX for exploring npm packages.",
     "what_we_are": {
       "title": "What we are",
@@ -1503,7 +1503,7 @@
     }
   },
   "privacy_policy": {
-    "title": "Privacy policy",
+    "title": "privacy policy",
     "last_updated": "Last updated: {date}",
     "welcome": "Welcome to {app}. We are committed to protecting your privacy. This policy explains what data we collect, how we use it, and your rights regarding your information.",
     "cookies": {
@@ -1583,7 +1583,7 @@
     }
   },
   "a11y": {
-    "title": "Accessibility",
+    "title": "accessibility",
     "footer_title": "a11y",
     "welcome": "We want {app} to be usable by as many people as possible.",
     "approach": {
@@ -1613,7 +1613,7 @@
     }
   },
   "translation_status": {
-    "title": "Translation status",
+    "title": "translation status",
     "generated_at": "Generation date: {date}",
     "welcome": "If you're interested in helping us to translate {npmx} into one of the languages listed below, you've come to the right place! This auto-updating page always lists all the content that could use your help right now.",
     "p1": "We use {lang} as the default language, with a total of {count}. If you'd like to help add translations, locate the language in {bylang} and expand the details.",
diff --git a/i18n/locales/id-ID.json b/i18n/locales/id-ID.json
index 0eba49fbd3..9646ca17b1 100644
--- a/i18n/locales/id-ID.json
+++ b/i18n/locales/id-ID.json
@@ -76,23 +76,6 @@
     "instant_search_turn_off": "nonaktifkan",
     "instant_search_advisory": "{label} {state} — {action}"
   },
-  "command_palette": {
-    "state": {},
-    "groups": {},
-    "actions": {},
-    "connections": {},
-    "navigation": {},
-    "links": {},
-    "package_links": {},
-    "theme": {},
-    "package": {},
-    "package_actions": {},
-    "code": {},
-    "diff": {},
-    "version": {},
-    "status": {},
-    "announcements": {}
-  },
   "nav": {
     "main_navigation": "Utama",
     "popular_packages": "Paket populer",
@@ -282,7 +265,6 @@
       "size": "Ukuran instalasi meningkat sebesar {percent} ({size} lebih besar)",
       "deps": "{count} lebih banyak dependensi"
     },
-    "size_decrease": {},
     "replacement": {
       "title": "Mungkin Anda tidak butuh dependensi ini.",
       "native": "Paket ini dapat diganti dengan {replacement}, tersedia sejak Node {nodeVersion}.",
@@ -460,11 +442,6 @@
       "current_tags": "Tag Saat Ini",
       "no_match_filter": "Tidak ada versi yang cocok dengan {filter}"
     },
-    "timeline": {
-      "chart": {
-        "copy_alt": {}
-      }
-    },
     "dependencies": {
       "title": "Dependensi ({count})",
       "list_label": "Dependensi paket",
@@ -667,9 +644,6 @@
       "tarball": "Unduh Tarball sebagai .tar.gz"
     }
   },
-  "leaderboard": {
-    "likes": {}
-  },
   "connector": {
     "modal": {
       "title": "Konektor Lokal",
@@ -1143,9 +1117,6 @@
       "packages_selected": "{count}/{max} paket dipilih.",
       "add_hint": "Tambah setidaknya 2 paket untuk dibandingkan."
     },
-    "scatter_chart": {
-      "copy_alt": {}
-    },
     "no_dependency": {
       "label": "(Tanpa Ketergantungan)",
       "typeahead_title": "Apa yang Akan Anda Lakukan?",
@@ -1224,10 +1195,7 @@
         "vulnerabilities": {
           "label": "Kerentanan",
           "description": "Kerentanan keamanan yang diketahui"
-        },
-        "githubStars": {},
-        "githubIssues": {},
-        "createdAt": {}
+        }
       },
       "values": {
         "any": "Apa saja",
diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json
index 193aa260fa..a09e5e5ae8 100644
--- a/i18n/locales/pt-BR.json
+++ b/i18n/locales/pt-BR.json
@@ -587,10 +587,7 @@
       "trusted_publisher_added": "Publicação de confiança ativada",
       "trusted_publisher_removed": "Publicação de confiança removida",
       "provenance_added": "Proveniência ativada",
-      "provenance_removed": "Proveniência removida",
-      "chart": {
-        "copy_alt": {}
-      }
+      "provenance_removed": "Proveniência removida"
     },
     "dependencies": {
       "title": "Dependências ({count})",
@@ -794,9 +791,6 @@
       "tarball": "Baixar Tarball como .tar.gz"
     }
   },
-  "leaderboard": {
-    "likes": {}
-  },
   "connector": {
     "modal": {
       "title": "Conector Local",
diff --git a/i18n/locales/pt-PT.json b/i18n/locales/pt-PT.json
index 2366310a53..8540dec556 100644
--- a/i18n/locales/pt-PT.json
+++ b/i18n/locales/pt-PT.json
@@ -591,10 +591,7 @@
       "trusted_publisher_added": "Publicação de confiança ativada",
       "trusted_publisher_removed": "Publicação de confiança removida",
       "provenance_added": "Proveniência ativada",
-      "provenance_removed": "Proveniência removida",
-      "chart": {
-        "copy_alt": {}
-      }
+      "provenance_removed": "Proveniência removida"
     },
     "dependencies": {
       "title": "Dependência ({count}) | Dependências ({count})",
diff --git a/i18n/locales/sr-Latn-RS.json b/i18n/locales/sr-Latn-RS.json
index f3d7dced53..c015089b8c 100644
--- a/i18n/locales/sr-Latn-RS.json
+++ b/i18n/locales/sr-Latn-RS.json
@@ -76,23 +76,6 @@
     "instant_search_turn_off": "isključite",
     "instant_search_advisory": "{label} {state} — {action}"
   },
-  "command_palette": {
-    "state": {},
-    "groups": {},
-    "actions": {},
-    "connections": {},
-    "navigation": {},
-    "links": {},
-    "package_links": {},
-    "theme": {},
-    "package": {},
-    "package_actions": {},
-    "code": {},
-    "diff": {},
-    "version": {},
-    "status": {},
-    "announcements": {}
-  },
   "nav": {
     "main_navigation": "Glavno",
     "popular_packages": "Popularni paketi",
@@ -282,7 +265,6 @@
       "size": "Veličina instalacije povećana za {percent} ({size} veća)",
       "deps": "{count} više zavisnosti"
     },
-    "size_decrease": {},
     "replacement": {
       "title": "Možda vam ova zavisnost ne treba.",
       "native": "Ovo se može zameniti sa {replacement}, dostupno od Node verzije {nodeVersion}.",
@@ -460,11 +442,6 @@
       "current_tags": "Trenutne oznake",
       "no_match_filter": "Nijedna verzija ne odgovara filteru {filter}"
     },
-    "timeline": {
-      "chart": {
-        "copy_alt": {}
-      }
-    },
     "dependencies": {
       "title": "Zavisnost ({count}) | Zavisnosti ({count})",
       "list_label": "Zavisnosti paketa",
@@ -664,9 +641,6 @@
       "tarball": "Preuzmite Tarball kao .tar.gz"
     }
   },
-  "leaderboard": {
-    "likes": {}
-  },
   "connector": {
     "modal": {
       "title": "Lokalni konektor",
@@ -1139,9 +1113,6 @@
       "packages_selected": "{count}/{max} paketa izabrano.",
       "add_hint": "Dodajte najmanje 2 paketa za poređenje."
     },
-    "scatter_chart": {
-      "copy_alt": {}
-    },
     "no_dependency": {
       "label": "(Bez zavisnosti)",
       "typeahead_title": "Šta bi James uradio?",
@@ -1220,10 +1191,7 @@
         "vulnerabilities": {
           "label": "Ranjivosti",
           "description": "Poznate bezbednosne ranjivosti"
-        },
-        "githubStars": {},
-        "githubIssues": {},
-        "createdAt": {}
+        }
       },
       "values": {
         "any": "Bilo koje",
diff --git a/i18n/locales/vi-VN.json b/i18n/locales/vi-VN.json
index 2f8d3f0b35..d9a5698fa2 100644
--- a/i18n/locales/vi-VN.json
+++ b/i18n/locales/vi-VN.json
@@ -76,23 +76,6 @@
     "instant_search_turn_off": "tắt",
     "instant_search_advisory": "{label} {state} — {action}"
   },
-  "command_palette": {
-    "state": {},
-    "groups": {},
-    "actions": {},
-    "connections": {},
-    "navigation": {},
-    "links": {},
-    "package_links": {},
-    "theme": {},
-    "package": {},
-    "package_actions": {},
-    "code": {},
-    "diff": {},
-    "version": {},
-    "status": {},
-    "announcements": {}
-  },
   "nav": {
     "main_navigation": "Trang chính",
     "popular_packages": "Package phổ biến",
@@ -282,7 +265,6 @@
       "size": "Kích thước cài đặt tăng {percent} (lớn hơn {size})",
       "deps": "Thêm {count} dependency"
     },
-    "size_decrease": {},
     "replacement": {
       "title": "Bạn có thể không cần dependency này.",
       "native": "Có thể thay thế bằng {replacement}, có sẵn từ Node {nodeVersion}.",
@@ -460,11 +442,6 @@
       "current_tags": "Thẻ hiện tại",
       "no_match_filter": "Không có phiên bản khớp {filter}"
     },
-    "timeline": {
-      "chart": {
-        "copy_alt": {}
-      }
-    },
     "dependencies": {
       "title": "Dependency ({count}) | Dependency ({count})",
       "list_label": "Dependency của gói",
@@ -664,9 +641,6 @@
       "tarball": "Tải tarball dạng .tar.gz"
     }
   },
-  "leaderboard": {
-    "likes": {}
-  },
   "connector": {
     "modal": {
       "title": "Local Connector",
@@ -1139,9 +1113,6 @@
       "packages_selected": "Đã chọn {count}/{max} package.",
       "add_hint": "Thêm ít nhất 2 package để so sánh."
     },
-    "scatter_chart": {
-      "copy_alt": {}
-    },
     "no_dependency": {
       "label": "(Không dependency)",
       "typeahead_title": "Văn sẽ làm gì?",
@@ -1220,10 +1191,7 @@
         "vulnerabilities": {
           "label": "Lỗ hổng",
           "description": "Các lỗ hổng bảo mật phổ biến"
-        },
-        "githubStars": {},
-        "githubIssues": {},
-        "createdAt": {}
+        }
       },
       "values": {
         "any": "Bất kỳ",
diff --git a/i18n/locales/zh-CN.json b/i18n/locales/zh-CN.json
index 99895669ef..07247df2e6 100644
--- a/i18n/locales/zh-CN.json
+++ b/i18n/locales/zh-CN.json
@@ -23,7 +23,7 @@
     "brand": "品牌",
     "resources": "资源",
     "features": "功能",
-    "other": "其他"
+    "other": "其它"
   },
   "shortcuts": {
     "section": {
@@ -46,7 +46,7 @@
     "disable_shortcuts": "你可以在{settings}中禁用快捷键。",
     "open_main": "查看主要信息",
     "open_diff": "查看版本差异",
-    "open_timeline": "查看时间线"
+    "open_timeline": "时间线"
   },
   "search": {
     "label": "搜索 npm 包",
@@ -386,11 +386,11 @@
       "deps": "{count} 个依赖项"
     },
     "size_decrease": {
-      "title_size": "自 v{version} 以来体积显著减少",
-      "title_deps": "自 v{version} 以来依赖项数量显著减少",
-      "title_both": "自 v{version} 以来体积和依赖项显著减少",
-      "size": "安装大小减少了 {percent} (减少了 {size})",
-      "deps": "{count} 个依赖项减少"
+      "title_size": "自 v{version} 起，包体积已减小！",
+      "title_deps": "自 v{version} 起，依赖数量已减少！",
+      "title_both": "自 v{version} 起，包体积和依赖数量均已减少！",
+      "size": "安装体积减少了 {percent}（缩小了 {size}）",
+      "deps": "减少了 {count} 个依赖"
     },
     "replacement": {
       "title": "你可能不需要这个依赖。",
diff --git a/i18n/locales/zh-TW.json b/i18n/locales/zh-TW.json
index 6658a00a4e..d7d5ec96ff 100644
--- a/i18n/locales/zh-TW.json
+++ b/i18n/locales/zh-TW.json
@@ -20,10 +20,7 @@
     "chat": "聊天",
     "builders_chat": "開發者聊天",
     "keyboard_shortcuts": "鍵盤快捷鍵",
-    "brand": "品牌",
-    "resources": "資源",
-    "features": "功能特色",
-    "other": "其他"
+    "brand": "品牌"
   },
   "shortcuts": {
     "section": {
@@ -45,8 +42,7 @@
     "open_docs": "開啟文件",
     "disable_shortcuts": "你可以在 {settings} 中停用鍵盤快速鍵。",
     "open_main": "開啟主要資訊",
-    "open_diff": "開啟版本差異",
-    "open_timeline": "開啟時間軸"
+    "open_diff": "開啟版本差異"
   },
   "search": {
     "label": "搜尋 npm 套件",
@@ -284,8 +280,7 @@
       "black": "黑色"
     },
     "keyboard_shortcuts_enabled": "啟用鍵盤快速鍵",
-    "keyboard_shortcuts_enabled_description": "若與其他瀏覽器或系統快捷鍵衝突，可停用鍵盤快速鍵",
-    "enable_code_ligatures": "啟用程式碼連字"
+    "keyboard_shortcuts_enabled_description": "若與其他瀏覽器或系統快捷鍵衝突，可停用鍵盤快速鍵"
   },
   "i18n": {
     "missing_keys": "{count} 項缺少翻譯",
@@ -317,7 +312,6 @@
     "warnings": "警告：",
     "go_back_home": "回到首頁",
     "per_week": "/ 週",
-    "per_week_short": "/週",
     "vanity_downloads_hint": "顯示下載量：未顯示套件 | 顯示下載量：顯示的套件 | 顯示下載量：顯示的 {count} 個套件總和",
     "sort": {
       "name": "名稱",
@@ -340,7 +334,6 @@
       "gitea": "在 Gitea 上檢視",
       "gitee": "在 Gitee 上檢視",
       "radicle": "在 Radicle 上檢視",
-      "socket_dev": "在 socket.dev 上檢視",
       "sourcehut": "在 SourceHut 上檢視",
       "tangled": "在 Tangled 上檢視"
     },
@@ -385,18 +378,9 @@
       "size": "安裝大小增加了 {percent}（多出 {size}）",
       "deps": "增加了 {count} 個相依套件"
     },
-    "size_decrease": {
-      "title_size": "自 v{version} 起，套件大小顯著減少！",
-      "title_deps": "自 v{version} 起，相依套件數量顯著減少！",
-      "title_both": "自 v{version} 起，套件大小與相依套件數量皆顯著減少！",
-      "size": "安裝大小減少了 {percent}（減少了 {size}）",
-      "deps": "減少了 {count} 個相依套件"
-    },
     "replacement": {
       "title": "你可能不需要這個相依套件。",
-      "example": "範例：",
       "native": "此功能自 Node.js {nodeVersion} 起已內建，可直接使用 {replacement} 取代。",
-      "native_no_version": "此套件可以用 {replacement} 取代。",
       "simple": "社群標記此套件為冗餘，建議改用：{replacement}。",
       "documented": "社群標記此套件有更高效能的替代方案",
       "none": "此套件已被標記為不再需要，其功能很可能已由所有引擎原生提供。",
@@ -447,15 +431,11 @@
       "docs": "文件",
       "fund": "贊助",
       "compare": "比較",
-      "timeline": "時間軸",
       "compare_this_package": "比較這個套件"
     },
     "likes": {
       "like": "喜歡這個套件",
-      "unlike": "取消喜歡這個套件",
-      "top_rank_tooltip": "這是 npmx 上喜歡數最多的前 10 名套件之一！（第 #{rank} 名）",
-      "top_rank_label": "#{rank}",
-      "top_rank_link_label": "查看喜歡排行榜。此套件排名第 #{rank}。"
+      "unlike": "取消喜歡這個套件"
     },
     "docs": {
       "contents": "目錄",
@@ -496,8 +476,7 @@
         "warning": "警告",
         "caution": "小心"
       },
-      "copy_as_markdown": "複製 README 為 Markdown 格式",
-      "error_loading": "載入 README 詳情失敗"
+      "copy_as_markdown": "複製 README 為 Markdown 格式"
     },
     "provenance_section": {
       "title": "來源",
@@ -576,34 +555,6 @@
       "current_tags": "當前標籤",
       "no_match_filter": "沒有版本符合 {filter}"
     },
-    "timeline": {
-      "load_more": "載入更多",
-      "load_error": "載入時間軸失敗。請稍後再試。",
-      "size_increase": "安裝大小增加了 {percent}%（{size}）",
-      "size_decrease": "安裝大小減少了 {percent}%（{size}）",
-      "dep_increase": "新增了 {count} 個相依套件",
-      "dep_decrease": "移除了 {count} 個相依套件",
-      "license_change": "授權從 {from} 變更為 {to}",
-      "esm_added": "模組類型已變更為 ESM",
-      "esm_removed": "模組類型已從 ESM 變更為 CJS",
-      "types_added": "已新增 TypeScript 型別",
-      "types_removed": "已移除 TypeScript 型別",
-      "trusted_publisher_added": "已啟用信任發佈",
-      "trusted_publisher_removed": "已移除信任發佈",
-      "provenance_added": "已啟用來源證明",
-      "provenance_removed": "已移除來源證明",
-      "chart": {
-        "tab_aria_label": "指標選取",
-        "base_scale": "Y 軸從零開始",
-        "zoom": "縮放",
-        "reset_minimap": "重置縮略圖",
-        "copy_alt": {
-          "key_changes": "主要變更：{version_events}。",
-          "version_events": "版本 {version}：{events}",
-          "general_description": "折線圖呈現 {package} 套件的 {metric}，從版本 {first} 到 {last}。版本 {first} 的 {metric} 為 {first_value}，版本 {last} 的 {metric} 為 {last_value}（整體變化 {overall_progress_percentage}%）。{key_changes} {watermark}。"
-        }
-      }
-    },
     "dependencies": {
       "title": "相依（{count} 個）",
       "list_label": "套件相依",
@@ -807,16 +758,6 @@
       "tarball": "下載 Tarball（.tar.gz）"
     }
   },
-  "leaderboard": {
-    "likes": {
-      "title": "喜歡排行榜",
-      "description": "目前 npmx 上喜歡數最多的 10 個套件。",
-      "rank": "排名",
-      "likes": "喜歡數",
-      "unavailable_title": "目前尚無喜歡排行榜",
-      "unavailable_description": "目前沒有可顯示的喜歡排行榜。"
-    }
-  },
   "connector": {
     "modal": {
       "title": "本機連線器",
@@ -1383,18 +1324,6 @@
         "vulnerabilities": {
           "label": "漏洞",
           "description": "已知安全漏洞"
-        },
-        "githubStars": {
-          "label": "GitHub 星星數",
-          "description": "GitHub 儲存庫的星星數量"
-        },
-        "githubIssues": {
-          "label": "GitHub Issues",
-          "description": "GitHub 儲存庫的 Issue 數量"
-        },
-        "createdAt": {
-          "label": "建立時間",
-          "description": "套件建立時間"
         }
       },
       "values": {
@@ -1673,7 +1602,7 @@
     "browse_brand": "瀏覽品牌素材包"
   },
   "brand": {
-    "title": "品牌指南",
+    "title": "品牌",
     "heading": "品牌",
     "meta_description": "npmx 品牌指南、標誌、顏色與字型，供新聞與媒體使用。",
     "intro": "在你的專案、文章或媒體中使用 npmx 品牌的相關資源與指南。",
diff --git a/test/nuxt/components/CommandPalette.spec.ts b/test/nuxt/components/CommandPalette.spec.ts
index 24a412323d..3570d63ab4 100644
--- a/test/nuxt/components/CommandPalette.spec.ts
+++ b/test/nuxt/components/CommandPalette.spec.ts
@@ -115,7 +115,7 @@ describe('CommandPalette', () => {
     await mountPalette()
 
     const status = document.getElementById('command-palette-modal-status')
-    expect(status?.textContent).toContain('Command palette')
+    expect(status?.textContent).toContain('command palette')
 
     commandPalette!.setView('languages')
     await flushPalette()
@@ -130,7 +130,7 @@ describe('CommandPalette', () => {
     await mountPalette()
 
     const input = document.getElementById('command-palette-modal-input')
-    expect(input?.getAttribute('placeholder')).toBe('Type a command...')
+    expect(input?.getAttribute('placeholder')).toBe('type a command...')
 
     commandPalette!.setView('languages')
     await nextTick()
@@ -265,7 +265,7 @@ describe('CommandPalette', () => {
 
     document.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true, key: 'ArrowLeft' }))
     await flushPalette()
-    expect(input?.getAttribute('placeholder')).toBe('Type a command...')
+    expect(input?.getAttribute('placeholder')).toBe('type a command...')
 
     commandPalette!.setView('languages')
     commandPalette!.query.value = 'fr'
