Merge branch 'main' into truman/app-library-post-release

This commit is contained in:
tdgao
2026-08-20 11:35:17 -06:00
213 changed files with 6421 additions and 7123 deletions
+30
View File
@@ -0,0 +1,30 @@
# syntax=docker/dockerfile:1
FROM node:24-slim
LABEL org.opencontainers.image.source=https://github.com/modrinth/code
LABEL org.opencontainers.image.title=frontend
LABEL org.opencontainers.image.description="Modrinth website"
LABEL org.opencontainers.image.licenses=AGPL-3.0-only
RUN apt-get update \
&& apt-get install -y --no-install-recommends dumb-init \
&& rm -rf /var/lib/apt/lists/*
ENV NODE_ENV=production
ENV HOST=0.0.0.0
ENV PORT=3000
WORKDIR /app
# Nitro bundles every runtime dependency into .output, so no node_modules is needed.
COPY --chown=node:node .output ./.output
USER node
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD node -e "fetch('http://127.0.0.1:'+process.env.PORT+'/robots.txt').then(r=>process.exit(r.ok?0:1),()=>process.exit(1))"
ENTRYPOINT ["dumb-init", "--"]
CMD ["node", "/app/.output/server/index.mjs"]
+2
View File
@@ -0,0 +1,2 @@
*
!.output
+1 -19
View File
@@ -122,23 +122,6 @@ export default defineNuxtConfig({
},
},
hooks: {
async 'nitro:config'(nitroConfig) {
const emailTemplates = Object.keys(
await import('./src/templates/emails/index.ts').then((m) => m.default),
)
const docTemplates = Object.keys(
await import('./src/templates/docs/index.ts').then((m) => m.default),
)
nitroConfig.prerender = nitroConfig.prerender || {}
nitroConfig.prerender.routes = nitroConfig.prerender.routes || []
for (const template of emailTemplates) {
nitroConfig.prerender.routes.push(`/_internal/templates/email/${template}`)
}
for (const template of docTemplates) {
nitroConfig.prerender.routes.push(`/_internal/templates/doc/${template}`)
}
},
async 'build:before'() {
// 30 minutes
const TTL = 30 * 60 * 1000
@@ -290,6 +273,7 @@ export default defineNuxtConfig({
external: ['cloudflare:workers'],
},
preset: 'cloudflare_module',
noExternals: true,
cloudflare: {
nodeCompat: true,
},
@@ -325,14 +309,12 @@ export default defineNuxtConfig({
redirect: '/_internal/templates/email/**',
},
'/_internal/templates/email/**': {
prerender: true,
headers: {
'Content-Type': 'text/html',
'Cache-Control': 'public, max-age=3600',
},
},
'/_internal/templates/doc/**': {
prerender: true,
headers: {
'Content-Type': 'text/html',
'Cache-Control': 'public, max-age=3600',
+44 -2
View File
@@ -11,13 +11,55 @@
</NuxtLayout>
</template>
<script setup lang="ts">
import { I18nDebugPanel, LoadingBar, NotificationPanel } from '@modrinth/ui'
import { I18nDebugPanel, injectI18n, LoadingBar, NotificationPanel } from '@modrinth/ui'
import AdsConsentNotification from '~/components/ui/AdsConsentNotification.vue'
import { isDarkTheme } from '~/plugins/theme/index.ts'
import { setupProviders } from '~/providers/setup.ts'
import { useAuth } from './composables/auth'
const auth = await useAuth()
setupProviders(auth)
const userPreferences = setupProviders(auth)
const cosmetics = useCosmetics()
const theme = useTheme()
const { locale, setLocale } = injectI18n()
watch(
userPreferences.preferences,
(preferences) => {
if (!preferences) return
if (theme.syncAcrossDevices) {
if (isDarkTheme(preferences.appearance.theme)) {
theme.preferences.dark = preferences.appearance.theme
} else {
theme.preferences.light = preferences.appearance.theme
}
theme.preferred = preferences.appearance.auto ? 'system' : preferences.appearance.theme
}
if (locale.value !== preferences.localization.locale) {
void setLocale(preferences.localization.locale)
}
cosmetics.value.searchDisplayMode.mod = preferences.layouts.mods === 'rows' ? 'list' : 'grid'
cosmetics.value.searchDisplayMode.plugin =
preferences.layouts.plugins === 'rows' ? 'list' : 'grid'
cosmetics.value.searchDisplayMode.datapack =
preferences.layouts.datapacks === 'rows' ? 'list' : 'grid'
cosmetics.value.searchDisplayMode.shader =
preferences.layouts.shaders === 'rows' ? 'list' : 'grid'
cosmetics.value.searchDisplayMode.resourcepack =
preferences.layouts.resourcepacks === 'rows' ? 'list' : 'grid'
cosmetics.value.searchDisplayMode.modpack =
preferences.layouts.modpacks === 'rows' ? 'list' : 'grid'
cosmetics.value.searchDisplayMode.server =
preferences.layouts.servers === 'rows' ? 'list' : 'grid'
cosmetics.value.searchDisplayMode.user = preferences.layouts.users === 'rows' ? 'list' : 'grid'
cosmetics.value.rightSearchLayout = preferences.sidebars.right_aligned_search
cosmetics.value.leftContentLayout = preferences.sidebars.left_aligned_content
},
{ immediate: true },
)
</script>
+29 -7
View File
@@ -20,7 +20,7 @@
<ButtonLink
v-else-if="item.link ?? item.to"
type="quiet"
interaction="surface"
:interaction="isActive(item as NavStackLinkItem) ? 'none' : 'surface'"
:to="(item.link ?? item.to) as string"
class="nav-item !h-auto !w-full !justify-start !rounded-xl !px-4 !py-2.5 text-left leading-tight"
:class="{ 'is-active': isActive(item as NavStackLinkItem) }"
@@ -31,10 +31,16 @@
aria-hidden="true"
class="h-5 w-5 shrink-0"
/>
<span class="text-contrast">{{ item.label }}</span>
<span
:ref="(element) => setItemLabelRef(getKey(item, idx), element)"
v-tooltip="itemLabelTooltip(getKey(item, idx), item.label)"
class="min-w-0 flex-1 truncate text-contrast"
>
{{ item.label }}
</span>
<span
v-if="item.badge != null"
class="rounded-full bg-brand-highlight px-2 text-sm font-bold text-brand"
class="shrink-0 rounded-full bg-brand-highlight px-2 text-sm font-bold text-brand"
>
{{ String(item.badge) }}
</span>
@@ -55,10 +61,16 @@
aria-hidden="true"
class="h-5 w-5 shrink-0"
/>
<span class="text-contrast">{{ item.label }}</span>
<span
:ref="(element) => setItemLabelRef(getKey(item, idx), element)"
v-tooltip="itemLabelTooltip(getKey(item, idx), item.label)"
class="min-w-0 flex-1 truncate text-contrast"
>
{{ item.label }}
</span>
<span
v-if="item.badge != null"
class="rounded-full bg-brand-highlight px-2 text-sm font-bold text-brand"
class="shrink-0 rounded-full bg-brand-highlight px-2 text-sm font-bold text-brand"
>
{{ String(item.badge) }}
</span>
@@ -73,8 +85,8 @@
<script setup lang="ts">
import { ChevronRightIcon } from '@modrinth/assets'
import { Button, ButtonLink } from '@modrinth/ui'
import { type Component, computed, useSlots } from 'vue'
import { Button, ButtonLink, truncatedTooltip } from '@modrinth/ui'
import { type Component, type ComponentPublicInstance, computed, ref, useSlots } from 'vue'
type NavStackBaseItem = {
label: string
@@ -114,6 +126,16 @@ const hasSlotContent = computed(() => {
return !!(content && content.length)
})
const itemLabelRefs = ref<Record<string, HTMLElement | null>>({})
function setItemLabelRef(key: string, element: Element | ComponentPublicInstance | null) {
itemLabelRefs.value[key] = element instanceof HTMLElement ? element : null
}
function itemLabelTooltip(key: string, label: string) {
return truncatedTooltip(itemLabelRefs.value[key], label)
}
function isSeparator(item: NavStackEntry): item is NavStackSeparator {
return (item as any).type === 'separator'
}
+10 -9
View File
@@ -3,7 +3,10 @@
* This composable is kept for legacy code that hasn't been migrated yet.
*/
import { useVisitorUserAgent } from '~/composables/visitor-user-agent.ts'
import { withLabrinthCanaryHeader } from '~/helpers/canary.ts'
import { readEnv } from '~/helpers/env.ts'
import { getFrontendUserAgent, VISITOR_USER_AGENT_HEADER } from '~/helpers/user-agent.ts'
let cachedRateLimitKey = undefined
let rateLimitKeyPromise = undefined
@@ -13,15 +16,7 @@ async function getRateLimitKey(config) {
if (cachedRateLimitKey !== undefined) return cachedRateLimitKey
if (!rateLimitKeyPromise) {
rateLimitKeyPromise = (async () => {
try {
const mod = 'cloudflare:workers'
const { env } = await import(/* @vite-ignore */ mod)
return await env.RATE_LIMIT_IGNORE_KEY?.get()
} catch {
return undefined
}
})()
rateLimitKeyPromise = readEnv('RATE_LIMIT_IGNORE_KEY')
}
cachedRateLimitKey = await rateLimitKeyPromise
@@ -40,6 +35,12 @@ export const useBaseFetch = async (url, options = {}, skipAuth = false) => {
if (import.meta.server) {
options.headers['x-ratelimit-key'] = await getRateLimitKey(config)
options.headers['User-Agent'] = getFrontendUserAgent(config.public.hash)
const visitorUserAgent = useVisitorUserAgent()
if (visitorUserAgent) {
options.headers[VISITOR_USER_AGENT_HEADER] = visitorUserAgent
}
}
if (!skipAuth) {
@@ -0,0 +1,9 @@
import { tryUseNuxtApp } from '#imports'
// Nuxt's `useRequestHeaders` throws outside of a setup context, and `useBaseFetch` is
// called from plenty of places that no longer have one.
export function useVisitorUserAgent(): string | undefined {
if (!import.meta.server) return undefined
return tryUseNuxtApp()?.ssrContext?.event?.node?.req?.headers['user-agent']
}
+8 -12
View File
@@ -14,18 +14,10 @@ import {
import type { Ref } from 'vue'
import { useFeatureFlags } from '~/composables/featureFlags.ts'
import { useVisitorUserAgent } from '~/composables/visitor-user-agent.ts'
import { withStagingArchonBaseUrl } from '~/helpers/archon.ts'
async function getRateLimitKeyFromSecretsStore(): Promise<string | undefined> {
try {
const mod = 'cloudflare:workers'
const { env } = await import(/* @vite-ignore */ mod)
return await env.RATE_LIMIT_IGNORE_KEY?.get()
} catch {
// Not running in Cloudflare Workers environment
return undefined
}
}
import { readEnv } from '~/helpers/env.ts'
import { getFrontendUserAgent, VISITOR_USER_AGENT_HEADER } from '~/helpers/user-agent.ts'
export function createModrinthClient(
auth: Ref<{ token: string | undefined }>,
@@ -33,10 +25,12 @@ export function createModrinthClient(
apiBaseUrl: string
archonBaseUrl: string
sharedInstancesBaseUrl: string
commitHash: string
rateLimitKey?: string
},
): NuxtModrinthClient {
const flags = useFeatureFlags()
const visitorUserAgent = useVisitorUserAgent()
const optionalFeatures = [
import.meta.dev ? (new VerboseLoggingFeature() as AbstractFeature) : undefined,
].filter(Boolean) as AbstractFeature[]
@@ -46,8 +40,10 @@ export function createModrinthClient(
archonBaseUrl: () =>
withStagingArchonBaseUrl(config.archonBaseUrl, flags.value.archonApiStaging),
sharedInstancesBaseUrl: config.sharedInstancesBaseUrl,
userAgent: () => (import.meta.server ? getFrontendUserAgent(config.commitHash) : undefined),
headers: visitorUserAgent ? { [VISITOR_USER_AGENT_HEADER]: visitorUserAgent } : undefined,
archonSentryCapture: () => flags.value.archonSentryCapture,
rateLimitKey: config.rateLimitKey || getRateLimitKeyFromSecretsStore,
rateLimitKey: config.rateLimitKey || (() => readEnv('RATE_LIMIT_IGNORE_KEY')),
features: [
// for modrinth hosting
// is skipped for normal reqs
+22
View File
@@ -0,0 +1,22 @@
type SecretsStoreBinding = { get: () => Promise<string> }
// Cloudflare exposes plain vars and Secrets Store bindings on the Workers env. Every
// other runtime (the Docker image, local dev) only has process.env.
async function getWorkersEnv(): Promise<Record<string, unknown> | undefined> {
try {
const mod = 'cloudflare:workers'
const { env } = await import(/* @vite-ignore */ mod)
return env as Record<string, unknown>
} catch {
return undefined
}
}
export async function readEnv(name: string): Promise<string | undefined> {
const binding = (await getWorkersEnv())?.[name]
if (typeof binding === 'string') return binding
if (binding) return await (binding as SecretsStoreBinding).get()
return globalThis.process?.env?.[name]
}
+5
View File
@@ -0,0 +1,5 @@
export const VISITOR_USER_AGENT_HEADER = 'X-Forwarded-User-Agent'
export function getFrontendUserAgent(commitHash: string): string {
return `modrinth/frontend/${commitHash || 'unknown'} (support@modrinth.com)`
}
+24 -1
View File
@@ -427,6 +427,14 @@
tone: 'brand',
shown: isAdmin(auth.user),
},
{
id: 'servers-lookup',
label: 'Server lookup',
type: 'link',
to: '/admin/servers/lookup',
tone: 'brand',
shown: isAdmin(auth.user),
},
{
id: 'servers-notices',
label: formatMessage(messages.manageServerNotices),
@@ -480,6 +488,7 @@
<template #file-lookup>
<FileIcon aria-hidden="true" /> {{ formatMessage(messages.fileLookup) }}
</template>
<template #servers-lookup> <ServerIcon aria-hidden="true" /> Server lookup </template>
<template #servers-notices>
<IssuesIcon aria-hidden="true" /> {{ formatMessage(messages.manageServerNotices) }}
</template>
@@ -877,6 +886,7 @@ import {
injectModrinthClient,
injectNotificationManager,
injectPageContext,
injectUserPreferences,
providePageContext,
TeleportOverflowMenu,
useHostingIntercom,
@@ -911,6 +921,7 @@ const country = useUserCountry()
const { formatMessage } = useVIntl()
const { addNotification } = injectNotificationManager()
const { updatePreferences } = injectUserPreferences()
const auth = await useAuth()
const user = await useUser()
@@ -1479,7 +1490,19 @@ function toggleBrowseMenu() {
}
}
const { cycle: changeTheme } = useTheme()
const theme = useTheme()
function changeTheme() {
const selectedTheme = theme.cycle()
if (!theme.syncAcrossDevices) return
void updatePreferences({
appearance: {
auto: false,
theme: selectedTheme,
},
}).catch(() => undefined)
}
</script>
<style lang="scss">
@@ -2855,78 +2855,6 @@
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Vývojářský režim deaktivován"
},
"settings.display.project-list-layouts.datapack": {
"message": "Stránka datapacků"
},
"settings.display.project-list-layouts.description": {
"message": "Vyberte si preferované rozložení pro každou stránku, která zobrazuje seznamy projektů na tomto zařízení."
},
"settings.display.project-list-layouts.mod": {
"message": "Stránka módů"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galerie"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Mřížka"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Řádky"
},
"settings.display.project-list-layouts.modpack": {
"message": "Stránka modpacků"
},
"settings.display.project-list-layouts.plugin": {
"message": "Stránka pluginů"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Stránka resourcepacků"
},
"settings.display.project-list-layouts.server": {
"message": "Stránka serverů"
},
"settings.display.project-list-layouts.shader": {
"message": "Stránka shaderů"
},
"settings.display.project-list-layouts.title": {
"message": "Rozvržení seznamu projektů"
},
"settings.display.project-list-layouts.user": {
"message": "Stránka uživatelských profilů"
},
"settings.display.project-list.layouts.collection": {
"message": "Kolekce"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Povolí pokročilé vykreslování, například efekty rozmazání, které mohou bez hardwarového zrychlení způsobovat problémy s výkonem."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Pokročilé vykreslování"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Způsobí, že odkazy směřující mimo Modrinth budou otevřeny v nové kartě. Bez ohledu na toto nastavení se odkazy na stejné doméně a v Markdown popisech otevřou ve stávající kartě a odkazy na reklamy a úpravy stránek budou otevřeny v nové kartě."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Otevřít externí odkazy v nové kartě"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Skryje tlačítka \"Získat Modrinth App\" z primární navigace. Stránka aplikace Modrinth bude stále přístupná ze vstupní stránky nebo ze zápatí."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Skrýt Modrinth App promoce"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Zarovná postranní panel s detaily o projektu vlevo od obsahu stránky."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Zarovná postranní panel s filtry vpravo od výsledků vyhledávání."
},
"settings.display.theme.description": {
"message": "Vyberte si preferovaný barevný motiv pro Modrinth na tomto zařízení."
},
"settings.display.theme.title": {
"message": "Barevný motiv"
},
"settings.head-title": {
"message": "Nastavení zobrazení"
},
@@ -3101,48 +3101,6 @@
"settings.billing.upgrade": {
"message": "Opgrader"
},
"settings.display.project-list-layouts.datapack": {
"message": "Side til datapakker"
},
"settings.display.project-list-layouts.mod": {
"message": "Mods side"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galleri"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Gitter"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Rækker"
},
"settings.display.project-list-layouts.modpack": {
"message": "Modpacks side"
},
"settings.display.project-list-layouts.plugin": {
"message": "Plugins side"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Side til ressourcepakker"
},
"settings.display.project-list-layouts.server": {
"message": "Servere side"
},
"settings.display.project-list-layouts.shader": {
"message": "Side til shaders"
},
"settings.display.project-list-layouts.title": {
"message": "Projektlistelayouts"
},
"settings.display.project-list.layouts.collection": {
"message": "Samling"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Flytter sidebjælken til venstre for sidens indhold."
},
"settings.display.theme.title": {
"message": "Farvetema"
},
"settings.pats.action.create": {
"message": "Opret en PAT"
},
@@ -5012,96 +5012,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Entwicklermodus</strong> ist aktiviert. Dies erlaubt es dir, die internen IDs von verschiedensten Dingen in Modrinth anzusehen, welche eventuell von nutzen sein können, wenn du ein Entwickler bist, welcher die Modrinth API verwendet. Klicke 5 mal auf das Modrinth Logo am unteren Ender der Seite um den Entwicklermodus umzuschalten."
},
"settings.display.flags.description": {
"message": "Aktiviere oder deaktiviere bestimmte Funktionen auf diesem Gerät."
},
"settings.display.flags.title": {
"message": "Funktionen umschalten"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "Entwicklermodus wurde deaktiviert"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Entwicklermodus deaktiviert"
},
"settings.display.project-list-layouts.datapack": {
"message": "Datenpakete-Seite"
},
"settings.display.project-list-layouts.description": {
"message": "Wähle dein bevorzugtes Layout für jede Seite, welches Projektlisten auf diesem Gerät anzeigt."
},
"settings.display.project-list-layouts.mod": {
"message": "Mods-Seite"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galerie"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Raster"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Zeilen"
},
"settings.display.project-list-layouts.modpack": {
"message": "Modpakete-Seite"
},
"settings.display.project-list-layouts.plugin": {
"message": "Plugins-Seite"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Ressourcenpakete-Seite"
},
"settings.display.project-list-layouts.server": {
"message": "Server-Seite"
},
"settings.display.project-list-layouts.shader": {
"message": "Shader-Seite"
},
"settings.display.project-list-layouts.title": {
"message": "Projeklisten-Layouts"
},
"settings.display.project-list-layouts.user": {
"message": "Benutzerprofilseiten"
},
"settings.display.project-list.layouts.collection": {
"message": "Kollektionen"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Aktiviert erweiterte Renderfunktionen wie Unschärfeeffekte, welche ohne hardwarebeschleunigtes Rendering zu Leistungsproblemen führen kann."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Erweiterte Renderfunktionen"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Lasse Links, welche ausserhalb von Modrinth führen, in einem neuen Tab öffnen. Unabhängig von dieser Einstellung werden Links auf die gleiche Domain und in Markdown beschreibungen im selben Tab geöffnet, und Links in Werbung Bearbeitungsseiten öffnen in einem neuen Tab."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Öffne externe Links in neuem Tab"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Versteckt die \"Modrinth App herunterladen\" Schaltfläche von der Hauptnavigation. Die Modrinth App Seite kann immer noch auf der Startseite oder in der Fusszeile gefunden werden."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Verstecke Modrinth App Werbung"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Linksbündige Seitenleiste auf Inhaltsseiten"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Richtet die Seitenleiste links vom Seiteninhalt aus."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Richtet die Filter-Seitenleiste rechts neben den Suchergebnissen aus."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Rechtsbündige Filter-Suchleiste auf Suchseiten"
},
"settings.display.theme.description": {
"message": "Wähle dein bevorzugtes Farbschema für Modrinth auf diesem Gerät aus."
},
"settings.display.theme.title": {
"message": "Farbschema"
},
"settings.head-title": {
"message": "Anzeigeeinstellungen"
},
@@ -5012,96 +5012,12 @@
"settings.display.banner.developer-mode.description": {
"message": "Der <strong>Entwicklermodus</strong> ist aktiviert. Damit kannst du die internen IDs verschiedener Elemente in Modrinth anzeigen, was für Entwickler, welche die Modrinth-API verwenden, hilfreich sein kann. Klick fünfmal auf das Modrinth-Logo unten auf der Seite, um den Entwicklermodus umzuschalten."
},
"settings.display.flags.description": {
"message": "Bestimmte Funktionen auf diesem Gerät aktivieren oder deaktivieren."
},
"settings.display.flags.title": {
"message": "Funktionen umschalten"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "Entwicklermodus wurde deaktiviert"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Entwicklermodus deaktiviert"
},
"settings.display.project-list-layouts.datapack": {
"message": "Datenpakete-Seite"
},
"settings.display.project-list-layouts.description": {
"message": "Wähle auf diesem Gerät für jede Seite, auf der Projektlisten angezeigt werden, dein bevorzugtes Layout aus."
},
"settings.display.project-list-layouts.mod": {
"message": "Mods-Seite"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galerie"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Raster"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Zeilen"
},
"settings.display.project-list-layouts.modpack": {
"message": "Modpacks-Seite"
},
"settings.display.project-list-layouts.plugin": {
"message": "Plugins-Seite"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Ressourcenpakete-Seite"
},
"settings.display.project-list-layouts.server": {
"message": "Server-Seite"
},
"settings.display.project-list-layouts.shader": {
"message": "Shader-Seite"
},
"settings.display.project-list-layouts.title": {
"message": "Layouts für Projektlisten"
},
"settings.display.project-list-layouts.user": {
"message": "Benutzerprofilseiten"
},
"settings.display.project-list.layouts.collection": {
"message": "Kollektion"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Aktiviert erweiterte Rendering-Funktionen wie Unschärfeeffekte, welche ohne hardwarebeschleunigtes Rendering zu Leistungsproblemen führen können."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Erweiterte Renderfunktionen"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Links, die außerhalb von Modrinth führen, werden in einem neuen Tab geöffnet. Unabhängig von dieser Einstellung werden Links auf der gleichen Domain und in Markdown-Beschreibungen immer im selben Tab geöffnet, während Links auf Anzeigen- und Bearbeitungsseiten immer in einem neuen Tab geöffnet werden."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Externe Links in neuem Tab öffnen"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Versteckt die \"Modrinth App herunterladen\"-Schaltflächen aus der Hauptnavigation. Die Seite der Modrinth App kann weiterhin auf der Startseite oder in der Fußzeile gefunden werden."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Werbungen für die Modrinth App ausblenden"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Linksbündige Seitenleiste auf Inhaltsseiten"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Richtet die Seitenleiste links vom Seiteninhalt aus."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Richtet die Filter-Seitenleiste rechts neben den Suchergebnissen aus."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Rechtsbündige Filter-Seitenleiste auf Suchseiten"
},
"settings.display.theme.description": {
"message": "Wähle dein bevorzugtes Farbschema für Modrinth auf diesem Gerät."
},
"settings.display.theme.title": {
"message": "Farbschema"
},
"settings.head-title": {
"message": "Anzeigeeinstellungen"
},
@@ -5282,96 +5282,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Developer mode</strong> is active. This will allow you to view the internal IDs of various things throughout Modrinth that may be helpful if you're a developer using the Modrinth API. Click on the Modrinth logo at the bottom of the page 5 times to toggle developer mode."
},
"settings.display.flags.description": {
"message": "Enable or disable certain features on this device."
},
"settings.display.flags.title": {
"message": "Toggle features"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "Developer mode has been disabled"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Developer mode deactivated"
},
"settings.display.project-list-layouts.datapack": {
"message": "Data Packs page"
},
"settings.display.project-list-layouts.description": {
"message": "Select your preferred layout for each page that displays project lists on this device."
},
"settings.display.project-list-layouts.mod": {
"message": "Mods page"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Gallery"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Grid"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Rows"
},
"settings.display.project-list-layouts.modpack": {
"message": "Modpacks page"
},
"settings.display.project-list-layouts.plugin": {
"message": "Plugins page"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Resource Packs page"
},
"settings.display.project-list-layouts.server": {
"message": "Servers page"
},
"settings.display.project-list-layouts.shader": {
"message": "Shaders page"
},
"settings.display.project-list-layouts.title": {
"message": "Project list layouts"
},
"settings.display.project-list-layouts.user": {
"message": "User profile pages"
},
"settings.display.project-list.layouts.collection": {
"message": "Collection"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Enables advanced rendering such as blur effects that may cause performance issues without hardware-accelerated rendering."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Advanced rendering"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Make links which go outside of Modrinth open in a new tab. No matter this setting, links on the same domain and in Markdown descriptions will open in the same tab, and links on ads and edit pages will open in a new tab."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Open external links in new tab"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Hides the \"Get Modrinth App\" buttons from primary navigation. The Modrinth App page can still be found on the landing page or in the footer."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Hide Modrinth App promotions"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Left-aligned sidebar on content pages"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Aligns the sidebar to the left of the page's content."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Aligns the filters sidebar to the right of the search results."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Right-aligned filters sidebar on search pages"
},
"settings.display.theme.description": {
"message": "Select your preferred color theme for Modrinth on this device."
},
"settings.display.theme.title": {
"message": "Color theme"
},
"settings.head-title": {
"message": "Display settings"
},
@@ -5012,96 +5012,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Modo desarrollador</strong> activo. Podrás ver los IDs internos de varios elementos de Modrinth, lo que resulta útil si usas la API de Modrinth. Haz clic en el logo de Modrinth en la parte inferior de la página 5 veces para alternar el modo desarrollador."
},
"settings.display.flags.description": {
"message": "Activa o desactiva determinadas funciones en este dispositivo."
},
"settings.display.flags.title": {
"message": "Activar/desactivar funciones"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "El modo desarrollador se ha desactivado"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Modo desarrollador desactivado"
},
"settings.display.project-list-layouts.datapack": {
"message": "Página de Data Packs"
},
"settings.display.project-list-layouts.description": {
"message": "Selecciona el diseño que prefieras para cada página que muestre listas de proyectos en este dispositivo."
},
"settings.display.project-list-layouts.mod": {
"message": "Página de Mods"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galería"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Cuadrícula"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Filas"
},
"settings.display.project-list-layouts.modpack": {
"message": "Página de Modpacks"
},
"settings.display.project-list-layouts.plugin": {
"message": "Página de Plugins"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Página de Resource Packs"
},
"settings.display.project-list-layouts.server": {
"message": "Página de Servidores"
},
"settings.display.project-list-layouts.shader": {
"message": "Página de Shaders"
},
"settings.display.project-list-layouts.title": {
"message": "Diseños de las listas de proyectos"
},
"settings.display.project-list-layouts.user": {
"message": "Páginas de perfil de usuario"
},
"settings.display.project-list.layouts.collection": {
"message": "Colección"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Activa el renderizado avanzado, como los efectos de desenfoque, que pueden afectar el rendimiento sin aceleración por hardware."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Renderizado avanzado"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Haz que los enlaces que llevan fuera de Modrinth se abran en una nueva pestaña. Sin importar esta configuración, los enlaces del mismo dominio y los de las descripciones en Markdown se abrirán en la misma pestaña, mientras que los enlaces en anuncios y páginas de edición se abrirán en una nueva pestaña."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Abrir enlaces externos en una nueva pestaña"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Oculta los botones \"Obtener la Modrinth App\" de la navegación principal. La página de la aplicación Modrinth sigue estando disponible en la página de inicio o en el pie de página."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Ocultar promociones de la Modrinth App"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Barra lateral alineada a la izquierda en las páginas de contenido"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Alinea la barra lateral a la izquierda en las páginas de contenido."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Alinea la barra lateral de los filtros a la derecha de los resultados de búsqueda."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Barra lateral de filtros alineada a la derecha en páginas de búsqueda"
},
"settings.display.theme.description": {
"message": "Selecciona el tema de color que prefieras para Modrinth en este dispositivo."
},
"settings.display.theme.title": {
"message": "Color de la interfaz"
},
"settings.head-title": {
"message": "Configuración de Visualización"
},
@@ -4265,96 +4265,12 @@
"settings.display.banner.developer-mode.description": {
"message": "El <strong>modo desarrollador</strong> está activo. Esto te permitirá ver los ID internos de varios elementos de Modrinth, lo que puede resultarte útil si eres desarrollador y utilizas la API de Modrinth. Haz clic 5 veces en el logotipo de Modrinth situado en la parte inferior de la página para activar o desactivar el modo desarrollador."
},
"settings.display.flags.description": {
"message": "Activar o desactivar determinadas funciones de este dispositivo."
},
"settings.display.flags.title": {
"message": "Alternar funciones"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "El modo de desarrollador se ha desactivado"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Modo de desarrollador desactivado"
},
"settings.display.project-list-layouts.datapack": {
"message": "Página de Paquetes de Datos"
},
"settings.display.project-list-layouts.description": {
"message": "Selecciona tu diseño preferido para cada página que muestre listas de proyectos en este dispositivo."
},
"settings.display.project-list-layouts.mod": {
"message": "Página de Mods"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galería"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Cuadrícula"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Filas"
},
"settings.display.project-list-layouts.modpack": {
"message": "Página de Modpacks"
},
"settings.display.project-list-layouts.plugin": {
"message": "Página de Plugins"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Página de Paquetes de Recursos"
},
"settings.display.project-list-layouts.server": {
"message": "Página de servidores"
},
"settings.display.project-list-layouts.shader": {
"message": "Página de Sombreadores"
},
"settings.display.project-list-layouts.title": {
"message": "Diseños de la lista de proyectos"
},
"settings.display.project-list-layouts.user": {
"message": "Páginas de perfil de usuario"
},
"settings.display.project-list.layouts.collection": {
"message": "Colección"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Habilita el renderizado avanzado, como los efectos de desenfoque, que pueden causar problemas de rendimiento sin renderizado acelerado por hardware."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Renderizado avanzado"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Haz que los enlaces que salen de Modrinth se abran en una nueva pestaña. Independientemente de esta configuración, los enlaces del mismo dominio y de las descripciones Markdown se abrirán en la misma pestaña, y los enlaces de los anuncios y las páginas de edición se abrirán en una nueva pestaña."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Abrir enlaces externos en una nueva pestaña"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Oculta los botones «Obtener la aplicación Modrinth» de la navegación principal. La página de la aplicación Modrinth sigue estando disponible en la página de inicio o en el pie de página."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Ocultar promociones de la aplicación de Modrinth"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Barra lateral alineada a la izquierda en páginas de contenido"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Alinea la barra lateral a la izquierda del contenido de la página."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Alinea la barra lateral de filtros a la derecha de los resultados de la búsqueda."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Barra lateral de filtros alineada a la derecha en las páginas de búsqueda"
},
"settings.display.theme.description": {
"message": "Seleccione su tema de color preferido para Modrinth en este dispositivo."
},
"settings.display.theme.title": {
"message": "Tema de color"
},
"settings.head-title": {
"message": "Configuración de pantalla"
},
@@ -1025,21 +1025,6 @@
"settings.billing.payment_method.primary": {
"message": "Ensisijainen"
},
"settings.display.project-list-layouts.mod": {
"message": "Mods -sivu"
},
"settings.display.project-list-layouts.plugin": {
"message": "Plugins -sivu"
},
"settings.display.project-list-layouts.shader": {
"message": "Shaders -sivu"
},
"settings.display.project-list.layouts.collection": {
"message": "Kokoelma"
},
"settings.display.theme.title": {
"message": "Väri teema"
},
"settings.pats.modal.create.expires.label": {
"message": "Vanhenee"
},
@@ -3005,93 +3005,9 @@
"settings.display.banner.developer-mode.description": {
"message": "Ang <strong>developer mode</strong> ay aktibo. Binibigyang-daan ka nitong malaman ang internal ID ng samut-saring bagay sa Modrinth na nakakatulong sa mga developer sa paggamit ng Modrinth API. Pindutin ang logo ng Modrinth sa ibaba ng pahina ng 5 beses upang ma-toggle ang developer mode."
},
"settings.display.flags.description": {
"message": "Magpagana at magpatay ng mga piniling tampok sa iyong device."
},
"settings.display.flags.title": {
"message": "Pagtatakda ng tampok"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "Pinatay ang moda ng nagde-develop"
},
"settings.display.project-list-layouts.datapack": {
"message": "Pahina ng Mga Data Pack"
},
"settings.display.project-list-layouts.description": {
"message": "Pumili ng iyong gugustohing ayos ng bawat pahinang magpapakita sa mga listahan ng proyekto sa iyong device."
},
"settings.display.project-list-layouts.mod": {
"message": "Pahina ng mga mod"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galeriya"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Parilya"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Hilera"
},
"settings.display.project-list-layouts.modpack": {
"message": "Pahina ng mga modpack"
},
"settings.display.project-list-layouts.plugin": {
"message": "Pahina ng mga plugin"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Pahina ng mga resource pack"
},
"settings.display.project-list-layouts.server": {
"message": "Pahina ng mga server"
},
"settings.display.project-list-layouts.shader": {
"message": "Pahina ng mga shader"
},
"settings.display.project-list-layouts.title": {
"message": "Mga ayos ng listahan ng proyekto"
},
"settings.display.project-list-layouts.user": {
"message": "Mga profile page ng tagagamit"
},
"settings.display.project-list.layouts.collection": {
"message": "Koleksiyon"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Patatakbuhin ang masalimuot na pagrerender o advanced rendering katulad ng paglalabo na maaaring sumanhi ng isyu sa performance sa mga walang hardware-accelerated rendering."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Masalimuot na pagrerender"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Gawin na magbukas ng bagong tab ang mga link na papunta sa labas ng Modrinth. Kahit na sa setting na ito, ang mga link sa magkatulad na domain at nasa paglalarawang Markdown ay bubukas sa iisang tab, at ang mga link sa ads at edit page ay magbubukas sa bagong tab."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Buksan ang link palabas sa bagong tab"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Itatago ang \"Kunin ang Modrinth App\" na mga pindutan sa pangunahing navigation. Ang pahina ng Modrinth App ay maaari pa ring mahanap sa landing page o kaya sa footer."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Itago ang mga promosyong Modrinth App"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Pinakaliwang sidebar sa mga pahinang kontento"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Aayusin sa kaliwa ng sidebar sa kontento ng pahina."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Isasaayos ang mga pansala sa kanan ng resulta ng paghanap."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Pinakanang sidebar ng pansala sa pahina ng paghanap"
},
"settings.display.theme.description": {
"message": "Pumili ng iyong gugustohing paksang kulay para sa Modrinth ng nitong device."
},
"settings.display.theme.title": {
"message": "Paksang kulay"
},
"settings.head-title": {
"message": "Settings ng display"
},
@@ -5012,96 +5012,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Le mode développeur</strong> est activé. Cela vous permettra de voir les ID internes de diverses choses dans Modrinth qui peuvent être utiles si vous êtes un développeur utilisant l'API de Modrinth. Cliquez 5 fois sur le logo Modrinth en bas de la page pour désactiver le mode développeur."
},
"settings.display.flags.description": {
"message": "Activer ou désactiver certaines fonctionnalités sur cet appareil."
},
"settings.display.flags.title": {
"message": "Activer/désactiver les fonctionnalités"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "Le mode développeur a été désactivé"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Mode développeur désactivé"
},
"settings.display.project-list-layouts.datapack": {
"message": "Page des data packs"
},
"settings.display.project-list-layouts.description": {
"message": "Sélectionnez votre mise en page préférée pour chaque page qui affiche les listes de projets sur cet appareil."
},
"settings.display.project-list-layouts.mod": {
"message": "Page des mods"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galerie"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Grille"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Lignes"
},
"settings.display.project-list-layouts.modpack": {
"message": "Page des modpacks"
},
"settings.display.project-list-layouts.plugin": {
"message": "Page des plugins"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Page des packs de ressources"
},
"settings.display.project-list-layouts.server": {
"message": "Page des serveurs"
},
"settings.display.project-list-layouts.shader": {
"message": "Page des shaders"
},
"settings.display.project-list-layouts.title": {
"message": "Mises en pages de la liste de projet"
},
"settings.display.project-list-layouts.user": {
"message": "Pages de profil utilisateur"
},
"settings.display.project-list.layouts.collection": {
"message": "Collection"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Permet un rendu avancé tel que les effets de flou qui pourrait causer des problèmes de performance si le rendu n'est pas accéléré par le matériel."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Rendu avancé"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Les liens qui vont en dehors de Modrinth s'ouvrent dans un nouvel onglet. Peu importe ce paramètre, les liens sur le même domaine et dans les descriptions Markdown s'ouvriront dans le même onglet, et les liens sur les publicités et les pages d'édition s'ouvriront dans un nouvel onglet."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Ouvre les liens externes dans un nouvel onglet"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Cache les boutons « Obtenir Modrinth App » de la navigation principale. La page de Modrinth App peut toujours être trouvée sur la page d'accueil ou dans le pied de page."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Cache les publicités de Modrinth App"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Barre latérale alignée à gauche sur les pages de contenus"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Aligne la barre latérale à gauche du contenu de la page."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Aligne les filtres de la barre latérale à droite des résultats de recherche."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Filtres de la barre latérale alignés à droite sur les pages de recherche"
},
"settings.display.theme.description": {
"message": "Sélectionnez votre thème de couleur préféré pour Modrinth sur cet appareil."
},
"settings.display.theme.title": {
"message": "Thème de couleur"
},
"settings.head-title": {
"message": "Paramètres daffichage"
},
@@ -4670,96 +4670,12 @@
"settings.display.banner.developer-mode.description": {
"message": "A <strong>fejlesztői mód</strong> aktív. Ez lehetővé teszi, hogy megtekintsd a Modrinth különböző elemeinek belső azonosítóit, ami hasznos lehet, ha a Modrinth API-t használó fejlesztő vagy. Kattints 5-ször a lap alján található Modrinth logóra a fejlesztői mód bekapcsolásához."
},
"settings.display.flags.description": {
"message": "Bizonyos funkciók engedélyezése vagy letiltása ezen az eszközön."
},
"settings.display.flags.title": {
"message": "Funkciók be-/kikapcsolása"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "A fejlesztői mód le lett tiltva"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Fejlesztői mód letiltva"
},
"settings.display.project-list-layouts.datapack": {
"message": "Adatcsomagok oldal"
},
"settings.display.project-list-layouts.description": {
"message": "Válaszd ki a kívánt elrendezést minden olyan oldalhoz, amelyen a projektlisták megjelennek ezen az eszközön."
},
"settings.display.project-list-layouts.mod": {
"message": "Modok oldal"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Képek"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Rács"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Lista"
},
"settings.display.project-list-layouts.modpack": {
"message": "Modcsomagok oldal"
},
"settings.display.project-list-layouts.plugin": {
"message": "Bővítmények oldal"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Forráscsomagok oldal"
},
"settings.display.project-list-layouts.server": {
"message": "Szerverek oldal"
},
"settings.display.project-list-layouts.shader": {
"message": "Shaderek oldal"
},
"settings.display.project-list-layouts.title": {
"message": "Projektlista elrendezések"
},
"settings.display.project-list-layouts.user": {
"message": "Profil oldalak"
},
"settings.display.project-list.layouts.collection": {
"message": "Gyűjtemény"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Lehetővé teszi a összetett megjelenítést, például az elmosódási effektusokat, amelyek teljesítményproblémákat okozhatnak hardveres gyorsítás nélkül."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Összetett renderelés"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "A Modrinthon kívüli linkeket új lapon nyílnak meg. Ettől a beállítástól függetlenül az azonos domainen található linkek és a Markdown leírásokban szereplő linkek ugyanazon a lapon nyílnak meg, míg a hirdetésekben és a szerkesztési oldalakon található linkek új lapon nyílnak meg."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Külső linkek megnyitása új lapon"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Elrejti a „Szerezd meg a Modrinth Appot” gombokat az elsődleges navigációból. A Modrinth App oldal továbbra is megtalálható a nyitóoldalon vagy a láblécben."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Modrinth App promóciók elrejtése"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Balra igazított oldalsáv oldalakon"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "A tartalom bal oldalára igazítja az oldalsávot."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "A keresési eredmények jobb oldalára igazítja a szűrőket."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Jobbra igazított szűrők oldalakon"
},
"settings.display.theme.description": {
"message": "Válaszd ki a Modrinth számára a kívánt színsémát ezen az eszközön."
},
"settings.display.theme.title": {
"message": "Téma"
},
"settings.head-title": {
"message": "Megjelenési beállítások"
},
@@ -3038,81 +3038,6 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Mode pengembang</strong> aktif. Ini akan memungkinkan Anda untuk melihat pengenal internal dari berbagai hal di seluruh Modrinth yang dapat berguna bila Anda adalah seorang pengembang yang menggunakan API Modrinth. Klik logo Modrinth di bagian bawah halaman lima kali untuk menghidupkan mode pengembang."
},
"settings.display.flags.description": {
"message": "Hidupkan atau matikan fitur tertentu di perangkat ini."
},
"settings.display.flags.title": {
"message": "Hidup/Matikan fitur"
},
"settings.display.project-list-layouts.datapack": {
"message": "Halaman Paket Data"
},
"settings.display.project-list-layouts.description": {
"message": "Pilih tata letak pilihan Anda untuk setiap halaman yang menampilkan daftar proyek di perangkat ini."
},
"settings.display.project-list-layouts.mod": {
"message": "Halaman Mod"
},
"settings.display.project-list-layouts.modpack": {
"message": "Halaman Paket Mod"
},
"settings.display.project-list-layouts.plugin": {
"message": "Halaman Pasang-masuk (Plug-in)"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Halaman Paket Sumber"
},
"settings.display.project-list-layouts.server": {
"message": "Halaman Server"
},
"settings.display.project-list-layouts.shader": {
"message": "Halaman Efek Gambar"
},
"settings.display.project-list-layouts.title": {
"message": "Tata letak daftar proyek"
},
"settings.display.project-list-layouts.user": {
"message": "Halaman profil pengguna"
},
"settings.display.project-list.layouts.collection": {
"message": "Koleksi"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Menghidupkan renderasi tingkat lanjut seperti efek buram yang dapat menyebabkan masalah kinerja tanpa renderasi yang dipercepat perangkat keras."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Renderasi tingkat lanjut"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Tautan yang mengarahkan Anda ke luar Modrinth akan dibuka di tab baru. Terlepas dari pengaturan ini, tautan pada domain yang sama dan di keterangan berformat Markdown akan dibuka di tab yang sama, dan tautan pada iklan dan halaman penyuntingan akan dibuka di tab baru."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Buka tautan eksternal di tab baru"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Sembunyikan tombol \"Dapatkan Modrinth App\" dari navigasi utama. Halaman Modrinth App masih dapat ditemukan di halaman landas atau di bagian bawah halaman."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Sembunyikan promosi Aplikasi Modrinth"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Bilah sisi rata kiri pada halaman konten"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Meratakan bilah sisi ke sebelah kiri konten halaman."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Meratakan bilah sisi penyaringan ke sebelah kanan hasil pencarian."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Bilah sisi rata kanan pada halaman pencarian"
},
"settings.display.theme.description": {
"message": "Pilih tema warna pilihan Anda untuk Modrinth di perangkat ini."
},
"settings.display.theme.title": {
"message": "Tema warna"
},
"settings.pats.action.create": {
"message": "Buat PAT"
},
@@ -4973,96 +4973,12 @@
"settings.display.banner.developer-mode.description": {
"message": "La <strong>modalità sviluppatore</strong> è attiva: ciò ti permetterà di visualizzare gli ID interni usati da Modrinth, che possono essere utili se sei uno sviluppatore che utilizza le nostre API. Clicca 5 volte sul logo di Modrinth nel piè per disattivarla."
},
"settings.display.flags.description": {
"message": "Attiva o disattiva determinate funzionalità su questo dispositivo."
},
"settings.display.flags.title": {
"message": "Altre funzionalità"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "La modalità sviluppatore è stata disabilitata"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Modalità sviluppatore disattivata"
},
"settings.display.project-list-layouts.datapack": {
"message": "Pagina dei pacchetti di dati"
},
"settings.display.project-list-layouts.description": {
"message": "Scegli come disporre gli elenchi su questo dispositivo."
},
"settings.display.project-list-layouts.mod": {
"message": "Pagina delle mod"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galleria"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Griglia"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Righe"
},
"settings.display.project-list-layouts.modpack": {
"message": "Pagina dei pacchetti di mod"
},
"settings.display.project-list-layouts.plugin": {
"message": "Pagina dei plugin"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Pagina dei pacchetti di risorse"
},
"settings.display.project-list-layouts.server": {
"message": "Pagina dei server"
},
"settings.display.project-list-layouts.shader": {
"message": "Pagina delle shader"
},
"settings.display.project-list-layouts.title": {
"message": "Disposizione delle liste"
},
"settings.display.project-list-layouts.user": {
"message": "Pagine dei profili utente"
},
"settings.display.project-list.layouts.collection": {
"message": "Raccolta"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Abilita alcuni effetti come la sfocatura, ma può causare problemi di prestazioni senza accelerazione hardware."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Rendering avanzato"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "I link esterni a Modrinth si apriranno in una nuova scheda. A prescindere da questa impostazione, i link nello stesso dominio e nelle descrizioni Markdown si apriranno nella stessa scheda, e le pubblicità e le pagine di modifica in una nuova."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Apri link esterni in una nuova scheda"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "I pulsanti \"Scarica Modrinth App\" saranno nascosti dalla navigazione primaria. La pagina di Modrinth App rimarrà comunque raggiungibile nella home o nel piè."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Nascondi promozioni per Modrinth App"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Allineamento opposto della barra laterale"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Allinea la barra laterale a sinistra del contenuto della pagina."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Allinea la barra dei filtri a destra dei risultati di ricerca."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Allineamento opposto della barra dei filtri"
},
"settings.display.theme.description": {
"message": "Scegli il tema che Modrinth userà su questo dispositivo."
},
"settings.display.theme.title": {
"message": "Tema"
},
"settings.head-title": {
"message": "Impostazioni di visualizzazione"
},
@@ -3959,96 +3959,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>開発者モード</strong> が有効です。これにより、Modrinth全体の様々な内部IDを表示することができ、Modrinth APIを使用する開発に役立ちます。ページの下部にあるModrinthロゴを5回クリックすると、開発者モードが切り替わります。"
},
"settings.display.flags.description": {
"message": "このデバイスで特定の機能を有効または無効にします。"
},
"settings.display.flags.title": {
"message": "機能の切り替え"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "開発者モードが無効になりました"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "開発者モード無効"
},
"settings.display.project-list-layouts.datapack": {
"message": "データパックページ"
},
"settings.display.project-list-layouts.description": {
"message": "このデバイスでプロジェクト一覧を表示する各ページのレイアウトをお選びください。"
},
"settings.display.project-list-layouts.mod": {
"message": "Modページ"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "ギャラリー"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "グリッド表示"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "行表示"
},
"settings.display.project-list-layouts.modpack": {
"message": "Modパックページ"
},
"settings.display.project-list-layouts.plugin": {
"message": "プラグインページ"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "リソースパックページ"
},
"settings.display.project-list-layouts.server": {
"message": "サーバーページ"
},
"settings.display.project-list-layouts.shader": {
"message": "シェーダーページ"
},
"settings.display.project-list-layouts.title": {
"message": "プロジェクト一覧のレイアウト"
},
"settings.display.project-list-layouts.user": {
"message": "ユーザープロフィールページ"
},
"settings.display.project-list.layouts.collection": {
"message": "コレクション"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "ぼかし効果などの高度なレンダリングを有効にします。グラフィックアクセラレーションが使用できない場合は、パフォーマンスが低下する可能性があります。"
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "高度なレンダリング"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Modrinth外のリンクを新しいタブで開くように設定します。この設定にかかわらず、同一ドメイン上のリンクとMarkdownの概要欄のリンクは同じタブで開かれ、広告ページと編集ページ上のリンクは新しいタブで開かれます。"
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "外部リンクを新しいタブで開く"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "「Modrinth Appを入手」ボタンをプライマリナビゲーションから非表示にします。Modrinth Appのページは、ランディングページまたはフッターに表示されます。"
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Modrinth Appのプロモーションを非表示"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "コンテンツの左寄せサイドバー"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "コンテンツのサイドバーをページの左側に揃えます。"
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "検索フィルターのサイドバーを検索結果の右側に揃えます。"
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "検索フィルターの右寄せサイドバー"
},
"settings.display.theme.description": {
"message": "このデバイスでのお好みのテーマを選択してください。"
},
"settings.display.theme.title": {
"message": "テーマ"
},
"settings.head-title": {
"message": "表示設定"
},
@@ -4991,96 +4991,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>개발자 모드</strong>가 활성화되어 있습니다. 이를 통해 Modrinth API를 사용하는 개발자인 경우 도움이 될 수 있는 Modrinth 전체의 여러 내부 ID를 확인할 수 있습니다. 페이지 하단의 Modrinth 로고를 5번 클릭하여 개발자 모드를 전환합니다."
},
"settings.display.flags.description": {
"message": "이 장치에서 특정 기능을 사용하거나 사용하지 않도록 설정합니다."
},
"settings.display.flags.title": {
"message": "기능 전환"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "개발자 모드가 비활성화 되었습니다"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "개발자 모드 비활성화됨"
},
"settings.display.project-list-layouts.datapack": {
"message": "데이터 팩 페이지"
},
"settings.display.project-list-layouts.description": {
"message": "이 장치에서 프로젝트 목록을 표시하는 각 페이지에 대해 원하는 레이아웃을 선택합니다."
},
"settings.display.project-list-layouts.mod": {
"message": "모드 페이지"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "갤러리"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "그리드"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "행"
},
"settings.display.project-list-layouts.modpack": {
"message": "모드팩 페이지"
},
"settings.display.project-list-layouts.plugin": {
"message": "플러그인 페이지"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "리소스 팩 페이지"
},
"settings.display.project-list-layouts.server": {
"message": "서버 페이지"
},
"settings.display.project-list-layouts.shader": {
"message": "셰이더 페이지"
},
"settings.display.project-list-layouts.title": {
"message": "프로젝트 목록 레이아웃"
},
"settings.display.project-list-layouts.user": {
"message": "사용자 프로필 페이지"
},
"settings.display.project-list.layouts.collection": {
"message": "컬렉션"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "하드웨어 가속 렌더링이 없으면 성능 문제를 일으킬 수 있는 고급 렌더링을 활성화합니다."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "고급 렌더링"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Modrinth 외부로 나가는 링크를 새 탭에서 엽니다. 이 설정에 상관없이 동일한 도메인과 마크다운 설명의 링크가 같은 탭에서 열리고 광고 및 편집 페이지의 링크가 새 탭에서 열립니다."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "새 탭에서 외부 링크 열기"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "기본 네비게이선에서 \"Modrinth App 받기\" 버튼을 숨깁니다. Modrinth App 페이지는 여전히 시작 페이지 또는 하단에서 찾을 수 있습니다."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Modrinth 앱 프로모션 숨기기"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "콘텐츠 페이지에서 사이드바를 왼쪽으로 정렬"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "사이드바를 페이지 콘텐츠의 왼쪽에 정렬합니다."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "필터 사이드바를 검색 결과 페이지의 오른쪽에 정렬합니다."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "검색 페이지에서 필터 사이드바를 오른쪽으로 정렬"
},
"settings.display.theme.description": {
"message": "이 디바이스에서 선호하는 Modrinth 의 색상 테마를 선택합니다."
},
"settings.display.theme.title": {
"message": "색상 테마"
},
"settings.head-title": {
"message": "디스플레이 설정"
},
@@ -3965,96 +3965,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Mod pembangun</strong> kini aktif. Ini akan membolehkan anda melihat ID dalaman pelbagai perkara di seluruh Modrinth yang mungkin berguna jika anda seorang pembangun yang menggunakan API Modrinth. Klik pada logo Modrinth di bahagian bawah laman sebanyak 5 kali untuk menogol mod pembangun."
},
"settings.display.flags.description": {
"message": "Dayakan atau nyahdayakan ciri tertentu pada peranti ini."
},
"settings.display.flags.title": {
"message": "Togol ciri-ciri"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "Mod pembangun telah dinyahdayakan"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Mod pembangun dinyahaktifkan"
},
"settings.display.project-list-layouts.datapack": {
"message": "Laman Pek Data"
},
"settings.display.project-list-layouts.description": {
"message": "Pilih susun atur pilihan anda untuk setiap laman yang memaparkan senarai projek pada peranti ini."
},
"settings.display.project-list-layouts.mod": {
"message": "Laman Mod"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galeri"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Grid"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Barisan"
},
"settings.display.project-list-layouts.modpack": {
"message": "Laman Pek Mod"
},
"settings.display.project-list-layouts.plugin": {
"message": "Laman Pemalam"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Laman Pek Sumber"
},
"settings.display.project-list-layouts.server": {
"message": "Laman Pelayan"
},
"settings.display.project-list-layouts.shader": {
"message": "Laman Pembayang"
},
"settings.display.project-list-layouts.title": {
"message": "Susun atur senarai projek"
},
"settings.display.project-list-layouts.user": {
"message": "Laman profil pengguna"
},
"settings.display.project-list.layouts.collection": {
"message": "Koleksi"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Mendayakan pemaparan lanjutan seperti kesan kabur yang boleh menyebabkan masalah prestasi tanpa pemaparan dipercepatkan perkakasan."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Pemaparan lanjutan"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Buka pautan yang membawa anda ke luar Modrinth dalam tab baharu. Tidak kira tetapan ini, pautan pada domain yang sama dan dalam keterangan berformat Markdown akan dibuka dalam tab yang sama dan pautan pada iklan dan laman sunting akan dibuka dalam tab baharu."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Buka pautan luaran dalam tab baharu"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Menyembunyikan butang \"Dapatkan Modrinth App\" daripada navigasi utama. Laman Modrinth App masih boleh dijumpai pada halaman pendaratan atau dalam pengaki."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Sembunyikan promosi Modrinth App"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Bar sisi carian dijajar kiri pada laman kandungan"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Menjajarkan bar sisi butiran projek ke sebelah kiri kandungan laman."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Menjajarkan bar sisi penapis ke sebelah kanan hasil carian."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Bar sisi penapis dijajar kanan pada laman carian"
},
"settings.display.theme.description": {
"message": "Pilih tema warna pilihan anda untuk Modrinth pada peranti ini."
},
"settings.display.theme.title": {
"message": "Tema warna"
},
"settings.head-title": {
"message": "Tetapan paparan"
},
@@ -4994,96 +4994,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Ontwikkelaarsmodus</strong> is ingeschakeld. Hiermee kun je de interne ID's bekijken van verschillende elementen in Modrinth, wat handig kan zijn als je als ontwikkelaar gebruikmaakt van de Modrinth-API. Klik vijf keer op het Modrinth-logo onderaan de pagina om de ontwikkelaarsmodus in of uit te schakelen."
},
"settings.display.flags.description": {
"message": "Schakel bepaalde functies op dit apparaat in of uit."
},
"settings.display.flags.title": {
"message": "Functies in en uitschakelen"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "De ontwikkelaarsmodus is uitgeschakeld"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Ontwikkelaarsmodus uitgeschakeld"
},
"settings.display.project-list-layouts.datapack": {
"message": "Data Packs pagina"
},
"settings.display.project-list-layouts.description": {
"message": "Kies de gewenste lay-out voor elke pagina waarop projectlijsten op dit apparaat worden weergegeven."
},
"settings.display.project-list-layouts.mod": {
"message": "Mods pagina"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Gallerij"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Raster"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Rijen"
},
"settings.display.project-list-layouts.modpack": {
"message": "Modpacks pagina"
},
"settings.display.project-list-layouts.plugin": {
"message": "Plugins pagina"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Resource Packs pagina"
},
"settings.display.project-list-layouts.server": {
"message": "Servers pagina"
},
"settings.display.project-list-layouts.shader": {
"message": "Shaders pagina"
},
"settings.display.project-list-layouts.title": {
"message": "Indelingen van projectlijsten"
},
"settings.display.project-list-layouts.user": {
"message": "Profielpagina's voor gebruikers"
},
"settings.display.project-list.layouts.collection": {
"message": "Collectie"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Schakelt geavanceerde rendering in zoals vervaging effecten die prestatieproblemen kunnen veroorzaken zonder hardware-acceleratie."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Geavanceerde weergave"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Maak links die buiten Modrinth gaan open in een nieuw tabblad. Ongeacht deze instelling, links op hetzelfde domein en in Markdown beschrijvingen zullen worden geopend in hetzelfde tabblad, en links naar advertenties en bewerken pagina's worden geopend in een nieuw tabblad."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Externe links openen in nieuw tabblad"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Verbergt de \"Modrinth-app downloaden\" knoppen in de hoofdnavigatie. De Modrinth App-pagina is nog steeds te vinden op de startpagina of in de voettekst."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Promoties voor de Modrinth-app verbergen"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Links uitgelijnde zijbalk voor inhoudspagina's"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Lijn de project-details zijbalk uit naar de rechterkant van de paginainhoud."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Lijn de zoekfilters zijbalk uit aan de rechterkant van de zoekresultaten."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Rechts uitgelijnde zijbalk voor zoek pagina's"
},
"settings.display.theme.description": {
"message": "Kies het kleurenthema dat je het mooist vindt voor Modrinth op dit apparaat."
},
"settings.display.theme.title": {
"message": "Kleurschema"
},
"settings.head-title": {
"message": "Weergave instellingen"
},
@@ -3809,96 +3809,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Utviklermodus</strong> er aktivert. Dette gjør at du kan se på de internet ID-ene av forskjellige ting inni Modrinth som kan være hjelpsomme hvis du er en utvikler som bruker Modrinth-API-en. Klikk på Modrinth-logoen i botnen av sida 5 ganger for å skru på utviklermodus."
},
"settings.display.flags.description": {
"message": "Skru av eller på visse funksjoner på denne enheta."
},
"settings.display.flags.title": {
"message": "Skru av/på funksjoner"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "Utviklermodus har blitt skrudd av"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Utviklermodus skrudd av"
},
"settings.display.project-list-layouts.datapack": {
"message": "Datapakkerside"
},
"settings.display.project-list-layouts.description": {
"message": "Velg det foretrukne oppsettet ditt for hver side som viser prosjektlister på denne enheta."
},
"settings.display.project-list-layouts.mod": {
"message": "Modssida"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galleri"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Rutenett"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Rader"
},
"settings.display.project-list-layouts.modpack": {
"message": "Modpakkesida"
},
"settings.display.project-list-layouts.plugin": {
"message": "Pluginssida"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Ressurspakkesida"
},
"settings.display.project-list-layouts.server": {
"message": "Serversider"
},
"settings.display.project-list-layouts.shader": {
"message": "Shadersida"
},
"settings.display.project-list-layouts.title": {
"message": "Prosjektlisteoppsett"
},
"settings.display.project-list-layouts.user": {
"message": "Brukerprofilsider"
},
"settings.display.project-list.layouts.collection": {
"message": "Samling"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Skrur på avansert gjengivelse, sånn som uskarphetseffektet, som kan skape problem med ytelsen uten maskinvareakselerert gjengivelse."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Avansert gjengivelse"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Lag lenker som åpner seg utafor Modrinth gå i ei ny fane. Uansett hva innstillinga er satt på, så kommer lenker som er på samme domene og i samme nedmarkeringsbeskrivelsen til å åpne seg i samme fana, og lenker om reklame og redigeringssider kommer til å åpne seg i ei ny fane."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Åpne eksterne lenker i ei ny fane"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Gjømmer \"Skaff deg Modrinth App\"-knappene fra primærnavigatoren. Du kan fortsatt finne Modrinth App-sida i landingsside eller i footer-en."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Gjøm Modrinth App-reklamekampanjer"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Venstre-stilt sidefelt på innholdssidene"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Stiller sidefeltet til venstre av sideinnholdet."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Stiller sidebarsfilter til venstre av søkeresultata."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Høgre-stilte sidebarfilter på søkesidene"
},
"settings.display.theme.description": {
"message": "Velg den spesifiserte fargetemaet ditt for Modrinth på denne enheta."
},
"settings.display.theme.title": {
"message": "Fargetema"
},
"settings.head-title": {
"message": "Skjerminnstillinger"
},
@@ -4922,96 +4922,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Tryb dewelopera</strong> jest aktywny. To umożliwia wyświetlać wewnętrzne identyfikatory różnych rzeczy w Modrinth, które mogą być pomocne, jeśli jesteś deweloperem korzystającym z API Modrinth'a. Kliknij logo Modrinth na dole strony 5 razy, aby przełączać tryb dewelopera."
},
"settings.display.flags.description": {
"message": "Włącz lub wyłącz określone funkcje na tym urządzeniu."
},
"settings.display.flags.title": {
"message": "Funkcje"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "Tryb dewelopera został wyłączony"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Wyłączono tryb dewelopera"
},
"settings.display.project-list-layouts.datapack": {
"message": "Strona paczek danych"
},
"settings.display.project-list-layouts.description": {
"message": "Wybierz preferowany układ każdej strony, na której wyświetlane są listy projektów na tym urządzeniu."
},
"settings.display.project-list-layouts.mod": {
"message": "Strona modów"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galeria"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Siatka"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Rzędy"
},
"settings.display.project-list-layouts.modpack": {
"message": "Strona paczek modów"
},
"settings.display.project-list-layouts.plugin": {
"message": "Strona pluginów"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Strona paczek zasobów"
},
"settings.display.project-list-layouts.server": {
"message": "Strony serwerów"
},
"settings.display.project-list-layouts.shader": {
"message": "Strona shaderów"
},
"settings.display.project-list-layouts.title": {
"message": "Układy listy projektów"
},
"settings.display.project-list-layouts.user": {
"message": "Strony profilowe użytkowników"
},
"settings.display.project-list.layouts.collection": {
"message": "Kolekcja"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Włącza zaawansowane renderowanie, takie jak efekty rozmycia, które może powodować problemy z wydajnością bez sprzętowej akceleracji renderowania."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Zaawansowane renderowanie"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Spraw, aby linki prowadzące poza Modrinth otwierały się w nowej karcie. Niezależnie od tego ustawienia linki w tej samej domenie i w opisach Markdown będą otwierane w tej samej karcie, a linki w reklamach i edytowanych stronach będą otwierane w nowej karcie."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Otwieraj linki zewnętrzne w nowej karcie"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Ukrywa przyciski \"Pobierz Modrinth App\" z głównych stron nawigacji. Strona aplikacji Modrinth nadal może być znaleziona na stronie lądowania lub w stopce."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Ukryj reklamy Modrinth App"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Pasek boczny wyrównany do lewej strony na stronach z treścią"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Wyrównuje pasek boczny po lewej stronie treści strony."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Przesuwa filtry na prawo od wyników wyszukiwania."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Filtry po prawej na stronach wyszukiwania"
},
"settings.display.theme.description": {
"message": "Wybierz preferowany motyw dla Modrinth na tym urządzeniu."
},
"settings.display.theme.title": {
"message": "Motyw"
},
"settings.head-title": {
"message": "Ustawienia wyświetlania"
},
@@ -5012,96 +5012,12 @@
"settings.display.banner.developer-mode.description": {
"message": "O <strong>modo desenvolvedor</strong> está ativado. Isto permite que você veja os IDs internos de várias coisas no Modrinth, que podem ser úteis se você for um desenvolvedor usando a API do Modrinth. Clique 5 vezes no logotipo do Modrinth na parte inferior da página para alternar o modo de desenvolvedor."
},
"settings.display.flags.description": {
"message": "Ative ou desative certos recursos neste dispositivo."
},
"settings.display.flags.title": {
"message": "Alternar recursos"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "O modo de desenvolvedor foi desativado"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Modo de desenvolvedor desativado"
},
"settings.display.project-list-layouts.datapack": {
"message": "Página dos pacotes de dados"
},
"settings.display.project-list-layouts.description": {
"message": "Selecione seu layout preferido para cada página que exibe listas de projetos neste dispositivo."
},
"settings.display.project-list-layouts.mod": {
"message": "Página dos mods"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galeria"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Grade"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Linhas"
},
"settings.display.project-list-layouts.modpack": {
"message": "Página dos pacotes de mods"
},
"settings.display.project-list-layouts.plugin": {
"message": "Página dos plugins"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Página dos pacotes de recursos"
},
"settings.display.project-list-layouts.server": {
"message": "Página dos servidores"
},
"settings.display.project-list-layouts.shader": {
"message": "Página dos sombreadores"
},
"settings.display.project-list-layouts.title": {
"message": "Exibição da lista de projetos"
},
"settings.display.project-list-layouts.user": {
"message": "Páginas de perfil do usuário"
},
"settings.display.project-list.layouts.collection": {
"message": "Coleção"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Ativa a renderização avançada, como efeitos de desfoque que podem causar problemas de desempenho sem a renderização acelerada de hardware."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Renderização avançada"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Faz com que os links que estão fora do Modrinth sejam abertos em uma nova aba. Independentemente dessa configuração, links no mesmo domínio e nas descrições do Markdown serão abertos na mesma aba, e links em anúncios e páginas de edição serão abertos em uma nova aba."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Abrir links externos em uma nova aba"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Oculta os botões \"Baixe o Modrinth App\" da navegação principal. A página do Modrinth App ainda pode ser encontrada na página inicial ou no rodapé."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Ocultar promoções do Modrinth App"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Barra lateral alinhada à esquerda nas páginas de conteúdo"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Alinha a barra lateral à esquerda do conteúdo da página."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Alinha a barra lateral de filtros à direita dos resultados da pesquisa."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Barra lateral de filtros alinhada à direita nas páginas de pesquisa"
},
"settings.display.theme.description": {
"message": "Selecione seu tema de cor preferido para o Modrinth neste dispositivo."
},
"settings.display.theme.title": {
"message": "Tema"
},
"settings.head-title": {
"message": "Configurações de exibição"
},
@@ -3614,96 +3614,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>O Modo de desenvolvedor</strong> está ativo. Este permite que vejas os IDs internos de várias coisas no Modrinth que podem ser úteis para desenvolvimento que use a Modrinth API. Clica no logótipo do Modrinth do fim da página 5 vezes para alternar o modo de desenvolvedor."
},
"settings.display.flags.description": {
"message": "Ativa ou desativa certas funcionalidades neste dispositivo."
},
"settings.display.flags.title": {
"message": "Funcionalidades"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "O modo de desenvolvedor foi desativado"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Modo de desenvolvedor desativado"
},
"settings.display.project-list-layouts.datapack": {
"message": "Página de Pacotes de Dados"
},
"settings.display.project-list-layouts.description": {
"message": "Seleciona o teu layout preferido para cada página que exibe listas de projetos neste dispositivo."
},
"settings.display.project-list-layouts.mod": {
"message": "Página de Mods"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galeria"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Grelha"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Linhas"
},
"settings.display.project-list-layouts.modpack": {
"message": "Página de Modpacks"
},
"settings.display.project-list-layouts.plugin": {
"message": "Página de Plugins"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Página de Pacotes de Recursos"
},
"settings.display.project-list-layouts.server": {
"message": "Página de servidores"
},
"settings.display.project-list-layouts.shader": {
"message": "Página de Shaders"
},
"settings.display.project-list-layouts.title": {
"message": "Layouts da lista de projetos"
},
"settings.display.project-list-layouts.user": {
"message": "Páginas de perfil de utilizador"
},
"settings.display.project-list.layouts.collection": {
"message": "Coleção"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Ativa a renderização avançada, como efeitos de desfoque, que podem causar problemas de desempenho sem o uso de renderização acelerada por hardware."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Renderização Avançada"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Os links que redirecionam para fora do Modrinth serão abertos num novo separador. Esta definição não afeta links no mesmo domínio e em descrições Markdown, que serão abertos no mesmo separador, nem links em anúncios e páginas de edição, que serão abertos num novo separador."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Abrir links externos num novo separador"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Oculta os botões \"Obter a Modrinth App\" da navegação primária. A página da Modrinth App ainda pode ser encontrada na página inicial ou no rodapé."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Ocultar promoções da Modrinth App"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Barra lateral alinhada à esquerda em páginas de conteúdo"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Alinha a barra lateral à esquerda do conteúdo da página."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Alinha a barra lateral de filtros à direita dos resultados da pesquisa."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Barra lateral de filtros alinhada à direita em páginas de pesquisa"
},
"settings.display.theme.description": {
"message": "Seleciona o teu tema de cores preferido para o Modrinth neste dispositivo."
},
"settings.display.theme.title": {
"message": "Cor do tema"
},
"settings.head-title": {
"message": "Definições de visual"
},
@@ -1898,78 +1898,6 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Modul de dezvoltator</strong> este activ. Acest lucru vă va permite să vizualizați ID-urile interne ale diverselor lucruri din Modrinth, ceea ce poate fi util dacă sunteți un dezvoltator care folosește API-ul Modrinth. Faceți clic pe sigla Modrinth din partea de jos a paginii de 5 ori pentru a activa sau dezactiva modul de dezvoltator."
},
"settings.display.flags.description": {
"message": "Activați sau dezactivați anumite caracteristici pe acest dispozitiv."
},
"settings.display.flags.title": {
"message": "Funcții avansate"
},
"settings.display.project-list-layouts.datapack": {
"message": "Pagina cu pachete de date"
},
"settings.display.project-list-layouts.description": {
"message": "Selectează aspectul preferat pentru fiecare pagină care afișează liste de proiecte pe acest dispozitiv."
},
"settings.display.project-list-layouts.mod": {
"message": "Pagina cu moduri"
},
"settings.display.project-list-layouts.modpack": {
"message": "Pagina cu pachete de moduri"
},
"settings.display.project-list-layouts.plugin": {
"message": "Pagina cu pluginuri"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Pagina cu pachete de resurse"
},
"settings.display.project-list-layouts.shader": {
"message": "Pagina cu shadere"
},
"settings.display.project-list-layouts.title": {
"message": "Aspectul listelor de proiecte"
},
"settings.display.project-list-layouts.user": {
"message": "Paginile de profil ale utilizatorului"
},
"settings.display.project-list.layouts.collection": {
"message": "Colecție"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Activează redarea avansată, cum ar fi efectele de estompare (blur), care pot provoca probleme de performanță fără redare accelerată hardware."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Redare avansată"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Deschide linkurile externe de pe Modrinth într-o pagină nouă. Indiferent de această setare, linkurile de pe același domeniu și din descrierile Markdown se vor deschide în aceeași pagină, iar linkurile din reclame și paginile de editare se vor deschide într-o pagină nouă."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Deschide linkurile externe într-o pagină nouă"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Ascunde butoanele \"Descarcă Modrinth App\" din navigarea principală. Pagina aplicației Modrinth poate fi găsită în continuare pe pagina de destinație sau în subsol."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Ascunde promoțiile Modrinth App"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Bară laterală aliniată la stânga pe paginile de conținut"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Aliniază bara laterală la stânga conținutului paginii."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Aliniază bara laterală de filtre la dreapta rezultatelor căutării."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Aliniază bara laterală de filtre la dreapta rezultatelor căutării"
},
"settings.display.theme.description": {
"message": "Selectează tema de culori preferată pentru Modrinth pe acest dispozitiv."
},
"settings.display.theme.title": {
"message": "Temă de culori"
},
"settings.pats.action.create": {
"message": "Creează un token PAT"
},
@@ -4967,96 +4967,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Режим разработчика</strong> включён. Отображаются внутренние идентификаторы различных элементов сайта, что удобно при работе с API. Чтобы отключить, снова нажмите на логотип Modrinth внизу страницы 5 раз."
},
"settings.display.flags.description": {
"message": "Настройте отдельные функции на этом устройстве."
},
"settings.display.flags.title": {
"message": "Настройка функций"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "Режим разработчика больше не активен"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Режим разработчика отключён"
},
"settings.display.project-list-layouts.datapack": {
"message": "Страница наборов данных"
},
"settings.display.project-list-layouts.description": {
"message": "Выберите вид для каждой страницы с проектами на этом устройстве."
},
"settings.display.project-list-layouts.mod": {
"message": "Страница модов"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Галерея"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Сетка"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Список"
},
"settings.display.project-list-layouts.modpack": {
"message": "Страница сборок"
},
"settings.display.project-list-layouts.plugin": {
"message": "Страница плагинов"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Страница наборов ресурсов"
},
"settings.display.project-list-layouts.server": {
"message": "Страница серверов"
},
"settings.display.project-list-layouts.shader": {
"message": "Страница шейдеров"
},
"settings.display.project-list-layouts.title": {
"message": "Вид проектов"
},
"settings.display.project-list-layouts.user": {
"message": "Страницы пользователей"
},
"settings.display.project-list.layouts.collection": {
"message": "Коллекция"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Включает продвинутые эффекты вроде размытия, но может снизить производительность на устройствах без аппаратного ускорения."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Расширенные эффекты"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Ссылки за пределы Modrinth будут открываться в новой вкладке. Исключения: ссылки внутри домена и в Markdown — всегда в той же вкладке; реклама и страницы редактирования — всегда в новой."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Внешние ссылки в новой вкладке"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Убирает кнопку «Скачать Modrinth App» с поисковых страниц. Ссылку на раздел с Modrinth App всё ещё можно найти на главной странице или в нижней части интерфейса."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Скрывать кнопку скачивания Modrinth App"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Панель сведений слева"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Помещает панель сведений слева от содержимого страницы."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Помещает панель фильтров справа от результатов поиска."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Панель фильтров справа"
},
"settings.display.theme.description": {
"message": "Выберите тему для Modrinth на этом устройстве."
},
"settings.display.theme.title": {
"message": "Тема"
},
"settings.head-title": {
"message": "Настройки отображения"
},
@@ -1835,90 +1835,6 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Developerski režim</strong> je aktivan. Ovo će ti omogućiti da vidiš interne ID-je raznih stvari na Modrinthu, što može biti korisno ako si developer koji koristi Modrinth API. Klikni na Modrinth logo na dnu stranice 5 puta da bi uključio/isključio developerski režim."
},
"settings.display.flags.description": {
"message": "Uključi ili isključi određene funkcije na ovom uređaju."
},
"settings.display.flags.title": {
"message": "Prebaci funkcije"
},
"settings.display.project-list-layouts.datapack": {
"message": "Stranica Data Packova"
},
"settings.display.project-list-layouts.description": {
"message": "Izaberi željeni raspored za svaku stranicu koja prikazuje liste projekata na ovom uređaju."
},
"settings.display.project-list-layouts.mod": {
"message": "Stranica Modova"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galerija"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Mreža"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Redovi"
},
"settings.display.project-list-layouts.modpack": {
"message": "Stranica Modpackova"
},
"settings.display.project-list-layouts.plugin": {
"message": "Stranica Plugina"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Stranica Resurs paketa"
},
"settings.display.project-list-layouts.server": {
"message": "Stranica servera"
},
"settings.display.project-list-layouts.shader": {
"message": "Stranica Shadera"
},
"settings.display.project-list-layouts.title": {
"message": "Rasporedi liste projekata"
},
"settings.display.project-list-layouts.user": {
"message": "Stranica profila korisnika"
},
"settings.display.project-list.layouts.collection": {
"message": "Kolekcija"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Omogućava napredno renderovanje, poput efekata zamagljenja, koje bez hardverski ubrzanog renderovanja može izazvati probleme sa performansama."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Napredno renderovanje"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Otvaraj linkove koji vode izvan Modrintha u novom tabu. Bez obzira na ovo podešavanje, linkovi na istoj domeni i u Markdown opisima otvaraju se u istom tabu, a linkovi u oglasima i na stranicama za uređivanje otvaraju se u novom tabu."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Otvaraj spoljne linkove u novom tabu"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Sakriva dugmad \"Preuzmite Modrinth App\" iz primarne navigacije. Stranicu Modrinth App i dalje možete naći na početnoj strani ili u footeru."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Sakrij promocije Modrinth App-a"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Levo poravnata bočna traka na stranicama sa sadržajem"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Poravnava bočnu traku levo od sadržaja stranice."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Poravnava bočnu traku filtera na desnu stranu rezultata pretrage."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Desno poravnata bočna traka filtera na stranicama za pretragu"
},
"settings.display.theme.description": {
"message": "Izaberi željenu temu boje za Modrinth na ovom uređaju."
},
"settings.display.theme.title": {
"message": "Tema boja"
},
"settings.head-title": {
"message": "Podešavanja prikaza"
},
@@ -4139,96 +4139,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Utvecklarläge</strong> är aktiverat. Detta tillåter dig att visa interna ID:n för olika saker genom Modrinth vilket kan vara användbart om du är en utvecklare och använder Modrinths API. Klicka på Modrinth-loggan längst ned fem gånger för att aktivera utvecklarläge."
},
"settings.display.flags.description": {
"message": "Aktivera eller inaktivera vissa funktioner på denna enhet."
},
"settings.display.flags.title": {
"message": "Växla funktioner"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "Utvecklarläge har inaktiverats"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Utvecklarläge inaktiverat"
},
"settings.display.project-list-layouts.datapack": {
"message": "Sidan för datapaket"
},
"settings.display.project-list-layouts.description": {
"message": "Välj en önskad layout för varje sida som visar projektlistor på denna enhet."
},
"settings.display.project-list-layouts.mod": {
"message": "Sidan för moddar"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galleri"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Rutnät"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Rader"
},
"settings.display.project-list-layouts.modpack": {
"message": "Sidan för modpaket"
},
"settings.display.project-list-layouts.plugin": {
"message": "Sidan för plugins"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Sidan för resurspaket"
},
"settings.display.project-list-layouts.server": {
"message": "Sidan för servrar"
},
"settings.display.project-list-layouts.shader": {
"message": "Sidan för shaders"
},
"settings.display.project-list-layouts.title": {
"message": "Projektlistans layouter"
},
"settings.display.project-list-layouts.user": {
"message": "Användarprofil-sidor"
},
"settings.display.project-list.layouts.collection": {
"message": "Samling"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Aktiverar avancerad rendering som t.ex. oskärpa vilket kan leda till prestandaproblem utan hårdvaruaccelerande rendering."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Avancerad rendering"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Får länkar som leder utanför Modrinth att öppna en ny flik. Oavsett vad denna inställning har ställts in på kommer länkar med samma domän och i Markdown-beskrivningar att öppnas i samma flik, och länkar på annonser och redigeringssidor öppnas i en ny flik."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Öppna externa länkar i en ny flik"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Döljer \"Installera Modrinth App\" knappen från primär navigering. Modrinth App-sidan kan fortfarande hittas på landningssidan eller i sidfoten."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Dölj \"Installera Modrinth App\" knapp"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Vänsterjusterad sidofält på innehållssidor"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Justerar sidofältet till vänster om sidans innehåll."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Justerar filtrets sidofält till höger om sökresultaten."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Högerjusterad sidofält på innehållssidor"
},
"settings.display.theme.description": {
"message": "Välj färgtema för Modrinth på denna enhet."
},
"settings.display.theme.title": {
"message": "Färgtema"
},
"settings.head-title": {
"message": "Visningsinställningar"
},
@@ -4520,96 +4520,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Geliştirme modu</strong> aktif. Modrinth'te bulunan çeşitli şeylerin dahilî kimliklerini gösterir, Modrinth API kullanan bir geliştiriciyseniz kullanışlı olabilir. Sayfanın en altındaki Modrinth logosuna 5 kere tıklayarak açılır ve kapanır."
},
"settings.display.flags.description": {
"message": "Bu cihazdaki belli özellikleri etkinlestir veya devre dışı bırak."
},
"settings.display.flags.title": {
"message": "Özellik aç/kapa"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "Geliştirme modu kapatıldı"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Geliştirme modu kapalı"
},
"settings.display.project-list-layouts.datapack": {
"message": "Veri Paketleri sayfası"
},
"settings.display.project-list-layouts.description": {
"message": "Bu cihazda proje listelerini gösteren her sayfa için tercih ettiğiniz düzeni seçin."
},
"settings.display.project-list-layouts.mod": {
"message": "Modlar sayfası"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Galeri"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Izgara"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Satırlar"
},
"settings.display.project-list-layouts.modpack": {
"message": "Mod paketleri sayfası"
},
"settings.display.project-list-layouts.plugin": {
"message": "Pluginler sayfası"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Kaynak Paketleri sayfası"
},
"settings.display.project-list-layouts.server": {
"message": "Sunucular sayfası"
},
"settings.display.project-list-layouts.shader": {
"message": "Shaderlar sayfası"
},
"settings.display.project-list-layouts.title": {
"message": "Proje liste düzenleri"
},
"settings.display.project-list-layouts.user": {
"message": "Kullanıcı profili sayfaları"
},
"settings.display.project-list.layouts.collection": {
"message": "Koleksiyon"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Donanım hızlandırmalı işleme olmadan performans sorunlarına yol açabilecek bulanıklık efektleri gibi gelişmiş işlemeyi etkinleştirir."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Gelişmiş işleme"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Modrinth'in dışına giden bağlantıların yeni bir sekmede açılmasını sağla. Bu ayara bakılmaksızın, aynı alan adındaki ve Markdown açıklamalarındaki bağlantılar aynı sekmede açılacak ve reklamlardaki, düzenleme sayfalarındaki bağlantılar yeni bir sekmede açılacak."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Dış bağlantıları yeni sekmede aç"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "\"Modrinth App Edin\" tuşlarını ana navigasyondan gizler. Modrinth App sayfası hala açılış sayfasında veya alt bilgide bulunabilir."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Modrinth App tanıtımlarını gizle"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "İçerik sayfalarında sola hizalı kenar çubuğu"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Kenar çubuğunu sayfa içeriğinin soluna hizalar."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Filtre kenar çubuğunu, arama sonuçlarının sağına hizalar."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Arama sayfalarında kenar çubuğunu sağa hizalar"
},
"settings.display.theme.description": {
"message": "Bu cihazda Modrinth için tercih ettiğiniz renk temasını seçin."
},
"settings.display.theme.title": {
"message": "Renk teması"
},
"settings.head-title": {
"message": "Görüntü Ayarları"
},
@@ -4991,96 +4991,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Режим розробника</strong> ввімкнений. Це дозволить вам переглядати внутрішні ID різних елементів Modrinth що може допомогти, якщо ви розробник, який використовує Modrinth API. Натисніть на логотип Modrinth знизу сторінки 5 разів, щоб перемкнути режим розробника."
},
"settings.display.flags.description": {
"message": "Увімкнути або вимкнути певні функції на цьому пристрої."
},
"settings.display.flags.title": {
"message": "Перемикання функцій"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "Режим розробника було вимкнено"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Режим розробника вимкнено"
},
"settings.display.project-list-layouts.datapack": {
"message": "Сторінка пакетів даних"
},
"settings.display.project-list-layouts.description": {
"message": "Виберіть макет, якому ви надаєте перевагу для кожної сторінки, що показує список проєктів на цьому пристрої."
},
"settings.display.project-list-layouts.mod": {
"message": "Сторінка модів"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Галерея"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Сітка"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Рядки"
},
"settings.display.project-list-layouts.modpack": {
"message": "Сторінка збірок"
},
"settings.display.project-list-layouts.plugin": {
"message": "Сторінка плаґінів"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Сторінка пакетів ресурсів"
},
"settings.display.project-list-layouts.server": {
"message": "Сторінка серверів"
},
"settings.display.project-list-layouts.shader": {
"message": "Сторінка шейдерів"
},
"settings.display.project-list-layouts.title": {
"message": "Макети списку проєктів"
},
"settings.display.project-list-layouts.user": {
"message": "Сторінки профілю користувача"
},
"settings.display.project-list.layouts.collection": {
"message": "Добірка"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Умикає розширені можливості промальовування, як-от ефекти розмиття, які можуть призводити до проблем із продуктивністю без апаратного прискорення."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Розширене промальовування"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Робить так, аби посилання за межі Modrinth, відкривалися в новій вкладці. Незалежно від цього налаштування, посилання в одному домені та в описах з Markdown відкриватимуться в тій же вкладці, а посилання в рекламах і на сторінках редагування — в новій вкладці."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Відкривати зовнішні посилання в новій вкладці"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Ховає кнопки «Установити Modrinth App» з навігації. Сторінку Modrinth App все ще можна знайти на головній сторінці або внизу будь-якої сторінки."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Приховати пропозицію установки Modrinth App"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Перемістити бокову панель ліворуч на сторінках вмісту"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Вирівнює бокову панель до лівого краю на сторінці вмісту."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Вирівнює бокове меню фільтрів до правого краю результатів пошуку."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Перемістити бокову панель фільтрів праворуч на сторінках пошуку"
},
"settings.display.theme.description": {
"message": "Виберіть колір теми, для Modrinth, якому ви надаєте перевагу для цього пристрою."
},
"settings.display.theme.title": {
"message": "Колірна тема"
},
"settings.head-title": {
"message": "Налаштування вигляду"
},
@@ -4103,96 +4103,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>Chế độ nhà phát triển</strong> đang được bật. Chế độ này cho phép bạn xem các ID nội bộ của nhiều thành phần trên Modrinth, hữu ích nếu bạn là nhà phát triển sử dụng API của Modrinth. Nhấp vào logo Modrinth ở cuối trang 5 lần để bật hoặc tắt chế độ nhà phát triển."
},
"settings.display.flags.description": {
"message": "Bật hoặc tắt một số tính năng trên thiết bị này."
},
"settings.display.flags.title": {
"message": "Bật / Tắt tính năng"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "Chế độ nhà phát triển đã bị tắt"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "Chế độ nhà phát triển đã tắt"
},
"settings.display.project-list-layouts.datapack": {
"message": "Trang Gói dữ liệu"
},
"settings.display.project-list-layouts.description": {
"message": "Chọn bố cục hiển thị bạn ưa thích cho từng trang có danh sách dự án trên thiết bị này."
},
"settings.display.project-list-layouts.mod": {
"message": "Trang mod"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "Thư viện"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "Lưới"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "Hàng"
},
"settings.display.project-list-layouts.modpack": {
"message": "Trang modpack"
},
"settings.display.project-list-layouts.plugin": {
"message": "Trang plugin"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "Trang gói tài nguyên"
},
"settings.display.project-list-layouts.server": {
"message": "Trang máy chủ"
},
"settings.display.project-list-layouts.shader": {
"message": "Trang shader"
},
"settings.display.project-list-layouts.title": {
"message": "Bố cục danh sách dự án"
},
"settings.display.project-list-layouts.user": {
"message": "Trang hồ sơ người dùng"
},
"settings.display.project-list.layouts.collection": {
"message": "Bộ sưu tập"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "Bật chế độ kết xuất nâng cao như hiệu ứng làm mờ, có thể gây vấn đề hiệu năng nếu không có tăng tốc phần cứng."
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "Kết xuất nâng cao"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "Mở các liên kết dẫn ra ngoài Modrinth trong tab mới. Bất kể cài đặt này, các liên kết cùng tên miền và trong mô tả Markdown sẽ mở trong cùng tab, còn các liên kết trong quảng cáo và trang chỉnh sửa sẽ mở trong tab mới."
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "Mở liên kết bên ngoài trong tab mới"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Ẩn các nút “Tải ứng dụng Modrinth” khỏi thanh điều hướng chính. Trang ứng dụng Modrinth vẫn có thể được tìm thấy ở trang chủ hoặc phần chân trang."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Ẩn quảng bá ứng dụng Modrinth"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "Thanh bên căn trái trên các trang nội dung"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "Căn thanh bên sang bên trái nội dung trang."
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "Căn thanh bên bộ lọc sang bên phải kết quả tìm kiếm."
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "Thanh bên bộ lọc căn phải trên các trang tìm kiếm"
},
"settings.display.theme.description": {
"message": "Chọn chủ đề màu bạn ưa thích cho Modrinth trên thiết bị này."
},
"settings.display.theme.title": {
"message": "Chủ đề màu"
},
"settings.head-title": {
"message": "Cài đặt hiển thị"
},
@@ -5012,96 +5012,12 @@
"settings.display.banner.developer-mode.description": {
"message": "<strong>开发者模式</strong>已激活。该模式可让你查看 Modrinth 各种对象的内部 ID,对于使用 Modrinth API 的开发者会有所帮助。点击页面底部的 Modrinth 徽标 5 次可开关开发者模式。"
},
"settings.display.flags.description": {
"message": "为当前设备开启或关闭特定功能。"
},
"settings.display.flags.title": {
"message": "功能开关"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "开发者模式已被禁用"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "开发者模式已关闭"
},
"settings.display.project-list-layouts.datapack": {
"message": "数据包页面"
},
"settings.display.project-list-layouts.description": {
"message": "为当前设备选择你喜欢的含项目列表页面的布局。"
},
"settings.display.project-list-layouts.mod": {
"message": "模组页面"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "图库"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "网格"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "列表"
},
"settings.display.project-list-layouts.modpack": {
"message": "整合包页面"
},
"settings.display.project-list-layouts.plugin": {
"message": "插件页面"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "资源包页面"
},
"settings.display.project-list-layouts.server": {
"message": "服务器页面"
},
"settings.display.project-list-layouts.shader": {
"message": "光影包页面"
},
"settings.display.project-list-layouts.title": {
"message": "项目列表布局"
},
"settings.display.project-list-layouts.user": {
"message": "用户个人资料页面"
},
"settings.display.project-list.layouts.collection": {
"message": "收藏"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "启用模糊效果等高级渲染。可能会在没有硬件加速渲染的情况下造成性能问题。"
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "高级渲染"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "在新标签页中打开跳出 Modrinth 的站外链接。但同一域名下的链接、Markdown 描述中的链接始终在当前标签页打开,广告和编辑页面上的链接则始终在新标签页打开。"
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "在新标签页打开外部链接"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "隐藏主导航栏中的“获取 Modrinth App”按钮。Modrinth App 页面仍然可以通过登录页面或页脚访问。"
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "隐藏 Modrinth App 推荐"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "内容页面侧边栏左对齐"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "将侧边栏显示在页面内容的左侧。"
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "将侧边栏显示在搜索结果的右侧。"
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "搜索页面筛选侧边栏右对齐"
},
"settings.display.theme.description": {
"message": "为当前设备选择你偏好的色彩主题。"
},
"settings.display.theme.title": {
"message": "色彩主题"
},
"settings.head-title": {
"message": "显示设置"
},
@@ -5012,96 +5012,12 @@
"settings.display.banner.developer-mode.description": {
"message": "開發人員模式<strong>已啟用</strong>。這個模式可以讓你查看 Modrinth 各項內容的內部 ID,如果你是使用 Modrinth API 的開發人員,這項功能可能會對你有所幫助。按 5 次頁面底部的 Modrinth 標誌即可切換開發人員模式。"
},
"settings.display.flags.description": {
"message": "針對這部裝置,設定要啟用或停用的特定功能。"
},
"settings.display.flags.title": {
"message": "功能開關"
},
"settings.display.notification.developer-mode-deactivated.text": {
"message": "開發者模式已被停用"
},
"settings.display.notification.developer-mode-deactivated.title": {
"message": "開發人員模式已停用"
},
"settings.display.project-list-layouts.datapack": {
"message": "資料包頁面"
},
"settings.display.project-list-layouts.description": {
"message": "依你偏好,設定這部裝置的專案清單版面配置。"
},
"settings.display.project-list-layouts.mod": {
"message": "模組頁面"
},
"settings.display.project-list-layouts.mode.gallery": {
"message": "圖庫"
},
"settings.display.project-list-layouts.mode.grid": {
"message": "網格"
},
"settings.display.project-list-layouts.mode.rows": {
"message": "列"
},
"settings.display.project-list-layouts.modpack": {
"message": "模組包頁面"
},
"settings.display.project-list-layouts.plugin": {
"message": "插件頁面"
},
"settings.display.project-list-layouts.resourcepack": {
"message": "資源包頁面"
},
"settings.display.project-list-layouts.server": {
"message": "伺服器頁面"
},
"settings.display.project-list-layouts.shader": {
"message": "光影包頁面"
},
"settings.display.project-list-layouts.title": {
"message": "專案清單版面配置"
},
"settings.display.project-list-layouts.user": {
"message": "使用者個人檔案頁面"
},
"settings.display.project-list.layouts.collection": {
"message": "收藏"
},
"settings.display.sidebar.advanced-rendering.description": {
"message": "啟用進階繪製(如模糊效果);若無硬體加速可能會導致效能問題。"
},
"settings.display.sidebar.advanced-rendering.title": {
"message": "進階繪製"
},
"settings.display.sidebar.external-links-new-tab.description": {
"message": "在新分頁中開啟 Modrinth 的外部連結。這項設定僅適用於外部連結,內部連結和 Markdown 說明中的連結仍會在同一個分頁中開啟,而廣告和編輯頁面的連結會在新分頁中開啟。"
},
"settings.display.sidebar.external-links-new-tab.title": {
"message": "在新分頁中開啟外部連結"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "在主導覽列中隱藏「下載 Modrinth App」按鈕。你仍可在登入頁面或頁尾找到 Modrinth 應用程式頁面。"
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "隱藏 Modrinth App 廣告"
},
"settings.display.sidebar.left-aligned-content-sidebar.title": {
"message": "內容頁面左側邊欄"
},
"settings.display.sidebar.right-aligned-content-sidebar.description": {
"message": "使側邊欄靠頁面內容左側對齊。"
},
"settings.display.sidebar.right-aligned-filters-sidebar.description": {
"message": "使篩選側邊欄靠搜尋結果右側對齊。"
},
"settings.display.sidebar.right-aligned-filters-sidebar.title": {
"message": "搜尋頁面右側篩選側邊欄"
},
"settings.display.theme.description": {
"message": "請為這部裝置選擇你偏好的色彩主題。"
},
"settings.display.theme.title": {
"message": "色彩主題"
},
"settings.head-title": {
"message": "顯示設定"
},
@@ -0,0 +1,113 @@
<template>
<div class="normal-page no-sidebar">
<h1>Server lookup</h1>
<div class="normal-page__content">
<form class="card flex flex-col gap-3" @submit.prevent="lookupServer">
<div class="flex flex-col gap-2">
<label for="server-subdomain">
<span class="text-lg font-semibold text-contrast">
Server subdomain
<span class="text-brand-red">*</span>
</span>
</label>
<StyledInput
id="server-subdomain"
v-model="subdomainInput"
:icon="ServerIcon"
:error="submitted && !!validationError"
placeholder="example or example.modrinth.gg"
autocomplete="off"
autocapitalize="none"
:spellcheck="false"
/>
<span v-if="submitted && validationError" class="text-sm font-medium text-red">
{{ validationError }}
</span>
</div>
<div>
<Button type="colored" color="brand" native-type="submit" :loading="isLoading">
<SearchIcon aria-hidden="true" />
Look up server
</Button>
</div>
<Admonition v-if="lookupError" type="critical" header="Lookup failed">
{{ lookupError }}
</Admonition>
</form>
</div>
</div>
</template>
<script setup lang="ts">
import { ModrinthApiError } from '@modrinth/api-client'
import { SearchIcon, ServerIcon } from '@modrinth/assets'
import { Admonition, Button, injectModrinthClient, StyledInput } from '@modrinth/ui'
const client = injectModrinthClient()
const subdomainInput = ref('')
const submitted = ref(false)
const isLoading = ref(false)
const lookupError = ref('')
const normalizedSubdomain = computed(() =>
subdomainInput.value
.trim()
.replace(/\.modrinth\.gg$/i, '')
.toLowerCase(),
)
const validationError = computed(() => {
if (!normalizedSubdomain.value) {
return 'Enter a server subdomain.'
}
if (normalizedSubdomain.value.length > 63) {
return 'Subdomain must be 63 characters or fewer.'
}
if (!/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/.test(normalizedSubdomain.value)) {
return 'Use only letters, numbers, and hyphens, without a leading or trailing hyphen.'
}
return undefined
})
watch(subdomainInput, (value) => {
const withoutDomain = value.replace(/\.modrinth\.gg$/i, '')
if (withoutDomain !== value) {
subdomainInput.value = withoutDomain
}
lookupError.value = ''
})
async function lookupServer() {
if (isLoading.value) {
return
}
submitted.value = true
lookupError.value = ''
if (validationError.value) {
return
}
subdomainInput.value = normalizedSubdomain.value
isLoading.value = true
try {
const server = await client.archon.servers_internal.getBySubdomain(normalizedSubdomain.value)
await navigateTo(`/hosting/manage/${server.id}`)
} catch (error) {
if (error instanceof ModrinthApiError && error.statusCode === 404) {
lookupError.value = `No server was found for ${normalizedSubdomain.value}.modrinth.gg.`
} else {
lookupError.value = 'The server could not be looked up. Try again.'
}
} finally {
isLoading.value = false
}
}
</script>
@@ -21,6 +21,7 @@ import {
defineMessages,
formatProjectTypeSentence,
injectModrinthClient,
injectUserPreferences,
PROJECT_DEP_MARKER_QUERY,
provideBrowseManager,
SelectedProjectsFloatingBar,
@@ -53,6 +54,7 @@ const debug = useDebugLogger('Discover')
const { updateDiscoverFilterContext } = useCdnDownloadContext()
const client = injectModrinthClient()
const { updatePreferences } = injectUserPreferences()
const queryClient = useQueryClient()
const filtersMenuOpen = ref(false)
@@ -131,6 +133,17 @@ const resultsDisplayMode = computed<DisplayMode>(() =>
: 'list',
)
const layoutPreferenceKeys = {
mod: 'mods',
plugin: 'plugins',
datapack: 'datapacks',
shader: 'shaders',
resourcepack: 'resourcepacks',
modpack: 'modpacks',
server: 'servers',
user: 'users',
} as const satisfies Partial<Record<DisplayLocation, keyof Labrinth.Users.v3.LayoutPreferences>>
const maxResultsForView = ref<Record<DisplayMode, number[]>>({
list: [5, 10, 15, 20, 50, 100],
grid: [6, 12, 18, 24, 48, 96],
@@ -143,10 +156,21 @@ const currentMaxResultsOptions = computed(
function cycleSearchDisplayMode() {
if (!resultsDisplayLocation.value) return
cosmetics.value.searchDisplayMode[resultsDisplayLocation.value] = cycleValue(
const displayMode = cycleValue(
cosmetics.value.searchDisplayMode[resultsDisplayLocation.value],
tags.value.projectViewModes.filter((x) => x !== 'grid'),
)
cosmetics.value.searchDisplayMode[resultsDisplayLocation.value] = displayMode
const preferenceKey =
layoutPreferenceKeys[resultsDisplayLocation.value as keyof typeof layoutPreferenceKeys]
if (!preferenceKey) return
void updatePreferences({
layouts: {
[preferenceKey]: displayMode === 'list' ? 'rows' : 'grid',
} as Partial<Labrinth.Users.v3.LayoutPreferences>,
}).catch(() => undefined)
}
const onboardingModalRef = ref<ServerInstallModalHandle | null>(null)
+1 -1
View File
@@ -78,7 +78,7 @@
src="https://cdn.modrinth.com/servers/panel-right-dark.webp"
alt=""
aria-hidden="true"
class="pointer-events-none h-full w-fit select-none"
class="pointer-events-none h-full w-auto select-none"
/>
</div>
+213 -390
View File
@@ -18,197 +18,47 @@
</template>
</Admonition>
<section class="universal-card">
<h2 class="text-2xl">{{ formatMessage(colorTheme.title) }}</h2>
<p>{{ formatMessage(colorTheme.description) }}</p>
<ThemeSelector
:update-color-theme="updateColorTheme"
:current-theme="theme.preferred"
:theme-options="themeOptions"
:system-theme-color="systemTheme"
/>
</section>
<section class="universal-card">
<h2 class="text-2xl">{{ formatMessage(projectListLayouts.title) }}</h2>
<p class="mb-4">{{ formatMessage(projectListLayouts.description) }}</p>
<div class="project-lists">
<div v-for="projectType in listTypes" :key="projectType.id + '-project-list-layouts'">
<div class="label">
<div class="label__title">
{{
projectListLayouts[projectType.id]
? formatMessage(projectListLayouts[projectType.id])
: projectType.id
}}
</div>
</div>
<div class="project-list-layouts">
<button
type="button"
class="flex !w-full cursor-pointer flex-col overflow-hidden rounded-[var(--radius-md)] border border-solid border-divider bg-button-bg p-0 text-left text-primary outline-2 outline-transparent transition-[filter,transform] hover:brightness-[0.85] focus-visible:ring-4 focus-visible:ring-brand-shadow active:scale-[0.97] active:brightness-[0.8] [&_.example-card]:m-0 [&_.example-card]:min-h-0 [&_.example-card]:border-2 [&_.example-card]:border-solid [&_.example-card]:border-transparent [&_.example-card]:p-4 [&_.example-card]:outline-2 [&_.example-card]:outline-transparent"
:class="{
'!text-contrast [&_.example-card]:!border-brand [&_.example-card]:!bg-brand-highlight [&_.radio]:text-brand':
cosmetics.searchDisplayMode[projectType.id] === 'list',
}"
@click="() => (cosmetics.searchDisplayMode[projectType.id] = 'list')"
>
<div
class="preview flex w-full items-center justify-center bg-bg p-6 outline-2 outline-transparent"
>
<div class="layout-list-mode">
<div class="example-card card"></div>
<div class="example-card card"></div>
<div class="example-card card"></div>
<div class="example-card card"></div>
</div>
</div>
<div
class="label flex grow items-center px-[var(--gap-lg)] py-[var(--gap-md)] text-left"
>
<RadioButtonCheckedIcon
v-if="cosmetics.searchDisplayMode[projectType.id] === 'list'"
class="radio mr-2 shrink-0"
/>
<RadioButtonIcon v-else class="radio mr-2 shrink-0" />
{{ formatMessage(layoutMode.rows) }}
</div>
</button>
<button
type="button"
class="flex !w-full cursor-pointer flex-col overflow-hidden rounded-[var(--radius-md)] border border-solid border-divider bg-button-bg p-0 text-left text-primary outline-2 outline-transparent transition-[filter,transform] hover:brightness-[0.85] focus-visible:ring-4 focus-visible:ring-brand-shadow active:scale-[0.97] active:brightness-[0.8] [&_.example-card]:m-0 [&_.example-card]:min-h-0 [&_.example-card]:border-2 [&_.example-card]:border-solid [&_.example-card]:border-transparent [&_.example-card]:p-4 [&_.example-card]:outline-2 [&_.example-card]:outline-transparent"
:class="{
'!text-contrast [&_.example-card]:!border-brand [&_.example-card]:!bg-brand-highlight [&_.radio]:text-brand':
cosmetics.searchDisplayMode[projectType.id] === 'gallery' ||
cosmetics.searchDisplayMode[projectType.id] === 'grid',
}"
@click="() => (cosmetics.searchDisplayMode[projectType.id] = 'grid')"
>
<div
class="preview flex w-full items-center justify-center bg-bg p-6 outline-2 outline-transparent"
>
<div class="layout-gallery-mode">
<div class="example-card card"></div>
<div class="example-card card"></div>
<div class="example-card card"></div>
<div class="example-card card"></div>
</div>
</div>
<div
class="label flex grow items-center px-[var(--gap-lg)] py-[var(--gap-md)] text-left"
>
<RadioButtonCheckedIcon
v-if="
cosmetics.searchDisplayMode[projectType.id] === 'gallery' ||
cosmetics.searchDisplayMode[projectType.id] === 'grid'
"
class="radio mr-2 shrink-0"
/>
<RadioButtonIcon v-else class="radio mr-2 shrink-0" />
{{ formatMessage(layoutMode.grid) }}
</div>
</button>
</div>
</div>
</div>
</section>
<section class="universal-card">
<h2 class="text-2xl">{{ formatMessage(toggleFeatures.title) }}</h2>
<p class="mb-4">{{ formatMessage(toggleFeatures.description) }}</p>
<div class="flex flex-col gap-4">
<div class="flex flex-row flex-wrap items-center justify-between gap-2">
<label for="advanced-rendering" class="flex-1">
<span class="block font-semibold text-contrast">
{{ formatMessage(toggleFeatures.advancedRenderingTitle) }}
</span>
<span class="text-secondary">
{{ formatMessage(toggleFeatures.advancedRenderingDescription) }}
</span>
</label>
<Toggle id="advanced-rendering" v-model="cosmetics.advancedRendering" class="shrink-0" />
</div>
<div class="flex flex-row flex-wrap items-center justify-between gap-2">
<label for="external-links-new-tab" class="flex-1">
<span class="block font-semibold text-contrast">
{{ formatMessage(toggleFeatures.externalLinksNewTabTitle) }}
</span>
<span class="text-secondary">
{{ formatMessage(toggleFeatures.externalLinksNewTabDescription) }}
</span>
</label>
<Toggle
id="external-links-new-tab"
v-model="cosmetics.externalLinksNewTab"
class="shrink-0"
/>
</div>
<div v-if="false" class="flex flex-row flex-wrap items-center justify-between gap-2">
<label for="modrinth-app-promos" class="flex-1">
<span class="block font-semibold text-contrast">
{{ formatMessage(toggleFeatures.hideModrinthAppPromosTitle) }}
</span>
<span class="text-secondary">
{{ formatMessage(toggleFeatures.hideModrinthAppPromosDescription) }}
</span>
</label>
<Toggle
id="modrinth-app-promos"
v-model="cosmetics.hideModrinthAppPromos"
class="shrink-0"
/>
</div>
<div class="flex flex-row flex-wrap items-center justify-between gap-2">
<label for="search-layout-toggle" class="flex-1">
<span class="block font-semibold text-contrast">
{{ formatMessage(toggleFeatures.rightAlignedFiltersSidebarTitle) }}
</span>
<span class="text-secondary">
{{ formatMessage(toggleFeatures.rightAlignedFiltersSidebarDescription) }}
</span>
</label>
<Toggle
id="search-layout-toggle"
v-model="cosmetics.rightSearchLayout"
class="shrink-0"
/>
</div>
<div class="flex flex-row flex-wrap items-center justify-between gap-2">
<label for="project-layout-toggle" class="">
<span class="block font-semibold text-contrast">
{{ formatMessage(toggleFeatures.leftAlignedContentSidebarTitle) }}
</span>
<span class="text-secondary">
{{ formatMessage(toggleFeatures.leftAlignedContentSidebarDescription) }}
</span>
</label>
<Toggle
id="project-layout-toggle"
v-model="cosmetics.leftContentLayout"
class="shrink-0"
/>
</div>
</div>
<AppearanceSettingsLayout />
</section>
<UnsavedChangesPopup
:original="saved"
:modified="changes"
:saving="saving"
@reset="reset"
@save="saveAppearanceSettings"
/>
</div>
</template>
<script setup lang="ts">
import { CodeIcon, RadioButtonCheckedIcon, RadioButtonIcon } from '@modrinth/assets'
import type { Labrinth } from '@modrinth/api-client'
import { CodeIcon } from '@modrinth/assets'
import {
Admonition,
AppearanceSettingsLayout,
Button,
defineMessages,
injectAuth,
injectNotificationManager,
injectUserPreferences,
IntlFormatted,
isProjectDisplayLocation,
normalizeChildren,
ThemeSelector,
Toggle,
type ProjectDisplayLocation,
type ProjectLayout,
type ProjectLayoutSetting,
provideAppearanceSettings,
type SidebarPreferences,
UnsavedChangesPopup,
useSavable,
useVIntl,
} from '@modrinth/ui'
import { formatProjectType } from '@modrinth/utils'
import type { DisplayLocation } from '~/plugins/cosmetics'
import { isDarkTheme, type Theme } from '~/plugins/theme/index.ts'
const { addNotification } = injectNotificationManager()
const auth = injectAuth()
const { updatePreferences } = injectUserPreferences()
const { formatMessage } = useVIntl()
const messages = defineMessages({
@@ -234,21 +84,6 @@ useHead({
title: () => `${formatMessage(messages.headTitle)} - Modrinth`,
})
const layoutMode = defineMessages({
rows: {
id: 'settings.display.project-list-layouts.mode.rows',
defaultMessage: 'Rows',
},
grid: {
id: 'settings.display.project-list-layouts.mode.grid',
defaultMessage: 'Grid',
},
gallery: {
id: 'settings.display.project-list-layouts.mode.gallery',
defaultMessage: 'Gallery',
},
})
const notifications = defineMessages({
developerModeDeactivatedTitle: {
id: 'settings.display.notification.developer-mode-deactivated.title',
@@ -260,123 +95,9 @@ const notifications = defineMessages({
},
})
const colorTheme = defineMessages({
title: {
id: 'settings.display.theme.title',
defaultMessage: 'Color theme',
},
description: {
id: 'settings.display.theme.description',
defaultMessage: 'Select your preferred color theme for Modrinth on this device.',
},
})
const projectListLayouts = defineMessages({
title: {
id: 'settings.display.project-list-layouts.title',
defaultMessage: 'Project list layouts',
},
description: {
id: 'settings.display.project-list-layouts.description',
defaultMessage:
'Select your preferred layout for each page that displays project lists on this device.',
},
mod: {
id: 'settings.display.project-list-layouts.mod',
defaultMessage: 'Mods page',
},
plugin: {
id: 'settings.display.project-list-layouts.plugin',
defaultMessage: 'Plugins page',
},
datapack: {
id: 'settings.display.project-list-layouts.datapack',
defaultMessage: 'Data Packs page',
},
shader: {
id: 'settings.display.project-list-layouts.shader',
defaultMessage: 'Shaders page',
},
resourcepack: {
id: 'settings.display.project-list-layouts.resourcepack',
defaultMessage: 'Resource Packs page',
},
modpack: {
id: 'settings.display.project-list-layouts.modpack',
defaultMessage: 'Modpacks page',
},
server: {
id: 'settings.display.project-list-layouts.server',
defaultMessage: 'Servers page',
},
user: {
id: 'settings.display.project-list-layouts.user',
defaultMessage: 'User profile pages',
},
collection: {
id: 'settings.display.project-list.layouts.collection',
defaultMessage: 'Collection',
},
})
const toggleFeatures = defineMessages({
title: {
id: 'settings.display.flags.title',
defaultMessage: 'Toggle features',
},
description: {
id: 'settings.display.flags.description',
defaultMessage: 'Enable or disable certain features on this device.',
},
advancedRenderingTitle: {
id: 'settings.display.sidebar.advanced-rendering.title',
defaultMessage: 'Advanced rendering',
},
advancedRenderingDescription: {
id: 'settings.display.sidebar.advanced-rendering.description',
defaultMessage:
'Enables advanced rendering such as blur effects that may cause performance issues without hardware-accelerated rendering.',
},
externalLinksNewTabTitle: {
id: 'settings.display.sidebar.external-links-new-tab.title',
defaultMessage: 'Open external links in new tab',
},
externalLinksNewTabDescription: {
id: 'settings.display.sidebar.external-links-new-tab.description',
defaultMessage:
'Make links which go outside of Modrinth open in a new tab. No matter this setting, links on the same domain and in Markdown descriptions will open in the same tab, and links on ads and edit pages will open in a new tab.',
},
hideModrinthAppPromosTitle: {
id: 'settings.display.sidebar.hide-app-promos.title',
defaultMessage: 'Hide Modrinth App promotions',
},
hideModrinthAppPromosDescription: {
id: 'settings.display.sidebar.hide-app-promos.description',
defaultMessage:
'Hides the "Get Modrinth App" buttons from primary navigation. The Modrinth App page can still be found on the landing page or in the footer.',
},
rightAlignedFiltersSidebarTitle: {
id: 'settings.display.sidebar.right-aligned-filters-sidebar.title',
defaultMessage: 'Right-aligned filters sidebar on search pages',
},
rightAlignedFiltersSidebarDescription: {
id: 'settings.display.sidebar.right-aligned-filters-sidebar.description',
defaultMessage: 'Aligns the filters sidebar to the right of the search results.',
},
leftAlignedContentSidebarTitle: {
id: 'settings.display.sidebar.left-aligned-content-sidebar.title',
defaultMessage: 'Left-aligned sidebar on content pages',
},
leftAlignedContentSidebarDescription: {
id: 'settings.display.sidebar.right-aligned-content-sidebar.description',
defaultMessage: "Aligns the sidebar to the left of the page's content.",
},
})
const cosmetics = useCosmetics()
const flags = useFeatureFlags()
const tags = useGeneratedState()
const theme = useTheme()
// On the server the value of native theme can be 'unknown'. To hydrate
@@ -394,27 +115,205 @@ const systemTheme = useMountedValue((mounted): Theme => {
return systemTheme_ === 'light' ? theme.preferences.light : theme.preferences.dark
})
const projectLayouts = computed<ProjectLayoutSetting[]>(() => {
const layouts = tags.value.projectTypes
.map(({ id }) => id)
.filter(isProjectDisplayLocation)
.map(
(type): ProjectLayoutSetting => ({
type,
layout: cosmetics.value.searchDisplayMode[type] === 'list' ? 'rows' : 'grid',
}),
)
layouts.push({
type: 'user',
layout: cosmetics.value.searchDisplayMode.user === 'list' ? 'rows' : 'grid',
})
return layouts
})
const sidebarPreferences = computed<SidebarPreferences>(() => ({
right_aligned_search: cosmetics.value.rightSearchLayout,
left_aligned_content: cosmetics.value.leftContentLayout,
}))
type AppearanceSettingsState = {
theme: Theme | 'system'
syncAcrossDevices: boolean
advancedRendering: boolean
projectLayouts: ProjectLayoutSetting[]
externalLinksNewTab: boolean
sidebarPreferences: SidebarPreferences
}
const layoutPreferenceKeys: Record<
ProjectDisplayLocation,
keyof Labrinth.Users.v3.LayoutPreferences
> = {
mod: 'mods',
plugin: 'plugins',
datapack: 'datapacks',
shader: 'shaders',
resourcepack: 'resourcepacks',
modpack: 'modpacks',
server: 'servers',
user: 'users',
}
function getAppearanceSettingsState(): AppearanceSettingsState {
return {
theme: theme.preferred,
syncAcrossDevices: theme.syncAcrossDevices,
advancedRendering: cosmetics.value.advancedRendering,
projectLayouts: projectLayouts.value,
externalLinksNewTab: cosmetics.value.externalLinksNewTab,
sidebarPreferences: sidebarPreferences.value,
}
}
const { saved, current, changes, saving, reset, save } = useSavable(
getAppearanceSettingsState,
async (appearanceChanges) => {
const value = current.value
const preferencesPatch: Labrinth.Users.v3.PartialUserPreferences = {}
if (
value.syncAcrossDevices &&
auth.user.value &&
(appearanceChanges.theme !== undefined || appearanceChanges.syncAcrossDevices !== undefined)
) {
preferencesPatch.appearance =
value.theme === 'system' ? { auto: true } : { auto: false, theme: value.theme }
}
if (appearanceChanges.projectLayouts !== undefined) {
const layouts: Partial<Labrinth.Users.v3.LayoutPreferences> = {}
for (const setting of value.projectLayouts) {
layouts[layoutPreferenceKeys[setting.type]] = setting.layout
}
preferencesPatch.layouts = layouts
}
if (appearanceChanges.sidebarPreferences !== undefined) {
preferencesPatch.sidebars = value.sidebarPreferences
}
if (Object.keys(preferencesPatch).length > 0) {
await updatePreferences(preferencesPatch)
}
if (value.theme !== 'system') {
if (isDarkTheme(value.theme)) {
theme.preferences.dark = value.theme
} else {
theme.preferences.light = value.theme
}
}
theme.preferred = value.theme
theme.syncAcrossDevices = value.syncAcrossDevices
cosmetics.value.advancedRendering = value.advancedRendering
cosmetics.value.externalLinksNewTab = value.externalLinksNewTab
cosmetics.value.rightSearchLayout = value.sidebarPreferences.right_aligned_search
cosmetics.value.leftContentLayout = value.sidebarPreferences.left_aligned_content
for (const setting of value.projectLayouts) {
cosmetics.value.searchDisplayMode[setting.type] = setting.layout === 'rows' ? 'list' : 'grid'
}
},
)
const themeOptions = computed(() => {
const options: ('system' | Theme)[] = ['system', 'light', 'dark', 'oled']
if (flags.value.developerMode || theme.preferred === 'retro') {
if (flags.value.developerMode || current.value.theme === 'retro') {
options.push('retro')
}
return options
})
function updateColorTheme(value: Theme | 'system') {
if (value !== 'system') {
if (isDarkTheme(value)) {
theme.preferences.dark = value
} else {
theme.preferences.light = value
}
}
theme.preferred = value
function setTheme(value: Theme | 'system'): void {
current.value.theme = value
}
function disableDeveloperMode() {
function setSyncAcrossDevices(value: boolean): void {
current.value.syncAcrossDevices = value
}
function setAdvancedRendering(value: boolean): void {
current.value.advancedRendering = value
}
function setProjectLayout(type: ProjectDisplayLocation, layout: ProjectLayout): void {
current.value.projectLayouts = current.value.projectLayouts.map((setting) =>
setting.type === type ? { ...setting, layout } : setting,
)
}
function setExternalLinksNewTab(value: boolean): void {
current.value.externalLinksNewTab = value
}
function setSidebarPreference(key: keyof SidebarPreferences, value: boolean): void {
current.value.sidebarPreferences = {
...current.value.sidebarPreferences,
[key]: value,
}
}
watch(
[() => current.value.theme, () => saved.value.theme],
([selectedTheme, savedTheme]) => {
theme.preview = selectedTheme === savedTheme ? null : selectedTheme
},
{ immediate: true },
)
onBeforeUnmount(() => {
theme.preview = null
})
async function saveAppearanceSettings(): Promise<void> {
try {
await save()
} catch {
return
}
}
provideAppearanceSettings({
deferPersistence: true,
theme: {
current: computed(() => current.value.theme),
options: themeOptions,
system: systemTheme,
set: setTheme,
syncAcrossDevices: {
value: computed(() => current.value.syncAcrossDevices),
set: setSyncAcrossDevices,
},
syncDisabled: computed(() => !auth.user.value),
},
advancedRendering: {
value: computed(() => current.value.advancedRendering),
set: setAdvancedRendering,
},
projectLayouts: {
value: computed(() => current.value.projectLayouts),
set: setProjectLayout,
},
externalLinksNewTab: {
value: computed(() => current.value.externalLinksNewTab),
set: setExternalLinksNewTab,
},
sidebarPreferences: {
value: computed(() => current.value.sidebarPreferences),
set: setSidebarPreference,
},
updatePreferences,
})
function disableDeveloperMode(): void {
flags.value.developerMode = !flags.value.developerMode
saveFeatureFlags()
addNotification({
@@ -423,80 +322,4 @@ function disableDeveloperMode() {
type: 'success',
})
}
const listTypes = computed(() => {
const types = tags.value.projectTypes.map((type) => {
return {
id: type.id as DisplayLocation,
name: formatProjectType(type.id) + 's',
display: 'the ' + formatProjectType(type.id).toLowerCase() + 's search page',
}
})
types.push({
id: 'user' as DisplayLocation,
name: 'User profiles',
display: 'user pages',
})
return types
})
</script>
<style scoped lang="scss">
.project-lists {
display: flex;
flex-direction: column;
gap: var(--gap-md);
> :first-child .label__title {
margin-top: 0;
}
.preview {
--_layout-width: 7rem;
--_layout-height: 4.5rem;
--_layout-gap: 0.25rem;
.example-card {
border-radius: 0.5rem;
width: var(--_layout-width);
height: calc((var(--_layout-height) - 3 * var(--_layout-gap)) / 4);
padding: 0;
}
.layout-list-mode {
display: grid;
grid-template-columns: 1fr;
gap: var(--_layout-gap);
}
.layout-grid-mode {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: var(--_layout-gap);
.example-card {
width: calc((var(--_layout-width) - 2 * var(--_layout-gap)) / 3);
height: calc((var(--_layout-height) - var(--_layout-gap)) / 2);
}
}
.layout-gallery-mode {
display: grid;
grid-template-columns: 1fr 1fr;
gap: var(--_layout-gap);
.example-card {
width: calc((var(--_layout-width) - var(--_layout-gap)) / 2);
height: calc((var(--_layout-height) - var(--_layout-gap)) / 2);
}
}
}
}
.project-list-layouts {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(9.5rem, 1fr));
gap: var(--gap-lg);
}
</style>
+22 -71
View File
@@ -1,80 +1,31 @@
<template>
<div>
<section class="universal-card">
<LanguageSettings ref="languageSettings" product="website" />
</section>
<UnsavedChangesPopup
:original="languageSettings?.originalState ?? emptyLanguageState"
:modified="languageSettings?.modifiedState ?? emptyLanguageState"
:saving="languageSettings?.saving ?? false"
@reset="languageSettings?.reset()"
@save="languageSettings?.save()"
/>
</div>
</template>
<script setup lang="ts">
import {
Admonition,
commonSettingsMessages,
injectI18n,
IntlFormatted,
LanguageSelector,
languageSelectorMessages,
LOCALES,
LanguageSettings,
UnsavedChangesPopup,
useVIntl,
} from '@modrinth/ui'
const { formatMessage } = useVIntl()
const { locale, setLocale } = injectI18n()
const languageSettings = ref<InstanceType<typeof LanguageSettings> | null>(null)
const emptyLanguageState = { locale: '' }
const platform = computed(() => formatMessage(languageSelectorMessages.platformSite))
const $isChanging = ref(false)
async function onLocaleChange(newLocale: string) {
if (locale.value === newLocale) return
$isChanging.value = true
try {
await setLocale(newLocale)
} finally {
$isChanging.value = false
}
}
useHead({
title: () => `${formatMessage(commonSettingsMessages.language)} - Modrinth`,
})
</script>
<template>
<div>
<section class="universal-card">
<h2 class="text-2xl">{{ formatMessage(commonSettingsMessages.language) }}</h2>
<Admonition type="warning">
{{ formatMessage(languageSelectorMessages.languageWarning, { platform }) }}
</Admonition>
<div class="card-description mt-4">
<IntlFormatted
:message-id="languageSelectorMessages.languagesDescription"
:values="{ platform }"
>
<template #~crowdin-link="{ children }">
<a href="https://translate.modrinth.com">
<component :is="() => children" />
</a>
</template>
</IntlFormatted>
</div>
<LanguageSelector
:current-locale="locale"
:locales="LOCALES"
:on-locale-change="onLocaleChange"
:is-changing="$isChanging"
/>
</section>
</div>
</template>
<style scoped lang="scss">
.card-description {
margin-bottom: calc(var(--spacing-card-sm) + var(--spacing-card-md));
a {
color: var(--color-link);
&:hover {
color: var(--color-link-hover);
}
&:active {
color: var(--color-link-active);
}
}
}
</style>
@@ -1,10 +1,18 @@
<template>
<section v-if="auth.user" class="universal-card">
<AccountSocialSettings
ref="socialSettings"
:get-blocked-users="getBlockedUsers"
:get-users="getUsers"
:unblock-user="unblockUser"
/>
<UnsavedChangesPopup
:original="socialSettings?.originalState ?? emptySocialState"
:modified="socialSettings?.modifiedState ?? emptySocialState"
:saving="socialSettings?.saving ?? false"
@reset="socialSettings?.reset()"
@save="socialSettings?.save()"
/>
</section>
</template>
@@ -14,6 +22,7 @@ import {
AccountSocialSettings,
commonSettingsMessages,
injectModrinthClient,
UnsavedChangesPopup,
useVIntl,
} from '@modrinth/ui'
@@ -24,6 +33,12 @@ definePageMeta({
const auth = await useAuth()
const client = injectModrinthClient()
const { formatMessage } = useVIntl()
const socialSettings = ref<InstanceType<typeof AccountSocialSettings> | null>(null)
const emptySocialState = {
friendPrivacy: 'everyone',
sharedInstancesPrivacy: 'everyone',
hostingAccessPrivacy: 'everyone',
}
function getBlockedUsers(): Promise<Labrinth.BlockedUsers.v3.BlockedUserId[]> {
return client.labrinth.blocked_users_v3.list()
+1
View File
@@ -9,6 +9,7 @@ export type DisplayLocation =
| 'modpack'
| 'shader'
| 'datapack'
| 'server'
| 'user'
| 'collection'
+7 -2
View File
@@ -178,7 +178,10 @@ export default defineNuxtPlugin({
return msg
}
async function setLocale(newLocale: string): Promise<void> {
async function setLocale(
newLocale: string,
{ persist = true }: { persist?: boolean } = {},
): Promise<void> {
debug('setLocale: called', { newLocale, currentLocale: locale.value })
if (!LOCALES.some((l) => l.code === newLocale)) {
@@ -197,7 +200,9 @@ export default defineNuxtPlugin({
})
locale.value = newLocale
useCookie('locale', { maxAge: 31536000, path: '/' }).value = newLocale
if (persist) {
useCookie('locale', { maxAge: 31536000, path: '/' }).value = newLocale
}
}
// Detect initial locale (cookie > Accept-Language > default)
+9 -2
View File
@@ -3,7 +3,7 @@ import { ref } from 'vue'
import { useNativeTheme } from './native-theme.ts'
import { usePreferredThemes } from './preferred-theme.ts'
import { useThemeSettings } from './theme-settings.ts'
import { isDarkTheme } from './themes.ts'
import { isDarkTheme, type Theme } from './themes.ts'
export * from './themes.ts'
@@ -33,8 +33,13 @@ export default defineNuxtPlugin({
}
const $settings = useThemeSettings(() => getPreferredNativeTheme())
const $preview = ref<Theme | 'system' | null>(null)
const $active = computed(() => {
if ($preview.value === null) return $settings.active
return $preview.value === 'system' ? getPreferredNativeTheme() : $preview.value
})
useHead({ htmlAttrs: { class: () => [`${$settings.active}-mode`] } })
useHead({ htmlAttrs: { class: () => [`${$active.value}-mode`] } })
function syncTheme() {
$settings.active =
@@ -74,6 +79,8 @@ export default defineNuxtPlugin({
provide: {
theme: reactive({
...toRefs($settings),
active: $active,
preview: $preview,
/**
* Preferred themes for each mode.
*/
@@ -3,6 +3,7 @@ import type { Theme } from './themes.ts'
interface ThemeSettings {
preference: Theme | 'system'
value: Theme
syncAcrossDevices?: boolean
}
export function useThemeSettings(getDefaultTheme?: () => Theme) {
@@ -22,6 +23,7 @@ export function useThemeSettings(getDefaultTheme?: () => Theme) {
$settings.value = {
preference: 'system',
value: getDefaultTheme(),
syncAcrossDevices: true,
}
}
@@ -35,5 +37,10 @@ export function useThemeSettings(getDefaultTheme?: () => Theme) {
get: () => $settings.value.value ?? getDefaultTheme(),
set: (value) => ($settings.value.value = value),
}),
syncAcrossDevices: computed({
get: () => $settings.value.syncAcrossDevices ?? true,
set: (value) => ($settings.value.syncAcrossDevices = value),
}),
})
}
+14 -4
View File
@@ -1,4 +1,4 @@
import { provideNotificationManager } from '@modrinth/ui'
import { provideNotificationManager, setupUserPreferencesProvider } from '@modrinth/ui'
import { FrontendNotificationManager } from './frontend-notifications'
import { setupAuthProvider } from './setup/auth'
@@ -10,13 +10,23 @@ import { setupTagsProvider } from './setup/tags'
import { setupUserCountryProvider } from './setup/user-country'
export function setupProviders(auth: Awaited<ReturnType<typeof useAuth>>) {
provideNotificationManager(new FrontendNotificationManager())
const notificationManager = new FrontendNotificationManager()
provideNotificationManager(notificationManager)
setupAuthProvider(auth)
setupModrinthClientProvider(auth)
const authProvider = setupAuthProvider(auth)
const client = setupModrinthClientProvider(auth)
const userPreferences = setupUserPreferencesProvider({
auth: authProvider,
getPreferences: (userId) => client.labrinth.users_v3.getPreferences(userId),
patchPreferences: (userId, preferences) =>
client.labrinth.users_v3.patchPreferences(userId, preferences),
notificationManager,
})
setupTagsProvider()
setupFilePickerProvider()
setupPageContextProvider()
setupLoadingStateProvider()
setupUserCountryProvider()
return userPreferences
}
@@ -30,4 +30,5 @@ export function setupAuthProvider(auth: Awaited<ReturnType<typeof useAuth>>) {
})
provideAuth(authProvider)
return authProvider
}
@@ -8,6 +8,7 @@ export function setupModrinthClientProvider(auth: Awaited<ReturnType<typeof useA
apiBaseUrl: config.public.apiBaseUrl.replace('/v2/', '/'),
archonBaseUrl: config.public.pyroBaseUrl.replace('/v2/', '/'),
sharedInstancesBaseUrl: config.public.sharedInstancesBaseUrl,
commitHash: config.public.hash,
rateLimitKey: config.rateLimitKey,
})
provideModrinthClient(client)
+17 -17
View File
@@ -1,20 +1,20 @@
export default defineEventHandler(async (event) => {
try {
const mod = 'cloudflare:workers'
const { env } = await import(/* @vite-ignore */ mod)
const cfEnv = env as any
const config = useRuntimeConfig(event)
import { readEnv } from '~/helpers/env'
if (cfEnv.CF_PAGES_URL) config.public.siteUrl = cfEnv.CF_PAGES_URL
if (cfEnv.BROWSER_BASE_URL) config.public.apiBaseUrl = cfEnv.BROWSER_BASE_URL
if (cfEnv.BASE_URL) config.apiBaseUrl = cfEnv.BASE_URL
if (cfEnv.PYRO_BASE_URL) {
config.public.pyroBaseUrl = cfEnv.PYRO_BASE_URL
config.pyroBaseUrl = cfEnv.PYRO_BASE_URL
}
if (cfEnv.STRIPE_PUBLISHABLE_KEY)
config.public.stripePublishableKey = cfEnv.STRIPE_PUBLISHABLE_KEY
} catch {
/* empty */
export default defineEventHandler(async (event) => {
const config = useRuntimeConfig(event)
const siteUrl = await readEnv('CF_PAGES_URL')
const browserBaseUrl = await readEnv('BROWSER_BASE_URL')
const baseUrl = await readEnv('BASE_URL')
const pyroBaseUrl = await readEnv('PYRO_BASE_URL')
const stripePublishableKey = await readEnv('STRIPE_PUBLISHABLE_KEY')
if (siteUrl) config.public.siteUrl = siteUrl
if (browserBaseUrl) config.public.apiBaseUrl = browserBaseUrl
if (baseUrl) config.apiBaseUrl = baseUrl
if (pyroBaseUrl) {
config.public.pyroBaseUrl = pyroBaseUrl
config.pyroBaseUrl = pyroBaseUrl
}
if (stripePublishableKey) config.public.stripePublishableKey = stripePublishableKey
})
@@ -1,23 +1,13 @@
import { type Labrinth, ModrinthApiError } from '@modrinth/api-client'
import { SignJWT } from 'jose'
import { readEnv } from '~/helpers/env'
import { useServerModrinthClient } from '~/server/utils/api-client'
type IntercomTokenResponse = {
token: string
}
async function getIntercomKeyFromSecretsStore(): Promise<string | undefined> {
try {
const mod = 'cloudflare:workers'
const { env } = await import(/* @vite-ignore */ mod)
return await env.INTERCOM_IDENTITY_SECRET?.get()
} catch {
// Not running in Cloudflare Workers environment
return undefined
}
}
async function signIntercomUserJwt(
user: { id: string; username: string; email?: string; created: string },
secret: string,
@@ -72,7 +62,7 @@ export default defineEventHandler(async (event): Promise<IntercomTokenResponse>
setHeader(event, 'cache-control', 'private, no-store, max-age=0')
const intercomSecret =
(await getIntercomKeyFromSecretsStore()) ?? useRuntimeConfig(event).intercomIdentitySecret
(await readEnv('INTERCOM_IDENTITY_SECRET')) ?? useRuntimeConfig(event).intercomIdentitySecret
if (!intercomSecret) {
throw createError({
+10 -11
View File
@@ -5,17 +5,10 @@ import {
type NuxtClientConfig,
NuxtModrinthClient,
} from '@modrinth/api-client'
import type { H3Event } from 'h3'
import { getRequestHeader, type H3Event } from 'h3'
async function getRateLimitKeyFromSecretsStore(): Promise<string | undefined> {
try {
const mod = 'cloudflare:workers'
const { env } = await import(/* @vite-ignore */ mod)
return await env.RATE_LIMIT_IGNORE_KEY?.get()
} catch {
return undefined
}
}
import { readEnv } from '~/helpers/env'
import { getFrontendUserAgent, VISITOR_USER_AGENT_HEADER } from '~/helpers/user-agent'
export interface ServerModrinthClientOptions {
event?: H3Event
@@ -28,6 +21,10 @@ export function useServerModrinthClient(options?: ServerModrinthClientOptions):
const sharedInstancesBaseUrl =
config.sharedInstancesBaseUrl || config.public.sharedInstancesBaseUrl
const visitorUserAgent = options?.event
? getRequestHeader(options.event, 'user-agent')
: undefined
const features = []
if (options?.authToken) {
@@ -42,7 +39,9 @@ export function useServerModrinthClient(options?: ServerModrinthClientOptions):
const clientConfig: NuxtClientConfig = {
labrinthBaseUrl: apiBaseUrl,
sharedInstancesBaseUrl,
rateLimitKey: config.rateLimitKey || getRateLimitKeyFromSecretsStore,
userAgent: getFrontendUserAgent(config.public.hash),
headers: visitorUserAgent ? { [VISITOR_USER_AGENT_HEADER]: visitorUserAgent } : undefined,
rateLimitKey: config.rateLimitKey || (() => readEnv('RATE_LIMIT_IGNORE_KEY')),
features,
}