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 5cf61d60a3..f42add7065 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}\".", @@ -204,7 +204,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" @@ -229,8 +229,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", @@ -708,6 +708,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 ← →" @@ -828,7 +829,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", @@ -844,7 +845,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", @@ -945,7 +946,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..." @@ -1143,7 +1144,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", @@ -1494,7 +1495,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": { @@ -1574,7 +1575,7 @@ } }, "a11y": { - "title": "accessibility", + "title": "Accessibility", "footer_title": "a11y", "welcome": "We want {app} to be usable by as many people as possible.", "approach": { @@ -1604,7 +1605,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/fr-FR.json b/i18n/locales/fr-FR.json index ef6b16f298..89fe0d1158 100644 --- a/i18n/locales/fr-FR.json +++ b/i18n/locales/fr-FR.json @@ -253,7 +253,6 @@ "hide_platform_packages_description": "Masquer les paquets binaires natifs comme {'@'}esbuild/linux-x64 des résultats", "enable_graph_pulse_loop": "Activer la boucle de l'effet de pulsation sur le mini-graphe", "enable_graph_pulse_loop_description": "Activer une animation de pulsation continue sur le graphique des téléchargements hebdomadaires. Cette animation peut être gênante pour certaines personnes.", - "enable_code_ligatures": "Activer les ligatures de code", "theme": "Thème", "theme_light": "Clair", "theme_dark": "Sombre", @@ -282,7 +281,8 @@ "black": "Noir" }, "keyboard_shortcuts_enabled": "Activer les raccourcis clavier", - "keyboard_shortcuts_enabled_description": "Les raccourcis clavier peuvent être désactivés s'ils entrent en conflit avec d'autres raccourcis du navigateur ou du système" + "keyboard_shortcuts_enabled_description": "Les raccourcis clavier peuvent être désactivés s'ils entrent en conflit avec d'autres raccourcis du navigateur ou du système", + "enable_code_ligatures": "Activer les ligatures de code" }, "i18n": { "missing_keys": "{count} traduction manquante | {count} traductions manquantes", @@ -342,8 +342,8 @@ "tangled": "Voir sur Tangled" }, "collapse": "Réduire", - "expand": "Développer", "collapse_with_name": "Réduire {name}", + "expand": "Développer", "expand_with_name": "Développer {name}" }, "profile": { @@ -382,6 +382,7 @@ "size": "La taille d'installation a augmenté de {percent} ({size} de plus)", "deps": "{count} dépendances supplémentaires" }, + "size_decrease": {}, "replacement": { "title": "Vous n'avez peut-être pas besoin de cette dépendance.", "native": "Ceci peut être remplacé par {replacement}, disponible depuis Node {nodeVersion}.", @@ -990,6 +991,7 @@ "view_raw": "Voir le fichier brut", "toggle_container": "Changer la largeur du conteneur", "open_raw_file": "Ouvrir le fichier brut", + "open_path_dropdown": "Ouvrir le menu du chemin", "file_too_large": "Fichier trop volumineux pour l'aperçu", "file_size_warning": "{size} dépasse la limite de 500 Ko pour la coloration syntaxique", "failed_to_load": "Échec du chargement du fichier", @@ -1007,7 +1009,6 @@ "preview": "aperçu", "code": "code" }, - "open_path_dropdown": "Ouvrir le menu du chemin", "file_path": "Chemin du fichier", "binary_file": "Fichier binaire", "binary_rendering_warning": "Le type de fichier \"{contentType}\" n'est pas pris en charge pour l'aperçu." 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/nb-NO.json b/i18n/locales/nb-NO.json index 63b84714fa..70841a4286 100644 --- a/i18n/locales/nb-NO.json +++ b/i18n/locales/nb-NO.json @@ -591,7 +591,10 @@ "trusted_publisher_added": "Pålitelig publisering aktivert", "trusted_publisher_removed": "Pålitelig publisering fjernet", "provenance_added": "Opprinnelse aktivert", - "provenance_removed": "Opprinnelse fjernet" + "provenance_removed": "Opprinnelse fjernet", + "chart": { + "copy_alt": {} + } }, "dependencies": { "title": "Avhengighet ({count}) | Avhengigheter ({count})", diff --git a/i18n/locales/nl.json b/i18n/locales/nl.json index 85e5f13c1a..9e0d3a9b83 100644 --- a/i18n/locales/nl.json +++ b/i18n/locales/nl.json @@ -379,6 +379,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}.", @@ -556,6 +557,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", @@ -758,6 +764,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 575c4a803d..14c93b9f2a 100644 --- a/i18n/locales/pt-PT.json +++ b/i18n/locales/pt-PT.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ê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/uk-UA.json b/i18n/locales/uk-UA.json index 336c409e1b..9eada4cd92 100644 --- a/i18n/locales/uk-UA.json +++ b/i18n/locales/uk-UA.json @@ -76,6 +76,23 @@ "instant_search_turn_off": "вимкнути", "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": "Головна", "popular_packages": "Популярні пакети", @@ -265,6 +282,7 @@ "size": "Розмір встановлення збільшився на {percent} ({size} більше)", "deps": "{count} додаткових залежностей" }, + "size_decrease": {}, "replacement": { "title": "Можливо вам не потрібна ця залежність.", "native": "Це можна замінити на {replacement}, доступне з Node {nodeVersion}.", @@ -442,6 +460,11 @@ "current_tags": "Поточні теги", "no_match_filter": "Версій за фільтром \"{filter}\" не знайдено" }, + "timeline": { + "chart": { + "copy_alt": {} + } + }, "dependencies": { "title": "Залежності ({count})", "list_label": "Залежності пакета", @@ -641,6 +664,9 @@ "tarball": "Завантажити Tarball як .tar.gz" } }, + "leaderboard": { + "likes": {} + }, "connector": { "modal": { "title": "Локальний сполучник", @@ -1113,6 +1139,9 @@ "packages_selected": "Вибрано {count}/{max} пакетів.", "add_hint": "Додайте щонайменше 2 пакети для порівняння." }, + "scatter_chart": { + "copy_alt": {} + }, "no_dependency": { "label": "(Без залежності)", "typeahead_title": "Що б зробив Джеймс?", @@ -1191,7 +1220,10 @@ "vulnerabilities": { "label": "Вразливості", "description": "Відомі вразливості безпеки" - } + }, + "githubStars": {}, + "githubIssues": {}, + "createdAt": {} }, "values": { "any": "Будь-яке", 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 559283c623..9ee1210543 100644 --- a/i18n/locales/zh-CN.json +++ b/i18n/locales/zh-CN.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 包", @@ -313,6 +317,7 @@ "warnings": "警告:", "go_back_home": "返回首页", "per_week": "/ 周", + "per_week_short": "/周", "vanity_downloads_hint": "累计下载量:未显示包 | 累计下载量:显示的包 | 累计下载量:{count} 个显示的包的总和", "sort": { "name": "名称", @@ -380,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": "示例:如果你使用它来进行 HTTP 请求,考虑直接使用 Node.js 内置的 {replacement} 模块。", "native": "该功能自 Node.js {nodeVersion} 起已被内置,可直接使用 {replacement} 替代。", + "native_no_version": "此包可以被 {replacement} 替代。", "simple": "社区标记此包为冗余,建议替换为:{replacement}。", "documented": "社区标记此包存在性能更优的替代方案", "none": "此包已被标记为不再需要,其功能很可能已由所有引擎原生提供。", @@ -433,11 +447,15 @@ "docs": "文档", "fund": "资助", "compare": "比较", + "timeline": "时间线", "compare_this_package": "比较此包" }, "likes": { "like": "点赞此包", - "unlike": "取消点赞" + "unlike": "取消点赞", + "top_rank_tooltip": "这个包在所有 npm 包中排名 #{rank},根据在 npmx 上的点赞数量。", + "top_rank_label": "排名 #{rank}", + "top_rank_link_label": "查看点赞排行榜。此包排名 #{rank}。" }, "docs": { "contents": "目录", @@ -478,7 +496,8 @@ "warning": "警告", "caution": "当心" }, - "copy_as_markdown": "复制为 Markdown" + "copy_as_markdown": "复制为 Markdown", + "error_loading": "加载自述文件详情失败" }, "provenance_section": { "title": "来源", @@ -557,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": "包依赖", @@ -661,6 +708,7 @@ }, "downloads": { "title": "每周下载量", + "version_distribution_title": "{version} 版本的每周下载量", "community_distribution": "查看社区采用分布", "subtitle": "涵盖所有版本", "sparkline_nav_hint": "使用 ← →" @@ -759,6 +807,16 @@ "tarball": "下载 Tarball 作为 .tar.gz" } }, + "leaderboard": { + "likes": { + "title": "点赞排行榜", + "description": "当前 npmx 上点赞最多的 10 个包。", + "rank": "排名", + "likes": "点赞数", + "unavailable_title": "暂无点赞排行榜", + "unavailable_description": "我们目前没有可显示的点赞排行榜。这可能是因为数据不足或正在收集数据。请稍后再试!" + } + }, "connector": { "modal": { "title": "本地连接器", 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 31b662ee58..5c61b80f61 100644 --- a/i18n/schema.json +++ b/i18n/schema.json @@ -2128,6 +2128,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'