(() => {
+ return isPackageSelected(props.result.package.name)
+})
function formatScore(value?: number): string {
if (value === undefined || value === 0) return '-'
@@ -40,6 +37,8 @@ const allMaintainersText = computed(() => {
if (!pkg.value.maintainers?.length) return ''
return pkg.value.maintainers.map(m => m.name || m.email).join(', ')
})
+
+const compactNumberFormatter = useCompactNumberFormatter()
@@ -48,6 +47,14 @@ const allMaintainersText = computed(() => {
tabindex="0"
:data-result-index="index"
>
+ |
+
+ |
{
v-if="isColumnVisible('downloads')"
class="py-2 px-3 font-mono text-xs text-fg-muted text-end tabular-nums"
>
- {{ formatDownloads(result.downloads?.weekly) }}
+ {{
+ result.downloads?.weekly !== undefined
+ ? compactNumberFormatter.format(result.downloads.weekly)
+ : '-'
+ }}
|
@@ -133,7 +144,7 @@ const allMaintainersText = computed(() => {
import type { Theme as VueDataUiTheme, VueUiXyConfig, VueUiXyDatasetItem } from 'vue-data-ui'
import { VueUiXy } from 'vue-data-ui/vue-ui-xy'
-import { useDebounceFn, useElementSize } from '@vueuse/core'
+import { useDebounceFn, useElementSize, useTimeoutFn } from '@vueuse/core'
import { useCssVariables } from '~/composables/useColors'
import { OKLCH_NEUTRAL_FALLBACK, transparentizeOklch, lightenOklch } from '~/utils/colors'
import { getFrameworkColor, isListedFramework } from '~/utils/frameworks'
@@ -1350,12 +1350,55 @@ function drawSvgPrintLegend(svg: Record) {
return seriesNames.join('\n')
}
+const showCorrectionControls = shallowRef(false)
+const isResizing = shallowRef(false)
+
+const chartHeight = computed(() => {
+ if (isMobile.value) {
+ return 950
+ }
+ return showCorrectionControls.value && props.inModal ? 494 : 600
+})
+
+const { start } = useTimeoutFn(
+ () => {
+ isResizing.value = false
+ },
+ 200,
+ { immediate: false },
+)
+
+function pauseChartTransitions() {
+ isResizing.value = true
+ start()
+}
+
+watch(
+ chartHeight,
+ (newH, oldH) => {
+ if (newH !== oldH) {
+ // Avoids triggering chart line transitions when the chart is resized
+ pauseChartTransitions()
+ }
+ },
+ { immediate: true },
+)
+
// VueUiXy chart component configuration
const chartConfig = computed(() => {
return {
theme: isDarkMode.value ? 'dark' : ('' as VueDataUiTheme),
+ a11y: {
+ translations: {
+ keyboardNavigation: $t(
+ 'package.trends.chart_assistive_text.keyboard_navigation_horizontal',
+ ),
+ tableAvailable: $t('package.trends.chart_assistive_text.table_available'),
+ tableCaption: $t('package.trends.chart_assistive_text.table_caption'),
+ },
+ },
chart: {
- height: isMobile.value ? 950 : 600,
+ height: chartHeight.value,
backgroundColor: colors.value.bg,
padding: { bottom: displayedGranularity.value === 'yearly' ? 84 : 64, right: 128 }, // padding right is set to leave space of last datapoint label(s)
userOptions: {
@@ -1559,7 +1602,6 @@ const chartConfig = computed(() => {
})
const isDownloadsMetric = computed(() => selectedMetric.value === 'downloads')
-const showCorrectionControls = shallowRef(false)
const packageAnomalies = computed(() => getAnomaliesForPackages(effectivePackageNames.value))
const hasAnomalies = computed(() => packageAnomalies.value.length > 0)
@@ -1624,7 +1666,6 @@ watch(selectedMetric, value => {
type="date"
:max="DATE_INPUT_MAX"
class="w-full min-w-0 bg-transparent"
- size="medium"
/>
@@ -1640,7 +1681,6 @@ watch(selectedMetric, value => {
type="date"
:max="DATE_INPUT_MAX"
class="w-full min-w-0 bg-transparent"
- size="medium"
/>
@@ -1648,6 +1688,8 @@ watch(selectedMetric, value => {
-
-
-
-
-
-
- {{ $t('package.trends.known_anomalies') }}
-
-
@@ -1798,18 +1866,34 @@ watch(selectedMetric, value => {
+
+
+
+ {{ $t('compare.packages.line_chart_nav_hint') }}
+
+
+
@@ -2062,6 +2146,19 @@ watch(selectedMetric, value => {
+
+
diff --git a/app/components/SearchProviderToggle.client.vue b/app/components/SearchProviderToggle.client.vue
index 276683610e..4a9033dd24 100644
--- a/app/components/SearchProviderToggle.client.vue
+++ b/app/components/SearchProviderToggle.client.vue
@@ -28,7 +28,7 @@ useEventListener('keydown', event => {
:aria-label="$t('settings.data_source.label')"
:aria-expanded="isOpen"
aria-haspopup="true"
- size="small"
+ size="sm"
class="border-none w-8 h-8 !px-0 justify-center"
classicon="i-lucide:settings"
@click="isOpen = !isOpen"
diff --git a/app/components/Select/Field.vue b/app/components/Select/Field.vue
index a58b65089a..c554f1c87c 100644
--- a/app/components/Select/Field.vue
+++ b/app/components/Select/Field.vue
@@ -19,7 +19,7 @@ const SELECT_FIELD_LABEL_SIZES = {
const model = defineModel({ default: undefined })
-export interface SelectFieldProps extends SelectBaseProps {
+interface SelectFieldProps extends SelectBaseProps {
items: { label: string; value: string; disabled?: boolean }[]
size?: keyof typeof SELECT_FIELD_SIZES
selectAttrs?: Omit &
diff --git a/app/components/Settings/AccentColorPicker.vue b/app/components/Settings/AccentColorPicker.vue
index 372ac840e3..6d0d4ad217 100644
--- a/app/components/Settings/AccentColorPicker.vue
+++ b/app/components/Settings/AccentColorPicker.vue
@@ -29,7 +29,7 @@ onPrehydrate(el => {
-
+
@@ -77,4 +77,19 @@ const blueskyPostUri = computed(() => blueskyLink.value?.postUri ?? null)
:deep(.markdown-body) {
@apply prose dark:prose-invert;
}
+
+:deep(.prose a:not(.not-prose a):not([class*='no-underline'])) {
+ text-decoration: underline;
+ text-underline-offset: 0.2rem;
+ text-decoration-thickness: 1px;
+ text-decoration-color: var(--fg-subtle);
+ transition:
+ text-decoration-color 0.2s,
+ color 0.2s;
+}
+
+:deep(.prose a:not(.not-prose a):not([class*='no-underline']):hover) {
+ text-decoration-color: var(--fg);
+ color: var(--fg);
+}
diff --git a/app/components/global/BlueskyPostEmbed.client.vue b/app/components/global/BlueskyPostEmbed.client.vue
index c8513a7703..8e767e7b8c 100644
--- a/app/components/global/BlueskyPostEmbed.client.vue
+++ b/app/components/global/BlueskyPostEmbed.client.vue
@@ -107,10 +107,16 @@ const postUrl = computed(() => {
:href="postUrl ?? '#'"
target="_blank"
rel="noopener noreferrer"
- class="not-prose block rounded-lg border border-border bg-bg-subtle p-4 sm:p-5 no-underline hover:border-border-hover transition-colors duration-200"
+ class="not-prose block rounded-lg border border-border bg-bg-subtle p-4 sm:p-5 no-underline hover:border-border-hover transition-colors duration-200 relative group"
>
+
+
+
-
+
![]()
{
@{{ post.author.handle }}
-
diff --git a/app/composables/npm/useAlgoliaSearch.ts b/app/composables/npm/useAlgoliaSearch.ts
index 30f19b13c3..5f8d08ab1a 100644
--- a/app/composables/npm/useAlgoliaSearch.ts
+++ b/app/composables/npm/useAlgoliaSearch.ts
@@ -107,7 +107,7 @@ function hitToSearchResult(hit: AlgoliaHit): NpmSearchResult {
}
}
-export interface AlgoliaSearchOptions {
+interface AlgoliaSearchOptions {
size?: number
from?: number
filters?: string
@@ -121,7 +121,7 @@ export interface AlgoliaMultiSearchChecks {
checkPackage?: string
}
-export interface AlgoliaSearchWithSuggestionsResult {
+interface AlgoliaSearchWithSuggestionsResult {
search: NpmSearchResponse
orgExists: boolean
userExists: boolean
diff --git a/app/composables/npm/useNpmSearch.ts b/app/composables/npm/useNpmSearch.ts
index f9e2951f26..e863ca3281 100644
--- a/app/composables/npm/useNpmSearch.ts
+++ b/app/composables/npm/useNpmSearch.ts
@@ -1,6 +1,6 @@
import { emptySearchResponse, metaToSearchResult } from './search-utils'
-export interface NpmSearchOptions {
+interface NpmSearchOptions {
size?: number
from?: number
}
diff --git a/app/composables/useI18nStatus.ts b/app/composables/useI18nStatus.ts
index 35549de943..3f0e90b827 100644
--- a/app/composables/useI18nStatus.ts
+++ b/app/composables/useI18nStatus.ts
@@ -3,7 +3,7 @@
* Provides information about translation progress for each locale.
*/
export function useI18nStatus() {
- const { locale } = useI18n()
+ const { locale: currentLocale } = useI18n()
const {
data: status,
@@ -16,20 +16,26 @@ export function useI18nStatus() {
getCachedData: (key, nuxtApp) => nuxtApp.payload.data[key] ?? nuxtApp.static.data[key],
})
+ const localesMap = computed
- No posts found.
+ {{ $t('blog.no_posts') }}
diff --git a/app/pages/compare.vue b/app/pages/compare.vue
index 5582274a60..db383e0e03 100644
--- a/app/pages/compare.vue
+++ b/app/pages/compare.vue
@@ -5,11 +5,10 @@ import FacetBarChart from '~/components/Compare/FacetBarChart.vue'
definePageMeta({
name: 'compare',
+ preserveScrollOnQuery: true,
})
const { locale } = useI18n()
-const router = useRouter()
-const canGoBack = useCanGoBack()
const { copied, copy } = useClipboard({ copiedDuring: 2000 })
const maxPackages = 4
@@ -172,15 +171,7 @@ useSeoMeta({
{{ $t('compare.packages.title') }}
-
-
- {{ $t('nav.back') }}
-
+
{{ $t('compare.packages.tagline') }}
@@ -226,7 +217,7 @@ useSeoMeta({
{{ $t('compare.packages.section_facets') }}
/
-
- Invalid comparison URL. Use format: /diff/package/v/from...to
-
-
Go to package
+
+ /diff/{{ packageName }}/v/{{
+ $t('compare.version_invalid_url_format.from_version')
+ }}...{{ $t('compare.version_invalid_url_format.to_version') }}
+
+
{{
+ $t('compare.version_back_to_package')
+ }}
-
Comparing versions...
+
{{ $t('compare.comparing_versions_label') }}
-
Failed to compare versions
-
Back to package
+
{{ $t('compare.version_error_message') }}
+
{{
+ $t('compare.version_back_to_package')
+ }}
diff --git a/app/pages/index.vue b/app/pages/index.vue
index 8b202b864a..7cc3981569 100644
--- a/app/pages/index.vue
+++ b/app/pages/index.vue
@@ -86,7 +86,7 @@ defineOgImageComponent('Default', {
autofocus
:placeholder="$t('search.placeholder')"
no-correct
- size="large"
+ size="lg"
class="w-full ps-8 pe-24"
aria-describedby="instant-search-advisory"
@focus="isSearchFocused = true"
diff --git a/app/pages/package-code/[[org]]/[packageName]/v/[version]/[...filePath].vue b/app/pages/package-code/[[org]]/[packageName]/v/[version]/[...filePath].vue
index 5e0b5c9c9e..3fbdcfe994 100644
--- a/app/pages/package-code/[[org]]/[packageName]/v/[version]/[...filePath].vue
+++ b/app/pages/package-code/[[org]]/[packageName]/v/[version]/[...filePath].vue
@@ -362,7 +362,7 @@ defineOgImageComponent('Default', {
{
const segments = route.params.path?.filter(Boolean)
@@ -87,7 +88,7 @@ const { data: docsData, status: docsStatus } = useLazyFetch(
html: '',
toc: null,
status: 'missing' as const,
- message: 'Docs are not available for this version.',
+ message: t('package.docs.default_not_available'),
}),
},
)
@@ -104,9 +105,11 @@ const versionUrlPattern = computed(
)
const pageTitle = computed(() => {
- if (!packageName.value) return 'API Docs - npmx'
- if (!resolvedVersion.value) return `${packageName.value} docs - npmx`
- return `${packageName.value}@${resolvedVersion.value} docs - npmx`
+ if (!packageName.value) return t('package.docs.page_title')
+ if (!resolvedVersion.value) return t('package.docs.page_title_name', { name: packageName.value })
+ return t('package.docs.page_title_version', {
+ name: `${packageName.value}@${resolvedVersion.value}`,
+ })
})
useSeoMeta({
@@ -119,7 +122,7 @@ useSeoMeta({
})
defineOgImageComponent('Default', {
- title: () => `${pkg.value?.name ?? 'Package'} - Docs`,
+ title: () => t('package.docs.og_title', { name: pkg.value?.name ?? 'Package' }),
description: () => pkg.value?.license ?? '',
primaryColor: '#60a5fa',
})
@@ -156,7 +159,7 @@ const stickyStyle = computed(() => {
>
diff --git a/app/pages/package/[[org]]/[name].vue b/app/pages/package/[[org]]/[name].vue
index 9399d90187..babd2bec69 100644
--- a/app/pages/package/[[org]]/[name].vue
+++ b/app/pages/package/[[org]]/[name].vue
@@ -211,6 +211,9 @@ const { diff: sizeDiff } = useInstallSizeDiff(packageName, resolvedVersion, pkg,
// โ Preserve the server-rendered DOM, don't flash to skeleton.
const nuxtApp = useNuxtApp()
const route = useRoute()
+// Gates template rendering only โ data fetches intentionally still run.
+// immediate is set once at mount โ skipped requests won't re-fire on navigation, leaving data permanently missing.
+const isVersionsRoute = computed(() => route.name === 'package-versions')
const hasEmptyPayload =
import.meta.client &&
nuxtApp.payload.serverRendered &&
@@ -479,7 +482,8 @@ const showSkeleton = shallowRef(false)
-
+
+
Skeleton
-
+
{{ numberFormatter.format(dependencyCount) }}
-
+
- /
-
-
+ ()
- {{
- numberFormatter.format(totalDepsCount)
- }}
- -
+ ({{ numberFormatter.format(totalDepsCount)
+ }})
+ (-)
- -
+ (-)
@@ -620,7 +624,7 @@ const showSkeleton = shallowRef(false)
-
-
+
- /
-
-
-
+
+
+ ()
+
+
+ ({{ bytesFormatter.format(installSize.totalSize)
+ }})
+
+ (-)
-
- {{ bytesFormatter.format(installSize.totalSize) }}
-
- -
@@ -765,8 +771,15 @@ const showSkeleton = shallowRef(false)
{{ $t('package.get_started.title') }}
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{
+ if (packages.length === 0) {
+ closeSelectionView()
+ }
+})
+
// Preferences (persisted to localStorage)
const {
viewMode,
@@ -660,16 +673,33 @@ onBeforeUnmount(() => {
+
+
{{ $t('search.title') }}
-
+
+
+ {{ $t('nav.back') }}
+
+
-
+
+
+
{
:disabled-sort-keys="disabledSortKeys"
search-context
@toggle-column="toggleColumn"
+ @toggle-selection="openSelectionView"
@reset-columns="resetColumns"
@clear-filter="handleClearFilter"
@clear-all-filters="clearAllFilters"
@@ -778,7 +809,7 @@ onBeforeUnmount(() => {
$t(
'filters.count.showing_paginated',
{
- pageSize: Math.min(preferredPageSize, effectiveTotal),
+ pageSize: $n(Math.min(preferredPageSize, effectiveTotal)),
count: $n(effectiveTotal),
},
effectiveTotal,
diff --git a/app/pages/settings.vue b/app/pages/settings.vue
index f2fe9db5e0..e90faf551f 100644
--- a/app/pages/settings.vue
+++ b/app/pages/settings.vue
@@ -1,8 +1,7 @@
+
+
+
+
+
+
+
+
+
+ npmx
+
+
+
+
+
+
+
+
+ {{ $t('translation_status.p1_lang', {}, { locale }) }}
+
+
+
+
+
+ {{
+ $t(
+ 'translation_status.p1_count',
+ { count: status?.sourceLocale.totalKeys ?? 0 },
+ { locale },
+ )
+ }}
+
+
+
+
+ {{ $t('translation_status.by_locale') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('translation_status.guide') }}
+
+
+
+
+
+
+
+ {{ $t('translation_status.by_locale') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ localeEntry.label }}
+ {{ localeEntry.lang }}
+
+
+ {{ $n(localeEntry.percentComplete / 100, 'percentage') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ localeEntry.missingKeys.length }}
+ {{ $t('translation_status.missing_text', {}, { locale: localeEntry.lang }) }}
+
+ {{ localeEntry.completedKeys }} / {{ localeEntry.totalKeys }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t('translation_status.missing_keys', {}, { locale: localeEntry.lang }) }}
+
+
+ {{
+ copied
+ ? $t('common.copied', {}, { locale: localeEntry.lang })
+ : $t('i18n.copy_keys', {}, { locale: localeEntry.lang })
+ }}
+
+
+
+
+
+ {{ $t('i18n.edit_on_github', {}, { locale: localeEntry.lang }) }}
+
+
+
+
+ {{
+ $t('translation_status.complete_text', {}, { locale: localeEntry.lang })
+ }}
+ ๐
+
+
+
+
+
+
+
+
diff --git a/app/pages/~[username]/index.vue b/app/pages/~[username]/index.vue
index 0fd04b47d1..6510c736e1 100644
--- a/app/pages/~[username]/index.vue
+++ b/app/pages/~[username]/index.vue
@@ -140,7 +140,7 @@ defineOgImageComponent('Default', {
-
+
~{{ username }}
diff --git a/app/pages/~[username]/orgs.vue b/app/pages/~[username]/orgs.vue
index 138bd69139..a5128237e1 100644
--- a/app/pages/~[username]/orgs.vue
+++ b/app/pages/~[username]/orgs.vue
@@ -126,7 +126,7 @@ defineOgImageComponent('Default', {
-
+
~{{ username }}
{{ $t('user.orgs_page.title') }}
diff --git a/app/router.options.ts b/app/router.options.ts
index a6d9db7ccd..e978a5b6e2 100644
--- a/app/router.options.ts
+++ b/app/router.options.ts
@@ -1,19 +1,30 @@
import type { RouterConfig } from 'nuxt/schema'
export default {
- scrollBehavior(to, _from, savedPosition) {
+ scrollBehavior(to, from, savedPosition) {
// If the browser has a saved position (e.g. back/forward navigation), restore it
-
if (savedPosition) {
return savedPosition
}
+
+ // Scroll to top when main search query changes
+ if (to.path === '/search' && to.query.q !== from.query.q) {
+ return { left: 0, top: 0 }
+ }
+
+ // Preserve the current viewport for query-only updates on pages that opt in,
+ // such as compare where controls sync state to the URL in-place.
+ if (to.path === from.path && to.hash === from.hash && to.meta.preserveScrollOnQuery === true) {
+ return false
+ }
+
// If navigating to a hash anchor, scroll to it
if (to.hash) {
const { scrollMargin } = to.meta
return {
el: to.hash,
behavior: 'smooth',
- top: typeof scrollMargin == 'number' ? scrollMargin : 70,
+ top: typeof scrollMargin === 'number' ? scrollMargin : 70,
}
}
diff --git a/app/types/index.ts b/app/types/index.ts
index 5058830705..f736f8b329 100644
--- a/app/types/index.ts
+++ b/app/types/index.ts
@@ -10,5 +10,9 @@ declare module '#app' {
* @default 70
*/
scrollMargin?: number
+ /**
+ * preserve scroll position when only query params change on same path/hash
+ */
+ preserveScrollOnQuery?: boolean
}
}
diff --git a/app/utils/atproto/likes.ts b/app/utils/atproto/likes.ts
index 236abb9adb..c95fd20083 100644
--- a/app/utils/atproto/likes.ts
+++ b/app/utils/atproto/likes.ts
@@ -2,15 +2,12 @@ import { FetchError } from 'ofetch'
import { handleAuthError } from '~/utils/atproto/helpers'
import type { PackageLikes } from '#shared/types/social'
-export type LikeResult = { success: true; data: PackageLikes } | { success: false; error: Error }
+type LikeResult = { success: true; data: PackageLikes } | { success: false; error: Error }
/**
* Like a package via the API
*/
-export async function likePackage(
- packageName: string,
- userHandle?: string | null,
-): Promise
{
+async function likePackage(packageName: string, userHandle?: string | null): Promise {
try {
const result = await $fetch('/api/social/like', {
method: 'POST',
@@ -28,10 +25,7 @@ export async function likePackage(
/**
* Unlike a package via the API
*/
-export async function unlikePackage(
- packageName: string,
- userHandle?: string | null,
-): Promise {
+async function unlikePackage(packageName: string, userHandle?: string | null): Promise {
try {
const result = await $fetch('/api/social/like', {
method: 'DELETE',
diff --git a/app/utils/atproto/profile.ts b/app/utils/atproto/profile.ts
index 43968ea5b9..0c3ed242a4 100644
--- a/app/utils/atproto/profile.ts
+++ b/app/utils/atproto/profile.ts
@@ -1,7 +1,7 @@
import { FetchError } from 'ofetch'
import { handleAuthError } from './helpers'
-export type UpdateProfileResult = {
+type UpdateProfileResult = {
success: boolean
error?: Error
}
diff --git a/app/utils/charts.ts b/app/utils/charts.ts
index d22750aa95..12ed2c0958 100644
--- a/app/utils/charts.ts
+++ b/app/utils/charts.ts
@@ -720,3 +720,378 @@ export function applyEllipsis(text: string, maxLength = 45) {
}
return text.slice(0, maxLength) + '...'
}
+
+// a11y pattern generation
+export type SvgPatternType =
+ | 'diagonalLines'
+ | 'verticalLines'
+ | 'horizontalLines'
+ | 'crosshatch'
+ | 'dots'
+ | 'grid'
+ | 'zigzag'
+
+export type SeededSvgPatternOptions = {
+ foregroundColor?: string
+ backgroundColor?: string
+ minimumSize?: number
+ maximumSize?: number
+}
+
+export type SeededSvgPatternResult = {
+ width: number
+ height: number
+ rotation: number
+ patternType: SvgPatternType
+ contentMarkup: string
+}
+
+type NonEmptyReadonlyArray = readonly [T, ...T[]]
+
+/**
+ * Generates a deterministic 32-bit unsigned integer hash from a string.
+ *
+ * This function is based on the FNV-1a hashing algorithm. It is used to
+ * transform any string input into a stable numeric seed suitable for
+ * deterministic pseudo-random number generation.
+ *
+ * The same input string will always produce the same output number.
+ *
+ * @param value - The input string to hash.
+ * @returns A 32-bit unsigned integer hash.
+ */
+export function createSeedNumber(value: string): number {
+ let hashValue = 2166136261
+ for (let index = 0; index < value.length; index += 1) {
+ hashValue ^= value.charCodeAt(index)
+ hashValue = Math.imul(hashValue, 16777619)
+ }
+ return hashValue >>> 0
+}
+
+/**
+ * Creates a deterministic pseudo-random number generator (PRNG) based on a numeric seed.
+ *
+ * This function implements a fast, non-cryptographic PRNG similar to Mulberry32.
+ * It produces a reproducible sequence of numbers in the range [0, 1), meaning
+ * the same seed will always generate the same sequence.
+ *
+ * The returned function maintains internal state and should be called repeatedly
+ * to obtain successive pseudo-random values.
+ *
+ * @param seedNumber - 32 bit integer seed
+ * @returns A function that returns a pseudo rand number between 0 (inclusive) and 1 (exclusive).
+ *
+ * @example
+ * const random = createDeterministicRandomGenerator(12345)
+ * const a = random() // always the same for seed 12345
+ * const b = random()
+ */
+function createDeterministicRandomGenerator(seedNumber: number): () => number {
+ // Ensure the seed is treated as an unsigned 32 bit int
+ let state = seedNumber >>> 0
+
+ return function generateRandomNumber(): number {
+ // Advance internal state using a constant
+ state += 0x6d2b79f5
+ let intermediateValue = state
+
+ // First mixing step:
+ // - XOR with a right shifted version of itself
+ // - Multiply with a derived value to further scramble bits
+ intermediateValue = Math.imul(
+ intermediateValue ^ (intermediateValue >>> 15),
+ intermediateValue | 1,
+ )
+
+ // Second mixing step:
+ // - Combine current value with another transformed version of itself
+ // - Multiply again to increase entropy and spread bits
+ intermediateValue ^=
+ intermediateValue +
+ Math.imul(intermediateValue ^ (intermediateValue >>> 7), intermediateValue | 61)
+
+ // Final step:
+ // - Final XOR with shifted value for additional scrambling
+ // - Convert to unsigned 32 bit int
+ // - Normalize to a float in range 0 to 1
+ return ((intermediateValue ^ (intermediateValue >>> 14)) >>> 0) / 4294967296
+ }
+}
+
+function pickValue(values: NonEmptyReadonlyArray, generateRandomNumber: () => number): T {
+ const selectedIndex = Math.floor(generateRandomNumber() * values.length)
+ const selectedValue = values[selectedIndex]
+ if (selectedValue === undefined) {
+ throw new Error('pickValue requires a non-empty array')
+ }
+ return selectedValue
+}
+
+function escapeSvgAttribute(value: string): string {
+ return value
+ .replace(/&/g, '&')
+ .replace(/"/g, '"')
+ .replace(//g, '>')
+}
+
+function createLineElement(
+ x1: number,
+ y1: number,
+ x2: number,
+ y2: number,
+ stroke: string,
+ strokeWidth: number,
+ opacity: number,
+): string {
+ const safeStroke = escapeSvgAttribute(stroke)
+ return ``
+}
+
+function createCircleElement(
+ centerX: number,
+ centerY: number,
+ radius: number,
+ fill: string,
+ opacity: number,
+): string {
+ const safeFill = escapeSvgAttribute(fill)
+ return ``
+}
+
+function createPathElement(
+ pathData: string,
+ fill: string,
+ stroke: string,
+ strokeWidth: number,
+ opacity: number,
+): string {
+ const safeFill = escapeSvgAttribute(fill)
+ const safeStroke = escapeSvgAttribute(stroke)
+ return ``
+}
+
+function toNonEmptyReadonlyArray(values: readonly T[]): NonEmptyReadonlyArray {
+ if (values.length === 0) {
+ throw new Error('Expected a non-empty array')
+ }
+
+ return values as NonEmptyReadonlyArray
+}
+
+export function createSeededSvgPattern(
+ seed: string | number,
+ options?: SeededSvgPatternOptions,
+): SeededSvgPatternResult {
+ const normalizedSeed = String(seed)
+ const foregroundColor = options?.foregroundColor ?? '#111111'
+ const backgroundColor = options?.backgroundColor ?? 'transparent'
+ const minimumSize = options?.minimumSize ?? 8
+ const maximumSize = options?.maximumSize ?? 20
+
+ if (
+ !Number.isFinite(minimumSize) ||
+ !Number.isFinite(maximumSize) ||
+ minimumSize <= 0 ||
+ maximumSize <= 0 ||
+ minimumSize > maximumSize
+ ) {
+ throw new RangeError(
+ 'minimumSize and maximumSize must be finite, positive, and minimumSize must not exceed maximumSize',
+ )
+ }
+
+ const seedNumber = createSeedNumber(normalizedSeed)
+ const generateRandomNumber = createDeterministicRandomGenerator(seedNumber)
+
+ const patternType = pickValue(
+ [
+ 'diagonalLines',
+ 'verticalLines',
+ 'horizontalLines',
+ 'crosshatch',
+ 'dots',
+ 'grid',
+ 'zigzag',
+ ] as const,
+ generateRandomNumber,
+ )
+
+ const availableSizes: number[] = []
+ for (let size = minimumSize; size <= maximumSize; size += 2) {
+ availableSizes.push(size)
+ }
+
+ const tileSize = pickValue(toNonEmptyReadonlyArray(availableSizes), generateRandomNumber)
+ const gap = pickValue([2, 3, 4, 5, 6] as const, generateRandomNumber)
+ const strokeWidth = pickValue([1, 1.25, 1.5, 1.75, 2] as const, generateRandomNumber)
+ const opacity = pickValue([0.7, 0.8, 0.9, 1] as const, generateRandomNumber)
+ const rotation = pickValue([0, 15, 30, 45, 60, 75, 90, 120, 135] as const, generateRandomNumber)
+
+ let contentMarkup = ''
+
+ switch (patternType) {
+ case 'diagonalLines': {
+ contentMarkup = [
+ createLineElement(
+ -tileSize,
+ tileSize,
+ tileSize,
+ -tileSize,
+ foregroundColor,
+ strokeWidth,
+ opacity,
+ ),
+ createLineElement(0, tileSize, tileSize, 0, foregroundColor, strokeWidth, opacity),
+ createLineElement(0, tileSize * 2, tileSize * 2, 0, foregroundColor, strokeWidth, opacity),
+ ].join('')
+ break
+ }
+
+ case 'verticalLines': {
+ const positions = [0, gap + strokeWidth, (gap + strokeWidth) * 2]
+ contentMarkup = positions
+ .map(x => createLineElement(x, 0, x, tileSize, foregroundColor, strokeWidth, opacity))
+ .join('')
+ break
+ }
+
+ case 'horizontalLines': {
+ const positions = [0, gap + strokeWidth, (gap + strokeWidth) * 2]
+ contentMarkup = positions
+ .map(y => createLineElement(0, y, tileSize, y, foregroundColor, strokeWidth, opacity))
+ .join('')
+ break
+ }
+
+ case 'crosshatch': {
+ contentMarkup = [
+ createLineElement(
+ 0,
+ tileSize / 2,
+ tileSize,
+ tileSize / 2,
+ foregroundColor,
+ strokeWidth,
+ opacity,
+ ),
+ createLineElement(
+ tileSize / 2,
+ 0,
+ tileSize / 2,
+ tileSize,
+ foregroundColor,
+ strokeWidth,
+ opacity,
+ ),
+ createLineElement(0, 0, tileSize, tileSize, foregroundColor, strokeWidth * 0.75, opacity),
+ createLineElement(tileSize, 0, 0, tileSize, foregroundColor, strokeWidth * 0.75, opacity),
+ ].join('')
+ break
+ }
+
+ case 'dots': {
+ const radius = Math.max(1, tileSize / 12)
+ contentMarkup = [
+ createCircleElement(tileSize / 4, tileSize / 4, radius, foregroundColor, opacity),
+ createCircleElement((tileSize * 3) / 4, tileSize / 4, radius, foregroundColor, opacity),
+ createCircleElement(tileSize / 4, (tileSize * 3) / 4, radius, foregroundColor, opacity),
+ createCircleElement(
+ (tileSize * 3) / 4,
+ (tileSize * 3) / 4,
+ radius,
+ foregroundColor,
+ opacity,
+ ),
+ ].join('')
+ break
+ }
+
+ case 'grid': {
+ contentMarkup = [
+ createLineElement(0, 0, tileSize, 0, foregroundColor, strokeWidth, opacity),
+ createLineElement(0, 0, 0, tileSize, foregroundColor, strokeWidth, opacity),
+ createLineElement(
+ 0,
+ tileSize / 2,
+ tileSize,
+ tileSize / 2,
+ foregroundColor,
+ strokeWidth * 0.8,
+ opacity,
+ ),
+ createLineElement(
+ tileSize / 2,
+ 0,
+ tileSize / 2,
+ tileSize,
+ foregroundColor,
+ strokeWidth * 0.8,
+ opacity,
+ ),
+ ].join('')
+ break
+ }
+
+ case 'zigzag': {
+ const midPoint = tileSize / 2
+ const pathData = `M 0 ${midPoint} L ${tileSize / 4} 0 L ${tileSize / 2} ${midPoint} L ${(tileSize * 3) / 4} ${tileSize} L ${tileSize} ${midPoint}`
+ contentMarkup = createPathElement(pathData, 'none', foregroundColor, strokeWidth, opacity)
+ break
+ }
+ }
+
+ if (backgroundColor !== 'transparent') {
+ const safeBackgroundColor = escapeSvgAttribute(backgroundColor)
+ contentMarkup = `${contentMarkup}`
+ }
+
+ return {
+ width: tileSize,
+ height: tileSize,
+ rotation,
+ patternType,
+ contentMarkup,
+ }
+}
+
+export type ChartPatternSlotProps = {
+ id: string
+ seed: string | number
+ color?: string
+ foregroundColor: string
+ fallbackColor: string
+ maxSize: number
+ minSize: number
+}
+
+// Equivalent of the PatternSlot.vue component, to be used inside tooltip.customFormat in chart configs
+export function createChartPatternSlotMarkup({
+ id,
+ seed,
+ color,
+ foregroundColor,
+ fallbackColor,
+ maxSize,
+ minSize,
+}: ChartPatternSlotProps) {
+ const pattern = createSeededSvgPattern(seed, {
+ foregroundColor,
+ backgroundColor: color ?? fallbackColor,
+ minimumSize: minSize,
+ maximumSize: maxSize,
+ })
+
+ return `
+
+ ${pattern.contentMarkup}
+
+ `
+}
diff --git a/app/utils/file-icons.ts b/app/utils/file-icons.ts
index e4d510c1af..6647e43a0e 100644
--- a/app/utils/file-icons.ts
+++ b/app/utils/file-icons.ts
@@ -146,6 +146,7 @@ export const FILENAME_ICONS: Record = {
'yarn.lock': 'vscode-icons-file-type-yarn',
'.yarnrc': 'vscode-icons-file-type-yarn',
'.yarnrc.yml': 'vscode-icons-file-type-yarn',
+ 'bun.lock': 'vscode-icons-file-type-bun',
'bun.lockb': 'vscode-icons-file-type-bun',
'bunfig.toml': 'vscode-icons-file-type-bun',
'deno.json': 'vscode-icons-file-type-deno',
diff --git a/app/utils/versions.ts b/app/utils/versions.ts
index 88f3c4bc33..e2aa8741a7 100644
--- a/app/utils/versions.ts
+++ b/app/utils/versions.ts
@@ -51,6 +51,73 @@ export function getPrereleaseChannel(version: string): string {
return match ? match[1]!.toLowerCase() : ''
}
+/**
+ * Priority order for well-known dist-tags.
+ * Lower number = higher priority in display order.
+ * Unknown tags fall back to Infinity and are sorted by publish date descending.
+ */
+export const TAG_PRIORITY: Record = {
+ latest: 0,
+ stable: 1,
+ rc: 2,
+ beta: 3,
+ next: 4,
+ alpha: 5,
+ canary: 6,
+ nightly: 7,
+ experimental: 8,
+ legacy: 9,
+}
+
+/**
+ * Get the display priority for a dist-tag.
+ * Uses fuzzy matching so e.g. "v2-legacy" matches "legacy".
+ * @param tag - The tag name (e.g., "beta", "v2-legacy")
+ * @returns Numeric priority (lower = higher priority); Infinity for unknown tags
+ */
+export function getTagPriority(tag: string | undefined): number {
+ if (!tag) return Infinity
+ for (const [key, priority] of Object.entries(TAG_PRIORITY)) {
+ if (tag.toLowerCase().includes(key)) return priority
+ }
+ return Infinity
+}
+
+/**
+ * Compare two tagged version rows for display ordering.
+ * Sorts by minimum tag priority first; falls back to publish date descending.
+ * @param rowA - First row
+ * @param rowB - Second row
+ * @param versionTimes - Map of version string to ISO publish time
+ * @returns Negative/zero/positive comparator value
+ */
+export function compareTagRows(
+ rowA: TaggedVersionRow,
+ rowB: TaggedVersionRow,
+ versionTimes: Record,
+): number {
+ const priorityA = Math.min(...rowA.tags.map(getTagPriority))
+ const priorityB = Math.min(...rowB.tags.map(getTagPriority))
+ if (priorityA !== priorityB) return priorityA - priorityB
+ const timeA = versionTimes[rowA.version] ?? ''
+ const timeB = versionTimes[rowB.version] ?? ''
+ return timeB.localeCompare(timeA)
+}
+
+/**
+ * Compare two version group keys for display ordering.
+ * Sorts by major descending, then by minor descending for 0.x groups.
+ * @param a - Group key (e.g. "1", "0.9")
+ * @param b - Group key (e.g. "2", "0.10")
+ * @returns Negative/zero/positive comparator value
+ */
+export function compareVersionGroupKeys(a: string, b: string): number {
+ const [majorA, minorA] = a.split('.').map(Number)
+ const [majorB, minorB] = b.split('.').map(Number)
+ if (majorA !== majorB) return (majorB ?? 0) - (majorA ?? 0)
+ return (minorB ?? -1) - (minorA ?? -1)
+}
+
/**
* Sort tags with 'latest' first, then alphabetically
* @param tags - Array of tag names
diff --git a/cli/package.json b/cli/package.json
index 1fc037477b..a924c17e1a 100644
--- a/cli/package.json
+++ b/cli/package.json
@@ -2,26 +2,26 @@
"name": "npmx-connector",
"version": "0.0.1",
"description": "Local connector for npmx.dev - enables authenticated npm operations from the web UI",
+ "homepage": "https://npmx.dev",
+ "bugs": {
+ "url": "https://github.com/npmx-dev/npmx.dev/issues"
+ },
"license": "MIT",
- "type": "module",
"repository": {
"type": "git",
"url": "git+https://github.com/npmx-dev/npmx.dev.git",
"directory": "cli"
},
- "bugs": {
- "url": "https://github.com/npmx-dev/npmx.dev/issues"
- },
- "homepage": "https://npmx.dev",
"bin": {
"npmx-connector": "./dist/cli.mjs"
},
- "exports": {
- ".": "./dist/index.mjs"
- },
"files": [
"dist"
],
+ "type": "module",
+ "exports": {
+ ".": "./dist/index.mjs"
+ },
"scripts": {
"build": "tsdown",
"dev": "NPMX_CLI_DEV=true node src/cli.ts",
@@ -40,9 +40,9 @@
"validate-npm-package-name": "^7.0.2"
},
"devDependencies": {
- "@types/node": "24.11.0",
+ "@types/node": "24.12.0",
"@types/validate-npm-package-name": "4.0.2",
- "tsdown": "0.20.3",
+ "tsdown": "0.21.4",
"typescript": "5.9.3"
},
"engines": {
diff --git a/cli/src/cli.ts b/cli/src/cli.ts
index d648bff193..e122cec9f2 100644
--- a/cli/src/cli.ts
+++ b/cli/src/cli.ts
@@ -6,7 +6,7 @@ import * as p from '@clack/prompts'
import { defineCommand, runMain } from 'citty'
import { serve } from 'srvx'
import { createConnectorApp, generateToken, CONNECTOR_VERSION } from './server.ts'
-import { getNpmUser } from './npm-client.ts'
+import { getNpmUser, NPM_REGISTRY_URL } from './npm-client.ts'
import { initLogger, showToken, logInfo, logWarning, logError } from './logger.ts'
const DEFAULT_PORT = 31415
@@ -15,7 +15,7 @@ const DEV_FRONTEND_URL = 'http://127.0.0.1:3000/'
async function runNpmLogin(): Promise {
return new Promise(resolve => {
- const child = spawn('npm', ['login'], {
+ const child = spawn('npm', ['login', `--registry=${NPM_REGISTRY_URL}`], {
stdio: 'inherit',
shell: true,
})
diff --git a/cli/src/npm-client.ts b/cli/src/npm-client.ts
index a3f61a5c10..8448413b52 100644
--- a/cli/src/npm-client.ts
+++ b/cli/src/npm-client.ts
@@ -10,6 +10,16 @@ import { PackageNameSchema, UsernameSchema, OrgNameSchema, ScopeTeamSchema } fro
import { logCommand, logSuccess, logError, logDebug } from './logger.ts'
const execFileAsync = promisify(execFile)
+export const NPM_REGISTRY_URL = 'https://registry.npmjs.org/'
+
+function createNpmEnv(overrides: Record = {}): Record {
+ return {
+ ...process.env,
+ ...overrides,
+ FORCE_COLOR: '0',
+ npm_config_registry: NPM_REGISTRY_URL,
+ }
+}
/**
* Validates an npm package name using the official npm validation package
@@ -191,10 +201,7 @@ async function execNpmInteractive(
let authUrlTimeout: ReturnType | null = null
let authUrlTimedOut = false
- const env: Record = {
- ...(process.env as Record),
- FORCE_COLOR: '0',
- }
+ const env = createNpmEnv()
// When openUrls is false, tell npm not to open the browser.
// npm still prints the auth URL and polls doneUrl
@@ -330,7 +337,7 @@ async function execNpm(args: string[], options: ExecNpmOptions = {}): Promise
: undefined
const git = Git()
-export async function getGitInfo() {
+async function getGitInfo() {
let branch
try {
branch = gitBranch || (await git.revparse(['--abbrev-ref', 'HEAD']))
diff --git a/config/i18n.ts b/config/i18n.ts
index aca626d74d..5993b7551a 100644
--- a/config/i18n.ts
+++ b/config/i18n.ts
@@ -358,9 +358,9 @@ const locales: (LocaleObjectData | (Omit & { code: str
function buildLocales() {
const useLocales = Object.values(locales).reduce((acc, data) => {
- const variants = countryLocaleVariants[data.code]
- if (variants) {
- variants.forEach(l => {
+ const localeVariants = countryLocaleVariants[data.code]
+ if (localeVariants) {
+ localeVariants.forEach(l => {
const entry: LocaleObjectData = {
...data,
code: l.code,
@@ -406,8 +406,10 @@ export const datetimeFormats = Object.values(currentLocales).reduce((acc, data)
}, {} as DateTimeFormats)
export const numberFormats = Object.values(currentLocales).reduce((acc, data) => {
- if (data.numberFormats) {
- acc[data.code] = { ...data.numberFormats }
+ const numberFormatsArray = data.numberFormats
+ if (numberFormatsArray) {
+ acc[data.code] = { ...numberFormatsArray }
+
delete data.numberFormats
} else {
acc[data.code] = {
diff --git a/docs/app/components/BadgeGenerator.vue b/docs/app/components/BadgeGenerator.vue
new file mode 100644
index 0000000000..8d36371233
--- /dev/null
+++ b/docs/app/components/BadgeGenerator.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![Badge Preview]()
+
Invalid
+
+
+
+ {{ copied ? 'Done!' : 'Copy' }}
+
+
+
+
+
diff --git a/docs/app/components/BadgeGeneratorParameters.vue b/docs/app/components/BadgeGeneratorParameters.vue
new file mode 100644
index 0000000000..aa1b931dd9
--- /dev/null
+++ b/docs/app/components/BadgeGeneratorParameters.vue
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![Badge Preview]()
+
+ {{ !isInputValid ? 'Invalid Parameters' : 'Not Found' }}
+
+
+
+ {{ copied ? 'Done!' : 'Copy' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #
+
+
+
+
+
+
+
+
+ #
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/content/1.getting-started/1.introduction.md b/docs/content/1.getting-started/1.introduction.md
index 427ada95b4..3945904189 100644
--- a/docs/content/1.getting-started/1.introduction.md
+++ b/docs/content/1.getting-started/1.introduction.md
@@ -5,11 +5,11 @@ navigation:
icon: i-lucide:house
---
-npmx.dev provides a better way to browse the npm registry.
+npmx.dev is a fast, modern way to browse the npm registry.
## What is npmx.dev?
-npmx.dev is a fast, modern browser for the npm registry. It doesn't aim to replace [npmjs.com](https://www.npmjs.com/), but provides a better UI and developer experience for browsing packages, viewing documentation, and exploring code.
+npmx.dev is a fast, modern browser for the npm registry, focused on a great developer experience for browsing packages, viewing documentation, and exploring code.
## What you can do
diff --git a/docs/content/2.guide/1.features.md b/docs/content/2.guide/1.features.md
index 75e8decb24..d15505da57 100644
--- a/docs/content/2.guide/1.features.md
+++ b/docs/content/2.guide/1.features.md
@@ -88,117 +88,3 @@ Quick access to online development environments detected from package READMEs:
| :icon{name="i-lucide:pen-tool"} [CodePen](https://codepen.io) | Social development environment for front-end |
| :icon{name="i-simple-icons-jsfiddle"} [JSFiddle](https://jsfiddle.net) | Online editor for web snippets |
| :icon{name="i-simple-icons-replit"} [Replit](https://replit.com) | Collaborative browser-based IDE |
-
-### Custom badges
-
-You can add custom npmx badges to your markdown files using the following syntax:
-
-```md
-[](https://npmx.dev/package/YOUR_PACKAGE)
-```
-
-::tip
-Make sure to replace `TYPE` with one of the options listed below and `YOUR_PACKAGE` with the actual package name (e.g., `vue`, `lodash`, or `@nuxt/kit`).
-::
-
-#### Available Badge Types
-
-- **version**: Shows the latest or specific version of the package. :img{src="https://img.shields.io/badge/%233b82f6-3b82f6" class="inline align-middle h-5 w-14"}
-- **license**: Displays the package license (e.g., MIT, Apache-2.0). :img{src="https://img.shields.io/badge/%2322c55e-22c55e" class="inline align-middle h-5 w-14"}
-- **size**: Shows the install size (via Bundlephobia) or unpacked size. :img{src="https://img.shields.io/badge/%23a855f7-a855f7" class="inline align-middle h-5 w-14"}
-- **downloads**: Displays monthly download statistics. :img{src="https://img.shields.io/badge/%23f97316-f97316" class="inline align-middle h-5 w-14"}
-- **downloads-day**: Displays daily download statistics. :img{src="https://img.shields.io/badge/%23f97316-f97316" class="inline align-middle h-5 w-14"}
-- **downloads-week**: Displays weekly download statistics. :img{src="https://img.shields.io/badge/%23f97316-f97316" class="inline align-middle h-5 w-14"}
-- **downloads-month**: Alias for monthly download statistics. :img{src="https://img.shields.io/badge/%23f97316-f97316" class="inline align-middle h-5 w-14"}
-- **downloads-year**: Displays yearly download statistics. :img{src="https://img.shields.io/badge/%23f97316-f97316" class="inline align-middle h-5 w-14"}
-- **vulnerabilities**: Shows the number of vulnerabilities found via OSV. :img{src="https://img.shields.io/badge/%2322c55e-22c55e" class="inline align-middle h-5 w-14"} / :img{src="https://img.shields.io/badge/%23ef4444-ef4444" class="inline align-middle h-5 w-14"}
-- **dependencies**: Lists the total count of package dependencies. :img{src="https://img.shields.io/badge/%2306b6d4-06b6d4" class="inline align-middle h-5 w-14"}
-- **created**: Displays the date the package was first published. :img{src="https://img.shields.io/badge/%2364748b-64748b" class="inline align-middle h-5 w-14"}
-- **updated**: Displays the date of the most recent modification. :img{src="https://img.shields.io/badge/%2364748b-64748b" class="inline align-middle h-5 w-14"}
-- **engines**: Shows the supported Node.js version range. :img{src="https://img.shields.io/badge/%23eab308-eab308" class="inline align-middle h-5 w-14"}
-- **types**: Indicates if TypeScript types are included. :img{src="https://img.shields.io/badge/%233b82f6-3b82f6" class="inline align-middle h-5 w-14"} / :img{src="https://img.shields.io/badge/%2364748b-64748b" class="inline align-middle h-5 w-14"}
-- **maintainers**: Displays the total count of package maintainers. :img{src="https://img.shields.io/badge/%2306b6d4-06b6d4" class="inline align-middle h-5 w-14"}
-- **deprecated**: Shows if the package is active or deprecated. :img{src="https://img.shields.io/badge/%2322c55e-22c55e" class="inline align-middle h-5 w-14"} / :img{src="https://img.shields.io/badge/%23ef4444-ef4444" class="inline align-middle h-5 w-14"}
-- **quality**: NPMS.io quality score based on linting and tests. :img{src="https://img.shields.io/badge/%23a855f7-a855f7" class="inline align-middle h-5 w-14"}
-- **popularity**: NPMS.io popularity score based on downloads and stars. :img{src="https://img.shields.io/badge/%2306b6d4-06b6d4" class="inline align-middle h-5 w-14"}
-- **maintenance**: NPMS.io maintenance score based on activity. :img{src="https://img.shields.io/badge/%23eab308-eab308" class="inline align-middle h-5 w-14"}
-- **score**: The overall NPMS.io combined score. :img{src="https://img.shields.io/badge/%233b82f6-3b82f6" class="inline align-middle h-5 w-14"}
-- **name**: Simple badge displaying the package name. :img{src="https://img.shields.io/badge/%2364748b-64748b" class="inline align-middle h-5 w-14"}
-
-#### Examples
-
-```md
-# Version Badge
-
-[](https://npmx.dev/package/nuxt)
-
-# License Badge
-
-[](https://npmx.dev/package/vue)
-
-# Monthly Downloads
-
-[](https://npmx.dev/package/lodash)
-
-# Scoped Package (Install Size)
-
-[](https://npmx.dev/package/@nuxt/kit)
-
-# Specific Version
-
-[](https://npmx.dev/package/react)
-
-# Quality Score
-
-[](https://npmx.dev/package/pinia)
-```
-
-#### Customization Parameters
-
-You can further customize your badges by appending query parameters to the badge URL.
-
-##### `labelColor`
-
-Overrides the default label color. You can pass a standard hex code (with or without the `#` prefix). The label text color is automatically chosen (black or white) based on WCAG contrast ratio, so the badge remains readable.
-
-- **Default**: `#0a0a0a`
-- **Usage**: `?labelColor=HEX_CODE`
-
-##### `label`
-
-Overrides the default label text. You can pass any string to customize the label displayed on the badge.
-
-- **Default**: Depends on the badge type (e.g., "version", "downloads/mo").
-- **Usage**: `?label=YOUR_LABEL`
-
-##### `color`
-
-Overrides the default strategy color. You can pass a standard hex code (with or without the `#` prefix). The text color is automatically chosen (black or white) based on WCAG contrast ratio, so the badge remains readable.
-
-- **Default**: Depends on the badge type (e.g., version is blue, downloads are orange).
-- **Usage**: `?color=HEX_CODE`
-
-| Example | URL |
-| :------------- | :------------------------------------ |
-| **Hot Pink** | `.../badge/version/nuxt?color=ff69b4` |
-| **Pure Black** | `.../badge/version/nuxt?color=000000` |
-| **Brand Blue** | `.../badge/version/nuxt?color=3b82f6` |
-
-##### `name`
-
-When set to `true`, this parameter replaces the static category label (like "version" or "downloads/mo") with the actual name of the package. This is useful for brand-focused READMEs.
-
-- **Default**: `false`
-- **Usage**: `?name=true`
-
-| Type | Default Label | With `name=true` |
-| ------------- | -------------------- | ---------------- |
-| **Version** | `version \| 3.12.0` | `nuxt \| 3.12.0` |
-| **Downloads** | `downloads/mo \| 2M` | `lodash \| 2M` |
-
-##### `style`
-
-Overrides the default badge appearance. Pass `shieldsio` to use the shields.io-compatible style.
-
-- **Default**: `default`
-- **Usage**: `?style=shieldsio`
diff --git a/docs/content/2.guide/6.badges.md b/docs/content/2.guide/6.badges.md
new file mode 100644
index 0000000000..50ec38c5c4
--- /dev/null
+++ b/docs/content/2.guide/6.badges.md
@@ -0,0 +1,127 @@
+---
+title: Badges
+description: Generate modern markdown badges with the npmx.dev API
+navigation:
+ icon: i-lucide:badge
+---
+
+npmx.dev offers many different SVG badges with stats about any package via its API. You can get the Markdown code to display an accessible badge which links to the package URL on npmx.dev with the following interactive generator:
+
+:badge-generator
+
+## Available Badge Types
+
+- **version**: Shows the latest or specific version of the package. :img{src="https://img.shields.io/badge/%233b82f6-3b82f6" class="inline align-middle h-5 w-14"}
+- **license**: Displays the package license (e.g., MIT, Apache-2.0). :img{src="https://img.shields.io/badge/%2322c55e-22c55e" class="inline align-middle h-5 w-14"}
+- **size**: Shows the install size (via Bundlephobia) or unpacked size. :img{src="https://img.shields.io/badge/%23a855f7-a855f7" class="inline align-middle h-5 w-14"}
+- **downloads**: Displays monthly download statistics. :img{src="https://img.shields.io/badge/%23f97316-f97316" class="inline align-middle h-5 w-14"}
+- **downloads-day**: Displays daily download statistics. :img{src="https://img.shields.io/badge/%23f97316-f97316" class="inline align-middle h-5 w-14"}
+- **downloads-week**: Displays weekly download statistics. :img{src="https://img.shields.io/badge/%23f97316-f97316" class="inline align-middle h-5 w-14"}
+- **downloads-month**: Alias for monthly download statistics. :img{src="https://img.shields.io/badge/%23f97316-f97316" class="inline align-middle h-5 w-14"}
+- **downloads-year**: Displays yearly download statistics. :img{src="https://img.shields.io/badge/%23f97316-f97316" class="inline align-middle h-5 w-14"}
+- **vulnerabilities**: Shows the number of vulnerabilities found via OSV. :img{src="https://img.shields.io/badge/%2322c55e-22c55e" class="inline align-middle h-5 w-14"} / :img{src="https://img.shields.io/badge/%23ef4444-ef4444" class="inline align-middle h-5 w-14"}
+- **dependencies**: Lists the total count of package dependencies. :img{src="https://img.shields.io/badge/%2306b6d4-06b6d4" class="inline align-middle h-5 w-14"}
+- **created**: Displays the date the package was first published. :img{src="https://img.shields.io/badge/%2364748b-64748b" class="inline align-middle h-5 w-14"}
+- **updated**: Displays the date of the most recent modification. :img{src="https://img.shields.io/badge/%2364748b-64748b" class="inline align-middle h-5 w-14"}
+- **engines**: Shows the supported Node.js version range. :img{src="https://img.shields.io/badge/%23eab308-eab308" class="inline align-middle h-5 w-14"}
+- **types**: Indicates if TypeScript types are included. :img{src="https://img.shields.io/badge/%233b82f6-3b82f6" class="inline align-middle h-5 w-14"} / :img{src="https://img.shields.io/badge/%2364748b-64748b" class="inline align-middle h-5 w-14"}
+- **maintainers**: Displays the total count of package maintainers. :img{src="https://img.shields.io/badge/%2306b6d4-06b6d4" class="inline align-middle h-5 w-14"}
+- **deprecated**: Shows if the package is active or deprecated. :img{src="https://img.shields.io/badge/%2322c55e-22c55e" class="inline align-middle h-5 w-14"} / :img{src="https://img.shields.io/badge/%23ef4444-ef4444" class="inline align-middle h-5 w-14"}
+- **quality**: NPMS.io quality score based on linting and tests. :img{src="https://img.shields.io/badge/%23a855f7-a855f7" class="inline align-middle h-5 w-14"}
+- **popularity**: NPMS.io popularity score based on downloads and stars. :img{src="https://img.shields.io/badge/%2306b6d4-06b6d4" class="inline align-middle h-5 w-14"}
+- **maintenance**: NPMS.io maintenance score based on activity. :img{src="https://img.shields.io/badge/%23eab308-eab308" class="inline align-middle h-5 w-14"}
+- **score**: The overall NPMS.io combined score. :img{src="https://img.shields.io/badge/%233b82f6-3b82f6" class="inline align-middle h-5 w-14"}
+- **name**: Simple badge displaying the package name. :img{src="https://img.shields.io/badge/%2364748b-64748b" class="inline align-middle h-5 w-14"}
+
+## Examples
+
+```md
+# Version Badge
+
+[](https://npmx.dev/package/nuxt)
+
+# License Badge
+
+[](https://npmx.dev/package/vue)
+
+# Monthly Downloads
+
+[](https://npmx.dev/package/lodash)
+
+# Scoped Package (Install Size)
+
+[](https://npmx.dev/package/@nuxt/kit)
+
+# Specific Version
+
+[](https://npmx.dev/package/react)
+
+# Quality Score
+
+[](https://npmx.dev/package/pinia)
+```
+
+## Customization Parameters
+
+You can further customize your badges by appending query parameters to the badge URL.
+
+Use this generator to get the Markdown code you desire:
+
+:badge-generator-parameters
+
+::tip
+For a more advanced badges generator, check out [this community website](https://npmx-badge.vercel.app/).
+::
+
+### `label`
+
+Overrides the default label text. You can pass any string to customize the label displayed on the left half of the badge.
+
+- **Default**: Depends on the badge type (e.g., "version", "downloads/mo").
+- **Usage**: `?label=YOUR_LABEL`
+
+### `value`
+
+Overrides the default value text of the badge. You can pass any string to customize the value displayed on the right half of the badge.
+
+- **Default**: Calculated values depending on the badge type (e.g., "v4.2.0", "5.4M").
+- **Usage**: `?label=YOUR_LABEL`
+
+### `labelColor`
+
+Overrides the default label color. You can pass a standard hex code (with or without the `#` prefix). The label text color is automatically chosen (black or white) based on WCAG contrast ratio, so the badge remains readable.
+
+- **Default**: `#0a0a0a`
+- **Usage**: `?labelColor=HEX_CODE`
+
+### `color`
+
+Overrides the default strategy color. You can pass a standard hex code (with or without the `#` prefix). The text color is automatically chosen (black or white) based on WCAG contrast ratio, so the badge remains readable.
+
+- **Default**: Depends on the badge type (e.g., version is blue, downloads are orange).
+- **Usage**: `?color=HEX_CODE`
+
+| Example | URL |
+| :------------- | :------------------------------------ |
+| **Hot Pink** | `.../badge/version/nuxt?color=ff69b4` |
+| **Pure Black** | `.../badge/version/nuxt?color=000000` |
+| **Brand Blue** | `.../badge/version/nuxt?color=3b82f6` |
+
+### `name`
+
+When set to `true`, this parameter replaces the static category label (like "version" or "downloads/mo") with the actual name of the package. This is useful for brand-focused READMEs.
+
+- **Default**: `false`
+- **Usage**: `?name=true`
+
+| Type | Default Label | With `name=true` |
+| ------------- | -------------------- | ---------------- |
+| **Version** | `version \| 3.12.0` | `nuxt \| 3.12.0` |
+| **Downloads** | `downloads/mo \| 2M` | `lodash \| 2M` |
+
+### `style`
+
+Overrides the default badge appearance. Pass `shieldsio` to use the shields.io-compatible style.
+
+- **Default**: `default`
+- **Usage**: `?style=shieldsio`
diff --git a/docs/package.json b/docs/package.json
index f35be4560e..10773bfbe1 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -2,15 +2,15 @@
"name": "npmx-docs",
"private": true,
"description": "npmx public docs site",
+ "bugs": {
+ "url": "https://github.com/npmx-dev/npmx.dev/issues"
+ },
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://github.com/npmx-dev/npmx.dev.git",
"directory": "docs"
},
- "bugs": {
- "url": "https://github.com/npmx-dev/npmx.dev/issues"
- },
"scripts": {
"dev": "nuxt dev",
"build": "nuxt build",
@@ -20,10 +20,10 @@
},
"dependencies": {
"@nuxt/ui": "4.5.1",
- "@nuxtjs/mdc": "0.20.1",
- "better-sqlite3": "12.6.2",
- "docus": "5.7.0",
+ "@nuxtjs/mdc": "0.20.2",
+ "better-sqlite3": "12.8.0",
+ "docus": "5.8.1",
"nuxt": "4.3.1",
- "tailwindcss": "4.2.1"
+ "tailwindcss": "4.2.2"
}
}
diff --git a/docs/shared/utils/badges.ts b/docs/shared/utils/badges.ts
new file mode 100644
index 0000000000..c9152c0fad
--- /dev/null
+++ b/docs/shared/utils/badges.ts
@@ -0,0 +1,32 @@
+export const BADGE_TYPES = Object.freeze([
+ 'version',
+ 'license',
+ 'size',
+ 'downloads',
+ 'downloads-day',
+ 'downloads-week',
+ 'downloads-month',
+ 'downloads-year',
+ 'vulnerabilities',
+ 'dependencies',
+ 'created',
+ 'updated',
+ 'engines',
+ 'types',
+ 'maintainers',
+ 'deprecated',
+ 'quality',
+ 'popularity',
+ 'maintenance',
+ 'score',
+ 'name',
+] as const)
+
+export type BadgeType = (typeof BADGE_TYPES)[number]
+
+export function titleCase(str: string) {
+ return str
+ .split('-')
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
+ .join(' per ')
+}
diff --git a/docs/tsconfig.json b/docs/tsconfig.json
new file mode 100644
index 0000000000..307b2134b9
--- /dev/null
+++ b/docs/tsconfig.json
@@ -0,0 +1,18 @@
+{
+ // https://nuxt.com/docs/guide/concepts/typescript
+ "files": [],
+ "references": [
+ {
+ "path": "./.nuxt/tsconfig.app.json"
+ },
+ {
+ "path": "./.nuxt/tsconfig.server.json"
+ },
+ {
+ "path": "./.nuxt/tsconfig.shared.json"
+ },
+ {
+ "path": "./.nuxt/tsconfig.node.json"
+ }
+ ]
+}
diff --git a/i18n/locales/ar.json b/i18n/locales/ar.json
index 0f564fc8b7..c046ade81d 100644
--- a/i18n/locales/ar.json
+++ b/i18n/locales/ar.json
@@ -105,10 +105,14 @@
"theme_system": "ุณู
ุฉ ุงููุธุงู
",
"language": "ุงููุบุฉ",
"help_translate": "ุณุงูู
ูู ุชุฑุฌู
ุฉ npmx",
- "accent_colors": "ุฃููุงู ุงูู
ููุน",
+ "accent_colors": {
+ "label": "ุฃููุงู ุงูู
ููุน"
+ },
"clear_accent": "ู
ุณุญ ููู ุงูุชู
ููุฒ",
"translation_progress": "ุชูุฏู
ุงูุชุฑุฌู
ุฉ",
- "background_themes": "ุฏุฑุฌุฉ ุฎูููุฉ ุงูุตูุญุฉ"
+ "background_themes": {
+ "label": "ุฏุฑุฌุฉ ุฎูููุฉ ุงูุตูุญุฉ"
+ }
},
"i18n": {
"missing_keys": "{count} ุชุฑุฌู
ุงุช ู
ูููุฏุฉ | ุชุฑุฌู
ุฉ ูุงุญุฏุฉ ู
ูููุฏุฉ | ุชุฑุฌู
ุชุงู ู
ูููุฏุชุงู | {count} ุชุฑุฌู
ุงุช ู
ูููุฏุฉ | {count} ุชุฑุฌู
ุฉ ู
ูููุฏุฉ | {count} ุชุฑุฌู
ุฉ ู
ูููุฏุฉ",
diff --git a/i18n/locales/az-AZ.json b/i18n/locales/az-AZ.json
index aae98eeef1..e6709653e9 100644
--- a/i18n/locales/az-AZ.json
+++ b/i18n/locales/az-AZ.json
@@ -107,7 +107,7 @@
"reply_count": "{count} cavab",
"like_count": "{count} bษyษnmษ",
"repost_count": "{count} yenidษn paylaลฤฑm",
- "more_replies": "{count} cavab daha..."
+ "more_replies": "daha {count} cavab... | daha {count} cavab..."
}
},
"settings": {
@@ -142,10 +142,14 @@
"theme_system": "Sistem",
"language": "Dil",
"help_translate": "npmx-i tษrcรผmษ etmษyษ kรถmษk edin",
- "accent_colors": "Vurฤu rษnglษri",
+ "accent_colors": {
+ "label": "Vurฤu rษnglษri"
+ },
"clear_accent": "Vurฤu rษngini tษmizlษ",
"translation_progress": "Tษrcรผmษ irษlilษyiลi",
- "background_themes": "Fon tonu",
+ "background_themes": {
+ "label": "Fon tonu"
+ },
"keyboard_shortcuts_enabled": "Klaviatura qฤฑsayollarฤฑnฤฑ aktivlษลdir",
"keyboard_shortcuts_enabled_description": "Klaviatura qฤฑsayollarฤฑ digษr brauzer vษ ya sistem qฤฑsayollarฤฑ ilษ toqquลarsa deaktiv edilษ bilษr"
},
diff --git a/i18n/locales/bg-BG.json b/i18n/locales/bg-BG.json
index b633cc5d66..e1306999ac 100644
--- a/i18n/locales/bg-BG.json
+++ b/i18n/locales/bg-BG.json
@@ -111,10 +111,14 @@
"theme_system": "ะกะธััะตะผะฝะฐ",
"language": "ะะทะธะบ",
"help_translate": "ะะพะผะพะณะฝะตัะต ะดะฐ ะฟัะตะฒะตะดะตะผ npmx",
- "accent_colors": "ะะบัะตะฝัะฝะธ ัะฒะตัะพะฒะต",
+ "accent_colors": {
+ "label": "ะะบัะตะฝัะฝะธ ัะฒะตัะพะฒะต"
+ },
"clear_accent": "ะะทัะธััะฒะฐะฝะต ะฝะฐ ะฐะบัะตะฝัะตะฝ ัะฒัั",
"translation_progress": "ะะฐะฟัะตะดัะบ ะฝะฐ ะฟัะตะฒะพะดะฐ",
- "background_themes": "ะคะพะฝะพะฒ ะฝัะฐะฝั",
+ "background_themes": {
+ "label": "ะคะพะฝะพะฒ ะฝัะฐะฝั"
+ },
"keyboard_shortcuts_enabled": "ะะบัะธะฒะธัะฐะฝะต ะฝะฐ ะบะปะฐะฒะธัะฝะธ ะบะพะผะฑะธะฝะฐัะธะธ",
"keyboard_shortcuts_enabled_description": "ะะปะฐะฒะธัะฝะธัะต ะบะพะผะฑะธะฝะฐัะธะธ ะผะพะณะฐั ะดะฐ ะฑัะดะฐั ะดะตะฐะบัะธะฒะธัะฐะฝะธ, ะฐะบะพ ะฒะปะธะทะฐั ะฒ ะบะพะฝัะปะธะบั ั ะดััะณะธ ะฑัะฐัะทััะฝะธ ะธะปะธ ัะธััะตะผะฝะธ ะฟัะตะบะธ ะฟััะธัะฐ"
},
diff --git a/i18n/locales/bn-IN.json b/i18n/locales/bn-IN.json
index 9118c95d8e..530394cbc5 100644
--- a/i18n/locales/bn-IN.json
+++ b/i18n/locales/bn-IN.json
@@ -74,7 +74,9 @@
"theme_system": "เฆธเฆฟเฆธเงเฆเงเฆฎ",
"language": "เฆญเฆพเฆทเฆพ",
"help_translate": "npmx เฆ
เฆจเงเฆฌเฆพเฆฆเง เฆธเฆพเฆนเฆพเฆฏเงเฆฏ เฆเฆฐเงเฆจ",
- "accent_colors": "เฆเฆเงเฆธเงเฆจเงเฆ เฆฐเฆ",
+ "accent_colors": {
+ "label": "เฆเฆเงเฆธเงเฆจเงเฆ เฆฐเฆ"
+ },
"clear_accent": "เฆเฆเงเฆธเงเฆจเงเฆ เฆฐเฆ เฆธเฆพเฆซ เฆเฆฐเงเฆจ",
"translation_progress": "เฆ
เฆจเงเฆฌเฆพเฆฆเงเฆฐ เฆ
เฆเงเฆฐเฆเฆคเฆฟ"
},
diff --git a/i18n/locales/cs-CZ.json b/i18n/locales/cs-CZ.json
index 83a47443ad..fe06406e56 100644
--- a/i18n/locales/cs-CZ.json
+++ b/i18n/locales/cs-CZ.json
@@ -107,7 +107,7 @@
"reply_count": "{count} odpovฤฤ | {count} odpovฤdi | {count} odpovฤdรญ",
"like_count": "{count} lajk | {count} lajky | {count} lajkลฏ",
"repost_count": "{count} repost | {count} reposty | {count} repostลฏ",
- "more_replies": "{count} dalลกรญ odpovฤฤ ... | {count} dalลกรญ odpovฤdi ... | {count} dalลกรญch odpovฤdรญ ..."
+ "more_replies": "jeลกtฤ {count} odpovฤฤโฆ | jeลกtฤ {count} odpovฤdiโฆ | jeลกtฤ {count} odpovฤdรญโฆ"
}
},
"settings": {
@@ -142,10 +142,14 @@
"theme_system": "Systรฉmovรฉ",
"language": "Jazyk",
"help_translate": "Pomozte pลeloลพit npmx",
- "accent_colors": "Barvy akcentu",
+ "accent_colors": {
+ "label": "Barvy akcentu"
+ },
"clear_accent": "Vymazat barvu akcentu",
"translation_progress": "Pokrok pลekladu",
- "background_themes": "Odstรญn pozadรญ",
+ "background_themes": {
+ "label": "Odstรญn pozadรญ"
+ },
"keyboard_shortcuts_enabled": "Povolit klรกvesovรฉ zkratky",
"keyboard_shortcuts_enabled_description": "Klรกvesovรฉ zkratky lze zakรกzat, pokud se stลetรกvajรญ s jinรฝmi zkratkami prohlรญลพeฤe nebo systรฉmu"
},
diff --git a/i18n/locales/de-DE.json b/i18n/locales/de-DE.json
index dfe3e2588c..83503c1030 100644
--- a/i18n/locales/de-DE.json
+++ b/i18n/locales/de-DE.json
@@ -107,7 +107,7 @@
"reply_count": "{count} Antwort | {count} Antworten",
"like_count": "{count} Like | {count} Likes",
"repost_count": "{count} Repost | {count} Reposts",
- "more_replies": "{count} weitere Antwort anzeigen | {count} weitere Antworten anzeigen"
+ "more_replies": "noch {count} Antwortโฆ | noch {count} Antwortenโฆ"
}
},
"settings": {
@@ -142,10 +142,14 @@
"theme_system": "System",
"language": "Sprache",
"help_translate": "Hilf bei der รbersetzung von npmx",
- "accent_colors": "Akzentfarben",
+ "accent_colors": {
+ "label": "Akzentfarben"
+ },
"clear_accent": "Akzentfarbe zurรผcksetzen",
"translation_progress": "รbersetzungsfortschritt",
- "background_themes": "Hintergrundschattierung",
+ "background_themes": {
+ "label": "Hintergrundschattierung"
+ },
"keyboard_shortcuts_enabled": "Tastenkombinationen aktivieren",
"keyboard_shortcuts_enabled_description": "Tastenkombinationen kรถnnen deaktiviert werden, wenn sie mit anderen Browser- oder Systemkรผrzeln in Konflikt stehen"
},
diff --git a/i18n/locales/en.json b/i18n/locales/en.json
index 549bc2c305..f03ed84bf1 100644
--- a/i18n/locales/en.json
+++ b/i18n/locales/en.json
@@ -96,6 +96,7 @@
},
"draft_badge": "Draft",
"draft_banner": "This is an unpublished draft. It may be incomplete or contain inaccuracies.",
+ "no_posts": "No posts found.",
"atproto": {
"view_on_bluesky": "View on Bluesky",
"reply_on_bluesky": "Reply on Bluesky",
@@ -138,16 +139,34 @@
"include_types_description": "Add {'@'}types package to install commands for untyped packages",
"hide_platform_packages": "Hide platform-specific packages in search",
"hide_platform_packages_description": "Hide native binary packages like {'@'}esbuild/linux-x64 from results",
+ "enable_graph_pulse_loop": "Enable looping of pulse effect on mini graph",
+ "enable_graph_pulse_loop_description": "Activate a continuous pulse animation on the weekly download graph. This animation may be distracting for some users.",
"theme": "Theme",
"theme_light": "Light",
"theme_dark": "Dark",
"theme_system": "System",
"language": "Language",
"help_translate": "Help translate npmx",
- "accent_colors": "Accent colors",
+ "translation_status": "Check global translation status",
+ "accent_colors": {
+ "label": "Accent colors",
+ "sky": "Sky",
+ "coral": "Coral",
+ "amber": "Amber",
+ "emerald": "Emerald",
+ "violet": "Violet",
+ "magenta": "Magenta"
+ },
"clear_accent": "Clear accent color",
"translation_progress": "Translation progress",
- "background_themes": "Background shade",
+ "background_themes": {
+ "label": "Background shade",
+ "neutral": "Neutral",
+ "stone": "Stone",
+ "zinc": "Zinc",
+ "slate": "Slate",
+ "black": "Black"
+ },
"keyboard_shortcuts_enabled": "Enable keyboard shortcuts",
"keyboard_shortcuts_enabled_description": "Keyboard shortcuts can be disabled if they conflict with other browser or system shortcuts"
},
@@ -205,7 +224,9 @@
"radicle": "View on Radicle",
"sourcehut": "View on SourceHut",
"tangled": "View on Tangled"
- }
+ },
+ "collapse": "Collapse",
+ "expand": "Expand"
},
"profile": {
"display_name": "Display Name",
@@ -284,7 +305,8 @@
"refs": "{count} ref | {count} refs",
"assets": "{count} asset | {count} assets"
},
- "view_source": "View source"
+ "view_source": "View source",
+ "skills_cli": "skills CLI"
},
"links": {
"main": "main",
@@ -295,15 +317,23 @@
"code": "code",
"docs": "docs",
"fund": "fund",
- "compare": "compare"
+ "compare": "compare",
+ "compare_this_package": "compare this package"
},
"likes": {
"like": "Like this package",
"unlike": "Unlike this package"
},
"docs": {
+ "contents": "Contents",
+ "default_not_available": "Docs are not available for this version.",
"not_available": "Docs not available",
- "not_available_detail": "We could not generate docs for this version."
+ "not_available_detail": "We could not generate docs for this version.",
+ "page_title": "API Docs - npmx",
+ "page_title_name": "{name} docs - npmx",
+ "page_title_version": "{name} docs - npmx",
+ "og_title": "{name} - Docs",
+ "view_package": "View package"
},
"get_started": {
"title": "Get started",
@@ -363,7 +393,9 @@
"published": "Published",
"weekly_downloads": "Weekly downloads",
"keywords": "Keywords",
- "license": "License"
+ "license": "License",
+ "select": "Select package",
+ "select_maximum": "Maximum {count} packages can be selected"
},
"versions": {
"title": "Versions",
@@ -378,6 +410,7 @@
"all_covered": "All versions are covered by tags above",
"deprecated_title": "{version} (deprecated)",
"view_all": "View {count} version | View all {count} versions",
+ "view_all_versions": "View all versions",
"distribution_title": "Semver Group",
"distribution_modal_title": "Versions",
"distribution_range_date_same_year": "from {from} to {to}, {endYear}",
@@ -385,9 +418,11 @@
"grouping_major": "Major",
"grouping_minor": "Minor",
"grouping_versions_title": "Versions",
+ "grouping_versions_about": "About version grouping",
"grouping_versions_all": "All",
"grouping_versions_only_recent": "Only recent",
"grouping_usage_title": "Usage",
+ "grouping_usage_about": "About usage grouping",
"grouping_usage_all": "All",
"grouping_usage_most_used": "Most used",
"recent_versions_only_tooltip": "Show only versions published within the last year.",
@@ -402,7 +437,12 @@
"copy_alt": {
"per_version_analysis": "{version} version was downloaded {downloads} times",
"general_description": "Bar chart showing per-version downloads for {versions_count} {semver_grouping_mode} versions of the {package_name} package, {date_range_label} from the {first_version} version to the {last_version} version. The most downloaded version is {max_downloaded_version} with {max_version_downloads} downloads. {per_version_analysis}. {watermark}."
- }
+ },
+ "page_title": "Version History",
+ "current_tags": "Current Tags",
+ "version_filter_placeholder": "Filter versionsโฆ",
+ "version_filter_label": "Filter versions",
+ "no_match_filter": "No versions match {filter}"
},
"dependencies": {
"title": "Dependency ({count}) | Dependencies ({count})",
@@ -413,7 +453,8 @@
"outdated_major": "{count} major version behind (latest: {latest}) | {count} major versions behind (latest: {latest})",
"outdated_minor": "{count} minor version behind (latest: {latest}) | {count} minor versions behind (latest: {latest})",
"outdated_patch": "Patch update available (latest: {latest})",
- "has_replacement": "This dependency has suggested replacements"
+ "has_replacement": "This dependency has suggested replacements",
+ "vulnerabilities_count": "{count} vulnerability | {count} vulnerabilities"
},
"peer_dependencies": {
"title": "Peer Dependency ({count}) | Peer Dependencies ({count})",
@@ -437,9 +478,16 @@
"cancel_add": "Cancel adding owner",
"add_owner": "+ Add owner",
"show_more": "(show {count} more)",
- "show_less": "(show fewer)"
+ "show_less": "(show fewer)",
+ "maintainer_template": "{avatar} {char126}{name}"
},
"trends": {
+ "chart_assistive_text": {
+ "keyboard_navigation_horizontal": "Use the left and right arrow keys to cycle through data points.",
+ "keyboard_navigation_vertical": "Use the up and down arrow keys to cycle through data points.",
+ "table_available": "A data table for this chart is available below.",
+ "table_caption": "Chart data table"
+ },
"granularity": "Granularity",
"granularity_daily": "Daily",
"granularity_weekly": "Weekly",
@@ -498,7 +546,8 @@
"downloads": {
"title": "Weekly Downloads",
"community_distribution": "View community adoption distribution",
- "subtitle": "Across all versions"
+ "subtitle": "Across all versions",
+ "sparkline_nav_hint": "Use โ โ"
},
"install_scripts": {
"title": "Install Scripts",
@@ -513,11 +562,12 @@
"metrics": {
"esm": "ES Modules supported",
"cjs": "CommonJS supported",
- "no_esm": "No ES Modules support",
+ "no_esm": "ES Modules unsupported",
+ "wasm": "Has WebAssembly",
"types_label": "Types",
"types_included": "Types included",
"types_available": "Types available via {package}",
- "no_types": "No TypeScript types"
+ "no_types": "No types"
},
"license": {
"view_spdx": "View license text on SPDX",
@@ -587,6 +637,10 @@
"b": "{size} B",
"kb": "{size} kB",
"mb": "{size} MB"
+ },
+ "download": {
+ "button": "Download",
+ "tarball": "Download Tarball as .tar.gz"
}
},
"connector": {
@@ -855,6 +909,8 @@
"secure": "Without warnings",
"insecure": "With warnings"
},
+ "view_selected": "View selected",
+ "clear_selected_label": "Clear selected",
"sort": {
"label": "Sort packages",
"toggle_direction": "Toggle sort direction",
@@ -888,7 +944,8 @@
"popularity_score": "Popularity score",
"maintenance_score": "Maintenance score",
"combined_score": "Combined score",
- "security": "Security"
+ "security": "Security",
+ "selection": "Select package"
},
"view_mode": {
"label": "View mode",
@@ -920,19 +977,19 @@
"about": {
"title": "About",
"heading": "about",
- "meta_description": "npmx is a fast, modern browser for the npm registry. A better UX/DX for exploring npm packages.",
+ "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",
- "better_ux_dx": "better UX/DX",
+ "better_ux_dx": "great UX/DX",
"admin_ui": "admin UI",
- "description": "npmx is a {betterUxDx} for the npm package registry and tooling. We provide a fast, modern interface for exploring packages, with features like dark mode, keyboard navigation, code browsing, and connections to alternative registries like {jsr}.",
- "admin_description": "We also aim to provide a better {adminUi} for managing your packages, teams, and organizations โ all from the browser, powered by your local npm CLI."
+ "description": "npmx is a {betterUxDx} for the npm package registry and tooling. We strive to provide a fast, modern interface for exploring packages, with features like dark mode, keyboard navigation, code browsing, and connections to alternative registries like {jsr}.",
+ "admin_description": "We also aim to provide a great {adminUi} for managing your packages, teams, and organizations โ all from the browser, powered by your local npm CLI."
},
"what_we_are_not": {
"title": "What we're not",
"not_package_manager": "Not a package manager.",
"not_registry": "Not a registry.",
- "registry_description": "We don't host packages. We're just a better way to browse them.",
+ "registry_description": "We don't host packages. We're just a fast, modern way to browse them.",
"package_managers_exist": "{already} {people} {building} {really} {cool} {package} {managers}.",
"words": {
"already": "There are",
@@ -969,7 +1026,7 @@
"title": "Get involved",
"contribute": {
"title": "Contribute",
- "description": "Help us build a better npm experience.",
+ "description": "Help us build the npm experience we all want.",
"cta": "View on GitHub"
},
"community": {
@@ -1035,7 +1092,8 @@
"error": "Failed to load organizations",
"empty": "No organizations found",
"view_all": "View all"
- }
+ },
+ "pr": "Open GitHub pull request #{prNumber}"
},
"compare": {
"packages": {
@@ -1054,7 +1112,9 @@
"empty_title": "Select packages to compare",
"empty_description": "Search and add at least 2 packages above to see a side-by-side comparison of their metrics.",
"table_view": "Table",
- "charts_view": "Charts"
+ "charts_view": "Charts",
+ "bar_chart_nav_hint": "Use โ โ",
+ "line_chart_nav_hint": "Use โ โ"
},
"selector": {
"search_label": "Search for packages",
@@ -1166,6 +1226,14 @@
"file_size_warning": "{size} exceeds the 250KB limit for comparison",
"compare_versions": "diff",
"compare_versions_title": "Compare with latest version",
+ "comparing_versions_label": "Comparing versions...",
+ "version_back_to_package": "Back to package",
+ "version_error_message": "Failed to compare versions.",
+ "version_invalid_url_format": {
+ "hint": "Invalid comparison URL. Use format: {0}",
+ "from_version": "from",
+ "to_version": "to"
+ },
"version_selector_title": "Compare with version",
"summary": "Summary",
"deps_count": "{count} dep | {count} deps",
@@ -1192,7 +1260,18 @@
"files_button": "Files",
"select_file_prompt": "Select a file from the sidebar to view its diff",
"close_files_panel": "Close files panel",
- "filter_files_label": "Filter files by change type"
+ "filter_files_label": "Filter files by change type",
+ "change_ratio": "Change ratio",
+ "char_edits": "Char edits",
+ "diff_distance": "Diff distance",
+ "loading_diff": "Loading diff...",
+ "loading_diff_error": "Failed to load diff",
+ "merge_modified_lines": "Merge modified lines",
+ "no_content_changes": "No content changes detected",
+ "options": "Options",
+ "view_file": "View file",
+ "view_in_code_browser": "View in code browser",
+ "word_wrap": "Word wrap"
},
"pds": {
"title": "npmx.social",
@@ -1332,6 +1411,29 @@
"link": "GitHub repository"
}
},
+ "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.",
+ "p1_lang": "American English (en-US)",
+ "p1_count": "0 messages | 1 message |{count} messages",
+ "p2": "Before starting, please read our {guide} to learn about our translation process and how you can get involved.",
+ "guide": "localization (i18n) guide",
+ "by_locale": "Translation progress by locale",
+ "by_file": "Translation progress by file",
+ "complete_text": "This translation is complete, amazing job!",
+ "missing_text": "missing",
+ "missing_keys": "There is no missing translations | Missing translation | Missing translations",
+ "progress_label": "Progress status for {locale}",
+ "table": {
+ "file": "File",
+ "status": "Status",
+ "error": "Error while loading file list.",
+ "empty": "No files found",
+ "file_link": "Edit {file} ({lang}) on GitHub"
+ }
+ },
"vacations": {
"title": "on vacation",
"meta_description": "The npmx team was recharging. Discord reopened after a week.",
@@ -1365,5 +1467,11 @@
"all": "all"
}
}
+ },
+ "action_bar": {
+ "title": "action bar",
+ "selection": "0 selected | 1 selected | {count} selected",
+ "shortcut": "Press \"{key}\" to focus actions",
+ "button_close_aria_label": "Close action bar"
}
}
diff --git a/i18n/locales/es.json b/i18n/locales/es.json
index 72995686a9..c3ab2a0e45 100644
--- a/i18n/locales/es.json
+++ b/i18n/locales/es.json
@@ -144,10 +144,14 @@
"theme_system": "Sistema",
"language": "Idioma",
"help_translate": "Ayuda a traducir npmx",
- "accent_colors": "Colores de acento",
+ "accent_colors": {
+ "label": "Colores de acento"
+ },
"clear_accent": "Limpiar color de acento",
"translation_progress": "Progreso de traducciรณn",
- "background_themes": "Tema de fondo",
+ "background_themes": {
+ "label": "Tema de fondo"
+ },
"keyboard_shortcuts_enabled": "Activar atajos de teclado",
"keyboard_shortcuts_enabled_description": "Los atajos de teclado pueden desactivarse si entran en conflicto con otros atajos del navegador o del sistema"
},
diff --git a/i18n/locales/fr-FR.json b/i18n/locales/fr-FR.json
index e8c3385e53..fa1bfe86e2 100644
--- a/i18n/locales/fr-FR.json
+++ b/i18n/locales/fr-FR.json
@@ -107,7 +107,7 @@
"reply_count": "{count} rรฉponse | {count} rรฉponses",
"like_count": "{count} j'aime | {count} j'aime",
"repost_count": "{count} repartage | {count} repartages",
- "more_replies": "{count} rรฉponse de plus... | {count} rรฉponses de plus..."
+ "more_replies": "{count} rรฉponse supplรฉmentaire... | {count} rรฉponses supplรฉmentaires..."
}
},
"settings": {
@@ -142,10 +142,25 @@
"theme_system": "Systรจme",
"language": "Langue de l'interface",
"help_translate": "Aidez-nous ร traduire npmx",
- "accent_colors": "Couleurs d'accentuation",
+ "accent_colors": {
+ "label": "Couleurs d'accentuation",
+ "sky": "Ciel",
+ "coral": "Corail",
+ "amber": "Ambre",
+ "emerald": "รmeraude",
+ "violet": "Violet",
+ "magenta": "Magenta"
+ },
"clear_accent": "Supprimer la couleur d'accentuation",
"translation_progress": "Progression de la traduction",
- "background_themes": "Teinte de fond",
+ "background_themes": {
+ "label": "Teinte de fond",
+ "neutral": "Neutre",
+ "stone": "Pierre",
+ "zinc": "Zinc",
+ "slate": "Ardoise",
+ "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"
},
@@ -282,15 +297,23 @@
"code": "code",
"docs": "docs",
"fund": "donner",
- "compare": "comparer"
+ "compare": "comparer",
+ "compare_this_package": "comparer ce paquet"
},
"likes": {
"like": "Liker ce paquet",
"unlike": "Retirer le like"
},
"docs": {
+ "contents": "Sommaire",
+ "default_not_available": "La documentation n'est pas disponible pour cette version.",
"not_available": "Documentation non disponible",
- "not_available_detail": "Nous n'avons pas pu gรฉnรฉrer la documentation pour cette version."
+ "not_available_detail": "Nous n'avons pas pu gรฉnรฉrer la documentation pour cette version.",
+ "page_title": "Documentation API - npmx",
+ "page_title_name": "Documentation {name} - npmx",
+ "page_title_version": "Documentation {name} - npmx",
+ "og_title": "{name} - Documentation",
+ "view_package": "Voir le paquet"
},
"get_started": {
"title": "Commencer",
@@ -426,6 +449,12 @@
"show_less": "(afficher moins)"
},
"trends": {
+ "chart_assistive_text": {
+ "keyboard_navigation_horizontal": "Utilisez les touches flรฉchรฉes gauche et droite pour parcourir les points de donnรฉes.",
+ "keyboard_navigation_vertical": "Utilisez les touches flรฉchรฉes haut et bas pour parcourir les points de donnรฉes.",
+ "table_available": "Un tableau de donnรฉes pour ce graphique est disponible ci-dessous.",
+ "table_caption": "Tableau de donnรฉes du graphique"
+ },
"granularity": "Granularitรฉ",
"granularity_daily": "Par Jour",
"granularity_weekly": "Par Semaine",
@@ -483,7 +512,8 @@
"downloads": {
"title": "Tรฉlรฉchargements hebdo.",
"community_distribution": "Voir la distribution des versions tรฉlรฉchargรฉes par la communautรฉ",
- "subtitle": "Toutes versions confondues"
+ "subtitle": "Toutes versions confondues",
+ "sparkline_nav_hint": "Utilisez โ โ"
},
"install_scripts": {
"title": "Scripts d'installation",
@@ -903,19 +933,19 @@
"about": {
"title": "ร propos",
"heading": "ร propos",
- "meta_description": "npmx est un navigateur rapide et moderne pour le registre npm. Une meilleure UX/DX pour explorer les paquets npm.",
+ "meta_description": "npmx est un navigateur rapide et moderne pour le registre npm. Une excellente UX/DX pour explorer les paquets npm.",
"what_we_are": {
"title": "Ce que nous sommes",
- "better_ux_dx": "meilleure UX/DX",
+ "better_ux_dx": "excellente UX/DX",
"admin_ui": "interface d'administration",
"description": "npmx est une {betterUxDx} pour le registre npm et ses outils. Nous fournissons une interface rapide et moderne pour explorer les paquets, avec des fonctionnalitรฉs comme le mode sombre, la navigation au clavier, la visualisation du code, et des connexions ร des registres alternatifs comme {jsr}.",
- "admin_description": "Nous visons รฉgalement ร fournir une meilleure {adminUi} pour gรฉrer vos paquets, รฉquipes et organisations โ le tout depuis le navigateur, alimentรฉ par votre CLI npm local."
+ "admin_description": "Nous visons รฉgalement ร fournir une excellente {adminUi} pour gรฉrer vos paquets, รฉquipes et organisations โ le tout depuis le navigateur, alimentรฉ par votre CLI npm local."
},
"what_we_are_not": {
"title": "Ce que nous ne sommes pas",
"not_package_manager": "Nous ne sommes pas un gestionnaire de paquets.",
"not_registry": "Nous ne sommes pas un registre.",
- "registry_description": "Nous n'hรฉbergeons pas de paquets. Nous sommes juste une meilleure faรงon de les explorer.",
+ "registry_description": "Nous n'hรฉbergeons pas de paquets. Nous sommes une faรงon rapide et moderne de les explorer.",
"package_managers_exist": "{already} {people} {building} {managers} {package} {really} {cool}.",
"words": {
"already": "Il y a",
@@ -952,7 +982,7 @@
"title": "Participer",
"contribute": {
"title": "Contribuer",
- "description": "Aidez-nous ร crรฉer une meilleure expรฉrience npm.",
+ "description": "Aidez-nous ร crรฉer l'expรฉrience npm que nous voulons tous.",
"cta": "Voir sur GitHub"
},
"community": {
@@ -1035,7 +1065,11 @@
"loading": "Chargement des donnรฉes des paquets...",
"error": "รchec du chargement des donnรฉes. Veuillez rรฉessayer.",
"empty_title": "Sรฉlectionnez des paquets ร comparer",
- "empty_description": "Recherchez et ajoutez au moins 2 paquets ci-dessus pour voir une comparaison cรดte ร cรดte de leurs facettes."
+ "empty_description": "Recherchez et ajoutez au moins 2 paquets ci-dessus pour voir une comparaison cรดte ร cรดte de leurs facettes.",
+ "table_view": "Tableau",
+ "charts_view": "Graphiques",
+ "bar_chart_nav_hint": "Utilisez โ โ",
+ "line_chart_nav_hint": "Utilisez โ โ"
},
"selector": {
"search_label": "Rechercher des paquets",
diff --git a/i18n/locales/hi-IN.json b/i18n/locales/hi-IN.json
index 6840614575..63f832c7fc 100644
--- a/i18n/locales/hi-IN.json
+++ b/i18n/locales/hi-IN.json
@@ -75,7 +75,9 @@
"theme_system": "เคธเคฟเคธเฅเคเคฎ",
"language": "เคญเคพเคทเคพ",
"help_translate": "npmx เคเคพ เค
เคจเฅเคตเคพเคฆ เคเคฐเคจเฅ เคฎเฅเค เคฎเคฆเคฆ เคเคฐเฅเค",
- "accent_colors": "เคเคเฅเคธเฅเคเค เคฐเคเค",
+ "accent_colors": {
+ "label": "เคเคเฅเคธเฅเคเค เคฐเคเค"
+ },
"clear_accent": "เคเคเฅเคธเฅเคเค เคฐเคเค เคธเคพเคซเคผ เคเคฐเฅเค",
"translation_progress": "เค
เคจเฅเคตเคพเคฆ เคชเฅเคฐเคเคคเคฟ"
},
diff --git a/i18n/locales/hu-HU.json b/i18n/locales/hu-HU.json
index 8040f4d48d..ed65c307ea 100644
--- a/i18n/locales/hu-HU.json
+++ b/i18n/locales/hu-HU.json
@@ -111,10 +111,14 @@
"theme_system": "Rendszer",
"language": "Nyelv",
"help_translate": "Segรญts lefordรญtani az npmx-et",
- "accent_colors": "Akcentus szรญnek",
+ "accent_colors": {
+ "label": "Akcentus szรญnek"
+ },
"clear_accent": "Akcentus szรญn tรถrlรฉse",
"translation_progress": "Fordรญtรกs รกllapota",
- "background_themes": "Hรกttรฉr รกrnyalata",
+ "background_themes": {
+ "label": "Hรกttรฉr รกrnyalata"
+ },
"keyboard_shortcuts_enabled": "Billentyลฑzet parancsikonok engedรฉlyezรฉse",
"keyboard_shortcuts_enabled_description": "A billentyลฑzet parancsikonok letilthatรณk, ha รผtkรถznek mรกs bรถngรฉszล vagy rendszer parancsikonokkal"
},
diff --git a/i18n/locales/id-ID.json b/i18n/locales/id-ID.json
index 0f13dd00e5..faa4c332fe 100644
--- a/i18n/locales/id-ID.json
+++ b/i18n/locales/id-ID.json
@@ -109,7 +109,7 @@
"reply_count": "{count} balasan | {count} balasan",
"like_count": "{count} suka | {count} suka",
"repost_count": "{count} repost | {count} repost",
- "more_replies": "{count} balasan lainnya... | {count} balasan lainnya..."
+ "more_replies": "{count} balasan lagi... | {count} balasan lagi..."
}
},
"settings": {
@@ -144,10 +144,14 @@
"theme_system": "Sistem",
"language": "Bahasa",
"help_translate": "Bantu terjemahkan npmx",
- "accent_colors": "Warna aksen",
+ "accent_colors": {
+ "label": "Warna aksen"
+ },
"clear_accent": "Hapus warna aksen",
"translation_progress": "Progres terjemahan",
- "background_themes": "Warna latar belakang",
+ "background_themes": {
+ "label": "Warna latar belakang"
+ },
"keyboard_shortcuts_enabled": "Aktifkan pintasan papan ketik",
"keyboard_shortcuts_enabled_description": "Pintasan papan ketik dapat dinonaktifkan jika bertentangan dengan pintasan peramban atau sistem lainnya."
},
diff --git a/i18n/locales/it-IT.json b/i18n/locales/it-IT.json
index 52c6f8d235..ec6e221918 100644
--- a/i18n/locales/it-IT.json
+++ b/i18n/locales/it-IT.json
@@ -105,10 +105,14 @@
"theme_system": "Sistema",
"language": "Lingua",
"help_translate": "Aiuta a tradurre npmx",
- "accent_colors": "Colori di accento",
+ "accent_colors": {
+ "label": "Colori di accento"
+ },
"clear_accent": "Cancella colore di accento",
"translation_progress": "Progresso della traduzione",
- "background_themes": "Sfumatura di sfondo"
+ "background_themes": {
+ "label": "Sfumatura di sfondo"
+ }
},
"i18n": {
"missing_keys": "{count} chiave mancante | {count} chiavi mancanti",
@@ -145,6 +149,9 @@
"github": "Vedi su GitHub"
}
},
+ "profile": {
+ "invite": {}
+ },
"package": {
"not_found": "Pacchetto Non Trovato",
"not_found_message": "Impossibile trovare il pacchetto.",
@@ -229,9 +236,9 @@
"title": "Inizia",
"pm_label": "Gestore di pacchetti",
"copy_command": "Copia comando di installazione",
- "view_types": "Vedi {package}",
"copy_dev_command": "Copia comando di installazione dev",
- "dev_dependency_hint": "Di solito installato come dev dependency"
+ "dev_dependency_hint": "Di solito installato come dev dependency",
+ "view_types": "Vedi {package}"
},
"create": {
"title": "Crea nuovo progetto",
@@ -297,7 +304,8 @@
"more_tagged": "{count} altri taggati",
"all_covered": "Tutte le versioni sono coperte dai tag sopra",
"deprecated_title": "{version} (deprecato)",
- "view_all": "Visualizza {count} versione | Visualizza tutte le {count} versioni"
+ "view_all": "Visualizza {count} versione | Visualizza tutte le {count} versioni",
+ "copy_alt": {}
},
"dependencies": {
"title": "Dipendenza ({count}) | Dipendenze ({count})",
@@ -351,7 +359,8 @@
"y_axis_label": "{granularity} {facet}",
"items": {
"downloads": "Download"
- }
+ },
+ "copy_alt": {}
},
"downloads": {
"title": "Download settimanali",
@@ -794,6 +803,8 @@
"managers": "gestori di pacchetti"
}
},
+ "sponsors": {},
+ "oss_partners": {},
"team": {},
"contributors": {
"title": "{count} Collaboratore | {count} Collaboratori",
@@ -984,7 +995,9 @@
"up_to_you": "A tua scelta!"
},
"trends": {}
- }
+ },
+ "file_filter_option": {},
+ "filter": {}
},
"privacy_policy": {
"title": "Informativa sulla privacy",
@@ -1071,5 +1084,6 @@
"measures": {},
"limitations": {},
"contact": {}
- }
+ },
+ "action_bar": {}
}
diff --git a/i18n/locales/ja-JP.json b/i18n/locales/ja-JP.json
index a63e8f8343..b876175b49 100644
--- a/i18n/locales/ja-JP.json
+++ b/i18n/locales/ja-JP.json
@@ -107,7 +107,7 @@
"reply_count": "{count} ไปถใฎ่ฟไฟก",
"like_count": "{count} ไปถใฎใใใญ",
"repost_count": "{count} ไปถใฎใชใในใ",
- "more_replies": "ใใใซ {count} ไปถใฎใชใใฉใคใ่กจ็คบ..."
+ "more_replies": "ใใใซ{count}ไปถใฎ่ฟไฟกโฆ"
}
},
"settings": {
@@ -142,10 +142,14 @@
"theme_system": "ใทในใใ ",
"language": "่จ่ช",
"help_translate": "npmxใฎ็ฟป่จณใซๅๅใใ",
- "accent_colors": "ใขใฏใปใณใใซใฉใผ",
+ "accent_colors": {
+ "label": "ใขใฏใปใณใใซใฉใผ"
+ },
"clear_accent": "ใขใฏใปใณใใซใฉใผใใฏใชใข",
"translation_progress": "็ฟป่จณใฎ้ฒๆ็ถๆณ",
- "background_themes": "่ๆฏใทใงใผใ",
+ "background_themes": {
+ "label": "่ๆฏใทใงใผใ"
+ },
"keyboard_shortcuts_enabled": "ใญใผใใผใใทใงใผใใซใใใๆๅนๅ",
"keyboard_shortcuts_enabled_description": "ใใฉใฆใถใใทในใใ ใฎใทใงใผใใซใใใจ็ซถๅใใๅ ดๅใใญใผใใผใใทใงใผใใซใใใ็กๅนๅใงใใพใ"
},
diff --git a/i18n/locales/kn-IN.json b/i18n/locales/kn-IN.json
index 51b8302df6..5786e6a53c 100644
--- a/i18n/locales/kn-IN.json
+++ b/i18n/locales/kn-IN.json
@@ -75,7 +75,9 @@
"theme_system": "เฒธเฒฟเฒธเณเฒเฒฎเณ",
"language": "เฒญเฒพเฒทเณ",
"help_translate": "npmx เฒ
เฒจเณเฒตเฒพเฒฆเฒเณเฒเณ เฒธเฒนเฒพเฒฏ เฒฎเฒพเฒกเฒฟ",
- "accent_colors": "เฒ
เฒเณเฒธเณเฒเฒเณ เฒฌเฒฃเณเฒฃเฒเฒณเณ",
+ "accent_colors": {
+ "label": "เฒ
เฒเณเฒธเณเฒเฒเณ เฒฌเฒฃเณเฒฃเฒเฒณเณ"
+ },
"clear_accent": "เฒ
เฒเณเฒธเณเฒเฒเณ เฒฌเฒฃเณเฒฃ เฒคเณเฒฐเฒตเณเฒเณเฒณเฒฟเฒธเฒฟ",
"translation_progress": "เฒ
เฒจเณเฒตเฒพเฒฆ เฒชเณเฒฐเฒเฒคเฒฟ"
},
diff --git a/i18n/locales/mr-IN.json b/i18n/locales/mr-IN.json
index 5c1692f0d7..129d7c4ddd 100644
--- a/i18n/locales/mr-IN.json
+++ b/i18n/locales/mr-IN.json
@@ -13,10 +13,32 @@
"trademark_disclaimer": "npm เคนเคพ npm, Inc. เคเคพ เคจเฅเคเคฆเคฃเฅเคเฅเคค เคเฅเคฐเฅเคกเคฎเคพเคฐเฅเค เคเคนเฅ. เคนเฅ เคธเคพเคเค npm, Inc. เคถเฅ เคธเคเคฒเคเฅเคจ เคจเคพเคนเฅ.",
"footer": {
"about": "เคฌเคฆเฅเคฆเคฒ",
+ "blog": "เคฌเฅเคฒเฅเค",
"docs": "เคฆเคธเฅเคคเคเคตเค",
"source": "เคธเฅเคฐเฅเคค",
"social": "เคธเฅเคถเคฒ",
- "chat": "เคเฅ
เค"
+ "chat": "เคเฅ
เค",
+ "builders_chat": "เคฌเคฟเคฒเฅเคกเคฐเฅเคธ",
+ "keyboard_shortcuts": "เคเฅเคฌเฅเคฐเฅเคก เคถเฅเคฐเฅเคเคเค"
+ },
+ "shortcuts": {
+ "section": {
+ "global": "เคเคพเคเคคเคฟเค",
+ "search": "เคถเฅเคง",
+ "package": "เคชเฅ
เคเฅเค"
+ },
+ "focus_search": "เคถเฅเคงเคพเคตเคฐ เคซเฅเคเคธ เคเคฐเคพ",
+ "show_kbd_hints": "เคเฅเคฌเฅเคฐเฅเคก เคธเฅเคเคจเคพเคเคจเคพ เค เคณเค เคเคฐเคพ",
+ "settings": "เคธเฅเคเคฟเคเคเฅเค เคเคเคกเคพ",
+ "compare": "เคคเฅเคฒเคจเคพ เคเคเคกเคพ",
+ "compare_from_package": "เคคเฅเคฒเคจเคพ เคเคเคกเคพ (เคธเคงเฅเคฏเคพเคเฅเคฏเคพ เคชเฅ
เคเฅเคเคธเคน เคชเฅเคฐเฅเคตเคญเคฐเคฒเฅเคฒเฅ)",
+ "navigate_results": "เคชเคฐเคฟเคฃเคพเคฎเคพเคเคฎเคงเฅเคฏเฅ เคซเคฟเคฐเคพ",
+ "go_to_result": "เคชเคฐเคฟเคฃเคพเคฎเคพเคเคกเฅ เคเคพ",
+ "open_code_view": "เคเฅเคก เคฆเฅเคถเฅเคฏ เคเคเคกเคพ",
+ "open_docs": "เคฆเคธเฅเคคเคเคตเค เคเคเคกเคพ",
+ "disable_shortcuts": "เคคเฅเคฎเฅเคนเฅ {settings} เคฎเคงเฅเคฏเฅ เคเฅเคฌเฅเคฐเฅเคก เคถเฅเคฐเฅเคเคเค เค
เคเฅเคทเคฎ เคเคฐเฅ เคถเคเคคเคพ.",
+ "open_main": "เคฎเฅเคเฅเคฏ เคฎเคพเคนเคฟเคคเฅ เคเคเคกเคพ",
+ "open_diff": "เคเคตเฅเคคเฅเคคเฅเคคเฅเคฒ เคซเคฐเค เคเคเคกเคพ"
},
"search": {
"label": "npm เคชเฅ
เคเฅเคเฅเคธ เคถเฅเคงเคพ",
@@ -24,21 +46,34 @@
"button": "เคถเฅเคงเคพ",
"searching": "เคถเฅเคงเคค เคเคนเฅ...",
"found_packages": "เคเฅเคฃเคคเฅเคนเฅ เคชเฅ
เคเฅเค เคธเคพเคชเคกเคฒเฅ เคจเคพเคนเฅ | 1 เคชเฅ
เคเฅเค เคธเคพเคชเคกเคฒเฅ | {count} เคชเฅ
เคเฅเคเฅเคธ เคธเคพเคชเคกเคฒเฅเคฏเคพ",
+ "found_packages_sorted": "เคเฅเคฃเคคเฅเคนเฅ เคชเคฐเคฟเคฃเคพเคฎ เคธเคพเคชเคกเคฒเฅ เคจเคพเคนเฅเคค | เคถเฅเคฐเฅเคท {count} เคชเคฐเคฟเคฃเคพเคฎ เคเฅเคฐเคฎเคฌเคฆเฅเคง เคเคฐเคค เคเคนเฅ | เคถเฅเคฐเฅเคท {count} เคชเคฐเคฟเคฃเคพเคฎ เคเฅเคฐเคฎเคฌเคฆเฅเคง เคเคฐเคค เคเคนเฅ",
"updating": "(เค
เคฆเฅเคฏเคคเคจเคฟเคค เคเคฐเคค เคเคนเฅ...)",
"no_results": "\"{query}\" เคธเคพเค เฅ เคเฅเคฃเคคเฅเคนเฅ เคชเฅ
เคเฅเค เคธเคพเคชเคกเคฒเฅ เคจเคพเคนเฅ",
+ "rate_limited": "npm เคฆเคฐ เคฎเคฐเฅเคฏเคพเคฆเคพ เคเคพเค เคฒเฅ, เคฅเฅเคกเฅเคฏเคพ เคตเฅเคณเคพเคจเฅ เคชเฅเคจเฅเคนเคพ เคชเฅเคฐเคฏเคคเฅเคจ เคเคฐเคพ",
"title": "เคถเฅเคง",
+ "title_search": "เคถเฅเคง: {search}",
+ "title_packages": "เคชเฅ
เคเฅเคเฅเคธ เคถเฅเคงเคพ",
+ "meta_description": "'{search}' เคธเคพเค เฅ เคถเฅเคง เคชเคฐเคฟเคฃเคพเคฎ",
+ "meta_description_packages": "npm เคชเฅ
เคเฅเคเฅเคธ เคถเฅเคงเคพ",
"not_taken": "{name} เคเคชเคฒเคฌเฅเคง เคเคนเฅ",
"claim_prompt": "npm เคตเคฐ เคนเฅ เคชเฅ
เคเฅเค เคจเคพเคต เคฆเคพเคตเคพ เคเคฐเคพ",
"claim_button": "\"{name}\" เคฆเคพเคตเคพ เคเคฐเคพ",
"want_to_claim": "เคนเฅ เคชเฅ
เคเฅเค เคจเคพเคต เคฆเคพเคตเคพ เคเคฐเคพเคฏเคเฅ เคเคนเฅ เคเคพ?",
"start_typing": "เคชเฅ
เคเฅเคเฅเคธ เคถเฅเคงเคฃเฅเคฏเคพเคธเคพเค เฅ เคเคพเคเคช เคเคฐเคฃเฅ เคธเฅเคฐเฅ เคเคฐเคพ",
+ "algolia_disclaimer": "Algolia เคฆเฅเคตเคพเคฐเฅ เคธเคฎเคฐเฅเคฅเคฟเคค",
"exact_match": "เค
เคเฅเค",
"suggestion": {
"user": "เคตเคพเคชเคฐเคเคฐเฅเคคเคพ",
"org": "เคธเคเคธเฅเคฅเคพ",
"view_user_packages": "เคฏเคพ เคตเคพเคชเคฐเคเคฐเฅเคคเฅเคฏเคพเคเฅ เคชเฅ
เคเฅเคเฅเคธ เคชเคนเคพ",
"view_org_packages": "เคฏเคพ เคธเคเคธเฅเคฅเฅเคเฅ เคชเฅ
เคเฅเคเฅเคธ เคชเคนเคพ"
- }
+ },
+ "instant_search": "เคคเคพเคคเฅเคเคพเคณ เคถเฅเคง",
+ "instant_search_on": "เคเคพเคฒเฅ",
+ "instant_search_off": "เคฌเคเคฆ",
+ "instant_search_turn_on": "เคเคพเคฒเฅ เคเคฐเคพ",
+ "instant_search_turn_off": "เคฌเคเคฆ เคเคฐเคพ",
+ "instant_search_advisory": "{label} {state} โ {action}"
},
"nav": {
"main_navigation": "เคฎเฅเคเฅเคฏ",
@@ -52,6 +87,32 @@
"links": "เคฒเคฟเคเค",
"tap_to_search": "เคถเฅเคงเคฃเฅเคฏเคพเคธเคพเค เฅ เคเฅ
เคช เคเคฐเคพ"
},
+ "blog": {
+ "title": "เคฌเฅเคฒเฅเค",
+ "heading": "เคฌเฅเคฒเฅเค",
+ "meta_description": "npmx เคธเคฎเฅเคฆเคพเคฏเคพเคเคกเฅเคจ เค
เคเคคเคฐเฅเคฆเฅเคทเฅเคเฅ เคเคฃเคฟ เค
เคฆเฅเคฏเคคเคจเฅ",
+ "author": {
+ "view_profile": "Bluesky เคตเคฐ {name} เคเฅ เคชเฅเคฐเฅเคซเคพเคเคฒ เคชเคนเคพ"
+ },
+ "draft_badge": "เคฎเคธเฅเคฆเคพ",
+ "draft_banner": "เคนเคพ เค
เคชเฅเคฐเคเคพเคถเคฟเคค เคฎเคธเฅเคฆเคพ เคเคนเฅ. เคคเฅ เค
เคชเฅเคฐเฅเคฃ เค
เคธเฅ เคถเคเคคเฅ เคเคฟเคเคตเคพ เคคเฅเคฏเคพเคค เคเฅเคเฅเคเฅ เคฎเคพเคนเคฟเคคเฅ เค
เคธเฅ เคถเคเคคเฅ.",
+ "no_posts": "เคเฅเคฃเคคเฅเคฏเคพเคนเฅ เคชเฅเคธเฅเค เคธเคพเคชเคกเคฒเฅเคฏเคพ เคจเคพเคนเฅเคค.",
+ "atproto": {
+ "view_on_bluesky": "Bluesky เคตเคฐ เคชเคนเคพ",
+ "reply_on_bluesky": "Bluesky เคตเคฐ เคเคคเฅเคคเคฐ เคฆเฅเคฏเคพ",
+ "likes_on_bluesky": "Bluesky เคตเคฐเฅเคฒ เคชเคธเคเคคเฅ",
+ "like_or_reply_on_bluesky": "เคนเฅ เคชเฅเคธเฅเค เคชเคธเคเคค เคเคฐเคพ เคเคฟเคเคตเคพ เคคเฅเคฎเคเฅ เคเคฟเคชเฅเคชเคฃเฅ Bluesky เคตเคฐ เคเฅเคกเคพ",
+ "no_comments_yet": "เค
เคเฅเคจ เคเฅเคฃเคคเฅเคฏเคพเคนเฅ เคเคฟเคชเฅเคชเคฃเฅเคฏเคพ เคจเคพเคนเฅเคค.",
+ "could_not_load_comments": "เคเคฟเคชเฅเคชเคฃเฅเคฏเคพ เคฒเฅเคก เคเคฐเคคเคพ เคเคฒเฅเคฏเคพ เคจเคพเคนเฅเคค.",
+ "comments": "เคเคฟเคชเฅเคชเคฃเฅเคฏเคพ",
+ "loading_comments": "เคเคฟเคชเฅเคชเคฃเฅเคฏเคพ เคฒเฅเคก เคเคฐเคค เคเคนเฅ...",
+ "updating": "เค
เคฆเฅเคฏเคคเคจเคฟเคค เคเคฐเคค เคเคนเฅ...",
+ "reply_count": "{count} เคเคคเฅเคคเคฐ | {count} เคเคคเฅเคคเคฐเฅ",
+ "like_count": "{count} เคชเคธเคเคคเฅ | {count} เคชเคธเคเคคเฅเคฏเคพ",
+ "repost_count": "{count} เคชเฅเคจเคฐเฅเคชเฅเคธเฅเค | {count} เคชเฅเคจเคฐเฅเคชเฅเคธเฅเคเฅเคธ",
+ "more_replies": "{count} เคเคฃเคเฅ เคเคคเฅเคคเคฐ... | {count} เคเคฃเคเฅ เคเคคเฅเคคเคฐเฅ..."
+ }
+ },
"settings": {
"title": "เคธเฅเคเคฟเคเคเฅเค",
"tagline": "เคคเฅเคฎเคเคพ npmx เค
เคจเฅเคญเคต เคธเคพเคจเฅเคเฅเคฒเคฟเคค เคเคฐเคพ",
@@ -59,23 +120,55 @@
"sections": {
"appearance": "เคฆเฅเคเคพเคตเคพ",
"display": "เคชเฅเคฐเคฆเคฐเฅเคถเคจ",
- "language": "เคญเคพเคทเคพ"
+ "search": "เคถเฅเคง เคตเฅเคถเคฟเคทเฅเคเฅเคฏเฅ",
+ "language": "เคญเคพเคทเคพ",
+ "keyboard_shortcuts": "เคเฅเคฌเฅเคฐเฅเคก เคถเฅเคฐเฅเคเคเค"
+ },
+ "data_source": {
+ "label": "เคกเฅเคเคพ เคธเฅเคฐเฅเคค",
+ "description": "npmx เคฒเคพ เคถเฅเคง เคกเฅเคเคพ เคเฅเค เฅเคจ เคฎเคฟเคณเคตเคพเคฏเคเคพ เคคเฅ เคจเคฟเคตเคกเคพ. เคธเฅเคตเคคเคเคคเฅเคฐ เคชเฅ
เคเฅเค เคชเฅเคทเฅเค เฅ เคจเฅเคนเคฎเฅ เคฅเฅเค npm เคจเฅเคเคฆเคฃเฅ เคตเคพเคชเคฐเคคเคพเคค.",
+ "npm": "npm เคจเฅเคเคฆเคฃเฅ",
+ "npm_description": "เคถเฅเคง, เคธเคเคธเฅเคฅเคพ เคเคฃเคฟ เคตเคพเคชเคฐเคเคฐเฅเคคเคพ เคธเฅเคเฅ เคฅเฅเค เค
เคงเคฟเคเฅเคค npm เคจเฅเคเคฆเคฃเฅเคคเฅเคจ เคเคฃเคคเฅ. เค
เคงเคฟเคเฅเคค, เคชเคฃ เคฅเฅเคกเฅ เคฎเคเคฆ เค
เคธเฅ เคถเคเคคเฅ.",
+ "algolia": "Algolia",
+ "algolia_description": "เคเคฒเคฆ เคถเฅเคง, เคธเคเคธเฅเคฅเคพ เคเคฃเคฟ เคตเคพเคชเคฐเคเคฐเฅเคคเคพ เคชเฅเคทเฅเค เคพเคเคธเคพเค เฅ Algolia เคตเคพเคชเคฐเคคเฅ."
},
+ "instant_search": "เคคเคพเคคเฅเคเคพเคณ เคถเฅเคง",
+ "instant_search_description": "เคถเฅเคง เคชเฅเคทเฅเค เคพเคตเคฐ เคจเฅเคคเฅ เคเคฃเคฟ เคคเฅเคฎเฅเคนเฅ เคเคพเคเคช เคเคฐเคคเคพเค เคชเคฐเคฟเคฃเคพเคฎ เค
เคฆเฅเคฏเคคเคจเคฟเคค เคเคฐเคคเฅ.",
"relative_dates": "เคธเคพเคชเฅเคเฅเคท เคคเคพเคฐเคเคพ",
"include_types": "เคธเฅเคฅเคพเคชเคจเฅเคค {'@'}types เคธเคฎเคพเคตเคฟเคทเฅเค เคเคฐเคพ",
"include_types_description": "เค
เคจเคเคพเคเคช เคเฅเคฒเฅเคฒเฅเคฏเคพ เคชเฅ
เคเฅเคเคธเคพเค เฅ เคธเฅเคฅเคพเคชเคจเคพ เคเคฆเฅเคถเคพเคค {'@'}types เคชเฅ
เคเฅเค เคเฅเคกเคพ",
"hide_platform_packages": "เคถเฅเคงเคพเคค เคชเฅเคฒเฅ
เคเคซเฅเคฐเฅเคฎ-เคตเคฟเคถเคฟเคทเฅเค เคชเฅ
เคเฅเคเฅเคธ เคฒเคชเคตเคพ",
"hide_platform_packages_description": "เคชเคฐเคฟเคฃเคพเคฎเคพเคเคฎเคงเฅเคจ {'@'}esbuild/linux-x64 เคธเคพเคฐเคเฅ เคฎเฅเคณ เคฌเคพเคฏเคจเคฐเฅ เคชเฅ
เคเฅเคเฅเคธ เคฒเคชเคตเคพ",
+ "enable_graph_pulse_loop": "เคฒเคเฅ เคเคฒเฅเคเคพเคตเคฐ เคชเคฒเฅเคธ เคชเฅเคฐเคญเคพเคตเคพเคเคพ เคฒเฅเคช เคธเคเฅเคทเคฎ เคเคฐเคพ",
+ "enable_graph_pulse_loop_description": "เคธเคพเคชเฅเคคเคพเคนเคฟเค เคกเคพเคเคจเคฒเฅเคก เคเคฒเฅเคเคพเคตเคฐ เคธเคคเคค เคชเคฒเฅเคธ เค
เฅ
เคจเคฟเคฎเฅเคถเคจ เคธเคเฅเคฐเคฟเคฏ เคเคฐเคพ. เคนเฅ เค
เฅ
เคจเคฟเคฎเฅเคถเคจ เคเคพเคนเฅ เคตเคพเคชเคฐเคเคฐเฅเคคเฅเคฏเคพเคเคธเคพเค เฅ เคตเคฟเคเคฒเคฟเคค เคเคฐเคฃเคพเคฐเฅ เค
เคธเฅ เคถเคเคคเฅ.",
"theme": "เคฅเฅเคฎ",
"theme_light": "เคซเคฟเคเค",
"theme_dark": "เคเคกเคฆ",
"theme_system": "เคธเคฟเคธเฅเคเคฎ",
"language": "เคญเคพเคทเคพ",
"help_translate": "npmx เคเฅ เคญเคพเคทเคพเคเคคเคฐ เคเคฐเคฃเฅเคฏเคพเคค เคฎเคฆเคค เคเคฐเคพ",
- "accent_colors": "เคเคเฅเคเคพเคฐเคฃ เคฐเคเค",
- "clear_accent": "เคเคเฅเคเคพเคฐเคฃ เคฐเคเค เคธเคพเคซ เคเคฐเคพ",
+ "translation_status": "เคเคพเคเคคเคฟเค เคญเคพเคทเคพเคเคคเคฐ เคธเฅเคฅเคฟเคคเฅ เคคเคชเคพเคธเคพ",
+ "accent_colors": {
+ "label": "เค
เฅ
เคเฅเคธเฅเคเค เคฐเคเค",
+ "sky": "เคเคเคพเคถเฅ",
+ "coral": "เคชเฅเคฐเคตเคพเคณ",
+ "amber": "เค
เคเคฌเคฐ",
+ "emerald": "เคชเคพเคเฅ",
+ "violet": "เคเคพเคเคญเคณเคพ",
+ "magenta": "เคฎเฅ
เคเฅเคเคเคพ"
+ },
+ "clear_accent": "เค
เฅ
เคเฅเคธเฅเคเค เคฐเคเค เคธเคพเคซ เคเคฐเคพ",
"translation_progress": "เคญเคพเคทเคพเคเคคเคฐ เคชเฅเคฐเคเคคเฅ",
- "background_themes": "เคชเคพเคฐเฅเคถเฅเคตเคญเฅเคฎเฅ เคเคเคพ"
+ "background_themes": {
+ "label": "เคชเคพเคฐเฅเคถเฅเคตเคญเฅเคฎเฅ เคเคเคพ",
+ "neutral": "เคคเคเคธเฅเคฅ",
+ "stone": "เคฆเคเคกเฅ",
+ "zinc": "เคเคฟเคเค",
+ "slate": "เคธเฅเคฒเฅเค",
+ "black": "เคเคพเคณเคพ"
+ },
+ "keyboard_shortcuts_enabled": "เคเฅเคฌเฅเคฐเฅเคก เคถเฅเคฐเฅเคเคเค เคธเคเฅเคทเคฎ เคเคฐเคพ",
+ "keyboard_shortcuts_enabled_description": "เคเคฐ เคเฅเคฌเฅเคฐเฅเคก เคถเฅเคฐเฅเคเคเค เคเคคเคฐ เคฌเฅเคฐเคพเคเคเคฐ เคเคฟเคเคตเคพ เคธเคฟเคธเฅเคเคฎ เคถเฅเคฐเฅเคเคเคเคถเฅ เคธเคเคเคฐเฅเคท เคเคฐเคค เค
เคธเคคเฅเคฒ เคคเคฐ เคคเฅ เค
เคเฅเคทเคฎ เคเคฐเคคเคพ เคฏเฅเคคเคพเคค"
},
"i18n": {
"missing_keys": "{count} เคญเคพเคทเคพเคเคคเคฐ เคเคพเคฏเคฌ เคเคนเฅ | {count} เคญเคพเคทเคพเคเคคเคฐเฅ เคเคพเคฏเคฌ เคเคนเฅเคค",
@@ -85,6 +178,13 @@
"edit_on_github": "GitHub เคตเคฐ เคธเคเคชเคพเคฆเคฟเคค เคเคฐเคพ",
"view_guide": "เคญเคพเคทเคพเคเคคเคฐ เคฎเคพเคฐเฅเคเคฆเคฐเฅเคถเค"
},
+ "error": {
+ "401": "เค
เคจเคงเคฟเคเฅเคค",
+ "404": "เคชเฅเคทเฅเค เคธเคพเคชเคกเคฒเฅ เคจเคพเคนเฅ",
+ "500": "เค
เคเคคเคฐเฅเคเคค เคธเคฐเฅเคตเฅเคนเคฐ เคคเฅเคฐเฅเคเฅ",
+ "503": "เคธเฅเคตเคพ เคเคชเคฒเคฌเฅเคง เคจเคพเคนเฅ",
+ "default": "เคเคพเคนเฅเคคเคฐเฅ เคเฅเค เคเคพเคฒเฅ"
+ },
"common": {
"loading": "เคฒเฅเคก เคเคฐเคค เคเคนเฅ...",
"loading_more": "เค
เคงเคฟเค เคฒเฅเคก เคเคฐเคค เคเคนเฅ...",
@@ -92,6 +192,7 @@
"end_of_results": "เคชเคฐเคฟเคฃเคพเคฎ เคธเคเคชเคฒเฅ",
"try_again": "เคชเฅเคจเฅเคนเคพ เคชเฅเคฐเคฏเคคเฅเคจ เคเคฐเคพ",
"close": "เคฌเคเคฆ เคเคฐเคพ",
+ "or": "เคเคฟเคเคตเคพ",
"retry": "เคชเฅเคจเฅเคนเคพ เคชเฅเคฐเคฏเคคเฅเคจ เคเคฐเคพ",
"copy": "เคเฅเคชเฅ เคเคฐเคพ",
"copied": "เคเฅเคชเฅ เคเคพเคฒเฅ!",
@@ -106,8 +207,42 @@
"members": "เคธเคฆเคธเฅเคฏ"
},
"scroll_to_top": "เคตเคฐ เคธเฅเคเฅเคฐเฅเคฒ เคเคฐเคพ",
+ "cancel": "เคฐเคฆเฅเคฆ เคเคฐเคพ",
+ "save": "เคเคคเคจ เคเคฐเคพ",
+ "edit": "เคธเคเคชเคพเคฆเคฟเคค เคเคฐเคพ",
+ "error": "เคคเฅเคฐเฅเคเฅ",
"view_on": {
- "npm": "npm เคตเคฐ เคชเคนเคพ"
+ "npm": "npm เคตเคฐ เคชเคนเคพ",
+ "github": "GitHub เคตเคฐ เคชเคนเคพ",
+ "gitlab": "GitLab เคตเคฐ เคชเคนเคพ",
+ "bitbucket": "Bitbucket เคตเคฐ เคชเคนเคพ",
+ "codeberg": "Codeberg เคตเคฐ เคชเคนเคพ",
+ "git_repo": "Git เคฐเคฟเคชเฅเคเคฟเคเคฐเฅเคตเคฐ เคชเคนเคพ",
+ "forgejo": "Forgejo เคตเคฐ เคชเคนเคพ",
+ "gitea": "Gitea เคตเคฐ เคชเคนเคพ",
+ "gitee": "Gitee เคตเคฐ เคชเคนเคพ",
+ "radicle": "Radicle เคตเคฐ เคชเคนเคพ",
+ "sourcehut": "SourceHut เคตเคฐ เคชเคนเคพ",
+ "tangled": "Tangled เคตเคฐ เคชเคนเคพ"
+ },
+ "collapse": "เคเคเฅเคเคเคฟเคค เคเคฐเคพ",
+ "expand": "เคตเคฟเคธเฅเคคเฅเคค เคเคฐเคพ"
+ },
+ "profile": {
+ "display_name": "เคชเฅเคฐเคฆเคฐเฅเคถเคจ เคจเคพเคต",
+ "description": "เคตเคฐเฅเคฃเคจ",
+ "no_description": "เคตเคฐเฅเคฃเคจ เคจเคพเคนเฅ",
+ "website": "เคตเฅเคฌเคธเคพเคเค",
+ "website_placeholder": "https://example.com",
+ "likes": "เคชเคธเคเคคเฅ",
+ "seo_title": "{handle} - npmx",
+ "seo_description": "{handle} เคฆเฅเคตเคพเคฐเฅ npmx เคชเฅเคฐเฅเคซเคพเคเคฒ",
+ "not_found": "เคชเฅเคฐเฅเคซเคพเคเคฒ เคธเคพเคชเคกเคฒเฅ เคจเคพเคนเฅ",
+ "not_found_message": "{handle} เคธเคพเค เฅเคเฅ เคชเฅเคฐเฅเคซเคพเคเคฒ เคธเคพเคชเคกเคฒเฅ เคจเคพเคนเฅ.",
+ "invite": {
+ "message": "เคคเฅ เค
เคเฅเคจ npmx เคตเคพเคชเคฐเคค เคเคนเฅเคค เค
เคธเฅ เคฆเคฟเคธเคค เคจเคพเคนเฅ. เคคเฅเคฏเคพเคเคจเคพ เคฏเคพเคฌเคฆเฅเคฆเคฒ เคธเคพเคเคเคพเคฏเคเฅ เคเคพ?",
+ "share_button": "Bluesky เคตเคฐ เคถเฅเค
เคฐ เคเคฐเคพ",
+ "compose_text": "เค
เคนเฅ {'@'}{handle}! เคคเฅเคฎเฅเคนเฅ เค
เคเฅเคจ npmx.dev เคชเคพเคนเคฟเคฒเฅ เคเคนเฅ เคเคพ? เคนเคพ npm เคจเฅเคเคฆเคฃเฅเคธเคพเค เฅ เคเคฒเคฆ, เคเคงเฅเคจเคฟเค เคเคฃเคฟ เคฎเฅเคเฅเคค-เคธเฅเคฐเฅเคค เคฌเฅเคฐเคพเคเคเคฐ เคเคนเฅ.\nhttps://npmx.dev"
}
},
"package": {
@@ -118,19 +253,28 @@
"navigation": "เคชเฅ
เคเฅเค",
"copy_name": "เคชเฅ
เคเฅเค เคจเคพเคต เคเฅเคชเฅ เคเคฐเคพ",
"deprecation": {
- "package": "เคนเฅ เคชเฅ
เคเฅเค เคจเคพเคชเคธเคเคค เคเฅเคฒเฅ เคเฅเคฒเฅ เคเคนเฅ.",
- "version": "เคนเฅ เคเคตเฅเคคเฅเคคเฅ เคจเคพเคชเคธเคเคค เคเฅเคฒเฅ เคเฅเคฒเฅ เคเคนเฅ.",
+ "package": "เคนเฅ เคชเฅ
เคเฅเค เคเคพเคฒเคฌเคพเคนเฅเคฏ เคเฅเคทเคฟเคค เคเฅเคฒเฅ เคเฅเคฒเฅ เคเคนเฅ.",
+ "version": "เคนเฅ เคเคตเฅเคคเฅเคคเฅ เคเคพเคฒเคฌเคพเคนเฅเคฏ เคเฅเคทเคฟเคค เคเฅเคฒเฅ เคเฅเคฒเฅ เคเคนเฅ.",
"no_reason": "เคเฅเคฃเคคเฅเคนเฅ เคเคพเคฐเคฃ เคชเฅเคฐเคฆเคพเคจ เคเฅเคฒเฅเคฒเฅ เคจเคพเคนเฅ"
},
+ "size_increase": {
+ "title_size": "v{version} เคชเคพเคธเฅเคจ เคเคเคพเคฐเคพเคค เคฒเคเฅเคทเคฃเฅเคฏ เคตเคพเคข",
+ "title_deps": "v{version} เคชเคพเคธเฅเคจ เคจเคฟเคฐเฅเคญเคฐเคคเคพเคเคเฅเคฏเคพ เคธเคเคเฅเคฏเฅเคค เคฒเคเฅเคทเคฃเฅเคฏ เคตเคพเคข",
+ "title_both": "v{version} เคชเคพเคธเฅเคจ เคเคเคพเคฐ เคเคฃเคฟ เคจเคฟเคฐเฅเคญเคฐเคคเคพเคเคเฅเคฏเคพ เคธเคเคเฅเคฏเฅเคค เคฒเคเฅเคทเคฃเฅเคฏ เคตเคพเคข",
+ "size": "เคเคเคธเฅเคเฅเคฒ เคเคเคพเคฐ {percent} เคจเฅ เคตเคพเคขเคฒเคพ ({size} เคจเฅ เคฎเฅเค เคพ)",
+ "deps": "{count} เค
เคงเคฟเค เคจเคฟเคฐเฅเคญเคฐเคคเคพ"
+ },
"replacement": {
- "title": "เคคเฅเคฎเฅเคนเคพเคฒเคพ เคฏเคพ เคจเคฟเคฐเฅเคญเคฐเคคเฅเคเฅ เคเคฐเค เคจเคธเฅ เคถเคเคคเฅ.",
+ "title": "เคเคฆเคพเคเคฟเคค เคคเฅเคฎเฅเคนเคพเคฒเคพ เคฏเคพ เคจเคฟเคฐเฅเคญเคฐเคคเฅเคเฅ เคเคฐเค เคจเคธเฅเคฒ.",
"native": "เคนเฅ {replacement} เคธเคน เคฌเคฆเคฒเคฒเฅ เคเคพเค เคถเคเคคเฅ, Node {nodeVersion} เคชเคพเคธเฅเคจ เคเคชเคฒเคฌเฅเคง เคเคนเฅ.",
"simple": "{community} เคจเฅ เคฏเคพ เคชเฅ
เคเฅเคเคฒเคพ เค
เคจเคพเคตเคถเฅเคฏเค เคฎเฅเคนเคฃเฅเคจ เคเคฟเคจเฅเคนเคพเคเคเคฟเคค เคเฅเคฒเฅ เคเคนเฅ, เคธเคฒเฅเคฒเฅเคฏเคพเคธเคน: {replacement}.",
"documented": "{community} เคจเฅ เคฏเคพ เคชเฅ
เคเฅเคเคฒเคพ เค
เคงเคฟเค เคเคพเคฐเฅเคฏเคเฅเคทเคฎ เคชเคฐเฅเคฏเคพเคฏ เค
เคธเคฒเฅเคฏเคพเคจเฅ เคเคฟเคจเฅเคนเคพเคเคเคฟเคค เคเฅเคฒเฅ เคเคนเฅ.",
"none": "เคนเฅ เคชเฅ
เคเฅเค เคฏเคพเคชเฅเคขเฅ เคเคตเคถเฅเคฏเค เคจเคพเคนเฅ เค
เคธเฅ เคเคฟเคจเฅเคนเคพเคเคเคฟเคค เคเฅเคฒเฅ เคเฅเคฒเฅ เคเคนเฅ, เคเคฃเคฟ เคคเฅเคฏเคพเคเฅ เคเคพเคฐเฅเคฏเคเฅเคทเคฎเคคเคพ เคธเคฐเฅเคต เคเคเคเคฟเคจเคพเคเคฎเคงเฅเคฏเฅ เคฎเฅเคณเคคเค เคเคชเคฒเคฌเฅเคง เค
เคธเฅ เคถเคเคคเฅ.",
"learn_more": "เค
เคงเคฟเค เคเคพเคฃเฅเคจ เคเฅเคฏเคพ",
+ "learn_more_above": "เคตเคฐ เค
เคงเคฟเค เคเคพเคฃเฅเคจ เคเฅเคฏเคพ.",
"mdn": "MDN",
- "community": "เคธเคฎเฅเคฆเคพเคฏ"
+ "community": "เคธเคฎเฅเคฆเคพเคฏ",
+ "consider_no_dep": "+ เคจเคฟเคฐเฅเคญเคฐเคคเคพ เคจเคเฅ เคเคพ?"
},
"stats": {
"license": "เคชเคฐเคตเคพเคจเคพ",
@@ -161,9 +305,11 @@
"refs": "{count} เคธเคเคฆเคฐเฅเคญ | {count} เคธเคเคฆเคฐเฅเคญ",
"assets": "{count} เคฎเคพเคฒเคฎเคคเฅเคคเคพ | {count} เคฎเคพเคฒเคฎเคคเฅเคคเคพ"
},
- "view_source": "เคธเฅเคฐเฅเคค เคชเคนเคพ"
+ "view_source": "เคธเฅเคฐเฅเคค เคชเคนเคพ",
+ "skills_cli": "Skills CLI"
},
"links": {
+ "main": "เคฎเฅเคเฅเคฏ",
"repo": "เคฐเคฟเคชเฅ",
"homepage": "เคนเฅเคฎเคชเฅเค",
"issues": "เคธเคฎเคธเฅเคฏเคพ",
@@ -171,17 +317,30 @@
"code": "เคเฅเคก",
"docs": "เคฆเคธเฅเคคเคเคตเค",
"fund": "เคจเคฟเคงเฅ",
- "compare": "เคคเฅเคฒเคจเคพ เคเคฐเคพ"
+ "compare": "เคคเฅเคฒเคจเคพ เคเคฐเคพ",
+ "compare_this_package": "เคฏเคพ เคชเฅ
เคเฅเคเคเฅ เคคเฅเคฒเคจเคพ เคเคฐเคพ"
+ },
+ "likes": {
+ "like": "เคนเฅ เคชเฅ
เคเฅเค เคชเคธเคเคค เคเคฐเคพ",
+ "unlike": "เคฏเคพ เคชเฅ
เคเฅเคเคตเคฐเฅเคฒ เคชเคธเคเคคเฅ เคเคพเคขเคพ"
},
- "likes": {},
"docs": {
+ "contents": "เค
เคจเฅเคเฅเคฐเคฎเคฃเคฟเคเคพ",
+ "default_not_available": "เคฏเคพ เคเคตเฅเคคเฅเคคเฅเคธเคพเค เฅ เคฆเคธเฅเคคเคเคตเค เคเคชเคฒเคฌเฅเคง เคจเคพเคนเฅเคค.",
"not_available": "เคฆเคธเฅเคคเคเคตเค เคเคชเคฒเคฌเฅเคง เคจเคพเคนเฅเคค",
- "not_available_detail": "เคเคฎเฅเคนเฅ เคฏเคพ เคเคตเฅเคคเฅเคคเฅเคธเคพเค เฅ เคฆเคธเฅเคคเคเคตเค เคคเคฏเคพเคฐ เคเคฐเฅ เคถเคเคฒเฅ เคจเคพเคนเฅ."
+ "not_available_detail": "เคเคฎเฅเคนเฅ เคฏเคพ เคเคตเฅเคคเฅเคคเฅเคธเคพเค เฅ เคฆเคธเฅเคคเคเคตเค เคคเคฏเคพเคฐ เคเคฐเฅ เคถเคเคฒเฅ เคจเคพเคนเฅ.",
+ "page_title": "API เคฆเคธเฅเคคเคเคตเค - npmx",
+ "page_title_name": "{name} เคฆเคธเฅเคคเคเคตเค - npmx",
+ "page_title_version": "{name} เคฆเคธเฅเคคเคเคตเค - npmx",
+ "og_title": "{name} - เคฆเคธเฅเคคเคเคตเค",
+ "view_package": "เคชเฅ
เคเฅเค เคชเคนเคพ"
},
"get_started": {
"title": "เคธเฅเคฐเฅเคตเคพเคค เคเคฐเคพ",
"pm_label": "เคชเฅ
เคเฅเค เคฎเฅ
เคจเฅเคเคฐ",
"copy_command": "เคธเฅเคฅเคพเคชเคจเคพ เคเคฆเฅเคถ เคเฅเคชเฅ เคเคฐเคพ",
+ "copy_dev_command": "เคกเฅเคต เคเคเคธเฅเคเฅเคฒ เคเคฎเคพเคเคก เคเฅเคชเฅ เคเคฐเคพ",
+ "dev_dependency_hint": "เคนเฅ เคธเคนเคธเคพ dev dependency เคฎเฅเคนเคฃเฅเคจ เคเคจเฅเคธเฅเคเฅเคฒ เคเฅเคฒเฅ เคเคพเคคเฅ",
"view_types": "{package} เคชเคนเคพ"
},
"create": {
@@ -194,136 +353,1082 @@
"locally": "เคธเฅเคฅเคพเคจเคฟเคเคฐเคฟเคคเฅเคฏเคพ เคเคพเคฒเคตเคพ"
},
"readme": {
- "callout": {}
+ "title": "เคฐเฅเคกเคฎเฅ",
+ "no_readme": "เคเฅเคฃเคคเฅเคนเฅ README เคเคชเคฒเคฌเฅเคง เคจเคพเคนเฅ.",
+ "toc_title": "เคฐเฅเคชเคฐเฅเคทเคพ",
+ "callout": {
+ "note": "เคเฅเคช",
+ "tip": "เคธเฅเคเคจเคพ",
+ "important": "เคฎเคนเคคเฅเคคเฅเคตเคพเคเฅ",
+ "warning": "เคเคถเคพเคฐเคพ",
+ "caution": "เคธเคพเคตเคงเคพเคจ"
+ },
+ "copy_as_markdown": "README Markdown เคฎเฅเคนเคฃเฅเคจ เคเฅเคชเฅ เคเคฐเคพ"
+ },
+ "provenance_section": {
+ "title": "เคชเฅเคฐเฅเคตเฅเคนเคจเคจเฅเคธ",
+ "built_and_signed_on": "{provider} เคตเคฐ เคคเคฏเคพเคฐ เคเคฃเคฟ เคธเฅเคตเคพเคเฅเคทเคฐเฅเคค",
+ "view_build_summary": "เคฌเคฟเคฒเฅเคก เคธเคพเคฐเคพเคเคถ เคชเคนเคพ",
+ "source_commit": "เคธเฅเคฐเฅเคค เคเคฎเคฟเค",
+ "build_file": "เคฌเคฟเคฒเฅเคก เคซเคพเคเคฒ",
+ "public_ledger": "เคธเคพเคฐเฅเคตเคเคจเคฟเค เคฒเฅเคเคฐ",
+ "transparency_log_entry": "เคเฅเคฐเคพเคจเฅเคธเคชเคฐเคจเฅเคธเฅ เคฒเฅเค เคจเฅเคเคฆ",
+ "view_more_details": "เค
เคงเคฟเค เคคเคชเคถเฅเคฒ เคชเคนเคพ",
+ "error_loading": "เคชเฅเคฐเฅเคตเฅเคนเคจเคจเฅเคธ เคคเคชเคถเฅเคฒ เคฒเฅเคก เคเคฐเคฃเฅเคฏเคพเคค เค
เคฏเคถเคธเฅเคตเฅ"
+ },
+ "security_downgrade": {
+ "title": "เคตเคฟเคถเฅเคตเคพเคธ เคชเคพเคคเคณเฅ เคเค",
+ "description_to_none_provenance": "เคนเฅ เคเคตเฅเคคเฅเคคเฅ {provenance} เคถเคฟเคตเคพเคฏ เคชเฅเคฐเคเคพเคถเคฟเคค เคเคพเคฒเฅ.",
+ "description_to_none_trustedPublisher": "เคนเฅ เคเคตเฅเคคเฅเคคเฅ {trustedPublishing} เคถเคฟเคตเคพเคฏ เคชเฅเคฐเคเคพเคถเคฟเคค เคเคพเคฒเฅ.",
+ "description_to_provenance_trustedPublisher": "เคนเฅ เคเคตเฅเคคเฅเคคเฅ {provenance} เคตเคพเคชเคฐเคคเฅ เคชเคฃ {trustedPublishing} เคจเคพเคนเฅ.",
+ "fallback_install_provenance": "เคเคเคธเฅเคเฅเคฒ เคเคฎเคพเคเคกเฅเคธ {version} เคตเคฐ เคชเคฟเคจ เคเฅเคฒเฅเคฏเคพ เคเคนเฅเคค, เคเฅ เคชเฅเคฐเฅเคตเฅเคนเคจเคจเฅเคธ เค
เคธเคฒเฅเคฒเฅ เคถเฅเคตเคเคเฅ เคเคตเฅเคคเฅเคคเฅ เคเคนเฅ.",
+ "fallback_install_trustedPublisher": "เคเคเคธเฅเคเฅเคฒ เคเคฎเคพเคเคกเฅเคธ {version} เคตเคฐ เคชเคฟเคจ เคเฅเคฒเฅเคฏเคพ เคเคนเฅเคค, เคเฅ trusted publishing เค
เคธเคฒเฅเคฒเฅ เคถเฅเคตเคเคเฅ เคเคตเฅเคคเฅเคคเฅ เคเคนเฅ.",
+ "provenance_link_text": "เคชเฅเคฐเฅเคตเฅเคนเคจเคจเฅเคธ",
+ "trusted_publishing_link_text": "trusted publishing"
},
- "provenance_section": {},
"keywords_title": "เคเฅเคตเคฐเฅเคก",
"compatibility": "เคธเฅเคธเคเคเคคเคคเคพ",
- "card": {},
- "versions": {},
- "dependencies": {},
- "peer_dependencies": {},
- "optional_dependencies": {},
- "maintainers": {},
- "downloads": {},
- "install_scripts": {},
- "playgrounds": {},
- "metrics": {},
- "license": {},
+ "card": {
+ "publisher": "เคชเฅเคฐเคเคพเคถเค",
+ "published": "เคชเฅเคฐเคเคพเคถเคฟเคค",
+ "weekly_downloads": "เคธเคพเคชเฅเคคเคพเคนเคฟเค เคกเคพเคเคจเคฒเฅเคกเฅเคธ",
+ "keywords": "เคเฅเคตเคฐเฅเคกเฅเคธ",
+ "license": "เคชเคฐเคตเคพเคจเคพ",
+ "select": "เคชเฅ
เคเฅเค เคจเคฟเคตเคกเคพ",
+ "select_maximum": "เคเคพเคธเฅเคคเฅเคค เคเคพเคธเฅเคค {count} เคชเฅ
เคเฅเค เคจเคฟเคตเคกเคคเคพ เคฏเฅเคคเคพเคค"
+ },
+ "versions": {
+ "title": "เคเคตเฅเคคเฅเคคเฅเคฏเคพ",
+ "collapse": "{tag} เคธเคเคเฅเคทเคฟเคชเฅเคค เคเคฐเคพ",
+ "expand": "{tag} เคตเคฟเคธเฅเคคเฅเคค เคเคฐเคพ",
+ "collapse_other": "เคเคคเคฐ เคเคตเฅเคคเฅเคคเฅเคฏเคพ เคธเคเคเฅเคทเคฟเคชเฅเคค เคเคฐเคพ",
+ "expand_other": "เคเคคเคฐ เคเคตเฅเคคเฅเคคเฅเคฏเคพ เคตเคฟเคธเฅเคคเฅเคค เคเคฐเคพ",
+ "collapse_major": "เคชเฅเคฐเคฎเฅเค {major} เคธเคเคเฅเคทเคฟเคชเฅเคค เคเคฐเคพ",
+ "expand_major": "เคชเฅเคฐเคฎเฅเค {major} เคตเคฟเคธเฅเคคเฅเคค เคเคฐเคพ",
+ "other_versions": "เคเคคเคฐ เคเคตเฅเคคเฅเคคเฅเคฏเคพ",
+ "more_tagged": "เคเคฃเคเฅ {count} เคเฅ
เค เคเฅเคฒเฅเคฒเฅเคฏเคพ",
+ "all_covered": "เคตเคฐเฅเคฒ เคเฅ
เคเฅเคธเคฎเฅเคณเฅ เคธเคฐเฅเคต เคเคตเฅเคคเฅเคคเฅเคฏเคพ เคธเคฎเคพเคตเคฟเคทเฅเค เคเคนเฅเคค",
+ "deprecated_title": "{version} (เค
เคชเฅเคฐเคเคฒเคฟเคค)",
+ "view_all": "{count} เคเคตเฅเคคเฅเคคเฅ เคชเคนเคพ | เคธเคฐเฅเคต {count} เคเคตเฅเคคเฅเคคเฅเคฏเคพ เคชเคนเคพ",
+ "view_all_versions": "เคธเคฐเฅเคต เคเคตเฅเคคเฅเคคเฅเคฏเคพ เคชเคนเคพ",
+ "distribution_title": "Semver เคเค",
+ "distribution_modal_title": "เคเคตเฅเคคเฅเคคเฅเคฏเคพ",
+ "distribution_range_date_same_year": "{from} เคคเฅ {to}, {endYear}",
+ "distribution_range_date_multiple_years": "{from}, {startYear} เคคเฅ {to}, {endYear}",
+ "grouping_major": "เคชเฅเคฐเคฎเฅเค",
+ "grouping_minor": "เคฒเคเฅ",
+ "grouping_versions_title": "เคเคตเฅเคคเฅเคคเฅเคฏเคพ",
+ "grouping_versions_about": "เคเคตเฅเคคเฅเคคเฅ เคเคเคพเคเคฌเคฆเฅเคฆเคฒ",
+ "grouping_versions_all": "เคธเคฐเฅเคต",
+ "grouping_versions_only_recent": "เคซเคเฅเคค เค
เคฒเฅเคเคกเคเฅเคฏเคพ",
+ "grouping_usage_title": "เคตเคพเคชเคฐ",
+ "grouping_usage_about": "เคตเคพเคชเคฐ เคเคเคพเคเคฌเคฆเฅเคฆเคฒ",
+ "grouping_usage_all": "เคธเคฐเฅเคต",
+ "grouping_usage_most_used": "เคธเคฐเฅเคตเคพเคงเคฟเค เคตเคพเคชเคฐเคฒเฅเคฒเฅ",
+ "recent_versions_only_tooltip": "เคซเคเฅเคค เคฎเคพเคเฅเคฒ เคตเคฐเฅเคทเคพเคค เคชเฅเคฐเคเคพเคถเคฟเคค เคเคพเคฒเฅเคฒเฅเคฏเคพ เคเคตเฅเคคเฅเคคเฅเคฏเคพ เคฆเคพเคเคตเคพ.",
+ "show_low_usage_tooltip": "เคเคเฅเคฃ เคกเคพเคเคจเคฒเฅเคกเฅเคธเคเฅเคฏเคพ 1% เคชเฅเคเฅเคทเคพ เคเคฎเฅ เค
เคธเคฒเฅเคฒเฅ เคเคตเฅเคคเฅเคคเฅ เคเค เคธเคฎเคพเคตเคฟเคทเฅเค เคเคฐเคพ.",
+ "y_axis_label": "เคกเคพเคเคจเคฒเฅเคกเฅเคธ",
+ "filter_placeholder": "semver เคจเฅ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ (เคเคฆเคพ. ^3.0.0)",
+ "filter_invalid": "เค
เคตเฅเคง semver เคถเฅเคฐเฅเคฃเฅ",
+ "filter_help": "Semver เคถเฅเคฐเฅเคฃเฅ เคซเคฟเคฒเฅเคเคฐ เคฎเคฆเคค",
+ "filter_tooltip": "{link} เคตเคพเคชเคฐเฅเคจ เคเคตเฅเคคเฅเคคเฅเคฏเคพ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ. เคเคฆเคพเคนเคฐเคฃเคพเคฐเฅเคฅ, ^3.0.0 เคธเคฐเฅเคต 3.x เคเคตเฅเคคเฅเคคเฅเคฏเคพ เคฆเคพเคเคตเคคเฅ.",
+ "filter_tooltip_link": "semver เคถเฅเคฐเฅเคฃเฅ",
+ "no_matches": "เคฏเคพ เคถเฅเคฐเฅเคฃเฅเคถเฅ เคเฅเคณเคฃเคพเคฐเฅ เคเฅเคฃเคคเฅเคนเฅ เคเคตเฅเคคเฅเคคเฅ เคจเคพเคนเฅ",
+ "copy_alt": {
+ "per_version_analysis": "{version} เคเคตเฅเคคเฅเคคเฅ {downloads} เคตเฅเคณเคพ เคกเคพเคเคจเคฒเฅเคก เคเคพเคฒเฅ",
+ "general_description": "{package_name} เคชเฅ
เคเฅเคเคเฅเคฏเคพ {versions_count} {semver_grouping_mode} เคเคตเฅเคคเฅเคคเฅเคฏเคพเคเคธเคพเค เฅ, {date_range_label}, {first_version} เคเคตเฅเคคเฅเคคเฅเคชเคพเคธเฅเคจ {last_version} เคเคตเฅเคคเฅเคคเฅเคชเคฐเฅเคฏเคเคคเคเฅ เคชเฅเคฐเคคเคฟ-เคเคตเฅเคคเฅเคคเฅ เคกเคพเคเคจเคฒเฅเคกเฅเคธ เคฆเคพเคเคตเคฃเคพเคฐเคพ เคฌเคพเคฐ เคเคพเคฐเฅเค. เคธเคฐเฅเคตเคพเคงเคฟเค เคกเคพเคเคจเคฒเฅเคก เคเคพเคฒเฅเคฒเฅ เคเคตเฅเคคเฅเคคเฅ {max_downloaded_version} เค
เคธเฅเคจ เคคเคฟเคเฅ {max_version_downloads} เคกเคพเคเคจเคฒเฅเคกเฅเคธ เคเคนเฅเคค. {per_version_analysis}. {watermark}."
+ },
+ "page_title": "เคเคตเฅเคคเฅเคคเฅ เคเคคเคฟเคนเคพเคธ",
+ "current_tags": "เคธเคงเฅเคฏเคพเคเฅ เคเฅ
เคเฅเคธ",
+ "version_filter_placeholder": "เคเคตเฅเคคเฅเคคเฅเคฏเคพ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพโฆ",
+ "version_filter_label": "เคเคตเฅเคคเฅเคคเฅเคฏเคพ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ",
+ "no_match_filter": "{filter} เคถเฅ เคเฅเคณเคฃเคพเคฐเฅ เคเฅเคฃเคคเฅเคนเฅ เคเคตเฅเคคเฅเคคเฅ เคจเคพเคนเฅ"
+ },
+ "dependencies": {
+ "title": "{count} เคจเคฟเคฐเฅเคญเคฐเคคเคพ | {count} เคจเคฟเคฐเฅเคญเคฐเคคเคพ",
+ "list_label": "เคชเฅ
เคเฅเค เคจเคฟเคฐเฅเคญเคฐเคคเคพ",
+ "show_all": "{count} เคจเคฟเคฐเฅเคญเคฐเคคเคพ เคฆเคพเคเคตเคพ | เคธเคฐเฅเคต {count} เคจเคฟเคฐเฅเคญเคฐเคคเคพ เคฆเคพเคเคตเคพ",
+ "optional": "เคเคเฅเคเคฟเค",
+ "view_vulnerabilities": "เค
เคธเฅเคฐเคเฅเคทเคพ เคชเคนเคพ",
+ "outdated_major": "{count} เคชเฅเคฐเคฎเฅเค เคเคตเฅเคคเฅเคคเฅ เคฎเคพเคเฅ (เคจเคตเฅเคจเคคเคฎ: {latest}) | {count} เคชเฅเคฐเคฎเฅเค เคเคตเฅเคคเฅเคคเฅเคฏเคพ เคฎเคพเคเฅ (เคจเคตเฅเคจเคคเคฎ: {latest})",
+ "outdated_minor": "{count} เคฒเคเฅ เคเคตเฅเคคเฅเคคเฅ เคฎเคพเคเฅ (เคจเคตเฅเคจเคคเคฎ: {latest}) | {count} เคฒเคเฅ เคเคตเฅเคคเฅเคคเฅเคฏเคพ เคฎเคพเคเฅ (เคจเคตเฅเคจเคคเคฎ: {latest})",
+ "outdated_patch": "เคชเฅ
เค เค
เคฆเฅเคฏเคคเคจ เคเคชเคฒเคฌเฅเคง (เคจเคตเฅเคจเคคเคฎ: {latest})",
+ "has_replacement": "เคฏเคพ เคจเคฟเคฐเฅเคญเคฐเคคเฅเคธเคพเค เฅ เคชเคฐเฅเคฏเคพเคฏเฅ เคธเฅเคเคจเคพ เคเคนเฅเคค",
+ "vulnerabilities_count": "{count} เค
เคธเฅเคฐเคเฅเคทเคพ | {count} เค
เคธเฅเคฐเคเฅเคทเคพ"
+ },
+ "peer_dependencies": {
+ "title": "{count} เคชเฅเค
เคฐ เคจเคฟเคฐเฅเคญเคฐเคคเคพ | {count} เคชเฅเค
เคฐ เคจเคฟเคฐเฅเคญเคฐเคคเคพ",
+ "list_label": "เคชเฅ
เคเฅเค เคชเฅเค
เคฐ เคจเคฟเคฐเฅเคญเคฐเคคเคพ",
+ "show_all": "{count} เคชเฅเค
เคฐ เคจเคฟเคฐเฅเคญเคฐเคคเคพ เคฆเคพเคเคตเคพ | เคธเคฐเฅเคต {count} เคชเฅเค
เคฐ เคจเคฟเคฐเฅเคญเคฐเคคเคพ เคฆเคพเคเคตเคพ"
+ },
+ "optional_dependencies": {
+ "title": "{count} เคเคเฅเคเคฟเค เคจเคฟเคฐเฅเคญเคฐเคคเคพ | {count} เคเคเฅเคเคฟเค เคจเคฟเคฐเฅเคญเคฐเคคเคพ",
+ "list_label": "เคชเฅ
เคเฅเค เคเคเฅเคเคฟเค เคจเคฟเคฐเฅเคญเคฐเคคเคพ",
+ "show_all": "{count} เคเคเฅเคเคฟเค เคจเคฟเคฐเฅเคญเคฐเคคเคพ เคฆเคพเคเคตเคพ | เคธเคฐเฅเคต {count} เคเคเฅเคเคฟเค เคจเคฟเคฐเฅเคญเคฐเคคเคพ เคฆเคพเคเคตเคพ"
+ },
+ "maintainers": {
+ "title": "เคฆเฅเคเคญเคพเคฒเคเคฐเฅเคคเฅ",
+ "list_label": "เคชเฅ
เคเฅเค เคฆเฅเคเคญเคพเคฒเคเคฐเฅเคคเฅ",
+ "you": "(เคคเฅเคฎเฅเคนเฅ)",
+ "via": "{teams} เคฎเคพเคฐเฅเคซเคค",
+ "remove_owner": "{name} เคฒเคพ เคฎเคพเคฒเค เคฎเฅเคนเคฃเฅเคจ เคเคพเคขเฅเคจ เคเคพเคเคพ",
+ "username_to_add": "เคฎเคพเคฒเค เคฎเฅเคนเคฃเฅเคจ เคเฅเคกเคฃเฅเคฏเคพเคธเคพเค เฅ เคตเคพเคชเคฐเคเคฐเฅเคคเคพเคจเคพเคต",
+ "username_placeholder": "เคตเคพเคชเคฐเคเคฐเฅเคคเคพเคจเคพเคต...",
+ "add_button": "เคเฅเคกเคพ",
+ "cancel_add": "เคฎเคพเคฒเค เคเฅเคกเคฃเฅ เคฐเคฆเฅเคฆ เคเคฐเคพ",
+ "add_owner": "+ เคฎเคพเคฒเค เคเฅเคกเคพ",
+ "show_more": "(เคเคฃเคเฅ {count} เคฆเคพเคเคตเคพ)",
+ "show_less": "(เคเคฎเฅ เคฆเคพเคเคตเคพ)",
+ "maintainer_template": "{avatar} {char126}{name}"
+ },
+ "trends": {
+ "granularity": "เคเฅเคฐเฅ
เคจเฅเคฏเฅเคฒเฅ
เคฐเคฟเคเฅ",
+ "granularity_daily": "เคฆเฅเคจเคฟเค",
+ "granularity_weekly": "เคธเคพเคชเฅเคคเคพเคนเคฟเค",
+ "granularity_monthly": "เคฎเคพเคธเคฟเค",
+ "granularity_yearly": "เคตเคพเคฐเฅเคทเคฟเค",
+ "start_date": "เคธเฅเคฐเฅเคตเคพเคค",
+ "end_date": "เคถเฅเคตเค",
+ "loading": "เคฒเฅเคก เคนเฅเคค เคเคนเฅ...",
+ "date_range": "{start} เคคเฅ {end}",
+ "date_range_multiline": "{start}\nเคคเฅ {end}",
+ "download_file": "{fileType} เคกเคพเคเคจเคฒเฅเคก เคเคฐเคพ",
+ "toggle_annotator": "เค
โเฅ
เคจเฅเคเฅเคเคฐ เคเฅเคเคฒ เคเคฐเคพ",
+ "toggle_stack_mode": "เคธเฅเคเฅ
เค เคฎเฅเคก เคเฅเคเคฒ เคเคฐเคพ",
+ "open_options": "เคชเคฐเฅเคฏเคพเคฏ เคเคเคกเคพ",
+ "close_options": "เคชเคฐเฅเคฏเคพเคฏ เคฌเคเคฆ เคเคฐเคพ",
+ "legend_estimation": "เค
เคเคฆเคพเค",
+ "no_data": "เคฎเคพเคนเคฟเคคเฅ เคเคชเคฒเคฌเฅเคง เคจเคพเคนเฅ",
+ "y_axis_label": "{granularity} {facet}",
+ "facet": "เคเคเค",
+ "title": "เคเฅเคฐเฅเคเคกเฅเคธ",
+ "contributors_skip": "Contributors เคฎเคงเฅเคฏเฅ เคฆเคพเคเคตเคฒเฅเคฒเฅ เคจเคพเคนเฅ (GitHub เคฐเฅเคชเฅ เคจเคพเคนเฅ):",
+ "items": {
+ "downloads": "เคกเคพเคเคจเคฒเฅเคกเฅเคธ",
+ "likes": "เคชเคธเคเคคเฅ",
+ "contributors": "เคฏเฅเคเคฆเคพเคจเคเคฐเฅเคคเฅ"
+ },
+ "data_correction": "เคกเฅเคเคพ เคฆเฅเคฐเฅเคธเฅเคคเฅ",
+ "average_window": "เคธเคฐเคพเคธเคฐเฅ เคตเคฟเคเคกเฅ",
+ "smoothing": "เคธเฅเคฎเฅเคฅเคฟเคเค",
+ "prediction": "เคญเคตเคฟเคทเฅเคฏเคตเคพเคฃเฅ",
+ "known_anomalies": "เคเฅเคเคพเคค เคตเคฟเคธเคเคเคคเฅ",
+ "known_anomalies_description": "เคฌเฅเคเฅเคธ เคเคฟเคเคตเคพ CI เคธเคฎเคธเฅเคฏเคพเคเคฎเฅเคณเฅ เคเคฒเฅเคฒเฅเคฏเคพ เคเฅเคเคพเคค เคกเคพเคเคจเคฒเฅเคก เคตเคพเคขเฅเคเคตเคฐ เคฎเคงเคฒเฅ เคฎเฅเคฒเฅเคฏเฅ เคญเคฐเคคเฅ.",
+ "known_anomalies_ranges": "เคตเคฟเคธเคเคเคคเฅ เคถเฅเคฐเฅเคฃเฅเคฏเคพ",
+ "known_anomalies_range": "{start} เคคเฅ {end}",
+ "known_anomalies_range_named": "{packageName}: {start} เคคเฅ {end}",
+ "known_anomalies_none": "เคฏเคพ เคชเฅ
เคเฅเคเคธเคพเค เฅ เคเฅเคฃเคคเฅเคนเฅ เคเฅเคเคพเคค เคตเคฟเคธเคเคเคคเฅ เคจเคพเคนเฅ. | เคฏเคพ เคชเฅ
เคเฅเคเคพเคเคธเคพเค เฅ เคเฅเคฃเคคเฅเคนเฅ เคเฅเคเคพเคค เคตเคฟเคธเคเคเคคเฅ เคจเคพเคนเฅ.",
+ "known_anomalies_contribute": "เคตเคฟเคธเคเคเคคเฅ เคกเฅเคเคพ เคฏเฅเคเคฆเคพเคจ เคฆเฅเคฏเคพ",
+ "apply_correction": "เคฆเฅเคฐเฅเคธเฅเคคเฅ เคฒเคพเคเฅ เคเคฐเคพ",
+ "copy_alt": {
+ "trend_none": "เคฌเคนเฅเคคเฅเค เคธเคชเคพเค",
+ "trend_strong": "เค เคณเค",
+ "trend_weak": "เคเคฎเคเฅเคตเคค",
+ "trend_undefined": "เค
เคจเคฟเคฐเฅเคงเคพเคฐเคฟเคค (เคชเฅเคฐเฅเคธเคพ เคกเฅเคเคพ เคจเคพเคนเฅ)",
+ "button_label": "Alt เคฎเคเคเฅเคฐ เคเฅเคชเฅ เคเคฐเคพ",
+ "watermark": "เคคเคณเคพเคถเฅ \"./npmx a fast, modern browser for the npm registry\" เค
เคธเคพ เคตเฅเคเคฐเคฎเคพเคฐเฅเค เคฆเคฟเคธเคคเฅ",
+ "analysis": "{package_name} เคเฅ เคธเฅเคฐเฅเคตเคพเคค {start_value} เคชเคพเคธเฅเคจ เคนเฅเคคเฅ เคเคฃเคฟ เคถเฅเคตเค {end_value} เคตเคฐ เคนเฅเคคเฅ, เคเฅเคฏเคพเคค เคชเฅเคฐเคคเฅเคฏเฅเค เคเคพเคฒเคเคเคกเคพเคค {downloads_slope} เคกเคพเคเคจเคฒเฅเคกเฅเคธเคเคพ {trend} เคเฅเคฐเฅเคเคก เคฆเคฟเคธเคคเฅ",
+ "estimation": "เคถเฅเคตเคเคเฅ เคฎเฅเคฒเฅเคฏ เคนเคพ เคธเคงเฅเคฏเคพเคเฅเคฏเคพ เคเคพเคฒเคพเคตเคงเฅเคธเคพเค เฅ เค
เคเคถเคคเค เคเคชเคฒเคฌเฅเคง เคกเฅเคเคพเคตเคฐ เคเคงเคพเคฐเคฟเคค เค
เคเคฆเคพเค เคเคนเฅ.",
+ "estimations": "เคถเฅเคตเคเคเฅ เคฎเฅเคฒเฅเคฏเฅ เคนเฅ เคธเคงเฅเคฏเคพเคเฅเคฏเคพ เคเคพเคฒเคพเคตเคงเฅเคธเคพเค เฅ เค
เคเคถเคคเค เคเคชเคฒเคฌเฅเคง เคกเฅเคเคพเคตเคฐ เคเคงเคพเคฐเคฟเคค เค
เคเคฆเคพเค เคเคนเฅเคค.",
+ "compare": "เคฏเคพ เคชเฅ
เคเฅเคเคพเคเคธเคพเค เฅ เคกเคพเคเคจเคฒเฅเคก เคคเฅเคฒเคจเคพ เคฐเฅเคทเคพ-เคเคพเคฐเฅเค: {packages}.",
+ "single_package": "{package} เคชเฅ
เคเฅเคเคธเคพเค เฅ เคกเคพเคเคจเคฒเฅเคก เคฐเฅเคทเคพ-เคเคพเคฐเฅเค.",
+ "general_description": "Y เค
เคเฅเคท เคกเคพเคเคจเคฒเฅเคกเฅเคธเคเฅ เคธเคเคเฅเคฏเคพ เคฆเคฐเฅเคถเคตเคคเฅ. X เค
เคเฅเคท {start_date} เคคเฅ {end_date} เคชเคฐเฅเคฏเคเคคเคเฅ เคฆเคฟเคจเคพเคเค เคถเฅเคฐเฅเคฃเฅ เคฆเคฐเฅเคถเคตเคคเฅ, เคเฅเคฏเคพเคค {granularity} เคเคพเคฒเคพเคตเคงเฅ เคเคนเฅ.{estimation_notice} {packages_analysis}. {watermark}.",
+ "facet_bar_general_description": "เคฏเคพ เคชเฅ
เคเฅเคเคพเคเคธเคพเค เฅ เคเคกเคตเคพ เคฌเคพเคฐ เคเคพเคฐเฅเค: {packages}, {facet} เคเฅ เคคเฅเคฒเคจเคพ ({description}). {facet_analysis} {watermark}.",
+ "facet_bar_analysis": "{package_name} เคเฅ เคเคฟเคเคฎเคค {value} เคเคนเฅ."
+ }
+ },
+ "downloads": {
+ "title": "เคธเคพเคชเฅเคคเคพเคนเคฟเค เคกเคพเคเคจเคฒเฅเคกเฅเคธ",
+ "community_distribution": "เคธเคฎเฅเคฆเคพเคฏ เคธเฅเคตเฅเคเคพเคฐ เคตเคฟเคคเคฐเคฃ เคชเคนเคพ",
+ "subtitle": "เคธเคฐเฅเคต เคเคตเฅเคคเฅเคคเฅเคฏเคพเคเคฎเคงเฅเคฏเฅ"
+ },
+ "install_scripts": {
+ "title": "เคเคเคธเฅเคเฅเคฒ เคธเฅเคเฅเคฐเคฟเคชเฅเคเฅเคธ",
+ "script_label": "(เคธเฅเคเฅเคฐเคฟเคชเฅเค)",
+ "npx_packages": "{count} npx เคชเฅ
เคเฅเค | {count} npx เคชเฅ
เคเฅเคเฅเคธ",
+ "currently": "เคธเคงเฅเคฏเคพ {version}"
+ },
+ "playgrounds": {
+ "title": "เคตเคพเคชเคฐเฅเคจ เคชเคนเคพ",
+ "choose": "เคชเฅเคฒเฅเคเฅเคฐเคพเคเคเคก เคจเคฟเคตเคกเคพ"
+ },
+ "metrics": {
+ "esm": "ES Modules เคธเคฎเคฐเฅเคฅเคฟเคค",
+ "cjs": "CommonJS เคธเคฎเคฐเฅเคฅเคฟเคค",
+ "no_esm": "ES Modules เค
เคธเคฎเคฐเฅเคฅเคฟเคค",
+ "wasm": "WebAssembly เคเคนเฅ",
+ "types_label": "เคชเฅเคฐเคเคพเคฐ",
+ "types_included": "เคชเฅเคฐเคเคพเคฐ เคธเคฎเคพเคตเคฟเคทเฅเค เคเคนเฅเคค",
+ "types_available": "{package} เคฎเคพเคฐเฅเคซเคค เคชเฅเคฐเคเคพเคฐ เคเคชเคฒเคฌเฅเคง",
+ "no_types": "เคเฅเคฃเคคเฅเคนเฅ เคชเฅเคฐเคเคพเคฐ เคจเคพเคนเฅเคค"
+ },
+ "license": {
+ "view_spdx": "SPDX เคตเคฐ เคชเคฐเคตเคพเคจเฅเคฏเคพเคเคพ เคฎเคเคเฅเคฐ เคชเคนเคพ",
+ "none": "เคเคพเคนเฅเคนเฅ เคจเคพเคนเฅ"
+ },
"vulnerabilities": {
- "severity": {}
+ "tree_found": "{packages}/{total} เคชเฅ
เคเฅเคเคฎเคงเฅเคฏเฅ {vulns} เค
เคธเฅเคฐเคเฅเคทเคพ | {packages}/{total} เคชเฅ
เคเฅเคเคฎเคงเฅเคฏเฅ {vulns} เค
เคธเฅเคฐเคเฅเคทเคพ",
+ "show_all_packages": "{count} เคชเฅเคฐเคญเคพเคตเคฟเคค เคชเฅ
เคเฅเค เคฆเคพเคเคตเคพ | เคธเคฐเฅเคต {count} เคชเฅเคฐเคญเคพเคตเคฟเคค เคชเฅ
เคเฅเค เคฆเคพเคเคตเคพ",
+ "path": "เคฎเคพเคฐเฅเค",
+ "more": "+{count} เคเคฃเคเฅ",
+ "packages_failed": "{count} เคชเฅ
เคเฅเค เคคเคชเคพเคธเคคเคพ เคเคฒเฅ เคจเคพเคนเฅ | {count} เคชเฅ
เคเฅเคเฅเคธ เคคเคชเคพเคธเคคเคพ เคเคฒเฅ เคจเคพเคนเฅเคค",
+ "scan_failed": "เค
เคธเฅเคฐเคเฅเคทเคพเคเคธเคพเค เฅ เคธเฅเคเฅ
เคจ เคเคฐเคคเคพ เคเคฒเฅ เคจเคพเคนเฅ",
+ "severity": {
+ "critical": "เคเคเคญเฅเคฐ",
+ "high": "เคเคเฅเค",
+ "moderate": "เคฎเคงเฅเคฏเคฎ",
+ "low": "เคเคฎเฅ"
+ },
+ "fixed_in_title": "เคเคตเฅเคคเฅเคคเฅ {version} เคฎเคงเฅเคฏเฅ เคฆเฅเคฐเฅเคธเฅเคค"
+ },
+ "deprecated": {
+ "label": "เค
เคชเฅเคฐเคเคฒเคฟเคค",
+ "tree_found": "{count} เค
เคชเฅเคฐเคเคฒเคฟเคค เคจเคฟเคฐเฅเคญเคฐเคคเคพ | {count} เค
เคชเฅเคฐเคเคฒเคฟเคค เคจเคฟเคฐเฅเคญเคฐเคคเคพ",
+ "show_all": "{count} เค
เคชเฅเคฐเคเคฒเคฟเคค เคชเฅ
เคเฅเค เคฆเคพเคเคตเคพ | เคธเคฐเฅเคต {count} เค
เคชเฅเคฐเคเคฒเคฟเคค เคชเฅ
เคเฅเค เคฆเคพเคเคตเคพ"
},
- "deprecated": {},
"access": {
- "permission": {}
+ "title": "เคเฅเคฎ เคชเฅเคฐเคตเฅเคถ",
+ "refresh": "เคเฅเคฎ เคชเฅเคฐเคตเฅเคถ เคฐเฅเคซเฅเคฐเฅเคถ เคเคฐเคพ",
+ "list_label": "เคเฅเคฎ เคชเฅเคฐเคตเฅเคถ เคฏเคพเคฆเฅ",
+ "owner": "เคฎเคพเคฒเค",
+ "rw": "rw",
+ "ro": "ro",
+ "revoke_access": "{name} เคเคพ เคชเฅเคฐเคตเฅเคถ เคฐเคฆเฅเคฆ เคเคฐเคพ",
+ "no_access": "เคเฅเคฃเคคเคพเคนเฅ เคเฅเคฎ เคชเฅเคฐเคตเฅเคถ เคธเคเคฐเคเคฟเคค เคเฅเคฒเฅเคฒเคพ เคจเคพเคนเฅ",
+ "select_team_label": "เคเฅเคฎ เคจเคฟเคตเคกเคพ",
+ "loading_teams": "เคเฅเคฎเฅเคธ เคฒเฅเคก เคนเฅเคค เคเคนเฅเคค...",
+ "select_team": "เคเฅเคฎ เคจเคฟเคตเคกเคพ",
+ "permission_label": "เคชเคฐเคตเคพเคจเคเฅ เคชเคพเคคเคณเฅ",
+ "permission": {
+ "read_only": "เคซเคเฅเคค-เคตเคพเคเคจ",
+ "read_write": "เคตเคพเคเคจ-เคฒเฅเคเคจ"
+ },
+ "grant_button": "เคฆเฅเคฏเคพ",
+ "cancel_grant": "เคชเฅเคฐเคตเฅเคถ เคฆเฅเคฃเฅ เคฐเคฆเฅเคฆ เคเคฐเคพ",
+ "grant_access": "+ เคเฅเคฎ เคชเฅเคฐเคตเฅเคถ เคฆเฅเคฏเคพ"
+ },
+ "list": {
+ "filter_label": "เคชเฅ
เคเฅเคเฅเคธ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ",
+ "filter_placeholder": "เคชเฅ
เคเฅเคเฅเคธ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ...",
+ "sort_label": "เคชเฅ
เคเฅเคเฅเคธ เคเฅเคฐเคฎเคฌเคฆเฅเคง เคเคฐเคพ",
+ "showing_count": "{total} เคชเฅเคเฅ {filtered} เคชเฅ
เคเฅเคเฅเคธ เคฆเคพเคเคตเคค เคเคนเฅ"
},
- "list": {},
- "skeleton": {},
- "sort": {}
+ "skeleton": {
+ "loading": "เคชเฅ
เคเฅเค เคคเคชเคถเฅเคฒ เคฒเฅเคก เคนเฅเคค เคเคนเฅเคค",
+ "maintainers": "เคฆเฅเคเคญเคพเคฒเคเคฐเฅเคคเฅ",
+ "keywords": "เคเฅเคตเคฐเฅเคกเฅเคธ",
+ "versions": "เคเคตเฅเคคเฅเคคเฅเคฏเคพ",
+ "dependencies": "เคจเคฟเคฐเฅเคญเคฐเคคเคพ"
+ },
+ "sort": {
+ "downloads": "เคธเคฐเฅเคตเคพเคงเคฟเค เคกเคพเคเคจเคฒเฅเคก เคเคพเคฒเฅเคฒเฅ",
+ "published": "เค
เคฒเฅเคเคกเฅ เคชเฅเคฐเคเคพเคถเคฟเคค",
+ "name_asc": "เคจเคพเคต (A-Z)",
+ "name_desc": "เคจเคพเคต (Z-A)"
+ },
+ "size": {
+ "b": "{size} B",
+ "kb": "{size} kB",
+ "mb": "{size} MB"
+ },
+ "download": {
+ "button": "เคกเคพเคเคจเคฒเฅเคก",
+ "tarball": ".tar.gz เคธเฅเคตเคฐเฅเคชเคพเคค เคเคพเคฐเคฌเฅเคฒ เคกเคพเคเคจเคฒเฅเคก เคเคฐเคพ"
+ }
},
"connector": {
- "modal": {}
+ "modal": {
+ "title": "เคฒเฅเคเคฒ เคเคจเฅเคเฅเคเคฐ",
+ "connected": "เคเคจเฅเคเฅเค เคเคพเคฒเฅ",
+ "connected_as_user": "~{user} เคฎเฅเคนเคฃเฅเคจ เคเคจเฅเคเฅเค เคเคพเคฒเฅ",
+ "connected_hint": "เคเคคเคพ เคคเฅเคฎเฅเคนเฅ เคตเฅเคฌ UI เคฎเคงเฅเคจ เคชเฅ
เคเฅเคเฅเคธ เคเคฃเคฟ เคธเคเคธเฅเคฅเคพ เคตเฅเคฏเคตเคธเฅเคฅเคพเคชเคฟเคค เคเคฐเฅ เคถเคเคคเคพ.",
+ "disconnect": "เคกเคฟเคธเฅเคเคจเฅเคเฅเค เคเคฐเคพ",
+ "run_hint": "เคชเฅเคฐเคถเคพเคธเคเฅเคฏ เคธเฅเคตเคฟเคงเคพ เคธเคเฅเคทเคฎ เคเคฐเคฃเฅเคฏเคพเคธเคพเค เฅ เคคเฅเคฎเคเฅเคฏเคพ เคฎเคถเฅเคจเคตเคฐ เคเคจเฅเคเฅเคเคฐ เคเคพเคฒเคตเคพ.",
+ "copy_command": "เคเคฎเคพเคเคก เคเฅเคชเฅ เคเคฐเคพ",
+ "copied": "เคเฅเคชเฅ เคเฅเคฒเฅ",
+ "paste_token": "เคจเคเคคเคฐ เคเคจเฅเคเฅเค เคเคฐเคฃเฅเคฏเคพเคธเคพเค เฅ เคเคพเคฒเฅเคฒ เคเฅเคเคจ เคชเฅเคธเฅเค เคเคฐเคพ:",
+ "token_label": "เคเฅเคเคจ",
+ "token_placeholder": "เคเคฅเฅ เคเฅเคเคจ เคชเฅเคธเฅเค เคเคฐเคพ...",
+ "advanced": "เคชเฅเคฐเคเคค เคชเคฐเฅเคฏเคพเคฏ",
+ "port_label": "เคชเฅเคฐเฅเค",
+ "warning": "เคเคถเคพเคฐเคพ",
+ "warning_text": "เคฏเคพเคฎเฅเคณเฅ npmx เคฒเคพ เคคเฅเคฎเคเฅเคฏเคพ npm CLI เคฒเคพ เคชเฅเคฐเคตเฅเคถ เคฎเคฟเคณเคคเฅ. เคซเคเฅเคค เคคเฅเคฎเฅเคนเฅ เคตเคฟเคถเฅเคตเคพเคธ เค เฅเคตเคคเคพ เค
เคถเคพ เคธเคพเคเคเฅเคธเคถเฅเค เคเคจเฅเคเฅเค เคเคฐเคพ.",
+ "connect": "เคเคจเฅเคเฅเค เคเคฐเคพ",
+ "connecting": "เคเคจเฅเคเฅเค เคนเฅเคค เคเคนเฅ...",
+ "auto_open_url": "เคเคฅ เคชเฅเคทเฅเค เคเคชเฅเคเคช เคเคเคกเคพ"
+ }
},
"operations": {
- "queue": {}
+ "queue": {
+ "title": "เคเคชเคฐเฅเคถเคจเฅเคธ เคฐเคพเคเค",
+ "clear_all": "เคธเคฐเฅเคต เคธเคพเคซ เคเคฐเคพ",
+ "refresh": "เคเคชเคฐเฅเคถเคจเฅเคธ เคฐเฅเคซเฅเคฐเฅเคถ เคเคฐเคพ",
+ "empty": "เคฐเคพเคเคเฅเคค เคเฅเคฃเคคเฅเคนเฅ เคเคชเคฐเฅเคถเคจเฅเคธ เคจเคพเคนเฅเคค",
+ "empty_hint": "เคชเฅ
เคเฅเค เคเคฟเคเคตเคพ org เคชเฅเคทเฅเค เคพเคเคตเคฐเฅเคจ เคเคชเคฐเฅเคถเคจเฅเคธ เคเฅเคกเคพ",
+ "active_label": "เคธเคเฅเคฐเคฟเคฏ เคเคชเคฐเฅเคถเคจเฅเคธ",
+ "otp_required": "OTP เคเคตเคถเฅเคฏเค",
+ "otp_prompt": "เคชเฅเคขเฅ เคเคพเคฒเฅ เค เฅเคตเคฃเฅเคฏเคพเคธเคพเค เฅ OTP เคชเฅเคฐเคตเคฟเคทเฅเค เคเคฐเคพ",
+ "otp_placeholder": "OTP เคเฅเคก เคชเฅเคฐเคตเคฟเคทเฅเค เคเคฐเคพ...",
+ "otp_label": "เคตเคจ-เคเคพเคเคฎ เคชเคพเคธเคตเคฐเฅเคก",
+ "retry_otp": "OTP เคธเคน เคชเฅเคจเฅเคนเคพ เคชเฅเคฐเคฏเคคเฅเคจ เคเคฐเคพ",
+ "retry_web_auth": "เคตเฅเคฌ เคเคฅเคธเคน เคชเฅเคจเฅเคนเคพ เคชเฅเคฐเคฏเคคเฅเคจ เคเคฐเคพ",
+ "retrying": "เคชเฅเคจเฅเคนเคพ เคชเฅเคฐเคฏเคคเฅเคจ เคเคฐเคค เคเคนเฅ...",
+ "open_web_auth": "เคตเฅเคฌ เคเคฅ เคฒเคฟเคเค เคเคเคกเคพ",
+ "approve_operation": "เคเคชเคฐเฅเคถเคจ เคฎเคเคเฅเคฐ เคเคฐเคพ",
+ "remove_operation": "เคเคชเคฐเฅเคถเคจ เคเคพเคขเฅเคจ เคเคพเคเคพ",
+ "approve_all": "เคธเคฐเฅเคต เคฎเคเคเฅเคฐ เคเคฐเคพ",
+ "execute": "เคเคพเคฐเฅเคฏเคพเคจเฅเคตเคฟเคค เคเคฐเคพ",
+ "executing": "เคเคพเคฐเฅเคฏเคพเคจเฅเคตเคฟเคค เคนเฅเคค เคเคนเฅ...",
+ "log": "เคฒเฅเค",
+ "log_label": "เคชเฅเคฐเฅเคฃ เคเคพเคฒเฅเคฒเฅเคฏเคพ เคเคชเคฐเฅเคถเคจเฅเคธเคเคพ เคฒเฅเค",
+ "remove_from_log": "เคฒเฅเคเคฎเคงเฅเคจ เคเคพเคขเฅเคจ เคเคพเคเคพ"
+ }
},
"org": {
- "teams": {},
+ "teams": {
+ "title": "เคเฅเคฎเฅเคธ",
+ "refresh": "เคเฅเคฎเฅเคธ เคฐเฅเคซเฅเคฐเฅเคถ เคเคฐเคพ",
+ "filter_label": "เคเฅเคฎเฅเคธ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ",
+ "filter_placeholder": "เคเฅเคฎเฅเคธ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ...",
+ "sort_by": "เคเฅเคฐเคฎเคฌเคฆเฅเคง เคเคฐเคพ",
+ "loading": "เคเฅเคฎเฅเคธ เคฒเฅเคก เคนเฅเคค เคเคนเฅเคค...",
+ "no_teams": "เคเฅเคฃเคคเฅเคฏเคพเคนเฅ เคเฅเคฎเฅเคธ เคธเคพเคชเคกเคฒเฅเคฏเคพ เคจเคพเคนเฅเคค",
+ "list_label": "เคธเคเคธเฅเคฅเฅเคเฅเคฏเคพ เคเฅเคฎเฅเคธ",
+ "delete_team": "เคเฅเคฎ {name} เคนเคเคตเคพ",
+ "member_count": "{count} เคธเคฆเคธเฅเคฏ | {count} เคธเคฆเคธเฅเคฏ",
+ "members_of": "{team} เคเฅ เคธเคฆเคธเฅเคฏ",
+ "no_members": "เคเฅเคฃเคคเฅเคนเฅ เคธเคฆเคธเฅเคฏ เคจเคพเคนเฅเคค",
+ "remove_user": "{user} เคฒเคพ เคเฅเคฎเคฎเคงเฅเคจ เคเคพเคขเฅเคจ เคเคพเคเคพ",
+ "username_to_add": "{team} เคฎเคงเฅเคฏเฅ เคเฅเคกเคฃเฅเคฏเคพเคธเคพเค เฅ เคตเคพเคชเคฐเคเคฐเฅเคคเคพเคจเคพเคต",
+ "username_placeholder": "เคตเคพเคชเคฐเคเคฐเฅเคคเคพเคจเคพเคต...",
+ "add_button": "เคเฅเคกเคพ",
+ "cancel_add_user": "เคตเคพเคชเคฐเคเคฐเฅเคคเคพ เคเฅเคกเคฃเฅ เคฐเคฆเฅเคฆ เคเคฐเคพ",
+ "add_member": "+ เคธเคฆเคธเฅเคฏ เคเฅเคกเคพ",
+ "team_name_label": "เคเฅเคฎ เคจเคพเคต",
+ "team_name_placeholder": "team-name...",
+ "create_button": "เคคเคฏเคพเคฐ เคเคฐเคพ",
+ "no_match": "\"{query}\" เคถเฅ เคเฅเคณเคฃเคพเคฐเฅ เคเฅเคฃเคคเฅเคนเฅ เคเฅเคฎ เคจเคพเคนเฅ",
+ "cancel_create": "เคเฅเคฎ เคคเคฏเคพเคฐ เคเคฐเคฃเฅ เคฐเคฆเฅเคฆ เคเคฐเคพ",
+ "create_team": "+ เคเฅเคฎ เคคเคฏเคพเคฐ เคเคฐเคพ"
+ },
"members": {
- "role": {}
+ "title": "เคธเคฆเคธเฅเคฏ",
+ "refresh": "เคธเคฆเคธเฅเคฏ เคฐเฅเคซเฅเคฐเฅเคถ เคเคฐเคพ",
+ "filter_label": "เคธเคฆเคธเฅเคฏ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ",
+ "filter_placeholder": "เคธเคฆเคธเฅเคฏ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ...",
+ "filter_by_role": "เคญเฅเคฎเคฟเคเฅเคจเฅเคธเคพเคฐ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ",
+ "filter_by_team": "เคเฅเคฎเคจเฅเคธเคพเคฐ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ",
+ "all_teams": "เคธเคฐเฅเคต เคเฅเคฎเฅเคธ",
+ "sort_by": "เคเฅเคฐเคฎเคฌเคฆเฅเคง เคเคฐเคพ",
+ "loading": "เคธเคฆเคธเฅเคฏ เคฒเฅเคก เคนเฅเคค เคเคนเฅเคค...",
+ "no_members": "เคเฅเคฃเคคเฅเคนเฅ เคธเคฆเคธเฅเคฏ เคธเคพเคชเคกเคฒเฅ เคจเคพเคนเฅเคค",
+ "list_label": "เคธเคเคธเฅเคฅเฅเคเฅ เคธเคฆเคธเฅเคฏ",
+ "change_role_for": "{name} เคธเคพเค เฅ เคญเฅเคฎเคฟเคเคพ เคฌเคฆเคฒเคพ",
+ "remove_from_org": "{name} เคฒเคพ เคธเคเคธเฅเคฅเฅเคคเฅเคจ เคเคพเคขเฅเคจ เคเคพเคเคพ",
+ "view_team": "{team} เคเฅเคฎ เคชเคนเคพ",
+ "no_match": "เคคเฅเคฎเคเฅเคฏเคพ เคซเคฟเคฒเฅเคเคฐเคถเฅ เคเฅเคณเคฃเคพเคฐเฅ เคธเคฆเคธเฅเคฏ เคจเคพเคนเฅเคค",
+ "username_label": "เคตเคพเคชเคฐเคเคฐเฅเคคเคพเคจเคพเคต",
+ "username_placeholder": "username...",
+ "role_label": "เคญเฅเคฎเคฟเคเคพ",
+ "role": {
+ "all": "เคธเคฐเฅเคต",
+ "developer": "เคตเคฟเคเคธเค",
+ "admin": "เคชเฅเคฐเคถเคพเคธเค",
+ "owner": "เคฎเคพเคฒเค"
+ },
+ "team_label": "เคเฅเคฎ",
+ "no_team": "เคเฅเคฃเคคเฅเคนเฅ เคเฅเคฎ เคจเคพเคนเฅ",
+ "add_button": "เคเฅเคกเคพ",
+ "cancel_add": "เคธเคฆเคธเฅเคฏ เคเฅเคกเคฃเฅ เคฐเคฆเฅเคฆ เคเคฐเคพ",
+ "add_member": "+ เคธเคฆเคธเฅเคฏ เคเฅเคกเคพ"
},
- "page": {}
+ "public_packages": "{count} เคธเคพเคฐเฅเคตเคเคจเคฟเค เคชเฅ
เคเฅเค | {count} เคธเคพเคฐเฅเคตเคเคจเคฟเค เคชเฅ
เคเฅเคเฅเคธ",
+ "page": {
+ "packages_title": "เคชเฅ
เคเฅเคเฅเคธ",
+ "members_tab": "เคธเคฆเคธเฅเคฏ",
+ "teams_tab": "เคเฅเคฎเฅเคธ",
+ "no_packages": "เคฏเคพเคธเคพเค เฅ เคเฅเคฃเคคเฅเคนเฅ เคธเคพเคฐเฅเคตเคเคจเคฟเค เคชเฅ
เคเฅเคเฅเคธ เคธเคพเคชเคกเคฒเฅ เคจเคพเคนเฅเคค",
+ "no_packages_hint": "เคนเฅ เคธเคเคธเฅเคฅเคพ เค
เคธเฅเคคเคฟเคคเฅเคตเคพเคค เคจเคธเฅ เคถเคเคคเฅ เคเคฟเคเคตเคพ เคคเคฟเคเฅเคฏเคพเคเคกเฅ เคธเคพเคฐเฅเคตเคเคจเคฟเค เคชเฅ
เคเฅเคเฅเคธ เคจเคพเคนเฅเคค.",
+ "failed_to_load": "เคธเคเคธเฅเคฅเฅเคเฅ เคชเฅ
เคเฅเคเฅเคธ เคฒเฅเคก เคเคฐเคฃเฅเคฏเคพเคค เค
เคฏเคถเคธเฅเคตเฅ",
+ "no_match": "\"{query}\" เคถเฅ เคเฅเคณเคฃเคพเคฐเฅ เคเฅเคฃเคคเฅเคนเฅ เคชเฅ
เคเฅเคเฅเคธ เคจเคพเคนเฅเคค",
+ "not_found": "เคธเคเคธเฅเคฅเคพ เคธเคพเคชเคกเคฒเฅ เคจเคพเคนเฅ",
+ "not_found_message": "เคธเคเคธเฅเคฅเคพ \"{'@'}{name}\" npm เคตเคฐ เค
เคธเฅเคคเคฟเคคเฅเคตเคพเคค เคจเคพเคนเฅ"
+ }
},
"user": {
- "combobox": {},
- "page": {},
- "orgs_page": {}
+ "combobox": {
+ "add_to_org_hint": "(org เคฎเคงเฅเคฏเฅเคนเฅ เคเฅเคกเคฒเฅ เคเคพเคเคฒ)",
+ "press_enter_to_add": "{'@'}{username} เคเฅเคกเคฃเฅเคฏเคพเคธเคพเค เฅ Enter เคฆเคพเคฌเคพ",
+ "default_placeholder": "เคตเคพเคชเคฐเคเคฐเฅเคคเคพเคจเคพเคต...",
+ "suggestions_label": "เคตเคพเคชเคฐเคเคฐเฅเคคเคพ เคธเฅเคเคจเคพ"
+ },
+ "page": {
+ "packages_title": "เคชเฅ
เคเฅเคเฅเคธ",
+ "no_packages": "เคฏเคพเคธเคพเค เฅ เคเฅเคฃเคคเฅเคนเฅ เคธเคพเคฐเฅเคตเคเคจเคฟเค เคชเฅ
เคเฅเคเฅเคธ เคธเคพเคชเคกเคฒเฅ เคจเคพเคนเฅเคค",
+ "no_packages_hint": "เคนเคพ เคตเคพเคชเคฐเคเคฐเฅเคคเคพ เค
เคธเฅเคคเคฟเคคเฅเคตเคพเคค เคจเคธเฅ เคถเคเคคเฅ เคเคฟเคเคตเคพ เคคเฅเคฏเคพเคเฅเคฏเคพเคเคกเฅ เคธเคพเคฐเฅเคตเคเคจเคฟเค เคชเฅ
เคเฅเคเฅเคธ เคจเคพเคนเฅเคค.",
+ "failed_to_load": "เคตเคพเคชเคฐเคเคฐเฅเคคเฅเคฏเคพเคเฅ เคชเฅ
เคเฅเคเฅเคธ เคฒเฅเคก เคเคฐเคฃเฅเคฏเคพเคค เค
เคฏเคถเคธเฅเคตเฅ",
+ "no_match": "\"{query}\" เคถเฅ เคเฅเคณเคฃเคพเคฐเฅ เคเฅเคฃเคคเฅเคนเฅ เคชเฅ
เคเฅเคเฅเคธ เคจเคพเคนเฅเคค",
+ "filter_placeholder": "{count} เคชเฅ
เคเฅเค เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ... | {count} เคชเฅ
เคเฅเคเฅเคธ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ..."
+ },
+ "orgs_page": {
+ "title": "เคธเคเคธเฅเคฅเคพ",
+ "back_to_profile": "เคชเฅเคฐเฅเคซเคพเคเคฒเคตเคฐ เคชเคฐเคค เคเคพ",
+ "connect_required": "เคคเฅเคฎเคเฅเคฏเคพ เคธเคเคธเฅเคฅเคพ เคชเคพเคนเคฃเฅเคฏเคพเคธเคพเค เฅ เคฒเฅเคเคฒ CLI เคเคจเฅเคเฅเค เคเคฐเคพ.",
+ "connect_hint_prefix": "เคธเฅเคฐเฅ เคเคฐเคฃเฅเคฏเคพเคธเคพเค เฅ",
+ "connect_hint_suffix": "เคเคพเคฒเคตเคพ.",
+ "own_orgs_only": "เคคเฅเคฎเฅเคนเฅ เคซเคเฅเคค เคคเฅเคฎเคเฅเคฏเคพ เคธเฅเคตเคคเคเคเฅเคฏเคพ เคธเคเคธเฅเคฅเคพ เคชเคพเคนเฅ เคถเคเคคเคพ.",
+ "view_your_orgs": "เคคเฅเคฎเคเฅเคฏเคพ เคธเคเคธเฅเคฅเคพ เคชเคนเคพ",
+ "loading": "เคธเคเคธเฅเคฅเคพ เคฒเฅเคก เคนเฅเคค เคเคนเฅเคค...",
+ "empty": "เคเฅเคฃเคคเฅเคฏเคพเคนเฅ เคธเคเคธเฅเคฅเคพ เคธเคพเคชเคกเคฒเฅเคฏเคพ เคจเคพเคนเฅเคค.",
+ "empty_hint": "เคธเคเคธเฅเคฅเคพ เคคเฅเคฎเคเฅเคฏเคพ เคธเฅเคเฅเคช เคเฅเคฒเฅเคฒเฅเคฏเคพ เคชเฅ
เคเฅเคเฅเคธเคฎเคงเฅเคจ เคเคณเคเคฒเฅเคฏเคพ เคเคพเคคเคพเคค.",
+ "count": "{count} เคธเคเคธเฅเคฅเคพ | {count} เคธเคเคธเฅเคฅเคพ",
+ "packages_count": "{count} เคชเฅ
เคเฅเค | {count} เคชเฅ
เคเฅเคเฅเคธ"
+ }
},
"claim": {
- "modal": {}
+ "modal": {
+ "title": "เคชเฅ
เคเฅเค เคจเคพเคต เคฆเคพเคตเคพ เคเคฐเคพ",
+ "success": "เคชเฅ
เคเฅเค เคฆเคพเคตเคพ เคเฅเคฒเฅ!",
+ "success_detail": "{name}{'@'}0.0.0 npm เคตเคฐ เคชเฅเคฐเคเคพเคถเคฟเคค เคเฅเคฒเฅ เคเฅเคฒเฅ เคเคนเฅ.",
+ "success_hint": "เคเคคเคพ เคคเฅเคฎเฅเคนเฅ npm publish เคตเคพเคชเคฐเฅเคจ เคฏเคพ เคชเฅ
เคเฅเคเคเฅเคฏเคพ เคจเคตเฅเคฏเคพ เคเคตเฅเคคเฅเคคเฅเคฏเคพ เคชเฅเคฐเคเคพเคถเคฟเคค เคเคฐเฅ เคถเคเคคเคพ.",
+ "view_package": "เคชเฅ
เคเฅเค เคชเคนเคพ",
+ "invalid_name": "เค
เคตเฅเคง เคชเฅ
เคเฅเค เคจเคพเคต:",
+ "available": "เคนเฅ เคจเคพเคต เคเคชเคฒเคฌเฅเคง เคเคนเฅ!",
+ "taken": "เคนเฅ เคจเคพเคต เคเคงเฅเค เคเฅเคคเคฒเฅ เคเฅเคฒเฅ เคเคนเฅ.",
+ "missing_permission": "เคคเฅเคฎเฅเคนเคพเคฒเคพ {'@'}{scope} เคฏเคพ เคธเฅเคเฅเคชเคฎเคงเฅเคฏเฅ เคชเฅ
เคเฅเค เคเฅเคกเคฃเฅเคฏเคพเคเฅ เคชเคฐเคตเคพเคจเคเฅ เคจเคพเคนเฅ.",
+ "similar_warning": "เคธเคฎเคพเคจ เคชเฅ
เคเฅเคเฅเคธ เค
เคธเฅเคคเคฟเคคเฅเคตเคพเคค เคเคนเฅเคค - npm เคนเฅ เคจเคพเคต เคจเคพเคเคพเคฐเฅ เคถเคเคคเฅ:",
+ "related": "เคธเคเคฌเคเคงเคฟเคค เคชเฅ
เคเฅเคเฅเคธ:",
+ "scope_warning_title": "เคฏเคพเคเคตเคเฅ เคธเฅเคเฅเคช เคเฅเคฒเฅเคฒเฅ เคชเฅ
เคเฅเค เคตเคพเคชเคฐเคฃเฅเคฏเคพเคเคพ เคตเคฟเคเคพเคฐ เคเคฐเคพ",
+ "scope_warning_text": "เค
เคจเคธเฅเคเฅเคชเฅเคก เคชเฅ
เคเฅเค เคจเคพเคตเฅ เคนเฅ เคเค เคธเคพเคฎเคพเคฏเคฟเค เคธเคพเคงเคจ เคเคนเฅ. เคซเคเฅเคค เคคเฅเคฎเฅเคนเฅ เคเคเคพเคฆเฅ เคชเฅ
เคเฅเค เคชเฅเคฐเคเคพเคถเคฟเคค เคเคฐเฅเคจ เคคเฅเคฏเคพเคเฅ เคฆเฅเคเคญเคพเคฒ เคเคฐเคฃเคพเคฐ เค
เคธเคพเคฒ เคคเคฐเค เคจเคพเคต เคฆเคพเคตเคพ เคเคฐเคพ. เคตเฅเคฏเคเฅเคคเคฟเค เคเคฟเคเคตเคพ เคธเคเคธเฅเคฅเคพเคคเฅเคฎเค เคชเฅเคฐเคเคฒเฅเคชเคพเคเคธเคพเค เฅ {'@'}{username}/{name} เคธเคพเคฐเคเฅ เคธเฅเคเฅเคช เคเฅเคฒเฅเคฒเฅ เคจเคพเคต เคตเคพเคชเคฐเคพ.",
+ "connect_required": "เคนเฅ เคชเฅ
เคเฅเค เคจเคพเคต เคฆเคพเคตเคพ เคเคฐเคฃเฅเคฏเคพเคธเคพเค เฅ เคฒเฅเคเคฒ เคเคจเฅเคเฅเคเคฐเคถเฅ เคเคจเฅเคเฅเค เคเคฐเคพ.",
+ "connect_button": "เคเคจเฅเคเฅเคเคฐเคถเฅ เคเคจเฅเคเฅเค เคเคฐเคพ",
+ "publish_hint": "เคฏเคพเคฎเฅเคณเฅ เคเค เคเคฟเคฎเคพเคจ เคชเฅเคฒเฅเคธเคนเฅเคฒเฅเคกเคฐ เคชเฅ
เคเฅเค เคชเฅเคฐเคเคพเคถเคฟเคค เคนเฅเคเคฒ.",
+ "preview_json": "package.json เคชเฅเคฐเฅเคตเคพเคตเคฒเฅเคเคจ",
+ "claim_button": "เคชเฅ
เคเฅเค เคจเคพเคต เคฆเคพเคตเคพ เคเคฐเคพ",
+ "publishing": "เคชเฅเคฐเคเคพเคถเคฟเคค เคนเฅเคค เคเคนเฅ...",
+ "checking": "เคเคชเคฒเคฌเฅเคงเคคเคพ เคคเคชเคพเคธเคค เคเคนเฅ...",
+ "failed_to_check": "เคจเคพเคตเคพเคเฅ เคเคชเคฒเคฌเฅเคงเคคเคพ เคคเคชเคพเคธเคฃเฅเคฏเคพเคค เค
เคฏเคถเคธเฅเคตเฅ",
+ "failed_to_claim": "เคชเฅ
เคเฅเค เคฆเคพเคตเคพ เคเคฐเคฃเฅเคฏเคพเคค เค
เคฏเคถเคธเฅเคตเฅ"
+ }
},
"code": {
+ "files_label": "เคซเคพเคฏเคฒเฅ",
"no_files": "เคเฅเคฃเคคเฅเคฏเคพเคนเฅ เคซเคพเคเคฒเฅเคธ เคเคชเคฒเคฌเฅเคง เคจเคพเคนเฅเคค",
+ "root": "เคฎเฅเคณ",
"lines": "{count} เคเคณเฅ",
+ "toggle_tree": "เคซเคพเคเคฒ เคเฅเคฐเฅ เคเฅเคเคฒ เคเคฐเคพ",
+ "close_tree": "เคซเคพเคเคฒ เคเฅเคฐเฅ เคฌเคเคฆ เคเคฐเคพ",
+ "copy_link": "เคฒเคฟเคเค เคเฅเคชเฅ เคเคฐเคพ",
"raw": "เคเคเฅเคเคพ",
- "table": {},
- "markdown_view_mode": {}
+ "view_raw": "เคเคเฅเคเฅ เคซเคพเคเคฒ เคชเคนเคพ",
+ "file_too_large": "เคชเฅเคฐเฅเคตเคพเคตเคฒเฅเคเคจเคพเคธเคพเค เฅ เคซเคพเคเคฒ เคเฅเคช เคฎเฅเค เฅ เคเคนเฅ",
+ "file_size_warning": "{size} เคนเฅ เคธเคฟเคเคเฅ
เคเฅเคธ เคนเคพเคฏเคฒเคพเคเคเคฟเคเคเคธเคพเค เฅเคเฅเคฏเคพ 500KB เคฎเคฐเฅเคฏเคพเคฆเฅเคชเฅเคเฅเคทเคพ เคเคพเคธเฅเคค เคเคนเฅ",
+ "failed_to_load": "เคซเคพเคเคฒ เคฒเฅเคก เคเคฐเคฃเฅเคฏเคพเคค เค
เคฏเคถเคธเฅเคตเฅ",
+ "unavailable_hint": "เคซเคพเคเคฒ เคเฅเคช เคฎเฅเค เฅ เค
เคธเฅ เคถเคเคคเฅ เคเคฟเคเคตเคพ เคเคชเคฒเคฌเฅเคง เคจเคธเฅ เคถเคเคคเฅ",
+ "version_required": "เคเฅเคก เคฌเฅเคฐเคพเคเค เคเคฐเคฃเฅเคฏเคพเคธเคพเค เฅ เคเคตเฅเคคเฅเคคเฅ เคเคตเคถเฅเคฏเค เคเคนเฅ",
+ "go_to_package": "เคชเฅ
เคเฅเคเคเคกเฅ เคเคพ",
+ "loading_tree": "เคซเคพเคเคฒ เคเฅเคฐเฅ เคฒเฅเคก เคนเฅเคค เคเคนเฅ...",
+ "failed_to_load_tree": "เคฏเคพ เคชเฅ
เคเฅเค เคเคตเฅเคคเฅเคคเฅเคธเคพเค เฅ เคซเคพเคฏเคฒเฅ เคฒเฅเคก เคเคฐเคฃเฅเคฏเคพเคค เค
เคฏเคถเคธเฅเคตเฅ",
+ "back_to_package": "เคชเฅ
เคเฅเคเคเคกเฅ เคชเคฐเคค เคเคพ",
+ "table": {
+ "name": "เคจเคพเคต",
+ "size": "เคเคเคพเคฐ"
+ },
+ "markdown_view_mode": {
+ "preview": "เคชเฅเคฐเฅเคตเคพเคตเคฒเฅเคเคจ",
+ "code": "เคเฅเคก"
+ },
+ "file_path": "เคซเคพเคเคฒ เคฎเคพเคฐเฅเค",
+ "binary_file": "เคฌเคพเคฏเคจเคฐเฅ เคซเคพเคเคฒ",
+ "binary_rendering_warning": "\"{contentType}\" เคซเคพเคเคฒ เคชเฅเคฐเคเคพเคฐ เคชเฅเคฐเฅเคตเคพเคตเคฒเฅเคเคจเคพเคธเคพเค เฅ เคธเคฎเคฐเฅเคฅเคฟเคค เคจเคพเคนเฅ."
},
"badges": {
- "provenance": {},
- "jsr": {}
+ "provenance": {
+ "verified": "เคธเคคเฅเคฏเคพเคชเคฟเคค",
+ "verified_title": "เคธเคคเฅเคฏเคพเคชเคฟเคค เคชเฅเคฐเฅเคตเฅเคนเคจเคจเฅเคธ",
+ "verified_via": "เคธเคคเฅเคฏเคพเคชเคฟเคค: {provider} เคฎเคพเคฐเฅเคซเคค เคชเฅเคฐเคเคพเคถเคฟเคค"
+ },
+ "jsr": {
+ "title": "JSR เคตเคฐเคนเฅ เคเคชเคฒเคฌเฅเคง"
+ }
},
"filters": {
- "chips": {},
- "download_range": {},
- "updated": {},
- "security_options": {},
- "sort": {},
- "columns": {},
- "view_mode": {},
- "pagination": {},
- "count": {},
- "table": {}
+ "title": "เคซเคฟเคฒเฅเคเคฐเฅเคธ",
+ "search": "เคถเฅเคงเคพ",
+ "search_scope": "เคถเฅเคง เคตเฅเคฏเคพเคชเฅเคคเฅ",
+ "search_placeholder_name": "เคชเฅ
เคเฅเค เคจเคพเคตเคพเคจเฅ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ...",
+ "search_placeholder_description": "เคตเคฐเฅเคฃเคจเคพเคจเฅ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ...",
+ "search_placeholder_keywords": "เคเฅเคตเคฐเฅเคกเฅเคธเคจเฅ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ...",
+ "search_placeholder_all": "เคธเคฐเฅเคต เคถเฅเคงเคพ เคเคฟเคเคตเคพ name: desc: kw: เคตเคพเคชเคฐเคพ",
+ "scope_name": "เคจเคพเคต",
+ "scope_name_description": "เคซเคเฅเคค เคชเฅ
เคเฅเค เคจเคพเคตเฅ เคถเฅเคงเคพ",
+ "scope_description": "เคตเคฐเฅเคฃเคจ",
+ "scope_description_description": "เคซเคเฅเคค เคตเคฐเฅเคฃเคจเฅ เคถเฅเคงเคพ",
+ "scope_keywords": "เคเฅเคตเคฐเฅเคกเฅเคธ",
+ "scope_keywords_description": "เคซเคเฅเคค เคเฅเคตเคฐเฅเคกเฅเคธ เคถเฅเคงเคพ",
+ "scope_all": "เคธเคฐเฅเคต",
+ "scope_all_description": "เคธเคฐเฅเคต เคซเฅเคฒเฅเคกเฅเคธ เคถเฅเคงเคพ, name: desc: kw: เคเคชเคฐเฅเคเคฐ เคธเคฎเคฐเฅเคฅเคฟเคค",
+ "weekly_downloads": "เคธเคพเคชเฅเคคเคพเคนเคฟเค เคกเคพเคเคจเคฒเฅเคกเฅเคธ",
+ "updated_within": "เค
เคฆเฅเคฏเคฏเคพเคตเคค เคเคพเคฒเคพเคตเคงเฅ",
+ "security": "เคธเฅเคฐเคเฅเคทเคพ",
+ "keywords": "เคเฅเคตเคฐเฅเคกเฅเคธ",
+ "more_keywords": "+{count} เคเคฃเคเฅ",
+ "clear_all": "เคธเคฐเฅเคต เคธเคพเคซ เคเคฐเคพ",
+ "remove_filter": "{label} เคซเคฟเคฒเฅเคเคฐ เคเคพเคขเฅเคจ เคเคพเคเคพ",
+ "chips": {
+ "search": "เคถเฅเคง",
+ "downloads": "เคกเคพเคเคจเคฒเฅเคกเฅเคธ",
+ "keyword": "เคเฅเคตเคฐเฅเคก",
+ "security": "เคธเฅเคฐเคเฅเคทเคพ",
+ "updated": "เค
เคฆเฅเคฏเคฏเคพเคตเคค"
+ },
+ "download_range": {
+ "any": "เคเคพเคนเฅเคนเฅ",
+ "lt100": "< 100",
+ "100_1k": "100 - 1K",
+ "1k_10k": "1K - 10K",
+ "10k_100k": "10K - 100K",
+ "gt100k": "> 100K"
+ },
+ "updated": {
+ "any": "เคเคงเฅเคนเฅ",
+ "week": "เคฎเคพเคเฅเคฒ เคเค เคตเคกเคพ",
+ "month": "เคฎเคพเคเฅเคฒ เคฎเคนเคฟเคจเคพ",
+ "quarter": "เคฎเคพเคเฅเคฒ 3 เคฎเคนเคฟเคจเฅ",
+ "year": "เคฎเคพเคเฅเคฒ เคตเคฐเฅเคท"
+ },
+ "security_options": {
+ "all": "เคธเคฐเฅเคต เคชเฅ
เคเฅเคเฅเคธ",
+ "secure": "เคเคถเคพเคฑเฅเคฏเคพเคเคถเคฟเคตเคพเคฏ",
+ "insecure": "เคเคถเคพเคฑเฅเคฏเคพเคเคธเคน"
+ },
+ "view_selected": "เคจเคฟเคตเคกเคฒเฅเคฒเฅ เคชเคนเคพ",
+ "clear_selected_label": "เคจเคฟเคตเคก เคธเคพเคซ เคเคฐเคพ",
+ "sort": {
+ "label": "เคชเฅ
เคเฅเคเฅเคธ เคเฅเคฐเคฎเคฌเคฆเฅเคง เคเคฐเคพ",
+ "toggle_direction": "เคเฅเคฐเคฎ เคฆเคฟเคถเคพ เคเฅเคเคฒ เคเคฐเคพ",
+ "ascending": "เคเคขเคคเฅเคฏเคพ เคเฅเคฐเคฎเคพเคจเฅ",
+ "descending": "เคเคคเคฐเคคเฅเคฏเคพ เคเฅเคฐเคฎเคพเคจเฅ",
+ "relevance": "เคธเฅเคธเคเคเคคเฅ",
+ "downloads_week": "เคกเคพเคเคจเคฒเฅเคกเฅเคธ/เคเค เคตเคกเคพ",
+ "downloads_day": "เคกเคพเคเคจเคฒเฅเคกเฅเคธ/เคฆเคฟเคตเคธ",
+ "downloads_month": "เคกเคพเคเคจเคฒเฅเคกเฅเคธ/เคฎเคนเคฟเคจเคพ",
+ "downloads_year": "เคกเคพเคเคจเคฒเฅเคกเฅเคธ/เคตเคฐเฅเคท",
+ "published": "เคถเฅเคตเคเคเฅ เคชเฅเคฐเคเคพเคถเคฟเคค",
+ "name": "เคจเคพเคต",
+ "quality": "เคเฅเคฃเคตเคคเฅเคคเคพ",
+ "popularity": "เคฒเฅเคเคชเฅเคฐเคฟเคฏเคคเคพ",
+ "maintenance": "เคฆเฅเคเคญเคพเคฒ",
+ "score": "เคธเฅเคเฅเคฐ"
+ },
+ "columns": {
+ "title": "เคธเฅเคคเคเคญ",
+ "show": "เคธเฅเคคเคเคญ เคฆเคพเคเคตเคพ",
+ "reset": "เคฎเฅเคณ เคธเฅเคเคฟเคเคเฅเคเคตเคฐ เคฐเฅเคธเฅเค เคเคฐเคพ",
+ "coming_soon": "เคฒเคตเคเคฐเค เคฏเฅเคค เคเคนเฅ",
+ "name": "เคจเคพเคต",
+ "version": "เคเคตเฅเคคเฅเคคเฅ",
+ "description": "เคตเคฐเฅเคฃเคจ",
+ "downloads": "เคกเคพเคเคจเคฒเฅเคกเฅเคธ/เคเค เคตเคกเคพ",
+ "published": "เคถเฅเคตเคเคเฅ เคชเฅเคฐเคเคพเคถเคฟเคค",
+ "maintainers": "เคฆเฅเคเคญเคพเคฒเคเคฐเฅเคคเฅ",
+ "keywords": "เคเฅเคตเคฐเฅเคกเฅเคธ",
+ "quality_score": "เคเฅเคฃเคตเคคเฅเคคเคพ เคธเฅเคเฅเคฐ",
+ "popularity_score": "เคฒเฅเคเคชเฅเคฐเคฟเคฏเคคเคพ เคธเฅเคเฅเคฐ",
+ "maintenance_score": "เคฆเฅเคเคญเคพเคฒ เคธเฅเคเฅเคฐ",
+ "combined_score": "เคเคเคคเฅเคฐเคฟเคค เคธเฅเคเฅเคฐ",
+ "security": "เคธเฅเคฐเคเฅเคทเคพ",
+ "selection": "เคชเฅ
เคเฅเค เคจเคฟเคตเคกเคพ"
+ },
+ "view_mode": {
+ "label": "เคฆเฅเคถเฅเคฏ เคฎเฅเคก",
+ "cards": "เคเคพเคฐเฅเคก เคฆเฅเคถเฅเคฏ",
+ "table": "เคคเคเฅเคคเคพ เคฆเฅเคถเฅเคฏ"
+ },
+ "pagination": {
+ "mode_label": "เคชเคพเคจเคเฅเคฐเคฎ เคฎเฅเคก",
+ "infinite": "เค
เคฎเคฐเฅเคฏเคพเคฆ",
+ "paginated": "เคชเคพเคจเคเฅเคฐเคฎเคฟเคค",
+ "items_per_page": "เคชเฅเคฐเคคเคฟ เคชเฅเคทเฅเค เคเคฏเคเคฎเฅเคธ",
+ "per_page": "{count} / เคชเฅเคทเฅเค ",
+ "showing": "{total} เคชเฅเคเฅ {range}",
+ "previous": "เคฎเคพเคเฅเคฒ เคชเฅเคทเฅเค ",
+ "next": "เคชเฅเคขเฅเคฒ เคชเฅเคทเฅเค ",
+ "nav_label": "เคชเคพเคจเคเฅเคฐเคฎ"
+ },
+ "count": {
+ "showing_filtered": "{filtered} / {count} เคชเฅ
เคเฅเค | {filtered} / {count} เคชเฅ
เคเฅเคเฅเคธ",
+ "showing_all": "{count} เคชเฅ
เคเฅเค | {count} เคชเฅ
เคเฅเคเฅเคธ",
+ "showing_paginated": "{pageSize} / {count} เคชเฅ
เคเฅเค | {pageSize} / {count} เคชเฅ
เคเฅเคเฅเคธ"
+ },
+ "table": {
+ "security_warning": "เคธเฅเคฐเคเฅเคทเคพ เคเคถเคพเคฐเคพ",
+ "secure": "เคธเฅเคฐเคเฅเคทเคฟเคค",
+ "no_packages": "เคเฅเคฃเคคเฅเคนเฅ เคชเฅ
เคเฅเคเฅเคธ เคธเคพเคชเคกเคฒเฅ เคจเคพเคนเฅเคค"
+ }
},
"about": {
"title": "เคฌเคฆเฅเคฆเคฒ",
- "what_we_are": {},
+ "heading": "เคฌเคฆเฅเคฆเคฒ",
+ "meta_description": "npmx เคนเฅ npm เคจเฅเคเคฆเคฃเฅเคธเคพเค เฅ เคตเฅเคเคตเคพเคจ, เคเคงเฅเคจเคฟเค เคฌเฅเคฐเคพเคเคเคฐ เคเคนเฅ. npm เคชเฅ
เคเฅเคเฅเคธ เคถเฅเคงเคฃเฅเคฏเคพเคธเคพเค เฅ เคเคคเฅเคเฅเคทเฅเค UX/DX.",
+ "what_we_are": {
+ "title": "เคเคฎเฅเคนเฅ เคเคพเคฏ เคเคนเฅเคค",
+ "better_ux_dx": "เคเคคเฅเคคเคฎ UX/DX",
+ "admin_ui": "เคชเฅเคฐเคถเคพเคธเคเฅเคฏ UI",
+ "description": "npmx เคนเฅ npm เคชเฅ
เคเฅเค เคจเฅเคเคฆเคฃเฅ เคเคฃเคฟ เคธเคพเคงเคจเคพเคเคธเคพเค เฅ {betterUxDx} เคเคนเฅ. เคกเคพเคฐเฅเค เคฎเฅเคก, เคเฅเคฌเฅเคฐเฅเคก เคจเฅเคตเฅเคนเคฟเคเฅเคถเคจ, เคเฅเคก เคฌเฅเคฐเคพเคเคเคฟเคเค เคเคฃเคฟ {jsr} เคธเคพเคฐเคเฅเคฏเคพ เคชเคฐเฅเคฏเคพเคฏเฅ เคจเฅเคเคฆเคฃเฅเคฏเคพเคเคถเฅ เคเฅเคกเคฃเฅ เคฏเคพเคเคธเคพเคฐเคเฅเคฏเคพ เคตเฅเคถเคฟเคทเฅเคเฅเคฏเคพเคเคธเคน เคชเฅ
เคเฅเคเฅเคธ เคถเฅเคงเคฃเฅเคฏเคพเคธเคพเค เฅ เคตเฅเคเคตเคพเคจ, เคเคงเฅเคจเคฟเค เคเคเคเคฐเคซเฅเคธ เคฆเฅเคฃเฅเคฏเคพเคเคพ เคเคฎเฅเคนเฅ เคชเฅเคฐเคฏเคคเฅเคจ เคเคฐเคคเฅ.",
+ "admin_description": "เคคเฅเคฎเคเฅ เคชเฅ
เคเฅเคเฅเคธ, เคเฅเคฎเฅเคธ เคเคฃเคฟ เคธเคเคธเฅเคฅเคพ เคตเฅเคฏเคตเคธเฅเคฅเคพเคชเคฟเคค เคเคฐเคฃเฅเคฏเคพเคธเคพเค เฅ - เคนเฅ เคธเคฐเฅเคต เคฌเฅเคฐเคพเคเคเคฐเคฎเคงเฅเคจ, เคคเฅเคฎเคเฅเคฏเคพ เคธเฅเคฅเคพเคจเคฟเค npm CLI เคเฅเคฏเคพ เคฎเคฆเคคเฅเคจเฅ - เคเคฎเฅเคนเฅ เคเคคเฅเคคเคฎ {adminUi} เคฆเฅเคฃเฅเคฏเคพเคเคพเคนเฅ เคชเฅเคฐเคฏเคคเฅเคจ เคเคฐเคคเฅ."
+ },
"what_we_are_not": {
- "words": {}
+ "title": "เคเคฎเฅเคนเฅ เคเคพเคฏ เคจเคพเคนเฅ",
+ "not_package_manager": "เคชเฅ
เคเฅเค เคฎเฅ
เคจเฅเคเคฐ เคจเคพเคนเฅ.",
+ "not_registry": "เคจเฅเคเคฆเคฃเฅ เคจเคพเคนเฅ.",
+ "registry_description": "เคเคฎเฅเคนเฅ เคชเฅ
เคเฅเคเฅเคธ เคนเฅเคธเฅเค เคเคฐเคค เคจเคพเคนเฅ. เคคเฅเคฏเคพเคเคจเคพ เคฌเฅเคฐเคพเคเค เคเคฐเคฃเฅเคฏเคพเคเคพ เคเคฎเฅเคนเฅ เคซเคเฅเคค เคเค เคตเฅเคเคตเคพเคจ, เคเคงเฅเคจเคฟเค เคฎเคพเคฐเฅเค เคเคนเฅเคค.",
+ "package_managers_exist": "{already} {people} {building} {really} {cool} {package} {managers}.",
+ "words": {
+ "already": "เคเคงเฅเค",
+ "people": "เคฒเฅเค",
+ "building": "เคฌเคจเคตเคค",
+ "really": "เคเคฐเฅเคเคฐ",
+ "cool": "เคเคพเคจ",
+ "package": "เคชเฅ
เคเฅเค",
+ "managers": "เคฎเฅ
เคจเฅเคเคฐเฅเคธ เคเคนเฅเคค"
+ }
+ },
+ "sponsors": {
+ "title": "เคชเฅเคฐเคพเคฏเฅเคเค"
+ },
+ "oss_partners": {
+ "title": "OSS เคญเคพเคเฅเคฆเคพเคฐ"
+ },
+ "team": {
+ "title": "เคเฅเคฎ",
+ "governance": "เคถเคพเคธเคจ",
+ "role_steward": "เคตเคฟเคถเฅเคตเคธเฅเคค",
+ "role_maintainer": "เคฆเฅเคเคญเคพเคฒเคเคฐเฅเคคเคพ",
+ "sponsor": "เคชเฅเคฐเคพเคฏเฅเคเค",
+ "sponsor_aria": "GitHub เคตเคฐ {name} เคฒเคพ เคชเฅเคฐเคพเคฏเฅเคเคฟเคค เคเคฐเคพ"
+ },
+ "contributors": {
+ "title": "... เคเคฃเคฟ เคเคฃเคเฅ {count} เคฏเฅเคเคฆเคพเคจเคเคฐเฅเคคเคพ | ... เคเคฃเคฟ เคเคฃเคเฅ {count} เคฏเฅเคเคฆเคพเคจเคเคฐเฅเคคเฅ",
+ "description": "npmx เคชเฅเคฐเฅเคฃเคชเคฃเฅ เคฎเฅเคเฅเคค-เคธเฅเคฐเฅเคค เคเคนเฅ เคเคฃเคฟ เค
เคชเฅเคฐเคคเคฟเคฎ เคฏเฅเคเคฆเคพเคจเคเคฐเฅเคคเฅเคฏเคพเคเคเฅเคฏเคพ เคธเคฎเฅเคฆเคพเคฏเคพเคจเฅ เคคเคฏเคพเคฐ เคเฅเคฒเฅ เคเคนเฅ. เคเคฎเคเฅเคฏเคพเคค เคธเคพเคฎเฅเคฒ เคตเฅเคนเคพ เคเคฃเคฟ เคเคชเคฃ เคจเฅเคนเคฎเฅ เคนเคตเฅ เคนเฅเคคเฅ เคคเฅ npm เคฌเฅเคฐเคพเคเคเคฟเคเคเคเฅ เค
เคจเฅเคญเฅเคคเฅ เคเคเคคเฅเคฐ เคคเคฏเคพเคฐ เคเคฐเฅเคฏเคพ.",
+ "loading": "เคฏเฅเคเคฆเคพเคจเคเคฐเฅเคคเฅ เคฒเฅเคก เคเคฐเคค เคเคนเฅ...",
+ "error": "เคฏเฅเคเคฆเคพเคจเคเคฐเฅเคคเฅ เคฒเฅเคก เคเคฐเคฃเฅเคฏเคพเคค เค
เคฏเคถเคธเฅเคตเฅ",
+ "view_profile": "{name} เคเฅ GitHub เคชเฅเคฐเฅเคซเคพเคเคฒ เคชเคนเคพ"
},
- "contributors": {},
"get_involved": {
- "contribute": {},
- "community": {},
- "follow": {}
+ "title": "เคธเคนเคญเคพเคเฅ เคตเฅเคนเคพ",
+ "contribute": {
+ "title": "เคฏเฅเคเคฆเคพเคจ เคฆเฅเคฏเคพ",
+ "description": "เคเคชเคฒเฅเคฏเคพเคฒเคพ เคนเคตเคพ เค
เคธเคฒเฅเคฒเคพ npm เค
เคจเฅเคญเคต เคคเคฏเคพเคฐ เคเคฐเคฃเฅเคฏเคพเคค เคเคฎเฅเคนเคพเคฒเคพ เคฎเคฆเคค เคเคฐเคพ.",
+ "cta": "GitHub เคตเคฐ เคชเคนเคพ"
+ },
+ "community": {
+ "title": "เคธเคฎเฅเคฆเคพเคฏเคพเคค เคธเคพเคฎเฅเคฒ เคตเฅเคนเคพ",
+ "description": "เคเคชเฅเคชเคพ เคฎเคพเคฐเคพ, เคชเฅเคฐเคถเฅเคจ เคตเคฟเคเคพเคฐเคพ เคเคฃเคฟ เคเคฒเฅเคชเคจเคพ เคถเฅเค
เคฐ เคเคฐเคพ.",
+ "cta": "Discord เคฎเคงเฅเคฏเฅ เคธเคพเคฎเฅเคฒ เคตเฅเคนเคพ"
+ },
+ "builders": {
+ "title": "npmx เคคเคฏเคพเคฐ เคเคฐเคฃเฅเคฏเคพเคค เคฎเคฆเคค เคเคฐเคพ",
+ "description": "npmx เคเฅ เคญเคตเคฟเคทเฅเคฏ เคเคกเคตเคฃเคพเคฑเฅเคฏเคพ เคฌเคฟเคฒเฅเคกเคฐเฅเคธเคฎเคงเฅเคฏเฅ เคธเคพเคฎเฅเคฒ เคตเฅเคนเคพ.",
+ "cta": "Builders Discord เคฎเคงเฅเคฏเฅ เคธเคพเคฎเฅเคฒ เคตเฅเคนเคพ"
+ },
+ "follow": {
+ "title": "เค
เคฆเฅเคฏเคฏเคพเคตเคค เคฐเคนเคพ",
+ "description": "npmx เคฌเคฆเฅเคฆเคฒเคเฅ เคคเคพเคเฅ เค
เคชเคกเฅเคเฅเคธ เคเคพเคฃเฅเคจ เคเฅเคฏเคพ.",
+ "cta": "Bluesky เคตเคฐ เคซเฅเคฒเฅ เคเคฐเคพ"
+ }
}
},
"account_menu": {
- "account": "เคเคพเคคเฅ"
+ "connect": "เคเฅเคกเคพ",
+ "account": "เคเคพเคคเฅ",
+ "npm_cli": "npm CLI",
+ "atmosphere": "Atmosphere",
+ "npm_cli_desc": "เคชเฅ
เคเฅเคเฅเคธ เคเคฃเคฟ เคธเคเคธเฅเคฅเคพ เคตเฅเคฏเคตเคธเฅเคฅเคพเคชเคฟเคค เคเคฐเคพ",
+ "atmosphere_desc": "เคธเคพเคฎเคพเคเคฟเค เคตเฅเคถเคฟเคทเฅเคเฅเคฏเฅ เคเคฃเคฟ เคเคณเค",
+ "connect_npm_cli": "npm CLI เคถเฅ เคเฅเคกเคพ",
+ "connect_atmosphere": "Atmosphere เคถเฅ เคเฅเคกเคพ",
+ "connecting": "เคเฅเคกเคค เคเคนเฅ...",
+ "ops": "{count} เคเคชเคฐเฅเคถเคจ | {count} เคเคชเคฐเฅเคถเคจเฅเคธ"
},
"auth": {
- "modal": {}
+ "modal": {
+ "title": "Atmosphere",
+ "connected_as": "{'@'}{handle} เคฎเฅเคนเคฃเฅเคจ เคเฅเคกเคฒเฅเคฒเฅ",
+ "disconnect": "เคตเคฟเคฏเฅเค เคเคฐเคพ",
+ "connect_prompt": "เคคเฅเคฎเคเฅเคฏเคพ Atmosphere เคเคพเคคเฅเคฏเคพเคจเฅ เคเฅเคกเคพ",
+ "handle_label": "เคนเคเคกเคฒ",
+ "handle_placeholder": "alice.npmx.social",
+ "connect": "เคเฅเคกเคพ",
+ "create_account": "เคจเคตเฅเคจ เคเคพเคคเฅ เคคเคฏเคพเคฐ เคเคฐเคพ",
+ "connect_bluesky": "Bluesky เคธเคน เคเฅเคกเคพ",
+ "what_is_atmosphere": "Atmosphere เคเคพเคคเฅ เคเคพเคฏ เคเคนเฅ?",
+ "atmosphere_explanation": "{npmx} เคเคชเคฒเฅเคฏเคพ เค
เคจเฅเค เคธเคพเคฎเคพเคเคฟเค เคตเฅเคถเคฟเคทเฅเคเฅเคฏเคพเคเคธเคพเค เฅ {atproto} เคตเคพเคชเคฐเคคเฅ, เคเฅเคฏเคพเคฎเฅเคณเฅ เคตเคพเคชเคฐเคเคฐเฅเคคเฅ เคเคชเคฒเคพ เคกเฅเคเคพ เคธเฅเคตเคคเคเคเคกเฅ เค เฅเคตเฅ เคถเคเคคเคพเคค เคเคฃเคฟ เคธเคฐเฅเคต เคธเฅเคธเคเคเคค เค
เฅ
เคชเฅเคธเคธเคพเค เฅ เคเคเค เคเคพเคคเฅ เคตเคพเคชเคฐเฅ เคถเคเคคเคพเคค. เคเคเคฆเคพ เคคเฅเคฎเฅเคนเฅ เคเคพเคคเฅ เคคเคฏเคพเคฐ เคเฅเคฒเฅ เคเฅ, เคคเฅเคฎเฅเคนเฅ เคคเฅเคฏเคพเค เคเคพเคคเฅเคฏเคพเคจเฅ {bluesky} เคเคฃเคฟ {tangled} เคธเคพเคฐเคเฅ เคเคคเคฐ เค
เฅ
เคชเฅเคธเคนเฅ เคตเคพเคชเคฐเฅ เคถเคเคคเคพ.",
+ "default_input_error": "เคเฅเคชเคฏเคพ เคตเฅเคง เคนเคเคกเคฒ, DID เคเคฟเคเคตเคพ เคชเฅเคฐเฅเคฃ PDS URL เคชเฅเคฐเคตเคฟเคทเฅเค เคเคฐเคพ",
+ "profile": "เคชเฅเคฐเฅเคซเคพเคเคฒ"
+ }
},
"header": {
- "packages_dropdown": {},
- "orgs_dropdown": {}
+ "home": "npmx เคฎเฅเคเฅเคฏเคชเฅเคทเฅเค ",
+ "packages": "เคชเฅ
เคเฅเคเฅเคธ",
+ "packages_dropdown": {
+ "title": "เคคเฅเคฎเคเฅ เคชเฅ
เคเฅเคเฅเคธ",
+ "loading": "เคฒเฅเคก เคเคฐเคค เคเคนเฅ...",
+ "error": "เคชเฅ
เคเฅเคเฅเคธ เคฒเฅเคก เคเคฐเคฃเฅเคฏเคพเคค เค
เคฏเคถเคธเฅเคตเฅ",
+ "empty": "เคเฅเคฃเคคเฅเคนเฅ เคชเฅ
เคเฅเคเฅเคธ เคธเคพเคชเคกเคฒเฅ เคจเคพเคนเฅเคค",
+ "view_all": "เคธเคฐเฅเคต เคชเคนเคพ"
+ },
+ "orgs": "เคธเคเคธเฅเคฅเคพ",
+ "orgs_dropdown": {
+ "title": "เคคเฅเคฎเคเฅเคฏเคพ เคธเคเคธเฅเคฅเคพ",
+ "loading": "เคฒเฅเคก เคเคฐเคค เคเคนเฅ...",
+ "error": "เคธเคเคธเฅเคฅเคพ เคฒเฅเคก เคเคฐเคฃเฅเคฏเคพเคค เค
เคฏเคถเคธเฅเคตเฅ",
+ "empty": "เคเฅเคฃเคคเฅเคฏเคพเคนเฅ เคธเคเคธเฅเคฅเคพ เคธเคพเคชเคกเคฒเฅเคฏเคพ เคจเคพเคนเฅเคค",
+ "view_all": "เคธเคฐเฅเคต เคชเคนเคพ"
+ },
+ "pr": "GitHub pull request #{prNumber} เคเคเคกเคพ"
},
"compare": {
- "packages": {},
- "selector": {},
- "no_dependency": {},
+ "packages": {
+ "title": "เคชเฅ
เคเฅเคเฅเคธเคเฅ เคคเฅเคฒเคจเคพ เคเคฐเคพ",
+ "tagline": "เคฏเฅเคเฅเคฏ เคชเฅ
เคเฅเค เคจเคฟเคตเคกเคฃเฅเคฏเคพเคธเคพเค เฅ npm เคชเฅ
เคเฅเคเฅเคธเคเฅ เคถเฅเคเคพเคฐเฅ-เคถเฅเคเคพเคฐเฅ เคคเฅเคฒเคจเคพ เคเคฐเคพ.",
+ "meta_title": "{packages} เคเฅ เคคเฅเคฒเคจเคพ - npmx",
+ "meta_title_empty": "เคชเฅ
เคเฅเคเฅเคธเคเฅ เคคเฅเคฒเคจเคพ - npmx",
+ "meta_description": "{packages} เคเฅ เคถเฅเคเคพเคฐเฅ-เคถเฅเคเคพเคฐเฅ เคคเฅเคฒเคจเคพ",
+ "meta_description_empty": "npm เคชเฅ
เคเฅเคเฅเคธเคเฅ เคถเฅเคเคพเคฐเฅ-เคถเฅเคเคพเคฐเฅ เคคเฅเคฒเคจเคพ เคเคฐเคพ",
+ "section_packages": "เคชเฅ
เคเฅเคเฅเคธ",
+ "section_facets": "เคเคเค",
+ "section_comparison": "เคคเฅเคฒเคจเคพ",
+ "copy_as_markdown": "เคคเคเฅเคคเคพ เคเฅเคชเฅ เคเคฐเคพ",
+ "loading": "เคชเฅ
เคเฅเค เคกเฅเคเคพ เคฒเฅเคก เคเคฐเคค เคเคนเฅ...",
+ "error": "เคชเฅ
เคเฅเค เคกเฅเคเคพ เคฒเฅเคก เคเคฐเคฃเฅเคฏเคพเคค เค
เคฏเคถเคธเฅเคตเฅ. เคเฅเคชเคฏเคพ เคชเฅเคจเฅเคนเคพ เคชเฅเคฐเคฏเคคเฅเคจ เคเคฐเคพ.",
+ "empty_title": "เคคเฅเคฒเคจเฅเคธเคพเค เฅ เคชเฅ
เคเฅเคเฅเคธ เคจเคฟเคตเคกเคพ",
+ "empty_description": "เคคเฅเคฏเคพเคเคเฅ เคฎเฅเคเฅเคฐเคฟเคเฅเคธ เคถเฅเคเคพเคฐเฅ-เคถเฅเคเคพเคฐเฅ เคชเคพเคนเคฃเฅเคฏเคพเคธเคพเค เฅ เคตเคฐ เคเคฟเคฎเคพเคจ 2 เคชเฅ
เคเฅเคเฅเคธ เคถเฅเคงเคพ เคเคฃเคฟ เคเฅเคกเคพ.",
+ "table_view": "เคคเคเฅเคคเคพ",
+ "charts_view": "เคเคพเคฐเฅเคเฅเคธ"
+ },
+ "selector": {
+ "search_label": "เคชเฅ
เคเฅเคเฅเคธ เคถเฅเคงเคพ",
+ "search_first": "เคเคเคพเคฆเฅ เคชเฅ
เคเฅเค เคถเฅเคงเคพ...",
+ "search_add": "เคเคฃเคเฅ เคเค เคชเฅ
เคเฅเค เคเฅเคกเคพ...",
+ "searching": "เคถเฅเคงเคค เคเคนเฅ...",
+ "remove_package": "{package} เคเคพเคขเคพ",
+ "packages_selected": "{count}/{max} เคชเฅ
เคเฅเคเฅเคธ เคจเคฟเคตเคกเคฒเฅ.",
+ "add_hint": "เคคเฅเคฒเคจเฅเคธเคพเค เฅ เคเคฟเคฎเคพเคจ 2 เคชเฅ
เคเฅเคเฅเคธ เคเฅเคกเคพ."
+ },
+ "no_dependency": {
+ "label": "(เคจเคฟเคฐเฅเคญเคฐเคคเคพ เคจเคพเคนเฅ)",
+ "typeahead_title": "James เคเคพเคฏ เคเคฐเฅเคฒ?",
+ "typeahead_description": "เคจเคฟเคฐเฅเคญเคฐเคคเคพ เคจ เคตเคพเคชเคฐเคคเคพ เคคเฅเคฒเคจเคพ เคเคฐเคพ! e18e เคฎเคพเคจเฅเคฏ.",
+ "tooltip_title": "เคเคฆเคพเคเคฟเคค เคคเฅเคฎเฅเคนเคพเคฒเคพ เคจเคฟเคฐเฅเคญเคฐเคคเฅเคเฅ เคเคฐเค เคจเคพเคนเฅ",
+ "tooltip_description": "เคจเคฟเคฐเฅเคญเคฐเคคเคพ เคจ เคตเคพเคชเคฐเคคเคพ เคคเฅเคฒเคจเคพ เคเคฐเคพ! {link} เค
เคถเคพ เคชเฅ
เคเฅเคเฅเคธเคเฅ เคฏเคพเคฆเฅ เคฐเคพเคเคคเฅ เคเฅ native APIs เคเคฟเคเคตเคพ เค
เคงเคฟเค เคธเฅเคชเฅเคฏเคพ เคชเคฐเฅเคฏเคพเคฏเคพเคเคจเฅ เคฌเคฆเคฒเคคเคพ เคฏเฅเคคเคพเคค.",
+ "e18e_community": "e18e เคธเคฎเฅเคฆเคพเคฏ",
+ "add_column": "เคคเฅเคฒเคจเฅเคค เคจเคฟเคฐเฅเคญเคฐเคคเคพ เคจเคธเคฒเฅเคฒเคพ เคธเฅเคคเคเคญ เคเฅเคกเคพ"
+ },
"facets": {
- "categories": {},
+ "group_label": "เคคเฅเคฒเคจเคพ เคเคเค",
+ "all": "เคธเคฐเฅเคต",
+ "none": "เคเคพเคนเฅเคนเฅ เคจเคพเคนเฅ",
+ "coming_soon": "เคฒเคตเคเคฐเค เคฏเฅเคค เคเคนเฅ",
+ "select_all": "เคธเคฐเฅเคต เคเคเค เคจเคฟเคตเคกเคพ",
+ "deselect_all": "เคธเคฐเฅเคต เคเคเคเคพเคเคเฅ เคจเคฟเคตเคก เคฐเคฆเฅเคฆ เคเคฐเคพ",
+ "select_category": "{category} เคฎเคงเฅเคฒ เคธเคฐเฅเคต เคเคเค เคจเคฟเคตเคกเคพ",
+ "deselect_category": "{category} เคฎเคงเฅเคฒ เคธเคฐเฅเคต เคเคเคเคพเคเคเฅ เคจเคฟเคตเคก เคฐเคฆเฅเคฆ เคเคฐเคพ",
+ "binary_only_tooltip": "เคนเฅ เคชเฅ
เคเฅเค binaries เคเคเคก เคเคฐเคคเฅ เคเคฃเคฟ exports เคจเคพเคนเฅเคค",
+ "categories": {
+ "performance": "เคเคพเคฐเฅเคฏเคเฅเคทเคฎเคคเคพ",
+ "health": "เคธเฅเคฅเคฟเคคเฅ",
+ "compatibility": "เคธเฅเคธเคเคเคคเคคเคพ",
+ "security": "เคธเฅเคฐเคเฅเคทเคพ เคเคฃเคฟ เค
เคจเฅเคชเคพเคฒเคจ"
+ },
"items": {
- "packageSize": {},
- "installSize": {},
- "dependencies": {},
- "totalDependencies": {},
- "downloads": {},
- "totalLikes": {},
- "lastUpdated": {},
- "deprecated": {},
- "engines": {},
- "types": {},
- "moduleFormat": {},
- "license": {},
- "vulnerabilities": {}
+ "packageSize": {
+ "label": "เคชเฅ
เคเฅเค เคเคเคพเคฐ",
+ "description": "เคชเฅ
เคเฅเคเคเคพเค เคเคเคพเคฐ (unpacked)"
+ },
+ "installSize": {
+ "label": "เคธเฅเคฅเคพเคชเคจเคพ เคเคเคพเคฐ",
+ "description": "เคธเคฐเฅเคต เคจเคฟเคฐเฅเคญเคฐเคคเคพเคเคธเคน เคเคเฅเคฃ เคธเฅเคฅเคพเคชเคจเคพ เคเคเคพเคฐ"
+ },
+ "dependencies": {
+ "label": "เคชเฅเคฐเคคเฅเคฏเคเฅเคท เคจเคฟเคฐเฅเคญเคฐเคคเคพ",
+ "description": "เคชเฅเคฐเคคเฅเคฏเคเฅเคท เคจเคฟเคฐเฅเคญเคฐเคคเคพเคเคเฅ เคธเคเคเฅเคฏเคพ"
+ },
+ "totalDependencies": {
+ "label": "เคเคเฅเคฃ เคจเคฟเคฐเฅเคญเคฐเคคเคพ",
+ "description": "เค
เคชเฅเคฐเคคเฅเคฏเคเฅเคท เคจเคฟเคฐเฅเคญเคฐเคคเคพเคเคธเคน เคเคเฅเคฃ เคจเคฟเคฐเฅเคญเคฐเคคเคพเคเคเฅ เคธเคเคเฅเคฏเคพ"
+ },
+ "downloads": {
+ "label": "เคกเคพเคเคจเคฒเฅเคกเฅเคธ/เคเค เคตเคกเคพ",
+ "description": "เคธเคพเคชเฅเคคเคพเคนเคฟเค เคกเคพเคเคจเคฒเฅเคก เคธเคเคเฅเคฏเคพ"
+ },
+ "totalLikes": {
+ "label": "เคเคตเคกเฅ",
+ "description": "เคเคตเคกเฅเคเคเฅ เคธเคเคเฅเคฏเคพ"
+ },
+ "lastUpdated": {
+ "label": "เคชเฅเคฐเคเคพเคถเคฟเคค",
+ "description": "เคนเฅ เคเคตเฅเคคเฅเคคเฅ เคเคงเฅ เคชเฅเคฐเคเคพเคถเคฟเคค เคเคพเคฒเฅ"
+ },
+ "deprecated": {
+ "label": "เคเคพเคฒเคฌเคพเคนเฅเคฏ?",
+ "description": "เคนเฅ เคชเฅ
เคเฅเค เคเคพเคฒเคฌเคพเคนเฅเคฏ เคเฅเคทเคฟเคค เคเฅเคฒเฅ เคเคนเฅ เคเคพ"
+ },
+ "engines": {
+ "label": "เคเคเคเคฟเคจเฅเคธ",
+ "description": "Node.js เคเคตเฅเคคเฅเคคเฅ เคเคตเคถเฅเคฏเคเคคเคพ"
+ },
+ "types": {
+ "label": "เคชเฅเคฐเคเคพเคฐ",
+ "description": "TypeScript type definitions"
+ },
+ "moduleFormat": {
+ "label": "เคฎเฅเคกเฅเคฏเฅเคฒ เคธเฅเคตเคฐเฅเคช",
+ "description": "ESM/CJS เคธเคฎเคฐเฅเคฅเคจ"
+ },
+ "license": {
+ "label": "เคชเคฐเคตเคพเคจเคพ",
+ "description": "เคชเฅ
เคเฅเค เคชเคฐเคตเคพเคจเคพ"
+ },
+ "vulnerabilities": {
+ "label": "เค
เคธเฅเคฐเคเฅเคทเคฟเคคเคคเคพ",
+ "description": "เคเฅเคเคพเคค เคธเฅเคฐเคเฅเคทเคพ เค
เคธเฅเคฐเคเฅเคทเคฟเคคเคคเคพ"
+ }
+ },
+ "values": {
+ "any": "เคเฅเคฃเคคเฅเคนเฅ",
+ "none": "เคเคพเคนเฅเคนเฅ เคจเคพเคนเฅ",
+ "unknown": "เค
เคเฅเคเคพเคค",
+ "deprecated": "เคเคพเคฒเคฌเคพเคนเฅเคฏ",
+ "not_deprecated": "เคจเคพเคนเฅ",
+ "types_included": "เคธเคฎเคพเคตเคฟเคทเฅเค",
+ "types_none": "เคเคพเคนเฅเคนเฅ เคจเคพเคนเฅ",
+ "vulnerabilities_summary": "{count} ({critical}C/{high}H)",
+ "up_to_you": "เคจเคฟเคฐเฅเคฃเคฏ เคคเฅเคฎเคเคพ!"
},
- "values": {}
+ "trends": {
+ "title": "เคเฅเคฐเฅเคเคกเฅเคธเคเฅ เคคเฅเคฒเคจเคพ เคเคฐเคพ"
+ }
+ },
+ "file_changes": "เคซเคพเคเคฒ เคฌเคฆเคฒ",
+ "files_count": "{count} เคซเคพเคเคฒ | {count} เคซเคพเคเคฒเฅเคธ",
+ "lines_hidden": "{count} เคเคณ เคฒเคชเคตเคฒเฅ | {count} เคเคณเฅ เคฒเคชเคตเคฒเฅเคฏเคพ",
+ "file_too_large": "เคซเคพเคเคฒ เคคเฅเคฒเคจเคพ เคเคฐเคฃเฅเคฏเคพเคธเคพเค เฅ เคเฅเคช เคฎเฅเค เฅ เคเคนเฅ",
+ "file_size_warning": "เคคเฅเคฒเคจเฅเคธเคพเค เฅเคเฅ 250KB เคฎเคฐเฅเคฏเคพเคฆเคพ {size} เคจเฅ เคเคฒเคพเคเคกเคฒเฅ เคเคนเฅ",
+ "compare_versions": "เคซเคฐเค",
+ "compare_versions_title": "เคจเคตเฅเคจเคคเคฎ เคเคตเฅเคคเฅเคคเฅเคถเฅ เคคเฅเคฒเคจเคพ เคเคฐเคพ",
+ "comparing_versions_label": "เคเคตเฅเคคเฅเคคเฅเคฏเคพเคเคเฅ เคคเฅเคฒเคจเคพ เคเคฐเคค เคเคนเฅ...",
+ "version_back_to_package": "เคชเฅ
เคเฅเคเคเคกเฅ เคชเคฐเคค",
+ "version_error_message": "เคเคตเฅเคคเฅเคคเฅเคฏเคพเคเคเฅ เคคเฅเคฒเคจเคพ เคเคฐเคฃเฅเคฏเคพเคค เค
เคฏเคถเคธเฅเคตเฅ.",
+ "version_invalid_url_format": {
+ "hint": "เค
เคตเฅเคง เคคเฅเคฒเคจเคพ URL. เคนเคพ เคชเฅเคฐเคพเคฐเฅเคช เคตเคพเคชเคฐเคพ: {0}",
+ "from_version": "เคชเคพเคธเฅเคจ",
+ "to_version": "เคชเคฐเฅเคฏเคเคค"
+ },
+ "version_selector_title": "เคฏเคพ เคเคตเฅเคคเฅเคคเฅเคถเฅ เคคเฅเคฒเคจเคพ เคเคฐเคพ",
+ "summary": "เคธเคพเคฐเคพเคเคถ",
+ "deps_count": "{count} เคจเคฟเคฐเฅเคญเคฐเคคเคพ | {count} เคจเคฟเคฐเฅเคญเคฐเคคเคพ",
+ "dependencies": "เคจเคฟเคฐเฅเคญเคฐเคคเคพ",
+ "dev_dependencies": "เคกเฅเคต เคจเคฟเคฐเฅเคญเคฐเคคเคพ",
+ "peer_dependencies": "เคชเฅเค
เคฐ เคจเคฟเคฐเฅเคญเคฐเคคเคพ",
+ "optional_dependencies": "เคชเคฐเฅเคฏเคพเคฏเฅ เคจเคฟเคฐเฅเคญเคฐเคคเคพ",
+ "no_dependency_changes": "เคจเคฟเคฐเฅเคญเคฐเคคเฅเคค เคเฅเคฃเคคเฅเคนเฅ เคฌเคฆเคฒ เคจเคพเคนเฅเคค",
+ "file_filter_option": {
+ "all": "เคธเคฐเฅเคต ({count})",
+ "added": "เคเฅเคกเคฒเฅเคฒเฅเคฏเคพ ({count})",
+ "removed": "เคเคพเคขเคฒเฅเคฒเฅเคฏเคพ ({count})",
+ "modified": "เคฌเคฆเคฒเคฒเฅเคฒเฅเคฏเคพ ({count})"
+ },
+ "search_files_placeholder": "เคซเคพเคเคฒเฅเคธ เคถเฅเคงเคพ...",
+ "no_files_all": "เคซเคพเคเคฒเฅเคธ เคจเคพเคนเฅเคค",
+ "no_files_search": "\"{query}\" เคถเฅ เคเฅเคณเคฃเคพเคฑเฅเคฏเคพ เคซเคพเคเคฒเฅเคธ เคจเคพเคนเฅเคค",
+ "no_files_filtered": "{filter} เคซเคพเคเคฒเฅเคธ เคจเคพเคนเฅเคค",
+ "filter": {
+ "added": "เคเฅเคกเคฒเฅเคฒเฅเคฏเคพ",
+ "removed": "เคเคพเคขเคฒเฅเคฒเฅเคฏเคพ",
+ "modified": "เคฌเคฆเคฒเคฒเฅเคฒเฅเคฏเคพ"
+ },
+ "files_button": "เคซเคพเคเคฒเฅเคธ",
+ "select_file_prompt": "เคซเคฐเค เคชเคพเคนเคฃเฅเคฏเคพเคธเคพเค เฅ เคฌเคพเคเฅเคเฅเคฏเคพ เคชเคเฅเคเฅเคคเฅเคจ เคซเคพเคเคฒ เคจเคฟเคตเคกเคพ",
+ "close_files_panel": "เคซเคพเคเคฒเฅเคธ เคชเฅ
เคจเฅเคฒ เคฌเคเคฆ เคเคฐเคพ",
+ "filter_files_label": "เคฌเคฆเคฒเคพเคเฅเคฏเคพ เคชเฅเคฐเคเคพเคฐเคพเคจเฅเคธเคพเคฐ เคซเคพเคเคฒเฅเคธ เคซเคฟเคฒเฅเคเคฐ เคเคฐเคพ",
+ "change_ratio": "เคฌเคฆเคฒ เคเฅเคฃเฅเคคเฅเคคเคฐ",
+ "char_edits": "เค
เคเฅเคทเคฐ เคธเคเคชเคพเคฆเคจเฅ",
+ "diff_distance": "เคซเคฐเค เค
เคเคคเคฐ",
+ "loading_diff": "เคซเคฐเค เคฒเฅเคก เคเคฐเคค เคเคนเฅ...",
+ "loading_diff_error": "เคซเคฐเค เคฒเฅเคก เคเคฐเคฃเฅเคฏเคพเคค เค
เคฏเคถเคธเฅเคตเฅ",
+ "merge_modified_lines": "เคฌเคฆเคฒเคฒเฅเคฒเฅเคฏเคพ เคเคณเฅ เคเคเคคเฅเคฐ เคเคฐเคพ",
+ "no_content_changes": "เคฎเคเคเฅเคฐเคพเคค เคเฅเคฃเคคเฅเคนเฅ เคฌเคฆเคฒ เคเคขเคณเคฒเฅ เคจเคพเคนเฅเคค",
+ "options": "เคชเคฐเฅเคฏเคพเคฏ",
+ "view_file": "เคซเคพเคเคฒ เคชเคนเคพ",
+ "view_in_code_browser": "เคเฅเคก เคฌเฅเคฐเคพเคเคเคฐเคฎเคงเฅเคฏเฅ เคชเคนเคพ",
+ "word_wrap": "เคถเคฌเฅเคฆ เคเค"
+ },
+ "pds": {
+ "title": "npmx.social",
+ "meta_description": "npmx เคธเคฎเฅเคฆเคพเคฏเคพเคธเคพเค เฅ เค
เคงเคฟเคเฅเคค AT Protocol Personal Data Server (PDS).",
+ "join": {
+ "title": "เคธเคฎเฅเคฆเคพเคฏเคพเคค เคธเคพเคฎเฅเคฒ เคตเฅเคนเคพ",
+ "description": "เคคเฅเคฎเฅเคนเฅ atmosphere เคตเคฐ เคชเคนเคฟเคฒเฅ เคเคพเคคเฅ เคคเคฏเคพเคฐ เคเคฐเคค เค
เคธเคพเคฒ เคเคฟเคเคตเคพ เคตเคฟเคฆเฅเคฏเคฎเคพเคจ เคเคพเคคเฅ เคธเฅเคฅเคฒเคพเคเคคเคฐเคฟเคค เคเคฐเคค เค
เคธเคพเคฒ, เคคเฅเคฎเคเฅ เคฏเฅเคฅเฅ เคธเฅเคตเคพเคเคค เคเคนเฅ. เคคเฅเคฎเคเฅ เคธเคงเฅเคฏเคพเคเฅ เคเคพเคคเฅ เคคเฅเคฎเฅเคนเฅ เคคเฅเคฎเคเฅ handle, เคชเฅเคธเฅเคเฅเคธ เคเคฟเคเคตเคพ followers เคจ เคเคฎเคพเคตเคคเคพ เคธเฅเคฅเคฒเคพเคเคคเคฐเคฟเคค เคเคฐเฅ เคถเคเคคเคพ.",
+ "migrate": "PDS MOOver เคธเคน เคธเฅเคฅเคฒเคพเคเคคเคฐ เคเคฐเคพ"
+ },
+ "server": {
+ "title": "เคธเคฐเฅเคตเฅเคนเคฐ เคคเคชเคถเฅเคฒ",
+ "location_label": "เค เคฟเคเคพเคฃ:",
+ "location_value": "เคจเฅเคฏเฅเคฐเฅเคฎเคฌเคฐเฅเค, เคเคฐเฅเคฎเคจเฅ",
+ "infrastructure_label": "เคชเคพเคฏเคพเคญเฅเคค เคธเฅเคตเคฟเคงเคพ:",
+ "infrastructure_value": "Hetzner เคตเคฐ เคนเฅเคธเฅเค เคเฅเคฒเฅเคฒเฅ",
+ "privacy_label": "เคเฅเคชเคจเฅเคฏเคคเคพ:",
+ "privacy_value": "เคเคกเค EU เคกเฅเคเคพ เคธเคเคฐเคเฅเคทเคฃ เคเคพเคฏเคฆเฅเคฏเคพเคเคเฅเคฏเคพ เค
เคงเฅเคจ",
+ "learn_more": "npmx Atmosphere เคเคธเคพ เคตเคพเคชเคฐเคคเฅ เคคเฅ เคเคพเคฃเฅเคจ เคเฅเคฏเคพ"
+ },
+ "community": {
+ "title": "เคเคฅเฅ เคเฅเคฃ เคเคนเฅเคค",
+ "description": "เคเคงเฅเค npmx.social เคฒเคพ เคเคชเคฒเฅ เคเคฐ เคฎเฅเคนเคฃเคฃเคพเคฑเฅเคฏเคพ {count} เคเคพเคคเฅเคฏเคพเคเคชเฅเคเฅ เคเคพเคนเฅ:",
+ "loading": "PDS เคธเคฎเฅเคฆเคพเคฏ เคฒเฅเคก เคเคฐเคค เคเคนเฅ...",
+ "error": "PDS เคธเคฎเฅเคฆเคพเคฏ เคฒเฅเคก เคเคฐเคฃเฅเคฏเคพเคค เค
เคฏเคถเคธเฅเคตเฅ.",
+ "empty": "เคฆเคพเคเคตเคฃเฅเคฏเคพเคธเคพเค เฅ เคธเคฎเฅเคฆเคพเคฏ เคธเคฆเคธเฅเคฏ เคจเคพเคนเฅเคค.",
+ "view_profile": "{handle} เคเฅ เคชเฅเคฐเฅเคซเคพเคเคฒ เคชเคนเคพ",
+ "new_accounts": "...เคเคฃเคฟ atmosphere เคฎเคงเฅเคฏเฅ เคจเคตเฅเคจ เค
เคธเคฒเฅเคฒเฅ เคเคฃเคเฅ {count} เคเคพเคคเฅ"
}
},
"privacy_policy": {
+ "title": "เคเฅเคชเคจเฅเคฏเคคเคพ เคงเฅเคฐเคฃ",
+ "last_updated": "เคถเฅเคตเคเคเฅ เค
เคฆเฅเคฏเคคเคจ: {date}",
+ "welcome": "{app} เคฎเคงเฅเคฏเฅ เคคเฅเคฎเคเฅ เคธเฅเคตเคพเคเคค เคเคนเฅ. เคคเฅเคฎเคเฅเคฏเคพ เคเฅเคชเคจเฅเคฏเคคเฅเคเฅ เคธเคเคฐเคเฅเคทเคฃ เคเคฐเคฃเฅเคฏเคพเคธเคพเค เฅ เคเคฎเฅเคนเฅ เคตเคเคจเคฌเคฆเฅเคง เคเคนเฅเคค. เคฏเคพ เคงเฅเคฐเคฃเคพเคค เคเคฎเฅเคนเฅ เคเฅเคฃเคคเคพ เคกเฅเคเคพ เคเฅเคณเคพ เคเคฐเคคเฅ, เคคเฅ เคเคธเคพ เคตเคพเคชเคฐเคคเฅ เคเคฃเคฟ เคคเฅเคฎเคเฅเคฏเคพ เคฎเคพเคนเคฟเคคเฅเคฌเคพเคฌเคค เคคเฅเคฎเคเฅ เค
เคงเคฟเคเคพเคฐ เคเคพเคฏ เคเคนเฅเคค เคนเฅ เคธเฅเคชเคทเฅเค เคเฅเคฒเฅ เคเคนเฅ.",
"cookies": {
- "what_are": {},
- "types": {},
- "local_storage": {},
- "management": {}
- },
- "analytics": {},
- "authenticated": {},
- "data_retention": {},
- "your_rights": {},
- "contact": {},
- "changes": {}
+ "what_are": {
+ "title": "เคเฅเคเฅเค เคฎเฅเคนเคฃเคเฅ เคเคพเคฏ?",
+ "p1": "เคเฅเคเฅเค เคฏเคพ เคตเฅเคฌเคธเคพเคเคเคฒเคพ เคญเฅเค เคฆเคฟเคฒเฅเคฏเคพเคตเคฐ เคคเฅเคฎเคเฅเคฏเคพ เคกเคฟเคตเฅเคนเคพเคเคธเคตเคฐ เคธเคพเค เคตเคฒเฅเคฏเคพ เคเคพเคฃเคพเคฑเฅเคฏเคพ เคฒเคนเคพเคจ เคฎเคเคเฅเคฐ เคซเคพเคเคฒเฅเคธ เค
เคธเคคเคพเคค. เคตเคฟเคถเคฟเคทเฅเค เคชเคธเคเคคเฅ เคเคฃเคฟ เคธเฅเคเคฟเคเคเฅเค เคฒเคเฅเคทเคพเคค เค เฅเคตเฅเคจ เคคเฅเคฎเคเคพ เคฌเฅเคฐเคพเคเคเคฟเคเค เค
เคจเฅเคญเคต เค
เคงเคฟเค เคเคพเคเคเคฒเคพ เคเคฐเคฃเฅ เคนเคพ เคคเฅเคฏเคพเคเคเคพ เคเคฆเฅเคฆเฅเคถ เค
เคธเคคเฅ."
+ },
+ "types": {
+ "title": "เคเคฎเฅเคนเฅ เคเฅเคฃเคคเฅเคฏเคพ เคเฅเคเฅเค เคตเคพเคชเคฐเคคเฅ?",
+ "p1": "เคเคฎเฅเคนเฅ เคซเคเฅเคค เคธเคพเคเคเคเฅเคฏเคพ เคเคพเคฐเฅเคฏเคเฅเคทเคฎเคคเฅเคธเคพเค เฅ เค
เคคเฅเคฏเคพเคตเคถเฅเคฏเค เค
เคธเคฒเฅเคฒเฅเคฏเคพ เคนเฅเคคเฅเคธเคพเค เฅ {bold} เคตเคพเคชเคฐเคคเฅ. เคเคฎเฅเคนเฅ เคคเฅเคคเฅเคฏ-เคชเคเฅเคท เคเคฟเคเคตเคพ เคเคพเคนเคฟเคฐเคพเคค เคเฅเคเฅเค เคตเคพเคชเคฐเคค เคจเคพเคนเฅ.",
+ "bold": "เคเคตเคถเฅเคฏเค เคคเคพเคเคคเฅเคฐเคฟเค เคเฅเคเฅเค",
+ "li1": "{li11}{separator} {li12}",
+ "li2": "{li21}{separator} {li22}",
+ "separator": ":",
+ "cookie_vdpl": "__vdpl",
+ "cookie_vdpl_desc": "เคนเฅ เคเฅเคเฅ เคเคฎเคเคพ เคนเฅเคธเฅเคเคฟเคเค เคชเฅเคฐเคตเค เคพเคฆเคพเคฐ (Vercel) skew protection เคธเคพเค เฅ เคตเคพเคชเคฐเคคเฅ. เคคเฅเคฎเฅเคนเฅ เคฌเฅเคฐเคพเคเค เคเคฐเคค เค
เคธเคคเคพเคจเคพ เคจเคตเฅเคจ เค
เคฆเฅเคฏเคคเคจ เคชเฅเคฐเคธเคฟเคฆเฅเคง เคเคพเคฒเฅเคฏเคพเคธ เคฏเฅเคเฅเคฏ deployment version เคฎเคงเฅเคจ assets เคฎเคฟเคณเคพเคตเฅเคค เคฏเคพเคเฅ เคคเฅ เคเคพเคคเฅเคฐเฅ เคเคฐเคคเฅ. เคคเฅ เคคเฅเคฎเคเคพ เคฎเคพเคเฅเคตเคพ เคเฅเคค เคจเคพเคนเฅ.",
+ "cookie_h3": "h3",
+ "cookie_h3_desc": "เคนเฅ เคเคฎเคเฅ เคธเฅเคฐเคเฅเคทเคฟเคค เคธเคคเฅเคฐ เคเฅเคเฅ เคเคนเฅ. เคคเฅเคฎเฅเคนเฅ เคคเฅเคฎเคเฅ Atmosphere เคเคพเคคเฅ เคเฅเคกเคฒเฅเคฏเคพเคตเคฐ เคคเฅ OAuth access token เคธเคพเค เคตเคคเฅ. เคคเฅเคฎเคเฅ เคชเฅเคฐเคฎเคพเคฃเฅเคเคฐเคฃ เคเคพเคฒเฅเคฒเฅ เคธเคคเฅเคฐ เคเคฟเคเคตเฅเคจ เค เฅเคตเคฃเฅเคฏเคพเคธเคพเค เฅ เคคเฅ เคเคตเคถเฅเคฏเค เคเคนเฅ."
+ },
+ "local_storage": {
+ "title": "เคธเฅเคฅเคพเคจเคฟเค เคธเคเคเคฏเคจ",
+ "p1": "เคธเคคเฅเคฐ เคเฅเคเฅเค เคตเฅเคฏเคคเคฟเคฐเคฟเคเฅเคค, เคคเฅเคฎเคเฅเคฏเคพ เคชเฅเคฐเคฆเคฐเฅเคถเคจเคพเคเฅเคฏเคพ เคชเคธเคเคคเฅ เคเคคเคจ เคเคฐเคฃเฅเคฏเคพเคธเคพเค เฅ เคเคฎเฅเคนเฅ เคคเฅเคฎเคเฅเคฏเคพ เคฌเฅเคฐเคพเคเคเคฐเคเฅ {bold} เคตเคพเคชเคฐเคคเฅ. เคฏเคพเคฎเฅเคณเฅ เคคเฅเคฎเฅเคนเฅ เคจเคฟเคตเคกเคฒเฅเคฒเฅ เคฅเฅเคฎ (light/dark) เคเคฃเคฟ เคเคพเคนเฅ เคเคคเคฐ {settings} เคเคฎเฅเคนเคพเคฒเคพ เคฒเคเฅเคทเคพเคค เค เฅเคตเคคเคพ เคฏเฅเคคเคพเคค, เคคเฅเคฏเคพเคฎเฅเคณเฅ เคชเฅเคฐเคคเฅเคฏเฅเค เคญเฅเคเฅเคค เคชเฅเคจเฅเคนเคพ เคธเฅเคเค
เคช เคเคฐเคพเคตเคพ เคฒเคพเคเคค เคจเคพเคนเฅ.",
+ "bold": "Local Storage",
+ "p2": "เคนเฅ เคฎเคพเคนเคฟเคคเฅ เคชเฅเคฐเฅเคฃเคชเคฃเฅ เคเคพเคฐเฅเคฏเคพเคคเฅเคฎเค เคเคนเฅ, เคซเคเฅเคค เคคเฅเคฎเคเฅเคฏเคพ เคกเคฟเคตเฅเคนเคพเคเคธเคตเคฐเค เคธเคพเค เคตเคฒเฅ เคเคพเคคเฅ เคเคฃเคฟ {bold2}. เคเคฎเฅเคนเฅ เคคเฅ เคเฅเคตเคณ เคเคฎเคเฅเคฏเคพ เคตเฅเคฌเคธเคพเคเคเคตเคฐเฅเคฒ เคคเฅเคฎเคเคพ เค
เคจเฅเคญเคต เคธเฅเคงเคพเคฐเคฃเฅเคฏเคพเคธเคพเค เฅ เคตเคพเคชเคฐเคคเฅ.",
+ "bold2": "เคคเฅเคฏเคพเคค เคเฅเคฃเคคเคพเคนเฅ เคตเฅเคฏเคเฅเคคเคฟเค เคกเฅเคเคพ เคจเคธเคคเฅ เคเคฃเคฟ เคคเฅเคฎเคเคพ เคฎเคพเคเฅเคตเคพ เคเฅเคฃเฅเคฏเคพเคธเคพเค เฅ เคคเคฟเคเคพ เคตเคพเคชเคฐ เคเฅเคฒเคพ เคเคพเคค เคจเคพเคนเฅ",
+ "settings": "เคธเฅเคเคฟเคเคเฅเค"
+ },
+ "management": {
+ "title": "เคเฅเคเฅเค เคตเฅเคฏเคตเคธเฅเคฅเคพเคชเคฟเคค เคเคฐเคฃเฅ",
+ "p1": "เคคเฅเคฎเคเฅเคฏเคพ เคชเคธเคเคคเฅเคจเฅเคธเคพเคฐ เคเฅเคเฅเค เคธเฅเคตเฅเคเคพเคฐเคฃเฅ, เคจเคพเคเคพเคฐเคฃเฅ เคเคฟเคเคตเคพ เคนเคเคตเคฃเฅ เคฏเคพเคธเคพเค เฅ เคคเฅเคฎเฅเคนเฅ เคคเฅเคฎเคเคพ เคฌเฅเคฐเคพเคเคเคฐ เคเฅเคจเฅเคซเคฟเคเคฐ เคเคฐเฅ เคถเคเคคเคพ. เคฎเคพเคคเฅเคฐ เคเฅเคชเคฏเคพ เคฒเคเฅเคทเคพเคค เคเฅเคฏเคพ เคเฅ {bold}.",
+ "bold": "เคเคตเคถเฅเคฏเค เคเฅเคเฅเค เคจเคพเคเคพเคฐเคฒเฅเคฏเคพเคธ เค
เคจเฅเคชเฅเคฐเคฏเฅเคเคพเคเคพ เคชเฅเคฐเฅเคฃ เคตเคพเคชเคฐ เคเคฐเคคเคพ เคฏเฅเคฃเคพเคฐ เคจเคพเคนเฅ",
+ "p2": "เคธเคฐเฅเคตเคพเคงเคฟเค เคตเคพเคชเคฐเคฒเฅเคฏเคพ เคเคพเคฃเคพเคฑเฅเคฏเคพ เคฌเฅเคฐเคพเคเคเคฐเคฎเคงเฅเคฏเฅ เคเฅเคเฅ เคตเฅเคฏเคตเคธเฅเคฅเคพเคชเคจเคพเคธเคพเค เฅเคเฅเคฏเคพ เคธเฅเคเคจเคพเคเคเฅเคฏเคพ เคฒเคฟเคเค เคเคพเคฒเฅ เคฆเคฟเคฒเฅเคฏเคพ เคเคนเฅเคค:",
+ "chrome": "Google Chrome (เคจเคตเฅเคจ เคตเคฟเคเคกเฅเคฎเคงเฅเคฏเฅ เคเคเคกเคคเฅ)",
+ "firefox": "Mozilla Firefox (เคจเคตเฅเคจ เคตเคฟเคเคกเฅเคฎเคงเฅเคฏเฅ เคเคเคกเคคเฅ)",
+ "edge": "Microsoft Edge (เคจเคตเฅเคจ เคตเคฟเคเคกเฅเคฎเคงเฅเคฏเฅ เคเคเคกเคคเฅ)"
+ }
+ },
+ "analytics": {
+ "title": "เคตเคฟเคถเฅเคฒเฅเคทเคฃ",
+ "p1": "เค
เคญเฅเคฏเคพเคเคค เคเคฎเคเฅ เคตเฅเคฌเคธเคพเคเค เคเคถเฅ เคตเคพเคชเคฐเคคเคพเคค เคนเฅ เคธเคฎเคเคฃเฅเคฏเคพเคธเคพเค เฅ เคเคฎเฅเคนเฅ {bold} เคตเคพเคชเคฐเคคเฅ. เคฏเคพเคฎเฅเคณเฅ เคตเคพเคชเคฐเคเคฐเฅเคคเคพ เค
เคจเฅเคญเคต เคธเฅเคงเคพเคฐเคคเคพ เคฏเฅเคคเฅ เคเคฃเคฟ เคธเคฎเคธเฅเคฏเคพ เคเคณเคเคคเคพ เคฏเฅเคคเคพเคค.",
+ "bold": "Vercel Web Analytics",
+ "p2": "Vercel Analytics เคเฅเคชเคจเฅเคฏเคคเฅเคเคพ เคตเคฟเคเคพเคฐ เคเคฐเฅเคจ เคคเคฏเคพเคฐ เคเฅเคฒเฅ เคเคนเฅ:",
+ "li1": "เคคเฅ เคเฅเคเฅเค เคตเคพเคชเคฐเคค เคจเคพเคนเฅ",
+ "li2": "เคคเฅ เคตเฅเคฏเคเฅเคคเคฟเค เคเคณเคเคเคฟเคจเฅเคนเฅ เคเฅเคณเคพ เคเคฐเคค เคจเคพเคนเฅ",
+ "li3": "เคคเฅ เคตเคพเคชเคฐเคเคฐเฅเคคเฅเคฏเคพเคเคเคพ เคตเคฟเคตเคฟเคง เคตเฅเคฌเคธเคพเคเคเฅเคธเคตเคฐ เคฎเคพเคเฅเคตเคพ เคเฅเคค เคจเคพเคนเฅ",
+ "li4": "เคธเคฐเฅเคต เคกเฅเคเคพ เคเคเคคเฅเคฐเคฟเคค เคเคฃเคฟ เค
เคจเคพเคฎเคฟเค เคเฅเคฒเคพ เคเคพเคคเฅ",
+ "p3": "เคเฅเคณเคพ เคนเฅเคฃเคพเคฑเฅเคฏเคพ เคฎเคพเคนเคฟเคคเฅเคค เคซเคเฅเคค เคนเฅ เคธเคฎเคพเคตเคฟเคทเฅเค เค
เคธเคคเฅ: เคชเฅเคทเฅเค URL, referrer, เคฆเฅเคถ/เคชเฅเคฐเคฆเฅเคถ, เคกเคฟเคตเฅเคนเคพเคเคธ เคชเฅเคฐเคเคพเคฐ, เคฌเฅเคฐเคพเคเคเคฐ เคเคฃเคฟ เคเคชเคฐเฅเคเคฟเคเค เคธเคฟเคธเฅเคเคฎ. เคฏเคพ เคกเฅเคเคพเคตเคฐเฅเคจ เคธเฅเคตเคคเคเคคเฅเคฐ เคตเคพเคชเคฐเคเคฐเฅเคคเฅเคฏเคพเคเคเฅ เคเคณเค เคชเคเฅ เคถเคเคค เคจเคพเคนเฅ."
+ },
+ "authenticated": {
+ "title": "เคชเฅเคฐเคฎเคพเคฃเคฟเคค เคตเคพเคชเคฐเคเคฐเฅเคคเฅ",
+ "p1": "เคคเฅเคฎเฅเคนเฅ เคคเฅเคฎเคเฅ {bold} เคเคพเคคเฅ npmx เคถเฅ เคเฅเคกเคฒเฅเคฏเคพเคตเคฐ, เคเคฎเฅเคนเฅ เคคเฅเคฎเคเคพ OAuth access token เคธเฅเคฐเคเฅเคทเคฟเคค, HTTP-only เคธเคคเฅเคฐ เคเฅเคเฅเคฎเคงเฅเคฏเฅ เคธเคพเค เคตเคคเฅ. เคนเคพ token เคซเคเฅเคค เคคเฅเคฎเคเฅเคฏเคพ เคตเคคเฅเคจเฅ เคตเคฟเคจเคเคคเฅเคฏเคพเคเคเฅ เคชเฅเคฐเคฎเคพเคฃเฅเคเคฐเคฃ เคเคฐเคฃเฅเคฏเคพเคธเคพเค เฅ เคตเคพเคชเคฐเคฒเคพ เคเคพเคคเฅ.",
+ "bold": "Atmosphere",
+ "p2": "เคเคฎเฅเคนเฅ เคคเฅเคฎเคเฅ credentials เคธเคพเค เคตเคค เคจเคพเคนเฅ เคเคฃเคฟ เคคเฅเคฎเฅเคนเฅ เคตเคพเคชเคฐเคค เค
เคธเคฒเฅเคฒเฅเคฏเคพ เคตเฅเคถเคฟเคทเฅเคเฅเคฏเคพเคเคธเคพเค เฅ เคเฅเคตเคขเคพ เคเคตเคถเฅเคฏเค เคเคนเฅ เคคเฅเคฏเคพเคชเฅเคเฅเคทเคพ เค
เคงเคฟเค เคกเฅเคเคพ เคเคฎเฅเคนเฅ เคตเคพเคชเคฐเคค เคจเคพเคนเฅ. เคคเฅเคฎเฅเคนเฅ {settings} เคชเฅเคทเฅเค เคพเคตเคฐเฅเคจ เคเคงเฅเคนเฅ เคคเฅเคฎเคเฅ เคเคพเคคเฅ เคตเคฟเคฏเฅเค เคเคฐเฅ เคถเคเคคเคพ.",
+ "settings": "เคธเฅเคเคฟเคเคเฅเค"
+ },
+ "data_retention": {
+ "title": "เคกเฅเคเคพ เคเคคเคจ",
+ "p1": "เคคเฅเคฎเฅเคนเฅ เคฌเฅเคฐเคพเคเคเคฐ เคฌเคเคฆ เคเฅเคฒเฅเคฏเคพเคตเคฐ เคเคฟเคเคตเคพ เคเคพเคนเฅ เคเคพเคณ เคจเคฟเคทเฅเคเฅเคฐเคฟเคฏเคคเฅเคจเคเคคเคฐ เคธเคคเฅเคฐ เคเฅเคเฅเค เคเคชเฅเคเคช เคนเคเคตเคฒเฅเคฏเคพ เคเคพเคคเคพเคค. Local storage เคฎเคงเฅเคฒ เคชเคธเคเคคเฅ เคคเฅเคฎเฅเคนเฅ เคฌเฅเคฐเคพเคเคเคฐ เคกเฅเคเคพ เคธเคพเคซ เคเคฐเฅเคชเคฐเฅเคฏเคเคค เคคเฅเคฎเคเฅเคฏเคพ เคกเคฟเคตเฅเคนเคพเคเคธเคตเคฐ เคฐเคพเคนเคคเคพเคค. เคตเคฟเคถเฅเคฒเฅเคทเคฃเคพเคเคพ เคกเฅเคเคพ เคเคเคคเฅเคฐเคฟเคค เคธเฅเคตเคฐเฅเคชเคพเคค เค เฅเคตเคฒเคพ เคเคพเคคเฅ เคเคฃเคฟ เคคเฅ เคธเฅเคตเคคเคเคคเฅเคฐ เคตเคพเคชเคฐเคเคฐเฅเคคเฅเคฏเคพเคเคถเฅ เคเฅเคกเคคเคพ เคฏเฅเคค เคจเคพเคนเฅ."
+ },
+ "your_rights": {
+ "title": "เคคเฅเคฎเคเฅ เค
เคงเคฟเคเคพเคฐ",
+ "p1": "เคคเฅเคฎเฅเคนเคพเคฒเคพ เคเคพเคฒเฅเคฒ เค
เคงเคฟเคเคพเคฐ เคเคนเฅเคค:",
+ "li1": "เคเคฎเฅเคนเฅ เคเฅเคฃเคคเคพ เคกเฅเคเคพ เคเฅเคณเคพ เคเคฐเคคเฅ เคฏเคพเคเฅ เคฎเคพเคนเคฟเคคเฅ เคฎเคฟเคณเคตเคฃเฅ",
+ "li2": "เคคเฅเคฎเคเฅ local storage เคเคฃเคฟ เคเฅเคเฅเค เคเคงเฅเคนเฅ เคธเคพเคซ เคเคฐเคฃเฅ",
+ "li3": "เคคเฅเคฎเคเฅ เคชเฅเคฐเคฎเคพเคฃเฅเคเคฐเคฃ เคเคพเคฒเฅเคฒเฅ เคธเคคเฅเคฐ เคตเคฟเคฏเฅเค เคเคฐเคฃเฅ",
+ "li4": "เคเคฎเคเฅเคฏเคพ เคกเฅเคเคพ เคชเคฆเฅเคงเคคเฅเคเคฌเคฆเฅเคฆเคฒ เคฎเคพเคนเคฟเคคเฅ เคฎเคพเคเคตเคฃเฅ",
+ "p2": "เคเคฎเฅเคนเฅ เคตเฅเคฏเคเฅเคคเคฟเค เคกเฅเคเคพ เคเฅเคณเคพ เคเคฐเคค เคจเคธเคฒเฅเคฏเคพเคฎเฅเคณเฅ, เคธเคพเคฎเคพเคจเฅเคฏเคคเค เคนเคเคตเคฃเฅเคฏเคพเคธเคพเค เฅ เคเคฟเคเคตเคพ เคจเคฟเคฐเฅเคฏเคพเคค เคเคฐเคฃเฅเคฏเคพเคธเคพเค เฅ เคตเฅเคฏเคเฅเคคเคฟเค เคฎเคพเคนเคฟเคคเฅ เคจเคธเคคเฅ."
+ },
+ "contact": {
+ "title": "เคเคฎเคเฅเคฏเคพเคถเฅ เคธเคเคชเคฐเฅเค เคธเคพเคงเคพ",
+ "p1": "เคฏเคพ เคเฅเคชเคจเฅเคฏเคคเคพ เคงเฅเคฐเคฃเคพเคฌเคฆเฅเคฆเคฒ เคเคพเคนเฅ เคชเฅเคฐเคถเฅเคจ เคเคฟเคเคตเคพ เคเคฟเคเคคเคพ เค
เคธเคฒเฅเคฏเคพเคธ, เคเคฎเคเฅเคฏเคพ {link} เคตเคฐ เคเคถเฅเคฏเฅ เคเคเคกเฅเคจ เคคเฅเคฎเฅเคนเฅ เคเคฎเคเฅเคฏเคพเคถเฅ เคธเคเคชเคฐเฅเค เคธเคพเคงเฅ เคถเคเคคเคพ.",
+ "link": "GitHub เคฐเคฟเคชเฅเคเคฟเคเคฐเฅ"
+ },
+ "changes": {
+ "title": "เคฏเคพ เคงเฅเคฐเคฃเคพเคคเฅเคฒ เคฌเคฆเคฒ",
+ "p1": "เคเคฎเฅเคนเฅ เคตเฅเคณเฅเคตเฅเคณเฅ เคนเฅ เคเฅเคชเคจเฅเคฏเคคเคพ เคงเฅเคฐเคฃ เค
เคฆเฅเคฏเคฏเคพเคตเคค เคเคฐเฅ เคถเคเคคเฅ. เคเฅเคฃเคคเฅเคนเฅ เคฌเคฆเคฒ เค
เคฆเฅเคฏเคฏเคพเคตเคค เคชเฅเคจเคฐเคพเคตเคฒเฅเคเคจ เคคเคพเคฐเคเฅเคธเคน เคฏเคพ เคชเฅเคทเฅเค เคพเคตเคฐ เคชเฅเคฐเคเคพเคถเคฟเคค เคเฅเคฒเฅ เคเคพเคคเฅเคฒ."
+ }
+ },
+ "a11y": {
+ "title": "เคชเฅเคฐเคตเฅเคถเคฏเฅเคเฅเคฏเคคเคพ",
+ "footer_title": "a11y",
+ "welcome": "{app} เคถเคเฅเคฏ เคคเคฟเคคเคเฅเคฏเคพ เคเคพเคธเฅเคค เคฒเฅเคเคพเคเคจเคพ เคตเคพเคชเคฐเคคเคพ เคฏเคพเคตเฅ เค
เคถเฅ เคเคฎเคเฅ เคเคเฅเคเคพ เคเคนเฅ.",
+ "approach": {
+ "title": "เคเคฎเคเคพ เคฆเฅเคทเฅเคเคฟเคเฅเคจ",
+ "p1": "เคตเฅเคถเคฟเคทเฅเคเฅเคฏเฅ เคคเคฏเคพเคฐ เคเคฐเคคเคพเคจเคพ เคเคฎเฅเคนเฅ Web Content Accessibility Guidelines (WCAG) 2.2 เคเฅ เคชเคพเคฒเคจ เคเคฐเคฃเฅเคฏเคพเคเคพ เคชเฅเคฐเคฏเคคเฅเคจ เคเคฐเคคเฅ เคเคฃเคฟ เคคเฅเคฏเคพเคเคจเคพ เคธเคเคฆเคฐเฅเคญ เคฎเฅเคนเคฃเฅเคจ เคตเคพเคชเคฐเคคเฅ. WCAG เคเฅเคฏเคพ เคเฅเคฃเคคเฅเคฏเคพเคนเฅ เคธเฅเคคเคฐเคพเคเฅ เคชเฅเคฐเฅเคฃ เค
เคจเฅเคฐเฅเคชเคคเคพ เค
เคธเคฒเฅเคฏเคพเคเคพ เคเคฎเฅเคนเฅ เคฆเคพเคตเคพ เคเคฐเคค เคจเคพเคนเฅ - เคชเฅเคฐเคตเฅเคถเคฏเฅเคเฅเคฏเคคเคพ เคนเฅ เคธเคคเคค เคเคพเคฒเคฃเคพเคฐเฅ เคชเฅเคฐเคเฅเคฐเคฟเคฏเคพ เคเคนเฅ เคเคฃเคฟ เค
เคเฅเคจเคนเฅ เคฌเคฐเฅเค เคเคพเคฎ เคฌเคพเคเฅ เค
เคธเคคเฅ.",
+ "p2": "เคนเฅ เคธเคพเคเค เคเค {about} เคเคนเฅ. เคเคฎเคเฅเคฏเคพ เคจเคฟเคฏเคฎเคฟเคค เคตเคฟเคเคพเคธเคพเคเคพ เคญเคพเค เคฎเฅเคนเคฃเฅเคจ เคชเฅเคฐเคตเฅเคถเคฏเฅเคเฅเคฏเคคเฅเคคเฅเคฒ เคธเฅเคงเคพเคฐเคฃเคพ เคเคชเฅเคชเฅเคฏเคพเคเคชเฅเคชเฅเคฏเคพเคจเฅ เคเฅเคฒเฅเคฏเคพ เคเคพเคคเคพเคค.",
+ "about_link": "เคฎเฅเคเฅเคค-เคธเฅเคฐเฅเคค, เคธเคฎเฅเคฆเคพเคฏ-เคเคพเคฒเคฟเคค เคชเฅเคฐเคเคฒเฅเคช"
+ },
+ "measures": {
+ "title": "เคเคฎเฅเคนเฅ เคเคพเคฏ เคเคฐเคคเฅ",
+ "p1": "เคธเคเคชเฅเคฐเฅเคฃ เคธเคพเคเคเคตเคฐ เคเคฎเฅเคนเฅ เคธเคพเคงเฅเคฏ เคเคฐเคฃเฅเคฏเคพเคเคพ เคชเฅเคฐเคฏเคคเฅเคจ เคเคฐเคคเฅ เค
เคถเคพ เคเคพเคนเฅ เคเฅเคทเฅเคเฅ:",
+ "li1": "เคฏเฅเคเฅเคฏ เค เคฟเคเคพเคฃเฅ semantic HTML เคเคฃเคฟ ARIA attributes เคตเคพเคชเคฐเคฃเฅ.",
+ "li2": "relative เคฎเคเคเฅเคฐ เคเคเคพเคฐ เคตเคพเคชเคฐเคฃเฅ, เคเฅ เคคเฅเคฎเฅเคนเฅ เคฌเฅเคฐเคพเคเคเคฐเคฎเคงเฅเคฏเฅ เคธเคฎเคพเคฏเฅเคเคฟเคค เคเคฐเฅ เคถเคเคคเคพ.",
+ "li3": "เคธเคเคชเฅเคฐเฅเคฃ เคเคเคเคฐเคซเฅเคธเคฎเคงเฅเคฏเฅ เคเฅเคฌเฅเคฐเฅเคก เคจเฅเคตเฅเคนเคฟเคเฅเคถเคจเคฒเคพ เคธเคฎเคฐเฅเคฅเคจ เคฆเฅเคฃเฅ.",
+ "li4": "prefers-reduced-motion เคเคฃเคฟ prefers-color-scheme media queries เคเคพ เคเคฆเคฐ เคเคฐเคฃเฅ.",
+ "li5": "เคชเฅเคฐเฅเคถเคพ เคฐเคเค-เคตเคฟเคฐเฅเคงเคพเคเคพ เคตเคฟเคเคพเคฐ เคเคฐเฅเคจ เคกเคฟเคเคพเคเคจ เคเคฐเคฃเฅ.",
+ "li6": "เคเคพเคนเฅ เคชเคฐเคธเฅเคชเคฐเคธเคเคตเคพเคฆเฅ เคตเฅเคถเคฟเคทเฅเคเฅเคฏเคพเคเคจเคพ JavaScript เคฒเคพเคเคฒเฅ เคคเคฐเฅ เคเคตเคถเฅเคฏเค เคธเคพเคฎเคเฅเคฐเฅ JavaScript เคถเคฟเคตเคพเคฏ เคเคชเคฒเคฌเฅเคง เค
เคธเคฒเฅเคฏเคพเคเฅ เคเคพเคคเฅเคฐเฅ เคเคฐเคฃเฅ."
+ },
+ "limitations": {
+ "title": "เคเฅเคเคพเคค เคฎเคฐเฅเคฏเคพเคฆเคพ",
+ "p1": "เคธเคพเคเคเคเฅ เคเคพเคนเฅ เคญเคพเค - เคตเคฟเคถเฅเคทเคคเค เคชเฅ
เคเฅเค README เคธเคพเคฐเคเฅ เคคเฅเคคเฅเคฏ-เคชเคเฅเคท เคธเคพเคฎเคเฅเคฐเฅ - เคชเฅเคฐเคตเฅเคถเคฏเฅเคเฅเคฏเคคเคพ เคฎเคพเคจเคเคพเคเคชเคฐเฅเคฏเคเคค เคชเฅเคนเฅเคเคค เคจเคธเคคเฅเคฒ. เคเคฎเฅเคนเฅ เคเคพเคฒเคพเคเคคเคฐเคพเคจเฅ เคฏเคพ เคเฅเคทเฅเคคเฅเคฐเคพเคเคค เคธเฅเคงเคพเคฐเคฃเคพ เคเคฐเคค เคเคนเฅเคค."
+ },
+ "contact": {
+ "title": "เค
เคญเคฟเคชเฅเคฐเคพเคฏ",
+ "p1": "เคคเฅเคฎเฅเคนเคพเคฒเคพ {app} เคตเคฐ เคชเฅเคฐเคตเฅเคถเคฏเฅเคเฅเคฏเคคเฅเคคเฅเคฒ เค
เคกเคฅเคณเคพ เคเคขเคณเคฒเฅเคฏเคพเคธ, เคเคฎเคเฅเคฏเคพ {link} เคตเคฐ เคเคถเฅเคฏเฅ เคเคเคกเฅเคจ เคเคฎเฅเคนเคพเคฒเคพ เคเคณเคตเคพ. เคเคฎเฅเคนเฅ เค
เคถเคพ เค
เคนเคตเคพเคฒเคพเคเคจเคพ เคเคพเคเคญเฅเคฐเฅเคฏเคพเคจเฅ เคเฅเคคเฅ เคเคฃเคฟ เคคเฅเคฏเคพเคตเคฐ เคถเคเฅเคฏ เคคเคฟเคคเคเฅ เคเคพเคฎ เคเคฐเฅ.",
+ "link": "GitHub เคฐเคฟเคชเฅเคเคฟเคเคฐเฅ"
+ }
+ },
+ "translation_status": {
+ "title": "เคญเคพเคทเคพเคเคคเคฐ เคธเฅเคฅเคฟเคคเฅ",
+ "generated_at": "เคจเคฟเคฐเฅเคฎเคฟเคคเฅ เคคเคพเคฐเฅเค: {date}",
+ "welcome": "เคเคพเคฒเฅ เคฆเคฟเคฒเฅเคฒเฅเคฏเคพ เคญเคพเคทเคพเคเคชเฅเคเฅ เคเคเคพเคฆเฅเคฏเคพ เคญเคพเคทเฅเคค {npmx} เคเฅ เคญเคพเคทเคพเคเคคเคฐ เคเคฐเคฃเฅเคฏเคพเคค เคเคฎเฅเคนเคพเคฒเคพ เคฎเคฆเคค เคเคฐเคพเคฏเคเฅ เค
เคธเฅเคฒ, เคคเคฐ เคคเฅเคฎเฅเคนเฅ เคฏเฅเคเฅเคฏ เค เคฟเคเคพเคฃเฅ เคเคฒเคพ เคเคนเคพเคค! เคนเฅ เคเคชเฅเคเคช เค
เคฆเฅเคฏเคฏเคพเคตเคค เคนเฅเคฃเคพเคฐเฅ เคชเฅเคทเฅเค เคธเคงเฅเคฏเคพ เคคเฅเคฎเคเฅเคฏเคพ เคฎเคฆเคคเฅเคเฅ เคเคฐเค เค
เคธเคฒเฅเคฒเฅ เคธเคฐเฅเคต เคธเคพเคฎเคเฅเคฐเฅ เคจเฅเคนเคฎเฅ เคฆเคพเคเคตเคคเฅ.",
+ "p1": "เคเคฎเฅเคนเฅ {lang} เคนเฅ เคกเฅเคซเฅเคฒเฅเค เคญเคพเคทเคพ เคฎเฅเคนเคฃเฅเคจ เคตเคพเคชเคฐเคคเฅ, เคเคฃเคฟ เคเคเฅเคฃ {count} เคเคนเฅเคค. เคคเฅเคฎเฅเคนเคพเคฒเคพ เคญเคพเคทเคพเคเคคเคฐเฅ เคเฅเคกเคฃเฅเคฏเคพเคค เคฎเคฆเคค เคเคฐเคพเคฏเคเฅ เค
เคธเคฒเฅเคฏเคพเคธ, {bylang} เคฎเคงเฅเคฏเฅ เคญเคพเคทเคพ เคถเฅเคงเคพ เคเคฃเคฟ เคคเคชเคถเฅเคฒ เคตเคฟเคธเฅเคคเคพเคฐ เคเคฐเคพ.",
+ "p1_lang": "เค
เคฎเฅเคฐเคฟเคเคจ เคเคเคเฅเคฐเคเฅ (en-US)",
+ "p1_count": "0 เคธเคเคฆเฅเคถ | 1 เคธเคเคฆเฅเคถ |{count} เคธเคเคฆเฅเคถ",
+ "p2": "เคธเฅเคฐเฅ เคเคฐเคฃเฅเคฏเคพเคชเฅเคฐเฅเคตเฅ, เคเคฎเคเฅ เคญเคพเคทเคพเคเคคเคฐ เคชเฅเคฐเคเฅเคฐเคฟเคฏเคพ เคเคฃเคฟ เคคเฅเคฎเฅเคนเฅ เคเคธเฅ เคธเคนเคญเคพเคเฅ เคนเฅเค เคถเคเคคเคพ เคนเฅ เคเคพเคฃเฅเคจ เคเฅเคฃเฅเคฏเคพเคธเคพเค เฅ เคเฅเคชเคฏเคพ เคเคฎเคเฅ {guide} เคตเคพเคเคพ.",
+ "guide": "เคธเฅเคฅเคพเคจเคฟเคเฅเคเคฐเคฃ (i18n) เคฎเคพเคฐเฅเคเคฆเคฐเฅเคถเค",
+ "by_locale": "เคฒเฅเคเฅ
เคฒเคจเฅเคธเคพเคฐ เคญเคพเคทเคพเคเคคเคฐ เคชเฅเคฐเคเคคเฅ",
+ "by_file": "เคซเคพเคเคฒเคจเฅเคธเคพเคฐ เคญเคพเคทเคพเคเคคเคฐ เคชเฅเคฐเคเคคเฅ",
+ "complete_text": "เคนเฅ เคญเคพเคทเคพเคเคคเคฐ เคชเฅเคฐเฅเคฃ เคเคพเคฒเฅ เคเคนเฅ, เค
เคชเฅเคฐเคคเคฟเคฎ เคเคพเคฎ!",
+ "missing_text": "เคเคนเคพเคณ",
+ "missing_keys": "เคเคเคนเฅ เคญเคพเคทเคพเคเคคเคฐ เคเคนเคพเคณ เคจเคพเคนเฅ | เคเคนเคพเคณ เคญเคพเคทเคพเคเคคเคฐ | เคเคนเคพเคณ เคญเคพเคทเคพเคเคคเคฐเฅ",
+ "progress_label": "{locale} เคธเคพเค เฅ เคชเฅเคฐเคเคคเฅ เคธเฅเคฅเคฟเคคเฅ",
+ "table": {
+ "file": "เคซเคพเคเคฒ",
+ "status": "เคธเฅเคฅเคฟเคคเฅ",
+ "error": "เคซเคพเคเคฒ เคฏเคพเคฆเฅ เคฒเฅเคก เคเคฐเคคเคพเคจเคพ เคคเฅเคฐเฅเคเฅ.",
+ "empty": "เคเฅเคฃเคคเฅเคฏเคพเคนเฅ เคซเคพเคเคฒเฅเคธ เคธเคพเคชเคกเคฒเฅเคฏเคพ เคจเคพเคนเฅเคค",
+ "file_link": "GitHub เคตเคฐ {file} ({lang}) เคธเคเคชเคพเคฆเคฟเคค เคเคฐเคพ"
+ }
+ },
+ "action_bar": {
+ "title": "เคเฅเคฐเคฟเคฏเคพ เคชเคเฅเคเฅ",
+ "selection": "0 เคจเคฟเคตเคกเคฒเฅ | 1 เคจเคฟเคตเคกเคฒเฅ | {count} เคจเคฟเคตเคกเคฒเฅ",
+ "shortcut": "\"{key}\" เคฆเคพเคฌเฅเคจ เคเฅเคฐเคฟเคฏเคพเคเคตเคฐ เคซเฅเคเคธ เคเคฐเคพ",
+ "button_close_aria_label": "เคเฅเคฐเคฟเคฏเคพ เคชเคเฅเคเฅ เคฌเคเคฆ เคเคฐเคพ"
}
}
diff --git a/i18n/locales/nb-NO.json b/i18n/locales/nb-NO.json
index 63afe4dc61..0e6cbe9213 100644
--- a/i18n/locales/nb-NO.json
+++ b/i18n/locales/nb-NO.json
@@ -105,10 +105,14 @@
"theme_system": "System",
"language": "Sprรฅk",
"help_translate": "Hjelp med รฅ oversette npmx",
- "accent_colors": "Aksentfarger",
+ "accent_colors": {
+ "label": "Aksentfarger"
+ },
"clear_accent": "Fjern aksentfarge",
"translation_progress": "Oversettelsesfremdrift",
- "background_themes": "Bakgrunnsnyanse"
+ "background_themes": {
+ "label": "Bakgrunnsnyanse"
+ }
},
"i18n": {
"missing_keys": "{count} manglende oversettelse | {count} manglende oversettelser",
diff --git a/i18n/locales/ne-NP.json b/i18n/locales/ne-NP.json
index 06755befb0..a996e03c80 100644
--- a/i18n/locales/ne-NP.json
+++ b/i18n/locales/ne-NP.json
@@ -75,7 +75,9 @@
"theme_system": "เคธเคฟเคธเฅเคเคฎ",
"language": "เคญเคพเคทเคพ",
"help_translate": "npmx เค
เคจเฅเคตเคพเคฆ เคเคฐเฅเคจ เคธเคนเคฏเฅเค เคเคฐเฅเคจเฅเคนเฅเคธเฅ",
- "accent_colors": "เคเคเฅเคธเฅเคจเฅเค เคฐเคเคนเคฐเฅ",
+ "accent_colors": {
+ "label": "เคเคเฅเคธเฅเคจเฅเค เคฐเคเคนเคฐเฅ"
+ },
"clear_accent": "เคเคเฅเคธเฅเคจเฅเค เคฐเค เคนเคเคพเคเคจเฅเคนเฅเคธเฅ",
"translation_progress": "เค
เคจเฅเคตเคพเคฆ เคชเฅเคฐเคเคคเคฟ"
},
diff --git a/i18n/locales/pl-PL.json b/i18n/locales/pl-PL.json
index 8a63c9cb8d..8c25224427 100644
--- a/i18n/locales/pl-PL.json
+++ b/i18n/locales/pl-PL.json
@@ -107,7 +107,7 @@
"reply_count": "{count} odpowiedzi | {count} odpowiedลบ | {count} odpowiedzi | {count} odpowiedzi | {count} odpowiedzi",
"like_count": "{count} polubieล | {count} polubienie | {count} polubienia | {count} polubieล | {count} polubieล",
"repost_count": "{count} udostฤpnieล | {count} udostฤpnienie | {count} udostฤpnienia | {count} udostฤpnieล | {count} udostฤpnieล",
- "more_replies": "{count} odpowiedzi wiฤcej... | {count} odpowiedลบ wiฤcej... | {count} odpowiedzi wiฤcej... | {count} odpowiedzi wiฤcej... | {count} odpowiedzi wiฤcej..."
+ "more_replies": "jeszcze {count} odpowiedลบโฆ | jeszcze {count} odpowiedziโฆ | jeszcze {count} odpowiedziโฆ"
}
},
"settings": {
@@ -142,10 +142,14 @@
"theme_system": "Systemowy",
"language": "Jฤzyk",
"help_translate": "Pomรณลผ tลumaczyฤ npmx",
- "accent_colors": "Kolory akcentu",
+ "accent_colors": {
+ "label": "Kolory akcentu"
+ },
"clear_accent": "Wyczyลฤ kolor akcentu",
"translation_progress": "Postฤp tลumaczenia",
- "background_themes": "Odcieล tลa",
+ "background_themes": {
+ "label": "Odcieล tลa"
+ },
"keyboard_shortcuts_enabled": "Wลฤ
cz skrรณty klawiaturowe",
"keyboard_shortcuts_enabled_description": "Skrรณty klawiaturowe mogฤ
zostaฤ wyลฤ
czone jeลli kolidujฤ
z innymi skrรณtami przeglฤ
darki lub systemu"
},
diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json
index 9fd9bc949b..f90b8a2943 100644
--- a/i18n/locales/pt-BR.json
+++ b/i18n/locales/pt-BR.json
@@ -13,13 +13,32 @@
"trademark_disclaimer": "npm รฉ uma marca registrada da npm, Inc. Este site nรฃo รฉ afiliado com npm, Inc.",
"footer": {
"about": "sobre",
+ "blog": "blog",
"docs": "documentaรงรฃo",
"source": "cรณdigo-fonte",
"social": "redes sociais",
- "chat": "chat"
+ "chat": "chat",
+ "builders_chat": "construtores",
+ "keyboard_shortcuts": "atalhos de teclado"
},
"shortcuts": {
- "section": {}
+ "section": {
+ "global": "Global",
+ "search": "Pesquisar",
+ "package": "Pacote"
+ },
+ "focus_search": "Focar pesquisa",
+ "show_kbd_hints": "Destacar dicas de teclado",
+ "settings": "Abrir configuraรงรตes",
+ "compare": "Abrir comparaรงรฃo",
+ "compare_from_package": "Comparaรงรฃo aberta (preenchida previamente com o pacote atual)",
+ "navigate_results": "Navegar resultados",
+ "go_to_result": "Ir para resultado",
+ "open_code_view": "Abrir visualizador de cรณdigo",
+ "open_docs": "Abrir documentaรงรฃo",
+ "disable_shortcuts": "Pode desativar os atalhos do teclado em {settings}.",
+ "open_main": "Abrir informaรงรฃo principal",
+ "open_diff": "Abrir diferenรงa de versรตes"
},
"search": {
"label": "Pesquisar pacotes npm",
@@ -27,21 +46,34 @@
"button": "pesquisar",
"searching": "Pesquisando...",
"found_packages": "Nenhum pacote encontrado | 1 pacote encontrado | {count} pacotes encontrados",
+ "found_packages_sorted": "Nenhum resultado encontrado | Classificando o resultado {count} superior | Classificando {count} resultados principais",
"updating": "(atualizando...)",
"no_results": "Nenhum pacote encontrado para \"{query}\"",
+ "rate_limited": "Limite de pedidos npm atingido, tente novamente em alguns instantes",
"title": "pesquisar",
+ "title_search": "pesquisa: {search}",
+ "title_packages": "pesquisa de pacotes",
+ "meta_description": "Resultados da pesquisa para '{search}'",
+ "meta_description_packages": "Pesquisa de pacotes npm",
"not_taken": "{name} nรฃo estรก em uso",
"claim_prompt": "Reivindicar este nome de pacote no npm",
"claim_button": "Reivindicar \"{name}\"",
"want_to_claim": "Deseja reivindicar este nome de pacote?",
"start_typing": "Comece a digitar para pesquisar pacotes",
+ "algolia_disclaimer": "Desenvolvido por Algolia",
"exact_match": "exato",
"suggestion": {
"user": "usuรกrio",
"org": "organizaรงรฃo",
"view_user_packages": "Ver pacotes deste usuรกrio",
"view_org_packages": "Ver pacotes desta organizaรงรฃo"
- }
+ },
+ "instant_search": "Pesquisa instantรขnea",
+ "instant_search_on": "ativada",
+ "instant_search_off": "desativada",
+ "instant_search_turn_on": "ativar",
+ "instant_search_turn_off": "desativar",
+ "instant_search_advisory": "{label} {state} โ {action}"
},
"nav": {
"main_navigation": "Principal",
@@ -55,6 +87,31 @@
"links": "Links",
"tap_to_search": "Toque para pesquisar"
},
+ "blog": {
+ "title": "Blog",
+ "heading": "blog",
+ "meta_description": "Insights e atualizaรงรตes da comunidade npmx",
+ "author": {
+ "view_profile": "Veja o perfil de {name} no Bluesky"
+ },
+ "draft_badge": "Rascunho",
+ "draft_banner": "Este รฉ um rascunho nรฃo publicado. Pode estar incompleto ou conter imprecisรตes.",
+ "atproto": {
+ "view_on_bluesky": "Ver no Bluesky",
+ "reply_on_bluesky": "Responder no Bluesky",
+ "likes_on_bluesky": "Curtidas no Bluesky",
+ "like_or_reply_on_bluesky": "Curta esta postagem ou adicione seu comentรกrio no Bluesky",
+ "no_comments_yet": "Nenhum comentรกrio ainda.",
+ "could_not_load_comments": "Nรฃo foi possรญvel carregar comentรกrios.",
+ "comments": "Comentรกrios",
+ "loading_comments": "Carregando comentรกrios...",
+ "updating": "Atualizando...",
+ "reply_count": "{count} resposta | {count} respostas",
+ "like_count": "{count} curtida | {count} curtidas",
+ "repost_count": "{count} repostagem | {count} repostagens",
+ "more_replies": "{count} mais resposta... | {count} mais respostas..."
+ }
+ },
"settings": {
"title": "configuraรงรตes",
"tagline": "personalize sua experiรชncia npmx",
@@ -62,9 +119,20 @@
"sections": {
"appearance": "Aparรชncia",
"display": "Exibiรงรฃo",
- "language": "Idioma"
+ "search": "Recursos de pesquisa",
+ "language": "Idioma",
+ "keyboard_shortcuts": "Atalhos de teclado"
+ },
+ "data_source": {
+ "label": "Fonte de dados",
+ "description": "Escolha onde o npmx obtรฉm os dados de pesquisa. As pรกginas de pacotes individuais sempre usam o registro npm diretamente.",
+ "npm": "Registro npm",
+ "npm_description": "Busca listagens de pesquisa, organizaรงรฃo e usuรกrios diretamente do registro oficial do npm. \nAutoritรกrio, mas pode ser mais lento.",
+ "algolia": "Algolia",
+ "algolia_description": "Usa Algolia para pesquisas e pรกginas organizacionais e de usuรกrios mais rรกpidas."
},
- "data_source": {},
+ "instant_search": "Pesquisa instantรขnea",
+ "instant_search_description": "Navega atรฉ ร pรกgina de pesquisa e atualiza os resultados conforme vocรช digita.",
"relative_dates": "Datas relativas",
"include_types": "Incluir {'@'}types na instalaรงรฃo",
"include_types_description": "Adicionar pacote {'@'}types aos comandos de instalaรงรฃo para pacotes sem tipo",
@@ -76,9 +144,16 @@
"theme_system": "Sistema",
"language": "Idioma",
"help_translate": "Ajude a traduzir npmx",
- "accent_colors": "Cores de destaque",
+ "accent_colors": {
+ "label": "Cores de destaque"
+ },
"clear_accent": "Limpar cor de destaque",
- "translation_progress": "Progresso de traduรงรฃo"
+ "translation_progress": "Progresso de traduรงรฃo",
+ "background_themes": {
+ "label": "Tom de fundo"
+ },
+ "keyboard_shortcuts_enabled": "Habilitar atalhos de teclado",
+ "keyboard_shortcuts_enabled_description": "Os atalhos de teclado podem ser desativados se entrarem em conflito com outros atalhos do navegador ou do sistema"
},
"i18n": {
"missing_keys": "{count} traduรงรฃo ausente | {count} traduรงรตes ausentes",
@@ -88,6 +163,13 @@
"edit_on_github": "Editar no GitHub",
"view_guide": "Guia de traduรงรฃo"
},
+ "error": {
+ "401": "Nรฃo autorizado",
+ "404": "Pรกgina nรฃo encontrada",
+ "500": "Erro do Servidor Interno",
+ "503": "Serviรงo nรฃo disponรญvel",
+ "default": "Algo deu errado"
+ },
"common": {
"loading": "Carregando...",
"loading_more": "Carregando mais...",
@@ -95,6 +177,7 @@
"end_of_results": "Fim dos resultados",
"try_again": "Tente novamente",
"close": "Fechar",
+ "or": "ou",
"retry": "Repetir",
"copy": "copiar",
"copied": "copiado!",
@@ -109,9 +192,40 @@
"members": "membros"
},
"scroll_to_top": "Rolar para o topo",
+ "cancel": "Cancelar",
+ "save": "Salvar",
+ "edit": "Editar",
+ "error": "Erro",
"view_on": {
- "npm": "visualizar no npm",
- "github": "Ver no GitHub"
+ "npm": "Ver no npm",
+ "github": "Ver no GitHub",
+ "gitlab": "Ver no GitLab",
+ "bitbucket": "Ver no Bitbucket",
+ "codeberg": "Ver no Codeberg",
+ "git_repo": "Ver no repositรณrio Git",
+ "forgejo": "Ver em Forgejo",
+ "gitea": "Ver no Gitea",
+ "gitee": "Ver no Gitee",
+ "radicle": "Ver na Radicle",
+ "sourcehut": "Ver no SourceHut",
+ "tangled": "Ver em Tangled"
+ }
+ },
+ "profile": {
+ "display_name": "Nome visรญvel",
+ "description": "Descriรงรฃo",
+ "no_description": "Sem descriรงรฃo",
+ "website": "Site",
+ "website_placeholder": "https://example.com",
+ "likes": "Curtidas",
+ "seo_title": "{handle} - npmx",
+ "seo_description": "Perfil npmx de {handle}",
+ "not_found": "Perfil nรฃo encontrado",
+ "not_found_message": "O perfil de {handle} nรฃo foi encontrado.",
+ "invite": {
+ "message": "Parece que eles ainda nรฃo estรฃo usando o npmx. Quer contar a eles sobre isso?",
+ "share_button": "Compartilhar no Bluesky",
+ "compose_text": "Olรก, {'@'}{handle}! Vocรช jรก conferiu npmx.dev? ร um navegador para o registro npm rรกpido, moderno e de cรณdigo aberto.\nhttps://npmx.dev"
}
},
"package": {
@@ -126,6 +240,13 @@
"version": "Esta versรฃo foi descontinuada.",
"no_reason": "Nenhum motivo fornecido"
},
+ "size_increase": {
+ "title_size": "Aumento significativo de tamanho desde v{version}",
+ "title_deps": "Aumento significativo no nรบmero de dependรชncias desde v{version}",
+ "title_both": "Aumento significativo de tamanho e dependรชncias desde v{version}",
+ "size": "O tamanho da instalaรงรฃo aumentou em {percent} ({size} maior)",
+ "deps": "{count} mais dependรชncias"
+ },
"replacement": {
"title": "Vocรช pode nรฃo precisar desta dependรชncia.",
"native": "Isso pode ser substituรญdo por {replacement}, disponรญvel desde Node {nodeVersion}.",
@@ -133,14 +254,18 @@
"documented": "A {community} marcou este pacote como tendo alternativas mais performรกticas.",
"none": "Este pacote foi marcado como nรฃo mais necessรกrio, e sua funcionalidade provavelmente estรก disponรญvel nativamente em todas as engines.",
"learn_more": "Saiba mais",
+ "learn_more_above": "Saiba mais acima.",
"mdn": "MDN",
- "community": "comunidade"
+ "community": "comunidade",
+ "consider_no_dep": "+ Considerar sem dependรชncias?"
},
"stats": {
"license": "Licenรงa",
"deps": "Deps",
"install_size": "Tamanho de Instalaรงรฃo",
"vulns": "Vulnerabilidades",
+ "published": "Publicado",
+ "published_tooltip": "Data em que {package}{'@'}{version} foi publicado",
"view_dependency_graph": "Ver grรกfico de dependรชncias",
"inspect_dependency_tree": "Inspecionar รกrvore de dependรชncias",
"size_tooltip": {
@@ -166,6 +291,7 @@
"view_source": "Ver cรณdigo-fonte"
},
"links": {
+ "main": "principal",
"repo": "repositรณrio",
"homepage": "pรกgina inicial",
"issues": "problemas",
@@ -175,7 +301,10 @@
"fund": "financiar",
"compare": "comparar"
},
- "likes": {},
+ "likes": {
+ "like": "Gosto deste pacote",
+ "unlike": "Nรฃo gosto deste pacote"
+ },
"docs": {
"not_available": "Documentaรงรฃo nรฃo disponรญvel",
"not_available_detail": "Nรฃo conseguimos gerar documentaรงรฃo para esta versรฃo."
@@ -184,11 +313,14 @@
"title": "Comece agora",
"pm_label": "Gerenciador de pacotes",
"copy_command": "Copiar comando de instalaรงรฃo",
+ "copy_dev_command": "Copie o comando de instalaรงรฃo dev",
+ "dev_dependency_hint": "Geralmente instalado como uma dependรชncia de desenvolvimento",
"view_types": "Ver {package}"
},
"create": {
"title": "Criar novo projeto",
- "copy_command": "Copiar comando de criaรงรฃo"
+ "copy_command": "Copiar comando de criaรงรฃo",
+ "view": "{packageName} tem o mesmo mantenedor. Clique para mais detalhes."
},
"run": {
"title": "Executar",
@@ -197,17 +329,47 @@
"readme": {
"title": "Readme",
"no_readme": "README nรฃo disponรญvel.",
- "callout": {}
+ "toc_title": "Sumรกrio",
+ "callout": {
+ "note": "Nota",
+ "tip": "Dica",
+ "important": "Importante",
+ "warning": "Aviso",
+ "caution": "Cuidado"
+ },
+ "copy_as_markdown": "Copiar README como Markdown"
+ },
+ "provenance_section": {
+ "title": "Proveniรชncia",
+ "built_and_signed_on": "Criado e assinado em {provider}",
+ "view_build_summary": "Ver resumo da compilaรงรฃo",
+ "source_commit": "Commit de origem",
+ "build_file": "Arquivo de compilaรงรฃo",
+ "public_ledger": "Registro pรบblico",
+ "transparency_log_entry": "Entrada de registro de transparรชncia",
+ "view_more_details": "Ver mais detalhes",
+ "error_loading": "Falha ao carregar detalhes de proveniรชncia"
+ },
+ "security_downgrade": {
+ "title": "Reduรงรฃo de confianรงa",
+ "description_to_none_provenance": "Esta versรฃo foi publicada sem {provenance}.",
+ "description_to_none_trustedPublisher": "Esta versรฃo foi publicada sem {trustedPublishing}.",
+ "description_to_provenance_trustedPublisher": "Esta versรฃo usa {provenance} mas nรฃo {trustedPublishing}.",
+ "fallback_install_provenance": "Os comandos de instalaรงรฃo estรฃo fixados na versรฃo {version}, a รบltima versรฃo com proveniรชncia.",
+ "fallback_install_trustedPublisher": "Os comandos de instalaรงรฃo sรฃo fixados em {version}, a รบltima versรฃo com publicaรงรฃo de confianรงa.",
+ "provenance_link_text": "proveniรชncia",
+ "trusted_publishing_link_text": "publicaรงรฃo de confianรงa"
},
- "provenance_section": {},
- "security_downgrade": {},
"keywords_title": "Palavras-chave",
"compatibility": "Compatibilidade",
"card": {
"publisher": "Publicador",
+ "published": "Publicado",
"weekly_downloads": "Downloads semanais",
"keywords": "Palavras-chave",
- "license": "Licenรงa"
+ "license": "Licenรงa",
+ "select": "Selecionar pacote",
+ "select_maximum": "No mรกximo {count} pacotes podem ser selecionados"
},
"versions": {
"title": "Versรตes",
@@ -221,7 +383,38 @@
"more_tagged": "{count} mais marcadas",
"all_covered": "Todas as versรตes estรฃo cobertas pelas tags acima",
"deprecated_title": "{version} (descontinuada)",
- "view_all": "Ver {count} versรฃo | Ver todas as {count} versรตes"
+ "view_all": "Ver {count} versรฃo | Ver todas as {count} versรตes",
+ "view_all_versions": "Ver todas as versรตes",
+ "distribution_title": "Grupo Semver",
+ "distribution_modal_title": "Versรตes",
+ "distribution_range_date_same_year": "de {from} a {to}, {endYear}",
+ "distribution_range_date_multiple_years": "de {from}, {startYear} a {to}, {endYear}",
+ "grouping_major": "Principal",
+ "grouping_minor": "Menor",
+ "grouping_versions_title": "Versรตes",
+ "grouping_versions_all": "Todos",
+ "grouping_versions_only_recent": "Somente recentes",
+ "grouping_usage_title": "Uso",
+ "grouping_usage_all": "Todos",
+ "grouping_usage_most_used": "Mais usado",
+ "recent_versions_only_tooltip": "Mostrar apenas versรตes publicadas no รบltimo ano.",
+ "show_low_usage_tooltip": "Incluir grupos de versรตes com menos de 1% do total de downloads.",
+ "y_axis_label": "Transferรชncias",
+ "filter_placeholder": "Filtrar por semver (por exemplo, ^3.0.0)",
+ "filter_invalid": "Intervalo semver invรกlido",
+ "filter_help": "Ajuda do filtro de Semver",
+ "filter_tooltip": "Filtre as versรตes usando um {link}. Por exemplo, ^3.0.0 mostra todas as versรตes 3.x.",
+ "filter_tooltip_link": "faixa semver",
+ "no_matches": "Nenhuma versรฃo corresponde a esta faixa",
+ "copy_alt": {
+ "per_version_analysis": "A versรฃo de {version} foi baixada {downloads} vezes",
+ "general_description": "Grรกfico de barras mostrando downloads por versรฃo para {versions_count} versรตes {semver_grouping_mode} do pacote {package_name}, {date_range_label} da versรฃo {first_version} atรฉ a versรฃo {last_version}. A versรฃo mais baixada รฉ {max_downloaded_version} com {max_version_downloads} downloads. {per_version_analysis}. {watermark}"
+ },
+ "page_title": "Histรณrico de versรตes",
+ "current_tags": "Tags atuais",
+ "version_filter_placeholder": "Filtrar versรตes...",
+ "version_filter_label": "Filtrar versรตes",
+ "no_match_filter": "Nenhuma versรฃo corresponde a {filter}"
},
"dependencies": {
"title": "Dependรชncias ({count})",
@@ -231,7 +424,8 @@
"view_vulnerabilities": "Ver vulnerabilidades",
"outdated_major": "{count} versรฃo principal desatualizada (mais recente: {latest}) | {count} versรตes principais desatualizadas (mais recente: {latest})",
"outdated_minor": "{count} versรฃo secundรกria desatualizada (mais recente: {latest}) | {count} versรตes secundรกrias desatualizadas (mais recente: {latest})",
- "outdated_patch": "Atualizaรงรฃo de patch disponรญvel (mais recente: {latest})"
+ "outdated_patch": "Atualizaรงรฃo de patch disponรญvel (mais recente: {latest})",
+ "has_replacement": "Esta dependรชncia tem substituiรงรตes sugeridas"
},
"peer_dependencies": {
"title": "Dependรชncias Pares ({count})",
@@ -270,10 +464,53 @@
"date_range_multiline": "{start}\npara {end}",
"download_file": "Baixar {fileType}",
"toggle_annotator": "Alternar anotador",
- "items": {}
+ "toggle_stack_mode": "Alternar modo de pilha",
+ "open_options": "Abrir opรงรตes",
+ "close_options": "Fechar opรงรตes",
+ "legend_estimation": "Estimativa",
+ "no_data": "Nรฃo hรก dados disponรญveis",
+ "y_axis_label": "{granularity} {facet}",
+ "facet": "Faceta",
+ "title": "Tendรชncias",
+ "contributors_skip": "Nรฃo mostrado em Colaboradores (sem repositรณrio GitHub):",
+ "items": {
+ "downloads": "Transferรชncias",
+ "likes": "Curtidas",
+ "contributors": "Colaboradores"
+ },
+ "data_correction": "Correรงรฃo de dados",
+ "average_window": "Janela mรฉdia",
+ "smoothing": "Suavizaรงรฃo",
+ "prediction": "Previsรฃo",
+ "known_anomalies": "Anomalias conhecidas",
+ "known_anomalies_description": "Interpola sobre picos de download conhecidos causados โโpor bots ou problemas de CI.",
+ "known_anomalies_ranges": "Intervalos de anomalia",
+ "known_anomalies_range": "De {start} a {end}",
+ "known_anomalies_range_named": "{packageName}: de {start} a {end}",
+ "known_anomalies_none": "Nenhuma anomalia conhecida para este pacote. | Nenhuma anomalia conhecida para estes pacotes.",
+ "known_anomalies_contribute": "Contribuir dados de anomalia",
+ "apply_correction": "Aplicar correรงรฃo",
+ "copy_alt": {
+ "trend_none": "principalmente plano",
+ "trend_strong": "forte",
+ "trend_weak": "fraca",
+ "trend_undefined": "indefinido (dados insuficientes)",
+ "button_label": "Copiar texto alternativo",
+ "watermark": "Na parte inferior, uma marca d'รกgua diz \"./npmx um navegador rรกpido e moderno para o registro npm\"",
+ "analysis": "{package_name} comeรงa em {start_value} e termina em {end_value}, mostrando uma tendรชncia {trend} com uma inclinaรงรฃo de {downloads_slope} downloads por intervalo de tempo",
+ "estimation": "O valor final รฉ uma estimativa baseada em dados parciais do perรญodo atual.",
+ "estimations": "Os valores finais sรฃo estimativas baseadas em dados parciais do perรญodo corrente.",
+ "compare": "Grรกfico de linhas de comparaรงรฃo de download de pacotes para: {packages}.",
+ "single_package": "Grรกfico de linhas de downloads para o pacote {package}.",
+ "general_description": "O eixo Y representa o nรบmero de downloads. O eixo X representa o intervalo de datas, de {start_date} a {end_date}, com um perรญodo de {granularity}.{estimation_notice} {packages_analysis}. {watermark}.",
+ "facet_bar_general_description": "Grรกfico de barras horizontais para: {packages}, comparando {facet} ({description}). {facet_analysis} {watermark}.",
+ "facet_bar_analysis": "{package_name} tem um valor de {value}."
+ }
},
"downloads": {
- "title": "Downloads Semanais"
+ "title": "Downloads Semanais",
+ "community_distribution": "Ver distribuiรงรฃo de adoรงรฃo pela comunidade",
+ "subtitle": "Em todas as versรตes"
},
"install_scripts": {
"title": "Scripts de Instalaรงรฃo",
@@ -310,7 +547,8 @@
"high": "alta",
"moderate": "moderada",
"low": "baixa"
- }
+ },
+ "fixed_in_title": "Corrigido na versรฃo {version}"
},
"deprecated": {
"label": "Descontinuado",
@@ -353,10 +591,15 @@
},
"sort": {
"downloads": "Mais baixados",
+ "published": "Publicado recentemente",
"name_asc": "Nome (A-Z)",
"name_desc": "Nome (Z-A)"
},
- "size": {}
+ "size": {
+ "b": "{size} B",
+ "kb": "{size} KB",
+ "mb": "{size} MB"
+ }
},
"connector": {
"modal": {
@@ -376,7 +619,8 @@
"warning": "AVISO",
"warning_text": "Isso permite que npmx acesse seu CLI do npm. Conecte-se apenas a sites em que vocรช confia.",
"connect": "Conectar",
- "connecting": "Conectando..."
+ "connecting": "Conectando...",
+ "auto_open_url": "Abrir pรกgina de autenticaรงรฃo automaticamente"
}
},
"operations": {
@@ -392,7 +636,9 @@
"otp_placeholder": "Digite o cรณdigo OTP...",
"otp_label": "Senha de um รบnico uso",
"retry_otp": "Tentar novamente com OTP",
+ "retry_web_auth": "Tente novamente com autenticaรงรฃo da Web",
"retrying": "Tentando novamente...",
+ "open_web_auth": "Abrir link de autenticaรงรฃo da web",
"approve_operation": "Aprovar operaรงรฃo",
"remove_operation": "Remover operaรงรฃo",
"approve_all": "Aprovar Tudo",
@@ -514,6 +760,7 @@
"invalid_name": "Nome de pacote invรกlido:",
"available": "Este nome estรก disponรญvel!",
"taken": "Este nome jรก foi reivindicado.",
+ "missing_permission": "Vocรช nรฃo tem permissรฃo para adicionar um pacote no scope {'@'}{scope}.",
"similar_warning": "Pacotes similares existem - npm pode rejeitar este nome:",
"related": "Pacotes relacionados:",
"scope_warning_title": "Considere usar um pacote com escopo em vez disso",
@@ -556,7 +803,9 @@
"preview": "visualizar",
"code": "cรณdigo"
},
- "file_path": "Caminho do arquivo"
+ "file_path": "Caminho do arquivo",
+ "binary_file": "Arquivo binรกrio",
+ "binary_rendering_warning": "Tipo de arquivo nรฃo suportado para visualizaรงรฃo."
},
"badges": {
"provenance": {
@@ -591,7 +840,13 @@
"more_keywords": "+{count} mais",
"clear_all": "Limpar tudo",
"remove_filter": "Remover filtro {label}",
- "chips": {},
+ "chips": {
+ "search": "Procurar",
+ "downloads": "Transferรชncias",
+ "keyword": "Palavra-chave",
+ "security": "Seguranรงa",
+ "updated": "Atualizado"
+ },
"download_range": {
"any": "Qualquer",
"lt100": "< 100",
@@ -612,6 +867,7 @@
"secure": "Sem avisos",
"insecure": "Com avisos"
},
+ "view_selected": "Ver selecionados",
"sort": {
"label": "Ordenar pacotes",
"toggle_direction": "Alternar direรงรฃo de classificaรงรฃo",
@@ -622,6 +878,7 @@
"downloads_day": "Downloads/dia",
"downloads_month": "Downloads/mรชs",
"downloads_year": "Downloads/ano",
+ "published": "รltima publicaรงรฃo",
"name": "Nome",
"quality": "Qualidade",
"popularity": "Popularidade",
@@ -637,13 +894,15 @@
"version": "Versรฃo",
"description": "Descriรงรฃo",
"downloads": "Downloads/sem",
+ "published": "รltima publicaรงรฃo",
"maintainers": "Mantenedores",
"keywords": "Palavras-chave",
"quality_score": "Pontuaรงรฃo de qualidade",
"popularity_score": "Pontuaรงรฃo de popularidade",
"maintenance_score": "Pontuaรงรฃo de manutenรงรฃo",
"combined_score": "Pontuaรงรฃo combinada",
- "security": "Seguranรงa"
+ "security": "Seguranรงa",
+ "selection": "Selecionar pacote"
},
"view_mode": {
"label": "Modo de exibiรงรฃo",
@@ -699,7 +958,20 @@
"managers": "gerenciadores de pacotes"
}
},
- "team": {},
+ "sponsors": {
+ "title": "Patrocinadores"
+ },
+ "oss_partners": {
+ "title": "Parceiros OSS"
+ },
+ "team": {
+ "title": "Equipe",
+ "governance": "Governanรงa",
+ "role_steward": "administrador",
+ "role_maintainer": "mantenedor",
+ "sponsor": "patrocinador",
+ "sponsor_aria": "Patrocinador {name} no GitHub"
+ },
"contributors": {
"title": "Contribuidores",
"description": "npmx รฉ totalmente de cรณdigo aberto, construรญdo por uma comunidade incrรญvel de contribuidores. Junte-se a nรณs e vamos construir juntos a experiรชncia de navegaรงรฃo npm que sempre quisemos.",
@@ -719,6 +991,11 @@
"description": "Converse, faรงa perguntas e compartilhe ideias.",
"cta": "Junte-se ao Discord"
},
+ "builders": {
+ "title": "Ajude a construir o npmx",
+ "description": "Junte-se aos construtores que moldam o futuro do npmx.",
+ "cta": "Junte-se ao Discord dos Construtores"
+ },
"follow": {
"title": "Mantenha-se atualizado",
"description": "Descubra as novidades sobre npmx.",
@@ -750,7 +1027,9 @@
"create_account": "Criar uma nova conta",
"connect_bluesky": "Conectar com Bluesky",
"what_is_atmosphere": "O que รฉ uma conta da Atmosfera?",
- "atmosphere_explanation": "{npmx} usa o {atproto} para alimentar muitos de seus recursos sociais, permitindo que os usuรกrios possuam seus dados e usem uma conta para todos os aplicativos compatรญveis. Depois de criar uma conta, vocรช pode usar outros aplicativos como {bluesky} e {tangled} com a mesma conta."
+ "atmosphere_explanation": "{npmx} usa o {atproto} para alimentar muitos de seus recursos sociais, permitindo que os usuรกrios possuam seus dados e usem uma conta para todos os aplicativos compatรญveis. Depois de criar uma conta, vocรช pode usar outros aplicativos como {bluesky} e {tangled} com a mesma conta.",
+ "default_input_error": "Insira um identificador vรกlido, DID ou um URL PDS completo",
+ "profile": "Perfil"
}
},
"header": {
@@ -783,10 +1062,13 @@
"section_packages": "Pacotes",
"section_facets": "Aspectos",
"section_comparison": "Comparaรงรฃo",
+ "copy_as_markdown": "Copiar tabela",
"loading": "Carregando dados do pacote...",
"error": "Falha ao carregar dados do pacote. Por favor, tente novamente.",
"empty_title": "Selecione pacotes para comparar",
- "empty_description": "Pesquise e adicione pelo menos 2 pacotes acima para ver uma comparaรงรฃo lado a lado de suas mรฉtricas."
+ "empty_description": "Pesquise e adicione pelo menos 2 pacotes acima para ver uma comparaรงรฃo lado a lado de suas mรฉtricas.",
+ "table_view": "Tabela",
+ "charts_view": "Grรกficos"
},
"selector": {
"search_label": "Pesquisar por pacotes",
@@ -797,7 +1079,15 @@
"packages_selected": "{count}/{max} pacotes selecionados.",
"add_hint": "Adicione pelo menos 2 pacotes para comparar."
},
- "no_dependency": {},
+ "no_dependency": {
+ "label": "(Sem dependรชncia)",
+ "typeahead_title": "O que Tiago faria?",
+ "typeahead_description": "Compare com nรฃo usar uma dependรชncia! Aprovado por e18e.",
+ "tooltip_title": "Vocรช pode nรฃo precisar de uma dependรชncia",
+ "tooltip_description": "Compare com nรฃo usar uma dependรชncia! O {link} mantรฉm uma lista de pacotes que podem ser substituรญdos por APIs nativas ou alternativas mais simples.",
+ "e18e_community": "comunidade e18e",
+ "add_column": "Adicionar coluna sem dependรชncia ร comparaรงรฃo"
+ },
"facets": {
"group_label": "Aspectos de comparaรงรฃo",
"all": "todos",
@@ -807,6 +1097,7 @@
"deselect_all": "Desselecionar todos os aspectos",
"select_category": "Selecionar todos os aspectos {category}",
"deselect_category": "Desselecionar todos os aspectos {category}",
+ "binary_only_tooltip": "Este pacote expรตe binรกrios e nenhuma exportaรงรฃo",
"categories": {
"performance": "Performance",
"health": "Saรบde",
@@ -814,42 +1105,251 @@
"security": "Seguranรงa e Conformidade"
},
"items": {
- "packageSize": {},
- "installSize": {},
- "dependencies": {},
- "totalDependencies": {},
- "downloads": {},
- "totalLikes": {},
- "lastUpdated": {},
- "deprecated": {},
- "engines": {},
- "types": {},
- "moduleFormat": {},
- "license": {},
- "vulnerabilities": {}
+ "packageSize": {
+ "label": "Tamanho do pacote",
+ "description": "Tamanho do pacote em si (descompactado)"
+ },
+ "installSize": {
+ "label": "Tamanho da instalaรงรฃo",
+ "description": "Tamanho total da instalaรงรฃo, incluindo todas as dependรชncias"
+ },
+ "dependencies": {
+ "label": "Dependรชncias Diretas",
+ "description": "Nรบmero de dependรชncias diretas"
+ },
+ "totalDependencies": {
+ "label": "Dependรชncias totais",
+ "description": "Nรบmero total de dependรชncias, incluindo transitivas"
+ },
+ "downloads": {
+ "label": "Downloads/semana",
+ "description": "Contagem de downloads semanais"
+ },
+ "totalLikes": {
+ "label": "Curtidas",
+ "description": "Nรบmero de curtidas"
+ },
+ "lastUpdated": {
+ "label": "Publicado",
+ "description": "Quando esta versรฃo foi publicada"
+ },
+ "deprecated": {
+ "label": "Obsoleto?",
+ "description": "Se o pacote estรก obsoleto"
+ },
+ "engines": {
+ "label": "Motores",
+ "description": "Requisitos de versรฃo do Node.js."
+ },
+ "types": {
+ "label": "Tipos",
+ "description": "Definiรงรตes de tipos TypeScript"
+ },
+ "moduleFormat": {
+ "label": "Formato do mรณdulo",
+ "description": "Suporte ESM/CJS"
+ },
+ "license": {
+ "label": "Licenรงa",
+ "description": "Licenรงa do pacote"
+ },
+ "vulnerabilities": {
+ "label": "Vulnerabilidades",
+ "description": "Vulnerabilidades de seguranรงa conhecidas"
+ }
+ },
+ "values": {
+ "any": "Qualquer",
+ "none": "Nenhum",
+ "unknown": "Desconhecido",
+ "deprecated": "Obsoleto",
+ "not_deprecated": "Nรฃo",
+ "types_included": "Incluรญdo",
+ "types_none": "Nenhum",
+ "vulnerabilities_summary": "{count} ({critical}C/{high}A)",
+ "up_to_you": "Vocรช decide!"
},
- "values": {},
- "trends": {}
+ "trends": {
+ "title": "Comparar tendรชncias"
+ }
+ },
+ "file_changes": "Alteraรงรตes de arquivo",
+ "files_count": "{count} arquivo | {count} arquivos",
+ "lines_hidden": "{count} linha escondida | {count} linhas escondidas",
+ "file_too_large": "Arquivo muito grande para comparar",
+ "file_size_warning": "{size} excede o limite de 250 KB para comparaรงรฃo",
+ "compare_versions": "diferenรงa",
+ "compare_versions_title": "Compare com a versรฃo mais recente",
+ "version_selector_title": "Comparar com versรฃo",
+ "summary": "Resumo",
+ "deps_count": "{count} dependรชncia | {count} dependรชncias",
+ "dependencies": "Dependรชncias",
+ "dev_dependencies": "Dependรชncias de desenvolvimento",
+ "peer_dependencies": "Dependรชncias de pares",
+ "optional_dependencies": "Dependรชncias opcionais",
+ "no_dependency_changes": "Sem alteraรงรตes de dependรชncia",
+ "file_filter_option": {
+ "all": "Todos ({count})",
+ "added": "Adicionado ({count})",
+ "removed": "Removidos ({count})",
+ "modified": "Modificado ({count})"
+ },
+ "search_files_placeholder": "Pesquisar arquivos...",
+ "no_files_all": "Nenhum arquivo",
+ "no_files_search": "Nenhum arquivo correspondente a \"{query}\"",
+ "no_files_filtered": "Nenhum arquivo {filter}",
+ "filter": {
+ "added": "adicionado",
+ "removed": "removido",
+ "modified": "modificado"
+ },
+ "files_button": "Arquivos",
+ "select_file_prompt": "Selecione um arquivo na barra lateral para ver suas diferenรงas",
+ "close_files_panel": "Fechar painel de arquivos",
+ "filter_files_label": "Filtrar arquivos por tipo de alteraรงรฃo"
+ },
+ "pds": {
+ "title": "npmx.social",
+ "meta_description": "O AT Protocol Personal Data Server (PDS) oficial para a comunidade npmx.",
+ "join": {
+ "title": "Junte-se ร comunidade",
+ "description": "Esteja vocรช criando sua primeira conta na atmosfera ou migrando uma jรก existente, vocรช pertence aqui. Vocรช pode migrar sua conta atual sem perder seu controle, suas postagens ou seus seguidores.",
+ "migrate": "Migrar com PDS MOOver"
+ },
+ "server": {
+ "title": "Detalhes do servidor",
+ "location_label": "Localizaรงรฃo:",
+ "location_value": "Nuremberga, Alemanha",
+ "infrastructure_label": "Infraestrutura:",
+ "infrastructure_value": "Hospedado em Hetzner",
+ "privacy_label": "Privacidade:",
+ "privacy_value": "Sujeito ร s rigorosas leis de proteรงรฃo de dados da UE",
+ "learn_more": "Aprenda como o npmx usa a atmosfera"
+ },
+ "community": {
+ "title": "Quem estรก aqui",
+ "description": "Algumas das {count} contas que jรก estรฃo chamando npmx.social sua casa:",
+ "loading": "Carregando comunidade PDS...",
+ "error": "Falha ao carregar a comunidade PDS.",
+ "empty": "Nenhum membro da comunidade para exibir.",
+ "view_profile": "Veja o perfil de {handle}",
+ "new_accounts": "...e mais {count} que sรฃo novos na atmosfera"
}
},
"privacy_policy": {
+ "title": "polรญtica de privacidade",
+ "last_updated": "รltima atualizaรงรฃo: {date}",
+ "welcome": "Bem-vindo ao {app}. Estamos empenhados em proteger a sua privacidade. Esta polรญtica explica quais dados coletamos, como os utilizamos e seus direitos em relaรงรฃo ร s suas informaรงรตes.",
"cookies": {
- "what_are": {},
- "types": {},
- "local_storage": {},
- "management": {}
- },
- "analytics": {},
- "authenticated": {},
- "data_retention": {},
- "your_rights": {},
- "contact": {},
- "changes": {}
+ "what_are": {
+ "title": "O que sรฃo cookies?",
+ "p1": "Cookies sรฃo pequenos arquivos de texto armazenados no seu dispositivo quando vocรช visita um site. O seu objetivo รฉ melhorar a sua experiรชncia de navegaรงรฃo, lembrando certas preferรชncias e configuraรงรตes."
+ },
+ "types": {
+ "title": "Que cookies utilizamos?",
+ "p1": "Utilizamos {bold} apenas para fins estritamente necessรกrios ao funcionamento do site. Nรฃo utilizamos cookies de terceiros ou de publicidade.",
+ "bold": "cookies tรฉcnicos essenciais",
+ "li1": "{li11}{separator} {li12}",
+ "li2": "{li21}{separator} {li22}",
+ "separator": ":",
+ "cookie_vdpl": "__vdpl",
+ "cookie_vdpl_desc": "Este cookie รฉ usado pelo nosso provedor de hospedagem (Vercel) para proteรงรฃo contra distorรงรฃo. Garante que vocรช busque ativos da versรฃo de implantaรงรฃo correta se uma nova atualizaรงรฃo for lanรงada enquanto vocรช navega. Nรฃo rastreia vocรช.",
+ "cookie_h3": "h3",
+ "cookie_h3_desc": "Este รฉ o nosso cookie de sessรฃo segura. Ele armazena o token de acesso OAuth quando vocรช conecta sua conta Atmosphere. ร essencial para manter sua sessรฃo autenticada."
+ },
+ "local_storage": {
+ "title": "Armazenamento local",
+ "p1": "Alรฉm dos cookies de sessรฃo, usamos o {bold} do seu navegador para salvar suas preferรชncias de exibiรงรฃo. \nIsso nos permite lembrar o tema (claro/escuro) e algumas outras {settings} que vocรช selecionou, para que vocรช nรฃo precise reconfigurรก-las a cada visita.",
+ "bold": "Armazenamento local",
+ "p2": "Esta informaรงรฃo รฉ puramente funcional, armazenada apenas no seu dispositivo e {bold2}. Utilizamo-la exclusivamente para melhorar a sua experiรชncia no nosso site.",
+ "bold2": "nรฃo contรฉm dados pessoais nem รฉ usado para rastreรก-lo",
+ "settings": "configuraรงรตes"
+ },
+ "management": {
+ "title": "Gerenciamento de cookies",
+ "p1": "Vocรช pode configurar seu navegador para aceitar, rejeitar ou excluir cookies de acordo com suas preferรชncias. No entanto, observe que {bold}.",
+ "bold": "rejeitar cookies essenciais pode impedir o acesso total ao aplicativo",
+ "p2": "Abaixo estรฃo links com instruรงรตes para gerenciamento de cookies nos navegadores mais utilizados:",
+ "chrome": "Google Chrome (abre em uma nova janela)",
+ "firefox": "Mozilla Firefox (abre em uma nova janela)",
+ "edge": "Microsoft Edge (abre em uma nova janela)"
+ }
+ },
+ "analytics": {
+ "title": "Anรกlise",
+ "p1": "Usamos {bold} para entender como os visitantes utilizam nosso site. Isso nos ajuda a melhorar a experiรชncia do usuรกrio e a identificar problemas.",
+ "bold": "Vercel Web Analytics",
+ "p2": "O Vercel Analytics foi projetado com a privacidade em mente:",
+ "li1": "Nรฃo usa cookies",
+ "li2": "Nรฃo coleta identificadores pessoais",
+ "li3": "Nรฃo rastreia usuรกrios em sites",
+ "li4": "Todos os dados sรฃo agregados e anonimizados",
+ "p3": "As รบnicas informaรงรตes coletadas incluem: URLs de pรกginas, referenciador, paรญs/regiรฃo, tipo de dispositivo, navegador e sistema operacional. \nEsses dados nรฃo podem ser usados โโpara identificar usuรกrios individuais."
+ },
+ "authenticated": {
+ "title": "Usuรกrios autenticados",
+ "p1": "Quando vocรช conecta sua conta {bold} ao npmx, armazenamos seu token de acesso OAuth em um cookie de sessรฃo seguro somente HTTP. \nEste token รฉ usado exclusivamente para autenticar solicitaรงรตes em seu nome.",
+ "bold": "Atmosfera",
+ "p2": "Nรฃo armazenamos suas credenciais e nรฃo acessamos nenhum dado alรฉm do necessรกrio para fornecer os recursos que vocรช utiliza. Vocรช pode desconectar sua conta a qualquer momento na pรกgina {settings}.",
+ "settings": "configuraรงรตes"
+ },
+ "data_retention": {
+ "title": "Retenรงรฃo de dados",
+ "p1": "Os cookies de sessรฃo sรฃo automaticamente eliminados quando fecha o navegador ou apรณs um perรญodo de inatividade. As preferรชncias de armazenamento local permanecem no seu dispositivo atรฉ que vocรช limpe os dados do navegador. Os dados analรญticos sรฃo retidos de forma agregada e nรฃo podem ser vinculados a usuรกrios individuais."
+ },
+ "your_rights": {
+ "title": "Seus direitos",
+ "p1": "Vocรช tem o direito de:",
+ "li1": "Acesse informaรงรตes sobre quais dados coletamos",
+ "li2": "Limpe seu armazenamento local e cookies a qualquer momento",
+ "li3": "Desconecte sua sessรฃo autenticada",
+ "li4": "Solicitar informaรงรตes sobre nossas prรกticas de dados",
+ "p2": "Como nรฃo coletamos dados pessoais, normalmente nรฃo hรก informaรงรตes pessoais para excluir ou exportar."
+ },
+ "contact": {
+ "title": "Contate-nos",
+ "p1": "Para qualquer dรบvida ou preocupaรงรฃo sobre esta polรญtica de privacidade, vocรช pode entrar em contato conosco abrindo um problema em nosso {link}.",
+ "link": "Repositรณrio GitHub"
+ },
+ "changes": {
+ "title": "Alteraรงรตes nesta polรญtica",
+ "p1": "Poderemos atualizar esta polรญtica de privacidade de tempos em tempos. Quaisquer alteraรงรตes serรฃo publicadas nesta pรกgina com uma data de revisรฃo atualizada."
+ }
},
"a11y": {
- "approach": {},
- "measures": {},
- "limitations": {},
- "contact": {}
+ "title": "acessibilidade",
+ "footer_title": "a11y",
+ "welcome": "Queremos que o {app} possa ser usado pelo maior nรบmero de pessoas possรญvel.",
+ "approach": {
+ "title": "Nossa abordagem",
+ "p1": "Tentamos seguir as Diretrizes de Acessibilidade de Conteรบdo da Web (WCAG) 2.2 e usรก-las como referรชncia ao construir recursos. Nรฃo reivindicamos conformidade total com nenhum nรญvel das WCAG โ a acessibilidade รฉ um processo contรญnuo e hรก sempre mais trabalho a fazer.",
+ "p2": "Este site รฉ um {about}. As melhorias de acessibilidade sรฃo feitas de forma incremental como parte do nosso desenvolvimento regular.",
+ "about_link": "projeto de cรณdigo aberto voltado para a comunidade"
+ },
+ "measures": {
+ "title": "O que fazemos",
+ "p1": "Algumas das coisas que pretendemos fazer em todo o site:",
+ "li1": "Use atributos semรขnticos HTML e ARIA quando apropriado.",
+ "li2": "Use tamanhos de texto relativos para poder ajustรก-los em seu navegador.",
+ "li3": "Suporta navegaรงรฃo pelo teclado em toda a interface.",
+ "li4": "Respeite as preferรชncias de media prefers-reduced-motion e prefers-color-scheme.",
+ "li5": "Projete com contraste de cores suficiente em mente.",
+ "li6": "Certifique-se de que o conteรบdo essencial esteja disponรญvel sem JavaScript, embora alguns recursos interativos exijam isso."
+ },
+ "limitations": {
+ "title": "Limitaรงรตes conhecidas",
+ "p1": "Algumas partes do site, principalmente conteรบdo de terceiros, como READMEs de pacotes, podem nรฃo cumprir com padrรตes de acessibilidade. Estamos trabalhando para melhorar essas รกreas ao longo do tempo."
+ },
+ "contact": {
+ "title": "Feedback",
+ "p1": "Se vocรช encontrar uma barreira de acessibilidade no {app}, informe-nos abrindo um problema em nosso {link}. Levamos esses relatรณrios a sรฉrio e faremos o nosso melhor para abordรก-los.",
+ "link": "Repositรณrio GitHub"
+ }
+ },
+ "action_bar": {
+ "title": "Barra de aรงรตes",
+ "selection": "0 selecionados | 1 selecionado | {count} selecionados",
+ "shortcut": "Pressione \"{key}\" para focar nas aรงรตes",
+ "button_close_aria_label": "Fechar barra de aรงรตes"
}
}
diff --git a/i18n/locales/ru-RU.json b/i18n/locales/ru-RU.json
index 0e2a77bf85..edb18a6447 100644
--- a/i18n/locales/ru-RU.json
+++ b/i18n/locales/ru-RU.json
@@ -107,7 +107,7 @@
"reply_count": "{count} ะพัะฒะตั | {count} ะพัะฒะตัะฐ | {count} ะพัะฒะตัะพะฒ",
"like_count": "{count} ะปะฐะนะบ | {count} ะปะฐะนะบะฐ | {count} ะปะฐะนะบะพะฒ",
"repost_count": "{count} ัะตะฟะพัั | {count} ัะตะฟะพััะฐ | {count} ัะตะฟะพััะพะฒ",
- "more_replies": "ะัั {count} ะพัะฒะตัโฆ | ะัั {count} ะพัะฒะตัะฐโฆ | ะัั {count} ะพัะฒะตัะพะฒโฆ"
+ "more_replies": "ะตัั {count} ะพัะฒะตั... | ะตัั {count} ะพัะฒะตัะฐ... | ะตัั {count} ะพัะฒะตัะพะฒ..."
}
},
"settings": {
@@ -142,10 +142,14 @@
"theme_system": "ะกะธััะตะผะฝะฐั",
"language": "ะฏะทัะบ",
"help_translate": "ะะพะผะพัั ั ะฟะตัะตะฒะพะดะพะผ npmx",
- "accent_colors": "ะะบัะตะฝัะฝัะต ัะฒะตัะฐ",
+ "accent_colors": {
+ "label": "ะะบัะตะฝัะฝัะต ัะฒะตัะฐ"
+ },
"clear_accent": "ะกะฑัะพัะธัั ะฐะบัะตะฝัะฝัะน ัะฒะตั",
"translation_progress": "ะัะพะณัะตัั ะฟะตัะตะฒะพะดะฐ",
- "background_themes": "ะััะตะฝะพะบ ัะพะฝะฐ",
+ "background_themes": {
+ "label": "ะััะตะฝะพะบ ัะพะฝะฐ"
+ },
"keyboard_shortcuts_enabled": "ะัะฟะพะปัะทะพะฒะฐัั ะณะพัััะธะต ะบะปะฐะฒะธัะธ",
"keyboard_shortcuts_enabled_description": "ะะพัััะธะต ะบะปะฐะฒะธัะธ ะผะพะถะฝะพ ะฒัะบะปััะธัั, ะตัะปะธ ะฒะพะทะฝะธะบะฐัั ะบะพะฝัะปะธะบัั ั ัะพัะตัะฐะฝะธัะผะธ ะบะปะฐะฒะธั ะฑัะฐัะทะตัะฐ ะธะปะธ ะพะฟะตัะฐัะธะพะฝะฝะพะน ัะธััะตะผั"
},
diff --git a/i18n/locales/ta-IN.json b/i18n/locales/ta-IN.json
index 5df18ccc04..335d4bc952 100644
--- a/i18n/locales/ta-IN.json
+++ b/i18n/locales/ta-IN.json
@@ -105,10 +105,14 @@
"theme_system": "เฎเฎฃเฎฟเฎฉเฎฟ",
"language": "เฎฎเฏเฎดเฎฟ",
"help_translate": "npmx-เฎ เฎฎเฏเฎดเฎฟเฎชเฏเฎฏเฎฐเฏเฎเฏเฎ เฎเฎคเฎตเฏเฎเฏเฎเฎณเฏ",
- "accent_colors": "เฎตเฎฒเฎฟเฎฏเฏเฎฑเฏเฎคเฏเฎคเฎฒเฏ เฎตเฎฃเฏเฎฃเฎเฏเฎเฎณเฏ",
+ "accent_colors": {
+ "label": "เฎตเฎฒเฎฟเฎฏเฏเฎฑเฏเฎคเฏเฎคเฎฒเฏ เฎตเฎฃเฏเฎฃเฎเฏเฎเฎณเฏ"
+ },
"clear_accent": "เฎตเฎฒเฎฟเฎฏเฏเฎฑเฏเฎคเฏเฎคเฎฒเฏ เฎตเฎฃเฏเฎฃเฎคเฏเฎคเฏ เฎ
เฎดเฎฟ",
"translation_progress": "เฎฎเฏเฎดเฎฟเฎชเฏเฎฏเฎฐเฏเฎชเฏเฎชเฏ เฎฎเฏเฎฉเฏเฎฉเฏเฎฑเฏเฎฑเฎฎเฏ",
- "background_themes": "เฎชเฎฟเฎฉเฏเฎชเฏเฎฒ เฎจเฎฟเฎดเฎฒเฏ"
+ "background_themes": {
+ "label": "เฎชเฎฟเฎฉเฏเฎชเฏเฎฒ เฎจเฎฟเฎดเฎฒเฏ"
+ }
},
"i18n": {
"missing_keys": "{count} เฎตเฎฟเฎเฏเฎชเฎเฏเฎ เฎฎเฏเฎดเฎฟเฎชเฏเฎฏเฎฐเฏเฎชเฏเฎชเฏ | {count} เฎตเฎฟเฎเฏเฎชเฎเฏเฎ เฎฎเฏเฎดเฎฟเฎชเฏเฎฏเฎฐเฏเฎชเฏเฎชเฏเฎเฎณเฏ",
diff --git a/i18n/locales/te-IN.json b/i18n/locales/te-IN.json
index 9ee690177e..9c98d2507f 100644
--- a/i18n/locales/te-IN.json
+++ b/i18n/locales/te-IN.json
@@ -75,7 +75,9 @@
"theme_system": "เฐธเฐฟเฐธเฑเฐเฐฎเฑ",
"language": "เฐญเฐพเฐท",
"help_translate": "npmx เฐ
เฐจเฑเฐตเฐพเฐฆเฐเฐฒเฑ เฐธเฐนเฐพเฐฏเฐ เฐเฑเฐฏเฐเฐกเฐฟ",
- "accent_colors": "เฐฏเฐพเฐเฑเฐธเฑเฐเฐเฑ เฐฐเฐเฐเฑเฐฒเฑ",
+ "accent_colors": {
+ "label": "เฐฏเฐพเฐเฑเฐธเฑเฐเฐเฑ เฐฐเฐเฐเฑเฐฒเฑ"
+ },
"clear_accent": "เฐฏเฐพเฐเฑเฐธเฑเฐเฐเฑ เฐฐเฐเฐเฑเฐจเฑ เฐเฑเฐฒเฐฟเฐฏเฐฐเฑ เฐเฑเฐฏเฐเฐกเฐฟ",
"translation_progress": "เฐ
เฐจเฑเฐตเฐพเฐฆ เฐชเฑเฐฐเฑเฐเฐคเฐฟ"
},
diff --git a/i18n/locales/tr-TR.json b/i18n/locales/tr-TR.json
index ac6066ce08..c1b0a40b50 100644
--- a/i18n/locales/tr-TR.json
+++ b/i18n/locales/tr-TR.json
@@ -107,7 +107,7 @@
"reply_count": "{count} yanฤฑt",
"like_count": "{count} beฤeni",
"repost_count": "{count} yeniden paylaลฤฑm",
- "more_replies": "{count} yanฤฑt daha..."
+ "more_replies": "{count} yanฤฑt daha... | {count} yanฤฑt daha..."
}
},
"settings": {
@@ -142,10 +142,14 @@
"theme_system": "Sistem",
"language": "Dil",
"help_translate": "npmx'i รงevirmeye yardฤฑm edin",
- "accent_colors": "Vurgu renkleri",
+ "accent_colors": {
+ "label": "Vurgu renkleri"
+ },
"clear_accent": "Vurgu rengini temizle",
"translation_progress": "รeviri ilerlemesi",
- "background_themes": "Arka plan tonu",
+ "background_themes": {
+ "label": "Arka plan tonu"
+ },
"keyboard_shortcuts_enabled": "Klavye kฤฑsayollarฤฑ etkin",
"keyboard_shortcuts_enabled_description": "Hฤฑzlฤฑ navigasyon iรงin klavye kฤฑsayollarฤฑnฤฑ etkinleลtir"
},
diff --git a/i18n/locales/uk-UA.json b/i18n/locales/uk-UA.json
index fac79a98cd..8b8bb8a4e1 100644
--- a/i18n/locales/uk-UA.json
+++ b/i18n/locales/uk-UA.json
@@ -144,10 +144,15 @@
"theme_system": "ะกะธััะตะผะฝะฐ",
"language": "ะะพะฒะฐ",
"help_translate": "ะะพะฟะพะผะพะถััั ะฟะตัะตะบะปะฐััะธ npmx",
- "accent_colors": "ะะพะปััะฝั ะฐะบัะตะฝัะธ",
+ "translation_status": "ะะตัะตะณะปัะฝััะธ ะณะปะพะฑะฐะปัะฝะธะน ััะฐััั ะฟะตัะตะบะปะฐะดั",
+ "accent_colors": {
+ "label": "ะะพะปััะฝั ะฐะบัะตะฝัะธ"
+ },
"clear_accent": "ะัะธััะธัะธ ะบะพะปัั ะฐะบัะตะฝัั",
"translation_progress": "ะกัะฐััั ะฟะตัะตะบะปะฐะดั",
- "background_themes": "ะะพะปัั ัะพะฝั",
+ "background_themes": {
+ "label": "ะะพะปัั ัะพะฝั"
+ },
"keyboard_shortcuts_enabled": "ะฃะฒัะผะบะฝััะธ ะณะฐัััั ะบะปะฐะฒััั",
"keyboard_shortcuts_enabled_description": "ะะฐัััั ะบะปะฐะฒััั ะผะพะถะฝะฐ ะฒะธะผะบะฝััะธ, ัะบัะพ ะฒะพะฝะธ ะบะพะฝัะปัะบััััั ะท ะฝะฐะปะฐัััะฒะฐะฝะฝัะผะธ ะฑัะฐัะทะตัะฐ ะฐะฑะพ ัะธััะตะผะธ"
},
diff --git a/i18n/locales/zh-CN.json b/i18n/locales/zh-CN.json
index e6cc3aa6f6..e75d889793 100644
--- a/i18n/locales/zh-CN.json
+++ b/i18n/locales/zh-CN.json
@@ -36,7 +36,9 @@
"go_to_result": "่ทณ่ฝฌๅฐ็ปๆ",
"open_code_view": "ๆๅผไปฃ็ ่งๅพ",
"open_docs": "ๆๅผๆๆกฃ",
- "disable_shortcuts": "ไฝ ๅฏไปฅๅจ{settings}ไธญ็ฆ็จๅฟซๆท้ฎใ"
+ "disable_shortcuts": "ไฝ ๅฏไปฅๅจ{settings}ไธญ็ฆ็จๅฟซๆท้ฎใ",
+ "open_main": "ๆฅ็ไธป่ฆไฟกๆฏ",
+ "open_diff": "ๆฅ็็ๆฌๅทฎๅผ"
},
"search": {
"label": "ๆ็ดข npm ๅ
",
@@ -77,7 +79,7 @@
"main_navigation": "ไธป้กต",
"popular_packages": "็ญ้จ่ฝฏไปถๅ
",
"settings": "่ฎพ็ฝฎ",
- "compare": "ๆฏ่พๅ
",
+ "compare": "ๅ
ๅฏนๆฏ",
"back": "่ฟๅ",
"menu": "่ๅ",
"mobile_menu": "ๅฏผ่ช่ๅ",
@@ -107,7 +109,7 @@
"reply_count": "{count} ๆกๅๅค | {count} ๆกๅๅค",
"like_count": "{count} ไธช่ต | {count} ไธช่ต",
"repost_count": "{count} ๆฌก่ฝฌๅ | {count} ๆฌก่ฝฌๅ",
- "more_replies": "่ฟๆ {count} ๆกๅๅค... | ่ฟๆ {count} ๆกๅๅค..."
+ "more_replies": "่ฟๆ {count} ๆกๅๅค..."
}
},
"settings": {
@@ -136,16 +138,22 @@
"include_types_description": "ไธบๆชๆไพ็ฑปๅๅฎไน็ๅ
่ชๅจๆทปๅ {'@'}types ๅ
ๅฐๅฎ่ฃ
ๅฝไปค",
"hide_platform_packages": "ๅจๆ็ดข็ปๆ้่ๅนณๅฐ็นๅฎๅ
",
"hide_platform_packages_description": "ๅจๆ็ดข็ปๆไธญ้่ๅนณๅฐ็นๅฎ็ๅ็ไบ่ฟๅถๅ
๏ผไพๅฆ {'@'}esbuild/linux-x64๏ผ",
+ "enable_graph_pulse_loop": "ๅฏ็จ่ฟทไฝ ๅพ่กจ่ๅฒๅพช็ฏๆๆ",
+ "enable_graph_pulse_loop_description": "ๅจๅจไธ่ฝฝ้ๅพ่กจไธๅฏ็จๆ็ปญ่ๅฒๅจ็ปใ้จๅ็จๆทๅฏ่ฝไผ่งๅพ่ฏฅๅจ็ปๆๆๆ้ ๆ่ง่งๅนฒๆฐใ",
"theme": "ไธป้ข",
"theme_light": "ๆต
่ฒ",
"theme_dark": "ๆทฑ่ฒ",
"theme_system": "่ท้็ณป็ป",
"language": "่ฏญ่จ",
"help_translate": "ๅธฎๅฉ็ฟป่ฏ npmx",
- "accent_colors": "ๅผบ่ฐ่ฒ",
+ "accent_colors": {
+ "label": "ๅผบ่ฐ่ฒ"
+ },
"clear_accent": "ๆธ
้คๅผบ่ฐ่ฒ",
"translation_progress": "็ฟป่ฏ่ฟๅบฆ",
- "background_themes": "่ๆฏ่ฒ่ฐ",
+ "background_themes": {
+ "label": "่ๆฏ่ฒ่ฐ"
+ },
"keyboard_shortcuts_enabled": "ๅฏ็จๅฟซๆท้ฎ",
"keyboard_shortcuts_enabled_description": "ๅฆๆๆไบๅฟซๆท้ฎไธๅ
ถไปๆต่งๅจๆ็ณป็ปๅฟซๆท้ฎๅฒ็ช๏ผๅฏไปฅ้ๆฉๅฐๅ
ถ็ฆ็จใ"
},
@@ -192,7 +200,17 @@
"error": "ๅ ่ฝฝๅบ้",
"view_on": {
"npm": "ๅจ npm ไธๆฅ็",
- "github": "ๅจ GitHub ไธๆฅ็"
+ "github": "ๅจ GitHub ไธๆฅ็",
+ "gitlab": "ๅจ GitLab ไธๆฅ็",
+ "bitbucket": "ๅจ Bitbucket ไธๆฅ็",
+ "codeberg": "ๅจ Codeberg ไธๆฅ็",
+ "git_repo": "ๅจ Git ไปๅบไธๆฅ็",
+ "forgejo": "ๅจ Forgejo ไธๆฅ็",
+ "gitea": "ๅจ Gitea ไธๆฅ็",
+ "gitee": "ๅจ Gitee ไธๆฅ็",
+ "radicle": "ๅจ Radicle ไธๆฅ็",
+ "sourcehut": "ๅจ SourceHut ไธๆฅ็",
+ "tangled": "ๅจ Tangled ไธๆฅ็"
}
},
"profile": {
@@ -275,6 +293,7 @@
"view_source": "ๆฅ็ๆบไปฃ็ "
},
"links": {
+ "main": "ไธป้กต",
"repo": "ไปๅบ",
"homepage": "ไธป้กต",
"issues": "่ฎฎ้ข",
@@ -350,7 +369,9 @@
"published": "ๅๅธไบ",
"weekly_downloads": "ๆฏๅจไธ่ฝฝ้",
"keywords": "ๅ
ณ้ฎ่ฏ",
- "license": "่ฎธๅฏ่ฏ"
+ "license": "่ฎธๅฏ่ฏ",
+ "select": "้ๆฉ่ฝฏไปถๅ
",
+ "select_maximum": "ๆๅคๅฏ้ๆฉ {count} ไธช่ฝฏไปถๅ
"
},
"versions": {
"title": "็ๆฌ",
@@ -365,6 +386,7 @@
"all_covered": "ๆๆ็ๆฌๅๅทฒๅ
ๅซไบไธๆนๆ ็ญพไธญใ",
"deprecated_title": "{version}๏ผๅทฒๅผ็จ๏ผ",
"view_all": "ๆฅ็ๅ
จ้จ {count} ไธช็ๆฌ",
+ "view_all_versions": "ๆฅ็ๆๆ็ๆฌ",
"distribution_title": "่ฏญไนๅ็ๆฌๅ็ป",
"distribution_modal_title": "็ๆฌ",
"distribution_range_date_same_year": "{endYear}ๅนด {from} ่ณ {to}",
@@ -376,6 +398,7 @@
"grouping_versions_only_recent": "ไป
ๆ่ฟ",
"grouping_usage_title": "ไฝฟ็จ็",
"grouping_usage_all": "ๅ
จ้จ",
+ "grouping_usage_most_used": "ๆๅธธ็จ",
"recent_versions_only_tooltip": "ไป
ๆพ็คบๅจ่ฟๅปไธๅนดๅ
ๅๅธ็็ๆฌใ",
"show_low_usage_tooltip": "ๅ
ๆฌไธ่ฝฝ้ไฝไบ 1% ็็ๆฌ็ปใ",
"y_axis_label": "ไธ่ฝฝ้",
@@ -388,7 +411,12 @@
"copy_alt": {
"per_version_analysis": "{version} ๏ผ{downloads}ๆฌก๏ผ",
"general_description": "ๆกๅฝขๅพๅฑ็คบไบ {package_name} ๅจ {date_range_label} ๆ้ด็ไธ่ฝฝ้ๅๅธ๏ผๆฐๆฎๆถต็ไบ{versions_count} ไธช {semver_grouping_mode}๏ผไป{first_version}ๅฐ{last_version}๏ผใไธ่ฝฝ้ๆ้ซ็็ๆฌๆฏ{max_downloaded_version}๏ผ่พพ{max_version_downloads}ๆฌกใๅ
ถไฝ็ๆฌไธ่ฝฝ้๏ผ{per_version_analysis}ใ{watermark}ใ"
- }
+ },
+ "page_title": "็ๆฌๅๅฒ",
+ "current_tags": "ๅฝๅๆ ็ญพ",
+ "version_filter_placeholder": "็ญ้็ๆฌโฆ",
+ "version_filter_label": "็ญ้็ๆฌ",
+ "no_match_filter": "ๆฒกๆไธโ{filter}โๅน้
็็ๆฌ"
},
"dependencies": {
"title": "ไพ่ต๏ผ{count} ไธช๏ผ",
@@ -423,7 +451,8 @@
"cancel_add": "ๅๆถๆทปๅ ๆฅๆ่
",
"add_owner": "+ ๆทปๅ ๆฅๆ่
",
"show_more": "๏ผๆพ็คบๅฆๅค {count} ไธช๏ผ",
- "show_less": "๏ผๆถ่ตท๏ผ"
+ "show_less": "๏ผๆถ่ตท๏ผ",
+ "maintainer_template": "{avatar} {char126}{name}"
},
"trends": {
"granularity": "ๅจๆ",
@@ -455,6 +484,7 @@
"data_correction": "ๆฐๆฎๆ กๆญฃ",
"average_window": "ๅนณๅ็ชๅฃ",
"smoothing": "ๅนณๆปๅค็",
+ "prediction": "้ขๆต",
"known_anomalies": "ๅทฒ็ฅๅผๅธธ",
"known_anomalies_description": "ๅฏนๅทฒ็ฅ็็ฑๆบๅจไบบๆCI้ฎ้ขๅฏผ่ด็ไธ่ฝฝๅณฐๅผ่ฟ่กๆๅผๅค็ใ",
"known_anomalies_ranges": "ๅผๅธธๅบ้ด",
@@ -475,7 +505,9 @@
"estimations": "๏ผๆณจ๏ผๆ็ปๅผไธบๅบไบ้จๅๆฐๆฎ็ไผฐ็ฎ๏ผ",
"compare": "ไปฅไธไธบ {packages} ็ไธ่ฝฝ้ๅฏนๆฏๆ็บฟๅพใ",
"single_package": "{package} ็ไธ่ฝฝ้ๆ็บฟๅพใ",
- "general_description": "Y ่ฝด่กจ็คบไธ่ฝฝ้๏ผX ่ฝด่กจ็คบๆฅๆ่ๅด๏ผ{start_date} ่ณ {end_date}๏ผ๏ผ็ป่ฎกๅจๆไธบ{granularity}ใ{estimation_notice} {packages_analysis}ใ{watermark}ใ"
+ "general_description": "Y ่ฝด่กจ็คบไธ่ฝฝ้๏ผX ่ฝด่กจ็คบๆฅๆ่ๅด๏ผ{start_date} ่ณ {end_date}๏ผ๏ผ็ป่ฎกๅจๆไธบ{granularity}ใ{estimation_notice} {packages_analysis}ใ{watermark}ใ",
+ "facet_bar_general_description": "ๆฐดๅนณๆกๅฝขๅพ๏ผ{packages} ็ {facet} ๅฏนๆฏ๏ผ{description}๏ผใ{facet_analysis} {watermark}",
+ "facet_bar_analysis": "{package_name}๏ผ{value}"
}
},
"downloads": {
@@ -774,7 +806,9 @@
"preview": "้ข่ง",
"code": "ไปฃ็ "
},
- "file_path": "ๆไปถ่ทฏๅพ"
+ "file_path": "ๆไปถ่ทฏๅพ",
+ "binary_file": "ไบ่ฟๅถๆไปถ",
+ "binary_rendering_warning": "ๆไธๆฏๆ้ข่งโ{contentType}โ็ฑปๅ็ๆไปถใ"
},
"badges": {
"provenance": {
@@ -836,6 +870,7 @@
"secure": "ๆฒกๆ่ญฆๅ",
"insecure": "ๆ่ญฆๅ"
},
+ "view_selected": "ๆฅ็้ไธญ้กน",
"sort": {
"label": "ๆๅบๅ
",
"toggle_direction": "ๅๆขๆๅบๆนๅ",
@@ -869,7 +904,8 @@
"popularity_score": "ๅๆฌข่ฟๅบฆ",
"maintenance_score": "็ปดๆค็จๅบฆ",
"combined_score": "ๆปๅ",
- "security": "ๅฎๅ
จๆง"
+ "security": "ๅฎๅ
จๆง",
+ "selection": "้ๆฉ่ฝฏไปถๅ
"
},
"view_mode": {
"label": "่งๅพๆจกๅผ",
@@ -1016,24 +1052,27 @@
"error": "ๅ ่ฝฝ็ป็ปๅคฑ่ดฅ",
"empty": "ๆชๆพๅฐ็ป็ป",
"view_all": "ๆฅ็ๅ
จ้จ"
- }
+ },
+ "pr": "ๅจ GitHub ไธๆๅผ PR #{prNumber}"
},
"compare": {
"packages": {
- "title": "ๆฏ่พๅ
",
- "tagline": "ๅนถๆๆฏ่พ npm ๅ
๏ผๅธฎๅฉไฝ ้ๆฉๅ้็ๅ
ใ",
- "meta_title": "ๆฏ่พ {packages} - npmx",
- "meta_title_empty": "ๆฏ่พๅ
- npmx",
- "meta_description": "ๅนถๆๆฏ่พ {packages}",
- "meta_description_empty": "ๅนถๆๆฏ่พ npm ๅ
๏ผๅธฎๅฉไฝ ้ๆฉๅ้็ๅ
ใ",
+ "title": "ๅ
ๅฏนๆฏ",
+ "tagline": "ๅนถๆๅฏนๆฏ npm ๅ
๏ผๅธฎไฝ ้ๅบๆๅ้็ใ",
+ "meta_title": "ๅฏนๆฏ {packages} - npmx",
+ "meta_title_empty": "ๅ
ๅฏนๆฏ - npmx",
+ "meta_description": "ๅนถๆๅฏนๆฏ {packages}",
+ "meta_description_empty": "ๅนถๆๅฏนๆฏ npm ๅ
๏ผๅธฎไฝ ้ๅบๆๅ้็ใ",
"section_packages": "ๅ
",
"section_facets": "็ปดๅบฆ",
- "section_comparison": "ๆฏ่พ",
+ "section_comparison": "ๅฏนๆฏ",
"copy_as_markdown": "ๅคๅถไธบ Markdown",
"loading": "ๆญฃๅจๅ ่ฝฝๅ
ๆฐๆฎโฆ",
"error": "ๅ ่ฝฝๅ
ๆฐๆฎๅคฑ่ดฅใ่ฏท้่ฏใ",
"empty_title": "้ๆฉ่ฆๆฏ่พ็ๅ
",
- "empty_description": "ๅจไธๆนๆ็ดขๅนถๆทปๅ ่ณๅฐ 2 ไธชๅ
๏ผไปฅๆฅ็ๅฎไปฌๆๆ ็ๅนถๆๆฏ่พใ"
+ "empty_description": "ๅจไธๆนๆ็ดขๅนถๆทปๅ ่ณๅฐ 2 ไธชๅ
๏ผไปฅๆฅ็ๅฎไปฌๆๆ ็ๅนถๆๆฏ่พใ",
+ "table_view": "่กจๆ ผ่งๅพ",
+ "charts_view": "ๅพ่กจ่งๅพ"
},
"selector": {
"search_label": "ๆ็ดขๅ
",
@@ -1144,7 +1183,8 @@
"file_too_large": "ๆไปถ่ฟๅคง๏ผๆ ๆณๅฏนๆฏ",
"file_size_warning": "{size} ่ถ
ๅบไบ 250KB ็ๅฏนๆฏ้ๅถ",
"compare_versions": "ๅทฎๅผ",
- "compare_versions_title": "ไธๆๆฐ็ๆฌๆฏ่พ",
+ "compare_versions_title": "ไธๆๆฐ็ๆฌๅฏนๆฏ",
+ "version_selector_title": "็ๆฌๅฏนๆฏ",
"summary": "ๆ่ฆ",
"deps_count": "{count} ไธชไพ่ต",
"dependencies": "็ดๆฅไพ่ต้กน",
@@ -1309,5 +1349,11 @@
"p1": "ๅฆๆไฝ ๅจ {app} ไธ้ๅฐๆ ้็ข่ฎฟ้ฎ้ฎ้ข๏ผ่ฏทๅจๆไปฌ็ {link} ไธๆไบค Issue ๅ้ฆ็ปๆไปฌใๆไปฌไผ่ฎค็ๅฏนๅพ
่ฟไบๅ้ฆ๏ผๅนถๅฐฝๅ่งฃๅณใ",
"link": "GitHub ไปๅบ"
}
+ },
+ "action_bar": {
+ "title": "ๆไฝๆ ",
+ "selection": "0 ไธช้กน็ฎ่ขซ้ไธญ | 1 ไธช้กน็ฎ่ขซ้ไธญ | {count} ไธช้กน็ฎ่ขซ้ไธญ",
+ "shortcut": "ๆไธ \"{key}\" ๅฟซๆท้ฎไปฅๆง่กๆไฝ",
+ "button_close_aria_label": "ๅ
ณ้ญๆไฝ้ขๆฟ"
}
}
diff --git a/i18n/locales/zh-TW.json b/i18n/locales/zh-TW.json
index 6765344baf..363820fd49 100644
--- a/i18n/locales/zh-TW.json
+++ b/i18n/locales/zh-TW.json
@@ -13,10 +13,12 @@
"trademark_disclaimer": "npm ๆฏ npm, Inc. ็่จปๅๅๆจใๆฌ็ถฒ็ซ่ npm, Inc. ็กไปปไฝ้ธๅฑฌ้ไฟใ",
"footer": {
"about": "้ๆผ",
+ "blog": "้จ่ฝๆ ผ",
"docs": "ๆไปถ",
"source": "ๅๅง็ขผ",
"social": "็คพ็พคๅช้ซ",
"chat": "่ๅคฉ",
+ "builders_chat": "้็ผ่
่ๅคฉ",
"keyboard_shortcuts": "้ต็คๅฟซๆท้ต"
},
"shortcuts": {
@@ -34,7 +36,9 @@
"go_to_result": "ๅๅพๆๅฐ็ตๆ",
"open_code_view": "้ๅ็จๅผ็ขผๆชข่ฆ",
"open_docs": "้ๅๆไปถ",
- "disable_shortcuts": "ไฝ ๅฏไปฅๅจ {settings} ไธญๅ็จ้ต็คๅฟซ้้ตใ"
+ "disable_shortcuts": "ไฝ ๅฏไปฅๅจ {settings} ไธญๅ็จ้ต็คๅฟซ้้ตใ",
+ "open_main": "้ๅไธป่ฆ่ณ่จ",
+ "open_diff": "้ๅ็ๆฌๅทฎ็ฐ"
},
"search": {
"label": "ๆๅฐ npm ๅฅไปถ",
@@ -63,7 +67,13 @@
"org": "็ต็น",
"view_user_packages": "ๆชข่ฆๆญคไฝฟ็จ่
็ๅฅไปถ",
"view_org_packages": "ๆชข่ฆๆญค็ต็น็ๅฅไปถ"
- }
+ },
+ "instant_search": "็ซๅณๆๅฐ",
+ "instant_search_on": "้ๅ",
+ "instant_search_off": "้้",
+ "instant_search_turn_on": "้ๅ",
+ "instant_search_turn_off": "้้",
+ "instant_search_advisory": "{label} {state} โ {action}"
},
"nav": {
"main_navigation": "้ฆ้ ",
@@ -78,8 +88,29 @@
"tap_to_search": "้ปๆไปฅๆๅฐ"
},
"blog": {
- "author": {},
- "atproto": {}
+ "title": "้จ่ฝๆ ผ",
+ "heading": "้จ่ฝๆ ผ",
+ "meta_description": "ไพ่ช npmx ็คพ็พค็่ฆ่งฃ่ๆๆฐๅๆ
",
+ "author": {
+ "view_profile": "ๅจ Bluesky ไธๆฅ็ {name} ็ๅไบบๆชๆก"
+ },
+ "draft_badge": "่็จฟ",
+ "draft_banner": "้ๆฏๅฐๆช็ผไฝ็่็จฟใๅ
งๅฎนๅฏ่ฝไธๅฎๆดๆๅ
ๅซไธๆบ็ขบ็่ณ่จใ",
+ "atproto": {
+ "view_on_bluesky": "ๅจ Bluesky ไธๆฅ็",
+ "reply_on_bluesky": "ๅจ Bluesky ไธๅ่ฆ",
+ "likes_on_bluesky": "ๅจ Bluesky ไธ็ๅๆญก",
+ "like_or_reply_on_bluesky": "ๅจ Bluesky ไธๅๆญก้็ฏๆ็ซ ๆๆฐๅข็่จ",
+ "no_comments_yet": "ๅฐ็ก็่จใ",
+ "could_not_load_comments": "็กๆณ่ผๅ
ฅ็่จใ",
+ "comments": "็่จ",
+ "loading_comments": "ๆญฃๅจ่ผๅ
ฅ็่จโฏโฏ",
+ "updating": "ๆดๆฐไธญโฏโฏ",
+ "reply_count": "{count} ๅๅ่ฆ | {count} ๅๅ่ฆ",
+ "like_count": "{count} ๅๅๆญก | {count} ๅๅๆญก",
+ "repost_count": "{count} ๆฌก่ฝ็ผ | {count} ๆฌก่ฝ็ผ",
+ "more_replies": "้ๆ {count} ๅๅ่ฆโฏโฏ | ้ๆ {count} ๅๅ่ฆโฏโฏ"
+ }
},
"settings": {
"title": "่จญๅฎ",
@@ -100,21 +131,29 @@
"algolia": "Algolia",
"algolia_description": "ไฝฟ็จ Algolia ไปฅๆดๅฟซ้็ๆๅฐๅฅไปถใ็ต็นๅไฝฟ็จ่
ใ"
},
+ "instant_search": "ๅณๆๆๅฐ",
+ "instant_search_description": "ๅฐ่ช่ณๆๅฐ้ ้ข๏ผไธฆๅจๆจ่ผธๅ
ฅๆๅณๆๆดๆฐๆๅฐ็ตๆใ",
"relative_dates": "็ธๅฐๆ้",
"include_types": "ๅฎ่ฃๆๅ
ๅซ {'@'}types",
"include_types_description": "ๅฐๆชๆไพๅๅฅๅฎ็พฉ็ๅฅไปถ๏ผ่ชๅๅจๅฎ่ฃๆไปคๅ ๅ
ฅ {'@'}types ๅฅไปถ",
"hide_platform_packages": "ๅจๆๅฐ็ตๆไธญ้ฑ่ๅนณๅฐ็นๅฎๅฅไปถ",
"hide_platform_packages_description": "ๅจๆๅฐ็ตๆไธญ้ฑ่ๅนณๅฐ็นๅฎ็ๅ็ไบ้ฒไฝๅฅไปถ๏ผไพๅฆ {'@'}esbuild/linux-x64๏ผ",
+ "enable_graph_pulse_loop": "ๅ็จ่ฟทไฝ ๅ่กจ็่่กๅพช็ฐๆๆ",
+ "enable_graph_pulse_loop_description": "ๅจๆฏ้ฑไธ่ผๅ่กจไธๅๅ้ฃ็บ็่่กๅ็ซใ่ซๆณจๆ๏ผๆญคๅ็ซๅฏ่ฝๆๅฐ้จๅไฝฟ็จ่
้ ๆ่ฆ่ฆบๅนฒๆพใ",
"theme": "ไธป้ก",
"theme_light": "ๆทบ่ฒ",
"theme_dark": "ๆทฑ่ฒ",
"theme_system": "่ท้จ็ณป็ตฑ",
"language": "่ช่จ",
"help_translate": "ๅๅฉ็ฟป่ญฏ npmx",
- "accent_colors": "ๅผท่ชฟ่ฒ",
+ "accent_colors": {
+ "label": "ๅผท่ชฟ่ฒ"
+ },
"clear_accent": "ๆธ
้คๅผท่ชฟ่ฒ",
"translation_progress": "็ฟป่ญฏ้ฒๅบฆ",
- "background_themes": "่ๆฏ่ฒ่ชฟ",
+ "background_themes": {
+ "label": "่ๆฏ่ฒ่ชฟ"
+ },
"keyboard_shortcuts_enabled": "ๅ็จ้ต็คๅฟซ้้ต",
"keyboard_shortcuts_enabled_description": "่ฅ่ๅ
ถไป็่ฆฝๅจๆ็ณป็ตฑๅฟซๆท้ต่ก็ช๏ผๅฏๅ็จ้ต็คๅฟซ้้ต"
},
@@ -126,7 +165,13 @@
"edit_on_github": "ๅจ GitHub ไธ็ทจ่ผฏ",
"view_guide": "็ฟป่ญฏๆๅ"
},
- "error": {},
+ "error": {
+ "401": "ๆช็ถๆๆฌ",
+ "404": "ๆพไธๅฐ้ ้ข",
+ "500": "ๅ
ง้จไผบๆๅจ้ฏ่ชค",
+ "503": "ๆๅ็กๆณไฝฟ็จ",
+ "default": "็ผ็ๆช้ ๆ็้ฏ่ชค"
+ },
"common": {
"loading": "่ผๅ
ฅไธญโฆ",
"loading_more": "่ผๅ
ฅๆดๅคไธญโฆ",
@@ -155,7 +200,17 @@
"error": "้ฏ่ชค",
"view_on": {
"npm": "ๅจ npm ไธๆชข่ฆ",
- "github": "ๅจ GitHub ไธๆชข่ฆ"
+ "github": "ๅจ GitHub ไธๆชข่ฆ",
+ "gitlab": "ๅจ GitLab ไธๆชข่ฆ",
+ "bitbucket": "ๅจ Bitbucket ไธๆชข่ฆ",
+ "codeberg": "ๅจ Codeberg ไธๆชข่ฆ",
+ "git_repo": "ๅจ Git ๅฒๅญๅบซไธๆชข่ฆ",
+ "forgejo": "ๅจ Forgejo ไธๆชข่ฆ",
+ "gitea": "ๅจ Gitea ไธๆชข่ฆ",
+ "gitee": "ๅจ Gitee ไธๆชข่ฆ",
+ "radicle": "ๅจ Radicle ไธๆชข่ฆ",
+ "sourcehut": "ๅจ SourceHut ไธๆชข่ฆ",
+ "tangled": "ๅจ Tangled ไธๆชข่ฆ"
}
},
"profile": {
@@ -238,6 +293,7 @@
"view_source": "ๆชข่ฆๅๅง็ขผ"
},
"links": {
+ "main": "main",
"repo": "ๅฒๅญๅบซ",
"homepage": "้ฆ้ ",
"issues": "Issues",
@@ -313,7 +369,9 @@
"published": "็ผๅธๆผ",
"weekly_downloads": "ๆฏ้ฑไธ่ผ้",
"keywords": "้้ตๅญ",
- "license": "ๆๆฌ"
+ "license": "ๆๆฌ",
+ "select": "้ธๆๅฅไปถ",
+ "select_maximum": "ๆๅค {count} ๅๅฅไปถๅฏไปฅ้ธๆ"
},
"versions": {
"title": "็ๆฌ",
@@ -328,6 +386,7 @@
"all_covered": "ๆๆ็ๆฌๅๅทฒๅ
ๅซๆผไธๆนๆจ็ฑคไธญใ",
"deprecated_title": "{version}๏ผๅทฒๆฃ็จ๏ผ",
"view_all": "ๆชข่ฆๅ
จ้จ {count} ๅ็ๆฌ",
+ "view_all_versions": "ๆชข่ฆๅ
จ้จ็ๆฌ",
"distribution_title": "่ช็พฉๅ็ๆฌ็พค็ต",
"distribution_modal_title": "็ๆฌ",
"distribution_range_date_same_year": "ๅพ {from} ่ณ {to}, {endYear}",
@@ -339,6 +398,7 @@
"grouping_versions_only_recent": "ๅ
้กฏ็คบ่ฟๆ็ๆฌ",
"grouping_usage_title": "ไฝฟ็จ้",
"grouping_usage_all": "ๅ
จ้จ",
+ "grouping_usage_most_used": "ๆๅธธไฝฟ็จ็ๆฌ",
"recent_versions_only_tooltip": "ๅ
้กฏ็คบ้ๅปไธๅนดๅ
ง็ผๅธ็็ๆฌใ",
"show_low_usage_tooltip": "ๅ
ๅซ็ธฝไธ่ผ้ไฝๆผ 1% ็็ๆฌ็พค็ตใ",
"y_axis_label": "ไธ่ผ้",
@@ -351,7 +411,12 @@
"copy_alt": {
"per_version_analysis": "{version} ็ๆฌไธ่ผไบ {downloads} ๆฌก",
"general_description": "้ทๆขๅๅ็พ {package_name} ๅฅไปถๅจ {date_range_label} ๆ้ใๅพ {first_version} ๅฐ {last_version} ็ {versions_count} ๅ {semver_grouping_mode} ็ๆฌไธ่ผ้ใไธ่ผ้ๆ้ซ็็ๆฌๆฏ {max_downloaded_version}๏ผๅ
ฑ {max_version_downloads} ๆฌกไธ่ผใ{per_version_analysis}ใ{watermark}ใ"
- }
+ },
+ "page_title": "็ๆฌๆญทๅฒ่จ้",
+ "current_tags": "็ถๅๆจ็ฑค",
+ "version_filter_placeholder": "็ฏฉ้ธ็ๆฌโฆ",
+ "version_filter_label": "็ฏฉ้ธ็ๆฌ",
+ "no_match_filter": "ๆฒๆ็ๆฌ็ฌฆๅ {filter}"
},
"dependencies": {
"title": "็ธไพ๏ผ{count} ๅ๏ผ",
@@ -386,7 +451,8 @@
"cancel_add": "ๅๆถๆฐๅขๆๆ่
",
"add_owner": "+ ๆฐๅขๆๆ่
",
"show_more": "๏ผ้กฏ็คบๅฆๅค {count} ๅ๏ผ",
- "show_less": "๏ผๆถๅ๏ผ"
+ "show_less": "๏ผๆถๅ๏ผ",
+ "maintainer_template": "{avatar} {char126}{name}"
},
"trends": {
"granularity": "้ฑๆ",
@@ -402,6 +468,8 @@
"download_file": "ไธ่ผ {fileType}",
"toggle_annotator": "ๅๆๆจ่จปๅทฅๅ
ท",
"toggle_stack_mode": "ๅๆๅ ็ๆจกๅผ",
+ "open_options": "้ๅ้ธ้
",
+ "close_options": "้้้ธ้
",
"legend_estimation": "ไผฐ่จๅผ",
"no_data": "็กๅฏ็จ่ณๆ",
"y_axis_label": "{granularity} {facet}",
@@ -416,6 +484,7 @@
"data_correction": "่ณๆไฟฎๆญฃ",
"average_window": "ๅนณๅ่ฆ็ช",
"smoothing": "ๅนณๆปๅ",
+ "prediction": "้ ไผฐๅผ",
"known_anomalies": "ๅทฒ็ฅ็ฐๅธธ",
"known_anomalies_description": "้ๅฐ็ฑๆฉๅจไบบๆ CI ๅ้ก้ ๆ็ๅทฒ็ฅไธ่ผๅฐๅณฐ้ฒ่กๅ
งๆไฟฎๆญฃใ",
"known_anomalies_ranges": "็ฐๅธธๅ้",
@@ -436,12 +505,15 @@
"estimations": "ๆ็ตๆธๅผๆฏๆ นๆ็ถๅ้ฑๆ็้จๅๆธๆๆๅ็้ ไผฐๅผใ",
"compare": "ๅฅไปถไธ่ผ้ๆฏ่ผๆ็ทๅ๏ผ{package_name}ใ",
"single_package": "ไธ่ผ {package} ๅฅไปถไธ่ผ้็ๆ็ทๅใ",
- "general_description": "Y ่ปธไปฃ่กจไธ่ผๆฌกๆธใX ่ปธไปฃ่กจๆฅๆ็ฏๅ๏ผๅพ {start_date} ่ณ {end_date}๏ผไปฅ {granularity} ็บๆ้ๅฎไฝใ {estimation_notice} {packages_analysis}. {watermark}."
+ "general_description": "Y ่ปธไปฃ่กจไธ่ผๆฌกๆธใX ่ปธไปฃ่กจๆฅๆ็ฏๅ๏ผๅพ {start_date} ่ณ {end_date}๏ผไปฅ {granularity} ็บๆ้ๅฎไฝใ {estimation_notice} {packages_analysis}. {watermark}.",
+ "facet_bar_general_description": "ๆฐดๅนณ้ทๆขๅ: {package} ็ {facet} ๅฐๆฏ({description}). {facet_analysis} {watermark}.",
+ "facet_bar_analysis": "{package_name} ๅผ็บ {value}."
}
},
"downloads": {
"title": "ๆฏ้ฑไธ่ผ้",
- "community_distribution": "ๆชข่ฆ็คพ็พคๆก็จๅๅธ"
+ "community_distribution": "ๆชข่ฆ็คพ็พคๆก็จๅๅธ",
+ "subtitle": "ๆๆ็ๆฌ"
},
"install_scripts": {
"title": "ๅฎ่ฃ่
ณๆฌ",
@@ -734,7 +806,9 @@
"preview": "้ ่ฆฝ",
"code": "็จๅผ็ขผ"
},
- "file_path": "ๆชๆก่ทฏๅพ"
+ "file_path": "ๆชๆก่ทฏๅพ",
+ "binary_file": "ไบ้ฒไฝๆชๆก",
+ "binary_rendering_warning": "ๆชๆก้กๅ \"{contentType}\" ไธๆฏๆด้ ่ฆฝใ"
},
"badges": {
"provenance": {
@@ -796,6 +870,7 @@
"secure": "็ก่ญฆๅ",
"insecure": "ๆ่ญฆๅ"
},
+ "view_selected": "ๆชข่ฆๅทฒ้ธๆๅฅไปถ",
"sort": {
"label": "ๆๅบๅฅไปถ",
"toggle_direction": "ๅๆๆๅบๆนๅ",
@@ -829,7 +904,8 @@
"popularity_score": "ๅๆญก่ฟๅบฆๅๆธ",
"maintenance_score": "็ถญ่ญท็จๅบฆๅๆธ",
"combined_score": "็ธฝๅ",
- "security": "ๅฎๅ
จๆง"
+ "security": "ๅฎๅ
จๆง",
+ "selection": "้ธๆๅฅไปถ"
},
"view_mode": {
"label": "ๆชข่ฆๆจกๅผ",
@@ -918,7 +994,11 @@
"description": "่ๅคฉใๆๅไธฆๅไบซๆณๆณใ",
"cta": "ๅ ๅ
ฅ Discord"
},
- "builders": {},
+ "builders": {
+ "title": "ๅนซๅฉๅปบ็ซ npmx",
+ "description": "ๅ ๅ
ฅๅปบ็ซ่
Discord๏ผๅ่้็ผใ",
+ "cta": "ๅ ๅ
ฅ Builders Discord"
+ },
"follow": {
"title": "ไฟๆๆดๆฐ",
"description": "ๆๆก npmx ็ๆๆฐๅๆ
ใ",
@@ -989,7 +1069,9 @@
"loading": "ๆญฃๅจ่ผๅ
ฅๅฅไปถ่ณๆโฆ",
"error": "่ผๅ
ฅๅฅไปถ่ณๆๅคฑๆใ่ซ้่ฉฆใ",
"empty_title": "้ธๆ่ฆๆฏ่ผ็ๅฅไปถ",
- "empty_description": "ๅจไธๆนๆๅฐไธฆๆฐๅข่ณๅฐ 2 ๅๅฅไปถ๏ผไปฅๆฅ็ๅฎๅๆๆจ็ไธฆๆๆฏ่ผใ"
+ "empty_description": "ๅจไธๆนๆๅฐไธฆๆฐๅข่ณๅฐ 2 ๅๅฅไปถ๏ผไปฅๆฅ็ๅฎๅๆๆจ็ไธฆๆๆฏ่ผใ",
+ "table_view": "่กจๆ ผๆชข่ฆ",
+ "charts_view": "ๅ่กจๆชข่ฆ"
},
"selector": {
"search_label": "ๆๅฐๅฅไปถ",
@@ -1097,7 +1179,11 @@
"file_changes": "ๆชๆก่ฎๆด",
"files_count": "{count} ๅๆชๆก",
"lines_hidden": "ๅทฒ้ฑ่ {count} ่ก",
+ "file_too_large": "ๆชๆกๅคงๅฐ้ๅคง๏ผ็กๆณๆฏ่ผ",
+ "file_size_warning": "ๆชๆกๅคงๅฐ {size} ่ถ
้ 250KB๏ผ็กๆณๆฏ่ผ",
"compare_versions": "ๅทฎ็ฐ",
+ "compare_versions_title": "ๆฏ่ผๆๆฐ็ๆฌ",
+ "version_selector_title": "ๆฏ่ผ็ๆฌ",
"summary": "ๆ่ฆ",
"deps_count": "{count} ๅ็ธไพๅฅไปถ",
"dependencies": "็ธไพๅฅไปถ",
@@ -1126,9 +1212,32 @@
"filter_files_label": "ไพ่ฎๆด้กๅ็ฏฉ้ธๆชๆก"
},
"pds": {
- "join": {},
- "server": {},
- "community": {}
+ "title": "npmx.social",
+ "meta_description": "็บ npmx ็คพ็พคๆไพ็ๅฎๆน AT Protocol ๅไบบ่ณๆไผบๆๅจ๏ผPDS๏ผใ",
+ "join": {
+ "title": "ๅ ๅ
ฅ็คพ็พค",
+ "description": "็ก่ซๆจๆฏๅจ Atmosphere ไธๅปบ็ซ็ฌฌไธๅๅธณ่๏ผ้ๆฏ่ฆ้ท็งป็พๆๅธณ่๏ผ้่ฃก้ฝๆญก่ฟๆจใๆจๅฏไปฅ้ท็งป็ฎๅ็ๅธณ่๏ผ่ไธๆ้บๅคฑๆจ็ไฝฟ็จ่
ๅ็จฑใ่ฒผๆๆ่ท้จ่
ใ",
+ "migrate": "ไฝฟ็จ PDS MOOver ๅทฅๅ
ท้ท็งป"
+ },
+ "server": {
+ "title": "ไผบๆๅจ่ฉณ็ดฐ่ณ่จ",
+ "location_label": "ไผบๆๅจไฝ็ฝฎ๏ผ",
+ "location_value": "ๅพทๅ็ดๅซๅ ก",
+ "infrastructure_label": "ๅบ็ค่จญๆฝ๏ผ",
+ "infrastructure_value": "ๆ็ฎกๆผ Hetzner",
+ "privacy_label": "้ฑ็งไฟ่ญท๏ผ",
+ "privacy_value": "้ตๅพชๆญ็ๅดๆ ผ็่ณๆไฟ่ญทๆณ่ฆ",
+ "learn_more": "็ญ่งฃ npmx ๅฆไฝไฝฟ็จ Atmosphere"
+ },
+ "community": {
+ "title": "่ชฐๅจ้่ฃก",
+ "description": "ไปฅไธๆฏๅจ npmx.social ่ฝ่
ณ็ {count} ๅๅธณ่ไธญ็ไธ้จๅ๏ผ",
+ "loading": "ๆญฃๅจ่ผๅ
ฅ PDS ็คพ็พคๆๅกโฏโฏ",
+ "error": "็กๆณ่ผๅ
ฅ PDS ็คพ็พคๆๅกใ",
+ "empty": "ๅฐ็ก็คพ็พคๆๅกๅฏ้กฏ็คบใ",
+ "view_profile": "ๆฅ็ {handle} ็ๅไบบๆชๆก",
+ "new_accounts": "โฏโฏ้ๆ {count} ๅๆฐๅ ๅ
ฅ Atmosphere ็ๅธณ่"
+ }
},
"privacy_policy": {
"title": "้ฑ็งๆฌๆฟ็ญ",
@@ -1239,5 +1348,11 @@
"p1": "ๅฆๆๆจๅจ {app} ้ๅฐ็ก้็ค้็ค๏ผ่ซๅจๆๅ็ {link} ๆไบค Issue ๅ็ฅๆๅใๆๅ้ๅธธ้่ฆ้ไบๅ ฑๅ๏ผไธฆๆ็กๅ่งฃๆฑบๅ้กใ",
"link": "GitHub ๅฒๅญๅบซ"
}
+ },
+ "action_bar": {
+ "title": "ๆไฝๅ",
+ "selection": "ๅทฒ้ธๆ 0 ๅๅฅไปถ | ๅทฒ้ธๆ 1 ๅๅฅไปถ | {count} ๅๅฅไปถ",
+ "shortcut": "ๆ \"{key}\" ไปฅ่็ฆๆไฝ",
+ "button_close_aria_label": "้้ๆไฝๅ"
}
}
diff --git a/i18n/schema.json b/i18n/schema.json
index fb0cc69fb5..e1ae6a54eb 100644
--- a/i18n/schema.json
+++ b/i18n/schema.json
@@ -292,6 +292,9 @@
"draft_banner": {
"type": "string"
},
+ "no_posts": {
+ "type": "string"
+ },
"atproto": {
"type": "object",
"properties": {
@@ -418,6 +421,12 @@
"hide_platform_packages_description": {
"type": "string"
},
+ "enable_graph_pulse_loop": {
+ "type": "string"
+ },
+ "enable_graph_pulse_loop_description": {
+ "type": "string"
+ },
"theme": {
"type": "string"
},
@@ -436,9 +445,36 @@
"help_translate": {
"type": "string"
},
- "accent_colors": {
+ "translation_status": {
"type": "string"
},
+ "accent_colors": {
+ "type": "object",
+ "properties": {
+ "label": {
+ "type": "string"
+ },
+ "sky": {
+ "type": "string"
+ },
+ "coral": {
+ "type": "string"
+ },
+ "amber": {
+ "type": "string"
+ },
+ "emerald": {
+ "type": "string"
+ },
+ "violet": {
+ "type": "string"
+ },
+ "magenta": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
"clear_accent": {
"type": "string"
},
@@ -446,7 +482,28 @@
"type": "string"
},
"background_themes": {
- "type": "string"
+ "type": "object",
+ "properties": {
+ "label": {
+ "type": "string"
+ },
+ "neutral": {
+ "type": "string"
+ },
+ "stone": {
+ "type": "string"
+ },
+ "zinc": {
+ "type": "string"
+ },
+ "slate": {
+ "type": "string"
+ },
+ "black": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
},
"keyboard_shortcuts_enabled": {
"type": "string"
@@ -621,6 +678,12 @@
}
},
"additionalProperties": false
+ },
+ "collapse": {
+ "type": "string"
+ },
+ "expand": {
+ "type": "string"
}
},
"additionalProperties": false
@@ -858,6 +921,9 @@
},
"view_source": {
"type": "string"
+ },
+ "skills_cli": {
+ "type": "string"
}
},
"additionalProperties": false
@@ -891,6 +957,9 @@
},
"compare": {
"type": "string"
+ },
+ "compare_this_package": {
+ "type": "string"
}
},
"additionalProperties": false
@@ -910,11 +979,32 @@
"docs": {
"type": "object",
"properties": {
+ "contents": {
+ "type": "string"
+ },
+ "default_not_available": {
+ "type": "string"
+ },
"not_available": {
"type": "string"
},
"not_available_detail": {
"type": "string"
+ },
+ "page_title": {
+ "type": "string"
+ },
+ "page_title_name": {
+ "type": "string"
+ },
+ "page_title_version": {
+ "type": "string"
+ },
+ "og_title": {
+ "type": "string"
+ },
+ "view_package": {
+ "type": "string"
}
},
"additionalProperties": false
@@ -1095,6 +1185,12 @@
},
"license": {
"type": "string"
+ },
+ "select": {
+ "type": "string"
+ },
+ "select_maximum": {
+ "type": "string"
}
},
"additionalProperties": false
@@ -1138,6 +1234,9 @@
"view_all": {
"type": "string"
},
+ "view_all_versions": {
+ "type": "string"
+ },
"distribution_title": {
"type": "string"
},
@@ -1159,6 +1258,9 @@
"grouping_versions_title": {
"type": "string"
},
+ "grouping_versions_about": {
+ "type": "string"
+ },
"grouping_versions_all": {
"type": "string"
},
@@ -1168,6 +1270,9 @@
"grouping_usage_title": {
"type": "string"
},
+ "grouping_usage_about": {
+ "type": "string"
+ },
"grouping_usage_all": {
"type": "string"
},
@@ -1212,6 +1317,21 @@
}
},
"additionalProperties": false
+ },
+ "page_title": {
+ "type": "string"
+ },
+ "current_tags": {
+ "type": "string"
+ },
+ "version_filter_placeholder": {
+ "type": "string"
+ },
+ "version_filter_label": {
+ "type": "string"
+ },
+ "no_match_filter": {
+ "type": "string"
}
},
"additionalProperties": false
@@ -1245,6 +1365,9 @@
},
"has_replacement": {
"type": "string"
+ },
+ "vulnerabilities_count": {
+ "type": "string"
}
},
"additionalProperties": false
@@ -1317,6 +1440,9 @@
},
"show_less": {
"type": "string"
+ },
+ "maintainer_template": {
+ "type": "string"
}
},
"additionalProperties": false
@@ -1324,6 +1450,24 @@
"trends": {
"type": "object",
"properties": {
+ "chart_assistive_text": {
+ "type": "object",
+ "properties": {
+ "keyboard_navigation_horizontal": {
+ "type": "string"
+ },
+ "keyboard_navigation_vertical": {
+ "type": "string"
+ },
+ "table_available": {
+ "type": "string"
+ },
+ "table_caption": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
"granularity": {
"type": "string"
},
@@ -1500,6 +1644,9 @@
},
"subtitle": {
"type": "string"
+ },
+ "sparkline_nav_hint": {
+ "type": "string"
}
},
"additionalProperties": false
@@ -1546,6 +1693,9 @@
"no_esm": {
"type": "string"
},
+ "wasm": {
+ "type": "string"
+ },
"types_label": {
"type": "string"
},
@@ -1767,6 +1917,18 @@
}
},
"additionalProperties": false
+ },
+ "download": {
+ "type": "object",
+ "properties": {
+ "button": {
+ "type": "string"
+ },
+ "tarball": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
}
},
"additionalProperties": false
@@ -2569,6 +2731,12 @@
},
"additionalProperties": false
},
+ "view_selected": {
+ "type": "string"
+ },
+ "clear_selected_label": {
+ "type": "string"
+ },
"sort": {
"type": "object",
"properties": {
@@ -2670,6 +2838,9 @@
},
"security": {
"type": "string"
+ },
+ "selection": {
+ "type": "string"
}
},
"additionalProperties": false
@@ -3111,6 +3282,9 @@
}
},
"additionalProperties": false
+ },
+ "pr": {
+ "type": "string"
}
},
"additionalProperties": false
@@ -3168,6 +3342,12 @@
},
"charts_view": {
"type": "string"
+ },
+ "bar_chart_nav_hint": {
+ "type": "string"
+ },
+ "line_chart_nav_hint": {
+ "type": "string"
}
},
"additionalProperties": false
@@ -3502,6 +3682,30 @@
"compare_versions_title": {
"type": "string"
},
+ "comparing_versions_label": {
+ "type": "string"
+ },
+ "version_back_to_package": {
+ "type": "string"
+ },
+ "version_error_message": {
+ "type": "string"
+ },
+ "version_invalid_url_format": {
+ "type": "object",
+ "properties": {
+ "hint": {
+ "type": "string"
+ },
+ "from_version": {
+ "type": "string"
+ },
+ "to_version": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
"version_selector_title": {
"type": "string"
},
@@ -3582,6 +3786,39 @@
},
"filter_files_label": {
"type": "string"
+ },
+ "change_ratio": {
+ "type": "string"
+ },
+ "char_edits": {
+ "type": "string"
+ },
+ "diff_distance": {
+ "type": "string"
+ },
+ "loading_diff": {
+ "type": "string"
+ },
+ "loading_diff_error": {
+ "type": "string"
+ },
+ "merge_modified_lines": {
+ "type": "string"
+ },
+ "no_content_changes": {
+ "type": "string"
+ },
+ "options": {
+ "type": "string"
+ },
+ "view_file": {
+ "type": "string"
+ },
+ "view_in_code_browser": {
+ "type": "string"
+ },
+ "word_wrap": {
+ "type": "string"
}
},
"additionalProperties": false
@@ -4000,6 +4237,75 @@
},
"additionalProperties": false
},
+ "translation_status": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "generated_at": {
+ "type": "string"
+ },
+ "welcome": {
+ "type": "string"
+ },
+ "p1": {
+ "type": "string"
+ },
+ "p1_lang": {
+ "type": "string"
+ },
+ "p1_count": {
+ "type": "string"
+ },
+ "p2": {
+ "type": "string"
+ },
+ "guide": {
+ "type": "string"
+ },
+ "by_locale": {
+ "type": "string"
+ },
+ "by_file": {
+ "type": "string"
+ },
+ "complete_text": {
+ "type": "string"
+ },
+ "missing_text": {
+ "type": "string"
+ },
+ "missing_keys": {
+ "type": "string"
+ },
+ "progress_label": {
+ "type": "string"
+ },
+ "table": {
+ "type": "object",
+ "properties": {
+ "file": {
+ "type": "string"
+ },
+ "status": {
+ "type": "string"
+ },
+ "error": {
+ "type": "string"
+ },
+ "empty": {
+ "type": "string"
+ },
+ "file_link": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ }
+ },
+ "additionalProperties": false
+ },
"vacations": {
"type": "object",
"properties": {
@@ -4102,6 +4408,24 @@
},
"additionalProperties": false
},
+ "action_bar": {
+ "type": "object",
+ "properties": {
+ "title": {
+ "type": "string"
+ },
+ "selection": {
+ "type": "string"
+ },
+ "shortcut": {
+ "type": "string"
+ },
+ "button_close_aria_label": {
+ "type": "string"
+ }
+ },
+ "additionalProperties": false
+ },
"$schema": {
"type": "string"
}
diff --git a/knip.ts b/knip.ts
index cd012608b8..b40fc70b0d 100644
--- a/knip.ts
+++ b/knip.ts
@@ -4,24 +4,14 @@ const config: KnipConfig = {
workspaces: {
'.': {
entry: [
- 'app/pages/**/*.vue!',
- 'app/components/**/*.vue!',
- 'app/components/**/*.d.vue.ts!',
- 'app/composables/**/*.ts!',
- 'app/middleware/**/*.ts!',
- 'app/plugins/**/*.ts!',
- 'app/utils/**/*.ts!',
- 'server/**/*.ts!',
- 'modules/**/*.ts!',
- 'config/**/*.ts!',
- 'lunaria/**/*.ts!',
- 'shared/**/*.ts!',
'i18n/**/*.ts',
'lunaria.config.ts',
+ 'lunaria/lunaria.ts',
'pwa-assets.config.ts',
+ 'modules/*.ts',
'.lighthouserc.cjs',
'lighthouse-setup.cjs',
- 'uno-preset-rtl.ts!',
+ 'uno-preset-*.ts!',
'scripts/**/*.ts',
],
project: [
@@ -34,8 +24,6 @@ const config: KnipConfig = {
],
ignoreDependencies: [
'@iconify-json/*',
- '@voidzero-dev/vite-plus-core',
- 'vite-plus!',
'puppeteer',
/** Needs to be explicitly installed, even though it is not imported, to avoid type errors. */
'unplugin-vue-router',
@@ -45,9 +33,6 @@ const config: KnipConfig = {
/** Some components import types from here, but installing it directly could lead to a version mismatch */
'vue-router',
- /** Required by @nuxtjs/i18n at runtime but not directly imported in production code */
- '@intlify/shared',
-
/** Oxlint plugins don't get picked up yet */
'@e18e/eslint-plugin',
'eslint-plugin-regexp',
@@ -55,14 +40,20 @@ const config: KnipConfig = {
/** Used in test/e2e/helpers/ which is excluded from knip project scope */
'h3-next',
],
- ignoreUnresolved: ['#components', '#oauth/config'],
+ ignoreUnresolved: ['#oauth/config'],
+ ignoreFiles: [
+ 'app/components/Tooltip/Announce.vue',
+ 'app/components/UserCombobox.vue',
+ '**/*.unused.*',
+ ],
},
'cli': {
project: ['src/**/*.ts!', '!src/mock-*.ts'],
},
'docs': {
- entry: ['app/**/*.{ts,vue,css}'],
- ignoreDependencies: ['docus', 'better-sqlite3', '@nuxtjs/mdc', 'nuxt!'],
+ entry: ['app/**/*.{ts,vue,css}', 'shared/**/*.{ts,vue,css}'],
+ project: ['**/*.{ts,vue,cjs,mjs}'],
+ ignoreDependencies: ['@nuxtjs/mdc'],
},
},
}
diff --git a/lunaria/components.ts b/lunaria/components.ts
index a8c290727d..930b2b422c 100644
--- a/lunaria/components.ts
+++ b/lunaria/components.ts
@@ -6,6 +6,7 @@ import {
type StatusEntry,
} from '@lunariajs/core'
import { BaseStyles, CustomStyles } from './styles.ts'
+import type { I18nStatus } from '../shared/types/i18n-status.ts'
export function html(
strings: TemplateStringsArray,
@@ -33,8 +34,8 @@ function collapsePath(path: string) {
export const Page = (
config: LunariaConfig,
- status: LunariaStatus,
- lunaria: LunariaInstance,
+ status: I18nStatus,
+ _lunaria: LunariaInstance, // currenly not in use
): string => {
return html`
@@ -43,13 +44,13 @@ export const Page = (
${Meta} ${BaseStyles} ${CustomStyles}
- ${Body(config, status, lunaria)}
+ ${Body(config, status)}