From 035ba9f7fb8a73e86dd5680fee96910726d89065 Mon Sep 17 00:00:00 2001
From: WilcoSp
Date: Fri, 6 Mar 2026 16:03:06 +0100
Subject: [PATCH 1/8] created "view_on" english translations for the other git
providers+fallback & created a composable to get the correct translation.
fixed that package page only said "view on github"
---
app/composables/useViewOnGitProvider.ts | 35 ++++++++++++++++++
app/pages/org/[org].vue | 2 +-
app/pages/package/[[org]]/[name].vue | 8 +++--
app/pages/~[username]/index.vue | 2 +-
i18n/locales/ar.json | 8 +++--
i18n/locales/az-AZ.json | 8 +++--
i18n/locales/bg-BG.json | 8 +++--
i18n/locales/bn-IN.json | 8 +++--
i18n/locales/cs-CZ.json | 8 +++--
i18n/locales/de-DE.json | 8 +++--
i18n/locales/en.json | 18 ++++++++--
i18n/locales/es.json | 8 +++--
i18n/locales/fr-FR.json | 8 +++--
i18n/locales/hi-IN.json | 8 +++--
i18n/locales/hu-HU.json | 8 +++--
i18n/locales/id-ID.json | 8 +++--
i18n/locales/it-IT.json | 8 +++--
i18n/locales/ja-JP.json | 8 +++--
i18n/locales/kn-IN.json | 8 +++--
i18n/locales/mr-IN.json | 6 ++--
i18n/locales/nb-NO.json | 8 +++--
i18n/locales/ne-NP.json | 8 +++--
i18n/locales/pl-PL.json | 8 +++--
i18n/locales/pt-BR.json | 8 +++--
i18n/locales/ru-RU.json | 8 +++--
i18n/locales/ta-IN.json | 8 +++--
i18n/locales/te-IN.json | 8 +++--
i18n/locales/tr-TR.json | 8 +++--
i18n/locales/uk-UA.json | 8 +++--
i18n/locales/zh-CN.json | 8 +++--
i18n/locales/zh-TW.json | 8 +++--
i18n/schema.json | 48 +++++++++++++++++++++----
32 files changed, 229 insertions(+), 90 deletions(-)
create mode 100644 app/composables/useViewOnGitProvider.ts
diff --git a/app/composables/useViewOnGitProvider.ts b/app/composables/useViewOnGitProvider.ts
new file mode 100644
index 0000000000..2322f781a7
--- /dev/null
+++ b/app/composables/useViewOnGitProvider.ts
@@ -0,0 +1,35 @@
+/**
+ * Return the text "see on {git provider}" based on the given provider
+ */
+export function useViewOnGitProvider(
+ provider: MaybeRefOrGetter,
+) {
+ const { t } = useI18n()
+ return computed(() => {
+ const uProvider = toValue(provider)
+ // using this switch instead of `view_on.${provider}` to prevent missing future translations
+ switch (uProvider) {
+ case 'github':
+ return t('common.view_on.github')
+ case 'gitlab':
+ return t('common.view_on.gitlab')
+ case 'bitbucket':
+ return t('common.view_on.bitbucket')
+ case 'codeberg':
+ return t('common.view_on.codeberg')
+ case 'forgejo':
+ return t('common.view_on.forgejo')
+ case 'gitea':
+ return t('common.view_on.gitea')
+ case 'gitee':
+ return t('common.view_on.gitee')
+ case 'radicle':
+ return t('common.view_on.radicle')
+ case 'sourcehut':
+ return t('common.view_on.sourcehut')
+ case 'tangled':
+ return t('common.view_on.tangled')
+ }
+ return t('common.view_on.git_repo')
+ })
+}
diff --git a/app/pages/org/[org].vue b/app/pages/org/[org].vue
index 37e439ad02..13eca02352 100644
--- a/app/pages/org/[org].vue
+++ b/app/pages/org/[org].vue
@@ -175,7 +175,7 @@ defineOgImageComponent('Default', {
target="_blank"
rel="noopener noreferrer"
class="link-subtle font-mono text-sm inline-flex items-center gap-1.5"
- :title="$t('common.view_on_npm')"
+ :title="$t('common.view_on.npm')"
>
npm
diff --git a/app/pages/package/[[org]]/[name].vue b/app/pages/package/[[org]]/[name].vue
index c165517d1a..707c3ff63d 100644
--- a/app/pages/package/[[org]]/[name].vue
+++ b/app/pages/package/[[org]]/[name].vue
@@ -21,6 +21,7 @@ import { useModal } from '~/composables/useModal'
import { useAtproto } from '~/composables/atproto/useAtproto'
import { togglePackageLike } from '~/utils/atproto/likes'
import { useInstallSizeDiff } from '~/composables/useInstallSizeDiff'
+import { useViewOnGitProvider } from '~/composables/useViewOnGitProvider'
import type { RouteLocationRaw } from 'vue-router'
defineOgImageComponent('Package', {
@@ -503,6 +504,8 @@ const repoProviderIcon = computed((): IconClass => {
return PROVIDER_ICONS[provider] ?? 'i-lucide:code'
})
+const viewOnGitProvider = useViewOnGitProvider(() => repoRef.value?.provider)
+
const homepageUrl = computed(() => {
const homepage = displayVersion.value?.homepage
if (!homepage) return null
@@ -1007,7 +1010,7 @@ const showSkeleton = shallowRef(false)
npm
@@ -1452,7 +1455,8 @@ const showSkeleton = shallowRef(false)
target="_blank"
rel="noopener noreferrer"
class="link text-fg underline underline-offset-4 decoration-fg-subtle hover:(decoration-fg text-fg) transition-colors duration-200"
- >{{ $t('package.readme.view_on_github') }}
+ {{ viewOnGitProvider }}
diff --git a/app/pages/~[username]/index.vue b/app/pages/~[username]/index.vue
index cb2394e700..0fd04b47d1 100644
--- a/app/pages/~[username]/index.vue
+++ b/app/pages/~[username]/index.vue
@@ -156,7 +156,7 @@ defineOgImageComponent('Default', {
target="_blank"
rel="noopener noreferrer"
class="link-subtle font-mono text-sm inline-flex items-center gap-1.5"
- :title="$t('common.view_on_npm')"
+ :title="$t('common.view_on.npm')"
>
npm
diff --git a/i18n/locales/ar.json b/i18n/locales/ar.json
index 5ed1a98565..f29b3137d6 100644
--- a/i18n/locales/ar.json
+++ b/i18n/locales/ar.json
@@ -132,7 +132,6 @@
"skip_link": "تخطي إلى المحتوى الرئيسي",
"warnings": "تحذيرات:",
"go_back_home": "العودة إلى الصفحة الرئيسية",
- "view_on_npm": "عرض على npm",
"per_week": "/ أسبوع",
"vanity_downloads_hint": "رقم زخرفي: لا توجد حزم معروضة | رقم زخرفي: للحزمة المعروضة | رقم زخرفي: للحزمتين المعروضتين | رقم زخرفي: مجموع {count} من الحزم المعروضة | رقم زخرفي: مجموع {count} من الحزم المعروضة | رقم زخرفي: مجموع {count} من الحزم المعروضة",
"sort": {
@@ -140,7 +139,11 @@
"role": "الدور",
"members": "الأعضاء"
},
- "scroll_to_top": "التمرير إلى الأعلى"
+ "scroll_to_top": "التمرير إلى الأعلى",
+ "view_on": {
+ "npm": "عرض على npm",
+ "github": "عرض على GitHub"
+ }
},
"package": {
"not_found": "لم يتم العثور على الحزمة",
@@ -238,7 +241,6 @@
"readme": {
"title": "README (إقرأني)",
"no_readme": "لا يتوفر README.",
- "view_on_github": "عرض على GitHub",
"toc_title": "جدول المحتويات",
"callout": {
"note": "ملاحظة",
diff --git a/i18n/locales/az-AZ.json b/i18n/locales/az-AZ.json
index 2f6f7649a6..44988696fe 100644
--- a/i18n/locales/az-AZ.json
+++ b/i18n/locales/az-AZ.json
@@ -177,7 +177,6 @@
"skip_link": "Əsas məzmuna keç",
"warnings": "Xəbərdarlıqlar:",
"go_back_home": "Ana səhifəyə qayıt",
- "view_on_npm": "npm-də bax",
"per_week": "/ həftə",
"vanity_downloads_hint": "Göstərici: paket göstərilmir | Göstərici: göstərilən paket üçün | Göstərici: {count} göstərilən paketin cəmi",
"sort": {
@@ -185,7 +184,11 @@
"role": "rol",
"members": "üzvlər"
},
- "scroll_to_top": "Yuxarı qayıt"
+ "scroll_to_top": "Yuxarı qayıt",
+ "view_on": {
+ "npm": "npm-də bax",
+ "github": "GitHub-da bax"
+ }
},
"package": {
"not_found": "Paket Tapılmadı",
@@ -290,7 +293,6 @@
"readme": {
"title": "Readme",
"no_readme": "README mövcud deyil.",
- "view_on_github": "GitHub-da bax",
"toc_title": "Məzmun",
"callout": {
"note": "Qeyd",
diff --git a/i18n/locales/bg-BG.json b/i18n/locales/bg-BG.json
index 78719069cb..595429a945 100644
--- a/i18n/locales/bg-BG.json
+++ b/i18n/locales/bg-BG.json
@@ -136,7 +136,6 @@
"skip_link": "Преминаване към основното съдържание",
"warnings": "Предупреждения:",
"go_back_home": "Назад към начална страница",
- "view_on_npm": "преглед в npm",
"per_week": "/ седмица",
"vanity_downloads_hint": "Брой за показ: няма показани пакети | Брой за показ: за показания пакет | Брой за показ: Сума от {count} показани пакета",
"sort": {
@@ -148,7 +147,11 @@
"cancel": "Отказ",
"save": "Запазване",
"edit": "Редактиране",
- "error": "Грешка"
+ "error": "Грешка",
+ "view_on": {
+ "npm": "преглед в npm",
+ "github": "Преглед в GitHub"
+ }
},
"profile": {
"display_name": "Показвано име",
@@ -270,7 +273,6 @@
"readme": {
"title": "Readme",
"no_readme": "Няма наличен README.",
- "view_on_github": "Преглед в GitHub",
"toc_title": "Съдържание",
"callout": {
"note": "Бележка",
diff --git a/i18n/locales/bn-IN.json b/i18n/locales/bn-IN.json
index 479c3f7b02..1700971fb7 100644
--- a/i18n/locales/bn-IN.json
+++ b/i18n/locales/bn-IN.json
@@ -99,7 +99,6 @@
"skip_link": "মুখ্য কন্টেন্টে যান",
"warnings": "সতর্কতা:",
"go_back_home": "হোমে ফিরে যান",
- "view_on_npm": "npm এ দেখুন",
"per_week": "/ সপ্তাহ",
"vanity_downloads_hint": "ভ্যানিটি নম্বর: কোন প্যাকেজ প্রদর্শিত হয়নি | ভ্যানিটি নম্বর: প্রদর্শিত প্যাকেজের জন্য | ভ্যানিটি নম্বর: {count} প্রদর্শিত প্যাকেজের মোট",
"sort": {
@@ -107,7 +106,11 @@
"role": "ভূমিকা",
"members": "সদস্য"
},
- "scroll_to_top": "উপরে স্ক্রল করুন"
+ "scroll_to_top": "উপরে স্ক্রল করুন",
+ "view_on": {
+ "npm": "npm এ দেখুন",
+ "github": "GitHub এ দেখুন"
+ }
},
"package": {
"not_found": "প্যাকেজ পাওয়া যায়নি",
@@ -194,7 +197,6 @@
"readme": {
"title": "রিডমি",
"no_readme": "README উপলব্ধ নেই।",
- "view_on_github": "GitHub এ দেখুন",
"callout": {}
},
"provenance_section": {},
diff --git a/i18n/locales/cs-CZ.json b/i18n/locales/cs-CZ.json
index 41791d087c..4005cbc586 100644
--- a/i18n/locales/cs-CZ.json
+++ b/i18n/locales/cs-CZ.json
@@ -178,7 +178,6 @@
"skip_link": "Přejít na hlavní obsah",
"warnings": "Varování:",
"go_back_home": "Zpět na začátek",
- "view_on_npm": "Zobrazit na npm",
"per_week": "/ týden",
"vanity_downloads_hint": "Pro zobrazený balíček | Součet pro {count} zobrazené balíčky | Součet pro {count} zobrazených balíčků",
"sort": {
@@ -190,7 +189,11 @@
"cancel": "Zrušit",
"save": "Uložit",
"edit": "Upravit",
- "error": "Chyba"
+ "error": "Chyba",
+ "view_on": {
+ "npm": "Zobrazit na npm",
+ "github": "Zobrazit na GitHubu"
+ }
},
"profile": {
"display_name": "Zobrazované jméno",
@@ -312,7 +315,6 @@
"readme": {
"title": "ČTI MĚ",
"no_readme": "Žádné ČTI MĚ NENÍ k dispozici.",
- "view_on_github": "Zobrazit na GitHubu",
"toc_title": "Obsah",
"callout": {
"note": "Poznámka",
diff --git a/i18n/locales/de-DE.json b/i18n/locales/de-DE.json
index 0dc56065c5..c4f2692766 100644
--- a/i18n/locales/de-DE.json
+++ b/i18n/locales/de-DE.json
@@ -146,7 +146,6 @@
"skip_link": "Zum Hauptinhalt springen",
"warnings": "Warnungen:",
"go_back_home": "Zur Startseite",
- "view_on_npm": "Auf npm ansehen",
"per_week": "/ Woche",
"vanity_downloads_hint": "Vanity-Zahl: keine Pakete angezeigt | Vanity-Zahl: für das angezeigte Paket | Vanity-Zahl: Summe von {count} angezeigten Paketen",
"sort": {
@@ -158,7 +157,11 @@
"cancel": "Abbrechen",
"save": "Speichern",
"edit": "Bearbeiten",
- "error": "Fehler"
+ "error": "Fehler",
+ "view_on": {
+ "npm": "Auf npm ansehen",
+ "github": "Auf GitHub ansehen"
+ }
},
"error": {
"401": "Nicht autorisiert",
@@ -312,7 +315,6 @@
"readme": {
"title": "Readme",
"no_readme": "Keine README verfügbar.",
- "view_on_github": "Auf GitHub ansehen",
"toc_title": "Gliederung",
"callout": {
"note": "Notiz",
diff --git a/i18n/locales/en.json b/i18n/locales/en.json
index 5bc57ea17e..c432e707e1 100644
--- a/i18n/locales/en.json
+++ b/i18n/locales/en.json
@@ -178,7 +178,6 @@
"skip_link": "Skip to main content",
"warnings": "Warnings:",
"go_back_home": "Go back home",
- "view_on_npm": "view on npm",
"per_week": "/ week",
"vanity_downloads_hint": "Vanity number: no packages displayed | Vanity number: for the displayed package | Vanity number: Sum of {count} displayed packages",
"sort": {
@@ -190,7 +189,21 @@
"cancel": "Cancel",
"save": "Save",
"edit": "Edit",
- "error": "Error"
+ "error": "Error",
+ "view_on": {
+ "npm": "view on npm",
+ "github": "View on GitHub",
+ "gitlab": "View on GitLab",
+ "bitbucket": "View on Bitbucket",
+ "codeberg": "View on Codeberg",
+ "git_repo": "View on git repository",
+ "forgejo": "View on Forgejo",
+ "gitea": "View on Gitea",
+ "gitee": "View on Gitee",
+ "radicle": "View on Radicle",
+ "sourcehut": "View on SourceHut",
+ "tangled": "View on Tangled"
+ }
},
"profile": {
"display_name": "Display Name",
@@ -312,7 +325,6 @@
"readme": {
"title": "Readme",
"no_readme": "No README available.",
- "view_on_github": "View on GitHub",
"toc_title": "Outline",
"callout": {
"note": "Note",
diff --git a/i18n/locales/es.json b/i18n/locales/es.json
index 02ed71d176..b407cde789 100644
--- a/i18n/locales/es.json
+++ b/i18n/locales/es.json
@@ -136,7 +136,6 @@
"skip_link": "Saltar al contenido principal",
"warnings": "Advertencias:",
"go_back_home": "Volver al inicio",
- "view_on_npm": "ver en npm",
"per_week": "/ semana",
"vanity_downloads_hint": "Número de vanidad: no se muestran paquetes | Número de vanidad: para el paquete mostrado | Número de vanidad: Suma de {count} paquetes mostrados",
"sort": {
@@ -148,7 +147,11 @@
"cancel": "Cancelar",
"save": "Guardar",
"edit": "Editar",
- "error": "Error"
+ "error": "Error",
+ "view_on": {
+ "npm": "ver en npm",
+ "github": "Ver en GitHub"
+ }
},
"profile": {
"display_name": "Nombre visible",
@@ -270,7 +273,6 @@
"readme": {
"title": "Léeme",
"no_readme": "No hay README disponible.",
- "view_on_github": "Ver en GitHub",
"toc_title": "Índice",
"callout": {
"note": "Nota",
diff --git a/i18n/locales/fr-FR.json b/i18n/locales/fr-FR.json
index bbe2af2f00..92e8652325 100644
--- a/i18n/locales/fr-FR.json
+++ b/i18n/locales/fr-FR.json
@@ -178,7 +178,6 @@
"skip_link": "Passer au contenu principal",
"warnings": "Avertissements :",
"go_back_home": "Retour à l'accueil",
- "view_on_npm": "voir sur npm",
"per_week": "/ semaine",
"vanity_downloads_hint": "Métrique de vanité : aucun paquet affiché | Métrique de vanité : pour le paquet affiché | Métrique de vanité : somme des {count} paquets affichés",
"sort": {
@@ -190,7 +189,11 @@
"cancel": "Annuler",
"save": "Enregistrer",
"edit": "Modifier",
- "error": "Erreur"
+ "error": "Erreur",
+ "view_on": {
+ "npm": "voir sur npm",
+ "github": "Voir sur GitHub"
+ }
},
"profile": {
"display_name": "Nom d'affichage",
@@ -312,7 +315,6 @@
"readme": {
"title": "Readme",
"no_readme": "Aucun README disponible.",
- "view_on_github": "Voir sur GitHub",
"toc_title": "Sommaire",
"callout": {
"note": "Note",
diff --git a/i18n/locales/hi-IN.json b/i18n/locales/hi-IN.json
index c7bc09ca48..603e7d7b93 100644
--- a/i18n/locales/hi-IN.json
+++ b/i18n/locales/hi-IN.json
@@ -100,7 +100,6 @@
"skip_link": "मुख्य सामग्री पर जाएं",
"warnings": "चेतावनियाँ:",
"go_back_home": "होम पर वापस जाएं",
- "view_on_npm": "npm पर देखें",
"per_week": "/ सप्ताह",
"vanity_downloads_hint": "वैनिटी नंबर: कोई पैकेज प्रदर्शित नहीं | वैनिटी नंबर: प्रदर्शित पैकेज के लिए | वैनिटी नंबर: {count} प्रदर्शित पैकेज का योग",
"sort": {
@@ -108,7 +107,11 @@
"role": "भूमिका",
"members": "सदस्य"
},
- "scroll_to_top": "शीर्ष पर स्क्रॉल करें"
+ "scroll_to_top": "शीर्ष पर स्क्रॉल करें",
+ "view_on": {
+ "npm": "npm पर देखें",
+ "github": "GitHub पर देखें"
+ }
},
"package": {
"not_found": "पैकेज नहीं मिला",
@@ -195,7 +198,6 @@
"readme": {
"title": "रीडमी",
"no_readme": "कोई README उपलब्ध नहीं है।",
- "view_on_github": "GitHub पर देखें",
"callout": {}
},
"provenance_section": {},
diff --git a/i18n/locales/hu-HU.json b/i18n/locales/hu-HU.json
index c24450e5f1..006cc2dcd7 100644
--- a/i18n/locales/hu-HU.json
+++ b/i18n/locales/hu-HU.json
@@ -136,7 +136,6 @@
"skip_link": "Ugrás a fő tartalomra",
"warnings": "Figyelmeztetések:",
"go_back_home": "Vissza a főoldalra",
- "view_on_npm": "megtekintés npm-en",
"per_week": "/ hét",
"vanity_downloads_hint": "Vanity szám: nincsenek csomagok megjelenítve | Vanity szám: a megjelenített csomagra | Vanity szám: {count} megjelenített csomag összege",
"sort": {
@@ -148,7 +147,11 @@
"cancel": "Mégse",
"save": "Mentés",
"edit": "Szerkesztés",
- "error": "Hiba"
+ "error": "Hiba",
+ "view_on": {
+ "npm": "megtekintés npm-en",
+ "github": "Megtekintés GitHubon"
+ }
},
"profile": {
"display_name": "Megjelenítési név",
@@ -270,7 +273,6 @@
"readme": {
"title": "Readme",
"no_readme": "Nincs elérhető README.",
- "view_on_github": "Megtekintés GitHubon",
"toc_title": "Témakörök",
"callout": {
"note": "Megjegyzés",
diff --git a/i18n/locales/id-ID.json b/i18n/locales/id-ID.json
index bed3494461..2d316a162d 100644
--- a/i18n/locales/id-ID.json
+++ b/i18n/locales/id-ID.json
@@ -136,7 +136,6 @@
"skip_link": "Lanjut ke konten utama",
"warnings": "Peringatan:",
"go_back_home": "Kembali ke Beranda",
- "view_on_npm": "lihat di npm",
"per_week": "/ minggu",
"vanity_downloads_hint": "Angka statistik: tidak ada paket | Angka statistik: untuk paket yang tampil | Angka statistik: Total dari {count} paket yang tampil",
"sort": {
@@ -144,7 +143,11 @@
"role": "peran",
"members": "anggota"
},
- "scroll_to_top": "Kembali ke atas"
+ "scroll_to_top": "Kembali ke atas",
+ "view_on": {
+ "npm": "lihat di npm",
+ "github": "Lihat di GitHub"
+ }
},
"package": {
"not_found": "Paket Tidak Ditemukan",
@@ -249,7 +252,6 @@
"readme": {
"title": "Readme",
"no_readme": "README tidak tersedia.",
- "view_on_github": "Lihat di GitHub",
"toc_title": "Garis Besar",
"callout": {
"note": "Catatan",
diff --git a/i18n/locales/it-IT.json b/i18n/locales/it-IT.json
index 76506bb846..8648542dbf 100644
--- a/i18n/locales/it-IT.json
+++ b/i18n/locales/it-IT.json
@@ -132,7 +132,6 @@
"skip_link": "Salta al contenuto principale",
"warnings": "Avvisi:",
"go_back_home": "Torna alla home",
- "view_on_npm": "vedi su npm",
"per_week": "/ settimana",
"vanity_downloads_hint": "Numero di vanità: nessun pacchetto visualizzato | Numero di vanità: per il pacchetto visualizzato | Numero di vanità: somma di {count} pacchetti visualizzati",
"sort": {
@@ -140,7 +139,11 @@
"role": "ruolo",
"members": "membri"
},
- "scroll_to_top": "Torna su"
+ "scroll_to_top": "Torna su",
+ "view_on": {
+ "npm": "vedi su npm",
+ "github": "Vedi su GitHub"
+ }
},
"package": {
"not_found": "Pacchetto Non Trovato",
@@ -245,7 +248,6 @@
"readme": {
"title": "Readme",
"no_readme": "Nessuno README disponibile.",
- "view_on_github": "Vedi su GitHub",
"toc_title": "Contorno",
"callout": {
"note": "Nota",
diff --git a/i18n/locales/ja-JP.json b/i18n/locales/ja-JP.json
index 46d417b762..70d5e7677f 100644
--- a/i18n/locales/ja-JP.json
+++ b/i18n/locales/ja-JP.json
@@ -178,7 +178,6 @@
"skip_link": "メインコンテンツにスキップ",
"warnings": "警告:",
"go_back_home": "ホームへ戻る",
- "view_on_npm": "npmで表示",
"per_week": "/ 週",
"vanity_downloads_hint": "バニティ番号: パッケージが表示されていません|バニティ番号: 表示されているパッケージの数値|バニティ番号: 表示されている {count} 個のパッケージの合計",
"sort": {
@@ -190,7 +189,11 @@
"cancel": "キャンセル",
"save": "保存",
"edit": "編集",
- "error": "エラー"
+ "error": "エラー",
+ "view_on": {
+ "npm": "npmで表示",
+ "github": "GitHubで表示"
+ }
},
"profile": {
"display_name": "表示名",
@@ -312,7 +315,6 @@
"readme": {
"title": "Readme",
"no_readme": "READMEはありません。",
- "view_on_github": "GitHubで表示",
"toc_title": "目次",
"callout": {
"note": "メモ",
diff --git a/i18n/locales/kn-IN.json b/i18n/locales/kn-IN.json
index 6a1cee3f2f..af41145ff4 100644
--- a/i18n/locales/kn-IN.json
+++ b/i18n/locales/kn-IN.json
@@ -100,7 +100,6 @@
"skip_link": "ಮುಖ್ಯ ವಿಷಯಕ್ಕೆ ಹೋಗಿ",
"warnings": "ಎಚ್ಚರಿಕೆಗಳು:",
"go_back_home": "ಮುಖಪುಟಕ್ಕೆ ಹಿಂತಿರುಗಿ",
- "view_on_npm": "npm ನಲ್ಲಿ ನೋಡಿ",
"per_week": "/ ವಾರ",
"vanity_downloads_hint": "ವ್ಯಾನಿಟಿ ಸಂಖ್ಯೆ: ಪ್ಯಾಕೇಜ್ ಪ್ರದರ್ಶಿಸಲಾಗಿಲ್ಲ | ವ್ಯಾನಿಟಿ ಸಂಖ್ಯೆ: ಪ್ರದರ್ಶಿಸಲಾದ ಪ್ಯಾಕೇಜ್ | ವ್ಯಾನಿಟಿ ಸಂಖ್ಯೆ: {count} ಪ್ರದರ್ಶಿಸಲಾದ ಪ್ಯಾಕೇಜ್ಗಳ ಒಟ್ಟು",
"sort": {
@@ -108,7 +107,11 @@
"role": "ಪಾತ್ರ",
"members": "ಸದಸ್ಯರು"
},
- "scroll_to_top": "ಮೇಲಕ್ಕೆ ಸ್ಕ್ರೋಲ್ ಮಾಡಿ"
+ "scroll_to_top": "ಮೇಲಕ್ಕೆ ಸ್ಕ್ರೋಲ್ ಮಾಡಿ",
+ "view_on": {
+ "npm": "npm ನಲ್ಲಿ ನೋಡಿ",
+ "github": "GitHub ನಲ್ಲಿ ನೋಡಿ"
+ }
},
"package": {
"not_found": "ಪ್ಯಾಕೇಜ್ ಕಂಡುಬಂದಿಲ್ಲ",
@@ -195,7 +198,6 @@
"readme": {
"title": "ರೀಡ್ಮಿ",
"no_readme": "README ಲಭ್ಯವಿಲ್ಲ.",
- "view_on_github": "GitHub ನಲ್ಲಿ ನೋಡಿ",
"callout": {}
},
"provenance_section": {},
diff --git a/i18n/locales/mr-IN.json b/i18n/locales/mr-IN.json
index 7215660b78..ed0b989ded 100644
--- a/i18n/locales/mr-IN.json
+++ b/i18n/locales/mr-IN.json
@@ -98,7 +98,6 @@
"skip_link": "मुख्य सामग्रीवर जा",
"warnings": "चेतावण्या:",
"go_back_home": "मुख्यपृष्ठावर परत जा",
- "view_on_npm": "npm वर पहा",
"per_week": "/ आठवडा",
"vanity_downloads_hint": "व्यर्थ संख्या: कोणतीही पॅकेजेस दर्शविली नाहीत | व्यर्थ संख्या: दर्शवलेल्या पॅकेजसाठी | व्यर्थ संख्या: {count} दर्शवलेल्या पॅकेजेसची बेरीज",
"sort": {
@@ -106,7 +105,10 @@
"role": "भूमिका",
"members": "सदस्य"
},
- "scroll_to_top": "वर स्क्रोल करा"
+ "scroll_to_top": "वर स्क्रोल करा",
+ "view_on": {
+ "npm": "npm वर पहा"
+ }
},
"package": {
"not_found": "पॅकेज सापडले नाही",
diff --git a/i18n/locales/nb-NO.json b/i18n/locales/nb-NO.json
index 6ed21cfca2..a8736fcb9c 100644
--- a/i18n/locales/nb-NO.json
+++ b/i18n/locales/nb-NO.json
@@ -131,7 +131,6 @@
"skip_link": "Gå til hovedinnhold",
"warnings": "Advarsler:",
"go_back_home": "Gå tilbake til start",
- "view_on_npm": "vis på npm",
"per_week": "/ uke",
"vanity_downloads_hint": "Visningstall: ingen pakker vist | Visningstall: for den viste pakken | Visningstall: Sum av {count} viste pakker",
"sort": {
@@ -139,7 +138,11 @@
"role": "rolle",
"members": "medlemmer"
},
- "scroll_to_top": "Rull til toppen"
+ "scroll_to_top": "Rull til toppen",
+ "view_on": {
+ "npm": "vis på npm",
+ "github": "Vis på GitHub"
+ }
},
"package": {
"not_found": "Pakke ikke funnet",
@@ -234,7 +237,6 @@
"readme": {
"title": "Readme",
"no_readme": "Ingen README tilgjengelig.",
- "view_on_github": "Vis på GitHub",
"toc_title": "Innhold",
"callout": {
"note": "Merk",
diff --git a/i18n/locales/ne-NP.json b/i18n/locales/ne-NP.json
index 9427484fef..c29f249374 100644
--- a/i18n/locales/ne-NP.json
+++ b/i18n/locales/ne-NP.json
@@ -100,7 +100,6 @@
"skip_link": "मुख्य सामग्रीमा जानुहोस्",
"warnings": "चेतावनीहरू:",
"go_back_home": "होममा फर्कनुहोस्",
- "view_on_npm": "npm मा हेर्नुहोस्",
"per_week": "/ हप्ता",
"vanity_downloads_hint": "भ्यानिटी नम्बर: कुनै प्याकेज देखाइएको छैन | भ्यानिटी नम्बर: देखाइएको प्याकेजका लागि | भ्यानिटी नम्बर: देखाइएको {count} प्याकेजहरूको योग",
"sort": {
@@ -108,7 +107,11 @@
"role": "भूमिका",
"members": "सदस्यहरू"
},
- "scroll_to_top": "माथि स्क्रोल गर्नुहोस्"
+ "scroll_to_top": "माथि स्क्रोल गर्नुहोस्",
+ "view_on": {
+ "npm": "npm मा हेर्नुहोस्",
+ "github": "GitHub मा हेर्नुहोस्"
+ }
},
"package": {
"not_found": "प्याकेज फेला परेन",
@@ -181,7 +184,6 @@
"readme": {
"title": "README",
"no_readme": "README उपलब्ध छैन।",
- "view_on_github": "GitHub मा हेर्नुहोस्",
"callout": {}
},
"provenance_section": {},
diff --git a/i18n/locales/pl-PL.json b/i18n/locales/pl-PL.json
index 048e6fbafc..7aa71953f7 100644
--- a/i18n/locales/pl-PL.json
+++ b/i18n/locales/pl-PL.json
@@ -136,7 +136,6 @@
"skip_link": "Przejdź do głównej treści",
"warnings": "Ostrzeżenia:",
"go_back_home": "Wróć na stronę główną",
- "view_on_npm": "zobacz na npm",
"per_week": "/ tydz.",
"vanity_downloads_hint": "Numer ozdobny: brak wyświetlonych pakietów | Numer ozdobny: dla wyświetlanego pakietu | Numer ozdobny: suma {count} wyświetlanych pakietów | Numer ozdobny: suma {count} wyświetlanych pakietów | Numer ozdobny: suma {count} wyświetlanych pakietów",
"sort": {
@@ -144,7 +143,11 @@
"role": "rola",
"members": "członkowie"
},
- "scroll_to_top": "Przewiń na górę"
+ "scroll_to_top": "Przewiń na górę",
+ "view_on": {
+ "npm": "zobacz na npm",
+ "github": "Zobacz na GitHub"
+ }
},
"package": {
"not_found": "Nie znaleziono pakietu",
@@ -249,7 +252,6 @@
"readme": {
"title": "README",
"no_readme": "Brak README.",
- "view_on_github": "Zobacz na GitHub",
"toc_title": "Spis treści",
"callout": {
"note": "Notatka",
diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json
index 0d008131e0..e625bc277f 100644
--- a/i18n/locales/pt-BR.json
+++ b/i18n/locales/pt-BR.json
@@ -101,7 +101,6 @@
"skip_link": "Pular para o conteúdo principal",
"warnings": "Avisos:",
"go_back_home": "Voltar para a página inicial",
- "view_on_npm": "visualizar no npm",
"per_week": "/ semana",
"vanity_downloads_hint": "Número de vaidade: nenhum pacote exibido | Número de vaidade: para o pacote exibido | Número de vaidade: Soma de {count} pacotes exibidos",
"sort": {
@@ -109,7 +108,11 @@
"role": "função",
"members": "membros"
},
- "scroll_to_top": "Rolar para o topo"
+ "scroll_to_top": "Rolar para o topo",
+ "view_on": {
+ "npm": "visualizar no npm",
+ "github": "Ver no GitHub"
+ }
},
"package": {
"not_found": "Pacote não encontrado",
@@ -196,7 +199,6 @@
"readme": {
"title": "Readme",
"no_readme": "README não disponível.",
- "view_on_github": "Ver no GitHub",
"callout": {}
},
"provenance_section": {},
diff --git a/i18n/locales/ru-RU.json b/i18n/locales/ru-RU.json
index ee400df62d..4597a75e4b 100644
--- a/i18n/locales/ru-RU.json
+++ b/i18n/locales/ru-RU.json
@@ -132,7 +132,6 @@
"skip_link": "Перейти к основному контенту",
"warnings": "Предупреждения:",
"go_back_home": "Вернуться на главную",
- "view_on_npm": "посмотреть на npm",
"per_week": "/ неделю",
"vanity_downloads_hint": "Метрика тщеславия: пакеты не отображаются | Метрика тщеславия: для отображаемого пакета | Метрика тщеславия: сумма {count} отображаемых пакетов",
"sort": {
@@ -140,7 +139,11 @@
"role": "роль",
"members": "участники"
},
- "scroll_to_top": "Прокрутить наверх"
+ "scroll_to_top": "Прокрутить наверх",
+ "view_on": {
+ "npm": "посмотреть на npm",
+ "github": "Посмотреть на GitHub"
+ }
},
"package": {
"not_found": "Пакет не найден",
@@ -245,7 +248,6 @@
"readme": {
"title": "Readme",
"no_readme": "README недоступен.",
- "view_on_github": "Посмотреть на GitHub",
"toc_title": "Содержание",
"callout": {
"note": "Примечание",
diff --git a/i18n/locales/ta-IN.json b/i18n/locales/ta-IN.json
index d0a0babf2c..15533bd844 100644
--- a/i18n/locales/ta-IN.json
+++ b/i18n/locales/ta-IN.json
@@ -131,7 +131,6 @@
"skip_link": "முதன்மை உள்ளடக்கத்திற்குத் தாவு",
"warnings": "எச்சரிக்கைகள்:",
"go_back_home": "முகப்புக்குத் திரும்பு",
- "view_on_npm": "npm-ல் காண்க",
"per_week": "/ வாரம்",
"vanity_downloads_hint": "அலங்கார எண்: தொகுப்புகள் எதுவும் காட்டப்படவில்லை | அலங்கார எண்: காட்டப்பட்ட தொகுப்புக்கு | அலங்கார எண்: {count} காட்டப்பட்ட தொகுப்புகளின் கூட்டுத்தொகை",
"sort": {
@@ -139,7 +138,11 @@
"role": "பங்கு",
"members": "உறுப்பினர்கள்"
},
- "scroll_to_top": "மேலே செல்"
+ "scroll_to_top": "மேலே செல்",
+ "view_on": {
+ "npm": "npm-ல் காண்க",
+ "github": "GitHub-ல் காண்க"
+ }
},
"package": {
"not_found": "தொகுப்பு கிடைக்கவில்லை",
@@ -234,7 +237,6 @@
"readme": {
"title": "Readme",
"no_readme": "README கிடைக்கவில்லை.",
- "view_on_github": "GitHub-ல் காண்க",
"toc_title": "உள்ளடக்கம்",
"callout": {
"note": "குறிப்பு",
diff --git a/i18n/locales/te-IN.json b/i18n/locales/te-IN.json
index 6afb9aff75..967e06ed27 100644
--- a/i18n/locales/te-IN.json
+++ b/i18n/locales/te-IN.json
@@ -100,7 +100,6 @@
"skip_link": "ప్రధాన కంటెంట్కు వెళ్లండి",
"warnings": "హెచ్చరికలు:",
"go_back_home": "హోమ్కు వెనక్కి వెళ్లండి",
- "view_on_npm": "npm లో వీక్షించండి",
"per_week": "/ వారం",
"vanity_downloads_hint": "వానిటీ నంబర్: ప్యాకేజ్ ప్రదర్శించబడలేదు | వానిటీ నంబర్: ప్రదర్శించబడిన ప్యాకేజ్కు | వానిటీ నంబర్: {count} ప్రదర్శించబడిన ప్యాకేజ్ల మొత్తం",
"sort": {
@@ -108,7 +107,11 @@
"role": "పాత్ర",
"members": "సభ్యులు"
},
- "scroll_to_top": "పైకి స్క్రోల్ చేయండి"
+ "scroll_to_top": "పైకి స్క్రోల్ చేయండి",
+ "view_on": {
+ "npm": "npm లో వీక్షించండి",
+ "github": "GitHub లో వీక్షించండి"
+ }
},
"package": {
"not_found": "ప్యాకేజ్ కనుగొనబడలేదు",
@@ -195,7 +198,6 @@
"readme": {
"title": "రీడ్మీ",
"no_readme": "README అందుబాటులో లేదు.",
- "view_on_github": "GitHub లో వీక్షించండి",
"callout": {}
},
"provenance_section": {},
diff --git a/i18n/locales/tr-TR.json b/i18n/locales/tr-TR.json
index 81246c99d2..11dd702266 100644
--- a/i18n/locales/tr-TR.json
+++ b/i18n/locales/tr-TR.json
@@ -178,7 +178,6 @@
"skip_link": "Ana içeriğe geç",
"warnings": "Uyarılar:",
"go_back_home": "Ana sayfaya dön",
- "view_on_npm": "npm'de görüntüle",
"per_week": "/ hafta",
"vanity_downloads_hint": "Gösterge: paket gösterilmiyor | Gösterge: gösterilen paket için | Gösterge: {count} gösterilen paketin toplamı",
"sort": {
@@ -190,7 +189,11 @@
"cancel": "İptal",
"save": "Kaydet",
"edit": "Düzenle",
- "error": "Hata"
+ "error": "Hata",
+ "view_on": {
+ "npm": "npm'de görüntüle",
+ "github": "GitHub'da görüntüle"
+ }
},
"profile": {
"display_name": "Görünen ad",
@@ -312,7 +315,6 @@
"readme": {
"title": "Readme",
"no_readme": "README mevcut değil.",
- "view_on_github": "GitHub'da görüntüle",
"toc_title": "İçindekiler",
"callout": {
"note": "Not",
diff --git a/i18n/locales/uk-UA.json b/i18n/locales/uk-UA.json
index 796e41846f..533daeb68e 100644
--- a/i18n/locales/uk-UA.json
+++ b/i18n/locales/uk-UA.json
@@ -178,7 +178,6 @@
"skip_link": "Перейти до основного змісту",
"warnings": "Попередження:",
"go_back_home": "Повернутися на головну",
- "view_on_npm": "переглянути на npm",
"per_week": "/ тиждень",
"vanity_downloads_hint": "Номер пакету: пакети не відображаються | Номер пакету: для пакету, що відображається | Номер пакету: Сума {count} пакетів, що відображаються",
"sort": {
@@ -190,7 +189,11 @@
"cancel": "Скасувати",
"save": "Зберегти",
"edit": "Редагувати",
- "error": "Помилка"
+ "error": "Помилка",
+ "view_on": {
+ "npm": "переглянути на npm",
+ "github": "Переглянути на GitHub"
+ }
},
"profile": {
"display_name": "Відображуване ім'я",
@@ -312,7 +315,6 @@
"readme": {
"title": "Readme",
"no_readme": "README недоступна.",
- "view_on_github": "Переглянути на GitHub",
"toc_title": "Зміст",
"callout": {
"note": "Примітка",
diff --git a/i18n/locales/zh-CN.json b/i18n/locales/zh-CN.json
index ee7d0a3796..0f6dc9b60a 100644
--- a/i18n/locales/zh-CN.json
+++ b/i18n/locales/zh-CN.json
@@ -178,7 +178,6 @@
"skip_link": "跳转到主界面",
"warnings": "警告:",
"go_back_home": "返回首页",
- "view_on_npm": "在 npm 上查看",
"per_week": "/ 周",
"vanity_downloads_hint": "累计下载量:未显示包 | 累计下载量:显示的包 | 累计下载量:{count} 个显示的包的总和",
"sort": {
@@ -190,7 +189,11 @@
"cancel": "取消",
"save": "保存",
"edit": "编辑",
- "error": "加载出错"
+ "error": "加载出错",
+ "view_on": {
+ "npm": "在 npm 上查看",
+ "github": "在 GitHub 上查看"
+ }
},
"profile": {
"display_name": "显示名称",
@@ -312,7 +315,6 @@
"readme": {
"title": "自述文件",
"no_readme": "无可用自述文件。",
- "view_on_github": "在 GitHub 上查看",
"toc_title": "目录",
"callout": {
"note": "注意",
diff --git a/i18n/locales/zh-TW.json b/i18n/locales/zh-TW.json
index bf648cc7e5..164336795e 100644
--- a/i18n/locales/zh-TW.json
+++ b/i18n/locales/zh-TW.json
@@ -136,7 +136,6 @@
"skip_link": "跳至主要內容",
"warnings": "警告:",
"go_back_home": "回到首頁",
- "view_on_npm": "在 npm 上檢視",
"per_week": "/ 週",
"vanity_downloads_hint": "顯示下載量:未顯示套件 | 顯示下載量:顯示的套件 | 顯示下載量:顯示的 {count} 個套件總和",
"sort": {
@@ -148,7 +147,11 @@
"cancel": "取消",
"save": "儲存",
"edit": "編輯",
- "error": "錯誤"
+ "error": "錯誤",
+ "view_on": {
+ "npm": "在 npm 上檢視",
+ "github": "在 GitHub 上檢視"
+ }
},
"profile": {
"display_name": "顯示名稱",
@@ -270,7 +273,6 @@
"readme": {
"title": "README",
"no_readme": "沒有可用的 README。",
- "view_on_github": "在 GitHub 上檢視",
"toc_title": "大綱",
"callout": {
"note": "注意",
diff --git a/i18n/schema.json b/i18n/schema.json
index 4ed08a60b2..88dfcab7dd 100644
--- a/i18n/schema.json
+++ b/i18n/schema.json
@@ -538,9 +538,6 @@
"go_back_home": {
"type": "string"
},
- "view_on_npm": {
- "type": "string"
- },
"per_week": {
"type": "string"
},
@@ -576,6 +573,48 @@
},
"error": {
"type": "string"
+ },
+ "view_on": {
+ "type": "object",
+ "properties": {
+ "npm": {
+ "type": "string"
+ },
+ "github": {
+ "type": "string"
+ },
+ "gitlab": {
+ "type": "string"
+ },
+ "bitbucket": {
+ "type": "string"
+ },
+ "codeberg": {
+ "type": "string"
+ },
+ "git_repo": {
+ "type": "string"
+ },
+ "forgejo": {
+ "type": "string"
+ },
+ "gitea": {
+ "type": "string"
+ },
+ "gitee": {
+ "type": "string"
+ },
+ "radicle": {
+ "type": "string"
+ },
+ "sourcehut": {
+ "type": "string"
+ },
+ "tangled": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
}
},
"additionalProperties": false
@@ -940,9 +979,6 @@
"no_readme": {
"type": "string"
},
- "view_on_github": {
- "type": "string"
- },
"toc_title": {
"type": "string"
},
From e2398c4b8267a6b0dd3ff8bcc8c4633f96dec301 Mon Sep 17 00:00:00 2001
From: WilcoSp
Date: Fri, 6 Mar 2026 16:51:10 +0100
Subject: [PATCH 2/8] capitalize "git" in "common.view_on.git_repo"
---
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 c432e707e1..425ec9bf76 100644
--- a/i18n/locales/en.json
+++ b/i18n/locales/en.json
@@ -196,7 +196,7 @@
"gitlab": "View on GitLab",
"bitbucket": "View on Bitbucket",
"codeberg": "View on Codeberg",
- "git_repo": "View on git repository",
+ "git_repo": "View on Git repository",
"forgejo": "View on Forgejo",
"gitea": "View on Gitea",
"gitee": "View on Gitee",
From 145cd00c2f4dcd4905af0473fa1423aef0b609c6 Mon Sep 17 00:00:00 2001
From: WilcoSp
Date: Fri, 6 Mar 2026 21:37:34 +0100
Subject: [PATCH 3/8] moved from switch case to `te` function to check whether
view_on.{provider}
---
app/composables/useViewOnGitProvider.ts | 27 ++++---------------------
1 file changed, 4 insertions(+), 23 deletions(-)
diff --git a/app/composables/useViewOnGitProvider.ts b/app/composables/useViewOnGitProvider.ts
index 2322f781a7..45013cf304 100644
--- a/app/composables/useViewOnGitProvider.ts
+++ b/app/composables/useViewOnGitProvider.ts
@@ -4,31 +4,12 @@
export function useViewOnGitProvider(
provider: MaybeRefOrGetter,
) {
- const { t } = useI18n()
+ const { t, te } = useI18n()
return computed(() => {
const uProvider = toValue(provider)
- // using this switch instead of `view_on.${provider}` to prevent missing future translations
- switch (uProvider) {
- case 'github':
- return t('common.view_on.github')
- case 'gitlab':
- return t('common.view_on.gitlab')
- case 'bitbucket':
- return t('common.view_on.bitbucket')
- case 'codeberg':
- return t('common.view_on.codeberg')
- case 'forgejo':
- return t('common.view_on.forgejo')
- case 'gitea':
- return t('common.view_on.gitea')
- case 'gitee':
- return t('common.view_on.gitee')
- case 'radicle':
- return t('common.view_on.radicle')
- case 'sourcehut':
- return t('common.view_on.sourcehut')
- case 'tangled':
- return t('common.view_on.tangled')
+ const key = `common.view_on.${uProvider}`
+ if (uProvider && te(key)) {
+ return t(key)
}
return t('common.view_on.git_repo')
})
From 490969093fa40bffee599c40b8e3e6bb226ec5d3 Mon Sep 17 00:00:00 2001
From: WilcoSp
Date: Fri, 6 Mar 2026 22:04:28 +0100
Subject: [PATCH 4/8] added isGitProviderId function so that checkin
---
app/composables/useViewOnGitProvider.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/app/composables/useViewOnGitProvider.ts b/app/composables/useViewOnGitProvider.ts
index 45013cf304..8005d44ccb 100644
--- a/app/composables/useViewOnGitProvider.ts
+++ b/app/composables/useViewOnGitProvider.ts
@@ -7,9 +7,9 @@ export function useViewOnGitProvider(
const { t, te } = useI18n()
return computed(() => {
const uProvider = toValue(provider)
- const key = `common.view_on.${uProvider}`
- if (uProvider && te(key)) {
- return t(key)
+ if (uProvider && te(`common.view_on.${uProvider}`)) {
+ // TODO this currently fails i18n:report
+ return t(`common.view_on.${uProvider}`)
}
return t('common.view_on.git_repo')
})
From 3d8997b80e7f434243a8ce0e7d1243bebbe03192 Mon Sep 17 00:00:00 2001
From: WilcoSp
Date: Sat, 7 Mar 2026 08:22:03 +0100
Subject: [PATCH 5/8] Revert "moved from switch case to `te` function to check
whether view_on.{provider}"
This reverts commit 145cd00c2f4dcd4905af0473fa1423aef0b609c6.
---
app/composables/useViewOnGitProvider.ts | 27 +++++++++++++++++++++----
1 file changed, 23 insertions(+), 4 deletions(-)
diff --git a/app/composables/useViewOnGitProvider.ts b/app/composables/useViewOnGitProvider.ts
index 8005d44ccb..2322f781a7 100644
--- a/app/composables/useViewOnGitProvider.ts
+++ b/app/composables/useViewOnGitProvider.ts
@@ -4,12 +4,31 @@
export function useViewOnGitProvider(
provider: MaybeRefOrGetter,
) {
- const { t, te } = useI18n()
+ const { t } = useI18n()
return computed(() => {
const uProvider = toValue(provider)
- if (uProvider && te(`common.view_on.${uProvider}`)) {
- // TODO this currently fails i18n:report
- return t(`common.view_on.${uProvider}`)
+ // using this switch instead of `view_on.${provider}` to prevent missing future translations
+ switch (uProvider) {
+ case 'github':
+ return t('common.view_on.github')
+ case 'gitlab':
+ return t('common.view_on.gitlab')
+ case 'bitbucket':
+ return t('common.view_on.bitbucket')
+ case 'codeberg':
+ return t('common.view_on.codeberg')
+ case 'forgejo':
+ return t('common.view_on.forgejo')
+ case 'gitea':
+ return t('common.view_on.gitea')
+ case 'gitee':
+ return t('common.view_on.gitee')
+ case 'radicle':
+ return t('common.view_on.radicle')
+ case 'sourcehut':
+ return t('common.view_on.sourcehut')
+ case 'tangled':
+ return t('common.view_on.tangled')
}
return t('common.view_on.git_repo')
})
From 5d19137e31f043eee166b545cf64196d0f23bdb5 Mon Sep 17 00:00:00 2001
From: WilcoSp
Date: Sat, 7 Mar 2026 10:36:50 +0100
Subject: [PATCH 6/8] the view_on translations for the git providers are now in
the comments to satisfy i18n report
---
app/composables/useViewOnGitProvider.ts | 45 ++++++++++++-------------
1 file changed, 22 insertions(+), 23 deletions(-)
diff --git a/app/composables/useViewOnGitProvider.ts b/app/composables/useViewOnGitProvider.ts
index 2322f781a7..3f08fdb08c 100644
--- a/app/composables/useViewOnGitProvider.ts
+++ b/app/composables/useViewOnGitProvider.ts
@@ -4,32 +4,31 @@
export function useViewOnGitProvider(
provider: MaybeRefOrGetter,
) {
- const { t } = useI18n()
+ const { t, te } = useI18n()
return computed(() => {
const uProvider = toValue(provider)
- // using this switch instead of `view_on.${provider}` to prevent missing future translations
- switch (uProvider) {
- case 'github':
- return t('common.view_on.github')
- case 'gitlab':
- return t('common.view_on.gitlab')
- case 'bitbucket':
- return t('common.view_on.bitbucket')
- case 'codeberg':
- return t('common.view_on.codeberg')
- case 'forgejo':
- return t('common.view_on.forgejo')
- case 'gitea':
- return t('common.view_on.gitea')
- case 'gitee':
- return t('common.view_on.gitee')
- case 'radicle':
- return t('common.view_on.radicle')
- case 'sourcehut':
- return t('common.view_on.sourcehut')
- case 'tangled':
- return t('common.view_on.tangled')
+ if (!uProvider) {
+ return t('common.view_on.git_repo')
}
+ const key = `common.view_on.${uProvider}`
+ if (te(key)) {
+ return t(key)
+ }
+ // oxlint-disable-next-line no-console
+ console.warn(`"common.view_on.${uProvider}" translation doesn't exist`)
return t('common.view_on.git_repo')
})
}
+
+/* for i18n report, translations that are currently present:
+t('common.view_on.github')
+t('common.view_on.gitlab')
+t('common.view_on.bitbucket')
+t('common.view_on.codeberg')
+t('common.view_on.forgejo')
+t('common.view_on.gitea')
+t('common.view_on.gitee')
+t('common.view_on.radicle')
+t('common.view_on.sourcehut')
+t('common.view_on.tangled')
+ */
From edd015eede303ea35ef73df700ef6d5ae68bc08e Mon Sep 17 00:00:00 2001
From: userquin
Date: Sat, 7 Mar 2026 12:39:50 +0100
Subject: [PATCH 7/8] chore: warn missing git provider
---
app/composables/useViewOnGitProvider.ts | 46 +++++++++++++++----------
1 file changed, 27 insertions(+), 19 deletions(-)
diff --git a/app/composables/useViewOnGitProvider.ts b/app/composables/useViewOnGitProvider.ts
index 3f08fdb08c..415773dbc0 100644
--- a/app/composables/useViewOnGitProvider.ts
+++ b/app/composables/useViewOnGitProvider.ts
@@ -4,31 +4,39 @@
export function useViewOnGitProvider(
provider: MaybeRefOrGetter,
) {
- const { t, te } = useI18n()
+ const { t } = useI18n()
return computed(() => {
const uProvider = toValue(provider)
if (!uProvider) {
return t('common.view_on.git_repo')
}
- const key = `common.view_on.${uProvider}`
- if (te(key)) {
- return t(key)
+ switch (uProvider) {
+ case 'github':
+ return t('common.view_on.github')
+ case 'gitlab':
+ return t('common.view_on.gitlab')
+ case 'bitbucket':
+ return t('common.view_on.bitbucket')
+ case 'codeberg':
+ return t('common.view_on.codeberg')
+ case 'forgejo':
+ return t('common.view_on.forgejo')
+ case 'gitea':
+ return t('common.view_on.gitea')
+ case 'gitee':
+ return t('common.view_on.gitee')
+ case 'radicle':
+ return t('common.view_on.radicle')
+ case 'sourcehut':
+ return t('common.view_on.sourcehut')
+ case 'git':
+ return t('common.view_on.git_repo')
+ }
+
+ if (import.meta.dev) {
+ // oxlint-disable-next-line no-console
+ console.warn(`missing '${uProvider}' provider, add it to shared/utils/git-providers.ts!`)
}
- // oxlint-disable-next-line no-console
- console.warn(`"common.view_on.${uProvider}" translation doesn't exist`)
return t('common.view_on.git_repo')
})
}
-
-/* for i18n report, translations that are currently present:
-t('common.view_on.github')
-t('common.view_on.gitlab')
-t('common.view_on.bitbucket')
-t('common.view_on.codeberg')
-t('common.view_on.forgejo')
-t('common.view_on.gitea')
-t('common.view_on.gitee')
-t('common.view_on.radicle')
-t('common.view_on.sourcehut')
-t('common.view_on.tangled')
- */
From a7cbfd838b72b0970f8332abfce9203a075f04d0 Mon Sep 17 00:00:00 2001
From: userquin
Date: Sat, 7 Mar 2026 12:46:22 +0100
Subject: [PATCH 8/8] chore: add tangled provider
---
app/composables/useViewOnGitProvider.ts | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/app/composables/useViewOnGitProvider.ts b/app/composables/useViewOnGitProvider.ts
index 415773dbc0..d18e6ef9b3 100644
--- a/app/composables/useViewOnGitProvider.ts
+++ b/app/composables/useViewOnGitProvider.ts
@@ -17,18 +17,20 @@ export function useViewOnGitProvider(
return t('common.view_on.gitlab')
case 'bitbucket':
return t('common.view_on.bitbucket')
- case 'codeberg':
- return t('common.view_on.codeberg')
- case 'forgejo':
- return t('common.view_on.forgejo')
case 'gitea':
return t('common.view_on.gitea')
+ case 'forgejo':
+ return t('common.view_on.forgejo')
+ case 'codeberg':
+ return t('common.view_on.codeberg')
+ case 'sourcehut':
+ return t('common.view_on.sourcehut')
case 'gitee':
return t('common.view_on.gitee')
+ case 'tangled':
+ return t('common.view_on.tangled')
case 'radicle':
return t('common.view_on.radicle')
- case 'sourcehut':
- return t('common.view_on.sourcehut')
case 'git':
return t('common.view_on.git_repo')
}