mirror of
https://github.com/modrinth/code.git
synced 2026-07-31 21:26:40 +00:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
428e13a6d3 |
@@ -76,8 +76,6 @@ jobs:
|
||||
|
||||
- name: Deploy Storybook preview
|
||||
uses: cloudflare/wrangler-action@9acf94ace14e7dc412b076f2c5c20b8ce93c79cd # v3.15.0
|
||||
env:
|
||||
NODE_OPTIONS: --max-old-space-size=6144
|
||||
with:
|
||||
apiToken: ${{ secrets.CF_API_TOKEN }}
|
||||
accountId: ${{ secrets.CF_ACCOUNT_ID }}
|
||||
|
||||
Generated
-70
@@ -1628,31 +1628,6 @@ dependencies = [
|
||||
"serde_with",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bon"
|
||||
version = "3.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a602c73c7b0148ec6d12af6fd5cc7a46e2eacc8878271a999abac56eed12f561"
|
||||
dependencies = [
|
||||
"bon-macros",
|
||||
"rustversion",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bon-macros"
|
||||
version = "3.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6dee98b0db6a962de883bf5d20362dee4d7ca0d12fe39a7c6c73c844e1cd7c1f"
|
||||
dependencies = [
|
||||
"darling 0.23.0",
|
||||
"ident_case",
|
||||
"prettyplease",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"rustversion",
|
||||
"syn 2.0.106",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "borsh"
|
||||
version = "1.5.7"
|
||||
@@ -2133,15 +2108,6 @@ dependencies = [
|
||||
"cc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cobs"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1"
|
||||
dependencies = [
|
||||
"thiserror 2.0.17",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "color-eyre"
|
||||
version = "0.6.5"
|
||||
@@ -3268,18 +3234,6 @@ version = "1.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7"
|
||||
|
||||
[[package]]
|
||||
name = "embedded-io"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced"
|
||||
|
||||
[[package]]
|
||||
name = "embedded-io"
|
||||
version = "0.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d"
|
||||
|
||||
[[package]]
|
||||
name = "encode_unicode"
|
||||
version = "1.0.0"
|
||||
@@ -5461,16 +5415,13 @@ dependencies = [
|
||||
"json-patch 4.1.0",
|
||||
"labrinth",
|
||||
"lettre",
|
||||
"lz4_flex",
|
||||
"meilisearch-sdk",
|
||||
"modrinth-content-management",
|
||||
"modrinth-util",
|
||||
"muralpay",
|
||||
"murmur2",
|
||||
"neverbounce",
|
||||
"paste",
|
||||
"path-util",
|
||||
"postcard",
|
||||
"prometheus",
|
||||
"quick-xml 0.38.3",
|
||||
"rand 0.8.5",
|
||||
@@ -6248,14 +6199,6 @@ dependencies = [
|
||||
"jni-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "neverbounce"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"reqwest 0.12.24",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "new_debug_unreachable"
|
||||
version = "1.0.6"
|
||||
@@ -7524,18 +7467,6 @@ version = "1.11.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
|
||||
|
||||
[[package]]
|
||||
name = "postcard"
|
||||
version = "1.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24"
|
||||
dependencies = [
|
||||
"cobs",
|
||||
"embedded-io 0.4.0",
|
||||
"embedded-io 0.6.1",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "potential_utf"
|
||||
version = "0.1.3"
|
||||
@@ -10918,7 +10849,6 @@ dependencies = [
|
||||
"async-walkdir",
|
||||
"async_zip",
|
||||
"base64 0.22.1",
|
||||
"bon",
|
||||
"bytemuck",
|
||||
"bytes",
|
||||
"chardetng",
|
||||
|
||||
-10
@@ -13,7 +13,6 @@ members = [
|
||||
"packages/modrinth-log",
|
||||
"packages/modrinth-maxmind",
|
||||
"packages/modrinth-util",
|
||||
"packages/neverbounce",
|
||||
"packages/path-util",
|
||||
]
|
||||
|
||||
@@ -52,7 +51,6 @@ aws-sdk-s3 = { version = "=1.122.0", default-features = false, features = [
|
||||
] }
|
||||
base64 = "0.22.1"
|
||||
bitflags = "2.9.4"
|
||||
bon = "3.9.3"
|
||||
bytemuck = "1.24.0"
|
||||
bytes = "1.10.1"
|
||||
censor = "0.3.0"
|
||||
@@ -119,12 +117,6 @@ lettre = { version = "0.11.19", default-features = false, features = [
|
||||
"tokio1",
|
||||
"tokio1-rustls",
|
||||
] }
|
||||
lz4_flex = { version = "0.11.5", default-features = false, features = [
|
||||
"checked-decode",
|
||||
"safe-decode",
|
||||
"safe-encode",
|
||||
"std",
|
||||
] }
|
||||
maxminddb = "0.26.0"
|
||||
meilisearch-sdk = { version = "0.30.0", default-features = false }
|
||||
modrinth-content-management = { path = "packages/modrinth-content-management" }
|
||||
@@ -133,7 +125,6 @@ modrinth-util = { path = "packages/modrinth-util" }
|
||||
muralpay = { path = "packages/muralpay" }
|
||||
murmur2 = "0.1.0"
|
||||
native-dialog = "0.9.2"
|
||||
neverbounce = { path = "packages/neverbounce" }
|
||||
notify = { version = "8.2.0", default-features = false }
|
||||
notify-debouncer-mini = { version = "0.7.0", default-features = false }
|
||||
objc2-app-kit = { version = "0.3.2", default-features = false }
|
||||
@@ -143,7 +134,6 @@ paste = "1.0.15"
|
||||
path-util = { path = "packages/path-util" }
|
||||
phf = { version = "0.13.1", features = ["macros"] }
|
||||
png = "0.18.0"
|
||||
postcard = { version = "1.1.3", default-features = false, features = ["alloc"] }
|
||||
proc-macro2 = { version = "1.0" }
|
||||
prometheus = "0.14.0"
|
||||
quartz_nbt = "0.2.9"
|
||||
|
||||
@@ -855,13 +855,12 @@ async function handleCommand(e) {
|
||||
if (e.path.endsWith('.mrpack')) {
|
||||
const location = { type: 'fromFile', path: e.path }
|
||||
const preview = await install_get_modpack_preview(location).catch(handleError)
|
||||
if (preview?.unknownFile || preview?.externalFilesInModpack.length > 0) {
|
||||
if (preview?.unknownFile) {
|
||||
const splitPath = e.path.split(/[\\/]/)
|
||||
const fileName = splitPath ? splitPath[splitPath.length - 1] : e.path
|
||||
unknownPackWarningModal.value?.show(
|
||||
() => install_create_modpack_instance(location).then(() => undefined),
|
||||
fileName,
|
||||
preview.externalFilesInModpack,
|
||||
)
|
||||
} else {
|
||||
await install_create_modpack_instance(location).catch(handleError)
|
||||
@@ -1737,8 +1736,8 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
|
||||
@create-anyway="handleContentInstallModpackDuplicateCreateAnyway"
|
||||
@go-to-instance="handleContentInstallModpackDuplicateGoToInstance"
|
||||
/>
|
||||
<InstallToPlayModal ref="installToPlayModal" :show-external-warnings="false" />
|
||||
<UpdateToPlayModal ref="updateToPlayModal" :show-external-warnings="false" />
|
||||
<InstallToPlayModal ref="installToPlayModal" />
|
||||
<UpdateToPlayModal ref="updateToPlayModal" />
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@@ -1,41 +1,108 @@
|
||||
<template>
|
||||
<UnknownFileWarningModal
|
||||
ref="modal"
|
||||
:mode="externalFilesInModpack.length > 0 ? 'modpack' : 'mod'"
|
||||
:file-name="fileName"
|
||||
:external-files-in-modpack="externalFilesInModpack"
|
||||
@cancel="reset"
|
||||
@continue="proceed"
|
||||
/>
|
||||
<NewModal ref="modal" :header="formatMessage(messages.header)" :on-hide="reset">
|
||||
<div class="max-w-[31rem] flex flex-col gap-6">
|
||||
<Admonition
|
||||
type="warning"
|
||||
:header="formatMessage(messages.warningTitle)"
|
||||
:body="formatMessage(messages.warningBody)"
|
||||
/>
|
||||
<div v-if="fileName" class="overflow-x-auto whitespace-nowrap text-sm text-secondary">
|
||||
{{ fileName }}
|
||||
</div>
|
||||
<div>
|
||||
<p class="mt-0 leading-tight">
|
||||
{{ formatMessage(messages.body) }}
|
||||
</p>
|
||||
<p class="text-orange font-semibold mb-0 leading-tight">
|
||||
{{ formatMessage(messages.malwareStatement) }}
|
||||
</p>
|
||||
</div>
|
||||
<Checkbox v-model="dontShowAgain" :label="formatMessage(messages.dontShowAgain)" />
|
||||
<div class="flex gap-2 justify-end">
|
||||
<ButtonStyled type="outlined">
|
||||
<button @click="cancel">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="orange">
|
||||
<button :disabled="isProceeding" @click="proceed">
|
||||
<SpinnerIcon v-if="isProceeding" class="animate-spin" />
|
||||
<CircleArrowRightIcon v-else />
|
||||
{{ formatMessage(messages.installAnyway) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</div>
|
||||
</NewModal>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { UnknownFileWarningModal } from '@modrinth/ui'
|
||||
import { CircleArrowRightIcon, SpinnerIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Admonition,
|
||||
ButtonStyled,
|
||||
Checkbox,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
NewModal,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { ref, useTemplateRef } from 'vue'
|
||||
|
||||
import { get as getSettings, set as setSettings } from '@/helpers/settings'
|
||||
import { useTheming } from '@/store/state'
|
||||
import type { FeatureFlag } from '@/store/theme.ts'
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
const themeStore = useTheming()
|
||||
const skipUnknownPackWarningFeatureFlag = 'skip_unknown_pack_warning' as FeatureFlag
|
||||
|
||||
const dontShowAgain = ref(false)
|
||||
const modal = useTemplateRef('modal')
|
||||
const onProceed = ref<() => Promise<void>>()
|
||||
const isProceeding = ref(false)
|
||||
const fileName = ref('')
|
||||
const externalFilesInModpack = ref<string[]>([])
|
||||
|
||||
function show(
|
||||
createInstance: () => Promise<void>,
|
||||
selectedFileName = '',
|
||||
selectedExternalFiles: string[] = [],
|
||||
) {
|
||||
const messages = defineMessages({
|
||||
header: {
|
||||
id: 'unknown-pack-warning-modal.header',
|
||||
defaultMessage: 'Confirm installation',
|
||||
},
|
||||
warningTitle: {
|
||||
id: 'unknown-pack-warning-modal.warning.title',
|
||||
defaultMessage: 'Unknown file warning',
|
||||
},
|
||||
warningBody: {
|
||||
id: 'unknown-pack-warning-modal.warning.body',
|
||||
defaultMessage: `We couldn't find this file on Modrinth. We strongly recommend only installing files from sources you trust.`,
|
||||
},
|
||||
body: {
|
||||
id: 'unknown-pack-warning-modal.body',
|
||||
defaultMessage: `A file is only reviewed if it’s uploaded to Modrinth, regardless of its file format (including .mrpack).`,
|
||||
},
|
||||
malwareStatement: {
|
||||
id: 'unknown-pack-warning-modal.malware-statement',
|
||||
defaultMessage: `Malware is often distributed through modpack files by sharing them on platforms like Discord.`,
|
||||
},
|
||||
dontShowAgain: {
|
||||
id: 'unknown-pack-warning-modal.dont-show-again',
|
||||
defaultMessage: `Don't show this warning again`,
|
||||
},
|
||||
installAnyway: {
|
||||
id: 'unknown-pack-warning-modal.install-anyway',
|
||||
defaultMessage: `Install anyway`,
|
||||
},
|
||||
})
|
||||
|
||||
function show(createInstance: () => Promise<void>, selectedFileName = '') {
|
||||
onProceed.value = createInstance
|
||||
fileName.value = selectedFileName
|
||||
externalFilesInModpack.value = selectedExternalFiles
|
||||
dontShowAgain.value = false
|
||||
|
||||
if (themeStore.getFeatureFlag(skipUnknownPackWarningFeatureFlag)) {
|
||||
void createInstance()
|
||||
// noinspection ES6MissingAwait
|
||||
createInstance()
|
||||
return
|
||||
}
|
||||
|
||||
@@ -45,11 +112,18 @@ function show(
|
||||
function reset() {
|
||||
onProceed.value = undefined
|
||||
fileName.value = ''
|
||||
externalFilesInModpack.value = []
|
||||
}
|
||||
|
||||
async function proceed(dontShowAgain: boolean) {
|
||||
if (dontShowAgain) {
|
||||
function cancel() {
|
||||
modal.value?.hide()
|
||||
}
|
||||
|
||||
async function proceed() {
|
||||
if (!onProceed.value) {
|
||||
return
|
||||
}
|
||||
|
||||
if (dontShowAgain.value) {
|
||||
themeStore.featureFlags[skipUnknownPackWarningFeatureFlag] = true
|
||||
const settings = await getSettings()
|
||||
settings.feature_flags[skipUnknownPackWarningFeatureFlag] = true
|
||||
@@ -57,8 +131,9 @@ async function proceed(dontShowAgain: boolean) {
|
||||
}
|
||||
|
||||
const createInstance = onProceed.value
|
||||
reset()
|
||||
if (createInstance) void createInstance()
|
||||
modal.value?.hide()
|
||||
// noinspection ES6MissingAwait
|
||||
createInstance()
|
||||
}
|
||||
|
||||
defineExpose({ show })
|
||||
|
||||
@@ -1,294 +0,0 @@
|
||||
<template>
|
||||
<PageHeader :title="instance.name">
|
||||
<template #leading>
|
||||
<Avatar :src="iconSrc" :alt="instance.name" size="64px" :tint-by="instance.id" />
|
||||
</template>
|
||||
|
||||
<template #metadata>
|
||||
<InstanceHeaderServerMetadata
|
||||
v-if="isServerInstance"
|
||||
:loading-server-ping="loadingServerPing"
|
||||
:players-online="playersOnline"
|
||||
:status-online="statusOnline"
|
||||
:recent-plays="recentPlays"
|
||||
:ping="ping"
|
||||
:minecraft-server="minecraftServer"
|
||||
:linked-project-v3="linkedProjectV3"
|
||||
:instance-id="instance.id"
|
||||
/>
|
||||
<PageHeaderMetadata v-else>
|
||||
<PageHeaderMetadataItem :icon="Gamepad2Icon" tooltip="Minecraft version">
|
||||
Minecraft {{ instance.game_version }}
|
||||
</PageHeaderMetadataItem>
|
||||
<PageHeaderMetadataItem
|
||||
:icon="ServerLoaderIcon"
|
||||
:icon-props="{ loader: loaderDisplayName }"
|
||||
tooltip="Mod loader"
|
||||
>
|
||||
{{ loaderLabel }}
|
||||
</PageHeaderMetadataItem>
|
||||
<PageHeaderMetadataItem
|
||||
v-if="showInstancePlayTime"
|
||||
:icon="TimerIcon"
|
||||
tooltip="Total playtime"
|
||||
>
|
||||
{{ playtimeLabel }}
|
||||
</PageHeaderMetadataItem>
|
||||
</PageHeaderMetadata>
|
||||
</template>
|
||||
|
||||
<template #actions>
|
||||
<PageHeaderActions>
|
||||
<ButtonStyled v-if="isInstalling" color="brand" size="large">
|
||||
<button type="button" disabled>
|
||||
{{ formatMessage(commonMessages.installingLabel) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else-if="instance.install_stage !== 'installed'" color="brand" size="large">
|
||||
<button type="button" @click="emit('repair')">
|
||||
<DownloadIcon />
|
||||
{{ formatMessage(messages.repair) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else-if="playing" color="red" size="large">
|
||||
<button type="button" :disabled="stopping" @click="emit('stop')">
|
||||
<StopCircleIcon />
|
||||
{{
|
||||
stopping ? formatMessage(messages.stopping) : formatMessage(commonMessages.stopButton)
|
||||
}}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<JoinedButtons
|
||||
v-else-if="!loading && isServerInstance"
|
||||
:actions="serverPlayActions"
|
||||
color="brand"
|
||||
size="large"
|
||||
/>
|
||||
<ButtonStyled v-else-if="!loading" color="brand" size="large">
|
||||
<button type="button" @click="emit('play')">
|
||||
<PlayIcon />
|
||||
{{ formatMessage(commonMessages.playButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else color="brand" size="large">
|
||||
<button type="button" disabled>{{ formatMessage(messages.starting) }}</button>
|
||||
</ButtonStyled>
|
||||
|
||||
<ButtonStyled circular size="large">
|
||||
<button
|
||||
v-tooltip="formatMessage(messages.instanceSettings)"
|
||||
type="button"
|
||||
:aria-label="formatMessage(messages.instanceSettings)"
|
||||
@click="emit('settings')"
|
||||
>
|
||||
<SettingsIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular size="large" type="transparent">
|
||||
<TeleportOverflowMenu
|
||||
:options="moreActions"
|
||||
:tooltip="formatMessage(messages.moreActions)"
|
||||
:aria-label="formatMessage(messages.moreActions)"
|
||||
>
|
||||
<MoreVerticalIcon />
|
||||
</TeleportOverflowMenu>
|
||||
</ButtonStyled>
|
||||
</PageHeaderActions>
|
||||
</template>
|
||||
</PageHeader>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import {
|
||||
DownloadIcon,
|
||||
ExternalIcon,
|
||||
FolderOpenIcon,
|
||||
MoreVerticalIcon,
|
||||
PackageIcon,
|
||||
PlayIcon,
|
||||
SettingsIcon,
|
||||
StopCircleIcon,
|
||||
TagCategoryGamepad2Icon as Gamepad2Icon,
|
||||
TimerIcon,
|
||||
} from '@modrinth/assets'
|
||||
import {
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
formatLoaderLabel,
|
||||
type JoinedButtonAction,
|
||||
JoinedButtons,
|
||||
LoaderIcon as ServerLoaderIcon,
|
||||
PageHeader,
|
||||
PageHeaderActions,
|
||||
PageHeaderMetadata,
|
||||
PageHeaderMetadataItem,
|
||||
type ServerLoader,
|
||||
TeleportOverflowMenu,
|
||||
type TeleportOverflowMenuItem,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { computed } from 'vue'
|
||||
|
||||
import type { GameInstance } from '@/helpers/types'
|
||||
|
||||
import InstanceHeaderServerMetadata from './instance-page-header-server-metadata.vue'
|
||||
|
||||
const messages = defineMessages({
|
||||
createShortcut: {
|
||||
id: 'instance.action.create-shortcut',
|
||||
defaultMessage: 'Create shortcut',
|
||||
},
|
||||
exportModpack: {
|
||||
id: 'instance.action.export-modpack',
|
||||
defaultMessage: 'Export modpack',
|
||||
},
|
||||
instanceSettings: {
|
||||
id: 'instance.action.settings',
|
||||
defaultMessage: 'Instance settings',
|
||||
},
|
||||
launchInstance: {
|
||||
id: 'instance.action.launch-instance',
|
||||
defaultMessage: 'Launch instance',
|
||||
},
|
||||
moreActions: {
|
||||
id: 'instance.action.more-actions',
|
||||
defaultMessage: 'More actions',
|
||||
},
|
||||
neverPlayed: {
|
||||
id: 'instance.playtime.never-played',
|
||||
defaultMessage: 'Never played',
|
||||
},
|
||||
openFolder: {
|
||||
id: 'instance.action.open-folder',
|
||||
defaultMessage: 'Open folder',
|
||||
},
|
||||
repair: {
|
||||
id: 'instance.action.repair',
|
||||
defaultMessage: 'Repair',
|
||||
},
|
||||
starting: {
|
||||
id: 'instance.action.starting',
|
||||
defaultMessage: 'Starting...',
|
||||
},
|
||||
stopping: {
|
||||
id: 'instance.action.stopping',
|
||||
defaultMessage: 'Stopping...',
|
||||
},
|
||||
})
|
||||
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
instance: GameInstance
|
||||
iconSrc?: string | null
|
||||
isServerInstance?: boolean
|
||||
showInstancePlayTime?: boolean
|
||||
timePlayed?: number
|
||||
playing?: boolean
|
||||
loading?: boolean
|
||||
stopping?: boolean
|
||||
loadingServerPing?: boolean
|
||||
playersOnline?: number
|
||||
statusOnline?: boolean
|
||||
recentPlays?: number
|
||||
ping?: number
|
||||
minecraftServer?: Labrinth.Projects.v3.Project['minecraft_server']
|
||||
linkedProjectV3?: Labrinth.Projects.v3.Project
|
||||
}>(),
|
||||
{
|
||||
iconSrc: null,
|
||||
isServerInstance: false,
|
||||
showInstancePlayTime: false,
|
||||
timePlayed: 0,
|
||||
playing: false,
|
||||
loading: false,
|
||||
stopping: false,
|
||||
loadingServerPing: false,
|
||||
playersOnline: undefined,
|
||||
statusOnline: false,
|
||||
recentPlays: undefined,
|
||||
ping: undefined,
|
||||
minecraftServer: undefined,
|
||||
linkedProjectV3: undefined,
|
||||
},
|
||||
)
|
||||
|
||||
const emit = defineEmits<{
|
||||
repair: []
|
||||
stop: []
|
||||
play: []
|
||||
playServer: []
|
||||
settings: []
|
||||
openFolder: []
|
||||
export: []
|
||||
createShortcut: []
|
||||
}>()
|
||||
|
||||
const installingStages = [
|
||||
'installing',
|
||||
'pack_installing',
|
||||
'pack_installed',
|
||||
'not_installed',
|
||||
'minecraft_installing',
|
||||
]
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const isInstalling = computed(() => installingStages.includes(props.instance.install_stage))
|
||||
const loaderDisplayName = computed(() => formatLoaderLabel(props.instance.loader) as ServerLoader)
|
||||
const loaderLabel = computed(() =>
|
||||
[loaderDisplayName.value, props.instance.loader_version].filter(Boolean).join(' '),
|
||||
)
|
||||
const playtimeLabel = computed(() => {
|
||||
if (props.timePlayed <= 0) return formatMessage(messages.neverPlayed)
|
||||
|
||||
const hours = Math.floor(props.timePlayed / 3600)
|
||||
if (hours >= 1) {
|
||||
return `${hours} hour${hours > 1 ? 's' : ''}`
|
||||
}
|
||||
|
||||
const minutes = Math.floor(props.timePlayed / 60)
|
||||
if (minutes >= 1) {
|
||||
return `${minutes} minute${minutes > 1 ? 's' : ''}`
|
||||
}
|
||||
|
||||
const seconds = Math.floor(props.timePlayed)
|
||||
return `${seconds} second${seconds > 1 ? 's' : ''}`
|
||||
})
|
||||
const serverPlayActions = computed<JoinedButtonAction[]>(() => [
|
||||
{
|
||||
id: 'join_server',
|
||||
label: formatMessage(commonMessages.playButton),
|
||||
icon: PlayIcon,
|
||||
action: () => emit('playServer'),
|
||||
},
|
||||
{
|
||||
id: 'launch_instance',
|
||||
label: formatMessage(messages.launchInstance),
|
||||
icon: PlayIcon,
|
||||
action: () => emit('play'),
|
||||
},
|
||||
])
|
||||
const moreActions = computed<TeleportOverflowMenuItem[]>(() => [
|
||||
{
|
||||
id: 'open-folder',
|
||||
label: formatMessage(messages.openFolder),
|
||||
icon: FolderOpenIcon,
|
||||
action: () => emit('openFolder'),
|
||||
},
|
||||
{
|
||||
id: 'export-mrpack',
|
||||
label: formatMessage(messages.exportModpack),
|
||||
icon: PackageIcon,
|
||||
action: () => emit('export'),
|
||||
},
|
||||
{
|
||||
id: 'create-shortcut',
|
||||
label: formatMessage(messages.createShortcut),
|
||||
icon: ExternalIcon,
|
||||
action: () => emit('createShortcut'),
|
||||
},
|
||||
])
|
||||
</script>
|
||||
-63
@@ -1,63 +0,0 @@
|
||||
<template>
|
||||
<div class="flex items-center flex-wrap gap-2">
|
||||
<template v-if="loadingServerPing">
|
||||
<ServerOnlinePlayers
|
||||
v-if="playersOnline !== undefined"
|
||||
:online="playersOnline"
|
||||
:status-online="statusOnline"
|
||||
hide-label
|
||||
/>
|
||||
<ServerRecentPlays :recent-plays="recentPlays ?? 0" hide-label />
|
||||
<div
|
||||
v-if="
|
||||
(playersOnline !== undefined || recentPlays !== undefined) &&
|
||||
(minecraftServer?.region || ping)
|
||||
"
|
||||
class="w-1.5 h-1.5 rounded-full bg-surface-5"
|
||||
></div>
|
||||
<ServerPing v-if="ping" :ping="ping" />
|
||||
</template>
|
||||
|
||||
<ServerRegion v-if="minecraftServer?.region" :region="minecraftServer?.region" />
|
||||
|
||||
<div v-if="minecraftServer?.region || ping" class="w-1.5 h-1.5 rounded-full bg-surface-5"></div>
|
||||
|
||||
<div v-if="linkedProjectV3" class="flex gap-1.5 items-center font-medium text-primary">
|
||||
Linked to
|
||||
<Avatar
|
||||
:src="linkedProjectV3.icon_url"
|
||||
:alt="linkedProjectV3.name"
|
||||
:tint-by="instanceId"
|
||||
size="24px"
|
||||
/>
|
||||
<router-link
|
||||
:to="`/project/${linkedProjectV3.slug ?? linkedProjectV3.id}`"
|
||||
class="hover:underline text-primary truncate"
|
||||
>
|
||||
{{ linkedProjectV3.name }}
|
||||
</router-link>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import {
|
||||
Avatar,
|
||||
ServerOnlinePlayers,
|
||||
ServerPing,
|
||||
ServerRecentPlays,
|
||||
ServerRegion,
|
||||
} from '@modrinth/ui'
|
||||
|
||||
defineProps<{
|
||||
loadingServerPing?: boolean
|
||||
playersOnline?: number
|
||||
statusOnline?: boolean
|
||||
recentPlays?: number
|
||||
ping?: number
|
||||
minecraftServer?: Labrinth.Projects.v3.Project['minecraft_server']
|
||||
linkedProjectV3?: Labrinth.Projects.v3.Project
|
||||
instanceId?: string
|
||||
}>()
|
||||
</script>
|
||||
@@ -269,31 +269,16 @@ provideInstallationSettings({
|
||||
debug('resolveLoaderVersions: no manifest', { loader, gameVersion })
|
||||
return []
|
||||
}
|
||||
const entry = manifest.gameVersions?.find((item) => item.id === gameVersion)
|
||||
if (entry?.versionGroup) {
|
||||
const result =
|
||||
manifest.versionGroups?.find((group) => group.id === entry.versionGroup)?.loaders ?? []
|
||||
debug('resolveLoaderVersions: version group result', {
|
||||
loader,
|
||||
gameVersion,
|
||||
versionGroup: entry.versionGroup,
|
||||
count: result.length,
|
||||
})
|
||||
return result
|
||||
}
|
||||
const placeholder = manifest.gameVersions?.find((item) => item.id === '${modrinth.gameVersion}')
|
||||
if (placeholder) {
|
||||
const result = manifest.gameVersions?.some((item) => item.id === gameVersion)
|
||||
? placeholder.loaders
|
||||
: []
|
||||
debug('resolveLoaderVersions: placeholder result', {
|
||||
if (loader === 'fabric' || loader === 'quilt') {
|
||||
const result = manifest.gameVersions[0]?.loaders ?? []
|
||||
debug('resolveLoaderVersions: fabric/quilt result', {
|
||||
loader,
|
||||
gameVersion,
|
||||
count: result.length,
|
||||
})
|
||||
return result
|
||||
}
|
||||
const result = entry?.loaders ?? []
|
||||
const result = manifest.gameVersions?.find((item) => item.id === gameVersion)?.loaders ?? []
|
||||
debug('resolveLoaderVersions: result', { loader, gameVersion, count: result.length })
|
||||
return result
|
||||
},
|
||||
|
||||
@@ -1,22 +1,15 @@
|
||||
<template>
|
||||
<NewModal
|
||||
ref="modal"
|
||||
:header="formatMessage(messages.installToPlay)"
|
||||
:closable="true"
|
||||
:on-hide="show_ads_window"
|
||||
max-width="640px"
|
||||
width="640px"
|
||||
>
|
||||
<div v-if="requiredContentProject" class="flex w-full flex-col gap-6">
|
||||
<p class="m-0 text-primary">
|
||||
{{ formatMessage(messages.inviteWarning) }}
|
||||
</p>
|
||||
<NewModal ref="modal" :header="formatMessage(messages.installToPlay)" :closable="true">
|
||||
<div v-if="requiredContentProject" class="flex flex-col gap-6 max-w-[500px]">
|
||||
<Admonition type="info" :header="formatMessage(messages.contentRequired)">
|
||||
{{ formatMessage(messages.serverRequiresMods) }}
|
||||
</Admonition>
|
||||
|
||||
<div class="flex flex-col gap-2.5">
|
||||
<div class="flex items-center justify-between">
|
||||
<span class="font-semibold text-contrast">
|
||||
{{ formatMessage(messages.sharedInstance) }}
|
||||
</span>
|
||||
<div class="flex flex-col gap-1">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="font-semibold text-contrast">{{
|
||||
formatMessage(messages.requiredModpack)
|
||||
}}</span>
|
||||
|
||||
<ButtonStyled type="transparent">
|
||||
<button @click="openViewContents">
|
||||
@@ -26,16 +19,14 @@
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-3 rounded-2xl bg-surface-2 p-3">
|
||||
<div class="flex items-center gap-3 rounded-xl bg-surface-2 p-3">
|
||||
<Avatar
|
||||
:src="requiredContentProject.icon_url"
|
||||
:alt="requiredContentProject.title"
|
||||
size="56px"
|
||||
no-shadow
|
||||
class="!rounded-2xl"
|
||||
size="48px"
|
||||
/>
|
||||
<div class="flex min-w-0 flex-col gap-0.5">
|
||||
<span class="truncate font-semibold text-contrast">
|
||||
<div class="flex flex-col gap-0.5">
|
||||
<span class="font-semibold text-contrast">
|
||||
<template v-if="usingCustomModpack && modpackVersion">
|
||||
{{ modpackVersion.name }}
|
||||
</template>
|
||||
@@ -43,7 +34,7 @@
|
||||
{{ requiredContentProject.title }}
|
||||
</template>
|
||||
</span>
|
||||
<span class="truncate text-sm font-medium text-secondary">
|
||||
<span class="text-sm text-secondary">
|
||||
{{ loaderDisplay }} {{ requiredContentProject.game_versions?.[0] }}
|
||||
<template v-if="modCount">
|
||||
· {{ formatMessage(messages.modCount, { count: modCount }) }}
|
||||
@@ -52,105 +43,24 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<Admonition
|
||||
v-if="hasExternalFiles"
|
||||
type="warning"
|
||||
:header="formatMessage(messages.unknownFilesWarning)"
|
||||
>
|
||||
{{ formatMessage(messages.unknownFilesDescription) }}
|
||||
</Admonition>
|
||||
|
||||
<div v-if="hasExternalFiles" class="relative w-full">
|
||||
<div
|
||||
ref="externalFileTable"
|
||||
class="max-h-[242px] overflow-y-auto rounded-2xl"
|
||||
@scroll="checkTableScrollState"
|
||||
>
|
||||
<Table
|
||||
:columns="externalFileColumns"
|
||||
:data="externalFileRows"
|
||||
row-key="id"
|
||||
virtualized
|
||||
:virtual-row-height="48"
|
||||
class="shadow-sm"
|
||||
>
|
||||
<template #cell-name="{ value }">
|
||||
<span class="block truncate" :title="String(value)">{{ value }}</span>
|
||||
</template>
|
||||
</Table>
|
||||
</div>
|
||||
<Transition
|
||||
enter-active-class="transition-all duration-200 ease-out"
|
||||
enter-from-class="opacity-0 max-h-0"
|
||||
enter-to-class="opacity-100 max-h-2"
|
||||
leave-active-class="transition-all duration-200 ease-in"
|
||||
leave-from-class="opacity-100 max-h-2"
|
||||
leave-to-class="opacity-0 max-h-0"
|
||||
>
|
||||
<div
|
||||
v-if="showTableTopFade"
|
||||
class="pointer-events-none absolute left-0 right-0 top-0 z-10 h-2 bg-gradient-to-b from-bg-raised to-transparent"
|
||||
/>
|
||||
</Transition>
|
||||
<Transition
|
||||
enter-active-class="transition-all duration-200 ease-out"
|
||||
enter-from-class="opacity-0 max-h-0"
|
||||
enter-to-class="opacity-100 max-h-2"
|
||||
leave-active-class="transition-all duration-200 ease-in"
|
||||
leave-from-class="opacity-100 max-h-2"
|
||||
leave-to-class="opacity-0 max-h-0"
|
||||
>
|
||||
<div
|
||||
v-if="showTableBottomFade"
|
||||
class="pointer-events-none absolute bottom-0 left-0 right-0 z-10 h-2 bg-gradient-to-t from-bg-raised to-transparent"
|
||||
/>
|
||||
</Transition>
|
||||
</div>
|
||||
|
||||
<p v-if="hasExternalFiles" class="m-0 text-primary">
|
||||
{{ formatMessage(messages.reviewedFiles) }}
|
||||
</p>
|
||||
|
||||
<div class="flex w-full items-center justify-between gap-2">
|
||||
<ButtonStyled type="transparent" color="red">
|
||||
<button @click="handleReport">
|
||||
<ReportIcon />
|
||||
{{ formatMessage(commonMessages.reportButton) }}
|
||||
<template #actions>
|
||||
<div class="flex justify-end gap-2">
|
||||
<ButtonStyled>
|
||||
<button @click="handleDecline">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button @click="handleAccept">
|
||||
<DownloadIcon />
|
||||
{{ formatMessage(messages.installButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
|
||||
<div class="flex items-center gap-2">
|
||||
<template v-if="hasExternalFiles">
|
||||
<ButtonStyled type="transparent" color="orange">
|
||||
<button @click="handleAccept">
|
||||
{{ formatMessage(messages.installAnyway) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button @click="handleDecline">
|
||||
<BanIcon />
|
||||
{{ formatMessage(messages.dontInstall) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</template>
|
||||
<template v-else>
|
||||
<ButtonStyled>
|
||||
<button @click="handleDecline">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button @click="handleAccept">
|
||||
<DownloadIcon />
|
||||
{{ formatMessage(messages.installButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
|
||||
<ModpackContentModal
|
||||
@@ -162,56 +72,33 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { BanIcon, DownloadIcon, EyeIcon, ReportIcon, XIcon } from '@modrinth/assets'
|
||||
import { DownloadIcon, EyeIcon, XIcon } from '@modrinth/assets'
|
||||
import type { ContentItem } from '@modrinth/ui'
|
||||
import {
|
||||
Admonition,
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
commonMessages,
|
||||
type ContentItem,
|
||||
defineMessages,
|
||||
formatLoader,
|
||||
ModpackContentModal,
|
||||
NewModal,
|
||||
Table,
|
||||
type TableColumn,
|
||||
useScrollIndicator,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { openUrl } from '@tauri-apps/plugin-opener'
|
||||
import { computed, nextTick, ref } from 'vue'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
import { hide_ads_window, show_ads_window } from '@/helpers/ads'
|
||||
import { get_project, get_project_many, get_version, get_version_many } from '@/helpers/cache.js'
|
||||
import { injectServerInstall } from '@/providers/server-install'
|
||||
|
||||
type ExternalFileColumn = 'name'
|
||||
type ExternalFileRow = {
|
||||
id: string
|
||||
name: string
|
||||
}
|
||||
|
||||
const modal = ref<InstanceType<typeof NewModal>>()
|
||||
const modpackVersionId = ref<string | null>(null)
|
||||
const modpackVersion = ref<Labrinth.Versions.v2.Version | null>(null)
|
||||
const project = ref<Labrinth.Projects.v3.Project | null>(null)
|
||||
const requiredContentProject = ref<Labrinth.Projects.v2.Project | null>(null)
|
||||
const externalFiles = ref<string[]>([])
|
||||
const externalFileTable = ref<HTMLElement | null>(null)
|
||||
const onInstallComplete = ref<() => void>(() => {})
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const props = defineProps<{
|
||||
showExternalWarnings?: boolean
|
||||
}>()
|
||||
|
||||
const { installServerProject, startInstallingServer, stopInstallingServer } = injectServerInstall()
|
||||
const {
|
||||
showTopFade: showTableTopFade,
|
||||
showBottomFade: showTableBottomFade,
|
||||
checkScrollState: checkTableScrollState,
|
||||
forceCheck: forceCheckTableScroll,
|
||||
} = useScrollIndicator(externalFileTable)
|
||||
|
||||
const usingCustomModpack = computed(() => {
|
||||
return requiredContentProject.value?.id === project.value?.id
|
||||
@@ -224,36 +111,13 @@ const loaderDisplay = computed(() => {
|
||||
})
|
||||
|
||||
const modCount = computed(() => modpackVersion.value?.dependencies?.length)
|
||||
const hasExternalFiles = computed(
|
||||
() => Boolean(props.showExternalWarnings) && externalFiles.value.length > 0,
|
||||
)
|
||||
const externalFileRows = computed<ExternalFileRow[]>(() =>
|
||||
externalFiles.value.map((name, index) => ({
|
||||
id: `${index}-${name}`,
|
||||
name,
|
||||
})),
|
||||
)
|
||||
|
||||
async function fetchData(versionId: string) {
|
||||
// cache is making version null for some reason so bypassing for now
|
||||
const version = await get_version(versionId, 'bypass')
|
||||
modpackVersion.value = version
|
||||
modpackVersion.value = await get_version(versionId, 'bypass')
|
||||
|
||||
if (version?.project_id) {
|
||||
requiredContentProject.value = await get_project(version.project_id, 'bypass')
|
||||
externalFiles.value = [
|
||||
...new Set(
|
||||
(version.dependencies ?? [])
|
||||
.filter(
|
||||
(dependency) =>
|
||||
dependency.dependency_type === 'embedded' &&
|
||||
!dependency.project_id &&
|
||||
!dependency.version_id &&
|
||||
dependency.file_name,
|
||||
)
|
||||
.flatMap((dependency) => (dependency.file_name ? [dependency.file_name] : [])),
|
||||
),
|
||||
].sort((left, right) => left.localeCompare(right))
|
||||
if (modpackVersion.value?.project_id) {
|
||||
requiredContentProject.value = await get_project(modpackVersion.value.project_id, 'bypass')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -275,12 +139,6 @@ function handleDecline() {
|
||||
hide()
|
||||
}
|
||||
|
||||
function handleReport() {
|
||||
if (project.value?.id) {
|
||||
openUrl(`https://modrinth.com/report?item=project&itemID=${project.value.id}`)
|
||||
}
|
||||
}
|
||||
|
||||
const modpackContentModal = ref<InstanceType<typeof ModpackContentModal>>()
|
||||
|
||||
async function openViewContents() {
|
||||
@@ -359,19 +217,17 @@ async function show(
|
||||
modpackVersionId.value = modpackVersionIdVal
|
||||
modpackVersion.value = null
|
||||
requiredContentProject.value = null
|
||||
externalFiles.value = []
|
||||
onInstallComplete.value = callback
|
||||
|
||||
if (modpackVersionIdVal) await fetchData(modpackVersionIdVal)
|
||||
|
||||
hide_ads_window()
|
||||
modal.value?.show(e)
|
||||
await nextTick()
|
||||
forceCheckTableScroll()
|
||||
}
|
||||
|
||||
function hide() {
|
||||
modal.value?.hide()
|
||||
show_ads_window()
|
||||
}
|
||||
|
||||
const messages = defineMessages({
|
||||
@@ -379,10 +235,22 @@ const messages = defineMessages({
|
||||
id: 'app.modal.install-to-play.header',
|
||||
defaultMessage: 'Install to play',
|
||||
},
|
||||
inviteWarning: {
|
||||
id: 'app.modal.install-to-play.invite-warning',
|
||||
sharedServerInstance: {
|
||||
id: 'app.modal.install-to-play.shared-server-instance',
|
||||
defaultMessage: 'Shared server instance',
|
||||
},
|
||||
contentRequired: {
|
||||
id: 'app.modal.install-to-play.content-required',
|
||||
defaultMessage: 'Content required',
|
||||
},
|
||||
serverRequiresMods: {
|
||||
id: 'app.modal.install-to-play.server-requires-mods',
|
||||
defaultMessage:
|
||||
'This invite was created by another Modrinth user, not Modrinth. Only accept invites from people you trust.',
|
||||
'This server requires mods to play. Click Install to set up the required files from Modrinth, then launch directly into the server.',
|
||||
},
|
||||
requiredModpack: {
|
||||
id: 'app.modal.install-to-play.required-modpack',
|
||||
defaultMessage: 'Required modpack',
|
||||
},
|
||||
sharedInstance: {
|
||||
id: 'app.modal.install-to-play.shared-instance',
|
||||
@@ -400,41 +268,7 @@ const messages = defineMessages({
|
||||
id: 'app.modal.install-to-play.view-contents',
|
||||
defaultMessage: 'View contents',
|
||||
},
|
||||
unknownFilesWarning: {
|
||||
id: 'app.modal.install-to-play.unknown-files-warning',
|
||||
defaultMessage: 'Unknown files warning',
|
||||
},
|
||||
unknownFilesDescription: {
|
||||
id: 'app.modal.install-to-play.unknown-files-description',
|
||||
defaultMessage:
|
||||
'This server modpack contains files that aren’t published on Modrinth. We strongly recommend only installing files from sources you trust.',
|
||||
},
|
||||
unrecognizedFiles: {
|
||||
id: 'app.modal.install-to-play.unrecognized-files',
|
||||
defaultMessage: 'Unrecognized files',
|
||||
},
|
||||
reviewedFiles: {
|
||||
id: 'app.modal.install-to-play.reviewed-files',
|
||||
defaultMessage:
|
||||
'A file is only reviewed if it’s published to Modrinth, regardless of its file format (including .mrpack).',
|
||||
},
|
||||
installAnyway: {
|
||||
id: 'app.modal.install-to-play.install-anyway',
|
||||
defaultMessage: 'Install anyway',
|
||||
},
|
||||
dontInstall: {
|
||||
id: 'app.modal.install-to-play.dont-install',
|
||||
defaultMessage: 'Dont install',
|
||||
},
|
||||
})
|
||||
|
||||
const externalFileColumns = computed<TableColumn<ExternalFileColumn>[]>(() => [
|
||||
{
|
||||
key: 'name',
|
||||
label: formatMessage(messages.unrecognizedFiles),
|
||||
cellClass: '!h-12',
|
||||
},
|
||||
])
|
||||
|
||||
defineExpose({ show, hide })
|
||||
</script>
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
<ContentDiffModal
|
||||
ref="diffModal"
|
||||
:header="formatMessage(messages.updateToPlay)"
|
||||
:admonition-header="formatMessage(messages.updateRequired)"
|
||||
:description="
|
||||
instance ? formatMessage(messages.updateRequiredDescription, { name: instance.name }) : ''
|
||||
"
|
||||
:diffs="normalizedDiffs"
|
||||
:version-date="versionDate"
|
||||
:show-external-warnings="showExternalWarnings"
|
||||
:confirm-label="formatMessage(commonMessages.updateButton)"
|
||||
:confirm-icon="DownloadIcon"
|
||||
:removed-label="formatMessage(messages.removed)"
|
||||
:show-report-button="true"
|
||||
@confirm="handleUpdate"
|
||||
@cancel="handleDecline"
|
||||
@report="handleReport"
|
||||
/>
|
||||
</template>
|
||||
|
||||
@@ -26,8 +26,9 @@ import {
|
||||
defineMessages,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { openUrl } from '@tauri-apps/plugin-opener'
|
||||
import dayjs from 'dayjs'
|
||||
import { computed, ref } from 'vue'
|
||||
import { computed, ref, watch } from 'vue'
|
||||
|
||||
import { get_project_many, get_version, get_version_many } from '@/helpers/cache.js'
|
||||
import { wait_for_install_job } from '@/helpers/install'
|
||||
@@ -76,10 +77,6 @@ const { formatMessage } = useVIntl()
|
||||
const { startInstallingServer, stopInstallingServer } = injectServerInstall()
|
||||
type UpdateCompleteCallback = () => void | Promise<void>
|
||||
|
||||
defineProps<{
|
||||
showExternalWarnings?: boolean
|
||||
}>()
|
||||
|
||||
const diffModal = ref<InstanceType<typeof ContentDiffModal>>()
|
||||
const instance = ref<GameInstance | null>(null)
|
||||
const onUpdateComplete = ref<UpdateCompleteCallback>(() => {})
|
||||
@@ -90,7 +87,6 @@ const modpackVersion = ref<Version | null>(null)
|
||||
const normalizedDiffs = computed<ContentDiffItem[]>(() =>
|
||||
diffs.value.map((diff) => ({
|
||||
type: diff.type,
|
||||
external: Boolean(diff.fileName && !diff.project),
|
||||
projectName: diff.project?.title,
|
||||
fileName: diff.fileName,
|
||||
currentVersionName: diff.currentVersion?.version_number,
|
||||
@@ -98,12 +94,6 @@ const normalizedDiffs = computed<ContentDiffItem[]>(() =>
|
||||
})),
|
||||
)
|
||||
|
||||
const versionDate = computed(() =>
|
||||
modpackVersion.value?.date_published
|
||||
? dayjs(modpackVersion.value.date_published).format('MMMM D, YYYY')
|
||||
: undefined,
|
||||
)
|
||||
|
||||
async function computeDependencyDiffs(
|
||||
currentDeps: Dependency[],
|
||||
latestDeps: Dependency[],
|
||||
@@ -200,10 +190,6 @@ async function computeDependencyDiffs(
|
||||
}
|
||||
})
|
||||
.sort((a, b) => {
|
||||
const aExternal = Boolean(a.fileName && !a.project)
|
||||
const bExternal = Boolean(b.fileName && !b.project)
|
||||
if (aExternal !== bExternal) return aExternal ? -1 : 1
|
||||
|
||||
const typeOrder = { added: 0, updated: 1, removed: 2 }
|
||||
const typeCompare = typeOrder[a.type] - typeOrder[b.type]
|
||||
if (typeCompare !== 0) return typeCompare
|
||||
@@ -241,6 +227,16 @@ async function checkUpdateAvailable(inst: GameInstance): Promise<DependencyDiff[
|
||||
return null
|
||||
}
|
||||
|
||||
watch(
|
||||
() => instance.value,
|
||||
async (newInstance) => {
|
||||
if (!newInstance) return
|
||||
const result = await checkUpdateAvailable(newInstance)
|
||||
diffs.value = result || []
|
||||
},
|
||||
{ immediate: true, deep: true },
|
||||
)
|
||||
|
||||
async function handleUpdate() {
|
||||
hide()
|
||||
const serverProjectId = instance.value?.link?.project_id
|
||||
@@ -258,6 +254,12 @@ async function handleUpdate() {
|
||||
}
|
||||
}
|
||||
|
||||
function handleReport() {
|
||||
if (instance.value?.link?.project_id) {
|
||||
openUrl(`https://modrinth.com/report?item=project&itemID=${instance.value.link.project_id}`)
|
||||
}
|
||||
}
|
||||
|
||||
function handleDecline() {
|
||||
hide()
|
||||
}
|
||||
@@ -270,15 +272,8 @@ function show(
|
||||
) {
|
||||
instance.value = instanceVal
|
||||
modpackVersionId.value = modpackVersionIdVal
|
||||
modpackVersion.value = null
|
||||
diffs.value = []
|
||||
onUpdateComplete.value = callback
|
||||
diffModal.value?.show(e)
|
||||
void checkUpdateAvailable(instanceVal).then((result) => {
|
||||
if (instance.value?.id === instanceVal.id && modpackVersionId.value === modpackVersionIdVal) {
|
||||
diffs.value = result || []
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function hide() {
|
||||
@@ -290,15 +285,15 @@ const messages = defineMessages({
|
||||
id: 'app.modal.update-to-play.header',
|
||||
defaultMessage: 'Update to play',
|
||||
},
|
||||
updateRequired: {
|
||||
id: 'app.modal.update-to-play.update-required',
|
||||
defaultMessage: 'Update required',
|
||||
},
|
||||
updateRequiredDescription: {
|
||||
id: 'app.modal.update-to-play.update-required-description',
|
||||
defaultMessage:
|
||||
'An update is required to play {name}. Please update to the latest version to launch the game.',
|
||||
},
|
||||
removed: {
|
||||
id: 'app.modal.update-to-play.removed',
|
||||
defaultMessage: 'Removed',
|
||||
},
|
||||
})
|
||||
|
||||
const hasUpdate = computed(() => {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { CheckIcon, CopyIcon, UpdatedIcon } from '@modrinth/assets'
|
||||
import { UpdatedIcon } from '@modrinth/assets'
|
||||
import {
|
||||
defineMessages,
|
||||
type PopupNotificationButton,
|
||||
@@ -15,11 +15,9 @@ import {
|
||||
install_job_dismiss,
|
||||
install_job_list,
|
||||
install_job_retry,
|
||||
install_job_support_details,
|
||||
installJobInstanceId,
|
||||
type InstallJobSnapshot,
|
||||
type InstallJobStatus,
|
||||
type InstallPhaseId,
|
||||
type InstallProgress,
|
||||
} from '@/helpers/install'
|
||||
import { get_many as getInstances } from '@/helpers/instance'
|
||||
@@ -33,14 +31,6 @@ const messages = defineMessages({
|
||||
id: 'app.action-bar.install.retry',
|
||||
defaultMessage: 'Retry',
|
||||
},
|
||||
copyDetails: {
|
||||
id: 'app.action-bar.install.copy-details',
|
||||
defaultMessage: 'Copy details',
|
||||
},
|
||||
copied: {
|
||||
id: 'app.action-bar.install.copied-details',
|
||||
defaultMessage: 'Copied',
|
||||
},
|
||||
dismiss: {
|
||||
id: 'app.action-bar.install.dismiss',
|
||||
defaultMessage: 'Dismiss',
|
||||
@@ -49,6 +39,22 @@ const messages = defineMessages({
|
||||
id: 'app.action-bar.install.open-instance',
|
||||
defaultMessage: 'Open instance',
|
||||
},
|
||||
installFailed: {
|
||||
id: 'app.action-bar.install.failed',
|
||||
defaultMessage: 'Install failed',
|
||||
},
|
||||
installFailedAppClosed: {
|
||||
id: 'app.action-bar.install.failed-app-closed',
|
||||
defaultMessage: 'Installation failed due to app closing.',
|
||||
},
|
||||
installFailedNetwork: {
|
||||
id: 'app.action-bar.install.failed-network',
|
||||
defaultMessage: 'Installation failed due to a network error.',
|
||||
},
|
||||
installFailedUnknown: {
|
||||
id: 'app.action-bar.install.failed-unknown',
|
||||
defaultMessage: 'Installation failed due to an unknown error.',
|
||||
},
|
||||
unknownInstance: {
|
||||
id: 'app.action-bar.install.unknown-instance',
|
||||
defaultMessage: 'Unknown instance',
|
||||
@@ -58,7 +64,7 @@ const messages = defineMessages({
|
||||
const phaseMessages = defineMessages({
|
||||
preparing_instance: {
|
||||
id: 'app.install.phase.preparing_instance',
|
||||
defaultMessage: 'Queued to install',
|
||||
defaultMessage: 'Preparing instance',
|
||||
},
|
||||
resolving_pack: {
|
||||
id: 'app.install.phase.resolving_pack',
|
||||
@@ -133,97 +139,7 @@ const javaStepMessages = defineMessages({
|
||||
},
|
||||
})
|
||||
|
||||
const failureSummaryMessages = defineMessages({
|
||||
canceled: {
|
||||
id: 'app.action-bar.install.summary.canceled',
|
||||
defaultMessage: 'Canceled',
|
||||
},
|
||||
appClosed: {
|
||||
id: 'app.action-bar.install.summary.app-closing',
|
||||
defaultMessage: 'Canceled due to app closing',
|
||||
},
|
||||
downloadFailed: {
|
||||
id: 'app.action-bar.install.summary.download-failed',
|
||||
defaultMessage: "Download couldn't finish",
|
||||
},
|
||||
modrinthUnreachable: {
|
||||
id: 'app.action-bar.install.summary.modrinth-unreachable',
|
||||
defaultMessage: "Couldn't reach Modrinth",
|
||||
},
|
||||
packDownloadFailed: {
|
||||
id: 'app.action-bar.install.summary.pack-download-failed',
|
||||
defaultMessage: "Couldn't download pack",
|
||||
},
|
||||
badModpackFile: {
|
||||
id: 'app.action-bar.install.summary.bad-modpack-file',
|
||||
defaultMessage: "Couldn't read modpack",
|
||||
},
|
||||
invalidModpack: {
|
||||
id: 'app.action-bar.install.summary.invalid-modpack',
|
||||
defaultMessage: 'Modpack data invalid',
|
||||
},
|
||||
contentDownloadFailed: {
|
||||
id: 'app.action-bar.install.summary.content-download-failed',
|
||||
defaultMessage: "Couldn't download files",
|
||||
},
|
||||
corruptDownload: {
|
||||
id: 'app.action-bar.install.summary.corrupt-download',
|
||||
defaultMessage: 'Downloaded file is corrupt',
|
||||
},
|
||||
invalidModpackFiles: {
|
||||
id: 'app.action-bar.install.summary.invalid-modpack-files',
|
||||
defaultMessage: 'Modpack files have invalid metadata',
|
||||
},
|
||||
noWritePermission: {
|
||||
id: 'app.action-bar.install.summary.no-write-permission',
|
||||
defaultMessage: 'No permission to write',
|
||||
},
|
||||
couldNotSaveFiles: {
|
||||
id: 'app.action-bar.install.summary.could-not-save-files',
|
||||
defaultMessage: "Couldn't save files",
|
||||
},
|
||||
invalidFilePath: {
|
||||
id: 'app.action-bar.install.summary.invalid-file-path',
|
||||
defaultMessage: 'File path is invalid',
|
||||
},
|
||||
instanceNotFound: {
|
||||
id: 'app.action-bar.install.summary.instance-not-found',
|
||||
defaultMessage: "Instance couldn't be found",
|
||||
},
|
||||
cleanupIncomplete: {
|
||||
id: 'app.action-bar.install.summary.cleanup-incomplete',
|
||||
defaultMessage: "Cleanup didn't finish",
|
||||
},
|
||||
javaSetupFailed: {
|
||||
id: 'app.action-bar.install.summary.java-setup-failed',
|
||||
defaultMessage: "Java setup couldn't finish",
|
||||
},
|
||||
minecraftSetupFailed: {
|
||||
id: 'app.action-bar.install.summary.minecraft-setup-failed',
|
||||
defaultMessage: 'Minecraft setup failed',
|
||||
},
|
||||
loaderSetupFailed: {
|
||||
id: 'app.action-bar.install.summary.loader-setup-failed',
|
||||
defaultMessage: 'Loader setup failed',
|
||||
},
|
||||
localDataError: {
|
||||
id: 'app.action-bar.install.summary.local-data-error',
|
||||
defaultMessage: "Couldn't update local data",
|
||||
},
|
||||
unexpectedError: {
|
||||
id: 'app.action-bar.install.summary.unexpected-error',
|
||||
defaultMessage: 'Something went wrong',
|
||||
},
|
||||
})
|
||||
|
||||
const visibleJobStatuses = new Set<InstallJobStatus>(['queued', 'running', 'failed', 'interrupted'])
|
||||
const copyDetailsStallMs = 30_000
|
||||
|
||||
interface ProgressSnapshot {
|
||||
signature: string
|
||||
changedAt: number
|
||||
timeout: number | null
|
||||
}
|
||||
|
||||
function getDisplayIconUrl(icon: string | null | undefined): string | null {
|
||||
if (!icon) return null
|
||||
@@ -240,13 +156,10 @@ export async function useInstallJobNotifications(opts: {
|
||||
const jobs = ref<InstallJobSnapshot[]>([])
|
||||
const iconUrls = ref<Record<string, string | null>>({})
|
||||
const instanceNames = ref<Record<string, string>>({})
|
||||
const copiedJobIds = ref<Set<string>>(new Set())
|
||||
const jobOrder = new Map<string, number>()
|
||||
let refreshRequest = 0
|
||||
let metadataRequest = 0
|
||||
let nextJobOrder = 0
|
||||
const copiedResetTimeouts = new Map<string, number>()
|
||||
const progressSnapshots = new Map<string, ProgressSnapshot>()
|
||||
|
||||
function getTitle(job: InstallJobSnapshot): string {
|
||||
if (job.display?.title) return job.display.title
|
||||
@@ -261,7 +174,13 @@ export async function useInstallJobNotifications(opts: {
|
||||
|
||||
function getText(job: InstallJobSnapshot): string {
|
||||
if (job.status === 'failed' || job.status === 'interrupted') {
|
||||
return getFailureSummary(job)
|
||||
if (job.error?.code === 'interrupted') {
|
||||
return formatMessage(messages.installFailedAppClosed)
|
||||
}
|
||||
if (job.error?.code === 'network_error') {
|
||||
return formatMessage(messages.installFailedNetwork)
|
||||
}
|
||||
return formatMessage(messages.installFailedUnknown)
|
||||
}
|
||||
if (job.phase === 'preparing_java' && job.details.type === 'java') {
|
||||
return formatMessage(javaStepMessages[job.details.step], {
|
||||
@@ -271,104 +190,6 @@ export async function useInstallJobNotifications(opts: {
|
||||
return formatMessage(phaseMessages[job.phase])
|
||||
}
|
||||
|
||||
function getFailureSummary(job: InstallJobSnapshot): string {
|
||||
const code = job.error?.code
|
||||
const phase = job.error?.phase ?? job.phase
|
||||
|
||||
if (code === 'app_closed' || (job.status === 'interrupted' && code === 'interrupted')) {
|
||||
return formatMessage(failureSummaryMessages.appClosed)
|
||||
}
|
||||
if (code === 'canceled') {
|
||||
return formatMessage(failureSummaryMessages.canceled)
|
||||
}
|
||||
if (job.rollback_error || code === 'rollback_error') {
|
||||
return formatMessage(failureSummaryMessages.cleanupIncomplete)
|
||||
}
|
||||
if (hasPermissionError(job)) {
|
||||
return formatMessage(failureSummaryMessages.noWritePermission)
|
||||
}
|
||||
|
||||
switch (code) {
|
||||
case 'network_error':
|
||||
return formatMessage(
|
||||
phase === 'downloading_pack_file'
|
||||
? failureSummaryMessages.packDownloadFailed
|
||||
: failureSummaryMessages.downloadFailed,
|
||||
)
|
||||
case 'api_error':
|
||||
return formatMessage(failureSummaryMessages.modrinthUnreachable)
|
||||
case 'pack_error':
|
||||
return formatMessage(
|
||||
phase === 'downloading_pack_file'
|
||||
? failureSummaryMessages.packDownloadFailed
|
||||
: failureSummaryMessages.invalidModpack,
|
||||
)
|
||||
case 'archive_error':
|
||||
return formatMessage(failureSummaryMessages.badModpackFile)
|
||||
case 'parse_error':
|
||||
return formatMessage(failureSummaryMessages.invalidModpack)
|
||||
case 'content_error':
|
||||
return formatMessage(failureSummaryMessages.invalidModpackFiles)
|
||||
case 'hash_error':
|
||||
return formatMessage(failureSummaryMessages.corruptDownload)
|
||||
case 'filesystem_error':
|
||||
return formatMessage(failureSummaryMessages.couldNotSaveFiles)
|
||||
case 'path_error':
|
||||
return formatMessage(failureSummaryMessages.invalidFilePath)
|
||||
case 'instance_error':
|
||||
return formatMessage(failureSummaryMessages.instanceNotFound)
|
||||
case 'java_error':
|
||||
return formatMessage(failureSummaryMessages.javaSetupFailed)
|
||||
case 'loader_error':
|
||||
case 'processor_error':
|
||||
return formatMessage(failureSummaryMessages.loaderSetupFailed)
|
||||
case 'database_error':
|
||||
return formatMessage(failureSummaryMessages.localDataError)
|
||||
case 'launcher_error':
|
||||
case 'metadata_error':
|
||||
return getFailureSummaryForPhase(phase)
|
||||
default:
|
||||
return getFailureSummaryForPhase(phase)
|
||||
}
|
||||
}
|
||||
|
||||
function getFailureSummaryForPhase(phase: InstallPhaseId): string {
|
||||
switch (phase) {
|
||||
case 'downloading_pack_file':
|
||||
return formatMessage(failureSummaryMessages.packDownloadFailed)
|
||||
case 'resolving_pack':
|
||||
case 'reading_pack_manifest':
|
||||
return formatMessage(failureSummaryMessages.invalidModpack)
|
||||
case 'downloading_content':
|
||||
return formatMessage(failureSummaryMessages.contentDownloadFailed)
|
||||
case 'extracting_overrides':
|
||||
return formatMessage(failureSummaryMessages.couldNotSaveFiles)
|
||||
case 'resolving_minecraft':
|
||||
case 'downloading_minecraft':
|
||||
return formatMessage(failureSummaryMessages.minecraftSetupFailed)
|
||||
case 'resolving_loader':
|
||||
case 'running_loader_processors':
|
||||
return formatMessage(failureSummaryMessages.loaderSetupFailed)
|
||||
case 'preparing_java':
|
||||
return formatMessage(failureSummaryMessages.javaSetupFailed)
|
||||
case 'preparing_instance':
|
||||
return formatMessage(failureSummaryMessages.instanceNotFound)
|
||||
case 'rolling_back':
|
||||
return formatMessage(failureSummaryMessages.cleanupIncomplete)
|
||||
default:
|
||||
return formatMessage(failureSummaryMessages.unexpectedError)
|
||||
}
|
||||
}
|
||||
|
||||
function hasPermissionError(job: InstallJobSnapshot): boolean {
|
||||
const message = job.error?.message.toLowerCase() ?? ''
|
||||
return (
|
||||
message.includes('permission denied') ||
|
||||
message.includes('access is denied') ||
|
||||
message.includes('operation not permitted')
|
||||
)
|
||||
}
|
||||
|
||||
function getProgressType(job: InstallJobSnapshot): PopupNotificationProgressType | undefined {
|
||||
if (!getEffectiveProgress(job)) return undefined
|
||||
if (
|
||||
@@ -414,165 +235,11 @@ export async function useInstallJobNotifications(opts: {
|
||||
return job.status === 'failed' || job.status === 'interrupted'
|
||||
}
|
||||
|
||||
function canShowStalledProgressDetails(job: InstallJobSnapshot): boolean {
|
||||
return (
|
||||
job.status === 'running' &&
|
||||
job.phase !== 'preparing_instance' &&
|
||||
job.phase !== 'finalizing' &&
|
||||
job.phase !== 'rolling_back'
|
||||
)
|
||||
}
|
||||
function getTerminalButtons(job: InstallJobSnapshot): PopupNotificationButton[] | undefined {
|
||||
if (!isTerminalJob(job)) return undefined
|
||||
|
||||
function getJobSortRank(job: InstallJobSnapshot): number {
|
||||
if (isTerminalJob(job)) return 0
|
||||
if (job.status === 'queued' || job.phase === 'preparing_instance') return 2
|
||||
return 1
|
||||
}
|
||||
|
||||
function progressSignature(job: InstallJobSnapshot): string {
|
||||
const progress = job.progress
|
||||
const secondary = progress?.secondary
|
||||
return [
|
||||
job.status,
|
||||
job.phase,
|
||||
JSON.stringify(job.details),
|
||||
progress?.current ?? '',
|
||||
progress?.total ?? '',
|
||||
secondary?.current ?? '',
|
||||
secondary?.total ?? '',
|
||||
].join(':')
|
||||
}
|
||||
|
||||
function clearCopied(jobId: string) {
|
||||
if (!copiedJobIds.value.has(jobId)) {
|
||||
return
|
||||
}
|
||||
|
||||
const timeout = copiedResetTimeouts.get(jobId)
|
||||
if (timeout != null) {
|
||||
window.clearTimeout(timeout)
|
||||
copiedResetTimeouts.delete(jobId)
|
||||
}
|
||||
|
||||
const nextCopiedJobIds = new Set(copiedJobIds.value)
|
||||
nextCopiedJobIds.delete(jobId)
|
||||
copiedJobIds.value = nextCopiedJobIds
|
||||
}
|
||||
|
||||
function clearProgressSnapshot(jobId: string) {
|
||||
const snapshot = progressSnapshots.get(jobId)
|
||||
if (snapshot?.timeout != null) {
|
||||
window.clearTimeout(snapshot.timeout)
|
||||
}
|
||||
progressSnapshots.delete(jobId)
|
||||
}
|
||||
|
||||
function scheduleStaleProgressRefresh(jobId: string) {
|
||||
const snapshot = progressSnapshots.get(jobId)
|
||||
if (!snapshot) {
|
||||
return
|
||||
}
|
||||
|
||||
snapshot.timeout = window.setTimeout(() => {
|
||||
const snapshot = progressSnapshots.get(jobId)
|
||||
if (!snapshot) {
|
||||
return
|
||||
}
|
||||
|
||||
snapshot.timeout = null
|
||||
opts.onChange()
|
||||
}, copyDetailsStallMs)
|
||||
}
|
||||
|
||||
function syncProgressSnapshots(nextJobs: InstallJobSnapshot[]) {
|
||||
const trackedJobIds = new Set<string>()
|
||||
const now = Date.now()
|
||||
|
||||
for (const job of nextJobs) {
|
||||
if (!canShowStalledProgressDetails(job)) {
|
||||
continue
|
||||
}
|
||||
|
||||
trackedJobIds.add(job.job_id)
|
||||
const signature = progressSignature(job)
|
||||
const snapshot = progressSnapshots.get(job.job_id)
|
||||
if (snapshot?.signature === signature) {
|
||||
continue
|
||||
}
|
||||
|
||||
clearProgressSnapshot(job.job_id)
|
||||
clearCopied(job.job_id)
|
||||
progressSnapshots.set(job.job_id, {
|
||||
signature,
|
||||
changedAt: now,
|
||||
timeout: null,
|
||||
})
|
||||
scheduleStaleProgressRefresh(job.job_id)
|
||||
}
|
||||
|
||||
for (const jobId of progressSnapshots.keys()) {
|
||||
if (!trackedJobIds.has(jobId)) {
|
||||
clearProgressSnapshot(jobId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function hasStalledProgress(job: InstallJobSnapshot): boolean {
|
||||
const snapshot = progressSnapshots.get(job.job_id)
|
||||
return !!snapshot && Date.now() - snapshot.changedAt >= copyDetailsStallMs
|
||||
}
|
||||
|
||||
function shouldShowCopyDetails(job: InstallJobSnapshot): boolean {
|
||||
return isTerminalJob(job) || (canShowStalledProgressDetails(job) && hasStalledProgress(job))
|
||||
}
|
||||
|
||||
function isCopied(job: InstallJobSnapshot): boolean {
|
||||
return copiedJobIds.value.has(job.job_id)
|
||||
}
|
||||
|
||||
function setCopied(job: InstallJobSnapshot) {
|
||||
copiedJobIds.value = new Set([...copiedJobIds.value, job.job_id])
|
||||
const existingTimeout = copiedResetTimeouts.get(job.job_id)
|
||||
if (existingTimeout != null) {
|
||||
window.clearTimeout(existingTimeout)
|
||||
}
|
||||
copiedResetTimeouts.set(
|
||||
job.job_id,
|
||||
window.setTimeout(() => {
|
||||
copiedResetTimeouts.delete(job.job_id)
|
||||
if (!copiedJobIds.value.has(job.job_id)) {
|
||||
return
|
||||
}
|
||||
const nextCopiedJobIds = new Set(copiedJobIds.value)
|
||||
nextCopiedJobIds.delete(job.job_id)
|
||||
copiedJobIds.value = nextCopiedJobIds
|
||||
opts.onChange()
|
||||
}, 1_000),
|
||||
)
|
||||
opts.onChange()
|
||||
}
|
||||
|
||||
async function copyJobDetails(job: InstallJobSnapshot) {
|
||||
const details = await install_job_support_details(job.job_id).catch((error) => {
|
||||
opts.handleError(error)
|
||||
return null
|
||||
})
|
||||
if (!details) {
|
||||
return
|
||||
}
|
||||
try {
|
||||
await navigator.clipboard.writeText(details)
|
||||
setCopied(job)
|
||||
} catch (error) {
|
||||
opts.handleError(error)
|
||||
}
|
||||
}
|
||||
|
||||
function getButtons(job: InstallJobSnapshot): PopupNotificationButton[] {
|
||||
const buttons: PopupNotificationButton[] = []
|
||||
|
||||
if (isTerminalJob(job)) {
|
||||
buttons.push({
|
||||
{
|
||||
label: formatMessage(messages.retry),
|
||||
icon: UpdatedIcon,
|
||||
color: 'brand',
|
||||
@@ -581,23 +248,8 @@ export async function useInstallJobNotifications(opts: {
|
||||
await install_job_retry(job.job_id).catch(opts.handleError)
|
||||
await refresh()
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
if (shouldShowCopyDetails(job)) {
|
||||
const copied = isCopied(job)
|
||||
buttons.push({
|
||||
label: formatMessage(copied ? messages.copied : messages.copyDetails),
|
||||
icon: copied ? CheckIcon : CopyIcon,
|
||||
color: 'standard',
|
||||
keepOpen: true,
|
||||
action: async () => {
|
||||
await copyJobDetails(job)
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
return buttons
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
function setJobs(nextJobs: InstallJobSnapshot[]) {
|
||||
@@ -607,15 +259,13 @@ export async function useInstallJobNotifications(opts: {
|
||||
}
|
||||
}
|
||||
|
||||
const visibleJobs = nextJobs.filter((job) => visibleJobStatuses.has(job.status))
|
||||
syncProgressSnapshots(visibleJobs)
|
||||
|
||||
jobs.value = visibleJobs.sort(
|
||||
(a, b) =>
|
||||
getJobSortRank(a) - getJobSortRank(b) ||
|
||||
a.created.localeCompare(b.created) ||
|
||||
(jobOrder.get(a.job_id) ?? 0) - (jobOrder.get(b.job_id) ?? 0),
|
||||
)
|
||||
jobs.value = nextJobs
|
||||
.filter((job) => visibleJobStatuses.has(job.status))
|
||||
.sort(
|
||||
(a, b) =>
|
||||
a.created.localeCompare(b.created) ||
|
||||
(jobOrder.get(a.job_id) ?? 0) - (jobOrder.get(b.job_id) ?? 0),
|
||||
)
|
||||
}
|
||||
|
||||
const progressItems = computed<PopupNotificationProgressItem[]>(() =>
|
||||
@@ -634,7 +284,7 @@ export async function useInstallJobNotifications(opts: {
|
||||
progressType: isTerminalJob(job) ? undefined : getProgressType(job),
|
||||
progressCurrent: isTerminalJob(job) ? undefined : progress?.current,
|
||||
progressTotal: isTerminalJob(job) ? undefined : progress?.total,
|
||||
buttons: getButtons(job),
|
||||
buttons: getTerminalButtons(job),
|
||||
onDismiss: isTerminalJob(job)
|
||||
? async () => {
|
||||
await install_job_dismiss(job.job_id).catch(opts.handleError)
|
||||
@@ -732,14 +382,6 @@ export async function useInstallJobNotifications(opts: {
|
||||
progressItems,
|
||||
buttons,
|
||||
refresh,
|
||||
dispose: () => {
|
||||
for (const timeout of copiedResetTimeouts.values()) {
|
||||
window.clearTimeout(timeout)
|
||||
}
|
||||
for (const jobId of progressSnapshots.keys()) {
|
||||
clearProgressSnapshot(jobId)
|
||||
}
|
||||
unlisten()
|
||||
},
|
||||
dispose: () => unlisten(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,6 @@ export interface InstallModpackPreview {
|
||||
iconUrl?: string | null
|
||||
link?: InstanceLink | null
|
||||
unknownFile: boolean
|
||||
externalFilesInModpack: string[]
|
||||
}
|
||||
|
||||
export interface InstallCreateInstanceRequest {
|
||||
@@ -86,36 +85,6 @@ export type InstallJavaStep =
|
||||
| 'extracting'
|
||||
| 'validating'
|
||||
|
||||
export interface InstallErrorView {
|
||||
code: string
|
||||
phase?: InstallPhaseId | null
|
||||
message: string
|
||||
api?: {
|
||||
error: string
|
||||
status?: number | null
|
||||
method?: string | null
|
||||
url?: string | null
|
||||
route?: string | null
|
||||
} | null
|
||||
context?: {
|
||||
operation: string
|
||||
source_path?: string | null
|
||||
target_path?: string | null
|
||||
file_path?: string | null
|
||||
entry_path?: string | null
|
||||
urls?: string[]
|
||||
expected_hash?: string | null
|
||||
expected_size?: number | null
|
||||
project_id?: string | null
|
||||
version_id?: string | null
|
||||
minecraft_version?: string | null
|
||||
loader?: string | null
|
||||
java_version?: number | null
|
||||
os?: string | null
|
||||
arch?: string | null
|
||||
} | null
|
||||
}
|
||||
|
||||
export interface InstallJobSnapshot {
|
||||
job_id: string
|
||||
instance_id?: string | null
|
||||
@@ -145,8 +114,7 @@ export interface InstallJobSnapshot {
|
||||
}
|
||||
| { type: 'import'; launcher_type: string; instance_folder: string }
|
||||
display?: { title: string; icon?: string | null } | null
|
||||
error?: InstallErrorView | null
|
||||
rollback_error?: InstallErrorView | null
|
||||
error?: { code: string; message: string } | null
|
||||
created: string
|
||||
modified: string
|
||||
finished?: string | null
|
||||
@@ -229,10 +197,6 @@ export async function install_job_dismiss(jobId: string) {
|
||||
return await invoke<void>('plugin:install|install_job_dismiss', { jobId })
|
||||
}
|
||||
|
||||
export async function install_job_support_details(jobId: string) {
|
||||
return await invoke<string>('plugin:install|install_job_support_details', { jobId })
|
||||
}
|
||||
|
||||
export function installJobInstanceId(job: InstallJobSnapshot): string | null {
|
||||
return job.instance_id ?? job.target.instance_id ?? null
|
||||
}
|
||||
|
||||
@@ -242,10 +242,6 @@ export async function add_project_from_path(
|
||||
})
|
||||
}
|
||||
|
||||
export async function is_file_on_modrinth(projectPath: string): Promise<boolean> {
|
||||
return await invoke('plugin:instance|instance_is_file_on_modrinth', { projectPath })
|
||||
}
|
||||
|
||||
// Toggle disabling a project
|
||||
export async function toggle_disable_project(
|
||||
instanceId: string,
|
||||
|
||||
-7
@@ -133,18 +133,11 @@ type Hooks = {
|
||||
|
||||
type Manifest = {
|
||||
gameVersions: ManifestGameVersion[]
|
||||
versionGroups?: ManifestVersionGroup[]
|
||||
}
|
||||
|
||||
type ManifestGameVersion = {
|
||||
id: string
|
||||
stable: boolean
|
||||
versionGroup?: string
|
||||
loaders: ManifestLoaderVersion[]
|
||||
}
|
||||
|
||||
type ManifestVersionGroup = {
|
||||
id: string
|
||||
loaders: ManifestLoaderVersion[]
|
||||
}
|
||||
|
||||
|
||||
@@ -11,87 +11,6 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "إخفاء المزيد من الحالات قيد التشغيل"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "تم النسخ"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "نسخ التفاصيل"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "التجاهل"
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "فتح المثيل"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "إعادة المحاولة"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "تم الإلغاء بسبب إغلاق التطبيق"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "تعذّر قراءة حزمة التعديلات"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "تم الإلغاء"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "لم تكتمل عملية التنظيف"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "تعذّر تنزيل الملفات"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "الملف الذي تم تنزيله تالف"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "تعذّر حفظ الملفات"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "لم يكتمل التنزيل"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "تعذّر العثور على المثيل"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "مسار الملف غير صالح"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "بيانات حزمة التعديلات غير صالحة"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "تحتوي ملفات حزمة التعديلات على بيانات وصفية غير صالحة"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "لم يكتمل إعداد Java"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "فشل إعداد أداة التحميل"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "تعذر تحديث البيانات المحلية"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "فشل إعداد Minecraft"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "لم أتمكن من الوصول إلى Modrinth"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "لا يوجد إذن للكتابة"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "تعذر تنزيل الحزمة"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "حدث خطأ ما"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "مثيل غير معروف"
|
||||
},
|
||||
"app.action-bar.installs": {
|
||||
"message": "عمليات التثبيت"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "إنشاء نسخة أساسية"
|
||||
},
|
||||
@@ -155,63 +74,12 @@
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "إخفاء عرض الاسم"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "يتضمن العوالم الحديثة في قسم \"العودة إلى اللعب\" على الصفحة الرئيسية."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "العودة إلى العوالم"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "قم بتصغير نافذة المشغل عند بدء تشغيل عملية Minecraft."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "تصغير نافذة المشغل"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "استخدام إطار نافذة النظام (يتطلب إعادة تشغيل التطبيق)."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "الزخارف التقليدية"
|
||||
},
|
||||
"app.appearance-settings.select-option": {
|
||||
"message": "حدد خياراً"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "يعرض مقدار الوقت الذي قضيته في لعب إحدى المهام."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "إظهار مدة التشغيل"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "يتخطى تلقائيًا عمليات التأكيد ذات المخاطر المنخفضة، مثل تثبيت حزم التعديلات المكررة، وحذف المحتوى العادي، والتحديثات الجماعية، وإلغاء ربط حزم التعديلات، ومطالبات الإصلاح. وسيستمر عرض التحذيرات الخطيرة."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "تخطي التحذيرات غير الضرورية"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "يتيح إمكانية إظهار الشريط الجانبي أو إخفائه."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "تبديل الشريط الجانبي"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "إذا حاولت تثبيت ملف Modrinth Pack (.mrpack) غير مستضاف على Modrinth، فسنتأكد من أنك على دراية بالمخاطر قبل تثبيته."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "أخبرني قبل تثبيت حزم التعديلات غير المعروفة"
|
||||
},
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "قد تكون خوادم مصادقة ماينكرافت معطلة حاليًا. تحقق من اتصالك بالإنترنت وحاول مرة أخرى لاحقًا."
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "تعذر الوصول إلى خوادم المصادقة"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "إضافة خادم إلى المثيل"
|
||||
},
|
||||
"app.browse.add-to-an-instance": {
|
||||
"message": "إضافة إلى مثيل"
|
||||
},
|
||||
"app.browse.add-to-instance": {
|
||||
"message": "أضف للنموذج"
|
||||
},
|
||||
@@ -234,20 +102,11 @@
|
||||
"message": "استكشف خوادم"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "إخفاء الخوادم التي تمت إضافتها بالفعل"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "حزم التعديل"
|
||||
},
|
||||
"app.browse.server-instance-content-warning": {
|
||||
"message": "قد تؤدي إضافة المحتوى إلى حدوث مشاكل في التوافق عند الاتصال بالخادم. كما سيُفقد أي محتوى تمت إضافته عند تحديث محتوى مثيل الخادم."
|
||||
"message": "إخفاء الخوادم المضافة مسبقًا"
|
||||
},
|
||||
"app.browse.server.installing": {
|
||||
"message": "جاري التثبيت"
|
||||
},
|
||||
"app.content-install.no-compatible-versions": {
|
||||
"message": "لا توجد إصدارات متاحة تتوافق مع {compatibilityLabel}. اختر إصدارًا لتثبيته على أي حال. لن يتم تثبيت التبعيات تلقائيًا."
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "أدخل وصف التعديل..."
|
||||
},
|
||||
@@ -269,60 +128,6 @@
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.install.phase.downloading_content": {
|
||||
"message": "تنزيل المحتوى"
|
||||
},
|
||||
"app.install.phase.downloading_minecraft": {
|
||||
"message": "تنزيل لعبة Minecraft"
|
||||
},
|
||||
"app.install.phase.downloading_pack_file": {
|
||||
"message": "تنزيل ملف الحزمة"
|
||||
},
|
||||
"app.install.phase.extracting_overrides": {
|
||||
"message": "استخراج التجاوزات"
|
||||
},
|
||||
"app.install.phase.finalizing": {
|
||||
"message": "وضع اللمسات الأخيرة"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "في قائمة الانتظار للتثبيت"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "التحضير لـ Java"
|
||||
},
|
||||
"app.install.phase.preparing_java.downloading": {
|
||||
"message": "تنزيل Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.extracting": {
|
||||
"message": "استخراج Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.fetching-metadata": {
|
||||
"message": "جلب Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.resolving": {
|
||||
"message": "التحضير لـ Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.validating": {
|
||||
"message": "التحقق من صحة إصدار Java {version}"
|
||||
},
|
||||
"app.install.phase.reading_pack_manifest": {
|
||||
"message": "قراءة قائمة المحتويات"
|
||||
},
|
||||
"app.install.phase.resolving_loader": {
|
||||
"message": "معالج التحميل"
|
||||
},
|
||||
"app.install.phase.resolving_minecraft": {
|
||||
"message": "حل مشكلة Minecraft"
|
||||
},
|
||||
"app.install.phase.resolving_pack": {
|
||||
"message": "معالجة المحتوى"
|
||||
},
|
||||
"app.install.phase.rolling_back": {
|
||||
"message": "التراجع"
|
||||
},
|
||||
"app.install.phase.running_loader_processors": {
|
||||
"message": "تشغيل معالجات التحميل"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "سيتم حذف جميع البيانات الخاصة لنموذجك نهائيًا، بما في ذلك عوالمك والتكوينات وكل المحتوى المثبت."
|
||||
},
|
||||
@@ -347,15 +152,6 @@
|
||||
"app.instance.modpack-already-installed.instance": {
|
||||
"message": "النموذج"
|
||||
},
|
||||
"app.instance.mods.bulk-update.downloading-projects": {
|
||||
"message": "جاري تنزيل {current, number}/{total, number} مشروعًا..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.finishing": {
|
||||
"message": "آخر المستجدات حول عملية التشطيب..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.resolving-versions": {
|
||||
"message": "تحديد الإصدارات..."
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "مشروع"
|
||||
},
|
||||
@@ -380,18 +176,6 @@
|
||||
"app.instance.worlds.browse-servers": {
|
||||
"message": "تصفح الخوادم"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.delete-button": {
|
||||
"message": "حذف العالم"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.title": {
|
||||
"message": "حذف العالم"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-body": {
|
||||
"message": "سيتم حذف هذا العالم نهائيًا من هذه النسخة. لا يمكن التراجع عن هذا الإجراء."
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-header": {
|
||||
"message": "حذف {name}"
|
||||
},
|
||||
"app.instance.worlds.filter-modded": {
|
||||
"message": "معدّل"
|
||||
},
|
||||
@@ -410,21 +194,12 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "لم تتم إضافة أي من الخوادم أو العوالم"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "إزالة الخادم"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.title": {
|
||||
"message": "إزالة الخادم"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-body": {
|
||||
"message": "سيتم حذف هذا الخادم من قائمة الخوادم الخاصة بك ومن قائمة الخوادم داخل اللعبة. يمكنك إضافته مرة أخرى لاحقًا إذا كنت تعرف عنوانه."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-header": {
|
||||
"message": "إزالة {name}"
|
||||
},
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "ابحث بين ال{count} عوالم..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "المحتوى مطلوب"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "نزل للعب"
|
||||
},
|
||||
@@ -434,42 +209,36 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# تعديل} other {# تعديلات}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "حُزْمَة التعديل مطلوبة"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "يتطلب هذا الخادم تعديلات للعب. انقر فوق \"تثبيت\" لإعداد الملفات المطلوبة من Modrinth، ثم قم بتشغيله مباشرة إلى الخادم."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "النماذج المشتركة"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "نماذج الخادم مشتركة"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "عرض المحتويات"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "حدث للعب"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "يلزم التحديث"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "هناك تحديث مطلوب للعب بـ {name}. الرجاء التحديث إلى أحدث اصدار لتشغيل اللعبة."
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "هذا المشروع مُثبَّت بالفعل"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "تغيير الإصدار"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "العودة إلى الاستكشاف"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "تثبيت المحتويات الى النموذج"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "جميع الإصدارات"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "التنزيل من المتصفح"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "التثبيت"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "مثبت بالفعل"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "تم تفعيل وضع المطوّر."
|
||||
},
|
||||
@@ -512,12 +281,6 @@
|
||||
"app.skins.delete-modal.title": {
|
||||
"message": "هل أنت متأكد من حذف المظهر هذا؟"
|
||||
},
|
||||
"app.skins.dropped-file-error.text": {
|
||||
"message": "فشل قراءة الملف الذي تم إسقاطه."
|
||||
},
|
||||
"app.skins.dropped-file-error.title": {
|
||||
"message": "حدث خطأ أثناء معالجة الملف"
|
||||
},
|
||||
"app.skins.edit-button": {
|
||||
"message": "تعديل المظهر"
|
||||
},
|
||||
@@ -527,15 +290,6 @@
|
||||
"app.skins.modal.add-title": {
|
||||
"message": "إضافة المظهر"
|
||||
},
|
||||
"app.skins.modal.arm-style-section": {
|
||||
"message": "طراز الأذرع"
|
||||
},
|
||||
"app.skins.modal.arm-style-slim": {
|
||||
"message": "نحيف"
|
||||
},
|
||||
"app.skins.modal.arm-style-wide": {
|
||||
"message": "عريض"
|
||||
},
|
||||
"app.skins.modal.cape-fallback-name": {
|
||||
"message": "رداء"
|
||||
},
|
||||
@@ -554,18 +308,12 @@
|
||||
"app.skins.modal.none-cape-option": {
|
||||
"message": "لا شيء"
|
||||
},
|
||||
"app.skins.modal.replace-texture-button": {
|
||||
"message": "استبدال النسيج"
|
||||
},
|
||||
"app.skins.modal.save-skin-button": {
|
||||
"message": "حفظ المظهر"
|
||||
},
|
||||
"app.skins.modal.saving-tooltip": {
|
||||
"message": "حفظ..."
|
||||
},
|
||||
"app.skins.modal.texture-section": {
|
||||
"message": "النسيج"
|
||||
},
|
||||
"app.skins.modal.upload-skin-first-tooltip": {
|
||||
"message": "أرفع المظهر أولا !"
|
||||
},
|
||||
@@ -575,69 +323,9 @@
|
||||
"app.skins.previewing-badge": {
|
||||
"message": "أستعراض"
|
||||
},
|
||||
"app.skins.rate-limit.text": {
|
||||
"message": "أنت تقوم بتغيير مظهرك بشكل متكرر جدًّا. وقد قامت خوادم Mojang بحظر الطلبات الإضافية مؤقتًا. يرجى الانتظار قليلاً قبل إعادة المحاولة."
|
||||
},
|
||||
"app.skins.rate-limit.title": {
|
||||
"message": "تمهل !"
|
||||
},
|
||||
"app.skins.reorder-error.text": {
|
||||
"message": "تعذر حفظ طلبك المتعلق بشكل الشخصية."
|
||||
},
|
||||
"app.skins.reorder-error.title": {
|
||||
"message": "فشل إعادة ترتيب أشكال الشخصيات"
|
||||
},
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "البناة والبيئات الحيوية"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "الفوضى المربعة"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "انطلق نحو السماء"
|
||||
},
|
||||
"app.skins.section.default-skins": {
|
||||
"message": "شكل الشخصية الافتراضية"
|
||||
},
|
||||
"app.skins.section.minecon-earth-2017": {
|
||||
"message": "MINECON Earth 2017"
|
||||
},
|
||||
"app.skins.section.modrinth": {
|
||||
"message": "Modrinth"
|
||||
},
|
||||
"app.skins.section.modrinth-pride": {
|
||||
"message": "فخر Modrinth"
|
||||
},
|
||||
"app.skins.section.modrinth-pride.tooltip": {
|
||||
"message": "لقد حصلت على هذه أشكال الشخصيات مقابل تبرعك لحملة جمع التبرعات التي نظمتها Modrinth Pride خلال شهر الفخر."
|
||||
},
|
||||
"app.skins.section.mounts-of-mayhem": {
|
||||
"message": "جبال الفوضى"
|
||||
},
|
||||
"app.skins.section.saved-skins": {
|
||||
"message": "المظاهر المحفوظة"
|
||||
},
|
||||
"app.skins.section.striding-hero": {
|
||||
"message": "البطل السائر بخطوات واسعة"
|
||||
},
|
||||
"app.skins.section.the-copper-age": {
|
||||
"message": "العصر النحاسي"
|
||||
},
|
||||
"app.skins.section.the-garden-awakens": {
|
||||
"message": "الحديقة تستيقظ"
|
||||
},
|
||||
"app.skins.section.tiny-takeover": {
|
||||
"message": "الاستحواذ الصغير"
|
||||
},
|
||||
"app.skins.sign-in.button": {
|
||||
"message": "تسجيل الدخول"
|
||||
},
|
||||
"app.skins.sign-in.description": {
|
||||
"message": "يرجى تسجيل الدخول إلى حسابك في Minecraft لاستخدام ميزات إدارة أشكال الشخصيات في تطبيق Modrinth."
|
||||
},
|
||||
"app.skins.sign-in.rinthbot-alt": {
|
||||
"message": "روبوت Modrinth المتحمس"
|
||||
},
|
||||
"app.skins.sign-in.title": {
|
||||
"message": "الرجاء تسجيل الدخول"
|
||||
},
|
||||
@@ -662,9 +350,6 @@
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "اكتمل التنزيل"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "أعد التحميل للتحديث"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "تحديث متاح"
|
||||
},
|
||||
@@ -863,30 +548,6 @@
|
||||
"instance.settings.tabs.general.name": {
|
||||
"message": "الاسم"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel": {
|
||||
"message": "تحديث القناة"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha": {
|
||||
"message": "نسخة أولية"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha.description": {
|
||||
"message": "ستظهر الإصدارات النهائية والإصدارات التجريبية والإصدارات الأولية كـ«تحديثات متاحة»."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta": {
|
||||
"message": "بيتا"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta.description": {
|
||||
"message": "ستظهر الإصدارات النهائية والإصدارات التجريبية كـ«تحديثات متاحة»."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release": {
|
||||
"message": "إصدار ثابت"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release.description": {
|
||||
"message": "لن تظهر سوى الإصدارات النهائية ضمن التحديثات المتاحة."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.select": {
|
||||
"message": "اختر قناة التحديث"
|
||||
},
|
||||
"instance.settings.tabs.hooks": {
|
||||
"message": "إجراءات تشغيل إضافية"
|
||||
},
|
||||
@@ -935,24 +596,6 @@
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "جافا والذاكرة"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-environment-variables": {
|
||||
"message": "متغيرات البيئة المخصصة"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-java-arguments": {
|
||||
"message": "معلمات Java المخصصة"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-java-installation": {
|
||||
"message": "تثبيت Java المخصص"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-memory-allocation": {
|
||||
"message": "تخصيص الذاكرة حسب الطلب"
|
||||
},
|
||||
"instance.settings.tabs.java.enter-environment-variables": {
|
||||
"message": "أدخل المتغيرات البيئية..."
|
||||
},
|
||||
"instance.settings.tabs.java.enter-java-arguments": {
|
||||
"message": "أدخل معلمات Java..."
|
||||
},
|
||||
"instance.settings.tabs.java.environment-variables": {
|
||||
"message": "المتغيرات البيئية"
|
||||
},
|
||||
@@ -1010,9 +653,6 @@
|
||||
"instance.worlds.copy_address": {
|
||||
"message": "نسخ العنوان"
|
||||
},
|
||||
"instance.worlds.create_shortcut": {
|
||||
"message": "إنشاء اختصار"
|
||||
},
|
||||
"instance.worlds.dont_show_on_home": {
|
||||
"message": "عدم العرض في الصفحة الرئيسية"
|
||||
},
|
||||
@@ -1052,12 +692,6 @@
|
||||
"minecraft-account.label": {
|
||||
"message": "حساب ماينكرافت"
|
||||
},
|
||||
"minecraft-account.not-signed-in": {
|
||||
"message": "لم يتم تسجيل الدخول"
|
||||
},
|
||||
"minecraft-account.remove-account": {
|
||||
"message": "حذف الحساب"
|
||||
},
|
||||
"minecraft-account.select-account": {
|
||||
"message": "اختيار الحساب"
|
||||
},
|
||||
@@ -1087,5 +721,8 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "يتم توفير المحمّل من قبل الخادم"
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "لا تعرض هذا التحذير مجددا"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,21 +11,27 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Skrýt více spuštěných instancí"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Zkopírováno"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Zavřít"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "Instalace selhala"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "Instalace selhala kvůli zavření aplikace."
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "Instalace selhala kvůli chybě sítě."
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "Instalace selhala kvůli neznámé chybě."
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Otevřít instanci"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Zkusit znovu"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Zrušeno"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Neznámá instance"
|
||||
},
|
||||
@@ -173,6 +179,9 @@
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Objevit servery"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Skrýt již přidané servery"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpacky"
|
||||
},
|
||||
@@ -222,7 +231,7 @@
|
||||
"message": "Dokončení instalace"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "Ve frontě na instalaci"
|
||||
"message": "Příprava instance"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Příprava Javy"
|
||||
@@ -362,6 +371,9 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Hledat v {count} světech..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Požadovaný obsah"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Nainstaluj pro hraní"
|
||||
},
|
||||
@@ -371,39 +383,39 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mód} few {# módy} other {# módů}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Požadovaný modpack"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Tento server k hraní vyžaduje módy. Klikni na instalovat pro získání potřebných módů z Modrinth a poté se rovnou připoj na server."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Sdílená instance"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Sdílená serverová instance"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Zobrazit obsah"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Aktualizuj pro hraní"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Je vyžadována aktualizace"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Pro hraní {name} je vyžadována aktualizace. Prosím aktualizuj na nejnovější verzi, abys mohl hru spustit."
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Tento projekt je již nainstalován"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Změnit verzi"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Zpět k Objevování"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Nainstalovat obsah do instance"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Všechny verze"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Stáhnout v prohlížeči"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Již staženo"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Vývojářský režim povolen."
|
||||
},
|
||||
@@ -524,9 +536,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Chaos Cubed"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
@@ -1021,5 +1030,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader zprostředkovává server"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Soubor je zkontrolován pouze v případě, že je nahrán na Modrinth, bez ohledu na jeho formát (včetně formátu .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Toto varování znovu nezobrazovat"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Potvrdit instalaci"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Přesto nainstalovat"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Malware se často šíří prostřednictvím souborů s modpacky, které se sdílejí na platformách jako Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Tento soubor jsme na Modrinthu nenašli. Důrazně doporučujeme instalovat pouze soubory z důvěryhodných zdrojů."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Upozornění na neznámý soubor"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,18 +11,6 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Gem flere kørende instances"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Tilsidesæt"
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Åben instance"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Prøv igen"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Ukendt instance"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "Gør til primære instance"
|
||||
},
|
||||
@@ -153,7 +141,7 @@
|
||||
"message": "Opdag servere"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Gem servere som allerede er tilføjet"
|
||||
"message": "Gem allerede tilføjet til servere"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpacks"
|
||||
@@ -177,7 +165,7 @@
|
||||
"message": "Eksporter modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Modpack navn"
|
||||
"message": "Modpack Navn"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Modpack navn"
|
||||
@@ -188,15 +176,6 @@
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.install.phase.downloading_content": {
|
||||
"message": "Downloader indhold"
|
||||
},
|
||||
"app.install.phase.downloading_minecraft": {
|
||||
"message": "Downloader Minecraft"
|
||||
},
|
||||
"app.install.phase.preparing_java.downloading": {
|
||||
"message": "Downloader Java {version}"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Al' data for din instance vil blive permanent slettet, dette inkludere dine verdener, konfigurationer, og alt installeret indhold."
|
||||
},
|
||||
@@ -221,9 +200,6 @@
|
||||
"app.instance.modpack-already-installed.instance": {
|
||||
"message": "Instance"
|
||||
},
|
||||
"app.instance.mods.bulk-update.downloading-projects": {
|
||||
"message": "Downloader {current, number}/{total, number} projekter..."
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "projekt"
|
||||
},
|
||||
@@ -269,6 +245,9 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Søg {count} verdener..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Indhold krævet"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Installer for at spille"
|
||||
},
|
||||
@@ -278,15 +257,27 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} other {# mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Modpack krævet"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Denne server kræver mods for at spille. Tryk på installer for at sætte de krævet filler fra modrinth op, så lancer direkte til serveren."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Delt instance"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Delt server instance"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Vis indhold"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Opdater for at spille"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Opdatering krævet"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "En opdatering er krævet for at spille {name}. Venligst opdater til den seneste version for at køre spillet."
|
||||
},
|
||||
@@ -299,9 +290,6 @@
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Installer indhold til instance"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Allerede installeret"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Udvikler-tilstand aktiveret."
|
||||
},
|
||||
@@ -407,9 +395,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Chaos Cubed"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
@@ -479,9 +464,6 @@
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "Download færdiggjort"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "Genindlæs for at opdater"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "Opdatering tilgængelig"
|
||||
},
|
||||
@@ -680,12 +662,6 @@
|
||||
"instance.settings.tabs.general.name": {
|
||||
"message": "Navn"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha": {
|
||||
"message": "Alpha"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta": {
|
||||
"message": "Beta"
|
||||
},
|
||||
"instance.settings.tabs.hooks": {
|
||||
"message": "Startkommandoer"
|
||||
},
|
||||
@@ -868,5 +844,20 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader er givet af serveren"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "En fil behandles kun, hvis den uploades til Modrinth, uanset filformat (herunder .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Vis ikke denne advarsel igen"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Bekræft installation"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Installer alligevel"
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Ukendt fil advarsel"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,81 +11,27 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Weitere laufende Instanzen ausblenden"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Kopiert"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Details kopieren"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Ignorieren"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "Installation fehlgeschlagen"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "Installation aufgrund des Schließens der App fehlgeschlagen."
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "Installation aufgrund eines Netzwerkfehlers fehlgeschlagen."
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "Installation aufgrund eines unbekannten Fehlers fehlgeschlagen."
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Instanz öffnen"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Wiederholen"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Aufgrund von Schließung der App abgebrochen"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Modpack konnte nicht gelesen werden"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Abgebrochen"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "Bereinigung konnte nicht abgeschlossen werden"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Dateien konnte nicht heruntergeladen werden"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "Heruntergeladene Datei ist beschädigt"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Dateien konnten nicht gespeichert werden"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "Download konnte nicht abgeschlossen werden"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "Instanz konnte nicht gefunden werden"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "Dateipfad ist ungültig"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "Daten des Modpacks sind ungültig"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "Dateien des Modpacks enthalten ungültige Metadaten"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "Die Einrichtung von Java konnte nicht abgeschlossen werden"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "Einrichtung des Loaders ist fehlgeschlagen"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "Lokale Daten konnten nicht aktualisiert werden"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "Einrichtung von Minecraft ist fehlgeschlagen"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "Modrinth konnte nicht erreicht werden"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "Keine Berechtigung zum Schreiben"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "Das Pack konnte nicht heruntergeladen werden"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "Irgendwas ist schiefgelaufen"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Unbekannte Instanz"
|
||||
},
|
||||
@@ -183,10 +129,10 @@
|
||||
"message": "Spielzeit anzeigen"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Bestätigungen mit geringem Risiko, wie z. B. die Installation doppelter Modpacks, das Löschen normaler Inhalte, Massenaktualisierungen, das Aufheben von Verknüpfungen zu Modpacks und Reparaturaufrufe, werden automatisch übersprungen. Gefährliche Warnungen werden weiterhin angezeigt."
|
||||
"message": "Überspringt automatisch Bestätigungen mit geringem Risiko, wie z. B. die doppelte Installation von Modpacks, das Löschen normaler Inhalte, Massenaktualisierungen, das Trennen von Modpacks und Reparaturen. Warnungen bei gefährlichen Aktionen werden weiterhin angezeigt."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Unwichtige Warnungen überspringen"
|
||||
"message": "Nicht essenzielle Warnungen überspringen"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Ermöglicht das Umschalten der Seitenleiste."
|
||||
@@ -258,7 +204,7 @@
|
||||
"message": "Modpack exportieren"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Name des Modpacks"
|
||||
"message": "Modpaketname"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Modpaketname"
|
||||
@@ -270,40 +216,40 @@
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.install.phase.downloading_content": {
|
||||
"message": "Inhalte werden heruntergeladen"
|
||||
"message": "Lade Inhalte herunter"
|
||||
},
|
||||
"app.install.phase.downloading_minecraft": {
|
||||
"message": "Minecraft wird heruntergeladen"
|
||||
"message": "Lade Minecraft herunter"
|
||||
},
|
||||
"app.install.phase.downloading_pack_file": {
|
||||
"message": "Paketdatei wird herunterladen"
|
||||
"message": "Lade Packdatei herunter"
|
||||
},
|
||||
"app.install.phase.extracting_overrides": {
|
||||
"message": "Überschreibungen werden extrahiert"
|
||||
"message": "Überschreibungen extrahieren"
|
||||
},
|
||||
"app.install.phase.finalizing": {
|
||||
"message": "Wird finalisiert"
|
||||
"message": "Abschliessen"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "Installation in Warteschlange"
|
||||
"message": "Instanz präparieren"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Java wird vorbereitet"
|
||||
"message": "Java präparieren"
|
||||
},
|
||||
"app.install.phase.preparing_java.downloading": {
|
||||
"message": "Java {version} wird heruntergeladen"
|
||||
"message": "Java {version} herunterladen"
|
||||
},
|
||||
"app.install.phase.preparing_java.extracting": {
|
||||
"message": "Java {version} wird extrahiert"
|
||||
"message": "Java {version} extrahieren"
|
||||
},
|
||||
"app.install.phase.preparing_java.fetching-metadata": {
|
||||
"message": "Java {version} wird abgerufen"
|
||||
"message": "Java {version} wird heruntergeladen"
|
||||
},
|
||||
"app.install.phase.preparing_java.resolving": {
|
||||
"message": "Java {version} wird vorbereitet"
|
||||
"message": "Java {version} präparieren"
|
||||
},
|
||||
"app.install.phase.preparing_java.validating": {
|
||||
"message": "Java {version} wird validiert"
|
||||
"message": "Java {version} validieren"
|
||||
},
|
||||
"app.install.phase.reading_pack_manifest": {
|
||||
"message": "Paketmanifest wird gelesen"
|
||||
@@ -348,10 +294,10 @@
|
||||
"message": "Instanz"
|
||||
},
|
||||
"app.instance.mods.bulk-update.downloading-projects": {
|
||||
"message": "{current, number}/{total, number} Projekte werden heruntergeladen..."
|
||||
"message": "Lade {current, number}/{total, number} Projekte..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.finishing": {
|
||||
"message": "Update wird fertiggestellt..."
|
||||
"message": "Update abschliessen..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.resolving-versions": {
|
||||
"message": "Versionen werden ermittelt..."
|
||||
@@ -387,7 +333,7 @@
|
||||
"message": "Welt löschen"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-body": {
|
||||
"message": "Diese Welt wird permanent von dieser Instanz gelöscht. Diese Aktion kann nicht rückgängig gemacht werden."
|
||||
"message": "Diese Welt wird permanent gelöscht von dieser Instanz, dies kann nicht rückgängig gemacht werden."
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-header": {
|
||||
"message": "Lösche {name}"
|
||||
@@ -425,38 +371,29 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Durchsuche {count} Welten..."
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "Nicht Installieren"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Inhalte benötigt"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Installieren zum Spielen"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Trotzdem Installieren"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Installieren"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Diese Einladung wurde von einem anderen Modrinth-Nutzer erstellt, nicht von Modrinth. Nimm nur Einladungen von Personen an, denen du vertraust."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# Mod} other {# Mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Eine Datei wird nur geprüft, wenn sie auf Modrinth veröffentlicht wird, unabhängig von ihrem Dateiformat (auch .mrpack)."
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Benötigtes Modpack"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Dieser Server benötigt Mods zum spielen. Klicke auf Installieren um die nötigen Dateien von Modrinth herunterzuladen und dannach direkt dem Server beizutreten."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Geteilte Instanz"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Dieses Server-Modpack enthält Dateien, die nicht auf Modrinth veröffentlicht sind. Wir empfehlen dringend, nur Dateien aus vertrauenswürdigen Quellen zu installieren."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "Warnung vor unbekannten Dateien"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Nicht erkannte Dateien"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Geteilte Server Instanz"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Inhalte ansehen"
|
||||
@@ -464,8 +401,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Aktualisieren zum Spielen"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Entfernt"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Aktualisierung benötigt"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Eine aktualisierung zum spielen von {name} ist benötigt. Bitte aktualisiere auf die neuste Version um das Spiel zu starten."
|
||||
@@ -473,27 +410,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Dieses Projekt ist bereits installiert"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Version wechseln"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Zurück zu Entdecken"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Inhalt in Instanz installieren"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Alle Versionen"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Im Browser herunterladen"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "Wird installiert"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Bereits installiert"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Entwicklermodus aktiviert."
|
||||
},
|
||||
@@ -614,9 +536,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Chaos Cubed"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
@@ -1111,5 +1030,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader wird vom Server bereitgestellt"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Eine Datei wird nur geprüft, wenn sie auf Modrinth hochgeladen wird, unabhängig von ihrem Dateiformat (auch .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Diese Warnung nicht mehr anzeigen"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Installation bestätigen"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Trotzdem installieren"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Schadsoftware wird häufig über Modpack-Dateien verbreitet, indem diese auf Plattformen wie Discord geteilt werden."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Wir konnten diese Datei auf Modrinth nicht finden. Wir empfehlen dringend, nur Dateien aus vertrauenswürdigen Quellen zu installieren."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Warnung vor unbekannter Datei"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,81 +11,27 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Weitere laufende Instanzen ausblenden"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Kopiert"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Details kopieren"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Ausblenden"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "Installation fehlgeschlagen"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "Installation aufgrund des Schließens der App fehlgeschlagen."
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "Installation aufgrund eines Netzwerkfehlers fehlgeschlagen."
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "Installation aufgrund eines unbekannten Fehlers fehlgeschlagen."
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Instanz öffnen"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Erneut versuchen"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Aufgrund von Schließung der App abgebrochen"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Modpack konnte nicht gelesen werden"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Abgebrochen"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "Bereinigung konnte nicht abgeschlossen werden"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Dateien konnte nicht heruntergeladen werden"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "Heruntergeladene Datei ist beschädigt"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Dateien konnten nicht gespeichert werden"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "Download konnte nicht abgeschlossen werden"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "Instanz konnte nicht gefunden werden"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "Dateipfad ist ungültig"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "Daten des Modpacks sind ungültig"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "Dateien des Modpacks enthalten ungültige Metadaten"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "Die Einrichtung von Java konnte nicht abgeschlossen werden"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "Einrichtung des Loaders ist fehlgeschlagen"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "Lokale Daten konnten nicht aktualisiert werden"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "Einrichtung von Minecraft ist fehlgeschlagen"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "Modrinth konnte nicht erreicht werden"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "Keine Berechtigung zum Schreiben"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "Das Pack konnte nicht heruntergeladen werden"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "Irgendwas ist schiefgelaufen"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Unbekannte Instanz"
|
||||
},
|
||||
@@ -168,7 +114,7 @@
|
||||
"message": "Launcher minimieren"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Fensterrahmen des Systems verwenden (Neustart der App erforderlich)."
|
||||
"message": "Fensterdekorationen des Systems verwenden (Neustart der App erforderlich)."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Native Dekorationen"
|
||||
@@ -183,7 +129,7 @@
|
||||
"message": "Spielzeit anzeigen"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Bestätigungen mit geringem Risiko, wie z. B. die Installation doppelter Modpacks, das Löschen normaler Inhalte, Massenaktualisierungen, das Aufheben von Verknüpfungen zu Modpacks und Reparaturaufrufe, werden automatisch übersprungen. Gefährliche Warnungen werden weiterhin angezeigt."
|
||||
"message": "Überspringt automatisch Bestätigungen mit geringem Risiko, wie z. B. die doppelte Installation von Modpacks, das Löschen normaler Inhalte, Massenaktualisierungen, das Trennen von Modpacks und Reparaturen. Warnungen bei gefährlichen Aktionen werden weiterhin angezeigt."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Unwichtige Warnungen überspringen"
|
||||
@@ -258,10 +204,10 @@
|
||||
"message": "Modpack exportieren"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Name des Modpacks"
|
||||
"message": "Modpackname"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Name des Modpacks"
|
||||
"message": "Modpackname"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Versionsnummer"
|
||||
@@ -285,7 +231,7 @@
|
||||
"message": "Wird finalisiert"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "Installation in Warteschlange"
|
||||
"message": "Instanz wird vorbereitet"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Java wird vorbereitet"
|
||||
@@ -297,7 +243,7 @@
|
||||
"message": "Java {version} wird extrahiert"
|
||||
},
|
||||
"app.install.phase.preparing_java.fetching-metadata": {
|
||||
"message": "Java {version} wird abgerufen"
|
||||
"message": "Java {version} wird heruntergeladen"
|
||||
},
|
||||
"app.install.phase.preparing_java.resolving": {
|
||||
"message": "Java {version} wird vorbereitet"
|
||||
@@ -425,38 +371,29 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Durchsuche {count} Welten..."
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "Nicht Installieren"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Inhalte benötigt"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Installieren zum Spielen"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Trotzdem Installieren"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Installieren"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Diese Einladung wurde von einem anderen Modrinth-Nutzer erstellt, nicht von Modrinth. Nimm nur Einladungen von Personen an, denen du vertraust."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# Mod} other {# Mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Eine Datei wird nur geprüft, wenn sie auf Modrinth veröffentlicht wird, unabhängig von ihrem Dateiformat (auch .mrpack)."
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Benötigtes Modpack"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Dieser Server benötigt Mods zum Spielen. Klicke auf Installieren um die nötigen Dateien von Modrinth herunterzuladen und danach direkt dem Server beizutreten."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Geteilte Instanz"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Dieses Server-Modpack enthält Dateien, die nicht auf Modrinth veröffentlicht sind. Wir empfehlen dringend, nur Dateien aus vertrauenswürdigen Quellen zu installieren."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "Warnung vor unbekannten Dateien"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Nicht erkannte Dateien"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Geteilte Serverinstanz"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Inhalte ansehen"
|
||||
@@ -464,8 +401,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Aktualisieren zum Spielen"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Entfernt"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Aktualisierung erforderlich"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Zum Spielen von {name} ist eine Aktualisierung erforderlich. Bitte aktualisiere auf die neueste Version, um das Spiel zu starten."
|
||||
@@ -473,27 +410,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Dieses Projekt ist bereits installiert"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Version wechseln"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Zurück zum Entdecken"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Inhalt in Instanz installieren"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Alle Versionen"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Im Browser herunterladen"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "Wird installiert"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Bereits installiert"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Entwicklermodus aktiviert."
|
||||
},
|
||||
@@ -614,9 +536,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Chaos Cubed"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
@@ -669,7 +588,7 @@
|
||||
"message": "Skin-Auswahl"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} wurde heruntergeladen. Jetzt neu laden, um sofort zu aktualisieren, oder beim Schließen der Modrinth-App automatisch aktualisieren."
|
||||
"message": "Modrinth App v{version} wurde heruntergeladen. Neu laden, um jetzt zu aktualisieren, oder automatisch aktualisieren, wenn du die Modrinth App schließt."
|
||||
},
|
||||
"app.update-popup.body.linux": {
|
||||
"message": "Modrinth App v{version} ist verfügbar. Verwende deinen Paketmanager, um die neuesten Funktionen und Fehlerbehebungen zu installieren!"
|
||||
@@ -702,7 +621,7 @@
|
||||
"message": "example.modrinth.gg"
|
||||
},
|
||||
"app.world.server-modal.select-an-option": {
|
||||
"message": "Wähle eine Option"
|
||||
"message": "Wählen eine Option"
|
||||
},
|
||||
"app.world.world-item.incompatible-version": {
|
||||
"message": "Inkompatible Version {version}"
|
||||
@@ -1111,5 +1030,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader vom Server vorgegeben"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Eine Datei wird nur geprüft, wenn sie auf Modrinth hochgeladen wird, unabhängig von ihrem Dateiformat (auch .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Diese Warnung nicht mehr anzeigen"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Installation bestätigen"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Trotzdem installieren"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Schadsoftware wird häufig über Modpack-Dateien verbreitet, indem diese auf Plattformen wie Discord geteilt werden."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Wir konnten diese Datei auf Modrinth nicht finden. Wir empfehlen dringend, nur Dateien aus vertrauenswürdigen Quellen zu installieren."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Warnung vor unbekannter Datei"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,81 +11,27 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Hide more running instances"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Copied"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Copy details"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Dismiss"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "Install failed"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "Installation failed due to app closing."
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "Installation failed due to a network error."
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "Installation failed due to an unknown error."
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Open instance"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Retry"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Canceled due to app closing"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Couldn't read modpack"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Canceled"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "Cleanup didn't finish"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Couldn't download files"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "Downloaded file is corrupt"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Couldn't save files"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "Download couldn't finish"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "Instance couldn't be found"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "File path is invalid"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "Modpack data invalid"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "Modpack files have invalid metadata"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "Java setup couldn't finish"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "Loader setup failed"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "Couldn't update local data"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "Minecraft setup failed"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "Couldn't reach Modrinth"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "No permission to write"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "Couldn't download pack"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "Something went wrong"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Unknown instance"
|
||||
},
|
||||
@@ -285,7 +231,7 @@
|
||||
"message": "Finalizing"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "Queued to install"
|
||||
"message": "Preparing instance"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Preparing Java"
|
||||
@@ -425,38 +371,29 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Search {count} worlds..."
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "Dont install"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Content required"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Install to play"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Install anyway"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Install"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "This invite was created by another Modrinth user, not Modrinth. Only accept invites from people you trust."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} other {# mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "A file is only reviewed if it’s published to Modrinth, regardless of its file format (including .mrpack)."
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Required modpack"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "This server requires mods to play. Click Install to set up the required files from Modrinth, then launch directly into the server."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Shared instance"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "This server modpack contains files that aren’t published on Modrinth. We strongly recommend only installing files from sources you trust."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "Unknown files warning"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Unrecognized files"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Shared server instance"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "View contents"
|
||||
@@ -464,8 +401,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Update to play"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Removed"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Update required"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "An update is required to play {name}. Please update to the latest version to launch the game."
|
||||
@@ -779,33 +716,6 @@
|
||||
"friends.sign-in-to-add-friends": {
|
||||
"message": "<link>Sign in to a Modrinth account</link> to add friends and see what they're playing!"
|
||||
},
|
||||
"instance.action.create-shortcut": {
|
||||
"message": "Create shortcut"
|
||||
},
|
||||
"instance.action.export-modpack": {
|
||||
"message": "Export modpack"
|
||||
},
|
||||
"instance.action.launch-instance": {
|
||||
"message": "Launch instance"
|
||||
},
|
||||
"instance.action.more-actions": {
|
||||
"message": "More actions"
|
||||
},
|
||||
"instance.action.open-folder": {
|
||||
"message": "Open folder"
|
||||
},
|
||||
"instance.action.repair": {
|
||||
"message": "Repair"
|
||||
},
|
||||
"instance.action.settings": {
|
||||
"message": "Instance settings"
|
||||
},
|
||||
"instance.action.starting": {
|
||||
"message": "Starting..."
|
||||
},
|
||||
"instance.action.stopping": {
|
||||
"message": "Stopping..."
|
||||
},
|
||||
"instance.add-server.add-and-play": {
|
||||
"message": "Add and play"
|
||||
},
|
||||
@@ -848,9 +758,6 @@
|
||||
"instance.files.save-as": {
|
||||
"message": "Save as..."
|
||||
},
|
||||
"instance.playtime.never-played": {
|
||||
"message": "Never played"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Address"
|
||||
},
|
||||
@@ -1141,5 +1048,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader is provided by the server"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "A file is only reviewed if it’s uploaded to Modrinth, regardless of its file format (including .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Don't show this warning again"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Confirm installation"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Install anyway"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Malware is often distributed through modpack files by sharing them on platforms like Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "We couldn't find this file on Modrinth. We strongly recommend only installing files from sources you trust."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Unknown file warning"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,81 +11,27 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Ocultar más instancias en ejecución"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Copiado"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Copiar detalles"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Descartar"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "La instalación falló"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "La instalación falló porque la aplicación se cerró."
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "La instalación falló debido a un error de red."
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "La instalación falló debido a un error desconocido."
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Abrir instancia"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Reintentar"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Cancelado debido al cierre de la aplicación"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "No se pudo leer el modpack"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Cancelado"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "La limpieza no se completó"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "No se pudieron descargar los archivos"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "El archivo descargado está dañado"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "No se pudieron guardar los archivos"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "No se pudo completar la descarga"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "No se pudo encontrar la instancia"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "La ruta del archivo no es válida"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "Los datos del modpack no son válidos"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "Los archivos del modpack tienen metadatos no válidos"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "No se pudo completar la configuración de Java"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "No se pudo configurar el cargador"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "No se pudieron actualizar los datos locales"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "La instalación de Minecraft falló"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "No pude comunicarme con Modrinth"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "No tiene permiso para escribir"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "No se pudo descargar el modpack"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "Algo salió mal"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Instancia desconocida"
|
||||
},
|
||||
@@ -234,7 +180,7 @@
|
||||
"message": "Descubrir servidores"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Ocultar los servidores ya agregados"
|
||||
"message": "Ocultar servidores ya añadidos"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpacks"
|
||||
@@ -285,7 +231,7 @@
|
||||
"message": "Finalizando"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "En cola para instalarse"
|
||||
"message": "Preparando la instancia"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Preparando Java"
|
||||
@@ -425,38 +371,29 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Buscar en {count} mundos..."
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "No instalar"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Contenido requerido"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Instalar para jugar"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Instalar de todos modos"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Instalar"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Esta invitación la creó otro usuario de Modrinth, no Modrinth. Solo acepta invitaciones de personas en las que confíes."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} other {# mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Un archivo solo se revisa si se publica en Modrinth, sin importar su formato (incluido el .mrpack)."
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Modpack requerido"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Este servidor requiere mods para poder jugar. Haz clic en Instalar para configurar los archivos requeridos desde Modrinth, después se ejecutará para entrar directamente al servidor."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Instancia compartida"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Este modpack para servidor contiene archivos que no están publicados en Modrinth. Recomendamos encarecidamente instalar únicamente archivos de fuentes de confianza."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "Advertencia sobre archivos desconocidos"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Archivos no reconocidos"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Instancia de servidor compartida"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Ver contenidos"
|
||||
@@ -464,8 +401,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Actualizar para jugar"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Eliminado"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Actualización requerida"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Se requiere una actualización para jugar {name}. Por favor, actualiza a la versión más reciente para iniciar el juego."
|
||||
@@ -473,27 +410,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Este proyecto ya está instalado"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Cambiar versión"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Volver al explorador"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Instalar contenido a la instancia"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Todas las versiones"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Descargar en el navegador"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "Instalando"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Ya instalado"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Modo desarrollador activado."
|
||||
},
|
||||
@@ -614,9 +536,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Constructores y Biomas"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Caos al cubo"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Persigue los Cielos"
|
||||
},
|
||||
@@ -1111,5 +1030,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "El loader es proporcionado por el servidor"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Un archivo solo es revisado si es subido a Modrinth, independientemente de su formato de archivo (incluyendo .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "No volver a mostrar esta advertencia"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Confirmar instalación"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Instalar de todos modos"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "El malware a menudo es distribuido mediante modpacks compartidos en aplicaciones como Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "No pudimos encontrar este archivo en Modrinth. Recomendamos solo instalar archivos de sitios de confianza."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Advertencia de archivo desconocido"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,17 +14,14 @@
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Descartar"
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Abrir instancia"
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "La instalación falló"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Reintentar"
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "La instalación falló porque la aplicación se cerró."
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Instancia desconocida"
|
||||
},
|
||||
"app.action-bar.installs": {
|
||||
"message": "Instalaciones"
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "La instalación falló debido a un error de red."
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "Establecer como instancia principal"
|
||||
@@ -116,12 +113,6 @@
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Mostrar tiempo de juego"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Automáticamente omite confirmaciones de bajo riesgo como modpacks duplicados, eliminación de contenido normal, actualizaciones masivas, desvinculando modpacks, y mensajes de reparación. Advertencias importantes seguirán siendo mostradas."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Omitir advertencias no esenciales"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Activa la posibilidad de alternar la barra lateral."
|
||||
},
|
||||
@@ -167,6 +158,9 @@
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Descubrir servidores"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Ocultar servidores ya añadidos"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpacks"
|
||||
},
|
||||
@@ -269,6 +263,9 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Buscar {count} mundos..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Contenido obligatorio"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Instala para jugar"
|
||||
},
|
||||
@@ -278,15 +275,27 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} other {# mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Modpack requerido"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Este servidor requiere ciertos mods. Pulsa Instalar para instalar los archivos requeridos de Modrinth y luego el launcher te enviara directo al servidor."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Instancia compartida"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Instancia de servidor compartida"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Ver contenido"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Actualiza para jugar"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Actualización requerida"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Una actualización es requerida para jugar {name}. Por favor actualízala a la versión más reciente para ejecutar el juego."
|
||||
},
|
||||
@@ -910,5 +919,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader proporcionado por el servidor"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Un archivo solo es revisado si es subido a Modrinth, independientemente de su formato de archivo (incluyendo .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "No mostrar esta advertencia otra vez"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Confirmar instalación"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Instalar de todos modos"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "El malware es normalmente distribuido por archivos de modpack que son normalmente compartidas en aplicaciones como Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "No pudimos encontrar este archivo en Modrinth. Recomendamos solo instalar archivos de sitios de confianza."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Advertencia de archivo desconocido"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,18 @@
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Hylkää"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "Asennus epäonnistui"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "Asennus epäonnistui sovelluksen sulkeutumisen vuoksi."
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "Asennus epäonnistui verkkovirheen vuoksi."
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "Asennus epäonnistui tuntemattoman virheen vuoksi."
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Avaa instanssi"
|
||||
},
|
||||
@@ -167,6 +179,9 @@
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Löydä palvelimia"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Piilota lisätyt palvelimet"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modipaketit"
|
||||
},
|
||||
@@ -188,6 +203,9 @@
|
||||
"app.export-modal.header": {
|
||||
"message": "Vie modipaketti"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Modipaketin nimi"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Modipaketin nimi"
|
||||
},
|
||||
@@ -212,6 +230,9 @@
|
||||
"app.install.phase.finalizing": {
|
||||
"message": "Viimeistellään"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "Valmistellaan instanssia"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Valmistellaan Javaa"
|
||||
},
|
||||
@@ -350,6 +371,9 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Hae {count} maailmasta..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Sisältö vaaditaan"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Asenna pelataksesi"
|
||||
},
|
||||
@@ -359,15 +383,27 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} other {# modia}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Vaadittu modipaketti"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Tämä palvelin vaatii modeja toimiakseen. Klikkaa Asenna ladataksesi vaaditut tiedostot Modrinthista, ja käynnistä peli suoraan palvelimelle."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Jaettu instanssi"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Jaettu palvelininstanssi"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Tarkastele sisältöä"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Päivitä pelataksesi"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Päivitys vaaditaan"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Pävitys vaaditaan pelataksesi {name}. Päivitä viimeisimpään versioon pelataksesi."
|
||||
},
|
||||
@@ -994,5 +1030,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Modialusta on palvelimen tarjoama"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Tiedosto tarkistetaan vain jos se on ladattu Modrinthiin, riippumatta tiedoston muodosta (mukaanlukien .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Älä näytä tätä varoitusta uudestaan"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Vahvista asennus"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Asenna jokatapauksessa"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Haittaohjelmia levitetään usein modipaketti tiedostojen kautta jakamalla niitä alustoilla kuten Discordissa."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Emme löytäneet tätä tiedostoa Modrinthista. Suosittelemme vahvasti että asennat tiedostoja vain lähteistä joihin luotat."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Tuntematon tiedosto varoitus"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,9 +11,6 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Itago ang mas marami pang tumatakbong instansiya"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Subukan muli"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "Gumawa ng pangunahing instansiya"
|
||||
},
|
||||
@@ -146,6 +143,9 @@
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Tumuklas ng mga server"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Itago ang mga nailagay na mga servers"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpacks"
|
||||
},
|
||||
@@ -164,6 +164,9 @@
|
||||
"app.export-modal.header": {
|
||||
"message": "Iluwas ang modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Pangalan ng Modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Pangalan ng modpack"
|
||||
},
|
||||
@@ -242,6 +245,9 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Hanapin sa {count} mundo..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Nangangailangan ng kontento"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Mag-install upang malaro"
|
||||
},
|
||||
@@ -251,15 +257,27 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} other {# na mod}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Kinailangan na modpack"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Ang server rna ito ay nangangailangan ng mga mod upang makalaro. Pindutin ang install upang maihanda ang mga kinakailangang file galing sa Modrinth, matapos ay ilunsad nang diretso sa server."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Binahaging instansiya"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Binahaging instansiyang pang-server"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Tingnan ang mga kontento"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Mag-update upang malaro"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Kailangang mag-update"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Kailangang mag-update upang malaro ang {name}. Mangyaring mag-update sa pinakabagong bersiyon upang ma-launch ang laro."
|
||||
},
|
||||
@@ -549,7 +567,7 @@
|
||||
"message": "Mga launch hook"
|
||||
},
|
||||
"instance.settings.tabs.hooks.custom-hooks": {
|
||||
"message": "Mga pasadyang launch hook"
|
||||
"message": "Mga custom na launch hook"
|
||||
},
|
||||
"instance.settings.tabs.hooks.description": {
|
||||
"message": "Binibigyan-daan ng mga hook ang mga ekspertong tagagamit na makapagtakbo ng mga pansistemang utos o system command bago at pagkatapos ma-launch ang laro."
|
||||
@@ -612,7 +630,7 @@
|
||||
"message": "Window"
|
||||
},
|
||||
"instance.settings.tabs.window.custom-window-settings": {
|
||||
"message": "Mga setting sa pasadyang window"
|
||||
"message": "Mga setting sa custom na window"
|
||||
},
|
||||
"instance.settings.tabs.window.fullscreen": {
|
||||
"message": "Fullscreen"
|
||||
@@ -721,5 +739,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Ang loader ay handog na ng server"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Ang file ay nasusuri lamang kapag ito ay na-upload sa Modrinth, walang pili sa file format nito (kabilang na ang .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Huwag ipakita ang babalang ito ulit"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Kumpirmahin ang installation"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "I-install pa rin"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Ang malware ay madalas naidadala sa mga modpack files sa pamamagitan ng pag-bigay ng mga ito sa mga platforms kagaya ng Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Hindi namin mahanap ang file na ito sa Modrinth. Mahalagang mag-install ka lamang ng files galing sa mga mapagkakatiwalang sources."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Hindi kilalang file"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,83 +9,29 @@
|
||||
"message": "Téléchargements"
|
||||
},
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Masquer plus d'instances en cours d'exécution"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Copié"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Copier les détails"
|
||||
"message": "Masquer plus d'instances en exécution"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Rejeter"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "Échec de l'installation"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "Échec de l'installation dû à la fermeture de l'app."
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "Échec de l'installation dû à une erreur réseau."
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "Échec de l'installation dû à une erreur inconnue."
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Ouvrir l'instance"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Réessayer"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Annulé en raison de la fermeture de l'application"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Impossible de lire le modpack"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Annulé"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "Le nettoyage n'a pas terminé"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Impossible de télécharger les fichiers"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "Le fichier téléchargé est corrompu"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Impossible de sauvegarder les fichiers"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "Impossible de terminer le téléchargement"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "L'instance est introuvable"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "Le chemin d'accès au fichier est invalide"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "Les données du modpack sont invalides"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "Les fichiers du modpack contiennent des métadonnées invalides"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "L'installation de Java n'a pas pu se terminer"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "La mise en place du loader a échoué"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "Impossible de mettre à jour les données locales"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "La mise en place de Minecraft a échoué"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "Impossible d'atteindre les serveurs Modrinth"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "Aucune permission d'écriture"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "Impossible de télécharger le pack"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "Quelque chose s'est mal passé"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Instance inconnue"
|
||||
},
|
||||
@@ -93,22 +39,22 @@
|
||||
"message": "Installations"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "Définir en tant qu'instance principale"
|
||||
"message": "Définir en tante qu'instance première"
|
||||
},
|
||||
"app.action-bar.no-instances-running": {
|
||||
"message": "Aucune instance en cours d'exécution"
|
||||
"message": "Aucune instance en exécution"
|
||||
},
|
||||
"app.action-bar.offline": {
|
||||
"message": "Hors ligne"
|
||||
},
|
||||
"app.action-bar.primary-instance": {
|
||||
"message": "Instance principale"
|
||||
"message": "Instance première"
|
||||
},
|
||||
"app.action-bar.reload-to-update": {
|
||||
"message": "Recharger pour mettre à jour"
|
||||
},
|
||||
"app.action-bar.show-more-running-instances": {
|
||||
"message": "Montrer plus d'instances en cours d'exécution"
|
||||
"message": "Montrer plus d'instances en exécution"
|
||||
},
|
||||
"app.action-bar.stop-instance": {
|
||||
"message": "Arrêter l'instance"
|
||||
@@ -234,7 +180,7 @@
|
||||
"message": "Découvrir des serveurs"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Masquer les serveurs déjà installés"
|
||||
"message": "Masquer les serveurs déjà ajoutés"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpacks"
|
||||
@@ -285,7 +231,7 @@
|
||||
"message": "Finalisation"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "En attente d'installation"
|
||||
"message": "Préparation de l'instance"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Préparation de Java"
|
||||
@@ -425,38 +371,29 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Rechercher {count} mondes..."
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "Ne pas installer"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Contenu requis"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Installer pour jouer"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Installer quand même"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Installer"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Cette invitation a été crée par un autre utilisateur Modrinth, pas par Modrinth. N'acceptez seulement les invitations de personnes en qui vous avez confiance."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} other {# mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Un fichier est seulement examiné s'il est publié sur Modrinth, peu importe son extension (y compris .mrpack)."
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Modpack requis"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Ce serveur a besoin de mods pour jouer. Cliquez sur Installer pour mettre en place les fichiers requis depuis Modrinth, puis lancez directement dans le serveur."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Instance partagée"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Ce modpack de serveur contient des fichiers qui ne sont pas publiés sur Modrinth. Nous recommandons fortement de seulement installer des fichiers de sources en qui vous avez confiance."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "Avertissement de fichiers inconnus"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Fichiers non reconnus"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Instance serveur partagée"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Voir le contenu"
|
||||
@@ -464,8 +401,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Mettre à jour pour jouer"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Supprimé"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Mise à jour requise"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Une mise à jour est requise pour jouer à {name}. Veuillez mettre à jour à la dernière version pour lancer le jeu."
|
||||
@@ -473,27 +410,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Ce projet a déjà été installé"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Changer de version"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Retour vers la page découvrir"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Installer du contenu à l'instance"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Toutes les versions"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Télécharger dans le navigateur"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "Installation"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Déjà installé"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Mode développeur activé."
|
||||
},
|
||||
@@ -614,9 +536,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Cubes du chaos"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chassez les cieux"
|
||||
},
|
||||
@@ -645,7 +564,7 @@
|
||||
"message": "Striding Hero"
|
||||
},
|
||||
"app.skins.section.the-copper-age": {
|
||||
"message": "L'âge du cuivre"
|
||||
"message": "The Copper Age"
|
||||
},
|
||||
"app.skins.section.the-garden-awakens": {
|
||||
"message": "L'éveil du jardin"
|
||||
@@ -1108,5 +1027,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Le loader est procuré par le serveur"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Un fichier n’est révisé que s’il est téléchargé sur Modrinth, quel que soit son format de fichier (y compris .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Ne plus m'avertir à ce sujet"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Confirmer l'installation"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Installer tout de même"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Les logiciels malveillants sont souvent distribués via des fichiers modpack en les partageant sur des plateformes comme Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Nous ne pouvions pas trouver ce fichier sur Modrinth. Nous vous recommandons fortement de n'installer que des fichiers de sources de confiance."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Avertissement fichier inconnu"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +59,9 @@
|
||||
"app.export-modal.header": {
|
||||
"message": "יצוא חבילת מודים"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "שם חבילת המודים"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "שם חבילת המודים"
|
||||
},
|
||||
@@ -137,6 +140,9 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "חיפוש ב-{count} עולמות..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "תוכן נדרש"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "צריך להתקין כדי לשחק"
|
||||
},
|
||||
@@ -146,15 +152,27 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {מוד אחד} other {# מודים}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "חבילת מודים נדרשת"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "שרת זה דורש מודים כדי לשחק. לחץ על \"התקן\" כדי להגדיר את הקבצים הנדרשים מ-Modrinth, ולאחר מכן הפעל ישירות לשרת."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "התקנה משותפת"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "התקנת שרת משותפת"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "הצג תוכן"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "צריך לעדכן כדי לשחק"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "עדכון נדרש"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "עדכון נדרש כדי לשחק ב{name}. ניתן להתחיל את המשחק רק לאחר עדכון לגרסה החדשה."
|
||||
},
|
||||
|
||||
@@ -11,86 +11,11 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "További futó példányok elrejtése"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Másolva"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Részletek másolása"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Elutasítás"
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Példány megnyitása"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Újra"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Az alkalmazás bezárása miatt megszakítva"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Nem sikerült beolvasni a modcsomagot"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Megszakítva"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "A tisztítás nem fejeződött be"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Nem sikerült letölteni a fájlokat"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "A letöltött fájl sérült"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Nem sikerült elmenteni a fájlokat"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "A letöltés nem sikerült"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "A játékprofil nem található"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "A fájl elérési útja érvénytelen"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "A modcsomag adatai érvénytelenek"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "A modcsomag fájljainak metaadatai érvénytelenek"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "A Java telepítése nem sikerült"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "A betöltő beállítása sikertelen volt"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "A helyi adatok frissítése nem sikerült"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "A Minecraft telepítése sikertelen volt"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "Nem sikerült elérni Modrinthot"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "Nincs felülírási jogosultság"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "Nem sikerült letölteni a csomagot"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "Valami hiba történt"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Ismeretlen játékprofil"
|
||||
},
|
||||
"app.action-bar.installs": {
|
||||
"message": "Telepítések"
|
||||
"message": "Ismeretlen profil"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "Beállítás elsődleges példányként"
|
||||
@@ -123,13 +48,13 @@
|
||||
"message": "Példányok megtekintése"
|
||||
},
|
||||
"app.action-bar.view-logs": {
|
||||
"message": "Naplózások megtekintése"
|
||||
"message": "Naplók megtekintése"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Lehetővé teszi olyan speciális megjelenítési effektusok használatát, mint például az elmosódás, amelyek hardveres gyorsítás nélkül teljesítménycsökkenést okozhatnak."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Haladó megjelenítési beállítások"
|
||||
"message": "Fejlett renderelés"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Válaszd ki a Modrinth Apphoz a kívánt színsémát."
|
||||
@@ -159,7 +84,7 @@
|
||||
"message": "A kezdőlap „Folytasd itt” részében a legújabb világok is megtalálhatók."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "„Folytasd itt” a világokat is"
|
||||
"message": "Visszaugrás a világokba"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Minimalizáld az indítót a Minecraft indításakor."
|
||||
@@ -177,17 +102,11 @@
|
||||
"message": "Válassz egy lehetőséget"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Megmutatja, mennyi időt töltöttél egy példányban."
|
||||
"message": "Megmutatja, mennyi időt töltöttél játszva egy profillal."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Játékidő megjelenítése"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Az alacsony kockázatú megerősítéseket – például a modcsomagok ismételt telepítését, a szokásos tartalomtörlést, a tömeges frissítéseket, a modcsomagok kapcsolatának megszüntetését és a javítási felhívásokat – a rendszer automatikusan kihagyja. A veszélyes figyelmeztetéseket továbbra is megjeleníti."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Hagyd ki a lényegtelen figyelmeztetéseket"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Lehetővé teszi az oldalsáv be- és kikapcsolását."
|
||||
},
|
||||
@@ -234,7 +153,7 @@
|
||||
"message": "Szerverek böngészése"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "A már hozzáadott szerverek elrejtése"
|
||||
"message": "Már hozzáadott szerverek elrejtése"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modcsomagok"
|
||||
@@ -243,7 +162,7 @@
|
||||
"message": "A tartalom hozzáadása ronthatja a kompatibilitást a szerverhez való csatlakozáskor. A hozzáadott tartalom elveszik, ha frissíted a szerverprofil tartalmát."
|
||||
},
|
||||
"app.browse.server.installing": {
|
||||
"message": "Letöltés"
|
||||
"message": "Letöltés..."
|
||||
},
|
||||
"app.content-install.no-compatible-versions": {
|
||||
"message": "Nincs a(z) {compatibilityLabel} verziónak megfelelő elérhető verzió. Válassz ki egy verziót, ha mégis telepíteni szeretnéd. A függőségek nem települnek automatikusan."
|
||||
@@ -258,7 +177,7 @@
|
||||
"message": "Modcsomag exportálása"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Modcsamag neve"
|
||||
"message": "A modcsomag neve"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "A modcsomag neve"
|
||||
@@ -269,62 +188,11 @@
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.install.phase.downloading_content": {
|
||||
"message": "Tartalom letöltése"
|
||||
},
|
||||
"app.install.phase.downloading_minecraft": {
|
||||
"message": "Minecraft letöltése"
|
||||
},
|
||||
"app.install.phase.downloading_pack_file": {
|
||||
"message": "Csomagfájlok letöltése"
|
||||
},
|
||||
"app.install.phase.extracting_overrides": {
|
||||
"message": "Felülírások kibontása"
|
||||
},
|
||||
"app.install.phase.finalizing": {
|
||||
"message": "Befejezés"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "Telepítésre vár"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Java előkészítése"
|
||||
},
|
||||
"app.install.phase.preparing_java.downloading": {
|
||||
"message": "A Java {version} letöltése..."
|
||||
},
|
||||
"app.install.phase.preparing_java.extracting": {
|
||||
"message": "A Java {version} kibontása..."
|
||||
},
|
||||
"app.install.phase.preparing_java.fetching-metadata": {
|
||||
"message": "A Java {version} előkészítése..."
|
||||
},
|
||||
"app.install.phase.preparing_java.resolving": {
|
||||
"message": "A Java {version} előkészítése..."
|
||||
},
|
||||
"app.install.phase.preparing_java.validating": {
|
||||
"message": "A Java {version} ellenőrzése"
|
||||
},
|
||||
"app.install.phase.reading_pack_manifest": {
|
||||
"message": "Csomag adati kiolvasása"
|
||||
},
|
||||
"app.install.phase.resolving_loader": {
|
||||
"message": ""
|
||||
},
|
||||
"app.install.phase.resolving_minecraft": {
|
||||
"message": "Minecraft Betöltése"
|
||||
},
|
||||
"app.install.phase.resolving_pack": {
|
||||
"message": "Tartalom betöltése"
|
||||
},
|
||||
"app.install.phase.rolling_back": {
|
||||
"message": "Visszavonás"
|
||||
},
|
||||
"app.install.phase.running_loader_processors": {
|
||||
"message": "Betöltő folyamatok futtatása"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "A profilodhoz tartozó összes adat véglegesen törlődik, beleértve a világokat, a beállításokat és az összes telepített tartalmat."
|
||||
"message": "Az profilodhoz tartozó összes adat véglegesen törlődik, beleértve a világokat, a beállításokat és az összes telepített tartalmat."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Ezt a műveletet nem lehet visszavonni"
|
||||
@@ -347,15 +215,6 @@
|
||||
"app.instance.modpack-already-installed.instance": {
|
||||
"message": "Példány"
|
||||
},
|
||||
"app.instance.mods.bulk-update.downloading-projects": {
|
||||
"message": "{current, number}/{total, number} projekt letöltése..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.finishing": {
|
||||
"message": "Frissítés befejezése..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.resolving-versions": {
|
||||
"message": "Verziók meghatározása..."
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "projekt"
|
||||
},
|
||||
@@ -380,18 +239,6 @@
|
||||
"app.instance.worlds.browse-servers": {
|
||||
"message": "Szerverek böngészése"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.delete-button": {
|
||||
"message": "Törlés"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.title": {
|
||||
"message": "Világ törlése"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-body": {
|
||||
"message": "Ez a világ véglegesen törölve lesz ebből a példányból. Ezt NEM tudod visszavonni!"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-header": {
|
||||
"message": "{name} törlése"
|
||||
},
|
||||
"app.instance.worlds.filter-modded": {
|
||||
"message": "Modolt"
|
||||
},
|
||||
@@ -410,53 +257,32 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "Nincs szerver vagy világ"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Szerver eltávolítása"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.title": {
|
||||
"message": "Szerver eltávolítása"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-body": {
|
||||
"message": "Ez a szerver el lesz távolítva a szerverlistádból és a játékbeli szerverlistából is. Később újra hozzáadhatod, ha tudod a címet."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-header": {
|
||||
"message": "{name} eltávolítása"
|
||||
},
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Keresés {count} világ között..."
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "Ne töltse le"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Szükséges tartalom"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Telepítés a játékhoz"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Telepítés mindenképpen"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Telepítés"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Ezt a meghívót nem a Modrinth, hanem egy másik Modrinth-felhasználó hozta létre. Csak olyan személyektől fogadd el a meghívásokat, akikben megbízol."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count} mod"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Egy fájlt csak akkor vizsgálnak meg, ha azt a Modrinth-en közzétették, függetlenül a fájlformátumtól (beleértve a .mrpack formátumot is)."
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Szükséges modcsomag"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Ehhez a szerverhez modok szükségesek a játékhoz. Kattints a Telepítés gombra, hogy telepítsd a szükséges fájlokat a Modrinth-ról, majd indítsd el közvetlenül a szervert."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Megosztott profil"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Ez a szerver-modpack olyan fájlokat tartalmaz, amelyek nem szerepelnek a Modrinth oldalon. Határozottan javasoljuk, hogy kizárólag olyan forrásokból telepíts fájlokat, amelyekben megbízol."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "Figyelmeztetés ismeretlen fájlokról"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Felismerhetetlen fájlok"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Megosztott szerverprofil"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Tartalom megtekintése"
|
||||
@@ -464,8 +290,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Frissítsd a játékhoz"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Törölve"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Frissítés szükséges"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Frissítés szükséges ehhez: {name}. Kérlek, frissíts a legújabb verzióra a játék elindításához."
|
||||
@@ -473,27 +299,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Ez a projekt már telepítve van"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Verzió váltása"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Vissza a böngészéshez"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Tartalom telepítése a profilba"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Összes verzió"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Letöltés a böngészőben"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "Telepítés..."
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Már le van töltve"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Fejlesztői mód bekapcsolva."
|
||||
},
|
||||
@@ -605,18 +416,9 @@
|
||||
"app.skins.rate-limit.title": {
|
||||
"message": "Lassíts!"
|
||||
},
|
||||
"app.skins.reorder-error.text": {
|
||||
"message": "A kinézeted sorrendjét nem sikerült menteni."
|
||||
},
|
||||
"app.skins.reorder-error.title": {
|
||||
"message": "A skinek átrendezése sikertelen"
|
||||
},
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Chaos Cubed"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
@@ -660,7 +462,7 @@
|
||||
"message": "Kérlek jelentkezz be a Minecraft-fiókodba, hogy használni tudd a Modrinth App kinézetkezelési funkcióit."
|
||||
},
|
||||
"app.skins.sign-in.rinthbot-alt": {
|
||||
"message": "Izgatott Modrinth bot"
|
||||
"message": "Izgatott Modrinth-bot"
|
||||
},
|
||||
"app.skins.sign-in.title": {
|
||||
"message": "Kérlek jelentkezz be"
|
||||
@@ -906,7 +708,7 @@
|
||||
"message": "Kiadás"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release.description": {
|
||||
"message": "Csak a 'kiadás' verziók fognak megjelenni az elérhető frissítések között."
|
||||
"message": "Csak a release verziók fognak megjelenni az elérhető frissítések között."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.select": {
|
||||
"message": "Válaszd ki a frissítési csatornát"
|
||||
@@ -993,7 +795,7 @@
|
||||
"message": "Hozzárendelt memória"
|
||||
},
|
||||
"instance.settings.tabs.java.java-path-placeholder": {
|
||||
"message": "/eleresi/ut/a/javahoz"
|
||||
"message": "/path/to/java"
|
||||
},
|
||||
"instance.settings.tabs.window": {
|
||||
"message": "Ablak"
|
||||
@@ -1034,14 +836,11 @@
|
||||
"instance.worlds.copy_address": {
|
||||
"message": "Cím másolása"
|
||||
},
|
||||
"instance.worlds.create_shortcut": {
|
||||
"message": "Gyorshivatkozás létrehozása"
|
||||
},
|
||||
"instance.worlds.dont_show_on_home": {
|
||||
"message": "Ne mutasd a kezdőlapon"
|
||||
},
|
||||
"instance.worlds.game_already_open": {
|
||||
"message": "A profil már el van indítva"
|
||||
"message": "A példány már el van indítva"
|
||||
},
|
||||
"instance.worlds.hardcore": {
|
||||
"message": "Hardcore mód"
|
||||
@@ -1059,7 +858,7 @@
|
||||
"message": "Csak Minecraft Alpha 1.0.5+-tól tudsz egyből szerverhez csatlakozni"
|
||||
},
|
||||
"instance.worlds.no_singleplayer_quick_play": {
|
||||
"message": "Használj 1.20+ verziót az azonnali egyjátékos módba lépéshez"
|
||||
"message": "Csak Minecraft 1.20+-tól tudsz egyből egyjátékos világba belépni"
|
||||
},
|
||||
"instance.worlds.play_instance": {
|
||||
"message": "Játék a profillal"
|
||||
@@ -1107,9 +906,30 @@
|
||||
"message": "Csak kliensoldali modok adhatók hozzá a szerverprofilhoz"
|
||||
},
|
||||
"search.filter.locked.server-game-version.title": {
|
||||
"message": "A játékverzió a szerver által van megadva"
|
||||
"message": "A játékverziót a szerver biztosítja"
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "A betöltő a szerver által van megadva"
|
||||
"message": "A betöltőt a szerver biztosítja"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Egy fájlt csak akkor vizsgálunk meg, ha azt feltöltik a Modrinthra, függetlenül a fájlformátumtól (beleértve a .mrpack formátumot is)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Ne mutasd újra ezt a figyelmeztetést"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Telepítés megerősítése"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Letöltés mindenképpen"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "A rosszindulatú programokat gyakran modcsomag-fájlokon keresztül terjesztik, például a Discordhoz hasonló platformokon történő megosztás révén."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Ezt a fájlt nem találtuk meg a Modrinthon. Határozottan javasoljuk, hogy kizárólag megbízható forrásokból származó fájlokat telepíts."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Figyelmeztetés ismeretlen fájlról"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,6 +146,9 @@
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Temukan server"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Sembunyikan server yang sudah ditambah"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Paket Mod"
|
||||
},
|
||||
@@ -167,6 +170,9 @@
|
||||
"app.export-modal.header": {
|
||||
"message": "Ekspor paket mod"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Nama Paket Mod"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Nama paket mod"
|
||||
},
|
||||
@@ -245,6 +251,9 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Cari {count} dunia..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Konten diperlukan"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Pasang untuk memainkan"
|
||||
},
|
||||
@@ -254,15 +263,27 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, other {# mod}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Paket mod yang diperlukan"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Mod diperlukan untuk bermain di server ini. Klik pasang untuk menyiapkan berkas-berkas yang diperlukan dari Modrinth, kemudian luncurkan langsung sari server."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Instans terbagi"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Instans server terbagi"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Lihat konten"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Perbarui untuk memainkan"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Perlu diperbarui"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "{name} perlu diperbarui sebelum dimainkan. Mohon perbarui ke versi terkini untuk meluncurkan permainan."
|
||||
},
|
||||
@@ -886,5 +907,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Pemuat disediakan oleh server"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Berkas hanya akan ditinjau bila ia diunggah ke Modrinth, tak peduli format berkasnya (termasuk .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Jangan tampilkan peringatan ini lagi"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Konfirmasi pemasangan"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Tetap pasang"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Program jahat (malware) dibagikan melalui berkas paket mod dengan membagikannya melalui platform seperti Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Kami tidak dapat menemukan berkas ini di Modrinth. Kami sangat menyarankan Anda untuk hanya memasang berkas dari sumber-sumber terpercaya."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Peringatan berkas tidak dikenal"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,81 +11,27 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Mostra meno istanze in esecuzione"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Copiati"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Copia dettagli"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Ignora"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "Installazione fallita"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "Installazione fallita: l'app è stata chiusa."
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "Installazione fallita: errore di rete."
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "Installazione fallita: errore sconosciuto."
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Apri istanza"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Riprova"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Annullato per app chiusa"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Impossibile leggere il pacchetto"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Annullato"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "La pulizia è stata interrotta"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Impossibile scaricare i file"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "Il file scaricato è corrotto"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Impossibile salvare i file"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "Il download è stato interrotto"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "L'istanza non è stata trovata"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "Percorso del file errato"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "Dati del pacchetto non validi"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "Metadati del pacchetto non validi"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "La configurazione di Java è stata interrotta"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "Il loader non è stato configurato"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "Impossibile aggiornare i dati locali"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "Minecraft non è stato configurato"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "Impossibile collegarsi a Modrinth"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "Permessi di scrittura mancanti"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "Impossibile scaricare il pacchetto"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "Qualcosa è andato storto"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Istanza sconosciuta"
|
||||
},
|
||||
@@ -279,13 +225,13 @@
|
||||
"message": "Download del pacchetto"
|
||||
},
|
||||
"app.install.phase.extracting_overrides": {
|
||||
"message": "Estrazione delle sovrascritture"
|
||||
"message": "Estrazione degli override"
|
||||
},
|
||||
"app.install.phase.finalizing": {
|
||||
"message": "Finalizzazione"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "In coda per l'installazione"
|
||||
"message": "Preparazione dell'istanza"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Preparazione di Java"
|
||||
@@ -318,7 +264,7 @@
|
||||
"message": "Risoluzione dei contenuti"
|
||||
},
|
||||
"app.install.phase.rolling_back": {
|
||||
"message": "Annullamento"
|
||||
"message": "Tornando indietro"
|
||||
},
|
||||
"app.install.phase.running_loader_processors": {
|
||||
"message": "Esecuzione dei processori del loader"
|
||||
@@ -422,38 +368,29 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Cerca tra {count} mondi..."
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "Non installare"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Contenuto richiesto"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Installa per continuare"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Installa comunque"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Installa"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Questo invito è stato creato da un utente e non da Modrinth. Accetta solo gli inviti da persone fidate."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count} mod"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Solo i file pubblicati su Modrinth vengono esaminati, qualunque sia il loro formato (.mrpack inclusi)."
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Pacchetto di mod richiesto"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Questo server richiede alcune mod. Clicca Installa per scaricarle direttamente da Modrinth, poi sarai pronto a giocare."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Istanza condivisa"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Questo pacchetto contiene dei file che non sono su Modrinth. Consigliamo di installare file solo da fonti attendibili."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "File sconosciuti"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "File non riconosciuti"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Istanza del server condivisa"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Mostra contenuti"
|
||||
@@ -461,8 +398,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Aggiorna per continuare"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Rimosso"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Aggiornamento richiesto"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "{name} richiede degli aggiornamenti. Installa l'ultima versione per poter giocare."
|
||||
@@ -470,27 +407,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Questo progetto è già stato installato"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Cambia versione"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Torna a Esplora"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Installa il contenuto nell'istanza"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Tutte le versioni"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Scarica col browser"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "Installazione"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Già installate"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Modalità sviluppatore attiva."
|
||||
},
|
||||
@@ -611,9 +533,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Chaos Cubed"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
@@ -1108,5 +1027,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Il loader è determinato dal server"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Solo i file caricati su Modrinth vengono esaminati, qualunque sia il loro formato (.mrpack inclusi)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Non mostrare più questo avviso"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Conferma l'installazione"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Installa comunque"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Spesso i malware vengono nascosti nei pacchetti di mod, poi distribuiti su piattaforme come Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Non è stato possibile trovare questo file su Modrinth. Consigliamo di installare file solo da fonti attendibili."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Tipo di file sconosciuto"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,51 +11,6 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "実行中のインスタンスの一部を非表示"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "コピーしました"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "詳細をコピー"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "閉じる"
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "インスタンスを表示"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "再試行"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "アプリの終了によりキャンセルされました"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "ModPackを読み込むことができませんでした"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "キャンセルしました"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "クリーンアップが完了しませんでした"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "ファイルをダウンロードできませんでした"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "ダウンロードしたファイルが破損しています"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "ファイルを保存できませんでした"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "ダウンロードを完了することができませんでした"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "不明なインスタンス"
|
||||
},
|
||||
"app.action-bar.installs": {
|
||||
"message": "インストール数"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "デフォルトのインスタンスを作成"
|
||||
},
|
||||
@@ -74,9 +29,6 @@
|
||||
"app.action-bar.stop-instance": {
|
||||
"message": "インスタンスを停止"
|
||||
},
|
||||
"app.action-bar.update": {
|
||||
"message": "アップデート"
|
||||
},
|
||||
"app.action-bar.view-active-downloads": {
|
||||
"message": "進行中のダウンロードを表示"
|
||||
},
|
||||
@@ -143,12 +95,6 @@
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "プレイ時間を表示"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Modパックの重複インストール、通常のコンテンツ削除、一括更新、Modパックのリンク解除、修復の促しなど、リスクの低い確認画面は自動的にスキップされます。危険な警告は引き続き表示されます。"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "重要でない警告をスキップ"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "サイドバーの表示/非表示を切り替える機能を有効にします。"
|
||||
},
|
||||
@@ -179,9 +125,6 @@
|
||||
"app.browse.already-added": {
|
||||
"message": "すでに追加済み"
|
||||
},
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "インスタンスに戻る"
|
||||
},
|
||||
"app.browse.discover-content": {
|
||||
"message": "コンテンツを探す"
|
||||
},
|
||||
@@ -206,6 +149,9 @@
|
||||
"app.export-modal.header": {
|
||||
"message": "Modパックを書き出す"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Modパック名"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Modパック名"
|
||||
},
|
||||
@@ -215,9 +161,6 @@
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.install.phase.preparing_java.downloading": {
|
||||
"message": "Java {version} をダウンロードしています"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "インスタンス内のすべてのデータは、ワールド、設定、インストール済みのコンテンツを含め、完全に削除されます。"
|
||||
},
|
||||
@@ -266,9 +209,6 @@
|
||||
"app.instance.worlds.browse-servers": {
|
||||
"message": "サーバーを探す"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-header": {
|
||||
"message": "{name} を削除します"
|
||||
},
|
||||
"app.instance.worlds.filter-modded": {
|
||||
"message": "Mod導入済み"
|
||||
},
|
||||
@@ -290,6 +230,9 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "{count} 個のワールドを検索…"
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "必須コンテンツ"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "インストールしてプレイ"
|
||||
},
|
||||
@@ -299,21 +242,30 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, other {#個のMod}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "必須のModパック"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "このサーバーをプレイするにはModが必要です。インストールをクリックしてModrinthから必要なファイルを設定し、サーバーに接続してください。"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "共有インスタンス"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "共有サーバーインスタンス"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "コンテンツを見る"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "更新してプレイ"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "更新が必要です"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "{name}をプレイするには更新が必要です。ゲームを起動するには最新版に更新してください。"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "すべてのバージョン"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "開発者モードがオンになっています。"
|
||||
},
|
||||
@@ -353,18 +305,9 @@
|
||||
"app.skins.modal.no-cape-tooltip": {
|
||||
"message": "マントなし"
|
||||
},
|
||||
"app.skins.modal.none-cape-option": {
|
||||
"message": "無し"
|
||||
},
|
||||
"app.skins.modal.replace-texture-button": {
|
||||
"message": "アップロード"
|
||||
},
|
||||
"app.skins.modal.save-skin-button": {
|
||||
"message": "スキンを保存する"
|
||||
},
|
||||
"app.skins.modal.saving-tooltip": {
|
||||
"message": "保存しています…"
|
||||
},
|
||||
"app.skins.modal.texture-section": {
|
||||
"message": "テクスチャ"
|
||||
},
|
||||
@@ -623,12 +566,6 @@
|
||||
"instance.settings.tabs.general.name": {
|
||||
"message": "名前"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta": {
|
||||
"message": "ベータ"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release": {
|
||||
"message": "リリース"
|
||||
},
|
||||
"instance.settings.tabs.hooks": {
|
||||
"message": "起動フック"
|
||||
},
|
||||
@@ -808,5 +745,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "ローダーはサーバーによる条件です"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "ファイル形式に関わらず、Modrinthにアップロードされたファイルのみが確認されます。(.mrpackを含む)"
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "この警告を次回から表示しない"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "インストールの確認"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "インストールを続行"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "一般的にマルウェアは、Discord等のプラットフォーム上でModパックファイルを配布して拡散されます"
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "このファイルをModrinth上で見つけることができませんでした。信頼できるソースからインストールすることを強くお勧めします。"
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "不明なファイルの警告"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"message": "Java {version} 다운로드 중"
|
||||
},
|
||||
"app.action-bar.downloading-update": {
|
||||
"message": "업데이트 다운로드 중"
|
||||
"message": "업데이트 다운로드중"
|
||||
},
|
||||
"app.action-bar.downloads": {
|
||||
"message": "다운로드"
|
||||
@@ -11,87 +11,6 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "실행 중인 인스턴스 숨기기"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "복사됨"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "세부 정보 복사"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "무시"
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "인스턴스 열기"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "재시도"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "앱이 종료되어 취소되었습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "모드팩을 읽을 수 없음"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "취소됨"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "파일 정리가 완료되지 않았습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "파일을 다운로드할 수 없습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "다운로드한 파일이 손상되었습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "파일을 저장할 수 없습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "다운로드를 완료할 수 없습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "인스턴스를 찾을 수 없습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "파일 경로가 올바르지 않습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "모드팩 데이터가 올바르지 않습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "모드팩 파일이 올바르지 않은 메타데이터를 가지고 있습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "Java 설치를 완료할 수 없습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "로더 설치에 실패했습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "로컬 데이터를 업데이트할 수 없습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "Minecraft 설치에 실패했습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "Modrinth에 연결할 수 없습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "쓰기 권한이 없습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "팩을 다운로드할 수 없습니다"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "무언가 잘못되었습니다"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "알 수 없는 인스턴스"
|
||||
},
|
||||
"app.action-bar.installs": {
|
||||
"message": "설치"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "기본 인스턴스로 지정"
|
||||
},
|
||||
@@ -104,18 +23,12 @@
|
||||
"app.action-bar.primary-instance": {
|
||||
"message": "기본 인스턴스"
|
||||
},
|
||||
"app.action-bar.reload-to-update": {
|
||||
"message": "업데이트하려면 다시 로드"
|
||||
},
|
||||
"app.action-bar.show-more-running-instances": {
|
||||
"message": "실행 중인 인스턴스 보이기"
|
||||
},
|
||||
"app.action-bar.stop-instance": {
|
||||
"message": "인스턴스 멈추기"
|
||||
},
|
||||
"app.action-bar.update": {
|
||||
"message": "업데이트"
|
||||
},
|
||||
"app.action-bar.view-active-downloads": {
|
||||
"message": "다운로드 목록 보기"
|
||||
},
|
||||
@@ -182,12 +95,6 @@
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "플레이 시간 표시"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "중복되는 모드팩 설치와 일반적인 콘텐츠 삭제, 동시 업데이트, 모드팩 링크 제거, 프롬프트 복구처럼 리스크가 적은 행위에 대한 확인 절차를 자동으로 넘깁니다. 위험한 경고는 여전히 표시됩니다."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "중요하지 않은 경고 넘기기"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "사이드바를 접거나 펼칠 수 있는 기능을 활성화합니다."
|
||||
},
|
||||
@@ -234,7 +141,7 @@
|
||||
"message": "서버 탐색하기"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "이미 추가한 서버 숨기기"
|
||||
"message": "이미 추가된 서버 숨기기"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "모드팩"
|
||||
@@ -269,60 +176,6 @@
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.install.phase.downloading_content": {
|
||||
"message": "콘텐츠 다운로드 중"
|
||||
},
|
||||
"app.install.phase.downloading_minecraft": {
|
||||
"message": "Minecraft 다운로드 중"
|
||||
},
|
||||
"app.install.phase.downloading_pack_file": {
|
||||
"message": "팩 파일 다운로드 중"
|
||||
},
|
||||
"app.install.phase.extracting_overrides": {
|
||||
"message": "재정의 콘텐츠 추출 중"
|
||||
},
|
||||
"app.install.phase.finalizing": {
|
||||
"message": "마무리 중"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "설치 대기열에 추가됨"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Java 준비 중"
|
||||
},
|
||||
"app.install.phase.preparing_java.downloading": {
|
||||
"message": "Java {version} 다운로드 중"
|
||||
},
|
||||
"app.install.phase.preparing_java.extracting": {
|
||||
"message": "Java {version} 추출 중"
|
||||
},
|
||||
"app.install.phase.preparing_java.fetching-metadata": {
|
||||
"message": "Java {version} 가져오는 중"
|
||||
},
|
||||
"app.install.phase.preparing_java.resolving": {
|
||||
"message": "Java {version} 준비 중"
|
||||
},
|
||||
"app.install.phase.preparing_java.validating": {
|
||||
"message": "Java {version} 유효성 검사 중"
|
||||
},
|
||||
"app.install.phase.reading_pack_manifest": {
|
||||
"message": "팩 manifest 읽는 중"
|
||||
},
|
||||
"app.install.phase.resolving_loader": {
|
||||
"message": "로더 해결 중"
|
||||
},
|
||||
"app.install.phase.resolving_minecraft": {
|
||||
"message": "Minecraft 해결 중"
|
||||
},
|
||||
"app.install.phase.resolving_pack": {
|
||||
"message": "콘텐츠 해결 중"
|
||||
},
|
||||
"app.install.phase.rolling_back": {
|
||||
"message": "뒤로 돌리는 중"
|
||||
},
|
||||
"app.install.phase.running_loader_processors": {
|
||||
"message": "로더 진행기 실행 중"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "인스턴스의 모든 데이터가 삭제됩니다. 세계 폴더, 설정 폴더 등 설치된 모든 컨텐츠가 포함됩니다."
|
||||
},
|
||||
@@ -347,15 +200,6 @@
|
||||
"app.instance.modpack-already-installed.instance": {
|
||||
"message": "인스턴스"
|
||||
},
|
||||
"app.instance.mods.bulk-update.downloading-projects": {
|
||||
"message": "{current, number}/{total, number} 프로젝트 다운로드 중..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.finishing": {
|
||||
"message": "업데이트 마무리 중..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.resolving-versions": {
|
||||
"message": "버전 해결 중..."
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "프로젝트"
|
||||
},
|
||||
@@ -380,18 +224,6 @@
|
||||
"app.instance.worlds.browse-servers": {
|
||||
"message": "서버 탐색하기"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.delete-button": {
|
||||
"message": "세계 삭제"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.title": {
|
||||
"message": "세계 삭제"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-body": {
|
||||
"message": "이 세계는 이 인스턴스로부터 영구적으로 삭제됩니다. 이 작업은 되돌릴 수 없습니다."
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-header": {
|
||||
"message": "{name} 삭제 중"
|
||||
},
|
||||
"app.instance.worlds.filter-modded": {
|
||||
"message": "수정됨"
|
||||
},
|
||||
@@ -410,53 +242,32 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "추가된 서버 또는 세계 없음"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "서버 제거"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.title": {
|
||||
"message": "서버 제거"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-body": {
|
||||
"message": "이 서버는 서버 목록과 게임 내 서버 목록으로부터 삭제됩니다. 주소를 안다면 추후 다시 추가할 수 있습니다."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-header": {
|
||||
"message": "{name} 제거 중"
|
||||
},
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "{count}개의 세계 검색..."
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "설치하지 않음"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "콘텐츠 설치 필요"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "설치하고 플레이"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "무시하고 설치"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "설치"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "이 초대장은 다른 Modrinth 사용자가 생성했으며, Modrinth에서 생성하지 않았습니다. 신뢰할 수 있는 초대장만 수락하십시오."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {모드 #개} other {모드 #개}}"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "모든 파일은 형식(.mrpack 포함)에 무관하게 Modrinth에 게시되어야만 검수를 거칩니다."
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "필요한 모드팩"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "이 서버를 플레이하려면 모드가 필요합니다. '설치'를 클릭하여 Modrinth에서 필수 파일을 내려받은 후, 서버에 바로 접속하세요."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "인스턴스 공유됨"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "이 서버의 모드팩은 Modrinth에 게시되지 않은 파일을 포함하고 있습니다. 신뢰할 수 있는 출처의 파일만 설치하는 것을 강력히 권장합니다."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "출처를 알 수 없는 파일"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "확인되지 않은 파일"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "서버 인스턴스 공유됨"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "구성 요소 보기"
|
||||
@@ -464,8 +275,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "업데이트하고 플레이"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "제거됨"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "업데이트 필요"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "{name}을(를) 플레이하려면 업데이트가 필요합니다. 게임을 실행하려면 최신 버전으로 업데이트해 주세요."
|
||||
@@ -473,27 +284,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "이미 설치되어 있음"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "버전 변경"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "탐색으로 돌아가기"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "인스턴스에 콘텐츠 설치"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "모든 버전"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "브라우저에서 다운로드"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "설치 중"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "이미 설치됨"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "개발자 모드가 활성화되었습니다."
|
||||
},
|
||||
@@ -605,18 +401,9 @@
|
||||
"app.skins.rate-limit.title": {
|
||||
"message": "잠시 기다려주세요."
|
||||
},
|
||||
"app.skins.reorder-error.text": {
|
||||
"message": "이 스킨 정렬은 저장되지 않습니다."
|
||||
},
|
||||
"app.skins.reorder-error.title": {
|
||||
"message": "스킨 재정렬 실패"
|
||||
},
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "카오스 큐브"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
@@ -686,9 +473,6 @@
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "다운로드 완료"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "새로고침하여 업데이트"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "업데이트 가능"
|
||||
},
|
||||
@@ -887,30 +671,6 @@
|
||||
"instance.settings.tabs.general.name": {
|
||||
"message": "이름"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel": {
|
||||
"message": "채널 업데이트"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha": {
|
||||
"message": "알파"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha.description": {
|
||||
"message": "릴리스와 베타, 알파 버전이 이용 가능한 업데이트에 표시됩니다."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta": {
|
||||
"message": "베타"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta.description": {
|
||||
"message": "릴리스와 베타 버전이 이용 가능한 업데이트에 표시됩니다."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release": {
|
||||
"message": "릴리스"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release.description": {
|
||||
"message": "릴리스 버전만 이용 가능한 업데이트에 표시됩니다."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.select": {
|
||||
"message": "업데이트 채널 선택"
|
||||
},
|
||||
"instance.settings.tabs.hooks": {
|
||||
"message": "실행 후크"
|
||||
},
|
||||
@@ -1034,9 +794,6 @@
|
||||
"instance.worlds.copy_address": {
|
||||
"message": "주소 복사"
|
||||
},
|
||||
"instance.worlds.create_shortcut": {
|
||||
"message": "바로가기 만들기"
|
||||
},
|
||||
"instance.worlds.dont_show_on_home": {
|
||||
"message": "홈에서 숨기기"
|
||||
},
|
||||
@@ -1111,5 +868,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "로더가 서버에 의해 제공됩니다"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "모든 파일은 형식(.mrpack 포함)에 무관하게 Modrinth에 업로드되어야만 검수를 거칩니다."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "이 경고를 다시 표시하지 않음"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "설치 확인"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "무시하고 설치"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "악성코드는 흔히 디스코드와 같은 플랫폼을 통해 모드팩 파일을 공유하는 방식으로 유포됩니다."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "이 파일을 Modrinth에서 찾을 수 없습니다. 신뢰할 수 있는 출처의 파일만 설치하는 것을 권장합니다."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "출처를 알 수 없는 파일 경고"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,12 +8,6 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Sembunyikan lebih banyak pemasangan yang berjalan"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Ketepikan"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Cuba semula"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "Jadikan pemasangan utama"
|
||||
},
|
||||
@@ -32,9 +26,6 @@
|
||||
"app.action-bar.stop-instance": {
|
||||
"message": "Hentikan pemasangan"
|
||||
},
|
||||
"app.action-bar.update": {
|
||||
"message": "Kemas kini"
|
||||
},
|
||||
"app.action-bar.view-active-downloads": {
|
||||
"message": "Lihat muat turun aktif"
|
||||
},
|
||||
@@ -95,9 +86,6 @@
|
||||
"app.appearance-settings.select-option": {
|
||||
"message": "Pilih satu pilihan"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Melangkau pengesahan berisiko rendah secara automatik seperti pemasangan pek mod pendua, pemadaman kandungan biasa, kemas kini pukal, menyahpautkan pek mod dan gesaan pembaikan. Amaran berbahaya masih akan ditunjukkan."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Membolehkan keupayaan untuk menogol bar sisi."
|
||||
},
|
||||
@@ -143,6 +131,9 @@
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Temui pelayan"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Sembunyikan pelayan yang sudah ditambah"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Pek Mod"
|
||||
},
|
||||
@@ -164,6 +155,9 @@
|
||||
"app.export-modal.header": {
|
||||
"message": "Eksport pek mod"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Nama Pek Mod"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Nama pek mod"
|
||||
},
|
||||
@@ -173,24 +167,6 @@
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.install.phase.preparing_java.downloading": {
|
||||
"message": "Sedang memuat turun Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.extracting": {
|
||||
"message": "Sedang mengekstrak Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.fetching-metadata": {
|
||||
"message": "Sedang mengambil Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.resolving": {
|
||||
"message": "Sedang menyediakan Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.validating": {
|
||||
"message": "Sedang mengesahkan Java {version}"
|
||||
},
|
||||
"app.install.phase.reading_pack_manifest": {
|
||||
"message": "Sedang membaca manifest pek"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Semua data untuk pemasangan anda akan dipadamkan secara kekal, termasuk dunia, konfigurasi dan semua kandungan yang dipasang."
|
||||
},
|
||||
@@ -260,6 +236,9 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Cari {count} dunia..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Kandungan yang diperlukan"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Pasang untuk mainkan"
|
||||
},
|
||||
@@ -269,15 +248,27 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, other {# mod}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Pek mod yang diperlukan"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Pelayan ini memerlukan mod untuk dimainkan. Klik Pasang untuk menyediakan fail yang diperlukan daripada Modrinth, kemudian lancarkan permainan terus ke dalam pelayan."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Pemasangan yang dikongsi"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Pemasangan pelayan yang dikongsi"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Lihat kandungan"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Kemas kini untuk mainkan"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Kemas kini diperlukan"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Kemas kini diperlukan untuk memainkan {name}. Sila kemas kini kepada versi terkini untuk melancarkan permainan."
|
||||
},
|
||||
@@ -635,15 +626,6 @@
|
||||
"instance.settings.tabs.general.name": {
|
||||
"message": "Nama"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha": {
|
||||
"message": "Alfa"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta": {
|
||||
"message": "Beta"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release": {
|
||||
"message": "Terbitan"
|
||||
},
|
||||
"instance.settings.tabs.hooks": {
|
||||
"message": "Cangkuk pelancaran"
|
||||
},
|
||||
@@ -841,5 +823,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Pemuat adalah disediakan oleh pelayan"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Sesuatu fail hanya disemak jika ia dimuat naik ke Modrinth, tanpa mengira format failnya (termasuk .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Jangan tunjukkan amaran ini lagi"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Sahkan pemasangan"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Pasangkan juga"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Perisian hasad sering diedarkan melalui fail pek mod dengan berkongsinya di platform seperti Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Kami tidak dapat menemui fail ini di Modrinth. Kami sangat mengesyorkan anda untuk hanya memasang fail daripada sumber yang anda percayai."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Amaran fail tidak diketahui"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,87 +11,6 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Verberg meer actieve instanties"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Gekopieerd"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Details kopiëren"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Sluiten"
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Instantie openen"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Opnieuw proberen"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Geannuleerd vanwege het sluiten van de app"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Modpack kon niet gelezen worden"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Geannuleerd"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "Opschonen is niet voltooid"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Bestanden konden niet gedownload worden"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "Gedownloade bestand is beschadigd"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Bestanden konden niet opgeslagen worden"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "Downloaden kon niet worden voltooid"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "Instantie kon niet gevonden worden"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "Bestandspad is ongeldig"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "Modpack-gegevens ongeldig"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "Modpack-bestanden bevatten ongeldige metagegevens"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "Installatie van Java kon niet worden voltooid"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "Instellen van loader is mislukt"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "Lokale gegevens konden niet bijgewerkt worden"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "Instellen van Minecraft is mislukt"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "Modrinth kon niet bereikt worden"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "Geen schrijfrechten"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "Pack kon niet gedownload worden"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "Er is iets misgegaan"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Onbekende instantie"
|
||||
},
|
||||
"app.action-bar.installs": {
|
||||
"message": "Installaties"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "Maak primaire instantie"
|
||||
},
|
||||
@@ -182,12 +101,6 @@
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Speeltijd laten zien"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Bevestigingen met een laag risico, zoals het installeren van dubbele modpacks, het verwijderen van normale inhoud, bulkupdates, het ontkoppelen van modpacks en reparatieverzoeken, worden automatisch overgeslagen. Waarschuwingen voor gevaarlijke dingen worden nog steeds weergegeven."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Niet-essentiële waarschuwingen overslaan"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Schakelt de mogelijkheid om de zijbalk in- of uit te schakelen in."
|
||||
},
|
||||
@@ -228,19 +141,19 @@
|
||||
"message": "Terug naar instantie"
|
||||
},
|
||||
"app.browse.discover-content": {
|
||||
"message": "Inhoud ontdekken"
|
||||
"message": "Ontdek content"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Ontdek servers"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Al toegevoegde servers verbergen"
|
||||
"message": "Verberg al toegevoegde servers"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpacks"
|
||||
},
|
||||
"app.browse.server-instance-content-warning": {
|
||||
"message": "Het toevoegen van inhoud kan de compatibiliteit verstoren bij het verbinden met de server. Eventuele toegevoegde inhoud gaat bovendien verloren wanneer je de inhoud van de serverinstantie bijwerkt."
|
||||
"message": "Het toevoegen van content kan de compatibiliteit verbreken bij het verbinden met de server. Alle toegevoegde inhoud gaat ook verloren wanneer u de content van de serverinstantie bijwerkt."
|
||||
},
|
||||
"app.browse.server.installing": {
|
||||
"message": "Installeren"
|
||||
@@ -258,7 +171,7 @@
|
||||
"message": "Exporteer modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Naam van modpack"
|
||||
"message": "Modpack Naam"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Modpack naam"
|
||||
@@ -269,62 +182,8 @@
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.install.phase.downloading_content": {
|
||||
"message": "Inhoud aan het downloaden"
|
||||
},
|
||||
"app.install.phase.downloading_minecraft": {
|
||||
"message": "Minecraft aan het downloaden"
|
||||
},
|
||||
"app.install.phase.downloading_pack_file": {
|
||||
"message": "Pakketbestand aan het downloaden"
|
||||
},
|
||||
"app.install.phase.extracting_overrides": {
|
||||
"message": "Overschrijvingen eruit halen"
|
||||
},
|
||||
"app.install.phase.finalizing": {
|
||||
"message": "Aan het afronden"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "In de wachtrij voor installatie"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Java aan het voorbereiden"
|
||||
},
|
||||
"app.install.phase.preparing_java.downloading": {
|
||||
"message": "Java {version} aan het downloaden"
|
||||
},
|
||||
"app.install.phase.preparing_java.extracting": {
|
||||
"message": "Java {version} aan het uitpakken"
|
||||
},
|
||||
"app.install.phase.preparing_java.fetching-metadata": {
|
||||
"message": "Java {version} aan het ophalen"
|
||||
},
|
||||
"app.install.phase.preparing_java.resolving": {
|
||||
"message": "Java {version} aan het voorbereiden"
|
||||
},
|
||||
"app.install.phase.preparing_java.validating": {
|
||||
"message": "Java {version} aan het valideren"
|
||||
},
|
||||
"app.install.phase.reading_pack_manifest": {
|
||||
"message": "Paketmanifest aan het lezen"
|
||||
},
|
||||
"app.install.phase.resolving_loader": {
|
||||
"message": "Loader wordt bepaald"
|
||||
},
|
||||
"app.install.phase.resolving_minecraft": {
|
||||
"message": "Minecraft wordt bepaald"
|
||||
},
|
||||
"app.install.phase.resolving_pack": {
|
||||
"message": "Inhoud aan het bepalen"
|
||||
},
|
||||
"app.install.phase.rolling_back": {
|
||||
"message": "Aan het terugdraaien"
|
||||
},
|
||||
"app.install.phase.running_loader_processors": {
|
||||
"message": "Loader-processors aan het uitvoeren"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Alle gegevens van je instantie worden definitief verwijderd, inclusief je werelden, configuraties en alle geïnstalleerde inhoud."
|
||||
"message": "Alle data van je instantie zal permanent verwijderd worden, inclusief al je werelden, voorkeuren, en alle geïnstalleerde content."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Deze actie kan niet ongedaan gemaakt worden"
|
||||
@@ -347,15 +206,6 @@
|
||||
"app.instance.modpack-already-installed.instance": {
|
||||
"message": "Instantie"
|
||||
},
|
||||
"app.instance.mods.bulk-update.downloading-projects": {
|
||||
"message": "{current, number}/{total, number} projecten aan het downloaden..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.finishing": {
|
||||
"message": "Update aan het afronden..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.resolving-versions": {
|
||||
"message": "Versies worden bepaald..."
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "project"
|
||||
},
|
||||
@@ -380,18 +230,6 @@
|
||||
"app.instance.worlds.browse-servers": {
|
||||
"message": "Zoek servers"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.delete-button": {
|
||||
"message": "Wereld verwijderen"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.title": {
|
||||
"message": "Wereld verwijderen"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-body": {
|
||||
"message": "Deze wereld wordt definitief uit deze instantie verwijderd. Deze actie kan niet ongedaan worden gemaakt."
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-header": {
|
||||
"message": "{name} verwijderen"
|
||||
},
|
||||
"app.instance.worlds.filter-modded": {
|
||||
"message": "Gemod"
|
||||
},
|
||||
@@ -410,62 +248,41 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "Noch servers noch werelden toegevoegd"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Server verwijderen"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.title": {
|
||||
"message": "Server verwijderen"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-body": {
|
||||
"message": "Deze server wordt verwijderd uit je serverlijst en uit de serverlijst in het spel. Je kunt hem later weer toevoegen als je het adres weet."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-header": {
|
||||
"message": "{name} verwijderen"
|
||||
},
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Zoek werelden"
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "Niet installeren"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Content vereist"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Installeer om te spelen"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Toch installeren"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Installeer"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Deze uitnodiging is aangemaakt door een andere Modrinth-gebruiker, niet door Modrinth zelf. Accepteer alleen uitnodigingen van mensen die je vertrouwt."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural,one {# mod}other {# mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Een bestand wordt alleen beoordeeld als het op Modrinth wordt gepubliceerd, ongeacht het bestandsformaat (inclusief .mrpack)."
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Vereist modpack"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Deze server vereist mods om te spelen. Klik op Installeer om de vereiste bestanden van Modrinth in te stellen, en start direct in de server."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Gedeelde instantie"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Dit server-modpack bevat bestanden die niet op Modrinth zijn gepubliceerd. We raden je ten zeerste aan om alleen bestanden te installeren uit bronnen die je vertrouwt."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "Waarschuwing voor onbekende bestanden"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Onbekende bestanden"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Gedeelde server instantie"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Inhoud bekijken"
|
||||
"message": "Toon content"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Update om te spelen"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Verwijderde"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Update vereist"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Een update is vereist om {name} te spelen. Update naar de laatste versie om het spel te starten."
|
||||
@@ -473,26 +290,11 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Dit project is al geïnstalleerd"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Versie wijzigen"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Terug naar Ontdekken"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Inhoud op instantie installeren"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Alle versies"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Downloaden in de browser"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "Wordt geïnstalleerd"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Al geïnstalleerd"
|
||||
"message": "Installeer content naar instantie"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Ontwikkelaarsmodus ingeschakeld."
|
||||
@@ -609,14 +411,11 @@
|
||||
"message": "Je skinvolgorde kon niet worden opgeslagen."
|
||||
},
|
||||
"app.skins.reorder-error.title": {
|
||||
"message": "Herschikken van skins is mislukt"
|
||||
"message": "Het herschikken van skins is mislukt."
|
||||
},
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Chaos Cubed"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
@@ -843,7 +642,7 @@
|
||||
"message": "Verwijder instantie"
|
||||
},
|
||||
"instance.settings.tabs.general.delete.description": {
|
||||
"message": "Hiermee wordt een instantie definitief van je apparaat verwijderd, inclusief je werelden, instellingen en alle geïnstalleerde inhoud. Wees voorzichtig, want zodra je een instantie hebt verwijderd, kun je deze niet meer herstellen."
|
||||
"message": "Verwijdert permanent een instantie van je apparaat, inclusief je werelden, instellingen en alle geïnstalleerde inhoud. Wees voorzichtig, zodra je een instantie verwijdert, is het niet meer mogelijk om deze te herstellen."
|
||||
},
|
||||
"instance.settings.tabs.general.deleting.button": {
|
||||
"message": "Verwijderen..."
|
||||
@@ -1034,9 +833,6 @@
|
||||
"instance.worlds.copy_address": {
|
||||
"message": "Kopieer adres"
|
||||
},
|
||||
"instance.worlds.create_shortcut": {
|
||||
"message": "Snelkoppeling maken"
|
||||
},
|
||||
"instance.worlds.dont_show_on_home": {
|
||||
"message": "Niet tonen op de startpagina"
|
||||
},
|
||||
@@ -1111,5 +907,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader is gegeven door de server"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Een bestand wordt alleen beoordeeld als het naar Modrinth is geüpload, ongeacht het bestandsformaat (inclusief .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Toon deze waarschuwing niet opnieuw"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Bevestig installatie"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Installeer toch"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Malware wordt vaak verspreid via modpack-bestanden door ze te delen op platforms zoals Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "We konden dit bestand niet vinden op Modrinth. We raden ten zeerste aan om alleen bestanden te installeren van bronnen die u vertrouwt."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Waarschuwing voor onbekend bestand"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,220 +1,10 @@
|
||||
{
|
||||
"app.action-bar.downloading-java": {
|
||||
"message": "Laster ned Java {version}"
|
||||
},
|
||||
"app.action-bar.downloading-update": {
|
||||
"message": "Laster ned oppdatering"
|
||||
},
|
||||
"app.action-bar.downloads": {
|
||||
"message": "Nedlastninger"
|
||||
},
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Skjul flere kjørende tilfeller"
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Åpne tilfelle"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Prøv igjen"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Ukjent tilfelle"
|
||||
},
|
||||
"app.action-bar.installs": {
|
||||
"message": "Installeringer"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "Gjør om til primærtilfelle"
|
||||
},
|
||||
"app.action-bar.no-instances-running": {
|
||||
"message": "Ingen kjørende tilfeller"
|
||||
},
|
||||
"app.action-bar.offline": {
|
||||
"message": "Uten nett"
|
||||
},
|
||||
"app.action-bar.primary-instance": {
|
||||
"message": "Primærtilfelle"
|
||||
},
|
||||
"app.action-bar.reload-to-update": {
|
||||
"message": "Last inn på nytt for å oppdatere"
|
||||
},
|
||||
"app.action-bar.show-more-running-instances": {
|
||||
"message": "Vis flere kjørende tilfeller"
|
||||
},
|
||||
"app.action-bar.stop-instance": {
|
||||
"message": "Stopp tilfelle"
|
||||
},
|
||||
"app.action-bar.update": {
|
||||
"message": "Oppdater"
|
||||
},
|
||||
"app.action-bar.view-active-downloads": {
|
||||
"message": "Vis aktive nedlastninger"
|
||||
},
|
||||
"app.action-bar.view-instance": {
|
||||
"message": "Vis tilfelle"
|
||||
},
|
||||
"app.action-bar.view-logs": {
|
||||
"message": "Vis logger"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Skrur på avansert rendering, som for eksempel uskarphetseffekter, som kan forårsake ytelsesproblemer om man ikke har maskinvareaksellerert rendering."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Avansert rendering"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Velg ditt foretrukne fargetema for Modrinth App."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Fargetema"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Endre sida som vises når launcheren åpnes."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Hjem"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.library": {
|
||||
"message": "Bibliotek"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.title": {
|
||||
"message": "Åpningsside"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Skjuler navnelappen over din spiller på utseende siden."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Gjøm navnelapp"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Minimer launcheren"
|
||||
},
|
||||
"app.appearance-settings.select-option": {
|
||||
"message": "Velg et alternativ"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Viser hvor lenge du har spilt et tilfelle."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Vis spilletid"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Hopper automatisk over lav-rissiko fastslåelser som modpakkeinstalasjonsduplikat, vanlig innholdsletting, bolkoppdateringer, avkoble modpakker, og reparasjonsprompter. Farlige advarsler vil fortsatt vises."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Hopp over mindre viktige advarsler"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Aktiverer evnen til å skru sidefeltet av/på."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Sidefeltsveksling"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Hvis du prøver å laste ned en Modrinth Pakke fil (.mrpack) som er ukjent for Modrinth så kommer vi til å forsikre oss om at du forstår risikoene før du installerer den."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Advar meg før jeg installerer ukjente modpakker"
|
||||
},
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "Minecraft-autentiseringsservere kan være nede for øyeblikket. Kontroller internettforbindelsen din og prøv igjen senere."
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Kan ikke nå autentiseringsservere"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "Legger til server til tilfelle"
|
||||
},
|
||||
"app.browse.add-to-an-instance": {
|
||||
"message": "Legg til til et tilfelle"
|
||||
},
|
||||
"app.browse.add-to-instance": {
|
||||
"message": "Legg til til tilfelle"
|
||||
},
|
||||
"app.browse.add-to-instance-name": {
|
||||
"message": "Legg til til {instanceName}"
|
||||
},
|
||||
"app.browse.added": {
|
||||
"message": "Lagt til"
|
||||
},
|
||||
"app.browse.already-added": {
|
||||
"message": "Allerede lagt til"
|
||||
},
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "Tilbake til tilfelle"
|
||||
},
|
||||
"app.browse.discover-content": {
|
||||
"message": "Oppdag innhold"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Oppdag servere"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Gjem servere som allerede er lagt til"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpakker"
|
||||
},
|
||||
"app.browse.server-instance-content-warning": {
|
||||
"message": "Å legge til innhold kan ødelegge komatibilitet når du blir med i serveren. Alt tilleggsinnhold vil også forsvinne når du oppdaterer servertilfelleinnholdet."
|
||||
},
|
||||
"app.browse.server.installing": {
|
||||
"message": "Installerer"
|
||||
},
|
||||
"app.content-install.no-compatible-versions": {
|
||||
"message": "Ingen tilgjengelige versjoner matcher {compatibilityLabel}. Velg en versjon for å installere uansett. Avhengigheter vil ikke bli installert automatisk."
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Skriv en modpakkebeskrivelse..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Eksperter"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Eksperter modpakke"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Navn på modpakke"
|
||||
},
|
||||
"app.install.phase.preparing_java.validating": {
|
||||
"message": "Validerer Java {version}"
|
||||
},
|
||||
"app.install.phase.reading_pack_manifest": {
|
||||
"message": "Leser pakkemanifest"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Slett tilfelle"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Slett tilfelle"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create": {
|
||||
"message": "Opprett"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Modpakka er allerede installert"
|
||||
},
|
||||
"app.instance.modpack-already-installed.instance": {
|
||||
"message": "Tilfelle"
|
||||
},
|
||||
"app.instance.mods.bulk-update.downloading-projects": {
|
||||
"message": "Laster ned {current, number}/{total, number} prosjekter..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.finishing": {
|
||||
"message": "Fullfører oppdatering..."
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "prosjekt"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" ble lagt til"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} prosjekter ble lagt til"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Sjekk ut prosjektene jeg bruker i min modpakke!"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Installer for å spille"
|
||||
},
|
||||
@@ -222,14 +12,20 @@
|
||||
"message": "Installer"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {#mod} other {# modder}}"
|
||||
"message": "{count, plural, one {#mod} other {# mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Delt tilfelle"
|
||||
"message": "Delt instans"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Delt serverinstans"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Oppdater for å spille"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Krever oppdatering"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Ei oppdatering er påkrevd for å spille {name}. Vær så snill å oppdater til den siste versjonen av spillet for å spille det."
|
||||
},
|
||||
@@ -243,7 +39,7 @@
|
||||
"message": "Utseende"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Vanlige tilfelleinstillinger"
|
||||
"message": "Standard instansinstillinger"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Java installasjoner"
|
||||
@@ -306,10 +102,10 @@
|
||||
"message": "Aktiv"
|
||||
},
|
||||
"friends.heading.offline": {
|
||||
"message": "Av"
|
||||
"message": "Offline"
|
||||
},
|
||||
"friends.heading.online": {
|
||||
"message": "På"
|
||||
"message": "Online"
|
||||
},
|
||||
"friends.heading.pending": {
|
||||
"message": "Ventende"
|
||||
@@ -450,10 +246,10 @@
|
||||
"message": "Før oppstart"
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch.description": {
|
||||
"message": "Kjøres før tilfellet startes."
|
||||
"message": "Kørt før instansen startes."
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch.enter": {
|
||||
"message": "Skriv inn forstartskommando..."
|
||||
"message": "Skriv inn kommando før start..."
|
||||
},
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Spillstartkroker"
|
||||
@@ -462,7 +258,7 @@
|
||||
"message": "Wrapper"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper.description": {
|
||||
"message": "Innpakningskommando for å starte Minecraft."
|
||||
"message": "Wrapper-kommando for å starte Minecraft."
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper.enter": {
|
||||
"message": "Skriv inn wrapper-kommando..."
|
||||
@@ -476,9 +272,6 @@
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java og minne"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-memory-allocation": {
|
||||
"message": "Egendefinert minneallokasjon"
|
||||
},
|
||||
"instance.settings.tabs.java.environment-variables": {
|
||||
"message": "Miljøvariabler"
|
||||
},
|
||||
@@ -510,7 +303,7 @@
|
||||
"message": "Høyde"
|
||||
},
|
||||
"instance.settings.tabs.window.height.description": {
|
||||
"message": "Høyden til spillvinduet når spillet startes."
|
||||
"message": "Høyde av spillvindu når spillet startes."
|
||||
},
|
||||
"instance.settings.tabs.window.height.enter": {
|
||||
"message": "Angi høyde..."
|
||||
@@ -519,7 +312,7 @@
|
||||
"message": "Bredde"
|
||||
},
|
||||
"instance.settings.tabs.window.width.description": {
|
||||
"message": "Bredden til spillvinduet når spillet startes."
|
||||
"message": "Bredde av spillvindu når spillet startes."
|
||||
},
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Angi bredde..."
|
||||
@@ -537,7 +330,7 @@
|
||||
"message": "Ikke vis på Hjem"
|
||||
},
|
||||
"instance.worlds.game_already_open": {
|
||||
"message": "Tilfellet er allerede open"
|
||||
"message": "Instansen er allerede open"
|
||||
},
|
||||
"instance.worlds.hardcore": {
|
||||
"message": "Hardbarket modus"
|
||||
@@ -555,7 +348,7 @@
|
||||
"message": "Du kan bare hoppe rett inn i enkeltspiller-verdener på Minecraft 1.20+"
|
||||
},
|
||||
"instance.worlds.play_instance": {
|
||||
"message": "Spill tilfelle"
|
||||
"message": "Spill instans"
|
||||
},
|
||||
"instance.worlds.view_instance": {
|
||||
"message": "Vis instans"
|
||||
|
||||
@@ -9,83 +9,29 @@
|
||||
"message": "Pobrania"
|
||||
},
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Ukryj aktywne instancje"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Skopiowano"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Kopiuj szczegóły"
|
||||
"message": "Ukryj włączone instancje"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Odrzuć"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "Instalacja nie powiodła się"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "Instalacja nie powiodła się z powodu zamknięcia aplikacji."
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "Instalacja nie powiodła się z powodu problemów z połączeniem."
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "Instalacja nie powiodła się z nieznanych przyczyn."
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Otwórz instancję"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Spróbuj ponownie"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Anulowano z powodu zamknięcia aplikacji"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Nie można było odczytać paczki modów"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Anulowano"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "Czyszczenie nie powiodło się"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Nie udało się pobrać plików"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "Pobrany plik jest uszkodzony"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Nie udało się zapisać plików"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "Nie można było ukończyć pobierania"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "Nie znaleziono instancji"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "Ścieżka plików jest niewłaściwa"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "Niewłaściwe dane paczki modów"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "Pliki paczki modów zawierają niewłaściwe metadane"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "Ustawianie Javy nie powiodło się"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "Ustawianie loadera nie powiodło się"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "Nie udało się zaktualizować danych lokalnych"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "Ustawianie Minecraft nie powiodło się"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "Nie udało się połączyć z serwerami Modrinth"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "Brak permisji, aby zapisać pliki"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "Pobieranie paczki nie powiodło się"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "Coś poszło nie tak"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Nieznana instancja"
|
||||
},
|
||||
@@ -96,7 +42,7 @@
|
||||
"message": "Ustaw jako główną instancję"
|
||||
},
|
||||
"app.action-bar.no-instances-running": {
|
||||
"message": "Brak włączonych instancji"
|
||||
"message": "Żadna instancja nie jest włączona"
|
||||
},
|
||||
"app.action-bar.offline": {
|
||||
"message": "Offline"
|
||||
@@ -105,7 +51,7 @@
|
||||
"message": "Główna instancja"
|
||||
},
|
||||
"app.action-bar.reload-to-update": {
|
||||
"message": "Załaduj ponownie, aby zaktualizować"
|
||||
"message": "Załaduj ponownie, by zaktualizować"
|
||||
},
|
||||
"app.action-bar.show-more-running-instances": {
|
||||
"message": "Pokaż więcej włączonych instancji"
|
||||
@@ -132,7 +78,7 @@
|
||||
"message": "Zaawansowane renderowanie"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Wybierz preferowany motyw kolorystyczny dla Modrinth App."
|
||||
"message": "Wybierz preferowany motyw w Modrinth app."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Motyw"
|
||||
@@ -150,10 +96,10 @@
|
||||
"message": "Domyślna strona główna"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Wyłącza nazwę użytkownika nad modelem gracza na stronie skórek."
|
||||
"message": "Wyłącza nazwę użytkownika na stronie skórek."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Ukryj nazwę"
|
||||
"message": "Schowaj nazwę"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Pokazuje ostatnie światy w sekcji \"Wskocz z powrotem do światów\" na stronie głównej."
|
||||
@@ -285,7 +231,7 @@
|
||||
"message": "Finalizowanie"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "Oczekuje na instalację"
|
||||
"message": "Przygotowywanie instancji"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Przygotowywanie środowiska Java"
|
||||
@@ -294,10 +240,10 @@
|
||||
"message": "Pobieranie Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.extracting": {
|
||||
"message": "Wypakowywanie Java {version}"
|
||||
"message": "Wypakowywanie Javy {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.fetching-metadata": {
|
||||
"message": "Pobieranie Java {version}"
|
||||
"message": "Pobieranie Javy {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.resolving": {
|
||||
"message": "Przygotowywanie Java {version}"
|
||||
@@ -306,10 +252,10 @@
|
||||
"message": "Sprawdzanie Java {version}"
|
||||
},
|
||||
"app.install.phase.reading_pack_manifest": {
|
||||
"message": "Sprawdzanie manifestu paczki"
|
||||
"message": "Ustalanie manifestu paczki"
|
||||
},
|
||||
"app.install.phase.resolving_loader": {
|
||||
"message": "Ustalanie loadera"
|
||||
"message": "Ustalanie programu ładującego"
|
||||
},
|
||||
"app.install.phase.resolving_minecraft": {
|
||||
"message": "Ustalanie wersji Minecraft"
|
||||
@@ -321,13 +267,13 @@
|
||||
"message": "Przywracanie"
|
||||
},
|
||||
"app.install.phase.running_loader_processors": {
|
||||
"message": "Uruchamianie procesorów loadera"
|
||||
"message": "Uruchamianie procesorów programu ładującego"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Wszystkie dane z Twojej instancji zostaną trwale usunięte, w tym Twoje światy, pliki konfiguracji i jakakolwiek dodana zawartość."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Tej akcji nie można cofnąć"
|
||||
"message": "Tej akcji nie można odwrócić"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Usuń instancję"
|
||||
@@ -363,13 +309,13 @@
|
||||
"message": "Dodano \"{name}\""
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Sprawdź projekty, których używam w mojej paczce modów!"
|
||||
"message": "Sprawdź projekty, które używam w mojej paczce modów!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Udostępnianie zawartości paczki modów"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Przesyłanie zakończone sukcesem"
|
||||
"message": "Przesyłanie powiodło się"
|
||||
},
|
||||
"app.instance.worlds.add-server": {
|
||||
"message": "Dodaj serwer"
|
||||
@@ -422,38 +368,29 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Szukaj wśród {count} światów..."
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "Nie instaluj"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Wymagana zawartość"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Zainstaluj, aby grać"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Instaluj mimo to"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Zainstaluj"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "To zaproszenie zostało utworzone przez innego użytkownika Modrinth, nie przez firmę Modrinth. Tylko akceptuj zaproszenia od osób, którym ufasz."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} few {# mody} other {# modów}}"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Plik jest sprawdzony tylko, jeżeli został opublikowany na Modrinth, niezależnie od jego formatu (w tym pliki .mrpack)."
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Wymagana paczka modów"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Ten serwer wymaga modów, aby na nim grać. Kliknij \"Zainstaluj\" aby otrzymać potrzebne pliki z Modrinth, a potem dołącz bezpośrednio do serwera."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Wspólna instancja"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Ta serwerowa paczka modów zawiera pliki, które nie zostały opublikowane na Modrinth. Zalecamy instalowanie plików tylko ze źródeł, którym ufasz."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "Ostrzeżenie o nieznanych plikach"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Nieznane plki"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Wspólna instancja serwera"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Pokaż zawartość"
|
||||
@@ -461,8 +398,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Zaktualizuj, by grać"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Usunięto"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Wymagana jest aktualizacja"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Aktualizacja jest wymagana, aby grać w {name}. Proszę zaktualizować do najnowszej wersji, aby uruchomić grę."
|
||||
@@ -470,27 +407,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Ten projekt jest już zainstalowany"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Zmień wersję"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Powróć do odkrywania"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Zainstaluj zasoby do instancji"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Wszystkie wersje"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Pobierz w przeglądarce"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "Instalowanie"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Już zainstalowano"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Tryb dewelopera włączony."
|
||||
},
|
||||
@@ -528,25 +450,25 @@
|
||||
"message": "Usuń skórkę"
|
||||
},
|
||||
"app.skins.delete-modal.description": {
|
||||
"message": "To trwale usunie wybraną skórkę. Tej akcji nie można cofnąć."
|
||||
"message": "To trwale usunie wybraną skórkę. Tej akcji nie można odwrócić."
|
||||
},
|
||||
"app.skins.delete-modal.title": {
|
||||
"message": "Czy na pewno chcesz usunąć tę skórkę?"
|
||||
},
|
||||
"app.skins.dropped-file-error.text": {
|
||||
"message": "Nie udało się odczytać upuszczonego pliku."
|
||||
"message": "Nie udało się odczytać wybranego pliku."
|
||||
},
|
||||
"app.skins.dropped-file-error.title": {
|
||||
"message": "Błąd podczas przetwarzania pliku"
|
||||
},
|
||||
"app.skins.edit-button": {
|
||||
"message": "Edytuj skórkę"
|
||||
"message": "Edytuj skina"
|
||||
},
|
||||
"app.skins.modal.add-skin-button": {
|
||||
"message": "Dodaj skórkę"
|
||||
"message": "Dodaj skina"
|
||||
},
|
||||
"app.skins.modal.add-title": {
|
||||
"message": "Dodawanie skórki"
|
||||
"message": "Dodawanie skina"
|
||||
},
|
||||
"app.skins.modal.arm-style-section": {
|
||||
"message": "Styl ramion"
|
||||
@@ -564,10 +486,10 @@
|
||||
"message": "Peleryny"
|
||||
},
|
||||
"app.skins.modal.edit-title": {
|
||||
"message": "Edytowanie skórki"
|
||||
"message": "Edytuj skina"
|
||||
},
|
||||
"app.skins.modal.make-edit-first-tooltip": {
|
||||
"message": "Zmodyfikuj najpierw skórkę!"
|
||||
"message": "Wpierw zmień jakoś skórkę!"
|
||||
},
|
||||
"app.skins.modal.no-cape-tooltip": {
|
||||
"message": "Brak peleryny"
|
||||
@@ -579,7 +501,7 @@
|
||||
"message": "Zamień teksturę"
|
||||
},
|
||||
"app.skins.modal.save-skin-button": {
|
||||
"message": "Zapisz skórkę"
|
||||
"message": "Zapisz skina"
|
||||
},
|
||||
"app.skins.modal.saving-tooltip": {
|
||||
"message": "Zapisywanie..."
|
||||
@@ -611,9 +533,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Chaos Cubed"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
@@ -663,7 +582,7 @@
|
||||
"message": "Zaloguj się"
|
||||
},
|
||||
"app.skins.title": {
|
||||
"message": "Wybór skórki"
|
||||
"message": "Wybierz skórkę"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Wersja Modrinth App v{version} została pobrana. Załaduj ponownie, żeby zaktualizować teraz, albo automatycznie, gdy zamkniesz Modrinth App."
|
||||
@@ -963,7 +882,7 @@
|
||||
"message": "Niestandardowe argumenty Java"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-java-installation": {
|
||||
"message": "Niestandardowa instalacja Java"
|
||||
"message": "Niestandardowa instalacja Javy"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-memory-allocation": {
|
||||
"message": "Niestandardowa alokacja pamięci"
|
||||
@@ -972,7 +891,7 @@
|
||||
"message": "Zmienne środowiskowe..."
|
||||
},
|
||||
"instance.settings.tabs.java.enter-java-arguments": {
|
||||
"message": "Argumenty Java..."
|
||||
"message": "Argumenty Javy..."
|
||||
},
|
||||
"instance.settings.tabs.java.environment-variables": {
|
||||
"message": "Zmienne środowiskowe"
|
||||
@@ -1108,5 +1027,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader jest dostarczony przez serwer"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Plik jest sprawdzony tylko, jeżeli został przesłany na Modrinth, niezależnie od formatu (w tym pliki .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Nie pokazuj ponownie"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Potwierdź instalację"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Instaluj mimo to"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Wirusy są często kryte w plikach paczek modów przesyłanych na platformach takich jak Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Nie mogliśmy znaleźć tego pliku na Modrinth. Stanowczo zalecamy instalowanie plików tylko ze źródeł, którym ufasz."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Ostrzeżenie o nieznanym pliku"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,81 +11,27 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Ocultar mais instâncias em execução"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Copiado"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Copiar detalhes"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Dispensar"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "Instalação falha"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "A instalação falhou devido ao aplicativo ter fechado."
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "A instalação falhou devido a um erro na rede."
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "A instalação falhou devido a um erro desconhecido."
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Abrir instância"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Tentar novamente"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Cancelado devido ao aplicativo ter fechado"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Não foi possível ler o pacote de mods"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Cancelado"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "A limpeza não foi finalizada"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Não foi possível baixar os arquivos"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "O arquivo baixado é corrupto"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Não foi possível salvar os arquivos"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "A transferência não foi finalizada"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "Instância não encontrada"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "O caminho do arquivo é inválido"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "Os dados do pacote de mods é inválido"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "Os arquivos do pacote de mods possui metadados inválidos"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "Configuração Java não foi finalizada"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "Falha na configuração do loader"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "Não foi atualizar os dados locais"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "Falha na configuração do Minecraft"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "Não foi possível alcançar o Modrinth"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "Sem permissão para escrita"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "Não foi possível baixar o pacote"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "Algo deu errado"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Instância desconhecida"
|
||||
},
|
||||
@@ -285,7 +231,7 @@
|
||||
"message": "Finalizando"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "Na fila"
|
||||
"message": "Preparando instância"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Preparando Java"
|
||||
@@ -425,38 +371,29 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Buscar {count} mundos..."
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "Não instalar"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Conteúdo necessário"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Instale para jogar"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Instalar mesmo assim"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Instalar"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Este convite foi criado por outro usuário do Modrinth, não pelo próprio Modrinth. Só aceite convites de pessoas que você confia."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, =0 {Nenhum mod} one {# mod} other {# mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Um arquivo só é revisado se for publicado no Modrinth, independente do formato de arquivo (incluindo .mrpack)."
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Pacote de mods necessário"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Este servidor exige mods para jogar. Clique em instalar para configurar os arquivos necessários através do Modrinth, e então iniciar diretamente no servidor."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Instância compartilhada"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Este pacote de mods do servidor contém arquivos não publicados no Modrinth. Recomendamos fortemente a instalar apenas arquivos de fontes que você confia."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "Aviso de arquivos desconhecidos"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Arquivos não reconhecidos"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Instância de servidor compartilhada"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Ver conteúdo"
|
||||
@@ -464,8 +401,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Atualize para jogar"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Removido"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Atualização necessária"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Uma atualização é necessária para jogar {name}. Atualize para a versão mais recente para iniciar o jogo."
|
||||
@@ -473,27 +410,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Este projeto já foi instalado"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Trocar versão"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Voltar a descobrir"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Instalar conteúdo para a instância"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Todas as versões"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Baixar no navegador"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "Instalando"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Já instalado"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Modo desenvolvedor ativado."
|
||||
},
|
||||
@@ -614,9 +536,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Construtores & Biomas"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Chaos Cubed"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
@@ -681,7 +600,7 @@
|
||||
"message": "Mudanças"
|
||||
},
|
||||
"app.update-popup.download": {
|
||||
"message": "Instalar ({size})"
|
||||
"message": "Baixar ({size})"
|
||||
},
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "Instalação concluída"
|
||||
@@ -1111,5 +1030,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "O loader é fornecido pelo servidor"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Um arquivo só é revisado se for enviado no Modrinth, independente do formato do arquivo (incluindo .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Não exibir aviso novamente"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Confirmar instalação"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Instalar mesmo assim"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "O malware é distribuído frequentemente através de arquivos de pacote de mods compartilhados em plataformas como Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Não encontramos este arquivo no Modrinth. Nós recomendamos fortemente instalar arquivos apenas de fontes confiáveis."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Aviso de arquivo desconhecido"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,6 +110,9 @@
|
||||
"app.export-modal.header": {
|
||||
"message": "Exportar modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Nome do Modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Nome do Modpack"
|
||||
},
|
||||
@@ -188,6 +191,9 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Pesquisar {count} mundos..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Conteúdo necessário"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Instala para jogar"
|
||||
},
|
||||
@@ -197,15 +203,27 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {mod} other {mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Modpack requerido"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Este servidor requer mods para jogares. Clica Instalar para transferir os ficheiros necessários do Modrinth, e então entrar diretamente no servidor."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Instância partilhada"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Instância de servidor partilhada"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Ver conteúdo"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Atualiza para jogar"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Atualização necessária"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Uma atualização é necessária para jogar {name}. Por favor atualiza para a versão mais recente para iniciar o jogo."
|
||||
},
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Nu se pot accesa serverele de autentificare"
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Conținut necesar"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Instalați pentru a juca"
|
||||
},
|
||||
@@ -14,15 +17,27 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural,one {#mod} other {# moduri}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Pachet de mod necesar"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Acest server necesită modificări pentru a juca. Faceți clic pe Instalare pentru a configura fișierele necesare din Modrinth, apoi lansați direct pe server."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Instanță comună"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Instanță de server partajată"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Vizualizați conținutul"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Actualizați pentru a juca"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Actualizare necesară"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Este necesară o actualizare pentru a juca {name}. Vă rugăm să actualizați la cea mai recentă versiune pentru a lansa jocul."
|
||||
},
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"message": "Скачивание Java {version}"
|
||||
},
|
||||
"app.action-bar.downloading-update": {
|
||||
"message": "Скачивание обновления"
|
||||
"message": "Скачивание"
|
||||
},
|
||||
"app.action-bar.downloads": {
|
||||
"message": "Загрузки"
|
||||
@@ -11,81 +11,27 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Скрыть другие активные сборки"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Скопировано"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Копировать"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Закрыть"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "Установка не удалась"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "Установка не удалась из-за закрытия приложения."
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "Установка не удалась из-за сетевой ошибки."
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "Установка не удалась из-за неизвестной ошибки."
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Открыть сборку"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Повторить"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Отменено из‑за закрытия приложения"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Не удалось прочитать сборку"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Отменено"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "Очистка прервана"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Не удалось скачать файлы"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "Скачанный файл повреждён"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Не удалось сохранить файлы"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "Скачивание прервано"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "Сборка не найдена"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "Неверный путь к файлу"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "Неверные данные сборки"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "Неверные метаданные в файлах сборки "
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "Установка Java прервана"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "Не удалось установить загрузчик"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "Не удалось обновить локальные данные"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "Не удалось установить Minecraft"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "Не удалось подключиться к Modrinth"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "Нет разрешения на запись"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "Не удалось скачать сборку"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "Произошла ошибка"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Неизвестная сборка"
|
||||
},
|
||||
@@ -105,7 +51,7 @@
|
||||
"message": "Основная сборка"
|
||||
},
|
||||
"app.action-bar.reload-to-update": {
|
||||
"message": "Перезапустить и обновить"
|
||||
"message": "Перезапустить"
|
||||
},
|
||||
"app.action-bar.show-more-running-instances": {
|
||||
"message": "Показать другие активные сборки"
|
||||
@@ -183,10 +129,10 @@
|
||||
"message": "Время игры"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Скрывать малозначимые подтверждения: установку копий сборок, обычное удаление контента, массовые обновления, отвязку и исправление сборок. Критические предупреждения останутся."
|
||||
"message": "Автоматически пропускает подтверждения с низким уровнем риска, такие как установка дубликатов сборок, обычное удаление контента, массовые обновления, отключение сборок и запросы на восстановление. Опасные предупреждения по-прежнему будут отображаться."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Только опасные предупреждения"
|
||||
"message": "Пропустить несущественные предупреждения"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Показывать кнопку скрытия боковой панели."
|
||||
@@ -279,13 +225,13 @@
|
||||
"message": "Скачивание файла сборки"
|
||||
},
|
||||
"app.install.phase.extracting_overrides": {
|
||||
"message": "Распаковка переопределений"
|
||||
"message": "Извлечение переопределений"
|
||||
},
|
||||
"app.install.phase.finalizing": {
|
||||
"message": "Завершение"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "В очереди на установку"
|
||||
"message": "Подготовка сборки"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Подготовка Java"
|
||||
@@ -308,14 +254,11 @@
|
||||
"app.install.phase.reading_pack_manifest": {
|
||||
"message": "Чтение манифеста сборки"
|
||||
},
|
||||
"app.install.phase.resolving_loader": {
|
||||
"message": "Разрешение загрузчика"
|
||||
},
|
||||
"app.install.phase.resolving_minecraft": {
|
||||
"message": "Разрешение Minecraft"
|
||||
"message": "Загрузка версий"
|
||||
},
|
||||
"app.install.phase.resolving_pack": {
|
||||
"message": "Разрешение контента"
|
||||
"message": "Загрузка контента"
|
||||
},
|
||||
"app.install.phase.rolling_back": {
|
||||
"message": "Откат"
|
||||
@@ -348,13 +291,13 @@
|
||||
"message": "Сборка"
|
||||
},
|
||||
"app.instance.mods.bulk-update.downloading-projects": {
|
||||
"message": "Скачивание проектов: {current, number}/{total, number}..."
|
||||
"message": "Скачивание {current, number}/{total, number} проектов..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.finishing": {
|
||||
"message": "Завершение обновления..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.resolving-versions": {
|
||||
"message": "Разрешение версий..."
|
||||
"message": "Загрузка версий..."
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "проект"
|
||||
@@ -378,7 +321,7 @@
|
||||
"message": "Найти серверы"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.delete-button": {
|
||||
"message": "Удалить мир"
|
||||
"message": "Удалить"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.title": {
|
||||
"message": "Удаление мира"
|
||||
@@ -408,7 +351,7 @@
|
||||
"message": "Нет серверов и миров"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Удалить сервер"
|
||||
"message": "Удалить"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.title": {
|
||||
"message": "Удаление сервера"
|
||||
@@ -419,38 +362,29 @@
|
||||
"app.instance.worlds.remove-server-modal.warning-header": {
|
||||
"message": "Удаление {name}"
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "Не устанавливать"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Требуется дополнительный контент"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Установка перед запуском"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Всё равно установить"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Установить"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Это приглашение создано другим пользователем Modrinth. Принимайте приглашения только от тех, кому доверяете."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# мод} few {# мода} other {# модов}}"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Файл проверяется только если он опубликован на Modrinth, независимо от его формата (включая .mrpack)."
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Необходимая сборка"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Для игры на сервере требуются моды. Установите необходимые файлы с Modrinth, чтобы подключиться."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Сборка"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Сборка этого сервера содержит файлы, которые не опубликованы на Modrinth. Рекомендуется скачивать файлы только из надёжных источников."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "Предупреждение о неизвестных файлах"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Нераспознанные файлы"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Общая сборка сервера"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Посмотреть содержимое"
|
||||
@@ -458,8 +392,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Обновление перед запуском"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Удалён"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Требуется обновление"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Обновите {name} до последней версии, чтобы запустить игру."
|
||||
@@ -467,27 +401,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Этот проект уже установлен"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Сменить версию"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Вернуться к поиску"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Установка контента в сборку"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Все версии"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Скачать в браузере"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "Установка"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Уже установлено"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Режим разработчика включён."
|
||||
},
|
||||
@@ -600,7 +519,7 @@
|
||||
"message": "Не так быстро!"
|
||||
},
|
||||
"app.skins.reorder-error.text": {
|
||||
"message": "Порядок скинов не сохранился."
|
||||
"message": "Ваш порядок скинов не удалось сохранить."
|
||||
},
|
||||
"app.skins.reorder-error.title": {
|
||||
"message": "Не удалось изменить порядок скинов"
|
||||
@@ -608,9 +527,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Chaos Cubed"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
@@ -984,7 +900,7 @@
|
||||
"message": "Выделенная память"
|
||||
},
|
||||
"instance.settings.tabs.java.java-path-placeholder": {
|
||||
"message": "/путь/к/java"
|
||||
"message": "/path/to/java"
|
||||
},
|
||||
"instance.settings.tabs.window": {
|
||||
"message": "Окно"
|
||||
@@ -1102,5 +1018,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Загрузчик управляется сервером"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Файл проверяется только в том случае, если он загружен на Modrinth, независимо от его формата (включая .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Больше не предупреждать"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Подтверждение установки"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Всё равно установить"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Вредоносное ПО часто распространяется через сборки на таких платформах, как Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Этот файл не найден на Modrinth. Рекомендуется скачивать файлы только из надёжных источников."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Предупреждение о неизвестном файле"
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -11,63 +11,27 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Göm fler aktiva instanser"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Kopierat"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Kopiera detaljer"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Avvisa"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "Installationen misslyckades"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "Installationen misslyckades för att appen stängdes."
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "Installationen misslyckades av ett nätverksfel."
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "Installationen misslyckades med ett okänt fel."
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Öppna instans"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Försök igen"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Avbröts på grund av att appen stängdes"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Kunde inte läsa modpaket"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Avbruten"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Kunde inte ladda ner filer"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "Nedladdad fil är korrupt"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Kunde inte spara filer"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "Nedladdning kunde inte slutföras"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "Instans kunde inte hittas"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "Sökväg är ogiltig"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "Kunde inte uppdatera lokal data"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "Kunde inte nå Modrinth"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "Ingen behörighet att skriva"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "Kunde inte ladda ner paket"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "Någonting gick fel"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Okänd instans"
|
||||
},
|
||||
@@ -78,7 +42,7 @@
|
||||
"message": "Gör till primärinstans"
|
||||
},
|
||||
"app.action-bar.no-instances-running": {
|
||||
"message": "Inga aktiva instanser"
|
||||
"message": "Ingen aktiva instans"
|
||||
},
|
||||
"app.action-bar.offline": {
|
||||
"message": "Offline"
|
||||
@@ -216,7 +180,7 @@
|
||||
"message": "Upptäck servrar"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Göm redan tillagda servrar"
|
||||
"message": "Dölj servrar som redan är tillagda"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpaket"
|
||||
@@ -267,7 +231,7 @@
|
||||
"message": "Avslutar"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "Köad för installering"
|
||||
"message": "Förbereder instans"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Förbereder Java"
|
||||
@@ -291,25 +255,19 @@
|
||||
"message": "Läser pack information"
|
||||
},
|
||||
"app.install.phase.resolving_loader": {
|
||||
"message": "Fastställer loader"
|
||||
"message": "Laddar ner loadern"
|
||||
},
|
||||
"app.install.phase.resolving_minecraft": {
|
||||
"message": "Fastställer Minecraft"
|
||||
"message": "Laddar ner Minecraft"
|
||||
},
|
||||
"app.install.phase.resolving_pack": {
|
||||
"message": "Fastställer innehåll"
|
||||
},
|
||||
"app.install.phase.rolling_back": {
|
||||
"message": "Återställer"
|
||||
},
|
||||
"app.install.phase.running_loader_processors": {
|
||||
"message": "Kör loader-processorer"
|
||||
"message": "Laddar ner innehåll"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "All data från din instans kommer permanent raderas, däribland dina världar, konfigurationer samt allt installerat innehåll."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Detta kan inte ångras"
|
||||
"message": "Detta kan inte ogöras"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Radera instans"
|
||||
@@ -336,7 +294,7 @@
|
||||
"message": "Slutför uppdatering..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.resolving-versions": {
|
||||
"message": "Fastställer versioner..."
|
||||
"message": "Laddar versioner..."
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "projekt"
|
||||
@@ -368,9 +326,6 @@
|
||||
"app.instance.worlds.delete-world-modal.title": {
|
||||
"message": "Ta bort värld"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-body": {
|
||||
"message": "Denna värld kommer permanent raderas från instansen. Detta kan inte ångras."
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-header": {
|
||||
"message": "Raderar {name}"
|
||||
},
|
||||
@@ -398,41 +353,44 @@
|
||||
"app.instance.worlds.remove-server-modal.title": {
|
||||
"message": "Ta bort server"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-body": {
|
||||
"message": "Denna server kommer att tas bort från din serverlista och serverlistan i spelet. Du kan lägga till den igen senare om du känner till adressen."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-header": {
|
||||
"message": "Raderar {name}"
|
||||
},
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Sök {count} världar..."
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "Installera inte"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Innehåll krävs"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Installera för att spela"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Installera andå"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Installera"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} other {# moddar}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Modpaket som krävs"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Servern kräver moddar för att du ska kunna spela. Klicka på Installera för att sätta upp dem nödvändiga filerna från Modrinth, och starta sedan på servern direkt."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Delad instans"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Delad serverinstans"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Visa innehåll"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Uppdatera för att spela"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Tog bort"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Uppdatering krävs"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "En uppdatering krävs för att spela {name}. Vänligen uppdatera till senaste version för att starta spelet."
|
||||
@@ -440,27 +398,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Detta projekt är redan installerat"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Byt version"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Tillbaka till upptäck"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Installera innehåll till instans"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Alla versioner"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Ladda ner i webbläsare"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "Installerar"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Redan installerat"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Utvecklarläge aktiverat."
|
||||
},
|
||||
@@ -573,17 +516,11 @@
|
||||
"message": "Sakta ner!"
|
||||
},
|
||||
"app.skins.reorder-error.text": {
|
||||
"message": "Din ordning av utseenden kunde inte sparas."
|
||||
},
|
||||
"app.skins.reorder-error.title": {
|
||||
"message": "Misslyckades med att ordna om utseenden"
|
||||
"message": "Ditt utseende kunde inte sparas."
|
||||
},
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Chaos Cubed"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
@@ -624,7 +561,7 @@
|
||||
"message": "Logga in"
|
||||
},
|
||||
"app.skins.sign-in.description": {
|
||||
"message": "Vänligen logga in på ditt Minecraft-konto för att använda utseendehanteringfunktioner i Modrinth appen."
|
||||
"message": "Snälla logga in din Minecraft konto att använda hud hantering förmågor i Modrinth appen."
|
||||
},
|
||||
"app.skins.sign-in.rinthbot-alt": {
|
||||
"message": "Exalterad Modrinth bot"
|
||||
@@ -666,7 +603,7 @@
|
||||
"message": "Version {version} har installerats!"
|
||||
},
|
||||
"app.world.server-modal.placeholder-address": {
|
||||
"message": "exempel.modrinth.gg"
|
||||
"message": "example.modrinth.gg"
|
||||
},
|
||||
"app.world.server-modal.select-an-option": {
|
||||
"message": "Välj ett alternativ"
|
||||
@@ -741,7 +678,7 @@
|
||||
"message": "Sök efter vänner..."
|
||||
},
|
||||
"friends.section.heading": {
|
||||
"message": "{title} - {count}"
|
||||
"message": "{title}: {count}"
|
||||
},
|
||||
"friends.sign-in-to-add-friends": {
|
||||
"message": "<link>Logga in på ett Modrinth-konto</link> för att lägga till vänner och se vad de spelar!"
|
||||
@@ -861,19 +798,19 @@
|
||||
"message": "Alfa"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha.description": {
|
||||
"message": "Release-, beta- och alfaversioner kommer visas som tillgängliga uppdateringar."
|
||||
"message": "Utgåvor, beta och alfa versioner visas som tillgängliga uppdateringar."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta": {
|
||||
"message": "Beta"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta.description": {
|
||||
"message": "Release- och betaversioner kommer visas som tillgängliga uppdateringar."
|
||||
"message": "Utgåvor och beta versioner visas som tillgängliga uppdateringar."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release": {
|
||||
"message": "Release"
|
||||
"message": "Utgåva"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release.description": {
|
||||
"message": "Endast realeseversioner kommer visas som tillgängliga uppdateringar."
|
||||
"message": "Endast utgivna versioner visas som tillgängliga uppdateringar."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.select": {
|
||||
"message": "Välj uppdateringskanal"
|
||||
@@ -939,10 +876,10 @@
|
||||
"message": "Anpassad minnestilldelning"
|
||||
},
|
||||
"instance.settings.tabs.java.enter-environment-variables": {
|
||||
"message": "Ange miljövariabler..."
|
||||
"message": "Skriv in miljövariabler..."
|
||||
},
|
||||
"instance.settings.tabs.java.enter-java-arguments": {
|
||||
"message": "Ange Java-argument..."
|
||||
"message": "Skriv in Java-argument..."
|
||||
},
|
||||
"instance.settings.tabs.java.environment-variables": {
|
||||
"message": "Miljövariabler"
|
||||
@@ -1005,13 +942,13 @@
|
||||
"message": "Skapa genväg"
|
||||
},
|
||||
"instance.worlds.dont_show_on_home": {
|
||||
"message": "Visa inte på startsidan"
|
||||
"message": "Visa inte på Startsidan"
|
||||
},
|
||||
"instance.worlds.game_already_open": {
|
||||
"message": "Instans är redan öppen"
|
||||
},
|
||||
"instance.worlds.hardcore": {
|
||||
"message": "Hardcore-läge"
|
||||
"message": "Hardcore läge"
|
||||
},
|
||||
"instance.worlds.incompatible_server": {
|
||||
"message": "Servern är inkompatibel"
|
||||
@@ -1023,10 +960,10 @@
|
||||
"message": "Servern kunde inte kontaktas"
|
||||
},
|
||||
"instance.worlds.no_server_quick_play": {
|
||||
"message": "Du kan endast gå direkt in i servrar på Minecraft Alfa 1.0.5+"
|
||||
"message": "Du kan bara hoppa rakt in till servers på Minecraft Alfa 1.0.5+"
|
||||
},
|
||||
"instance.worlds.no_singleplayer_quick_play": {
|
||||
"message": "Du kan endast gå direkt in i enspelarläge världar på Minecraft 1.20+"
|
||||
"message": "Du kan bara hoppa rakt in till enspelarläge världar på Minecraft 1,20+"
|
||||
},
|
||||
"instance.worlds.play_instance": {
|
||||
"message": "Spela instans"
|
||||
@@ -1062,7 +999,7 @@
|
||||
"message": "Spel version är tillhandahållet av instansen"
|
||||
},
|
||||
"search.filter.locked.instance-loader.title": {
|
||||
"message": "Loader tillhandahålls av instansen"
|
||||
"message": "Laddaren tillhandahålls av instansen"
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "Synkronisera med instansen"
|
||||
@@ -1078,5 +1015,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader tillhandahålls av servern"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "En fil granskas bara om den laddas upp till Modrinth, oavsett dess filformat (däribland .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Visa inte denna varning igen"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Bekräfta installation"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Installera ändå"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Skadeprogram distribueras ofta via modpaketfiler genom att dela dem på plattformar som Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Vi kunde inte hitta filen på Modrinth. Vi rekommenderar starkt att endast installera filer från källor du litar på."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Okänd filvarning"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,6 +146,9 @@
|
||||
"app.browse.discover-servers": {
|
||||
"message": "สำรวจเซิร์ฟเวอร์"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "ซ่อนเซิร์ฟเวอร์ที่ดำเนินการเพิ่มแล้ว"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "แพ็กม็อด"
|
||||
},
|
||||
@@ -167,6 +170,9 @@
|
||||
"app.export-modal.header": {
|
||||
"message": "ส่งออกแพ็กม็อด"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "ชื่อแพ็กม็อด"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "ชื่อแพ็กม็อด"
|
||||
},
|
||||
@@ -245,6 +251,9 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "ค้าหาโลกทั้งหมด {count} โลก"
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "เนื้อหาที่จำเป็น"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "ติดตั้งเพื่อเล่น"
|
||||
},
|
||||
@@ -254,15 +263,27 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, other {# ม็อด}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "มอดแพ็กที่จำเป็น"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "เซิร์ฟเวอร์ดังกล่าวจำเป็นต้องใช้ม็อดเพื่อเล่น โปรดติดตั้งและตั้งค่าไฟล์อื่นใดที่จำเป็นจาก Modrinth ก่อน จากนั้นถึงจะสามารถเข้าเล่นเซิร์ฟเวอร์ได้"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "โปรแกรมที่มีร่วมกัน"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "เซิร์ฟเวอร์ของโปรแกรมที่มีร่วมกัน"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "ดูเนื้อหา"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "อัปเดตเพื่อเล่น"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "จำเป็นต้องอัปเดต"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "จำเป็นต้องอัปเดตเพื่อเล่น {name} กรุณาอัปเดตเป็นเวอร์ชันล่าสุดเพื่อเปิดเกม"
|
||||
},
|
||||
@@ -835,5 +856,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "ตัวรันถูกกำหนดโดยเซิร์ฟเวอร์แล้ว"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "ไฟล์จะได้รับการตรวจสอบโดยไม่คำนึงถึงประเภทของไฟล์ (รวมทั้ง .mrpack) เมื่อไฟล์ถูกอัปโหลดขึ้น Modrinth"
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "อย่าแสดงคำเตือนนี้อีก"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "ยืนยันการติดตั้ง"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "ดำเนินการติดตั้งต่อไป"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "มัลแวร์มักแฝงตัวมากับไฟล์แพ็กม็อดผ่านการแชร์ผ่านแพลตฟอร์มที่ไม่ใช่แพลตฟอร์มเฉพาะ เช่น ดิสคอร์ด"
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "เราไม่สามารถค้นหาไฟล์ดังกล่าวได้บน Modrinth พวกเราขอแนะนำอย่างมากกว่าควรติดตั้งไฟล์จากแหล่งที่น่าเชื่อถือเท่านั้น"
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "แจ้งเตือนไฟล์ไม่รู้จัก"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,81 +11,27 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Diğer çalışan kurulumları gizle"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Kopyalandı"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Detayları kopyala"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Reddet"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "Yükleme yapılamadı"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "Yükleme uygulama kapandığından yapılamadı."
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "Yükleme ağ hatasından dolayı yapılamadı."
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "Yükleme bilinmeyen bir hatadan yapılamadı."
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Kurulumu aç"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Yeniden Dene"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Uygulama kapatıldığı için iptal edildi"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Mod paketi okunamadı"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "İptal edildi"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "Temizleme bitmedi"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Dosyalar indirilemedi"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "İndirilmiş dosya bozuk"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Dosyalar kaydedilemedi"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "İndirme tamamlanamadı"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "Kurulum bulunamadı"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "Dosya yolu geçersiz"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "Mod paketi verileri geçersiz"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "Mod paketi dosyaları geçersiz meta verilere sahip"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "Java kurulumu bitirilemedi"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "Yükleyici kurulumu başarısız oldu"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "Yerel veriler güncellenemedi"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "Minecraft kurulumu başarısız oldu"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "Modrinth'e erişilemiyor"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "Yazmak için yetkiniz yok"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "Paket indirilemedi"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "Bir sorun oluştu"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Bilinmeyen kurulum"
|
||||
},
|
||||
@@ -258,7 +204,7 @@
|
||||
"message": "Mod paketini dışa aktar"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Mod paketi adı"
|
||||
"message": "Mod Paketi Adı"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Mod paketi adı"
|
||||
@@ -285,7 +231,7 @@
|
||||
"message": "Tamamlanıyor"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "İndirmek için sıraya alındı"
|
||||
"message": "Kurulum hazırlanıyor"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Java Hazırlanıyor"
|
||||
@@ -425,38 +371,29 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "{count} dünya ara..."
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "İndirme"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "İçerik gerekli"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Oynamak için yükleyin"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Yine de indir"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Yükle"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Bu davetiye Modrinth tarafından değil, başka bir Modrinth kullanıcısı tarafından oluşturulmuştur. Sadece güvendiğiniz kişilerden gelen davetleri kabul edin."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {#mod} other {#mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Dosya formatı ne olursa olsun (.mrpack dahil), bir dosya yalnızca Modrinth'e yüklendiğinde denetlenir."
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Gerekli mod paketi"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Bu sunucuya girebilmek için modlar gereklidir. Gerekli dosyaları Modrinth üzerinden kurmak için Yükle butonuna tıkla, ardından doğrudan sunucuya başlat."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Paylaşılan Kurulum"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Bu sunucunun mod paketi Modrinth'te yayınlanmamış doysaları mevcut. Yalnızca güvendiğiniz kaynaklardan dosya indirmenizi önemle tavsiye ederiz."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "Bilinmeyen dosya uyarısı"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Tanımlanamayan dosyalar"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Paylaşılan Sunucu Kurulumu"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "İçeriği görüntüle"
|
||||
@@ -464,8 +401,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Oynamak için güncelle"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Silindi"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Güncelleme gerekli"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "{name} oyununu oynamak için güncelleme gereklidir. Oyunu başlatmak için lütfen en son sürüme güncelleyin."
|
||||
@@ -473,27 +410,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Bu proje zaten kurulu"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Sürüm değiştir"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Keşfete geri dön"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "İçeriği kuruluma yükle"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Tüm sürümler"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Tarayıcıdan indir"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "Yükleniyor"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Zaten yüklenmiş"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Geliştirici modu açıldı."
|
||||
},
|
||||
@@ -614,9 +536,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "İnşaatçılar & Biyomlar"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Kaos Küpü"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Gökyüzünü kovala"
|
||||
},
|
||||
@@ -1111,5 +1030,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Yükleyici sunucu tarafından sağlanıyor"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Dosya formatı ne olursa olsun (.mrpack dahil), bir dosya yalnızca Modrinth'e yüklendiğinde denetlenir."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Bu uyarıyı tekrar gösterme"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "İndirmeyi onayla"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Yine de indir"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Kötü amaçlı yazılımlar genellikle Discord gibi platformlarda paylaşılan mod paketi dosyaları aracılığıyla yayılır."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Bu dosyayı Modrinth üzerinde bulamadık. Yalnızca güvendiğiniz kaynaklardan gelen dosyaları yüklemenizi şiddetle öneririz."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Bilinmeyen dosya uyarısı"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,87 +11,6 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Приховати більше запущених профілів"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Скопійовано"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Скопіювати деталі"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Відхилити"
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Відкрити екземпляр"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Спробувати знову"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Скасовано через закриття додатку"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Не вдалось прочитати збірку модифікацій"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Скасовано"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "Очищення не завершено"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Не вдалося завантажити файли"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "Завантажений файл пошкоджений"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Не вдалося зберегти файли"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "Завантаження не вдалося завершити"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "Екземпляр не знайдено"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "Шлях до файлу недійсний"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "Дані збірки модів недійсні"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "Файли збірки модифікацій містять не дійсні метадані"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "Не вдалося завершити встановлення Java"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "Помилка встановлення завантажувача"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "Не вдалося оновити локальні дані"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "Не вдалося встановити Minecraft"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "Не вдалося зʼєднатися з Modrinth"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "Немає прав для запису"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "Не вдалося встановити збірку"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "Щось пішло не так"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Невідомий екземпляр"
|
||||
},
|
||||
"app.action-bar.installs": {
|
||||
"message": "Установки"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "Зробити основним профілем"
|
||||
},
|
||||
@@ -182,12 +101,6 @@
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Час гри"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Автоматично пропускає підтвердження з низьким рівнем ризику, такі як встановлення дублікатів інсталяцій, звичайне видалення вмісту, масові оновлення, від’єднання інсталяцій та запити на відновлення. Попередження про небезпеку й надалі будуть показуватися."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Пропустити несуттєві попередження"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Умикає можливість перемикання бокової панелі."
|
||||
},
|
||||
@@ -234,7 +147,7 @@
|
||||
"message": "Дослідити сервера"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Приховати вже додані сервери"
|
||||
"message": "Сховати наявні сервери"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Збірки"
|
||||
@@ -269,60 +182,6 @@
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.install.phase.downloading_content": {
|
||||
"message": "Завантаження вмісту"
|
||||
},
|
||||
"app.install.phase.downloading_minecraft": {
|
||||
"message": "Завантаження Minecraft"
|
||||
},
|
||||
"app.install.phase.downloading_pack_file": {
|
||||
"message": "Завантаження файлу пакета"
|
||||
},
|
||||
"app.install.phase.extracting_overrides": {
|
||||
"message": "Розпакування файлів заміщення"
|
||||
},
|
||||
"app.install.phase.finalizing": {
|
||||
"message": "Завершення"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "У черзі на встановлення"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Підготовка Java"
|
||||
},
|
||||
"app.install.phase.preparing_java.downloading": {
|
||||
"message": "Завантаження Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.extracting": {
|
||||
"message": "Розпакування Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.fetching-metadata": {
|
||||
"message": "Отримання Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.resolving": {
|
||||
"message": "Підготовка Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.validating": {
|
||||
"message": "Перевірка Java {version}"
|
||||
},
|
||||
"app.install.phase.reading_pack_manifest": {
|
||||
"message": "Читання маніфесту пакета"
|
||||
},
|
||||
"app.install.phase.resolving_loader": {
|
||||
"message": "Визначення завантажувача"
|
||||
},
|
||||
"app.install.phase.resolving_minecraft": {
|
||||
"message": "Узгодження версії Minecraft"
|
||||
},
|
||||
"app.install.phase.resolving_pack": {
|
||||
"message": "Узгодження вмісту"
|
||||
},
|
||||
"app.install.phase.rolling_back": {
|
||||
"message": "Повернення"
|
||||
},
|
||||
"app.install.phase.running_loader_processors": {
|
||||
"message": "Запуск процесорів завантажувача"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Усі дані вашого профілю будуть видалені назавжди, включно з вашими світами, налаштуваннями та всім установленим умістом."
|
||||
},
|
||||
@@ -347,15 +206,6 @@
|
||||
"app.instance.modpack-already-installed.instance": {
|
||||
"message": "Профіль"
|
||||
},
|
||||
"app.instance.mods.bulk-update.downloading-projects": {
|
||||
"message": "Завантаження проєктів: {current, number}/{total, number}..."
|
||||
},
|
||||
"app.instance.mods.bulk-update.finishing": {
|
||||
"message": "Завершуємо оновлення…"
|
||||
},
|
||||
"app.instance.mods.bulk-update.resolving-versions": {
|
||||
"message": "Знаходимо версії…"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "проєкт"
|
||||
},
|
||||
@@ -380,18 +230,6 @@
|
||||
"app.instance.worlds.browse-servers": {
|
||||
"message": "Переглянути сервери"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.delete-button": {
|
||||
"message": "Видалити світ"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.title": {
|
||||
"message": "Видалити світ"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-body": {
|
||||
"message": "Цей світ буде видалено назавжди з цього екземпляра. Це не можна скасувати."
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-header": {
|
||||
"message": "Видалення {name}"
|
||||
},
|
||||
"app.instance.worlds.filter-modded": {
|
||||
"message": "Модифіковано"
|
||||
},
|
||||
@@ -410,53 +248,32 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "Сервера або світи не додано"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Видалити сервер"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.title": {
|
||||
"message": "Видалити сервер"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-body": {
|
||||
"message": "Цей сервер буде видалено з вашого списку серверів. Ви зможете повернути його, якщо знаєте адресу."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-header": {
|
||||
"message": "Видалення {name}"
|
||||
},
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Пошук {count} світів…"
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "Не встановлювати"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Потрібний уміст"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Установлення для гри"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Усе одно встановити"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Установити"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Це запрошення створив інший користувач Modrinth, не сам Modrinth. Приймайте запрошення лише від тих людей, яким довіряєте."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# мод} few {# мода} other {# модів}}"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Файл перевірятиметься, лише якщо його завантажено на Modrinth, незалежно від його формату (включно з .mrpack)."
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Потрібна збірка"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Для гри на цьому сервері потрібні моди. Натисніть «Установити», щоб налаштувати необхідні файли з Modrinth, а потім запустіть безпосередньо на сервері."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Профіль"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Ця збірка сервера містить файли, які не є опубліковані на Modrinth. Ми наполегливо рекомендуємо встановлювати лише ті файли, яким довіряєте."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "Попередження про невідомі файли"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Нерозпізнані файли"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Серверний профіль"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Дивитися вміст"
|
||||
@@ -464,8 +281,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Оновлення для гри"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Видалено"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Необхідне оновлення"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "«{name}» потребує оновлення, щоб грати. Будь ласка, оновіть до останньої версії, щоб запустити гру."
|
||||
@@ -473,27 +290,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Проєкт уже встановлено"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Змінити версію"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Повернутися до дослідження"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Установити вміст до профілю"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Усі версії"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Завантажити в браузері"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "Установлення"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Уже встановлено"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Увімкнено режим розробника."
|
||||
},
|
||||
@@ -614,9 +416,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Chaos Cubed"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
@@ -819,7 +618,7 @@
|
||||
"message": "Додавання файлів ({completed}/{total})"
|
||||
},
|
||||
"instance.files.save-as": {
|
||||
"message": "Зберегти як..."
|
||||
"message": "Зберегти як…"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Адреса"
|
||||
@@ -1034,9 +833,6 @@
|
||||
"instance.worlds.copy_address": {
|
||||
"message": "Скопіювати адресу"
|
||||
},
|
||||
"instance.worlds.create_shortcut": {
|
||||
"message": "Створити ярлик"
|
||||
},
|
||||
"instance.worlds.dont_show_on_home": {
|
||||
"message": "Не показувати на головній"
|
||||
},
|
||||
@@ -1111,5 +907,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Завантажувач наданий сервером"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Файл перевірятиметься лише, якщо його завантажено на Modrinth, незалежно від його формату (включно з .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Не показувати більше це попередження"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Підтвердити встановлення"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Усе одно встановити"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Шкідливе програмне забезпечення часто поширюють через файли збірок, які публікуються на таких платформах, як Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Ми не змогли знайти цей файл на Modrinth. Ми рекомендуємо встановлювати файли лише з тих джерел яким ви довіряєте."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Попередження про невідомий файл"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,33 +11,6 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Đóng các phiên bản đang chạy"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Thử lại"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Đã hủy do đóng ứng dụng"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Không đọc được modpack"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Đã hủy"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "Dọn dẹp không hoàn thện"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Không tải được tệp"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "Tệp được tải bị hỏng"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Không lưu được tệp"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "Không hoàn tất tải xuống"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "Đặt làm bản instance chính"
|
||||
},
|
||||
@@ -173,6 +146,9 @@
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Khám phá máy chủ"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Ẩn các server đã thêm"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpack"
|
||||
},
|
||||
@@ -194,6 +170,9 @@
|
||||
"app.export-modal.header": {
|
||||
"message": "Xuất modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Tên modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Tên modpack"
|
||||
},
|
||||
@@ -251,15 +230,6 @@
|
||||
"app.instance.worlds.browse-servers": {
|
||||
"message": "Tìm kiếm máy chủ"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.delete-button": {
|
||||
"message": "Xóa thế giới"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.title": {
|
||||
"message": "Xóa thế giới"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-header": {
|
||||
"message": "Đang xóa {name}"
|
||||
},
|
||||
"app.instance.worlds.filter-modded": {
|
||||
"message": "Modded"
|
||||
},
|
||||
@@ -278,44 +248,41 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "Không có máy chủ hay thế giới nào đã được thêm"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Bỏ khỏi danh sách"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.title": {
|
||||
"message": "Xóa máy chủ"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-header": {
|
||||
"message": "{name} sẽ bị xóa"
|
||||
},
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Tìm kiếm {count} world..."
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "Ngừng tải"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Nội dung bắt buộc"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Tải xuống để chơi"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "Tải tiếp"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Tải xuống"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, other {# mod}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Yêu cầu modpack"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Máy chủ này yêu cầu mod để có thể chơi. Vui lòng ấn vào tải xuống và tải các tệp bắt buộc từ Modrinth và khởi chạy trực tiếp để tham gia máy chủ."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Chia sẻ hồ sơ"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Chia sẻ hồ sơ máy chủ"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Xem nội dung"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Cập nhật và bắt đầu chơi"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Đã bỏ"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Yêu cầu cập nhật"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Bạn cần cập nhật {name} để có thể chơi. Vui lòng cập nhật lên bản mới nhất để khởi chạy trò chơi."
|
||||
@@ -323,27 +290,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Dự án này đã được cài đặt"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "Đổi phiên bản"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Quay lại trang Khám Phá"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Cài đặt nội dung vào phiên bản"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Tất cả phiên bản"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "Tải trong trình duyệt"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "Đang tải"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Đã có sẵn"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Chế độ nhà phát triển đã được bật."
|
||||
},
|
||||
@@ -464,9 +416,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "Chaos Cubed"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
@@ -884,9 +833,6 @@
|
||||
"instance.worlds.copy_address": {
|
||||
"message": "Sao chép địa chỉ"
|
||||
},
|
||||
"instance.worlds.create_shortcut": {
|
||||
"message": "Tạo lối tắt"
|
||||
},
|
||||
"instance.worlds.dont_show_on_home": {
|
||||
"message": "Không hiện ở Trang chủ"
|
||||
},
|
||||
@@ -961,5 +907,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader được cung cấp bởi máy chủ"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Tệp chỉ được xem xét nếu nó được tải lên Modrinth, bất kể định dạng tệp của nó là gì (bao gồm cả .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Đừng hiển thị cảnh báo này nữa"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Xác nhận cài đặt"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "Tiếp tục cài đặt"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "Phần mềm độc hại thường được phát tán thông qua các tệp modpack bằng cách chia sẻ chúng trên các nền tảng như Discord."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "Chúng tôi không tìm thấy tập tin này trên Modrinth. Chúng tôi đặc biệt khuyên bạn chỉ nên cài đặt các tập tin từ các nguồn đáng tin cậy."
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "Cảnh báo tệp không xác định"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,81 +11,27 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "隐藏更多运行中的实例"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "已复制"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "复制详细信息"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "忽略"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "安装失败"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "由于应用关闭,安装失败。"
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "由于网络错误,安装失败。"
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "由于未知错误,安装失败。"
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "打开实例"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "重试"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "由于应用关闭而取消"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "整合包读取失败"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "已取消"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "未完成清理"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "无法下载文件"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "下载的文件已损坏"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "无法保存文件"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "无法完成下载"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "无法找到实例"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "文件路径无效"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "整合包数据无效"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "整合包文件含有无效元数据"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "无法完成 Java 配置"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "加载器配置失败"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "无法更新本地数据"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "Minecraft 配置失败"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "无法连接 Modrinth"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "没有写入权限"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "无法下载包"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "出错了"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "未知的实例"
|
||||
},
|
||||
@@ -285,7 +231,7 @@
|
||||
"message": "完成"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "已加入安装队列"
|
||||
"message": "准备实例"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "正在准备 Java"
|
||||
@@ -393,7 +339,7 @@
|
||||
"message": "正在删除 {name}"
|
||||
},
|
||||
"app.instance.worlds.filter-modded": {
|
||||
"message": "含模组"
|
||||
"message": "模组适配"
|
||||
},
|
||||
"app.instance.worlds.filter-offline": {
|
||||
"message": "离线"
|
||||
@@ -425,38 +371,29 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "搜索 {count} 个世界……"
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "不要安装"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "需求内容"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "安装以游玩"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "无视风险继续安装"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "安装"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "这个邀请是由另一位 Modrinth 用户创建的,而不是 Modrinth 官方。只接受你信任的人的邀请。"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count} 个模组"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "只有上传到 Modrinth 的文件才会经过审核,无论其文件格式如何(包括 .mrpack)。"
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "需求整合包"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "此服务器需要安装模组才能游玩。点击安装,从 Modrinth 下载所需文件,然后直接进入服务器。"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "共享实例"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "这个整合包包含一些未在 Modrinth 发布的文件。我们强烈建议只从你信任的来源安装文件。"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "未知文件警告"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "未识别文件"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "共享的服务端实例"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "查看内容"
|
||||
@@ -464,8 +401,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "更新以游玩"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "已移除"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "需要更新"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "需要更新至最新版本才能运行 {name}。请更新后启动游戏。"
|
||||
@@ -473,27 +410,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "此项目已安装"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "切换版本"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "返回发现页"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "将内容安装到实例中"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "所有版本"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "在浏览器中下载"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "安装中"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "已安装"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "开发者模式已启用。"
|
||||
},
|
||||
@@ -614,9 +536,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "建造者与生物群系"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "混沌立方"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "追逐天空"
|
||||
},
|
||||
@@ -1035,7 +954,7 @@
|
||||
"message": "复制地址"
|
||||
},
|
||||
"instance.worlds.create_shortcut": {
|
||||
"message": "创建快捷方式"
|
||||
"message": "创建快照"
|
||||
},
|
||||
"instance.worlds.dont_show_on_home": {
|
||||
"message": "在主界面隐藏"
|
||||
@@ -1111,5 +1030,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "加载器由服务器提供"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "只有上传到 Modrinth 的文件才会经过审核,无论其文件格式如何(包括 .mrpack)。"
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "不再显示此警告"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "确认安装"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "仍然安装"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "恶意软件常常通过整合包文件在 Discord 等平台上分享而传播。"
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "我们在 Modrinth 上找不到此文件。强烈建议你仅从可信来源安装文件。"
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "未知文件警告"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,81 +11,27 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "隱藏更多執行中的實例"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "已複製"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "複製詳細資訊"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "忽略"
|
||||
},
|
||||
"app.action-bar.install.failed": {
|
||||
"message": "無法安裝"
|
||||
},
|
||||
"app.action-bar.install.failed-app-closed": {
|
||||
"message": "由於應用程式關閉,無法安裝。"
|
||||
},
|
||||
"app.action-bar.install.failed-network": {
|
||||
"message": "由於網路錯誤,無法安裝。"
|
||||
},
|
||||
"app.action-bar.install.failed-unknown": {
|
||||
"message": "由於未知錯誤,無法安裝。"
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "開啟實例"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "重試"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "由於應用程式關閉而取消"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "無法讀取模組包"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "已取消"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "未完成清理"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "無法下載檔案"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "下載的檔案已損毀"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "無法儲存檔案"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "無法完成下載"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "找不到實例"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "檔案路徑無效"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "模組包資料無效"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "模組包檔案的詮釋資料無效"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "無法完成 Java 設定"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "無法設定載入器"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "無法更新本地資料"
|
||||
},
|
||||
"app.action-bar.install.summary.minecraft-setup-failed": {
|
||||
"message": "無法設定 Minecraft"
|
||||
},
|
||||
"app.action-bar.install.summary.modrinth-unreachable": {
|
||||
"message": "無法連線到 Modrinth"
|
||||
},
|
||||
"app.action-bar.install.summary.no-write-permission": {
|
||||
"message": "沒有寫入權限"
|
||||
},
|
||||
"app.action-bar.install.summary.pack-download-failed": {
|
||||
"message": "無法下載模組包"
|
||||
},
|
||||
"app.action-bar.install.summary.unexpected-error": {
|
||||
"message": "出了點狀況"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "未知的實例"
|
||||
},
|
||||
@@ -285,7 +231,7 @@
|
||||
"message": "即將完成"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "已排入安裝佇列"
|
||||
"message": "正在準備實例"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "正在準備 Java"
|
||||
@@ -387,10 +333,10 @@
|
||||
"message": "刪除世界"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-body": {
|
||||
"message": "這個世界將會被永久刪除,此操作無法復原。"
|
||||
"message": "此世界將會被永久刪除,此操作無法復原。"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-header": {
|
||||
"message": "即將刪除 {name}"
|
||||
"message": "正在刪除 {name}"
|
||||
},
|
||||
"app.instance.worlds.filter-modded": {
|
||||
"message": "模組"
|
||||
@@ -420,43 +366,34 @@
|
||||
"message": "這個伺服器將從你的伺服器清單中移除。如果你記得伺服器位址,稍後可以將其重新新增回來。"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-header": {
|
||||
"message": "即將移除 {name}"
|
||||
"message": "正在移除 {name}"
|
||||
},
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "搜尋 {count} 個世界..."
|
||||
},
|
||||
"app.modal.install-to-play.dont-install": {
|
||||
"message": "不要安裝"
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "所需內容"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "安裝以遊玩"
|
||||
},
|
||||
"app.modal.install-to-play.install-anyway": {
|
||||
"message": "仍要安裝"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "安裝"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "這份邀請是由另一位 Modrinth 使用者建立,並非由 Modrinth 官方建立。請僅接受來自你信任的人的邀請。"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, other {# 個模組}}"
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "只有在 Modrinth 上發布的檔案才會經過審查,無論其檔案格式為何(包含 .mrpack)。"
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "所需模組包"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "這個伺服器需要模組才能遊玩。請點選「安裝」以從 Modrinth 設定所需的檔案,完成後即可直接加入伺服器。"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "共用實例"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "這個伺服器模組包中包含未在 Modrinth 上發布的檔案。強烈建議你僅安裝來自信任來源的檔案。"
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "未知檔案警告"
|
||||
},
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "無法辨識的檔案"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "共用伺服器實例"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "檢視內容"
|
||||
@@ -464,8 +401,8 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "更新以遊玩"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "已移除"
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "需要更新"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "需要更新才能遊玩「{name}」。請更新至最新版本以啟動遊戲。"
|
||||
@@ -473,27 +410,12 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "這個專案已安裝"
|
||||
},
|
||||
"app.project.install-button.switch-version": {
|
||||
"message": "切換版本"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "返回瀏覽"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "將內容安裝至實例"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "所有版本"
|
||||
},
|
||||
"app.project.version.download-in-browser": {
|
||||
"message": "在瀏覽器中下載"
|
||||
},
|
||||
"app.project.version.installing": {
|
||||
"message": "正在安裝"
|
||||
},
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "已安裝"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "開發人員模式已啟用。"
|
||||
},
|
||||
@@ -614,9 +536,6 @@
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "建造者&生態域"
|
||||
},
|
||||
"app.skins.section.chaos-cubed": {
|
||||
"message": "混沌立方"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "追逐天空"
|
||||
},
|
||||
@@ -1111,5 +1030,26 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "載入器由伺服器提供"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "只有上傳至 Modrinth 的檔案才會經過審查,無論其檔案格式為何(包含 .mrpack)。"
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "不要再顯示這則警告"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "確認安裝"
|
||||
},
|
||||
"unknown-pack-warning-modal.install-anyway": {
|
||||
"message": "仍要安裝"
|
||||
},
|
||||
"unknown-pack-warning-modal.malware-statement": {
|
||||
"message": "惡意軟體經常透過 Discord 等平臺分享模組包檔案來進行傳播。"
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.body": {
|
||||
"message": "我們在 Modrinth 上找不到這個檔案。強烈建議你僅安裝來自信任來源的檔案。"
|
||||
},
|
||||
"unknown-pack-warning-modal.warning.title": {
|
||||
"message": "未知檔案警告"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -884,7 +884,7 @@ async function search(requestParams: string) {
|
||||
const rawResults = await queryClient.fetchQuery({
|
||||
queryKey: ['search', 'v3', requestParams],
|
||||
queryFn: () =>
|
||||
get_search_results_v3(requestParams, 'must_revalidate') as Promise<{
|
||||
get_search_results_v3(requestParams) as Promise<{
|
||||
result: Labrinth.Search.v3.SearchResults & {
|
||||
hits: (Labrinth.Search.v3.ResultSearchProject & { installed?: boolean })[]
|
||||
}
|
||||
|
||||
@@ -13,31 +13,207 @@
|
||||
@unlinked="fetchInstance"
|
||||
/>
|
||||
<UpdateToPlayModal ref="updateToPlayModal" :instance="instance" />
|
||||
<InstancePageHeader
|
||||
:instance="instance"
|
||||
:icon-src="icon"
|
||||
:is-server-instance="isServerInstance"
|
||||
:show-instance-play-time="showInstancePlayTime"
|
||||
:time-played="timePlayed"
|
||||
:playing="playing"
|
||||
:loading="loading"
|
||||
:stopping="stopping"
|
||||
:loading-server-ping="loadingServerPing"
|
||||
:players-online="playersOnline"
|
||||
:status-online="statusOnline"
|
||||
:recent-plays="recentPlays"
|
||||
:ping="ping"
|
||||
:minecraft-server="minecraftServer"
|
||||
:linked-project-v3="linkedProjectV3"
|
||||
@repair="() => repairInstance()"
|
||||
@stop="() => stopInstance('InstancePage')"
|
||||
@play="() => startInstance('InstancePage')"
|
||||
@play-server="() => handlePlayServer()"
|
||||
@settings="() => settingsModal?.show()"
|
||||
@open-folder="() => instance && showInstanceInFolder(instance.id)"
|
||||
@export="() => exportModal?.show()"
|
||||
@create-shortcut="() => createShortcut()"
|
||||
/>
|
||||
<ContentPageHeader>
|
||||
<template #icon>
|
||||
<Avatar
|
||||
:src="icon ? icon : undefined"
|
||||
:alt="instance.name"
|
||||
size="64px"
|
||||
:tint-by="instance.id"
|
||||
/>
|
||||
</template>
|
||||
<template #title>
|
||||
{{ instance.name }}
|
||||
</template>
|
||||
<template #stats>
|
||||
<div class="flex items-center flex-wrap gap-2">
|
||||
<template v-if="!isServerInstance">
|
||||
<div class="flex items-center gap-2 capitalize font-medium">
|
||||
{{ instance.loader }} {{ instance.game_version }}
|
||||
</div>
|
||||
|
||||
<template v-if="showInstancePlayTime">
|
||||
<div class="w-1.5 h-1.5 rounded-full bg-surface-5"></div>
|
||||
|
||||
<div class="flex items-center gap-2 font-medium">
|
||||
<template v-if="timePlayed > 0">
|
||||
{{ timePlayedHumanized }}
|
||||
</template>
|
||||
<template v-else> Never played </template>
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
<template v-else>
|
||||
<template v-if="loadingServerPing">
|
||||
<ServerOnlinePlayers
|
||||
v-if="playersOnline !== undefined"
|
||||
:online="playersOnline"
|
||||
:status-online="statusOnline"
|
||||
hide-label
|
||||
/>
|
||||
<ServerRecentPlays :recent-plays="recentPlays ?? 0" hide-label />
|
||||
<div
|
||||
v-if="
|
||||
(playersOnline !== undefined || recentPlays !== undefined) &&
|
||||
(minecraftServer?.region || ping)
|
||||
"
|
||||
class="w-1.5 h-1.5 rounded-full bg-surface-5"
|
||||
></div>
|
||||
<ServerPing v-if="ping" :ping="ping" />
|
||||
</template>
|
||||
|
||||
<ServerRegion v-if="minecraftServer?.region" :region="minecraftServer?.region" />
|
||||
|
||||
<div
|
||||
v-if="minecraftServer?.region || ping"
|
||||
class="w-1.5 h-1.5 rounded-full bg-surface-5"
|
||||
></div>
|
||||
|
||||
<div
|
||||
v-if="linkedProjectV3"
|
||||
class="flex gap-1.5 items-center font-medium text-primary"
|
||||
>
|
||||
Linked to
|
||||
<Avatar
|
||||
:src="linkedProjectV3.icon_url"
|
||||
:alt="linkedProjectV3.name"
|
||||
:tint-by="instance.id"
|
||||
size="24px"
|
||||
/>
|
||||
<router-link
|
||||
:to="`/project/${linkedProjectV3.slug ?? linkedProjectV3.id}`"
|
||||
class="hover:underline text-primary truncate"
|
||||
>
|
||||
{{ linkedProjectV3.name }}
|
||||
</router-link>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
<template #actions>
|
||||
<div class="flex gap-2">
|
||||
<ButtonStyled
|
||||
v-if="
|
||||
[
|
||||
'installing',
|
||||
'pack_installing',
|
||||
'pack_installed',
|
||||
'not_installed',
|
||||
'minecraft_installing',
|
||||
].includes(instance.install_stage)
|
||||
"
|
||||
color="brand"
|
||||
size="large"
|
||||
>
|
||||
<button disabled>Installing...</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled
|
||||
v-else-if="instance.install_stage !== 'installed'"
|
||||
color="brand"
|
||||
size="large"
|
||||
>
|
||||
<button @click="repairInstance()">
|
||||
<DownloadIcon />
|
||||
Repair
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else-if="playing === true" color="red" size="large">
|
||||
<button :disabled="stopping" @click="stopInstance('InstancePage')">
|
||||
<StopCircleIcon />
|
||||
{{ stopping ? 'Stopping...' : 'Stop' }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled
|
||||
v-else-if="playing === false && loading === false && !isServerInstance"
|
||||
color="brand"
|
||||
size="large"
|
||||
>
|
||||
<button @click="startInstance('InstancePage')">
|
||||
<PlayIcon />
|
||||
Play
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<div
|
||||
v-else-if="playing === false && loading === false && isServerInstance"
|
||||
class="joined-buttons"
|
||||
>
|
||||
<ButtonStyled color="brand" size="large">
|
||||
<button @click="handlePlayServer()">
|
||||
<PlayIcon />
|
||||
Play
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand" size="large">
|
||||
<OverflowMenu
|
||||
:options="[
|
||||
{
|
||||
id: 'join_server',
|
||||
action: () => handlePlayServer(),
|
||||
},
|
||||
{
|
||||
id: 'launch_instance',
|
||||
action: () => startInstance('InstancePage'),
|
||||
},
|
||||
]"
|
||||
>
|
||||
<div class="w-0 text-xl relative top-0.5 right-2.5">
|
||||
<DropdownIcon />
|
||||
</div>
|
||||
|
||||
<template #join_server>
|
||||
<PlayIcon />
|
||||
Join server
|
||||
</template>
|
||||
<template #launch_instance>
|
||||
<PlayIcon />
|
||||
Launch instance
|
||||
</template>
|
||||
</OverflowMenu>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
<ButtonStyled
|
||||
v-else-if="loading === true && playing === false"
|
||||
color="brand"
|
||||
size="large"
|
||||
>
|
||||
<button disabled>Starting...</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular size="large">
|
||||
<button v-tooltip="'Instance settings'" @click="settingsModal?.show()">
|
||||
<SettingsIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled type="transparent" circular size="large">
|
||||
<OverflowMenu
|
||||
:options="[
|
||||
{
|
||||
id: 'open-folder',
|
||||
action: () => {
|
||||
if (instance) showInstanceInFolder(instance.id)
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'export-mrpack',
|
||||
action: () => exportModal?.show(),
|
||||
},
|
||||
{
|
||||
id: 'create-shortcut',
|
||||
action: () => createShortcut(),
|
||||
},
|
||||
]"
|
||||
>
|
||||
<MoreVerticalIcon />
|
||||
<template #share-instance> <UserPlusIcon /> Share instance </template>
|
||||
<template #host-a-server> <ServerIcon /> Create a server </template>
|
||||
<template #open-folder> <FolderOpenIcon /> Open folder </template>
|
||||
<template #export-mrpack> <PackageIcon /> Export modpack </template>
|
||||
<template #create-shortcut> <ExternalIcon /> Create shortcut </template>
|
||||
</OverflowMenu>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</template>
|
||||
</ContentPageHeader>
|
||||
</div>
|
||||
<div :class="['px-6', { 'shrink-0': isFixedRender }]">
|
||||
<NavTabs :links="tabs" />
|
||||
@@ -96,30 +272,49 @@ import {
|
||||
BoxesIcon,
|
||||
CheckCircleIcon,
|
||||
ClipboardCopyIcon,
|
||||
DownloadIcon,
|
||||
DropdownIcon,
|
||||
EditIcon,
|
||||
ExternalIcon,
|
||||
EyeIcon,
|
||||
FolderOpenIcon,
|
||||
GlobeIcon,
|
||||
HashIcon,
|
||||
MoreVerticalIcon,
|
||||
PackageIcon,
|
||||
PlayIcon,
|
||||
PlusIcon,
|
||||
ServerIcon,
|
||||
SettingsIcon,
|
||||
StopCircleIcon,
|
||||
TerminalSquareIcon,
|
||||
UpdatedIcon,
|
||||
UserPlusIcon,
|
||||
XIcon,
|
||||
} from '@modrinth/assets'
|
||||
import { injectNotificationManager, NavTabs, useLoadingBarToken } from '@modrinth/ui'
|
||||
import {
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
ContentPageHeader,
|
||||
injectNotificationManager,
|
||||
NavTabs,
|
||||
OverflowMenu,
|
||||
ServerOnlinePlayers,
|
||||
ServerPing,
|
||||
ServerRecentPlays,
|
||||
ServerRegion,
|
||||
useLoadingBarToken,
|
||||
} from '@modrinth/ui'
|
||||
import { useQueryClient } from '@tanstack/vue-query'
|
||||
import { convertFileSrc } from '@tauri-apps/api/core'
|
||||
import dayjs from 'dayjs'
|
||||
import duration from 'dayjs/plugin/duration'
|
||||
import relativeTime from 'dayjs/plugin/relativeTime'
|
||||
import { computed, onUnmounted, ref, shallowRef, watch } from 'vue'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
|
||||
import ContextMenu from '@/components/ui/ContextMenu.vue'
|
||||
import ExportModal from '@/components/ui/ExportModal.vue'
|
||||
import InstancePageHeader from '@/components/ui/instance-page-header/index.vue'
|
||||
import InstanceSettingsModal from '@/components/ui/modal/InstanceSettingsModal.vue'
|
||||
import UpdateToPlayModal from '@/components/ui/modal/UpdateToPlayModal.vue'
|
||||
import {
|
||||
@@ -141,6 +336,7 @@ import { injectServerInstall } from '@/providers/server-install'
|
||||
import { handleSevereError } from '@/store/error.js'
|
||||
import { useBreadcrumbs, useTheming } from '@/store/state'
|
||||
|
||||
dayjs.extend(duration)
|
||||
dayjs.extend(relativeTime)
|
||||
|
||||
const { addNotification, handleError } = injectNotificationManager()
|
||||
@@ -562,6 +758,22 @@ const timePlayed = computed(() => {
|
||||
: 0
|
||||
})
|
||||
|
||||
const timePlayedHumanized = computed(() => {
|
||||
const duration = dayjs.duration(timePlayed.value, 'seconds')
|
||||
const hours = Math.floor(duration.asHours())
|
||||
if (hours >= 1) {
|
||||
return hours + ' hour' + (hours > 1 ? 's' : '')
|
||||
}
|
||||
|
||||
const minutes = Math.floor(duration.asMinutes())
|
||||
if (minutes >= 1) {
|
||||
return minutes + ' minute' + (minutes > 1 ? 's' : '')
|
||||
}
|
||||
|
||||
const seconds = Math.floor(duration.asSeconds())
|
||||
return seconds + ' second' + (seconds > 1 ? 's' : '')
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
unlistenProcesses()
|
||||
unlistenInstances()
|
||||
|
||||
@@ -2,13 +2,6 @@
|
||||
<ReadyTransition :pending="loading">
|
||||
<ContentPageLayout>
|
||||
<template #modals>
|
||||
<UnknownFileWarningModal
|
||||
ref="unknownFileWarningModal"
|
||||
mode="mod"
|
||||
:file-name="unknownFileName"
|
||||
@cancel="resolveUnknownFileWarning(false)"
|
||||
@continue="handleUnknownFileContinue"
|
||||
/>
|
||||
<ShareModalWrapper
|
||||
ref="shareModal"
|
||||
:share-title="formatMessage(messages.shareTitle)"
|
||||
@@ -94,7 +87,6 @@ import {
|
||||
provideAppBackup,
|
||||
provideContentManager,
|
||||
ReadyTransition,
|
||||
UnknownFileWarningModal,
|
||||
useDebugLogger,
|
||||
useVIntl,
|
||||
versionChangesGameVersion,
|
||||
@@ -121,7 +113,6 @@ import {
|
||||
add_project_from_path,
|
||||
edit,
|
||||
get_linked_modpack_content,
|
||||
is_file_on_modrinth,
|
||||
list,
|
||||
remove_project,
|
||||
switch_project_version_with_dependencies,
|
||||
@@ -130,12 +121,10 @@ import {
|
||||
update_managed_modrinth_version,
|
||||
} from '@/helpers/instance'
|
||||
import { type InstanceContentData, loadInstanceContentData } from '@/helpers/instance-content'
|
||||
import { get as getSettings, set as setSettings } from '@/helpers/settings'
|
||||
import type { CacheBehaviour, GameInstance } from '@/helpers/types'
|
||||
import { highlightModInInstance } from '@/helpers/utils.js'
|
||||
import { injectContentInstall } from '@/providers/content-install'
|
||||
import { useTheming } from '@/store/state'
|
||||
import type { FeatureFlag } from '@/store/theme'
|
||||
|
||||
const messages = defineMessages({
|
||||
shareTitle: {
|
||||
@@ -186,7 +175,6 @@ const router = useRouter()
|
||||
const queryClient = useQueryClient()
|
||||
const debug = useDebugLogger('Mods:ContentUpdate')
|
||||
const themeStore = useTheming()
|
||||
const skipUnknownFileWarningFeatureFlag = 'skip_unknown_pack_warning' as FeatureFlag
|
||||
const skipNonEssentialWarnings = computed(() =>
|
||||
themeStore.getFeatureFlag('skip_non_essential_warnings'),
|
||||
)
|
||||
@@ -296,9 +284,6 @@ const exportModal = ref(null)
|
||||
const contentUpdaterModal = ref<InstanceType<typeof ContentUpdaterModal> | null>()
|
||||
const modpackContentModal = ref<InstanceType<typeof ModpackContentModal> | null>()
|
||||
const modpackUpdateConfirmModal = ref<InstanceType<typeof ConfirmModpackUpdateModal> | null>()
|
||||
const unknownFileWarningModal = ref<InstanceType<typeof UnknownFileWarningModal> | null>()
|
||||
const unknownFileName = ref('')
|
||||
let resolveUnknownFileConfirmation: ((confirmed: boolean) => void) | null = null
|
||||
|
||||
const modpackContentQueryKey = computed(() => ['linkedModpackContent', props.instance.id])
|
||||
const modpackContentQuery = useQuery({
|
||||
@@ -497,34 +482,14 @@ async function handleUploadFiles() {
|
||||
if (!props.instance) return
|
||||
const files = await open({ multiple: true })
|
||||
if (!files) return
|
||||
const selectedFiles: Array<{ path: string; filename: string }> = []
|
||||
for (const file of files) {
|
||||
const path = (file as { path?: string }).path ?? file
|
||||
if (typeof path !== 'string') continue
|
||||
selectedFiles.push({
|
||||
path,
|
||||
filename: path.split(/[\\/]/).pop() ?? path,
|
||||
})
|
||||
}
|
||||
|
||||
const fileRecognition = await Promise.all(
|
||||
selectedFiles.map(async ({ path }) => {
|
||||
try {
|
||||
return await is_file_on_modrinth(path)
|
||||
} catch {
|
||||
return true
|
||||
}
|
||||
}),
|
||||
)
|
||||
|
||||
const addedFiles: string[] = []
|
||||
for (const [index, { path, filename }] of selectedFiles.entries()) {
|
||||
if (!fileRecognition[index] && !(await confirmUnknownFileInstallation(filename))) {
|
||||
continue
|
||||
}
|
||||
for (const file of files) {
|
||||
const path = (file as { path?: string }).path ?? file
|
||||
const fileName = typeof path === 'string' ? (path.split('/').pop() ?? path) : String(path)
|
||||
try {
|
||||
await add_project_from_path(props.instance.id, path)
|
||||
addedFiles.push(filename)
|
||||
addedFiles.push(fileName)
|
||||
} catch (e) {
|
||||
handleError(e as Error)
|
||||
}
|
||||
@@ -549,39 +514,6 @@ async function handleUploadFiles() {
|
||||
}
|
||||
}
|
||||
|
||||
function confirmUnknownFileInstallation(fileName: string) {
|
||||
if (themeStore.getFeatureFlag(skipUnknownFileWarningFeatureFlag)) {
|
||||
return Promise.resolve(true)
|
||||
}
|
||||
|
||||
unknownFileName.value = fileName
|
||||
return new Promise<boolean>((resolve) => {
|
||||
resolveUnknownFileConfirmation = resolve
|
||||
void nextTick(() => unknownFileWarningModal.value?.show())
|
||||
})
|
||||
}
|
||||
|
||||
function resolveUnknownFileWarning(confirmed: boolean) {
|
||||
const resolve = resolveUnknownFileConfirmation
|
||||
resolveUnknownFileConfirmation = null
|
||||
unknownFileName.value = ''
|
||||
resolve?.(confirmed)
|
||||
}
|
||||
|
||||
async function handleUnknownFileContinue(dontShowAgain: boolean) {
|
||||
if (dontShowAgain) {
|
||||
themeStore.featureFlags[skipUnknownFileWarningFeatureFlag] = true
|
||||
try {
|
||||
const settings = await getSettings()
|
||||
settings.feature_flags[skipUnknownFileWarningFeatureFlag] = true
|
||||
await setSettings(settings)
|
||||
} catch (error) {
|
||||
handleError(error as Error)
|
||||
}
|
||||
}
|
||||
resolveUnknownFileWarning(true)
|
||||
}
|
||||
|
||||
async function toggleDisableMod(mod: ContentItem, desiredEnabled?: boolean) {
|
||||
if (!mod.file_path) return
|
||||
const operation = beginContentOperation(mod)
|
||||
|
||||
@@ -59,100 +59,142 @@
|
||||
>
|
||||
<ProjectBackgroundGradient :project="data" />
|
||||
</Teleport>
|
||||
<ProjectPageHeader
|
||||
<ProjectHeader
|
||||
v-else
|
||||
:project="data"
|
||||
:project-v3="projectV3"
|
||||
:show-status-badge="data.status !== 'approved'"
|
||||
:ping="serverPing"
|
||||
@contextmenu.prevent.stop="handleRightClick"
|
||||
@category="(category) => router.push(`${projectSearchUrl}?f=categories:${category}`)"
|
||||
>
|
||||
<template #actions>
|
||||
<template v-if="isServerProject">
|
||||
<ButtonStyled v-if="serverPlaying" color="red" size="large">
|
||||
<button type="button" @click="handleStopServer">
|
||||
<StopCircleIcon />
|
||||
{{ formatMessage(commonMessages.stopButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else color="brand" size="large">
|
||||
<button type="button" :disabled="serverInstallLoading" @click="handleClickPlay">
|
||||
<PlayIcon />
|
||||
{{
|
||||
serverInstallLoading
|
||||
? formatMessage(commonMessages.installingLabel)
|
||||
: formatMessage(commonMessages.playButton)
|
||||
}}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular size="large">
|
||||
<button
|
||||
v-tooltip="formatMessage(commonMessages.addServerToInstanceButton)"
|
||||
type="button"
|
||||
:aria-label="formatMessage(commonMessages.addServerToInstanceButton)"
|
||||
@click="handleAddServerToInstance"
|
||||
>
|
||||
<PlusIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular size="large" type="transparent">
|
||||
<TeleportOverflowMenu
|
||||
:options="serverProjectHeaderMoreActions"
|
||||
tooltip="More options"
|
||||
aria-label="More options"
|
||||
>
|
||||
<MoreVerticalIcon />
|
||||
</TeleportOverflowMenu>
|
||||
</ButtonStyled>
|
||||
</template>
|
||||
<template v-else>
|
||||
<ButtonStyled v-if="showSwitchVersion && onVersionsPage" size="large">
|
||||
<button v-tooltip="formatMessage(messages.alreadyInstalled)" type="button" disabled>
|
||||
<CheckIcon />
|
||||
{{ formatMessage(commonMessages.installedLabel) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else-if="showSwitchVersion" size="large">
|
||||
<button type="button" @click="goToVersions">
|
||||
<SwapIcon />
|
||||
{{ formatMessage(messages.switchVersion) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else color="brand" size="large">
|
||||
<button
|
||||
v-tooltip="
|
||||
installButtonInstalled ? formatMessage(messages.alreadyInstalled) : undefined
|
||||
"
|
||||
type="button"
|
||||
:disabled="installButtonDisabled"
|
||||
@click="install(null)"
|
||||
>
|
||||
<component :is="installButtonIcon" :class="installButtonIconClass" />
|
||||
{{
|
||||
installButtonInstalled
|
||||
? formatMessage(commonMessages.installedLabel)
|
||||
: installButtonValidating
|
||||
? formatMessage(commonMessages.validatingLabel)
|
||||
: installButtonLoading
|
||||
? formatMessage(commonMessages.installingLabel)
|
||||
: serverProjectSelected
|
||||
? formatMessage(commonMessages.selectedLabel)
|
||||
: formatMessage(commonMessages.installButton)
|
||||
}}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular size="large" type="transparent">
|
||||
<TeleportOverflowMenu
|
||||
:options="projectHeaderMoreActions"
|
||||
tooltip="More options"
|
||||
aria-label="More options"
|
||||
>
|
||||
<MoreVerticalIcon />
|
||||
</TeleportOverflowMenu>
|
||||
</ButtonStyled>
|
||||
</template>
|
||||
<template v-if="isServerProject" #actions>
|
||||
<ButtonStyled v-if="serverPlaying" size="large" color="red">
|
||||
<button @click="handleStopServer">
|
||||
<StopCircleIcon />
|
||||
{{ formatMessage(commonMessages.stopButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else size="large" color="brand">
|
||||
<button
|
||||
:disabled="data && installingServerProjects.includes(data.id)"
|
||||
@click="handleClickPlay"
|
||||
>
|
||||
<PlayIcon />
|
||||
{{
|
||||
data && installingServerProjects.includes(data.id)
|
||||
? formatMessage(commonMessages.installingLabel)
|
||||
: formatMessage(commonMessages.playButton)
|
||||
}}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled size="large" circular>
|
||||
<button
|
||||
v-tooltip="formatMessage(commonMessages.addServerToInstanceButton)"
|
||||
@click="handleAddServerToInstance"
|
||||
>
|
||||
<PlusIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled size="large" circular type="transparent">
|
||||
<OverflowMenu
|
||||
:tooltip="`More options`"
|
||||
:options="[
|
||||
{
|
||||
id: 'open-in-browser',
|
||||
link: `https://modrinth.com/project/${data.slug}`,
|
||||
external: true,
|
||||
},
|
||||
{
|
||||
divider: true,
|
||||
},
|
||||
{
|
||||
id: 'report',
|
||||
color: 'red',
|
||||
hoverFilled: true,
|
||||
link: `https://modrinth.com/report?item=project&itemID=${data.id}`,
|
||||
},
|
||||
]"
|
||||
aria-label="More options"
|
||||
>
|
||||
<MoreVerticalIcon aria-hidden="true" />
|
||||
<template #open-in-browser>
|
||||
<ExternalIcon /> {{ formatMessage(commonMessages.openInBrowserButton) }}
|
||||
</template>
|
||||
<template #report> <ReportIcon /> Report </template>
|
||||
</OverflowMenu>
|
||||
</ButtonStyled>
|
||||
</template>
|
||||
</ProjectPageHeader>
|
||||
<template v-else #actions>
|
||||
<ButtonStyled v-if="showSwitchVersion && onVersionsPage" size="large">
|
||||
<button v-tooltip="installButtonTooltip" disabled>
|
||||
<CheckIcon />
|
||||
{{ formatMessage(commonMessages.installedLabel) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else-if="showSwitchVersion" size="large">
|
||||
<button @click="goToVersions">
|
||||
<SwapIcon />
|
||||
{{ formatMessage(messages.switchVersion) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else size="large" color="brand">
|
||||
<button
|
||||
v-tooltip="installButtonTooltip"
|
||||
:disabled="installButtonDisabled"
|
||||
@click="install(null)"
|
||||
>
|
||||
<SpinnerIcon
|
||||
v-if="installButtonLoading && !installButtonInstalled"
|
||||
class="animate-spin"
|
||||
/>
|
||||
<DownloadIcon v-else-if="!installButtonInstalled && !serverProjectSelected" />
|
||||
<CheckIcon v-else />
|
||||
{{ installButtonLabel }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled size="large" circular type="transparent">
|
||||
<OverflowMenu
|
||||
:tooltip="`More options`"
|
||||
:options="[
|
||||
{
|
||||
id: 'follow',
|
||||
disabled: true,
|
||||
tooltip: 'Coming soon',
|
||||
action: () => {},
|
||||
},
|
||||
{
|
||||
id: 'save',
|
||||
disabled: true,
|
||||
tooltip: 'Coming soon',
|
||||
action: () => {},
|
||||
},
|
||||
{
|
||||
id: 'open-in-browser',
|
||||
link: `https://modrinth.com/${data.project_type}/${data.slug}`,
|
||||
external: true,
|
||||
},
|
||||
{
|
||||
divider: true,
|
||||
},
|
||||
{
|
||||
id: 'report',
|
||||
color: 'red',
|
||||
hoverFilled: true,
|
||||
link: `https://modrinth.com/report?item=project&itemID=${data.id}`,
|
||||
},
|
||||
]"
|
||||
aria-label="More options"
|
||||
>
|
||||
<MoreVerticalIcon aria-hidden="true" />
|
||||
<template #open-in-browser>
|
||||
<ExternalIcon /> {{ formatMessage(commonMessages.openInBrowserButton) }}
|
||||
</template>
|
||||
<template #follow> <HeartIcon /> Follow </template>
|
||||
<template #save> <BookmarkIcon /> Save </template>
|
||||
<template #report> <ReportIcon /> Report </template>
|
||||
</OverflowMenu>
|
||||
</ButtonStyled>
|
||||
</template>
|
||||
</ProjectHeader>
|
||||
<NavTabs
|
||||
:links="[
|
||||
{
|
||||
@@ -247,8 +289,9 @@ import {
|
||||
getTargetInstallPreferences,
|
||||
injectNotificationManager,
|
||||
NavTabs,
|
||||
OverflowMenu,
|
||||
ProjectBackgroundGradient,
|
||||
ProjectPageHeader,
|
||||
ProjectHeader,
|
||||
ProjectSidebarCompatibility,
|
||||
ProjectSidebarCreators,
|
||||
ProjectSidebarDetails,
|
||||
@@ -257,7 +300,6 @@ import {
|
||||
ProjectSidebarTags,
|
||||
requestInstall,
|
||||
SelectedProjectsFloatingBar,
|
||||
TeleportOverflowMenu,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { useQueryClient } from '@tanstack/vue-query'
|
||||
@@ -316,14 +358,14 @@ const messages = defineMessages({
|
||||
id: 'app.project.install-context.back-to-browse',
|
||||
defaultMessage: 'Back to discover',
|
||||
},
|
||||
alreadyInstalled: {
|
||||
id: 'app.project.install-button.already-installed',
|
||||
defaultMessage: 'This project is already installed',
|
||||
},
|
||||
installContentToInstance: {
|
||||
id: 'app.project.install-context.install-content-to-instance',
|
||||
defaultMessage: 'Install content to instance',
|
||||
},
|
||||
alreadyInstalled: {
|
||||
id: 'app.project.install-button.already-installed',
|
||||
defaultMessage: 'This project is already installed',
|
||||
},
|
||||
switchVersion: {
|
||||
id: 'app.project.install-button.switch-version',
|
||||
defaultMessage: 'Switch version',
|
||||
@@ -487,72 +529,17 @@ const installButtonInstalled = computed(() =>
|
||||
const installButtonDisabled = computed(
|
||||
() => installButtonInstalled.value || installButtonLoading.value,
|
||||
)
|
||||
const serverInstallLoading = computed(
|
||||
() => !!data.value && installingServerProjects.value.includes(data.value.id),
|
||||
)
|
||||
const installButtonIcon = computed(() => {
|
||||
if (installButtonLoading.value && !installButtonInstalled.value) return SpinnerIcon
|
||||
if (!installButtonInstalled.value && !serverProjectSelected.value) return DownloadIcon
|
||||
return CheckIcon
|
||||
const installButtonLabel = computed(() => {
|
||||
if (installButtonInstalled.value) return formatMessage(commonMessages.installedLabel)
|
||||
if (installButtonValidating.value) return formatMessage(commonMessages.validatingLabel)
|
||||
if (installButtonLoading.value) return formatMessage(commonMessages.installingLabel)
|
||||
if (serverProjectSelected.value) return formatMessage(commonMessages.selectedLabel)
|
||||
return formatMessage(commonMessages.installButton)
|
||||
})
|
||||
const installButtonTooltip = computed(() => {
|
||||
if (installButtonInstalled.value) return formatMessage(messages.alreadyInstalled)
|
||||
return null
|
||||
})
|
||||
const installButtonIconClass = computed(() =>
|
||||
installButtonLoading.value && !installButtonInstalled.value ? 'animate-spin' : undefined,
|
||||
)
|
||||
const serverProjectHeaderMoreActions = computed(() => [
|
||||
{
|
||||
id: 'open-in-browser',
|
||||
label: formatMessage(commonMessages.openInModrinthButton),
|
||||
icon: ExternalIcon,
|
||||
action: openProjectInBrowser,
|
||||
},
|
||||
{
|
||||
divider: true,
|
||||
},
|
||||
{
|
||||
id: 'report',
|
||||
label: formatMessage(commonMessages.reportButton),
|
||||
icon: ReportIcon,
|
||||
color: 'red',
|
||||
action: reportProject,
|
||||
},
|
||||
])
|
||||
const projectHeaderMoreActions = computed(() => [
|
||||
{
|
||||
id: 'follow',
|
||||
label: formatMessage(commonMessages.followButton),
|
||||
icon: HeartIcon,
|
||||
disabled: true,
|
||||
tooltip: 'Coming soon',
|
||||
action: () => {},
|
||||
},
|
||||
{
|
||||
id: 'save',
|
||||
label: formatMessage(commonMessages.saveButton),
|
||||
icon: BookmarkIcon,
|
||||
disabled: true,
|
||||
tooltip: 'Coming soon',
|
||||
action: () => {},
|
||||
},
|
||||
{
|
||||
id: 'open-in-browser',
|
||||
label: formatMessage(commonMessages.openInModrinthButton),
|
||||
icon: ExternalIcon,
|
||||
action: openProjectInBrowser,
|
||||
},
|
||||
{
|
||||
divider: true,
|
||||
},
|
||||
{
|
||||
id: 'report',
|
||||
label: formatMessage(commonMessages.reportButton),
|
||||
icon: ReportIcon,
|
||||
color: 'red',
|
||||
action: reportProject,
|
||||
},
|
||||
])
|
||||
const projectSearchUrl = computed(
|
||||
() => `/browse/${isServerProject.value ? 'server' : data.value?.project_type}`,
|
||||
)
|
||||
|
||||
const showSwitchVersion = computed(() => !!instance.value && installed.value)
|
||||
const onVersionsPage = computed(() => route.name === 'Versions')
|
||||
@@ -598,17 +585,6 @@ function handleAddServerToInstance() {
|
||||
showAddServerToInstanceModal(data.value.title, address)
|
||||
}
|
||||
|
||||
function openProjectInBrowser() {
|
||||
if (!data.value) return
|
||||
const type = isServerProject.value ? 'project' : data.value.project_type
|
||||
void openUrl(`https://modrinth.com/${type}/${data.value.slug}`)
|
||||
}
|
||||
|
||||
function reportProject() {
|
||||
if (!data.value) return
|
||||
void openUrl(`https://modrinth.com/report?item=project&itemID=${data.value.id}`)
|
||||
}
|
||||
|
||||
async function fetchProjectData() {
|
||||
const [project, projectV3Result] = await Promise.all([
|
||||
get_project(route.params.id, 'must_revalidate').catch(handleError),
|
||||
|
||||
@@ -110,7 +110,7 @@ export function setupCreationModal(notificationManager: AbstractWebNotificationM
|
||||
}
|
||||
const preview = await install_get_modpack_preview(location)
|
||||
|
||||
if (preview.unknownFile || preview.externalFilesInModpack.length > 0) {
|
||||
if (preview.unknownFile) {
|
||||
const splitPath = config.modpackFilePath.value.split(/[\\/]/)
|
||||
const fileName = splitPath
|
||||
? splitPath[splitPath.length - 1]
|
||||
@@ -119,7 +119,6 @@ export function setupCreationModal(notificationManager: AbstractWebNotificationM
|
||||
unknownPackWarningModal.value?.show(
|
||||
() => install_create_modpack_instance(location).then(() => undefined),
|
||||
fileName,
|
||||
preview.externalFilesInModpack,
|
||||
)
|
||||
} else {
|
||||
await install_create_modpack_instance(location)
|
||||
|
||||
@@ -157,7 +157,6 @@ fn main() {
|
||||
"install_job_retry",
|
||||
"install_job_cancel",
|
||||
"install_job_dismiss",
|
||||
"install_job_support_details",
|
||||
])
|
||||
.default_permission(
|
||||
DefaultPermissionRule::AllowAllCommands,
|
||||
@@ -202,7 +201,6 @@ fn main() {
|
||||
"instance_install_project_with_dependencies",
|
||||
"instance_switch_project_version_with_dependencies",
|
||||
"instance_add_project_from_path",
|
||||
"instance_is_file_on_modrinth",
|
||||
"instance_toggle_disable_project",
|
||||
"instance_remove_project",
|
||||
"instance_update_managed_modrinth_version",
|
||||
@@ -278,8 +276,6 @@ fn main() {
|
||||
"hide_ads_window",
|
||||
"scroll_ads_window",
|
||||
"show_ads_window",
|
||||
"show_ads_consent_overlay",
|
||||
"hide_ads_consent_overlay",
|
||||
"record_ads_click",
|
||||
"open_link",
|
||||
"get_ads_personalization",
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
const MODRINTH_ORIGIN = 'https://modrinth.com'
|
||||
|
||||
document.addEventListener(
|
||||
'click',
|
||||
function (e) {
|
||||
window.top.postMessage({ modrinthAdClick: true }, MODRINTH_ORIGIN)
|
||||
window.top.postMessage({ modrinthAdClick: true }, 'https://modrinth.com')
|
||||
|
||||
let target = e.target
|
||||
while (target != null) {
|
||||
if (target.matches('a')) {
|
||||
e.preventDefault()
|
||||
if (target.href) {
|
||||
window.top.postMessage({ modrinthOpenUrl: target.href }, MODRINTH_ORIGIN)
|
||||
window.top.postMessage({ modrinthOpenUrl: target.href }, 'https://modrinth.com')
|
||||
}
|
||||
break
|
||||
}
|
||||
@@ -21,97 +19,7 @@ document.addEventListener(
|
||||
)
|
||||
|
||||
window.open = (url, target, features) => {
|
||||
window.top.postMessage({ modrinthOpenUrl: url }, MODRINTH_ORIGIN)
|
||||
}
|
||||
|
||||
let modrinthAdsConsentOverlayShown = false
|
||||
let modrinthTcfListenerInstalled = false
|
||||
let modrinthTcfListenerAttempts = 0
|
||||
|
||||
function installAdsConsentOverlayStyle() {
|
||||
if (document.getElementById('modrinth-ads-consent-overlay-style')) {
|
||||
return
|
||||
}
|
||||
const style = document.createElement('style')
|
||||
style.id = 'modrinth-ads-consent-overlay-style'
|
||||
style.textContent = `
|
||||
html.modrinth-ads-consent-overlay #modrinth-rail-1 {
|
||||
visibility: hidden !important;
|
||||
}
|
||||
|
||||
.qc-cmp2-close-icon {
|
||||
background: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath d='M.5.5l23 23m0-23l-23 23' fill='none' stroke='%23b0bac5' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' stroke-miterlimit='10'/%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3C/svg%3E") 0% 0% / 66% auto no-repeat !important;
|
||||
}
|
||||
`
|
||||
document.documentElement.appendChild(style)
|
||||
}
|
||||
|
||||
function getTauriInvoke() {
|
||||
return window.__TAURI__?.core?.invoke ?? window.__TAURI_INTERNALS__?.invoke
|
||||
}
|
||||
|
||||
function invokeAdsConsentOverlayCommand(shown) {
|
||||
const invoke = getTauriInvoke()
|
||||
|
||||
if (typeof invoke !== 'function') {
|
||||
return
|
||||
}
|
||||
|
||||
const command = shown ? 'show_ads_consent_overlay' : 'hide_ads_consent_overlay'
|
||||
const args = shown ? {} : { dpr: window.devicePixelRatio }
|
||||
|
||||
invoke(`plugin:ads|${command}`, args).catch(() => {})
|
||||
}
|
||||
|
||||
function setAdsConsentOverlay(shown) {
|
||||
if (modrinthAdsConsentOverlayShown === shown) return
|
||||
|
||||
modrinthAdsConsentOverlayShown = shown
|
||||
installAdsConsentOverlayStyle()
|
||||
document.documentElement.classList.toggle('modrinth-ads-consent-overlay', shown)
|
||||
|
||||
if (window.top === window) {
|
||||
invokeAdsConsentOverlayCommand(shown)
|
||||
} else {
|
||||
window.top.postMessage({ modrinthAdsConsentOverlay: shown }, MODRINTH_ORIGIN)
|
||||
}
|
||||
}
|
||||
|
||||
if (window.top === window) {
|
||||
window.addEventListener('message', (event) => {
|
||||
if (
|
||||
event.origin === MODRINTH_ORIGIN &&
|
||||
typeof event.data?.modrinthAdsConsentOverlay === 'boolean'
|
||||
) {
|
||||
setAdsConsentOverlay(event.data.modrinthAdsConsentOverlay)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function handleTcfConsentEvent(tcData, success) {
|
||||
if (!success || !tcData) return
|
||||
|
||||
if (tcData.eventStatus === 'cmpuishown') {
|
||||
setAdsConsentOverlay(true)
|
||||
} else if (tcData.eventStatus === 'useractioncomplete' || tcData.eventStatus === 'tcloaded') {
|
||||
setAdsConsentOverlay(false)
|
||||
}
|
||||
}
|
||||
|
||||
// polling to install listener on tcf api
|
||||
function installTcfConsentListener() {
|
||||
if (modrinthTcfListenerInstalled) return
|
||||
|
||||
if (typeof window.__tcfapi === 'function') {
|
||||
modrinthTcfListenerInstalled = true
|
||||
window.__tcfapi('addEventListener', 2, handleTcfConsentEvent)
|
||||
return
|
||||
}
|
||||
|
||||
if (modrinthTcfListenerAttempts < 60) {
|
||||
modrinthTcfListenerAttempts += 1
|
||||
setTimeout(installTcfConsentListener, 500)
|
||||
}
|
||||
window.top.postMessage({ modrinthOpenUrl: url }, 'https://modrinth.com')
|
||||
}
|
||||
|
||||
function muteAudioContext() {
|
||||
@@ -190,13 +98,9 @@ function muteVideos() {
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
installAdsConsentOverlayStyle()
|
||||
muteVideos()
|
||||
muteAudioContext()
|
||||
installTcfConsentListener()
|
||||
|
||||
const observer = new MutationObserver(muteVideos)
|
||||
observer.observe(document.body, { childList: true, subtree: true })
|
||||
})
|
||||
|
||||
installTcfConsentListener()
|
||||
|
||||
+18
-157
@@ -11,14 +11,12 @@ use tokio::sync::RwLock;
|
||||
pub struct AdsState {
|
||||
pub shown: bool,
|
||||
pub modal_shown: bool,
|
||||
pub consent_overlay_shown: bool,
|
||||
pub occluded: bool,
|
||||
pub last_click: Option<Instant>,
|
||||
pub malicious_origins: HashSet<String>,
|
||||
}
|
||||
|
||||
const AD_LINK: &str = "https://modrinth.com/wrapper/app-ads-cookie";
|
||||
const APP_TITLE_BAR_HEIGHT: f32 = 48.0;
|
||||
#[cfg(any(windows, target_os = "macos"))]
|
||||
pub(super) const OCCLUDED_AREA_THRESHOLD: f64 = 0.5;
|
||||
#[cfg(not(target_os = "linux"))]
|
||||
@@ -133,16 +131,13 @@ fn set_webview_visible_for_window<R: Runtime>(
|
||||
.and_then(|window| window.is_minimized().ok())
|
||||
.unwrap_or(false);
|
||||
|
||||
let (is_occluded, consent_overlay_shown) = app
|
||||
let is_occluded = app
|
||||
.state::<RwLock<AdsState>>()
|
||||
.try_read()
|
||||
.map(|state| (state.occluded, state.consent_overlay_shown))
|
||||
.unwrap_or((false, false));
|
||||
.map(|state| state.occluded)
|
||||
.unwrap_or(false);
|
||||
|
||||
set_webview_visible(
|
||||
webview,
|
||||
visible && !is_minimized && (!is_occluded || consent_overlay_shown),
|
||||
);
|
||||
set_webview_visible(webview, visible && !is_minimized && !is_occluded);
|
||||
}
|
||||
|
||||
#[cfg(any(windows, target_os = "macos"))]
|
||||
@@ -200,8 +195,7 @@ async fn sync_ads_occlusion<R: Runtime>(app: &tauri::AppHandle<R>) {
|
||||
}
|
||||
|
||||
state.occluded = occluded;
|
||||
let visible =
|
||||
state.shown && (!state.modal_shown || state.consent_overlay_shown);
|
||||
let visible = state.shown && !state.modal_shown;
|
||||
drop(state);
|
||||
|
||||
if let Some(webview) = app.webviews().get("ads-window") {
|
||||
@@ -217,36 +211,21 @@ fn sync_webview_visibility_for_main_window<R: Runtime>(
|
||||
let is_minimized = main_window.is_minimized().unwrap_or(false);
|
||||
let was = was_minimized.load(Ordering::SeqCst);
|
||||
|
||||
let ads_state = if is_minimized {
|
||||
None
|
||||
} else {
|
||||
match app.state::<RwLock<AdsState>>().try_read() {
|
||||
Ok(state) => Some((
|
||||
state.shown
|
||||
&& (!state.modal_shown || state.consent_overlay_shown)
|
||||
&& (!state.occluded || state.consent_overlay_shown),
|
||||
state.consent_overlay_shown,
|
||||
)),
|
||||
Err(_) => None,
|
||||
}
|
||||
};
|
||||
let ads_visible = ads_state.map(|state| state.0).unwrap_or(false);
|
||||
|
||||
if ads_state.map(|state| state.1).unwrap_or(false)
|
||||
&& let Some(webview) = app.webviews().get("ads-window")
|
||||
&& let Ok((position, size)) =
|
||||
get_overlay_webview_position_for_window(main_window)
|
||||
{
|
||||
webview.set_position(position).ok();
|
||||
webview.set_size(size).ok();
|
||||
}
|
||||
|
||||
if is_minimized == was {
|
||||
return;
|
||||
}
|
||||
|
||||
was_minimized.store(is_minimized, Ordering::SeqCst);
|
||||
|
||||
let ads_visible = if is_minimized {
|
||||
false
|
||||
} else {
|
||||
match app.state::<RwLock<AdsState>>().try_read() {
|
||||
Ok(state) => state.shown && !state.modal_shown && !state.occluded,
|
||||
Err(_) => false,
|
||||
}
|
||||
};
|
||||
|
||||
let mut webviews = Vec::new();
|
||||
let mut seen_webviews = HashSet::new();
|
||||
|
||||
@@ -275,7 +254,6 @@ pub fn init<R: Runtime>() -> TauriPlugin<R> {
|
||||
app.manage(RwLock::new(AdsState {
|
||||
shown: true,
|
||||
modal_shown: false,
|
||||
consent_overlay_shown: false,
|
||||
occluded: false,
|
||||
last_click: None,
|
||||
malicious_origins: HashSet::new(),
|
||||
@@ -291,10 +269,7 @@ pub fn init<R: Runtime>() -> TauriPlugin<R> {
|
||||
.state::<RwLock<AdsState>>()
|
||||
.try_read()
|
||||
.map(|state| {
|
||||
state.shown
|
||||
&& !state.modal_shown
|
||||
&& !state.consent_overlay_shown
|
||||
&& !state.occluded
|
||||
state.shown && !state.modal_shown && !state.occluded
|
||||
})
|
||||
.unwrap_or(false);
|
||||
|
||||
@@ -357,8 +332,6 @@ pub fn init<R: Runtime>() -> TauriPlugin<R> {
|
||||
init_ads_window,
|
||||
hide_ads_window,
|
||||
show_ads_window,
|
||||
show_ads_consent_overlay,
|
||||
hide_ads_consent_overlay,
|
||||
record_ads_click,
|
||||
open_link,
|
||||
get_ads_personalization,
|
||||
@@ -385,42 +358,6 @@ fn get_webview_position<R: Runtime>(
|
||||
))
|
||||
}
|
||||
|
||||
fn get_overlay_webview_position_for_window<R: Runtime>(
|
||||
main_window: &tauri::Window<R>,
|
||||
) -> crate::api::Result<(PhysicalPosition<f32>, PhysicalSize<f32>)> {
|
||||
let main_window_size = main_window.outer_size()?;
|
||||
let title_bar_height =
|
||||
APP_TITLE_BAR_HEIGHT * main_window.scale_factor()? as f32;
|
||||
|
||||
Ok((
|
||||
PhysicalPosition::new(0.0, title_bar_height),
|
||||
PhysicalSize::new(
|
||||
main_window_size.width as f32,
|
||||
(main_window_size.height as f32 - title_bar_height).max(0.0),
|
||||
),
|
||||
))
|
||||
}
|
||||
|
||||
fn get_overlay_webview_position<R: Runtime>(
|
||||
app: &tauri::AppHandle<R>,
|
||||
) -> crate::api::Result<(PhysicalPosition<f32>, PhysicalSize<f32>)> {
|
||||
let main_window = app.get_window("main").unwrap();
|
||||
|
||||
get_overlay_webview_position_for_window(&main_window)
|
||||
}
|
||||
|
||||
fn get_device_pixel_ratio<R: Runtime>(
|
||||
app: &tauri::AppHandle<R>,
|
||||
dpr: Option<f32>,
|
||||
) -> f32 {
|
||||
dpr.unwrap_or_else(|| {
|
||||
app.get_window("main")
|
||||
.and_then(|window| window.scale_factor().ok())
|
||||
.map(|scale_factor| scale_factor as f32)
|
||||
.unwrap_or(1.0)
|
||||
})
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
#[cfg(not(target_os = "linux"))]
|
||||
pub async fn init_ads_window<R: Runtime>(
|
||||
@@ -437,17 +374,11 @@ pub async fn init_ads_window<R: Runtime>(
|
||||
state.shown = true;
|
||||
}
|
||||
|
||||
if state.modal_shown && !state.consent_overlay_shown {
|
||||
if state.modal_shown {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let layout = if state.consent_overlay_shown {
|
||||
get_overlay_webview_position(&app)
|
||||
} else {
|
||||
get_webview_position(&app, dpr)
|
||||
};
|
||||
|
||||
if let Ok((position, size)) = layout {
|
||||
if let Ok((position, size)) = get_webview_position(&app, dpr) {
|
||||
let webview = if let Some(webview) = app.webviews().get("ads-window") {
|
||||
// set both the `hide`/`show` state and `position`,
|
||||
// to ensure that the webview is actually shown/hidden
|
||||
@@ -655,11 +586,7 @@ pub async fn show_ads_window<R: Runtime>(
|
||||
state.modal_shown = false;
|
||||
|
||||
if state.shown {
|
||||
let (position, size) = if state.consent_overlay_shown {
|
||||
get_overlay_webview_position(&app)?
|
||||
} else {
|
||||
get_webview_position(&app, dpr)?
|
||||
};
|
||||
let (position, size) = get_webview_position(&app, dpr)?;
|
||||
// set both the `hide`/`show` state and `position`,
|
||||
// to ensure that the webview is actually shown/hidden
|
||||
webview.set_size(size).ok();
|
||||
@@ -683,19 +610,8 @@ pub async fn hide_ads_window<R: Runtime>(
|
||||
|
||||
if reset.unwrap_or(false) {
|
||||
state.shown = false;
|
||||
state.consent_overlay_shown = false;
|
||||
} else {
|
||||
state.modal_shown = true;
|
||||
|
||||
if state.consent_overlay_shown {
|
||||
let (position, size) = get_overlay_webview_position(&app)?;
|
||||
webview.set_size(size).ok();
|
||||
webview.set_position(position).ok();
|
||||
webview.show().ok();
|
||||
set_webview_visible_for_window(&app, webview, true);
|
||||
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
|
||||
// set both the `hide`/`show` state and `position`,
|
||||
@@ -709,61 +625,6 @@ pub async fn hide_ads_window<R: Runtime>(
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn show_ads_consent_overlay<R: Runtime>(
|
||||
app: tauri::AppHandle<R>,
|
||||
) -> crate::api::Result<()> {
|
||||
if let Some(webview) = app.webviews().get("ads-window") {
|
||||
let state = app.state::<RwLock<AdsState>>();
|
||||
let mut state = state.write().await;
|
||||
|
||||
// dont show for hidden ads so consent events cannot re-enable the webview.
|
||||
if !state.shown {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
state.consent_overlay_shown = true;
|
||||
|
||||
let (position, size) = get_overlay_webview_position(&app)?;
|
||||
webview.set_size(size).ok();
|
||||
webview.set_position(position).ok();
|
||||
webview.show().ok();
|
||||
set_webview_visible_for_window(&app, webview, true);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn hide_ads_consent_overlay<R: Runtime>(
|
||||
app: tauri::AppHandle<R>,
|
||||
dpr: Option<f32>,
|
||||
) -> crate::api::Result<()> {
|
||||
if let Some(webview) = app.webviews().get("ads-window") {
|
||||
let state = app.state::<RwLock<AdsState>>();
|
||||
let mut state = state.write().await;
|
||||
|
||||
state.consent_overlay_shown = false;
|
||||
|
||||
if state.shown && !state.modal_shown {
|
||||
let dpr = get_device_pixel_ratio(&app, dpr);
|
||||
let (position, size) = get_webview_position(&app, dpr)?;
|
||||
|
||||
webview.set_size(size).ok();
|
||||
webview.set_position(position).ok();
|
||||
webview.show().ok();
|
||||
set_webview_visible_for_window(&app, webview, true);
|
||||
} else {
|
||||
webview
|
||||
.set_position(PhysicalPosition::new(-1000, -1000))
|
||||
.ok();
|
||||
webview.hide().ok();
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn record_ads_click<R: Runtime>(
|
||||
app: tauri::AppHandle<R>,
|
||||
|
||||
@@ -25,7 +25,6 @@ pub fn init<R: tauri::Runtime>() -> tauri::plugin::TauriPlugin<R> {
|
||||
install_job_retry,
|
||||
install_job_cancel,
|
||||
install_job_dismiss,
|
||||
install_job_support_details,
|
||||
])
|
||||
.build()
|
||||
}
|
||||
@@ -170,8 +169,3 @@ pub async fn install_job_cancel(job_id: Uuid) -> Result<InstallJobSnapshot> {
|
||||
pub async fn install_job_dismiss(job_id: Uuid) -> Result<()> {
|
||||
Ok(theseus::install::dismiss_job(job_id).await?)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn install_job_support_details(job_id: Uuid) -> Result<String> {
|
||||
Ok(theseus::install::job_support_details(job_id).await?)
|
||||
}
|
||||
|
||||
@@ -41,7 +41,6 @@ pub fn init<R: tauri::Runtime>() -> tauri::plugin::TauriPlugin<R> {
|
||||
instance_install_project_with_dependencies,
|
||||
instance_switch_project_version_with_dependencies,
|
||||
instance_add_project_from_path,
|
||||
instance_is_file_on_modrinth,
|
||||
instance_toggle_disable_project,
|
||||
instance_remove_project,
|
||||
instance_update_managed_modrinth_version,
|
||||
@@ -634,11 +633,6 @@ pub async fn instance_add_project_from_path(
|
||||
.await?)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn instance_is_file_on_modrinth(project_path: &Path) -> Result<bool> {
|
||||
Ok(theseus::instance::is_file_on_modrinth(project_path).await?)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn instance_toggle_disable_project(
|
||||
instance_id: &str,
|
||||
|
||||
@@ -1969,8 +1969,11 @@ paths:
|
||||
- `project_id`
|
||||
- `license`
|
||||
- `downloads`
|
||||
- `color`
|
||||
- `created_timestamp` (uses Unix timestamp)
|
||||
- `modified_timestamp` (uses Unix timestamp)
|
||||
- `date_created` (uses ISO-8601 timestamp)
|
||||
- `date_modified` (uses ISO-8601 timestamp)
|
||||
|
||||
In order to then use these facets, you need a value to filter by, as well as an operation to perform on this value.
|
||||
The most common operation is `:` (same as `=`), though you can also use `!=`, `>=`, `>`, `<=`, and `<`.
|
||||
|
||||
@@ -97,7 +97,7 @@ If you're prepared to contribute by submitting a pull request, ensure you have m
|
||||
|
||||
- `cargo fmt --all` has been run.
|
||||
- `cargo clippy --all-targets` has been run.
|
||||
- `cargo sqlx prepare -- --tests` has been run.
|
||||
- `cargo sqlx prepare` has been run.
|
||||
|
||||
> Note: If you encounter issues with `sqlx` saying 'no queries found' after running `cargo sqlx prepare`, you may need to ensure the installed version of `sqlx-cli` matches the current version of `sqlx` used [in labrinth](https://github.com/modrinth/labrinth/blob/master/Cargo.toml).
|
||||
|
||||
|
||||
@@ -482,8 +482,3 @@ input {
|
||||
.button-transparent {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.qc-cmp2-close-tooltip {
|
||||
background-color: transparent;
|
||||
color: hsl(145, 78%, 28%);
|
||||
}
|
||||
|
||||
@@ -1,163 +0,0 @@
|
||||
<template>
|
||||
<PageHeader :title="organization.name" :summary="organization.description">
|
||||
<template #leading>
|
||||
<Avatar
|
||||
:src="organization.icon_url"
|
||||
:alt="organization.name"
|
||||
:tint-by="organization.id"
|
||||
size="96px"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<template #badges>
|
||||
<PageHeaderBadgeItem :icon="OrganizationIcon" class="px-0 text-primary">
|
||||
{{ formatMessage(messages.organizationLabel) }}
|
||||
</PageHeaderBadgeItem>
|
||||
</template>
|
||||
|
||||
<template #metadata>
|
||||
<PageHeaderMetadata>
|
||||
<PageHeaderMetadataNumberItem
|
||||
:icon="UsersIcon"
|
||||
:value="membersCount"
|
||||
:label="formatMessage(messages.membersLabel)"
|
||||
/>
|
||||
<PageHeaderMetadataNumberItem
|
||||
:icon="BoxIcon"
|
||||
:value="projectsCount"
|
||||
:label="formatMessage(messages.projectsLabel)"
|
||||
/>
|
||||
<PageHeaderMetadataNumberItem
|
||||
:icon="DownloadIcon"
|
||||
:value="downloads"
|
||||
:label="formatMessage(messages.downloadsLabel)"
|
||||
:tooltip="formatNumber(downloads)"
|
||||
/>
|
||||
</PageHeaderMetadata>
|
||||
</template>
|
||||
|
||||
<template #actions>
|
||||
<PageHeaderActions>
|
||||
<ButtonStyled v-if="canManage" size="large">
|
||||
<nuxt-link :to="`/organization/${organization.slug}/settings`">
|
||||
<SettingsIcon />
|
||||
{{ formatMessage(messages.manage) }}
|
||||
</nuxt-link>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular size="large" type="transparent">
|
||||
<TeleportOverflowMenu
|
||||
:options="moreActions"
|
||||
:tooltip="formatMessage(commonMessages.moreOptionsButton)"
|
||||
:aria-label="formatMessage(commonMessages.moreOptionsButton)"
|
||||
>
|
||||
<MoreVerticalIcon />
|
||||
</TeleportOverflowMenu>
|
||||
</ButtonStyled>
|
||||
</PageHeaderActions>
|
||||
</template>
|
||||
</PageHeader>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {
|
||||
BoxIcon,
|
||||
ClipboardCopyIcon,
|
||||
DownloadIcon,
|
||||
MoreVerticalIcon,
|
||||
OrganizationIcon,
|
||||
SettingsIcon,
|
||||
UsersIcon,
|
||||
} from '@modrinth/assets'
|
||||
import {
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
PageHeader,
|
||||
PageHeaderActions,
|
||||
PageHeaderBadgeItem,
|
||||
PageHeaderMetadata,
|
||||
PageHeaderMetadataNumberItem,
|
||||
TeleportOverflowMenu,
|
||||
type TeleportOverflowMenuItem,
|
||||
useFormatNumber,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { computed } from 'vue'
|
||||
|
||||
const messages = defineMessages({
|
||||
downloadsLabel: {
|
||||
id: 'organization.label.downloads',
|
||||
defaultMessage: 'downloads',
|
||||
},
|
||||
manage: {
|
||||
id: 'organization.button.manage',
|
||||
defaultMessage: 'Manage',
|
||||
},
|
||||
manageProjects: {
|
||||
id: 'organization.button.manage-projects',
|
||||
defaultMessage: 'Manage projects',
|
||||
},
|
||||
membersLabel: {
|
||||
id: 'organization.label.members',
|
||||
defaultMessage: 'members',
|
||||
},
|
||||
organizationLabel: {
|
||||
id: 'organization.label.organization',
|
||||
defaultMessage: 'Organization',
|
||||
},
|
||||
projectsLabel: {
|
||||
id: 'organization.label.projects',
|
||||
defaultMessage: 'projects',
|
||||
},
|
||||
})
|
||||
|
||||
const props = defineProps<{
|
||||
organization: {
|
||||
id: string
|
||||
name: string
|
||||
slug: string
|
||||
description?: string | null
|
||||
icon_url?: string | null
|
||||
}
|
||||
membersCount: number
|
||||
projectsCount: number
|
||||
downloads: number
|
||||
canManage?: boolean
|
||||
}>()
|
||||
|
||||
const emit = defineEmits<{
|
||||
manageProjects: []
|
||||
copyId: []
|
||||
copyPermalink: []
|
||||
}>()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
const formatNumber = useFormatNumber()
|
||||
|
||||
const moreActions = computed<TeleportOverflowMenuItem[]>(() => [
|
||||
{
|
||||
id: 'manage-projects',
|
||||
label: formatMessage(messages.manageProjects),
|
||||
icon: BoxIcon,
|
||||
action: () => emit('manageProjects'),
|
||||
shown: props.canManage,
|
||||
},
|
||||
{
|
||||
divider: true,
|
||||
shown: props.canManage,
|
||||
},
|
||||
{
|
||||
id: 'copy-id',
|
||||
label: formatMessage(commonMessages.copyIdButton),
|
||||
icon: ClipboardCopyIcon,
|
||||
action: () => emit('copyId'),
|
||||
},
|
||||
{
|
||||
id: 'copy-permalink',
|
||||
label: formatMessage(commonMessages.copyPermalinkButton),
|
||||
icon: ClipboardCopyIcon,
|
||||
action: () => emit('copyPermalink'),
|
||||
},
|
||||
])
|
||||
</script>
|
||||
@@ -1,127 +0,0 @@
|
||||
<template>
|
||||
<ButtonStyled size="large" circular>
|
||||
<PopoutMenu
|
||||
v-if="authUser"
|
||||
:tooltip="
|
||||
saved ? formatMessage(commonMessages.savedLabel) : formatMessage(commonMessages.saveButton)
|
||||
"
|
||||
from="top-right"
|
||||
:aria-label="formatMessage(commonMessages.saveButton)"
|
||||
:dropdown-id="`${baseId}-save`"
|
||||
>
|
||||
<BookmarkIcon aria-hidden="true" :fill="saved ? 'currentColor' : 'none'" />
|
||||
<template #menu>
|
||||
<StyledInput
|
||||
v-model="displayCollectionsSearch"
|
||||
:placeholder="formatMessage(commonMessages.searchPlaceholder)"
|
||||
wrapper-class="menu-search"
|
||||
/>
|
||||
<div v-if="filteredCollections.length > 0" class="collections-list text-primary">
|
||||
<Checkbox
|
||||
v-for="option in filteredCollections"
|
||||
:key="option.id"
|
||||
:model-value="option.projects.includes(projectId)"
|
||||
class="popout-checkbox"
|
||||
@update:model-value="() => collectProject(option, projectId)"
|
||||
>
|
||||
{{ option.name }}
|
||||
</Checkbox>
|
||||
</div>
|
||||
|
||||
<div v-else class="menu-text">
|
||||
<p class="popout-text">{{ noCollectionsLabel }}</p>
|
||||
</div>
|
||||
<ButtonStyled>
|
||||
<button class="mx-3 mb-3" @click="createCollection">
|
||||
<PlusIcon aria-hidden="true" />
|
||||
{{ createNewCollectionLabel }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</template>
|
||||
</PopoutMenu>
|
||||
<nuxt-link
|
||||
v-else
|
||||
v-tooltip="formatMessage(commonMessages.saveButton)"
|
||||
:to="signInRoute"
|
||||
:aria-label="formatMessage(commonMessages.saveButton)"
|
||||
>
|
||||
<BookmarkIcon aria-hidden="true" />
|
||||
</nuxt-link>
|
||||
</ButtonStyled>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { BookmarkIcon, PlusIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
Checkbox,
|
||||
commonMessages,
|
||||
PopoutMenu,
|
||||
StyledInput,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { computed, ref } from 'vue'
|
||||
import type { RouteLocationRaw } from 'vue-router'
|
||||
|
||||
type CollectionOption = {
|
||||
id: string
|
||||
name: string
|
||||
projects: string[]
|
||||
}
|
||||
|
||||
const props = defineProps<{
|
||||
authUser?: unknown
|
||||
signInRoute: RouteLocationRaw
|
||||
projectId: string
|
||||
collections: CollectionOption[]
|
||||
saved: boolean
|
||||
baseId: string
|
||||
noCollectionsLabel: string
|
||||
createNewCollectionLabel: string
|
||||
collectProject: (option: CollectionOption, projectId: string) => void | Promise<void>
|
||||
createCollection: (event: MouseEvent) => void
|
||||
}>()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
const displayCollectionsSearch = ref('')
|
||||
|
||||
const filteredCollections = computed(() =>
|
||||
props.collections
|
||||
.filter((collection) =>
|
||||
collection.name.toLowerCase().includes(displayCollectionsSearch.value.toLowerCase()),
|
||||
)
|
||||
.slice()
|
||||
.sort((a, b) => a.name.localeCompare(b.name)),
|
||||
)
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.popout-checkbox {
|
||||
padding: var(--gap-sm) var(--gap-md);
|
||||
white-space: nowrap;
|
||||
|
||||
&:hover {
|
||||
filter: brightness(0.95);
|
||||
}
|
||||
}
|
||||
|
||||
.menu-text {
|
||||
padding: 0 var(--gap-md);
|
||||
font-size: var(--font-size-nm);
|
||||
color: var(--color-secondary);
|
||||
}
|
||||
|
||||
.menu-search {
|
||||
margin: var(--gap-sm) var(--gap-md);
|
||||
width: calc(100% - var(--gap-md) * 2);
|
||||
}
|
||||
|
||||
.collections-list {
|
||||
max-height: 40rem;
|
||||
overflow-y: auto;
|
||||
background-color: var(--color-bg);
|
||||
border-radius: var(--radius-md);
|
||||
margin: var(--gap-sm) var(--gap-md);
|
||||
padding: var(--gap-sm);
|
||||
}
|
||||
</style>
|
||||
@@ -1,184 +0,0 @@
|
||||
<template>
|
||||
<div
|
||||
:role="selectable ? 'radio' : undefined"
|
||||
:aria-checked="selectable ? selected : undefined"
|
||||
:tabindex="selectable ? 0 : undefined"
|
||||
class="grid items-center gap-3 rounded-2xl border border-solid px-3 py-3 transition-all"
|
||||
:class="{
|
||||
'grid-cols-[min-content_minmax(0,1fr)_min-content]': selectable,
|
||||
'grid-cols-[minmax(0,1fr)_min-content]': !selectable,
|
||||
'cursor-pointer border-brand bg-surface-4 text-contrast': selectable && selected,
|
||||
'cursor-pointer border-surface-5 bg-surface-4 hover:brightness-[115%]':
|
||||
selectable && !selected,
|
||||
'border-transparent bg-surface-2': !selectable,
|
||||
}"
|
||||
@click="select"
|
||||
@keydown.enter.self.prevent="select"
|
||||
@keydown.space.self.prevent="select"
|
||||
>
|
||||
<template v-if="selectable">
|
||||
<RadioButtonCheckedIcon v-if="selected" aria-hidden="true" class="size-5 text-brand" />
|
||||
<RadioButtonIcon v-else aria-hidden="true" class="size-5 text-secondary" />
|
||||
</template>
|
||||
<div class="flex min-w-0 flex-col gap-1">
|
||||
<div class="flex min-w-0 items-center gap-2">
|
||||
<nuxt-link
|
||||
v-tooltip="truncatedTooltip(versionNumberRef, version.version_number)"
|
||||
:to="`/${project.project_type}/${project.slug || project.id}/version/${version.id}`"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="block min-w-0 text-contrast no-underline hover:underline"
|
||||
>
|
||||
<span ref="versionNumberRef" class="block truncate font-semibold">
|
||||
{{ version.version_number }}
|
||||
</span>
|
||||
</nuxt-link>
|
||||
<VersionChannelTag :channel="version.version_type" class="relative -top-px !py-1" />
|
||||
</div>
|
||||
<div class="flex min-w-0 items-center gap-1.5 text-sm text-secondary">
|
||||
<span v-tooltip="publishedTooltip" class="min-w-0 truncate">
|
||||
{{ publishedLabel }}
|
||||
</span>
|
||||
<div
|
||||
v-if="primaryFile"
|
||||
class="h-1.5 w-1.5 flex-shrink-0 rounded-full bg-primary opacity-30"
|
||||
></div>
|
||||
<span v-if="primaryFile" class="flex-shrink-0">
|
||||
{{ primaryFileSizeLabel }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<ButtonStyled
|
||||
v-if="primaryFile && showDownload"
|
||||
:color="color"
|
||||
:type="type"
|
||||
:circular="circular"
|
||||
>
|
||||
<a
|
||||
v-tooltip="circular ? formatMessage(messages.download) : null"
|
||||
:href="primaryFileDownloadUrl"
|
||||
:download="primaryFile.filename"
|
||||
:aria-label="
|
||||
formatMessage(messages.downloadVersion, {
|
||||
version: version.version_number,
|
||||
})
|
||||
"
|
||||
@click="emit('download')"
|
||||
>
|
||||
<DownloadIcon aria-hidden="true" />
|
||||
<template v-if="!circular">
|
||||
{{ formatMessage(messages.download) }}
|
||||
</template>
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { DownloadIcon, RadioButtonCheckedIcon, RadioButtonIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
type CdnDownloadReason,
|
||||
defineMessages,
|
||||
truncatedTooltip,
|
||||
useFormatBytes,
|
||||
useFormatDateTime,
|
||||
useRelativeTime,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import VersionChannelTag from '@modrinth/ui/src/components/version/VersionChannelTag.vue'
|
||||
import { capitalizeString, type DisplayProjectType } from '@modrinth/utils'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
defineOptions({
|
||||
name: 'CompatibleVersionCard',
|
||||
})
|
||||
|
||||
type DownloadModalProject = Omit<Labrinth.Projects.v2.Project, 'project_type'> & {
|
||||
project_type: DisplayProjectType
|
||||
actualProjectType: Labrinth.Projects.v2.ProjectType
|
||||
}
|
||||
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
project: DownloadModalProject
|
||||
version: Labrinth.Versions.v3.Version
|
||||
downloadReason?: CdnDownloadReason
|
||||
currentGameVersion?: string | null
|
||||
currentPlatform?: string | null
|
||||
color?: 'brand' | 'standard'
|
||||
type?: 'standard' | 'transparent'
|
||||
circular?: boolean
|
||||
selectable?: boolean
|
||||
selected?: boolean
|
||||
showDownload?: boolean
|
||||
}>(),
|
||||
{
|
||||
downloadReason: 'standalone',
|
||||
currentGameVersion: null,
|
||||
currentPlatform: null,
|
||||
color: 'brand',
|
||||
type: 'standard',
|
||||
circular: false,
|
||||
selectable: false,
|
||||
selected: false,
|
||||
showDownload: true,
|
||||
},
|
||||
)
|
||||
|
||||
const emit = defineEmits<{
|
||||
download: []
|
||||
select: []
|
||||
}>()
|
||||
|
||||
const { createProjectDownloadUrl } = useCdnDownloadContext()
|
||||
const { formatMessage } = useVIntl()
|
||||
const formatBytes = useFormatBytes()
|
||||
const formatDateTime = useFormatDateTime({
|
||||
timeStyle: 'short',
|
||||
dateStyle: 'long',
|
||||
})
|
||||
const formatRelativeTime = useRelativeTime()
|
||||
|
||||
const versionNumberRef = ref<HTMLElement | null>(null)
|
||||
|
||||
const primaryFile = computed<Labrinth.Versions.v3.VersionFile | null>(() => {
|
||||
return props.version.files?.find((file) => file.primary) || props.version.files?.[0] || null
|
||||
})
|
||||
|
||||
const primaryFileDownloadUrl = computed(() => {
|
||||
if (!primaryFile.value) return '#'
|
||||
|
||||
return createProjectDownloadUrl(primaryFile.value.url, {
|
||||
reason: props.downloadReason,
|
||||
gameVersion: props.currentGameVersion ?? undefined,
|
||||
loader: props.currentPlatform ?? undefined,
|
||||
})
|
||||
})
|
||||
|
||||
const publishedLabel = computed(() =>
|
||||
capitalizeString(formatRelativeTime(props.version.date_published)),
|
||||
)
|
||||
const publishedTooltip = computed(() => formatDateTime(props.version.date_published))
|
||||
const primaryFileSizeLabel = computed(() => {
|
||||
if (!primaryFile.value) return ''
|
||||
return formatBytes(primaryFile.value.size)
|
||||
})
|
||||
|
||||
function select() {
|
||||
if (!props.selectable) return
|
||||
emit('select')
|
||||
}
|
||||
|
||||
const messages = defineMessages({
|
||||
downloadVersion: {
|
||||
id: 'project.download.download-version',
|
||||
defaultMessage: 'Download {version}',
|
||||
},
|
||||
download: {
|
||||
id: 'project.download.download',
|
||||
defaultMessage: 'Download',
|
||||
},
|
||||
})
|
||||
</script>
|
||||
@@ -1,111 +1,494 @@
|
||||
<template>
|
||||
<div v-if="downloadRows.length > 0 || recommendedRows.length > 0" class="flex flex-col gap-4">
|
||||
<div v-if="downloadRows.length > 0" class="flex flex-col gap-2.5">
|
||||
<div v-if="showTitle" class="flex flex-wrap items-center justify-between gap-2">
|
||||
<h3 class="m-0 flex items-center gap-1.5 text-base font-semibold text-contrast">
|
||||
{{ formatMessage(messages.dependenciesTitle) }}
|
||||
<InfoIcon
|
||||
v-if="duplicateDependencyRowsHidden"
|
||||
v-tooltip="formatMessage(messages.duplicateDependenciesHidden)"
|
||||
aria-hidden="true"
|
||||
class="size-4 text-secondary"
|
||||
/>
|
||||
</h3>
|
||||
</div>
|
||||
<Admonition v-if="requiredResourcePackAdmonitionVisible" type="info">
|
||||
<IntlFormatted :message-id="messages.requiredResourcePackAdmonition">
|
||||
<template #folder>
|
||||
<code class="text-sm">resourcepacks</code>
|
||||
</template>
|
||||
</IntlFormatted>
|
||||
</Admonition>
|
||||
<Admonition v-if="dependencyResourcePackAdmonitionVisible" type="info">
|
||||
<IntlFormatted :message-id="messages.dependencyResourcePackAdmonition">
|
||||
<template #folder>
|
||||
<code class="text-sm">resourcepacks</code>
|
||||
</template>
|
||||
</IntlFormatted>
|
||||
</Admonition>
|
||||
<div class="rounded-2xl bg-surface-2 p-2 pl-4 pr-3">
|
||||
<DownloadDependency
|
||||
v-for="dependency in downloadRows"
|
||||
:key="dependency.key"
|
||||
:dependency="dependency"
|
||||
@download="emit('download')"
|
||||
<div v-if="downloadRows.length > 0" class="flex flex-col gap-1">
|
||||
<div v-if="showTitle" class="flex flex-wrap items-center justify-between gap-2">
|
||||
<h3 class="m-0 flex items-center gap-1.5 text-base font-semibold text-contrast">
|
||||
{{ sectionTitle }}
|
||||
<InfoIcon
|
||||
v-if="duplicateDependencyRowsHidden"
|
||||
v-tooltip="formatMessage(messages.duplicateDependenciesHidden)"
|
||||
aria-hidden="true"
|
||||
class="size-4 text-secondary"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="recommendedRows.length > 0" class="flex flex-col gap-2.5">
|
||||
<h3 class="m-0 text-base font-semibold text-contrast">
|
||||
{{ formatMessage(messages.recommendedTitle) }}
|
||||
</h3>
|
||||
<div class="rounded-2xl bg-surface-2 p-2 pl-4 pr-3">
|
||||
<DownloadDependency
|
||||
v-for="dependency in recommendedRows"
|
||||
:key="dependency.key"
|
||||
:dependency="dependency"
|
||||
@download="emit('download')"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-col gap-2">
|
||||
<DownloadDependency
|
||||
v-for="dependency in downloadRows"
|
||||
:key="dependency.key"
|
||||
:dependency="dependency"
|
||||
@download="emit('download')"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { InfoIcon } from '@modrinth/assets'
|
||||
import { Admonition, defineMessages, IntlFormatted, useVIntl } from '@modrinth/ui'
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { FileIcon, InfoIcon } from '@modrinth/assets'
|
||||
import {
|
||||
type CdnDownloadReason,
|
||||
defineMessages,
|
||||
fileTypeMessages,
|
||||
injectModrinthClient,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import type { DisplayProjectType } from '@modrinth/utils'
|
||||
import { useQuery } from '@tanstack/vue-query'
|
||||
import { type Component, computed, watch } from 'vue'
|
||||
|
||||
import { injectDownloadModalProvider } from './download-modal-provider'
|
||||
import DownloadDependency from './DownloadDependency.vue'
|
||||
|
||||
defineOptions({
|
||||
name: 'DownloadDependencies',
|
||||
})
|
||||
|
||||
withDefaults(
|
||||
type DownloadModalProject = Omit<Labrinth.Projects.v2.Project, 'project_type'> & {
|
||||
project_type: DisplayProjectType
|
||||
actualProjectType: Labrinth.Projects.v2.ProjectType
|
||||
}
|
||||
|
||||
type ResolvedContent = Labrinth.Content.v3.ResolvedContent | Labrinth.Content.v3.SkippedContent
|
||||
|
||||
interface DownloadDependencyRow {
|
||||
key: string
|
||||
name: string
|
||||
icon?: string
|
||||
fallbackIcon?: Component
|
||||
projectHref?: string
|
||||
downloadHref?: string
|
||||
filename?: string
|
||||
fileSize?: number
|
||||
typeLabel: string
|
||||
unavailableTooltip: string
|
||||
dependencies: DownloadDependencyRow[]
|
||||
}
|
||||
|
||||
interface DownloadableDependencyFile {
|
||||
href: string
|
||||
filename: string
|
||||
name: string
|
||||
}
|
||||
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
dependencies?: DownloadDependencyRow[] | null
|
||||
project?: DownloadModalProject | null
|
||||
selectedVersion?: Labrinth.Versions.v3.Version | null
|
||||
currentGameVersion?: string | null
|
||||
currentPlatform?: string | null
|
||||
downloadReason?: CdnDownloadReason
|
||||
additionalFiles?: Labrinth.Versions.v3.VersionFile[]
|
||||
showTitle?: boolean
|
||||
}>(),
|
||||
{
|
||||
dependencies: null,
|
||||
project: null,
|
||||
selectedVersion: null,
|
||||
currentGameVersion: null,
|
||||
currentPlatform: null,
|
||||
downloadReason: 'standalone',
|
||||
additionalFiles: () => [],
|
||||
showTitle: true,
|
||||
},
|
||||
)
|
||||
|
||||
const emit = defineEmits<{
|
||||
download: []
|
||||
'update:downloadable-files': [files: DownloadableDependencyFile[]]
|
||||
}>()
|
||||
const client = injectModrinthClient()
|
||||
const { createProjectDownloadUrl } = useCdnDownloadContext()
|
||||
const { formatMessage } = useVIntl()
|
||||
const {
|
||||
dependencyResourcePackAdmonitionVisible,
|
||||
duplicateDependencyRowsHidden,
|
||||
downloadRows,
|
||||
recommendedRows,
|
||||
requiredResourcePackAdmonitionVisible,
|
||||
} = injectDownloadModalProvider()
|
||||
|
||||
const shouldResolveDependencies = computed(
|
||||
() => !props.dependencies && !!props.project && !!props.selectedVersion,
|
||||
)
|
||||
|
||||
const dependencyResolutionPreferences = computed<Labrinth.Content.v3.ResolutionPreferences>(() => ({
|
||||
game_versions: props.selectedVersion?.game_versions || [],
|
||||
loaders: props.currentPlatform ? [props.currentPlatform] : props.selectedVersion?.loaders || [],
|
||||
}))
|
||||
|
||||
const { data: dependencyResolution } = useQuery({
|
||||
queryKey: computed(() => [
|
||||
'project-download-modal',
|
||||
'content-resolve',
|
||||
props.project?.id,
|
||||
props.selectedVersion?.id,
|
||||
props.project?.project_type,
|
||||
dependencyResolutionPreferences.value,
|
||||
]),
|
||||
queryFn: () =>
|
||||
client.labrinth.content_v3.resolve({
|
||||
project_id: props.project!.id,
|
||||
version_id: props.selectedVersion!.id,
|
||||
content_type: resolveContentType(props.project!.project_type),
|
||||
selected: dependencyResolutionPreferences.value,
|
||||
target: dependencyResolutionPreferences.value,
|
||||
}),
|
||||
enabled: shouldResolveDependencies,
|
||||
})
|
||||
|
||||
const visibleResolvedDependencies = computed<ResolvedContent[]>(() => {
|
||||
return [
|
||||
...(dependencyResolution.value?.dependencies || []),
|
||||
...(dependencyResolution.value?.skipped || []),
|
||||
].filter(shouldShowDependency)
|
||||
})
|
||||
|
||||
const dependencyVersionIds = computed<string[]>(() => {
|
||||
return [
|
||||
...new Set(
|
||||
visibleResolvedDependencies.value
|
||||
.filter((dependency) => !('reason' in dependency))
|
||||
.map((dependency) => dependency.version_id)
|
||||
.filter((versionId): versionId is string => !!versionId),
|
||||
),
|
||||
]
|
||||
})
|
||||
|
||||
const { data: dependencyVersions } = useQuery({
|
||||
queryKey: computed(() => [
|
||||
'project-download-modal',
|
||||
'resolved-versions',
|
||||
dependencyVersionIds.value,
|
||||
]),
|
||||
queryFn: () => client.labrinth.versions_v3.getVersions(dependencyVersionIds.value),
|
||||
enabled: computed(() => shouldResolveDependencies.value && dependencyVersionIds.value.length > 0),
|
||||
})
|
||||
|
||||
const dependencyVersionById = computed(() => {
|
||||
const map = new Map<string, Labrinth.Versions.v3.Version>()
|
||||
for (const version of dependencyVersions.value || []) {
|
||||
if (!version) continue
|
||||
map.set(version.id, version)
|
||||
}
|
||||
return map
|
||||
})
|
||||
|
||||
const dependencyProjectIds = computed<string[]>(() => {
|
||||
return [
|
||||
...new Set(
|
||||
visibleResolvedDependencies.value
|
||||
.map((dependency) => dependency.project_id)
|
||||
.filter((projectId): projectId is string => !!projectId),
|
||||
),
|
||||
]
|
||||
})
|
||||
|
||||
const { data: dependencyProjects } = useQuery({
|
||||
queryKey: computed(() => [
|
||||
'project-download-modal',
|
||||
'resolved-projects',
|
||||
dependencyProjectIds.value,
|
||||
]),
|
||||
queryFn: () => client.labrinth.projects_v2.getMultiple(dependencyProjectIds.value),
|
||||
enabled: computed(() => shouldResolveDependencies.value && dependencyProjectIds.value.length > 0),
|
||||
})
|
||||
|
||||
const dependencyProjectById = computed(() => {
|
||||
const map = new Map<string, Labrinth.Projects.v2.Project>()
|
||||
for (const project of dependencyProjects.value || []) {
|
||||
map.set(project.id, project)
|
||||
}
|
||||
return map
|
||||
})
|
||||
|
||||
const dependenciesByParentVersionId = computed(() => {
|
||||
const map = new Map<string, ResolvedContent[]>()
|
||||
|
||||
for (const dependency of visibleResolvedDependencies.value) {
|
||||
if (!dependency.dependent_on_version_id) continue
|
||||
|
||||
const dependencies = map.get(dependency.dependent_on_version_id) || []
|
||||
dependencies.push(dependency)
|
||||
map.set(dependency.dependent_on_version_id, dependencies)
|
||||
}
|
||||
|
||||
return map
|
||||
})
|
||||
|
||||
const dependenciesLoaded = computed(() => {
|
||||
if (!shouldResolveDependencies.value) return false
|
||||
if (!dependencyResolution.value) return false
|
||||
if (
|
||||
dependencyResolution.value.primary.version_id &&
|
||||
dependencyResolution.value.primary.version_id !== props.selectedVersion?.id
|
||||
) {
|
||||
return false
|
||||
}
|
||||
if (
|
||||
!dependencyVersionIds.value.every((versionId) => dependencyVersionById.value.has(versionId))
|
||||
) {
|
||||
return false
|
||||
}
|
||||
if (
|
||||
!dependencyProjectIds.value.every((projectId) => dependencyProjectById.value.has(projectId))
|
||||
) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
|
||||
const resolvedDependencyRows = computed<DownloadDependencyRow[]>(() => {
|
||||
if (!dependenciesLoaded.value) return []
|
||||
|
||||
const primaryVersionId =
|
||||
dependencyResolution.value?.primary.version_id || props.selectedVersion?.id
|
||||
if (!primaryVersionId) return []
|
||||
|
||||
const dependencies = dependenciesByParentVersionId.value.get(primaryVersionId) || []
|
||||
|
||||
return dependencies.flatMap((dependency) => {
|
||||
const row = createDependencyRow(dependency)
|
||||
return row ? [row] : []
|
||||
})
|
||||
})
|
||||
|
||||
const dependencyRows = computed<DownloadDependencyRow[]>(
|
||||
() => props.dependencies || resolvedDependencyRows.value,
|
||||
)
|
||||
|
||||
const visibleDependencyRows = computed<DownloadDependencyRow[]>(() =>
|
||||
dedupeDependencyRows(dependencyRows.value),
|
||||
)
|
||||
|
||||
const duplicateDependencyRowsHidden = computed(() =>
|
||||
hasDuplicateDependencyRows(dependencyRows.value),
|
||||
)
|
||||
|
||||
const additionalFileRows = computed<DownloadDependencyRow[]>(() =>
|
||||
props.additionalFiles.map((file) => ({
|
||||
key: `additional-file-${additionalFileKey(file)}`,
|
||||
name: file.filename,
|
||||
fallbackIcon: FileIcon,
|
||||
downloadHref: getDownloadUrl(file.url),
|
||||
filename: file.filename,
|
||||
fileSize: file.size,
|
||||
typeLabel: fileTypeLabel(file.file_type),
|
||||
unavailableTooltip: formatMessage(messages.unavailableFile),
|
||||
dependencies: [],
|
||||
})),
|
||||
)
|
||||
|
||||
const downloadRows = computed<DownloadDependencyRow[]>(() => [
|
||||
...visibleDependencyRows.value,
|
||||
...additionalFileRows.value,
|
||||
])
|
||||
|
||||
const sectionTitle = computed(() =>
|
||||
formatMessage(
|
||||
visibleDependencyRows.value.length > 0
|
||||
? messages.dependenciesTitle
|
||||
: messages.additionalFilesTitle,
|
||||
),
|
||||
)
|
||||
|
||||
const downloadableDependencyFiles = computed<DownloadableDependencyFile[]>(() =>
|
||||
collectDownloadableDependencyFiles(visibleDependencyRows.value),
|
||||
)
|
||||
|
||||
watch(
|
||||
downloadableDependencyFiles,
|
||||
(files) => {
|
||||
emit('update:downloadable-files', files)
|
||||
},
|
||||
{ immediate: true },
|
||||
)
|
||||
|
||||
function primaryFileForVersion(version?: Labrinth.Versions.v3.Version) {
|
||||
return version?.files?.find((file) => file.primary) || version?.files?.[0]
|
||||
}
|
||||
|
||||
function shouldShowDependency(dependency: ResolvedContent) {
|
||||
return !(
|
||||
'reason' in dependency && ['duplicate_project', 'quilt_fabric_api'].includes(dependency.reason)
|
||||
)
|
||||
}
|
||||
|
||||
function createDependencyRow(dependency: ResolvedContent): DownloadDependencyRow | null {
|
||||
const versionId = dependency.version_id ?? undefined
|
||||
const version = versionId ? dependencyVersionById.value.get(versionId) : undefined
|
||||
const project = dependencyProjectById.value.get(dependency.project_id)
|
||||
if (!project) return null
|
||||
|
||||
const primaryFile = primaryFileForVersion(version)
|
||||
const unavailableTooltip =
|
||||
'reason' in dependency && dependency.reason
|
||||
? skippedReasonLabel(dependency.reason)
|
||||
: formatMessage(messages.unavailableDependency)
|
||||
const name = project.title
|
||||
|
||||
return {
|
||||
key: `${dependency.project_id}-${versionId ?? 'unresolved'}-${
|
||||
'reason' in dependency ? dependency.reason : 'resolved'
|
||||
}`,
|
||||
name,
|
||||
icon: project.icon_url ?? undefined,
|
||||
projectHref: `/${project.project_type}/${project.slug || project.id}`,
|
||||
downloadHref:
|
||||
'reason' in dependency || !primaryFile ? undefined : getDownloadUrl(primaryFile.url),
|
||||
filename: primaryFile?.filename,
|
||||
fileSize: primaryFile?.size,
|
||||
typeLabel: 'Required',
|
||||
unavailableTooltip,
|
||||
dependencies: (versionId && dependenciesByParentVersionId.value.get(versionId)
|
||||
? dependenciesByParentVersionId.value.get(versionId)!
|
||||
: []
|
||||
).flatMap((subDependency) => {
|
||||
const row = createDependencyRow(subDependency)
|
||||
return row ? [row] : []
|
||||
}),
|
||||
}
|
||||
}
|
||||
|
||||
function skippedReasonLabel(reason: Labrinth.Content.v3.SkippedContent['reason']) {
|
||||
return (
|
||||
{
|
||||
already_installed: formatMessage(messages.alreadyInstalledDependency),
|
||||
duplicate_project: formatMessage(messages.duplicateDependency),
|
||||
conflicting_dependency: formatMessage(messages.conflictingDependency),
|
||||
no_compatible_version: formatMessage(messages.noCompatibleDependency),
|
||||
missing_version: formatMessage(messages.missingDependencyVersion),
|
||||
quilt_fabric_api: formatMessage(messages.quiltFabricApiDependency),
|
||||
}[reason] || formatMessage(messages.unavailableDependency)
|
||||
)
|
||||
}
|
||||
|
||||
function resolveContentType(projectType: DisplayProjectType): Labrinth.Content.v3.ContentType {
|
||||
return ['mod', 'plugin', 'datapack', 'resourcepack', 'shader', 'modpack'].includes(projectType)
|
||||
? (projectType as Labrinth.Content.v3.ContentType)
|
||||
: 'mod'
|
||||
}
|
||||
|
||||
function getDownloadUrl(url: string) {
|
||||
return createProjectDownloadUrl(url, {
|
||||
reason: props.downloadReason,
|
||||
gameVersion: props.currentGameVersion ?? undefined,
|
||||
loader: props.currentPlatform ?? undefined,
|
||||
})
|
||||
}
|
||||
|
||||
function fileTypeLabel(type?: Labrinth.Versions.v3.FileType | null) {
|
||||
return formatMessage(fileTypeMessages[type ?? 'unknown'] ?? fileTypeMessages.unknown)
|
||||
}
|
||||
|
||||
function additionalFileKey(file: Labrinth.Versions.v3.VersionFile) {
|
||||
return file.hashes?.sha1 ?? file.filename
|
||||
}
|
||||
|
||||
function dedupeDependencyRows(
|
||||
rows: DownloadDependencyRow[],
|
||||
seenDependencies = new Set<string>(),
|
||||
): DownloadDependencyRow[] {
|
||||
return rows.flatMap((row) => {
|
||||
const identity = dependencyRowIdentity(row)
|
||||
if (seenDependencies.has(identity)) return []
|
||||
|
||||
seenDependencies.add(identity)
|
||||
|
||||
return [
|
||||
{
|
||||
...row,
|
||||
dependencies: dedupeDependencyRows(row.dependencies, seenDependencies),
|
||||
},
|
||||
]
|
||||
})
|
||||
}
|
||||
|
||||
function dependencyRowIdentity(row: DownloadDependencyRow) {
|
||||
return row.projectHref ?? row.downloadHref ?? row.key
|
||||
}
|
||||
|
||||
function hasDuplicateDependencyRows(
|
||||
rows: DownloadDependencyRow[],
|
||||
seenDependencies = new Set<string>(),
|
||||
): boolean {
|
||||
for (const row of rows) {
|
||||
const rowId = dependencyRowIdentity(row)
|
||||
if (seenDependencies.has(rowId)) return true
|
||||
seenDependencies.add(rowId)
|
||||
if (hasDuplicateDependencyRows(row.dependencies, seenDependencies)) return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
function collectDownloadableDependencyFiles(
|
||||
rows: DownloadDependencyRow[],
|
||||
seenHrefs = new Set<string>(),
|
||||
): DownloadableDependencyFile[] {
|
||||
const files: DownloadableDependencyFile[] = []
|
||||
|
||||
for (const row of rows) {
|
||||
if (row.downloadHref && !seenHrefs.has(row.downloadHref)) {
|
||||
seenHrefs.add(row.downloadHref)
|
||||
files.push({
|
||||
href: row.downloadHref,
|
||||
filename: row.filename || filenameFromUrl(row.downloadHref),
|
||||
name: row.name,
|
||||
})
|
||||
}
|
||||
|
||||
files.push(...collectDownloadableDependencyFiles(row.dependencies, seenHrefs))
|
||||
}
|
||||
|
||||
return files
|
||||
}
|
||||
|
||||
function filenameFromUrl(url: string) {
|
||||
try {
|
||||
const filename = new URL(url).pathname.split('/').pop()
|
||||
return filename ? decodeURIComponent(filename) : 'dependency.jar'
|
||||
} catch {
|
||||
return 'dependency.jar'
|
||||
}
|
||||
}
|
||||
|
||||
const messages = defineMessages({
|
||||
dependenciesTitle: {
|
||||
id: 'project.download.dependencies-title',
|
||||
defaultMessage: 'Dependencies',
|
||||
},
|
||||
recommendedTitle: {
|
||||
id: 'project.download.recommended-title',
|
||||
defaultMessage: 'Recommended',
|
||||
},
|
||||
duplicateDependenciesHidden: {
|
||||
id: 'project.download.duplicate-dependencies-hidden',
|
||||
defaultMessage: 'Duplicate dependencies are hidden',
|
||||
},
|
||||
requiredResourcePackAdmonition: {
|
||||
id: 'project.download.required-resource-pack-admonition',
|
||||
defaultMessage:
|
||||
'This data pack also requires a resource pack. Download it and place it in your {folder} folder.',
|
||||
additionalFilesTitle: {
|
||||
id: 'project.download.additional-files-title',
|
||||
defaultMessage: 'Additional files',
|
||||
},
|
||||
dependencyResourcePackAdmonition: {
|
||||
id: 'project.download.dependency-resource-pack-admonition',
|
||||
defaultMessage:
|
||||
'This project has a dependency with a required resource pack. Download it and place it in your {folder} folder.',
|
||||
alreadyInstalledDependency: {
|
||||
id: 'project.download.dependency-already-installed',
|
||||
defaultMessage: 'This dependency is already installed',
|
||||
},
|
||||
conflictingDependency: {
|
||||
id: 'project.download.dependency-conflicting',
|
||||
defaultMessage: 'This dependency conflicts with another dependency',
|
||||
},
|
||||
duplicateDependency: {
|
||||
id: 'project.download.dependency-duplicate',
|
||||
defaultMessage: 'This dependency is already included',
|
||||
},
|
||||
missingDependencyVersion: {
|
||||
id: 'project.download.dependency-missing-version',
|
||||
defaultMessage: 'This dependency version is unavailable',
|
||||
},
|
||||
noCompatibleDependency: {
|
||||
id: 'project.download.dependency-no-compatible-version',
|
||||
defaultMessage: 'No compatible version is available for this dependency',
|
||||
},
|
||||
quiltFabricApiDependency: {
|
||||
id: 'project.download.dependency-quilt-fabric-api',
|
||||
defaultMessage: 'Fabric API is skipped for Quilt',
|
||||
},
|
||||
unavailableDependency: {
|
||||
id: 'project.download.dependency-unavailable',
|
||||
defaultMessage: 'This dependency cannot be downloaded',
|
||||
},
|
||||
unavailableFile: {
|
||||
id: 'project.download.file-unavailable',
|
||||
defaultMessage: 'This file cannot be downloaded',
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
<template>
|
||||
<div class="flex min-w-0 flex-col">
|
||||
<div class="flex min-w-0 flex-col gap-2">
|
||||
<div
|
||||
class="z-10 grid h-11 grid-cols-[minmax(0,1fr)_min-content] items-center gap-1 text-primary"
|
||||
class="grid min-h-10 grid-cols-[minmax(0,1fr)_min-content] items-center gap-3 rounded-xl bg-button-bg py-0 pl-3.5 pr-2 text-primary"
|
||||
>
|
||||
<span class="flex min-w-0 items-center gap-2">
|
||||
<span class="flex min-w-0 items-center gap-3">
|
||||
<Avatar
|
||||
v-if="dependency.icon && !dependency.hideIcon"
|
||||
v-if="dependency.icon"
|
||||
:src="dependency.icon"
|
||||
:alt="dependency.name"
|
||||
size="24px"
|
||||
class="!rounded-lg !shadow-none"
|
||||
/>
|
||||
<span
|
||||
v-else-if="!dependency.hideIcon"
|
||||
class="flex size-6 flex-shrink-0 items-center justify-center rounded-lg border border-solid border-surface-5 text-secondary"
|
||||
v-else
|
||||
class="flex size-4 flex-shrink-0 items-center justify-center rounded-lg border border-solid border-surface-5 text-secondary"
|
||||
>
|
||||
<component
|
||||
:is="dependency.fallbackIcon ?? PackageIcon"
|
||||
aria-hidden="true"
|
||||
class="size-4"
|
||||
class="size-5"
|
||||
/>
|
||||
</span>
|
||||
<a
|
||||
@@ -28,7 +28,7 @@
|
||||
:href="dependency.projectHref"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="min-w-0 truncate bg-surface-2 text-base font-semibold text-contrast hover:underline"
|
||||
class="min-w-0 truncate text-base font-semibold text-contrast no-underline hover:underline"
|
||||
>
|
||||
{{ dependency.name }}
|
||||
</a>
|
||||
@@ -36,25 +36,13 @@
|
||||
v-else
|
||||
ref="dependencyNameRef"
|
||||
v-tooltip="truncatedTooltip(dependencyNameRef, dependency.name)"
|
||||
class="min-w-0 truncate bg-surface-2 text-base text-contrast"
|
||||
:class="dependency.isAdditionalFile ? 'font-medium' : 'font-semibold'"
|
||||
class="min-w-0 truncate text-base font-semibold text-contrast"
|
||||
>
|
||||
{{ dependency.name }}
|
||||
</span>
|
||||
<TagItem
|
||||
v-if="dependency.isAdditionalFile"
|
||||
v-tooltip="metadataTooltip"
|
||||
class="min-w-0 max-w-[50%] shrink-0 truncate border !border-solid border-surface-5"
|
||||
>
|
||||
{{ metadataLabel }}
|
||||
<TagItem class="shrink-0 border !border-solid border-surface-5 !px-3 !py-1 text-base">
|
||||
{{ dependency.typeLabel }}
|
||||
</TagItem>
|
||||
<span
|
||||
v-else
|
||||
v-tooltip="metadataTooltip"
|
||||
class="min-w-0 max-w-[50%] truncate text-sm text-secondary"
|
||||
>
|
||||
{{ metadataLabel }}
|
||||
</span>
|
||||
</span>
|
||||
<ButtonStyled v-if="dependency.downloadHref" circular type="transparent">
|
||||
<a
|
||||
@@ -80,18 +68,14 @@
|
||||
<div
|
||||
v-for="childDependency in dependency.dependencies"
|
||||
:key="childDependency.key"
|
||||
class="group/dependency relative pl-8"
|
||||
class="group/dependency relative pl-10"
|
||||
>
|
||||
<DownloadDependency
|
||||
:dependency="childDependency"
|
||||
class="relative z-10"
|
||||
@download="emit('download')"
|
||||
/>
|
||||
<DownloadDependency :dependency="childDependency" class="z-1" @download="emit('download')" />
|
||||
<div
|
||||
aria-hidden="true"
|
||||
class="absolute -top-2.5 left-3 z-0 h-full w-0.5 bg-surface-5 group-last/dependency:h-8"
|
||||
class="absolute -top-2 left-6 z-0 h-[calc(100%+1rem)] w-0.5 bg-surface-5 group-first/dependency:-top-2 group-first/dependency:h-20 group-last/dependency:h-7"
|
||||
/>
|
||||
<div aria-hidden="true" class="absolute left-3 top-[21px] z-0 h-0.5 w-7 bg-surface-5" />
|
||||
<div aria-hidden="true" class="absolute left-6 top-5 z-0 h-0.5 w-4 bg-surface-5" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -118,13 +102,10 @@ interface DownloadDependencyRow {
|
||||
name: string
|
||||
icon?: string
|
||||
fallbackIcon?: Component
|
||||
hideIcon?: boolean
|
||||
isAdditionalFile?: boolean
|
||||
projectHref?: string
|
||||
downloadHref?: string
|
||||
filename?: string
|
||||
fileSize?: number
|
||||
metadataLabel?: string
|
||||
typeLabel: string
|
||||
unavailableTooltip: string
|
||||
dependencies: DownloadDependencyRow[]
|
||||
@@ -142,13 +123,6 @@ const { formatMessage } = useVIntl()
|
||||
const formatBytes = useFormatBytes()
|
||||
const dependencyNameRef = ref<HTMLElement | null>(null)
|
||||
|
||||
const metadataLabel = computed(() => props.dependency.metadataLabel ?? props.dependency.typeLabel)
|
||||
const metadataTooltip = computed(() => {
|
||||
if (props.dependency.isAdditionalFile) return null
|
||||
if (metadataLabel.value === props.dependency.typeLabel) return null
|
||||
return metadataLabel.value
|
||||
})
|
||||
|
||||
const downloadTooltip = computed(() => {
|
||||
const filename = props.dependency.filename || props.dependency.name
|
||||
|
||||
|
||||
@@ -80,76 +80,107 @@
|
||||
</Combobox>
|
||||
</div>
|
||||
|
||||
<div
|
||||
v-if="selectedVersion && downloadDataLoaded"
|
||||
:role="compatibleVersions.length > 1 ? 'radiogroup' : undefined"
|
||||
:aria-label="
|
||||
compatibleVersions.length > 1 ? formatMessage(messages.compatibleVersionTitle) : undefined
|
||||
"
|
||||
class="flex flex-col gap-2.5"
|
||||
>
|
||||
<h3
|
||||
v-if="compatibleVersions.length > 1"
|
||||
class="relative top-0.5 m-0 text-base font-semibold text-contrast"
|
||||
<div v-if="selectedVersion" class="flex flex-col gap-1">
|
||||
<div class="flex flex-wrap items-center justify-between gap-2">
|
||||
<h3 class="relative top-0.5 m-0 text-base font-semibold text-contrast">
|
||||
{{ formatMessage(messages.compatibleVersionTitle) }}
|
||||
</h3>
|
||||
<ButtonStyled v-if="downloadAllFiles.length > 1" type="transparent">
|
||||
<button :disabled="downloadingSelectedVersion" @click="downloadSelectedVersionFiles">
|
||||
<SpinnerIcon v-if="downloadingSelectedVersion" aria-hidden="true" class="animate-spin" />
|
||||
<DownloadIcon v-else aria-hidden="true" />
|
||||
{{
|
||||
formatMessage(
|
||||
downloadingSelectedVersion
|
||||
? messages.downloadingSelectedVersion
|
||||
: messages.downloadAllSelectedVersion,
|
||||
{
|
||||
current: selectedVersionDownloadProgress.current,
|
||||
total: selectedVersionDownloadProgress.total,
|
||||
},
|
||||
)
|
||||
}}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
<div
|
||||
class="grid grid-cols-[1fr_min-content] items-center gap-3 rounded-2xl bg-surface-2 px-3 py-3"
|
||||
>
|
||||
{{ formatMessage(messages.compatibleVersionTitle) }}
|
||||
</h3>
|
||||
<CompatibleVersionCard
|
||||
v-for="compatibleVersion in compatibleVersions"
|
||||
:key="compatibleVersion.id"
|
||||
:project="project"
|
||||
:version="compatibleVersion"
|
||||
:download-reason="downloadReason"
|
||||
:current-game-version="currentGameVersion"
|
||||
:current-platform="currentPlatform"
|
||||
:selectable="compatibleVersions.length > 1"
|
||||
:selected="compatibleVersion.id === selectedVersion.id"
|
||||
:show-download="
|
||||
compatibleVersions.length === 1 || compatibleVersion.id === selectedVersion.id
|
||||
"
|
||||
:color="
|
||||
compatibleVersion.id === selectedVersion.id &&
|
||||
compatibleVersions.length === 1 &&
|
||||
!hasAdditionalDownloads
|
||||
? 'brand'
|
||||
: 'standard'
|
||||
"
|
||||
:type="
|
||||
compatibleVersion.id === selectedVersion.id &&
|
||||
compatibleVersions.length === 1 &&
|
||||
!hasAdditionalDownloads
|
||||
? 'standard'
|
||||
: 'transparent'
|
||||
"
|
||||
:circular="hasAdditionalDownloads || compatibleVersions.length > 1"
|
||||
@select="selectCompatibleVersion(compatibleVersion)"
|
||||
@download="emit('download')"
|
||||
/>
|
||||
</div>
|
||||
<div v-else-if="showNoCompatibleVersions" class="pl-1 text-base text-primary" role="status">
|
||||
{{ noCompatibleVersionsDescription }}
|
||||
<div class="flex min-w-0 flex-col gap-1">
|
||||
<div class="flex min-w-0 items-center gap-2">
|
||||
<nuxt-link
|
||||
v-tooltip="truncatedTooltip(versionNumberRef, selectedVersion.version_number)"
|
||||
:to="`/${project.project_type}/${project.slug || project.id}/version/${selectedVersion.id}`"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="block min-w-0 text-contrast no-underline hover:underline"
|
||||
>
|
||||
<span ref="versionNumberRef" class="block truncate font-semibold">
|
||||
{{ selectedVersion.version_number }}
|
||||
</span>
|
||||
</nuxt-link>
|
||||
<VersionChannelTag
|
||||
:channel="selectedVersion.version_type"
|
||||
class="relative -top-px !py-0.5"
|
||||
/>
|
||||
</div>
|
||||
<p
|
||||
ref="versionNameRef"
|
||||
v-tooltip="truncatedTooltip(versionNameRef, selectedVersion.name)"
|
||||
class="m-0 w-fit max-w-full truncate text-sm text-secondary"
|
||||
>
|
||||
{{ selectedVersion.name }}
|
||||
</p>
|
||||
</div>
|
||||
<ButtonStyled v-if="selectedPrimaryFile" color="brand" circular>
|
||||
<a
|
||||
v-tooltip="'Download'"
|
||||
:href="selectedPrimaryFileDownloadUrl"
|
||||
:download="selectedPrimaryFile.filename"
|
||||
:aria-label="
|
||||
formatMessage(messages.downloadVersion, {
|
||||
version: selectedVersion.version_number,
|
||||
})
|
||||
"
|
||||
@click="emit('download')"
|
||||
>
|
||||
<DownloadIcon aria-hidden="true" />
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</div>
|
||||
<p v-else-if="currentPlatform && currentGameVersion && versions.length > 0">
|
||||
{{
|
||||
formatMessage(messages.noVersionsAvailable, {
|
||||
gameVersion: currentGameVersion,
|
||||
platform: currentPlatformText,
|
||||
})
|
||||
}}
|
||||
</p>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { TriangleAlertIcon } from '@modrinth/assets'
|
||||
import { DownloadIcon, SpinnerIcon, TriangleAlertIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
type CdnDownloadReason,
|
||||
Checkbox,
|
||||
Combobox,
|
||||
type ComboboxOption,
|
||||
defineMessages,
|
||||
getTagMessage,
|
||||
injectNotificationManager,
|
||||
truncatedTooltip,
|
||||
useDebugLogger,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import VersionChannelTag from '@modrinth/ui/src/components/version/VersionChannelTag.vue'
|
||||
import type { DisplayProjectType } from '@modrinth/utils'
|
||||
import dayjs from 'dayjs'
|
||||
import JSZip from 'jszip'
|
||||
import { computed, ref, watch } from 'vue'
|
||||
|
||||
import CompatibleVersionCard from './CompatibleVersionCard.vue'
|
||||
|
||||
defineOptions({
|
||||
name: 'DownloadProject',
|
||||
})
|
||||
@@ -176,8 +207,6 @@ const props = withDefaults(
|
||||
project: DownloadModalProject
|
||||
versions?: Labrinth.Versions.v3.Version[]
|
||||
dependencyDownloadFiles?: DownloadableFile[]
|
||||
downloadDataLoaded?: boolean
|
||||
versionsLoaded?: boolean
|
||||
downloadReason?: CdnDownloadReason
|
||||
initialGameVersion?: string | null
|
||||
initialPlatform?: string | null
|
||||
@@ -188,8 +217,6 @@ const props = withDefaults(
|
||||
{
|
||||
versions: () => [],
|
||||
dependencyDownloadFiles: () => [],
|
||||
downloadDataLoaded: false,
|
||||
versionsLoaded: false,
|
||||
downloadReason: 'standalone',
|
||||
initialGameVersion: null,
|
||||
initialPlatform: null,
|
||||
@@ -206,19 +233,22 @@ const emit = defineEmits<{
|
||||
'update:selection': [selection: ProjectDownloadSelection]
|
||||
}>()
|
||||
const { formatMessage } = useVIntl()
|
||||
const { createProjectDownloadUrl } = useCdnDownloadContext()
|
||||
const { addNotification } = injectNotificationManager()
|
||||
const debug = useDebugLogger('DownloadProject')
|
||||
const tags = useGeneratedState()
|
||||
|
||||
const userSelectedGameVersion = ref<string | null>(props.initialGameVersion)
|
||||
const userSelectedPlatform = ref<string | null>(props.initialPlatform)
|
||||
const userSelectedCompatibleVersionId = ref<string | null>(null)
|
||||
const showAllVersions = ref(defaultShowAllVersions())
|
||||
const versionFilter = ref('')
|
||||
const preferredPlatformRanks = new Map([
|
||||
['fabric', 0],
|
||||
['forge', 1],
|
||||
['neoforge', 2],
|
||||
])
|
||||
const versionNumberRef = ref<HTMLElement | null>(null)
|
||||
const versionNameRef = ref<HTMLElement | null>(null)
|
||||
const downloadingSelectedVersion = ref(false)
|
||||
const selectedVersionDownloadProgress = ref({
|
||||
current: 0,
|
||||
total: 0,
|
||||
})
|
||||
|
||||
const incompatibleGameVersionsSet = computed(() => new Set(props.incompatibleGameVersions))
|
||||
const incompatibleLoadersSet = computed(() => new Set(props.incompatibleLoaders))
|
||||
@@ -346,12 +376,13 @@ const gameVersionOptions = computed<ComboboxOption<string>[]>(() => {
|
||||
|
||||
const platformOptions = computed<ComboboxOption<string>[]>(() => {
|
||||
return props.project.loaders
|
||||
.slice()
|
||||
.reverse()
|
||||
.map((platform) => ({
|
||||
value: platform,
|
||||
label: loaderLabel(platform),
|
||||
class: '!px-0 !py-1',
|
||||
}))
|
||||
.sort(comparePlatformOptions)
|
||||
})
|
||||
|
||||
const filteredVersions = computed<Labrinth.Versions.v3.Version[]>(() => {
|
||||
@@ -376,71 +407,31 @@ const filteredVersions = computed<Labrinth.Versions.v3.Version[]>(() => {
|
||||
})
|
||||
|
||||
const filteredRelease = computed<Labrinth.Versions.v3.Version | undefined>(() => {
|
||||
return latestVersionByType('release')
|
||||
return filteredVersions.value.find((x) => x.version_type === 'release')
|
||||
})
|
||||
|
||||
const filteredBeta = computed<Labrinth.Versions.v3.Version | undefined>(() => {
|
||||
return latestVersionByType('beta')
|
||||
return filteredVersions.value.find(
|
||||
(x) =>
|
||||
x.version_type === 'beta' &&
|
||||
(!filteredRelease.value ||
|
||||
dayjs(x.date_published).isAfter(dayjs(filteredRelease.value.date_published))),
|
||||
)
|
||||
})
|
||||
|
||||
const filteredAlpha = computed<Labrinth.Versions.v3.Version | undefined>(() => {
|
||||
return latestVersionByType('alpha')
|
||||
})
|
||||
|
||||
const defaultSelectedVersion = computed<Labrinth.Versions.v3.Version | null>(() => {
|
||||
return filteredRelease.value || filteredBeta.value || filteredAlpha.value || null
|
||||
})
|
||||
|
||||
const suggestedPreReleaseVersions = computed<Labrinth.Versions.v3.Version[]>(() => {
|
||||
if (!defaultSelectedVersion.value || defaultSelectedVersion.value.version_type !== 'release')
|
||||
return []
|
||||
|
||||
const versions: Labrinth.Versions.v3.Version[] = []
|
||||
const beta = filteredBeta.value
|
||||
if (beta && isNewerThan(beta, defaultSelectedVersion.value)) {
|
||||
versions.push(beta)
|
||||
}
|
||||
|
||||
const alpha = filteredAlpha.value
|
||||
if (alpha && isNewerThan(alpha, defaultSelectedVersion.value)) {
|
||||
versions.push(alpha)
|
||||
}
|
||||
|
||||
return versions
|
||||
})
|
||||
|
||||
const compatibleVersions = computed<Labrinth.Versions.v3.Version[]>(() => {
|
||||
if (!defaultSelectedVersion.value) return []
|
||||
return [defaultSelectedVersion.value, ...suggestedPreReleaseVersions.value]
|
||||
})
|
||||
|
||||
const showNoCompatibleVersions = computed(() => {
|
||||
return (
|
||||
props.versionsLoaded &&
|
||||
compatibleVersions.value.length === 0 &&
|
||||
!!currentGameVersion.value &&
|
||||
!!currentPlatform.value
|
||||
return filteredVersions.value.find(
|
||||
(x) =>
|
||||
x.version_type === 'alpha' &&
|
||||
(!filteredRelease.value ||
|
||||
dayjs(x.date_published).isAfter(dayjs(filteredRelease.value.date_published))) &&
|
||||
(!filteredBeta.value ||
|
||||
dayjs(x.date_published).isAfter(dayjs(filteredBeta.value.date_published))),
|
||||
)
|
||||
})
|
||||
|
||||
const noCompatibleVersionsDescription = computed(() => {
|
||||
const gameVersion = currentGameVersion.value
|
||||
if (!gameVersion || !currentPlatform.value) return ''
|
||||
|
||||
return formatMessage(messages.noVersionsAvailable, {
|
||||
gameVersion,
|
||||
platform: currentPlatformText.value,
|
||||
})
|
||||
})
|
||||
|
||||
const selectedVersion = computed<Labrinth.Versions.v3.Version | null>(() => {
|
||||
return (
|
||||
compatibleVersions.value.find(
|
||||
(version) => version.id === userSelectedCompatibleVersionId.value,
|
||||
) ||
|
||||
defaultSelectedVersion.value ||
|
||||
null
|
||||
)
|
||||
return filteredRelease.value || filteredBeta.value || filteredAlpha.value || null
|
||||
})
|
||||
|
||||
const selectedPrimaryFile = computed<Labrinth.Versions.v3.VersionFile | null>(() => {
|
||||
@@ -451,47 +442,39 @@ const selectedPrimaryFile = computed<Labrinth.Versions.v3.VersionFile | null>(()
|
||||
)
|
||||
})
|
||||
|
||||
const requiredResourcePackFile = computed<Labrinth.Versions.v3.VersionFile | null>(() => {
|
||||
if (props.project.project_type !== 'datapack') return null
|
||||
|
||||
return (
|
||||
selectedVersion.value?.files?.find(
|
||||
(file) => file !== selectedPrimaryFile.value && file.file_type === 'required-resource-pack',
|
||||
) || null
|
||||
)
|
||||
const selectedPrimaryFileDownloadUrl = computed(() => {
|
||||
if (!selectedPrimaryFile.value) return '#'
|
||||
return getDownloadUrl(selectedPrimaryFile.value.url)
|
||||
})
|
||||
|
||||
const recommendedResourcePackFiles = computed<Labrinth.Versions.v3.VersionFile[]>(() => {
|
||||
if (props.project.project_type !== 'datapack') return []
|
||||
const selectedVersionDownloadFiles = computed(() => {
|
||||
if (!selectedVersion.value) return []
|
||||
|
||||
return (
|
||||
selectedVersion.value?.files?.filter(
|
||||
(file) => file !== selectedPrimaryFile.value && file.file_type === 'optional-resource-pack',
|
||||
) || []
|
||||
)
|
||||
return selectedVersion.value.files.map((file) => ({
|
||||
href: getDownloadUrl(file.url),
|
||||
filename: file.filename,
|
||||
}))
|
||||
})
|
||||
|
||||
const hasAdditionalDownloads = computed(() => {
|
||||
const downloadAllFiles = computed(() => {
|
||||
const files: DownloadableFile[] = []
|
||||
const hrefs = new Set<string>()
|
||||
|
||||
if (selectedPrimaryFile.value) {
|
||||
hrefs.add(selectedPrimaryFile.value.url)
|
||||
}
|
||||
|
||||
if (requiredResourcePackFile.value) {
|
||||
hrefs.add(requiredResourcePackFile.value.url)
|
||||
}
|
||||
|
||||
for (const file of recommendedResourcePackFiles.value) {
|
||||
hrefs.add(file.url)
|
||||
}
|
||||
|
||||
for (const file of props.dependencyDownloadFiles) {
|
||||
for (const file of [...selectedVersionDownloadFiles.value, ...props.dependencyDownloadFiles]) {
|
||||
if (hrefs.has(file.href)) continue
|
||||
hrefs.add(file.href)
|
||||
files.push(file)
|
||||
}
|
||||
|
||||
return hrefs.size > 1
|
||||
return files
|
||||
})
|
||||
|
||||
const selectedVersionZipFilename = computed(() => {
|
||||
if (!selectedVersion.value) return `${sanitizeFilename(props.project.title)}.zip`
|
||||
|
||||
return `${sanitizeFilename(props.project.title)} ${sanitizeFilename(
|
||||
selectedVersion.value.version_number,
|
||||
)}.zip`
|
||||
})
|
||||
|
||||
watch(
|
||||
@@ -507,16 +490,11 @@ watch(
|
||||
{ immediate: true },
|
||||
)
|
||||
|
||||
watch([currentGameVersion, currentPlatform], () => {
|
||||
userSelectedCompatibleVersionId.value = null
|
||||
})
|
||||
|
||||
watch(
|
||||
() => props.resetKey,
|
||||
() => {
|
||||
userSelectedGameVersion.value = props.initialGameVersion
|
||||
userSelectedPlatform.value = props.initialPlatform
|
||||
userSelectedCompatibleVersionId.value = null
|
||||
showAllVersions.value = defaultShowAllVersions()
|
||||
versionFilter.value = ''
|
||||
},
|
||||
@@ -535,39 +513,115 @@ function selectPlatform(platform?: string) {
|
||||
emit('selectPlatform', platform)
|
||||
}
|
||||
|
||||
function selectCompatibleVersion(version: Labrinth.Versions.v3.Version) {
|
||||
userSelectedCompatibleVersionId.value = version.id
|
||||
function getDownloadUrl(url: string) {
|
||||
return createProjectDownloadUrl(url, {
|
||||
reason: props.downloadReason,
|
||||
gameVersion: currentGameVersion.value ?? undefined,
|
||||
loader: currentPlatform.value ?? undefined,
|
||||
})
|
||||
}
|
||||
|
||||
function latestVersionByType(type: Labrinth.Versions.v3.VersionChannel) {
|
||||
return filteredVersions.value
|
||||
.filter((version) => version.version_type === type)
|
||||
.reduce<Labrinth.Versions.v3.Version | undefined>((latest, version) => {
|
||||
if (!latest || isNewerThan(version, latest)) return version
|
||||
return latest
|
||||
}, undefined)
|
||||
async function downloadSelectedVersionFiles() {
|
||||
if (downloadingSelectedVersion.value || downloadAllFiles.value.length <= 1) return
|
||||
|
||||
downloadingSelectedVersion.value = true
|
||||
const files = [...downloadAllFiles.value]
|
||||
selectedVersionDownloadProgress.value = {
|
||||
current: 0,
|
||||
total: files.length,
|
||||
}
|
||||
|
||||
try {
|
||||
const zip = new JSZip()
|
||||
const usedFilenames = new Set<string>()
|
||||
|
||||
for (const [index, file] of files.entries()) {
|
||||
selectedVersionDownloadProgress.value = {
|
||||
current: index + 1,
|
||||
total: files.length,
|
||||
}
|
||||
const response = await fetch(file.href)
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`Failed to download ${file.filename}`)
|
||||
}
|
||||
|
||||
zip.file(uniqueFilename(file.filename, usedFilenames), await response.blob())
|
||||
}
|
||||
|
||||
downloadBlob(
|
||||
await zip.generateAsync({
|
||||
type: 'blob',
|
||||
mimeType: 'application/zip',
|
||||
}),
|
||||
selectedVersionZipFilename.value,
|
||||
)
|
||||
emit('download')
|
||||
} catch (error) {
|
||||
console.error('Failed to download selected version files:', error)
|
||||
addNotification({
|
||||
title: formatMessage(messages.downloadSelectedVersionFailedTitle),
|
||||
text: formatMessage(messages.downloadSelectedVersionFailedText),
|
||||
type: 'error',
|
||||
})
|
||||
} finally {
|
||||
downloadingSelectedVersion.value = false
|
||||
selectedVersionDownloadProgress.value = {
|
||||
current: 0,
|
||||
total: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function isNewerThan(
|
||||
version: Labrinth.Versions.v3.Version,
|
||||
comparison: Labrinth.Versions.v3.Version,
|
||||
) {
|
||||
return dayjs(version.date_published).isAfter(dayjs(comparison.date_published))
|
||||
function downloadBlob(blob: Blob, filename: string) {
|
||||
const url = URL.createObjectURL(blob)
|
||||
const link = document.createElement('a')
|
||||
|
||||
link.href = url
|
||||
link.download = filename
|
||||
document.body.appendChild(link)
|
||||
link.click()
|
||||
link.remove()
|
||||
window.setTimeout(() => URL.revokeObjectURL(url), 0)
|
||||
}
|
||||
|
||||
function sanitizeFilename(value: string) {
|
||||
const sanitized = value
|
||||
.replace(/[<>:"/\\|?*]/g, '')
|
||||
.replace(/\s+/g, ' ')
|
||||
.trim()
|
||||
|
||||
return sanitized || 'download'
|
||||
}
|
||||
|
||||
function uniqueFilename(filename: string, usedFilenames: Set<string>) {
|
||||
const sanitizedFilename = sanitizeFilename(filename)
|
||||
|
||||
if (!usedFilenames.has(sanitizedFilename)) {
|
||||
usedFilenames.add(sanitizedFilename)
|
||||
return sanitizedFilename
|
||||
}
|
||||
|
||||
const extensionIndex = sanitizedFilename.lastIndexOf('.')
|
||||
const basename =
|
||||
extensionIndex > 0 ? sanitizedFilename.slice(0, extensionIndex) : sanitizedFilename
|
||||
const extension = extensionIndex > 0 ? sanitizedFilename.slice(extensionIndex) : ''
|
||||
let index = 2
|
||||
let candidate = `${basename} (${index})${extension}`
|
||||
|
||||
while (usedFilenames.has(candidate)) {
|
||||
index += 1
|
||||
candidate = `${basename} (${index})${extension}`
|
||||
}
|
||||
|
||||
usedFilenames.add(candidate)
|
||||
return candidate
|
||||
}
|
||||
|
||||
function loaderLabel(loader: string) {
|
||||
return formatMessage(getTagMessage(loader, 'loader') ?? messages.unknownLoader)
|
||||
}
|
||||
|
||||
function comparePlatformOptions(a: ComboboxOption<string>, b: ComboboxOption<string>) {
|
||||
const aRank = preferredPlatformRanks.get(a.value) ?? Number.MAX_SAFE_INTEGER
|
||||
const bRank = preferredPlatformRanks.get(b.value) ?? Number.MAX_SAFE_INTEGER
|
||||
|
||||
if (aRank !== bRank) return aRank - bRank
|
||||
|
||||
return a.label.localeCompare(b.label)
|
||||
}
|
||||
|
||||
function isReleaseGameVersion(version: string) {
|
||||
if (releaseVersions.value.has(version)) return true
|
||||
if (nonReleaseVersions.value.has(version)) return false
|
||||
@@ -652,9 +706,29 @@ const messages = defineMessages({
|
||||
id: 'project.download.game-version-unsupported-tooltip',
|
||||
defaultMessage: '{title} does not support {gameVersion} for {platform}',
|
||||
},
|
||||
downloadVersion: {
|
||||
id: 'project.download.download-version',
|
||||
defaultMessage: 'Download {version}',
|
||||
},
|
||||
compatibleVersionTitle: {
|
||||
id: 'project.download.compatible-version-title',
|
||||
defaultMessage: 'Compatible versions',
|
||||
defaultMessage: 'Compatible version',
|
||||
},
|
||||
downloadAllSelectedVersion: {
|
||||
id: 'project.download.selected-version-download-all',
|
||||
defaultMessage: 'Download all (.zip)',
|
||||
},
|
||||
downloadingSelectedVersion: {
|
||||
id: 'project.download.selected-version-downloading',
|
||||
defaultMessage: 'Downloading... ({current}/{total})',
|
||||
},
|
||||
downloadSelectedVersionFailedTitle: {
|
||||
id: 'project.download.selected-version-failed-title',
|
||||
defaultMessage: 'Could not download version',
|
||||
},
|
||||
downloadSelectedVersionFailedText: {
|
||||
id: 'project.download.selected-version-failed-text',
|
||||
defaultMessage: 'One or more version files could not be downloaded. Please try again.',
|
||||
},
|
||||
noGameVersionsFound: {
|
||||
id: 'project.download.no-game-versions-found',
|
||||
|
||||
@@ -6,19 +6,29 @@
|
||||
"
|
||||
class="modrinth-app-section contents"
|
||||
>
|
||||
<div class="flex flex-col items-center">
|
||||
<ButtonStyled color="brand">
|
||||
<a
|
||||
class="!min-h-10 w-fit no-underline"
|
||||
:href="`modrinth://mod/${project.slug}`"
|
||||
@click="installWithApp"
|
||||
>
|
||||
<ModrinthIcon aria-hidden="true" />
|
||||
<span class="min-w-0 text-center">
|
||||
{{ formatMessage(messages.installWithModrinthApp) }}
|
||||
<div class="flex flex-col">
|
||||
<a
|
||||
class="modrinth-app-install-card flex items-center justify-between gap-3 rounded-2xl border border-solid border-brand-highlight bg-surface-1 px-4 py-3 text-primary no-underline transition-[filter] hover:brightness-110"
|
||||
:href="`modrinth://mod/${project.slug}`"
|
||||
@click="installWithApp"
|
||||
>
|
||||
<span class="flex w-full min-w-0 flex-col gap-1">
|
||||
<div class="flex items-center justify-between">
|
||||
<span class="flex min-w-0 items-center gap-1.5 font-medium text-contrast">
|
||||
Install with
|
||||
<span class="text-brand">Modrinth App</span>
|
||||
<ModrinthIcon aria-hidden="true" class="size-4 flex-shrink-0 text-brand" />
|
||||
</span>
|
||||
<ExternalIcon
|
||||
aria-hidden="true"
|
||||
class="size-4 flex-shrink-0 text-contrast transition-colors"
|
||||
/>
|
||||
</div>
|
||||
<span class="truncate text-base text-contrast opacity-80">
|
||||
{{ formatMessage(messages.installWithModrinthAppDescription) }}
|
||||
</span>
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
</span>
|
||||
</a>
|
||||
<Accordion ref="getModrinthAppAccordion">
|
||||
<nuxt-link class="mt-2 flex justify-center text-brand-blue hover:underline" to="/app">
|
||||
{{ formatMessage(messages.dontHaveModrinthApp) }}
|
||||
@@ -38,8 +48,8 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { ModrinthIcon } from '@modrinth/assets'
|
||||
import { ButtonStyled, defineMessages, useVIntl } from '@modrinth/ui'
|
||||
import { ExternalIcon, ModrinthIcon } from '@modrinth/assets'
|
||||
import { defineMessages, useVIntl } from '@modrinth/ui'
|
||||
import type { DisplayProjectType } from '@modrinth/utils'
|
||||
import { ref } from 'vue'
|
||||
|
||||
@@ -63,10 +73,6 @@ const tags = useGeneratedState()
|
||||
const getModrinthAppAccordion = ref<InstanceType<typeof Accordion> | null>(null)
|
||||
|
||||
const messages = defineMessages({
|
||||
installWithModrinthApp: {
|
||||
id: 'project.download.install-with-app',
|
||||
defaultMessage: 'Install with Modrinth App',
|
||||
},
|
||||
dontHaveModrinthApp: {
|
||||
id: 'project.download.no-app',
|
||||
defaultMessage: "Don't have Modrinth App?",
|
||||
@@ -75,6 +81,10 @@ const messages = defineMessages({
|
||||
id: 'project.download.manually',
|
||||
defaultMessage: 'Download manually',
|
||||
},
|
||||
installWithModrinthAppDescription: {
|
||||
id: 'project.download.install-with-app-description',
|
||||
defaultMessage: 'Automatically install the correct version and dependencies.',
|
||||
},
|
||||
})
|
||||
|
||||
function installWithApp() {
|
||||
@@ -85,6 +95,14 @@ function installWithApp() {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.modrinth-app-install-card {
|
||||
background: radial-gradient(
|
||||
ellipse 90% 250% at 50% 200%,
|
||||
color-mix(in srgb, var(--color-brand-shadow) 50%, var(--surface-1)) -30%,
|
||||
var(--surface-1) 72%
|
||||
);
|
||||
}
|
||||
|
||||
@media (hover: none) and (max-width: 767px) {
|
||||
.modrinth-app-section {
|
||||
display: none;
|
||||
|
||||
@@ -1,728 +0,0 @@
|
||||
import type { AbstractModrinthClient, Labrinth } from '@modrinth/api-client'
|
||||
import {
|
||||
type CdnDownloadReason,
|
||||
createContext,
|
||||
defineMessages,
|
||||
fileTypeMessages,
|
||||
injectModrinthClient,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import type { DisplayProjectType } from '@modrinth/utils'
|
||||
import { useQuery, useQueryClient } from '@tanstack/vue-query'
|
||||
import { type Component, computed, type ComputedRef } from 'vue'
|
||||
|
||||
import { STALE_TIME } from '~/composables/queries/project'
|
||||
|
||||
type DownloadModalProject = Omit<Labrinth.Projects.v2.Project, 'project_type'> & {
|
||||
project_type: DisplayProjectType
|
||||
actualProjectType: Labrinth.Projects.v2.ProjectType
|
||||
}
|
||||
|
||||
type ResolvedContent = Labrinth.Content.v3.ResolvedContent | Labrinth.Content.v3.SkippedContent
|
||||
|
||||
export interface DownloadDependencyRow {
|
||||
key: string
|
||||
name: string
|
||||
icon?: string
|
||||
fallbackIcon?: Component
|
||||
hideIcon?: boolean
|
||||
isAdditionalFile?: boolean
|
||||
projectHref?: string
|
||||
downloadHref?: string
|
||||
filename?: string
|
||||
fileSize?: number
|
||||
metadataLabel?: string
|
||||
typeLabel: string
|
||||
unavailableTooltip: string
|
||||
dependencies: DownloadDependencyRow[]
|
||||
}
|
||||
|
||||
export interface DownloadableDependencyFile {
|
||||
href: string
|
||||
filename: string
|
||||
name: string
|
||||
}
|
||||
|
||||
export interface ProjectDownloadSelection {
|
||||
currentGameVersion: string | null
|
||||
currentPlatform: string | null
|
||||
selectedVersion: Labrinth.Versions.v3.Version | null
|
||||
selectedPrimaryFile: Labrinth.Versions.v3.VersionFile | null
|
||||
}
|
||||
|
||||
interface DownloadModalProviderOptions {
|
||||
project: ComputedRef<DownloadModalProject | null>
|
||||
selectedVersion: ComputedRef<Labrinth.Versions.v3.Version | null>
|
||||
selectedPrimaryFile: ComputedRef<Labrinth.Versions.v3.VersionFile | null>
|
||||
currentGameVersion: ComputedRef<string | null>
|
||||
currentPlatform: ComputedRef<string | null>
|
||||
downloadReason: ComputedRef<CdnDownloadReason>
|
||||
additionalFiles: ComputedRef<Labrinth.Versions.v3.VersionFile[]>
|
||||
}
|
||||
|
||||
export interface DownloadModalProvider {
|
||||
visibleDependencyRows: ComputedRef<DownloadDependencyRow[]>
|
||||
duplicateDependencyRowsHidden: ComputedRef<boolean>
|
||||
downloadRows: ComputedRef<DownloadDependencyRow[]>
|
||||
recommendedRows: ComputedRef<DownloadDependencyRow[]>
|
||||
downloadRowsLoaded: ComputedRef<boolean>
|
||||
requiredResourcePackAdmonitionVisible: ComputedRef<boolean>
|
||||
dependencyResourcePackAdmonitionVisible: ComputedRef<boolean>
|
||||
downloadableDependencyFiles: ComputedRef<DownloadableDependencyFile[]>
|
||||
downloadableDependencyFilesLoaded: ComputedRef<boolean>
|
||||
preloadDependenciesForSelection: (selection: ProjectDownloadSelection) => Promise<void>
|
||||
}
|
||||
|
||||
export const [injectDownloadModalProvider, provideDownloadModalContext] =
|
||||
createContext<DownloadModalProvider>('DownloadModal')
|
||||
|
||||
export function provideDownloadModalProvider(
|
||||
options: DownloadModalProviderOptions,
|
||||
): DownloadModalProvider {
|
||||
const client = injectModrinthClient()
|
||||
const queryClient = useQueryClient()
|
||||
const { createProjectDownloadUrl } = useCdnDownloadContext()
|
||||
const { formatMessage } = useVIntl()
|
||||
const tags = useGeneratedState()
|
||||
|
||||
const shouldResolveDependencies = computed(
|
||||
() => !!options.project.value && !!options.selectedVersion.value,
|
||||
)
|
||||
const dependencyResolutionPreferences = computed(() =>
|
||||
createResolutionPreferences(options.selectedVersion.value, options.currentPlatform.value),
|
||||
)
|
||||
|
||||
const { data: dependencyResolution, isFetching: dependencyResolutionFetching } = useQuery({
|
||||
...dependencyResolutionQueryOptions(
|
||||
client,
|
||||
options.project,
|
||||
options.selectedVersion,
|
||||
dependencyResolutionPreferences,
|
||||
),
|
||||
enabled: shouldResolveDependencies,
|
||||
})
|
||||
|
||||
const visibleResolvedDependencies = computed<ResolvedContent[]>(() =>
|
||||
visibleDependencies(dependencyResolution.value),
|
||||
)
|
||||
|
||||
const dependencyVersionIds = computed(() =>
|
||||
sortedUnique(
|
||||
visibleResolvedDependencies.value
|
||||
.filter((dependency) => !('reason' in dependency))
|
||||
.map((dependency) => dependency.version_id)
|
||||
.filter((versionId): versionId is string => !!versionId),
|
||||
),
|
||||
)
|
||||
|
||||
const { data: dependencyVersions, isFetching: dependencyVersionsFetching } = useQuery({
|
||||
...dependencyVersionsQueryOptions(client, dependencyVersionIds),
|
||||
enabled: computed(
|
||||
() => shouldResolveDependencies.value && dependencyVersionIds.value.length > 0,
|
||||
),
|
||||
})
|
||||
|
||||
const dependencyVersionById = computed(() => {
|
||||
const map = new Map<string, Labrinth.Versions.v3.Version>()
|
||||
for (const version of dependencyVersions.value || []) {
|
||||
if (!version) continue
|
||||
map.set(version.id, version)
|
||||
}
|
||||
return map
|
||||
})
|
||||
|
||||
const dependencyProjectIds = computed(() =>
|
||||
sortedUnique(
|
||||
visibleResolvedDependencies.value
|
||||
.map((dependency) => dependency.project_id)
|
||||
.filter((projectId): projectId is string => !!projectId),
|
||||
),
|
||||
)
|
||||
|
||||
const { data: dependencyProjects, isFetching: dependencyProjectsFetching } = useQuery({
|
||||
...dependencyProjectsQueryOptions(client, dependencyProjectIds),
|
||||
enabled: computed(
|
||||
() => shouldResolveDependencies.value && dependencyProjectIds.value.length > 0,
|
||||
),
|
||||
})
|
||||
|
||||
const dependencyProjectById = computed(() => {
|
||||
const map = new Map<string, Labrinth.Projects.v2.Project>()
|
||||
for (const project of dependencyProjects.value || []) {
|
||||
map.set(project.id, project)
|
||||
}
|
||||
return map
|
||||
})
|
||||
|
||||
const dependenciesByParentVersionId = computed(() => {
|
||||
const map = new Map<string, ResolvedContent[]>()
|
||||
|
||||
for (const dependency of visibleResolvedDependencies.value) {
|
||||
if (!dependency.dependent_on_version_id) continue
|
||||
|
||||
const dependencies = map.get(dependency.dependent_on_version_id) || []
|
||||
dependencies.push(dependency)
|
||||
map.set(dependency.dependent_on_version_id, dependencies)
|
||||
}
|
||||
|
||||
return map
|
||||
})
|
||||
|
||||
const dependenciesLoaded = computed(() => {
|
||||
if (!shouldResolveDependencies.value) return false
|
||||
if (dependencyResolutionFetching.value) return false
|
||||
if (!dependencyResolution.value) return false
|
||||
if (
|
||||
dependencyResolution.value.primary.version_id &&
|
||||
dependencyResolution.value.primary.version_id !== options.selectedVersion.value?.id
|
||||
) {
|
||||
return false
|
||||
}
|
||||
if (
|
||||
dependencyVersionsFetching.value ||
|
||||
!dependencyVersionIds.value.every((versionId) => dependencyVersionById.value.has(versionId))
|
||||
) {
|
||||
return false
|
||||
}
|
||||
if (
|
||||
dependencyProjectsFetching.value ||
|
||||
!dependencyProjectIds.value.every((projectId) => dependencyProjectById.value.has(projectId))
|
||||
) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
})
|
||||
|
||||
const selectedDownloadRowsLoaded = computed(() => {
|
||||
if (!options.selectedPrimaryFile.value) return false
|
||||
return dependenciesLoaded.value
|
||||
})
|
||||
const keepPreviousDownloadRows = computed(
|
||||
() => shouldResolveDependencies.value && !!options.selectedPrimaryFile.value,
|
||||
)
|
||||
|
||||
const resolvedDependencyRows = computed<DownloadDependencyRow[]>(() => {
|
||||
if (!selectedDownloadRowsLoaded.value) return []
|
||||
|
||||
const primaryVersionId =
|
||||
dependencyResolution.value?.primary.version_id || options.selectedVersion.value?.id
|
||||
if (!primaryVersionId) return []
|
||||
|
||||
const dependencies = dependenciesByParentVersionId.value.get(primaryVersionId) || []
|
||||
|
||||
return dependencies.flatMap((dependency) => {
|
||||
const row = createDependencyRow(dependency)
|
||||
return row ? [row] : []
|
||||
})
|
||||
})
|
||||
|
||||
const visibleDependencyRows = computed<DownloadDependencyRow[]>((previous) => {
|
||||
if (selectedDownloadRowsLoaded.value) {
|
||||
return dedupeDependencyRows(resolvedDependencyRows.value)
|
||||
}
|
||||
|
||||
return keepPreviousDownloadRows.value ? (previous ?? []) : []
|
||||
})
|
||||
|
||||
const duplicateDependencyRowsHidden = computed<boolean>((previous) => {
|
||||
if (selectedDownloadRowsLoaded.value) {
|
||||
return (
|
||||
hasSkippedDuplicateDependency(dependencyResolution.value) ||
|
||||
hasDuplicateDependencyRows(resolvedDependencyRows.value)
|
||||
)
|
||||
}
|
||||
|
||||
return keepPreviousDownloadRows.value ? (previous ?? false) : false
|
||||
})
|
||||
|
||||
const visibleRequiredResourcePackFiles = computed(() => {
|
||||
if (options.project.value?.project_type !== 'datapack') return []
|
||||
|
||||
return options.additionalFiles.value.filter(
|
||||
(file) => file.file_type === 'required-resource-pack',
|
||||
)
|
||||
})
|
||||
|
||||
const visibleRecommendedResourcePackFiles = computed(() => {
|
||||
if (options.project.value?.project_type !== 'datapack') return []
|
||||
|
||||
return options.additionalFiles.value.filter(
|
||||
(file) => file.file_type === 'optional-resource-pack',
|
||||
)
|
||||
})
|
||||
|
||||
const additionalFileRows = computed<DownloadDependencyRow[]>(() =>
|
||||
selectedDownloadRowsLoaded.value
|
||||
? visibleRequiredResourcePackFiles.value.map(createAdditionalFileRow)
|
||||
: [],
|
||||
)
|
||||
|
||||
const recommendedRows = computed<DownloadDependencyRow[]>(() =>
|
||||
selectedDownloadRowsLoaded.value
|
||||
? visibleRecommendedResourcePackFiles.value.map(createAdditionalFileRow)
|
||||
: [],
|
||||
)
|
||||
|
||||
function createAdditionalFileRow(file: Labrinth.Versions.v3.VersionFile): DownloadDependencyRow {
|
||||
return {
|
||||
key: `additional-file-${additionalFileKey(file)}`,
|
||||
name: file.filename,
|
||||
hideIcon: true,
|
||||
isAdditionalFile: true,
|
||||
downloadHref: getDownloadUrl(file.url),
|
||||
filename: file.filename,
|
||||
fileSize: file.size,
|
||||
metadataLabel: fileTypeDisplayLabel(file.file_type),
|
||||
typeLabel: fileTypeLabel(file.file_type),
|
||||
unavailableTooltip: formatMessage(messages.unavailableFile),
|
||||
dependencies: [],
|
||||
}
|
||||
}
|
||||
|
||||
const downloadRows = computed<DownloadDependencyRow[]>((previous) => {
|
||||
if (selectedDownloadRowsLoaded.value) {
|
||||
return [...visibleDependencyRows.value, ...additionalFileRows.value]
|
||||
}
|
||||
|
||||
return keepPreviousDownloadRows.value ? (previous ?? []) : []
|
||||
})
|
||||
|
||||
const downloadRowsLoaded = computed<boolean>((previous) => {
|
||||
if (selectedDownloadRowsLoaded.value) return true
|
||||
return keepPreviousDownloadRows.value ? (previous ?? false) : false
|
||||
})
|
||||
|
||||
const requiredResourcePackAdmonitionVisible = computed(() => {
|
||||
return selectedDownloadRowsLoaded.value && visibleRequiredResourcePackFiles.value.length > 0
|
||||
})
|
||||
|
||||
const dependencyResourcePackAdmonitionVisible = computed(() => {
|
||||
return selectedDownloadRowsLoaded.value && hasAdditionalFileRows(visibleDependencyRows.value)
|
||||
})
|
||||
|
||||
const downloadableDependencyFiles = computed<DownloadableDependencyFile[]>(() =>
|
||||
collectDownloadableDependencyFiles(visibleDependencyRows.value),
|
||||
)
|
||||
|
||||
const downloadableDependencyFilesLoaded = computed(() => {
|
||||
return selectedDownloadRowsLoaded.value
|
||||
})
|
||||
|
||||
async function preloadDependenciesForSelection(selection: ProjectDownloadSelection) {
|
||||
if (!options.project.value || !selection.selectedVersion) return
|
||||
|
||||
const preferences = createResolutionPreferences(
|
||||
selection.selectedVersion,
|
||||
selection.currentPlatform,
|
||||
)
|
||||
|
||||
const resolution = await queryClient.ensureQueryData({
|
||||
queryKey: [
|
||||
'project-download-modal',
|
||||
'content-resolve',
|
||||
options.project.value.id,
|
||||
selection.selectedVersion.id,
|
||||
options.project.value.project_type,
|
||||
preferences,
|
||||
],
|
||||
queryFn: () =>
|
||||
client.labrinth.content_v3.resolve({
|
||||
project_id: options.project.value!.id,
|
||||
version_id: selection.selectedVersion!.id,
|
||||
content_type: resolveContentType(options.project.value!.project_type),
|
||||
selected: preferences,
|
||||
target: preferences,
|
||||
}),
|
||||
staleTime: STALE_TIME,
|
||||
})
|
||||
const visible = visibleDependencies(resolution)
|
||||
const versionIds = getDependencyVersionIds(visible)
|
||||
const projectIds = getDependencyProjectIds(visible)
|
||||
|
||||
await Promise.all([
|
||||
versionIds.length > 0
|
||||
? queryClient.ensureQueryData({
|
||||
queryKey: ['project-download-modal', 'resolved-versions', versionIds],
|
||||
queryFn: () => client.labrinth.versions_v3.getVersions(versionIds),
|
||||
staleTime: STALE_TIME,
|
||||
})
|
||||
: Promise.resolve(),
|
||||
projectIds.length > 0
|
||||
? queryClient.ensureQueryData({
|
||||
queryKey: ['project-download-modal', 'resolved-projects', projectIds],
|
||||
queryFn: () => client.labrinth.projects_v2.getMultiple(projectIds),
|
||||
staleTime: STALE_TIME,
|
||||
})
|
||||
: Promise.resolve(),
|
||||
])
|
||||
}
|
||||
|
||||
function createDependencyRow(dependency: ResolvedContent): DownloadDependencyRow | null {
|
||||
const versionId = dependency.version_id ?? undefined
|
||||
const version = versionId ? dependencyVersionById.value.get(versionId) : undefined
|
||||
const project = dependencyProjectById.value.get(dependency.project_id)
|
||||
if (!project) return null
|
||||
|
||||
const primaryFile = primaryFileForVersion(version)
|
||||
const unavailableTooltip =
|
||||
'reason' in dependency && dependency.reason
|
||||
? skippedReasonLabel(dependency.reason)
|
||||
: formatMessage(messages.unavailableDependency)
|
||||
const name = project.title
|
||||
const metadataLabel = isProjectOnlyDependencyReference(dependency)
|
||||
? formatMessage(messages.anyCompatibleDependency)
|
||||
: (version?.version_number ?? formatMessage(messages.anyCompatibleDependency))
|
||||
const childDependencies = (
|
||||
versionId && dependenciesByParentVersionId.value.get(versionId)
|
||||
? dependenciesByParentVersionId.value.get(versionId)!
|
||||
: []
|
||||
).flatMap((subDependency) => {
|
||||
const row = createDependencyRow(subDependency)
|
||||
return row ? [row] : []
|
||||
})
|
||||
|
||||
return {
|
||||
key: `${dependency.project_id}-${versionId ?? 'unresolved'}-${
|
||||
'reason' in dependency ? dependency.reason : 'resolved'
|
||||
}`,
|
||||
name,
|
||||
icon: project.icon_url ?? undefined,
|
||||
projectHref: `/${project.project_type}/${project.slug || project.id}`,
|
||||
downloadHref:
|
||||
'reason' in dependency || !primaryFile ? undefined : getDownloadUrl(primaryFile.url),
|
||||
filename: primaryFile?.filename,
|
||||
fileSize: primaryFile?.size,
|
||||
metadataLabel,
|
||||
typeLabel: 'Required',
|
||||
unavailableTooltip,
|
||||
dependencies: [
|
||||
...childDependencies,
|
||||
...createRequiredResourcePackRowsForDependency(project, version, primaryFile),
|
||||
],
|
||||
}
|
||||
}
|
||||
|
||||
function createRequiredResourcePackRowsForDependency(
|
||||
project: Labrinth.Projects.v2.Project,
|
||||
version: Labrinth.Versions.v3.Version | undefined,
|
||||
primaryFile: Labrinth.Versions.v3.VersionFile | undefined,
|
||||
): DownloadDependencyRow[] {
|
||||
if (!version || !isDataPackProject(project)) return []
|
||||
|
||||
return version.files
|
||||
.filter((file) => file !== primaryFile && file.file_type === 'required-resource-pack')
|
||||
.map((file) => ({
|
||||
key: `dependency-resource-pack-${version.id}-${additionalFileKey(file)}`,
|
||||
name: file.filename,
|
||||
hideIcon: true,
|
||||
isAdditionalFile: true,
|
||||
downloadHref: getDownloadUrl(file.url),
|
||||
filename: file.filename,
|
||||
fileSize: file.size,
|
||||
metadataLabel: fileTypeDisplayLabel(file.file_type),
|
||||
typeLabel: fileTypeLabel(file.file_type),
|
||||
unavailableTooltip: formatMessage(messages.unavailableFile),
|
||||
dependencies: [],
|
||||
}))
|
||||
}
|
||||
|
||||
function isDataPackProject(project: Labrinth.Projects.v2.Project) {
|
||||
return (
|
||||
project.project_type === 'datapack' ||
|
||||
project.loaders.some((loader) => tags.value.loaderData.dataPackLoaders.includes(loader))
|
||||
)
|
||||
}
|
||||
|
||||
function isProjectOnlyDependencyReference(dependency: ResolvedContent) {
|
||||
const parentVersionId = dependency.dependent_on_version_id
|
||||
const parentVersion =
|
||||
parentVersionId === options.selectedVersion.value?.id
|
||||
? options.selectedVersion.value
|
||||
: parentVersionId
|
||||
? dependencyVersionById.value.get(parentVersionId)
|
||||
: undefined
|
||||
|
||||
return !!parentVersion?.dependencies?.some(
|
||||
(parentDependency) =>
|
||||
parentDependency.project_id === dependency.project_id && !parentDependency.version_id,
|
||||
)
|
||||
}
|
||||
|
||||
function skippedReasonLabel(reason: Labrinth.Content.v3.SkippedContent['reason']) {
|
||||
return (
|
||||
{
|
||||
already_installed: formatMessage(messages.alreadyInstalledDependency),
|
||||
duplicate_project: formatMessage(messages.duplicateDependency),
|
||||
conflicting_dependency: formatMessage(messages.conflictingDependency),
|
||||
no_compatible_version: formatMessage(messages.noCompatibleDependency),
|
||||
missing_version: formatMessage(messages.missingDependencyVersion),
|
||||
quilt_fabric_api: formatMessage(messages.quiltFabricApiDependency),
|
||||
}[reason] || formatMessage(messages.unavailableDependency)
|
||||
)
|
||||
}
|
||||
|
||||
function getDownloadUrl(url: string) {
|
||||
return createProjectDownloadUrl(url, {
|
||||
reason: options.downloadReason.value,
|
||||
gameVersion: options.currentGameVersion.value ?? undefined,
|
||||
loader: options.currentPlatform.value ?? undefined,
|
||||
})
|
||||
}
|
||||
|
||||
function fileTypeLabel(type?: Labrinth.Versions.v3.FileType | null) {
|
||||
return formatMessage(fileTypeMessages[type ?? 'unknown'] ?? fileTypeMessages.unknown)
|
||||
}
|
||||
|
||||
function fileTypeDisplayLabel(type?: Labrinth.Versions.v3.FileType | null) {
|
||||
if (type === 'required-resource-pack') return formatMessage(messages.requiredResourcePackShort)
|
||||
|
||||
return fileTypeLabel(type)
|
||||
}
|
||||
|
||||
const provider = {
|
||||
visibleDependencyRows,
|
||||
duplicateDependencyRowsHidden,
|
||||
downloadRows,
|
||||
recommendedRows,
|
||||
downloadRowsLoaded,
|
||||
requiredResourcePackAdmonitionVisible,
|
||||
dependencyResourcePackAdmonitionVisible,
|
||||
downloadableDependencyFiles,
|
||||
downloadableDependencyFilesLoaded,
|
||||
preloadDependenciesForSelection,
|
||||
}
|
||||
|
||||
provideDownloadModalContext(provider)
|
||||
|
||||
return provider
|
||||
}
|
||||
|
||||
function dependencyResolutionQueryOptions(
|
||||
client: AbstractModrinthClient,
|
||||
project: ComputedRef<DownloadModalProject | null>,
|
||||
selectedVersion: ComputedRef<Labrinth.Versions.v3.Version | null>,
|
||||
preferences: ComputedRef<Labrinth.Content.v3.ResolutionPreferences>,
|
||||
) {
|
||||
return {
|
||||
queryKey: computed(() => [
|
||||
'project-download-modal',
|
||||
'content-resolve',
|
||||
project.value?.id,
|
||||
selectedVersion.value?.id,
|
||||
project.value?.project_type,
|
||||
preferences.value,
|
||||
]),
|
||||
queryFn: () =>
|
||||
client.labrinth.content_v3.resolve({
|
||||
project_id: project.value!.id,
|
||||
version_id: selectedVersion.value!.id,
|
||||
content_type: resolveContentType(project.value!.project_type),
|
||||
selected: preferences.value,
|
||||
target: preferences.value,
|
||||
}),
|
||||
staleTime: STALE_TIME,
|
||||
}
|
||||
}
|
||||
|
||||
function dependencyVersionsQueryOptions(
|
||||
client: AbstractModrinthClient,
|
||||
versionIds: ComputedRef<string[]>,
|
||||
) {
|
||||
return {
|
||||
queryKey: computed(() => ['project-download-modal', 'resolved-versions', versionIds.value]),
|
||||
queryFn: () => client.labrinth.versions_v3.getVersions(versionIds.value),
|
||||
staleTime: STALE_TIME,
|
||||
}
|
||||
}
|
||||
|
||||
function dependencyProjectsQueryOptions(
|
||||
client: AbstractModrinthClient,
|
||||
projectIds: ComputedRef<string[]>,
|
||||
) {
|
||||
return {
|
||||
queryKey: computed(() => ['project-download-modal', 'resolved-projects', projectIds.value]),
|
||||
queryFn: () => client.labrinth.projects_v2.getMultiple(projectIds.value),
|
||||
staleTime: STALE_TIME,
|
||||
}
|
||||
}
|
||||
|
||||
function createResolutionPreferences(
|
||||
version: Labrinth.Versions.v3.Version | null,
|
||||
currentPlatform: string | null,
|
||||
): Labrinth.Content.v3.ResolutionPreferences {
|
||||
return {
|
||||
game_versions: version?.game_versions || [],
|
||||
loaders: currentPlatform ? [currentPlatform] : version?.loaders || [],
|
||||
}
|
||||
}
|
||||
|
||||
function visibleDependencies(resolution?: Labrinth.Content.v3.ResolveContentPlan) {
|
||||
return [...(resolution?.dependencies || []), ...(resolution?.skipped || [])].filter(
|
||||
shouldShowDependency,
|
||||
)
|
||||
}
|
||||
|
||||
function getDependencyVersionIds(dependencies: ResolvedContent[]) {
|
||||
return sortedUnique(
|
||||
dependencies
|
||||
.filter((dependency) => !('reason' in dependency))
|
||||
.map((dependency) => dependency.version_id)
|
||||
.filter((versionId): versionId is string => !!versionId),
|
||||
)
|
||||
}
|
||||
|
||||
function getDependencyProjectIds(dependencies: ResolvedContent[]) {
|
||||
return sortedUnique(
|
||||
dependencies
|
||||
.map((dependency) => dependency.project_id)
|
||||
.filter((projectId): projectId is string => !!projectId),
|
||||
)
|
||||
}
|
||||
|
||||
function primaryFileForVersion(version?: Labrinth.Versions.v3.Version) {
|
||||
return version?.files?.find((file) => file.primary) || version?.files?.[0]
|
||||
}
|
||||
|
||||
function shouldShowDependency(dependency: ResolvedContent) {
|
||||
return !(
|
||||
'reason' in dependency && ['duplicate_project', 'quilt_fabric_api'].includes(dependency.reason)
|
||||
)
|
||||
}
|
||||
|
||||
function hasSkippedDuplicateDependency(resolution?: Labrinth.Content.v3.ResolveContentPlan) {
|
||||
return (resolution?.skipped || []).some((dependency) => dependency.reason === 'duplicate_project')
|
||||
}
|
||||
|
||||
function resolveContentType(projectType: DisplayProjectType): Labrinth.Content.v3.ContentType {
|
||||
return ['mod', 'plugin', 'datapack', 'resourcepack', 'shader', 'modpack'].includes(projectType)
|
||||
? (projectType as Labrinth.Content.v3.ContentType)
|
||||
: 'mod'
|
||||
}
|
||||
|
||||
function additionalFileKey(file: Labrinth.Versions.v3.VersionFile) {
|
||||
return file.hashes?.sha1 ?? file.filename
|
||||
}
|
||||
|
||||
function dedupeDependencyRows(
|
||||
rows: DownloadDependencyRow[],
|
||||
seenDependencies = new Set<string>(),
|
||||
): DownloadDependencyRow[] {
|
||||
return rows.flatMap((row) => {
|
||||
const identity = dependencyRowIdentity(row)
|
||||
if (seenDependencies.has(identity)) return []
|
||||
|
||||
seenDependencies.add(identity)
|
||||
|
||||
return [
|
||||
{
|
||||
...row,
|
||||
dependencies: dedupeDependencyRows(row.dependencies, seenDependencies),
|
||||
},
|
||||
]
|
||||
})
|
||||
}
|
||||
|
||||
function dependencyRowIdentity(row: DownloadDependencyRow) {
|
||||
return row.projectHref ?? row.downloadHref ?? row.key
|
||||
}
|
||||
|
||||
function hasDuplicateDependencyRows(
|
||||
rows: DownloadDependencyRow[],
|
||||
seenDependencies = new Set<string>(),
|
||||
): boolean {
|
||||
for (const row of rows) {
|
||||
const rowId = dependencyRowIdentity(row)
|
||||
if (seenDependencies.has(rowId)) return true
|
||||
seenDependencies.add(rowId)
|
||||
if (hasDuplicateDependencyRows(row.dependencies, seenDependencies)) return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
function hasAdditionalFileRows(rows: DownloadDependencyRow[]): boolean {
|
||||
for (const row of rows) {
|
||||
if (row.isAdditionalFile) return true
|
||||
if (hasAdditionalFileRows(row.dependencies)) return true
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
function collectDownloadableDependencyFiles(
|
||||
rows: DownloadDependencyRow[],
|
||||
seenHrefs = new Set<string>(),
|
||||
): DownloadableDependencyFile[] {
|
||||
const files: DownloadableDependencyFile[] = []
|
||||
|
||||
for (const row of rows) {
|
||||
if (row.downloadHref && !seenHrefs.has(row.downloadHref)) {
|
||||
seenHrefs.add(row.downloadHref)
|
||||
files.push({
|
||||
href: row.downloadHref,
|
||||
filename: row.filename || filenameFromUrl(row.downloadHref),
|
||||
name: row.name,
|
||||
})
|
||||
}
|
||||
|
||||
files.push(...collectDownloadableDependencyFiles(row.dependencies, seenHrefs))
|
||||
}
|
||||
|
||||
return files
|
||||
}
|
||||
|
||||
function filenameFromUrl(url: string) {
|
||||
try {
|
||||
const filename = new URL(url).pathname.split('/').pop()
|
||||
return filename ? decodeURIComponent(filename) : 'dependency.jar'
|
||||
} catch {
|
||||
return 'dependency.jar'
|
||||
}
|
||||
}
|
||||
|
||||
function sortedUnique(values: string[]) {
|
||||
return [...new Set(values)].sort()
|
||||
}
|
||||
|
||||
const messages = defineMessages({
|
||||
anyCompatibleDependency: {
|
||||
id: 'project.download.dependency-any-compatible',
|
||||
defaultMessage: 'Any compatible',
|
||||
},
|
||||
alreadyInstalledDependency: {
|
||||
id: 'project.download.dependency-already-installed',
|
||||
defaultMessage: 'This dependency is already installed',
|
||||
},
|
||||
conflictingDependency: {
|
||||
id: 'project.download.dependency-conflicting',
|
||||
defaultMessage: 'This dependency conflicts with another dependency',
|
||||
},
|
||||
duplicateDependency: {
|
||||
id: 'project.download.dependency-duplicate',
|
||||
defaultMessage: 'This dependency is already included',
|
||||
},
|
||||
missingDependencyVersion: {
|
||||
id: 'project.download.dependency-missing-version',
|
||||
defaultMessage: 'This dependency version is unavailable',
|
||||
},
|
||||
noCompatibleDependency: {
|
||||
id: 'project.download.dependency-no-compatible-version',
|
||||
defaultMessage: 'No compatible version is available for this dependency',
|
||||
},
|
||||
quiltFabricApiDependency: {
|
||||
id: 'project.download.dependency-quilt-fabric-api',
|
||||
defaultMessage: 'Fabric API is skipped for Quilt',
|
||||
},
|
||||
unavailableDependency: {
|
||||
id: 'project.download.dependency-unavailable',
|
||||
defaultMessage: 'This dependency cannot be downloaded',
|
||||
},
|
||||
unavailableFile: {
|
||||
id: 'project.download.file-unavailable',
|
||||
defaultMessage: 'This file cannot be downloaded',
|
||||
},
|
||||
requiredResourcePackShort: {
|
||||
id: 'project.download.required-resource-pack-short',
|
||||
defaultMessage: 'Resource pack',
|
||||
},
|
||||
})
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<NewModal ref="modal" :on-show="onShow" :on-hide="onHide" width="544px" actions-divider>
|
||||
<NewModal ref="modal" :on-show="onShow" :on-hide="onHide" width="544px">
|
||||
<template #title>
|
||||
<template v-if="project">
|
||||
<Avatar :src="project.icon_url" :alt="project.title" class="icon" size="32px" />
|
||||
@@ -19,8 +19,6 @@
|
||||
:project="project"
|
||||
:versions="versions"
|
||||
:dependency-download-files="dependencyDownloadFiles"
|
||||
:download-data-loaded="downloadRowsLoaded"
|
||||
:versions-loaded="versionsLoaded"
|
||||
:download-reason="downloadReason"
|
||||
:initial-game-version="initialGameVersion"
|
||||
:initial-platform="initialPlatform"
|
||||
@@ -29,11 +27,20 @@
|
||||
:reset-key="downloadProjectResetKey"
|
||||
@select-game-version="selectGameVersion"
|
||||
@select-platform="selectPlatform"
|
||||
@update:selection="updateProjectDownloadSelection"
|
||||
@update:selection="projectDownloadSelection = $event"
|
||||
@download="onDownload"
|
||||
/>
|
||||
<div class="flex flex-col gap-4">
|
||||
<DownloadDependencies @download="onDownload" />
|
||||
<DownloadDependencies
|
||||
:project="project"
|
||||
:selected-version="selectedVersion"
|
||||
:current-game-version="currentGameVersion"
|
||||
:current-platform="currentPlatform"
|
||||
:download-reason="downloadReason"
|
||||
:additional-files="additionalFiles"
|
||||
@update:downloadable-files="dependencyDownloadFiles = $event"
|
||||
@download="onDownload"
|
||||
/>
|
||||
</div>
|
||||
<ServersPromo
|
||||
v-if="flags.showProjectPageDownloadModalServersPromo"
|
||||
@@ -47,61 +54,16 @@
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="showDependencyDownloadActions" #actions>
|
||||
<div class="flex flex-wrap justify-end gap-2 p-2">
|
||||
<ButtonStyled>
|
||||
<button
|
||||
class="!shadow-none"
|
||||
:disabled="!!downloadingActionType || !dependencyDownloadFilesLoaded"
|
||||
@click="downloadSelectedVersionZip"
|
||||
>
|
||||
<SpinnerIcon
|
||||
v-if="downloadingActionType === 'zip'"
|
||||
aria-hidden="true"
|
||||
class="animate-spin"
|
||||
/>
|
||||
<DownloadIcon v-else aria-hidden="true" />
|
||||
{{ formatMessage(messages.downloadAsZip) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<JoinedButtons
|
||||
v-if="hasRecommendedDownloadFiles"
|
||||
color="brand"
|
||||
:actions="downloadWithRecommendedActions"
|
||||
:disabled="!!downloadingActionType || !dependencyDownloadFilesLoaded"
|
||||
/>
|
||||
<ButtonStyled v-else color="brand">
|
||||
<button
|
||||
class="!shadow-none"
|
||||
:disabled="!!downloadingActionType || !dependencyDownloadFilesLoaded"
|
||||
@click="downloadFilesWithDependencies"
|
||||
>
|
||||
<SpinnerIcon
|
||||
v-if="downloadingActionType === 'dependencies'"
|
||||
aria-hidden="true"
|
||||
class="animate-spin"
|
||||
/>
|
||||
<DownloadIcon v-else aria-hidden="true" />
|
||||
{{ formatMessage(messages.downloadWithDependencies) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { DownloadIcon, SpinnerIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
type CdnDownloadReason,
|
||||
defineMessages,
|
||||
injectModrinthClient,
|
||||
injectNotificationManager,
|
||||
type JoinedButtonAction,
|
||||
JoinedButtons,
|
||||
NewModal,
|
||||
ServersPromo,
|
||||
truncatedTooltip,
|
||||
@@ -109,16 +71,13 @@ import {
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import type { DisplayProjectType } from '@modrinth/utils'
|
||||
import { useQuery, useQueryClient } from '@tanstack/vue-query'
|
||||
import dayjs from 'dayjs'
|
||||
import JSZip from 'jszip'
|
||||
import { useQuery } from '@tanstack/vue-query'
|
||||
import { computed, nextTick, onUnmounted, ref, watch } from 'vue'
|
||||
|
||||
import { navigateTo } from '#app'
|
||||
import { saveFeatureFlags } from '~/composables/featureFlags.ts'
|
||||
import { STALE_TIME, STALE_TIME_LONG } from '~/composables/queries/project'
|
||||
|
||||
import { provideDownloadModalProvider } from './download-modal-provider'
|
||||
import DownloadDependencies from './DownloadDependencies.vue'
|
||||
import DownloadProject from './DownloadProject.vue'
|
||||
import InstallWithModrinthApp from './InstallWithModrinthApp.vue'
|
||||
@@ -140,12 +99,6 @@ type DownloadableFile = {
|
||||
filename: string
|
||||
}
|
||||
|
||||
type DownloadedFile = DownloadableFile & {
|
||||
blob: Blob
|
||||
}
|
||||
|
||||
type DownloadActionType = 'zip' | 'dependencies' | 'recommended'
|
||||
|
||||
type NewModalRef = {
|
||||
show: (event?: MouseEvent) => void
|
||||
hide: () => void
|
||||
@@ -185,31 +138,19 @@ const route = useRoute()
|
||||
const flags = useFeatureFlags()
|
||||
const tags = useGeneratedState()
|
||||
const client = injectModrinthClient()
|
||||
const queryClient = useQueryClient()
|
||||
const { createProjectDownloadUrl } = useCdnDownloadContext()
|
||||
const { addNotification } = injectNotificationManager()
|
||||
const { formatMessage } = useVIntl()
|
||||
const debug = useDebugLogger('DownloadModal')
|
||||
|
||||
const modal = ref<NewModalRef | null>(null)
|
||||
const downloadTitleRef = ref<HTMLElement | null>(null)
|
||||
const modalOpening = ref(false)
|
||||
const modalOpen = ref(false)
|
||||
const showProjectId = ref<string | null>(null)
|
||||
const showOptions = ref<ResolvedProjectDownloadModalShowOptions>(getDefaultShowOptions())
|
||||
const downloadProjectResetKey = ref(0)
|
||||
const projectDownloadSelection = ref<ProjectDownloadSelection>(getDefaultProjectDownloadSelection())
|
||||
const pendingRouteSelection = ref({
|
||||
gameVersion: getStringQueryValue(route.query.version),
|
||||
platform: getStringQueryValue(route.query.loader),
|
||||
})
|
||||
const downloadingActionType = ref<DownloadActionType | null>(null)
|
||||
const dependencyDownloadFiles = ref<DownloadableFile[]>([])
|
||||
const MODAL_CLOSE_STATE_RESET_MS = 350
|
||||
const DOWNLOAD_URL_REVOKE_MS = 60000
|
||||
const DOWNLOAD_STAGGER_MS = 500
|
||||
let closeStateResetTimeout: ReturnType<typeof setTimeout> | null = null
|
||||
let modalShowRequestId = 0
|
||||
let unmounted = false
|
||||
|
||||
const routeProjectId = computed(() => showProjectId.value ?? props.projectId ?? null)
|
||||
|
||||
@@ -242,7 +183,11 @@ const downloadTitle = computed(() => {
|
||||
})
|
||||
|
||||
const versionsEnabled = ref(false)
|
||||
const { data: versionsV3, isFetching: versionsV3Loading } = useQuery({
|
||||
const {
|
||||
data: versionsV3,
|
||||
error: _versionsV3Error,
|
||||
isFetching: versionsV3Loading,
|
||||
} = useQuery({
|
||||
queryKey: computed(() => ['project', resolvedProjectId.value, 'versions', 'v3']),
|
||||
queryFn: () =>
|
||||
client.labrinth.versions_v3.getProjectVersions(resolvedProjectId.value!, {
|
||||
@@ -253,12 +198,24 @@ const { data: versionsV3, isFetching: versionsV3Loading } = useQuery({
|
||||
enabled: computed(() => !!resolvedProjectId.value && versionsEnabled.value),
|
||||
})
|
||||
|
||||
const versions = computed<Labrinth.Versions.v3.Version[]>(() =>
|
||||
normalizeVersionsForDownload(versionsV3.value ?? []),
|
||||
)
|
||||
const versionsLoaded = computed(
|
||||
() => versionsEnabled.value && !versionsV3Loading.value && Array.isArray(versionsV3.value),
|
||||
)
|
||||
const versions = computed<Labrinth.Versions.v3.Version[]>(() => {
|
||||
const isModpack =
|
||||
project.value?.actualProjectType === 'modpack' || project.value?.project_type === 'modpack'
|
||||
|
||||
return (versionsV3.value ?? []).map((version) => {
|
||||
const files = Array.isArray(version.files) ? version.files : []
|
||||
const gameVersions = Array.isArray(version.game_versions) ? version.game_versions : []
|
||||
const loaders = Array.isArray(version.loaders) ? version.loaders : []
|
||||
const mrpackLoaders = Array.isArray(version.mrpack_loaders) ? version.mrpack_loaders : []
|
||||
|
||||
return {
|
||||
...version,
|
||||
files,
|
||||
game_versions: gameVersions,
|
||||
loaders: isModpack && mrpackLoaders.length ? mrpackLoaders : loaders,
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
const initialGameVersion = computed(() => {
|
||||
const version = route.query.version
|
||||
@@ -281,88 +238,6 @@ const additionalFiles = computed(() => {
|
||||
return selectedVersion.value.files.filter((file) => file !== selectedPrimaryFile.value)
|
||||
})
|
||||
|
||||
const hasRequiredResourcePackAdditionalFile = computed(() =>
|
||||
additionalFiles.value.some((file) => file.file_type === 'required-resource-pack'),
|
||||
)
|
||||
|
||||
const downloadModalProvider = provideDownloadModalProvider({
|
||||
project,
|
||||
selectedVersion,
|
||||
selectedPrimaryFile,
|
||||
currentGameVersion,
|
||||
currentPlatform,
|
||||
downloadReason: computed(() => props.downloadReason),
|
||||
additionalFiles,
|
||||
})
|
||||
const dependencyDownloadFiles = downloadModalProvider.downloadableDependencyFiles
|
||||
const dependencyDownloadFilesLoaded = downloadModalProvider.downloadableDependencyFilesLoaded
|
||||
const downloadRowsLoaded = downloadModalProvider.downloadRowsLoaded
|
||||
|
||||
const selectedVersionDownloadFiles = computed<DownloadableFile[]>(() => {
|
||||
if (!selectedVersion.value) return []
|
||||
|
||||
return selectedVersion.value.files
|
||||
.filter(
|
||||
(file) => file === selectedPrimaryFile.value || file.file_type === 'required-resource-pack',
|
||||
)
|
||||
.map((file) => ({
|
||||
href: createProjectDownloadUrl(file.url, {
|
||||
reason: props.downloadReason,
|
||||
gameVersion: currentGameVersion.value ?? undefined,
|
||||
loader: currentPlatform.value ?? undefined,
|
||||
}),
|
||||
filename: file.filename,
|
||||
}))
|
||||
})
|
||||
|
||||
const recommendedDownloadFiles = computed<DownloadableFile[]>(() => {
|
||||
if (project.value?.project_type !== 'datapack' || !selectedVersion.value) return []
|
||||
|
||||
return selectedVersion.value.files
|
||||
.filter(
|
||||
(file) => file !== selectedPrimaryFile.value && file.file_type === 'optional-resource-pack',
|
||||
)
|
||||
.map((file) => ({
|
||||
href: createProjectDownloadUrl(file.url, {
|
||||
reason: props.downloadReason,
|
||||
gameVersion: currentGameVersion.value ?? undefined,
|
||||
loader: currentPlatform.value ?? undefined,
|
||||
}),
|
||||
filename: file.filename,
|
||||
}))
|
||||
})
|
||||
|
||||
const hasRecommendedDownloadFiles = computed(() => recommendedDownloadFiles.value.length > 0)
|
||||
|
||||
const showDependencyDownloadActions = computed(
|
||||
() =>
|
||||
selectedVersionDownloadFiles.value.length > 0 &&
|
||||
(dependencyDownloadFiles.value.length > 0 ||
|
||||
hasRequiredResourcePackAdditionalFile.value ||
|
||||
hasRecommendedDownloadFiles.value),
|
||||
)
|
||||
|
||||
const downloadWithRecommendedActions = computed<JoinedButtonAction[]>(() => [
|
||||
{
|
||||
id: 'download-with-dependencies',
|
||||
label: formatMessage(messages.downloadWithDependencies),
|
||||
icon: downloadingActionType.value === 'dependencies' ? SpinnerIcon : DownloadIcon,
|
||||
action: () => void downloadFilesWithDependencies(),
|
||||
},
|
||||
{
|
||||
id: 'download-with-recommended',
|
||||
label: formatMessage(messages.downloadWithRecommended),
|
||||
icon: DownloadIcon,
|
||||
action: () => void downloadFilesWithRecommended(),
|
||||
},
|
||||
{
|
||||
id: 'download-with-recommended-zip',
|
||||
label: formatMessage(messages.downloadWithRecommendedAsZip),
|
||||
icon: DownloadIcon,
|
||||
action: () => void downloadSelectedVersionZip(),
|
||||
},
|
||||
])
|
||||
|
||||
watch(projectV2Error, (error) => {
|
||||
if (error) {
|
||||
debug('project query failed', error)
|
||||
@@ -374,30 +249,6 @@ const messages = defineMessages({
|
||||
id: 'project.download.title',
|
||||
defaultMessage: 'Download {title}',
|
||||
},
|
||||
downloadAsZip: {
|
||||
id: 'project.download.download-as-zip',
|
||||
defaultMessage: 'Download as .zip',
|
||||
},
|
||||
downloadWithDependencies: {
|
||||
id: 'project.download.download-with-dependencies',
|
||||
defaultMessage: 'Download with deps',
|
||||
},
|
||||
downloadWithRecommended: {
|
||||
id: 'project.download.download-with-recommended',
|
||||
defaultMessage: 'Download with recommended',
|
||||
},
|
||||
downloadWithRecommendedAsZip: {
|
||||
id: 'project.download.download-with-recommended-as-zip',
|
||||
defaultMessage: 'Download with recommended as .zip',
|
||||
},
|
||||
downloadZipFailedTitle: {
|
||||
id: 'project.download.zip-failed-title',
|
||||
defaultMessage: 'Could not download files',
|
||||
},
|
||||
downloadZipFailedText: {
|
||||
id: 'project.download.zip-failed-text',
|
||||
defaultMessage: 'One or more files could not be downloaded. Please try again.',
|
||||
},
|
||||
})
|
||||
|
||||
function getProjectTypeForUrl(
|
||||
@@ -427,27 +278,15 @@ function updateDownloadQuery({
|
||||
platform: string | null
|
||||
}) {
|
||||
if (!props.updateRouteSelection) return
|
||||
const nextGameVersion =
|
||||
gameVersion ??
|
||||
pendingRouteSelection.value.gameVersion ??
|
||||
getStringQueryValue(route.query.version)
|
||||
const nextPlatform =
|
||||
platform ?? pendingRouteSelection.value.platform ?? getStringQueryValue(route.query.loader)
|
||||
|
||||
pendingRouteSelection.value = {
|
||||
gameVersion: nextGameVersion,
|
||||
platform: nextPlatform,
|
||||
}
|
||||
|
||||
navigateTo(
|
||||
{
|
||||
query: {
|
||||
...route.query,
|
||||
...(nextGameVersion && {
|
||||
version: nextGameVersion,
|
||||
...(gameVersion && {
|
||||
version: gameVersion,
|
||||
}),
|
||||
...(nextPlatform && {
|
||||
loader: nextPlatform,
|
||||
...(platform && {
|
||||
loader: platform,
|
||||
}),
|
||||
},
|
||||
hash: route.hash,
|
||||
@@ -459,25 +298,17 @@ function updateDownloadQuery({
|
||||
function selectGameVersion(gameVersion: string) {
|
||||
updateDownloadQuery({
|
||||
gameVersion,
|
||||
platform: null,
|
||||
platform: currentPlatform.value,
|
||||
})
|
||||
}
|
||||
|
||||
function selectPlatform(platform: string) {
|
||||
updateDownloadQuery({
|
||||
gameVersion: null,
|
||||
gameVersion: currentGameVersion.value,
|
||||
platform,
|
||||
})
|
||||
}
|
||||
|
||||
function updateProjectDownloadSelection(selection: ProjectDownloadSelection) {
|
||||
projectDownloadSelection.value = selection
|
||||
pendingRouteSelection.value = {
|
||||
gameVersion: selection.currentGameVersion,
|
||||
platform: selection.currentPlatform,
|
||||
}
|
||||
}
|
||||
|
||||
function onShow() {
|
||||
clearCloseStateResetTimeout()
|
||||
modalOpen.value = true
|
||||
@@ -506,37 +337,22 @@ async function show(
|
||||
event?: MouseEvent,
|
||||
options: ProjectDownloadModalShowOptions = {},
|
||||
): Promise<void> {
|
||||
if (!modal.value || modalOpening.value || modalOpen.value) return
|
||||
const showRequestId = ++modalShowRequestId
|
||||
modalOpening.value = true
|
||||
|
||||
try {
|
||||
await waitForCloseStateReset()
|
||||
if (!isActiveShowRequest(showRequestId)) return
|
||||
showOptions.value = {
|
||||
...getDefaultShowOptions(),
|
||||
...options,
|
||||
}
|
||||
showProjectId.value = showOptions.value.projectId ?? null
|
||||
await nextTick()
|
||||
if (!isActiveShowRequest(showRequestId)) return
|
||||
if (!(await loadProjectForModal(!!showOptions.value.projectId))) return
|
||||
if (!isActiveShowRequest(showRequestId)) return
|
||||
resetDownloadState()
|
||||
await preloadRouteSelectedDownload()
|
||||
if (!isActiveShowRequest(showRequestId)) return
|
||||
modalOpen.value = true
|
||||
modal.value.show(event)
|
||||
} finally {
|
||||
if (modalShowRequestId === showRequestId) {
|
||||
modalOpening.value = false
|
||||
}
|
||||
if (!modal.value || modalOpen.value) return
|
||||
await waitForCloseStateReset()
|
||||
if (!modal.value || modalOpen.value) return
|
||||
showOptions.value = {
|
||||
...getDefaultShowOptions(),
|
||||
...options,
|
||||
}
|
||||
showProjectId.value = showOptions.value.projectId ?? null
|
||||
await nextTick()
|
||||
if (!(await loadProjectForModal(!!showOptions.value.projectId))) return
|
||||
resetDownloadState()
|
||||
modalOpen.value = true
|
||||
modal.value.show(event)
|
||||
}
|
||||
|
||||
function hide() {
|
||||
modalShowRequestId += 1
|
||||
modalOpening.value = false
|
||||
if (!modal.value || !modalOpen.value) return
|
||||
modal.value?.hide()
|
||||
}
|
||||
@@ -545,199 +361,6 @@ function onDownload() {
|
||||
emit('download')
|
||||
}
|
||||
|
||||
async function downloadSelectedVersionZip() {
|
||||
if (downloadingActionType.value || !dependencyDownloadFilesLoaded.value) return
|
||||
|
||||
downloadingActionType.value = 'zip'
|
||||
const files = dedupeDownloadFiles([
|
||||
...selectedVersionDownloadFiles.value,
|
||||
...dependencyDownloadFiles.value,
|
||||
...recommendedDownloadFiles.value,
|
||||
])
|
||||
|
||||
try {
|
||||
const zip = new JSZip()
|
||||
const usedFilenames = new Set<string>()
|
||||
const downloadedFiles = await downloadFileBlobs(files)
|
||||
|
||||
for (const file of downloadedFiles) {
|
||||
zip.file(uniqueFilename(file.filename, usedFilenames), file.blob)
|
||||
}
|
||||
|
||||
downloadBlob(
|
||||
await zip.generateAsync({
|
||||
type: 'blob',
|
||||
mimeType: 'application/zip',
|
||||
}),
|
||||
selectedVersionZipFilename(),
|
||||
)
|
||||
emit('download')
|
||||
} catch (error) {
|
||||
console.error('Failed to download selected version files:', error)
|
||||
addNotification({
|
||||
title: formatMessage(messages.downloadZipFailedTitle),
|
||||
text: formatMessage(messages.downloadZipFailedText),
|
||||
type: 'error',
|
||||
})
|
||||
} finally {
|
||||
downloadingActionType.value = null
|
||||
}
|
||||
}
|
||||
|
||||
async function downloadFilesWithDependencies() {
|
||||
if (downloadingActionType.value || !dependencyDownloadFilesLoaded.value) return
|
||||
|
||||
downloadingActionType.value = 'dependencies'
|
||||
|
||||
try {
|
||||
const files = dedupeDownloadFiles([
|
||||
...selectedVersionDownloadFiles.value,
|
||||
...dependencyDownloadFiles.value,
|
||||
])
|
||||
|
||||
await downloadFiles(files)
|
||||
|
||||
emit('download')
|
||||
} catch (error) {
|
||||
console.error('Failed to download selected version files:', error)
|
||||
addNotification({
|
||||
title: formatMessage(messages.downloadZipFailedTitle),
|
||||
text: formatMessage(messages.downloadZipFailedText),
|
||||
type: 'error',
|
||||
})
|
||||
} finally {
|
||||
downloadingActionType.value = null
|
||||
}
|
||||
}
|
||||
|
||||
async function downloadFilesWithRecommended() {
|
||||
if (downloadingActionType.value || !dependencyDownloadFilesLoaded.value) return
|
||||
|
||||
downloadingActionType.value = 'recommended'
|
||||
|
||||
try {
|
||||
const files = dedupeDownloadFiles([
|
||||
...selectedVersionDownloadFiles.value,
|
||||
...dependencyDownloadFiles.value,
|
||||
...recommendedDownloadFiles.value,
|
||||
])
|
||||
|
||||
await downloadFiles(files)
|
||||
|
||||
emit('download')
|
||||
} catch (error) {
|
||||
console.error('Failed to download selected version files:', error)
|
||||
addNotification({
|
||||
title: formatMessage(messages.downloadZipFailedTitle),
|
||||
text: formatMessage(messages.downloadZipFailedText),
|
||||
type: 'error',
|
||||
})
|
||||
} finally {
|
||||
downloadingActionType.value = null
|
||||
}
|
||||
}
|
||||
|
||||
async function downloadFileBlobs(files: DownloadableFile[]): Promise<DownloadedFile[]> {
|
||||
return Promise.all(files.map((file) => downloadFileBlob(file)))
|
||||
}
|
||||
|
||||
async function downloadFileBlob(file: DownloadableFile): Promise<DownloadedFile> {
|
||||
const response = await fetch(file.href)
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`Failed to download ${file.filename}`)
|
||||
}
|
||||
|
||||
return {
|
||||
...file,
|
||||
blob: await response.blob(),
|
||||
}
|
||||
}
|
||||
|
||||
async function downloadFiles(files: DownloadableFile[]) {
|
||||
await Promise.all(
|
||||
files.map(async (file, index) => {
|
||||
await delay(DOWNLOAD_STAGGER_MS * index)
|
||||
downloadFileLink(file)
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
||||
function dedupeDownloadFiles(files: DownloadableFile[]) {
|
||||
const result: DownloadableFile[] = []
|
||||
const hrefs = new Set<string>()
|
||||
|
||||
for (const file of files) {
|
||||
if (hrefs.has(file.href)) continue
|
||||
hrefs.add(file.href)
|
||||
result.push(file)
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
function downloadBlob(blob: Blob, filename: string) {
|
||||
const url = URL.createObjectURL(blob)
|
||||
const link = document.createElement('a')
|
||||
|
||||
link.href = url
|
||||
link.download = filename
|
||||
document.body.appendChild(link)
|
||||
link.click()
|
||||
link.remove()
|
||||
window.setTimeout(() => URL.revokeObjectURL(url), DOWNLOAD_URL_REVOKE_MS)
|
||||
}
|
||||
|
||||
function downloadFileLink(file: DownloadableFile) {
|
||||
const link = document.createElement('a')
|
||||
link.href = file.href
|
||||
link.download = file.filename
|
||||
document.body.appendChild(link)
|
||||
link.click()
|
||||
link.remove()
|
||||
}
|
||||
|
||||
function selectedVersionZipFilename() {
|
||||
if (!project.value || !selectedVersion.value) return 'download.zip'
|
||||
|
||||
return `${sanitizeFilename(project.value.title)} ${sanitizeFilename(
|
||||
selectedVersion.value.version_number,
|
||||
)}-EXTRACT_ME.zip`
|
||||
}
|
||||
|
||||
function sanitizeFilename(value: string) {
|
||||
const sanitized = value
|
||||
.replace(/[<>:"/\\|?*]/g, '')
|
||||
.replace(/\s+/g, ' ')
|
||||
.trim()
|
||||
|
||||
return sanitized || 'download'
|
||||
}
|
||||
|
||||
function uniqueFilename(filename: string, usedFilenames: Set<string>) {
|
||||
const sanitizedFilename = sanitizeFilename(filename)
|
||||
|
||||
if (!usedFilenames.has(sanitizedFilename)) {
|
||||
usedFilenames.add(sanitizedFilename)
|
||||
return sanitizedFilename
|
||||
}
|
||||
|
||||
const extensionIndex = sanitizedFilename.lastIndexOf('.')
|
||||
const basename =
|
||||
extensionIndex > 0 ? sanitizedFilename.slice(0, extensionIndex) : sanitizedFilename
|
||||
const extension = extensionIndex > 0 ? sanitizedFilename.slice(extensionIndex) : ''
|
||||
let index = 2
|
||||
let candidate = `${basename} (${index})${extension}`
|
||||
|
||||
while (usedFilenames.has(candidate)) {
|
||||
index += 1
|
||||
candidate = `${basename} (${index})${extension}`
|
||||
}
|
||||
|
||||
usedFilenames.add(candidate)
|
||||
return candidate
|
||||
}
|
||||
|
||||
function getDefaultProjectDownloadSelection(): ProjectDownloadSelection {
|
||||
return {
|
||||
currentGameVersion: null,
|
||||
@@ -755,19 +378,6 @@ function getDefaultShowOptions(): ResolvedProjectDownloadModalShowOptions {
|
||||
}
|
||||
}
|
||||
|
||||
function getStringQueryValue(value: unknown) {
|
||||
return typeof value === 'string' ? value : null
|
||||
}
|
||||
|
||||
function shouldPreloadRouteSelectedDownload() {
|
||||
return (
|
||||
props.useRouteHash &&
|
||||
!showOptions.value.projectId &&
|
||||
!!getStringQueryValue(route.query.version) &&
|
||||
!!getStringQueryValue(route.query.loader)
|
||||
)
|
||||
}
|
||||
|
||||
function clearCloseStateResetTimeout() {
|
||||
if (!closeStateResetTimeout) return
|
||||
clearTimeout(closeStateResetTimeout)
|
||||
@@ -776,11 +386,7 @@ function clearCloseStateResetTimeout() {
|
||||
|
||||
async function waitForCloseStateReset() {
|
||||
if (!closeStateResetTimeout) return
|
||||
await delay(MODAL_CLOSE_STATE_RESET_MS)
|
||||
}
|
||||
|
||||
async function delay(ms: number) {
|
||||
await new Promise((resolve) => setTimeout(resolve, ms))
|
||||
await new Promise((resolve) => setTimeout(resolve, MODAL_CLOSE_STATE_RESET_MS))
|
||||
}
|
||||
|
||||
async function loadProjectForModal(forceRefetch: boolean) {
|
||||
@@ -791,127 +397,9 @@ async function loadProjectForModal(forceRefetch: boolean) {
|
||||
return !!data
|
||||
}
|
||||
|
||||
async function loadVersionsForModal() {
|
||||
if (!resolvedProjectId.value) return null
|
||||
versionsEnabled.value = true
|
||||
if (versionsV3.value) return versions.value
|
||||
|
||||
const data = await queryClient.ensureQueryData({
|
||||
queryKey: ['project', resolvedProjectId.value, 'versions', 'v3'],
|
||||
queryFn: () =>
|
||||
client.labrinth.versions_v3.getProjectVersions(resolvedProjectId.value!, {
|
||||
include_changelog: false,
|
||||
apiVersion: 3,
|
||||
}),
|
||||
staleTime: STALE_TIME_LONG,
|
||||
})
|
||||
|
||||
return Array.isArray(data) ? normalizeVersionsForDownload(data) : null
|
||||
}
|
||||
|
||||
async function preloadRouteSelectedDownload() {
|
||||
if (!shouldPreloadRouteSelectedDownload()) return
|
||||
|
||||
try {
|
||||
const routeVersions = await loadVersionsForModal()
|
||||
if (!routeVersions) return
|
||||
|
||||
const selection = getRouteSelectedDownloadSelection(routeVersions)
|
||||
if (!selection) return
|
||||
|
||||
await preloadDependenciesForSelection(selection)
|
||||
} catch (error) {
|
||||
debug('failed to preload selected route download', error)
|
||||
}
|
||||
}
|
||||
|
||||
function getRouteSelectedDownloadSelection(
|
||||
versionList: Labrinth.Versions.v3.Version[] = versions.value,
|
||||
): ProjectDownloadSelection | null {
|
||||
const gameVersion = initialGameVersion.value
|
||||
const platform = initialPlatform.value
|
||||
const version = getSelectedRouteVersion(gameVersion, platform, versionList)
|
||||
const primaryFile = version?.files?.find((file) => file.primary) || version?.files?.[0] || null
|
||||
|
||||
if (!gameVersion || !platform || !version || !primaryFile) return null
|
||||
|
||||
return {
|
||||
currentGameVersion: gameVersion,
|
||||
currentPlatform: platform,
|
||||
selectedVersion: version,
|
||||
selectedPrimaryFile: primaryFile,
|
||||
}
|
||||
}
|
||||
|
||||
function getSelectedRouteVersion(
|
||||
gameVersion: string | null,
|
||||
platform: string | null,
|
||||
versionList: Labrinth.Versions.v3.Version[],
|
||||
) {
|
||||
if (!gameVersion || !platform || !project.value) return null
|
||||
|
||||
const filteredVersions = versionList.filter((version) => {
|
||||
const matchesPlatform =
|
||||
project.value?.project_type === 'resourcepack' ||
|
||||
(!!platform && version.loaders.includes(platform))
|
||||
|
||||
return version.game_versions.includes(gameVersion) && matchesPlatform
|
||||
})
|
||||
|
||||
return (
|
||||
latestVersionByType(filteredVersions, 'release') ||
|
||||
latestVersionByType(filteredVersions, 'beta') ||
|
||||
latestVersionByType(filteredVersions, 'alpha') ||
|
||||
null
|
||||
)
|
||||
}
|
||||
|
||||
function normalizeVersionsForDownload(
|
||||
versionList: Labrinth.Versions.v3.Version[],
|
||||
): Labrinth.Versions.v3.Version[] {
|
||||
const isModpack =
|
||||
project.value?.actualProjectType === 'modpack' || project.value?.project_type === 'modpack'
|
||||
|
||||
return versionList.map((version) => {
|
||||
const files = Array.isArray(version.files) ? version.files : []
|
||||
const gameVersions = Array.isArray(version.game_versions) ? version.game_versions : []
|
||||
const loaders = Array.isArray(version.loaders) ? version.loaders : []
|
||||
const mrpackLoaders = Array.isArray(version.mrpack_loaders) ? version.mrpack_loaders : []
|
||||
|
||||
return {
|
||||
...version,
|
||||
files,
|
||||
game_versions: gameVersions,
|
||||
loaders: isModpack && mrpackLoaders.length ? mrpackLoaders : loaders,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function latestVersionByType(
|
||||
versionList: Labrinth.Versions.v3.Version[],
|
||||
type: Labrinth.Versions.v3.VersionChannel,
|
||||
) {
|
||||
return versionList
|
||||
.filter((version) => version.version_type === type)
|
||||
.reduce<Labrinth.Versions.v3.Version | undefined>((latest, version) => {
|
||||
if (!latest || dayjs(version.date_published).isAfter(dayjs(latest.date_published))) {
|
||||
return version
|
||||
}
|
||||
|
||||
return latest
|
||||
}, undefined)
|
||||
}
|
||||
|
||||
async function preloadDependenciesForSelection(selection: ProjectDownloadSelection) {
|
||||
await downloadModalProvider.preloadDependenciesForSelection(selection)
|
||||
}
|
||||
|
||||
function isActiveShowRequest(showRequestId: number) {
|
||||
return !unmounted && modalShowRequestId === showRequestId && !!modal.value && !modalOpen.value
|
||||
}
|
||||
|
||||
function resetDownloadState() {
|
||||
projectDownloadSelection.value = getDefaultProjectDownloadSelection()
|
||||
dependencyDownloadFiles.value = []
|
||||
downloadProjectResetKey.value += 1
|
||||
}
|
||||
|
||||
@@ -919,7 +407,6 @@ function openFromHash() {
|
||||
if (
|
||||
!props.useRouteHash ||
|
||||
!modal.value ||
|
||||
modalOpening.value ||
|
||||
modalOpen.value ||
|
||||
showProjectId.value ||
|
||||
route.hash !== '#download'
|
||||
@@ -950,14 +437,11 @@ watch(modal, openFromHash)
|
||||
watch(() => route.hash, openFromHash)
|
||||
watch(routeProjectId, () => {
|
||||
projectDownloadSelection.value = getDefaultProjectDownloadSelection()
|
||||
dependencyDownloadFiles.value = []
|
||||
downloadProjectResetKey.value += 1
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
unmounted = true
|
||||
modalShowRequestId += 1
|
||||
clearCloseStateResetTimeout()
|
||||
})
|
||||
onUnmounted(clearCloseStateResetTimeout)
|
||||
|
||||
defineExpose({ show, hide })
|
||||
</script>
|
||||
|
||||
@@ -1,294 +0,0 @@
|
||||
<template>
|
||||
<PageHeader :title="user.username" :summary="summary">
|
||||
<template #leading>
|
||||
<Avatar
|
||||
:src="user.avatar_url"
|
||||
:alt="user.username"
|
||||
:size="isModrinthUser ? '64px' : '96px'"
|
||||
:tint-by="user.username"
|
||||
circle
|
||||
/>
|
||||
</template>
|
||||
|
||||
<template v-if="isOfficialAccount || showAffiliateBadge" #badges>
|
||||
<PageHeaderBadgeItem
|
||||
v-if="isOfficialAccount"
|
||||
:icon="BadgeCheckIcon"
|
||||
:icon-props="{ fill: 'var(--color-brand-highlight)' }"
|
||||
:tooltip="formatMessage(messages.officialAccount)"
|
||||
class="border-brand-highlight bg-brand-highlight text-brand"
|
||||
>
|
||||
{{ formatMessage(messages.officialAccount) }}
|
||||
</PageHeaderBadgeItem>
|
||||
<PageHeaderBadgeItem
|
||||
v-if="showAffiliateBadge"
|
||||
:icon="AffiliateIcon"
|
||||
class="border-brand-highlight bg-brand-highlight text-brand"
|
||||
>
|
||||
{{ formatMessage(messages.affiliateLabel) }}
|
||||
</PageHeaderBadgeItem>
|
||||
</template>
|
||||
|
||||
<template v-if="$slots.summary" #summary>
|
||||
<slot name="summary" />
|
||||
</template>
|
||||
|
||||
<template v-if="!isModrinthUser" #metadata>
|
||||
<PageHeaderMetadata>
|
||||
<PageHeaderMetadataNumberItem
|
||||
:icon="BoxIcon"
|
||||
:value="projectsCount"
|
||||
:label="formatMessage(messages.profileProjectCountLabel, { count: projectsCount })"
|
||||
/>
|
||||
<PageHeaderMetadataNumberItem
|
||||
:icon="DownloadIcon"
|
||||
:value="downloads"
|
||||
:label="formatMessage(messages.profileDownloadCountLabel, { count: downloads })"
|
||||
:tooltip="downloadsTooltip"
|
||||
/>
|
||||
<PageHeaderMetadataTimeItem
|
||||
:icon="CalendarIcon"
|
||||
:date="user.created"
|
||||
:label="formatMessage(messages.profileJoinedLabel)"
|
||||
:tooltip="joinedTooltip"
|
||||
/>
|
||||
</PageHeaderMetadata>
|
||||
</template>
|
||||
|
||||
<template #actions>
|
||||
<PageHeaderActions>
|
||||
<ButtonStyled v-if="isSelf" size="large">
|
||||
<nuxt-link to="/settings/profile">
|
||||
<EditIcon />
|
||||
{{ formatMessage(commonMessages.editButton) }}
|
||||
</nuxt-link>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular size="large" type="transparent">
|
||||
<TeleportOverflowMenu
|
||||
:options="moreActions"
|
||||
:tooltip="formatMessage(commonMessages.moreOptionsButton)"
|
||||
:aria-label="formatMessage(commonMessages.moreOptionsButton)"
|
||||
>
|
||||
<MoreVerticalIcon />
|
||||
</TeleportOverflowMenu>
|
||||
</ButtonStyled>
|
||||
</PageHeaderActions>
|
||||
</template>
|
||||
</PageHeader>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import {
|
||||
AffiliateIcon,
|
||||
BadgeCheckIcon,
|
||||
BoxIcon,
|
||||
CalendarIcon,
|
||||
ChartIcon,
|
||||
ClipboardCopyIcon,
|
||||
CurrencyIcon,
|
||||
DownloadIcon,
|
||||
EditIcon,
|
||||
InfoIcon,
|
||||
MoreVerticalIcon,
|
||||
ReportIcon,
|
||||
} from '@modrinth/assets'
|
||||
import {
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
PageHeader,
|
||||
PageHeaderActions,
|
||||
PageHeaderBadgeItem,
|
||||
PageHeaderMetadata,
|
||||
PageHeaderMetadataNumberItem,
|
||||
PageHeaderMetadataTimeItem,
|
||||
TeleportOverflowMenu,
|
||||
type TeleportOverflowMenuItem,
|
||||
useFormatDateTime,
|
||||
useFormatNumber,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { computed } from 'vue'
|
||||
|
||||
const messages = defineMessages({
|
||||
affiliateLabel: {
|
||||
id: 'profile.label.affiliate',
|
||||
defaultMessage: 'Affiliate',
|
||||
},
|
||||
analyticsButton: {
|
||||
id: 'profile.button.analytics',
|
||||
defaultMessage: 'View user analytics',
|
||||
},
|
||||
billingButton: {
|
||||
id: 'profile.button.billing',
|
||||
defaultMessage: 'Manage user billing',
|
||||
},
|
||||
editRoleButton: {
|
||||
id: 'profile.button.edit-role',
|
||||
defaultMessage: 'Edit role',
|
||||
},
|
||||
infoButton: {
|
||||
id: 'profile.button.info',
|
||||
defaultMessage: 'View user details',
|
||||
},
|
||||
officialAccount: {
|
||||
id: 'profile.official-account',
|
||||
defaultMessage: 'Official Modrinth account',
|
||||
},
|
||||
profileJoinedLabel: {
|
||||
id: 'profile.label.joined',
|
||||
defaultMessage: 'Joined',
|
||||
},
|
||||
profileProjectCountLabel: {
|
||||
id: 'profile.label.project-count',
|
||||
defaultMessage: '{count, plural, one {project} other {projects}}',
|
||||
},
|
||||
profileDownloadCountLabel: {
|
||||
id: 'profile.label.download-count',
|
||||
defaultMessage: '{count, plural, one {download} other {downloads}}',
|
||||
},
|
||||
profileManageProjectsButton: {
|
||||
id: 'profile.button.manage-projects',
|
||||
defaultMessage: 'Manage projects',
|
||||
},
|
||||
removeAffiliateButton: {
|
||||
id: 'profile.button.remove-affiliate',
|
||||
defaultMessage: 'Remove as affiliate',
|
||||
},
|
||||
setAffiliateButton: {
|
||||
id: 'profile.button.set-affiliate',
|
||||
defaultMessage: 'Set as affiliate',
|
||||
},
|
||||
})
|
||||
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
user: Labrinth.Users.v3.User
|
||||
summary?: string | null
|
||||
authUser?: Labrinth.Users.v3.User | null
|
||||
isModrinthUser?: boolean
|
||||
isOfficialAccount?: boolean
|
||||
showAffiliateBadge?: boolean
|
||||
isAffiliate?: boolean
|
||||
isSelf?: boolean
|
||||
isAdmin?: boolean
|
||||
isStaff?: boolean
|
||||
projectsCount?: number
|
||||
downloads?: number
|
||||
}>(),
|
||||
{
|
||||
summary: null,
|
||||
authUser: null,
|
||||
isModrinthUser: false,
|
||||
isOfficialAccount: false,
|
||||
showAffiliateBadge: false,
|
||||
isAffiliate: false,
|
||||
isSelf: false,
|
||||
isAdmin: false,
|
||||
isStaff: false,
|
||||
projectsCount: 0,
|
||||
downloads: 0,
|
||||
},
|
||||
)
|
||||
|
||||
const emit = defineEmits<{
|
||||
manageProjects: []
|
||||
report: []
|
||||
copyId: []
|
||||
copyPermalink: []
|
||||
openBilling: []
|
||||
toggleAffiliate: []
|
||||
openInfo: []
|
||||
openAnalytics: []
|
||||
editRole: []
|
||||
}>()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const formatNumber = useFormatNumber()
|
||||
const formatDateTime = useFormatDateTime({
|
||||
timeStyle: 'short',
|
||||
dateStyle: 'long',
|
||||
})
|
||||
const downloadsTooltip = computed(() => formatNumber(props.downloads))
|
||||
const joinedTooltip = computed(() => formatDateTime(props.user.created))
|
||||
|
||||
const moreActions = computed<TeleportOverflowMenuItem[]>(() => [
|
||||
{
|
||||
id: 'manage-projects',
|
||||
label: formatMessage(messages.profileManageProjectsButton),
|
||||
icon: BoxIcon,
|
||||
action: () => emit('manageProjects'),
|
||||
shown: props.isSelf,
|
||||
},
|
||||
{
|
||||
divider: true,
|
||||
shown: props.isSelf,
|
||||
},
|
||||
{
|
||||
id: 'report',
|
||||
label: formatMessage(commonMessages.reportButton),
|
||||
icon: ReportIcon,
|
||||
action: () => emit('report'),
|
||||
color: 'red',
|
||||
shown: props.authUser?.id !== props.user.id,
|
||||
},
|
||||
{
|
||||
id: 'copy-id',
|
||||
label: formatMessage(commonMessages.copyIdButton),
|
||||
icon: ClipboardCopyIcon,
|
||||
action: () => emit('copyId'),
|
||||
},
|
||||
{
|
||||
id: 'copy-permalink',
|
||||
label: formatMessage(commonMessages.copyPermalinkButton),
|
||||
icon: ClipboardCopyIcon,
|
||||
action: () => emit('copyPermalink'),
|
||||
},
|
||||
{
|
||||
divider: true,
|
||||
shown: props.isAdmin,
|
||||
},
|
||||
{
|
||||
id: 'open-billing',
|
||||
label: formatMessage(messages.billingButton),
|
||||
icon: CurrencyIcon,
|
||||
action: () => emit('openBilling'),
|
||||
shown: props.isStaff,
|
||||
},
|
||||
{
|
||||
id: 'toggle-affiliate',
|
||||
label: props.isAffiliate
|
||||
? formatMessage(messages.removeAffiliateButton)
|
||||
: formatMessage(messages.setAffiliateButton),
|
||||
icon: AffiliateIcon,
|
||||
action: () => emit('toggleAffiliate'),
|
||||
shown: props.isAdmin,
|
||||
remainOnClick: true,
|
||||
color: props.isAffiliate ? 'red' : 'orange',
|
||||
},
|
||||
{
|
||||
id: 'open-info',
|
||||
label: formatMessage(messages.infoButton),
|
||||
icon: InfoIcon,
|
||||
action: () => emit('openInfo'),
|
||||
shown: props.isStaff,
|
||||
},
|
||||
{
|
||||
id: 'open-analytics',
|
||||
label: formatMessage(messages.analyticsButton),
|
||||
icon: ChartIcon,
|
||||
action: () => emit('openAnalytics'),
|
||||
shown: props.isAdmin,
|
||||
},
|
||||
{
|
||||
id: 'edit-role',
|
||||
label: formatMessage(messages.editRoleButton),
|
||||
icon: EditIcon,
|
||||
action: () => emit('editRole'),
|
||||
shown: props.isAdmin,
|
||||
},
|
||||
])
|
||||
</script>
|
||||
@@ -72,18 +72,6 @@
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="hidden" aria-hidden="true">
|
||||
<input
|
||||
id="create-account-consent"
|
||||
v-model="accountConsent"
|
||||
name="account_consent"
|
||||
type="checkbox"
|
||||
tabindex="-1"
|
||||
autocomplete="off"
|
||||
/>
|
||||
<label for="create-account-consent">I agree to receive account updates by email</label>
|
||||
</div>
|
||||
|
||||
<ButtonStyled color="brand">
|
||||
<button
|
||||
class="!w-full font-bold"
|
||||
@@ -109,7 +97,7 @@ import {
|
||||
StyledInput,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { computed, ref } from 'vue'
|
||||
import { computed } from 'vue'
|
||||
|
||||
import HCaptcha from '@/components/ui/auth/HCaptcha.vue'
|
||||
|
||||
@@ -121,7 +109,7 @@ interface AuthGlobals {
|
||||
interface Props {
|
||||
globals?: AuthGlobals | null
|
||||
requiresDob?: boolean
|
||||
onCompleteSignUp?: (accountConsent: boolean) => void
|
||||
onCompleteSignUp?: () => void
|
||||
onSetCaptchaRef?: ((captchaRef: unknown) => void) | undefined
|
||||
}
|
||||
|
||||
@@ -139,7 +127,6 @@ const dateOfBirthModel = defineModel<string | null>('dateOfBirth', { default: ''
|
||||
const usernameModel = defineModel<string>('username', { default: '' })
|
||||
const tokenModel = defineModel<string>('token', { default: '' })
|
||||
const subscribeModel = defineModel<boolean>('subscribe', { default: false })
|
||||
const accountConsent = ref(false)
|
||||
|
||||
const maxInputDate = computed(() => `${new Date().getFullYear()}-12-31`)
|
||||
|
||||
@@ -211,7 +198,7 @@ function onCompleteSignUpClick() {
|
||||
return
|
||||
}
|
||||
|
||||
onCompleteSignUp(accountConsent.value)
|
||||
onCompleteSignUp()
|
||||
}
|
||||
|
||||
const messages = defineMessages({
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
:description="
|
||||
formatMessage(messages.removePasskeyConfirmDescription, { name: passkeyToRemove?.name })
|
||||
"
|
||||
:proceed-label="formatMessage(messages.deletePasskeyButton)"
|
||||
:proceed-label="formatMessage(commonMessages.removeButton)"
|
||||
@proceed="removePasskey()"
|
||||
/>
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular>
|
||||
<button
|
||||
v-tooltip="formatMessage(messages.deletePasskeyButton)"
|
||||
v-tooltip="formatMessage(commonMessages.removeButton)"
|
||||
@click="
|
||||
() => {
|
||||
passkeyToRemove = passkey
|
||||
@@ -88,7 +88,7 @@
|
||||
<ButtonStyled>
|
||||
<button @click="registerPasskey()">
|
||||
<PlusIcon />
|
||||
{{ formatMessage(messages.managePasskeyAddPasskeyButton) }}
|
||||
{{ formatMessage(messages.managePasskeyAddPasskey) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
@@ -104,7 +104,7 @@
|
||||
<NewModal
|
||||
ref="addPasskeyModal"
|
||||
width="500px"
|
||||
:header="formatMessage(messages.passkeyAddModalTitle)"
|
||||
:header="formatMessage(messages.managePasskeyAddPasskey)"
|
||||
>
|
||||
<div class="flex flex-col gap-6">
|
||||
<div class="flex flex-col gap-2.5">
|
||||
@@ -133,7 +133,7 @@
|
||||
<ButtonStyled color="brand">
|
||||
<button :disabled="!pendingPasskeyName" @click="finishRegisterPasskey()">
|
||||
<PlusIcon />
|
||||
{{ formatMessage(messages.managePasskeyAddPasskeyButton) }}
|
||||
{{ formatMessage(messages.managePasskeyAddPasskey) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
@@ -189,7 +189,7 @@
|
||||
<div>
|
||||
<ButtonStyled>
|
||||
<button id="manage-passkeys" @click="showPasskeyModal">
|
||||
<UserKeyIcon /> {{ formatMessage(messages.managePasskeyButton) }}
|
||||
<UserKeyIcon /> {{ formatMessage(messages.managePasskeyTitle) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
@@ -247,16 +247,12 @@ const messages = defineMessages({
|
||||
id: 'settings.account.security.passkey.title',
|
||||
defaultMessage: 'Manage passkeys',
|
||||
},
|
||||
managePasskeyButton: {
|
||||
id: 'settings.account.security.passkey.button',
|
||||
defaultMessage: 'Manage passkeys',
|
||||
},
|
||||
managePasskeyDescription: {
|
||||
id: 'settings.account.security.passkey.description',
|
||||
defaultMessage: 'Manage your registered passkeys, or add a new one.',
|
||||
},
|
||||
managePasskeyAddPasskeyButton: {
|
||||
id: 'settings.account.security.passkey.add.button',
|
||||
managePasskeyAddPasskey: {
|
||||
id: 'settings.account.security.passkey.add',
|
||||
defaultMessage: 'Add passkey',
|
||||
},
|
||||
managePasskeyModalLoading: {
|
||||
@@ -279,10 +275,6 @@ const messages = defineMessages({
|
||||
id: 'settings.account.security.passkey.modal.never-used',
|
||||
defaultMessage: 'Never used',
|
||||
},
|
||||
passkeyAddModalTitle: {
|
||||
id: 'settings.account.security.passkey.add-modal.title',
|
||||
defaultMessage: 'Add passkey',
|
||||
},
|
||||
passkeyNameLabel: {
|
||||
id: 'settings.account.security.passkey.add-modal.name.label',
|
||||
defaultMessage: 'Name',
|
||||
@@ -300,10 +292,6 @@ const messages = defineMessages({
|
||||
id: 'settings.account.security.passkey.rename-modal.header',
|
||||
defaultMessage: 'Rename passkey',
|
||||
},
|
||||
deletePasskeyButton: {
|
||||
id: 'settings.account.security.passkey.remove.button',
|
||||
defaultMessage: 'Delete passkey',
|
||||
},
|
||||
removePasskeyConfirmTitle: {
|
||||
id: 'settings.account.security.passkey.remove.title',
|
||||
defaultMessage: 'Are you sure you want to remove this passkey?',
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
<template>
|
||||
<div class="rounded-lg border border-divider bg-bg-raised p-3">
|
||||
<div class="flex flex-wrap items-start justify-between gap-3">
|
||||
<div class="min-w-0">
|
||||
<p class="m-0 break-words font-semibold text-contrast">
|
||||
{{ trace.project_name }}
|
||||
</p>
|
||||
<p class="m-0 mt-1 flex flex-wrap items-center gap-1 text-sm text-secondary">
|
||||
<span class="break-all">{{ trace.version_number }}</span>
|
||||
<ChevronRightIcon class="size-4 shrink-0" aria-hidden="true" />
|
||||
<span class="break-all">{{ decodeTracePath(trace.file_name) }}</span>
|
||||
<template v-if="trace.jar">
|
||||
<ChevronRightIcon class="size-4 shrink-0" aria-hidden="true" />
|
||||
<span class="break-all">{{ decodeTracePath(trace.jar) }}</span>
|
||||
</template>
|
||||
</p>
|
||||
</div>
|
||||
<div class="flex flex-wrap items-center gap-2">
|
||||
<template v-if="trace.local_status !== 'pending'">
|
||||
<span class="text-sm text-secondary">Local</span>
|
||||
<Badge :type="trace.local_status" />
|
||||
</template>
|
||||
<ButtonStyled>
|
||||
<NuxtLink :to="localTraceLink">
|
||||
<ExternalIcon aria-hidden="true" />
|
||||
View
|
||||
</NuxtLink>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { ChevronRightIcon, ExternalIcon } from '@modrinth/assets'
|
||||
import { Badge, ButtonStyled } from '@modrinth/ui'
|
||||
|
||||
const props = defineProps<{
|
||||
trace: Labrinth.TechReview.Internal.GlobalIssueDetailTrace
|
||||
}>()
|
||||
|
||||
const localTraceLink = computed(
|
||||
() =>
|
||||
`/moderation/technical-review/${props.trace.project_id}?detail=${encodeURIComponent(
|
||||
props.trace.detail_id,
|
||||
)}`,
|
||||
)
|
||||
|
||||
function decodeTracePath(path: string): string {
|
||||
try {
|
||||
return decodeURIComponent(path)
|
||||
} catch {
|
||||
return path
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,267 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<form class="flex flex-col gap-2 sm:flex-row" @submit.prevent="executeSearch">
|
||||
<StyledInput
|
||||
v-model="query"
|
||||
:icon="SearchIcon"
|
||||
type="text"
|
||||
autocomplete="off"
|
||||
placeholder="Search global trace keys..."
|
||||
clearable
|
||||
wrapper-class="flex-1 w-full"
|
||||
/>
|
||||
<ButtonStyled color="brand">
|
||||
<button type="submit" :disabled="isLoading">
|
||||
<SearchIcon aria-hidden="true" />
|
||||
Search
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</form>
|
||||
|
||||
<div
|
||||
v-if="!isLoading && !loadError && total > 0"
|
||||
class="mt-4 flex flex-wrap items-center justify-between gap-3"
|
||||
>
|
||||
<p class="m-0 text-sm text-secondary">Showing {{ pageStart }}-{{ pageEnd }} of {{ total }}</p>
|
||||
<Pagination :page="currentPage" :count="pageCount" @switch-page="switchPage" />
|
||||
</div>
|
||||
|
||||
<EmptyState
|
||||
v-if="isLoading"
|
||||
type="no-search-result"
|
||||
heading="Loading global detail traces..."
|
||||
/>
|
||||
<EmptyState
|
||||
v-else-if="loadError"
|
||||
type="no-search-result"
|
||||
heading="Failed to load global detail traces"
|
||||
/>
|
||||
<div v-else-if="traces.length > 0" class="mt-4 flex flex-col gap-3">
|
||||
<article
|
||||
v-for="trace in traces"
|
||||
:key="trace.detail_key"
|
||||
class="universal-card flex flex-col gap-3"
|
||||
>
|
||||
<div class="grid grid-cols-[minmax(0,1fr)_auto] items-start gap-3">
|
||||
<div class="min-w-0">
|
||||
<div class="flex min-w-0 flex-wrap items-center gap-2">
|
||||
<HashIcon class="shrink-0 text-secondary" aria-hidden="true" />
|
||||
<h2 class="m-0 min-w-0 text-lg font-semibold text-contrast">
|
||||
Trace
|
||||
<span class="break-all font-mono text-base">{{ trace.detail_key }}</span>
|
||||
</h2>
|
||||
<span
|
||||
v-if="getLatestLocalTrace(trace)"
|
||||
class="rounded-full border border-solid px-2.5 py-1 text-sm font-medium capitalize"
|
||||
:class="getSeverityBadgeColor(getLatestLocalTrace(trace)?.severity)"
|
||||
>
|
||||
{{ getLatestLocalTrace(trace)?.severity }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="getLatestLocalTrace(trace)" class="mt-1 flex flex-wrap gap-x-3 text-sm">
|
||||
<p class="m-0 break-all text-secondary">
|
||||
<span class="font-semibold text-contrast">Issue</span>
|
||||
{{ getLatestLocalTrace(trace)?.issue_type }}
|
||||
</p>
|
||||
<p class="m-0 break-all text-secondary">
|
||||
<span class="font-semibold text-contrast">Path</span>
|
||||
{{ decodeTracePath(getLatestLocalTrace(trace)?.file_path ?? '') }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex shrink-0 flex-nowrap items-center gap-2">
|
||||
<Badge :type="trace.verdict" />
|
||||
<ButtonStyled color="red">
|
||||
<button
|
||||
:disabled="removingTraceKeys.has(trace.detail_key)"
|
||||
@click="removeGlobalTrace(trace)"
|
||||
>
|
||||
<TrashIcon aria-hidden="true" />
|
||||
Remove
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="getPreviewLocalTraces(trace).length > 0" class="flex flex-col gap-2">
|
||||
<div class="flex flex-wrap items-center justify-between gap-2">
|
||||
<p class="m-0 text-sm text-secondary">
|
||||
Showing {{ getPreviewLocalTraces(trace).length }} of
|
||||
{{ formatTraceCount(getVisibleLocalTraceTotal(trace)) }}
|
||||
</p>
|
||||
<ButtonStyled
|
||||
v-if="getVisibleLocalTraceTotal(trace) > getPreviewLocalTraces(trace).length"
|
||||
>
|
||||
<NuxtLink :to="getGlobalTraceLink(trace)">
|
||||
<ListIcon aria-hidden="true" />
|
||||
View all
|
||||
</NuxtLink>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
<GlobalDetailLocalTraceCard
|
||||
v-for="localTrace in getPreviewLocalTraces(trace)"
|
||||
:key="localTrace.detail_id"
|
||||
:trace="localTrace"
|
||||
/>
|
||||
</div>
|
||||
<EmptyState
|
||||
v-else
|
||||
type="no-search-result"
|
||||
heading="No local traces currently match this key"
|
||||
/>
|
||||
</article>
|
||||
</div>
|
||||
<EmptyState v-else type="no-search-result" heading="No global detail traces found" />
|
||||
|
||||
<div v-if="!isLoading && !loadError && total > 0" class="mt-4 flex justify-end">
|
||||
<Pagination :page="currentPage" :count="pageCount" @switch-page="switchPage" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { HashIcon, ListIcon, SearchIcon, TrashIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Badge,
|
||||
ButtonStyled,
|
||||
EmptyState,
|
||||
injectModrinthClient,
|
||||
injectNotificationManager,
|
||||
Pagination,
|
||||
StyledInput,
|
||||
} from '@modrinth/ui'
|
||||
|
||||
import GlobalDetailLocalTraceCard from '~/components/ui/moderation/GlobalDetailLocalTraceCard.vue'
|
||||
|
||||
const client = injectModrinthClient()
|
||||
const { addNotification } = injectNotificationManager()
|
||||
const query = ref('')
|
||||
const activeQuery = ref<string | null>(null)
|
||||
const isLoading = ref(false)
|
||||
const loadError = ref(false)
|
||||
const currentPage = ref(1)
|
||||
const itemsPerPage = 20
|
||||
const localTracePreviewLimit = 3
|
||||
const total = ref(0)
|
||||
const traces = ref<Labrinth.TechReview.Internal.GlobalIssueDetail[]>([])
|
||||
const removingTraceKeys = reactive<Set<string>>(new Set())
|
||||
|
||||
const pageCount = computed(() => Math.max(Math.ceil(total.value / itemsPerPage), 1))
|
||||
const pageStart = computed(() =>
|
||||
total.value === 0 ? 0 : (currentPage.value - 1) * itemsPerPage + 1,
|
||||
)
|
||||
const pageEnd = computed(() => Math.min(currentPage.value * itemsPerPage, total.value))
|
||||
|
||||
function formatTraceCount(count: number) {
|
||||
return `${count} local ${count === 1 ? 'trace' : 'traces'}`
|
||||
}
|
||||
|
||||
function getPreviewLocalTraces(trace: Labrinth.TechReview.Internal.GlobalIssueDetail) {
|
||||
return trace.local_traces.slice(0, localTracePreviewLimit)
|
||||
}
|
||||
|
||||
function getLatestLocalTrace(trace: Labrinth.TechReview.Internal.GlobalIssueDetail) {
|
||||
return trace.local_traces.at(-1)
|
||||
}
|
||||
|
||||
function decodeTracePath(path: string): string {
|
||||
try {
|
||||
return decodeURIComponent(path)
|
||||
} catch {
|
||||
return path
|
||||
}
|
||||
}
|
||||
|
||||
function getSeverityBadgeColor(
|
||||
severity: Labrinth.TechReview.Internal.DelphiSeverity | undefined,
|
||||
): string {
|
||||
switch (severity) {
|
||||
case 'severe':
|
||||
return 'border-red/60 bg-highlight-red text-red'
|
||||
case 'high':
|
||||
return 'border-orange/60 bg-highlight-orange text-orange'
|
||||
case 'medium':
|
||||
return 'border-green/60 bg-highlight-green text-green'
|
||||
case 'low':
|
||||
default:
|
||||
return 'border-blue/60 bg-highlight-blue text-blue'
|
||||
}
|
||||
}
|
||||
|
||||
function getVisibleLocalTraceTotal(trace: Labrinth.TechReview.Internal.GlobalIssueDetail) {
|
||||
return Math.max(trace.local_trace_count, trace.local_traces.length)
|
||||
}
|
||||
|
||||
function getGlobalTraceLink(trace: Labrinth.TechReview.Internal.GlobalIssueDetail) {
|
||||
return `/moderation/global-traces/${encodeURIComponent(trace.detail_key)}`
|
||||
}
|
||||
|
||||
async function loadTraces() {
|
||||
isLoading.value = true
|
||||
loadError.value = false
|
||||
|
||||
try {
|
||||
const response = await client.labrinth.tech_review_internal.searchGlobalIssueDetails({
|
||||
query: activeQuery.value,
|
||||
limit: itemsPerPage,
|
||||
page: currentPage.value - 1,
|
||||
})
|
||||
|
||||
traces.value = response.traces
|
||||
total.value = response.total
|
||||
} catch (error) {
|
||||
console.error('Failed to load global detail traces', error)
|
||||
traces.value = []
|
||||
total.value = 0
|
||||
loadError.value = true
|
||||
} finally {
|
||||
isLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
async function executeSearch() {
|
||||
activeQuery.value = query.value.trim() || null
|
||||
currentPage.value = 1
|
||||
await loadTraces()
|
||||
}
|
||||
|
||||
async function switchPage(page: number) {
|
||||
currentPage.value = page
|
||||
await loadTraces()
|
||||
}
|
||||
|
||||
async function removeGlobalTrace(trace: Labrinth.TechReview.Internal.GlobalIssueDetail) {
|
||||
if (removingTraceKeys.has(trace.detail_key)) return
|
||||
|
||||
removingTraceKeys.add(trace.detail_key)
|
||||
try {
|
||||
await client.labrinth.tech_review_internal.updateGlobalIssueDetails([
|
||||
{ detail_key: trace.detail_key, verdict: 'pending' },
|
||||
])
|
||||
|
||||
addNotification({
|
||||
type: 'success',
|
||||
title: 'Global trace removed',
|
||||
text: 'The global verdict for this trace key has been removed.',
|
||||
})
|
||||
|
||||
if (traces.value.length === 1 && currentPage.value > 1) {
|
||||
currentPage.value--
|
||||
}
|
||||
|
||||
await loadTraces()
|
||||
} catch (error) {
|
||||
console.error('Failed to remove global trace', error)
|
||||
addNotification({
|
||||
type: 'error',
|
||||
title: 'Failed to remove global trace',
|
||||
text: 'An error occurred while removing the global trace verdict.',
|
||||
})
|
||||
} finally {
|
||||
removingTraceKeys.delete(trace.detail_key)
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(loadTraces)
|
||||
</script>
|
||||
@@ -37,22 +37,21 @@
|
||||
>
|
||||
{{ formatRelativeTime(report.created) }}
|
||||
</span>
|
||||
<div class="flex items-center gap-2">
|
||||
<ButtonStyled circular>
|
||||
<button v-tooltip="'Copy ID'" @click="copyId">
|
||||
<ButtonStyled circular>
|
||||
<OverflowMenu :options="quickActions">
|
||||
<template #default>
|
||||
<EllipsisVerticalIcon class="size-4" />
|
||||
</template>
|
||||
<template #copy-id>
|
||||
<ClipboardCopyIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular>
|
||||
<a
|
||||
v-tooltip="'Open in new tab'"
|
||||
:href="`/moderation/reports/${props.report.id}`"
|
||||
target="_blank"
|
||||
>
|
||||
<ExternalIcon />
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
<span class="hidden sm:inline">Copy ID</span>
|
||||
</template>
|
||||
<template #copy-link>
|
||||
<LinkIcon />
|
||||
<span class="hidden sm:inline">Copy link</span>
|
||||
</template>
|
||||
</OverflowMenu>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -184,7 +183,12 @@
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { CheckCircleIcon, ClipboardCopyIcon, ExternalIcon } from '@modrinth/assets'
|
||||
import {
|
||||
CheckCircleIcon,
|
||||
ClipboardCopyIcon,
|
||||
EllipsisVerticalIcon,
|
||||
LinkIcon,
|
||||
} from '@modrinth/assets'
|
||||
import { type ExtendedReport, reportQuickReplies } from '@modrinth/moderation'
|
||||
import {
|
||||
Avatar,
|
||||
@@ -192,6 +196,8 @@ import {
|
||||
CollapsibleRegion,
|
||||
getProjectTypeIcon,
|
||||
injectNotificationManager,
|
||||
OverflowMenu,
|
||||
type OverflowMenuOption,
|
||||
useFormatDateTime,
|
||||
useRelativeTime,
|
||||
} from '@modrinth/ui'
|
||||
@@ -322,6 +328,35 @@ function updateThread(newThread: any) {
|
||||
}
|
||||
}
|
||||
|
||||
const quickActions: OverflowMenuOption[] = [
|
||||
{
|
||||
id: 'copy-link',
|
||||
action: () => {
|
||||
const base = window.location.origin
|
||||
const reportUrl = `${base}/moderation/reports/${props.report.id}`
|
||||
navigator.clipboard.writeText(reportUrl).then(() => {
|
||||
addNotification({
|
||||
type: 'success',
|
||||
title: 'Report link copied',
|
||||
text: 'The link to this report has been copied to your clipboard.',
|
||||
})
|
||||
})
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'copy-id',
|
||||
action: () => {
|
||||
navigator.clipboard.writeText(props.report.id).then(() => {
|
||||
addNotification({
|
||||
type: 'success',
|
||||
title: 'Report ID copied',
|
||||
text: 'The ID of this report has been copied to your clipboard.',
|
||||
})
|
||||
})
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
const reportItemAvatarUrl = computed(() => {
|
||||
switch (props.report.item_type) {
|
||||
case 'project':
|
||||
@@ -360,14 +395,4 @@ const formattedReportType = computed(() => {
|
||||
const words = reportType.includes('-') ? reportType.split('-') : reportType.split(' ')
|
||||
return words.map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(' ')
|
||||
})
|
||||
|
||||
function copyId() {
|
||||
navigator.clipboard.writeText(props.report.id).then(() => {
|
||||
addNotification({
|
||||
type: 'success',
|
||||
title: 'Report ID copied',
|
||||
text: 'The ID of this report has been copied to your clipboard.',
|
||||
})
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,116 +0,0 @@
|
||||
<template>
|
||||
<div class="flex flex-row items-center gap-2">
|
||||
<kbd
|
||||
v-for="(definition, index) in definitions"
|
||||
:key="`keybind-${index}`"
|
||||
ref="keybinding"
|
||||
class="cursor-pointer border-2 !text-lg font-bold"
|
||||
:class="{
|
||||
editing: editing === index,
|
||||
}"
|
||||
@click="startEditing(index)"
|
||||
>
|
||||
{{ toDisplay(definition) }}
|
||||
</kbd>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { type KeybindDefinition, toKeybindDefinition } from '@modrinth/moderation'
|
||||
import { onUnmounted } from 'vue'
|
||||
|
||||
const props = defineProps<{
|
||||
definitions: KeybindDefinition[]
|
||||
onChange: (definitions: KeybindDefinition[]) => void
|
||||
}>()
|
||||
|
||||
const keybinding = useTemplateRef('keybinding')
|
||||
const definitions = ref(JSON.parse(JSON.stringify(props.definitions)))
|
||||
const editing = ref(-1)
|
||||
|
||||
function startEditing(index: number) {
|
||||
if (editing.value === index) {
|
||||
stopEditing()
|
||||
} else {
|
||||
editing.value = index
|
||||
window.addEventListener('keyup', handleKeybinds)
|
||||
window.addEventListener('click', handleMouse)
|
||||
}
|
||||
}
|
||||
|
||||
function stopEditing() {
|
||||
console.log('stop editing')
|
||||
|
||||
editing.value = -1
|
||||
window.removeEventListener('keyup', handleKeybinds)
|
||||
window.removeEventListener('click', handleMouse)
|
||||
}
|
||||
|
||||
function handleMouse(event: MouseEvent) {
|
||||
if (keybinding.value && event.target && editing.value != -1) {
|
||||
const editingRef = keybinding.value[editing.value]
|
||||
if (editingRef === event.target || editingRef.contains(event.target)) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
stopEditing()
|
||||
}
|
||||
|
||||
function handleKeybinds(event: KeyboardEvent) {
|
||||
definitions.value[editing.value] = toKeybindDefinition(event)
|
||||
props.onChange(definitions.value)
|
||||
stopEditing()
|
||||
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
}
|
||||
|
||||
function toDisplay(definition: KeybindDefinition): string {
|
||||
const keys = []
|
||||
|
||||
if (definition.ctrl || definition.meta) {
|
||||
keys.push(isMac() ? 'CMD' : 'CTRL')
|
||||
}
|
||||
if (definition.shift) keys.push('SHIFT')
|
||||
if (definition.alt) keys.push('ALT')
|
||||
|
||||
const mainKey = definition.key
|
||||
.toUpperCase()
|
||||
.replace('ARROWLEFT', '←')
|
||||
.replace('ARROWRIGHT', '→')
|
||||
.replace('ARROWUP', '↑')
|
||||
.replace('ARROWDOWN', '↓')
|
||||
.replace('ENTER', '↵')
|
||||
.replace('ESCAPE', 'ESC')
|
||||
|
||||
keys.push(mainKey)
|
||||
|
||||
return keys.join(' + ')
|
||||
}
|
||||
|
||||
function isMac() {
|
||||
return navigator.platform.toUpperCase().includes('MAC')
|
||||
}
|
||||
|
||||
onUnmounted(stopEditing)
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.editing {
|
||||
animation: blink 1s step-end infinite;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
0%,
|
||||
100% {
|
||||
border-color: var(--color-red);
|
||||
box-shadow: 0 0 10px 1px var(--color-red);
|
||||
}
|
||||
|
||||
50% {
|
||||
border-color: transparent;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,32 +1,26 @@
|
||||
<template>
|
||||
<NewModal ref="modal" header="Moderation shortcuts" :closable="true">
|
||||
<div id="moderation-checklist-keybinds-modal">
|
||||
<div>
|
||||
<div class="keybinds-sections">
|
||||
<div class="grid grid-cols-2 gap-x-12 gap-y-3">
|
||||
<div
|
||||
v-for="[id, keybind] in Object.entries(keybinds)"
|
||||
:key="id"
|
||||
class="keybind-item flex flex-wrap items-center justify-between gap-4"
|
||||
v-for="keybind in keybinds"
|
||||
:key="keybind.id"
|
||||
class="keybind-item flex items-center justify-between gap-4"
|
||||
:class="{
|
||||
'col-span-2':
|
||||
Object.keys(keybinds).length % 2 === 1 &&
|
||||
Object.keys(keybinds)[Object.keys(keybinds).length - 1] === id,
|
||||
'col-span-2': keybinds.length % 2 === 1 && keybinds[keybinds.length - 1] === keybind,
|
||||
}"
|
||||
>
|
||||
<span class="text-sm text-secondary">{{ keybind.description }}</span>
|
||||
<ChecklistKeybind
|
||||
:definitions="
|
||||
(!Array.isArray(keybind.keybind) ? [keybind.keybind] : keybind.keybind).map(
|
||||
normalizeKeybind,
|
||||
)
|
||||
"
|
||||
:on-change="
|
||||
(definitions) => {
|
||||
keybinds[id].keybind = definitions
|
||||
saveModerationKeybinds()
|
||||
}
|
||||
"
|
||||
/>
|
||||
<div class="flex items-center gap-1">
|
||||
<kbd
|
||||
v-for="(key, index) in parseKeybindDisplay(keybind.keybind)"
|
||||
:key="`${keybind.id}-key-${index}`"
|
||||
class="keybind-key"
|
||||
>
|
||||
{{ key }}
|
||||
</kbd>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -35,15 +29,43 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { normalizeKeybind } from '@modrinth/moderation'
|
||||
import { type KeybindListener, keybinds, normalizeKeybind } from '@modrinth/moderation'
|
||||
import NewModal from '@modrinth/ui/src/components/modal/NewModal.vue'
|
||||
import { ref } from 'vue'
|
||||
|
||||
import { saveModerationKeybinds } from '#imports'
|
||||
import ChecklistKeybind from '~/components/ui/moderation/checklist/ChecklistKeybind.vue'
|
||||
|
||||
const modal = ref<InstanceType<typeof NewModal>>()
|
||||
const keybinds = useModerationKeybinds()
|
||||
|
||||
function parseKeybindDisplay(keybind: KeybindListener['keybind']): string[] {
|
||||
const keybinds = Array.isArray(keybind) ? keybind : [keybind]
|
||||
const normalized = keybinds[0]
|
||||
const def = normalizeKeybind(normalized)
|
||||
|
||||
const keys = []
|
||||
|
||||
if (def.ctrl || def.meta) {
|
||||
keys.push(isMac() ? 'CMD' : 'CTRL')
|
||||
}
|
||||
if (def.shift) keys.push('SHIFT')
|
||||
if (def.alt) keys.push('ALT')
|
||||
|
||||
const mainKey = def.key
|
||||
.replace('ArrowLeft', '←')
|
||||
.replace('ArrowRight', '→')
|
||||
.replace('ArrowUp', '↑')
|
||||
.replace('ArrowDown', '↓')
|
||||
.replace('Enter', '↵')
|
||||
.replace('Space', 'SPACE')
|
||||
.replace('Escape', 'ESC')
|
||||
.toUpperCase()
|
||||
|
||||
keys.push(mainKey)
|
||||
|
||||
return keys
|
||||
}
|
||||
|
||||
function isMac() {
|
||||
return navigator.platform.toUpperCase().includes('MAC')
|
||||
}
|
||||
|
||||
function show(event?: MouseEvent) {
|
||||
modal.value?.show(event)
|
||||
@@ -60,6 +82,29 @@ defineExpose({
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.keybind-key {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-width: 2rem;
|
||||
padding: 0.25rem 0.5rem;
|
||||
background-color: var(--color-bg);
|
||||
border: 1px solid var(--color-divider);
|
||||
border-radius: 0.375rem;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
color: var(--color-contrast);
|
||||
|
||||
+ .keybind-key {
|
||||
margin-left: 0.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.keybind-item {
|
||||
min-height: 2rem;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.keybinds-sections {
|
||||
.grid {
|
||||
|
||||
@@ -478,6 +478,7 @@ import {
|
||||
handleKeybind,
|
||||
initializeActionState,
|
||||
kebabToTitleCase,
|
||||
keybinds,
|
||||
type MultiSelectChipsAction,
|
||||
processMessage,
|
||||
type Stage,
|
||||
@@ -532,7 +533,6 @@ import ModpackPermissionsFlow from './ModpackPermissionsFlow.vue'
|
||||
const notifications = injectNotificationManager()
|
||||
const { addNotification } = notifications
|
||||
const debug = useDebugLogger('ModerationChecklist')
|
||||
const keybinds = useModerationKeybinds()
|
||||
|
||||
const keybindsModal = ref<InstanceType<typeof KeybindsModal>>()
|
||||
const takeOverModal = ref<InstanceType<typeof ConfirmModal>>()
|
||||
@@ -1207,29 +1207,6 @@ function handleKeybinds(event: KeyboardEvent) {
|
||||
tryWithhold: () => sendMessage('withheld'),
|
||||
tryEditMessage: goBackToStages,
|
||||
|
||||
tryCopyLink: async (permalink: boolean, relative: boolean, page: boolean) => {
|
||||
let url = ``
|
||||
if (relative) {
|
||||
url += `${globalThis.location.origin}`
|
||||
} else {
|
||||
url += `https://modrinth.com`
|
||||
}
|
||||
|
||||
if (permalink) {
|
||||
url += `/project/${projectV2.value.id}`
|
||||
} else {
|
||||
url += `/${projectV2.value.project_type}/${projectV2.value.slug}`
|
||||
}
|
||||
|
||||
if (page) {
|
||||
url += `/${globalThis.location.pathname.split('/').slice(3).join('/')}`
|
||||
}
|
||||
|
||||
await navigator.clipboard.writeText(url)
|
||||
},
|
||||
|
||||
tryCopyId: async () => await navigator.clipboard.writeText(projectV2.value.id),
|
||||
|
||||
tryToggleAction: (actionIndex: number) => {
|
||||
const action = visibleActions.value[actionIndex]
|
||||
if (action) {
|
||||
@@ -1289,7 +1266,7 @@ function handleKeybinds(event: KeyboardEvent) {
|
||||
},
|
||||
},
|
||||
},
|
||||
Object.values(keybinds.value),
|
||||
keybinds,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -54,21 +54,15 @@
|
||||
class="message__icon backed-svg circle moderation-color"
|
||||
:class="{
|
||||
raised: raised,
|
||||
'system-message-icon': [
|
||||
'tech_review_entered',
|
||||
'tech_review_exited',
|
||||
'tech_review_exit_file_deleted',
|
||||
].includes(message.body.type),
|
||||
'system-message-icon': ['tech_review_entered', 'tech_review_exit_file_deleted'].includes(
|
||||
message.body.type,
|
||||
),
|
||||
}"
|
||||
>
|
||||
<ScaleIcon />
|
||||
</div>
|
||||
<span
|
||||
v-if="
|
||||
!['tech_review_entered', 'tech_review_exited', 'tech_review_exit_file_deleted'].includes(
|
||||
message.body.type,
|
||||
)
|
||||
"
|
||||
v-if="!['tech_review_entered', 'tech_review_exit_file_deleted'].includes(message.body.type)"
|
||||
class="message__author moderation-color"
|
||||
>
|
||||
Moderator
|
||||
@@ -106,9 +100,6 @@
|
||||
<span v-else-if="message.body.type === 'tech_review_entered'">
|
||||
The project has entered the technical review queue.
|
||||
</span>
|
||||
<span v-else-if="message.body.type === 'tech_review_exited'">
|
||||
The project has left the technical review queue as all pending traces have been resolved.
|
||||
</span>
|
||||
<span v-else-if="message.body.type === 'tech_review_exit_file_deleted'">
|
||||
The project has left the technical review queue as all files pending review were deleted by
|
||||
the user.
|
||||
@@ -223,12 +214,9 @@ const timeSincePosted = ref(formatRelativeTime(props.message.created))
|
||||
const isPrivateMessage = computed(() => {
|
||||
return (
|
||||
props.message.body.private ||
|
||||
[
|
||||
'tech_review',
|
||||
'tech_review_entered',
|
||||
'tech_review_exited',
|
||||
'tech_review_exit_file_deleted',
|
||||
].includes(props.message.body.type)
|
||||
['tech_review', 'tech_review_entered', 'tech_review_exit_file_deleted'].includes(
|
||||
props.message.body.type,
|
||||
)
|
||||
)
|
||||
})
|
||||
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
import {
|
||||
type KeybindDefinition,
|
||||
type KeybindListener,
|
||||
keybinds,
|
||||
normalizeKeybind,
|
||||
} from '@modrinth/moderation'
|
||||
|
||||
import type { CookieOptions } from '#app'
|
||||
|
||||
const moderationKeybindsId = 'moderation-keybinds'
|
||||
|
||||
type StoredKeybinds = { [id: string]: KeybindDefinition[] }
|
||||
type PartialStoredKeybinds = Partial<StoredKeybinds>
|
||||
|
||||
const getCookieOptions = () =>
|
||||
({
|
||||
maxAge: 60 * 60 * 24 * 365 * 10,
|
||||
sameSite: 'lax',
|
||||
secure: useRuntimeConfig().public.cookieSecure,
|
||||
httpOnly: false,
|
||||
path: '/',
|
||||
}) satisfies CookieOptions<PartialStoredKeybinds>
|
||||
|
||||
export const useModerationKeybinds = () =>
|
||||
useState<{ [id: string]: KeybindListener }>(moderationKeybindsId, () => {
|
||||
const storedKeybinds = useCookie<PartialStoredKeybinds>(
|
||||
moderationKeybindsId,
|
||||
getCookieOptions(),
|
||||
)
|
||||
|
||||
if (!storedKeybinds.value) {
|
||||
storedKeybinds.value = {}
|
||||
}
|
||||
|
||||
const output: { [id: string]: KeybindListener } = {}
|
||||
|
||||
for (const [id, keybind] of Object.entries(keybinds)) {
|
||||
const definitions = storedKeybinds.value[id]
|
||||
output[id] = {
|
||||
keybind: definitions !== undefined ? definitions : keybind.keybind,
|
||||
description: keybind.description,
|
||||
enabled: keybind.enabled,
|
||||
action: keybind.action,
|
||||
}
|
||||
}
|
||||
|
||||
return output
|
||||
})
|
||||
|
||||
export const saveModerationKeybinds = () => {
|
||||
const keybinds = useModerationKeybinds()
|
||||
const cookie = useCookie<PartialStoredKeybinds>(moderationKeybindsId, getCookieOptions())
|
||||
|
||||
const storedKeybinds: PartialStoredKeybinds = {}
|
||||
for (const [id, keybind] of Object.entries(keybinds.value)) {
|
||||
storedKeybinds[id] = (Array.isArray(keybind.keybind) ? keybind.keybind : [keybind.keybind]).map(
|
||||
normalizeKeybind,
|
||||
)
|
||||
}
|
||||
cookie.value = storedKeybinds
|
||||
}
|
||||
@@ -443,23 +443,20 @@
|
||||
:options="[
|
||||
{
|
||||
id: 'new-project',
|
||||
action: (event) => requireVerifiedEmail(() => $refs.modal_creation.show(event)),
|
||||
action: (event) => $refs.modal_creation.show(event),
|
||||
},
|
||||
{
|
||||
id: 'new-server-project',
|
||||
action: (event) =>
|
||||
requireVerifiedEmail(() => $refs.modal_creation.show(event, { type: 'server' })),
|
||||
action: (event) => $refs.modal_creation.show(event, { type: 'server' }),
|
||||
},
|
||||
{
|
||||
id: 'new-collection',
|
||||
action: (event) =>
|
||||
requireVerifiedEmail(() => $refs.modal_collection_creation.show(event)),
|
||||
action: (event) => $refs.modal_collection_creation.show(event),
|
||||
},
|
||||
{ divider: true },
|
||||
{
|
||||
id: 'new-organization',
|
||||
action: (event) =>
|
||||
requireVerifiedEmail(() => $refs.modal_organization_creation.show(event)),
|
||||
action: (event) => $refs.modal_organization_creation.show(event),
|
||||
},
|
||||
]"
|
||||
>
|
||||
@@ -780,7 +777,6 @@ import {
|
||||
createHostingIntercomIdentityKey,
|
||||
defineMessages,
|
||||
injectModrinthClient,
|
||||
injectNotificationManager,
|
||||
injectPageContext,
|
||||
OverflowMenu,
|
||||
providePageContext,
|
||||
@@ -818,7 +814,6 @@ const generatedState = useGeneratedState()
|
||||
const country = useUserCountry()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
const { addNotification } = injectNotificationManager()
|
||||
|
||||
const auth = await useAuth()
|
||||
const user = await useUser()
|
||||
@@ -911,19 +906,6 @@ async function fetchIntercomToken() {
|
||||
})
|
||||
}
|
||||
|
||||
function requireVerifiedEmail(action) {
|
||||
if (!auth.value.user?.email_verified) {
|
||||
addNotification({
|
||||
title: formatMessage(messages.emailVerificationRequired),
|
||||
text: formatMessage(messages.verifyEmailBeforePublishing),
|
||||
type: 'error',
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
action()
|
||||
}
|
||||
|
||||
const navMenuMessages = defineMessages({
|
||||
home: {
|
||||
id: 'layout.nav.home',
|
||||
@@ -980,14 +962,6 @@ const messages = defineMessages({
|
||||
id: 'layout.action.publish',
|
||||
defaultMessage: 'Publish',
|
||||
},
|
||||
emailVerificationRequired: {
|
||||
id: 'layout.publish.email-verification-required.title',
|
||||
defaultMessage: 'Email verification required',
|
||||
},
|
||||
verifyEmailBeforePublishing: {
|
||||
id: 'layout.publish.email-verification-required.description',
|
||||
defaultMessage: 'You must verify your email before publishing on Modrinth.',
|
||||
},
|
||||
reviewProjects: {
|
||||
id: 'layout.action.review-projects',
|
||||
defaultMessage: 'Project review',
|
||||
|
||||
@@ -23,15 +23,6 @@
|
||||
"analytics.breakdown.country": {
|
||||
"message": "الدولة"
|
||||
},
|
||||
"analytics.breakdown.dependent-on": {
|
||||
"message": "يعتمد على"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-download": {
|
||||
"message": "مشروع تابع"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-type": {
|
||||
"message": "نوع المشروع التابع"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "سبب التنزيل"
|
||||
},
|
||||
@@ -41,21 +32,6 @@
|
||||
"analytics.breakdown.game-version": {
|
||||
"message": "إصدار اللُعبة"
|
||||
},
|
||||
"analytics.breakdown.generic": {
|
||||
"message": "التفاصيل"
|
||||
},
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "المحمل"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "عضو"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "تحقيق الدخل"
|
||||
},
|
||||
"analytics.breakdown.none.selected": {
|
||||
"message": "لا توجد أعطال"
|
||||
},
|
||||
"analytics.breakdown.project": {
|
||||
"message": "المشروع"
|
||||
},
|
||||
@@ -65,246 +41,24 @@
|
||||
"analytics.breakdown.project-version": {
|
||||
"message": "إصدار المشروع"
|
||||
},
|
||||
"analytics.breakdown.selected": {
|
||||
"message": "التفصيل حسب {breakdown}"
|
||||
},
|
||||
"analytics.chart.action.show-all": {
|
||||
"message": "أظهار الكل"
|
||||
},
|
||||
"analytics.chart.action.show-limited": {
|
||||
"message": "عرض محدود"
|
||||
},
|
||||
"analytics.chart.action.show-top-eight": {
|
||||
"message": "عرض أفضل 8"
|
||||
},
|
||||
"analytics.chart.axis.playtime-hours": {
|
||||
"message": "{hours} ساعة"
|
||||
},
|
||||
"analytics.chart.controls.active-count": {
|
||||
"message": "نشط {count} "
|
||||
},
|
||||
"analytics.chart.controls.annotations": {
|
||||
"message": "التعليقات التوضيحية"
|
||||
},
|
||||
"analytics.chart.controls.aria": {
|
||||
"message": "عناصر التحكم في الرسوم البيانية التحليلية، {activeCount}"
|
||||
},
|
||||
"analytics.chart.controls.button": {
|
||||
"message": "عناصر التحكم"
|
||||
},
|
||||
"analytics.chart.controls.dialog-aria": {
|
||||
"message": "عناصر التحكم في الرسوم البيانية التحليلية"
|
||||
},
|
||||
"analytics.chart.controls.display": {
|
||||
"message": "عرض"
|
||||
},
|
||||
"analytics.chart.controls.modrinth-events": {
|
||||
"message": "فعاليات Modrinth"
|
||||
},
|
||||
"analytics.chart.controls.no-modrinth-events": {
|
||||
"message": "لا توجد حالات Modrinth في الرسوم البيانية."
|
||||
},
|
||||
"analytics.chart.controls.no-project-events": {
|
||||
"message": "لا توجد أحداث للمشروع في الرسم البياني."
|
||||
},
|
||||
"analytics.chart.controls.previous-period": {
|
||||
"message": "الفترة السابقة"
|
||||
},
|
||||
"analytics.chart.controls.project-events": {
|
||||
"message": "فعاليات المشروع"
|
||||
},
|
||||
"analytics.chart.controls.ratio": {
|
||||
"message": "النسبة"
|
||||
},
|
||||
"analytics.chart.empty.select-table-items": {
|
||||
"message": "اختر عناصر من الجدول أدناه لتصور بياناتك."
|
||||
},
|
||||
"analytics.chart.events.count-aria": {
|
||||
"message": "{count, plural, one {# حدث تحليلي} other {# أحداث تحليلية}}"
|
||||
},
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>: {title}"
|
||||
},
|
||||
"analytics.chart.events.see-announcement": {
|
||||
"message": "انظر الإعلان"
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.aria": {
|
||||
"message": "عرض تفاصيل التحليلات المتعلقة بتحقيق الدخل"
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.description": {
|
||||
"message": "لا تُحتسب في عملية تحقيق الدخل سوى المشاهدات وعمليات التنزيل التي تتم عبر Modrinth، ويجب على المستخدمين تسجيل الدخول لإجراء عمليات التنزيل."
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.title": {
|
||||
"message": "تفاصيل التحليلات المُدرة للدخل"
|
||||
},
|
||||
"analytics.chart.legend.previous-period-suffix": {
|
||||
"message": "{name} (السابق)"
|
||||
},
|
||||
"analytics.chart.render-limit.description": {
|
||||
"message": "قد يؤدي عرض جميع الأسطر المحددة من الجدول إلى انخفاض أداء الصفحة."
|
||||
},
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "هل تُعرض جميع {count} الأسطر في الرسم البياني؟"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "يتم عرض جميع {itemType, select, project {{count, plural, one {مشروع} other {مشاريع}}} country {{count, plural, one {دولة} other {دول}}} monetization {{count, plural, one {قيمة الربح} other {قيم الربح}}} downloadSource {{count, plural, one {مصدر تحميل} other {مصادر تحميل}}} downloadReason {{count, plural, one {سبب تحميل} other {أسباب تحميل}}} member {{count, plural, one {عضو} other {أعضاء}}} projectVersion {{count, plural, one {نسخة مشروع} other {نسخ مشاريع}}} loader {{count, plural, one {محمل} other {محملات}}} gameVersion {{count, plural, one {نسخة لعبة} other {نسخ ألعاب}}} other {{count, plural, one {عنصر} other {عناصر}}}} من الجدول"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "يتم عرض {count} {itemType, select, project {{count, plural, one {مشروع} other {مشاريع}}} country {{count, plural, one {دولة} other {دول}}} monetization {{count, plural, one {قيمة الربح} other {قيم الربح}}} downloadSource {{count, plural, one {مصدر تحميل} other {مصادر تحميل}}} downloadReason {{count, plural, one {سبب تحميل} other {أسباب تحميل}}} member {{count, plural, one {عضو} other {أعضاء}}} projectVersion {{count, plural, one {نسخة مشروع} other {نسخ مشاريع}}} loader {{count, plural, one {محمل} other {محملات}}} gameVersion {{count, plural, one {نسخة لعبة} other {نسخ ألعاب}}} other {{count, plural, one {عنصر} other {عناصر}}}} من الجدول"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "يتم عرض {limit} {itemType, select, project {{limit, plural, one {مشروع} other {مشاريع}}} country {{limit, plural, one {دولة} other {دول}}} monetization {{limit, plural, one {قيمة الربح} other {قيم الربح}}} downloadSource {{limit, plural, one {مصدر تحميل} other {مصادر تحميل}}} downloadReason {{limit, plural, one {سبب تحميل} other {أسباب تحميل}}} member {{limit, plural, one {عضو} other {أعضاء}}} projectVersion {{limit, plural, one {نسخة مشروع} other {نسخ مشاريع}}} loader {{limit, plural, one {محمل} other {محملات}}} gameVersion {{limit, plural, one {نسخة لعبة} other {نسخ ألعاب}}} other {{limit, plural, one {عنصر} other {عناصر}}}} من الجدول"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "يتم عرض أعلى {count} {itemType, select, project {{count, plural, one {مشروع} other {مشاريع}}} country {{count, plural, one {دولة} other {دول}}} monetization {{count, plural, one {قيمة الربح} other {قيم الربح}}} downloadSource {{count, plural, one {مصدر تحميل} other {مصادر تحميل}}} downloadReason {{count, plural, one {سبب تحميل} other {أسباب تحميل}}} member {{count, plural, one {عضو} other {أعضاء}}} projectVersion {{count, plural, one {نسخة مشروع} other {نسخ مشاريع}}} loader {{count, plural, one {محمل} other {محملات}}} gameVersion {{count, plural, one {نسخة لعبة} other {نسخ ألعاب}}} other {{count, plural, one {عنصر} other {عناصر}}}} من الجدول"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-on-project": {
|
||||
"message": "يعتمد على {project}"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-project-version": {
|
||||
"message": "{dependentProject} يعتمد على {dependencyProject}، {version}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# يوم} other {# أيام}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.hours": {
|
||||
"message": "{count, plural, one {# ساعة} other {# ساعات}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.minutes": {
|
||||
"message": "{count, plural, one {# دقيقة} other {# دقائق}}"
|
||||
},
|
||||
"analytics.chart.tooltip.hide-entry": {
|
||||
"message": "إخفاء {name} في الرسم البياني"
|
||||
},
|
||||
"analytics.chart.tooltip.pinned": {
|
||||
"message": "تلميح الرسم البياني مثبت"
|
||||
},
|
||||
"analytics.chart.tooltip.pinned-aria": {
|
||||
"message": "مثبت"
|
||||
},
|
||||
"analytics.chart.tooltip.previous-period-short": {
|
||||
"message": "(السابق)"
|
||||
},
|
||||
"analytics.chart.tooltip.show-entry": {
|
||||
"message": "إظهار {name} في الرسم البياني"
|
||||
},
|
||||
"analytics.chart.tooltip.total": {
|
||||
"message": "مجموع"
|
||||
},
|
||||
"analytics.chart.view.area": {
|
||||
"message": "المنطقة"
|
||||
},
|
||||
"analytics.chart.view.bar": {
|
||||
"message": "شريط"
|
||||
},
|
||||
"analytics.chart.view.line": {
|
||||
"message": "خط"
|
||||
},
|
||||
"analytics.download-reason.dependency": {
|
||||
"message": "التبعية"
|
||||
},
|
||||
"analytics.download-reason.standalone": {
|
||||
"message": "مستقل"
|
||||
},
|
||||
"analytics.download-reason.update": {
|
||||
"message": "تحديث"
|
||||
},
|
||||
"analytics.download-source.app": {
|
||||
"message": "تطبيق Modrinth"
|
||||
},
|
||||
"analytics.download-source.website": {
|
||||
"message": "موقع Modrinth الإلكتروني"
|
||||
},
|
||||
"analytics.downloads.suffix": {
|
||||
"message": "التنزيلات"
|
||||
},
|
||||
"analytics.empty.no-data": {
|
||||
"message": "لا توجد بيانات متاحة"
|
||||
},
|
||||
"analytics.empty.no-data-for-analytics": {
|
||||
"message": "لا توجد بيانات متاحة للتحليلات"
|
||||
},
|
||||
"analytics.empty.no-projects": {
|
||||
"message": "لا توجد مشاريع متاحة"
|
||||
},
|
||||
"analytics.empty.no-projects-for-analytics": {
|
||||
"message": "لا توجد مشاريع متاحة للتحليلات"
|
||||
},
|
||||
"analytics.empty.select-project": {
|
||||
"message": "حدد مشروعًا واحدًا على الأقل لعرض البيانات"
|
||||
},
|
||||
"analytics.filter.game-version-type": {
|
||||
"message": "نوع إصدار اللعبة"
|
||||
},
|
||||
"analytics.filter.game-version-type.all": {
|
||||
"message": "الكل"
|
||||
},
|
||||
"analytics.filter.game-version-type.release": {
|
||||
"message": "إصدار نهائي"
|
||||
},
|
||||
"analytics.filter.search.countries": {
|
||||
"message": "البحث عن الدول..."
|
||||
},
|
||||
"analytics.filter.search.dependent-projects": {
|
||||
"message": "البحث عن المشاريع..."
|
||||
},
|
||||
"analytics.filter.search.download-sources": {
|
||||
"message": "البحث عن مصادر التنزيل..."
|
||||
},
|
||||
"analytics.filter.search.members": {
|
||||
"message": "البحث عن الأعضاء..."
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "البحث عن إصدارات المشاريع..."
|
||||
},
|
||||
"analytics.filter.search.versions": {
|
||||
"message": "البحث عن الإصدارات..."
|
||||
},
|
||||
"analytics.graph.title.downloads": {
|
||||
"message": "التنزيلات بمرور الوقت"
|
||||
},
|
||||
"analytics.graph.title.playtime": {
|
||||
"message": "وقت اللعب بمرور الوقت"
|
||||
},
|
||||
"analytics.graph.title.revenue": {
|
||||
"message": "الإيرادات بمرور الوقت"
|
||||
},
|
||||
"analytics.graph.title.views": {
|
||||
"message": "المشاهدات بمرور الوقت"
|
||||
},
|
||||
"analytics.group-by.1h": {
|
||||
"message": "ساعة 1"
|
||||
},
|
||||
"analytics.group-by.6h": {
|
||||
"message": "6 ساعات"
|
||||
},
|
||||
"analytics.group-by.date": {
|
||||
"message": "التاريخ"
|
||||
},
|
||||
"analytics.group-by.day": {
|
||||
"message": "يوم"
|
||||
},
|
||||
"analytics.group-by.month": {
|
||||
"message": "شهر"
|
||||
},
|
||||
"analytics.group-by.selected.day": {
|
||||
"message": "التجميع حسب اليوم"
|
||||
},
|
||||
"analytics.group-by.selected.hour": {
|
||||
"message": "التجميع حسب الساعة"
|
||||
},
|
||||
"analytics.group-by.selected.month": {
|
||||
"message": "التجميع حسب الشهر"
|
||||
},
|
||||
"analytics.group-by.selected.six-hours": {
|
||||
"message": "التجميع كل 6 ساعات"
|
||||
},
|
||||
"analytics.group-by.selected.week": {
|
||||
"message": "التجميع حسب الأسبوع"
|
||||
},
|
||||
"analytics.group-by.selected.year": {
|
||||
"message": "التجميع حسب السنة"
|
||||
},
|
||||
"analytics.group-by.week": {
|
||||
"message": "الأسبوع"
|
||||
},
|
||||
@@ -326,81 +80,27 @@
|
||||
"analytics.project-event.project-status-changed": {
|
||||
"message": "تم تغيير حالة المشروع"
|
||||
},
|
||||
"analytics.project-event.project-unlisted": {
|
||||
"message": "المشروع غير مُدرج"
|
||||
},
|
||||
"analytics.project-event.version-released": {
|
||||
"message": ""
|
||||
},
|
||||
"analytics.project-event.version-uploaded": {
|
||||
"message": "تم رفع الإصدار"
|
||||
},
|
||||
"analytics.project-status.approved": {
|
||||
"message": "تمت الموافقة"
|
||||
},
|
||||
"analytics.project-status.archived": {
|
||||
"message": "مؤرشف"
|
||||
},
|
||||
"analytics.project-status.draft": {
|
||||
"message": "مسودة"
|
||||
},
|
||||
"analytics.project-status.other": {
|
||||
"message": "أخرى"
|
||||
},
|
||||
"analytics.project-status.private": {
|
||||
"message": "خاص"
|
||||
},
|
||||
"analytics.project-status.rejected": {
|
||||
"message": "رُفض المشروع"
|
||||
},
|
||||
"analytics.project-status.unlisted": {
|
||||
"message": "غير مُدرج"
|
||||
},
|
||||
"analytics.project-status.withheld": {
|
||||
"message": "محجوب"
|
||||
},
|
||||
"analytics.project.all": {
|
||||
"message": "جميع المشاريع"
|
||||
},
|
||||
"analytics.project.count": {
|
||||
"message": "{count, plural, one {# مشروع} other {# مشاريع}}"
|
||||
},
|
||||
"analytics.project.icon-alt": {
|
||||
"message": "أيقونة {name}"
|
||||
},
|
||||
"analytics.project.select": {
|
||||
"message": "تحديد المشاريع"
|
||||
},
|
||||
"analytics.project.user": {
|
||||
"message": "مشاريع {username}"
|
||||
},
|
||||
"analytics.project.your": {
|
||||
"message": "مشاريعك"
|
||||
},
|
||||
"analytics.query.filter.add": {
|
||||
"message": "إضافة عامل تصفية"
|
||||
},
|
||||
"analytics.query.label.breakdown": {
|
||||
"message": "التفصيل:"
|
||||
},
|
||||
"analytics.query.label.grouped-by": {
|
||||
"message": "مجمّع حسب"
|
||||
},
|
||||
"analytics.query.label.project": {
|
||||
"message": "المشروع:"
|
||||
},
|
||||
"analytics.query.label.timeframe": {
|
||||
"message": "الفترة الزمنية:"
|
||||
},
|
||||
"analytics.stat.downloads": {
|
||||
"message": "التنزيلات"
|
||||
},
|
||||
"analytics.stat.monetization-banner.body": {
|
||||
"message": "المشاهدات وعمليات التنزيل التي تتم عبر Modrinth فقط هي المؤهلة لتحقيق الأرباح، ويجب أن تجتاز عملية تصفية لمنع الاحتيال. كما تتطلب عمليات التنزيل من تطبيق Modrinth تسجيل دخول المستخدم. ونظرًا لأن جميع المشاريع لديها نسبة متشابهة من التنزيلات القابلة لتحقيق الأرباح، فلن يتغير إيرادك بشكل ملحوظ إذا تم احتساب جميع عمليات التنزيل."
|
||||
},
|
||||
"analytics.stat.monetization-banner.learn-more": {
|
||||
"message": "معرفة المزيد"
|
||||
},
|
||||
"analytics.stat.playtime": {
|
||||
"message": "وقت اللعب"
|
||||
},
|
||||
|
||||
@@ -89,9 +89,6 @@
|
||||
"analytics.chart.controls.button": {
|
||||
"message": "Ovládání"
|
||||
},
|
||||
"analytics.chart.controls.display": {
|
||||
"message": "Zobrazit"
|
||||
},
|
||||
"analytics.chart.controls.modrinth-events": {
|
||||
"message": "Události Modrinthu"
|
||||
},
|
||||
@@ -140,9 +137,6 @@
|
||||
"analytics.chart.tooltip.hide-entry": {
|
||||
"message": "Skrýt {name} v grafu"
|
||||
},
|
||||
"analytics.chart.tooltip.pinned-aria": {
|
||||
"message": "Připnuto"
|
||||
},
|
||||
"analytics.chart.tooltip.previous-period-short": {
|
||||
"message": "(předch.)"
|
||||
},
|
||||
@@ -296,9 +290,6 @@
|
||||
"analytics.project-status.private": {
|
||||
"message": "Soukromý"
|
||||
},
|
||||
"analytics.project-status.rejected": {
|
||||
"message": "Zamítnuto"
|
||||
},
|
||||
"analytics.project-status.unlisted": {
|
||||
"message": "Neveřejný"
|
||||
},
|
||||
@@ -1277,9 +1268,6 @@
|
||||
"dashboard.creator-withdraw-modal.tremendous-details.reward-plural": {
|
||||
"message": "Odměny"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.tremendous-details.search-amount-label": {
|
||||
"message": "Vyhledat množství"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.tremendous-details.unverified-email-header": {
|
||||
"message": "Neověřený e-mail"
|
||||
},
|
||||
@@ -1536,7 +1524,7 @@
|
||||
"message": "Peněženka"
|
||||
},
|
||||
"dashboard.withdraw.error.email-verification.title": {
|
||||
"message": "Požadováno ověření emailu"
|
||||
"message": "Ověření e-mailu je povinné"
|
||||
},
|
||||
"dashboard.withdraw.error.insufficient-balance.title": {
|
||||
"message": "Nedostatečný zůstatek"
|
||||
@@ -2171,6 +2159,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Kolekce"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, one {stažení} few {stažení} other {stažení}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Členem od"
|
||||
},
|
||||
@@ -2189,6 +2180,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Organizace"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {projekt} few {projekty} other {projektů}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Ukládání..."
|
||||
},
|
||||
@@ -2372,6 +2366,9 @@
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "{title} nepodporuje {platform} pro {gameVersion}"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "Hledat verze hry..."
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "Vybrat verzi hry"
|
||||
},
|
||||
@@ -2522,6 +2519,12 @@
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Přejít na přehled projektů"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, one {stažení} few {stažení} other {stažení}}"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count, plural, one {# sledující} few {# sledující} other {# sledujících}}"
|
||||
},
|
||||
"project.versions.title": {
|
||||
"message": "Verze"
|
||||
},
|
||||
@@ -3137,6 +3140,9 @@
|
||||
"version.dependency.view-version": {
|
||||
"message": "Zobrazit verzi"
|
||||
},
|
||||
"version.download.download-dependency": {
|
||||
"message": "Stáhnout vyžadovaný obsah"
|
||||
},
|
||||
"version.download.optional-resource-pack": {
|
||||
"message": "Nepovinný resource pack"
|
||||
},
|
||||
|
||||
@@ -1766,9 +1766,15 @@
|
||||
"project.download.no-app": {
|
||||
"message": "Har ikke Modrinth App?"
|
||||
},
|
||||
"project.download.no-versions-available": {
|
||||
"message": "Ingen versioner tilgængelig til {gameVersion} og {platform}."
|
||||
},
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "{title} understøtter ikke {platform} til {gameVersion}"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "Søg spil versioner..."
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "Vælg spil version"
|
||||
},
|
||||
|
||||
@@ -518,9 +518,6 @@
|
||||
"analytics.value.unknown": {
|
||||
"message": "Unbekannt"
|
||||
},
|
||||
"analytics.value.unknown-dependent-tooltip": {
|
||||
"message": "Es gibt keine Metadaten, um zu bestimmen, zu welchem abhängigen Projekt dieser Download gehört."
|
||||
},
|
||||
"analytics.value.unmonetized": {
|
||||
"message": "Nicht monetarisiert"
|
||||
},
|
||||
@@ -858,10 +855,10 @@
|
||||
"message": "Zuletzt benutzt"
|
||||
},
|
||||
"auth.sign-in.no-account": {
|
||||
"message": "Du hast kein Konto?"
|
||||
"message": "Kein Account?"
|
||||
},
|
||||
"auth.sign-in.sign-in-with": {
|
||||
"message": "Bei Modrinth anmelden"
|
||||
"message": "Einloggen"
|
||||
},
|
||||
"auth.sign-in.title": {
|
||||
"message": "Anmelden"
|
||||
@@ -876,10 +873,10 @@
|
||||
"message": "Durch das erstellen eines Kontos stimmst du den <terms-link>Nutzungsbedingungen</terms-link> und <privacy-policy-link>Datenschutzrichtlinien</privacy-policy-link> von Modrinth zu."
|
||||
},
|
||||
"auth.sign-up.show-fewer-options": {
|
||||
"message": "Zeige weniger Optionen"
|
||||
"message": "Weniger Optionen anzeigen"
|
||||
},
|
||||
"auth.sign-up.show-other-options": {
|
||||
"message": "Zeige weitere Optionen"
|
||||
"message": "Andere Optionen anzeigen"
|
||||
},
|
||||
"auth.sign-up.sign-in-option.title": {
|
||||
"message": "Du hast bereits ein Konto?"
|
||||
@@ -888,7 +885,7 @@
|
||||
"message": "Registrieren"
|
||||
},
|
||||
"auth.sign-up.title.sign-up-with": {
|
||||
"message": "Ein Konto erstellen"
|
||||
"message": "Account erstellen"
|
||||
},
|
||||
"auth.verify-email.action.account-settings": {
|
||||
"message": "Kontoeinstellungen"
|
||||
@@ -915,7 +912,7 @@
|
||||
"message": "E-Mail-Veifizierung fehlgeschlagen"
|
||||
},
|
||||
"auth.verify-email.notification.email-sent.description": {
|
||||
"message": "Eine E-Mail mit einem Link zur Verifizierung deines Accounts wurde an {email} gesendet."
|
||||
"message": "Eine E-Mail an {email} wurde zur Verifikation deines Accounts geschickt."
|
||||
},
|
||||
"auth.verify-email.notification.email-sent.title": {
|
||||
"message": "E-Mail gesendet"
|
||||
@@ -1712,21 +1709,12 @@
|
||||
"dashboard.projects.project.review-environment-metadata": {
|
||||
"message": "Bitte überprüfe die Umgebungsmetadaten"
|
||||
},
|
||||
"dashboard.projects.selection-bar.aria-label": {
|
||||
"message": "Aktionen für ausgewählte Projekte"
|
||||
},
|
||||
"dashboard.projects.selection-bar.selected-count": {
|
||||
"message": "{count, plural, one {# Projekt} other {# Projekte}} ausgewählt"
|
||||
},
|
||||
"dashboard.projects.table.id": {
|
||||
"message": "ID"
|
||||
},
|
||||
"dashboard.projects.table.name": {
|
||||
"message": "Name"
|
||||
},
|
||||
"dashboard.projects.table.select-all-bulk-editable": {
|
||||
"message": "Wähle alle Projekte aus, die die Massenbearbeitung unterstützen"
|
||||
},
|
||||
"dashboard.projects.table.status": {
|
||||
"message": "Status"
|
||||
},
|
||||
@@ -2672,18 +2660,12 @@
|
||||
"layout.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Auf Modrinth+ upgraden"
|
||||
},
|
||||
"moderation.exclude-technical-review": {
|
||||
"message": "TR ausschließen"
|
||||
},
|
||||
"moderation.moderate": {
|
||||
"message": "Moderieren"
|
||||
},
|
||||
"moderation.page.external-projects": {
|
||||
"message": "Externe Projekte"
|
||||
},
|
||||
"moderation.page.global-detail-traces": {
|
||||
"message": "Globale Traces"
|
||||
},
|
||||
"moderation.page.projects": {
|
||||
"message": "Projekte"
|
||||
},
|
||||
@@ -2693,45 +2675,6 @@
|
||||
"moderation.page.technicalReview": {
|
||||
"message": "Technische Überprüfung"
|
||||
},
|
||||
"modpack-scan-modal.failed": {
|
||||
"message": "Fehlgeschlagen"
|
||||
},
|
||||
"modpack-scan-modal.load-versions-error": {
|
||||
"message": "Versionen konnten nicht geladen werden: {error}"
|
||||
},
|
||||
"modpack-scan-modal.loading-versions": {
|
||||
"message": "Versionen werden geladen..."
|
||||
},
|
||||
"modpack-scan-modal.new-files": {
|
||||
"message": "Neue Dateien"
|
||||
},
|
||||
"modpack-scan-modal.new-groups": {
|
||||
"message": "Neue Gruppen"
|
||||
},
|
||||
"modpack-scan-modal.no-files": {
|
||||
"message": "Keine Dateien gefunden."
|
||||
},
|
||||
"modpack-scan-modal.not-scanned": {
|
||||
"message": "Nicht gescannt"
|
||||
},
|
||||
"modpack-scan-modal.override-files": {
|
||||
"message": "Überschreibungsdateien ({count})"
|
||||
},
|
||||
"modpack-scan-modal.pack-file-name": {
|
||||
"message": "Name der Pack-Datei"
|
||||
},
|
||||
"modpack-scan-modal.scan-all-files": {
|
||||
"message": "Alle Dateien scannen"
|
||||
},
|
||||
"modpack-scan-modal.scan-error": {
|
||||
"message": "Einige Dateien konnten nicht gescannt werden: {error}"
|
||||
},
|
||||
"modpack-scan-modal.scanning": {
|
||||
"message": "Wird gescannt..."
|
||||
},
|
||||
"modpack-scan-modal.title": {
|
||||
"message": "Modpack-Scan ({scanned}/{total} Dateien)"
|
||||
},
|
||||
"muralpay.account-type.checking": {
|
||||
"message": "Girokonto"
|
||||
},
|
||||
@@ -3068,6 +3011,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Kollektion"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, one {Download} other {Downloads}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Beigetreten"
|
||||
},
|
||||
@@ -3086,6 +3032,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Organisationen"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {Projekt} other {Projekte}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Speichert..."
|
||||
},
|
||||
@@ -3272,107 +3221,20 @@
|
||||
"project.details.licensed": {
|
||||
"message": "Lizenziert unter"
|
||||
},
|
||||
"project.download.base-game-version-incompatible-tooltip": {
|
||||
"message": "Diese Spielversion ist mit dem Basisprojekt nicht kompatibel."
|
||||
},
|
||||
"project.download.base-loader-incompatible-tooltip": {
|
||||
"message": "Dieser Loader ist mit dem Basisprojekt nicht kompatibel."
|
||||
},
|
||||
"project.download.compatible-version-title": {
|
||||
"message": "Kompatible Versionen"
|
||||
},
|
||||
"project.download.dependencies-title": {
|
||||
"message": "Abhängigkeiten"
|
||||
},
|
||||
"project.download.dependency-already-installed": {
|
||||
"message": "Diese Abhängigkeit ist bereits installiert"
|
||||
},
|
||||
"project.download.dependency-any-compatible": {
|
||||
"message": "Beliebige kompatible"
|
||||
},
|
||||
"project.download.dependency-conflicting": {
|
||||
"message": "Diese Abhängigkeit steht im Konflikt mit einer anderen Abhängigkeit"
|
||||
},
|
||||
"project.download.dependency-download-file": {
|
||||
"message": "{filename} herunterladen"
|
||||
},
|
||||
"project.download.dependency-download-file-with-size": {
|
||||
"message": "{filename} ({size}) herunterladen"
|
||||
},
|
||||
"project.download.dependency-duplicate": {
|
||||
"message": "Diese Abhängigkeit ist bereits enthalten"
|
||||
},
|
||||
"project.download.dependency-missing-version": {
|
||||
"message": "Diese Version der Abhängigkeit ist nicht verfügbar"
|
||||
},
|
||||
"project.download.dependency-no-compatible-version": {
|
||||
"message": "Keine kompatible Version ist für diese Abhängigkeit verfügbar"
|
||||
},
|
||||
"project.download.dependency-quilt-fabric-api": {
|
||||
"message": "Die Fabric-API wird für Quilt ignoriert"
|
||||
},
|
||||
"project.download.dependency-resource-pack-admonition": {
|
||||
"message": "Dieses Projekt hat eine Abhängigkeit mit einem erforderlichen Ressourcenpaket. Lade es herunter und speichere es in deinem {folder}-Ordner."
|
||||
},
|
||||
"project.download.dependency-unavailable": {
|
||||
"message": "Diese Abhängigkeit kann nicht heruntergeladen werden"
|
||||
},
|
||||
"project.download.download": {
|
||||
"message": "Herunterladen"
|
||||
},
|
||||
"project.download.download-as-zip": {
|
||||
"message": "Als .zip herunterladen"
|
||||
},
|
||||
"project.download.download-version": {
|
||||
"message": "{version} herunterladen"
|
||||
},
|
||||
"project.download.download-with-dependencies": {
|
||||
"message": "Mit Abhängigkeiten herunterladen"
|
||||
},
|
||||
"project.download.download-with-recommended": {
|
||||
"message": "Mit empfohlenen herunterladen"
|
||||
},
|
||||
"project.download.download-with-recommended-as-zip": {
|
||||
"message": "Mit empfohlenen als .zip herunterladen"
|
||||
},
|
||||
"project.download.duplicate-dependencies-hidden": {
|
||||
"message": "Doppelte Abhängigkeiten werden ausgeblendet"
|
||||
},
|
||||
"project.download.file-unavailable": {
|
||||
"message": "Diese Datei kann nicht heruntergeladen werden"
|
||||
},
|
||||
"project.download.game-version-unsupported-tooltip": {
|
||||
"message": "{title} unterstützt {gameVersion} für {platform} nicht"
|
||||
},
|
||||
"project.download.install-with-app": {
|
||||
"message": "Mit Modrinth App installieren"
|
||||
},
|
||||
"project.download.manually": {
|
||||
"message": "Manuell herunterladen"
|
||||
},
|
||||
"project.download.no-app": {
|
||||
"message": "Du hast die Modrinth App nicht?"
|
||||
},
|
||||
"project.download.no-game-versions-found": {
|
||||
"message": "Keine Spielversionen gefunden"
|
||||
},
|
||||
"project.download.no-versions-available": {
|
||||
"message": "Keine Versionen für {gameVersion} und {platform} verfügbar."
|
||||
"message": "Keinen versionen verfügbar für {gameVersion} und {platform}."
|
||||
},
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "{title} unterstützt {platform} für {gameVersion} nicht"
|
||||
},
|
||||
"project.download.recommended-title": {
|
||||
"message": "Empfohlen"
|
||||
},
|
||||
"project.download.required-resource-pack-admonition": {
|
||||
"message": "Dieses Datenpaket benötigt ebenfalls ein Ressourcenpaket. Lade es herunter und speichere es in deinem {folder}-Ordner."
|
||||
},
|
||||
"project.download.required-resource-pack-short": {
|
||||
"message": "Ressourcenpaket"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "Spielversion auswählen"
|
||||
"message": "Spielversionen durchsuchen..."
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "Spielversion wählen"
|
||||
@@ -3386,15 +3248,6 @@
|
||||
"project.download.title": {
|
||||
"message": "{title} herunterladen"
|
||||
},
|
||||
"project.download.unknown-loader": {
|
||||
"message": "Unbekannter Loader"
|
||||
},
|
||||
"project.download.zip-failed-text": {
|
||||
"message": "Eine oder mehrere Dateien konnten nicht heruntergeladen werden. Bitte versuche es erneut."
|
||||
},
|
||||
"project.download.zip-failed-title": {
|
||||
"message": "Dateien konnten nicht heruntergeladen werden"
|
||||
},
|
||||
"project.environment.migration-no-permission.message": {
|
||||
"message": "Wir haben das Umgebungssystem auf Modrinth überarbeitet und neue Optionen sind jetzt verfügbar. Du hast keine Berechtigung, diese Einstellungen zu ändern, aber lasse bitte ein anderes Projektmitglied wissen, dass die Umgebungsmetadaten verifiziert werden müssen."
|
||||
},
|
||||
@@ -3585,7 +3438,7 @@
|
||||
"message": "Das Moderationsteam von Modrinth hat die von dir für einige externe Inhalte vorgelegten Berechtigungsnachweise abgelehnt. Bitte überprüfe die unten aufgeführten abgelehnten Einträge und lege zulässige Nachweise vor oder entfernen die Inhalte."
|
||||
},
|
||||
"project.settings.permissions.bad-proof.title": {
|
||||
"message": "Einige Nachweise wurden abgelehnt"
|
||||
"message": "Manche Beweise wurden abgelehnt"
|
||||
},
|
||||
"project.settings.permissions.collapse-all": {
|
||||
"message": "Alle minimieren"
|
||||
@@ -3621,7 +3474,7 @@
|
||||
"message": "Mehr erfahren"
|
||||
},
|
||||
"project.settings.permissions.no-results": {
|
||||
"message": "Keine externen Dateien entsprechen deiner Suche."
|
||||
"message": "Keine externen Dateien übereinstimmen deiner Suche."
|
||||
},
|
||||
"project.settings.permissions.not-allowed.description": {
|
||||
"message": "Einige der enthaltenen externen Inhalte dürfen auf Modrinth nicht verbreitet werden, da sie gegen unsere Inhaltsrichtlinien verstoßen und daher entfernt werden müssen."
|
||||
@@ -3636,7 +3489,7 @@
|
||||
"message": "Meiste Dateien"
|
||||
},
|
||||
"project.settings.permissions.sort.recently-edited": {
|
||||
"message": "Kürzlich bearbeitet"
|
||||
"message": "Letztens bearbeitet"
|
||||
},
|
||||
"project.settings.permissions.sort.rejected": {
|
||||
"message": "Abgelehnt"
|
||||
@@ -3650,6 +3503,12 @@
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Projekt-Dashboard besuchen"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, one {Download} other {Downloads}}"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count, plural, one {Follower} other {Follower}}"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} wurde archiviert. {title} wird keine weiteren Updates erhalten, es sei denn, der Autor entscheided sich, das Projekt zu Dearchivieren."
|
||||
},
|
||||
@@ -4196,6 +4055,9 @@
|
||||
"settings.account.security.email.title": {
|
||||
"message": "E-Mail"
|
||||
},
|
||||
"settings.account.security.passkey.add": {
|
||||
"message": "Passkey hinzufügen"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.name.description": {
|
||||
"message": "Stell sicher, dass du etwas nimmst, was du dir gut merken kannst, damit du den Passkey später identifizieren kannst."
|
||||
},
|
||||
@@ -4205,15 +4067,6 @@
|
||||
"settings.account.security.passkey.add-modal.name.placeholder": {
|
||||
"message": "Mein Passkey"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.title": {
|
||||
"message": "Passkey hinzufügen"
|
||||
},
|
||||
"settings.account.security.passkey.add.button": {
|
||||
"message": "Passkey hinzufügen"
|
||||
},
|
||||
"settings.account.security.passkey.button": {
|
||||
"message": "Passkeys verwalten"
|
||||
},
|
||||
"settings.account.security.passkey.description": {
|
||||
"message": "Verwalte deine gespeicherten Passkeys oder füge einen neuen hinzu."
|
||||
},
|
||||
@@ -4224,7 +4077,7 @@
|
||||
"message": "Zuletzt benutzt {ago}"
|
||||
},
|
||||
"settings.account.security.passkey.modal.loading": {
|
||||
"message": "Passkeys werden geladen..."
|
||||
"message": "Passkeys laden..."
|
||||
},
|
||||
"settings.account.security.passkey.modal.never-used": {
|
||||
"message": "Nie benutzt"
|
||||
@@ -4232,9 +4085,6 @@
|
||||
"settings.account.security.passkey.modal.no-passkeys": {
|
||||
"message": "Du hast keine registrierten Passkeys."
|
||||
},
|
||||
"settings.account.security.passkey.remove.button": {
|
||||
"message": "Passkey löschen"
|
||||
},
|
||||
"settings.account.security.passkey.remove.description": {
|
||||
"message": "Dadurch wird der Passkey „{name}“ endgültig gelöscht. Du kannst dich mit ihm nicht mehr anmelden."
|
||||
},
|
||||
@@ -4878,7 +4728,7 @@
|
||||
"message": "Version anzeigen"
|
||||
},
|
||||
"version.download.download-dependency": {
|
||||
"message": "Wähle eine Version zum Herunterladen aus"
|
||||
"message": "Abhängigkeit herunterladen"
|
||||
},
|
||||
"version.download.no-primary-file": {
|
||||
"message": "Fehler: Keine primäre Datei gefunden"
|
||||
@@ -4889,9 +4739,6 @@
|
||||
"version.download.required-resource-pack": {
|
||||
"message": "Erforderliches Ressourcenpaket"
|
||||
},
|
||||
"version.download.version": {
|
||||
"message": "{version} ({size}) herunterladen"
|
||||
},
|
||||
"version.edit.button": {
|
||||
"message": "Bearbeiten"
|
||||
},
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
"message": "Downloadgrund"
|
||||
},
|
||||
"analytics.breakdown.download-source": {
|
||||
"message": "Download-Quelle"
|
||||
"message": "Downloadquelle"
|
||||
},
|
||||
"analytics.breakdown.game-version": {
|
||||
"message": "Spielversion"
|
||||
@@ -96,7 +96,7 @@
|
||||
"message": "Einstellungselemente für Analysediagramm"
|
||||
},
|
||||
"analytics.chart.controls.display": {
|
||||
"message": "Anzeige"
|
||||
"message": "Anzeigen"
|
||||
},
|
||||
"analytics.chart.controls.modrinth-events": {
|
||||
"message": "Modrinth-Ereignisse"
|
||||
@@ -498,7 +498,7 @@
|
||||
"message": "Projekte über"
|
||||
},
|
||||
"analytics.title": {
|
||||
"message": "Analytik"
|
||||
"message": "Analysen"
|
||||
},
|
||||
"analytics.value.monetized": {
|
||||
"message": "Monetarisiert"
|
||||
@@ -518,9 +518,6 @@
|
||||
"analytics.value.unknown": {
|
||||
"message": "Unbekannt"
|
||||
},
|
||||
"analytics.value.unknown-dependent-tooltip": {
|
||||
"message": "Es gibt keine Metadaten, um zu bestimmen, zu welchem abhängigen Projekt dieser Download gehört."
|
||||
},
|
||||
"analytics.value.unmonetized": {
|
||||
"message": "Nicht monetarisiert"
|
||||
},
|
||||
@@ -1712,21 +1709,12 @@
|
||||
"dashboard.projects.project.review-environment-metadata": {
|
||||
"message": "Bitte überprüfe die Umgebungsmetadaten"
|
||||
},
|
||||
"dashboard.projects.selection-bar.aria-label": {
|
||||
"message": "Aktionen für ausgewählte Projekte"
|
||||
},
|
||||
"dashboard.projects.selection-bar.selected-count": {
|
||||
"message": "{count, plural, one {# Projekt} other {# Projekte}} ausgewählt"
|
||||
},
|
||||
"dashboard.projects.table.id": {
|
||||
"message": "ID"
|
||||
},
|
||||
"dashboard.projects.table.name": {
|
||||
"message": "Name"
|
||||
},
|
||||
"dashboard.projects.table.select-all-bulk-editable": {
|
||||
"message": "Wähle alle Projekte aus, die die Massenbearbeitung unterstützen"
|
||||
},
|
||||
"dashboard.projects.table.status": {
|
||||
"message": "Status"
|
||||
},
|
||||
@@ -2672,18 +2660,12 @@
|
||||
"layout.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Auf Modrinth+ upgraden"
|
||||
},
|
||||
"moderation.exclude-technical-review": {
|
||||
"message": "TR ausschließen"
|
||||
},
|
||||
"moderation.moderate": {
|
||||
"message": "Moderieren"
|
||||
},
|
||||
"moderation.page.external-projects": {
|
||||
"message": "Externe Projekte"
|
||||
},
|
||||
"moderation.page.global-detail-traces": {
|
||||
"message": "Globale Traces"
|
||||
},
|
||||
"moderation.page.projects": {
|
||||
"message": "Projekte"
|
||||
},
|
||||
@@ -2693,45 +2675,6 @@
|
||||
"moderation.page.technicalReview": {
|
||||
"message": "Technische Überprüfung"
|
||||
},
|
||||
"modpack-scan-modal.failed": {
|
||||
"message": "Fehlgeschlagen"
|
||||
},
|
||||
"modpack-scan-modal.load-versions-error": {
|
||||
"message": "Versionen konnten nicht geladen werden: {error}"
|
||||
},
|
||||
"modpack-scan-modal.loading-versions": {
|
||||
"message": "Versionen werden geladen..."
|
||||
},
|
||||
"modpack-scan-modal.new-files": {
|
||||
"message": "Neue Dateien"
|
||||
},
|
||||
"modpack-scan-modal.new-groups": {
|
||||
"message": "Neue Gruppen"
|
||||
},
|
||||
"modpack-scan-modal.no-files": {
|
||||
"message": "Keine Dateien gefunden."
|
||||
},
|
||||
"modpack-scan-modal.not-scanned": {
|
||||
"message": "Nicht gescannt"
|
||||
},
|
||||
"modpack-scan-modal.override-files": {
|
||||
"message": "Überschreibungsdateien ({count})"
|
||||
},
|
||||
"modpack-scan-modal.pack-file-name": {
|
||||
"message": "Name der Pack-Datei"
|
||||
},
|
||||
"modpack-scan-modal.scan-all-files": {
|
||||
"message": "Alle Dateien scannen"
|
||||
},
|
||||
"modpack-scan-modal.scan-error": {
|
||||
"message": "Einige Dateien konnten nicht gescannt werden: {error}"
|
||||
},
|
||||
"modpack-scan-modal.scanning": {
|
||||
"message": "Wird gescannt..."
|
||||
},
|
||||
"modpack-scan-modal.title": {
|
||||
"message": "Modpack-Scan ({scanned}/{total} Dateien)"
|
||||
},
|
||||
"muralpay.account-type.checking": {
|
||||
"message": "Girokonto"
|
||||
},
|
||||
@@ -3068,6 +3011,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Kollektion"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, one {Download} other {Downloads}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Beigetreten"
|
||||
},
|
||||
@@ -3086,6 +3032,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Organisationen"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {Projekt} other {Projekte}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Speichert..."
|
||||
},
|
||||
@@ -3272,107 +3221,20 @@
|
||||
"project.details.licensed": {
|
||||
"message": "Lizenziert unter"
|
||||
},
|
||||
"project.download.base-game-version-incompatible-tooltip": {
|
||||
"message": "Diese Spielversion ist mit dem Basisprojekt nicht kompatibel."
|
||||
},
|
||||
"project.download.base-loader-incompatible-tooltip": {
|
||||
"message": "Dieser Loader ist mit dem Basisprojekt nicht kompatibel."
|
||||
},
|
||||
"project.download.compatible-version-title": {
|
||||
"message": "Kompatible Versionen"
|
||||
},
|
||||
"project.download.dependencies-title": {
|
||||
"message": "Abhängigkeiten"
|
||||
},
|
||||
"project.download.dependency-already-installed": {
|
||||
"message": "Diese Abhängigkeit ist bereits installiert"
|
||||
},
|
||||
"project.download.dependency-any-compatible": {
|
||||
"message": "Beliebige kompatible"
|
||||
},
|
||||
"project.download.dependency-conflicting": {
|
||||
"message": "Diese Abhängigkeit steht im Konflikt mit einer anderen Abhängigkeit"
|
||||
},
|
||||
"project.download.dependency-download-file": {
|
||||
"message": "{filename} herunterladen"
|
||||
},
|
||||
"project.download.dependency-download-file-with-size": {
|
||||
"message": "{filename} ({size}) herunterladen"
|
||||
},
|
||||
"project.download.dependency-duplicate": {
|
||||
"message": "Diese Abhängigkeit ist bereits enthalten"
|
||||
},
|
||||
"project.download.dependency-missing-version": {
|
||||
"message": "Diese Version der Abhängigkeit ist nicht verfügbar"
|
||||
},
|
||||
"project.download.dependency-no-compatible-version": {
|
||||
"message": "Keine kompatible Version ist für diese Abhängigkeit verfügbar"
|
||||
},
|
||||
"project.download.dependency-quilt-fabric-api": {
|
||||
"message": "Die Fabric-API wird für Quilt ignoriert"
|
||||
},
|
||||
"project.download.dependency-resource-pack-admonition": {
|
||||
"message": "Dieses Projekt hat eine Abhängigkeit mit einem erforderlichen Ressourcenpaket. Lade es herunter und speichere es in deinem {folder}-Ordner."
|
||||
},
|
||||
"project.download.dependency-unavailable": {
|
||||
"message": "Diese Abhängigkeit kann nicht heruntergeladen werden"
|
||||
},
|
||||
"project.download.download": {
|
||||
"message": "Herunterladen"
|
||||
},
|
||||
"project.download.download-as-zip": {
|
||||
"message": "Als .zip herunterladen"
|
||||
},
|
||||
"project.download.download-version": {
|
||||
"message": "{version} herunterladen"
|
||||
},
|
||||
"project.download.download-with-dependencies": {
|
||||
"message": "Mit Abhängigkeiten herunterladen"
|
||||
},
|
||||
"project.download.download-with-recommended": {
|
||||
"message": "Mit empfohlenen herunterladen"
|
||||
},
|
||||
"project.download.download-with-recommended-as-zip": {
|
||||
"message": "Mit empfohlenen als .zip herunterladen"
|
||||
},
|
||||
"project.download.duplicate-dependencies-hidden": {
|
||||
"message": "Doppelte Abhängigkeiten werden ausgeblendet"
|
||||
},
|
||||
"project.download.file-unavailable": {
|
||||
"message": "Diese Datei kann nicht heruntergeladen werden"
|
||||
},
|
||||
"project.download.game-version-unsupported-tooltip": {
|
||||
"message": "{title} unterstützt {gameVersion} für {platform} nicht"
|
||||
},
|
||||
"project.download.install-with-app": {
|
||||
"message": "Mit Modrinth App installieren"
|
||||
},
|
||||
"project.download.manually": {
|
||||
"message": "Manuell herunterladen"
|
||||
},
|
||||
"project.download.no-app": {
|
||||
"message": "Du hast die Modrinth App nicht?"
|
||||
},
|
||||
"project.download.no-game-versions-found": {
|
||||
"message": "Keine Spielversionen gefunden"
|
||||
},
|
||||
"project.download.no-versions-available": {
|
||||
"message": "Keine Versionen für {gameVersion} und {platform} verfügbar."
|
||||
},
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "{title} unterstützt {platform} für die {gameVersion} nicht"
|
||||
},
|
||||
"project.download.recommended-title": {
|
||||
"message": "Empfohlen"
|
||||
},
|
||||
"project.download.required-resource-pack-admonition": {
|
||||
"message": "Dieses Datenpaket benötigt ebenfalls ein Ressourcenpaket. Lade es herunter und speichere es in deinem {folder}-Ordner."
|
||||
},
|
||||
"project.download.required-resource-pack-short": {
|
||||
"message": "Ressourcenpaket"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "Spielversion auswählen"
|
||||
"message": "Spielversionen durchsuchen..."
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "Spielversion auswählen"
|
||||
@@ -3386,15 +3248,6 @@
|
||||
"project.download.title": {
|
||||
"message": "{title} herunterladen"
|
||||
},
|
||||
"project.download.unknown-loader": {
|
||||
"message": "Unbekannter Loader"
|
||||
},
|
||||
"project.download.zip-failed-text": {
|
||||
"message": "Eine oder mehrere Dateien konnten nicht heruntergeladen werden. Bitte versuche es erneut."
|
||||
},
|
||||
"project.download.zip-failed-title": {
|
||||
"message": "Dateien konnten nicht heruntergeladen werden"
|
||||
},
|
||||
"project.environment.migration-no-permission.message": {
|
||||
"message": "Wir haben kürzlich das Umgebungssystem auf Modrinth überarbeitet und neue Optionen sind nun verfügbar. Du hast keine Berechtigung, diese Einstellungen zu ändern, aber informiere bitte ein anderes Projektmitglied, dass die Umgebungsmetadaten überprüft werden müssen."
|
||||
},
|
||||
@@ -3650,6 +3503,12 @@
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Projekt-Dashboard besuchen"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, one {Download} other {Downloads}}"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count, plural, one {Follower} other {Follower}}"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} wurde archiviert. {title} wird keine weiteren Updates erhalten, es sei denn, der Autor entscheidet sich das Projekt zu dearchivieren."
|
||||
},
|
||||
@@ -4196,6 +4055,9 @@
|
||||
"settings.account.security.email.title": {
|
||||
"message": "E-Mail"
|
||||
},
|
||||
"settings.account.security.passkey.add": {
|
||||
"message": "Passkey hinzufügen"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.name.description": {
|
||||
"message": "Stell sicher, dass du etwas nimmst, was du dir gut merken kannst, damit du den Passkey später identifizieren kannst."
|
||||
},
|
||||
@@ -4205,15 +4067,6 @@
|
||||
"settings.account.security.passkey.add-modal.name.placeholder": {
|
||||
"message": "Mein Passkey"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.title": {
|
||||
"message": "Passkey hinzufügen"
|
||||
},
|
||||
"settings.account.security.passkey.add.button": {
|
||||
"message": "Passkey hinzufügen"
|
||||
},
|
||||
"settings.account.security.passkey.button": {
|
||||
"message": "Passkeys verwalten"
|
||||
},
|
||||
"settings.account.security.passkey.description": {
|
||||
"message": "Verwalte deine gespeicherten Passkeys oder füge einen neuen hinzu."
|
||||
},
|
||||
@@ -4224,7 +4077,7 @@
|
||||
"message": "Zuletzt {ago} verwendet"
|
||||
},
|
||||
"settings.account.security.passkey.modal.loading": {
|
||||
"message": "Passkeys werden geladen..."
|
||||
"message": "Passkeys werden geladen…"
|
||||
},
|
||||
"settings.account.security.passkey.modal.never-used": {
|
||||
"message": "Nie verwendet"
|
||||
@@ -4232,9 +4085,6 @@
|
||||
"settings.account.security.passkey.modal.no-passkeys": {
|
||||
"message": "Du hast keine registrierten Passkeys."
|
||||
},
|
||||
"settings.account.security.passkey.remove.button": {
|
||||
"message": "Passkey löschen"
|
||||
},
|
||||
"settings.account.security.passkey.remove.description": {
|
||||
"message": "Dadurch wird der Passkey „{name}“ endgültig gelöscht. Du kannst dich mit ihm nicht mehr anmelden."
|
||||
},
|
||||
@@ -4878,7 +4728,7 @@
|
||||
"message": "Version anzeigen"
|
||||
},
|
||||
"version.download.download-dependency": {
|
||||
"message": "Wähle eine Version zum Herunterladen aus"
|
||||
"message": "Abhängigkeit herunterladen"
|
||||
},
|
||||
"version.download.no-primary-file": {
|
||||
"message": "Fehler: Keine primäre Datei gefunden"
|
||||
@@ -4889,9 +4739,6 @@
|
||||
"version.download.required-resource-pack": {
|
||||
"message": "Erforderliches Ressourcenpaket"
|
||||
},
|
||||
"version.download.version": {
|
||||
"message": "{version} ({size}) herunterladen"
|
||||
},
|
||||
"version.edit.button": {
|
||||
"message": "Bearbeiten"
|
||||
},
|
||||
|
||||
@@ -2672,12 +2672,6 @@
|
||||
"layout.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Upgrade to Modrinth+"
|
||||
},
|
||||
"layout.publish.email-verification-required.description": {
|
||||
"message": "You must verify your email before publishing on Modrinth."
|
||||
},
|
||||
"layout.publish.email-verification-required.title": {
|
||||
"message": "Email verification required"
|
||||
},
|
||||
"moderation.exclude-technical-review": {
|
||||
"message": "Exclude TR"
|
||||
},
|
||||
@@ -2687,9 +2681,6 @@
|
||||
"moderation.page.external-projects": {
|
||||
"message": "External projects"
|
||||
},
|
||||
"moderation.page.global-detail-traces": {
|
||||
"message": "Global traces"
|
||||
},
|
||||
"moderation.page.projects": {
|
||||
"message": "Projects"
|
||||
},
|
||||
@@ -3005,24 +2996,6 @@
|
||||
"muralpay.warning.wallet-address": {
|
||||
"message": "Double-check your wallet address. Funds sent to an incorrect address cannot be recovered."
|
||||
},
|
||||
"organization.button.manage": {
|
||||
"message": "Manage"
|
||||
},
|
||||
"organization.button.manage-projects": {
|
||||
"message": "Manage projects"
|
||||
},
|
||||
"organization.label.downloads": {
|
||||
"message": "downloads"
|
||||
},
|
||||
"organization.label.members": {
|
||||
"message": "members"
|
||||
},
|
||||
"organization.label.organization": {
|
||||
"message": "Organization"
|
||||
},
|
||||
"organization.label.projects": {
|
||||
"message": "projects"
|
||||
},
|
||||
"organization.settings.projects.edit-links.affected-projects": {
|
||||
"message": "Changes will be applied to {count, plural, one {# project} other {# projects}}."
|
||||
},
|
||||
@@ -3092,8 +3065,8 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Collection"
|
||||
},
|
||||
"profile.label.download-count": {
|
||||
"message": "{count, plural, one {download} other {downloads}}"
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, one {download} other {downloads}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Joined"
|
||||
@@ -3113,8 +3086,8 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Organizations"
|
||||
},
|
||||
"profile.label.project-count": {
|
||||
"message": "{count, plural, one {project} other {projects}}"
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {project} other {projects}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Saving..."
|
||||
@@ -3278,12 +3251,6 @@
|
||||
"project.actions.dont-show-again": {
|
||||
"message": "Don't show again"
|
||||
},
|
||||
"project.actions.edit-project": {
|
||||
"message": "Edit project"
|
||||
},
|
||||
"project.actions.rescan-modpack": {
|
||||
"message": "Rescan modpack"
|
||||
},
|
||||
"project.actions.review-project": {
|
||||
"message": "Review project"
|
||||
},
|
||||
@@ -3308,6 +3275,9 @@
|
||||
"project.details.licensed": {
|
||||
"message": "Licensed"
|
||||
},
|
||||
"project.download.additional-files-title": {
|
||||
"message": "Additional files"
|
||||
},
|
||||
"project.download.base-game-version-incompatible-tooltip": {
|
||||
"message": "This game version is incompatible with the base project."
|
||||
},
|
||||
@@ -3315,7 +3285,7 @@
|
||||
"message": "This loader is incompatible with the base project."
|
||||
},
|
||||
"project.download.compatible-version-title": {
|
||||
"message": "Compatible versions"
|
||||
"message": "Compatible version"
|
||||
},
|
||||
"project.download.dependencies-title": {
|
||||
"message": "Dependencies"
|
||||
@@ -3323,9 +3293,6 @@
|
||||
"project.download.dependency-already-installed": {
|
||||
"message": "This dependency is already installed"
|
||||
},
|
||||
"project.download.dependency-any-compatible": {
|
||||
"message": "Any compatible"
|
||||
},
|
||||
"project.download.dependency-conflicting": {
|
||||
"message": "This dependency conflicts with another dependency"
|
||||
},
|
||||
@@ -3347,30 +3314,12 @@
|
||||
"project.download.dependency-quilt-fabric-api": {
|
||||
"message": "Fabric API is skipped for Quilt"
|
||||
},
|
||||
"project.download.dependency-resource-pack-admonition": {
|
||||
"message": "This project has a dependency with a required resource pack. Download it and place it in your {folder} folder."
|
||||
},
|
||||
"project.download.dependency-unavailable": {
|
||||
"message": "This dependency cannot be downloaded"
|
||||
},
|
||||
"project.download.download": {
|
||||
"message": "Download"
|
||||
},
|
||||
"project.download.download-as-zip": {
|
||||
"message": "Download as .zip"
|
||||
},
|
||||
"project.download.download-version": {
|
||||
"message": "Download {version}"
|
||||
},
|
||||
"project.download.download-with-dependencies": {
|
||||
"message": "Download with deps"
|
||||
},
|
||||
"project.download.download-with-recommended": {
|
||||
"message": "Download with recommended"
|
||||
},
|
||||
"project.download.download-with-recommended-as-zip": {
|
||||
"message": "Download with recommended as .zip"
|
||||
},
|
||||
"project.download.duplicate-dependencies-hidden": {
|
||||
"message": "Duplicate dependencies are hidden"
|
||||
},
|
||||
@@ -3380,8 +3329,8 @@
|
||||
"project.download.game-version-unsupported-tooltip": {
|
||||
"message": "{title} does not support {gameVersion} for {platform}"
|
||||
},
|
||||
"project.download.install-with-app": {
|
||||
"message": "Install with Modrinth App"
|
||||
"project.download.install-with-app-description": {
|
||||
"message": "Automatically install the correct version and dependencies."
|
||||
},
|
||||
"project.download.manually": {
|
||||
"message": "Download manually"
|
||||
@@ -3398,15 +3347,6 @@
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "{title} does not support {platform} for {gameVersion}"
|
||||
},
|
||||
"project.download.recommended-title": {
|
||||
"message": "Recommended"
|
||||
},
|
||||
"project.download.required-resource-pack-admonition": {
|
||||
"message": "This data pack also requires a resource pack. Download it and place it in your {folder} folder."
|
||||
},
|
||||
"project.download.required-resource-pack-short": {
|
||||
"message": "Resource pack"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "Select game version"
|
||||
},
|
||||
@@ -3416,6 +3356,18 @@
|
||||
"project.download.select-platform": {
|
||||
"message": "Select platform"
|
||||
},
|
||||
"project.download.selected-version-download-all": {
|
||||
"message": "Download all (.zip)"
|
||||
},
|
||||
"project.download.selected-version-downloading": {
|
||||
"message": "Downloading... ({current}/{total})"
|
||||
},
|
||||
"project.download.selected-version-failed-text": {
|
||||
"message": "One or more version files could not be downloaded. Please try again."
|
||||
},
|
||||
"project.download.selected-version-failed-title": {
|
||||
"message": "Could not download version"
|
||||
},
|
||||
"project.download.show-all-versions": {
|
||||
"message": "Show all versions"
|
||||
},
|
||||
@@ -3425,12 +3377,6 @@
|
||||
"project.download.unknown-loader": {
|
||||
"message": "Unknown loader"
|
||||
},
|
||||
"project.download.zip-failed-text": {
|
||||
"message": "One or more files could not be downloaded. Please try again."
|
||||
},
|
||||
"project.download.zip-failed-title": {
|
||||
"message": "Could not download files"
|
||||
},
|
||||
"project.environment.migration-no-permission.message": {
|
||||
"message": "We've just overhauled the Environments system on Modrinth and new options are now available. You don't have permission to modify these settings, but please let another member of the project know that the environment metadata needs to be verified."
|
||||
},
|
||||
@@ -3686,6 +3632,12 @@
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Visit projects dashboard"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, one {download} other {downloads}}"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count, plural, one {follower} other {followers}}"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} has been archived. {title} will not receive any further updates unless the author decides to unarchive the project."
|
||||
},
|
||||
@@ -4232,6 +4184,9 @@
|
||||
"settings.account.security.email.title": {
|
||||
"message": "Email"
|
||||
},
|
||||
"settings.account.security.passkey.add": {
|
||||
"message": "Add passkey"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.name.description": {
|
||||
"message": "Make sure to pick something memorable, so you can identify this passkey later."
|
||||
},
|
||||
@@ -4241,15 +4196,6 @@
|
||||
"settings.account.security.passkey.add-modal.name.placeholder": {
|
||||
"message": "My passkey"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.title": {
|
||||
"message": "Add passkey"
|
||||
},
|
||||
"settings.account.security.passkey.add.button": {
|
||||
"message": "Add passkey"
|
||||
},
|
||||
"settings.account.security.passkey.button": {
|
||||
"message": "Manage passkeys"
|
||||
},
|
||||
"settings.account.security.passkey.description": {
|
||||
"message": "Manage your registered passkeys, or add a new one."
|
||||
},
|
||||
@@ -4268,9 +4214,6 @@
|
||||
"settings.account.security.passkey.modal.no-passkeys": {
|
||||
"message": "You do not have any passkeys registered."
|
||||
},
|
||||
"settings.account.security.passkey.remove.button": {
|
||||
"message": "Delete passkey"
|
||||
},
|
||||
"settings.account.security.passkey.remove.description": {
|
||||
"message": "This will permanently remove the passkey \"{name}\". You will no longer be able to sign in with it."
|
||||
},
|
||||
|
||||
@@ -518,9 +518,6 @@
|
||||
"analytics.value.unknown": {
|
||||
"message": "Desconocido"
|
||||
},
|
||||
"analytics.value.unknown-dependent-tooltip": {
|
||||
"message": "No hay metadatos que permitan determinar a qué proyecto dependiente corresponde esta descarga."
|
||||
},
|
||||
"analytics.value.unmonetized": {
|
||||
"message": "No monetizado"
|
||||
},
|
||||
@@ -1712,21 +1709,12 @@
|
||||
"dashboard.projects.project.review-environment-metadata": {
|
||||
"message": "Por favor revisa los metadatos de entorno"
|
||||
},
|
||||
"dashboard.projects.selection-bar.aria-label": {
|
||||
"message": "Acciones de los proyectos seleccionados"
|
||||
},
|
||||
"dashboard.projects.selection-bar.selected-count": {
|
||||
"message": "{count, plural, one {# proyecto seleccionado} other {# proyectos seleccionados}}"
|
||||
},
|
||||
"dashboard.projects.table.id": {
|
||||
"message": "ID"
|
||||
},
|
||||
"dashboard.projects.table.name": {
|
||||
"message": "Nombre"
|
||||
},
|
||||
"dashboard.projects.table.select-all-bulk-editable": {
|
||||
"message": "Seleccionar todos los proyectos que admiten la edición masiva"
|
||||
},
|
||||
"dashboard.projects.table.status": {
|
||||
"message": "Estado"
|
||||
},
|
||||
@@ -2672,18 +2660,12 @@
|
||||
"layout.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Actualizar a Modrinth+"
|
||||
},
|
||||
"moderation.exclude-technical-review": {
|
||||
"message": "Excluir RT"
|
||||
},
|
||||
"moderation.moderate": {
|
||||
"message": "Moderar"
|
||||
},
|
||||
"moderation.page.external-projects": {
|
||||
"message": "Proyectos externos"
|
||||
},
|
||||
"moderation.page.global-detail-traces": {
|
||||
"message": "Trazas globales"
|
||||
},
|
||||
"moderation.page.projects": {
|
||||
"message": "Proyectos"
|
||||
},
|
||||
@@ -2693,45 +2675,6 @@
|
||||
"moderation.page.technicalReview": {
|
||||
"message": "Revisión técnica"
|
||||
},
|
||||
"modpack-scan-modal.failed": {
|
||||
"message": "Error"
|
||||
},
|
||||
"modpack-scan-modal.load-versions-error": {
|
||||
"message": "No se pudieron cargar las versiones: {error}"
|
||||
},
|
||||
"modpack-scan-modal.loading-versions": {
|
||||
"message": "Cargando versiones..."
|
||||
},
|
||||
"modpack-scan-modal.new-files": {
|
||||
"message": "Nuevos archivos"
|
||||
},
|
||||
"modpack-scan-modal.new-groups": {
|
||||
"message": "Nuevos grupos"
|
||||
},
|
||||
"modpack-scan-modal.no-files": {
|
||||
"message": "No se encontraron archivos."
|
||||
},
|
||||
"modpack-scan-modal.not-scanned": {
|
||||
"message": "No escaneado"
|
||||
},
|
||||
"modpack-scan-modal.override-files": {
|
||||
"message": "Archivos de sobrescritura ({count})"
|
||||
},
|
||||
"modpack-scan-modal.pack-file-name": {
|
||||
"message": "Nombre del archivo del paquete"
|
||||
},
|
||||
"modpack-scan-modal.scan-all-files": {
|
||||
"message": "Escanear todos los archivos"
|
||||
},
|
||||
"modpack-scan-modal.scan-error": {
|
||||
"message": "No se pudieron escanear algunos archivos: {error}"
|
||||
},
|
||||
"modpack-scan-modal.scanning": {
|
||||
"message": "Escaneando..."
|
||||
},
|
||||
"modpack-scan-modal.title": {
|
||||
"message": "Análisis del modpack ({scanned}/{total} archivos)"
|
||||
},
|
||||
"muralpay.account-type.checking": {
|
||||
"message": "Cuenta de cheques"
|
||||
},
|
||||
@@ -3068,6 +3011,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Colección"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, one {descarga} other {descargas}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Se unió"
|
||||
},
|
||||
@@ -3086,6 +3032,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Organizaciones"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {proyecto} other {proyectos}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Guardando..."
|
||||
},
|
||||
@@ -3272,107 +3221,20 @@
|
||||
"project.details.licensed": {
|
||||
"message": "Con licencia"
|
||||
},
|
||||
"project.download.base-game-version-incompatible-tooltip": {
|
||||
"message": "Esta versión del juego no es compatible con el proyecto base."
|
||||
},
|
||||
"project.download.base-loader-incompatible-tooltip": {
|
||||
"message": "Este cargador no es compatible con el proyecto base."
|
||||
},
|
||||
"project.download.compatible-version-title": {
|
||||
"message": "Versiones compatibles"
|
||||
},
|
||||
"project.download.dependencies-title": {
|
||||
"message": "Dependencias"
|
||||
},
|
||||
"project.download.dependency-already-installed": {
|
||||
"message": "This dependency is already installed"
|
||||
},
|
||||
"project.download.dependency-any-compatible": {
|
||||
"message": "Cualquiera compatible"
|
||||
},
|
||||
"project.download.dependency-conflicting": {
|
||||
"message": "Esta dependencia entra en conflicto con otra dependencia"
|
||||
},
|
||||
"project.download.dependency-download-file": {
|
||||
"message": "Descargar {filename}"
|
||||
},
|
||||
"project.download.dependency-download-file-with-size": {
|
||||
"message": "Descargar {filename} ({size})"
|
||||
},
|
||||
"project.download.dependency-duplicate": {
|
||||
"message": "Esta dependencia ya está incluida"
|
||||
},
|
||||
"project.download.dependency-missing-version": {
|
||||
"message": "Esta versión de la dependencia no está disponible"
|
||||
},
|
||||
"project.download.dependency-no-compatible-version": {
|
||||
"message": "No hay ninguna versión compatible disponible para esta dependencia"
|
||||
},
|
||||
"project.download.dependency-quilt-fabric-api": {
|
||||
"message": "La API de Fabric se omite para Quilt"
|
||||
},
|
||||
"project.download.dependency-resource-pack-admonition": {
|
||||
"message": "Este proyecto depende de un paquete de recursos obligatorio. Descárgalo y colócalo en tu carpeta {folder}."
|
||||
},
|
||||
"project.download.dependency-unavailable": {
|
||||
"message": "Esta dependencia no se puede descargar"
|
||||
},
|
||||
"project.download.download": {
|
||||
"message": "Descargar"
|
||||
},
|
||||
"project.download.download-as-zip": {
|
||||
"message": "Descargar como archivo .zip"
|
||||
},
|
||||
"project.download.download-version": {
|
||||
"message": "Descargar {version}"
|
||||
},
|
||||
"project.download.download-with-dependencies": {
|
||||
"message": "Descargar con dependencias"
|
||||
},
|
||||
"project.download.download-with-recommended": {
|
||||
"message": "Descargar con las recomendaciones"
|
||||
},
|
||||
"project.download.download-with-recommended-as-zip": {
|
||||
"message": "Descargar con los archivos recomendados como .zip"
|
||||
},
|
||||
"project.download.duplicate-dependencies-hidden": {
|
||||
"message": "Las dependencias duplicadas están ocultas"
|
||||
},
|
||||
"project.download.file-unavailable": {
|
||||
"message": "Este archivo no se puede descargar"
|
||||
},
|
||||
"project.download.game-version-unsupported-tooltip": {
|
||||
"message": "{title} no soporta {gameVersion} para {platform}"
|
||||
},
|
||||
"project.download.install-with-app": {
|
||||
"message": "Instalar con la aplicación Modrinth"
|
||||
},
|
||||
"project.download.manually": {
|
||||
"message": "Descargar manualmente"
|
||||
},
|
||||
"project.download.no-app": {
|
||||
"message": "¿No tienes la Modrinth App?"
|
||||
},
|
||||
"project.download.no-game-versions-found": {
|
||||
"message": "No se encontraron versiones del juego"
|
||||
},
|
||||
"project.download.no-versions-available": {
|
||||
"message": "No hay versiones disponibles para {gameVersion} y {platform}."
|
||||
},
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "{title} no soporta {platform} para {gameVersion}"
|
||||
},
|
||||
"project.download.recommended-title": {
|
||||
"message": "Recomendado"
|
||||
},
|
||||
"project.download.required-resource-pack-admonition": {
|
||||
"message": "Este paquete de datos también requiere un paquete de recursos. Descárgalo y colócalo en tu carpeta {folder}."
|
||||
},
|
||||
"project.download.required-resource-pack-short": {
|
||||
"message": "Paquete de recursos"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "Selecciona la versión del juego"
|
||||
"message": "Buscar versiones del juego..."
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "Selecciona la versión del juego"
|
||||
@@ -3386,15 +3248,6 @@
|
||||
"project.download.title": {
|
||||
"message": "Descargar {title}"
|
||||
},
|
||||
"project.download.unknown-loader": {
|
||||
"message": "Cargador desconocido"
|
||||
},
|
||||
"project.download.zip-failed-text": {
|
||||
"message": "No se pudieron descargar uno o más archivos. Inténtalo de nuevo."
|
||||
},
|
||||
"project.download.zip-failed-title": {
|
||||
"message": "No se pudieron descargar los archivos"
|
||||
},
|
||||
"project.environment.migration-no-permission.message": {
|
||||
"message": "Acabamos de renovar el sistema de entornos en Modrinth y ahora hay nuevas opciones disponibles. No tienes permiso para modificar estos ajustes, pero avisa a otro miembro del proyecto que los metadatos del entorno necesitan ser verificados."
|
||||
},
|
||||
@@ -3650,6 +3503,12 @@
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Ver el panel de control de proyectos"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, one {descarga} other {descargas}}"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count, plural, one {seguidor} other {seguidores}}"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} se ha archivado. {title} no recibirá más actualizaciones hasta que el autor decida desarchivar el proyecto."
|
||||
},
|
||||
@@ -4196,6 +4055,9 @@
|
||||
"settings.account.security.email.title": {
|
||||
"message": "Correo electrónico"
|
||||
},
|
||||
"settings.account.security.passkey.add": {
|
||||
"message": "Agregar clave de acceso"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.name.description": {
|
||||
"message": "Asegúrate de elegir algo fácil de recordar, para que puedas identificar esta contraseña más adelante."
|
||||
},
|
||||
@@ -4205,15 +4067,6 @@
|
||||
"settings.account.security.passkey.add-modal.name.placeholder": {
|
||||
"message": "Mi clave de acceso"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.title": {
|
||||
"message": "Agregar clave de acceso"
|
||||
},
|
||||
"settings.account.security.passkey.add.button": {
|
||||
"message": "Agregar clave de acceso"
|
||||
},
|
||||
"settings.account.security.passkey.button": {
|
||||
"message": "Administrar claves de acceso"
|
||||
},
|
||||
"settings.account.security.passkey.description": {
|
||||
"message": "Administra tus claves de acceso registradas o agrega una nueva."
|
||||
},
|
||||
@@ -4224,7 +4077,7 @@
|
||||
"message": "Último uso {ago}"
|
||||
},
|
||||
"settings.account.security.passkey.modal.loading": {
|
||||
"message": "Cargando claves de acceso..."
|
||||
"message": "Cargando claves de acceso…"
|
||||
},
|
||||
"settings.account.security.passkey.modal.never-used": {
|
||||
"message": "Nunca usado"
|
||||
@@ -4232,9 +4085,6 @@
|
||||
"settings.account.security.passkey.modal.no-passkeys": {
|
||||
"message": "No tienes ninguna clave de acceso registrada."
|
||||
},
|
||||
"settings.account.security.passkey.remove.button": {
|
||||
"message": "Eliminar clave de acceso"
|
||||
},
|
||||
"settings.account.security.passkey.remove.description": {
|
||||
"message": "Esto eliminará de forma permanente la clave de acceso \"{name}\". Ya no podrás iniciar sesión con ella."
|
||||
},
|
||||
@@ -4878,7 +4728,7 @@
|
||||
"message": "Ver versión"
|
||||
},
|
||||
"version.download.download-dependency": {
|
||||
"message": "Selecciona una versión para descargar"
|
||||
"message": "Descargar dependencia"
|
||||
},
|
||||
"version.download.no-primary-file": {
|
||||
"message": "Error: No se encontró el archivo principal"
|
||||
@@ -4889,9 +4739,6 @@
|
||||
"version.download.required-resource-pack": {
|
||||
"message": "Paquete de recursos requerido"
|
||||
},
|
||||
"version.download.version": {
|
||||
"message": "Descargar {version} ({size})"
|
||||
},
|
||||
"version.edit.button": {
|
||||
"message": "Editar"
|
||||
},
|
||||
|
||||
@@ -2891,6 +2891,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Colección"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, one {descarga} other {descargas}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Se unió hace"
|
||||
},
|
||||
@@ -2909,6 +2912,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Organizaciones"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {proyecto} other {proyectos}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Guardando..."
|
||||
},
|
||||
@@ -3101,9 +3107,15 @@
|
||||
"project.download.no-app": {
|
||||
"message": "¿No tienes la aplicación Modrinth?"
|
||||
},
|
||||
"project.download.no-versions-available": {
|
||||
"message": "No hay versiones disponibles para {gameVersion} y {platform}."
|
||||
},
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "{title} no está soportado para {platform} en la {gameVersion}"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "Buscar versiones del juego..."
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "Selecciona la versión del juego"
|
||||
},
|
||||
@@ -3371,6 +3383,12 @@
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Visita el panel de proyectos"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, one {descarga} other {descargas}}"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count, plural, one {seguidor} other {seguidores}}"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} ha sido archivado. {title} no recibirá ninguna futura actualización excepto que el autor decida desarchivar el proyecto."
|
||||
},
|
||||
@@ -4547,6 +4565,9 @@
|
||||
"version.dependency.view-version": {
|
||||
"message": "Ver versión"
|
||||
},
|
||||
"version.download.download-dependency": {
|
||||
"message": "Descargar dependencia"
|
||||
},
|
||||
"version.download.no-primary-file": {
|
||||
"message": "Error: No se encontró el archivo principal"
|
||||
},
|
||||
|
||||
@@ -38,9 +38,6 @@
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "Loader"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "Miyembro"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "Monetisasyon"
|
||||
},
|
||||
@@ -137,9 +134,6 @@
|
||||
"analytics.stat.views": {
|
||||
"message": "Pagtingin"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "Wala"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "Wala"
|
||||
},
|
||||
@@ -1434,7 +1428,7 @@
|
||||
"message": "Alok sa limitadong oras. Walang kakailanganing credit card. Magagamit para sa mga server sa US."
|
||||
},
|
||||
"hosting-marketing.pick-customized-plan": {
|
||||
"message": "Pumili ng pasadya na plan na may specs na kailangan mo."
|
||||
"message": "Pumili ng sinadyang plan na may specs na kakailanganin mo."
|
||||
},
|
||||
"hosting-marketing.server-for-everyone": {
|
||||
"message": "May server para sa lahat"
|
||||
@@ -1883,9 +1877,6 @@
|
||||
"moderation.page.technicalReview": {
|
||||
"message": "Tech review"
|
||||
},
|
||||
"modpack-scan-modal.failed": {
|
||||
"message": "Nabigo"
|
||||
},
|
||||
"muralpay.account-type.checking": {
|
||||
"message": "Sinusuri"
|
||||
},
|
||||
@@ -2213,6 +2204,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Koleksiyon"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, one {download} other {na download}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Sumali"
|
||||
},
|
||||
@@ -2231,6 +2225,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Mga organisasyon"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {proyekto} other {na proyekto}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Sine-save..."
|
||||
},
|
||||
@@ -2417,9 +2414,15 @@
|
||||
"project.download.no-app": {
|
||||
"message": "Wala kang Modrinth App?"
|
||||
},
|
||||
"project.download.no-versions-available": {
|
||||
"message": "Walang bersiyong magagamit para sa {gameVersion} at {platform}."
|
||||
},
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "Hindi masuport ng {title} ang {platform} para sa {gameVersion}"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "Maghanap ng mga bersiyon ng laro..."
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "Piliin ang lahat ng bersiyon ng laro"
|
||||
},
|
||||
@@ -2534,9 +2537,6 @@
|
||||
"project.settings.general.url.title": {
|
||||
"message": "URL"
|
||||
},
|
||||
"project.settings.permissions.sort.status": {
|
||||
"message": "Estado"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Mga Setting"
|
||||
},
|
||||
@@ -2945,9 +2945,6 @@
|
||||
"settings.account.security.email.title": {
|
||||
"message": "Email"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.name.label": {
|
||||
"message": "Pangalan"
|
||||
},
|
||||
"settings.account.security.password.action.add": {
|
||||
"message": "Magdagdag ng password"
|
||||
},
|
||||
@@ -3362,9 +3359,6 @@
|
||||
"ui.newsletter-button.tooltip": {
|
||||
"message": "Mag-subscribe sa Modrinth newsletter"
|
||||
},
|
||||
"version.edit.button": {
|
||||
"message": "Baguhin"
|
||||
},
|
||||
"version.environment.none.description": {
|
||||
"message": "Wala pang itinakdang environment para sa bersiyong ito."
|
||||
},
|
||||
|
||||
@@ -33,10 +33,10 @@
|
||||
"message": "Type de projet dépendant"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "Raison de téléchargement"
|
||||
"message": "Télécharger la raison"
|
||||
},
|
||||
"analytics.breakdown.download-source": {
|
||||
"message": "Source de téléchargement"
|
||||
"message": "Télécharger la source"
|
||||
},
|
||||
"analytics.breakdown.game-version": {
|
||||
"message": "Version du jeu"
|
||||
@@ -69,7 +69,7 @@
|
||||
"message": "Répartition par {breakdown}"
|
||||
},
|
||||
"analytics.chart.action.show-all": {
|
||||
"message": "Tout montrer"
|
||||
"message": "Montrer tout"
|
||||
},
|
||||
"analytics.chart.action.show-limited": {
|
||||
"message": "Montrer limités"
|
||||
@@ -518,9 +518,6 @@
|
||||
"analytics.value.unknown": {
|
||||
"message": "Inconnu"
|
||||
},
|
||||
"analytics.value.unknown-dependent-tooltip": {
|
||||
"message": "Il n'y a pas de métadonnées permettant de déterminer à quel projet dépendant ce téléchargement se rapporte."
|
||||
},
|
||||
"analytics.value.unmonetized": {
|
||||
"message": "Non monétisé"
|
||||
},
|
||||
@@ -1712,21 +1709,12 @@
|
||||
"dashboard.projects.project.review-environment-metadata": {
|
||||
"message": "Merci de revoir les métadonnées environnementales"
|
||||
},
|
||||
"dashboard.projects.selection-bar.aria-label": {
|
||||
"message": "Actions des projets sélectionnés"
|
||||
},
|
||||
"dashboard.projects.selection-bar.selected-count": {
|
||||
"message": "{count, plural, one {# projet a été sélectionné} other {# projets ont été sélectionnés}}"
|
||||
},
|
||||
"dashboard.projects.table.id": {
|
||||
"message": "ID"
|
||||
},
|
||||
"dashboard.projects.table.name": {
|
||||
"message": "Nom"
|
||||
},
|
||||
"dashboard.projects.table.select-all-bulk-editable": {
|
||||
"message": "Sélectionnez tous les projets prenant en charge la modification en masse"
|
||||
},
|
||||
"dashboard.projects.table.status": {
|
||||
"message": "Statut"
|
||||
},
|
||||
@@ -2472,7 +2460,7 @@
|
||||
"message": "Ce déploiement du frontend de Modrinth n’a pas pu générer l’état à partir de l’API. Cela peut être dû à une panne ou à une erreur de configuration. Rebuild lorsque l’API sera disponible. Codes d’erreur : {errors} ; L’URL actuelle de l’API est : {url}"
|
||||
},
|
||||
"layout.banner.build-fail.ignore": {
|
||||
"message": "Ignorer"
|
||||
"message": "ignorer"
|
||||
},
|
||||
"layout.banner.build-fail.title": {
|
||||
"message": "Erreur lors de la génération de l’état à partir de l’API pendant la construction."
|
||||
@@ -2672,24 +2660,12 @@
|
||||
"layout.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Passer à Modrinth+"
|
||||
},
|
||||
"layout.publish.email-verification-required.description": {
|
||||
"message": "Vous devez vérifier votre adresse e-mail avant de publier sur Modrinth."
|
||||
},
|
||||
"layout.publish.email-verification-required.title": {
|
||||
"message": "Vérification de l'adresse e-mail requise"
|
||||
},
|
||||
"moderation.exclude-technical-review": {
|
||||
"message": "Exclure la révision technique"
|
||||
},
|
||||
"moderation.moderate": {
|
||||
"message": "Modérer"
|
||||
},
|
||||
"moderation.page.external-projects": {
|
||||
"message": "Projets externes"
|
||||
},
|
||||
"moderation.page.global-detail-traces": {
|
||||
"message": "Traces globales"
|
||||
},
|
||||
"moderation.page.projects": {
|
||||
"message": "Projets"
|
||||
},
|
||||
@@ -2699,45 +2675,6 @@
|
||||
"moderation.page.technicalReview": {
|
||||
"message": "Revue technique"
|
||||
},
|
||||
"modpack-scan-modal.failed": {
|
||||
"message": "Échec"
|
||||
},
|
||||
"modpack-scan-modal.load-versions-error": {
|
||||
"message": "Impossible de charger les versions : {error}"
|
||||
},
|
||||
"modpack-scan-modal.loading-versions": {
|
||||
"message": "Chargement des versions..."
|
||||
},
|
||||
"modpack-scan-modal.new-files": {
|
||||
"message": "Nouveaux fichiers"
|
||||
},
|
||||
"modpack-scan-modal.new-groups": {
|
||||
"message": "Nouveaux groupes"
|
||||
},
|
||||
"modpack-scan-modal.no-files": {
|
||||
"message": "Aucun fichier trouvé."
|
||||
},
|
||||
"modpack-scan-modal.not-scanned": {
|
||||
"message": "Non scanné"
|
||||
},
|
||||
"modpack-scan-modal.override-files": {
|
||||
"message": "Écraser les fichiers ({count})"
|
||||
},
|
||||
"modpack-scan-modal.pack-file-name": {
|
||||
"message": "Nom du fichier pack"
|
||||
},
|
||||
"modpack-scan-modal.scan-all-files": {
|
||||
"message": "Scanner tous les fichiers"
|
||||
},
|
||||
"modpack-scan-modal.scan-error": {
|
||||
"message": "Certains fichiers n'ont pas réussi à scanner : {error}"
|
||||
},
|
||||
"modpack-scan-modal.scanning": {
|
||||
"message": "Scan en cours..."
|
||||
},
|
||||
"modpack-scan-modal.title": {
|
||||
"message": "Scan du modpack ({scanned}/{total} fichiers)"
|
||||
},
|
||||
"muralpay.account-type.checking": {
|
||||
"message": "Compte courant"
|
||||
},
|
||||
@@ -3074,6 +3011,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Collection"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, one {téléchargement} other {téléchargements}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Rejoint"
|
||||
},
|
||||
@@ -3092,6 +3032,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Organisations"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {projet} other {projets}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Sauvegarde en cours..."
|
||||
},
|
||||
@@ -3278,107 +3221,20 @@
|
||||
"project.details.licensed": {
|
||||
"message": "License"
|
||||
},
|
||||
"project.download.base-game-version-incompatible-tooltip": {
|
||||
"message": "Cette version du jeu est incompatible avec le projet de base."
|
||||
},
|
||||
"project.download.base-loader-incompatible-tooltip": {
|
||||
"message": "Ce loader est incompatible avec le projet de base."
|
||||
},
|
||||
"project.download.compatible-version-title": {
|
||||
"message": "Versions compatibles"
|
||||
},
|
||||
"project.download.dependencies-title": {
|
||||
"message": "Dépendances"
|
||||
},
|
||||
"project.download.dependency-already-installed": {
|
||||
"message": "Cette dépendance est déjà installée"
|
||||
},
|
||||
"project.download.dependency-any-compatible": {
|
||||
"message": "N'importe quelle version compatible"
|
||||
},
|
||||
"project.download.dependency-conflicting": {
|
||||
"message": "Cette dépendance entre en conflit avec une autre dépendance"
|
||||
},
|
||||
"project.download.dependency-download-file": {
|
||||
"message": "Télécharger {filename}"
|
||||
},
|
||||
"project.download.dependency-download-file-with-size": {
|
||||
"message": "Télécharger {filename} ({size})"
|
||||
},
|
||||
"project.download.dependency-duplicate": {
|
||||
"message": "Cette dépendance est déjà incluse"
|
||||
},
|
||||
"project.download.dependency-missing-version": {
|
||||
"message": "Cette version de dépendance est indisponible"
|
||||
},
|
||||
"project.download.dependency-no-compatible-version": {
|
||||
"message": "Aucune version compatible n'est disponible pour cette dépendance"
|
||||
},
|
||||
"project.download.dependency-quilt-fabric-api": {
|
||||
"message": "L'API Fabric est ignorée pour Quilt"
|
||||
},
|
||||
"project.download.dependency-resource-pack-admonition": {
|
||||
"message": "Ce projet dépend d'un pack de ressources requis. Téléchargez-le et placez-le dans votre dossier {folder}."
|
||||
},
|
||||
"project.download.dependency-unavailable": {
|
||||
"message": "Cette dépendance ne peut pas être téléchargée"
|
||||
},
|
||||
"project.download.download": {
|
||||
"message": "Télécharger"
|
||||
},
|
||||
"project.download.download-as-zip": {
|
||||
"message": "Télécharger en fichier .zip"
|
||||
},
|
||||
"project.download.download-version": {
|
||||
"message": "Télécharger {version}"
|
||||
},
|
||||
"project.download.download-with-dependencies": {
|
||||
"message": "Télécharger avec les dépendances"
|
||||
},
|
||||
"project.download.download-with-recommended": {
|
||||
"message": "Télécharger avec les fichiers recommandés"
|
||||
},
|
||||
"project.download.download-with-recommended-as-zip": {
|
||||
"message": "Télécharger avec les fichiers recommandés en fichier .zip"
|
||||
},
|
||||
"project.download.duplicate-dependencies-hidden": {
|
||||
"message": "Les dépendances en double sont masquées"
|
||||
},
|
||||
"project.download.file-unavailable": {
|
||||
"message": "Ce fichier ne peut pas être téléchargé"
|
||||
},
|
||||
"project.download.game-version-unsupported-tooltip": {
|
||||
"message": "{title} ne supporte pas {gameVersion} pour {platform}"
|
||||
},
|
||||
"project.download.install-with-app": {
|
||||
"message": "Installer avec Modrinth App"
|
||||
},
|
||||
"project.download.manually": {
|
||||
"message": "Télécharger manuellement"
|
||||
},
|
||||
"project.download.no-app": {
|
||||
"message": "Vous n'avez pas Modrinth App ?"
|
||||
},
|
||||
"project.download.no-game-versions-found": {
|
||||
"message": "Aucune version de jeu trouvée"
|
||||
},
|
||||
"project.download.no-versions-available": {
|
||||
"message": "Aucune version disponible pour {gameVersion} et {platform}."
|
||||
},
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "{title} ne supporte pas {platform} pour {gameVersion}"
|
||||
},
|
||||
"project.download.recommended-title": {
|
||||
"message": "Recommandé"
|
||||
},
|
||||
"project.download.required-resource-pack-admonition": {
|
||||
"message": "Ce pack de données a également besoin d'un pack de ressources. Téléchargez-le et placez-le dans votre dossier {folder}."
|
||||
},
|
||||
"project.download.required-resource-pack-short": {
|
||||
"message": "Pack de ressources"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "Sélectionner la version du jeu"
|
||||
"message": "Recherchez une version du jeu..."
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "Sélectionnez la version du jeu"
|
||||
@@ -3392,15 +3248,6 @@
|
||||
"project.download.title": {
|
||||
"message": "Télécharger {title}"
|
||||
},
|
||||
"project.download.unknown-loader": {
|
||||
"message": "Loader inconnu"
|
||||
},
|
||||
"project.download.zip-failed-text": {
|
||||
"message": "Un ou plusieurs fichiers n'ont pas pu être téléchargés. Veuillez essayer à nouveau."
|
||||
},
|
||||
"project.download.zip-failed-title": {
|
||||
"message": "Impossible de télécharger les fichiers"
|
||||
},
|
||||
"project.environment.migration-no-permission.message": {
|
||||
"message": "Nous venons de remanier le système d'Environnements sur Modrinth et de nouvelles options sont désormais disponibles. Vous n'avez pas l'autorisation de modifier ces paramètres, veuillez informer un autre membre du projet que les métadonnées de l'environnement doivent être vérifiées."
|
||||
},
|
||||
@@ -3432,7 +3279,7 @@
|
||||
"message": "Galerie"
|
||||
},
|
||||
"project.license.error": {
|
||||
"message": "Le texte de la license n'a pas pu être obtenu."
|
||||
"message": "Le texte de la license n'a pas pu être obtenu"
|
||||
},
|
||||
"project.license.loading": {
|
||||
"message": "Chargement du texte de la license..."
|
||||
@@ -3534,7 +3381,7 @@
|
||||
"message": "Projet mis à jour"
|
||||
},
|
||||
"project.settings.general.name.description": {
|
||||
"message": "Évitez les préfixes, suffixes, parenthèses, ou les descriptions - juste le nom actuel du projet."
|
||||
"message": "Évitez les préfixes, suffixes, parenthèses, ou les descriptions - juste le nom actuel du projet"
|
||||
},
|
||||
"project.settings.general.name.placeholder.1": {
|
||||
"message": "ex. Nether Overhaul 2"
|
||||
@@ -3656,6 +3503,12 @@
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Visiter le tableau de contrôle des projets"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, one {# téléchargement} other {# téléchargements}}"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count, plural, one {# suivi} other {# suivis}}"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} a été archivé. {title} ne recevra plus de mises à jour jusqu'à ce que l'auteur du projet décide de désarchiver le projet."
|
||||
},
|
||||
@@ -3681,7 +3534,7 @@
|
||||
"message": "Incluez des liens et des images si possible et pertinentes. Les signalements vides ou insuffisants seront fermés et ignorés."
|
||||
},
|
||||
"report.body.title": {
|
||||
"message": "Veuillez fournir des informations supplémentaires concernant votre signalement"
|
||||
"message": "Veuillez fournir des informations supplémentaires concernant votre signalement."
|
||||
},
|
||||
"report.checking": {
|
||||
"message": "Vérification de {item}..."
|
||||
@@ -4202,6 +4055,9 @@
|
||||
"settings.account.security.email.title": {
|
||||
"message": "E-mail"
|
||||
},
|
||||
"settings.account.security.passkey.add": {
|
||||
"message": "Ajouter une clé d'accès"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.name.description": {
|
||||
"message": "Veillez à choisir un nom facile à retenir, afin de pouvoir identifier tę klucz d'accès plus tard."
|
||||
},
|
||||
@@ -4211,15 +4067,6 @@
|
||||
"settings.account.security.passkey.add-modal.name.placeholder": {
|
||||
"message": "Ma clé d'accès"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.title": {
|
||||
"message": "Ajouter une clé d'accès"
|
||||
},
|
||||
"settings.account.security.passkey.add.button": {
|
||||
"message": "Ajouter une clé d'accès"
|
||||
},
|
||||
"settings.account.security.passkey.button": {
|
||||
"message": "Gérer les clés d'accès"
|
||||
},
|
||||
"settings.account.security.passkey.description": {
|
||||
"message": "Gérez vos clés d'accès enregistrées ou ajoutez-en une nouvelle."
|
||||
},
|
||||
@@ -4230,7 +4077,7 @@
|
||||
"message": "Dernière utilisation il y a {ago}"
|
||||
},
|
||||
"settings.account.security.passkey.modal.loading": {
|
||||
"message": "Chargement des clés d'accès..."
|
||||
"message": "Chargement des clés d'accès…"
|
||||
},
|
||||
"settings.account.security.passkey.modal.never-used": {
|
||||
"message": "Jamais utilisée"
|
||||
@@ -4238,9 +4085,6 @@
|
||||
"settings.account.security.passkey.modal.no-passkeys": {
|
||||
"message": "Vous n'avez aucune clé d'accès enregistrée."
|
||||
},
|
||||
"settings.account.security.passkey.remove.button": {
|
||||
"message": "Supprimer la clé d'accès"
|
||||
},
|
||||
"settings.account.security.passkey.remove.description": {
|
||||
"message": "Cela supprimera définitivement la clé d'accès \"{name}\". Vous ne pourrez plus l'utiliser pour vous connecter."
|
||||
},
|
||||
@@ -4884,7 +4728,7 @@
|
||||
"message": "Voir la version"
|
||||
},
|
||||
"version.download.download-dependency": {
|
||||
"message": "Sélectionner une version à télécharger"
|
||||
"message": "Télécharger la dépendance"
|
||||
},
|
||||
"version.download.no-primary-file": {
|
||||
"message": "Erreur : aucun fichier principal trouvé"
|
||||
@@ -4895,9 +4739,6 @@
|
||||
"version.download.required-resource-pack": {
|
||||
"message": "Pack de ressources requis"
|
||||
},
|
||||
"version.download.version": {
|
||||
"message": "Télécharger {version} ({size})"
|
||||
},
|
||||
"version.edit.button": {
|
||||
"message": "Modifier"
|
||||
},
|
||||
|
||||
@@ -8,21 +8,6 @@
|
||||
"admin.billing.error.not-found": {
|
||||
"message": "משתמש לא קיים"
|
||||
},
|
||||
"analytics.action.add": {
|
||||
"message": "לְהוֹסִיף"
|
||||
},
|
||||
"analytics.action.cancel": {
|
||||
"message": "ביטול"
|
||||
},
|
||||
"analytics.breakdown.project": {
|
||||
"message": "פּרוֹיֶקט"
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.description": {
|
||||
"message": "רק צפיות והורדות שבוצעו דרך Modrinth נספרות לצורך מונטיזציה, והורדות מחייבות את המשתמשים להיות מחוברים לחשבונם."
|
||||
},
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "להציג את כל {count} הקווים בגרף?"
|
||||
},
|
||||
"app-marketing.download.description": {
|
||||
"message": "היישום השולחני שלנו זמין לכל הפלטפורמות. אנא בחר את הגרסה הרצויה."
|
||||
},
|
||||
@@ -1838,6 +1823,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "אוסף"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, one {download} other {downloads}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "הצטרף ב-"
|
||||
},
|
||||
@@ -1856,6 +1844,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "ארגונים"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {project} other {projects}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "שומר..."
|
||||
},
|
||||
@@ -2042,9 +2033,15 @@
|
||||
"project.download.no-app": {
|
||||
"message": "אין לכם את אפליקציית Modrinth?"
|
||||
},
|
||||
"project.download.no-versions-available": {
|
||||
"message": "אין גרסאות זמינות עבור {gameVersion} ו-{platform}."
|
||||
},
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "{title} אינו תומך ב-{platform} עבור {gameVersion}"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "חיפוש גרסאות משחק..."
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "בחירת גרסת משחק"
|
||||
},
|
||||
|
||||
@@ -23,20 +23,14 @@
|
||||
"analytics.breakdown.country": {
|
||||
"message": "Ország"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-download": {
|
||||
"message": "Függő projekt"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-type": {
|
||||
"message": "Függő projekt típusa"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "Letöltési ok"
|
||||
"message": "Letöltés oka"
|
||||
},
|
||||
"analytics.breakdown.download-source": {
|
||||
"message": "Letöltési forrás"
|
||||
"message": "Forrás letöltése"
|
||||
},
|
||||
"analytics.breakdown.game-version": {
|
||||
"message": "Játékverzió"
|
||||
"message": "Játék verziója"
|
||||
},
|
||||
"analytics.breakdown.generic": {
|
||||
"message": "Részletezés"
|
||||
@@ -84,13 +78,13 @@
|
||||
"message": "Megjegyzések"
|
||||
},
|
||||
"analytics.chart.controls.aria": {
|
||||
"message": "Statisztikai grafikonvezérlők, {activeCount}"
|
||||
"message": "Elemzési grafikonvezérlők, {activeCount}"
|
||||
},
|
||||
"analytics.chart.controls.button": {
|
||||
"message": "Vezérlők"
|
||||
"message": "Irányítások"
|
||||
},
|
||||
"analytics.chart.controls.dialog-aria": {
|
||||
"message": "Statisztikai grafikonok vezérlőelemei"
|
||||
"message": "Elemzési grafikonok vezérlőelemei"
|
||||
},
|
||||
"analytics.chart.controls.display": {
|
||||
"message": "Kijelző"
|
||||
@@ -117,7 +111,7 @@
|
||||
"message": "Válasszon elemeket az alábbi táblázatból az adatok megjelenítéséhez."
|
||||
},
|
||||
"analytics.chart.events.count-aria": {
|
||||
"message": "{count} statisztikai esemény"
|
||||
"message": "{count, plural, one {# analitikai esemény} other {# analitikai esemény}}"
|
||||
},
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>: {title}"
|
||||
@@ -143,29 +137,14 @@
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "Megjelenítse a grafikonon mind a {count} sort?"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "Az összes {itemType, select,\nproject {projekt}\ncountry {ország}\nmonetization {bevételi érték}\ndownloadSource {letöltési forrás}\ndownloadReason {letöltési ok}\nmember {tag}\nprojectVersion {projektverzió}\nloader {betöltő}\ngameVersion {játékverzió}\nother {elem}\n} megjelenítése a táblázatból"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "{count} {itemType, select,\nproject {projekt}\ncountry {ország}\nmonetization {bevételi érték}\ndownloadSource {letöltési forrás}\ndownloadReason {letöltési ok}\nmember {tag}\nprojectVersion {projektverzió}\nloader {betöltő}\ngameVersion {játékverzió}\nother {elem}\n} megjelenítése a táblázatból"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "{limit} {itemType, select,\nproject {projekt}\ncountry {ország}\nmonetization {bevételi érték}\ndownloadSource {letöltési forrás}\ndownloadReason {letöltési ok}\nmember {tag}\nprojectVersion {projektverzió}\nloader {betöltő}\ngameVersion {játékverzió}\nother {elem}\n} megjelenítése a táblázatból"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "A legjobb {count} {itemType, select,\nproject {projekt}\ncountry {ország}\nmonetization {bevételi érték}\ndownloadSource {letöltési forrás}\ndownloadReason {letöltési ok}\nmember {tag}\nprojectVersion {projektverzió}\nloader {betöltő}\ngameVersion {játékverzió}\nother {elem}\n} megjelenítése a táblázatból"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-on-project": {
|
||||
"message": "{project}-tól/től függ"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count} nap"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.hours": {
|
||||
"message": "{count, plural, one {#óra} other {# órák}}"
|
||||
"message": "{count} óra"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.minutes": {
|
||||
"message": "{count, plural, one {# perc} other {# percek}}"
|
||||
"message": "{count} perc"
|
||||
},
|
||||
"analytics.chart.tooltip.hide-entry": {
|
||||
"message": "{name} elrejtése a grafikonon"
|
||||
@@ -213,7 +192,7 @@
|
||||
"message": "A Modrinth weboldala"
|
||||
},
|
||||
"analytics.downloads.suffix": {
|
||||
"message": "letöltéssel"
|
||||
"message": "letöltés"
|
||||
},
|
||||
"analytics.empty.no-data": {
|
||||
"message": "Nincs elérhető adat"
|
||||
@@ -242,14 +221,11 @@
|
||||
"analytics.filter.search.countries": {
|
||||
"message": "Országok keresése..."
|
||||
},
|
||||
"analytics.filter.search.dependent-projects": {
|
||||
"message": "Projektek keresése..."
|
||||
},
|
||||
"analytics.filter.search.download-sources": {
|
||||
"message": "Letöltési források keresése..."
|
||||
},
|
||||
"analytics.filter.search.members": {
|
||||
"message": "Tagok keresése..."
|
||||
"message": "Tagok keresése... "
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "Projektverziók keresése..."
|
||||
@@ -270,10 +246,10 @@
|
||||
"message": "Megtekintések alakulása"
|
||||
},
|
||||
"analytics.group-by.1h": {
|
||||
"message": "1 ó"
|
||||
"message": "1ó"
|
||||
},
|
||||
"analytics.group-by.6h": {
|
||||
"message": "6 ó"
|
||||
"message": "6ó"
|
||||
},
|
||||
"analytics.group-by.date": {
|
||||
"message": "Dátum"
|
||||
@@ -309,7 +285,7 @@
|
||||
"message": "Év"
|
||||
},
|
||||
"analytics.loading.fetching-results": {
|
||||
"message": "Eredmények lekérése..."
|
||||
"message": "Eredmények lekérése…"
|
||||
},
|
||||
"analytics.options.loading": {
|
||||
"message": "Betöltés..."
|
||||
@@ -360,7 +336,7 @@
|
||||
"message": "Összes projekt"
|
||||
},
|
||||
"analytics.project.count": {
|
||||
"message": "{count, plural, one {# projekt} other {# projektek}}"
|
||||
"message": "{count} projekt"
|
||||
},
|
||||
"analytics.project.icon-alt": {
|
||||
"message": "{name} ikon"
|
||||
@@ -381,7 +357,7 @@
|
||||
"message": "Lebontás:"
|
||||
},
|
||||
"analytics.query.label.grouped-by": {
|
||||
"message": "Csoportosítás:"
|
||||
"message": "Csoportosítás"
|
||||
},
|
||||
"analytics.query.label.project": {
|
||||
"message": "Projekt:"
|
||||
@@ -407,12 +383,6 @@
|
||||
"analytics.stat.playtime-hours": {
|
||||
"message": "{hours} óra"
|
||||
},
|
||||
"analytics.stat.previous-period-comparison": {
|
||||
"message": "az előző időszakhoz képest"
|
||||
},
|
||||
"analytics.stat.previous-period-comparison-short": {
|
||||
"message": "az előzőhöz képest"
|
||||
},
|
||||
"analytics.stat.revenue": {
|
||||
"message": "Bevétel"
|
||||
},
|
||||
@@ -422,9 +392,6 @@
|
||||
"analytics.stat.unavailable": {
|
||||
"message": "N/A"
|
||||
},
|
||||
"analytics.stat.unavailable-tooltip": {
|
||||
"message": "A statisztika az aktuális lekérdezéshez nem áll rendelkezésre"
|
||||
},
|
||||
"analytics.stat.views": {
|
||||
"message": "Megtekintések"
|
||||
},
|
||||
@@ -434,11 +401,8 @@
|
||||
"analytics.table.csv.header.playtime-seconds": {
|
||||
"message": "Játékidő (másodpercben)"
|
||||
},
|
||||
"analytics.table.csv.selected-range": {
|
||||
"message": "Kiválasztott hossz"
|
||||
},
|
||||
"analytics.table.duration.days": {
|
||||
"message": "{count} nap"
|
||||
"message": "{count, plural, one {# day} other {# days}}"
|
||||
},
|
||||
"analytics.table.duration.hours": {
|
||||
"message": "{count, plural, one {# hour} other {# hours}}"
|
||||
@@ -452,48 +416,15 @@
|
||||
"analytics.table.export.grouped": {
|
||||
"message": "{groupBy} szerint csoportosítva"
|
||||
},
|
||||
"analytics.table.pagination.summary": {
|
||||
"message": "{start}–{end} / {total}"
|
||||
},
|
||||
"analytics.table.search.placeholder": {
|
||||
"message": "Keresés..."
|
||||
},
|
||||
"analytics.threshold.countries-above": {
|
||||
"message": "Országok több, mint"
|
||||
},
|
||||
"analytics.threshold.country-downloads-aria": {
|
||||
"message": "Országonkénti letöltési korlát"
|
||||
},
|
||||
"analytics.threshold.game-version-downloads-aria": {
|
||||
"message": "A játékverziók letöltésének korlátja"
|
||||
},
|
||||
"analytics.threshold.game-versions-above": {
|
||||
"message": "Játékverziók több, mint"
|
||||
},
|
||||
"analytics.threshold.project-downloads-aria": {
|
||||
"message": "A projektek letöltések korlátja"
|
||||
},
|
||||
"analytics.threshold.project-version-downloads-aria": {
|
||||
"message": "A projektverziók letöltésének korlátja"
|
||||
},
|
||||
"analytics.threshold.project-versions-above": {
|
||||
"message": "Projektverziók több, mint"
|
||||
},
|
||||
"analytics.threshold.projects-above": {
|
||||
"message": "Projektek több, mint"
|
||||
},
|
||||
"analytics.title": {
|
||||
"message": "Statisztika"
|
||||
},
|
||||
"analytics.value.monetized": {
|
||||
"message": "Bevételszerzés"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "Semelyik"
|
||||
},
|
||||
"analytics.value.no-dependent-tooltip": {
|
||||
"message": "Letöltve függőségeken kívüli okokból"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "Nincs"
|
||||
},
|
||||
@@ -503,9 +434,6 @@
|
||||
"analytics.value.unknown": {
|
||||
"message": "Ismeretlen"
|
||||
},
|
||||
"analytics.value.unknown-dependent-tooltip": {
|
||||
"message": "Nincsenek metaadatok annak meghatározására, hogy ez a letöltés melyik függő projekthez tartozik."
|
||||
},
|
||||
"analytics.value.unmonetized": {
|
||||
"message": "Nem bevételszerző"
|
||||
},
|
||||
@@ -719,72 +647,12 @@
|
||||
"auth.authorize.authorize-app-name": {
|
||||
"message": "{appName} Engedélyezése"
|
||||
},
|
||||
"auth.authorize.error.missing-parameters": {
|
||||
"message": "Hiányoznak a kötelező OAuth lekérdezési paraméterek."
|
||||
},
|
||||
"auth.authorize.error.no-redirect-url": {
|
||||
"message": "Átirányítási útvonal nem található a válaszban"
|
||||
},
|
||||
"auth.authorize.errro-title": {
|
||||
"message": "Egy hiba történt"
|
||||
},
|
||||
"auth.authorize.redirect-url": {
|
||||
"message": "Át leszel irányítva ide: <redirect-url>{url}</redirect-url>"
|
||||
},
|
||||
"auth.continue-with-provider": {
|
||||
"message": "Folytatás {provider}-lel/-al/-el"
|
||||
},
|
||||
"auth.create-account.age-requirement.warning-title": {
|
||||
"message": "Korhatár"
|
||||
},
|
||||
"auth.create-account.complete-sign-up": {
|
||||
"message": "Regisztráció befejezése"
|
||||
},
|
||||
"auth.create-account.date-of-birth.invalid.text": {
|
||||
"message": "Kérjük, adjon meg egy érvényes születési dátumot. Az év nem lehet 0000."
|
||||
},
|
||||
"auth.create-account.date-of-birth.invalid.title": {
|
||||
"message": "Érvénytelen születési dátum"
|
||||
},
|
||||
"auth.create-account.date-of-birth.label": {
|
||||
"message": "Születési dátum"
|
||||
},
|
||||
"auth.create-account.date-of-birth.placeholder": {
|
||||
"message": "Válaszd ki a születési dátumod"
|
||||
},
|
||||
"auth.create-account.date-of-birth.required.text": {
|
||||
"message": "Kérjük add meg a születési dátumod mielőtt továbblépsz."
|
||||
},
|
||||
"auth.create-account.date-of-birth.required.title": {
|
||||
"message": "A születési dátumod megadása kötelező"
|
||||
},
|
||||
"auth.create-account.date-of-birth.under13-helper": {
|
||||
"message": "Nem felelsz meg a Modrinth fiók létrehozásához szükséges korhatárnak."
|
||||
},
|
||||
"auth.create-account.info-panel.source-code-link": {
|
||||
"message": "Releváns forráskód"
|
||||
},
|
||||
"auth.create-account.info-panel.text": {
|
||||
"message": "Nem tároljuk a születési dátumodat. Kizárólag a regisztráció során használjuk fel a COPPA-megfelelőség ellenőrzésére."
|
||||
},
|
||||
"auth.create-account.page-title": {
|
||||
"message": "Fiók létrehozása"
|
||||
},
|
||||
"auth.create-account.security-check.label": {
|
||||
"message": "Biztonsági ellenőrzés"
|
||||
},
|
||||
"auth.create-account.subscribe.label": {
|
||||
"message": "Kérek Emaileket a menő dolgokról amiken a Modrinth dolgozik"
|
||||
},
|
||||
"auth.create-account.title": {
|
||||
"message": "Fiók létrehozása"
|
||||
},
|
||||
"auth.create-account.username.label": {
|
||||
"message": "Felhasználónév"
|
||||
},
|
||||
"auth.create-account.username.placeholder": {
|
||||
"message": "Írd be felhasználóneved"
|
||||
},
|
||||
"auth.reset-password.method-choice.action": {
|
||||
"message": "Visszaállítási e-mail küldése"
|
||||
},
|
||||
@@ -818,69 +686,24 @@
|
||||
"auth.reset-password.title.long": {
|
||||
"message": "Jelszavad visszaállítása"
|
||||
},
|
||||
"auth.sign-in.2fa.description": {
|
||||
"message": "Írd be a 6-jegyű kódod a hitelesítő alkalmazásodból, vagy írd be az egyik biztonsági kódodat."
|
||||
},
|
||||
"auth.sign-in.2fa.label": {
|
||||
"message": "Kétlépcsős bejelentkezés"
|
||||
},
|
||||
"auth.sign-in.2fa.placeholder": {
|
||||
"message": "Kód beírása..."
|
||||
},
|
||||
"auth.sign-in.continue-with-email": {
|
||||
"message": "Továbblépés Email-lel"
|
||||
},
|
||||
"auth.sign-in.continue-with-passkey": {
|
||||
"message": "Továbblépés biztonsági kulccsal"
|
||||
},
|
||||
"auth.sign-in.create-account": {
|
||||
"message": "Regisztrálás"
|
||||
},
|
||||
"auth.sign-in.forgot-password": {
|
||||
"message": "Elfelejtettem a jelszavam"
|
||||
},
|
||||
"auth.sign-in.last-sign-in": {
|
||||
"message": "Utoljára használva"
|
||||
},
|
||||
"auth.sign-in.no-account": {
|
||||
"message": "Nincs fiókja?"
|
||||
},
|
||||
"auth.sign-in.sign-in-with": {
|
||||
"message": "Bejelentkezés a Modrinthbe"
|
||||
},
|
||||
"auth.sign-in.title": {
|
||||
"message": "Bejelentkezés"
|
||||
},
|
||||
"auth.sign-up.age-requirement.warning-title": {
|
||||
"message": "Korhatár"
|
||||
},
|
||||
"auth.sign-up.continue-with-email": {
|
||||
"message": "Folytatás Email-lel"
|
||||
},
|
||||
"auth.sign-up.legal-dislaimer": {
|
||||
"message": "Fiók létrehozásával elfogadod a Modrinth <terms-link>Felhasználási feltételeit</terms-link> és <privacy-policy-link>Adatvédelmi irányelveit</privacy-policy-link>."
|
||||
},
|
||||
"auth.sign-up.show-fewer-options": {
|
||||
"message": "Kevesebb opció mutatása"
|
||||
},
|
||||
"auth.sign-up.show-other-options": {
|
||||
"message": "Több opció mutatása"
|
||||
},
|
||||
"auth.sign-up.sign-in-option.title": {
|
||||
"message": "Már van fiókod?"
|
||||
},
|
||||
"auth.sign-up.title": {
|
||||
"message": "Regisztráció"
|
||||
},
|
||||
"auth.sign-up.title.sign-up-with": {
|
||||
"message": "Fiók Létrehozása"
|
||||
},
|
||||
"auth.verify-email.action.account-settings": {
|
||||
"message": "Fiókbeállítások"
|
||||
},
|
||||
"auth.verify-email.action.discover-mods": {
|
||||
"message": "Modok felfedezése"
|
||||
},
|
||||
"auth.verify-email.already-verified.description": {
|
||||
"message": "Az email már hítelesítve van!"
|
||||
},
|
||||
@@ -899,15 +722,6 @@
|
||||
"auth.verify-email.failed-verification.title": {
|
||||
"message": "Az e-mail cím hitelesítés sikertelen"
|
||||
},
|
||||
"auth.verify-email.notification.email-sent.description": {
|
||||
"message": "Egy Emailt kapott egy linkkel fiókja hitelesítéséhez ezen az Email címen: {email}."
|
||||
},
|
||||
"auth.verify-email.notification.email-sent.title": {
|
||||
"message": "Email elküldve"
|
||||
},
|
||||
"auth.verify-email.notification.error-occurred.title": {
|
||||
"message": "Egy hiba történt"
|
||||
},
|
||||
"auth.verify-email.post-verification.description": {
|
||||
"message": "Az e-mail cím sikeresen megerősítve!"
|
||||
},
|
||||
@@ -1224,7 +1038,7 @@
|
||||
"message": "Társulati linkek keresése..."
|
||||
},
|
||||
"dashboard.analytics.from-projects": {
|
||||
"message": "{count} {count, plural, one {projektből} other {projektekből}}"
|
||||
"message": "{count} projektből"
|
||||
},
|
||||
"dashboard.analytics.total-downloads": {
|
||||
"message": "Összes letöltés"
|
||||
@@ -1520,21 +1334,6 @@
|
||||
"dashboard.creator-withdraw-modal.withdraw-limit-used": {
|
||||
"message": "Elérted a(z) <b>{withdrawLimit}</b> kifizetési limitet. További kifizetésekhez ki kell töltened egy adózási űrlapot."
|
||||
},
|
||||
"dashboard.discord-roles.banner.body": {
|
||||
"message": "Jogosult vagy a következő rangokra: {roles}. Kapcsold össze a Discord fiókodat a Modrinth-en keresztül, és automatikusan szinkronizáljuk őket."
|
||||
},
|
||||
"dashboard.discord-roles.banner.cta": {
|
||||
"message": "Discord Linkelése"
|
||||
},
|
||||
"dashboard.discord-roles.banner.title": {
|
||||
"message": "Discord Rangjaid Beváltása"
|
||||
},
|
||||
"dashboard.discord-roles.role.big-creator": {
|
||||
"message": "1M+ letöltést"
|
||||
},
|
||||
"dashboard.discord-roles.role.creator": {
|
||||
"message": "Készítő"
|
||||
},
|
||||
"dashboard.head-title": {
|
||||
"message": "Irányítópult"
|
||||
},
|
||||
@@ -1556,9 +1355,6 @@
|
||||
"dashboard.organizations.empty.cta": {
|
||||
"message": "Hozz létre egy szervezetet!"
|
||||
},
|
||||
"dashboard.organizations.error.fetch": {
|
||||
"message": "Nem sikerült lekérni a szervezeteket"
|
||||
},
|
||||
"dashboard.organizations.member-count": {
|
||||
"message": "{count} tag"
|
||||
},
|
||||
@@ -1646,9 +1442,6 @@
|
||||
"dashboard.projects.project.review-environment-metadata": {
|
||||
"message": "Kérlek ellenőrizd a környezeti metaadatokat"
|
||||
},
|
||||
"dashboard.projects.selection-bar.selected-count": {
|
||||
"message": "{count} projekt kiválasztva"
|
||||
},
|
||||
"dashboard.projects.table.id": {
|
||||
"message": "Azonosító"
|
||||
},
|
||||
@@ -2019,7 +1812,7 @@
|
||||
"message": "Igen. A Modrinth Hosting összes szerverén DDoS-védelem működik, egyes helyszíneken akár 17 Tbps kapacitással."
|
||||
},
|
||||
"hosting-marketing.faq.heading": {
|
||||
"message": "Gyakran ismételt kérdések"
|
||||
"message": "Gyakori kérdések"
|
||||
},
|
||||
"hosting-marketing.faq.how-fast": {
|
||||
"message": "Milyen gyorsak a Modrinth Hosting szerverek?"
|
||||
@@ -2039,9 +1832,6 @@
|
||||
"hosting-marketing.faq.location": {
|
||||
"message": "Hol találhatók a Modrinth Hosting szerverei? Kiválaszthatom a régiót?"
|
||||
},
|
||||
"hosting-marketing.faq.location.answer": {
|
||||
"message": "Jelenleg Észak-Amerikában, Európában, Délkelet-Ázsiában és Ausztráliában rendelkezünk szerverekkel, amelyeket vásárláskor kiválaszthatsz. A jövőben további régiók érkeznek! Ha régiót szeretnél váltani, kérlek vedd fel a kapcsolatot az ügyfélszolgálattal."
|
||||
},
|
||||
"hosting-marketing.faq.versions-loaders": {
|
||||
"message": "Melyik Minecraft verziók és betöltők használhatók?"
|
||||
},
|
||||
@@ -2315,9 +2105,6 @@
|
||||
"landing.subheading": {
|
||||
"message": "Fedezz fel, játssz és ossz meg Minecraft-tartalmakat a közösség számára létrehozott nyílt forráskódú platformunkon."
|
||||
},
|
||||
"layout.action.analytics-events": {
|
||||
"message": "Statisztikai események"
|
||||
},
|
||||
"layout.action.change-theme": {
|
||||
"message": "Téma"
|
||||
},
|
||||
@@ -2472,7 +2259,7 @@
|
||||
"message": "Modrinth infórmáció"
|
||||
},
|
||||
"layout.footer.open-source": {
|
||||
"message": "A Modrinth <github-link>nyílt forráskódú</github-link>."
|
||||
"message": "A Modrinth <github-link>nyílt forráskódú</github-link>"
|
||||
},
|
||||
"layout.footer.products": {
|
||||
"message": "Termékek"
|
||||
@@ -2580,7 +2367,7 @@
|
||||
"message": "Frissíts a Modrinth+-ra"
|
||||
},
|
||||
"moderation.moderate": {
|
||||
"message": "Moderálás"
|
||||
"message": "Moderált"
|
||||
},
|
||||
"moderation.page.external-projects": {
|
||||
"message": "Külső projektek"
|
||||
@@ -2594,42 +2381,6 @@
|
||||
"moderation.page.technicalReview": {
|
||||
"message": "Technikai áttekintés"
|
||||
},
|
||||
"modpack-scan-modal.failed": {
|
||||
"message": "Sikertelen"
|
||||
},
|
||||
"modpack-scan-modal.load-versions-error": {
|
||||
"message": "Nem sikerült a verziókat betölteni: {error}"
|
||||
},
|
||||
"modpack-scan-modal.loading-versions": {
|
||||
"message": "Verziók betöltése..."
|
||||
},
|
||||
"modpack-scan-modal.new-files": {
|
||||
"message": "Új Fájlok"
|
||||
},
|
||||
"modpack-scan-modal.no-files": {
|
||||
"message": "Nem találhatók fájlok."
|
||||
},
|
||||
"modpack-scan-modal.not-scanned": {
|
||||
"message": "Nem lett beolvasva"
|
||||
},
|
||||
"modpack-scan-modal.override-files": {
|
||||
"message": "Fájlok felülírása ({count})"
|
||||
},
|
||||
"modpack-scan-modal.pack-file-name": {
|
||||
"message": "Csomag fájlneve"
|
||||
},
|
||||
"modpack-scan-modal.scan-all-files": {
|
||||
"message": "Összes fájl beolvasása"
|
||||
},
|
||||
"modpack-scan-modal.scan-error": {
|
||||
"message": "Pár fájlt nem sikerült beolvasni: {error}"
|
||||
},
|
||||
"modpack-scan-modal.scanning": {
|
||||
"message": "Beolvasás..."
|
||||
},
|
||||
"modpack-scan-modal.title": {
|
||||
"message": "Modcsomag vizsgálat ({scanned}/{total} fájlból)"
|
||||
},
|
||||
"muralpay.account-type.checking": {
|
||||
"message": "Ellenőrzés"
|
||||
},
|
||||
@@ -2898,7 +2649,7 @@
|
||||
"message": "Nézd át jól a pénztárca címedet. Az egyenleg rossz címre lesz küldve az nem szerezhető vissza."
|
||||
},
|
||||
"organization.settings.projects.edit-links.affected-projects": {
|
||||
"message": "A módosítások {count, plural, one {# projktre} other {# projektekre}} fognak vonatkozni."
|
||||
"message": "A módosítások {count} projektre vonatkoznak."
|
||||
},
|
||||
"profile.bio.fallback.creator": {
|
||||
"message": "Egy Modrinth fejlesztő."
|
||||
@@ -2906,9 +2657,6 @@
|
||||
"profile.bio.fallback.user": {
|
||||
"message": "Egy Modrinth felhasználó."
|
||||
},
|
||||
"profile.button.analytics": {
|
||||
"message": "Felhasználó statisztikáinak megtekintése"
|
||||
},
|
||||
"profile.button.billing": {
|
||||
"message": "Felhasználói számlázás kezelése"
|
||||
},
|
||||
@@ -2928,7 +2676,7 @@
|
||||
"message": "Beállítás társult vállalkozás ként"
|
||||
},
|
||||
"profile.collection.projects-count": {
|
||||
"message": "{count, plural, one {# projekt} other {# projektek}}"
|
||||
"message": "{count} projekt"
|
||||
},
|
||||
"profile.details.label.auth-providers": {
|
||||
"message": "Auth szolgáltatók"
|
||||
@@ -2966,6 +2714,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Gyűjtemény"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} letöltés"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Csatlakozott"
|
||||
},
|
||||
@@ -2984,6 +2735,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Szervezetek"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} projekt"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Mentés..."
|
||||
},
|
||||
@@ -2993,14 +2747,8 @@
|
||||
"profile.meta.description-with-bio": {
|
||||
"message": "{bio} - Töltsd le {username} projektjeit a Modrinthon"
|
||||
},
|
||||
"profile.official-account": {
|
||||
"message": "Hivatalos Modrinth fiók"
|
||||
},
|
||||
"profile.official-account.bio": {
|
||||
"message": "A hivatalos Modrinth fiók. Kérj segítséget a <support-link></support-link> oldalon, vagy e-mailben: <email></email>"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "{count, plural, one {<stat>{count}</stat>projekt követő} other {<stat>{count}</stat> projekt követők}}"
|
||||
"message": "<stat>{count}</stat> projektkövető"
|
||||
},
|
||||
"profile.user-id": {
|
||||
"message": "Felhasználói azonosító: {id}"
|
||||
@@ -3162,112 +2910,28 @@
|
||||
"message": "Új gyűjtemény létrehozása"
|
||||
},
|
||||
"project.collections.none-found": {
|
||||
"message": "Nem találhatók gyűjtemények."
|
||||
"message": "Nem található gyűjtemény"
|
||||
},
|
||||
"project.description.title": {
|
||||
"message": "Leírás"
|
||||
},
|
||||
"project.details.licensed": {
|
||||
"message": "Licenszelt"
|
||||
},
|
||||
"project.download.base-game-version-incompatible-tooltip": {
|
||||
"message": "Ez a játékverzió nem kompatibilis az alap projekttel."
|
||||
},
|
||||
"project.download.base-loader-incompatible-tooltip": {
|
||||
"message": "A futtató nem kompatibilis az alap projekttel."
|
||||
},
|
||||
"project.download.compatible-version-title": {
|
||||
"message": "Kompatibilis verziók"
|
||||
},
|
||||
"project.download.dependencies-title": {
|
||||
"message": "Függőségek (ezek kötelezőek a mod futásához)"
|
||||
},
|
||||
"project.download.dependency-already-installed": {
|
||||
"message": "A függőség már le van telepítva"
|
||||
},
|
||||
"project.download.dependency-any-compatible": {
|
||||
"message": "Bármelyik kompatibilis"
|
||||
},
|
||||
"project.download.dependency-conflicting": {
|
||||
"message": "Ez a függőség keresztbe áll egy másik függőséggel"
|
||||
},
|
||||
"project.download.dependency-download-file": {
|
||||
"message": "{filename} letöltése"
|
||||
},
|
||||
"project.download.dependency-download-file-with-size": {
|
||||
"message": "{filename} letöltése ({size})"
|
||||
},
|
||||
"project.download.dependency-duplicate": {
|
||||
"message": "Ez a függőség már be van számítva a telepítésbe"
|
||||
},
|
||||
"project.download.dependency-missing-version": {
|
||||
"message": "A függőségnek ezen verziója nem elérhető"
|
||||
},
|
||||
"project.download.dependency-no-compatible-version": {
|
||||
"message": "Nincs kompatibilis verziója ennek a függőségnek"
|
||||
},
|
||||
"project.download.dependency-quilt-fabric-api": {
|
||||
"message": "A Fabric API ki van hagyva a Quilt futtatónak"
|
||||
},
|
||||
"project.download.dependency-resource-pack-admonition": {
|
||||
"message": "Ennek a projektnek van egy függősége, egy kötelező forráscsomaggal. Töltsd le, majd tedd a {folder} mappába."
|
||||
},
|
||||
"project.download.dependency-unavailable": {
|
||||
"message": "Ez a függőség nem letölthető"
|
||||
},
|
||||
"project.download.download": {
|
||||
"message": "Letöltés"
|
||||
},
|
||||
"project.download.download-as-zip": {
|
||||
"message": "Letöltés 「.zip」 fájlként"
|
||||
},
|
||||
"project.download.download-version": {
|
||||
"message": "{version} letöltése"
|
||||
},
|
||||
"project.download.download-with-dependencies": {
|
||||
"message": "Letöltés a függőségekkel"
|
||||
},
|
||||
"project.download.download-with-recommended": {
|
||||
"message": "Letöltés az ajánlottakkal"
|
||||
},
|
||||
"project.download.download-with-recommended-as-zip": {
|
||||
"message": "Letöltés az ajánlottokkal 「.zip」 formátumban"
|
||||
},
|
||||
"project.download.duplicate-dependencies-hidden": {
|
||||
"message": "A duplázott függőségek el vannak rejtve"
|
||||
},
|
||||
"project.download.file-unavailable": {
|
||||
"message": "Ez a fájl nem letölthető"
|
||||
"message": "Licensz:"
|
||||
},
|
||||
"project.download.game-version-unsupported-tooltip": {
|
||||
"message": "A(z) {title} nem támogatja ezt a verziót: {platform} {gameVersion}"
|
||||
},
|
||||
"project.download.install-with-app": {
|
||||
"message": "Letöltés a Modrinth Appal"
|
||||
},
|
||||
"project.download.manually": {
|
||||
"message": "Letöltés manuálisan"
|
||||
},
|
||||
"project.download.no-app": {
|
||||
"message": "Nincs meg a Modrinth App? "
|
||||
},
|
||||
"project.download.no-game-versions-found": {
|
||||
"message": "Játékverzió nem található"
|
||||
"project.download.no-versions-available": {
|
||||
"message": "Nem érhető el verzió ehhez: {platform} {gameVersion}"
|
||||
},
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "A(z) {title} nem támogatja ezt a verziót: {platform} {gameVersion}"
|
||||
},
|
||||
"project.download.recommended-title": {
|
||||
"message": "Ajánlott"
|
||||
},
|
||||
"project.download.required-resource-pack-admonition": {
|
||||
"message": "Ennek az adatcsomagnak kell egy forráscsomag az üzemeléshez. Töltsd le, majd tedd a {folder} mappába."
|
||||
},
|
||||
"project.download.required-resource-pack-short": {
|
||||
"message": "Forráscsomag"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "Játékverzió kiválasztása"
|
||||
"message": "Játékverziók keresése..."
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "Játékverzió kiválasztása"
|
||||
@@ -3281,15 +2945,6 @@
|
||||
"project.download.title": {
|
||||
"message": "{title} letöltése"
|
||||
},
|
||||
"project.download.unknown-loader": {
|
||||
"message": "Ismeretlen futtató"
|
||||
},
|
||||
"project.download.zip-failed-text": {
|
||||
"message": "Egy, vagy több fájlt nem sikerült letölteni. Kérjük próbálkozz újra."
|
||||
},
|
||||
"project.download.zip-failed-title": {
|
||||
"message": "A fájlokat nem sikerült letölteni"
|
||||
},
|
||||
"project.environment.migration-no-permission.message": {
|
||||
"message": "Átdolgoztuk a Modrinth Környezetek rendszerét, és új beállítások érhetők el. Nincs jogosultságod módosítani ezeket a beállításokat, de kérlek, jelezd a projekt egy másik tagjának, hogy a környezet metaadatait ellenőrizni kell."
|
||||
},
|
||||
@@ -3332,12 +2987,6 @@
|
||||
"project.moderation.admonition.approved.body.private": {
|
||||
"message": "A projekted privát, vagyis csak te és az általad meghívott személyek férhetnek hozzá."
|
||||
},
|
||||
"project.moderation.admonition.approved.body.public": {
|
||||
"message": "A projekted publikus, és felfedezhető a Modrinthen."
|
||||
},
|
||||
"project.moderation.admonition.approved.body.unlisted": {
|
||||
"message": "A projekted nem listázott, ami azt jelenti, hogy csak a linkjével érhető el, és nem felfedezhető a Modrinthen."
|
||||
},
|
||||
"project.moderation.admonition.approved.body.visibility-message": {
|
||||
"message": "A projekt láthatóságát a projekt <visibility-settings-link>láthatósági beállításaiban</visibility-settings-link> módosíthatod."
|
||||
},
|
||||
@@ -3428,48 +3077,21 @@
|
||||
"project.settings.general.url.title": {
|
||||
"message": "Link"
|
||||
},
|
||||
"project.settings.permissions.bad-proof.description": {
|
||||
"message": "A Modrinth moderátori csapata elutasította az általad bizonyos külső tartalmakhoz megadott engedélyezési információkat. Kérlek tekintsd át az alábbi elutasított elemeket, és nyújts be elfogadható igazolást, vagy távolítsd el a tartalmat."
|
||||
},
|
||||
"project.settings.permissions.collapse-all": {
|
||||
"message": "Összes becsukása"
|
||||
},
|
||||
"project.settings.permissions.completed.description": {
|
||||
"message": "Minden külső tartalomhoz megadva vannak a felhasználási engedélyek és a forrásmegjelölések."
|
||||
},
|
||||
"project.settings.permissions.completed.title": {
|
||||
"message": "Engedélyek beállítva!"
|
||||
},
|
||||
"project.settings.permissions.empty-state.heading": {
|
||||
"message": "Kész is van!"
|
||||
},
|
||||
"project.settings.permissions.expand-all": {
|
||||
"message": "Összes kinyitása"
|
||||
},
|
||||
"project.settings.permissions.learn-more": {
|
||||
"message": "További információ"
|
||||
},
|
||||
"project.settings.permissions.search-placeholder": {
|
||||
"message": "Keresés {count} projekt között..."
|
||||
},
|
||||
"project.settings.permissions.sort.most-files": {
|
||||
"message": "Legtöbb fájl"
|
||||
},
|
||||
"project.settings.permissions.sort.recently-edited": {
|
||||
"message": "Nemrég szerkesztett"
|
||||
},
|
||||
"project.settings.permissions.sort.rejected": {
|
||||
"message": "Elutasítva"
|
||||
},
|
||||
"project.settings.permissions.sort.status": {
|
||||
"message": "Állapot"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Beállítások"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Projektek irányítópult megnyitása"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count} letöltés"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "A(z) {title} archiválásra került. A(z) {title} nem kap további frissítéseket, kivéve, ha a fejlesztő úgy dönt, hogy visszavonja a projekt archiválását."
|
||||
},
|
||||
@@ -3983,9 +3605,6 @@
|
||||
"settings.account.security.email.title": {
|
||||
"message": "E-mail cím"
|
||||
},
|
||||
"settings.account.security.passkey.modal.added": {
|
||||
"message": "Hozzá adva {ago}"
|
||||
},
|
||||
"settings.account.security.password.action.add": {
|
||||
"message": "Jelszó hozzáadása"
|
||||
},
|
||||
@@ -4284,7 +3903,7 @@
|
||||
"message": "Lejár: {month}/{year}"
|
||||
},
|
||||
"settings.billing.payment_method.none": {
|
||||
"message": "Nem adtál hozzá fizetési módokat."
|
||||
"message": "Nem adtál hozzá fizetési módokat"
|
||||
},
|
||||
"settings.billing.payment_method.primary": {
|
||||
"message": "Elsődleges"
|
||||
@@ -4341,7 +3960,7 @@
|
||||
"message": "{gb} GB Swap"
|
||||
},
|
||||
"settings.billing.pyro_subscription.description": {
|
||||
"message": "Modirinth szerver feliratkozásaid kezelése."
|
||||
"message": "Modirinth szerver feliratkozások kezelése"
|
||||
},
|
||||
"settings.billing.pyro_subscription.title": {
|
||||
"message": "Modrinth Szerver Előfizetések"
|
||||
@@ -4359,7 +3978,7 @@
|
||||
"message": "Feliratkozás"
|
||||
},
|
||||
"settings.billing.subscription.description": {
|
||||
"message": "Modirinth feliratkozásaid kezelése."
|
||||
"message": "Modirinth feliratkozások kezelése"
|
||||
},
|
||||
"settings.billing.subscription.title": {
|
||||
"message": "Előfizetések"
|
||||
@@ -4377,7 +3996,7 @@
|
||||
"message": "A fejlesztői mód letiltása"
|
||||
},
|
||||
"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."
|
||||
"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 ötszö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."
|
||||
@@ -4589,12 +4208,6 @@
|
||||
"ui.newsletter-button.tooltip": {
|
||||
"message": "Feliratkozás a Modrinth hírlevelére"
|
||||
},
|
||||
"version.confirm-delete.title": {
|
||||
"message": "Biztos, hogy le akarod törölni ezt a verziót?"
|
||||
},
|
||||
"version.download.no-primary-file": {
|
||||
"message": "Hiba: Nem található az elsődleges fájl"
|
||||
},
|
||||
"version.environment.none.description": {
|
||||
"message": "A környezet erre a verzióra nem lett megadva."
|
||||
},
|
||||
@@ -4606,14 +4219,5 @@
|
||||
},
|
||||
"version.environment.unknown.title": {
|
||||
"message": "Ismeretlen környezet"
|
||||
},
|
||||
"version.section.content.dev-info.gradle-snippet": {
|
||||
"message": "build.gradle:"
|
||||
},
|
||||
"version.supplementary-resources.copy-hash-sha1": {
|
||||
"message": "SHA-1 Másolása"
|
||||
},
|
||||
"version.supplementary-resources.copy-hash-sha512": {
|
||||
"message": "SHA-512 Másolása"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2219,6 +2219,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Koleksi"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, other {pengunduhan}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Telah bergabung"
|
||||
},
|
||||
@@ -2237,6 +2240,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Organisasi"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, other {proyek}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Menyimpan..."
|
||||
},
|
||||
@@ -2423,9 +2429,15 @@
|
||||
"project.download.no-app": {
|
||||
"message": "Tidak memiliki Modrinth App?"
|
||||
},
|
||||
"project.download.no-versions-available": {
|
||||
"message": "Tidak ada versi tersedia untuk {gameVersion} dan {platform}."
|
||||
},
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "{title} tidak mendukung {platform} untuk {gameVersion}"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "Cari versi permainan..."
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "Pilih versi permainan"
|
||||
},
|
||||
|
||||
@@ -512,9 +512,6 @@
|
||||
"analytics.value.unknown": {
|
||||
"message": "Sconosciuto"
|
||||
},
|
||||
"analytics.value.unknown-dependent-tooltip": {
|
||||
"message": "Questo download non dispone di metadati per associarlo a un progetto."
|
||||
},
|
||||
"analytics.value.unmonetized": {
|
||||
"message": "Non monetizzato"
|
||||
},
|
||||
@@ -1703,21 +1700,12 @@
|
||||
"dashboard.projects.project.review-environment-metadata": {
|
||||
"message": "Si prega di rivedere i metadati d'ambiente"
|
||||
},
|
||||
"dashboard.projects.selection-bar.aria-label": {
|
||||
"message": "Azioni dei progetti selezionati"
|
||||
},
|
||||
"dashboard.projects.selection-bar.selected-count": {
|
||||
"message": "{count, plural, one {# progetto selezionato} other {# progetti selezionati}}"
|
||||
},
|
||||
"dashboard.projects.table.id": {
|
||||
"message": "ID"
|
||||
},
|
||||
"dashboard.projects.table.name": {
|
||||
"message": "Nome"
|
||||
},
|
||||
"dashboard.projects.table.select-all-bulk-editable": {
|
||||
"message": "Seleziona i progetti modificabili simultaneamente"
|
||||
},
|
||||
"dashboard.projects.table.status": {
|
||||
"message": "Stato"
|
||||
},
|
||||
@@ -2663,18 +2651,12 @@
|
||||
"layout.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Abbonati a Modrinth+"
|
||||
},
|
||||
"moderation.exclude-technical-review": {
|
||||
"message": "Escludi RT"
|
||||
},
|
||||
"moderation.moderate": {
|
||||
"message": "Modera"
|
||||
},
|
||||
"moderation.page.external-projects": {
|
||||
"message": "Progetti esterni"
|
||||
},
|
||||
"moderation.page.global-detail-traces": {
|
||||
"message": "Tracce globali"
|
||||
},
|
||||
"moderation.page.projects": {
|
||||
"message": "Progetti"
|
||||
},
|
||||
@@ -2684,45 +2666,6 @@
|
||||
"moderation.page.technicalReview": {
|
||||
"message": "Revisione tecnica"
|
||||
},
|
||||
"modpack-scan-modal.failed": {
|
||||
"message": "Errore"
|
||||
},
|
||||
"modpack-scan-modal.load-versions-error": {
|
||||
"message": "Impossibile caricare le versioni: {error}"
|
||||
},
|
||||
"modpack-scan-modal.loading-versions": {
|
||||
"message": "Caricamento versioni..."
|
||||
},
|
||||
"modpack-scan-modal.new-files": {
|
||||
"message": "Nuovi file"
|
||||
},
|
||||
"modpack-scan-modal.new-groups": {
|
||||
"message": "Nuovi gruppi"
|
||||
},
|
||||
"modpack-scan-modal.no-files": {
|
||||
"message": "Nessun file trovato."
|
||||
},
|
||||
"modpack-scan-modal.not-scanned": {
|
||||
"message": "Da scansionare"
|
||||
},
|
||||
"modpack-scan-modal.override-files": {
|
||||
"message": "File sovrascritti ({count})"
|
||||
},
|
||||
"modpack-scan-modal.pack-file-name": {
|
||||
"message": "Nome del file"
|
||||
},
|
||||
"modpack-scan-modal.scan-all-files": {
|
||||
"message": "Scansiona tutto"
|
||||
},
|
||||
"modpack-scan-modal.scan-error": {
|
||||
"message": "Alcuni file non sono stati scansionati: {error}"
|
||||
},
|
||||
"modpack-scan-modal.scanning": {
|
||||
"message": "Scansione..."
|
||||
},
|
||||
"modpack-scan-modal.title": {
|
||||
"message": "Scansione del pacchetto ({scanned}/{total} file)"
|
||||
},
|
||||
"muralpay.account-type.checking": {
|
||||
"message": "Conto corrente"
|
||||
},
|
||||
@@ -3059,6 +3002,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Raccolta"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} download"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Iscrizione"
|
||||
},
|
||||
@@ -3077,6 +3023,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Organizzazioni"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {progetto} other {progetti}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Salvando..."
|
||||
},
|
||||
@@ -3263,107 +3212,20 @@
|
||||
"project.details.licensed": {
|
||||
"message": "Licenza"
|
||||
},
|
||||
"project.download.base-game-version-incompatible-tooltip": {
|
||||
"message": "Questo progetto non è compatibile con questa versione del gioco."
|
||||
},
|
||||
"project.download.base-loader-incompatible-tooltip": {
|
||||
"message": "Questo loader non è compatibile con questa versione del gioco."
|
||||
},
|
||||
"project.download.compatible-version-title": {
|
||||
"message": "Versioni compatibili"
|
||||
},
|
||||
"project.download.dependencies-title": {
|
||||
"message": "Dipendenze"
|
||||
},
|
||||
"project.download.dependency-already-installed": {
|
||||
"message": "Questa dipendenza è già stata installata"
|
||||
},
|
||||
"project.download.dependency-any-compatible": {
|
||||
"message": "Una compatibile"
|
||||
},
|
||||
"project.download.dependency-conflicting": {
|
||||
"message": "Questa dipendenza è in conflitto con un'altra"
|
||||
},
|
||||
"project.download.dependency-download-file": {
|
||||
"message": "Scarica {filename}"
|
||||
},
|
||||
"project.download.dependency-download-file-with-size": {
|
||||
"message": "Scarica {filename} ({size})"
|
||||
},
|
||||
"project.download.dependency-duplicate": {
|
||||
"message": "Questa dipendenza è già inclusa"
|
||||
},
|
||||
"project.download.dependency-missing-version": {
|
||||
"message": "Questa versione non è disponibile"
|
||||
},
|
||||
"project.download.dependency-no-compatible-version": {
|
||||
"message": "Non è disponibile alcuna versione compatibile per questa dipendenza"
|
||||
},
|
||||
"project.download.dependency-quilt-fabric-api": {
|
||||
"message": "Quilt non usa Fabric API"
|
||||
},
|
||||
"project.download.dependency-resource-pack-admonition": {
|
||||
"message": "Questo progetto richiede l'installazione di un pacchetto di risorse. Scaricalo e posizionalo nella cartella {folder}."
|
||||
},
|
||||
"project.download.dependency-unavailable": {
|
||||
"message": "Questa dipendenza non può essere scaricata"
|
||||
},
|
||||
"project.download.download": {
|
||||
"message": "Scarica"
|
||||
},
|
||||
"project.download.download-as-zip": {
|
||||
"message": "Scarica come .zip"
|
||||
},
|
||||
"project.download.download-version": {
|
||||
"message": "Scarica {version}"
|
||||
},
|
||||
"project.download.download-with-dependencies": {
|
||||
"message": "Scarica con dipendenze"
|
||||
},
|
||||
"project.download.download-with-recommended": {
|
||||
"message": "Scarica con consigliati"
|
||||
},
|
||||
"project.download.download-with-recommended-as-zip": {
|
||||
"message": "Scarica con consigliati come .zip"
|
||||
},
|
||||
"project.download.duplicate-dependencies-hidden": {
|
||||
"message": "Le dipendenze duplicate sono nascoste"
|
||||
},
|
||||
"project.download.file-unavailable": {
|
||||
"message": "Questo file non può essere scaricato"
|
||||
},
|
||||
"project.download.game-version-unsupported-tooltip": {
|
||||
"message": "{title} non supporta {platform} per {gameVersion}"
|
||||
},
|
||||
"project.download.install-with-app": {
|
||||
"message": "Installa con Modrinth App"
|
||||
},
|
||||
"project.download.manually": {
|
||||
"message": "Scarica manualmente"
|
||||
},
|
||||
"project.download.no-app": {
|
||||
"message": "Non hai Modrinth App?"
|
||||
},
|
||||
"project.download.no-game-versions-found": {
|
||||
"message": "Nessuna versione del gioco trovata"
|
||||
},
|
||||
"project.download.no-versions-available": {
|
||||
"message": "Nessuna versione disponibile per {gameVersion} e {platform}."
|
||||
},
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "{title} non supporta {platform} per {gameVersion}"
|
||||
},
|
||||
"project.download.recommended-title": {
|
||||
"message": "Consigliati"
|
||||
},
|
||||
"project.download.required-resource-pack-admonition": {
|
||||
"message": "Questo progetto richiede l'installazione di un pacchetto di risorse. Scaricalo e posizionalo nella cartella {folder}."
|
||||
},
|
||||
"project.download.required-resource-pack-short": {
|
||||
"message": "Risorse"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "Seleziona la versione del gioco"
|
||||
"message": "Cerca versioni del gioco..."
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "Seleziona la versione del gioco"
|
||||
@@ -3377,15 +3239,6 @@
|
||||
"project.download.title": {
|
||||
"message": "Scarica {title}"
|
||||
},
|
||||
"project.download.unknown-loader": {
|
||||
"message": "Loader sconosciuto"
|
||||
},
|
||||
"project.download.zip-failed-text": {
|
||||
"message": "Uno o più file non sono stati scaricati. Riprova più tardi."
|
||||
},
|
||||
"project.download.zip-failed-title": {
|
||||
"message": "Impossibile scaricare i file"
|
||||
},
|
||||
"project.environment.migration-no-permission.message": {
|
||||
"message": "Abbiamo appena rivisto il sistema di ambienti su Modrinth e ora sono disponibili nuove opzioni. Non hai il permesso di modificare queste impostazioni; si prega di chiedere a un altro membro del progetto di verificare i metadati d'ambiente."
|
||||
},
|
||||
@@ -3641,6 +3494,12 @@
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Visita bacheca del progetto"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count} download"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count} follower"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} è stato archiviato. {title} non riceverà più aggiornamenti a meno che l'autore decida di rimuoverlo dall'archivio."
|
||||
},
|
||||
@@ -4169,6 +4028,9 @@
|
||||
"settings.account.security.email.title": {
|
||||
"message": "Email"
|
||||
},
|
||||
"settings.account.security.passkey.add": {
|
||||
"message": "Aggiungi passkey"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.name.description": {
|
||||
"message": "Assicurati di scegliere un nome facile da ricordare, così da poter identificare la passkey più tardi."
|
||||
},
|
||||
@@ -4178,15 +4040,6 @@
|
||||
"settings.account.security.passkey.add-modal.name.placeholder": {
|
||||
"message": "Passkey personale"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.title": {
|
||||
"message": "Aggiungi passkey"
|
||||
},
|
||||
"settings.account.security.passkey.add.button": {
|
||||
"message": "Aggiungi passkey"
|
||||
},
|
||||
"settings.account.security.passkey.button": {
|
||||
"message": "Gestisci passkey"
|
||||
},
|
||||
"settings.account.security.passkey.description": {
|
||||
"message": "Gestisci le tue passkey o aggiungine una nuova."
|
||||
},
|
||||
@@ -4197,7 +4050,7 @@
|
||||
"message": "Ultimo utilizzo {ago}"
|
||||
},
|
||||
"settings.account.security.passkey.modal.loading": {
|
||||
"message": "Caricamento passkey..."
|
||||
"message": "Caricando le passkey…"
|
||||
},
|
||||
"settings.account.security.passkey.modal.never-used": {
|
||||
"message": "Mai usata"
|
||||
@@ -4205,9 +4058,6 @@
|
||||
"settings.account.security.passkey.modal.no-passkeys": {
|
||||
"message": "Non hai passkey registrate."
|
||||
},
|
||||
"settings.account.security.passkey.remove.button": {
|
||||
"message": "Elimina passkey"
|
||||
},
|
||||
"settings.account.security.passkey.remove.description": {
|
||||
"message": "Questo rimuoverà la passkey \"{name}\" permanentemente. Non potrai più accedere con questa."
|
||||
},
|
||||
@@ -4851,7 +4701,7 @@
|
||||
"message": "Mostra versione"
|
||||
},
|
||||
"version.download.download-dependency": {
|
||||
"message": "Seleziona una versione da scaricare"
|
||||
"message": "Scarica dipendenza"
|
||||
},
|
||||
"version.download.no-primary-file": {
|
||||
"message": "Errore: nessun file primario trovato"
|
||||
@@ -4862,9 +4712,6 @@
|
||||
"version.download.required-resource-pack": {
|
||||
"message": "Pacchetto di risorse obbligatorio"
|
||||
},
|
||||
"version.download.version": {
|
||||
"message": "Scarica {version} ({size})"
|
||||
},
|
||||
"version.edit.button": {
|
||||
"message": "Modifica"
|
||||
},
|
||||
|
||||
@@ -21,19 +21,19 @@
|
||||
"message": "リセット"
|
||||
},
|
||||
"analytics.breakdown.country": {
|
||||
"message": "国 / 地域"
|
||||
"message": "国"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-download": {
|
||||
"message": "依存プロジェクト"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-type": {
|
||||
"message": "依存プロジェクトのタイプ"
|
||||
"message": "依存プロジェクトの種類"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "ダウンロードの追加情報"
|
||||
"message": "理由"
|
||||
},
|
||||
"analytics.breakdown.download-source": {
|
||||
"message": "プラットフォーム"
|
||||
"message": "ソース"
|
||||
},
|
||||
"analytics.breakdown.game-version": {
|
||||
"message": "ゲームのバージョン"
|
||||
@@ -42,13 +42,13 @@
|
||||
"message": "内訳"
|
||||
},
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "ゲームのローダー"
|
||||
"message": "ローダー"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "メンバー"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "マネタイズ"
|
||||
"message": "収益の発生"
|
||||
},
|
||||
"analytics.breakdown.none.selected": {
|
||||
"message": "分析 - デフォルト"
|
||||
@@ -68,9 +68,6 @@
|
||||
"analytics.chart.action.show-all": {
|
||||
"message": "すべて表示"
|
||||
},
|
||||
"analytics.chart.action.show-limited": {
|
||||
"message": "一部のみ表示"
|
||||
},
|
||||
"analytics.chart.action.show-top-eight": {
|
||||
"message": "上位8件を表示"
|
||||
},
|
||||
@@ -113,12 +110,6 @@
|
||||
"analytics.chart.controls.ratio": {
|
||||
"message": ""
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "テーブル内の{itemType, select, project {{count, plural, other {プロジェクト}}} country {{count, plural, other {国}}} monetization {{count, plural, other {収益}}} downloadSource {{count, plural, other {ダウンロード元}}} downloadReason {{count, plural, other {ダウンロード理由}}} member {{count, plural, other {メンバー}}} projectVersion {{count, plural, other {プロジェクトバージョン}}} loader {{count, plural, other {ローダー}}} gameVersion {{count, plural, other {ゲームバージョン}}} other {{count, plural, other {項目}}}}上位 {count} 件を表示"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-on-project": {
|
||||
"message": "{project} に依存"
|
||||
},
|
||||
"analytics.chart.tooltip.total": {
|
||||
"message": "合計"
|
||||
},
|
||||
@@ -158,9 +149,6 @@
|
||||
"analytics.empty.no-data-for-analytics": {
|
||||
"message": "統計に使用可能なデータがありません"
|
||||
},
|
||||
"analytics.filter.game-version-type": {
|
||||
"message": "ゲームバージョンタイプ"
|
||||
},
|
||||
"analytics.filter.game-version-type.all": {
|
||||
"message": "全て"
|
||||
},
|
||||
@@ -198,19 +186,19 @@
|
||||
"message": "表示の推移"
|
||||
},
|
||||
"analytics.group-by.1h": {
|
||||
"message": "1 時間"
|
||||
"message": "1時間"
|
||||
},
|
||||
"analytics.group-by.6h": {
|
||||
"message": "6 時間"
|
||||
"message": "6時間"
|
||||
},
|
||||
"analytics.group-by.date": {
|
||||
"message": "日付"
|
||||
},
|
||||
"analytics.group-by.day": {
|
||||
"message": "1 日"
|
||||
"message": "1日"
|
||||
},
|
||||
"analytics.group-by.month": {
|
||||
"message": "1 月"
|
||||
"message": "1月"
|
||||
},
|
||||
"analytics.group-by.selected.day": {
|
||||
"message": "日足"
|
||||
@@ -231,10 +219,10 @@
|
||||
"message": "年足"
|
||||
},
|
||||
"analytics.group-by.week": {
|
||||
"message": "1 週"
|
||||
"message": "1週"
|
||||
},
|
||||
"analytics.group-by.year": {
|
||||
"message": "1 年"
|
||||
"message": "1年"
|
||||
},
|
||||
"analytics.loading.fetching-results": {
|
||||
"message": "データを取得中..."
|
||||
@@ -248,12 +236,6 @@
|
||||
"analytics.project-status.approved": {
|
||||
"message": "承認済み"
|
||||
},
|
||||
"analytics.project-status.draft": {
|
||||
"message": "ドラフト"
|
||||
},
|
||||
"analytics.project-status.other": {
|
||||
"message": "その他"
|
||||
},
|
||||
"analytics.project-status.private": {
|
||||
"message": "非公開"
|
||||
},
|
||||
@@ -263,15 +245,6 @@
|
||||
"analytics.project.all": {
|
||||
"message": "全てのプロジェクト"
|
||||
},
|
||||
"analytics.project.select": {
|
||||
"message": "プロジェクトを選択"
|
||||
},
|
||||
"analytics.project.your": {
|
||||
"message": "あなたのプロジェクト"
|
||||
},
|
||||
"analytics.query.filter.add": {
|
||||
"message": "条件を追加"
|
||||
},
|
||||
"analytics.query.label.breakdown": {
|
||||
"message": "分析"
|
||||
},
|
||||
@@ -351,7 +324,7 @@
|
||||
"message": "アナリティクス"
|
||||
},
|
||||
"analytics.value.monetized": {
|
||||
"message": "収益の対象"
|
||||
"message": "発生済み"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "なし"
|
||||
@@ -366,7 +339,7 @@
|
||||
"message": "不明"
|
||||
},
|
||||
"analytics.value.unmonetized": {
|
||||
"message": "収益の対象外"
|
||||
"message": "未発生"
|
||||
},
|
||||
"app-marketing.download.description": {
|
||||
"message": "我々のデスクトップアプリはすべてのプラットフォームでご利用いただけますので、ご希望のバージョンをお選びください。"
|
||||
@@ -501,7 +474,7 @@
|
||||
"message": "RAM"
|
||||
},
|
||||
"app-marketing.features.performance.small": {
|
||||
"message": "低い"
|
||||
"message": "小さい"
|
||||
},
|
||||
"app-marketing.features.performance.title": {
|
||||
"message": "効率的"
|
||||
@@ -584,15 +557,6 @@
|
||||
"auth.authorize.redirect-url": {
|
||||
"message": "<redirect-url>{url}</redirect-url> に自動的に転送されます"
|
||||
},
|
||||
"auth.create-account.title": {
|
||||
"message": "アカウントを作成"
|
||||
},
|
||||
"auth.create-account.username.label": {
|
||||
"message": "ユーザー名"
|
||||
},
|
||||
"auth.create-account.username.placeholder": {
|
||||
"message": "ユーザー名を入れてください"
|
||||
},
|
||||
"auth.reset-password.method-choice.action": {
|
||||
"message": "再設定用メールを送信"
|
||||
},
|
||||
@@ -629,15 +593,6 @@
|
||||
"auth.sign-in.2fa.placeholder": {
|
||||
"message": "コードを入力…"
|
||||
},
|
||||
"auth.sign-in.create-account": {
|
||||
"message": "サインアップ"
|
||||
},
|
||||
"auth.sign-in.forgot-password": {
|
||||
"message": "パスワードを忘れた場合"
|
||||
},
|
||||
"auth.sign-in.last-sign-in": {
|
||||
"message": "最後に使用"
|
||||
},
|
||||
"auth.sign-in.title": {
|
||||
"message": "ログイン"
|
||||
},
|
||||
@@ -746,9 +701,6 @@
|
||||
"conversation-thread.action.approve-with-reply": {
|
||||
"message": "送信して承認"
|
||||
},
|
||||
"conversation-thread.action.send": {
|
||||
"message": "送信"
|
||||
},
|
||||
"conversation-thread.reply-editor.placeholder.send": {
|
||||
"message": "メッセージを送る…"
|
||||
},
|
||||
@@ -1217,12 +1169,6 @@
|
||||
"dashboard.creator-withdraw-modal.withdraw-limit-used": {
|
||||
"message": "出金限度額の <b>{withdrawLimit}</b> に達しました。これ以上の額を出金するには、納税申告書類を記入する必要があります。"
|
||||
},
|
||||
"dashboard.discord-roles.banner.cta": {
|
||||
"message": "Discordをリンクする"
|
||||
},
|
||||
"dashboard.discord-roles.role.creator": {
|
||||
"message": "クリエイター"
|
||||
},
|
||||
"dashboard.head-title": {
|
||||
"message": "ダッシュボード"
|
||||
},
|
||||
@@ -1553,12 +1499,6 @@
|
||||
"dashboard.withdraw.error.tax-form.title": {
|
||||
"message": "納税申告書に記入して下さい"
|
||||
},
|
||||
"discover.install.back-to-server": {
|
||||
"message": "サーバーに戻る"
|
||||
},
|
||||
"discover.install.back-to-setup": {
|
||||
"message": "セットアップに戻る"
|
||||
},
|
||||
"error.collection.404.list_item.1": {
|
||||
"message": "コレクションのURLを誤って入力した可能性があります。"
|
||||
},
|
||||
@@ -1661,9 +1601,6 @@
|
||||
"frog.title": {
|
||||
"message": "カエル"
|
||||
},
|
||||
"hosting-marketing.available-locations": {
|
||||
"message": "北米、ヨーロッパ、東南アジア、オーストラリアで利用可能で、幅広い地域をカバーしています。"
|
||||
},
|
||||
"hosting-marketing.billing.monthly": {
|
||||
"message": "毎月で払う"
|
||||
},
|
||||
@@ -1724,9 +1661,6 @@
|
||||
"hosting-marketing.faq.location": {
|
||||
"message": "Modrinthでホストするサーバーはどこにありますか?地域を選択できますか?"
|
||||
},
|
||||
"hosting-marketing.faq.location.answer": {
|
||||
"message": "現時点では、北アメリカ、ヨーロッパ、東南アジア、オーストラリアのサーバーを購入時に選択できます。今後、より多くの地域に対応予定です!地域を変更したい場合はサポートまでお問い合わせください。"
|
||||
},
|
||||
"hosting-marketing.faq.versions-loaders": {
|
||||
"message": "どのMinecraftのバージョンとローダーが使えますか?"
|
||||
},
|
||||
@@ -2267,9 +2201,6 @@
|
||||
"moderation.page.technicalReview": {
|
||||
"message": "技術評価"
|
||||
},
|
||||
"modpack-scan-modal.loading-versions": {
|
||||
"message": "バージョンを読み込んでいます…"
|
||||
},
|
||||
"muralpay.account-type.checking": {
|
||||
"message": "チェック中"
|
||||
},
|
||||
@@ -2597,6 +2528,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "コレクション"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count}件のダウンロード"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "参加: "
|
||||
},
|
||||
@@ -2615,6 +2549,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "組織"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {プロジェクト} other {プロジェクト}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "保存中…"
|
||||
},
|
||||
@@ -2792,18 +2729,21 @@
|
||||
"project.details.licensed": {
|
||||
"message": "ライセンス"
|
||||
},
|
||||
"project.download.download": {
|
||||
"message": "ダウンロード"
|
||||
},
|
||||
"project.download.game-version-unsupported-tooltip": {
|
||||
"message": "{title}は{platform}の{gameVersion}に対応していません"
|
||||
},
|
||||
"project.download.no-app": {
|
||||
"message": "Modrinth Appをお持ちでないですか?"
|
||||
},
|
||||
"project.download.no-versions-available": {
|
||||
"message": "{gameVersion}および{platform}向けのバージョンは利用できません。"
|
||||
},
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "{title}は{gameVersion}の{platform}に対応していません"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "ゲームバージョンを検索…"
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "ゲームバージョンを選択"
|
||||
},
|
||||
@@ -2861,9 +2801,6 @@
|
||||
"project.moderation.admonition.draft.body": {
|
||||
"message": "これは下書きです。\nModrinthのモデレーターによって審査、承認されるまで、他のユーザーには表示されません。"
|
||||
},
|
||||
"project.moderation.admonition.draft.header": {
|
||||
"message": "ドラフト"
|
||||
},
|
||||
"project.moderation.title": {
|
||||
"message": "管理"
|
||||
},
|
||||
@@ -2927,12 +2864,6 @@
|
||||
"project.settings.general.url.title": {
|
||||
"message": "URL"
|
||||
},
|
||||
"project.settings.permissions.learn-more": {
|
||||
"message": "もっと詳しく"
|
||||
},
|
||||
"project.settings.permissions.sort.status": {
|
||||
"message": "ステータス"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "設定"
|
||||
},
|
||||
@@ -2948,9 +2879,6 @@
|
||||
"report.already-reported": {
|
||||
"message": "既に {title} をレポートしています"
|
||||
},
|
||||
"report.back-to-item": {
|
||||
"message": "{item}に戻る"
|
||||
},
|
||||
"report.body.description": {
|
||||
"message": "可能で関連性がある場合は、リンクと画像を追加してください。空または不十分な報告は閉じられ、無視されます。"
|
||||
},
|
||||
@@ -3287,9 +3215,6 @@
|
||||
"search.filter.locked.server.sync": {
|
||||
"message": "サーバーと同期"
|
||||
},
|
||||
"servers.manage.content.title": {
|
||||
"message": "コンテンツ - {serverName} - Modrinth"
|
||||
},
|
||||
"servers.notice.actions": {
|
||||
"message": "アクション"
|
||||
},
|
||||
@@ -3449,24 +3374,6 @@
|
||||
"settings.account.security.email.title": {
|
||||
"message": "メールドレス"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.name.label": {
|
||||
"message": "名前"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.name.placeholder": {
|
||||
"message": "私のパスキー"
|
||||
},
|
||||
"settings.account.security.passkey.button": {
|
||||
"message": "パスキーを管理"
|
||||
},
|
||||
"settings.account.security.passkey.description": {
|
||||
"message": "パスキーを追加するか、パスキーを管理できます。"
|
||||
},
|
||||
"settings.account.security.passkey.remove.button": {
|
||||
"message": "パスキーを削除"
|
||||
},
|
||||
"settings.account.security.passkey.title": {
|
||||
"message": "パスキーを管理"
|
||||
},
|
||||
"settings.account.security.password.action.add": {
|
||||
"message": "パスワードを追加"
|
||||
},
|
||||
@@ -4064,27 +3971,6 @@
|
||||
"ui.newsletter-button.tooltip": {
|
||||
"message": "Modrinthのニュースレターに登録する"
|
||||
},
|
||||
"version.all-versions": {
|
||||
"message": "全てのバージョン"
|
||||
},
|
||||
"version.dependency.view-project": {
|
||||
"message": "プロジェクトを見る"
|
||||
},
|
||||
"version.dependency.view-version": {
|
||||
"message": "バージョンを見る"
|
||||
},
|
||||
"version.edit.button": {
|
||||
"message": "編集"
|
||||
},
|
||||
"version.edit.details": {
|
||||
"message": "詳細情報を編集"
|
||||
},
|
||||
"version.edit.files": {
|
||||
"message": "ファイルを編集"
|
||||
},
|
||||
"version.edit.metadata": {
|
||||
"message": "メタデータを編集"
|
||||
},
|
||||
"version.environment.none.description": {
|
||||
"message": "このバージョンの環境設定は未指定です。"
|
||||
},
|
||||
@@ -4096,8 +3982,5 @@
|
||||
},
|
||||
"version.environment.unknown.title": {
|
||||
"message": "不明な環境"
|
||||
},
|
||||
"version.section.content.dev-info.version-id": {
|
||||
"message": "バージョンID:"
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -38,9 +38,6 @@
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "Pemuat"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "Ahli"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "Pengewangan"
|
||||
},
|
||||
@@ -131,18 +128,6 @@
|
||||
"analytics.chart.legend.previous-period-suffix": {
|
||||
"message": "{name} (Sblm.)"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "Menunjukkan kesemua {itemType, select, project {{count, plural, other {projek}}} country {{count, plural, other {negara}}} monetization {{count, plural, other {pengewangan}}} downloadSource {{count, plural, other {sumber muat turun}}} downloadReason {{count, plural, other {sebab muat turun}}} member {{count, plural, other {ahli}}} projectVersion {{count, plural, other {versi projek}}} loader {{count, plural, other {pemuat}}} gameVersion {{count, plural, other {versi permainan}}} other {{count, plural, other {item}}}} daripada jadual"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "Menunjukkan {count} {itemType, select, project {{count, plural, other {projek}}} country {{count, plural, other {negara}}} monetization {{count, plural, other {pengewangan}}} downloadSource {{count, plural, other {sumber muat turun}}} downloadReason {{count, plural, other {sebab muat turun}}} member {{count, plural, other {ahli}}} projectVersion {{count, plural, other {versi projek}}} loader {{count, plural, other {pemuat}}} gameVersion {{count, plural, other {versi permainan}}} other {{count, plural, other {item}}}} daripada jadual"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "Menunjukkan {limit} {itemType, select, project {{limit, plural, other {projek}}} country {{limit, plural, other {negara}}} monetization {{limit, plural, other {pengewangan}}} downloadSource {{limit, plural, other {sumber muat turun}}} downloadReason {{limit, plural, other {sebab muat turun}}} member {{limit, plural, other {ahli}}} projectVersion {{limit, plural, other {versi projek}}} loader {{limit, plural, other {pemuat}}} gameVersion {{limit, plural, other {versi permainan}}} other {{limit, plural, other {item}}}} daripada jadual"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Menunjukkan {count} {itemType, select, project {{count, plural, other {projek}}} country {{count, plural, other {negara}}} monetization {{count, plural, other {pengewangan}}} downloadSource {{count, plural, other {sumber muat turun}}} downloadReason {{count, plural, other {sebab muat turun}}} member {{count, plural, other {ahli}}} projectVersion {{count, plural, other {versi projek}}} loader {{count, plural, other {pemuat}}} gameVersion {{count, plural, other {versi permainan}}} other {{count, plural, other {item}}}} teratas daripada jadual"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, other {# hari}}"
|
||||
},
|
||||
@@ -410,9 +395,6 @@
|
||||
"analytics.value.monetized": {
|
||||
"message": "Dipengewangkan"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "Tiada"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "Tiada"
|
||||
},
|
||||
@@ -641,9 +623,6 @@
|
||||
"auth.authorize.redirect-url": {
|
||||
"message": "Anda akan diubah hala ke <redirect-url>{url}</redirect-url>"
|
||||
},
|
||||
"auth.create-account.username.label": {
|
||||
"message": "Nama pengguna"
|
||||
},
|
||||
"auth.reset-password.method-choice.action": {
|
||||
"message": "Hantar e-mel pemulihan"
|
||||
},
|
||||
@@ -680,12 +659,6 @@
|
||||
"auth.sign-in.2fa.placeholder": {
|
||||
"message": "Masukkan kod..."
|
||||
},
|
||||
"auth.sign-in.create-account": {
|
||||
"message": "Daftar"
|
||||
},
|
||||
"auth.sign-in.last-sign-in": {
|
||||
"message": "Kali terakhir digunakan"
|
||||
},
|
||||
"auth.sign-in.title": {
|
||||
"message": "Daftar Masuk"
|
||||
},
|
||||
@@ -1352,12 +1325,6 @@
|
||||
"dashboard.creator-withdraw-modal.withdraw-limit-used": {
|
||||
"message": "Anda telah menggunakan had pengeluaran anda sebanyak <b>{withdrawLimit}</b>. Anda mesti melengkapkan borang cukai untuk mengeluarkan lebih banyak wang."
|
||||
},
|
||||
"dashboard.discord-roles.role.big-creator": {
|
||||
"message": "1J+ Muat Turun"
|
||||
},
|
||||
"dashboard.discord-roles.role.creator": {
|
||||
"message": "Pencipta"
|
||||
},
|
||||
"dashboard.head-title": {
|
||||
"message": "Papan Pemuka"
|
||||
},
|
||||
@@ -2411,12 +2378,6 @@
|
||||
"moderation.page.technicalReview": {
|
||||
"message": "Semakan teknikal"
|
||||
},
|
||||
"modpack-scan-modal.failed": {
|
||||
"message": "Gagal"
|
||||
},
|
||||
"modpack-scan-modal.new-files": {
|
||||
"message": "Fail Baharu"
|
||||
},
|
||||
"muralpay.account-type.checking": {
|
||||
"message": "Cek"
|
||||
},
|
||||
@@ -2750,6 +2711,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Koleksi"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, other {muat turun}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Telah menyertai"
|
||||
},
|
||||
@@ -2768,6 +2732,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Organisasi"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, other {projek}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Sedang menyimpan..."
|
||||
},
|
||||
@@ -2957,9 +2924,15 @@
|
||||
"project.download.no-app": {
|
||||
"message": "Tidak ada Modrinth App?"
|
||||
},
|
||||
"project.download.no-versions-available": {
|
||||
"message": "Tiada versi tersedia untuk {gameVersion} dan {platform}."
|
||||
},
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "{title} tidak menyokong {platform} untuk {gameVersion}"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "Cari versi permainan..."
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "Pilih versi permainan"
|
||||
},
|
||||
@@ -3149,39 +3122,24 @@
|
||||
"project.settings.general.url.title": {
|
||||
"message": "URL"
|
||||
},
|
||||
"project.settings.permissions.attention-needed.description.proj-approved": {
|
||||
"message": "Sila berikan bukti bahawa anda mempunyai kebenaran untuk mengedarkan semula semua fail berikut. Setelah selesai, sebarang versi yang ditahan akan diterbitkan secara automatik."
|
||||
},
|
||||
"project.settings.permissions.bad-proof.description": {
|
||||
"message": "Pasukan penyederhana Modrinth telah menolak maklumat kebenaran yang anda berikan untuk beberapa kandungan luaran. Sila semak item yang ditolak di bawah dan berikan bukti yang boleh diterima atau alih keluar kandungan tersebut."
|
||||
},
|
||||
"project.settings.permissions.empty-state.heading": {
|
||||
"message": "Semuanya sudah siap!"
|
||||
},
|
||||
"project.settings.permissions.fail.description": {
|
||||
"message": "Anda mungkin tidak mempunyai kebenaran untuk mengedarkan semula sebahagian daripada kandungan luaran dalam projek anda. Untuk menerbitkan projek ini di Modrinth, sila alih keluar kandungan ini atau berikan bukti bahawa anda mempunyai kebenaran untuk menggunakannya."
|
||||
},
|
||||
"project.settings.permissions.fail.title": {
|
||||
"message": "Sesetengah kandungan tidak boleh disertakan"
|
||||
},
|
||||
"project.settings.permissions.info-banner.description": {
|
||||
"message": "Jika anda memasukkan kandungan yang tidak dihoskan di Modrinth, anda perlu memberitahu kami dari mana ia berasal dan mengesahkan bahawa anda mempunyai kebenaran untuk mengedarkan fail tersebut. Lihat <link>pengumuman kami tentang sistem baharu ini</link> untuk mengetahui lebih lanjut!"
|
||||
},
|
||||
"project.settings.permissions.learn-more": {
|
||||
"message": "Ketahui lebih lanjut"
|
||||
},
|
||||
"project.settings.permissions.sort.rejected": {
|
||||
"message": "Ditolak"
|
||||
},
|
||||
"project.settings.permissions.sort.status": {
|
||||
"message": "Status"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Tetapan"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Kunjungi papan pemuka projek"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, other {muat turun}}"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} telah diarkibkan. {title} tidak akan menerima sebarang kemas kini lanjut melainkan pengarang memutuskan untuk menyaharkibkan projek."
|
||||
},
|
||||
@@ -3701,9 +3659,6 @@
|
||||
"settings.account.security.email.title": {
|
||||
"message": "E-mel"
|
||||
},
|
||||
"settings.account.security.passkey.add-modal.name.label": {
|
||||
"message": "Nama"
|
||||
},
|
||||
"settings.account.security.password.action.add": {
|
||||
"message": "Tambah kata laluan"
|
||||
},
|
||||
@@ -4316,9 +4271,6 @@
|
||||
"ui.newsletter-button.tooltip": {
|
||||
"message": "Langgan surat berita Modrinth"
|
||||
},
|
||||
"version.edit.button": {
|
||||
"message": "Sunting"
|
||||
},
|
||||
"version.environment.none.description": {
|
||||
"message": "Persekitaran untuk versi ini belum dinyatakan."
|
||||
},
|
||||
@@ -4330,14 +4282,5 @@
|
||||
},
|
||||
"version.environment.unknown.title": {
|
||||
"message": "Persekitaran yang tidak diketahui"
|
||||
},
|
||||
"version.section.content.dev-info.maven-description": {
|
||||
"message": "Projek di Modrinth tersedia secara automatik melalui repositori Maven untuk digunakan dengan alat binaan JVM seperti <gradle-link>Gradle</gradle-link>. Untuk mengetahui lebih lanjut tentang API Maven Modrinth, <article-link>klik di sini</article-link>."
|
||||
},
|
||||
"version.section.content.dev-info.maven-note": {
|
||||
"message": "Nota: Apabila tersedia, anda harus menggunakan repo maven pencipta kerana ia akan mempunyai maklumat kebergantungan transitif yang tidak terdapat pada API Maven Modrinth. Anda juga mungkin akan mendapat kebergantungan pendua jika anda menggunakan campuran repositori Maven Modrinth dan bukan Modrinth untuk kebergantungan anda, kerana pengecam kumpulan akan berbeza apabila disampaikan melalui API Maven Modrinth."
|
||||
},
|
||||
"version.supplementary-resources.copy-hash-sha1": {
|
||||
"message": "Salin SHA-1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,15 +23,6 @@
|
||||
"analytics.breakdown.country": {
|
||||
"message": "Land"
|
||||
},
|
||||
"analytics.breakdown.dependent-on": {
|
||||
"message": "Afhankelijk van"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-download": {
|
||||
"message": "Afhankelijk project"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-type": {
|
||||
"message": "Afhankelijk project type"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "Download reden"
|
||||
},
|
||||
@@ -41,21 +32,12 @@
|
||||
"analytics.breakdown.game-version": {
|
||||
"message": "Spel versie"
|
||||
},
|
||||
"analytics.breakdown.generic": {
|
||||
"message": "Uitsplitsing"
|
||||
},
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "Lader"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "Lid"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "Monetisatie"
|
||||
},
|
||||
"analytics.breakdown.none.selected": {
|
||||
"message": "Geen uitsplitsing"
|
||||
},
|
||||
"analytics.breakdown.project": {
|
||||
"message": "Project"
|
||||
},
|
||||
@@ -65,15 +47,9 @@
|
||||
"analytics.breakdown.project-version": {
|
||||
"message": "Project versie"
|
||||
},
|
||||
"analytics.breakdown.selected": {
|
||||
"message": "Uitsplitsing naar {breakdown}"
|
||||
},
|
||||
"analytics.chart.action.show-all": {
|
||||
"message": "Allemaal laten zien"
|
||||
},
|
||||
"analytics.chart.action.show-limited": {
|
||||
"message": "Beperkt weergeven"
|
||||
},
|
||||
"analytics.chart.action.show-top-eight": {
|
||||
"message": "Laat de top 8 zien"
|
||||
},
|
||||
@@ -86,15 +62,6 @@
|
||||
"analytics.chart.controls.annotations": {
|
||||
"message": "Annotatie"
|
||||
},
|
||||
"analytics.chart.controls.aria": {
|
||||
"message": "Statistiekinstellingen, {activeCount}"
|
||||
},
|
||||
"analytics.chart.controls.button": {
|
||||
"message": "Instellingen"
|
||||
},
|
||||
"analytics.chart.controls.dialog-aria": {
|
||||
"message": "Statistiekinstellingen"
|
||||
},
|
||||
"analytics.chart.controls.display": {
|
||||
"message": "Weergave"
|
||||
},
|
||||
@@ -119,51 +86,18 @@
|
||||
"analytics.chart.empty.select-table-items": {
|
||||
"message": "Selecteer een element uit de tabel beneden om jouw data te visualiseren."
|
||||
},
|
||||
"analytics.chart.events.count-aria": {
|
||||
"message": "{count, plural, one {# statistiekgebeurtenis} other {# statistiekgebeurtenissen}}"
|
||||
},
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>: {title}"
|
||||
},
|
||||
"analytics.chart.events.see-announcement": {
|
||||
"message": "Zie aankondiging"
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.aria": {
|
||||
"message": "Details van statistieken over inkomsten bekijken"
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.description": {
|
||||
"message": "Alleen weergaven en downloads via Modrinth tellen mee voor het genereren van inkomsten, en voor downloads moeten gebruikers ingelogd zijn."
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.title": {
|
||||
"message": "Details over genereren van inkomsten"
|
||||
},
|
||||
"analytics.chart.legend.previous-period-suffix": {
|
||||
"message": "{name} (vorige)"
|
||||
},
|
||||
"analytics.chart.render-limit.description": {
|
||||
"message": "Het laten zien van alle lijnen in de grafiek kan de pagina slomer maken."
|
||||
},
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "Alle {count} punten in de grafiek laten zien?"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "Alle weergegeven {itemType, select, project {{count, plural, one {project} other {projecten}}} country {{count, plural, one {land} other {landen}}} monetization {{count, plural, one {inkomstenwaarde} other {inkomstenwaarden}}} downloadSource {{count, plural, one {downloadbron} other {downloadbronnen}}} downloadReason {{count, plural, one {downloadreden} other {downloadredenen}}} member {{count, plural, one {lid} other {leden}}} projectVersion {{count, plural, one {projectversie} other {projectversies}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {spelversie} other {spelversies}}} other {{count, plural, one {item} other {items}}}} uit tabel"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "{count} {itemType, select, project {{count, plural, one {project} other {projecten}}} country {{count, plural, one {land} other {landen}}} monetization {{count, plural, one {inkomstenwaarde} other {inkomstenwaardes}}} downloadSource {{count, plural, one {downloadbron} other {downloadbronnen}}} downloadReason {{count, plural, one {downloadreden} other {downloadredenen}}} member {{count, plural, one {lid} other {leden}}} projectVersion {{count, plural, one {projectversie} other {projectversies}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {spelversie} other {spelversies}}} other {{count, plural, one {item} other {items}}}} uit tabel weergegeven"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "{limit} {itemType, select, project {{limit, plural, one {project} other {projecten}}} country {{limit, plural, one {land} other {landen}}} monetization {{limit, plural, one {inkomstenwaarde} other {inkomstenwaardes}}} downloadSource {{limit, plural, one {downloadbron} other {downloadbronnen}}} downloadReason {{limit, plural, one {downloadreden} other {downloadredenen}}} member {{limit, plural, one {lid} other {leden}}} projectVersion {{limit, plural, one {projectversie} other {projectversies}}} loader {{limit, plural, one {loader} other {loaders}}} gameVersion {{limit, plural, one {spelversie} other {spelversies}}} other {{limit, plural, one {item} other {items}}}} uit tabel weergegeven"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Top {count} {itemType, select, project {{count, plural, one {project} other {projecten}}} country {{count, plural, one {land} other {landen}}} monetization {{count, plural, one {inkomstenwaarde} other {inkomstenwaardes}}} downloadSource {{count, plural, one {downloadbron} other {downloadbronnen}}} downloadReason {{count, plural, one {downloadreden} other {downloadredenen}}} member {{count, plural, one {lid} other {leden}}} projectVersion {{count, plural, one {projectversie} other {projectversies}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {spelversie} other {spelversies}}} other {{count, plural, one {item} other {items}}}} uit tabel"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-on-project": {
|
||||
"message": "Afhankelijk van {project}"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-project-version": {
|
||||
"message": "{dependentProject} is afhankelijk van {dependencyProject}, {version}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# dag} other {# dagen}}"
|
||||
},
|
||||
@@ -182,9 +116,6 @@
|
||||
"analytics.chart.tooltip.pinned-aria": {
|
||||
"message": "Vastgepind"
|
||||
},
|
||||
"analytics.chart.tooltip.previous-period-short": {
|
||||
"message": "(vorige)"
|
||||
},
|
||||
"analytics.chart.tooltip.show-entry": {
|
||||
"message": "Laat {name} in de grafiek zien"
|
||||
},
|
||||
@@ -200,9 +131,6 @@
|
||||
"analytics.chart.view.line": {
|
||||
"message": "Lijn"
|
||||
},
|
||||
"analytics.download-reason.dependency": {
|
||||
"message": "Afhankelijkheid"
|
||||
},
|
||||
"analytics.download-reason.modpack": {
|
||||
"message": "Modpack"
|
||||
},
|
||||
@@ -233,9 +161,6 @@
|
||||
"analytics.empty.no-projects-for-analytics": {
|
||||
"message": "Geen projecten beschikbaar voor analyse"
|
||||
},
|
||||
"analytics.empty.select-project": {
|
||||
"message": "Selecteer ten minste één project om de gegevens te bekijken"
|
||||
},
|
||||
"analytics.filter.game-version-type": {
|
||||
"message": "Game versie typen"
|
||||
},
|
||||
@@ -248,15 +173,9 @@
|
||||
"analytics.filter.search.countries": {
|
||||
"message": "Zoek landen..."
|
||||
},
|
||||
"analytics.filter.search.dependent-projects": {
|
||||
"message": "Projecten zoeken..."
|
||||
},
|
||||
"analytics.filter.search.download-sources": {
|
||||
"message": "Zoek download bron..."
|
||||
},
|
||||
"analytics.filter.search.members": {
|
||||
"message": "Leden zoeken..."
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "Zoek project versies..."
|
||||
},
|
||||
@@ -272,9 +191,6 @@
|
||||
"analytics.graph.title.revenue": {
|
||||
"message": "Inkomsten Over Tijd"
|
||||
},
|
||||
"analytics.graph.title.views": {
|
||||
"message": "Ontwikkeling van aantal weergaven"
|
||||
},
|
||||
"analytics.group-by.1h": {
|
||||
"message": "1h"
|
||||
},
|
||||
@@ -359,9 +275,6 @@
|
||||
"analytics.project-status.unlisted": {
|
||||
"message": "Verborgen"
|
||||
},
|
||||
"analytics.project-status.withheld": {
|
||||
"message": "Niet weergegeven"
|
||||
},
|
||||
"analytics.project.all": {
|
||||
"message": "Alle projecten"
|
||||
},
|
||||
@@ -383,9 +296,6 @@
|
||||
"analytics.query.filter.add": {
|
||||
"message": "Filter toevoegen"
|
||||
},
|
||||
"analytics.query.label.breakdown": {
|
||||
"message": "Uitsplitsing:"
|
||||
},
|
||||
"analytics.query.label.grouped-by": {
|
||||
"message": "Groepeer per"
|
||||
},
|
||||
@@ -398,9 +308,6 @@
|
||||
"analytics.stat.downloads": {
|
||||
"message": "Installaties"
|
||||
},
|
||||
"analytics.stat.monetization-banner.body": {
|
||||
"message": "Alleen weergaven en downloads die via Modrinth plaatsvinden, komen in aanmerking voor inkomsten en moeten de fraudepreventiefiltering doorstaan. Voor downloads van de Modrinth-app moet de gebruiker bovendien ingelogd zijn. Aangezien alle projecten een vergelijkbaar percentage aan downloads met inkomsten hebben, zouden je inkomsten niet wezenlijk veranderen als alle downloads zouden worden meegeteld."
|
||||
},
|
||||
"analytics.stat.monetization-banner.learn-more": {
|
||||
"message": "Meer informatie"
|
||||
},
|
||||
@@ -413,12 +320,6 @@
|
||||
"analytics.stat.playtime-hours": {
|
||||
"message": "{hours} uur"
|
||||
},
|
||||
"analytics.stat.previous-period-comparison": {
|
||||
"message": "ten opzichte van vorige periode"
|
||||
},
|
||||
"analytics.stat.previous-period-comparison-short": {
|
||||
"message": "ten opzichte van vorige"
|
||||
},
|
||||
"analytics.stat.revenue": {
|
||||
"message": "Inkomsten"
|
||||
},
|
||||
@@ -428,30 +329,12 @@
|
||||
"analytics.stat.unavailable": {
|
||||
"message": "n.v.t."
|
||||
},
|
||||
"analytics.stat.unavailable-tooltip": {
|
||||
"message": "Geen gegevens voor huidige zoekopdracht beschikbaar"
|
||||
},
|
||||
"analytics.stat.views": {
|
||||
"message": "Weergaven"
|
||||
},
|
||||
"analytics.table.csv.date-range": {
|
||||
"message": "{start} tot {end}"
|
||||
},
|
||||
"analytics.table.csv.filename": {
|
||||
"message": "Modrinth Analytics {breakdown} Uitsplitsing - {dateRange}"
|
||||
},
|
||||
"analytics.table.csv.header.playtime-seconds": {
|
||||
"message": "Speeltijd (seconden)"
|
||||
},
|
||||
"analytics.table.duration.days": {
|
||||
"message": "{count, plural, one {# dag} other {# dagen}}"
|
||||
},
|
||||
"analytics.table.duration.hours": {
|
||||
"message": "{count, plural, one {# uur} other {# uren}}"
|
||||
},
|
||||
"analytics.table.duration.minutes": {
|
||||
"message": "{count, plural, one {# minuut} other {# minuten}}"
|
||||
},
|
||||
"analytics.table.empty.no-matching-rows": {
|
||||
"message": "Geen passende gegevens"
|
||||
},
|
||||
@@ -476,51 +359,15 @@
|
||||
"analytics.threshold.country-downloads-aria": {
|
||||
"message": "Land download limiet"
|
||||
},
|
||||
"analytics.threshold.game-version-downloads-aria": {
|
||||
"message": "Drempelwaarde voor aantal downloads van spelversies"
|
||||
},
|
||||
"analytics.threshold.game-versions-above": {
|
||||
"message": "Spelversies met meer dan"
|
||||
},
|
||||
"analytics.threshold.project-downloads-aria": {
|
||||
"message": "Drempelwaarde voor projectdownloads"
|
||||
},
|
||||
"analytics.threshold.project-version-downloads-aria": {
|
||||
"message": "Drempelwaarde voor aantal downloads van projectversies"
|
||||
},
|
||||
"analytics.threshold.project-versions-above": {
|
||||
"message": "Projectversies met meer dan"
|
||||
},
|
||||
"analytics.threshold.projects-above": {
|
||||
"message": "Projecten boven"
|
||||
},
|
||||
"analytics.title": {
|
||||
"message": "Analytica"
|
||||
},
|
||||
"analytics.value.monetized": {
|
||||
"message": "Gemonetiseerd"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "Geen"
|
||||
},
|
||||
"analytics.value.no-dependent-tooltip": {
|
||||
"message": "Gedownload om andere redenen dan dat het een afhankelijkheid is"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "Geen"
|
||||
},
|
||||
"analytics.value.other": {
|
||||
"message": "Anders"
|
||||
},
|
||||
"analytics.value.unknown": {
|
||||
"message": "Onbekend"
|
||||
},
|
||||
"analytics.value.unknown-dependent-tooltip": {
|
||||
"message": "Er zijn geen metagegevens beschikbaar om te bepalen bij welk afhankelijke project deze download hoort."
|
||||
},
|
||||
"analytics.value.unmonetized": {
|
||||
"message": "Niet-gemonetariseerd"
|
||||
},
|
||||
"app-marketing.download.description": {
|
||||
"message": "Ons bureaublad app is overal verkrijgbaar, kies de gewenste versie."
|
||||
},
|
||||
@@ -731,72 +578,12 @@
|
||||
"auth.authorize.authorize-app-name": {
|
||||
"message": "Machtig {appName}"
|
||||
},
|
||||
"auth.authorize.error.missing-parameters": {
|
||||
"message": "Er ontbreken vereiste OAuth-queryparameters."
|
||||
},
|
||||
"auth.authorize.error.no-redirect-url": {
|
||||
"message": "Geen doorverwijzing locatie gevonden in antwoord"
|
||||
},
|
||||
"auth.authorize.errro-title": {
|
||||
"message": "Er is een fout opgetreden"
|
||||
},
|
||||
"auth.authorize.redirect-url": {
|
||||
"message": "Je zult worden doorgestuurd naar <redirect-url>{url}</redirect-url>"
|
||||
},
|
||||
"auth.continue-with-provider": {
|
||||
"message": "Ga verder met {provider}"
|
||||
},
|
||||
"auth.create-account.age-requirement.warning-title": {
|
||||
"message": "Leeftijdsvereiste"
|
||||
},
|
||||
"auth.create-account.complete-sign-up": {
|
||||
"message": "Voltooi aanmelding"
|
||||
},
|
||||
"auth.create-account.date-of-birth.invalid.text": {
|
||||
"message": "Voer een geldige geboortedatum in. Het jaar mag niet 0000 zijn."
|
||||
},
|
||||
"auth.create-account.date-of-birth.invalid.title": {
|
||||
"message": "Ongeldige geboortedatum"
|
||||
},
|
||||
"auth.create-account.date-of-birth.label": {
|
||||
"message": "Geboortedatum"
|
||||
},
|
||||
"auth.create-account.date-of-birth.placeholder": {
|
||||
"message": "Kies je geboortedatum"
|
||||
},
|
||||
"auth.create-account.date-of-birth.required.text": {
|
||||
"message": "Voer uw geboortedatum in voordat u verdergaat."
|
||||
},
|
||||
"auth.create-account.date-of-birth.required.title": {
|
||||
"message": "Geboortedatum verplicht"
|
||||
},
|
||||
"auth.create-account.date-of-birth.under13-helper": {
|
||||
"message": "Je voldoet niet aan de leeftijdsvereiste om een account aan te maken bij Modrinth."
|
||||
},
|
||||
"auth.create-account.info-panel.source-code-link": {
|
||||
"message": "Relevante broncode"
|
||||
},
|
||||
"auth.create-account.info-panel.text": {
|
||||
"message": "Wij slaan je geboortedatum niet op. We gebruiken deze alleen tijdens de aanmelding om te controleren of aan de COPPA-voorschriften wordt voldaan."
|
||||
},
|
||||
"auth.create-account.page-title": {
|
||||
"message": "Account aanmaken"
|
||||
},
|
||||
"auth.create-account.security-check.label": {
|
||||
"message": "Veiligheidscontrole"
|
||||
},
|
||||
"auth.create-account.subscribe.label": {
|
||||
"message": "Houd me via e-mail op de hoogte van de leuke dingen waar Modrinth mee bezig is"
|
||||
},
|
||||
"auth.create-account.title": {
|
||||
"message": "Een account aanmaken"
|
||||
},
|
||||
"auth.create-account.username.label": {
|
||||
"message": "Gebruikersnaam"
|
||||
},
|
||||
"auth.create-account.username.placeholder": {
|
||||
"message": "Voer je gebruikersnaam in"
|
||||
},
|
||||
"auth.reset-password.method-choice.action": {
|
||||
"message": "Herstel email verzenden"
|
||||
},
|
||||
@@ -830,66 +617,21 @@
|
||||
"auth.reset-password.title.long": {
|
||||
"message": "Uw wachtwoord opnieuw instellen"
|
||||
},
|
||||
"auth.sign-in.2fa.description": {
|
||||
"message": "Voer de 6-cijferige code uit je authenticator-app in, of een van je backup codes."
|
||||
},
|
||||
"auth.sign-in.2fa.label": {
|
||||
"message": "Tweefactorauthenticatie"
|
||||
},
|
||||
"auth.sign-in.2fa.placeholder": {
|
||||
"message": "Voer code in..."
|
||||
},
|
||||
"auth.sign-in.continue-with-email": {
|
||||
"message": "Doorgaan met e-mail"
|
||||
},
|
||||
"auth.sign-in.continue-with-passkey": {
|
||||
"message": "Doorgaan met de toegangscode"
|
||||
},
|
||||
"auth.sign-in.create-account": {
|
||||
"message": "Aanmelden"
|
||||
},
|
||||
"auth.sign-in.forgot-password": {
|
||||
"message": "Wachtwoord vergeten"
|
||||
},
|
||||
"auth.sign-in.last-sign-in": {
|
||||
"message": "Laatst gebruikt"
|
||||
},
|
||||
"auth.sign-in.no-account": {
|
||||
"message": "Heb je nog geen account?"
|
||||
},
|
||||
"auth.sign-in.sign-in-with": {
|
||||
"message": "Log in bij Modrinth"
|
||||
},
|
||||
"auth.sign-in.title": {
|
||||
"message": "Log in"
|
||||
},
|
||||
"auth.sign-up.age-requirement.warning-title": {
|
||||
"message": "Leeftijdsvereiste"
|
||||
},
|
||||
"auth.sign-up.continue-with-email": {
|
||||
"message": "Doorgaan met e-mail"
|
||||
},
|
||||
"auth.sign-up.show-fewer-options": {
|
||||
"message": "Minder opties weergeven"
|
||||
},
|
||||
"auth.sign-up.show-other-options": {
|
||||
"message": "Andere opties weergeven"
|
||||
},
|
||||
"auth.sign-up.sign-in-option.title": {
|
||||
"message": "Heb je al een account?"
|
||||
},
|
||||
"auth.sign-up.title": {
|
||||
"message": "Aanmelden"
|
||||
},
|
||||
"auth.sign-up.title.sign-up-with": {
|
||||
"message": "Een account aanmaken"
|
||||
},
|
||||
"auth.verify-email.action.account-settings": {
|
||||
"message": "Account instellingen"
|
||||
},
|
||||
"auth.verify-email.action.discover-mods": {
|
||||
"message": "Ontdek mods"
|
||||
},
|
||||
"auth.verify-email.already-verified.description": {
|
||||
"message": "Je e-mail is al geverifieerd!"
|
||||
},
|
||||
@@ -908,15 +650,6 @@
|
||||
"auth.verify-email.failed-verification.title": {
|
||||
"message": "Email verificatie mislukt"
|
||||
},
|
||||
"auth.verify-email.notification.email-sent.description": {
|
||||
"message": "Er is een e-mail met een link om je account te verifiëren verzonden naar {email}."
|
||||
},
|
||||
"auth.verify-email.notification.email-sent.title": {
|
||||
"message": "E-mail verzonden"
|
||||
},
|
||||
"auth.verify-email.notification.error-occurred.title": {
|
||||
"message": "Er is een fout opgetreden"
|
||||
},
|
||||
"auth.verify-email.post-verification.description": {
|
||||
"message": "Je e-mail adres werd bevestigd!"
|
||||
},
|
||||
@@ -1244,9 +977,6 @@
|
||||
"dashboard.affiliate-links.create.button": {
|
||||
"message": "Maak een affiliate-link"
|
||||
},
|
||||
"dashboard.affiliate-links.empty.no-codes": {
|
||||
"message": "Er zijn geen affiliatecodes gevonden."
|
||||
},
|
||||
"dashboard.affiliate-links.error.title": {
|
||||
"message": "Fout bij het laden van affiliatelinks"
|
||||
},
|
||||
@@ -1562,9 +1292,6 @@
|
||||
"dashboard.creator-withdraw-modal.withdraw-limit-used": {
|
||||
"message": "Je hebt je opnamelimiet <b>{withdrawLimit}</b> bereikt. Je moet een belastingformulier invullen om meer geld op te nemen."
|
||||
},
|
||||
"dashboard.discord-roles.banner.body": {
|
||||
"message": "Je komt in aanmerking voor {roles}. Koppel je Discord-account via Modrinth en wij zorgen ervoor dat ze automatisch worden gesynchroniseerd."
|
||||
},
|
||||
"dashboard.discord-roles.banner.cta": {
|
||||
"message": "Verbind Discord"
|
||||
},
|
||||
@@ -1664,33 +1391,9 @@
|
||||
"dashboard.projects.links.header.edit": {
|
||||
"message": "Wijzig linken"
|
||||
},
|
||||
"dashboard.projects.links.issue-tracker.description": {
|
||||
"message": "Een plek waar gebruikers bugs, problemen en opmerkingen over je project kunnen melden."
|
||||
},
|
||||
"dashboard.projects.links.issue-tracker.label": {
|
||||
"message": "Probleemtracker"
|
||||
},
|
||||
"dashboard.projects.links.placeholder.cleared": {
|
||||
"message": "De bestaande link wordt verwijderd"
|
||||
},
|
||||
"dashboard.projects.links.placeholder.valid-discord-url": {
|
||||
"message": "Voer een geldige Discord-uitnodigings-URL in"
|
||||
},
|
||||
"dashboard.projects.links.placeholder.valid-url": {
|
||||
"message": "Voer een geldige URL in"
|
||||
},
|
||||
"dashboard.projects.links.show-all-projects": {
|
||||
"message": "Alle projecten weergeven"
|
||||
},
|
||||
"dashboard.projects.links.source-code.description": {
|
||||
"message": "Een pagina/repository met de broncode van je project"
|
||||
},
|
||||
"dashboard.projects.links.source-code.label": {
|
||||
"message": "Broncode"
|
||||
},
|
||||
"dashboard.projects.links.wiki-page.description": {
|
||||
"message": "Een pagina met informatie, documentatie en hulp voor het project"
|
||||
},
|
||||
"dashboard.projects.links.wiki-page.label": {
|
||||
"message": "Wiki pagina"
|
||||
},
|
||||
@@ -1706,36 +1409,12 @@
|
||||
"dashboard.projects.project.review-environment-metadata": {
|
||||
"message": "Controller project metadata alstublieft"
|
||||
},
|
||||
"dashboard.projects.selection-bar.aria-label": {
|
||||
"message": ""
|
||||
},
|
||||
"dashboard.projects.selection-bar.selected-count": {
|
||||
"message": "{count, plural, one {# geselecteerd project} other {# geselecteerde projecten}}"
|
||||
},
|
||||
"dashboard.projects.table.id": {
|
||||
"message": "ID"
|
||||
},
|
||||
"dashboard.projects.table.name": {
|
||||
"message": "Naam"
|
||||
},
|
||||
"dashboard.projects.table.select-all-bulk-editable": {
|
||||
"message": "Selecteer alle projecten die bulkbewerking ondersteunen"
|
||||
},
|
||||
"dashboard.projects.table.status": {
|
||||
"message": "Status"
|
||||
},
|
||||
"dashboard.projects.table.type": {
|
||||
"message": "Type"
|
||||
},
|
||||
"dashboard.report.title": {
|
||||
"message": "{id} rapporteren"
|
||||
},
|
||||
"dashboard.reports.active-title": {
|
||||
"message": "Actieve rapporten"
|
||||
},
|
||||
"dashboard.reports.title": {
|
||||
"message": "Rapporten"
|
||||
},
|
||||
"dashboard.revenue.available-now": {
|
||||
"message": "Nu beschikbaar"
|
||||
},
|
||||
@@ -1772,9 +1451,6 @@
|
||||
"dashboard.revenue.transactions.btn.download-csv": {
|
||||
"message": "Download als CSV"
|
||||
},
|
||||
"dashboard.revenue.transactions.head-title": {
|
||||
"message": "Transactiegeschiedenis"
|
||||
},
|
||||
"dashboard.revenue.transactions.header": {
|
||||
"message": "Transacties"
|
||||
},
|
||||
@@ -1784,18 +1460,9 @@
|
||||
"dashboard.revenue.transactions.none.desc": {
|
||||
"message": "Je uitbetalingen en opnames zullen hier verschijnen."
|
||||
},
|
||||
"dashboard.revenue.transactions.period.last-month": {
|
||||
"message": "Afgelopen maand"
|
||||
},
|
||||
"dashboard.revenue.transactions.period.this-month": {
|
||||
"message": "Deze maand"
|
||||
},
|
||||
"dashboard.revenue.transactions.see-all": {
|
||||
"message": "Zie alle"
|
||||
},
|
||||
"dashboard.revenue.transactions.year.all": {
|
||||
"message": "Alle jaren"
|
||||
},
|
||||
"dashboard.revenue.withdraw.blocked-tin-mismatch": {
|
||||
"message": "Uw opnames zijn tijdelijk geblokkeerd omdat uw TIN of SSN niet overeenkomt met de gegevens van de IRS. Neem contact op met de klantenservice om uw gegevens te resetten en uw belastingaangifte opnieuw in te dienen."
|
||||
},
|
||||
@@ -1808,33 +1475,6 @@
|
||||
"dashboard.revenue.withdraw.header": {
|
||||
"message": "Opnemen"
|
||||
},
|
||||
"dashboard.sidebar.label.activeReports": {
|
||||
"message": "Actieve rapporten"
|
||||
},
|
||||
"dashboard.sidebar.label.analytics": {
|
||||
"message": "Analytics"
|
||||
},
|
||||
"dashboard.sidebar.label.creators": {
|
||||
"message": "Makers"
|
||||
},
|
||||
"dashboard.sidebar.label.dashboard": {
|
||||
"message": "Dashboard"
|
||||
},
|
||||
"dashboard.sidebar.label.notifications": {
|
||||
"message": "Meldingen"
|
||||
},
|
||||
"dashboard.sidebar.label.organizations": {
|
||||
"message": "Organisaties"
|
||||
},
|
||||
"dashboard.sidebar.label.overview": {
|
||||
"message": "Overzicht"
|
||||
},
|
||||
"dashboard.sidebar.label.projects": {
|
||||
"message": "Projecten"
|
||||
},
|
||||
"dashboard.sidebar.label.revenue": {
|
||||
"message": "Omzet"
|
||||
},
|
||||
"dashboard.withdraw.completion.account": {
|
||||
"message": "Account"
|
||||
},
|
||||
@@ -1931,33 +1571,6 @@
|
||||
"dashboard.withdraw.error.tax-form.title": {
|
||||
"message": "Gelieve het belastingformulier in te vullen"
|
||||
},
|
||||
"discover.install.back-to-server": {
|
||||
"message": "Terug naar de server"
|
||||
},
|
||||
"discover.install.back-to-setup": {
|
||||
"message": "Terug naar de installatie"
|
||||
},
|
||||
"discover.install.cancel-reset": {
|
||||
"message": "Reset annuleren"
|
||||
},
|
||||
"discover.install.error.no-server-world": {
|
||||
"message": "Er is geen serverwereld beschikbaar om te installeren."
|
||||
},
|
||||
"discover.install.error.unsupported-content-type": {
|
||||
"message": "Dit inhoudstype kan niet vanuit Discover op een server worden geïnstalleerd."
|
||||
},
|
||||
"discover.install.heading.reset-modpack": {
|
||||
"message": "Een modpack selecteren om te installeren na het resetten"
|
||||
},
|
||||
"discover.seo.description": {
|
||||
"message": "Zoek en blader door duizenden Minecraft {projectType} op Modrinth met directe, nauwkeurige zoekresultaten. Met onze filters vind je snel de beste Minecraft {projectType}."
|
||||
},
|
||||
"discover.seo.title": {
|
||||
"message": "Zoeken naar {projectType}"
|
||||
},
|
||||
"discover.seo.title-with-query": {
|
||||
"message": "Zoeken naar {projectType} | {query}"
|
||||
},
|
||||
"error.collection.404.list_item.1": {
|
||||
"message": "U heeft mogelijk de URL van de collectie fout ingetypt."
|
||||
},
|
||||
@@ -1973,12 +1586,6 @@
|
||||
"error.collection.404.title": {
|
||||
"message": "Collectie niet gevonden"
|
||||
},
|
||||
"error.generic.401.signed-in-as": {
|
||||
"message": "Je bent momenteel aangemeld als:"
|
||||
},
|
||||
"error.generic.401.title": {
|
||||
"message": "Je hebt geen toegang tot deze pagina"
|
||||
},
|
||||
"error.generic.404.subtitle": {
|
||||
"message": "De pagina die u zoekt, blijkt niet te bestaan."
|
||||
},
|
||||
@@ -2060,9 +1667,6 @@
|
||||
"frog.title": {
|
||||
"message": "Kikker"
|
||||
},
|
||||
"hosting-marketing.available-locations": {
|
||||
"message": "Verkrijgbaar in Noord-Amerika, Europa, Zuidoost-Azië en Australië, voor een brede dekking."
|
||||
},
|
||||
"hosting-marketing.billing.monthly": {
|
||||
"message": "Betaal maandelijks"
|
||||
},
|
||||
@@ -2123,9 +1727,6 @@
|
||||
"hosting-marketing.faq.location": {
|
||||
"message": "Waar bevinden de servers van Modrinth Hosting zich? Kan ik een regio kiezen?"
|
||||
},
|
||||
"hosting-marketing.faq.location.answer": {
|
||||
"message": "Op dit moment hebben we servers beschikbaar in Noord-Amerika, Europa, Zuidoost-Azië en Australië, waaruit u bij aankoop kunt kiezen. In de toekomst komen er nog meer regio’s bij! Als u van regio wilt wisselen, neem dan contact op met de klantenservice."
|
||||
},
|
||||
"hosting-marketing.faq.versions-loaders": {
|
||||
"message": "Welke Minecraft-versies en loaders kunnen worden gebruikt?"
|
||||
},
|
||||
@@ -2399,18 +2000,12 @@
|
||||
"landing.subheading": {
|
||||
"message": "Ontdek, speel en deel Minecraft content via ons open bron platform, speciaal ontwikkeld voor de community."
|
||||
},
|
||||
"layout.action.analytics-events": {
|
||||
"message": "Analytics-gebeurtenissen"
|
||||
},
|
||||
"layout.action.change-theme": {
|
||||
"message": "Thema aanpassen"
|
||||
},
|
||||
"layout.action.create-new": {
|
||||
"message": "Maak nieuwe..."
|
||||
},
|
||||
"layout.action.external-projects": {
|
||||
"message": "Externe projecten"
|
||||
},
|
||||
"layout.action.file-lookup": {
|
||||
"message": "Bestand opzoeken"
|
||||
},
|
||||
@@ -2459,21 +2054,12 @@
|
||||
"layout.banner.add-email.description": {
|
||||
"message": "Om veiligheidsredenen is het bij Modrinth verplicht om een e-mailadres aan je account te koppelen."
|
||||
},
|
||||
"layout.banner.build-fail.always-ignore": {
|
||||
"message": "Altijd negeren"
|
||||
},
|
||||
"layout.banner.build-fail.description": {
|
||||
"message": "Deze implementatie van de Modrinth frontend is er niet in geslaagd om statusinformatie van de API te genereren. Dit kan te wijten zijn aan een storing of een configuratiefout. Voer een nieuwe build uit wanneer de API weer beschikbaar is. Foutcodes: {errors}; Huidige API URL: {url}"
|
||||
},
|
||||
"layout.banner.build-fail.ignore": {
|
||||
"message": "Negeer"
|
||||
},
|
||||
"layout.banner.build-fail.title": {
|
||||
"message": "Fout bij het genereren van de status vanuit de API tijdens het bouwen."
|
||||
},
|
||||
"layout.banner.preview.description": {
|
||||
"message": "Als je de officiële website van Modrinth wilde bezoeken, ga dan naar {url}. Deze preview-versie wordt door het Modrinth-team gebruikt voor testdoeleinden. Deze is gebouwd met behulp van {ref}."
|
||||
},
|
||||
"layout.banner.preview.title": {
|
||||
"message": "Dit is een preview-versie van de Modrinth website."
|
||||
},
|
||||
@@ -2666,69 +2252,15 @@
|
||||
"layout.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Upgrade naar Modrinth+"
|
||||
},
|
||||
"layout.publish.email-verification-required.description": {
|
||||
"message": "Je moet je e-mailadres verifiëren voordat je iets op Modrinth kunt publiceren."
|
||||
},
|
||||
"layout.publish.email-verification-required.title": {
|
||||
"message": "E-mailverificatie vereist"
|
||||
},
|
||||
"moderation.exclude-technical-review": {
|
||||
"message": "TR uitsluiten"
|
||||
},
|
||||
"moderation.moderate": {
|
||||
"message": "Modereer"
|
||||
},
|
||||
"moderation.page.external-projects": {
|
||||
"message": "Externe projecten"
|
||||
},
|
||||
"moderation.page.projects": {
|
||||
"message": "Projecten"
|
||||
},
|
||||
"moderation.page.reports": {
|
||||
"message": "Inlichtingen"
|
||||
},
|
||||
"moderation.page.technicalReview": {
|
||||
"message": "Technische beoordeling"
|
||||
},
|
||||
"modpack-scan-modal.failed": {
|
||||
"message": "Mislukt"
|
||||
},
|
||||
"modpack-scan-modal.load-versions-error": {
|
||||
"message": "Kan versies niet laden: {error}"
|
||||
},
|
||||
"modpack-scan-modal.loading-versions": {
|
||||
"message": "Versies worden geladen..."
|
||||
},
|
||||
"modpack-scan-modal.new-files": {
|
||||
"message": "Nieuwe bestanden"
|
||||
},
|
||||
"modpack-scan-modal.new-groups": {
|
||||
"message": "Nieuwe groepen"
|
||||
},
|
||||
"modpack-scan-modal.no-files": {
|
||||
"message": "Er zijn geen bestanden gevonden."
|
||||
},
|
||||
"modpack-scan-modal.not-scanned": {
|
||||
"message": "Niet gescand"
|
||||
},
|
||||
"modpack-scan-modal.override-files": {
|
||||
"message": "Overschrijvingsbestanden ({count})"
|
||||
},
|
||||
"modpack-scan-modal.pack-file-name": {
|
||||
"message": "Naam van het pack-bestand"
|
||||
},
|
||||
"modpack-scan-modal.scan-all-files": {
|
||||
"message": "Alle bestanden scannen"
|
||||
},
|
||||
"modpack-scan-modal.scan-error": {
|
||||
"message": "Sommige bestanden konden niet worden gescand: {error}"
|
||||
},
|
||||
"modpack-scan-modal.scanning": {
|
||||
"message": "Scannen..."
|
||||
},
|
||||
"modpack-scan-modal.title": {
|
||||
"message": "Modpack-scan ({scanned}/{total} bestanden)"
|
||||
},
|
||||
"muralpay.account-type.checking": {
|
||||
"message": "Controleren"
|
||||
},
|
||||
@@ -2996,18 +2528,12 @@
|
||||
"muralpay.warning.wallet-address": {
|
||||
"message": "Controleer uw portemonnee adres nogmaals. Geld dat naar een onjuist adres is overgemaakt, kan niet worden teruggevonden."
|
||||
},
|
||||
"organization.settings.projects.edit-links.affected-projects": {
|
||||
"message": "De wijzigingen worden toegepast op {count, plural, one {# project} other {# projects}}."
|
||||
},
|
||||
"profile.bio.fallback.creator": {
|
||||
"message": "Een Modrinth creator."
|
||||
},
|
||||
"profile.bio.fallback.user": {
|
||||
"message": "Een Modrinth gebruiker."
|
||||
},
|
||||
"profile.button.analytics": {
|
||||
"message": "Gebruikersstatistieken bekijken"
|
||||
},
|
||||
"profile.button.billing": {
|
||||
"message": "Gebruikers facturering beheren"
|
||||
},
|
||||
@@ -3026,9 +2552,6 @@
|
||||
"profile.button.set-affiliate": {
|
||||
"message": "Zet als partner"
|
||||
},
|
||||
"profile.collection.projects-count": {
|
||||
"message": "{count, plural, one {# project} other {# projecten}}"
|
||||
},
|
||||
"profile.details.label.auth-providers": {
|
||||
"message": "Beveiliging providers"
|
||||
},
|
||||
@@ -3065,6 +2588,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Collectie"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, one {download} other {downloads}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Lid geworden"
|
||||
},
|
||||
@@ -3083,6 +2609,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Organisaties"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {project} other {projecten}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Opslaan..."
|
||||
},
|
||||
@@ -3092,12 +2621,6 @@
|
||||
"profile.meta.description-with-bio": {
|
||||
"message": "{bio} - Download {username}'s projecten op Modrinth"
|
||||
},
|
||||
"profile.official-account": {
|
||||
"message": "Officieel Modrinth-account"
|
||||
},
|
||||
"profile.official-account.bio": {
|
||||
"message": "Het officiële gebruikersaccount van Modrinth. Neem contact op met het Helpcentrum via <support-link></support-link> of per e-mail via <email></email>"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "{count, plural, one {<stat>{count}</stat> project volger}other {<stat>{count}</stat> project volgers}}"
|
||||
},
|
||||
@@ -3269,107 +2792,20 @@
|
||||
"project.details.licensed": {
|
||||
"message": "Gelicentieerd"
|
||||
},
|
||||
"project.download.base-game-version-incompatible-tooltip": {
|
||||
"message": "Deze spelversie is niet compatibel met het basisproject."
|
||||
},
|
||||
"project.download.base-loader-incompatible-tooltip": {
|
||||
"message": "Deze loader is niet compatibel met het basisproject."
|
||||
},
|
||||
"project.download.compatible-version-title": {
|
||||
"message": "Compatibele versies"
|
||||
},
|
||||
"project.download.dependencies-title": {
|
||||
"message": "Afhankelijkheden"
|
||||
},
|
||||
"project.download.dependency-already-installed": {
|
||||
"message": "Deze afhankelijkheid is al geïnstalleerd"
|
||||
},
|
||||
"project.download.dependency-any-compatible": {
|
||||
"message": "Elke compatibele"
|
||||
},
|
||||
"project.download.dependency-conflicting": {
|
||||
"message": "Deze afhankelijkheid is in conflict met een andere afhankelijkheid"
|
||||
},
|
||||
"project.download.dependency-download-file": {
|
||||
"message": "{filename} downloaden"
|
||||
},
|
||||
"project.download.dependency-download-file-with-size": {
|
||||
"message": "{filename} downloaden ({size})"
|
||||
},
|
||||
"project.download.dependency-duplicate": {
|
||||
"message": "Deze afhankelijkheid is al opgenomen"
|
||||
},
|
||||
"project.download.dependency-missing-version": {
|
||||
"message": "Deze versie van de afhankelijkheid is niet beschikbaar"
|
||||
},
|
||||
"project.download.dependency-no-compatible-version": {
|
||||
"message": "Er is geen compatibele versie beschikbaar voor deze afhankelijkheid"
|
||||
},
|
||||
"project.download.dependency-quilt-fabric-api": {
|
||||
"message": "Fabric API wordt voor Quilt overgeslagen"
|
||||
},
|
||||
"project.download.dependency-resource-pack-admonition": {
|
||||
"message": "Dit project is afhankelijk van een vereist bronpakket. Download het en plaats het in je {folder} map."
|
||||
},
|
||||
"project.download.dependency-unavailable": {
|
||||
"message": "Deze afhankelijkheid kan niet worden gedownload"
|
||||
},
|
||||
"project.download.download": {
|
||||
"message": "Downloaden"
|
||||
},
|
||||
"project.download.download-as-zip": {
|
||||
"message": "Als .zip downloaden"
|
||||
},
|
||||
"project.download.download-version": {
|
||||
"message": "{version} downloaden"
|
||||
},
|
||||
"project.download.download-with-dependencies": {
|
||||
"message": "Downloaden met afhankelijkheden"
|
||||
},
|
||||
"project.download.download-with-recommended": {
|
||||
"message": "Met aanbevolen instellingen downloaden"
|
||||
},
|
||||
"project.download.download-with-recommended-as-zip": {
|
||||
"message": "Met aanbevolen instellingen als .zip downloaden"
|
||||
},
|
||||
"project.download.duplicate-dependencies-hidden": {
|
||||
"message": "Dubbele afhankelijkheden worden verborgen"
|
||||
},
|
||||
"project.download.file-unavailable": {
|
||||
"message": "Dit bestand kan niet worden gedownload"
|
||||
},
|
||||
"project.download.game-version-unsupported-tooltip": {
|
||||
"message": "{title} steunt niet {gameVersion} voor {platform}"
|
||||
},
|
||||
"project.download.install-with-app": {
|
||||
"message": "Via de Modrinth-app installeren"
|
||||
},
|
||||
"project.download.manually": {
|
||||
"message": "Handmatig downloaden"
|
||||
},
|
||||
"project.download.no-app": {
|
||||
"message": "Heb je de Modrinth App niet?"
|
||||
},
|
||||
"project.download.no-game-versions-found": {
|
||||
"message": "Geen spelversies gevonden"
|
||||
},
|
||||
"project.download.no-versions-available": {
|
||||
"message": "Geen versies beschikbaar voor {gameVersion} en {platform}."
|
||||
},
|
||||
"project.download.platform-unsupported-tooltip": {
|
||||
"message": "{title} steunt niet {platform} voor {gameVersion}"
|
||||
},
|
||||
"project.download.recommended-title": {
|
||||
"message": "Aanbevolen"
|
||||
},
|
||||
"project.download.required-resource-pack-admonition": {
|
||||
"message": "Voor dit gegevenspakket is ook een bronpakket nodig. Download het en plaats het in je {folder} map."
|
||||
},
|
||||
"project.download.required-resource-pack-short": {
|
||||
"message": "Bronpakket"
|
||||
},
|
||||
"project.download.search-game-versions": {
|
||||
"message": "Spelversie kiezen"
|
||||
"message": "Game-versies zoeken..."
|
||||
},
|
||||
"project.download.select-game-version": {
|
||||
"message": "Selecteer game-versie"
|
||||
@@ -3431,12 +2867,6 @@
|
||||
"project.moderation.admonition.withheld.header": {
|
||||
"message": "Verborgen door moderator"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "Dit is een besloten discussiethread met de moderators van Modrinth. Zij kunnen je berichten sturen over zaken die betrekking hebben op dit project."
|
||||
},
|
||||
"project.moderation.thread.title": {
|
||||
"message": "Moderatieberichten"
|
||||
},
|
||||
"project.moderation.title": {
|
||||
"message": "Moderatie"
|
||||
},
|
||||
@@ -3500,24 +2930,6 @@
|
||||
"project.settings.general.url.title": {
|
||||
"message": "URL"
|
||||
},
|
||||
"project.settings.permissions.attention-needed.description.proj-approved": {
|
||||
"message": "Gelieve aan te tonen dat u toestemming hebt om alle onderstaande bestanden te verspreiden. Zodra dit is voltooid, worden de achtergehouden versies automatisch gepubliceerd."
|
||||
},
|
||||
"project.settings.permissions.attention-needed.description.proj-draft": {
|
||||
"message": "Gelieve aan te tonen dat u toestemming hebt om alle onderstaande bestanden te verspreiden, voordat u uw project ter beoordeling indient."
|
||||
},
|
||||
"project.settings.permissions.attention-needed.title": {
|
||||
"message": "Onbekende externe inhoud"
|
||||
},
|
||||
"project.settings.permissions.sort.most-files": {
|
||||
"message": "Meeste bestanden"
|
||||
},
|
||||
"project.settings.permissions.sort.recently-edited": {
|
||||
"message": "Onlangs bewerkt"
|
||||
},
|
||||
"project.settings.permissions.sort.rejected": {
|
||||
"message": "Afgewezen"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Instellingen"
|
||||
},
|
||||
@@ -3591,10 +3003,10 @@
|
||||
"message": "Melding indienen"
|
||||
},
|
||||
"scopes.analytics.description": {
|
||||
"message": "Bekijk je analysegegevens"
|
||||
"message": "Krijg toegang tot jouw analysegegevens"
|
||||
},
|
||||
"scopes.analytics.label": {
|
||||
"message": "Analyses bekijken"
|
||||
"message": "Lees analyses"
|
||||
},
|
||||
"scopes.category.analytics": {
|
||||
"message": "Statistieken"
|
||||
@@ -3717,10 +3129,10 @@
|
||||
"message": "Schrijf betalingen"
|
||||
},
|
||||
"scopes.performAnalytics.description": {
|
||||
"message": "Analytische acties uitvoeren"
|
||||
"message": "Voer analyserende handelingen uit"
|
||||
},
|
||||
"scopes.performAnalytics.label": {
|
||||
"message": "Analyses uitvoeren"
|
||||
"message": "Voer analyses uit"
|
||||
},
|
||||
"scopes.projectCreate.description": {
|
||||
"message": "Nieuwe projecten aanmaken"
|
||||
@@ -4618,8 +4030,5 @@
|
||||
},
|
||||
"version.environment.unknown.title": {
|
||||
"message": "Onbekende omgeving"
|
||||
},
|
||||
"version.section.content.dev-info.maven-note": {
|
||||
"message": "Opmerking: Indien beschikbaar, raden we je aan om de Maven-repository van de maker te gebruiken, aangezien deze informatie over transitieve afhankelijkheden bevat die de Modrinth Maven API niet biedt. Bovendien kun je te maken krijgen met dubbele afhankelijkheden als je voor je afhankelijkheden zowel Modrinth- als niet-Modrinth-Maven-repositories gebruikt, omdat de groeps-ID anders zal zijn wanneer deze via de Modrinth Maven API wordt aangeboden."
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user