From 20cc366c32c72fcea858758405ad9b619e78ca8d Mon Sep 17 00:00:00 2001 From: johnnyreilly Date: Sun, 8 Feb 2026 09:38:10 +0000 Subject: [PATCH 1/3] feat: add rate limit message to the UI --- app/composables/npm/useNpmSearch.ts | 103 ++++++++++++++++++---------- app/pages/search.vue | 14 +++- i18n/locales/en.json | 1 + lunaria/files/en-GB.json | 1 + lunaria/files/en-US.json | 1 + 5 files changed, 79 insertions(+), 41 deletions(-) diff --git a/app/composables/npm/useNpmSearch.ts b/app/composables/npm/useNpmSearch.ts index 77fdf738a..af62c2a0a 100644 --- a/app/composables/npm/useNpmSearch.ts +++ b/app/composables/npm/useNpmSearch.ts @@ -65,6 +65,10 @@ export function useNpmSearch( const isLoadingMore = shallowRef(false) + // Track rate limit errors separately for better UX + // Using ref instead of shallowRef to ensure reactivity triggers properly + const isRateLimited = ref(false) + // Standard (non-incremental) search implementation let lastSearch: NpmSearchResponse | undefined = undefined @@ -74,13 +78,14 @@ export function useNpmSearch( const q = toValue(query) if (!q.trim()) { + isRateLimited.value = false return emptySearchResponse } const opts = toValue(options) // This only runs for initial load or query changes - // Reset cache for new query + // Reset cache for new query (but don't reset rate limit yet - only on success) cache.value = null const params = new URLSearchParams() @@ -88,20 +93,49 @@ export function useNpmSearch( // Use requested size for initial fetch params.set('size', String(opts.size ?? 25)) - if (q.length === 1) { - const encodedName = encodePackageName(q) - const [{ data: pkg, isStale }, { data: downloads }] = await Promise.all([ - $npmRegistry(`/${encodedName}`, { signal }), - $npmApi(`/downloads/point/last-week/${encodedName}`, { - signal, - }), - ]) - - if (!pkg) { - return emptySearchResponse + try { + if (q.length === 1) { + const encodedName = encodePackageName(q) + const [{ data: pkg, isStale }, { data: downloads }] = await Promise.all([ + $npmRegistry(`/${encodedName}`, { signal }), + $npmApi(`/downloads/point/last-week/${encodedName}`, { + signal, + }), + ]) + + if (!pkg) { + return emptySearchResponse + } + + const result = packumentToSearchResult(pkg, downloads?.downloads) + + // If query changed/outdated, return empty search response + if (q !== toValue(query)) { + return emptySearchResponse + } + + cache.value = { + query: q, + objects: [result], + total: 1, + } + + // Success - clear rate limit flag + isRateLimited.value = false + + return { + objects: [result], + total: 1, + isStale, + time: new Date().toISOString(), + } } - const result = packumentToSearchResult(pkg, downloads?.downloads) + const { data: response, isStale } = await $npmRegistry( + `/-/v1/search?${params.toString()}`, + { signal }, + 60, + ) // If query changed/outdated, return empty search response if (q !== toValue(query)) { @@ -110,36 +144,27 @@ export function useNpmSearch( cache.value = { query: q, - objects: [result], - total: 1, - } - - return { - objects: [result], - total: 1, - isStale, - time: new Date().toISOString(), + objects: response.objects, + total: response.total, } - } - const { data: response, isStale } = await $npmRegistry( - `/-/v1/search?${params.toString()}`, - { signal }, - 60, - ) + // Success - clear rate limit flag + isRateLimited.value = false - // If query changed/outdated, return empty search response - if (q !== toValue(query)) { - return emptySearchResponse - } + return { ...response, isStale } + } catch (error: unknown) { + // Detect rate limit errors. npm's 429 response doesn't include CORS headers, + // so the browser reports "Failed to fetch" instead of the actual status code. + const errorMessage = (error as { message?: string })?.message || String(error) + const isRateLimitError = + errorMessage.includes('Failed to fetch') || errorMessage.includes('429') - cache.value = { - query: q, - objects: response.objects, - total: response.total, + if (isRateLimitError) { + isRateLimited.value = true + return emptySearchResponse + } + throw error } - - return { ...response, isStale } }, { default: () => lastSearch || emptySearchResponse }, ) @@ -260,5 +285,7 @@ export function useNpmSearch( hasMore, /** Manually fetch more results up to target size (incremental mode only) */ fetchMore, + /** Whether the search was rate limited by npm (429 error) */ + isRateLimited: readonly(isRateLimited), } } diff --git a/app/pages/search.vue b/app/pages/search.vue index 8700b574f..173228ff1 100644 --- a/app/pages/search.vue +++ b/app/pages/search.vue @@ -72,6 +72,7 @@ const { isLoadingMore, hasMore, fetchMore, + isRateLimited, } = useNpmSearch(query, () => ({ size: requestedSize.value, incremental: true, @@ -706,8 +707,15 @@ defineOgImageComponent('Default', { + +
+

+ {{ $t('search.rate_limited') }} +

+
+ -
+
Date: Sun, 8 Feb 2026 14:05:46 +0000 Subject: [PATCH 2/3] feat: internationalisation for rate_limited --- lunaria/files/ar-EG.json | 1 + lunaria/files/az-AZ.json | 1 + lunaria/files/cs-CZ.json | 1 + lunaria/files/de-DE.json | 1 + lunaria/files/es-419.json | 1 + lunaria/files/es-ES.json | 1 + lunaria/files/fr-FR.json | 1 + lunaria/files/hi-IN.json | 1 + lunaria/files/hu-HU.json | 1 + lunaria/files/id-ID.json | 1 + lunaria/files/it-IT.json | 1 + lunaria/files/ja-JP.json | 1 + lunaria/files/mr-IN.json | 1 + lunaria/files/ne-NP.json | 1 + lunaria/files/no-NO.json | 1 + lunaria/files/pl-PL.json | 1 + lunaria/files/pt-BR.json | 1 + lunaria/files/ru-RU.json | 1 + lunaria/files/te-IN.json | 1 + lunaria/files/uk-UA.json | 1 + lunaria/files/zh-CN.json | 1 + lunaria/files/zh-TW.json | 1 + 22 files changed, 22 insertions(+) diff --git a/lunaria/files/ar-EG.json b/lunaria/files/ar-EG.json index cf8034573..0d2a32bb1 100644 --- a/lunaria/files/ar-EG.json +++ b/lunaria/files/ar-EG.json @@ -25,6 +25,7 @@ "found_packages": "تم العثور على {count} حزمة | تم العثور على حزمة واحدة | تم العثور على حزمتين | تم العثور على {count} حزم | تم العثور على {count} حزمة | تم العثور على {count} حزمة", "updating": "(جارٍ التحديث…)", "no_results": "لم يتم العثور على حزم لـ \"{query}\"", + "rate_limited": "تم الوصول إلى حد طلبات npm، حاول مرة أخرى بعد لحظة", "title": "بحث", "title_search": "بحث: {search}", "title_packages": "البحث عن الحزم", diff --git a/lunaria/files/az-AZ.json b/lunaria/files/az-AZ.json index bdb420308..69c7099e8 100644 --- a/lunaria/files/az-AZ.json +++ b/lunaria/files/az-AZ.json @@ -23,6 +23,7 @@ "found_packages": "Paket tapılmadı | 1 paket tapıldı | {count} paket tapıldı", "updating": "(yenilənir...)", "no_results": "\"{query}\" üçün paket tapılmadı", + "rate_limited": "npm sorğu limitinə çatıldı, bir az sonra yenidən cəhd edin", "not_taken": "{name} tutulmayıb", "claim_prompt": "Bu paket adını npm-də tutun", "claim_button": "\"{name}\" adını tut", diff --git a/lunaria/files/cs-CZ.json b/lunaria/files/cs-CZ.json index d41d60714..8898ca599 100644 --- a/lunaria/files/cs-CZ.json +++ b/lunaria/files/cs-CZ.json @@ -25,6 +25,7 @@ "found_packages": "Nalezen {count} balíček | Nalezeny {count} balíčky | Nalezeno {count} balíčků", "updating": "(aktualizace...)", "no_results": "Žádné výsledky pro \"{query}\"", + "rate_limited": "Dosažen limit požadavků npm, zkuste to znovu za chvíli", "title": "hledání", "not_taken": "{name} není rezervováno", "claim_prompt": "Nárokovat toto jméno balíčku na npm", diff --git a/lunaria/files/de-DE.json b/lunaria/files/de-DE.json index 90d0344c9..5b8390fb1 100644 --- a/lunaria/files/de-DE.json +++ b/lunaria/files/de-DE.json @@ -25,6 +25,7 @@ "found_packages": "Keine Pakete gefunden | 1 Paket gefunden | {count} Pakete gefunden", "updating": "(wird aktualisiert...)", "no_results": "Keine Pakete gefunden für \"{query}\"", + "rate_limited": "npm-Ratenlimit erreicht, versuche es gleich nochmal", "title": "Suche", "title_search": "Suche: {search}", "title_packages": "Suche Pakete", diff --git a/lunaria/files/es-419.json b/lunaria/files/es-419.json index a7aa535ea..779e08655 100644 --- a/lunaria/files/es-419.json +++ b/lunaria/files/es-419.json @@ -25,6 +25,7 @@ "found_packages": "No se encontraron paquetes | Se encontró 1 paquete | Se encontraron {count} paquetes", "updating": "(actualizando...)", "no_results": "No se encontraron paquetes para \"{query}\"", + "rate_limited": "Se alcanzó el límite de solicitudes de npm, intenta de nuevo en un momento", "title": "búsqueda", "title_search": "búsqueda: {search}", "title_packages": "búsqueda de paquetes", diff --git a/lunaria/files/es-ES.json b/lunaria/files/es-ES.json index f9165fffd..492014815 100644 --- a/lunaria/files/es-ES.json +++ b/lunaria/files/es-ES.json @@ -25,6 +25,7 @@ "found_packages": "No se encontraron paquetes | Se encontró 1 paquete | Se encontraron {count} paquetes", "updating": "(actualizando...)", "no_results": "No se encontraron paquetes para \"{query}\"", + "rate_limited": "Se alcanzó el límite de solicitudes de npm, inténtalo de nuevo en un momento", "title": "búsqueda", "title_search": "búsqueda: {search}", "title_packages": "búsqueda de paquetes", diff --git a/lunaria/files/fr-FR.json b/lunaria/files/fr-FR.json index e7129e4d2..872f87c3c 100644 --- a/lunaria/files/fr-FR.json +++ b/lunaria/files/fr-FR.json @@ -25,6 +25,7 @@ "found_packages": "{count} paquets trouvés", "updating": "(mise à jour...)", "no_results": "Aucun paquet trouvé pour « {query} »", + "rate_limited": "Limite de requêtes npm atteinte, réessayez dans un instant", "title": "Recherche", "not_taken": "{name} n'est pas pris", "claim_prompt": "Réserver ce nom de paquet sur npm", diff --git a/lunaria/files/hi-IN.json b/lunaria/files/hi-IN.json index 18e5de866..9d568170f 100644 --- a/lunaria/files/hi-IN.json +++ b/lunaria/files/hi-IN.json @@ -25,6 +25,7 @@ "found_packages": "कोई पैकेज नहीं मिला | 1 पैकेज मिला | {count} पैकेज मिले", "updating": "(अद्यतन हो रहा है...)", "no_results": "\"{query}\" के लिए कोई पैकेज नहीं मिला", + "rate_limited": "npm दर सीमा पूरी हो गई, कुछ देर बाद पुनः प्रयास करें", "not_taken": "{name} उपलब्ध है", "claim_prompt": "npm पर इस पैकेज नाम को दावा करें", "claim_button": "\"{name}\" दावा करें", diff --git a/lunaria/files/hu-HU.json b/lunaria/files/hu-HU.json index 221cb6f18..689e2df44 100644 --- a/lunaria/files/hu-HU.json +++ b/lunaria/files/hu-HU.json @@ -23,6 +23,7 @@ "found_packages": "Nincs találat | 1 csomag található | {count} csomag található", "updating": "(frissítés...)", "no_results": "Nincs találat a következőre: \"{query}\"", + "rate_limited": "Elérted az npm kéréslimitet, próbáld újra egy pillanat múlva", "not_taken": "{name} még szabad", "claim_prompt": "Foglald le ezt a csomagnevet az npm-en", "claim_button": "\"{name}\" lefoglalása", diff --git a/lunaria/files/id-ID.json b/lunaria/files/id-ID.json index 69716435d..91e478417 100644 --- a/lunaria/files/id-ID.json +++ b/lunaria/files/id-ID.json @@ -25,6 +25,7 @@ "found_packages": "Paket tidak ditemukan | Ditemukan 1 paket | Ditemukan {count} paket", "updating": "(memperbarui...)", "no_results": "Tidak ada paket yang ditemukan untuk \"{query}\"", + "rate_limited": "Batas permintaan npm tercapai, coba lagi sebentar", "not_taken": "{name} tersedia", "claim_prompt": "Klaim nama paket ini di npm", "claim_button": "Klaim \"{name}\"", diff --git a/lunaria/files/it-IT.json b/lunaria/files/it-IT.json index 57c5f83e7..cb6731111 100644 --- a/lunaria/files/it-IT.json +++ b/lunaria/files/it-IT.json @@ -25,6 +25,7 @@ "found_packages": "Trovati {count} pacchetti", "updating": "(aggiornando...)", "no_results": "Nessun pacchetto trovato per \"{query}\"", + "rate_limited": "Limite di richieste npm raggiunto, riprova tra un momento", "title": "cerca", "title_search": "cerca: {search}", "title_packages": "cerca pacchetti", diff --git a/lunaria/files/ja-JP.json b/lunaria/files/ja-JP.json index 4e1657f54..5e1312036 100644 --- a/lunaria/files/ja-JP.json +++ b/lunaria/files/ja-JP.json @@ -25,6 +25,7 @@ "found_packages": "{count} 個のパッケージが見つかりました", "updating": "(更新中...)", "no_results": "\"{query}\" に一致するパッケージは見つかりませんでした", + "rate_limited": "npmのレート制限に達しました。しばらくしてから再試行してください", "title": "検索", "title_search": "検索: {search}", "title_packages": "パッケージを検索", diff --git a/lunaria/files/mr-IN.json b/lunaria/files/mr-IN.json index 0833f9655..398adf65c 100644 --- a/lunaria/files/mr-IN.json +++ b/lunaria/files/mr-IN.json @@ -25,6 +25,7 @@ "found_packages": "कोणतेही पॅकेज सापडले नाही | 1 पॅकेज सापडले | {count} पॅकेजेस सापडल्या", "updating": "(अद्यतनित करत आहे...)", "no_results": "\"{query}\" साठी कोणतेही पॅकेज सापडले नाही", + "rate_limited": "npm दर मर्यादा गाठली, काही वेळाने पुन्हा प्रयत्न करा", "title": "शोध", "not_taken": "{name} उपलब्ध आहे", "claim_prompt": "npm वर हे पॅकेज नाव दावा करा", diff --git a/lunaria/files/ne-NP.json b/lunaria/files/ne-NP.json index 6e49d4a13..3bf4390aa 100644 --- a/lunaria/files/ne-NP.json +++ b/lunaria/files/ne-NP.json @@ -25,6 +25,7 @@ "found_packages": "कुनै प्याकेज फेला परेन | {count} प्याकेज फेला पर्यो | {count} प्याकेज फेला परे", "updating": "(अपडेट हुँदैछ...)", "no_results": "\"{query}\" का लागि कुनै प्याकेज फेला परेन", + "rate_limited": "npm दर सीमा पुग्यो, केही समय पछि पुनः प्रयास गर्नुहोस्", "not_taken": "{name} लिइएको छैन", "claim_prompt": "npm मा यो प्याकेज नाम दाबी गर्नुहोस्", "claim_button": "\"{name}\" दाबी गर्नुहोस्", diff --git a/lunaria/files/no-NO.json b/lunaria/files/no-NO.json index a4df82a2f..8a47a5f5c 100644 --- a/lunaria/files/no-NO.json +++ b/lunaria/files/no-NO.json @@ -25,6 +25,7 @@ "found_packages": "Ingen pakker funnet | Fant 1 pakke | Fant {count} pakker", "updating": "(oppdaterer...)", "no_results": "Ingen pakker funnet for \"{query}\"", + "rate_limited": "npm-hastighetsgrense nådd, prøv igjen om et øyeblikk", "title": "søk", "title_search": "søk: {search}", "title_packages": "søk pakker", diff --git a/lunaria/files/pl-PL.json b/lunaria/files/pl-PL.json index 51eebc2f1..ade825b6e 100644 --- a/lunaria/files/pl-PL.json +++ b/lunaria/files/pl-PL.json @@ -25,6 +25,7 @@ "found_packages": "Nie znaleziono pakietów | Znaleziono 1 pakiet | Znaleziono {count} pakiety | Znaleziono {count} pakietów | Znaleziono {count} pakietów", "updating": "(aktualizowanie...)", "no_results": "Nie znaleziono pakietów dla \"{query}\"", + "rate_limited": "Osiągnięto limit zapytań npm, spróbuj ponownie za chwilę", "title": "Wyszukiwanie", "not_taken": "{name} jest wolne", "claim_prompt": "Zajmij tę nazwę pakietu w npm", diff --git a/lunaria/files/pt-BR.json b/lunaria/files/pt-BR.json index a29718d18..5ffe716c3 100644 --- a/lunaria/files/pt-BR.json +++ b/lunaria/files/pt-BR.json @@ -25,6 +25,7 @@ "found_packages": "Nenhum pacote encontrado | 1 pacote encontrado | {count} pacotes encontrados", "updating": "(atualizando...)", "no_results": "Nenhum pacote encontrado para \"{query}\"", + "rate_limited": "Limite de requisições do npm atingido, tente novamente em instantes", "title": "pesquisar", "not_taken": "{name} não está em uso", "claim_prompt": "Reivindicar este nome de pacote no npm", diff --git a/lunaria/files/ru-RU.json b/lunaria/files/ru-RU.json index bac5a8937..28af54d40 100644 --- a/lunaria/files/ru-RU.json +++ b/lunaria/files/ru-RU.json @@ -23,6 +23,7 @@ "found_packages": "Пакетов не найдено | Найден 1 пакет | Найдено {count} пакетов", "updating": "(обновление...)", "no_results": "Пакетов по запросу \"{query}\" не найдено", + "rate_limited": "Достигнут лимит запросов npm, попробуйте снова через мгновение", "not_taken": "{name} не занято", "claim_prompt": "Занять это имя пакета в npm", "claim_button": "Занять \"{name}\"", diff --git a/lunaria/files/te-IN.json b/lunaria/files/te-IN.json index 05bd49a60..b9131ca20 100644 --- a/lunaria/files/te-IN.json +++ b/lunaria/files/te-IN.json @@ -25,6 +25,7 @@ "found_packages": "ప్యాకేజ్ కనుగొనబడలేదు | 1 ప్యాకేజ్ కనుగొనబడింది | {count} ప్యాకేజ్‌లు కనుగొనబడ్డాయి", "updating": "(నవీకరిస్తున్నారు...)", "no_results": "\"{query}\" కోసం ప్యాకేజ్‌లు కనుగొనబడలేదు", + "rate_limited": "npm రేట్ లిమిట్ చేరుకుంది, కొద్దిసేపట్లో మళ్ళీ ప్రయత్నించండి", "not_taken": "{name} అందుబాటులో ఉంది", "claim_prompt": "npm లో ఈ ప్యాకేజ్ పేరును క్లెయిమ్ చేయండి", "claim_button": "\"{name}\" క్లెయిమ్ చేయండి", diff --git a/lunaria/files/uk-UA.json b/lunaria/files/uk-UA.json index 4643daaee..c8f527c18 100644 --- a/lunaria/files/uk-UA.json +++ b/lunaria/files/uk-UA.json @@ -23,6 +23,7 @@ "found_packages": "Пакетів не знайдено | Знайдено 1 пакет | Знайдено {count} пакетів", "updating": "(оновлення...)", "no_results": "Пакетів не знайдено для \"{query}\"", + "rate_limited": "Досягнуто ліміт запитів npm, спробуйте знову через мить", "not_taken": "\"{name}\" не зайнято", "claim_prompt": "Зарезервуйте цю назву пакета на npm", "claim_button": "Зарезервувати \"{name}\"", diff --git a/lunaria/files/zh-CN.json b/lunaria/files/zh-CN.json index 852451d43..4ef5aed00 100644 --- a/lunaria/files/zh-CN.json +++ b/lunaria/files/zh-CN.json @@ -25,6 +25,7 @@ "found_packages": "共找到 {count} 个包", "updating": "(更新中…)", "no_results": "未找到匹配“{query}”的包", + "rate_limited": "已达到 npm 请求频率限制,请稍后重试", "title": "搜索", "title_search": "搜索:{search}", "title_packages": "搜索包", diff --git a/lunaria/files/zh-TW.json b/lunaria/files/zh-TW.json index c38fecfee..3a4fd7786 100644 --- a/lunaria/files/zh-TW.json +++ b/lunaria/files/zh-TW.json @@ -25,6 +25,7 @@ "found_packages": "共找到 {count} 個套件", "updating": "(更新中…)", "no_results": "找不到符合「{query}」的套件", + "rate_limited": "已達到 npm 請求頻率限制,請稍後再試", "title": "搜尋", "title_search": "搜尋:{search}", "title_packages": "搜尋套件", From 99501c2dd60960b345b54623f32b6f4e2d7488eb Mon Sep 17 00:00:00 2001 From: johnnyreilly Date: Sun, 8 Feb 2026 14:13:52 +0000 Subject: [PATCH 3/3] feat: internationalisation for rate_limited --- i18n/locales/ar.json | 1 + i18n/locales/az-AZ.json | 1 + i18n/locales/cs-CZ.json | 1 + i18n/locales/de-DE.json | 1 + i18n/locales/es.json | 1 + i18n/locales/fr-FR.json | 1 + i18n/locales/hi-IN.json | 1 + i18n/locales/hu-HU.json | 1 + i18n/locales/id-ID.json | 1 + i18n/locales/it-IT.json | 1 + i18n/locales/ja-JP.json | 1 + i18n/locales/mr-IN.json | 1 + i18n/locales/ne-NP.json | 1 + i18n/locales/no-NO.json | 1 + i18n/locales/pl-PL.json | 1 + i18n/locales/pt-BR.json | 1 + i18n/locales/ru-RU.json | 1 + i18n/locales/te-IN.json | 1 + i18n/locales/uk-UA.json | 1 + i18n/locales/zh-CN.json | 1 + i18n/locales/zh-TW.json | 1 + lunaria/files/es-419.json | 2 +- 22 files changed, 22 insertions(+), 1 deletion(-) diff --git a/i18n/locales/ar.json b/i18n/locales/ar.json index cf8034573..0d2a32bb1 100644 --- a/i18n/locales/ar.json +++ b/i18n/locales/ar.json @@ -25,6 +25,7 @@ "found_packages": "تم العثور على {count} حزمة | تم العثور على حزمة واحدة | تم العثور على حزمتين | تم العثور على {count} حزم | تم العثور على {count} حزمة | تم العثور على {count} حزمة", "updating": "(جارٍ التحديث…)", "no_results": "لم يتم العثور على حزم لـ \"{query}\"", + "rate_limited": "تم الوصول إلى حد طلبات npm، حاول مرة أخرى بعد لحظة", "title": "بحث", "title_search": "بحث: {search}", "title_packages": "البحث عن الحزم", diff --git a/i18n/locales/az-AZ.json b/i18n/locales/az-AZ.json index bdb420308..69c7099e8 100644 --- a/i18n/locales/az-AZ.json +++ b/i18n/locales/az-AZ.json @@ -23,6 +23,7 @@ "found_packages": "Paket tapılmadı | 1 paket tapıldı | {count} paket tapıldı", "updating": "(yenilənir...)", "no_results": "\"{query}\" üçün paket tapılmadı", + "rate_limited": "npm sorğu limitinə çatıldı, bir az sonra yenidən cəhd edin", "not_taken": "{name} tutulmayıb", "claim_prompt": "Bu paket adını npm-də tutun", "claim_button": "\"{name}\" adını tut", diff --git a/i18n/locales/cs-CZ.json b/i18n/locales/cs-CZ.json index d41d60714..8898ca599 100644 --- a/i18n/locales/cs-CZ.json +++ b/i18n/locales/cs-CZ.json @@ -25,6 +25,7 @@ "found_packages": "Nalezen {count} balíček | Nalezeny {count} balíčky | Nalezeno {count} balíčků", "updating": "(aktualizace...)", "no_results": "Žádné výsledky pro \"{query}\"", + "rate_limited": "Dosažen limit požadavků npm, zkuste to znovu za chvíli", "title": "hledání", "not_taken": "{name} není rezervováno", "claim_prompt": "Nárokovat toto jméno balíčku na npm", diff --git a/i18n/locales/de-DE.json b/i18n/locales/de-DE.json index 90d0344c9..5b8390fb1 100644 --- a/i18n/locales/de-DE.json +++ b/i18n/locales/de-DE.json @@ -25,6 +25,7 @@ "found_packages": "Keine Pakete gefunden | 1 Paket gefunden | {count} Pakete gefunden", "updating": "(wird aktualisiert...)", "no_results": "Keine Pakete gefunden für \"{query}\"", + "rate_limited": "npm-Ratenlimit erreicht, versuche es gleich nochmal", "title": "Suche", "title_search": "Suche: {search}", "title_packages": "Suche Pakete", diff --git a/i18n/locales/es.json b/i18n/locales/es.json index f9165fffd..492014815 100644 --- a/i18n/locales/es.json +++ b/i18n/locales/es.json @@ -25,6 +25,7 @@ "found_packages": "No se encontraron paquetes | Se encontró 1 paquete | Se encontraron {count} paquetes", "updating": "(actualizando...)", "no_results": "No se encontraron paquetes para \"{query}\"", + "rate_limited": "Se alcanzó el límite de solicitudes de npm, inténtalo de nuevo en un momento", "title": "búsqueda", "title_search": "búsqueda: {search}", "title_packages": "búsqueda de paquetes", diff --git a/i18n/locales/fr-FR.json b/i18n/locales/fr-FR.json index e7129e4d2..872f87c3c 100644 --- a/i18n/locales/fr-FR.json +++ b/i18n/locales/fr-FR.json @@ -25,6 +25,7 @@ "found_packages": "{count} paquets trouvés", "updating": "(mise à jour...)", "no_results": "Aucun paquet trouvé pour « {query} »", + "rate_limited": "Limite de requêtes npm atteinte, réessayez dans un instant", "title": "Recherche", "not_taken": "{name} n'est pas pris", "claim_prompt": "Réserver ce nom de paquet sur npm", diff --git a/i18n/locales/hi-IN.json b/i18n/locales/hi-IN.json index 18e5de866..9d568170f 100644 --- a/i18n/locales/hi-IN.json +++ b/i18n/locales/hi-IN.json @@ -25,6 +25,7 @@ "found_packages": "कोई पैकेज नहीं मिला | 1 पैकेज मिला | {count} पैकेज मिले", "updating": "(अद्यतन हो रहा है...)", "no_results": "\"{query}\" के लिए कोई पैकेज नहीं मिला", + "rate_limited": "npm दर सीमा पूरी हो गई, कुछ देर बाद पुनः प्रयास करें", "not_taken": "{name} उपलब्ध है", "claim_prompt": "npm पर इस पैकेज नाम को दावा करें", "claim_button": "\"{name}\" दावा करें", diff --git a/i18n/locales/hu-HU.json b/i18n/locales/hu-HU.json index 221cb6f18..689e2df44 100644 --- a/i18n/locales/hu-HU.json +++ b/i18n/locales/hu-HU.json @@ -23,6 +23,7 @@ "found_packages": "Nincs találat | 1 csomag található | {count} csomag található", "updating": "(frissítés...)", "no_results": "Nincs találat a következőre: \"{query}\"", + "rate_limited": "Elérted az npm kéréslimitet, próbáld újra egy pillanat múlva", "not_taken": "{name} még szabad", "claim_prompt": "Foglald le ezt a csomagnevet az npm-en", "claim_button": "\"{name}\" lefoglalása", diff --git a/i18n/locales/id-ID.json b/i18n/locales/id-ID.json index 69716435d..91e478417 100644 --- a/i18n/locales/id-ID.json +++ b/i18n/locales/id-ID.json @@ -25,6 +25,7 @@ "found_packages": "Paket tidak ditemukan | Ditemukan 1 paket | Ditemukan {count} paket", "updating": "(memperbarui...)", "no_results": "Tidak ada paket yang ditemukan untuk \"{query}\"", + "rate_limited": "Batas permintaan npm tercapai, coba lagi sebentar", "not_taken": "{name} tersedia", "claim_prompt": "Klaim nama paket ini di npm", "claim_button": "Klaim \"{name}\"", diff --git a/i18n/locales/it-IT.json b/i18n/locales/it-IT.json index 57c5f83e7..cb6731111 100644 --- a/i18n/locales/it-IT.json +++ b/i18n/locales/it-IT.json @@ -25,6 +25,7 @@ "found_packages": "Trovati {count} pacchetti", "updating": "(aggiornando...)", "no_results": "Nessun pacchetto trovato per \"{query}\"", + "rate_limited": "Limite di richieste npm raggiunto, riprova tra un momento", "title": "cerca", "title_search": "cerca: {search}", "title_packages": "cerca pacchetti", diff --git a/i18n/locales/ja-JP.json b/i18n/locales/ja-JP.json index 4e1657f54..5e1312036 100644 --- a/i18n/locales/ja-JP.json +++ b/i18n/locales/ja-JP.json @@ -25,6 +25,7 @@ "found_packages": "{count} 個のパッケージが見つかりました", "updating": "(更新中...)", "no_results": "\"{query}\" に一致するパッケージは見つかりませんでした", + "rate_limited": "npmのレート制限に達しました。しばらくしてから再試行してください", "title": "検索", "title_search": "検索: {search}", "title_packages": "パッケージを検索", diff --git a/i18n/locales/mr-IN.json b/i18n/locales/mr-IN.json index 0833f9655..398adf65c 100644 --- a/i18n/locales/mr-IN.json +++ b/i18n/locales/mr-IN.json @@ -25,6 +25,7 @@ "found_packages": "कोणतेही पॅकेज सापडले नाही | 1 पॅकेज सापडले | {count} पॅकेजेस सापडल्या", "updating": "(अद्यतनित करत आहे...)", "no_results": "\"{query}\" साठी कोणतेही पॅकेज सापडले नाही", + "rate_limited": "npm दर मर्यादा गाठली, काही वेळाने पुन्हा प्रयत्न करा", "title": "शोध", "not_taken": "{name} उपलब्ध आहे", "claim_prompt": "npm वर हे पॅकेज नाव दावा करा", diff --git a/i18n/locales/ne-NP.json b/i18n/locales/ne-NP.json index 6e49d4a13..3bf4390aa 100644 --- a/i18n/locales/ne-NP.json +++ b/i18n/locales/ne-NP.json @@ -25,6 +25,7 @@ "found_packages": "कुनै प्याकेज फेला परेन | {count} प्याकेज फेला पर्यो | {count} प्याकेज फेला परे", "updating": "(अपडेट हुँदैछ...)", "no_results": "\"{query}\" का लागि कुनै प्याकेज फेला परेन", + "rate_limited": "npm दर सीमा पुग्यो, केही समय पछि पुनः प्रयास गर्नुहोस्", "not_taken": "{name} लिइएको छैन", "claim_prompt": "npm मा यो प्याकेज नाम दाबी गर्नुहोस्", "claim_button": "\"{name}\" दाबी गर्नुहोस्", diff --git a/i18n/locales/no-NO.json b/i18n/locales/no-NO.json index a4df82a2f..8a47a5f5c 100644 --- a/i18n/locales/no-NO.json +++ b/i18n/locales/no-NO.json @@ -25,6 +25,7 @@ "found_packages": "Ingen pakker funnet | Fant 1 pakke | Fant {count} pakker", "updating": "(oppdaterer...)", "no_results": "Ingen pakker funnet for \"{query}\"", + "rate_limited": "npm-hastighetsgrense nådd, prøv igjen om et øyeblikk", "title": "søk", "title_search": "søk: {search}", "title_packages": "søk pakker", diff --git a/i18n/locales/pl-PL.json b/i18n/locales/pl-PL.json index 51eebc2f1..ade825b6e 100644 --- a/i18n/locales/pl-PL.json +++ b/i18n/locales/pl-PL.json @@ -25,6 +25,7 @@ "found_packages": "Nie znaleziono pakietów | Znaleziono 1 pakiet | Znaleziono {count} pakiety | Znaleziono {count} pakietów | Znaleziono {count} pakietów", "updating": "(aktualizowanie...)", "no_results": "Nie znaleziono pakietów dla \"{query}\"", + "rate_limited": "Osiągnięto limit zapytań npm, spróbuj ponownie za chwilę", "title": "Wyszukiwanie", "not_taken": "{name} jest wolne", "claim_prompt": "Zajmij tę nazwę pakietu w npm", diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json index a29718d18..5ffe716c3 100644 --- a/i18n/locales/pt-BR.json +++ b/i18n/locales/pt-BR.json @@ -25,6 +25,7 @@ "found_packages": "Nenhum pacote encontrado | 1 pacote encontrado | {count} pacotes encontrados", "updating": "(atualizando...)", "no_results": "Nenhum pacote encontrado para \"{query}\"", + "rate_limited": "Limite de requisições do npm atingido, tente novamente em instantes", "title": "pesquisar", "not_taken": "{name} não está em uso", "claim_prompt": "Reivindicar este nome de pacote no npm", diff --git a/i18n/locales/ru-RU.json b/i18n/locales/ru-RU.json index bac5a8937..28af54d40 100644 --- a/i18n/locales/ru-RU.json +++ b/i18n/locales/ru-RU.json @@ -23,6 +23,7 @@ "found_packages": "Пакетов не найдено | Найден 1 пакет | Найдено {count} пакетов", "updating": "(обновление...)", "no_results": "Пакетов по запросу \"{query}\" не найдено", + "rate_limited": "Достигнут лимит запросов npm, попробуйте снова через мгновение", "not_taken": "{name} не занято", "claim_prompt": "Занять это имя пакета в npm", "claim_button": "Занять \"{name}\"", diff --git a/i18n/locales/te-IN.json b/i18n/locales/te-IN.json index 05bd49a60..b9131ca20 100644 --- a/i18n/locales/te-IN.json +++ b/i18n/locales/te-IN.json @@ -25,6 +25,7 @@ "found_packages": "ప్యాకేజ్ కనుగొనబడలేదు | 1 ప్యాకేజ్ కనుగొనబడింది | {count} ప్యాకేజ్‌లు కనుగొనబడ్డాయి", "updating": "(నవీకరిస్తున్నారు...)", "no_results": "\"{query}\" కోసం ప్యాకేజ్‌లు కనుగొనబడలేదు", + "rate_limited": "npm రేట్ లిమిట్ చేరుకుంది, కొద్దిసేపట్లో మళ్ళీ ప్రయత్నించండి", "not_taken": "{name} అందుబాటులో ఉంది", "claim_prompt": "npm లో ఈ ప్యాకేజ్ పేరును క్లెయిమ్ చేయండి", "claim_button": "\"{name}\" క్లెయిమ్ చేయండి", diff --git a/i18n/locales/uk-UA.json b/i18n/locales/uk-UA.json index 4643daaee..c8f527c18 100644 --- a/i18n/locales/uk-UA.json +++ b/i18n/locales/uk-UA.json @@ -23,6 +23,7 @@ "found_packages": "Пакетів не знайдено | Знайдено 1 пакет | Знайдено {count} пакетів", "updating": "(оновлення...)", "no_results": "Пакетів не знайдено для \"{query}\"", + "rate_limited": "Досягнуто ліміт запитів npm, спробуйте знову через мить", "not_taken": "\"{name}\" не зайнято", "claim_prompt": "Зарезервуйте цю назву пакета на npm", "claim_button": "Зарезервувати \"{name}\"", diff --git a/i18n/locales/zh-CN.json b/i18n/locales/zh-CN.json index 852451d43..4ef5aed00 100644 --- a/i18n/locales/zh-CN.json +++ b/i18n/locales/zh-CN.json @@ -25,6 +25,7 @@ "found_packages": "共找到 {count} 个包", "updating": "(更新中…)", "no_results": "未找到匹配“{query}”的包", + "rate_limited": "已达到 npm 请求频率限制,请稍后重试", "title": "搜索", "title_search": "搜索:{search}", "title_packages": "搜索包", diff --git a/i18n/locales/zh-TW.json b/i18n/locales/zh-TW.json index c38fecfee..3a4fd7786 100644 --- a/i18n/locales/zh-TW.json +++ b/i18n/locales/zh-TW.json @@ -25,6 +25,7 @@ "found_packages": "共找到 {count} 個套件", "updating": "(更新中…)", "no_results": "找不到符合「{query}」的套件", + "rate_limited": "已達到 npm 請求頻率限制,請稍後再試", "title": "搜尋", "title_search": "搜尋:{search}", "title_packages": "搜尋套件", diff --git a/lunaria/files/es-419.json b/lunaria/files/es-419.json index 779e08655..88d26a72e 100644 --- a/lunaria/files/es-419.json +++ b/lunaria/files/es-419.json @@ -25,7 +25,7 @@ "found_packages": "No se encontraron paquetes | Se encontró 1 paquete | Se encontraron {count} paquetes", "updating": "(actualizando...)", "no_results": "No se encontraron paquetes para \"{query}\"", - "rate_limited": "Se alcanzó el límite de solicitudes de npm, intenta de nuevo en un momento", + "rate_limited": "Se alcanzó el límite de solicitudes de npm, inténtalo de nuevo en un momento", "title": "búsqueda", "title_search": "búsqueda: {search}", "title_packages": "búsqueda de paquetes",