diff --git a/apps/app-frontend/src/components/ui/skin-site/ChatUserPicker.vue b/apps/app-frontend/src/components/ui/skin-site/ChatUserPicker.vue index ad24d06..bff3353 100644 --- a/apps/app-frontend/src/components/ui/skin-site/ChatUserPicker.vue +++ b/apps/app-frontend/src/components/ui/skin-site/ChatUserPicker.vue @@ -70,6 +70,13 @@ const messages = defineMessages({ defaultMessage: 'Selected', }, idLabel: { id: 'app.skin-site.chat.user-picker.id', defaultMessage: 'ID' }, + emailLabel: { id: 'app.skin-site.chat.user-picker.email', defaultMessage: 'Email' }, + registeredLabel: { + id: 'app.skin-site.chat.user-picker.registered', + defaultMessage: 'Registered', + }, + bannedStatus: { id: 'app.skin-site.chat.user-picker.banned-status', defaultMessage: 'Banned' }, + activeStatus: { id: 'app.skin-site.chat.user-picker.active-status', defaultMessage: 'Active' }, }) const keyword = ref('') @@ -82,9 +89,7 @@ let timer: ReturnType | undefined let requestId = 0 const currentLabel = computed(() => props.label ?? formatMessage(messages.label)) -const currentPlaceholder = computed( - () => props.placeholder ?? formatMessage(messages.placeholder), -) +const currentPlaceholder = computed(() => props.placeholder ?? formatMessage(messages.placeholder)) watch([keyword, searchMode], () => { clearTimeout(timer) @@ -174,13 +179,19 @@ function formatTime(ts: number): string { v-model.trim="keyword" type="text" maxlength="100" - :placeholder="searchMode === 'player' ? formatMessage(messages.playerHint) : currentPlaceholder" + :placeholder=" + searchMode === 'player' ? formatMessage(messages.playerHint) : currentPlaceholder + " class="min-w-0 flex-1 rounded-lg border border-solid border-surface-5 bg-bg-raised px-3 py-1.5 text-xs text-contrast outline-none focus:border-brand" autocomplete="off" /> - {{ searchMode === 'player' ? formatMessage(messages.playerHint) : formatMessage(messages.hint) }} + {{ + searchMode === 'player' + ? formatMessage(messages.playerHint) + : formatMessage(messages.hint) + }} @@ -201,7 +212,9 @@ function formatTime(ts: number): string { @click="preview = user" > - + {{ user.username.slice(0, 1).toUpperCase() }} @@ -244,7 +257,7 @@ function formatTime(ts: number): string { class="rounded-full px-2 py-0.5 text-[10px] font-semibold" :class="preview.banned ? 'bg-red text-contrast' : 'bg-green text-contrast'" > - {{ preview.banned ? 'Banned' : 'OK' }} + {{ formatMessage(preview.banned ? messages.bannedStatus : messages.activeStatus) }}
@@ -253,7 +266,7 @@ function formatTime(ts: number): string { {{ preview.uuid }}
- Email + {{ formatMessage(messages.emailLabel) }} {{ preview.email }}
@@ -261,7 +274,7 @@ function formatTime(ts: number): string { {{ preview.qq ?? '—' }}
- Registered + {{ formatMessage(messages.registeredLabel) }} {{ formatTime(preview.registerTime) }}
@@ -283,7 +296,11 @@ function formatTime(ts: number): string { :disabled="Boolean(unavailableReason(preview))" @click="selectPreview" > - {{ model?.uuid === preview.uuid ? formatMessage(messages.selected) : formatMessage(messages.select) }} + {{ + model?.uuid === preview.uuid + ? formatMessage(messages.selected) + : formatMessage(messages.select) + }} diff --git a/apps/app-frontend/src/components/ui/skin-site/SkinSiteAnnouncements.test.ts b/apps/app-frontend/src/components/ui/skin-site/SkinSiteAnnouncements.test.ts new file mode 100644 index 0000000..f98422d --- /dev/null +++ b/apps/app-frontend/src/components/ui/skin-site/SkinSiteAnnouncements.test.ts @@ -0,0 +1,142 @@ +import assert from 'node:assert/strict' +import { readFileSync } from 'node:fs' +import { createRequire, registerHooks, stripTypeScriptTypes } from 'node:module' +import test from 'node:test' + +import { createRenderer, nextTick, ref } from 'vue' + +const testSession = { + skinSiteStatus: ref('checking'), + skinSiteUser: ref<{ uuid: string } | null>(null), +} +const testGlobal = globalThis as unknown as { + skinSiteAnnouncementSession: typeof testSession + skinSiteAnnouncementFetch: () => Promise +} +testGlobal.skinSiteAnnouncementSession = testSession +const require = createRequire(import.meta.url) +const { parse, compileScript } = require('vue/compiler-sfc') +const componentUrl = new URL('./SkinSiteAnnouncements.vue', import.meta.url).href +const stubs: Record = { + '@modrinth/assets': 'export const SpinnerIcon={}', + '@modrinth/ui': + 'export const commonMessages={retryButton:{defaultMessage:"Retry"}}; export const defineMessages=x=>x; export const useVIntl=()=>({formatMessage:x=>x.defaultMessage})', + '@/helpers/skin-site-api': + 'export const skinSiteAnnouncements=()=>globalThis.skinSiteAnnouncementFetch()', + '@/composables/skin-site-session': + 'export const {skinSiteStatus,skinSiteUser}=globalThis.skinSiteAnnouncementSession; export const reloadSkinSiteSession=async()=>{}', +} +const hooks = registerHooks({ + resolve(specifier, context, nextResolve) { + if (specifier in stubs) + return { + url: `data:text/javascript,${encodeURIComponent(stubs[specifier])}`, + shortCircuit: true, + } + return nextResolve(specifier, context) + }, + load(url, context, nextLoad) { + if (url !== componentUrl) return nextLoad(url, context) + const { descriptor } = parse(readFileSync(new URL(url), 'utf8')) + return { + format: 'module', + source: stripTypeScriptTypes( + compileScript(descriptor, { id: 'skin-announcement-test' }).content, + ), + shortCircuit: true, + } + }, +}) +const { default: Announcements } = await import(componentUrl) +hooks.deregister() +Announcements.render = () => null + +type Node = Record +const renderer = createRenderer({ + createElement: () => ({}), + createText: () => ({}), + createComment: () => ({}), + insert() {}, + remove() {}, + setText() {}, + setElementText() {}, + patchProp() {}, + parentNode: () => null, + nextSibling: () => null, +}) +const flush = async () => { + await new Promise((resolve) => setImmediate(resolve)) + await nextTick() +} +type State = { + announcements: Array<{ id: number }> + loading: boolean + failed: boolean + load: () => Promise +} +let requests = 0 +function mount(t: test.TestContext) { + const app = renderer.createApp(Announcements) + const instance = app.mount({}) + t.after(() => app.unmount()) + return instance.$.setupState as State +} +test.beforeEach(() => { + testSession.skinSiteStatus.value = 'checking' + testSession.skinSiteUser.value = null + requests = 0 + testGlobal.skinSiteAnnouncementFetch = async () => { + requests++ + return { success: true, payload: [{ id: 1, title: '公告', updateAt: 1, star: false }] } + } +}) + +test('announcements wait for startup renewal and reload when sign-in finishes', async (t) => { + const state = mount(t) + await flush() + assert.equal(requests, 0) + assert.equal(state.loading, true) + testSession.skinSiteUser.value = { uuid: 'owner' } + testSession.skinSiteStatus.value = 'signed-in' + await flush() + assert.equal(requests, 1) + assert.equal(state.announcements.length, 1) +}) + +test('signed-out users do not request protected announcements or see a load failure', async (t) => { + testSession.skinSiteStatus.value = 'signed-out' + const state = mount(t) + await flush() + assert.equal(requests, 0) + assert.equal(state.loading, false) + assert.equal(state.failed, false) +}) + +test('signing out clears announcements and ignores an old in-flight response', async (t) => { + testSession.skinSiteStatus.value = 'signed-in' + let finish!: (value: unknown) => void + testGlobal.skinSiteAnnouncementFetch = () => + new Promise((resolve) => { + finish = resolve + }) + const state = mount(t) + await flush() + testSession.skinSiteStatus.value = 'signed-out' + await flush() + finish({ success: true, payload: [{ id: 2 }] }) + await flush() + assert.deepEqual(state.announcements, []) + assert.equal(state.failed, false) +}) + +test('a failed announcement request can be retried', async (t) => { + testSession.skinSiteStatus.value = 'signed-in' + testGlobal.skinSiteAnnouncementFetch = async () => ({ success: false }) + const state = mount(t) + await flush() + assert.equal(state.failed, true) + testGlobal.skinSiteAnnouncementFetch = async () => ({ success: true, payload: [{ id: 3 }] }) + await state.load() + assert.equal(state.failed, false) + assert.equal(state.announcements[0].id, 3) +}) diff --git a/apps/app-frontend/src/components/ui/skin-site/SkinSiteAnnouncements.vue b/apps/app-frontend/src/components/ui/skin-site/SkinSiteAnnouncements.vue index 93ac47b..b5acbe0 100644 --- a/apps/app-frontend/src/components/ui/skin-site/SkinSiteAnnouncements.vue +++ b/apps/app-frontend/src/components/ui/skin-site/SkinSiteAnnouncements.vue @@ -1,8 +1,13 @@ @@ -63,8 +90,14 @@ onMounted(async () => { {{ formatMessage(messages.loading) }} -

- {{ formatMessage(messages.failed) }} +

+

{{ formatMessage(messages.failed) }}

+ +
+

+ {{ formatMessage(messages.signedOut) }}

{{ formatMessage(messages.empty) }} diff --git a/apps/app-frontend/src/components/ui/skin-site/admin/AdminWikiPage.vue b/apps/app-frontend/src/components/ui/skin-site/admin/AdminWikiPage.vue index f0bd173..a7fcaf7 100644 --- a/apps/app-frontend/src/components/ui/skin-site/admin/AdminWikiPage.vue +++ b/apps/app-frontend/src/components/ui/skin-site/admin/AdminWikiPage.vue @@ -7,6 +7,16 @@ import { skinSiteWikiAudit, type SkinSiteWikiAuditInfo, type SkinSiteWikiEditPolicy, + type SkinSiteWikiMigrationCandidate, + skinSiteWikiMigrationCandidates, + skinSiteWikiMigrationDecide, + skinSiteWikiMigrationDelete, + type SkinSiteWikiMigrationJobInfo, + skinSiteWikiMigrationJobs, + skinSiteWikiMigrationPublish, + skinSiteWikiMigrationRollback, + skinSiteWikiMigrationStartAutomatic, + skinSiteWikiMigrationStartXml, skinSiteWikiPage, type SkinSiteWikiPageDetail, skinSiteWikiProtectPage, @@ -16,22 +26,18 @@ import { type SkinSiteWikiSettings, skinSiteWikiSettings, skinSiteWikiUpdateSettings, - skinSiteWikiMigrationCandidates, - skinSiteWikiMigrationDecide, - skinSiteWikiMigrationDelete, - skinSiteWikiMigrationJobs, - skinSiteWikiMigrationPublish, - skinSiteWikiMigrationRollback, - skinSiteWikiMigrationStartAutomatic, - skinSiteWikiMigrationStartXml, - type SkinSiteWikiMigrationCandidate, - type SkinSiteWikiMigrationJobInfo, } from '@/helpers/skin-site-api' const { formatMessage } = useVIntl() const { handleError, addNotification } = injectNotificationManager() const messages = defineMessages({ + policyPublic: { id: 'app.skin-site.admin.wiki.policy-public', defaultMessage: 'Everyone' }, + policyMember: { id: 'app.skin-site.admin.wiki.policy-member', defaultMessage: 'Members' }, + policyAdmin: { + id: 'app.skin-site.admin.wiki.policy-admin', + defaultMessage: 'Website administrators', + }, title: { id: 'app.skin-site.admin.wiki.title', defaultMessage: 'Wiki' }, tabPage: { id: 'app.skin-site.admin.wiki.tab-page', defaultMessage: 'Page' }, tabAudit: { id: 'app.skin-site.admin.wiki.tab-audit', defaultMessage: 'Audit log' }, @@ -61,7 +67,8 @@ const messages = defineMessages({ }, credentialsHint: { id: 'app.skin-site.admin.wiki.credentials-hint', - defaultMessage: 'Credentials stay in memory for this job only. HTTPS is required when supplied.', + defaultMessage: + 'Credentials stay in memory for this job only. HTTPS is required when supplied.', }, allowPrivate: { id: 'app.skin-site.admin.wiki.allow-private', @@ -529,8 +536,7 @@ async function loadMigrationJobs() { if (!res.success) throw new Error(res.errorMessage) migrationJobs.value = res.payload ?? [] if (selectedJob.value) { - selectedJob.value = - migrationJobs.value.find((j) => j.id === selectedJob.value!.id) ?? null + selectedJob.value = migrationJobs.value.find((j) => j.id === selectedJob.value!.id) ?? null } } catch (error) { handleError(error) @@ -821,8 +827,8 @@ onMounted(() => void loadSettings()) v-model="protectRead" class="rounded-lg border border-solid border-surface-5 bg-bg px-2 py-1 text-xs text-contrast" > - - + + @@ -1075,9 +1117,19 @@ onMounted(() => void loadSettings()) {{ formatMessage(messages.xmlFile) }} - + - @@ -1087,16 +1139,27 @@ onMounted(() => void loadSettings())

{{ formatMessage(messages.jobs) }}

- -
+
{{ formatMessage(messages.loading) }}
-

+

{{ formatMessage(messages.jobsEmpty) }}

@@ -1107,21 +1170,43 @@ onMounted(() => void loadSettings()) :class="selectedJob?.id === job.id ? 'border-brand bg-brand/5' : 'border-surface-5'" >
- #{{ job.id }} · {{ job.source }} - + #{{ job.id }} · {{ job.source }} + {{ jobStateLabel(job.state) }}
-
+
- {{ formatMessage(messages.reviewedCount, { reviewed: job.reviewed, total: job.total }) }} - {{ formatMessage(messages.importedExcluded, { imported: job.imported, excluded: job.excluded }) }} + {{ + formatMessage(messages.reviewedCount, { + reviewed: job.reviewed, + total: job.total, + }) + }} + {{ + formatMessage(messages.importedExcluded, { + imported: job.imported, + excluded: job.excluded, + }) + }}

{{ job.error }}

- -
@@ -1151,7 +1245,10 @@ onMounted(() => void loadSettings())
-
+

{{ formatMessage(messages.candidates) }} @@ -1180,20 +1277,35 @@ onMounted(() => void loadSettings())

{{ formatMessage(messages.confirmRollback) }}

- -
-
+
{{ formatMessage(messages.loading) }}
-

+

{{ formatMessage(messages.candidatesEmpty) }}

@@ -1203,20 +1315,38 @@ onMounted(() => void loadSettings()) class="flex flex-col gap-2 rounded-lg border border-solid border-surface-5 p-3" >
- {{ candidate.title }} - + {{ + candidate.title + }} + {{ decisionLabel(candidate.decision) }} - + {{ formatMessage(messages.conflict) }}
- {{ formatMessage(messages.lastUpdated, { date: new Date(candidate.lastUpdatedAt).toLocaleDateString() }) }} - {{ formatMessage(messages.maintainerCount, { count: candidate.maintainerCount }) }} + {{ + formatMessage(messages.lastUpdated, { + date: new Date(candidate.lastUpdatedAt).toLocaleDateString(), + }) + }} + {{ + formatMessage(messages.maintainerCount, { count: candidate.maintainerCount }) + }}
- + {{ reason }}
@@ -1228,13 +1358,25 @@ onMounted(() => void loadSettings()) class="min-w-0 flex-1 rounded-lg border border-solid border-surface-5 bg-bg-raised px-2 py-1 text-xs text-contrast outline-none focus:border-brand" /> - -
@@ -1251,8 +1393,6 @@ onMounted(() => void loadSettings())

- - - +
diff --git a/apps/app-frontend/src/composables/skin-site-session.test.ts b/apps/app-frontend/src/composables/skin-site-session.test.ts new file mode 100644 index 0000000..5b6980d --- /dev/null +++ b/apps/app-frontend/src/composables/skin-site-session.test.ts @@ -0,0 +1,208 @@ +import assert from 'node:assert/strict' +import { registerHooks } from 'node:module' +import test from 'node:test' + +type FetchHandler = (url: string, options: RequestInit) => Promise +const testGlobal = globalThis as unknown as { skinSiteTestFetch: FetchHandler } +const hooks = registerHooks({ + resolve(specifier, context, nextResolve) { + if (specifier === '@tauri-apps/plugin-http') { + return { + url: 'data:text/javascript,export const fetch=(...args)=>globalThis.skinSiteTestFetch(...args)', + shortCircuit: true, + } + } + if (specifier.startsWith('@/')) { + return nextResolve(new URL(`../${specifier.slice(2)}.ts`, import.meta.url).href, context) + } + return nextResolve(specifier, context) + }, +}) +const session = await import('./skin-site-session.ts') +hooks.deregister() + +const user = { uuid: 'owner', username: 'Player', permissions: [] } +const ok = (payload: unknown) => Response.json({ payload }) +const storage = new Map() +const tokenKey = 'starlight-skin-site-token' +let calls: Array<{ path: string; token: string | undefined }> = [] +let respond: FetchHandler + +test.beforeEach(() => { + storage.clear() + Object.defineProperty(globalThis, 'localStorage', { + configurable: true, + value: { + getItem: (key: string) => storage.get(key) ?? null, + setItem: (key: string, value: string) => storage.set(key, value), + removeItem: (key: string) => storage.delete(key), + }, + }) + calls = [] + respond = async (url) => { + if (url.endsWith('/user/refresh')) return ok({ username: 'Player', jwt: 'fresh-token' }) + if (url.endsWith('/user')) return ok(user) + return ok([]) + } + testGlobal.skinSiteTestFetch = async (url, options) => { + calls.push({ + path: new URL(url).pathname, + token: (options.headers as Record)?.Authorization, + }) + return respond(url, options) + } + session.resetSkinSiteSession() +}) + +test.afterEach(async () => { + session.signOutSkinSite() + await new Promise((resolve) => setImmediate(resolve)) + Reflect.deleteProperty(globalThis, 'localStorage') +}) + +test('startup renews the stored JWT before loading the user with the new token', async () => { + storage.set(tokenKey, 'old-token') + await session.initSkinSiteSession() + assert.deepEqual(calls.slice(0, 2), [ + { path: '/starlight/user/refresh', token: 'Bearer old-token' }, + { path: '/starlight/user', token: 'Bearer fresh-token' }, + ]) + assert.equal(storage.get(tokenKey), 'fresh-token') + assert.equal(session.skinSiteStatus.value, 'signed-in') +}) + +test('simultaneous startup consumers share one refresh', async () => { + storage.set(tokenKey, 'old-token') + await Promise.all([ + session.initSkinSiteSession(), + session.initSkinSiteSession(), + session.waitForSkinSiteSession(), + ]) + assert.equal(calls.filter((call) => call.path.endsWith('/refresh')).length, 1) +}) + +test('startup without a stored token does not make authenticated requests', async () => { + await session.initSkinSiteSession() + assert.equal(session.skinSiteStatus.value, 'signed-out') + assert.deepEqual(calls, []) +}) + +test('an expired token is cleared when renewal is rejected', async () => { + storage.set(tokenKey, 'expired-token') + respond = async () => Response.json({ errorMessage: 'Expired' }, { status: 401 }) + await session.initSkinSiteSession() + assert.equal(storage.has(tokenKey), false) + assert.equal(session.skinSiteStatus.value, 'signed-out') + assert.equal(calls.length, 1) +}) + +test('temporary renewal failure preserves the token and allows startup retry', async () => { + storage.set(tokenKey, 'old-token') + respond = async () => Response.json({ errorMessage: 'Unavailable' }, { status: 503 }) + await session.initSkinSiteSession() + assert.equal(session.skinSiteStatus.value, 'error') + assert.equal(storage.get(tokenKey), 'old-token') + respond = async (url) => + url.endsWith('/refresh') + ? ok({ jwt: 'fresh-token' }) + : url.endsWith('/user') + ? ok(user) + : ok([]) + await session.initSkinSiteSession() + assert.equal(session.skinSiteStatus.value, 'signed-in') +}) + +test('a late refresh cannot restore a session after sign-out', async () => { + storage.set(tokenKey, 'old-token') + let finish!: (response: Response) => void + respond = () => + new Promise((resolve) => { + finish = resolve + }) + const initializing = session.initSkinSiteSession() + await new Promise((resolve) => setImmediate(resolve)) + session.signOutSkinSite() + finish(ok({ username: 'Player', jwt: 'late-token' })) + await initializing + assert.equal(storage.has(tokenKey), false) + assert.equal(session.skinSiteStatus.value, 'signed-out') + assert.equal(session.skinSiteUser.value, null) +}) + +test('a malformed refresh response never replaces the saved token', async () => { + storage.set(tokenKey, 'old-token') + respond = async () => ok({ username: 'Player' }) + await session.initSkinSiteSession() + assert.equal(storage.get(tokenKey), 'old-token') + assert.equal(session.skinSiteStatus.value, 'error') +}) + +test('a failed sign-in attempt does not invalidate a pending startup renewal', async () => { + storage.set(tokenKey, 'old-token') + let finish!: (response: Response) => void + respond = async (url) => { + if (url.endsWith('/refresh')) + return new Promise((resolve) => { + finish = resolve + }) + if (url.endsWith('/login')) + return Response.json({ errorMessage: 'Invalid password' }, { status: 401 }) + return url.endsWith('/user') ? ok(user) : ok([]) + } + const initializing = session.initSkinSiteSession() + await new Promise((resolve) => setImmediate(resolve)) + await session.signInSkinSite({ username: 'Player', password: 'wrong', clientId: 'captcha' }) + finish(ok({ username: 'Player', jwt: 'fresh-token' })) + await initializing + assert.equal(session.skinSiteStatus.value, 'signed-in') + assert.equal(storage.get(tokenKey), 'fresh-token') +}) + +test('rejection of an old startup token does not discard a new successful login', async () => { + storage.set(tokenKey, 'expired-token') + let finishRefresh!: (response: Response) => void + let finishLogin!: (response: Response) => void + respond = async (url) => { + if (url.endsWith('/refresh')) + return new Promise((resolve) => { + finishRefresh = resolve + }) + if (url.endsWith('/login')) + return new Promise((resolve) => { + finishLogin = resolve + }) + return url.endsWith('/user') ? ok(user) : ok([]) + } + const initializing = session.initSkinSiteSession() + const signingIn = session.signInSkinSite({ + username: 'Player', + password: 'valid', + clientId: 'captcha', + }) + await new Promise((resolve) => setImmediate(resolve)) + finishRefresh(Response.json({ errorMessage: 'Expired' }, { status: 401 })) + await initializing + finishLogin(ok({ username: 'Player', jwt: 'login-token' })) + await signingIn + assert.equal(session.skinSiteStatus.value, 'signed-in') + assert.equal(storage.get(tokenKey), 'login-token') +}) + +test('explicit sign-out discards a late successful login', async () => { + let finishLogin!: (response: Response) => void + respond = () => + new Promise((resolve) => { + finishLogin = resolve + }) + const signingIn = session.signInSkinSite({ + username: 'Player', + password: 'valid', + clientId: 'captcha', + }) + await new Promise((resolve) => setImmediate(resolve)) + session.signOutSkinSite() + finishLogin(ok({ username: 'Player', jwt: 'late-login-token' })) + await signingIn + assert.equal(session.skinSiteStatus.value, 'signed-out') + assert.equal(storage.has(tokenKey), false) +}) diff --git a/apps/app-frontend/src/composables/skin-site-session.ts b/apps/app-frontend/src/composables/skin-site-session.ts index 51f3412..9cae783 100644 --- a/apps/app-frontend/src/composables/skin-site-session.ts +++ b/apps/app-frontend/src/composables/skin-site-session.ts @@ -65,13 +65,54 @@ function clearSessionState() { // --------------------------------------------------------------------------- let initialized: Promise | null = null +let sessionRevision = 0 +let loginRevision = 0 +let refreshRequest: { token: string; revision: number; promise: Promise } | null = null + +/** Share renewals and discard results from a session that has since changed. */ +function renewSkinSiteToken(): Promise { + const token = getSkinSiteToken() + if (!token) return Promise.resolve(false) + const revision = sessionRevision + if (refreshRequest?.token === token && refreshRequest.revision === revision) { + return refreshRequest.promise + } + const request = { + token, + revision, + promise: (async () => { + let result: SkinSiteResponse<{ username: string; jwt: string }> + try { + result = await skinSiteRefresh() + } catch { + return false + } + if (revision !== sessionRevision || getSkinSiteToken() !== token) return false + if (result.success) { + if (typeof result.payload?.jwt !== 'string' || !result.payload.jwt.trim()) return false + setSkinSiteToken(result.payload.jwt) + return true + } + if (result.errorCode === 401 || result.errorCode === 403) invalidateSkinSiteSession() + return false + })(), + } + refreshRequest = request + const clearRequest = () => { + if (refreshRequest === request) refreshRequest = null + } + void request.promise.then(clearRequest, clearRequest) + return request.promise +} /** - * Resolve the current session from the stored JWT. Safe to call repeatedly; + * Renew the saved JWT on each launcher startup before loading the user. + * Safe to call repeatedly; * the first call performs the actual work and later ones reuse it. */ export function initSkinSiteSession(): Promise { if (initialized) return initialized + const revision = sessionRevision initialized = (async () => { const token = getSkinSiteToken() if (!token) { @@ -79,7 +120,13 @@ export function initSkinSiteSession(): Promise { return } status.value = 'checking' + if (!(await renewSkinSiteToken())) { + if (revision === sessionRevision) status.value = 'error' + return + } + if (revision !== sessionRevision) return const result = await skinSiteCurrentUser() + if (revision !== sessionRevision) return if (result.success) { user.value = toUser(result.payload) status.value = 'signed-in' @@ -92,11 +139,18 @@ export function initSkinSiteSession(): Promise { status.value = 'error' } })() + .catch(() => { + if (revision === sessionRevision) status.value = 'error' + }) + .finally(() => { + if (revision === sessionRevision && status.value === 'error') initialized = null + }) return initialized } /** Force a re-check (e.g. after the user signs in from another view). */ export function reloadSkinSiteSession(): Promise { + sessionRevision++ initialized = null return initSkinSiteSession() } @@ -106,10 +160,14 @@ export async function signInSkinSite(payload: { password: string clientId: string }): Promise> { + const attemptRevision = ++loginRevision const result = await skinSiteLogin(payload) - if (result.success) { + if (result.success && attemptRevision === loginRevision) { + const revision = ++sessionRevision + initialized = null setSkinSiteToken(result.payload.jwt) const current = await skinSiteCurrentUser() + if (revision !== sessionRevision) return result if (current.success) { user.value = toUser(current.payload) status.value = 'signed-in' @@ -122,23 +180,25 @@ export async function signInSkinSite(payload: { return result } -export function signOutSkinSite() { +/** Reject an old credential without cancelling a newer explicit login attempt. */ +function invalidateSkinSiteSession() { + sessionRevision++ + refreshRequest = null clearSkinSiteToken() clearSessionState() status.value = 'signed-out' initialized = null } +export function signOutSkinSite() { + loginRevision++ + invalidateSkinSiteSession() +} + /** Refresh the JWT; returns true when a new token was stored. */ export async function refreshSkinSiteSession(): Promise { if (status.value !== 'signed-in') return false - const result = await skinSiteRefresh() - if (result.success) { - setSkinSiteToken(result.payload.jwt) - return true - } - if (result.errorCode === 401 || result.errorCode === 403) signOutSkinSite() - return false + return renewSkinSiteToken() } // --------------------------------------------------------------------------- @@ -157,6 +217,9 @@ export function receiveSkinSiteMessage(_event: MessageEvent, _frame: Window | nu export function openSkinSiteLogin() {} export function resetSkinSiteSession() { + loginRevision++ + sessionRevision++ + refreshRequest = null clearSessionState() status.value = getSkinSiteToken() ? 'checking' : 'signed-out' initialized = null diff --git a/apps/app-frontend/src/locales/en-US/index.json b/apps/app-frontend/src/locales/en-US/index.json index 9a3ae7f..13e7ee9 100644 --- a/apps/app-frontend/src/locales/en-US/index.json +++ b/apps/app-frontend/src/locales/en-US/index.json @@ -1,4 +1,203 @@ { + "app.skin-site.captcha.loading": { "message": "Loading captcha…" }, + "app.skin-site.captcha.submit": { "message": "Submit" }, + "app.skin-site.captcha.subtitle": { + "message": "Drag the slider to rotate the image upright." + }, + "app.skin-site.captcha.title": { "message": "Let us check you are human" }, + "app.skin-site.downloads.all": { "message": "All" }, + "app.skin-site.downloads.back": { "message": "Back to home" }, + "app.skin-site.downloads.empty": { "message": "Nothing to download yet." }, + "app.skin-site.downloads.failed": { "message": "Could not load downloads." }, + "app.skin-site.downloads.go": { "message": "Download" }, + "app.skin-site.downloads.loading": { "message": "Loading…" }, + "app.skin-site.downloads.status.legacy": { "message": "Legacy" }, + "app.skin-site.downloads.status.new": { "message": "New" }, + "app.skin-site.downloads.status.ok": { "message": "OK" }, + "app.skin-site.downloads.status.outdated": { "message": "Outdated" }, + "app.skin-site.downloads.status.removal": { "message": "Removal" }, + "app.skin-site.downloads.subtitle": { + "message": "Files shared by the server. Pick a category to narrow the list." + }, + "app.skin-site.downloads.title": { "message": "Downloads" }, + "app.skin-site.downloads.uploader": { "message": "by {name}" }, + "app.skin-site.home.announcements.empty": { + "message": "No announcements right now." + }, + "app.skin-site.home.announcements.failed": { + "message": "Could not load announcements." + }, + "app.skin-site.home.announcements.loading": { "message": "Loading…" }, + "app.skin-site.home.announcements.title": { "message": "Announcements" }, + "app.skin-site.home.donation.donors": { "message": "{count} donors" }, + "app.skin-site.home.donation.loading": { "message": "Loading…" }, + "app.skin-site.home.donation.title": { "message": "Donation thanks" }, + "app.skin-site.home.donation.total": { "message": "Total raised" }, + "app.skin-site.home.donation.unavailable": { + "message": "Donation summary unavailable." + }, + "app.skin-site.login.forgot": { "message": "Forgot password?" }, + "app.skin-site.login.password": { "message": "Password" }, + "app.skin-site.login.password-hint": { + "message": "6–50 characters with upper case, lower case and a digit." + }, + "app.skin-site.login.register": { "message": "Create account" }, + "app.skin-site.login.sign-in": { "message": "Sign in" }, + "app.skin-site.login.signing-in": { "message": "Signing in…" }, + "app.skin-site.login.success": { "message": "Signed in to StarLight." }, + "app.skin-site.login.title": { "message": "Sign in to StarLight" }, + "app.skin-site.login.username": { "message": "Username or email" }, + "app.skin-site.login.username-hint": { + "message": "3–16 characters, or a registered email address." + }, + "app.skin-site.map.back": { "message": "Back to home" }, + "app.skin-site.map.empty": { "message": "No maps available." }, + "app.skin-site.map.external": { "message": "External" }, + "app.skin-site.map.failed": { "message": "Could not load maps." }, + "app.skin-site.map.internal": { "message": "Internal" }, + "app.skin-site.map.loading": { "message": "Loading maps…" }, + "app.skin-site.map.map": { "message": "Map" }, + "app.skin-site.map.open": { "message": "Open in browser" }, + "app.skin-site.map.server": { "message": "Server" }, + "app.skin-site.map.title": { "message": "Server map" }, + "app.skin-site.profile-view.back": { "message": "Back to home" }, + "app.skin-site.profile-view.cape": { "message": "Cape" }, + "app.skin-site.profile-view.elytra": { "message": "Elytra" }, + "app.skin-site.profile-view.loading": { "message": "Loading players…" }, + "app.skin-site.profile-view.no-players": { "message": "No players yet." }, + "app.skin-site.profile-view.readonly": { + "message": "Mojang accounts are managed by Mojang; textures cannot be edited here." + }, + "app.skin-site.profile-view.remove": { "message": "Remove" }, + "app.skin-site.profile-view.removed": { "message": "Texture removed." }, + "app.skin-site.profile-view.select-hint": { + "message": "Select a player to preview and edit its textures." + }, + "app.skin-site.profile-view.signed-out": { + "message": "Sign in to manage your players." + }, + "app.skin-site.profile-view.skin": { "message": "Skin" }, + "app.skin-site.profile-view.title": { "message": "Your players" }, + "app.skin-site.profile-view.upload": { "message": "Upload" }, + "app.skin-site.profile-view.uploaded": { "message": "Texture updated." }, + "app.skin-site.profile.avatar": { "message": "Avatar" }, + "app.skin-site.profile.avatar-hint": { + "message": "Square images work best; the centre is cropped to 256×256." + }, + "app.skin-site.profile.avatar-uploaded": { "message": "Avatar updated." }, + "app.skin-site.profile.basic": { "message": "Profile" }, + "app.skin-site.profile.choose-avatar": { "message": "Choose image" }, + "app.skin-site.profile.minecraft-password": { + "message": "Minecraft password" + }, + "app.skin-site.profile.minecraft-password-changed": { + "message": "Minecraft password updated." + }, + "app.skin-site.profile.minecraft-password-hint": { + "message": "Used by the launcher; defaults to the website password." + }, + "app.skin-site.profile.mismatch": { "message": "Passwords do not match." }, + "app.skin-site.profile.new-password": { "message": "New password" }, + "app.skin-site.profile.old-password": { "message": "Current password" }, + "app.skin-site.profile.password-changed": { "message": "Password updated." }, + "app.skin-site.profile.password-hint": { + "message": "6–50 characters with upper case, lower case and a digit." + }, + "app.skin-site.profile.repeat-password": { "message": "Repeat new password" }, + "app.skin-site.profile.reset-default": { + "message": "Reset to website password" + }, + "app.skin-site.profile.save": { "message": "Save" }, + "app.skin-site.profile.saved": { "message": "Saved." }, + "app.skin-site.profile.security": { "message": "Security" }, + "app.skin-site.profile.site-password-hint": { + "message": "This is the password used to sign in to the skin site." + }, + "app.skin-site.profile.submit-password": { "message": "Update password" }, + "app.skin-site.profile.title": { "message": "Account settings" }, + "app.skin-site.profile.username": { "message": "Username" }, + "app.skin-site.profile.username-hint": { "message": "3–16 characters." }, + "app.skin-site.register.closed": { + "message": "Registration is currently closed on this server." + }, + "app.skin-site.register.code": { "message": "Verification code" }, + "app.skin-site.register.email": { "message": "Email" }, + "app.skin-site.register.invite-code": { "message": "Invite code" }, + "app.skin-site.register.invite-required": { + "message": "This server requires an invite code." + }, + "app.skin-site.register.mismatch": { "message": "Passwords do not match." }, + "app.skin-site.register.password": { "message": "Password" }, + "app.skin-site.register.password-hint": { + "message": "6–50 characters with upper case, lower case and a digit." + }, + "app.skin-site.register.qq": { "message": "QQ (optional)" }, + "app.skin-site.register.repeat-password": { "message": "Repeat password" }, + "app.skin-site.register.resend-in": { "message": "Sent ({seconds}s)" }, + "app.skin-site.register.send-code": { "message": "Send code" }, + "app.skin-site.register.sending": { "message": "Sending…" }, + "app.skin-site.register.submit": { "message": "Create account" }, + "app.skin-site.register.success": { + "message": "Account created and signed in." + }, + "app.skin-site.register.title": { "message": "Create a StarLight account" }, + "app.skin-site.reset.code": { "message": "Verification code" }, + "app.skin-site.reset.email": { "message": "Email" }, + "app.skin-site.reset.email-hint": { + "message": "Use the address you registered with." + }, + "app.skin-site.reset.mismatch": { "message": "Passwords do not match." }, + "app.skin-site.reset.new-password": { "message": "New password" }, + "app.skin-site.reset.password-hint": { + "message": "6–50 characters with upper case, lower case and a digit." + }, + "app.skin-site.reset.repeat-password": { "message": "Repeat password" }, + "app.skin-site.reset.resend-in": { "message": "Sent ({seconds}s)" }, + "app.skin-site.reset.send-code": { "message": "Send code" }, + "app.skin-site.reset.sending": { "message": "Sending…" }, + "app.skin-site.reset.submit": { "message": "Reset password" }, + "app.skin-site.reset.success": { + "message": "Password updated. You can sign in now." + }, + "app.skin-site.reset.title": { "message": "Reset password" }, + "app.skin-site.review.back": { "message": "Back to home" }, + "app.skin-site.review.back-to-list": { "message": "Back to forms" }, + "app.skin-site.review.email": { "message": "Your email" }, + "app.skin-site.review.email-hint": { + "message": "Results are sent to this address." + }, + "app.skin-site.review.empty": { + "message": "No application forms are available right now." + }, + "app.skin-site.review.failed": { + "message": "Could not load the review forms." + }, + "app.skin-site.review.invite-code": { "message": "Invite code" }, + "app.skin-site.review.loading": { "message": "Loading…" }, + "app.skin-site.review.optional": { "message": "Optional" }, + "app.skin-site.review.required": { "message": "Required" }, + "app.skin-site.review.result.passed": { "message": "Approved" }, + "app.skin-site.review.result.pending": { "message": "Under review" }, + "app.skin-site.review.result.rejected": { "message": "Rejected" }, + "app.skin-site.review.submit": { "message": "Submit application" }, + "app.skin-site.review.submitted": { "message": "Application submitted." }, + "app.skin-site.review.submitting": { "message": "Submitting…" }, + "app.skin-site.review.subtitle": { + "message": "Pick an application form and answer its questions." + }, + "app.skin-site.review.title": { "message": "Player review" }, + "app.skin-site.home.announcements.signed-out": { + "message": "Sign in to view announcements." + }, + "app.skin-site.chat.user-picker.email": { "message": "Email" }, + "app.skin-site.chat.user-picker.registered": { "message": "Registered" }, + "app.skin-site.chat.user-picker.banned-status": { "message": "Banned" }, + "app.skin-site.chat.user-picker.active-status": { "message": "Active" }, + "app.skin-site.admin.wiki.policy-public": { "message": "Everyone" }, + "app.skin-site.admin.wiki.policy-member": { "message": "Members" }, + "app.skin-site.admin.wiki.policy-admin": { + "message": "Website administrators" + }, "app.account.signed-in-as": { "message": "Signed in as" }, @@ -11555,884 +11754,1314 @@ "app.settings.logs.export.notification-text": { "message": "The log archive was saved to {path}" }, - "app.skins.armor.title": {"message": "Armour and trims"}, - "app.skins.armor.save": {"message": "Save"}, - "app.skins.armor.close": {"message": "Close"}, - "app.skins.armor.description": {"message": "Try armour and trims on your skin. Nothing is stored until you save it."}, - "app.skins.armor.unsaved": {"message": "Unsaved changes"}, - "app.skins.armor.reset-to-saved": {"message": "Reset to saved"}, - "app.skins.armor.restore-defaults": {"message": "Restore defaults"}, - "app.instances.batch-edit-groups.add": {"message": "Add"}, - "app.instances.batch-edit-groups.add-to-group-title": {"message": "Add instances to \"{groupName}\""}, - "app.instances.batch-edit-groups.added": {"message": "Added"}, - "app.instances.batch-edit-groups.cancel": {"message": "Cancel"}, - "app.instances.batch-edit-groups.create": {"message": "Create group"}, - "app.instances.batch-edit-groups.group-name": {"message": "Group name"}, - "app.instances.batch-edit-groups.group-name-placeholder": {"message": "Enter group name"}, - "app.instances.batch-edit-groups.no-instances-found": {"message": "No instances found"}, - "app.instances.batch-edit-groups.save-changes": {"message": "Save"}, - "app.instances.batch-edit-groups.search-instance": {"message": "Search instances"}, - "app.instances.group.add-to-group": {"message": "Add to group"}, - "app.instances.group.collapse": {"message": "Collapse group"}, - "app.instances.group.delete-description": {"message": "Instances in this group will be ungrouped."}, - "app.instances.group.delete-group": {"message": "Delete group"}, - "app.instances.group.edit-name": {"message": "Edit group name"}, - "app.instances.group.empty": {"message": "Drag and drop to add instances."}, - "app.instances.group.expand": {"message": "Expand group"}, - "app.instances.group.move-down": {"message": "Move group down"}, - "app.instances.group.move-up": {"message": "Move group up"}, - "app.instances.group.name-empty": {"message": "Group names cannot be empty."}, - "app.instances.group.name-too-long": {"message": "Group names cannot be longer than {maxLength} characters."}, - "app.instances.group.new-instance": {"message": "New instance"}, - "app.instances.group.pinned": {"message": "Pinned"}, - "app.instances.group.rename-group": {"message": "Rename group"}, - "app.instances.sort-by": {"message": "Sort by"}, - "app.instances.sort.direction.asc-alphabetical": {"message": "A–Z"}, - "app.instances.sort.direction.asc-date": {"message": "Oldest first"}, - "app.instances.sort.direction.asc-recency": {"message": "Least recent first"}, - "app.instances.sort.direction.asc-version": {"message": "Oldest version first"}, - "app.instances.sort.direction.desc-alphabetical": {"message": "Z–A"}, - "app.instances.sort.direction.desc-date": {"message": "Newest first"}, - "app.instances.sort.direction.desc-recency": {"message": "Most recent first"}, - "app.instances.sort.direction.desc-version": {"message": "Newest version first"}, - "app.library.context-menu.pin-instance": {"message": "Pin instance"}, - "app.library.context-menu.remove-from-group": {"message": "Remove from group"}, - "app.library.context-menu.unpin-instance": {"message": "Unpin instance"}, - "app.library.group.new": {"message": "New group"}, - "app.library.selection.new-group": {"message": "New group"}, - "app.library.selection.remove-from-group": {"message": "Remove from group"}, - "app.log-share.settings.title": {"message": "Log sharing & AI analysis"}, - "app.log-share.settings.description": {"message": "Share crash diagnostics with LogShare for a structured summary and optional AI analysis. LogShare is preferred; mclo.gs is used as a fallback."}, - "app.log-share.settings.share-provider": {"message": "Log sharing service"}, - "app.log-share.settings.share-provider-description": {"message": "Where the diagnostic link is uploaded when you share it."}, - "app.log-share.settings.ai-source": {"message": "AI analysis source"}, - "app.log-share.settings.ai-source-logshare": {"message": "LogShare AI"}, - "app.log-share.settings.ai-source-custom": {"message": "Custom AI provider"}, - "app.log-share.settings.ai-source-description": {"message": "Both sources send a sanitized and shortened crash context. AI output may be inaccurate."}, - "app.log-share.settings.auto-upload": {"message": "Upload to get a structured summary automatically"}, - "app.log-share.settings.auto-upload-description": {"message": "Only effective in LogShare AI mode."}, - "app.log-share.settings.multi-file": {"message": "Multi-file upload"}, - "app.log-share.settings.multi-file-description": {"message": "Upload latest.log, crash reports, hs_err and launcher logs together."}, - "app.log-share.settings.no-storage": {"message": "Analyze without storing logs"}, - "app.log-share.settings.no-storage-description": {"message": "Submit content directly for analysis and skip the stored upload. Disables the automatic summary."}, - "app.log-share.settings.show-progress": {"message": "Show AI analysis progress"}, - "app.log-share.settings.show-progress-description": {"message": "Display thinking, tool and limit status while LogShare AI is working."}, - "app.log-share.shared-logs.title": {"message": "Shared logs"}, - "app.log-share.shared-logs.description": {"message": "Every diagnostic you have shared is listed here. Delete an entry to remove it from your history and request its removal from the sharing service."}, - "app.log-share.shared-logs.empty": {"message": "No shared logs yet."}, - "app.log-share.shared-logs.delete": {"message": "Delete"}, - "app.log-share.shared-logs.deleting": {"message": "Deleting…"}, - "app.log-share.shared-logs.deleted": {"message": "Shared log removed."}, - "app.log-share.shared-logs.delete-failed": {"message": "Failed to delete the shared log."}, - "app.log-share.shared-logs.truncated": {"message": "Truncated"}, - "app.minecraft-crash.share-fallback": {"message": "LogShare is unavailable, so the diagnostic was shared via mclo.gs."}, - "app.log-share.ai.action": {"message": "Deep AI analysis"}, - "app.log-share.summary.title": {"message": "LogShare analysis"}, - "app.log-share.summary.loading": {"message": "Loading structured summary..."}, - "app.log-share.summary.empty": {"message": "LogShare did not return a structured summary for these logs."}, - "app.log-share.summary.no-storage": {"message": "Structured summary is unavailable while no-storage mode is enabled."}, - "app.log-share.summary.failed": {"message": "Could not load the LogShare summary: {message}"}, - "app.log-share.summary.problems": {"message": "Problems"}, - "app.log-share.summary.information": {"message": "Information"}, - "app.minecraft-crash.logs.loading": {"message": "Loading crash logs..."}, - "app.minecraft-crash.logs.empty": {"message": "No logs from this launch were found."}, - "app.minecraft-crash.logs.failed": {"message": "Could not load the crash logs: {message}"}, - "app.minecraft-crash.log-file.loading": {"message": "Loading log file..."}, - "app.minecraft-crash.log-file.failed": {"message": "Could not load this log file: {message}"}, - "app.log-share.ai.tab": {"message": "LogAgent detailed analysis"}, - "app.log-share.ai.root-cause": {"message": "Core root cause"}, - "app.log-share.ai.confidence": {"message": "Diagnostic confidence"}, - "app.log-share.ai.steps": {"message": "Recommended troubleshooting steps"}, - "app.log-share.ai.evidence": {"message": "Supporting evidence"}, - "app.log-share.ai.thinking": {"message": "Thinking…"}, - "app.log-share.ai.queued": {"message": "Queued, about {position} ahead"}, - "app.log-share.ai.queued-front": {"message": "Queued, waiting for a free slot"}, - "app.log-share.ai.tool": {"message": "Using tool: {name}"}, - "app.log-share.ai.unknown-tool": {"message": "tool"}, - "app.log-share.ai.tool-result": {"message": "Tool result received"}, - "app.log-share.ai.limit": {"message": "Reached tool loop limit"}, - "app.log-share.ai.working": {"message": "Analyzing with LogAgent…"}, - "app.log-share.ai.failed": {"message": "LogAgent analysis failed: {message}"}, - "app.shortcut-settings.change-shortcut": {"message": "Change the shortcut for {action}"}, - "app.shortcut-settings.enable": {"message": "Enable quick scrolling"}, - "app.shortcut-settings.end-action": {"message": "Scroll to the bottom"}, - "app.shortcut-settings.end-action-description": {"message": "Moves the page you are reading to the bottom."}, - "app.shortcut-settings.home-action": {"message": "Scroll to the top"}, - "app.shortcut-settings.home-action-description": {"message": "Moves the page you are reading to the top."}, - "app.shortcut-settings.nav-create": {"message": "Create new instance"}, - "app.shortcut-settings.nav-create-description": {"message": "Jump to creating a new instance."}, - "app.shortcut-settings.nav-description": {"message": "Jump to a menu item with its shortcut. Each shortcut is off until enabled."}, - "app.shortcut-settings.nav-discover": {"message": "Discover content"}, - "app.shortcut-settings.nav-discover-description": {"message": "Jump to browsing content."}, - "app.shortcut-settings.nav-downloads": {"message": "Downloads"}, - "app.shortcut-settings.nav-downloads-description": {"message": "Jump to downloads."}, - "app.shortcut-settings.nav-home": {"message": "Home"}, - "app.shortcut-settings.nav-home-description": {"message": "Jump to the Home page."}, - "app.shortcut-settings.nav-lab": {"message": "Lab"}, - "app.shortcut-settings.nav-lab-description": {"message": "Jump to the Lab."}, - "app.shortcut-settings.nav-library": {"message": "Library"}, - "app.shortcut-settings.nav-library-description": {"message": "Jump to your library."}, - "app.shortcut-settings.nav-multiplayer": {"message": "Multiplayer"}, - "app.shortcut-settings.nav-multiplayer-description": {"message": "Jump to multiplayer."}, - "app.shortcut-settings.nav-settings": {"message": "Settings"}, - "app.shortcut-settings.nav-settings-description": {"message": "Jump to the settings."}, - "app.shortcut-settings.nav-skins": {"message": "Skin selector"}, - "app.shortcut-settings.nav-skins-description": {"message": "Jump to the skin selector."}, - "app.shortcut-settings.nav-title": {"message": "Navigation shortcuts"}, - "app.shortcut-settings.nav-worlds": {"message": "Worlds"}, - "app.shortcut-settings.nav-worlds-description": {"message": "Jump to your worlds."}, - "app.shortcut-settings.page-down-action": {"message": "Scroll down one screen"}, - "app.shortcut-settings.page-down-action-description": {"message": "Moves the page you are reading down by one screen."}, - "app.shortcut-settings.page-up-action": {"message": "Scroll up one screen"}, - "app.shortcut-settings.page-up-action-description": {"message": "Moves the page you are reading up by one screen."}, - "app.shortcut-settings.scroll-description": {"message": "Move through long pages with the keyboard."}, - "app.shortcut-settings.scroll-title": {"message": "Quick scrolling"}, - "app.settings.tabs.shortcut-settings": {"message": "Keyboard shortcuts"}, - "app.skin-site.bugs.title": {"message": "Bugs & suggestions"}, - "app.skin-site.bugs.back": {"message": "Back to home"}, - "app.skin-site.bugs.subtitle": {"message": "Report issues and follow their progress."}, - "app.skin-site.bugs.loading": {"message": "Loading…"}, - "app.skin-site.bugs.failed": {"message": "Could not load issues."}, - "app.skin-site.bugs.empty": {"message": "No issues match these filters."}, - "app.skin-site.bugs.all": {"message": "All"}, - "app.skin-site.bugs.more": {"message": "Load more"}, - "app.skin-site.bugs.open-only": {"message": "Open only"}, - "app.skin-site.bugs.comments": {"message": "{count} comments"}, - "app.skin-site.bugs.type.bug": {"message": "Bug"}, - "app.skin-site.bugs.type.feature": {"message": "Feature"}, - "app.skin-site.bugs.type.improvement": {"message": "Improvement"}, - "app.skin-site.bugs.status.pending": {"message": "Pending"}, - "app.skin-site.bugs.status.confirmed": {"message": "Confirmed"}, - "app.skin-site.bugs.status.needs-info": {"message": "Needs info"}, - "app.skin-site.bugs.status.in-progress": {"message": "In progress"}, - "app.skin-site.bugs.status.verifying": {"message": "Verifying"}, - "app.skin-site.bugs.status.closed": {"message": "Closed"}, - "app.skin-site.bugs.priority.critical": {"message": "Critical"}, - "app.skin-site.bugs.priority.high": {"message": "High"}, - "app.skin-site.bugs.priority.normal": {"message": "Normal"}, - "app.skin-site.bugs.priority.low": {"message": "Low"}, - "app.skin-site.bugs.resolution.fixed": {"message": "Fixed"}, - "app.skin-site.bugs.resolution.wont-fix": {"message": "Won’t fix"}, - "app.skin-site.bugs.resolution.by-design": {"message": "By design"}, - "app.skin-site.bugs.resolution.duplicate": {"message": "Duplicate"}, - "app.skin-site.bugs.resolution.cannot-reproduce": {"message": "Cannot reproduce"}, - "app.skin-site.bugs.resolution.invalid": {"message": "Invalid"}, - "app.skin-site.bug-detail.back": {"message": "Back to list"}, - "app.skin-site.bug-detail.loading": {"message": "Loading…"}, - "app.skin-site.bug-detail.failed": {"message": "Could not load this issue."}, - "app.skin-site.bug-detail.issue-no": {"message": "Issue #{id}"}, - "app.skin-site.bug-detail.by": {"message": "by {name}"}, - "app.skin-site.bug-detail.assignee": {"message": "Assignee: {name}"}, - "app.skin-site.bug-detail.unassigned": {"message": "Unassigned"}, - "app.skin-site.bug-detail.description-empty": {"message": "No description provided."}, - "app.skin-site.bug-detail.resolution": {"message": "Resolution: {name}"}, - "app.skin-site.bug-detail.comments-title": {"message": "Comments"}, - "app.skin-site.bug-detail.comments-empty": {"message": "No comments yet. Be the first to reply."}, - "app.skin-site.bug-detail.comments-loading": {"message": "Loading comments…"}, - "app.skin-site.bug-detail.comment-placeholder": {"message": "Write a comment…"}, - "app.skin-site.bug-detail.comment-submit": {"message": "Comment"}, - "app.skin-site.bug-detail.comment-sending": {"message": "Sending…"}, - "app.skin-site.bug-detail.comment-empty-error": {"message": "Comment cannot be empty."}, - "app.skin-site.bug-detail.comment-posted": {"message": "Comment posted."}, - "app.skin-site.bug-detail.comment-deleted": {"message": "Comment deleted."}, - "app.skin-site.bug-detail.delete": {"message": "Delete"}, - "app.skin-site.bug-detail.deleting": {"message": "Deleting…"}, - "app.skin-site.bug-detail.system": {"message": "System"}, - "app.skin-site.bug-create.title": {"message": "New issue"}, - "app.skin-site.bug-create.type": {"message": "Type"}, - "app.skin-site.bug-create.title-field": {"message": "Title"}, - "app.skin-site.bug-create.title-placeholder": {"message": "A short summary of the problem"}, - "app.skin-site.bug-create.description": {"message": "Description"}, - "app.skin-site.bug-create.description-placeholder": {"message": "What happened, and how can it be reproduced?"}, - "app.skin-site.bug-create.private": {"message": "Private issue"}, - "app.skin-site.bug-create.private-hint": {"message": "Only you and the maintainers can see it."}, - "app.skin-site.bug-create.images": {"message": "Images"}, - "app.skin-site.bug-create.images-hint": {"message": "Optional, up to 5 images."}, - "app.skin-site.bug-create.submit": {"message": "Create issue"}, - "app.skin-site.bug-create.submitting": {"message": "Creating…"}, - "app.skin-site.bug-create.created": {"message": "Issue created."}, - "app.skin-site.bug-create.cancel": {"message": "Cancel"}, - "app.skin-site.bug-notifications.title": {"message": "Notifications"}, - "app.skin-site.bug-notifications.back": {"message": "Back to home"}, - "app.skin-site.bug-notifications.subtitle": {"message": "Activity on issues you reported or follow."}, - "app.skin-site.bug-notifications.loading": {"message": "Loading…"}, - "app.skin-site.bug-notifications.failed": {"message": "Could not load notifications."}, - "app.skin-site.bug-notifications.empty": {"message": "No new notifications."}, - "app.skin-site.bug-notifications.item": {"message": "{name} updated issue #{id}"}, - "app.skin-site.bug-notifications.mark-all": {"message": "Mark all as read"}, - "app.skin-site.bug-notifications.marked-all": {"message": "All notifications marked as read."}, - "app.skin-site.bugs.create": {"message": "New issue"}, - "app.skin-site.bugs.notifications": {"message": "Notifications"}, - "app.skin-site.home.title": {"message": "StarLight Skin Site"}, - "app.skin-site.home.subtitle": {"message": "The wardrobe for StarLight Server players."}, - "app.skin-site.home.address": {"message": "Skin site address"}, - "app.skin-site.home.copied": {"message": "Address copied."}, - "app.skin-site.home.copy": {"message": "Copy"}, - "app.skin-site.admin.title": {"message": "Admin console"}, - "app.skin-site.admin.back": {"message": "Back to home"}, - "app.skin-site.admin.no-access": {"message": "You do not have access."}, - "app.skin-site.admin.no-access-hint": {"message": "Sign in with an administrator account to use this console."}, - "app.skin-site.admin.group.security": {"message": "Security"}, - "app.skin-site.admin.group.users": {"message": "Users"}, - "app.skin-site.admin.group.community": {"message": "Community"}, - "app.skin-site.admin.group.resources": {"message": "Resources"}, - "app.skin-site.admin.item.servers": {"message": "Servers"}, - "app.skin-site.admin.item.summary": {"message": "Summary"}, - "app.skin-site.admin.item.access-audit": {"message": "Access audit"}, - "app.skin-site.admin.item.users": {"message": "Users"}, - "app.skin-site.admin.item.players": {"message": "Players"}, - "app.skin-site.admin.item.review": {"message": "Player review"}, - "app.skin-site.admin.item.broadcast": {"message": "Broadcast"}, - "app.skin-site.admin.item.chat": {"message": "Chat rooms"}, - "app.skin-site.admin.item.wiki": {"message": "Wiki"}, - "app.skin-site.admin.item.donations": {"message": "Donations"}, - "app.skin-site.admin.item.mods": {"message": "Mods"}, - "app.skin-site.admin.item.launcher": {"message": "Launcher"}, - "app.skin-site.admin.item.downloads": {"message": "Downloads"}, - "app.skin-site.home.admin": {"message": "Admin"}, - "app.skin-site.home.settings": {"message": "Account"}, - "app.skin-site.home.sign-in": {"message": "Sign in"}, - "app.skin-site.home.players": {"message": "Players"}, - "app.skin-site.home.my-players": {"message": "My players"}, - "app.skin-site.home.no-players": {"message": "No players linked yet."}, - "app.skin-site.home.loading": {"message": "Loading…"}, - "app.skin-site.home.error": {"message": "Could not load."}, - "app.skin-site.home.luck": {"message": "Luck"}, - "app.skin-site.home.luck-unavailable": {"message": "Unavailable"}, - "app.skin-site.home.signed-out-title": {"message": "Not signed in"}, - "app.skin-site.home.signed-out-body": {"message": "Sign in to manage your account and textures."}, - "app.skin-site.admin.summary.title": {"message": "System overview"}, - "app.skin-site.admin.summary.loading": {"message": "Loading…"}, - "app.skin-site.admin.summary.failed": {"message": "Could not load status."}, - "app.skin-site.admin.summary.uptime": {"message": "Uptime"}, - "app.skin-site.admin.summary.memory": {"message": "Memory usage"}, - "app.skin-site.admin.summary.users": {"message": "Users"}, - "app.skin-site.admin.summary.players": {"message": "Players"}, - "app.skin-site.admin.summary.realtime-hint": {"message": "Live CPU and GC charts require the admin WebSocket, which is not connected yet."}, - "app.skin-site.admin.broadcast.title": {"message": "Announcements"}, - "app.skin-site.admin.broadcast.loading": {"message": "Loading…"}, - "app.skin-site.admin.broadcast.failed": {"message": "Could not load."}, - "app.skin-site.admin.broadcast.empty": {"message": "No announcements yet."}, - "app.skin-site.admin.broadcast.create": {"message": "New announcement"}, - "app.skin-site.admin.broadcast.save": {"message": "Save"}, - "app.skin-site.admin.broadcast.cancel": {"message": "Cancel"}, - "app.skin-site.admin.broadcast.edit": {"message": "Edit"}, - "app.skin-site.admin.broadcast.remove": {"message": "Delete"}, - "app.skin-site.admin.broadcast.title-field": {"message": "Title"}, - "app.skin-site.admin.broadcast.subtitle-field": {"message": "Subtitle"}, - "app.skin-site.admin.broadcast.content-field": {"message": "Content"}, - "app.skin-site.admin.broadcast.expire-at": {"message": "Expires at"}, - "app.skin-site.admin.broadcast.star": {"message": "Highlight"}, - "app.skin-site.admin.broadcast.level": {"message": "Importance"}, - "app.skin-site.admin.broadcast.image": {"message": "Image"}, - "app.skin-site.admin.broadcast.remove-image": {"message": "Remove image"}, - "app.skin-site.admin.broadcast.created": {"message": "Announcement created."}, - "app.skin-site.admin.broadcast.updated": {"message": "Announcement updated."}, - "app.skin-site.admin.broadcast.deleted": {"message": "Announcement deleted."}, - "app.skin-site.admin.broadcast.confirm-delete": {"message": "Delete “{title}”? This cannot be undone."}, - "app.skin-site.admin.broadcast.uploader": {"message": "by {name}"}, - "app.skin-site.admin.players.title": {"message": "Players"}, - "app.skin-site.admin.players.loading": {"message": "Loading…"}, - "app.skin-site.admin.players.failed": {"message": "Could not load players."}, - "app.skin-site.admin.players.empty": {"message": "No players found."}, - "app.skin-site.admin.players.search": {"message": "Search"}, - "app.skin-site.admin.players.search-name": {"message": "Name"}, - "app.skin-site.admin.players.search-owner": {"message": "Owner"}, - "app.skin-site.admin.players.search-uuid": {"message": "UUID"}, - "app.skin-site.admin.players.total": {"message": "{count} players"}, - "app.skin-site.admin.players.prev": {"message": "Previous"}, - "app.skin-site.admin.players.next": {"message": "Next"}, - "app.skin-site.admin.players.page": {"message": "Page {page}"}, - "app.skin-site.admin.players.name": {"message": "Name"}, - "app.skin-site.admin.players.owner": {"message": "Owner"}, - "app.skin-site.admin.players.source": {"message": "Source"}, - "app.skin-site.admin.players.legacy": {"message": "Legacy adapted"}, - "app.skin-site.admin.players.actions": {"message": "Actions"}, - "app.skin-site.admin.players.edit": {"message": "Edit"}, - "app.skin-site.admin.players.save": {"message": "Save"}, - "app.skin-site.admin.players.cancel": {"message": "Cancel"}, - "app.skin-site.admin.players.remove": {"message": "Delete"}, - "app.skin-site.admin.players.updated": {"message": "Player updated."}, - "app.skin-site.admin.players.deleted": {"message": "Player deleted."}, - "app.skin-site.admin.players.confirm-delete": {"message": "Delete player “{name}”? This cannot be undone."}, - "app.skin-site.admin.players.mojang": {"message": "Mojang"}, - "app.skin-site.admin.players.custom": {"message": "Skin site"}, - "app.skin-site.admin.users.title": {"message": "Users"}, - "app.skin-site.admin.users.loading": {"message": "Loading…"}, - "app.skin-site.admin.users.failed": {"message": "Could not load users."}, - "app.skin-site.admin.users.empty": {"message": "No users found."}, - "app.skin-site.admin.users.search": {"message": "Search"}, - "app.skin-site.admin.users.search-name": {"message": "Username"}, - "app.skin-site.admin.users.search-email": {"message": "Email"}, - "app.skin-site.admin.users.search-uuid": {"message": "UUID"}, - "app.skin-site.admin.users.total": {"message": "{count} users"}, - "app.skin-site.admin.users.prev": {"message": "Previous"}, - "app.skin-site.admin.users.next": {"message": "Next"}, - "app.skin-site.admin.users.page": {"message": "Page {page}"}, - "app.skin-site.admin.users.edit": {"message": "Edit"}, - "app.skin-site.admin.users.save": {"message": "Save"}, - "app.skin-site.admin.users.cancel": {"message": "Cancel"}, - "app.skin-site.admin.users.remove": {"message": "Delete"}, - "app.skin-site.admin.users.players": {"message": "Players"}, - "app.skin-site.admin.users.updated": {"message": "User updated."}, - "app.skin-site.admin.users.deleted": {"message": "User deleted."}, - "app.skin-site.admin.users.confirm-delete": {"message": "Delete user “{name}”? This cannot be undone."}, - "app.skin-site.admin.users.username": {"message": "Username"}, - "app.skin-site.admin.users.email": {"message": "Email"}, - "app.skin-site.admin.users.qq": {"message": "QQ"}, - "app.skin-site.admin.users.password": {"message": "New password"}, - "app.skin-site.admin.users.password-hint": {"message": "Leave empty to keep the current password."}, - "app.skin-site.admin.users.banned": {"message": "Banned"}, - "app.skin-site.admin.users.permissions": {"message": "Permissions"}, - "app.skin-site.admin.users.permissions-hint": {"message": "Comma separated, e.g. WEB_ADMIN, SERVER_ADMIN."}, - "app.skin-site.admin.users.no-players": {"message": "No linked players."}, - "app.skin-site.admin.users.registered": {"message": "Registered"}, - "app.skin-site.admin.review.title": {"message": "Player review"}, - "app.skin-site.admin.review.loading": {"message": "Loading…"}, - "app.skin-site.admin.review.failed": {"message": "Could not load submissions."}, - "app.skin-site.admin.review.empty": {"message": "No submissions found."}, - "app.skin-site.admin.review.total": {"message": "{count} submissions"}, - "app.skin-site.admin.review.filter-all": {"message": "All"}, - "app.skin-site.admin.review.filter-pending": {"message": "Pending"}, - "app.skin-site.admin.review.filter-passed": {"message": "Passed"}, - "app.skin-site.admin.review.filter-rejected": {"message": "Rejected"}, - "app.skin-site.admin.review.result-pending": {"message": "Pending"}, - "app.skin-site.admin.review.result-passed": {"message": "Passed"}, - "app.skin-site.admin.review.result-rejected": {"message": "Rejected"}, - "app.skin-site.admin.review.mode-auto": {"message": "Auto"}, - "app.skin-site.admin.review.mode-manual": {"message": "Manual"}, - "app.skin-site.admin.review.applicant": {"message": "Applicant"}, - "app.skin-site.admin.review.submitted-at": {"message": "Submitted"}, - "app.skin-site.admin.review.score": {"message": "Score"}, - "app.skin-site.admin.review.reviewer": {"message": "Reviewer"}, - "app.skin-site.admin.review.details": {"message": "Details"}, - "app.skin-site.admin.review.hide": {"message": "Hide"}, - "app.skin-site.admin.review.answers": {"message": "Answers"}, - "app.skin-site.admin.review.no-answers": {"message": "No answers."}, - "app.skin-site.admin.review.auto-checks": {"message": "Automatic checks"}, - "app.skin-site.admin.review.context": {"message": "Submission context"}, - "app.skin-site.admin.review.ip": {"message": "IP"}, - "app.skin-site.admin.review.user-agent": {"message": "User agent"}, - "app.skin-site.admin.review.activity": {"message": "Activity"}, - "app.skin-site.admin.review.duration": {"message": "Duration"}, - "app.skin-site.admin.review.hidden-time": {"message": "Hidden time"}, - "app.skin-site.admin.review.screen-switches": {"message": "Screen switches"}, - "app.skin-site.admin.review.history": {"message": "Decision history"}, - "app.skin-site.admin.review.accept": {"message": "Accept"}, - "app.skin-site.admin.review.reject": {"message": "Reject"}, - "app.skin-site.admin.review.reason": {"message": "Reason"}, - "app.skin-site.admin.review.accept-done": {"message": "Submission accepted."}, - "app.skin-site.admin.review.reject-done": {"message": "Submission rejected."}, - "app.skin-site.admin.review.regen-invite": {"message": "Regenerate invite"}, - "app.skin-site.admin.review.invite-regenerated": {"message": "Invite code regenerated."}, - "app.skin-site.admin.review.invite-sent": {"message": "Email sent."}, - "app.skin-site.admin.review.invite-not-sent": {"message": "Email not sent."}, - "app.skin-site.admin.review.prev": {"message": "Previous"}, - "app.skin-site.admin.review.next": {"message": "Next"}, - "app.skin-site.admin.review.page": {"message": "Page {page}"}, - "app.skin-site.admin.launcher.title": {"message": "Launcher releases"}, - "app.skin-site.admin.launcher.loading": {"message": "Loading…"}, - "app.skin-site.admin.launcher.failed": {"message": "Could not load releases."}, - "app.skin-site.admin.launcher.empty": {"message": "No releases uploaded yet."}, - "app.skin-site.admin.launcher.latest-url": {"message": "Latest URL"}, - "app.skin-site.admin.launcher.version": {"message": "Version"}, - "app.skin-site.admin.launcher.channel": {"message": "Channel"}, - "app.skin-site.admin.launcher.uploader": {"message": "Uploaded by"}, - "app.skin-site.admin.launcher.uploaded-at": {"message": "Uploaded"}, - "app.skin-site.admin.launcher.published-at": {"message": "Published"}, - "app.skin-site.admin.launcher.force-update": {"message": "Forced"}, - "app.skin-site.admin.launcher.active": {"message": "Active"}, - "app.skin-site.admin.launcher.activate": {"message": "Activate"}, - "app.skin-site.admin.launcher.activated": {"message": "Release activated."}, - "app.skin-site.admin.launcher.upload": {"message": "Upload release"}, - "app.skin-site.admin.launcher.upload-hint": {"message": "Choose a release ZIP (max 4 GiB)."}, - "app.skin-site.admin.launcher.uploading": {"message": "Uploading…"}, - "app.skin-site.admin.launcher.upload-done": {"message": "Release uploaded."}, - "app.skin-site.admin.launcher.force-flag": {"message": "Force update"}, - "app.skin-site.admin.launcher.prev": {"message": "Previous"}, - "app.skin-site.admin.launcher.next": {"message": "Next"}, - "app.skin-site.admin.launcher.page": {"message": "Page {page}"}, - "app.skin-site.admin.launcher.total": {"message": "{count} releases"}, - "app.skin-site.admin.downloads.title": {"message": "Downloads"}, - "app.skin-site.admin.downloads.loading": {"message": "Loading…"}, - "app.skin-site.admin.downloads.failed": {"message": "Could not load downloads."}, - "app.skin-site.admin.downloads.empty": {"message": "No download items."}, - "app.skin-site.admin.downloads.categories": {"message": "Categories"}, - "app.skin-site.admin.downloads.all": {"message": "All items"}, - "app.skin-site.admin.downloads.add-category": {"message": "Add"}, - "app.skin-site.admin.downloads.category-name": {"message": "Category name"}, - "app.skin-site.admin.downloads.remove-category": {"message": "Remove"}, - "app.skin-site.admin.downloads.total": {"message": "{count} items"}, - "app.skin-site.admin.downloads.add-item": {"message": "New item"}, - "app.skin-site.admin.downloads.save": {"message": "Save"}, - "app.skin-site.admin.downloads.cancel": {"message": "Cancel"}, - "app.skin-site.admin.downloads.edit": {"message": "Edit"}, - "app.skin-site.admin.downloads.remove": {"message": "Delete"}, - "app.skin-site.admin.downloads.filename": {"message": "File name"}, - "app.skin-site.admin.downloads.description": {"message": "Description"}, - "app.skin-site.admin.downloads.routes": {"message": "Download routes"}, - "app.skin-site.admin.downloads.route-name": {"message": "Name"}, - "app.skin-site.admin.downloads.route-url": {"message": "URL"}, - "app.skin-site.admin.downloads.add-route": {"message": "Add route"}, - "app.skin-site.admin.downloads.remove-route": {"message": "Remove"}, - "app.skin-site.admin.downloads.statuses": {"message": "Statuses"}, - "app.skin-site.admin.downloads.bind-category": {"message": "Categories"}, - "app.skin-site.admin.downloads.uploader": {"message": "by {name}"}, - "app.skin-site.admin.downloads.created": {"message": "Item created."}, - "app.skin-site.admin.downloads.updated": {"message": "Item updated."}, - "app.skin-site.admin.downloads.deleted": {"message": "Item deleted."}, - "app.skin-site.admin.downloads.category-added": {"message": "Category added."}, - "app.skin-site.admin.downloads.category-deleted": {"message": "Category deleted."}, - "app.skin-site.admin.downloads.confirm-delete-item": {"message": "Delete “{name}”? This cannot be undone."}, - "app.skin-site.admin.downloads.confirm-delete-category": {"message": "Delete category “{name}”?"}, - "app.skin-site.admin.servers.title": {"message": "Map servers"}, - "app.skin-site.admin.servers.loading": {"message": "Loading…"}, - "app.skin-site.admin.servers.failed": {"message": "Could not load servers."}, - "app.skin-site.admin.servers.empty": {"message": "No map servers configured."}, - "app.skin-site.admin.servers.server-name": {"message": "Server name"}, - "app.skin-site.admin.servers.internal": {"message": "Internal"}, - "app.skin-site.admin.servers.maps": {"message": "Maps"}, - "app.skin-site.admin.servers.map-name": {"message": "Map name"}, - "app.skin-site.admin.servers.map-url": {"message": "Map URL"}, - "app.skin-site.admin.servers.add-map": {"message": "Add map"}, - "app.skin-site.admin.servers.remove-map": {"message": "Remove"}, - "app.skin-site.admin.servers.add-server": {"message": "Add server"}, - "app.skin-site.admin.servers.remove-server": {"message": "Remove server"}, - "app.skin-site.admin.servers.save": {"message": "Save changes"}, - "app.skin-site.admin.servers.saving": {"message": "Saving…"}, - "app.skin-site.admin.servers.saved": {"message": "Map servers saved."}, - "app.skin-site.admin.audit.title": {"message": "Access audit"}, - "app.skin-site.admin.audit.loading": {"message": "Loading…"}, - "app.skin-site.admin.audit.failed": {"message": "Could not load audit log."}, - "app.skin-site.admin.audit.empty": {"message": "No audit entries."}, - "app.skin-site.admin.audit.subject": {"message": "Subject"}, - "app.skin-site.admin.audit.action": {"message": "Action"}, - "app.skin-site.admin.audit.source-ip": {"message": "Source IP"}, - "app.skin-site.admin.audit.reported-ip": {"message": "Reported player IP"}, - "app.skin-site.admin.audit.count": {"message": "Count"}, - "app.skin-site.admin.audit.first-at": {"message": "First seen"}, - "app.skin-site.admin.audit.last-at": {"message": "Last seen"}, - "app.skin-site.admin.audit.proxy": {"message": "Proxy"}, - "app.skin-site.admin.audit.internal": {"message": "Internal"}, - "app.skin-site.admin.audit.search-subject": {"message": "Subject"}, - "app.skin-site.admin.audit.search-ip": {"message": "IP"}, - "app.skin-site.admin.audit.search-action": {"message": "Action"}, - "app.skin-site.admin.audit.search": {"message": "Search"}, - "app.skin-site.admin.audit.clear": {"message": "Clear"}, - "app.skin-site.admin.audit.load-more": {"message": "Load more"}, - "app.skin-site.admin.audit.retention": {"message": "Retention (days)"}, - "app.skin-site.admin.audit.record-limit": {"message": "Record limit"}, - "app.skin-site.admin.audit.save-retention": {"message": "Save"}, - "app.skin-site.admin.audit.retention-saved": {"message": "Retention updated."}, - "app.skin-site.admin.donations.title": {"message": "Donations"}, - "app.skin-site.admin.donations.loading": {"message": "Loading…"}, - "app.skin-site.admin.donations.failed": {"message": "Could not load donations."}, - "app.skin-site.admin.donations.empty": {"message": "No donations yet."}, - "app.skin-site.admin.donations.total-amount": {"message": "Total"}, - "app.skin-site.admin.donations.donor-count": {"message": "Donors"}, - "app.skin-site.admin.donations.donor": {"message": "Donor"}, - "app.skin-site.admin.donations.amount": {"message": "Amount"}, - "app.skin-site.admin.donations.updated-at": {"message": "Updated"}, - "app.skin-site.admin.donations.external": {"message": "External"}, - "app.skin-site.admin.donations.linked": {"message": "Linked"}, - "app.skin-site.admin.donations.create": {"message": "Add donation"}, - "app.skin-site.admin.donations.save": {"message": "Save"}, - "app.skin-site.admin.donations.cancel": {"message": "Cancel"}, - "app.skin-site.admin.donations.edit": {"message": "Edit"}, - "app.skin-site.admin.donations.remove": {"message": "Delete"}, - "app.skin-site.admin.donations.amount-field": {"message": "Amount"}, - "app.skin-site.admin.donations.display-name": {"message": "Display name"}, - "app.skin-site.admin.donations.user-uuid": {"message": "User UUID"}, - "app.skin-site.admin.donations.qq": {"message": "QQ"}, - "app.skin-site.admin.donations.append-mode": {"message": "Append to existing amount"}, - "app.skin-site.admin.donations.created": {"message": "Donation created."}, - "app.skin-site.admin.donations.updated": {"message": "Donation updated."}, - "app.skin-site.admin.donations.deleted": {"message": "Donation deleted."}, - "app.skin-site.admin.donations.confirm-delete": {"message": "Delete the donation from “{name}”? This cannot be undone."}, - "app.skin-site.admin.donations.load-more": {"message": "Load more"}, - "app.skin-site.admin.mods.title": {"message": "Mods"}, - "app.skin-site.admin.mods.tab-mods": {"message": "Mod files"}, - "app.skin-site.admin.mods.tab-tags": {"message": "Rule tags"}, - "app.skin-site.admin.mods.tab-runtime": {"message": "Runtime"}, - "app.skin-site.admin.mods.loading": {"message": "Loading…"}, - "app.skin-site.admin.mods.failed": {"message": "Could not load mods."}, - "app.skin-site.admin.mods.empty": {"message": "No mods found."}, - "app.skin-site.admin.mods.total": {"message": "{count} mods"}, - "app.skin-site.admin.mods.search": {"message": "Search by name"}, - "app.skin-site.admin.mods.filter-all": {"message": "All tags"}, - "app.skin-site.admin.mods.prev": {"message": "Previous"}, - "app.skin-site.admin.mods.next": {"message": "Next"}, - "app.skin-site.admin.mods.page": {"message": "Page {page}"}, - "app.skin-site.admin.mods.name": {"message": "Name"}, - "app.skin-site.admin.mods.version": {"message": "Version"}, - "app.skin-site.admin.mods.mod-id": {"message": "Mod ID"}, - "app.skin-site.admin.mods.size": {"message": "Size"}, - "app.skin-site.admin.mods.loaders": {"message": "Loaders"}, - "app.skin-site.admin.mods.domain-rules": {"message": "Domain rules"}, - "app.skin-site.admin.mods.edit": {"message": "Edit"}, - "app.skin-site.admin.mods.save": {"message": "Save"}, - "app.skin-site.admin.mods.cancel": {"message": "Cancel"}, - "app.skin-site.admin.mods.remove": {"message": "Delete"}, - "app.skin-site.admin.mods.updated": {"message": "Mod updated."}, - "app.skin-site.admin.mods.deleted": {"message": "Mod deleted."}, - "app.skin-site.admin.mods.confirm-delete": {"message": "Delete mod “{name}”? This cannot be undone."}, - "app.skin-site.admin.mods.rule-tags": {"message": "Rule tags"}, - "app.skin-site.admin.mods.tag-name": {"message": "Tag name"}, - "app.skin-site.admin.mods.tag-rules": {"message": "Rules"}, - "app.skin-site.admin.mods.tag-rules-hint": {"message": "One rule per line."}, - "app.skin-site.admin.mods.new-tag": {"message": "New tag"}, - "app.skin-site.admin.mods.tag-created": {"message": "Tag created."}, - "app.skin-site.admin.mods.tag-updated": {"message": "Tag updated."}, - "app.skin-site.admin.mods.tag-deleted": {"message": "Tag deleted."}, - "app.skin-site.admin.mods.confirm-delete-tag": {"message": "Delete tag “{name}”?"}, - "app.skin-site.admin.mods.runtime": {"message": "Runtime releases"}, - "app.skin-site.admin.mods.manifest-url": {"message": "Manifest URL"}, - "app.skin-site.admin.mods.upload-runtime": {"message": "Upload runtime"}, - "app.skin-site.admin.mods.runtime-version": {"message": "Version"}, - "app.skin-site.admin.mods.uploading": {"message": "Uploading…"}, - "app.skin-site.admin.mods.runtime-uploaded": {"message": "Runtime uploaded."}, - "app.skin-site.admin.mods.activate": {"message": "Activate"}, - "app.skin-site.admin.mods.activated": {"message": "Runtime activated."}, - "app.skin-site.admin.mods.available": {"message": "Available"}, - "app.skin-site.admin.mods.unavailable": {"message": "Unavailable"}, - "app.skin-site.admin.mods.active": {"message": "Active"}, - "app.skin-site.admin.mods.uploader": {"message": "by {name}"}, - "app.skin-site.home.nav.title": {"message": "Skin site"}, - "app.skin-site.home.nav.download": {"message": "Downloads"}, - "app.skin-site.home.nav.download-desc": {"message": "Browse files shared by the server."}, - "app.skin-site.home.nav.review": {"message": "Player review"}, - "app.skin-site.home.nav.review-desc": {"message": "Submit and review player applications."}, - "app.skin-site.home.nav.wiki": {"message": "Server wiki"}, - "app.skin-site.home.nav.wiki-desc": {"message": "Guides and documentation for the server."}, - "app.skin-site.home.nav.bugs": {"message": "Bug tracker"}, - "app.skin-site.home.nav.bugs-desc": {"message": "Report issues and follow their progress."}, - "app.skin-site.home.nav.map": {"message": "Server map"}, - "app.skin-site.home.nav.map-desc": {"message": "Explore the live world map."}, - "app.skin-site.home.nav.profile": {"message": "Profile"}, - "app.skin-site.home.nav.profile-desc": {"message": "Manage your account and textures."}, - "app.skin-site.admin.wiki.title": {"message": "Wiki"}, - "app.skin-site.admin.wiki.tab-page": {"message": "Page"}, - "app.skin-site.admin.wiki.tab-audit": {"message": "Audit log"}, - "app.skin-site.admin.wiki.tab-settings": {"message": "Settings"}, - "app.skin-site.admin.wiki.loading": {"message": "Loading…"}, - "app.skin-site.admin.wiki.page-path": {"message": "Page path"}, - "app.skin-site.admin.wiki.load-page": {"message": "Load page"}, - "app.skin-site.admin.wiki.page-not-found": {"message": "Page not found."}, - "app.skin-site.admin.wiki.revision": {"message": "Revision"}, - "app.skin-site.admin.wiki.author": {"message": "Author"}, - "app.skin-site.admin.wiki.updated-at": {"message": "Updated"}, - "app.skin-site.admin.wiki.categories": {"message": "Categories"}, - "app.skin-site.admin.wiki.read-policy": {"message": "Read policy"}, - "app.skin-site.admin.wiki.edit-policy": {"message": "Edit policy"}, - "app.skin-site.admin.wiki.save-protect": {"message": "Save policies"}, - "app.skin-site.admin.wiki.protect-saved": {"message": "Page policies updated."}, - "app.skin-site.admin.wiki.set-home": {"message": "Set as home page"}, - "app.skin-site.admin.wiki.home-set": {"message": "Home page updated."}, - "app.skin-site.admin.wiki.set-deleted": {"message": "Mark as deleted"}, - "app.skin-site.admin.wiki.set-restored": {"message": "Restore page"}, - "app.skin-site.admin.wiki.deleted-updated": {"message": "Page deletion state updated."}, - "app.skin-site.admin.wiki.audit-empty": {"message": "No audit entries."}, - "app.skin-site.admin.wiki.audit-target": {"message": "Target"}, - "app.skin-site.admin.wiki.load-more": {"message": "Load more"}, - "app.skin-site.admin.wiki.settings-hint": {"message": "Comma separated domains."}, - "app.skin-site.admin.wiki.domains": {"message": "Domains"}, - "app.skin-site.admin.wiki.home-page": {"message": "Home page"}, - "app.skin-site.admin.wiki.default-skin": {"message": "Default skin"}, - "app.skin-site.admin.wiki.max-page-bytes": {"message": "Max page bytes"}, - "app.skin-site.admin.wiki.max-attachment-bytes": {"message": "Max attachment bytes"}, - "app.skin-site.admin.wiki.save-settings": {"message": "Save settings"}, - "app.skin-site.admin.wiki.settings-saved": {"message": "Settings saved."}, - "app.skin-site.admin.review.tab-list": {"message": "Submissions"}, - "app.skin-site.admin.review.tab-papers": {"message": "Papers"}, - "app.skin-site.admin.review.papers-empty": {"message": "No review papers yet."}, - "app.skin-site.admin.review.new-paper": {"message": "New paper"}, - "app.skin-site.admin.review.edit-paper": {"message": "Edit"}, - "app.skin-site.admin.review.paper-title": {"message": "Title"}, - "app.skin-site.admin.review.paper-annotation": {"message": "Description"}, - "app.skin-site.admin.review.paper-enabled": {"message": "Enabled"}, - "app.skin-site.admin.review.paper-mode": {"message": "Mode"}, - "app.skin-site.admin.review.paper-pass-score": {"message": "Pass score"}, - "app.skin-site.admin.review.paper-target-permissions": {"message": "Target permissions"}, - "app.skin-site.admin.review.paper-questions": {"message": "Questions"}, - "app.skin-site.admin.review.add-question": {"message": "Add question"}, - "app.skin-site.admin.review.question-title": {"message": "Question title"}, - "app.skin-site.admin.review.question-type": {"message": "Type"}, - "app.skin-site.admin.review.question-score": {"message": "Score"}, - "app.skin-site.admin.review.question-annotation": {"message": "Annotation"}, - "app.skin-site.admin.review.add-option": {"message": "Add option"}, - "app.skin-site.admin.review.option-description": {"message": "Option text"}, - "app.skin-site.admin.review.option-correct": {"message": "Correct"}, - "app.skin-site.admin.review.remove-question": {"message": "Remove"}, - "app.skin-site.admin.review.question-no": {"message": "Question {n}"}, - "app.skin-site.admin.review.paper-created": {"message": "Paper created."}, - "app.skin-site.admin.review.paper-saved": {"message": "Paper saved."}, - "app.skin-site.admin.review.mail-title": {"message": "Pass mail"}, - "app.skin-site.admin.review.mail-enabled": {"message": "Send mail on pass"}, - "app.skin-site.admin.review.mail-subject": {"message": "Subject"}, - "app.skin-site.admin.review.mail-message": {"message": "Body"}, - "app.skin-site.admin.review.mail-extra": {"message": "Extra text"}, - "app.skin-site.admin.review.mail-include-invite": {"message": "Include invite code"}, - "app.skin-site.admin.review.prevent-duplicate": {"message": "Reject duplicate submissions"}, - "app.skin-site.admin.review.copy-link": {"message": "Copy link"}, - "app.skin-site.admin.review.link-copied": {"message": "Link copied."}, - "app.skin-site.admin.review.move-up": {"message": "Move up"}, - "app.skin-site.admin.review.move-down": {"message": "Move down"}, - "app.skin-site.admin.review.mail-subject-required": {"message": "Subject is required when mail is enabled."}, - "app.skin-site.admin.review.mail-message-required": {"message": "Body is required when mail is enabled."}, - "app.skin-site.admin.users.actions": {"message": "Actions"}, - "app.skin-site.admin.users.audit": {"message": "Audit"}, - "app.skin-site.admin.users.audit-empty": {"message": "No audit records yet."}, - "app.skin-site.admin.users.audit-more": {"message": "Load earlier"}, - "app.skin-site.admin.users.audit-title": {"message": "User management audit"}, - "app.skin-site.admin.users.bot": {"message": "Bot"}, - "app.skin-site.admin.users.bot-active": {"message": "Token valid"}, - "app.skin-site.admin.users.bot-ban": {"message": "Ban bot creation"}, - "app.skin-site.admin.users.bot-creation-banned": {"message": "Token creation banned"}, - "app.skin-site.admin.users.bot-exists": {"message": "Bot created"}, - "app.skin-site.admin.users.bot-inactive": {"message": "Token invalidated"}, - "app.skin-site.admin.users.bot-invalidate": {"message": "Invalidate token"}, - "app.skin-site.admin.users.bot-not-exists": {"message": "No bot yet"}, - "app.skin-site.admin.users.bot-save-username": {"message": "Save bot username"}, - "app.skin-site.admin.users.bot-title": {"message": "Bot management"}, - "app.skin-site.admin.users.bot-token-hint": {"message": "Token hint"}, - "app.skin-site.admin.users.bot-unban": {"message": "Unban bot creation"}, - "app.skin-site.admin.users.bot-username": {"message": "Bot username"}, - "app.skin-site.admin.users.bound-players-title": {"message": "Linked players"}, - "app.skin-site.admin.users.frequency": {"message": "Rate limit"}, - "app.skin-site.admin.users.frequency-clear": {"message": "Clear limit"}, - "app.skin-site.admin.users.frequency-current": {"message": "Currently {percent}%"}, - "app.skin-site.admin.users.frequency-hint": {"message": "Packets from this user will be dropped at the given rate."}, - "app.skin-site.admin.users.frequency-none": {"message": "Not enabled"}, - "app.skin-site.admin.users.frequency-range": {"message": "Only integer values from 10% to 100% are allowed."}, - "app.skin-site.admin.users.frequency-save": {"message": "Save limit"}, - "app.skin-site.admin.users.frequency-title": {"message": "Rate limit"}, - "app.skin-site.admin.users.invite": {"message": "Invite user"}, - "app.skin-site.admin.users.invite-copied": {"message": "Invite code copied."}, - "app.skin-site.admin.users.invite-copy": {"message": "Copy"}, - "app.skin-site.admin.users.invite-email": {"message": "Email"}, - "app.skin-site.admin.users.invite-email-invalid": {"message": "Enter a valid email address."}, - "app.skin-site.admin.users.invite-generate": {"message": "Generate invite code"}, - "app.skin-site.admin.users.invite-title": {"message": "Invite user"}, - "app.skin-site.admin.users.legacy-adapted": {"message": "Legacy internal adapted"}, - "app.skin-site.admin.users.registered-at": {"message": "Registered at"}, - "app.skin-site.admin.users.status": {"message": "Status"}, - "app.skin-site.admin.users.status-banned": {"message": "Banned"}, - "app.skin-site.admin.users.status-normal": {"message": "Normal"}, - "app.skin-site.admin.mods.upload": {"message": "Upload"}, - "app.skin-site.admin.mods.select-mode": {"message": "Select multiple"}, - "app.skin-site.admin.mods.exit-select": {"message": "Done selecting"}, - "app.skin-site.admin.mods.select-all": {"message": "Select all"}, - "app.skin-site.admin.mods.clear-selection": {"message": "Clear selection"}, - "app.skin-site.admin.mods.selected-count": {"message": "{count} selected"}, - "app.skin-site.admin.mods.delete-selected": {"message": "Delete selected"}, - "app.skin-site.admin.mods.confirm-delete-multi": {"message": "Delete {count} selected mods? This cannot be undone."}, - "app.skin-site.admin.mods.deleted-multi": {"message": "Selected mods deleted."}, - "app.skin-site.admin.mods.server-address": {"message": "Server address"}, - "app.skin-site.admin.mods.server-address-hint": {"message": "Filter by server address"}, - "app.skin-site.admin.mods.apply": {"message": "Apply"}, - "app.skin-site.admin.mods.clear": {"message": "Clear"}, - "app.skin-site.admin.mods.upload-title": {"message": "Upload mods"}, - "app.skin-site.admin.mods.upload-drop": {"message": "Drag .jar files here, or click to choose"}, - "app.skin-site.admin.mods.upload-sub": {"message": "Multiple files supported, up to {size} MB each"}, - "app.skin-site.admin.mods.upload-tags": {"message": "Attach rule tags"}, - "app.skin-site.admin.mods.upload-queue": {"message": "Files"}, - "app.skin-site.admin.mods.upload-pending": {"message": "Pending"}, - "app.skin-site.admin.mods.upload-checking": {"message": "Checking…"}, - "app.skin-site.admin.mods.upload-uploading": {"message": "Uploading…"}, - "app.skin-site.admin.mods.upload-conflict": {"message": "Name exists"}, - "app.skin-site.admin.mods.upload-success": {"message": "Done"}, - "app.skin-site.admin.mods.upload-error": {"message": "Failed"}, - "app.skin-site.admin.mods.upload-exists": {"message": "This file already exists on the server."}, - "app.skin-site.admin.mods.upload-name-conflict": {"message": "A mod with the same file name already exists"}, - "app.skin-site.admin.mods.upload-name-conflict-hint": {"message": "Overwrite the existing mod, or skip this file."}, - "app.skin-site.admin.mods.upload-overwrite": {"message": "Overwrite"}, - "app.skin-site.admin.mods.upload-skip": {"message": "Skip"}, - "app.skin-site.admin.mods.upload-close": {"message": "Close"}, - "app.skin-site.admin.mods.upload-all-done": {"message": "All files processed."}, - "app.skin-site.admin.mods.upload-too-large": {"message": "File too large: {name}"}, - "app.skin-site.chat.avatar.label": {"message": "Room avatar"}, - "app.skin-site.chat.avatar.upload": {"message": "Upload avatar"}, - "app.skin-site.chat.avatar.replace": {"message": "Replace avatar"}, - "app.skin-site.chat.avatar.remove": {"message": "Remove avatar"}, - "app.skin-site.chat.avatar.hint": {"message": "PNG, JPEG or WebP, up to 8192 px per side and 5 MB."}, - "app.skin-site.chat.avatar.bad-format": {"message": "Only PNG, JPEG and WebP are supported."}, - "app.skin-site.chat.avatar.too-large": {"message": "Avatar must not exceed 5 MB."}, - "app.skin-site.chat.avatar.not-image": {"message": "Avatar must be an image."}, - "app.skin-site.chat.admin.title": {"message": "Chat rooms"}, - "app.skin-site.chat.admin.subtitle": {"message": "Create public or private rooms and hand daily moderation to trusted members."}, - "app.skin-site.chat.admin.create-room": {"message": "Create room"}, - "app.skin-site.chat.admin.loading": {"message": "Loading…"}, - "app.skin-site.chat.admin.failed": {"message": "Could not load rooms."}, - "app.skin-site.chat.admin.empty": {"message": "No chat rooms yet."}, - "app.skin-site.chat.admin.edit": {"message": "Edit"}, - "app.skin-site.chat.admin.remove": {"message": "Delete"}, - "app.skin-site.chat.admin.save": {"message": "Save"}, - "app.skin-site.chat.admin.cancel": {"message": "Cancel"}, - "app.skin-site.chat.admin.name": {"message": "Name"}, - "app.skin-site.chat.admin.description": {"message": "Description"}, - "app.skin-site.chat.admin.visibility": {"message": "Visibility"}, - "app.skin-site.chat.admin.visibility-public": {"message": "Public"}, - "app.skin-site.chat.admin.visibility-private": {"message": "Private"}, - "app.skin-site.chat.admin.kind": {"message": "Kind"}, - "app.skin-site.chat.admin.kind-standard": {"message": "Standard"}, - "app.skin-site.chat.admin.kind-settlement": {"message": "Settlement"}, - "app.skin-site.chat.admin.prerequisite-mode": {"message": "Prerequisite mode"}, - "app.skin-site.chat.admin.prerequisite-any": {"message": "Any"}, - "app.skin-site.chat.admin.prerequisite-all": {"message": "All"}, - "app.skin-site.chat.admin.prerequisite-permissions": {"message": "Required permissions"}, - "app.skin-site.chat.admin.prerequisite-hint": {"message": "Comma separated. Leave empty for no restriction."}, - "app.skin-site.chat.admin.created": {"message": "Room created."}, - "app.skin-site.chat.admin.updated": {"message": "Room updated."}, - "app.skin-site.chat.admin.deleted": {"message": "Room deleted."}, - "app.skin-site.chat.admin.confirm-delete": {"message": "Permanently delete room “{name}” and all its messages?"}, - "app.skin-site.chat.admin.manager-badge": {"message": "Manager"}, - "app.skin-site.chat.admin.voice-badge": {"message": "Voice"}, - "app.skin-site.chat.user-picker.label": {"message": "Pick a user"}, - "app.skin-site.chat.user-picker.placeholder": {"message": "Search username, email or account ID"}, - "app.skin-site.chat.user-picker.by-user": {"message": "By user"}, - "app.skin-site.chat.user-picker.by-player": {"message": "By player"}, - "app.skin-site.chat.user-picker.hint": {"message": "Fuzzy search on username and email, or search by account ID."}, - "app.skin-site.chat.user-picker.player-hint": {"message": "Enter a player name to find the bound user."}, - "app.skin-site.chat.user-picker.empty": {"message": "No matching user."}, - "app.skin-site.chat.user-picker.banned": {"message": "This account is banned."}, - "app.skin-site.chat.user-picker.guest": {"message": "Guests cannot become a manager or settlement owner."}, - "app.skin-site.chat.user-picker.already-in": {"message": "This user is already in the room."}, - "app.skin-site.chat.user-picker.not-allowed": {"message": "This user is outside the allowed range."}, - "app.skin-site.chat.user-picker.select": {"message": "Select"}, - "app.skin-site.chat.user-picker.selected": {"message": "Selected"}, - "app.skin-site.chat.user-picker.id": {"message": "ID"}, - "app.skin-site.chat.admin.managers": {"message": "Managers"}, - "app.skin-site.chat.admin.manager-title": {"message": "Room manager"}, - "app.skin-site.chat.admin.manager-hint": {"message": "Managers can moderate members, messages and files in this room."}, - "app.skin-site.chat.admin.grant": {"message": "Grant"}, - "app.skin-site.chat.admin.revoke": {"message": "Revoke"}, - "app.skin-site.chat.admin.manager-granted": {"message": "Manager granted."}, - "app.skin-site.chat.admin.manager-revoked": {"message": "Manager revoked."}, - "app.skin-site.chat.admin.owner-title": {"message": "Settlement owner"}, - "app.skin-site.chat.admin.owner-hint": {"message": "Assign the first settlement owner for this room."}, - "app.skin-site.chat.admin.owner-assigned": {"message": "Settlement owner assigned."}, - "app.skin-site.chat.admin.owner-current": {"message": "Current owner: {name}"}, - "app.skin-site.chat.admin.owner-none": {"message": "No settlement owner yet."}, - "app.skin-site.chat.admin.audit": {"message": "Audit"}, - "app.skin-site.chat.admin.audit-title": {"message": "Room audit"}, - "app.skin-site.chat.admin.audit-empty": {"message": "No audit records yet."}, - "app.skin-site.chat.admin.audit-target": {"message": "Target: {name}"}, - "app.skin-site.chat.admin.close": {"message": "Close"}, - "app.skin-site.chat.voice-runtime-title": {"message": "Realtime voice runtime"}, - "app.skin-site.chat.voice-logs": {"message": "View logs"}, - "app.skin-site.chat.voice-config": {"message": "Configure runtime"}, - "app.skin-site.chat.voice-retry": {"message": "Retry deployment"}, - "app.skin-site.chat.voice-config-title": {"message": "Voice runtime configuration"}, - "app.skin-site.chat.voice-logs-title": {"message": "LiveKit logs"}, - "app.skin-site.chat.voice-capacity-title": {"message": "Voice capacity"}, - "app.skin-site.chat.voice-capacity": {"message": "Voice capacity"}, - "app.skin-site.chat.participant-limit": {"message": "Participant limit"}, - "app.skin-site.chat.listener-limit": {"message": "Listener limit"}, - "app.skin-site.chat.voice-capacity-updated": {"message": "Voice capacity updated."}, - "app.skin-site.chat.voice-enabled": {"message": "Enable realtime voice"}, - "app.skin-site.chat.voice-runtime-path": {"message": "Runtime directory"}, - "app.skin-site.chat.voice-mirror": {"message": "Mirror base URL"}, - "app.skin-site.chat.voice-public-url": {"message": "Public URL"}, - "app.skin-site.chat.voice-bind": {"message": "Bind address"}, - "app.skin-site.chat.voice-signal-port": {"message": "Signal port"}, - "app.skin-site.chat.voice-rtc-tcp-port": {"message": "Media TCP port"}, - "app.skin-site.chat.voice-rtc-udp-port": {"message": "Media UDP port"}, - "app.skin-site.chat.voice-startup-timeout": {"message": "Startup timeout (s)"}, - "app.skin-site.chat.voice-use-external-ip": {"message": "Use external IP"}, - "app.skin-site.chat.voice-node-ip": {"message": "Node IP"}, - "app.skin-site.chat.voice-saved": {"message": "Voice configuration saved."}, - "app.skin-site.chat.voice-logs-auto-refresh": {"message": "Auto refresh"}, - "app.skin-site.chat.voice-logs-refresh": {"message": "Refresh"}, - "app.skin-site.chat.voice-logs-empty": {"message": "No logs yet."}, - "app.skin-site.chat.admin.voice-runtime-title": {"message": "Realtime voice runtime"}, - "app.skin-site.chat.admin.voice-logs": {"message": "View logs"}, - "app.skin-site.chat.admin.voice-config": {"message": "Configure runtime"}, - "app.skin-site.chat.admin.voice-retry": {"message": "Retry deployment"}, - "app.skin-site.chat.admin.voice-config-title": {"message": "Voice runtime configuration"}, - "app.skin-site.chat.admin.voice-logs-title": {"message": "LiveKit logs"}, - "app.skin-site.chat.admin.voice-capacity-title": {"message": "Voice capacity"}, - "app.skin-site.chat.admin.voice-capacity": {"message": "Voice capacity"}, - "app.skin-site.chat.admin.participant-limit": {"message": "Participant limit"}, - "app.skin-site.chat.admin.listener-limit": {"message": "Listener limit"}, - "app.skin-site.chat.admin.voice-capacity-updated": {"message": "Voice capacity updated."}, - "app.skin-site.chat.admin.voice-enabled": {"message": "Enable realtime voice"}, - "app.skin-site.chat.admin.voice-runtime-path": {"message": "Runtime directory"}, - "app.skin-site.chat.admin.voice-mirror": {"message": "Mirror base URL"}, - "app.skin-site.chat.admin.voice-public-url": {"message": "Public URL"}, - "app.skin-site.chat.admin.voice-bind": {"message": "Bind address"}, - "app.skin-site.chat.admin.voice-signal-port": {"message": "Signal port"}, - "app.skin-site.chat.admin.voice-rtc-tcp-port": {"message": "Media TCP port"}, - "app.skin-site.chat.admin.voice-rtc-udp-port": {"message": "Media UDP port"}, - "app.skin-site.chat.admin.voice-startup-timeout": {"message": "Startup timeout (s)"}, - "app.skin-site.chat.admin.voice-use-external-ip": {"message": "Use external IP"}, - "app.skin-site.chat.admin.voice-node-ip": {"message": "Node IP"}, - "app.skin-site.chat.admin.voice-saved": {"message": "Voice configuration saved."}, - "app.skin-site.chat.admin.voice-logs-auto-refresh": {"message": "Auto refresh"}, - "app.skin-site.chat.admin.voice-logs-refresh": {"message": "Refresh"}, - "app.skin-site.chat.admin.voice-logs-empty": {"message": "No logs yet."}, - "app.skin-site.admin.wiki.tab-migration": {"message": "Migration"}, - "app.skin-site.admin.wiki.migration-title": {"message": "MediaWiki migration"}, - "app.skin-site.admin.wiki.migration-hint": {"message": "Migrated content lands in a hidden staging area and is published in one batch after every page is reviewed."}, - "app.skin-site.admin.wiki.auto-title": {"message": "Read from MediaWiki API"}, - "app.skin-site.admin.wiki.api-url": {"message": "api.php URL"}, - "app.skin-site.admin.wiki.bot-username": {"message": "Bot username (optional)"}, - "app.skin-site.admin.wiki.bot-password": {"message": "Bot password (optional)"}, - "app.skin-site.admin.wiki.credentials-hint": {"message": "Credentials stay in memory for this job only. HTTPS is required when supplied."}, - "app.skin-site.admin.wiki.allow-private": {"message": "Allow private network source"}, - "app.skin-site.admin.wiki.allow-private-hint": {"message": "Private sources may reach services inside the server network."}, - "app.skin-site.admin.wiki.start-auto": {"message": "Create automatic migration job"}, - "app.skin-site.admin.wiki.xml-title": {"message": "Import MediaWiki XML"}, - "app.skin-site.admin.wiki.xml-file": {"message": "Export file"}, - "app.skin-site.admin.wiki.start-xml": {"message": "Upload and stage"}, - "app.skin-site.admin.wiki.stale-rules": {"message": "Stale page detection rules"}, - "app.skin-site.admin.wiki.stale-days": {"message": "Days without update"}, - "app.skin-site.admin.wiki.maintainer-window": {"message": "Maintainer window (days)"}, - "app.skin-site.admin.wiki.max-maintainers": {"message": "Max maintainers"}, - "app.skin-site.admin.wiki.stale-markers": {"message": "Stale categories, templates or text"}, - "app.skin-site.admin.wiki.stale-markers-hint": {"message": "Comma separated"}, - "app.skin-site.admin.wiki.jobs": {"message": "Migration jobs"}, - "app.skin-site.admin.wiki.refresh-jobs": {"message": "Refresh"}, - "app.skin-site.admin.wiki.jobs-empty": {"message": "No migration jobs yet."}, - "app.skin-site.admin.wiki.reviewed-count": {"message": "Reviewed {reviewed} / {total}"}, - "app.skin-site.admin.wiki.imported-excluded": {"message": "Imported {imported} · Excluded {excluded}"}, - "app.skin-site.admin.wiki.view-job": {"message": "View job"}, - "app.skin-site.admin.wiki.delete-job": {"message": "Delete job record"}, - "app.skin-site.admin.wiki.confirm-delete-job": {"message": "Delete migration job #{id}? This cannot be undone."}, - "app.skin-site.admin.wiki.candidates": {"message": "Candidate pages"}, - "app.skin-site.admin.wiki.candidates-empty": {"message": "Select a job to review its pages."}, - "app.skin-site.admin.wiki.last-updated": {"message": "Updated {date}"}, - "app.skin-site.admin.wiki.maintainer-count": {"message": "{count} maintainers"}, - "app.skin-site.admin.wiki.conflict": {"message": "Title conflict"}, - "app.skin-site.admin.wiki.target-title": {"message": "Target title"}, - "app.skin-site.admin.wiki.overwrite": {"message": "Overwrite"}, - "app.skin-site.admin.wiki.import": {"message": "Import"}, - "app.skin-site.admin.wiki.exclude": {"message": "Exclude"}, - "app.skin-site.admin.wiki.publish": {"message": "Publish batch"}, - "app.skin-site.admin.wiki.rollback": {"message": "Roll back"}, - "app.skin-site.admin.wiki.confirm-rollback": {"message": "Roll back this migration batch? Published pages will be reverted."}, - "app.skin-site.admin.wiki.state-importing": {"message": "Importing"}, - "app.skin-site.admin.wiki.state-review": {"message": "Waiting review"}, - "app.skin-site.admin.wiki.state-publishing": {"message": "Publishing"}, - "app.skin-site.admin.wiki.state-published": {"message": "Published"}, - "app.skin-site.admin.wiki.state-failed": {"message": "Failed"}, - "app.skin-site.admin.wiki.state-rolled-back": {"message": "Rolled back"}, - "app.skin-site.admin.wiki.decision-pending": {"message": "Pending"}, - "app.skin-site.admin.wiki.decision-import": {"message": "Import"}, - "app.skin-site.admin.wiki.decision-exclude": {"message": "Exclude"}, - "app.skin-site.admin.wiki.migration-started": {"message": "Migration job created."}, - "app.skin-site.admin.wiki.xml-staged": {"message": "XML parsed and staged for review."}, - "app.skin-site.admin.wiki.published": {"message": "Published {imported} pages, overwrote {overwritten}."}, - "app.skin-site.admin.wiki.rolled-back": {"message": "Migration batch rolled back."}, - "app.skin-site.admin.wiki.job-deleted": {"message": "Migration record deleted."}, - "app.skin-site.admin.wiki.select-xml": {"message": "Choose a MediaWiki XML file first."}, - "app.skin-site.wiki.title": {"message": "StarLight Wiki"}, - "app.skin-site.wiki.search-placeholder": {"message": "Enter a page title"}, - "app.skin-site.wiki.open": {"message": "Open"}, - "app.skin-site.wiki.loading": {"message": "Loading…"}, - "app.skin-site.wiki.not-found": {"message": "Page not found."}, - "app.skin-site.wiki.empty": {"message": "Enter a page title above to start reading."}, - "app.skin-site.wiki.updated-at": {"message": "Last edited {date} by {author}"}, - "app.skin-site.wiki.revision": {"message": "Revision #{id}"}, - "app.skin-site.wiki.categories": {"message": "Categories"}, - "app.skin-site.wiki.back": {"message": "Back"} + "app.skins.armor.title": { "message": "Armour and trims" }, + "app.skins.armor.save": { "message": "Save" }, + "app.skins.armor.close": { "message": "Close" }, + "app.skins.armor.description": { + "message": "Try armour and trims on your skin. Nothing is stored until you save it." + }, + "app.skins.armor.unsaved": { "message": "Unsaved changes" }, + "app.skins.armor.reset-to-saved": { "message": "Reset to saved" }, + "app.skins.armor.restore-defaults": { "message": "Restore defaults" }, + "app.instances.batch-edit-groups.add": { "message": "Add" }, + "app.instances.batch-edit-groups.add-to-group-title": { + "message": "Add instances to \"{groupName}\"" + }, + "app.instances.batch-edit-groups.added": { "message": "Added" }, + "app.instances.batch-edit-groups.cancel": { "message": "Cancel" }, + "app.instances.batch-edit-groups.create": { "message": "Create group" }, + "app.instances.batch-edit-groups.group-name": { "message": "Group name" }, + "app.instances.batch-edit-groups.group-name-placeholder": { + "message": "Enter group name" + }, + "app.instances.batch-edit-groups.no-instances-found": { + "message": "No instances found" + }, + "app.instances.batch-edit-groups.save-changes": { "message": "Save" }, + "app.instances.batch-edit-groups.search-instance": { + "message": "Search instances" + }, + "app.instances.group.add-to-group": { "message": "Add to group" }, + "app.instances.group.collapse": { "message": "Collapse group" }, + "app.instances.group.delete-description": { + "message": "Instances in this group will be ungrouped." + }, + "app.instances.group.delete-group": { "message": "Delete group" }, + "app.instances.group.edit-name": { "message": "Edit group name" }, + "app.instances.group.empty": { "message": "Drag and drop to add instances." }, + "app.instances.group.expand": { "message": "Expand group" }, + "app.instances.group.move-down": { "message": "Move group down" }, + "app.instances.group.move-up": { "message": "Move group up" }, + "app.instances.group.name-empty": { + "message": "Group names cannot be empty." + }, + "app.instances.group.name-too-long": { + "message": "Group names cannot be longer than {maxLength} characters." + }, + "app.instances.group.new-instance": { "message": "New instance" }, + "app.instances.group.pinned": { "message": "Pinned" }, + "app.instances.group.rename-group": { "message": "Rename group" }, + "app.instances.sort-by": { "message": "Sort by" }, + "app.instances.sort.direction.asc-alphabetical": { "message": "A–Z" }, + "app.instances.sort.direction.asc-date": { "message": "Oldest first" }, + "app.instances.sort.direction.asc-recency": { + "message": "Least recent first" + }, + "app.instances.sort.direction.asc-version": { + "message": "Oldest version first" + }, + "app.instances.sort.direction.desc-alphabetical": { "message": "Z–A" }, + "app.instances.sort.direction.desc-date": { "message": "Newest first" }, + "app.instances.sort.direction.desc-recency": { + "message": "Most recent first" + }, + "app.instances.sort.direction.desc-version": { + "message": "Newest version first" + }, + "app.library.context-menu.pin-instance": { "message": "Pin instance" }, + "app.library.context-menu.remove-from-group": { + "message": "Remove from group" + }, + "app.library.context-menu.unpin-instance": { "message": "Unpin instance" }, + "app.library.group.new": { "message": "New group" }, + "app.library.selection.new-group": { "message": "New group" }, + "app.library.selection.remove-from-group": { "message": "Remove from group" }, + "app.log-share.settings.title": { "message": "Log sharing & AI analysis" }, + "app.log-share.settings.description": { + "message": "Share crash diagnostics with LogShare for a structured summary and optional AI analysis. LogShare is preferred; mclo.gs is used as a fallback." + }, + "app.log-share.settings.share-provider": { "message": "Log sharing service" }, + "app.log-share.settings.share-provider-description": { + "message": "Where the diagnostic link is uploaded when you share it." + }, + "app.log-share.settings.ai-source": { "message": "AI analysis source" }, + "app.log-share.settings.ai-source-logshare": { "message": "LogShare AI" }, + "app.log-share.settings.ai-source-custom": { + "message": "Custom AI provider" + }, + "app.log-share.settings.ai-source-description": { + "message": "Both sources send a sanitized and shortened crash context. AI output may be inaccurate." + }, + "app.log-share.settings.auto-upload": { + "message": "Upload to get a structured summary automatically" + }, + "app.log-share.settings.auto-upload-description": { + "message": "Only effective in LogShare AI mode." + }, + "app.log-share.settings.multi-file": { "message": "Multi-file upload" }, + "app.log-share.settings.multi-file-description": { + "message": "Upload latest.log, crash reports, hs_err and launcher logs together." + }, + "app.log-share.settings.no-storage": { + "message": "Analyze without storing logs" + }, + "app.log-share.settings.no-storage-description": { + "message": "Submit content directly for analysis and skip the stored upload. Disables the automatic summary." + }, + "app.log-share.settings.show-progress": { + "message": "Show AI analysis progress" + }, + "app.log-share.settings.show-progress-description": { + "message": "Display thinking, tool and limit status while LogShare AI is working." + }, + "app.log-share.shared-logs.title": { "message": "Shared logs" }, + "app.log-share.shared-logs.description": { + "message": "Every diagnostic you have shared is listed here. Delete an entry to remove it from your history and request its removal from the sharing service." + }, + "app.log-share.shared-logs.empty": { "message": "No shared logs yet." }, + "app.log-share.shared-logs.delete": { "message": "Delete" }, + "app.log-share.shared-logs.deleting": { "message": "Deleting…" }, + "app.log-share.shared-logs.deleted": { "message": "Shared log removed." }, + "app.log-share.shared-logs.delete-failed": { + "message": "Failed to delete the shared log." + }, + "app.log-share.shared-logs.truncated": { "message": "Truncated" }, + "app.minecraft-crash.share-fallback": { + "message": "LogShare is unavailable, so the diagnostic was shared via mclo.gs." + }, + "app.log-share.ai.action": { "message": "Deep AI analysis" }, + "app.log-share.summary.title": { "message": "LogShare analysis" }, + "app.log-share.summary.loading": { + "message": "Loading structured summary..." + }, + "app.log-share.summary.empty": { + "message": "LogShare did not return a structured summary for these logs." + }, + "app.log-share.summary.no-storage": { + "message": "Structured summary is unavailable while no-storage mode is enabled." + }, + "app.log-share.summary.failed": { + "message": "Could not load the LogShare summary: {message}" + }, + "app.log-share.summary.problems": { "message": "Problems" }, + "app.log-share.summary.information": { "message": "Information" }, + "app.minecraft-crash.logs.loading": { "message": "Loading crash logs..." }, + "app.minecraft-crash.logs.empty": { + "message": "No logs from this launch were found." + }, + "app.minecraft-crash.logs.failed": { + "message": "Could not load the crash logs: {message}" + }, + "app.minecraft-crash.log-file.loading": { "message": "Loading log file..." }, + "app.minecraft-crash.log-file.failed": { + "message": "Could not load this log file: {message}" + }, + "app.log-share.ai.tab": { "message": "LogAgent detailed analysis" }, + "app.log-share.ai.root-cause": { "message": "Core root cause" }, + "app.log-share.ai.confidence": { "message": "Diagnostic confidence" }, + "app.log-share.ai.steps": { "message": "Recommended troubleshooting steps" }, + "app.log-share.ai.evidence": { "message": "Supporting evidence" }, + "app.log-share.ai.thinking": { "message": "Thinking…" }, + "app.log-share.ai.queued": { "message": "Queued, about {position} ahead" }, + "app.log-share.ai.queued-front": { + "message": "Queued, waiting for a free slot" + }, + "app.log-share.ai.tool": { "message": "Using tool: {name}" }, + "app.log-share.ai.unknown-tool": { "message": "tool" }, + "app.log-share.ai.tool-result": { "message": "Tool result received" }, + "app.log-share.ai.limit": { "message": "Reached tool loop limit" }, + "app.log-share.ai.working": { "message": "Analyzing with LogAgent…" }, + "app.log-share.ai.failed": { + "message": "LogAgent analysis failed: {message}" + }, + "app.shortcut-settings.change-shortcut": { + "message": "Change the shortcut for {action}" + }, + "app.shortcut-settings.enable": { "message": "Enable quick scrolling" }, + "app.shortcut-settings.end-action": { "message": "Scroll to the bottom" }, + "app.shortcut-settings.end-action-description": { + "message": "Moves the page you are reading to the bottom." + }, + "app.shortcut-settings.home-action": { "message": "Scroll to the top" }, + "app.shortcut-settings.home-action-description": { + "message": "Moves the page you are reading to the top." + }, + "app.shortcut-settings.nav-create": { "message": "Create new instance" }, + "app.shortcut-settings.nav-create-description": { + "message": "Jump to creating a new instance." + }, + "app.shortcut-settings.nav-description": { + "message": "Jump to a menu item with its shortcut. Each shortcut is off until enabled." + }, + "app.shortcut-settings.nav-discover": { "message": "Discover content" }, + "app.shortcut-settings.nav-discover-description": { + "message": "Jump to browsing content." + }, + "app.shortcut-settings.nav-downloads": { "message": "Downloads" }, + "app.shortcut-settings.nav-downloads-description": { + "message": "Jump to downloads." + }, + "app.shortcut-settings.nav-home": { "message": "Home" }, + "app.shortcut-settings.nav-home-description": { + "message": "Jump to the Home page." + }, + "app.shortcut-settings.nav-lab": { "message": "Lab" }, + "app.shortcut-settings.nav-lab-description": { + "message": "Jump to the Lab." + }, + "app.shortcut-settings.nav-library": { "message": "Library" }, + "app.shortcut-settings.nav-library-description": { + "message": "Jump to your library." + }, + "app.shortcut-settings.nav-multiplayer": { "message": "Multiplayer" }, + "app.shortcut-settings.nav-multiplayer-description": { + "message": "Jump to multiplayer." + }, + "app.shortcut-settings.nav-settings": { "message": "Settings" }, + "app.shortcut-settings.nav-settings-description": { + "message": "Jump to the settings." + }, + "app.shortcut-settings.nav-skins": { "message": "Skin selector" }, + "app.shortcut-settings.nav-skins-description": { + "message": "Jump to the skin selector." + }, + "app.shortcut-settings.nav-title": { "message": "Navigation shortcuts" }, + "app.shortcut-settings.nav-worlds": { "message": "Worlds" }, + "app.shortcut-settings.nav-worlds-description": { + "message": "Jump to your worlds." + }, + "app.shortcut-settings.page-down-action": { + "message": "Scroll down one screen" + }, + "app.shortcut-settings.page-down-action-description": { + "message": "Moves the page you are reading down by one screen." + }, + "app.shortcut-settings.page-up-action": { "message": "Scroll up one screen" }, + "app.shortcut-settings.page-up-action-description": { + "message": "Moves the page you are reading up by one screen." + }, + "app.shortcut-settings.scroll-description": { + "message": "Move through long pages with the keyboard." + }, + "app.shortcut-settings.scroll-title": { "message": "Quick scrolling" }, + "app.settings.tabs.shortcut-settings": { "message": "Keyboard shortcuts" }, + "app.skin-site.bugs.title": { "message": "Bugs & suggestions" }, + "app.skin-site.bugs.back": { "message": "Back to home" }, + "app.skin-site.bugs.subtitle": { + "message": "Report issues and follow their progress." + }, + "app.skin-site.bugs.loading": { "message": "Loading…" }, + "app.skin-site.bugs.failed": { "message": "Could not load issues." }, + "app.skin-site.bugs.empty": { "message": "No issues match these filters." }, + "app.skin-site.bugs.all": { "message": "All" }, + "app.skin-site.bugs.more": { "message": "Load more" }, + "app.skin-site.bugs.open-only": { "message": "Open only" }, + "app.skin-site.bugs.comments": { "message": "{count} comments" }, + "app.skin-site.bugs.type.bug": { "message": "Bug" }, + "app.skin-site.bugs.type.feature": { "message": "Feature" }, + "app.skin-site.bugs.type.improvement": { "message": "Improvement" }, + "app.skin-site.bugs.status.pending": { "message": "Pending" }, + "app.skin-site.bugs.status.confirmed": { "message": "Confirmed" }, + "app.skin-site.bugs.status.needs-info": { "message": "Needs info" }, + "app.skin-site.bugs.status.in-progress": { "message": "In progress" }, + "app.skin-site.bugs.status.verifying": { "message": "Verifying" }, + "app.skin-site.bugs.status.closed": { "message": "Closed" }, + "app.skin-site.bugs.priority.critical": { "message": "Critical" }, + "app.skin-site.bugs.priority.high": { "message": "High" }, + "app.skin-site.bugs.priority.normal": { "message": "Normal" }, + "app.skin-site.bugs.priority.low": { "message": "Low" }, + "app.skin-site.bugs.resolution.fixed": { "message": "Fixed" }, + "app.skin-site.bugs.resolution.wont-fix": { "message": "Won’t fix" }, + "app.skin-site.bugs.resolution.by-design": { "message": "By design" }, + "app.skin-site.bugs.resolution.duplicate": { "message": "Duplicate" }, + "app.skin-site.bugs.resolution.cannot-reproduce": { + "message": "Cannot reproduce" + }, + "app.skin-site.bugs.resolution.invalid": { "message": "Invalid" }, + "app.skin-site.bug-detail.back": { "message": "Back to list" }, + "app.skin-site.bug-detail.loading": { "message": "Loading…" }, + "app.skin-site.bug-detail.failed": { + "message": "Could not load this issue." + }, + "app.skin-site.bug-detail.issue-no": { "message": "Issue #{id}" }, + "app.skin-site.bug-detail.by": { "message": "by {name}" }, + "app.skin-site.bug-detail.assignee": { "message": "Assignee: {name}" }, + "app.skin-site.bug-detail.unassigned": { "message": "Unassigned" }, + "app.skin-site.bug-detail.description-empty": { + "message": "No description provided." + }, + "app.skin-site.bug-detail.resolution": { "message": "Resolution: {name}" }, + "app.skin-site.bug-detail.comments-title": { "message": "Comments" }, + "app.skin-site.bug-detail.comments-empty": { + "message": "No comments yet. Be the first to reply." + }, + "app.skin-site.bug-detail.comments-loading": { + "message": "Loading comments…" + }, + "app.skin-site.bug-detail.comment-placeholder": { + "message": "Write a comment…" + }, + "app.skin-site.bug-detail.comment-submit": { "message": "Comment" }, + "app.skin-site.bug-detail.comment-sending": { "message": "Sending…" }, + "app.skin-site.bug-detail.comment-empty-error": { + "message": "Comment cannot be empty." + }, + "app.skin-site.bug-detail.comment-posted": { "message": "Comment posted." }, + "app.skin-site.bug-detail.comment-deleted": { "message": "Comment deleted." }, + "app.skin-site.bug-detail.delete": { "message": "Delete" }, + "app.skin-site.bug-detail.deleting": { "message": "Deleting…" }, + "app.skin-site.bug-detail.system": { "message": "System" }, + "app.skin-site.bug-create.title": { "message": "New issue" }, + "app.skin-site.bug-create.type": { "message": "Type" }, + "app.skin-site.bug-create.title-field": { "message": "Title" }, + "app.skin-site.bug-create.title-placeholder": { + "message": "A short summary of the problem" + }, + "app.skin-site.bug-create.description": { "message": "Description" }, + "app.skin-site.bug-create.description-placeholder": { + "message": "What happened, and how can it be reproduced?" + }, + "app.skin-site.bug-create.private": { "message": "Private issue" }, + "app.skin-site.bug-create.private-hint": { + "message": "Only you and the maintainers can see it." + }, + "app.skin-site.bug-create.images": { "message": "Images" }, + "app.skin-site.bug-create.images-hint": { + "message": "Optional, up to 5 images." + }, + "app.skin-site.bug-create.submit": { "message": "Create issue" }, + "app.skin-site.bug-create.submitting": { "message": "Creating…" }, + "app.skin-site.bug-create.created": { "message": "Issue created." }, + "app.skin-site.bug-create.cancel": { "message": "Cancel" }, + "app.skin-site.bug-notifications.title": { "message": "Notifications" }, + "app.skin-site.bug-notifications.back": { "message": "Back to home" }, + "app.skin-site.bug-notifications.subtitle": { + "message": "Activity on issues you reported or follow." + }, + "app.skin-site.bug-notifications.loading": { "message": "Loading…" }, + "app.skin-site.bug-notifications.failed": { + "message": "Could not load notifications." + }, + "app.skin-site.bug-notifications.empty": { + "message": "No new notifications." + }, + "app.skin-site.bug-notifications.item": { + "message": "{name} updated issue #{id}" + }, + "app.skin-site.bug-notifications.mark-all": { "message": "Mark all as read" }, + "app.skin-site.bug-notifications.marked-all": { + "message": "All notifications marked as read." + }, + "app.skin-site.bugs.create": { "message": "New issue" }, + "app.skin-site.bugs.notifications": { "message": "Notifications" }, + "app.skin-site.home.title": { "message": "StarLight Skin Site" }, + "app.skin-site.home.subtitle": { + "message": "The wardrobe for StarLight Server players." + }, + "app.skin-site.home.address": { "message": "Skin site address" }, + "app.skin-site.home.copied": { "message": "Address copied." }, + "app.skin-site.home.copy": { "message": "Copy" }, + "app.skin-site.admin.title": { "message": "Admin console" }, + "app.skin-site.admin.back": { "message": "Back to home" }, + "app.skin-site.admin.no-access": { "message": "You do not have access." }, + "app.skin-site.admin.no-access-hint": { + "message": "Sign in with an administrator account to use this console." + }, + "app.skin-site.admin.group.security": { "message": "Security" }, + "app.skin-site.admin.group.users": { "message": "Users" }, + "app.skin-site.admin.group.community": { "message": "Community" }, + "app.skin-site.admin.group.resources": { "message": "Resources" }, + "app.skin-site.admin.item.servers": { "message": "Servers" }, + "app.skin-site.admin.item.summary": { "message": "Summary" }, + "app.skin-site.admin.item.access-audit": { "message": "Access audit" }, + "app.skin-site.admin.item.users": { "message": "Users" }, + "app.skin-site.admin.item.players": { "message": "Players" }, + "app.skin-site.admin.item.review": { "message": "Player review" }, + "app.skin-site.admin.item.broadcast": { "message": "Broadcast" }, + "app.skin-site.admin.item.chat": { "message": "Chat rooms" }, + "app.skin-site.admin.item.wiki": { "message": "Wiki" }, + "app.skin-site.admin.item.donations": { "message": "Donations" }, + "app.skin-site.admin.item.mods": { "message": "Mods" }, + "app.skin-site.admin.item.launcher": { "message": "Launcher" }, + "app.skin-site.admin.item.downloads": { "message": "Downloads" }, + "app.skin-site.home.admin": { "message": "Admin" }, + "app.skin-site.home.settings": { "message": "Account" }, + "app.skin-site.home.sign-in": { "message": "Sign in" }, + "app.skin-site.home.players": { "message": "Players" }, + "app.skin-site.home.my-players": { "message": "My players" }, + "app.skin-site.home.no-players": { "message": "No players linked yet." }, + "app.skin-site.home.loading": { "message": "Loading…" }, + "app.skin-site.home.error": { "message": "Could not load." }, + "app.skin-site.home.luck": { "message": "Luck" }, + "app.skin-site.home.luck-unavailable": { "message": "Unavailable" }, + "app.skin-site.home.signed-out-title": { "message": "Not signed in" }, + "app.skin-site.home.signed-out-body": { + "message": "Sign in to manage your account and textures." + }, + "app.skin-site.admin.summary.title": { "message": "System overview" }, + "app.skin-site.admin.summary.loading": { "message": "Loading…" }, + "app.skin-site.admin.summary.failed": { "message": "Could not load status." }, + "app.skin-site.admin.summary.uptime": { "message": "Uptime" }, + "app.skin-site.admin.summary.memory": { "message": "Memory usage" }, + "app.skin-site.admin.summary.users": { "message": "Users" }, + "app.skin-site.admin.summary.players": { "message": "Players" }, + "app.skin-site.admin.summary.realtime-hint": { + "message": "Live CPU and GC charts require the admin WebSocket, which is not connected yet." + }, + "app.skin-site.admin.broadcast.title": { "message": "Announcements" }, + "app.skin-site.admin.broadcast.loading": { "message": "Loading…" }, + "app.skin-site.admin.broadcast.failed": { "message": "Could not load." }, + "app.skin-site.admin.broadcast.empty": { "message": "No announcements yet." }, + "app.skin-site.admin.broadcast.create": { "message": "New announcement" }, + "app.skin-site.admin.broadcast.save": { "message": "Save" }, + "app.skin-site.admin.broadcast.cancel": { "message": "Cancel" }, + "app.skin-site.admin.broadcast.edit": { "message": "Edit" }, + "app.skin-site.admin.broadcast.remove": { "message": "Delete" }, + "app.skin-site.admin.broadcast.title-field": { "message": "Title" }, + "app.skin-site.admin.broadcast.subtitle-field": { "message": "Subtitle" }, + "app.skin-site.admin.broadcast.content-field": { "message": "Content" }, + "app.skin-site.admin.broadcast.expire-at": { "message": "Expires at" }, + "app.skin-site.admin.broadcast.star": { "message": "Highlight" }, + "app.skin-site.admin.broadcast.level": { "message": "Importance" }, + "app.skin-site.admin.broadcast.image": { "message": "Image" }, + "app.skin-site.admin.broadcast.remove-image": { "message": "Remove image" }, + "app.skin-site.admin.broadcast.created": { + "message": "Announcement created." + }, + "app.skin-site.admin.broadcast.updated": { + "message": "Announcement updated." + }, + "app.skin-site.admin.broadcast.deleted": { + "message": "Announcement deleted." + }, + "app.skin-site.admin.broadcast.confirm-delete": { + "message": "Delete “{title}”? This cannot be undone." + }, + "app.skin-site.admin.broadcast.uploader": { "message": "by {name}" }, + "app.skin-site.admin.players.title": { "message": "Players" }, + "app.skin-site.admin.players.loading": { "message": "Loading…" }, + "app.skin-site.admin.players.failed": { + "message": "Could not load players." + }, + "app.skin-site.admin.players.empty": { "message": "No players found." }, + "app.skin-site.admin.players.search": { "message": "Search" }, + "app.skin-site.admin.players.search-name": { "message": "Name" }, + "app.skin-site.admin.players.search-owner": { "message": "Owner" }, + "app.skin-site.admin.players.search-uuid": { "message": "UUID" }, + "app.skin-site.admin.players.total": { "message": "{count} players" }, + "app.skin-site.admin.players.prev": { "message": "Previous" }, + "app.skin-site.admin.players.next": { "message": "Next" }, + "app.skin-site.admin.players.page": { "message": "Page {page}" }, + "app.skin-site.admin.players.name": { "message": "Name" }, + "app.skin-site.admin.players.owner": { "message": "Owner" }, + "app.skin-site.admin.players.source": { "message": "Source" }, + "app.skin-site.admin.players.legacy": { "message": "Legacy adapted" }, + "app.skin-site.admin.players.actions": { "message": "Actions" }, + "app.skin-site.admin.players.edit": { "message": "Edit" }, + "app.skin-site.admin.players.save": { "message": "Save" }, + "app.skin-site.admin.players.cancel": { "message": "Cancel" }, + "app.skin-site.admin.players.remove": { "message": "Delete" }, + "app.skin-site.admin.players.updated": { "message": "Player updated." }, + "app.skin-site.admin.players.deleted": { "message": "Player deleted." }, + "app.skin-site.admin.players.confirm-delete": { + "message": "Delete player “{name}”? This cannot be undone." + }, + "app.skin-site.admin.players.mojang": { "message": "Mojang" }, + "app.skin-site.admin.players.custom": { "message": "Skin site" }, + "app.skin-site.admin.users.title": { "message": "Users" }, + "app.skin-site.admin.users.loading": { "message": "Loading…" }, + "app.skin-site.admin.users.failed": { "message": "Could not load users." }, + "app.skin-site.admin.users.empty": { "message": "No users found." }, + "app.skin-site.admin.users.search": { "message": "Search" }, + "app.skin-site.admin.users.search-name": { "message": "Username" }, + "app.skin-site.admin.users.search-email": { "message": "Email" }, + "app.skin-site.admin.users.search-uuid": { "message": "UUID" }, + "app.skin-site.admin.users.total": { "message": "{count} users" }, + "app.skin-site.admin.users.prev": { "message": "Previous" }, + "app.skin-site.admin.users.next": { "message": "Next" }, + "app.skin-site.admin.users.page": { "message": "Page {page}" }, + "app.skin-site.admin.users.edit": { "message": "Edit" }, + "app.skin-site.admin.users.save": { "message": "Save" }, + "app.skin-site.admin.users.cancel": { "message": "Cancel" }, + "app.skin-site.admin.users.remove": { "message": "Delete" }, + "app.skin-site.admin.users.players": { "message": "Players" }, + "app.skin-site.admin.users.updated": { "message": "User updated." }, + "app.skin-site.admin.users.deleted": { "message": "User deleted." }, + "app.skin-site.admin.users.confirm-delete": { + "message": "Delete user “{name}”? This cannot be undone." + }, + "app.skin-site.admin.users.username": { "message": "Username" }, + "app.skin-site.admin.users.email": { "message": "Email" }, + "app.skin-site.admin.users.qq": { "message": "QQ" }, + "app.skin-site.admin.users.password": { "message": "New password" }, + "app.skin-site.admin.users.password-hint": { + "message": "Leave empty to keep the current password." + }, + "app.skin-site.admin.users.banned": { "message": "Banned" }, + "app.skin-site.admin.users.permissions": { "message": "Permissions" }, + "app.skin-site.admin.users.permissions-hint": { + "message": "Comma separated, e.g. WEB_ADMIN, SERVER_ADMIN." + }, + "app.skin-site.admin.users.no-players": { "message": "No linked players." }, + "app.skin-site.admin.users.registered": { "message": "Registered" }, + "app.skin-site.admin.review.title": { "message": "Player review" }, + "app.skin-site.admin.review.loading": { "message": "Loading…" }, + "app.skin-site.admin.review.failed": { + "message": "Could not load submissions." + }, + "app.skin-site.admin.review.empty": { "message": "No submissions found." }, + "app.skin-site.admin.review.total": { "message": "{count} submissions" }, + "app.skin-site.admin.review.filter-all": { "message": "All" }, + "app.skin-site.admin.review.filter-pending": { "message": "Pending" }, + "app.skin-site.admin.review.filter-passed": { "message": "Passed" }, + "app.skin-site.admin.review.filter-rejected": { "message": "Rejected" }, + "app.skin-site.admin.review.result-pending": { "message": "Pending" }, + "app.skin-site.admin.review.result-passed": { "message": "Passed" }, + "app.skin-site.admin.review.result-rejected": { "message": "Rejected" }, + "app.skin-site.admin.review.mode-auto": { "message": "Auto" }, + "app.skin-site.admin.review.mode-manual": { "message": "Manual" }, + "app.skin-site.admin.review.applicant": { "message": "Applicant" }, + "app.skin-site.admin.review.submitted-at": { "message": "Submitted" }, + "app.skin-site.admin.review.score": { "message": "Score" }, + "app.skin-site.admin.review.reviewer": { "message": "Reviewer" }, + "app.skin-site.admin.review.details": { "message": "Details" }, + "app.skin-site.admin.review.hide": { "message": "Hide" }, + "app.skin-site.admin.review.answers": { "message": "Answers" }, + "app.skin-site.admin.review.no-answers": { "message": "No answers." }, + "app.skin-site.admin.review.auto-checks": { "message": "Automatic checks" }, + "app.skin-site.admin.review.context": { "message": "Submission context" }, + "app.skin-site.admin.review.ip": { "message": "IP" }, + "app.skin-site.admin.review.user-agent": { "message": "User agent" }, + "app.skin-site.admin.review.activity": { "message": "Activity" }, + "app.skin-site.admin.review.duration": { "message": "Duration" }, + "app.skin-site.admin.review.hidden-time": { "message": "Hidden time" }, + "app.skin-site.admin.review.screen-switches": { + "message": "Screen switches" + }, + "app.skin-site.admin.review.history": { "message": "Decision history" }, + "app.skin-site.admin.review.accept": { "message": "Accept" }, + "app.skin-site.admin.review.reject": { "message": "Reject" }, + "app.skin-site.admin.review.reason": { "message": "Reason" }, + "app.skin-site.admin.review.accept-done": { + "message": "Submission accepted." + }, + "app.skin-site.admin.review.reject-done": { + "message": "Submission rejected." + }, + "app.skin-site.admin.review.regen-invite": { "message": "Regenerate invite" }, + "app.skin-site.admin.review.invite-regenerated": { + "message": "Invite code regenerated." + }, + "app.skin-site.admin.review.invite-sent": { "message": "Email sent." }, + "app.skin-site.admin.review.invite-not-sent": { + "message": "Email not sent." + }, + "app.skin-site.admin.review.prev": { "message": "Previous" }, + "app.skin-site.admin.review.next": { "message": "Next" }, + "app.skin-site.admin.review.page": { "message": "Page {page}" }, + "app.skin-site.admin.launcher.title": { "message": "Launcher releases" }, + "app.skin-site.admin.launcher.loading": { "message": "Loading…" }, + "app.skin-site.admin.launcher.failed": { + "message": "Could not load releases." + }, + "app.skin-site.admin.launcher.empty": { + "message": "No releases uploaded yet." + }, + "app.skin-site.admin.launcher.latest-url": { "message": "Latest URL" }, + "app.skin-site.admin.launcher.version": { "message": "Version" }, + "app.skin-site.admin.launcher.channel": { "message": "Channel" }, + "app.skin-site.admin.launcher.uploader": { "message": "Uploaded by" }, + "app.skin-site.admin.launcher.uploaded-at": { "message": "Uploaded" }, + "app.skin-site.admin.launcher.published-at": { "message": "Published" }, + "app.skin-site.admin.launcher.force-update": { "message": "Forced" }, + "app.skin-site.admin.launcher.active": { "message": "Active" }, + "app.skin-site.admin.launcher.activate": { "message": "Activate" }, + "app.skin-site.admin.launcher.activated": { "message": "Release activated." }, + "app.skin-site.admin.launcher.upload": { "message": "Upload release" }, + "app.skin-site.admin.launcher.upload-hint": { + "message": "Choose a release ZIP (max 4 GiB)." + }, + "app.skin-site.admin.launcher.uploading": { "message": "Uploading…" }, + "app.skin-site.admin.launcher.upload-done": { + "message": "Release uploaded." + }, + "app.skin-site.admin.launcher.force-flag": { "message": "Force update" }, + "app.skin-site.admin.launcher.prev": { "message": "Previous" }, + "app.skin-site.admin.launcher.next": { "message": "Next" }, + "app.skin-site.admin.launcher.page": { "message": "Page {page}" }, + "app.skin-site.admin.launcher.total": { "message": "{count} releases" }, + "app.skin-site.admin.downloads.title": { "message": "Downloads" }, + "app.skin-site.admin.downloads.loading": { "message": "Loading…" }, + "app.skin-site.admin.downloads.failed": { + "message": "Could not load downloads." + }, + "app.skin-site.admin.downloads.empty": { "message": "No download items." }, + "app.skin-site.admin.downloads.categories": { "message": "Categories" }, + "app.skin-site.admin.downloads.all": { "message": "All items" }, + "app.skin-site.admin.downloads.add-category": { "message": "Add" }, + "app.skin-site.admin.downloads.category-name": { "message": "Category name" }, + "app.skin-site.admin.downloads.remove-category": { "message": "Remove" }, + "app.skin-site.admin.downloads.total": { "message": "{count} items" }, + "app.skin-site.admin.downloads.add-item": { "message": "New item" }, + "app.skin-site.admin.downloads.save": { "message": "Save" }, + "app.skin-site.admin.downloads.cancel": { "message": "Cancel" }, + "app.skin-site.admin.downloads.edit": { "message": "Edit" }, + "app.skin-site.admin.downloads.remove": { "message": "Delete" }, + "app.skin-site.admin.downloads.filename": { "message": "File name" }, + "app.skin-site.admin.downloads.description": { "message": "Description" }, + "app.skin-site.admin.downloads.routes": { "message": "Download routes" }, + "app.skin-site.admin.downloads.route-name": { "message": "Name" }, + "app.skin-site.admin.downloads.route-url": { "message": "URL" }, + "app.skin-site.admin.downloads.add-route": { "message": "Add route" }, + "app.skin-site.admin.downloads.remove-route": { "message": "Remove" }, + "app.skin-site.admin.downloads.statuses": { "message": "Statuses" }, + "app.skin-site.admin.downloads.bind-category": { "message": "Categories" }, + "app.skin-site.admin.downloads.uploader": { "message": "by {name}" }, + "app.skin-site.admin.downloads.created": { "message": "Item created." }, + "app.skin-site.admin.downloads.updated": { "message": "Item updated." }, + "app.skin-site.admin.downloads.deleted": { "message": "Item deleted." }, + "app.skin-site.admin.downloads.category-added": { + "message": "Category added." + }, + "app.skin-site.admin.downloads.category-deleted": { + "message": "Category deleted." + }, + "app.skin-site.admin.downloads.confirm-delete-item": { + "message": "Delete “{name}”? This cannot be undone." + }, + "app.skin-site.admin.downloads.confirm-delete-category": { + "message": "Delete category “{name}”?" + }, + "app.skin-site.admin.servers.title": { "message": "Map servers" }, + "app.skin-site.admin.servers.loading": { "message": "Loading…" }, + "app.skin-site.admin.servers.failed": { + "message": "Could not load servers." + }, + "app.skin-site.admin.servers.empty": { + "message": "No map servers configured." + }, + "app.skin-site.admin.servers.server-name": { "message": "Server name" }, + "app.skin-site.admin.servers.internal": { "message": "Internal" }, + "app.skin-site.admin.servers.maps": { "message": "Maps" }, + "app.skin-site.admin.servers.map-name": { "message": "Map name" }, + "app.skin-site.admin.servers.map-url": { "message": "Map URL" }, + "app.skin-site.admin.servers.add-map": { "message": "Add map" }, + "app.skin-site.admin.servers.remove-map": { "message": "Remove" }, + "app.skin-site.admin.servers.add-server": { "message": "Add server" }, + "app.skin-site.admin.servers.remove-server": { "message": "Remove server" }, + "app.skin-site.admin.servers.save": { "message": "Save changes" }, + "app.skin-site.admin.servers.saving": { "message": "Saving…" }, + "app.skin-site.admin.servers.saved": { "message": "Map servers saved." }, + "app.skin-site.admin.audit.title": { "message": "Access audit" }, + "app.skin-site.admin.audit.loading": { "message": "Loading…" }, + "app.skin-site.admin.audit.failed": { + "message": "Could not load audit log." + }, + "app.skin-site.admin.audit.empty": { "message": "No audit entries." }, + "app.skin-site.admin.audit.subject": { "message": "Subject" }, + "app.skin-site.admin.audit.action": { "message": "Action" }, + "app.skin-site.admin.audit.source-ip": { "message": "Source IP" }, + "app.skin-site.admin.audit.reported-ip": { "message": "Reported player IP" }, + "app.skin-site.admin.audit.count": { "message": "Count" }, + "app.skin-site.admin.audit.first-at": { "message": "First seen" }, + "app.skin-site.admin.audit.last-at": { "message": "Last seen" }, + "app.skin-site.admin.audit.proxy": { "message": "Proxy" }, + "app.skin-site.admin.audit.internal": { "message": "Internal" }, + "app.skin-site.admin.audit.search-subject": { "message": "Subject" }, + "app.skin-site.admin.audit.search-ip": { "message": "IP" }, + "app.skin-site.admin.audit.search-action": { "message": "Action" }, + "app.skin-site.admin.audit.search": { "message": "Search" }, + "app.skin-site.admin.audit.clear": { "message": "Clear" }, + "app.skin-site.admin.audit.load-more": { "message": "Load more" }, + "app.skin-site.admin.audit.retention": { "message": "Retention (days)" }, + "app.skin-site.admin.audit.record-limit": { "message": "Record limit" }, + "app.skin-site.admin.audit.save-retention": { "message": "Save" }, + "app.skin-site.admin.audit.retention-saved": { + "message": "Retention updated." + }, + "app.skin-site.admin.donations.title": { "message": "Donations" }, + "app.skin-site.admin.donations.loading": { "message": "Loading…" }, + "app.skin-site.admin.donations.failed": { + "message": "Could not load donations." + }, + "app.skin-site.admin.donations.empty": { "message": "No donations yet." }, + "app.skin-site.admin.donations.total-amount": { "message": "Total" }, + "app.skin-site.admin.donations.donor-count": { "message": "Donors" }, + "app.skin-site.admin.donations.donor": { "message": "Donor" }, + "app.skin-site.admin.donations.amount": { "message": "Amount" }, + "app.skin-site.admin.donations.updated-at": { "message": "Updated" }, + "app.skin-site.admin.donations.external": { "message": "External" }, + "app.skin-site.admin.donations.linked": { "message": "Linked" }, + "app.skin-site.admin.donations.create": { "message": "Add donation" }, + "app.skin-site.admin.donations.save": { "message": "Save" }, + "app.skin-site.admin.donations.cancel": { "message": "Cancel" }, + "app.skin-site.admin.donations.edit": { "message": "Edit" }, + "app.skin-site.admin.donations.remove": { "message": "Delete" }, + "app.skin-site.admin.donations.amount-field": { "message": "Amount" }, + "app.skin-site.admin.donations.display-name": { "message": "Display name" }, + "app.skin-site.admin.donations.user-uuid": { "message": "User UUID" }, + "app.skin-site.admin.donations.qq": { "message": "QQ" }, + "app.skin-site.admin.donations.append-mode": { + "message": "Append to existing amount" + }, + "app.skin-site.admin.donations.created": { "message": "Donation created." }, + "app.skin-site.admin.donations.updated": { "message": "Donation updated." }, + "app.skin-site.admin.donations.deleted": { "message": "Donation deleted." }, + "app.skin-site.admin.donations.confirm-delete": { + "message": "Delete the donation from “{name}”? This cannot be undone." + }, + "app.skin-site.admin.donations.load-more": { "message": "Load more" }, + "app.skin-site.admin.mods.title": { "message": "Mods" }, + "app.skin-site.admin.mods.tab-mods": { "message": "Mod files" }, + "app.skin-site.admin.mods.tab-tags": { "message": "Rule tags" }, + "app.skin-site.admin.mods.tab-runtime": { "message": "Runtime" }, + "app.skin-site.admin.mods.loading": { "message": "Loading…" }, + "app.skin-site.admin.mods.failed": { "message": "Could not load mods." }, + "app.skin-site.admin.mods.empty": { "message": "No mods found." }, + "app.skin-site.admin.mods.total": { "message": "{count} mods" }, + "app.skin-site.admin.mods.search": { "message": "Search by name" }, + "app.skin-site.admin.mods.filter-all": { "message": "All tags" }, + "app.skin-site.admin.mods.prev": { "message": "Previous" }, + "app.skin-site.admin.mods.next": { "message": "Next" }, + "app.skin-site.admin.mods.page": { "message": "Page {page}" }, + "app.skin-site.admin.mods.name": { "message": "Name" }, + "app.skin-site.admin.mods.version": { "message": "Version" }, + "app.skin-site.admin.mods.mod-id": { "message": "Mod ID" }, + "app.skin-site.admin.mods.size": { "message": "Size" }, + "app.skin-site.admin.mods.loaders": { "message": "Loaders" }, + "app.skin-site.admin.mods.domain-rules": { "message": "Domain rules" }, + "app.skin-site.admin.mods.edit": { "message": "Edit" }, + "app.skin-site.admin.mods.save": { "message": "Save" }, + "app.skin-site.admin.mods.cancel": { "message": "Cancel" }, + "app.skin-site.admin.mods.remove": { "message": "Delete" }, + "app.skin-site.admin.mods.updated": { "message": "Mod updated." }, + "app.skin-site.admin.mods.deleted": { "message": "Mod deleted." }, + "app.skin-site.admin.mods.confirm-delete": { + "message": "Delete mod “{name}”? This cannot be undone." + }, + "app.skin-site.admin.mods.rule-tags": { "message": "Rule tags" }, + "app.skin-site.admin.mods.tag-name": { "message": "Tag name" }, + "app.skin-site.admin.mods.tag-rules": { "message": "Rules" }, + "app.skin-site.admin.mods.tag-rules-hint": { + "message": "One rule per line." + }, + "app.skin-site.admin.mods.new-tag": { "message": "New tag" }, + "app.skin-site.admin.mods.tag-created": { "message": "Tag created." }, + "app.skin-site.admin.mods.tag-updated": { "message": "Tag updated." }, + "app.skin-site.admin.mods.tag-deleted": { "message": "Tag deleted." }, + "app.skin-site.admin.mods.confirm-delete-tag": { + "message": "Delete tag “{name}”?" + }, + "app.skin-site.admin.mods.runtime": { "message": "Runtime releases" }, + "app.skin-site.admin.mods.manifest-url": { "message": "Manifest URL" }, + "app.skin-site.admin.mods.upload-runtime": { "message": "Upload runtime" }, + "app.skin-site.admin.mods.runtime-version": { "message": "Version" }, + "app.skin-site.admin.mods.uploading": { "message": "Uploading…" }, + "app.skin-site.admin.mods.runtime-uploaded": { + "message": "Runtime uploaded." + }, + "app.skin-site.admin.mods.activate": { "message": "Activate" }, + "app.skin-site.admin.mods.activated": { "message": "Runtime activated." }, + "app.skin-site.admin.mods.available": { "message": "Available" }, + "app.skin-site.admin.mods.unavailable": { "message": "Unavailable" }, + "app.skin-site.admin.mods.active": { "message": "Active" }, + "app.skin-site.admin.mods.uploader": { "message": "by {name}" }, + "app.skin-site.home.nav.title": { "message": "Skin site" }, + "app.skin-site.home.nav.download": { "message": "Downloads" }, + "app.skin-site.home.nav.download-desc": { + "message": "Browse files shared by the server." + }, + "app.skin-site.home.nav.review": { "message": "Player review" }, + "app.skin-site.home.nav.review-desc": { + "message": "Submit and review player applications." + }, + "app.skin-site.home.nav.wiki": { "message": "Server wiki" }, + "app.skin-site.home.nav.wiki-desc": { + "message": "Guides and documentation for the server." + }, + "app.skin-site.home.nav.bugs": { "message": "Bug tracker" }, + "app.skin-site.home.nav.bugs-desc": { + "message": "Report issues and follow their progress." + }, + "app.skin-site.home.nav.map": { "message": "Server map" }, + "app.skin-site.home.nav.map-desc": { + "message": "Explore the live world map." + }, + "app.skin-site.home.nav.profile": { "message": "Profile" }, + "app.skin-site.home.nav.profile-desc": { + "message": "Manage your account and textures." + }, + "app.skin-site.admin.wiki.title": { "message": "Wiki" }, + "app.skin-site.admin.wiki.tab-page": { "message": "Page" }, + "app.skin-site.admin.wiki.tab-audit": { "message": "Audit log" }, + "app.skin-site.admin.wiki.tab-settings": { "message": "Settings" }, + "app.skin-site.admin.wiki.loading": { "message": "Loading…" }, + "app.skin-site.admin.wiki.page-path": { "message": "Page path" }, + "app.skin-site.admin.wiki.load-page": { "message": "Load page" }, + "app.skin-site.admin.wiki.page-not-found": { "message": "Page not found." }, + "app.skin-site.admin.wiki.revision": { "message": "Revision" }, + "app.skin-site.admin.wiki.author": { "message": "Author" }, + "app.skin-site.admin.wiki.updated-at": { "message": "Updated" }, + "app.skin-site.admin.wiki.categories": { "message": "Categories" }, + "app.skin-site.admin.wiki.read-policy": { "message": "Read policy" }, + "app.skin-site.admin.wiki.edit-policy": { "message": "Edit policy" }, + "app.skin-site.admin.wiki.save-protect": { "message": "Save policies" }, + "app.skin-site.admin.wiki.protect-saved": { + "message": "Page policies updated." + }, + "app.skin-site.admin.wiki.set-home": { "message": "Set as home page" }, + "app.skin-site.admin.wiki.home-set": { "message": "Home page updated." }, + "app.skin-site.admin.wiki.set-deleted": { "message": "Mark as deleted" }, + "app.skin-site.admin.wiki.set-restored": { "message": "Restore page" }, + "app.skin-site.admin.wiki.deleted-updated": { + "message": "Page deletion state updated." + }, + "app.skin-site.admin.wiki.audit-empty": { "message": "No audit entries." }, + "app.skin-site.admin.wiki.audit-target": { "message": "Target" }, + "app.skin-site.admin.wiki.load-more": { "message": "Load more" }, + "app.skin-site.admin.wiki.settings-hint": { + "message": "Comma separated domains." + }, + "app.skin-site.admin.wiki.domains": { "message": "Domains" }, + "app.skin-site.admin.wiki.home-page": { "message": "Home page" }, + "app.skin-site.admin.wiki.default-skin": { "message": "Default skin" }, + "app.skin-site.admin.wiki.max-page-bytes": { "message": "Max page bytes" }, + "app.skin-site.admin.wiki.max-attachment-bytes": { + "message": "Max attachment bytes" + }, + "app.skin-site.admin.wiki.save-settings": { "message": "Save settings" }, + "app.skin-site.admin.wiki.settings-saved": { "message": "Settings saved." }, + "app.skin-site.admin.review.tab-list": { "message": "Submissions" }, + "app.skin-site.admin.review.tab-papers": { "message": "Papers" }, + "app.skin-site.admin.review.papers-empty": { + "message": "No review papers yet." + }, + "app.skin-site.admin.review.new-paper": { "message": "New paper" }, + "app.skin-site.admin.review.edit-paper": { "message": "Edit" }, + "app.skin-site.admin.review.paper-title": { "message": "Title" }, + "app.skin-site.admin.review.paper-annotation": { "message": "Description" }, + "app.skin-site.admin.review.paper-enabled": { "message": "Enabled" }, + "app.skin-site.admin.review.paper-mode": { "message": "Mode" }, + "app.skin-site.admin.review.paper-pass-score": { "message": "Pass score" }, + "app.skin-site.admin.review.paper-target-permissions": { + "message": "Target permissions" + }, + "app.skin-site.admin.review.paper-questions": { "message": "Questions" }, + "app.skin-site.admin.review.add-question": { "message": "Add question" }, + "app.skin-site.admin.review.question-title": { "message": "Question title" }, + "app.skin-site.admin.review.question-type": { "message": "Type" }, + "app.skin-site.admin.review.question-score": { "message": "Score" }, + "app.skin-site.admin.review.question-annotation": { "message": "Annotation" }, + "app.skin-site.admin.review.add-option": { "message": "Add option" }, + "app.skin-site.admin.review.option-description": { "message": "Option text" }, + "app.skin-site.admin.review.option-correct": { "message": "Correct" }, + "app.skin-site.admin.review.remove-question": { "message": "Remove" }, + "app.skin-site.admin.review.question-no": { "message": "Question {n}" }, + "app.skin-site.admin.review.paper-created": { "message": "Paper created." }, + "app.skin-site.admin.review.paper-saved": { "message": "Paper saved." }, + "app.skin-site.admin.review.mail-title": { "message": "Pass mail" }, + "app.skin-site.admin.review.mail-enabled": { "message": "Send mail on pass" }, + "app.skin-site.admin.review.mail-subject": { "message": "Subject" }, + "app.skin-site.admin.review.mail-message": { "message": "Body" }, + "app.skin-site.admin.review.mail-extra": { "message": "Extra text" }, + "app.skin-site.admin.review.mail-include-invite": { + "message": "Include invite code" + }, + "app.skin-site.admin.review.prevent-duplicate": { + "message": "Reject duplicate submissions" + }, + "app.skin-site.admin.review.copy-link": { "message": "Copy link" }, + "app.skin-site.admin.review.link-copied": { "message": "Link copied." }, + "app.skin-site.admin.review.move-up": { "message": "Move up" }, + "app.skin-site.admin.review.move-down": { "message": "Move down" }, + "app.skin-site.admin.review.mail-subject-required": { + "message": "Subject is required when mail is enabled." + }, + "app.skin-site.admin.review.mail-message-required": { + "message": "Body is required when mail is enabled." + }, + "app.skin-site.admin.users.actions": { "message": "Actions" }, + "app.skin-site.admin.users.audit": { "message": "Audit" }, + "app.skin-site.admin.users.audit-empty": { + "message": "No audit records yet." + }, + "app.skin-site.admin.users.audit-more": { "message": "Load earlier" }, + "app.skin-site.admin.users.audit-title": { + "message": "User management audit" + }, + "app.skin-site.admin.users.bot": { "message": "Bot" }, + "app.skin-site.admin.users.bot-active": { "message": "Token valid" }, + "app.skin-site.admin.users.bot-ban": { "message": "Ban bot creation" }, + "app.skin-site.admin.users.bot-creation-banned": { + "message": "Token creation banned" + }, + "app.skin-site.admin.users.bot-exists": { "message": "Bot created" }, + "app.skin-site.admin.users.bot-inactive": { "message": "Token invalidated" }, + "app.skin-site.admin.users.bot-invalidate": { "message": "Invalidate token" }, + "app.skin-site.admin.users.bot-not-exists": { "message": "No bot yet" }, + "app.skin-site.admin.users.bot-save-username": { + "message": "Save bot username" + }, + "app.skin-site.admin.users.bot-title": { "message": "Bot management" }, + "app.skin-site.admin.users.bot-token-hint": { "message": "Token hint" }, + "app.skin-site.admin.users.bot-unban": { "message": "Unban bot creation" }, + "app.skin-site.admin.users.bot-username": { "message": "Bot username" }, + "app.skin-site.admin.users.bound-players-title": { + "message": "Linked players" + }, + "app.skin-site.admin.users.frequency": { "message": "Rate limit" }, + "app.skin-site.admin.users.frequency-clear": { "message": "Clear limit" }, + "app.skin-site.admin.users.frequency-current": { + "message": "Currently {percent}%" + }, + "app.skin-site.admin.users.frequency-hint": { + "message": "Packets from this user will be dropped at the given rate." + }, + "app.skin-site.admin.users.frequency-none": { "message": "Not enabled" }, + "app.skin-site.admin.users.frequency-range": { + "message": "Only integer values from 10% to 100% are allowed." + }, + "app.skin-site.admin.users.frequency-save": { "message": "Save limit" }, + "app.skin-site.admin.users.frequency-title": { "message": "Rate limit" }, + "app.skin-site.admin.users.invite": { "message": "Invite user" }, + "app.skin-site.admin.users.invite-copied": { + "message": "Invite code copied." + }, + "app.skin-site.admin.users.invite-copy": { "message": "Copy" }, + "app.skin-site.admin.users.invite-email": { "message": "Email" }, + "app.skin-site.admin.users.invite-email-invalid": { + "message": "Enter a valid email address." + }, + "app.skin-site.admin.users.invite-generate": { + "message": "Generate invite code" + }, + "app.skin-site.admin.users.invite-title": { "message": "Invite user" }, + "app.skin-site.admin.users.legacy-adapted": { + "message": "Legacy internal adapted" + }, + "app.skin-site.admin.users.registered-at": { "message": "Registered at" }, + "app.skin-site.admin.users.status": { "message": "Status" }, + "app.skin-site.admin.users.status-banned": { "message": "Banned" }, + "app.skin-site.admin.users.status-normal": { "message": "Normal" }, + "app.skin-site.admin.mods.upload": { "message": "Upload" }, + "app.skin-site.admin.mods.select-mode": { "message": "Select multiple" }, + "app.skin-site.admin.mods.exit-select": { "message": "Done selecting" }, + "app.skin-site.admin.mods.select-all": { "message": "Select all" }, + "app.skin-site.admin.mods.clear-selection": { "message": "Clear selection" }, + "app.skin-site.admin.mods.selected-count": { "message": "{count} selected" }, + "app.skin-site.admin.mods.delete-selected": { "message": "Delete selected" }, + "app.skin-site.admin.mods.confirm-delete-multi": { + "message": "Delete {count} selected mods? This cannot be undone." + }, + "app.skin-site.admin.mods.deleted-multi": { + "message": "Selected mods deleted." + }, + "app.skin-site.admin.mods.server-address": { "message": "Server address" }, + "app.skin-site.admin.mods.server-address-hint": { + "message": "Filter by server address" + }, + "app.skin-site.admin.mods.apply": { "message": "Apply" }, + "app.skin-site.admin.mods.clear": { "message": "Clear" }, + "app.skin-site.admin.mods.upload-title": { "message": "Upload mods" }, + "app.skin-site.admin.mods.upload-drop": { + "message": "Drag .jar files here, or click to choose" + }, + "app.skin-site.admin.mods.upload-sub": { + "message": "Multiple files supported, up to {size} MB each" + }, + "app.skin-site.admin.mods.upload-tags": { "message": "Attach rule tags" }, + "app.skin-site.admin.mods.upload-queue": { "message": "Files" }, + "app.skin-site.admin.mods.upload-pending": { "message": "Pending" }, + "app.skin-site.admin.mods.upload-checking": { "message": "Checking…" }, + "app.skin-site.admin.mods.upload-uploading": { "message": "Uploading…" }, + "app.skin-site.admin.mods.upload-conflict": { "message": "Name exists" }, + "app.skin-site.admin.mods.upload-success": { "message": "Done" }, + "app.skin-site.admin.mods.upload-error": { "message": "Failed" }, + "app.skin-site.admin.mods.upload-exists": { + "message": "This file already exists on the server." + }, + "app.skin-site.admin.mods.upload-name-conflict": { + "message": "A mod with the same file name already exists" + }, + "app.skin-site.admin.mods.upload-name-conflict-hint": { + "message": "Overwrite the existing mod, or skip this file." + }, + "app.skin-site.admin.mods.upload-overwrite": { "message": "Overwrite" }, + "app.skin-site.admin.mods.upload-skip": { "message": "Skip" }, + "app.skin-site.admin.mods.upload-close": { "message": "Close" }, + "app.skin-site.admin.mods.upload-all-done": { + "message": "All files processed." + }, + "app.skin-site.admin.mods.upload-too-large": { + "message": "File too large: {name}" + }, + "app.skin-site.chat.avatar.label": { "message": "Room avatar" }, + "app.skin-site.chat.avatar.upload": { "message": "Upload avatar" }, + "app.skin-site.chat.avatar.replace": { "message": "Replace avatar" }, + "app.skin-site.chat.avatar.remove": { "message": "Remove avatar" }, + "app.skin-site.chat.avatar.hint": { + "message": "PNG, JPEG or WebP, up to 8192 px per side and 5 MB." + }, + "app.skin-site.chat.avatar.bad-format": { + "message": "Only PNG, JPEG and WebP are supported." + }, + "app.skin-site.chat.avatar.too-large": { + "message": "Avatar must not exceed 5 MB." + }, + "app.skin-site.chat.avatar.not-image": { + "message": "Avatar must be an image." + }, + "app.skin-site.chat.admin.title": { "message": "Chat rooms" }, + "app.skin-site.chat.admin.subtitle": { + "message": "Create public or private rooms and hand daily moderation to trusted members." + }, + "app.skin-site.chat.admin.create-room": { "message": "Create room" }, + "app.skin-site.chat.admin.loading": { "message": "Loading…" }, + "app.skin-site.chat.admin.failed": { "message": "Could not load rooms." }, + "app.skin-site.chat.admin.empty": { "message": "No chat rooms yet." }, + "app.skin-site.chat.admin.edit": { "message": "Edit" }, + "app.skin-site.chat.admin.remove": { "message": "Delete" }, + "app.skin-site.chat.admin.save": { "message": "Save" }, + "app.skin-site.chat.admin.cancel": { "message": "Cancel" }, + "app.skin-site.chat.admin.name": { "message": "Name" }, + "app.skin-site.chat.admin.description": { "message": "Description" }, + "app.skin-site.chat.admin.visibility": { "message": "Visibility" }, + "app.skin-site.chat.admin.visibility-public": { "message": "Public" }, + "app.skin-site.chat.admin.visibility-private": { "message": "Private" }, + "app.skin-site.chat.admin.kind": { "message": "Kind" }, + "app.skin-site.chat.admin.kind-standard": { "message": "Standard" }, + "app.skin-site.chat.admin.kind-settlement": { "message": "Settlement" }, + "app.skin-site.chat.admin.prerequisite-mode": { + "message": "Prerequisite mode" + }, + "app.skin-site.chat.admin.prerequisite-any": { "message": "Any" }, + "app.skin-site.chat.admin.prerequisite-all": { "message": "All" }, + "app.skin-site.chat.admin.prerequisite-permissions": { + "message": "Required permissions" + }, + "app.skin-site.chat.admin.prerequisite-hint": { + "message": "Comma separated. Leave empty for no restriction." + }, + "app.skin-site.chat.admin.created": { "message": "Room created." }, + "app.skin-site.chat.admin.updated": { "message": "Room updated." }, + "app.skin-site.chat.admin.deleted": { "message": "Room deleted." }, + "app.skin-site.chat.admin.confirm-delete": { + "message": "Permanently delete room “{name}” and all its messages?" + }, + "app.skin-site.chat.admin.manager-badge": { "message": "Manager" }, + "app.skin-site.chat.admin.voice-badge": { "message": "Voice" }, + "app.skin-site.chat.user-picker.label": { "message": "Pick a user" }, + "app.skin-site.chat.user-picker.placeholder": { + "message": "Search username, email or account ID" + }, + "app.skin-site.chat.user-picker.by-user": { "message": "By user" }, + "app.skin-site.chat.user-picker.by-player": { "message": "By player" }, + "app.skin-site.chat.user-picker.hint": { + "message": "Fuzzy search on username and email, or search by account ID." + }, + "app.skin-site.chat.user-picker.player-hint": { + "message": "Enter a player name to find the bound user." + }, + "app.skin-site.chat.user-picker.empty": { "message": "No matching user." }, + "app.skin-site.chat.user-picker.banned": { + "message": "This account is banned." + }, + "app.skin-site.chat.user-picker.guest": { + "message": "Guests cannot become a manager or settlement owner." + }, + "app.skin-site.chat.user-picker.already-in": { + "message": "This user is already in the room." + }, + "app.skin-site.chat.user-picker.not-allowed": { + "message": "This user is outside the allowed range." + }, + "app.skin-site.chat.user-picker.select": { "message": "Select" }, + "app.skin-site.chat.user-picker.selected": { "message": "Selected" }, + "app.skin-site.chat.user-picker.id": { "message": "ID" }, + "app.skin-site.chat.admin.managers": { "message": "Managers" }, + "app.skin-site.chat.admin.manager-title": { "message": "Room manager" }, + "app.skin-site.chat.admin.manager-hint": { + "message": "Managers can moderate members, messages and files in this room." + }, + "app.skin-site.chat.admin.grant": { "message": "Grant" }, + "app.skin-site.chat.admin.revoke": { "message": "Revoke" }, + "app.skin-site.chat.admin.manager-granted": { "message": "Manager granted." }, + "app.skin-site.chat.admin.manager-revoked": { "message": "Manager revoked." }, + "app.skin-site.chat.admin.owner-title": { "message": "Settlement owner" }, + "app.skin-site.chat.admin.owner-hint": { + "message": "Assign the first settlement owner for this room." + }, + "app.skin-site.chat.admin.owner-assigned": { + "message": "Settlement owner assigned." + }, + "app.skin-site.chat.admin.owner-current": { + "message": "Current owner: {name}" + }, + "app.skin-site.chat.admin.owner-none": { + "message": "No settlement owner yet." + }, + "app.skin-site.chat.admin.audit": { "message": "Audit" }, + "app.skin-site.chat.admin.audit-title": { "message": "Room audit" }, + "app.skin-site.chat.admin.audit-empty": { + "message": "No audit records yet." + }, + "app.skin-site.chat.admin.audit-target": { "message": "Target: {name}" }, + "app.skin-site.chat.admin.close": { "message": "Close" }, + "app.skin-site.chat.voice-runtime-title": { + "message": "Realtime voice runtime" + }, + "app.skin-site.chat.voice-logs": { "message": "View logs" }, + "app.skin-site.chat.voice-config": { "message": "Configure runtime" }, + "app.skin-site.chat.voice-retry": { "message": "Retry deployment" }, + "app.skin-site.chat.voice-config-title": { + "message": "Voice runtime configuration" + }, + "app.skin-site.chat.voice-logs-title": { "message": "LiveKit logs" }, + "app.skin-site.chat.voice-capacity-title": { "message": "Voice capacity" }, + "app.skin-site.chat.voice-capacity": { "message": "Voice capacity" }, + "app.skin-site.chat.participant-limit": { "message": "Participant limit" }, + "app.skin-site.chat.listener-limit": { "message": "Listener limit" }, + "app.skin-site.chat.voice-capacity-updated": { + "message": "Voice capacity updated." + }, + "app.skin-site.chat.voice-enabled": { "message": "Enable realtime voice" }, + "app.skin-site.chat.voice-runtime-path": { "message": "Runtime directory" }, + "app.skin-site.chat.voice-mirror": { "message": "Mirror base URL" }, + "app.skin-site.chat.voice-public-url": { "message": "Public URL" }, + "app.skin-site.chat.voice-bind": { "message": "Bind address" }, + "app.skin-site.chat.voice-signal-port": { "message": "Signal port" }, + "app.skin-site.chat.voice-rtc-tcp-port": { "message": "Media TCP port" }, + "app.skin-site.chat.voice-rtc-udp-port": { "message": "Media UDP port" }, + "app.skin-site.chat.voice-startup-timeout": { + "message": "Startup timeout (s)" + }, + "app.skin-site.chat.voice-use-external-ip": { "message": "Use external IP" }, + "app.skin-site.chat.voice-node-ip": { "message": "Node IP" }, + "app.skin-site.chat.voice-saved": { "message": "Voice configuration saved." }, + "app.skin-site.chat.voice-logs-auto-refresh": { "message": "Auto refresh" }, + "app.skin-site.chat.voice-logs-refresh": { "message": "Refresh" }, + "app.skin-site.chat.voice-logs-empty": { "message": "No logs yet." }, + "app.skin-site.chat.admin.voice-runtime-title": { + "message": "Realtime voice runtime" + }, + "app.skin-site.chat.admin.voice-logs": { "message": "View logs" }, + "app.skin-site.chat.admin.voice-config": { "message": "Configure runtime" }, + "app.skin-site.chat.admin.voice-retry": { "message": "Retry deployment" }, + "app.skin-site.chat.admin.voice-config-title": { + "message": "Voice runtime configuration" + }, + "app.skin-site.chat.admin.voice-logs-title": { "message": "LiveKit logs" }, + "app.skin-site.chat.admin.voice-capacity-title": { + "message": "Voice capacity" + }, + "app.skin-site.chat.admin.voice-capacity": { "message": "Voice capacity" }, + "app.skin-site.chat.admin.participant-limit": { + "message": "Participant limit" + }, + "app.skin-site.chat.admin.listener-limit": { "message": "Listener limit" }, + "app.skin-site.chat.admin.voice-capacity-updated": { + "message": "Voice capacity updated." + }, + "app.skin-site.chat.admin.voice-enabled": { + "message": "Enable realtime voice" + }, + "app.skin-site.chat.admin.voice-runtime-path": { + "message": "Runtime directory" + }, + "app.skin-site.chat.admin.voice-mirror": { "message": "Mirror base URL" }, + "app.skin-site.chat.admin.voice-public-url": { "message": "Public URL" }, + "app.skin-site.chat.admin.voice-bind": { "message": "Bind address" }, + "app.skin-site.chat.admin.voice-signal-port": { "message": "Signal port" }, + "app.skin-site.chat.admin.voice-rtc-tcp-port": { + "message": "Media TCP port" + }, + "app.skin-site.chat.admin.voice-rtc-udp-port": { + "message": "Media UDP port" + }, + "app.skin-site.chat.admin.voice-startup-timeout": { + "message": "Startup timeout (s)" + }, + "app.skin-site.chat.admin.voice-use-external-ip": { + "message": "Use external IP" + }, + "app.skin-site.chat.admin.voice-node-ip": { "message": "Node IP" }, + "app.skin-site.chat.admin.voice-saved": { + "message": "Voice configuration saved." + }, + "app.skin-site.chat.admin.voice-logs-auto-refresh": { + "message": "Auto refresh" + }, + "app.skin-site.chat.admin.voice-logs-refresh": { "message": "Refresh" }, + "app.skin-site.chat.admin.voice-logs-empty": { "message": "No logs yet." }, + "app.skin-site.admin.wiki.tab-migration": { "message": "Migration" }, + "app.skin-site.admin.wiki.migration-title": { + "message": "MediaWiki migration" + }, + "app.skin-site.admin.wiki.migration-hint": { + "message": "Migrated content lands in a hidden staging area and is published in one batch after every page is reviewed." + }, + "app.skin-site.admin.wiki.auto-title": { + "message": "Read from MediaWiki API" + }, + "app.skin-site.admin.wiki.api-url": { "message": "api.php URL" }, + "app.skin-site.admin.wiki.bot-username": { + "message": "Bot username (optional)" + }, + "app.skin-site.admin.wiki.bot-password": { + "message": "Bot password (optional)" + }, + "app.skin-site.admin.wiki.credentials-hint": { + "message": "Credentials stay in memory for this job only. HTTPS is required when supplied." + }, + "app.skin-site.admin.wiki.allow-private": { + "message": "Allow private network source" + }, + "app.skin-site.admin.wiki.allow-private-hint": { + "message": "Private sources may reach services inside the server network." + }, + "app.skin-site.admin.wiki.start-auto": { + "message": "Create automatic migration job" + }, + "app.skin-site.admin.wiki.xml-title": { "message": "Import MediaWiki XML" }, + "app.skin-site.admin.wiki.xml-file": { "message": "Export file" }, + "app.skin-site.admin.wiki.start-xml": { "message": "Upload and stage" }, + "app.skin-site.admin.wiki.stale-rules": { + "message": "Stale page detection rules" + }, + "app.skin-site.admin.wiki.stale-days": { "message": "Days without update" }, + "app.skin-site.admin.wiki.maintainer-window": { + "message": "Maintainer window (days)" + }, + "app.skin-site.admin.wiki.max-maintainers": { "message": "Max maintainers" }, + "app.skin-site.admin.wiki.stale-markers": { + "message": "Stale categories, templates or text" + }, + "app.skin-site.admin.wiki.stale-markers-hint": { + "message": "Comma separated" + }, + "app.skin-site.admin.wiki.jobs": { "message": "Migration jobs" }, + "app.skin-site.admin.wiki.refresh-jobs": { "message": "Refresh" }, + "app.skin-site.admin.wiki.jobs-empty": { + "message": "No migration jobs yet." + }, + "app.skin-site.admin.wiki.reviewed-count": { + "message": "Reviewed {reviewed} / {total}" + }, + "app.skin-site.admin.wiki.imported-excluded": { + "message": "Imported {imported} · Excluded {excluded}" + }, + "app.skin-site.admin.wiki.view-job": { "message": "View job" }, + "app.skin-site.admin.wiki.delete-job": { "message": "Delete job record" }, + "app.skin-site.admin.wiki.confirm-delete-job": { + "message": "Delete migration job #{id}? This cannot be undone." + }, + "app.skin-site.admin.wiki.candidates": { "message": "Candidate pages" }, + "app.skin-site.admin.wiki.candidates-empty": { + "message": "Select a job to review its pages." + }, + "app.skin-site.admin.wiki.last-updated": { "message": "Updated {date}" }, + "app.skin-site.admin.wiki.maintainer-count": { + "message": "{count} maintainers" + }, + "app.skin-site.admin.wiki.conflict": { "message": "Title conflict" }, + "app.skin-site.admin.wiki.target-title": { "message": "Target title" }, + "app.skin-site.admin.wiki.overwrite": { "message": "Overwrite" }, + "app.skin-site.admin.wiki.import": { "message": "Import" }, + "app.skin-site.admin.wiki.exclude": { "message": "Exclude" }, + "app.skin-site.admin.wiki.publish": { "message": "Publish batch" }, + "app.skin-site.admin.wiki.rollback": { "message": "Roll back" }, + "app.skin-site.admin.wiki.confirm-rollback": { + "message": "Roll back this migration batch? Published pages will be reverted." + }, + "app.skin-site.admin.wiki.state-importing": { "message": "Importing" }, + "app.skin-site.admin.wiki.state-review": { "message": "Waiting review" }, + "app.skin-site.admin.wiki.state-publishing": { "message": "Publishing" }, + "app.skin-site.admin.wiki.state-published": { "message": "Published" }, + "app.skin-site.admin.wiki.state-failed": { "message": "Failed" }, + "app.skin-site.admin.wiki.state-rolled-back": { "message": "Rolled back" }, + "app.skin-site.admin.wiki.decision-pending": { "message": "Pending" }, + "app.skin-site.admin.wiki.decision-import": { "message": "Import" }, + "app.skin-site.admin.wiki.decision-exclude": { "message": "Exclude" }, + "app.skin-site.admin.wiki.migration-started": { + "message": "Migration job created." + }, + "app.skin-site.admin.wiki.xml-staged": { + "message": "XML parsed and staged for review." + }, + "app.skin-site.admin.wiki.published": { + "message": "Published {imported} pages, overwrote {overwritten}." + }, + "app.skin-site.admin.wiki.rolled-back": { + "message": "Migration batch rolled back." + }, + "app.skin-site.admin.wiki.job-deleted": { + "message": "Migration record deleted." + }, + "app.skin-site.admin.wiki.select-xml": { + "message": "Choose a MediaWiki XML file first." + }, + "app.skin-site.wiki.title": { "message": "StarLight Wiki" }, + "app.skin-site.wiki.search-placeholder": { "message": "Enter a page title" }, + "app.skin-site.wiki.open": { "message": "Open" }, + "app.skin-site.wiki.loading": { "message": "Loading…" }, + "app.skin-site.wiki.not-found": { "message": "Page not found." }, + "app.skin-site.wiki.empty": { + "message": "Enter a page title above to start reading." + }, + "app.skin-site.wiki.updated-at": { + "message": "Last edited {date} by {author}" + }, + "app.skin-site.wiki.revision": { "message": "Revision #{id}" }, + "app.skin-site.wiki.categories": { "message": "Categories" }, + "app.skin-site.wiki.back": { "message": "Back" } } diff --git a/apps/app-frontend/src/locales/zh-CN/index.json b/apps/app-frontend/src/locales/zh-CN/index.json index 0e33964..0ea5f84 100644 --- a/apps/app-frontend/src/locales/zh-CN/index.json +++ b/apps/app-frontend/src/locales/zh-CN/index.json @@ -1,23 +1,208 @@ { - "app.instance-player.title": { "message": "选择实例玩家" }, - "app.instance-player.remember": { "message": "选择后,此实例将一直使用该玩家。可在实例设置中切换。" }, - "app.instance-player.restore": { "message": "请重新登录 {name};要更换玩家,请前往实例设置。" }, - "app.instance-player.loading": { "message": "正在读取已登录的玩家…" }, - "app.instance-player.licensed": { "message": "正版玩家" }, - "app.instance-player.skin": { "message": "皮肤站玩家" }, - "app.instance-player.offline": { "message": "离线玩家" }, - "app.instance-player.empty": { "message": "当前账号没有可用的皮肤站玩家,可在皮肤站创建玩家。" }, - "app.instance-player.sign-in": { "message": "请登录账号后选择玩家。" }, - "app.instance-player.retry": { "message": "重试" }, - "app.instance-player.skin-login": { "message": "登录皮肤站" }, - "app.instance-player.or": { "message": "或者" }, - "app.instance-player.use-microsoft": { "message": "使用正版账号" }, - "app.instance-player.saving": { "message": "正在保存实例玩家…" }, - "app.instance-player.setting": { "message": "实例玩家" }, - "app.instance-player.first-launch": { "message": "首次启动时选择玩家" }, - "app.instance-player.change": { "message": "切换实例玩家" }, + "app.skin-site.captcha.loading": { "message": "正在加载验证码…" }, + "app.skin-site.captcha.submit": { "message": "验证" }, + "app.skin-site.captcha.subtitle": { + "message": "拖动滑块,将图片旋转至正向。" + }, + "app.skin-site.captcha.title": { "message": "请完成人机验证" }, + "app.skin-site.downloads.all": { "message": "全部" }, + "app.skin-site.downloads.back": { "message": "返回主页" }, + "app.skin-site.downloads.empty": { "message": "暂无可下载的资源。" }, + "app.skin-site.downloads.failed": { "message": "加载下载资源失败。" }, + "app.skin-site.downloads.go": { "message": "下载" }, + "app.skin-site.downloads.loading": { "message": "正在加载…" }, + "app.skin-site.downloads.status.legacy": { "message": "旧版" }, + "app.skin-site.downloads.status.new": { "message": "新增" }, + "app.skin-site.downloads.status.ok": { "message": "可用" }, + "app.skin-site.downloads.status.outdated": { "message": "已过时" }, + "app.skin-site.downloads.status.removal": { "message": "待移除" }, + "app.skin-site.downloads.subtitle": { + "message": "服务器分享的文件,可选择分类筛选。" + }, + "app.skin-site.downloads.title": { "message": "资源下载" }, + "app.skin-site.downloads.uploader": { "message": "上传者:{name}" }, + "app.skin-site.home.announcements.empty": { "message": "暂无公告。" }, + "app.skin-site.home.announcements.failed": { "message": "加载公告失败。" }, + "app.skin-site.home.announcements.loading": { "message": "正在加载…" }, + "app.skin-site.home.announcements.title": { "message": "公告" }, + "app.skin-site.home.donation.donors": { "message": "{count} 位捐赠者" }, + "app.skin-site.home.donation.loading": { "message": "正在加载…" }, + "app.skin-site.home.donation.title": { "message": "鸣谢捐赠" }, + "app.skin-site.home.donation.total": { "message": "累计捐赠" }, + "app.skin-site.home.donation.unavailable": { + "message": "暂时无法获取捐赠统计。" + }, + "app.skin-site.login.forgot": { "message": "忘记密码?" }, + "app.skin-site.login.password": { "message": "密码" }, + "app.skin-site.login.password-hint": { + "message": "6~50 个字符,须包含大写字母、小写字母和数字。" + }, + "app.skin-site.login.register": { "message": "注册账号" }, + "app.skin-site.login.sign-in": { "message": "登录" }, + "app.skin-site.login.signing-in": { "message": "正在登录…" }, + "app.skin-site.login.success": { "message": "已登录 StarLight。" }, + "app.skin-site.login.title": { "message": "登录 StarLight" }, + "app.skin-site.login.username": { "message": "用户名或邮箱" }, + "app.skin-site.login.username-hint": { + "message": "3~16 个字符,或已注册的邮箱地址。" + }, + "app.skin-site.map.back": { "message": "返回主页" }, + "app.skin-site.map.empty": { "message": "暂无可用地图。" }, + "app.skin-site.map.external": { "message": "外部地图" }, + "app.skin-site.map.failed": { "message": "加载地图失败。" }, + "app.skin-site.map.internal": { "message": "内部地图" }, + "app.skin-site.map.loading": { "message": "正在加载地图…" }, + "app.skin-site.map.map": { "message": "地图" }, + "app.skin-site.map.open": { "message": "在浏览器中打开" }, + "app.skin-site.map.server": { "message": "服务器" }, + "app.skin-site.map.title": { "message": "服务器地图" }, + "app.skin-site.profile-view.back": { "message": "返回主页" }, + "app.skin-site.profile-view.cape": { "message": "披风" }, + "app.skin-site.profile-view.elytra": { "message": "鞘翅" }, + "app.skin-site.profile-view.loading": { "message": "正在加载角色…" }, + "app.skin-site.profile-view.no-players": { "message": "暂无角色。" }, + "app.skin-site.profile-view.readonly": { + "message": "Mojang 账号由 Mojang 管理,无法在此修改材质。" + }, + "app.skin-site.profile-view.remove": { "message": "移除" }, + "app.skin-site.profile-view.removed": { "message": "材质已移除。" }, + "app.skin-site.profile-view.select-hint": { + "message": "选择角色以预览和修改其材质。" + }, + "app.skin-site.profile-view.signed-out": { + "message": "登录后管理你的角色。" + }, + "app.skin-site.profile-view.skin": { "message": "皮肤" }, + "app.skin-site.profile-view.title": { "message": "我的角色" }, + "app.skin-site.profile-view.upload": { "message": "上传" }, + "app.skin-site.profile-view.uploaded": { "message": "材质已更新。" }, + "app.skin-site.profile.avatar": { "message": "头像" }, + "app.skin-site.profile.avatar-hint": { + "message": "建议使用正方形图片,系统会将中心区域裁剪为 256×256。" + }, + "app.skin-site.profile.avatar-uploaded": { "message": "头像已更新。" }, + "app.skin-site.profile.basic": { "message": "个人资料" }, + "app.skin-site.profile.choose-avatar": { "message": "选择图片" }, + "app.skin-site.profile.minecraft-password": { "message": "Minecraft 密码" }, + "app.skin-site.profile.minecraft-password-changed": { + "message": "Minecraft 密码已更新。" + }, + "app.skin-site.profile.minecraft-password-hint": { + "message": "用于启动器登录,默认与网站密码相同。" + }, + "app.skin-site.profile.mismatch": { "message": "两次输入的密码不一致。" }, + "app.skin-site.profile.new-password": { "message": "新密码" }, + "app.skin-site.profile.old-password": { "message": "当前密码" }, + "app.skin-site.profile.password-changed": { "message": "密码已更新。" }, + "app.skin-site.profile.password-hint": { + "message": "6~50 个字符,须包含大写字母、小写字母和数字。" + }, + "app.skin-site.profile.repeat-password": { "message": "再次输入新密码" }, + "app.skin-site.profile.reset-default": { "message": "重置为网站密码" }, + "app.skin-site.profile.save": { "message": "保存" }, + "app.skin-site.profile.saved": { "message": "已保存。" }, + "app.skin-site.profile.security": { "message": "安全设置" }, + "app.skin-site.profile.site-password-hint": { + "message": "用于登录皮肤站的密码。" + }, + "app.skin-site.profile.submit-password": { "message": "修改密码" }, + "app.skin-site.profile.title": { "message": "账号设置" }, + "app.skin-site.profile.username": { "message": "用户名" }, + "app.skin-site.profile.username-hint": { "message": "3~16 个字符。" }, + "app.skin-site.register.closed": { "message": "当前服务器暂未开放注册。" }, + "app.skin-site.register.code": { "message": "验证码" }, + "app.skin-site.register.email": { "message": "邮箱" }, + "app.skin-site.register.invite-code": { "message": "邀请码" }, + "app.skin-site.register.invite-required": { + "message": "此服务器需要邀请码才能注册。" + }, + "app.skin-site.register.mismatch": { "message": "两次输入的密码不一致。" }, + "app.skin-site.register.password": { "message": "密码" }, + "app.skin-site.register.password-hint": { + "message": "6~50 个字符,须包含大写字母、小写字母和数字。" + }, + "app.skin-site.register.qq": { "message": "QQ(选填)" }, + "app.skin-site.register.repeat-password": { "message": "再次输入密码" }, + "app.skin-site.register.resend-in": { "message": "已发送({seconds} 秒)" }, + "app.skin-site.register.send-code": { "message": "发送验证码" }, + "app.skin-site.register.sending": { "message": "正在发送…" }, + "app.skin-site.register.submit": { "message": "注册账号" }, + "app.skin-site.register.success": { "message": "账号已创建并登录。" }, + "app.skin-site.register.title": { "message": "注册 StarLight 账号" }, + "app.skin-site.reset.code": { "message": "验证码" }, + "app.skin-site.reset.email": { "message": "邮箱" }, + "app.skin-site.reset.email-hint": { + "message": "请输入注册时使用的邮箱地址。" + }, + "app.skin-site.reset.mismatch": { "message": "两次输入的密码不一致。" }, + "app.skin-site.reset.new-password": { "message": "新密码" }, + "app.skin-site.reset.password-hint": { + "message": "6~50 个字符,须包含大写字母、小写字母和数字。" + }, + "app.skin-site.reset.repeat-password": { "message": "再次输入密码" }, + "app.skin-site.reset.resend-in": { "message": "已发送({seconds} 秒)" }, + "app.skin-site.reset.send-code": { "message": "发送验证码" }, + "app.skin-site.reset.sending": { "message": "正在发送…" }, + "app.skin-site.reset.submit": { "message": "重置密码" }, + "app.skin-site.reset.success": { "message": "密码已更新,现在可以登录。" }, + "app.skin-site.reset.title": { "message": "重置密码" }, + "app.skin-site.review.back": { "message": "返回主页" }, + "app.skin-site.review.back-to-list": { "message": "返回申请列表" }, + "app.skin-site.review.email": { "message": "你的邮箱" }, + "app.skin-site.review.email-hint": { "message": "审核结果将发送至此邮箱。" }, + "app.skin-site.review.empty": { "message": "暂无开放的申请表。" }, + "app.skin-site.review.failed": { "message": "加载审核申请表失败。" }, + "app.skin-site.review.invite-code": { "message": "邀请码" }, + "app.skin-site.review.loading": { "message": "正在加载…" }, + "app.skin-site.review.optional": { "message": "选填" }, + "app.skin-site.review.required": { "message": "必填" }, + "app.skin-site.review.result.passed": { "message": "已通过" }, + "app.skin-site.review.result.pending": { "message": "审核中" }, + "app.skin-site.review.result.rejected": { "message": "未通过" }, + "app.skin-site.review.submit": { "message": "提交申请" }, + "app.skin-site.review.submitted": { "message": "申请已提交。" }, + "app.skin-site.review.submitting": { "message": "正在提交…" }, + "app.skin-site.review.subtitle": { + "message": "选择申请表并回答其中的问题。" + }, + "app.skin-site.review.title": { "message": "玩家审核" }, + "app.skin-site.home.announcements.signed-out": { + "message": "登录后查看公告。" + }, + "app.skin-site.chat.user-picker.email": { "message": "邮箱" }, + "app.skin-site.chat.user-picker.registered": { "message": "注册时间" }, + "app.skin-site.chat.user-picker.banned-status": { "message": "已封禁" }, + "app.skin-site.chat.user-picker.active-status": { "message": "正常" }, + "app.skin-site.admin.wiki.policy-public": { "message": "所有人" }, + "app.skin-site.admin.wiki.policy-member": { "message": "已登录成员" }, + "app.skin-site.admin.wiki.policy-admin": { "message": "网站管理员" }, + "app.instance-player.title": { "message": "选择实例玩家" }, + "app.instance-player.remember": { + "message": "选择后,此实例将一直使用该玩家。可在实例设置中切换。" + }, + "app.instance-player.restore": { + "message": "请重新登录 {name};要更换玩家,请前往实例设置。" + }, + "app.instance-player.loading": { "message": "正在读取已登录的玩家…" }, + "app.instance-player.licensed": { "message": "正版玩家" }, + "app.instance-player.skin": { "message": "皮肤站玩家" }, + "app.instance-player.offline": { "message": "离线玩家" }, + "app.instance-player.empty": { + "message": "当前账号没有可用的皮肤站玩家,可在皮肤站创建玩家。" + }, + "app.instance-player.sign-in": { "message": "请登录账号后选择玩家。" }, + "app.instance-player.retry": { "message": "重试" }, + "app.instance-player.skin-login": { "message": "登录皮肤站" }, + "app.instance-player.or": { "message": "或者" }, + "app.instance-player.use-microsoft": { "message": "使用正版账号" }, + "app.instance-player.saving": { "message": "正在保存实例玩家…" }, + "app.instance-player.setting": { "message": "实例玩家" }, + "app.instance-player.first-launch": { "message": "首次启动时选择玩家" }, + "app.instance-player.change": { "message": "切换实例玩家" }, "app.hosted-mods.title": { "message": "正在更新服务器 Mod" }, - "app.hosted-mods.description": { "message": "所有更新安装完成后将继续启动游戏。" }, + "app.hosted-mods.description": { + "message": "所有更新安装完成后将继续启动游戏。" + }, "app.hosted-mods.complete": { "message": "下载完成" }, "app.hosted-mods.downloads": { "message": "查看下载" }, "app.hosted-mods.close": { "message": "关闭" }, @@ -26,44 +211,68 @@ "app.hosted-packs.progress.downloads": { "message": "查看下载" }, "app.hosted-packs.open-instance": { "message": "打开已安装实例" }, "app.hosted-packs.retry-install": { "message": "重试安装" }, - "app.hosted-packs.auto-installing": { "message": "正在下载并安装服务器整合包…" }, - "app.hosted-packs.auto-description": { "message": "从StarLight服务器获取整合包并自动安装,可一键游玩StarLight服务器" }, + "app.hosted-packs.auto-installing": { + "message": "正在下载并安装服务器整合包…" + }, + "app.hosted-packs.auto-description": { + "message": "从StarLight服务器获取整合包并自动安装,可一键游玩StarLight服务器" + }, "app.hosted-packs.auto-install": { "message": "安装 StarLight 官方整合包" }, "app.hosted-install.game-dir.header": { "message": "选择游戏目录" }, - "app.hosted-install.game-dir.description": { "message": "StarLight 实例的游戏数据(mods、存档、配置、资源包)会存放在外部游戏目录中。请选择一个根目录,整合包会在其中单独建一个子文件夹。" }, + "app.hosted-install.game-dir.description": { + "message": "StarLight 实例的游戏数据(mods、存档、配置、资源包)会存放在外部游戏目录中。请选择一个根目录,整合包会在其中单独建一个子文件夹。" + }, "app.hosted-install.game-dir.label": { "message": "游戏目录根路径" }, "app.hosted-install.game-dir.browse": { "message": "浏览" }, "app.hosted-install.game-dir.no-selection": { "message": "尚未选择文件夹" }, "app.hosted-install.game-dir.reset-default": { "message": "使用默认位置" }, - "app.hosted-install.game-dir.preview": { "message": "游戏文件将安装到:{path}" }, + "app.hosted-install.game-dir.preview": { + "message": "游戏文件将安装到:{path}" + }, "app.hosted-install.game-dir.confirm": { "message": "安装" }, "app.onboarding.instance-mode.title": { "message": "选择实例类型" }, - "app.onboarding.instance-mode.description": { "message": "StarLight 实例自动安装管理员指定的整合包和版本,每次启动先检查并完成更新,需要登录 StarLight 账号。本地实例可自选版本和整合包,适合第三方服务器与单人游玩。" }, + "app.onboarding.instance-mode.description": { + "message": "StarLight 实例自动安装管理员指定的整合包和版本,每次启动先检查并完成更新,需要登录 StarLight 账号。本地实例可自选版本和整合包,适合第三方服务器与单人游玩。" + }, "app.instance-mode.title": { "message": "实例类型" }, "app.instance-mode.starlight": { "message": "StarLight 实例" }, "app.instance-mode.local": { "message": "本地实例" }, - "app.instance-mode.starlight-description": { "message": "游玩 StarLight 服务器必选。自动安装服务器指定的整合包、游戏版本和加载器。每次启动需要登录 StarLight,检查并完成更新后再进入游戏。" }, - "app.instance-mode.local-description": { "message": "不会同步 StarLight 服务器的变更。跳过同步检查,启动更快,可自选整合包安装,更适合第三方服务器与本地个人游玩。" }, - "app.instance-mode.saving": { "message": "正在应用实例类型,并按需安装服务器整合包…" }, + "app.instance-mode.starlight-description": { + "message": "游玩 StarLight 服务器必选。自动安装服务器指定的整合包、游戏版本和加载器。每次启动需要登录 StarLight,检查并完成更新后再进入游戏。" + }, + "app.instance-mode.local-description": { + "message": "不会同步 StarLight 服务器的变更。跳过同步检查,启动更快,可自选整合包安装,更适合第三方服务器与本地个人游玩。" + }, + "app.instance-mode.saving": { + "message": "正在应用实例类型,并按需安装服务器整合包…" + }, "app.instance-mode.loading": { "message": "正在读取实例类型…" }, "app.instance-mode.retry": { "message": "重试" }, "app.instance-mode.local-packs-title": { "message": "本地整合包" }, - "app.instance-mode.local-packs": { "message": "可以自选整合包并安装为本地实例。切换为本地后保留现有游戏文件和存档,之后不再同步 StarLight 的变更。" }, + "app.instance-mode.local-packs": { + "message": "可以自选整合包并安装为本地实例。切换为本地后保留现有游戏文件和存档,之后不再同步 StarLight 的变更。" + }, "app.instance-mode.browse": { "message": "浏览整合包" }, "app.instance-mode.import": { "message": "导入为本地实例" }, - "app.hosted-packs.management": {"message": "内容管理"}, - "app.hosted-packs.mods": {"message": "管理 Mod"}, - "app.hosted-packs.packs": {"message": "管理整合包"}, + "app.hosted-packs.management": { "message": "内容管理" }, + "app.hosted-packs.mods": { "message": "管理 Mod" }, + "app.hosted-packs.packs": { "message": "管理整合包" }, "app.hosted-packs.title": { "message": "服务器管理的整合包" }, - "app.hosted-packs.description": { "message": "整合包和版本由管理员指定。每次启动都会检查服务器更新,有变更时先下载并安装,再启动游戏。需要有效的 StarLight 登录状态和网络连接。" }, - "app.hosted-packs.refresh": {"message": "刷新"}, - "app.hosted-packs.loading": {"message": "正在获取已发布整合包…"}, - "app.hosted-packs.bound": {"message": "已安装:{name} · {version}"}, - "app.hosted-packs.syncing": {"message": "正在比对文件并同步变动…"}, - "app.hosted-packs.complete": {"message": "已同步至 {version},变更 {count} 个文件,下载 {size} MiB。"}, - "app.hosted-packs.preserved": {"message": "保留了 {count} 个本地修改或个人文件"}, - "app.hosted-packs.empty": {"message": "暂无审核通过的整合包。"}, - "app.hosted-packs.update": {"message": "立即同步"}, + "app.hosted-packs.description": { + "message": "整合包和版本由管理员指定。每次启动都会检查服务器更新,有变更时先下载并安装,再启动游戏。需要有效的 StarLight 登录状态和网络连接。" + }, + "app.hosted-packs.refresh": { "message": "刷新" }, + "app.hosted-packs.loading": { "message": "正在获取已发布整合包…" }, + "app.hosted-packs.bound": { "message": "已安装:{name} · {version}" }, + "app.hosted-packs.syncing": { "message": "正在比对文件并同步变动…" }, + "app.hosted-packs.complete": { + "message": "已同步至 {version},变更 {count} 个文件,下载 {size} MiB。" + }, + "app.hosted-packs.preserved": { + "message": "保留了 {count} 个本地修改或个人文件" + }, + "app.hosted-packs.empty": { "message": "暂无审核通过的整合包。" }, + "app.hosted-packs.update": { "message": "立即同步" }, "app.hosted-packs.install": { "message": "重试自动安装" }, "app.home.luck.title": { "message": "每日幸运指数" }, "app.home.luck.get": { "message": "一键获取" }, @@ -71,14 +280,20 @@ "app.home.luck.loading": { "message": "正在询问小精灵..." }, "app.home.luck.error": { "message": "小精灵暂时没有回应,请稍后重试。" }, "app.home.luck.out-of": { "message": "满分 100" }, - "minecraft-account.skin-site.signed-in": { "message": "已登录 StarLight皮肤站" }, - "minecraft-account.skin-site.checking": { "message": "正在验证皮肤站登录状态…" }, + "minecraft-account.skin-site.signed-in": { + "message": "已登录 StarLight皮肤站" + }, + "minecraft-account.skin-site.checking": { + "message": "正在验证皮肤站登录状态…" + }, "minecraft-account.skin-site.sync-error": { "message": "暂时无法验证皮肤站登录状态,将自动重试。" }, "minecraft-account.skin-site.players": { "message": "皮肤站玩家({count})" }, "minecraft-account.skin-site.players.retry": { "message": "重试" }, - "minecraft-account.skin-site.players.empty": { "message": "这个皮肤站账号还没有玩家。" }, + "minecraft-account.skin-site.players.empty": { + "message": "这个皮肤站账号还没有玩家。" + }, "minecraft-account.skin-site.players.error": { "message": "暂时无法刷新玩家列表,已保留上一次结果。" }, @@ -10930,1340 +11145,2184 @@ "settings.backups.repository.usage-description": { "message": "实际存储 {stored},对应 {logical} 的备份数据,共 {count, plural, other {# 个快照}}。" }, - "app.settings.synced-options.choose-sync-source.command-history-description": { "message": "选择要从哪个实例复制命令历史记录。这些记录仅用于初始同步,之后可从任意实例编辑。" }, - "app.settings.synced-options.choose-sync-source.command-history-title": { "message": "选择命令历史记录来源" }, - "app.settings.synced-options.choose-sync-source.creative-hotbars-description": { "message": "选择要从哪个实例复制保存的创造模式快捷栏。这些快捷栏仅用于初始同步,之后可从任意实例编辑。" }, - "app.settings.synced-options.choose-sync-source.creative-hotbars-title": { "message": "选择创造模式快捷栏来源" }, - "app.settings.synced-options.choose-sync-source.data-packs-title": { "message": "选择数据包来源" }, - "app.settings.synced-options.choose-sync-source.game-settings-description": { "message": "选择要从哪个实例复制游戏设置。这些设置仅用于初始同步,之后可从任意实例编辑。" }, - "app.settings.synced-options.choose-sync-source.game-settings-title": { "message": "选择游戏设置来源" }, - "app.settings.synced-options.choose-sync-source.ineligible": { "message": "无法选择此实例作为同步来源" }, - "app.settings.synced-options.choose-sync-source.load-error": { "message": "无法加载同步来源,请重试。" }, - "app.settings.synced-options.choose-sync-source.multiplayer-servers-description": { "message": "选择要从哪个实例复制多人服务器列表。这些服务器仅用于初始同步,之后可从任意实例编辑。" }, - "app.settings.synced-options.choose-sync-source.multiplayer-servers-title": { "message": "选择多人服务器来源" }, - "app.settings.synced-options.choose-sync-source.no-instances-found": { "message": "没有找到实例" }, - "app.settings.synced-options.choose-sync-source.resource-packs-title": { "message": "选择资源包来源" }, - "app.settings.synced-options.choose-sync-source.retry": { "message": "重试" }, - "app.settings.synced-options.choose-sync-source.search-placeholder": { "message": "搜索实例" }, - "app.settings.synced-options.choose-sync-source.sync": { "message": "同步" }, - "app.settings.synced-options.command-history": { "message": "同步命令记录" }, - "app.settings.synced-options.command-history.description": { "message": "在不同的实例之间同步命令记录。" }, - "app.settings.synced-options.command-history.editor-title": { "message": "编辑指令历史记录" }, - "app.settings.synced-options.creative-hotbars": { "message": "同步保存的创造模式物品栏" }, - "app.settings.synced-options.creative-hotbars.description": { "message": "在不同的实例之间同步创造模式物品栏。" }, - "app.settings.synced-options.data-packs": { "message": "同步数据包" }, - "app.settings.synced-options.data-packs.description": { "message": "在所有实例间使用相同的数据包" }, - "app.settings.synced-options.data-packs.none-synced-yet": { "message": "尚未同步任何数据包" }, - "app.settings.synced-options.edit.no-instances": { "message": "请先添加实例,再编辑同步数据。" }, - "app.settings.synced-options.edit.no-synced-data": { "message": "请先选择同步来源,再编辑此设置。" }, - "app.settings.synced-options.game-settings": { "message": "同步游戏设置" }, - "app.settings.synced-options.game-settings.button": { "message": "编辑游戏设置" }, - "app.settings.synced-options.game-settings.description": { "message": "在所有实例间使用相同的游戏设置。" }, - "app.settings.synced-options.game-settings.disabled-tooltip": { "message": "请先启用游戏设置同步,再选择单个设置。" }, - "app.settings.synced-options.game-settings.no-options-to-edit": { "message": "目前没有可编辑的设置" }, - "app.settings.synced-options.multiplayer-servers": { "message": "同步多人模式服务器列表" }, - "app.settings.synced-options.multiplayer-servers.address": { "message": "服务器地址" }, - "app.settings.synced-options.multiplayer-servers.copy-address": { "message": "复制地址" }, - "app.settings.synced-options.multiplayer-servers.count": { "message": "{count, number} 个服务器" }, - "app.settings.synced-options.multiplayer-servers.description": { "message": "在不同的实例直接同步多人模式服务器列表。" }, - "app.settings.synced-options.multiplayer-servers.editor-title": { "message": "编辑同步的服务器" }, - "app.settings.synced-options.multiplayer-servers.empty": { "message": "当前未同步任何用户添加的服务器。" }, - "app.settings.synced-options.multiplayer-servers.filter-offline": { "message": "离线" }, - "app.settings.synced-options.multiplayer-servers.filter-online": { "message": "在线" }, - "app.settings.synced-options.multiplayer-servers.more-options": { "message": "更多服务器选项" }, - "app.settings.synced-options.multiplayer-servers.name": { "message": "服务器名称" }, - "app.settings.synced-options.multiplayer-servers.no-results": { "message": "没有匹配搜索或筛选条件的已同步服务器。" }, - "app.settings.synced-options.multiplayer-servers.none-synced-yet": { "message": "暂无已同步的服务器" }, - "app.settings.synced-options.multiplayer-servers.players-online": { "message": "{count, number} 人在线" }, - "app.settings.synced-options.multiplayer-servers.search": { "message": "搜索 {count, number} 个已同步服务器……" }, - "app.settings.synced-options.multiplayer-servers.status": { "message": "状态" }, - "app.settings.synced-options.packs.disabled": { "message": "请先启用同步,再编辑共享包。" }, - "app.settings.synced-options.resource-packs": { "message": "同步资源包" }, - "app.settings.synced-options.resource-packs.description": { "message": "在所有实例间使用相同的资源包" }, - "app.settings.synced-options.resource-packs.none-synced-yet": { "message": "尚未同步任何资源包" }, - "app.settings.synced-options.title": { "message": "跨所有实例同步的选项" }, - "app.settings.synced-packs.data-packs": { "message": "数据包" }, - "app.settings.synced-packs.disable": { "message": "禁用" }, - "app.settings.synced-packs.empty": { "message": "没有已同步的包" }, - "app.settings.synced-packs.enable": { "message": "启用" }, - "app.settings.synced-packs.remove": { "message": "移除" }, - "app.settings.synced-packs.resource-packs": { "message": "资源包" }, - "app.sync-instances-update.choose-source.data-packs": { "message": "选择要从哪个实例复制数据包。这些包仅用于初始化同步,之后可从任意实例进行编辑。" }, - "app.sync-instances-update.choose-source.resource-packs": { "message": "选择要从哪个实例复制资源包。这些包仅用于初始化同步,之后可从任意实例进行编辑。" }, - "instance.settings.tabs.backups": { "message": "备份" }, - "instance.settings.tabs.sync": { "message": "同步" }, - "app.settings.game-options.category.accessibility.description": { "message": "无障碍设置" }, - "app.settings.game-options.category.accessibility.label": { "message": "无障碍" }, - "app.settings.game-options.category.chat.description": { "message": "聊天显示与外观" }, - "app.settings.game-options.category.chat.label": { "message": "聊天" }, - "app.settings.game-options.category.controls.description": { "message": "鼠标、移动与按键绑定" }, - "app.settings.game-options.category.controls.label": { "message": "控制" }, - "app.settings.game-options.category.custom.description": { "message": "由模组添加的设置" }, - "app.settings.game-options.category.custom.label": { "message": "自定义设置" }, - "app.settings.game-options.category.language.description": { "message": "游戏语言" }, - "app.settings.game-options.category.language.label": { "message": "语言" }, - "app.settings.game-options.category.music-and-sound.description": { "message": "音量与音频偏好" }, - "app.settings.game-options.category.music-and-sound.label": { "message": "音乐和声音" }, - "app.settings.game-options.category.online.description": { "message": "在线与 Realms 偏好" }, - "app.settings.game-options.category.online.label": { "message": "在线" }, - "app.settings.game-options.category.skin-customization.description": { "message": "皮肤层与主手" }, - "app.settings.game-options.category.skin-customization.label": { "message": "皮肤自定义" }, - "app.settings.game-options.category.video.description": { "message": "镜头与显示设置" }, - "app.settings.game-options.category.video.label": { "message": "视频" }, - "app.settings.game-options.choice.all": { "message": "全部" }, - "app.settings.game-options.choice.balanced": { "message": "平衡" }, - "app.settings.game-options.choice.by-player": { "message": "按玩家" }, - "app.settings.game-options.choice.chat": { "message": "聊天" }, - "app.settings.game-options.choice.commands-only": { "message": "仅命令" }, - "app.settings.game-options.choice.constant": { "message": "持续" }, - "app.settings.game-options.choice.crosshair": { "message": "准星" }, - "app.settings.game-options.choice.custom": { "message": "自定义" }, - "app.settings.game-options.choice.decreased": { "message": "降低" }, - "app.settings.game-options.choice.default": { "message": "默认" }, - "app.settings.game-options.choice.fabulous": { "message": "极佳" }, - "app.settings.game-options.choice.fancy": { "message": "精美" }, - "app.settings.game-options.choice.far": { "message": "远" }, - "app.settings.game-options.choice.fast": { "message": "快速" }, - "app.settings.game-options.choice.frequent": { "message": "频繁" }, - "app.settings.game-options.choice.hidden": { "message": "隐藏" }, - "app.settings.game-options.choice.hotbar": { "message": "快捷栏" }, - "app.settings.game-options.choice.left": { "message": "左" }, - "app.settings.game-options.choice.limited": { "message": "有限" }, - "app.settings.game-options.choice.max-fps": { "message": "最高 FPS" }, - "app.settings.game-options.choice.maximum": { "message": "最大" }, - "app.settings.game-options.choice.minimal": { "message": "最少" }, - "app.settings.game-options.choice.minimum": { "message": "最小" }, - "app.settings.game-options.choice.nearby": { "message": "附近" }, - "app.settings.game-options.choice.never": { "message": "从不" }, - "app.settings.game-options.choice.none": { "message": "无" }, - "app.settings.game-options.choice.normal": { "message": "正常" }, - "app.settings.game-options.choice.off": { "message": "关闭" }, - "app.settings.game-options.choice.on": { "message": "开启" }, - "app.settings.game-options.choice.opengl": { "message": "OpenGL 渲染器" }, - "app.settings.game-options.choice.pause": { "message": "暂停菜单" }, - "app.settings.game-options.choice.pause-and-toast": { "message": "暂停菜单和提示" }, - "app.settings.game-options.choice.power-saver": { "message": "省电" }, - "app.settings.game-options.choice.right": { "message": "右" }, - "app.settings.game-options.choice.short": { "message": "短" }, - "app.settings.game-options.choice.shown": { "message": "显示" }, - "app.settings.game-options.choice.system": { "message": "系统" }, - "app.settings.game-options.choice.tiny": { "message": "极小" }, - "app.settings.game-options.choice.vulkan": { "message": "Vulkan 渲染器" }, - "app.settings.game-options.choice.when-minimized": { "message": "最小化时" }, - "app.settings.game-options.choice.while-afk": { "message": "挂机时" }, - "app.settings.game-options.compatibility.none": { "message": "部分实例无法使用此设置" }, - "app.settings.game-options.compatibility.reason.launcher-controlled": { "message": "此设置由启动器设置管理" }, - "app.settings.game-options.custom-value.placeholder": { "message": "输入值" }, - "app.settings.game-options.keybind.assigned-status": { "message": "已将 {setting} 绑定为 {binding}。" }, - "app.settings.game-options.keybind.cancelled-status": { "message": "已取消按键绑定更改。" }, - "app.settings.game-options.keybind.change": { "message": "{setting}:{binding}。激活以更改绑定。" }, - "app.settings.game-options.keybind.choose": { "message": "选择按键" }, - "app.settings.game-options.keybind.conflict-description": { "message": "{settings} 已使用此按键。" }, - "app.settings.game-options.keybind.key.arrow-down": { "message": "向下箭头" }, - "app.settings.game-options.keybind.key.arrow-left": { "message": "向左箭头" }, - "app.settings.game-options.keybind.key.arrow-right": { "message": "向右箭头" }, - "app.settings.game-options.keybind.key.arrow-up": { "message": "向上箭头" }, - "app.settings.game-options.keybind.key.backspace": { "message": "退格" }, - "app.settings.game-options.keybind.key.caps-lock": { "message": "大写锁定" }, - "app.settings.game-options.keybind.key.delete": { "message": "删除" }, - "app.settings.game-options.keybind.key.end": { "message": "End 键" }, - "app.settings.game-options.keybind.key.enter": { "message": "回车" }, - "app.settings.game-options.keybind.key.escape": { "message": "Esc 键" }, - "app.settings.game-options.keybind.key.home": { "message": "Home 键" }, - "app.settings.game-options.keybind.key.insert": { "message": "Insert 键" }, - "app.settings.game-options.keybind.key.keypad-key": { "message": "数字键盘 {key}" }, - "app.settings.game-options.keybind.key.left-alt": { "message": "左 Alt" }, - "app.settings.game-options.keybind.key.left-command": { "message": "左 Command" }, - "app.settings.game-options.keybind.key.left-control": { "message": "左 Ctrl" }, - "app.settings.game-options.keybind.key.left-shift": { "message": "左 Shift" }, - "app.settings.game-options.keybind.key.left-super": { "message": "左 Super" }, - "app.settings.game-options.keybind.key.menu": { "message": "菜单" }, - "app.settings.game-options.keybind.key.num-lock": { "message": "数字锁定" }, - "app.settings.game-options.keybind.key.page-down": { "message": "Page Down 键" }, - "app.settings.game-options.keybind.key.page-up": { "message": "Page Up 键" }, - "app.settings.game-options.keybind.key.pause": { "message": "暂停" }, - "app.settings.game-options.keybind.key.print-screen": { "message": "截图" }, - "app.settings.game-options.keybind.key.right-alt": { "message": "右 Alt" }, - "app.settings.game-options.keybind.key.right-command": { "message": "右 Command" }, - "app.settings.game-options.keybind.key.right-control": { "message": "右 Ctrl" }, - "app.settings.game-options.keybind.key.right-shift": { "message": "右 Shift" }, - "app.settings.game-options.keybind.key.right-super": { "message": "右 Super" }, - "app.settings.game-options.keybind.key.scroll-lock": { "message": "滚动锁定" }, - "app.settings.game-options.keybind.key.space": { "message": "空格" }, - "app.settings.game-options.keybind.key.tab": { "message": "Tab 键" }, - "app.settings.game-options.keybind.key.unbound": { "message": "未绑定" }, - "app.settings.game-options.keybind.key.unknown": { "message": "未知按键" }, - "app.settings.game-options.keybind.listen": { "message": "请按下一个按键……" }, - "app.settings.game-options.keybind.listening-status": { "message": "正在监听按键或鼠标按钮。按 Esc 清除绑定。" }, - "app.settings.game-options.keybind.mixed": { "message": "各实例不同" }, - "app.settings.game-options.keybind.modifier.alt": { "message": "Alt 键" }, - "app.settings.game-options.keybind.modifier.command": { "message": "Command 键" }, - "app.settings.game-options.keybind.modifier.control": { "message": "Ctrl 键" }, - "app.settings.game-options.keybind.modifier.shift": { "message": "Shift 键" }, - "app.settings.game-options.keybind.modifier.super": { "message": "Super 键" }, - "app.settings.game-options.keybind.mouse.button": { "message": "鼠标 {button}" }, - "app.settings.game-options.keybind.mouse.left": { "message": "鼠标左键" }, - "app.settings.game-options.keybind.mouse.middle": { "message": "鼠标中键" }, - "app.settings.game-options.keybind.mouse.right": { "message": "鼠标右键" }, - "app.settings.game-options.keybind.recording-label": { "message": "{setting}:正在监听按键或鼠标按钮。按 Esc 清除绑定。" }, - "app.settings.game-options.keybind.scancode": { "message": "扫描码 {code}" }, - "app.settings.game-options.keybind.unsupported-status": { "message": "Minecraft 无法使用此输入,请尝试其他按键。" }, - "app.settings.game-options.setting.advanced-opengl.label": { "message": "高级 OpenGL" }, - "app.settings.game-options.setting.allow-cursor-changes.label": { "message": "允许光标变化" }, - "app.settings.game-options.setting.allow-server-listing.description": { "message": "允许玩家名称出现在服务器列表中。" }, - "app.settings.game-options.setting.allow-server-listing.label": { "message": "服务器列表" }, - "app.settings.game-options.setting.alternate-blocks.label": { "message": "备用方块" }, - "app.settings.game-options.setting.ambient-occlusion.label": { "message": "平滑光照" }, - "app.settings.game-options.setting.ambient-volume.label": { "message": "环境" }, - "app.settings.game-options.setting.anaglyph-3d.label": { "message": "3D 红蓝立体" }, - "app.settings.game-options.setting.anisotropic-filtering.label": { "message": "各向异性过滤" }, - "app.settings.game-options.setting.anisotropy.label": { "message": "各向异性" }, - "app.settings.game-options.setting.attack-indicator.label": { "message": "攻击指示器" }, - "app.settings.game-options.setting.auto-jump.description": { "message": "自动跳过一格高的障碍物。" }, - "app.settings.game-options.setting.auto-jump.label": { "message": "自动跳跃" }, - "app.settings.game-options.setting.auto-suggestions.label": { "message": "命令建议" }, - "app.settings.game-options.setting.autosave-indicator.label": { "message": "自动保存指示器" }, - "app.settings.game-options.setting.biome-blend-radius.description": { "message": "生物群系颜色过渡的距离。" }, - "app.settings.game-options.setting.biome-blend-radius.label": { "message": "生物群系混合" }, - "app.settings.game-options.setting.blocks-volume.label": { "message": "方块" }, - "app.settings.game-options.setting.brightness.label": { "message": "亮度" }, - "app.settings.game-options.setting.cape.description": { "message": "显示玩家的披风,包括鞘翅纹理。" }, - "app.settings.game-options.setting.cape.label": { "message": "披风" }, - "app.settings.game-options.setting.chat-background-only.label": { "message": "仅聊天背景" }, - "app.settings.game-options.setting.chat-colors.label": { "message": "聊天颜色" }, - "app.settings.game-options.setting.chat-delay.label": { "message": "聊天延迟" }, - "app.settings.game-options.setting.chat-line-spacing.label": { "message": "聊天行间距" }, - "app.settings.game-options.setting.chat-links-prompt.description": { "message": "打开聊天链接前询问" }, - "app.settings.game-options.setting.chat-links-prompt.label": { "message": "打开链接前询问" }, - "app.settings.game-options.setting.chat-links.description": { "message": "允许打开聊天中的网页链接。" }, - "app.settings.game-options.setting.chat-links.label": { "message": "网页链接" }, - "app.settings.game-options.setting.chat-opacity.description": { "message": "聊天文字的不透明度。" }, - "app.settings.game-options.setting.chat-opacity.label": { "message": "聊天不透明度" }, - "app.settings.game-options.setting.chat-preview.label": { "message": "聊天预览" }, - "app.settings.game-options.setting.chat-scale.label": { "message": "聊天缩放" }, - "app.settings.game-options.setting.chat-visibility.label": { "message": "聊天可见性" }, - "app.settings.game-options.setting.chat-width.label": { "message": "聊天宽度" }, - "app.settings.game-options.setting.chunk-fade-time.label": { "message": "区块淡出时间" }, - "app.settings.game-options.setting.cloud-range.label": { "message": "云层距离" }, - "app.settings.game-options.setting.clouds.label": { "message": "云" }, - "app.settings.game-options.setting.ctrl-click-right-click.label": { "message": "按住 Control 点击代替右键点击" }, - "app.settings.game-options.setting.cutout-leaves.label": { "message": "半透明树叶" }, - "app.settings.game-options.setting.damage-tilt.label": { "message": "受伤倾斜" }, - "app.settings.game-options.setting.dark-splash.description": { "message": "将 Mojang Studios 加载界面从红色改为黑色。" }, - "app.settings.game-options.setting.dark-splash.label": { "message": "单色徽标" }, - "app.settings.game-options.setting.darkness-pulsing.label": { "message": "黑暗脉动" }, - "app.settings.game-options.setting.debug-gui-scale.label": { "message": "调试界面缩放" }, - "app.settings.game-options.setting.directional-audio.label": { "message": "方向性音频" }, - "app.settings.game-options.setting.discrete-mouse-scroll.description": { "message": "将每次鼠标滚轮输入视为一个滚动步进。" }, - "app.settings.game-options.setting.discrete-mouse-scroll.label": { "message": "离散滚动" }, - "app.settings.game-options.setting.entity-distance.label": { "message": "实体距离" }, - "app.settings.game-options.setting.entity-shadows.label": { "message": "实体阴影" }, - "app.settings.game-options.setting.exclusive-fullscreen.label": { "message": "独占全屏" }, - "app.settings.game-options.setting.extra-telemetry.label": { "message": "可选遥测" }, - "app.settings.game-options.setting.focused-chat-height.label": { "message": "聚焦时聊天高度" }, - "app.settings.game-options.setting.force-unicode-font.label": { "message": "强制 Unicode 字体" }, - "app.settings.game-options.setting.fov-effects.label": { "message": "视野效果" }, - "app.settings.game-options.setting.fov.label": { "message": "视野" }, - "app.settings.game-options.setting.fullscreen.label": { "message": "全屏" }, - "app.settings.game-options.setting.glint-speed.label": { "message": "附魔光效速度" }, - "app.settings.game-options.setting.glint-strength.label": { "message": "附魔光效强度" }, - "app.settings.game-options.setting.graphics-backend.label": { "message": "图形后端" }, - "app.settings.game-options.setting.graphics.description": { "message": "控制画面质量和性能。" }, - "app.settings.game-options.setting.graphics.label": { "message": "画面" }, - "app.settings.game-options.setting.gui-scale.description": { "message": "游戏界面和 HUD 的大小。" }, - "app.settings.game-options.setting.gui-scale.label": { "message": "界面缩放" }, - "app.settings.game-options.setting.hat.description": { "message": "显示帽子皮肤层。" }, - "app.settings.game-options.setting.hat.label": { "message": "帽子" }, - "app.settings.game-options.setting.held-item-tooltips.label": { "message": "手持物品提示" }, - "app.settings.game-options.setting.hide-lightning-flashes.label": { "message": "隐藏闪电闪光" }, - "app.settings.game-options.setting.hide-matched-names.label": { "message": "隐藏匹配的名称" }, - "app.settings.game-options.setting.hide-server-address.label": { "message": "隐藏服务器地址" }, - "app.settings.game-options.setting.hide-splash-texts.label": { "message": "隐藏启动标语" }, - "app.settings.game-options.setting.high-contrast-outline.label": { "message": "高对比度方块轮廓" }, - "app.settings.game-options.setting.high-contrast.description": { "message": "增强界面元素的对比度。" }, - "app.settings.game-options.setting.high-contrast.label": { "message": "高对比度" }, - "app.settings.game-options.setting.hostile-volume.label": { "message": "敌对生物" }, - "app.settings.game-options.setting.improved-transparency.label": { "message": "改进透明度" }, - "app.settings.game-options.setting.in-game-notifications.label": { "message": "游戏内通知" }, - "app.settings.game-options.setting.inactivity-framerate-limit.label": { "message": "降低帧率" }, - "app.settings.game-options.setting.invert-horizontal-mouse.label": { "message": "反转水平鼠标" }, - "app.settings.game-options.setting.invert-mouse.description": { "message": "反转垂直鼠标移动。" }, - "app.settings.game-options.setting.invert-mouse.label": { "message": "反转鼠标" }, - "app.settings.game-options.setting.jacket.description": { "message": "显示夹克皮肤层。" }, - "app.settings.game-options.setting.jacket.label": { "message": "夹克" }, - "app.settings.game-options.setting.japanese-glyph-variants.label": { "message": "日文字符变体" }, - "app.settings.game-options.setting.key-advancements.label": { "message": "进度" }, - "app.settings.game-options.setting.key-attack.label": { "message": "攻击" }, - "app.settings.game-options.setting.key-back.label": { "message": "后退" }, - "app.settings.game-options.setting.key-chat.label": { "message": "打开聊天" }, - "app.settings.game-options.setting.key-command.label": { "message": "命令" }, - "app.settings.game-options.setting.key-debug-advanced-tooltips.label": { "message": "显示高级提示" }, - "app.settings.game-options.setting.key-debug-chunk-borders.label": { "message": "显示区块边界" }, - "app.settings.game-options.setting.key-debug-clear-chat.label": { "message": "清空聊天" }, - "app.settings.game-options.setting.key-debug-copy-location.label": { "message": "复制位置" }, - "app.settings.game-options.setting.key-debug-copy-recreate-command.label": { "message": "复制重建命令" }, - "app.settings.game-options.setting.key-debug-crash.label": { "message": "触发调试崩溃" }, - "app.settings.game-options.setting.key-debug-dump-dynamic-textures.label": { "message": "转储动态纹理" }, - "app.settings.game-options.setting.key-debug-dump-version.label": { "message": "转储版本" }, - "app.settings.game-options.setting.key-debug-focus-pause.label": { "message": "失去焦点时暂停" }, - "app.settings.game-options.setting.key-debug-fps-charts.label": { "message": "FPS 图表" }, - "app.settings.game-options.setting.key-debug-hitboxes.label": { "message": "显示碰撞箱" }, - "app.settings.game-options.setting.key-debug-improved-transparency.label": { "message": "改进透明度调试视图" }, - "app.settings.game-options.setting.key-debug-lightmap-texture.label": { "message": "光照贴图纹理" }, - "app.settings.game-options.setting.key-debug-modifier.label": { "message": "调试修饰键" }, - "app.settings.game-options.setting.key-debug-network-charts.label": { "message": "网络图表" }, - "app.settings.game-options.setting.key-debug-options.label": { "message": "调试选项" }, - "app.settings.game-options.setting.key-debug-overlay.label": { "message": "调试覆盖层" }, - "app.settings.game-options.setting.key-debug-profiling-chart.label": { "message": "性能分析图表" }, - "app.settings.game-options.setting.key-debug-profiling.label": { "message": "开始性能分析" }, - "app.settings.game-options.setting.key-debug-reload-chunks.label": { "message": "重新加载区块" }, - "app.settings.game-options.setting.key-debug-reload-resource-packs.label": { "message": "重新加载资源包" }, - "app.settings.game-options.setting.key-debug-spectate.label": { "message": "旁观实体" }, - "app.settings.game-options.setting.key-debug-switch-game-mode.label": { "message": "切换游戏模式" }, - "app.settings.game-options.setting.key-drop.label": { "message": "丢弃物品" }, - "app.settings.game-options.setting.key-forward.label": { "message": "前进" }, - "app.settings.game-options.setting.key-friends.label": { "message": "好友" }, - "app.settings.game-options.setting.key-fullscreen.label": { "message": "切换全屏" }, - "app.settings.game-options.setting.key-hotbar-1.label": { "message": "快捷栏 1" }, - "app.settings.game-options.setting.key-hotbar-2.label": { "message": "快捷栏 2" }, - "app.settings.game-options.setting.key-hotbar-3.label": { "message": "快捷栏 3" }, - "app.settings.game-options.setting.key-hotbar-4.label": { "message": "快捷栏 4" }, - "app.settings.game-options.setting.key-hotbar-5.label": { "message": "快捷栏 5" }, - "app.settings.game-options.setting.key-hotbar-6.label": { "message": "快捷栏 6" }, - "app.settings.game-options.setting.key-hotbar-7.label": { "message": "快捷栏 7" }, - "app.settings.game-options.setting.key-hotbar-8.label": { "message": "快捷栏 8" }, - "app.settings.game-options.setting.key-hotbar-9.label": { "message": "快捷栏 9" }, - "app.settings.game-options.setting.key-inventory.label": { "message": "物品栏" }, - "app.settings.game-options.setting.key-jump.label": { "message": "跳跃" }, - "app.settings.game-options.setting.key-left.label": { "message": "向左平移" }, - "app.settings.game-options.setting.key-load-toolbar.label": { "message": "加载工具栏" }, - "app.settings.game-options.setting.key-perspective.label": { "message": "切换视角" }, - "app.settings.game-options.setting.key-pick-item.label": { "message": "选取方块" }, - "app.settings.game-options.setting.key-player-list.label": { "message": "玩家列表" }, - "app.settings.game-options.setting.key-quick-actions.label": { "message": "快捷操作" }, - "app.settings.game-options.setting.key-right.label": { "message": "向右平移" }, - "app.settings.game-options.setting.key-save-toolbar.label": { "message": "保存工具栏" }, - "app.settings.game-options.setting.key-screenshot.label": { "message": "截图" }, - "app.settings.game-options.setting.key-smooth-camera.label": { "message": "切换电影视角" }, - "app.settings.game-options.setting.key-sneak.label": { "message": "潜行" }, - "app.settings.game-options.setting.key-social-interactions.label": { "message": "社交互动" }, - "app.settings.game-options.setting.key-spectator-hotbar.label": { "message": "旁观者快捷栏" }, - "app.settings.game-options.setting.key-spectator-outlines.label": { "message": "高亮旁观者" }, - "app.settings.game-options.setting.key-sprint.label": { "message": "疾跑" }, - "app.settings.game-options.setting.key-swap-offhand.label": { "message": "交换副手" }, - "app.settings.game-options.setting.key-toggle-gui.label": { "message": "切换 HUD" }, - "app.settings.game-options.setting.key-toggle-spectator-shader.label": { "message": "切换旁观者着色器" }, - "app.settings.game-options.setting.key-use.label": { "message": "使用物品" }, - "app.settings.game-options.setting.language.label": { "message": "语言" }, - "app.settings.game-options.setting.left-pants-leg.label": { "message": "左裤腿" }, - "app.settings.game-options.setting.left-sleeve.label": { "message": "左袖" }, - "app.settings.game-options.setting.legacy-framerate-limit.label": { "message": "帧率上限" }, - "app.settings.game-options.setting.legacy-view-distance.label": { "message": "视距" }, - "app.settings.game-options.setting.mac-fullscreen-menu.label": { "message": "全屏时显示 macOS 菜单" }, - "app.settings.game-options.setting.main-hand.description": { "message": "选择主手为左手还是右手。" }, - "app.settings.game-options.setting.main-hand.label": { "message": "主手" }, - "app.settings.game-options.setting.master-volume.label": { "message": "主音量" }, - "app.settings.game-options.setting.max-framerate.label": { "message": "最大帧率" }, - "app.settings.game-options.setting.menu-background-blur.label": { "message": "菜单背景模糊" }, - "app.settings.game-options.setting.mipmap-levels.description": { "message": "平滑远处纹理。" }, - "app.settings.game-options.setting.mipmap-levels.label": { "message": "Mipmap 级别" }, - "app.settings.game-options.setting.mouse-wheel-sensitivity.label": { "message": "鼠标滚轮灵敏度" }, - "app.settings.game-options.setting.music-frequency.label": { "message": "音乐频率" }, - "app.settings.game-options.setting.music-toast.description": { "message": "选择是否在暂停菜单和提示中显示音乐标题。" }, - "app.settings.game-options.setting.music-toast.label": { "message": "音乐通知" }, - "app.settings.game-options.setting.music-volume.label": { "message": "音乐" }, - "app.settings.game-options.setting.narrator-hotkey.label": { "message": "旁白快捷键" }, - "app.settings.game-options.setting.narrator.description": { "message": "选择旁白朗读的内容。" }, - "app.settings.game-options.setting.narrator.label": { "message": "旁白" }, - "app.settings.game-options.setting.neutral-volume.label": { "message": "友好生物" }, - "app.settings.game-options.setting.notification-time.description": { "message": "提示通知保持显示的时长。" }, - "app.settings.game-options.setting.notification-time.label": { "message": "通知时长" }, - "app.settings.game-options.setting.operator-items-tab.label": { "message": "管理员物品栏标签" }, - "app.settings.game-options.setting.panorama-speed.label": { "message": "全景图速度" }, - "app.settings.game-options.setting.particles.label": { "message": "粒子" }, - "app.settings.game-options.setting.players-volume.label": { "message": "玩家" }, - "app.settings.game-options.setting.prioritize-chunk-updates.label": { "message": "区块更新优先级" }, - "app.settings.game-options.setting.quit-shortcuts.label": { "message": "退出快捷键" }, - "app.settings.game-options.setting.raw-mouse-input.label": { "message": "原始鼠标输入" }, - "app.settings.game-options.setting.realms-notifications.label": { "message": "Realms 通知" }, - "app.settings.game-options.setting.record-volume.label": { "message": "唱片机/音符盒" }, - "app.settings.game-options.setting.reduced-debug-info.label": { "message": "减少调试信息" }, - "app.settings.game-options.setting.render-distance.label": { "message": "渲染距离" }, - "app.settings.game-options.setting.right-pants-leg.label": { "message": "右裤腿" }, - "app.settings.game-options.setting.right-sleeve.label": { "message": "右袖" }, - "app.settings.game-options.setting.rotate-with-minecart.label": { "message": "随矿车旋转" }, - "app.settings.game-options.setting.save-chat-drafts.label": { "message": "保存聊天草稿" }, - "app.settings.game-options.setting.screen-effects.label": { "message": "屏幕效果" }, - "app.settings.game-options.setting.secure-chat-only.label": { "message": "仅显示安全聊天" }, - "app.settings.game-options.setting.sensitivity.label": { "message": "鼠标灵敏度" }, - "app.settings.game-options.setting.server-textures.label": { "message": "服务器纹理" }, - "app.settings.game-options.setting.share-presence.label": { "message": "共享在线状态" }, - "app.settings.game-options.setting.simulation-distance.description": { "message": "实体更新以及方块和流体更新的距离。" }, - "app.settings.game-options.setting.simulation-distance.label": { "message": "模拟距离" }, - "app.settings.game-options.setting.snooper.label": { "message": "数据收集" }, - "app.settings.game-options.setting.sprint-window.label": { "message": "疾跑窗口" }, - "app.settings.game-options.setting.subtitles.description": { "message": "显示游戏声音的字幕。" }, - "app.settings.game-options.setting.subtitles.label": { "message": "字幕" }, - "app.settings.game-options.setting.text-background-opacity.label": { "message": "文字背景不透明度" }, - "app.settings.game-options.setting.texture-filtering.label": { "message": "纹理过滤" }, - "app.settings.game-options.setting.toggle-attack.label": { "message": "切换攻击" }, - "app.settings.game-options.setting.toggle-crouch.description": { "message": "按一次即可保持潜行。" }, - "app.settings.game-options.setting.toggle-crouch.label": { "message": "切换潜行" }, - "app.settings.game-options.setting.toggle-sprint.description": { "message": "按一次即可保持疾跑。" }, - "app.settings.game-options.setting.toggle-sprint.label": { "message": "切换疾跑" }, - "app.settings.game-options.setting.toggle-use.label": { "message": "切换使用" }, - "app.settings.game-options.setting.touchscreen.label": { "message": "触屏模式" }, - "app.settings.game-options.setting.ui-volume.label": { "message": "界面" }, - "app.settings.game-options.setting.unfocused-chat-height.label": { "message": "未聚焦时聊天高度" }, - "app.settings.game-options.setting.use-vbo.label": { "message": "使用 VBO" }, - "app.settings.game-options.setting.view-bobbing.description": { "message": "行走时为镜头添加摇摆效果。" }, - "app.settings.game-options.setting.view-bobbing.label": { "message": "视角摇摆" }, - "app.settings.game-options.setting.vignette.label": { "message": "晕影" }, - "app.settings.game-options.setting.voice-volume.label": { "message": "语音和语音朗读" }, - "app.settings.game-options.setting.vsync.description": { "message": "将帧率限制为显示器刷新率,以防止画面撕裂。" }, - "app.settings.game-options.setting.vsync.label": { "message": "垂直同步" }, - "app.settings.game-options.setting.weather-radius.label": { "message": "天气范围" }, - "app.settings.game-options.setting.weather-volume.label": { "message": "天气" }, - "app.settings.game-options.validation.changed-since-opened": { "message": "此设置已在其他位置更改,请检查后重试。" }, - "app.settings.game-options.validation.invalid-value": { "message": "请选择有效值。" }, - "app.settings.game-options.validation.missing-value": { "message": "请先选择一个值。" }, - "app.settings.game-options.validation.no-compatible-instances": { "message": "部分实例无法使用此设置" }, - "app.settings.synced-options.game-settings.conflict-text": { "message": "我们已加载最新设置。请检查更改后再次保存。" }, - "app.settings.synced-options.game-settings.conflict-title": { "message": "这些设置已在其他地方更改" }, - "app.settings.synced-options.game-settings.custom-empty": { "message": "Modrinth 在某个实例中找到模组添加的设置后,它们会显示在这里。" }, - "app.settings.synced-options.game-settings.disable-all": { "message": "取消同步全部" }, - "app.settings.synced-options.game-settings.empty": { "message": "没有匹配当前搜索或筛选条件的设置。" }, - "app.settings.synced-options.game-settings.enable-all": { "message": "同步全部" }, - "app.settings.synced-options.game-settings.load-failed": { "message": "无法加载游戏设置。" }, - "app.settings.synced-options.game-settings.loading": { "message": "正在加载设置……" }, - "app.settings.synced-options.game-settings.not-being-synced": { "message": "未同步" }, - "app.settings.synced-options.game-settings.retry": { "message": "重试" }, - "app.settings.synced-options.game-settings.save": { "message": "保存设置" }, - "app.settings.synced-options.game-settings.search": { "message": "搜索设置……" }, - "app.settings.synced-options.game-settings.sync-description": { "message": "同步的选项会应用到每个实例,并覆盖整合包中包含的值。" }, - "app.settings.synced-options.game-settings.sync-setting": { "message": "在所有实例间同步{setting}" }, - "app.settings.synced-options.game-settings.sync-title": { "message": "同步游戏设置" }, - "app.settings.synced-options.game-settings.synced-across-instances": { "message": "已在所有实例间同步" }, - "app.settings.synced-options.game-settings.title": { "message": "游戏设置" }, - "app.settings.synced-options.game-settings.unsaved-changes": { "message": "你有未保存的更改。" }, - "app.settings.synced-options.game-settings.unsync-setting": { "message": "停止在所有实例间同步{setting}" }, - "app.settings.synced-options.game-settings.value-mixed": { "message": "各实例不同" }, - "app.settings.synced-options.game-settings.value-off": { "message": "关闭" }, - "app.settings.synced-options.game-settings.value-on": { "message": "开启" }, - "app.settings.synced-options.game-settings.value-unset": { "message": "选择一个值" }, - "app.anniversary.banner": { "message": "Starlight {ordinal} 周年快乐!" }, - "instance.settings.tabs.window.window-title": { "message": "窗口标题" }, - "instance.settings.tabs.window.window-title.description": { "message": "自定义 Minecraft 窗口标题。留空则使用默认标题。" }, - "instance.settings.tabs.window.window-title.enter": { "message": "输入窗口标题..." }, - "app.settings.defaults.window-title.enabled": { "message": "自定义 Minecraft 窗口标题" }, - "app.settings.defaults.window-title.enabled-description": { "message": "允许实例自定义 Minecraft 窗口标题。" }, - "app.settings.defaults.window-title.default": { "message": "默认窗口标题" }, - "app.settings.defaults.window-title.default-description": { "message": "当实例未提供自己的标题时使用。" }, - "app.settings.defaults.window-title.default-placeholder": { "message": "输入默认窗口标题..." }, - "app.action-bar.announcements": { "message": "公告" }, - "app.remote-announcements.center-title": { "message": "公告" }, - "app.remote-announcements.empty": { "message": "暂无公告" }, - "app.settings.tabs.logs": { "message": "日志与诊断" }, - "app.settings.logs.export.title": { "message": "导出日志" }, - "app.settings.logs.export.description": { "message": "将启动器日志打包,可附带环境摘要、最近的实例日志与崩溃分析。" }, - "app.settings.logs.export.button": { "message": "导出日志…" }, - "app.settings.logs.open-folder": { "message": "打开日志文件夹" }, - "app.settings.logs.export.modal.title": { "message": "导出日志" }, - "app.settings.logs.export.modal.description": { "message": "选择要包含的详细程度。导出的日志会把访问令牌、Minecraft 令牌与 IP 地址替换为占位符。" }, - "app.settings.logs.export.modal.range": { "message": "时间范围" }, - "app.settings.logs.export.modal.range.30-minutes": { "message": "最近 30 分钟" }, - "app.settings.logs.export.modal.range.2-hours": { "message": "最近 2 小时" }, - "app.settings.logs.export.modal.range.all": { "message": "全部会话" }, - "app.settings.logs.export.modal.level": { "message": "日志等级" }, - "app.settings.logs.export.modal.level.all": { "message": "全部等级" }, - "app.settings.logs.export.modal.level.debug": { "message": "DEBUG 及以上" }, - "app.settings.logs.export.modal.level.info": { "message": "INFO 及以上" }, - "app.settings.logs.export.modal.extras": { "message": "附加信息" }, - "app.settings.logs.export.modal.system-info": { "message": "系统与环境摘要" }, - "app.settings.logs.export.modal.instance-logs": { "message": "最近的实例日志" }, - "app.settings.logs.export.modal.crash-analysis": { "message": "崩溃分析(检测到崩溃时)" }, - "app.settings.logs.export.modal.cancel": { "message": "取消" }, - "app.settings.logs.export.modal.confirm": { "message": "导出" }, - "app.settings.logs.export.notification-title": { "message": "日志已导出" }, - "app.settings.logs.export.notification-text": { "message": "日志压缩包已保存到 {path}" }, - "app.skins.armor.title": {"message": "盔甲与纹饰"}, - "app.skins.armor.save": {"message": "保存"}, - "app.skins.armor.close": {"message": "关闭"}, - "app.skins.armor.description": {"message": "在皮肤上试穿盔甲与纹饰。未保存前不会写入任何内容。"}, - "app.skins.armor.unsaved": {"message": "有未保存的更改"}, - "app.skins.armor.reset-to-saved": {"message": "重置为已保存"}, - "app.skins.armor.restore-defaults": {"message": "恢复默认"}, - "app.instances.batch-edit-groups.add": {"message": "添加"}, - "app.instances.batch-edit-groups.add-to-group-title": {"message": "添加实例到「{groupName}」"}, - "app.instances.batch-edit-groups.added": {"message": "已添加"}, - "app.instances.batch-edit-groups.cancel": {"message": "取消"}, - "app.instances.batch-edit-groups.create": {"message": "创建分组"}, - "app.instances.batch-edit-groups.group-name": {"message": "分组名称"}, - "app.instances.batch-edit-groups.group-name-placeholder": {"message": "输入分组名称"}, - "app.instances.batch-edit-groups.no-instances-found": {"message": "未找到实例"}, - "app.instances.batch-edit-groups.save-changes": {"message": "保存"}, - "app.instances.batch-edit-groups.search-instance": {"message": "搜索实例"}, - "app.instances.group.add-to-group": {"message": "添加到分组"}, - "app.instances.group.collapse": {"message": "折叠分组"}, - "app.instances.group.delete-description": {"message": "此分组中的实例将被取消分组。"}, - "app.instances.group.delete-group": {"message": "删除分组"}, - "app.instances.group.edit-name": {"message": "编辑分组名称"}, - "app.instances.group.empty": {"message": "拖放实例到此处添加。"}, - "app.instances.group.expand": {"message": "展开分组"}, - "app.instances.group.move-down": {"message": "下移分组"}, - "app.instances.group.move-up": {"message": "上移分组"}, - "app.instances.group.name-empty": {"message": "分组名称不能为空。"}, - "app.instances.group.name-too-long": {"message": "分组名称不能超过 {maxLength} 个字符。"}, - "app.instances.group.new-instance": {"message": "新建实例"}, - "app.instances.group.pinned": {"message": "已置顶"}, - "app.instances.group.rename-group": {"message": "重命名分组"}, - "app.instances.sort-by": {"message": "排序方式"}, - "app.instances.sort.direction.asc-alphabetical": {"message": "A–Z 正序"}, - "app.instances.sort.direction.asc-date": {"message": "最早的在前"}, - "app.instances.sort.direction.asc-recency": {"message": "最早游玩在前"}, - "app.instances.sort.direction.asc-version": {"message": "旧版本在前"}, - "app.instances.sort.direction.desc-alphabetical": {"message": "Z–A 倒序"}, - "app.instances.sort.direction.desc-date": {"message": "最新的在前"}, - "app.instances.sort.direction.desc-recency": {"message": "最近游玩在前"}, - "app.instances.sort.direction.desc-version": {"message": "新版本在前"}, - "app.library.context-menu.pin-instance": {"message": "置顶实例"}, - "app.library.context-menu.remove-from-group": {"message": "移出分组"}, - "app.library.context-menu.unpin-instance": {"message": "取消置顶"}, - "app.library.group.new": {"message": "新建分组"}, - "app.library.selection.new-group": {"message": "新建分组"}, - "app.library.selection.remove-from-group": {"message": "移出分组"}, - "app.log-share.settings.title": {"message": "日志分享与 AI 分析"}, - "app.log-share.settings.description": {"message": "将崩溃诊断分享到 LogShare,获取结构化摘要与可选的 AI 分析。优先使用 LogShare,不可用时回退到 mclo.gs。"}, - "app.log-share.settings.share-provider": {"message": "日志分享服务"}, - "app.log-share.settings.share-provider-description": {"message": "分享诊断链接时上传到的目标服务。"}, - "app.log-share.settings.ai-source": {"message": "AI 分析来源"}, - "app.log-share.settings.ai-source-logshare": {"message": "LogShare AI"}, - "app.log-share.settings.ai-source-custom": {"message": "自定义 AI 服务商"}, - "app.log-share.settings.ai-source-description": {"message": "LogShare AI 在云端分析;自定义则使用下方配置的服务商。"}, - "app.log-share.settings.auto-upload": {"message": "自动上传以获取结构化摘要"}, - "app.log-share.settings.auto-upload-description": {"message": "仅在 LogShare 模式下生效。"}, - "app.log-share.settings.multi-file": {"message": "多文件上传"}, - "app.log-share.settings.multi-file-description": {"message": "同时上传 latest.log、崩溃报告、hs_err 以及启动器日志。"}, - "app.log-share.settings.no-storage": {"message": "不落盘直接分析"}, - "app.log-share.settings.no-storage-description": {"message": "直接提交内容进行分析并跳过存储上传。会关闭自动摘要。"}, - "app.log-share.settings.show-progress": {"message": "显示 AI 分析进度"}, - "app.log-share.settings.show-progress-description": {"message": "展示 LogAgent 运行期间的思考、工具及上限状态。"}, - "app.log-share.shared-logs.title": {"message": "已分享日志"}, - "app.log-share.shared-logs.description": {"message": "你分享过的所有诊断都记录在这里。删除条目会将其从记录中移除,并向分享服务请求删除。"}, - "app.log-share.shared-logs.empty": {"message": "暂无已分享的日志。"}, - "app.log-share.shared-logs.delete": {"message": "删除"}, - "app.log-share.shared-logs.deleting": {"message": "删除中…"}, - "app.log-share.shared-logs.deleted": {"message": "已删除共享日志。"}, - "app.log-share.shared-logs.delete-failed": {"message": "删除已分享日志失败。"}, - "app.log-share.shared-logs.truncated": {"message": "已截断"}, - "app.minecraft-crash.share-fallback": {"message": "LogShare 不可用,已改用 mclo.gs 分享诊断信息。"}, - "app.log-share.ai.action": {"message": "AI 深度分析"}, - "app.log-share.summary.title": {"message": "LogShare 分析"}, - "app.log-share.summary.loading": {"message": "正在加载结构化摘要…"}, - "app.log-share.summary.empty": {"message": "LogShare 未返回这些日志的结构化摘要。"}, - "app.log-share.summary.no-storage": {"message": "启用不落盘模式时无法获取结构化摘要。"}, - "app.log-share.summary.failed": {"message": "无法加载 LogShare 摘要:{message}"}, - "app.log-share.summary.problems": {"message": "问题"}, - "app.log-share.summary.information": {"message": "信息"}, - "app.minecraft-crash.logs.loading": {"message": "正在加载崩溃日志…"}, - "app.minecraft-crash.logs.empty": {"message": "未找到本次启动产生的日志。"}, - "app.minecraft-crash.logs.failed": {"message": "无法加载崩溃日志:{message}"}, - "app.minecraft-crash.log-file.loading": {"message": "正在加载日志文件…"}, - "app.minecraft-crash.log-file.failed": {"message": "无法加载此日志文件:{message}"}, - "app.log-share.ai.tab": {"message": "LogAgent 深度分析"}, - "app.log-share.ai.root-cause": {"message": "核心根因"}, - "app.log-share.ai.confidence": {"message": "诊断置信度"}, - "app.log-share.ai.steps": {"message": "推荐排障步骤"}, - "app.log-share.ai.evidence": {"message": "支撑证据链"}, - "app.log-share.ai.thinking": {"message": "思考中…"}, - "app.log-share.ai.queued": {"message": "排队中,前方约 {position} 个任务"}, - "app.log-share.ai.queued-front": {"message": "排队中,正在等待空闲槽位"}, - "app.log-share.ai.tool": {"message": "正在使用工具:{name}"}, - "app.log-share.ai.unknown-tool": {"message": "工具"}, - "app.log-share.ai.tool-result": {"message": "已收到工具结果"}, - "app.log-share.ai.limit": {"message": "已达到工具调用上限"}, - "app.log-share.ai.working": {"message": "正在使用 LogAgent 分析…"}, - "app.log-share.ai.failed": {"message": "LogAgent 分析失败:{message}"}, - "app.shortcut-settings.change-shortcut": {"message": "更改「{action}」的快捷键"}, - "app.shortcut-settings.enable": {"message": "启用快捷滚动"}, - "app.shortcut-settings.end-action": {"message": "滚动到页面底部"}, - "app.shortcut-settings.end-action-description": {"message": "将当前页面移动到底部。"}, - "app.shortcut-settings.home-action": {"message": "滚动到页面顶部"}, - "app.shortcut-settings.home-action-description": {"message": "将当前页面移动到顶部。"}, - "app.shortcut-settings.nav-create": {"message": "新建实例"}, - "app.shortcut-settings.nav-create-description": {"message": "前往新建实例。"}, - "app.shortcut-settings.nav-description": {"message": "使用各自的快捷键跳转到对应菜单项。每个快捷键默认关闭,需逐个启用。"}, - "app.shortcut-settings.nav-discover": {"message": "发现内容"}, - "app.shortcut-settings.nav-discover-description": {"message": "前往浏览内容。"}, - "app.shortcut-settings.nav-downloads": {"message": "下载"}, - "app.shortcut-settings.nav-downloads-description": {"message": "前往下载。"}, - "app.shortcut-settings.nav-home": {"message": "首页"}, - "app.shortcut-settings.nav-home-description": {"message": "前往首页。"}, - "app.shortcut-settings.nav-lab": {"message": "实验室"}, - "app.shortcut-settings.nav-lab-description": {"message": "前往实验室。"}, - "app.shortcut-settings.nav-library": {"message": "内容库"}, - "app.shortcut-settings.nav-library-description": {"message": "前往内容库。"}, - "app.shortcut-settings.nav-multiplayer": {"message": "多人游戏"}, - "app.shortcut-settings.nav-multiplayer-description": {"message": "前往多人游戏。"}, - "app.shortcut-settings.nav-settings": {"message": "设置"}, - "app.shortcut-settings.nav-settings-description": {"message": "前往设置。"}, - "app.shortcut-settings.nav-skins": {"message": "皮肤选择器"}, - "app.shortcut-settings.nav-skins-description": {"message": "前往皮肤选择器。"}, - "app.shortcut-settings.nav-title": {"message": "导航快捷键"}, - "app.shortcut-settings.nav-worlds": {"message": "世界"}, - "app.shortcut-settings.nav-worlds-description": {"message": "前往你的世界。"}, - "app.shortcut-settings.page-down-action": {"message": "向下滚动一屏"}, - "app.shortcut-settings.page-down-action-description": {"message": "将当前页面向下移动一屏。"}, - "app.shortcut-settings.page-up-action": {"message": "向上滚动一屏"}, - "app.shortcut-settings.page-up-action-description": {"message": "将当前页面向上移动一屏。"}, - "app.shortcut-settings.scroll-description": {"message": "使用键盘在长页面中快速滚动。"}, - "app.shortcut-settings.scroll-title": {"message": "快速滚动"}, - "app.settings.tabs.shortcut-settings": {"message": "键盘快捷键"}, - "app.skin-site.bugs.title": {"message": "问题与建议"}, - "app.skin-site.bugs.back": {"message": "返回主页"}, - "app.skin-site.bugs.subtitle": {"message": "反馈问题并跟踪处理进度。"}, - "app.skin-site.bugs.loading": {"message": "加载中…"}, - "app.skin-site.bugs.failed": {"message": "无法加载问题列表。"}, - "app.skin-site.bugs.empty": {"message": "没有符合筛选条件的问题。"}, - "app.skin-site.bugs.all": {"message": "全部"}, - "app.skin-site.bugs.more": {"message": "加载更多"}, - "app.skin-site.bugs.open-only": {"message": "仅显示未关闭"}, - "app.skin-site.bugs.comments": {"message": "{count} 条评论"}, - "app.skin-site.bugs.type.bug": {"message": "缺陷"}, - "app.skin-site.bugs.type.feature": {"message": "功能建议"}, - "app.skin-site.bugs.type.improvement": {"message": "改进"}, - "app.skin-site.bugs.status.pending": {"message": "待处理"}, - "app.skin-site.bugs.status.confirmed": {"message": "已确认"}, - "app.skin-site.bugs.status.needs-info": {"message": "待补充信息"}, - "app.skin-site.bugs.status.in-progress": {"message": "处理中"}, - "app.skin-site.bugs.status.verifying": {"message": "验证中"}, - "app.skin-site.bugs.status.closed": {"message": "已关闭"}, - "app.skin-site.bugs.priority.critical": {"message": "紧急"}, - "app.skin-site.bugs.priority.high": {"message": "高"}, - "app.skin-site.bugs.priority.normal": {"message": "普通"}, - "app.skin-site.bugs.priority.low": {"message": "低"}, - "app.skin-site.bugs.resolution.fixed": {"message": "已修复"}, - "app.skin-site.bugs.resolution.wont-fix": {"message": "不予修复"}, - "app.skin-site.bugs.resolution.by-design": {"message": "设计如此"}, - "app.skin-site.bugs.resolution.duplicate": {"message": "重复问题"}, - "app.skin-site.bugs.resolution.cannot-reproduce": {"message": "无法复现"}, - "app.skin-site.bugs.resolution.invalid": {"message": "无效"}, - "app.skin-site.bug-detail.back": {"message": "返回列表"}, - "app.skin-site.bug-detail.loading": {"message": "加载中…"}, - "app.skin-site.bug-detail.failed": {"message": "无法加载该问题。"}, - "app.skin-site.bug-detail.issue-no": {"message": "问题 #{id}"}, - "app.skin-site.bug-detail.by": {"message": "由 {name} 提交"}, - "app.skin-site.bug-detail.assignee": {"message": "负责人:{name}"}, - "app.skin-site.bug-detail.unassigned": {"message": "未分配"}, - "app.skin-site.bug-detail.description-empty": {"message": "未提供描述。"}, - "app.skin-site.bug-detail.resolution": {"message": "处理结果:{name}"}, - "app.skin-site.bug-detail.comments-title": {"message": "评论"}, - "app.skin-site.bug-detail.comments-empty": {"message": "还没有评论,来抢沙发吧。"}, - "app.skin-site.bug-detail.comments-loading": {"message": "加载评论中…"}, - "app.skin-site.bug-detail.comment-placeholder": {"message": "写下你的评论…"}, - "app.skin-site.bug-detail.comment-submit": {"message": "发表评论"}, - "app.skin-site.bug-detail.comment-sending": {"message": "发送中…"}, - "app.skin-site.bug-detail.comment-empty-error": {"message": "评论内容不能为空。"}, - "app.skin-site.bug-detail.comment-posted": {"message": "评论已发表。"}, - "app.skin-site.bug-detail.comment-deleted": {"message": "评论已删除。"}, - "app.skin-site.bug-detail.delete": {"message": "删除"}, - "app.skin-site.bug-detail.deleting": {"message": "删除中…"}, - "app.skin-site.bug-detail.system": {"message": "系统"}, - "app.skin-site.bug-create.title": {"message": "新建问题"}, - "app.skin-site.bug-create.type": {"message": "类型"}, - "app.skin-site.bug-create.title-field": {"message": "标题"}, - "app.skin-site.bug-create.title-placeholder": {"message": "简要描述问题"}, - "app.skin-site.bug-create.description": {"message": "描述"}, - "app.skin-site.bug-create.description-placeholder": {"message": "发生了什么?如何复现?"}, - "app.skin-site.bug-create.private": {"message": "私密问题"}, - "app.skin-site.bug-create.private-hint": {"message": "仅你和维护者可见。"}, - "app.skin-site.bug-create.images": {"message": "图片"}, - "app.skin-site.bug-create.images-hint": {"message": "可选,最多 5 张图片。"}, - "app.skin-site.bug-create.submit": {"message": "创建问题"}, - "app.skin-site.bug-create.submitting": {"message": "创建中…"}, - "app.skin-site.bug-create.created": {"message": "问题已创建。"}, - "app.skin-site.bug-create.cancel": {"message": "取消"}, - "app.skin-site.bug-notifications.title": {"message": "通知"}, - "app.skin-site.bug-notifications.back": {"message": "返回主页"}, - "app.skin-site.bug-notifications.subtitle": {"message": "你提交或关注的问题动态。"}, - "app.skin-site.bug-notifications.loading": {"message": "加载中…"}, - "app.skin-site.bug-notifications.failed": {"message": "无法加载通知。"}, - "app.skin-site.bug-notifications.empty": {"message": "暂无新通知。"}, - "app.skin-site.bug-notifications.item": {"message": "{name} 更新了问题 #{id}"}, - "app.skin-site.bug-notifications.mark-all": {"message": "全部标为已读"}, - "app.skin-site.bug-notifications.marked-all": {"message": "已将全部通知标为已读。"}, - "app.skin-site.bugs.create": {"message": "新建问题"}, - "app.skin-site.bugs.notifications": {"message": "通知"}, - "app.skin-site.home.title": {"message": "星光皮肤站"}, - "app.skin-site.home.subtitle": {"message": "星光服务器玩家的衣柜。"}, - "app.skin-site.home.address": {"message": "皮肤站地址"}, - "app.skin-site.home.copied": {"message": "地址已复制。"}, - "app.skin-site.home.copy": {"message": "复制"}, - "app.skin-site.admin.title": {"message": "管理控制台"}, - "app.skin-site.admin.back": {"message": "返回主页"}, - "app.skin-site.admin.no-access": {"message": "你没有访问权限。"}, - "app.skin-site.admin.no-access-hint": {"message": "请使用管理员账号登录后使用本控制台。"}, - "app.skin-site.admin.group.security": {"message": "系统安全"}, - "app.skin-site.admin.group.users": {"message": "用户管理"}, - "app.skin-site.admin.group.community": {"message": "社区管理"}, - "app.skin-site.admin.group.resources": {"message": "资源分发"}, - "app.skin-site.admin.item.servers": {"message": "服务器管理"}, - "app.skin-site.admin.item.summary": {"message": "状态概览"}, - "app.skin-site.admin.item.access-audit": {"message": "登录与认证审计"}, - "app.skin-site.admin.item.users": {"message": "用户信息"}, - "app.skin-site.admin.item.players": {"message": "玩家信息"}, - "app.skin-site.admin.item.review": {"message": "玩家审核"}, - "app.skin-site.admin.item.broadcast": {"message": "公告操作"}, - "app.skin-site.admin.item.chat": {"message": "聊天室管理"}, - "app.skin-site.admin.item.wiki": {"message": "维基管理"}, - "app.skin-site.admin.item.donations": {"message": "捐赠管理"}, - "app.skin-site.admin.item.mods": {"message": "Mod 管理"}, - "app.skin-site.admin.item.launcher": {"message": "启动器管理"}, - "app.skin-site.admin.item.downloads": {"message": "下载管理"}, - "app.skin-site.home.admin": {"message": "管理"}, - "app.skin-site.home.settings": {"message": "账号"}, - "app.skin-site.home.sign-in": {"message": "登录"}, - "app.skin-site.home.players": {"message": "角色"}, - "app.skin-site.home.my-players": {"message": "我的角色"}, - "app.skin-site.home.no-players": {"message": "尚未绑定角色。"}, - "app.skin-site.home.loading": {"message": "加载中…"}, - "app.skin-site.home.error": {"message": "加载失败。"}, - "app.skin-site.home.luck": {"message": "幸运值"}, - "app.skin-site.home.luck-unavailable": {"message": "不可用"}, - "app.skin-site.home.signed-out-title": {"message": "未登录"}, - "app.skin-site.home.signed-out-body": {"message": "登录后可管理你的账号与皮肤。"}, - "app.skin-site.admin.summary.title": {"message": "系统概况"}, - "app.skin-site.admin.summary.loading": {"message": "加载中…"}, - "app.skin-site.admin.summary.failed": {"message": "无法加载状态。"}, - "app.skin-site.admin.summary.uptime": {"message": "运行时长"}, - "app.skin-site.admin.summary.memory": {"message": "内存占用"}, - "app.skin-site.admin.summary.users": {"message": "用户数量"}, - "app.skin-site.admin.summary.players": {"message": "玩家数量"}, - "app.skin-site.admin.summary.realtime-hint": {"message": "实时 CPU 与 GC 图表依赖管理端 WebSocket,目前尚未接入。"}, - "app.skin-site.admin.broadcast.title": {"message": "公告"}, - "app.skin-site.admin.broadcast.loading": {"message": "加载中…"}, - "app.skin-site.admin.broadcast.failed": {"message": "加载失败。"}, - "app.skin-site.admin.broadcast.empty": {"message": "尚未发布过任何公告。"}, - "app.skin-site.admin.broadcast.create": {"message": "发布新公告"}, - "app.skin-site.admin.broadcast.save": {"message": "保存"}, - "app.skin-site.admin.broadcast.cancel": {"message": "取消"}, - "app.skin-site.admin.broadcast.edit": {"message": "编辑"}, - "app.skin-site.admin.broadcast.remove": {"message": "删除"}, - "app.skin-site.admin.broadcast.title-field": {"message": "标题"}, - "app.skin-site.admin.broadcast.subtitle-field": {"message": "副标题"}, - "app.skin-site.admin.broadcast.content-field": {"message": "内容"}, - "app.skin-site.admin.broadcast.expire-at": {"message": "过期时间"}, - "app.skin-site.admin.broadcast.star": {"message": "标星"}, - "app.skin-site.admin.broadcast.level": {"message": "重要程度"}, - "app.skin-site.admin.broadcast.image": {"message": "图片"}, - "app.skin-site.admin.broadcast.remove-image": {"message": "移除图片"}, - "app.skin-site.admin.broadcast.created": {"message": "公告已发布。"}, - "app.skin-site.admin.broadcast.updated": {"message": "公告已更新。"}, - "app.skin-site.admin.broadcast.deleted": {"message": "公告已删除。"}, - "app.skin-site.admin.broadcast.confirm-delete": {"message": "确定删除「{title}」吗?此操作不可撤销。"}, - "app.skin-site.admin.broadcast.uploader": {"message": "由 {name} 发布"}, - "app.skin-site.admin.players.title": {"message": "玩家"}, - "app.skin-site.admin.players.loading": {"message": "加载中…"}, - "app.skin-site.admin.players.failed": {"message": "无法加载玩家列表。"}, - "app.skin-site.admin.players.empty": {"message": "没有找到玩家。"}, - "app.skin-site.admin.players.search": {"message": "搜索"}, - "app.skin-site.admin.players.search-name": {"message": "名称"}, - "app.skin-site.admin.players.search-owner": {"message": "所有者"}, - "app.skin-site.admin.players.search-uuid": {"message": "UUID"}, - "app.skin-site.admin.players.total": {"message": "共 {count} 名玩家"}, - "app.skin-site.admin.players.prev": {"message": "上一页"}, - "app.skin-site.admin.players.next": {"message": "下一页"}, - "app.skin-site.admin.players.page": {"message": "第 {page} 页"}, - "app.skin-site.admin.players.name": {"message": "名称"}, - "app.skin-site.admin.players.owner": {"message": "所有者"}, - "app.skin-site.admin.players.source": {"message": "来源"}, - "app.skin-site.admin.players.legacy": {"message": "旧版适配"}, - "app.skin-site.admin.players.actions": {"message": "操作"}, - "app.skin-site.admin.players.edit": {"message": "编辑"}, - "app.skin-site.admin.players.save": {"message": "保存"}, - "app.skin-site.admin.players.cancel": {"message": "取消"}, - "app.skin-site.admin.players.remove": {"message": "删除"}, - "app.skin-site.admin.players.updated": {"message": "玩家已更新。"}, - "app.skin-site.admin.players.deleted": {"message": "玩家已删除。"}, - "app.skin-site.admin.players.confirm-delete": {"message": "确定删除玩家「{name}」吗?此操作不可撤销。"}, - "app.skin-site.admin.players.mojang": {"message": "正版"}, - "app.skin-site.admin.players.custom": {"message": "皮肤站"}, - "app.skin-site.admin.users.title": {"message": "用户"}, - "app.skin-site.admin.users.loading": {"message": "加载中…"}, - "app.skin-site.admin.users.failed": {"message": "无法加载用户列表。"}, - "app.skin-site.admin.users.empty": {"message": "没有找到用户。"}, - "app.skin-site.admin.users.search": {"message": "搜索"}, - "app.skin-site.admin.users.search-name": {"message": "用户名"}, - "app.skin-site.admin.users.search-email": {"message": "邮箱"}, - "app.skin-site.admin.users.search-uuid": {"message": "UUID"}, - "app.skin-site.admin.users.total": {"message": "共 {count} 名用户"}, - "app.skin-site.admin.users.prev": {"message": "上一页"}, - "app.skin-site.admin.users.next": {"message": "下一页"}, - "app.skin-site.admin.users.page": {"message": "第 {page} 页"}, - "app.skin-site.admin.users.edit": {"message": "编辑"}, - "app.skin-site.admin.users.save": {"message": "保存"}, - "app.skin-site.admin.users.cancel": {"message": "取消"}, - "app.skin-site.admin.users.remove": {"message": "删除"}, - "app.skin-site.admin.users.players": {"message": "角色"}, - "app.skin-site.admin.users.updated": {"message": "用户已更新。"}, - "app.skin-site.admin.users.deleted": {"message": "用户已删除。"}, - "app.skin-site.admin.users.confirm-delete": {"message": "确定删除用户「{name}」吗?此操作不可撤销。"}, - "app.skin-site.admin.users.username": {"message": "用户名"}, - "app.skin-site.admin.users.email": {"message": "邮箱"}, - "app.skin-site.admin.users.qq": {"message": "QQ"}, - "app.skin-site.admin.users.password": {"message": "新密码"}, - "app.skin-site.admin.users.password-hint": {"message": "留空则保持原密码不变。"}, - "app.skin-site.admin.users.banned": {"message": "封禁"}, - "app.skin-site.admin.users.permissions": {"message": "权限"}, - "app.skin-site.admin.users.permissions-hint": {"message": "以逗号分隔,例如 WEB_ADMIN, SERVER_ADMIN。"}, - "app.skin-site.admin.users.no-players": {"message": "没有绑定的角色。"}, - "app.skin-site.admin.users.registered": {"message": "注册时间"}, - "app.skin-site.admin.review.title": {"message": "玩家审核"}, - "app.skin-site.admin.review.loading": {"message": "加载中…"}, - "app.skin-site.admin.review.failed": {"message": "无法加载申请列表。"}, - "app.skin-site.admin.review.empty": {"message": "没有找到申请。"}, - "app.skin-site.admin.review.total": {"message": "共 {count} 份申请"}, - "app.skin-site.admin.review.filter-all": {"message": "全部"}, - "app.skin-site.admin.review.filter-pending": {"message": "待处理"}, - "app.skin-site.admin.review.filter-passed": {"message": "已通过"}, - "app.skin-site.admin.review.filter-rejected": {"message": "已拒绝"}, - "app.skin-site.admin.review.result-pending": {"message": "待处理"}, - "app.skin-site.admin.review.result-passed": {"message": "已通过"}, - "app.skin-site.admin.review.result-rejected": {"message": "已拒绝"}, - "app.skin-site.admin.review.mode-auto": {"message": "自动"}, - "app.skin-site.admin.review.mode-manual": {"message": "人工"}, - "app.skin-site.admin.review.applicant": {"message": "申请人"}, - "app.skin-site.admin.review.submitted-at": {"message": "提交时间"}, - "app.skin-site.admin.review.score": {"message": "得分"}, - "app.skin-site.admin.review.reviewer": {"message": "审核人"}, - "app.skin-site.admin.review.details": {"message": "详情"}, - "app.skin-site.admin.review.hide": {"message": "收起"}, - "app.skin-site.admin.review.answers": {"message": "作答内容"}, - "app.skin-site.admin.review.no-answers": {"message": "没有作答记录。"}, - "app.skin-site.admin.review.auto-checks": {"message": "自动检查"}, - "app.skin-site.admin.review.context": {"message": "提交环境"}, - "app.skin-site.admin.review.ip": {"message": "IP"}, - "app.skin-site.admin.review.user-agent": {"message": "浏览器标识"}, - "app.skin-site.admin.review.activity": {"message": "行为记录"}, - "app.skin-site.admin.review.duration": {"message": "时长"}, - "app.skin-site.admin.review.hidden-time": {"message": "切出时长"}, - "app.skin-site.admin.review.screen-switches": {"message": "切屏次数"}, - "app.skin-site.admin.review.history": {"message": "审核记录"}, - "app.skin-site.admin.review.accept": {"message": "通过"}, - "app.skin-site.admin.review.reject": {"message": "拒绝"}, - "app.skin-site.admin.review.reason": {"message": "理由"}, - "app.skin-site.admin.review.accept-done": {"message": "申请已通过。"}, - "app.skin-site.admin.review.reject-done": {"message": "申请已拒绝。"}, - "app.skin-site.admin.review.regen-invite": {"message": "重发邀请码"}, - "app.skin-site.admin.review.invite-regenerated": {"message": "邀请码已重新生成。"}, - "app.skin-site.admin.review.invite-sent": {"message": "邮件已发送。"}, - "app.skin-site.admin.review.invite-not-sent": {"message": "邮件未发送。"}, - "app.skin-site.admin.review.prev": {"message": "上一页"}, - "app.skin-site.admin.review.next": {"message": "下一页"}, - "app.skin-site.admin.review.page": {"message": "第 {page} 页"}, - "app.skin-site.admin.launcher.title": {"message": "启动器版本"}, - "app.skin-site.admin.launcher.loading": {"message": "加载中…"}, - "app.skin-site.admin.launcher.failed": {"message": "无法加载版本列表。"}, - "app.skin-site.admin.launcher.empty": {"message": "尚未上传任何版本。"}, - "app.skin-site.admin.launcher.latest-url": {"message": "最新版本地址"}, - "app.skin-site.admin.launcher.version": {"message": "版本"}, - "app.skin-site.admin.launcher.channel": {"message": "渠道"}, - "app.skin-site.admin.launcher.uploader": {"message": "上传者"}, - "app.skin-site.admin.launcher.uploaded-at": {"message": "上传时间"}, - "app.skin-site.admin.launcher.published-at": {"message": "发布时间"}, - "app.skin-site.admin.launcher.force-update": {"message": "强制更新"}, - "app.skin-site.admin.launcher.active": {"message": "当前版本"}, - "app.skin-site.admin.launcher.activate": {"message": "设为当前"}, - "app.skin-site.admin.launcher.activated": {"message": "已设为当前版本。"}, - "app.skin-site.admin.launcher.upload": {"message": "上传版本"}, - "app.skin-site.admin.launcher.upload-hint": {"message": "选择发布包 ZIP(最大 4 GiB)。"}, - "app.skin-site.admin.launcher.uploading": {"message": "上传中…"}, - "app.skin-site.admin.launcher.upload-done": {"message": "版本已上传。"}, - "app.skin-site.admin.launcher.force-flag": {"message": "强制更新"}, - "app.skin-site.admin.launcher.prev": {"message": "上一页"}, - "app.skin-site.admin.launcher.next": {"message": "下一页"}, - "app.skin-site.admin.launcher.page": {"message": "第 {page} 页"}, - "app.skin-site.admin.launcher.total": {"message": "共 {count} 个版本"}, - "app.skin-site.admin.downloads.title": {"message": "资源下载"}, - "app.skin-site.admin.downloads.loading": {"message": "加载中…"}, - "app.skin-site.admin.downloads.failed": {"message": "无法加载资源列表。"}, - "app.skin-site.admin.downloads.empty": {"message": "没有下载条目。"}, - "app.skin-site.admin.downloads.categories": {"message": "分类"}, - "app.skin-site.admin.downloads.all": {"message": "全部条目"}, - "app.skin-site.admin.downloads.add-category": {"message": "添加"}, - "app.skin-site.admin.downloads.category-name": {"message": "分类名称"}, - "app.skin-site.admin.downloads.remove-category": {"message": "移除"}, - "app.skin-site.admin.downloads.total": {"message": "共 {count} 个条目"}, - "app.skin-site.admin.downloads.add-item": {"message": "新建条目"}, - "app.skin-site.admin.downloads.save": {"message": "保存"}, - "app.skin-site.admin.downloads.cancel": {"message": "取消"}, - "app.skin-site.admin.downloads.edit": {"message": "编辑"}, - "app.skin-site.admin.downloads.remove": {"message": "删除"}, - "app.skin-site.admin.downloads.filename": {"message": "文件名"}, - "app.skin-site.admin.downloads.description": {"message": "描述"}, - "app.skin-site.admin.downloads.routes": {"message": "下载线路"}, - "app.skin-site.admin.downloads.route-name": {"message": "名称"}, - "app.skin-site.admin.downloads.route-url": {"message": "URL"}, - "app.skin-site.admin.downloads.add-route": {"message": "添加线路"}, - "app.skin-site.admin.downloads.remove-route": {"message": "移除"}, - "app.skin-site.admin.downloads.statuses": {"message": "状态"}, - "app.skin-site.admin.downloads.bind-category": {"message": "所属分类"}, - "app.skin-site.admin.downloads.uploader": {"message": "由 {name} 上传"}, - "app.skin-site.admin.downloads.created": {"message": "条目已创建。"}, - "app.skin-site.admin.downloads.updated": {"message": "条目已更新。"}, - "app.skin-site.admin.downloads.deleted": {"message": "条目已删除。"}, - "app.skin-site.admin.downloads.category-added": {"message": "分类已添加。"}, - "app.skin-site.admin.downloads.category-deleted": {"message": "分类已删除。"}, - "app.skin-site.admin.downloads.confirm-delete-item": {"message": "确定删除「{name}」吗?此操作不可撤销。"}, - "app.skin-site.admin.downloads.confirm-delete-category": {"message": "确定删除分类「{name}」吗?"}, - "app.skin-site.admin.servers.title": {"message": "地图服务器"}, - "app.skin-site.admin.servers.loading": {"message": "加载中…"}, - "app.skin-site.admin.servers.failed": {"message": "无法加载服务器列表。"}, - "app.skin-site.admin.servers.empty": {"message": "尚未配置地图服务器。"}, - "app.skin-site.admin.servers.server-name": {"message": "服务器名称"}, - "app.skin-site.admin.servers.internal": {"message": "内部"}, - "app.skin-site.admin.servers.maps": {"message": "地图"}, - "app.skin-site.admin.servers.map-name": {"message": "地图名称"}, - "app.skin-site.admin.servers.map-url": {"message": "地图地址"}, - "app.skin-site.admin.servers.add-map": {"message": "添加地图"}, - "app.skin-site.admin.servers.remove-map": {"message": "移除"}, - "app.skin-site.admin.servers.add-server": {"message": "添加服务器"}, - "app.skin-site.admin.servers.remove-server": {"message": "删除服务器"}, - "app.skin-site.admin.servers.save": {"message": "保存更改"}, - "app.skin-site.admin.servers.saving": {"message": "保存中…"}, - "app.skin-site.admin.servers.saved": {"message": "地图服务器已保存。"}, - "app.skin-site.admin.audit.title": {"message": "登录与认证审计"}, - "app.skin-site.admin.audit.loading": {"message": "加载中…"}, - "app.skin-site.admin.audit.failed": {"message": "无法加载审计日志。"}, - "app.skin-site.admin.audit.empty": {"message": "没有审计记录。"}, - "app.skin-site.admin.audit.subject": {"message": "主体"}, - "app.skin-site.admin.audit.action": {"message": "操作"}, - "app.skin-site.admin.audit.source-ip": {"message": "来源 IP"}, - "app.skin-site.admin.audit.reported-ip": {"message": "上报玩家 IP"}, - "app.skin-site.admin.audit.count": {"message": "次数"}, - "app.skin-site.admin.audit.first-at": {"message": "首次出现"}, - "app.skin-site.admin.audit.last-at": {"message": "最近出现"}, - "app.skin-site.admin.audit.proxy": {"message": "代理"}, - "app.skin-site.admin.audit.internal": {"message": "内部"}, - "app.skin-site.admin.audit.search-subject": {"message": "主体"}, - "app.skin-site.admin.audit.search-ip": {"message": "IP"}, - "app.skin-site.admin.audit.search-action": {"message": "操作"}, - "app.skin-site.admin.audit.search": {"message": "搜索"}, - "app.skin-site.admin.audit.clear": {"message": "清空"}, - "app.skin-site.admin.audit.load-more": {"message": "加载更多"}, - "app.skin-site.admin.audit.retention": {"message": "保留天数"}, - "app.skin-site.admin.audit.record-limit": {"message": "记录上限"}, - "app.skin-site.admin.audit.save-retention": {"message": "保存"}, - "app.skin-site.admin.audit.retention-saved": {"message": "保留天数已更新。"}, - "app.skin-site.admin.donations.title": {"message": "捐赠管理"}, - "app.skin-site.admin.donations.loading": {"message": "加载中…"}, - "app.skin-site.admin.donations.failed": {"message": "无法加载捐赠列表。"}, - "app.skin-site.admin.donations.empty": {"message": "暂无捐赠记录。"}, - "app.skin-site.admin.donations.total-amount": {"message": "总额"}, - "app.skin-site.admin.donations.donor-count": {"message": "捐赠人数"}, - "app.skin-site.admin.donations.donor": {"message": "捐赠者"}, - "app.skin-site.admin.donations.amount": {"message": "金额"}, - "app.skin-site.admin.donations.updated-at": {"message": "更新时间"}, - "app.skin-site.admin.donations.external": {"message": "外部"}, - "app.skin-site.admin.donations.linked": {"message": "已绑定"}, - "app.skin-site.admin.donations.create": {"message": "新增捐赠"}, - "app.skin-site.admin.donations.save": {"message": "保存"}, - "app.skin-site.admin.donations.cancel": {"message": "取消"}, - "app.skin-site.admin.donations.edit": {"message": "编辑"}, - "app.skin-site.admin.donations.remove": {"message": "删除"}, - "app.skin-site.admin.donations.amount-field": {"message": "金额"}, - "app.skin-site.admin.donations.display-name": {"message": "显示名称"}, - "app.skin-site.admin.donations.user-uuid": {"message": "用户 UUID"}, - "app.skin-site.admin.donations.qq": {"message": "QQ"}, - "app.skin-site.admin.donations.append-mode": {"message": "在原有金额上累加"}, - "app.skin-site.admin.donations.created": {"message": "捐赠记录已创建。"}, - "app.skin-site.admin.donations.updated": {"message": "捐赠记录已更新。"}, - "app.skin-site.admin.donations.deleted": {"message": "捐赠记录已删除。"}, - "app.skin-site.admin.donations.confirm-delete": {"message": "确定删除「{name}」的捐赠记录吗?此操作不可撤销。"}, - "app.skin-site.admin.donations.load-more": {"message": "加载更多"}, - "app.skin-site.admin.mods.title": {"message": "Mod 管理"}, - "app.skin-site.admin.mods.tab-mods": {"message": "Mod 文件"}, - "app.skin-site.admin.mods.tab-tags": {"message": "规则标签"}, - "app.skin-site.admin.mods.tab-runtime": {"message": "运行时"}, - "app.skin-site.admin.mods.loading": {"message": "加载中…"}, - "app.skin-site.admin.mods.failed": {"message": "无法加载 Mod 列表。"}, - "app.skin-site.admin.mods.empty": {"message": "没有找到 Mod。"}, - "app.skin-site.admin.mods.total": {"message": "共 {count} 个 Mod"}, - "app.skin-site.admin.mods.search": {"message": "按名称搜索"}, - "app.skin-site.admin.mods.filter-all": {"message": "全部标签"}, - "app.skin-site.admin.mods.prev": {"message": "上一页"}, - "app.skin-site.admin.mods.next": {"message": "下一页"}, - "app.skin-site.admin.mods.page": {"message": "第 {page} 页"}, - "app.skin-site.admin.mods.name": {"message": "名称"}, - "app.skin-site.admin.mods.version": {"message": "版本"}, - "app.skin-site.admin.mods.mod-id": {"message": "Mod ID"}, - "app.skin-site.admin.mods.size": {"message": "大小"}, - "app.skin-site.admin.mods.loaders": {"message": "加载器"}, - "app.skin-site.admin.mods.domain-rules": {"message": "域名规则"}, - "app.skin-site.admin.mods.edit": {"message": "编辑"}, - "app.skin-site.admin.mods.save": {"message": "保存"}, - "app.skin-site.admin.mods.cancel": {"message": "取消"}, - "app.skin-site.admin.mods.remove": {"message": "删除"}, - "app.skin-site.admin.mods.updated": {"message": "Mod 已更新。"}, - "app.skin-site.admin.mods.deleted": {"message": "Mod 已删除。"}, - "app.skin-site.admin.mods.confirm-delete": {"message": "确定删除 Mod「{name}」吗?此操作不可撤销。"}, - "app.skin-site.admin.mods.rule-tags": {"message": "规则标签"}, - "app.skin-site.admin.mods.tag-name": {"message": "标签名称"}, - "app.skin-site.admin.mods.tag-rules": {"message": "规则"}, - "app.skin-site.admin.mods.tag-rules-hint": {"message": "每行一条规则。"}, - "app.skin-site.admin.mods.new-tag": {"message": "新建标签"}, - "app.skin-site.admin.mods.tag-created": {"message": "标签已创建。"}, - "app.skin-site.admin.mods.tag-updated": {"message": "标签已更新。"}, - "app.skin-site.admin.mods.tag-deleted": {"message": "标签已删除。"}, - "app.skin-site.admin.mods.confirm-delete-tag": {"message": "确定删除标签「{name}」吗?"}, - "app.skin-site.admin.mods.runtime": {"message": "运行时版本"}, - "app.skin-site.admin.mods.manifest-url": {"message": "清单地址"}, - "app.skin-site.admin.mods.upload-runtime": {"message": "上传运行时"}, - "app.skin-site.admin.mods.runtime-version": {"message": "版本"}, - "app.skin-site.admin.mods.uploading": {"message": "上传中…"}, - "app.skin-site.admin.mods.runtime-uploaded": {"message": "运行时已上传。"}, - "app.skin-site.admin.mods.activate": {"message": "设为当前"}, - "app.skin-site.admin.mods.activated": {"message": "运行时已启用。"}, - "app.skin-site.admin.mods.available": {"message": "可用"}, - "app.skin-site.admin.mods.unavailable": {"message": "不可用"}, - "app.skin-site.admin.mods.active": {"message": "当前版本"}, - "app.skin-site.admin.mods.uploader": {"message": "由 {name} 上传"}, - "app.skin-site.home.nav.title": {"message": "皮肤站"}, - "app.skin-site.home.nav.download": {"message": "资源下载"}, - "app.skin-site.home.nav.download-desc": {"message": "浏览服务器分享的文件。"}, - "app.skin-site.home.nav.review": {"message": "玩家审核"}, - "app.skin-site.home.nav.review-desc": {"message": "提交并审核玩家申请。"}, - "app.skin-site.home.nav.wiki": {"message": "服务器维基"}, - "app.skin-site.home.nav.wiki-desc": {"message": "服务器的指南与文档。"}, - "app.skin-site.home.nav.bugs": {"message": "问题追踪"}, - "app.skin-site.home.nav.bugs-desc": {"message": "反馈问题并跟踪处理进度。"}, - "app.skin-site.home.nav.map": {"message": "服务器地图"}, - "app.skin-site.home.nav.map-desc": {"message": "探索实时世界地图。"}, - "app.skin-site.home.nav.profile": {"message": "个人资料"}, - "app.skin-site.home.nav.profile-desc": {"message": "管理你的账号与皮肤。"}, - "app.skin-site.admin.wiki.title": {"message": "维基管理"}, - "app.skin-site.admin.wiki.tab-page": {"message": "页面"}, - "app.skin-site.admin.wiki.tab-audit": {"message": "审计日志"}, - "app.skin-site.admin.wiki.tab-settings": {"message": "设置"}, - "app.skin-site.admin.wiki.loading": {"message": "加载中…"}, - "app.skin-site.admin.wiki.page-path": {"message": "页面路径"}, - "app.skin-site.admin.wiki.load-page": {"message": "加载页面"}, - "app.skin-site.admin.wiki.page-not-found": {"message": "未找到该页面。"}, - "app.skin-site.admin.wiki.revision": {"message": "版本"}, - "app.skin-site.admin.wiki.author": {"message": "作者"}, - "app.skin-site.admin.wiki.updated-at": {"message": "更新时间"}, - "app.skin-site.admin.wiki.categories": {"message": "分类"}, - "app.skin-site.admin.wiki.read-policy": {"message": "阅读权限"}, - "app.skin-site.admin.wiki.edit-policy": {"message": "编辑权限"}, - "app.skin-site.admin.wiki.save-protect": {"message": "保存权限"}, - "app.skin-site.admin.wiki.protect-saved": {"message": "页面权限已更新。"}, - "app.skin-site.admin.wiki.set-home": {"message": "设为首页"}, - "app.skin-site.admin.wiki.home-set": {"message": "首页已更新。"}, - "app.skin-site.admin.wiki.set-deleted": {"message": "标记为已删除"}, - "app.skin-site.admin.wiki.set-restored": {"message": "恢复页面"}, - "app.skin-site.admin.wiki.deleted-updated": {"message": "页面删除状态已更新。"}, - "app.skin-site.admin.wiki.audit-empty": {"message": "没有审计记录。"}, - "app.skin-site.admin.wiki.audit-target": {"message": "目标"}, - "app.skin-site.admin.wiki.load-more": {"message": "加载更多"}, - "app.skin-site.admin.wiki.settings-hint": {"message": "以逗号分隔域名。"}, - "app.skin-site.admin.wiki.domains": {"message": "域名"}, - "app.skin-site.admin.wiki.home-page": {"message": "首页"}, - "app.skin-site.admin.wiki.default-skin": {"message": "默认皮肤"}, - "app.skin-site.admin.wiki.max-page-bytes": {"message": "页面最大字节数"}, - "app.skin-site.admin.wiki.max-attachment-bytes": {"message": "附件最大字节数"}, - "app.skin-site.admin.wiki.save-settings": {"message": "保存设置"}, - "app.skin-site.admin.wiki.settings-saved": {"message": "设置已保存。"}, - "app.skin-site.admin.review.tab-list": {"message": "申请列表"}, - "app.skin-site.admin.review.tab-papers": {"message": "试卷管理"}, - "app.skin-site.admin.review.papers-empty": {"message": "还没有审核试卷。"}, - "app.skin-site.admin.review.new-paper": {"message": "新建试卷"}, - "app.skin-site.admin.review.edit-paper": {"message": "编辑"}, - "app.skin-site.admin.review.paper-title": {"message": "试卷标题"}, - "app.skin-site.admin.review.paper-annotation": {"message": "描述"}, - "app.skin-site.admin.review.paper-enabled": {"message": "启用"}, - "app.skin-site.admin.review.paper-mode": {"message": "阅卷模式"}, - "app.skin-site.admin.review.paper-pass-score": {"message": "通过分数"}, - "app.skin-site.admin.review.paper-target-permissions": {"message": "通过后获得的身份"}, - "app.skin-site.admin.review.paper-questions": {"message": "题目"}, - "app.skin-site.admin.review.add-question": {"message": "添加题目"}, - "app.skin-site.admin.review.question-title": {"message": "题目"}, - "app.skin-site.admin.review.question-type": {"message": "题型"}, - "app.skin-site.admin.review.question-score": {"message": "分数"}, - "app.skin-site.admin.review.question-annotation": {"message": "题目注解"}, - "app.skin-site.admin.review.add-option": {"message": "添加选项"}, - "app.skin-site.admin.review.option-description": {"message": "选项文本"}, - "app.skin-site.admin.review.option-correct": {"message": "正确"}, - "app.skin-site.admin.review.remove-question": {"message": "删除"}, - "app.skin-site.admin.review.question-no": {"message": "第 {n} 题"}, - "app.skin-site.admin.review.paper-created": {"message": "试卷已创建。"}, - "app.skin-site.admin.review.paper-saved": {"message": "试卷已保存。"}, - "app.skin-site.admin.review.mail-title": {"message": "通过邮件"}, - "app.skin-site.admin.review.mail-enabled": {"message": "审核通过后发送邮件"}, - "app.skin-site.admin.review.mail-subject": {"message": "邮件标题"}, - "app.skin-site.admin.review.mail-message": {"message": "邮件正文"}, - "app.skin-site.admin.review.mail-extra": {"message": "邮件补充说明"}, - "app.skin-site.admin.review.mail-include-invite": {"message": "附带邀请码"}, - "app.skin-site.admin.review.prevent-duplicate": {"message": "禁止重复作答"}, - "app.skin-site.admin.review.copy-link": {"message": "复制直链"}, - "app.skin-site.admin.review.link-copied": {"message": "直链已复制。"}, - "app.skin-site.admin.review.move-up": {"message": "上移"}, - "app.skin-site.admin.review.move-down": {"message": "下移"}, - "app.skin-site.admin.review.mail-subject-required": {"message": "开启邮件后必须填写邮件标题。"}, - "app.skin-site.admin.review.mail-message-required": {"message": "开启邮件后必须填写邮件正文。"}, - "app.skin-site.admin.users.actions": {"message": "操作"}, - "app.skin-site.admin.users.audit": {"message": "审计"}, - "app.skin-site.admin.users.audit-empty": {"message": "暂无管理审计记录。"}, - "app.skin-site.admin.users.audit-more": {"message": "加载更早记录"}, - "app.skin-site.admin.users.audit-title": {"message": "用户管理审计"}, - "app.skin-site.admin.users.bot": {"message": "机器人"}, - "app.skin-site.admin.users.bot-active": {"message": "Token 有效"}, - "app.skin-site.admin.users.bot-ban": {"message": "封禁 Bot 创建"}, - "app.skin-site.admin.users.bot-creation-banned": {"message": "禁止创建 Token"}, - "app.skin-site.admin.users.bot-exists": {"message": "已创建 Bot"}, - "app.skin-site.admin.users.bot-inactive": {"message": "Token 已失效"}, - "app.skin-site.admin.users.bot-invalidate": {"message": "使 Token 失效"}, - "app.skin-site.admin.users.bot-not-exists": {"message": "尚未创建 Bot"}, - "app.skin-site.admin.users.bot-save-username": {"message": "保存机器人用户名"}, - "app.skin-site.admin.users.bot-title": {"message": "Bot 管理"}, - "app.skin-site.admin.users.bot-token-hint": {"message": "Token 标识"}, - "app.skin-site.admin.users.bot-unban": {"message": "解除 Bot 封禁"}, - "app.skin-site.admin.users.bot-username": {"message": "机器人用户名"}, - "app.skin-site.admin.users.bound-players-title": {"message": "绑定玩家"}, - "app.skin-site.admin.users.frequency": {"message": "频率限制"}, - "app.skin-site.admin.users.frequency-clear": {"message": "取消限制"}, - "app.skin-site.admin.users.frequency-current": {"message": "当前 {percent}%"}, - "app.skin-site.admin.users.frequency-hint": {"message": "以下列频率对指定用户进行丢包处理,限制其进入服务器的频率。"}, - "app.skin-site.admin.users.frequency-none": {"message": "当前未启用"}, - "app.skin-site.admin.users.frequency-range": {"message": "仅允许设置 10% 至 100% 的整数。"}, - "app.skin-site.admin.users.frequency-save": {"message": "保存限制"}, - "app.skin-site.admin.users.frequency-title": {"message": "频率限制"}, - "app.skin-site.admin.users.invite": {"message": "邀请用户"}, - "app.skin-site.admin.users.invite-copied": {"message": "邀请码已复制。"}, - "app.skin-site.admin.users.invite-copy": {"message": "复制"}, - "app.skin-site.admin.users.invite-email": {"message": "邮箱"}, - "app.skin-site.admin.users.invite-email-invalid": {"message": "请输入正确格式的邮箱。"}, - "app.skin-site.admin.users.invite-generate": {"message": "生成邀请码"}, - "app.skin-site.admin.users.invite-title": {"message": "邀请用户"}, - "app.skin-site.admin.users.legacy-adapted": {"message": "已适配旧内服"}, - "app.skin-site.admin.users.registered-at": {"message": "注册时间"}, - "app.skin-site.admin.users.status": {"message": "状态"}, - "app.skin-site.admin.users.status-banned": {"message": "已封禁"}, - "app.skin-site.admin.users.status-normal": {"message": "正常"}, - "app.skin-site.admin.mods.upload": {"message": "上传"}, - "app.skin-site.admin.mods.select-mode": {"message": "选择多个"}, - "app.skin-site.admin.mods.exit-select": {"message": "完成选择"}, - "app.skin-site.admin.mods.select-all": {"message": "全选本页"}, - "app.skin-site.admin.mods.clear-selection": {"message": "取消全选"}, - "app.skin-site.admin.mods.selected-count": {"message": "已选择 {count} 项"}, - "app.skin-site.admin.mods.delete-selected": {"message": "删除所选"}, - "app.skin-site.admin.mods.confirm-delete-multi": {"message": "确定删除选中的 {count} 个 Mod?此操作不可撤销。"}, - "app.skin-site.admin.mods.deleted-multi": {"message": "已删除所选 Mod。"}, - "app.skin-site.admin.mods.server-address": {"message": "服务器地址"}, - "app.skin-site.admin.mods.server-address-hint": {"message": "按服务器地址过滤"}, - "app.skin-site.admin.mods.apply": {"message": "应用"}, - "app.skin-site.admin.mods.clear": {"message": "清除"}, - "app.skin-site.admin.mods.upload-title": {"message": "上传 Mod"}, - "app.skin-site.admin.mods.upload-drop": {"message": "拖拽 .jar 文件到此处,或点击选择"}, - "app.skin-site.admin.mods.upload-sub": {"message": "支持多文件,单个不超过 {size} MB"}, - "app.skin-site.admin.mods.upload-tags": {"message": "附加规则标签"}, - "app.skin-site.admin.mods.upload-queue": {"message": "文件列表"}, - "app.skin-site.admin.mods.upload-pending": {"message": "等待中"}, - "app.skin-site.admin.mods.upload-checking": {"message": "检查中…"}, - "app.skin-site.admin.mods.upload-uploading": {"message": "上传中…"}, - "app.skin-site.admin.mods.upload-conflict": {"message": "名称已存在"}, - "app.skin-site.admin.mods.upload-success": {"message": "完成"}, - "app.skin-site.admin.mods.upload-error": {"message": "失败"}, - "app.skin-site.admin.mods.upload-exists": {"message": "该文件已存在于服务器。"}, - "app.skin-site.admin.mods.upload-name-conflict": {"message": "已存在同名 Mod"}, - "app.skin-site.admin.mods.upload-name-conflict-hint": {"message": "覆盖已有 Mod,或跳过此文件。"}, - "app.skin-site.admin.mods.upload-overwrite": {"message": "覆盖"}, - "app.skin-site.admin.mods.upload-skip": {"message": "跳过"}, - "app.skin-site.admin.mods.upload-close": {"message": "关闭"}, - "app.skin-site.admin.mods.upload-all-done": {"message": "全部文件处理完成。"}, - "app.skin-site.admin.mods.upload-too-large": {"message": "文件过大:{name}"}, - "app.skin-site.chat.avatar.label": {"message": "房间头像"}, - "app.skin-site.chat.avatar.upload": {"message": "上传头像"}, - "app.skin-site.chat.avatar.replace": {"message": "更换头像"}, - "app.skin-site.chat.avatar.remove": {"message": "移除头像"}, - "app.skin-site.chat.avatar.hint": {"message": "支持 PNG、JPEG、WebP,单边不超过 8192 像素,文件不超过 5 MB。"}, - "app.skin-site.chat.avatar.bad-format": {"message": "房间头像仅支持 PNG、JPEG 和 WebP 格式。"}, - "app.skin-site.chat.avatar.too-large": {"message": "房间头像大小不能超过 5 MB。"}, - "app.skin-site.chat.avatar.not-image": {"message": "房间头像必须是图片。"}, - "app.skin-site.chat.admin.title": {"message": "聊天室管理"}, - "app.skin-site.chat.admin.subtitle": {"message": "创建公开或私有房间,并将日常管理权限交给合适的成员。"}, - "app.skin-site.chat.admin.create-room": {"message": "创建房间"}, - "app.skin-site.chat.admin.loading": {"message": "加载中…"}, - "app.skin-site.chat.admin.failed": {"message": "无法加载房间列表。"}, - "app.skin-site.chat.admin.empty": {"message": "还没有聊天室。"}, - "app.skin-site.chat.admin.edit": {"message": "编辑"}, - "app.skin-site.chat.admin.remove": {"message": "删除"}, - "app.skin-site.chat.admin.save": {"message": "保存"}, - "app.skin-site.chat.admin.cancel": {"message": "取消"}, - "app.skin-site.chat.admin.name": {"message": "房间名称"}, - "app.skin-site.chat.admin.description": {"message": "房间简介"}, - "app.skin-site.chat.admin.visibility": {"message": "可见性"}, - "app.skin-site.chat.admin.visibility-public": {"message": "公开"}, - "app.skin-site.chat.admin.visibility-private": {"message": "私有"}, - "app.skin-site.chat.admin.kind": {"message": "房间类型"}, - "app.skin-site.chat.admin.kind-standard": {"message": "普通房间"}, - "app.skin-site.chat.admin.kind-settlement": {"message": "聚落房间"}, - "app.skin-site.chat.admin.prerequisite-mode": {"message": "前置条件判定"}, - "app.skin-site.chat.admin.prerequisite-any": {"message": "满足任一"}, - "app.skin-site.chat.admin.prerequisite-all": {"message": "满足全部"}, - "app.skin-site.chat.admin.prerequisite-permissions": {"message": "所需权限"}, - "app.skin-site.chat.admin.prerequisite-hint": {"message": "以逗号分隔;留空表示无限制。"}, - "app.skin-site.chat.admin.created": {"message": "房间已创建。"}, - "app.skin-site.chat.admin.updated": {"message": "房间资料已更新。"}, - "app.skin-site.chat.admin.deleted": {"message": "房间已删除。"}, - "app.skin-site.chat.admin.confirm-delete": {"message": "确认永久删除房间“{name}”及其中全部消息吗?"}, - "app.skin-site.chat.admin.manager-badge": {"message": "管理"}, - "app.skin-site.chat.admin.voice-badge": {"message": "语音"}, - "app.skin-site.chat.user-picker.label": {"message": "选择用户"}, - "app.skin-site.chat.user-picker.placeholder": {"message": "搜索用户名、邮箱或账号 ID"}, - "app.skin-site.chat.user-picker.by-user": {"message": "按用户信息"}, - "app.skin-site.chat.user-picker.by-player": {"message": "按玩家 ID"}, - "app.skin-site.chat.user-picker.hint": {"message": "支持按用户名、邮箱模糊搜索,也可输入账号 ID 搜索。"}, - "app.skin-site.chat.user-picker.player-hint": {"message": "输入玩家名称,查找绑定该玩家 ID 的用户。"}, - "app.skin-site.chat.user-picker.empty": {"message": "没有找到匹配的用户"}, - "app.skin-site.chat.user-picker.banned": {"message": "该账号已被封禁,不能执行此操作。"}, - "app.skin-site.chat.user-picker.guest": {"message": "游客不能成为房管、聚落主或聚落成员。"}, - "app.skin-site.chat.user-picker.already-in": {"message": "该用户已经在当前房间中。"}, - "app.skin-site.chat.user-picker.not-allowed": {"message": "该用户不在当前允许选择的范围内"}, - "app.skin-site.chat.user-picker.select": {"message": "选择此用户"}, - "app.skin-site.chat.user-picker.selected": {"message": "已选择此用户"}, - "app.skin-site.chat.user-picker.id": {"message": "ID"}, - "app.skin-site.chat.admin.managers": {"message": "房管"}, - "app.skin-site.chat.admin.manager-title": {"message": "任命房管"}, - "app.skin-site.chat.admin.manager-hint": {"message": "房管可以管理该房间的成员、消息与文件。"}, - "app.skin-site.chat.admin.grant": {"message": "任命"}, - "app.skin-site.chat.admin.revoke": {"message": "撤销"}, - "app.skin-site.chat.admin.manager-granted": {"message": "已任命房管。"}, - "app.skin-site.chat.admin.manager-revoked": {"message": "已撤销房管。"}, - "app.skin-site.chat.admin.owner-title": {"message": "聚落主"}, - "app.skin-site.chat.admin.owner-hint": {"message": "为该房间任命首任聚落主。"}, - "app.skin-site.chat.admin.owner-assigned": {"message": "已任命聚落主。"}, - "app.skin-site.chat.admin.owner-current": {"message": "当前聚落主:{name}"}, - "app.skin-site.chat.admin.owner-none": {"message": "尚未设置聚落主。"}, - "app.skin-site.chat.admin.audit": {"message": "审计"}, - "app.skin-site.chat.admin.audit-title": {"message": "房间审计"}, - "app.skin-site.chat.admin.audit-empty": {"message": "暂无审计记录。"}, - "app.skin-site.chat.admin.audit-target": {"message": "对象:{name}"}, - "app.skin-site.chat.admin.close": {"message": "关闭"}, - "app.skin-site.chat.voice-runtime-title": {"message": "实时语音库"}, - "app.skin-site.chat.voice-logs": {"message": "查看日志"}, - "app.skin-site.chat.voice-config": {"message": "配置语音库"}, - "app.skin-site.chat.voice-retry": {"message": "重新部署"}, - "app.skin-site.chat.voice-config-title": {"message": "语音库配置"}, - "app.skin-site.chat.voice-logs-title": {"message": "LiveKit 日志"}, - "app.skin-site.chat.voice-capacity-title": {"message": "语音容量"}, - "app.skin-site.chat.voice-capacity": {"message": "语音容量"}, - "app.skin-site.chat.participant-limit": {"message": "参与人数上限"}, - "app.skin-site.chat.listener-limit": {"message": "旁听人数上限"}, - "app.skin-site.chat.voice-capacity-updated": {"message": "语音容量已更新。"}, - "app.skin-site.chat.voice-enabled": {"message": "启用实时语音"}, - "app.skin-site.chat.voice-runtime-path": {"message": "语音库目录"}, - "app.skin-site.chat.voice-mirror": {"message": "镜像基础地址"}, - "app.skin-site.chat.voice-public-url": {"message": "公网访问地址"}, - "app.skin-site.chat.voice-bind": {"message": "监听地址"}, - "app.skin-site.chat.voice-signal-port": {"message": "信令端口"}, - "app.skin-site.chat.voice-rtc-tcp-port": {"message": "媒体 TCP 端口"}, - "app.skin-site.chat.voice-rtc-udp-port": {"message": "媒体 UDP 端口"}, - "app.skin-site.chat.voice-startup-timeout": {"message": "启动等待时间(秒)"}, - "app.skin-site.chat.voice-use-external-ip": {"message": "使用外部 IP"}, - "app.skin-site.chat.voice-node-ip": {"message": "节点 IP"}, - "app.skin-site.chat.voice-saved": {"message": "语音库配置已保存。"}, - "app.skin-site.chat.voice-logs-auto-refresh": {"message": "自动刷新"}, - "app.skin-site.chat.voice-logs-refresh": {"message": "刷新"}, - "app.skin-site.chat.voice-logs-empty": {"message": "暂无日志。"}, - "app.skin-site.chat.admin.voice-runtime-title": {"message": "实时语音库"}, - "app.skin-site.chat.admin.voice-logs": {"message": "查看日志"}, - "app.skin-site.chat.admin.voice-config": {"message": "配置语音库"}, - "app.skin-site.chat.admin.voice-retry": {"message": "重新部署"}, - "app.skin-site.chat.admin.voice-config-title": {"message": "语音库配置"}, - "app.skin-site.chat.admin.voice-logs-title": {"message": "LiveKit 日志"}, - "app.skin-site.chat.admin.voice-capacity-title": {"message": "语音容量"}, - "app.skin-site.chat.admin.voice-capacity": {"message": "语音容量"}, - "app.skin-site.chat.admin.participant-limit": {"message": "参与人数上限"}, - "app.skin-site.chat.admin.listener-limit": {"message": "旁听人数上限"}, - "app.skin-site.chat.admin.voice-capacity-updated": {"message": "语音容量已更新。"}, - "app.skin-site.chat.admin.voice-enabled": {"message": "启用实时语音"}, - "app.skin-site.chat.admin.voice-runtime-path": {"message": "语音库目录"}, - "app.skin-site.chat.admin.voice-mirror": {"message": "镜像基础地址"}, - "app.skin-site.chat.admin.voice-public-url": {"message": "公网访问地址"}, - "app.skin-site.chat.admin.voice-bind": {"message": "监听地址"}, - "app.skin-site.chat.admin.voice-signal-port": {"message": "信令端口"}, - "app.skin-site.chat.admin.voice-rtc-tcp-port": {"message": "媒体 TCP 端口"}, - "app.skin-site.chat.admin.voice-rtc-udp-port": {"message": "媒体 UDP 端口"}, - "app.skin-site.chat.admin.voice-startup-timeout": {"message": "启动等待时间(秒)"}, - "app.skin-site.chat.admin.voice-use-external-ip": {"message": "使用外部 IP"}, - "app.skin-site.chat.admin.voice-node-ip": {"message": "节点 IP"}, - "app.skin-site.chat.admin.voice-saved": {"message": "语音库配置已保存。"}, - "app.skin-site.chat.admin.voice-logs-auto-refresh": {"message": "自动刷新"}, - "app.skin-site.chat.admin.voice-logs-refresh": {"message": "刷新"}, - "app.skin-site.chat.admin.voice-logs-empty": {"message": "暂无日志。"}, - "app.skin-site.admin.wiki.tab-migration": {"message": "迁移中心"}, - "app.skin-site.admin.wiki.migration-title": {"message": "MediaWiki 迁移"}, - "app.skin-site.admin.wiki.migration-hint": {"message": "迁移内容会先进入不可见暂存区,所有页面完成导入或排除审核后才能整批发布。"}, - "app.skin-site.admin.wiki.auto-title": {"message": "从 MediaWiki API 自动读取"}, - "app.skin-site.admin.wiki.api-url": {"message": "api.php 地址"}, - "app.skin-site.admin.wiki.bot-username": {"message": "Bot 用户名(选填)"}, - "app.skin-site.admin.wiki.bot-password": {"message": "Bot 密码(选填)"}, - "app.skin-site.admin.wiki.credentials-hint": {"message": "凭据只存在于本次后台任务的内存中,携带凭据时必须使用 HTTPS。"}, - "app.skin-site.admin.wiki.allow-private": {"message": "明确允许访问内网来源"}, - "app.skin-site.admin.wiki.allow-private-hint": {"message": "内网来源可能访问皮肤站所在网络中的服务,请只对可信地址启用。"}, - "app.skin-site.admin.wiki.start-auto": {"message": "创建自动迁移任务"}, - "app.skin-site.admin.wiki.xml-title": {"message": "导入 MediaWiki XML"}, - "app.skin-site.admin.wiki.xml-file": {"message": "导出文件"}, - "app.skin-site.admin.wiki.start-xml": {"message": "上传并建立暂存任务"}, - "app.skin-site.admin.wiki.stale-rules": {"message": "疑似过时页面筛选规则"}, - "app.skin-site.admin.wiki.stale-days": {"message": "未更新天数"}, - "app.skin-site.admin.wiki.maintainer-window": {"message": "维护者统计天数"}, - "app.skin-site.admin.wiki.max-maintainers": {"message": "维护者人数不超过"}, - "app.skin-site.admin.wiki.stale-markers": {"message": "过时分类、模板或文字标记"}, - "app.skin-site.admin.wiki.stale-markers-hint": {"message": "使用逗号分隔"}, - "app.skin-site.admin.wiki.jobs": {"message": "迁移任务"}, - "app.skin-site.admin.wiki.refresh-jobs": {"message": "刷新"}, - "app.skin-site.admin.wiki.jobs-empty": {"message": "还没有迁移任务。"}, - "app.skin-site.admin.wiki.reviewed-count": {"message": "已审核 {reviewed} / {total}"}, - "app.skin-site.admin.wiki.imported-excluded": {"message": "导入 {imported} · 排除 {excluded}"}, - "app.skin-site.admin.wiki.view-job": {"message": "查看任务"}, - "app.skin-site.admin.wiki.delete-job": {"message": "删除迁移记录"}, - "app.skin-site.admin.wiki.confirm-delete-job": {"message": "确认删除迁移任务 #{id}?此操作不可恢复。"}, - "app.skin-site.admin.wiki.candidates": {"message": "候选页面"}, - "app.skin-site.admin.wiki.candidates-empty": {"message": "选择任务后查看其页面。"}, - "app.skin-site.admin.wiki.last-updated": {"message": "更新于 {date}"}, - "app.skin-site.admin.wiki.maintainer-count": {"message": "{count} 位维护者"}, - "app.skin-site.admin.wiki.conflict": {"message": "标题冲突"}, - "app.skin-site.admin.wiki.target-title": {"message": "目标标题"}, - "app.skin-site.admin.wiki.overwrite": {"message": "覆盖"}, - "app.skin-site.admin.wiki.import": {"message": "导入"}, - "app.skin-site.admin.wiki.exclude": {"message": "排除"}, - "app.skin-site.admin.wiki.publish": {"message": "整批发布"}, - "app.skin-site.admin.wiki.rollback": {"message": "回滚"}, - "app.skin-site.admin.wiki.confirm-rollback": {"message": "确认回滚本批迁移?已发布的页面将被还原。"}, - "app.skin-site.admin.wiki.state-importing": {"message": "正在读取"}, - "app.skin-site.admin.wiki.state-review": {"message": "等待审核"}, - "app.skin-site.admin.wiki.state-publishing": {"message": "正在发布"}, - "app.skin-site.admin.wiki.state-published": {"message": "已发布"}, - "app.skin-site.admin.wiki.state-failed": {"message": "失败"}, - "app.skin-site.admin.wiki.state-rolled-back": {"message": "已回滚"}, - "app.skin-site.admin.wiki.decision-pending": {"message": "待审核"}, - "app.skin-site.admin.wiki.decision-import": {"message": "导入"}, - "app.skin-site.admin.wiki.decision-exclude": {"message": "排除"}, - "app.skin-site.admin.wiki.migration-started": {"message": "迁移任务已创建。"}, - "app.skin-site.admin.wiki.xml-staged": {"message": "XML 已解析并进入逐页审核阶段。"}, - "app.skin-site.admin.wiki.published": {"message": "已发布 {imported} 个页面,覆盖 {overwritten} 个。"}, - "app.skin-site.admin.wiki.rolled-back": {"message": "迁移批次已安全回滚。"}, - "app.skin-site.admin.wiki.job-deleted": {"message": "迁移记录已删除。"}, - "app.skin-site.admin.wiki.select-xml": {"message": "请先选择 MediaWiki XML 文件。"}, - "app.skin-site.wiki.title": {"message": "StarLight 维基"}, - "app.skin-site.wiki.search-placeholder": {"message": "输入页面标题"}, - "app.skin-site.wiki.open": {"message": "打开"}, - "app.skin-site.wiki.loading": {"message": "加载中…"}, - "app.skin-site.wiki.not-found": {"message": "页面不存在。"}, - "app.skin-site.wiki.empty": {"message": "在上方输入页面标题开始阅读。"}, - "app.skin-site.wiki.updated-at": {"message": "最后编辑于 {date},编辑者 {author}"}, - "app.skin-site.wiki.revision": {"message": "修订 #{id}"}, - "app.skin-site.wiki.categories": {"message": "分类"}, - "app.skin-site.wiki.back": {"message": "返回"} + "app.settings.synced-options.choose-sync-source.command-history-description": { + "message": "选择要从哪个实例复制命令历史记录。这些记录仅用于初始同步,之后可从任意实例编辑。" + }, + "app.settings.synced-options.choose-sync-source.command-history-title": { + "message": "选择命令历史记录来源" + }, + "app.settings.synced-options.choose-sync-source.creative-hotbars-description": { + "message": "选择要从哪个实例复制保存的创造模式快捷栏。这些快捷栏仅用于初始同步,之后可从任意实例编辑。" + }, + "app.settings.synced-options.choose-sync-source.creative-hotbars-title": { + "message": "选择创造模式快捷栏来源" + }, + "app.settings.synced-options.choose-sync-source.data-packs-title": { + "message": "选择数据包来源" + }, + "app.settings.synced-options.choose-sync-source.game-settings-description": { + "message": "选择要从哪个实例复制游戏设置。这些设置仅用于初始同步,之后可从任意实例编辑。" + }, + "app.settings.synced-options.choose-sync-source.game-settings-title": { + "message": "选择游戏设置来源" + }, + "app.settings.synced-options.choose-sync-source.ineligible": { + "message": "无法选择此实例作为同步来源" + }, + "app.settings.synced-options.choose-sync-source.load-error": { + "message": "无法加载同步来源,请重试。" + }, + "app.settings.synced-options.choose-sync-source.multiplayer-servers-description": { + "message": "选择要从哪个实例复制多人服务器列表。这些服务器仅用于初始同步,之后可从任意实例编辑。" + }, + "app.settings.synced-options.choose-sync-source.multiplayer-servers-title": { + "message": "选择多人服务器来源" + }, + "app.settings.synced-options.choose-sync-source.no-instances-found": { + "message": "没有找到实例" + }, + "app.settings.synced-options.choose-sync-source.resource-packs-title": { + "message": "选择资源包来源" + }, + "app.settings.synced-options.choose-sync-source.retry": { "message": "重试" }, + "app.settings.synced-options.choose-sync-source.search-placeholder": { + "message": "搜索实例" + }, + "app.settings.synced-options.choose-sync-source.sync": { "message": "同步" }, + "app.settings.synced-options.command-history": { "message": "同步命令记录" }, + "app.settings.synced-options.command-history.description": { + "message": "在不同的实例之间同步命令记录。" + }, + "app.settings.synced-options.command-history.editor-title": { + "message": "编辑指令历史记录" + }, + "app.settings.synced-options.creative-hotbars": { + "message": "同步保存的创造模式物品栏" + }, + "app.settings.synced-options.creative-hotbars.description": { + "message": "在不同的实例之间同步创造模式物品栏。" + }, + "app.settings.synced-options.data-packs": { "message": "同步数据包" }, + "app.settings.synced-options.data-packs.description": { + "message": "在所有实例间使用相同的数据包" + }, + "app.settings.synced-options.data-packs.none-synced-yet": { + "message": "尚未同步任何数据包" + }, + "app.settings.synced-options.edit.no-instances": { + "message": "请先添加实例,再编辑同步数据。" + }, + "app.settings.synced-options.edit.no-synced-data": { + "message": "请先选择同步来源,再编辑此设置。" + }, + "app.settings.synced-options.game-settings": { "message": "同步游戏设置" }, + "app.settings.synced-options.game-settings.button": { + "message": "编辑游戏设置" + }, + "app.settings.synced-options.game-settings.description": { + "message": "在所有实例间使用相同的游戏设置。" + }, + "app.settings.synced-options.game-settings.disabled-tooltip": { + "message": "请先启用游戏设置同步,再选择单个设置。" + }, + "app.settings.synced-options.game-settings.no-options-to-edit": { + "message": "目前没有可编辑的设置" + }, + "app.settings.synced-options.multiplayer-servers": { + "message": "同步多人模式服务器列表" + }, + "app.settings.synced-options.multiplayer-servers.address": { + "message": "服务器地址" + }, + "app.settings.synced-options.multiplayer-servers.copy-address": { + "message": "复制地址" + }, + "app.settings.synced-options.multiplayer-servers.count": { + "message": "{count, number} 个服务器" + }, + "app.settings.synced-options.multiplayer-servers.description": { + "message": "在不同的实例直接同步多人模式服务器列表。" + }, + "app.settings.synced-options.multiplayer-servers.editor-title": { + "message": "编辑同步的服务器" + }, + "app.settings.synced-options.multiplayer-servers.empty": { + "message": "当前未同步任何用户添加的服务器。" + }, + "app.settings.synced-options.multiplayer-servers.filter-offline": { + "message": "离线" + }, + "app.settings.synced-options.multiplayer-servers.filter-online": { + "message": "在线" + }, + "app.settings.synced-options.multiplayer-servers.more-options": { + "message": "更多服务器选项" + }, + "app.settings.synced-options.multiplayer-servers.name": { + "message": "服务器名称" + }, + "app.settings.synced-options.multiplayer-servers.no-results": { + "message": "没有匹配搜索或筛选条件的已同步服务器。" + }, + "app.settings.synced-options.multiplayer-servers.none-synced-yet": { + "message": "暂无已同步的服务器" + }, + "app.settings.synced-options.multiplayer-servers.players-online": { + "message": "{count, number} 人在线" + }, + "app.settings.synced-options.multiplayer-servers.search": { + "message": "搜索 {count, number} 个已同步服务器……" + }, + "app.settings.synced-options.multiplayer-servers.status": { + "message": "状态" + }, + "app.settings.synced-options.packs.disabled": { + "message": "请先启用同步,再编辑共享包。" + }, + "app.settings.synced-options.resource-packs": { "message": "同步资源包" }, + "app.settings.synced-options.resource-packs.description": { + "message": "在所有实例间使用相同的资源包" + }, + "app.settings.synced-options.resource-packs.none-synced-yet": { + "message": "尚未同步任何资源包" + }, + "app.settings.synced-options.title": { "message": "跨所有实例同步的选项" }, + "app.settings.synced-packs.data-packs": { "message": "数据包" }, + "app.settings.synced-packs.disable": { "message": "禁用" }, + "app.settings.synced-packs.empty": { "message": "没有已同步的包" }, + "app.settings.synced-packs.enable": { "message": "启用" }, + "app.settings.synced-packs.remove": { "message": "移除" }, + "app.settings.synced-packs.resource-packs": { "message": "资源包" }, + "app.sync-instances-update.choose-source.data-packs": { + "message": "选择要从哪个实例复制数据包。这些包仅用于初始化同步,之后可从任意实例进行编辑。" + }, + "app.sync-instances-update.choose-source.resource-packs": { + "message": "选择要从哪个实例复制资源包。这些包仅用于初始化同步,之后可从任意实例进行编辑。" + }, + "instance.settings.tabs.backups": { "message": "备份" }, + "instance.settings.tabs.sync": { "message": "同步" }, + "app.settings.game-options.category.accessibility.description": { + "message": "无障碍设置" + }, + "app.settings.game-options.category.accessibility.label": { + "message": "无障碍" + }, + "app.settings.game-options.category.chat.description": { + "message": "聊天显示与外观" + }, + "app.settings.game-options.category.chat.label": { "message": "聊天" }, + "app.settings.game-options.category.controls.description": { + "message": "鼠标、移动与按键绑定" + }, + "app.settings.game-options.category.controls.label": { "message": "控制" }, + "app.settings.game-options.category.custom.description": { + "message": "由模组添加的设置" + }, + "app.settings.game-options.category.custom.label": { + "message": "自定义设置" + }, + "app.settings.game-options.category.language.description": { + "message": "游戏语言" + }, + "app.settings.game-options.category.language.label": { "message": "语言" }, + "app.settings.game-options.category.music-and-sound.description": { + "message": "音量与音频偏好" + }, + "app.settings.game-options.category.music-and-sound.label": { + "message": "音乐和声音" + }, + "app.settings.game-options.category.online.description": { + "message": "在线与 Realms 偏好" + }, + "app.settings.game-options.category.online.label": { "message": "在线" }, + "app.settings.game-options.category.skin-customization.description": { + "message": "皮肤层与主手" + }, + "app.settings.game-options.category.skin-customization.label": { + "message": "皮肤自定义" + }, + "app.settings.game-options.category.video.description": { + "message": "镜头与显示设置" + }, + "app.settings.game-options.category.video.label": { "message": "视频" }, + "app.settings.game-options.choice.all": { "message": "全部" }, + "app.settings.game-options.choice.balanced": { "message": "平衡" }, + "app.settings.game-options.choice.by-player": { "message": "按玩家" }, + "app.settings.game-options.choice.chat": { "message": "聊天" }, + "app.settings.game-options.choice.commands-only": { "message": "仅命令" }, + "app.settings.game-options.choice.constant": { "message": "持续" }, + "app.settings.game-options.choice.crosshair": { "message": "准星" }, + "app.settings.game-options.choice.custom": { "message": "自定义" }, + "app.settings.game-options.choice.decreased": { "message": "降低" }, + "app.settings.game-options.choice.default": { "message": "默认" }, + "app.settings.game-options.choice.fabulous": { "message": "极佳" }, + "app.settings.game-options.choice.fancy": { "message": "精美" }, + "app.settings.game-options.choice.far": { "message": "远" }, + "app.settings.game-options.choice.fast": { "message": "快速" }, + "app.settings.game-options.choice.frequent": { "message": "频繁" }, + "app.settings.game-options.choice.hidden": { "message": "隐藏" }, + "app.settings.game-options.choice.hotbar": { "message": "快捷栏" }, + "app.settings.game-options.choice.left": { "message": "左" }, + "app.settings.game-options.choice.limited": { "message": "有限" }, + "app.settings.game-options.choice.max-fps": { "message": "最高 FPS" }, + "app.settings.game-options.choice.maximum": { "message": "最大" }, + "app.settings.game-options.choice.minimal": { "message": "最少" }, + "app.settings.game-options.choice.minimum": { "message": "最小" }, + "app.settings.game-options.choice.nearby": { "message": "附近" }, + "app.settings.game-options.choice.never": { "message": "从不" }, + "app.settings.game-options.choice.none": { "message": "无" }, + "app.settings.game-options.choice.normal": { "message": "正常" }, + "app.settings.game-options.choice.off": { "message": "关闭" }, + "app.settings.game-options.choice.on": { "message": "开启" }, + "app.settings.game-options.choice.opengl": { "message": "OpenGL 渲染器" }, + "app.settings.game-options.choice.pause": { "message": "暂停菜单" }, + "app.settings.game-options.choice.pause-and-toast": { + "message": "暂停菜单和提示" + }, + "app.settings.game-options.choice.power-saver": { "message": "省电" }, + "app.settings.game-options.choice.right": { "message": "右" }, + "app.settings.game-options.choice.short": { "message": "短" }, + "app.settings.game-options.choice.shown": { "message": "显示" }, + "app.settings.game-options.choice.system": { "message": "系统" }, + "app.settings.game-options.choice.tiny": { "message": "极小" }, + "app.settings.game-options.choice.vulkan": { "message": "Vulkan 渲染器" }, + "app.settings.game-options.choice.when-minimized": { "message": "最小化时" }, + "app.settings.game-options.choice.while-afk": { "message": "挂机时" }, + "app.settings.game-options.compatibility.none": { + "message": "部分实例无法使用此设置" + }, + "app.settings.game-options.compatibility.reason.launcher-controlled": { + "message": "此设置由启动器设置管理" + }, + "app.settings.game-options.custom-value.placeholder": { "message": "输入值" }, + "app.settings.game-options.keybind.assigned-status": { + "message": "已将 {setting} 绑定为 {binding}。" + }, + "app.settings.game-options.keybind.cancelled-status": { + "message": "已取消按键绑定更改。" + }, + "app.settings.game-options.keybind.change": { + "message": "{setting}:{binding}。激活以更改绑定。" + }, + "app.settings.game-options.keybind.choose": { "message": "选择按键" }, + "app.settings.game-options.keybind.conflict-description": { + "message": "{settings} 已使用此按键。" + }, + "app.settings.game-options.keybind.key.arrow-down": { "message": "向下箭头" }, + "app.settings.game-options.keybind.key.arrow-left": { "message": "向左箭头" }, + "app.settings.game-options.keybind.key.arrow-right": { + "message": "向右箭头" + }, + "app.settings.game-options.keybind.key.arrow-up": { "message": "向上箭头" }, + "app.settings.game-options.keybind.key.backspace": { "message": "退格" }, + "app.settings.game-options.keybind.key.caps-lock": { "message": "大写锁定" }, + "app.settings.game-options.keybind.key.delete": { "message": "删除" }, + "app.settings.game-options.keybind.key.end": { "message": "End 键" }, + "app.settings.game-options.keybind.key.enter": { "message": "回车" }, + "app.settings.game-options.keybind.key.escape": { "message": "Esc 键" }, + "app.settings.game-options.keybind.key.home": { "message": "Home 键" }, + "app.settings.game-options.keybind.key.insert": { "message": "Insert 键" }, + "app.settings.game-options.keybind.key.keypad-key": { + "message": "数字键盘 {key}" + }, + "app.settings.game-options.keybind.key.left-alt": { "message": "左 Alt" }, + "app.settings.game-options.keybind.key.left-command": { + "message": "左 Command" + }, + "app.settings.game-options.keybind.key.left-control": { + "message": "左 Ctrl" + }, + "app.settings.game-options.keybind.key.left-shift": { "message": "左 Shift" }, + "app.settings.game-options.keybind.key.left-super": { "message": "左 Super" }, + "app.settings.game-options.keybind.key.menu": { "message": "菜单" }, + "app.settings.game-options.keybind.key.num-lock": { "message": "数字锁定" }, + "app.settings.game-options.keybind.key.page-down": { + "message": "Page Down 键" + }, + "app.settings.game-options.keybind.key.page-up": { "message": "Page Up 键" }, + "app.settings.game-options.keybind.key.pause": { "message": "暂停" }, + "app.settings.game-options.keybind.key.print-screen": { "message": "截图" }, + "app.settings.game-options.keybind.key.right-alt": { "message": "右 Alt" }, + "app.settings.game-options.keybind.key.right-command": { + "message": "右 Command" + }, + "app.settings.game-options.keybind.key.right-control": { + "message": "右 Ctrl" + }, + "app.settings.game-options.keybind.key.right-shift": { + "message": "右 Shift" + }, + "app.settings.game-options.keybind.key.right-super": { + "message": "右 Super" + }, + "app.settings.game-options.keybind.key.scroll-lock": { + "message": "滚动锁定" + }, + "app.settings.game-options.keybind.key.space": { "message": "空格" }, + "app.settings.game-options.keybind.key.tab": { "message": "Tab 键" }, + "app.settings.game-options.keybind.key.unbound": { "message": "未绑定" }, + "app.settings.game-options.keybind.key.unknown": { "message": "未知按键" }, + "app.settings.game-options.keybind.listen": { "message": "请按下一个按键……" }, + "app.settings.game-options.keybind.listening-status": { + "message": "正在监听按键或鼠标按钮。按 Esc 清除绑定。" + }, + "app.settings.game-options.keybind.mixed": { "message": "各实例不同" }, + "app.settings.game-options.keybind.modifier.alt": { "message": "Alt 键" }, + "app.settings.game-options.keybind.modifier.command": { + "message": "Command 键" + }, + "app.settings.game-options.keybind.modifier.control": { + "message": "Ctrl 键" + }, + "app.settings.game-options.keybind.modifier.shift": { "message": "Shift 键" }, + "app.settings.game-options.keybind.modifier.super": { "message": "Super 键" }, + "app.settings.game-options.keybind.mouse.button": { + "message": "鼠标 {button}" + }, + "app.settings.game-options.keybind.mouse.left": { "message": "鼠标左键" }, + "app.settings.game-options.keybind.mouse.middle": { "message": "鼠标中键" }, + "app.settings.game-options.keybind.mouse.right": { "message": "鼠标右键" }, + "app.settings.game-options.keybind.recording-label": { + "message": "{setting}:正在监听按键或鼠标按钮。按 Esc 清除绑定。" + }, + "app.settings.game-options.keybind.scancode": { "message": "扫描码 {code}" }, + "app.settings.game-options.keybind.unsupported-status": { + "message": "Minecraft 无法使用此输入,请尝试其他按键。" + }, + "app.settings.game-options.setting.advanced-opengl.label": { + "message": "高级 OpenGL" + }, + "app.settings.game-options.setting.allow-cursor-changes.label": { + "message": "允许光标变化" + }, + "app.settings.game-options.setting.allow-server-listing.description": { + "message": "允许玩家名称出现在服务器列表中。" + }, + "app.settings.game-options.setting.allow-server-listing.label": { + "message": "服务器列表" + }, + "app.settings.game-options.setting.alternate-blocks.label": { + "message": "备用方块" + }, + "app.settings.game-options.setting.ambient-occlusion.label": { + "message": "平滑光照" + }, + "app.settings.game-options.setting.ambient-volume.label": { + "message": "环境" + }, + "app.settings.game-options.setting.anaglyph-3d.label": { + "message": "3D 红蓝立体" + }, + "app.settings.game-options.setting.anisotropic-filtering.label": { + "message": "各向异性过滤" + }, + "app.settings.game-options.setting.anisotropy.label": { + "message": "各向异性" + }, + "app.settings.game-options.setting.attack-indicator.label": { + "message": "攻击指示器" + }, + "app.settings.game-options.setting.auto-jump.description": { + "message": "自动跳过一格高的障碍物。" + }, + "app.settings.game-options.setting.auto-jump.label": { + "message": "自动跳跃" + }, + "app.settings.game-options.setting.auto-suggestions.label": { + "message": "命令建议" + }, + "app.settings.game-options.setting.autosave-indicator.label": { + "message": "自动保存指示器" + }, + "app.settings.game-options.setting.biome-blend-radius.description": { + "message": "生物群系颜色过渡的距离。" + }, + "app.settings.game-options.setting.biome-blend-radius.label": { + "message": "生物群系混合" + }, + "app.settings.game-options.setting.blocks-volume.label": { + "message": "方块" + }, + "app.settings.game-options.setting.brightness.label": { "message": "亮度" }, + "app.settings.game-options.setting.cape.description": { + "message": "显示玩家的披风,包括鞘翅纹理。" + }, + "app.settings.game-options.setting.cape.label": { "message": "披风" }, + "app.settings.game-options.setting.chat-background-only.label": { + "message": "仅聊天背景" + }, + "app.settings.game-options.setting.chat-colors.label": { + "message": "聊天颜色" + }, + "app.settings.game-options.setting.chat-delay.label": { + "message": "聊天延迟" + }, + "app.settings.game-options.setting.chat-line-spacing.label": { + "message": "聊天行间距" + }, + "app.settings.game-options.setting.chat-links-prompt.description": { + "message": "打开聊天链接前询问" + }, + "app.settings.game-options.setting.chat-links-prompt.label": { + "message": "打开链接前询问" + }, + "app.settings.game-options.setting.chat-links.description": { + "message": "允许打开聊天中的网页链接。" + }, + "app.settings.game-options.setting.chat-links.label": { + "message": "网页链接" + }, + "app.settings.game-options.setting.chat-opacity.description": { + "message": "聊天文字的不透明度。" + }, + "app.settings.game-options.setting.chat-opacity.label": { + "message": "聊天不透明度" + }, + "app.settings.game-options.setting.chat-preview.label": { + "message": "聊天预览" + }, + "app.settings.game-options.setting.chat-scale.label": { + "message": "聊天缩放" + }, + "app.settings.game-options.setting.chat-visibility.label": { + "message": "聊天可见性" + }, + "app.settings.game-options.setting.chat-width.label": { + "message": "聊天宽度" + }, + "app.settings.game-options.setting.chunk-fade-time.label": { + "message": "区块淡出时间" + }, + "app.settings.game-options.setting.cloud-range.label": { + "message": "云层距离" + }, + "app.settings.game-options.setting.clouds.label": { "message": "云" }, + "app.settings.game-options.setting.ctrl-click-right-click.label": { + "message": "按住 Control 点击代替右键点击" + }, + "app.settings.game-options.setting.cutout-leaves.label": { + "message": "半透明树叶" + }, + "app.settings.game-options.setting.damage-tilt.label": { + "message": "受伤倾斜" + }, + "app.settings.game-options.setting.dark-splash.description": { + "message": "将 Mojang Studios 加载界面从红色改为黑色。" + }, + "app.settings.game-options.setting.dark-splash.label": { + "message": "单色徽标" + }, + "app.settings.game-options.setting.darkness-pulsing.label": { + "message": "黑暗脉动" + }, + "app.settings.game-options.setting.debug-gui-scale.label": { + "message": "调试界面缩放" + }, + "app.settings.game-options.setting.directional-audio.label": { + "message": "方向性音频" + }, + "app.settings.game-options.setting.discrete-mouse-scroll.description": { + "message": "将每次鼠标滚轮输入视为一个滚动步进。" + }, + "app.settings.game-options.setting.discrete-mouse-scroll.label": { + "message": "离散滚动" + }, + "app.settings.game-options.setting.entity-distance.label": { + "message": "实体距离" + }, + "app.settings.game-options.setting.entity-shadows.label": { + "message": "实体阴影" + }, + "app.settings.game-options.setting.exclusive-fullscreen.label": { + "message": "独占全屏" + }, + "app.settings.game-options.setting.extra-telemetry.label": { + "message": "可选遥测" + }, + "app.settings.game-options.setting.focused-chat-height.label": { + "message": "聚焦时聊天高度" + }, + "app.settings.game-options.setting.force-unicode-font.label": { + "message": "强制 Unicode 字体" + }, + "app.settings.game-options.setting.fov-effects.label": { + "message": "视野效果" + }, + "app.settings.game-options.setting.fov.label": { "message": "视野" }, + "app.settings.game-options.setting.fullscreen.label": { "message": "全屏" }, + "app.settings.game-options.setting.glint-speed.label": { + "message": "附魔光效速度" + }, + "app.settings.game-options.setting.glint-strength.label": { + "message": "附魔光效强度" + }, + "app.settings.game-options.setting.graphics-backend.label": { + "message": "图形后端" + }, + "app.settings.game-options.setting.graphics.description": { + "message": "控制画面质量和性能。" + }, + "app.settings.game-options.setting.graphics.label": { "message": "画面" }, + "app.settings.game-options.setting.gui-scale.description": { + "message": "游戏界面和 HUD 的大小。" + }, + "app.settings.game-options.setting.gui-scale.label": { + "message": "界面缩放" + }, + "app.settings.game-options.setting.hat.description": { + "message": "显示帽子皮肤层。" + }, + "app.settings.game-options.setting.hat.label": { "message": "帽子" }, + "app.settings.game-options.setting.held-item-tooltips.label": { + "message": "手持物品提示" + }, + "app.settings.game-options.setting.hide-lightning-flashes.label": { + "message": "隐藏闪电闪光" + }, + "app.settings.game-options.setting.hide-matched-names.label": { + "message": "隐藏匹配的名称" + }, + "app.settings.game-options.setting.hide-server-address.label": { + "message": "隐藏服务器地址" + }, + "app.settings.game-options.setting.hide-splash-texts.label": { + "message": "隐藏启动标语" + }, + "app.settings.game-options.setting.high-contrast-outline.label": { + "message": "高对比度方块轮廓" + }, + "app.settings.game-options.setting.high-contrast.description": { + "message": "增强界面元素的对比度。" + }, + "app.settings.game-options.setting.high-contrast.label": { + "message": "高对比度" + }, + "app.settings.game-options.setting.hostile-volume.label": { + "message": "敌对生物" + }, + "app.settings.game-options.setting.improved-transparency.label": { + "message": "改进透明度" + }, + "app.settings.game-options.setting.in-game-notifications.label": { + "message": "游戏内通知" + }, + "app.settings.game-options.setting.inactivity-framerate-limit.label": { + "message": "降低帧率" + }, + "app.settings.game-options.setting.invert-horizontal-mouse.label": { + "message": "反转水平鼠标" + }, + "app.settings.game-options.setting.invert-mouse.description": { + "message": "反转垂直鼠标移动。" + }, + "app.settings.game-options.setting.invert-mouse.label": { + "message": "反转鼠标" + }, + "app.settings.game-options.setting.jacket.description": { + "message": "显示夹克皮肤层。" + }, + "app.settings.game-options.setting.jacket.label": { "message": "夹克" }, + "app.settings.game-options.setting.japanese-glyph-variants.label": { + "message": "日文字符变体" + }, + "app.settings.game-options.setting.key-advancements.label": { + "message": "进度" + }, + "app.settings.game-options.setting.key-attack.label": { "message": "攻击" }, + "app.settings.game-options.setting.key-back.label": { "message": "后退" }, + "app.settings.game-options.setting.key-chat.label": { "message": "打开聊天" }, + "app.settings.game-options.setting.key-command.label": { "message": "命令" }, + "app.settings.game-options.setting.key-debug-advanced-tooltips.label": { + "message": "显示高级提示" + }, + "app.settings.game-options.setting.key-debug-chunk-borders.label": { + "message": "显示区块边界" + }, + "app.settings.game-options.setting.key-debug-clear-chat.label": { + "message": "清空聊天" + }, + "app.settings.game-options.setting.key-debug-copy-location.label": { + "message": "复制位置" + }, + "app.settings.game-options.setting.key-debug-copy-recreate-command.label": { + "message": "复制重建命令" + }, + "app.settings.game-options.setting.key-debug-crash.label": { + "message": "触发调试崩溃" + }, + "app.settings.game-options.setting.key-debug-dump-dynamic-textures.label": { + "message": "转储动态纹理" + }, + "app.settings.game-options.setting.key-debug-dump-version.label": { + "message": "转储版本" + }, + "app.settings.game-options.setting.key-debug-focus-pause.label": { + "message": "失去焦点时暂停" + }, + "app.settings.game-options.setting.key-debug-fps-charts.label": { + "message": "FPS 图表" + }, + "app.settings.game-options.setting.key-debug-hitboxes.label": { + "message": "显示碰撞箱" + }, + "app.settings.game-options.setting.key-debug-improved-transparency.label": { + "message": "改进透明度调试视图" + }, + "app.settings.game-options.setting.key-debug-lightmap-texture.label": { + "message": "光照贴图纹理" + }, + "app.settings.game-options.setting.key-debug-modifier.label": { + "message": "调试修饰键" + }, + "app.settings.game-options.setting.key-debug-network-charts.label": { + "message": "网络图表" + }, + "app.settings.game-options.setting.key-debug-options.label": { + "message": "调试选项" + }, + "app.settings.game-options.setting.key-debug-overlay.label": { + "message": "调试覆盖层" + }, + "app.settings.game-options.setting.key-debug-profiling-chart.label": { + "message": "性能分析图表" + }, + "app.settings.game-options.setting.key-debug-profiling.label": { + "message": "开始性能分析" + }, + "app.settings.game-options.setting.key-debug-reload-chunks.label": { + "message": "重新加载区块" + }, + "app.settings.game-options.setting.key-debug-reload-resource-packs.label": { + "message": "重新加载资源包" + }, + "app.settings.game-options.setting.key-debug-spectate.label": { + "message": "旁观实体" + }, + "app.settings.game-options.setting.key-debug-switch-game-mode.label": { + "message": "切换游戏模式" + }, + "app.settings.game-options.setting.key-drop.label": { "message": "丢弃物品" }, + "app.settings.game-options.setting.key-forward.label": { "message": "前进" }, + "app.settings.game-options.setting.key-friends.label": { "message": "好友" }, + "app.settings.game-options.setting.key-fullscreen.label": { + "message": "切换全屏" + }, + "app.settings.game-options.setting.key-hotbar-1.label": { + "message": "快捷栏 1" + }, + "app.settings.game-options.setting.key-hotbar-2.label": { + "message": "快捷栏 2" + }, + "app.settings.game-options.setting.key-hotbar-3.label": { + "message": "快捷栏 3" + }, + "app.settings.game-options.setting.key-hotbar-4.label": { + "message": "快捷栏 4" + }, + "app.settings.game-options.setting.key-hotbar-5.label": { + "message": "快捷栏 5" + }, + "app.settings.game-options.setting.key-hotbar-6.label": { + "message": "快捷栏 6" + }, + "app.settings.game-options.setting.key-hotbar-7.label": { + "message": "快捷栏 7" + }, + "app.settings.game-options.setting.key-hotbar-8.label": { + "message": "快捷栏 8" + }, + "app.settings.game-options.setting.key-hotbar-9.label": { + "message": "快捷栏 9" + }, + "app.settings.game-options.setting.key-inventory.label": { + "message": "物品栏" + }, + "app.settings.game-options.setting.key-jump.label": { "message": "跳跃" }, + "app.settings.game-options.setting.key-left.label": { "message": "向左平移" }, + "app.settings.game-options.setting.key-load-toolbar.label": { + "message": "加载工具栏" + }, + "app.settings.game-options.setting.key-perspective.label": { + "message": "切换视角" + }, + "app.settings.game-options.setting.key-pick-item.label": { + "message": "选取方块" + }, + "app.settings.game-options.setting.key-player-list.label": { + "message": "玩家列表" + }, + "app.settings.game-options.setting.key-quick-actions.label": { + "message": "快捷操作" + }, + "app.settings.game-options.setting.key-right.label": { + "message": "向右平移" + }, + "app.settings.game-options.setting.key-save-toolbar.label": { + "message": "保存工具栏" + }, + "app.settings.game-options.setting.key-screenshot.label": { + "message": "截图" + }, + "app.settings.game-options.setting.key-smooth-camera.label": { + "message": "切换电影视角" + }, + "app.settings.game-options.setting.key-sneak.label": { "message": "潜行" }, + "app.settings.game-options.setting.key-social-interactions.label": { + "message": "社交互动" + }, + "app.settings.game-options.setting.key-spectator-hotbar.label": { + "message": "旁观者快捷栏" + }, + "app.settings.game-options.setting.key-spectator-outlines.label": { + "message": "高亮旁观者" + }, + "app.settings.game-options.setting.key-sprint.label": { "message": "疾跑" }, + "app.settings.game-options.setting.key-swap-offhand.label": { + "message": "交换副手" + }, + "app.settings.game-options.setting.key-toggle-gui.label": { + "message": "切换 HUD" + }, + "app.settings.game-options.setting.key-toggle-spectator-shader.label": { + "message": "切换旁观者着色器" + }, + "app.settings.game-options.setting.key-use.label": { "message": "使用物品" }, + "app.settings.game-options.setting.language.label": { "message": "语言" }, + "app.settings.game-options.setting.left-pants-leg.label": { + "message": "左裤腿" + }, + "app.settings.game-options.setting.left-sleeve.label": { "message": "左袖" }, + "app.settings.game-options.setting.legacy-framerate-limit.label": { + "message": "帧率上限" + }, + "app.settings.game-options.setting.legacy-view-distance.label": { + "message": "视距" + }, + "app.settings.game-options.setting.mac-fullscreen-menu.label": { + "message": "全屏时显示 macOS 菜单" + }, + "app.settings.game-options.setting.main-hand.description": { + "message": "选择主手为左手还是右手。" + }, + "app.settings.game-options.setting.main-hand.label": { "message": "主手" }, + "app.settings.game-options.setting.master-volume.label": { + "message": "主音量" + }, + "app.settings.game-options.setting.max-framerate.label": { + "message": "最大帧率" + }, + "app.settings.game-options.setting.menu-background-blur.label": { + "message": "菜单背景模糊" + }, + "app.settings.game-options.setting.mipmap-levels.description": { + "message": "平滑远处纹理。" + }, + "app.settings.game-options.setting.mipmap-levels.label": { + "message": "Mipmap 级别" + }, + "app.settings.game-options.setting.mouse-wheel-sensitivity.label": { + "message": "鼠标滚轮灵敏度" + }, + "app.settings.game-options.setting.music-frequency.label": { + "message": "音乐频率" + }, + "app.settings.game-options.setting.music-toast.description": { + "message": "选择是否在暂停菜单和提示中显示音乐标题。" + }, + "app.settings.game-options.setting.music-toast.label": { + "message": "音乐通知" + }, + "app.settings.game-options.setting.music-volume.label": { "message": "音乐" }, + "app.settings.game-options.setting.narrator-hotkey.label": { + "message": "旁白快捷键" + }, + "app.settings.game-options.setting.narrator.description": { + "message": "选择旁白朗读的内容。" + }, + "app.settings.game-options.setting.narrator.label": { "message": "旁白" }, + "app.settings.game-options.setting.neutral-volume.label": { + "message": "友好生物" + }, + "app.settings.game-options.setting.notification-time.description": { + "message": "提示通知保持显示的时长。" + }, + "app.settings.game-options.setting.notification-time.label": { + "message": "通知时长" + }, + "app.settings.game-options.setting.operator-items-tab.label": { + "message": "管理员物品栏标签" + }, + "app.settings.game-options.setting.panorama-speed.label": { + "message": "全景图速度" + }, + "app.settings.game-options.setting.particles.label": { "message": "粒子" }, + "app.settings.game-options.setting.players-volume.label": { + "message": "玩家" + }, + "app.settings.game-options.setting.prioritize-chunk-updates.label": { + "message": "区块更新优先级" + }, + "app.settings.game-options.setting.quit-shortcuts.label": { + "message": "退出快捷键" + }, + "app.settings.game-options.setting.raw-mouse-input.label": { + "message": "原始鼠标输入" + }, + "app.settings.game-options.setting.realms-notifications.label": { + "message": "Realms 通知" + }, + "app.settings.game-options.setting.record-volume.label": { + "message": "唱片机/音符盒" + }, + "app.settings.game-options.setting.reduced-debug-info.label": { + "message": "减少调试信息" + }, + "app.settings.game-options.setting.render-distance.label": { + "message": "渲染距离" + }, + "app.settings.game-options.setting.right-pants-leg.label": { + "message": "右裤腿" + }, + "app.settings.game-options.setting.right-sleeve.label": { "message": "右袖" }, + "app.settings.game-options.setting.rotate-with-minecart.label": { + "message": "随矿车旋转" + }, + "app.settings.game-options.setting.save-chat-drafts.label": { + "message": "保存聊天草稿" + }, + "app.settings.game-options.setting.screen-effects.label": { + "message": "屏幕效果" + }, + "app.settings.game-options.setting.secure-chat-only.label": { + "message": "仅显示安全聊天" + }, + "app.settings.game-options.setting.sensitivity.label": { + "message": "鼠标灵敏度" + }, + "app.settings.game-options.setting.server-textures.label": { + "message": "服务器纹理" + }, + "app.settings.game-options.setting.share-presence.label": { + "message": "共享在线状态" + }, + "app.settings.game-options.setting.simulation-distance.description": { + "message": "实体更新以及方块和流体更新的距离。" + }, + "app.settings.game-options.setting.simulation-distance.label": { + "message": "模拟距离" + }, + "app.settings.game-options.setting.snooper.label": { "message": "数据收集" }, + "app.settings.game-options.setting.sprint-window.label": { + "message": "疾跑窗口" + }, + "app.settings.game-options.setting.subtitles.description": { + "message": "显示游戏声音的字幕。" + }, + "app.settings.game-options.setting.subtitles.label": { "message": "字幕" }, + "app.settings.game-options.setting.text-background-opacity.label": { + "message": "文字背景不透明度" + }, + "app.settings.game-options.setting.texture-filtering.label": { + "message": "纹理过滤" + }, + "app.settings.game-options.setting.toggle-attack.label": { + "message": "切换攻击" + }, + "app.settings.game-options.setting.toggle-crouch.description": { + "message": "按一次即可保持潜行。" + }, + "app.settings.game-options.setting.toggle-crouch.label": { + "message": "切换潜行" + }, + "app.settings.game-options.setting.toggle-sprint.description": { + "message": "按一次即可保持疾跑。" + }, + "app.settings.game-options.setting.toggle-sprint.label": { + "message": "切换疾跑" + }, + "app.settings.game-options.setting.toggle-use.label": { + "message": "切换使用" + }, + "app.settings.game-options.setting.touchscreen.label": { + "message": "触屏模式" + }, + "app.settings.game-options.setting.ui-volume.label": { "message": "界面" }, + "app.settings.game-options.setting.unfocused-chat-height.label": { + "message": "未聚焦时聊天高度" + }, + "app.settings.game-options.setting.use-vbo.label": { "message": "使用 VBO" }, + "app.settings.game-options.setting.view-bobbing.description": { + "message": "行走时为镜头添加摇摆效果。" + }, + "app.settings.game-options.setting.view-bobbing.label": { + "message": "视角摇摆" + }, + "app.settings.game-options.setting.vignette.label": { "message": "晕影" }, + "app.settings.game-options.setting.voice-volume.label": { + "message": "语音和语音朗读" + }, + "app.settings.game-options.setting.vsync.description": { + "message": "将帧率限制为显示器刷新率,以防止画面撕裂。" + }, + "app.settings.game-options.setting.vsync.label": { "message": "垂直同步" }, + "app.settings.game-options.setting.weather-radius.label": { + "message": "天气范围" + }, + "app.settings.game-options.setting.weather-volume.label": { + "message": "天气" + }, + "app.settings.game-options.validation.changed-since-opened": { + "message": "此设置已在其他位置更改,请检查后重试。" + }, + "app.settings.game-options.validation.invalid-value": { + "message": "请选择有效值。" + }, + "app.settings.game-options.validation.missing-value": { + "message": "请先选择一个值。" + }, + "app.settings.game-options.validation.no-compatible-instances": { + "message": "部分实例无法使用此设置" + }, + "app.settings.synced-options.game-settings.conflict-text": { + "message": "我们已加载最新设置。请检查更改后再次保存。" + }, + "app.settings.synced-options.game-settings.conflict-title": { + "message": "这些设置已在其他地方更改" + }, + "app.settings.synced-options.game-settings.custom-empty": { + "message": "Modrinth 在某个实例中找到模组添加的设置后,它们会显示在这里。" + }, + "app.settings.synced-options.game-settings.disable-all": { + "message": "取消同步全部" + }, + "app.settings.synced-options.game-settings.empty": { + "message": "没有匹配当前搜索或筛选条件的设置。" + }, + "app.settings.synced-options.game-settings.enable-all": { + "message": "同步全部" + }, + "app.settings.synced-options.game-settings.load-failed": { + "message": "无法加载游戏设置。" + }, + "app.settings.synced-options.game-settings.loading": { + "message": "正在加载设置……" + }, + "app.settings.synced-options.game-settings.not-being-synced": { + "message": "未同步" + }, + "app.settings.synced-options.game-settings.retry": { "message": "重试" }, + "app.settings.synced-options.game-settings.save": { "message": "保存设置" }, + "app.settings.synced-options.game-settings.search": { + "message": "搜索设置……" + }, + "app.settings.synced-options.game-settings.sync-description": { + "message": "同步的选项会应用到每个实例,并覆盖整合包中包含的值。" + }, + "app.settings.synced-options.game-settings.sync-setting": { + "message": "在所有实例间同步{setting}" + }, + "app.settings.synced-options.game-settings.sync-title": { + "message": "同步游戏设置" + }, + "app.settings.synced-options.game-settings.synced-across-instances": { + "message": "已在所有实例间同步" + }, + "app.settings.synced-options.game-settings.title": { "message": "游戏设置" }, + "app.settings.synced-options.game-settings.unsaved-changes": { + "message": "你有未保存的更改。" + }, + "app.settings.synced-options.game-settings.unsync-setting": { + "message": "停止在所有实例间同步{setting}" + }, + "app.settings.synced-options.game-settings.value-mixed": { + "message": "各实例不同" + }, + "app.settings.synced-options.game-settings.value-off": { "message": "关闭" }, + "app.settings.synced-options.game-settings.value-on": { "message": "开启" }, + "app.settings.synced-options.game-settings.value-unset": { + "message": "选择一个值" + }, + "app.anniversary.banner": { "message": "Starlight {ordinal} 周年快乐!" }, + "instance.settings.tabs.window.window-title": { "message": "窗口标题" }, + "instance.settings.tabs.window.window-title.description": { + "message": "自定义 Minecraft 窗口标题。留空则使用默认标题。" + }, + "instance.settings.tabs.window.window-title.enter": { + "message": "输入窗口标题..." + }, + "app.settings.defaults.window-title.enabled": { + "message": "自定义 Minecraft 窗口标题" + }, + "app.settings.defaults.window-title.enabled-description": { + "message": "允许实例自定义 Minecraft 窗口标题。" + }, + "app.settings.defaults.window-title.default": { "message": "默认窗口标题" }, + "app.settings.defaults.window-title.default-description": { + "message": "当实例未提供自己的标题时使用。" + }, + "app.settings.defaults.window-title.default-placeholder": { + "message": "输入默认窗口标题..." + }, + "app.action-bar.announcements": { "message": "公告" }, + "app.remote-announcements.center-title": { "message": "公告" }, + "app.remote-announcements.empty": { "message": "暂无公告" }, + "app.settings.tabs.logs": { "message": "日志与诊断" }, + "app.settings.logs.export.title": { "message": "导出日志" }, + "app.settings.logs.export.description": { + "message": "将启动器日志打包,可附带环境摘要、最近的实例日志与崩溃分析。" + }, + "app.settings.logs.export.button": { "message": "导出日志…" }, + "app.settings.logs.open-folder": { "message": "打开日志文件夹" }, + "app.settings.logs.export.modal.title": { "message": "导出日志" }, + "app.settings.logs.export.modal.description": { + "message": "选择要包含的详细程度。导出的日志会把访问令牌、Minecraft 令牌与 IP 地址替换为占位符。" + }, + "app.settings.logs.export.modal.range": { "message": "时间范围" }, + "app.settings.logs.export.modal.range.30-minutes": { + "message": "最近 30 分钟" + }, + "app.settings.logs.export.modal.range.2-hours": { "message": "最近 2 小时" }, + "app.settings.logs.export.modal.range.all": { "message": "全部会话" }, + "app.settings.logs.export.modal.level": { "message": "日志等级" }, + "app.settings.logs.export.modal.level.all": { "message": "全部等级" }, + "app.settings.logs.export.modal.level.debug": { "message": "DEBUG 及以上" }, + "app.settings.logs.export.modal.level.info": { "message": "INFO 及以上" }, + "app.settings.logs.export.modal.extras": { "message": "附加信息" }, + "app.settings.logs.export.modal.system-info": { "message": "系统与环境摘要" }, + "app.settings.logs.export.modal.instance-logs": { + "message": "最近的实例日志" + }, + "app.settings.logs.export.modal.crash-analysis": { + "message": "崩溃分析(检测到崩溃时)" + }, + "app.settings.logs.export.modal.cancel": { "message": "取消" }, + "app.settings.logs.export.modal.confirm": { "message": "导出" }, + "app.settings.logs.export.notification-title": { "message": "日志已导出" }, + "app.settings.logs.export.notification-text": { + "message": "日志压缩包已保存到 {path}" + }, + "app.skins.armor.title": { "message": "盔甲与纹饰" }, + "app.skins.armor.save": { "message": "保存" }, + "app.skins.armor.close": { "message": "关闭" }, + "app.skins.armor.description": { + "message": "在皮肤上试穿盔甲与纹饰。未保存前不会写入任何内容。" + }, + "app.skins.armor.unsaved": { "message": "有未保存的更改" }, + "app.skins.armor.reset-to-saved": { "message": "重置为已保存" }, + "app.skins.armor.restore-defaults": { "message": "恢复默认" }, + "app.instances.batch-edit-groups.add": { "message": "添加" }, + "app.instances.batch-edit-groups.add-to-group-title": { + "message": "添加实例到「{groupName}」" + }, + "app.instances.batch-edit-groups.added": { "message": "已添加" }, + "app.instances.batch-edit-groups.cancel": { "message": "取消" }, + "app.instances.batch-edit-groups.create": { "message": "创建分组" }, + "app.instances.batch-edit-groups.group-name": { "message": "分组名称" }, + "app.instances.batch-edit-groups.group-name-placeholder": { + "message": "输入分组名称" + }, + "app.instances.batch-edit-groups.no-instances-found": { + "message": "未找到实例" + }, + "app.instances.batch-edit-groups.save-changes": { "message": "保存" }, + "app.instances.batch-edit-groups.search-instance": { "message": "搜索实例" }, + "app.instances.group.add-to-group": { "message": "添加到分组" }, + "app.instances.group.collapse": { "message": "折叠分组" }, + "app.instances.group.delete-description": { + "message": "此分组中的实例将被取消分组。" + }, + "app.instances.group.delete-group": { "message": "删除分组" }, + "app.instances.group.edit-name": { "message": "编辑分组名称" }, + "app.instances.group.empty": { "message": "拖放实例到此处添加。" }, + "app.instances.group.expand": { "message": "展开分组" }, + "app.instances.group.move-down": { "message": "下移分组" }, + "app.instances.group.move-up": { "message": "上移分组" }, + "app.instances.group.name-empty": { "message": "分组名称不能为空。" }, + "app.instances.group.name-too-long": { + "message": "分组名称不能超过 {maxLength} 个字符。" + }, + "app.instances.group.new-instance": { "message": "新建实例" }, + "app.instances.group.pinned": { "message": "已置顶" }, + "app.instances.group.rename-group": { "message": "重命名分组" }, + "app.instances.sort-by": { "message": "排序方式" }, + "app.instances.sort.direction.asc-alphabetical": { "message": "A–Z 正序" }, + "app.instances.sort.direction.asc-date": { "message": "最早的在前" }, + "app.instances.sort.direction.asc-recency": { "message": "最早游玩在前" }, + "app.instances.sort.direction.asc-version": { "message": "旧版本在前" }, + "app.instances.sort.direction.desc-alphabetical": { "message": "Z–A 倒序" }, + "app.instances.sort.direction.desc-date": { "message": "最新的在前" }, + "app.instances.sort.direction.desc-recency": { "message": "最近游玩在前" }, + "app.instances.sort.direction.desc-version": { "message": "新版本在前" }, + "app.library.context-menu.pin-instance": { "message": "置顶实例" }, + "app.library.context-menu.remove-from-group": { "message": "移出分组" }, + "app.library.context-menu.unpin-instance": { "message": "取消置顶" }, + "app.library.group.new": { "message": "新建分组" }, + "app.library.selection.new-group": { "message": "新建分组" }, + "app.library.selection.remove-from-group": { "message": "移出分组" }, + "app.log-share.settings.title": { "message": "日志分享与 AI 分析" }, + "app.log-share.settings.description": { + "message": "将崩溃诊断分享到 LogShare,获取结构化摘要与可选的 AI 分析。优先使用 LogShare,不可用时回退到 mclo.gs。" + }, + "app.log-share.settings.share-provider": { "message": "日志分享服务" }, + "app.log-share.settings.share-provider-description": { + "message": "分享诊断链接时上传到的目标服务。" + }, + "app.log-share.settings.ai-source": { "message": "AI 分析来源" }, + "app.log-share.settings.ai-source-logshare": { "message": "LogShare AI" }, + "app.log-share.settings.ai-source-custom": { "message": "自定义 AI 服务商" }, + "app.log-share.settings.ai-source-description": { + "message": "LogShare AI 在云端分析;自定义则使用下方配置的服务商。" + }, + "app.log-share.settings.auto-upload": { + "message": "自动上传以获取结构化摘要" + }, + "app.log-share.settings.auto-upload-description": { + "message": "仅在 LogShare 模式下生效。" + }, + "app.log-share.settings.multi-file": { "message": "多文件上传" }, + "app.log-share.settings.multi-file-description": { + "message": "同时上传 latest.log、崩溃报告、hs_err 以及启动器日志。" + }, + "app.log-share.settings.no-storage": { "message": "不落盘直接分析" }, + "app.log-share.settings.no-storage-description": { + "message": "直接提交内容进行分析并跳过存储上传。会关闭自动摘要。" + }, + "app.log-share.settings.show-progress": { "message": "显示 AI 分析进度" }, + "app.log-share.settings.show-progress-description": { + "message": "展示 LogAgent 运行期间的思考、工具及上限状态。" + }, + "app.log-share.shared-logs.title": { "message": "已分享日志" }, + "app.log-share.shared-logs.description": { + "message": "你分享过的所有诊断都记录在这里。删除条目会将其从记录中移除,并向分享服务请求删除。" + }, + "app.log-share.shared-logs.empty": { "message": "暂无已分享的日志。" }, + "app.log-share.shared-logs.delete": { "message": "删除" }, + "app.log-share.shared-logs.deleting": { "message": "删除中…" }, + "app.log-share.shared-logs.deleted": { "message": "已删除共享日志。" }, + "app.log-share.shared-logs.delete-failed": { + "message": "删除已分享日志失败。" + }, + "app.log-share.shared-logs.truncated": { "message": "已截断" }, + "app.minecraft-crash.share-fallback": { + "message": "LogShare 不可用,已改用 mclo.gs 分享诊断信息。" + }, + "app.log-share.ai.action": { "message": "AI 深度分析" }, + "app.log-share.summary.title": { "message": "LogShare 分析" }, + "app.log-share.summary.loading": { "message": "正在加载结构化摘要…" }, + "app.log-share.summary.empty": { + "message": "LogShare 未返回这些日志的结构化摘要。" + }, + "app.log-share.summary.no-storage": { + "message": "启用不落盘模式时无法获取结构化摘要。" + }, + "app.log-share.summary.failed": { + "message": "无法加载 LogShare 摘要:{message}" + }, + "app.log-share.summary.problems": { "message": "问题" }, + "app.log-share.summary.information": { "message": "信息" }, + "app.minecraft-crash.logs.loading": { "message": "正在加载崩溃日志…" }, + "app.minecraft-crash.logs.empty": { "message": "未找到本次启动产生的日志。" }, + "app.minecraft-crash.logs.failed": { + "message": "无法加载崩溃日志:{message}" + }, + "app.minecraft-crash.log-file.loading": { "message": "正在加载日志文件…" }, + "app.minecraft-crash.log-file.failed": { + "message": "无法加载此日志文件:{message}" + }, + "app.log-share.ai.tab": { "message": "LogAgent 深度分析" }, + "app.log-share.ai.root-cause": { "message": "核心根因" }, + "app.log-share.ai.confidence": { "message": "诊断置信度" }, + "app.log-share.ai.steps": { "message": "推荐排障步骤" }, + "app.log-share.ai.evidence": { "message": "支撑证据链" }, + "app.log-share.ai.thinking": { "message": "思考中…" }, + "app.log-share.ai.queued": { "message": "排队中,前方约 {position} 个任务" }, + "app.log-share.ai.queued-front": { "message": "排队中,正在等待空闲槽位" }, + "app.log-share.ai.tool": { "message": "正在使用工具:{name}" }, + "app.log-share.ai.unknown-tool": { "message": "工具" }, + "app.log-share.ai.tool-result": { "message": "已收到工具结果" }, + "app.log-share.ai.limit": { "message": "已达到工具调用上限" }, + "app.log-share.ai.working": { "message": "正在使用 LogAgent 分析…" }, + "app.log-share.ai.failed": { "message": "LogAgent 分析失败:{message}" }, + "app.shortcut-settings.change-shortcut": { + "message": "更改「{action}」的快捷键" + }, + "app.shortcut-settings.enable": { "message": "启用快捷滚动" }, + "app.shortcut-settings.end-action": { "message": "滚动到页面底部" }, + "app.shortcut-settings.end-action-description": { + "message": "将当前页面移动到底部。" + }, + "app.shortcut-settings.home-action": { "message": "滚动到页面顶部" }, + "app.shortcut-settings.home-action-description": { + "message": "将当前页面移动到顶部。" + }, + "app.shortcut-settings.nav-create": { "message": "新建实例" }, + "app.shortcut-settings.nav-create-description": { + "message": "前往新建实例。" + }, + "app.shortcut-settings.nav-description": { + "message": "使用各自的快捷键跳转到对应菜单项。每个快捷键默认关闭,需逐个启用。" + }, + "app.shortcut-settings.nav-discover": { "message": "发现内容" }, + "app.shortcut-settings.nav-discover-description": { + "message": "前往浏览内容。" + }, + "app.shortcut-settings.nav-downloads": { "message": "下载" }, + "app.shortcut-settings.nav-downloads-description": { + "message": "前往下载。" + }, + "app.shortcut-settings.nav-home": { "message": "首页" }, + "app.shortcut-settings.nav-home-description": { "message": "前往首页。" }, + "app.shortcut-settings.nav-lab": { "message": "实验室" }, + "app.shortcut-settings.nav-lab-description": { "message": "前往实验室。" }, + "app.shortcut-settings.nav-library": { "message": "内容库" }, + "app.shortcut-settings.nav-library-description": { + "message": "前往内容库。" + }, + "app.shortcut-settings.nav-multiplayer": { "message": "多人游戏" }, + "app.shortcut-settings.nav-multiplayer-description": { + "message": "前往多人游戏。" + }, + "app.shortcut-settings.nav-settings": { "message": "设置" }, + "app.shortcut-settings.nav-settings-description": { "message": "前往设置。" }, + "app.shortcut-settings.nav-skins": { "message": "皮肤选择器" }, + "app.shortcut-settings.nav-skins-description": { + "message": "前往皮肤选择器。" + }, + "app.shortcut-settings.nav-title": { "message": "导航快捷键" }, + "app.shortcut-settings.nav-worlds": { "message": "世界" }, + "app.shortcut-settings.nav-worlds-description": { + "message": "前往你的世界。" + }, + "app.shortcut-settings.page-down-action": { "message": "向下滚动一屏" }, + "app.shortcut-settings.page-down-action-description": { + "message": "将当前页面向下移动一屏。" + }, + "app.shortcut-settings.page-up-action": { "message": "向上滚动一屏" }, + "app.shortcut-settings.page-up-action-description": { + "message": "将当前页面向上移动一屏。" + }, + "app.shortcut-settings.scroll-description": { + "message": "使用键盘在长页面中快速滚动。" + }, + "app.shortcut-settings.scroll-title": { "message": "快速滚动" }, + "app.settings.tabs.shortcut-settings": { "message": "键盘快捷键" }, + "app.skin-site.bugs.title": { "message": "问题与建议" }, + "app.skin-site.bugs.back": { "message": "返回主页" }, + "app.skin-site.bugs.subtitle": { "message": "反馈问题并跟踪处理进度。" }, + "app.skin-site.bugs.loading": { "message": "加载中…" }, + "app.skin-site.bugs.failed": { "message": "无法加载问题列表。" }, + "app.skin-site.bugs.empty": { "message": "没有符合筛选条件的问题。" }, + "app.skin-site.bugs.all": { "message": "全部" }, + "app.skin-site.bugs.more": { "message": "加载更多" }, + "app.skin-site.bugs.open-only": { "message": "仅显示未关闭" }, + "app.skin-site.bugs.comments": { "message": "{count} 条评论" }, + "app.skin-site.bugs.type.bug": { "message": "缺陷" }, + "app.skin-site.bugs.type.feature": { "message": "功能建议" }, + "app.skin-site.bugs.type.improvement": { "message": "改进" }, + "app.skin-site.bugs.status.pending": { "message": "待处理" }, + "app.skin-site.bugs.status.confirmed": { "message": "已确认" }, + "app.skin-site.bugs.status.needs-info": { "message": "待补充信息" }, + "app.skin-site.bugs.status.in-progress": { "message": "处理中" }, + "app.skin-site.bugs.status.verifying": { "message": "验证中" }, + "app.skin-site.bugs.status.closed": { "message": "已关闭" }, + "app.skin-site.bugs.priority.critical": { "message": "紧急" }, + "app.skin-site.bugs.priority.high": { "message": "高" }, + "app.skin-site.bugs.priority.normal": { "message": "普通" }, + "app.skin-site.bugs.priority.low": { "message": "低" }, + "app.skin-site.bugs.resolution.fixed": { "message": "已修复" }, + "app.skin-site.bugs.resolution.wont-fix": { "message": "不予修复" }, + "app.skin-site.bugs.resolution.by-design": { "message": "设计如此" }, + "app.skin-site.bugs.resolution.duplicate": { "message": "重复问题" }, + "app.skin-site.bugs.resolution.cannot-reproduce": { "message": "无法复现" }, + "app.skin-site.bugs.resolution.invalid": { "message": "无效" }, + "app.skin-site.bug-detail.back": { "message": "返回列表" }, + "app.skin-site.bug-detail.loading": { "message": "加载中…" }, + "app.skin-site.bug-detail.failed": { "message": "无法加载该问题。" }, + "app.skin-site.bug-detail.issue-no": { "message": "问题 #{id}" }, + "app.skin-site.bug-detail.by": { "message": "由 {name} 提交" }, + "app.skin-site.bug-detail.assignee": { "message": "负责人:{name}" }, + "app.skin-site.bug-detail.unassigned": { "message": "未分配" }, + "app.skin-site.bug-detail.description-empty": { "message": "未提供描述。" }, + "app.skin-site.bug-detail.resolution": { "message": "处理结果:{name}" }, + "app.skin-site.bug-detail.comments-title": { "message": "评论" }, + "app.skin-site.bug-detail.comments-empty": { + "message": "还没有评论,来抢沙发吧。" + }, + "app.skin-site.bug-detail.comments-loading": { "message": "加载评论中…" }, + "app.skin-site.bug-detail.comment-placeholder": { + "message": "写下你的评论…" + }, + "app.skin-site.bug-detail.comment-submit": { "message": "发表评论" }, + "app.skin-site.bug-detail.comment-sending": { "message": "发送中…" }, + "app.skin-site.bug-detail.comment-empty-error": { + "message": "评论内容不能为空。" + }, + "app.skin-site.bug-detail.comment-posted": { "message": "评论已发表。" }, + "app.skin-site.bug-detail.comment-deleted": { "message": "评论已删除。" }, + "app.skin-site.bug-detail.delete": { "message": "删除" }, + "app.skin-site.bug-detail.deleting": { "message": "删除中…" }, + "app.skin-site.bug-detail.system": { "message": "系统" }, + "app.skin-site.bug-create.title": { "message": "新建问题" }, + "app.skin-site.bug-create.type": { "message": "类型" }, + "app.skin-site.bug-create.title-field": { "message": "标题" }, + "app.skin-site.bug-create.title-placeholder": { "message": "简要描述问题" }, + "app.skin-site.bug-create.description": { "message": "描述" }, + "app.skin-site.bug-create.description-placeholder": { + "message": "发生了什么?如何复现?" + }, + "app.skin-site.bug-create.private": { "message": "私密问题" }, + "app.skin-site.bug-create.private-hint": { "message": "仅你和维护者可见。" }, + "app.skin-site.bug-create.images": { "message": "图片" }, + "app.skin-site.bug-create.images-hint": { + "message": "可选,最多 5 张图片。" + }, + "app.skin-site.bug-create.submit": { "message": "创建问题" }, + "app.skin-site.bug-create.submitting": { "message": "创建中…" }, + "app.skin-site.bug-create.created": { "message": "问题已创建。" }, + "app.skin-site.bug-create.cancel": { "message": "取消" }, + "app.skin-site.bug-notifications.title": { "message": "通知" }, + "app.skin-site.bug-notifications.back": { "message": "返回主页" }, + "app.skin-site.bug-notifications.subtitle": { + "message": "你提交或关注的问题动态。" + }, + "app.skin-site.bug-notifications.loading": { "message": "加载中…" }, + "app.skin-site.bug-notifications.failed": { "message": "无法加载通知。" }, + "app.skin-site.bug-notifications.empty": { "message": "暂无新通知。" }, + "app.skin-site.bug-notifications.item": { + "message": "{name} 更新了问题 #{id}" + }, + "app.skin-site.bug-notifications.mark-all": { "message": "全部标为已读" }, + "app.skin-site.bug-notifications.marked-all": { + "message": "已将全部通知标为已读。" + }, + "app.skin-site.bugs.create": { "message": "新建问题" }, + "app.skin-site.bugs.notifications": { "message": "通知" }, + "app.skin-site.home.title": { "message": "星光皮肤站" }, + "app.skin-site.home.subtitle": { "message": "星光服务器玩家的衣柜。" }, + "app.skin-site.home.address": { "message": "皮肤站地址" }, + "app.skin-site.home.copied": { "message": "地址已复制。" }, + "app.skin-site.home.copy": { "message": "复制" }, + "app.skin-site.admin.title": { "message": "管理控制台" }, + "app.skin-site.admin.back": { "message": "返回主页" }, + "app.skin-site.admin.no-access": { "message": "你没有访问权限。" }, + "app.skin-site.admin.no-access-hint": { + "message": "请使用管理员账号登录后使用本控制台。" + }, + "app.skin-site.admin.group.security": { "message": "系统安全" }, + "app.skin-site.admin.group.users": { "message": "用户管理" }, + "app.skin-site.admin.group.community": { "message": "社区管理" }, + "app.skin-site.admin.group.resources": { "message": "资源分发" }, + "app.skin-site.admin.item.servers": { "message": "服务器管理" }, + "app.skin-site.admin.item.summary": { "message": "状态概览" }, + "app.skin-site.admin.item.access-audit": { "message": "登录与认证审计" }, + "app.skin-site.admin.item.users": { "message": "用户信息" }, + "app.skin-site.admin.item.players": { "message": "玩家信息" }, + "app.skin-site.admin.item.review": { "message": "玩家审核" }, + "app.skin-site.admin.item.broadcast": { "message": "公告操作" }, + "app.skin-site.admin.item.chat": { "message": "聊天室管理" }, + "app.skin-site.admin.item.wiki": { "message": "维基管理" }, + "app.skin-site.admin.item.donations": { "message": "捐赠管理" }, + "app.skin-site.admin.item.mods": { "message": "Mod 管理" }, + "app.skin-site.admin.item.launcher": { "message": "启动器管理" }, + "app.skin-site.admin.item.downloads": { "message": "下载管理" }, + "app.skin-site.home.admin": { "message": "管理" }, + "app.skin-site.home.settings": { "message": "账号" }, + "app.skin-site.home.sign-in": { "message": "登录" }, + "app.skin-site.home.players": { "message": "角色" }, + "app.skin-site.home.my-players": { "message": "我的角色" }, + "app.skin-site.home.no-players": { "message": "尚未绑定角色。" }, + "app.skin-site.home.loading": { "message": "加载中…" }, + "app.skin-site.home.error": { "message": "加载失败。" }, + "app.skin-site.home.luck": { "message": "幸运值" }, + "app.skin-site.home.luck-unavailable": { "message": "不可用" }, + "app.skin-site.home.signed-out-title": { "message": "未登录" }, + "app.skin-site.home.signed-out-body": { + "message": "登录后可管理你的账号与皮肤。" + }, + "app.skin-site.admin.summary.title": { "message": "系统概况" }, + "app.skin-site.admin.summary.loading": { "message": "加载中…" }, + "app.skin-site.admin.summary.failed": { "message": "无法加载状态。" }, + "app.skin-site.admin.summary.uptime": { "message": "运行时长" }, + "app.skin-site.admin.summary.memory": { "message": "内存占用" }, + "app.skin-site.admin.summary.users": { "message": "用户数量" }, + "app.skin-site.admin.summary.players": { "message": "玩家数量" }, + "app.skin-site.admin.summary.realtime-hint": { + "message": "实时 CPU 与 GC 图表依赖管理端 WebSocket,目前尚未接入。" + }, + "app.skin-site.admin.broadcast.title": { "message": "公告" }, + "app.skin-site.admin.broadcast.loading": { "message": "加载中…" }, + "app.skin-site.admin.broadcast.failed": { "message": "加载失败。" }, + "app.skin-site.admin.broadcast.empty": { "message": "尚未发布过任何公告。" }, + "app.skin-site.admin.broadcast.create": { "message": "发布新公告" }, + "app.skin-site.admin.broadcast.save": { "message": "保存" }, + "app.skin-site.admin.broadcast.cancel": { "message": "取消" }, + "app.skin-site.admin.broadcast.edit": { "message": "编辑" }, + "app.skin-site.admin.broadcast.remove": { "message": "删除" }, + "app.skin-site.admin.broadcast.title-field": { "message": "标题" }, + "app.skin-site.admin.broadcast.subtitle-field": { "message": "副标题" }, + "app.skin-site.admin.broadcast.content-field": { "message": "内容" }, + "app.skin-site.admin.broadcast.expire-at": { "message": "过期时间" }, + "app.skin-site.admin.broadcast.star": { "message": "标星" }, + "app.skin-site.admin.broadcast.level": { "message": "重要程度" }, + "app.skin-site.admin.broadcast.image": { "message": "图片" }, + "app.skin-site.admin.broadcast.remove-image": { "message": "移除图片" }, + "app.skin-site.admin.broadcast.created": { "message": "公告已发布。" }, + "app.skin-site.admin.broadcast.updated": { "message": "公告已更新。" }, + "app.skin-site.admin.broadcast.deleted": { "message": "公告已删除。" }, + "app.skin-site.admin.broadcast.confirm-delete": { + "message": "确定删除「{title}」吗?此操作不可撤销。" + }, + "app.skin-site.admin.broadcast.uploader": { "message": "由 {name} 发布" }, + "app.skin-site.admin.players.title": { "message": "玩家" }, + "app.skin-site.admin.players.loading": { "message": "加载中…" }, + "app.skin-site.admin.players.failed": { "message": "无法加载玩家列表。" }, + "app.skin-site.admin.players.empty": { "message": "没有找到玩家。" }, + "app.skin-site.admin.players.search": { "message": "搜索" }, + "app.skin-site.admin.players.search-name": { "message": "名称" }, + "app.skin-site.admin.players.search-owner": { "message": "所有者" }, + "app.skin-site.admin.players.search-uuid": { "message": "UUID" }, + "app.skin-site.admin.players.total": { "message": "共 {count} 名玩家" }, + "app.skin-site.admin.players.prev": { "message": "上一页" }, + "app.skin-site.admin.players.next": { "message": "下一页" }, + "app.skin-site.admin.players.page": { "message": "第 {page} 页" }, + "app.skin-site.admin.players.name": { "message": "名称" }, + "app.skin-site.admin.players.owner": { "message": "所有者" }, + "app.skin-site.admin.players.source": { "message": "来源" }, + "app.skin-site.admin.players.legacy": { "message": "旧版适配" }, + "app.skin-site.admin.players.actions": { "message": "操作" }, + "app.skin-site.admin.players.edit": { "message": "编辑" }, + "app.skin-site.admin.players.save": { "message": "保存" }, + "app.skin-site.admin.players.cancel": { "message": "取消" }, + "app.skin-site.admin.players.remove": { "message": "删除" }, + "app.skin-site.admin.players.updated": { "message": "玩家已更新。" }, + "app.skin-site.admin.players.deleted": { "message": "玩家已删除。" }, + "app.skin-site.admin.players.confirm-delete": { + "message": "确定删除玩家「{name}」吗?此操作不可撤销。" + }, + "app.skin-site.admin.players.mojang": { "message": "正版" }, + "app.skin-site.admin.players.custom": { "message": "皮肤站" }, + "app.skin-site.admin.users.title": { "message": "用户" }, + "app.skin-site.admin.users.loading": { "message": "加载中…" }, + "app.skin-site.admin.users.failed": { "message": "无法加载用户列表。" }, + "app.skin-site.admin.users.empty": { "message": "没有找到用户。" }, + "app.skin-site.admin.users.search": { "message": "搜索" }, + "app.skin-site.admin.users.search-name": { "message": "用户名" }, + "app.skin-site.admin.users.search-email": { "message": "邮箱" }, + "app.skin-site.admin.users.search-uuid": { "message": "UUID" }, + "app.skin-site.admin.users.total": { "message": "共 {count} 名用户" }, + "app.skin-site.admin.users.prev": { "message": "上一页" }, + "app.skin-site.admin.users.next": { "message": "下一页" }, + "app.skin-site.admin.users.page": { "message": "第 {page} 页" }, + "app.skin-site.admin.users.edit": { "message": "编辑" }, + "app.skin-site.admin.users.save": { "message": "保存" }, + "app.skin-site.admin.users.cancel": { "message": "取消" }, + "app.skin-site.admin.users.remove": { "message": "删除" }, + "app.skin-site.admin.users.players": { "message": "角色" }, + "app.skin-site.admin.users.updated": { "message": "用户已更新。" }, + "app.skin-site.admin.users.deleted": { "message": "用户已删除。" }, + "app.skin-site.admin.users.confirm-delete": { + "message": "确定删除用户「{name}」吗?此操作不可撤销。" + }, + "app.skin-site.admin.users.username": { "message": "用户名" }, + "app.skin-site.admin.users.email": { "message": "邮箱" }, + "app.skin-site.admin.users.qq": { "message": "QQ" }, + "app.skin-site.admin.users.password": { "message": "新密码" }, + "app.skin-site.admin.users.password-hint": { + "message": "留空则保持原密码不变。" + }, + "app.skin-site.admin.users.banned": { "message": "封禁" }, + "app.skin-site.admin.users.permissions": { "message": "权限" }, + "app.skin-site.admin.users.permissions-hint": { + "message": "以逗号分隔,例如 WEB_ADMIN, SERVER_ADMIN。" + }, + "app.skin-site.admin.users.no-players": { "message": "没有绑定的角色。" }, + "app.skin-site.admin.users.registered": { "message": "注册时间" }, + "app.skin-site.admin.review.title": { "message": "玩家审核" }, + "app.skin-site.admin.review.loading": { "message": "加载中…" }, + "app.skin-site.admin.review.failed": { "message": "无法加载申请列表。" }, + "app.skin-site.admin.review.empty": { "message": "没有找到申请。" }, + "app.skin-site.admin.review.total": { "message": "共 {count} 份申请" }, + "app.skin-site.admin.review.filter-all": { "message": "全部" }, + "app.skin-site.admin.review.filter-pending": { "message": "待处理" }, + "app.skin-site.admin.review.filter-passed": { "message": "已通过" }, + "app.skin-site.admin.review.filter-rejected": { "message": "已拒绝" }, + "app.skin-site.admin.review.result-pending": { "message": "待处理" }, + "app.skin-site.admin.review.result-passed": { "message": "已通过" }, + "app.skin-site.admin.review.result-rejected": { "message": "已拒绝" }, + "app.skin-site.admin.review.mode-auto": { "message": "自动" }, + "app.skin-site.admin.review.mode-manual": { "message": "人工" }, + "app.skin-site.admin.review.applicant": { "message": "申请人" }, + "app.skin-site.admin.review.submitted-at": { "message": "提交时间" }, + "app.skin-site.admin.review.score": { "message": "得分" }, + "app.skin-site.admin.review.reviewer": { "message": "审核人" }, + "app.skin-site.admin.review.details": { "message": "详情" }, + "app.skin-site.admin.review.hide": { "message": "收起" }, + "app.skin-site.admin.review.answers": { "message": "作答内容" }, + "app.skin-site.admin.review.no-answers": { "message": "没有作答记录。" }, + "app.skin-site.admin.review.auto-checks": { "message": "自动检查" }, + "app.skin-site.admin.review.context": { "message": "提交环境" }, + "app.skin-site.admin.review.ip": { "message": "IP" }, + "app.skin-site.admin.review.user-agent": { "message": "浏览器标识" }, + "app.skin-site.admin.review.activity": { "message": "行为记录" }, + "app.skin-site.admin.review.duration": { "message": "时长" }, + "app.skin-site.admin.review.hidden-time": { "message": "切出时长" }, + "app.skin-site.admin.review.screen-switches": { "message": "切屏次数" }, + "app.skin-site.admin.review.history": { "message": "审核记录" }, + "app.skin-site.admin.review.accept": { "message": "通过" }, + "app.skin-site.admin.review.reject": { "message": "拒绝" }, + "app.skin-site.admin.review.reason": { "message": "理由" }, + "app.skin-site.admin.review.accept-done": { "message": "申请已通过。" }, + "app.skin-site.admin.review.reject-done": { "message": "申请已拒绝。" }, + "app.skin-site.admin.review.regen-invite": { "message": "重发邀请码" }, + "app.skin-site.admin.review.invite-regenerated": { + "message": "邀请码已重新生成。" + }, + "app.skin-site.admin.review.invite-sent": { "message": "邮件已发送。" }, + "app.skin-site.admin.review.invite-not-sent": { "message": "邮件未发送。" }, + "app.skin-site.admin.review.prev": { "message": "上一页" }, + "app.skin-site.admin.review.next": { "message": "下一页" }, + "app.skin-site.admin.review.page": { "message": "第 {page} 页" }, + "app.skin-site.admin.launcher.title": { "message": "启动器版本" }, + "app.skin-site.admin.launcher.loading": { "message": "加载中…" }, + "app.skin-site.admin.launcher.failed": { "message": "无法加载版本列表。" }, + "app.skin-site.admin.launcher.empty": { "message": "尚未上传任何版本。" }, + "app.skin-site.admin.launcher.latest-url": { "message": "最新版本地址" }, + "app.skin-site.admin.launcher.version": { "message": "版本" }, + "app.skin-site.admin.launcher.channel": { "message": "渠道" }, + "app.skin-site.admin.launcher.uploader": { "message": "上传者" }, + "app.skin-site.admin.launcher.uploaded-at": { "message": "上传时间" }, + "app.skin-site.admin.launcher.published-at": { "message": "发布时间" }, + "app.skin-site.admin.launcher.force-update": { "message": "强制更新" }, + "app.skin-site.admin.launcher.active": { "message": "当前版本" }, + "app.skin-site.admin.launcher.activate": { "message": "设为当前" }, + "app.skin-site.admin.launcher.activated": { "message": "已设为当前版本。" }, + "app.skin-site.admin.launcher.upload": { "message": "上传版本" }, + "app.skin-site.admin.launcher.upload-hint": { + "message": "选择发布包 ZIP(最大 4 GiB)。" + }, + "app.skin-site.admin.launcher.uploading": { "message": "上传中…" }, + "app.skin-site.admin.launcher.upload-done": { "message": "版本已上传。" }, + "app.skin-site.admin.launcher.force-flag": { "message": "强制更新" }, + "app.skin-site.admin.launcher.prev": { "message": "上一页" }, + "app.skin-site.admin.launcher.next": { "message": "下一页" }, + "app.skin-site.admin.launcher.page": { "message": "第 {page} 页" }, + "app.skin-site.admin.launcher.total": { "message": "共 {count} 个版本" }, + "app.skin-site.admin.downloads.title": { "message": "资源下载" }, + "app.skin-site.admin.downloads.loading": { "message": "加载中…" }, + "app.skin-site.admin.downloads.failed": { "message": "无法加载资源列表。" }, + "app.skin-site.admin.downloads.empty": { "message": "没有下载条目。" }, + "app.skin-site.admin.downloads.categories": { "message": "分类" }, + "app.skin-site.admin.downloads.all": { "message": "全部条目" }, + "app.skin-site.admin.downloads.add-category": { "message": "添加" }, + "app.skin-site.admin.downloads.category-name": { "message": "分类名称" }, + "app.skin-site.admin.downloads.remove-category": { "message": "移除" }, + "app.skin-site.admin.downloads.total": { "message": "共 {count} 个条目" }, + "app.skin-site.admin.downloads.add-item": { "message": "新建条目" }, + "app.skin-site.admin.downloads.save": { "message": "保存" }, + "app.skin-site.admin.downloads.cancel": { "message": "取消" }, + "app.skin-site.admin.downloads.edit": { "message": "编辑" }, + "app.skin-site.admin.downloads.remove": { "message": "删除" }, + "app.skin-site.admin.downloads.filename": { "message": "文件名" }, + "app.skin-site.admin.downloads.description": { "message": "描述" }, + "app.skin-site.admin.downloads.routes": { "message": "下载线路" }, + "app.skin-site.admin.downloads.route-name": { "message": "名称" }, + "app.skin-site.admin.downloads.route-url": { "message": "URL" }, + "app.skin-site.admin.downloads.add-route": { "message": "添加线路" }, + "app.skin-site.admin.downloads.remove-route": { "message": "移除" }, + "app.skin-site.admin.downloads.statuses": { "message": "状态" }, + "app.skin-site.admin.downloads.bind-category": { "message": "所属分类" }, + "app.skin-site.admin.downloads.uploader": { "message": "由 {name} 上传" }, + "app.skin-site.admin.downloads.created": { "message": "条目已创建。" }, + "app.skin-site.admin.downloads.updated": { "message": "条目已更新。" }, + "app.skin-site.admin.downloads.deleted": { "message": "条目已删除。" }, + "app.skin-site.admin.downloads.category-added": { "message": "分类已添加。" }, + "app.skin-site.admin.downloads.category-deleted": { + "message": "分类已删除。" + }, + "app.skin-site.admin.downloads.confirm-delete-item": { + "message": "确定删除「{name}」吗?此操作不可撤销。" + }, + "app.skin-site.admin.downloads.confirm-delete-category": { + "message": "确定删除分类「{name}」吗?" + }, + "app.skin-site.admin.servers.title": { "message": "地图服务器" }, + "app.skin-site.admin.servers.loading": { "message": "加载中…" }, + "app.skin-site.admin.servers.failed": { "message": "无法加载服务器列表。" }, + "app.skin-site.admin.servers.empty": { "message": "尚未配置地图服务器。" }, + "app.skin-site.admin.servers.server-name": { "message": "服务器名称" }, + "app.skin-site.admin.servers.internal": { "message": "内部" }, + "app.skin-site.admin.servers.maps": { "message": "地图" }, + "app.skin-site.admin.servers.map-name": { "message": "地图名称" }, + "app.skin-site.admin.servers.map-url": { "message": "地图地址" }, + "app.skin-site.admin.servers.add-map": { "message": "添加地图" }, + "app.skin-site.admin.servers.remove-map": { "message": "移除" }, + "app.skin-site.admin.servers.add-server": { "message": "添加服务器" }, + "app.skin-site.admin.servers.remove-server": { "message": "删除服务器" }, + "app.skin-site.admin.servers.save": { "message": "保存更改" }, + "app.skin-site.admin.servers.saving": { "message": "保存中…" }, + "app.skin-site.admin.servers.saved": { "message": "地图服务器已保存。" }, + "app.skin-site.admin.audit.title": { "message": "登录与认证审计" }, + "app.skin-site.admin.audit.loading": { "message": "加载中…" }, + "app.skin-site.admin.audit.failed": { "message": "无法加载审计日志。" }, + "app.skin-site.admin.audit.empty": { "message": "没有审计记录。" }, + "app.skin-site.admin.audit.subject": { "message": "主体" }, + "app.skin-site.admin.audit.action": { "message": "操作" }, + "app.skin-site.admin.audit.source-ip": { "message": "来源 IP" }, + "app.skin-site.admin.audit.reported-ip": { "message": "上报玩家 IP" }, + "app.skin-site.admin.audit.count": { "message": "次数" }, + "app.skin-site.admin.audit.first-at": { "message": "首次出现" }, + "app.skin-site.admin.audit.last-at": { "message": "最近出现" }, + "app.skin-site.admin.audit.proxy": { "message": "代理" }, + "app.skin-site.admin.audit.internal": { "message": "内部" }, + "app.skin-site.admin.audit.search-subject": { "message": "主体" }, + "app.skin-site.admin.audit.search-ip": { "message": "IP" }, + "app.skin-site.admin.audit.search-action": { "message": "操作" }, + "app.skin-site.admin.audit.search": { "message": "搜索" }, + "app.skin-site.admin.audit.clear": { "message": "清空" }, + "app.skin-site.admin.audit.load-more": { "message": "加载更多" }, + "app.skin-site.admin.audit.retention": { "message": "保留天数" }, + "app.skin-site.admin.audit.record-limit": { "message": "记录上限" }, + "app.skin-site.admin.audit.save-retention": { "message": "保存" }, + "app.skin-site.admin.audit.retention-saved": { + "message": "保留天数已更新。" + }, + "app.skin-site.admin.donations.title": { "message": "捐赠管理" }, + "app.skin-site.admin.donations.loading": { "message": "加载中…" }, + "app.skin-site.admin.donations.failed": { "message": "无法加载捐赠列表。" }, + "app.skin-site.admin.donations.empty": { "message": "暂无捐赠记录。" }, + "app.skin-site.admin.donations.total-amount": { "message": "总额" }, + "app.skin-site.admin.donations.donor-count": { "message": "捐赠人数" }, + "app.skin-site.admin.donations.donor": { "message": "捐赠者" }, + "app.skin-site.admin.donations.amount": { "message": "金额" }, + "app.skin-site.admin.donations.updated-at": { "message": "更新时间" }, + "app.skin-site.admin.donations.external": { "message": "外部" }, + "app.skin-site.admin.donations.linked": { "message": "已绑定" }, + "app.skin-site.admin.donations.create": { "message": "新增捐赠" }, + "app.skin-site.admin.donations.save": { "message": "保存" }, + "app.skin-site.admin.donations.cancel": { "message": "取消" }, + "app.skin-site.admin.donations.edit": { "message": "编辑" }, + "app.skin-site.admin.donations.remove": { "message": "删除" }, + "app.skin-site.admin.donations.amount-field": { "message": "金额" }, + "app.skin-site.admin.donations.display-name": { "message": "显示名称" }, + "app.skin-site.admin.donations.user-uuid": { "message": "用户 UUID" }, + "app.skin-site.admin.donations.qq": { "message": "QQ" }, + "app.skin-site.admin.donations.append-mode": { + "message": "在原有金额上累加" + }, + "app.skin-site.admin.donations.created": { "message": "捐赠记录已创建。" }, + "app.skin-site.admin.donations.updated": { "message": "捐赠记录已更新。" }, + "app.skin-site.admin.donations.deleted": { "message": "捐赠记录已删除。" }, + "app.skin-site.admin.donations.confirm-delete": { + "message": "确定删除「{name}」的捐赠记录吗?此操作不可撤销。" + }, + "app.skin-site.admin.donations.load-more": { "message": "加载更多" }, + "app.skin-site.admin.mods.title": { "message": "Mod 管理" }, + "app.skin-site.admin.mods.tab-mods": { "message": "Mod 文件" }, + "app.skin-site.admin.mods.tab-tags": { "message": "规则标签" }, + "app.skin-site.admin.mods.tab-runtime": { "message": "运行时" }, + "app.skin-site.admin.mods.loading": { "message": "加载中…" }, + "app.skin-site.admin.mods.failed": { "message": "无法加载 Mod 列表。" }, + "app.skin-site.admin.mods.empty": { "message": "没有找到 Mod。" }, + "app.skin-site.admin.mods.total": { "message": "共 {count} 个 Mod" }, + "app.skin-site.admin.mods.search": { "message": "按名称搜索" }, + "app.skin-site.admin.mods.filter-all": { "message": "全部标签" }, + "app.skin-site.admin.mods.prev": { "message": "上一页" }, + "app.skin-site.admin.mods.next": { "message": "下一页" }, + "app.skin-site.admin.mods.page": { "message": "第 {page} 页" }, + "app.skin-site.admin.mods.name": { "message": "名称" }, + "app.skin-site.admin.mods.version": { "message": "版本" }, + "app.skin-site.admin.mods.mod-id": { "message": "Mod ID" }, + "app.skin-site.admin.mods.size": { "message": "大小" }, + "app.skin-site.admin.mods.loaders": { "message": "加载器" }, + "app.skin-site.admin.mods.domain-rules": { "message": "域名规则" }, + "app.skin-site.admin.mods.edit": { "message": "编辑" }, + "app.skin-site.admin.mods.save": { "message": "保存" }, + "app.skin-site.admin.mods.cancel": { "message": "取消" }, + "app.skin-site.admin.mods.remove": { "message": "删除" }, + "app.skin-site.admin.mods.updated": { "message": "Mod 已更新。" }, + "app.skin-site.admin.mods.deleted": { "message": "Mod 已删除。" }, + "app.skin-site.admin.mods.confirm-delete": { + "message": "确定删除 Mod「{name}」吗?此操作不可撤销。" + }, + "app.skin-site.admin.mods.rule-tags": { "message": "规则标签" }, + "app.skin-site.admin.mods.tag-name": { "message": "标签名称" }, + "app.skin-site.admin.mods.tag-rules": { "message": "规则" }, + "app.skin-site.admin.mods.tag-rules-hint": { "message": "每行一条规则。" }, + "app.skin-site.admin.mods.new-tag": { "message": "新建标签" }, + "app.skin-site.admin.mods.tag-created": { "message": "标签已创建。" }, + "app.skin-site.admin.mods.tag-updated": { "message": "标签已更新。" }, + "app.skin-site.admin.mods.tag-deleted": { "message": "标签已删除。" }, + "app.skin-site.admin.mods.confirm-delete-tag": { + "message": "确定删除标签「{name}」吗?" + }, + "app.skin-site.admin.mods.runtime": { "message": "运行时版本" }, + "app.skin-site.admin.mods.manifest-url": { "message": "清单地址" }, + "app.skin-site.admin.mods.upload-runtime": { "message": "上传运行时" }, + "app.skin-site.admin.mods.runtime-version": { "message": "版本" }, + "app.skin-site.admin.mods.uploading": { "message": "上传中…" }, + "app.skin-site.admin.mods.runtime-uploaded": { "message": "运行时已上传。" }, + "app.skin-site.admin.mods.activate": { "message": "设为当前" }, + "app.skin-site.admin.mods.activated": { "message": "运行时已启用。" }, + "app.skin-site.admin.mods.available": { "message": "可用" }, + "app.skin-site.admin.mods.unavailable": { "message": "不可用" }, + "app.skin-site.admin.mods.active": { "message": "当前版本" }, + "app.skin-site.admin.mods.uploader": { "message": "由 {name} 上传" }, + "app.skin-site.home.nav.title": { "message": "皮肤站" }, + "app.skin-site.home.nav.download": { "message": "资源下载" }, + "app.skin-site.home.nav.download-desc": { + "message": "浏览服务器分享的文件。" + }, + "app.skin-site.home.nav.review": { "message": "玩家审核" }, + "app.skin-site.home.nav.review-desc": { "message": "提交并审核玩家申请。" }, + "app.skin-site.home.nav.wiki": { "message": "服务器维基" }, + "app.skin-site.home.nav.wiki-desc": { "message": "服务器的指南与文档。" }, + "app.skin-site.home.nav.bugs": { "message": "问题追踪" }, + "app.skin-site.home.nav.bugs-desc": { "message": "反馈问题并跟踪处理进度。" }, + "app.skin-site.home.nav.map": { "message": "服务器地图" }, + "app.skin-site.home.nav.map-desc": { "message": "探索实时世界地图。" }, + "app.skin-site.home.nav.profile": { "message": "个人资料" }, + "app.skin-site.home.nav.profile-desc": { "message": "管理你的账号与皮肤。" }, + "app.skin-site.admin.wiki.title": { "message": "维基管理" }, + "app.skin-site.admin.wiki.tab-page": { "message": "页面" }, + "app.skin-site.admin.wiki.tab-audit": { "message": "审计日志" }, + "app.skin-site.admin.wiki.tab-settings": { "message": "设置" }, + "app.skin-site.admin.wiki.loading": { "message": "加载中…" }, + "app.skin-site.admin.wiki.page-path": { "message": "页面路径" }, + "app.skin-site.admin.wiki.load-page": { "message": "加载页面" }, + "app.skin-site.admin.wiki.page-not-found": { "message": "未找到该页面。" }, + "app.skin-site.admin.wiki.revision": { "message": "版本" }, + "app.skin-site.admin.wiki.author": { "message": "作者" }, + "app.skin-site.admin.wiki.updated-at": { "message": "更新时间" }, + "app.skin-site.admin.wiki.categories": { "message": "分类" }, + "app.skin-site.admin.wiki.read-policy": { "message": "阅读权限" }, + "app.skin-site.admin.wiki.edit-policy": { "message": "编辑权限" }, + "app.skin-site.admin.wiki.save-protect": { "message": "保存权限" }, + "app.skin-site.admin.wiki.protect-saved": { "message": "页面权限已更新。" }, + "app.skin-site.admin.wiki.set-home": { "message": "设为首页" }, + "app.skin-site.admin.wiki.home-set": { "message": "首页已更新。" }, + "app.skin-site.admin.wiki.set-deleted": { "message": "标记为已删除" }, + "app.skin-site.admin.wiki.set-restored": { "message": "恢复页面" }, + "app.skin-site.admin.wiki.deleted-updated": { + "message": "页面删除状态已更新。" + }, + "app.skin-site.admin.wiki.audit-empty": { "message": "没有审计记录。" }, + "app.skin-site.admin.wiki.audit-target": { "message": "目标" }, + "app.skin-site.admin.wiki.load-more": { "message": "加载更多" }, + "app.skin-site.admin.wiki.settings-hint": { "message": "以逗号分隔域名。" }, + "app.skin-site.admin.wiki.domains": { "message": "域名" }, + "app.skin-site.admin.wiki.home-page": { "message": "首页" }, + "app.skin-site.admin.wiki.default-skin": { "message": "默认皮肤" }, + "app.skin-site.admin.wiki.max-page-bytes": { "message": "页面最大字节数" }, + "app.skin-site.admin.wiki.max-attachment-bytes": { + "message": "附件最大字节数" + }, + "app.skin-site.admin.wiki.save-settings": { "message": "保存设置" }, + "app.skin-site.admin.wiki.settings-saved": { "message": "设置已保存。" }, + "app.skin-site.admin.review.tab-list": { "message": "申请列表" }, + "app.skin-site.admin.review.tab-papers": { "message": "试卷管理" }, + "app.skin-site.admin.review.papers-empty": { "message": "还没有审核试卷。" }, + "app.skin-site.admin.review.new-paper": { "message": "新建试卷" }, + "app.skin-site.admin.review.edit-paper": { "message": "编辑" }, + "app.skin-site.admin.review.paper-title": { "message": "试卷标题" }, + "app.skin-site.admin.review.paper-annotation": { "message": "描述" }, + "app.skin-site.admin.review.paper-enabled": { "message": "启用" }, + "app.skin-site.admin.review.paper-mode": { "message": "阅卷模式" }, + "app.skin-site.admin.review.paper-pass-score": { "message": "通过分数" }, + "app.skin-site.admin.review.paper-target-permissions": { + "message": "通过后获得的身份" + }, + "app.skin-site.admin.review.paper-questions": { "message": "题目" }, + "app.skin-site.admin.review.add-question": { "message": "添加题目" }, + "app.skin-site.admin.review.question-title": { "message": "题目" }, + "app.skin-site.admin.review.question-type": { "message": "题型" }, + "app.skin-site.admin.review.question-score": { "message": "分数" }, + "app.skin-site.admin.review.question-annotation": { "message": "题目注解" }, + "app.skin-site.admin.review.add-option": { "message": "添加选项" }, + "app.skin-site.admin.review.option-description": { "message": "选项文本" }, + "app.skin-site.admin.review.option-correct": { "message": "正确" }, + "app.skin-site.admin.review.remove-question": { "message": "删除" }, + "app.skin-site.admin.review.question-no": { "message": "第 {n} 题" }, + "app.skin-site.admin.review.paper-created": { "message": "试卷已创建。" }, + "app.skin-site.admin.review.paper-saved": { "message": "试卷已保存。" }, + "app.skin-site.admin.review.mail-title": { "message": "通过邮件" }, + "app.skin-site.admin.review.mail-enabled": { + "message": "审核通过后发送邮件" + }, + "app.skin-site.admin.review.mail-subject": { "message": "邮件标题" }, + "app.skin-site.admin.review.mail-message": { "message": "邮件正文" }, + "app.skin-site.admin.review.mail-extra": { "message": "邮件补充说明" }, + "app.skin-site.admin.review.mail-include-invite": { "message": "附带邀请码" }, + "app.skin-site.admin.review.prevent-duplicate": { "message": "禁止重复作答" }, + "app.skin-site.admin.review.copy-link": { "message": "复制直链" }, + "app.skin-site.admin.review.link-copied": { "message": "直链已复制。" }, + "app.skin-site.admin.review.move-up": { "message": "上移" }, + "app.skin-site.admin.review.move-down": { "message": "下移" }, + "app.skin-site.admin.review.mail-subject-required": { + "message": "开启邮件后必须填写邮件标题。" + }, + "app.skin-site.admin.review.mail-message-required": { + "message": "开启邮件后必须填写邮件正文。" + }, + "app.skin-site.admin.users.actions": { "message": "操作" }, + "app.skin-site.admin.users.audit": { "message": "审计" }, + "app.skin-site.admin.users.audit-empty": { "message": "暂无管理审计记录。" }, + "app.skin-site.admin.users.audit-more": { "message": "加载更早记录" }, + "app.skin-site.admin.users.audit-title": { "message": "用户管理审计" }, + "app.skin-site.admin.users.bot": { "message": "机器人" }, + "app.skin-site.admin.users.bot-active": { "message": "Token 有效" }, + "app.skin-site.admin.users.bot-ban": { "message": "封禁 Bot 创建" }, + "app.skin-site.admin.users.bot-creation-banned": { + "message": "禁止创建 Token" + }, + "app.skin-site.admin.users.bot-exists": { "message": "已创建 Bot" }, + "app.skin-site.admin.users.bot-inactive": { "message": "Token 已失效" }, + "app.skin-site.admin.users.bot-invalidate": { "message": "使 Token 失效" }, + "app.skin-site.admin.users.bot-not-exists": { "message": "尚未创建 Bot" }, + "app.skin-site.admin.users.bot-save-username": { + "message": "保存机器人用户名" + }, + "app.skin-site.admin.users.bot-title": { "message": "Bot 管理" }, + "app.skin-site.admin.users.bot-token-hint": { "message": "Token 标识" }, + "app.skin-site.admin.users.bot-unban": { "message": "解除 Bot 封禁" }, + "app.skin-site.admin.users.bot-username": { "message": "机器人用户名" }, + "app.skin-site.admin.users.bound-players-title": { "message": "绑定玩家" }, + "app.skin-site.admin.users.frequency": { "message": "频率限制" }, + "app.skin-site.admin.users.frequency-clear": { "message": "取消限制" }, + "app.skin-site.admin.users.frequency-current": { + "message": "当前 {percent}%" + }, + "app.skin-site.admin.users.frequency-hint": { + "message": "以下列频率对指定用户进行丢包处理,限制其进入服务器的频率。" + }, + "app.skin-site.admin.users.frequency-none": { "message": "当前未启用" }, + "app.skin-site.admin.users.frequency-range": { + "message": "仅允许设置 10% 至 100% 的整数。" + }, + "app.skin-site.admin.users.frequency-save": { "message": "保存限制" }, + "app.skin-site.admin.users.frequency-title": { "message": "频率限制" }, + "app.skin-site.admin.users.invite": { "message": "邀请用户" }, + "app.skin-site.admin.users.invite-copied": { "message": "邀请码已复制。" }, + "app.skin-site.admin.users.invite-copy": { "message": "复制" }, + "app.skin-site.admin.users.invite-email": { "message": "邮箱" }, + "app.skin-site.admin.users.invite-email-invalid": { + "message": "请输入正确格式的邮箱。" + }, + "app.skin-site.admin.users.invite-generate": { "message": "生成邀请码" }, + "app.skin-site.admin.users.invite-title": { "message": "邀请用户" }, + "app.skin-site.admin.users.legacy-adapted": { "message": "已适配旧内服" }, + "app.skin-site.admin.users.registered-at": { "message": "注册时间" }, + "app.skin-site.admin.users.status": { "message": "状态" }, + "app.skin-site.admin.users.status-banned": { "message": "已封禁" }, + "app.skin-site.admin.users.status-normal": { "message": "正常" }, + "app.skin-site.admin.mods.upload": { "message": "上传" }, + "app.skin-site.admin.mods.select-mode": { "message": "选择多个" }, + "app.skin-site.admin.mods.exit-select": { "message": "完成选择" }, + "app.skin-site.admin.mods.select-all": { "message": "全选本页" }, + "app.skin-site.admin.mods.clear-selection": { "message": "取消全选" }, + "app.skin-site.admin.mods.selected-count": { "message": "已选择 {count} 项" }, + "app.skin-site.admin.mods.delete-selected": { "message": "删除所选" }, + "app.skin-site.admin.mods.confirm-delete-multi": { + "message": "确定删除选中的 {count} 个 Mod?此操作不可撤销。" + }, + "app.skin-site.admin.mods.deleted-multi": { "message": "已删除所选 Mod。" }, + "app.skin-site.admin.mods.server-address": { "message": "服务器地址" }, + "app.skin-site.admin.mods.server-address-hint": { + "message": "按服务器地址过滤" + }, + "app.skin-site.admin.mods.apply": { "message": "应用" }, + "app.skin-site.admin.mods.clear": { "message": "清除" }, + "app.skin-site.admin.mods.upload-title": { "message": "上传 Mod" }, + "app.skin-site.admin.mods.upload-drop": { + "message": "拖拽 .jar 文件到此处,或点击选择" + }, + "app.skin-site.admin.mods.upload-sub": { + "message": "支持多文件,单个不超过 {size} MB" + }, + "app.skin-site.admin.mods.upload-tags": { "message": "附加规则标签" }, + "app.skin-site.admin.mods.upload-queue": { "message": "文件列表" }, + "app.skin-site.admin.mods.upload-pending": { "message": "等待中" }, + "app.skin-site.admin.mods.upload-checking": { "message": "检查中…" }, + "app.skin-site.admin.mods.upload-uploading": { "message": "上传中…" }, + "app.skin-site.admin.mods.upload-conflict": { "message": "名称已存在" }, + "app.skin-site.admin.mods.upload-success": { "message": "完成" }, + "app.skin-site.admin.mods.upload-error": { "message": "失败" }, + "app.skin-site.admin.mods.upload-exists": { + "message": "该文件已存在于服务器。" + }, + "app.skin-site.admin.mods.upload-name-conflict": { + "message": "已存在同名 Mod" + }, + "app.skin-site.admin.mods.upload-name-conflict-hint": { + "message": "覆盖已有 Mod,或跳过此文件。" + }, + "app.skin-site.admin.mods.upload-overwrite": { "message": "覆盖" }, + "app.skin-site.admin.mods.upload-skip": { "message": "跳过" }, + "app.skin-site.admin.mods.upload-close": { "message": "关闭" }, + "app.skin-site.admin.mods.upload-all-done": { + "message": "全部文件处理完成。" + }, + "app.skin-site.admin.mods.upload-too-large": { + "message": "文件过大:{name}" + }, + "app.skin-site.chat.avatar.label": { "message": "房间头像" }, + "app.skin-site.chat.avatar.upload": { "message": "上传头像" }, + "app.skin-site.chat.avatar.replace": { "message": "更换头像" }, + "app.skin-site.chat.avatar.remove": { "message": "移除头像" }, + "app.skin-site.chat.avatar.hint": { + "message": "支持 PNG、JPEG、WebP,单边不超过 8192 像素,文件不超过 5 MB。" + }, + "app.skin-site.chat.avatar.bad-format": { + "message": "房间头像仅支持 PNG、JPEG 和 WebP 格式。" + }, + "app.skin-site.chat.avatar.too-large": { + "message": "房间头像大小不能超过 5 MB。" + }, + "app.skin-site.chat.avatar.not-image": { "message": "房间头像必须是图片。" }, + "app.skin-site.chat.admin.title": { "message": "聊天室管理" }, + "app.skin-site.chat.admin.subtitle": { + "message": "创建公开或私有房间,并将日常管理权限交给合适的成员。" + }, + "app.skin-site.chat.admin.create-room": { "message": "创建房间" }, + "app.skin-site.chat.admin.loading": { "message": "加载中…" }, + "app.skin-site.chat.admin.failed": { "message": "无法加载房间列表。" }, + "app.skin-site.chat.admin.empty": { "message": "还没有聊天室。" }, + "app.skin-site.chat.admin.edit": { "message": "编辑" }, + "app.skin-site.chat.admin.remove": { "message": "删除" }, + "app.skin-site.chat.admin.save": { "message": "保存" }, + "app.skin-site.chat.admin.cancel": { "message": "取消" }, + "app.skin-site.chat.admin.name": { "message": "房间名称" }, + "app.skin-site.chat.admin.description": { "message": "房间简介" }, + "app.skin-site.chat.admin.visibility": { "message": "可见性" }, + "app.skin-site.chat.admin.visibility-public": { "message": "公开" }, + "app.skin-site.chat.admin.visibility-private": { "message": "私有" }, + "app.skin-site.chat.admin.kind": { "message": "房间类型" }, + "app.skin-site.chat.admin.kind-standard": { "message": "普通房间" }, + "app.skin-site.chat.admin.kind-settlement": { "message": "聚落房间" }, + "app.skin-site.chat.admin.prerequisite-mode": { "message": "前置条件判定" }, + "app.skin-site.chat.admin.prerequisite-any": { "message": "满足任一" }, + "app.skin-site.chat.admin.prerequisite-all": { "message": "满足全部" }, + "app.skin-site.chat.admin.prerequisite-permissions": { + "message": "所需权限" + }, + "app.skin-site.chat.admin.prerequisite-hint": { + "message": "以逗号分隔;留空表示无限制。" + }, + "app.skin-site.chat.admin.created": { "message": "房间已创建。" }, + "app.skin-site.chat.admin.updated": { "message": "房间资料已更新。" }, + "app.skin-site.chat.admin.deleted": { "message": "房间已删除。" }, + "app.skin-site.chat.admin.confirm-delete": { + "message": "确认永久删除房间“{name}”及其中全部消息吗?" + }, + "app.skin-site.chat.admin.manager-badge": { "message": "管理" }, + "app.skin-site.chat.admin.voice-badge": { "message": "语音" }, + "app.skin-site.chat.user-picker.label": { "message": "选择用户" }, + "app.skin-site.chat.user-picker.placeholder": { + "message": "搜索用户名、邮箱或账号 ID" + }, + "app.skin-site.chat.user-picker.by-user": { "message": "按用户信息" }, + "app.skin-site.chat.user-picker.by-player": { "message": "按玩家 ID" }, + "app.skin-site.chat.user-picker.hint": { + "message": "支持按用户名、邮箱模糊搜索,也可输入账号 ID 搜索。" + }, + "app.skin-site.chat.user-picker.player-hint": { + "message": "输入玩家名称,查找绑定该玩家 ID 的用户。" + }, + "app.skin-site.chat.user-picker.empty": { "message": "没有找到匹配的用户" }, + "app.skin-site.chat.user-picker.banned": { + "message": "该账号已被封禁,不能执行此操作。" + }, + "app.skin-site.chat.user-picker.guest": { + "message": "游客不能成为房管、聚落主或聚落成员。" + }, + "app.skin-site.chat.user-picker.already-in": { + "message": "该用户已经在当前房间中。" + }, + "app.skin-site.chat.user-picker.not-allowed": { + "message": "该用户不在当前允许选择的范围内" + }, + "app.skin-site.chat.user-picker.select": { "message": "选择此用户" }, + "app.skin-site.chat.user-picker.selected": { "message": "已选择此用户" }, + "app.skin-site.chat.user-picker.id": { "message": "ID" }, + "app.skin-site.chat.admin.managers": { "message": "房管" }, + "app.skin-site.chat.admin.manager-title": { "message": "任命房管" }, + "app.skin-site.chat.admin.manager-hint": { + "message": "房管可以管理该房间的成员、消息与文件。" + }, + "app.skin-site.chat.admin.grant": { "message": "任命" }, + "app.skin-site.chat.admin.revoke": { "message": "撤销" }, + "app.skin-site.chat.admin.manager-granted": { "message": "已任命房管。" }, + "app.skin-site.chat.admin.manager-revoked": { "message": "已撤销房管。" }, + "app.skin-site.chat.admin.owner-title": { "message": "聚落主" }, + "app.skin-site.chat.admin.owner-hint": { + "message": "为该房间任命首任聚落主。" + }, + "app.skin-site.chat.admin.owner-assigned": { "message": "已任命聚落主。" }, + "app.skin-site.chat.admin.owner-current": { "message": "当前聚落主:{name}" }, + "app.skin-site.chat.admin.owner-none": { "message": "尚未设置聚落主。" }, + "app.skin-site.chat.admin.audit": { "message": "审计" }, + "app.skin-site.chat.admin.audit-title": { "message": "房间审计" }, + "app.skin-site.chat.admin.audit-empty": { "message": "暂无审计记录。" }, + "app.skin-site.chat.admin.audit-target": { "message": "对象:{name}" }, + "app.skin-site.chat.admin.close": { "message": "关闭" }, + "app.skin-site.chat.voice-runtime-title": { "message": "实时语音库" }, + "app.skin-site.chat.voice-logs": { "message": "查看日志" }, + "app.skin-site.chat.voice-config": { "message": "配置语音库" }, + "app.skin-site.chat.voice-retry": { "message": "重新部署" }, + "app.skin-site.chat.voice-config-title": { "message": "语音库配置" }, + "app.skin-site.chat.voice-logs-title": { "message": "LiveKit 日志" }, + "app.skin-site.chat.voice-capacity-title": { "message": "语音容量" }, + "app.skin-site.chat.voice-capacity": { "message": "语音容量" }, + "app.skin-site.chat.participant-limit": { "message": "参与人数上限" }, + "app.skin-site.chat.listener-limit": { "message": "旁听人数上限" }, + "app.skin-site.chat.voice-capacity-updated": { + "message": "语音容量已更新。" + }, + "app.skin-site.chat.voice-enabled": { "message": "启用实时语音" }, + "app.skin-site.chat.voice-runtime-path": { "message": "语音库目录" }, + "app.skin-site.chat.voice-mirror": { "message": "镜像基础地址" }, + "app.skin-site.chat.voice-public-url": { "message": "公网访问地址" }, + "app.skin-site.chat.voice-bind": { "message": "监听地址" }, + "app.skin-site.chat.voice-signal-port": { "message": "信令端口" }, + "app.skin-site.chat.voice-rtc-tcp-port": { "message": "媒体 TCP 端口" }, + "app.skin-site.chat.voice-rtc-udp-port": { "message": "媒体 UDP 端口" }, + "app.skin-site.chat.voice-startup-timeout": { + "message": "启动等待时间(秒)" + }, + "app.skin-site.chat.voice-use-external-ip": { "message": "使用外部 IP" }, + "app.skin-site.chat.voice-node-ip": { "message": "节点 IP" }, + "app.skin-site.chat.voice-saved": { "message": "语音库配置已保存。" }, + "app.skin-site.chat.voice-logs-auto-refresh": { "message": "自动刷新" }, + "app.skin-site.chat.voice-logs-refresh": { "message": "刷新" }, + "app.skin-site.chat.voice-logs-empty": { "message": "暂无日志。" }, + "app.skin-site.chat.admin.voice-runtime-title": { "message": "实时语音库" }, + "app.skin-site.chat.admin.voice-logs": { "message": "查看日志" }, + "app.skin-site.chat.admin.voice-config": { "message": "配置语音库" }, + "app.skin-site.chat.admin.voice-retry": { "message": "重新部署" }, + "app.skin-site.chat.admin.voice-config-title": { "message": "语音库配置" }, + "app.skin-site.chat.admin.voice-logs-title": { "message": "LiveKit 日志" }, + "app.skin-site.chat.admin.voice-capacity-title": { "message": "语音容量" }, + "app.skin-site.chat.admin.voice-capacity": { "message": "语音容量" }, + "app.skin-site.chat.admin.participant-limit": { "message": "参与人数上限" }, + "app.skin-site.chat.admin.listener-limit": { "message": "旁听人数上限" }, + "app.skin-site.chat.admin.voice-capacity-updated": { + "message": "语音容量已更新。" + }, + "app.skin-site.chat.admin.voice-enabled": { "message": "启用实时语音" }, + "app.skin-site.chat.admin.voice-runtime-path": { "message": "语音库目录" }, + "app.skin-site.chat.admin.voice-mirror": { "message": "镜像基础地址" }, + "app.skin-site.chat.admin.voice-public-url": { "message": "公网访问地址" }, + "app.skin-site.chat.admin.voice-bind": { "message": "监听地址" }, + "app.skin-site.chat.admin.voice-signal-port": { "message": "信令端口" }, + "app.skin-site.chat.admin.voice-rtc-tcp-port": { "message": "媒体 TCP 端口" }, + "app.skin-site.chat.admin.voice-rtc-udp-port": { "message": "媒体 UDP 端口" }, + "app.skin-site.chat.admin.voice-startup-timeout": { + "message": "启动等待时间(秒)" + }, + "app.skin-site.chat.admin.voice-use-external-ip": { + "message": "使用外部 IP" + }, + "app.skin-site.chat.admin.voice-node-ip": { "message": "节点 IP" }, + "app.skin-site.chat.admin.voice-saved": { "message": "语音库配置已保存。" }, + "app.skin-site.chat.admin.voice-logs-auto-refresh": { "message": "自动刷新" }, + "app.skin-site.chat.admin.voice-logs-refresh": { "message": "刷新" }, + "app.skin-site.chat.admin.voice-logs-empty": { "message": "暂无日志。" }, + "app.skin-site.admin.wiki.tab-migration": { "message": "迁移中心" }, + "app.skin-site.admin.wiki.migration-title": { "message": "MediaWiki 迁移" }, + "app.skin-site.admin.wiki.migration-hint": { + "message": "迁移内容会先进入不可见暂存区,所有页面完成导入或排除审核后才能整批发布。" + }, + "app.skin-site.admin.wiki.auto-title": { + "message": "从 MediaWiki API 自动读取" + }, + "app.skin-site.admin.wiki.api-url": { "message": "api.php 地址" }, + "app.skin-site.admin.wiki.bot-username": { "message": "Bot 用户名(选填)" }, + "app.skin-site.admin.wiki.bot-password": { "message": "Bot 密码(选填)" }, + "app.skin-site.admin.wiki.credentials-hint": { + "message": "凭据只存在于本次后台任务的内存中,携带凭据时必须使用 HTTPS。" + }, + "app.skin-site.admin.wiki.allow-private": { + "message": "明确允许访问内网来源" + }, + "app.skin-site.admin.wiki.allow-private-hint": { + "message": "内网来源可能访问皮肤站所在网络中的服务,请只对可信地址启用。" + }, + "app.skin-site.admin.wiki.start-auto": { "message": "创建自动迁移任务" }, + "app.skin-site.admin.wiki.xml-title": { "message": "导入 MediaWiki XML" }, + "app.skin-site.admin.wiki.xml-file": { "message": "导出文件" }, + "app.skin-site.admin.wiki.start-xml": { "message": "上传并建立暂存任务" }, + "app.skin-site.admin.wiki.stale-rules": { "message": "疑似过时页面筛选规则" }, + "app.skin-site.admin.wiki.stale-days": { "message": "未更新天数" }, + "app.skin-site.admin.wiki.maintainer-window": { "message": "维护者统计天数" }, + "app.skin-site.admin.wiki.max-maintainers": { "message": "维护者人数不超过" }, + "app.skin-site.admin.wiki.stale-markers": { + "message": "过时分类、模板或文字标记" + }, + "app.skin-site.admin.wiki.stale-markers-hint": { "message": "使用逗号分隔" }, + "app.skin-site.admin.wiki.jobs": { "message": "迁移任务" }, + "app.skin-site.admin.wiki.refresh-jobs": { "message": "刷新" }, + "app.skin-site.admin.wiki.jobs-empty": { "message": "还没有迁移任务。" }, + "app.skin-site.admin.wiki.reviewed-count": { + "message": "已审核 {reviewed} / {total}" + }, + "app.skin-site.admin.wiki.imported-excluded": { + "message": "导入 {imported} · 排除 {excluded}" + }, + "app.skin-site.admin.wiki.view-job": { "message": "查看任务" }, + "app.skin-site.admin.wiki.delete-job": { "message": "删除迁移记录" }, + "app.skin-site.admin.wiki.confirm-delete-job": { + "message": "确认删除迁移任务 #{id}?此操作不可恢复。" + }, + "app.skin-site.admin.wiki.candidates": { "message": "候选页面" }, + "app.skin-site.admin.wiki.candidates-empty": { + "message": "选择任务后查看其页面。" + }, + "app.skin-site.admin.wiki.last-updated": { "message": "更新于 {date}" }, + "app.skin-site.admin.wiki.maintainer-count": { + "message": "{count} 位维护者" + }, + "app.skin-site.admin.wiki.conflict": { "message": "标题冲突" }, + "app.skin-site.admin.wiki.target-title": { "message": "目标标题" }, + "app.skin-site.admin.wiki.overwrite": { "message": "覆盖" }, + "app.skin-site.admin.wiki.import": { "message": "导入" }, + "app.skin-site.admin.wiki.exclude": { "message": "排除" }, + "app.skin-site.admin.wiki.publish": { "message": "整批发布" }, + "app.skin-site.admin.wiki.rollback": { "message": "回滚" }, + "app.skin-site.admin.wiki.confirm-rollback": { + "message": "确认回滚本批迁移?已发布的页面将被还原。" + }, + "app.skin-site.admin.wiki.state-importing": { "message": "正在读取" }, + "app.skin-site.admin.wiki.state-review": { "message": "等待审核" }, + "app.skin-site.admin.wiki.state-publishing": { "message": "正在发布" }, + "app.skin-site.admin.wiki.state-published": { "message": "已发布" }, + "app.skin-site.admin.wiki.state-failed": { "message": "失败" }, + "app.skin-site.admin.wiki.state-rolled-back": { "message": "已回滚" }, + "app.skin-site.admin.wiki.decision-pending": { "message": "待审核" }, + "app.skin-site.admin.wiki.decision-import": { "message": "导入" }, + "app.skin-site.admin.wiki.decision-exclude": { "message": "排除" }, + "app.skin-site.admin.wiki.migration-started": { + "message": "迁移任务已创建。" + }, + "app.skin-site.admin.wiki.xml-staged": { + "message": "XML 已解析并进入逐页审核阶段。" + }, + "app.skin-site.admin.wiki.published": { + "message": "已发布 {imported} 个页面,覆盖 {overwritten} 个。" + }, + "app.skin-site.admin.wiki.rolled-back": { "message": "迁移批次已安全回滚。" }, + "app.skin-site.admin.wiki.job-deleted": { "message": "迁移记录已删除。" }, + "app.skin-site.admin.wiki.select-xml": { + "message": "请先选择 MediaWiki XML 文件。" + }, + "app.skin-site.wiki.title": { "message": "StarLight 维基" }, + "app.skin-site.wiki.search-placeholder": { "message": "输入页面标题" }, + "app.skin-site.wiki.open": { "message": "打开" }, + "app.skin-site.wiki.loading": { "message": "加载中…" }, + "app.skin-site.wiki.not-found": { "message": "页面不存在。" }, + "app.skin-site.wiki.empty": { "message": "在上方输入页面标题开始阅读。" }, + "app.skin-site.wiki.updated-at": { + "message": "最后编辑于 {date},编辑者 {author}" + }, + "app.skin-site.wiki.revision": { "message": "修订 #{id}" }, + "app.skin-site.wiki.categories": { "message": "分类" }, + "app.skin-site.wiki.back": { "message": "返回" } } diff --git a/scripts/axolotl/i18n-check.mjs b/scripts/axolotl/i18n-check.mjs index 1f52425..f8b9a1d 100644 --- a/scripts/axolotl/i18n-check.mjs +++ b/scripts/axolotl/i18n-check.mjs @@ -1,5 +1,6 @@ import { readFile } from 'node:fs/promises' import { parse, TYPE } from '@formatjs/icu-messageformat-parser' +import { collectSkinSiteMessages } from './skin-site-messages.mjs' const localePairs = [ [ @@ -10,6 +11,22 @@ const localePairs = [ ] const failures = [] +const skinSiteCatalogs = Object.fromEntries( + await Promise.all( + ['en-US', 'zh-CN'].map(async (locale) => [ + locale, + JSON.parse(await readFile(`apps/app-frontend/src/locales/${locale}/index.json`, 'utf8')), + ]), + ), +) +for (const { id, file } of collectSkinSiteMessages()) { + for (const locale of ['en-US', 'zh-CN']) { + const catalogPath = `apps/app-frontend/src/locales/${locale}/index.json` + const catalog = skinSiteCatalogs[locale] + if (!catalog[id]?.message) + failures.push(`${catalogPath}: missing source message ${id} (${file})`) + } +} const allowedUntranslatedMessages = new Set([ 'Chaos Cubed', 'MINECON Earth 2017', diff --git a/scripts/axolotl/skin-site-i18n.test.mjs b/scripts/axolotl/skin-site-i18n.test.mjs new file mode 100644 index 0000000..c733dba --- /dev/null +++ b/scripts/axolotl/skin-site-i18n.test.mjs @@ -0,0 +1,36 @@ +import assert from 'node:assert/strict' +import fs from 'node:fs' +import test from 'node:test' + +import { collectSkinSiteMessages } from './skin-site-messages.mjs' + +test('all skin-site messages used in source exist in both release language catalogs', () => { + const messages = collectSkinSiteMessages() + assert.ok(messages.length > 100, 'The check must scan the actual UI') + for (const locale of ['en-US', 'zh-CN']) { + const catalog = JSON.parse( + fs.readFileSync(`apps/app-frontend/src/locales/${locale}/index.json`, 'utf8'), + ) + const missing = messages.filter(({ id }) => !catalog[id]?.message) + assert.deepEqual( + missing.map(({ id }) => id), + [], + `${locale} has uncatalogued UI messages`, + ) + } +}) + +test('Chinese login and announcement labels do not fall back to English', () => { + const catalog = JSON.parse( + fs.readFileSync('apps/app-frontend/src/locales/zh-CN/index.json', 'utf8'), + ) + for (const id of [ + 'app.skin-site.login.title', + 'app.skin-site.login.username', + 'app.skin-site.login.password-hint', + 'app.skin-site.home.announcements.title', + 'app.skin-site.home.announcements.failed', + ]) { + assert.match(catalog[id]?.message ?? '', /\p{Script=Han}/u, id) + } +}) diff --git a/scripts/axolotl/skin-site-messages.mjs b/scripts/axolotl/skin-site-messages.mjs new file mode 100644 index 0000000..776cf72 --- /dev/null +++ b/scripts/axolotl/skin-site-messages.mjs @@ -0,0 +1,59 @@ +import fs from 'node:fs' +import path from 'node:path' +import { createRequire } from 'node:module' + +const require = createRequire(new URL('../../apps/app-frontend/package.json', import.meta.url)) +const ts = require('typescript') +const { parse } = require('vue/compiler-sfc') + +/** Read the message IDs actually used by skin-site UI, including uncatalogued messages. */ +export function collectSkinSiteMessages(root = 'apps/app-frontend/src') { + const messages = new Map() + function walk(directory) { + for (const entry of fs.readdirSync(directory, { withFileTypes: true })) { + const file = path.join(directory, entry.name) + if (entry.isDirectory()) { + if (entry.name !== 'locales') walk(file) + continue + } + if (!/\.(vue|ts)$/.test(file) || file.endsWith('.test.ts')) continue + let source = fs.readFileSync(file, 'utf8') + if (file.endsWith('.vue')) { + const { descriptor } = parse(source) + source = [descriptor.script?.content, descriptor.scriptSetup?.content] + .filter(Boolean) + .join('\n') + } + const ast = ts.createSourceFile(`${file}.ts`, source, ts.ScriptTarget.Latest, true) + function visit(node) { + if (ts.isObjectLiteralExpression(node)) { + const properties = Object.fromEntries( + node.properties + .filter(ts.isPropertyAssignment) + .map((property) => [ + property.name.getText(ast).replace(/^['"]|['"]$/g, ''), + property.initializer, + ]), + ) + if ( + properties.id && + properties.defaultMessage && + ts.isStringLiteralLike(properties.id) && + ts.isStringLiteralLike(properties.defaultMessage) && + properties.id.text.startsWith('app.skin-site.') + ) { + messages.set(properties.id.text, { + id: properties.id.text, + defaultMessage: properties.defaultMessage.text, + file, + }) + } + } + ts.forEachChild(node, visit) + } + visit(ast) + } + } + walk(root) + return [...messages.values()] +}