diff --git a/app/pages/package/[[org]]/[name]/versions.vue b/app/pages/package/[[org]]/[name]/versions.vue index 2f91330670..c23549f05f 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(() => { {{ numberFormatter.format(getVersionDownloads(latestTagRow!.version)!) }} @@ -446,9 +456,9 @@ const flatItems = computed(() => { {{ numberFormatter.format(getVersionDownloads(row.version)!) }} @@ -536,9 +546,13 @@ const flatItems = computed(() => { {{ numberFormatter.format(groupDownloadsMap.get(item.groupKey)!) @@ -627,8 +641,12 @@ const flatItems = computed(() => { {{ @@ -676,9 +694,13 @@ const flatItems = computed(() => { {{ numberFormatter.format(groupDownloadsMap.get(item.groupKey)!) }} diff --git a/i18n/locales/cs-CZ.json b/i18n/locales/cs-CZ.json index b5ffca3a02..70c7e0a987 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", diff --git a/i18n/locales/de.json b/i18n/locales/de.json index e805f32888..5dd6168290 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", diff --git a/i18n/locales/en.json b/i18n/locales/en.json index ed50c69116..4a8bac21b5 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.", diff --git a/i18n/locales/es.json b/i18n/locales/es.json index 9bcb7263fc..d7e947444c 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", diff --git a/i18n/locales/id-ID.json b/i18n/locales/id-ID.json index 9646ca17b1..0eba49fbd3 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", diff --git a/i18n/locales/nl.json b/i18n/locales/nl.json index e6b67e109d..ba71e41953 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", diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json index a09e5e5ae8..193aa260fa 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", diff --git a/i18n/locales/pt-PT.json b/i18n/locales/pt-PT.json index 8540dec556..2366310a53 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})", diff --git a/i18n/locales/ru-RU.json b/i18n/locales/ru-RU.json index 66dc858a5a..f687aab40f 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": "Локальный коннектор", diff --git a/i18n/locales/sr-Latn-RS.json b/i18n/locales/sr-Latn-RS.json index c015089b8c..f3d7dced53 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", diff --git a/i18n/locales/vi-VN.json b/i18n/locales/vi-VN.json index d9a5698fa2..2f8d3f0b35 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ỳ", 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..6658a00a4e 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": { @@ -1601,7 +1673,7 @@ "browse_brand": "瀏覽品牌素材包" }, "brand": { - "title": "品牌", + "title": "品牌指南", "heading": "品牌", "meta_description": "npmx 品牌指南、標誌、顏色與字型,供新聞與媒體使用。", "intro": "在你的專案、文章或媒體中使用 npmx 品牌的相關資源與指南。", 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" }, 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'