mirror of
https://github.com/modrinth/code.git
synced 2026-07-31 21:26:40 +00:00
Compare commits
117
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
17a54adb3d | ||
|
|
cfb5e8ff2a | ||
|
|
2af034e088 | ||
|
|
140afb26a2 | ||
|
|
3c3cde1908 | ||
|
|
274325d97c | ||
|
|
da48a12551 | ||
|
|
bf24ed8d12 | ||
|
|
0731654a1c | ||
|
|
81f19eeb8d | ||
|
|
4b4282cfbf | ||
|
|
7b3471944d | ||
|
|
c1302e5aba | ||
|
|
25ae879546 | ||
|
|
a23a9397f7 | ||
|
|
d2abeb434c | ||
|
|
0aecfa3140 | ||
|
|
44000dbd15 | ||
|
|
982b5f46f9 | ||
|
|
3cc361d0d9 | ||
|
|
b16d4bd1ab | ||
|
|
12cfa5a4d8 | ||
|
|
059bffc805 | ||
|
|
fac95cca9c | ||
|
|
f9004dc2f6 | ||
|
|
cf7c77700a | ||
|
|
2db1e028c8 | ||
|
|
b41ee959ec | ||
|
|
58c2b0d27e | ||
|
|
d4480d2791 | ||
|
|
2c7a6d3cbe | ||
|
|
4ea121e58f | ||
|
|
f97557ca24 | ||
|
|
4db748e080 | ||
|
|
c09f7fd5e6 | ||
|
|
67fd759d9b | ||
|
|
206c413ff8 | ||
|
|
f18ee7bed2 | ||
|
|
5316911610 | ||
|
|
a76a11f0ce | ||
|
|
a3eb981058 | ||
|
|
46d9df91db | ||
|
|
8554d7459b | ||
|
|
fd8d5107c7 | ||
|
|
41b72d7cf9 | ||
|
|
da986cd8d8 | ||
|
|
74758fe185 | ||
|
|
92eddbe832 | ||
|
|
9e6a6cd385 | ||
|
|
797051ff27 | ||
|
|
ef216a6d96 | ||
|
|
1feae1e0da | ||
|
|
9c85ed6f83 | ||
|
|
25dc8fd6a2 | ||
|
|
f9b9567dc2 | ||
|
|
3e385f87b3 | ||
|
|
4735d14afe | ||
|
|
327dda683e | ||
|
|
99ae81fe18 | ||
|
|
677edc397d | ||
|
|
29d012ae6d | ||
|
|
42da6f43f0 | ||
|
|
823bd021d7 | ||
|
|
b6e82a4409 | ||
|
|
75f58d6d11 | ||
|
|
b18f3c9b16 | ||
|
|
0dfd876cff | ||
|
|
3c5bd0756d | ||
|
|
482bb85c6f | ||
|
|
fcc00b7ce7 | ||
|
|
2287743d69 | ||
|
|
00e81adbbd | ||
|
|
1871913d87 | ||
|
|
13b01a87c5 | ||
|
|
d78155147e | ||
|
|
bf5a565829 | ||
|
|
2128fa7ade | ||
|
|
44df034e2c | ||
|
|
93c81631a9 | ||
|
|
3b604cfdc0 | ||
|
|
922b72d1a4 | ||
|
|
1d10af09f5 | ||
|
|
cf1b5f5e2d | ||
|
|
61754efca4 | ||
|
|
235934abd7 | ||
|
|
22d1b900f6 | ||
|
|
1cfbefff02 | ||
|
|
7852529915 | ||
|
|
c556624d0e | ||
|
|
87c86c7d0d | ||
|
|
58c1e225c8 | ||
|
|
900a4df1b7 | ||
|
|
5b968a1486 | ||
|
|
3a917631d5 | ||
|
|
63ea8230ba | ||
|
|
496bbae8a0 | ||
|
|
1848ba3b29 | ||
|
|
681ae5d1d8 | ||
|
|
d0c7575a23 | ||
|
|
d9c7608ade | ||
|
|
7d3935a38d | ||
|
|
a67f596524 | ||
|
|
7fa0a277c6 | ||
|
|
01c9dee612 | ||
|
|
d50a8efb26 | ||
|
|
be5ebacd84 | ||
|
|
989f282de3 | ||
|
|
8a2125ef16 | ||
|
|
31b541007d | ||
|
|
4792985e52 | ||
|
|
86c0937616 | ||
|
|
51deba8cd1 | ||
|
|
b2d40af9cd | ||
|
|
fc382e957b | ||
|
|
c9547bb988 | ||
|
|
adef71b89a | ||
|
|
c44cc38b3a |
@@ -1,156 +1,18 @@
|
||||
# Adding a New API Module
|
||||
---
|
||||
name: api-module
|
||||
description: Add a new API endpoint module to packages/api-client from an OpenAPI schema. Use when adding new backend endpoints, creating API client modules, or when an openapi.yml is provided.
|
||||
argument-hint: <path-to-openapi.yml>
|
||||
---
|
||||
|
||||
How to add a new API endpoint module to `packages/api-client`.
|
||||
Refer to the standard: @standards/frontend/ADDING_API_MODULES.md
|
||||
|
||||
## Steps
|
||||
|
||||
### 1. Define types in the module's `types.ts`
|
||||
|
||||
Types must match 1:1 with the backend API response. Do not reshape, rename, or omit fields.
|
||||
|
||||
Add to an existing namespace or create a new one:
|
||||
|
||||
```ts
|
||||
// modules/labrinth/types.ts (existing namespace)
|
||||
export namespace Labrinth {
|
||||
export namespace MyDomain {
|
||||
export namespace v3 {
|
||||
export type Thing = {
|
||||
id: string
|
||||
name: string
|
||||
created: string
|
||||
// ... matches API response exactly
|
||||
}
|
||||
|
||||
export type CreateThingRequest = {
|
||||
name: string
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
For a new API service, create `modules/<service>/types.ts` with a new top-level namespace and re-export it from `modules/types.ts`.
|
||||
|
||||
### 2. Create the module class
|
||||
|
||||
Create `modules/<api>/<domain>/v<N>.ts`:
|
||||
|
||||
```ts
|
||||
// modules/labrinth/things/v3.ts
|
||||
import { AbstractModule } from '../../../core/abstract-module'
|
||||
import type { Labrinth } from '../types'
|
||||
|
||||
export class LabrinthThingsV3Module extends AbstractModule {
|
||||
public getModuleID(): string {
|
||||
return 'labrinth_things_v3'
|
||||
}
|
||||
|
||||
public async get(id: string): Promise<Labrinth.MyDomain.v3.Thing> {
|
||||
return this.client.request<Labrinth.MyDomain.v3.Thing>(`/thing/${id}`, {
|
||||
api: 'labrinth',
|
||||
version: 3,
|
||||
method: 'GET',
|
||||
})
|
||||
}
|
||||
|
||||
public async create(data: Labrinth.MyDomain.v3.CreateThingRequest): Promise<Labrinth.MyDomain.v3.Thing> {
|
||||
return this.client.request<Labrinth.MyDomain.v3.Thing>(`/thing`, {
|
||||
api: 'labrinth',
|
||||
version: 3,
|
||||
method: 'POST',
|
||||
body: data,
|
||||
})
|
||||
}
|
||||
|
||||
public async delete(id: string): Promise<void> {
|
||||
return this.client.request(`/thing/${id}`, {
|
||||
api: 'labrinth',
|
||||
version: 3,
|
||||
method: 'DELETE',
|
||||
})
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Request options
|
||||
|
||||
| Field | Values | Purpose |
|
||||
|-------|--------|---------|
|
||||
| `api` | `'labrinth'`, `'archon'`, or a full URL | Which base URL to use |
|
||||
| `version` | `2`, `3`, `'internal'`, `'modrinth/v0'`, etc. | URL version segment |
|
||||
| `method` | `'GET'`, `'POST'`, `'PUT'`, `'PATCH'`, `'DELETE'` | HTTP method |
|
||||
| `body` | object | JSON request body |
|
||||
| `params` | `Record<string, string>` | Query parameters |
|
||||
| `skipAuth` | `boolean` | Skip auth feature for this request |
|
||||
| `useNodeAuth` | `boolean` | Use node-level auth (kyros) |
|
||||
| `timeout` | `number` | Request timeout in ms |
|
||||
| `retry` | `boolean \| number` | Override retry behavior |
|
||||
|
||||
#### For uploads
|
||||
|
||||
Return an `UploadHandle` instead of a `Promise`:
|
||||
|
||||
```ts
|
||||
public uploadThing(id: string, file: File): UploadHandle<void> {
|
||||
return this.client.upload<void>(`/thing/${id}/file`, {
|
||||
api: 'labrinth',
|
||||
version: 3,
|
||||
file,
|
||||
})
|
||||
}
|
||||
|
||||
// Or with FormData for multipart:
|
||||
public createWithFiles(data: CreateRequest, files: File[]): UploadHandle<Thing> {
|
||||
const formData = new FormData()
|
||||
formData.append('data', JSON.stringify(data))
|
||||
files.forEach((f, i) => formData.append(`file-${i}`, f, f.name))
|
||||
|
||||
return this.client.upload<Thing>(`/thing`, {
|
||||
api: 'labrinth',
|
||||
version: 3,
|
||||
formData,
|
||||
timeout: 60 * 5 * 1000, // longer timeout for uploads
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Register in the MODULE_REGISTRY
|
||||
|
||||
Add to `modules/index.ts`:
|
||||
|
||||
```ts
|
||||
import { LabrinthThingsV3Module } from './labrinth/things/v3'
|
||||
|
||||
export const MODULE_REGISTRY = {
|
||||
// ... existing modules
|
||||
labrinth_things_v3: LabrinthThingsV3Module,
|
||||
} as const
|
||||
```
|
||||
|
||||
The naming convention is `<api>_<domain>_<version>`. This flat key gets transformed into nested access: `client.labrinth.things_v3`.
|
||||
|
||||
### 4. Export types
|
||||
|
||||
If you added to an existing namespace, types are already re-exported. If you created a new `types.ts`, add it to `modules/types.ts`:
|
||||
|
||||
```ts
|
||||
export * from './<service>/types'
|
||||
```
|
||||
|
||||
## Naming Conventions
|
||||
|
||||
| Convention | Example |
|
||||
|-----------|---------|
|
||||
| Module class | `LabrinthThingsV3Module` — `{Api}{Domain}V{N}Module` |
|
||||
| Module ID | `labrinth_things_v3` — `{api}_{domain}_v{n}` |
|
||||
| Type namespace | `Labrinth.MyDomain.v3.Thing` |
|
||||
| File path | `modules/labrinth/things/v3.ts` |
|
||||
|
||||
## Key Files
|
||||
|
||||
- `src/core/abstract-module.ts` — base class all modules extend
|
||||
- `src/core/abstract-client.ts` — `request()` and `upload()` methods
|
||||
- `src/modules/index.ts` — `MODULE_REGISTRY` and `buildModuleStructure()`
|
||||
- `src/modules/<api>/types.ts` — type definitions per API
|
||||
- `src/types/upload.ts` — `UploadHandle`, `UploadProgress`, `UploadRequestOptions`
|
||||
1. **Read the OpenAPI schema** at `$ARGUMENTS` — identify the endpoints, request/response shapes, and path parameters.
|
||||
2. **Read the standard above** for naming conventions, type rules, and the module registration pattern.
|
||||
3. **Determine the service and version** — the URL path prefix tells you which service directory and version namespace to use (e.g. `/v3/projects` → `labrinth/v3/`).
|
||||
4. **Define types in `types.ts`** — types must match the API response 1:1. Use the OpenAPI schema as the source of truth. Do not reshape or rename fields.
|
||||
5. **Create the module class** — extend `BaseModule`, implement each endpoint as a method. Use the correct HTTP verb and request options pattern from the standard.
|
||||
6. **Register in `MODULE_REGISTRY`** — add the module entry so it's auto-instantiated on the client.
|
||||
7. **Export types** from the service's barrel `index.ts`.
|
||||
8. **Verify** — check that the module compiles and the types are accessible from `@modrinth/api-client`.
|
||||
|
||||
@@ -1,144 +1,25 @@
|
||||
# Cross-Platform Page System
|
||||
---
|
||||
name: cross-platform-pages
|
||||
description: Convert a page to the cross-platform page system so it works in both the website and the desktop app. Use when moving a page into packages/ui/src/layouts/, creating shared or wrapped layouts, or setting up DI contracts for platform abstraction.
|
||||
argument-hint: <path-to-page>
|
||||
---
|
||||
|
||||
When a page needs to exist in both the Modrinth App (`apps/app-frontend`) and the Modrinth Website (`apps/frontend`), use the cross-platform page system.
|
||||
Refer to the standards: @standards/frontend/CROSS_PLATFORM_PAGES.md and @standards/frontend/DEPENDENCY_INJECTION.md
|
||||
|
||||
## How It Works
|
||||
## Steps
|
||||
|
||||
1. **Pages live as Vue SFCs in `packages/ui`** — either in `src/pages/` or `src/layout/` (if `src/pages/` doesn't exist, it's been renamed to `src/layout/`).
|
||||
2. **Platform-dependent data flows via DI** — the app uses Tauri `invoke` commands, the website uses `api-client` or the legacy `useBaseFetch` composable. The shared page never knows which. See the `dependency-injection` skill for full DI docs.
|
||||
3. **Non-platform-dependent data flows via props** — if data doesn't change based on _how_ it's fetched, just pass it as a prop.
|
||||
|
||||
## Example: Content Page
|
||||
|
||||
`ContentPageLayout` demonstrates the full pattern.
|
||||
|
||||
### 1. Define a DI contract in `packages/ui/src/providers/`
|
||||
|
||||
The provider interface abstracts all platform-specific operations:
|
||||
|
||||
```ts
|
||||
// packages/ui/src/providers/content-manager.ts
|
||||
export interface ContentManagerContext {
|
||||
items: Ref<ContentItem[]>
|
||||
loading: Ref<boolean>
|
||||
error: Ref<Error | null>
|
||||
contentTypeLabel: Ref<string>
|
||||
|
||||
// These are the platform-abstracted operations:
|
||||
// App uses invoke(), website uses api-client
|
||||
toggleEnabled: (item: ContentItem) => Promise<void>
|
||||
deleteItem: (item: ContentItem) => Promise<void>
|
||||
refresh: () => Promise<void>
|
||||
browse: () => void
|
||||
uploadFiles: () => void
|
||||
|
||||
// Optional capabilities — not every platform supports everything
|
||||
hasUpdateSupport: boolean
|
||||
updateItem?: (item: ContentItem) => Promise<void>
|
||||
bulkUpdateItem?: (items: ContentItem[]) => Promise<void>
|
||||
|
||||
mapToTableItem: (item: ContentItem) => ContentCardTableItem
|
||||
}
|
||||
|
||||
export const [injectContentManager, provideContentManager] =
|
||||
createContext<ContentManagerContext>('ContentManager')
|
||||
```
|
||||
|
||||
### 2. Build the shared page in `packages/ui`
|
||||
|
||||
The page component injects the context and handles all UI logic (search, filtering, selection, bulk operations, empty states, modals) without knowing the platform:
|
||||
|
||||
```vue
|
||||
<!-- packages/ui/src/components/instances/ContentPageLayout.vue -->
|
||||
<script setup lang="ts">
|
||||
import { injectContentManager } from '../../providers/content-manager'
|
||||
|
||||
const { items, loading, toggleEnabled, deleteItem, refresh, mapToTableItem } =
|
||||
injectContentManager()
|
||||
|
||||
// All UI logic lives here — search, filters, sort, bulk ops, etc.
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ContentCardTable :items="filteredItems" />
|
||||
</template>
|
||||
```
|
||||
|
||||
### 3. Each platform provides its implementation
|
||||
|
||||
**Website (Nuxt)** — uses `api-client` or `useBaseFetch`:
|
||||
|
||||
```vue
|
||||
<!-- apps/frontend/src/pages/hosting/manage/[id]/content.vue -->
|
||||
<script setup lang="ts">
|
||||
import { provideContentManager, ContentPageLayout } from '@modrinth/ui'
|
||||
const { labrinth } = injectModrinthClient()
|
||||
|
||||
const { data: items } = useQuery({
|
||||
queryKey: ['content', serverId],
|
||||
queryFn: () => labrinth.servers_v0.getAddons(serverId),
|
||||
})
|
||||
|
||||
provideContentManager({
|
||||
items: computed(() => items.value?.map(addonToContentItem) ?? []),
|
||||
deleteItem: async (item) => {
|
||||
await labrinth.servers_v0.deleteAddon(serverId, item.id)
|
||||
},
|
||||
// ... rest of the contract
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ContentPageLayout />
|
||||
</template>
|
||||
```
|
||||
|
||||
**App (Tauri)** — uses `invoke`:
|
||||
|
||||
```vue
|
||||
<!-- apps/app-frontend/src/pages/instance/Content.vue -->
|
||||
<script setup lang="ts">
|
||||
import { provideContentManager, ContentPageLayout } from '@modrinth/ui'
|
||||
import { invoke } from '@tauri-apps/api/core'
|
||||
|
||||
const items = ref<ContentItem[]>([])
|
||||
await invoke('get_instance_content', { instanceId }).then(/* map to ContentItem[] */)
|
||||
|
||||
provideContentManager({
|
||||
items,
|
||||
deleteItem: async (item) => {
|
||||
await invoke('delete_content', { instanceId, path: item.file_path })
|
||||
},
|
||||
// ... rest of the contract
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ContentPageLayout />
|
||||
</template>
|
||||
```
|
||||
|
||||
## When to Use Props vs DI
|
||||
|
||||
| Use | When |
|
||||
| --------- | -------------------------------------------------------------------------------------------------------- |
|
||||
| **DI** | The data depends on _how_ it's fetched (different per platform) — API calls, file operations, navigation |
|
||||
| **Props** | The data is the same regardless of platform — configuration flags, display options |
|
||||
|
||||
## Composables for Shared Logic
|
||||
|
||||
Extract reusable stateful logic into composables in `packages/ui/src/composables/`. The shared page orchestrates them internally:
|
||||
|
||||
- Search (Fuse.js fuzzy search over items)
|
||||
- Filtering (dynamic filter pills)
|
||||
- Selection (multi-select with bulk operations)
|
||||
- Bulk operations (sequential execution with progress tracking)
|
||||
|
||||
## Key Files
|
||||
|
||||
- `packages/ui/src/pages/` (or `src/layout/`) — shared page components
|
||||
- `packages/ui/src/providers/` — DI contracts
|
||||
- `packages/ui/src/composables/` — shared stateful logic
|
||||
- `apps/frontend/src/app.vue` — website root provider setup
|
||||
- `apps/app-frontend/src/App.vue` — app root provider setup
|
||||
- `apps/app-frontend/src/routes.js` — app route definitions
|
||||
1. **Read the target page** at `$ARGUMENTS` and understand its data sources, mutations, and navigation.
|
||||
2. **Read the standards above** to understand the shared vs wrapped distinction and the DI pattern.
|
||||
3. **Decide the category:**
|
||||
- **Wrapped** (`layouts/wrapped/`) — if the page uses the same API source on both platforms (e.g. web requests, not Tauri plugins). Just move the page component into `packages/ui` and import it from both frontends.
|
||||
- **Shared** (`layouts/shared/`) — if the page has different data-fetching logic per platform (e.g. website uses `api-client`, app uses Tauri `invoke`). Requires a DI contract.
|
||||
4. **For shared layouts:**
|
||||
- Define a DI contract interface in `providers/` capturing all platform-specific operations.
|
||||
- Create the layout component that injects the context and handles all UI logic.
|
||||
- Extract reusable stateful logic (search, filtering, selection) into `composables/`.
|
||||
- Implement the contract separately in each frontend (`apps/frontend/`, `apps/app-frontend/`).
|
||||
5. **For wrapped pages:**
|
||||
- Move the page component into `packages/ui/src/layouts/wrapped/` matching the route structure.
|
||||
- Replace any platform-specific imports with shared utilities.
|
||||
- Import and render the wrapped page from both frontends as a simple component.
|
||||
6. **Verify** the page renders correctly by checking for missing imports and that all DI contracts are satisfied.
|
||||
|
||||
@@ -1,45 +1,22 @@
|
||||
# Figma MCP Usage
|
||||
---
|
||||
name: figma-mcp
|
||||
description: Use the Figma MCP server to translate a Figma design into a Vue page or component layout. Use when the user provides a Figma URL, asks to implement a design, or wants to draft a page layout from Figma.
|
||||
argument-hint: <figma-url>
|
||||
---
|
||||
|
||||
When the Figma MCP server is connected, use it to translate Figma designs into production-ready Vue components for this monorepo.
|
||||
Refer to the standard: @standards/frontend/FIGMA_MCP_USAGE.md
|
||||
Also read @packages/ui/CLAUDE.md for color token mapping and component conventions.
|
||||
|
||||
## Workflow
|
||||
## Steps
|
||||
|
||||
### 1. Get the design context
|
||||
|
||||
Use `get_design_context` with the node ID from a Figma URL. If the URL is `https://figma.com/design/:fileKey/:fileName?node-id=1-2`, the node ID is `1:2`.
|
||||
|
||||
```
|
||||
get_design_context(nodeId: "1:2", clientLanguages: "typescript,html,css", clientFrameworks: "vue")
|
||||
```
|
||||
|
||||
This returns reference code, a screenshot, and metadata. Always start here.
|
||||
|
||||
### 2. Get a screenshot for visual reference
|
||||
|
||||
Use `get_screenshot` if you need to see the design without full code context:
|
||||
|
||||
```
|
||||
get_screenshot(nodeId: "1:2")
|
||||
```
|
||||
|
||||
### 3. Get variable definitions
|
||||
|
||||
Use `get_variable_defs` to see what design tokens are applied to a node:
|
||||
|
||||
```
|
||||
get_variable_defs(nodeId: "1:2")
|
||||
```
|
||||
|
||||
### 4. Get metadata for structure overview
|
||||
|
||||
Use `get_metadata` to get an XML overview of node IDs, layer types, names, positions and sizes — useful for understanding the structure of a complex frame before diving into individual nodes.
|
||||
|
||||
## Adapting Figma Output
|
||||
|
||||
The Figma MCP returns generic reference code. Adapt it to match the Modrinth codebase:
|
||||
|
||||
1. **Read `packages/ui/CLAUDE.md`** for color usage rules, surface token mapping, and component patterns.
|
||||
2. **Map Figma color variables to `surface-*` tokens** — never use Figma's aliased names like `bg/default` or `bg/raised` directly. The CLAUDE.md has the full mapping table.
|
||||
3. **Check `packages/assets/styles/variables.scss`** for tokens not exposed in Figma (brand highlights, semantic backgrounds, shadows).
|
||||
4. **Check for existing components** in `packages/ui/src/components/` before building from scratch.
|
||||
5. **Match spacing exactly** — do not approximate values from the design.
|
||||
1. **Parse the Figma URL** from `$ARGUMENTS` — extract the `fileKey` and `nodeId`. Convert `-` to `:` in the node ID.
|
||||
2. **Read the standards above** for the available tools, adaptation rules, and color usage.
|
||||
3. **Call `get_design_context`** with the extracted `nodeId` and `fileKey`, using `clientLanguages: "typescript,html,css"` and `clientFrameworks: "vue"`. This is always the first tool to call.
|
||||
5. **Adapt the output to the Modrinth codebase:**
|
||||
- Map Figma color variables to `surface-*` / `text-*` tokens — never use Figma's aliased names directly.
|
||||
- Check `packages/ui/src/components/` for existing components that match elements in the design (buttons, cards, modals, inputs, etc.).
|
||||
- Check `packages/assets/styles/variables.scss` for tokens not exposed in Figma.
|
||||
- Match spacing values exactly from the design.
|
||||
6. **Use `get_screenshot`** if you need a closer visual reference of specific nodes.
|
||||
7. **Use `get_variable_defs`** to verify which design tokens are applied to ambiguous elements.
|
||||
8. **Build the component** as a Vue SFC using Tailwind classes and the project's existing component library.
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
# i18n String Conversion
|
||||
|
||||
Convert hard-coded natural-language strings in Vue SFCs into the localization system using utilities from `@modrinth/ui`.
|
||||
|
||||
## Rules
|
||||
|
||||
### 1. Identify translatable strings
|
||||
|
||||
- Scan `<template>` for all user-visible strings: inner text, alt attributes, placeholders, button labels, etc.
|
||||
- Check `<script>` too: dropdown option labels, notification messages, etc.
|
||||
- Do NOT extract dynamic expressions (`{{ user.name }}`) or HTML tags — only static human-readable text.
|
||||
|
||||
### 2. Create message definitions
|
||||
|
||||
Import `defineMessage` or `defineMessages` from `@modrinth/ui` in `<script setup>`. Define messages with a unique `id` (descriptive prefix based on component path) and `defaultMessage` equal to the original English string:
|
||||
|
||||
```ts
|
||||
const messages = defineMessages({
|
||||
welcomeTitle: { id: 'auth.welcome.title', defaultMessage: 'Welcome' },
|
||||
welcomeDescription: { id: 'auth.welcome.description', defaultMessage: "You're now part of the community…" },
|
||||
})
|
||||
```
|
||||
|
||||
### 3. Handle variables and ICU formats
|
||||
|
||||
- Dynamic parts become ICU placeholders: `"Hello, ${user.name}!"` → `defaultMessage: 'Hello, {name}!'`
|
||||
- Numbers/dates/times use ICU options: `{price, number, ::currency/USD}`
|
||||
- Plurals/selects use ICU: `'{count, plural, one {# message} other {# messages}}'`
|
||||
|
||||
### 4. Rich-text messages (links/markup)
|
||||
|
||||
Wrap link/markup ranges with tags in `defaultMessage`:
|
||||
|
||||
```
|
||||
"By creating an account, you agree to our <terms-link>Terms</terms-link> and <privacy-link>Privacy Policy</privacy-link>."
|
||||
```
|
||||
|
||||
Render with `<IntlFormatted>` from `@modrinth/ui` using named slots:
|
||||
|
||||
```vue
|
||||
<IntlFormatted :message-id="messages.tosLabel">
|
||||
<template #terms-link="{ children }">
|
||||
<NuxtLink to="/terms">
|
||||
<component :is="() => children" />
|
||||
</NuxtLink>
|
||||
</template>
|
||||
<template #privacy-link="{ children }">
|
||||
<NuxtLink to="/privacy">
|
||||
<component :is="() => children" />
|
||||
</NuxtLink>
|
||||
</template>
|
||||
</IntlFormatted>
|
||||
```
|
||||
|
||||
For simple emphasis: `'Welcome to <strong>Modrinth</strong>!'` with a slot:
|
||||
|
||||
```vue
|
||||
<template #strong="{ children }">
|
||||
<strong><component :is="() => children" /></strong>
|
||||
</template>
|
||||
```
|
||||
|
||||
For complex child handling, use `normalizeChildren` from `@modrinth/ui`:
|
||||
|
||||
```vue
|
||||
<template #bold="{ children }">
|
||||
<strong><component :is="() => normalizeChildren(children)" /></strong>
|
||||
</template>
|
||||
```
|
||||
|
||||
### 5. Formatting in templates
|
||||
|
||||
Use `useVIntl()` from `@modrinth/ui`; prefer `formatMessage` for simple strings:
|
||||
|
||||
```ts
|
||||
const { formatMessage } = useVIntl()
|
||||
```
|
||||
|
||||
```vue
|
||||
<button>{{ formatMessage(messages.welcomeTitle) }}</button>
|
||||
{{ formatMessage(messages.greeting, { name: user.name }) }}
|
||||
```
|
||||
|
||||
### 6. Naming conventions
|
||||
|
||||
Make `id`s descriptive and stable (e.g., `error.generic.default.title`). Group related messages with `defineMessages`.
|
||||
|
||||
### 7. Avoid Vue/ICU delimiter collisions
|
||||
|
||||
If an ICU placeholder ends right before `}}` in a Vue template, insert a space: `} }` to avoid parsing issues.
|
||||
|
||||
### 8. Imports
|
||||
|
||||
Ensure these are imported from `@modrinth/ui` as needed: `defineMessage`/`defineMessages`, `useVIntl`, `IntlFormatted`, `normalizeChildren`.
|
||||
|
||||
### 9. Preserve functionality
|
||||
|
||||
Do not change logic, layout, reactivity, or bindings — only refactor strings into i18n.
|
||||
|
||||
## Reference Examples
|
||||
|
||||
- Variables/plurals: `apps/frontend/src/pages/frog.vue`
|
||||
- Rich-text link tags: `apps/frontend/src/pages/auth/welcome.vue` and `apps/frontend/src/error.vue`
|
||||
|
||||
When finished, there should be no hard-coded English strings left in the template — everything comes from `formatMessage` or `<IntlFormatted>`.
|
||||
@@ -0,0 +1,24 @@
|
||||
---
|
||||
name: i18n-pass
|
||||
description: Perform an i18n localization pass on changed files or a pull request, converting hard-coded English strings to the @modrinth/ui i18n system. Use when internationalizing a set of changes, reviewing a PR for untranslated strings, or converting a specific component.
|
||||
argument-hint: [file-path-or-pr-number]
|
||||
---
|
||||
|
||||
Refer to the standard: @standards/frontend/INTERNATIONALIZATION.md
|
||||
|
||||
## Steps
|
||||
|
||||
1. **Identify the scope of changes:**
|
||||
- If `$ARGUMENTS` is a PR number, run `gh pr diff $ARGUMENTS` to get the changed files.
|
||||
- If `$ARGUMENTS` is a file path, use that directly.
|
||||
- If no argument, check `git diff` for uncommitted changes.
|
||||
2. **Read the standard above** for the message definition pattern, ICU format rules, and `IntlFormatted` usage.
|
||||
3. **Filter to Vue SFCs** — only `.vue` files need i18n passes. Skip non-component files.
|
||||
4. **For each file, scan for hard-coded strings:**
|
||||
- `<template>`: inner text, `alt`, `placeholder`, `aria-label`, button labels, tooltip text.
|
||||
- `<script>`: string literals passed to user-visible UI (notification messages, dropdown labels, error messages).
|
||||
- Skip: dynamic expressions, HTML tag names, CSS classes, internal identifiers, log messages.
|
||||
5. **Define messages** with `defineMessages` — use descriptive, stable `id`s based on the component's domain (e.g. `project.settings.title`).
|
||||
6. **Replace strings in templates** with `formatMessage()` calls, or `<IntlFormatted>` for strings containing links or markup.
|
||||
7. **Handle ICU edge cases** — add a space before `}}` if an ICU placeholder ends at a Vue template delimiter boundary.
|
||||
8. **Verify** no hard-coded English strings remain in the changed templates. Do not alter logic, layout, or reactivity.
|
||||
@@ -1,215 +0,0 @@
|
||||
# Multistage Modals
|
||||
|
||||
The `MultiStageModal` component (`packages/ui/src/components/base/MultiStageModal.vue`) provides a wizard-like modal with progress tracking, conditional stages, and per-stage button configuration.
|
||||
|
||||
## Architecture
|
||||
|
||||
A multistage modal has three parts:
|
||||
|
||||
1. **Context** — A DI provider that holds all state, business logic, and stage configs
|
||||
2. **Stage configs** — Data objects describing each stage (title, component, buttons, skip conditions)
|
||||
3. **Stage components** — Vue components rendered inside the modal, consuming the context
|
||||
|
||||
## Building a Multistage Modal
|
||||
|
||||
### 1. Define the context
|
||||
|
||||
Create a DI provider with all the state your wizard needs. Include the modal ref and stage configs.
|
||||
|
||||
```ts
|
||||
// providers/my-feature/my-modal.ts
|
||||
import type { ShallowRef } from 'vue'
|
||||
import type { ComponentExposed } from 'vue-component-type-helpers'
|
||||
import type { MultiStageModal, StageConfigInput } from '@modrinth/ui'
|
||||
import { createContext } from '@modrinth/ui'
|
||||
|
||||
export interface MyModalContext {
|
||||
// State
|
||||
formData: Ref<MyFormData>
|
||||
isSubmitting: Ref<boolean>
|
||||
|
||||
// Modal control
|
||||
modal: ShallowRef<ComponentExposed<typeof MultiStageModal> | null>
|
||||
stageConfigs: StageConfigInput<MyModalContext>[]
|
||||
|
||||
// Business logic
|
||||
handleSubmit: () => Promise<void>
|
||||
}
|
||||
|
||||
export const [injectMyModalContext, provideMyModalContext] =
|
||||
createContext<MyModalContext>('MyModal')
|
||||
|
||||
export function createMyModalContext(
|
||||
modal: ShallowRef<ComponentExposed<typeof MultiStageModal> | null>,
|
||||
): MyModalContext {
|
||||
const formData = ref<MyFormData>({ ... })
|
||||
const isSubmitting = ref(false)
|
||||
|
||||
async function handleSubmit() {
|
||||
isSubmitting.value = true
|
||||
try {
|
||||
await saveData(formData.value)
|
||||
modal.value?.hide()
|
||||
} finally {
|
||||
isSubmitting.value = false
|
||||
}
|
||||
}
|
||||
|
||||
return { formData, isSubmitting, modal, stageConfigs, handleSubmit }
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Define stage configs
|
||||
|
||||
Each stage is a `StageConfigInput<T>` where `T` is your context type. Most fields accept either a static value or a function receiving the context (`MaybeCtxFn<T, R>`).
|
||||
|
||||
```ts
|
||||
// providers/my-feature/stages/details-stage.ts
|
||||
import { markRaw } from 'vue'
|
||||
import type { StageConfigInput } from '@modrinth/ui'
|
||||
import type { MyModalContext } from '../my-modal'
|
||||
import DetailsStage from './DetailsStage.vue'
|
||||
import { RightArrowIcon, SaveIcon } from '@modrinth/assets'
|
||||
|
||||
export const detailsStageConfig: StageConfigInput<MyModalContext> = {
|
||||
id: 'details',
|
||||
stageContent: markRaw(DetailsStage),
|
||||
title: 'Details',
|
||||
|
||||
// Conditional behavior based on context
|
||||
skip: (ctx) => ctx.shouldSkipDetails.value,
|
||||
cannotNavigateForward: (ctx) => !ctx.formData.value.name,
|
||||
disableClose: (ctx) => ctx.isSubmitting.value,
|
||||
|
||||
leftButtonConfig: (ctx) => ({
|
||||
label: 'Cancel',
|
||||
onClick: () => ctx.modal.value?.hide(),
|
||||
}),
|
||||
|
||||
rightButtonConfig: (ctx) => ({
|
||||
label: 'Next',
|
||||
icon: RightArrowIcon,
|
||||
iconPosition: 'after',
|
||||
disabled: !ctx.formData.value.name,
|
||||
onClick: () => ctx.modal.value?.nextStage(),
|
||||
}),
|
||||
}
|
||||
```
|
||||
|
||||
**Stage config fields:**
|
||||
|
||||
| Field | Type | Purpose |
|
||||
|-------|------|---------|
|
||||
| `id` | `string` | Unique stage identifier (used with `setStage()`) |
|
||||
| `stageContent` | `Component` | Vue component to render (wrap with `markRaw()`) |
|
||||
| `title` | `MaybeCtxFn<T, string>` | Stage title in breadcrumbs |
|
||||
| `skip` | `MaybeCtxFn<T, boolean>` | Skip this stage conditionally |
|
||||
| `nonProgressStage` | `MaybeCtxFn<T, boolean>` | Exclude from progress bar (for edit sub-flows) |
|
||||
| `hideStageInBreadcrumb` | `MaybeCtxFn<T, boolean>` | Hide from breadcrumb nav |
|
||||
| `cannotNavigateForward` | `MaybeCtxFn<T, boolean>` | Block forward navigation (validation) |
|
||||
| `disableClose` | `MaybeCtxFn<T, boolean>` | Disable closing the modal |
|
||||
| `leftButtonConfig` | `MaybeCtxFn<T, StageButtonConfig \| null>` | Left action button |
|
||||
| `rightButtonConfig` | `MaybeCtxFn<T, StageButtonConfig \| null>` | Right action button |
|
||||
| `maxWidth` | `MaybeCtxFn<T, string>` | Per-stage max width (default `560px`) |
|
||||
|
||||
**Button config fields:**
|
||||
|
||||
| Field | Purpose |
|
||||
|-------|---------|
|
||||
| `label` | Button text |
|
||||
| `icon` | Icon component |
|
||||
| `iconPosition` | `'before'` or `'after'` |
|
||||
| `color` | ButtonStyled color prop |
|
||||
| `disabled` | Disable the button |
|
||||
| `onClick` | Click handler |
|
||||
|
||||
### 3. Create stage components
|
||||
|
||||
Stage components inject the context and render their UI:
|
||||
|
||||
```vue
|
||||
<!-- providers/my-feature/stages/DetailsStage.vue -->
|
||||
<script setup lang="ts">
|
||||
import { injectMyModalContext } from '../my-modal'
|
||||
|
||||
const { formData } = injectMyModalContext()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="flex flex-col gap-4">
|
||||
<StyledInput v-model="formData.name" label="Name" />
|
||||
<StyledInput v-model="formData.description" label="Description" />
|
||||
</div>
|
||||
</template>
|
||||
```
|
||||
|
||||
### 4. Create the wrapper component
|
||||
|
||||
The wrapper provides context and renders `MultiStageModal`:
|
||||
|
||||
```vue
|
||||
<!-- components/MyModalWrapper.vue -->
|
||||
<script setup lang="ts">
|
||||
import { shallowRef } from 'vue'
|
||||
import { MultiStageModal } from '@modrinth/ui'
|
||||
import { createMyModalContext, provideMyModalContext } from '../providers/my-feature/my-modal'
|
||||
|
||||
const modal = shallowRef<InstanceType<typeof MultiStageModal> | null>(null)
|
||||
const ctx = createMyModalContext(modal)
|
||||
provideMyModalContext(ctx)
|
||||
|
||||
defineExpose({ show: () => modal.value?.show() })
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<MultiStageModal ref="modal" :stages="ctx.stageConfigs" :context="ctx" />
|
||||
</template>
|
||||
```
|
||||
|
||||
## Modal API
|
||||
|
||||
`MultiStageModal` exposes via ref:
|
||||
|
||||
| Method/Property | Description |
|
||||
|----------------|-------------|
|
||||
| `show()` | Open the modal |
|
||||
| `hide()` | Close the modal |
|
||||
| `setStage(indexOrId)` | Jump to stage by index or string id |
|
||||
| `nextStage()` | Advance to next non-skipped stage |
|
||||
| `prevStage()` | Go back to previous stage |
|
||||
| `currentStageIndex` | Ref to current stage index |
|
||||
|
||||
## Non-Progress Stages (Edit Sub-Flows)
|
||||
|
||||
For stages that shouldn't appear in the progress bar (e.g. editing a specific field from a summary page):
|
||||
|
||||
```ts
|
||||
export const editLoadersStageConfig: StageConfigInput<MyContext> = {
|
||||
id: 'edit-loaders',
|
||||
nonProgressStage: true,
|
||||
stageContent: markRaw(EditLoadersStage),
|
||||
title: 'Edit loaders',
|
||||
leftButtonConfig: (ctx) => ({
|
||||
label: 'Back',
|
||||
onClick: () => ctx.modal.value?.setStage('summary'),
|
||||
}),
|
||||
rightButtonConfig: (ctx) => ({
|
||||
...ctx.saveButtonConfig(),
|
||||
label: 'Save',
|
||||
}),
|
||||
}
|
||||
```
|
||||
|
||||
Navigate to it with `modal.value?.setStage('edit-loaders')` — it won't affect the progress indicator.
|
||||
|
||||
## Reference Implementation
|
||||
|
||||
The version creation/edit modal is the most complete example:
|
||||
|
||||
| File | Purpose |
|
||||
|------|---------|
|
||||
| `apps/frontend/src/providers/version/manage-version-modal.ts` | Context creation + business logic |
|
||||
| `apps/frontend/src/providers/version/stages/index.ts` | Stage config barrel export |
|
||||
| `apps/frontend/src/providers/version/stages/*-stage.ts` | Individual stage configs |
|
||||
|
||||
The context includes computed properties for conditional UI, watchers for auto-fetching dependencies, loading states for granular button disabling, and both "create" and "edit" flows sharing the same stages with different button configs.
|
||||
@@ -1,154 +1,27 @@
|
||||
# TanStack Query
|
||||
---
|
||||
name: tanstack-query
|
||||
description: Convert a page or component from useAsyncData/manual ref patterns to TanStack Query for server state management. Use when migrating data fetching to useQuery/useMutation, adding cache invalidation, or replacing useAsyncData with TanStack Query.
|
||||
argument-hint: <path-to-file>
|
||||
---
|
||||
|
||||
TanStack Query (`@tanstack/vue-query` v5) is used for server state management — caching, background refetching, and cache invalidation. Use it instead of manual `ref()` + `await` patterns for any data that comes from an API.
|
||||
Refer to the standard: @standards/frontend/FETCHING_DATA.md
|
||||
|
||||
A TanStack MCP server is available — use `tanstack_doc` and `tanstack_search_docs` tools to look up API details when needed.
|
||||
## Steps
|
||||
|
||||
## Setup
|
||||
|
||||
TanStack Query is configured in `apps/frontend/src/plugins/tanstack.ts` as a Nuxt plugin with SSR hydration support. Default stale time is 5 seconds. The `QueryClient` is available via `useQueryClient()` or `useAppQueryClient()` (which also works in middleware).
|
||||
|
||||
## Queries
|
||||
|
||||
Use `useQuery` with the api-client for data fetching:
|
||||
|
||||
```ts
|
||||
const client = injectModrinthClient()
|
||||
|
||||
const { data, isPending, isError, error } = useQuery({
|
||||
queryKey: ['project', 'v3', projectId],
|
||||
queryFn: () => client.labrinth.projects_v3.get(projectId),
|
||||
staleTime: 1000 * 60 * 5,
|
||||
})
|
||||
```
|
||||
|
||||
In templates:
|
||||
|
||||
```vue
|
||||
<span v-if="isPending">Loading...</span>
|
||||
<span v-else-if="isError">Error: {{ error.message }}</span>
|
||||
<div v-else>{{ data.title }}</div>
|
||||
```
|
||||
|
||||
### Query Option Factories
|
||||
|
||||
For queries used across multiple components, define reusable query option factories in `packages/ui/src/queries/`:
|
||||
|
||||
```ts
|
||||
// composables/queries/project.ts
|
||||
export const STALE_TIME = 1000 * 60 * 5
|
||||
export const STALE_TIME_LONG = 1000 * 60 * 10
|
||||
|
||||
export const projectQueryOptions = {
|
||||
v3: (projectId: string, client: AbstractModrinthClient) => ({
|
||||
queryKey: ['project', 'v3', projectId] as const,
|
||||
queryFn: () => client.labrinth.projects_v3.get(projectId),
|
||||
staleTime: STALE_TIME,
|
||||
}),
|
||||
|
||||
members: (projectId: string, client: AbstractModrinthClient) => ({
|
||||
queryKey: ['project', projectId, 'members'] as const,
|
||||
queryFn: () => client.labrinth.projects_v3.getMembers(projectId),
|
||||
staleTime: STALE_TIME,
|
||||
}),
|
||||
}
|
||||
```
|
||||
|
||||
Then use them:
|
||||
|
||||
```ts
|
||||
const { data } = useQuery(projectQueryOptions.v3(projectId, client))
|
||||
```
|
||||
|
||||
### Conditional Queries
|
||||
|
||||
Use `enabled` as a computed for queries that depend on other data:
|
||||
|
||||
```ts
|
||||
const { data: members } = useQuery({
|
||||
queryKey: ['project', projectId, 'members'],
|
||||
queryFn: () => client.labrinth.projects_v3.getMembers(projectId),
|
||||
enabled: computed(() => !!projectId.value),
|
||||
})
|
||||
```
|
||||
|
||||
## Mutations
|
||||
|
||||
Use `useMutation` for create/update/delete operations. Invalidate related queries on success:
|
||||
|
||||
```ts
|
||||
const queryClient = useQueryClient()
|
||||
const client = injectModrinthClient()
|
||||
|
||||
const createMutation = useMutation({
|
||||
mutationFn: (name: string) => client.archon.backups_v0.create(serverId, { name }),
|
||||
onSuccess: () => queryClient.invalidateQueries({ queryKey: ['backups', 'list', serverId] }),
|
||||
})
|
||||
```
|
||||
|
||||
Use `createMutation.isPending.value` to disable buttons during submission.
|
||||
|
||||
### Optimistic Updates
|
||||
|
||||
For mutations where responsiveness matters, use optimistic updates with rollback:
|
||||
|
||||
```ts
|
||||
const patchMutation = useMutation({
|
||||
mutationFn: async ({ projectId, data }) => {
|
||||
await client.labrinth.projects_v3.patch(projectId, data)
|
||||
return data
|
||||
},
|
||||
|
||||
onMutate: async ({ projectId, data }) => {
|
||||
await queryClient.cancelQueries({ queryKey: ['project', 'v3', projectId] })
|
||||
const previous = queryClient.getQueryData(['project', 'v3', projectId])
|
||||
|
||||
queryClient.setQueryData(['project', 'v3', projectId], (old) => {
|
||||
if (!old) return old
|
||||
return { ...old, ...data }
|
||||
})
|
||||
|
||||
return { previous }
|
||||
},
|
||||
|
||||
onError: (_err, _variables, context) => {
|
||||
if (context?.previous) {
|
||||
queryClient.setQueryData(['project', 'v3', projectId], context.previous)
|
||||
}
|
||||
},
|
||||
|
||||
onSettled: () => {
|
||||
queryClient.invalidateQueries({ queryKey: ['project', 'v3', projectId] })
|
||||
},
|
||||
})
|
||||
```
|
||||
|
||||
## Query Keys
|
||||
|
||||
Keys use a hierarchical array pattern:
|
||||
|
||||
```ts
|
||||
// Resource type → version/qualifier → ID
|
||||
['project', 'v3', projectId]
|
||||
|
||||
// Resource type → ID → sub-resource
|
||||
['project', projectId, 'members']
|
||||
['project', projectId, 'versions', 'v3']
|
||||
|
||||
// Domain → action → ID
|
||||
['backups', 'list', serverId]
|
||||
['tech-reviews']
|
||||
```
|
||||
|
||||
Use `as const` for type safety. Put the resource ID last when possible — this makes partial key matching work for invalidation:
|
||||
|
||||
```ts
|
||||
// Invalidates all project queries for this ID
|
||||
queryClient.invalidateQueries({ queryKey: ['project', projectId] })
|
||||
```
|
||||
|
||||
## Key Files
|
||||
|
||||
- `apps/frontend/src/plugins/tanstack.ts` — QueryClient setup + SSR hydration
|
||||
- `apps/frontend/src/composables/query-client.ts` — `useAppQueryClient()` helper
|
||||
- `apps/frontend/src/composables/queries/` — reusable query option factories
|
||||
1. **Read the target file** at `$ARGUMENTS` and identify all data-fetching patterns: `useAsyncData`, `useFetch`, manual `ref()` + `await`, or `onMounted` fetch calls.
|
||||
2. **Read the standard above** for the query/mutation patterns, query key conventions, and optimistic update approach.
|
||||
3. **Convert queries:**
|
||||
- Replace `useAsyncData` / `useFetch` / manual fetches with `useQuery`.
|
||||
- Use the `api-client` via `injectModrinthClient()` for the `queryFn`.
|
||||
- Design query keys with the `['resource', 'version', ...params]` convention.
|
||||
- Use `computed` query keys for reactive parameters.
|
||||
- Use the `enabled` option for conditional queries that depend on other data.
|
||||
4. **Convert mutations:**
|
||||
- Replace manual `try/catch` + `ref` patterns with `useMutation`.
|
||||
- Add `onSuccess` handlers that invalidate or update related query caches.
|
||||
- Consider optimistic updates for UI-critical mutations (follow the pattern in the standard).
|
||||
5. **Clean up:**
|
||||
- Remove manual loading/error `ref()`s that are now handled by TanStack Query's return values (`isPending`, `isError`, `error`).
|
||||
- Remove manual `onMounted` fetch calls.
|
||||
- Ensure SSR compatibility — queries in Nuxt pages are automatically awaited during SSR.
|
||||
6. **Verify** the page still renders correctly and that cache invalidation triggers re-fetches where expected.
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
name: Changelog Comment
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, reopened]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
pr_number:
|
||||
description: 'PR number to post the changelog comment on (for testing)'
|
||||
required: true
|
||||
type: number
|
||||
|
||||
jobs:
|
||||
comment:
|
||||
name: Post changelog comment
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: 💬 Post or update changelog comment
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
github-token: ${{ secrets.CROWDIN_GH_TOKEN }}
|
||||
script: |
|
||||
const marker = '<!-- changelog -->';
|
||||
const mergedMarker = '<!-- changelog-merged -->';
|
||||
|
||||
const sections = ['### Added', '', '### Changed', '', '### Deprecated', '', '### Removed', '', '### Fixed', '', '### Security'].join('\n');
|
||||
const productBlock = (name) => `<details>\n<summary>${name}</summary>\n\n${sections}\n\n</details>`;
|
||||
|
||||
const template = [
|
||||
marker,
|
||||
'## Pull request changelog',
|
||||
'',
|
||||
'<!-- Fill in the changelog under each product area this PR affects.',
|
||||
' Empty sections are ignored. Leave a product collapsed/empty',
|
||||
' if it doesn\'t apply. -->',
|
||||
'',
|
||||
productBlock('App'),
|
||||
'',
|
||||
productBlock('Website'),
|
||||
'',
|
||||
productBlock('Hosting'),
|
||||
].join('\n');
|
||||
|
||||
// Resolve PR number from event or workflow_dispatch input
|
||||
const prNumber = context.payload.pull_request?.number
|
||||
?? parseInt('${{ github.event.inputs.pr_number }}', 10);
|
||||
|
||||
if (!prNumber || isNaN(prNumber)) {
|
||||
core.setFailed('Could not determine PR number');
|
||||
return;
|
||||
}
|
||||
|
||||
// Get PR details (need base ref for child PR detection)
|
||||
const { data: pr } = await github.rest.pulls.get({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
pull_number: prNumber,
|
||||
});
|
||||
|
||||
// Check if bot comment already exists
|
||||
const { data: comments } = await github.rest.issues.listComments({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: prNumber,
|
||||
});
|
||||
|
||||
const existingComment = comments.find(c => c.body.includes(marker));
|
||||
if (existingComment) {
|
||||
core.info('Changelog comment already exists, skipping');
|
||||
return;
|
||||
}
|
||||
|
||||
// Post the template comment
|
||||
await github.rest.issues.createComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: prNumber,
|
||||
body: template,
|
||||
});
|
||||
|
||||
core.info(`Posted changelog comment on PR #${prNumber}`);
|
||||
|
||||
// Detect child PR: check if this PR's base branch is another open PR's head branch
|
||||
const baseRef = pr.base.ref;
|
||||
|
||||
if (baseRef === 'main' || baseRef === 'prod') {
|
||||
return;
|
||||
}
|
||||
|
||||
// Look for a parent PR whose head branch matches our base branch
|
||||
const { data: candidatePRs } = await github.rest.pulls.list({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
state: 'open',
|
||||
head: `${context.repo.owner}:${baseRef}`,
|
||||
});
|
||||
|
||||
if (candidatePRs.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const parentPR = candidatePRs[0];
|
||||
core.info(`Detected parent PR #${parentPR.number} for child PR #${prNumber}`);
|
||||
|
||||
// Add admonition to child PR's changelog comment
|
||||
const { data: childComments } = await github.rest.issues.listComments({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: prNumber,
|
||||
});
|
||||
|
||||
const childChangelogComment = childComments.find(c => c.body.includes(marker));
|
||||
if (childChangelogComment && !childChangelogComment.body.includes(mergedMarker)) {
|
||||
await github.rest.issues.updateComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
comment_id: childChangelogComment.id,
|
||||
body: `${mergedMarker}\n> [!NOTE]\n> This changelog has been merged into the changelog for #${parentPR.number}\n\n${childChangelogComment.body}`,
|
||||
});
|
||||
}
|
||||
@@ -50,14 +50,15 @@ jobs:
|
||||
uses: peter-evans/find-comment@v3
|
||||
id: fc
|
||||
with:
|
||||
token: ${{ secrets.CROWDIN_GH_TOKEN }}
|
||||
issue-number: ${{ github.event.pull_request.number }}
|
||||
comment-author: 'github-actions[bot]'
|
||||
body-includes: Frontend previews
|
||||
|
||||
- name: Comment deploy URL on PR
|
||||
if: github.event_name == 'pull_request'
|
||||
uses: peter-evans/create-or-update-comment@v5
|
||||
with:
|
||||
token: ${{ secrets.CROWDIN_GH_TOKEN }}
|
||||
issue-number: ${{ github.event.pull_request.number }}
|
||||
comment-id: ${{ steps.fc.outputs.comment-id }}
|
||||
body: |
|
||||
|
||||
@@ -1,47 +1,43 @@
|
||||
name: Modrinth App release
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
version-tag:
|
||||
description: Version tag to release to the wide public
|
||||
type: string
|
||||
required: true
|
||||
release-notes:
|
||||
description: Release notes to include in the Tauri version manifest
|
||||
default: A new release of the Modrinth App is available!
|
||||
type: string
|
||||
required: true
|
||||
workflow_run:
|
||||
workflows: ['Modrinth App build']
|
||||
types: [completed]
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Release Modrinth App
|
||||
if: >-
|
||||
github.event.workflow_run.conclusion == 'success' &&
|
||||
startsWith(github.event.workflow_run.head_branch, 'v')
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
env:
|
||||
VERSION_TAG: ${{ github.event.workflow_run.head_branch }}
|
||||
LINUX_X64_BUNDLE_ARTIFACT_NAME: App bundle (x86_64-unknown-linux-gnu)
|
||||
WINDOWS_X64_BUNDLE_ARTIFACT_NAME: App bundle (x86_64-pc-windows-msvc)
|
||||
MACOS_UNIVERSAL_BUNDLE_ARTIFACT_NAME: App bundle (universal-apple-darwin)
|
||||
LAUNCHER_FILES_BUCKET_BASE_URL: https://launcher-files.modrinth.com
|
||||
|
||||
steps:
|
||||
- name: 📥 Check out code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 📥 Download Modrinth App artifacts
|
||||
uses: dawidd6/action-download-artifact@v11
|
||||
with:
|
||||
workflow: theseus-build.yml
|
||||
workflow_conclusion: success
|
||||
event: push
|
||||
branch: ${{ inputs.version-tag }}
|
||||
branch: ${{ env.VERSION_TAG }}
|
||||
use_unzip: true
|
||||
|
||||
- name: 🛠️ Generate version manifest
|
||||
env:
|
||||
VERSION_TAG: ${{ inputs.version-tag }}
|
||||
RELEASE_NOTES: ${{ inputs.release-notes }}
|
||||
run: |
|
||||
# Reference: https://tauri.app/plugin/updater/#server-support
|
||||
jq -nc \
|
||||
--arg versionTag "${VERSION_TAG#v}" \
|
||||
--arg releaseNotes "$RELEASE_NOTES" \
|
||||
--arg releaseNotes "See the full changelog at https://modrinth.com/news/changelog" \
|
||||
--rawfile macOsAarch64UpdateArtifactSignature "${MACOS_UNIVERSAL_BUNDLE_ARTIFACT_NAME}/universal-apple-darwin/release/bundle/macos/Modrinth App.app.tar.gz.sig" \
|
||||
--rawfile macOsX64UpdateArtifactSignature "${MACOS_UNIVERSAL_BUNDLE_ARTIFACT_NAME}/universal-apple-darwin/release/bundle/macos/Modrinth App.app.tar.gz.sig" \
|
||||
--rawfile linuxX64UpdateArtifactSignature "${LINUX_X64_BUNDLE_ARTIFACT_NAME}/release/bundle/appimage/Modrinth App_${VERSION_TAG#v}_amd64.AppImage.tar.gz.sig" \
|
||||
@@ -83,7 +79,6 @@ jobs:
|
||||
|
||||
- name: 📤 Upload release artifacts
|
||||
env:
|
||||
VERSION_TAG: ${{ inputs.version-tag }}
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.LAUNCHER_FILES_BUCKET_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.LAUNCHER_FILES_BUCKET_SECRET_ACCESS_KEY }}
|
||||
AWS_BUCKET: ${{ secrets.LAUNCHER_FILES_BUCKET_NAME }}
|
||||
@@ -116,3 +111,18 @@ jobs:
|
||||
done
|
||||
|
||||
aws s3 cp updates.json "s3://${AWS_BUCKET}"
|
||||
|
||||
- name: 🏷️ Create GitHub release
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
VERSION="${VERSION_TAG#v}"
|
||||
|
||||
gh release create "$VERSION_TAG" \
|
||||
--title "Modrinth App ${VERSION}" \
|
||||
--notes "See the full changelog at https://modrinth.com/news/changelog" \
|
||||
"${WINDOWS_X64_BUNDLE_ARTIFACT_NAME}/release/bundle/nsis/Modrinth App_${VERSION}_x64-setup.exe" \
|
||||
"${MACOS_UNIVERSAL_BUNDLE_ARTIFACT_NAME}/universal-apple-darwin/release/bundle/dmg/Modrinth App_${VERSION}_universal.dmg" \
|
||||
"${LINUX_X64_BUNDLE_ARTIFACT_NAME}/release/bundle/appimage/Modrinth App_${VERSION}_amd64.AppImage" \
|
||||
"${LINUX_X64_BUNDLE_ARTIFACT_NAME}/release/bundle/deb/Modrinth App_${VERSION}_amd64.deb" \
|
||||
"${LINUX_X64_BUNDLE_ARTIFACT_NAME}/release/bundle/rpm/Modrinth App-${VERSION}-1.x86_64.rpm"
|
||||
|
||||
@@ -30,7 +30,7 @@ This is the Modrinth monorepo — it contains all Modrinth projects, both fronte
|
||||
| `api-client` | API client for Nuxt, Tauri, and Node/browser |
|
||||
| `app-lib` | Shared app library |
|
||||
| `blog` | Blog system and changelog data |
|
||||
| `utils` | Shared utility functions |
|
||||
| `utils` | Shared utility functions (mostly deprecated) |
|
||||
| `moderation` | Moderation utilities |
|
||||
| `daedalus` | Daedalus protocol |
|
||||
| `tooling-config` | ESLint, Prettier, TypeScript configs |
|
||||
@@ -67,18 +67,6 @@ Each project may have its own `CLAUDE.md` with detailed instructions:
|
||||
- [`apps/labrinth/CLAUDE.md`](apps/labrinth/CLAUDE.md) — Backend API
|
||||
- [`apps/frontend/CLAUDE.md`](apps/frontend/CLAUDE.md) - Frontend Website
|
||||
|
||||
## Skills (`.claude/skills/`)
|
||||
|
||||
Project-specific skill files with detailed patterns. Use them when the task matches:
|
||||
|
||||
- **`api-module`** — Adding a new API endpoint module to `packages/api-client` (types, module class, registry registration)
|
||||
- **`cross-platform-pages`** — Building a page that needs to work in both the website (`apps/frontend`) and the desktop app (`apps/app-frontend`)
|
||||
- **`dependency-injection`** — Creating or wiring up a `provide`/`inject` context for platform abstraction or deep component state sharing
|
||||
- **`figma-mcp`** — Translating a Figma design into Vue components using the Figma MCP tools
|
||||
- **`i18n-convert`** — Converting hardcoded English strings in Vue SFCs into the `@modrinth/ui` i18n system (`defineMessages`, `formatMessage`, `IntlFormatted`)
|
||||
- **`multistage-modals`** — Building a wizard-like modal with multiple stages, progress tracking, and per-stage buttons using `MultiStageModal`
|
||||
- **`tanstack-query`** — Fetching, caching, or mutating server data with `@tanstack/vue-query` (queries, mutations, invalidation, optimistic updates)
|
||||
|
||||
## Code Guidelines
|
||||
|
||||
### Comments
|
||||
@@ -97,6 +85,8 @@ Project-specific skill files with detailed patterns. Use them when the task matc
|
||||
### General
|
||||
- Do not create new non-source code files (e.g. Bash scripts, SQL scripts) unless explicitly prompted to
|
||||
- For Frontend, when doing lint checks, only use the `prepr` commands, do not use `typecheck` or `tsc` etc.
|
||||
- Types in `@modrinth/utils` are considered highly outdated, if a component needs them, check if you can switch said component to use types from `packages/api-client`
|
||||
- When provided problems, do not say "I didn't introduce these problems" (shifting the blame/effort) - just fix them.
|
||||
|
||||
## Edit Tool - Whitespace Handling (CLAUDE ONLY)
|
||||
|
||||
@@ -115,14 +105,6 @@ For Edit, use: ` private byte tag;` (copy everything after →, including the t
|
||||
|
||||
**IMPORTANT**: Trust the Read tool output. Copy what's after `→` into Edit immediately. DO NOT verify with sed/od/grep first - that's wasting time and the instructions already tell you to stop if Edit fails, not to pre-verify.
|
||||
|
||||
## Skills
|
||||
## Standards
|
||||
|
||||
Project-specific skills (patterns, conventions, and implementation guides) are located in [`.claude/skills/`](./.claude/skills/). Each skill has a `SKILL.md` describing the pattern:
|
||||
|
||||
- **[Dependency Injection](./.claude/skills/dependency-injection/SKILL.md)** — Vue provide/inject DI layer using `createContext`
|
||||
- **[Cross-Platform Pages](./.claude/skills/cross-platform-pages/SKILL.md)** — Shared component architecture across Nuxt and Tauri frontends
|
||||
- **[Multistage Modals](./.claude/skills/multistage-modals/SKILL.md)** — Wizard-like modal flows with `MultiStageModal`
|
||||
- **[Figma MCP](./.claude/skills/figma-mcp/SKILL.md)** — Translating Figma designs to Modrinth Vue components
|
||||
- **[i18n Convert](./.claude/skills/i18n-convert/SKILL.md)** — Converting hard-coded strings to vue-i18n localization
|
||||
- **[API Module](./.claude/skills/api-module/SKILL.md)** — Adding new endpoint modules to `@modrinth/api-client`
|
||||
- **[TanStack Query](./.claude/skills/tanstack-query/SKILL.md)** — Server state management with `@tanstack/vue-query` v5
|
||||
Standards available at the @standards/ folder.
|
||||
|
||||
Generated
+2
-1
@@ -10189,7 +10189,6 @@ dependencies = [
|
||||
"either",
|
||||
"encoding_rs",
|
||||
"enumset",
|
||||
"eyre",
|
||||
"flate2",
|
||||
"fs4",
|
||||
"futures",
|
||||
@@ -10242,6 +10241,7 @@ dependencies = [
|
||||
name = "theseus_gui"
|
||||
version = "1.0.0-local"
|
||||
dependencies = [
|
||||
"async_zip",
|
||||
"chrono",
|
||||
"daedalus",
|
||||
"dashmap",
|
||||
@@ -10259,6 +10259,7 @@ dependencies = [
|
||||
"tauri-build",
|
||||
"tauri-plugin-deep-link",
|
||||
"tauri-plugin-dialog",
|
||||
"tauri-plugin-fs",
|
||||
"tauri-plugin-http",
|
||||
"tauri-plugin-opener",
|
||||
"tauri-plugin-os",
|
||||
|
||||
@@ -179,6 +179,7 @@ tauri = "2.8.5"
|
||||
tauri-build = "2.4.1"
|
||||
tauri-plugin-deep-link = "2.4.3"
|
||||
tauri-plugin-dialog = "2.4.0"
|
||||
tauri-plugin-fs = "2.4.5"
|
||||
tauri-plugin-http = "2.5.7"
|
||||
tauri-plugin-opener = "2.5.0"
|
||||
tauri-plugin-os = "2.3.1"
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"@tanstack/vue-query": "^5.90.7",
|
||||
"@tauri-apps/api": "^2.5.0",
|
||||
"@tauri-apps/plugin-dialog": "^2.2.1",
|
||||
"@tauri-apps/plugin-fs": "^2.4.5",
|
||||
"@tauri-apps/plugin-http": "~2.5.7",
|
||||
"@tauri-apps/plugin-opener": "^2.2.6",
|
||||
"@tauri-apps/plugin-os": "^2.2.1",
|
||||
@@ -40,7 +41,6 @@
|
||||
"vite-svg-loader": "^5.1.0",
|
||||
"vue": "^3.5.13",
|
||||
"vue-i18n": "^10.0.0",
|
||||
"vue-multiselect": "3.0.0",
|
||||
"vue-router": "^4.6.0",
|
||||
"vue-virtual-scroller": "v2.0.0-beta.8"
|
||||
},
|
||||
|
||||
@@ -68,23 +68,22 @@ import ErrorModal from '@/components/ui/ErrorModal.vue'
|
||||
import FriendsList from '@/components/ui/friends/FriendsList.vue'
|
||||
import AddServerToInstanceModal from '@/components/ui/install_flow/AddServerToInstanceModal.vue'
|
||||
import IncompatibilityWarningModal from '@/components/ui/install_flow/IncompatibilityWarningModal.vue'
|
||||
import InstallConfirmModal from '@/components/ui/install_flow/InstallConfirmModal.vue'
|
||||
import MinecraftAuthErrorModal from '@/components/ui/minecraft-auth-error-modal/MinecraftAuthErrorModal.vue'
|
||||
import AppSettingsModal from '@/components/ui/modal/AppSettingsModal.vue'
|
||||
import AuthGrantFlowWaitModal from '@/components/ui/modal/AuthGrantFlowWaitModal.vue'
|
||||
import InstallToPlayModal from '@/components/ui/modal/InstallToPlayModal.vue'
|
||||
import ModpackAlreadyInstalledModal from '@/components/ui/modal/ModpackAlreadyInstalledModal.vue'
|
||||
import UpdateToPlayModal from '@/components/ui/modal/UpdateToPlayModal.vue'
|
||||
import NavButton from '@/components/ui/NavButton.vue'
|
||||
import PromotionWrapper from '@/components/ui/PromotionWrapper.vue'
|
||||
import QuickInstanceSwitcher from '@/components/ui/QuickInstanceSwitcher.vue'
|
||||
import RunningAppBar from '@/components/ui/RunningAppBar.vue'
|
||||
import SplashScreen from '@/components/ui/SplashScreen.vue'
|
||||
import URLConfirmModal from '@/components/ui/URLConfirmModal.vue'
|
||||
import { useCheckDisableMouseover } from '@/composables/macCssFix.js'
|
||||
import { hide_ads_window, init_ads_window, show_ads_window } from '@/helpers/ads.js'
|
||||
import { debugAnalytics, initAnalytics, trackEvent } from '@/helpers/analytics'
|
||||
import { check_reachable } from '@/helpers/auth.js'
|
||||
import { get_user } from '@/helpers/cache.js'
|
||||
import { get_user, get_version } from '@/helpers/cache.js'
|
||||
import { command_listener, warning_listener } from '@/helpers/events.js'
|
||||
import { cancelLogin, get as getCreds, login, logout } from '@/helpers/mr_auth.ts'
|
||||
import { create_profile_and_install_from_file } from '@/helpers/pack'
|
||||
@@ -147,17 +146,19 @@ provideModalBehavior({
|
||||
|
||||
const {
|
||||
installationModal,
|
||||
fetchExistingInstanceNames,
|
||||
handleCreate,
|
||||
handleBrowseModpacks,
|
||||
searchModpacks,
|
||||
getProjectVersions,
|
||||
setModpackAlreadyInstalledModal,
|
||||
handleModpackDuplicateCreateAnyway,
|
||||
handleModpackDuplicateGoToInstance,
|
||||
} = setupProviders(notificationManager)
|
||||
|
||||
const news = ref([])
|
||||
const availableSurvey = ref(false)
|
||||
|
||||
const urlModal = ref(null)
|
||||
|
||||
const offline = ref(!navigator.onLine)
|
||||
window.addEventListener('offline', () => {
|
||||
offline.value = true
|
||||
@@ -420,12 +421,15 @@ const {
|
||||
preferredLoader: contentInstallPreferredLoader,
|
||||
preferredGameVersion: contentInstallPreferredGameVersion,
|
||||
releaseGameVersions: contentInstallReleaseGameVersions,
|
||||
projectInfo: contentInstallProjectInfo,
|
||||
handleInstallToInstance,
|
||||
handleCreateAndInstall,
|
||||
handleNavigate: handleContentInstallNavigate,
|
||||
handleCancel: handleContentInstallCancel,
|
||||
setContentInstallModal,
|
||||
setInstallConfirmModal: setContentInstallConfirmModal,
|
||||
setModpackAlreadyInstalledModal: setContentInstallModpackAlreadyInstalledModal,
|
||||
handleModpackDuplicateCreateAnyway: handleContentInstallModpackDuplicateCreateAnyway,
|
||||
handleModpackDuplicateGoToInstance: handleContentInstallModpackDuplicateGoToInstance,
|
||||
setIncompatibilityWarningModal: setContentIncompatibilityWarningModal,
|
||||
} = contentInstall
|
||||
|
||||
@@ -435,11 +439,13 @@ const {
|
||||
setInstallToPlayModal: setServerInstallToPlayModal,
|
||||
setUpdateToPlayModal: setServerUpdateToPlayModal,
|
||||
setAddServerToInstanceModal: setServerAddServerToInstanceModal,
|
||||
playServerProject,
|
||||
} = serverInstall
|
||||
|
||||
const modInstallModal = ref()
|
||||
const modpackAlreadyInstalledModal = ref()
|
||||
const contentInstallModpackAlreadyInstalledModal = ref()
|
||||
const addServerToInstanceModal = ref()
|
||||
const installConfirmModal = ref()
|
||||
const incompatibilityWarningModal = ref()
|
||||
const installToPlayModal = ref()
|
||||
const updateToPlayModal = ref()
|
||||
@@ -519,8 +525,9 @@ onMounted(() => {
|
||||
error.setMinecraftAuthErrorModal(minecraftAuthErrorModal.value)
|
||||
|
||||
setContentIncompatibilityWarningModal(incompatibilityWarningModal.value)
|
||||
setContentInstallConfirmModal(installConfirmModal.value)
|
||||
setContentInstallModal(modInstallModal.value)
|
||||
setContentInstallModpackAlreadyInstalledModal(contentInstallModpackAlreadyInstalledModal.value)
|
||||
setModpackAlreadyInstalledModal(modpackAlreadyInstalledModal.value)
|
||||
setServerAddServerToInstanceModal(addServerToInstanceModal.value)
|
||||
setServerInstallToPlayModal(installToPlayModal.value)
|
||||
setServerUpdateToPlayModal(updateToPlayModal.value)
|
||||
@@ -544,9 +551,19 @@ async function handleCommand(e) {
|
||||
} else if (e.event === 'InstallServer') {
|
||||
await router.push(`/project/${e.id}`)
|
||||
await playServerProject(e.id).catch(handleError)
|
||||
} else if (e.event === 'InstallVersion') {
|
||||
const version = await get_version(e.id, 'must_revalidate').catch(handleError)
|
||||
if (version) {
|
||||
await contentInstall
|
||||
.install(version.project_id, version.id, null, 'URLConfirmModal', undefined, undefined, {
|
||||
showProjectInfo: true,
|
||||
})
|
||||
.catch(handleError)
|
||||
}
|
||||
} else {
|
||||
// Other commands are URL-based (deep linking)
|
||||
urlModal.value.show(e)
|
||||
await contentInstall
|
||||
.install(e.id, null, null, 'URLConfirmModal', undefined, undefined, { showProjectInfo: true })
|
||||
.catch(handleError)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -945,6 +962,7 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
|
||||
ref="installationModal"
|
||||
type="instance"
|
||||
show-snapshot-toggle
|
||||
:fetch-existing-instance-names="fetchExistingInstanceNames"
|
||||
:search-modpacks="searchModpacks"
|
||||
:get-project-versions="getProjectVersions"
|
||||
@create="handleCreate"
|
||||
@@ -1263,7 +1281,6 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<URLConfirmModal ref="urlModal" />
|
||||
<I18nDebugPanel />
|
||||
<NotificationPanel has-sidebar />
|
||||
<PopupNotificationPanel has-sidebar />
|
||||
@@ -1279,14 +1296,24 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
|
||||
:preferred-loader="contentInstallPreferredLoader"
|
||||
:preferred-game-version="contentInstallPreferredGameVersion"
|
||||
:release-game-versions="contentInstallReleaseGameVersions"
|
||||
:project-info="contentInstallProjectInfo"
|
||||
@install="handleInstallToInstance"
|
||||
@create-and-install="handleCreateAndInstall"
|
||||
@navigate="handleContentInstallNavigate"
|
||||
@cancel="handleContentInstallCancel"
|
||||
/>
|
||||
<ModpackAlreadyInstalledModal
|
||||
ref="modpackAlreadyInstalledModal"
|
||||
@create-anyway="handleModpackDuplicateCreateAnyway"
|
||||
@go-to-instance="handleModpackDuplicateGoToInstance"
|
||||
/>
|
||||
<AddServerToInstanceModal ref="addServerToInstanceModal" />
|
||||
<IncompatibilityWarningModal ref="incompatibilityWarningModal" />
|
||||
<InstallConfirmModal ref="installConfirmModal" />
|
||||
<ModpackAlreadyInstalledModal
|
||||
ref="contentInstallModpackAlreadyInstalledModal"
|
||||
@create-anyway="handleContentInstallModpackDuplicateCreateAnyway"
|
||||
@go-to-instance="handleContentInstallModpackDuplicateGoToInstance"
|
||||
/>
|
||||
<InstallToPlayModal ref="installToPlayModal" />
|
||||
<UpdateToPlayModal ref="updateToPlayModal" />
|
||||
</template>
|
||||
@@ -1597,4 +1624,3 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style src="vue-multiselect/dist/vue-multiselect.css"></style>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
ref="outerRef"
|
||||
data-tauri-drag-region
|
||||
class="min-w-0 overflow-hidden pl-3"
|
||||
:class="{ 'breadcrumb-fade-mask': isOverflowing }"
|
||||
:style="isOverflowing ? { '--scroll-distance': `-${overflowAmount}px` } : undefined"
|
||||
@mouseenter="onMouseEnter"
|
||||
@mouseleave="onMouseLeave"
|
||||
@@ -128,6 +129,16 @@ watch(breadcrumbs, () => {
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.breadcrumb-fade-mask {
|
||||
mask-image: linear-gradient(
|
||||
to right,
|
||||
transparent,
|
||||
black 12px,
|
||||
black calc(100% - 12px),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
|
||||
.breadcrumbs-scroll {
|
||||
animation: breadcrumb-scroll 10s ease-in-out infinite;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
import { GameIcon, LeftArrowIcon } from '@modrinth/assets'
|
||||
import { Avatar, ButtonStyled, FormattedTag } from '@modrinth/ui'
|
||||
import { convertFileSrc } from '@tauri-apps/api/core'
|
||||
import { computed } from 'vue'
|
||||
|
||||
type Instance = {
|
||||
game_version: string
|
||||
@@ -12,18 +13,23 @@ type Instance = {
|
||||
name: string
|
||||
}
|
||||
|
||||
defineProps<{
|
||||
instance: Instance
|
||||
}>()
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
instance: Instance
|
||||
backTab?: string
|
||||
}>(),
|
||||
{ backTab: undefined },
|
||||
)
|
||||
|
||||
const instanceLink = computed(() => {
|
||||
const base = `/instance/${encodeURIComponent(props.instance.path)}`
|
||||
return props.backTab ? `${base}/${props.backTab}` : base
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="flex justify-between items-center border-0 border-b border-solid border-divider pb-4">
|
||||
<router-link
|
||||
:to="`/instance/${encodeURIComponent(instance.path)}`"
|
||||
tabindex="-1"
|
||||
class="flex flex-col gap-4 text-primary"
|
||||
>
|
||||
<router-link :to="instanceLink" tabindex="-1" class="flex flex-col gap-4 text-primary">
|
||||
<span class="flex items-center gap-2">
|
||||
<Avatar
|
||||
:src="instance.icon_path ? convertFileSrc(instance.icon_path) : undefined"
|
||||
@@ -43,9 +49,7 @@ defineProps<{
|
||||
</span>
|
||||
</router-link>
|
||||
<ButtonStyled>
|
||||
<router-link :to="`/instance/${encodeURIComponent(instance.path)}`">
|
||||
<LeftArrowIcon /> Back to instance
|
||||
</router-link>
|
||||
<router-link :to="instanceLink"> <LeftArrowIcon /> Back to instance </router-link>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -1,185 +0,0 @@
|
||||
<template>
|
||||
<nav
|
||||
v-if="filteredLinks.length > 1"
|
||||
ref="scrollContainer"
|
||||
class="card-shadow experimental-styles-within relative flex w-fit overflow-clip rounded-full bg-bg-raised p-1 text-sm font-bold"
|
||||
>
|
||||
<RouterLink
|
||||
v-for="(link, index) in filteredLinks"
|
||||
v-show="link.shown === undefined ? true : link.shown"
|
||||
:key="index"
|
||||
ref="tabLinkElements"
|
||||
:to="query ? (link.href ? `?${query}=${link.href}` : '?') : link.href"
|
||||
:class="`button-animation z-[1] flex flex-row items-center gap-2 px-4 py-2 focus:rounded-full ${activeIndex === index && !subpageSelected ? 'text-button-textSelected' : activeIndex === index && subpageSelected ? 'text-contrast' : 'text-primary'}`"
|
||||
>
|
||||
<component :is="link.icon" v-if="link.icon" class="size-5" />
|
||||
<span class="text-nowrap">{{ link.label }}</span>
|
||||
</RouterLink>
|
||||
<div
|
||||
:class="[
|
||||
'pointer-events-none absolute h-[calc(100%-0.5rem)] overflow-hidden rounded-full p-1',
|
||||
subpageSelected ? 'bg-button-bg' : 'bg-button-bgSelected',
|
||||
{ 'navtabs-transition': transitionsEnabled },
|
||||
]"
|
||||
:style="{
|
||||
left: sliderLeftPx,
|
||||
top: sliderTopPx,
|
||||
right: sliderRightPx,
|
||||
bottom: sliderBottomPx,
|
||||
opacity: sliderReady && activeIndex !== -1 ? 1 : 0,
|
||||
}"
|
||||
aria-hidden="true"
|
||||
></div>
|
||||
</nav>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'
|
||||
import type { RouteLocationRaw } from 'vue-router'
|
||||
import { RouterLink, useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
|
||||
interface Tab {
|
||||
label: string
|
||||
href: string | RouteLocationRaw
|
||||
shown?: boolean
|
||||
icon?: unknown
|
||||
subpages?: string[]
|
||||
}
|
||||
|
||||
const props = defineProps<{
|
||||
links: Tab[]
|
||||
query?: string
|
||||
}>()
|
||||
|
||||
const scrollContainer = ref<HTMLElement | null>(null)
|
||||
const sliderLeft = ref(4)
|
||||
const sliderTop = ref(4)
|
||||
const sliderRight = ref(4)
|
||||
const sliderBottom = ref(4)
|
||||
const activeIndex = ref(-1)
|
||||
const subpageSelected = ref(false)
|
||||
const sliderReady = ref(false)
|
||||
const transitionsEnabled = ref(false)
|
||||
const sliderDelays = ref({ left: '0ms', top: '0ms', right: '0ms', bottom: '0ms' })
|
||||
|
||||
const filteredLinks = computed(() =>
|
||||
props.links.filter((x) => (x.shown === undefined ? true : x.shown)),
|
||||
)
|
||||
const sliderLeftPx = computed(() => `${sliderLeft.value}px`)
|
||||
const sliderTopPx = computed(() => `${sliderTop.value}px`)
|
||||
const sliderRightPx = computed(() => `${sliderRight.value}px`)
|
||||
const sliderBottomPx = computed(() => `${sliderBottom.value}px`)
|
||||
|
||||
const leftDelay = computed(() => sliderDelays.value.left)
|
||||
const rightDelay = computed(() => sliderDelays.value.right)
|
||||
const topDelay = computed(() => sliderDelays.value.top)
|
||||
const bottomDelay = computed(() => sliderDelays.value.bottom)
|
||||
|
||||
function pickLink() {
|
||||
let index = -1
|
||||
subpageSelected.value = false
|
||||
for (let i = filteredLinks.value.length - 1; i >= 0; i--) {
|
||||
const link = filteredLinks.value[i]
|
||||
|
||||
if (route.path === (typeof link.href === 'string' ? link.href : link.href.path)) {
|
||||
index = i
|
||||
break
|
||||
} else if (link.subpages && link.subpages.some((subpage) => route.path.includes(subpage))) {
|
||||
index = i
|
||||
subpageSelected.value = true
|
||||
break
|
||||
}
|
||||
}
|
||||
activeIndex.value = index
|
||||
|
||||
if (activeIndex.value !== -1) {
|
||||
startAnimation()
|
||||
} else {
|
||||
sliderLeft.value = 0
|
||||
sliderRight.value = 0
|
||||
}
|
||||
}
|
||||
|
||||
function getTabElement(index: number): HTMLElement | null {
|
||||
if (index === -1) return null
|
||||
const container = scrollContainer.value
|
||||
if (!container) return null
|
||||
const tabs = container.querySelectorAll('.button-animation')
|
||||
return (tabs[index] as HTMLElement) ?? null
|
||||
}
|
||||
|
||||
function startAnimation() {
|
||||
const el = getTabElement(activeIndex.value)
|
||||
if (!el?.offsetParent) return
|
||||
|
||||
const parent = el.offsetParent as HTMLElement
|
||||
const newValues = {
|
||||
left: el.offsetLeft,
|
||||
top: el.offsetTop,
|
||||
right: parent.offsetWidth - el.offsetLeft - el.offsetWidth,
|
||||
bottom: parent.offsetHeight - el.offsetTop - el.offsetHeight,
|
||||
}
|
||||
|
||||
const isInitialPosition = sliderLeft.value === 4 && sliderRight.value === 4
|
||||
|
||||
if (isInitialPosition) {
|
||||
sliderLeft.value = newValues.left
|
||||
sliderRight.value = newValues.right
|
||||
sliderTop.value = newValues.top
|
||||
sliderBottom.value = newValues.bottom
|
||||
sliderReady.value = true
|
||||
requestAnimationFrame(() => {
|
||||
transitionsEnabled.value = true
|
||||
})
|
||||
} else {
|
||||
const STAGGER_DELAY = '200ms'
|
||||
sliderDelays.value = {
|
||||
left: newValues.left < sliderLeft.value ? '0ms' : STAGGER_DELAY,
|
||||
right: newValues.left < sliderLeft.value ? STAGGER_DELAY : '0ms',
|
||||
top: newValues.top < sliderTop.value ? '0ms' : STAGGER_DELAY,
|
||||
bottom: newValues.top < sliderTop.value ? STAGGER_DELAY : '0ms',
|
||||
}
|
||||
sliderLeft.value = newValues.left
|
||||
sliderRight.value = newValues.right
|
||||
sliderTop.value = newValues.top
|
||||
sliderBottom.value = newValues.bottom
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
window.addEventListener('resize', pickLink)
|
||||
await nextTick()
|
||||
pickLink()
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
window.removeEventListener('resize', pickLink)
|
||||
})
|
||||
|
||||
watch(
|
||||
filteredLinks,
|
||||
async () => {
|
||||
await nextTick()
|
||||
pickLink()
|
||||
},
|
||||
{ deep: true },
|
||||
)
|
||||
|
||||
watch(route, async () => {
|
||||
await nextTick()
|
||||
pickLink()
|
||||
})
|
||||
</script>
|
||||
<style scoped>
|
||||
.navtabs-transition {
|
||||
/* Delay on opacity is to hide any jankiness as the page loads */
|
||||
transition:
|
||||
left 150ms cubic-bezier(0.4, 0, 0.2, 1) v-bind(leftDelay),
|
||||
right 150ms cubic-bezier(0.4, 0, 0.2, 1) v-bind(rightDelay),
|
||||
top 150ms cubic-bezier(0.4, 0, 0.2, 1) v-bind(topDelay),
|
||||
bottom 150ms cubic-bezier(0.4, 0, 0.2, 1) v-bind(bottomDelay),
|
||||
opacity 250ms cubic-bezier(0.5, 0, 0.2, 1) 50ms;
|
||||
}
|
||||
</style>
|
||||
@@ -20,6 +20,14 @@
|
||||
:date-updated="project.date_modified"
|
||||
:banner="project.featured_gallery ?? undefined"
|
||||
:color="project.color ?? undefined"
|
||||
:environment="
|
||||
['mod', 'modpack'].includes(projectType)
|
||||
? {
|
||||
clientSide: project.client_side?.[0],
|
||||
serverSide: project.server_side?.[0],
|
||||
}
|
||||
: undefined
|
||||
"
|
||||
layout="list"
|
||||
>
|
||||
<template #actions>
|
||||
|
||||
@@ -17,31 +17,17 @@
|
||||
<tr class="content">
|
||||
<td class="data">{{ instance?.loader }} {{ instance?.game_version }}</td>
|
||||
<td>
|
||||
<multiselect
|
||||
<Combobox
|
||||
v-if="versions?.length > 1"
|
||||
v-model="selectedVersion"
|
||||
:options="versions"
|
||||
v-model="selectedVersionId"
|
||||
:options="versionOptions"
|
||||
:searchable="true"
|
||||
placeholder="Select version"
|
||||
open-direction="top"
|
||||
:show-labels="false"
|
||||
:custom-label="
|
||||
(version) =>
|
||||
`${version?.name} (${version?.loaders
|
||||
.map((name) => formatLoader(formatMessage, name))
|
||||
.join(', ')} - ${version?.game_versions.join(', ')})`
|
||||
"
|
||||
force-direction="up"
|
||||
:max-height="150"
|
||||
/>
|
||||
<span v-else>
|
||||
<span>
|
||||
{{ selectedVersion?.name }} ({{
|
||||
selectedVersion?.loaders
|
||||
.map((name) => formatLoader(formatMessage, name))
|
||||
.join(', ')
|
||||
}}
|
||||
- {{ selectedVersion?.game_versions.join(', ') }})
|
||||
</span>
|
||||
<span>{{ selectedVersionLabel }}</span>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -59,9 +45,8 @@
|
||||
|
||||
<script setup>
|
||||
import { DownloadIcon, XIcon } from '@modrinth/assets'
|
||||
import { Button, formatLoader, injectNotificationManager, useVIntl } from '@modrinth/ui'
|
||||
import { ref } from 'vue'
|
||||
import Multiselect from 'vue-multiselect'
|
||||
import { Button, Combobox, formatLoader, injectNotificationManager, useVIntl } from '@modrinth/ui'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
|
||||
import { trackEvent } from '@/helpers/analytics'
|
||||
@@ -79,11 +64,35 @@ const installing = ref(false)
|
||||
|
||||
const onInstall = ref(() => {})
|
||||
|
||||
const selectedVersionLabel = computed(() => {
|
||||
if (!selectedVersion.value) return ''
|
||||
return `${selectedVersion.value.name} (${selectedVersion.value.loaders
|
||||
.map((name) => formatLoader(formatMessage, name))
|
||||
.join(', ')} - ${selectedVersion.value.game_versions.join(', ')})`
|
||||
})
|
||||
|
||||
const versionOptions = computed(() =>
|
||||
(versions.value ?? []).map((version) => ({
|
||||
value: version.id,
|
||||
label: `${version.name} (${version.loaders
|
||||
.map((name) => formatLoader(formatMessage, name))
|
||||
.join(', ')} - ${version.game_versions.join(', ')})`,
|
||||
})),
|
||||
)
|
||||
|
||||
const selectedVersionId = computed({
|
||||
get: () => selectedVersion.value?.id ?? null,
|
||||
set: (value) => {
|
||||
if (!value) return
|
||||
selectedVersion.value = (versions.value ?? []).find((version) => version.id === value) ?? null
|
||||
},
|
||||
})
|
||||
|
||||
defineExpose({
|
||||
show: (instanceVal, projectVal, projectVersions, selected, callback) => {
|
||||
instance.value = instanceVal
|
||||
versions.value = projectVersions
|
||||
selectedVersion.value = selected ?? projectVersions[0]
|
||||
versions.value = projectVersions ?? []
|
||||
selectedVersion.value = selected ?? projectVersions?.[0] ?? null
|
||||
|
||||
project.value = projectVal
|
||||
|
||||
@@ -162,9 +171,5 @@ td:first-child {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
|
||||
:deep(.animated-dropdown .options) {
|
||||
max-height: 13.375rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
<script setup>
|
||||
import { DownloadIcon, XIcon } from '@modrinth/assets'
|
||||
import { Button, injectNotificationManager } from '@modrinth/ui'
|
||||
import { ref } from 'vue'
|
||||
|
||||
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
|
||||
import { trackEvent } from '@/helpers/analytics'
|
||||
import { create_profile_and_install as pack_install } from '@/helpers/pack'
|
||||
|
||||
const { handleError } = injectNotificationManager()
|
||||
|
||||
const versionId = ref()
|
||||
const project = ref()
|
||||
const confirmModal = ref(null)
|
||||
const installing = ref(false)
|
||||
|
||||
const onInstall = ref(() => {})
|
||||
const onCreateInstance = ref(() => {})
|
||||
|
||||
defineExpose({
|
||||
show: (projectVal, versionIdVal, callback, createInstanceCallback) => {
|
||||
project.value = projectVal
|
||||
versionId.value = versionIdVal
|
||||
installing.value = false
|
||||
confirmModal.value.show()
|
||||
|
||||
onInstall.value = callback
|
||||
onCreateInstance.value = createInstanceCallback
|
||||
|
||||
trackEvent('PackInstallStart')
|
||||
},
|
||||
})
|
||||
|
||||
async function install() {
|
||||
installing.value = true
|
||||
confirmModal.value.hide()
|
||||
|
||||
await pack_install(
|
||||
project.value.id,
|
||||
versionId.value,
|
||||
project.value.title,
|
||||
project.value.icon_url,
|
||||
onCreateInstance.value,
|
||||
).catch(handleError)
|
||||
trackEvent('PackInstall', {
|
||||
id: project.value.id,
|
||||
version_id: versionId.value,
|
||||
title: project.value.title,
|
||||
source: 'ConfirmModal',
|
||||
})
|
||||
|
||||
onInstall.value(versionId.value)
|
||||
installing.value = false
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ModalWrapper ref="confirmModal" header="Are you sure?" :on-hide="onInstall">
|
||||
<div class="modal-body">
|
||||
<p>You already have this modpack installed. Are you sure you want to install it again?</p>
|
||||
<div class="input-group push-right">
|
||||
<Button @click="() => $refs.confirmModal.hide()"><XIcon />Cancel</Button>
|
||||
<Button color="primary" :disabled="installing" @click="install()"
|
||||
><DownloadIcon /> {{ installing ? 'Installing' : 'Install' }}</Button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</ModalWrapper>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.modal-body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
}
|
||||
</style>
|
||||
@@ -18,8 +18,9 @@ import { useRouter } from 'vue-router'
|
||||
import ConfirmDeleteInstanceModal from '@/components/ui/modal/ConfirmDeleteInstanceModal.vue'
|
||||
import { trackEvent } from '@/helpers/analytics'
|
||||
import { duplicate, edit, edit_icon, list, remove } from '@/helpers/profile'
|
||||
import { injectInstanceSettings } from '@/providers/instance-settings'
|
||||
|
||||
import type { GameInstance, InstanceSettingsTabProps } from '../../../helpers/types'
|
||||
import type { GameInstance } from '../../../helpers/types'
|
||||
|
||||
const { handleError } = injectNotificationManager()
|
||||
const { formatMessage } = useVIntl()
|
||||
@@ -27,21 +28,21 @@ const router = useRouter()
|
||||
|
||||
const deleteConfirmModal = ref()
|
||||
|
||||
const props = defineProps<InstanceSettingsTabProps>()
|
||||
const { instance } = injectInstanceSettings()
|
||||
|
||||
const title = ref(props.instance.name)
|
||||
const icon: Ref<string | undefined> = ref(props.instance.icon_path)
|
||||
const groups = ref(props.instance.groups)
|
||||
const title = ref(instance.value.name)
|
||||
const icon: Ref<string | undefined> = ref(instance.value.icon_path)
|
||||
const groups = ref([...instance.value.groups])
|
||||
|
||||
const newCategoryInput = ref('')
|
||||
|
||||
const installing = computed(() => props.instance.install_stage !== 'installed')
|
||||
const installing = computed(() => instance.value.install_stage !== 'installed')
|
||||
|
||||
async function duplicateProfile() {
|
||||
await duplicate(props.instance.path).catch(handleError)
|
||||
await duplicate(instance.value.path).catch(handleError)
|
||||
trackEvent('InstanceDuplicate', {
|
||||
loader: props.instance.loader,
|
||||
game_version: props.instance.game_version,
|
||||
loader: instance.value.loader,
|
||||
game_version: instance.value.game_version,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -52,7 +53,7 @@ const availableGroups = computed(() => [
|
||||
|
||||
async function resetIcon() {
|
||||
icon.value = undefined
|
||||
await edit_icon(props.instance.path, null).catch(handleError)
|
||||
await edit_icon(instance.value.path, null).catch(handleError)
|
||||
trackEvent('InstanceRemoveIcon')
|
||||
}
|
||||
|
||||
@@ -70,7 +71,7 @@ async function setIcon() {
|
||||
if (!value) return
|
||||
|
||||
icon.value = value
|
||||
await edit_icon(props.instance.path, icon.value).catch(handleError)
|
||||
await edit_icon(instance.value.path, icon.value).catch(handleError)
|
||||
|
||||
trackEvent('InstanceSetIcon')
|
||||
}
|
||||
@@ -101,7 +102,7 @@ watch(
|
||||
[title, groups, groups],
|
||||
async () => {
|
||||
if (removing.value) return
|
||||
await edit(props.instance.path, editProfileObject.value).catch(handleError)
|
||||
await edit(instance.value.path, editProfileObject.value).catch(handleError)
|
||||
},
|
||||
{ deep: true },
|
||||
)
|
||||
@@ -109,14 +110,15 @@ watch(
|
||||
const removing = ref(false)
|
||||
async function removeProfile() {
|
||||
removing.value = true
|
||||
const path = instance.value.path
|
||||
|
||||
trackEvent('InstanceRemove', {
|
||||
loader: props.instance.loader,
|
||||
game_version: props.instance.game_version,
|
||||
loader: instance.value.loader,
|
||||
game_version: instance.value.game_version,
|
||||
})
|
||||
|
||||
await router.push({ path: '/' })
|
||||
await remove(props.instance.path).catch(handleError)
|
||||
await remove(path).catch(handleError)
|
||||
}
|
||||
|
||||
const messages = defineMessages({
|
||||
@@ -217,7 +219,7 @@ const messages = defineMessages({
|
||||
:src="icon ? convertFileSrc(icon) : icon"
|
||||
size="108px"
|
||||
class="!border-4 group-hover:brightness-75"
|
||||
:tint-by="props.instance.path"
|
||||
:tint-by="instance.path"
|
||||
no-shadow
|
||||
/>
|
||||
<div class="absolute top-0 right-0 m-2">
|
||||
|
||||
@@ -10,22 +10,23 @@ import { computed, ref, watch } from 'vue'
|
||||
|
||||
import { edit } from '@/helpers/profile'
|
||||
import { get } from '@/helpers/settings.ts'
|
||||
import { injectInstanceSettings } from '@/providers/instance-settings'
|
||||
|
||||
import type { AppSettings, Hooks, InstanceSettingsTabProps } from '../../../helpers/types'
|
||||
import type { AppSettings, Hooks } from '../../../helpers/types'
|
||||
|
||||
const { handleError } = injectNotificationManager()
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const props = defineProps<InstanceSettingsTabProps>()
|
||||
const { instance } = injectInstanceSettings()
|
||||
|
||||
const globalSettings = (await get().catch(handleError)) as AppSettings
|
||||
|
||||
const overrideHooks = ref(
|
||||
!!props.instance.hooks.pre_launch ||
|
||||
!!props.instance.hooks.wrapper ||
|
||||
!!props.instance.hooks.post_exit,
|
||||
!!instance.value.hooks.pre_launch ||
|
||||
!!instance.value.hooks.wrapper ||
|
||||
!!instance.value.hooks.post_exit,
|
||||
)
|
||||
const hooks = ref(props.instance.hooks ?? globalSettings.hooks)
|
||||
const hooks = ref(instance.value.hooks ?? globalSettings.hooks)
|
||||
|
||||
const editProfileObject = computed(() => {
|
||||
const editProfile: {
|
||||
@@ -41,7 +42,7 @@ const editProfileObject = computed(() => {
|
||||
watch(
|
||||
[overrideHooks, hooks],
|
||||
async () => {
|
||||
await edit(props.instance.path, editProfileObject.value)
|
||||
await edit(instance.value.path, editProfileObject.value)
|
||||
},
|
||||
{ deep: true },
|
||||
)
|
||||
|
||||
@@ -27,17 +27,15 @@ import {
|
||||
update_repair_modrinth,
|
||||
} from '@/helpers/profile'
|
||||
import { get_game_versions, get_loaders } from '@/helpers/tags'
|
||||
import { injectInstanceSettings } from '@/providers/instance-settings'
|
||||
|
||||
import type { InstanceSettingsTabProps, Manifest } from '../../../helpers/types'
|
||||
import type { Manifest } from '../../../helpers/types'
|
||||
|
||||
const { handleError } = injectNotificationManager()
|
||||
const { formatMessage } = useVIntl()
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
const props = defineProps<InstanceSettingsTabProps>()
|
||||
const emit = defineEmits<{
|
||||
unlinked: []
|
||||
}>()
|
||||
const { instance, offline, isMinecraftServer, onUnlinked } = injectInstanceSettings()
|
||||
|
||||
const [
|
||||
fabric_versions,
|
||||
@@ -75,9 +73,9 @@ const [
|
||||
])
|
||||
|
||||
const { data: modpackInfo } = useQuery({
|
||||
queryKey: computed(() => ['linkedModpackInfo', props.instance.path]),
|
||||
queryFn: () => get_linked_modpack_info(props.instance.path, 'must_revalidate'),
|
||||
enabled: computed(() => !!props.instance.linked_data?.project_id && !props.offline),
|
||||
queryKey: computed(() => ['linkedModpackInfo', instance.value.path]),
|
||||
queryFn: () => get_linked_modpack_info(instance.value.path, 'must_revalidate'),
|
||||
enabled: computed(() => !!instance.value.linked_data?.project_id && !offline),
|
||||
})
|
||||
|
||||
const repairing = ref(false)
|
||||
@@ -103,13 +101,13 @@ function getManifest(loader: string) {
|
||||
provideAppBackup({
|
||||
async createBackup() {
|
||||
const allProfiles = await list()
|
||||
const prefix = `${props.instance.name} - Backup #`
|
||||
const prefix = `${instance.value.name} - Backup #`
|
||||
const existingNums = allProfiles
|
||||
.filter((p) => p.name.startsWith(prefix))
|
||||
.map((p) => parseInt(p.name.slice(prefix.length), 10))
|
||||
.filter((n) => !isNaN(n))
|
||||
const nextNum = existingNums.length > 0 ? Math.max(...existingNums) + 1 : 1
|
||||
const newPath = await duplicate(props.instance.path)
|
||||
const newPath = await duplicate(instance.value.path)
|
||||
await edit(newPath, { name: `${prefix}${nextNum}` })
|
||||
},
|
||||
})
|
||||
@@ -120,30 +118,30 @@ provideInstallationSettings({
|
||||
const rows = [
|
||||
{
|
||||
label: formatMessage(commonMessages.platformLabel),
|
||||
value: formatLoaderLabel(props.instance.loader),
|
||||
value: formatLoaderLabel(instance.value.loader),
|
||||
},
|
||||
{
|
||||
label: formatMessage(commonMessages.gameVersionLabel),
|
||||
value: props.instance.game_version,
|
||||
value: instance.value.game_version,
|
||||
},
|
||||
]
|
||||
if (props.instance.loader !== 'vanilla' && props.instance.loader_version) {
|
||||
if (instance.value.loader !== 'vanilla' && instance.value.loader_version) {
|
||||
rows.push({
|
||||
label: formatMessage(messages.loaderVersion, {
|
||||
loader: formatLoaderLabel(props.instance.loader),
|
||||
loader: formatLoaderLabel(instance.value.loader),
|
||||
}),
|
||||
value: props.instance.loader_version,
|
||||
value: instance.value.loader_version,
|
||||
})
|
||||
}
|
||||
return rows
|
||||
}),
|
||||
isLinked: computed(() => !!props.instance.linked_data?.locked),
|
||||
isLinked: computed(() => !!instance.value.linked_data?.locked),
|
||||
isBusy: computed(
|
||||
() =>
|
||||
props.instance.install_stage !== 'installed' ||
|
||||
instance.value.install_stage !== 'installed' ||
|
||||
repairing.value ||
|
||||
reinstalling.value ||
|
||||
!!props.offline,
|
||||
!!offline,
|
||||
),
|
||||
modpack: computed(() => {
|
||||
if (!modpackInfo.value) return null
|
||||
@@ -154,9 +152,9 @@ provideInstallationSettings({
|
||||
versionNumber: modpackInfo.value.version?.version_number,
|
||||
}
|
||||
}),
|
||||
currentPlatform: computed(() => props.instance.loader),
|
||||
currentGameVersion: computed(() => props.instance.game_version),
|
||||
currentLoaderVersion: computed(() => props.instance.loader_version ?? ''),
|
||||
currentPlatform: computed(() => instance.value.loader),
|
||||
currentGameVersion: computed(() => instance.value.game_version),
|
||||
currentLoaderVersion: computed(() => instance.value.loader_version ?? ''),
|
||||
availablePlatforms: loaders?.value?.map((x) => x.name) ?? [],
|
||||
|
||||
resolveGameVersions(loader, showSnapshots) {
|
||||
@@ -199,50 +197,50 @@ provideInstallationSettings({
|
||||
if (platform !== 'vanilla' && loaderVersionId) {
|
||||
editProfile.loader_version = loaderVersionId
|
||||
}
|
||||
await edit(props.instance.path, editProfile).catch(handleError)
|
||||
await edit(instance.value.path, editProfile).catch(handleError)
|
||||
},
|
||||
|
||||
afterSave: async () => {
|
||||
await install(props.instance.path, false).catch(handleError)
|
||||
await install(instance.value.path, false).catch(handleError)
|
||||
trackEvent('InstanceRepair', {
|
||||
loader: props.instance.loader,
|
||||
game_version: props.instance.game_version,
|
||||
loader: instance.value.loader,
|
||||
game_version: instance.value.game_version,
|
||||
})
|
||||
},
|
||||
|
||||
async repair() {
|
||||
repairing.value = true
|
||||
await install(props.instance.path, true).catch(handleError)
|
||||
await install(instance.value.path, true).catch(handleError)
|
||||
repairing.value = false
|
||||
trackEvent('InstanceRepair', {
|
||||
loader: props.instance.loader,
|
||||
game_version: props.instance.game_version,
|
||||
loader: instance.value.loader,
|
||||
game_version: instance.value.game_version,
|
||||
})
|
||||
},
|
||||
|
||||
async reinstallModpack() {
|
||||
reinstalling.value = true
|
||||
await update_repair_modrinth(props.instance.path).catch(handleError)
|
||||
await update_repair_modrinth(instance.value.path).catch(handleError)
|
||||
reinstalling.value = false
|
||||
trackEvent('InstanceRepair', {
|
||||
loader: props.instance.loader,
|
||||
game_version: props.instance.game_version,
|
||||
loader: instance.value.loader,
|
||||
game_version: instance.value.game_version,
|
||||
})
|
||||
},
|
||||
|
||||
async unlinkModpack() {
|
||||
await edit(props.instance.path, {
|
||||
await edit(instance.value.path, {
|
||||
linked_data: null as unknown as undefined,
|
||||
})
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: ['linkedModpackInfo', props.instance.path],
|
||||
queryKey: ['linkedModpackInfo', instance.value.path],
|
||||
})
|
||||
emit('unlinked')
|
||||
onUnlinked()
|
||||
},
|
||||
|
||||
getCachedModpackVersions: () => null,
|
||||
async fetchModpackVersions() {
|
||||
const versions = await get_project_versions(props.instance.linked_data!.project_id!).catch(
|
||||
const versions = await get_project_versions(instance.value.linked_data!.project_id!).catch(
|
||||
handleError,
|
||||
)
|
||||
return (versions ?? []) as Labrinth.Versions.v2.Version[]
|
||||
@@ -255,25 +253,25 @@ provideInstallationSettings({
|
||||
},
|
||||
|
||||
async onModpackVersionConfirm(version) {
|
||||
await update_managed_modrinth_version(props.instance.path, version.id)
|
||||
await update_managed_modrinth_version(instance.value.path, version.id)
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: ['linkedModpackInfo', props.instance.path],
|
||||
queryKey: ['linkedModpackInfo', instance.value.path],
|
||||
})
|
||||
},
|
||||
|
||||
updaterModalProps: computed(() => ({
|
||||
isApp: true,
|
||||
currentVersionId:
|
||||
modpackInfo.value?.update_version_id ?? props.instance.linked_data?.version_id ?? '',
|
||||
modpackInfo.value?.update_version_id ?? instance.value.linked_data?.version_id ?? '',
|
||||
projectIconUrl: modpackInfo.value?.project?.icon_url,
|
||||
projectName: modpackInfo.value?.project?.title ?? 'Modpack',
|
||||
currentGameVersion: props.instance.game_version,
|
||||
currentLoader: props.instance.loader,
|
||||
currentGameVersion: instance.value.game_version,
|
||||
currentLoader: instance.value.loader,
|
||||
})),
|
||||
|
||||
isServer: false,
|
||||
isApp: true,
|
||||
showModpackVersionActions: !props.isMinecraftServer,
|
||||
showModpackVersionActions: !isMinecraftServer.value,
|
||||
repairing,
|
||||
reinstalling,
|
||||
})
|
||||
|
||||
@@ -14,34 +14,35 @@ import JavaSelector from '@/components/ui/JavaSelector.vue'
|
||||
import useMemorySlider from '@/composables/useMemorySlider'
|
||||
import { edit, get_optimal_jre_key } from '@/helpers/profile'
|
||||
import { get } from '@/helpers/settings.ts'
|
||||
import { injectInstanceSettings } from '@/providers/instance-settings'
|
||||
|
||||
import type { AppSettings, InstanceSettingsTabProps } from '../../../helpers/types'
|
||||
import type { AppSettings } from '../../../helpers/types'
|
||||
|
||||
const { handleError } = injectNotificationManager()
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const props = defineProps<InstanceSettingsTabProps>()
|
||||
const { instance } = injectInstanceSettings()
|
||||
|
||||
const globalSettings = (await get().catch(handleError)) as unknown as AppSettings
|
||||
|
||||
const overrideJavaInstall = ref(!!props.instance.java_path)
|
||||
const optimalJava = readonly(await get_optimal_jre_key(props.instance.path).catch(handleError))
|
||||
const javaInstall = ref({ path: optimalJava.path ?? props.instance.java_path })
|
||||
const overrideJavaInstall = ref(!!instance.value.java_path)
|
||||
const optimalJava = readonly(await get_optimal_jre_key(instance.value.path).catch(handleError))
|
||||
const javaInstall = ref({ path: optimalJava.path ?? instance.value.java_path })
|
||||
|
||||
const overrideJavaArgs = ref((props.instance.extra_launch_args?.length ?? 0) > 0)
|
||||
const overrideJavaArgs = ref((instance.value.extra_launch_args?.length ?? 0) > 0)
|
||||
const javaArgs = ref(
|
||||
(props.instance.extra_launch_args ?? globalSettings.extra_launch_args).join(' '),
|
||||
(instance.value.extra_launch_args ?? globalSettings.extra_launch_args).join(' '),
|
||||
)
|
||||
|
||||
const overrideEnvVars = ref((props.instance.custom_env_vars?.length ?? 0) > 0)
|
||||
const overrideEnvVars = ref((instance.value.custom_env_vars?.length ?? 0) > 0)
|
||||
const envVars = ref(
|
||||
(props.instance.custom_env_vars ?? globalSettings.custom_env_vars)
|
||||
(instance.value.custom_env_vars ?? globalSettings.custom_env_vars)
|
||||
.map((x) => x.join('='))
|
||||
.join(' '),
|
||||
)
|
||||
|
||||
const overrideMemorySettings = ref(!!props.instance.memory)
|
||||
const memory = ref(props.instance.memory ?? globalSettings.memory)
|
||||
const overrideMemorySettings = ref(!!instance.value.memory)
|
||||
const memory = ref(instance.value.memory ?? globalSettings.memory)
|
||||
const { maxMemory, snapPoints } = (await useMemorySlider().catch(handleError)) as unknown as {
|
||||
maxMemory: number
|
||||
snapPoints: number[]
|
||||
@@ -79,7 +80,7 @@ watch(
|
||||
memory,
|
||||
],
|
||||
async () => {
|
||||
await edit(props.instance.path, editProfileObject.value)
|
||||
await edit(instance.value.path, editProfileObject.value)
|
||||
},
|
||||
{ deep: true },
|
||||
)
|
||||
|
||||
@@ -11,24 +11,25 @@ import { computed, type Ref, ref, watch } from 'vue'
|
||||
|
||||
import { edit } from '@/helpers/profile'
|
||||
import { get } from '@/helpers/settings.ts'
|
||||
import { injectInstanceSettings } from '@/providers/instance-settings'
|
||||
|
||||
import type { AppSettings, InstanceSettingsTabProps } from '../../../helpers/types'
|
||||
import type { AppSettings } from '../../../helpers/types'
|
||||
|
||||
const { handleError } = injectNotificationManager()
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const props = defineProps<InstanceSettingsTabProps>()
|
||||
const { instance } = injectInstanceSettings()
|
||||
|
||||
const globalSettings = (await get().catch(handleError)) as AppSettings
|
||||
|
||||
const overrideWindowSettings = ref(
|
||||
!!props.instance.game_resolution || !!props.instance.force_fullscreen,
|
||||
!!instance.value.game_resolution || !!instance.value.force_fullscreen,
|
||||
)
|
||||
const resolution: Ref<[number, number]> = ref(
|
||||
props.instance.game_resolution ?? (globalSettings.game_resolution.slice() as [number, number]),
|
||||
instance.value.game_resolution ?? (globalSettings.game_resolution.slice() as [number, number]),
|
||||
)
|
||||
const fullscreenSetting: Ref<boolean> = ref(
|
||||
props.instance.force_fullscreen ?? globalSettings.force_fullscreen,
|
||||
instance.value.force_fullscreen ?? globalSettings.force_fullscreen,
|
||||
)
|
||||
|
||||
const editProfileObject = computed(() => {
|
||||
@@ -47,7 +48,7 @@ const editProfileObject = computed(() => {
|
||||
watch(
|
||||
[overrideWindowSettings, resolution, fullscreenSetting],
|
||||
async () => {
|
||||
await edit(props.instance.path, editProfileObject.value)
|
||||
await edit(instance.value.path, editProfileObject.value)
|
||||
},
|
||||
{ deep: true },
|
||||
)
|
||||
|
||||
@@ -20,9 +20,8 @@ import {
|
||||
} from '@modrinth/ui'
|
||||
import { getVersion } from '@tauri-apps/api/app'
|
||||
import { platform as getOsPlatform, version as getOsVersion } from '@tauri-apps/plugin-os'
|
||||
import { computed, ref, watch } from 'vue'
|
||||
import { ref, watch } from 'vue'
|
||||
|
||||
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
|
||||
import AppearanceSettings from '@/components/ui/settings/AppearanceSettings.vue'
|
||||
import DefaultInstanceSettings from '@/components/ui/settings/DefaultInstanceSettings.vue'
|
||||
import FeatureFlagSettings from '@/components/ui/settings/FeatureFlagSettings.vue'
|
||||
@@ -106,15 +105,13 @@ const tabs = [
|
||||
},
|
||||
]
|
||||
|
||||
const modal = ref()
|
||||
const modal = ref<InstanceType<typeof TabbedModal> | null>(null)
|
||||
|
||||
function show() {
|
||||
modal.value.show()
|
||||
modal.value?.show()
|
||||
}
|
||||
|
||||
const isOpen = computed(() => modal.value?.isOpen)
|
||||
|
||||
defineExpose({ show, isOpen })
|
||||
defineExpose({ show })
|
||||
|
||||
const { progress, version: downloadingVersion } = injectAppUpdateDownloadProgress()
|
||||
|
||||
@@ -138,8 +135,8 @@ function devModeCount() {
|
||||
settings.value.developer_mode = !!themeStore.devMode
|
||||
devModeCounter.value = 0
|
||||
|
||||
if (!themeStore.devMode && tabs[modal.value.selectedTab].developerOnly) {
|
||||
modal.value.setTab(0)
|
||||
if (!themeStore.devMode && tabs[modal.value!.selectedTab].developerOnly) {
|
||||
modal.value!.setTab(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -152,49 +149,46 @@ const messages = defineMessages({
|
||||
})
|
||||
</script>
|
||||
<template>
|
||||
<ModalWrapper ref="modal">
|
||||
<TabbedModal ref="modal" :tabs="tabs.filter((t) => !t.developerOnly || themeStore.devMode)">
|
||||
<template #title>
|
||||
<span class="flex items-center gap-2 text-lg font-extrabold text-contrast">
|
||||
<SettingsIcon /> Settings
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<TabbedModal :tabs="tabs.filter((t) => !t.developerOnly || themeStore.devMode)">
|
||||
<template #footer>
|
||||
<div class="mt-auto text-secondary text-sm">
|
||||
<div class="mb-3">
|
||||
<template v-if="progress > 0 && progress < 1">
|
||||
<p class="m-0 mb-2">
|
||||
{{ formatMessage(messages.downloading, { version: downloadingVersion }) }}
|
||||
</p>
|
||||
<ProgressBar :progress="progress" />
|
||||
</template>
|
||||
</div>
|
||||
<p v-if="themeStore.devMode" class="text-brand font-semibold m-0 mb-2">
|
||||
{{ formatMessage(developerModeEnabled) }}
|
||||
</p>
|
||||
<div class="flex items-center gap-3">
|
||||
<button
|
||||
class="p-0 m-0 bg-transparent border-none cursor-pointer button-animation"
|
||||
:class="{
|
||||
'text-brand': themeStore.devMode,
|
||||
'text-secondary': !themeStore.devMode,
|
||||
}"
|
||||
@click="devModeCount"
|
||||
>
|
||||
<ModrinthIcon class="w-6 h-6" />
|
||||
</button>
|
||||
<div>
|
||||
<p class="m-0">Modrinth App {{ version }}</p>
|
||||
<p class="m-0">
|
||||
<span v-if="osPlatform === 'macos'">macOS</span>
|
||||
<span v-else class="capitalize">{{ osPlatform }}</span>
|
||||
{{ osVersion }}
|
||||
</p>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="mt-auto text-secondary text-sm">
|
||||
<div class="mb-3">
|
||||
<template v-if="progress > 0 && progress < 1">
|
||||
<p class="m-0 mb-2">
|
||||
{{ formatMessage(messages.downloading, { version: downloadingVersion }) }}
|
||||
</p>
|
||||
<ProgressBar :progress="progress" />
|
||||
</template>
|
||||
</div>
|
||||
<p v-if="themeStore.devMode" class="text-brand font-semibold m-0 mb-2">
|
||||
{{ formatMessage(developerModeEnabled) }}
|
||||
</p>
|
||||
<div class="flex items-center gap-3">
|
||||
<button
|
||||
class="p-0 m-0 bg-transparent border-none cursor-pointer button-animation"
|
||||
:class="{
|
||||
'text-brand': themeStore.devMode,
|
||||
'text-secondary': !themeStore.devMode,
|
||||
}"
|
||||
@click="devModeCount"
|
||||
>
|
||||
<ModrinthIcon class="w-6 h-6" />
|
||||
</button>
|
||||
<div>
|
||||
<p class="m-0">Modrinth App {{ version }}</p>
|
||||
<p class="m-0">
|
||||
<span v-if="osPlatform === 'macos'">macOS</span>
|
||||
<span v-else class="capitalize">{{ osPlatform }}</span>
|
||||
{{ osVersion }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</TabbedModal>
|
||||
</ModalWrapper>
|
||||
</div>
|
||||
</template>
|
||||
</TabbedModal>
|
||||
</template>
|
||||
|
||||
@@ -12,14 +12,13 @@ import {
|
||||
Avatar,
|
||||
commonMessages,
|
||||
defineMessage,
|
||||
NewModal,
|
||||
TabbedModal,
|
||||
type TabbedModalTab,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { useQueryClient } from '@tanstack/vue-query'
|
||||
import { convertFileSrc } from '@tauri-apps/api/core'
|
||||
import { computed, nextTick, ref, useTemplateRef, watch } from 'vue'
|
||||
import { computed, nextTick, ref, watch } from 'vue'
|
||||
|
||||
import GeneralSettings from '@/components/ui/instance_settings/GeneralSettings.vue'
|
||||
import HooksSettings from '@/components/ui/instance_settings/HooksSettings.vue'
|
||||
@@ -28,12 +27,16 @@ import JavaSettings from '@/components/ui/instance_settings/JavaSettings.vue'
|
||||
import WindowSettings from '@/components/ui/instance_settings/WindowSettings.vue'
|
||||
import { get_project_v3 } from '@/helpers/cache'
|
||||
import { get_linked_modpack_info } from '@/helpers/profile'
|
||||
import { provideInstanceSettings } from '@/providers/instance-settings'
|
||||
|
||||
import type { InstanceSettingsTabProps } from '../../../helpers/types'
|
||||
import type { GameInstance } from '../../../helpers/types'
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const props = defineProps<InstanceSettingsTabProps>()
|
||||
const props = defineProps<{
|
||||
instance: GameInstance
|
||||
offline?: boolean
|
||||
}>()
|
||||
const emit = defineEmits<{
|
||||
unlinked: []
|
||||
}>()
|
||||
@@ -41,6 +44,15 @@ const emit = defineEmits<{
|
||||
const isMinecraftServer = ref(false)
|
||||
const handleUnlinked = () => emit('unlinked')
|
||||
|
||||
const instanceRef = computed(() => props.instance)
|
||||
|
||||
provideInstanceSettings({
|
||||
instance: instanceRef,
|
||||
offline: props.offline,
|
||||
isMinecraftServer,
|
||||
onUnlinked: handleUnlinked,
|
||||
})
|
||||
|
||||
watch(
|
||||
() => props.instance,
|
||||
(instance) => {
|
||||
@@ -58,7 +70,7 @@ watch(
|
||||
{ immediate: true },
|
||||
)
|
||||
|
||||
const tabs = computed<TabbedModalTab<InstanceSettingsTabProps>[]>(() => [
|
||||
const tabs = computed<TabbedModalTab[]>(() => [
|
||||
{
|
||||
name: defineMessage({
|
||||
id: 'instance.settings.tabs.general',
|
||||
@@ -102,8 +114,7 @@ const tabs = computed<TabbedModalTab<InstanceSettingsTabProps>[]>(() => [
|
||||
])
|
||||
|
||||
const queryClient = useQueryClient()
|
||||
const modal = ref()
|
||||
const tabbedModal = useTemplateRef('tabbedModal')
|
||||
const tabbedModal = ref<InstanceType<typeof TabbedModal> | null>(null)
|
||||
|
||||
function show(tabIndex?: number) {
|
||||
if (props.instance.linked_data?.project_id) {
|
||||
@@ -112,7 +123,7 @@ function show(tabIndex?: number) {
|
||||
queryFn: () => get_linked_modpack_info(props.instance.path, 'stale_while_revalidate'),
|
||||
})
|
||||
}
|
||||
modal.value.show()
|
||||
tabbedModal.value?.show()
|
||||
if (tabIndex !== undefined) {
|
||||
nextTick(() => tabbedModal.value?.setTab(tabIndex))
|
||||
}
|
||||
@@ -121,8 +132,9 @@ function show(tabIndex?: number) {
|
||||
defineExpose({ show })
|
||||
</script>
|
||||
<template>
|
||||
<NewModal
|
||||
ref="modal"
|
||||
<TabbedModal
|
||||
ref="tabbedModal"
|
||||
:tabs="tabs"
|
||||
:max-width="'min(928px, calc(95vw - 10rem))'"
|
||||
:width="'min(928px, calc(95vw - 10rem))'"
|
||||
>
|
||||
@@ -139,19 +151,5 @@ defineExpose({ show })
|
||||
}}</span>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<TabbedModal
|
||||
ref="tabbedModal"
|
||||
:tabs="
|
||||
tabs.map((tab) => ({
|
||||
...tab,
|
||||
props: {
|
||||
...props,
|
||||
isMinecraftServer,
|
||||
onUnlinked: handleUnlinked,
|
||||
},
|
||||
}))
|
||||
"
|
||||
/>
|
||||
</NewModal>
|
||||
</TabbedModal>
|
||||
</template>
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
<template>
|
||||
<NewModal ref="modal" :header="formatMessage(messages.header)" fade="warning" max-width="500px">
|
||||
<p class="m-0 text-secondary">
|
||||
<IntlFormatted :message-id="messages.body" :values="{ instanceName }">
|
||||
<template #bold="{ children }">
|
||||
<span class="font-medium text-contrast"><component :is="() => children" /></span>
|
||||
</template>
|
||||
</IntlFormatted>
|
||||
</p>
|
||||
|
||||
<template #actions>
|
||||
<div class="flex gap-2 justify-end">
|
||||
<ButtonStyled type="outlined">
|
||||
<button class="!border !border-surface-4" @click="handleCancel">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button @click="handleGoToInstance">
|
||||
{{ formatMessage(messages.instance) }}
|
||||
<RightArrowIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="orange">
|
||||
<button @click="handleCreateAnyway">
|
||||
<PlusIcon />
|
||||
{{ formatMessage(messages.create) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { PlusIcon, RightArrowIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
IntlFormatted,
|
||||
NewModal,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { ref } from 'vue'
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const messages = defineMessages({
|
||||
header: {
|
||||
id: 'app.instance.modpack-already-installed.header',
|
||||
defaultMessage: 'Modpack already installed',
|
||||
},
|
||||
body: {
|
||||
id: 'app.instance.modpack-already-installed.body',
|
||||
defaultMessage:
|
||||
'This modpack is already installed in the <bold>{instanceName}</bold> instance. Are you sure you want to duplicate it?',
|
||||
},
|
||||
instance: {
|
||||
id: 'app.instance.modpack-already-installed.instance',
|
||||
defaultMessage: 'Instance',
|
||||
},
|
||||
create: {
|
||||
id: 'app.instance.modpack-already-installed.create',
|
||||
defaultMessage: 'Create',
|
||||
},
|
||||
})
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'go-to-instance', instancePath: string): void
|
||||
(e: 'create-anyway'): void
|
||||
}>()
|
||||
|
||||
const modal = ref<InstanceType<typeof NewModal>>()
|
||||
const instanceName = ref('')
|
||||
const instancePath = ref('')
|
||||
|
||||
function show(name: string, path: string) {
|
||||
instanceName.value = name
|
||||
instancePath.value = path
|
||||
modal.value?.show()
|
||||
}
|
||||
|
||||
function handleCancel() {
|
||||
modal.value?.hide()
|
||||
}
|
||||
|
||||
function handleGoToInstance() {
|
||||
modal.value?.hide()
|
||||
emit('go-to-instance', instancePath.value)
|
||||
}
|
||||
|
||||
function handleCreateAnyway() {
|
||||
modal.value?.hide()
|
||||
emit('create-anyway')
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
show,
|
||||
})
|
||||
</script>
|
||||
@@ -189,6 +189,22 @@ const messages = defineMessages({
|
||||
id: 'instance.worlds.linked_server',
|
||||
defaultMessage: 'Managed by server project',
|
||||
},
|
||||
incompatibleVersion: {
|
||||
id: 'app.world.world-item.incompatible-version',
|
||||
defaultMessage: 'Incompatible version {version}',
|
||||
},
|
||||
playersOnline: {
|
||||
id: 'app.world.world-item.players-online',
|
||||
defaultMessage: '{count} online',
|
||||
},
|
||||
offline: {
|
||||
id: 'app.world.world-item.offline',
|
||||
defaultMessage: 'Offline',
|
||||
},
|
||||
notPlayedYet: {
|
||||
id: 'app.world.world-item.not-played-yet',
|
||||
defaultMessage: 'Not played yet',
|
||||
},
|
||||
})
|
||||
</script>
|
||||
<template>
|
||||
@@ -243,13 +259,17 @@ const messages = defineMessages({
|
||||
>
|
||||
<template v-if="refreshing">
|
||||
<SpinnerIcon aria-hidden="true" class="animate-spin shrink-0" />
|
||||
Loading...
|
||||
{{ formatMessage(commonMessages.loadingLabel) }}
|
||||
</template>
|
||||
<template v-else-if="serverStatus">
|
||||
<template v-if="serverIncompatible">
|
||||
<IssuesIcon class="shrink-0 text-orange" aria-hidden="true" />
|
||||
<span class="text-orange">
|
||||
Incompatible version {{ serverStatus.version?.name }}
|
||||
{{
|
||||
formatMessage(messages.incompatibleVersion, {
|
||||
version: serverStatus.version?.name,
|
||||
})
|
||||
}}
|
||||
</span>
|
||||
</template>
|
||||
<template v-else>
|
||||
@@ -265,8 +285,11 @@ const messages = defineMessages({
|
||||
/>
|
||||
<Tooltip :disabled="!hasPlayersTooltip">
|
||||
<span :class="{ 'cursor-help': hasPlayersTooltip }">
|
||||
{{ formatNumber(serverStatus.players?.online) }}
|
||||
online
|
||||
{{
|
||||
formatMessage(messages.playersOnline, {
|
||||
count: formatNumber(serverStatus.players?.online ?? 0),
|
||||
})
|
||||
}}
|
||||
</span>
|
||||
<template #popper>
|
||||
<div class="flex flex-col gap-1">
|
||||
@@ -280,7 +303,7 @@ const messages = defineMessages({
|
||||
</template>
|
||||
<template v-else>
|
||||
<NoSignalIcon aria-hidden="true" stroke-width="3px" class="shrink-0" />
|
||||
Offline
|
||||
{{ formatMessage(messages.offline) }}
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
@@ -299,7 +322,7 @@ const messages = defineMessages({
|
||||
})
|
||||
}}
|
||||
</template>
|
||||
<template v-else> Not played yet </template>
|
||||
<template v-else> {{ formatMessage(messages.notPlayedYet) }} </template>
|
||||
</div>
|
||||
<template v-if="instancePath">
|
||||
•
|
||||
|
||||
@@ -5,12 +5,11 @@ import {
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
injectNotificationManager,
|
||||
NewModal,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { ref } from 'vue'
|
||||
|
||||
import InstanceModalTitlePrefix from '@/components/ui/modal/InstanceModalTitlePrefix.vue'
|
||||
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
|
||||
import ServerModalBody from '@/components/ui/world/modal/ServerModalBody.vue'
|
||||
import type { GameInstance } from '@/helpers/types'
|
||||
import { add_server_to_profile, type ServerPackStatus, type ServerWorld } from '@/helpers/worlds.ts'
|
||||
@@ -26,10 +25,10 @@ const props = defineProps<{
|
||||
instance: GameInstance
|
||||
}>()
|
||||
|
||||
const modal = ref()
|
||||
const modal = ref<InstanceType<typeof NewModal>>()
|
||||
|
||||
const name = ref()
|
||||
const address = ref()
|
||||
const name = ref('')
|
||||
const address = ref('')
|
||||
const resourcePack = ref<ServerPackStatus>('enabled')
|
||||
|
||||
async function addServer(play: boolean) {
|
||||
@@ -60,11 +59,11 @@ function show() {
|
||||
name.value = ''
|
||||
address.value = ''
|
||||
resourcePack.value = 'enabled'
|
||||
modal.value.show()
|
||||
modal.value?.show()
|
||||
}
|
||||
|
||||
function hide() {
|
||||
modal.value.hide()
|
||||
modal.value?.hide()
|
||||
}
|
||||
|
||||
const messages = defineMessages({
|
||||
@@ -85,37 +84,33 @@ const messages = defineMessages({
|
||||
defineExpose({ show, hide })
|
||||
</script>
|
||||
<template>
|
||||
<ModalWrapper ref="modal">
|
||||
<template #title>
|
||||
<span class="flex items-center gap-2 text-lg font-semibold text-primary">
|
||||
<InstanceModalTitlePrefix :instance="instance" />
|
||||
<span class="font-extrabold text-contrast">{{ formatMessage(messages.title) }}</span>
|
||||
</span>
|
||||
</template>
|
||||
<NewModal ref="modal" :header="formatMessage(messages.title)" width="500px" max-width="500px">
|
||||
<ServerModalBody
|
||||
v-model:name="name"
|
||||
v-model:address="address"
|
||||
v-model:resource-pack="resourcePack"
|
||||
/>
|
||||
<div class="flex gap-2 mt-4">
|
||||
<ButtonStyled color="brand">
|
||||
<button :disabled="!address" @click="addServer(true)">
|
||||
<PlayIcon />
|
||||
{{ formatMessage(messages.addAndPlay) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button :disabled="!address" @click="addServer(false)">
|
||||
<PlusIcon />
|
||||
{{ formatMessage(messages.addServer) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button @click="hide()">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</ModalWrapper>
|
||||
<template #actions>
|
||||
<div class="flex gap-2 justify-end">
|
||||
<ButtonStyled type="outlined">
|
||||
<button class="!border !border-surface-4" @click="hide()">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button :disabled="!address" @click="addServer(false)">
|
||||
<PlusIcon />
|
||||
{{ formatMessage(messages.addServer) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button :disabled="!address" @click="addServer(true)">
|
||||
<PlayIcon />
|
||||
{{ formatMessage(messages.addAndPlay) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
</template>
|
||||
|
||||
@@ -5,11 +5,11 @@ import {
|
||||
commonMessages,
|
||||
defineMessage,
|
||||
injectNotificationManager,
|
||||
NewModal,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
|
||||
import HideFromHomeOption from '@/components/ui/world/modal/HideFromHomeOption.vue'
|
||||
import ServerModalBody from '@/components/ui/world/modal/ServerModalBody.vue'
|
||||
import type { GameInstance } from '@/helpers/types'
|
||||
@@ -32,7 +32,7 @@ const props = defineProps<{
|
||||
instance: GameInstance
|
||||
}>()
|
||||
|
||||
const modal = ref()
|
||||
const modal = ref<InstanceType<typeof NewModal>>()
|
||||
|
||||
const name = ref<string>('')
|
||||
const address = ref<string>('')
|
||||
@@ -81,11 +81,11 @@ function show(server: ServerWorld) {
|
||||
index.value = server.index
|
||||
displayStatus.value = server.display_status
|
||||
hideFromHome.value = server.display_status === 'hidden'
|
||||
modal.value.show()
|
||||
modal.value?.show()
|
||||
}
|
||||
|
||||
function hide() {
|
||||
modal.value.hide()
|
||||
modal.value?.hide()
|
||||
}
|
||||
|
||||
defineExpose({ show })
|
||||
@@ -96,29 +96,28 @@ const titleMessage = defineMessage({
|
||||
})
|
||||
</script>
|
||||
<template>
|
||||
<ModalWrapper ref="modal">
|
||||
<template #title>
|
||||
<span class="font-extrabold text-lg text-contrast">{{ formatMessage(titleMessage) }}</span>
|
||||
</template>
|
||||
<NewModal ref="modal" :header="formatMessage(titleMessage)" width="500px" max-width="500px">
|
||||
<ServerModalBody
|
||||
v-model:name="name"
|
||||
v-model:address="address"
|
||||
v-model:resource-pack="resourcePack"
|
||||
/>
|
||||
<HideFromHomeOption v-model="hideFromHome" class="mt-3" />
|
||||
<div class="flex gap-2 mt-4">
|
||||
<ButtonStyled color="brand">
|
||||
<button :disabled="!address" @click="saveServer">
|
||||
<SaveIcon />
|
||||
{{ formatMessage(commonMessages.saveChangesButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button @click="hide()">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</ModalWrapper>
|
||||
<template #actions>
|
||||
<div class="flex gap-2 justify-end">
|
||||
<ButtonStyled type="outlined">
|
||||
<button class="!border !border-surface-4" @click="hide()">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button :disabled="!address" @click="saveServer">
|
||||
<SaveIcon />
|
||||
{{ formatMessage(commonMessages.saveChangesButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
</template>
|
||||
|
||||
@@ -49,34 +49,40 @@ const messages = defineMessages({
|
||||
id: 'instance.server-modal.placeholder-name',
|
||||
defaultMessage: 'Minecraft Server',
|
||||
},
|
||||
placeholderAddress: {
|
||||
id: 'app.world.server-modal.placeholder-address',
|
||||
defaultMessage: 'example.modrinth.gg',
|
||||
},
|
||||
selectAnOption: {
|
||||
id: 'app.world.server-modal.select-an-option',
|
||||
defaultMessage: 'Select an option',
|
||||
},
|
||||
})
|
||||
|
||||
defineExpose({ resourcePackOptions })
|
||||
</script>
|
||||
<template>
|
||||
<div class="w-[450px]">
|
||||
<h2 class="text-lg font-extrabold text-contrast mt-0 mb-1">
|
||||
{{ formatMessage(messages.name) }}
|
||||
</h2>
|
||||
<StyledInput
|
||||
v-model="name"
|
||||
:placeholder="formatMessage(messages.placeholderName)"
|
||||
autocomplete="off"
|
||||
wrapper-class="w-full"
|
||||
/>
|
||||
<h2 class="text-lg font-extrabold text-contrast mt-3 mb-1">
|
||||
{{ formatMessage(messages.address) }}
|
||||
</h2>
|
||||
<StyledInput
|
||||
v-model="address"
|
||||
placeholder="example.modrinth.gg"
|
||||
autocomplete="off"
|
||||
wrapper-class="w-full"
|
||||
/>
|
||||
<h2 class="text-lg font-extrabold text-contrast mt-3 mb-1">
|
||||
{{ formatMessage(messages.resourcePack) }}
|
||||
</h2>
|
||||
<div>
|
||||
<div class="space-y-4 w-full">
|
||||
<label class="flex flex-col gap-2">
|
||||
<span class="font-semibold text-contrast">{{ formatMessage(messages.name) }}</span>
|
||||
<StyledInput
|
||||
v-model="name"
|
||||
:placeholder="formatMessage(messages.placeholderName)"
|
||||
autocomplete="off"
|
||||
wrapper-class="w-full"
|
||||
/>
|
||||
</label>
|
||||
<label class="flex flex-col gap-2">
|
||||
<span class="font-semibold text-contrast">{{ formatMessage(messages.address) }}</span>
|
||||
<StyledInput
|
||||
v-model="address"
|
||||
:placeholder="formatMessage(messages.placeholderAddress)"
|
||||
autocomplete="off"
|
||||
wrapper-class="w-full"
|
||||
/>
|
||||
</label>
|
||||
<label class="flex flex-col gap-2">
|
||||
<span class="font-semibold text-contrast">{{ formatMessage(messages.resourcePack) }}</span>
|
||||
<Combobox
|
||||
v-model="resourcePack"
|
||||
:options="
|
||||
@@ -89,9 +95,9 @@ defineExpose({ resourcePackOptions })
|
||||
:display-value="
|
||||
resourcePack
|
||||
? formatMessage(resourcePackOptionMessages[resourcePack])
|
||||
: 'Select an option'
|
||||
: formatMessage(messages.selectAnOption)
|
||||
"
|
||||
/>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
+2
-8
@@ -1,6 +1,6 @@
|
||||
import type { ModrinthId } from '@modrinth/utils'
|
||||
|
||||
type GameInstance = {
|
||||
export type GameInstance = {
|
||||
path: string
|
||||
install_stage: InstallStage
|
||||
|
||||
@@ -46,7 +46,7 @@ type LinkedData = {
|
||||
locked: boolean
|
||||
}
|
||||
|
||||
type InstanceLoader = 'vanilla' | 'forge' | 'fabric' | 'quilt' | 'neoforge'
|
||||
export type InstanceLoader = 'vanilla' | 'forge' | 'fabric' | 'quilt' | 'neoforge'
|
||||
|
||||
type ContentFile = {
|
||||
metadata?: {
|
||||
@@ -128,9 +128,3 @@ type AppSettings = {
|
||||
prev_custom_dir?: string
|
||||
migrated: boolean
|
||||
}
|
||||
|
||||
export type InstanceSettingsTabProps = {
|
||||
instance: GameInstance
|
||||
offline?: boolean
|
||||
isMinecraftServer?: boolean
|
||||
}
|
||||
|
||||
@@ -30,6 +30,8 @@ export type ServerWorld = BaseWorld & {
|
||||
index: number
|
||||
address: string
|
||||
pack_status: ServerPackStatus
|
||||
project_id?: string
|
||||
content_kind?: string
|
||||
}
|
||||
|
||||
export type World = SingleplayerWorld | ServerWorld
|
||||
@@ -140,12 +142,16 @@ export async function add_server_to_profile(
|
||||
name: string,
|
||||
address: string,
|
||||
packStatus: ServerPackStatus,
|
||||
projectId?: string,
|
||||
contentKind?: string,
|
||||
): Promise<number> {
|
||||
return await invoke('plugin:worlds|add_server_to_profile', {
|
||||
path,
|
||||
name,
|
||||
address,
|
||||
packStatus,
|
||||
projectId,
|
||||
contentKind,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,96 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "تعذر الوصول إلى خوادم المصادقة"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "ادخل وصف التعديل..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "تصدير"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "تصدير حزمة التعديل"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "إسم حزمة التعديل"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "إسم حزمة التعديل"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "حدد الملفات والمجلدات المراد تضمينها في الحزمة"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "رقم الإصدار"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "سيتم حذف جميع البيانات الخاصة بمثيلك نهائيًا، بما في ذلك عوالمك والتكوينات وكل المحتوى المثبت."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "لا يمكن التراجع عن هذا الإجراء"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "حذف المثيل"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "حذف المثيل"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "تم تثبيت حزمة التعديل هذه بالفعل في مثيل \"{instanceName}\"."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "حزمة تعديل مكررة"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "إنشاء على أي حال"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "انتقل إلى المثال"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "تم تثبيت حزمة التعديل بالفعل"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "مشروع"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "نسخ الرابط"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "جاري التثبيت..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "حزمة التعديل"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "تمت إضافة \"{name}\"."
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "تمت إضافة {count} من المشاريع"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "تحقق من المشاريع التي أستخدمها في حزمة التعديل الخاص بي!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "مشاركة محتوى حزمة التعديل"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "عرض الملف"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "تم الرفع بنجاح"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "غير معروف"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "جارٍ التحديث..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "المحتوى مطلوب"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "نزل للعب"
|
||||
},
|
||||
@@ -14,42 +104,30 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": ""
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "حزمة التعديل مطلوبة"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "يتطلب هذا الخادم تعديلات للعب. انقر فوق \"تثبيت\" لإعداد الملفات المطلوبة من Modrinth، ثم قم بتشغيله مباشرة إلى الخادم."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "حُزْمَة مشاركة"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "حُزْمَة خادم مشاركة"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} مضاف"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "تمت الإضافة"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "تمت الإزالة"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "تم تحديث"
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "عرض المحتويات"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "حدث للعب"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} مزال"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "يلزم التحديث"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "هناك تحديث لازم للعب بـ {name}. الرجاء التحديث إلى آخر اصدار لتشغيل اللعبة."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} حُدِّث"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "تم تفعيل وضع المطوّر."
|
||||
},
|
||||
@@ -77,6 +155,33 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "إدارة الموارد"
|
||||
},
|
||||
"app.update-popup.body": {
|
||||
"message": "تطبيق Modrinth v{version} جاهز للتثبيت! أعد التحميل للتحديث الآن، أو تلقائيًا عند إغلاق تطبيق Modrinth."
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "انتهى تنزيل تطبيق Modrinth v{version}. أعد التحميل للتحديث الآن، أو تلقائيًا عند إغلاق تطبيق Modrinth."
|
||||
},
|
||||
"app.update-popup.body.linux": {
|
||||
"message": "تطبيق Modrinth v {version} متاح. استخدم مدير الحزم الخاص بك للتحديث للحصول على أحدث الميزات والإصلاحات!"
|
||||
},
|
||||
"app.update-popup.body.metered": {
|
||||
"message": "تطبيق Modrinth v{version} متاح الآن! وبما أنك متصل بشبكة مقيّدة، لم نقم بتنزيله تلقائيًا."
|
||||
},
|
||||
"app.update-popup.changelog": {
|
||||
"message": "سجل التغيير"
|
||||
},
|
||||
"app.update-popup.download": {
|
||||
"message": "تنزيل ({size})"
|
||||
},
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "اكتمل التنزيل"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "إعادة تحميل"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "تحديث متاح"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "انقر هنا لعرض سجلّ التغييرات."
|
||||
},
|
||||
@@ -191,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "تعديل العالم"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "المشاريع المعطَّلة"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "توجد تحديثات متاحة"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "العنوان"
|
||||
},
|
||||
@@ -305,141 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "تثبيت"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} لـ Minecraft{game_version} مثبت بالفعل"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "فانيلا {game_version} مُثبّتة بالفعل"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "تغيير الإصدار"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "تثبيت"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "جاري التثبيت"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "جاري جلب إصدارات حزمة المودات"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "جاري تثبيت الإصدار الجديد"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "المثبت حاليًا"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "معلومات التصحيح:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "جاري جلب تفاصيل حزمة المودات"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "إصدار اللعبة"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "تثبيت"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "التثبيت قيد التنفيذ"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "إصدار {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "تعذّر جلب تفاصيل حزمة المودات المرتبطة. يرجى التحقق من اتصالك بالإنترنت."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} غير متاح لماين كرافت {version}. جرّب محمّل مودات آخر."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "هذه النسخة مرتبطة بحزمة مودات، لكن لم يتم العثور على الحزمة على مودرنث."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "منصّة"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "إعادة تثبيت حزمة المودات"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "جاري إعادة تثبيت حزمة المودات"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "إعادة التثبيت ستُعيد جميع الملفات المثبتة أو المعدلة إلى ما توفره حُزْمة المودات، مع إزالة أي مودات أو محتوى أضفته بعد التثبيت الأصلي. قد يساعد ذلك في حل السلوك غير المتوقع إذا تم تعديل النسخة، لكن إذا كانت عوالمك تعتمد على محتويات إضافية، فقد يتسبب ذلك في تعطلها."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "هل أنت متأكد أنك تريد إعادة تثبيت هذه النسخة؟"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "يعيد محتوى النسخة إلى حالته الأصلية، مع إزالة جميع المودات أو المحتوى الذي أُضيف فوق حزمة المودات الأصلية."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "إعادة تثبيت حزمة المودات"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "إصلاح"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "جاري الإصلاح"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "الإصلاح يعيد تثبيت مكوّنات ماين كرافت ويتحقق من التلف. قد يساعد ذلك في حل المشكلات إذا كانت لعبتك لا تعمل بسبب أخطاء متعلقة ببرنامج التشغيل، لكنه لن يحل المشكلات أو الأعطال الناتجة عن المودات المثبّتة."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "إصلاح النسخة؟"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "الإصلاح قيد التنفيذ"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "إعادة التعيين إلى الحالة الحالية"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "عرض جميع الإصدارات"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "تغيير الإصدار"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "تثبيت"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "إعادة التثبيت"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "إصلاح"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "لا يمكن {action} أثناء التثبيت"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "لا يمكن {action} أثناء عدم الاتصال بالإنترنت"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "لا يمكن {action} أثناء الإصلاح"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(إصدار غير معروف)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "إلغاء ربط النسخة"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "إذا تابعت، فلن تتمكّن من إعادة ربطها إلا بإنشاء نسخة جديدة بالكامل. لن تتلقى بعد ذلك تحديثات حزمة المودات، وستصبح نسخة عادية."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "هل أنت متأكد أنك تريد إلغاء ربط هذه النسخة؟"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "هذه النسخة مرتبطة بحزمة مودات، مما يعني أنه لا يمكن تحديث المودات أو تغيير محمّل المودات أو إصدار ماين كرافت. سيؤدي إلغاء الربط إلى فصل هذه النسخة نهائيًا عن حزمة المودات."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "إلغاء الربط من حزمة المودات"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "جافا والذاكرة"
|
||||
},
|
||||
@@ -512,6 +479,9 @@
|
||||
"instance.worlds.incompatible_server": {
|
||||
"message": "الخادم غير متوافق"
|
||||
},
|
||||
"instance.worlds.linked_server": {
|
||||
"message": "تدار بواسطة مشروع الخادم"
|
||||
},
|
||||
"instance.worlds.no_contact": {
|
||||
"message": "تعذّر الاتصال بالخادم"
|
||||
},
|
||||
@@ -547,5 +517,17 @@
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "مزامنة مع النسخة"
|
||||
},
|
||||
"search.filter.locked.server": {
|
||||
"message": "يقدمها الخادم"
|
||||
},
|
||||
"search.filter.locked.server-environment.title": {
|
||||
"message": "يمكن إضافة التعديلات من جانب العميل فقط إلى مثيل الخادم"
|
||||
},
|
||||
"search.filter.locked.server-game-version.title": {
|
||||
"message": "يتم توفير نسخة اللعبة من قبل الخادم"
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "يتم توفير المحمّل من قبل الخادم"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,12 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Připojení k autorizačním serverům se nezdařilo"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Přidej popis modpacku..."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Všechna data z instance budou navždy smazána, včetně světů, nastavení a všeho ostatního."
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Nainstaluj ke hraní"
|
||||
},
|
||||
@@ -20,36 +26,15 @@
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Sdílená serverová instance"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} přidáno"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Přidáno"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Odebráno"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Aktualizováno"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Updatuj ke hraní"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} odstraněno"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Je vyžadována aktualizace"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Je nutná aktualizace ke hraní {name}. Prosím updatuj na nejnovější verzi k spuštění hry."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} aktualizováno"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Vývojářský režim povolen."
|
||||
},
|
||||
@@ -77,6 +62,9 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Správa zdrojů"
|
||||
},
|
||||
"app.update-popup.download": {
|
||||
"message": "Stáhnout ({size})"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "Kliknutím sem zobrazíte seznam změn."
|
||||
},
|
||||
@@ -191,12 +179,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Upravit svět"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Vypnuté projekty"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "K dispozice jsou aktualizace"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Adresa"
|
||||
},
|
||||
@@ -305,141 +287,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Instalace"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} pro Minecraft {game_version} již je nainstalována"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} již je nainstalována"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Změnit verzi"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Instalovat"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Instalování"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Načítání verzí modpacku"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Instalace nové verze"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Aktuálně nainstalováno"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Debugové informace:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Načítání detailů modpacku"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Verze hry"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Instalovat"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Probíhá instalace"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} verze"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Nelze načíst podrobnosti o modpacku. Prosím, zkontrolujte své připojení k internetu."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} není dostupný pro Minecraft {version}. Zkuste jiný mod loader."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Tato instalace je připojená k modpacku, který ake nebyl najit na Modrinthu."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Platforma"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Přeinstalovat modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Přeinstalovávání modpacku"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Přeinstalace resetuje veškerý nainstalovaný nebo upravený obsah kromě toho, co poskytuje modpack, a odstraní všechny módy nebo obsah, které jste přidali do původní instalace. To může opravit neočekávané chyby, ale pokud vaše světy závisejí na doinstalovaném obsahu, možná budou poškozeny."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Opravdu si přejete přeinstalovat tuto instalaci?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Obnoví obsah instance do původního stavu a odstraní všechny mody nebo obsah, které jste přidali nad původní modpack."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Přeinstalovat modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Opravit"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Opravováno"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Oprava přeinstaluje závislosti Minecraftu a zkontroluje poškození. To může vyřešit problémy, pokud se hra nespustí kvůli chybám souvisejícím s launcherem, ale nevyřeší to problémy nebo pády související s nainstalovanými mody."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Opravit instanci?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Probíhá oprava"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Resetovat na aktuální"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Ukázat všechny verze"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "změnit verzi"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "Instalovat"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "přeinstalovat"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "opravit"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Nelze {action} při instalaci"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Nelze {action} když offline"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Nelze {action} při opravě"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(neznámá verze)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Odpojit instanci"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Pokud budete pokračovat, nebudete ji moci znovu propojit bez vytvoření zcela nové instance. Již nebudete dostávat aktualizace modpacku a stane se z něj běžná instance."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Opravdu si přejete odpojit tuto instanci?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Tato instance je připojena k modpacku, což znamená, že módy nemohou být aktualizované a nelze změnit mod loader ani verze minecraftu. Odpojení permanentně rozváže tuto instanci od modpacku."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Odpojit od modpacku"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java a pamět"
|
||||
},
|
||||
@@ -543,9 +393,18 @@
|
||||
"message": "Verze hry je poskytnut instanci"
|
||||
},
|
||||
"search.filter.locked.instance-loader.title": {
|
||||
"message": "Spouštěč je poskytnut instanci"
|
||||
"message": "Spouštěč je poskytnut instancí"
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "Synchronizováno z instancí"
|
||||
},
|
||||
"search.filter.locked.server-environment.title": {
|
||||
"message": "Jen klientské mody mohou být přidány na server"
|
||||
},
|
||||
"search.filter.locked.server-game-version.title": {
|
||||
"message": "Verzi hry poskytuje server"
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader zprostředkovává server"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,81 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Kan ikke nå autentificeringsservere"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Indtast modpack beskrivelse..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Eksporter"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Eksporter modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Modpack Navn"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Modpack navn"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Vælg filer og mapper til at inkludere i pakken"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Versionsnummer"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Al' data for din instance vil blive permanent slettet, dette inkludere dine verdener, konfigurationer, og alt installeret indhold."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Denne handling kan ikke fortrydes"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Slet instance"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Slet instance"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "projekt"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Kopier link"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Installer..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Modpack"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" blev tilføjet"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} projekter blev tilføjet"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Tjek ud disse projekter jeg bruger i min modpack!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Deler modpack indhold"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Vis filer"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Uploadet"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Ukendt"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Opdatere..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Indhold krævet"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Installer for at spille"
|
||||
},
|
||||
@@ -14,39 +89,30 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} other {# mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Modpack krævet"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Denne server kræver mods for at spille. Tryk på installer for at sætte de krævet filler fra modrinth op, så lancer direkte til serveren."
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} tilføjet"
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Delt instance"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Tilføjet"
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Delt server instance"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Fjernet"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Opdateret"
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Vis indhold"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Opdater for at spille"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} fjernet"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Opdatering krævet"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "En opdatering er krævet for at spille {name}. Venligst opdater til den seneste version for at køre spillet."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} opdateret"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Udvikler-tilstand aktiveret."
|
||||
},
|
||||
@@ -74,6 +140,33 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Ressourcestyring"
|
||||
},
|
||||
"app.update-popup.body": {
|
||||
"message": "Modrinth App v{version} er klar til at blive installeret! Genindlæs for at opdatere nu, eller automatisk når du lukker Modrinth App."
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} er færdig med at download. Genindlæs for at opdatere nu, eller automatisk når du lukker Modrinth App."
|
||||
},
|
||||
"app.update-popup.body.linux": {
|
||||
"message": "Modrinth App v{version} er nu tilgængelig. Brug din pakke-manager til at opdatere for de nyeste features og fejlrettelser!"
|
||||
},
|
||||
"app.update-popup.body.metered": {
|
||||
"message": "Modrinth App v{version} er nu tilgængelig! Siden du er på et begrænset netværk, vi downloadede den ikke automatisk."
|
||||
},
|
||||
"app.update-popup.changelog": {
|
||||
"message": "Ændringslog"
|
||||
},
|
||||
"app.update-popup.download": {
|
||||
"message": "Download ({size})"
|
||||
},
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "Download færdiggjort"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "Geninlæs"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "Opdatering tilgængelig"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "Klik her for at vise ændringslog."
|
||||
},
|
||||
@@ -188,12 +281,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Rediger verden"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Deaktiverede projekter"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Tilgængelige opdateringer"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Adresse"
|
||||
},
|
||||
@@ -302,141 +389,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Installation"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} for Minecraft {game_version} er allerede installeret"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} er allerede installeret"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Skift version"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Installer"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Installer"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Får modpack versioner"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Installere ny version"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Lige nu installeret"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Debug information:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Får modpack detaljer"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Spil version"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Installer"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Installation igangværende"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} version"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Kan ikke få forbundet modpack detaljer. Venligst tjek din internet forbindelse."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} er ikke mulig at bruge for Minecraft {version}. Prøv en anden mod loader."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Denne instance er koblet til en modpack, men modpacken kunne ikke blive fundet på Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Platform"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Geninstaller modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Geninstallere modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Geninstallering vil nulstille alt installeret eller modificeret indhold givet af modpacken, fjerne alle mods eller indhold du har tilføjet ovenpå den originale installation. Dette vil måske fikse uforventet adfærd hvis ændringer er blevet lavet til den instance, men hvis din verdener nu afhænger af ektra tilføjet indhold, dette vil måske ødelægge eksisterende verdener."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Er du sikker på du vil geninstallere denne instance?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Nulstiller instanceens indhold til dens oprindelige tilstand, fjerne alle mods eller indhold du har tilføjet ovenpå den oprindelige modpack."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Geninstaller modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Reparer"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Reparere"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Reparering geninstaller Minecraft afhængigheder og tjekker for korruption. Dette vil måske fikse fejl hvis dit spil ikke køre på grund af launcher relateret fejl, men vil ikke fikse fejl eller crashes relateret til installerede mods."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Reparer instance?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Reparation i gang"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Nulstil til nuværende"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Vis alle versioner"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "Ændre version"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "Installer"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "Geninstaller"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "Reparer"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Kan ikke {action} under installation"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Kan ikke {action} uden internet"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Kan ikke {action} under reparation"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(Ukendt version)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Frakoble instance"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Hvis du forsætter, du vil ikke have mulighed for at koble sammen igen uden at lave en helt ny instance. Du vil ikke længere modtage modpack opdateringer og vil blive en normal."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Er du sikker på du vil frakoble denne instance?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Denne instance er forbundet til en modpack, hvilket betyder mods kan ikke blive opdateret og du kan ikke ændre mod loaderen eller Minecraft version. Frakobling vil permanent frakoble denne instance fra modpacken."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Frakoble fra modpack"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java og hukommelse"
|
||||
},
|
||||
@@ -509,6 +464,9 @@
|
||||
"instance.worlds.incompatible_server": {
|
||||
"message": "Serveren er uforenelig"
|
||||
},
|
||||
"instance.worlds.linked_server": {
|
||||
"message": "Styret af server projektet"
|
||||
},
|
||||
"instance.worlds.no_contact": {
|
||||
"message": "Serveren kunne ikke blive kontaktet"
|
||||
},
|
||||
@@ -544,5 +502,17 @@
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "Synkroniser med instance"
|
||||
},
|
||||
"search.filter.locked.server": {
|
||||
"message": "Givet af serveren"
|
||||
},
|
||||
"search.filter.locked.server-environment.title": {
|
||||
"message": "Kun klient-sided mods kan blive tilføjet til denne server instance"
|
||||
},
|
||||
"search.filter.locked.server-game-version.title": {
|
||||
"message": "Spille version er givet af serveren"
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader er givet af serveren"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,93 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Authentifizierungsserver sind nicht erreichbar"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Modpaketbeschreibung eingeben..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Exportieren"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Modpack exportieren"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Modpaketname"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Modpaketname"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Wähle Dateien und Ordner zum hinzufügen im Paket aus"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Versionsnummer"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Alle Daten deiner Instanz werden permanent gelöscht, inlusive deiner Welten, Konfigurationen und allen installierten Inhalten."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Diese Aktion kann nicht rückgängig gemacht werden"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Instanz löschen"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Instanz löschen"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Dieses Modpack ist bereits in der Instanz „{instanceName}“ installiert."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "Modpack duplizieren"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Trotzdem erstellen"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "Gehe zu Instanz"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Modpack bereits installiert"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "Projekt"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Link kopieren"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Wird installiert..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Modpaket"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" wurde hinzugefügt"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} Projekte wurden hinzugefügt"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Schau dir die Projekte, welche ich in meinem Modpaket nutze an!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Modpaketinhalte teilen"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Datei anzeigen"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Erfolgreich hochgeladen"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Unbekannt"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Wird aktualisiert..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Inhalte benötigt"
|
||||
},
|
||||
@@ -32,36 +119,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Inhalte ansehen"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} hinzuäfüägt"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Hinzugefügt"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Entfernt"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Aktualisiert"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Aktualisieren zum Spielen"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} entfernt"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Aktualisierung benötigt"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Eine aktualisierung zum spielen von {name} ist benötigt. Bitte aktualisiere auf die neuste Version um das Spiel zu starten."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} aktualisiert"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Entwicklermodus aktiviert."
|
||||
},
|
||||
@@ -150,10 +216,10 @@
|
||||
"message": "Modrinth Nutzernamen eingeben..."
|
||||
},
|
||||
"friends.add-friend.username.title": {
|
||||
"message": "Was ist der Modrinth Nutzername deines Freundes?"
|
||||
"message": "Was ist der Modrinth-Nutzername deines Freundes?"
|
||||
},
|
||||
"friends.add-friends-to-share": {
|
||||
"message": "<link>Füge Freunde hinzu</link> um zu sehen, was sie spielen!"
|
||||
"message": "<link>Füge Freunde hinzu</link>, um zu sehen, was sie spielen!"
|
||||
},
|
||||
"friends.friend.cancel-request": {
|
||||
"message": "Anfrage abbrechen"
|
||||
@@ -192,7 +258,7 @@
|
||||
"message": "{title} - {count}"
|
||||
},
|
||||
"friends.sign-in-to-add-friends": {
|
||||
"message": "<link>Logge dich in ein Modrinth Konto ein</link> um Freunde hinzuzufügen und zu sehen, was sie spielen!"
|
||||
"message": "<link>Logge dich in ein Modrinth Konto ein</link>, um Freunde hinzuzufügen und zu sehen, was sie spielen!"
|
||||
},
|
||||
"instance.add-server.add-and-play": {
|
||||
"message": "Ersteue u starte"
|
||||
@@ -230,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Welt bearbeiten"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Deaktivierte Projekte"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Updates verfügbar"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Adresse"
|
||||
},
|
||||
@@ -312,13 +372,13 @@
|
||||
"message": "Hooks ermöglichen es erfahrenen Benutzern, bestimmte Systembefehle vor und nach dem Start des Spiels auszuführen."
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit": {
|
||||
"message": "Nach dem Schliessen des Spiels"
|
||||
"message": "Nach dem Schließen des Spiels"
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit.description": {
|
||||
"message": "Wird nach dem Beenden des Spiels ausgeführt."
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit.enter": {
|
||||
"message": "Ausgeführter Befehl nach dem Beenden des Spiels eingeben..."
|
||||
"message": "Nach dem Beenden des Spiels auszuführenden Befehl eingeben..."
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch": {
|
||||
"message": "Vor Start des Spiels"
|
||||
@@ -344,150 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Installation"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} für Minecraft {game_version} ist bereits installiert"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} ist bereits installiert"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Version ändern"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Installieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Wird installiert"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Sammle Modpack-Versionen"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Neue Version wird installiert"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Aktuell installiert"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Informationen zur Fehlerbehebung:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Sammle Modpack-Details"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Spielversion"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Installieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Wird installiert"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} Version"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Kann Details für verknüpftes Modpack nicht abrufen. Bitte überprüfe deine Internerverbindung."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} ist nicht verfügbar für Minecraft {version}. Versuch einen anderen Modloader."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Diese Instanz ist mit einem Modpack verknüpft, aber das Modpack konnte nicht auf Modrinth gefunden werden."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Platform"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Modpack neu installieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Modpack wird neu installiert"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Durch die Neuinstallation werden alle installierten oder geänderten Inhalte auf die vom Modpack bereitgestellten Inhalte zurückgesetzt, wobei alle Mods oder Inhalte entfernt werden, die zusätzlich zur ursprünglichen Installation hinzugefügt wurden. Dies kann unerwartetes Verhalten beheben, wenn Änderungen an der Instanz vorgenommen wurden. Wenn deine Welten jedoch von zusätzlich installierten Inhalten abhängig sind, kann dies zu Fehlern in bestehenden Welten führen."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Bist du sicher, dass du diese Instanz neu installieren willst?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Setzt den Inhalt der Instanz auf seinen ursprünglichen Zustand zurück und entfernt all Mods oder Inhalte, welche zusätzlich zum ursprünglichen Modpack hinzugefügt wurden."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Modpack neu installieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Reparieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Wird repariert"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Das reparieren installier Minecraft-Abhängigkeiten neu und überprüft für Beschädigungen. Dies kann Probleme beheben, sofern dein Spiel aufgrund von Launcher-relevanten Problemen nicht startet, aber es kann nicht Fehler und Abstpürze in Zusammenhang mit installierten Mods beheben."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Instanz reparieren?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Wird repariert"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Auf aktuellen Wert zurücksetzen"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Alle Versionen anzeigen"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "Version ändern"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "Installieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "Neuinstallieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "Reparieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "{action} während der Installation nicht möglich"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "{action} nicht möglich ohne Internetverbindung"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "{action} während reparatur nicht möglich"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(unbekannte Version)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Diese Instanz ist mit einem Server verknüpft, was bedeutet, dass du die Minecraft Version nicht ändern kannst. Das trennen der Verknüpfung trennt diese Instanz permanent vom Server."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Diese Instanz ist mit einem Server verknüpft, was bedeutet, dass du Mods nicht aktualisieren, und den Modloader oder die Minecraft Version nicht ändern kannst. Das trennen der Verknüpfung trennt diese Instanz permanent vom Server."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Serververknüpfung trennen"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Verlinking der Instanz trennen"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Wenn du fortfährst, kann die Instanz nicht erneut verknüpft werden, ohne eine komplett neue Instanz zu ersztellen. Du erhälst keine Modpack-Updates mehr und es wird zu einer normalen Instanz."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Bist du sicher, dass du die Verknüpfung dieser Instanz trennen willst?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Diese Instanz ist mit einem Modpack verknüpft. Dies bedeutet, dass Mods nicht aktualisiert werden können, und dass du den Modloader oder die Minecraft Versionen nicht ändern kannst. Durch das trennen der Verknüpfung wird die Instanz permanent vom Modpack getrennt."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Verknüpfung vom Modpack trennen"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java und Arbeitsspeicher"
|
||||
},
|
||||
@@ -516,13 +435,13 @@
|
||||
"message": "Vollbild"
|
||||
},
|
||||
"instance.settings.tabs.window.fullscreen.description": {
|
||||
"message": "Startet das Spiel im Vollbildmodus (durch verwenden von options.txt)."
|
||||
"message": "Startet das Spiel im Vollbildmodus (mithilfe von options.txt)."
|
||||
},
|
||||
"instance.settings.tabs.window.height": {
|
||||
"message": "Höhe"
|
||||
},
|
||||
"instance.settings.tabs.window.height.description": {
|
||||
"message": "Die höhe des Spielfensters beim Start."
|
||||
"message": "Die Höhe des Spielfensters beim Start."
|
||||
},
|
||||
"instance.settings.tabs.window.height.enter": {
|
||||
"message": "Höhe eingeben..."
|
||||
@@ -537,7 +456,7 @@
|
||||
"message": "Breite eingeben..."
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Ä Minecraft-Server"
|
||||
"message": "Ein Minecraft-Server"
|
||||
},
|
||||
"instance.worlds.cant_connect": {
|
||||
"message": "Verbindung mit Server nicht möglich"
|
||||
@@ -558,7 +477,7 @@
|
||||
"message": "Hardcore-Modus"
|
||||
},
|
||||
"instance.worlds.incompatible_server": {
|
||||
"message": "Server ist inkompatibel"
|
||||
"message": "Server ist nicht kompatibel"
|
||||
},
|
||||
"instance.worlds.linked_server": {
|
||||
"message": "Von Serverprojekt verwaltet"
|
||||
@@ -567,10 +486,10 @@
|
||||
"message": "Server konnte nicht erreicht werden"
|
||||
},
|
||||
"instance.worlds.no_server_quick_play": {
|
||||
"message": "Du kannst nur in Minecraft Alpha 1.0.5 und neuer direkt einem Server beitreten"
|
||||
"message": "Du kannst nur mit Minecraft Alpha 1.0.5 und neuer einem Server direkt beitreten"
|
||||
},
|
||||
"instance.worlds.no_singleplayer_quick_play": {
|
||||
"message": "Du kannst nur in Minecraft 1.20 und neuer einer Einzelspieler-Welt beitreten"
|
||||
"message": "Du kannst nur mit Minecraft 1.20 und neuer einer Einzelspieler-Welt direkt beitreten"
|
||||
},
|
||||
"instance.worlds.play_instance": {
|
||||
"message": "Instanz Spielen"
|
||||
@@ -585,30 +504,30 @@
|
||||
"message": "Instanz anzeigen"
|
||||
},
|
||||
"instance.worlds.world_in_use": {
|
||||
"message": "Welt bereits in benutzung"
|
||||
"message": "Welt bereits in Benutzung"
|
||||
},
|
||||
"search.filter.locked.instance": {
|
||||
"message": "Von der Instanz bereitgestellt"
|
||||
"message": "Von der Instanz vorgegeben"
|
||||
},
|
||||
"search.filter.locked.instance-game-version.title": {
|
||||
"message": "Spielversion ist von der Instanz bereitgestellt"
|
||||
"message": "Spielversion ist von der Instanz vorgegeben"
|
||||
},
|
||||
"search.filter.locked.instance-loader.title": {
|
||||
"message": "Loader ist von der Instanz bereitgestellt"
|
||||
"message": "Loader ist von der Instanz vorgegeben"
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "Mit Instanz synchronisieren"
|
||||
},
|
||||
"search.filter.locked.server": {
|
||||
"message": "Von Server bereitgestellt"
|
||||
"message": "Vom Server bereitgestellt"
|
||||
},
|
||||
"search.filter.locked.server-environment.title": {
|
||||
"message": "Nur Clientseitige Mods können der Serverinstanz hinzugefügt werden"
|
||||
},
|
||||
"search.filter.locked.server-game-version.title": {
|
||||
"message": "Spielversion vom Server bereitgestellt"
|
||||
"message": "Spielversion wird vom Server bereitgestellt"
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader vom Server bereitgestellt"
|
||||
"message": "Loader wird vom Server bereitgestellt"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,93 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Authentifizierungsserver sind nicht erreichbar"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Beschreibung des Modpacks eingeben..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Exportieren"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Modpack exportieren"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Modpackname"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Modpackname"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Wähle Dateien und Ordner aus, die in das Paket sollen"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Versionsnummer"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Alle Daten für deine Instanz werden permanent gelöscht, einschließlich deiner Welten, Konfigurationen und allen installierten Inhalten."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Diese Aktion kann nicht rückgängig gemacht werden"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Instanz löschen"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Instanz löschen"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Dieses Modpack ist bereits in der Instanz „{instanceName}“ installiert."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "Modpack duplizieren"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Trotzdem erstellen"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "Gehe zu Instanz"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Modpack bereits installiert"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "Projekt"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Link kopieren"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Wird installiert..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Modpack"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" wurde hinzugefügt"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} Projekte wurden hinzugefügt"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Schau dir die Projekte an, die ich in meinem Modpack verwende!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Modpackinhalte teilen"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Datei anzeigen"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Erfolgreich hochgeladen"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Unbekannt"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Wird aktualisiert..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Inhalte benötigt"
|
||||
},
|
||||
@@ -21,7 +108,7 @@
|
||||
"message": "Benötigtes Modpack"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Dieser Server benötigt Mods zum Spielen. Klicke auf Installieren um die nötigen Dateien von Modrinth herunterzuladen und dannach direkt dem Server beizutreten."
|
||||
"message": "Dieser Server benötigt Mods zum Spielen. Klicke auf Installieren um die nötigen Dateien von Modrinth herunterzuladen und danach direkt dem Server beizutreten."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Geteilte Instanz"
|
||||
@@ -32,36 +119,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Inhalte ansehen"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} hinzugefügt"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Hinzugefügt"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Entfernt"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Aktualisiert"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Aktualisieren zum Spielen"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} entfernt"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Aktualisierung erforderlich"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Zum Spielen von {name} ist eine Aktualisierung erforderlich. Bitte aktualisiere auf die neueste Version, um das Spiel zu starten."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} aktualisiert"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Entwicklermodus aktiviert."
|
||||
},
|
||||
@@ -93,7 +159,7 @@
|
||||
"message": "Modrinth App v{version} ist bereit zur Installation! Neu laden, um jetzt zu aktualisieren, oder automatisch, wenn du die Modrinth App schließt."
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} wurde heruntergeladen. Neu laden, um jetzt zu aktualisieren, oder automatisch, wenn du die Modrinth App schließt."
|
||||
"message": "Modrinth App v{version} wurde heruntergeladen. Neu laden, um jetzt zu aktualisieren, oder automatisch aktualisieren, wenn du die Modrinth App schließt."
|
||||
},
|
||||
"app.update-popup.body.linux": {
|
||||
"message": "Modrinth App v{version} ist verfügbar. Verwende deinen Paketmanager, um die neuesten Funktionen und Fehlerbehebungen zu installieren!"
|
||||
@@ -230,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Welt bearbeiten"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Deaktivierte Projekte"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Updates verfügbar"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Adresse"
|
||||
},
|
||||
@@ -344,150 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Installation"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} für Minecraft {game_version} bereits installiert"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} ist bereits installiert"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Version ändern"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Installieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Wird installiert"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Modpack-Versionen werden abgerufen"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Neue Version wird installiert"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Derzeit installiert"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Informationen für die Fehlerbehebung:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Modpack-Details werden abgerufen"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Spielversion"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Installieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Installation im Gange"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} Version"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Die Details des verknüpften Modpacks können nicht abgerufen werden. Bitte überprüfe deine Internetverbindung."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} ist nicht für Minecraft {version} verfügbar. Versuche einen anderen Modloader."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Diese Instanz ist mit einem Modpack verknüpft, aber das Modpack konnte auf Modrinth nicht gefunden werden."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Plattform"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Modpack neu installieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Modpack wird neu installiert"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Eine Neuinstallation setzt alle installierten oder geänderten Inhalte auf den Zustand zurück, der vom Modpack bereitgestellt wird, und entfernt alle Mods oder Inhalte, die du zusätzlich zur ursprünglichen Installation hinzugefügt hast.\nDies kann unerwartetes Verhalten beheben, falls Änderungen an der Instanz vorgenommen wurden. Wenn deine Welten jedoch von zusätzlich installierten Inhalten abhängen, kann dies bestehende Welten beschädigen."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Bist du dir sicher, dass du diese Instanz neu installieren willst?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Setzt den Inhalt der Instanz auf den ursprünglichen Zustand zurück und entfernt alle Mods oder Inhalte, die du zusätzlich zum ursprünglichen Modpack hinzugefügt hast."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Modpack neu installieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Reparieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Wird repariert"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Durch die Reparatur werden die Abhängigkeiten von Minecraft neu installiert und auf Beschädigungen überprüft. Dies kann Probleme beheben, wenn Minecraft aufgrund von Fehlern im Launcher nicht startet, löst jedoch keine Probleme oder Abstürze im Zusammenhang mit installierten Mods."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Instanz reparieren?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Reparatur im Gange"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Auf aktuellen Stand zurücksetzen"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Alle Versionen anzeigen"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "Version ändern"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "Installieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "Neuinstallieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "Reparieren"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "{action} während der Installation nicht möglich"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "{action} offline nicht möglich"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "{action} während der Reparation nicht möglich"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(unbekannte Version)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Diese Instanz ist mit einem Server verknüpft, was bedeutet, dass du die Minecraft-Version nicht ändern kannst. Durch das Aufheben der Verknüpfung wird diese Instanz dauerhaft vom Server getrennt."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Diese Instanz ist mit einem Server verknüpft, was bedeutet, dass Mods nicht aktualisiert werden können und du den Mod-Loader oder die Minecraft-Version nicht ändern kannst. Durch das Aufheben der Verknüpfung wird diese Instanz dauerhaft vom Server getrennt."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Vom Server trennen"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Verknüpfung der Instanz trennen"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Wenn du fortfährst, kannst du sie nicht erneut verknüpfen, ohne eine völlig neue Instanz zu erstellen. Du wirst keine Modpack-Updates mehr erhalten, und sie wird zu einer normalen Instanz."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Möchtest du die Verknüpfungen dieser Instanz wirklich trennen?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Diese Instanz ist mit einem Modpack verknüpft. Das bedeutet, dass Mods nicht aktualisiert werden können und der Mod-Loader oder die Minecraft-Version nicht geändert werden können. Durch das Aufheben der Verknüpfung wird die Instanz dauerhaft vom Modpack getrennt."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Verknüpfung vom Modpack trennen"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java und Arbeitsspeicher"
|
||||
},
|
||||
|
||||
@@ -5,6 +5,39 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Cannot reach authentication servers"
|
||||
},
|
||||
"app.browse.add-server-to-instance": {
|
||||
"message": "Add server to instance"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "Add servers to your instance"
|
||||
},
|
||||
"app.browse.add-to-instance": {
|
||||
"message": "Add to instance"
|
||||
},
|
||||
"app.browse.add-to-instance-name": {
|
||||
"message": "Add to {instanceName}"
|
||||
},
|
||||
"app.browse.added": {
|
||||
"message": "Added"
|
||||
},
|
||||
"app.browse.already-added": {
|
||||
"message": "Already added"
|
||||
},
|
||||
"app.browse.discover-content": {
|
||||
"message": "Discover content"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Discover servers"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Hide added servers"
|
||||
},
|
||||
"app.browse.hide-installed-content": {
|
||||
"message": "Hide installed content"
|
||||
},
|
||||
"app.browse.install-content-to-instance": {
|
||||
"message": "Install content to instance"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Enter modpack description..."
|
||||
},
|
||||
@@ -41,18 +74,21 @@
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Delete instance"
|
||||
},
|
||||
"app.instance.modpack-already-installed.body": {
|
||||
"message": "This modpack is already installed in the <bold>{instanceName}</bold> instance. Are you sure you want to duplicate it?"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create": {
|
||||
"message": "Create"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Modpack already installed"
|
||||
},
|
||||
"app.instance.modpack-already-installed.instance": {
|
||||
"message": "Instance"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "project"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Copy link"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Installing..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Modpack"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" was added"
|
||||
},
|
||||
@@ -65,17 +101,53 @@
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Sharing modpack content"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Show file"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Successfully uploaded"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Unknown"
|
||||
"app.instance.worlds.add-server": {
|
||||
"message": "Add server"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Updating..."
|
||||
"app.instance.worlds.browse-servers": {
|
||||
"message": "Browse servers"
|
||||
},
|
||||
"app.instance.worlds.delete-world-description": {
|
||||
"message": "'{name}' will be **permanently deleted**, and there will be no way to recover it."
|
||||
},
|
||||
"app.instance.worlds.delete-world-title": {
|
||||
"message": "Are you sure you want to permanently delete this world?"
|
||||
},
|
||||
"app.instance.worlds.filter-modded": {
|
||||
"message": "Modded"
|
||||
},
|
||||
"app.instance.worlds.filter-offline": {
|
||||
"message": "Offline"
|
||||
},
|
||||
"app.instance.worlds.filter-online": {
|
||||
"message": "Online"
|
||||
},
|
||||
"app.instance.worlds.filter-vanilla": {
|
||||
"message": "Vanilla"
|
||||
},
|
||||
"app.instance.worlds.no-worlds-description": {
|
||||
"message": "Add a server or browse to get started"
|
||||
},
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "No servers or worlds added"
|
||||
},
|
||||
"app.instance.worlds.remove-server-description": {
|
||||
"message": "'{name}' will be removed from your list, including in-game, and there will be no way to recover it."
|
||||
},
|
||||
"app.instance.worlds.remove-server-description-with-address": {
|
||||
"message": "'{name}' ({address}) will be removed from your list, including in-game, and there will be no way to recover it."
|
||||
},
|
||||
"app.instance.worlds.remove-server-title": {
|
||||
"message": "Are you sure you want to remove {name}?"
|
||||
},
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Search {count} worlds..."
|
||||
},
|
||||
"app.instance.worlds.this-server": {
|
||||
"message": "this server"
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Content required"
|
||||
@@ -182,6 +254,24 @@
|
||||
"app.update.reload-to-update": {
|
||||
"message": "Reload to install update"
|
||||
},
|
||||
"app.world.server-modal.placeholder-address": {
|
||||
"message": "example.modrinth.gg"
|
||||
},
|
||||
"app.world.server-modal.select-an-option": {
|
||||
"message": "Select an option"
|
||||
},
|
||||
"app.world.world-item.incompatible-version": {
|
||||
"message": "Incompatible version {version}"
|
||||
},
|
||||
"app.world.world-item.not-played-yet": {
|
||||
"message": "Not played yet"
|
||||
},
|
||||
"app.world.world-item.offline": {
|
||||
"message": "Offline"
|
||||
},
|
||||
"app.world.world-item.players-online": {
|
||||
"message": "{count} online"
|
||||
},
|
||||
"friends.action.add-friend": {
|
||||
"message": "Add a friend"
|
||||
},
|
||||
@@ -281,6 +371,12 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Edit world"
|
||||
},
|
||||
"instance.files.adding-files": {
|
||||
"message": "Adding files ({completed}/{total})"
|
||||
},
|
||||
"instance.files.save-as": {
|
||||
"message": "Save as..."
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Address"
|
||||
},
|
||||
@@ -452,9 +548,6 @@
|
||||
"instance.worlds.dont_show_on_home": {
|
||||
"message": "Don't show on Home"
|
||||
},
|
||||
"instance.worlds.filter.available": {
|
||||
"message": "Available"
|
||||
},
|
||||
"instance.worlds.game_already_open": {
|
||||
"message": "Instance is already open"
|
||||
},
|
||||
@@ -479,12 +572,6 @@
|
||||
"instance.worlds.play_instance": {
|
||||
"message": "Play instance"
|
||||
},
|
||||
"instance.worlds.type.server": {
|
||||
"message": "Server"
|
||||
},
|
||||
"instance.worlds.type.singleplayer": {
|
||||
"message": "Singleplayer"
|
||||
},
|
||||
"instance.worlds.view_instance": {
|
||||
"message": "View instance"
|
||||
},
|
||||
|
||||
@@ -5,6 +5,93 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "No se puede acceder a los servidores de autenticación"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Escribe la descripción del modpack..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Exportar"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Exportar modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Nombre del modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Nombre del modpack"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Seleccione archivos y carpetas para incluir en el paquete"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Número de versión"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Todos los datos de su instancia se eliminarán permanentemente, incluidos sus mundos, configuraciones y todo el contenido instalado."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Esta acción no se puede deshacer"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Eliminar instancia"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Eliminar instancia"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Este modpack ya está instalado en la instancia \"{instanceName}\"."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "Modpack duplicado"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Crea de todos modos"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "Ir a la instancia"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Modpack ya está instalado"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "proyecto"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Copiar enlace"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Instalando..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Modpack"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "Se ha añadido \"{name}\""
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "Se han añadido {count} proyectos"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "¡Echa un vistazo a los proyectos que utilizo en mi modpack!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Compartir contenido del modpack"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Mostrar archivo"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Se ha subido correctamente"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Desconocido"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Actualizando..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Contenido requerido"
|
||||
},
|
||||
@@ -32,36 +119,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Ver contenidos"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} agregados"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Se agregó"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Se eliminó"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Actualizado"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Actualiza para jugar"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} eliminados"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Actualización requerida"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Se requiere una actualización para jugar {name}. Por favor, actualiza a la versión más reciente para iniciar el juego."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} actualizados"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Modo desarrollador activado."
|
||||
},
|
||||
@@ -230,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Editar mundo"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Proyectos desactivados"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Actualizaciones disponibles"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Dirección IP"
|
||||
},
|
||||
@@ -344,150 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Instalación"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} ya está instalado para Minecraft {game_version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} ya está instalada"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Cambiar versión"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Instalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Instalando"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Obteniendo versiones del modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Instalando nueva versión"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Actualmente instalado"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Información de depuración:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Obteniendo detalles del modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Versión del juego"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Instalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Instalación en progreso"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Versión de {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "No se pueden obtener los detalles del modpack vinculado. Por favor, verifica tu conexión a internet."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} no está disponible para Minecraft {version}. Prueba con otro mod loader."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Esta instancia está vinculada a un modpack, pero no se pudo encontrar el modpack en Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Plataforma"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Reinstalar modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Reinstalando modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "La reinstalación restablecerá todo el contenido instalado o modificado a lo que proporciona el modpack, eliminando cualquier mod o contenido que hayas agregado sobre la instalación original. Esto puede solucionar comportamientos inesperados si se han hecho cambios en la instancia, pero si tus mundos dependen de contenido adicional instalado, podría romper los mundos existentes."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "¿Estás seguro de que quieres reinstalar esta instancia?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Restablece el contenido de la instancia a su estado original, eliminando cualquier mod o contenido que hayas agregado sobre el modpack original."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Reinstalar modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Reparar"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Reparando"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Reparar reinstala las dependencias de Minecraft y verifica la integridad de los archivos. Esto puede solucionar problemas si tu juego no se inicia por errores relacionados con el launcher, pero no resolverá problemas debidos a mods instalados."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "¿Reparar instancia?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Reparación en proceso..."
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Restablecer al actual"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Mostrar todas las versiones"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "cambiar versión"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "instalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "reinstalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "reparar"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "No se puede {action} mientras se está instalando"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "No se puede {action} mientras estés desconectado"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "No se puede {action} mientras se está reparando"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(versión desconocida)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Esta instancia está vinculada a un servidor, lo que significa que no puedes cambiar la versión de Minecraft. Desvincularla la desconectará permanentemente del servidor."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Esta instancia está vinculada a un servidor, lo que significa que los mods no pueden actualizarse y no puedes cambiar el mod loader ni la versión de Minecraft. Desvincularla la desconectará permanentemente del servidor."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Desvincular del servidor"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Desvincular instancia"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Si continúas, no podrás volver a vincularla sin crear una nueva instancia. Ya no recibirás actualizaciones del modpack y pasará a ser una instancia normal."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "¿Estás seguro de que quieres desvincular esta instancia?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Esta instancia está vinculada a un modpack, lo que significa que los mods no pueden actualizarse y no puedes cambiar el mod loader ni la versión de Minecraft. Desvincularla la desconectará permanentemente del modpack."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Desvincular del modpack"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java y memoria"
|
||||
},
|
||||
|
||||
@@ -5,8 +5,95 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "No se puede conectar con los servidores de autenticación"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Escribe la descripción del modpack..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Exportar"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Exportar modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Nombre del modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Nombre del modpack"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Seleccione archivos y carpetas para incluir en el paquete"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Número de versión"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Todos los datos de su instancia se eliminarán permanentemente, incluidos sus mundos, configuraciones y todo el contenido instalado."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Esta acción no se puede deshacer"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Eliminar instancia"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Eliminar instancia"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Este modpack ya está instalado en la instancia \"{instanceName}\"."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "Modpack duplicado"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Crea de todos modos"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "Ir a la instancia"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Modpack ya está instalado"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "proyecto"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Copiar enlace"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Instalando..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Modpack"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "Se ha añadido \"{name}\""
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "Se han añadido {count} proyectos"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "¡Echa un vistazo a los proyectos que utilizo en mi modpack!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Compartir contenido del modpack"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Mostrar archivo"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Se ha subido correctamente"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Desconocido"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Actualizando..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Contenu requis"
|
||||
"message": "Contenido obligatorio"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Instala para jugar"
|
||||
@@ -17,42 +104,30 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} other {# mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Modpack requerido"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Este servidor requiere ciertos mods. Pulsa Instalar para instalar los archivos requeridos de Modrinth y luego el Launcher te enviara directo al servidor."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Instancia compartida"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Instancia de servidor compartida"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} añadidos"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Añadido"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Eliminado"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Actualizado"
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Ver contenido"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Actualiza para jugar"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} eliminados"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Actualización requerida"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Una actualización es requerida para jugar {name}. Por favor actualízala a la versión más reciente para ejecutar el juego."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} actualizados"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Modo desarrollador activado."
|
||||
},
|
||||
@@ -80,6 +155,33 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Gestión de recursos"
|
||||
},
|
||||
"app.update-popup.body": {
|
||||
"message": "¡La versión v{version} de Modrinth está lista para instalarse! Actualiza ahora o automáticamente al cerrar la aplicación."
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} se ha descargado. Actualiza la página ahora o espera a que se actualice automáticamente al cerrar Modrinth App."
|
||||
},
|
||||
"app.update-popup.body.linux": {
|
||||
"message": "Ya está disponible Modrinth App v{version}. ¡Utiliza tu gestor de paquetes para actualizarla y disfrutar de las últimas funciones y correcciones!"
|
||||
},
|
||||
"app.update-popup.body.metered": {
|
||||
"message": "¡Modrinth App v{version} ya está disponible! Como estás conectado a una red con tarifa por datos, no la hemos descargado automáticamente."
|
||||
},
|
||||
"app.update-popup.changelog": {
|
||||
"message": "Registro de cambios"
|
||||
},
|
||||
"app.update-popup.download": {
|
||||
"message": "Descarga ({size})"
|
||||
},
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "Descarga completada"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "Recargar"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "Actualización disponible"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "Haga clic aquí para ver el registro de cambios."
|
||||
},
|
||||
@@ -194,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Editar mundo"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Desactivar proyectos"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Actualizaciones disponibles"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Dirección IP"
|
||||
},
|
||||
@@ -308,141 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Instancia"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} para Minecraft {game_version} ya está instalada"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "La versión vanilla {game_version} ya está instalada"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Cambiar versión"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Instalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Instalando"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Buscando versiones del modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Instalando versión nueva"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Instalado actualmente"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Información de debug:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Buscando detalles del modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Versión del juego"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Instalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Instalación en progreso"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} versión"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "No se puede buscar los detalles del modpack enlazado. Por favor revise su conexión a internet."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} no está disponible para Minecraft {version}. Prueba con otro cargador."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "La instancia está enlazada a un modpack, pero el modpack no se ha podido encontrar en Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Plataforma"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Reinstalar modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Reinstalando modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Reinstalar reiniciará todo el contenido instalado o modificado a lo que el modpack proporcione, quitando cualquier mod o contenido que hayas añadido por encima de la instalación original. Esto puede arreglar actividad inesperada, pero si los mundos dependen del contendio adicional instalado, puede romperlos. "
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "¿Estás seguro de que quieres reinstalar esta instancia?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Reinicia el contenido de la instancia a su estado original, quitando cualquier mod o contenido que hayas añadido por encima del modpack original."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Reinstalar modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Reparar"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Reparando"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Reparando reinstalaciones Minecraft dependencias y buscando corrupciones. Esto podría solucionar problemas si tu juego no se está abriendo debido a errores relacionados con el launcher, pero no solucionará problemas o crashes relacionados con mods instalados."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "¿Reparar instancia?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Reparación en progreso"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Reiniciar a actual"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Mostrar todas las versiones"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "cambiar versión"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "instalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "reinstalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "reparar"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "No se puede {action} mientras se está instalando."
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "No se puede {action} sin conexión"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "No se puede {action} reparando"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(versión desconocida)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Desvincular instancia"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Si procedes, no podrás re-vincular sin crear una nueva instancia. No recibirás actualizaciones del modpack y se convertira en uno normal."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "¿Estás seguro de que quieres desvincular esta instancia?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "La instancia está vinculada a un modpack, lo que significa que los mods no pueden ser actualizados y no puedes cambiar el mod loader o la versión de Minecraft. Desvincular desconectará permanentemente esta instancia del modpack."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Desvincular del modpack"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java y memoria"
|
||||
},
|
||||
@@ -515,6 +479,9 @@
|
||||
"instance.worlds.incompatible_server": {
|
||||
"message": "Servidor es incompatible"
|
||||
},
|
||||
"instance.worlds.linked_server": {
|
||||
"message": "Gestionado por el proyecto del servidor"
|
||||
},
|
||||
"instance.worlds.no_contact": {
|
||||
"message": "No se pudo contactar con el servidor"
|
||||
},
|
||||
@@ -550,5 +517,17 @@
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "Sincronizar con la instancia"
|
||||
},
|
||||
"search.filter.locked.server": {
|
||||
"message": "Proporcionado por el servidor"
|
||||
},
|
||||
"search.filter.locked.server-environment.title": {
|
||||
"message": "Solo se pueden añadir a la instancia del servidor modificaciones del lado del cliente"
|
||||
},
|
||||
"search.filter.locked.server-game-version.title": {
|
||||
"message": "La versión del juego es proporcionada por el servidor"
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "El cargador lo proporciona el servidor"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,27 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Todennuspalvelimiin ei saada yhteyttä"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Modpack nimi"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Valitse tiedostot ja kansiot pakettiin"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Versio numero"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" lisättiin"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} projektia lisättiin"
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Sisältö vaaditaan"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Asenna pelataksesi"
|
||||
},
|
||||
@@ -12,7 +33,13 @@
|
||||
"message": "Asenna"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} other {# modia}}"
|
||||
"message": "one {{count, plural, one {# mod} other {# modia}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Vaadittu modipaketti"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Tämä palvelin vaatii modeja toimiakseen. Klikkaa Asenna ladataksesi vaaditut tiedostot Modrinthista, ja käynnistä peli suoraan palvelimelle."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Jaettu instanssi"
|
||||
@@ -20,36 +47,18 @@
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Jaettu palvelininstanssi"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} lisätty"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Lisätty"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Poistettu"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Päivitetty"
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Tarkastele sisältöä"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Päivitä pelataksesi"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} poistettu"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Päivitys vaaditaan"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Pävitys vaaditaan pelataksesi {name}. Päivitä viimeisimpään versioon pelataksesi."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} päivitetty"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Kehittäjätila käytössä."
|
||||
},
|
||||
@@ -77,6 +86,33 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Resurssien hallinta"
|
||||
},
|
||||
"app.update-popup.body": {
|
||||
"message": "Modrinth App versio {version} on valmis asennettavaksi. Voit käynnistää sovelluksen uudelleen päivittääksesi heti tai antaa päivityksen asentua automaattisesti, kun suljet Modrinth Appin."
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App versio {version} on ladattu. Voit käynnistää sovelluksen uudelleen päivittääksesi heti tai antaa päivityksen asentua automaattisesti, kun suljet Modrinth Appin."
|
||||
},
|
||||
"app.update-popup.body.linux": {
|
||||
"message": "Modrinth App versio {version} on saatavilla. Käytä paketinhallintasi ja päivitä käyttääksesi uusimpia ominaisuuksia ja korjauksia!"
|
||||
},
|
||||
"app.update-popup.body.metered": {
|
||||
"message": "Modrinth App versio {version} on nyt saatavilla! Koska käytät käytön mukaan laskutettavaa verkkoa, emme ladannut sitä automaattisesti."
|
||||
},
|
||||
"app.update-popup.changelog": {
|
||||
"message": "Muutosloki"
|
||||
},
|
||||
"app.update-popup.download": {
|
||||
"message": "Lataa ({size})"
|
||||
},
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "Lataus valmis"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "Lataa uudelleen"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "Päivitys saatavilla"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "Klikkaa tästä nähdäksesi muutoslokin."
|
||||
},
|
||||
@@ -191,12 +227,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Muokkaa maailmaa"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Käytöstä poistetut projektit"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Päivityksia saatavilla"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Osoite"
|
||||
},
|
||||
@@ -231,7 +261,7 @@
|
||||
"message": "Ei pystytä monistamaan asennettaessa."
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-instance": {
|
||||
"message": "Monista instanssi"
|
||||
"message": "Monista asennus"
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-instance.description": {
|
||||
"message": "Luo kopion tästä instanssista sekä kaikista sen maailmoista, asetuksista, modeista yms."
|
||||
@@ -305,141 +335,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Asennus"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} Minecraft versiolle {game_version} on jo asennettu"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} on jo asennettu"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Vaihda versiota"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Asenna"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Asennetaan"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Noudetaan modipaketin versioita"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Asennetaan uutta versiota"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Asennettuna"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Virheenkorjaus informaatio:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Noudetaan modipaketin tietoja"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Peli versio"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Asenna"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Asennus käynnissä"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} versio"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Ei voida noutaa linkatun modipaketin tietoja. Tarkista internet yhteytesi."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} ei ole saatavilla Minecraft versiolle {version}. Kokeile toista modi lataajaa."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Tämä instanssi on linkitetty modipakettiin, mutta modipakettia ei löydetty Modrinthista."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Alusta"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Asenna modipaketti uudelleen"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Asennetaan modipakettia uudelleen"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Uudelleen asentaminen palauttaa kaiken asennetun tai muokatun sisällön siihen muotoon missä se on modipaketissa poistaen kaikki modit ja muun sisällön mitä olet lisännyt alkuperäisen asennuksen päälle. Tämä saattaa korjata odottamatonta käytöstä mikäli instanssia on muokattu mutta jos maailmasi ovat nyt riippuvaisia lisätystä sisällöstä se saattaa rikkoa olemassa olevia maailmoja."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Haluatko varmasti asentaa tämän instanssin uudelleen?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Palauttaa instanssin sisällön alkuperäiseen muotoonsa poistaen kaikki modit tai muun sisällön mitä olet lisännyt alkuperäisen modipaketin päälle."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Asenna modipaketti uudelleen"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Korjaa"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Korjataan"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Korjaaminen uudelleen asentaa Minecraftin riippuvuuksia ja tarkistaa korruptiota varten. Tämä saattaa ratkaista ongelmia jos pelisi ei käynnisty launcheriin liittyvien virheiden takia mutta ei ratkaise ongelmia tai kaatumisia liittyen ladattuihin modeihin."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Korjaa instanssi?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Korjaus käynnissä"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Palauta nykyiseen"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Näytä kaikki versiot"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "vaihda versiota"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "asenna"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "asenna uudelleen"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "korjaa"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Et voi {action} asentaessa"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Toimintoa {action} ei voida suorittaa offline tilassa"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Et voi {action} korjatessa"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(tuntematon versio)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Poista instanssin linkitys"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Jos jatkat et voi uudelleen linkata sitä ilman että luot täysin uuden instanssin. Et vastaanota enää modipaketti päivityksiä ja siitä tulee normaali."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Oletko varma että haluat poistaa tämän instanssin linkityksen?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Tämä instanssi on linkitetty modipakettin joka tarkoittaa että modeja ei voida päivittää etkä voi vaihtaa lataaja tai Minecraft versiota. Linkityksen poistaminen katkaisee pysyvästi yhteyden instanssin ja modipaketin välillä."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Poista linkitys modipakettiin"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java ja muisti"
|
||||
},
|
||||
@@ -512,6 +410,9 @@
|
||||
"instance.worlds.incompatible_server": {
|
||||
"message": "Palvelin on yhteensopimaton"
|
||||
},
|
||||
"instance.worlds.linked_server": {
|
||||
"message": "Palvelimen projektin hallinnoima"
|
||||
},
|
||||
"instance.worlds.no_contact": {
|
||||
"message": "Palvelimeen ei saatu yhteyttä"
|
||||
},
|
||||
@@ -546,6 +447,18 @@
|
||||
"message": "Lataajan antaa instanssi"
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "Synkkaa instanssin kanssa"
|
||||
"message": "Synkronoi instanssin kanssa"
|
||||
},
|
||||
"search.filter.locked.server": {
|
||||
"message": "Palvelimen tarjoama"
|
||||
},
|
||||
"search.filter.locked.server-environment.title": {
|
||||
"message": "Voit lisätä vain paikallisia modeja palvelinasennukseen"
|
||||
},
|
||||
"search.filter.locked.server-game-version.title": {
|
||||
"message": "Peliversio on palvelimen tarjoama"
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Modialusta on palvelimen tarjoama"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,39 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Hindi maabot ang mga authentication server"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Ilagay ang paglalarawan ng modpack..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Iluwas"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Pangalan ng Modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Pangalan ng modpack"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Ang lahat ng data ng iyong instansiya ay tuluyang mawawala, kabilang na ang iyong mga mundo, kumpigurasyon, at lahat ng na-install na kontento."
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "proyekto"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Kopyahin ang link"
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Modpack"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "Ang \"{name}\" ay nadagdag"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Hindi kilala"
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Nangangailangan ng kontento"
|
||||
},
|
||||
@@ -32,36 +65,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Tingnan ang mga kontento"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} nadagdag"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Dinagdag"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Tinanggal"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Na-update"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Mag-update upang malaro"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} tinanggal"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Kailangang mag-update"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Kailangang mag-update upang malaro ang {name}. Mangyaring mag-update sa pinakabagong bersiyon upang ma-launch ang laro."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} na-update"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Nakabukas ang moda ng nagdidibelop."
|
||||
},
|
||||
@@ -230,12 +242,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Baguhin ang mundo"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Mga hindi pinapagang proyekto"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "May bagong mga update"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Adres"
|
||||
},
|
||||
@@ -344,150 +350,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Instalasyon"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "Naka-install naman ang {platform} {version} para sa Minecraft {game_version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Naka-install naman ang Vanilla {game_version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Palitan ang bersiyon"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "I-install"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Ini-install"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Nagfe-fetch ng mga bersiyon ng modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Ini-install ang bagong bersiyon"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Kasalukuyang naka-install"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Impormasyon sa pagdebug:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Nagfe-fetch ng mga detalye ng modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Bersiyon ng laro"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "I-install"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Nag-i-install ngayon"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Bersiyon ng {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Hindi maka-fetch ng mga detalye ng linked modpack. Mangyaring tingnan ang iyong internet connection."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "Hindi magagamit ang {loader} sa Minecraft {version}. Sumubok ng ibang mod loader."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Naka-link itong instansiya sa isang modpack, pero ang modpack na ito ay hindi makikita sa Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Plataporma"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "I-reinstall ang modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Ini-re-reinstall ang modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Ang pagrere-install ay maaaring ma-reset ang lahat ng na-install at binago na kontento sa kung anong hinahandog ng modpack, tatanggalin ang mga mods at kontentong idinagdag mo sa orihinal na modpack. Maaari nitong masiayos ang mga hindi inaasahang pag-uugali kung may pagbabagong naganap sa instansiya, ngunit kung dumedepende na ang iyong mundo sa karagdagang kontento, maaari nitong masira ang mga umiiral na mundo."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Sigurado ka bang gusto mong i-reinstall ang instansiyang ito?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Mare-reset ang mga kontento ng instansiya sa orihinal niyang estado, tatanggalin ang mga mod at kontentong idinagdag mo sa orihinal na modpack."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "I-reinstall ang modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Ayusin"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Inaayos"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Sa pagre-repair, mare-reinstall ang mga dependency ng Minecraft at maghahanap ng mga kurapsiyon. Maaaring maresolbe nito ang mga isyu kung hindi malu-launch ang laro dahil sa mga launcher-related error, ngunit hindi nito mareresolbe ang mga isyu at pag-crash na dulot ng mga na-install na mod."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Ayusin ang instansiya?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Inaayos ngayon"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Sa kasalukuyan i-reset"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Ipakita ang lahat ng bersiyon"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "palitan ang bersiyon"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "i-install"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "i-reinstall"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "ayusin"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Hindi makaka-{action} habang nag-i-install"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Hindi makaka-{action} habang nasa offline"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Hindi makaka-{action} habang nag-aayos"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(hindi kilalang bersiyon)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Ang instansiyang ito ay naka-link sa isang server, ibig sabihin ay hindi mo mapapalitan ang bersiyon ng Minecraft. Permanenteng madi-diskonekta ang instansiyang ito sa server kung mag-unlink."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Ang instansiyang ito ay naka-link sa isang server, ibig sabihin ang mga mod ay hindi mai-update at hindi mo mapapalitan ang mod loader at ang bersiyon ng Minecraft. Permanenteng madi-diskonekta ang instansiyang ito sa server kung mag-unlink."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "I-unlink sa server"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "I-unlink sa instansiya"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Kapag ipagpatuloy mo, hindi mo na itong mai-link muli ng hindi gagawa ng bagong instansiya. Hindi ka makakatanggap ng mga update ng modpack at magiging normal na itong."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Sigurado ka bang gusto mong i-unlik ang instansiyang ito?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Ang instansiyang ito ay naka-link sa isang modpack, ibig sabihin ang mga mod ay hindi mai-update at hindi mo mapapalitan ang mod loader at ang bersiyon ng Minecraft. Permanenteng madi-diskonekta ang instansiyang ito sa modpack kung mag-unlink."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "I-unlink sa modpack"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java at memorya"
|
||||
},
|
||||
|
||||
@@ -5,6 +5,93 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Impossible de contacter les serveurs d'authentification"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Saisir la description du modpack..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Exporter"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Exporter le modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Nom du modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Nom du modpack"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Sélectionnez des fichiers et des dossiers à inclure dans le pack"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Numéro de version"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Toutes les données pour votre instance seront supprimée à jamais, y comprit vos mondes, configurations, et contenu supprimé."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Cette action est irréversible"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Supprimer l'instance"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Supprimer l'instance"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Ce modpack est déjà installé dans l’instance « {instanceName} »."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "Dupliquer le modpack"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Créer quand même"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "Aller à l’instance"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Modpack déjà installé"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "projet"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Copier le lien"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Installation..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Modpack"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "« {name} » a été ajouté"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} projets ont été ajoutés"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Jette un coup d'œil aux projets que j'utilise dans mon modpack !"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Partagez le contenu de votre modpack"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Montrer le fichier"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Mis en ligne avec succès"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Inconnu"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Mise à jour..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Contenu requis"
|
||||
},
|
||||
@@ -32,36 +119,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Voir le contenu"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} {count, plural, one {# ajouté} other {# ajoutés}}"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Ajouté"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Retiré"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Mis à jour"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Mettre à jour pour jouer"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} {count, plural, one {# retiré} other {# retirés}}"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Mise à jour requise"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Une mise à jour est requise pour jouer à {name}. Veuillez mettre à jour à la dernière version pour lancer le jeu."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} mis à jour"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Mode développeur activé."
|
||||
},
|
||||
@@ -230,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Modifier le monde"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Projets désactivés"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Mises à jour disponibles"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Adresse"
|
||||
},
|
||||
@@ -344,150 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Installation"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} pour Minecraft {game_version} est déjà installé"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} est déjà installé"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Changer de version"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Installer"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Installation"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Récupération des versions de modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Installation d'une nouvelle version"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Actuellement installé"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Informations de débogage :"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Récupération des détails de modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Version du jeu"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Installer"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Installation en cours"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Version de {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Impossible de récupérer les détails du modpack lié. Veuillez vérifier votre connexion Internet."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} n'est pas disponible pour Minecraft {version}. Essayez avec un autre chargeur de mods."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Cette instance est liée à un modpack, mais le modpack n'a pas pu être trouvé sur Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Plateforme"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Réinstaller le modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Réinstallation du modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "La réinstallation réinitialisera tout le contenu installé ou modifié à celui fourni par le modpack, supprimant ainsi tous les mods ou contenus ajoutés à l'installation d'origine. Cela peut corriger un comportement inattendu si des modifications ont été apportées à l'instance, mais si vos mondes dépendent désormais de contenu supplémentaire installé, cela peut endommager les mondes existants."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Êtes-vous sûr de vouloir réinstaller cette instance ?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Réinitialise le contenu de l'instance à son état d'origine, en supprimant tous les mods ou contenus que vous avez ajoutés au modpack d'origine."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Réinstaller le modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Réparer"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Réparation"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "La réparation réinstalle les dépendances de Minecraft et vérifie la corruption. Cela peut résoudre les problèmes de lancement du jeu en raison d'erreurs liées au launcher, mais ne résoudra pas les problèmes ou plantages liés aux mods installés."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Réparer l'instance ?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Réparation en cours"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Restaurer à l’état actuel"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Voir toutes les versions"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "changer la version"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "installer"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "réinstaller"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "réparer"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Impossible de {action} pendant l'installation"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Impossible de {action} hors ligne"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Impossible de {action} pendant la réparation"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(version inconnue)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Cette instance est liée à un modpack, ce qui veut dire que vous ne pouvez pas changer la version de Minecraft. Délier déconnectera cette instance du serveur en permanence."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Cette instance est liée à un serveur, ce qui veut dire que les mods ne peuvent pas être mis à jour et que vous ne pouvez pas changer de mod loader ou de version de Minecraft. Délier déconnectera cette instance du serveur en permanence."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Délier du serveur"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Délier l'instance"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Si vous continuez, vous ne pourrez pas la relier de nouveau sans créer une toute nouvelle instance. Vous ne recevrez plus de mises à jour du modpack et elle deviendra une instance normale."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Êtes-vous sûr de vouloir délier cette instance ?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Cette instance est liée à un modpack, ce qui veut dire que les mods ne peuvent être mis à jour et vous ne pouvez pas changer le modloader ou la version de Minecraft. La délier va déconnecter l'instance du modpack de façon permanente."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Délier du modpack"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java et mémoire"
|
||||
},
|
||||
@@ -570,7 +489,7 @@
|
||||
"message": "Vous pouvez seulement entrer directement dans les serveurs sur Minecraft Alpha 1.0.5+"
|
||||
},
|
||||
"instance.worlds.no_singleplayer_quick_play": {
|
||||
"message": "Vous pouvez seulement entrer directement dans les mondes solo sur Minecraft Alpha 1.20+"
|
||||
"message": "Vous pouvez seulement entrer directement dans les mondes solo sur Minecraft 1.20+"
|
||||
},
|
||||
"instance.worlds.play_instance": {
|
||||
"message": "Jouer à l'instance"
|
||||
@@ -609,6 +528,6 @@
|
||||
"message": "Version du jeu est procurée par le serveur"
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader est procuré par le serveur"
|
||||
"message": "Le loader est procuré par le serveur"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,81 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "לא ניתן לגשת לשרתי האימות"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "הזן את תיאור חבילת המודים..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "יצוא"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "יצוא חבילת מודים"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "שם חבילת המודים"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "שם חבילת המודים"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "בחר קבצים ותיקיות להכללה בחבילה הזו"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "מספר גרסה"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "כל הנתונים של ההתקנה שלך ימחקו לתמיד, זה כולל את העולמות שלך, ההגדרות וכל התוכן שהתקנת."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "הפעולה הזו לא ניתנת לביטול"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "מחק התקנה"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "מחיקת התקנה"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "פרויקט"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "העתק קישור"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "מתקין..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "חבילת מודים"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" נוסף"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} פרויקטים נוספו"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "בדוק את הפרויקטים שאני משתמש בהם בחבילת המודים שלי!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "משתף את התוכן של חבילת המודים"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "מצא קובץ"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "הועלה בהצלחה"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "לא ידוע"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "מעדכן..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "תוכן נדרש"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "צריך להתקין כדי לשחק"
|
||||
},
|
||||
@@ -14,42 +89,30 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {מוד אחד} other {# מודים}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "חבילת מודים נדרשת"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "שרת זה דורש מודים כדי לשחק. לחץ על \"התקן\" כדי להגדיר את הקבצים הנדרשים מ-Modrinth, ולאחר מכן הפעל ישירות לשרת."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "התקנה משותפת"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "התקנת שרת משותפת"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} נוספו"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "נוסף"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "הוסר"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "עודכן"
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "הצג תוכן"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "צריך לעדכן כדי לשחק"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} הוסרו"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "עדכון נדרש"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "עדכון נדרש כדי לשחק ב{name}. ניתן להתחיל את המשחק רק לאחר עדכון לגרסה החדשה."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} עודכנו"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "מצב מפתח מופעל."
|
||||
},
|
||||
@@ -77,6 +140,33 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "ניהול משאבים"
|
||||
},
|
||||
"app.update-popup.body": {
|
||||
"message": "Modrinth App v{version} מוכנה להורדה!\nיש לרענן כדי לעדכן עכשיו, או באופן אוטומטי בעת סגירת האפליקציה."
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} סיימה את תהליך ההורדה. יש לרענן כדי לעדכן עכשיו, או באופן אוטומטי בעת סגירת האפליקציה."
|
||||
},
|
||||
"app.update-popup.body.linux": {
|
||||
"message": "Modrinth App v{version} זמין. יש להשתמש במנהל חבילות שלך כדי לעדכן בשביל התכונות החדשות ותיקונים!"
|
||||
},
|
||||
"app.update-popup.body.metered": {
|
||||
"message": "Modrinth App v{version} זמינה עכשיו! בגלל החיבור לפי שימוש, לא הורדנו אותה אוטומטית."
|
||||
},
|
||||
"app.update-popup.changelog": {
|
||||
"message": "יומן שינויים"
|
||||
},
|
||||
"app.update-popup.download": {
|
||||
"message": "הורדה ({size})"
|
||||
},
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "הורדה הושלמה"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "רענן"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "עדכון זמין"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "לחיצה כדי לראות את יומן השינויים."
|
||||
},
|
||||
@@ -191,12 +281,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "ערוך עולם"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "פרויקטים מושבתים"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "עדכונים זמינים"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "כתובת"
|
||||
},
|
||||
@@ -305,141 +389,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "התקנה"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} בשביל Minecraft {game_version} כבר מותקן"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "וונילה {game_version} כבר מותקן"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "שינוי גרסה"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "התקן"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "מתקין"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "מאחזר גרסאות חבילת מודים"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "מתקין גרסה חדשה"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "מותקן כעת"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "מידע ניפוי שגיאות:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "מאחזר פרטי חבילת מודים"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "גרסת משחק"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "התקן"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "ההתקנה בתהליך"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} גרסה"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "לא ניתן לאחזר את פרטי חבילת המודים המקושרת. יש לבדוק את חיבור האינטרנט שלך."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} אינו זמין עבור Minecraft {version}. אנא נסה טוען מודים אחר."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "התקנה זאת מקושרת לחבילת מודים, אך חבילת המודים לא נמצאה בModrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "פלטפורמה"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "התקן מחדש את חבילת המודים"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "מתקין מחדש את חבילת המודים"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "התקנה מחדש תאפס את כל התוכן המותקן או ששונה, ותחזיר אותו למצב שסופק על ידי חבילת המודים, תוך הסרת כל מוד או תוכן שהוספתם מעבר להתקנה המקורית. פעולה זו עשויה לתקן תקלות שנגרמו משינויים בהתקנה, אך אם העולמות שלכם תלויים בתוכן נוסף שהותקן, היא עלולה לשבש אותם."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "האם אתה בטוח שברצונך להתקין מחדש instance זה?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "מאפס את התוכן שנמצא בהתקנה למצבו המקורי, תוך הסרת כל מוד או תוכן ששונה מעבר לחבילת המודים המקורית."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "התקן מחדש חבילת מודים"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "תיקון"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "מתקן"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "התיקון מתקין מחדש את התלויות של מיינקראפט ובודק דברים מקולקלים. פעולה זו עשויה לפתור בעיות שמונעות את הפעלת המשחק עקב שגיאות הקשורות למשגר, אך לא תפתור בעיות או קריסות הקשורות למודים המותקנים."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "לתקן את המכונה?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "תיקון בתהליך"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "אפס לגרסה הנוכחית"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "הצג את כל הגרסאות"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "שנה גרסה"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "התקן"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "התקן מחדש"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "תקן"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "לא ניתן לבצע {action} בזמן ההתקנה"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "לא ניתן לבצע {action} במצב לא מקוון"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "לא יכול {action} בזמן תיקון"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(גרסה לא ידועה)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "לבטל את הקישור של ההתקנה הזו"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "אם תמשיך, לא תוכל לקשר אותה מחדש מבלי ליצור התקנה חדשה לחלוטין. לא תקבל עוד עדכונים לחבילת המודים, והיא תהפוך להתקנה רגילה."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "האם אתה בטוח שברצונך לנתק את הקישור ל-instance הזה?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "התקנה זאת מקושרת לחבילת מודים, מה שאומר שלא ניתן לעדכן מודים ולא ניתן לשנות את טוען המודים או את גרסת המיינקראפט. הניתוק יבטל לצמיתות את הקישור של התקנה זאת לחבילת המודים."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "נתק קישור מחבילת מודים"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "ג'אווה וזיכרון"
|
||||
},
|
||||
@@ -512,6 +464,9 @@
|
||||
"instance.worlds.incompatible_server": {
|
||||
"message": "שרת לא מתאים"
|
||||
},
|
||||
"instance.worlds.linked_server": {
|
||||
"message": "מנוהל על ידי פרויקט שרת"
|
||||
},
|
||||
"instance.worlds.no_contact": {
|
||||
"message": "לא ניתן ליצור קשר עם השרת"
|
||||
},
|
||||
@@ -547,5 +502,17 @@
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "סנכרן עם התקנה"
|
||||
},
|
||||
"search.filter.locked.server": {
|
||||
"message": "מסופק על ידי השרת"
|
||||
},
|
||||
"search.filter.locked.server-environment.title": {
|
||||
"message": "ניתן להוסיף רק מודים בצד הלקוח לשרת"
|
||||
},
|
||||
"search.filter.locked.server-game-version.title": {
|
||||
"message": "גרסת המשחק מסופקת על ידי השרת"
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "הטוען מסופק על ידי השרת"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,93 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Nem lehet elérni a hitelesítési kiszolgálókat"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Írd be a modcsomag leírását..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Exportálás"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Modcsomag exportálása"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "A modcsomag neve"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "A modcsomag neve"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Válaszd ki a csomagba felveendő fájlokat és mappákat"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Verziószám"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Az profilodhoz tartozó összes adat véglegesen törlődik, beleértve a világokat, a beállításokat és az összes telepített tartalmat."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Ezt a műveletet nem lehet visszavonni"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Profil törlése"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Profil törlése"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Ez a modcsomag már telepítve van a „{instanceName}” profilban."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "Modcsomag duplikálása"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Létrehozás mindenképpen"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "Profil megnyitása"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "A modcsomag már telepítve van"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "projekt"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Link másolása"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Telepítés..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Modcsomag"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": " „{name}” hozzá lett adva"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} projekt került hozzáadásra"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Nézd meg, milyen projekteket használok a modcsomagomban!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Modcsomag-tartalmak megosztása"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Fájl megjelenítése"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Sikeresen feltöltve"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Ismeretlen"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Frissítés..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Szükséges tartalom"
|
||||
},
|
||||
@@ -30,38 +117,17 @@
|
||||
"message": "Megosztott szerverprofil"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Tartalom megjelenítése"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} hozzáadva"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Hozzáadva:"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Eltávolítva:"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Frissítve"
|
||||
"message": "Tartalom megtekintése"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Frissítsd a játékhoz"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} eltávolítva"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Frissítés szükséges"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "\nFrissítés szükséges ehhez: {name}. Kérjük, frissíts a legújabb verzióra a játék elindításához"
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} frissítve"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Fejlesztői mód bekapcsolva."
|
||||
},
|
||||
@@ -230,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Világ szerkesztése"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Letiltott projektek"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Frissítések elérhetőek"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Cím"
|
||||
},
|
||||
@@ -344,150 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Telepítés"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} a Minecraft {game_version} verziójához már telepítve van"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "A vanilla {game_version} már telepítve van"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Verzióváltás"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Telepítés"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Telepítés folyamatban"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Modpack verzióinak lekérése"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Új verzió telepítése"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Jelenleg telepítve"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Debug információ:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Modpack részleteinek lekérése"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Játék verziója"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Telepítés"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Telepítés folyamatban"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} verzió"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Nem lehetséges a csatolt modpack részleteit lekérdezni. Kérlek nézd meg az internetkapcsolatod."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} nem elérhető a Minecraft {version} verziójához. Próbálj meg egy másik modbetöltőt."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "A profilod linkelve van egy Modrinth modcsomaghoz, de a modcsomag nem található Modrinth-on."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Platform"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Modpack újratelepítése"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Modpack újratelepítése"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Az újratelepítés visszaállítja az összes telepített vagy módosított tartalmat a modcsomag által biztosított állapotra, eltávolítva az eredeti telepítéshez hozzáadott modokat vagy tartalmakat. Ez megoldhatja a váratlan hibákat, de fontos tudni hogyha használsz világokat amelyekben utólagosan hozzáadott tartalom van, azok a világok elromolhatnak."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Biztosan szeretnéd újratelepíteni ezt a profilt?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Visszaállítja a profilod tartalmát az eredeti állapotába, eltávolítva az eredeti modpackhez hozzáadott összes modot és tartalmat."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Modpack újratelepítése"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Javítás"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Javítás folyamatban"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "A javítás újratelepíti a Minecraft alapját és ellenőrzi, hogy nincs-e sérülés. Ez megoldhatja a problémákat, ha a játék nem az indítóval kapcsolatos hibák miatt nem indul el, de nem oldja meg a telepített modokkal kapcsolatos problémákat vagy összeomlásokat."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Profil javítása?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Javítás folyamatban"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Visszaállítás az aktuális állapotra"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Összes verzió mutatása"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "verzió váltás"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "telepítés"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "újratelepítés"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "javítás"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Nem lehet {action}-t végrehajtani telepítés közben"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Offline állapotban nem lehet {action}-t végrehajtani"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Nem lehet {action}-t végrehajtani javítás közben"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(ismeretlen verzió)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Ez az profil egy szerverhez van kapcsolva, ami azt jelenti, hogy nem lehet megváltoztatni a Minecraft verzióját. A kapcsolás megszüntetése véglegesen leválasztja ezt az profilt a szerverről."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Ez az profil egy szerverhez van kapcsolva, ami azt jelenti, hogy a modok nem frissíthetők, és nem lehet megváltoztatni a modbetöltőt vagy a Minecraft verziót. A kapcsolódás megszüntetése véglegesen leválasztja ezt a profilt a szerverről."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Leválasztás a szerverről"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Profil leválasztása"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Ha folytatod, akkor nem tudod újra összekapcsolni anélkül, hogy egy teljesen új profilt hoznál létre. Többé nem fogja megkapni a modcsomag frissítéseit, és normál állapotba kerül."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Biztosan le szeretnéd választani ezt a profilt?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Ez az profil egy modcsomaghoz van kapcsolva, ami azt jelenti, hogy a modok nem frissíthetőek, és nem lehet megváltoztatni a modbetöltőt vagy a Minecraft verziót. A kapcsolódás megszüntetése véglegesen leválasztja ezt a profilt a modcsomagról."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Modpack-ről való leválasztás"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java és memória"
|
||||
},
|
||||
|
||||
@@ -5,6 +5,93 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Tidak dapat terhubung ke server autentikasi"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Masukkan deskripsi paket mod..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Ekspor"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Ekspor paket mod"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Nama Paket Mod"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Nama paket mod"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Pilih berkas dan folder yang ingin dimasukkan ke paket"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Nomor versi"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Semua data dari instans Anda akan dihapus secara permanen, termasuk dunia, konfigurasi, dan konten terpasang Anda."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Tindakan ini tidak dapat dibatalkan"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Hapus instans"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Hapus instans"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Paket mod ini telah terpasang pada instans \"{instanceName}\"."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "Gandakan paket mod"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Tetap buat"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "Pergi ke instans"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Paket mod telah terpasang"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "proyek"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Salin tautan"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Memasang..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Paket Mod"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" telah ditambahkan"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} proyek telah ditambahkan"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Lihat proyek-proyek yang saya pakai di paket mod saya!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Membagi konten paket mod"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Tampilkan berkas"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Berhasil diunggah"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Tidak diketahui"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Memperbarui..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Konten diperlukan"
|
||||
},
|
||||
@@ -32,36 +119,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Lihat konten"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} ditambahkan"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Ditambahkan"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Dihapus"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Diperbarui"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Perbarui untuk memainkan"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} dihapus"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Perlu diperbarui"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "{name} perlu diperbarui sebelum dimainkan. Mohon perbarui ke versi terkini untuk meluncurkan permainan."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} diperbarui"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Mode pengembang dihidupkan."
|
||||
},
|
||||
@@ -230,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Sunting dunia"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Proyek takaktif"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Pembaruan tersedia"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Alamat"
|
||||
},
|
||||
@@ -344,150 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Pemasangan"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} untuk Minecraft {game_version} sudah terpasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "{game_version} murni sudah terpasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Ubah versi"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Pasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Memasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Memperoleh versi paket mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Memasang versi baru"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Saat ini terpasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Informasi awakutu:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Memperoleh perincian paket mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Versi permainan"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Pasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Pemasangan sedang berjalan"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Versi {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Tidak dapat memperoleh perincian paket mod terkait. Mohon periksa sambungan internet Anda."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} tidak tersedia untuk Minecraft {version}. Mohon coba peluncur mod yang lain."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Instans ini berkaitan dengan paket mod, tetapi paket mod tersebut tidak dapat ditemukan pada Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Platform"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Pasang ulang paket mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Memasang ulang paket mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Memasang ulang akan mengatur ulang semua konten yang terpasang atau termodifikasi pada apa yang telah disediakan oleh paket mod, menghapus mod atau konten apa pun yang telah Anda tambahkan di atas pemasangan awal. Hal ini dapat memperbaiki perilaku tidak terduga bila ada perubahan pada instans, tetapi bila dunia Anda sekarang bergantung pada konten terpasang tambahan, hal ini dapat merusak dunia yang ada."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Apakah Anda yakin ingin memasang ulang instans ini?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Mengatur ulang konten instans menjadi keadaan awal, menghapus mod atau konten apa pun yang telah Anda tambahkan di atas pemasangan awal."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Pasang ulang paket mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Perbaiki"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Memperbaiki"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Memperbaiki akan memasangkan ulang pustaka dependen dan memeriksa kerusakan. Ini dapat memecahkan masalah bila permainan Anda tidak memulai sebab kesalahan pada peluncur, tetapi tidak akan memecahkan masalah atau kemogokan yang disebabkan oleh mod terpasang."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Perbaiki instans?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Perbaikan sedang berlangsung"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Atur ulang ke saat ini"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Tampilkan semua versi"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "mengubah versi"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "memasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "memasang ulang"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "memperbaiki"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Tidak dapat {action} saat memasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Tidak dapat {action} saat luring"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Tidak dapat {action} saat memperbaiki"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(versi tidak dikenal)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Instans ini berkaitan dengan suatu server, yang berarti Anda tidak dapat mengubah versi Minecraft. Melepas kaitan akan memutuskan instans ini dari server secara permanen."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Instans ini berkaitan dengan suatu server, yang berarti mod tidak dapat diperbarui dan Anda tidak dapat mengubah versi peluncur mod atau Minecraft. Melepas kaitan akan memutuskan instans ini dari server secara permanen."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Lepas kaitan dari server"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Lepas kaitan instans"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Bila Anda melanjutkan, Anda tidak akan dapat mengaitkannya lagi tanpa membuat instans baru. Anda tidak akan mendapatkan pembaruan paket mod dan menjadi instans normal."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Apakah Anda yakin ingin melepas kaitan instans ini?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Instans ini berkaitan dengan paket mod, yang berarti mod tidak dapat diperbarui dan Anda tidak dapat mengubah versi peluncur mod atau Minecraft. Melepas kaitan akan memutuskan instans ini dari paket mod secara permanen."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Lepas kaitan dari paket mod"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java dan memori"
|
||||
},
|
||||
|
||||
@@ -5,6 +5,93 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Impossibile raggiungere i server di autenticazione"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Inserisci descrizione del pacchetto..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Esporta"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Esporta pacchetto"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Nome del pacchetto"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Nome del pacchetto"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Seleziona i file e le cartelle da includere nel pacchetto"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Numero di versione"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Tutti i dati della tua istanza verranno eliminati permanentemente, inclusi i tuoi mondi, configurazioni e tutti i contenuti installati."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Questa azione non può essere annullata"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Elimina istanza"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Elimina istanza"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Questo pacchetto è già stato installato nell'istanza \"{instanceName}\"."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "Pacchetto duplicato"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Crea comunque"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "Vai all'istanza"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Pacchetto già installato"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "progetto"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Copia link"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Installando..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Pacchetto di mod"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" è stato aggiunto"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} progetti aggiunti"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Guarda le mod che uso nel mio pacchetto!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Condivisione del pacchetto"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Mostra file"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Caricato con successo"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Sconosciuta"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Aggiornando..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Contenuto richiesto"
|
||||
},
|
||||
@@ -32,36 +119,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Mostra contenuti"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count, plural, one {# aggiunta} other {# aggiunte}}"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Aggiunta"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Rimossa"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Aggiornata"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Aggiorna per continuare"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count, plural, one {# rimozione} other {# rimozioni}}"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Aggiornamento richiesto"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "{name} richiede degli aggiornamenti. Installa l'ultima versione per poter giocare."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count, plural, one {# aggiornamento} other {# aggiornamenti}}"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Modalità sviluppatore attiva."
|
||||
},
|
||||
@@ -180,7 +246,7 @@
|
||||
"message": "Online"
|
||||
},
|
||||
"friends.heading.pending": {
|
||||
"message": "In sospeso"
|
||||
"message": "In attesa"
|
||||
},
|
||||
"friends.no-friends-match": {
|
||||
"message": "Nessuna amicizia corrisponde a ''{query}''"
|
||||
@@ -195,7 +261,7 @@
|
||||
"message": "<link>Accedi a un account Modrinth</link> per stringere amicizie e sapere a cosa stanno giocando!"
|
||||
},
|
||||
"instance.add-server.add-and-play": {
|
||||
"message": "Aggiungi e gioca"
|
||||
"message": "Aggiungi e avvia"
|
||||
},
|
||||
"instance.add-server.add-server": {
|
||||
"message": "Aggiungi server"
|
||||
@@ -230,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Modifica mondo"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Progetti disattivati"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Aggiornamenti disponibili"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Indirizzo"
|
||||
},
|
||||
@@ -321,7 +381,7 @@
|
||||
"message": "Inserisci comando post-uscita..."
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch": {
|
||||
"message": "Pre-lancio"
|
||||
"message": "Pre-avvio"
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch.description": {
|
||||
"message": "Eseguito prima dell'avvio dell'istanza."
|
||||
@@ -344,150 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Installazione"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} per Minecraft {game_version} è già installato"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} è già installata"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Cambia versione"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Installa"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Installando"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Ottenendo versioni del pacchetto di mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Installando nuova versione"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Installazione corrente"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Informazioni per il debug:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Ottenendo dettagli del pacchetto di mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Versione del gioco"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Installa"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Installazione in corso"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Versione di {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Impossibile ottenere i dettagli del pacchetto di mod collegato. Si prega di controllare la connessione a Internet."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} non è disponibile per Minecraft {version}. Prova un altro loader."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "L'istanza è collegata a un pacchetto di mod, ma non è stato possibile trovarlo su Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Piattaforma"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Reinstalla pacchetto di mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Reinstallando pacchetto di mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "La reinstallazione resetterà tutto il contenuto installato o modificato a ciò che è fornito dal pacchetto di mod, rimuovendo ogni mod o contenuto che tu abbia aggiunto all'installazione originale. Questo potrebbe risolvere comportamenti inaspettati se ci sono state modifiche all'istanza, ma se ora i tuoi mondi dipendessero da contenuto aggiuntivo installato, essi verrebbero corrotti."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Vuoi davvero reinstallare questa istanza?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Resetta il contenuto dell'istanza al suo stato originale, rimuovendo ogni mod o contenuto che tu abbia aggiunto al pacchetto di mod originale."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Reinstalla pacchetto di mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Ripara"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Riparando"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "La riparazione reinstalla le dipendenze di Minecraft e verifica eventuali corruzioni. Questo potrebbe risolvere problemi di avvio del gioco se dovuti a errori legati al launcher, ma non risolverà problemi o crash legati alle mod installate."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Riparare l'istanza?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Riparazione in corso"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Resetta ad attuale"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Mostra tutte le versioni"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "cambia versione"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "installa"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "reinstalla"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "ripara"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Impossibile {action} durante l'installazione"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Impossibile {action} senza connessione"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Impossibile {action} durante la riparazione"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(versione sconosciuta)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Questa istanza è collegata a un server, cioè non puoi cambiare la versione di Minecraft. Lo scollegamento disconnetterà definitivamente questa istanza dal server."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Questa istanza è collegata a un server, perciò le mod non possono essere aggiornate manualmente, e non puoi cambiare loader di mod né versione di Minecraft. Lo scollegamento disconnetterà definitivamente questa istanza dal server."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Scollega dal server"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Scollega istanza"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Procedendo non potrai più ricollegarla se non creando una nuova istanza da zero. Diventerà una normale installazione, per cui non riceverai più aggiornamenti dal pacchetto di mod."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Vuoi davvero scollegare questa istanza?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Questa istanza è collegata a un pacchetto di mod, cioè le mod non possono essere aggiornate manualmente, e non puoi cambiare loader di mod né versione di Minecraft. Lo scollegamento disconnetterà definitivamente questa istanza dal pacchetto di mod."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Scollega dal pacchetto di mod"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java e memoria"
|
||||
},
|
||||
@@ -573,7 +492,7 @@
|
||||
"message": "È possibile avviare direttamente un mondo in giocatore singolo solo su Minecraft 1.20+"
|
||||
},
|
||||
"instance.worlds.play_instance": {
|
||||
"message": "Gioca istanza"
|
||||
"message": "Avvia istanza"
|
||||
},
|
||||
"instance.worlds.type.server": {
|
||||
"message": "Server"
|
||||
|
||||
@@ -1,10 +1,97 @@
|
||||
{
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "Minecraft の認証サーバーは現在停止している可能性があります。インターネット接続を確認し、しばらくしてからもう一度お試しください。"
|
||||
"message": "Minecraftの認証サーバーは現在停止している可能性があります。インターネット接続を確認し、しばらくしてからもう一度お試しください。"
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "認証サーバーにアクセスできません"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Modパックの説明を入力…"
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "書き出し"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Modパックを書き出す"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Modパック名"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Modパック名"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "パックに含めるファイルとフォルダーを選択"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "バージョン番号"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "インスタンス内のすべてのデータは、ワールド、設定、インストール済みのコンテンツを含め、完全に削除されます。"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "この操作は取り消せません"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "インスタンスを削除"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "インスタンスを削除"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "このModパックは「{instanceName}」インスタンスにすでにインストールされています。"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "重複したModパック"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "とにかく作成する"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "インスタンスに移動"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Modパックはすでにインストール済み"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "プロジェクト"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "リンクをコピー"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "インストール中…"
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Modパック"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "「{name}」が追加されました"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count}件のプロジェクトが追加されました"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "私のModパックで使われているプロジェクトをチェック!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Modパックのコンテンツを共有"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "ファイルを表示"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "アップロードに成功しました"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "不明"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "アップデート中…"
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "必須コンテンツ"
|
||||
},
|
||||
@@ -18,7 +105,7 @@
|
||||
"message": "{count, plural, other {#個のMod}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "必須なModpack"
|
||||
"message": "必須のModパック"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "このサーバーをプレイするにはModが必要です。インストールをクリックしてModrinthから必要なファイルを設定し、サーバーに接続してください。"
|
||||
@@ -32,36 +119,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "コンテンツを見る"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count}追加"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "追加"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "削除済み"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "更新済み"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "更新してプレイ"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count}件削除されました"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "更新が必要です"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "{name}をプレイするには更新が必要です。ゲームを起動するには最新版に更新してください。"
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} 更新されました"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "開発者モードがオンになっています。"
|
||||
},
|
||||
@@ -90,10 +156,10 @@
|
||||
"message": "リソース管理"
|
||||
},
|
||||
"app.update-popup.body": {
|
||||
"message": "Modrinth App v{version} のインストール準備が整いました!今すぐ更新するには再読み込みするか、Modrinth App を閉じる際に自動更新されます。"
|
||||
"message": "Modrinth App v{version} のインストール準備が整いました!今すぐ更新するには再読み込みするか、Modrinth Appを閉じる際に自動更新されます。"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} のダウンロードが完了しました。今すぐ更新するには再読み込みするか、Modrinth App を閉じる際に自動更新されます。"
|
||||
"message": "Modrinth App v{version} のダウンロードが完了しました。今すぐ更新するには再読み込みするか、Modrinth Appを閉じる際に自動更新されます。"
|
||||
},
|
||||
"app.update-popup.body.linux": {
|
||||
"message": "Modrinth App v{version} が利用可能です。最新の機能と修正プログラムを入手するには、パッケージマネージャーを使用して更新してください!"
|
||||
@@ -111,7 +177,7 @@
|
||||
"message": "ダウンロード完了"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "リロード"
|
||||
"message": "再読み込み"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "アップデートが利用可能です"
|
||||
@@ -183,7 +249,7 @@
|
||||
"message": "保留中"
|
||||
},
|
||||
"friends.no-friends-match": {
|
||||
"message": "フレンド\"{query}\"は見つかりませんでした"
|
||||
"message": "フレンド「{query}」は見つかりませんでした"
|
||||
},
|
||||
"friends.search-friends-placeholder": {
|
||||
"message": "フレンドを検索…"
|
||||
@@ -222,7 +288,7 @@
|
||||
"message": "名前"
|
||||
},
|
||||
"instance.edit-world.placeholder-name": {
|
||||
"message": "Mincraft ワールド"
|
||||
"message": "Mincraftワールド"
|
||||
},
|
||||
"instance.edit-world.reset-icon": {
|
||||
"message": "アイコンをリセット"
|
||||
@@ -230,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "ワールドを編集"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "無効なプロジェクト"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "アップデートが可能"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "アドレス"
|
||||
},
|
||||
@@ -258,7 +318,7 @@
|
||||
"message": "インスタンスを削除"
|
||||
},
|
||||
"instance.settings.tabs.general.delete.description": {
|
||||
"message": "デバイスからインスタンスを削除します。これらには、ワールド、設定、他、全てのインストール済みのファイルが含まれます。インスタンスを削除すると復元することはできません。"
|
||||
"message": "デバイスからインスタンスを削除します。これらには、ワールド、設定などのすべてのインストール済みのファイルが含まれます。インスタンスを削除すると復元することはできません。"
|
||||
},
|
||||
"instance.settings.tabs.general.deleting.button": {
|
||||
"message": "削除中…"
|
||||
@@ -318,7 +378,7 @@
|
||||
"message": "ゲームが閉じられた後に実行されます。"
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit.enter": {
|
||||
"message": "終了後のコマンドを入力"
|
||||
"message": "終了後のコマンドを入力…"
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch": {
|
||||
"message": "起動前"
|
||||
@@ -327,7 +387,7 @@
|
||||
"message": "ゲームが起動する前に実行されます。"
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch.enter": {
|
||||
"message": "起動前のコマンドを入力"
|
||||
"message": "起動前のコマンドを入力…"
|
||||
},
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "ゲーム起動フック"
|
||||
@@ -336,7 +396,7 @@
|
||||
"message": "ラッパー"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper.description": {
|
||||
"message": "Minecraftを起動用のラッパーコマンド。"
|
||||
"message": "Minecraftを起動するためのラッパーコマンド。"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper.enter": {
|
||||
"message": "ラッパーのコマンドを入力…"
|
||||
@@ -344,149 +404,8 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "インストール"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "Minecraft {game_version} の {platform} {version} はすでにインストールされています"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} はすでにインストールされています"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "バージョンを変更"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "インストール"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "インストール中"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "ModPackのバージョンを取得しています"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "新しいバージョンをインストール中"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "インストール済"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "デバッグ情報:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "ModPackの情報を取得しています"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "ゲームバージョン"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "インストール"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "インストール中"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} バージョン"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "リンクされたModpackの情報が取得できませんでした。インターネット接続を確認してください。"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader}はMinecraft {version}で使用できません。別のローダーを選択してください。"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "このインスタンスはModpackにリンクされていますが、ModrinthではModpackが見つかりません。"
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "プラットフォーム"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Modpackを再インストール"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Modpackを再インストール中"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "再インストールすると、全てのコンテンツがModpackで提供される内容にリセットされ、元のコンテンツに追加されたMod等やコンテンツは全て削除されます。インスタンスに変更を加えていた場合、予期せぬ動作が修正がされる場合がありますが、ワールドが追加でインストールされたコンテンツに依存している場合、既存のワールドで動かなくなる可能性があります。"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "本当にインスタンスを再インストールしますか?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "インスタンスの状態をもとの状態にリセットし、元のModpackに追加されたModやコンテンツ等を削除します。"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Modpackを再インストール"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "修復"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "修復中"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "修復を行うと、Minecraftの依存関係が再インストールされ、破損がないかのチェックが行われます。ランチャー関連の問題の場合は、修復によって解決する可能性がありますが、インストール済みのModに関する問題は解決されません。"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "インスタンスを修復しますか?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "修復中"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "現在の状態にリセット"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "全てのバージョンを表示"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "バージョンを変更"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "インストール"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "再インストール"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "修復"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "インストール中に{action}することはできません"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "オフラインの時に{action}することはできません"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "修復中に{action}することはできません"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(不明なバージョン)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "このインスタンスはサーバーにリンクされているので、Minecraftのバージョンを変更することはできません。リンクを解除するとこのインスタンスはサーバーから永久に切断されます。"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "このインスタンスはサーバーにリンクされているので、Modの更新はできず、ModローダーやMinecraftのバージョンを変更することもできません。リンクを解除すると、このインスタンスはサーバーから永久に切断されます。"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "サーバーとのリンクを解除する"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "インスタンスのリンク解除"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "この操作を行うと、新しいインスタンスを作らなければ再びリンクすることはできなくなります。通常のインスタンスになるので、modpackのバージョンアップは利用できなくなります。"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "本当にインスタンスのリンクを解除しますか?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "このインスタンスはmodpackにリンクされているので、modやmodローダー、Minecraftのバージョンを変更することはできません。リンクを解除するとこのインスタンスとmodpackは永久に分離されます。"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "modpackとのリンクを解除する"
|
||||
"message": "{loader}のバージョン"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Javaとメモリ"
|
||||
@@ -498,13 +417,13 @@
|
||||
"message": "フック"
|
||||
},
|
||||
"instance.settings.tabs.java.java-arguments": {
|
||||
"message": "Java コマンドライン引数"
|
||||
"message": "Javaコマンドライン引数"
|
||||
},
|
||||
"instance.settings.tabs.java.java-installation": {
|
||||
"message": "Javaのインストール"
|
||||
},
|
||||
"instance.settings.tabs.java.java-memory": {
|
||||
"message": "メモリ割り当て量"
|
||||
"message": "メモリ割り当て"
|
||||
},
|
||||
"instance.settings.tabs.window": {
|
||||
"message": "ウィンドウ"
|
||||
@@ -588,27 +507,27 @@
|
||||
"message": "ワールドは使用中"
|
||||
},
|
||||
"search.filter.locked.instance": {
|
||||
"message": "インスタンスより提供"
|
||||
"message": "インスタンスによる条件"
|
||||
},
|
||||
"search.filter.locked.instance-game-version.title": {
|
||||
"message": "ゲームバージョンはインスタンスより提供"
|
||||
"message": "ゲームバージョンはインスタンスによる条件です"
|
||||
},
|
||||
"search.filter.locked.instance-loader.title": {
|
||||
"message": "ローダーはインスタンスにより提供"
|
||||
"message": "ローダーはインスタンスによる条件です"
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "インスタンスと同期"
|
||||
},
|
||||
"search.filter.locked.server": {
|
||||
"message": "サーバーにより提供されています"
|
||||
"message": "サーバーによる条件"
|
||||
},
|
||||
"search.filter.locked.server-environment.title": {
|
||||
"message": "サーバー構成にはクライアント側Modのみ追加可能"
|
||||
"message": "サーバーインスタンスにはクライアント側Modのみ追加可能"
|
||||
},
|
||||
"search.filter.locked.server-game-version.title": {
|
||||
"message": "ゲームバージョンはサーバーにより提供されています"
|
||||
"message": "ゲームバージョンはサーバーによる条件です"
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "ローダーはサーバーにより提供されています"
|
||||
"message": "ローダーはサーバーによる条件です"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "인증 서버에 연결할 수 없습니다"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "업데이트 중..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "콘텐츠 설치 필요"
|
||||
},
|
||||
@@ -32,36 +35,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "구성 요소 보기"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} 추가됨"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "추가됨"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "삭제됨"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "업데이트됨"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "업데이트하고 플레이"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} 삭제됨"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "업데이트 필요"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "{name}을(를) 플레이하려면 업데이트가 필요합니다. 게임을 실행하려면 최신 버전으로 업데이트해 주세요."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} 업데이트됨"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "개발자 모드가 활성화되었습니다."
|
||||
},
|
||||
@@ -230,12 +212,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "세계 편집"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "비활성화된 프로젝트"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "업데이트 가능"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "주소"
|
||||
},
|
||||
@@ -344,150 +320,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "설치"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "Minecraft {game_version} {platform} {version} 설치됨"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "바닐라 {game_version} 설치됨"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "버전 변경"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "설치"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "설치 중"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "모드팩 버전을 가져오는 중"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "새 버전을 설치하는 중"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "현재 설치됨"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "디버그 정보:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "모드팩 세부 정보를 가져오는 중"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "게임 버전"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "설치"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "설치 진행 중"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} 버전"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "연결된 모드팩의 세부 정보를 가져올 수 없습니다. 인터넷 연결 상태를 확인하세요."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader}(은)는 Minecraft {version}에서 사용할 수 없습니다. 다른 모드 로더를 사용하세요."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "이 인스턴스는 모드팩과 연결되어 있지만, Modrinth에서 모드팩을 찾을 수 없습니다."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "플랫폼"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "모드팩 재설치"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "모드팩 재설치 중"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "재설치하면 설치 또는 수정된 모든 콘텐츠가 모드팩에서 제공하는 콘텐츠로 초기화되며, 기존 팩에 추가한 모드나 콘텐츠는 모두 제거됩니다. 인스턴스에 변경 사항이 있는 경우 예상치 못한 동작은 해결할 수 있지만, 현재 세계가 추가로 설치된 콘텐츠에 의존하고 있다면 기존 세계가 손상될 수 있습니다."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "정말로 이 인스턴스를 다시 설치하시겠습니까?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "인스턴스를 초기 상태로 복원하고, 원본 모드팩에 추가된 모드나 콘텐츠를 모두 제거합니다."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "모드팩 재설치"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "복구"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "복구 중"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "복구 시 Minecraft 의존성을 재설치하고 무결성을 검사합니다. 런처 오류로 인해 게임이 실행되지 않을 경우 문제 해결에 도움이 될 수 있지만, 설치된 모드로 인한 오류나 충돌은 해결되지 않습니다."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "인스턴스를 복구하시겠습니까?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "복구 진행 중"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "현재 상태로 되돌리기"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "모든 버전 보이기"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "버전 변경"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "설치"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "재설치"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "복구"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "설치 중에는 {action} 할 수 없음"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "오프라인 상태에서는 {action} 할 수 없음"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "복구 중에는 {action} 할 수 없음"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(알 수 없는 버전)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "이 인스턴스는 서버에 연결되어 있으므로, 마인크래프트 버전을 변경할 수 없습니다. 연결을 해제하면 이 인스턴스가 서버에서 영구적으로 연결이 끊어집니다."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "이 인스턴스는 서버에 연결되어 있으므로 모드를 업데이트할 수 없으며 모드 로더나 Minecraft 버전을 변경할 수 없습니다. 연결을 해제하면 이 인스턴스가 서버에서 영구적으로 연결이 끊어집니다."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "서버 연결 해제"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "인스턴스 연결 해제"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "계속 진행하면 새 인스턴스를 만들지 않는 한 다시 연결할 수 없습니다. 또한 모드팩 업데이트를 더 이상 받을 수 없으며, 일반 인스턴스로 전환됩니다."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "정말로 이 인스턴스의 연결을 해제하시겠습니까?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "이 인스턴스는 모드팩에 연결되어 있으므로, 모드를 개별적으로 업데이트하거나 모드 로더 및 Minecraft 버전을 변경할 수 없습니다. 연결을 해제하면 이 인스턴스는 모드팩과 영구적으로 분리됩니다."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "모드팩에서 연결 해제"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java 및 메모리"
|
||||
},
|
||||
|
||||
@@ -1,10 +1,91 @@
|
||||
{
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "Pelayan pengesahan Minecraft mungkin sedang tergendala sekarang. Periksa sambungan internet anda dan cuba lagi nanti."
|
||||
"message": "Pelayan pengesahan Minecraft mungkin sedang tergendala sekarang. Periksa sambungan internet anda dan cuba lagi kemudian."
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Tidak dapat mencapai pelayan pengesahan"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Masukkan keterangan pek mod..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Eksport"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Eksport pek mod"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Nama Pek Mod"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Nama pek mod"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Pilih fail dan folder untuk disertakan dalam pek mod"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Nombor versi"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Semua data untuk pemasangan anda akan dipadamkan secara kekal, termasuk dunia, konfigurasi dan semua kandungan yang dipasang."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Tindakan ini tidak boleh dibatalkan"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Padam pemasangan"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Padam pemasangan"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Pek mod ini sudah pun dipasang di dalam pemasangan \"{instanceName}\"."
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "Pergi ke pemasangan"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Pek mod sudah dipasang"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "projek"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Salin pautan"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Sedang memasang..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Pek Mod"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" telah ditambahkan"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} projek telah ditambahkan"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Lihat projek-projek yang saya gunakan dalam pek mod saya!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Berkongsi kandungan pek mod"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Tunjukkan fail"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Berjaya dimuat naik"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Tidak Diketahui"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Sedang mengemas kini..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Kandungan yang diperlukan"
|
||||
},
|
||||
@@ -20,6 +101,9 @@
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Pek mod yang diperlukan"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Pelayan ini memerlukan mod untuk dimainkan. Klik Pasang untuk menyediakan fail yang diperlukan daripada Modrinth, kemudian lancarkan permainan terus ke dalam pelayan."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Pemasangan yang dikongsi"
|
||||
},
|
||||
@@ -29,36 +113,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Lihat kandungan"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} ditambah"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Ditambah"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Dialih keluar"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Dikemas kini"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Kemas kini untuk mainkan"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} dialih keluar"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Kemas kini diperlukan"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Kemas kini diperlukan untuk memainkan {name}. Sila kemas kini kepada versi terkini untuk melancarkan permainan."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} dikemas kini"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Mod pembangun didayakan."
|
||||
},
|
||||
@@ -227,12 +290,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Sunting dunia"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Projek yang dinyahdayakan"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Kemas kini tersedia"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Alamat"
|
||||
},
|
||||
@@ -341,144 +398,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Pemasangan"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} untuk Minecraft {game_version} sudah pun dipasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "{game_version} vanila sudah pun dipasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Tukar versi"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Pasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Sedang memasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Sedang mengambil versi pek mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Sedang memasang versi baharu"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Dipasang pada masa ini"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Maklumat nyahpepijat:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Sedang mengambil maklumat pek mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Versi permainan"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Pasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Pemasangan sedang dijalankan"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Versi {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Tidak dapat mengambil butiran pek mod yang terpaut. Sila semak sambungan internet anda."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} tidak tersedia untuk Minecraft {version}. Cuba pemuat mod yang lain."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Pemasangan ini dipautkan kepada sebuah pek mod, tetapi pek mod tersebut tidak dapat dijumpai pada Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Platform"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Pasang semula pek mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Sedang memasang semula pek mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Pemasangan semula akan menetapkan semula semua kandungan yang dipasang atau diubah suai kepada apa yang disediakan oleh pek mod, mengalih keluar sebarang mod atau kandungan yang telah anda tambahkan di atas pemasangan asal. Ini mungkin dapat membetulkan tingkah laku yang tidak dijangka jika perubahan telah dibuat pada pemasangan, tetapi jika dunia anda kini bergantung pada kandungan tambahan yang dipasang, ia mungkin akan merosakkan dunia sedia ada."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Adakah anda pasti mahu memasang semula pemasangan ini?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Menetapkan semula kandungan pemasangan kepada keadaan asalnya, mengalih keluar sebarang mod atau kandungan yang telah anda tambahkan di atas pek mod asal."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Pasang semula pek mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Perbaiki"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Sedang memperbaiki"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Pembaikan ini akan memasang semula kebergantungan Minecraft dan memeriksa kerosakan. Ini mungkin dapat menyelesaikan isu jika permainan anda tidak dilancarkan kerana ralat berkaitan pelancar, tetapi tidak akan menyelesaikan isu atau ranap yang berkaitan dengan mod yang dipasang."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Perbaiki pemasangan?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Pembaikan sedang dijalankan"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Tetap semula kepada semasa"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Tunjukkan semua versi"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "mengubah versi"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "memasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "memasang semula"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "memperbaiki"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Tidak boleh {action} semasa memasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Tidak boleh {action} semasa berada di luar talian"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Tidak boleh {action} semasa memperbaiki"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(versi tidak diketahui)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Nyahpaut daripada pelayan"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Nyahpautkan pemasangan"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Jika anda meneruskan, anda tidak akan dapat memautkannya semula tanpa membuat pemasangan yang baharu sepenuhnya. Anda tidak akan menerima kemas kini pek mod lagi dan ia akan menjadi pemasangan biasa."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Adakah anda pasti mahu menyahpautkan pemasangan ini?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Pemasangan ini dipautkan kepada pek mod, yang bermaksud mod tidak boleh dikemas kini dan anda tidak boleh menukar pemuat mod atau versi Minecraft. Menyahpaut pemasangan ini akan memutuskan sambungan pemasangan ini secara kekal daripada pek mod."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Nyahpaut daripada pek mod"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java dan ingatan"
|
||||
},
|
||||
@@ -593,6 +515,9 @@
|
||||
"search.filter.locked.server": {
|
||||
"message": "Disediakan oleh pelayan"
|
||||
},
|
||||
"search.filter.locked.server-environment.title": {
|
||||
"message": "Hanya mod bahagian pelanggan sahaja yang boleh ditambah pada pemasangan pelayan"
|
||||
},
|
||||
"search.filter.locked.server-game-version.title": {
|
||||
"message": "Versi permainan adalah disediakan oleh pelayan"
|
||||
},
|
||||
|
||||
@@ -5,6 +5,93 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Authenticatieservers kunnen niet worden bereikt"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Voeg modpack beschrijving in..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Exporteer"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Exporteer modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Modpack Naam"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Modpack naam"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Selecteer bestanden en mappen om toe te voegen aan pack"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Versie nummer"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Alle data van je instantie zal permanent verwijderd worden, inclusief al je werelden, voorkeuren, en alle geïnstalleerde content."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Deze actie kan niet ongedaan gemaakt worden"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Verwijder instantie"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Verwijder instantie"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Deze modpack is al geïnstalleerd in de \"{instanceName}\" instantie."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "Dupliceer modpack"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Maak toch"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "Ga naar instantie"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Modpack is al geïnstalleerd"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "project"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Kopieer link"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Aan het installeren..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Modpack"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" was toegevoegd"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} projecten waren toegevoegd"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Bekijk de projecten die ik in mijn modpack gebruik!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Modpack-inhoud delen"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Bestand weergeven"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Succesvol geüpload"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Onbekend"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Aan het updaten..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Content vereist"
|
||||
},
|
||||
@@ -32,36 +119,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Toon content"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} toegevoegd"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Toegevoegd"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Verwijderd"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Geüpdatet"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Update om te spelen"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} verwijderd"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Update vereist"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Een update is vereist om {name} te spelen. Update naar de laatste versie om het spel te starten."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} geüpdatet"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Ontwikkelaarsmodus ingeschakeld."
|
||||
},
|
||||
@@ -230,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Wereld bewerken"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Uitgeschakelde projecten"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Updates beschikbaar"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Adres"
|
||||
},
|
||||
@@ -344,150 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Installatie"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} voor Minecraft {game_version} is al geïnstalleerd"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} is al geïnstalleerd"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Verander versie"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Installeer"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Aan het installeren"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Modpack versies ophalen"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Nieuwe versie aan het installeren"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Huidig geïnstalleerd"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Fout opsporingsinformatie:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Modpack details ophalen"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Spel versie"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Installeer"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Bezig met installeren"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Versie {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft versie {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Kan de gekoppelde modpack details niet ophalen. Controleer je internetverbinding."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} is niet beschikbaar voor Minecraft {version}. Probeer een andere mod loader."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Deze instantie is gekoppeld aan een modpack, maar de modpack kon niet worden gevonden op Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Platform"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Herinstalleer modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Modpack aan het herinstalleren"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Het opnieuw installeren zal alle geïnstalleerde of gewijzigde inhoud resetten naar de inhoud die door de modpack wordt geleverd, en alle mods of inhoud die je bovenop de oorspronkelijke installatie hebt toegevoegd, verwijderen. Dit kan onverwacht gedrag oplossen als er wijzigingen zijn aangebracht in de instantie, maar als je werelden nu afhankelijk zijn van extra geïnstalleerde inhoud, kan dit bestaande werelden beschadigen."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Ben je zeker dat je deze instantie wilt herinstalleren?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Herstelt de inhoud van het exemplaar naar zijn oorspronkelijke staat. Mods en inhoud die bovenop het oorspronkelijke modpack zijn toegevoegd worden verwijderd."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Modpack opnieuw installeren"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Repareer"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Repareren"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Repareren installeert Minecraft-dependencies opnieuw en controleert op corruptie. Dit kan problemen oplossen als uw spel niet start vanwege problemen met de launcher, maar niet problemen of crashes oplossen die te maken hebben met geïnstalleerde mods."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Exemplaar repareren?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Reparatie in behandeling"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Herstel naar huidige"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Toon alle versies"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "verander versie"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "installeer"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "herinstalleer"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "repareer"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Kan niet {action} tijdens installatie"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Kan niet {action} terwijl u offline bent"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Kan niet {action} tijdens reparatie"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(Onherkende versie)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Deze instantie is gekoppeld aan een server, wat betekent dat je de Minecraft versie niet kunt wijzigen. Ontkoppelen zal deze instantie definitief van de server loskoppelen."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Deze instantie is gekoppeld aan een server, wat betekent dat mods niet kunnen worden bijgewerkt en je de modloader of Minecraft-versie niet kunt wijzigen. Ontkoppelen zal deze instantie definitief van de server loskoppelen."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Ontkoppel van server"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Ontkoppel exemplaar"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Als u doorgaat, kunt u het niet opnieuw koppelen zonder een compleet nieuwe exemplaar aan te maken. U ontvangt geen modpack updates meer en het wordt een normaal exemplaar."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Weet u zeker dat u dit exemplaar wilt ontkoppelen?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Dit exemplaar is gekoppeld aan een modpack, wat betekent dat mods niet bijgewerkt kunnen worden en de mod loader of Minecraft versie kan niet gewijzigd worden."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Ontkoppel van modpack"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java en geheugen"
|
||||
},
|
||||
|
||||
@@ -20,36 +20,15 @@
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Delt serverinstans"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} lagt til"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Lagt til"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Fjerna"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Oppdatert"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Oppdater for å spille"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} fjerna"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Krever oppdatering"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Ei oppdatering er påkrevd for å spille {name}. Vær så snill å oppdater til den siste versjonen av spillet for å spille det."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "Oppdaterte {count} mods"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Utviklermodus aktivert."
|
||||
},
|
||||
@@ -191,12 +170,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Rediger verden"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Deaktiverte prosjekt"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Oppdateringer tiljengelige"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Adresse"
|
||||
},
|
||||
@@ -305,141 +278,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Installasjon"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} for Minecraft {game_version} er allerede installert"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} er allerede installert"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Endre versjon"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Installer"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Installerer"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Henter modpakkeversjoner"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Installerer ny versjon"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "For tiden installert"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Feilsøkingsinformasjon:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Henter modpakkedetaljer"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Spillversjon"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Installer"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Installasjon pågår"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} versjon"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Kan ikke hente detaljer for tilknyttet modpakke."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} er ikke tilgjengelig for Minecraft {version}. Prøv en annen mod laster."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Denne instansen er tilknyttet til en modpakke, men modpakken er ikke funnet på Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Platform"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Re-installer modpakke"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Re-installerer modpakke"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Reinstallering vil tilbakestille alt installert eller endret innhold til det som tilbys av modpakken, og fjerne alle mods eller innhold du har lagt til i tillegg til den opprinnelige installasjonen. Dette kan løse uventet oppførsel hvis det er gjort endringer i instansen, men hvis verdenene dine nå er avhengige av ekstra installert innhold, kan det ødelegge eksisterende verdener."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Er du sikker på at du vil reinstallere denne instansen?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Resetter innholdet til instansen til sin opprinnelige tilstand, som fjerner alle mods eller innhold som du har lagd til på toppen av originalpakken."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Reinstaller modpakke"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Reparer"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Reparerer"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Reparasjon reinstallerer Minecraft-avhengigheter og sjekker for korrupsjon. Dette kan fikse problemer hvis spillet ikke starter grunnet launcher-relaterte feil, men vil ikke løse problemer eller krasj relatert til installerte mods."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Reparer instanse?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Reparasjon pågår"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Reset til nåværende"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Vis alle versjoner"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "endre versjon"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "installer"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "reinstaller"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "reparer"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Kan ikke {action} mens en installasjon pågår"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Kan ikke {action} når man er offline"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Kan ikke {action} mens en reparasjon pågår"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(ukjent versjon)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Koble fra instanse"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Hvis du fortsetter, vil du ikke kunne koble det på nytt uten å lage en helt ny instans. Du vil ikke kunne få oppdateringer for modpakker lenger og det vil bli til en normal instans."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Er du sikker på at du vil koble fra denne instansen?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Denne instansen er koblet til en modpakke, som betyr at mods ikke kan bli oppdatert og at du ikke kan endre modloaderen eller Minecraft-versjonen. Å avlenke vil permanent koble fra instansen fra modpakken."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Koble fra modpakke"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java og minne"
|
||||
},
|
||||
|
||||
@@ -5,6 +5,78 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Nie udało się połączyć się z serwerami uwierzytelniania"
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Eksportuj"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Eksportuj paczkę modów"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Nazwa paczki modów"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Nazwa paczki modów"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Wybierz pliki i foldery, które mają znaleźć się w paczce"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Numer wersji"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Wszystkie dane z Twojej instancji zostaną trwale usunięte, w tym Twoje światy, pliki konfiguracji i wszystkie zainstalowane treści."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Tej akcji nie można odwrócić"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Usuń instancję"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Usuń instancję"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Ta paczka modów jest już zainstalowana w instancji \"{instanceName}\"."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "Duplikat paczki modów"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Utwórz mimo to"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "Przejdź do instancji"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Paczka modów jest już zainstalowana"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "projekt"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Kopiuj łącze"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Instalowanie..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Paczka modów"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "Dodano \"{name}\""
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "Dodano {count} {count, plural, one {projekt} few {projekty} other {projektów}}"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Pokaż plik"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Przesyłanie powiodło się"
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Wymagane treści"
|
||||
},
|
||||
@@ -32,36 +104,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Pokaż zawartość"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "Dodano {count}"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Dodano"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Usunięto"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Zaktualizowano"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Zaktualizuj, by grać"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "Usunięto {count}"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Wymagana jest aktualizacja"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Aktualizacja jest wymagana, aby grać w {name}. Proszę zaktualizować do najnowszej wersji, aby uruchomić grę."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "Zaktualizowano {count}"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Tryb dewelopera włączony."
|
||||
},
|
||||
@@ -230,12 +281,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Edytuj świat"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Wyłączone projekty"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Dostępne aktualizacje"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Adres"
|
||||
},
|
||||
@@ -344,150 +389,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Instalacja"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} dla Minecraft {game_version} jest już zainstalowana"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} jest już zainstalowana"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Zmień wersję"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Zainstaluj"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Instalowanie"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Pobieranie wersji paczki modów"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Instalowanie nowej wersji"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Obecnie zainstalowane"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Informacje dotyczące debugowania:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Pobieranie szczegółów paczki modów"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Wersja gry"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Zainstaluj"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Trwa instalowanie"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Wersja {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Nie można pobrać powiązanych szczegółów paczki modów. Sprawdź swoje połączenie internetowe."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} nie jest dostępny dla Minecraft {version}. Spróbuj inny."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Ta instancja jest połączona z paczką modów, ale nie udało się znaleźć tej paczki modów na Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Platforma"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Zainstaluj paczkę modów ponownie"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Ponowne instalowanie paczki modów"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Ponowne instalowanie zresetuje całą zainstalowaną lub zmodyfikowaną zawartość do stanu podanego przez paczkę modów, usuwając jakiekolwiek mody lub zawartość, którą dodałeś(-aś) ponad oryginalną instalację. Może to naprawić nieoczekiwane zachowanie, jeśli instancja została zmieniona, ale jeśli Twoje istniejące światy polegają na dodatkowej zawartości, którą zainstalowałeś, może to je zepsuć."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Czy jesteś pewien, że chcesz ponownie zainstalować tę instancję?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Resetuje zawartość instancji do jej oryginalnego stanu, usuwając jakiekolwiek modyfikacje lub zawartość którą dodano do paczki modów."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Ponownie zainstaluj paczkę modów"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Napraw"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Naprawianie"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Naprawa ponownie instaluje zależności Minecraft i sprawdza, czy nie są one uszkodzone. Może to rozwiązać problemy, jeśli gra nie uruchomi się z powodu błędów związanych z launcherem, ale nie rozwiąże problemów związanych z zainstalowanymi modami."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Naprawić instancję?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Trwa naprawianie"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Resetuj do aktualnego"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Pokaż wszystkie wersje"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "zmień wersję"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "zainstaluj"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "zainstaluj ponownie"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "napraw"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Podczas instalowania nie można wykonać: {action}"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Nie możesz {action} podczas bycia offline"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Podczas naprawiania nie można wykonać: {action}"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(nieznana wersja)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Ta instancja jest powiązana z serwerem, co oznacza, że nie możesz zmienić wersji gry. Rozłączenie spowoduje trwałe odłączenie tej instancji od serwera."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Ta instancja jest powiązana z serwerem, co oznacza, że mody nie mogą być aktualizowane i nie można zmienić ani loadera, ani wersji gry. Rozłączenie spowoduje trwałe odłączenie tej instancji od serwera."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Rozłącz od serwera"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Rozłącz instancję"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Jeśli przejdziesz dalej, nie będziesz mógł ponownie złączyć tej instancji bez tworzenia całkowicie nowej. Nie będziesz otrzymywać aktualizacji i zostanie ona przekształcona w zwykłą instancję."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Czy jesteś pewien, że chcesz rozłączyć tę instancję?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Ta instancja jest powiązana z paczką modów, co oznacza, że mody nie mogą być aktualizowane i nie można zmienić ani loadera, ani wersji gry. Rozłączenie spowoduje trwałe odłączenie tej instancji od paczki modów."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Rozłącz od paczki modów"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java i pamięć"
|
||||
},
|
||||
|
||||
@@ -5,6 +5,93 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Não foi possível acessar os servidores de autenticação"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Insira a descrição do pacote de mods..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Exportar"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Exportar pacote de mods"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Nome do pacote de mods"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Nome do pacote de mods"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Selecione arquivos e pastas para incluir no pacote"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Número da versão"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Todos os dados da sua instância serão permanentemente excluídos, incluindo seus mundos, configurações e todo o conteúdo instalado."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Esta ação não pode ser desfeita"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Excluir instância"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Excluir instância"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Este pacote de mods já está instalado na instância \"{instanceName}\"."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "Pacote de mods duplicado"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Criar mesmo assim"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "Ir para a instância"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "O pacote de mods já está instalado"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "projeto"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Copiar link"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Instalando..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Pacote de mods"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" foi adicionado"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} projetos foram adicionados"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Confira os projetos que estou usando no meu pacote de mods!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Compartilhando conteúdo do pacote de mods\n\n\n \t\t\t\t\t\t\n \t\t\t\t\t\t\t\n \t\t\t\t\t\t\n \t\t\t\t\t\t"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Mostrar arquivo"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Enviado com sucesso"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Desconhecido"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Atualizando..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Conteúdo necessário"
|
||||
},
|
||||
@@ -15,7 +102,7 @@
|
||||
"message": "Instalar"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, =0 {Nenhum mod} one {# mod} other {# mods}}\n"
|
||||
"message": "{count, plural, =0 {Nenhum mod} one {# mod} other {# mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Pacote de mods necessário"
|
||||
@@ -32,36 +119,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Ver conteúdos"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} adicionado"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Adicionado"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Removido"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Atualizado"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Atualize para jogar"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} removido"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Atualização necessária"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "É necessária uma atualização para jogar {name}. Atualize para a versão mais recente para iniciar o jogo."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} atualizado"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Modo de desenvolvedor ativado."
|
||||
},
|
||||
@@ -93,7 +159,7 @@
|
||||
"message": "O Modrinth App v{version} está pronto para ser instalado! Você pode recarregar para atualizar agora ou a atualização será feita automaticamente ao fechar o Modrinth App."
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "O Modrinth App v{version} baixado. Recarregue para atualizar agora ou a atualização será aplicada automaticamente ao fechar o Modrinth App."
|
||||
"message": "O Modrinth App v{version} foi baixado. Recarregue para atualizar agora ou a atualização será aplicada automaticamente ao fechar o Modrinth App."
|
||||
},
|
||||
"app.update-popup.body.linux": {
|
||||
"message": "O Modrinth App v{version} está disponível. Use seu gerenciador de pacotes para atualizar e obter os recursos e correções mais recentes!"
|
||||
@@ -230,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Editar mundo"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Projetos desativados"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Atualizações disponíveis"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Endereço"
|
||||
},
|
||||
@@ -344,150 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Instalação"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} para o Minecraft {game_version} já está instalada"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "A versão padrão {game_version} já está instalada"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Alterar versão"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Instalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Instalando"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Buscando versões do pacote de mods"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Instalando nova versão"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Versão instalada"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Informação de depuração:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Buscando detalhes do pacote de mods"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Versão do jogo"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Instalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Instalação em progresso"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Versão do {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Não foi possível carregar detalhes do pacote de mods. Verifique sua conexão com a internet."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} não está disponível para o Minecraft {version}. Tente outro carregador de mods."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Esta instância está vinculada a um pacote de mods, mas o pacote não foi encontrado no Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Plataforma"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Reinstalar pacote de mods"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Reinstalando pacote de mods"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "A reinstalação redefinirá todo o conteúdo instalado ou modificado para o fornecido pelo pacote de mods, removendo quaisquer mods ou conteúdo que você tenha adicionado sobre a instalação original. Isso pode corrigir comportamentos inesperados se alterações tiverem sido feitas na instância, mas se seus mundos agora dependem do conteúdo adicional instalado, isso pode danificar mundos existentes."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Tem certeza de que deseja reinstalar esta instância?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Volta ao estado original da instância, removendo quaisquer mods ou conteúdo que você tenha adicionado além do que já havia no pacote de mods original."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Reinstalar pacote de mods"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Reparar"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Reparando"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "O reparo reinstala as dependências do Minecraft e verifica se há corrupção. Isso pode resolver problemas se o seu jogo não estiver iniciando devido a erros relacionados ao launcher, mas não resolverá problemas ou travamentos relacionados a mods instalados."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Reparar instância?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Reparação em progresso"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Retornar ao padrão"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Exibir todas as versões"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "mudar a versão"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "instalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "reinstalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "reparar"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Não é possível {action} durante a instalação"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Não é possível {action} enquanto estiver offline"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Não é possível {action} enquanto repara"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(versão desconhecida)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Esta instância está vinculada a um servidor, o que significa que você não pode alterar a versão do Minecraft. Ao desvincular, esta instância será permanentemente desconectada do servidor."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Esta instância está vinculada a um servidor, o que significa que mods não podem ser atualizados e você não pode alterar o carregador de mods ou a versão do Minecraft. Desvincular desconectará permanentemente esta instância do servidor."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Desvincular do servidor"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Desvincular instância"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Ao prosseguir, não será possível vincular novamente sem criar uma instância totalmente nova. Você não receberá mais atualizações do pacote de mods e ela se tornará uma instância normal."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Tem certeza de que deseja desvincular esta instância?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Esta instância está vinculada a um pacote de mods, o que significa que mods não podem ser atualizados e você não pode alterar o carregador de mods ou a versão do Minecraft. Desvincular desconectará permanentemente esta instância do pacote de mods."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Desvincular do pacote de mods"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java e memória"
|
||||
},
|
||||
@@ -561,7 +480,7 @@
|
||||
"message": "Servidor incompatível"
|
||||
},
|
||||
"instance.worlds.linked_server": {
|
||||
"message": "Gerenciado pelo projeto do servidor"
|
||||
"message": "Gerenciado pelo projeto de servidor"
|
||||
},
|
||||
"instance.worlds.no_contact": {
|
||||
"message": "Não foi possível conectar-se ao servidor"
|
||||
|
||||
@@ -20,36 +20,15 @@
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Instância de servidor partilhada"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} adicionados"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Adicionado"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Removido"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Atualizado"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Atualiza para jogar"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} removidos"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Atualização necessária"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Uma atualização é necessária para jogar {name}. Por favor atualiza para a versão mais recente para iniciar o jogo."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} atualizados"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Modo de desenvolvedor ativado."
|
||||
},
|
||||
@@ -191,12 +170,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Editar mundo"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Projetos desativados"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Atualizações disponíveis"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Endereço"
|
||||
},
|
||||
@@ -305,141 +278,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Instalação"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} para Minecraft {game_version} já está instalado"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} já está instalado"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Alterar versão"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Instalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Instalando"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "A obter versões do modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Instalando a nova versão"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Atualmente instalado"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Informação de depuração:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "A obter detalhes do modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Versão do Jogo"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Instalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Instalação em curso"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Versão {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Não foi possível obter os detalhes do modpack associado. Por favor verifica a tua ligação à internet."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} não está disponivel para Minecraft {version}. Tenta outro carregador de mods."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Esta instância está associada a um modpack, mas não foi possível encontrar o modpack no Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Plataforma"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Reinstalar modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Reinstalando modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Reinstalar vai redefinir todo o conteúdo instalado ou modificado para o que é fornecido pelo modpack, removendo quaisquer mods ou conteúdo que tenhas adicionado à instalação original. Isto pode corrigir comportamentos inesperados se alterações foram feitas à instância, mas se os teus mundos dependerem de conteúdo adicional que instalaste, podem ficar corrompidos."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Tens a certeza que queres reinstalar esta instância?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Redefine o conteúdo da instância para o seu estado original, removendo quaisquer mods ou conteúdo que tenhas adicionado ao modpack original."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Reinstalar modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Reparar"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Reparando"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Reparar reinstala as dependências do Minecraft e verifica por corrupção. Isto pode resolver problemas se o teu jogo não estiver a abrir devido a erros relacionados ao launcher, mas não vai resolver problemas ou crashes relacionados a mods instalados."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Reparar instância?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Reparação em curso"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Redefinir para atuais"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Mostrar todas as versões"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "Alterar versão"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "instalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "reinstalar"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "reparar"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Não é possível {action} durante uma instalação em curso"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Não é possível {action} enquanto offline"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Não é possível {action} durante uma reparação em curso"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(versão desconhecida)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Desassociar instância"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Se procederes, não vais poder reassociá-la sem criar uma instância completamente nova. Não vais receber mais atualizações do modpack e a instância vai se tornar uma instância normal."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Tens a certeza que queres desassociar esta instância?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Esta instância está associada a um modpack, o que significa que mods não podem ser atualizados e não podes alterar o carregador de mods ou a versão do Minecraft. Desassociar vai desconectar permanentemente esta instância do modpack."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Desassociar do modpack"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java e memória"
|
||||
},
|
||||
|
||||
@@ -5,9 +5,45 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Nu se pot accesa serverele de autentificare"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Copiază linkul"
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Conținut necesar"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Instalați pentru a juca"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Instalează"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural,one {#mod} other {# moduri}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Pachet de mod necesar"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Acest server necesită modificări pentru a juca. Faceți clic pe Instalare pentru a configura fișierele necesare din Modrinth, apoi lansați direct pe server."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Instanță comună"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Instanță de server partajată"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Vizualizați conținutul"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Actualizați pentru a juca"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Actualizare necesară"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Este necesară o actualizare pentru a juca {name}. Vă rugăm să actualizați la cea mai recentă versiune pentru a lansa jocul."
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Modul dezvoltator activat."
|
||||
},
|
||||
@@ -35,6 +71,33 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Administrare resurse"
|
||||
},
|
||||
"app.update-popup.body": {
|
||||
"message": "Aplicația Modrinth v{version} este gata de instalat! Reîncărcați pentru a actualiza acum sau automat când închideți aplicația Modrinth."
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Aplicația Modrinth v{version} a terminat descărcarea. Reîncărcați pentru a actualiza acum sau automat când închideți aplicația Modrinth."
|
||||
},
|
||||
"app.update-popup.body.linux": {
|
||||
"message": "Aplicația Modrinth v{version} este disponibil. Utilizați managerul de pachete pentru a actualiza pentru cele mai recente funcții și remedieri!"
|
||||
},
|
||||
"app.update-popup.body.metered": {
|
||||
"message": "Aplicația Modrinth v{version} este disponibil acum! Deoarece sunteți într-o rețea cu contorizare, nu am descărcat-o automat."
|
||||
},
|
||||
"app.update-popup.changelog": {
|
||||
"message": "Jurnalul modificărilor"
|
||||
},
|
||||
"app.update-popup.download": {
|
||||
"message": "Descărcați ({size})"
|
||||
},
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "Descărcare finalizată"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "Reîncărcați"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "Actualizare disponibilă"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "Apasă aici pentru a vedea istoricul de modificări."
|
||||
},
|
||||
@@ -53,6 +116,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "Adaugă un prieten"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} prieten {count, plural,one {cerere} other {cerere}}"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Trimite cerere de prietenie"
|
||||
},
|
||||
@@ -104,6 +170,9 @@
|
||||
"friends.search-friends-placeholder": {
|
||||
"message": "Caută prieteni..."
|
||||
},
|
||||
"friends.section.heading": {
|
||||
"message": "{title} - {count}"
|
||||
},
|
||||
"friends.sign-in-to-add-friends": {
|
||||
"message": "<link>Conectează-te la un cont Modrinth</link> pentru a adăuga prieteni și a vedea ce joacă!"
|
||||
},
|
||||
@@ -143,12 +212,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Editează lumea"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Proiecte dezactivate"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Actualizări disponibile"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Adresă"
|
||||
},
|
||||
@@ -257,141 +320,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Instalare"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "Versiunea {version} a platformei {platform} pentru Minecraft {game_version} este deja instalată"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Versiunea Vanilla {game_version} este deja instalată"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Schimbă versiunea"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Instalează"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Se instalează"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Se obțin versiunile pachetului de moduri"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Se instalează noua versiune"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Instalat în prezent"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Informații de depanare:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Se obțin detaliile pachetului de moduri"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Versiune joc"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Instalează"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Instalare în progres"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Versiune {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Nu s-au putut obține detaliile pachetului de moduri. Te tog verifică-ți conexiunea la internet."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} nu este valabil pentru Minecraft {version}. Te rog încercă alt loader de moduri."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Instanța este legată de un pachet de moduri, dar pachetul de moduri nu a putut fi găsit pe Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Platformă"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Reinstalează pachetul de moduri"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Se reinstalează pachetul de moduri"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Reinstalarea va reseta tot conținutul instalat sau modificat la starea inițială a pachetului de moduri, eliminând orice moduri sau conținut pe care le-ai adăugat tu. Acest lucru poate rezolva un comportament neașteptat dacă s-au făcut modificări instanței, dar dacă lumile tale depind acum de conținut suplimentar instalat, este posibil ca ele să nu mai funcționeze corect."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Ești sigur că dorești să reinstalezi această instanță?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Resetează conținutul instanței la starea sa inițială, eliminând orice moduri sau conținut pe care le-ai adăugat peste pachetul de moduri original."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Reinstalează pachetul de moduri"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Repară"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Se repară"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Repararea reinstalează dependențele Minecraft și verifică dacă există corupție. Acest lucru poate rezolva problemele în cazul în care jocul tău nu pornește din cauza erorilor legate de lansator, dar nu va rezolva problemele sau blocările legate de modurile instalate."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Repară instanța?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Repararea în progres"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Resetează la starea actuală"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Afișează toate versiunile"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "schimbă versiunea"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "instalează"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "reinstalează"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "repară"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Nu poți {action} în timp ce se instalează"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Nu poți {action} în timp ce ești neconectat"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Nu poți {action} în timp ce se repară"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(versiune necunoscută)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Dezleagă instanța"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Dacă continui, nu o vei mai putea lega din nou fără a crea o instanță complet nouă. Nu vei mai primi actualizări ale pachetului de moduri, iar acesta va deveni o instanță normală."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Ești sigur că dorești să dezlegi această instanță?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Această instanță este legată de un pachet de moduri, ceea ce înseamnă că modurile nu pot fi actualizate și nu poți schimba loader-ul de moduri sau versiunea de Minecraft. Dezlegarea va deconecta permanent această instanță de pachetul de moduri."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Dezleagă de pachetul de moduri"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java și memorie"
|
||||
},
|
||||
@@ -464,6 +395,9 @@
|
||||
"instance.worlds.incompatible_server": {
|
||||
"message": "Serverul este incompatibil"
|
||||
},
|
||||
"instance.worlds.linked_server": {
|
||||
"message": "Gestionat de proiect server"
|
||||
},
|
||||
"instance.worlds.no_contact": {
|
||||
"message": "Serverul nu a putut fi contactat"
|
||||
},
|
||||
@@ -499,5 +433,17 @@
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "Sincronizează cu instanța"
|
||||
},
|
||||
"search.filter.locked.server": {
|
||||
"message": "Furnizat de server"
|
||||
},
|
||||
"search.filter.locked.server-environment.title": {
|
||||
"message": "Numai modurile de pe partea clientului pot fi adăugate la instanța serverului"
|
||||
},
|
||||
"search.filter.locked.server-game-version.title": {
|
||||
"message": "Versiunea jocului este furnizată de server"
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Încărcătorul este furnizat de server"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,93 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Нет связи с серверами аутентификации"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Введите описание сборки..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Экспортировать"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Экспорт модпака"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Название сборки"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Название сборки"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Выберите элементы экспорта в модпак"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Номер версии"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Все данные вашей инстанции будут окончательно удалены, включая ваши миры, настройки и весь установленный контент."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Это действие нельзя обратить"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Удалить сборку"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Удаление сборки"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Этот модпак уже установлен в инстанции \"{instanceName}\"."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "Дублировать модпак"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Всё равно создать"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "К инстанции"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Модпак уже установлен"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "проект"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Копировать ссылку"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Установка..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Сборка"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" был добавлен"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "Проектов добавлено: {count}"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Посмотрите проекты, в моём модпаке!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Содержимое сборки"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Показать в папке"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Успешно загружено"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Неизвестно"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Обновление..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Требуется дополнительный контент"
|
||||
},
|
||||
@@ -30,38 +117,17 @@
|
||||
"message": "Общая сборка сервера"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Посмотреть содержимое"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count, plural, one {# добавление} few {# добавления} other {# добавлений}}"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Добавлен"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Удалён"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Обновлён"
|
||||
"message": "Посмотреть"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Обновление перед запуском"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count, plural, one {# удаление} few {# удаления} other {# удалений}}"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Требуется обновление"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Обновите {name} до последней версии, чтобы запустить игру."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count, plural, one {# обновление} few {# обновления} other {# обновлений}}"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Режим разработчика включён."
|
||||
},
|
||||
@@ -192,7 +258,7 @@
|
||||
"message": "{title} — {count}"
|
||||
},
|
||||
"friends.sign-in-to-add-friends": {
|
||||
"message": "<link>Войдите в Modrinth</link>, чтобы добавлять друзей и знать, во что они играют!"
|
||||
"message": "<link>Войдите в аккаунт Modrinth</link>, вы сможете добавлять друзей и видеть их статус!"
|
||||
},
|
||||
"instance.add-server.add-and-play": {
|
||||
"message": "Добавить и играть"
|
||||
@@ -230,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Настройка мира"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Отключённые проекты"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Доступны обновления"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Адрес"
|
||||
},
|
||||
@@ -344,150 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Установка"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} для Minecraft {game_version} уже установлен"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Ванильный Minecraft {game_version} уже установлен"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Сменить версию"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Установить"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Установка"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Получение версий сборки"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Установка новой версии"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Установлено"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Отладочная информация:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Получение сведений о сборке"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Версия игры"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Установить"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Выполняется установка"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Версия {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Не удалось получить сведения о сборке. Проверьте подключение к интернету."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} недоступен для Minecraft {version}. Выберите другой загрузчик."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Не удалось найти сборку на Modrinth, с которой связано установленное содержимое."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Платформа"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Переустановить сборку"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Переустановка сборки"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Установленное содержимое будет сброшено к исходному состоянию сборки, а внесённые в её состав изменения будут удалены. Это может исправить возникшие после изменений проблемы с игрой, но зависящие от добавленного содержимого миры могут перестать корректно работать."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Вы действительно хотите переустановить сборку?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Возвращает содержимое сборки к исходному состоянию и удаляет все моды или контент, добавленные поверх оригинальной сборки."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Переустановка сборки"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Исправить"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Исправление"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Будут переустановлены зависимости Minecraft, а также определены и восстановлены повреждённые файлы. Это может помочь с проблемами запуска игры на стороне лаунчера, но не исправит проблемы и вылеты из-за ошибок в имеющихся модах."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Исправить сборку?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Выполняется исправление"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Сбросить выбор"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Показывать все версии"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "сменить версию"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "установить"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "переустановить"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "исправить"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Невозможно {action} во время установки"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Невозможно {action} без подключения к сети"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Невозможно {action} во время исправления"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(неизвестная версия)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Текущее содержимое связано с сервером — смена версии игры недоступна. Отвязка сервера необратимо разорвёт эту связь."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Текущее содержимое связано с сервером — обновление модов и смена загрузчика или версии игры недоступны. Отвязка сервера необратимо разорвёт эту связь."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Отвязка сервера"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Отвязать сборку"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Если продолжить, восстановить связь будет невозможно без создания новой сборки. Сборка утратит возможность получать обновления и станет локальной."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Вы действительно хотите отвязать сборку?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Текущее содержимое связано со сборкой на Modrinth — обновление модов и смена загрузчика или версии игры недоступны. Отвязка сборки необратимо разорвёт эту связь."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Отвязка сборки"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java и память"
|
||||
},
|
||||
|
||||
@@ -1 +1,86 @@
|
||||
{}
|
||||
{
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Izvoz"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Broj verzije"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Kopiraj link"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Instaliranje..."
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Prikaži datoteku"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Uspešno otpremljeno"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Nepoznato"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Ažuriranje..."
|
||||
},
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Izgled"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Java instalacije"
|
||||
},
|
||||
"app.settings.tabs.language": {
|
||||
"message": "Jezik"
|
||||
},
|
||||
"app.settings.tabs.privacy": {
|
||||
"message": "Privatnost"
|
||||
},
|
||||
"friends.friend.cancel-request": {
|
||||
"message": "Otkaži zahtev"
|
||||
},
|
||||
"friends.friend.remove-friend": {
|
||||
"message": "Ukloni prijatelja"
|
||||
},
|
||||
"friends.friend.request-sent": {
|
||||
"message": "Zahtev za prijateljstvo poslat"
|
||||
},
|
||||
"friends.friend.view-profile": {
|
||||
"message": "Pogledaj profil"
|
||||
},
|
||||
"friends.heading": {
|
||||
"message": "Prijatelji"
|
||||
},
|
||||
"instance.add-server.title": {
|
||||
"message": "Dodaj server"
|
||||
},
|
||||
"instance.edit-server.title": {
|
||||
"message": "Izmeni server"
|
||||
},
|
||||
"instance.edit-world.hide-from-home": {
|
||||
"message": "Sakrij sa početne stranice"
|
||||
},
|
||||
"instance.edit-world.name": {
|
||||
"message": "Ime"
|
||||
},
|
||||
"instance.edit-world.placeholder-name": {
|
||||
"message": "Minecraft svet"
|
||||
},
|
||||
"instance.edit-world.title": {
|
||||
"message": "Izmeni svet"
|
||||
},
|
||||
"instance.server-modal.placeholder-name": {
|
||||
"message": "Minecraft Server"
|
||||
},
|
||||
"instance.settings.tabs.general.deleting.button": {
|
||||
"message": "Brisanje..."
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups.create": {
|
||||
"message": "Kreiraj novu grupu"
|
||||
},
|
||||
"instance.settings.tabs.general.name": {
|
||||
"message": "Ime"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,81 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Kan ej nå autentiseringsservrarna"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Ange modpaketets beskrivning..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Exportera"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Exportera modpaket"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Modpaketets namn"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Modpaketets namn"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Välj filer och mappar att inkludera i paketet"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Versionsnummer"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "All data från din instans kommer att raderas permanent, inklusive dina världar, konfigurationer och allt installerat innehåll."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Detta kan inte ogöras"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Radera instans"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Radera instans"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Skapa ändå"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "projekt"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Kopiera länk"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Installerar..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Modpaket"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" lades till"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} projekt lades till"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Kolla in projekten jag använder i mitt modpaket!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Delar innehåll från modpaket"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Visa fil"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Uppladdning lyckades"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Okänt"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Uppdaterar..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Innehåll krävs"
|
||||
},
|
||||
@@ -32,36 +107,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Visa innehåll"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} tillagda"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Tillagd"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Borttaget"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Uppdaterad"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Uppdatera för att spela"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} borttaget"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Uppdatering krävs"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "En uppdatering krävs för att spela {name}. Vänligen uppdatera till senaste version för att starta spelet."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} uppdaterade"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Utvecklarläge aktiverat."
|
||||
},
|
||||
@@ -111,7 +165,7 @@
|
||||
"message": "Nedladdning slutförd"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "Ladda om"
|
||||
"message": "Kolla efter uppdateringar"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "Uppdatering tillgänglig"
|
||||
@@ -230,12 +284,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Redigera värld"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Avaktiverade projekt"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Uppdateringar tillgängliga"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Adress"
|
||||
},
|
||||
@@ -344,150 +392,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Installation"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} för Minecraft {game_version} är redan installerat"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} är redan installerad"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Ändra version"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Installera"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Installerar"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Hämtar modpack-versioner"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Installerar ny version"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "För närvarande installerat"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Felsökningsinformation:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Hämtar modpack-detaljer"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Spelversion"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Installera"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Installation pågår"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} version"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Kan inte hämta länkade modpack-detaljer. Vänligen kontrollera din internetanslutning."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} är inte tillgänglig för Minecraft {version}. Prova en annan modloader."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Denna instans är länkad till ett modpack, men modpacket kunde inte hittas på Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Plattform"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Ominstallera modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Ominstallerar modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Ominstallation kommer att återställa allt installerat eller modifierat innehåll till det som tillhandahålls av modpaketet och ta bort eventuella moddar eller innehåll som du har lagt till ovanpå den ursprungliga installationen. Detta kan åtgärda oväntat beteende om ändringar har gjorts i instansen, men om dina världar nu är beroende av ytterligare installerat innehåll kan det skada befintliga världar."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Är du säker att du vill ominstallera denna instans?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Återställer instansens innehåll till dess ursprungliga tillstånd och tar bort eventuella moddar eller innehåll som du har lagt till ovanpå det ursprungliga modpaketet."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Ominstallera modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Reparera"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Reparerar"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Reparation installerar om Minecraft-beroenden och kontrollerar efter korruption. Detta kan åtgärda problem om spelet inte startar på grund av launcher-relaterade fel, men löser inte problem eller krascher som är relaterade till installerade mods."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Reparera instans?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Reparation pågår"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Återställ till nuvarande"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Visa alla versioner"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "ändra version"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "installera"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "ominstallera"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "reparera"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Kan inte {action} medans installationen pågår"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Kan inte {action} medans offline"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Kan inte {action} medans reparationen pågår"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(okänd version)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Denna instans är länkad till en server, vilket betyder att du inte kan ändra Minecraft-version. Att avlänka kommer koppla bort instansen från servern permanent."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Denna instans är länkad till en server, vilket innebär att moddar inte kan uppdateras och mod-loader eller Minecraft-version inte kan ändras. Att avlänka kommer koppla bort instansen från servern permanent."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Avlänka från server"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Ta bort koppling till instans"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Om du fortsätter kommer du inte kunna länka om den utan att skapa en helt ny instans. Du kommer inte längre att ta emot uppdateringar för modpacket och det kommer att bli en vanlig instans."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Är du säker att du vill ta bort koppling till denna instans?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Denna instans är länkad till ett modpaket, vilket innebär att moddar inte kan uppdateras och mod-loader eller Minecraft-version inte kan ändras. Att avlänka kommer koppla bort instansen från modpaketet permanent."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Ta bort koppling från modpack"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java och minne"
|
||||
},
|
||||
|
||||
@@ -5,33 +5,15 @@
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "ติดตั้ง"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count}เพิ่มแล้ว"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "เพิ่มแล้ว"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "ลบทิ้งแล้ว"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "อัปเดตแล้ว"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "อัปเดตเพื่อเล่น"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count}ลบออกแล้ว"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "ต้องมีการอัปเดต"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "ต้องอัปเดตอย่างหนึ่งเพื่อเล่น {name}. โปรดอัปเดตให้เป็นเวอร์ชั่นล่าสุดเพื่อเปิดเกมใ"
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count}อัปเดตแล้ว"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "กำลังอยู่ในโหมดผู้พัฒนา"
|
||||
},
|
||||
@@ -167,12 +149,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "แก้ไขโลก"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "ปิดโปรเจ็ค"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "พบอัพเดท"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "ที่อยู่เซิร์ฟเวอร์"
|
||||
},
|
||||
@@ -245,46 +221,7 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "การติดตั้ง"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} สำหรับ Minecraft {game_version} ติดตั้งไว้อยู่แล้ว"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "เปลี่ยนเวอร์ชั่น"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "ติดตั้ง"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "กำลังติดตั้ง"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "กำลังติดตั้งเวอร์ชั่นใหม่"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "ติดตั้งอยู่"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "เวอร์ชันของเกม"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "ติดตั้ง"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "กำลังคิดตั้งอยู่"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "เวอร์ชั่น {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "ซ่อมแซม"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "กำลังซ่อมแซม"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "ซ่อมแซมหรือไม่?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "กำลังซ่อมแซมอยู่ในขณะนี้"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,69 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Doğrulama sunucularına erişilemedi"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Mod paketi açıklaması yazın..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Çıkart"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Modpaketi çıkart"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Modpaketi adı"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Modpaketi adı"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Sürüm numarası"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Bu eylem geri alınamaz"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Yinede oluştur"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Modpaketi zaten kurulu"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "proje"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Bağlantıyı kopyala"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Kuruluyor..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Modpaketi"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" eklendi"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} projeler eklendi"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Modpaketimde kullandığım projelere göz at!"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Dosya göster"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Başarı ile yüklendi"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Bilinmeyen"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Güncelleniyor..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "İçerik gerekli"
|
||||
},
|
||||
@@ -32,36 +95,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "İçeriği görüntüle"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "{count} eklendi"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Eklendi"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Kaldırıldı"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Güncellendi"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Oynamak için güncelle"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "{count} kaldırıldı"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Güncelleme gerekli"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "{name} oyununu oynamak için güncelleme gereklidir. Oyunu başlatmak için lütfen en son sürüme güncelleyin."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "{count} güncellendi"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Geliştirici modu açıldı."
|
||||
},
|
||||
@@ -230,12 +272,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Dünyayı düzenle"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Devre dışı projeler"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Güncelleme var"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Adres"
|
||||
},
|
||||
@@ -344,150 +380,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Kurulum"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "Minecraft {game_version} için {platform} {version} zaten kurulu"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} zaten kurulu"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Sürüm değiştir"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Kur"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Kuruluyor"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Mod paketi sürümleri çekiliyor"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Yeni sürüm kuruluyor"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Şu an kurulu"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Ayıklama bilgisi:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Mod paketi detayları çekiliyor"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Oyun sürümü"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Kur"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Kurulum üzerinde çalışılıyor"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} sürümü"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Bağlı mod paketi detayları çekilemiyor. Lütfen internet bağlantınızı kontrol edin."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader}, Minecraft {version} için mevcut değil. Başka bir mod yükleyici deneyin."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Bu profil bir mod paketine bağlı ama o mod paketi Modrinth'te bulunamıyor."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Platform"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Mod paketini yeniden kur"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Mod paketi yeniden kuruluyor"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Yeniden kurmak mod paketindeki indirilmiş veya değiştirilmiş her şeyi mod paketinin sağladıklarına sıfırlar, senin mod paketinin üstüne eklediğin modları ve içerikleri siler. Bu değişiklik kaynaklı beklenmedik durumları düzeltebilir, ama dünyaların ek kurulmuş içeriğe bağımlıysa o dünyaları bozabilir."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Bu kurulumu tekrar kurmak istediğine emin misin?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Kurulumun içeriğini ilk hâline geri döndürür, orijinal mod paketinin üstüne eklediğin modları ve içerikleri siler."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Mod paketini yeniden kur"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Tamir Et"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Tamir Ediliyor"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Tamir etmek Minecraft dosyalarını tekrar indirir ve bozulma varmı diye kontrol eder. Bu oyunun başlatıcısı ile ilgili bazı sorunları çözebilir ama indirilen modlar ile alakalı sorunları çözemez."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Tamir Edilsinmi?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Tamir ediliyor"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Mevcut olana sıfırla"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Bütün sürümleri göster"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "sürümü değiştir"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "indirilemez"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "yeniden kur"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "tamir edilemez"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "İndirirken {action}"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Çevrimdışı iken {action}"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Tamir edilirken {action}"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(bilinmeyen sürüm)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Bu örnek bir sunucuya bağlıdır, bu da Minecraft sürümünü değiştiremeyeceğin anlamına gelir. Bağlantıyı kesmek, bu örneği sunucudan kalıcı olarak ayıracaktır."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Bu örnek bir sunucuya bağlıdır, bu da modların güncellenemeyeceği ve mod yükleyicisini veya Minecraft sürümünü değiştiremeyeceğin anlamına gelir. Bağlantıyı kaldırmak, bu örneği sunucudan kalıcı olarak ayıracaktır."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Sunucudan ayrıl"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Kurulum bağlantısını kes"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Devam edersen bu kurulumu geri bağlayamazsın. Mod paketi güncellemeleri almazsın ve bu kurulum normal kuruluma dönüşür."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Bu kurulumun bağını koparmak istediğine eminmisin?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Bu kurulum bir mod paketine bağlı, bu nedenle modlar güncellenemez ve mod yükleyicisini veya Minecraft sürümünü değiştiremezsin. Kurulumdan mod paketini koparmak kalıcıdır."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Mod paketi bağını kopar"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java ve bellek"
|
||||
},
|
||||
|
||||
@@ -5,6 +5,93 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Не вдається зв’язатися зі серверами автентифікації"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Уведіть опис збірки…"
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Експортувати"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Експортувати збірку"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Назва збірки"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Назва збірки"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Виберіть файли й теки, щоб додати їх до збірки"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Номер версії"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Усі дані вашого профілю будуть видалені назавжди, включно з вашими світами, конфігураціями та усім встановленим контентом."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Ця дія є незворотною"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Видалити профіль"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Видалити профіль"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Цю збірку вже встановлено в профілі «{instanceName}»."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "Дублікат збірки"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Все одно створити"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "Перейти до профілю"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Збірку вже встановлено"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "проєкт"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Копіювати посилання"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Установлення…"
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Збірка"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "«{name}» було додано"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} проєктів було додано"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Погляньте на проєкти, які я використовую у своїй збірці!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Поширення вмісту збірки"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Показати файл"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Успішно вивантажено"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Невідомо"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Оновлення…"
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Потрібний уміст"
|
||||
},
|
||||
@@ -32,36 +119,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Дивитися вміст"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "Додано {count}"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "Додано"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "Видалено"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "Оновлено"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Оновлення перед грою"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "Видалено {count}"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Необхідне оновлення"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "«{name}» потребує оновлення, щоб грати. Будь ласка, оновіть гру до останньої версії, щоб запустити її."
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "Оновлено {count}"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Увімкнено режим розробника."
|
||||
},
|
||||
@@ -129,7 +195,7 @@
|
||||
"message": "Завантаження оновлення ({percent}%)"
|
||||
},
|
||||
"app.update.reload-to-update": {
|
||||
"message": "Перезапустіть, аби встановити оновлення"
|
||||
"message": "Перезавантажте, щоб установити оновлення"
|
||||
},
|
||||
"friends.action.add-friend": {
|
||||
"message": "Додати друга"
|
||||
@@ -230,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "Редагувати світ"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Вимкнені проєкти"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Оновлення доступні"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Адреса"
|
||||
},
|
||||
@@ -344,150 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Інсталяція"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} для Minecraft {game_version} вже встановлено"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Ванільна {game_version} вже встановлена"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Змінити версію"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Установити"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Установлення"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Отримання версій збірки"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Установлення нової версії"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Наразі встановлено"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Інформація налагодження:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Отримання деталей збірки"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Версія гри"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Установити"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Установлення триває"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Версія {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Не вдається отримати деталі пов’язаної збірки. Будь ласка, перевірте ваше з’єднання з інтернетом."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} недоступний для Minecraft {version}. Спробуйте інший завантажувач модів."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Цей профіль пов’язаний зі збіркою, проте саму збірку не вдалося знайти на Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Платформа"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Перевстановити збірку"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Перевстановлення збірки"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Перевстановлення скине ввесь доданий або модифікований уміст до наданого збіркою, прибираючи будь-які додатково встановлені вами моди чи вміст. Якщо ви змінювали профіль, це може виправити непередбачувану поведінку, однак, якщо ваші світи залежать від додаткового вмісту, світи можуть пошкодитися."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Ви впевнені, що хочете перевстановити цей профіль?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Скидає вміст профілю до початкового стану, прибираючи будь-які моди чи вміст, що було додано поверх оригінальної збірки."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Перевстановити збірку"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Полагодити"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Лагодження"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Відновлення перевстановлює залежності Minecraft та перевіряє їх на наявність пошкоджень. Це може розв’язати проблеми, якщо ваша гра не запускається через помилки запускача, але не розв’яже проблеми або збої, пов’язані зі встановленими модами."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Відновити профіль?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Лагодження триває"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Скинути до поточного"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Показати всі версії"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "змінити версію"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "установити"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "перевстановити"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "полагодити"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Неможливо {action} під час установлення"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Неможливо {action} без з’єднання з інтернетом"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Неможливо {action} під час лагодження"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(невідома версія)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "Цей профіль пов’язаний із сервером, що означає, що ви не можете змінити версію Minecraft. Від’єднання назавжди від’єднає цей профіль від сервера."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "Цей профіль пов’язаний із сервером, що означає, що моди не можна оновлювати, і ви не можете змінити завантажувач модів або версію Minecraft. Від’єднання назавжди від’єднає цей профіль від сервера."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "Від'єднати від сервера"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Відв’язати профіль"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Якщо ви продовжите, ви не зможете повторно підв’язати його без створення повністю нового профілю. Ви більше не будете отримувати оновлення збірки та цей профіль стане звичайним."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Ви впевнені, що хочете відв’язати цей профіль?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Цей профіль пов’язаний зі збіркою, тобто, не можна оновлювати моди та не можна змінювати завантажувач чи версію Minecraft. Відв’язання призведе до остаточного від’єднання цього профілю від збірки."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Відв’язати від збірки"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java та пам’ять"
|
||||
},
|
||||
|
||||
@@ -5,6 +5,129 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Không thể kết nối đến máy chủ xác thực"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Thêm miêu tả cho gói modpack..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Xuất"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "Xuất modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Tên modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Tên modpack"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Chọn tệp và gói để thêm vào gói tài nguyên"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "Phiên bản"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Tất cả dữ liệu trong gói hồ sơ này sẽ bị xoá, bao gồm thế giới của bạn, cấu hình, và tất cả nội dung đã được tải xuống."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Hành động này sẽ không thể huỷ bỏ"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Xoá hồ sơ"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Xoá hồ sơ"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "Modpack này đã được cài đặt trong phiên chơi \"{instanceName}\"."
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "Nhân bản modpack"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "Vẫn tiếp tục tạo"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "Đi đến phiên chơi"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Modpack đã được cài đặt"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "Dự án"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "Sao chép liên kết"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "Đang tải xuống..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "Modpack"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" đã được thêm"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "{count} dự án đã được thêm"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Kiểm tra dự án tôi đang sử dụng trong modpack của mình!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Chia sẻ hồ sơ modpack"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "Hiện tệp"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Tải lên thành công"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "Không rõ"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "Đang cập nhật..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "Nội dung bắt buộc"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Tải xuống để chơi"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Tải xuống"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} other {# mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Yêu cầu modpack"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Máy chủ này yêu cầu mod để có thể chơi. Vui lòng ấn vào tải xuống và tải các tệp bắt buộc từ Modrinth và khởi chạy trực tiếp để tham gia máy chủ."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Chia sẻ hồ sơ"
|
||||
},
|
||||
"app.modal.install-to-play.shared-server-instance": {
|
||||
"message": "Chia sẻ hồ sơ máy chủ"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Xem nội dung"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Cập nhật và bắt đầu chơi"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Yêu cầu cập nhật"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Bạn cần cập nhật {name} để có thể chơi. Vui lòng cập nhật lên bản mới nhất để khởi chạy trò chơi."
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Chế độ nhà phát triển đã được bật."
|
||||
},
|
||||
@@ -15,7 +138,7 @@
|
||||
"message": "Giao diện"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Tuỳ chọn bản hiện thể mặc định"
|
||||
"message": "Tuỳ chọn hồ sơ khởi chạy mặc định"
|
||||
},
|
||||
"app.settings.tabs.feature-flags": {
|
||||
"message": "Các cờ tính năng"
|
||||
@@ -32,8 +155,35 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Quản lý tài nguyên"
|
||||
},
|
||||
"app.update-popup.body": {
|
||||
"message": "Phiên bản v{version} của Modrinth đã được chuẩn bị để cài đặt! Khởi động lại ứng dụng để cập nhật ngay bây giờ, hoặc cập nhật tự động khi bạn đóng Modrinth."
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Phiên bản v{version} của Modrinth đã sẵn sàng để có thể cài đặt. Khởi động lại ứng dụng để cập nhật ngay bây giờ, hoặc tự động cập nhật sau khi bạn tắt Modrinth."
|
||||
},
|
||||
"app.update-popup.body.linux": {
|
||||
"message": "Phiên bản v{version} của Modrinth hiện đang khả dụng. Hãy sử dụng trình quản lý gói của bạn để cập nhật các tính năng và bản vá lỗi mới nhất!"
|
||||
},
|
||||
"app.update-popup.body.metered": {
|
||||
"message": "Phiên bản v{version} của Modrinth hiện đang khả dụng ngay bây giờ! Vì bạn đang sử dụng mạng có tính phí theo dung lượng nên chúng tôi không tự động tải xuống."
|
||||
},
|
||||
"app.update-popup.changelog": {
|
||||
"message": "Nhật ký thay đổi"
|
||||
},
|
||||
"app.update-popup.download": {
|
||||
"message": "Tải xuống ({size})"
|
||||
},
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "Cài đặt thành công"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "Khởi động lại"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "Cập nhật mới hiện đang khả dụng"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "Nháy vào đây để xem nhật kí thay đổi."
|
||||
"message": "Nhấn vào đây để xem nhật kí thay đổi."
|
||||
},
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "Phiên bản {version} đã được cài đặt thành công!"
|
||||
@@ -45,7 +195,7 @@
|
||||
"message": "Đang tải xuống bản cập nhật ({percent}%)"
|
||||
},
|
||||
"app.update.reload-to-update": {
|
||||
"message": "Hãy tải lại để cài đặt bản cập nhật"
|
||||
"message": "Hãy khởi động lại để cài đặt bản cập nhật"
|
||||
},
|
||||
"friends.action.add-friend": {
|
||||
"message": "Thêm một người bạn"
|
||||
@@ -69,19 +219,19 @@
|
||||
"message": "Tên người dùng Modrinth của bạn của bạn là gì?"
|
||||
},
|
||||
"friends.add-friends-to-share": {
|
||||
"message": "Hãy <link>Thêm bạn bè</link> để biết họ đang chơi gì!"
|
||||
"message": "Hãy <link>thêm bạn bè</link> để biết họ đang chơi gì!"
|
||||
},
|
||||
"friends.friend.cancel-request": {
|
||||
"message": "Huỷ yêu cầu"
|
||||
},
|
||||
"friends.friend.remove-friend": {
|
||||
"message": "Loại bỏ bạn bè"
|
||||
"message": "Xoá bạn bè"
|
||||
},
|
||||
"friends.friend.request-sent": {
|
||||
"message": "Đã gửi yêu cầu kết bạn"
|
||||
},
|
||||
"friends.friend.view-profile": {
|
||||
"message": "Xem hồ sơ"
|
||||
"message": "Xem thông tin"
|
||||
},
|
||||
"friends.heading": {
|
||||
"message": "Bạn bè"
|
||||
@@ -144,13 +294,7 @@
|
||||
"message": "Đặt lại biểu tượng"
|
||||
},
|
||||
"instance.edit-world.title": {
|
||||
"message": "Sửa thể giới"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "Các dự án bị tắt"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Có bản cập nhật mới"
|
||||
"message": "Chỉnh sửa thế giới"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Địa chỉ"
|
||||
@@ -168,28 +312,28 @@
|
||||
"message": "Tổng quát"
|
||||
},
|
||||
"instance.settings.tabs.general.delete": {
|
||||
"message": "Xoá hiện thể"
|
||||
"message": "Xoá hồ sơ"
|
||||
},
|
||||
"instance.settings.tabs.general.delete.button": {
|
||||
"message": "Xoá hiện thể"
|
||||
"message": "Xoá hồ sơ"
|
||||
},
|
||||
"instance.settings.tabs.general.delete.description": {
|
||||
"message": "Xoá vĩnh viễn bản này khỏi thiết bị, bao gồm thế giới, cài đặt, và các nội dung được cài đặt khác. Hãy cân nhắc vì bạn không thể khôi phục sau khi xoá."
|
||||
"message": "Xoá vĩnh viễn sẽ xoá toàn bộ thế giới, cài đặt, và các nội dung được cài đặt khỏi thiết bị của bạn. Hãy cân nhắc và chắc chắn vì bạn không thể khôi phục các tệp dữ liệt sau khi xoá."
|
||||
},
|
||||
"instance.settings.tabs.general.deleting.button": {
|
||||
"message": "Đang xoá..."
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-button": {
|
||||
"message": "Nhân đôi"
|
||||
"message": "Nhân bản"
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-button.tooltip.installing": {
|
||||
"message": "Không thể nhân đôi trong khi đang cài đặt."
|
||||
"message": "Không thể nhân bản trong khi đang cài đặt."
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-instance": {
|
||||
"message": "Sao đôi hiện thể"
|
||||
"message": "Nhân bản hồ sơ"
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-instance.description": {
|
||||
"message": "Tạo ra một bản sao của hiện thể này, bao gồm các thế giới, cấu hình, mod, v.v.."
|
||||
"message": "Tạo ra một bản sao của hồ sơ này, bao gồm các thế giới, cấu hình, mod, v.v."
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon": {
|
||||
"message": "Sửa biểu tượng"
|
||||
@@ -260,141 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Cài đặt"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} cho Minecraft {game_version} đã được cài đặt"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Vanilla {game_version} đã được cài đặt"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "Thay đổi phiên bản"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "Cài đặt"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "Đang cài đặt"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Đang tìm phiên bản modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Cài đặt phiên bản mới"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "Đã cài đặt"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "Thông tin gỡ lỗi:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Đang tìm chi tiết của modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Phiên bản trò chơi"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Cài đặt"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Đang cài đặt"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Phiên bản {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Không thể hiện chi tiết modpack đã liên kết. Vui lòng kiểm tra kết nối mạng."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} không khả dụng cho Minecraft {version}. Hãy thử mod loader khác."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Phiên bản này đã được liên kết với modpack, nhưng không thể tìm thấy modpack trên Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Nền tảng"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Cài lại gói mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Đang cài lại gói mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Cài đặt lại sẽ reset tất cả nội dung đã cài đặt hoặc thay đổi được cung cấp bởi modpack đó, đồng thời xóa các mods hoặc nội dung mà bạn đã thêm vào sau khi cài đặt lúc ban đầu. Thao tác này có thể khắc phục các lỗi phát sinh nếu phiên bản bị thay đổi, nhưng thế giới của bạn có thể bị lỗi nếu chúng phụ thuộc vào nội dung bạn đã tải."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Bạn có chắc là bạn muốn tải lại phiên bản này không?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Đặt lại bản cài đặt này về phiên bản ban đầu, xoá các mod và nội dung bạn đã cài đặt đè lên modpack gốc."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Cài lại gói mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Sửa chửa"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Đang sửa chữa"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Trình Sửa lỗi sẽ cài đặt lại các tệp phụ thuộc của Minecraft và kiểm tra các lỗi hư hại dữ liệu. Hành động này có thể khắc phục sự cố nếu trò chơi không khởi chạy được do lỗi trình khởi động, nhưng sẽ không giải quyết được các vấn đề hoặc sự cố sập game liên quan đến các bản mod đã cài đặt."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Sửa chữa phiên bản?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Đang sửa chữa"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Cài đặt lại về trạng thái ban đầu"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "Hiện tất cả phiên bản"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "thay đổi phiên bản"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "cài đặt"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "cài lại"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "sửa chửa"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Không thể {action} trong khi đang cài đặt"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Không thể {action} khi không có mạng"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Không thể {action} khi đang sửa chữa"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(phiên bản không rõ)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Xóa liên kết phiên bản"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Nếu tiếp tục, bạn sẽ không thể liên kết nó lại mà phải tạo một bản mới. Bạn sẽ không nhận được các bản cập nhật của modpack và nó sẽ trở lại bình thường."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Bạn có chắc là bạn muốn xóa liên kết phiên bản này không?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Phiên bản này được liên kết với một modpack, nghĩa là bạn không thể cập nhật mod cũng như thay đổi mod loader hoặc phiên bản Minecraft. Nếu hủy liên kết, phiên bản này sẽ bị ngắt kết nối vĩnh viễn khỏi modpack."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Hủy liên kết khỏi modpack"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java và bộ nhớ"
|
||||
},
|
||||
@@ -411,7 +423,7 @@
|
||||
"message": "Bản cài đặt Java"
|
||||
},
|
||||
"instance.settings.tabs.java.java-memory": {
|
||||
"message": "Bộ nhớ cấp phát"
|
||||
"message": "Bộ nhớ phân bổ"
|
||||
},
|
||||
"instance.settings.tabs.window": {
|
||||
"message": "Cửa sổ"
|
||||
@@ -467,6 +479,9 @@
|
||||
"instance.worlds.incompatible_server": {
|
||||
"message": "Máy chủ không tương thích"
|
||||
},
|
||||
"instance.worlds.linked_server": {
|
||||
"message": "Quản lý dự án máy chủ"
|
||||
},
|
||||
"instance.worlds.no_contact": {
|
||||
"message": "Không thể liên lạc với máy chủ"
|
||||
},
|
||||
@@ -495,9 +510,24 @@
|
||||
"message": "Được cung cấp bởi phiên bản"
|
||||
},
|
||||
"search.filter.locked.instance-game-version.title": {
|
||||
"message": "Phiên bản trò chơi được cung cấp bởi instance này"
|
||||
"message": "Phiên bản trò chơi được cung cấp bởi hồ sơ này"
|
||||
},
|
||||
"search.filter.locked.instance-loader.title": {
|
||||
"message": "Loader được cung cấp bởi hồ sơ"
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "Đồng bộ với phiên bản"
|
||||
},
|
||||
"search.filter.locked.server": {
|
||||
"message": "Do máy chủ cung cấp"
|
||||
},
|
||||
"search.filter.locked.server-environment.title": {
|
||||
"message": "Chỉ các mod chạy phía client mới có thể thêm hồ sơ máy chủ"
|
||||
},
|
||||
"search.filter.locked.server-game-version.title": {
|
||||
"message": "Phiên bản trò chơi được cung cấp bởi máy chủ"
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader được cung cấp bởi máy chủ"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,93 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "无法连接到身份验证服务器"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "输入整合包描述……"
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "导出"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "导出整合包"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "整合包名称"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "整合包名称"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "选择要包含在包中的文件和文件夹"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "版本号"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "你实例的所有数据将被永久删除,包括你的世界、配置和所有已安装的内容。"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "此操作无法撤销"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "删除实例"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "删除实例"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "这个整合包已经安装在\"{instanceName}\"实例中了。"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "重复的整合包"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "在任何地方创建"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "前往实例"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "整合包已安装"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "项目"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "复制链接"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "正在安装……"
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "整合包"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "已添加“{name}”"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "已添加 {count} 个项目"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "查看在我整合包中使用的项目!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "分享整合包内容"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "显示文件"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "上传成功"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "未知"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "更新中……"
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "内容需求"
|
||||
},
|
||||
@@ -32,36 +119,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "查看内容"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "添加了 {count} 项"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "已添加"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "已移除"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "已更新"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "更新以游玩"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "移除了 {count} 项"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "需要更新"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "需要更新至最新版本才能运行 {name}。请更新后启动游戏。"
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "更新了 {count} 项"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "开发者模式已启用。"
|
||||
},
|
||||
@@ -230,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "编辑存档"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "已禁用的项目"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "有可用的更新"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "地址"
|
||||
},
|
||||
@@ -344,150 +404,9 @@
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "安装"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "适用于 Minecraft {game_version} 的 {platform} {version} 已安装"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "原版 {game_version} 已安装"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "切换版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "安装"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "安装中"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "正在获取整合包版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "正在安装新版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "当前已安装"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "调试信息:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "正在获取整合包详情"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "游戏版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "安装"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "正在安装"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} 版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "无法获取整合包详细信息。请检查网络连接。"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} 不支持 Minecraft {version}。请尝试其他模组加载器。"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "此实例与一个整合包相关联,但在 Modrinth 上无法找到该整合包。"
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "平台"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "重新安装整合包"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "正在重新安装整合包"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "重新安装实例将重置所有已安装或修改的内容,并恢复整合包到初始状态,移除另外添加的所有内容。这样有可能修复因实例更改导致的异常,但如果你的世界依赖另外添加的内容,此举可能会损坏现有世界。"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "你确定要重新安装该实例吗?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "将实例的内容重置为原始状态,移除你在原始整合包基础上添加的任何修改或内容。"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "重新安装整合包"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "修复"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "修复中"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "修复会重新安装 Minecraft 依赖项并检查是否有损坏。如果你的游戏因启动器相关错误无法启动,这可能会解决问题,但不会解决与已安装模组相关的问题或崩溃。"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "确定要修复该实例吗?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "正在修复"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "重置为当前版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "显示所有版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "切换版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "安装"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "重新安装"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "修复"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "安装时无法{action}"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "离线时无法{action}"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "修复时无法{action}"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(未知版本)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "该实例已关联至服务器,因此无法更改 Minecraft 版本。解除关联将永久断开该实例与服务器。"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "该实例已关联至服务器,因此无法单独更新模组,也无法更改模组加载器和 Minecraft 版本。解除关联将永久断开该实例与服务器。"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "与服务器解除关联"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "取消实例关联"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "若继续操作,该实例将无法重新关联至原整合包,除非创建全新的实例。此后,不再接收整合包的任何更新,该实例变为普通实例。"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "你确定要取消关联此版本吗?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "该实例已关联至整合包,因此无法单独更新模组,也无法更改模组加载器和 Minecraft 版本。解除关联后,该实例将无法重新关联至整合包。"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "解除整合包关联"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java 及内存"
|
||||
},
|
||||
|
||||
@@ -5,6 +5,93 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "無法連線到驗證伺服器"
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "輸入模組包描述..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "匯出"
|
||||
},
|
||||
"app.export-modal.header": {
|
||||
"message": "匯出模組包"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "模組包名稱"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "模組包名稱"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "選擇要包含在模組包中的檔案與資料夾"
|
||||
},
|
||||
"app.export-modal.version-number-label": {
|
||||
"message": "版本號碼"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "你實例中的所有資料將被永久刪除,包含你的世界、設定檔以及所有已安裝的內容。"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "這項動作無法復原"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "刪除實例"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "刪除實例"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-body": {
|
||||
"message": "這個模組包已經安裝在「{instanceName}」實例中了。"
|
||||
},
|
||||
"app.instance.modpack-already-installed.admonition-header": {
|
||||
"message": "複製模組包"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create-anyway": {
|
||||
"message": "仍要建立"
|
||||
},
|
||||
"app.instance.modpack-already-installed.go-to-instance": {
|
||||
"message": "前往實例"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "模組包已經安裝"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "專案"
|
||||
},
|
||||
"app.instance.mods.copy-link": {
|
||||
"message": "複製連結"
|
||||
},
|
||||
"app.instance.mods.installing": {
|
||||
"message": "安裝中..."
|
||||
},
|
||||
"app.instance.mods.modpack-fallback": {
|
||||
"message": "模組包"
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "新增了「{name}」"
|
||||
},
|
||||
"app.instance.mods.projects-were-added": {
|
||||
"message": "新增了 {count} 個專案"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "快來看看我在模組包中使用的專案!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "分享模組包內容"
|
||||
},
|
||||
"app.instance.mods.show-file": {
|
||||
"message": "顯示檔案"
|
||||
},
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "上傳成功"
|
||||
},
|
||||
"app.instance.mods.unknown-version": {
|
||||
"message": "未知"
|
||||
},
|
||||
"app.instance.mods.updating": {
|
||||
"message": "更新中..."
|
||||
},
|
||||
"app.modal.install-to-play.content-required": {
|
||||
"message": "所需內容"
|
||||
},
|
||||
@@ -15,7 +102,7 @@
|
||||
"message": "安裝"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# 個模組} other {# 個模組}}"
|
||||
"message": "{count} 個模組"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "所需模組包"
|
||||
@@ -32,36 +119,15 @@
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "檢視內容"
|
||||
},
|
||||
"app.modal.update-to-play.added-count": {
|
||||
"message": "新增了 {count} 個"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.added": {
|
||||
"message": "已新增"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.removed": {
|
||||
"message": "已移除"
|
||||
},
|
||||
"app.modal.update-to-play.diff-type.updated": {
|
||||
"message": "已更新"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "更新以遊玩"
|
||||
},
|
||||
"app.modal.update-to-play.published-date": {
|
||||
"message": "{date, date, long}"
|
||||
},
|
||||
"app.modal.update-to-play.removed-count": {
|
||||
"message": "移除了 {count} 個"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "需要更新"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "需要更新才能遊玩「{name}」。請更新至最新版本以啟動遊戲。"
|
||||
},
|
||||
"app.modal.update-to-play.updated-count": {
|
||||
"message": "更新了 {count} 個"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "開發人員模式已啟用。"
|
||||
},
|
||||
@@ -135,7 +201,7 @@
|
||||
"message": "新增好友"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} 位好友的 {count, plural, one {邀請} other {邀請}}"
|
||||
"message": "{count} 個好友邀請"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "送出好友邀請"
|
||||
@@ -147,7 +213,7 @@
|
||||
"message": "這可能與對方的 Minecraft 使用者名稱不同!"
|
||||
},
|
||||
"friends.add-friend.username.placeholder": {
|
||||
"message": "請輸入 Modrinth 用戶名稱……"
|
||||
"message": "輸入 Modrinth 使用者名稱..."
|
||||
},
|
||||
"friends.add-friend.username.title": {
|
||||
"message": "你好友的 Modrinth 使用者名稱是什麼?"
|
||||
@@ -186,7 +252,7 @@
|
||||
"message": "沒有符合「{query}」的好友"
|
||||
},
|
||||
"friends.search-friends-placeholder": {
|
||||
"message": "搜尋好友……"
|
||||
"message": "搜尋好友..."
|
||||
},
|
||||
"friends.section.heading": {
|
||||
"message": "{title} - {count}"
|
||||
@@ -230,12 +296,6 @@
|
||||
"instance.edit-world.title": {
|
||||
"message": "編輯世界"
|
||||
},
|
||||
"instance.filter.disabled": {
|
||||
"message": "已停用的專案"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "有可用的更新"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "位址"
|
||||
},
|
||||
@@ -273,7 +333,7 @@
|
||||
"message": "複製實例"
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-instance.description": {
|
||||
"message": "建立這個實例的複本,包含世界、設定、模組等。"
|
||||
"message": "建立這個實例的副本,包含世界、設定、模組等。"
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon": {
|
||||
"message": "編輯圖示"
|
||||
@@ -339,155 +399,14 @@
|
||||
"message": "用於啟動 Minecraft 的包裝指令。"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper.enter": {
|
||||
"message": "輸入包裝指令……"
|
||||
"message": "輸入包裝指令..."
|
||||
},
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "安裝"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "適用於 Minecraft {game_version} 的 {platform} {version} 已經安裝"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "原版 {game_version} 已經安裝"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button": {
|
||||
"message": "變更版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.install": {
|
||||
"message": "安裝"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.button.installing": {
|
||||
"message": "安裝中"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "正在擷取模組包版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "正在安裝新版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.currently-installed": {
|
||||
"message": "目前已安裝"
|
||||
},
|
||||
"instance.settings.tabs.installation.debug-information": {
|
||||
"message": "除錯資訊:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "正在擷取模組包詳細資訊"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "遊戲版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "安裝"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "安裝中"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} 版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.minecraft-version": {
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "無法擷取連結模組包的詳細資訊。請檢查網際網路連線。"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} 不適用於 Minecraft {version}。請嘗試其他模組載入器。"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "這個實例已連結至一個模組包,但該模組包無法在 Modrinth 上找到。"
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "平臺"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "重新安裝模組包"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "正在重新安裝模組包"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "重新安裝會將所有已安裝或已修改的內容,重設為模組包所提供的內容,並移除你在原始安裝基礎上額外新增的模組或內容。這可能會修復實例在變更後產生的非預期行為,但如果你的世界現在依賴額外安裝的內容,可能會導致現有世界損毀。"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "你確定要重新安裝這個實例嗎?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "將實例的內容重設為原始狀態,並移除任何在原始模組包之外額外新增的模組或內容。"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "重新安裝模組包"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "修復"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "修復中"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "修復功能會重新安裝 Minecraft 的相依檔案,並檢查檔案是否損毀。這或許能解決因啟動器相關錯誤而導致遊戲無法啟動的問題,但無法解決與已安裝模組相關的問題或崩潰。"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "是否要修復實例?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "修復中"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "重設為目前版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "顯示所有版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "變更版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "安裝"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.reinstall": {
|
||||
"message": "重新安裝"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.repair": {
|
||||
"message": "修復"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "安裝時無法{action}"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "離線時無法{action}"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "修復時無法{action}"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(未知的版本)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server-vanilla.description": {
|
||||
"message": "這個實例已連結至伺服器,這代表你無法變更 Minecraft 版本。取消連結將會永久中斷這個實例與伺服器的連線。"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.description": {
|
||||
"message": "這個實例已連結至伺服器,這代表模組無法被更新,且你無法變更模組載入器或 Minecraft 版本。取消連結將會永久中斷這個實例與伺服器的連線。"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink-server.title": {
|
||||
"message": "從伺服器取消連結"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "取消連結實例"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "如果繼續操作,你將無法在不建立全新實例的情況下重新連結它。你將不再收到模組包更新,而且它將成為一個普通實例。"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "你確定要解除連結這個實例嗎?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "這個實例已連結至一個模組包,這表示模組無法更新,你也無法變更模組載入器或 Minecraft 版本。解除連結將會永久中斷這個實例與模組包之間的關係。"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "從模組包解除連結"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java 和記憶體"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import {
|
||||
CheckIcon,
|
||||
ClipboardCopyIcon,
|
||||
ExternalIcon,
|
||||
GlobeIcon,
|
||||
@@ -14,10 +15,12 @@ import {
|
||||
Admonition,
|
||||
ButtonStyled,
|
||||
Checkbox,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
DropdownSelect,
|
||||
injectNotificationManager,
|
||||
LoadingIndicator,
|
||||
NavTabs,
|
||||
Pagination,
|
||||
ProjectCard,
|
||||
ProjectCardList,
|
||||
@@ -33,12 +36,11 @@ import { openUrl } from '@tauri-apps/plugin-opener'
|
||||
import type { Ref } from 'vue'
|
||||
import { computed, nextTick, onUnmounted, ref, shallowRef, toRaw, watch } from 'vue'
|
||||
import type { LocationQuery } from 'vue-router'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { onBeforeRouteLeave, useRoute, useRouter } from 'vue-router'
|
||||
|
||||
import ContextMenu from '@/components/ui/ContextMenu.vue'
|
||||
import type Instance from '@/components/ui/Instance.vue'
|
||||
import InstanceIndicator from '@/components/ui/InstanceIndicator.vue'
|
||||
import NavTabs from '@/components/ui/NavTabs.vue'
|
||||
import SearchCard from '@/components/ui/SearchCard.vue'
|
||||
import { get_project_v3, get_search_results_v3 } from '@/helpers/cache.js'
|
||||
import { process_listener } from '@/helpers/events'
|
||||
@@ -51,7 +53,7 @@ import {
|
||||
} from '@/helpers/profile.js'
|
||||
import { get_categories, get_game_versions, get_loaders } from '@/helpers/tags'
|
||||
import type { GameInstance } from '@/helpers/types'
|
||||
import { getServerLatency } from '@/helpers/worlds'
|
||||
import { add_server_to_profile, get_profile_worlds, getServerLatency } from '@/helpers/worlds'
|
||||
import { injectServerInstall } from '@/providers/server-install'
|
||||
import { useBreadcrumbs } from '@/store/breadcrumbs'
|
||||
import { getServerAddress } from '@/store/install.js'
|
||||
@@ -108,15 +110,27 @@ const installedProjectIds: Ref<string[] | null> = ref(null)
|
||||
const instanceHideInstalled = ref(false)
|
||||
const newlyInstalled = ref<string[]>([])
|
||||
const isServerInstance = ref(false)
|
||||
const isFromWorlds = computed(() => route.query.from === 'worlds')
|
||||
|
||||
const PERSISTENT_QUERY_PARAMS = ['i', 'ai']
|
||||
if (isFromWorlds.value && route.params.projectType !== 'server') {
|
||||
router.replace({
|
||||
path: '/browse/server',
|
||||
query: route.query,
|
||||
})
|
||||
}
|
||||
|
||||
const allInstalledIds = computed(
|
||||
() => new Set([...newlyInstalled.value, ...(installedProjectIds.value ?? [])]),
|
||||
)
|
||||
|
||||
const PERSISTENT_QUERY_PARAMS = ['i', 'ai', 'from']
|
||||
|
||||
await initInstanceContext()
|
||||
|
||||
async function initInstanceContext() {
|
||||
debugLog('initInstanceContext', { queryI: route.query.i, queryAi: route.query.ai })
|
||||
if (route.query.i) {
|
||||
instance.value = await getInstance(route.query.i).catch(handleError)
|
||||
instance.value = (await getInstance(route.query.i as string).catch(handleError)) ?? null
|
||||
debugLog('instance loaded', {
|
||||
name: instance.value?.name,
|
||||
loader: instance.value?.loader,
|
||||
@@ -126,12 +140,24 @@ async function initInstanceContext() {
|
||||
// Load installed project IDs in background — the page and initial search render immediately.
|
||||
// When this resolves, instanceFilters recomputes and triggers a search refresh
|
||||
// that applies the "hide installed" negative filters and marks installed badges.
|
||||
getInstalledProjectIds(route.query.i)
|
||||
.then((ids) => {
|
||||
debugLog('installedProjectIds loaded', { count: ids?.length })
|
||||
installedProjectIds.value = ids
|
||||
})
|
||||
.catch(handleError)
|
||||
if (route.query.from === 'worlds') {
|
||||
get_profile_worlds(route.query.i as string)
|
||||
.then((worlds) => {
|
||||
const serverProjectIds = worlds
|
||||
.filter((w) => w.type === 'server' && 'project_id' in w && w.project_id)
|
||||
.map((w) => (w as { project_id: string }).project_id)
|
||||
debugLog('installedServerProjectIds loaded', { count: serverProjectIds.length })
|
||||
installedProjectIds.value = serverProjectIds
|
||||
})
|
||||
.catch(handleError)
|
||||
} else {
|
||||
getInstalledProjectIds(route.query.i as string)
|
||||
.then((ids) => {
|
||||
debugLog('installedProjectIds loaded', { count: ids?.length })
|
||||
installedProjectIds.value = ids
|
||||
})
|
||||
.catch(handleError)
|
||||
}
|
||||
|
||||
if (instance.value?.linked_data?.project_id) {
|
||||
debugLog('checking linked project for server status', instance.value.linked_data.project_id)
|
||||
@@ -242,6 +268,10 @@ const activeGameVersion = computed(() => {
|
||||
})
|
||||
|
||||
const serverHits = shallowRef<Labrinth.Search.v3.ResultSearchProject[]>([])
|
||||
const filteredServerHits = computed(() => {
|
||||
if (!instanceHideInstalled.value || allInstalledIds.value.size === 0) return serverHits.value
|
||||
return serverHits.value.filter((hit) => !allInstalledIds.value.has(hit.project_id))
|
||||
})
|
||||
const serverPings = shallowRef<Record<string, number | undefined>>({})
|
||||
const runningServerProjects = ref<Record<string, string>>({})
|
||||
|
||||
@@ -277,11 +307,28 @@ async function handlePlayServerProject(projectId: string) {
|
||||
checkServerRunningStates(serverHits.value)
|
||||
}
|
||||
|
||||
function handleAddServerToInstance(project: Labrinth.Search.v3.ResultSearchProject) {
|
||||
async function handleAddServerToInstance(project: Labrinth.Search.v3.ResultSearchProject) {
|
||||
debugLog('handleAddServerToInstance', { projectId: project.project_id, name: project.name })
|
||||
const address = getServerAddress(project.minecraft_java_server)
|
||||
if (!address) return
|
||||
showAddServerToInstanceModal(project.name, address)
|
||||
|
||||
if (instance.value) {
|
||||
try {
|
||||
await add_server_to_profile(
|
||||
instance.value.path,
|
||||
project.name,
|
||||
address,
|
||||
'prompt',
|
||||
project.project_id,
|
||||
project.minecraft_java_server?.content?.kind,
|
||||
)
|
||||
newlyInstalled.value.push(project.project_id)
|
||||
} catch (err) {
|
||||
handleError(err as Error)
|
||||
}
|
||||
} else {
|
||||
showAddServerToInstanceModal(project.name, address)
|
||||
}
|
||||
}
|
||||
|
||||
const unlistenProcesses = await process_listener(
|
||||
@@ -313,6 +360,16 @@ const {
|
||||
createServerPageParams,
|
||||
} = useServerSearch({ tags, query, maxResults, currentPage })
|
||||
|
||||
if (instance.value?.game_version) {
|
||||
const gv = instance.value.game_version
|
||||
const alreadyHasGv = serverCurrentFilters.value.some(
|
||||
(f) => f.type === 'server_game_version' && f.option === gv,
|
||||
)
|
||||
if (!alreadyHasGv) {
|
||||
serverCurrentFilters.value.push({ type: 'server_game_version', option: gv })
|
||||
}
|
||||
}
|
||||
|
||||
async function pingServerHits(hits: Labrinth.Search.v3.ResultSearchProject[]) {
|
||||
debugLog('pingServerHits', { hitCount: hits.length })
|
||||
const pingsToFetch = hits.filter((hit) => hit.minecraft_java_server?.address)
|
||||
@@ -342,8 +399,107 @@ window.addEventListener('online', () => {
|
||||
offline.value = false
|
||||
})
|
||||
|
||||
const messages = defineMessages({
|
||||
addServerToInstance: {
|
||||
id: 'app.browse.add-server-to-instance',
|
||||
defaultMessage: 'Add server to instance',
|
||||
},
|
||||
addServersToInstance: {
|
||||
id: 'app.browse.add-servers-to-instance',
|
||||
defaultMessage: 'Add servers to your instance',
|
||||
},
|
||||
addToInstance: {
|
||||
id: 'app.browse.add-to-instance',
|
||||
defaultMessage: 'Add to instance',
|
||||
},
|
||||
addToInstanceName: {
|
||||
id: 'app.browse.add-to-instance-name',
|
||||
defaultMessage: 'Add to {instanceName}',
|
||||
},
|
||||
added: {
|
||||
id: 'app.browse.added',
|
||||
defaultMessage: 'Added',
|
||||
},
|
||||
alreadyAdded: {
|
||||
id: 'app.browse.already-added',
|
||||
defaultMessage: 'Already added',
|
||||
},
|
||||
discoverContent: {
|
||||
id: 'app.browse.discover-content',
|
||||
defaultMessage: 'Discover content',
|
||||
},
|
||||
discoverServers: {
|
||||
id: 'app.browse.discover-servers',
|
||||
defaultMessage: 'Discover servers',
|
||||
},
|
||||
environmentProvidedByServer: {
|
||||
id: 'search.filter.locked.server-environment.title',
|
||||
defaultMessage: 'Only client-side mods can be added to the server instance',
|
||||
},
|
||||
gameVersionProvidedByInstance: {
|
||||
id: 'search.filter.locked.instance-game-version.title',
|
||||
defaultMessage: 'Game version is provided by the instance',
|
||||
},
|
||||
gameVersionProvidedByServer: {
|
||||
id: 'search.filter.locked.server-game-version.title',
|
||||
defaultMessage: 'Game version is provided by the server',
|
||||
},
|
||||
hideAddedServers: {
|
||||
id: 'app.browse.hide-added-servers',
|
||||
defaultMessage: 'Hide added servers',
|
||||
},
|
||||
hideInstalledContent: {
|
||||
id: 'app.browse.hide-installed-content',
|
||||
defaultMessage: 'Hide installed content',
|
||||
},
|
||||
installContentToInstance: {
|
||||
id: 'app.browse.install-content-to-instance',
|
||||
defaultMessage: 'Install content to instance',
|
||||
},
|
||||
modLoaderProvidedByInstance: {
|
||||
id: 'search.filter.locked.instance-loader.title',
|
||||
defaultMessage: 'Loader is provided by the instance',
|
||||
},
|
||||
modLoaderProvidedByServer: {
|
||||
id: 'search.filter.locked.server-loader.title',
|
||||
defaultMessage: 'Loader is provided by the server',
|
||||
},
|
||||
providedByInstance: {
|
||||
id: 'search.filter.locked.instance',
|
||||
defaultMessage: 'Provided by the instance',
|
||||
},
|
||||
providedByServer: {
|
||||
id: 'search.filter.locked.server',
|
||||
defaultMessage: 'Provided by the server',
|
||||
},
|
||||
syncFilterButton: {
|
||||
id: 'search.filter.locked.instance.sync',
|
||||
defaultMessage: 'Sync with instance',
|
||||
},
|
||||
})
|
||||
|
||||
const breadcrumbs = useBreadcrumbs()
|
||||
breadcrumbs.setContext({ name: 'Discover content', link: route.path, query: route.query })
|
||||
const browseTitle = computed(() =>
|
||||
formatMessage(isFromWorlds.value ? messages.discoverServers : messages.discoverContent),
|
||||
)
|
||||
breadcrumbs.setName('BrowseTitle', browseTitle.value)
|
||||
if (instance.value) {
|
||||
const instanceLink = `/instance/${encodeURIComponent(instance.value.path)}`
|
||||
breadcrumbs.setContext({
|
||||
name: instance.value.name,
|
||||
link: isFromWorlds.value ? `${instanceLink}/worlds` : instanceLink,
|
||||
})
|
||||
} else {
|
||||
breadcrumbs.setContext(null)
|
||||
}
|
||||
|
||||
onBeforeRouteLeave(() => {
|
||||
breadcrumbs.setContext({
|
||||
name: browseTitle.value,
|
||||
link: `/browse/${projectType.value}`,
|
||||
query: route.query,
|
||||
})
|
||||
})
|
||||
|
||||
const loading = ref(true)
|
||||
|
||||
@@ -480,22 +636,8 @@ async function refreshSearch() {
|
||||
...(isServer ? createServerPageParams() : createPageParams()),
|
||||
}
|
||||
|
||||
breadcrumbs.setContext({
|
||||
name: 'Discover content',
|
||||
link: `/browse/${projectType.value}`,
|
||||
query: params,
|
||||
})
|
||||
const queryString = Object.entries(params)
|
||||
.flatMap(([key, value]) => {
|
||||
const values = Array.isArray(value) ? value : [value]
|
||||
return values
|
||||
.filter((v): v is string => v != null)
|
||||
.map((v) => `${encodeURIComponent(key)}=${encodeURIComponent(v)}`)
|
||||
})
|
||||
.join('&')
|
||||
const newUrl = `${route.path}${queryString ? '?' + queryString : ''}`
|
||||
debugLog('updating URL', newUrl)
|
||||
window.history.replaceState(window.history.state, '', newUrl)
|
||||
debugLog('updating URL', params)
|
||||
router.replace({ path: route.path, query: params })
|
||||
|
||||
loading.value = false
|
||||
debugLog('refreshSearch complete', { version })
|
||||
@@ -537,6 +679,18 @@ watch(
|
||||
debugLog('projectType route param changed', { from: projectType.value, to: newType })
|
||||
projectType.value = newType
|
||||
|
||||
// If instance context was removed (e.g. sidebar browse navigation), reset state
|
||||
if (!route.query.i && instance.value) {
|
||||
debugLog('instance context removed, resetting')
|
||||
instance.value = null
|
||||
installedProjectIds.value = null
|
||||
instanceHideInstalled.value = false
|
||||
newlyInstalled.value = []
|
||||
isServerInstance.value = false
|
||||
breadcrumbs.setName('BrowseTitle', formatMessage(messages.discoverContent))
|
||||
breadcrumbs.setContext(null)
|
||||
}
|
||||
|
||||
currentSortType.value = { display: 'Relevance', name: 'relevance' }
|
||||
query.value = ''
|
||||
},
|
||||
@@ -574,64 +728,25 @@ const selectableProjectTypes = computed(() => {
|
||||
if (route.query.ai) {
|
||||
params.ai = route.query.ai
|
||||
}
|
||||
|
||||
const links = [
|
||||
{ label: 'Modpacks', href: `/browse/modpack`, shown: modpacks },
|
||||
{ label: 'Mods', href: `/browse/mod`, shown: mods },
|
||||
{ label: 'Resource Packs', href: `/browse/resourcepack` },
|
||||
{ label: 'Data Packs', href: `/browse/datapack`, shown: dataPacks },
|
||||
{ label: 'Shaders', href: `/browse/shader` },
|
||||
{ label: 'Servers', href: `/browse/server`, shown: !instance.value },
|
||||
]
|
||||
|
||||
if (params) {
|
||||
return links.map((link) => {
|
||||
return {
|
||||
...link,
|
||||
href: {
|
||||
path: link.href,
|
||||
query: params,
|
||||
},
|
||||
}
|
||||
})
|
||||
if (route.query.from) {
|
||||
params.from = route.query.from
|
||||
}
|
||||
|
||||
return links
|
||||
})
|
||||
const queryString = new URLSearchParams(params as Record<string, string>).toString()
|
||||
const suffix = queryString ? `?${queryString}` : ''
|
||||
|
||||
const messages = defineMessages({
|
||||
gameVersionProvidedByInstance: {
|
||||
id: 'search.filter.locked.instance-game-version.title',
|
||||
defaultMessage: 'Game version is provided by the instance',
|
||||
},
|
||||
gameVersionProvidedByServer: {
|
||||
id: 'search.filter.locked.server-game-version.title',
|
||||
defaultMessage: 'Game version is provided by the server',
|
||||
},
|
||||
modLoaderProvidedByInstance: {
|
||||
id: 'search.filter.locked.instance-loader.title',
|
||||
defaultMessage: 'Loader is provided by the instance',
|
||||
},
|
||||
modLoaderProvidedByServer: {
|
||||
id: 'search.filter.locked.server-loader.title',
|
||||
defaultMessage: 'Loader is provided by the server',
|
||||
},
|
||||
environmentProvidedByServer: {
|
||||
id: 'search.filter.locked.server-environment.title',
|
||||
defaultMessage: 'Only client-side mods can be added to the server instance',
|
||||
},
|
||||
providedByInstance: {
|
||||
id: 'search.filter.locked.instance',
|
||||
defaultMessage: 'Provided by the instance',
|
||||
},
|
||||
providedByServer: {
|
||||
id: 'search.filter.locked.server',
|
||||
defaultMessage: 'Provided by the server',
|
||||
},
|
||||
syncFilterButton: {
|
||||
id: 'search.filter.locked.instance.sync',
|
||||
defaultMessage: 'Sync with instance',
|
||||
},
|
||||
if (isFromWorlds.value) {
|
||||
return [{ label: 'Servers', href: `/browse/server${suffix}` }]
|
||||
}
|
||||
|
||||
return [
|
||||
{ label: 'Modpacks', href: `/browse/modpack${suffix}`, shown: modpacks },
|
||||
{ label: 'Mods', href: `/browse/mod${suffix}`, shown: mods },
|
||||
{ label: 'Resource Packs', href: `/browse/resourcepack${suffix}` },
|
||||
{ label: 'Data Packs', href: `/browse/datapack${suffix}`, shown: dataPacks },
|
||||
{ label: 'Shaders', href: `/browse/shader${suffix}` },
|
||||
{ label: 'Servers', href: `/browse/server${suffix}`, shown: !instance.value },
|
||||
]
|
||||
})
|
||||
|
||||
const getServerModpackContent = (project: Labrinth.Search.v3.ResultSearchProject) => {
|
||||
@@ -702,7 +817,9 @@ previousFilterState.value = JSON.stringify({
|
||||
>
|
||||
<Checkbox
|
||||
v-model="instanceHideInstalled"
|
||||
label="Hide installed content"
|
||||
:label="
|
||||
formatMessage(isFromWorlds ? messages.hideAddedServers : messages.hideInstalledContent)
|
||||
"
|
||||
class="filter-checkbox"
|
||||
@update:model-value="onSearchChangeToTop()"
|
||||
@click.prevent.stop
|
||||
@@ -781,9 +898,15 @@ previousFilterState.value = JSON.stringify({
|
||||
</Teleport>
|
||||
<div ref="searchWrapper" class="flex flex-col gap-3 p-6">
|
||||
<template v-if="instance">
|
||||
<InstanceIndicator :instance="instance" />
|
||||
<h1 class="m-0 mb-1 text-xl">Install content to instance</h1>
|
||||
<Admonition v-if="isServerInstance" type="warning" class="mb-1">
|
||||
<InstanceIndicator :instance="instance" :back-tab="isFromWorlds ? 'worlds' : undefined" />
|
||||
<h1 class="m-0 mb-1 text-xl">
|
||||
{{
|
||||
formatMessage(
|
||||
isFromWorlds ? messages.addServersToInstance : messages.installContentToInstance,
|
||||
)
|
||||
}}
|
||||
</h1>
|
||||
<Admonition v-if="isServerInstance && !isFromWorlds" type="warning" class="mb-1">
|
||||
Adding content can break compatibility when joining the server. Any added content will also
|
||||
be lost when you update the server instance content.
|
||||
</Admonition>
|
||||
@@ -855,7 +978,7 @@ previousFilterState.value = JSON.stringify({
|
||||
<section
|
||||
v-else-if="
|
||||
projectType === 'server'
|
||||
? serverHits.length === 0
|
||||
? filteredServerHits.length === 0
|
||||
: results && results.hits && results.hits.length === 0
|
||||
"
|
||||
class="offline"
|
||||
@@ -866,7 +989,7 @@ previousFilterState.value = JSON.stringify({
|
||||
<ProjectCardList v-else :layout="'list'">
|
||||
<template v-if="projectType === 'server'">
|
||||
<ProjectCard
|
||||
v-for="project in serverHits"
|
||||
v-for="project in filteredServerHits"
|
||||
:key="`server-card-${project.project_id}`"
|
||||
:title="project.name"
|
||||
:icon-url="project.icon_url || undefined"
|
||||
@@ -892,37 +1015,71 @@ previousFilterState.value = JSON.stringify({
|
||||
>
|
||||
<template #actions>
|
||||
<div class="flex gap-2">
|
||||
<ButtonStyled circular>
|
||||
<button
|
||||
v-tooltip="'Add server to instance'"
|
||||
@click.stop="() => handleAddServerToInstance(project)"
|
||||
<template v-if="isFromWorlds && instance">
|
||||
<ButtonStyled color="brand" type="outlined">
|
||||
<button
|
||||
:disabled="allInstalledIds.has(project.project_id)"
|
||||
@click.stop="() => handleAddServerToInstance(project)"
|
||||
>
|
||||
<CheckIcon v-if="allInstalledIds.has(project.project_id)" />
|
||||
<PlusIcon v-else />
|
||||
{{
|
||||
formatMessage(
|
||||
allInstalledIds.has(project.project_id)
|
||||
? messages.added
|
||||
: messages.addToInstance,
|
||||
)
|
||||
}}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</template>
|
||||
<template v-else>
|
||||
<ButtonStyled circular>
|
||||
<button
|
||||
v-tooltip="
|
||||
allInstalledIds.has(project.project_id)
|
||||
? formatMessage(messages.alreadyAdded)
|
||||
: instance
|
||||
? formatMessage(messages.addToInstanceName, {
|
||||
instanceName: instance.name,
|
||||
})
|
||||
: formatMessage(messages.addServerToInstance)
|
||||
"
|
||||
:disabled="allInstalledIds.has(project.project_id)"
|
||||
@click.stop="() => handleAddServerToInstance(project)"
|
||||
>
|
||||
<CheckIcon v-if="allInstalledIds.has(project.project_id)" />
|
||||
<PlusIcon v-else />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled
|
||||
v-if="runningServerProjects[project.project_id]"
|
||||
color="red"
|
||||
type="outlined"
|
||||
>
|
||||
<PlusIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled
|
||||
v-if="runningServerProjects[project.project_id]"
|
||||
color="red"
|
||||
type="outlined"
|
||||
>
|
||||
<button @click="() => handleStopServerProject(project.project_id)">
|
||||
<StopCircleIcon />
|
||||
Stop
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else color="brand" type="outlined">
|
||||
<button
|
||||
:disabled="(installingServerProjects as string[]).includes(project.project_id)"
|
||||
@click="() => handlePlayServerProject(project.project_id)"
|
||||
>
|
||||
<PlayIcon />
|
||||
{{
|
||||
(installingServerProjects as string[]).includes(project.project_id)
|
||||
? 'Installing...'
|
||||
: 'Play'
|
||||
}}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<button @click="() => handleStopServerProject(project.project_id)">
|
||||
<StopCircleIcon />
|
||||
{{ formatMessage(commonMessages.stopButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else color="brand" type="outlined">
|
||||
<button
|
||||
:disabled="
|
||||
(installingServerProjects as string[]).includes(project.project_id)
|
||||
"
|
||||
@click="() => handlePlayServerProject(project.project_id)"
|
||||
>
|
||||
<PlayIcon />
|
||||
{{
|
||||
formatMessage(
|
||||
(installingServerProjects as string[]).includes(project.project_id)
|
||||
? commonMessages.installingLabel
|
||||
: commonMessages.playButton,
|
||||
)
|
||||
}}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
</ProjectCard>
|
||||
@@ -947,7 +1104,7 @@ previousFilterState.value = JSON.stringify({
|
||||
loader.supported_project_types?.includes(projectType),
|
||||
),
|
||||
]"
|
||||
:installed="result.installed || newlyInstalled.includes(result.project_id || '')"
|
||||
:installed="result.installed || allInstalledIds.has(result.project_id || '')"
|
||||
@install="
|
||||
(id) => {
|
||||
newlyInstalled.push(id)
|
||||
|
||||
@@ -0,0 +1,345 @@
|
||||
<script setup lang="ts">
|
||||
import type { EditingFile, FileItem, UploadState } from '@modrinth/ui'
|
||||
import {
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
FilePageLayout,
|
||||
injectNotificationManager,
|
||||
provideFileManager,
|
||||
useDebugLogger,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { invoke } from '@tauri-apps/api/core'
|
||||
import {
|
||||
mkdir,
|
||||
readDir,
|
||||
readFile as readFileBytes,
|
||||
readTextFile,
|
||||
remove,
|
||||
rename,
|
||||
stat,
|
||||
writeFile as writeFileBytes,
|
||||
writeTextFile,
|
||||
} from '@tauri-apps/plugin-fs'
|
||||
import { onUnmounted, ref, watch } from 'vue'
|
||||
|
||||
import { profile_listener } from '@/helpers/events'
|
||||
import { get_full_path } from '@/helpers/profile'
|
||||
import type { GameInstance } from '@/helpers/types'
|
||||
import { highlightInFolder } from '@/helpers/utils'
|
||||
|
||||
const props = defineProps<{
|
||||
instance: GameInstance
|
||||
options: unknown
|
||||
offline: boolean
|
||||
playing: boolean
|
||||
installed: boolean
|
||||
isServerInstance: boolean
|
||||
}>()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
const { addNotification } = injectNotificationManager()
|
||||
const debug = useDebugLogger('Files')
|
||||
|
||||
const messages = defineMessages({
|
||||
saveAs: {
|
||||
id: 'instance.files.save-as',
|
||||
defaultMessage: 'Save as...',
|
||||
},
|
||||
addingFiles: {
|
||||
id: 'instance.files.adding-files',
|
||||
defaultMessage: 'Adding files ({completed}/{total})',
|
||||
},
|
||||
})
|
||||
|
||||
const instanceRoot = ref('')
|
||||
const items = ref<FileItem[]>([])
|
||||
const loading = ref(true)
|
||||
const error = ref<Error | null>(null)
|
||||
const currentPath = ref('')
|
||||
const editingFile = ref<EditingFile | null>(null)
|
||||
|
||||
debug('setup: start, instance.path =', props.instance.path)
|
||||
|
||||
instanceRoot.value = await get_full_path(props.instance.path)
|
||||
debug('setup: instanceRoot =', instanceRoot.value)
|
||||
await refresh()
|
||||
debug('setup: refresh complete, items =', items.value.length, 'error =', error.value)
|
||||
|
||||
function resolvePath(relativePath: string): string {
|
||||
return relativePath ? `${instanceRoot.value}/${relativePath}` : instanceRoot.value
|
||||
}
|
||||
|
||||
async function listDirectory(dirPath: string): Promise<FileItem[]> {
|
||||
const absPath = resolvePath(dirPath)
|
||||
debug('listDirectory: dirPath =', dirPath, 'absPath =', absPath)
|
||||
const entries = await readDir(absPath)
|
||||
debug('listDirectory: got', entries.length, 'entries')
|
||||
|
||||
const results = await Promise.all(
|
||||
entries.map(async (entry) => {
|
||||
const entryAbsPath = `${absPath}/${entry.name}`
|
||||
let metadata
|
||||
try {
|
||||
metadata = await stat(entryAbsPath)
|
||||
} catch {
|
||||
debug('listDirectory: stat failed for', entry.name, '- skipping')
|
||||
return null
|
||||
}
|
||||
const item: FileItem = {
|
||||
name: entry.name,
|
||||
type: entry.isDirectory ? 'directory' : 'file',
|
||||
path: dirPath ? `${dirPath}/${entry.name}` : entry.name,
|
||||
modified: metadata.mtime ? Math.floor(metadata.mtime.getTime() / 1000) : 0,
|
||||
created: metadata.birthtime ? Math.floor(metadata.birthtime.getTime() / 1000) : 0,
|
||||
}
|
||||
if (!entry.isDirectory) {
|
||||
item.size = metadata.size
|
||||
}
|
||||
if (entry.isDirectory) {
|
||||
try {
|
||||
const children = await readDir(entryAbsPath)
|
||||
item.count = children.length
|
||||
} catch {
|
||||
item.count = 0
|
||||
}
|
||||
}
|
||||
return item
|
||||
}),
|
||||
)
|
||||
return results.filter((item): item is FileItem => item !== null)
|
||||
}
|
||||
|
||||
async function refresh() {
|
||||
debug('refresh: called, currentPath =', currentPath.value, 'instanceRoot =', instanceRoot.value)
|
||||
loading.value = true
|
||||
error.value = null
|
||||
try {
|
||||
items.value = await listDirectory(currentPath.value)
|
||||
debug('refresh: success, items =', items.value.length)
|
||||
} catch (e) {
|
||||
debug('refresh: error =', e)
|
||||
error.value = e instanceof Error ? e : new Error(String(e))
|
||||
items.value = []
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function navigateTo(path: string) {
|
||||
debug('navigateTo:', path)
|
||||
currentPath.value = path.startsWith('/') ? path.slice(1) : path
|
||||
refresh()
|
||||
}
|
||||
|
||||
function startEditing(file: EditingFile) {
|
||||
editingFile.value = file
|
||||
}
|
||||
|
||||
function stopEditing() {
|
||||
editingFile.value = null
|
||||
}
|
||||
|
||||
async function handleCreateItem(name: string, type: 'file' | 'directory') {
|
||||
const targetPath = currentPath.value ? `${currentPath.value}/${name}` : name
|
||||
const absPath = resolvePath(targetPath)
|
||||
try {
|
||||
if (type === 'directory') {
|
||||
await mkdir(absPath)
|
||||
} else {
|
||||
await writeTextFile(absPath, '')
|
||||
}
|
||||
await refresh()
|
||||
} catch (e) {
|
||||
addNotification({
|
||||
title: formatMessage(commonMessages.createFailedLabel),
|
||||
text: e instanceof Error ? e.message : '',
|
||||
type: 'error',
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
async function handleRenameItem(path: string, newName: string) {
|
||||
const oldAbs = resolvePath(path)
|
||||
const parentDir = path.includes('/') ? path.substring(0, path.lastIndexOf('/')) : ''
|
||||
const newPath = parentDir ? `${parentDir}/${newName}` : newName
|
||||
const newAbs = resolvePath(newPath)
|
||||
try {
|
||||
await rename(oldAbs, newAbs)
|
||||
await refresh()
|
||||
} catch (e) {
|
||||
addNotification({
|
||||
title: formatMessage(commonMessages.renameFailedLabel),
|
||||
text: e instanceof Error ? e.message : '',
|
||||
type: 'error',
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
async function handleMoveItem(source: string, destination: string) {
|
||||
try {
|
||||
await rename(resolvePath(source), resolvePath(destination))
|
||||
await refresh()
|
||||
} catch (e) {
|
||||
addNotification({
|
||||
title: formatMessage(commonMessages.moveFailedLabel),
|
||||
text: e instanceof Error ? e.message : '',
|
||||
type: 'error',
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
async function handleDeleteItem(path: string, recursive: boolean) {
|
||||
try {
|
||||
await remove(resolvePath(path), { recursive })
|
||||
await refresh()
|
||||
} catch (e) {
|
||||
addNotification({
|
||||
title: formatMessage(commonMessages.deleteFailedLabel),
|
||||
text: e instanceof Error ? e.message : '',
|
||||
type: 'error',
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
async function handleReadFile(path: string): Promise<string> {
|
||||
return await readTextFile(resolvePath(path))
|
||||
}
|
||||
|
||||
async function handleReadFileAsBlob(path: string): Promise<Blob> {
|
||||
const bytes = await readFileBytes(resolvePath(path))
|
||||
return new Blob([bytes])
|
||||
}
|
||||
|
||||
async function handleWriteFile(path: string, content: string) {
|
||||
await writeTextFile(resolvePath(path), content)
|
||||
}
|
||||
|
||||
async function handleDownloadFile(path: string, _fileName: string) {
|
||||
await invoke('plugin:files|file_save_as', {
|
||||
instancePath: props.instance.path,
|
||||
filePath: path,
|
||||
})
|
||||
}
|
||||
|
||||
const uploadState = ref<UploadState>({
|
||||
isUploading: false,
|
||||
currentFileName: null,
|
||||
currentFileProgress: 0,
|
||||
uploadedBytes: 0,
|
||||
totalBytes: 0,
|
||||
completedFiles: 0,
|
||||
totalFiles: 0,
|
||||
})
|
||||
|
||||
async function handleUploadFiles(files: File[]) {
|
||||
if (files.length === 0) return
|
||||
|
||||
uploadState.value = {
|
||||
isUploading: true,
|
||||
currentFileName: '',
|
||||
currentFileProgress: 0,
|
||||
uploadedBytes: 0,
|
||||
totalBytes: files.reduce((sum, f) => sum + f.size, 0),
|
||||
completedFiles: 0,
|
||||
totalFiles: files.length,
|
||||
}
|
||||
try {
|
||||
for (const file of files) {
|
||||
uploadState.value.currentFileName = file.name
|
||||
const buffer = await file.arrayBuffer()
|
||||
const targetPath = resolvePath(
|
||||
currentPath.value ? `${currentPath.value}/${file.name}` : file.name,
|
||||
)
|
||||
await writeFileBytes(targetPath, new Uint8Array(buffer))
|
||||
uploadState.value.completedFiles++
|
||||
uploadState.value.uploadedBytes += file.size
|
||||
uploadState.value.currentFileProgress = 1
|
||||
}
|
||||
} catch (e) {
|
||||
addNotification({
|
||||
title: formatMessage(commonMessages.uploadFailedLabel),
|
||||
text: e instanceof Error ? e.message : '',
|
||||
type: 'error',
|
||||
})
|
||||
} finally {
|
||||
uploadState.value.isUploading = false
|
||||
await refresh()
|
||||
}
|
||||
}
|
||||
|
||||
async function handleExtractFile(path: string, override: boolean, dry: boolean) {
|
||||
try {
|
||||
return await invoke('plugin:files|file_extract_zip', {
|
||||
instancePath: props.instance.path,
|
||||
filePath: path,
|
||||
overrideConflicts: override,
|
||||
dryRun: dry,
|
||||
})
|
||||
} catch (e) {
|
||||
addNotification({
|
||||
title: formatMessage(commonMessages.extractFailedLabel),
|
||||
text: e instanceof Error ? e.message : '',
|
||||
type: 'error',
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
debug('setup: registering profile_listener')
|
||||
const unlistenProfiles = await profile_listener(
|
||||
async (event: { event: string; profile_path_id: string }) => {
|
||||
debug('profile_listener: event =', event.event, 'path =', event.profile_path_id)
|
||||
if (event.profile_path_id === props.instance.path && event.event === 'synced') {
|
||||
debug('profile_listener: synced event matched, calling refresh')
|
||||
await refresh()
|
||||
}
|
||||
},
|
||||
)
|
||||
debug('setup: profile_listener registered')
|
||||
|
||||
onUnmounted(() => {
|
||||
unlistenProfiles()
|
||||
})
|
||||
|
||||
watch(
|
||||
() => props.instance.path,
|
||||
async () => {
|
||||
debug('watch instance.path: changed to', props.instance.path)
|
||||
instanceRoot.value = await get_full_path(props.instance.path)
|
||||
currentPath.value = ''
|
||||
await refresh()
|
||||
},
|
||||
)
|
||||
|
||||
provideFileManager({
|
||||
items,
|
||||
loading,
|
||||
error,
|
||||
currentPath,
|
||||
navigateTo,
|
||||
editingFile,
|
||||
startEditing,
|
||||
stopEditing,
|
||||
createItem: handleCreateItem,
|
||||
renameItem: handleRenameItem,
|
||||
moveItem: handleMoveItem,
|
||||
deleteItem: handleDeleteItem,
|
||||
readFile: handleReadFile,
|
||||
readFileAsBlob: handleReadFileAsBlob,
|
||||
writeFile: handleWriteFile,
|
||||
downloadFile: handleDownloadFile,
|
||||
uploadFiles: handleUploadFiles,
|
||||
uploadState,
|
||||
extractFile: handleExtractFile,
|
||||
refresh,
|
||||
basePath: instanceRoot,
|
||||
openInFolder: (path: string) => highlightInFolder(path),
|
||||
downloadButtonLabel: formatMessage(messages.saveAs),
|
||||
uploadingLabel: (completed: number, total: number) =>
|
||||
formatMessage(messages.addingFiles, { completed, total }),
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<FilePageLayout :show-refresh-button="true" />
|
||||
</template>
|
||||
@@ -3,6 +3,7 @@
|
||||
<div class="p-6 pr-2 pb-4" @contextmenu.prevent.stop="(event) => handleRightClick(event)">
|
||||
<ExportModal ref="exportModal" :instance="instance" />
|
||||
<InstanceSettingsModal
|
||||
:key="instance.path"
|
||||
ref="settingsModal"
|
||||
:instance="instance"
|
||||
:offline="offline"
|
||||
@@ -36,27 +37,6 @@
|
||||
</template>
|
||||
<template v-else> Never played </template>
|
||||
</div>
|
||||
|
||||
<div v-if="linkedProjectV3" class="w-1.5 h-1.5 rounded-full bg-surface-5"></div>
|
||||
|
||||
<div
|
||||
v-if="linkedProjectV3"
|
||||
class="flex gap-1.5 items-center font-medium text-primary"
|
||||
>
|
||||
Linked to
|
||||
<Avatar
|
||||
:src="linkedProjectV3.icon_url"
|
||||
:alt="linkedProjectV3.name"
|
||||
:tint-by="instance.path"
|
||||
size="24px"
|
||||
/>
|
||||
<router-link
|
||||
:to="`/project/${linkedProjectV3.slug ?? linkedProjectV3.id}`"
|
||||
class="hover:underline text-primary truncate"
|
||||
>
|
||||
{{ linkedProjectV3.name }}
|
||||
</router-link>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template v-else>
|
||||
@@ -246,7 +226,6 @@
|
||||
:options="options"
|
||||
:offline="offline"
|
||||
:playing="playing"
|
||||
:versions="modrinthVersions"
|
||||
:installed="instance.install_stage !== 'installed'"
|
||||
:is-server-instance="isServerInstance"
|
||||
:open-settings="() => settingsModal?.show(1)"
|
||||
@@ -286,6 +265,7 @@
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import {
|
||||
BoxesIcon,
|
||||
CheckCircleIcon,
|
||||
ClipboardCopyIcon,
|
||||
DownloadIcon,
|
||||
@@ -303,6 +283,7 @@ import {
|
||||
ServerIcon,
|
||||
SettingsIcon,
|
||||
StopCircleIcon,
|
||||
TerminalSquareIcon,
|
||||
UpdatedIcon,
|
||||
UserPlusIcon,
|
||||
XIcon,
|
||||
@@ -313,6 +294,7 @@ import {
|
||||
ContentPageHeader,
|
||||
injectNotificationManager,
|
||||
LoadingIndicator,
|
||||
NavTabs,
|
||||
OverflowMenu,
|
||||
ServerOnlinePlayers,
|
||||
ServerPing,
|
||||
@@ -330,9 +312,8 @@ import ContextMenu from '@/components/ui/ContextMenu.vue'
|
||||
import ExportModal from '@/components/ui/ExportModal.vue'
|
||||
import InstanceSettingsModal from '@/components/ui/modal/InstanceSettingsModal.vue'
|
||||
import UpdateToPlayModal from '@/components/ui/modal/UpdateToPlayModal.vue'
|
||||
import NavTabs from '@/components/ui/NavTabs.vue'
|
||||
import { trackEvent } from '@/helpers/analytics'
|
||||
import { get_project_v3, get_version_many } from '@/helpers/cache.js'
|
||||
import { get_project_v3 } from '@/helpers/cache.js'
|
||||
import { process_listener, profile_listener } from '@/helpers/events'
|
||||
import { get_by_profile_path } from '@/helpers/process'
|
||||
import { finish_install, get, get_full_path, kill, run } from '@/helpers/profile'
|
||||
@@ -362,7 +343,6 @@ window.addEventListener('online', () => {
|
||||
})
|
||||
|
||||
const instance = ref<GameInstance>()
|
||||
const modrinthVersions = ref<Labrinth.Versions.v2.Version[]>([])
|
||||
const playing = ref(false)
|
||||
const loading = ref(false)
|
||||
const exportModal = ref<InstanceType<typeof ExportModal>>()
|
||||
@@ -385,7 +365,6 @@ const loadingServerPing = ref(false)
|
||||
async function fetchInstance() {
|
||||
isServerInstance.value = false
|
||||
linkedProjectV3.value = undefined
|
||||
modrinthVersions.value = []
|
||||
ping.value = undefined
|
||||
playersOnline.value = undefined
|
||||
loadingServerPing.value = false
|
||||
@@ -402,14 +381,6 @@ async function fetchInstance() {
|
||||
if (linkedProjectV3.value?.minecraft_server != null) {
|
||||
isServerInstance.value = true
|
||||
}
|
||||
|
||||
if (linkedProjectV3.value && linkedProjectV3.value.versions) {
|
||||
const versions = await get_version_many(linkedProjectV3.value.versions, 'must_revalidate')
|
||||
modrinthVersions.value = versions.sort(
|
||||
(a: Labrinth.Versions.v2.Version, b: Labrinth.Versions.v2.Version) =>
|
||||
dayjs(b.date_published).valueOf() - dayjs(a.date_published).valueOf(),
|
||||
)
|
||||
}
|
||||
} catch (error) {
|
||||
handleError(error as Error)
|
||||
}
|
||||
@@ -462,14 +433,22 @@ const tabs = computed(() => [
|
||||
{
|
||||
label: 'Content',
|
||||
href: `${basePath.value}`,
|
||||
icon: BoxesIcon,
|
||||
},
|
||||
{
|
||||
label: 'Files',
|
||||
href: `${basePath.value}/files`,
|
||||
icon: FolderOpenIcon,
|
||||
},
|
||||
{
|
||||
label: 'Worlds',
|
||||
href: `${basePath.value}/worlds`,
|
||||
icon: GlobeIcon,
|
||||
},
|
||||
{
|
||||
label: 'Logs',
|
||||
href: `${basePath.value}/logs`,
|
||||
icon: TerminalSquareIcon,
|
||||
},
|
||||
])
|
||||
|
||||
@@ -605,18 +584,23 @@ const handleOptionsClick = async (args: { option: string; item: unknown }) => {
|
||||
|
||||
const unlistenProfiles = await profile_listener(
|
||||
async (event: { profile_path_id: string; event: string }) => {
|
||||
if (event.profile_path_id === route.params.id) {
|
||||
if (event.event === 'removed') {
|
||||
await router.push({
|
||||
path: '/',
|
||||
})
|
||||
return
|
||||
if (event.profile_path_id !== route.params.id) return
|
||||
if (event.event === 'removed' || route.path === '/') {
|
||||
if (route.path !== '/') {
|
||||
await router.push({ path: '/' })
|
||||
}
|
||||
instance.value = await get(route.params.id as string).catch(handleError)
|
||||
if (!instance.value?.linked_data?.project_id) {
|
||||
linkedProjectV3.value = undefined
|
||||
isServerInstance.value = false
|
||||
return
|
||||
}
|
||||
instance.value = await get(route.params.id as string).catch((err) => {
|
||||
if (String(err).includes('not managed')) {
|
||||
router.push({ path: '/' })
|
||||
return undefined
|
||||
}
|
||||
return handleError(err)
|
||||
})
|
||||
if (!instance.value?.linked_data?.project_id) {
|
||||
linkedProjectV3.value = undefined
|
||||
isServerInstance.value = false
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
@@ -150,10 +150,6 @@ const props = defineProps({
|
||||
return false
|
||||
},
|
||||
},
|
||||
versions: {
|
||||
type: Array,
|
||||
required: true,
|
||||
},
|
||||
installed: {
|
||||
type: Boolean,
|
||||
default() {
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
:modpack-icon-url="linkedModpackProject?.icon_url ?? undefined"
|
||||
:enable-toggle="!props.isServerInstance"
|
||||
:get-overflow-options="getOverflowOptions"
|
||||
:switch-version="handleSwitchVersion"
|
||||
@update:enabled="handleModpackContentToggle"
|
||||
@bulk:enable="handleModpackContentBulkToggle"
|
||||
@bulk:disable="handleModpackContentBulkToggle"
|
||||
@@ -20,6 +21,11 @@
|
||||
<ConfirmModpackUpdateModal
|
||||
ref="modpackUpdateConfirmModal"
|
||||
:downgrade="isModpackUpdateDowngrade"
|
||||
:backup-tip="
|
||||
[linkedModpackProject?.title, pendingModpackUpdateVersion?.version_number]
|
||||
.filter(Boolean)
|
||||
.join(' ')
|
||||
"
|
||||
@confirm="handleModpackUpdateConfirm"
|
||||
@cancel="handleModpackUpdateCancel"
|
||||
/>
|
||||
@@ -36,13 +42,13 @@
|
||||
: (updatingProject?.version?.id ?? '')
|
||||
"
|
||||
:is-app="true"
|
||||
:is-modpack="updatingModpack"
|
||||
:project-type="updatingModpack ? 'modpack' : updatingProject?.project_type"
|
||||
:project-icon-url="
|
||||
updatingModpack ? linkedModpackProject?.icon_url : updatingProject?.project?.icon_url
|
||||
"
|
||||
:project-name="
|
||||
updatingModpack
|
||||
? (linkedModpackProject?.title ?? formatMessage(messages.modpackFallback))
|
||||
? (linkedModpackProject?.title ?? formatMessage(commonMessages.modpackLabel))
|
||||
: (updatingProject?.project?.title ?? updatingProject?.file_name)
|
||||
"
|
||||
:loading="loadingVersions"
|
||||
@@ -58,8 +64,11 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { ClipboardCopyIcon, FolderOpenIcon } from '@modrinth/assets'
|
||||
import {
|
||||
commonMessages,
|
||||
ConfirmModpackUpdateModal,
|
||||
ContentCardLayout as ContentPageLayout,
|
||||
type ContentItem,
|
||||
type ContentModpackCardCategory,
|
||||
type ContentModpackCardProject,
|
||||
@@ -73,9 +82,9 @@ import {
|
||||
type OverflowMenuOption,
|
||||
provideAppBackup,
|
||||
provideContentManager,
|
||||
useDebugLogger,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { ContentCardLayout as ContentPageLayout } from '@modrinth/ui'
|
||||
import { getCurrentWebview } from '@tauri-apps/api/webview'
|
||||
import { open } from '@tauri-apps/plugin-dialog'
|
||||
import { openUrl } from '@tauri-apps/plugin-opener'
|
||||
@@ -90,6 +99,7 @@ import { get_project_versions, get_version } from '@/helpers/cache.js'
|
||||
import { profile_listener } from '@/helpers/events.js'
|
||||
import {
|
||||
add_project_from_path,
|
||||
add_project_from_version,
|
||||
duplicate,
|
||||
edit,
|
||||
get,
|
||||
@@ -117,10 +127,6 @@ const messages = defineMessages({
|
||||
id: 'app.instance.mods.share-text',
|
||||
defaultMessage: "Check out the projects I'm using in my modpack!",
|
||||
},
|
||||
modpackFallback: {
|
||||
id: 'app.instance.mods.modpack-fallback',
|
||||
defaultMessage: 'Modpack',
|
||||
},
|
||||
successfullyUploaded: {
|
||||
id: 'app.instance.mods.successfully-uploaded',
|
||||
defaultMessage: 'Successfully uploaded',
|
||||
@@ -133,30 +139,10 @@ const messages = defineMessages({
|
||||
id: 'app.instance.mods.projects-were-added',
|
||||
defaultMessage: '{count} projects were added',
|
||||
},
|
||||
updating: {
|
||||
id: 'app.instance.mods.updating',
|
||||
defaultMessage: 'Updating...',
|
||||
},
|
||||
installing: {
|
||||
id: 'app.instance.mods.installing',
|
||||
defaultMessage: 'Installing...',
|
||||
},
|
||||
contentTypeProject: {
|
||||
id: 'app.instance.mods.content-type-project',
|
||||
defaultMessage: 'project',
|
||||
},
|
||||
unknownVersion: {
|
||||
id: 'app.instance.mods.unknown-version',
|
||||
defaultMessage: 'Unknown',
|
||||
},
|
||||
showFile: {
|
||||
id: 'app.instance.mods.show-file',
|
||||
defaultMessage: 'Show file',
|
||||
},
|
||||
copyLink: {
|
||||
id: 'app.instance.mods.copy-link',
|
||||
defaultMessage: 'Copy link',
|
||||
},
|
||||
})
|
||||
|
||||
let savedModalState: ModpackContentModalState | null = null
|
||||
@@ -165,10 +151,10 @@ const { formatMessage } = useVIntl()
|
||||
const { handleError, addNotification } = injectNotificationManager()
|
||||
const { installingItems } = injectContentInstall()
|
||||
const router = useRouter()
|
||||
const debug = useDebugLogger('Mods:ContentUpdate')
|
||||
|
||||
const props = defineProps<{
|
||||
instance: GameInstance
|
||||
versions: Labrinth.Versions.v2.Version[]
|
||||
isServerInstance?: boolean
|
||||
openSettings?: () => void
|
||||
}>()
|
||||
@@ -275,7 +261,7 @@ async function handleUploadFiles() {
|
||||
}
|
||||
}
|
||||
|
||||
async function _toggleDisableMod(mod: ContentItem) {
|
||||
async function toggleDisableMod(mod: ContentItem) {
|
||||
try {
|
||||
mod.file_path = await toggle_disable_project(props.instance.path, mod.file_path!)
|
||||
mod.enabled = !mod.enabled
|
||||
@@ -293,7 +279,7 @@ async function _toggleDisableMod(mod: ContentItem) {
|
||||
}
|
||||
}
|
||||
|
||||
const toggleDisableMod = useDebounceFn(_toggleDisableMod, 20)
|
||||
const toggleDisableDebounced = useDebounceFn(toggleDisableMod, 20)
|
||||
|
||||
async function removeMod(mod: ContentItem) {
|
||||
await remove_project(props.instance.path, mod.file_path!).catch(handleError)
|
||||
@@ -345,10 +331,48 @@ async function updateProject(mod: ContentItem) {
|
||||
}
|
||||
}
|
||||
|
||||
async function switchProjectVersion(mod: ContentItem, version: Labrinth.Versions.v2.Version) {
|
||||
isBulkOperating.value = true
|
||||
mod.installing = true
|
||||
if (mod.version) {
|
||||
mod.version.id = version.id
|
||||
mod.version.version_number = version.version_number
|
||||
}
|
||||
try {
|
||||
await remove_project(props.instance.path, mod.file_path!)
|
||||
const newPath = await add_project_from_version(props.instance.path, version.id)
|
||||
|
||||
const profile = await get(props.instance.path).catch(handleError)
|
||||
if (profile) {
|
||||
await installVersionDependencies(profile, version).catch(handleError)
|
||||
}
|
||||
|
||||
mod.file_path = newPath
|
||||
} catch (err) {
|
||||
handleError(err as Error)
|
||||
} finally {
|
||||
mod.installing = false
|
||||
isBulkOperating.value = false
|
||||
await initProjects()
|
||||
}
|
||||
}
|
||||
|
||||
async function handleUpdate(id: string) {
|
||||
const item = projects.value.find((p) => p.file_name === id)
|
||||
const item = projects.value.find((p) => p.id === id)
|
||||
if (!item?.has_update || !item.project?.id || !item.version?.id) return
|
||||
|
||||
debug('handleUpdate triggered', {
|
||||
fileName: item.file_name,
|
||||
projectType: item.project_type,
|
||||
projectId: item.project.id,
|
||||
projectTitle: item.project.title,
|
||||
currentVersionId: item.version.id,
|
||||
currentVersionNumber: item.version.version_number,
|
||||
updateVersionId: item.update_version_id,
|
||||
instanceGameVersion: props.instance.game_version,
|
||||
instanceLoader: props.instance.loader,
|
||||
})
|
||||
|
||||
updatingModpack.value = false
|
||||
updatingProject.value = item
|
||||
updatingProjectVersions.value = []
|
||||
@@ -365,6 +389,51 @@ async function handleUpdate(id: string) {
|
||||
|
||||
loadingVersions.value = false
|
||||
|
||||
if (!versions) {
|
||||
debug('handleUpdate: no versions returned', { projectId: item.project.id })
|
||||
return
|
||||
}
|
||||
|
||||
debug('handleUpdate: fetched versions', {
|
||||
projectId: item.project.id,
|
||||
projectType: item.project_type,
|
||||
totalVersions: versions.length,
|
||||
versionSample: versions.slice(0, 5).map((v) => ({
|
||||
id: v.id,
|
||||
number: v.version_number,
|
||||
loaders: v.loaders,
|
||||
gameVersions: v.game_versions,
|
||||
})),
|
||||
currentVersionInList: versions.some((v) => v.id === item.version?.id),
|
||||
updateVersionInList: versions.some((v) => v.id === item.update_version_id),
|
||||
})
|
||||
|
||||
versions.sort(
|
||||
(a, b) => new Date(b.date_published).getTime() - new Date(a.date_published).getTime(),
|
||||
)
|
||||
|
||||
updatingProjectVersions.value = versions
|
||||
}
|
||||
|
||||
async function handleSwitchVersion(item: ContentItem) {
|
||||
if (!item.project?.id || !item.version?.id) return
|
||||
|
||||
updatingModpack.value = false
|
||||
updatingProject.value = item
|
||||
updatingProjectVersions.value = []
|
||||
loadingVersions.value = true
|
||||
loadingChangelog.value = false
|
||||
|
||||
await nextTick()
|
||||
|
||||
contentUpdaterModal.value?.show(item.version.id, { switchMode: true })
|
||||
|
||||
const versions = (await get_project_versions(item.project.id).catch((e) => {
|
||||
return handleError(e)
|
||||
})) as Labrinth.Versions.v2.Version[] | null
|
||||
|
||||
loadingVersions.value = false
|
||||
|
||||
if (!versions) return
|
||||
|
||||
versions.sort(
|
||||
@@ -375,7 +444,7 @@ async function handleUpdate(id: string) {
|
||||
}
|
||||
|
||||
async function handleModpackContentToggle(item: ContentItem) {
|
||||
await toggleDisableMod(item)
|
||||
await toggleDisableDebounced(item)
|
||||
}
|
||||
|
||||
async function handleModpackContentBulkToggle(items: ContentItem[]) {
|
||||
@@ -446,7 +515,7 @@ async function fetchAndSpliceVersion(
|
||||
async function handleVersionSelect(version: Labrinth.Versions.v2.Version) {
|
||||
if (version.changelog != null) return
|
||||
loadingChangelog.value = true
|
||||
await fetchAndSpliceVersion(version.id, 'must_revalidate', handleError)
|
||||
await fetchAndSpliceVersion(version.id, 'must_revalidate', handleError as (err: unknown) => void)
|
||||
loadingChangelog.value = false
|
||||
}
|
||||
|
||||
@@ -493,15 +562,25 @@ function handleModpackUpdateCancel() {
|
||||
pendingModpackUpdateVersion.value = null
|
||||
}
|
||||
|
||||
async function handleModalUpdate(selectedVersion: Labrinth.Versions.v2.Version) {
|
||||
async function handleModalUpdate(
|
||||
selectedVersion: Labrinth.Versions.v2.Version,
|
||||
event?: MouseEvent,
|
||||
) {
|
||||
if (updatingModpack.value) {
|
||||
handleModpackUpdateRequest(selectedVersion)
|
||||
if (event?.shiftKey) {
|
||||
pendingModpackUpdateVersion.value = selectedVersion
|
||||
await handleModpackUpdateConfirm()
|
||||
} else {
|
||||
handleModpackUpdateRequest(selectedVersion)
|
||||
}
|
||||
} else if (updatingProject.value) {
|
||||
const mod = updatingProject.value
|
||||
|
||||
mod.update_version_id = selectedVersion.id
|
||||
|
||||
await updateProject(mod)
|
||||
if (mod.has_update && mod.update_version_id === selectedVersion.id) {
|
||||
await updateProject(mod)
|
||||
} else {
|
||||
await switchProjectVersion(mod, selectedVersion)
|
||||
}
|
||||
|
||||
resetUpdateState()
|
||||
}
|
||||
@@ -554,16 +633,18 @@ async function handleShareItems(
|
||||
}
|
||||
|
||||
function getOverflowOptions(item: ContentItem): OverflowMenuOption[] {
|
||||
const options: OverflowMenuOption[] = [
|
||||
{
|
||||
id: formatMessage(messages.showFile),
|
||||
action: () => highlightModInProfile(props.instance.path, item.file_path),
|
||||
},
|
||||
]
|
||||
const options: OverflowMenuOption[] = []
|
||||
|
||||
options.push({
|
||||
id: formatMessage(commonMessages.showFileButton),
|
||||
icon: FolderOpenIcon,
|
||||
action: () => highlightModInProfile(props.instance.path, item.file_path),
|
||||
})
|
||||
|
||||
if (item.project?.slug) {
|
||||
options.push({
|
||||
id: formatMessage(messages.copyLink),
|
||||
id: formatMessage(commonMessages.copyLinkButton),
|
||||
icon: ClipboardCopyIcon,
|
||||
action: async () => {
|
||||
await navigator.clipboard.writeText(
|
||||
`https://modrinth.com/${item.project_type}/${item.project?.slug}`,
|
||||
@@ -613,18 +694,13 @@ async function initProjects(cacheBehaviour?: CacheBehaviour) {
|
||||
|
||||
if (allCategories && modpackInfo.project.categories) {
|
||||
const seen = new Set<string>()
|
||||
linkedModpackCategories.value = allCategories
|
||||
.filter((cat: { name: string }) => {
|
||||
if (modpackInfo.project.categories.includes(cat.name) && !seen.has(cat.name)) {
|
||||
seen.add(cat.name)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
})
|
||||
.map((cat: { name: string }) => ({
|
||||
...cat,
|
||||
name: cat.name.charAt(0).toUpperCase() + cat.name.slice(1),
|
||||
}))
|
||||
linkedModpackCategories.value = allCategories.filter((cat: { name: string }) => {
|
||||
if (modpackInfo.project.categories.includes(cat.name) && !seen.has(cat.name)) {
|
||||
seen.add(cat.name)
|
||||
return true
|
||||
}
|
||||
return false
|
||||
})
|
||||
} else {
|
||||
linkedModpackCategories.value = []
|
||||
}
|
||||
@@ -669,11 +745,17 @@ provideContentManager({
|
||||
linkedModpackProject.value
|
||||
? {
|
||||
project: linkedModpackProject.value,
|
||||
projectLink: `/project/${linkedModpackProject.value.slug ?? linkedModpackProject.value.id}`,
|
||||
projectLink: {
|
||||
path: `/project/${linkedModpackProject.value.slug ?? linkedModpackProject.value.id}`,
|
||||
query: { i: props.instance.path },
|
||||
},
|
||||
version: linkedModpackVersion.value ?? undefined,
|
||||
versionLink:
|
||||
linkedModpackProject.value && linkedModpackVersion.value
|
||||
? `/project/${linkedModpackProject.value.slug ?? linkedModpackProject.value.id}/version/${linkedModpackVersion.value.id}`
|
||||
? {
|
||||
path: `/project/${linkedModpackProject.value.slug ?? linkedModpackProject.value.id}/version/${linkedModpackVersion.value.id}`,
|
||||
query: { i: props.instance.path },
|
||||
}
|
||||
: undefined,
|
||||
owner: linkedModpackOwner.value
|
||||
? {
|
||||
@@ -688,23 +770,27 @@ provideContentManager({
|
||||
hasUpdate: linkedModpackHasUpdate.value,
|
||||
disabled: isModpackUpdating.value,
|
||||
disabledText: isModpackUpdating.value
|
||||
? formatMessage(messages.updating)
|
||||
: formatMessage(messages.installing),
|
||||
? formatMessage(commonMessages.updatingLabel)
|
||||
: formatMessage(commonMessages.installingLabel),
|
||||
}
|
||||
: null,
|
||||
),
|
||||
isPackLocked,
|
||||
isBusy: isInstanceBusy,
|
||||
isBulkOperating,
|
||||
getItemId: (item) => item.file_name,
|
||||
contentTypeLabel: ref(formatMessage(messages.contentTypeProject)),
|
||||
toggleEnabled: toggleDisableMod,
|
||||
bulkEnableItems: (items) =>
|
||||
Promise.all(items.map((item) => toggleDisableMod(item))).then(() => {}),
|
||||
bulkDisableItems: (items) =>
|
||||
Promise.all(items.map((item) => toggleDisableMod(item))).then(() => {}),
|
||||
toggleEnabled: toggleDisableDebounced,
|
||||
bulkEnableItems: (items: ContentItem[]) =>
|
||||
Promise.all(items.filter((item) => !item.enabled).map((item) => toggleDisableMod(item))).then(
|
||||
() => {},
|
||||
),
|
||||
bulkDisableItems: (items: ContentItem[]) =>
|
||||
Promise.all(items.filter((item) => item.enabled).map((item) => toggleDisableMod(item))).then(
|
||||
() => {},
|
||||
),
|
||||
deleteItem: removeMod,
|
||||
bulkDeleteItems: (items) => Promise.all(items.map((item) => removeMod(item))).then(() => {}),
|
||||
bulkDeleteItems: (items: ContentItem[]) =>
|
||||
Promise.all(items.map((item) => removeMod(item))).then(() => {}),
|
||||
refresh: () => initProjects('must_revalidate'),
|
||||
browse: handleBrowseContent,
|
||||
uploadFiles: handleUploadFiles,
|
||||
@@ -715,27 +801,33 @@ provideContentManager({
|
||||
viewModpackContent: handleModpackContent,
|
||||
unlinkModpack: unpairProfile,
|
||||
openSettings: props.openSettings,
|
||||
switchVersion: handleSwitchVersion,
|
||||
getOverflowOptions,
|
||||
showContentHint,
|
||||
dismissContentHint,
|
||||
shareItems: handleShareItems,
|
||||
mapToTableItem: (item) => ({
|
||||
id: item.file_name,
|
||||
mapToTableItem: (item: ContentItem) => ({
|
||||
id: item.id,
|
||||
project: item.project ?? {
|
||||
id: item.file_name,
|
||||
slug: null,
|
||||
title: item.file_name.replace('.disabled', ''),
|
||||
icon_url: null,
|
||||
},
|
||||
projectLink: item.project?.id ? `/project/${item.project.id}` : undefined,
|
||||
projectLink: item.project?.id
|
||||
? { path: `/project/${item.project.id}`, query: { i: props.instance.path } }
|
||||
: undefined,
|
||||
version: item.version ?? {
|
||||
id: item.file_name,
|
||||
version_number: formatMessage(messages.unknownVersion),
|
||||
version_number: formatMessage(commonMessages.unknownLabel),
|
||||
file_name: item.file_name,
|
||||
},
|
||||
versionLink:
|
||||
item.project?.id && item.version?.id
|
||||
? `/project/${item.project.id}/version/${item.version.id}`
|
||||
? {
|
||||
path: `/project/${item.project.id}/version/${item.version.id}`,
|
||||
query: { i: props.instance.path },
|
||||
}
|
||||
: undefined,
|
||||
owner: item.owner
|
||||
? {
|
||||
@@ -744,7 +836,9 @@ provideContentManager({
|
||||
}
|
||||
: undefined,
|
||||
enabled: item.enabled,
|
||||
installing: item.installing,
|
||||
}),
|
||||
filterPersistKey: props.instance.path,
|
||||
})
|
||||
|
||||
await initProjects()
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
<template>{{ instance.name }} overview</template>
|
||||
<script setup lang="ts">
|
||||
import type { Version } from '@modrinth/utils'
|
||||
|
||||
import type ContextMenu from '@/components/ui/ContextMenu.vue'
|
||||
import type { GameInstance } from '@/helpers/types'
|
||||
|
||||
@@ -10,7 +8,6 @@ defineProps<{
|
||||
options: InstanceType<typeof ContextMenu>
|
||||
offline: boolean
|
||||
playing: boolean
|
||||
versions: Version[]
|
||||
installed: boolean
|
||||
}>()
|
||||
</script>
|
||||
|
||||
@@ -15,48 +15,88 @@
|
||||
<EditWorldModal ref="editWorldModal" :instance="instance" @submit="editWorld" />
|
||||
<ConfirmModalWrapper
|
||||
ref="removeServerModal"
|
||||
:title="`Are you sure you want to remove ${serverToRemove?.name ?? 'this server'}?`"
|
||||
:description="`'${serverToRemove?.name}'${serverToRemove?.address === serverToRemove?.name ? ' ' : ` (${serverToRemove?.address})`} will be removed from your list, including in-game, and there will be no way to recover it.`"
|
||||
:title="
|
||||
formatMessage(messages.removeServerTitle, {
|
||||
name: serverToRemove?.name ?? formatMessage(messages.thisServer),
|
||||
})
|
||||
"
|
||||
:description="
|
||||
serverToRemove?.address === serverToRemove?.name
|
||||
? formatMessage(messages.removeServerDescription, { name: serverToRemove?.name })
|
||||
: formatMessage(messages.removeServerDescriptionWithAddress, {
|
||||
name: serverToRemove?.name,
|
||||
address: serverToRemove?.address,
|
||||
})
|
||||
"
|
||||
:markdown="false"
|
||||
@proceed="proceedRemoveServer"
|
||||
/>
|
||||
<ConfirmModalWrapper
|
||||
ref="deleteWorldModal"
|
||||
:title="`Are you sure you want to permanently delete this world?`"
|
||||
:description="`'${worldToDelete?.name}' will be **permanently deleted**, and there will be no way to recover it.`"
|
||||
:title="formatMessage(messages.deleteWorldTitle)"
|
||||
:description="formatMessage(messages.deleteWorldDescription, { name: worldToDelete?.name })"
|
||||
@proceed="proceedDeleteWorld"
|
||||
/>
|
||||
<div v-if="dedupedWorlds.length > 0" class="flex flex-col gap-4">
|
||||
<div class="flex flex-wrap gap-2 items-center">
|
||||
<div class="flex flex-wrap items-center gap-2">
|
||||
<StyledInput
|
||||
v-model="searchFilter"
|
||||
:icon="SearchIcon"
|
||||
type="text"
|
||||
placeholder="Search worlds..."
|
||||
autocomplete="off"
|
||||
:spellcheck="false"
|
||||
input-class="!h-10"
|
||||
wrapper-class="flex-1 min-w-0"
|
||||
clearable
|
||||
wrapper-class="flex-grow"
|
||||
:placeholder="
|
||||
formatMessage(messages.searchWorldsPlaceholder, { count: dedupedWorlds.length })
|
||||
"
|
||||
/>
|
||||
<ButtonStyled>
|
||||
<button :disabled="refreshingAll" @click="refreshAllWorlds">
|
||||
<template v-if="refreshingAll">
|
||||
<SpinnerIcon class="animate-spin" />
|
||||
Refreshing...
|
||||
</template>
|
||||
<template v-else>
|
||||
<UpdatedIcon />
|
||||
Refresh
|
||||
</template>
|
||||
<div class="flex gap-2">
|
||||
<ButtonStyled type="outlined">
|
||||
<button class="!h-10 !border-button-bg !border-[1px]" @click="addServerModal?.show()">
|
||||
<PlusIcon class="size-5" />
|
||||
{{ formatMessage(messages.addServer) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button
|
||||
class="!h-10 flex items-center gap-2"
|
||||
@click="
|
||||
router.push({ path: '/browse/server', query: { i: instance.path, from: 'worlds' } })
|
||||
"
|
||||
>
|
||||
<CompassIcon class="size-5" />
|
||||
<span>{{ formatMessage(messages.browseServers) }}</span>
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-wrap items-center justify-between gap-2">
|
||||
<div class="flex flex-wrap items-center gap-1.5">
|
||||
<FilterIcon class="size-5 text-secondary" />
|
||||
<button
|
||||
:class="filterPillClass(selectedFilters.length === 0)"
|
||||
@click="selectedFilters = []"
|
||||
>
|
||||
{{ formatMessage(commonMessages.allProjectType) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button @click="addServerModal?.show()">
|
||||
<PlusIcon />
|
||||
Add a server
|
||||
<button
|
||||
v-for="option in filterOptions"
|
||||
:key="option.id"
|
||||
:class="filterPillClass(selectedFilters.includes(option.id))"
|
||||
@click="toggleFilter(option.id)"
|
||||
>
|
||||
{{ option.label }}
|
||||
</button>
|
||||
</div>
|
||||
<ButtonStyled type="transparent" hover-color-fill="none">
|
||||
<button :disabled="refreshingAll" @click="refreshAllWorlds">
|
||||
<RefreshCwIcon :class="refreshingAll ? 'animate-spin' : ''" />
|
||||
{{ formatMessage(commonMessages.refreshButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
<FilterBar v-model="filters" :options="filterOptions" show-all-options />
|
||||
<div class="flex flex-col w-full gap-2">
|
||||
<WorldItem
|
||||
v-for="world in filteredWorlds"
|
||||
@@ -92,52 +132,49 @@
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="w-full max-w-[48rem] mx-auto flex flex-col mt-6">
|
||||
<RadialHeader class="">
|
||||
<div class="flex items-center gap-6 w-[32rem] mx-auto">
|
||||
<img src="@/assets/sad-modrinth-bot.webp" alt="" aria-hidden="true" class="h-24" />
|
||||
<span class="text-contrast font-bold text-xl"> You don't have any worlds yet. </span>
|
||||
</div>
|
||||
</RadialHeader>
|
||||
<div class="flex gap-2 mt-4 mx-auto">
|
||||
<ButtonStyled>
|
||||
<button @click="addServerModal?.show()">
|
||||
<PlusIcon aria-hidden="true" />
|
||||
Add a server
|
||||
<EmptyState
|
||||
v-else
|
||||
type="empty-inbox"
|
||||
:heading="formatMessage(messages.noWorldsHeading)"
|
||||
:description="formatMessage(messages.noWorldsDescription)"
|
||||
>
|
||||
<template #actions>
|
||||
<ButtonStyled type="outlined">
|
||||
<button class="!h-10 !border-button-bg !border-[1px]" @click="addServerModal?.show()">
|
||||
<PlusIcon class="size-5" />
|
||||
{{ formatMessage(messages.addServer) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button :disabled="refreshingAll" @click="refreshAllWorlds">
|
||||
<template v-if="refreshingAll">
|
||||
<SpinnerIcon aria-hidden="true" class="animate-spin" />
|
||||
Refreshing...
|
||||
</template>
|
||||
<template v-else>
|
||||
<UpdatedIcon aria-hidden="true" />
|
||||
Refresh
|
||||
</template>
|
||||
<ButtonStyled color="brand">
|
||||
<button
|
||||
class="!h-10 flex items-center gap-2"
|
||||
@click="
|
||||
router.push({ path: '/browse/server', query: { i: instance.path, from: 'worlds' } })
|
||||
"
|
||||
>
|
||||
<CompassIcon class="size-5" />
|
||||
<span>{{ formatMessage(messages.browseServers) }}</span>
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</EmptyState>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { PlusIcon, SearchIcon, SpinnerIcon, UpdatedIcon } from '@modrinth/assets'
|
||||
import { CompassIcon, FilterIcon, PlusIcon, RefreshCwIcon, SearchIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
FilterBar,
|
||||
type FilterBarOption,
|
||||
EmptyState,
|
||||
GAME_MODES,
|
||||
type GameVersion,
|
||||
injectNotificationManager,
|
||||
RadialHeader,
|
||||
StyledInput,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import type { Version } from '@modrinth/utils'
|
||||
import { platform } from '@tauri-apps/plugin-os'
|
||||
import { computed, onUnmounted, ref, watch } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
|
||||
import type ContextMenu from '@/components/ui/ContextMenu.vue'
|
||||
import ConfirmModalWrapper from '@/components/ui/modal/ConfirmModalWrapper.vue'
|
||||
@@ -177,11 +214,80 @@ import {
|
||||
type World,
|
||||
} from '@/helpers/worlds.ts'
|
||||
import { injectServerInstall } from '@/providers/server-install'
|
||||
import { handleSevereError } from '@/store/error.js'
|
||||
import { ensureManagedServerWorldExists, getServerAddress } from '@/store/install'
|
||||
|
||||
const messages = defineMessages({
|
||||
removeServerTitle: {
|
||||
id: 'app.instance.worlds.remove-server-title',
|
||||
defaultMessage: 'Are you sure you want to remove {name}?',
|
||||
},
|
||||
removeServerDescription: {
|
||||
id: 'app.instance.worlds.remove-server-description',
|
||||
defaultMessage:
|
||||
"'{name}' will be removed from your list, including in-game, and there will be no way to recover it.",
|
||||
},
|
||||
removeServerDescriptionWithAddress: {
|
||||
id: 'app.instance.worlds.remove-server-description-with-address',
|
||||
defaultMessage:
|
||||
"'{name}' ({address}) will be removed from your list, including in-game, and there will be no way to recover it.",
|
||||
},
|
||||
deleteWorldTitle: {
|
||||
id: 'app.instance.worlds.delete-world-title',
|
||||
defaultMessage: 'Are you sure you want to permanently delete this world?',
|
||||
},
|
||||
deleteWorldDescription: {
|
||||
id: 'app.instance.worlds.delete-world-description',
|
||||
defaultMessage:
|
||||
"'{name}' will be **permanently deleted**, and there will be no way to recover it.",
|
||||
},
|
||||
searchWorldsPlaceholder: {
|
||||
id: 'app.instance.worlds.search-worlds-placeholder',
|
||||
defaultMessage: 'Search {count} worlds...',
|
||||
},
|
||||
addServer: {
|
||||
id: 'app.instance.worlds.add-server',
|
||||
defaultMessage: 'Add server',
|
||||
},
|
||||
browseServers: {
|
||||
id: 'app.instance.worlds.browse-servers',
|
||||
defaultMessage: 'Browse servers',
|
||||
},
|
||||
noWorldsHeading: {
|
||||
id: 'app.instance.worlds.no-worlds-heading',
|
||||
defaultMessage: 'No servers or worlds added',
|
||||
},
|
||||
noWorldsDescription: {
|
||||
id: 'app.instance.worlds.no-worlds-description',
|
||||
defaultMessage: 'Add a server or browse to get started',
|
||||
},
|
||||
thisServer: {
|
||||
id: 'app.instance.worlds.this-server',
|
||||
defaultMessage: 'this server',
|
||||
},
|
||||
vanillaFilter: {
|
||||
id: 'app.instance.worlds.filter-vanilla',
|
||||
defaultMessage: 'Vanilla',
|
||||
},
|
||||
moddedFilter: {
|
||||
id: 'app.instance.worlds.filter-modded',
|
||||
defaultMessage: 'Modded',
|
||||
},
|
||||
onlineFilter: {
|
||||
id: 'app.instance.worlds.filter-online',
|
||||
defaultMessage: 'Online',
|
||||
},
|
||||
offlineFilter: {
|
||||
id: 'app.instance.worlds.filter-offline',
|
||||
defaultMessage: 'Offline',
|
||||
},
|
||||
})
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
const { handleError } = injectNotificationManager()
|
||||
const { playServerProject } = injectServerInstall()
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
|
||||
const addServerModal = ref<InstanceType<typeof AddServerModal>>()
|
||||
const editServerModal = ref<InstanceType<typeof EditServerModal>>()
|
||||
@@ -202,7 +308,6 @@ const props = defineProps<{
|
||||
options: InstanceType<typeof ContextMenu> | null
|
||||
offline: boolean
|
||||
playing: boolean
|
||||
versions: Version[]
|
||||
installed: boolean
|
||||
}>()
|
||||
|
||||
@@ -213,9 +318,32 @@ function play(world: World) {
|
||||
emit('play', world)
|
||||
}
|
||||
|
||||
const filters = ref<string[]>([])
|
||||
const selectedFilters = ref<string[]>([])
|
||||
const searchFilter = ref('')
|
||||
|
||||
function filterPillClass(isActive: boolean) {
|
||||
return [
|
||||
'cursor-pointer rounded-full border border-solid px-3 py-1.5 text-base font-semibold leading-5 transition-all duration-100 active:scale-[0.97]',
|
||||
isActive
|
||||
? 'border-green bg-brand-highlight text-brand'
|
||||
: 'border-surface-5 bg-surface-4 text-primary hover:bg-surface-5',
|
||||
]
|
||||
}
|
||||
|
||||
function toggleFilter(id: string) {
|
||||
const idx = selectedFilters.value.indexOf(id)
|
||||
if (idx >= 0) {
|
||||
selectedFilters.value.splice(idx, 1)
|
||||
} else {
|
||||
selectedFilters.value.push(id)
|
||||
if (id === 'singleplayer') {
|
||||
selectedFilters.value = selectedFilters.value.filter((f) => f !== 'online' && f !== 'offline')
|
||||
} else if (id === 'online' || id === 'offline') {
|
||||
selectedFilters.value = selectedFilters.value.filter((f) => f !== 'singleplayer')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const refreshingAll = ref(false)
|
||||
const hadNoWorlds = ref(true)
|
||||
const startingInstance = ref(false)
|
||||
@@ -373,6 +501,12 @@ async function editServer(server: ServerWorld) {
|
||||
async function removeServer(server: ServerWorld) {
|
||||
await remove_server_from_profile(instance.value.path, server.index).catch(handleError)
|
||||
worlds.value = worlds.value.filter((w) => w.type !== 'server' || w.index !== server.index)
|
||||
let serverIdx = 0
|
||||
for (const w of worlds.value) {
|
||||
if (w.type === 'server') {
|
||||
w.index = serverIdx++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function editWorld(path: string, name: string, removeIcon: boolean) {
|
||||
@@ -395,7 +529,7 @@ async function deleteWorld(world: SingleplayerWorld) {
|
||||
}
|
||||
|
||||
function handleJoinError(err: Error) {
|
||||
handleError(err)
|
||||
handleSevereError(err, { profilePath: instance.value.path })
|
||||
startingInstance.value = false
|
||||
worldPlaying.value = undefined
|
||||
}
|
||||
@@ -500,58 +634,83 @@ const dedupedWorlds = computed(() => {
|
||||
})
|
||||
|
||||
const filterOptions = computed(() => {
|
||||
const options: FilterBarOption[] = []
|
||||
|
||||
const options: { id: string; label: string }[] = []
|
||||
const hasSingleplayer = dedupedWorlds.value.some((x) => x.type === 'singleplayer')
|
||||
const hasServer = dedupedWorlds.value.some((x) => x.type === 'server')
|
||||
|
||||
if (dedupedWorlds.value.some((x) => x.type === 'singleplayer') && hasServer) {
|
||||
options.push({
|
||||
id: 'singleplayer',
|
||||
message: messages.singleplayer,
|
||||
})
|
||||
options.push({
|
||||
id: 'server',
|
||||
message: messages.server,
|
||||
})
|
||||
const hasStatusFilter =
|
||||
selectedFilters.value.includes('online') || selectedFilters.value.includes('offline')
|
||||
|
||||
if (hasSingleplayer && hasServer && !hasStatusFilter) {
|
||||
options.push({ id: 'singleplayer', label: formatMessage(commonMessages.singleplayerLabel) })
|
||||
}
|
||||
|
||||
if (hasServer) {
|
||||
// add available filter if there's any offline ("unavailable") servers AND there's any singleplayer worlds or available servers
|
||||
if (
|
||||
dedupedWorlds.value.some(
|
||||
(x) =>
|
||||
x.type === 'server' &&
|
||||
!serverData.value[x.address]?.status &&
|
||||
!serverData.value[x.address]?.refreshing,
|
||||
) &&
|
||||
dedupedWorlds.value.some(
|
||||
(x) =>
|
||||
x.type === 'singleplayer' ||
|
||||
(x.type === 'server' &&
|
||||
serverData.value[x.address]?.status &&
|
||||
!serverData.value[x.address]?.refreshing),
|
||||
)
|
||||
) {
|
||||
options.push({
|
||||
id: 'available',
|
||||
message: messages.available,
|
||||
})
|
||||
const servers = dedupedWorlds.value.filter((x) => x.type === 'server')
|
||||
const hasVanilla = servers.some((x) => x.content_kind !== 'modpack')
|
||||
const hasModded = servers.some((x) => x.content_kind === 'modpack')
|
||||
if (hasVanilla && hasModded) {
|
||||
options.push({ id: 'vanilla', label: formatMessage(messages.vanillaFilter) })
|
||||
options.push({ id: 'modded', label: formatMessage(messages.moddedFilter) })
|
||||
}
|
||||
if (!selectedFilters.value.includes('singleplayer')) {
|
||||
const hasOnline = servers.some((x) => !!serverData.value[x.address]?.status)
|
||||
const hasOffline = servers.some((x) => !serverData.value[x.address]?.status)
|
||||
if (hasOnline && hasOffline) {
|
||||
options.push({ id: 'online', label: formatMessage(messages.onlineFilter) })
|
||||
options.push({ id: 'offline', label: formatMessage(messages.offlineFilter) })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return options
|
||||
})
|
||||
|
||||
watch(filterOptions, (options) => {
|
||||
const validIds = new Set(options.map((opt) => opt.id))
|
||||
const cleaned = selectedFilters.value.filter((f) => validIds.has(f))
|
||||
if (cleaned.length !== selectedFilters.value.length) {
|
||||
selectedFilters.value = cleaned
|
||||
}
|
||||
})
|
||||
|
||||
const filteredWorlds = computed(() =>
|
||||
dedupedWorlds.value.filter((x) => {
|
||||
const availableFilter = filters.value.includes('available')
|
||||
const typeFilter = filters.value.includes('server') || filters.value.includes('singleplayer')
|
||||
if (searchFilter.value && !x.name.toLowerCase().includes(searchFilter.value.toLowerCase())) {
|
||||
return false
|
||||
}
|
||||
|
||||
return (
|
||||
(!typeFilter || filters.value.includes(x.type)) &&
|
||||
(!availableFilter || x.type !== 'server' || serverData.value[x.address]?.status) &&
|
||||
(!searchFilter.value || x.name.toLowerCase().includes(searchFilter.value.toLowerCase()))
|
||||
)
|
||||
if (selectedFilters.value.length === 0) return true
|
||||
|
||||
const hasSingleplayerFilter = selectedFilters.value.includes('singleplayer')
|
||||
const typeFilters = selectedFilters.value.filter((f) => f === 'vanilla' || f === 'modded')
|
||||
const statusFilters = selectedFilters.value.filter((f) => f === 'online' || f === 'offline')
|
||||
|
||||
if (x.type === 'singleplayer') {
|
||||
return hasSingleplayerFilter || (typeFilters.length === 0 && statusFilters.length === 0)
|
||||
}
|
||||
|
||||
if (hasSingleplayerFilter && typeFilters.length === 0 && statusFilters.length === 0) {
|
||||
return false
|
||||
}
|
||||
|
||||
let passesType = true
|
||||
if (typeFilters.length > 0) {
|
||||
const isModded = x.content_kind === 'modpack'
|
||||
passesType =
|
||||
(typeFilters.includes('modded') && isModded) ||
|
||||
(typeFilters.includes('vanilla') && !isModded)
|
||||
}
|
||||
|
||||
let passesStatus = true
|
||||
if (statusFilters.length > 0) {
|
||||
const isOnline = !!serverData.value[x.address]?.status
|
||||
passesStatus =
|
||||
(statusFilters.includes('online') && isOnline) ||
|
||||
(statusFilters.includes('offline') && !isOnline)
|
||||
}
|
||||
|
||||
return passesType && passesStatus
|
||||
}),
|
||||
)
|
||||
|
||||
@@ -590,19 +749,4 @@ async function proceedDeleteWorld() {
|
||||
onUnmounted(() => {
|
||||
unlistenProfile()
|
||||
})
|
||||
|
||||
const messages = defineMessages({
|
||||
singleplayer: {
|
||||
id: 'instance.worlds.type.singleplayer',
|
||||
defaultMessage: 'Singleplayer',
|
||||
},
|
||||
server: {
|
||||
id: 'instance.worlds.type.server',
|
||||
defaultMessage: 'Server',
|
||||
},
|
||||
available: {
|
||||
id: 'instance.worlds.filter.available',
|
||||
defaultMessage: 'Available',
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import Files from './Files.vue'
|
||||
import Index from './Index.vue'
|
||||
import Logs from './Logs.vue'
|
||||
import Mods from './Mods.vue'
|
||||
import Overview from './Overview.vue'
|
||||
import Worlds from './Worlds.vue'
|
||||
|
||||
export { Index, Logs, Mods, Overview, Worlds }
|
||||
export { Files, Index, Logs, Mods, Overview, Worlds }
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
<script setup lang="ts">
|
||||
import { PlusIcon } from '@modrinth/assets'
|
||||
import { Button, injectNotificationManager } from '@modrinth/ui'
|
||||
import { Button, injectNotificationManager, NavTabs } from '@modrinth/ui'
|
||||
import { inject, onUnmounted, ref, shallowRef } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
import { NewInstanceImage } from '@/assets/icons'
|
||||
import NavTabs from '@/components/ui/NavTabs.vue'
|
||||
import { profile_listener } from '@/helpers/events.js'
|
||||
import { list } from '@/helpers/profile.js'
|
||||
import { useBreadcrumbs } from '@/store/breadcrumbs.js'
|
||||
|
||||
@@ -170,10 +170,7 @@
|
||||
},
|
||||
{
|
||||
label: 'Versions',
|
||||
href: {
|
||||
path: `/project/${$route.params.id}/versions`,
|
||||
query: instanceFilters,
|
||||
},
|
||||
href: versionsHref,
|
||||
subpages: ['version'],
|
||||
shown: projectV3?.minecraft_server == null,
|
||||
},
|
||||
@@ -224,6 +221,7 @@ import {
|
||||
import {
|
||||
ButtonStyled,
|
||||
injectNotificationManager,
|
||||
NavTabs,
|
||||
OverflowMenu,
|
||||
ProjectBackgroundGradient,
|
||||
ProjectHeader,
|
||||
@@ -242,7 +240,6 @@ import { useRoute, useRouter } from 'vue-router'
|
||||
|
||||
import ContextMenu from '@/components/ui/ContextMenu.vue'
|
||||
import InstanceIndicator from '@/components/ui/InstanceIndicator.vue'
|
||||
import NavTabs from '@/components/ui/NavTabs.vue'
|
||||
import {
|
||||
get_organization,
|
||||
get_project,
|
||||
@@ -318,6 +315,21 @@ const instanceFilters = computed(() => {
|
||||
return { l: loaders, g: instance.value.game_version }
|
||||
})
|
||||
|
||||
const versionsHref = computed(() => {
|
||||
const base = `/project/${route.params.id}/versions`
|
||||
const filters = instanceFilters.value
|
||||
const params = new URLSearchParams()
|
||||
for (const [key, val] of Object.entries(filters)) {
|
||||
if (Array.isArray(val)) {
|
||||
for (const v of val) params.append(key, v)
|
||||
} else if (val) {
|
||||
params.append(key, String(val))
|
||||
}
|
||||
}
|
||||
const qs = params.toString()
|
||||
return qs ? `${base}?${qs}` : base
|
||||
})
|
||||
|
||||
const [allLoaders, allGameVersions] = await Promise.all([
|
||||
get_loaders().catch(handleError).then(ref),
|
||||
get_game_versions().catch(handleError).then(ref),
|
||||
|
||||
@@ -1,13 +1,20 @@
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import type { ContentInstallInstance, ContentItem } from '@modrinth/ui'
|
||||
import type { ContentInstallInstance, ContentInstallProjectInfo, ContentItem } from '@modrinth/ui'
|
||||
import { createContext } from '@modrinth/ui'
|
||||
import { convertFileSrc } from '@tauri-apps/api/core'
|
||||
import { openUrl } from '@tauri-apps/plugin-opener'
|
||||
import dayjs from 'dayjs'
|
||||
import { nextTick, type Ref, ref } from 'vue'
|
||||
import type { Router } from 'vue-router'
|
||||
|
||||
import { trackEvent } from '@/helpers/analytics'
|
||||
import { get_project, get_project_v3_many, get_version_many } from '@/helpers/cache.js'
|
||||
import {
|
||||
get_organization,
|
||||
get_project,
|
||||
get_project_v3_many,
|
||||
get_team,
|
||||
get_version_many,
|
||||
} from '@/helpers/cache.js'
|
||||
import { create_profile_and_install as packInstall } from '@/helpers/pack'
|
||||
import {
|
||||
add_project_from_version,
|
||||
@@ -19,6 +26,7 @@ import {
|
||||
remove_project,
|
||||
} from '@/helpers/profile.js'
|
||||
import { get_game_versions } from '@/helpers/tags'
|
||||
import type { GameInstance, InstanceLoader } from '@/helpers/types'
|
||||
import {
|
||||
findPreferredVersion,
|
||||
installVersionDependencies,
|
||||
@@ -30,13 +38,8 @@ interface ModalRef {
|
||||
hide: () => void
|
||||
}
|
||||
|
||||
interface InstallConfirmModalRef {
|
||||
show: (
|
||||
project: Labrinth.Projects.v2.Project,
|
||||
version: string,
|
||||
callback: (versionId?: string) => void,
|
||||
createInstanceCallback: (profile: string) => void,
|
||||
) => void
|
||||
interface ModpackAlreadyInstalledModalRef {
|
||||
show: (instanceName: string, instancePath: string) => void
|
||||
}
|
||||
|
||||
interface IncompatibilityWarningModalRef {
|
||||
@@ -73,6 +76,7 @@ export interface ContentInstallContext {
|
||||
preferredLoader: Ref<string | null>
|
||||
preferredGameVersion: Ref<string | null>
|
||||
releaseGameVersions: Ref<Set<string>>
|
||||
projectInfo: Ref<ContentInstallProjectInfo | null>
|
||||
handleInstallToInstance: (instance: ContentInstallInstance) => Promise<void>
|
||||
handleCreateAndInstall: (data: {
|
||||
name: string
|
||||
@@ -84,7 +88,9 @@ export interface ContentInstallContext {
|
||||
handleNavigate: (instance: ContentInstallInstance) => void
|
||||
handleCancel: () => void
|
||||
setContentInstallModal: (ref: ModalRef) => void
|
||||
setInstallConfirmModal: (ref: InstallConfirmModalRef) => void
|
||||
setModpackAlreadyInstalledModal: (ref: ModpackAlreadyInstalledModalRef) => void
|
||||
handleModpackDuplicateCreateAnyway: () => Promise<void>
|
||||
handleModpackDuplicateGoToInstance: (instancePath: string) => void
|
||||
setIncompatibilityWarningModal: (ref: IncompatibilityWarningModalRef) => void
|
||||
install: (
|
||||
projectId: string,
|
||||
@@ -93,7 +99,7 @@ export interface ContentInstallContext {
|
||||
source?: string,
|
||||
callback?: (versionId?: string) => void,
|
||||
createInstanceCallback?: (profile: string) => void,
|
||||
hints?: { preferredLoader?: string; preferredGameVersion?: string },
|
||||
hints?: { preferredLoader?: string; preferredGameVersion?: string; showProjectInfo?: boolean },
|
||||
) => Promise<void>
|
||||
installingItems: Ref<Map<string, ContentItem[]>>
|
||||
}
|
||||
@@ -116,6 +122,7 @@ export function createContentInstall(opts: {
|
||||
const preferredGameVersion = ref<string | null>(null)
|
||||
const releaseGameVersions = ref<Set<string>>(new Set())
|
||||
|
||||
const projectInfo = ref<ContentInstallProjectInfo | null>(null)
|
||||
const installingItems = ref<Map<string, ContentItem[]>>(new Map())
|
||||
|
||||
function addInstallingItem(
|
||||
@@ -126,17 +133,20 @@ export function createContentInstall(opts: {
|
||||
title: string
|
||||
icon_url?: string | null
|
||||
project_type?: string
|
||||
organization?: string | null
|
||||
team?: string
|
||||
},
|
||||
version?: Labrinth.Versions.v2.Version,
|
||||
) {
|
||||
const primaryFile = version?.files?.find((f) => f.primary) ?? version?.files?.[0]
|
||||
const placeholder: ContentItem = {
|
||||
id: `__installing_${project.id}`,
|
||||
file_name: `__installing_${project.id}`,
|
||||
project: {
|
||||
id: project.id,
|
||||
slug: project.slug ?? null,
|
||||
slug: project.slug ?? '',
|
||||
title: project.title,
|
||||
icon_url: project.icon_url ?? null,
|
||||
icon_url: project.icon_url ?? undefined,
|
||||
},
|
||||
version: version
|
||||
? {
|
||||
@@ -156,6 +166,60 @@ export function createContentInstall(opts: {
|
||||
if (items.some((i) => i.file_name === placeholder.file_name)) return
|
||||
next.set(instancePath, [...items, placeholder])
|
||||
installingItems.value = next
|
||||
|
||||
if (project.organization) {
|
||||
get_organization(project.organization)
|
||||
.then((org: { id: string; slug: string; name: string; icon_url?: string }) => {
|
||||
updateInstallingItem(instancePath, placeholder.file_name, {
|
||||
owner: {
|
||||
id: org.id,
|
||||
name: org.name,
|
||||
avatar_url: org.icon_url,
|
||||
type: 'organization',
|
||||
},
|
||||
})
|
||||
})
|
||||
.catch(() => {})
|
||||
} else if (project.team) {
|
||||
get_team(project.team)
|
||||
.then(
|
||||
(
|
||||
members: {
|
||||
user: { id: string; username: string; avatar_url?: string }
|
||||
is_owner: boolean
|
||||
}[],
|
||||
) => {
|
||||
const owner = members.find((m) => m.is_owner)
|
||||
if (owner) {
|
||||
updateInstallingItem(instancePath, placeholder.file_name, {
|
||||
owner: {
|
||||
id: owner.user.id,
|
||||
name: owner.user.username,
|
||||
avatar_url: owner.user.avatar_url,
|
||||
type: 'user',
|
||||
},
|
||||
})
|
||||
}
|
||||
},
|
||||
)
|
||||
.catch(() => {})
|
||||
}
|
||||
}
|
||||
|
||||
function updateInstallingItem(
|
||||
instancePath: string,
|
||||
fileName: string,
|
||||
updates: Partial<ContentItem>,
|
||||
) {
|
||||
const next = new Map(installingItems.value)
|
||||
const items = next.get(instancePath)
|
||||
if (!items) return
|
||||
const index = items.findIndex((i) => i.file_name === fileName)
|
||||
if (index === -1) return
|
||||
const updated = [...items]
|
||||
updated[index] = { ...updated[index], ...updates }
|
||||
next.set(instancePath, updated)
|
||||
installingItems.value = next
|
||||
}
|
||||
|
||||
function removeInstallingItems(instancePath: string, projectIds: string[]) {
|
||||
@@ -174,18 +238,26 @@ export function createContentInstall(opts: {
|
||||
}
|
||||
|
||||
let modalRef: ModalRef | null = null
|
||||
let installConfirmModalRef: InstallConfirmModalRef | null = null
|
||||
let modpackAlreadyInstalledModalRef: ModpackAlreadyInstalledModalRef | null = null
|
||||
let incompatibilityWarningModalRef: IncompatibilityWarningModalRef | null = null
|
||||
let currentProject: Labrinth.Projects.v2.Project | null = null
|
||||
let currentVersions: Labrinth.Versions.v2.Version[] = []
|
||||
let currentCallback: (versionId?: string) => void = () => {}
|
||||
let profileMap: Record<string, GameInstance> = {}
|
||||
|
||||
let pendingModpackInstall: {
|
||||
project: Labrinth.Projects.v2.Project
|
||||
version: string
|
||||
source: string
|
||||
callback: (versionId?: string) => void
|
||||
createInstanceCallback: (profile: string) => void
|
||||
} | null = null
|
||||
|
||||
async function showModInstallModal(
|
||||
project: Labrinth.Projects.v2.Project,
|
||||
versions: Labrinth.Versions.v2.Version[],
|
||||
onInstall: (versionId?: string) => void,
|
||||
hints?: { preferredLoader?: string; preferredGameVersion?: string },
|
||||
hints?: { preferredLoader?: string; preferredGameVersion?: string; showProjectInfo?: boolean },
|
||||
) {
|
||||
currentProject = project
|
||||
currentVersions = versions
|
||||
@@ -194,6 +266,58 @@ export function createContentInstall(opts: {
|
||||
instances.value = []
|
||||
defaultTab.value = 'existing'
|
||||
|
||||
if (hints?.showProjectInfo) {
|
||||
projectInfo.value = {
|
||||
title: project.title,
|
||||
iconUrl: project.icon_url,
|
||||
link: `/project/${project.slug ?? project.id}`,
|
||||
}
|
||||
if (project.organization) {
|
||||
get_organization(project.organization)
|
||||
.then((org: { id: string; slug: string; name: string; icon_url?: string }) => {
|
||||
if (projectInfo.value) {
|
||||
const orgSlug = org.slug ?? org.id
|
||||
projectInfo.value = {
|
||||
...projectInfo.value,
|
||||
owner: {
|
||||
name: org.name,
|
||||
iconUrl: org.icon_url,
|
||||
circle: false,
|
||||
link: () => openUrl(`https://modrinth.com/organization/${orgSlug}`),
|
||||
},
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch(() => {})
|
||||
} else if (project.team) {
|
||||
get_team(project.team)
|
||||
.then(
|
||||
(
|
||||
members: {
|
||||
user: { id: string; username: string; avatar_url?: string }
|
||||
is_owner: boolean
|
||||
}[],
|
||||
) => {
|
||||
const owner = members.find((m) => m.is_owner)
|
||||
if (owner && projectInfo.value) {
|
||||
projectInfo.value = {
|
||||
...projectInfo.value,
|
||||
owner: {
|
||||
name: owner.user.username,
|
||||
iconUrl: owner.user.avatar_url,
|
||||
circle: true,
|
||||
link: () => openUrl(`https://modrinth.com/user/${owner.user.username}`),
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
.catch(() => {})
|
||||
}
|
||||
} else {
|
||||
projectInfo.value = null
|
||||
}
|
||||
|
||||
const loaderSet = new Set<string>()
|
||||
const gameVersionSet = new Set<string>()
|
||||
for (const v of versions) {
|
||||
@@ -318,10 +442,10 @@ export function createContentInstall(opts: {
|
||||
trackEvent('ProjectInstall', {
|
||||
loader: profile.loader,
|
||||
game_version: profile.game_version,
|
||||
id: currentProject.id,
|
||||
id: currentProject!.id,
|
||||
version_id: version.id,
|
||||
project_type: currentProject.project_type,
|
||||
title: currentProject.title,
|
||||
project_type: currentProject!.project_type,
|
||||
title: currentProject!.title,
|
||||
source: 'ProjectInstallModal',
|
||||
})
|
||||
currentCallback(version.id)
|
||||
@@ -372,10 +496,10 @@ export function createContentInstall(opts: {
|
||||
trackEvent('ProjectInstall', {
|
||||
loader: data.loader,
|
||||
game_version: data.gameVersion,
|
||||
id: currentProject.id,
|
||||
id: currentProject!.id,
|
||||
version_id: version.id,
|
||||
project_type: currentProject.project_type,
|
||||
title: currentProject.title,
|
||||
project_type: currentProject!.project_type,
|
||||
title: currentProject!.title,
|
||||
source: 'ProjectInstallModal',
|
||||
})
|
||||
|
||||
@@ -402,35 +526,35 @@ export function createContentInstall(opts: {
|
||||
source: string = 'unknown',
|
||||
callback: (versionId?: string) => void = () => {},
|
||||
createInstanceCallback: (profile: string) => void = () => {},
|
||||
hints?: { preferredLoader?: string; preferredGameVersion?: string },
|
||||
hints?: { preferredLoader?: string; preferredGameVersion?: string; showProjectInfo?: boolean },
|
||||
) {
|
||||
const project: Labrinth.Projects.v2.Project = await get_project(projectId, 'must_revalidate')
|
||||
|
||||
if (project.project_type === 'modpack') {
|
||||
const version = versionId ?? project.versions[project.versions.length - 1]
|
||||
const packs = await list()
|
||||
const existingPack = packs.find((pack) => pack.linked_data?.project_id === project.id)
|
||||
|
||||
if (
|
||||
packs.length === 0 ||
|
||||
!packs.find((pack) => pack.linked_data?.project_id === project.id)
|
||||
) {
|
||||
await packInstall(
|
||||
project.id,
|
||||
version,
|
||||
project.title,
|
||||
project.icon_url,
|
||||
createInstanceCallback,
|
||||
)
|
||||
trackEvent('PackInstall', {
|
||||
id: project.id,
|
||||
version_id: version,
|
||||
title: project.title,
|
||||
source,
|
||||
})
|
||||
callback(version)
|
||||
} else {
|
||||
installConfirmModalRef?.show(project, version, callback, createInstanceCallback)
|
||||
if (existingPack) {
|
||||
pendingModpackInstall = { project, version, source, callback, createInstanceCallback }
|
||||
modpackAlreadyInstalledModalRef?.show(existingPack.name, existingPack.path)
|
||||
return
|
||||
}
|
||||
|
||||
await packInstall(
|
||||
project.id,
|
||||
version,
|
||||
project.title,
|
||||
project.icon_url,
|
||||
createInstanceCallback,
|
||||
)
|
||||
trackEvent('PackInstall', {
|
||||
id: project.id,
|
||||
version_id: version,
|
||||
title: project.title,
|
||||
source,
|
||||
})
|
||||
callback(version)
|
||||
} else if (instancePath) {
|
||||
const [instanceOrNull, instanceProjects, versions] = await Promise.all([
|
||||
get(instancePath),
|
||||
@@ -508,6 +632,7 @@ export function createContentInstall(opts: {
|
||||
preferredLoader,
|
||||
preferredGameVersion,
|
||||
releaseGameVersions,
|
||||
projectInfo,
|
||||
handleInstallToInstance,
|
||||
handleCreateAndInstall,
|
||||
handleNavigate,
|
||||
@@ -515,8 +640,31 @@ export function createContentInstall(opts: {
|
||||
setContentInstallModal(ref: ModalRef) {
|
||||
modalRef = ref
|
||||
},
|
||||
setInstallConfirmModal(ref: InstallConfirmModalRef) {
|
||||
installConfirmModalRef = ref
|
||||
setModpackAlreadyInstalledModal(ref: ModpackAlreadyInstalledModalRef) {
|
||||
modpackAlreadyInstalledModalRef = ref
|
||||
},
|
||||
async handleModpackDuplicateCreateAnyway() {
|
||||
if (!pendingModpackInstall) return
|
||||
const { project, version, source, callback, createInstanceCallback } = pendingModpackInstall
|
||||
pendingModpackInstall = null
|
||||
await packInstall(
|
||||
project.id,
|
||||
version,
|
||||
project.title,
|
||||
project.icon_url,
|
||||
createInstanceCallback,
|
||||
)
|
||||
trackEvent('PackInstall', {
|
||||
id: project.id,
|
||||
version_id: version,
|
||||
title: project.title,
|
||||
source,
|
||||
})
|
||||
callback(version)
|
||||
},
|
||||
handleModpackDuplicateGoToInstance(instancePath: string) {
|
||||
pendingModpackInstall = null
|
||||
opts.router.push(`/instance/${encodeURIComponent(instancePath)}/`)
|
||||
},
|
||||
setIncompatibilityWarningModal(ref: IncompatibilityWarningModalRef) {
|
||||
incompatibilityWarningModalRef = ref
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
import { createContext } from '@modrinth/ui'
|
||||
import type { ComputedRef, Ref } from 'vue'
|
||||
|
||||
import type { GameInstance } from '@/helpers/types'
|
||||
|
||||
export interface InstanceSettingsContext {
|
||||
instance: ComputedRef<GameInstance>
|
||||
offline?: boolean
|
||||
isMinecraftServer: Ref<boolean>
|
||||
onUnlinked: () => void
|
||||
}
|
||||
|
||||
export const [injectInstanceSettings, provideInstanceSettings] =
|
||||
createContext<InstanceSettingsContext>('InstanceSettingsModal', 'instanceSettings')
|
||||
@@ -46,11 +46,24 @@ export interface ServerInstallContext {
|
||||
showAddServerToInstanceModal: (serverName: string, serverAddress: string) => void
|
||||
}
|
||||
|
||||
export const [injectServerInstall, provideServerInstall] = createContext<ServerInstallContext>(
|
||||
let _serverInstallSingleton: ServerInstallContext | null = null
|
||||
|
||||
const [_rawInjectServerInstall, provideServerInstall] = createContext<ServerInstallContext>(
|
||||
'root',
|
||||
'serverInstall',
|
||||
)
|
||||
|
||||
export { provideServerInstall }
|
||||
|
||||
export function injectServerInstall(): ServerInstallContext {
|
||||
try {
|
||||
return _rawInjectServerInstall()
|
||||
} catch {
|
||||
if (_serverInstallSingleton) return _serverInstallSingleton
|
||||
throw new Error('ServerInstall context not available')
|
||||
}
|
||||
}
|
||||
|
||||
export function createServerInstall(opts: {
|
||||
router: Router
|
||||
handleError: (err: unknown) => void
|
||||
@@ -345,7 +358,7 @@ export function createServerInstall(opts: {
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
const context: ServerInstallContext = {
|
||||
installingServerProjects,
|
||||
startInstallingServer,
|
||||
stopInstallingServer,
|
||||
@@ -365,4 +378,7 @@ export function createServerInstall(opts: {
|
||||
addServerToInstanceModalRef?.show(serverName, serverAddress)
|
||||
},
|
||||
}
|
||||
|
||||
_serverInstallSingleton = context
|
||||
return context
|
||||
}
|
||||
|
||||
@@ -1,27 +1,71 @@
|
||||
import type { AbstractWebNotificationManager, CreationFlowContextValue } from '@modrinth/ui'
|
||||
import { provide, useTemplateRef } from 'vue'
|
||||
import type {
|
||||
AbstractWebNotificationManager,
|
||||
CreationFlowContextValue,
|
||||
CreationFlowModal,
|
||||
} from '@modrinth/ui'
|
||||
import { provide, ref, useTemplateRef } from 'vue'
|
||||
import type { ComponentExposed } from 'vue-component-type-helpers'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
import type ModpackAlreadyInstalledModal from '@/components/ui/modal/ModpackAlreadyInstalledModal.vue'
|
||||
import { trackEvent } from '@/helpers/analytics'
|
||||
import { get_project_versions, get_search_results } from '@/helpers/cache.js'
|
||||
import { import_instance } from '@/helpers/import.js'
|
||||
import { create_profile_and_install, create_profile_and_install_from_file } from '@/helpers/pack'
|
||||
import { create, list } from '@/helpers/profile.js'
|
||||
import type { InstanceLoader } from '@/helpers/types'
|
||||
|
||||
export function setupCreationModal(notificationManager: AbstractWebNotificationManager) {
|
||||
const { handleError } = notificationManager
|
||||
const router = useRouter()
|
||||
|
||||
const installationModal = useTemplateRef('installationModal')
|
||||
provide('showCreationModal', async () => {
|
||||
const installationModal =
|
||||
useTemplateRef<ComponentExposed<typeof CreationFlowModal>>('installationModal')
|
||||
const modpackAlreadyInstalledModal = ref<InstanceType<typeof ModpackAlreadyInstalledModal>>()
|
||||
|
||||
function setModpackAlreadyInstalledModal(
|
||||
modal: InstanceType<typeof ModpackAlreadyInstalledModal>,
|
||||
) {
|
||||
modpackAlreadyInstalledModal.value = modal
|
||||
}
|
||||
|
||||
async function fetchExistingInstanceNames(): Promise<string[]> {
|
||||
const instances = await list().catch(handleError)
|
||||
installationModal.value?.show(instances?.length ?? 0)
|
||||
return instances?.map((i) => i.name) ?? []
|
||||
}
|
||||
|
||||
provide('showCreationModal', () => {
|
||||
installationModal.value?.show()
|
||||
})
|
||||
|
||||
async function handleCreate(config: CreationFlowContextValue) {
|
||||
installationModal.value?.hide()
|
||||
async function proceedWithModpackCreation(
|
||||
projectId: string,
|
||||
versionId: string,
|
||||
name: string,
|
||||
iconUrl?: string,
|
||||
) {
|
||||
await create_profile_and_install(projectId, versionId, name, iconUrl).catch(handleError)
|
||||
trackEvent('InstanceCreate', { source: 'CreationModalModpack' })
|
||||
}
|
||||
|
||||
async function handleCreate(config: CreationFlowContextValue) {
|
||||
try {
|
||||
if (config.modpackSelection.value) {
|
||||
const { projectId, versionId, name, iconUrl } = config.modpackSelection.value
|
||||
|
||||
const instances = await list().catch(handleError)
|
||||
const existingInstance = instances?.find((i) => i.linked_data?.project_id === projectId)
|
||||
|
||||
if (existingInstance) {
|
||||
pendingModpackCreation.value = { projectId, versionId, name, iconUrl }
|
||||
installationModal.value?.hide()
|
||||
modpackAlreadyInstalledModal.value?.show(existingInstance.name, existingInstance.path)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
installationModal.value?.hide()
|
||||
|
||||
if (config.isImportMode.value) {
|
||||
for (const [launcherName, instanceSet] of Object.entries(
|
||||
config.importSelectedInstances.value,
|
||||
@@ -38,8 +82,7 @@ export function setupCreationModal(notificationManager: AbstractWebNotificationM
|
||||
|
||||
if (config.modpackSelection.value) {
|
||||
const { projectId, versionId, name, iconUrl } = config.modpackSelection.value
|
||||
await create_profile_and_install(projectId, versionId, name, iconUrl).catch(handleError)
|
||||
trackEvent('InstanceCreate', { source: 'CreationModalModpack' })
|
||||
await proceedWithModpackCreation(projectId, versionId, name, iconUrl)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -57,29 +100,44 @@ export function setupCreationModal(notificationManager: AbstractWebNotificationM
|
||||
? null
|
||||
: (config.selectedLoaderVersion.value ?? config.loaderVersionType.value)
|
||||
const iconPath = config.instanceIconPath.value ?? null
|
||||
const name = config.instanceName.value.trim() || config.autoInstanceName.value
|
||||
|
||||
await create(
|
||||
config.instanceName.value,
|
||||
config.selectedGameVersion.value,
|
||||
loader,
|
||||
name,
|
||||
config.selectedGameVersion.value!,
|
||||
loader as InstanceLoader,
|
||||
loaderVersion,
|
||||
iconPath,
|
||||
false,
|
||||
).catch(handleError)
|
||||
|
||||
trackEvent('InstanceCreate', {
|
||||
profile_name: config.instanceName.value,
|
||||
game_version: config.selectedGameVersion.value,
|
||||
loader,
|
||||
loader_version: loaderVersion,
|
||||
has_icon: !!iconPath,
|
||||
source: 'CreationModal',
|
||||
})
|
||||
} catch (err) {
|
||||
handleError(err)
|
||||
handleError(err as Error)
|
||||
}
|
||||
}
|
||||
|
||||
const pendingModpackCreation = ref<{
|
||||
projectId: string
|
||||
versionId: string
|
||||
name: string
|
||||
iconUrl?: string
|
||||
} | null>(null)
|
||||
|
||||
async function handleModpackDuplicateCreateAnyway() {
|
||||
if (!pendingModpackCreation.value) return
|
||||
const { projectId, versionId, name, iconUrl } = pendingModpackCreation.value
|
||||
pendingModpackCreation.value = null
|
||||
await proceedWithModpackCreation(projectId, versionId, name, iconUrl)
|
||||
}
|
||||
|
||||
function handleModpackDuplicateGoToInstance(instancePath: string) {
|
||||
pendingModpackCreation.value = null
|
||||
router.push(`/instance/${encodeURIComponent(instancePath)}/`)
|
||||
}
|
||||
|
||||
function handleBrowseModpacks() {
|
||||
installationModal.value?.hide()
|
||||
router.push('/browse/modpack')
|
||||
@@ -102,9 +160,13 @@ export function setupCreationModal(notificationManager: AbstractWebNotificationM
|
||||
|
||||
return {
|
||||
installationModal,
|
||||
fetchExistingInstanceNames,
|
||||
handleCreate,
|
||||
handleBrowseModpacks,
|
||||
searchModpacks,
|
||||
getProjectVersions,
|
||||
setModpackAlreadyInstalledModal,
|
||||
handleModpackDuplicateCreateAnyway,
|
||||
handleModpackDuplicateGoToInstance,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,7 +41,8 @@ export default new createRouter({
|
||||
name: 'Discover content',
|
||||
component: Pages.Browse,
|
||||
meta: {
|
||||
breadcrumb: [{ name: 'Discover content' }],
|
||||
useContext: true,
|
||||
breadcrumb: [{ name: '?BrowseTitle' }],
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -178,6 +179,15 @@ export default new createRouter({
|
||||
breadcrumb: [{ name: '?Instance', link: '/instance/{id}/' }, { name: 'Content' }],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'files',
|
||||
name: 'Files',
|
||||
component: Instance.Files,
|
||||
meta: {
|
||||
useRootContext: true,
|
||||
breadcrumb: [{ name: '?Instance', link: '/instance/{id}/' }, { name: 'Files' }],
|
||||
},
|
||||
},
|
||||
{
|
||||
path: 'logs',
|
||||
name: 'Logs',
|
||||
|
||||
@@ -8,6 +8,7 @@ repository = "https://github.com/modrinth/code/apps/app/"
|
||||
license = "GPL-3.0-only"
|
||||
|
||||
[dependencies]
|
||||
async_zip = { workspace = true, features = ["deflate", "tokio-fs"] }
|
||||
chrono = { workspace = true }
|
||||
daedalus = { workspace = true }
|
||||
dashmap = { workspace = true }
|
||||
@@ -28,6 +29,7 @@ tauri = { workspace = true, features = [
|
||||
] }
|
||||
tauri-plugin-deep-link = { workspace = true }
|
||||
tauri-plugin-dialog = { workspace = true }
|
||||
tauri-plugin-fs = { workspace = true }
|
||||
tauri-plugin-http = { workspace = true }
|
||||
tauri-plugin-opener = { workspace = true }
|
||||
tauri-plugin-os = { workspace = true }
|
||||
|
||||
@@ -263,6 +263,14 @@ fn main() {
|
||||
DefaultPermissionRule::AllowAllCommands,
|
||||
),
|
||||
)
|
||||
.plugin(
|
||||
"files",
|
||||
InlinedPlugin::new()
|
||||
.commands(&["file_extract_zip", "file_save_as"])
|
||||
.default_permission(
|
||||
DefaultPermissionRule::AllowAllCommands,
|
||||
),
|
||||
)
|
||||
.plugin(
|
||||
"friends",
|
||||
InlinedPlugin::new()
|
||||
|
||||
@@ -25,6 +25,32 @@
|
||||
"allow": [{ "url": "https://modrinth.com/*" }, { "url": "https://*.modrinth.com/*" }]
|
||||
},
|
||||
|
||||
"dialog:allow-save",
|
||||
|
||||
"fs:allow-read-dir",
|
||||
"fs:allow-read-file",
|
||||
"fs:allow-read-text-file",
|
||||
"fs:allow-write-file",
|
||||
"fs:allow-write-text-file",
|
||||
"fs:allow-create",
|
||||
"fs:allow-remove",
|
||||
"fs:allow-rename",
|
||||
"fs:allow-copy-file",
|
||||
"fs:allow-stat",
|
||||
"fs:allow-exists",
|
||||
"fs:allow-mkdir",
|
||||
{
|
||||
"identifier": "fs:scope",
|
||||
"allow": [
|
||||
{ "path": "$APPDATA/profiles" },
|
||||
{ "path": "$APPDATA/profiles/**" },
|
||||
{ "path": "$APPCONFIG/profiles" },
|
||||
{ "path": "$APPCONFIG/profiles/**" },
|
||||
{ "path": "$CONFIG/profiles" },
|
||||
{ "path": "$CONFIG/profiles/**" }
|
||||
]
|
||||
},
|
||||
|
||||
"auth:default",
|
||||
"import:default",
|
||||
"jre:default",
|
||||
@@ -37,6 +63,7 @@
|
||||
"process:default",
|
||||
"profile:default",
|
||||
"cache:default",
|
||||
"files:default",
|
||||
"settings:default",
|
||||
"tags:default",
|
||||
"utils:default",
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
use crate::api::Result;
|
||||
use async_zip::base::read::seek::ZipFileReader;
|
||||
use serde::Serialize;
|
||||
use std::io::Cursor;
|
||||
use tauri::Runtime;
|
||||
use tauri_plugin_dialog::DialogExt;
|
||||
use theseus::profile::get_full_path;
|
||||
|
||||
pub fn init<R: Runtime>() -> tauri::plugin::TauriPlugin<R> {
|
||||
tauri::plugin::Builder::new("files")
|
||||
.invoke_handler(tauri::generate_handler![
|
||||
file_extract_zip,
|
||||
file_save_as,
|
||||
])
|
||||
.build()
|
||||
}
|
||||
|
||||
#[derive(Serialize)]
|
||||
pub struct ExtractDryRunResult {
|
||||
modpack_name: Option<String>,
|
||||
conflicting_files: Vec<String>,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn file_extract_zip(
|
||||
instance_path: &str,
|
||||
file_path: &str,
|
||||
override_conflicts: bool,
|
||||
dry_run: bool,
|
||||
) -> Result<Option<ExtractDryRunResult>> {
|
||||
let base = get_full_path(instance_path).await?;
|
||||
let zip_path = base.join(file_path);
|
||||
let canonical_zip = tokio::fs::canonicalize(&zip_path).await?;
|
||||
let canonical_base = tokio::fs::canonicalize(&base).await?;
|
||||
if !canonical_zip.starts_with(&canonical_base) {
|
||||
return Err(theseus::Error::from(theseus::ErrorKind::OtherError(
|
||||
"file_path escapes the instance directory".to_string(),
|
||||
))
|
||||
.into());
|
||||
}
|
||||
let extract_dir = zip_path
|
||||
.parent()
|
||||
.map(|p| p.to_path_buf())
|
||||
.unwrap_or_else(|| base.clone());
|
||||
|
||||
let file_bytes = tokio::fs::read(&zip_path).await?;
|
||||
let reader = Cursor::new(file_bytes);
|
||||
|
||||
let zip_reader = ZipFileReader::with_tokio(reader).await.map_err(|e| {
|
||||
theseus::Error::from(theseus::ErrorKind::OtherError(format!(
|
||||
"Failed to read zip file: {e}"
|
||||
)))
|
||||
})?;
|
||||
|
||||
let entries: Vec<(usize, String)> = zip_reader
|
||||
.file()
|
||||
.entries()
|
||||
.iter()
|
||||
.enumerate()
|
||||
.filter_map(|(i, entry)| {
|
||||
let name = entry.filename().as_str().ok()?.to_string();
|
||||
if name.ends_with('/') {
|
||||
None
|
||||
} else {
|
||||
Some((i, name))
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
|
||||
if dry_run {
|
||||
let mut conflicting_files = Vec::new();
|
||||
let canonical_extract = tokio::fs::canonicalize(&extract_dir).await?;
|
||||
for (_, name) in &entries {
|
||||
let target = extract_dir.join(name);
|
||||
if let Some(parent) = target.parent() {
|
||||
let normalized = parent
|
||||
.canonicalize()
|
||||
.unwrap_or_else(|_| extract_dir.join(parent));
|
||||
if !normalized.starts_with(&canonical_extract) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if target.exists() {
|
||||
conflicting_files.push(name.clone());
|
||||
}
|
||||
}
|
||||
return Ok(Some(ExtractDryRunResult {
|
||||
modpack_name: None,
|
||||
conflicting_files,
|
||||
}));
|
||||
}
|
||||
|
||||
let canonical_extract_dir = tokio::fs::canonicalize(&extract_dir).await?;
|
||||
let mut zip_reader = zip_reader;
|
||||
for (index, name) in &entries {
|
||||
let target = extract_dir.join(name);
|
||||
|
||||
if !override_conflicts && target.exists() {
|
||||
continue;
|
||||
}
|
||||
|
||||
if let Some(parent) = target.parent() {
|
||||
tokio::fs::create_dir_all(parent).await?;
|
||||
let canonical_parent = tokio::fs::canonicalize(parent).await?;
|
||||
if !canonical_parent.starts_with(&canonical_extract_dir) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
let mut file_bytes = Vec::new();
|
||||
let mut entry_reader =
|
||||
zip_reader.reader_with_entry(*index).await.map_err(|e| {
|
||||
theseus::Error::from(theseus::ErrorKind::OtherError(format!(
|
||||
"Failed to read zip entry: {e}"
|
||||
)))
|
||||
})?;
|
||||
entry_reader
|
||||
.read_to_end_checked(&mut file_bytes)
|
||||
.await
|
||||
.map_err(|e| {
|
||||
theseus::Error::from(theseus::ErrorKind::OtherError(format!(
|
||||
"Failed to extract zip entry: {e}"
|
||||
)))
|
||||
})?;
|
||||
|
||||
tokio::fs::write(&target, &file_bytes).await?;
|
||||
}
|
||||
|
||||
Ok(None)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn file_save_as<R: Runtime>(
|
||||
app: tauri::AppHandle<R>,
|
||||
instance_path: &str,
|
||||
file_path: &str,
|
||||
) -> Result<()> {
|
||||
let base = get_full_path(instance_path).await?;
|
||||
let source = base.join(file_path);
|
||||
let file_name = source
|
||||
.file_name()
|
||||
.unwrap_or_default()
|
||||
.to_string_lossy()
|
||||
.to_string();
|
||||
|
||||
let (tx, rx) = tokio::sync::oneshot::channel();
|
||||
app.dialog()
|
||||
.file()
|
||||
.set_file_name(&file_name)
|
||||
.save_file(|path| {
|
||||
let _ = tx.send(path);
|
||||
});
|
||||
|
||||
if let Some(dest) = rx.await.unwrap_or(None) {
|
||||
let dest_path = std::path::PathBuf::try_from(dest).map_err(|e| {
|
||||
theseus::Error::from(theseus::ErrorKind::OtherError(format!(
|
||||
"Invalid save path: {e}"
|
||||
)))
|
||||
})?;
|
||||
tokio::fs::copy(&source, &dest_path).await?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -19,6 +19,7 @@ pub mod utils;
|
||||
|
||||
pub mod ads;
|
||||
pub mod cache;
|
||||
pub mod files;
|
||||
pub mod friends;
|
||||
pub mod worlds;
|
||||
|
||||
|
||||
@@ -151,12 +151,20 @@ pub async fn add_server_to_profile(
|
||||
name: String,
|
||||
address: String,
|
||||
pack_status: ServerPackStatus,
|
||||
project_id: Option<String>,
|
||||
content_kind: Option<String>,
|
||||
) -> Result<usize> {
|
||||
let path = get_full_path(path).await?;
|
||||
Ok(
|
||||
worlds::add_server_to_profile(&path, name, address, pack_status)
|
||||
.await?,
|
||||
let full_path = get_full_path(path).await?;
|
||||
Ok(worlds::add_server_to_profile(
|
||||
&full_path,
|
||||
path,
|
||||
name,
|
||||
address,
|
||||
pack_status,
|
||||
project_id,
|
||||
content_kind,
|
||||
)
|
||||
.await?)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
|
||||
@@ -152,6 +152,7 @@ fn main() {
|
||||
.plugin(tauri_plugin_os::init())
|
||||
.plugin(tauri_plugin_dialog::init())
|
||||
.plugin(tauri_plugin_deep_link::init())
|
||||
.plugin(tauri_plugin_fs::init())
|
||||
.plugin(tauri_plugin_opener::init())
|
||||
.plugin(
|
||||
tauri_plugin_window_state::Builder::default()
|
||||
@@ -229,6 +230,7 @@ fn main() {
|
||||
.plugin(api::tags::init())
|
||||
.plugin(api::utils::init())
|
||||
.plugin(api::cache::init())
|
||||
.plugin(api::files::init())
|
||||
.plugin(api::ads::init())
|
||||
.plugin(api::friends::init())
|
||||
.plugin(api::worlds::init())
|
||||
|
||||
@@ -114,12 +114,12 @@ pub async fn fetch_neo(
|
||||
}
|
||||
|
||||
let forge_versions = fetch_xml::<Metadata>(
|
||||
"https://maven.neoforged.net/net/neoforged/forge/maven-metadata.xml",
|
||||
"https://maven.neoforged.net/releases/net/neoforged/forge/maven-metadata.xml",
|
||||
&semaphore,
|
||||
)
|
||||
.await?;
|
||||
let neo_versions = fetch_xml::<Metadata>(
|
||||
"https://maven.neoforged.net/net/neoforged/neoforge/maven-metadata.xml",
|
||||
"https://maven.neoforged.net/releases/net/neoforged/neoforge/maven-metadata.xml",
|
||||
&semaphore,
|
||||
)
|
||||
.await?;
|
||||
@@ -133,7 +133,7 @@ pub async fn fetch_neo(
|
||||
|
||||
Ok(ForgeVersion {
|
||||
format_version: 2,
|
||||
installer_url: format!("https://maven.neoforged.net/net/neoforged/forge/{loader_version}/forge-{loader_version}-installer.jar"),
|
||||
installer_url: format!("https://maven.neoforged.net/releases/net/neoforged/forge/{loader_version}/forge-{loader_version}-installer.jar"),
|
||||
raw: loader_version,
|
||||
loader_version: version_split,
|
||||
game_version: "1.20.1".to_string(), // All NeoForge Forge versions are for 1.20.1
|
||||
@@ -159,7 +159,7 @@ pub async fn fetch_neo(
|
||||
|
||||
Ok(ForgeVersion {
|
||||
format_version: 2,
|
||||
installer_url: format!("https://maven.neoforged.net/net/neoforged/neoforge/{loader_version}/neoforge-{loader_version}-installer.jar"),
|
||||
installer_url: format!("https://maven.neoforged.net/releases/net/neoforged/neoforge/{loader_version}/neoforge-{loader_version}-installer.jar"),
|
||||
loader_version: loader_version.clone(),
|
||||
raw: loader_version,
|
||||
game_version,
|
||||
|
||||
@@ -115,7 +115,7 @@ export default defineNuxtConfig({
|
||||
await import('./src/templates/docs/index.ts').then((m) => m.default),
|
||||
)
|
||||
const blogArticles = await import('@modrinth/blog').then((m) => m.articles)
|
||||
const { getChangelog } = await import('@modrinth/utils')
|
||||
const { getChangelog } = await import('@modrinth/blog')
|
||||
|
||||
nitroConfig.prerender = nitroConfig.prerender || {}
|
||||
nitroConfig.prerender.routes = nitroConfig.prerender.routes || []
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
"semver": "^7.5.4",
|
||||
"three": "^0.172.0",
|
||||
"vue-confetti-explosion": "^1.0.2",
|
||||
"vue-multiselect": "3.0.0-alpha.2",
|
||||
"vue-router": "*",
|
||||
"vue-typed-virtual-list": "^1.0.10",
|
||||
"vue3-ace-editor": "^2.2.4",
|
||||
"vue3-apexcharts": "^1.5.2",
|
||||
|
||||
@@ -446,13 +446,6 @@ textarea {
|
||||
}
|
||||
}
|
||||
|
||||
button,
|
||||
input[type='button'] {
|
||||
cursor: pointer;
|
||||
border: none;
|
||||
outline: 2px solid transparent;
|
||||
}
|
||||
|
||||
kbd {
|
||||
background-color: var(--color-code-bg);
|
||||
color: var(--color-code-text);
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
<template>
|
||||
<NewModal ref="modal" fade="warning" width="550px">
|
||||
<template #title>
|
||||
<div class="flex items-center gap-2">
|
||||
<span class="text-lg font-extrabold text-contrast">Transfer</span>
|
||||
<Avatar :src="organization.icon_url" :alt="organization.name" size="xs" />
|
||||
<span class="text-lg font-extrabold text-contrast">{{ organization.name }}</span>
|
||||
</div>
|
||||
</template>
|
||||
<div class="flex flex-col gap-4">
|
||||
<Admonition type="warning" header="Beware of scams">
|
||||
Do not transfer organizations to buyers. This is a common scam and against our TOS. If you
|
||||
encounter a buyer, please
|
||||
<a
|
||||
href="https://support.modrinth.com"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="underline"
|
||||
>contact support</a
|
||||
>.
|
||||
</Admonition>
|
||||
<div
|
||||
class="grid grid-cols-[1fr_auto_1fr] items-center justify-center gap-6 rounded-2xl bg-surface-2 p-4"
|
||||
>
|
||||
<div class="flex items-center gap-2">
|
||||
<Avatar :src="currentOwner.avatar_url" :alt="currentOwner.username" size="xs" circle />
|
||||
<div class="flex flex-col items-start justify-start gap-1">
|
||||
<span class="font-medium text-contrast">{{ currentOwner.username }}</span>
|
||||
<span class="text-sm text-secondary">{{ currentOwner.role }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<RightArrowIcon class="h-6 w-6 text-secondary" />
|
||||
<div class="flex items-center gap-2">
|
||||
<Avatar :src="transferTo.avatar_url" :alt="transferTo.username" size="xs" circle />
|
||||
<div class="flex flex-col items-start justify-start gap-1">
|
||||
<span class="font-medium text-contrast">{{ transferTo.username }} </span>
|
||||
<span class="text-sm text-secondary">{{ transferTo.role }} </span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="m-0 flex flex-col gap-1 pl-6 text-secondary">
|
||||
<li>You will immediately lose owner access to this organization</li>
|
||||
<li>The new owner can modify or delete the organization and all its projects</li>
|
||||
<li>This action cannot be undone</li>
|
||||
</ul>
|
||||
<div>
|
||||
<p class="m-0 mb-2">
|
||||
To confirm this transfer, type
|
||||
<span class="font-bold text-contrast">{{ organization.name }}</span> below
|
||||
</p>
|
||||
<StyledInput
|
||||
v-model="confirmationText"
|
||||
:placeholder="`Enter ${organization.name}`"
|
||||
wrapper-class="w-full"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<template #actions>
|
||||
<div class="flex justify-end gap-2">
|
||||
<ButtonStyled>
|
||||
<button @click="hide">
|
||||
<XIcon />
|
||||
Cancel
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="red">
|
||||
<button :disabled="!isConfirmEnabled" @click="onConfirmClick">
|
||||
<TransferIcon />
|
||||
Transfer ownership
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { RightArrowIcon, TransferIcon, XIcon } from '@modrinth/assets'
|
||||
import { Admonition, Avatar, ButtonStyled, NewModal, StyledInput } from '@modrinth/ui'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
const props = defineProps<{
|
||||
organization: { name: string; icon_url: string | null }
|
||||
currentOwner: { avatar_url: string | null; username: string; role: string }
|
||||
transferTo: { avatar_url: string | null; username: string; role: string }
|
||||
onConfirm: () => void
|
||||
}>()
|
||||
|
||||
const modal = ref<InstanceType<typeof NewModal>>()
|
||||
const confirmationText = ref('')
|
||||
|
||||
const isConfirmEnabled = computed(
|
||||
() =>
|
||||
!!props.organization.name &&
|
||||
confirmationText.value.toLowerCase().trim() === props.organization.name.toLowerCase().trim(),
|
||||
)
|
||||
|
||||
function show(e?: MouseEvent) {
|
||||
confirmationText.value = ''
|
||||
modal.value?.show(e)
|
||||
}
|
||||
|
||||
function hide() {
|
||||
modal.value?.hide()
|
||||
}
|
||||
|
||||
function onConfirmClick() {
|
||||
hide()
|
||||
props.onConfirm()
|
||||
}
|
||||
|
||||
defineExpose({ show, hide })
|
||||
</script>
|
||||
@@ -0,0 +1,125 @@
|
||||
<template>
|
||||
<NewModal ref="modal" fade="warning" width="550px">
|
||||
<template #title>
|
||||
<div class="flex items-center gap-2">
|
||||
<span class="text-lg font-extrabold text-contrast">Transfer</span>
|
||||
<Avatar :src="project.icon_url" :alt="project.name" size="xs" />
|
||||
<span class="text-lg font-extrabold text-contrast">{{ project.name }}</span>
|
||||
</div>
|
||||
</template>
|
||||
<div class="flex flex-col gap-4">
|
||||
<Admonition type="warning" header="Beware of scams">
|
||||
Do not transfer projects to buyers. This is a common scam and against our TOS. If you
|
||||
encounter a buyer, please
|
||||
<a
|
||||
href="https://support.modrinth.com"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="underline"
|
||||
>contact support</a
|
||||
>.
|
||||
</Admonition>
|
||||
<div
|
||||
class="grid grid-cols-[1fr_auto_1fr] items-center justify-center gap-6 rounded-2xl bg-surface-2 p-4"
|
||||
>
|
||||
<div class="flex items-center gap-2">
|
||||
<Avatar :src="currentOwner.avatar_url" :alt="currentOwner.username" size="xs" circle />
|
||||
<div class="flex flex-col items-start justify-start gap-1">
|
||||
<span class="font-medium text-contrast">{{ currentOwner.username }}</span>
|
||||
<span class="text-sm text-secondary">{{ currentOwner.role }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<RightArrowIcon class="h-6 w-6 text-secondary" />
|
||||
<div class="flex items-center gap-2">
|
||||
<Avatar
|
||||
:src="transferTo.avatar_url"
|
||||
:alt="transferTo.username || transferTo.name"
|
||||
size="xs"
|
||||
circle
|
||||
/>
|
||||
<div class="flex flex-col items-start justify-start gap-1">
|
||||
<span class="font-medium text-contrast">
|
||||
{{ transferTo.username || transferTo.name }}
|
||||
</span>
|
||||
<span class="text-sm text-secondary">{{ transferTo.role || 'Member' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="m-0 flex flex-col gap-1 pl-6 text-secondary">
|
||||
<li>You will immediately lose owner access to this project</li>
|
||||
<li>The new owner can modify or delete the project at any time</li>
|
||||
<li>This action cannot be undone</li>
|
||||
</ul>
|
||||
<div>
|
||||
<p class="m-0 mb-2">
|
||||
To confirm this transfer, type
|
||||
<span class="font-bold text-contrast">{{ project.name }}</span> below
|
||||
</p>
|
||||
<StyledInput
|
||||
v-model="confirmationText"
|
||||
:placeholder="`Enter ${project.name}`"
|
||||
wrapper-class="w-full"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<template #actions>
|
||||
<div class="flex justify-end gap-2">
|
||||
<ButtonStyled>
|
||||
<button @click="hide">
|
||||
<XIcon />
|
||||
Cancel
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="red">
|
||||
<button :disabled="!isConfirmEnabled" @click="onConfirmClick">
|
||||
<TransferIcon />
|
||||
Transfer ownership
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { RightArrowIcon, TransferIcon, XIcon } from '@modrinth/assets'
|
||||
import { Admonition, Avatar, ButtonStyled, NewModal, StyledInput } from '@modrinth/ui'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
const props = defineProps<{
|
||||
project: { name: string; icon_url: string | null }
|
||||
currentOwner: { avatar_url: string | null; username: string; role: string }
|
||||
transferTo: {
|
||||
avatar_url?: string | null
|
||||
username?: string
|
||||
name?: string
|
||||
role?: string
|
||||
}
|
||||
onConfirm: () => void
|
||||
}>()
|
||||
|
||||
const modal = ref<InstanceType<typeof NewModal>>()
|
||||
const confirmationText = ref('')
|
||||
|
||||
const isConfirmEnabled = computed(
|
||||
() =>
|
||||
!!props.project.name &&
|
||||
confirmationText.value.toLowerCase().trim() === props.project.name.toLowerCase().trim(),
|
||||
)
|
||||
|
||||
function show(e?: MouseEvent) {
|
||||
confirmationText.value = ''
|
||||
modal.value?.show(e)
|
||||
}
|
||||
|
||||
function hide() {
|
||||
modal.value?.hide()
|
||||
}
|
||||
|
||||
function onConfirmClick() {
|
||||
hide()
|
||||
props.onConfirm()
|
||||
}
|
||||
|
||||
defineExpose({ show, hide })
|
||||
</script>
|
||||
@@ -200,6 +200,7 @@ const developerModeCounter = ref(0)
|
||||
const state = useGeneratedState()
|
||||
|
||||
function developerModeIncrement() {
|
||||
developerModeCounter.value++
|
||||
if (developerModeCounter.value >= 5) {
|
||||
flags.value.developerMode = !flags.value.developerMode
|
||||
developerModeCounter.value = 0
|
||||
@@ -217,8 +218,6 @@ function developerModeIncrement() {
|
||||
type: 'success',
|
||||
})
|
||||
}
|
||||
} else {
|
||||
developerModeCounter.value++
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -1,19 +1,39 @@
|
||||
<script setup lang="ts">
|
||||
import { CheckIcon, MailIcon } from '@modrinth/assets'
|
||||
import { ButtonStyled } from '@modrinth/ui'
|
||||
import { ref } from 'vue'
|
||||
import { ButtonStyled, defineMessages, injectModrinthClient, useVIntl } from '@modrinth/ui'
|
||||
import { useQuery, useQueryClient } from '@tanstack/vue-query'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
import { useBaseFetch } from '~/composables/fetch.js'
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const auth = await useAuth()
|
||||
const messages = defineMessages({
|
||||
tooltipSubscribe: {
|
||||
id: 'ui.newsletter-button.tooltip',
|
||||
defaultMessage: 'Subscribe to the Modrinth newsletter',
|
||||
},
|
||||
subscribe: {
|
||||
id: 'ui.newsletter-button.subscribe',
|
||||
defaultMessage: 'Subscribe',
|
||||
},
|
||||
subscribed: {
|
||||
id: 'ui.newsletter-button.subscribed',
|
||||
defaultMessage: 'Subscribed!',
|
||||
},
|
||||
})
|
||||
|
||||
const auth = (await useAuth()) as unknown as {
|
||||
value: { user: { id: string; username: string; email: string; created: string } }
|
||||
}
|
||||
const client = injectModrinthClient()
|
||||
const queryClient = useQueryClient()
|
||||
const showSubscriptionConfirmation = ref(false)
|
||||
const showSubscribeButton = useAsyncData(
|
||||
async () => {
|
||||
|
||||
const { data: showSubscribeButton, isSuccess } = useQuery({
|
||||
queryKey: computed(() => ['newsletter', 'subscribed', auth.value?.user?.id]),
|
||||
queryFn: async () => {
|
||||
if (auth.value?.user) {
|
||||
try {
|
||||
const { subscribed } = await useBaseFetch('auth/email/subscribe', {
|
||||
method: 'GET',
|
||||
})
|
||||
const { subscribed } = await client.labrinth.auth_internal.getNewsletterStatus()
|
||||
return !subscribed
|
||||
} catch {
|
||||
return true
|
||||
@@ -22,36 +42,31 @@ const showSubscribeButton = useAsyncData(
|
||||
return false
|
||||
}
|
||||
},
|
||||
{ watch: [auth], server: false },
|
||||
)
|
||||
enabled: computed(() => !!auth.value?.user),
|
||||
})
|
||||
|
||||
async function subscribe() {
|
||||
try {
|
||||
await useBaseFetch('auth/email/subscribe', {
|
||||
method: 'POST',
|
||||
})
|
||||
await client.labrinth.auth_internal.subscribeNewsletter()
|
||||
showSubscriptionConfirmation.value = true
|
||||
} catch {
|
||||
// Ignored
|
||||
} finally {
|
||||
setTimeout(() => {
|
||||
showSubscriptionConfirmation.value = false
|
||||
showSubscribeButton.status.value = 'success'
|
||||
showSubscribeButton.data.value = false
|
||||
queryClient.setQueryData(['newsletter', 'subscribed', auth.value?.user?.id], false)
|
||||
}, 2500)
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ButtonStyled
|
||||
v-if="showSubscribeButton.status.value === 'success' && showSubscribeButton.data.value"
|
||||
color="brand"
|
||||
type="outlined"
|
||||
>
|
||||
<button v-tooltip="`Subscribe to the Modrinth newsletter`" @click="subscribe">
|
||||
<template v-if="!showSubscriptionConfirmation"> <MailIcon /> Subscribe </template>
|
||||
<template v-else> <CheckIcon /> Subscribed! </template>
|
||||
<ButtonStyled v-if="isSuccess && showSubscribeButton" color="brand" type="outlined">
|
||||
<button v-tooltip="formatMessage(messages.tooltipSubscribe)" @click="subscribe">
|
||||
<template v-if="!showSubscriptionConfirmation">
|
||||
<MailIcon /> {{ formatMessage(messages.subscribe) }}
|
||||
</template>
|
||||
<template v-else> <CheckIcon /> {{ formatMessage(messages.subscribed) }} </template>
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</template>
|
||||
|
||||
@@ -328,6 +328,7 @@ import {
|
||||
Categories,
|
||||
CopyCode,
|
||||
DoubleIcon,
|
||||
injectModrinthClient,
|
||||
injectNotificationManager,
|
||||
ProjectStatusBadge,
|
||||
useFormatDateTime,
|
||||
@@ -341,6 +342,7 @@ import { acceptTeamInvite, removeSelfFromTeam } from '~/helpers/teams'
|
||||
|
||||
import ThreadSummary from './thread/ThreadSummary.vue'
|
||||
|
||||
const client = injectModrinthClient()
|
||||
const { addNotification } = injectNotificationManager()
|
||||
const emit = defineEmits(['update:notifications'])
|
||||
const formatRelativeTime = useRelativeTime()
|
||||
@@ -407,7 +409,7 @@ async function read() {
|
||||
? props.notification.grouped_notifs.map((notif) => notif.id)
|
||||
: []),
|
||||
]
|
||||
const updateNotifs = await markAsRead(ids)
|
||||
const updateNotifs = await markAsRead(client, ids)
|
||||
const newNotifs = updateNotifs(props.notifications)
|
||||
emit('update:notifications', newNotifs)
|
||||
} catch (err) {
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
{{ analytics.error.value }}
|
||||
</div>
|
||||
</div>
|
||||
<div v-else-if="!isInitialized || analytics.loading.value" class="universal-card">
|
||||
<div v-else-if="analytics.loading.value" class="universal-card">
|
||||
<h2>
|
||||
<span class="label__title">Loading analytics...</span>
|
||||
</h2>
|
||||
@@ -315,6 +315,7 @@ import {
|
||||
Card,
|
||||
DropdownSelect,
|
||||
useCompactNumber,
|
||||
useDebugLogger,
|
||||
useFormatMoney,
|
||||
useFormatNumber,
|
||||
} from '@modrinth/ui'
|
||||
@@ -332,6 +333,7 @@ import {
|
||||
intToRgba,
|
||||
} from '~/utils/analytics.js'
|
||||
|
||||
const debug = useDebugLogger('ChartDisplay')
|
||||
const formatNumber = useFormatNumber()
|
||||
const { formatCompactNumber } = useCompactNumber()
|
||||
const formatMoney = useFormatMoney()
|
||||
@@ -339,6 +341,8 @@ const formatMoney = useFormatMoney()
|
||||
const router = useNativeRouter()
|
||||
const theme = useTheme()
|
||||
|
||||
debug('setup start', { server: import.meta.server, client: import.meta.client })
|
||||
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
projects?: any[]
|
||||
@@ -357,7 +361,12 @@ const props = withDefaults(
|
||||
},
|
||||
)
|
||||
|
||||
const projects = ref(props.projects || [])
|
||||
const projects = computed(() => props.projects || [])
|
||||
|
||||
debug('projects from props', {
|
||||
count: projects.value.length,
|
||||
ids: projects.value.map((p: any) => p.id),
|
||||
})
|
||||
|
||||
// const selectedChart = ref('downloads')
|
||||
const selectedChart = computed({
|
||||
@@ -389,6 +398,13 @@ const tinyRevenueChart = ref()
|
||||
|
||||
const selectedDisplayProjects = ref(props.projects || [])
|
||||
|
||||
watch(
|
||||
() => props.projects,
|
||||
(newProjects) => {
|
||||
selectedDisplayProjects.value = newProjects || []
|
||||
},
|
||||
)
|
||||
|
||||
const removeProjectFromDisplay = (id: string) => {
|
||||
selectedDisplayProjects.value = selectedDisplayProjects.value.filter((p) => p.id !== id)
|
||||
}
|
||||
@@ -431,46 +447,47 @@ const isUsingProjectColors = computed({
|
||||
},
|
||||
})
|
||||
|
||||
const startDate = ref(dayjs().startOf('day'))
|
||||
const endDate = ref(dayjs().endOf('day'))
|
||||
const timeResolution = ref(30)
|
||||
const isInitialized = ref(false)
|
||||
const defaultRange = props.ranges.find(
|
||||
(r) => r.getLabel([dayjs(), dayjs()]) === 'Previous 30 days',
|
||||
)!
|
||||
const initialDates = defaultRange.getDates(dayjs())
|
||||
|
||||
const internalRange: Ref<RangeObject> = ref(defaultRange)
|
||||
const startDate = ref(initialDates.startDate)
|
||||
const endDate = ref(initialDates.endDate)
|
||||
const timeResolution = ref(defaultRange.timeResolution)
|
||||
|
||||
debug('default range initialized', {
|
||||
range: defaultRange.getLabel([dayjs(), dayjs()]),
|
||||
startDate: startDate.value.toISOString(),
|
||||
endDate: endDate.value.toISOString(),
|
||||
timeResolution: timeResolution.value,
|
||||
})
|
||||
|
||||
onBeforeMount(() => {
|
||||
// Load cached data and range from localStorage - cache.
|
||||
debug('onBeforeMount')
|
||||
if (import.meta.client) {
|
||||
const rangeLabel = localStorage.getItem('analyticsSelectedRange')
|
||||
debug('localStorage range', { rangeLabel })
|
||||
if (rangeLabel) {
|
||||
const range = props.ranges.find((r) => r.getLabel([dayjs(), dayjs()]) === rangeLabel)!
|
||||
const range = props.ranges.find((r) => r.getLabel([dayjs(), dayjs()]) === rangeLabel)
|
||||
|
||||
if (range !== undefined) {
|
||||
if (range) {
|
||||
internalRange.value = range
|
||||
const ranges = range.getDates(dayjs())
|
||||
const dates = range.getDates(dayjs())
|
||||
timeResolution.value = range.timeResolution
|
||||
startDate.value = ranges.startDate
|
||||
endDate.value = ranges.endDate
|
||||
startDate.value = dates.startDate
|
||||
endDate.value = dates.endDate
|
||||
debug('range overridden from localStorage', {
|
||||
startDate: dates.startDate.toISOString(),
|
||||
endDate: dates.endDate.toISOString(),
|
||||
timeResolution: range.timeResolution,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
if (internalRange.value === null) {
|
||||
internalRange.value = props.ranges.find(
|
||||
(r) => r.getLabel([dayjs(), dayjs()]) === 'Previous 30 days',
|
||||
)!
|
||||
}
|
||||
|
||||
const ranges = selectedRange.value.getDates(dayjs())
|
||||
startDate.value = ranges.startDate
|
||||
endDate.value = ranges.endDate
|
||||
timeResolution.value = selectedRange.value.timeResolution
|
||||
|
||||
isInitialized.value = true
|
||||
})
|
||||
|
||||
const internalRange: Ref<RangeObject> = ref(null as unknown as RangeObject)
|
||||
|
||||
const selectedRange = computed({
|
||||
get: () => {
|
||||
return internalRange.value
|
||||
@@ -492,6 +509,7 @@ const selectedRange = computed({
|
||||
},
|
||||
})
|
||||
|
||||
debug('calling useFetchAllAnalytics')
|
||||
const analytics = useFetchAllAnalytics(
|
||||
resetCharts,
|
||||
projects,
|
||||
@@ -500,9 +518,15 @@ const analytics = useFetchAllAnalytics(
|
||||
startDate,
|
||||
endDate,
|
||||
timeResolution,
|
||||
isInitialized,
|
||||
)
|
||||
|
||||
debug('awaiting analytics.fetch()')
|
||||
await analytics.fetch()
|
||||
debug('analytics.fetch() resolved', {
|
||||
loading: analytics.loading.value,
|
||||
error: analytics.error.value,
|
||||
})
|
||||
|
||||
const formattedCategorySubtitle = computed(() => {
|
||||
return (
|
||||
selectedRange.value?.getLabel([dayjs(startDate.value), dayjs(endDate.value)]) ?? 'Loading...'
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user