Compare commits

..
Author SHA1 Message Date
Calum H. (IMB11) b33eea96eb Merge remote-tracking branch 'origin/main' into cal/post-release-shared-instances
# Conflicts:
#	apps/app-frontend/src/pages/instance/share/index.vue
#	apps/app-frontend/src/pages/instance/share/shared-instance-members-table.vue
2026-07-28 13:31:28 +01:00
Calum H. (IMB11) 5f167550ed fix: 50 user limit 2026-07-28 13:30:00 +01:00
3c8bb0923d fix authorized apps settings, redesign, fix retro theme vars (#6900)
* fix authorized apps settings, redesign, fix retro theme vars

* merge

* fix: retro in app

---------

Co-authored-by: Calum H. (IMB11) <contact@cal.engineer>
2026-07-28 12:16:05 +00:00
7c4190fb9c feat: move users page to xplat page system (#6889)
* feat: move users page to xplat

* feat: stop doing tauri plugin open for user links

* feat: qa

* fix: qa

* fix: qa

* fix: comment

* fix: prepr

* prepr

* prepr

* prepr

---------

Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2026-07-27 20:02:33 +00:00
SychicandGitHub ebc7cac8b0 feat(labrinth): user blocking (#6837)
* feat(labrinth): user blocking

still wip, nothing is hooked up

* style(labrinth): cargo fmt

* refactor(labrinth): move block/unblock routes to public api

* feat(labrinth): block friend requests if blocked

* feat(labrinth): remove friend/request on block

* feat(labrinth): get blocked users endpoint
2026-07-27 19:41:57 +00:00
François-Xavier TalbotandGitHub 224c28f29d feat: more details linked account info for support/moderation (#6897)
* feat: show discord + steam ID + github profile in "Show details" user modal

* pnpm intl:extract
2026-07-27 19:20:38 +00:00
aecsocketandGitHub e192f6a0af feat: define default search vars in env (#6902)
* feat: define default search vars in env

* fix
2026-07-27 19:17:14 +00:00
ProspectorandGitHub c938ca3ceb update toggle filter design (#6888)
change toggle filters to just use exclude-only filters, same design as the others.
2026-07-27 11:49:52 -07:00
François-Xavier TalbotandGitHub 20adb0f16a fix(labrinth): let through emails when neverbounce hangs or fails (#6898)
* fix(labrinth): let through emails when neverbounce hangs or fails

* chore(ci): stack size
2026-07-27 18:10:54 +00:00
Calum H. (IMB11) c89bbf640f fix: yeet svg 2026-07-27 18:30:49 +01:00
Calum H. (IMB11) b15103e088 fix: fmt 2026-07-27 18:17:54 +01:00
Calum H. (IMB11) 5f1f97d981 fix: fmt 2026-07-27 18:11:45 +01:00
Calum H. (IMB11) f1f306d7ea feat: smaller qa points 2026-07-27 18:09:46 +01:00
Calum H. (IMB11) 5b5468020d feat: show avatar in install to play modal 2026-07-27 17:37:01 +01:00
Calum H.andGitHub 354940a8c6 fix: search resetting to page 1 (#6896) 2026-07-27 15:09:13 +00:00
4c2e64e31f fix: try fix install jobs being bricked/improve tracing (#6890)
* fix: try fix install jobs being bricked/improve tracing

* fix: rev cmts

---------

Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2026-07-27 14:47:46 +00:00
Calum H. (IMB11) 893b163a86 fix: lint 2026-07-27 15:40:16 +01:00
Calum H. (IMB11) 08bb4de9dc fix: better offline handling 2026-07-27 15:39:52 +01:00
Calum H. (IMB11) c8b21fe120 feat: instance icon improvements 2026-07-27 14:28:11 +01:00
Calum H. (IMB11) 1c22503d01 fix: moderation issues with shared instances 2026-07-27 13:33:24 +01:00
Calum H. (IMB11) a04555dc91 feat: invite management frontend 2026-07-27 13:11:38 +01:00
Calum H. (IMB11) e9aedd58d4 feat: update req banner 2026-07-27 12:23:10 +01:00
Calum H. (IMB11) fd06f6913c fix: hide filters if just one type 2026-07-27 12:13:28 +01:00
Calum H. (IMB11) 7741e7f2dd qa: invite modal dropdown + other + clamp limits 2026-07-27 12:11:48 +01:00
Calum H. (IMB11) af9cb8a625 fix: 20 user cap 2026-07-27 12:03:29 +01:00
Modrinth BotandGitHub 372e2bf47b New translations from Crowdin (main) (#6892) 2026-07-27 10:46:42 +00:00
Magnus JensenandGitHub 36d786f504 Fix vertical mis-aligned badge in notifcations (#6887)
vertical align badge
2026-07-26 20:25:19 +00:00
Prospector 1a1e1ea448 changelog 2026-07-26 12:22:50 -07:00
ProspectorandGitHub 24240d514a update 24-48hrs -> within a week to give more realistic estimate (#6886) 2026-07-26 12:06:31 -07:00
aecsocketandGitHub 158de019a6 fix: search indexing performance and batching (#6521)
* Add consume batching delay

* maybe fix

* max batch size

* more logging

* parallelize remove tasks

* delete/upsert project/version messages

* prepare

* more logging

* log number of docs

* try more targeted, homogenous version change ops

* ensure only necessary fields are serialized into typesense

* disable index background task

* wip: script changes

* don't facet by project id

* fix

* fix clippy

* batch by document and dedup loaders

* fix test

* wip: projects/versions collections

* clean up SearchBackend interface

* cleanup pass

* cleanup pass 2

* standardise fn names

* cleanup pass

* fix compile

* factor out filter rewriting

* query perf

* put categories into the project doc

* wip: search filter AST

* doc comment

* more AST normalization

* (temp) convert search request errors into internal errors

* implement unary NOT

* tombi fmt

* fix tests

* revert request error

* try increase stack size
2026-07-26 14:55:00 +00:00
Prospector 54cc1898fa changelog 2026-07-25 18:32:56 -07:00
b96a1cfa58 fix: allow crowdin badges to skip image proxy (#6861)
Add crowdin to allowed hostnames

Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2026-07-26 01:14:21 +00:00
59a794ebb1 Minor UX UI tweaks (#6596)
* feat(ux): Add letter counters to the bio and username

the username letter counter only appears after the 30th letter to not encourage people to have long usernames for no reason

* feat(ux): Added "Expand" button to bio on mobile

* Revert "feat(ux): Added "Expand" button to bio on mobile"

This reverts commit f7e036002a.

* prepr

---------

Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2026-07-26 00:47:14 +00:00
b4380aee87 feat(moderation): modpack scanning improvements (#6843)
* feat(moderation): make modpack scanning improvements

* oopsie

* feat(moderation): batch size for modpack scan

* feat: i18n for modpack scan modal

* chore: remove debug line

* run intl:extract and prepr

---------

Co-authored-by: coolbot100s <76798835+coolbot100s@users.noreply.github.com>
Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2026-07-26 00:14:09 +00:00
François-Xavier TalbotandGitHub 2cf71a53f2 chore(ci): increase rust stack size (#6874) 2026-07-26 00:11:08 +00:00
coolbotandGitHub 44be49416b feat: update private use moderation msgs and stage (#6872) 2026-07-26 00:10:48 +00:00
ProspectorandGitHub 7f07e66e4f fix: users not seeing moderation page banners and info 🤦 (#6882) 2026-07-25 17:10:24 -07:00
247 changed files with 15513 additions and 6373 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
# Windows has stack overflows when calling from Tauri, so we increase the default stack size used by the compiler
[target.'cfg(windows)']
[target."cfg(windows)"]
rustflags = ["-C", "link-args=/STACK:16777220"]
[target.x86_64-pc-windows-msvc]
+1 -1
View File
@@ -81,7 +81,7 @@ jobs:
REDIS_CONNECTION_TYPE: multiplexed
REDIS_URL: redis://127.0.0.1:7000,redis://127.0.0.1:7001,redis://127.0.0.1:7002,redis://127.0.0.1:7003,redis://127.0.0.1:7004,redis://127.0.0.1:7005
# Avoid stack overflows in tests
RUST_MIN_STACK: 33554432
RUST_MIN_STACK: 134217728
steps:
- name: Check out code
Generated
+6 -3
View File
@@ -4806,7 +4806,7 @@ dependencies = [
"libc",
"percent-encoding",
"pin-project-lite",
"socket2 0.5.10",
"socket2 0.6.5",
"system-configuration",
"tokio",
"tower-service",
@@ -5465,6 +5465,7 @@ dependencies = [
"bytes",
"censor",
"chrono",
"chumsky",
"clap 4.5.48",
"clickhouse",
"color-eyre",
@@ -5518,6 +5519,7 @@ dependencies = [
"serde_with",
"sha1 0.10.6",
"sha2",
"smallvec",
"spdx",
"sqlx",
"sqlx-tracing",
@@ -8014,7 +8016,7 @@ dependencies = [
"quinn-udp",
"rustc-hash",
"rustls 0.23.32",
"socket2 0.5.10",
"socket2 0.6.5",
"thiserror 2.0.17",
"tokio",
"tracing",
@@ -8051,7 +8053,7 @@ dependencies = [
"cfg_aliases",
"libc",
"once_cell",
"socket2 0.5.10",
"socket2 0.6.5",
"tracing",
"windows-sys 0.60.2",
]
@@ -11018,6 +11020,7 @@ dependencies = [
"heck 0.5.0",
"hickory-resolver 0.25.2",
"httpdate",
"image",
"indicatif",
"itertools 0.14.0",
"modrinth-content-management",
+2
View File
@@ -59,6 +59,7 @@ bytes = "1.10.1"
censor = "0.3.0"
chardetng = "0.1.17"
chrono = "0.4.42"
chumsky = "0.9.3"
cidre = { version = "0.15.0", default-features = false, features = [
"macos_15_0"
] }
@@ -192,6 +193,7 @@ sha1 = "0.10.6"
sha1_smol = { version = "1.0.1", features = ["std"] }
sha2 = "0.10.9"
shlex = "1.3.0"
smallvec = "1.15.1"
spdx = "0.12.0"
sqlx = { version = "0.8.6", default-features = false }
sqlx-tracing = { path = "packages/sqlx-tracing" }
+8 -4
View File
@@ -115,6 +115,7 @@ import { mergeUrlQuery, parseModrinthLink } from '@/helpers/project-links.ts'
import { get as getSettings, set as setSettings } from '@/helpers/settings.ts'
import { get_opening_command, initialize_state } from '@/helpers/state'
import { hasActivePride26Midas, hasMidasBadge } from '@/helpers/user-campaigns.ts'
import { parse_modrinth_user_link } from '@/helpers/users'
import {
areUpdatesEnabled,
enqueueUpdateForInstallation,
@@ -265,7 +266,7 @@ providePageContext({
themeStore.getFeatureFlag('server_ram_as_bytes_always_on'),
),
},
openExternalUrl: (url) => openUrl(url),
openExternalUrl: (url) => void openUrl(url),
})
provideModalBehavior({
noblur: computed(() => !themeStore.advancedRendering),
@@ -966,7 +967,7 @@ async function declineServerInviteNotification(notification) {
function openServerInviteInviterProfile(inviterName) {
if (!inviterName) return
openUrl(`${config.siteUrl}/user/${encodeURIComponent(inviterName)}`)
void router.push(`/user/${encodeURIComponent(inviterName)}`)
}
async function handleLiveNotification(notification) {
@@ -1407,8 +1408,11 @@ function handleClick(e) {
!target.href.startsWith('https://tauri.localhost') &&
!target.href.startsWith('http://tauri.localhost')
) {
const userPath = parse_modrinth_user_link(target.href)
const parsed = parseModrinthLink(target.href)
if (target.target !== '_blank' && parsed) {
if (userPath) {
void router.push(userPath)
} else if (target.target !== '_blank' && parsed) {
void openModrinthProjectLinkInApp(parsed)
} else {
openUrl(target.href)
@@ -1654,7 +1658,7 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
:options="[
{
id: 'view-profile',
action: () => openUrl('https://modrinth.com/user/' + credentials.user.username),
action: () => router.push(`/user/${encodeURIComponent(credentials.user.username)}`),
},
{
id: 'sign-out',
@@ -8,13 +8,14 @@ import {
OverflowMenu,
useVIntl,
} from '@modrinth/ui'
import { openUrl } from '@tauri-apps/plugin-opener'
import { useTemplateRef } from 'vue'
import { useRouter } from 'vue-router'
import ContextMenu from '@/components/ui/ContextMenu.vue'
import type { FriendWithUserData } from '@/helpers/friends.ts'
const { formatMessage } = useVIntl()
const router = useRouter()
const props = withDefaults(
defineProps<{
@@ -54,7 +55,7 @@ function createContextMenuOptions(friend: FriendWithUserData) {
}
function openProfile(username: string) {
openUrl('https://modrinth.com/user/' + username)
void router.push(`/user/${encodeURIComponent(username)}`)
}
const friendOptions = useTemplateRef('friendOptions')
@@ -15,12 +15,12 @@
</PageHeaderBadgeItem>
<PageHeaderBadgeItem
v-else
:icon="UnknownIcon"
:tooltip="sharedInstanceTooltip"
aria-label="Shared instance information"
class="!border-blue !bg-highlight-blue !text-blue"
>
Shared
<UnknownIcon class="block size-4 shrink-0 text-current" aria-hidden="true" />
</PageHeaderBadgeItem>
</template>
@@ -186,8 +186,8 @@ import {
type TeleportOverflowMenuItem,
useVIntl,
} from '@modrinth/ui'
import { openUrl } from '@tauri-apps/plugin-opener'
import { computed } from 'vue'
import { useRouter } from 'vue-router'
import type { GameInstance } from '@/helpers/types'
@@ -247,6 +247,7 @@ const messages = defineMessages({
defaultMessage: "This instance's content is being shared to other users.",
},
})
const router = useRouter()
const props = withDefaults(
defineProps<{
@@ -331,7 +332,7 @@ const sharedInstanceManagerLabel = computed(() =>
const sharedInstanceManagerAction = computed(() => {
const manager = props.sharedInstanceManager
if (manager?.type !== 'user') return undefined
return () => openUrl(`https://modrinth.com/user/${encodeURIComponent(manager.name)}`)
return () => router.push(`/user/${encodeURIComponent(manager.name)}`)
})
const playtimeLabel = computed(() => {
if (props.timePlayed <= 0) return formatMessage(messages.neverPlayed)
@@ -6,6 +6,11 @@
:instance="instance"
@published="emit('published')"
/>
<InstanceAdmonitionsSharedInstanceUpdateAvailable
v-else-if="item.kind === 'shared-instance-update-available'"
:instance-name="instance.name"
@review="emit('review-update', $event)"
/>
<InstanceAdmonitionsSharedInstanceWrongAccount
v-else-if="item.kind === 'shared-instance-wrong-account'"
:expected-user-id="sharedInstanceExpectedUserId"
@@ -33,6 +38,7 @@ import type { GameInstance } from '@/helpers/types'
import InstanceAdmonitionsSharedInstanceStale from './instance-admonitions-shared-instance-stale.vue'
import InstanceAdmonitionsSharedInstanceUnavailable from './instance-admonitions-shared-instance-unavailable.vue'
import InstanceAdmonitionsSharedInstanceUpdateAvailable from './instance-admonitions-shared-instance-update-available.vue'
import InstanceAdmonitionsSharedInstanceWrongAccount from './instance-admonitions-shared-instance-wrong-account.vue'
import type { InstanceAdmonitionItem, SharedInstanceRole } from './types'
@@ -48,11 +54,13 @@ const props = defineProps<{
sharedInstanceExpectedUserId?: string | null
sharedInstanceRole?: SharedInstanceRole | null
sharedInstanceSignedOut?: boolean
sharedInstanceUpdateAvailable?: boolean
}>()
const emit = defineEmits<{
published: []
delete: []
'review-update': [event: MouseEvent]
}>()
const sharedInstanceWrongAccount = computed(() => props.sharedInstanceWrongAccount ?? false)
@@ -68,6 +76,14 @@ const showSharedInstancePublishAdmonition = computed(
props.instance.shared_instance?.role === 'owner' &&
props.instance.shared_instance.status === 'stale',
)
const showSharedInstanceUpdateAdmonition = computed(
() =>
!sharedInstanceWrongAccount.value &&
!displayedSharedInstanceUnavailableReason.value &&
props.instance.install_stage === 'installed' &&
props.sharedInstanceRole === 'member' &&
props.sharedInstanceUpdateAvailable === true,
)
const stackItems = computed<InstanceAdmonitionItem[]>(() => {
const items: InstanceAdmonitionItem[] = []
@@ -104,6 +120,15 @@ const stackItems = computed<InstanceAdmonitionItem[]>(() => {
})
}
if (showSharedInstanceUpdateAdmonition.value) {
items.push({
id: 'shared-instance-update-available',
type: 'info',
dismissible: false,
kind: 'shared-instance-update-available',
})
}
return items
})
@@ -21,6 +21,19 @@ export const instanceAdmonitionsMessages = defineMessages({
id: 'app.instance.admonitions.shared-instance.reviewing-button',
defaultMessage: 'Reviewing...',
},
sharedInstanceUpdateAvailableHeader: {
id: 'app.instance.admonitions.shared-instance.update-available-header',
defaultMessage: 'An update is available',
},
sharedInstanceUpdateAvailableBody: {
id: 'app.instance.admonitions.shared-instance.update-available-body',
defaultMessage:
'An update is required to play {name}. Please update to latest version to launch the game.',
},
sharedInstanceReviewUpdateButton: {
id: 'app.instance.admonitions.shared-instance.review-update-button',
defaultMessage: 'Review update',
},
sharedInstanceReviewHeader: {
id: 'app.instance.admonitions.shared-instance.review-header',
defaultMessage: 'Review changes',
@@ -0,0 +1,34 @@
<template>
<Admonition
type="info"
inline-actions
:header="formatMessage(messages.sharedInstanceUpdateAvailableHeader)"
>
{{ formatMessage(messages.sharedInstanceUpdateAvailableBody, { name: instanceName }) }}
<template #actions>
<ButtonStyled color="blue">
<button class="!h-10" @click="emit('review', $event)">
<DownloadIcon aria-hidden="true" />
{{ formatMessage(messages.sharedInstanceReviewUpdateButton) }}
</button>
</ButtonStyled>
</template>
</Admonition>
</template>
<script setup lang="ts">
import { DownloadIcon } from '@modrinth/assets'
import { Admonition, ButtonStyled, useVIntl } from '@modrinth/ui'
import { instanceAdmonitionsMessages as messages } from './instance-admonitions-messages'
defineProps<{
instanceName: string
}>()
const emit = defineEmits<{
review: [event: MouseEvent]
}>()
const { formatMessage } = useVIntl()
</script>
@@ -2,6 +2,7 @@ import type { StackedAdmonitionItem } from '@modrinth/ui'
export type InstanceAdmonitionKind =
| 'shared-instance-stale'
| 'shared-instance-update-available'
| 'shared-instance-unavailable'
| 'shared-instance-wrong-account'
@@ -109,9 +109,13 @@ watch(selectedReleaseChannel, async (channel, previousChannel) => {
})
async function resetIcon() {
icon.value = undefined
await edit_icon(instance.value.id, null).catch(handleError)
trackEvent('InstanceRemoveIcon')
try {
await edit_icon(instance.value.id, null)
icon.value = undefined
trackEvent('InstanceRemoveIcon')
} catch (error) {
handleError(error)
}
}
async function setIcon() {
@@ -127,10 +131,13 @@ async function setIcon() {
if (!value) return
icon.value = value
await edit_icon(instance.value.id, icon.value).catch(handleError)
trackEvent('InstanceSetIcon')
try {
await edit_icon(instance.value.id, value)
icon.value = value
trackEvent('InstanceSetIcon')
} catch (error) {
handleError(error)
}
}
const editInstanceObject = computed(() => ({
@@ -1,31 +1,156 @@
<template>
<div>
<div class="flex flex-col gap-8">
<section class="flex flex-col gap-4">
<div class="flex flex-col gap-1">
<h3 class="m-0 text-lg font-semibold text-contrast">
{{ formatMessage(messages.activeInvitesTitle) }}
</h3>
<p class="m-0 text-secondary">
{{ formatMessage(messages.activeInvitesDescription) }}
</p>
</div>
<Table :columns="inviteColumns" :data="activeInvites" row-key="id" table-min-width="36rem">
<template #empty-state>
<div class="flex h-40 items-center justify-center text-secondary">
{{ formatMessage(messages.noActiveInvites) }}
</div>
</template>
<template #cell-id="{ row }">
<CopyCode
:text="`${config.siteUrl}/share/${encodeURIComponent(row.id)}`"
:display-text="`/${row.id}`"
/>
</template>
<template #cell-uses="{ row }">
<span class="font-medium text-primary">{{ row.uses }}</span>
<span> / {{ row.maxUses }}</span>
</template>
<template #cell-expiration="{ row }">
<span v-tooltip="formatDateTime(row.expiration)" class="whitespace-nowrap">
{{ formatRelativeTime(row.expiration) }}
</span>
</template>
<template #cell-actions="{ row }">
<div class="flex justify-end">
<ButtonStyled circular type="transparent">
<button
v-tooltip="formatMessage(messages.revokeInvite)"
:aria-label="
formatMessage(messages.revokeInviteWithCode, {
code: row.id,
})
"
class="text-secondary hover:!filter-none hover:text-red focus-visible:!filter-none"
@click="revokeInviteModal?.show(row.id)"
>
<XIcon aria-hidden="true" />
</button>
</ButtonStyled>
</div>
</template>
</Table>
</section>
<SharedInstanceInstallationSettingsControls
can-unpublish
:busy="isBusy"
:unpublishing="unpublishing"
:unpublish="unpublishSharedInstance"
/>
<ConfirmRevokeSharedInstanceInviteModal ref="revokeInviteModal" @revoke="revokeInvite" />
</div>
</template>
<script setup lang="ts">
import { injectNotificationManager } from '@modrinth/ui'
import { XIcon } from '@modrinth/assets'
import {
ButtonStyled,
CopyCode,
defineMessages,
Table,
type TableColumn,
useFormatDateTime,
useRelativeTime,
useVIntl,
} from '@modrinth/ui'
import { useQueryClient } from '@tanstack/vue-query'
import { computed, ref } from 'vue'
import ConfirmRevokeSharedInstanceInviteModal from '@/components/ui/shared-instances/ConfirmRevokeSharedInstanceInviteModal.vue'
import SharedInstanceInstallationSettingsControls from '@/components/ui/shared-instances/SharedInstanceInstallationSettingsControls.vue'
import { unpublish_shared_instance } from '@/helpers/instance'
import { config } from '@/config'
import { type SharedInstanceInvite, unpublish_shared_instance } from '@/helpers/instance'
import { useSharedInstanceErrors } from '@/helpers/shared-instance-errors'
import { injectInstanceSettings } from '@/providers/instance-settings'
const { instance, offline, onUnlinked } = injectInstanceSettings()
const { handleError } = injectNotificationManager()
const { notifySharedInstanceError } = useSharedInstanceErrors()
const { formatMessage } = useVIntl()
const queryClient = useQueryClient()
const unpublishing = ref(false)
const revokeInviteModal = ref<InstanceType<typeof ConfirmRevokeSharedInstanceInviteModal>>()
const formatRelativeTime = useRelativeTime()
const formatDateTime = useFormatDateTime({ dateStyle: 'medium', timeStyle: 'short' })
const isBusy = computed(
() => instance.value.install_stage !== 'installed' || unpublishing.value || !!offline,
)
type InviteTableColumn = 'id' | 'uses' | 'expiration' | 'actions'
const inviteColumns = computed<TableColumn<InviteTableColumn>[]>(() => [
{
key: 'id',
label: formatMessage(messages.inviteCodeLabel),
width: 'clamp(11rem, 34%, 19rem)',
},
{
key: 'uses',
label: formatMessage(messages.usesLabel),
width: 'clamp(7rem, 18%, 10rem)',
},
{
key: 'expiration',
label: formatMessage(messages.expiresLabel),
width: 'clamp(9rem, 28%, 14rem)',
},
{
key: 'actions',
label: formatMessage(messages.actionsLabel),
align: 'right',
width: '5.5rem',
},
])
const now = Date.now()
// TODO: Use actual endpoint
const activeInvites = ref<SharedInstanceInvite[]>([
{
id: 'wqHPxNagZr',
expiration: new Date(now + 6 * 24 * 60 * 60 * 1000).toISOString(),
maxUses: 10,
uses: 0,
},
{
id: 'GbRGfY7hbs',
expiration: new Date(now + 3 * 24 * 60 * 60 * 1000).toISOString(),
maxUses: 10,
uses: 2,
},
{
id: 'k9mvD2QxLc',
expiration: new Date(now + 90 * 60 * 1000).toISOString(),
maxUses: 5,
uses: 4,
},
])
function revokeInvite(inviteId: string) {
activeInvites.value = activeInvites.value.filter((invite) => invite.id !== inviteId)
}
async function unpublishSharedInstance() {
unpublishing.value = true
try {
@@ -34,9 +159,48 @@ async function unpublishSharedInstance() {
await queryClient.invalidateQueries({ queryKey: ['linkedModpackInfo', instance.value.id] })
onUnlinked()
} catch (error) {
handleError(error)
notifySharedInstanceError(error)
} finally {
unpublishing.value = false
}
}
const messages = defineMessages({
activeInvitesTitle: {
id: 'instance.settings.sharing.active-invites.title',
defaultMessage: 'Active invites',
},
activeInvitesDescription: {
id: 'instance.settings.sharing.active-invites.description',
defaultMessage: 'Anyone with one of these invite links can join while it remains active.',
},
inviteCodeLabel: {
id: 'instance.settings.sharing.active-invites.code',
defaultMessage: 'Invite link',
},
usesLabel: {
id: 'instance.settings.sharing.active-invites.uses',
defaultMessage: 'Uses',
},
expiresLabel: {
id: 'instance.settings.sharing.active-invites.expires',
defaultMessage: 'Expires',
},
actionsLabel: {
id: 'instance.settings.sharing.active-invites.actions',
defaultMessage: 'Actions',
},
noActiveInvites: {
id: 'instance.settings.sharing.active-invites.empty',
defaultMessage: 'There are no active invites.',
},
revokeInvite: {
id: 'instance.settings.sharing.active-invites.revoke',
defaultMessage: 'Revoke invite',
},
revokeInviteWithCode: {
id: 'instance.settings.sharing.active-invites.revoke-with-code',
defaultMessage: 'Revoke invite {code}',
},
})
</script>
@@ -1,6 +1,6 @@
<script setup lang="ts">
import { Combobox, defineMessages, ThemeSelector, Toggle, useVIntl } from '@modrinth/ui'
import { ref, watch } from 'vue'
import { computed, ref, watch } from 'vue'
import { get, set } from '@/helpers/settings.ts'
import { getOS } from '@/helpers/utils'
@@ -123,6 +123,11 @@ const messages = defineMessages({
const os = ref(await getOS())
const settings = ref(await get())
const themeOptions = computed(() =>
themeStore
.getThemeOptions()
.filter((theme) => theme !== 'retro' || themeStore.devMode || settings.value.theme === 'retro'),
)
watch(
settings,
@@ -146,7 +151,7 @@ watch(
}
"
:current-theme="settings.theme"
:theme-options="themeStore.getThemeOptions()"
:theme-options="themeOptions"
system-theme-color="system"
/>
@@ -1,6 +1,14 @@
<script setup>
import { BoxIcon, FolderOpenIcon, FolderSearchIcon, TrashIcon } from '@modrinth/assets'
import { ButtonStyled, injectNotificationManager, Slider, StyledInput } from '@modrinth/ui'
import {
ButtonStyled,
defineMessages,
injectNotificationManager,
Slider,
StyledInput,
Toggle,
useVIntl,
} from '@modrinth/ui'
import { open } from '@tauri-apps/plugin-dialog'
import { ref, watch } from 'vue'
@@ -11,9 +19,23 @@ import { showAppDbBackupsFolder } from '@/helpers/utils.js'
import { useTheming } from '@/store/state'
const { handleError } = injectNotificationManager()
const { formatMessage } = useVIntl()
const themeStore = useTheming()
const settings = ref(await get())
const purgeCacheConfirmModal = ref(null)
const alwaysShowCopyDetailsFlag = 'always_show_copy_details'
const messages = defineMessages({
alwaysShowCopyDetailsTitle: {
id: 'app.resource-management-settings.always-show-copy-details.title',
defaultMessage: 'Always show copy details',
},
alwaysShowCopyDetailsDescription: {
id: 'app.resource-management-settings.always-show-copy-details.description',
defaultMessage:
'Show the Copy details action while an install is queued or running. It is always available for failed or interrupted installs.',
},
})
watch(
settings,
@@ -154,6 +176,28 @@ async function findLauncherDir() {
</p>
</div>
<div class="flex items-center justify-between gap-4">
<div>
<h2 class="m-0 text-lg font-semibold text-contrast">
{{ formatMessage(messages.alwaysShowCopyDetailsTitle) }}
</h2>
<p class="m-0 mt-1">
{{ formatMessage(messages.alwaysShowCopyDetailsDescription) }}
</p>
</div>
<Toggle
id="always-show-copy-details"
:model-value="themeStore.getFeatureFlag(alwaysShowCopyDetailsFlag)"
@update:model-value="
() => {
const newValue = !themeStore.getFeatureFlag(alwaysShowCopyDetailsFlag)
themeStore.featureFlags[alwaysShowCopyDetailsFlag] = newValue
settings.feature_flags[alwaysShowCopyDetailsFlag] = newValue
}
"
/>
</div>
<div class="flex flex-col gap-2.5">
<h2 class="mt-0 m-0 text-lg font-semibold text-contrast">App database backups</h2>
<button id="open-db-backups-folder" class="btn min-w-max" @click="openDbBackupsFolder">
@@ -0,0 +1,82 @@
<template>
<NewModal ref="modal" :header="formatMessage(messages.header)" fade="danger" max-width="500px">
<Admonition type="critical" :header="formatMessage(messages.admonitionHeader)">
<IntlFormatted :message-id="messages.admonitionBody" :values="{ code: inviteCode }">
<template #monospace="{ children }">
<code class="font-mono"><component :is="() => children" /></code>
</template>
</IntlFormatted>
</Admonition>
<template #actions>
<div class="flex justify-end gap-2">
<ButtonStyled type="outlined">
<button @click="modal?.hide()">
<XIcon />
{{ formatMessage(commonMessages.cancelButton) }}
</button>
</ButtonStyled>
<ButtonStyled color="red">
<button @click="confirm">
<XIcon />
{{ formatMessage(messages.revokeButton) }}
</button>
</ButtonStyled>
</div>
</template>
</NewModal>
</template>
<script setup lang="ts">
import { XIcon } from '@modrinth/assets'
import {
Admonition,
ButtonStyled,
commonMessages,
defineMessages,
IntlFormatted,
NewModal,
useVIntl,
} from '@modrinth/ui'
import { ref } from 'vue'
const { formatMessage } = useVIntl()
const modal = ref<InstanceType<typeof NewModal>>()
const inviteCode = ref('')
const emit = defineEmits<{
revoke: [inviteCode: string]
}>()
function show(code: string) {
inviteCode.value = code
modal.value?.show()
}
function confirm() {
modal.value?.hide()
emit('revoke', inviteCode.value)
}
const messages = defineMessages({
header: {
id: 'instance.settings.sharing.revoke-invite.header',
defaultMessage: 'Revoke invite',
},
admonitionHeader: {
id: 'instance.settings.sharing.revoke-invite.admonition-header',
defaultMessage: 'This action cannot be undone',
},
admonitionBody: {
id: 'instance.settings.sharing.revoke-invite.admonition-body',
defaultMessage:
'The invite link <monospace>{code}</monospace> will stop working immediately. People who already joined will keep access.',
},
revokeButton: {
id: 'instance.settings.sharing.revoke-invite.confirm',
defaultMessage: 'Revoke invite',
},
})
defineExpose({ show })
</script>
@@ -43,8 +43,9 @@ import type { GameInstance } from '@/helpers/types'
type UpdateCompleteCallback = () => void | Promise<void>
const emit = defineEmits<{
accepted: []
cancel: []
complete: []
complete: [successful: boolean]
report: [event?: MouseEvent]
sharedInstanceUnavailable: [reason: SharedInstanceUnavailableReason | null]
}>()
@@ -72,11 +73,14 @@ const diffs = computed<ContentDiffItem[]>(
)
async function update() {
let successful = false
emit('accepted')
try {
if (instance.value) {
const job = await install_update_shared_instance(instance.value.id)
await wait_for_install_job(job.job_id)
await onComplete.value()
successful = true
}
} catch (error) {
if (isSharedInstanceUnavailableError(error)) {
@@ -85,7 +89,7 @@ async function update() {
}
notifySharedInstanceError(error)
} finally {
emit('complete')
emit('complete', successful)
}
}
@@ -64,7 +64,29 @@
</div>
</Admonition>
<p v-else class="m-0 text-primary">
{{ formatMessage(messages.inviteWarning) }}
<IntlFormatted
v-if="creator"
:message-id="messages.inviteWarningWithCreator"
:values="{ username: creator.username }"
>
<template #creator="{ children }">
<AutoLink :to="creatorProfileLink" class="font-medium text-contrast hover:underline">
<Avatar
:src="creator.avatarUrl"
:alt="creator.username"
:tint-by="creator.username"
size="24px"
circle
no-shadow
class="mr-1 inline-block align-middle"
/>
<span><component :is="() => children" /></span>
</AutoLink>
</template>
</IntlFormatted>
<template v-else>
{{ formatMessage(messages.inviteWarning) }}
</template>
</p>
<SharedInstanceInstallSummary
:preview="preview"
@@ -226,6 +248,7 @@ import { BanIcon, DownloadIcon, ReportIcon, SendIcon, SpinnerIcon, XIcon } from
import {
Admonition,
AutoLink,
Avatar,
ButtonStyled,
Checkbox,
Combobox,
@@ -243,8 +266,10 @@ import {
useScrollIndicator,
useVIntl,
} from '@modrinth/ui'
import { openUrl } from '@tauri-apps/plugin-opener'
import { computed, nextTick, ref } from 'vue'
import { config } from '@/config'
import { hide_ads_window, show_ads_window } from '@/helpers/ads'
import { toError } from '@/helpers/errors'
import type { SharedInstanceInstallPreview } from '@/helpers/install'
@@ -258,11 +283,16 @@ type ExternalFileRow = {
id: string
name: string
}
type SharedInstanceCreator = {
username: string
avatarUrl: string | null
}
const modal = ref<InstanceType<typeof NewModal>>()
const contentModal = ref<InstanceType<typeof ModpackContentModal>>()
const externalFileTable = ref<HTMLElement | null>(null)
const preview = ref<SharedInstanceInstallPreview | null>(null)
const creator = ref<SharedInstanceCreator | null>(null)
const install = ref<() => void | Promise<void>>(() => {})
const reportMode = ref(false)
const reportOnly = ref(false)
@@ -302,6 +332,12 @@ const reportReasonOptions = computed<ComboboxOption<ReportReason>[]>(() => [
const canSubmitReport = computed(
() => Boolean(preview.value && additionalContext.value.trim()) && !submitLoading.value,
)
const creatorProfileLink = computed(() => {
const username = creator.value?.username
return username
? () => openUrl(`${config.siteUrl}/user/${encodeURIComponent(username)}`)
: undefined
})
async function accept() {
hide()
@@ -381,6 +417,7 @@ function handleCancel() {
}
function handleHide() {
resetReportState()
creator.value = null
show_ads_window()
}
function resetReportState() {
@@ -395,14 +432,17 @@ function resetReportState() {
function show(
previewValue: SharedInstanceInstallPreview,
installValue: () => void | Promise<void>,
creatorValue?: SharedInstanceCreator,
event?: MouseEvent,
) {
resetReportState()
creator.value = creatorValue ?? null
install.value = installValue
showPreview(previewValue, event)
}
function showReport(previewValue: SharedInstanceInstallPreview, event?: MouseEvent) {
resetReportState()
creator.value = null
reportMode.value = true
reportOnly.value = true
install.value = () => {}
@@ -437,6 +477,11 @@ const messages = defineMessages({
defaultMessage:
'This invite was created by another Modrinth user, not Modrinth. Only accept invites from people you trust.',
},
inviteWarningWithCreator: {
id: 'app.modal.install-to-play.invite-warning-with-creator',
defaultMessage:
'This invite was created by <creator>{username}</creator>, not Modrinth. Only accept invites from people you trust.',
},
reportDescription: {
id: 'app.modal.install-to-play.report-description',
defaultMessage:
@@ -1,7 +1,7 @@
import type { Labrinth } from '@modrinth/api-client'
import type { ContentItem } from '@modrinth/ui'
import { get_project_many, get_version, get_version_many } from '@/helpers/cache.js'
import { get_project, get_project_many, get_version, get_version_many } from '@/helpers/cache.js'
import type { SharedInstanceInstallPreview } from '@/helpers/install'
type VersionDependency = Labrinth.Versions.v2.Dependency & { version_id?: string }
@@ -20,7 +20,18 @@ export function useSharedInstancePreviewContent() {
async function modpackContentItems(preview: SharedInstanceInstallPreview) {
if (!preview.modpackVersionId) return []
const version = await get_version(preview.modpackVersionId, 'must_revalidate')
return await contentItemsFromDependencies(version?.dependencies ?? [])
if (!version) return []
const [project, contentItems] = await Promise.all([
get_project(version.project_id, 'must_revalidate'),
contentItemsFromDependencies(version.dependencies ?? []),
])
if (!project) return contentItems
return contentItems.map((item) => ({
...item,
source: { project },
}))
}
async function contentItemsFromDependencies(dependencies: Labrinth.Versions.v2.Dependency[]) {
@@ -6,11 +6,9 @@ import {
injectPopupNotificationManager,
} from '@modrinth/ui'
import { useQueryClient } from '@tanstack/vue-query'
import { openUrl } from '@tauri-apps/plugin-opener'
import { type Ref, watch } from 'vue'
import { useRouter } from 'vue-router'
import { config } from '@/config'
import { get_user } from '@/helpers/cache'
import { toError } from '@/helpers/errors'
import {
@@ -19,6 +17,7 @@ import {
install_shared_instance,
} from '@/helpers/install'
import { list } from '@/helpers/instance'
import { useSharedInstanceErrors } from '@/helpers/shared-instance-errors'
import { useTheming } from '@/store/state'
import { parseSharedInstanceInviteNotification } from './shared-instance-invite-parser'
@@ -28,9 +27,15 @@ type InstallModal = {
show(
preview: Awaited<ReturnType<typeof install_get_shared_instance_preview>>,
install: () => Promise<void>,
creator?: SharedInstanceCreator,
): void
}
type SharedInstanceCreator = {
username: string
avatarUrl: string | null
}
type AccountRequiredModal = {
show(event?: MouseEvent): Promise<boolean>
}
@@ -47,6 +52,8 @@ export function useSharedInstanceInviteHandler(
const auth = injectAuth()
const client = injectModrinthClient()
const { handleError } = injectNotificationManager()
const { notifySharedInstanceConnectionError, notifySharedInstanceError } =
useSharedInstanceErrors()
const popupNotificationManager = injectPopupNotificationManager()
const queryClient = useQueryClient()
const router = useRouter()
@@ -60,6 +67,7 @@ export function useSharedInstanceInviteHandler(
instanceId: string
preview: Awaited<ReturnType<typeof install_get_shared_instance_preview>>
install: () => Promise<void>
creator?: SharedInstanceCreator
onGoToInstance?: () => void | Promise<void>
}
| undefined
@@ -75,10 +83,13 @@ export function useSharedInstanceInviteHandler(
async function resolveInvite(invite: SharedInstanceInvite) {
const [invitedBy, sharedInstance] = await Promise.all([
!invite.invitedByUsername && invite.invitedById
(!invite.invitedByUsername || !invite.invitedByAvatarUrl) && invite.invitedById
? get_user(invite.invitedById, 'bypass').catch(() => null)
: null,
client.sharedinstances.instances_v1.get(invite.sharedInstanceId).catch(() => null),
client.sharedinstances.instances_v1.get(invite.sharedInstanceId).catch(() => {
notifySharedInstanceConnectionError()
return null
}),
])
return {
@@ -92,15 +103,17 @@ export function useSharedInstanceInviteHandler(
function showInstall(
preview: Awaited<ReturnType<typeof install_get_shared_instance_preview>>,
install: () => Promise<void>,
creator?: SharedInstanceCreator,
) {
if (!installModal.value) throw new Error('Shared instance install modal is not available.')
installModal.value.show(preview, install)
installModal.value.show(preview, install, creator)
}
async function showInstallOrAlreadyInstalled(
sharedInstanceId: string,
preview: Awaited<ReturnType<typeof install_get_shared_instance_preview>>,
install: () => Promise<void>,
creator?: SharedInstanceCreator,
onGoToInstance?: () => void | Promise<void>,
) {
const existingInstance = (await list()).find(
@@ -108,7 +121,7 @@ export function useSharedInstanceInviteHandler(
)
if (!existingInstance || themeStore.getFeatureFlag('skip_non_essential_warnings')) {
showInstall(preview, install)
showInstall(preview, install, creator)
return
}
@@ -120,6 +133,7 @@ export function useSharedInstanceInviteHandler(
instanceId: existingInstance.id,
preview,
install,
creator,
onGoToInstance,
}
alreadyInstalledModal.value.show(existingInstance.name)
@@ -148,7 +162,7 @@ export function useSharedInstanceInviteHandler(
const pending = pendingAlreadyInstalled
pendingAlreadyInstalled = undefined
if (!pending) return
showInstall(pending.preview, pending.install)
showInstall(pending.preview, pending.install, pending.creator)
}
async function acceptNotification(notification: AppNotification, invite: SharedInstanceInvite) {
@@ -174,10 +188,16 @@ export function useSharedInstanceInviteHandler(
await markNotificationRead(notification)
await queryClient.invalidateQueries({ queryKey: ['instances'] })
},
invite.invitedByUsername
? {
username: invite.invitedByUsername,
avatarUrl: invite.invitedByAvatarUrl,
}
: undefined,
() => markNotificationRead(notification),
)
} catch (error) {
handleError(toError(error))
notifySharedInstanceError(error)
}
}
@@ -216,7 +236,7 @@ export function useSharedInstanceInviteHandler(
markNotificationRead(notification).catch((error) => handleError(toError(error))),
onOpenActor: () => {
if (invite.invitedByUsername) {
openUrl(`${config.siteUrl}/user/${encodeURIComponent(invite.invitedByUsername)}`)
void router.push(`/user/${encodeURIComponent(invite.invitedByUsername)}`)
}
},
},
@@ -255,19 +275,32 @@ export function useSharedInstanceInviteHandler(
try {
if (!(await requireAccount())) return
const invite = await install_accept_shared_instance_invite(inviteId)
await showInstallOrAlreadyInstalled(invite.sharedInstanceId, invite.preview, async () => {
await install_shared_instance(
invite.sharedInstanceId,
invite.preview.name,
invite.managerId,
invite.serverManagerName,
invite.serverManagerIconUrl,
invite.instanceIconUrl,
)
await queryClient.invalidateQueries({ queryKey: ['instances'] })
})
const manager = invite.managerId
? await get_user(invite.managerId, 'bypass').catch(() => null)
: null
await showInstallOrAlreadyInstalled(
invite.sharedInstanceId,
invite.preview,
async () => {
await install_shared_instance(
invite.sharedInstanceId,
invite.preview.name,
invite.managerId,
invite.serverManagerName,
invite.serverManagerIconUrl,
invite.instanceIconUrl,
)
await queryClient.invalidateQueries({ queryKey: ['instances'] })
},
manager
? {
username: manager.username,
avatarUrl: manager.avatar_url ?? null,
}
: undefined,
)
} catch (error) {
handleError(toError(error))
notifySharedInstanceError(error)
}
}
@@ -23,6 +23,7 @@ import {
type InstallProgress,
} from '@/helpers/install'
import { get_many as getInstances } from '@/helpers/instance'
import { useTheming } from '@/store/state'
const messages = defineMessages({
installs: {
@@ -221,13 +222,6 @@ const failureSummaryMessages = defineMessages({
})
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
@@ -241,6 +235,7 @@ export async function useInstallJobNotifications(opts: {
onChange: () => void
}) {
const { formatMessage } = useVIntl()
const themeStore = useTheming()
const jobs = ref<InstallJobSnapshot[]>([])
const iconUrls = ref<Record<string, string | null>>({})
const instanceNames = ref<Record<string, string>>({})
@@ -250,7 +245,6 @@ export async function useInstallJobNotifications(opts: {
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
@@ -421,116 +415,14 @@ 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 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))
return isTerminalJob(job) || themeStore.getFeatureFlag('always_show_copy_details')
}
function isCopied(job: InstallJobSnapshot): boolean {
@@ -607,6 +499,16 @@ export async function useInstallJobNotifications(opts: {
return buttons
}
function getDismissHandler(job: InstallJobSnapshot): (() => Promise<void>) | undefined {
if (isTerminalJob(job)) {
return async () => {
await install_job_dismiss(job.job_id).catch(opts.handleError)
await refresh()
}
}
return undefined
}
function setJobs(nextJobs: InstallJobSnapshot[]) {
for (const job of nextJobs) {
if (!jobOrder.has(job.job_id)) {
@@ -615,7 +517,6 @@ export async function useInstallJobNotifications(opts: {
}
const visibleJobs = nextJobs.filter((job) => visibleJobStatuses.has(job.status))
syncProgressSnapshots(visibleJobs)
jobs.value = visibleJobs.sort(
(a, b) =>
@@ -642,12 +543,8 @@ export async function useInstallJobNotifications(opts: {
progressCurrent: isTerminalJob(job) ? undefined : progress?.current,
progressTotal: isTerminalJob(job) ? undefined : progress?.total,
buttons: getButtons(job),
onDismiss: isTerminalJob(job)
? async () => {
await install_job_dismiss(job.job_id).catch(opts.handleError)
await refresh()
}
: undefined,
dismissible: isTerminalJob(job),
onDismiss: getDismissHandler(job),
}
}),
)
@@ -730,8 +627,8 @@ export async function useInstallJobNotifications(opts: {
void refreshMetadata()
}
await refresh(false)
const unlisten = await install_job_listener((job: InstallJobSnapshot) => applyJobUpdate(job))
await refresh(false)
return {
active: computed(() => jobs.value.length > 0),
@@ -743,9 +640,6 @@ export async function useInstallJobNotifications(opts: {
for (const timeout of copiedResetTimeouts.values()) {
window.clearTimeout(timeout)
}
for (const jobId of progressSnapshots.keys()) {
clearProgressSnapshot(jobId)
}
unlisten()
},
}
+5
View File
@@ -102,6 +102,7 @@ export interface SharedInstanceUpdateDiff {
}
export const SHARED_INSTANCE_UNAVAILABLE_ERROR_CODE = 'shared_instance_unavailable'
export const SHARED_INSTANCES_API_ERROR_CODE = 'shared_instances_api_error'
export type SharedInstanceUnavailableReason = 'deleted' | 'access_revoked' | 'quarantined'
@@ -113,6 +114,10 @@ export function isSharedInstanceUnavailableError(error: unknown) {
return getSharedInstanceUnavailableReason(error) !== null
}
export function isSharedInstancesApiError(error: unknown) {
return isRecord(error) && error.code === SHARED_INSTANCES_API_ERROR_CODE
}
export function getSharedInstanceUnavailableReason(
error: unknown,
): SharedInstanceUnavailableReason | null {
+20
View File
@@ -365,6 +365,13 @@ export interface SharedInstanceInviteLink {
maxUses: number
}
export interface SharedInstanceInvite {
id: string
expiration: string
maxUses: number
uses: number
}
export async function can_current_user_use_shared_instances(): Promise<boolean> {
return await invoke('plugin:instance|instance_share_can_current_user_use')
}
@@ -394,6 +401,19 @@ export async function create_shared_instance_invite_link(
})
}
export async function get_shared_instance_invites(
instanceId: string,
): Promise<SharedInstanceInvite[]> {
return await invoke('plugin:instance|instance_share_get_invites', { instanceId })
}
export async function revoke_shared_instance_invite(
instanceId: string,
inviteId: string,
): Promise<void> {
return await invoke('plugin:instance|instance_share_revoke_invite', { instanceId, inviteId })
}
export async function remove_shared_instance_users(
instanceId: string,
userIds: string[],
@@ -1,6 +1,10 @@
import { defineMessages, injectNotificationManager, useVIntl } from '@modrinth/ui'
import { getErrorMessage, type SharedInstanceUnavailableReason } from '@/helpers/install'
import {
getErrorMessage,
isSharedInstancesApiError,
type SharedInstanceUnavailableReason,
} from '@/helpers/install'
export const sharedInstanceErrorMessages = defineMessages({
unavailableTitle: {
@@ -39,6 +43,14 @@ export const sharedInstanceErrorMessages = defineMessages({
id: 'instance.shared-instance.error.title',
defaultMessage: 'Something has gone wrong',
},
networkErrorTitle: {
id: 'instance.shared-instance.network-error.title',
defaultMessage: 'Network error',
},
networkErrorText: {
id: 'instance.shared-instance.network-error.text',
defaultMessage: 'Unable to connect to shared instances API',
},
})
export function sharedInstanceUnavailableTextMessage(
@@ -82,7 +94,20 @@ export function useSharedInstanceErrors() {
})
}
function notifySharedInstanceConnectionError() {
addNotification({
type: 'error',
title: formatMessage(sharedInstanceErrorMessages.networkErrorTitle),
text: formatMessage(sharedInstanceErrorMessages.networkErrorText),
})
}
function notifySharedInstanceError(error: unknown) {
if (isSharedInstancesApiError(error)) {
notifySharedInstanceConnectionError()
return
}
addNotification({
type: 'error',
title: formatMessage(sharedInstanceErrorMessages.errorTitle),
@@ -92,6 +117,7 @@ export function useSharedInstanceErrors() {
return {
formatSharedInstanceUnavailable,
notifySharedInstanceConnectionError,
notifySharedInstanceError,
notifySharedInstanceUnavailable,
}
+1 -1
View File
@@ -189,7 +189,7 @@ type AppSettings = {
max_concurrent_downloads: number
max_concurrent_writes: number
theme: 'dark' | 'light' | 'oled'
theme: 'dark' | 'light' | 'oled' | 'retro' | 'system'
default_page: 'Home' | 'Library'
collapsed_navigation: boolean
advanced_rendering: boolean
+51 -6
View File
@@ -1,11 +1,56 @@
import type { Labrinth } from '@modrinth/api-client'
import { invoke } from '@tauri-apps/api/core'
export type SearchUser = {
id: string
username: string
avatar_url: string | null
// Converts user profile links from rendered Markdown/any dynamic content into app routes.
export function parse_modrinth_user_link(href: string): string | null {
try {
const url = new URL(href)
if (url.hostname !== 'modrinth.com' && url.hostname !== 'www.modrinth.com') return null
const segments = url.pathname.split('/').filter(Boolean)
if (segments[0]?.toLowerCase() !== 'user' || !segments[1] || segments.length > 3) return null
const path = `/user/${encodeURIComponent(decodeURIComponent(segments[1]))}`
return segments[2] ? `${path}/${encodeURIComponent(decodeURIComponent(segments[2]))}` : path
} catch {
return null
}
}
export async function search_user(query: string): Promise<SearchUser[]> {
return await invoke<SearchUser[]>('plugin:users|search_user', { query })
export async function search_user(query: string): Promise<Labrinth.Users.v3.SearchUser[]> {
return await invoke<Labrinth.Users.v3.SearchUser[]>('plugin:users|search_user', { query })
}
export async function get_user_profile(userId: string): Promise<Labrinth.Users.v3.User> {
return await invoke<Labrinth.Users.v3.User>('plugin:users|get_user_profile', { userId })
}
export async function get_user_projects(userId: string): Promise<Labrinth.Projects.v2.Project[]> {
return await invoke<Labrinth.Projects.v2.Project[]>('plugin:users|get_user_projects', {
userId,
})
}
export async function get_user_organizations(
userId: string,
): Promise<Labrinth.Organizations.v3.Organization[]> {
return await invoke<Labrinth.Organizations.v3.Organization[]>(
'plugin:users|get_user_organizations',
{ userId },
)
}
export async function get_user_collections(
userId: string,
): Promise<Labrinth.Collections.Collection[]> {
return await invoke<Labrinth.Collections.Collection[]>('plugin:users|get_user_collections', {
userId,
})
}
export async function patch_user(
userId: string,
patch: Partial<Pick<Labrinth.Users.v3.User, 'badges' | 'role'>>,
): Promise<void> {
await invoke('plugin:users|patch_user', { userId, patch })
}
@@ -29,6 +29,9 @@
"app.action-bar.install.summary.app-closing": {
"message": "Annulleret på grund af appen blev lukket"
},
"app.action-bar.install.summary.bad-modpack-file": {
"message": "Kunne ikke indlæse modpack"
},
"app.action-bar.install.summary.canceled": {
"message": "Annulleret"
},
@@ -47,9 +50,45 @@
"app.action-bar.install.summary.instance-not-found": {
"message": "Instance kunne ikke blive fundet"
},
"app.action-bar.install.summary.invalid-file-path": {
"message": "Fil sti er ugyldig"
},
"app.action-bar.install.summary.invalid-modpack": {
"message": "Modpack data ugyldig"
},
"app.action-bar.install.summary.invalid-modpack-files": {
"message": "Modpack har ugyldig metadata"
},
"app.action-bar.install.summary.java-setup-failed": {
"message": "Java setup kunne ikke færdiggøres"
},
"app.action-bar.install.summary.loader-setup-failed": {
"message": "Loader setup fejlede"
},
"app.action-bar.install.summary.local-data-error": {
"message": "Kunne ikke opdatere lokal data"
},
"app.action-bar.install.summary.minecraft-setup-failed": {
"message": "Minecraft setup fejlede"
},
"app.action-bar.install.summary.modrinth-unreachable": {
"message": "Kunne ikke få forbindelse til Modrinth"
},
"app.action-bar.install.summary.no-write-permission": {
"message": "Ingen adgang til at skrive"
},
"app.action-bar.install.summary.pack-download-failed": {
"message": "Kunne ikke download pack"
},
"app.action-bar.install.summary.unexpected-error": {
"message": "Noget gik galt"
},
"app.action-bar.install.unknown-instance": {
"message": "Ukendt instance"
},
"app.action-bar.install.updating-shared-content": {
"message": "Opdatere delt indhold"
},
"app.action-bar.make-primary-instance": {
"message": "Gør til primære instance"
},
@@ -83,6 +122,15 @@
"app.action-bar.view-logs": {
"message": "Vis logs"
},
"app.ads-consent.accept": {
"message": "Tillad alle"
},
"app.ads-consent.body": {
"message": "Reklamer gør Modrinth muligt og finansiere skaber udbetalinger. Vores partnere må gemme og tilgå cookies i appen for at personliggøre reklamer og måle effektivitet."
},
"app.ads-consent.reject": {
"message": "Afvis alle"
},
"app.appearance-settings.advanced-rendering.description": {
"message": "Aktiverer avanceret gengivelse som sløringseffekter, der kan forårsage ydelsesproblemer uden hardwareaccelereret gengivelse."
},
@@ -224,6 +272,9 @@
"app.install.phase.preparing_java.downloading": {
"message": "Downloader Java {version}"
},
"app.instance.admonitions.shared-instance.added-label": {
"message": "Tilføjet"
},
"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."
},
@@ -269,12 +320,51 @@
"app.instance.mods.successfully-uploaded": {
"message": "Uploadet"
},
"app.instance.share.locked.empty-description-suffix": {
"message": "for at tilgå denne side."
},
"app.instance.share.locked.signed-out-heading": {
"message": "Ikke logget ind"
},
"app.instance.share.locked.switch-account-button": {
"message": "Skift konto"
},
"app.instance.share.locked.wrong-account-heading": {
"message": "Forkert konto"
},
"app.instance.share.remove-user-modal.effects-label": {
"message": "Hvad vil der ske?"
},
"app.instance.share.remove-user-modal.user-avatar-alt": {
"message": "{username}'s avatar"
},
"app.instance.share.sign-in.button": {
"message": "Log ind"
},
"app.instance.shared-instance-already-installed.install-anyway": {
"message": "Installer alligevel"
},
"app.instance.shared-instance-already-installed.instance": {
"message": "Instans"
},
"app.instance.shared-instance-wrong-account.sign-in-as-label": {
"message": "Log ind som"
},
"app.instance.worlds.add-server": {
"message": "Tilføj server"
},
"app.instance.worlds.browse-servers": {
"message": "Søg servere"
},
"app.instance.worlds.delete-world-modal.delete-button": {
"message": "Slet verden"
},
"app.instance.worlds.delete-world-modal.title": {
"message": "Slet verden"
},
"app.instance.worlds.delete-world-modal.warning-header": {
"message": "Sletter {name}"
},
"app.instance.worlds.filter-modded": {
"message": "Moddet"
},
@@ -293,18 +383,42 @@
"app.instance.worlds.no-worlds-heading": {
"message": "Ingen servere eller verdener tilføjet"
},
"app.instance.worlds.remove-server-modal.remove-button": {
"message": "Fjern server"
},
"app.instance.worlds.remove-server-modal.title": {
"message": "Fjern server"
},
"app.instance.worlds.remove-server-modal.warning-header": {
"message": "Fjerner {name}"
},
"app.instance.worlds.search-worlds-placeholder": {
"message": "Søg {count} verdener..."
},
"app.modal.install-to-play.additional-context": {
"message": "Yderligere kontekst"
},
"app.modal.install-to-play.delete-instance": {
"message": "Slet instans"
},
"app.modal.install-to-play.header": {
"message": "Installer for at spille"
},
"app.modal.install-to-play.install-anyway": {
"message": "Installer alligevel"
},
"app.modal.install-to-play.install-button": {
"message": "Installer"
},
"app.modal.install-to-play.mod-count": {
"message": "{count, plural, one {# mod} other {# mods}}"
},
"app.modal.install-to-play.report-image-too-large": {
"message": "Filen overskrider 1MiB størrelse begrænsning"
},
"app.modal.install-to-play.report-reason.spam": {
"message": "Spam"
},
"app.modal.install-to-play.shared-instance": {
"message": "Delt instance"
},
@@ -314,12 +428,33 @@
"app.modal.update-to-play.header": {
"message": "Opdater for at spille"
},
"app.modal.update-to-play.shared-instance-added-label": {
"message": "Tilføjede"
},
"app.modal.update-to-play.shared-instance-removed-label": {
"message": "Fjernede"
},
"app.modal.update-to-play.update-required": {
"message": "Opdatering krævet"
},
"app.project.install-button.already-installed": {
"message": "Dette projekt er allerede installeret"
},
"app.project.install-button.switch-version": {
"message": "Skift version"
},
"app.project.install-context.back-to-browse": {
"message": "Tilbage til udforsk"
},
"app.project.version.all-versions": {
"message": "Alle versioner"
},
"app.project.version.download-in-browser": {
"message": "Download i browser"
},
"app.project.version.installing": {
"message": "Installere"
},
"app.project.versions.already-installed": {
"message": "Allerede installeret"
},
@@ -380,6 +515,9 @@
"app.skins.modal.add-title": {
"message": "Tilføjer et skin"
},
"app.skins.modal.arm-style-section": {
"message": "Arm stil"
},
"app.skins.modal.arm-style-slim": {
"message": "Slank"
},
@@ -482,6 +620,12 @@
"app.skins.title": {
"message": "Skin vælger"
},
"app.skins.toggle-ears-features-off": {
"message": "Slå fra"
},
"app.skins.toggle-ears-features-on": {
"message": "Slå til"
},
"app.update-popup.body.download-complete": {
"message": "Modrinth App v{version} er færdig med at download. Genindlæs for at opdatere nu, eller automatisk når du lukker Modrinth App."
},
@@ -530,6 +674,9 @@
"app.world.world-item.players-online": {
"message": "{count} online"
},
"content.shared-instance.delete-button": {
"message": "Slet alligevel"
},
"friends.action.add-friend": {
"message": "Tilføj en ven"
},
@@ -593,6 +740,27 @@
"friends.sign-in-to-add-friends": {
"message": "<link>Log ind på en Modrinth konto</link> for at tilføje venner og se hvad de spiller!"
},
"instance.action.create-shortcut": {
"message": "Opret genvej"
},
"instance.action.export-modpack": {
"message": "Eksporter modpack"
},
"instance.action.more-actions": {
"message": "Flere handlinger"
},
"instance.action.open-folder": {
"message": "Åbn mappe"
},
"instance.action.settings": {
"message": "Instans indstillinger"
},
"instance.action.starting": {
"message": "Starter..."
},
"instance.action.stopping": {
"message": "Stopper..."
},
"instance.add-server.add-and-play": {
"message": "Tilføj og spil"
},
@@ -635,6 +803,15 @@
"instance.files.save-as": {
"message": "Gem som..."
},
"instance.locked.delete-button": {
"message": "Slet instans"
},
"instance.locked.play-tooltip": {
"message": "Denne instans er blevet låst"
},
"instance.playtime.never-played": {
"message": "Aldrig spillet"
},
"instance.server-modal.address": {
"message": "Adresse"
},
@@ -806,6 +983,33 @@
"instance.settings.tabs.window.width.enter": {
"message": "Indtast bredde..."
},
"instance.shared-instance.error.title": {
"message": "Noget gik galt"
},
"instance.shared-instance.publish-review.added-label": {
"message": "Tilføjede"
},
"instance.shared-instance.publish-review.admonition-header": {
"message": "Skub opdatering til spillere"
},
"instance.shared-instance.publish-review.config-title-v2": {
"message": "Vælg konfigurations filer"
},
"instance.shared-instance.publish-review.header": {
"message": "Gennemså ændringer"
},
"instance.shared-instance.publish-review.publish-button": {
"message": "Skub opdatering"
},
"instance.shared-instance.publish-review.removed-label": {
"message": "Fjernede"
},
"instance.shared-instance.unavailable.locked-title": {
"message": "Instans låst"
},
"instance.shared-instance.unavailable.title": {
"message": "Delt instans er ikke længere tilgængelig"
},
"instance.worlds.a_minecraft_server": {
"message": "En Minecraft server"
},
@@ -815,6 +1019,9 @@
"instance.worlds.copy_address": {
"message": "Kopier adresse"
},
"instance.worlds.create_shortcut": {
"message": "Opret genvej"
},
"instance.worlds.dont_show_on_home": {
"message": "Vis ikke på forsiden"
},
@@ -866,6 +1073,54 @@
"minecraft-account.sign-in": {
"message": "Log ind på Minecraft"
},
"minecraft-required.description-header": {
"message": "Log ind med en Microsoft konto"
},
"minecraft-required.dont-have-account": {
"message": "Har du ikke en konto?"
},
"minecraft-required.get-minecraft": {
"message": "Få Minecraft"
},
"minecraft-required.get-support": {
"message": "Få hjælp"
},
"minecraft-required.header": {
"message": "Minecraft påkrævet"
},
"minecraft-required.sign-in": {
"message": "Log ind på Microsoft"
},
"modal.modrinth-account-required.cancel-button": {
"message": "Annuller"
},
"modal.modrinth-account-required.continue-in-browser-heading": {
"message": "Fortsæt i din browser"
},
"modal.modrinth-account-required.create-account-button": {
"message": "Opret en konto"
},
"modal.modrinth-account-required.header": {
"message": "Konto påkrævet"
},
"modal.modrinth-account-required.open-browser-again-button": {
"message": "Åbn browser igen"
},
"modal.modrinth-account-required.sign-in-button": {
"message": "Log ind på Modrinth"
},
"modal.modrinth-account-required.sign-in-heading": {
"message": "Log ind med en Modrinth konto"
},
"modal.modrinth-account-required.signing-in-header": {
"message": "Logger ind"
},
"modal.modrinth-account-required.support-prompt": {
"message": "Har du problemer med at logge ind? <support>Få hjælp</support>"
},
"modal.modrinth-account-required.waiting-for-browser": {
"message": "Venter på browser bekræftigelse..."
},
"search.filter.locked.instance": {
"message": "Givet af instanceen"
},
@@ -15,7 +15,7 @@
"message": "Kopiert"
},
"app.action-bar.install.copy-details": {
"message": "Details kopieren"
"message": "Kopier Details"
},
"app.action-bar.install.dismiss": {
"message": "Ignorieren"
@@ -27,16 +27,16 @@
"message": "Wiederholen"
},
"app.action-bar.install.summary.app-closing": {
"message": "Aufgrund von Schließung der App abgebrochen"
"message": "Abbroche will app gschlosse worde isch"
},
"app.action-bar.install.summary.bad-modpack-file": {
"message": "Modpack konnte nicht gelesen werden"
"message": "Modpack kud nöd glese werde"
},
"app.action-bar.install.summary.canceled": {
"message": "Abgebrochen"
"message": "Abbroche"
},
"app.action-bar.install.summary.cleanup-incomplete": {
"message": "Bereinigung konnte nicht abgeschlossen werden"
"message": "Ufrume kunnti nöt beendet werde"
},
"app.action-bar.install.summary.content-download-failed": {
"message": "Dateien konnten nicht heruntergeladen werden"
@@ -456,7 +456,7 @@
"message": "Falsches Konto"
},
"app.instance.share.remove-user-modal.effect-access": {
"message": "Diese Person wird für diese geteilte Instanz erhalten keine Updates mehr erhalten"
"message": "Diese Person wird für diese geteilte Instanz keine Updates mehr erhalten"
},
"app.instance.share.remove-user-modal.effect-installed-copy": {
"message": "Jede bereits installierte Kopie bleibt auf deren Gerät erhalten"
@@ -396,7 +396,7 @@
"message": "Instanz"
},
"app.instance.mods.bulk-update.downloading-projects": {
"message": "{current, number}/{total, number} Projekte werden heruntergelanden..."
"message": "{current, number}/{total, number} Projekte werden heruntergeladen..."
},
"app.instance.mods.bulk-update.finishing": {
"message": "Update wird fertiggestellt..."
@@ -456,7 +456,7 @@
"message": "Falsches Konto"
},
"app.instance.share.remove-user-modal.effect-access": {
"message": "Diese Person wird für diese geteilte Instanz erhalten keine Updates mehr erhalten"
"message": "Diese Person wird für diese geteilte Instanz keine Updates mehr erhalten"
},
"app.instance.share.remove-user-modal.effect-installed-copy": {
"message": "Jede bereits installierte Kopie bleibt auf deren Gerät erhalten"
@@ -368,9 +368,18 @@
"app.instance.admonitions.shared-instance.review-header": {
"message": "Review changes"
},
"app.instance.admonitions.shared-instance.review-update-button": {
"message": "Review update"
},
"app.instance.admonitions.shared-instance.reviewing-button": {
"message": "Reviewing..."
},
"app.instance.admonitions.shared-instance.update-available-body": {
"message": "An update is required to play {name}. Please update to latest version to launch the game."
},
"app.instance.admonitions.shared-instance.update-available-header": {
"message": "An update is available"
},
"app.instance.confirm-delete.admonition-body": {
"message": "All data for your instance will be permanently deleted, including your worlds, configs, and all installed content."
},
@@ -437,6 +446,9 @@
"app.instance.share.invite-modal.heading": {
"message": "Share {name}"
},
"app.instance.share.invite-modal.user-limit-reached": {
"message": "This instance has reached the {limit}-user limit."
},
"app.instance.share.locked.empty-description-prefix": {
"message": "You need to sign in as"
},
@@ -455,6 +467,12 @@
"app.instance.share.locked.wrong-account-heading": {
"message": "Wrong account"
},
"app.instance.share.members.empty": {
"message": "No users have joined yet"
},
"app.instance.share.members.no-filter-results": {
"message": "No users match your filters."
},
"app.instance.share.remove-user-modal.effect-access": {
"message": "They will no longer receive updates for this shared instance"
},
@@ -485,6 +503,12 @@
"app.instance.share.sign-in.button": {
"message": "Sign in"
},
"app.instance.share.unable-to-connect.description": {
"message": "The shared instances service is not accessible at the moment, please try again later"
},
"app.instance.share.unable-to-connect.heading": {
"message": "Unable to connect"
},
"app.instance.share.unlink.body": {
"message": "You must unlink this modpack to share your instance"
},
@@ -599,6 +623,9 @@
"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.invite-warning-with-creator": {
"message": "This invite was created by <creator>{username}</creator>, not Modrinth. Only accept invites from people you trust."
},
"app.modal.install-to-play.mod-count": {
"message": "{count, plural, one {# mod} other {# mods}}"
},
@@ -704,6 +731,12 @@
"app.project.versions.already-installed": {
"message": "Already installed"
},
"app.resource-management-settings.always-show-copy-details.description": {
"message": "Show the Copy details action while an install is queued or running. It is always available for failed or interrupted installs."
},
"app.resource-management-settings.always-show-copy-details.title": {
"message": "Always show copy details"
},
"app.settings.developer-mode-enabled": {
"message": "Developer mode enabled."
},
@@ -1166,6 +1199,45 @@
"instance.server-modal.resource-pack": {
"message": "Resource pack"
},
"instance.settings.sharing.active-invites.actions": {
"message": "Actions"
},
"instance.settings.sharing.active-invites.code": {
"message": "Invite link"
},
"instance.settings.sharing.active-invites.description": {
"message": "Anyone with one of these invite links can join while it remains active."
},
"instance.settings.sharing.active-invites.empty": {
"message": "There are no active invites."
},
"instance.settings.sharing.active-invites.expires": {
"message": "Expires"
},
"instance.settings.sharing.active-invites.revoke": {
"message": "Revoke invite"
},
"instance.settings.sharing.active-invites.revoke-with-code": {
"message": "Revoke invite {code}"
},
"instance.settings.sharing.active-invites.title": {
"message": "Active invites"
},
"instance.settings.sharing.active-invites.uses": {
"message": "Uses"
},
"instance.settings.sharing.revoke-invite.admonition-body": {
"message": "The invite link <monospace>{code}</monospace> will stop working immediately. People who already joined will keep access."
},
"instance.settings.sharing.revoke-invite.admonition-header": {
"message": "This action cannot be undone"
},
"instance.settings.sharing.revoke-invite.confirm": {
"message": "Revoke invite"
},
"instance.settings.sharing.revoke-invite.header": {
"message": "Revoke invite"
},
"instance.settings.tabs.general": {
"message": "General"
},
@@ -1367,6 +1439,12 @@
"instance.shared-instance.error.title": {
"message": "Something has gone wrong"
},
"instance.shared-instance.network-error.text": {
"message": "Unable to connect to shared instances API"
},
"instance.shared-instance.network-error.title": {
"message": "Network error"
},
"instance.shared-instance.owner-tooltip": {
"message": "This instance's content is being shared to other users."
},
@@ -311,6 +311,9 @@
"app.instance.mods.successfully-uploaded": {
"message": "Onnistuneesti ladattu"
},
"app.instance.share.remove-user-modal.effect-installed-copy": {
"message": "Kaikki laitteeseen jo asennetut kopiot säilyvät laitteessa"
},
"app.instance.worlds.add-server": {
"message": "Lisää palvelin"
},
+92 -14
View File
@@ -36,7 +36,7 @@
"message": "Annulé"
},
"app.action-bar.install.summary.cleanup-incomplete": {
"message": "Le nettoyage n'a pas terminé"
"message": "Le nettoyage n'a pas pu terminer"
},
"app.action-bar.install.summary.content-download-failed": {
"message": "Impossible de télécharger les fichiers"
@@ -132,7 +132,7 @@
"message": "Tout accepter"
},
"app.ads-consent.body": {
"message": "Les publicités rendent Modrinth possible et financent les rémunérations des créateurs. Nos partenaires peuvent stocker des cookies ou y accéder au sein de l'application afin de personnaliser les publicités et de mesurer les performances."
"message": "Les publicités rendent Modrinth possible et financent la rémunération des créateurs. Nos partenaires peuvent stocker des cookies ou y accéder au sein de l'application afin de personnaliser les publicités et de mesurer les performances."
},
"app.ads-consent.manage": {
"message": "Gérer les préférences"
@@ -180,7 +180,7 @@
"message": "Mondes sur partie rapide"
},
"app.appearance-settings.minimize-launcher.description": {
"message": "Minimiser le lanceur quand Minecraft démarre."
"message": "Minimiser le launcher quand a processus Minecraft démarre."
},
"app.appearance-settings.minimize-launcher.title": {
"message": "Minimiser le lanceur"
@@ -294,7 +294,7 @@
"message": "Téléchargement de Minecraft"
},
"app.install.phase.downloading_pack_file": {
"message": "Téléchargement le fichier de pack"
"message": "Téléchargement du fichier de pack"
},
"app.install.phase.extracting_overrides": {
"message": "Extraction des fichiers personnalisés"
@@ -522,7 +522,7 @@
"message": "Vous utilisez le mauvais compte Modrinth"
},
"app.instance.worlds.add-server": {
"message": "Ajouter le serveur"
"message": "Ajouter un serveur"
},
"app.instance.worlds.browse-servers": {
"message": "Parcourir des serveurs"
@@ -555,13 +555,13 @@
"message": "Ajouter un serveur ou parcourir pour commencer"
},
"app.instance.worlds.no-worlds-heading": {
"message": "Aucun serveur ou monde ajoutés"
"message": "Aucun serveur ou monde ajouté"
},
"app.instance.worlds.remove-server-modal.remove-button": {
"message": "Enlever le serveur"
"message": "Supprimer le serveur"
},
"app.instance.worlds.remove-server-modal.title": {
"message": "Enlever le serveur"
"message": "Supprimer le serveur"
},
"app.instance.worlds.remove-server-modal.warning-body": {
"message": "Ce serveur sera enlevé de votre liste de serveur et de la liste de serveur en jeu. Vous pourrez le rajouter plus tard si vous connaissez son adresse."
@@ -611,6 +611,9 @@
"app.modal.install-to-play.report-image-too-large": {
"message": "Le fichier dépasse la limite de 1 MiB"
},
"app.modal.install-to-play.report-legal-claims": {
"message": "Pour les notifications DMCA ou autres réclamations juridiques, veuillez consulter notre <copyright-link>Politique relative aux droits d'auteur</copyright-link>."
},
"app.modal.install-to-play.report-reason": {
"message": "Quelle règle cette instance enfreint-elle ?"
},
@@ -629,6 +632,9 @@
"app.modal.install-to-play.report-submitted": {
"message": "Signalement soumis"
},
"app.modal.install-to-play.report-support-and-bugs": {
"message": "Pour des demandes de support, contactez notre <support-link>équipe de support</support-link>. Pour signaler des bugs, ouvrez <github-link>une issue Github</github-link>."
},
"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)."
},
@@ -638,6 +644,9 @@
"app.modal.install-to-play.shared-instance-content": {
"message": "Contenu de l'instance partagée"
},
"app.modal.install-to-play.shared-instance-unknown-files-description": {
"message": "Cette instance partagée 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-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."
},
@@ -723,7 +732,7 @@
"message": "Gestion des ressources"
},
"app.skins.add-button": {
"message": "Ajouter une skin"
"message": "Ajouter un skin"
},
"app.skins.add-button.drag-and-drop": {
"message": "Glisser et déposer"
@@ -738,7 +747,7 @@
"message": "Cela va supprimer de manière permanente ce skin. Cette action est irréversible."
},
"app.skins.delete-modal.title": {
"message": "Êtes-vous sûr de vouloir supprimer cette skin ?"
"message": "Êtes-vous sûr de vouloir supprimer ce skin ?"
},
"app.skins.dropped-file-error.text": {
"message": "Impossible de lire le fichier déposé."
@@ -753,13 +762,13 @@
"message": "Modifier le skin"
},
"app.skins.modal.add-skin-button": {
"message": "Ajouter une skin"
"message": "Ajouter un skin"
},
"app.skins.modal.add-title": {
"message": "Ajouter une skin"
"message": "Ajouter un skin"
},
"app.skins.modal.arm-style-section": {
"message": "Bras"
"message": "Style du bras"
},
"app.skins.modal.arm-style-slim": {
"message": "Mince"
@@ -929,18 +938,36 @@
"content.shared-instance.change-version-body": {
"message": "Changer la version change seulement votre copie locale. Des futures mises à jour d'instance partagées peuvent restaurer ou changer la version."
},
"content.shared-instance.delete-bulk-body": {
"message": "Certains projets sélectionnés font partie de l'instance partagée. Les supprimer changerait seulement votre copie locale, et de futures mises à jour d'instance partagées peuvent restaurer ou les changer de nouveau."
},
"content.shared-instance.delete-button": {
"message": "Supprimer quand même"
},
"content.shared-instance.delete-many-button": {
"message": "Supprimer {count, number} projets quand même"
},
"content.shared-instance.delete-single-body": {
"message": "Le supprimer change seulement votre copie locale. De futures mises à jour d'instance partagées peuvent restaurer ou changer la version."
},
"content.shared-instance.disable-bulk-body": {
"message": "Certains projets sélectionnés font partie de l'instance partagée. Les désactiver changerait seulement votre copie locale, et de futures mises à jour d'instance partagées peuvent restaurer ou les changer de nouveau."
},
"content.shared-instance.disable-button": {
"message": "Désactiver quand même"
},
"content.shared-instance.disable-many-button": {
"message": "Désactiver {count, number} projets quand même"
},
"content.shared-instance.disable-single-body": {
"message": "Le désactiver change seulement votre copie locale. De futures mises à jour d'instance partagées peuvent restaurer ou changer la version."
},
"content.shared-instance.unlink-body": {
"message": "Le délier change seulement votre copie locale. De futures mises à jour d'instance partagées peuvent restaurer ou changer la version."
},
"content.shared-instance.warning-header": {
"message": "Ceci fait partie de l'instance partagée"
},
"friends.action.add-friend": {
"message": "Ajouter un ami"
},
@@ -975,7 +1002,7 @@
"message": "La demande d'ami a été envoyé"
},
"friends.friend.view-profile": {
"message": "Voir le profile"
"message": "Voir le profil"
},
"friends.heading": {
"message": "Amis"
@@ -1004,6 +1031,48 @@
"friends.sign-in-to-add-friends": {
"message": "<link>Créer un compte Modrinth</link> pour ajouter des amis et voir à quoi ils jouent !"
},
"installation-settings.shared-instance.linked-title": {
"message": "Instance partagée liée"
},
"installation-settings.shared-instance.title": {
"message": "Dépublier l'instance"
},
"installation-settings.shared-instance.unlink-button": {
"message": "Dissocier l'instance partagée"
},
"installation-settings.shared-instance.unlink-description": {
"message": "Déconnecter cette instance locale de futures mises à jour partagées."
},
"installation-settings.shared-instance.unlinking-button": {
"message": "Dissociation..."
},
"installation-settings.shared-instance.unpublish-button": {
"message": "Dépublier l'instance partagée"
},
"installation-settings.shared-instance.unpublish-description": {
"message": "Supprime cette instance partagée de Modrinth et arrête d'envoyer des mises à jour à toute personne l'utilisant. Votre copie locale ne sera pas affectée."
},
"installation-settings.shared-instance.unpublishing-button": {
"message": "Dépublication..."
},
"installation-settings.unlink-shared-instance.modal.admonition-body": {
"message": "Cela affecte seulement votre instance locale. Votre contenu installé restera sur cet appareil, et l'instance partagée et les autres personnes l'utilisant ne seront pas affectés."
},
"installation-settings.unlink-shared-instance.modal.admonition-header": {
"message": "Dissociation de l'instance partagée"
},
"installation-settings.unlink-shared-instance.modal.header": {
"message": "Dissocier l'instance partagée"
},
"installation-settings.unpublish-shared-instance.modal.admonition-body": {
"message": "Cela supprime l'instance partagée des serveurs de Modrinth. Les personnes l'utilisant dans l'application Modrinth vont cesser de recevoir des mises à jour, mais votre instance locale et son contenu resteront sur cet appareil."
},
"installation-settings.unpublish-shared-instance.modal.admonition-header": {
"message": "Dépublication de l'instance partagée"
},
"installation-settings.unpublish-shared-instance.modal.header": {
"message": "Dépublier l'instance partagée"
},
"instance.action.create-shortcut": {
"message": "Créer un raccourci"
},
@@ -1217,6 +1286,9 @@
"instance.settings.tabs.installation.loader-version": {
"message": "Version de {loader}"
},
"instance.settings.tabs.installation.locked": {
"message": "Les paramètres d'installation ne sont pas disponible pendant que cette instance est verrouillée."
},
"instance.settings.tabs.java": {
"message": "Java et mémoire"
},
@@ -1319,9 +1391,15 @@
"instance.shared-instance.tooltip": {
"message": "Le contenu de cette instance est gérée par quelqu'un d'autre."
},
"instance.shared-instance.unavailable.access-revoked-text": {
"message": "Votre accès à l'instance partagée a été révoqué. Cette instance reste disponible, mais n'est plus liée et ne recevra plus de mises à jour."
},
"instance.shared-instance.unavailable.deleted-text": {
"message": "L'instance principale a été supprimée. Cette instance est encore disponible, mais n'est plus liée et va cesser de recevoir des mises à jour."
},
"instance.shared-instance.unavailable.locked-text": {
"message": "Cette instance partagée a été verrouillée par la Team de Modération de Contenu. Elle ne recevra plus de mises à jour de l'instance primaire et ne peut plus être jouée."
},
"instance.shared-instance.unavailable.locked-title": {
"message": "Instance verrouillée"
},
+126 -15
View File
@@ -108,7 +108,7 @@
"message": "Elsődleges játékpéldány"
},
"app.action-bar.reload-to-update": {
"message": "Töltsd újra a frissítéshez"
"message": "Frissítés elérhető"
},
"app.action-bar.show-more-running-instances": {
"message": "További futó pédányok megjelenítése"
@@ -315,7 +315,7 @@
"message": "A Java {version} kibontása..."
},
"app.install.phase.preparing_java.fetching-metadata": {
"message": "A Java {version} előkészítése..."
"message": "A Java {version} beszerzése..."
},
"app.install.phase.preparing_java.resolving": {
"message": "A Java {version} előkészítése..."
@@ -324,25 +324,28 @@
"message": "A Java {version} ellenőrzése..."
},
"app.install.phase.reading_pack_manifest": {
"message": "Csomag adati kiolvasása"
"message": "A modcsomag leírófájljának beolvasása..."
},
"app.install.phase.resolving_loader": {
"message": "A betöltő meghatározása..."
},
"app.install.phase.resolving_minecraft": {
"message": "Minecraft Betöltése"
"message": "A Minecraft-verzió meghatározása..."
},
"app.install.phase.resolving_pack": {
"message": "Tartalom betöltése"
"message": "A tartalom meghatározása..."
},
"app.install.phase.rolling_back": {
"message": "Visszavonás"
"message": "Visszavonás..."
},
"app.install.phase.running_loader_processors": {
"message": "Betöltő folyamatok futtatása"
"message": "Betöltőfolyamatok futtatása..."
},
"app.instance.admonitions.shared-instance.added-label": {
"message": "Hozzáadva"
},
"app.instance.admonitions.shared-instance.changes-body": {
"message": "A helyi példányod előrébb tart, mint azoké a felhasználóké, akikkel megosztottad."
"message": "A te gépeden lévő játékpéldány újabb, mint azoké a felhasználóké, akikkel megosztottad."
},
"app.instance.admonitions.shared-instance.changes-header": {
"message": "A változtatásaid még nem lettek megosztva"
@@ -360,7 +363,7 @@
"message": "Frissítés közzététele"
},
"app.instance.admonitions.shared-instance.review-description": {
"message": "A példányt használó összes résztvevővel megosztásra kerülő tartalomváltoztatások áttekintése."
"message": "A játékpéldányt használó összes résztvevővel megosztásra kerülő tartalomváltoztatások áttekintése."
},
"app.instance.admonitions.shared-instance.review-header": {
"message": "Változtatások áttekintése"
@@ -405,7 +408,7 @@
"message": "projekt"
},
"app.instance.mods.locked-content": {
"message": "Zárolt példányokban a tartalom nem változtatható meg."
"message": "Zárolt játékpéldányokban a tartalom nem változtatható meg."
},
"app.instance.mods.project-was-added": {
"message": "„{name}” hozzá lett adva"
@@ -423,7 +426,7 @@
"message": "Sikeresen feltöltve"
},
"app.instance.share.empty.description": {
"message": "Ezt a példányt megoszthatod a barátaiddal!"
"message": "Ezt a játékpéldányt megoszthatod a barátaiddal!"
},
"app.instance.share.empty.heading": {
"message": "Nincsenek barátok meghívva"
@@ -452,20 +455,65 @@
"app.instance.share.locked.wrong-account-heading": {
"message": "Helytelen fiók"
},
"app.instance.share.remove-user-modal.effect-access": {
"message": "Többé nem fog frissítéseket kapni ehhez a megosztott játékpéldányhoz"
},
"app.instance.share.remove-user-modal.effect-installed-copy": {
"message": "A már telepített játékpéldányok megmaradnak az eszközén"
},
"app.instance.share.remove-user-modal.effect-invite-again": {
"message": "Később újra meghívhatod"
},
"app.instance.share.remove-user-modal.effect-last-user": {
"message": "Ő az utolsó felhasználó, a megosztás ezen az játékpéldányon le lesz tiltva"
},
"app.instance.share.remove-user-modal.effects-label": {
"message": "Mi fog történni?"
},
"app.instance.share.remove-user-modal.header": {
"message": "Hozzáférés visszavonása"
},
"app.instance.share.remove-user-modal.remove-button": {
"message": "Hozzáférés visszavonása"
},
"app.instance.share.remove-user-modal.user-avatar-alt": {
"message": "{username} avatárja"
},
"app.instance.share.remove-user-modal.warning-body": {
"message": "Ha visszavonod {username} hozzáférését ehhez a megosztott játékpéldányhoz, újra meg kell hívnod, mielőtt frissítéseket kaphatna."
},
"app.instance.share.sign-in.button": {
"message": "Bejelentkezés"
},
"app.instance.share.unlink.body": {
"message": "A játékpéldány megosztásához le kell választanod ezt a modcsomagot"
},
"app.instance.share.unlink.header": {
"message": "A megosztáshoz le kell választani"
},
"app.instance.shared-instance-already-installed.install-anyway": {
"message": "Telepítés mindenképpen"
},
"app.instance.shared-instance-already-installed.instance": {
"message": "Példány"
"message": "Játékpéldány"
},
"app.instance.shared-instance-wrong-account.fallback-username": {
"message": "az összekapcsolt fiók"
},
"app.instance.shared-instance-wrong-account.owner-admonition-body-v2": {
"message": ", hogy kezelhesd ezt a megosztott játékpéldányt. Nem fogod tudni a frissítéseket eljuttatni a felhasználókhoz."
},
"app.instance.shared-instance-wrong-account.sign-in-as-label": {
"message": "Bejelentkezés mint"
"message": "Jelentkezz be mint"
},
"app.instance.shared-instance-wrong-account.signed-out-header": {
"message": "Be kell jelentkezned a Modrinth-ba"
"message": "Be kell jelentkezned a Modrinthba"
},
"app.instance.shared-instance-wrong-account.user-admonition-body-v2": {
"message": ", hogy értesítéseket kapj erről a megosztott játékpéldányról."
},
"app.instance.shared-instance-wrong-account.warning-header": {
"message": "Nem a megfelelő Modrinth-fiókot használod"
},
"app.instance.worlds.add-server": {
"message": "Szerver hozzáadása"
@@ -518,6 +566,18 @@
"app.instance.worlds.search-worlds-placeholder": {
"message": "Keresés {count} világ között..."
},
"app.modal.install-to-play.additional-context": {
"message": "További kontextus"
},
"app.modal.install-to-play.content-you-are-reporting": {
"message": "A játékpéldány, amelyet bejelenteni kívánsz"
},
"app.modal.install-to-play.delete-instance": {
"message": "Játékpéldány törlése"
},
"app.modal.install-to-play.external-files-dont-install": {
"message": "Ne telepítse"
},
"app.modal.install-to-play.header": {
"message": "Telepítés a játékhoz"
},
@@ -533,6 +593,9 @@
"app.modal.install-to-play.mod-count": {
"message": "{count} mod"
},
"app.modal.install-to-play.report-reason.spam": {
"message": "Spam"
},
"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)."
},
@@ -783,7 +846,7 @@
"message": "Sikeres letöltés"
},
"app.update-popup.reload": {
"message": "Töltsd újra a frissítéshez"
"message": "Frissítés"
},
"app.update-popup.title": {
"message": "Frissítés elérhető"
@@ -875,6 +938,15 @@
"friends.sign-in-to-add-friends": {
"message": "<link>Lépj be Modrinth fiókodba</link>, hogy felvehess barátokat és lásd mivel játszanak!"
},
"installation-settings.shared-instance.unpublishing-button": {
"message": "Közzététel visszavonása..."
},
"installation-settings.unlink-shared-instance.modal.admonition-header": {
"message": "Megosztott játékpéldány leválasztása"
},
"installation-settings.unlink-shared-instance.modal.header": {
"message": "Megosztott játékpéldány leválasztása"
},
"instance.action.create-shortcut": {
"message": "Parancsikon létrehozása"
},
@@ -944,6 +1016,9 @@
"instance.files.save-as": {
"message": "Mentés másként..."
},
"instance.locked.delete-button": {
"message": "Játékpéldány törlése"
},
"instance.playtime.never-played": {
"message": "Még nem játszott"
},
@@ -1121,6 +1196,9 @@
"instance.settings.tabs.java.java-path-placeholder": {
"message": "/eleresi/ut/a/javahoz"
},
"instance.settings.tabs.sharing": {
"message": "Megosztás"
},
"instance.settings.tabs.window": {
"message": "Ablak"
},
@@ -1151,6 +1229,18 @@
"instance.settings.tabs.window.width.enter": {
"message": "Szélesség megadása..."
},
"instance.shared-instance.publish-review.added-label": {
"message": "Hozzáadva"
},
"instance.shared-instance.publish-review.header": {
"message": "Változtatások áttekintése"
},
"instance.shared-instance.publish-review.removed-label": {
"message": "Eltávolítva"
},
"instance.shared-instance.unavailable.locked-title": {
"message": "Pédány lezárva"
},
"instance.worlds.a_minecraft_server": {
"message": "Egy Minecraft szerver"
},
@@ -1235,6 +1325,27 @@
"minecraft-required.sign-in": {
"message": "Bejelentkezés a Microsft-ba"
},
"modal.modrinth-account-required.cancel-button": {
"message": "Mégse"
},
"modal.modrinth-account-required.create-account-button": {
"message": "Fiók létrehozása"
},
"modal.modrinth-account-required.header": {
"message": "Fiók szükséges"
},
"modal.modrinth-account-required.sign-in-button": {
"message": "Jelentkezz be a Modrinth-be"
},
"modal.modrinth-account-required.sign-in-heading": {
"message": "Jelentkezz be egy Modrinth-fiókba"
},
"modal.modrinth-account-required.signing-in-header": {
"message": "Bejelentkezés"
},
"modal.modrinth-account-required.waiting-for-browser": {
"message": "Várakozás a böngésző megerősítésére..."
},
"search.filter.locked.instance": {
"message": "A játékpéldány által van megadva"
},
@@ -27,7 +27,7 @@
"message": "Riprova"
},
"app.action-bar.install.summary.app-closing": {
"message": "Annullato per app chiusa"
"message": "Annullato per chiusura app"
},
"app.action-bar.install.summary.bad-modpack-file": {
"message": "Impossibile leggere il pacchetto"
@@ -489,7 +489,7 @@
"message": "Scollega prima di condividere"
},
"app.instance.shared-instance-already-installed.body": {
"message": "Questa istanza condivisa è già installata come <bold>{instanceName}</bold>. Vuoi installarne un'altra copia?"
"message": "Questa istanza condivisa è già installata come <bold>{instanceName}</bold>. Vuoi davvero installarne un'altra copia?"
},
"app.instance.shared-instance-already-installed.header": {
"message": "Istanza condivisa già installata"
@@ -972,7 +972,7 @@
"message": "Stringi un'amicizia"
},
"friends.action.view-friend-requests": {
"message": "{count, plural, one {# richiesta} other {# richieste}} d''amicizia"
"message": "{count, plural, one {# richiesta} other {# richieste}} d'amicizia"
},
"friends.add-friend.submit": {
"message": "Invia richiesta d'amicizia"
+259 -1
View File
@@ -338,6 +338,24 @@
"app.install.phase.running_loader_processors": {
"message": "ローダーのプロセッサーを実行中"
},
"app.instance.admonitions.shared-instance.added-label": {
"message": "追加済"
},
"app.instance.admonitions.shared-instance.changes-header": {
"message": "変更はまだ共有されていません"
},
"app.instance.admonitions.shared-instance.publish-button": {
"message": "アップデートを公開する"
},
"app.instance.admonitions.shared-instance.publishing-button": {
"message": "公開しています…"
},
"app.instance.admonitions.shared-instance.review-admonition-header": {
"message": "アップデートを公開する"
},
"app.instance.admonitions.shared-instance.reviewing-button": {
"message": "審査中…"
},
"app.instance.confirm-delete.admonition-body": {
"message": "インスタンス内のすべてのデータは、ワールド、設定、インストール済みのコンテンツを含め、完全に削除されます。"
},
@@ -374,6 +392,9 @@
"app.instance.mods.content-type-project": {
"message": "プロジェクト"
},
"app.instance.mods.locked-content": {
"message": "ロックされた起動構成の内にあるコンテンツは変更できません。"
},
"app.instance.mods.project-was-added": {
"message": "「{name}」が追加されました"
},
@@ -389,6 +410,90 @@
"app.instance.mods.successfully-uploaded": {
"message": "アップロードに成功しました"
},
"app.instance.share.empty.description": {
"message": "フレンドとこのインスタンスをシェアしましょう!"
},
"app.instance.share.empty.heading": {
"message": "まだ誰も招待していないようです"
},
"app.instance.share.empty.invite-friends-button": {
"message": "フレンドを招待"
},
"app.instance.share.invite-modal.heading": {
"message": "{name} をシェアする"
},
"app.instance.share.locked.empty-description-prefix": {
"message": "このページにアクセスするには"
},
"app.instance.share.locked.empty-description-suffix": {
"message": "としてサインインする必要があります。"
},
"app.instance.share.locked.linked-account-fallback": {
"message": "リンクされたアカウント"
},
"app.instance.share.locked.signed-out-heading": {
"message": "サインインしていません"
},
"app.instance.share.locked.switch-account-button": {
"message": "アカウントを切り替える"
},
"app.instance.share.locked.wrong-account-heading": {
"message": "アカウントが違います"
},
"app.instance.share.remove-user-modal.effect-access": {
"message": "このインスタンスのアップデートは受信できなくなります"
},
"app.instance.share.remove-user-modal.effect-invite-again": {
"message": "後でもう一度招待することもできます"
},
"app.instance.share.remove-user-modal.effect-last-user": {
"message": "彼らがすでにインストールしたコピーは彼らのデバイスに残ります"
},
"app.instance.share.remove-user-modal.effects-label": {
"message": "この変更で何が起きるか?"
},
"app.instance.share.remove-user-modal.header": {
"message": "アクセスを取り消す"
},
"app.instance.share.remove-user-modal.remove-button": {
"message": "アクセスを取り消す"
},
"app.instance.share.remove-user-modal.user-avatar-alt": {
"message": "{username}のアバター"
},
"app.instance.share.remove-user-modal.warning-body": {
"message": "もし{username}のアクセス権を取り消した場合、彼らが再びアップデートを受け取れるようにするには、もう一度招待し直す必要があります。"
},
"app.instance.share.sign-in.button": {
"message": "サインイン"
},
"app.instance.share.unlink.body": {
"message": "この起動構成を共有するには、このmodpackのリンクを解除する必要があります"
},
"app.instance.share.unlink.header": {
"message": "共有にはリンクを解除する必要があります"
},
"app.instance.shared-instance-already-installed.body": {
"message": "この共有された起動構成はすでに<bold> {instanceName} </bold>としてインストールされています。別のコピーをインストールしてもよろしいですか?"
},
"app.instance.shared-instance-already-installed.header": {
"message": "共有された起動構成はすでにインストールされています"
},
"app.instance.shared-instance-already-installed.install-anyway": {
"message": "インストールを続行"
},
"app.instance.shared-instance-already-installed.instance": {
"message": "起動構成"
},
"app.instance.shared-instance-wrong-account.fallback-username": {
"message": "リンクされたアカウント"
},
"app.instance.shared-instance-wrong-account.signed-out-header": {
"message": "Modrinthへのサインインが必要です"
},
"app.instance.shared-instance-wrong-account.warning-header": {
"message": "Modrinthのアカウントが間違っています"
},
"app.instance.worlds.add-server": {
"message": "サーバーを追加"
},
@@ -440,11 +545,26 @@
"app.instance.worlds.search-worlds-placeholder": {
"message": "{count} 個のワールドを検索…"
},
"app.modal.install-to-play.additional-context": {
"message": "追加のコンテンツ"
},
"app.modal.install-to-play.additional-context-placeholder": {
"message": "可能であれば、リンクや画像も含めてください"
},
"app.modal.install-to-play.content-you-are-reporting": {
"message": "起動構成を報告する"
},
"app.modal.install-to-play.delete-instance": {
"message": "インスタンスを削除する"
},
"app.modal.install-to-play.external-files-dont-install": {
"message": "インストールしない"
},
"app.modal.install-to-play.header": {
"message": "インストールしてプレイ"
},
"app.modal.install-to-play.install-anyway": {
"message": "このままインストール"
"message": "インストールを続行"
},
"app.modal.install-to-play.install-button": {
"message": "インストール"
@@ -455,12 +575,48 @@
"app.modal.install-to-play.mod-count": {
"message": "{count, plural, other {#個のMod}}"
},
"app.modal.install-to-play.report-description": {
"message": "このフォームを使用して、<rules-link>ルール</rules-link>または<terms-link>利用規約</terms-link>に違反する可能性のある事例を報告してください。"
},
"app.modal.install-to-play.report-image-invalid-type": {
"message": "対応していない画像形式です"
},
"app.modal.install-to-play.report-image-too-large": {
"message": "ファイルのサイズが 1 MiBの制限を超えています"
},
"app.modal.install-to-play.report-reason": {
"message": "この起動構成はどの規則に違反していますか?"
},
"app.modal.install-to-play.report-reason.inappropriate": {
"message": "不適切なコンテンツ"
},
"app.modal.install-to-play.report-reason.malicious": {
"message": "悪意がある"
},
"app.modal.install-to-play.report-reason.spam": {
"message": "スパム"
},
"app.modal.install-to-play.report-shared-instance-header": {
"message": "共有された起動構成を通報する"
},
"app.modal.install-to-play.report-submitted": {
"message": "通報は送信されました"
},
"app.modal.install-to-play.report-support-and-bugs": {
"message": "サポートに関するお問い合わせは、<support-link>サポートチーム</support-link>までご連絡ください。バグの報告は、<github-link>GitHubのIssue</github-link>を作成してください。"
},
"app.modal.install-to-play.reviewed-files": {
"message": "ファイル形式(.mrpackを含む)に関わらず、Modrinthに公開されているファイルのみが審査の対象となります。"
},
"app.modal.install-to-play.shared-instance": {
"message": "共有インスタンス"
},
"app.modal.install-to-play.shared-instance-content": {
"message": "共有された起動構成の内容"
},
"app.modal.install-to-play.shared-instance-unknown-files-description": {
"message": "この共有された起動構成には、Modrinthで公開されていないファイルが含まれています。信頼できる提供元からのファイルのみをインストールすることを強くお勧めします。"
},
"app.modal.install-to-play.unknown-files-description": {
"message": "このサーバーModパックには、Modrinthに公開されていないファイルが含まれています。信頼できるソースからのファイルのみをインストールすることを強く推奨します。"
},
@@ -479,6 +635,24 @@
"app.modal.update-to-play.removed": {
"message": "削除されました"
},
"app.modal.update-to-play.server-modpack-unknown-files-description": {
"message": "このサーバーModパックのアップデートには、Modrinthに公開されていないファイルが含まれています。信頼できるソースからのファイルのみをインストールすることを強く推奨します。"
},
"app.modal.update-to-play.shared-instance-added-label": {
"message": "追加済み"
},
"app.modal.update-to-play.shared-instance-removed-label": {
"message": "削除済み"
},
"app.modal.update-to-play.shared-instance-unknown-files-description": {
"message": "この共有された起動構成のアップデートには、Modrinthで公開されていないファイルが含まれています。信頼できる提供元からのファイルのみをインストールすることを強くお勧めします。"
},
"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": "このプロジェクトは既にインストールされています"
},
@@ -734,6 +908,36 @@
"app.world.world-item.players-online": {
"message": "{count} 人がオンライン"
},
"content.shared-instance.change-version-body": {
"message": "バージョンの変更はローカルコピーにのみ影響します。今後共有された起動構成がアップデートされた際に、元の状態に戻ったり、別のバージョンに変更されたりする場合があります。"
},
"content.shared-instance.delete-bulk-body": {
"message": "選択された一部のプロジェクトは共有された起動構成の一部です。これらを削除してもローカルコピーのみが変更され、今後共有された起動構成がアップデートされた際に、再び復元されたり変更されたりする場合があります。"
},
"content.shared-instance.delete-button": {
"message": "とにかく削除する"
},
"content.shared-instance.delete-many-button": {
"message": "それでも {count, number} のプロジェクトを削除する"
},
"content.shared-instance.delete-single-body": {
"message": "削除はローカルコピーにのみ影響します。今後共有された起動構成がアップデートされた際に、元の状態に戻ったり、別のバージョンに変更されたりする場合があります。"
},
"content.shared-instance.disable-bulk-body": {
"message": "選択された一部のプロジェクトは共有された起動構成の一部です。これらを無効化してもローカルコピーのみが変更され、今後共有された起動構成がアップデートされた際に、再び有効化されたり、復元されたり、変更されたりする場合があります。"
},
"content.shared-instance.disable-button": {
"message": "とにかく無効化する"
},
"content.shared-instance.disable-many-button": {
"message": "それでも {count, number} のプロジェクトを無効化する"
},
"content.shared-instance.disable-single-body": {
"message": "無効化はローカルコピーにのみ影響します。今後共有された起動構成がアップデートされた際に、再び有効化されたり、元の状態に戻ったり、変更されたりする場合があります。"
},
"content.shared-instance.warning-header": {
"message": "これは共有された起動構成の一部です"
},
"friends.action.add-friend": {
"message": "フレンドを追加"
},
@@ -797,6 +1001,21 @@
"friends.sign-in-to-add-friends": {
"message": "<link>Modrinthアカウントにサインイン</link>して友達を追加し、彼らがプレイしているゲームをチェックしよう!"
},
"installation-settings.shared-instance.linked-title": {
"message": "リンク済の共有された起動構成"
},
"installation-settings.shared-instance.title": {
"message": "起動構成を非公開化"
},
"installation-settings.shared-instance.unlink-button": {
"message": "起動構成の共有を解除"
},
"installation-settings.shared-instance.unlinking-button": {
"message": "共有を解除中…"
},
"installation-settings.shared-instance.unpublish-button": {
"message": "共有された軌道構成を非公開にする"
},
"instance.action.create-shortcut": {
"message": "ショートカット作成"
},
@@ -1073,6 +1292,9 @@
"instance.settings.tabs.window.width.enter": {
"message": "幅を入力…"
},
"instance.shared-instance.publish-review.admonition-header": {
"message": "アップデートを配信する"
},
"instance.worlds.a_minecraft_server": {
"message": "Minecraftサーバー"
},
@@ -1157,6 +1379,42 @@
"minecraft-required.sign-in": {
"message": "Microsoft にサインイン"
},
"modal.modrinth-account-required.browser-description": {
"message": "サインイン用のタブが開きました。そちらでサインインを完了してから、アプリに戻ってください。"
},
"modal.modrinth-account-required.cancel-button": {
"message": "キャンセル"
},
"modal.modrinth-account-required.continue-in-browser-heading": {
"message": "ブラウザで続行"
},
"modal.modrinth-account-required.create-account-button": {
"message": "アカウントを作成"
},
"modal.modrinth-account-required.description": {
"message": "この機能を利用するには、Modrinthアカウントにログインする必要があります。"
},
"modal.modrinth-account-required.header": {
"message": "アカウントが必要です"
},
"modal.modrinth-account-required.open-browser-again-button": {
"message": "もう一度ブラウザを開く"
},
"modal.modrinth-account-required.sign-in-button": {
"message": "Modrinthへサインイン"
},
"modal.modrinth-account-required.sign-in-heading": {
"message": "Modrinth アカウントにサインインしてください"
},
"modal.modrinth-account-required.signing-in-header": {
"message": "サインイン"
},
"modal.modrinth-account-required.support-prompt": {
"message": "サインインでお困りですか?<support>サポート</support>"
},
"modal.modrinth-account-required.waiting-for-browser": {
"message": "ブラウザからの確認を待っています…"
},
"search.filter.locked.instance": {
"message": "インスタンスによる条件"
},
@@ -89,6 +89,9 @@
"app.action-bar.install.unknown-instance": {
"message": "알 수 없는 인스턴스"
},
"app.action-bar.install.updating-shared-content": {
"message": "공유 콘텐츠 업데이트 중"
},
"app.action-bar.installs": {
"message": "설치"
},
@@ -338,6 +341,36 @@
"app.install.phase.running_loader_processors": {
"message": "로더 진행기 실행 중"
},
"app.instance.admonitions.shared-instance.added-label": {
"message": "추가됨"
},
"app.instance.admonitions.shared-instance.changes-body": {
"message": "현재 로컬 인스턴스가 콘텐츠를 공유한 다른 사용자들의 인스턴스보다 최신 상태입니다."
},
"app.instance.admonitions.shared-instance.changes-header": {
"message": "변경 사항이 아직 공유되지 않았습니다"
},
"app.instance.admonitions.shared-instance.publish-button": {
"message": "업데이트 게시"
},
"app.instance.admonitions.shared-instance.publishing-button": {
"message": "게시중..."
},
"app.instance.admonitions.shared-instance.removed-label": {
"message": "삭제중"
},
"app.instance.admonitions.shared-instance.review-admonition-header": {
"message": "Push 업데이트"
},
"app.instance.admonitions.shared-instance.review-description": {
"message": "이 인스턴스를 사용하는 모든 사람과 공유될 콘텐츠 변경 사항을 검토하세요."
},
"app.instance.admonitions.shared-instance.review-header": {
"message": "Review changes"
},
"app.instance.admonitions.shared-instance.reviewing-button": {
"message": "검토중..."
},
"app.instance.confirm-delete.admonition-body": {
"message": "인스턴스의 모든 데이터가 삭제됩니다. 세계 폴더, 설정 폴더 등 설치된 모든 컨텐츠가 포함됩니다."
},
@@ -374,6 +407,9 @@
"app.instance.mods.content-type-project": {
"message": "프로젝트"
},
"app.instance.mods.locked-content": {
"message": "잠긴 인스턴스의 콘텐츠는 변경할 수 없습니다."
},
"app.instance.mods.project-was-added": {
"message": "\"{name}\" 추가됨"
},
@@ -389,6 +425,102 @@
"app.instance.mods.successfully-uploaded": {
"message": "업로드 성공"
},
"app.instance.share.empty.description": {
"message": "친구들과 이 인스턴스를 공유할 수 있습니다!"
},
"app.instance.share.empty.heading": {
"message": "아직 초대된 친구가 없습니다"
},
"app.instance.share.empty.invite-friends-button": {
"message": "친구 초대"
},
"app.instance.share.invite-modal.heading": {
"message": "{name} 공유"
},
"app.instance.share.locked.empty-description-prefix": {
"message": "이 페이지에 접근하려면"
},
"app.instance.share.locked.empty-description-suffix": {
"message": "계정으로 로그인해야 합니다."
},
"app.instance.share.locked.linked-account-fallback": {
"message": "연동된"
},
"app.instance.share.locked.signed-out-heading": {
"message": "로그인되지 않음"
},
"app.instance.share.locked.switch-account-button": {
"message": "계정 전환"
},
"app.instance.share.locked.wrong-account-heading": {
"message": "잘못된 계정"
},
"app.instance.share.remove-user-modal.effect-access": {
"message": "이들은 더 이상 해당 공유 인스턴스의 업데이트를 받지 않습니다"
},
"app.instance.share.remove-user-modal.effect-installed-copy": {
"message": "이미 설치한 사본은 해당 기기에 그대로 남아 있습니다"
},
"app.instance.share.remove-user-modal.effect-invite-again": {
"message": "나중에 다시 초대할 수 있습니다"
},
"app.instance.share.remove-user-modal.effect-last-user": {
"message": "마지막 사용자이며, 이 인스턴스의 공유가 비활성화됩니다"
},
"app.instance.share.remove-user-modal.effects-label": {
"message": "어떻게 되나요?"
},
"app.instance.share.remove-user-modal.header": {
"message": "액세스 권한 취소"
},
"app.instance.share.remove-user-modal.remove-button": {
"message": "액세스 권한 취소"
},
"app.instance.share.remove-user-modal.user-avatar-alt": {
"message": "{username}의 계정"
},
"app.instance.share.remove-user-modal.warning-body": {
"message": "{username} 님의 이 공유 인스턴스 액세스 권한을 취소하면, 해당 사용자가 업데이트를 받기 전에 다시 초대해야 합니다."
},
"app.instance.share.sign-in.button": {
"message": "로그인"
},
"app.instance.share.unlink.body": {
"message": "인스턴스를 공유하려면 이 모드팩 연동을 해제해야 합니다"
},
"app.instance.share.unlink.header": {
"message": "공유를 진행하려면 연동 해제가 필요합니다"
},
"app.instance.shared-instance-already-installed.body": {
"message": "이 공유 인스턴스는 이미 <bold>{instanceName}</bold> 이름으로 설치되어 있습니다. 사본을 하나 더 설치하시겠습니까?"
},
"app.instance.shared-instance-already-installed.header": {
"message": "공유 인스턴스가 이미 설치됨"
},
"app.instance.shared-instance-already-installed.install-anyway": {
"message": "그래도 설치"
},
"app.instance.shared-instance-already-installed.instance": {
"message": "인스턴스"
},
"app.instance.shared-instance-wrong-account.fallback-username": {
"message": "연동된 계정"
},
"app.instance.shared-instance-wrong-account.owner-admonition-body-v2": {
"message": "이 공유 인스턴스를 관리해야 합니다. 그렇지 않으면 사용자에게 업데이트를 푸시할 수 없습니다."
},
"app.instance.shared-instance-wrong-account.sign-in-as-label": {
"message": "계정 로그인:"
},
"app.instance.shared-instance-wrong-account.signed-out-header": {
"message": "Modrinth 로그인 필요"
},
"app.instance.shared-instance-wrong-account.user-admonition-body-v2": {
"message": "이 공유 인스턴스의 업데이트를 받으려면 로그인하세요."
},
"app.instance.shared-instance-wrong-account.warning-header": {
"message": "잘못된 Modrinth 계정을 사용하고 있습니다"
},
"app.instance.worlds.add-server": {
"message": "서버 추가"
},
@@ -440,6 +572,21 @@
"app.instance.worlds.search-worlds-placeholder": {
"message": "{count}개의 세계 검색..."
},
"app.modal.install-to-play.additional-context": {
"message": "추가 정보"
},
"app.modal.install-to-play.additional-context-placeholder": {
"message": "관련이 있는 경우 가능하면 링크 및 이미지를 포함하세요"
},
"app.modal.install-to-play.content-you-are-reporting": {
"message": "신고 대상 인스턴스"
},
"app.modal.install-to-play.delete-instance": {
"message": "인스턴스 삭제"
},
"app.modal.install-to-play.external-files-dont-install": {
"message": "설치하지 않음"
},
"app.modal.install-to-play.header": {
"message": "설치하고 플레이"
},
@@ -455,6 +602,9 @@
"app.modal.install-to-play.mod-count": {
"message": "{count, plural, one {모드 #개} other {모드 #개}}"
},
"app.modal.install-to-play.report-description": {
"message": "본 서식을 사용하여 당사의 <rules-link>규칙</rules-link> 또는 <terms-link>이용약관</terms-link> 위반 가능성이 있는 인스턴스를 신고하세요."
},
"app.modal.install-to-play.reviewed-files": {
"message": "모든 파일은 형식(.mrpack 포함)에 무관하게 Modrinth에 게시되어야만 검수를 거칩니다."
},
@@ -1073,6 +1223,36 @@
"instance.settings.tabs.window.width.enter": {
"message": "너비 입력..."
},
"instance.shared-instance.publish-review.admonition-header": {
"message": "플레이어에게 업데이트 게시"
},
"instance.shared-instance.publish-review.config-title-v2": {
"message": "설정 파일 선택"
},
"instance.shared-instance.publish-review.description": {
"message": "콘텐츠 변경 사항을 검토하고 이번 업데이트에 포함할 설정 파일을 선택하세요."
},
"instance.shared-instance.publish-review.header": {
"message": "변경 사항 검토"
},
"instance.shared-instance.publish-review.publish-button": {
"message": "업데이트 푸시"
},
"instance.shared-instance.publish-review.removed-label": {
"message": "제거됨"
},
"instance.shared-instance.tooltip": {
"message": "이 인스턴스의 콘텐츠는 다른 사용자가 관리하고 있습니다."
},
"instance.shared-instance.unavailable.access-revoked-text": {
"message": "공유 인스턴스 접근 권한이 취소되었습니다. 이 인스턴스는 계속 사용 가능하지만, 더 이상 연동되지 않으며 업데이트를 받지 않습니다."
},
"instance.shared-instance.unavailable.deleted-text": {
"message": "기본 인스턴스가 삭제되었습니다. 이 인스턴스는 계속 사용 가능하지만, 더 이상 연동되지 않으며 업데이트를 받지 않습니다."
},
"instance.shared-instance.unavailable.locked-text": {
"message": "이 공유 인스턴스는 콘텐츠 조정 팀에 의해 잠겼습니다. 기본 인스턴스 업데이트를 받지 않으며 플레이할 수 없습니다."
},
"instance.worlds.a_minecraft_server": {
"message": "Minecraft 서버"
},
+389 -11
View File
@@ -89,11 +89,14 @@
"app.action-bar.install.unknown-instance": {
"message": "Onbekende instantie"
},
"app.action-bar.install.updating-shared-content": {
"message": "Gedeelde inhoud bijwerken"
},
"app.action-bar.installs": {
"message": "Installaties"
},
"app.action-bar.make-primary-instance": {
"message": "Maak primaire instantie"
"message": "Tot hoofdinstantie maken"
},
"app.action-bar.no-instances-running": {
"message": "Geen actieve instanties"
@@ -102,7 +105,7 @@
"message": "Offline"
},
"app.action-bar.primary-instance": {
"message": "Primaire instantie"
"message": "Hoofdinstantie"
},
"app.action-bar.reload-to-update": {
"message": "Herlaadt om te updaten"
@@ -338,6 +341,36 @@
"app.install.phase.running_loader_processors": {
"message": "Loader-processors aan het uitvoeren"
},
"app.instance.admonitions.shared-instance.added-label": {
"message": "Toegevoegd"
},
"app.instance.admonitions.shared-instance.changes-body": {
"message": "Je lokale instantie loopt voor op de gebruikers met wie je deze hebt gedeeld."
},
"app.instance.admonitions.shared-instance.changes-header": {
"message": "Je wijzigingen zijn nog niet gedeeld"
},
"app.instance.admonitions.shared-instance.publish-button": {
"message": "Update verzenden"
},
"app.instance.admonitions.shared-instance.publishing-button": {
"message": "Verzenden..."
},
"app.instance.admonitions.shared-instance.removed-label": {
"message": "Verwijderd"
},
"app.instance.admonitions.shared-instance.review-admonition-header": {
"message": "Update verzenden"
},
"app.instance.admonitions.shared-instance.review-description": {
"message": "Bekijk de inhoudelijke wijzigingen die met alle gebruikers van deze instantie zullen worden gedeeld."
},
"app.instance.admonitions.shared-instance.review-header": {
"message": "Wijzigingen bekijken"
},
"app.instance.admonitions.shared-instance.reviewing-button": {
"message": "Controleren..."
},
"app.instance.confirm-delete.admonition-body": {
"message": "Alle gegevens van je instantie worden definitief verwijderd, inclusief je werelden, configuraties en alle geïnstalleerde inhoud."
},
@@ -374,6 +407,9 @@
"app.instance.mods.content-type-project": {
"message": "project"
},
"app.instance.mods.locked-content": {
"message": "De inhoud van vergrendelde instanties kan niet worden gewijzigd."
},
"app.instance.mods.project-was-added": {
"message": "\"{name}\" was toegevoegd"
},
@@ -389,6 +425,102 @@
"app.instance.mods.successfully-uploaded": {
"message": "Succesvol geüpload"
},
"app.instance.share.empty.description": {
"message": "Je kunt deze instantie met je vrienden delen!"
},
"app.instance.share.empty.heading": {
"message": "Geen vrienden uitgenodigd"
},
"app.instance.share.empty.invite-friends-button": {
"message": "Vrienden uitnodigen"
},
"app.instance.share.invite-modal.heading": {
"message": "{name} delen"
},
"app.instance.share.locked.empty-description-prefix": {
"message": "Je moet je aanmelden als"
},
"app.instance.share.locked.empty-description-suffix": {
"message": "om deze pagina te openen."
},
"app.instance.share.locked.linked-account-fallback": {
"message": "het gekoppelde account"
},
"app.instance.share.locked.signed-out-heading": {
"message": "Niet aangemeld"
},
"app.instance.share.locked.switch-account-button": {
"message": "Van account wisselen"
},
"app.instance.share.locked.wrong-account-heading": {
"message": "Verkeerd account"
},
"app.instance.share.remove-user-modal.effect-access": {
"message": "Ze zullen geen updates meer ontvangen voor deze gedeelde instantie"
},
"app.instance.share.remove-user-modal.effect-installed-copy": {
"message": "Elke versie die ze al hebben geïnstalleerd, blijft op hun apparaat staan"
},
"app.instance.share.remove-user-modal.effect-invite-again": {
"message": "Je kunt ze later opnieuw uitnodigen"
},
"app.instance.share.remove-user-modal.effect-last-user": {
"message": "Dit is de laatste gebruiker; delen wordt voor deze instantie uitgeschakeld"
},
"app.instance.share.remove-user-modal.effects-label": {
"message": "Wat gebeurt er dan?"
},
"app.instance.share.remove-user-modal.header": {
"message": "Toegang intrekken"
},
"app.instance.share.remove-user-modal.remove-button": {
"message": "Toegang intrekken"
},
"app.instance.share.remove-user-modal.user-avatar-alt": {
"message": "Avatar van {username}"
},
"app.instance.share.remove-user-modal.warning-body": {
"message": "Als je de toegang van {username} tot deze gedeelde instantie intrekt, moet je die persoon opnieuw uitnodigen voordat die updates kunnen ontvangen."
},
"app.instance.share.sign-in.button": {
"message": "Aanmelden"
},
"app.instance.share.unlink.body": {
"message": "Je moet dit modpack ontkoppelen om je instantie te kunnen delen"
},
"app.instance.share.unlink.header": {
"message": "Om te delen moet je ontkoppelen"
},
"app.instance.shared-instance-already-installed.body": {
"message": "Deze gedeelde instantie is al geïnstalleerd als <bold>{instanceName}</bold>. Weet je zeker dat je nog een exemplaar wilt installeren?"
},
"app.instance.shared-instance-already-installed.header": {
"message": "Gedeelde instantie al geïnstalleerd"
},
"app.instance.shared-instance-already-installed.install-anyway": {
"message": "Toch installeren"
},
"app.instance.shared-instance-already-installed.instance": {
"message": "Instantie"
},
"app.instance.shared-instance-wrong-account.fallback-username": {
"message": "het gekoppelde account"
},
"app.instance.shared-instance-wrong-account.owner-admonition-body-v2": {
"message": "om deze gedeelde instantie te beheren. Je kunt geen updates naar gebruikers verzenden."
},
"app.instance.shared-instance-wrong-account.sign-in-as-label": {
"message": "Log in als"
},
"app.instance.shared-instance-wrong-account.signed-out-header": {
"message": "Je moet je aanmelden bij Modrinth"
},
"app.instance.shared-instance-wrong-account.user-admonition-body-v2": {
"message": "om updates voor deze gedeelde instantie te ontvangen."
},
"app.instance.shared-instance-wrong-account.warning-header": {
"message": "Je gebruikt het verkeerde Modrinth-account"
},
"app.instance.worlds.add-server": {
"message": "Voeg server toe"
},
@@ -440,6 +572,21 @@
"app.instance.worlds.search-worlds-placeholder": {
"message": "Zoek werelden"
},
"app.modal.install-to-play.additional-context": {
"message": "Aanvullende context"
},
"app.modal.install-to-play.additional-context-placeholder": {
"message": "Voeg links en afbeeldingen toe als dat mogelijk en relevant is"
},
"app.modal.install-to-play.content-you-are-reporting": {
"message": "Instantie die je meldt"
},
"app.modal.install-to-play.delete-instance": {
"message": "Instantie verwijderen"
},
"app.modal.install-to-play.external-files-dont-install": {
"message": "Niet installeren"
},
"app.modal.install-to-play.header": {
"message": "Installeer om te spelen"
},
@@ -455,12 +602,51 @@
"app.modal.install-to-play.mod-count": {
"message": "{count, plural,one {# mod}other {# mods}}"
},
"app.modal.install-to-play.report-description": {
"message": "Gebruik dit formulier om instanties te melden die mogelijk in strijd zijn met onze <rules-link>Regels</rules-link> of <terms-link>Gebruiksvoorwaarden</terms-link>."
},
"app.modal.install-to-play.report-image-invalid-type": {
"message": "Bestand is geen ondersteund afbeeldingstype"
},
"app.modal.install-to-play.report-image-too-large": {
"message": "Bestand overschrijdt maximale grootte van 1 MiB"
},
"app.modal.install-to-play.report-legal-claims": {
"message": "Voor DMCA-meldingen of andere juridische vorderingen, zie ons <copyright-link>auteursrechtbeleid</copyright-link>."
},
"app.modal.install-to-play.report-reason": {
"message": "Welke regel wordt in deze instantie overtreden?"
},
"app.modal.install-to-play.report-reason.inappropriate": {
"message": "Ongepast"
},
"app.modal.install-to-play.report-reason.malicious": {
"message": "Kwaadaardig"
},
"app.modal.install-to-play.report-reason.spam": {
"message": "Spam"
},
"app.modal.install-to-play.report-shared-instance-header": {
"message": "Gedeelde instantie melden"
},
"app.modal.install-to-play.report-submitted": {
"message": "Melding ingediend"
},
"app.modal.install-to-play.report-support-and-bugs": {
"message": "Neem voor ondersteuningsverzoeken contact op met ons <support-link>ondersteuningsteam</support-link>. Voor bugmeldingen kun je een <github-link>GitHub-issue</github-link> aanmaken."
},
"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.shared-instance": {
"message": "Gedeelde instantie"
},
"app.modal.install-to-play.shared-instance-content": {
"message": "Inhoud van de gedeelde instantie"
},
"app.modal.install-to-play.shared-instance-unknown-files-description": {
"message": "Deze gedeelde instantie 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-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."
},
@@ -479,6 +665,24 @@
"app.modal.update-to-play.removed": {
"message": "Verwijderde"
},
"app.modal.update-to-play.server-modpack-unknown-files-description": {
"message": "Deze update voor de 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.update-to-play.shared-instance-added-label": {
"message": "Toegevoegd"
},
"app.modal.update-to-play.shared-instance-removed-label": {
"message": "Verwijderd"
},
"app.modal.update-to-play.shared-instance-unknown-files-description": {
"message": "Deze update voor de gedeelde instantie 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.update-to-play.update-required": {
"message": "Update vereist"
},
"app.modal.update-to-play.update-required-description": {
"message": "Er is een update nodig om {name} te spelen. Werk het spel bij naar de nieuwste versie om het te kunnen starten."
},
"app.project.install-button.already-installed": {
"message": "Dit project is al geïnstalleerd"
},
@@ -543,7 +747,7 @@
"message": "De geselecteerde skin wordt permanent verwijderd. Deze actie kan niet ongedaan worden gemaakt."
},
"app.skins.delete-modal.title": {
"message": "Weet u zeker dat u deze skin wilt verwijderen?"
"message": "Weet je zeker dat je deze skin wilt verwijderen?"
},
"app.skins.dropped-file-error.text": {
"message": "Kan het neergezette bestand niet lezen."
@@ -612,7 +816,7 @@
"message": "Voorvertonen"
},
"app.skins.rate-limit.text": {
"message": "U verandert te snel van skin. Mojang's servers hebben nieuwe aanvragen tijdelijk geblokkeerd. Wacht een moment voordat u het opnieuw probeert."
"message": "Je verandert je skin te vaak. De servers van Mojang hebben verdere verzoeken tijdelijk geblokkeerd. Wacht even voordat je het opnieuw probeert."
},
"app.skins.rate-limit.title": {
"message": "Rustig aan!"
@@ -645,7 +849,7 @@
"message": "Modrinth Pride"
},
"app.skins.section.modrinth-pride.tooltip": {
"message": "U heeft deze skins ontvangen omdat u tijdens Pride Month heeft gedoneerd aan een Modrinth Pride-inzamelingsactie."
"message": "Je hebt deze skins ontvangen omdat je tijdens Pride Month een donatie hebt gedaan aan een inzamelingsactie van Modrinth Pride."
},
"app.skins.section.mounts-of-mayhem": {
"message": "Mounts of Mayhem"
@@ -669,13 +873,13 @@
"message": "Inloggen"
},
"app.skins.sign-in.description": {
"message": "Log in op je Minecraft-account om de skinbeheerfuncties van de Modrinth-app te gebruiken."
"message": "Log in op je Minecraft-account om de functies voor het beheren van skins in de Modrinth-app te kunnen gebruiken."
},
"app.skins.sign-in.rinthbot-alt": {
"message": "Excited Modrinth Bot"
},
"app.skins.sign-in.title": {
"message": "Log in"
"message": "Graag inloggen"
},
"app.skins.title": {
"message": "Skinkiezer"
@@ -734,6 +938,39 @@
"app.world.world-item.players-online": {
"message": "{count} online"
},
"content.shared-instance.change-version-body": {
"message": "Als je de versie wijzigt, wordt alleen je lokale kopie aangepast. Bij toekomstige updates van de gedeelde instantie kan deze weer worden teruggezet of opnieuw worden gewijzigd."
},
"content.shared-instance.delete-bulk-body": {
"message": "Sommige geselecteerde projecten maken deel uit van de gedeelde instantie. Als je ze verwijdert, wordt alleen je lokale kopie aangepast; bij toekomstige updates van de gedeelde instantie kunnen ze weer worden hersteld of opnieuw worden gewijzigd."
},
"content.shared-instance.delete-button": {
"message": "Toch verwijderen"
},
"content.shared-instance.delete-many-button": {
"message": "{count, plural, one {# project} other {# projecten}} toch verwijderen"
},
"content.shared-instance.delete-single-body": {
"message": "Het verwijderen past alleen je lokale kopie aan. Bij toekomstige updates van de gedeelde instantie kan deze weer worden teruggezet of opnieuw worden gewijzigd."
},
"content.shared-instance.disable-bulk-body": {
"message": "Sommige geselecteerde projecten maken deel uit van de gedeelde instantie. Als je ze uitschakelt, heeft dit alleen gevolgen voor je lokale kopie; bij toekomstige updates van de gedeelde instantie kunnen ze opnieuw worden ingeschakeld, hersteld of gewijzigd."
},
"content.shared-instance.disable-button": {
"message": "Toch uitschakelen"
},
"content.shared-instance.disable-many-button": {
"message": "{count, plural, one {# project} other {# projecten}} toch uitschakelen"
},
"content.shared-instance.disable-single-body": {
"message": "Het uitschakelen heeft alleen gevolgen voor je lokale kopie. Bij toekomstige updates van de gedeelde instantie kan deze functie opnieuw worden ingeschakeld, hersteld of gewijzigd."
},
"content.shared-instance.unlink-body": {
"message": "Het ontkoppelen heeft alleen invloed op je lokale kopie. Bij toekomstige updates van de gedeelde instantie kan deze weer worden hersteld of opnieuw worden gewijzigd."
},
"content.shared-instance.warning-header": {
"message": "Dit maakt deel uit van de gedeelde instantie"
},
"friends.action.add-friend": {
"message": "Voeg een vriend toe"
},
@@ -753,7 +990,7 @@
"message": "Voer Modrinth gebruikersnaam in..."
},
"friends.add-friend.username.title": {
"message": "Wat is de Modrinth gebruikersnaam van jouw vriend?"
"message": "Wat is de Modrinth-gebruikersnaam van je vriend(in)?"
},
"friends.add-friends-to-share": {
"message": "<link>Voeg vrienden toe</link> om te zien wat zij spelen!"
@@ -795,7 +1032,49 @@
"message": "{title} - {count}"
},
"friends.sign-in-to-add-friends": {
"message": "<link>Log in op een Modrinth account</link> om vrienden toe te voegen en zien wat zij spelen!"
"message": "<link>Log in op een Modrinth-account</link> om vrienden toe te voegen en te zien wat zij spelen!"
},
"installation-settings.shared-instance.linked-title": {
"message": "Gekoppelde gedeelde instantie"
},
"installation-settings.shared-instance.title": {
"message": "Instantie terugtrekken"
},
"installation-settings.shared-instance.unlink-button": {
"message": "Gedeelde instantie ontkoppelen"
},
"installation-settings.shared-instance.unlink-description": {
"message": "Koppel deze lokale instantie los van toekomstige gedeelde updates."
},
"installation-settings.shared-instance.unlinking-button": {
"message": "Ontkoppelen..."
},
"installation-settings.shared-instance.unpublish-button": {
"message": "Gedeelde instantie terugtrekken"
},
"installation-settings.shared-instance.unpublish-description": {
"message": "Verwijder deze gedeelde instantie uit Modrinth en stuur geen updates meer naar gebruikers ervan. Je lokale instantie merkt hier geen gevolgen van."
},
"installation-settings.shared-instance.unpublishing-button": {
"message": "Terugtrekken..."
},
"installation-settings.unlink-shared-instance.modal.admonition-body": {
"message": "Dit heeft alleen gevolgen voor je lokale instantie. Je geïnstalleerde inhoud blijft op dit apparaat staan, en de gedeelde instantie en andere gebruikers ervan ondervinden hier geen hinder van."
},
"installation-settings.unlink-shared-instance.modal.admonition-header": {
"message": "Gedeelde instantie ontkoppelen"
},
"installation-settings.unlink-shared-instance.modal.header": {
"message": "Gedeelde instantie ontkoppelen"
},
"installation-settings.unpublish-shared-instance.modal.admonition-body": {
"message": "Hiermee wordt de gedeelde instantie van de servers van Modrinth verwijderd. Gebruikers die deze instantie in de Modrinth-app gebruiken, ontvangen geen updates meer, maar je lokale instantie en de inhoud daarvan blijven op dit apparaat staan."
},
"installation-settings.unpublish-shared-instance.modal.admonition-header": {
"message": "Gedeelde instantie terugtrekken"
},
"installation-settings.unpublish-shared-instance.modal.header": {
"message": "Gedeelde instantie terugtrekken"
},
"instance.action.create-shortcut": {
"message": "Snelkoppeling maken"
@@ -866,6 +1145,12 @@
"instance.files.save-as": {
"message": "Opslaan als..."
},
"instance.locked.delete-button": {
"message": "Instantie verwijderen"
},
"instance.locked.play-tooltip": {
"message": "Deze instantie is vergrendeld"
},
"instance.playtime.never-played": {
"message": "Nog nooit gespeeld"
},
@@ -1004,6 +1289,9 @@
"instance.settings.tabs.installation.loader-version": {
"message": "Versie {loader}"
},
"instance.settings.tabs.installation.locked": {
"message": "Installatie-instellingen zijn niet beschikbaar zolang deze instantie is vergrendeld."
},
"instance.settings.tabs.java": {
"message": "Java en geheugen"
},
@@ -1043,6 +1331,9 @@
"instance.settings.tabs.java.java-path-placeholder": {
"message": "//pad/naar/java"
},
"instance.settings.tabs.sharing": {
"message": "Delen"
},
"instance.settings.tabs.window": {
"message": "Venster"
},
@@ -1073,6 +1364,57 @@
"instance.settings.tabs.window.width.enter": {
"message": "Voer breedte in..."
},
"instance.shared-instance.error.title": {
"message": "Er is iets misgegaan"
},
"instance.shared-instance.owner-tooltip": {
"message": "De inhoud van deze instantie wordt gedeeld met andere gebruikers."
},
"instance.shared-instance.publish-review.added-label": {
"message": "Toegevoegd"
},
"instance.shared-instance.publish-review.admonition-header": {
"message": "Update naar spelers verzenden"
},
"instance.shared-instance.publish-review.config-title-v2": {
"message": "Configuratiebestanden selecteren"
},
"instance.shared-instance.publish-review.description": {
"message": "Bekijk de inhoudelijke wijzigingen en selecteer de configuratiebestanden die je in deze update wilt opnemen."
},
"instance.shared-instance.publish-review.header": {
"message": "Wijzigingen bekijken"
},
"instance.shared-instance.publish-review.publish-button": {
"message": "Update verzenden"
},
"instance.shared-instance.publish-review.removed-label": {
"message": "Verwijderd"
},
"instance.shared-instance.tooltip": {
"message": "De inhoud van deze instantie wordt door iemand anders beheerd."
},
"instance.shared-instance.unavailable.access-revoked-text": {
"message": "Je toegang tot de gedeelde instantie is ingetrokken. Deze instantie is nog steeds beschikbaar, maar is niet langer gekoppeld en ontvangt geen updates meer."
},
"instance.shared-instance.unavailable.deleted-text": {
"message": "De hoofdinstantie is verwijderd. Deze instantie is nog steeds beschikbaar, maar is niet meer gekoppeld en ontvangt geen updates meer."
},
"instance.shared-instance.unavailable.locked-text": {
"message": "Deze gedeelde instantie is vergrendeld door het inhoudsmoderatieteam. De instantie ontvangt geen updates meer van de hoofdinstantie en je kunt er niet meer in spelen."
},
"instance.shared-instance.unavailable.locked-title": {
"message": "Instantie vergrendeld"
},
"instance.shared-instance.unavailable.manager-fallback": {
"message": "de instantiebeheerder"
},
"instance.shared-instance.unavailable.text": {
"message": "Je lokale instantie is nog steeds beschikbaar, maar is niet langer gekoppeld en ontvangt geen updates meer."
},
"instance.shared-instance.unavailable.title": {
"message": "Gedeelde instantie niet meer beschikbaar"
},
"instance.worlds.a_minecraft_server": {
"message": "Een Minecraft server"
},
@@ -1125,7 +1467,7 @@
"message": "Minecraft account"
},
"minecraft-account.not-signed-in": {
"message": "Niet ingelogd"
"message": "Niet aangemeld"
},
"minecraft-account.remove-account": {
"message": "Verwijder account"
@@ -1134,7 +1476,7 @@
"message": "Selecteer account"
},
"minecraft-account.sign-in": {
"message": "Log in bij Minecraft"
"message": "Meld je aan bij Minecraft"
},
"minecraft-required.description": {
"message": "Je hebt een Microsoft-account nodig waarop Minecraft is geregistreerd voordat je het spel kunt starten en spelen."
@@ -1157,6 +1499,42 @@
"minecraft-required.sign-in": {
"message": "Aanmelden bij Microsoft"
},
"modal.modrinth-account-required.browser-description": {
"message": "Er is een nieuw tabblad geopend om je aan te melden. Log daar in en ga vervolgens terug naar de app."
},
"modal.modrinth-account-required.cancel-button": {
"message": "Annuleren"
},
"modal.modrinth-account-required.continue-in-browser-heading": {
"message": "Doorgaan in je browser"
},
"modal.modrinth-account-required.create-account-button": {
"message": "Een account aanmaken"
},
"modal.modrinth-account-required.description": {
"message": "Je moet je aanmelden bij je Modrinth-account voordat je deze functie kunt gebruiken."
},
"modal.modrinth-account-required.header": {
"message": "Account vereist"
},
"modal.modrinth-account-required.open-browser-again-button": {
"message": "Opnieuw de browser openen"
},
"modal.modrinth-account-required.sign-in-button": {
"message": "Bij Modrinth aanmelden"
},
"modal.modrinth-account-required.sign-in-heading": {
"message": "Meld je aan bij een Modrinth-account"
},
"modal.modrinth-account-required.signing-in-header": {
"message": "Aanmelden"
},
"modal.modrinth-account-required.support-prompt": {
"message": "Problemen bij het aanmelden? <support>Hulp krijgen</support>"
},
"modal.modrinth-account-required.waiting-for-browser": {
"message": "Wachten op bevestiging van de browser..."
},
"search.filter.locked.instance": {
"message": "Aangeboden door de instantie"
},
@@ -359,6 +359,12 @@
"app.instance.admonitions.shared-instance.review-admonition-header": {
"message": "Opublikuj aktualizację"
},
"app.instance.admonitions.shared-instance.review-header": {
"message": "Sprawdź zmiany"
},
"app.instance.admonitions.shared-instance.reviewing-button": {
"message": "Trwa przegląd..."
},
"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ść."
},
@@ -407,6 +413,69 @@
"app.instance.mods.successfully-uploaded": {
"message": "Przesyłanie zakończone sukcesem"
},
"app.instance.share.empty.heading": {
"message": "Nie zaproszono żadnych znajomych"
},
"app.instance.share.empty.invite-friends-button": {
"message": "Zaproś znajomych"
},
"app.instance.share.invite-modal.heading": {
"message": "Udostępnij {name}"
},
"app.instance.share.locked.empty-description-prefix": {
"message": "Musisz zalogować się jako"
},
"app.instance.share.locked.empty-description-suffix": {
"message": ", by mieć dostęp do tej strony."
},
"app.instance.share.locked.linked-account-fallback": {
"message": "połączone konto"
},
"app.instance.share.locked.signed-out-heading": {
"message": "Nie zalogowano"
},
"app.instance.share.locked.switch-account-button": {
"message": "Zmień konto"
},
"app.instance.share.locked.wrong-account-heading": {
"message": "Złe konto"
},
"app.instance.share.remove-user-modal.effect-access": {
"message": "Nie będzie w stanie otrzymywać aktualizacji dla tej udostępnionej instancji"
},
"app.instance.share.remove-user-modal.effects-label": {
"message": "Co się stanie?"
},
"app.instance.share.remove-user-modal.header": {
"message": "Odwołaj dostęp"
},
"app.instance.share.remove-user-modal.remove-button": {
"message": "Odwołaj dostęp"
},
"app.instance.share.remove-user-modal.user-avatar-alt": {
"message": "Awatar użytkownika {username}"
},
"app.instance.share.sign-in.button": {
"message": "Zaloguj się"
},
"app.instance.shared-instance-already-installed.install-anyway": {
"message": "Instaluj mimo to"
},
"app.instance.shared-instance-already-installed.instance": {
"message": "Instancja"
},
"app.instance.shared-instance-wrong-account.fallback-username": {
"message": "połączone konto"
},
"app.instance.shared-instance-wrong-account.sign-in-as-label": {
"message": "Zaloguj się jako"
},
"app.instance.shared-instance-wrong-account.signed-out-header": {
"message": "Musisz zalogować się na Modrinth"
},
"app.instance.shared-instance-wrong-account.user-admonition-body-v2": {
"message": ", by otrzymywać aktualizacje dla tej udostępnionej instancji."
},
"app.instance.worlds.add-server": {
"message": "Dodaj serwer"
},
@@ -458,6 +527,18 @@
"app.instance.worlds.search-worlds-placeholder": {
"message": "Szukaj wśród {count} światów..."
},
"app.modal.install-to-play.additional-context": {
"message": "Dodatkowy kontekst"
},
"app.modal.install-to-play.content-you-are-reporting": {
"message": "Instancja, którą zgłaszasz"
},
"app.modal.install-to-play.delete-instance": {
"message": "Usuń instancję"
},
"app.modal.install-to-play.external-files-dont-install": {
"message": "Nie instaluj"
},
"app.modal.install-to-play.header": {
"message": "Zainstaluj, aby grać"
},
@@ -473,6 +554,30 @@
"app.modal.install-to-play.mod-count": {
"message": "{count, plural, one {# mod} few {# mody} other {# modów}}"
},
"app.modal.install-to-play.report-image-invalid-type": {
"message": "Plik nie jest dozwolonym formatem zdjęcia"
},
"app.modal.install-to-play.report-image-too-large": {
"message": "Plik przekracza limit rozmiaru (1MiB)"
},
"app.modal.install-to-play.report-legal-claims": {
"message": "W przypadku powiadomień DMCA lub innych roszczeń prawnych zapoznaj się z naszą <copyright-link>Polityką dotyczącą praw autorskich</copyright-link>."
},
"app.modal.install-to-play.report-reason": {
"message": "Którą zasadę narusza ta instancja?"
},
"app.modal.install-to-play.report-reason.malicious": {
"message": "Złośliwe"
},
"app.modal.install-to-play.report-reason.spam": {
"message": "Spam"
},
"app.modal.install-to-play.report-shared-instance-header": {
"message": "Zgłoś udostępnioną instancję"
},
"app.modal.install-to-play.report-submitted": {
"message": "Zgłoszenie przesłane"
},
"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)."
},
@@ -497,6 +602,21 @@
"app.modal.update-to-play.removed": {
"message": "Usunięto"
},
"app.modal.update-to-play.shared-instance-added-label": {
"message": "Dodano"
},
"app.modal.update-to-play.shared-instance-removed-label": {
"message": "Usunięto"
},
"app.modal.update-to-play.shared-instance-unknown-files-description": {
"message": "Ta aktualizacja udostępnionej instancji zawiera pliki, które nie zostały opublikowane na Modrinth. Zalecamy instalowanie plików tylko z źródeł, którym ufasz."
},
"app.modal.update-to-play.update-required": {
"message": "Wymagana jest aktualizacja"
},
"app.modal.update-to-play.update-required-description": {
"message": "Aktualizacja jest wymagana, by grać w {name}. Zaktualizuj do najnowszej wersji, aby uruchomić grę."
},
"app.project.install-button.already-installed": {
"message": "Ten projekt jest już zainstalowany"
},
@@ -752,6 +872,21 @@
"app.world.world-item.players-online": {
"message": "{count} online"
},
"content.shared-instance.delete-button": {
"message": "Usuń mimo to"
},
"content.shared-instance.delete-many-button": {
"message": "Usuń {count, number} projekty/ów mimo to"
},
"content.shared-instance.disable-button": {
"message": "Wyłącz mimo to"
},
"content.shared-instance.disable-many-button": {
"message": "Wyłącz {count, number} projekty/ów mimo to"
},
"content.shared-instance.warning-header": {
"message": "Jest to część udostępnionej instancji"
},
"friends.action.add-friend": {
"message": "Dodaj znajomego"
},
@@ -815,6 +950,9 @@
"friends.sign-in-to-add-friends": {
"message": "<link>Zaloguj się na konto Modrinth</link> by dodać znajomych i widzieć, w co grają!"
},
"installation-settings.shared-instance.linked-title": {
"message": "Powiązana udostępniona instancja"
},
"instance.action.create-shortcut": {
"message": "Utwórz skrót"
},
@@ -1061,6 +1199,9 @@
"instance.settings.tabs.java.java-path-placeholder": {
"message": "/path/to/java"
},
"instance.settings.tabs.sharing": {
"message": "Udostępnianie"
},
"instance.settings.tabs.window": {
"message": "Okno"
},
@@ -1091,12 +1232,57 @@
"instance.settings.tabs.window.width.enter": {
"message": "Wprowadź szerokość..."
},
"instance.shared-instance.error.title": {
"message": "Coś poszło nie tak"
},
"instance.shared-instance.owner-tooltip": {
"message": "Zawartość tej instancji jest udostępniana dla innych użytkowników."
},
"instance.shared-instance.publish-review.added-label": {
"message": "Dodano"
},
"instance.shared-instance.publish-review.admonition-header": {
"message": "Opublikuj aktualizację graczom"
},
"instance.shared-instance.publish-review.config-title-v2": {
"message": "Wybierz pliki konfiguracji"
},
"instance.shared-instance.publish-review.description": {
"message": "Sprawdź zmiany zawartości i wybierz pliki konfiguracji, które mają być zawarte w tej aktualizacji."
},
"instance.shared-instance.publish-review.header": {
"message": "Sprawdź zmiany"
},
"instance.shared-instance.publish-review.publish-button": {
"message": "Opublikuj aktualizację"
},
"instance.shared-instance.publish-review.removed-label": {
"message": "Usunięto"
},
"instance.shared-instance.tooltip": {
"message": "Zawartość tej instancji jest zarządzana przez kogoś innego."
},
"instance.shared-instance.unavailable.access-revoked-text": {
"message": "Twój dostęp do udostępnionej instancji został odwołany. Instancja jest nadal dostępna, ale nie jest już połączona i nie będzie otrzymywać aktualizacji."
},
"instance.shared-instance.unavailable.deleted-text": {
"message": "Instancja źródłowa została usunięta. Instancja jest nadal dostępna, ale nie jest już połączona i nie będzie otrzymywać aktualizacji."
},
"instance.shared-instance.unavailable.locked-text": {
"message": "Ta udostępniona instancja została zablokowana przez zespół moderacyjny Modrinth. Nie będzie otrzymywać dalszych aktualizacji z instancji źródłowej."
},
"instance.shared-instance.unavailable.locked-title": {
"message": "Instancja zablokowana"
},
"instance.shared-instance.unavailable.manager-fallback": {
"message": "zarządcę instancji"
},
"instance.shared-instance.unavailable.text": {
"message": "Twoja lokalna instancja jest nadal dostępna, ale nie jest już połączona i nie będzie otrzymywać aktualizacji."
},
"instance.shared-instance.unavailable.title": {
"message": "Udostępniona instancja nie jest już dostępna"
},
"instance.worlds.a_minecraft_server": {
"message": "Serwer Minecraft"
},
@@ -1181,6 +1367,27 @@
"minecraft-required.sign-in": {
"message": "Zaloguj się do Microsoft"
},
"modal.modrinth-account-required.cancel-button": {
"message": "Anuluj"
},
"modal.modrinth-account-required.continue-in-browser-heading": {
"message": "Kontynuuj w przeglądarce"
},
"modal.modrinth-account-required.create-account-button": {
"message": "Utwórz konto"
},
"modal.modrinth-account-required.header": {
"message": "Konto wymagane"
},
"modal.modrinth-account-required.open-browser-again-button": {
"message": "Otwórz ponownie przeglądarkę"
},
"modal.modrinth-account-required.sign-in-button": {
"message": "Zaloguj się na Modrinth"
},
"modal.modrinth-account-required.sign-in-heading": {
"message": "Zaloguj się na konto Modrinth"
},
"search.filter.locked.instance": {
"message": "Podane przez instancję"
},
+381 -3
View File
@@ -89,6 +89,9 @@
"app.action-bar.install.unknown-instance": {
"message": "Instância desconhecida"
},
"app.action-bar.install.updating-shared-content": {
"message": "Atualizando conteúdo compartilhado"
},
"app.action-bar.installs": {
"message": "Instalações"
},
@@ -201,7 +204,7 @@
"message": "Pula automaticamente as confirmações desnecessárias como duplica de instalação de pacotes de mods, exclusão de conteúdo normal, atualizações em massa, desvinculo de pacotes de mods e diálogos de reparo. Os avisos de perigo ainda serão exibidos."
},
"app.appearance-settings.skip-non-essential-warnings.title": {
"message": "Pular avisos desnecessários"
"message": "Ignorar avisos desnecessários"
},
"app.appearance-settings.toggle-sidebar.description": {
"message": "Permite alternar a barra lateral."
@@ -338,6 +341,36 @@
"app.install.phase.running_loader_processors": {
"message": "Executando processadores de loader"
},
"app.instance.admonitions.shared-instance.added-label": {
"message": "Adicionado"
},
"app.instance.admonitions.shared-instance.changes-body": {
"message": "Sua instância local é além dos usuários que você a compartilhou."
},
"app.instance.admonitions.shared-instance.changes-header": {
"message": "Suas alterações ainda não foram compartilhadas"
},
"app.instance.admonitions.shared-instance.publish-button": {
"message": "Atualização de publicação"
},
"app.instance.admonitions.shared-instance.publishing-button": {
"message": "Publicando..."
},
"app.instance.admonitions.shared-instance.removed-label": {
"message": "Removido"
},
"app.instance.admonitions.shared-instance.review-admonition-header": {
"message": "Atualização de publicação"
},
"app.instance.admonitions.shared-instance.review-description": {
"message": "Revise as alterações de conteúdo que serão compartilhadas com todos os usuários desta instância."
},
"app.instance.admonitions.shared-instance.review-header": {
"message": "Revisar alterações"
},
"app.instance.admonitions.shared-instance.reviewing-button": {
"message": "Revisando..."
},
"app.instance.confirm-delete.admonition-body": {
"message": "Todos os dados para sua instância serão excluídos permanentemente, incluindo seus mundos, configs e todo o conteúdo instalado."
},
@@ -374,6 +407,9 @@
"app.instance.mods.content-type-project": {
"message": "projeto"
},
"app.instance.mods.locked-content": {
"message": "O conteúdo em instâncias privadas não podem ser alterados."
},
"app.instance.mods.project-was-added": {
"message": "\"{name}\" foi adicionado"
},
@@ -389,6 +425,102 @@
"app.instance.mods.successfully-uploaded": {
"message": "Adicionado com sucesso"
},
"app.instance.share.empty.description": {
"message": "Você pode compartilhar esta instância com seus amigos!"
},
"app.instance.share.empty.heading": {
"message": "Nenhum amigo convidado"
},
"app.instance.share.empty.invite-friends-button": {
"message": "Convidar amigos"
},
"app.instance.share.invite-modal.heading": {
"message": "Compartilhar {name}"
},
"app.instance.share.locked.empty-description-prefix": {
"message": "Você precisa iniciar sessão como"
},
"app.instance.share.locked.empty-description-suffix": {
"message": "para acessar essa página."
},
"app.instance.share.locked.linked-account-fallback": {
"message": "a conta vinculada"
},
"app.instance.share.locked.signed-out-heading": {
"message": "Não conectado"
},
"app.instance.share.locked.switch-account-button": {
"message": "Trocar de conta"
},
"app.instance.share.locked.wrong-account-heading": {
"message": "Conta errada"
},
"app.instance.share.remove-user-modal.effect-access": {
"message": "Eles não receberão mais atualizações para esta instância compartilhada"
},
"app.instance.share.remove-user-modal.effect-installed-copy": {
"message": "Qualquer cópia que eles já instalaram ainda permanecerão no dispositivo deles"
},
"app.instance.share.remove-user-modal.effect-invite-again": {
"message": "Você pode convidá-los novamente depois"
},
"app.instance.share.remove-user-modal.effect-last-user": {
"message": "Este é o último usuário, o compartilhamento será desativado para esta instância"
},
"app.instance.share.remove-user-modal.effects-label": {
"message": "O que acontece?"
},
"app.instance.share.remove-user-modal.header": {
"message": "Revogar acesso"
},
"app.instance.share.remove-user-modal.remove-button": {
"message": "Revogar acesso"
},
"app.instance.share.remove-user-modal.user-avatar-alt": {
"message": "Avatar de {username}"
},
"app.instance.share.remove-user-modal.warning-body": {
"message": "Se você revogar o acesso de {username} a esta instância compartilhada, você precisará convidá-los de novo antes que possam receber atualizações."
},
"app.instance.share.sign-in.button": {
"message": "Iniciar sessão"
},
"app.instance.share.unlink.body": {
"message": "Você precisa desvincular este pacote de mods para compartilhar sua instância"
},
"app.instance.share.unlink.header": {
"message": "Para compartilhar requer desvincular"
},
"app.instance.shared-instance-already-installed.body": {
"message": "Esta instância compartilhada já foi instalada como <bold>{instanceName}</bold>. Deseja mesmo instalar outra cópia?"
},
"app.instance.shared-instance-already-installed.header": {
"message": "Instância compartilhada já instalada"
},
"app.instance.shared-instance-already-installed.install-anyway": {
"message": "Instalar mesmo assim"
},
"app.instance.shared-instance-already-installed.instance": {
"message": "Instância"
},
"app.instance.shared-instance-wrong-account.fallback-username": {
"message": "a conta vinculada"
},
"app.instance.shared-instance-wrong-account.owner-admonition-body-v2": {
"message": "para gerenciar esta instância compartilhada. Você não conseguirá mais publicar atualizações para os usuários."
},
"app.instance.shared-instance-wrong-account.sign-in-as-label": {
"message": "Iniciar sessão como"
},
"app.instance.shared-instance-wrong-account.signed-out-header": {
"message": "Você precisa iniciar sessão no Modrinth"
},
"app.instance.shared-instance-wrong-account.user-admonition-body-v2": {
"message": "para receber atualizações desta instância compartilhada."
},
"app.instance.shared-instance-wrong-account.warning-header": {
"message": "Você está usando a conta errada do Modrinth"
},
"app.instance.worlds.add-server": {
"message": "Adicionar servidor"
},
@@ -440,6 +572,21 @@
"app.instance.worlds.search-worlds-placeholder": {
"message": "Buscar {count} mundos..."
},
"app.modal.install-to-play.additional-context": {
"message": "Contexto adicional"
},
"app.modal.install-to-play.additional-context-placeholder": {
"message": "Incluir links e imagens se possível e relevante"
},
"app.modal.install-to-play.content-you-are-reporting": {
"message": "Instância que está denunciando"
},
"app.modal.install-to-play.delete-instance": {
"message": "Excluir instância"
},
"app.modal.install-to-play.external-files-dont-install": {
"message": "Não instalar"
},
"app.modal.install-to-play.header": {
"message": "Instale para jogar"
},
@@ -455,12 +602,51 @@
"app.modal.install-to-play.mod-count": {
"message": "{count, plural, =0 {Nenhum mod} one {# mod} other {# mods}}"
},
"app.modal.install-to-play.report-description": {
"message": "Use este formulário para denunciar casos que talvez violem nossas <rules-link>Regras</rules-link> ou <terms-link>Termos de Uso</terms-link>."
},
"app.modal.install-to-play.report-image-invalid-type": {
"message": "O arquivo não é um tipo de imagem suportado"
},
"app.modal.install-to-play.report-image-too-large": {
"message": "O arquivo excede o limite de tamanho de 1 MiB"
},
"app.modal.install-to-play.report-legal-claims": {
"message": "Para avisos DMCA ou outras reivindicações legais, veja nossa <copyright-link>Política de Copyright</copyright-link>."
},
"app.modal.install-to-play.report-reason": {
"message": "Qual regra esta instância viola?"
},
"app.modal.install-to-play.report-reason.inappropriate": {
"message": "Inapropriado"
},
"app.modal.install-to-play.report-reason.malicious": {
"message": "Malicioso"
},
"app.modal.install-to-play.report-reason.spam": {
"message": "Spam"
},
"app.modal.install-to-play.report-shared-instance-header": {
"message": "Denunciar instância compartilhada"
},
"app.modal.install-to-play.report-submitted": {
"message": "Denúncia enviada"
},
"app.modal.install-to-play.report-support-and-bugs": {
"message": "Para solicitações de suporte, entre em contato com nossa <support-link>equipe de suporte</support-link>. Para informar erros, abra uma <github-link>discussão no GitHub</github-link>."
},
"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.shared-instance": {
"message": "Instância compartilhada"
},
"app.modal.install-to-play.shared-instance-content": {
"message": "Conteúdo de instância compartilhado"
},
"app.modal.install-to-play.shared-instance-unknown-files-description": {
"message": "Esta instância compartilhada contém arquivos não publicados no Modrinth. Recomendamos fortemente a instalar somente arquivos de fontes que você confia."
},
"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."
},
@@ -479,6 +665,24 @@
"app.modal.update-to-play.removed": {
"message": "Removido"
},
"app.modal.update-to-play.server-modpack-unknown-files-description": {
"message": "Esta atualização do pacote de mods do servidor contém arquivos que não estão publicados no Modrinth. Recomendamos fortemente a apenas instalar arquivos de fontes que você confia."
},
"app.modal.update-to-play.shared-instance-added-label": {
"message": "Adicionado"
},
"app.modal.update-to-play.shared-instance-removed-label": {
"message": "Removido"
},
"app.modal.update-to-play.shared-instance-unknown-files-description": {
"message": "Esta atualização de instância compartilhada contém arquivos não publicados no Modrinth. Recomendamos fortemente a instalar apenas de fontes que você confia."
},
"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."
},
"app.project.install-button.already-installed": {
"message": "Este projeto já foi instalado"
},
@@ -579,7 +783,7 @@
"message": "Capas"
},
"app.skins.modal.edit-title": {
"message": "Editando a skin"
"message": "Editando skin"
},
"app.skins.modal.make-edit-first-tooltip": {
"message": "Primeiramente, faça uma edição na skin!"
@@ -624,7 +828,7 @@
"message": "Falhou ao reordenar skins"
},
"app.skins.section.builders-and-biomes": {
"message": "Construtores & Biomas"
"message": "Builders & Biomes"
},
"app.skins.section.chaos-cubed": {
"message": "Chaos Cubed"
@@ -734,6 +938,39 @@
"app.world.world-item.players-online": {
"message": "{count} ativo(s)"
},
"content.shared-instance.change-version-body": {
"message": "Alterar a versão modifica apenas a sua cópia local. Atualizações futuras da instância compartilhada podem restaurá-la ou alterá-la novamente."
},
"content.shared-instance.delete-bulk-body": {
"message": "Alguns dos projetos selecionados fazem parte da instância compartilhada. Excluí-los altera apenas sua cópia local, e futuras atualizações da instância compartilhada podem restaurá-los ou alterá-los novamente."
},
"content.shared-instance.delete-button": {
"message": "Excluir mesmo assim"
},
"content.shared-instance.delete-many-button": {
"message": "Excluir {count, plural, one {# projeto} other {# projetos}} mesmo assim"
},
"content.shared-instance.delete-single-body": {
"message": "Excluir altera apenas a sua cópia local. Atualizações futuras da instância compartilhada podem restaurá-la ou alterá-la novamente."
},
"content.shared-instance.disable-bulk-body": {
"message": "Alguns projetos selecionados fazem parte da instância compartilhada. Desativá-los afeta apenas sua cópia local, e futuras atualizações da instância compartilhada podem reativá-los, restaurá-los ou alterá-los novamente."
},
"content.shared-instance.disable-button": {
"message": "Desativar mesmo assim"
},
"content.shared-instance.disable-many-button": {
"message": "Desative {count, plural, one {# projeto} other {# projetos}} mesmo assim"
},
"content.shared-instance.disable-single-body": {
"message": "Desativá-lo altera apenas a sua cópia local. Atualizações futuras da instância compartilhada podem reativá-lo, restaurá-lo ou alterá-lo novamente."
},
"content.shared-instance.unlink-body": {
"message": "Desvincular altera apenas a sua cópia local. Atualizações futuras da instância compartilhada podem restaurá-la ou alterá-la novamente."
},
"content.shared-instance.warning-header": {
"message": "Isto faz parte da instância compartilhada"
},
"friends.action.add-friend": {
"message": "Adicionar amigo"
},
@@ -797,6 +1034,48 @@
"friends.sign-in-to-add-friends": {
"message": "<link>Inicie uma sessão com o Modrinth</link> para adicionar amigos e ver o que eles estão jogando!"
},
"installation-settings.shared-instance.linked-title": {
"message": "Instância compartilhada vinculada"
},
"installation-settings.shared-instance.title": {
"message": "Remover instância"
},
"installation-settings.shared-instance.unlink-button": {
"message": "Desvincular instância compartilhada"
},
"installation-settings.shared-instance.unlink-description": {
"message": "Desconecte esta instância local de futuras atualizações compartilhadas."
},
"installation-settings.shared-instance.unlinking-button": {
"message": "Desvinculando..."
},
"installation-settings.shared-instance.unpublish-button": {
"message": "Remover instância compartilhada"
},
"installation-settings.shared-instance.unpublish-description": {
"message": "Remova esta instância compartilhada do Modrinth e pare de enviar atualizações para todos que a utilizam. Sua instância local não será afetada."
},
"installation-settings.shared-instance.unpublishing-button": {
"message": "Removendo..."
},
"installation-settings.unlink-shared-instance.modal.admonition-body": {
"message": "Isso afeta apenas a sua instância local. O conteúdo instalado permanecerá neste dispositivo, e a instância compartilhada e outras pessoas que a utilizam não serão afetadas."
},
"installation-settings.unlink-shared-instance.modal.admonition-header": {
"message": "Desvinculando instância compartilhada"
},
"installation-settings.unlink-shared-instance.modal.header": {
"message": "Desvincular instância compartilhada"
},
"installation-settings.unpublish-shared-instance.modal.admonition-body": {
"message": "Isso excluirá a instância compartilhada dos servidores do Modrinth. As pessoas usando-o no Modrinth App não receberá mais atualizações, mas sua instância local e seu conteúdo ainda permanecerá no dispositivo."
},
"installation-settings.unpublish-shared-instance.modal.admonition-header": {
"message": "Removendo instância compartilhada"
},
"installation-settings.unpublish-shared-instance.modal.header": {
"message": "Remover instância compartilhada"
},
"instance.action.create-shortcut": {
"message": "Criar atalho"
},
@@ -866,6 +1145,12 @@
"instance.files.save-as": {
"message": "Salvar como..."
},
"instance.locked.delete-button": {
"message": "Excluir instância"
},
"instance.locked.play-tooltip": {
"message": "Esta instância foi privada"
},
"instance.playtime.never-played": {
"message": "Nunca jogou"
},
@@ -1004,6 +1289,9 @@
"instance.settings.tabs.installation.loader-version": {
"message": "Versão {loader}"
},
"instance.settings.tabs.installation.locked": {
"message": "As opções de instalação estarão indisponíveis enquanto esta instância estiver privada."
},
"instance.settings.tabs.java": {
"message": "Java e memória"
},
@@ -1043,6 +1331,9 @@
"instance.settings.tabs.java.java-path-placeholder": {
"message": "/caminho/ao/java"
},
"instance.settings.tabs.sharing": {
"message": "Compartilhamento"
},
"instance.settings.tabs.window": {
"message": "Janela"
},
@@ -1073,6 +1364,57 @@
"instance.settings.tabs.window.width.enter": {
"message": "Insira a largura..."
},
"instance.shared-instance.error.title": {
"message": "Algo deu errado"
},
"instance.shared-instance.owner-tooltip": {
"message": "O conteúdo desta instância está sendo compartilhado com outros usuários."
},
"instance.shared-instance.publish-review.added-label": {
"message": "Adicionado"
},
"instance.shared-instance.publish-review.admonition-header": {
"message": "Enviar atualização aos jogadores"
},
"instance.shared-instance.publish-review.config-title-v2": {
"message": "Selecione os arquivos de configuração"
},
"instance.shared-instance.publish-review.description": {
"message": "Revise as alterações de conteúdo e selecione os arquivos de configuração que deseja incluir nesta atualização."
},
"instance.shared-instance.publish-review.header": {
"message": "Revisar alterações"
},
"instance.shared-instance.publish-review.publish-button": {
"message": "Atualização de publicação"
},
"instance.shared-instance.publish-review.removed-label": {
"message": "Removido"
},
"instance.shared-instance.tooltip": {
"message": "O conteúdo desta instância está sendo gerenciado por outra pessoa."
},
"instance.shared-instance.unavailable.access-revoked-text": {
"message": "Seu acesso a esta instância compartilhada foi revogado. Ela ainda está disponível, mas não está mais vinculada e não receberá mais atualizações."
},
"instance.shared-instance.unavailable.deleted-text": {
"message": "A instância principal foi excluída. Esta instância ainda está disponível, mas não está mais vinculada e não receberá mais atualizações."
},
"instance.shared-instance.unavailable.locked-text": {
"message": "Esta instância compartilhada foi bloqueada pela equipe de Moderação de Conteúdo. Ela não receberá mais atualizações da instância principal e não poderá ser jogada."
},
"instance.shared-instance.unavailable.locked-title": {
"message": "Instância bloqueada"
},
"instance.shared-instance.unavailable.manager-fallback": {
"message": "o gerenciador de instâncias"
},
"instance.shared-instance.unavailable.text": {
"message": "Sua instância local ainda está disponível, mas não está mais vinculada e não receberá atualizações."
},
"instance.shared-instance.unavailable.title": {
"message": "A instância compartilhada não está mais disponível"
},
"instance.worlds.a_minecraft_server": {
"message": "Servidor de Minecraft"
},
@@ -1157,6 +1499,42 @@
"minecraft-required.sign-in": {
"message": "Entrar na Microsoft"
},
"modal.modrinth-account-required.browser-description": {
"message": "Uma nova aba foi aberta para iniciar sessão. Conclua lá, então volte ao aplicativo."
},
"modal.modrinth-account-required.cancel-button": {
"message": "Cancelar"
},
"modal.modrinth-account-required.continue-in-browser-heading": {
"message": "Continuar em seu navegador"
},
"modal.modrinth-account-required.create-account-button": {
"message": "Criar uma conta"
},
"modal.modrinth-account-required.description": {
"message": "Você precisa iniciar sessão na sua conta do Modrinth antes de usar este recurso."
},
"modal.modrinth-account-required.header": {
"message": "Conta necessária"
},
"modal.modrinth-account-required.open-browser-again-button": {
"message": "Abra o navegador novamente"
},
"modal.modrinth-account-required.sign-in-button": {
"message": "Entrar no Modrinth"
},
"modal.modrinth-account-required.sign-in-heading": {
"message": "Iniciar sessão em uma conta do Modrinth"
},
"modal.modrinth-account-required.signing-in-header": {
"message": "Iniciando sessão"
},
"modal.modrinth-account-required.support-prompt": {
"message": "Enfrentando problemas ao iniciar sessão? <support>Obtenha suporte</support>"
},
"modal.modrinth-account-required.waiting-for-browser": {
"message": "Aguardando confirmação do navegador..."
},
"search.filter.locked.instance": {
"message": "Fornecido pela instância"
},
+148 -7
View File
@@ -89,6 +89,9 @@
"app.action-bar.install.unknown-instance": {
"message": "Неизвестная сборка"
},
"app.action-bar.install.updating-shared-content": {
"message": "Обновление совместного контента"
},
"app.action-bar.installs": {
"message": "Установки"
},
@@ -338,6 +341,27 @@
"app.install.phase.running_loader_processors": {
"message": "Запуск процессоров загрузчика"
},
"app.instance.admonitions.shared-instance.added-label": {
"message": "Добавлен"
},
"app.instance.admonitions.shared-instance.changes-body": {
"message": "Локальная сборка опережает версию других участников."
},
"app.instance.admonitions.shared-instance.changes-header": {
"message": "Изменения не отправлены"
},
"app.instance.admonitions.shared-instance.publish-button": {
"message": "Отправить изменения"
},
"app.instance.admonitions.shared-instance.publishing-button": {
"message": "Отправка..."
},
"app.instance.admonitions.shared-instance.removed-label": {
"message": "Удалён"
},
"app.instance.admonitions.shared-instance.review-admonition-header": {
"message": "Отправка изменений"
},
"app.instance.admonitions.shared-instance.review-header": {
"message": "Проверьте изменения"
},
@@ -380,6 +404,9 @@
"app.instance.mods.content-type-project": {
"message": "проект"
},
"app.instance.mods.locked-content": {
"message": "Содержимое заблокированных экземпляров нельзя изменить."
},
"app.instance.mods.project-was-added": {
"message": "«{name}» добавлен"
},
@@ -392,12 +419,30 @@
"app.instance.mods.successfully-uploaded": {
"message": "Успешно загружено"
},
"app.instance.share.empty.description": {
"message": "Поделитесь сборкой со своими друзьями!"
},
"app.instance.share.empty.heading": {
"message": "Друзья не приглашены"
"message": "Нет приглашённых друзей"
},
"app.instance.share.empty.invite-friends-button": {
"message": "Пригласить друзей"
},
"app.instance.share.invite-modal.heading": {
"message": "Доступ к {name}"
},
"app.instance.share.locked.empty-description-prefix": {
"message": "Необходимо войти как"
},
"app.instance.share.locked.empty-description-suffix": {
"message": "для доступа к этой странице."
},
"app.instance.share.locked.linked-account-fallback": {
"message": "связанный аккаунт"
},
"app.instance.share.locked.signed-out-heading": {
"message": "Вход не выполнен"
},
"app.instance.share.locked.switch-account-button": {
"message": "Сменить аккаунт"
},
@@ -419,6 +464,12 @@
"app.instance.share.sign-in.button": {
"message": "Войти"
},
"app.instance.shared-instance-already-installed.header": {
"message": "Сборка уже установлена"
},
"app.instance.shared-instance-already-installed.install-anyway": {
"message": "Всё равно установить"
},
"app.instance.shared-instance-already-installed.instance": {
"message": "Сборка"
},
@@ -444,7 +495,7 @@
"message": "Удаление мира"
},
"app.instance.worlds.delete-world-modal.warning-body": {
"message": "Этот мир будет удалён навсегда из этой сборки. Отменить это действие нельзя."
"message": "Этот мир будет удалён навсегда из этой сборки. Это действие необратимо."
},
"app.instance.worlds.delete-world-modal.warning-header": {
"message": "Удаление {name}"
@@ -479,6 +530,12 @@
"app.instance.worlds.remove-server-modal.warning-header": {
"message": "Удаление {name}"
},
"app.modal.install-to-play.additional-context": {
"message": "Дополнительный контекст"
},
"app.modal.install-to-play.additional-context-placeholder": {
"message": "При желании прикрепите ссылки и изображения"
},
"app.modal.install-to-play.delete-instance": {
"message": "Удалить сборку"
},
@@ -500,15 +557,39 @@
"app.modal.install-to-play.mod-count": {
"message": "{count, plural, one {# мод} few {# мода} other {# модов}}"
},
"app.modal.install-to-play.report-description": {
"message": "Используйте эту форму, чтобы отправить жалобу на сборки, которые могут нарушать наши <rules-link>Правила</rules-link> или <terms-link>Условия использования</terms-link>."
},
"app.modal.install-to-play.report-image-too-large": {
"message": "Размер файла превышает лимит в 1 МиБ"
},
"app.modal.install-to-play.report-reason": {
"message": "Какое правило нарушает данная сборка?"
},
"app.modal.install-to-play.report-reason.inappropriate": {
"message": "Неприемлемое содержимое"
},
"app.modal.install-to-play.report-reason.malicious": {
"message": "Вредоносное содержимое"
},
"app.modal.install-to-play.report-reason.spam": {
"message": "Спам"
},
"app.modal.install-to-play.report-submitted": {
"message": "Жалоба отправлена"
},
"app.modal.install-to-play.reviewed-files": {
"message": "Файл проверяется только если он опубликован на Modrinth, независимо от его формата (включая .mrpack)."
},
"app.modal.install-to-play.shared-instance": {
"message": "Сборка"
},
"app.modal.install-to-play.shared-instance-content": {
"message": "Контент"
},
"app.modal.install-to-play.shared-instance-unknown-files-description": {
"message": "Сборка содержит файлы, которые не опубликованы на Modrinth. Рекомендуется скачивать файлы только из надёжных источников."
},
"app.modal.install-to-play.unknown-files-description": {
"message": "Сборка этого сервера содержит файлы, которые не опубликованы на Modrinth. Рекомендуется скачивать файлы только из надёжных источников."
},
@@ -527,6 +608,15 @@
"app.modal.update-to-play.removed": {
"message": "Удалён"
},
"app.modal.update-to-play.server-modpack-unknown-files-description": {
"message": "Обновление сборки этого сервера содержит файлы, которые не опубликованы на Modrinth. Рекомендуется скачивать файлы только из надёжных источников."
},
"app.modal.update-to-play.shared-instance-added-label": {
"message": "Добавлен"
},
"app.modal.update-to-play.shared-instance-removed-label": {
"message": "Удалён"
},
"app.modal.update-to-play.update-required": {
"message": "Требуется обновление"
},
@@ -797,6 +887,12 @@
"content.shared-instance.disable-button": {
"message": "Всё равно отключить"
},
"content.shared-instance.disable-many-button": {
"message": "Всё равно отключить {count, plural, one {# проект} few {# проекта} other {# проектов}}"
},
"content.shared-instance.warning-header": {
"message": "Это часть сборки"
},
"friends.action.add-friend": {
"message": "Добавить в друзья"
},
@@ -860,6 +956,21 @@
"friends.sign-in-to-add-friends": {
"message": "<link>Войдите в аккаунт Modrinth</link>, чтобы добавлять друзей и следить за ними!"
},
"installation-settings.shared-instance.linked-title": {
"message": "Связанная сборка"
},
"installation-settings.shared-instance.unlink-button": {
"message": "Отвязать сборку"
},
"installation-settings.shared-instance.unlinking-button": {
"message": "Отвязка..."
},
"installation-settings.unlink-shared-instance.modal.admonition-header": {
"message": "Отвязка сборки"
},
"installation-settings.unlink-shared-instance.modal.header": {
"message": "Отвязка сборки"
},
"instance.action.create-shortcut": {
"message": "Создать ярлык"
},
@@ -1106,6 +1217,9 @@
"instance.settings.tabs.java.java-path-placeholder": {
"message": "/путь/к/java"
},
"instance.settings.tabs.sharing": {
"message": "Доступ"
},
"instance.settings.tabs.window": {
"message": "Окно"
},
@@ -1136,12 +1250,30 @@
"instance.settings.tabs.window.width.enter": {
"message": "Введите ширину..."
},
"instance.shared-instance.error.title": {
"message": "Произошла ошибка"
},
"instance.shared-instance.publish-review.added-label": {
"message": "Добавлен"
},
"instance.shared-instance.publish-review.admonition-header": {
"message": "Отправка изменений игрокам"
},
"instance.shared-instance.publish-review.config-title-v2": {
"message": "Выберите файлы настройки"
},
"instance.shared-instance.publish-review.header": {
"message": "Проверьте изменения"
},
"instance.shared-instance.publish-review.publish-button": {
"message": "Отправить изменения"
},
"instance.shared-instance.publish-review.removed-label": {
"message": "Удалён"
},
"instance.shared-instance.unavailable.locked-title": {
"message": "Сборка заблокирована"
},
"instance.worlds.a_minecraft_server": {
"message": "Сервер Minecraft"
},
@@ -1188,19 +1320,19 @@
"message": "Мир используется"
},
"minecraft-account.add-account": {
"message": "Добавить"
"message": "Добавить аккаунт"
},
"minecraft-account.label": {
"message": "Учётная запись Minecraft"
"message": "Аккаунт Minecraft"
},
"minecraft-account.not-signed-in": {
"message": "Вход не выполнен"
},
"minecraft-account.remove-account": {
"message": "Удалить"
"message": "Удалить аккаунт"
},
"minecraft-account.select-account": {
"message": "Выберите профиль"
"message": "Выберите аккаунт"
},
"minecraft-account.sign-in": {
"message": "Войти в Minecraft"
@@ -1226,8 +1358,11 @@
"minecraft-required.sign-in": {
"message": "Войти в Microsoft"
},
"modal.modrinth-account-required.browser-description": {
"message": "Открылась вкладка для входа. Завершение вход и вернитесь в приложение."
},
"modal.modrinth-account-required.cancel-button": {
"message": "Отменить"
"message": "Отмена"
},
"modal.modrinth-account-required.continue-in-browser-heading": {
"message": "Продолжите в браузере"
@@ -1235,9 +1370,15 @@
"modal.modrinth-account-required.create-account-button": {
"message": "Создать аккаунт"
},
"modal.modrinth-account-required.description": {
"message": "Войдите в аккаунт Modrinth, чтобы использовать эту функцию."
},
"modal.modrinth-account-required.header": {
"message": "Требуется аккаунт"
},
"modal.modrinth-account-required.open-browser-again-button": {
"message": "Открыть браузер снова"
},
"modal.modrinth-account-required.sign-in-button": {
"message": "Войти в Modrinth"
},
+165 -3
View File
@@ -71,6 +71,9 @@
"app.action-bar.install.unknown-instance": {
"message": "Okänd instans"
},
"app.action-bar.install.updating-shared-content": {
"message": "Uppdaterar delat innehåll"
},
"app.action-bar.installs": {
"message": "Installationer"
},
@@ -320,6 +323,12 @@
"app.install.phase.running_loader_processors": {
"message": "Kör loader-processorer"
},
"app.instance.admonitions.shared-instance.added-label": {
"message": "Tillagd"
},
"app.instance.admonitions.shared-instance.removed-label": {
"message": "Borttagen"
},
"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."
},
@@ -371,6 +380,90 @@
"app.instance.mods.successfully-uploaded": {
"message": "Uppladdning lyckades"
},
"app.instance.share.empty.description": {
"message": "Du kan dela denna instansen med dina vänner!"
},
"app.instance.share.empty.heading": {
"message": "Inga inbjudna vänner"
},
"app.instance.share.empty.invite-friends-button": {
"message": "Bjud in vänner"
},
"app.instance.share.invite-modal.heading": {
"message": "Dela {name}"
},
"app.instance.share.locked.empty-description-prefix": {
"message": "Du behöver logga in som"
},
"app.instance.share.locked.empty-description-suffix": {
"message": "för att komma åt denna sida."
},
"app.instance.share.locked.linked-account-fallback": {
"message": "det länkade kontot"
},
"app.instance.share.locked.signed-out-heading": {
"message": "Inte inloggad"
},
"app.instance.share.locked.switch-account-button": {
"message": "Byt konto"
},
"app.instance.share.locked.wrong-account-heading": {
"message": "Fel konto"
},
"app.instance.share.remove-user-modal.effect-access": {
"message": "De kommer inte längre få uppdateringar för denna delade instansen"
},
"app.instance.share.remove-user-modal.effect-installed-copy": {
"message": "Alla kopior de redan har installerat kommer vara kvar på deras enhet"
},
"app.instance.share.remove-user-modal.effect-invite-again": {
"message": "Du kan bjuda in dem igen senare"
},
"app.instance.share.remove-user-modal.effects-label": {
"message": "Vad händer?"
},
"app.instance.share.remove-user-modal.header": {
"message": "Återkalla åtkomst"
},
"app.instance.share.remove-user-modal.remove-button": {
"message": "Återkalla åtkomst"
},
"app.instance.share.remove-user-modal.user-avatar-alt": {
"message": "{username}s avatar"
},
"app.instance.share.remove-user-modal.warning-body": {
"message": "Återkallar du {username}s åtkomst till denna delade instansen behöver du bjuda in dem igen innan de kan få uppdateringar."
},
"app.instance.share.sign-in.button": {
"message": "Logga in"
},
"app.instance.share.unlink.body": {
"message": "Du måste avlänka detta modpaket för att dela din instans"
},
"app.instance.share.unlink.header": {
"message": "Delning kräver avlänkning"
},
"app.instance.shared-instance-already-installed.body": {
"message": "Denna delade instansen är redan installerad som <bold>{instanceName}</bold>. Är du säker på att du vill installera en till kopia?"
},
"app.instance.shared-instance-already-installed.header": {
"message": "Delad instans redan installerad"
},
"app.instance.shared-instance-already-installed.install-anyway": {
"message": "Installera ändå"
},
"app.instance.shared-instance-already-installed.instance": {
"message": "Instans"
},
"app.instance.shared-instance-wrong-account.fallback-username": {
"message": "det länkade kontot"
},
"app.instance.shared-instance-wrong-account.sign-in-as-label": {
"message": "Logga in som"
},
"app.instance.shared-instance-wrong-account.warning-header": {
"message": "Du använder fel Modrinth-konto"
},
"app.instance.worlds.add-server": {
"message": "Lägg till server"
},
@@ -422,6 +515,21 @@
"app.instance.worlds.search-worlds-placeholder": {
"message": "Sök {count} världar..."
},
"app.modal.install-to-play.additional-context": {
"message": "Ytterligare sammanhang"
},
"app.modal.install-to-play.additional-context-placeholder": {
"message": "Inkludera länkar och bilder om möjligt och relevant"
},
"app.modal.install-to-play.content-you-are-reporting": {
"message": "Instans du anmäler"
},
"app.modal.install-to-play.delete-instance": {
"message": "Radera instans"
},
"app.modal.install-to-play.external-files-dont-install": {
"message": "Installera inte"
},
"app.modal.install-to-play.header": {
"message": "Installera för att spela"
},
@@ -437,6 +545,9 @@
"app.modal.install-to-play.mod-count": {
"message": "{count, plural, one {# mod} other {# moddar}}"
},
"app.modal.install-to-play.report-description": {
"message": "Använd denna formulär för att anmäla instanser som kan bryta mot våra <rules-link>Regler</rules-link> eller <terms-link>Användarvillkor</terms-link>."
},
"app.modal.install-to-play.shared-instance": {
"message": "Delad instans"
},
@@ -455,6 +566,12 @@
"app.modal.update-to-play.removed": {
"message": "Tog bort"
},
"app.modal.update-to-play.shared-instance-added-label": {
"message": "Lade till"
},
"app.modal.update-to-play.shared-instance-removed-label": {
"message": "Tog bort"
},
"app.project.install-button.already-installed": {
"message": "Detta projekt är redan installerat"
},
@@ -528,7 +645,7 @@
"message": "Fel med behandlingen av filen"
},
"app.skins.edit-button": {
"message": "Redigera utseende"
"message": "Ändra utseende"
},
"app.skins.modal.add-skin-button": {
"message": "Lägg till utseende"
@@ -552,7 +669,7 @@
"message": "Mantel"
},
"app.skins.modal.edit-title": {
"message": "Redigerar utseende"
"message": "Ändrar utseende"
},
"app.skins.modal.make-edit-first-tooltip": {
"message": "Gör en ändring på utseendet först!"
@@ -579,7 +696,7 @@
"message": "Ladda upp utseende först!"
},
"app.skins.preview.edit-button": {
"message": "Redigera utseende"
"message": "Ändra utseende"
},
"app.skins.previewing-badge": {
"message": "Förhandsvisa"
@@ -764,6 +881,12 @@
"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!"
},
"installation-settings.shared-instance.unlink-button": {
"message": "Avlänka delad instans"
},
"installation-settings.shared-instance.unlinking-button": {
"message": "Avlänkar..."
},
"instance.action.create-shortcut": {
"message": "Skapa genväg"
},
@@ -833,6 +956,9 @@
"instance.files.save-as": {
"message": "Spara som..."
},
"instance.locked.delete-button": {
"message": "Radera instans"
},
"instance.playtime.never-played": {
"message": "Aldrig spelad"
},
@@ -1010,6 +1136,9 @@
"instance.settings.tabs.java.java-path-placeholder": {
"message": "/sökväg/till/java"
},
"instance.settings.tabs.sharing": {
"message": "Dela"
},
"instance.settings.tabs.window": {
"message": "Fönster"
},
@@ -1040,6 +1169,21 @@
"instance.settings.tabs.window.width.enter": {
"message": "Ange bredd..."
},
"instance.shared-instance.error.title": {
"message": "Något gick fel"
},
"instance.shared-instance.publish-review.added-label": {
"message": "Lade till"
},
"instance.shared-instance.publish-review.config-title-v2": {
"message": "Välj konfigurationsfiler"
},
"instance.shared-instance.publish-review.header": {
"message": "Granska ändringar"
},
"instance.shared-instance.publish-review.removed-label": {
"message": "Tog bort"
},
"instance.worlds.a_minecraft_server": {
"message": "En Minecraft Server"
},
@@ -1124,6 +1268,24 @@
"minecraft-required.sign-in": {
"message": "Logga in på Microsoft"
},
"modal.modrinth-account-required.cancel-button": {
"message": "Avbryt"
},
"modal.modrinth-account-required.continue-in-browser-heading": {
"message": "Fortsätt i din webbläsare"
},
"modal.modrinth-account-required.create-account-button": {
"message": "Skapa ett konto"
},
"modal.modrinth-account-required.header": {
"message": "Konto behövs"
},
"modal.modrinth-account-required.open-browser-again-button": {
"message": "Öppna webbläsare igen"
},
"modal.modrinth-account-required.signing-in-header": {
"message": "Loggar in"
},
"search.filter.locked.instance": {
"message": "Tillhandahållet av instansen"
},
@@ -11,6 +11,21 @@
"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.retry": {
"message": "ลองอีกครั้ง"
},
"app.action-bar.install.summary.canceled": {
"message": "ยกเลิกสำเร็จ"
},
"app.action-bar.make-primary-instance": {
"message": "กำหนดอินสแตนซ์หลัก"
},
+82 -1
View File
@@ -89,6 +89,9 @@
"app.action-bar.install.unknown-instance": {
"message": "Bilinmeyen kurulum"
},
"app.action-bar.install.updating-shared-content": {
"message": "Paylaşılmış içerik güncelleniyor"
},
"app.action-bar.installs": {
"message": "Yüklenenler"
},
@@ -135,7 +138,7 @@
"message": "Tercihleri yönet"
},
"app.ads-consent.reject": {
"message": "Hepsini redder"
"message": "Hepsini reddet"
},
"app.ads-consent.title": {
"message": "Sizin mahremiyetiniz ve reklamlar Modrinth'i nasıl destekler"
@@ -338,6 +341,36 @@
"app.install.phase.running_loader_processors": {
"message": "Yükleyici işlemcileri çalıştırılıyor"
},
"app.instance.admonitions.shared-instance.added-label": {
"message": "Eklendi"
},
"app.instance.admonitions.shared-instance.changes-body": {
"message": "Yerel instance, paylaştığın kullanıcıların kurulumundan daha güncel."
},
"app.instance.admonitions.shared-instance.changes-header": {
"message": "Değişiklikler henüz paylaşılmadı"
},
"app.instance.admonitions.shared-instance.publish-button": {
"message": "Güncellemeyi Yayınla"
},
"app.instance.admonitions.shared-instance.publishing-button": {
"message": "Yayınlıyor..."
},
"app.instance.admonitions.shared-instance.removed-label": {
"message": "Kaldırıldı"
},
"app.instance.admonitions.shared-instance.review-admonition-header": {
"message": "Güncellemeyi yayınla"
},
"app.instance.admonitions.shared-instance.review-description": {
"message": "Bu kurulumu kullanan herkesle paylaşılacak içerik değişikliklerini gözden geçirin."
},
"app.instance.admonitions.shared-instance.review-header": {
"message": "Değişimleri inceleniyor"
},
"app.instance.admonitions.shared-instance.reviewing-button": {
"message": "İnceleniyor..."
},
"app.instance.confirm-delete.admonition-body": {
"message": "Dünyalarınız, yapılandırmalarınız ve yüklü tüm içerikler ve tüm veriler kalıcı olarak silinecek."
},
@@ -374,6 +407,9 @@
"app.instance.mods.content-type-project": {
"message": "proje"
},
"app.instance.mods.locked-content": {
"message": "İnstance'ta kilitli olan içerikler değiştirilemez."
},
"app.instance.mods.project-was-added": {
"message": "\"{name}\" eklendi"
},
@@ -389,6 +425,51 @@
"app.instance.mods.successfully-uploaded": {
"message": "Başarıyla yüklendi"
},
"app.instance.share.empty.description": {
"message": "Bu instance'ı arkadaşlarınla paylaşabilirsin!"
},
"app.instance.share.empty.heading": {
"message": "Hiçbir arkadaş davet edilmedi"
},
"app.instance.share.empty.invite-friends-button": {
"message": "Arkadaşlarını davet et"
},
"app.instance.share.invite-modal.heading": {
"message": "Paylaş {name}"
},
"app.instance.share.locked.empty-description-prefix": {
"message": "Giriş yapmanız gerekiyor"
},
"app.instance.share.locked.empty-description-suffix": {
"message": "sayfaya giriş yapabilmeniz işin."
},
"app.instance.share.locked.linked-account-fallback": {
"message": "bağlı hesap"
},
"app.instance.share.locked.signed-out-heading": {
"message": "Giriş yapılmadı"
},
"app.instance.share.locked.switch-account-button": {
"message": "Hesap değiştir"
},
"app.instance.share.locked.wrong-account-heading": {
"message": "Hatalı hesap"
},
"app.instance.share.remove-user-modal.effect-access": {
"message": "Artık bu paylaşılan kurulum için güncelleme almayacaklar"
},
"app.instance.share.remove-user-modal.effect-installed-copy": {
"message": "Daha önce yükledikleri kopyalar cihazlarında kalmaya devam edecek"
},
"app.instance.share.remove-user-modal.effects-label": {
"message": "Ne olur?"
},
"app.instance.share.remove-user-modal.user-avatar-alt": {
"message": "{username} nın avatarı"
},
"app.instance.share.sign-in.button": {
"message": "Giriş yap"
},
"app.instance.worlds.add-server": {
"message": "Sunucu Ekle"
},
+222 -21
View File
@@ -57,7 +57,7 @@
"message": "Недійсний шлях до файлу"
},
"app.action-bar.install.summary.invalid-modpack": {
"message": "Дані збірки модів недійсні"
"message": "Дані збірки недійсні"
},
"app.action-bar.install.summary.invalid-modpack-files": {
"message": "Файли збірки містять недійсні метадані"
@@ -66,7 +66,7 @@
"message": "Не вдалося завершити встановлення Java"
},
"app.action-bar.install.summary.loader-setup-failed": {
"message": "Не вдалося встановити завантажувач"
"message": "Помилка встановлення завантажувача"
},
"app.action-bar.install.summary.local-data-error": {
"message": "Не вдалося оновити локальні дані"
@@ -117,7 +117,7 @@
"message": "Оновити"
},
"app.action-bar.view-active-downloads": {
"message": "Переглянути активні завантаження"
"message": "Переглянути поточні завантаження"
},
"app.action-bar.view-instance": {
"message": "Переглянути профіль"
@@ -189,13 +189,13 @@
"message": "Системне оформлення"
},
"app.appearance-settings.select-option": {
"message": "Виберіть опцію"
"message": "Оберіть опцію"
},
"app.appearance-settings.show-play-time.description": {
"message": "Показує, скільки часу ви провели в цьому профілі."
},
"app.appearance-settings.show-play-time.title": {
"message": "Час гри"
"message": "Показати час гри"
},
"app.appearance-settings.skip-non-essential-warnings.description": {
"message": "Автоматично пропускає низькоризикові підтвердження: установки дубльованих збірок, звичайні видалення вмісту, масові оновлення та запити на відновлення. Попередження з вищим рівнем ризику залишаться."
@@ -213,13 +213,13 @@
"message": "Якщо ви спробуєте встановити файл пакета Modrinth (.mrpack), який не розміщено на Modrinth, ми переконаємося, що ви розумієте ризики, перш ніж установлювати його."
},
"app.appearance-settings.unknown-pack-warning.title": {
"message": "Попередження перед установленням невідомих збірок"
"message": "Попереджати мене перед установленням невідомих збірок"
},
"app.auth-servers.unreachable.body": {
"message": "Сервери автентифікації Minecraft можуть зараз не працювати. Перевірте з’єднання з інтернетом та спробуйте пізніше."
},
"app.auth-servers.unreachable.header": {
"message": "Не вдається зв’язатися зі серверами автентифікації"
"message": "Не вдається зв’язатися із серверами автентифікації"
},
"app.browse.add-servers-to-instance": {
"message": "Додавання сервера до профілю"
@@ -255,7 +255,7 @@
"message": "Збірки"
},
"app.browse.server-instance-content-warning": {
"message": "Додавання вмісту може порушити сумісність при приєднанні до сервера. Усі додані матеріали також будуть утрачені під час оновлення вмісту профілю сервера."
"message": "Додавання вмісту може порушити сумісність із сервером. Будь-який доданий уміст буде втрачено під час оновлення вмісту профілю сервера."
},
"app.browse.server.installing": {
"message": "Установлення"
@@ -303,7 +303,7 @@
"message": "У черзі на встановлення"
},
"app.install.phase.preparing_java": {
"message": "Підготовка Java"
"message": "Підготовлення Java"
},
"app.install.phase.preparing_java.downloading": {
"message": "Завантаження Java {version}"
@@ -315,10 +315,10 @@
"message": "Отримання Java {version}"
},
"app.install.phase.preparing_java.resolving": {
"message": "Підготовка Java {version}"
"message": "Підготовлення Java {version}"
},
"app.install.phase.preparing_java.validating": {
"message": "Перевірка Java {version}"
"message": "Перевірення Java {version}"
},
"app.install.phase.reading_pack_manifest": {
"message": "Читання маніфесту пакета"
@@ -338,6 +338,21 @@
"app.install.phase.running_loader_processors": {
"message": "Запуск процесорів завантажувача"
},
"app.instance.admonitions.shared-instance.added-label": {
"message": "Додано"
},
"app.instance.admonitions.shared-instance.changes-body": {
"message": "Ваш локальний профіль містить зміни, з якими ви не поділилися."
},
"app.instance.admonitions.shared-instance.changes-header": {
"message": "Ви ще не поділилися своїми змінами"
},
"app.instance.admonitions.shared-instance.publish-button": {
"message": "Опублікувати оновлення"
},
"app.instance.admonitions.shared-instance.publishing-button": {
"message": "Публікуємо…"
},
"app.instance.confirm-delete.admonition-body": {
"message": "Усі дані вашого профілю будуть видалені назавжди, включно з вашими світами, налаштуваннями та всім установленим умістом."
},
@@ -381,7 +396,7 @@
"message": "«{name}» додано"
},
"app.instance.mods.projects-were-added": {
"message": "{count} проєктів додано"
"message": "{count} проєктів було додано"
},
"app.instance.mods.share-text": {
"message": "Погляньте на проєкти, які я використовую у своїй збірці!"
@@ -401,12 +416,48 @@
"app.instance.share.empty.invite-friends-button": {
"message": "Запросити друзів"
},
"app.instance.share.invite-modal.heading": {
"message": "Поділитися {name}"
},
"app.instance.share.locked.empty-description-prefix": {
"message": "Ви повинні ввійти як"
},
"app.instance.share.locked.switch-account-button": {
"message": "Змінити обліковий запис"
},
"app.instance.share.locked.wrong-account-heading": {
"message": "Неправильний обліковий запис"
},
"app.instance.share.remove-user-modal.effect-access": {
"message": "Він більше не зможе отримувати оновлення для цього спільного профілю"
},
"app.instance.share.remove-user-modal.effect-installed-copy": {
"message": "Будь-які копії, які він уже встановив, залишаться на його пристрої"
},
"app.instance.share.remove-user-modal.effect-invite-again": {
"message": "Ви зможете потім запросити його знову"
},
"app.instance.share.remove-user-modal.effect-last-user": {
"message": "Це останній користувач, тому спільний доступ буде вимкнено для цього профілю"
},
"app.instance.share.remove-user-modal.effects-label": {
"message": "Що тоді?"
},
"app.instance.share.remove-user-modal.header": {
"message": "Відкликання доступу"
},
"app.instance.share.remove-user-modal.remove-button": {
"message": "Відкликати доступ"
},
"app.instance.share.remove-user-modal.user-avatar-alt": {
"message": "Аватар {username}"
},
"app.instance.share.remove-user-modal.warning-body": {
"message": "Якщо ви відкличете доступ {username} до цього спільного профілю, він зможе отримувати оновлення, лише якщо ви знову його запросите."
},
"app.instance.share.sign-in.button": {
"message": "Увійти"
},
"app.instance.share.unlink.body": {
"message": "Ви повинні від'єднати цю збірку, аби поділитися своїм профілем"
},
@@ -425,6 +476,9 @@
"app.instance.shared-instance-wrong-account.signed-out-header": {
"message": "Ви повинні ввійти в Modrinth"
},
"app.instance.shared-instance-wrong-account.warning-header": {
"message": "Ви використовуєте не той обліковий запис Modrinth"
},
"app.instance.worlds.add-server": {
"message": "Додати сервер"
},
@@ -476,6 +530,21 @@
"app.instance.worlds.search-worlds-placeholder": {
"message": "Пошук {count} світів…"
},
"app.modal.install-to-play.additional-context": {
"message": "Додатковий контекст"
},
"app.modal.install-to-play.additional-context-placeholder": {
"message": "Надайте посилання та зображення, які стосуються скарги"
},
"app.modal.install-to-play.content-you-are-reporting": {
"message": "Профіль, на який скаржитеся"
},
"app.modal.install-to-play.delete-instance": {
"message": "Видалити профіль"
},
"app.modal.install-to-play.external-files-dont-install": {
"message": "Не встановлювати"
},
"app.modal.install-to-play.header": {
"message": "Установлення для гри"
},
@@ -491,12 +560,45 @@
"app.modal.install-to-play.mod-count": {
"message": "{count, plural, one {# мод} few {# мода} other {# модів}}"
},
"app.modal.install-to-play.report-description": {
"message": "Використайте цю форму, аби поскаржитися на профілі, які можуть порушувати наші <rules-link>правила</rules-link> чи <terms-link>умови використання</terms-link>."
},
"app.modal.install-to-play.report-image-too-large": {
"message": "Файл перевищує обмеження розміру в 1 МіБ"
},
"app.modal.install-to-play.report-reason": {
"message": "Яке правило порушує цей профіль?"
},
"app.modal.install-to-play.report-reason.inappropriate": {
"message": "Неприпустимий уміст"
},
"app.modal.install-to-play.report-reason.malicious": {
"message": "Шкідливий уміст"
},
"app.modal.install-to-play.report-reason.spam": {
"message": "Спам"
},
"app.modal.install-to-play.report-shared-instance-header": {
"message": "Скарга на спільний профіль"
},
"app.modal.install-to-play.report-submitted": {
"message": "Скаргу відправлено"
},
"app.modal.install-to-play.report-support-and-bugs": {
"message": "Для отримання допомоги зв'яжіться з нашою <support-link>командою підтримки</support-link>. Для створення звіту про помилки відкрийте <github-link>issue в GitHub</github-link>."
},
"app.modal.install-to-play.reviewed-files": {
"message": "Файл перевірятиметься, лише якщо його завантажено на Modrinth, незалежно від його формату (включно з .mrpack)."
},
"app.modal.install-to-play.shared-instance": {
"message": "Профіль"
},
"app.modal.install-to-play.shared-instance-content": {
"message": "Уміст спільного профілю"
},
"app.modal.install-to-play.shared-instance-unknown-files-description": {
"message": "Цей спільний профіль містить файли, які не є опубліковані на Modrinth. Ми наполегливо рекомендуємо встановлювати лише ті файли, яким довіряєте."
},
"app.modal.install-to-play.unknown-files-description": {
"message": "Ця збірка сервера містить файли, які не є опубліковані на Modrinth. Ми наполегливо рекомендуємо встановлювати лише ті файли, яким довіряєте."
},
@@ -515,6 +617,21 @@
"app.modal.update-to-play.removed": {
"message": "Видалено"
},
"app.modal.update-to-play.server-modpack-unknown-files-description": {
"message": "Це оновлення збірки сервера містить файли, які не є опубліковані на Modrinth. Ми наполегливо рекомендуємо встановлювати лише ті файли, яким довіряєте."
},
"app.modal.update-to-play.shared-instance-added-label": {
"message": "Додано"
},
"app.modal.update-to-play.shared-instance-removed-label": {
"message": "Видалено"
},
"app.modal.update-to-play.shared-instance-unknown-files-description": {
"message": "Це оновлення спільного профілю містить файли, які не є опубліковані на Modrinth. Ми наполегливо рекомендуємо встановлювати лише ті файли, яким довіряєте."
},
"app.modal.update-to-play.update-required": {
"message": "Необхідне оновлення"
},
"app.project.install-button.already-installed": {
"message": "Проєкт уже встановлено"
},
@@ -528,7 +645,7 @@
"message": "Усі версії"
},
"app.project.version.download-in-browser": {
"message": "Завантажити в браузері"
"message": "Завантажити в переглядачу"
},
"app.project.version.installing": {
"message": "Установлення"
@@ -594,7 +711,7 @@
"message": "Редагувати скін"
},
"app.skins.modal.add-skin-button": {
"message": "Додати скін"
"message": "Додати вигляд"
},
"app.skins.modal.add-title": {
"message": "Додавання скіна"
@@ -639,16 +756,16 @@
"message": "Текстура"
},
"app.skins.modal.upload-skin-first-tooltip": {
"message": "Спершу завантажте скін!"
"message": "Спершу завантажте вигляд!"
},
"app.skins.preview.edit-button": {
"message": "Редагувати скін"
"message": "Змінити вигляд"
},
"app.skins.previewing-badge": {
"message": "Попередній перегляд"
},
"app.skins.rate-limit.text": {
"message": "Ви змінюєте скін занадто часто. Сервери Mojang тимчасово заблокували подальші запити. Зачекайте трохи, перш ніж спробувати знову."
"message": "Ви змінюєте свій вигляд зачасто. Сервери Mojang тимчасово заблокували дальші запити. Заждіть, перш ніж спробувати знову."
},
"app.skins.rate-limit.title": {
"message": "Повільніше!"
@@ -657,7 +774,7 @@
"message": "Ваше замовлення скінів не вдалося зберегти."
},
"app.skins.reorder-error.title": {
"message": "Не вдалося змінити порядок скінів"
"message": "Не вдалося змінити порядок виглядів"
},
"app.skins.section.builders-and-biomes": {
"message": "Builders & Biomes"
@@ -669,7 +786,7 @@
"message": "Chase the Skies"
},
"app.skins.section.default-skins": {
"message": "Усталені скіни"
"message": "Усталені вигляди"
},
"app.skins.section.minecon-earth-2017": {
"message": "MINECON Earth 2017"
@@ -687,7 +804,7 @@
"message": "Mounts of Mayhem"
},
"app.skins.section.saved-skins": {
"message": "Збережені скіни"
"message": "Збережені вигляди"
},
"app.skins.section.striding-hero": {
"message": "Striding Hero"
@@ -770,6 +887,18 @@
"app.world.world-item.players-online": {
"message": "{count} у мережі"
},
"content.shared-instance.delete-button": {
"message": "Усе одно видалити"
},
"content.shared-instance.delete-many-button": {
"message": "Усе одно видалити {count, plural, one {# проєкт} few {# проєкти} many {# проєктів} other {# проєкту}}"
},
"content.shared-instance.disable-button": {
"message": "Усе одно вимкнути"
},
"content.shared-instance.disable-many-button": {
"message": "Усе одно вимкнути {count, plural, one {# проєкт} few {# проєкти} many {# проєктів} other {# проєкту}}"
},
"friends.action.add-friend": {
"message": "Додати друга"
},
@@ -1089,7 +1218,7 @@
"message": "Повний екран"
},
"instance.settings.tabs.window.fullscreen.description": {
"message": "Запускати гру в повноекранному режимі (за допомогою options.txt)."
"message": "Змушує гру запускатися в повному екрані (за допомогою options.txt)."
},
"instance.settings.tabs.window.height": {
"message": "Висота"
@@ -1109,9 +1238,48 @@
"instance.settings.tabs.window.width.enter": {
"message": "Уведіть ширину…"
},
"instance.shared-instance.error.title": {
"message": "Щось пішло не так"
},
"instance.shared-instance.publish-review.added-label": {
"message": "Додано"
},
"instance.shared-instance.publish-review.admonition-header": {
"message": "Публікація оновлення"
},
"instance.shared-instance.publish-review.config-title-v2": {
"message": "Оберіть файли конфігурації"
},
"instance.shared-instance.publish-review.description": {
"message": "Перегляньте зміни вмісту та оберіть файли конфігурації, які варто включити в цьому оновленні."
},
"instance.shared-instance.publish-review.header": {
"message": "Огляд змін"
},
"instance.shared-instance.publish-review.publish-button": {
"message": "Опублікувати оновлення"
},
"instance.shared-instance.publish-review.removed-label": {
"message": "Видалено"
},
"instance.shared-instance.tooltip": {
"message": "Уміст цього профілю керується іншим користувачем."
},
"instance.shared-instance.unavailable.access-revoked-text": {
"message": "Ваш доступ до цього спільного профілю відкликано. Профіль досі доступний, але вже не прив'язаний та не отримуватиме оновлення."
},
"instance.shared-instance.unavailable.deleted-text": {
"message": "Основний профіль видалено. Цей профіль досі доступний, але вже не прив'язаний та не отримуватиме оновлення."
},
"instance.shared-instance.unavailable.locked-title": {
"message": "Профіль заблоковано"
},
"instance.shared-instance.unavailable.text": {
"message": "Ваш локальний профіль досі доступний, але вже не прив'язаний та не отримуватиме оновлення."
},
"instance.shared-instance.unavailable.title": {
"message": "Спільний профіль уже не доступний"
},
"instance.worlds.a_minecraft_server": {
"message": "Сервер Minecraft"
},
@@ -1196,6 +1364,39 @@
"minecraft-required.sign-in": {
"message": "Увійти в Microsoft"
},
"modal.modrinth-account-required.browser-description": {
"message": "Відкрилася нова вкладка, де ви зможете ввійти. Увійдіть, тоді поверніться до застосунку."
},
"modal.modrinth-account-required.cancel-button": {
"message": "Скасувати"
},
"modal.modrinth-account-required.create-account-button": {
"message": "Створити обліковий запис"
},
"modal.modrinth-account-required.description": {
"message": "Ви повинні ввійти у свій обліковий запис Modrinth, перш ніж використовувати цей функціонал."
},
"modal.modrinth-account-required.header": {
"message": "Необхідний обліковий запис"
},
"modal.modrinth-account-required.open-browser-again-button": {
"message": "Знову відкрити браузер"
},
"modal.modrinth-account-required.sign-in-button": {
"message": "Увійти в Modrinth"
},
"modal.modrinth-account-required.sign-in-heading": {
"message": "Вхід в обліковий запис Modrinth"
},
"modal.modrinth-account-required.signing-in-header": {
"message": "Вхід"
},
"modal.modrinth-account-required.support-prompt": {
"message": "Не можете ввійти? <support>Отримати допомогу</support>"
},
"modal.modrinth-account-required.waiting-for-browser": {
"message": "Очікуємо на підтвердження від переглядача…"
},
"search.filter.locked.instance": {
"message": "Надано профілем"
},
+22 -22
View File
@@ -18,7 +18,7 @@
"message": "复制详细信息"
},
"app.action-bar.install.dismiss": {
"message": "忽略"
"message": "隐藏"
},
"app.action-bar.install.open-instance": {
"message": "打开实例"
@@ -30,19 +30,19 @@
"message": "由于应用关闭而取消"
},
"app.action-bar.install.summary.bad-modpack-file": {
"message": "整合包读取失败"
"message": "无法读取整合包"
},
"app.action-bar.install.summary.canceled": {
"message": "已取消"
},
"app.action-bar.install.summary.cleanup-incomplete": {
"message": "未完成清理"
"message": "未完成清理"
},
"app.action-bar.install.summary.content-download-failed": {
"message": "无法下载文件"
},
"app.action-bar.install.summary.corrupt-download": {
"message": "下载的文件损坏"
"message": "下载的文件损坏"
},
"app.action-bar.install.summary.could-not-save-files": {
"message": "无法保存文件"
@@ -60,7 +60,7 @@
"message": "整合包数据无效"
},
"app.action-bar.install.summary.invalid-modpack-files": {
"message": "整合包文件含有无效元数据"
"message": "整合包文件含有无效元数据"
},
"app.action-bar.install.summary.java-setup-failed": {
"message": "无法完成 Java 配置"
@@ -69,22 +69,22 @@
"message": "加载器配置失败"
},
"app.action-bar.install.summary.local-data-error": {
"message": "无法更新本地数据"
"message": "无法更新本地数据"
},
"app.action-bar.install.summary.minecraft-setup-failed": {
"message": "Minecraft 配置失败"
},
"app.action-bar.install.summary.modrinth-unreachable": {
"message": "无法连接 Modrinth"
"message": "无法连接Modrinth"
},
"app.action-bar.install.summary.no-write-permission": {
"message": "没有写入权限"
"message": "没有写入权限"
},
"app.action-bar.install.summary.pack-download-failed": {
"message": "无法下载包"
"message": "无法下载整合包"
},
"app.action-bar.install.summary.unexpected-error": {
"message": "出错了"
"message": "出现了一些问题"
},
"app.action-bar.install.unknown-instance": {
"message": "未知的实例"
@@ -225,7 +225,7 @@
"message": "无法连接到身份验证服务器"
},
"app.browse.add-servers-to-instance": {
"message": "添加服务器到实例"
"message": "添加实例到服务器"
},
"app.browse.add-to-an-instance": {
"message": "添加到实例"
@@ -297,7 +297,7 @@
"message": "正在下载包文件"
},
"app.install.phase.extracting_overrides": {
"message": "提取覆盖项"
"message": "正在解压覆盖项"
},
"app.install.phase.finalizing": {
"message": "完成"
@@ -312,7 +312,7 @@
"message": "正在下载 Java {version}"
},
"app.install.phase.preparing_java.extracting": {
"message": "正在提取 Java {version}"
"message": "正在解压 Java {version}"
},
"app.install.phase.preparing_java.fetching-metadata": {
"message": "正在获取 Java {version}"
@@ -336,7 +336,7 @@
"message": "正在解析内容"
},
"app.install.phase.rolling_back": {
"message": "回滚"
"message": "回滚"
},
"app.install.phase.running_loader_processors": {
"message": "正在运行加载处理器"
@@ -453,7 +453,7 @@
"message": "切换账号"
},
"app.instance.share.locked.wrong-account-heading": {
"message": "账号不正确"
"message": "账号错误"
},
"app.instance.share.remove-user-modal.effect-access": {
"message": "对方将不再收到该共享实例的后续更新"
@@ -540,7 +540,7 @@
"message": "正在删除 {name}"
},
"app.instance.worlds.filter-modded": {
"message": "模组"
"message": "适配模组"
},
"app.instance.worlds.filter-offline": {
"message": "离线"
@@ -945,10 +945,10 @@
"message": "部分选中的项目属于共享实例的一部分。删除它们只会修改你的本地副本,未来的共享实例更新可能会再次将其恢复或更改。"
},
"content.shared-instance.delete-button": {
"message": "要删除"
"message": "要删除"
},
"content.shared-instance.delete-many-button": {
"message": "要删除{count, number}"
"message": "要删除 {count, number} 个项目"
},
"content.shared-instance.delete-single-body": {
"message": "删除它只会修改你的本地副本。未来的共享实例更新可能会再次将其恢复或更改。"
@@ -957,10 +957,10 @@
"message": "部分选中的项目属于共享实例的一部分。禁用它们只会修改你的本地副本,未来的共享实例更新可能会再次重新启用、恢复或更改它们。"
},
"content.shared-instance.disable-button": {
"message": "坚持禁用"
"message": "仍要禁用"
},
"content.shared-instance.disable-many-button": {
"message": "坚持禁用 {count, number} 个项目"
"message": "仍要禁用 {count, number} 个项目"
},
"content.shared-instance.disable-single-body": {
"message": "禁用它只会修改你的本地副本。未来的共享实例更新可能会再次将其启用、恢复或更改。"
@@ -1209,7 +1209,7 @@
"message": "库分组"
},
"instance.settings.tabs.general.library-groups.create": {
"message": "创建新的分组"
"message": "新建分组"
},
"instance.settings.tabs.general.library-groups.description": {
"message": "库分组功能可以让你将实例整理到库中的不同部分。"
@@ -1509,7 +1509,7 @@
"message": "请在你的浏览器中继续"
},
"modal.modrinth-account-required.create-account-button": {
"message": "建账户"
"message": "建账户"
},
"modal.modrinth-account-required.description": {
"message": "在使用这个功能之前,你需要登入你的Modrinth账户。"
+296 -2
View File
@@ -89,6 +89,9 @@
"app.action-bar.install.unknown-instance": {
"message": "未知的實例"
},
"app.action-bar.install.updating-shared-content": {
"message": "正在更新共用內容"
},
"app.action-bar.installs": {
"message": "安裝"
},
@@ -338,6 +341,36 @@
"app.install.phase.running_loader_processors": {
"message": "正在執行載入器處理程式"
},
"app.instance.admonitions.shared-instance.added-label": {
"message": "已新增"
},
"app.instance.admonitions.shared-instance.changes-body": {
"message": "你的本機實例有尚未同步給其他使用者的變更。"
},
"app.instance.admonitions.shared-instance.changes-header": {
"message": "變更尚未共用"
},
"app.instance.admonitions.shared-instance.publish-button": {
"message": "推送更新"
},
"app.instance.admonitions.shared-instance.publishing-button": {
"message": "正在推送..."
},
"app.instance.admonitions.shared-instance.removed-label": {
"message": "已移除"
},
"app.instance.admonitions.shared-instance.review-admonition-header": {
"message": "推送更新"
},
"app.instance.admonitions.shared-instance.review-description": {
"message": "審查即將與這個實例的所有使用者共用的內容變更。"
},
"app.instance.admonitions.shared-instance.review-header": {
"message": "審查變更"
},
"app.instance.admonitions.shared-instance.reviewing-button": {
"message": "正在審查..."
},
"app.instance.confirm-delete.admonition-body": {
"message": "你實例中的所有資料將被永久刪除,包含你的世界、設定檔以及所有已安裝的內容。"
},
@@ -374,6 +407,9 @@
"app.instance.mods.content-type-project": {
"message": "專案"
},
"app.instance.mods.locked-content": {
"message": "已鎖定實例中的內容無法變更。"
},
"app.instance.mods.project-was-added": {
"message": "已新增「{name}」"
},
@@ -389,9 +425,18 @@
"app.instance.mods.successfully-uploaded": {
"message": "已成功上傳"
},
"app.instance.share.empty.description": {
"message": "你可以與好友共用這個實例!"
},
"app.instance.share.empty.heading": {
"message": "未邀請任何好友"
},
"app.instance.share.empty.invite-friends-button": {
"message": "邀請好友"
},
"app.instance.share.invite-modal.heading": {
"message": "共用「{name}」"
},
"app.instance.share.locked.empty-description-prefix": {
"message": "你需要以"
},
@@ -401,6 +446,27 @@
"app.instance.share.locked.linked-account-fallback": {
"message": "已連結的帳號"
},
"app.instance.share.locked.signed-out-heading": {
"message": "未登入"
},
"app.instance.share.locked.switch-account-button": {
"message": "切換帳號"
},
"app.instance.share.locked.wrong-account-heading": {
"message": "帳號錯誤"
},
"app.instance.share.remove-user-modal.effect-access": {
"message": "他不會再收到這個共用實例的更新"
},
"app.instance.share.remove-user-modal.effect-installed-copy": {
"message": "他已經安裝的副本仍會保留在他的裝置上"
},
"app.instance.share.remove-user-modal.effect-invite-again": {
"message": "你可以稍後再次邀請他"
},
"app.instance.share.remove-user-modal.effect-last-user": {
"message": "這是最後一位共用使用者,這個實例的共用功能將被關閉"
},
"app.instance.share.remove-user-modal.effects-label": {
"message": "會發生什麼事?"
},
@@ -419,6 +485,18 @@
"app.instance.share.sign-in.button": {
"message": "登入"
},
"app.instance.share.unlink.body": {
"message": "你必須先與模組包取消連結才能共用實例"
},
"app.instance.share.unlink.header": {
"message": "共用前需要取消連結"
},
"app.instance.shared-instance-already-installed.body": {
"message": "這個共用實例已經在本機安裝,名稱為「<bold>{instanceName}</bold>」。你確定要再安裝一個副本嗎?"
},
"app.instance.shared-instance-already-installed.header": {
"message": "共用實例已經安裝"
},
"app.instance.shared-instance-already-installed.install-anyway": {
"message": "仍要安裝"
},
@@ -428,9 +506,21 @@
"app.instance.shared-instance-wrong-account.fallback-username": {
"message": "已連結的帳號"
},
"app.instance.shared-instance-wrong-account.owner-admonition-body-v2": {
"message": "登入才能管理這個共用實例,否則你將無法向使用者推送更新。"
},
"app.instance.shared-instance-wrong-account.sign-in-as-label": {
"message": "你需要以"
},
"app.instance.shared-instance-wrong-account.signed-out-header": {
"message": "你需要登入 Modrinth"
},
"app.instance.shared-instance-wrong-account.user-admonition-body-v2": {
"message": "登入才能收到這個共用實例的更新。"
},
"app.instance.shared-instance-wrong-account.warning-header": {
"message": "你目前使用的 Modrinth 帳號不正確"
},
"app.instance.worlds.add-server": {
"message": "新增伺服器"
},
@@ -450,7 +540,7 @@
"message": "即將刪除「{name}」"
},
"app.instance.worlds.filter-modded": {
"message": "模組"
"message": "模組"
},
"app.instance.worlds.filter-offline": {
"message": "離線"
@@ -482,6 +572,15 @@
"app.instance.worlds.search-worlds-placeholder": {
"message": "搜尋 {count} 個世界..."
},
"app.modal.install-to-play.additional-context": {
"message": "補充說明"
},
"app.modal.install-to-play.additional-context-placeholder": {
"message": "若可行且相關,請一併附上連結與圖片"
},
"app.modal.install-to-play.content-you-are-reporting": {
"message": "你要檢舉的實例"
},
"app.modal.install-to-play.delete-instance": {
"message": "刪除實例"
},
@@ -503,14 +602,23 @@
"app.modal.install-to-play.mod-count": {
"message": "{count, plural, other {# 個模組}}"
},
"app.modal.install-to-play.report-description": {
"message": "用這個表單檢舉可能違反我們的《<rules-link>內容規範</rules-link>》或《<terms-link>使用條款</terms-link>》的實例。"
},
"app.modal.install-to-play.report-image-invalid-type": {
"message": "不支援的圖片格式"
},
"app.modal.install-to-play.report-image-too-large": {
"message": "檔案大小超過 1 MiB 限制"
},
"app.modal.install-to-play.report-legal-claims": {
"message": "關於 DMCA 通知或其他法律訴求,請參閱我們的《<copyright-link>著作權政策</copyright-link>》。"
},
"app.modal.install-to-play.report-reason": {
"message": "這個實例違反了哪一條規則?"
},
"app.modal.install-to-play.report-reason.inappropriate": {
"message": "不當內容"
"message": "不當內容"
},
"app.modal.install-to-play.report-reason.malicious": {
"message": "惡意內容"
@@ -518,12 +626,27 @@
"app.modal.install-to-play.report-reason.spam": {
"message": "垃圾內容"
},
"app.modal.install-to-play.report-shared-instance-header": {
"message": "檢舉共用實例"
},
"app.modal.install-to-play.report-submitted": {
"message": "檢舉已提交"
},
"app.modal.install-to-play.report-support-and-bugs": {
"message": "如需客服支援,請聯絡我們的<support-link>客服團隊</support-link>。如需回報錯誤,請<github-link>在 GitHub 上提交 issue</github-link>。"
},
"app.modal.install-to-play.reviewed-files": {
"message": "只有在 Modrinth 上發布的檔案才會經過審查,無論其檔案格式為何(包含 .mrpack)。"
},
"app.modal.install-to-play.shared-instance": {
"message": "共用實例"
},
"app.modal.install-to-play.shared-instance-content": {
"message": "共用實例的內容"
},
"app.modal.install-to-play.shared-instance-unknown-files-description": {
"message": "這個共用實例包含未在 Modrinth 上發布的檔案。強烈建議你僅安裝來自信任來源的檔案。"
},
"app.modal.install-to-play.unknown-files-description": {
"message": "這個伺服器模組包中包含未在 Modrinth 上發布的檔案。強烈建議你僅安裝來自信任來源的檔案。"
},
@@ -542,6 +665,21 @@
"app.modal.update-to-play.removed": {
"message": "已移除"
},
"app.modal.update-to-play.server-modpack-unknown-files-description": {
"message": "這個伺服器模組包更新包含未在 Modrinth 上發布的檔案。強烈建議你僅安裝來自信任來源的檔案。"
},
"app.modal.update-to-play.shared-instance-added-label": {
"message": "已新增"
},
"app.modal.update-to-play.shared-instance-removed-label": {
"message": "已移除"
},
"app.modal.update-to-play.shared-instance-unknown-files-description": {
"message": "這個共用實例更新包含未在 Modrinth 上發布的檔案。強烈建議你僅安裝來自信任來源的檔案。"
},
"app.modal.update-to-play.update-required": {
"message": "需要更新"
},
"app.modal.update-to-play.update-required-description": {
"message": "需要更新才能遊玩「{name}」。請更新至最新版本以啟動遊戲。"
},
@@ -800,9 +938,39 @@
"app.world.world-item.players-online": {
"message": "{count} 人在線上"
},
"content.shared-instance.change-version-body": {
"message": "變更版本只會影響本機副本。未來共用實例更新時可能會再次復原或變更這個專案。"
},
"content.shared-instance.delete-bulk-body": {
"message": "部分選取的專案是共用實例的一部分。刪除這些專案只會影響你的本機副本,而未來共用實例更新時可能會還原或再次變更這些專案。"
},
"content.shared-instance.delete-button": {
"message": "仍要刪除"
},
"content.shared-instance.delete-many-button": {
"message": "仍要刪除 {count, number} 個專案"
},
"content.shared-instance.delete-single-body": {
"message": "刪除這個專案只會影響本機副本。未來共用實例更新時可能會再次復原或變更這個專案。"
},
"content.shared-instance.disable-bulk-body": {
"message": "部分選取的專案是共用實例的一部分。停用這些專案只會影響你的本機副本,而未來共用實例更新時可能會重新啟用、還原或再次變更這些專案。"
},
"content.shared-instance.disable-button": {
"message": "仍要停用"
},
"content.shared-instance.disable-many-button": {
"message": "仍要停用 {count, number} 個專案"
},
"content.shared-instance.disable-single-body": {
"message": "停用這個專案只會影響本機副本。未來共用實例更新時,可能會重新啟用、還原或再次變更這個專案。"
},
"content.shared-instance.unlink-body": {
"message": "解除連結只會影響本機副本。未來共用實例更新時可能會復原或再次變更。"
},
"content.shared-instance.warning-header": {
"message": "這是共用實例的一部分"
},
"friends.action.add-friend": {
"message": "新增好友"
},
@@ -866,6 +1034,48 @@
"friends.sign-in-to-add-friends": {
"message": "<link>登入 Modrinth 帳號</link>即可新增好友並查看他們正在玩什麼!"
},
"installation-settings.shared-instance.linked-title": {
"message": "已連結的共用實例"
},
"installation-settings.shared-instance.title": {
"message": "取消發布實例"
},
"installation-settings.shared-instance.unlink-button": {
"message": "取消連結共用實例"
},
"installation-settings.shared-instance.unlink-description": {
"message": "解除這個本機實例與後續共用更新的連結。"
},
"installation-settings.shared-instance.unlinking-button": {
"message": "正在取消連結..."
},
"installation-settings.shared-instance.unpublish-button": {
"message": "取消發布共用實例"
},
"installation-settings.shared-instance.unpublish-description": {
"message": "在 Modrinth 上移除這個共用實例,並停止向任何使用者推送更新。你的本機實例不會受到影響。"
},
"installation-settings.shared-instance.unpublishing-button": {
"message": "正在取消發布..."
},
"installation-settings.unlink-shared-instance.modal.admonition-body": {
"message": "這只會影響你的本機實例。你已安裝的內容仍會保留在此裝置上,共用實例及其他使用者都不會受到影響。"
},
"installation-settings.unlink-shared-instance.modal.admonition-header": {
"message": "即將取消連結共用實例"
},
"installation-settings.unlink-shared-instance.modal.header": {
"message": "取消連結共用實例"
},
"installation-settings.unpublish-shared-instance.modal.admonition-body": {
"message": "這會從 Modrinth 的伺服器刪除共用實例。在 Modrinth App 使用該實例的使用者將不再收到更新,但本機實例及其內容仍會保留在此裝置上。"
},
"installation-settings.unpublish-shared-instance.modal.admonition-header": {
"message": "即將取消發布共用實例"
},
"installation-settings.unpublish-shared-instance.modal.header": {
"message": "取消發布共用實例"
},
"instance.action.create-shortcut": {
"message": "建立捷徑"
},
@@ -938,6 +1148,9 @@
"instance.locked.delete-button": {
"message": "刪除實例"
},
"instance.locked.play-tooltip": {
"message": "這個實例已被鎖定"
},
"instance.playtime.never-played": {
"message": "從未遊玩"
},
@@ -1076,6 +1289,9 @@
"instance.settings.tabs.installation.loader-version": {
"message": "{loader} 版本"
},
"instance.settings.tabs.installation.locked": {
"message": "實例被鎖定時無法使用安裝設定選項。"
},
"instance.settings.tabs.java": {
"message": "Java 和記憶體"
},
@@ -1115,6 +1331,9 @@
"instance.settings.tabs.java.java-path-placeholder": {
"message": "/path/to/java"
},
"instance.settings.tabs.sharing": {
"message": "共用"
},
"instance.settings.tabs.window": {
"message": "視窗"
},
@@ -1145,6 +1364,57 @@
"instance.settings.tabs.window.width.enter": {
"message": "輸入寬度..."
},
"instance.shared-instance.error.title": {
"message": "出了點狀況"
},
"instance.shared-instance.owner-tooltip": {
"message": "這個實例的內容正在與其他使用者共用。"
},
"instance.shared-instance.publish-review.added-label": {
"message": "已新增"
},
"instance.shared-instance.publish-review.admonition-header": {
"message": "向玩家推送更新"
},
"instance.shared-instance.publish-review.config-title-v2": {
"message": "選擇設定檔"
},
"instance.shared-instance.publish-review.description": {
"message": "審查內容變更,並選擇要包含在本次更新的設定檔。"
},
"instance.shared-instance.publish-review.header": {
"message": "審查變更"
},
"instance.shared-instance.publish-review.publish-button": {
"message": "推送更新"
},
"instance.shared-instance.publish-review.removed-label": {
"message": "已移除"
},
"instance.shared-instance.tooltip": {
"message": "這個實例的內容由其他使用者負責管理。"
},
"instance.shared-instance.unavailable.access-revoked-text": {
"message": "你對共用實例的存取權已被撤銷。這個實例仍可正常使用,但已不再與共用實例連結,且不再接收更新。"
},
"instance.shared-instance.unavailable.deleted-text": {
"message": "主要實例已被刪除。這個實例仍可正常使用,但已不再與共用實例連結,且不再接收更新。"
},
"instance.shared-instance.unavailable.locked-text": {
"message": "這個共用實例已被內容管理團隊鎖定,不會再接收來自主要實例的更新,且無法遊玩。"
},
"instance.shared-instance.unavailable.locked-title": {
"message": "實例已鎖定"
},
"instance.shared-instance.unavailable.manager-fallback": {
"message": "實例管理者"
},
"instance.shared-instance.unavailable.text": {
"message": "你的本機實例仍可正常使用,但已不再與共用實例連結,且不再接收更新。"
},
"instance.shared-instance.unavailable.title": {
"message": "你無法使用這個共用實例"
},
"instance.worlds.a_minecraft_server": {
"message": "Minecraft 伺服器"
},
@@ -1229,18 +1499,42 @@
"minecraft-required.sign-in": {
"message": "登入 Microsoft"
},
"modal.modrinth-account-required.browser-description": {
"message": "一個新分頁已開啟供你登入。請在該分頁完成登入,然後返回應用程式。"
},
"modal.modrinth-account-required.cancel-button": {
"message": "取消"
},
"modal.modrinth-account-required.continue-in-browser-heading": {
"message": "在瀏覽器中繼續"
},
"modal.modrinth-account-required.create-account-button": {
"message": "建立帳號"
},
"modal.modrinth-account-required.description": {
"message": "你必須登入 Modrinth 帳號才能使用這個功能。"
},
"modal.modrinth-account-required.header": {
"message": "需要帳號"
},
"modal.modrinth-account-required.open-browser-again-button": {
"message": "再次開啟瀏覽器"
},
"modal.modrinth-account-required.sign-in-button": {
"message": "登入 Modrinth"
},
"modal.modrinth-account-required.sign-in-heading": {
"message": "登入 Modrinth 帳號"
},
"modal.modrinth-account-required.signing-in-header": {
"message": "登入"
},
"modal.modrinth-account-required.support-prompt": {
"message": "登入時遇到問題嗎?<support>取得支援</support>"
},
"modal.modrinth-account-required.waiting-for-browser": {
"message": "等待瀏覽器確認..."
},
"search.filter.locked.instance": {
"message": "由該實例提供"
},
+4 -2
View File
@@ -975,8 +975,10 @@ const searchState = useBrowseSearch({
watch(
[
() => searchState.query.value,
() => searchState.currentFilters.value,
() => searchState.serverCurrentFilters.value,
() =>
searchState.isServerType.value
? searchState.serverCurrentFilters.value
: searchState.currentFilters.value,
() => projectType.value,
],
() => {
+108
View File
@@ -0,0 +1,108 @@
<template>
<div class="w-full pt-2">
<UserProfilePageLayout
:user-id="userId"
:project-type="projectType"
variant="app"
site-url="https://modrinth.com"
project-link-mode="app"
external-navigation
/>
</div>
</template>
<script setup lang="ts">
import { provideUserProfile, UserProfilePageLayout } from '@modrinth/ui'
import { useQuery, useQueryClient } from '@tanstack/vue-query'
import { computed, watch } from 'vue'
import { onBeforeRouteUpdate, useRoute } from 'vue-router'
import {
get_user_collections,
get_user_organizations,
get_user_profile,
get_user_projects,
patch_user,
} from '@/helpers/users'
import { useBreadcrumbs } from '@/store/breadcrumbs'
const route = useRoute()
const queryClient = useQueryClient()
const breadcrumbs = useBreadcrumbs()
const userProfile = provideUserProfile({
getUser: get_user_profile,
getProjects: get_user_projects,
getOrganizations: get_user_organizations,
getCollections: get_user_collections,
patchUser: patch_user,
})
const userId = computed(() => {
const value = route.params.user
return Array.isArray(value) ? (value[0] ?? '') : (value ?? '')
})
const projectType = computed(() => {
const value = route.params.projectType
return Array.isArray(value) ? value[0] : value
})
async function ensureUserProfileData(id: string): Promise<void> {
if (!id) return
let breadcrumbName = id
try {
const user = await queryClient.ensureQueryData({
queryKey: ['user', id],
queryFn: () => userProfile.getUser(id),
staleTime: 30_000,
})
breadcrumbName = user.username
} catch {
// Let the mounted layout's useQuery surface errors; do not fail route setup.
}
await Promise.allSettled([
queryClient.ensureQueryData({
queryKey: ['user', id, 'projects'],
queryFn: () => userProfile.getProjects(id),
staleTime: 30_000,
}),
queryClient.ensureQueryData({
queryKey: ['user', id, 'organizations'],
queryFn: () => userProfile.getOrganizations(id),
staleTime: 30_000,
}),
queryClient.ensureQueryData({
queryKey: ['user', id, 'collections'],
queryFn: () => userProfile.getCollections(id),
staleTime: 30_000,
}),
])
breadcrumbs.setName('User', breadcrumbName)
}
onBeforeRouteUpdate(async (to) => {
const value = to.params.user
const id = Array.isArray(value) ? (value[0] ?? '') : (value ?? '')
await ensureUserProfileData(id)
})
breadcrumbs.setName('User', userId.value)
await ensureUserProfileData(userId.value)
const { data: user } = useQuery({
queryKey: computed(() => ['user', userId.value]),
queryFn: () => userProfile.getUser(userId.value),
enabled: false,
staleTime: 30_000,
})
watch(
[userId, user],
([currentUserId, value]) => {
breadcrumbs.setName('User', value?.username ?? currentUserId)
},
{ immediate: true },
)
</script>
@@ -5,7 +5,6 @@ import {
ServersManageAccessPage,
} from '@modrinth/ui'
import { useQueryClient } from '@tanstack/vue-query'
import { openUrl } from '@tauri-apps/plugin-opener'
const client = injectModrinthClient()
const { serverId } = injectModrinthServerContext()
@@ -29,7 +28,7 @@ try {
}
function userProfileLink(username: string) {
return () => openUrl(`https://modrinth.com/user/${encodeURIComponent(username)}`)
return `/user/${encodeURIComponent(username)}`
}
</script>
+2 -1
View File
@@ -2,6 +2,7 @@ import Browse from './Browse.vue'
import Index from './Index.vue'
import Servers from './Servers.vue'
import Skins from './Skins.vue'
import User from './User.vue'
import Worlds from './Worlds.vue'
export { Browse, Index, Servers, Skins, Worlds }
export { Browse, Index, Servers, Skins, User, Worlds }
+51 -5
View File
@@ -16,6 +16,8 @@
<UpdateToPlayModal ref="updateToPlayModal" :instance="instance" />
<SharedInstanceUpdateModal
ref="sharedInstanceUpdateModal"
@accepted="hideAcceptedSharedInstanceUpdate"
@complete="handleSharedInstanceUpdateComplete"
@shared-instance-unavailable="handleSharedInstanceUnavailable"
@report="(event) => reportSharedInstance(event, true)"
/>
@@ -62,8 +64,10 @@
:shared-instance-expected-user-id="sharedInstanceExpectedUserId"
:shared-instance-role="instance.shared_instance?.role"
:shared-instance-signed-out="sharedInstanceSignedOut"
:shared-instance-update-available="showSharedInstanceUpdateAdmonition"
@published="fetchInstance"
@delete="requestInstanceDeletion"
@review-update="reviewSharedInstanceUpdate"
/>
</div>
<div :class="['p-6 pt-4', { 'min-h-0 flex-1 overflow-y-auto': isFixedRender }]">
@@ -223,6 +227,7 @@ const sharedInstanceUpdateModal = ref<InstanceType<typeof SharedInstanceUpdateMo
const sharedInstanceReportModal = ref<InstanceType<typeof SharedInstanceInstallModal>>()
const deleteConfirmModal = ref<InstanceType<typeof ConfirmDeleteInstanceModal>>()
const selectedInstanceToDelete = ref<GameInstance | null>(null)
const hiddenSharedInstanceUpdateKey = ref<string | null>(null)
const { notifySharedInstanceError, notifySharedInstanceUnavailable } = useSharedInstanceErrors()
@@ -253,8 +258,19 @@ const {
signedOut: sharedInstanceSignedOut,
unavailableManager: sharedInstanceUnavailableManager,
unavailableReason: sharedInstanceUnavailableReason,
updatePreview: sharedInstanceUpdatePreview,
wrongAccount: sharedInstanceWrongAccount,
} = sharedInstanceState
const sharedInstanceUpdateKey = computed(() => {
const instanceId = instance.value?.id
const latestVersion = sharedInstanceUpdatePreview.value?.latestVersion
return instanceId && latestVersion !== undefined ? `${instanceId}:${latestVersion}` : null
})
const showSharedInstanceUpdateAdmonition = computed(
() =>
sharedInstanceUpdatePreview.value?.updateAvailable === true &&
sharedInstanceUpdateKey.value !== hiddenSharedInstanceUpdateKey.value,
)
watch(
() => router.currentRoute.value,
@@ -530,6 +546,37 @@ async function handleSharedInstanceUnavailable(
setSharedInstanceUnavailable(reason)
}
function reviewSharedInstanceUpdate(event: MouseEvent) {
const currentInstance = instance.value
const preview = sharedInstanceUpdatePreview.value
if (
!currentInstance ||
currentInstance.shared_instance?.role !== 'member' ||
!preview?.updateAvailable
) {
return
}
sharedInstanceUpdateModal.value?.show(
currentInstance,
preview,
async () => {
await fetchInstance()
},
event,
)
}
function hideAcceptedSharedInstanceUpdate() {
hiddenSharedInstanceUpdateKey.value = sharedInstanceUpdateKey.value
}
function handleSharedInstanceUpdateComplete(successful: boolean) {
if (!successful && hiddenSharedInstanceUpdateKey.value === sharedInstanceUpdateKey.value) {
hiddenSharedInstanceUpdateKey.value = null
}
}
const startInstance = async (context: string) => {
if (!instance.value || instance.value.quarantined) return
if (checkingSharedInstanceLaunch.value || loading.value || playing.value) return
@@ -540,17 +587,16 @@ const startInstance = async (context: string) => {
!!instance.value.shared_instance && !sharedInstanceActionsLocked.value && !offline.value
if (canCheckSharedInstanceUpdate) {
let preview: Awaited<ReturnType<typeof refreshSharedInstanceUpdatePreview>>
let preview: Awaited<ReturnType<typeof refreshSharedInstanceUpdatePreview>> = null
checkingSharedInstanceLaunch.value = true
try {
preview = await refreshSharedInstanceUpdatePreview()
} catch (error) {
if (isSharedInstanceUnavailableError(error)) {
await handleSharedInstanceUnavailable(getSharedInstanceUnavailableReason(error))
} else {
notifySharedInstanceError(error)
return
}
return
notifySharedInstanceError(error)
} finally {
checkingSharedInstanceLaunch.value = false
}
@@ -657,7 +703,7 @@ async function reportSharedInstance(event?: MouseEvent, closeUpdateModal = false
if (closeUpdateModal) sharedInstanceUpdateModal.value?.hide()
sharedInstanceReportModal.value?.showReport(preview, event)
} catch (error) {
handleError(error as Error)
notifySharedInstanceError(error)
}
}
@@ -198,6 +198,13 @@ const messages = defineMessages({
let savedModalState: ModpackContentModalState | null = null
function contentOwnerLink(owner: ContentOwner): NonNullable<ContentOwner['link']> {
if (owner.type === 'user') return `/user/${encodeURIComponent(owner.id)}`
return () => {
void openUrl(`https://modrinth.com/organization/${owner.id}`)
}
}
const { formatMessage } = useVIntl()
const { handleError, addNotification } = injectNotificationManager()
const { installingItems, installRevisionByInstance, installFailureRevisionByInstance } =
@@ -1390,10 +1397,7 @@ provideContentManager({
owner: linkedModpackOwner.value
? {
...linkedModpackOwner.value,
link: () =>
openUrl(
`https://modrinth.com/${linkedModpackOwner.value!.type}/${linkedModpackOwner.value!.id}`,
),
link: contentOwnerLink(linkedModpackOwner.value),
}
: undefined,
categories: linkedModpackCategories.value,
@@ -1491,7 +1495,7 @@ provideContentManager({
owner: item.owner
? {
...item.owner,
link: () => openUrl(`https://modrinth.com/${item.owner!.type}/${item.owner!.id}`),
link: contentOwnerLink(item.owner),
}
: undefined,
enabled: canMutateContent(item) ? item.enabled : undefined,
@@ -9,9 +9,19 @@
:link="inviteLink.link.value"
:link-expires-at="inviteLink.details.value?.expiresAt"
:link-max-uses="inviteLink.details.value?.maxUses"
:link-max-uses-limit="remainingUserSlots"
:update-invite-link="inviteLink.update"
:user-profile-link="userProfileLink"
:can-invite="!members.exclusiveMutationPending.value && !inviteLink.pending.value"
:can-invite="
hasRemainingUserSlots &&
!members.exclusiveMutationPending.value &&
!inviteLink.pending.value
"
:invite-disabled-message="
hasRemainingUserSlots
? undefined
: formatMessage(messages.userLimitReached, { limit: SHARED_INSTANCE_USER_LIMIT })
"
@invite="invitePlayer"
@cancel="cancelInvite"
/>
@@ -37,10 +47,19 @@
@state-change="publishState = $event"
/>
<SharedInstanceShareEmptyState
v-if="unableToConnect"
:heading="formatMessage(messages.unableToConnectHeading)"
:description="formatMessage(messages.unableToConnectDescription)"
/>
<div v-else-if="membersTableLoading" class="h-64" aria-hidden="true" />
<SharedInstanceMembersTable
v-if="members.rows.value.length > 0"
v-else-if="showMembersTable"
:rows="members.rows.value"
:actions-locked="sharedInstanceActionsLocked"
:invite-disabled="!hasRemainingUserSlots"
:invite-pending="inviteLink.pending.value"
:push-update-disabled="
instance.install_stage !== 'installed' || publishState !== 'idle' || !!offline
@@ -107,7 +126,7 @@
<ButtonStyled color="brand"
><button
class="!h-10"
:disabled="inviteLink.pending.value"
:disabled="inviteLink.pending.value || !hasRemainingUserSlots"
@click="showInvitePlayers($event)"
>
<SpinnerIcon
@@ -137,17 +156,17 @@ import {
type InvitePlayersUser,
useVIntl,
} from '@modrinth/ui'
import { useQueryClient } from '@tanstack/vue-query'
import { openUrl } from '@tauri-apps/plugin-opener'
import { useQuery, useQueryClient } from '@tanstack/vue-query'
import { computed, ref, toRef, watch } from 'vue'
import ModrinthAccountRequiredModal from '@/components/ui/modal/ModrinthAccountRequiredModal.vue'
import SharedInstancePublishModal from '@/components/ui/shared-instances/SharedInstancePublishModal.vue'
import {
getSharedInstanceUnavailableReason,
isSharedInstancesApiError,
isSharedInstanceUnavailableError,
} from '@/helpers/install'
import { edit } from '@/helpers/instance'
import { can_current_user_use_shared_instances, edit } from '@/helpers/instance'
import type { ModrinthAuthFlow } from '@/helpers/mr_auth.ts'
import {
sharedInstanceErrorMessages,
@@ -160,7 +179,7 @@ import { injectSharedInstanceState } from '../use-shared-instance-state'
import SharedInstanceMembersTable from './shared-instance-members-table.vue'
import SharedInstanceRemoveMemberModal from './shared-instance-remove-member-modal.vue'
import SharedInstanceShareEmptyState from './shared-instance-share-empty-state.vue'
import type { ShareRow } from './shared-instance-share-types'
import { SHARED_INSTANCE_USER_LIMIT, type ShareRow } from './shared-instance-share-types'
import { useSharedInstanceInviteCandidates } from './use-shared-instance-invite-candidates'
import { useSharedInstanceInviteLink } from './use-shared-instance-invite-link'
import { useSharedInstanceMembers } from './use-shared-instance-members'
@@ -183,6 +202,7 @@ const actionsLocked = sharedInstanceState.shareActionsLocked
const sharedInstanceActionsLocked = actionsLocked
const currentUserId = computed(() => auth.user.value?.id ?? null)
const isSignedIn = computed(() => !!auth.session_token.value)
const sharedInstancesApiUnavailable = ref(false)
const accountRequiredModal = ref<InstanceType<typeof ModrinthAccountRequiredModal>>()
const invitePlayersModal = ref<InstanceType<typeof InvitePlayersModal>>()
const unlinkModal = ref<InstanceType<typeof ConfirmUnlinkModal>>()
@@ -199,10 +219,22 @@ function notifyOperationError(error: unknown) {
sharedInstanceState.unavailableManager.value,
)
} else {
if (isSharedInstancesApiError(error)) sharedInstancesApiUnavailable.value = true
notifySharedInstanceError(error)
}
}
const eligibilityQuery = useQuery({
queryKey: computed(() => ['shared-instance-eligibility', currentUserId.value]),
queryFn: can_current_user_use_shared_instances,
enabled: () => isSignedIn.value && !!currentUserId.value,
retry: false,
staleTime: Infinity,
refetchOnMount: 'always',
refetchOnWindowFocus: false,
refetchOnReconnect: false,
})
const members = useSharedInstanceMembers({
instance,
currentUserId,
@@ -210,6 +242,10 @@ const members = useSharedInstanceMembers({
actionsLocked,
onError: notifyOperationError,
})
const remainingUserSlots = computed(() =>
Math.max(0, SHARED_INSTANCE_USER_LIMIT - members.rows.value.length),
)
const hasRemainingUserSlots = computed(() => remainingUserSlots.value > 0)
const {
inviteFriends,
search: searchInviteUsers,
@@ -222,6 +258,7 @@ const {
})
const inviteLink = useSharedInstanceInviteLink(
computed(() => props.instance.id),
remainingUserSlots,
notifyOperationError,
)
@@ -240,6 +277,29 @@ const lockedActionButton = computed(() =>
const sharedInstanceUnavailableReason = sharedInstanceState.unavailableReason
const sharedInstanceUnavailable = computed(() => !!sharedInstanceUnavailableReason.value)
const sharedInstanceUnavailableManager = sharedInstanceState.unavailableManager
const unableToConnect = computed(
() =>
sharedInstancesApiUnavailable.value ||
isSharedInstancesApiError(eligibilityQuery.error.value) ||
isSharedInstancesApiError(members.query.error.value),
)
const membersTableLoading = computed(
() =>
members.rows.value.length === 0 &&
!!props.instance.shared_instance &&
(members.query.data.value === undefined || members.query.isFetching.value) &&
!sharedInstanceUnavailable.value &&
!sharedInstanceActionsLocked.value,
)
const showMembersTable = computed(
() =>
members.rows.value.length > 0 ||
(!!props.instance.shared_instance &&
members.query.data.value !== undefined &&
!members.query.isFetching.value &&
!sharedInstanceUnavailable.value &&
!sharedInstanceActionsLocked.value),
)
const requiresUnlink = computed(
() =>
props.instance.link?.type === 'imported_modpack' &&
@@ -254,6 +314,15 @@ const importedModpackBackupTip = computed(() =>
const messages = defineMessages({
signInButton: { id: 'app.instance.share.sign-in.button', defaultMessage: 'Sign in' },
unableToConnectHeading: {
id: 'app.instance.share.unable-to-connect.heading',
defaultMessage: 'Unable to connect',
},
unableToConnectDescription: {
id: 'app.instance.share.unable-to-connect.description',
defaultMessage:
'The shared instances service is not accessible at the moment, please try again later',
},
noFriendsInvitedHeading: {
id: 'app.instance.share.empty.heading',
defaultMessage: 'No friends invited',
@@ -266,6 +335,10 @@ const messages = defineMessages({
id: 'app.instance.share.empty.invite-friends-button',
defaultMessage: 'Invite friends',
},
userLimitReached: {
id: 'app.instance.share.invite-modal.user-limit-reached',
defaultMessage: 'This instance has reached the {limit}-user limit.',
},
shareModalHeader: {
id: 'app.instance.share.invite-modal.heading',
defaultMessage: 'Share {name}',
@@ -305,7 +378,7 @@ const messages = defineMessages({
})
function invitePlayer(payload: InvitePlayersInvitePayload) {
if (actionsLocked.value) return
if (actionsLocked.value || !hasRemainingUserSlots.value) return
if (payload.source === 'search') void requestFriend(payload.user)
members.invite(payload.user)
}
@@ -316,6 +389,7 @@ function cancelInvite(user: InvitePlayersUser) {
async function showInvitePlayers(event?: MouseEvent) {
if (actionsLocked.value) return
if (!isSignedIn.value) return signInToShare(event)
if (!hasRemainingUserSlots.value) return
if (requiresUnlink.value) return unlinkModal.value?.show()
if (await inviteLink.ensure()) invitePlayersModal.value?.show(event)
}
@@ -342,9 +416,7 @@ function removeMember(row: ShareRow) {
members.remove(row.id)
}
function userProfileLink(username: string) {
return !username || username.includes('@')
? undefined
: () => openUrl(`https://modrinth.com/user/${encodeURIComponent(username)}`)
return !username || username.includes('@') ? undefined : `/user/${encodeURIComponent(username)}`
}
async function requestAuth(flow: ModrinthAuthFlow) {
await auth.requestSignIn(`/instance/${encodeURIComponent(props.instance.id)}/share`, flow, {
@@ -356,6 +428,20 @@ function signInToShare(event?: MouseEvent) {
void accountRequiredModal.value?.show(event)
}
watch(
[eligibilityQuery.error, members.query.error],
(errors) => {
for (const error of errors) {
if (isSharedInstancesApiError(error)) notifyOperationError(error)
}
},
{ immediate: true },
)
watch([eligibilityQuery.data, members.query.data], ([eligibility, memberRows]) => {
if (eligibility !== undefined && memberRows !== undefined) {
sharedInstancesApiUnavailable.value = false
}
})
watch(
() => props.instance.id,
() => {
@@ -25,7 +25,7 @@
<ButtonStyled color="brand">
<button
class="flex !h-10 shrink-0 items-center gap-2"
:disabled="invitePending"
:disabled="invitePending || inviteDisabled"
@click="emit('invite', $event)"
>
<SpinnerIcon v-if="invitePending" class="animate-spin" aria-hidden="true" />
@@ -35,7 +35,7 @@
</ButtonStyled>
</template>
</div>
<div class="flex flex-wrap items-center gap-1.5">
<div v-if="hasMultipleMethods" class="flex flex-wrap items-center gap-1.5">
<FilterIcon class="size-5 shrink-0 text-secondary" aria-hidden="true" />
<button
:class="filterClass(methodFilter === 'all')"
@@ -67,7 +67,9 @@
>
<template #empty-state
><div class="flex h-64 items-center justify-center text-secondary">
No users match your filters.
{{
formatMessage(rows.length === 0 ? messages.noUsersJoined : messages.noUsersMatchFilters)
}}
</div></template
>
<template #cell-username="{ row }">
@@ -157,8 +159,7 @@ import {
useRelativeTime,
useVIntl,
} from '@modrinth/ui'
import { openUrl } from '@tauri-apps/plugin-opener'
import { computed, ref } from 'vue'
import { computed, ref, watch } from 'vue'
import {
type MethodFilter,
@@ -171,6 +172,7 @@ import {
const props = defineProps<{
rows: ShareRow[]
actionsLocked?: boolean
inviteDisabled?: boolean
invitePending?: boolean
pushUpdateDisabled?: boolean
pushUpdatePending?: boolean
@@ -192,6 +194,7 @@ const methodFilterOptions: Array<{ id: ShareMethod; label: string }> = [
{ id: 'direct', label: methodLabels.direct },
{ id: 'link', label: methodLabels.link },
]
const hasMultipleMethods = computed(() => new Set(props.rows.map((row) => row.method)).size > 1)
const columns = computed<TableColumn<ShareTableColumn>[]>(() => {
const result: TableColumn<ShareTableColumn>[] = [
{
@@ -287,16 +290,26 @@ function filterClass(active: boolean) {
]
}
watch(hasMultipleMethods, (multiple) => {
if (!multiple) methodFilter.value = 'all'
})
const messages = defineMessages({
pushUpdate: {
id: 'app.instance.admonitions.shared-instance.publish-button',
defaultMessage: 'Push update',
},
noUsersJoined: {
id: 'app.instance.share.members.empty',
defaultMessage: 'No users have joined yet',
},
noUsersMatchFilters: {
id: 'app.instance.share.members.no-filter-results',
defaultMessage: 'No users match your filters.',
},
})
function userProfileLink(username: string) {
return !username || username.includes('@')
? undefined
: () => openUrl(`https://modrinth.com/user/${encodeURIComponent(username)}`)
return !username || username.includes('@') ? undefined : `/user/${encodeURIComponent(username)}`
}
function setUsernameRef(id: string, element: Element | null) {
usernameRefs.value[id] = element instanceof HTMLElement ? element : null
@@ -2,6 +2,8 @@ export type ShareMethod = 'direct' | 'link'
export type MethodFilter = ShareMethod | 'all'
export type ShareTableColumn = 'username' | 'lastPlayed' | 'joined' | 'method' | 'actions'
export const SHARED_INSTANCE_USER_LIMIT = 50
export type ShareRow = {
id: string
username: string
@@ -5,8 +5,11 @@ import { config } from '@/config'
import { toError } from '@/helpers/errors'
import { create_shared_instance_invite_link } from '@/helpers/instance'
const DEFAULT_INVITE_LINK_MAX_USES = 10
export function useSharedInstanceInviteLink(
instanceId: Ref<string>,
maxInviteUses: Ref<number>,
onError: (error: unknown) => void,
) {
const details = ref<Awaited<ReturnType<typeof create_shared_instance_invite_link>>>()
@@ -20,10 +23,12 @@ export function useSharedInstanceInviteLink(
async function ensure() {
if (details.value) return true
if (pending.value) return false
const maxUses = Math.min(DEFAULT_INVITE_LINK_MAX_USES, Math.floor(maxInviteUses.value))
if (maxUses <= 0) return false
pending.value = true
try {
details.value = await create_shared_instance_invite_link(instanceId.value)
details.value = await create_shared_instance_invite_link(instanceId.value, { maxUses })
return true
} catch (error) {
onError(error)
@@ -35,6 +40,8 @@ export function useSharedInstanceInviteLink(
async function update(settings: InviteLinkSettings) {
if (!details.value) return
const maxInviteLinkUses = Math.floor(maxInviteUses.value)
if (maxInviteLinkUses <= 0) return
pending.value = true
try {
@@ -44,7 +51,7 @@ export function useSharedInstanceInviteLink(
)
details.value = await create_shared_instance_invite_link(instanceId.value, {
maxAgeSeconds,
maxUses: settings.maxUses,
maxUses: Math.min(settings.maxUses, maxInviteLinkUses),
replaceInviteId: details.value.inviteId,
})
} catch (error) {
@@ -12,7 +12,11 @@ import {
} from '@/helpers/instance'
import type { GameInstance } from '@/helpers/types'
import { normalizeInviteKey, type ShareRow } from './shared-instance-share-types'
import {
normalizeInviteKey,
SHARED_INSTANCE_USER_LIMIT,
type ShareRow,
} from './shared-instance-share-types'
type MembersQueryKey = readonly ['sharedInstanceUsers', string]
@@ -54,6 +58,7 @@ export function useSharedInstanceMembers(options: {
queryFn: ({ queryKey }) => fetchRows(queryKey),
enabled: () =>
options.isSignedIn.value && !!options.instance.value.id && !options.actionsLocked.value,
retry: false,
staleTime: Infinity,
refetchOnMount: 'always',
refetchOnReconnect: false,
@@ -139,6 +144,7 @@ export function useSharedInstanceMembers(options: {
if (
options.actionsLocked.value ||
exclusiveMutationPending.value ||
rows.value.length >= SHARED_INSTANCE_USER_LIMIT ||
invitingUserIds.has(normalizedId) ||
find(user.id, user.username)
) {
@@ -31,8 +31,9 @@
:organization="organization"
:members="members"
:org-link="(slug) => `https://modrinth.com/organization/${slug}`"
:user-link="(username) => `https://modrinth.com/user/${username}`"
:user-link="(username) => `/user/${encodeURIComponent(username)}`"
link-target="_blank"
:user-link-target="null"
class="project-sidebar-section"
/>
<ProjectSidebarDetails
@@ -475,7 +475,7 @@ export function createContentInstall(opts: {
name: owner.user.username,
iconUrl: owner.user.avatar_url,
circle: true,
link: () => openUrl(`https://modrinth.com/user/${owner.user.username}`),
link: `/user/${encodeURIComponent(owner.user.username)}`,
},
}
}
@@ -108,7 +108,7 @@ function getQueuedInstallOwnerFallback(project: InstallableSearchResult) {
id: ownerId,
name: project.author,
type: 'user' as const,
link: `https://modrinth.com/user/${ownerId}`,
link: `/user/${encodeURIComponent(ownerId)}`,
}
}
@@ -144,7 +144,7 @@ async function getQueuedInstallOwner(
name: owner.username,
type: 'user' as const,
avatar_url: owner.avatar_url,
link: `https://modrinth.com/user/${owner.username}`,
link: `/user/${encodeURIComponent(owner.username)}`,
}
}
} catch {
+8
View File
@@ -100,6 +100,14 @@ export default new createRouter({
breadcrumb: [{ name: 'Skin selector' }],
},
},
{
path: '/user/:user/:projectType?',
name: 'User',
component: Pages.User,
meta: {
breadcrumb: [{ name: '?User' }],
},
},
{
path: '/library',
name: 'Library',
+2 -1
View File
@@ -17,9 +17,10 @@ export const DEFAULT_FEATURE_FLAGS = {
i18n_debug: false,
show_instance_play_time: true,
advanced_filters_collapsed: true,
always_show_copy_details: false,
}
export const THEME_OPTIONS = ['dark', 'light', 'oled', 'system'] as const
export const THEME_OPTIONS = ['dark', 'light', 'oled', 'retro', 'system'] as const
export type FeatureFlag = keyof typeof DEFAULT_FEATURE_FLAGS
export type FeatureFlags = Record<FeatureFlag, boolean>
+2 -2
View File
@@ -55,11 +55,11 @@ core-foundation.workspace = true
core-graphics.workspace = true
objc2-app-kit = { workspace = true, features = ["NSWindow"] }
[target.'cfg(windows)'.dependencies]
[target."cfg(windows)".dependencies]
webview2-com.workspace = true
windows-core.workspace = true
[target.'cfg(windows)'.dependencies.windows]
[target."cfg(windows)".dependencies.windows]
workspace = true
features = [
"Win32_Foundation",
+10 -1
View File
@@ -227,6 +227,8 @@ fn main() {
"instance_share_get_users",
"instance_share_invite_users",
"instance_share_create_invite_link",
"instance_share_get_invites",
"instance_share_revoke_invite",
"instance_share_remove_users",
"instance_share_get_publish_preview",
"instance_share_publish",
@@ -276,7 +278,14 @@ fn main() {
.plugin(
"users",
InlinedPlugin::new()
.commands(&["search_user"])
.commands(&[
"search_user",
"get_user_profile",
"get_user_projects",
"get_user_organizations",
"get_user_collections",
"patch_user",
])
.default_permission(
DefaultPermissionRule::AllowAllCommands,
),
+23
View File
@@ -56,6 +56,8 @@ pub fn init<R: tauri::Runtime>() -> tauri::plugin::TauriPlugin<R> {
instance_share_get_users,
instance_share_invite_users,
instance_share_create_invite_link,
instance_share_get_invites,
instance_share_revoke_invite,
instance_share_remove_users,
instance_share_get_publish_preview,
instance_share_publish,
@@ -825,6 +827,27 @@ pub async fn instance_share_create_invite_link(
.await?)
}
#[tauri::command]
pub async fn instance_share_get_invites(
instance_id: &str,
) -> Result<Vec<theseus::instance::SharedInstanceInvite>> {
Ok(theseus::instance::get_shared_instance_invites(instance_id).await?)
}
#[tauri::command]
pub async fn instance_share_revoke_invite(
instance_id: &str,
invite_id: String,
) -> Result<()> {
Ok(
theseus::instance::revoke_shared_instance_invite(
instance_id,
invite_id,
)
.await?,
)
}
#[tauri::command]
pub async fn instance_share_remove_users(
instance_id: &str,
+13 -2
View File
@@ -91,14 +91,25 @@ macro_rules! impl_serialize {
theseus::ErrorKind::SharedInstanceUnavailable(reason) => Some(reason),
_ => None,
};
let code = match theseus_error.raw.as_ref() {
theseus::ErrorKind::SharedInstanceUnavailable(_) => {
Some("shared_instance_unavailable")
}
theseus::ErrorKind::SharedInstancesApiError(_) => {
Some("shared_instances_api_error")
}
_ => None,
};
let mut state = serializer.serialize_struct(
"Theseus",
if unavailable_reason.is_some() { 4 } else { 2 },
2 + usize::from(code.is_some()) + usize::from(unavailable_reason.is_some()),
)?;
state.serialize_field("field_name", "Theseus")?;
state.serialize_field("message", &theseus_error.to_string())?;
if let Some(code) = code {
state.serialize_field("code", code)?;
}
if let Some(reason) = unavailable_reason {
state.serialize_field("code", "shared_instance_unavailable")?;
state.serialize_field("reason", reason)?;
}
state.end()
+34 -1
View File
@@ -1,4 +1,5 @@
use crate::api::Result;
use serde_json::Value;
use theseus::users::SearchUser;
#[tauri::command]
@@ -6,8 +7,40 @@ pub async fn search_user(query: &str) -> Result<Vec<SearchUser>> {
Ok(theseus::users::search_user(query).await?)
}
#[tauri::command]
pub async fn get_user_profile(user_id: &str) -> Result<Value> {
Ok(theseus::users::get_user_profile(user_id).await?)
}
#[tauri::command]
pub async fn get_user_projects(user_id: &str) -> Result<Value> {
Ok(theseus::users::get_user_projects(user_id).await?)
}
#[tauri::command]
pub async fn get_user_organizations(user_id: &str) -> Result<Value> {
Ok(theseus::users::get_user_organizations(user_id).await?)
}
#[tauri::command]
pub async fn get_user_collections(user_id: &str) -> Result<Value> {
Ok(theseus::users::get_user_collections(user_id).await?)
}
#[tauri::command]
pub async fn patch_user(user_id: &str, patch: Value) -> Result<()> {
Ok(theseus::users::patch_user(user_id, patch).await?)
}
pub fn init<R: tauri::Runtime>() -> tauri::plugin::TauriPlugin<R> {
tauri::plugin::Builder::new("users")
.invoke_handler(tauri::generate_handler![search_user])
.invoke_handler(tauri::generate_handler![
search_user,
get_user_profile,
get_user_projects,
get_user_organizations,
get_user_collections,
patch_user,
])
.build()
}
+7 -3
View File
@@ -280,15 +280,19 @@ html {
}
.retro-mode {
--color-bg: #191917;
--color-raised-bg: #1d1e1b;
--surface-1: #191917;
--surface-2: rgb(22, 22, 21);
--surface-3: #232421;
--surface-4: #3a3b38;
--surface-5: #5a5c58;
--color-button-bg: #3a3b38;
--color-base: #c3c4b3;
--color-secondary: #777a74;
--color-secondary: #9b9e98;
--color-contrast: #e6e2d1;
--color-brand: #4d9227;
--color-brand-highlight: #25421e;
--color-accent-contrast: #ffffff;
--color-ad: var(--color-brand-highlight);
--color-ad-raised: var(--color-brand);
--color-ad-contrast: black;
@@ -590,6 +590,7 @@ onBeforeUnmount(() => {
})
</script>
<template><div></div></template>
<style>
html.modrinth-cmp-summary-hidden .qc-cmp2-container,
html.modrinth-cmp-summary-hidden #qc-cmp2-container,
@@ -0,0 +1,165 @@
<template>
<div class="rounded-2xl border border-solid border-surface-4 bg-surface-3">
<div class="flex flex-col gap-2 border-0 border-b border-solid border-surface-4 p-4">
<div class="flex flex-wrap justify-between gap-3">
<div class="flex items-center gap-3">
<Avatar :src="authorization.app.icon_url" size="48px" />
<div class="flex flex-col gap-0.5">
<h2 class="m-0 flex items-center gap-1 text-base font-semibold">
{{ authorization.app.name }}
<BadgeCheckIcon
v-if="isOfficial"
v-tooltip="formatMessage(messages.officialTooltip)"
class="size-5 text-green"
fill="currentColor"
fill-opacity="0.125"
/>
</h2>
<PageHeaderMetadata>
<PageHeaderMetadataItem>
<IntlFormatted :message-id="messages.byLabel">
<template #~user>
<nuxt-link
:to="'/user/' + authorization.owner.id"
class="flex items-center gap-1 hover:underline"
target="_blank"
>
<Avatar :src="authorization.owner.avatar_url" size="24px" circle />
{{ authorization.owner.username }}
</nuxt-link>
</template>
</IntlFormatted>
</PageHeaderMetadataItem>
<PageHeaderMetadataItem v-if="authorization.app.url">
<a class="text-link" :to="authorization.app.url" target="_blank">
{{ authorization.app.url }}
</a>
</PageHeaderMetadataItem>
</PageHeaderMetadata>
</div>
</div>
<div>
<ButtonStyled color="red">
<button @click="emit('revoke', authorization.app_id)">
<XCircleIcon />
{{ formatMessage(messages.revokeAction) }}
</button>
</ButtonStyled>
</div>
</div>
<div v-if="showUnofficialDisclosure" class="flex items-center gap-1 text-orange">
<IssuesIcon />
{{ formatMessage(messages.unofficialDisclosure) }}
</div>
</div>
<div class="rounded-b-2xl bg-surface-2 p-4">
<template v-if="authorization.app.description">
<label :for="descriptionId" class="mb-1 flex font-semibold text-contrast">
{{ formatMessage(messages.aboutThisAppLabel) }}
</label>
<div :id="descriptionId" class="mb-4">{{ authorization.app.description }}</div>
</template>
<label :for="scopeListId" class="mb-1 flex font-semibold text-contrast">
{{ formatMessage(commonMessages.permissionsLabel) }}
</label>
<div :id="scopeListId" class="grid gap-1 sm:grid-cols-2">
<div
v-for="scope in scopesToDefinitions(BigInt(authorization.scopes || 0))"
:key="scope"
class="flex items-center gap-1"
>
<CheckIcon class="size-5 shrink-0 text-green" />
{{ scope }}
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import type { Labrinth } from '@modrinth/api-client'
import { BadgeCheckIcon, CheckIcon, IssuesIcon, XCircleIcon } from '@modrinth/assets'
import {
Avatar,
ButtonStyled,
commonMessages,
defineMessages,
IntlFormatted,
PageHeaderMetadata,
PageHeaderMetadataItem,
useVIntl,
} from '@modrinth/ui'
import { isOfficialAccount } from '@modrinth/utils'
import { useScopes } from '~/composables/auth/scopes.ts'
export type AuthorizationCardData = Labrinth.OAuth.Internal.OAuthClientAuthorization & {
app: Labrinth.OAuth.Internal.OAuthClient
owner: Labrinth.Users.v2.User
}
const props = defineProps<{
authorization: AuthorizationCardData
}>()
const emit = defineEmits<{
revoke: [appId: string]
}>()
const { formatMessage } = useVIntl()
const { scopesToDefinitions } = useScopes()
const descriptionId = computed(() => `app-description-${props.authorization.id}`)
const scopeListId = computed(() => `app-scope-list-${props.authorization.id}`)
const unofficialTriggerWords = [
'modrinth',
'mod rinth',
'rnodrinth',
'rinth',
'modrith',
'official',
'verified',
'verification',
]
const showUnofficialDisclosure = computed(() => {
return (
(unofficialTriggerWords.some((word) =>
props.authorization.app.name.toLowerCase().includes(word),
) ||
unofficialTriggerWords.some((word) =>
props.authorization.owner.username?.toLowerCase().includes(word),
)) &&
!isOfficial.value
)
})
const isOfficial = computed(() => {
return isOfficialAccount(props.authorization.owner.id)
})
const messages = defineMessages({
revokeAction: {
id: 'settings.authorizations.revoke.action',
defaultMessage: 'Revoke',
},
byLabel: {
id: 'settings.authorizations.created-by',
defaultMessage: 'Created by {user}',
},
aboutThisAppLabel: {
id: 'settings.authorizations.about-this-app',
defaultMessage: 'About this app',
},
unofficialDisclosure: {
id: 'settings.authorizations.unofficial-disclosure',
defaultMessage: 'This app is not affiliated with Modrinth in any way, despite its name.',
},
officialTooltip: {
id: 'settings.authorizations.official-tooltip',
defaultMessage: 'This app is created by an official Modrinth account.',
},
})
</script>
@@ -604,13 +604,18 @@ async function loadSharedInstanceVersionContent(
dependency.project_id ? [dependency.project_id] : [],
)
const projectIds = [
...new Set([...versions.map((version) => version.project_id), ...dependencyProjectIds]),
...new Set([
...versions.map((version) => version.project_id),
...dependencyProjectIds,
...(modpackVersion ? [modpackVersion.project_id] : []),
]),
]
const projects = projectIds.length
? await client.labrinth.projects_v2.getMultiple(projectIds)
: []
const versionsById = new Map(versions.map((version) => [version.id, version]))
const projectsById = new Map(projects.map((project) => [project.id, project]))
const modpackProject = modpackVersion ? projectsById.get(modpackVersion.project_id) : undefined
const directContent: ContentItem[] = [...new Set(directVersionIds)].flatMap((versionId) => {
const version = versionsById.get(versionId)
@@ -633,13 +638,19 @@ async function loadSharedInstanceVersionContent(
const fileName =
primaryFile?.filename ?? dependency.file_name ?? project?.title ?? version?.name ?? 'Unknown'
return sharedInstanceContentItem(
const item = sharedInstanceContentItem(
version,
project,
fileName,
dependency.project_id ?? fileName,
!project && !version,
)
return modpackProject
? {
...item,
source: { project: modpackProject },
}
: item
})
const externalContent: ContentItem[] = instanceVersion.external_files.map((file, index) => ({
@@ -1,8 +1,16 @@
<script setup lang="ts">
import type { Labrinth } from '@modrinth/api-client'
import { FolderSearchIcon, StarIcon, TrashIcon } from '@modrinth/assets'
import {
FolderSearchIcon,
RotateCounterClockwiseIcon,
SpinnerIcon,
StarIcon,
TrashIcon,
} from '@modrinth/assets'
import {
ButtonStyled,
Combobox,
type ComboboxOption,
ConfirmModal,
defineMessages,
injectModrinthClient,
@@ -12,6 +20,7 @@ import {
type TableColumn,
useVIntl,
} from '@modrinth/ui'
import { renderString } from '@modrinth/utils'
import { useQueryClient } from '@tanstack/vue-query'
import { computed, ref, useTemplateRef } from 'vue'
@@ -52,6 +61,10 @@ const messages = defineMessages({
id: 'modpack-scan-modal.scanning',
defaultMessage: 'Scanning...',
},
success: {
id: 'modpack-scan-modal.success',
defaultMessage: 'Success',
},
failed: {
id: 'modpack-scan-modal.failed',
defaultMessage: 'Failed',
@@ -66,11 +79,40 @@ const messages = defineMessages({
},
scanError: {
id: 'modpack-scan-modal.scan-error',
defaultMessage: 'Some files failed to scan: {error}',
defaultMessage: 'Some files failed to scan: \n\n{error}',
},
clearAllGroups: {
id: 'modpack-scan-modal.clear-all-groups',
defaultMessage: 'Clear All Groups',
batchPlaceholder: {
id: 'modpack-scan-modal.batch.placeholder',
defaultMessage: 'Batch amount',
},
batchLabel: {
id: 'modpack-scan-modal.batch.label',
defaultMessage: '{amount} per batch',
},
deleteAllGroups: {
id: 'project.settings.permissions.delete-all-groups',
defaultMessage: 'Delete all groups',
},
deleteAllGroupsConfirmationTitle: {
id: 'project.settings.permissions.delete-all-groups-confirmation.title',
defaultMessage: 'Delete all attribution groups?',
},
deleteAllGroupsConfirmationDescription: {
id: 'modpack-scan-modal.delete-all-groups-confirmation.description',
defaultMessage:
'This will permanently delete all attribution groups for this project and all files inside them. This action cannot be undone.',
},
deleteAllGroupsConfirmationProceed: {
id: 'modpack-scan-modal.delete-all-groups.proceed',
defaultMessage: 'Clear',
},
deleteAllGroupsSuccess: {
id: 'modpack-scan-modal.delete-all-groups.success',
defaultMessage: 'All groups cleared successfully.',
},
deleteAllGroupsError: {
id: 'modpack-scan-modal.delete-all-groups.error',
defaultMessage: 'Failed to clear all groups: {error}',
},
})
@@ -98,23 +140,64 @@ const modalRef = useTemplateRef<InstanceType<typeof NewModal>>('modalRef')
const clearModalRef = useTemplateRef<InstanceType<typeof ConfirmModal>>('clearModalRef')
const { formatMessage } = useVIntl()
const rows = ref<ScanRow[]>([])
const rows = ref<Record<string, ScanRow>>({})
const isLoadingVersions = ref(false)
const isScanning = ref(false)
const isClearing = ref(false)
const versionLoadError = ref<string | null>(null)
const scanError = ref<string | null>(null)
const requestId = ref(0)
const scanRequestId = ref(0)
const DEFAULT_BATCH_AMOUNT = 10
const batchAmountOptions: ComboboxOption<number>[] = [
{ value: 1, label: '1' },
{ value: 5, label: '5' },
{ value: 10, label: '10' },
{ value: 20, label: '20' },
{ value: 50, label: '50' },
]
const batchAmountValues = batchAmountOptions.map((opt) => opt.value)
const batchAmountCookie = useCookie<number>('moderation-modpack-scan-batch', {
default: () => DEFAULT_BATCH_AMOUNT,
maxAge: 60 * 60 * 24 * 365,
sameSite: 'lax',
path: '/',
})
const batchAmount = computed({
get() {
const value = Number(batchAmountCookie.value)
return batchAmountValues.includes(value) ? value : DEFAULT_BATCH_AMOUNT
},
set(value: number) {
batchAmountCookie.value = value
},
})
const columns = computed<TableColumn<ScanTableColumn>[]>(() => [
{ key: 'filename', label: formatMessage(messages.packFileName), width: '60%' },
{ key: 'newFiles', label: formatMessage(messages.newFiles), align: 'center', width: '20%' },
{ key: 'newGroups', label: formatMessage(messages.newGroups), align: 'center', width: '20%' },
])
const scannedCount = computed(() => rows.value.filter((row) => row.scan || row.error).length)
const scannedCount = computed(
() => Object.entries(rows.value).filter(([_, row]) => row.scan || row.error).length,
)
const isBusy = computed(() => isLoadingVersions.value || isScanning.value || isClearing.value)
const titleButtonsDisabled = computed(() => isBusy.value || Object.keys(rows.value).length === 0)
const rescanButtonsDisabled = computed(() => isLoadingVersions.value || isClearing.value)
const rowErrors = computed(() =>
Object.entries(rows.value)
.filter(([_, row]) => row.error)
.map(([_, row]) => row),
)
const rowScanError = computed(() => {
if (rowErrors.value.length === 0) return undefined
return formatMessage(messages.scanError, {
error: rowErrors.value.map((r) => `\n - ${r.filename}`).join(''),
})
})
function getErrorMessage(error: unknown) {
if (error instanceof Error) {
@@ -131,12 +214,27 @@ function getErrorMessage(error: unknown) {
return String(error)
}
async function runWithConcurrency<T>(
items: T[],
limit: number,
task: (item: T) => Promise<void>,
): Promise<void> {
const queue = [...items]
const workers = Array.from({ length: limit }, async () => {
while (queue.length) {
const item = queue.shift()
if (item === undefined) return
await task(item)
}
})
await Promise.all(workers)
}
async function fetchAllVersions() {
const currentRequestId = ++requestId.value
isLoadingVersions.value = true
versionLoadError.value = null
scanError.value = null
rows.value = []
rows.value = {}
try {
const versions = await client.labrinth.versions_v2.getProjectVersions(props.project_id)
@@ -144,17 +242,20 @@ async function fetchAllVersions() {
return
}
rows.value = versions
const filteredVersions = versions
.flatMap((version) => version.files)
.filter((file): file is Labrinth.Versions.v2.VersionFile & { id: string } => Boolean(file.id))
.map((file) => ({
id: file.id,
filename: file.filename,
primary: file.primary,
for (const version of filteredVersions) {
rows.value[version.id] = {
id: version.id,
filename: version.filename,
primary: version.primary,
isScanning: false,
newFiles: undefined,
newGroups: undefined,
}))
}
}
} catch (error) {
if (currentRequestId === requestId.value) {
versionLoadError.value = formatMessage(messages.loadVersionsError, {
@@ -168,54 +269,45 @@ async function fetchAllVersions() {
}
}
async function fetchScan(id: string) {
rows.value[id].isScanning = true
try {
const scan = await client.labrinth.attribution_internal.scanFile(id)
rows.value[id].scan = scan
rows.value[id].newFiles = scan.new_attribution_files
rows.value[id].newGroups = scan.new_attribution_groups
rows.value[id].error = undefined
} catch (error) {
rows.value[id].error = getErrorMessage(error)
} finally {
rows.value[id].isScanning = false
}
}
async function fetchAllScans() {
if (isBusy.value) {
return
}
if (isBusy.value) return
const currentScanRequestId = ++scanRequestId.value
isScanning.value = true
scanError.value = null
rows.value = rows.value.map((row) => ({
...row,
scan: undefined,
isScanning: false,
error: undefined,
newFiles: undefined,
newGroups: undefined,
}))
Object.entries(rows.value).map(([id, row]) => {
rows.value[id] = {
...row,
scan: undefined,
isScanning: false,
error: undefined,
newFiles: undefined,
newGroups: undefined,
}
})
try {
for (const row of rows.value) {
if (currentScanRequestId !== scanRequestId.value) {
return
}
row.isScanning = true
try {
const scan = await client.labrinth.attribution_internal.scanFile(row.id)
if (currentScanRequestId !== scanRequestId.value) {
return
}
row.scan = scan
row.newFiles = scan.new_attribution_files
row.newGroups = scan.new_attribution_groups
} catch (error) {
if (currentScanRequestId !== scanRequestId.value) {
return
}
row.error = getErrorMessage(error)
scanError.value = formatMessage(messages.scanError, { error: row.error })
} finally {
row.isScanning = false
}
}
await runWithConcurrency(Object.keys(rows.value), batchAmount.value, async (id: string) => {
await fetchScan(id)
})
} finally {
if (currentScanRequestId === scanRequestId.value) {
isScanning.value = false
}
isScanning.value = false
}
}
@@ -242,8 +334,8 @@ async function clearAllGroups() {
failed = true
addNotification({
type: 'error',
title: 'An error occurred',
text: `Failed to clear all groups: ${getErrorMessage(error)}`,
title: formatMessage(messages.failed),
text: formatMessage(messages.deleteAllGroupsError, { error: getErrorMessage(error) }),
})
} finally {
isClearing.value = false
@@ -252,8 +344,8 @@ async function clearAllGroups() {
if (!failed) {
addNotification({
type: 'success',
title: 'Success',
text: 'All groups cleared successfully.',
title: formatMessage(messages.success),
text: formatMessage(messages.deleteAllGroupsSuccess),
})
}
}
@@ -261,7 +353,7 @@ async function clearAllGroups() {
function show() {
scanRequestId.value++
isScanning.value = false
rows.value = []
rows.value = {}
void fetchAllVersions()
modalRef.value?.show()
}
@@ -275,9 +367,9 @@ defineExpose({ show, hide })
<template>
<ConfirmModal
ref="clearModalRef"
title="Clear all permission groups?"
description="This will clear **all** groups for this project. This action cannot be undone."
proceed-label="Clear"
:title="formatMessage(messages.deleteAllGroupsConfirmationTitle)"
:description="formatMessage(messages.deleteAllGroupsConfirmationDescription)"
:proceed-label="formatMessage(messages.deleteAllGroupsConfirmationProceed)"
@proceed="clearAllGroups"
/>
@@ -294,27 +386,43 @@ defineExpose({ show, hide })
{{
formatMessage(messages.title, {
scanned: scannedCount,
total: rows.length,
total: Object.keys(rows).length,
})
}}
</span>
<div class="flex items-center gap-2">
<Combobox
v-model="batchAmount"
:options="batchAmountOptions"
:disabled="titleButtonsDisabled"
:placeholder="formatMessage(messages.batchPlaceholder)"
>
<template #selected>
<span class="flex flex-row gap-2 align-middle font-semibold">
<span class="truncate text-contrast">{{
formatMessage(messages.batchLabel, { amount: batchAmount })
}}</span>
</span>
</template>
</Combobox>
<ButtonStyled circular color="red" color-fill="none">
<button
v-tooltip="formatMessage(messages.clearAllGroups)"
:disabled="isBusy || rows.length === 0"
v-tooltip="formatMessage(messages.deleteAllGroups)"
:disabled="titleButtonsDisabled"
@click="showConfirmClearGroups"
>
<TrashIcon aria-hidden="true" />
<TrashIcon v-if="!isClearing" aria-hidden="true" />
<SpinnerIcon v-else class="animate-spin" />
</button>
</ButtonStyled>
<ButtonStyled circular>
<button
v-tooltip="formatMessage(messages.scanAllFiles)"
:disabled="isBusy || rows.length === 0"
:disabled="titleButtonsDisabled"
@click="fetchAllScans"
>
<FolderSearchIcon aria-hidden="true" />
<FolderSearchIcon v-if="!isScanning" aria-hidden="true" />
<SpinnerIcon v-else class="animate-spin" />
</button>
</ButtonStyled>
</div>
@@ -323,14 +431,14 @@ defineExpose({ show, hide })
<div class="w-full">
<div
v-if="versionLoadError || scanError"
class="mb-3 rounded-xl bg-highlight-red p-3 text-red"
v-if="versionLoadError || rowScanError"
class="mb-3 rounded-xl bg-highlight-red px-4 py-1 text-red"
>
{{ versionLoadError || scanError }}
<div v-html="renderString((versionLoadError || rowScanError) ?? '')"></div>
</div>
<Table
:columns="columns"
:data="rows"
:data="Object.entries(rows).map(([_, row]) => row)"
row-key="id"
:row-below-visible="
(row) => Boolean(row.scan?.scanned_file_names && row.scan.scanned_file_names.length > 0)
@@ -345,16 +453,36 @@ defineExpose({ show, hide })
</template>
<template #cell-newFiles="{ row }">
<span v-if="row.isScanning">{{ formatMessage(messages.scanning) }}</span>
<span v-else-if="row.error" v-tooltip="row.error" class="text-red">
{{ formatMessage(messages.failed) }}
<span v-else-if="row.error" v-tooltip="row.error" class="flex justify-center">
<ButtonStyled
class="justify-self-center"
color="red"
type="outlined"
hover-color-fill="background"
>
<button :disabled="rescanButtonsDisabled" @click="() => fetchScan(row.id)">
<RotateCounterClockwiseIcon />
{{ formatMessage(messages.failed) }}
</button>
</ButtonStyled>
</span>
<span v-else-if="row.scan">{{ row.scan.new_attribution_files }}</span>
<span v-else>{{ formatMessage(messages.notScanned) }}</span>
</template>
<template #cell-newGroups="{ row }">
<span v-if="row.isScanning">{{ formatMessage(messages.scanning) }}</span>
<span v-else-if="row.error" v-tooltip="row.error" class="text-red">
{{ formatMessage(messages.failed) }}
<span v-else-if="row.error" v-tooltip="row.error" class="flex justify-center">
<ButtonStyled
class="justify-self-center"
color="red"
type="outlined"
hover-color-fill="background"
>
<button :disabled="rescanButtonsDisabled" @click="() => fetchScan(row.id)">
<RotateCounterClockwiseIcon />
{{ formatMessage(messages.failed) }}
</button>
</ButtonStyled>
</span>
<span v-else-if="row.scan">{{ row.scan.new_attribution_groups }}</span>
<span v-else>{{ formatMessage(messages.notScanned) }}</span>
@@ -64,11 +64,18 @@
</template>
</div>
<div v-else-if="report.item_type === 'shared-instance'" class="item-info">
<div class="backed-svg" :class="{ raised: raised }">
<Avatar
v-if="report.shared_instance"
:src="report.shared_instance.icon"
size="xs"
no-shadow
:raised="raised"
/>
<div v-else class="backed-svg" :class="{ raised: raised }">
<BoxesIcon />
</div>
<div class="stacked">
<span class="title">Shared instance</span>
<span class="title">{{ report.shared_instance?.name ?? 'Shared instance' }}</span>
<span>
Version {{ report.shared_instance_version_id ?? 'unknown' }} ·
<CopyCode :text="report.item_id" />
@@ -89,8 +96,7 @@
<ThreadSummary
v-if="thread"
:thread="thread"
class="thread-summary"
:raised="raised"
class="thread-summary !bg-surface-2"
:link="`/${moderation ? 'moderation' : 'dashboard'}/report/${report.id}`"
:auth="auth"
/>
@@ -1,5 +1,5 @@
<template>
<div>
<div class="pb-20">
<section>
<Breadcrumbs
v-if="breadcrumbsStack"
@@ -111,6 +111,16 @@ const { data: project } = useQuery({
enabled: computed(() => !!projectId.value),
})
const sharedInstanceId = computed(() =>
rawReport.value?.item_type === 'shared-instance' ? rawReport.value.item_id : null,
)
const { data: sharedInstance } = useQuery({
queryKey: computed(() => ['shared-instance', sharedInstanceId.value]),
queryFn: () => client.sharedinstances.instances_v1.get(sharedInstanceId.value),
enabled: computed(() => !!sharedInstanceId.value),
})
// Assemble the full report object
const report = computed(() => {
if (!rawReport.value) return null
@@ -118,6 +128,7 @@ const report = computed(() => {
...rawReport.value,
project: project.value ?? null,
version: version.value ?? null,
shared_instance: sharedInstance.value ?? null,
reporterUser: (users.value || []).find((user) => user.id === rawReport.value.reporter),
user:
rawReport.value.item_type === 'user'
@@ -19,7 +19,7 @@
:moderation="moderation"
raised
:auth="auth"
class="universal-card recessed"
class="card-shadow mb-4 rounded-2xl border border-solid border-surface-4 bg-surface-3 p-4"
/>
<p v-if="filteredReports.length === 0">You don't have any active reports.</p>
</template>
@@ -51,7 +51,7 @@ const MAX_REPORTS = 1500
const { data: rawReportsData } = useQuery({
queryKey: ['reports', MAX_REPORTS],
queryFn: () => client.labrinth.reports_v3.list({ count: MAX_REPORTS }),
queryFn: () => client.labrinth.reports_v3.list({ count: MAX_REPORTS, all: false }),
placeholderData: [],
})
@@ -67,6 +67,13 @@ const versionReports = computed(() =>
const versionIds = computed(() => [
...new Set(versionReports.value.map((report) => report.item_id)),
])
const sharedInstanceIds = computed(() => [
...new Set(
rawReports.value
.filter((report) => report.item_type === 'shared-instance')
.map((report) => report.item_id),
),
])
const userIds = computed(() => [...new Set(reporterUsers.value.concat(reportedUsers.value))])
const threadIds = computed(() => [
...new Set(
@@ -94,6 +101,21 @@ const { data: versions } = useQuery({
placeholderData: [],
})
const { data: sharedInstances } = useQuery({
queryKey: computed(() => ['shared-instances', sharedInstanceIds.value]),
queryFn: async () => {
const results = await Promise.allSettled(
sharedInstanceIds.value.map(async (id) => ({
id,
instance: await client.sharedinstances.instances_v1.get(id),
})),
)
return results.flatMap((result) => (result.status === 'fulfilled' ? [result.value] : []))
},
enabled: computed(() => sharedInstanceIds.value.length > 0),
placeholderData: [],
})
const { data: threads } = useQuery({
queryKey: computed(() => ['threads', threadIds.value]),
queryFn: () =>
@@ -123,6 +145,9 @@ const { data: projects } = useQuery({
const userMap = computed(() => new Map(users.value.map((u) => [u.id, u])))
const versionMap = computed(() => new Map(versions.value.map((v) => [v.id, v])))
const projectMap = computed(() => new Map(projects.value.map((p) => [p.id, p])))
const sharedInstanceMap = computed(
() => new Map(sharedInstances.value.map(({ id, instance }) => [id, instance])),
)
const threadMap = computed(() => new Map(threads.value.map((t) => [t.id, t])))
const reports = computed(() =>
@@ -136,6 +161,8 @@ const reports = computed(() =>
} else if (report.item_type === 'version') {
enrichedReport.version = versionMap.value.get(report.item_id)
enrichedReport.project = projectMap.value.get(enrichedReport.version?.project_id)
} else if (report.item_type === 'shared-instance') {
enrichedReport.shared_instance = sharedInstanceMap.value.get(report.item_id)
}
if (report.thread_id) {
const thread = threadMap.value.get(report.thread_id)
@@ -149,7 +176,7 @@ const reports = computed(() =>
const filteredReports = computed(() =>
reports.value?.filter(
(x) =>
(props.moderation || x.reporterUser?.id === props.auth.user.id) &&
(props.moderation || x.reporter === props.auth.user.id) &&
(viewMode.value === 'open' ? x.open : !x.open) &&
(reasonFilter.value === 'All' || reasonFilter.value === x.report_type),
),
@@ -1838,9 +1838,6 @@
"muralpay.placeholder.cuit-cuil": {
"message": "أدخل CUIT أو CUIL"
},
"profile.user-id": {
"message": "معرّف المستخدم: {id}"
},
"project-member-header.success-decline": {
"message": "لقد رفضت دعوة الفريق"
},
-108
View File
@@ -2105,111 +2105,6 @@
"muralpay.placeholder.account-number": {
"message": "Zadejte číslo účtu"
},
"profile.bio.fallback.creator": {
"message": "Modrinth tvůrce."
},
"profile.bio.fallback.user": {
"message": "Modrinth uživatel."
},
"profile.button.analytics": {
"message": "Zobrazit analytika uživatele"
},
"profile.button.billing": {
"message": "Spravujte fakturaci uživatele"
},
"profile.button.edit-role": {
"message": "Upravit roli"
},
"profile.button.info": {
"message": "Podívejte se na detaily uživatele"
},
"profile.button.manage-projects": {
"message": "Spravujte projekty"
},
"profile.button.remove-affiliate": {
"message": "Odebrat jako partnera"
},
"profile.button.set-affiliate": {
"message": "Nastavit jako partnera"
},
"profile.collection.projects-count": {
"message": "{count, plural, one {# projekt} few {# projekty} other {# projektů}}"
},
"profile.details.label.auth-providers": {
"message": "Poskytovatelé přihlášení"
},
"profile.details.label.email": {
"message": "E-mail"
},
"profile.details.label.email-verified": {
"message": "E-mail ověřen"
},
"profile.details.label.has-password": {
"message": "Má heslo"
},
"profile.details.label.has-totp": {
"message": "Má TOTP"
},
"profile.details.label.payment-methods": {
"message": "Platební metody"
},
"profile.details.tooltip.email-not-verified": {
"message": "E-mail není ověřen"
},
"profile.details.tooltip.email-verified": {
"message": "E-mail je ověřen"
},
"profile.error.not-found": {
"message": "Uživatel nenalezen"
},
"profile.label.affiliate": {
"message": "Partner"
},
"profile.label.badges": {
"message": "Odznaky"
},
"profile.label.collection": {
"message": "Kolekce"
},
"profile.label.joined": {
"message": "Členem od"
},
"profile.label.no-collections": {
"message": "Tento uživatel nemá žádné kolekce!"
},
"profile.label.no-collections-auth": {
"message": "Nemáte žádné kolekce.\nChcete nějakou <create-link>vytvořit</create-link>?"
},
"profile.label.no-projects": {
"message": "Tento uživatel nemá žádné projekty!"
},
"profile.label.no-projects-auth": {
"message": "Nemáte žádné projekty.\nChcete nějaký <create-link>vytvořit</create-link>?"
},
"profile.label.organizations": {
"message": "Organizace"
},
"profile.label.saving": {
"message": "Ukládání..."
},
"profile.meta.description": {
"message": "Stáhněte si projekty od {username} na Modrinthu"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Stáhněte si projekty od {username} na Modrinthu"
},
"profile.official-account": {
"message": "Oficiální Modrinth účet"
},
"profile.official-account.bio": {
"message": "Oficiální uživatelský účet Modrinthu. Podporu získáte na <support-link></support-link> nebo e-mailem na <email></email>"
},
"profile.stats.projects-followers": {
"message": "{count, plural, one {<stat>{count}</stat> sledující projektu} few {<stat>{count}</stat> sledující projektu} other {<stat>{count}</stat> sledujících projektu}}"
},
"profile.user-id": {
"message": "ID uživatele: {id}"
},
"project-member-header.error-decline": {
"message": "Nepodařilo se zamítnout pozvánku do týmu"
},
@@ -2936,9 +2831,6 @@
"settings.authorizations.about-this-app": {
"message": "O této aplikaci"
},
"settings.authorizations.by": {
"message": "od"
},
"settings.authorizations.head-title": {
"message": "Autorizace"
},
File diff suppressed because it is too large Load Diff
+3 -129
View File
@@ -2928,13 +2928,13 @@
"message": "E-Mail-Bestätigung erforderlich"
},
"modal.shared-instance.open-in-app.benefit.install": {
"message": "Installiere automatisch das erforderliche Spiel und den erforderlichen Loader"
"message": "Installiere automatisch alles, was gerade gespielt wird"
},
"modal.shared-instance.open-in-app.benefit.join": {
"message": "Tritt der geteilten Instanz mit einem Klick bei"
"message": "Spiele dieselben Inhalte wie deine Freunde"
},
"modal.shared-instance.open-in-app.benefit.update": {
"message": "Halte geteilte Inhalte aktuell, wenn sich die Instanz ändert"
"message": "Halte gemeinsame Inhalte immer aktuell"
},
"modal.shared-instance.open-in-app.get-app": {
"message": "Modrinth App herunterladen"
@@ -2972,9 +2972,6 @@
"moderation.page.technicalReview": {
"message": "Technische Überprüfung"
},
"modpack-scan-modal.clear-all-groups": {
"message": "Alle Gruppen entfernen"
},
"modpack-scan-modal.failed": {
"message": "Fehlgeschlagen"
},
@@ -3005,9 +3002,6 @@
"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..."
},
@@ -3326,117 +3320,6 @@
"organization.projects.none-with-create-prompt": {
"message": "Diese Organisation hat noch keine Projekte. Möchtest du <create-link>eins erstellen</create-link>?"
},
"profile.bio.fallback.creator": {
"message": "Ein Modrinth Ersteller."
},
"profile.bio.fallback.user": {
"message": "Ein Modrinth Benutzer."
},
"profile.button.analytics": {
"message": "Nutzungsstatistik anzeigen"
},
"profile.button.billing": {
"message": "Nutzer Zahlungen verwalten"
},
"profile.button.edit-role": {
"message": "Rolle bearbeiten"
},
"profile.button.info": {
"message": "Nutzerdetails ansehen"
},
"profile.button.manage-projects": {
"message": "Projekte verwalten"
},
"profile.button.remove-affiliate": {
"message": "Als Partner entfernen"
},
"profile.button.set-affiliate": {
"message": "Als Partner setzen"
},
"profile.collection.projects-count": {
"message": "{count, plural, one {# Projekt} other {# Projekte}}"
},
"profile.details.label.auth-providers": {
"message": "Authentifizierungsanbieter"
},
"profile.details.label.email": {
"message": "E-Mail"
},
"profile.details.label.email-verified": {
"message": "E-Mail verifiziert"
},
"profile.details.label.has-password": {
"message": "Hat Passwort"
},
"profile.details.label.has-totp": {
"message": "Hat TOTP"
},
"profile.details.label.payment-methods": {
"message": "Zahlungsmethoden"
},
"profile.details.tooltip.email-not-verified": {
"message": "E-Mail nicht verifiziert"
},
"profile.details.tooltip.email-verified": {
"message": "E-Mail verifiziert"
},
"profile.error.not-found": {
"message": "Benutzer nicht gefunden"
},
"profile.label.affiliate": {
"message": "Partner"
},
"profile.label.badges": {
"message": "Abzeichen"
},
"profile.label.collection": {
"message": "Kollektion"
},
"profile.label.download-count": {
"message": "{count, plural, one {Download} other {Downloads}}"
},
"profile.label.joined": {
"message": "Beigetreten"
},
"profile.label.no-collections": {
"message": "Dieser Nutzer hat keine Kollektionen!"
},
"profile.label.no-collections-auth": {
"message": "Du hast keine Kollektionen.\nMöchtest du gerne <create-link>eine erstellen</create-link>?"
},
"profile.label.no-projects": {
"message": "Dieser Nutzer hat keine Projekte!"
},
"profile.label.no-projects-auth": {
"message": "Du hast keine Projekte.\nMöchtest du gerne <create-link>eines erstellen</create-link>?"
},
"profile.label.organizations": {
"message": "Organisationen"
},
"profile.label.project-count": {
"message": "{count, plural, one {Projekt} other {Projekte}}"
},
"profile.label.saving": {
"message": "Speichert..."
},
"profile.meta.description": {
"message": "Lade {username}'s Projekte auf Modrinth herunter"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Lade {username}'s Projekte auf Modrinth herunter"
},
"profile.official-account": {
"message": "Offizielles Modrinth-Konto"
},
"profile.official-account.bio": {
"message": "Das offizielle Benutzerkonto von Modrinth. Erhalte Support unter <support-link></support-link> oder per E-Mail an <email></email>"
},
"profile.stats.projects-followers": {
"message": "{count, plural, one {<stat>{count}</stat>} other {<stat>{count}</stat>}} Projekt-Follower"
},
"profile.user-id": {
"message": "Benutzer ID: {id}"
},
"project-member-header.error-decline": {
"message": "Ablehnen der Team-Einladung fehlgeschlagen"
},
@@ -3785,9 +3668,6 @@
"project.moderation.admonition.under-review.body.3": {
"message": "Du kannst dein Projekt weiterhin ändern, dies hat keinen Einfluss auf deine Position in der Warteschlange."
},
"project.moderation.admonition.under-review.body.4": {
"message": "Wir streben an, Einreichungen innerhalb von 24 bis 48 Stunden zu überprüfen, aber bei einigen Projekten kann es zu Verzögerungen kommen. Dies deutet nicht auf ein Problem mit deiner Einreichung hin."
},
"project.moderation.admonition.under-review.body.5": {
"message": "<emphasis>Wir schätzen deine Geduld, während unsere Moderatoren hart daran arbeiten, Modrinth sicher zu halten, und freuen uns darauf, dir dabei zu helfen, deine Inhalte zu teilen! 💚</emphasis>"
},
@@ -4892,15 +4772,9 @@
"settings.authorizations.about-this-app": {
"message": "Über diese Anwendung"
},
"settings.authorizations.by": {
"message": "von"
},
"settings.authorizations.description": {
"message": "Wenn du eine Anwendung mit deinem Modrinth-Konto autorisierst, gewährst du dieser Zugriff auf dein Konto. Du kannst den Zugriff auf dein Konto hier jederzeit verwalten und überprüfen."
},
"settings.authorizations.empty-state": {
"message": "Wir konnen aktuell deine autorisierten Anwendungen nicht anzeigen und arbeiten an einer lösung dafür. Bitte besuche diese Seite zu einem späteren Zeitpunkt erneut!"
},
"settings.authorizations.head-title": {
"message": "Autorisierungen"
},
+9 -135
View File
@@ -756,7 +756,7 @@
"message": "Erforderliche Abfrageparameter für OAuth fehlen."
},
"auth.authorize.error.no-redirect-url": {
"message": "Keine Weiterleitungsziel in Antwort gefunden"
"message": "Kein Weiterleitungsziel in Antwort gefunden"
},
"auth.authorize.errro-title": {
"message": "Ein Fehler ist aufgetreten"
@@ -1968,7 +1968,7 @@
"message": "In Verarbeitung"
},
"dashboard.revenue.processing.tooltip": {
"message": "Einnahmen bleiben in bearbeitung bis zum ende des Monats, und werden 60 Tage danach verfügbar."
"message": "Die Einnahmen bleiben bis zum Monatsende in Bearbeitung und werden 60 Tage später verfügbar."
},
"dashboard.revenue.stats.received": {
"message": "Erhalten"
@@ -2013,7 +2013,7 @@
"message": "Deine Auszahlungen sind vorrübergehend gesperrt, da deine TIN oder SSN nicht mit den IRS-Aufzeichnungen übereinstimmt. Bitte kontaktiere den Support um dein Steuerformular zurückzusetzen und erneut einzureichen."
},
"dashboard.revenue.withdraw.card.description": {
"message": "Hebe von deinem Verfügbaren Guthaben über einen Zahlungsmethode ab."
"message": "Hebe von deinem verfügbaren Guthaben über eine Zahlungsmethode ab."
},
"dashboard.revenue.withdraw.card.title": {
"message": "Auszahlen"
@@ -2175,7 +2175,7 @@
"message": "Durchsuche {projectType}"
},
"discover.seo.title-with-query": {
"message": "Durchsuche {projectType} {query}"
"message": "Durchsuche {projectType} | {query}"
},
"error.collection.404.list_item.1": {
"message": "Eventuell hast du die URL der Kollektion falsch eingegeben."
@@ -2928,13 +2928,13 @@
"message": "E-Mail-Bestätigung erforderlich"
},
"modal.shared-instance.open-in-app.benefit.install": {
"message": "Installiere automatisch das erforderliche Spiel und den erforderlichen Loader"
"message": "Installiere automatisch alles, was gerade gespielt wird"
},
"modal.shared-instance.open-in-app.benefit.join": {
"message": "Tritt der geteilten Instanz mit einem Klick bei"
"message": "Spiele dieselben Inhalte wie deine Freunde"
},
"modal.shared-instance.open-in-app.benefit.update": {
"message": "Halte geteilte Inhalte aktuell, wenn sich die Instanz ändert"
"message": "Halte gemeinsame Inhalte immer aktuell"
},
"modal.shared-instance.open-in-app.get-app": {
"message": "Modrinth App herunterladen"
@@ -2972,9 +2972,6 @@
"moderation.page.technicalReview": {
"message": "Technische Überprüfung"
},
"modpack-scan-modal.clear-all-groups": {
"message": "Alle Gruppen entfernen"
},
"modpack-scan-modal.failed": {
"message": "Fehlgeschlagen"
},
@@ -3005,9 +3002,6 @@
"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..."
},
@@ -3326,117 +3320,6 @@
"organization.projects.none-with-create-prompt": {
"message": "Diese Organisation hat noch keine Projekte. Möchtest du <create-link>eins erstellen</create-link>?"
},
"profile.bio.fallback.creator": {
"message": "Ein Modrinth-Ersteller."
},
"profile.bio.fallback.user": {
"message": "Ein Modrinth-Benutzer."
},
"profile.button.analytics": {
"message": "Benutzeranalysen anzeigen"
},
"profile.button.billing": {
"message": "Benutzerabrechnungen verwalten"
},
"profile.button.edit-role": {
"message": "Rolle bearbeiten"
},
"profile.button.info": {
"message": "Nutzerdetails ansehen"
},
"profile.button.manage-projects": {
"message": "Projekte verwalten"
},
"profile.button.remove-affiliate": {
"message": "Als Partner entfernen"
},
"profile.button.set-affiliate": {
"message": "Als Partner setzen"
},
"profile.collection.projects-count": {
"message": "{count, plural, one {# Projekt} other {# Projekte}}"
},
"profile.details.label.auth-providers": {
"message": "Authentifizierungsanbieter"
},
"profile.details.label.email": {
"message": "E-Mail"
},
"profile.details.label.email-verified": {
"message": "E-Mail verifiziert"
},
"profile.details.label.has-password": {
"message": "Hat Passwort"
},
"profile.details.label.has-totp": {
"message": "Hat TOTP"
},
"profile.details.label.payment-methods": {
"message": "Zahlungsmethoden"
},
"profile.details.tooltip.email-not-verified": {
"message": "E-Mail nicht verifiziert"
},
"profile.details.tooltip.email-verified": {
"message": "E-Mail verifiziert"
},
"profile.error.not-found": {
"message": "Benutzer nicht gefunden"
},
"profile.label.affiliate": {
"message": "Partner"
},
"profile.label.badges": {
"message": "Abzeichen"
},
"profile.label.collection": {
"message": "Kollektion"
},
"profile.label.download-count": {
"message": "{count, plural, one {Download} other {Downloads}}"
},
"profile.label.joined": {
"message": "Beigetreten"
},
"profile.label.no-collections": {
"message": "Dieser Nutzer hat keine Kollektionen!"
},
"profile.label.no-collections-auth": {
"message": "Du hast keine Kollektionen.\nMöchtest du eine <create-link>erstellen</create-link>?"
},
"profile.label.no-projects": {
"message": "Dieser Nutzer hat keine Projekte!"
},
"profile.label.no-projects-auth": {
"message": "Du hast keine Projekte.\nMöchtest du eins <create-link>erstellen</create-link>?"
},
"profile.label.organizations": {
"message": "Organisationen"
},
"profile.label.project-count": {
"message": "{count, plural, one {Projekt} other {Projekte}}"
},
"profile.label.saving": {
"message": "Speichert..."
},
"profile.meta.description": {
"message": "Lade {username}'s Projekte auf Modrinth herunter"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Lade {username}s Projekte auf Modrinth herunter"
},
"profile.official-account": {
"message": "Offizielles Konto von Modrinth"
},
"profile.official-account.bio": {
"message": "Das offizielle Benutzerkonto von Modrinth. Erhalte Hilfe unter <support-link></support-link> oder per E-Mail unter <email></email>"
},
"profile.stats.projects-followers": {
"message": "{count, plural, one {<stat>{count}</stat>} other {<stat>{count}</stat>}} Projekt-Follower"
},
"profile.user-id": {
"message": "Benutzer ID: {id}"
},
"project-member-header.error-decline": {
"message": "Teameinladung konnte nicht abgelehnt werden"
},
@@ -3693,7 +3576,7 @@
"message": "Spielversion auswählen"
},
"project.download.select-platform": {
"message": "Platftorm auswählen"
"message": "Plattform auswählen"
},
"project.download.show-all-versions": {
"message": "Alle Versionen anzeigen"
@@ -3785,9 +3668,6 @@
"project.moderation.admonition.under-review.body.3": {
"message": "Du kannst dein Projekt weiterhin bearbeiten, dies hat keinen Einfluss auf deinen Platz in der Warteschlange."
},
"project.moderation.admonition.under-review.body.4": {
"message": "Wir bemühen uns, Einsendungen innerhalb von 24 bis 48 Stunden zu überprüfen, doch bei einigen Projekten kann es zu Verzögerungen kommen. Dies bedeutet nicht, dass mit deiner Einreichung etwas nicht in Ordnung ist."
},
"project.moderation.admonition.under-review.body.5": {
"message": "<emphasis>Wir danken dir für deine Geduld, während unsere Moderatoren daran arbeiten, Modrinth sicher zu halten, und freuen uns darauf, dir dabei zu helfen, deine Inhalte zu teilen! 💚</emphasis>"
},
@@ -4842,7 +4722,7 @@
"message": "Möchtest du diese Anwendung wirklich löschen?"
},
"settings.applications.description.intro": {
"message": "Anwendungen können verwendet werden, um Modrinth-Benutzer mit deinen Produkten zu authentifizieren. Weitere Informationen findest du in der <docs-link>Modrinth's API-Dokumentation</docs-link>."
"message": "Anwendungen können verwendet werden, um Modrinth-Benutzer mit deinen Produkten zu authentifizieren. Weitere Informationen findest du in der <docs-link>API-Dokumentation von Modrinth</docs-link>."
},
"settings.applications.field.description": {
"message": "Beschreibung"
@@ -4892,15 +4772,9 @@
"settings.authorizations.about-this-app": {
"message": "Über diese Anwendung"
},
"settings.authorizations.by": {
"message": "von"
},
"settings.authorizations.description": {
"message": "Wenn du eine Anwendung mit deinem Modrinth-Konto autorisierst, gewährst du dieser Zugriff auf dein Konto. Du kannst den Zugriff auf dein Konto hier jederzeit verwalten und überprüfen."
},
"settings.authorizations.empty-state": {
"message": "Wir können deine autorisierten Apps derzeit nicht anzeigen, wir arbeiten daran, das zu beheben. Bitte besuche diese Seite zu einem späteren Zeitpunkt erneut!"
},
"settings.authorizations.head-title": {
"message": "Autorisierungen"
},
+38 -119
View File
@@ -2972,8 +2972,23 @@
"moderation.page.technicalReview": {
"message": "Tech review"
},
"modpack-scan-modal.clear-all-groups": {
"message": "Clear All Groups"
"modpack-scan-modal.batch.label": {
"message": "{amount} per batch"
},
"modpack-scan-modal.batch.placeholder": {
"message": "Batch amount"
},
"modpack-scan-modal.delete-all-groups-confirmation.description": {
"message": "This will permanently delete all attribution groups for this project and all files inside them. This action cannot be undone."
},
"modpack-scan-modal.delete-all-groups.error": {
"message": "Failed to clear all groups: {error}"
},
"modpack-scan-modal.delete-all-groups.proceed": {
"message": "Clear"
},
"modpack-scan-modal.delete-all-groups.success": {
"message": "All groups cleared successfully."
},
"modpack-scan-modal.failed": {
"message": "Failed"
@@ -3006,11 +3021,14 @@
"message": "Scan All Files"
},
"modpack-scan-modal.scan-error": {
"message": "Some files failed to scan: {error}"
"message": "Some files failed to scan: \n\n{error}"
},
"modpack-scan-modal.scanning": {
"message": "Scanning..."
},
"modpack-scan-modal.success": {
"message": "Success"
},
"modpack-scan-modal.title": {
"message": "Modpack Scan ({scanned}/{total} Files)"
},
@@ -3326,117 +3344,6 @@
"organization.projects.none-with-create-prompt": {
"message": "This organization doesn't have any projects yet. Would you like to <create-link>create one</create-link>?"
},
"profile.bio.fallback.creator": {
"message": "A Modrinth creator."
},
"profile.bio.fallback.user": {
"message": "A Modrinth user."
},
"profile.button.analytics": {
"message": "View user analytics"
},
"profile.button.billing": {
"message": "Manage user billing"
},
"profile.button.edit-role": {
"message": "Edit role"
},
"profile.button.info": {
"message": "View user details"
},
"profile.button.manage-projects": {
"message": "Manage projects"
},
"profile.button.remove-affiliate": {
"message": "Remove as affiliate"
},
"profile.button.set-affiliate": {
"message": "Set as affiliate"
},
"profile.collection.projects-count": {
"message": "{count, plural, one {# project} other {# projects}}"
},
"profile.details.label.auth-providers": {
"message": "Auth providers"
},
"profile.details.label.email": {
"message": "Email"
},
"profile.details.label.email-verified": {
"message": "Email verified"
},
"profile.details.label.has-password": {
"message": "Has password"
},
"profile.details.label.has-totp": {
"message": "Has TOTP"
},
"profile.details.label.payment-methods": {
"message": "Payment methods"
},
"profile.details.tooltip.email-not-verified": {
"message": "Email not verified"
},
"profile.details.tooltip.email-verified": {
"message": "Email verified"
},
"profile.error.not-found": {
"message": "User not found"
},
"profile.label.affiliate": {
"message": "Affiliate"
},
"profile.label.badges": {
"message": "Badges"
},
"profile.label.collection": {
"message": "Collection"
},
"profile.label.download-count": {
"message": "{count, plural, one {download} other {downloads}}"
},
"profile.label.joined": {
"message": "Joined"
},
"profile.label.no-collections": {
"message": "This user has no collections!"
},
"profile.label.no-collections-auth": {
"message": "You don't have any collections.\nWould you like to <create-link>create one</create-link>?"
},
"profile.label.no-projects": {
"message": "This user has no projects!"
},
"profile.label.no-projects-auth": {
"message": "You don't have any projects.\nWould you like to <create-link>create one</create-link>?"
},
"profile.label.organizations": {
"message": "Organizations"
},
"profile.label.project-count": {
"message": "{count, plural, one {project} other {projects}}"
},
"profile.label.saving": {
"message": "Saving..."
},
"profile.meta.description": {
"message": "Download {username}'s projects on Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Download {username}'s projects on Modrinth"
},
"profile.official-account": {
"message": "Official Modrinth account"
},
"profile.official-account.bio": {
"message": "The official user account of Modrinth. Get support at <support-link></support-link> or via email at <email></email>"
},
"profile.stats.projects-followers": {
"message": "{count, plural, one {<stat>{count}</stat> project follower} other {<stat>{count}</stat> project followers}}"
},
"profile.user-id": {
"message": "User ID: {id}"
},
"project-member-header.error-decline": {
"message": "Failed to decline team invitation"
},
@@ -3786,7 +3693,10 @@
"message": "You can still modify your project, it won't affect your position in the queue."
},
"project.moderation.admonition.under-review.body.4": {
"message": "We aim to review submissions in 24-48 hours, but some projects may face delays. This does not reflect an issue with your submission."
"message": "We aim to review submissions in 2448 hours, but some projects may face delays. This does not reflect an issue with your submission."
},
"project.moderation.admonition.under-review.body.4.alt-week": {
"message": "We aim to review submissions within a week, but some projects may face delays. This does not reflect an issue with your submission."
},
"project.moderation.admonition.under-review.body.5": {
"message": "<emphasis>We appreciate your patience while our moderators work hard to keep Modrinth safe, and look forward to helping you share your content! 💚</emphasis>"
@@ -4892,18 +4802,24 @@
"settings.authorizations.about-this-app": {
"message": "About this app"
},
"settings.authorizations.by": {
"message": "by"
"settings.authorizations.created-by": {
"message": "Created by {user}"
},
"settings.authorizations.description": {
"message": "When you authorize an application with your Modrinth account, you grant it access to your account. You can manage and review access to your account here at any time."
},
"settings.authorizations.empty-state": {
"message": "We currently can't display your authorized apps, we're working to fix this. Please visit this page at a later date!"
"settings.authorizations.empty-state.description": {
"message": "Applications you authorize will appear here."
},
"settings.authorizations.empty-state.heading": {
"message": "No authorized apps"
},
"settings.authorizations.head-title": {
"message": "Authorizations"
},
"settings.authorizations.official-tooltip": {
"message": "This app is created by an official Modrinth account."
},
"settings.authorizations.revoke.action": {
"message": "Revoke"
},
@@ -4913,6 +4829,9 @@
"settings.authorizations.revoke.confirm.title": {
"message": "Are you sure you want to revoke this application?"
},
"settings.authorizations.unofficial-disclosure": {
"message": "This app is not affiliated with Modrinth in any way, despite its name."
},
"settings.billing.charges.description": {
"message": "All of your past charges to your Modrinth account will be listed here:"
},
-117
View File
@@ -2723,9 +2723,6 @@
"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..."
},
@@ -2999,111 +2996,6 @@
"muralpay.warning.wallet-address": {
"message": "Verifica dos veces la dirección de tu billetera. Los fondos enviados a una dirección incorrecta no se pueden recuperar."
},
"profile.bio.fallback.creator": {
"message": "Un creador de Modrinth."
},
"profile.bio.fallback.user": {
"message": "Un usuario de Modrinth."
},
"profile.button.analytics": {
"message": "Ver estadísticas de usuario"
},
"profile.button.billing": {
"message": "Gestionar la facturación de usuario"
},
"profile.button.edit-role": {
"message": "Editar rol"
},
"profile.button.info": {
"message": "Ver detalles de usuario"
},
"profile.button.manage-projects": {
"message": "Gestionar proyectos"
},
"profile.button.remove-affiliate": {
"message": "Remover como afiliado"
},
"profile.button.set-affiliate": {
"message": "Configurar como afiliado"
},
"profile.collection.projects-count": {
"message": "{count, plural, one {# proyecto} other {# proyectos}}"
},
"profile.details.label.auth-providers": {
"message": "Proveedores de autenticación"
},
"profile.details.label.email": {
"message": "Correo electrónico"
},
"profile.details.label.email-verified": {
"message": "Correo electrónico verificado"
},
"profile.details.label.has-password": {
"message": "Tiene contraseña"
},
"profile.details.label.has-totp": {
"message": "Tiene TOTP"
},
"profile.details.label.payment-methods": {
"message": "Métodos de pago"
},
"profile.details.tooltip.email-not-verified": {
"message": "Correo electrónico no verificado"
},
"profile.details.tooltip.email-verified": {
"message": "Correo electrónico verificado"
},
"profile.error.not-found": {
"message": "Usuario no encontrado"
},
"profile.label.affiliate": {
"message": "Afiliado"
},
"profile.label.badges": {
"message": "Insignias"
},
"profile.label.collection": {
"message": "Colección"
},
"profile.label.joined": {
"message": "Se unió"
},
"profile.label.no-collections": {
"message": "¡Este usuario no tiene colecciones!"
},
"profile.label.no-collections-auth": {
"message": "No tienes ninguna colección.\n¿Te gustaría <create-link>crear una</create-link>?"
},
"profile.label.no-projects": {
"message": "¡Este usuario no tiene proyectos!"
},
"profile.label.no-projects-auth": {
"message": "No tienes ningún proyecto.\n¿Te gustaría <create-link>crear uno</create-link>?"
},
"profile.label.organizations": {
"message": "Organizaciones"
},
"profile.label.saving": {
"message": "Guardando..."
},
"profile.meta.description": {
"message": "Descarga proyectos de {username} en Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Descarga proyectos de {username} en Modrinth"
},
"profile.official-account": {
"message": "Cuenta oficial de Modrinth"
},
"profile.official-account.bio": {
"message": "La cuenta de usuario oficial de Modrinth. Obtén soporte en <support-link></support-link> o vía correo en <email></email>"
},
"profile.stats.projects-followers": {
"message": "{count, plural, one {<stat>{count}</stat> seguidor del proyecto} other {<stat>{count}</stat> seguidores del proyecto}}"
},
"profile.user-id": {
"message": "ID de usuario: {id}"
},
"project-member-header.error-decline": {
"message": "Error al rechazar la invitación del equipo"
},
@@ -3443,9 +3335,6 @@
"project.moderation.admonition.under-review.body.3": {
"message": "Aún puedes modificar tu proyecto, no afectará tu posición en la cola."
},
"project.moderation.admonition.under-review.body.4": {
"message": "Nuestro objetivo es revisar envíos en un plazo de 24-48 horas, pero algunos proyectos pueden sufrir retrasos. Esto no indica que haya algún problema con tu envío."
},
"project.moderation.admonition.under-review.body.5": {
"message": "<emphasis>¡Apreciamos tu paciencia mientras nuestros moderadores trabajan duro para mantener Modrinth seguro, y estaremos encantados de poder ayudarte a compartir tu contenido! 💚</emphasis>"
},
@@ -4391,15 +4280,9 @@
"settings.authorizations.about-this-app": {
"message": "Acerca de esta aplicación"
},
"settings.authorizations.by": {
"message": "por"
},
"settings.authorizations.description": {
"message": "Cuando autorizas una aplicación con tu cuenta de Modrinth, le concedes acceso a tu cuenta. Puedes gestionar y revisar los accesos a tu cuenta aquí en cualquier momento."
},
"settings.authorizations.empty-state": {
"message": "Actualmente no podemos mostrar tus aplicaciones autorizadas. Estamos trabajando para solucionar esto. ¡Por favor, visita esta página más tarde!"
},
"settings.authorizations.head-title": {
"message": "Autorizaciones"
},
-114
View File
@@ -2822,111 +2822,6 @@
"muralpay.warning.wallet-address": {
"message": "Verifique la dirección de su billetera. Los fondos enviados a una dirección incorrecta no se pueden recuperar."
},
"profile.bio.fallback.creator": {
"message": "Creador en Modrinth."
},
"profile.bio.fallback.user": {
"message": "Usuario de Modrinth."
},
"profile.button.analytics": {
"message": "Ver analíticas de usuario"
},
"profile.button.billing": {
"message": "Gestionar la facturación de los usuarios"
},
"profile.button.edit-role": {
"message": "Editar rol"
},
"profile.button.info": {
"message": "Ver detalles del usuario"
},
"profile.button.manage-projects": {
"message": "Gestionar proyectos"
},
"profile.button.remove-affiliate": {
"message": "Borrar como afiliado"
},
"profile.button.set-affiliate": {
"message": "Establecer como afiliado"
},
"profile.collection.projects-count": {
"message": "{count, plural, one {# proyecto} other {# proyectos}}"
},
"profile.details.label.auth-providers": {
"message": "Autentificar proveedores"
},
"profile.details.label.email": {
"message": "Correo electrónico"
},
"profile.details.label.email-verified": {
"message": "Email verificado"
},
"profile.details.label.has-password": {
"message": "Tiene contraseña"
},
"profile.details.label.has-totp": {
"message": "Tiene autentificación de doble factor"
},
"profile.details.label.payment-methods": {
"message": "Métodos de pago"
},
"profile.details.tooltip.email-not-verified": {
"message": "Correo electrónico no verificado"
},
"profile.details.tooltip.email-verified": {
"message": "Correo electrónico verificado"
},
"profile.error.not-found": {
"message": "Usuario no encontrado"
},
"profile.label.affiliate": {
"message": "Afiliado"
},
"profile.label.badges": {
"message": "Medallas"
},
"profile.label.collection": {
"message": "Colección"
},
"profile.label.joined": {
"message": "Se unió hace"
},
"profile.label.no-collections": {
"message": "¡Este usuario no tiene colecciones!"
},
"profile.label.no-collections-auth": {
"message": "No tienes ninguna colección.\n¿Te gustaría <create-link>crear una</create-link>?"
},
"profile.label.no-projects": {
"message": "¡Este usuario no tiene proyectos!"
},
"profile.label.no-projects-auth": {
"message": "No tienes ningún proyecto.\n¿Te gustaría <create-link>crear uno</create-link>?"
},
"profile.label.organizations": {
"message": "Organizaciones"
},
"profile.label.saving": {
"message": "Guardando..."
},
"profile.meta.description": {
"message": "Descargar los proyectos de {username} en Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Descarga los proyectos en Modrinth de {username}"
},
"profile.official-account": {
"message": "Cuenta oficial de Modrinth"
},
"profile.official-account.bio": {
"message": "La cuenta de usuario oficial de Modrinth. Obtén soporte en <support-link></support-link> o vía correo en <email></email>"
},
"profile.stats.projects-followers": {
"message": "{count, plural, one {<stat>{count}</stat> seguidor} other {<stat>{count}</stat> seguidores}}"
},
"profile.user-id": {
"message": "ID de usuario: {id}"
},
"project-member-header.error-decline": {
"message": "No se ha podido rechazar la invitación del equipo"
},
@@ -3164,9 +3059,6 @@
"project.moderation.admonition.under-review.body.3": {
"message": "Aún puedes modificar tu proyecto, no afectará tu posición en la cola."
},
"project.moderation.admonition.under-review.body.4": {
"message": "Nuestro objetivo es revisar envíos en un plazo de 24-48 horas, pero algunos proyectos pueden sufrir retrasos. Esto no indica que haya algún problema con tu envío."
},
"project.moderation.admonition.under-review.body.5": {
"message": "<emphasis>¡Apreciamos tu paciencia mientras nuestros moderadores trabajan duro para mantener Modrinth seguro, y estaremos encantados de poder ayudarte a compartir tu contenido! 💚</emphasis>"
},
@@ -4061,15 +3953,9 @@
"settings.authorizations.about-this-app": {
"message": "Acerca de esta aplicación"
},
"settings.authorizations.by": {
"message": "por"
},
"settings.authorizations.description": {
"message": "Cuando autorizas una aplicación con tu cuenta de Modrinth, le concedes acceso a tu cuenta. Puedes gestionar y revisar el acceso a tu cuenta aquí en cualquier momento."
},
"settings.authorizations.empty-state": {
"message": "Por el momento no podemos mostrar tus aplicaciones autorizadas, pero estamos trabajando para solucionar el problema. ¡Vuelve a visitar esta página más adelante!"
},
"settings.authorizations.head-title": {
"message": "Autorizaciones"
},
@@ -908,15 +908,6 @@
"moderation.page.reports": {
"message": "Raportit"
},
"profile.label.badges": {
"message": "Arvomerkit"
},
"profile.label.organizations": {
"message": "Organisaatiot"
},
"profile.user-id": {
"message": "Käyttäjätunnus: {id}"
},
"project-moderation-nags.required": {
"message": "Vaadittu"
},
@@ -2153,99 +2153,6 @@
"muralpay.warning.wallet-address": {
"message": "Pakisuri muli ng iyong wallet address. Ang mga pundong nahatid sa maling address ay hindi na mababawi."
},
"profile.bio.fallback.creator": {
"message": "Isang tagagawa sa Modrinth."
},
"profile.bio.fallback.user": {
"message": "Isang tagagamit sa Modrinth."
},
"profile.button.billing": {
"message": "Pamahalaan ang billing ng tagagamit"
},
"profile.button.edit-role": {
"message": "Baguhin ang tungkulin"
},
"profile.button.info": {
"message": "Tingang ang mga detalye ng tagagamit"
},
"profile.button.manage-projects": {
"message": "Pamahalaan ang mga proyekto"
},
"profile.button.remove-affiliate": {
"message": "Tanggalin bilang affiliate"
},
"profile.button.set-affiliate": {
"message": "Itakda bilang affiliate"
},
"profile.details.label.auth-providers": {
"message": "Mga auth provider"
},
"profile.details.label.email": {
"message": "Email"
},
"profile.details.label.email-verified": {
"message": "Napatunayan na email"
},
"profile.details.label.has-password": {
"message": "May password"
},
"profile.details.label.has-totp": {
"message": "May TOTP"
},
"profile.details.label.payment-methods": {
"message": "Mga paraan ng pagbabayad"
},
"profile.details.tooltip.email-not-verified": {
"message": "Hindi napatunayang email"
},
"profile.details.tooltip.email-verified": {
"message": "Napatunayan na email"
},
"profile.error.not-found": {
"message": "Hindi mahanap na tagagamit"
},
"profile.label.affiliate": {
"message": "Affiliate"
},
"profile.label.badges": {
"message": "Tsapa"
},
"profile.label.collection": {
"message": "Koleksiyon"
},
"profile.label.joined": {
"message": "Sumali"
},
"profile.label.no-collections": {
"message": "Walang mga koleksiyon ang tagagamit na ito!"
},
"profile.label.no-collections-auth": {
"message": "Wala kang koleksiyon.\nNais mo bang <create-link>lumikha ng isa</create-link>?"
},
"profile.label.no-projects": {
"message": "Walang mga proyekto ang tagagmit na ito!"
},
"profile.label.no-projects-auth": {
"message": "Wala kang proyekto.\nNais mo bang <create-link>lumikha ng isa</create-link>?"
},
"profile.label.organizations": {
"message": "Mga organisasyon"
},
"profile.label.saving": {
"message": "Sine-save..."
},
"profile.meta.description": {
"message": "Magdownload ng mga proyekto ni {username} sa Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Magdownload ng mga proyekto ni {username} sa Modrinth"
},
"profile.stats.projects-followers": {
"message": "{count, plural, one {<stat>{count}</stat> follower ng proyekto} other {<stat>{count}</stat> na follower ng proyekto}}"
},
"profile.user-id": {
"message": "User ID: {id}"
},
"project-member-header.error-decline": {
"message": "Bigong matanggihan ang anyaya sa koponan"
},
@@ -3026,12 +2933,6 @@
"settings.authorizations.about-this-app": {
"message": "Tungkol sa app"
},
"settings.authorizations.by": {
"message": "ni/ng"
},
"settings.authorizations.empty-state": {
"message": "Kasalukuyang hindi namin mapapakita ang mga pinahintulutang app, kinukumpuni pa namin ito. Mangyaring bisitahin ang pahinang ito sa ibang pagkataon!"
},
"settings.authorizations.head-title": {
"message": "Mga pagpapahintulot"
},
+46 -139
View File
@@ -126,7 +126,7 @@
"message": "Période précédente"
},
"analytics.chart.controls.project-events": {
"message": "Événements projet"
"message": "Événements de projet"
},
"analytics.chart.controls.ratio": {
"message": "Ratio"
@@ -417,7 +417,7 @@
"message": "Téléchargements"
},
"analytics.stat.monetization-banner.body": {
"message": "Seules les vues et les téléchargements effectués via Modrinth sont éligibles à la monétisation et doivent passer un filtrage de prévention de la fraude. Les téléchargements de l'application Modrinth exigent également que l'utilisateur soit connecté. Parce que tous les projets ont un ratio similaire de téléchargements monétisés, vos revenus ne changeraient pas de manière significative si tous les téléchargements étaient comptés."
"message": "Seuls les vues et les téléchargements effectués via Modrinth sont éligibles à la monétisation et doivent passer un filtrage de prévention de la fraude. Les téléchargements de l'application Modrinth exigent également que l'utilisateur soit connecté. Parce que tous les projets ont un ratio similaire de téléchargements monétisés, vos revenus ne changeraient pas de manière significative si tous les téléchargements étaient comptés."
},
"analytics.stat.monetization-banner.learn-more": {
"message": "En savoir plus"
@@ -438,7 +438,7 @@
"message": "vs préc."
},
"analytics.stat.revenue": {
"message": "Revenue"
"message": "Revenus"
},
"analytics.stat.revenue-value": {
"message": "${value}"
@@ -450,7 +450,7 @@
"message": "Statistique non disponible pour la requête actuelle"
},
"analytics.stat.views": {
"message": "Vus"
"message": "Vues"
},
"analytics.table.csv.date-range": {
"message": "{start} à {end}"
@@ -1757,6 +1757,9 @@
"dashboard.creator-withdraw-modal.tremendous-details.withdrawal-amount-min-max": {
"message": "{min} montant de retrait minimum, {max} montant de retrait maximum."
},
"dashboard.creator-withdraw-modal.tremendous-details.withdrawal-amount-min-only": {
"message": "{min} montant de retrait minimum."
},
"dashboard.creator-withdraw-modal.withdraw-button": {
"message": "Retrait"
},
@@ -1941,19 +1944,19 @@
"message": "Signalements"
},
"dashboard.revenue.available-now": {
"message": "Disponible Maintenant"
"message": "Disponible maintenant"
},
"dashboard.revenue.balance": {
"message": "Balance"
"message": "Solde"
},
"dashboard.revenue.estimated-tooltip.msg1": {
"message": "Les revenus estimés peuvent être modifiés jusqu'à leur publication."
"message": "Les revenus estimés peuvent changer jusquà leur disponibilité."
},
"dashboard.revenue.estimated-tooltip.msg2": {
"message": "Cliquez pour lire comment Modrinth gère votre revenu."
"message": "Cliquez pour lire comment Modrinth gère vos revenus."
},
"dashboard.revenue.estimated-with-date": {
"message": "Estimé pour {date}"
"message": "Estimé pour le {date}"
},
"dashboard.revenue.processing": {
"message": "Traitement"
@@ -1983,7 +1986,7 @@
"message": "Transactions"
},
"dashboard.revenue.transactions.none": {
"message": "Aucune Transaction"
"message": "Aucune transaction"
},
"dashboard.revenue.transactions.none.desc": {
"message": "Vos paiements et retraits apparaîtront ici."
@@ -2037,7 +2040,7 @@
"message": "Projets"
},
"dashboard.sidebar.label.revenue": {
"message": "Revenu"
"message": "Revenus"
},
"dashboard.withdraw.completion.account": {
"message": "Compte"
@@ -2426,9 +2429,18 @@
"hosting-marketing.medal.text-secondary": {
"message": "Offre à durée limitée. Aucune carte de crédit requise. Disponible pour les serveurs américains."
},
"hosting-marketing.notification.error-fetching-payment-data-title": {
"message": "Erreur lors de la récupération des données de paiement"
},
"hosting-marketing.notification.invalid-product-text": {
"message": "Le produit sélectionné a été trouvé, mais certaines données nécessaires sont manquantes. Veuillez contacter le support."
},
"hosting-marketing.notification.invalid-product-title": {
"message": "Produit invalide"
},
"hosting-marketing.notification.server-capacity-full-text": {
"message": "Nous avons actuellement atteint notre capacité maximale. Veuillez réessayer plus tard."
},
"hosting-marketing.notification.server-capacity-full-title": {
"message": "Capacité maximale du serveur atteinte"
},
@@ -2892,7 +2904,7 @@
"message": "Projets"
},
"layout.nav.revenue": {
"message": "Revenu"
"message": "Revenus"
},
"layout.nav.saved-projects": {
"message": "Projets sauvegardés"
@@ -2910,13 +2922,13 @@
"message": "Vérification de l'adresse e-mail requise"
},
"modal.shared-instance.open-in-app.benefit.install": {
"message": "Automatiquement installer le jeu requis and le loader"
"message": "Installez automatiquement tout ce à quoi ils jouent"
},
"modal.shared-instance.open-in-app.benefit.join": {
"message": "Rejoindre l'instance partagée en un clic"
"message": "Jouez le même contenu que vos amis"
},
"modal.shared-instance.open-in-app.benefit.update": {
"message": "Gardez le contenu partagé à jour quand l'instance change"
"message": "Gardez le contenu partagé à jour dès qu'il change"
},
"modal.shared-instance.open-in-app.get-app": {
"message": "Obtenir l'application Modrinth"
@@ -2954,8 +2966,8 @@
"moderation.page.technicalReview": {
"message": "Revue technique"
},
"modpack-scan-modal.clear-all-groups": {
"message": "Effacer tous les groupes"
"modpack-scan-modal.delete-all-groups.proceed": {
"message": "Effacer"
},
"modpack-scan-modal.failed": {
"message": "Échec"
@@ -2988,11 +3000,14 @@
"message": "Scanner tous les fichiers"
},
"modpack-scan-modal.scan-error": {
"message": "Certains fichiers n'ont pas réussi à scanner : {error}"
"message": "Certains fichiers n'ont pas pu être scannés : \n\n{error}"
},
"modpack-scan-modal.scanning": {
"message": "Scan en cours..."
},
"modpack-scan-modal.success": {
"message": "Succès"
},
"modpack-scan-modal.title": {
"message": "Scan du modpack ({scanned}/{total} fichiers)"
},
@@ -3308,117 +3323,6 @@
"organization.projects.none-with-create-prompt": {
"message": "Cette organisation n'a pas encore de projet. Souhaitez-vous en <create-link>créer un</create-link> ?"
},
"profile.bio.fallback.creator": {
"message": "Un créateur Modrinth."
},
"profile.bio.fallback.user": {
"message": "Un utilisateur Modrinth."
},
"profile.button.analytics": {
"message": "Voir les analyses de l'utilisateur"
},
"profile.button.billing": {
"message": "Gérer la facturation de lutilisateur"
},
"profile.button.edit-role": {
"message": "Modifier le rôle"
},
"profile.button.info": {
"message": "Afficher les détails de lutilisateur"
},
"profile.button.manage-projects": {
"message": "Gérer les projets"
},
"profile.button.remove-affiliate": {
"message": "Se Désaffilié"
},
"profile.button.set-affiliate": {
"message": "Se mettre comme affilié"
},
"profile.collection.projects-count": {
"message": "{count, plural,one {# projet} other {# projets}}"
},
"profile.details.label.auth-providers": {
"message": "Fournisseurs dauthentification"
},
"profile.details.label.email": {
"message": "Adresse e-mail"
},
"profile.details.label.email-verified": {
"message": "Adresse e-mail vérifiée"
},
"profile.details.label.has-password": {
"message": "Dispose d'un mot de passe"
},
"profile.details.label.has-totp": {
"message": "Dispose d'un TOTP"
},
"profile.details.label.payment-methods": {
"message": "Moyens de paiements"
},
"profile.details.tooltip.email-not-verified": {
"message": "Adresse e-mail non vérifiée"
},
"profile.details.tooltip.email-verified": {
"message": "Adresse e-mail vérifiée"
},
"profile.error.not-found": {
"message": "Utilisateur introuvable"
},
"profile.label.affiliate": {
"message": "Affilié"
},
"profile.label.badges": {
"message": "Badges"
},
"profile.label.collection": {
"message": "Collection"
},
"profile.label.download-count": {
"message": "{count, plural, one {téléchargement} other {téléchargements}}"
},
"profile.label.joined": {
"message": "Rejoint"
},
"profile.label.no-collections": {
"message": "Cet utilisateur n'a aucune collection !"
},
"profile.label.no-collections-auth": {
"message": "Vous n'avez aucune collection.\nVoulez-vous en <create-link>créer une</create-link> ?"
},
"profile.label.no-projects": {
"message": "Cet utilisateur n'a aucun projet !"
},
"profile.label.no-projects-auth": {
"message": "Vous n'avez aucun projet.\nVoulez-vous en <create-link>créer un</create-link> ?"
},
"profile.label.organizations": {
"message": "Organisations"
},
"profile.label.project-count": {
"message": "{count, plural, one {projet} other {projets}}"
},
"profile.label.saving": {
"message": "Sauvegarde en cours..."
},
"profile.meta.description": {
"message": "Téléchargez les projets de {username} sur Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Téléchargez les projets de {username} sur Modrinth"
},
"profile.official-account": {
"message": "Compte Modrinth Officiel"
},
"profile.official-account.bio": {
"message": "Le compte utilisateur officiel de Modrinth. Obtenez de laide via <support-link></support-link> ou par e-mail à <email></email>"
},
"profile.stats.projects-followers": {
"message": "{count, plural, one {<stat>{count}</stat> personne adore} other {<stat>{count}</stat> personnes adorent}}"
},
"profile.user-id": {
"message": "ID utilisateur : {id}"
},
"project-member-header.error-decline": {
"message": "Échec du refus de linvitation à l’équipe"
},
@@ -3767,9 +3671,6 @@
"project.moderation.admonition.under-review.body.3": {
"message": "Vous pouvez toujours modifier votre projet, cela n'affectera pas votre position dans la file d'attente."
},
"project.moderation.admonition.under-review.body.4": {
"message": "Nous visons à examiner les soumissions dans les 24 à 48 heures, mais certains projets peuvent être menacés. Cela ne reflète pas un problème avec votre soumission."
},
"project.moderation.admonition.under-review.body.5": {
"message": "<emphasis>Nous apprécions votre patience pendant que nos modérateurs travaillent dur pour garder Modrinth en sécurité, et nous sommes impatients de vous aider à partager votre contenu !</emphasis>"
},
@@ -3890,6 +3791,12 @@
"project.settings.permissions.delete-all-groups": {
"message": "Supprimer tous les groupes"
},
"project.settings.permissions.delete-all-groups-confirmation.description": {
"message": "Cela supprimera définitivement {count, plural, one {# groupe d'attribution} other {tous les # groupes d'attribution}} de ce projet ainsi que tous les fichiers qu'{count, plural, one {il contient} other {ils contiennent}}. Cette action est irréversible."
},
"project.settings.permissions.delete-all-groups-confirmation.title": {
"message": "Supprimer tous les groupes d'attribution ?"
},
"project.settings.permissions.empty-state.description": {
"message": "Aucune des versions de votre projet ne contient de contenu externe, vous n'avez donc pas à vous soucier d'obtenir des autorisations."
},
@@ -4043,6 +3950,9 @@
"project.versions.copy-link-option": {
"message": "Copier le lien"
},
"project.versions.copy-maven-coordinates-option": {
"message": "Copier les coordonnées Maven"
},
"project.versions.delete-button": {
"message": "Supprimer"
},
@@ -4850,15 +4760,9 @@
"settings.authorizations.about-this-app": {
"message": "À propos de cette application"
},
"settings.authorizations.by": {
"message": "par"
},
"settings.authorizations.description": {
"message": "Lorsque vous autorisez une application avec votre compte Modrinth, vous lui accordez laccès à votre compte. Vous pouvez gérer et consulter les accès à votre compte ici à tout moment."
},
"settings.authorizations.empty-state": {
"message": "Nous ne pouvons pas afficher vos applications autorisées pour le moment, nous travaillons à résoudre ce problème. Veuillez revenir sur cette page ultérieurement !"
},
"settings.authorizations.head-title": {
"message": "Autorisations"
},
@@ -5273,6 +5177,9 @@
"shared-instance.invite.inviter.unknown": {
"message": "Un utilisateur Modrinth"
},
"shared-instance.invite.joined-count": {
"message": "{count, plural, one {# personne a} other {# personnes ont}} déjà rejoint"
},
"shared-instance.invite.loading": {
"message": "Chargement de l'invitation…"
},
@@ -5370,7 +5277,7 @@
"message": "Version supprimée"
},
"version.notification.packaging-success-text": {
"message": "Votre pack de données a été packagé avec succès en un mod ! Assurez vous de tester pour vérifier la présence d'erreurs."
"message": "Votre pack de données a été empaqueté avec succès en un mod ! Assurez-vous de le tester pour vérifier la présence d'erreurs."
},
"version.notification.packaging-success-title": {
"message": "Succès d'empaquetage"
@@ -1778,99 +1778,6 @@
"muralpay.warning.wallet-address": {
"message": "בדוק היטב את כתובת הארנק שלך. לא ניתן לשחזר כספים שנשלחו לכתובת שגויה."
},
"profile.bio.fallback.creator": {
"message": "יוצר ב-Modrinth."
},
"profile.bio.fallback.user": {
"message": "משתמש ב-Modrinth."
},
"profile.button.billing": {
"message": "נהל את חיוב המשתמש"
},
"profile.button.edit-role": {
"message": "עריכת תפקיד"
},
"profile.button.info": {
"message": "הצג את הפרטים של המשתמש"
},
"profile.button.manage-projects": {
"message": "ניהול פרויקטים"
},
"profile.button.remove-affiliate": {
"message": "הסרה מתוכנית השותפים"
},
"profile.button.set-affiliate": {
"message": "הגדר כשותף"
},
"profile.details.label.auth-providers": {
"message": "ספקי אימות זהות"
},
"profile.details.label.email": {
"message": "אימייל"
},
"profile.details.label.email-verified": {
"message": "כתובת האימייל אומתה"
},
"profile.details.label.has-password": {
"message": "יש סיסמה"
},
"profile.details.label.has-totp": {
"message": "אימות דו-שלבי פעיל"
},
"profile.details.label.payment-methods": {
"message": "שיטת תשלום"
},
"profile.details.tooltip.email-not-verified": {
"message": "כתובת האימייל טרם אומתה"
},
"profile.details.tooltip.email-verified": {
"message": "כתובת האימייל אומתה"
},
"profile.error.not-found": {
"message": "המשתמש לא נמצא"
},
"profile.label.affiliate": {
"message": "שותף או משתמש שותף"
},
"profile.label.badges": {
"message": "תגים"
},
"profile.label.collection": {
"message": "אוסף"
},
"profile.label.joined": {
"message": "הצטרף ב-"
},
"profile.label.no-collections": {
"message": "למשתמש זה אין אוספים!"
},
"profile.label.no-collections-auth": {
"message": "אין לך אוספים.\nהאם תרצה <create-link>ליצור אחד</create-link>?"
},
"profile.label.no-projects": {
"message": "למשתמש זה אין פרויקטים!"
},
"profile.label.no-projects-auth": {
"message": "אין לך פרויקטים.\nהאם תרצה <create-link>ליצור אחד</create-link>?"
},
"profile.label.organizations": {
"message": "ארגונים"
},
"profile.label.saving": {
"message": "שומר..."
},
"profile.meta.description": {
"message": "הורד את הפרויקטים של {username} ב-Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} - הורד את הפרויקטים של {username} ב-Modrinth"
},
"profile.stats.projects-followers": {
"message": "{count, plural, one {<stat>{count}</stat> project follower} other {<stat>{count}</stat> project followers}}"
},
"profile.user-id": {
"message": "מזהה משתמש: {id}"
},
"project-member-header.error-decline": {
"message": "הפעולה לדחיית ההזמנה לצוות נכשלה"
},
+26 -134
View File
@@ -588,7 +588,7 @@
"message": "{author} által"
},
"app-marketing.features.mod-management.description": {
"message": "A Modrinth könnyűvé teszi az összes telepített modjaidnak a kezelését egy helyen. Telepíthetsz, eltávolíthatsz és frissíthetsz modokat egyetlen kattintással."
"message": "A Modrinth könnyűvé teszi az összes telepített modod a kezelését egy helyen. Telepíthetsz, eltávolíthatsz és frissíthetsz modokat egyetlen kattintással."
},
"app-marketing.features.mod-management.installed-mods": {
"message": "Telepített modok"
@@ -804,13 +804,13 @@
"message": "Visszaállítási e-mail küldése"
},
"auth.reset-password.method-choice.description": {
"message": "Írd be az e-mail címedet az alábbi mezőbe, és küldünk neked egy hivatkozást, amivel vissza tudja állítani a fiókod."
"message": "Írd be az e-mail címedet az alábbi mezőbe, és küldünk neked egy hivatkozást, amivel vissza tudod állítani a fiókod."
},
"auth.reset-password.notification.email-sent.text": {
"message": "Egy e-mail el lett küldve önnek az email-címére amennyiben az email-cím el volt mente a fiókban."
"message": "Egy e-mail el lett küldve az e-mail címedre amennyiben az email-cím el volt mente a fiókodban."
},
"auth.reset-password.notification.email-sent.title": {
"message": "E-mail küldve"
"message": "E-mail eküldve"
},
"auth.reset-password.notification.password-reset.text": {
"message": "Most már be tud lépni a fiókjába az új jelszavával."
@@ -843,7 +843,7 @@
"message": "Kód beírása..."
},
"auth.sign-in.continue-with-email": {
"message": "Továbblépés Email-lel"
"message": "Folytatás e-maillel"
},
"auth.sign-in.continue-with-passkey": {
"message": "Továbblépés biztonsági kulccsal"
@@ -870,7 +870,7 @@
"message": "Korhatár"
},
"auth.sign-up.continue-with-email": {
"message": "Folytatás Email-lel"
"message": "Folytatás e-maillel"
},
"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>."
@@ -915,10 +915,10 @@
"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}."
"message": "Egy e-mailt kaptál egy linkkel a fiókod hitelesítéséhez ezen az e-mail címen: {email}."
},
"auth.verify-email.notification.email-sent.title": {
"message": "Email elküldve"
"message": "E-mail eküldve"
},
"auth.verify-email.notification.error-occurred.title": {
"message": "Egy hiba történt"
@@ -930,7 +930,7 @@
"message": "E-mail cím hitelesítése"
},
"auth.verify-email.title": {
"message": "Email-cím hitelesítése"
"message": "E-mail cím hitelesítése"
},
"collection.aria-label.upload-icon": {
"message": "Ikon feltöltése"
@@ -954,7 +954,7 @@
"message": "Ikon kiválasztása"
},
"collection.button.unfollow-project": {
"message": "Projektek kikövetése"
"message": "Projekt kikövetése"
},
"collection.delete-modal.description": {
"message": "Ezzel véglegesen törlöd ezt a gyűjteményt. Ez a művelet nem vonható vissza."
@@ -1653,7 +1653,7 @@
"message": "Válassz kategóriát a folytatáshoz"
},
"dashboard.creator-withdraw-modal.tremendous-details.unverified-email-header": {
"message": "Hitelesítetlen e-mail"
"message": "Hitelesítetlen e-mail cím"
},
"dashboard.creator-withdraw-modal.tremendous-details.unverified-email-message": {
"message": "A kiszállítási e-mail cím, amit megadtál nincs hozzákapcsolva a Modrinth fiókodhoz. A Modrinth nem tudja visszaállítani a jutalmakat, amik rossz e-mail címre lettek küldve."
@@ -1974,7 +1974,7 @@
"message": "A pénzfelvétel előtt ellenőrizned kell az e-mail címedet."
},
"dashboard.withdraw.error.email-verification.title": {
"message": "E-mail hítelesítés szükséges"
"message": "E-mail hitelesítés szükséges"
},
"dashboard.withdraw.error.generic.text": {
"message": "Nem tudtuk elküldeni a kifizetési kérelmed, kérjük, ellenőrizd az adataid, vagy vedd fel a kapcsolatot az ügyfélszolgálattal.\n{error}"
@@ -2526,7 +2526,7 @@
"message": "Technikai áttekintés"
},
"layout.avatar.alt": {
"message": "Avatárod"
"message": "Az avatárod"
},
"layout.banner.account-action": {
"message": "Fiók akció szükséges"
@@ -2741,6 +2741,12 @@
"layout.nav.upgrade-to-modrinth-plus": {
"message": "Frissíts a Modrinth+-ra"
},
"layout.publish.email-verification-required.description": {
"message": "A Modrinthon való közzététel előtt hitelesítened kell az e-mail címedet."
},
"layout.publish.email-verification-required.title": {
"message": "E-mail hitelesítés szükséges"
},
"moderation.moderate": {
"message": "Moderálás"
},
@@ -2783,9 +2789,6 @@
"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..."
},
@@ -3065,117 +3068,6 @@
"organization.projects.none-with-create-prompt": {
"message": "Ennek a szervezetnek még nincsenek projektjei. Szeretnél <create-link>létrehozni egyet</create-link>?"
},
"profile.bio.fallback.creator": {
"message": "Egy Modrinth fejlesztő."
},
"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"
},
"profile.button.edit-role": {
"message": "Szerep szerkesztése"
},
"profile.button.info": {
"message": "Felhasználói adatok megtekintése"
},
"profile.button.manage-projects": {
"message": "Projektek kezelése"
},
"profile.button.remove-affiliate": {
"message": "Társult vállalkozás törlése"
},
"profile.button.set-affiliate": {
"message": "Beállítás társult vállalkozás ként"
},
"profile.collection.projects-count": {
"message": "{count} projekt"
},
"profile.details.label.auth-providers": {
"message": "Auth szolgáltatók"
},
"profile.details.label.email": {
"message": "E-mail"
},
"profile.details.label.email-verified": {
"message": "E-mail cím ellenőrizve"
},
"profile.details.label.has-password": {
"message": "Van jelszó"
},
"profile.details.label.has-totp": {
"message": "Van TOTP"
},
"profile.details.label.payment-methods": {
"message": "Kifizetési módok"
},
"profile.details.tooltip.email-not-verified": {
"message": "Nem hitelesített email"
},
"profile.details.tooltip.email-verified": {
"message": "E-mail cím hitelesítve"
},
"profile.error.not-found": {
"message": "Felhasználó nem található"
},
"profile.label.affiliate": {
"message": "Társult vállalkozás"
},
"profile.label.badges": {
"message": "Jelvények"
},
"profile.label.collection": {
"message": "Gyűjtemény"
},
"profile.label.download-count": {
"message": "letöltés"
},
"profile.label.joined": {
"message": "Csatlakozott"
},
"profile.label.no-collections": {
"message": "Ennek a felhasználónak nincsenek gyűjteményei!"
},
"profile.label.no-collections-auth": {
"message": "Nincsenek gyűjteményeid.\nSzeretnél <create-link>létrehozni egyet</create-link>?"
},
"profile.label.no-projects": {
"message": "Ennek a felhasználónak nincsenek projektjei!"
},
"profile.label.no-projects-auth": {
"message": "Nincsenek projektjeid.\nSzeretnél <create-link>létrehozni egyet</create-link>?"
},
"profile.label.organizations": {
"message": "Szervezetek"
},
"profile.label.project-count": {
"message": "projekt"
},
"profile.label.saving": {
"message": "Mentés..."
},
"profile.meta.description": {
"message": "Töltsd le {username} projektjeit a Modrinthon"
},
"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": "<stat>{count}</stat> projektkövető"
},
"profile.user-id": {
"message": "Felhasználói azonosító: {id}"
},
"project-member-header.error-decline": {
"message": "Nem sikerült elutasítani a meghívást"
},
@@ -3614,6 +3506,9 @@
"project.settings.permissions.sort.status": {
"message": "Állapot"
},
"project.settings.tags.multiple-resolution-tags-warning": {
"message": "{count} felbontási címkét választottál ki ({tags}). A forráscsomagoknak általában csak egy felbontási címkéjük lehet."
},
"project.settings.title": {
"message": "Beállítások"
},
@@ -4239,7 +4134,7 @@
"message": "Átírányítás URI hozzáadása"
},
"settings.applications.button.cancel": {
"message": "Megszakítás"
"message": "Mégse"
},
"settings.applications.button.create": {
"message": "Alkalmazás létrehozása"
@@ -4328,15 +4223,9 @@
"settings.authorizations.about-this-app": {
"message": "Az alkalmazásról"
},
"settings.authorizations.by": {
"message": "által"
},
"settings.authorizations.description": {
"message": "Amikor engedélyezel egy alkalmazást a Modrinth fiókoddal, hozzáférést biztosítasz számára a fiókodhoz. A fiókodhoz való hozzáférést bármikor kezelheted és ellenőrizheted itt."
},
"settings.authorizations.empty-state": {
"message": "Jelenleg nem tudjuk megjeleníteni az azonosított alkalmazásokat, dolgozunk a probléma megoldásán. Kérlek látogasd meg ezt az oldalt később!"
},
"settings.authorizations.head-title": {
"message": "Engedélyek"
},
@@ -4736,6 +4625,9 @@
"settings.sidebar.label.display": {
"message": "Megjelenés"
},
"shared-instance.invite.joined-count": {
"message": "{count} személy már csatlakozott"
},
"ui.latest-news-row.latest-news": {
"message": "A legújabb hírek a Modrinthról"
},
@@ -2159,99 +2159,6 @@
"muralpay.warning.wallet-address": {
"message": "Periksa ulang alamat dompet Anda. Dana yang terkirim ke alamat yang salah tidak dapat dipulihkan."
},
"profile.bio.fallback.creator": {
"message": "Seorang kreator Modrinth."
},
"profile.bio.fallback.user": {
"message": "Seorang pengguna Modrinth."
},
"profile.button.billing": {
"message": "Kelola penagihan pengguna"
},
"profile.button.edit-role": {
"message": "Ubah peran"
},
"profile.button.info": {
"message": "Lihat perincian pengguna"
},
"profile.button.manage-projects": {
"message": "Kelola proyek"
},
"profile.button.remove-affiliate": {
"message": "Hapus sebagai afiliasi"
},
"profile.button.set-affiliate": {
"message": "Tetapkan sebagai afiliasi"
},
"profile.details.label.auth-providers": {
"message": "Penyedia autentikasi"
},
"profile.details.label.email": {
"message": "Sur-el"
},
"profile.details.label.email-verified": {
"message": "Sur-el terverifikasi"
},
"profile.details.label.has-password": {
"message": "Memiliki kata sandi"
},
"profile.details.label.has-totp": {
"message": "Memiliki TOTP"
},
"profile.details.label.payment-methods": {
"message": "Metode pembayaran"
},
"profile.details.tooltip.email-not-verified": {
"message": "Sur-el tidak terverifikasi"
},
"profile.details.tooltip.email-verified": {
"message": "Sur-el terverifikasi"
},
"profile.error.not-found": {
"message": "Pengguna tidak ditemukan"
},
"profile.label.affiliate": {
"message": "Afiliasi"
},
"profile.label.badges": {
"message": "Lencana"
},
"profile.label.collection": {
"message": "Koleksi"
},
"profile.label.joined": {
"message": "Telah bergabung"
},
"profile.label.no-collections": {
"message": "Pengguna ini tidak memiliki koleksi!"
},
"profile.label.no-collections-auth": {
"message": "Anda tidak memiliki koleksi apa pun.\nApakah Anda ingin <create-link>membuatnya</create-link>?"
},
"profile.label.no-projects": {
"message": "Pengguna ini tidak memiliki proyek!"
},
"profile.label.no-projects-auth": {
"message": "Anda tidak memiliki proyek apa pun.\nApakah Anda ingin <create-link>membuatnya</create-link>?"
},
"profile.label.organizations": {
"message": "Organisasi"
},
"profile.label.saving": {
"message": "Menyimpan..."
},
"profile.meta.description": {
"message": "Unduh proyek milik {username} di Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Unduh proyek milik {username} di Modrinth"
},
"profile.stats.projects-followers": {
"message": "{count, plural, other {<stat>{count}</stat> pengikut proyek}}"
},
"profile.user-id": {
"message": "Pengenal Pengguna: {id}"
},
"project-member-header.error-decline": {
"message": "Gagal menolak undangan tim"
},
+34 -124
View File
@@ -2123,6 +2123,12 @@
"dashboard.withdraw.error.minimum-not-met.title": {
"message": "Importo troppo basso"
},
"dashboard.withdraw.error.payout-method-disabled.text": {
"message": "Questo metodo di prelievo è stato disabilitato dal PSP. Usane uno diverso o contatta l'assistenza."
},
"dashboard.withdraw.error.payout-method-disabled.title": {
"message": "Metodo di prelievo non disponibile"
},
"dashboard.withdraw.error.paypal-country-mismatch.text": {
"message": "Si prega di usare l'opzione di trasferimento PayPal corretta per la tua regione (Stati Uniti o Internazionale)."
},
@@ -2913,13 +2919,13 @@
"message": "Verifica email richiesta"
},
"modal.shared-instance.open-in-app.benefit.install": {
"message": "Installa automaticamente il gioco e il loader richiesto"
"message": "Installa automaticamente ciò a cui stanno giocando"
},
"modal.shared-instance.open-in-app.benefit.join": {
"message": "Entra nell'istanza condivisa in un clic"
"message": "Gioca allo stesso modo dei tuoi amici"
},
"modal.shared-instance.open-in-app.benefit.update": {
"message": "Mantieni i contenuti condivisi aggiornati con l'istanza"
"message": "Aggiorna i contenuti non appena lo fanno loro"
},
"modal.shared-instance.open-in-app.get-app": {
"message": "Scarica Modrinth App"
@@ -2957,8 +2963,23 @@
"moderation.page.technicalReview": {
"message": "Revisione tecnica"
},
"modpack-scan-modal.clear-all-groups": {
"message": "Svuota gruppi"
"modpack-scan-modal.batch.label": {
"message": "{amount} alla volta"
},
"modpack-scan-modal.batch.placeholder": {
"message": "Ammontare"
},
"modpack-scan-modal.delete-all-groups-confirmation.description": {
"message": "Questi gruppi di attribuzione e i file all'interno saranno rimossi per sempre da questo progetto. Quest'azione non può essere annullata."
},
"modpack-scan-modal.delete-all-groups.error": {
"message": "Errore nell'eliminazione dei gruppi: {error}"
},
"modpack-scan-modal.delete-all-groups.proceed": {
"message": "Procedi"
},
"modpack-scan-modal.delete-all-groups.success": {
"message": "Tutti i gruppi eliminati con successo."
},
"modpack-scan-modal.failed": {
"message": "Errore"
@@ -2991,11 +3012,14 @@
"message": "Scansiona tutto"
},
"modpack-scan-modal.scan-error": {
"message": "Alcuni file non sono stati scansionati: {error}"
"message": "Alcuni file non sono stati scansionati: \n\n{error}"
},
"modpack-scan-modal.scanning": {
"message": "Scansione..."
},
"modpack-scan-modal.success": {
"message": "Successo"
},
"modpack-scan-modal.title": {
"message": "Scansione del pacchetto ({scanned}/{total} file)"
},
@@ -3311,117 +3335,6 @@
"organization.projects.none-with-create-prompt": {
"message": "Questa organizzazione non ha alcun progetto. Vorresti <create-link>crearne uno</create-link>?"
},
"profile.bio.fallback.creator": {
"message": "Creatore su Modrinth."
},
"profile.bio.fallback.user": {
"message": "Utente di Modrinth."
},
"profile.button.analytics": {
"message": "Mostra analitiche"
},
"profile.button.billing": {
"message": "Gestisci pagamento utente"
},
"profile.button.edit-role": {
"message": "Modifica ruolo"
},
"profile.button.info": {
"message": "Mostra dettagli utente"
},
"profile.button.manage-projects": {
"message": "Gestisci progetti"
},
"profile.button.remove-affiliate": {
"message": "Rimuovi da affiliato"
},
"profile.button.set-affiliate": {
"message": "Imposta come affiliato"
},
"profile.collection.projects-count": {
"message": "{count, plural, one {# progetto} other {# progetti}}"
},
"profile.details.label.auth-providers": {
"message": "Fornitori autenticazione"
},
"profile.details.label.email": {
"message": "Email"
},
"profile.details.label.email-verified": {
"message": "Email verificata"
},
"profile.details.label.has-password": {
"message": "Usa una password"
},
"profile.details.label.has-totp": {
"message": "Usa TOTP"
},
"profile.details.label.payment-methods": {
"message": "Metodi di pagamento"
},
"profile.details.tooltip.email-not-verified": {
"message": "Email non verificata"
},
"profile.details.tooltip.email-verified": {
"message": "Email verificata"
},
"profile.error.not-found": {
"message": "Utente non trovato"
},
"profile.label.affiliate": {
"message": "Affiliato"
},
"profile.label.badges": {
"message": "Distintivi"
},
"profile.label.collection": {
"message": "Raccolta"
},
"profile.label.download-count": {
"message": "download"
},
"profile.label.joined": {
"message": "Iscrizione"
},
"profile.label.no-collections": {
"message": "Questo utente non ha raccolte!"
},
"profile.label.no-collections-auth": {
"message": "Non hai alcuna raccolta.\nNe vorresti <create-link>creare una</create-link>?"
},
"profile.label.no-projects": {
"message": "Questo utente non ha progetti!"
},
"profile.label.no-projects-auth": {
"message": "Non hai alcun progetto. Ne vorresti <create-link>creare uno</create-link>?"
},
"profile.label.organizations": {
"message": "Organizzazioni"
},
"profile.label.project-count": {
"message": "{count, plural, one {progetto} other {progetti}}"
},
"profile.label.saving": {
"message": "Salvataggio..."
},
"profile.meta.description": {
"message": "Scarica i progetti di {username} su Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Scarica i progetti di {username} su Modrinth"
},
"profile.official-account": {
"message": "Account Modrinth ufficiale"
},
"profile.official-account.bio": {
"message": "L'account ufficiale di Modrinth. Ricevi assistenza presso <support-link></support-link> o tramite mail presso <email></email>"
},
"profile.stats.projects-followers": {
"message": "<stat>{count, plural, =0 {Nessun} other {{count}}}</stat> follower del progetto"
},
"profile.user-id": {
"message": "ID utente: {id}"
},
"project-member-header.error-decline": {
"message": "Errore nel rifiutare l'invito al team"
},
@@ -3771,7 +3684,10 @@
"message": "Puoi ancora modificare il progetto; non influirà sulla tua posizione in coda."
},
"project.moderation.admonition.under-review.body.4": {
"message": "Puntiamo a revisionare i progetti entro le 24-48 ore, ma potrebbero esserci dei ritardi; ciò non vuol dire che abbiamo trovato un problema."
"message": "Puntiamo a revisionare i progetti entro le 2448 ore, ma potrebbero esserci dei ritardi; Ciò non vuol dire che abbiamo trovato un problema."
},
"project.moderation.admonition.under-review.body.4.alt-week": {
"message": "Puntiamo a revisionare i progetti entro una settimana, ma potrebbero esserci dei ritardi. Ciò non vuol dire che abbiamo trovato un problema."
},
"project.moderation.admonition.under-review.body.5": {
"message": "<emphasis>Apprezziamo la tua pazienza. Mentre i nostri moderatori si impegnano a tenere Modrinth un posto sicuro, non vediamo l'ora di aiutare a condividere i tuoi contenuti! 💚</emphasis>"
@@ -4844,15 +4760,9 @@
"settings.authorizations.about-this-app": {
"message": "Info sull'app"
},
"settings.authorizations.by": {
"message": "da"
},
"settings.authorizations.description": {
"message": "Quando autorizzi un'applicazione, le concedi l'accesso al tuo account Modrinth. Qui puoi gestirne e controllarne l'accesso in qualsiasi momento."
},
"settings.authorizations.empty-state": {
"message": "Al momento non riusciamo a mostrare le tue app autorizzate, stiamo lavorando per risolvere il problema. Ritorna più tardi!"
},
"settings.authorizations.head-title": {
"message": "Autorizzazioni"
},
+93 -99
View File
@@ -45,10 +45,10 @@
"message": "依存プロジェクトのタイプ"
},
"analytics.breakdown.download-reason": {
"message": "ダウンロードの追加情報"
"message": "ダウンロードの理由"
},
"analytics.breakdown.download-source": {
"message": "プラットフォーム"
"message": "ソース"
},
"analytics.breakdown.game-version": {
"message": "ゲームのバージョン"
@@ -57,7 +57,7 @@
"message": "内訳"
},
"analytics.breakdown.loader": {
"message": "ゲームのローダー"
"message": "ローダー"
},
"analytics.breakdown.members": {
"message": "メンバー"
@@ -284,6 +284,9 @@
"analytics.project.all": {
"message": "全てのプロジェクト"
},
"analytics.project.icon-alt": {
"message": "{name}のアイコン"
},
"analytics.project.select": {
"message": "プロジェクトを選択"
},
@@ -608,6 +611,33 @@
"auth.authorize.redirect-url": {
"message": "<redirect-url>{url}</redirect-url> に自動的に転送されます"
},
"auth.create-account.age-requirement.warning-title": {
"message": "年齢制限"
},
"auth.create-account.complete-sign-up": {
"message": "サインアップを完了する"
},
"auth.create-account.date-of-birth.invalid.title": {
"message": "入力された生年月日が無効です"
},
"auth.create-account.date-of-birth.label": {
"message": "生年月日"
},
"auth.create-account.date-of-birth.placeholder": {
"message": "生年月日を選んでください"
},
"auth.create-account.date-of-birth.required.text": {
"message": "続行する前に生年月日を入力してください。"
},
"auth.create-account.date-of-birth.required.title": {
"message": "生年月日が必要です"
},
"auth.create-account.date-of-birth.under13-helper": {
"message": "Modrinthアカウントを作成するための年齢を満たしていません。"
},
"auth.create-account.info-panel.text": {
"message": "入力された生年月日は保存されません。登録時にCOPPA(児童オンラインプライバシー保護法)への準拠を確認するためにのみ使用いたします。"
},
"auth.create-account.page-title": {
"message": "アカウントの作成"
},
@@ -662,6 +692,9 @@
"auth.sign-in.continue-with-email": {
"message": "メールアドレスで続ける"
},
"auth.sign-in.continue-with-passkey": {
"message": "パスキーで続ける"
},
"auth.sign-in.create-account": {
"message": "サインアップ"
},
@@ -671,12 +704,18 @@
"auth.sign-in.last-sign-in": {
"message": "最後に使用"
},
"auth.sign-in.no-account": {
"message": "アカウントを持っていませんか?"
},
"auth.sign-in.sign-in-with": {
"message": "Modrinthへサインイン"
},
"auth.sign-in.title": {
"message": "ログイン"
},
"auth.sign-up.age-requirement.warning-title": {
"message": "年齢制限"
},
"auth.sign-up.continue-with-email": {
"message": "メールアドレスで続ける"
},
@@ -698,6 +737,9 @@
"auth.verify-email.action.account-settings": {
"message": "アカウント設定"
},
"auth.verify-email.action.discover-mods": {
"message": "早速Modを探す"
},
"auth.verify-email.already-verified.description": {
"message": "メールアドレスはすでに承認されています!"
},
@@ -731,6 +773,9 @@
"collection.aria-label.upload-icon": {
"message": "アイコンをアップロード"
},
"collection.button.discover-mods": {
"message": "Modを探す"
},
"collection.button.edit-icon": {
"message": "アイコンを編集"
},
@@ -803,6 +848,9 @@
"conversation-thread.action.send": {
"message": "送信"
},
"conversation-thread.action.set-to-draft": {
"message": "下書きとして保存"
},
"conversation-thread.reply-editor.placeholder.send": {
"message": "メッセージを送る…"
},
@@ -815,6 +863,27 @@
"create-project-version.create-modal.stage.add-files.metadata-tab": {
"message": "メタデータ"
},
"create-project-version.create-modal.stage.details.details-tab": {
"message": "詳細"
},
"create-project-version.create-modal.stage.details.files-tab": {
"message": "ファイル"
},
"create-project-version.create-modal.stage.details.metadata-tab": {
"message": "メタデータ"
},
"create-project-version.create-modal.stage.details.version-changelog": {
"message": "バージョン履歴"
},
"create-project-version.create-modal.stage.metadata.details-tab": {
"message": "詳細"
},
"create-project-version.create-modal.stage.metadata.edit-button": {
"message": "編集"
},
"create-project-version.create-modal.stage.metadata.files-tab": {
"message": "ファイル"
},
"create-project-version.create-modal.stage.metadata.uploaded-files": {
"message": "アップロードされたファイル"
},
@@ -917,6 +986,9 @@
"create.project.name-placeholder": {
"message": "プロジェクト名を入力…"
},
"create.project.organization-icon-alt": {
"message": "{name}アイコン"
},
"create.project.owner-description": {
"message": "プロジェクトオーナーを自分自身または自身が所属している組織に設定してください。"
},
@@ -947,6 +1019,9 @@
"create.project.type-server": {
"message": "サーバー"
},
"create.project.unknown-user": {
"message": "不明なユーザー"
},
"create.project.url-label": {
"message": "URL"
},
@@ -1289,6 +1364,9 @@
"dashboard.discord-roles.banner.cta": {
"message": "Discordをリンクする"
},
"dashboard.discord-roles.banner.title": {
"message": "Discordのロールを獲得"
},
"dashboard.discord-roles.role.creator": {
"message": "クリエイター"
},
@@ -2267,6 +2345,9 @@
"layout.footer.social.x": {
"message": "X"
},
"layout.footer.unknown-commit": {
"message": "不明"
},
"layout.menu-toggle.action": {
"message": "メニューを切り替える"
},
@@ -2330,6 +2411,15 @@
"layout.nav.upgrade-to-modrinth-plus": {
"message": "Modrinth+にアップグレード"
},
"modal.shared-instance.open-in-app.get-app": {
"message": "Modrinth Appを取得"
},
"modal.shared-instance.open-in-app.title": {
"message": "Modrinth Appで開く"
},
"modal.shared-instance.open-in-app.why-use": {
"message": "Modrinth Appの良いところ"
},
"moderation.moderate": {
"message": "適度"
},
@@ -2639,96 +2729,6 @@
"organization.project-transfer.type-column": {
"message": "タイプ"
},
"profile.bio.fallback.creator": {
"message": "Modrinthの作成者。"
},
"profile.bio.fallback.user": {
"message": "Modrinthのユーザー。"
},
"profile.button.billing": {
"message": "ユーザー課金管理"
},
"profile.button.edit-role": {
"message": "ロールを編集"
},
"profile.button.info": {
"message": "ユーザー情報を表示"
},
"profile.button.manage-projects": {
"message": "プロジェクトを管理"
},
"profile.button.remove-affiliate": {
"message": "アフィリエイトを解除する"
},
"profile.button.set-affiliate": {
"message": "アフィリエイトとして設定する"
},
"profile.details.label.auth-providers": {
"message": "認証プロバイダー"
},
"profile.details.label.email": {
"message": "メールドレス"
},
"profile.details.label.email-verified": {
"message": "メールアドレス認証済み"
},
"profile.details.label.has-password": {
"message": "パスワードがすでにあります"
},
"profile.details.label.has-totp": {
"message": "TOTPがあります"
},
"profile.details.label.payment-methods": {
"message": "支払い方法"
},
"profile.details.tooltip.email-not-verified": {
"message": "メールアドレス未認証"
},
"profile.details.tooltip.email-verified": {
"message": "メールアドレス認証済み"
},
"profile.error.not-found": {
"message": "ユーザーが見つかりませんでした"
},
"profile.label.affiliate": {
"message": "アフィリエイト"
},
"profile.label.badges": {
"message": "バッジ"
},
"profile.label.collection": {
"message": "コレクション"
},
"profile.label.joined": {
"message": "参加: "
},
"profile.label.no-collections": {
"message": "このユーザーのコレクションはありません!"
},
"profile.label.no-collections-auth": {
"message": "コレクションがありません。\n <create-link>コレクションを作成しますか</create-link>"
},
"profile.label.no-projects": {
"message": "このユーザーのプロジェクトはありません!"
},
"profile.label.no-projects-auth": {
"message": "プロジェクトがありません\nプロジェクトを<create-link>作成しますか</create-link>"
},
"profile.label.organizations": {
"message": "組織"
},
"profile.label.saving": {
"message": "保存中…"
},
"profile.meta.description": {
"message": "Modrinthで{username}のプロジェクトをダウンロードする"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Modrinthで{username}のプロジェクトをダウンロードする"
},
"profile.user-id": {
"message": "ユーザーID: {id}"
},
"project-member-header.error-decline": {
"message": "チームへの招待の辞退に失敗しました"
},
@@ -3713,15 +3713,9 @@
"settings.authorizations.about-this-app": {
"message": "このアプリについて"
},
"settings.authorizations.by": {
"message": "作成者"
},
"settings.authorizations.description": {
"message": "Modrinthアカウントでアプリケーションを承認することにより、アプリケーションがあなたのアカウントにアクセスできるようになります。 アクセス権はいつでも確認でき、変更可能です。"
},
"settings.authorizations.empty-state": {
"message": "現在承認済みアプリを表示することができません。現在修正中のため、また後ほど確認ください!"
},
"settings.authorizations.head-title": {
"message": "承認"
},
-126
View File
@@ -2942,9 +2942,6 @@
"moderation.page.technicalReview": {
"message": "기술 리뷰"
},
"modpack-scan-modal.clear-all-groups": {
"message": "모든 그룹 삭제"
},
"modpack-scan-modal.failed": {
"message": "실패"
},
@@ -2975,9 +2972,6 @@
"modpack-scan-modal.scan-all-files": {
"message": "전체 파일 스캔"
},
"modpack-scan-modal.scan-error": {
"message": "일부 파일을 스캔하지 못했습니다: {error}"
},
"modpack-scan-modal.scanning": {
"message": "스캔중..."
},
@@ -3296,117 +3290,6 @@
"organization.projects.none-with-create-prompt": {
"message": "이 조직에는 아직 프로젝트가 없습니다. <create-link>하나 생성하시겠습니까?</create-link>?"
},
"profile.bio.fallback.creator": {
"message": "Modrinth 창작자입니다."
},
"profile.bio.fallback.user": {
"message": "Modrinth 사용자입니다."
},
"profile.button.analytics": {
"message": "사용자 분석 보기"
},
"profile.button.billing": {
"message": "사용자 청구 관리"
},
"profile.button.edit-role": {
"message": "역할 수정"
},
"profile.button.info": {
"message": "사용자 상세 정보 보기"
},
"profile.button.manage-projects": {
"message": "프로젝트 관리"
},
"profile.button.remove-affiliate": {
"message": "제휴 취소"
},
"profile.button.set-affiliate": {
"message": "제휴사로 설정"
},
"profile.collection.projects-count": {
"message": "{count, plural, one {프로젝트 #개} other {프로젝트 #개}}"
},
"profile.details.label.auth-providers": {
"message": "인증 제공자"
},
"profile.details.label.email": {
"message": "이메일"
},
"profile.details.label.email-verified": {
"message": "이메일 인증됨"
},
"profile.details.label.has-password": {
"message": "비밀번호 사용"
},
"profile.details.label.has-totp": {
"message": "TOTP 사용"
},
"profile.details.label.payment-methods": {
"message": "결제 수단"
},
"profile.details.tooltip.email-not-verified": {
"message": "이메일이 인증되지 않음"
},
"profile.details.tooltip.email-verified": {
"message": "이메일 인증됨"
},
"profile.error.not-found": {
"message": "사용자를 찾을 수 없습니다"
},
"profile.label.affiliate": {
"message": "제휴"
},
"profile.label.badges": {
"message": "배지"
},
"profile.label.collection": {
"message": "컬렉션"
},
"profile.label.download-count": {
"message": ""
},
"profile.label.joined": {
"message": "가입"
},
"profile.label.no-collections": {
"message": "이 사용자는 컬렉션이 없습니다!"
},
"profile.label.no-collections-auth": {
"message": "아직 컬렉션이 없습니다.\n<create-link>새 컬렉션</create-link>을 생성하시겠습니까?"
},
"profile.label.no-projects": {
"message": "이 사용자는 프로젝트가 없습니다!"
},
"profile.label.no-projects-auth": {
"message": "아직 프로젝트가 없습니다.\n<create-link>새 프로젝트</create-link>를 생성하시겠습니까?"
},
"profile.label.organizations": {
"message": "조직"
},
"profile.label.project-count": {
"message": ""
},
"profile.label.saving": {
"message": "저장..."
},
"profile.meta.description": {
"message": "Modrinth에서 {username}의 프로젝트 다운로드"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Modrinth에서 {username}의 프로젝트 다운로드"
},
"profile.official-account": {
"message": "공식 Modrinth 계정"
},
"profile.official-account.bio": {
"message": "Modrinth의 공식 사용자 계정입니다. <support-link></support-link> 또는 <email></email> 이메일을 통해 지원을 받으실 수 있습니다"
},
"profile.stats.projects-followers": {
"message": "{count, plural, other {<stat>{count}</stat> 프로젝트 팔로워}}"
},
"profile.user-id": {
"message": "사용자 ID: {id}"
},
"project-member-header.error-decline": {
"message": "팀 초대를 거절하지 못했습니다"
},
@@ -3755,9 +3638,6 @@
"project.moderation.admonition.under-review.body.3": {
"message": "프로젝트를 수정해도 대기열 우선 순위에는 영향을 미치지 않습니다."
},
"project.moderation.admonition.under-review.body.4": {
"message": "제출한 내용을 24~48시간 이내에 검토하는 것을 목표로 하고 있으나, 일부 프로젝트의 경우 지연될 수 있습니다. 이는 제출한 내용에 문제가 있다는 것을 의미하지 않습니다."
},
"project.moderation.admonition.under-review.body.5": {
"message": "<emphasis>운영진들이 Modrinth의 안전한 환경을 유지하기 위해 최선을 다하고 있는 동안 기다려 주셔서 감사합니다. 여러분의 콘텐츠를 공유하실 수 있도록 도와드릴 수 있기를 기대합니다! 💚</emphasis>"
},
@@ -4844,15 +4724,9 @@
"settings.authorizations.about-this-app": {
"message": "이 앱에 대해"
},
"settings.authorizations.by": {
"message": "제작자"
},
"settings.authorizations.description": {
"message": "Modrinth 계정으로 애플리케이션에 권한을 부여하면, 해당 앱이 귀하의 계정에 접근할 수 있게 됩니다. 여기에서 언제든지 계정 접근 권한을 관리하고 확인할 수 있습니다."
},
"settings.authorizations.empty-state": {
"message": "현재 승인한 애플리케이션을 표시할 수 없습니다. 이 문제를 해결하기 위해 노력 중입니다. 나중에 다시 확인해 주세요!"
},
"settings.authorizations.head-title": {
"message": "승인"
},
-108
View File
@@ -2684,105 +2684,6 @@
"muralpay.warning.wallet-address": {
"message": "Semak semula alamat dompet anda. Dana yang dihantar ke alamat yang salah tidak boleh dipulihkan."
},
"profile.bio.fallback.creator": {
"message": "Seorang pencipta Modrinth."
},
"profile.bio.fallback.user": {
"message": "Seorang pengguna Modrinth."
},
"profile.button.billing": {
"message": "Urus pengebilan pengguna"
},
"profile.button.edit-role": {
"message": "Sunting peranan"
},
"profile.button.info": {
"message": "Lihat butiran pengguna"
},
"profile.button.manage-projects": {
"message": "Urus projek"
},
"profile.button.remove-affiliate": {
"message": "Alih keluar rakan afiliasi"
},
"profile.button.set-affiliate": {
"message": "Tetapkan sebagai rakan afiliasi"
},
"profile.collection.projects-count": {
"message": "{count, plural, other {# projek}}"
},
"profile.details.label.auth-providers": {
"message": "Penyedia pengesahan"
},
"profile.details.label.email": {
"message": "E-mel"
},
"profile.details.label.email-verified": {
"message": "E-mel disahkan"
},
"profile.details.label.has-password": {
"message": "Mempunyai kata laluan"
},
"profile.details.label.has-totp": {
"message": "Mempunyai TOTP"
},
"profile.details.label.payment-methods": {
"message": "Kaedah pembayaran"
},
"profile.details.tooltip.email-not-verified": {
"message": "E-mel tidak disahkan"
},
"profile.details.tooltip.email-verified": {
"message": "E-mel disahkan"
},
"profile.error.not-found": {
"message": "Pengguna tidak dijumpai"
},
"profile.label.affiliate": {
"message": "Afiliasi"
},
"profile.label.badges": {
"message": "Lencana"
},
"profile.label.collection": {
"message": "Koleksi"
},
"profile.label.joined": {
"message": "Telah menyertai"
},
"profile.label.no-collections": {
"message": "Pengguna ini tidak memiliki sebarang koleksi!"
},
"profile.label.no-collections-auth": {
"message": "Anda tidak memiliki sebarang koleksi.\nAdakah anda mahu <create-link>mencipta sebuah koleksi</create-link>?"
},
"profile.label.no-projects": {
"message": "Pengguna ini tidak memiliki sebarang projek!"
},
"profile.label.no-projects-auth": {
"message": "Anda tidak memiliki sebarang projek.\nAdakah anda mahu <create-link>mencipta sebuah projek</create-link>?"
},
"profile.label.organizations": {
"message": "Organisasi"
},
"profile.label.saving": {
"message": "Sedang menyimpan..."
},
"profile.meta.description": {
"message": "Muat turun projek milik {username} di Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Muat turun projek milik {username} di Modrinth"
},
"profile.official-account.bio": {
"message": "Akaun pengguna rasmi Modrinth. Dapatkan sokongan di <support-link></support-link> atau melalui e-mel di <email></email>"
},
"profile.stats.projects-followers": {
"message": "{count, plural, other {<stat>{count}</stat> pengikut projek}}"
},
"profile.user-id": {
"message": "ID Pengguna: {id}"
},
"project-member-header.error-decline": {
"message": "Gagal menolak jemputan pasukan"
},
@@ -3020,9 +2921,6 @@
"project.moderation.admonition.under-review.body.3": {
"message": "Anda masih boleh mengubah suai projek anda, ia tidak akan menjejaskan kedudukan anda dalam barisan."
},
"project.moderation.admonition.under-review.body.4": {
"message": "Kami menyasarkan untuk menyemak penyerahan dalam masa 24-48 jam, tetapi sesetengah projek mungkin menghadapi kelewatan. Ini tidak mencerminkan masalah dengan penyerahan anda."
},
"project.moderation.admonition.under-review.body.5": {
"message": "<emphasis>Kami menghargai kesabaran anda sementara penyederhana kami berusaha keras untuk memastikan Modrinth kekal selamat, dan berharap dapat membantu anda berkongsi kandungan anda!💚</emphasis>"
},
@@ -3848,15 +3746,9 @@
"settings.authorizations.about-this-app": {
"message": "Mengenai aplikasi ini"
},
"settings.authorizations.by": {
"message": "oleh"
},
"settings.authorizations.description": {
"message": "Apabila anda membenarkan aplikasi ini dengan akaun Modrinth anda, anda memberikannya akses kepada akaun anda. Anda boleh mengurus dan menyemak akses kepada akaun anda di sini pada bila-bila masa."
},
"settings.authorizations.empty-state": {
"message": "Kami tidak dapat memaparkan aplikasi yang dibenarkan oleh anda pada masa ini, kami sedang berusaha untuk memperbaikinya. Sila kunjungi laman ini pada tarikh yang akan datang!"
},
"settings.authorizations.head-title": {
"message": "Kebenaran"
},
+182 -203
View File
@@ -147,7 +147,7 @@
"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."
"message": "Alleen weergaven en downloads via Modrinth tellen mee voor het genereren van inkomsten, en voor downloads moeten gebruikers aangemeld zijn."
},
"analytics.chart.legend.monetization-details.title": {
"message": "Details over genereren van inkomsten"
@@ -417,7 +417,7 @@
"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."
"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 aangemeld 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"
@@ -786,7 +786,7 @@
"message": "Kies je geboortedatum"
},
"auth.create-account.date-of-birth.required.text": {
"message": "Voer uw geboortedatum in voordat u verdergaat."
"message": "Voer je geboortedatum in voordat je verdergaat."
},
"auth.create-account.date-of-birth.required.title": {
"message": "Geboortedatum verplicht"
@@ -822,7 +822,7 @@
"message": "Herstel email verzenden"
},
"auth.reset-password.method-choice.description": {
"message": "Voer hieronder uw e-mailadres in en we sturen een herstel link zodat u uw account kunt herstellen."
"message": "Vul hieronder je e-mailadres in, dan sturen we je een herstellink waarmee je je account kunt herstellen."
},
"auth.reset-password.notification.email-sent.text": {
"message": "Als de e-mail eerder op uw account is opgeslagen, is er een email met instructies verzonden."
@@ -831,7 +831,7 @@
"message": "E-mail is verzonden"
},
"auth.reset-password.notification.password-reset.text": {
"message": "U kunt nu inloggen op uw account met uw nieuwe wachtwoord."
"message": "Je kunt nu met je nieuwe wachtwoord inloggen op je account."
},
"auth.reset-password.notification.password-reset.title": {
"message": "Wachtwoord succesvol opnieuw ingesteld"
@@ -843,13 +843,13 @@
"message": "Bevestig wachtwoord"
},
"auth.reset-password.post-challenge.description": {
"message": "Vul uw nieuwe wachtwoord hieronder in om toegang te krijgen tot uw account."
"message": "Voer hieronder je nieuwe wachtwoord in om toegang te krijgen tot je account."
},
"auth.reset-password.title": {
"message": "Wachtwoord Opnieuw Instellen"
},
"auth.reset-password.title.long": {
"message": "Uw wachtwoord opnieuw instellen"
"message": "Je 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."
@@ -924,7 +924,7 @@
"message": "We kunnen je e-mail niet verifiëren. Probeer de e-mail opnieuw te verzenden in je dashboard door in te loggen."
},
"auth.verify-email.failed-verification.description.logged-in": {
"message": "We konden uw emailadres niet verifiëren. Probeer de verificatie e-mail opnieuw te versturen via onderstaande knop."
"message": "We hebben je e-mailadres niet kunnen verifiëren. Probeer de verificatiemail nogmaals te versturen via de onderstaande knop."
},
"auth.verify-email.failed-verification.title": {
"message": "Email verificatie mislukt"
@@ -975,13 +975,13 @@
"message": "Deze verzameling wordt permanent verwijderd. Deze actie kan niet ongedaan worden gemaakt."
},
"collection.delete-modal.title": {
"message": "Weet u zeker dat u deze collectie wilt verwijderen?"
"message": "Weet je zeker dat je deze collectie wilt verwijderen?"
},
"collection.description": {
"message": "{description} - Bekijk de collectie {name} gemaakt door {username} op Modrinth"
},
"collection.description.following": {
"message": "Automatisch gegenereerde collectie van alle projecten die u volgt."
"message": "Automatisch gegenereerde collectie van alle projecten die je volgt."
},
"collection.editing": {
"message": "Verzameling bewerken"
@@ -1137,10 +1137,10 @@
"message": "Metadata"
},
"create-project-version.create-modal.stage.add-files.primary-file-description": {
"message": "Het primaire bestand is het standaardbestand dat een gebruiker downloadt bij het installeren van het project."
"message": "Het hoofdbestand is het standaardbestand dat een gebruiker downloadt bij het installeren van het project."
},
"create-project-version.create-modal.stage.add-files.primary-file-label": {
"message": "Primair bestand"
"message": "Hoofdbestand"
},
"create-project-version.create-modal.stage.add-files.supplementary-files-description": {
"message": "Je kunt desgewenst aanvullende bestanden toevoegen, zoals broncode, documentatie of benodigde bronpakketten."
@@ -1155,7 +1155,7 @@
"message": "Bestand uploaden"
},
"create-project-version.create-modal.stage.add-files.upload-primary-prompt": {
"message": "Primaire en aanvullende bestanden uploaden"
"message": "Hoofd- en aanvullende bestanden uploaden"
},
"create-project-version.create-modal.stage.add-files.upload-secondary-prompt": {
"message": "Sleep bestanden hierheen of klik om te bladeren"
@@ -1416,7 +1416,7 @@
"message": "Fout bij het laden van affiliatelinks"
},
"dashboard.affiliate-links.header": {
"message": "Uw affiliatelinks"
"message": "Je partnerlinks"
},
"dashboard.affiliate-links.revoke-confirm.body": {
"message": "Hierdoor wordt de affiliatecode `{id}` permanent ingetrokken en zijn alle bestaande links met deze code die zijn gedeeld, niet langer geldig."
@@ -1569,7 +1569,7 @@
"message": "Zoek deelgebieden..."
},
"dashboard.creator-withdraw-modal.method-selection.country-placeholder": {
"message": "Selecteer uw land"
"message": "Kies jouw land"
},
"dashboard.creator-withdraw-modal.method-selection.country-search-placeholder": {
"message": "Zoek landen..."
@@ -1605,7 +1605,7 @@
"message": "Munt"
},
"dashboard.creator-withdraw-modal.muralpay-details.crypto-warning-header": {
"message": "Bevestig uw portemonnee-adres"
"message": "Bevestig je walletadres"
},
"dashboard.creator-withdraw-modal.muralpay-details.document-number-national-id": {
"message": "Nationaal ID-nummer"
@@ -1683,10 +1683,10 @@
"message": "Belastingformulier"
},
"dashboard.creator-withdraw-modal.tax-form-required.body": {
"message": "Om uw volledige <b>{available}</b> beschikbare saldo op te nemen, vult u onderstaand formulier in. Dit is nodig voor de belastingaangifte en hoeft slechts eenmalig te worden gedaan."
"message": "Om je volledige beschikbare saldo van <b>{available}</b> op te nemen, vul je het onderstaande formulier in. Dit is nodig voor de belastingaangifte en hoef je maar één keer te doen."
},
"dashboard.creator-withdraw-modal.tax-form-required.body-with-limit": {
"message": "U dient een W-9- of W-8-formulier in te vullen voor de belastingadministratie van Modrinth, zodat wij aan de belastingwetgeving blijven voldoen."
"message": "Je moet een W-9- of W-8-formulier invullen voor de belastingadministratie van Modrinth, zodat wij aan de belastingwetgeving blijven voldoen."
},
"dashboard.creator-withdraw-modal.tax-form-required.header": {
"message": "Belastingformulier vereist"
@@ -1710,7 +1710,7 @@
"message": "Je hebt minimaal {min} nodig om deze cadeaubon te gebruiken."
},
"dashboard.creator-withdraw-modal.tremendous-details.no-denominations-available": {
"message": "Er zijn geen coupures beschikbaar voor uw huidige saldo"
"message": "Er zijn geen coupures beschikbaar voor je huidige saldo"
},
"dashboard.creator-withdraw-modal.tremendous-details.no-suggestions-no-max": {
"message": "Geen coupures in de buurt van dit bedrag"
@@ -1749,7 +1749,7 @@
"message": "Niet-geverifieerde e-mail"
},
"dashboard.creator-withdraw-modal.tremendous-details.unverified-email-message": {
"message": "Het e-mailadres dat u hebt ingevoerd voor de bezorging is niet gekoppeld aan uw Modrinth-account. Modrinth kan beloningen die naar een onjuist e-mailadres zijn verzonden niet terugvorderen."
"message": "Het e-mailadres dat je hebt opgegeven, is niet gekoppeld aan je Modrinth-account. Modrinth kan beloningen die naar een fout e-mailadres zijn verzonden, niet terugvinden."
},
"dashboard.creator-withdraw-modal.tremendous-details.usd-paypal-warning-header": {
"message": "Lagere kosten beschikbaar"
@@ -1779,7 +1779,7 @@
"message": "Verbind Discord"
},
"dashboard.discord-roles.banner.title": {
"message": "Claim uw Discord rollen"
"message": "Claim je Discord-rollen"
},
"dashboard.discord-roles.role.big-creator": {
"message": "1M+ Downloads"
@@ -1794,7 +1794,7 @@
"message": "Dashboard"
},
"dashboard.notifications.empty.no-unread": {
"message": "U heeft geen ongelezen notificaties."
"message": "Je hebt geen ongelezen meldingen."
},
"dashboard.notifications.link.see-all": {
"message": "Allemaal bekijken"
@@ -1827,7 +1827,7 @@
"message": "Geschiedenis bekijken"
},
"dashboard.overview.notifications.empty.no-unread": {
"message": "U heeft geen ongelezen notificaties."
"message": "Je hebt geen ongelezen meldingen."
},
"dashboard.overview.notifications.error.loading": {
"message": "Fout tijdens het laden van de notificaties:"
@@ -1845,7 +1845,7 @@
"message": "Massa wijzigingen worden niet ondersteund door server projecten"
},
"dashboard.projects.empty": {
"message": "U heeft nog geen projecten. Klik de groene knop hierboven om te beginnen."
"message": "Je hebt nog geen projecten. Klik op de groene knop hierboven om te beginnen."
},
"dashboard.projects.head-title": {
"message": "Projecten"
@@ -1854,7 +1854,7 @@
"message": "en nog {count} anderen..."
},
"dashboard.projects.links.button.clear-link": {
"message": "Leeg link"
"message": "Link verwijderen"
},
"dashboard.projects.links.button.edit": {
"message": "Wijzig link"
@@ -1863,7 +1863,7 @@
"message": "De wijzigingen worden toegepast op <strong>{count}</strong> {count, plural, one {project} other {projects}}."
},
"dashboard.projects.links.description": {
"message": "Alle links die u hieronder opgeeft, worden in elk van de geselecteerde projecten overschreven. Links die u leeg laat, worden genegeerd. U kunt een link uit alle geselecteerde projecten verwijderen met de prullenbakknop."
"message": "Alle links die je hieronder opgeeft, worden in elk van de geselecteerde projecten overschreven. Links die je leeg laat, worden genegeerd. Je kunt een link uit alle geselecteerde projecten verwijderen met de prullenbakknop."
},
"dashboard.projects.links.discord-invite.description": {
"message": "Een uitnodigingslink naar jouw Discord server."
@@ -2082,13 +2082,13 @@
"message": "Portemonnee"
},
"dashboard.withdraw.error.account-not-linked.text": {
"message": "Koppel je betaalaccount voordat u geld opneemt."
"message": "Koppel alsjeblieft eerst je betaalrekening voordat je geld opneemt."
},
"dashboard.withdraw.error.account-not-linked.title": {
"message": "Account is niet gekoppeld"
},
"dashboard.withdraw.error.email-verification.text": {
"message": "U moet uw e-mailadres verifiëren voordat u geld opneemt."
"message": "Je moet je e-mailadres verifiëren voordat je geld kunt opnemen."
},
"dashboard.withdraw.error.email-verification.title": {
"message": "Email verificatie vereist"
@@ -2106,19 +2106,19 @@
"message": "Onvoldoende saldo"
},
"dashboard.withdraw.error.invalid-address.text": {
"message": "Het door u opgegeven adres kon niet worden geverifieerd. Controleer uw adresgegevens."
"message": "Het door jou opgegeven adres kon niet worden geverifieerd. Controleer alsjeblieft je adresgegevens."
},
"dashboard.withdraw.error.invalid-address.title": {
"message": "Adres verificatie mislukt"
},
"dashboard.withdraw.error.invalid-bank.text": {
"message": "De door u opgegeven bankgegevens zijn onjuist. Controleer uw gegevens."
"message": "De bankgegevens die je hebt opgegeven, zijn ongeldig. Controleer alsjeblieft je gegevens."
},
"dashboard.withdraw.error.invalid-bank.title": {
"message": "Ongeldige bankgegevens"
},
"dashboard.withdraw.error.invalid-wallet.text": {
"message": "Het door u opgegeven crypto portemonnee adres is ongeldig. Controleer het adres en probeer het opnieuw."
"message": "Het adres van de cryptowallet dat je hebt opgegeven, is ongeldig. Controleer het nog een keer en probeer het opnieuw."
},
"dashboard.withdraw.error.invalid-wallet.title": {
"message": "Ongeldig portemonnee adres"
@@ -2129,6 +2129,12 @@
"dashboard.withdraw.error.minimum-not-met.title": {
"message": "Te laag bedrag"
},
"dashboard.withdraw.error.payout-method-disabled.text": {
"message": "Deze uitbetalingsmethode is door de betalingsprovider uitgeschakeld. Gebruik een andere uitbetalingsmethode of neem contact op met de klantenservice."
},
"dashboard.withdraw.error.payout-method-disabled.title": {
"message": "Uitbetalingsmethode niet beschikbaar"
},
"dashboard.withdraw.error.paypal-country-mismatch.text": {
"message": "Gebruik alsjeblieft de juiste PayPal-overschrijvingsoptie voor je regio (VS of internationaal)."
},
@@ -2136,7 +2142,7 @@
"message": "PayPal regio mismatch"
},
"dashboard.withdraw.error.tax-form.text": {
"message": "U moet een belastingformulier invullen om uw opnameverzoek in te dienen."
"message": "Je moet een belastingformulier invullen om je opnameverzoek in te dienen."
},
"dashboard.withdraw.error.tax-form.title": {
"message": "Gelieve het belastingformulier in te vullen"
@@ -2169,7 +2175,7 @@
"message": "Zoeken naar {projectType} | {query}"
},
"error.collection.404.list_item.1": {
"message": "U heeft mogelijk de URL van de collectie fout ingetypt."
"message": "Misschien heb je de URL van de collectie verkeerd getypt."
},
"error.collection.404.list_item.2": {
"message": "Deze collectie is mogelijk privé."
@@ -2190,7 +2196,7 @@
"message": "Je hebt geen toegang tot deze pagina"
},
"error.generic.404.subtitle": {
"message": "De pagina die u zoekt, blijkt niet te bestaan."
"message": "De pagina die je zocht, lijkt niet te bestaan."
},
"error.generic.404.title": {
"message": "Pagina niet gevonden"
@@ -2217,7 +2223,7 @@
"message": "Oeps!"
},
"error.organization.404.list_item.1": {
"message": "U heeft misschien de URL van de organisatie verkeerd getypt."
"message": "Misschien heb je de URL van de organisatie verkeerd getypt."
},
"error.organization.404.list_item.2": {
"message": "De eigenaar van de organisatie heeft misschien de URL veranderd of verwijderd."
@@ -2292,7 +2298,7 @@
"message": "Hoe werken CPU burst threads?"
},
"hosting-marketing.faq.burst-threads.answer": {
"message": "Wanneer uw server zwaar belast wordt, geven we deze tijdelijk toegang tot extra CPU-threads om vertragingspieken en instabiliteit te verminderen. Dit helpt voorkomen dat de TPS onder de 20 zakt, waardoor een zo soepel mogelijke ervaring wordt gegarandeerd. Omdat deze CPU-threads slechts kort beschikbaar zijn tijdens zwaardere periodes, worden ze mogelijk niet weergeven in Spark-rapporten of andere profilingtools."
"message": "Wanneer je server zwaar wordt belast, geven we hem tijdelijk toegang tot extra CPU-threads om pieken in vertraging en instabiliteit te helpen verminderen. Dit helpt voorkomen dat de TPS onder de 20 daalt, waardoor een zo soepel mogelijke ervaring wordt gegarandeerd. Aangezien die extra CPU-threads slechts kort beschikbaar zijn tijdens periodes van hoge belasting, is het mogelijk dat ze niet worden weergegeven in Spark-rapporten of andere profileringsprogramma's."
},
"hosting-marketing.faq.cpu-kind": {
"message": "Op wat voor CPU's draaien de servers van Modrinth Hosting?"
@@ -2328,13 +2334,13 @@
"message": "Kan ik de opslagruimte op mijn server vergroten?"
},
"hosting-marketing.faq.increase-storage.answer": {
"message": "Ja, de opslagruimte op uw server kan kosteloos worden uitgebreid. Neem contact op met Modrinth klantenservice als u meer opslagruimte nodig heeft."
"message": "Ja, de opslagcapaciteit op je server kan zonder extra kosten worden uitgebreid. Neem contact op met de Modrinth-klantenservice als je meer opslagruimte nodig hebt."
},
"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 regios bij! Als u van regio wilt wisselen, neem dan contact op met de klantenservice."
"message": "Op dit moment hebben we servers beschikbaar in Noord-Amerika, Europa, Zuidoost-Azië en Australië, waaruit je bij aankoop kunt kiezen. In de toekomst komen er nog meer regio's bij! Als je 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?"
@@ -2391,7 +2397,7 @@
"message": "Zoek, beheer, bewerk en upload bestanden moeiteloos rechtstreeks naar je server."
},
"hosting-marketing.included.heading": {
"message": "Komt met alle functies die u nodig heeft."
"message": "Bevat alle functies die je nodig hebt."
},
"hosting-marketing.included.help": {
"message": "Hulp wanneer je het nodig hebt"
@@ -2403,16 +2409,16 @@
"message": "Een krachtige console, servereigenschappenbeheerder en meer"
},
"hosting-marketing.included.powerful-console.description": {
"message": "Modrinth Hosting biedt krachtige tools voor het beheren van uw server."
"message": "Modrinth Hosting biedt krachtige tools om je server te beheren."
},
"hosting-marketing.included.sftp-access": {
"message": "SFTP toegang"
},
"hosting-marketing.included.sftp-access.description": {
"message": "Krijg rechtstreeks toegang tot de bestanden op uw server met de SFTP-functionaliteit die in Modrinth Hosting is ingebouwd."
"message": "Krijg rechtstreeks toegang tot de bestanden op je server via de in Modrinth Hosting ingebouwde SFTP-functie."
},
"hosting-marketing.included.with-your-server": {
"message": "Inbegrepen bij uw server"
"message": "Bij je server inbegrepen"
},
"hosting-marketing.know-what-you-need": {
"message": "Weet je precies wat je nodig hebt?"
@@ -2472,13 +2478,13 @@
"message": "Ervaar een moderne, betrouwbare hosting"
},
"hosting-marketing.why.modern-reliable-hosting.description": {
"message": "Modrinth hosting servers draaien op <contrast>hoog-perfarmance AMD CPU's met DDR5 RAM </contrast>, draaiend op zelf gemaakte software om ervoor te zorgen dat uw servers perfect draaien."
"message": "De servers van Modrinth Hosting worden gehost op <contrast>krachtige AMD-CPU's met DDR5-RAM </contrast> en draaien op speciaal ontwikkelde software om ervoor te zorgen dat je servers soepel draaien."
},
"hosting-marketing.why.where-mods-are": {
"message": "Speel waar uw mods worden gemaakt"
"message": "Speel waar je mods zijn"
},
"hosting-marketing.why.where-mods-are.description": {
"message": "Modrinth Hosting zorgt voor een gemakelijke intergratie voor mod en modpakketen instalatie op uw servers."
"message": "Modrinth Hosting integreert het installatieproces van mods en modpacks naadloos in je server."
},
"hosting-marketing.why.why-modrinth-hosting": {
"message": "Waarom Modrinth Hosting?"
@@ -2487,13 +2493,13 @@
"message": "Al je Favorite mods"
},
"hosting-marketing.why.your-favorite-mods.description": {
"message": "Kies tussen Vanilla, Fabric, Forge, Quilt en NeoForge. Als het op Modrinth is kan het op uw server."
"message": "Kies uit Vanilla, Fabric, Forge, Quilt en NeoForge. Als het op Modrinth staat, werkt het ook op jouw server."
},
"hosting.plan.out-of-stock": {
"message": "Uitverkocht"
},
"hosting.plan.select-plan": {
"message": "Selecteer uw plan"
"message": "Kies een abonnement"
},
"landing.button.discover-mods": {
"message": "Ontdek mods"
@@ -2586,7 +2592,7 @@
"message": "ATLauncher"
},
"landing.launcher.graphic-alt": {
"message": "Een vereenvoudigde weergave van een Minecraft venster, met het Mojang Studios logo in Modrinth groen."
"message": "Een vereenvoudigde weergave van een Minecraft-venster, met het logo van Mojang Studios in Modrinth-groen."
},
"landing.launcher.modrinth-app-label": {
"message": "Modrinth-app"
@@ -2601,7 +2607,7 @@
"message": "Meldingen"
},
"landing.notifications.received-time": {
"message": "Ontvangen {time}"
"message": "{time} ontvangen"
},
"landing.notifications.version-released": {
"message": "Versie {version} is gereleased voor {gameVersion}"
@@ -2715,7 +2721,7 @@
"message": "Werk factuurgegevens bij"
},
"layout.banner.subscription-payment-failed.description": {
"message": "Een of meer abonnementen zijn niet verlengd. Werk uw betaalmethode bij om te voorkomen dat u de toegang verliest!"
"message": "Een of meer abonnementen zijn niet verlengd. Werk je betaalmethode bij om te voorkomen dat je de toegang verliest!"
},
"layout.banner.subscription-payment-failed.title": {
"message": "Factuur actie vereist."
@@ -2733,7 +2739,7 @@
"message": "Neem contact op met support"
},
"layout.banner.tin-mismatch.description": {
"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."
"message": "Je opnames zijn tijdelijk geblokkeerd omdat je TIN of SSN niet overeenkomt met de gegevens van de IRS. Neem contact op met de klantenservice om je belastingformulier opnieuw in te vullen en in te dienen."
},
"layout.banner.tin-mismatch.title": {
"message": "Belastingformulier mislukt"
@@ -2918,6 +2924,30 @@
"layout.publish.email-verification-required.title": {
"message": "E-mailverificatie vereist"
},
"modal.shared-instance.open-in-app.benefit.install": {
"message": "Alles wat ze spelen automatisch installeren"
},
"modal.shared-instance.open-in-app.benefit.join": {
"message": "Speel dezelfde inhoud als je vrienden"
},
"modal.shared-instance.open-in-app.benefit.update": {
"message": "Houd gedeelde inhoud up-to-date wanneer deze verandert"
},
"modal.shared-instance.open-in-app.get-app": {
"message": "Modrinth-app downloaden"
},
"modal.shared-instance.open-in-app.managed-by": {
"message": "Beheerd door"
},
"modal.shared-instance.open-in-app.opening-automatically": {
"message": "De Modrinth-app wordt automatisch geopend..."
},
"modal.shared-instance.open-in-app.title": {
"message": "Modrinth-app openen"
},
"modal.shared-instance.open-in-app.why-use": {
"message": "Waarom de Modrinth-app gebruiken"
},
"moderation.exclude-technical-review": {
"message": "TR uitsluiten"
},
@@ -2939,8 +2969,23 @@
"moderation.page.technicalReview": {
"message": "Technische beoordeling"
},
"modpack-scan-modal.clear-all-groups": {
"message": "Alle groepen wissen"
"modpack-scan-modal.batch.label": {
"message": "{amount} per batch"
},
"modpack-scan-modal.batch.placeholder": {
"message": "Batchhoeveelheid"
},
"modpack-scan-modal.delete-all-groups-confirmation.description": {
"message": "Hiermee worden alle toewijzingsgroepen voor dit project en alle bestanden daarin definitief verwijderd. Deze handeling kan niet ongedaan worden gemaakt."
},
"modpack-scan-modal.delete-all-groups.error": {
"message": "Niet gelukt om alle groepen te wissen: {error}"
},
"modpack-scan-modal.delete-all-groups.proceed": {
"message": "Wissen"
},
"modpack-scan-modal.delete-all-groups.success": {
"message": "Alle groepen zijn succesvol gewist."
},
"modpack-scan-modal.failed": {
"message": "Mislukt"
@@ -2973,11 +3018,14 @@
"message": "Alle bestanden scannen"
},
"modpack-scan-modal.scan-error": {
"message": "Sommige bestanden konden niet worden gescand: {error}"
"message": "Sommige bestanden konden niet worden gescand:\n\n{error}"
},
"modpack-scan-modal.scanning": {
"message": "Scannen..."
},
"modpack-scan-modal.success": {
"message": "Gelukt"
},
"modpack-scan-modal.title": {
"message": "Modpack-scan ({scanned}/{total} bestanden)"
},
@@ -3246,7 +3294,7 @@
"message": "Crypto (USDC)"
},
"muralpay.warning.wallet-address": {
"message": "Controleer uw portemonnee adres nogmaals. Geld dat naar een onjuist adres is overgemaakt, kan niet worden teruggevonden."
"message": "Controleer je walletadres opnieuw. Geld dat naar een verkeerd adres is overgemaakt, kan niet worden teruggehaald."
},
"organization.button.manage": {
"message": "Beheren"
@@ -3293,117 +3341,6 @@
"organization.projects.none-with-create-prompt": {
"message": "Deze organisatie heeft nog geen projecten. Wil je er <create-link>een aanmaken</create-link>?"
},
"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"
},
"profile.button.edit-role": {
"message": "Bewerk rol"
},
"profile.button.info": {
"message": "Bekijk gebruikersdetails"
},
"profile.button.manage-projects": {
"message": "Beheer projecten"
},
"profile.button.remove-affiliate": {
"message": "Verwijderen als partner"
},
"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"
},
"profile.details.label.email": {
"message": "Email"
},
"profile.details.label.email-verified": {
"message": "Email geverifieerd"
},
"profile.details.label.has-password": {
"message": "Heeft wachtwoord"
},
"profile.details.label.has-totp": {
"message": "Heeft TOTP"
},
"profile.details.label.payment-methods": {
"message": "Betaalmethodes"
},
"profile.details.tooltip.email-not-verified": {
"message": "Email niet geverifieerd"
},
"profile.details.tooltip.email-verified": {
"message": "Email geverifieerd"
},
"profile.error.not-found": {
"message": "Gebruiker niet gevonden"
},
"profile.label.affiliate": {
"message": "Partners"
},
"profile.label.badges": {
"message": "Badges"
},
"profile.label.collection": {
"message": "Collectie"
},
"profile.label.download-count": {
"message": "{count, plural, one {download} other {downloads}}"
},
"profile.label.joined": {
"message": "Lid geworden"
},
"profile.label.no-collections": {
"message": "Deze gebruiker heeft geen collecties!"
},
"profile.label.no-collections-auth": {
"message": "Je hebt geen collecties.\n<create-link>Wil je er een aanmaken?</create-link>"
},
"profile.label.no-projects": {
"message": "Deze gebruiker heeft geen projecten!"
},
"profile.label.no-projects-auth": {
"message": "Je hebt geen projecten.\n<create-link>Wil je er een aanmaken?</create-link>"
},
"profile.label.organizations": {
"message": "Organisaties"
},
"profile.label.project-count": {
"message": "{count, plural, one {project} other {projecten}}"
},
"profile.label.saving": {
"message": "Opslaan..."
},
"profile.meta.description": {
"message": "Download {username} z'n projecten via Modrinth"
},
"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}}"
},
"profile.user-id": {
"message": "Gebruiker ID: {id}"
},
"project-member-header.error-decline": {
"message": "Team uitnodiging niet afgeslagen"
},
@@ -3465,7 +3402,7 @@
"message": "Collectie"
},
"project-type.datapack.plural": {
"message": "Data Packs"
"message": "Gegevenspakketten"
},
"project-type.datapack.singular": {
"message": "Data Pack"
@@ -3755,6 +3692,9 @@
"project.moderation.admonition.under-review.body.4": {
"message": "We streven ernaar om inzendingen binnen 24 tot 48 uur te beoordelen, maar bij sommige projecten kan er vertraging optreden. Dit betekent niet dat er iets mis is met je inzending."
},
"project.moderation.admonition.under-review.body.4.alt-week": {
"message": "We streven ernaar om inzendingen binnen een week te beoordelen, maar bij sommige projecten kan er vertraging optreden. Dit betekent niet dat er iets mis is met je inzending."
},
"project.moderation.admonition.under-review.body.5": {
"message": "<emphasis>We stellen je geduld zeer op prijs terwijl onze moderators hard werken om Modrinth veilig te houden, en we kijken ernaar uit om je te helpen je content te delen! 💚</emphasis>"
},
@@ -3852,7 +3792,7 @@
"message": "Toon alsjeblieft aan dat je 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."
"message": "Toon alsjeblieft aan dat je toestemming hebt om alle onderstaande bestanden te verspreiden, voordat je je project ter beoordeling indient."
},
"project.settings.permissions.attention-needed.title": {
"message": "Onbekende externe inhoud"
@@ -3872,6 +3812,21 @@
"project.settings.permissions.completed.title": {
"message": "Toestemmingen voltooid!"
},
"project.settings.permissions.delete-all-groups": {
"message": "Alle groepen verwijderen"
},
"project.settings.permissions.delete-all-groups-confirmation.description": {
"message": "Hiermee {count, plural, one {wordt # toewijzingsgroep} other {worden alle # toewijzingsgroepen}} voor dit project en alle bestanden daarin definitief verwijderd. Deze actie kan niet ongedaan worden gemaakt."
},
"project.settings.permissions.delete-all-groups-confirmation.title": {
"message": "Alle toewijzingsgroepen verwijderen?"
},
"project.settings.permissions.delete-all-groups-error": {
"message": "Verwijderen van alle toewijzingsgroepen niet gelukt"
},
"project.settings.permissions.delete-all-groups-success": {
"message": "Alle toewijzingsgroepen zijn verwijderd."
},
"project.settings.permissions.empty-state.description": {
"message": "Geen van de versies van je project bevat externe inhoud, dus je hoeft je geen zorgen te maken over het verkrijgen van toestemming."
},
@@ -3990,7 +3945,7 @@
"message": "Je hebt {count} resolutietags ({tags}) geselecteerd. Bronpakketten zouden normaal gesproken slechts één resolutietag moeten hebben."
},
"project.settings.tags.performance-impact-description": {
"message": "Selecteer de realistische invloed op de prestaties van uw {type}. Selecteer meerdere opties als het {type} kan worden geconfigureerd voor verschillende niveaus van invloed op de prestaties."
"message": "Selecteer de realistische invloed op de prestaties van je {type}. Selecteer meerdere opties als het {type} kan worden geconfigureerd voor verschillende niveaus van invloed op de prestaties."
},
"project.settings.tags.resolutions-description": {
"message": "Selecteer de resolutie(s) van de texturen in je {type}."
@@ -4077,7 +4032,7 @@
"message": "{count, plural, one {Versie {version_name}} other {Versies}} niet weergegeven vanwege onbekende ingesloten inhoud"
},
"report.already-reported": {
"message": "U heeft al {title} gerapporteerd"
"message": "Je hebt {title} al gemeld"
},
"report.already-reported-description": {
"message": "Je hebt al een openstaand rapport voor dit/deze {item}. Je kunt meer details aan je rapport toevoegen als je nog meer informatie hebt."
@@ -4089,7 +4044,7 @@
"message": "Voeg linken en afbeelding als het mogelijk en relevant is. Lege of onvoldoende rapportages zullen gesloten worden en geregeerd worden."
},
"report.body.title": {
"message": "Geef alstublieft aanvoegende context over uw rapportage"
"message": "Geef alsjeblieft wat meer achtergrondinformatie over je melding"
},
"report.checking": {
"message": "{item} wordt gecontroleerd..."
@@ -4125,7 +4080,7 @@
"message": "Houd er rekening mee dat je *geen* DMCA-verzoek tot verwijdering indient, maar een melding van opnieuw geüploade inhoud."
},
"report.note.copyright.2": {
"message": "Als het uw bedoeling was om een DMCA-report in te dienen(wat een wettelijke actie is), kijk dan alsublieft in onze <copyright-policy-link>Copyright Policy</copyright-policy-link>."
"message": "Als je in plaats hiervan een DMCA-verzoek tot verwijdering (een juridische procedure) wilde indienen, raadpleeg dan ons <copyright-policy-link>auteursrechtbeleid</copyright-policy-link>."
},
"report.note.malicious.1": {
"message": "Rapporten voor malware en niet geaccepteerde content moeten bewijs hebben zoals code voorbeelden."
@@ -4281,7 +4236,7 @@
"message": "Schrijf PAT's"
},
"scopes.payoutsRead.description": {
"message": "Lees uw uitbetalingsgegevens"
"message": "Bekijk je uitbetalingsgegevens"
},
"scopes.payoutsRead.label": {
"message": "Lees uitbetalingen"
@@ -4377,31 +4332,31 @@
"message": "Schrijf op threads"
},
"scopes.userAuthWrite.description": {
"message": "Modificeer uw authenticatie data"
"message": "Wijzig je inloggegevens"
},
"scopes.userAuthWrite.label": {
"message": "Schrijf authenticatie data"
},
"scopes.userDelete.description": {
"message": "Verwijder uw account"
"message": "Je account verwijderen"
},
"scopes.userDelete.label": {
"message": "Verwijder uw account"
"message": "Je account verwijderen"
},
"scopes.userRead.description": {
"message": "Zie uw publieke profiel informatie"
"message": "Je openbare profielgegevens bekijken"
},
"scopes.userRead.label": {
"message": "Lees gebruokers data"
},
"scopes.userReadEmail.description": {
"message": "Lees uw email"
"message": "Lees je e-mail"
},
"scopes.userReadEmail.label": {
"message": "Lees gebruiker email"
},
"scopes.userWrite.description": {
"message": "Schrijf bij uw profiel"
"message": "Aan je profiel toevoegen"
},
"scopes.userWrite.label": {
"message": "Schrijf gebruikers data"
@@ -4458,7 +4413,7 @@
"message": "Negeerbaar"
},
"servers.notice.expires": {
"message": "Overdatum in"
"message": "Verloopt"
},
"servers.notice.id": {
"message": "ID"
@@ -4515,7 +4470,7 @@
"message": "Je account verwijderen"
},
"settings.account.delete.confirm.title": {
"message": "Weet u zeker dat u uw account wilt verwijderen?"
"message": "Weet je zeker dat je je account wilt verwijderen?"
},
"settings.account.delete.section.action": {
"message": "Verwijder account"
@@ -4533,7 +4488,7 @@
"message": "Email adres"
},
"settings.account.email.field.placeholder": {
"message": "Voer uw e-mailadres in..."
"message": "Vul je e-mailadres in..."
},
"settings.account.email.modal.header.add": {
"message": "Voeg e-mailadres toe"
@@ -4554,7 +4509,7 @@
"message": "De ingevoerde wachtwoorden komen niet overeen!"
},
"settings.account.password.field.confirm-current.description": {
"message": "Voer uw wachtwoord in om door te gaan."
"message": "Voer je wachtwoord in om verder te gaan."
},
"settings.account.password.field.confirm-current.label": {
"message": "Bevestig wachtwoord"
@@ -4608,7 +4563,7 @@
"message": "Email veranderen"
},
"settings.account.security.email.description": {
"message": "Hiermee wijzigt u het e-mailadres dat aan uw account is gekoppeld."
"message": "Wijzigt het e-mailadres dat met je account is gekoppeld."
},
"settings.account.security.email.title": {
"message": "E-mail"
@@ -4671,13 +4626,13 @@
"message": "Wachtwoord wijzigen"
},
"settings.account.security.password.description.change": {
"message": "Wijzig het wachtwoord dat u gebruikt om in te loggen op uw account."
"message": "Wijzig het wachtwoord dat je gebruikt om in te loggen op je account."
},
"settings.account.security.password.description.change-or-remove": {
"message": "Wijzig of verwijder het wachtwoord dat u gebruikt om in te loggen op uw account."
"message": "Wijzig of verwijder het wachtwoord dat je gebruikt om in te loggen op je account."
},
"settings.account.security.password.description.set": {
"message": "Stel een vast wachtwoord in om in te loggen op uw account."
"message": "Stel een permanent wachtwoord in om in te loggen op je account."
},
"settings.account.security.password.title": {
"message": "Wachtwoord"
@@ -4701,7 +4656,7 @@
"message": "2FA instellen"
},
"settings.account.security.two-factor.description": {
"message": "Voeg een extra beveiligingslaag toe aan uw account tijdens het inloggen."
"message": "Voeg een extra beveiligingslaag toe aan je account tijdens het inloggen."
},
"settings.account.security.two-factor.modal.remove.header": {
"message": "2FA uitschakelen"
@@ -4844,15 +4799,9 @@
"settings.authorizations.about-this-app": {
"message": "Over deze app"
},
"settings.authorizations.by": {
"message": "door"
},
"settings.authorizations.description": {
"message": "Wanneer je een app via je Modrinth-account autoriseert, verleen je die app toegang tot je account. Je kunt de toegang tot je account hier op elk moment beheren en bekijken."
},
"settings.authorizations.empty-state": {
"message": "We kunnen je geautoriseerde apps momenteel niet weergeven, maar we werken eraan om dit te verhelpen. Kom later nog eens terug op deze pagina!"
},
"settings.authorizations.head-title": {
"message": "Toestemmingen"
},
@@ -4866,7 +4815,7 @@
"message": "Weet u zeker dat u deze aanvraag wilt intrekken?"
},
"settings.billing.charges.description": {
"message": "Hier vindt u een overzicht van alle eerdere afschrijvingen op uw Modrinth rekening:"
"message": "Al je eerdere afschrijvingen van je Modrinth-account worden hier weergegeven:"
},
"settings.billing.charges.product.medal-trial": {
"message": "Proefversie van Medal Server"
@@ -4880,6 +4829,9 @@
"settings.billing.charges.title": {
"message": "Eerdere aanklachten"
},
"settings.billing.expires": {
"message": "Verloopt op {date}"
},
"settings.billing.interval.month": {
"message": "maand"
},
@@ -4905,7 +4857,7 @@
"message": "Je hebt je abonnement opgezegd."
},
"settings.billing.midas.status.cancelled.line2": {
"message": "U behoudt uw voordelen tot het einde van de huidige factureringsperiode."
"message": "Je behoudt je voordelen tot het einde van de huidige factureringsperiode."
},
"settings.billing.midas.status.failed": {
"message": "De betaling van je abonnement is mislukt. Werk je betaalmethode bij."
@@ -4923,7 +4875,7 @@
"message": "Annuleer abbonement"
},
"settings.billing.modal.cancel.description": {
"message": "Dit zal uw abonnement opzeggen. Je houdt je voordelen tot het einde van je huidige betaling cyclus"
"message": "Hiermee wordt je abonnement opgezegd. Je behoudt je voordelen tot het einde van de huidige factureringsperiode."
},
"settings.billing.modal.cancel.title": {
"message": "Weet je zeker dat je je abonnement wil beëindigen?"
@@ -4983,7 +4935,7 @@
"message": "{gb} GB RAM"
},
"settings.billing.pyro.resubscribe.error.text": {
"message": "Er is een fout opgetreden bij het opnieuw abonneren op uw Modrinth server."
"message": "Er is een fout opgetreden bij het opnieuw abonneren op je Modrinth-server."
},
"settings.billing.pyro.resubscribe.error.title": {
"message": "Fout bij het opnieuw abonneren"
@@ -5001,7 +4953,7 @@
"message": "De betaling voor je abonnement is mislukt. Werk je betaalmethode bij en meld je vervolgens opnieuw aan."
},
"settings.billing.pyro.status.processing": {
"message": "Uw betaling wordt verwerkt. Uw server wordt geactiveerd zodra de betaling is voltooid."
"message": "Je betaling wordt verwerkt. Je server wordt geactiveerd zodra de betaling is voltooid."
},
"settings.billing.pyro.storage": {
"message": "{gb} GB SSD"
@@ -5046,7 +4998,7 @@
"message": "Ontwikkelaarsmodus deactiveren"
},
"settings.display.banner.developer-mode.description": {
"message": "<strong>Ontwikkelaarsmodus</strong> is actief. Dit geeft je de mogelijkheid om de interne ID's van verschillende dingen in Modrinth te bekijken die handig kunnen zijn als je een ontwikkelaar bent en gebruik maakt van de Modrinth API. Klik 5 keer op het Modrinth logo onderaan de pagina om ontwikkelaarsmodus in of uit te schakelen."
"message": "<strong>Ontwikkelaarsmodus</strong> is ingeschakeld. Hiermee kun je de interne ID's bekijken van verschillende elementen in Modrinth, wat handig kan zijn als je als ontwikkelaar gebruikmaakt van de Modrinth-API. Klik vijf keer op het Modrinth-logo onderaan de pagina om de ontwikkelaarsmodus in of uit te schakelen."
},
"settings.display.flags.description": {
"message": "Schakel bepaalde functies op dit apparaat in of uit."
@@ -5064,7 +5016,7 @@
"message": "Data Packs pagina"
},
"settings.display.project-list-layouts.description": {
"message": "Selecteer de lay-out van uw voorkeur voor elke pagina die projectlijsten op dit apparaat toont."
"message": "Kies de gewenste lay-out voor elke pagina waarop projectlijsten op dit apparaat worden weergegeven."
},
"settings.display.project-list-layouts.mod": {
"message": "Mods pagina"
@@ -5115,7 +5067,7 @@
"message": "Externe links openen in nieuw tabblad"
},
"settings.display.sidebar.hide-app-promos.description": {
"message": "Verbergt de \"Modrinth-app downloaden\" knoppen in de primaire navigatie. De Modrinth App-pagina is nog steeds te vinden op de startpagina of in de voettekst."
"message": "Verbergt de \"Modrinth-app downloaden\" knoppen in de hoofdnavigatie. De Modrinth App-pagina is nog steeds te vinden op de startpagina of in de voettekst."
},
"settings.display.sidebar.hide-app-promos.title": {
"message": "Promoties voor de Modrinth-app verbergen"
@@ -5243,6 +5195,33 @@
"settings.sidebar.label.display": {
"message": "Weergave "
},
"shared-instance.invite.accept": {
"message": "Uitnodiging accepteren"
},
"shared-instance.invite.inviter.unknown": {
"message": "Een Modrinth-gebruiker"
},
"shared-instance.invite.joined-count": {
"message": "{count, plural, one {# persoon heeft} other {# mensen hebben}} zich al aangesloten"
},
"shared-instance.invite.loading": {
"message": "Uitnodiging laden…"
},
"shared-instance.invite.title": {
"message": "{name} heeft je uitgenodigd om te spelen"
},
"shared-instance.invite.trust.description": {
"message": "Deze uitnodiging is aangemaakt door een andere Modrinth-gebruiker, niet door Modrinth zelf. Accepteer alleen uitnodigingen van mensen die je vertrouwt."
},
"shared-instance.invite.trust.heading": {
"message": "Ken je deze gebruiker?"
},
"shared-instance.invite.unavailable.description": {
"message": "Het kan zijn dat de uitnodiging is verlopen, dat de gebruikslimiet is bereikt of dat het is verwijderd door de persoon die het heeft gedeeld."
},
"shared-instance.invite.unavailable.title": {
"message": "Deze uitnodiging is niet beschikbaar"
},
"ui.latest-news-row.latest-news": {
"message": "Laatste nieuws van Modrinth"
},
@@ -5280,7 +5259,7 @@
"message": "Kies een versie om te downloaden"
},
"version.download.no-primary-file": {
"message": "Fout: geen primair bestand gevonden"
"message": "Fout: geen hoofdbestand gevonden"
},
"version.download.optional-resource-pack": {
"message": "Optioneel bronpakket"
-108
View File
@@ -2609,108 +2609,6 @@
"muralpay.warning.wallet-address": {
"message": "Dobbeltsjekk lommeboksadressa di. Penger sendt til feil adresse kan ikke bli gjenoppretta."
},
"profile.bio.fallback.creator": {
"message": "En Modrinth-skaper."
},
"profile.bio.fallback.user": {
"message": "En Modrinth-bruker."
},
"profile.button.analytics": {
"message": "Vis brukerstatistikk"
},
"profile.button.billing": {
"message": "Hold styr på brukerfakturering"
},
"profile.button.edit-role": {
"message": "Rediger rolle"
},
"profile.button.info": {
"message": "Vis brukerdetaljer"
},
"profile.button.manage-projects": {
"message": "Hold styr på prosjekt"
},
"profile.button.remove-affiliate": {
"message": "Fjern tilknyting"
},
"profile.button.set-affiliate": {
"message": "Sett som tilknyting"
},
"profile.collection.projects-count": {
"message": "{count, plural, one {# prosjekt} other {# prosjekter}}"
},
"profile.details.label.auth-providers": {
"message": "Autoriseringsgivere"
},
"profile.details.label.email": {
"message": "Epost"
},
"profile.details.label.email-verified": {
"message": "Epostbekreftelse"
},
"profile.details.label.has-password": {
"message": "Har passord"
},
"profile.details.label.has-totp": {
"message": "Har TOTP"
},
"profile.details.label.payment-methods": {
"message": "Betalingsmetoder"
},
"profile.details.tooltip.email-not-verified": {
"message": "Epost ikke bekrefta"
},
"profile.details.tooltip.email-verified": {
"message": "Epost bekrefta"
},
"profile.error.not-found": {
"message": "Bruker ikke funnet"
},
"profile.label.affiliate": {
"message": "Tilknytt"
},
"profile.label.badges": {
"message": "Merker"
},
"profile.label.collection": {
"message": "Samling"
},
"profile.label.joined": {
"message": "Blei med"
},
"profile.label.no-collections": {
"message": "Denne brukeren har ingen samlinger!"
},
"profile.label.no-collections-auth": {
"message": "Du har ikke noen samlinger.\nHar du lyst å <create-link>lage en</create-link>?"
},
"profile.label.no-projects": {
"message": "Denne brukeren har ingen prosjekt!"
},
"profile.label.no-projects-auth": {
"message": "Du har ikke noen prosjekt.\nHar du lyst å <create-link>lage en</create-link>?"
},
"profile.label.organizations": {
"message": "Organisasjoner"
},
"profile.label.saving": {
"message": "Lagrer..."
},
"profile.meta.description": {
"message": "Last ned prosjekta til {username} på Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Last ned prosjekta til {username} på Modrinth"
},
"profile.official-account": {
"message": "Offisiell Modrinth-bruker"
},
"profile.stats.projects-followers": {
"message": "{count, plural, one {<stat>{count}</stat> prosjektfølger} other {<stat>{count}</stat> prosjektfølgere}}"
},
"profile.user-id": {
"message": "Bruker-ID: {id}"
},
"project-member-header.error-decline": {
"message": "Kunne ikke avslå laginvitasjonen"
},
@@ -3734,15 +3632,9 @@
"settings.authorizations.about-this-app": {
"message": "Om denne appen"
},
"settings.authorizations.by": {
"message": "fra"
},
"settings.authorizations.description": {
"message": "Når du autoriserer en applikasjon med Modrinth-kontoen din, så gir du tilgang til kontoen din. Du kan handere og gå gjennom tilgang til kontoen din her når som helst."
},
"settings.authorizations.empty-state": {
"message": "Vi kan ikke vise de autoriserte appene dine akkurat nå, vi jobber med å fikse det. Vær så snill å besøk denne sida seinere!"
},
"settings.authorizations.head-title": {
"message": "Autoriseringer"
},
+430 -112
View File
@@ -8,6 +8,18 @@
"admin.billing.error.not-found": {
"message": "Nie znaleziono użytkownika"
},
"ads-consent.accept": {
"message": "Zaakceptuj wszystko"
},
"ads-consent.body": {
"message": "Reklamy pozwalają na dalsze działanie Modrinth i finansują dochody dla twórców. Nasi partnerzy mogą gromadzić i uzyskiwać dostęp do plików cookies w celu personalizacji reklam i mierzenia skuteczności."
},
"ads-consent.manage": {
"message": "Zarządzaj preferencjami"
},
"ads-consent.reject": {
"message": "Odrzuć wszystko"
},
"ads-consent.title": {
"message": "Twoja prywatność i jak reklamy wspierają Modrinth"
},
@@ -932,6 +944,12 @@
"auth.verify-email.title": {
"message": "Zweryfikuj e-mail"
},
"collection.aria-label.upload-icon": {
"message": "Prześlij ikonę"
},
"collection.button.discover-mods": {
"message": "Odkrywaj modyfikacje"
},
"collection.button.edit-icon": {
"message": "Edytuj ikonę"
},
@@ -1106,6 +1124,135 @@
"create-project-version.create-modal.stage.add-files.admonition": {
"message": "Pliki uzupełniające to np. kod źródłowy, a nie alternatywne wersje lub wariacje."
},
"create-project-version.create-modal.stage.add-files.details-tab": {
"message": "Szczegóły"
},
"create-project-version.create-modal.stage.add-files.files-tab": {
"message": "Pliki"
},
"create-project-version.create-modal.stage.add-files.metadata-tab": {
"message": "Metadane"
},
"create-project-version.create-modal.stage.add-files.primary-file-description": {
"message": "Główny plik to ten, który zostanie domyślnie pobrany przez użytkownika instalującego ten projekt."
},
"create-project-version.create-modal.stage.add-files.primary-file-label": {
"message": "Plik główny"
},
"create-project-version.create-modal.stage.add-files.supplementary-files-description": {
"message": "Możesz opcjonalnie przesłać pliki dopełniające, takie jak kod źródłowy, dokumentacja lub wymagane paczki zasobów."
},
"create-project-version.create-modal.stage.add-files.supplementary-files-label": {
"message": "Pliki dodatkowe"
},
"create-project-version.create-modal.stage.add-files.upload-additional-file-aria-label": {
"message": "Prześlij plik dodatkowy"
},
"create-project-version.create-modal.stage.add-files.upload-file-aria-label": {
"message": "Prześlij plik"
},
"create-project-version.create-modal.stage.add-files.upload-primary-prompt": {
"message": "Prześlij główny plik oraz pliki pomocnicze"
},
"create-project-version.create-modal.stage.add-files.upload-secondary-prompt": {
"message": "Przeciągnij i upuść pliki tutaj, lub kliknij, aby przeglądać pliki"
},
"create-project-version.create-modal.stage.details.details-tab": {
"message": "Szczegóły"
},
"create-project-version.create-modal.stage.details.files-tab": {
"message": "Pliki"
},
"create-project-version.create-modal.stage.details.metadata-tab": {
"message": "Metadane"
},
"create-project-version.create-modal.stage.details.version-changelog": {
"message": "Zmiany w wersji"
},
"create-project-version.create-modal.stage.details.version-number": {
"message": "Numer wersji"
},
"create-project-version.create-modal.stage.details.version-number-description": {
"message": "Numer wersji odróżnia tę wersję od innych."
},
"create-project-version.create-modal.stage.details.version-number-placeholder": {
"message": "Wprowadź numer wersji, np. 1.2.3-alpha.1"
},
"create-project-version.create-modal.stage.details.version-subtitle": {
"message": "Podtytuł wersji"
},
"create-project-version.create-modal.stage.details.version-subtitle-placeholder": {
"message": "Wprowadź podtytuł..."
},
"create-project-version.create-modal.stage.details.version-type": {
"message": "Rodzaj wersji"
},
"create-project-version.create-modal.stage.metadata.add-dependency": {
"message": "Dodaj zależność"
},
"create-project-version.create-modal.stage.metadata.dependencies": {
"message": "Zależności"
},
"create-project-version.create-modal.stage.metadata.details-tab": {
"message": "Szczegóły"
},
"create-project-version.create-modal.stage.metadata.detected-loaders": {
"message": "Wykryte loadery"
},
"create-project-version.create-modal.stage.metadata.detected-versions": {
"message": "Wykryte wersje"
},
"create-project-version.create-modal.stage.metadata.edit-button": {
"message": "Edytuj"
},
"create-project-version.create-modal.stage.metadata.environment": {
"message": "Środowisko"
},
"create-project-version.create-modal.stage.metadata.files-tab": {
"message": "Pliki"
},
"create-project-version.create-modal.stage.metadata.loaders": {
"message": "Loadery"
},
"create-project-version.create-modal.stage.metadata.metadata-tab": {
"message": "Metadane"
},
"create-project-version.create-modal.stage.metadata.modpack-loaders-tooltip": {
"message": "Loadery paczek modów nie mogą być edytowane"
},
"create-project-version.create-modal.stage.metadata.modpack-versions-tooltip": {
"message": "Wersje gry paczek modów nie mogą być edytowane"
},
"create-project-version.create-modal.stage.metadata.no-dependencies-added": {
"message": "Nie dodano żadnych zależności."
},
"create-project-version.create-modal.stage.metadata.no-environment-set": {
"message": "Nie ustawiono środowiska."
},
"create-project-version.create-modal.stage.metadata.no-loaders-selected": {
"message": "Nie wybrano żadnych loaderów."
},
"create-project-version.create-modal.stage.metadata.no-mod-loader": {
"message": "Brak loadera modów"
},
"create-project-version.create-modal.stage.metadata.no-versions-selected": {
"message": "Nie wybrano żadnych wersji."
},
"create-project-version.create-modal.stage.metadata.prefilled-environment-tooltip": {
"message": "Wypełnione na wzór poprzedniej, podobnej wersji"
},
"create-project-version.create-modal.stage.metadata.resource-pack-loaders-tooltip": {
"message": "Loadery paczek zasobów nie mogą być edytowane"
},
"create-project-version.create-modal.stage.metadata.suggested": {
"message": "Sugerowane"
},
"create-project-version.create-modal.stage.metadata.uploaded-files": {
"message": "Przesłane pliki"
},
"create-project-version.create-modal.stage.metadata.versions": {
"message": "Wersje"
},
"create.collection.collection-info": {
"message": "Twoja nowa kolekcja zostanie stworzona jako publiczna kolekcja {count, plural, =0 {bez żadnych projektów} one {z # projektem} other {z # projektami}}."
},
@@ -1202,6 +1349,9 @@
"create.project.name-placeholder": {
"message": "Wprowadź nazwę projektu..."
},
"create.project.organization-icon-alt": {
"message": "Ikona {name}"
},
"create.project.owner-description": {
"message": "Ustaw siebie lub organizację, do której należysz, jako właściciela projektu."
},
@@ -1232,9 +1382,15 @@
"create.project.type-server": {
"message": "Serwer"
},
"create.project.unknown-user": {
"message": "Nieznany użytkownik"
},
"create.project.url-label": {
"message": "URL"
},
"create.project.user-avatar-alt": {
"message": "Awatar użytkownika"
},
"create.project.visibility-description": {
"message": "Widoczność Twojego projektu po zatwierdzeniu."
},
@@ -1316,6 +1472,9 @@
"dashboard.collections.sort.recently-updated": {
"message": "Ostatnio zaktualizowane"
},
"dashboard.creator-tax-form-modal.close-button": {
"message": "Zamknij"
},
"dashboard.creator-tax-form-modal.confirmation.download-button": {
"message": "Pobierz {formType}"
},
@@ -1343,6 +1502,12 @@
"dashboard.creator-tax-form-modal.header": {
"message": "Formularz podatkowy"
},
"dashboard.creator-tax-form-modal.incomplete.text": {
"message": "Nie skończono wypełniać formularza podatkowego. Spróbuj ponownie."
},
"dashboard.creator-tax-form-modal.incomplete.title": {
"message": "Formularz podatkowy nie jest kompletny"
},
"dashboard.creator-tax-form-modal.security.description": {
"message": "Modrinth używa dostawcy będącego stroną trzecią, Track1099, by bezpiecznie zbierać i przechowywać Twoje formularze podatkowe. <security-link>Dowiedz się więcej.</security-link>"
},
@@ -1382,6 +1547,9 @@
"dashboard.creator-withdraw-modal.kyc.business-entity": {
"message": "Podmiot gospodarczy"
},
"dashboard.creator-withdraw-modal.kyc.date-of-birth-placeholder": {
"message": "Wprowadź datę urodzenia"
},
"dashboard.creator-withdraw-modal.kyc.entity-description": {
"message": "Podmiot gospodarczy to na przykład korporacja, spółka osobowa bądź sp. z.o.o."
},
@@ -1391,6 +1559,12 @@
"dashboard.creator-withdraw-modal.kyc.private-individual": {
"message": "Osoba prywatna"
},
"dashboard.creator-withdraw-modal.kyc.search-countries-placeholder": {
"message": "Szukaj kraju..."
},
"dashboard.creator-withdraw-modal.kyc.search-subdivisions-placeholder": {
"message": "Wyszukaj podstrefy..."
},
"dashboard.creator-withdraw-modal.method-selection.country-placeholder": {
"message": "Wybierz swój kraj"
},
@@ -1526,6 +1700,21 @@
"dashboard.creator-withdraw-modal.tremendous-details.enter-denomination-placeholder": {
"message": "Wprowadź kwotę"
},
"dashboard.creator-withdraw-modal.tremendous-details.minimum-denomination-exceeds-balance": {
"message": "Minimalna wartość wynosi {min}, wykraczając poza twój balans wynoszący {balance}."
},
"dashboard.creator-withdraw-modal.tremendous-details.need-at-least-gift-card": {
"message": "Potrzebujesz co najmniej {min} aby móc użyć tej kart podarunkowej."
},
"dashboard.creator-withdraw-modal.tremendous-details.no-denominations-available": {
"message": "Brak kart o wartości mniejszej niż twój balans"
},
"dashboard.creator-withdraw-modal.tremendous-details.no-suggestions-no-max": {
"message": "Brak kart o wartości bliskiej szukanej"
},
"dashboard.creator-withdraw-modal.tremendous-details.no-suggestions-with-max": {
"message": "Brak kart o wartości bliskiej szukanej. Najwyższa dostępna wartość to {max}."
},
"dashboard.creator-withdraw-modal.tremendous-details.payment-method": {
"message": "Metoda płatności"
},
@@ -1541,6 +1730,12 @@
"dashboard.creator-withdraw-modal.tremendous-details.search-amount-label": {
"message": "Szukaj kwoty"
},
"dashboard.creator-withdraw-modal.tremendous-details.search-category-placeholder": {
"message": "Wyszukaj {category}..."
},
"dashboard.creator-withdraw-modal.tremendous-details.select-category-placeholder": {
"message": "Wybierz {category}"
},
"dashboard.creator-withdraw-modal.tremendous-details.select-denomination-hint": {
"message": "Wybierz nominał:"
},
@@ -1559,6 +1754,12 @@
"dashboard.creator-withdraw-modal.tremendous-details.usd-paypal-warning-message": {
"message": "Wybrano walutę USD w opcji międzynarodowej PayPal. <direct-paypal-link>Przełącz się na bezpośredni PayPal</direct-paypal-link> dla niższych opłat (≈2% zamiast ≈6%)."
},
"dashboard.creator-withdraw-modal.tremendous-details.withdrawal-amount-min-max": {
"message": "Minimalnie {min}, maksymalnie {max} możliwe do odebrania."
},
"dashboard.creator-withdraw-modal.tremendous-details.withdrawal-amount-min-only": {
"message": "Minimalnie {min} możliwe do odebrania."
},
"dashboard.creator-withdraw-modal.withdraw-button": {
"message": "Wypłać"
},
@@ -1922,6 +2123,12 @@
"dashboard.withdraw.error.minimum-not-met.title": {
"message": "Zbyt niska kwota"
},
"dashboard.withdraw.error.payout-method-disabled.text": {
"message": "Ta metoda wypłaty została zablokowana przez dostawcę płatności. Użyj innej metody wypłaty lub skontaktuj się z obsługą klienta."
},
"dashboard.withdraw.error.payout-method-disabled.title": {
"message": "Metoda wypłaty jest niedostępna"
},
"dashboard.withdraw.error.paypal-country-mismatch.text": {
"message": "Proszę użyć poprawnej opcji transferu Paypal dla twojego regionu(Stany Zjednoczone lub Międzynarodowe)."
},
@@ -2219,6 +2426,24 @@
"hosting-marketing.medal.text-secondary": {
"message": "Oferta ograniczona czasowo. Karta kredytowa nie jest wymagana. Dostępne dla serwerów w USA."
},
"hosting-marketing.notification.error-fetching-payment-data-title": {
"message": "Błąd podczas pobierania danych o płatności"
},
"hosting-marketing.notification.invalid-product-text": {
"message": "Wybrany produkt został znaleziony, ale brakuje mu potrzebnych danych. Skontaktuj się z obsługą klienta."
},
"hosting-marketing.notification.invalid-product-title": {
"message": "Nieprawidłowy produkt"
},
"hosting-marketing.notification.server-capacity-full-text": {
"message": "Nasz serwer jest obecnie przepełniony. Spróbuj ponownie później."
},
"hosting-marketing.notification.server-capacity-full-title": {
"message": "Serwer przepełniony"
},
"hosting-marketing.notification.unexpected-error-text": {
"message": "Wystąpił nieoczekiwany błąd"
},
"hosting-marketing.pick-customized-plan": {
"message": "Wybierz spersonalizowany plan z parametrami, których potrzebujesz."
},
@@ -2537,6 +2762,21 @@
"layout.footer.about.status": {
"message": "Status"
},
"layout.footer.based-on-label": {
"message": "Na podstawie"
},
"layout.footer.developer-mode-activated.text": {
"message": "Tryb dewelopera został włączony"
},
"layout.footer.developer-mode-activated.title": {
"message": "Włączono tryb dewelopera"
},
"layout.footer.developer-mode-deactivated.text": {
"message": "Tryb dewelopera został wyłączony"
},
"layout.footer.developer-mode-deactivated.title": {
"message": "Wyłączono tryb dewelopera"
},
"layout.footer.legal": {
"message": "Polityka"
},
@@ -2606,6 +2846,9 @@
"layout.footer.social.x": {
"message": "X"
},
"layout.footer.unknown-commit": {
"message": "nieznany"
},
"layout.menu-toggle.action": {
"message": "Przełącz menu"
},
@@ -2675,6 +2918,30 @@
"layout.publish.email-verification-required.title": {
"message": "Wymagana weryfikacja adresu e-mail"
},
"modal.shared-instance.open-in-app.benefit.install": {
"message": "Automatycznie instaluj to, w co grają"
},
"modal.shared-instance.open-in-app.benefit.join": {
"message": "Graj w to samo, co Twoi znajomi"
},
"modal.shared-instance.open-in-app.benefit.update": {
"message": "Otrzymuj aktualizacje do udostępnionej zawartości, gdy zostanie zmieniona"
},
"modal.shared-instance.open-in-app.get-app": {
"message": "Pobierz Modrinth App"
},
"modal.shared-instance.open-in-app.managed-by": {
"message": "Zarządzane przez"
},
"modal.shared-instance.open-in-app.opening-automatically": {
"message": "Modrinth App zostanie otwarte automatycznie..."
},
"modal.shared-instance.open-in-app.title": {
"message": "Otwieranie Modrinth App"
},
"modal.shared-instance.open-in-app.why-use": {
"message": "Czemu warto używać Modrinth App"
},
"moderation.exclude-technical-review": {
"message": "Wyklucz RT"
},
@@ -2696,6 +2963,15 @@
"moderation.page.technicalReview": {
"message": "Przegląd techniczny"
},
"modpack-scan-modal.batch.label": {
"message": "{amount} na stronę"
},
"modpack-scan-modal.batch.placeholder": {
"message": "Ilość elementów na stronę"
},
"modpack-scan-modal.delete-all-groups.proceed": {
"message": "Wyczyść"
},
"modpack-scan-modal.failed": {
"message": "Błąd"
},
@@ -2727,11 +3003,14 @@
"message": "Zeskanuj wszystkie pliki"
},
"modpack-scan-modal.scan-error": {
"message": "Nie udało się zeskanować niektórych plików: {error}"
"message": "Nie udało się zeskanować niektórych plików: \n\n{error}"
},
"modpack-scan-modal.scanning": {
"message": "Skanowanie..."
},
"modpack-scan-modal.success": {
"message": "Sukces"
},
"modpack-scan-modal.title": {
"message": "Skanowanie paczki modów ({scanned}/{total} plików)"
},
@@ -3020,116 +3299,23 @@
"organization.label.projects": {
"message": "projektów"
},
"profile.bio.fallback.creator": {
"message": "Twórca na Modrinth."
"organization.project-transfer.id-column": {
"message": "ID"
},
"profile.bio.fallback.user": {
"message": "Użytkownik Modrinth."
"organization.project-transfer.name-column": {
"message": "Nazwa"
},
"profile.button.analytics": {
"message": "Pokaż dane analityczne użytkownika"
"organization.project-transfer.project-icon-alt": {
"message": "Ikona {name}"
},
"profile.button.billing": {
"message": "Zarządzaj rozliczaniem użytkownika"
"organization.project-transfer.type-column": {
"message": "Rodzaj"
},
"profile.button.edit-role": {
"message": "Edytuj rolę"
"organization.projects.none": {
"message": "Ta organizacja nie ma jeszcze żadnych projektów."
},
"profile.button.info": {
"message": "Otwórz szczegóły użytkownika"
},
"profile.button.manage-projects": {
"message": "Zarządzaj projektami"
},
"profile.button.remove-affiliate": {
"message": "Usuń afiliację"
},
"profile.button.set-affiliate": {
"message": "Ustaw jako afiliację"
},
"profile.collection.projects-count": {
"message": "{count, plural, one {# projekt} few {# projekty} other {# projektów}}"
},
"profile.details.label.auth-providers": {
"message": "Dostawcy uwierzytelniania"
},
"profile.details.label.email": {
"message": "E-mail"
},
"profile.details.label.email-verified": {
"message": "Zweryfikowano e-mail"
},
"profile.details.label.has-password": {
"message": "Ma hasło"
},
"profile.details.label.has-totp": {
"message": "Ma TOTP"
},
"profile.details.label.payment-methods": {
"message": "Metody płatności"
},
"profile.details.tooltip.email-not-verified": {
"message": "E-mail nie jest zweryfikowany"
},
"profile.details.tooltip.email-verified": {
"message": "E-mail jest zweryfikowany"
},
"profile.error.not-found": {
"message": "Nie znaleziono użytkownika"
},
"profile.label.affiliate": {
"message": "Afiliacja"
},
"profile.label.badges": {
"message": "Odznaki"
},
"profile.label.collection": {
"message": "Kolekcja"
},
"profile.label.download-count": {
"message": "{count, plural, one {pobranie} few {pobrania} other {pobrań}}"
},
"profile.label.joined": {
"message": "Dołączył(-a)"
},
"profile.label.no-collections": {
"message": "Ten użytkownik nie ma żadnych kolekcji!"
},
"profile.label.no-collections-auth": {
"message": "Nie masz żadnych kolekcji.\nCzy chcesz <create-link>utworzyć jedną</create-link>?"
},
"profile.label.no-projects": {
"message": "Ten użytkownik nie ma żadnych projektów!"
},
"profile.label.no-projects-auth": {
"message": "Nie masz żadnych projektów.\nCzy chcesz <create-link>utworzyć nowy</create-link>?"
},
"profile.label.organizations": {
"message": "Organizacje"
},
"profile.label.project-count": {
"message": "{count, plural, one {projekt} few {projekty} other {projektów}}"
},
"profile.label.saving": {
"message": "Zapisywanie..."
},
"profile.meta.description": {
"message": "Pobieraj projekty {username} na Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Pobieraj projekty {username} na Modrinth"
},
"profile.official-account": {
"message": "Oficjalne konto Modrinth"
},
"profile.official-account.bio": {
"message": "Oficjalne konto Modrinth. Otrzymaj wsparcie na stronie <support-link></support-link> lub poprzez e-mail <email></email>"
},
"profile.stats.projects-followers": {
"message": "{count, plural, one {<stat>{count}</stat> obserwujący projekt} other {<stat>{count}</stat> obserwujących projekt}}"
},
"profile.user-id": {
"message": "ID użytkownika: {id}"
"organization.projects.none-with-create-prompt": {
"message": "Ta organizacja nie ma jeszcze żadnych projektów. Czy chcesz <create-link>utworzyć nowy</create-link>?"
},
"project-member-header.error-decline": {
"message": "Odrzucenie zaproszenia do zespołu nie powiodło się"
@@ -3431,6 +3617,9 @@
"project.gallery.title": {
"message": "Galeria"
},
"project.install-context.back-to-discover": {
"message": "Powróć do odkrywania"
},
"project.moderation.admonition.approved.body.private": {
"message": "Twój projekt jest prywatny, co oznacza, że jest widoczny tylko dla ciebie i tych, których zaprosisz."
},
@@ -3476,6 +3665,9 @@
"project.moderation.admonition.under-review.body.4": {
"message": "Staramy się zakończyć przegląd w 24-48 godzin, ale sprawdzanie niektórych projektów może zająć dłużej. Nie oznacza to, że coś jest nie tak z Twoim projektem."
},
"project.moderation.admonition.under-review.body.4.alt-week": {
"message": "Staramy się zakończyć przegląd w tydzień, ale sprawdzanie niektórych projektów może zająć dłużej. Nie oznacza to, że coś jest nie tak z Twoim projektem."
},
"project.moderation.admonition.under-review.body.5": {
"message": "<emphasis>Dziękujemy za cierpliwość podczas gdy nasi moderatorzy pracują ciężko by zapewnić, że Modrinth jest bezpiecznym miejscem i żeby Twój projekt został opublikowany! 💚</emphasis>"
},
@@ -3593,6 +3785,9 @@
"project.settings.permissions.completed.title": {
"message": "Uprawnienia gotowe!"
},
"project.settings.permissions.delete-all-groups": {
"message": "Usuń wszystkie grupy"
},
"project.settings.permissions.empty-state.description": {
"message": "Żadne z wersji Twojego projektu nie zawierają zewnętrznej zawartości, więc nie musisz martwić się o uzyskanie zezwoleń."
},
@@ -3641,6 +3836,60 @@
"project.settings.permissions.sort.status": {
"message": "Status"
},
"project.settings.server.bedrock-address-label": {
"message": "Adres Bedrock"
},
"project.settings.server.cannot-save-title": {
"message": "Nie udało się zapisać"
},
"project.settings.server.details-heading": {
"message": "Szczegóły o serwerze"
},
"project.settings.server.enter-address-placeholder": {
"message": "Wprowadź adres"
},
"project.settings.server.java-address-label": {
"message": "Adres Java"
},
"project.settings.server.languages-label": {
"message": "Języki"
},
"project.settings.server.optional-label": {
"message": "opcjonalne"
},
"project.settings.server.refresh-ping-tooltip": {
"message": "Odśwież ping"
},
"project.settings.server.region-label": {
"message": "Region"
},
"project.settings.server.select-languages-placeholder": {
"message": "Wybierz języki"
},
"project.settings.server.select-region-placeholder": {
"message": "Wybierz region"
},
"project.settings.server.server-online": {
"message": "Serwer jest online!"
},
"project.settings.tags.featured-tags": {
"message": "Wyróżnione tagi"
},
"project.settings.tags.featured-tags-description": {
"message": "Możesz wyróżnić 3 z najlepiej pasujących do Twojego projektu tagów. Inne tagi mogą zostać pokazane jako wyróżnione, jeżeli nie wybierzesz wszystkich trzech."
},
"project.settings.tags.features-description": {
"message": "Wszystkie funkcjonalności, których używa {type}"
},
"project.settings.tags.resolutions-description": {
"message": "Rozdzielczość tekstur, którą ma {type}."
},
"project.settings.tags.title": {
"message": "Tagi"
},
"project.settings.tags.upload-version-first": {
"message": "Prześlij wersję, by móc wybierać tagi!"
},
"project.settings.title": {
"message": "Ustawienia"
},
@@ -3650,9 +3899,51 @@
"project.status.archived.message": {
"message": "{title} zostało zarchiwizowane. {title} nie będzie otrzymywać żadnych dalszych aktualizacji, chyba że autor zdecyduje się przywrócić projekt."
},
"project.versions.copy-id-option": {
"message": "Kopiuj ID"
},
"project.versions.copy-link-option": {
"message": "Kopiuj łącze"
},
"project.versions.copy-maven-coordinates-option": {
"message": "Kopiuj koordynaty Maven"
},
"project.versions.delete-button": {
"message": "Usuń"
},
"project.versions.delete-confirm.description": {
"message": "Usunie to wersję na zawsze (na serio na zawsze)."
},
"project.versions.delete-confirm.title": {
"message": "Czy na pewno chcesz usunąć tę wersję?"
},
"project.versions.edit-details-option": {
"message": "Edytuj szczegóły"
},
"project.versions.edit-files-option": {
"message": "Edytuj pliki"
},
"project.versions.edit-metadata-option": {
"message": "Edytuj metadane"
},
"project.versions.edit-version-tooltip": {
"message": "Edytuj wersję"
},
"project.versions.open-in-new-tab-option": {
"message": "Otwórz w nowej karcie"
},
"project.versions.share-option": {
"message": "Udostępnij"
},
"project.versions.title": {
"message": "Wersje"
},
"project.versions.version-deleted-text": {
"message": "Wersja została usunięta pomyślnie."
},
"project.versions.version-deleted-title": {
"message": "Wersja usunięta"
},
"project.versions.withheld-versions-warning.description": {
"message": "{count, plural, one {Ta wersja jest} other {Te wersje są}} obecnie wstrzymane i nie widnieją na publicznej liście. Proszę o przesłanie potwierdzenia posiadania zgody na redystrybucję określonych plików zawartych w {count, plural, one {tej wersji} other {tych wersjach}} modpacka."
},
@@ -4067,6 +4358,9 @@
"servers.plan.small.description": {
"message": "Idealny dla 15 przyjaciół z kilkoma lekkimi modami."
},
"servers.purchase.step.plan.most-popular": {
"message": "Najbardziej popularny"
},
"settings.account.button.complete-setup": {
"message": "Zakończ ustawianie"
},
@@ -4421,15 +4715,9 @@
"settings.authorizations.about-this-app": {
"message": "O aplikacji"
},
"settings.authorizations.by": {
"message": "od"
},
"settings.authorizations.description": {
"message": "Kiedy autoryzujesz aplikacje ze swoim kontem Modrinth, dajesz jej dostęp do swojego konta. Możesz tutaj zawsze zarządzać oraz przeglądać stan aplikacji z dostępem do Twojego konta."
},
"settings.authorizations.empty-state": {
"message": "Nie udało się nam wyświetlić twoich zautoryzowanych aplikacji, pracujemy nad tym, aby to naprawić. Odwiedź tę stronę później!"
},
"settings.authorizations.head-title": {
"message": "Autoryzacje"
},
@@ -4838,6 +5126,33 @@
"settings.sidebar.label.display": {
"message": "Wyświetlanie"
},
"shared-instance.invite.accept": {
"message": "Zaakceptuj zaproszenie"
},
"shared-instance.invite.inviter.unknown": {
"message": "Użytkownik Modrinth"
},
"shared-instance.invite.joined-count": {
"message": "{count, plural, one {# osoba już dołączyła} other {# osób już dołączyło}}"
},
"shared-instance.invite.loading": {
"message": "Ładowanie zaproszenia…"
},
"shared-instance.invite.title": {
"message": "Użytkownik {name} zaprosił Cię do grania w"
},
"shared-instance.invite.trust.description": {
"message": "To zaproszenie zostało utworzone przez innego użytkownika Modrinth, na przez Modrinth. Akceptuj zaproszenia tylko od osób, którym ufasz."
},
"shared-instance.invite.trust.heading": {
"message": "Czy znasz tego użytkownika?"
},
"shared-instance.invite.unavailable.description": {
"message": "Mogło ono wygasnąć, przekroczyć limit użyć lub zostać usunięte przez osobę, która go udostępniła."
},
"shared-instance.invite.unavailable.title": {
"message": "To zaproszenie jest niedostępne"
},
"ui.latest-news-row.latest-news": {
"message": "Najnowsze aktualności z Modrinth"
},
@@ -4910,6 +5225,9 @@
"version.environment.unknown.title": {
"message": "Nieznane środowisko"
},
"version.notification.deleted-text": {
"message": "Wersja została usunięta pomyślnie."
},
"version.notification.deleted-title": {
"message": "Wersja usunięta"
},
+104 -128
View File
@@ -174,10 +174,10 @@
"message": "Exibindo {count} {itemType, select, project {{count, plural, one {projeto} other {os projetos}}} country {{count, plural, one {país} other {os países}}} monetization {{count, plural, one {valor monetário} other {os valores monetários}}} downloadSource {{count, plural, one {fonte do download} other {as fontes do download}}} downloadReason {{count, plural, one {motivo do download} other {os motivos do download}}} member {{count, plural, one {membro} other {os membros}}} projectVersion {{count, plural, one {versão do projeto} other {as versões do projeto}}} loader {{count, plural, one {loader} other {os loaders}}} gameVersion {{count, plural, one {versão do jogo} other {as versões do jogo}}} other {{count, plural, one {item} other {itens}}}} do topo da tabela"
},
"analytics.chart.tooltip.dependent-on-project": {
"message": "Dependente em {project}"
"message": "Dependente de {project}"
},
"analytics.chart.tooltip.dependent-project-version": {
"message": "{dependentProject} dependente em {dependencyProject}, {version}"
"message": "{dependentProject} dependente de {dependencyProject}, {version}"
},
"analytics.chart.tooltip.duration.days": {
"message": "{count, plural, one {# dia} other {# dias}}"
@@ -744,7 +744,7 @@
"message": "Autorizar"
},
"auth.authorize.action.decline": {
"message": "Negar"
"message": "Rejeitar"
},
"auth.authorize.app-info": {
"message": "<strong>{appName}</strong> por <creator-link>{creator}</creator-link> poderá:"
@@ -1665,7 +1665,7 @@
"message": "Nome de usuário Venmo salvo com sucesso!"
},
"dashboard.creator-withdraw-modal.paypal-details.sign-in-with-paypal": {
"message": "Iniciar sessão com o PayPal"
"message": "Iniciar sessão com PayPal"
},
"dashboard.creator-withdraw-modal.paypal-details.venmo-description": {
"message": "Insira o nome de usuário Venmo para receber pagamentos."
@@ -2132,6 +2132,12 @@
"dashboard.withdraw.error.minimum-not-met.title": {
"message": "Quantia muito baixo"
},
"dashboard.withdraw.error.payout-method-disabled.text": {
"message": "Este método de pagamento foi desativado pelo provedor de pagamento. Use o método de pagamento diferente ou entre em contato com o suporte."
},
"dashboard.withdraw.error.payout-method-disabled.title": {
"message": "Método de pagamento indisponível"
},
"dashboard.withdraw.error.paypal-country-mismatch.text": {
"message": "Selecione a opção de transferência do PayPal correspondente à sua região (BR ou Internacional)."
},
@@ -2499,10 +2505,10 @@
"message": "Selecione o plano"
},
"landing.button.discover-mods": {
"message": "Descubra mods"
"message": "Descobrir mods"
},
"landing.button.go-to-dashboard": {
"message": "Visitar painel"
"message": "Acessar painel"
},
"landing.creator.feature.constantly-evolving.description": {
"message": "Obtenha a melhor experiência possível de mods com atualizações constantes da equipe do Modrinth"
@@ -2583,7 +2589,7 @@
"message": "servidores"
},
"landing.heading.the-place-for-minecraft.shaders": {
"message": "sombreadores"
"message": "shaders"
},
"landing.launcher.atlauncher-label": {
"message": "ATLauncher"
@@ -2921,6 +2927,30 @@
"layout.publish.email-verification-required.title": {
"message": "Verificação de e-mail necessária"
},
"modal.shared-instance.open-in-app.benefit.install": {
"message": "Instalar tudo automaticamente enquanto estiver jogando"
},
"modal.shared-instance.open-in-app.benefit.join": {
"message": "Jogue o mesmo conteúdo que seus amigos"
},
"modal.shared-instance.open-in-app.benefit.update": {
"message": "Mantenha o conteúdo compartilhado atualizado a cada mudança"
},
"modal.shared-instance.open-in-app.get-app": {
"message": "Baixe o Modrinth App"
},
"modal.shared-instance.open-in-app.managed-by": {
"message": "Gerenciado por"
},
"modal.shared-instance.open-in-app.opening-automatically": {
"message": "O Modrinth App vai abrir automaticamente..."
},
"modal.shared-instance.open-in-app.title": {
"message": "Abrindo o Modrinth App"
},
"modal.shared-instance.open-in-app.why-use": {
"message": "Por que usar o Modrinth App"
},
"moderation.exclude-technical-review": {
"message": "Excluir RT"
},
@@ -2942,8 +2972,23 @@
"moderation.page.technicalReview": {
"message": "Revisão técnica"
},
"modpack-scan-modal.clear-all-groups": {
"message": "Limpar todos os grupos"
"modpack-scan-modal.batch.label": {
"message": "{amount} por lote"
},
"modpack-scan-modal.batch.placeholder": {
"message": "Quantidade do lote"
},
"modpack-scan-modal.delete-all-groups-confirmation.description": {
"message": "Isso excluirá permanentemente todos os grupos de atribuição para este projeto e todos os arquivos contidos. Esta ação não pode ser desfeita."
},
"modpack-scan-modal.delete-all-groups.error": {
"message": "Falhou ao excluir todos os grupos: {error}"
},
"modpack-scan-modal.delete-all-groups.proceed": {
"message": "Excluir"
},
"modpack-scan-modal.delete-all-groups.success": {
"message": "Todos os grupos excluídos com sucesso."
},
"modpack-scan-modal.failed": {
"message": "Falhou"
@@ -2976,11 +3021,14 @@
"message": "Verificar todos os arquivos"
},
"modpack-scan-modal.scan-error": {
"message": "Alguns arquivos não puderam ser verificados: {error}"
"message": "Alguns arquivos falharam ao escanear: \n\n{error}"
},
"modpack-scan-modal.scanning": {
"message": "Verificando..."
},
"modpack-scan-modal.success": {
"message": "Sucesso"
},
"modpack-scan-modal.title": {
"message": "Verificação do pacote de mods ({scanned}/{total} Arquivos)"
},
@@ -3296,117 +3344,6 @@
"organization.projects.none-with-create-prompt": {
"message": "Esta organização ainda não tem nenhum projeto. Gostaria de <create-link>criar um</create-link>?"
},
"profile.bio.fallback.creator": {
"message": "Um criador Modrinth."
},
"profile.bio.fallback.user": {
"message": "Usuário comum."
},
"profile.button.analytics": {
"message": "Ver estatísticas do usuário"
},
"profile.button.billing": {
"message": "Gerenciar cobrança do usuário"
},
"profile.button.edit-role": {
"message": "Editar cargo"
},
"profile.button.info": {
"message": "Ver detalhes do usuário"
},
"profile.button.manage-projects": {
"message": "Gerenciar projetos"
},
"profile.button.remove-affiliate": {
"message": "Remover como afiliado"
},
"profile.button.set-affiliate": {
"message": "Configurar como afiliado"
},
"profile.collection.projects-count": {
"message": "{count, plural, one {# projeto} other {# projetos}}"
},
"profile.details.label.auth-providers": {
"message": "Provedores de autenticação"
},
"profile.details.label.email": {
"message": "E-mail"
},
"profile.details.label.email-verified": {
"message": "E-mail verificado"
},
"profile.details.label.has-password": {
"message": "Possui senha"
},
"profile.details.label.has-totp": {
"message": "Possui TOTP"
},
"profile.details.label.payment-methods": {
"message": "Métodos de pagamento"
},
"profile.details.tooltip.email-not-verified": {
"message": "E-mail não verificado"
},
"profile.details.tooltip.email-verified": {
"message": "E-mail verificado"
},
"profile.error.not-found": {
"message": "Usuário não encontrado"
},
"profile.label.affiliate": {
"message": "Afiliado"
},
"profile.label.badges": {
"message": "Emblemas"
},
"profile.label.collection": {
"message": "Coleção"
},
"profile.label.download-count": {
"message": "{count, plural, one {download} other {downloads}}"
},
"profile.label.joined": {
"message": "Entrou"
},
"profile.label.no-collections": {
"message": "Este usuário não possui coleções!"
},
"profile.label.no-collections-auth": {
"message": "Você não tem nenhuma coleção.\nGostaria de <create-link>criar uma</create-link>?"
},
"profile.label.no-projects": {
"message": "Este usuário não tem projetos!"
},
"profile.label.no-projects-auth": {
"message": "Você não tem nenhum projeto.\nGostaria de <create-link>criar um</create-link>?"
},
"profile.label.organizations": {
"message": "Organizações"
},
"profile.label.project-count": {
"message": "{count, plural, one {projeto} other {projetos}}"
},
"profile.label.saving": {
"message": "Salvando..."
},
"profile.meta.description": {
"message": "Baixe os projetos de {username} no Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} — Baixe os projetos de {username} no Modrinth"
},
"profile.official-account": {
"message": "Conta oficial do Modrinth"
},
"profile.official-account.bio": {
"message": "Conta oficial do Modrinth. Obtenha suporte em<support-link></support-link> ou por e-mail via <email></email>"
},
"profile.stats.projects-followers": {
"message": "{count, plural, =0 {{count} seguidores} one {<stat>{count}</stat> seguidor} other {<stat>{count}</stat> seguidores}} do projeto"
},
"profile.user-id": {
"message": "ID do usuário: {id}"
},
"project-member-header.error-decline": {
"message": "Falha ao recusar o convite da equipe"
},
@@ -3756,7 +3693,10 @@
"message": "Você ainda pode modificar seu projeto, isso não afetará sua posição na fila."
},
"project.moderation.admonition.under-review.body.4": {
"message": "Nosso objetivo é analisar as submissões em 24 a 48 horas, mas alguns projetos podem sofrer atrasos. Isso não significa que haja algum problema com a sua submissão."
"message": "Buscamos revisar submissões dentro de 2448 horas, mas alguns projetos talvez sofram atrasos. Isso não significa que há um problema com sua submissão."
},
"project.moderation.admonition.under-review.body.4.alt-week": {
"message": "Buscamos revisar submissões dentro de uma semana, mas alguns projetos talvez sofram atrasos. Isso não significa que há um problema com sua submissão."
},
"project.moderation.admonition.under-review.body.5": {
"message": "<emphasis>Agradecemos sua paciência enquanto nossos moderadores trabalham arduamente para manter o Modrinth seguro e estamos ansiosos para ajudá-lo(a) a compartilhar seu conteúdo! 💚</emphasis>"
@@ -3875,6 +3815,21 @@
"project.settings.permissions.completed.title": {
"message": "Permissões concluídas!"
},
"project.settings.permissions.delete-all-groups": {
"message": "Excluir todos os grupos"
},
"project.settings.permissions.delete-all-groups-confirmation.description": {
"message": "Isso excluirá permanentemente {count, plural, one {# grupo de atribuição} other {todos os # grupos de atribuição}} para este projeto e todos arquivos contidos. Esta ação não pode ser desfeita."
},
"project.settings.permissions.delete-all-groups-confirmation.title": {
"message": "Excluir todos os grupos de atribuição?"
},
"project.settings.permissions.delete-all-groups-error": {
"message": "Não foi possível excluir todos os grupos de atribuição"
},
"project.settings.permissions.delete-all-groups-success": {
"message": "Todos os grupos de atribuição foram excluídos."
},
"project.settings.permissions.empty-state.description": {
"message": "Nenhuma das versões do seu projeto contém conteúdo externo, não há o que se preocupar sobre adquirir permissões."
},
@@ -4847,15 +4802,9 @@
"settings.authorizations.about-this-app": {
"message": "Sobre este aplicativo"
},
"settings.authorizations.by": {
"message": "por"
},
"settings.authorizations.description": {
"message": "Ao autorizar um aplicativo com sua conta do Modrinth, você concede acesso à sua conta. Você pode gerenciar e revisar o acesso à sua conta aqui a qualquer momento."
},
"settings.authorizations.empty-state": {
"message": "No momento, não podemos exibir seus aplicativos autorizados. Estamos trabalhando para corrigir isso. Visite esta página novamente mais tarde!"
},
"settings.authorizations.head-title": {
"message": "Autorizações"
},
@@ -5264,6 +5213,33 @@
"settings.sidebar.label.display": {
"message": "Interface"
},
"shared-instance.invite.accept": {
"message": "Aceitar convite"
},
"shared-instance.invite.inviter.unknown": {
"message": "Um usuário do Modrinth"
},
"shared-instance.invite.joined-count": {
"message": "{count, plural, one {# pessoa} other {# pessoas}} já entraram"
},
"shared-instance.invite.loading": {
"message": "Carregando convite…"
},
"shared-instance.invite.title": {
"message": "{name} convidou você para jogar"
},
"shared-instance.invite.trust.description": {
"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."
},
"shared-instance.invite.trust.heading": {
"message": "Você conhece este usuário?"
},
"shared-instance.invite.unavailable.description": {
"message": "Pode ter expirado, atingido o limite de uso ou ter sido removido pela pessoa que o compartilhou."
},
"shared-instance.invite.unavailable.title": {
"message": "Este convite não está disponível"
},
"ui.latest-news-row.latest-news": {
"message": "Notícias recentes do Modrinth"
},
@@ -2501,99 +2501,6 @@
"muralpay.warning.wallet-address": {
"message": "Confirme o endereço da carteira. Fundos enviados para um endereço errado não podem ser recuperados."
},
"profile.bio.fallback.creator": {
"message": "Um criador Modrinth."
},
"profile.bio.fallback.user": {
"message": "Um utilizador Modrinth."
},
"profile.button.billing": {
"message": "Gerir faturação do utilizador"
},
"profile.button.edit-role": {
"message": "Editar cargo"
},
"profile.button.info": {
"message": "Ver detalhes de utilizador"
},
"profile.button.manage-projects": {
"message": "Gerir projetos"
},
"profile.button.remove-affiliate": {
"message": "Remover como afiliado"
},
"profile.button.set-affiliate": {
"message": "Definir como afiliado"
},
"profile.details.label.auth-providers": {
"message": "Fornecedores de Autenticação"
},
"profile.details.label.email": {
"message": "E-mail"
},
"profile.details.label.email-verified": {
"message": "E-mail verificado"
},
"profile.details.label.has-password": {
"message": "Tem password"
},
"profile.details.label.has-totp": {
"message": "Tem TOTP"
},
"profile.details.label.payment-methods": {
"message": "Métodos de pagamento"
},
"profile.details.tooltip.email-not-verified": {
"message": "E-mail não verificado"
},
"profile.details.tooltip.email-verified": {
"message": "E-mail verificado"
},
"profile.error.not-found": {
"message": "Utilizador não encontrado"
},
"profile.label.affiliate": {
"message": "Afiliado"
},
"profile.label.badges": {
"message": "Emblemas"
},
"profile.label.collection": {
"message": "Coleção"
},
"profile.label.joined": {
"message": "Entrou"
},
"profile.label.no-collections": {
"message": "Este utilizador não tem coleções!"
},
"profile.label.no-collections-auth": {
"message": "Não tens nenhuma coleção.\nQueres <create-link>criar uma</create-link>?"
},
"profile.label.no-projects": {
"message": "Este utilizador não tem projetos!"
},
"profile.label.no-projects-auth": {
"message": "Não tens nenhum projeto.\nQueres <create-link>criar um</create-link>?"
},
"profile.label.organizations": {
"message": "Organizações"
},
"profile.label.saving": {
"message": "A guardar..."
},
"profile.meta.description": {
"message": "Transfere os projetos de {username} no Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Transfere os projetos de {username} no Modrinth"
},
"profile.stats.projects-followers": {
"message": "{count, plural, one {<stat>{count}</stat> seguidor do projeto} other {<stat>{count}</stat> seguidores do projeto}}"
},
"profile.user-id": {
"message": "ID do utilizador: {id}"
},
"project-member-header.error-decline": {
"message": "Falha a rejeitar o convite de equipa"
},
@@ -3536,15 +3443,9 @@
"settings.authorizations.about-this-app": {
"message": "Sobre esta aplicação"
},
"settings.authorizations.by": {
"message": "por"
},
"settings.authorizations.description": {
"message": "Quando autorizas uma aplicação com a tua conta Modrinth, dás-lhe acesso à tua conta. Podes gerir e rever acesso à tua conta aqui quando quiseres."
},
"settings.authorizations.empty-state": {
"message": "Neste momento, não conseguimos mostrar as tuas aplicações autorizadas, estamos a tentar corrigir isto. Por favor tenta novamente mais tarde!"
},
"settings.authorizations.head-title": {
"message": "Autorizações"
},
@@ -1214,60 +1214,6 @@
"muralpay.rail.fiat-usd.name": {
"message": "Transfer bancar (USD)"
},
"profile.bio.fallback.creator": {
"message": "Un creator Modrinth."
},
"profile.bio.fallback.user": {
"message": "Un utilizator Modrinth."
},
"profile.button.billing": {
"message": "Administrează facturarea utilizatorului"
},
"profile.button.edit-role": {
"message": "Editează rolul"
},
"profile.button.info": {
"message": "Vizualizează detaliile utilizatorului"
},
"profile.button.manage-projects": {
"message": "Administrează proiectele"
},
"profile.error.not-found": {
"message": "Utilizatorul nu a fost găsit"
},
"profile.label.badges": {
"message": "Insigne"
},
"profile.label.no-collections": {
"message": "Acest utilizator nu are colecții!"
},
"profile.label.no-collections-auth": {
"message": "Nu ai nicio colecție.\nVrei să <create-link>creezi una</create-link>?"
},
"profile.label.no-projects": {
"message": "Acest utilizator nu are proiecte!"
},
"profile.label.no-projects-auth": {
"message": "Nu aveți proiecte.\nDoriți să <create-link>creați unul</create-link>?"
},
"profile.label.organizations": {
"message": "Organizații"
},
"profile.label.saving": {
"message": "Salvare..."
},
"profile.meta.description": {
"message": "Descarcă proiectele lui {username} pe Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} - Descarcă proiectele lui {username} pe Modrinth"
},
"profile.stats.projects-followers": {
"message": "{count, plural, one {<stat>{count}</stat> urmăritor} other {<stat>{count}</stat> urmăritori}}"
},
"profile.user-id": {
"message": "ID-ul utilizatorului: {id}"
},
"project-member-header.error-decline": {
"message": "Refuzarea invitației în echipă a eșuat"
},
+39 -150
View File
@@ -216,7 +216,7 @@
"message": "Сборка"
},
"analytics.download-reason.standalone": {
"message": "Прямая загрузка"
"message": "Напрямую"
},
"analytics.download-reason.update": {
"message": "Обновление"
@@ -225,7 +225,7 @@
"message": "Modrinth App"
},
"analytics.download-source.website": {
"message": "Веб-сайт Modrinth"
"message": "Сайт Modrinth"
},
"analytics.downloads.suffix": {
"message": "скачиваний"
@@ -903,7 +903,7 @@
"message": "Создание аккаунта"
},
"auth.verify-email.action.account-settings": {
"message": "Настройки учётной записи"
"message": "Настройки"
},
"auth.verify-email.action.discover-mods": {
"message": "Найти моды"
@@ -1641,16 +1641,16 @@
"message": "Почти исчерпан лимит вывода: доступно ещё <b>{amountRemaining}</b>. Для снятия лимита заполните налоговую форму."
},
"dashboard.creator-withdraw-modal.paypal-details.account": {
"message": "Учётная запись"
"message": "Аккаунт"
},
"dashboard.creator-withdraw-modal.paypal-details.disconnect-account": {
"message": "Отвязать учётную запись"
"message": "Отвязать аккаунт"
},
"dashboard.creator-withdraw-modal.paypal-details.payment-method": {
"message": "Способ вывода"
},
"dashboard.creator-withdraw-modal.paypal-details.paypal-account": {
"message": "Учётная запись PayPal"
"message": "Аккаунт PayPal"
},
"dashboard.creator-withdraw-modal.paypal-details.paypal-auth-description": {
"message": "Подключите свой PayPal и получайте выплаты напрямую."
@@ -2079,10 +2079,10 @@
"message": "Кошелёк"
},
"dashboard.withdraw.error.account-not-linked.text": {
"message": "Привяжите платёжную учётную запись перед выводом средств."
"message": "Привяжите платёжный аккаунт перед выводом средств."
},
"dashboard.withdraw.error.account-not-linked.title": {
"message": "Учётная запись не привязана"
"message": "Аккаунт не привязан"
},
"dashboard.withdraw.error.email-verification.text": {
"message": "Перед выводом средств необходимо подтвердить адрес электронной почты."
@@ -2921,11 +2921,8 @@
"layout.publish.email-verification-required.title": {
"message": "Необходимо подтвердить почту"
},
"modal.shared-instance.open-in-app.benefit.install": {
"message": "Автоустановка необходимой игры и загрузчика"
},
"modal.shared-instance.open-in-app.get-app": {
"message": "Скачать Modrinth App"
"message": "Скачать лаунчер"
},
"modal.shared-instance.open-in-app.managed-by": {
"message": "Управляется"
@@ -2960,8 +2957,17 @@
"moderation.page.technicalReview": {
"message": "Техпроверка"
},
"modpack-scan-modal.clear-all-groups": {
"message": "Очистить все группы"
"modpack-scan-modal.delete-all-groups-confirmation.description": {
"message": "Все группы атрибуции для этого проекта и все находящиеся в них файлы будут удалены навсегда. Это действие необратимо."
},
"modpack-scan-modal.delete-all-groups.error": {
"message": "Не удалось удалить все группы: {error}"
},
"modpack-scan-modal.delete-all-groups.proceed": {
"message": "Удалить"
},
"modpack-scan-modal.delete-all-groups.success": {
"message": "Все группы успешно удалены."
},
"modpack-scan-modal.failed": {
"message": "Ошибка"
@@ -2994,11 +3000,14 @@
"message": "Сканировать все файлы"
},
"modpack-scan-modal.scan-error": {
"message": "Не удалось просканировать некоторые файлы: {error}"
"message": "Не удалось просканировать некоторые файлы: \n\n{error}"
},
"modpack-scan-modal.scanning": {
"message": "Сканирование..."
},
"modpack-scan-modal.success": {
"message": "Готово"
},
"muralpay.account-type.checking": {
"message": "Расчётный"
},
@@ -3311,117 +3320,6 @@
"organization.projects.none-with-create-prompt": {
"message": "У этой организации ещё нет проектов. Хотите <create-link>создать новый</create-link>?"
},
"profile.bio.fallback.creator": {
"message": "Автор на Modrinth."
},
"profile.bio.fallback.user": {
"message": "Пользователь Modrinth."
},
"profile.button.analytics": {
"message": "Посмотреть аналитику"
},
"profile.button.billing": {
"message": "Управление платежами"
},
"profile.button.edit-role": {
"message": "Изменить роль"
},
"profile.button.info": {
"message": "Посмотреть подробности"
},
"profile.button.manage-projects": {
"message": "Управление проектами"
},
"profile.button.remove-affiliate": {
"message": "Убрать из партнёров"
},
"profile.button.set-affiliate": {
"message": "Сделать партнёром"
},
"profile.collection.projects-count": {
"message": "{count, plural, one {# проект} few {# проекта} other {# проектов}}"
},
"profile.details.label.auth-providers": {
"message": "Сервисы входа"
},
"profile.details.label.email": {
"message": "Почта"
},
"profile.details.label.email-verified": {
"message": "Почта подтверждена"
},
"profile.details.label.has-password": {
"message": "Есть пароль"
},
"profile.details.label.has-totp": {
"message": "Есть TOTP"
},
"profile.details.label.payment-methods": {
"message": "Способы оплаты"
},
"profile.details.tooltip.email-not-verified": {
"message": "Почта не подтверждена"
},
"profile.details.tooltip.email-verified": {
"message": "Почта подтверждена"
},
"profile.error.not-found": {
"message": "Пользователь не найден"
},
"profile.label.affiliate": {
"message": "Партнёр"
},
"profile.label.badges": {
"message": "Значки"
},
"profile.label.collection": {
"message": "Коллекция"
},
"profile.label.download-count": {
"message": "{count, plural, one {скачивание} few {скачивания} other {скачиваний}}"
},
"profile.label.joined": {
"message": "Регистрация:"
},
"profile.label.no-collections": {
"message": "У этого пользователя нет коллекций!"
},
"profile.label.no-collections-auth": {
"message": "У вас ещё нет коллекций.\nХотите <create-link>создать новую</create-link>?"
},
"profile.label.no-projects": {
"message": "У этого пользователя нет проектов!"
},
"profile.label.no-projects-auth": {
"message": "У вас ещё нет проектов.\nХотите <create-link>создать новый</create-link>?"
},
"profile.label.organizations": {
"message": "Организации"
},
"profile.label.project-count": {
"message": "{count, plural, one {проект} few {проекта} other {проектов}}"
},
"profile.label.saving": {
"message": "Сохранение..."
},
"profile.meta.description": {
"message": "Скачать проекты {username} на Modrinth"
},
"profile.meta.description-with-bio": {
"message": "{bio} — Скачать проекты {username} на Modrinth"
},
"profile.official-account": {
"message": "Официальный аккаунт Modrinth"
},
"profile.official-account.bio": {
"message": "Официальный аккаунт Modrinth. Связаться с поддержкой можно по ссылке <support-link></support-link> или по электронной почте: <email></email>"
},
"profile.stats.projects-followers": {
"message": "{count, plural, one {<stat>{count}</stat> подписчик} few {<stat>{count}</stat> подписчика} other {<stat>{count}</stat> подписчиков}} у проектов"
},
"profile.user-id": {
"message": "ID пользователя: {id}"
},
"project-member-header.error-decline": {
"message": "Не удалось отклонить приглашение в команду"
},
@@ -3546,7 +3444,7 @@
"message": "Больше не показывать"
},
"project.actions.edit-project": {
"message": "Изменить проект"
"message": "Настроить проект"
},
"project.actions.rescan-modpack": {
"message": "Пересканировать сборку"
@@ -3771,7 +3669,10 @@
"message": "Вы по-прежнему можете редактировать проект — это не повлияет на его положение в очереди."
},
"project.moderation.admonition.under-review.body.4": {
"message": "Мы стараемся проверять проекты в течение 24-48 часов, однако иногда возможны задержки. Это не означает, что с вашим проектом что-то не так."
"message": "Мы стараемся проверять проекты в течение 2448 часов, однако иногда возможны задержки. Это не означает, что с вашим проектом что-то не так."
},
"project.moderation.admonition.under-review.body.4.alt-week": {
"message": "Мы стараемся проверять проекты в течение недели, однако иногда возможны задержки. Это не означает, что с вашим проектом что-то не так."
},
"project.moderation.admonition.under-review.body.5": {
"message": "<emphasis>Мы ценим ваше терпение, пока модераторы усердно работают над поддержанием безопасности Modrinth, и с нетерпением ждём возможности помочь вам поделиться своим контентом! 💚</emphasis>"
@@ -3893,6 +3794,9 @@
"project.settings.permissions.delete-all-groups": {
"message": "Удалить все группы"
},
"project.settings.permissions.delete-all-groups-confirmation.description": {
"message": "Все {count, plural, one {# группу атрибуции} few {# группы атрибуции} other {# групп атрибуции}} для этого проекта и все находящиеся {count, plural, =1 {ней} other {них}} файлы будут удалены навсегда. Это действие необратимо."
},
"project.settings.permissions.delete-all-groups-confirmation.title": {
"message": "Удалить все группы атрибуции?"
},
@@ -4016,9 +3920,6 @@
"project.settings.tags.features-description": {
"message": "Выберите все особенности, которые использует ваш {type}"
},
"project.settings.tags.multiple-resolution-tags-warning": {
"message": "Вы выбрали {count} тегов разрешения ({tags}). Ресурс паки обычно должны иметь только один тег разрешения."
},
"project.settings.tags.performance-impact-description": {
"message": "Выберите реалистичное влияние на производительность вашего {type}. Выберите несколько, если {type} можно конфигурировать разными уровнями влияния на производительность."
},
@@ -4034,15 +3935,6 @@
"project.settings.tags.title": {
"message": "Теги"
},
"project.settings.tags.too-many-tags-project-warning": {
"message": "Вы выбрали {count} тегов. Подумайте уменьшать до 8 или меньше, чтобы держать ваш проект в фокусе и легче, чтобы его можно было найти."
},
"project.settings.tags.too-many-tags-server-hard-warning": {
"message": "Вы выбрали {count} тегов. Пожалуйста, уменьшите до 18 или меньше, чтобы держать ваш проект в фокусе и легче, чтобы его можно было найти."
},
"project.settings.tags.too-many-tags-server-soft-warning": {
"message": "Вы выбрали {count} тегов. Пожалуйста, уменьшите до 12 или меньше, чтобы держать ваш проект в фокусе и легче, чтобы его можно было найти."
},
"project.settings.tags.upload-version-first": {
"message": "Загрузите версию перед тем, как выбрать теги!"
},
@@ -4856,15 +4748,9 @@
"settings.authorizations.about-this-app": {
"message": "О приложении"
},
"settings.authorizations.by": {
"message": "от"
},
"settings.authorizations.description": {
"message": "Авторизованные приложения получают доступ к аккаунту Modrinth. Здесь можно просматривать и отзывать этот доступ."
},
"settings.authorizations.empty-state": {
"message": "Список приложений временно недоступен. Мы работаем над исправлением — загляните сюда позже."
},
"settings.authorizations.head-title": {
"message": "Авторизации"
},
@@ -5268,16 +5154,19 @@
"message": "Отображение"
},
"shared-instance.invite.accept": {
"message": "Принять"
"message": "Принять приглашение"
},
"shared-instance.invite.inviter.unknown": {
"message": "Пользователь Modrinth"
},
"shared-instance.invite.joined-count": {
"message": "{count, plural, one {# человек} few {# человека} other {# человек}} уже присоединились"
},
"shared-instance.invite.loading": {
"message": "Загрузка приглашения..."
},
"shared-instance.invite.title": {
"message": "{name} пригласил вас"
"message": "{name} приглашает сыграть"
},
"shared-instance.invite.trust.description": {
"message": "Это приглашение создано другим пользователем Modrinth. Принимайте приглашения только от тех, кому доверяете."
@@ -5286,7 +5175,7 @@
"message": "Вы знакомы с этим пользователем?"
},
"shared-instance.invite.unavailable.title": {
"message": "Это приглашение недоступно"
"message": "Приглашение недоступно"
},
"ui.latest-news-row.latest-news": {
"message": "Последние новости от Modrinth"
@@ -5307,7 +5196,7 @@
"message": "Все версии"
},
"version.confirm-delete.description": {
"message": "Эта версия будет удалена навсегда. Отменить это действие нельзя."
"message": "Эта версия будет удалена навсегда. Это действие необратимо."
},
"version.confirm-delete.proceed": {
"message": "Удалить версию"

Some files were not shown because too many files have changed in this diff Show More